X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fdc2114x.c;h=d9fcb5a13ec705fd05735bb85e9bc28d7c454ffa;hb=6e5b9ac097689e96d53f638842823fb1d1bf4223;hp=1d728d8b307bfad4f07e94758b54f922f14b7248;hpb=9d2459f3532c009bb903b02b57079a3862420a5f;p=oweals%2Fu-boot.git diff --git a/drivers/net/dc2114x.c b/drivers/net/dc2114x.c index 1d728d8b30..d9fcb5a13e 100644 --- a/drivers/net/dc2114x.c +++ b/drivers/net/dc2114x.c @@ -19,12 +19,9 @@ */ #include - -#if defined(CONFIG_CMD_NET) \ - && defined(CONFIG_NET_MULTI) && defined(CONFIG_TULIP) - #include #include +#include #include #undef DEBUG_SROM @@ -178,7 +175,7 @@ static void read_hw_addr(struct eth_device* dev, bd_t * bis); static void send_setup_frame(struct eth_device* dev, bd_t * bis); static int dc21x4x_init(struct eth_device* dev, bd_t* bis); -static int dc21x4x_send(struct eth_device* dev, volatile void *packet, int length); +static int dc21x4x_send(struct eth_device *dev, void *packet, int length); static int dc21x4x_recv(struct eth_device* dev); static void dc21x4x_halt(struct eth_device* dev); #ifdef CONFIG_TULIP_SELECT_MEDIA @@ -248,15 +245,17 @@ int dc21x4x_initialize(bd_t *bis) pci_write_config_word(devbusfn, PCI_COMMAND, status); pci_read_config_word(devbusfn, PCI_COMMAND, &status); +#ifdef CONFIG_TULIP_USE_IO if (!(status & PCI_COMMAND_IO)) { printf("Error: Can not enable I/O access.\n"); continue; } - - if (!(status & PCI_COMMAND_IO)) { - printf("Error: Can not enable I/O access.\n"); +#else + if (!(status & PCI_COMMAND_MEMORY)) { + printf("Error: Can not enable MEMORY access.\n"); continue; } +#endif if (!(status & PCI_COMMAND_MASTER)) { printf("Error: Can not enable Bus Mastering.\n"); @@ -283,6 +282,12 @@ int dc21x4x_initialize(bd_t *bis) dev = (struct eth_device*) malloc(sizeof *dev); + if (!dev) { + printf("Can not allocalte memory of dc21x4x\n"); + break; + } + memset(dev, 0, sizeof(*dev)); + #ifdef CONFIG_TULIP_FIX_DAVICOM sprintf(dev->name, "Davicom#%d", card_number); #else @@ -385,7 +390,7 @@ static int dc21x4x_init(struct eth_device* dev, bd_t* bis) return 0; } -static int dc21x4x_send(struct eth_device* dev, volatile void *packet, int length) +static int dc21x4x_send(struct eth_device *dev, void *packet, int length) { int status = -1; int i; @@ -755,16 +760,17 @@ static void update_srom(struct eth_device *dev, bd_t *bis) 0x0000, 0x0000, 0x0000, 0x0000, /* 38 */ 0x0000, 0x0000, 0x0000, 0x4e07, /* 3c */ }; + uchar enetaddr[6]; /* Ethernet Addr... */ - eeprom[0x0a] = ((bis->bi_enetaddr[1] & 0xff) << 8) | (bis->bi_enetaddr[0] & 0xff); - eeprom[0x0b] = ((bis->bi_enetaddr[3] & 0xff) << 8) | (bis->bi_enetaddr[2] & 0xff); - eeprom[0x0c] = ((bis->bi_enetaddr[5] & 0xff) << 8) | (bis->bi_enetaddr[4] & 0xff); + if (!eth_getenv_enetaddr("ethaddr", enetaddr)) + return; + eeprom[0x0a] = (enetaddr[1] << 8) | enetaddr[0]; + eeprom[0x0b] = (enetaddr[3] << 8) | enetaddr[2]; + eeprom[0x0c] = (enetaddr[5] << 8) | enetaddr[4]; for (i=0; i<0x40; i++) { write_srom(dev, DE4X5_APROM, i, eeprom[i]); } } #endif /* UPDATE_SROM */ - -#endif