mcfne.h

来自「linux 内核源代码」· C头文件 代码 · 共 353 行

H
353
字号
/****************************************************************************//* *	mcfne.h -- NE2000 in ColdFire eval boards. * *	(C) Copyright 1999-2000, Greg Ungerer (gerg@snapgear.com) *	(C) Copyright 2000,      Lineo (www.lineo.com) *	(C) Copyright 2001,      SnapGear (www.snapgear.com) * *      19990409 David W. Miller  Converted from m5206ne.h for 5307 eval board * *      Hacked support for m5206e Cadre III evaluation board *      Fred Stevens (fred.stevens@pemstar.com) 13 April 1999 *//****************************************************************************/#ifndef	mcfne_h#define	mcfne_h/****************************************************************************//* *	Support for NE2000 clones devices in ColdFire based boards. *	Not all boards address these parts the same way, some use a *	direct addressing method, others use a side-band address space *	to access odd address registers, some require byte swapping *	others do not. */#define	BSWAP(w)	(((w) << 8) | ((w) >> 8))#define	RSWAP(w)	(w)/* *	Define the basic hardware resources of NE2000 boards. */#if defined(CONFIG_ARN5206)#define NE2000_ADDR		0x40000300#define NE2000_ODDOFFSET	0x00010000#define	NE2000_IRQ_VECTOR	0xf0#define	NE2000_IRQ_PRIORITY	2#define	NE2000_IRQ_LEVEL	4#define	NE2000_BYTE		volatile unsigned short#endif#if defined(CONFIG_M5206eC3)#define	NE2000_ADDR		0x40000300#define	NE2000_ODDOFFSET	0x00010000#define	NE2000_IRQ_VECTOR	0x1c#define	NE2000_IRQ_PRIORITY	2#define	NE2000_IRQ_LEVEL	4#define	NE2000_BYTE		volatile unsigned short#endif#if defined(CONFIG_M5206e) && defined(CONFIG_NETtel)#define NE2000_ADDR		0x30000300#define NE2000_IRQ_VECTOR	25#define NE2000_IRQ_PRIORITY	1#define NE2000_IRQ_LEVEL	3#define	NE2000_BYTE		volatile unsigned char#endif#if defined(CONFIG_CFV240)#define NE2000_ADDR             0x40010000#define NE2000_ADDR1            0x40010001#define NE2000_ODDOFFSET        0x00000000#define NE2000_IRQ              1#define NE2000_IRQ_VECTOR       0x19#define NE2000_IRQ_PRIORITY     2#define NE2000_IRQ_LEVEL        1#define	NE2000_BYTE		volatile unsigned char#endif#if defined(CONFIG_M5307C3)#define NE2000_ADDR		0x40000300#define NE2000_ODDOFFSET	0x00010000#define NE2000_IRQ_VECTOR	0x1b#define	NE2000_BYTE		volatile unsigned short#endif#if defined(CONFIG_M5272) && defined(CONFIG_NETtel)#define NE2000_ADDR		0x30600300#define NE2000_ODDOFFSET	0x00008000#define NE2000_IRQ_VECTOR	67#undef	BSWAP#define	BSWAP(w)		(w)#define	NE2000_BYTE		volatile unsigned short#undef	RSWAP#define	RSWAP(w)		(((w) << 8) | ((w) >> 8))#endif#if defined(CONFIG_M5307) && defined(CONFIG_NETtel)#define NE2000_ADDR0		0x30600300#define NE2000_ADDR1		0x30800300#define NE2000_ODDOFFSET	0x00008000#define NE2000_IRQ_VECTOR0	27#define NE2000_IRQ_VECTOR1	29#undef	BSWAP#define	BSWAP(w)		(w)#define	NE2000_BYTE		volatile unsigned short#undef	RSWAP#define	RSWAP(w)		(((w) << 8) | ((w) >> 8))#endif#if defined(CONFIG_M5307) && defined(CONFIG_SECUREEDGEMP3)#define NE2000_ADDR		0x30600300#define NE2000_ODDOFFSET	0x00008000#define NE2000_IRQ_VECTOR	27#undef	BSWAP#define	BSWAP(w)		(w)#define	NE2000_BYTE		volatile unsigned short#undef	RSWAP#define	RSWAP(w)		(((w) << 8) | ((w) >> 8))#endif#if defined(CONFIG_ARN5307)#define NE2000_ADDR		0xfe600300#define NE2000_ODDOFFSET	0x00010000#define NE2000_IRQ_VECTOR	0x1b#define NE2000_IRQ_PRIORITY	2#define NE2000_IRQ_LEVEL	3#define	NE2000_BYTE		volatile unsigned short#endif#if defined(CONFIG_M5407C3)#define NE2000_ADDR		0x40000300#define NE2000_ODDOFFSET	0x00010000#define NE2000_IRQ_VECTOR	0x1b#define	NE2000_BYTE		volatile unsigned short#endif/****************************************************************************//* *	Side-band address space for odd address requires re-mapping *	many of the standard ISA access functions. */#ifdef NE2000_ODDOFFSET#undef outb#undef outb_p#undef inb#undef inb_p#undef outsb#undef outsw#undef insb#undef insw#define	outb	ne2000_outb#define	inb	ne2000_inb#define	outb_p	ne2000_outb#define	inb_p	ne2000_inb#define	outsb	ne2000_outsb#define	outsw	ne2000_outsw#define	insb	ne2000_insb#define	insw	ne2000_insw#ifndef COLDFIRE_NE2000_FUNCSvoid ne2000_outb(unsigned int val, unsigned int addr);int  ne2000_inb(unsigned int addr);void ne2000_insb(unsigned int addr, void *vbuf, int unsigned long len);void ne2000_insw(unsigned int addr, void *vbuf, unsigned long len);void ne2000_outsb(unsigned int addr, void *vbuf, unsigned long len);void ne2000_outsw(unsigned int addr, void *vbuf, unsigned long len);#else/* *	This macro converts a conventional register address into the *	real memory pointer of the mapped NE2000 device. *	On most NE2000 implementations on ColdFire boards the chip is *	mapped in kinda funny, due to its ISA heritage. */#ifdef CONFIG_CFV240#define NE2000_PTR(addr)	(NE2000_ADDR + ((addr & 0x3f) << 1) + 1)#define NE2000_DATA_PTR(addr)	(NE2000_ADDR + ((addr & 0x3f) << 1))#else#define	NE2000_PTR(addr)	((addr&0x1)?(NE2000_ODDOFFSET+addr-1):(addr))#define	NE2000_DATA_PTR(addr)	(addr)#endifvoid ne2000_outb(unsigned int val, unsigned int addr){	NE2000_BYTE	*rp;	rp = (NE2000_BYTE *) NE2000_PTR(addr);	*rp = RSWAP(val);}int ne2000_inb(unsigned int addr){	NE2000_BYTE	*rp, val;	rp = (NE2000_BYTE *) NE2000_PTR(addr);	val = *rp;	return((int) ((NE2000_BYTE) RSWAP(val)));}void ne2000_insb(unsigned int addr, void *vbuf, int unsigned long len){	NE2000_BYTE	*rp, val;	unsigned char	*buf;	buf = (unsigned char *) vbuf;	rp = (NE2000_BYTE *) NE2000_DATA_PTR(addr);	for (; (len > 0); len--) {		val = *rp;		*buf++ = RSWAP(val);	}}void ne2000_insw(unsigned int addr, void *vbuf, unsigned long len){	volatile unsigned short	*rp;	unsigned short		w, *buf;	buf = (unsigned short *) vbuf;	rp = (volatile unsigned short *) NE2000_DATA_PTR(addr);	for (; (len > 0); len--) {		w = *rp;		*buf++ = BSWAP(w);	}}void ne2000_outsb(unsigned int addr, const void *vbuf, unsigned long len){	NE2000_BYTE	*rp, val;	unsigned char	*buf;	buf = (unsigned char *) vbuf;	rp = (NE2000_BYTE *) NE2000_DATA_PTR(addr);	for (; (len > 0); len--) {		val = *buf++;		*rp = RSWAP(val);	}}void ne2000_outsw(unsigned int addr, const void *vbuf, unsigned long len){	volatile unsigned short	*rp;	unsigned short		w, *buf;	buf = (unsigned short *) vbuf;	rp = (volatile unsigned short *) NE2000_DATA_PTR(addr);	for (; (len > 0); len--) {		w = *buf++;		*rp = BSWAP(w);	}}#endif /* COLDFIRE_NE2000_FUNCS */#endif /* NE2000_OFFOFFSET *//****************************************************************************/#ifdef COLDFIRE_NE2000_FUNCS/* *	Lastly the interrupt set up code... *	Minor differences between the different board types. */#if defined(CONFIG_ARN5206)void ne2000_irqsetup(int irq){	volatile unsigned char  *icrp;	icrp = (volatile unsigned char *) (MCF_MBAR + MCFSIM_ICR4);	*icrp = MCFSIM_ICR_LEVEL4 | MCFSIM_ICR_PRI2;	mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_EINT4);}#endif#if defined(CONFIG_M5206eC3)void ne2000_irqsetup(int irq){	volatile unsigned char  *icrp;	icrp = (volatile unsigned char *) (MCF_MBAR + MCFSIM_ICR4);	*icrp = MCFSIM_ICR_LEVEL4 | MCFSIM_ICR_PRI2 | MCFSIM_ICR_AUTOVEC;	mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_EINT4);}#endif#if defined(CONFIG_CFV240)void ne2000_irqsetup(int irq){	volatile unsigned char  *icrp;	icrp = (volatile unsigned char *) (MCF_MBAR + MCFSIM_ICR1);	*icrp = MCFSIM_ICR_LEVEL1 | MCFSIM_ICR_PRI2 | MCFSIM_ICR_AUTOVEC;	mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_EINT1);}#endif#if defined(CONFIG_M5206e) && defined(CONFIG_NETtel)void ne2000_irqsetup(int irq){	mcf_autovector(irq);}#endif#if defined(CONFIG_M5272) && defined(CONFIG_NETtel)void ne2000_irqsetup(int irq){	volatile unsigned long	*icrp;	volatile unsigned long	*pitr;	/* The NE2000 device uses external IRQ3 */	icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR1);	*icrp = (*icrp & 0x77077777) | 0x00d00000;	pitr = (volatile unsigned long *) (MCF_MBAR + MCFSIM_PITR);	*pitr = *pitr | 0x20000000;}void ne2000_irqack(int irq){	volatile unsigned long	*icrp;	/* The NE2000 device uses external IRQ3 */	icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR1);	*icrp = (*icrp & 0x77777777) | 0x00800000;}#endif#if defined(CONFIG_M5307) || defined(CONFIG_M5407)#if defined(CONFIG_NETtel) || defined(CONFIG_SECUREEDGEMP3)void ne2000_irqsetup(int irq){	mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_EINT3);	mcf_autovector(irq);}#elsevoid ne2000_irqsetup(int irq){	mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_EINT3);}#endif /* ! CONFIG_NETtel || CONFIG_SECUREEDGEMP3 */#endif /* CONFIG_M5307 || CONFIG_M5407 */#endif /* COLDFIRE_NE2000_FUNCS *//****************************************************************************/#endif	/* mcfne_h */

⌨️ 快捷键说明

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