📄 hub.h
字号:
#ifndef __LINUX_HUB_H#define __LINUX_HUB_H#include <linux/list.h>/* * Hub request types */#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)/* * Hub Class feature numbers */#define C_HUB_LOCAL_POWER 0#define C_HUB_OVER_CURRENT 1/* * Port feature numbers */#define USB_PORT_FEAT_CONNECTION 0#define USB_PORT_FEAT_ENABLE 1#define USB_PORT_FEAT_SUSPEND 2#define USB_PORT_FEAT_OVER_CURRENT 3#define USB_PORT_FEAT_RESET 4#define USB_PORT_FEAT_POWER 8#define USB_PORT_FEAT_LOWSPEED 9#define USB_PORT_FEAT_C_CONNECTION 16#define USB_PORT_FEAT_C_ENABLE 17#define USB_PORT_FEAT_C_SUSPEND 18#define USB_PORT_FEAT_C_OVER_CURRENT 19#define USB_PORT_FEAT_C_RESET 20struct usb_port_status { __u16 wPortStatus; __u16 wPortChange; } __attribute__ ((packed));/* wPortStatus bits */#define USB_PORT_STAT_CONNECTION 0x0001#define USB_PORT_STAT_ENABLE 0x0002#define USB_PORT_STAT_SUSPEND 0x0004#define USB_PORT_STAT_OVERCURRENT 0x0008#define USB_PORT_STAT_RESET 0x0010#define USB_PORT_STAT_POWER 0x0100#define USB_PORT_STAT_LOW_SPEED 0x0200/* wPortChange bits */#define USB_PORT_STAT_C_CONNECTION 0x0001#define USB_PORT_STAT_C_ENABLE 0x0002#define USB_PORT_STAT_C_SUSPEND 0x0004#define USB_PORT_STAT_C_OVERCURRENT 0x0008#define USB_PORT_STAT_C_RESET 0x0010/* wHubCharacteristics (masks) */#define HUB_CHAR_LPSM 0x0003#define HUB_CHAR_COMPOUND 0x0004#define HUB_CHAR_OCPM 0x0018struct usb_hub_status { __u16 wHubStatus; __u16 wHubChange;} __attribute__ ((packed));/* *Hub Status & Hub Change bit masks */#define HUB_STATUS_LOCAL_POWER 0x0001#define HUB_STATUS_OVERCURRENT 0x0002#define HUB_CHANGE_LOCAL_POWER 0x0001#define HUB_CHANGE_OVERCURRENT 0x0002/* Hub descriptor */struct usb_hub_descriptor { __u8 bLength; __u8 bDescriptorType; __u8 bNbrPorts; __u16 wHubCharacteristics;#if 0 __u8 wHubCharacteristics[2]; /* __u16 but not aligned! */#endif __u8 bPwrOn2PwrGood; __u8 bHubContrCurrent; /* DeviceRemovable and PortPwrCtrlMask want to be variable-length bitmaps that hold max 256 entries, but for now they're ignored */#if 0 __u8 filler;#endif} __attribute__ ((packed));struct usb_device;typedef enum { USB_PORT_UNPOWERED = 0, /* Default state */ USB_PORT_POWERED, /* When we've put power to it */ USB_PORT_ENABLED, /* When it's been enabled */ USB_PORT_DISABLED, /* If it's been disabled */ USB_PORT_ADMINDISABLED, /* Forced down */} usb_hub_port_state;struct usb_hub_port { usb_hub_port_state cstate; /* Configuration state */ struct usb_device *child; /* Device attached to this port */ struct usb_hub *parent; /* Parent hub */};struct usb_hub { /* Device structure */ struct usb_device *dev; /* Reference to the hub's polling IRQ and its associated pipe */ void *irq_handle; unsigned int irqpipe; /* List of hubs */ struct list_head hub_list; /* Temporary event list */ struct list_head event_list; /* Number of ports on the hub */ int nports; struct usb_hub_port ports[0]; /* Dynamically allocated */};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -