ccwcache.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* 
  2.    * File...........: linux/include/asm-s390/ccwcache.h
  3.    * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
  4.    * Bugreports.to..: <Linux390@de.ibm.com>
  5.    * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000
  6.  */
  7. #ifndef CCWCACHE_H
  8. #define CCWCACHE_H
  9. #include <linux/slab.h>
  10. #include <asm/irq.h>
  11. #ifndef __KERNEL__
  12. #define kmem_cache_t void
  13. #endif /* __KERNEL__ */
  14. typedef struct ccw_req_t {
  15. /* eye catcher plus queueing information  */
  16. unsigned int magic;
  17. struct ccw_req_t *next; /* pointer to next ccw_req_t in queue */
  18. struct ccw_req_t *int_next; /* for internal queueing */
  19. struct ccw_req_t *int_prev; /* for internal queueing */
  20. /* Where to execute what... */
  21. void *device; /* index of the device the req is for */
  22. void *req; /* pointer to originating request */
  23. ccw1_t *cpaddr; /* address of channel program */
  24. char status;         /* reflecting the status of this request */
  25. char flags;              /* see below */
  26. short retries; /* A retry counter to be set when filling */
  27. /* ... and how */
  28. int options; /* options for execution */
  29. char lpm;               /* logical path mask                      */
  30. void *data; /* pointer to data area */
  31. devstat_t *dstat; /* The device status in case of an error */
  32. /* these are important for recovering erroneous requests          */
  33. struct ccw_req_t *refers; /* Does this request refer to another one? */
  34. void *function; /* refers to the originating ERP action */ ;
  35. unsigned long long expires; /* expiratioj period */
  36. /* these are for profiling purposes */
  37. unsigned long long buildclk; /* TOD-clock of request generation */
  38. unsigned long long startclk; /* TOD-clock of request start */
  39. unsigned long long stopclk; /* TOD-clock of request interrupt */
  40. unsigned long long endclk; /* TOD-clock of request termination */
  41. /* these are for internal use */
  42. int cplength; /* length of the channel program in CCWs */
  43. int datasize; /* amount of additional data in bytes */
  44. kmem_cache_t *cache; /* the cache this data comes from */
  45. } __attribute__ ((aligned(4))) ccw_req_t;
  46. /* 
  47.  * ccw_req_t -> status can be:
  48.  */
  49. #define CQR_STATUS_EMPTY    0x00 /* request is empty */
  50. #define CQR_STATUS_FILLED   0x01 /* request is ready to be preocessed */
  51. #define CQR_STATUS_QUEUED   0x02 /* request is queued to be processed */
  52. #define CQR_STATUS_IN_IO    0x03 /* request is currently in IO */
  53. #define CQR_STATUS_DONE     0x04 /* request is completed successfully */
  54. #define CQR_STATUS_ERROR    0x05 /* request is completed with error */
  55. #define CQR_STATUS_FAILED   0x06 /* request is finally failed */
  56. #define CQR_STATUS_PENDING  0x07        /* request is waiting for interrupt - ERP only */ 
  57. #define CQR_FLAGS_CHAINED  0x01 /* request is chained by another (last CCW is TIC) */
  58. #ifdef __KERNEL__
  59. #define SMALLEST_SLAB (sizeof(struct ccw_req_t) <= 128 ? 128 :
  60.  sizeof(struct ccw_req_t) <= 256 ? 256 : 512 )
  61. /* SMALLEST_SLAB(1),... PAGE_SIZE(CCW_NUMBER_CACHES) */
  62. #define CCW_NUMBER_CACHES (sizeof(struct ccw_req_t) <= 128 ? 6 :
  63.  sizeof(struct ccw_req_t) <= 256 ? 5 : 4 )
  64. int ccwcache_init (void);
  65. ccw_req_t *ccw_alloc_request (char *magic, int cplength, int additional_data);
  66. void ccw_free_request (ccw_req_t * request);
  67. #endif /* __KERNEL__ */
  68. #endif /* CCWCACHE_H */