243 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /****************************************************************************/
 | |
| 
 | |
| /*
 | |
|  *	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_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_FUNCS
 | |
| 
 | |
| void 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.
 | |
|  */
 | |
| #define	NE2000_PTR(addr)	((addr&0x1)?(NE2000_ODDOFFSET+addr-1):(addr))
 | |
| #define	NE2000_DATA_PTR(addr)	(addr)
 | |
| 
 | |
| 
 | |
| void 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 */
 | |
| 
 | |
| /****************************************************************************/
 | |
| #endif	/* mcfne_h */
 |