usbdStructures.h
资源名称:ixp425BSP.rar [点击查看]
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:10k
源码类别:
VxWorks
开发平台:
C/C++
- /* usbdStructures.h - USBD control structures */
- /* Copyright 2000-2002 Wind River Systems, Inc. */
- /*
- Modification history
- --------------------
- 01f,08nov11,wef change definition of hubStatus to be pHubStatus
- 01e,20mar00,rcb Add USB_DEV_DESCR field to USBD_NODE.
- 01d,26jan00,rcb Redefine "bandwidth" field in USBD_PIPE as UINT32.
- 01c,23nov99,rcb Add support for HCD_PIPE_HANDLE.
- 01b,07sep99,rcb Add support for management callbacks.
- 01a,08jun99,rcb First.
- */
- /*
- DESCRIPTION
- This file defines structures & constants used by the USBD to manage USB
- buses attached to the system.
- */
- #ifndef __INCusbdStructuresh
- #define __INCusbdStructuresh
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* includes */
- #include "usb/ossLib.h"
- #include "usb/usbHandleLib.h"
- #include "usb/usbListLib.h"
- #include "usb/usb.h"
- #include "drv/usb/usbHcd.h"
- /* defines */
- /* signatures used to validate handles - values are arbitrary */
- #define USBD_CLIENT_SIG ((UINT32) 0x00bd000c)
- #define USBD_HCD_SIG ((UINT32) 0x00bd00cd)
- #define USBD_NODE_SIG ((UINT32) 0x00bd00de)
- #define USBD_PIPE_SIG ((UINT32) 0x00bd000e)
- /* defines related to hubs */
- /* MAX_HUB_STATUS_LEN is the maximum length of data which can be
- * returned when querying a hub's status endpoint. The status
- * has one bit per port plus one bit for the hub itself. The length
- * of the array is rounded up to the next whole byte.
- */
- #define MAX_HUB_STATUS_LEN ((USB_MAX_DEVICES + 1 + 7) / 8)
- /* USB_DEV_VECTOR_LEN is the length of an array of bytes which can
- * hold one bit for each USB device.
- */
- #define USB_DEV_VECTOR_LEN ((USB_MAX_DEVICES + 7) / 8)
- /* typedefs */
- /*
- * USBD_NOTIFY_REQ
- *
- * Each time a client registers for dynamic attach/removal notification,
- * a USBD_NOTIFY_REQ structure is linked to the client's USBD_CLIENT struct.
- *
- * A value of USBD_NOTIFY_ALL in deviceClass, deviceSubclass, or devicePgmIf
- * will match any value reported by the device.
- */
- typedef struct usbd_notify_req
- {
- LINK reqLink; /* linked list of registrations */
- UINT16 deviceClass; /* desired device class */
- UINT16 deviceSubClass; /* desired device sub-class */
- UINT16 deviceProtocol; /* desired protocol */
- USBD_ATTACH_CALLBACK callback; /* client's callback routine */
- } USBD_NOTIFY_REQ, *pUSBD_NOTIFY_REQ;
- /*
- * USBD_NODE_CLASS
- *
- * Each device exposes one or more class/subclass/pgmif types. Some
- * devices expose only one type through the device descriptor. Others
- * expose many types, one through each interface descriptor.
- */
- typedef struct usbd_node_class
- {
- LINK classLink; /* linked list of class types */
- UINT16 configuration; /* corresponding configuration (or 0) */
- UINT16 interface; /* corresponding interface (or 0) */
- UINT16 deviceClass; /* device class */
- UINT16 deviceSubClass; /* device subclass */
- UINT16 deviceProtocol; /* device protocol */
- } USBD_NODE_CLASS, *pUSBD_NODE_CLASS;
- /*
- * USBD_PIPE
- *
- * Each open channel of communication between the host and an endpoint on a
- * device/hub is termed a "pipe". USBD_PIPE maintains all currently available
- * information for each open pipe.
- *
- * NOTE: By convention, the USBD uses the usbdLink field in each USB_IRP
- * structure to point back to the USBD_PIPE with which the IPR is associated.
- */
- typedef struct usbd_pipe
- {
- USBD_PIPE_HANDLE handle; /* handled assigned to pipe by USBD */
- HCD_PIPE_HANDLE hcdHandle; /* handled assigned to pipe by HCD */
- struct usbd_client *pClient; /* pointer to client owning this pipe */
- BOOL pipeDeletePending; /* TRUE when pipe being deleted. */
- struct usbd_node *pNode; /* node to which pipe is addressed */
- UINT16 endpoint; /* endpoint address */
- UINT16 configuration; /* config w/which pipe associated */
- UINT16 interface; /* interface w/which pipe associated */
- UINT16 transferType; /* type of pipe */
- UINT16 direction; /* direction of pipe */
- UINT16 maxPacketSize; /* max packet size */
- UINT32 bandwidth; /* bandwidth used by pipe (bytes/sec) */
- UINT16 interval; /* service interval (intrp pipes) */
- UINT16 dataToggle; /* current DATA0/DATA1 toggle */
- UINT32 nanoseconds; /* bandwidth required if pipe is */
- /* isochronous or interrupt, else 0 */
- LINK clientPipeLink; /* link on list of client's pipes */
- LINK nodePipeLink; /* link on list of node's pipes */
- LIST_HEAD irps; /* list of IRPs on this pipe */
- pUSB_IRP irpBeingDeleted; /* used to synchronize IRP deletion */
- BOOL irpDeleted; /* " " " " " */
- } USBD_PIPE, *pUSBD_PIPE;
- /*
- * USBD_CLIENT
- *
- * Each client registered with the USBD is tracked by a USBD_CLIENT structure.
- */
- typedef struct usbd_client
- {
- LINK clientLink; /* client linked list */
- USBD_CLIENT_HANDLE handle; /* handle assigned to client */
- USBD_MNGMT_CALLBACK mngmtCallback; /* client's mngmt callback */
- pVOID mngmtCallbackParam; /* client-define parameter */
- THREAD_HANDLE callbackThread; /* thread used for client callbacks */
- QUEUE_HANDLE callbackQueue; /* queue of callback requests */
- SEM_HANDLE callbackExit; /* signalled when callback thrd exits */
- LIST_HEAD pipes; /* list of pipes owned by client */
- LIST_HEAD notifyReqs; /* list of dynamic attach requests */
- char clientName [USBD_NAME_LEN+1]; /* client's text name */
- } USBD_CLIENT, *pUSBD_CLIENT;
- /*
- * USBD_PORT
- *
- * USB hubs have one or more ports to which additional USB devices/hubs
- * may be attached. The USBD_PORT structure maintains all currently available
- * inforamtion for each port on a hub.
- */
- typedef struct usbd_port
- {
- struct usbd_node *pNode; /* node attached to port */
- } USBD_PORT, *pUSBD_PORT;
- /*
- * USBD_NODE
- *
- * Each device or hub attached to the USB is termed a "node" by the USBD.
- * The USBD_NODE structure maintains all currently available information
- * about a node. If the node is a hub, then space will be allocated for
- * a ports[] array large enough to accomodate each port on the hub.
- */
- typedef struct usbd_node
- {
- USBD_NODE_ID nodeHandle; /* handle assigned to node */
- USBD_NODE_INFO nodeInfo; /* Current node information */
- struct usbd_bus *pBus; /* pointer to parent bus */
- UINT16 busAddress; /* USB bus address for dev/hub */
- UINT16 topologyDepth; /* number of cable hops from root */
- UINT16 maxPower; /* power draw for selected config */
- USB_DEVICE_DESCR devDescr; /* Device descriptor */
- LIST_HEAD classTypes; /* list of device class types */
- BOOL nodeDeletePending; /* TRUE when node being deleted */
- /* NOTE: The following fields are used during control pipe transfers to
- * this node. controlSem is used to ensure that only one control pipe
- * request is active for each device at any given time.
- */
- USBD_PIPE_HANDLE controlPipe; /* control pipe handle */
- SEM_HANDLE controlSem; /* only one outstanding request */
- /* to control pipe at a time */
- pUSBD_CLIENT pClient; /* client invoking the control URB */
- pURB_HEADER pUrb; /* Ptr to pending control xfr URB */
- pUINT16 pActLen; /* Ptr to bfr to receive IN actlen */
- USB_SETUP setup; /* control pipe Setup packet */
- USB_IRP irp; /* irp to describe control transfer */
- USB_BFR_LIST extra [2]; /* irp includes room for a single */
- /* USB_BFR_LIST. We need room for 3 */
- /* so we allocate an extra here */
- LIST_HEAD pipes; /* list of pipes addressed to node */
- /* NOTE: The following fields are used only for hub nodes. */
- UINT16 pwrGoodDelay; /* power-ON to power good delay */
- UINT16 hubContrCurrent; /* hub controller power requirements */
- BOOL selfPowered; /* TRUE if hub/port is self powered */
- UINT16 maxPowerPerPort; /* max power port can provide */
- USBD_PIPE_HANDLE hubStatusPipe; /* status pipe handle */
- USB_IRP hubIrp; /* IRP used to monitor hub status */
- UINT16 numPorts; /* number of ports, used for hubs */
- pUSBD_PORT pPorts; /* Array of ports, used for hubs */
- UINT8 * pHubStatus; /* receives hub status */
- } USBD_NODE, *pUSBD_NODE;
- /*
- * USBD_BUS
- *
- * Each HCD attached to the USBD may control one or more bus. The USBD_BUS
- * structure contains all information for a given bus.
- */
- typedef struct usbd_bus
- {
- struct usbd_hcd *pHcd; /* pointer to parent HCD */
- UINT16 busNo; /* this bus's index with HCD */
- pUSBD_NODE pRoot; /* root node for this bus */
- THREAD_HANDLE busThread; /* thread to monitor bus events */
- QUEUE_HANDLE busQueue; /* queue to receive bus events */
- SEM_HANDLE busExit; /* signallen when bus thd exits */
- UINT32 nanoseconds; /* bus bandwidth in use for */
- /* isochronous and interrupt pipes */
- pUSBD_CLIENT pSofMasterClient; /* client which is SOF master or NULL */
- USBD_STATS stats; /* bus operating statistics */
- UINT8 adrsVec [USB_MAX_DEVICES]; /* USB addresses in use */
- BOOL suspended; /* TRUE if bus currently SUSPENDed */
- } USBD_BUS, *pUSBD_BUS;
- /*
- * USBD_HCD
- *
- * The USBD maintains a list of currently attached HCDs. Each HCD may control
- * one or more buses.
- */
- typedef struct usbd_hcd
- {
- LINK hcdLink; /* linked list of HCDs */
- GENERIC_HANDLE attachToken; /* Attach token returned for this HCD */
- HCD_NEXUS nexus; /* identifies connection to HCD */
- UINT16 busCount; /* number of buses managed by HCD */
- pUSBD_BUS pBuses; /* buses managed by HCD */
- } USBD_HCD, *pUSBD_HCD;
- #ifdef __cplusplus
- }
- #endif
- #endif /* __INCusbdStructuresh */
- /* End of file. */