ccwcache.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
- /*
- * File...........: linux/include/asm-s390/ccwcache.h
- * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
- * Bugreports.to..: <Linux390@de.ibm.com>
- * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000
- */
- #ifndef CCWCACHE_H
- #define CCWCACHE_H
- #include <linux/slab.h>
- #include <asm/irq.h>
- #ifndef __KERNEL__
- #define kmem_cache_t void
- #endif /* __KERNEL__ */
- typedef struct ccw_req_t {
- /* eye catcher plus queueing information */
- unsigned int magic;
- struct ccw_req_t *next; /* pointer to next ccw_req_t in queue */
- struct ccw_req_t *int_next; /* for internal queueing */
- struct ccw_req_t *int_prev; /* for internal queueing */
- /* Where to execute what... */
- void *device; /* index of the device the req is for */
- void *req; /* pointer to originating request */
- ccw1_t *cpaddr; /* address of channel program */
- char status; /* reflecting the status of this request */
- char flags; /* see below */
- short retries; /* A retry counter to be set when filling */
- /* ... and how */
- int options; /* options for execution */
- char lpm; /* logical path mask */
- void *data; /* pointer to data area */
- devstat_t *dstat; /* The device status in case of an error */
- /* these are important for recovering erroneous requests */
- struct ccw_req_t *refers; /* Does this request refer to another one? */
- void *function; /* refers to the originating ERP action */ ;
- unsigned long long expires; /* expiratioj period */
- /* these are for profiling purposes */
- unsigned long long buildclk; /* TOD-clock of request generation */
- unsigned long long startclk; /* TOD-clock of request start */
- unsigned long long stopclk; /* TOD-clock of request interrupt */
- unsigned long long endclk; /* TOD-clock of request termination */
- /* these are for internal use */
- int cplength; /* length of the channel program in CCWs */
- int datasize; /* amount of additional data in bytes */
- kmem_cache_t *cache; /* the cache this data comes from */
- } __attribute__ ((aligned(4))) ccw_req_t;
- /*
- * ccw_req_t -> status can be:
- */
- #define CQR_STATUS_EMPTY 0x00 /* request is empty */
- #define CQR_STATUS_FILLED 0x01 /* request is ready to be preocessed */
- #define CQR_STATUS_QUEUED 0x02 /* request is queued to be processed */
- #define CQR_STATUS_IN_IO 0x03 /* request is currently in IO */
- #define CQR_STATUS_DONE 0x04 /* request is completed successfully */
- #define CQR_STATUS_ERROR 0x05 /* request is completed with error */
- #define CQR_STATUS_FAILED 0x06 /* request is finally failed */
- #define CQR_STATUS_PENDING 0x07 /* request is waiting for interrupt - ERP only */
- #define CQR_FLAGS_CHAINED 0x01 /* request is chained by another (last CCW is TIC) */
- #ifdef __KERNEL__
- #define SMALLEST_SLAB (sizeof(struct ccw_req_t) <= 128 ? 128 :
- sizeof(struct ccw_req_t) <= 256 ? 256 : 512 )
- /* SMALLEST_SLAB(1),... PAGE_SIZE(CCW_NUMBER_CACHES) */
- #define CCW_NUMBER_CACHES (sizeof(struct ccw_req_t) <= 128 ? 6 :
- sizeof(struct ccw_req_t) <= 256 ? 5 : 4 )
- int ccwcache_init (void);
- ccw_req_t *ccw_alloc_request (char *magic, int cplength, int additional_data);
- void ccw_free_request (ccw_req_t * request);
- #endif /* __KERNEL__ */
- #endif /* CCWCACHE_H */