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

VxWorks

开发平台:

C/C++

  1. /* usbTcd.h - Defines generic interface to USB target controller drivers */
  2. /* Copyright 2000 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01b,18sep01,wef  merge from wrs.tor2_0.usb1_1-f for veloce
  7. 01d,07may01,wef  changed module number to be (module sub num << 8) | 
  8.  M_usbPeriphLib
  9. 01c,02may01,wef  changed module number to be M_<module> + M_usbPeriphLib
  10. 01b,05dec00,wef  moved Module number defs to vwModNum.h - add this
  11.                  to #includes
  12. 01a,04aug99,rcb  First.
  13. */
  14. /*
  15. DESCRIPTION
  16. Defines the generic interface to a USB target controller driver (TCD).
  17. */
  18. #ifndef __INCusbTcdh
  19. #define __INCusbTcdh
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /* includes */
  24. #include "usb/usbHandleLib.h"
  25. #include "usb/usb.h"
  26. #include "vwModNum.h"           /* USB Module Number Def's */
  27. /* defines */
  28. /* TRB function codes */
  29. #define TCD_FNC_ATTACH     0x0000  /* attach/init */
  30. #define TCD_FNC_DETACH     0x0001  /* detach/shutdown */
  31. #define TCD_FNC_ENABLE     0x0002  /* enable target channel */
  32. #define TCD_FNC_DISABLE      0x0003  /* disable target channel */
  33. #define TCD_FNC_ADDRESS_SET     0x0100  /* set device address */
  34. #define TCD_FNC_ENDPOINT_ASSIGN     0x0101  /* assigns an endpoint */
  35. #define TCD_FNC_ENDPOINT_RELEASE    0x0102  /* releases an endpoint */
  36. #define TCD_FNC_SIGNAL_RESUME     0x0103  /* drive resume signalling */
  37. #define TCD_FNC_ENDPOINT_STATE_SET  0x0104  /* set endpoint state */
  38. #define TCD_FNC_CURRENT_FRAME_GET   0x0200  /* get current frame number */
  39. #define TCD_FNC_ERP_SUBMIT     0x0201  /* submit an ERP for exection */
  40. #define TCD_FNC_ERP_CANCEL     0x0202  /* cancel a pending ERP */
  41. /* TRB result codes */
  42. /* 
  43.  * USB errnos are defined as being part of the USB peripheral Module, as are 
  44.  * all vxWorks module numbers, but the USB Module number is further divided 
  45.  * into sub-modules.  Each sub-module has upto 255 values for its own error 
  46.  * codes
  47.  */
  48.  
  49. #define USB_TCD_SUB_MODULE  2
  50. #define M_usbTcdLib   ( (USB_TCD_SUB_MODULE  << 8) | M_usbPeriphLib )
  51. #define tcdErr(x) (M_usbTcdLib | (x))
  52. #define S_usbTcdLib_BAD_PARAM tcdErr(1)
  53. #define S_usbTcdLib_BAD_HANDLE tcdErr(2)
  54. #define S_usbTcdLib_OUT_OF_MEMORY tcdErr(3)
  55. #define S_usbTcdLib_OUT_OF_RESOURCES tcdErr(4) 
  56. #define S_usbTcdLib_NOT_IMPLEMENTED tcdErr(5)
  57. #define S_usbTcdLib_GENERAL_FAULT tcdErr(6)
  58. #define S_usbTcdLib_NOT_INITIALIZED tcdErr(7)
  59. #define S_usbTcdLib_INT_HOOK_FAILED tcdErr(8)
  60. #define S_usbTcdLib_HW_NOT_READY tcdErr(9)
  61. #define S_usbTcdLib_NOT_SUPPORTED tcdErr(10)
  62. #define S_usbTcdLib_ERP_CANCELED tcdErr(11)
  63. #define S_usbTcdLib_CANNOT_CANCEL tcdErr(12)
  64. #define S_usbTcdLib_SHUTDOWN tcdErr(13)
  65. #define S_usbTcdLib_DATA_TOGGLE_FAULT tcdErr(14)
  66. #define S_usbTcdLib_PID_MISMATCH tcdErr(15)
  67. #define S_usbTcdLib_COMM_FAULT tcdErr(16)
  68. #define S_usbTcdLib_NEW_SETUP_PACKET tcdErr(17)
  69. /* endpoint characteristics */
  70. #define TCD_ENDPOINT_IN_OK 0x0001     /* host->device capable */
  71. #define TCD_ENDPOINT_OUT_OK 0x0002     /* device->host capable */
  72. #define TCD_ENDPOINT_CTRL_OK 0x0010     /* capable of control xfr */
  73. #define TCD_ENDPOINT_BULK_OK 0x0020     /* capable of bulk xfr */
  74. #define TCD_ENDPOINT_INT_OK 0x0040     /* capable of interrupt xfr */
  75. #define TCD_ENDPOINT_ISOCH_OK 0x0080     /* capable of isoch xfr */
  76. #define TCD_ENDPOINT_IN_USE 0x0100     /* endpoint has pipe */
  77. /* managment codes passed to USB_TCD_MANAGEMENT_CALLBACK (below) */
  78. #define TCD_MNGMT_ATTACH 1     /* initial TCD attachment */
  79. #define TCD_MNGMT_DETACH 2     /* TCD detach */
  80. #define TCD_MNGMT_VBUS_DETECT 3     /* Vbus detected */
  81. #define TCD_MNGMT_VBUS_LOST 4     /* Vbus lost */
  82. #define TCD_MNGMT_BUS_RESET 5     /* bus reset */
  83. #define TCD_MNGMT_SUSPEND 6     /* suspend signalling detected */
  84. #define TCD_MNGMT_RESUME 7     /* resume signalling detected */
  85. /* endpoint states */
  86. #define TCD_ENDPOINT_STALL 0x01
  87. #define TCD_ENDPOINT_UNSTALL 0x02
  88. #define TCD_ENDPOINT_DATA0 0x04
  89. /* typedefs */
  90. typedef GENERIC_HANDLE TCD_HANDLE, *pTCD_HANDLE;
  91. /* primary TCD entry point */
  92. typedef STATUS (*USB_TCD_EXEC_FUNC) (pVOID pTrb);
  93. /* management notification callback function */
  94. typedef VOID (*USB_TCD_MNGMT_CALLBACK)
  95.     (
  96.     pVOID mngmtCallbackParam,     /* caller-defined param */
  97.     TCD_HANDLE handle,     /* channel */
  98.     UINT16 mngmtCode     /* management code */
  99.     );
  100. /* USB_TARG_ENDPOINT_INFO 
  101.  *
  102.  * NOTE: The xxxMaxPacketSize fields indicate the maximum packet size which the
  103.  * endpoint can support.  Since control pipes are always bidirectional, only a 
  104.  * single value is given.  However, for a given endpoint in bulk, interrupt, or
  105.  * isochronous mode, there may be additional limitations depending on how other
  106.  * endpoints are configured, so separate IN, OUT, and INOUT figures are provided.
  107.  * For example, if two endpoints are configured for isochronous operation at 
  108.  * endpoint number 2 (ie., one IN and one OUT), the isochInOutMaxPacketSize figure
  109.  * would apply.  When configuring endpoints in this way, the caller should
  110.  * specify the direction as USB_DIR_INOUT.  The actual direction for an endpoint
  111.  * will be determined based on its capability as indicated in the flags field.
  112.  */
  113. typedef struct usb_targ_endpoint_info
  114.     {
  115.     UINT16 endpointId;     /* TCD-assigned endpoint ID */
  116.     UINT16 flags;     /* endpoint characteristics */
  117.     UINT16 endpointNumMask;     /* mask of allowed endpoint numbers */
  118.     UINT32 ctlMaxPacketSize;     /* max packet size in control mode */
  119.     UINT32 bulkInMaxPacketSize;      /* max packet size in bulk IN mode */
  120.     UINT32 bulkOutMaxPacketSize;     /* max packet size in bulk OUT mode */
  121.     UINT32 bulkInOutMaxPacketSize;     /* max packet size in bulk I/O mode */
  122.     UINT32 intInMaxPacketSize;     /* max packet size in intrpt IN mode */
  123.     UINT32 intOutMaxPacketSize;      /* max packet size in intrpt OUT mode */
  124.     UINT32 intInOutMaxPacketSize;     /* max packet size in intrpt I/O mode */
  125.     UINT32 isochInMaxPacketSize;     /* max packet size in isoch IN mode */
  126.     UINT32 isochOutMaxPacketSize;     /* max packet size in isoch OUT mode */
  127.     UINT32 isochInOutMaxPacketSize;     /* max packet size in isoch I/O mode */
  128.     UINT16 endpointNum;      /* currently assigned endpoint num */
  129.     UINT16 configuration;     /* current configuration */
  130.     UINT16 interface;     /* current interface */
  131.     UINT16 transferType;     /* current transfer type */
  132.     UINT16 direction;     /* current direction */
  133.     UINT16 maxPacketSize;     /* max packet size as configured */
  134.     } USB_TARG_ENDPOINT_INFO, *pUSB_TARG_ENDPOINT_INFO;
  135. /*
  136.  * TRB_HEADER
  137.  *
  138.  * All requests to a TCD begin with a TRB (TCD Request Block) header.
  139.  */
  140. typedef struct trb_header
  141.     {
  142.     TCD_HANDLE handle; /* I/O caller's TCD client handle */
  143.     UINT16 function; /* IN TCD function code */
  144.     UINT16 trbLength; /* IN Length of the total TRB */
  145.     } TRB_HEADER, *pTRB_HEADER;
  146. /*
  147.  * TRB_ATTACH
  148.  */
  149. typedef struct trb_attach
  150.     {
  151.     TRB_HEADER header; /* TRB header */
  152.     pVOID tcdParam; /* IN TCD-specific parameter */
  153.     USB_TCD_MNGMT_CALLBACK mngmtCallback;
  154. /* IN caller's management callback */
  155.     pVOID mngmtCallbackParam; /* IN param to mngmt callback */
  156.     UINT16 speed; /* OUT target speed: USB_SPEED_xxxx */
  157.     UINT16 numEndpoints; /* OUT number of endpoints supported */
  158.     pUSB_TARG_ENDPOINT_INFO pEndpoints;
  159. /* OUT ptr to array of endpoints */
  160.     } TRB_ATTACH, *pTRB_ATTACH;
  161. /*
  162.  * TRB_DETACH
  163.  */
  164. typedef struct trb_detach
  165.     {
  166.     TRB_HEADER header; /* TRB header */
  167.     } TRB_DETACH, *pTRB_DETACH;
  168. /*
  169.  * TRB_ENABLE_DISABLE
  170.  */
  171. typedef struct trb_enable_disable
  172.     {
  173.     TRB_HEADER header; /* TRB header */
  174.     } TRB_ENABLE_DISABLE, *pTRB_ENABLE_DISABLE;
  175. /*
  176.  * TRB_ADDRESS_SET
  177.  */
  178. typedef struct trb_address_set
  179.     {
  180.     TRB_HEADER header; /* TRB header */
  181.     UINT16 deviceAddress; /* IN new device address */
  182.     } TRB_ADDRESS_SET, *pTRB_ADDRESS_SET;
  183. /*
  184.  * TRB_SIGNAL_RESUME
  185.  */
  186. typedef struct trb_signal_resume
  187.     {
  188.     TRB_HEADER header; /* TRB header */
  189.     } TRB_SIGNAL_RESUME, *pTRB_SIGNAL_RESUME;
  190. /*
  191.  * TRB_ENDPOINT_ASSIGN
  192.  */
  193. typedef struct trb_endpoint_assign
  194.     {
  195.     TRB_HEADER header; /* TRB header */
  196.     UINT16 endpointId; /* IN TCD-assigned endpoint ID */
  197.     UINT16 endpointNum;  /* IN newly assigned endpoint num */
  198.     UINT16 configuration; /* IN new configuration */
  199.     UINT16 interface; /* IN new interface */
  200.     UINT16 transferType; /* IN new transfer type */
  201.     UINT16 direction; /* IN new direction */
  202.     } TRB_ENDPOINT_ASSIGN, *pTRB_ENDPOINT_ASSIGN;
  203. /*
  204.  * TRB_ENDPOINT_RELEASE
  205.  */
  206. typedef struct trb_endpoint_release
  207.     {
  208.     TRB_HEADER header; /* TRB header */
  209.     UINT16 endpointId; /* IN TCD-assigned endpoint Id */
  210.     } TRB_ENDPOINT_RELEASE, *pTRB_ENDPOINT_RELEASE;
  211. /*
  212.  * TRB_ENDPOINT_STATE_SET
  213.  */
  214. typedef struct trb_endpoint_state_set
  215.     {
  216.     TRB_HEADER header; /* TRB header */
  217.     UINT16 endpointId; /* IN endpoint Id */
  218.     UINT16 state; /* IN TCD_ENDPOINT_xxxx bitmask */
  219.     } TRB_ENDPOINT_STATE_SET, *pTRB_ENDPOINT_STATE_SET;
  220. /*
  221.  * TRB_CURRENT_FRAME_GET
  222.  */
  223. typedef struct trb_current_frame_get
  224.     {
  225.     TRB_HEADER header; /* TRB header */
  226.     UINT16 frameNo; /* OUT current frame number */
  227.     } TRB_CURRENT_FRAME_GET, *pTRB_CURRENT_FRAME_GET;
  228. /* 
  229.  * TRB_ERP_SUBMIT
  230.  */
  231. typedef struct trb_erp_submit
  232.     {
  233.     TRB_HEADER header; /* TRB header */
  234.     pUSB_ERP pErp; /* IN ptr to IRP */
  235.     } TRB_ERP_SUBMIT, *pTRB_ERP_SUBMIT;
  236. /*
  237.  * TRB_ERP_CANCEL
  238.  */
  239. typedef struct trb_erp_cancel
  240.     {
  241.     TRB_HEADER header; /* TRB header */
  242.     pUSB_ERP pErp; /* IN ptr to IPR to be canceled */
  243.     } TRB_ERP_CANCEL, *pTRB_ERP_CANCEL;
  244. #ifdef __cplusplus
  245. }
  246. #endif
  247. #endif /* __INCusbTcdh */
  248. /* End of file. */