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

VxWorks

开发平台:

C/C++

  1. /* usbdStructures.h - USBD control structures */
  2. /* Copyright 2000-2002 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01f,08nov11,wef  change definition of hubStatus to be pHubStatus
  7. 01e,20mar00,rcb  Add USB_DEV_DESCR field to USBD_NODE.
  8. 01d,26jan00,rcb  Redefine "bandwidth" field in USBD_PIPE as UINT32.
  9. 01c,23nov99,rcb  Add support for HCD_PIPE_HANDLE.
  10. 01b,07sep99,rcb  Add support for management callbacks.
  11. 01a,08jun99,rcb  First.
  12. */
  13. /*
  14. DESCRIPTION
  15. This file defines structures & constants used by the USBD to manage USB
  16. buses attached to the system. 
  17. */
  18. #ifndef __INCusbdStructuresh
  19. #define __INCusbdStructuresh
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /* includes */
  24. #include "usb/ossLib.h"
  25. #include "usb/usbHandleLib.h"
  26. #include "usb/usbListLib.h"
  27. #include "usb/usb.h"
  28. #include "drv/usb/usbHcd.h"
  29. /* defines */
  30. /* signatures used to validate handles - values are arbitrary */
  31. #define USBD_CLIENT_SIG  ((UINT32) 0x00bd000c)
  32. #define USBD_HCD_SIG ((UINT32) 0x00bd00cd)
  33. #define USBD_NODE_SIG ((UINT32) 0x00bd00de)
  34. #define USBD_PIPE_SIG ((UINT32) 0x00bd000e)
  35. /* defines related to hubs */
  36. /* MAX_HUB_STATUS_LEN is the maximum length of data which can be
  37.  * returned when querying a hub's status endpoint.  The status
  38.  * has one bit per port plus one bit for the hub itself.  The length
  39.  * of the array is rounded up to the next whole byte.
  40.  */
  41. #define MAX_HUB_STATUS_LEN ((USB_MAX_DEVICES + 1 + 7) / 8)
  42. /* USB_DEV_VECTOR_LEN is the length of an array of bytes which can
  43.  * hold one bit for each USB device.
  44.  */
  45. #define USB_DEV_VECTOR_LEN ((USB_MAX_DEVICES + 7) / 8)
  46. /* typedefs */
  47. /*
  48.  * USBD_NOTIFY_REQ
  49.  *
  50.  * Each time a client registers for dynamic attach/removal notification,
  51.  * a USBD_NOTIFY_REQ structure is linked to the client's USBD_CLIENT struct.
  52.  *
  53.  * A value of USBD_NOTIFY_ALL in deviceClass, deviceSubclass, or devicePgmIf
  54.  * will match any value reported by the device.
  55.  */
  56. typedef struct usbd_notify_req
  57.     {
  58.     LINK reqLink;     /* linked list of registrations */
  59.     UINT16 deviceClass;      /* desired device class */
  60.     UINT16 deviceSubClass;     /* desired device sub-class */
  61.     UINT16 deviceProtocol;     /* desired protocol */
  62.     USBD_ATTACH_CALLBACK callback;  /* client's callback routine */
  63.     } USBD_NOTIFY_REQ, *pUSBD_NOTIFY_REQ;
  64. /*
  65.  * USBD_NODE_CLASS
  66.  *
  67.  * Each device exposes one or more class/subclass/pgmif types. Some
  68.  * devices expose only one type through the device descriptor. Others
  69.  * expose many types, one through each interface descriptor.
  70.  */
  71. typedef struct usbd_node_class
  72.     {
  73.     LINK classLink;     /* linked list of class types */
  74.     UINT16 configuration;     /* corresponding configuration (or 0) */
  75.     UINT16 interface;     /* corresponding interface (or 0) */
  76.     UINT16 deviceClass;      /* device class */
  77.     UINT16 deviceSubClass;     /* device subclass */
  78.     UINT16 deviceProtocol;     /* device protocol */
  79.     } USBD_NODE_CLASS, *pUSBD_NODE_CLASS;
  80. /* 
  81.  * USBD_PIPE
  82.  *
  83.  * Each open channel of communication between the host and an endpoint on a
  84.  * device/hub is termed a "pipe".  USBD_PIPE maintains all currently available
  85.  * information for each open pipe.
  86.  *
  87.  * NOTE: By convention, the USBD uses the usbdLink field in each USB_IRP
  88.  * structure to point back to the USBD_PIPE with which the IPR is associated.
  89.  */
  90. typedef struct usbd_pipe
  91.     {
  92.     USBD_PIPE_HANDLE handle; /* handled assigned to pipe by USBD */
  93.     HCD_PIPE_HANDLE hcdHandle; /* handled assigned to pipe by HCD */
  94.     struct usbd_client *pClient; /* pointer to client owning this pipe */
  95.     BOOL pipeDeletePending; /* TRUE when pipe being deleted. */
  96.     struct usbd_node *pNode; /* node to which pipe is addressed */
  97.     UINT16 endpoint; /* endpoint address */
  98.     UINT16 configuration; /* config w/which pipe associated */
  99.     UINT16 interface; /* interface w/which pipe associated */
  100.     UINT16 transferType; /* type of pipe */
  101.     UINT16 direction; /* direction of pipe */
  102.     UINT16 maxPacketSize; /* max packet size */
  103.     UINT32 bandwidth; /* bandwidth used by pipe (bytes/sec) */
  104.     UINT16 interval; /* service interval (intrp pipes) */
  105.     UINT16 dataToggle; /* current DATA0/DATA1 toggle */
  106.     UINT32 nanoseconds;  /* bandwidth required if pipe is */
  107. /* isochronous or interrupt, else 0 */
  108.     LINK clientPipeLink; /* link on list of client's pipes */
  109.     LINK nodePipeLink; /* link on list of node's pipes */
  110.     LIST_HEAD irps; /* list of IRPs on this pipe */
  111.     pUSB_IRP irpBeingDeleted; /* used to synchronize IRP deletion */
  112.     BOOL irpDeleted; /*  "  " " "     "     */
  113.     } USBD_PIPE, *pUSBD_PIPE;
  114. /*
  115.  * USBD_CLIENT
  116.  *
  117.  * Each client registered with the USBD is tracked by a USBD_CLIENT structure.
  118.  */
  119. typedef struct usbd_client
  120.     {
  121.     LINK clientLink; /* client linked list */
  122.     USBD_CLIENT_HANDLE handle; /* handle assigned to client */
  123.     USBD_MNGMT_CALLBACK mngmtCallback; /* client's mngmt callback */
  124.     pVOID mngmtCallbackParam; /* client-define parameter */
  125.     THREAD_HANDLE callbackThread; /* thread used for client callbacks */
  126.     QUEUE_HANDLE callbackQueue;  /* queue of callback requests */
  127.     SEM_HANDLE callbackExit; /* signalled when callback thrd exits */
  128.     LIST_HEAD pipes; /* list of pipes owned by client */
  129.     LIST_HEAD notifyReqs; /* list of dynamic attach requests */
  130.     char clientName [USBD_NAME_LEN+1]; /* client's text name */
  131.     } USBD_CLIENT, *pUSBD_CLIENT;
  132. /*
  133.  * USBD_PORT
  134.  *
  135.  * USB hubs have one or more ports to which additional USB devices/hubs
  136.  * may be attached.  The USBD_PORT structure maintains all currently available
  137.  * inforamtion for each port on a hub.
  138.  */
  139. typedef struct usbd_port
  140.     {
  141.     struct usbd_node *pNode; /* node attached to port */
  142.     } USBD_PORT, *pUSBD_PORT;
  143. /*
  144.  * USBD_NODE
  145.  *
  146.  * Each device or hub attached to the USB is termed a "node" by the USBD.
  147.  * The USBD_NODE structure maintains all currently available information
  148.  * about a node.  If the node is a hub, then space will be allocated for
  149.  * a ports[] array large enough to accomodate each port on the hub.
  150.  */
  151. typedef struct usbd_node
  152.     {
  153.     USBD_NODE_ID nodeHandle; /* handle assigned to node */
  154.     USBD_NODE_INFO nodeInfo; /* Current node information */
  155.     struct usbd_bus *pBus; /* pointer to parent bus */
  156.     UINT16 busAddress; /* USB bus address for dev/hub */
  157.     UINT16 topologyDepth; /* number of cable hops from root */
  158.     UINT16 maxPower; /* power draw for selected config */
  159.     USB_DEVICE_DESCR devDescr; /* Device descriptor */
  160.     LIST_HEAD classTypes; /* list of device class types */
  161.     BOOL nodeDeletePending; /* TRUE when node being deleted */
  162.     /* NOTE: The following fields are used during control pipe transfers to
  163.      * this node.  controlSem is used to ensure that only one control pipe
  164.      * request is active for each device at any given time.
  165.      */
  166.     USBD_PIPE_HANDLE controlPipe; /* control pipe handle */
  167.     SEM_HANDLE controlSem; /* only one outstanding request */
  168. /* to control pipe at a time */
  169.     pUSBD_CLIENT pClient; /* client invoking the control URB */
  170.     pURB_HEADER pUrb; /* Ptr to pending control xfr URB */
  171.     pUINT16 pActLen; /* Ptr to bfr to receive IN actlen */
  172.     USB_SETUP setup; /* control pipe Setup packet */
  173.     USB_IRP irp; /* irp to describe control transfer */
  174.     USB_BFR_LIST extra [2]; /* irp includes room for a single */
  175. /* USB_BFR_LIST.  We need room for 3 */
  176. /* so we allocate an extra here */
  177.     LIST_HEAD pipes; /* list of pipes addressed to node */
  178.     /* NOTE: The following fields are used only for hub nodes. */
  179.     UINT16 pwrGoodDelay; /* power-ON to power good delay */
  180.     UINT16 hubContrCurrent; /* hub controller power requirements */
  181.     BOOL selfPowered; /* TRUE if hub/port is self powered */
  182.     UINT16 maxPowerPerPort; /* max power port can provide */
  183.     USBD_PIPE_HANDLE hubStatusPipe; /* status pipe handle */
  184.     USB_IRP hubIrp; /* IRP used to monitor hub status */
  185.     UINT16 numPorts; /* number of ports, used for hubs */
  186.     pUSBD_PORT pPorts; /* Array of ports, used for hubs */
  187.     UINT8 * pHubStatus;  /* receives hub status */
  188.     } USBD_NODE, *pUSBD_NODE;
  189. /*
  190.  * USBD_BUS
  191.  *
  192.  * Each HCD attached to the USBD may control one or more bus.  The USBD_BUS
  193.  * structure contains all information for a given bus.
  194.  */
  195. typedef struct usbd_bus
  196.     {
  197.     struct usbd_hcd *pHcd; /* pointer to parent HCD */
  198.     UINT16 busNo; /* this bus's index with HCD */
  199.     pUSBD_NODE pRoot; /* root node for this bus */
  200.     THREAD_HANDLE busThread; /* thread to monitor bus events */
  201.     QUEUE_HANDLE busQueue; /* queue to receive bus events */
  202.     SEM_HANDLE busExit;  /* signallen when bus thd exits */
  203.     UINT32 nanoseconds;  /* bus bandwidth in use for */
  204. /* isochronous and interrupt pipes */
  205.     pUSBD_CLIENT pSofMasterClient; /* client which is SOF master or NULL */
  206.     USBD_STATS stats; /* bus operating statistics */
  207.     UINT8 adrsVec [USB_MAX_DEVICES]; /* USB addresses in use */
  208.     BOOL suspended; /* TRUE if bus currently SUSPENDed */
  209.     } USBD_BUS, *pUSBD_BUS;
  210. /*
  211.  * USBD_HCD
  212.  *
  213.  * The USBD maintains a list of currently attached HCDs.  Each HCD may control
  214.  * one or more buses.
  215.  */
  216. typedef struct usbd_hcd
  217.     {
  218.     LINK hcdLink; /* linked list of HCDs */
  219.     GENERIC_HANDLE attachToken;  /* Attach token returned for this HCD */
  220.     HCD_NEXUS nexus; /* identifies connection to HCD */
  221.     UINT16 busCount; /* number of buses managed by HCD */
  222.     pUSBD_BUS pBuses; /* buses managed by HCD */
  223.     } USBD_HCD, *pUSBD_HCD;
  224. #ifdef __cplusplus
  225. }
  226. #endif
  227. #endif /* __INCusbdStructuresh */
  228. /* End of file. */