net: Move Emaclite to NET_MULTI
Emaclite was using old net api that's why this patch move emaclite to NET_MULTI api. Signed-off-by: Michal Simek <monstr@monstr.eu> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
This commit is contained in:
		
							parent
							
								
									bf6cb247a5
								
							
						
					
					
						commit
						042272a6f2
					
				| 
						 | 
					@ -26,6 +26,7 @@
 | 
				
			||||||
#include <common.h>
 | 
					#include <common.h>
 | 
				
			||||||
#include <net.h>
 | 
					#include <net.h>
 | 
				
			||||||
#include <config.h>
 | 
					#include <config.h>
 | 
				
			||||||
 | 
					#include <malloc.h>
 | 
				
			||||||
#include <asm/io.h>
 | 
					#include <asm/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef DEBUG
 | 
					#undef DEBUG
 | 
				
			||||||
| 
						 | 
					@ -63,26 +64,19 @@
 | 
				
			||||||
#define XEL_RSR_RECV_IE_MASK		0x00000008UL
 | 
					#define XEL_RSR_RECV_IE_MASK		0x00000008UL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	unsigned int baseaddress;	/* Base address for device (IPIF) */
 | 
						u32 baseaddress;	/* Base address for device (IPIF) */
 | 
				
			||||||
	unsigned int nexttxbuffertouse;	/* Next TX buffer to write to */
 | 
						u32 nexttxbuffertouse;	/* Next TX buffer to write to */
 | 
				
			||||||
	unsigned int nextrxbuffertouse;	/* Next RX buffer to read from */
 | 
						u32 nextrxbuffertouse;	/* Next RX buffer to read from */
 | 
				
			||||||
	unsigned char deviceid;		/* Unique ID of device - for future */
 | 
						uchar deviceid;		/* Unique ID of device - for future */
 | 
				
			||||||
} xemaclite;
 | 
					} xemaclite;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static xemaclite emaclite;
 | 
					static xemaclite emaclite;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */
 | 
					static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* hardcoded MAC address for the Xilinx EMAC Core when env is nowhere*/
 | 
					static void xemaclite_alignedread (u32 *srcptr, void *destptr, u32 bytecount)
 | 
				
			||||||
#ifdef CONFIG_ENV_IS_NOWHERE
 | 
					 | 
				
			||||||
static u8 emacaddr[ENET_ADDR_LENGTH] = { 0x00, 0x0a, 0x35, 0x00, 0x22, 0x01 };
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
static u8 emacaddr[ENET_ADDR_LENGTH];
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void xemaclite_alignedread (u32 * srcptr, void *destptr, unsigned bytecount)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int i;
 | 
						u32 i;
 | 
				
			||||||
	u32 alignbuffer;
 | 
						u32 alignbuffer;
 | 
				
			||||||
	u32 *to32ptr;
 | 
						u32 *to32ptr;
 | 
				
			||||||
	u32 *from32ptr;
 | 
						u32 *from32ptr;
 | 
				
			||||||
| 
						 | 
					@ -107,9 +101,9 @@ void xemaclite_alignedread (u32 * srcptr, void *destptr, unsigned bytecount)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void xemaclite_alignedwrite (void *srcptr, u32 destptr, unsigned bytecount)
 | 
					static void xemaclite_alignedwrite (void *srcptr, u32 destptr, u32 bytecount)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned i;
 | 
						u32 i;
 | 
				
			||||||
	u32 alignbuffer;
 | 
						u32 alignbuffer;
 | 
				
			||||||
	u32 *to32ptr = (u32 *) destptr;
 | 
						u32 *to32ptr = (u32 *) destptr;
 | 
				
			||||||
	u32 *from32ptr;
 | 
						u32 *from32ptr;
 | 
				
			||||||
| 
						 | 
					@ -134,23 +128,16 @@ void xemaclite_alignedwrite (void *srcptr, u32 destptr, unsigned bytecount)
 | 
				
			||||||
	*to32ptr++ = alignbuffer;
 | 
						*to32ptr++ = alignbuffer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void eth_halt (void)
 | 
					static void emaclite_halt(struct eth_device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	debug ("eth_halt\n");
 | 
						debug ("eth_halt\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int eth_init (bd_t * bis)
 | 
					static int emaclite_init(struct eth_device *dev, bd_t *bis)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uchar enetaddr[6];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	debug ("EmacLite Initialization Started\n");
 | 
						debug ("EmacLite Initialization Started\n");
 | 
				
			||||||
	memset (&emaclite, 0, sizeof (xemaclite));
 | 
						memset (&emaclite, 0, sizeof (xemaclite));
 | 
				
			||||||
	emaclite.baseaddress = XILINX_EMACLITE_BASEADDR;
 | 
						emaclite.baseaddress = dev->iobase;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
 | 
					 | 
				
			||||||
		memcpy(enetaddr, emacaddr, ENET_ADDR_LENGTH);
 | 
					 | 
				
			||||||
		eth_setenv_enetaddr("ethaddr", enetaddr);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * TX - TX_PING & TX_PONG initialization
 | 
					 * TX - TX_PING & TX_PONG initialization
 | 
				
			||||||
| 
						 | 
					@ -158,7 +145,7 @@ int eth_init (bd_t * bis)
 | 
				
			||||||
	/* Restart PING TX */
 | 
						/* Restart PING TX */
 | 
				
			||||||
	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0);
 | 
						out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0);
 | 
				
			||||||
	/* Copy MAC address */
 | 
						/* Copy MAC address */
 | 
				
			||||||
	xemaclite_alignedwrite (enetaddr,
 | 
						xemaclite_alignedwrite (dev->enetaddr,
 | 
				
			||||||
		emaclite.baseaddress, ENET_ADDR_LENGTH);
 | 
							emaclite.baseaddress, ENET_ADDR_LENGTH);
 | 
				
			||||||
	/* Set the length */
 | 
						/* Set the length */
 | 
				
			||||||
	out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
 | 
						out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
 | 
				
			||||||
