usbCbiUfiDevLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbCbiUfiDevLib.h - USB CBI Mass Storage class driver for UFI sub-class */ 
  2. /* Copyright 1989-2000 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,07may01,wef  changed module number to be (module num << 8) | M_usbHostLib
  7. 01e,02may01,wef  changed module number to be M_<module> + M_usbHostLib
  8. 01d,05dec00,wef  moved Module number defs to vwModNum.h - add this
  9.                  to #includes, removed command status codes that lived
  10.  here and in usbBulkDevLib.h and put into own file in
  11.  h/usb/usbMassStorage.h 
  12. 01c,02sep00,bri  added support for multiple devices.
  13. 01b,04aug00,bri  updated as per review.
  14. 01a,26jun00,bri  created.
  15. */
  16. #ifndef __INCusbCbiUfiDevLibh
  17. #define __INCusbCbiUfiDevLibh
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. #ifndef _ASMLANGUAGE
  22. /* includes */
  23. #include "vwModNum.h"           /* USB Module Number Def's */
  24. #include "usb/usbMassStorage.h" /* Command status codes */
  25. /* Module number and error code definitions */
  26. /* 
  27.  * USB errnos are defined as being part of the USB host Module, as are all
  28.  * vxWorks module numbers, but the USB Module number is further divided into 
  29.  * sub-modules.  Each sub-module has upto 255 values for its own error codes
  30.  */
  31.  
  32. #define USB_CBI_SUB_MODULE   12
  33. #define M_usbCbiUfiLib  ( (USB_CBI_SUB_MODULE  << 8) | M_usbHostLib )
  34. #define usbCbiUfiErr(x)    (M_usbCbiUfiLib | (x))
  35. #define S_usbCbiUfiDevLib_OUT_OF_RESOURCES  usbCbiUfiErr (1)
  36. #define S_usbCbiUfiDevLib_USBD_FAULT     usbCbiUfiErr (2)
  37. #define S_usbCbiUfiDevLib_NOT_INITIALIZED   usbCbiUfiErr (3)
  38. #define S_usbCbiUfiDevLib_BAD_PARAM     usbCbiUfiErr (4)
  39. #define S_usbCbiUfiDevLib_OUT_OF_MEMORY     usbCbiUfiErr (5)
  40. #define S_usbCbiUfiDevLib_NOT_REGISTERED    usbCbiUfiErr (6)
  41. #define S_usbCBiUfiDevLib_NOT_LOCKED        usbCbiUfiErr (7)
  42. #define USB_CLASS_MASS_STORAGE           0x08 /* USB Mass storage class code */
  43. #define USB_SUBCLASS_UFI_COMMAND_SET     0x04 /* UFI command set definition  */
  44. #define USB_INTERFACE_PROTOCOL_CBI       0x00 /* CBI interface protocol      */
  45. #define USB_UFI_MAX_CMD_LEN              0x0C /* UFI Maximum command length  */  
  46. /* UFI Commands */
  47. #define USB_UFI_FORMAT_UNIT              0x04 /* UFI Format Unit command   */
  48. #define USB_UFI_INQUIRY                  0x12 /* UFI Inquiry command       */
  49. #define USB_UFI_MODE_SELECT              0x55 /* UFI Mode Select command   */
  50. #define USB_UFI_MODE_SENSE               0x5A /* UFI Mode Sense command    */
  51. #define USB_UFI_PREVENT_MEDIA_REMOVAL    0x1E /* UFI Prevent/ Allow media  */ 
  52.                                               /* removal command           */
  53. #define USB_UFI_READ10                   0x28 /* UFI 10-byte Read comamnd  */
  54. #define USB_UFI_READ12                   0xA8 /* UFI 12-byte Read command  */
  55. #define USB_UFI_READ_CAPACITY            0x25 /* UFI Read Capacity command */ 
  56. #define USB_UFI_READ_FORMAT_CAPACITY     0x23 /* UFI Read Format capacities*/
  57. #define USB_UFI_REQUEST_SENSE            0x03 /* UFI Request sense command */ 
  58. #define USB_UFI_REZERO                   0x01 /* UFI Rezero command        */
  59. #define USB_UFI_SEEK10                   0x2B /* UFI 10-byte Seek command  */
  60. #define USB_UFI_SEND_DIAGNOSTIC          0x1D /* UFI Send Diagnostic cmd   */
  61. #define USB_UFI_START_STOP_UNIT          0x1B /* UFI Start Stop unit cmd   */
  62. #define USB_UFI_TEST_UNIT_READY          0x00 /* UFI Test Unit Ready cmd   */
  63. #define USB_UFI_VERIFY                   0x2F /* UFI Verify command        */
  64. #define USB_UFI_WRITE10                  0x2A /* UFI 10-byte Write command */
  65. #define USB_UFI_WRITE12                  0xAA /* UFI 12-byte Write command */
  66. #define USB_UFI_WRITE_AND_VERIFY         0x2E /* UFI Write and Verify cmd  */
  67. /* Bit Definitions with in UFI Command blocks */
  68. #define USB_UFI_FORMAT_FMTDATA           0x10 /* Format Data bit       */
  69. #define USB_UFI_FORMAT_FMT_DEFECT        0x07 /* Defect List format    */    
  70. #define USB_UFI_MODE_SEL_PF              0x10 /* Page Format bit       */  
  71. #define USB_UFI_MEDIA_REMOVAL_BIT        0x01 /* Prevent media removal */ 
  72. #define USB_UFI_INQUIRY_RMB_BIT          0x80 /* Removable bit         */ 
  73. #define USB_UFI_START_STOP_LOEJ          0x02 /* Media load eject bit  */
  74. #define USB_UFI_WRITE_PROTECT_BIT        0x80 /* Write protect bit     */
  75. /* Ioctl Control codes */
  76. #define USB_UFI_ALL_DESCRIPTOR_GET       0xF0 /* Shows all descriptors */   
  77. #define USB_UFI_DEV_RESET                0xF1 /* Performs command reset*/ 
  78. /* Miscellaneous Definitions */
  79. #define UFI_STD_REQ_SENSE_LEN            0x12 /* Request sense data length  */ 
  80. #define UFI_STD_INQUIRY_LEN              0x24 /* Length of Inquiry data     */
  81. #define USB_UFI_MS_HEADER_LEN            0x08 /* Mode sense Header Length   */
  82. #define USB_UFI_DIR_IN                   0x80 /* Direction bit -> to host   */
  83. #define USB_UFI_DIR_OUT                  0x00 /* Direction bit -> to device */ 
  84. #define USB_UFI_SENSE_KEY_OFFSET        0x02 /* Sense key offset in sense   */
  85. #define USB_UFI_SENSE_ASC               0x0C /* Add'tl sense code offset    */
  86. #define USB_UFI_SENSE_ASCQ              0x0D /* Add'tl sense code qualifier */ 
  87. #define USB_UFI_SENSE_KEY_MASK          0x0F /* Mask for sense key          */
  88. #define USB_UFI_KEY_UNIT_ATTN           0x06 /* Unit Attn value for key     */
  89. #define USB_UFI_KEY_NOT_READY           0x02 /* Not ready value for key     */
  90. #define USB_UFI_ASC_NO_MEDIA            0x3A /* Media not present code      */ 
  91. #define USB_UFI_ASC_MEDIA_CHANGE        0x28 /* Media change code  */
  92. /* Sense key values */
  93. #define USB_UFI_NO_SENSE                0x00 /* No Sense data                */
  94. #define USB_UFI_RECOVERED_ERROR         0x01 /* Recovered from error         */
  95. #define USB_UFI_NOT_READY               0x02 /* Device is not ready          */
  96. #define USB_UFI_MEDIUM_ERROR            0x03 /* Flaw in the medium or data   */
  97. #define USB_UFI_HARDWARE_ERROR          0x04 /* Non-recoverable h/w error    */
  98. #define USB_UFI_ILL_REQUEST             0x05 /* Illegal parameter in command */
  99. #define USB_UFI_UNIT_ATTN               0x06 /* Media change or reset        */
  100. #define USB_UFI_DATA_PROTECT            0x07 /* Media write protect          */
  101. /* ASC and ASCQ combinations */
  102. #define USB_UFI_WRITE_PROTECT           0x2700 /* Write protected media */  
  103. #define USB_UFI_MEDIA_CHANGE            0x2800 /* Media change          */
  104. #define USB_UFI_POWER_ON_RESET          0x2900 /* Power on reset        */
  105. #define USB_UFI_COMMAND_SUCCESS         0x0000 /* No sense data-success */         
  106. #define USB_CBI_IRP_TIME_OUT            5000 
  107. /* Attach codes used by USB_UFI_ATTACH_CALLBACK. */
  108. #define USB_UFI_ATTACH                 0      /* CBI_UFI Device attached */
  109. #define USB_UFI_REMOVE                 1      /* CBI_UFI Device removed  */
  110. /* Swap macros */
  111. #if (_BYTE_ORDER == _BIG_ENDIAN)
  112. #define USB_SWAP_32   
  113. #define USB_SWAP_16
  114. #else   /* _BYTE_ORDER == _BIG_ENDIAN   */
  115. #define USB_SWAP_32(x)  LONGSWAP((UINT)x)
  116. #define USB_SWAP_16(x)  ((LSB(x) << 8)|MSB(x))
  117. #endif  /* _BYTE_ORDER == _BIG_ENDIAN   */
  118. /* typedefs */
  119. typedef struct usbUfiCmdBlock
  120.     {
  121.     UINT   dataXferLen;                  /* data transfer length       */ 
  122.     UINT   direction;                    /* direction of data transfer */
  123.     UINT8  cmd [USB_UFI_MAX_CMD_LEN];    /* UFI Command block          */ 
  124.     } USB_UFI_CMD_BLOCK, *pUSB_UFI_CMD_BLOCK;
  125.   
  126. /* USB_UFI_ATTACH_CALLBACK defines a callback routine which will be
  127.  * invoked by usbCbiUfiDevLib.c when the attachment or removal of a CBI_UFI
  128.  * device is detected.  When the callback is invoked with an attach code of
  129.  * USB_UFI_ATTACH, the nodeId represents the ID of newly added device.  When
  130.  * the attach code is USB_UFI_REMOVE, nodeId points to the CBI_UFI device which 
  131.  * is no longer attached.
  132.  */
  133. typedef VOID (*USB_UFI_ATTACH_CALLBACK) 
  134.     (
  135.     pVOID arg,           /* caller-defined argument     */
  136.     USBD_NODE_ID nodeId, /* nodeId of the UFI device    */
  137.     UINT16 attachCode    /* attach or remove code       */
  138.     );
  139. /* function prototypes */
  140. STATUS usbCbiUfiDevInit (void);
  141. STATUS usbCbiUfiDevShutDown (int errCode);
  142. STATUS usbCbiUfiDynamicAttachRegister ( USB_UFI_ATTACH_CALLBACK callback, 
  143.                                         pVOID arg);
  144. BLK_DEV *usbCbiUfiBlkDevCreate (USBD_NODE_ID nodeId);
  145. STATUS usbCbiUfiDevIoctl (BLK_DEV * pBlkDev, UINT request, UINT someArg); 
  146. STATUS usbCbiUfiDynamicAttachUnregister ( USB_UFI_ATTACH_CALLBACK callback,
  147.                                           pVOID arg);
  148. STATUS usbCbiUfiDevLock (USBD_NODE_ID nodeId);
  149. STATUS usbCbiUfiDevUnlock (USBD_NODE_ID nodeId);
  150. #endif /* _ASMLANGUAGE */
  151. #ifdef __cplusplus
  152. }
  153. #endif /* __cplusplus */
  154. #endif /* __INCusbCbiUfiDevLibh */