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

📄 fsl_usb2_udc.h

📁 linux下面gadget设备驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
#define  EPCTRL_TX_TYPE                       0x000C0000#define  EPCTRL_TX_DATA_SOURCE                0x00020000	/* Not EP0 */#define  EPCTRL_TX_EP_STALL                   0x00010000#define  EPCTRL_RX_ENABLE                     0x00000080#define  EPCTRL_RX_DATA_TOGGLE_RST            0x00000040	/* Not EP0 */#define  EPCTRL_RX_DATA_TOGGLE_INH            0x00000020	/* Not EP0 */#define  EPCTRL_RX_TYPE                       0x0000000C#define  EPCTRL_RX_DATA_SINK                  0x00000002	/* Not EP0 */#define  EPCTRL_RX_EP_STALL                   0x00000001/* bit 19-18 and 3-2 are endpoint type */#define  EPCTRL_EP_TYPE_CONTROL               0#define  EPCTRL_EP_TYPE_ISO                   1#define  EPCTRL_EP_TYPE_BULK                  2#define  EPCTRL_EP_TYPE_INTERRUPT             3#define  EPCTRL_TX_EP_TYPE_SHIFT              18#define  EPCTRL_RX_EP_TYPE_SHIFT              2/* SNOOPn Register Bit Masks */#define  SNOOP_ADDRESS_MASK                   0xFFFFF000#define  SNOOP_SIZE_ZERO                      0x00	/* snooping disable */#define  SNOOP_SIZE_4KB                       0x0B	/* 4KB snoop size */#define  SNOOP_SIZE_8KB                       0x0C#define  SNOOP_SIZE_16KB                      0x0D#define  SNOOP_SIZE_32KB                      0x0E#define  SNOOP_SIZE_64KB                      0x0F#define  SNOOP_SIZE_128KB                     0x10#define  SNOOP_SIZE_256KB                     0x11#define  SNOOP_SIZE_512KB                     0x12#define  SNOOP_SIZE_1MB                       0x13#define  SNOOP_SIZE_2MB                       0x14#define  SNOOP_SIZE_4MB                       0x15#define  SNOOP_SIZE_8MB                       0x16#define  SNOOP_SIZE_16MB                      0x17#define  SNOOP_SIZE_32MB                      0x18#define  SNOOP_SIZE_64MB                      0x19#define  SNOOP_SIZE_128MB                     0x1A#define  SNOOP_SIZE_256MB                     0x1B#define  SNOOP_SIZE_512MB                     0x1C#define  SNOOP_SIZE_1GB                       0x1D#define  SNOOP_SIZE_2GB                       0x1E	/* 2GB snoop size *//* pri_ctrl Register Bit Masks */#define  PRI_CTRL_PRI_LVL1                    0x0000000C#define  PRI_CTRL_PRI_LVL0                    0x00000003/* si_ctrl Register Bit Masks */#define  SI_CTRL_ERR_DISABLE                  0x00000010#define  SI_CTRL_IDRC_DISABLE                 0x00000008#define  SI_CTRL_RD_SAFE_EN                   0x00000004#define  SI_CTRL_RD_PREFETCH_DISABLE          0x00000002#define  SI_CTRL_RD_PREFEFETCH_VAL            0x00000001/* control Register Bit Masks */#define  USB_CTRL_IOENB                       0x00000004#define  USB_CTRL_ULPI_INT0EN                 0x00000001/* Endpoint Queue Head data struct * Rem: all the variables of qh are LittleEndian Mode * and NEXT_POINTER_MASK should operate on a LittleEndian, Phy Addr */struct ep_queue_head {	u32 max_pkt_length;	/* Mult(31-30) , Zlt(29) , Max Pkt len				   and IOS(15) */	u32 curr_dtd_ptr;	/* Current dTD Pointer(31-5) */	u32 next_dtd_ptr;	/* Next dTD Pointer(31-5), T(0) */	u32 size_ioc_int_sts;	/* Total bytes (30-16), IOC (15),				   MultO(11-10), STS (7-0)  */	u32 buff_ptr0;		/* Buffer pointer Page 0 (31-12) */	u32 buff_ptr1;		/* Buffer pointer Page 1 (31-12) */	u32 buff_ptr2;		/* Buffer pointer Page 2 (31-12) */	u32 buff_ptr3;		/* Buffer pointer Page 3 (31-12) */	u32 buff_ptr4;		/* Buffer pointer Page 4 (31-12) */	u32 res1;	u8 setup_buffer[8];	/* Setup data 8 bytes */	u32 res2[4];};/* Endpoint Queue Head Bit Masks */#define  EP_QUEUE_HEAD_MULT_POS               30#define  EP_QUEUE_HEAD_ZLT_SEL                0x20000000#define  EP_QUEUE_HEAD_MAX_PKT_LEN_POS        16#define  EP_QUEUE_HEAD_MAX_PKT_LEN(ep_info)   (((ep_info)>>16)&0x07ff)#define  EP_QUEUE_HEAD_IOS                    0x00008000#define  EP_QUEUE_HEAD_NEXT_TERMINATE         0x00000001#define  EP_QUEUE_HEAD_IOC                    0x00008000#define  EP_QUEUE_HEAD_MULTO                  0x00000C00#define  EP_QUEUE_HEAD_STATUS_HALT	      0x00000040#define  EP_QUEUE_HEAD_STATUS_ACTIVE          0x00000080#define  EP_QUEUE_CURRENT_OFFSET_MASK         0x00000FFF#define  EP_QUEUE_HEAD_NEXT_POINTER_MASK      0xFFFFFFE0#define  EP_QUEUE_FRINDEX_MASK                0x000007FF#define  EP_MAX_LENGTH_TRANSFER               0x4000/* Endpoint Transfer Descriptor data struct *//* Rem: all the variables of td are LittleEndian Mode */struct ep_td_struct {	u32 next_td_ptr;	/* Next TD pointer(31-5), T(0) set				   indicate invalid */	u32 size_ioc_sts;	/* Total bytes (30-16), IOC (15),				   MultO(11-10), STS (7-0)  */	u32 buff_ptr0;		/* Buffer pointer Page 0 */	u32 buff_ptr1;		/* Buffer pointer Page 1 */	u32 buff_ptr2;		/* Buffer pointer Page 2 */	u32 buff_ptr3;		/* Buffer pointer Page 3 */	u32 buff_ptr4;		/* Buffer pointer Page 4 */	u32 res;	/* 32 bytes */	dma_addr_t td_dma;	/* dma address for this td */	/* virtual address of next td specified in next_td_ptr */	struct ep_td_struct *next_td_virt;};/* Endpoint Transfer Descriptor bit Masks */#define  DTD_NEXT_TERMINATE                   0x00000001#define  DTD_IOC                              0x00008000#define  DTD_STATUS_ACTIVE                    0x00000080#define  DTD_STATUS_HALTED                    0x00000040#define  DTD_STATUS_DATA_BUFF_ERR             0x00000020#define  DTD_STATUS_TRANSACTION_ERR           0x00000008#define  DTD_RESERVED_FIELDS                  0x80007300#define  DTD_ADDR_MASK                        0xFFFFFFE0#define  DTD_PACKET_SIZE                      0x7FFF0000#define  DTD_LENGTH_BIT_POS                   16#define  DTD_ERROR_MASK                       (DTD_STATUS_HALTED | \                                               DTD_STATUS_DATA_BUFF_ERR | \                                               DTD_STATUS_TRANSACTION_ERR)/* Alignment requirements; must be a power of two */#define DTD_ALIGNMENT				0x20#define QH_ALIGNMENT				2048/* Controller dma boundary */#define UDC_DMA_BOUNDARY			0x1000/* -----------------------------------------------------------------------*//* ##### enum data*/typedef enum {	e_ULPI,	e_UTMI_8BIT,	e_UTMI_16BIT,	e_SERIAL} e_PhyInterface;/*-------------------------------------------------------------------------*//* ### driver private data */struct fsl_req {	struct usb_request req;	struct list_head queue;	/* ep_queue() func will add	   a request->queue into a udc_ep->queue 'd tail */	struct fsl_ep *ep;	unsigned mapped:1;	struct ep_td_struct *head, *tail;	/* For dTD List						   cpu endian Virtual addr */	unsigned int dtd_count;};#define REQ_UNCOMPLETE			1struct fsl_ep {	struct usb_ep ep;	struct list_head queue;	struct fsl_udc *udc;	struct ep_queue_head *qh;	const struct usb_endpoint_descriptor *desc;	struct usb_gadget *gadget;	char name[14];	unsigned stopped:1;};#define EP_DIR_IN	1#define EP_DIR_OUT	0struct fsl_udc {	struct usb_gadget gadget;	struct usb_gadget_driver *driver;	struct fsl_ep *eps;	unsigned int max_ep;	unsigned int irq;	struct usb_ctrlrequest local_setup_buff;	spinlock_t lock;	struct otg_transceiver *transceiver;	unsigned softconnect:1;	unsigned vbus_active:1;	unsigned stopped:1;	unsigned remote_wakeup:1;	struct ep_queue_head *ep_qh;	/* Endpoints Queue-Head */	struct fsl_req *status_req;	/* ep0 status request */	struct dma_pool *td_pool;	/* dma pool for DTD */	enum fsl_usb2_phy_modes phy_mode;	size_t ep_qh_size;		/* size after alignment adjustment*/	dma_addr_t ep_qh_dma;		/* dma address of QH */	u32 max_pipes;		/* Device max pipes */	u32 max_use_endpts;	/* Max endpointes to be used */	u32 bus_reset;		/* Device is bus reseting */	u32 resume_state;	/* USB state to resume */	u32 usb_state;		/* USB current state */	u32 usb_next_state;	/* USB next state */	u32 ep0_state;		/* Endpoint zero state */	u32 ep0_dir;		/* Endpoint zero direction: can be				   USB_DIR_IN or USB_DIR_OUT */	u32 usb_sof_count;	/* SOF count */	u32 errors;		/* USB ERRORs count */	u8 device_address;	/* Device USB address */	struct completion *done;	/* to make sure release() is done */};/*-------------------------------------------------------------------------*/#ifdef DEBUG#define DBG(fmt, args...) 	printk(KERN_DEBUG "[%s]  " fmt "\n", \				__FUNCTION__, ## args)#else#define DBG(fmt, args...)	do{}while(0)#endif#if 0static void dump_msg(const char *label, const u8 * buf, unsigned int length){	unsigned int start, num, i;	char line[52], *p;	if (length >= 512)		return;	DBG("%s, length %u:\n", label, length);	start = 0;	while (length > 0) {		num = min(length, 16u);		p = line;		for (i = 0; i < num; ++i) {			if (i == 8)				*p++ = ' ';			sprintf(p, " %02x", buf[i]);			p += 3;		}		*p = 0;		printk(KERN_DEBUG "%6x: %s\n", start, line);		buf += num;		start += num;		length -= num;	}}#endif#ifdef VERBOSE#define VDBG		DBG#else#define VDBG(stuff...)	do{}while(0)#endif#define ERR(stuff...)		printk(KERN_ERR "udc: " stuff)#define WARN(stuff...)		printk(KERN_WARNING "udc: " stuff)#define INFO(stuff...)		printk(KERN_INFO "udc: " stuff)/*-------------------------------------------------------------------------*//* ### Add board specific defines here *//* * ### pipe direction macro from device view */#define USB_RECV	0	/* OUT EP */#define USB_SEND	1	/* IN EP *//* * ### internal used help routines. */#define ep_index(EP)		((EP)->desc->bEndpointAddress&0xF)#define ep_maxpacket(EP)	((EP)->ep.maxpacket)#define ep_is_in(EP)	( (ep_index(EP) == 0) ? (EP->udc->ep0_dir == \			USB_DIR_IN ):((EP)->desc->bEndpointAddress \			& USB_DIR_IN)==USB_DIR_IN)#define get_ep_by_pipe(udc, pipe)	((pipe == 1)? &udc->eps[0]: \					&udc->eps[pipe])#define get_pipe_by_windex(windex)	((windex & USB_ENDPOINT_NUMBER_MASK) \					* 2 + ((windex & USB_DIR_IN) ? 1 : 0))#define get_pipe_by_ep(EP)	(ep_index(EP) * 2 + ep_is_in(EP))#endif

⌨️ 快捷键说明

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