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

📄 usb_phci.h

📁 linux下的usb开发
💻 H
📖 第 1 页 / 共 3 页
字号:
	struct phci 		*next; 				// chain of uhci device contexts  	int 				phci_int_load[32];	/* load of the 32 Interrupt Chains (for load balancing)*/	ed_t 				* ed_rm_list[2];    /* lists of all endpoints to be removed */	ed_t 				* ed_bulktail;      /* last endpoint of bulk list */	ed_t 				* ed_controltail;   /* last endpoint of control list */ 	ed_t 				* ed_isohead;       /* first endpoint of iso list */ 	ed_t 				* ed_isotail;       /* last endpoint of iso list */	int 				intrstatus;	__u32 				hc_control;			/* copy of the hc control reg */	struct usb_bus 		* bus;    	struct usb_device 	* dev[128];			/* Usb devices attached to this HCD */	struct virt_root_hub rh;				/* Virtual Root Hub information */	unsigned int		irq;				/* Interrupt line for Philips HC */	unsigned int		dma;				/* Interrupt line for Philips HC */	__u8				*dma_buff;		__u32				uHcHcdControl_hcd;	/* Software Control Register of Philips HC */												/* Bit 5: Bulk List Enable (BLE) */													/* Bit 4: Control List Enable (CLE) */													/* Bit 3: Isochronous Enable (IE) */													/* Bit 2: Periodic List Enable (PLE) */													/* Bit 1..0: Control/Bulk Service Ratio */	__u32				uHcHcdCommandStatus_hcd;	/* Software Command Status Register of Philips HC */													/* Bit 1: Control List Filled (CLF) */													/* Bit 2: Bulk List Filled (BLF) */	__u32				hcd_operational_flags;		/* Host Controller Driver flags */													/* Bit 0-12: bits of REG_BUFF_STS bits */													/* Bit 16: ISOC scheduling needs to be started */	ed_t				* p_int_table[NUM_INTS];	/* Interrupt EndPoint Table (supposdly part of HCCA) */	ed_t				* p_ed_bulkhead;			/* Bulk ED Head (supposdly part of OHCI register) */	ed_t				* p_ed_controlhead;			/* Control ED Head (supposdly part of OHCI register) */#ifdef CONFIG_USB_HCDC_OTG	 phci_otg_data_t	*otg;						/* OTG module private data */	 __u32				otg_port_status;			// OTG Port status	urb_t				*rh_urb;					// Root Hub urb#endif /* CONFIG_USB_HCDC_OTG */		/* PCI device handle and settings */	void				*phci_dev;					/* Keep name info here */	struct phci_regs	phci_regs;} phci_t;#define		ISOC_TRANSFER_ON			0x00010000	/* Bit 16: ISOC transfer for HCD is started */#define		ISOC_SCHED_TO_START			0x00020000	/* Bit 17: ISOC scheduling needs to be started */#define		ISOC_SCHED_MISSED			0x00040000	/* Bit 18: ISOC scheduling missed needs to be corrected */#define		ISOC_ISTL0_SCHED_TO_START	0x00080000	/* Bit 19: ISOC ISTL0 scheduling needs to be started */#define		ISOC_ISTL1_SCHED_TO_START	0x00100000	/* Bit 20: ISOC ISTL1 scheduling needs to be started */#define		ISOC_ISTL0_ISTL1_TO_START	0x00200000	/* Bit 21: ISO1&ISOC2 both started together */#define 	NUM_TDS						0			/* num of preallocated transfer descriptors */#define 	NUM_EDS 					32			/* num of preallocated endpoint descriptors *//* Structure for phci related device data structure * dev->hc_priv */struct phci_device {	ed_t 				ed[NUM_EDS];				/* Static Ed's */	int 				ed_cnt;						/* total ed's */	wait_queue_head_t 	* wait;						/* Wait queue head */};#define 	phci_to_usb(phci)			((phci)->usb)#define 	usb_to_phci(usb)			((struct phci_device *)(usb)->hcpriv)/*-------------------------------------------------------------------------*/#define 	ALLOC_FLAGS 					(in_interrupt () ? GFP_ATOMIC : GFP_KERNEL) #ifdef CONFIG_PHCI_MEM_SLAB#define		__alloc(t,c) 					kmem_cache_alloc(c,ALLOC_FLAGS)#define		__free(c,x) 					kmem_cache_free(c,x)static 		kmem_cache_t 					*td_cache, *ed_cache;/* * WARNING:  do NOT use this with "forced slab debug"; it won't respect * our hardware alignment requirement. */#ifndef 	PHCI_MEM_FLAGS#define		PHCI_MEM_FLAGS 					0#endifstatic int ohci_1161_mem_init (void){	/* redzoning (or forced debug!) breaks alignment */	int	flags = (PHCI_MEM_FLAGS) & ~SLAB_RED_ZONE;	/* TDs accessed by controllers and host */	td_cache = kmem_cache_create ("ohci_td", sizeof (struct td), 0,		flags | SLAB_HWCACHE_ALIGN, NULL, NULL);	if (!td_cache) {		dbg ("no TD cache?");		return -ENOMEM;	}	printk("td_cache = %p\n", td_cache);	/* EDs are accessed by controllers and host;  dev part is host-only */	ed_cache = kmem_cache_create ("ohci_ed", sizeof (struct phci_device), 0,		flags | SLAB_HWCACHE_ALIGN, NULL, NULL);	if (!ed_cache) {		dbg ("no ED cache?");		kmem_cache_destroy (td_cache);		td_cache = 0;		return -ENOMEM;	}	printk("ed_cache = %p\n", ed_cache);	dbg ("slab flags 0x%x", flags);	return 0;}static void ohci_1161_mem_cleanup (void){	if (ed_cache && kmem_cache_destroy (ed_cache))		err ("ed_cache remained");	ed_cache = 0;	if (td_cache && kmem_cache_destroy (td_cache))		err ("td_cache remained");	td_cache = 0;}#else#define		__alloc(t,c) 					kmalloc(sizeof(t),ALLOC_FLAGS)#define		__free(dev,x) 					kfree(x)#define 	td_cache 						0#define 	ed_cache 						0static inline int ohci_1161_mem_init (void) { return 0; }static inline void ohci_1161_mem_cleanup (void) { return; }/* FIXME: pci_consistent version */#endifstatic inline struct td *td_alloc (struct phci *hc) {	struct td *td = (struct td *) __alloc (struct td, td_cache);	if(((__u32)td)&0xF) {			/* 		 * The Td and ED structure are 16 byte aligned		 * Make sure that cache allocation is 16 byte aligned		 */		printk("td_aloc: is not 16 byte aligned %p\n", td);		__free (td_cache, td);		td = NULL;	}	return td;}static inline voidtd_free (struct phci *hc, struct td *td) {	__free (td_cache, td);}/* DEV + EDs ... only the EDs need to be consistent */static inline struct phci_device *dev_alloc (struct phci *hc) {	struct phci_device *dev = (struct phci_device *)		__alloc (struct phci_device, ed_cache);	if(((__u32)dev)&0xF)	{		/* 		 * The Td and ED structure are 16 byte aligned		 * Make sure that cache allocation is 16 byte aligned		 */		printk("dev_aloc: is not 16 byte aligned %p\n", dev);		__free (ed_cache, dev);		dev = NULL;	}	return dev;}static inline voiddev_free (struct phci_device *dev) {	__free (ed_cache, dev);}/* Added Philips HC related Constants */#define 	YES						1#define 	NO						0#define 	ON						1#define 	OFF						0#define		MAX_GTD					64#define		INVALID_FRAME_NUMBER			0xFFFFFFFF				/* valid frame # is 0 - FFFF only *//* Bit field definition for hwINFO of the td_t  */#define 	HC_GTD_R						0x00040000UL			/* Buffer Rounding */#define 	HC_GTD_DP						0x00180000UL			/* Direction/PID   */#define 	HC_GTD_DI						0x00E00000UL			/* Delay Interrupt */#define 	HC_GTD_T						0x03000000UL			/* Data Toggle     */#define 	HC_GTD_MLSB						0x02000000UL			/* Data Toggle MSB */#define 	HC_GTD_TLSB						0x01000000UL			/* Data Toggle LSB */#define 	HC_GTD_EC						0x0C000000UL			/* Error Count     */#define 	HC_GTD_CC						0xF0000000UL			/* Condition Code  *//* Bit field definition for hwINFO of the ed_t */#define 	HC_ED_FA						0x0000007FUL			/* Function Address */#define 	HC_ED_EN						0x00000780UL			/* Endpoint Number */#define 	HC_ED_DIR						0x00001800UL			/* Direction of data flow */#define 	HC_ED_SPD						0x00002000UL			/* Device Speed */#define 	HC_ED_SKIP						0x00004000UL			/* Skip this ED */#define 	HC_ED_F							0x00008000UL			/* Format of this ED */#define 	HC_ED_MPS						0x07FF0000UL			/* Maximum Packet Size *//* Bit field definitions for hwNextP of the td_t */#define 	HC_GTD_NEXTTD					0xFFFFFFF0UL			/* Next TD *//* Bit field definition for hwHeadP of the ed_t */#define 	HC_ED_HEADP						0xFFFFFFF0UL			/* Bit 31 .. 4 */#define 	HC_ED_TOGGLE					0x00000002UL			/* Bit 1, toggle carry */#define 	HC_ED_HALTED					0x00000001UL			/* Bit 0, halted *//* Bit field definition for hwTailP of the ed_t */#define 	HC_ED_TAILP						HC_ED_HEADP				/* Bit 31 .. 4 */#define 	OHCI_SETUP						0X00000000UL#define 	OHCI_OUT						0x00000001UL#define 	OHCI_IN							0x00000002UL/*-----------------------------------------------------------*//* Philips HC control and data port numbers *//*-----------------------------------------------------------*//*-----------------------------------------------------------*//* host controller operational registers *//*-----------------------------------------------------------*/#define 	uHcRevision                     0x00UL			/* Revision Register */#define 	uHcControl                      0x01UL			/* Control Register */#define 	uHcCommandStatus                0x02UL			/* Command Status Register */#define 	uHcInterruptStatus              0x03UL			/* Interrupt Status Register */#define 	uHcInterruptEnable              0x04UL			/* Interrupt Enable Register */#define 	uHcInterruptDisable             0x05UL			/* Interrupt Disable Register */#define 	uHcFmInterval                   0x0dUL			/* Frame Interval Register */#define 	uHcFmRemaining                  0x0eUL			/* Frame Remaining Register */#define 	uHcFmNumber                     0x0fUL			/* Frame Number Register */#define 	uHcLsThreshold                  0x11UL			/* Threshold register */#define 	uHcRhDescriptorA                0x12UL			/* Root Hub Descriptor A Register */#define 	uHcRhDescriptorB                0x13UL			/* Root Hub Descriptor B Register */#define 	uHcRhStatus                     0x14UL			/* Root Hub Status Register */#define 	uHcRhPort1Status                0x15UL          /* Root Hub Port 1 status */  /* Philips HC has only two root hub ports */#define 	uHcRhPort2Status                0x16UL			/* Root Hub Port 2 status */ /* These two registers are used internally by software. They are not HC hardware 	registers.*/#define 	uHcHcdControl                   0x17UL			/* HCD Software Control Register */#define 	uHcHcdCommandStatus             0x18UL			/* HCD Software Command Status Register *//* Bit field definition for register HcCommandStatus */#define 	HC_COMMAND_STATUS_HCR			0x00000001UL		/* Host Controller Reset */#define 	HC_COMMAND_STATUS_CLF			0x00000002UL		/* Control List Filled   */#define 	HC_COMMAND_STATUS_BLF			0x00000004UL		/* Bulk List Filled      *//**********************//* HcControl Register *//**********************/#define 	CB_RATIO						3	/* Control/Bulk transfer ratio */												/* 0 = 1:1                     */												/* 1 = 2:1                     */												/* 2 = 3:1                     */												/* 3 = 4:1                     */#define 	PERIODIC_LIST_ENABLE			YES	/* Periodic transfer enable    */#define 	ISO_ENABLE						YES	/* Isochronous transfer enable */#define 	CONTROL_LIST_ENABLE				YES	/* Control transfer enable     */#define 	BULK_LIST_ENABLE				YES	/* Bulk transfer enable        */#define 	HC_STATE						2	/* Host functional state */												/* 0 = Reset             */												/* 1 = Resume            */												/* 2 = Operational       */												/* 3 = Suspend           */#define 	REMOTE_WAKEUP_CONN				NO	/* Remote wakeup connected */#define 	REMOTE_WAKEUP_ENABLE			NO	/* Remote wakeup enable    */#define 	INT_NUM_IRQ0					0x20/* Bit field definition for register HcControl */#define 	HC_CONTROL_HCFS					0x000000C0UL	/* Host Controller Functional State, bit 7..6 */#define 	HC_CONTROL_RWC					0x00000200UL	/* Remote Wakeup Connected, bit 9 */#define 	HC_CONTROL_RWE					0x00000400UL	/* Remote Wakeup Enable, bit 10 *//* Bit field definition for HCD register HcHcdControl *//* PHC does not have this HC register as OHCI     *//* It is added as a global variable to emulate the    *//* OHCI transfer control functionality defined in the *//* following bit field                                */#define 	HC_CONTROL_CBSR					0x00000003UL		/* Control/Bulk ratio */#define 	HC_CONTROL_PLE					0X00000004UL		/* Periodic List Enable */#define 	HC_CONTROL_IE					0x00000008UL		/* Isochronous Enable */#define 	HC_CONTROL_CLE					0x00000010UL		/* Control List Enable */#define 	HC_CONTROL_BLE					0x00000020UL		/* Bulk List Enable */#define 	HC_CONTROL_TIP					0x00000100UL		/* Transfer In Progress *//* Bit field definition for register HcInterruptStatus *//* HcInterruptEnable/HcInterruptDisable registers      */#define 	HC_INTERRUPT_SO					0x00000001UL		/* Scheduling Overrun      */#define 	HC_INTERRUPT_SF					0x00000004UL		/* Start of Frame          */#define 	HC_INTERRUPT_RD					0x00000008UL		/* Resume Detect           */#define 	HC_INTERRUPT_UE					0x00000010UL		/* Unrecoverable error     */#define 	HC_INTERRUPT_FNO				0x00000020UL		/* Frame Number Overflow   */#define 	HC_INTERRUPT_RHSC				0x00000040UL		/* Root Hub Status Change  */#define 	HC_INTERRUPT_ATD				0X00000080UL		/* ATL List Done           */#define 	HC_INTERRUPT_MIE				0x80000000UL		/* Master Interrupt Enable */#define 	HC_INTERRUPT_ALL				0x8000007FUL		/* All interrupts          *//****************************//* HcRhDescriptorA Register *//****************************/

⌨️ 快捷键说明

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