
On Sunday 16 October 2011 14:12:57 Bernhard Kaindl wrote:
ne2000 wasn't converted to CONFIG_NET_MULTI when the non-multi support was dropped, so boards using it (qemu-mips, shmin, r7780mp) failed to compile for multiple definition of eth_rx() and friends due to old ne2000_base.c.
ah i wrote a patch for this but forgot to post it :/
- Tested using qemu-mips board,
- Tested the two renesas / sh boards r7780mp and shmin to compile again, and should work.
but i couldn't test it, so this is even better
--- a/board/qemu-mips/qemu-mips.c +++ b/board/qemu-mips/qemu-mips.c
+int board_eth_init(bd_t *bis) +{
- return ne2000_initialize();
+} --- a/board/shmin/shmin.c +++ b/board/shmin/shmin.c
+int board_eth_init(bd_t *bis) +{
- return ne2000_initialize();
+}
did you need to include netdev.h in this files for the new ne2000_initialize() prototype ?
--- a/drivers/net/ne2000_base.c +++ b/drivers/net/ne2000_base.c
+int ne2000_initialize(void) +{
- struct eth_device *dev;
- nic.base = (u8 *) CONFIG_DRIVER_NE2000_BASE;
- nic.data = nic.base + DP_DATA;
- nic.tx_buf1 = START_PG;
- nic.tx_buf2 = START_PG2;
- nic.rx_buf_start = RX_START;
- nic.rx_buf_end = RX_END;
this should be using dev->priv rather than a global "nic" data structure
- dev = calloc(sizeof(*dev), 1);
- pbuf = malloc(NE2000_RX_BUFFER_SIZE);
- if (dev == NULL || pbuf == NULL)
return -1;
if dev worked but pbuf failed, this leaks memory
also, you should return 0 here not -1
- if (!get_prom(dev->enetaddr, nic.base))
return -1;
- dp83902a_init(dev);
these should probably be in the eth->init step and not here
- eth_setenv_enetaddr("ethaddr", dev->enetaddr);
NAK: implement eth->write_hwaddr, and the driver should only use dev->enetaddr rather than touching the env
- /* For PCMCIA support: See doc/README.ne2000 on how to enable */
+#ifdef CONFIG_DRIVER_NE2000_CCR
- {
vu_char *p = (vu_char *) CONFIG_DRIVER_NE2000_CCR;
PRINTK("CCR before is %x\n", *p);
*p = CONFIG_DRIVER_NE2000_VAL;
PRINTK("CCR after is %x\n", *p);
- }
+#endif
i think this should be in ne2k_init
--- a/include/netdev.h +++ b/include/netdev.h
+int ne2000_initialize();
needs to be "(void)" -mike