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

📄 r8a66597.h

📁 uboot详细解读可用启动引导LINUX2.6内核
💻 H
📖 第 1 页 / 共 2 页
字号:
#define	PBUSY		0x0020	/* b5: pipe busy */#define	PINGE		0x0010	/* b4: ping enable */#define	CCPL		0x0004	/* b2: Enable control transfer complete */#define	PID		0x0003	/* b1-0: Response PID */#define	  PID_STALL11	 0x0003	  /* STALL */#define	  PID_STALL	 0x0002	  /* STALL */#define	  PID_BUF	 0x0001	  /* BUF */#define	  PID_NAK	 0x0000	  /* NAK *//* Pipe Window Select Register */#define	PIPENM		0x0007	/* b2-0: Pipe select *//* Pipe Configuration Register */#define	R8A66597_TYP	0xC000	/* b15-14: Transfer type */#define	  R8A66597_ISO	 0xC000		  /* Isochronous */#define	  R8A66597_INT	 0x8000		  /* Interrupt */#define	  R8A66597_BULK	 0x4000		  /* Bulk */#define	R8A66597_BFRE	0x0400	/* b10: Buffer ready interrupt mode select */#define	R8A66597_DBLB	0x0200	/* b9: Double buffer mode select */#define	R8A66597_CNTMD	0x0100	/* b8: Continuous transfer mode select */#define	R8A66597_SHTNAK	0x0080	/* b7: Transfer end NAK */#define	R8A66597_DIR	0x0010	/* b4: Transfer direction select */#define	R8A66597_EPNUM	0x000F	/* b3-0: Eendpoint number select *//* Pipe Buffer Configuration Register */#define	BUFSIZE		0x7C00	/* b14-10: Pipe buffer size */#define	BUFNMB		0x007F	/* b6-0: Pipe buffer number */#define	PIPE0BUF	256#define	PIPExBUF	64/* Pipe Maxpacket Size Register */#define	MXPS		0x07FF	/* b10-0: Maxpacket size *//* Pipe Cycle Configuration Register */#define	IFIS	0x1000	/* b12: Isochronous in-buffer flush mode select */#define	IITV	0x0007	/* b2-0: Isochronous interval *//* Pipex Control Register */#define	BSTS	0x8000	/* b15: Buffer status */#define	INBUFM	0x4000	/* b14: IN buffer monitor (Only for PIPE1 to 5) */#define	CSCLR	0x2000	/* b13: complete-split status clear */#define	CSSTS	0x1000	/* b12: complete-split status */#define	ATREPM	0x0400	/* b10: Auto repeat mode */#define	ACLRM	0x0200	/* b9: Out buffer auto clear mode */#define	SQCLR	0x0100	/* b8: Sequence toggle bit clear */#define	SQSET	0x0080	/* b7: Sequence toggle bit set */#define	SQMON	0x0040	/* b6: Sequence toggle bit monitor */#define	PBUSY	0x0020	/* b5: pipe busy */#define	PID	0x0003	/* b1-0: Response PID *//* PIPExTRE */#define	TRENB		0x0200	/* b9: Transaction counter enable */#define	TRCLR		0x0100	/* b8: Transaction counter clear *//* PIPExTRN */#define	TRNCNT		0xFFFF	/* b15-0: Transaction counter *//* DEVADDx */#define	UPPHUB		0x7800#define	HUBPORT		0x0700#define	USBSPD		0x00C0#define	RTPORT		0x0001#define R8A66597_MAX_NUM_PIPE		10#define R8A66597_BUF_BSIZE		8#define R8A66597_MAX_DEVICE		10#if defined(CONFIG_SUPERH_ON_CHIP_R8A66597)#define R8A66597_MAX_ROOT_HUB		1#else#define R8A66597_MAX_ROOT_HUB		2#endif#define R8A66597_MAX_SAMPLING		5#define R8A66597_RH_POLL_TIME		10#define BULK_IN_PIPENUM		3#define BULK_IN_BUFNUM		8#define BULK_OUT_PIPENUM	4#define BULK_OUT_BUFNUM		40#define check_bulk_or_isoc(pipenum)	((pipenum >= 1 && pipenum <= 5))#define check_interrupt(pipenum)	((pipenum >= 6 && pipenum <= 9))#define make_devsel(addr)		(addr << 12)struct r8a66597 {	unsigned long reg;	unsigned short pipe_config;	/* bit field */	unsigned short port_status;	unsigned short port_change;	u16 speed;	/* HSMODE or FSMODE or LSMODE */	unsigned char rh_devnum;};static inline u16 r8a66597_read(struct r8a66597 *r8a66597, unsigned long offset){	return inw(r8a66597->reg + offset);}static inline void r8a66597_read_fifo(struct r8a66597 *r8a66597,				      unsigned long offset, void *buf,				      int len){	int i;#if defined(CONFIG_SUPERH_ON_CHIP_R8A66597)	unsigned long fifoaddr = r8a66597->reg + offset;	unsigned long count;	unsigned long *p = buf;	count = len / 4;	for (i = 0; i < count; i++)		inl(p[i], r8a66597->reg + offset);	if (len & 0x00000003) {		unsigned long tmp = inl(fifoaddr);		memcpy((unsigned char *)buf + count * 4, &tmp, len & 0x03);	}#else	unsigned short *p = buf;	len = (len + 1) / 2;	for (i = 0; i < len; i++)		p[i] = inw(r8a66597->reg + offset);#endif}static inline void r8a66597_write(struct r8a66597 *r8a66597, u16 val,				  unsigned long offset){	outw(val, r8a66597->reg + offset);}static inline void r8a66597_write_fifo(struct r8a66597 *r8a66597,				       unsigned long offset, void *buf,				       int len){	int i;	unsigned long fifoaddr = r8a66597->reg + offset;#if defined(CONFIG_SUPERH_ON_CHIP_R8A66597)	unsigned long count;	unsigned char *pb;	unsigned long *p = buf;	count = len / 4;	for (i = 0; i < count; i++)		outl(p[i], fifoaddr);	if (len & 0x00000003) {		pb = (unsigned char *)buf + count * 4;		for (i = 0; i < (len & 0x00000003); i++) {			if (r8a66597_read(r8a66597, CFIFOSEL) & BIGEND)				outb(pb[i], fifoaddr + i);			else				outb(pb[i], fifoaddr + 3 - i);		}	}#else	int odd = len & 0x0001;	unsigned short *p = buf;	len = len / 2;	for (i = 0; i < len; i++)		outw(p[i], fifoaddr);	if (odd) {		unsigned char *pb = (unsigned char *)(buf + len);		outb(*pb, fifoaddr);	}#endif}static inline void r8a66597_mdfy(struct r8a66597 *r8a66597,				 u16 val, u16 pat, unsigned long offset){	u16 tmp;	tmp = r8a66597_read(r8a66597, offset);	tmp = tmp & (~pat);	tmp = tmp | val;	r8a66597_write(r8a66597, tmp, offset);}#define r8a66597_bclr(r8a66597, val, offset)	\			r8a66597_mdfy(r8a66597, 0, val, offset)#define r8a66597_bset(r8a66597, val, offset)	\			r8a66597_mdfy(r8a66597, val, 0, offset)static inline unsigned long get_syscfg_reg(int port){	return port == 0 ? SYSCFG0 : SYSCFG1;}static inline unsigned long get_syssts_reg(int port){	return port == 0 ? SYSSTS0 : SYSSTS1;}static inline unsigned long get_dvstctr_reg(int port){	return port == 0 ? DVSTCTR0 : DVSTCTR1;}static inline unsigned long get_dmacfg_reg(int port){	return port == 0 ? DMA0CFG : DMA1CFG;}static inline unsigned long get_intenb_reg(int port){	return port == 0 ? INTENB1 : INTENB2;}static inline unsigned long get_intsts_reg(int port){	return port == 0 ? INTSTS1 : INTSTS2;}static inline u16 get_rh_usb_speed(struct r8a66597 *r8a66597, int port){	unsigned long dvstctr_reg = get_dvstctr_reg(port);	return r8a66597_read(r8a66597, dvstctr_reg) & RHST;}static inline void r8a66597_port_power(struct r8a66597 *r8a66597, int port,				       int power){	unsigned long dvstctr_reg = get_dvstctr_reg(port);	if (power)		r8a66597_bset(r8a66597, VBOUT, dvstctr_reg);	else		r8a66597_bclr(r8a66597, VBOUT, dvstctr_reg);}#define get_pipectr_addr(pipenum)	(PIPE1CTR + (pipenum - 1) * 2)#define get_pipetre_addr(pipenum)	(PIPE1TRE + (pipenum - 1) * 4)#define get_pipetrn_addr(pipenum)	(PIPE1TRN + (pipenum - 1) * 4)#define get_devadd_addr(address)	(DEVADD0 + address * 2)/* USB HUB CONSTANTS (not OHCI-specific; see hub.h, based on usb_ohci.h) *//* destination of request */#define RH_INTERFACE		   0x01#define RH_ENDPOINT		   0x02#define RH_OTHER		   0x03#define RH_CLASS		   0x20#define RH_VENDOR		   0x40/* Requests: bRequest << 8 | bmRequestType */#define RH_GET_STATUS		0x0080#define RH_CLEAR_FEATURE	0x0100#define RH_SET_FEATURE		0x0300#define RH_SET_ADDRESS		0x0500#define RH_GET_DESCRIPTOR	0x0680#define RH_SET_DESCRIPTOR	0x0700#define RH_GET_CONFIGURATION	0x0880#define RH_SET_CONFIGURATION	0x0900#define RH_GET_STATE		0x0280#define RH_GET_INTERFACE	0x0A80#define RH_SET_INTERFACE	0x0B00#define RH_SYNC_FRAME		0x0C80/* Our Vendor Specific Request */#define RH_SET_EP		0x2000/* Hub port features */#define RH_PORT_CONNECTION	   0x00#define RH_PORT_ENABLE		   0x01#define RH_PORT_SUSPEND		   0x02#define RH_PORT_OVER_CURRENT	   0x03#define RH_PORT_RESET		   0x04#define RH_PORT_POWER		   0x08#define RH_PORT_LOW_SPEED	   0x09#define RH_C_PORT_CONNECTION	   0x10#define RH_C_PORT_ENABLE	   0x11#define RH_C_PORT_SUSPEND	   0x12#define RH_C_PORT_OVER_CURRENT	   0x13#define RH_C_PORT_RESET		   0x14/* Hub features */#define RH_C_HUB_LOCAL_POWER	   0x00#define RH_C_HUB_OVER_CURRENT	   0x01#define RH_DEVICE_REMOTE_WAKEUP	   0x00#define RH_ENDPOINT_STALL	   0x01#define RH_ACK			   0x01#define RH_REQ_ERR		   -1#define RH_NACK			   0x00/* OHCI ROOT HUB REGISTER MASKS *//* roothub.portstatus [i] bits */#define RH_PS_CCS	0x00000001	/* current connect status */#define RH_PS_PES	0x00000002	/* port enable status*/#define RH_PS_PSS	0x00000004	/* port suspend status */#define RH_PS_POCI	0x00000008	/* port over current indicator */#define RH_PS_PRS	0x00000010	/* port reset status */#define RH_PS_PPS	0x00000100	/* port power status */#define RH_PS_LSDA	0x00000200	/* low speed device attached */#define RH_PS_CSC	0x00010000	/* connect status change */#define RH_PS_PESC	0x00020000	/* port enable status change */#define RH_PS_PSSC	0x00040000	/* port suspend status change */#define RH_PS_OCIC	0x00080000	/* over current indicator change */#define RH_PS_PRSC	0x00100000	/* port reset status change *//* roothub.status bits */#define RH_HS_LPS	0x00000001	/* local power status */#define RH_HS_OCI	0x00000002	/* over current indicator */#define RH_HS_DRWE	0x00008000	/* device remote wakeup enable */#define RH_HS_LPSC	0x00010000	/* local power status change */#define RH_HS_OCIC	0x00020000	/* over current indicator change */#define RH_HS_CRWE	0x80000000	/* clear remote wakeup enable *//* roothub.b masks */#define RH_B_DR		0x0000ffff	/* device removable flags */#define RH_B_PPCM	0xffff0000	/* port power control mask *//* roothub.a masks */#define RH_A_NDP	(0xff << 0)	/* number of downstream ports */#define RH_A_PSM	(1 << 8)	/* power switching mode */#define RH_A_NPS	(1 << 9)	/* no power switching */#define RH_A_DT		(1 << 10)	/* device type (mbz) */#define RH_A_OCPM	(1 << 11)	/* over current protection mode */#define RH_A_NOCP	(1 << 12)	/* no over current protection */#define RH_A_POTPGT	(0xff << 24)	/* power on to power good time */#endif	/* __R8A66597_H__ */

⌨️ 快捷键说明

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