| 
						 | 
					@ -171,7 +158,7 @@ int eth_init (bd_t * bis)
 | 
				
			||||||
#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
 | 
					#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
 | 
				
			||||||
	/* The same operation with PONG TX */
 | 
						/* The same operation with PONG TX */
 | 
				
			||||||
	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
 | 
						out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
 | 
				
			||||||
	xemaclite_alignedwrite (enetaddr, emaclite.baseaddress +
 | 
						xemaclite_alignedwrite (dev->enetaddr, emaclite.baseaddress +
 | 
				
			||||||
		XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);
 | 
							XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);
 | 
				
			||||||
	out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
 | 
						out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
 | 
				
			||||||
	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET,
 | 
						out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET,
 | 
				
			||||||
| 
						 | 
					@ -194,7 +181,7 @@ int eth_init (bd_t * bis)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int xemaclite_txbufferavailable (xemaclite * instanceptr)
 | 
					static int xemaclite_txbufferavailable (xemaclite *instanceptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 reg;
 | 
						u32 reg;
 | 
				
			||||||
	u32 txpingbusy;
 | 
						u32 txpingbusy;
 | 
				
			||||||
| 
						 | 
					@ -216,12 +203,12 @@ int xemaclite_txbufferavailable (xemaclite * instanceptr)
 | 
				
			||||||
	return (!(txpingbusy && txpongbusy));
 | 
						return (!(txpingbusy && txpongbusy));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int eth_send (volatile void *ptr, int len) {
 | 
					static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						u32 reg;
 | 
				
			||||||
 | 
						u32 baseaddress;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unsigned int reg;
 | 
						u32 maxtry = 1000;
 | 
				
			||||||
	unsigned int baseaddress;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	unsigned maxtry = 1000;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (len > ENET_MAX_MTU)
 | 
						if (len > ENET_MAX_MTU)
 | 
				
			||||||
		len = ENET_MAX_MTU;
 | 
							len = ENET_MAX_MTU;
 | 
				
			||||||
| 
						 | 
					@ -293,11 +280,11 @@ int eth_send (volatile void *ptr, int len) {
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int eth_rx (void)
 | 
					static int emaclite_recv(struct eth_device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int length;
 | 
						u32 length;
 | 
				
			||||||
	unsigned int reg;
 | 
						u32 reg;
 | 
				
			||||||
	unsigned int baseaddress;
 | 
						u32 baseaddress;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	baseaddress = emaclite.baseaddress + emaclite.nextrxbuffertouse;
 | 
						baseaddress = emaclite.baseaddress + emaclite.nextrxbuffertouse;
 | 
				
			||||||
	reg = in_be32 (baseaddress + XEL_RSR_OFFSET);
 | 
						reg = in_be32 (baseaddress + XEL_RSR_OFFSET);
 | 
				
			||||||
| 
						 | 
					@ -353,3 +340,26 @@ int eth_rx (void)
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int xilinx_emaclite_initialize (bd_t *bis, int base_addr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct eth_device *dev;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dev = malloc(sizeof(*dev));
 | 
				
			||||||
 | 
						if (dev == NULL)
 | 
				
			||||||
 | 
							hang();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						memset(dev, 0, sizeof(*dev));
 | 
				
			||||||
 | 
						sprintf(dev->name, "Xilinx_Emaclite");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dev->iobase = base_addr;
 | 
				
			||||||
 | 
						dev->priv = 0;
 | 
				
			||||||
 | 
						dev->init = emaclite_init;
 | 
				
			||||||
 | 
						dev->halt = emaclite_halt;
 | 
				
			||||||
 | 
						dev->send = emaclite_send;
 | 
				
			||||||
 | 
						dev->recv = emaclite_recv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						eth_register(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -89,6 +89,7 @@ int smc91111_initialize(u8 dev_num, int base_addr);
 | 
				
			||||||
int tsi108_eth_initialize(bd_t *bis);
 | 
					int tsi108_eth_initialize(bd_t *bis);
 | 
				
			||||||
int uec_standard_init(bd_t *bis);
 | 
					int uec_standard_init(bd_t *bis);
 | 
				
			||||||
int uli526x_initialize(bd_t *bis);
 | 
					int uli526x_initialize(bd_t *bis);
 | 
				
			||||||
 | 
					int xilinx_emaclite_initialize (bd_t *bis, int base_addr);
 | 
				
			||||||
int sh_eth_initialize(bd_t *bis);
 | 
					int sh_eth_initialize(bd_t *bis);
 | 
				
			||||||
int dm9000_initialize(bd_t *bis);
 | 
					int dm9000_initialize(bd_t *bis);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue