diff options
Diffstat (limited to 'src/drivers/net')
| -rw-r--r-- | src/drivers/net/r8169.c | 58 |
1 files changed, 25 insertions, 33 deletions
diff --git a/src/drivers/net/r8169.c b/src/drivers/net/r8169.c index 08d1c6f62..90dd2c3b0 100644 --- a/src/drivers/net/r8169.c +++ b/src/drivers/net/r8169.c @@ -48,6 +48,7 @@ #include "nic.h" #include <gpxe/pci.h> #include <gpxe/ethernet.h> +#include <gpxe/malloc.h> #include "timer.h" #define drv_version "v1.6" @@ -73,25 +74,6 @@ static u32 ioaddr; #define RTL8169_USE_IO -#ifdef RTL8169_DEBUG - -#if 0 -#define assert(expr) \ - if(!(expr)) { printk( "Assertion failed! %s,%s,%s,line=%d\n", #expr,__FILE__,__FUNCTION__,__LINE__); } -#endif - -#define DBG_PRINTF( fmt, args...) printk("r8169: " fmt, ## args); - -#else - -#if 0 -#define assert(expr) do {} while (0) -#endif - -#define DBG_PRINTF( fmt, args...) ; - -#endif // end of #ifdef RTL8169_DEBUG - /* media options _10_Half = 0x01, _10_Full = 0x02, @@ -354,11 +336,11 @@ struct { unsigned char txb[NUM_TX_DESC * RX_BUF_SIZE]; struct RxDesc rx_ring[NUM_RX_DESC] __align_256; unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE]; -} r8169_bufs __shared; -#define tx_ring r8169_bufs.tx_ring -#define rx_ring r8169_bufs.rx_ring -#define txb r8169_bufs.txb -#define rxb r8169_bufs.rxb +} *r8169_bufs; +#define tx_ring r8169_bufs->tx_ring +#define rx_ring r8169_bufs->rx_ring +#define txb r8169_bufs->txb +#define rxb r8169_bufs->rxb static struct rtl8169_private { void *mmio_addr; /* memory map physical address */ @@ -759,11 +741,11 @@ static void rtl8169_hw_start(struct nic *nic) if (tpc->mcfg == MCFG_METHOD_2 || tpc->mcfg == MCFG_METHOD_3) { RTL_W16(CPlusCmd, (RTL_R16(CPlusCmd) | (1 << 14) | (1 << 3))); - DBG_PRINTF + DBG ("Set MAC Reg C+CR Offset 0xE0: bit-3 and bit-14\n"); } else { RTL_W16(CPlusCmd, (RTL_R16(CPlusCmd) | (1 << 3))); - DBG_PRINTF("Set MAC Reg C+CR Offset 0xE0: bit-3.\n"); + DBG("Set MAC Reg C+CR Offset 0xE0: bit-3.\n"); } { @@ -876,6 +858,7 @@ static struct pci_device_id r8169_nics[] = { PCI_ROM(0x10ec, 0x8169, "r8169", "RealTek RTL8169 Gigabit Ethernet"), PCI_ROM(0x16ec, 0x0116, "usr-r8169", "US Robotics RTL8169 Gigabit Ethernet"), PCI_ROM(0x1186, 0x4300, "dlink-r8169", "D-Link RTL8169 Gigabit Ethernet"), + PCI_ROM(0x1737, 0x1032, "linksys-r8169", "Linksys RTL8169 Gigabit Ethernet"), }; PCI_DRIVER ( r8169_driver, r8169_nics, PCI_NO_CLASS ); @@ -900,6 +883,15 @@ static int r8169_probe ( struct nic *nic, struct pci_device *pci ) { printed_version = 1; + /* Quick and very dirty hack to get r8169 driver working + * again, pre-rewrite + */ + if ( ! r8169_bufs ) + r8169_bufs = malloc_dma ( sizeof ( *r8169_bufs ), 256 ); + if ( ! r8169_bufs ) + return 0; + memset ( r8169_bufs, 0, sizeof ( *r8169_bufs ) ); + /* point to private storage */ tpc = &tpx; @@ -919,18 +911,18 @@ static int r8169_probe ( struct nic *nic, struct pci_device *pci ) { /* Config PHY */ rtl8169_hw_PHY_config(nic); - DBG_PRINTF("Set MAC Reg C+CR Offset 0x82h = 0x01h\n"); + DBG("Set MAC Reg C+CR Offset 0x82h = 0x01h\n"); RTL_W8(0x82, 0x01); if (tpc->mcfg < MCFG_METHOD_3) { - DBG_PRINTF("Set PCI Latency=0x40\n"); + DBG("Set PCI Latency=0x40\n"); pci_write_config_byte(pci, PCI_LATENCY_TIMER, 0x40); } if (tpc->mcfg == MCFG_METHOD_2) { - DBG_PRINTF("Set MAC Reg C+CR Offset 0x82h = 0x01h\n"); + DBG("Set MAC Reg C+CR Offset 0x82h = 0x01h\n"); RTL_W8(0x82, 0x01); - DBG_PRINTF("Set PHY Reg 0x0bh = 0x00h\n"); + DBG("Set PHY Reg 0x0bh = 0x00h\n"); RTL8169_WRITE_GMII_REG(ioaddr, 0x0b, 0x0000); //w 0x0b 15 0 0 } @@ -1049,7 +1041,7 @@ static void rtl8169_hw_PHY_reset(struct nic *nic __unused) struct rtl8169_private *priv = dev->priv; unsigned long ioaddr = priv->ioaddr; - DBG_PRINTF("%s: Reset RTL8169s PHY\n", dev->name); + DBG("%s: Reset RTL8169s PHY\n", dev->name); val = ( RTL8169_READ_GMII_REG( ioaddr, 0 ) | 0x8000 ) & 0xffff; RTL8169_WRITE_GMII_REG( ioaddr, 0, val ); @@ -1074,7 +1066,7 @@ static void rtl8169_hw_PHY_reset(struct nic *nic __unused) static void rtl8169_hw_PHY_config(struct nic *nic __unused) { - DBG_PRINTF("priv->mcfg=%d, priv->pcfg=%d\n", tpc->mcfg, tpc->pcfg); + DBG("priv->mcfg=%d, priv->pcfg=%d\n", tpc->mcfg, tpc->pcfg); if (tpc->mcfg == MCFG_METHOD_4) { /* @@ -1175,7 +1167,7 @@ static void rtl8169_hw_PHY_config(struct nic *nic __unused) RTL8169_WRITE_GMII_REG((unsigned long) ioaddr, 0x0B, 0x0000); } else { - DBG_PRINTF("tpc->mcfg=%d. Discard hw PHY config.\n", + DBG("tpc->mcfg=%d. Discard hw PHY config.\n", tpc->mcfg); } } |
