📄 usbdstructures.h
字号:
/* usbdStructures.h - USBD control structures *//* Copyright 2000-2002 Wind River Systems, Inc. *//*Modification history--------------------01f,08nov11,wef change definition of hubStatus to be pHubStatus01e,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.*//*DESCRIPTIONThis file defines structures & constants used by the USBD to manage USBbuses attached to the system. */#ifndef __INCusbdStructuresh#define __INCusbdStructuresh#ifdef __cplusplusextern "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. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -