Hi Michal, Sorry for the delay in reviewing
On 8/2/2010 5:49 AM, Michal Simek wrote: > Emaclite was using old net api that's why > this patch move emaclite to NET_MULTI api. > > Signed-off-by: Michal Simek<mon...@monstr.eu> > --- > drivers/net/xilinx_emaclite.c | 84 > +++++++++++++++++++++++------------------ > include/netdev.h | 1 + > 2 files changed, 48 insertions(+), 37 deletions(-) > > diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c > index 0820daa..f460525 100644 > --- a/drivers/net/xilinx_emaclite.c > +++ b/drivers/net/xilinx_emaclite.c > @@ -26,6 +26,7 @@ > #include<common.h> > #include<net.h> > #include<config.h> > +#include<malloc.h> > #include<asm/io.h> > > #undef DEBUG > @@ -63,26 +64,19 @@ > #define XEL_RSR_RECV_IE_MASK 0x00000008UL > > typedef struct { > - unsigned int baseaddress; /* Base address for device (IPIF) */ > - unsigned int nexttxbuffertouse; /* Next TX buffer to write to */ > - unsigned int nextrxbuffertouse; /* Next RX buffer to read from */ > - unsigned char deviceid; /* Unique ID of device - for future */ > + u32 baseaddress; /* Base address for device (IPIF) */ > + u32 nexttxbuffertouse; /* Next TX buffer to write to */ > + u32 nextrxbuffertouse; /* Next RX buffer to read from */ > + uchar deviceid; /* Unique ID of device - for future */ > } xemaclite; > > static xemaclite emaclite; > > static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */ > > -/* hardcoded MAC address for the Xilinx EMAC Core when env is nowhere*/ > -#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) > +static void xemaclite_alignedread (u32 *srcptr, void *destptr, u32 bytecount) > { > - unsigned int i; > + u32 i; > u32 alignbuffer; > u32 *to32ptr; > 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 *to32ptr = (u32 *) destptr; > u32 *from32ptr; > @@ -134,23 +128,16 @@ void xemaclite_alignedwrite (void *srcptr, u32 destptr, > unsigned bytecount) > *to32ptr++ = alignbuffer; > } > > -void eth_halt (void) > +static void emaclite_halt(struct eth_device *dev) > { > 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"); > memset (&emaclite, 0, sizeof (xemaclite)); > - emaclite.baseaddress = XILINX_EMACLITE_BASEADDR; > - > - if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { > - memcpy(enetaddr, emacaddr, ENET_ADDR_LENGTH); > - eth_setenv_enetaddr("ethaddr", enetaddr); > - } > + emaclite.baseaddress = dev->iobase; > > /* > * TX - TX_PING& TX_PONG initialization > @@ -158,7 +145,7 @@ int eth_init (bd_t * bis) > /* Restart PING TX */ > out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0); > /* Copy MAC address */ > - xemaclite_alignedwrite (enetaddr, > + xemaclite_alignedwrite (dev->enetaddr, > emaclite.baseaddress, ENET_ADDR_LENGTH); > /* Set the 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 > /* The same operation with PONG TX */ > 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); > out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH); Please consider moving this stuff to a separate function. If you bind it to dev->write_hwaddr(), programming will occur at initialization time. > out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, > @@ -194,7 +181,7 @@ int eth_init (bd_t * bis) > return 0; > } > > -int xemaclite_txbufferavailable (xemaclite * instanceptr) > +static int xemaclite_txbufferavailable (xemaclite *instanceptr) > { > u32 reg; > u32 txpingbusy; > @@ -216,12 +203,12 @@ int xemaclite_txbufferavailable (xemaclite * > instanceptr) > return (!(txpingbusy&& txpongbusy)); > } > > -int eth_send (volatile void *ptr, int len) { > - > - unsigned int reg; > - unsigned int baseaddress; > +static int emaclite_send (struct eth_device *dev, volatile void *ptr, int > len) > +{ > + u32 reg; > + u32 baseaddress; > > - unsigned maxtry = 1000; > + u32 maxtry = 1000; > > if (len> ENET_MAX_MTU) > len = ENET_MAX_MTU; > @@ -293,11 +280,11 @@ int eth_send (volatile void *ptr, int len) { > return 0; > } > > -int eth_rx (void) > +static int emaclite_recv(struct eth_device *dev) > { > - unsigned int length; > - unsigned int reg; > - unsigned int baseaddress; > + u32 length; > + u32 reg; > + u32 baseaddress; > > baseaddress = emaclite.baseaddress + emaclite.nextrxbuffertouse; > reg = in_be32 (baseaddress + XEL_RSR_OFFSET); > @@ -353,3 +340,26 @@ int eth_rx (void) > return 1; > > } > + > +int xilinx_emaclite_initialize (bd_t *bis) > +{ > + struct eth_device *dev; > + > + dev = malloc(sizeof(*dev)); > + if (dev == NULL) > + hang(); > + > + memset(dev, 0, sizeof(*dev)); > + sprintf(dev->name, "Xilinx Emaclite"); > + > + dev->iobase = XILINX_EMACLITE_BASEADDR; Can you pass this in as a parameter instead? You don't seem to use 'bis', so it's not necessary > + dev->priv = 0; > + dev->init = emaclite_init; > + dev->halt = emaclite_halt; > + dev->send = emaclite_send; > + dev->recv = emaclite_recv; > + > + eth_register(dev); > + > + return 0; > +} > diff --git a/include/netdev.h b/include/netdev.h > index 94eedfe..979fb57 100644 > --- a/include/netdev.h > +++ b/include/netdev.h > @@ -88,6 +88,7 @@ int tsi108_eth_initialize(bd_t *bis); > int uec_initialize(int index); > int uec_standard_init(bd_t *bis); > int uli526x_initialize(bd_t *bis); > +int xilinx_emaclite_initialize (bd_t *bis); > int sh_eth_initialize(bd_t *bis); > int dm9000_initialize(bd_t *bis); regards, Ben _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot