cy7c67200_300_hcd.h

来自「linux嵌入式课程实践中的一个关于声卡驱动程序 。」· C头文件 代码 · 共 209 行

H
209
字号
/* * CY7C67200/300 HCD (Host Controller Driver) for USB. *  * COPYRIGHT (C) by CYPRESS SEMICONDUCTOR INC *  * *//* * Maximum number of root hub ports.   */#define MAX_ROOT_PORTS	1	/* maximum root hub ports */#define URB_DEL 1#define MAX_PORT_NUM					0x4#define PORT_STAT_DEFAULT				0x0100#define PORT_CONNECT_STAT  				0x1#define PORT_ENABLE_STAT				0x2#define PORT_SUSPEND_STAT				0x4#define PORT_OVER_CURRENT_STAT 			0x8#define PORT_RESET_STAT					0x10#define PORT_POWER_STAT					0x100#define PORT_LOW_SPEED_DEV_ATTACH_STAT 	0x200#define PORT_CHANGE_DEFAULT				0x0#define PORT_CONNECT_CHANGE				0x1#define PORT_ENABLE_CHANGE				0x2#define PORT_SUSPEND_CHANGE				0x4#define PORT_OVER_CURRENT_CHANGE	   	0x8#define PORT_RESET_CHANGE				0x10/* OTG */#define B_HNP_ENABLE					0x3#define A_HNP_SUPPORT					0x4#define A_ALT_HNP_SUPPORT				0x5/* TD */#define TD_PIDEP_OFFSET					0x04#define TD_PIDEPMASK_PID				0xF0#define TD_PIDEPMASK_EP					0x0F#define TD_PORTLENMASK_DL				0x02FF			#define TD_PORTLENMASK_PN				0xC000			#define TD_STATUS_OFFSET				0x07#define TD_STATUSMASK_ACK				0x01#define TD_STATUSMASK_ERR				0x02#define TD_STATUSMASK_TMOUT				0x04#define TD_STATUSMASK_SEQ				0x08#define TD_STATUSMASK_SETUP				0x10#define TD_STATUSMASK_OVF				0x20#define TD_STATUSMASK_NAK				0x40#define TD_STATUSMASK_STALL				0x80#define TD_RETRYCNT_OFFSET				0x08#define TD_RETRYCNTMASK_ACT_FLG			0x10#define TD_RETRYCNTMASK_TX_TYPE			0x0C#define TD_RETRYCNTMASK_RTY_CNT			0x03#define SIE_TD_SIZE 			0x200	/* size of the td list */#define SIE_TD_BUF_SIZE			0x400	/* size of the data buffer */#define SIE0_TD_OFFSET    		0#define SIE0_BUF_OFFSET			SIE0_TD_OFFSET + SIE_TD_SIZE		#define SIE1_TD_OFFSET	    	SIE0_BUF_OFFSET + SIE_TD_BUF_SIZE#define SIE1_BUF_OFFSET			SIE1_TD_OFFSET + SIE_TD_SIZE		#define CY_TD_SIZE		  		12/* SBC info */#define SBC_DIP_REG 				0xd7200000#define SBC_EXP_PORT_PRESENT_REG 	0xd7100000#define	CP_PRESENT					0x0#define SBC_EXP_PORT_RESET			0xd7000000/* Design Examples */#define SAB_DIP_READ_REG			0x0#define SAB_DIP_MASK                0x3f#define DE1_HPI						0x39#define DE2_HPI						0x35#define DE2_HSS						0x34#define DE2_SPI						0x36#define DE3_HPI						0x31#define DE4_HPI						0x2D#define USB_HOST_MODE				1#define USB_PERIPHERAL_MODE			2/* Port Status Request info */typedef struct portstat {	__u16 portChange;	__u16 portStatus;} portstat_t;typedef struct hw_td {	__u16 ly_base_addr;				/* location of the data buffer in CY */	__u16 port_length; 					__u8 pid_ep;	__u8 dev_addr;	__u8 ctrl_reg;	__u8 status;	__u8 retryCnt;	__u8 residue;	__u16 next_td_Addr;} hw_td_t;typedef struct td {	__u16 ly_base_addr;				/* location of the data buffer in CY */	__u16 port_length; 					__u8 pid_ep;	__u8 dev_addr;	__u8 ctrl_reg;	__u8 status;	__u8 retry_cnt;	__u8 residue;	__u16 next_td_addr;	char * sa_data_ptr;        /* the data that reside in the external host */		int last_td_flag;		   /* stage for this td */	struct list_head td_list;     	/* td list */	urb_t * urb;} td_t;typedef struct sie {	__u16 tdBaseAddr;   /* SIE TD list base address */	__u16 tdLen;        /* SIE TD list length */	__u16 bufBaseAddr;  /* SIE buffer base address */	__u16 bufLen;       /* SIE buffer length */	__u16 last_td_addr; /* the last TD addr in cy7c67200/300 */	__u16 last_buf_addr; /* the last buffer addr in cy7c67200/300 */	int bandwidth_allocated;  /* USB bandwidth allocated for this SIE */	int periodic_bw_allocated; /* USB bandwidth allocated for ISOC/Interrupt transfer */	int td_active;	struct list_head td_list_head;     /* head pointer to td_list */	struct list_head done_list_head;   /* head pointer to a done_list */} sie_t;typedef struct virt_root_hub {	int devnum; 		/* Address of Root Hub endpoint */ 	void * urb;			/* interrupt URB of root hub */	int send;			/* active flag */ 	int interval;		/* intervall of roothub interrupt transfers */	struct timer_list rh_int_timer; /* intervall timer for rh interrupt EP */}virt_root_hub_t;typedef struct hcipriv {    virt_root_hub_t rh;        /* roothub for this port */	int host_disabled;		/* 0 = host port, 1 = otg or peripheral port*/	atomic_t resume_count;		/* defending against multiple resumes */        struct usb_bus * bus;           /* our bus */ 	struct portstat * RHportStatus; /* root hub port status */	int frame_number;	    struct list_head ctrl_list;     /* set of ctrl endpoints */    struct list_head bulk_list;     /* set of bulk endpoints */    struct list_head iso_list;      /* set of isoc endpoints */    struct list_head intr_list;     /* set of int endpoints */    struct list_head del_list;      /* set of entpoints to be deleted */    struct list_head frame_urb_list;/* list of all urb in current frame */    otg_t otg;	int active_urbs;		/* A number of active urbs */	int xferPktLen;	int units_left;} hcipriv_t;struct hci;extern int urb_debug;extern int hc_parse_td (cy_priv_t * cy_priv, td_t * td, int td_addr, int * actbytes,                                int *cc, int * activeFlag, int * toggle, int pipetype);extern int cy67x00_get_current_frame_number (cy_priv_t * cy_priv, int port_num);extern int cy67x00_get_next_frame_number (cy_priv_t * cy_priv, int port_num);extern void hcd_irq_sofeop1(cy_priv_t *cy_priv);extern void hcd_irq_sofeop2(cy_priv_t *cy_priv);extern void hcd_irq_mb_in(cy_priv_t *cy_priv);extern void hcd_irq_mb_out(unsigned int message, int sie, cy_priv_t *cy_priv);extern void hcd_irq_resume1(cy_priv_t *cy_priv);extern void hcd_irq_resume2(cy_priv_t *cy_priv);extern void hcd_irq_enable_host_periph_ints(cy_priv_t *cy_priv);void hcd_switch_role(int new_role, cy_priv_t * cy_priv);void HWTrace(unsigned short data);void HWData(unsigned short data);int pcd_init(int sie_num, int de_num, cy_priv_t * cy_priv);		#define PID_SETUP   0x2d   // USB Specification 1.1 Standard Definition#define PID_SOF     0xA5#define PID_IN      0x69#define PID_OUT     0xe1#define TD_PID_SETUP	0xD0#define TD_PID_SOF     	0x50#define TD_PID_IN      	0x90#define TD_PID_OUT     	0x10#define TIMEOUT     5    /* 2 mseconds */

⌨️ 快捷键说明

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