summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/r8169.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/net/r8169.c')
-rw-r--r--src/drivers/net/r8169.c58
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);
}
}