⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hub.h

📁 优龙2410linux2.6.8内核源代码
💻 H
字号:
#ifndef __LINUX_HUB_H#define __LINUX_HUB_H/* * Hub protocol and driver data structures. * * Some of these are known to the "virtual root hub" code * in host controller drivers. */#include <linux/list.h>#include <linux/workqueue.h>#include <linux/compiler.h>	/* likely()/unlikely() *//* * 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 requests * See USB 2.0 spec Table 11-16 */#define HUB_CLEAR_TT_BUFFER	8#define HUB_RESET_TT		9#define HUB_GET_TT_STATE	10#define HUB_STOP_TT		11/* * Hub Class feature numbers * See USB 2.0 spec Table 11-17 */#define C_HUB_LOCAL_POWER	0#define C_HUB_OVER_CURRENT	1/* * Port feature numbers * See USB 2.0 spec Table 11-17 */#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_HIGHSPEED		10#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		20#define USB_PORT_FEAT_TEST              21#define USB_PORT_FEAT_INDICATOR         22/*  * Hub Status and Hub Change results * See USB 2.0 spec Table 11-19 and Table 11-20 */struct usb_port_status {	__u16 wPortStatus;	__u16 wPortChange;	} __attribute__ ((packed));/*  * wPortStatus bit field * See USB 2.0 spec Table 11-21 */#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/* bits 5 to 7 are reserved */#define USB_PORT_STAT_POWER		0x0100#define USB_PORT_STAT_LOW_SPEED		0x0200#define USB_PORT_STAT_HIGH_SPEED        0x0400#define USB_PORT_STAT_TEST              0x0800#define USB_PORT_STAT_INDICATOR         0x1000/* bits 13 to 15 are reserved *//*  * wPortChange bit field * See USB 2.0 spec Table 11-22 * Bits 0 to 4 shown, bits 5 to 15 are reserved */#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)  * See USB 2.0 spec Table 11-13, offset 3 */#define HUB_CHAR_LPSM		0x0003 /* D1 .. D0 */#define HUB_CHAR_COMPOUND	0x0004 /* D2       */#define HUB_CHAR_OCPM		0x0018 /* D4 .. D3 */#define HUB_CHAR_TTTT           0x0060 /* D6 .. D5 */#define HUB_CHAR_PORTIND        0x0080 /* D7       */struct usb_hub_status {	__u16 wHubStatus;	__u16 wHubChange;} __attribute__ ((packed));/* * Hub Status & Hub Change bit masks * See USB 2.0 spec Table 11-19 and Table 11-20 * Bits 0 and 1 for wHubStatus and wHubChange * Bits 2 to 15 are reserved for both */#define HUB_STATUS_LOCAL_POWER	0x0001#define HUB_STATUS_OVERCURRENT	0x0002#define HUB_CHANGE_LOCAL_POWER	0x0001#define HUB_CHANGE_OVERCURRENT	0x0002/*  * Hub descriptor  * See USB 2.0 spec Table 11-13 */#define USB_DT_HUB			(USB_TYPE_CLASS | 0x09)#define USB_DT_HUB_NONVAR_SIZE		7struct usb_hub_descriptor {	__u8  bDescLength;	__u8  bDescriptorType;	__u8  bNbrPorts;	__u16 wHubCharacteristics;	__u8  bPwrOn2PwrGood;	__u8  bHubContrCurrent;	    	/* add 1 bit for hub status change; round to bytes */	__u8  DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];	__u8  PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];} __attribute__ ((packed));/* port indicator status selectors, tables 11-7 and 11-25 */#define HUB_LED_AUTO	0#define HUB_LED_AMBER	1#define HUB_LED_GREEN	2#define HUB_LED_OFF	3enum hub_led_mode {	INDICATOR_AUTO = 0,	INDICATOR_CYCLE,	/* software blinks for attention:  software, hardware, reserved */	INDICATOR_GREEN_BLINK, INDICATOR_GREEN_BLINK_OFF,	INDICATOR_AMBER_BLINK, INDICATOR_AMBER_BLINK_OFF,	INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF} __attribute__ ((packed));struct usb_device;/* * As of USB 2.0, full/low speed devices are segregated into trees. * One type grows from USB 1.1 host controllers (OHCI, UHCI etc). * The other type grows from high speed hubs when they connect to * full/low speed devices using "Transaction Translators" (TTs). * * TTs should only be known to the hub driver, and high speed bus * drivers (only EHCI for now).  They affect periodic scheduling and * sometimes control/bulk error recovery. */struct usb_tt {	struct usb_device	*hub;	/* upstream highspeed hub */	int			multi;	/* true means one TT per port */	/* for control/bulk error recovery (CLEAR_TT_BUFFER) */	spinlock_t		lock;	struct list_head	clear_list;	/* of usb_tt_clear */	struct work_struct			kevent;};struct usb_tt_clear {	struct list_head	clear_list;	unsigned		tt;	u16			devinfo;};extern void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe);struct usb_hub {	struct usb_interface	*intf;		/* the "real" device */	struct usb_device	*hdev;	struct urb		*urb;		/* for interrupt polling pipe */	/* buffer for urb ... 1 bit each for hub and children, rounded up */	char			(*buffer)[(USB_MAXCHILDREN + 1 + 7) / 8];	dma_addr_t		buffer_dma;	/* DMA address for buffer */	union {		struct usb_hub_status	hub;		struct usb_port_status	port;	}			*status;	/* buffer for status reports */	int			error;		/* last reported error */	int			nerrors;	/* track consecutive errors */	struct list_head	event_list;	/* hubs w/data or errs ready */	unsigned long		event_bits[1];	/* status change bitmask */	unsigned long		change_bits[1];	/* ports with logical connect							status change */#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1 */#error event_bits[] is too short!#endif	struct usb_hub_descriptor *descriptor;	/* class descriptor */	struct usb_tt		tt;		/* Transaction Translator */	u8			power_budget;	/* in 2mA units; or zero */	unsigned		has_indicators:1;	enum hub_led_mode	indicator[USB_MAXCHILDREN];	struct work_struct	leds;};/* use this for low-powered root hubs */static inline voidhub_set_power_budget (struct usb_device *hubdev, unsigned mA){	struct usb_hub	*hub;	hub = (struct usb_hub *)		usb_get_intfdata (hubdev->actconfig->interface[0]);	hub->power_budget = min(mA,(unsigned)500)/2;}#endif /* __LINUX_HUB_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -