X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fnet%2Fns8382x.c;h=cfe1f349db85c35d43a89103d8d21c6e45515dc6;hb=7c64a50414c74a3c04c227fce03cabaa13295e80;hp=a2d61afec7a66b535b080b078494b78397c49605;hpb=19403633dd70333893c2da7926a1d0dcd6dab7d8;p=u-boot diff --git a/drivers/net/ns8382x.c b/drivers/net/ns8382x.c index a2d61afec7..cfe1f349db 100644 --- a/drivers/net/ns8382x.c +++ b/drivers/net/ns8382x.c @@ -258,8 +258,7 @@ static void ns8382x_init_txd(struct eth_device *dev); static void ns8382x_init_rxd(struct eth_device *dev); static void ns8382x_set_rx_mode(struct eth_device *dev); static void ns8382x_check_duplex(struct eth_device *dev); -static int ns8382x_send(struct eth_device *dev, volatile void *packet, - int length); +static int ns8382x_send(struct eth_device *dev, void *packet, int length); static int ns8382x_poll(struct eth_device *dev); static void ns8382x_disable(struct eth_device *dev); @@ -299,7 +298,7 @@ OUTL(struct eth_device *dev, int command, u_long addr) * Description: Retrieves the MAC address of the card, and sets up some * globals required by other routines, and initializes the NIC, making it * ready to send and receive packets. - * Side effects: initializes ns8382xs, ready to recieve packets. + * Side effects: initializes ns8382xs, ready to receive packets. * Returns: int: number of cards found */ @@ -322,9 +321,7 @@ ns8382x_initialize(bd_t * bis) pci_read_config_dword(devno, PCI_BASE_ADDRESS_1, &iobase); iobase &= ~0x3; /* 1: unused and 0:I/O Space Indicator */ -#ifdef NS8382X_DEBUG - printf("ns8382x: NatSemi dp8382x @ 0x%x\n", iobase); -#endif + debug("ns8382x: NatSemi dp8382x @ 0x%x\n", iobase); pci_write_config_dword(devno, PCI_COMMAND, PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER); @@ -340,6 +337,11 @@ ns8382x_initialize(bd_t * bis) } dev = (struct eth_device *) malloc(sizeof *dev); + if (!dev) { + printf("ns8382x: Can not allocate memory\n"); + break; + } + memset(dev, 0, sizeof(*dev)); sprintf(dev->name, "dp8382x#%d", card_number); dev->iobase = bus_to_phys(iobase); @@ -377,11 +379,9 @@ ns8382x_initialize(bd_t * bis) rev = mdio_read(dev, phyAddress, PHYIDR2); if ((rev & ~(0x000f)) == 0x00005c50 || (rev & ~(0x000f)) == 0x00005c60) { -#ifdef NS8382X_DEBUG - printf("phy rev is %x\n", rev); - printf("phy address is %x\n", + debug("phy rev is %x\n", rev); + debug("phy address is %x\n", phyAddress); -#endif break; } } @@ -406,21 +406,21 @@ ns8382x_initialize(bd_t * bis) OUTL(dev, (chip_config & ~(PhyDis)), ChipConfig); mdio_sync(dev, EECtrl); -#ifdef NS8382X_DEBUG + { u32 chpcfg = INL(dev, ChipConfig) ^ SpeedStatus_Polarity; - printf("%s: Transceiver 10%s %s duplex.\n", dev->name, + debug("%s: Transceiver 10%s %s duplex.\n", dev->name, (chpcfg & GigSpeed) ? "00" : (chpcfg & HundSpeed) ? "0" : "", chpcfg & FullDuplex ? "full" : "half"); - printf("%s: %02x:%02x:%02x:%02x:%02x:%02x\n", dev->name, + debug("%s: %02x:%02x:%02x:%02x:%02x:%02x\n", dev->name, dev->enetaddr[0], dev->enetaddr[1], dev->enetaddr[2], dev->enetaddr[3], dev->enetaddr[4], dev->enetaddr[5]); } -#endif + /* Disable PME: * The PME bit is initialized from the EEPROM contents. * PCI cards probably have PME disabled, but motherboard @@ -445,7 +445,7 @@ ns8382x_initialize(bd_t * bis) Read and write MII registers using software-generated serial MDIO protocol. See the MII specifications or DP83840A data sheet for details. - The maximum data clock rate is 2.5 Mhz. To meet minimum timing we + The maximum data clock rate is 2.5 MHz. To meet minimum timing we must flush writes to the PCI bus with a PCI read. */ #define mdio_delay(mdio_addr) INL(dev, mdio_addr) @@ -558,10 +558,10 @@ ns8382x_init(struct eth_device *dev, bd_t * bis) tx_config = TxCarrierIgn | TxHeartIgn | TxAutoPad | TxCollRetry | TxMxdma_1024 | (0x1002); rx_config = RxMxdma_1024 | 0x20; -#ifdef NS8382X_DEBUG - printf("%s: Setting TxConfig Register %#08X\n", dev->name, tx_config); - printf("%s: Setting RxConfig Register %#08X\n", dev->name, rx_config); -#endif + + debug("%s: Setting TxConfig Register %#08X\n", dev->name, tx_config); + debug("%s: Setting RxConfig Register %#08X\n", dev->name, rx_config); + OUTL(dev, tx_config, TxConfig); OUTL(dev, rx_config, RxConfig); @@ -624,10 +624,9 @@ ns8382x_init_txd(struct eth_device *dev) OUTL(dev, 0x0, TxRingPtrHi); OUTL(dev, phys_to_bus((u32)&txd), TxRingPtr); -#ifdef NS8382X_DEBUG - printf("ns8382x_init_txd: TX descriptor register loaded with: %#08X (&txd: %p)\n", + + debug("ns8382x_init_txd: TX descriptor register loaded with: %#08X (&txd: %p)\n", INL(dev, TxRingPtr), &txd); -#endif } /* Function: ns8382x_init_rxd @@ -653,19 +652,16 @@ ns8382x_init_rxd(struct eth_device *dev) rxd[i].extsts = cpu_to_le32((u32) 0x0); rxd[i].cmdsts = cpu_to_le32((u32) RX_BUF_SIZE); rxd[i].bufptr = cpu_to_le32((u32) & rxb[i * RX_BUF_SIZE]); -#ifdef NS8382X_DEBUG - printf + + debug ("ns8382x_init_rxd: rxd[%d]=%p link=%X cmdsts=%X bufptr=%X\n", i, &rxd[i], le32_to_cpu(rxd[i].link), le32_to_cpu(rxd[i].cmdsts), le32_to_cpu(rxd[i].bufptr)); -#endif } OUTL(dev, phys_to_bus((u32) & rxd), RxRingPtr); -#ifdef NS8382X_DEBUG - printf("ns8382x_init_rxd: RX descriptor register loaded with: %X\n", + debug("ns8382x_init_rxd: RX descriptor register loaded with: %X\n", INL(dev, RxRingPtr)); -#endif } /* Function: ns8382x_set_rx_mode @@ -703,11 +699,11 @@ ns8382x_check_duplex(struct eth_device *dev) duplex = (config & FullDuplex) ? 1 : 0; gig = (config & GigSpeed) ? 1 : 0; hun = (config & HundSpeed) ? 1 : 0; -#ifdef NS8382X_DEBUG - printf("%s: Setting 10%s %s-duplex based on negotiated link" + + debug("%s: Setting 10%s %s-duplex based on negotiated link" " capability.\n", dev->name, (gig) ? "00" : (hun) ? "0" : "", duplex ? "full" : "half"); -#endif + if (duplex) { rx_config |= RxAcceptTx; tx_config |= (TxCarrierIgn | TxHeartIgn); @@ -715,10 +711,10 @@ ns8382x_check_duplex(struct eth_device *dev) rx_config &= ~RxAcceptTx; tx_config &= ~(TxCarrierIgn | TxHeartIgn); } -#ifdef NS8382X_DEBUG - printf("%s: Resetting TxConfig Register %#08X\n", dev->name, tx_config); - printf("%s: Resetting RxConfig Register %#08X\n", dev->name, rx_config); -#endif + + debug("%s: Resetting TxConfig Register %#08X\n", dev->name, tx_config); + debug("%s: Resetting RxConfig Register %#08X\n", dev->name, rx_config); + OUTL(dev, tx_config, TxConfig); OUTL(dev, rx_config, RxConfig); @@ -730,26 +726,23 @@ ns8382x_check_duplex(struct eth_device *dev) else config &= ~Mode1000; -#ifdef NS8382X_DEBUG - printf("%s: %setting Mode1000\n", dev->name, (gig) ? "S" : "Uns"); -#endif + debug("%s: %setting Mode1000\n", dev->name, (gig) ? "S" : "Uns"); + OUTL(dev, config, ChipConfig); } /* Function: ns8382x_send * Description: transmits a packet and waits for completion or timeout. * Returns: void. */ -static int -ns8382x_send(struct eth_device *dev, volatile void *packet, int length) +static int ns8382x_send(struct eth_device *dev, void *packet, int length) { u32 i, status = 0; vu_long tx_stat = 0; /* Stop the transmitter */ OUTL(dev, TxOff, ChipCmd); -#ifdef NS8382X_DEBUG - printf("ns8382x_send: sending %d bytes\n", (int)length); -#endif + + debug("ns8382x_send: sending %d bytes\n", (int)length); /* set the transmit buffer descriptor and enable Transmit State Machine */ txd.link = cpu_to_le32(0x0); @@ -759,13 +752,13 @@ ns8382x_send(struct eth_device *dev, volatile void *packet, int length) /* load Transmit Descriptor Register */ OUTL(dev, phys_to_bus((u32) & txd), TxRingPtr); -#ifdef NS8382X_DEBUG - printf("ns8382x_send: TX descriptor register loaded with: %#08X\n", + + debug("ns8382x_send: TX descriptor register loaded with: %#08X\n", INL(dev, TxRingPtr)); - printf("\ttxd.link:%X\tbufp:%X\texsts:%X\tcmdsts:%X\n", + debug("\ttxd.link:%X\tbufp:%X\texsts:%X\tcmdsts:%X\n", le32_to_cpu(txd.link), le32_to_cpu(txd.bufptr), le32_to_cpu(txd.extsts), le32_to_cpu(txd.cmdsts)); -#endif + /* restart the transmitter */ OUTL(dev, TxOn, ChipCmd); @@ -781,12 +774,11 @@ ns8382x_send(struct eth_device *dev, volatile void *packet, int length) printf("ns8382x_send: Transmit error, Tx status %lX.\n", tx_stat); goto Done; } -#ifdef NS8382X_DEBUG - printf("ns8382x_send: tx_stat: %#08X\n", tx_stat); -#endif + + debug("ns8382x_send: tx_stat: %#08lX\n", tx_stat); status = 1; - Done: +Done: return status; } @@ -809,10 +801,10 @@ ns8382x_poll(struct eth_device *dev) if (!(rx_status & (u32) DescOwn)) return retstat; -#ifdef NS8382X_DEBUG - printf("ns8382x_poll: got a packet: cur_rx:%u, status:%lx\n", + + debug("ns8382x_poll: got a packet: cur_rx:%u, status:%lx\n", cur_rx, rx_status); -#endif + length = (rx_status & DSIZE) - CRC_SIZE; if ((rx_status & (DescMore | DescPktOK | DescRxLong)) != DescPktOK) {