[PATCH] 8139too: use iomap for pio/mmio
This patch converts the 8139too driver to use the iomap infrastructure for PIO and MMIO instead of playing macro tricks. I also had to fix read_eeprom(), mdio_sync(), mdio_read(), and mdio_write() to not pass PIO base address to MMIO read() and write() functions. In addition, the patch adds proper __iomem annotations for the driver. Both modes, PIO and MMIO, were tested with a RealTel RTL8139 card on an x86 box. The 8129 support remains untested due to lack of hardware. Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
88d7bd8cb9
commit
22f714b64b
|
@ -569,7 +569,7 @@ struct rtl_extra_stats {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rtl8139_private {
|
struct rtl8139_private {
|
||||||
void *mmio_addr;
|
void __iomem *mmio_addr;
|
||||||
int drv_flags;
|
int drv_flags;
|
||||||
struct pci_dev *pci_dev;
|
struct pci_dev *pci_dev;
|
||||||
u32 msg_enable;
|
u32 msg_enable;
|
||||||
|
@ -614,7 +614,7 @@ MODULE_PARM_DESC (multicast_filter_limit, "8139too maximum number of filtered mu
|
||||||
MODULE_PARM_DESC (media, "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps");
|
MODULE_PARM_DESC (media, "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps");
|
||||||
MODULE_PARM_DESC (full_duplex, "8139too: Force full duplex for board(s) (1)");
|
MODULE_PARM_DESC (full_duplex, "8139too: Force full duplex for board(s) (1)");
|
||||||
|
|
||||||
static int read_eeprom (void *ioaddr, int location, int addr_len);
|
static int read_eeprom (void __iomem *ioaddr, int location, int addr_len);
|
||||||
static int rtl8139_open (struct net_device *dev);
|
static int rtl8139_open (struct net_device *dev);
|
||||||
static int mdio_read (struct net_device *dev, int phy_id, int location);
|
static int mdio_read (struct net_device *dev, int phy_id, int location);
|
||||||
static void mdio_write (struct net_device *dev, int phy_id, int location,
|
static void mdio_write (struct net_device *dev, int phy_id, int location,
|
||||||
|
@ -638,46 +638,20 @@ static void __set_rx_mode (struct net_device *dev);
|
||||||
static void rtl8139_hw_start (struct net_device *dev);
|
static void rtl8139_hw_start (struct net_device *dev);
|
||||||
static struct ethtool_ops rtl8139_ethtool_ops;
|
static struct ethtool_ops rtl8139_ethtool_ops;
|
||||||
|
|
||||||
#ifdef USE_IO_OPS
|
|
||||||
|
|
||||||
#define RTL_R8(reg) inb (((unsigned long)ioaddr) + (reg))
|
|
||||||
#define RTL_R16(reg) inw (((unsigned long)ioaddr) + (reg))
|
|
||||||
#define RTL_R32(reg) ((unsigned long) inl (((unsigned long)ioaddr) + (reg)))
|
|
||||||
#define RTL_W8(reg, val8) outb ((val8), ((unsigned long)ioaddr) + (reg))
|
|
||||||
#define RTL_W16(reg, val16) outw ((val16), ((unsigned long)ioaddr) + (reg))
|
|
||||||
#define RTL_W32(reg, val32) outl ((val32), ((unsigned long)ioaddr) + (reg))
|
|
||||||
#define RTL_W8_F RTL_W8
|
|
||||||
#define RTL_W16_F RTL_W16
|
|
||||||
#define RTL_W32_F RTL_W32
|
|
||||||
#undef readb
|
|
||||||
#undef readw
|
|
||||||
#undef readl
|
|
||||||
#undef writeb
|
|
||||||
#undef writew
|
|
||||||
#undef writel
|
|
||||||
#define readb(addr) inb((unsigned long)(addr))
|
|
||||||
#define readw(addr) inw((unsigned long)(addr))
|
|
||||||
#define readl(addr) inl((unsigned long)(addr))
|
|
||||||
#define writeb(val,addr) outb((val),(unsigned long)(addr))
|
|
||||||
#define writew(val,addr) outw((val),(unsigned long)(addr))
|
|
||||||
#define writel(val,addr) outl((val),(unsigned long)(addr))
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* write MMIO register, with flush */
|
/* write MMIO register, with flush */
|
||||||
/* Flush avoids rtl8139 bug w/ posted MMIO writes */
|
/* Flush avoids rtl8139 bug w/ posted MMIO writes */
|
||||||
#define RTL_W8_F(reg, val8) do { writeb ((val8), ioaddr + (reg)); readb (ioaddr + (reg)); } while (0)
|
#define RTL_W8_F(reg, val8) do { iowrite8 ((val8), ioaddr + (reg)); ioread8 (ioaddr + (reg)); } while (0)
|
||||||
#define RTL_W16_F(reg, val16) do { writew ((val16), ioaddr + (reg)); readw (ioaddr + (reg)); } while (0)
|
#define RTL_W16_F(reg, val16) do { iowrite16 ((val16), ioaddr + (reg)); ioread16 (ioaddr + (reg)); } while (0)
|
||||||
#define RTL_W32_F(reg, val32) do { writel ((val32), ioaddr + (reg)); readl (ioaddr + (reg)); } while (0)
|
#define RTL_W32_F(reg, val32) do { iowrite32 ((val32), ioaddr + (reg)); ioread32 (ioaddr + (reg)); } while (0)
|
||||||
|
|
||||||
|
|
||||||
#define MMIO_FLUSH_AUDIT_COMPLETE 1
|
#define MMIO_FLUSH_AUDIT_COMPLETE 1
|
||||||
#if MMIO_FLUSH_AUDIT_COMPLETE
|
#if MMIO_FLUSH_AUDIT_COMPLETE
|
||||||
|
|
||||||
/* write MMIO register */
|
/* write MMIO register */
|
||||||
#define RTL_W8(reg, val8) writeb ((val8), ioaddr + (reg))
|
#define RTL_W8(reg, val8) iowrite8 ((val8), ioaddr + (reg))
|
||||||
#define RTL_W16(reg, val16) writew ((val16), ioaddr + (reg))
|
#define RTL_W16(reg, val16) iowrite16 ((val16), ioaddr + (reg))
|
||||||
#define RTL_W32(reg, val32) writel ((val32), ioaddr + (reg))
|
#define RTL_W32(reg, val32) iowrite32 ((val32), ioaddr + (reg))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -689,11 +663,9 @@ static struct ethtool_ops rtl8139_ethtool_ops;
|
||||||
#endif /* MMIO_FLUSH_AUDIT_COMPLETE */
|
#endif /* MMIO_FLUSH_AUDIT_COMPLETE */
|
||||||
|
|
||||||
/* read MMIO register */
|
/* read MMIO register */
|
||||||
#define RTL_R8(reg) readb (ioaddr + (reg))
|
#define RTL_R8(reg) ioread8 (ioaddr + (reg))
|
||||||
#define RTL_R16(reg) readw (ioaddr + (reg))
|
#define RTL_R16(reg) ioread16 (ioaddr + (reg))
|
||||||
#define RTL_R32(reg) ((unsigned long) readl (ioaddr + (reg)))
|
#define RTL_R32(reg) ((unsigned long) ioread32 (ioaddr + (reg)))
|
||||||
|
|
||||||
#endif /* USE_IO_OPS */
|
|
||||||
|
|
||||||
|
|
||||||
static const u16 rtl8139_intr_mask =
|
static const u16 rtl8139_intr_mask =
|
||||||
|
@ -740,10 +712,13 @@ static void __rtl8139_cleanup_dev (struct net_device *dev)
|
||||||
assert (tp->pci_dev != NULL);
|
assert (tp->pci_dev != NULL);
|
||||||
pdev = tp->pci_dev;
|
pdev = tp->pci_dev;
|
||||||
|
|
||||||
#ifndef USE_IO_OPS
|
#ifdef USE_IO_OPS
|
||||||
if (tp->mmio_addr)
|
if (tp->mmio_addr)
|
||||||
iounmap (tp->mmio_addr);
|
ioport_unmap (tp->mmio_addr);
|
||||||
#endif /* !USE_IO_OPS */
|
#else
|
||||||
|
if (tp->mmio_addr)
|
||||||
|
pci_iounmap (pdev, tp->mmio_addr);
|
||||||
|
#endif /* USE_IO_OPS */
|
||||||
|
|
||||||
/* it's ok to call this even if we have no regions to free */
|
/* it's ok to call this even if we have no regions to free */
|
||||||
pci_release_regions (pdev);
|
pci_release_regions (pdev);
|
||||||
|
@ -753,7 +728,7 @@ static void __rtl8139_cleanup_dev (struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void rtl8139_chip_reset (void *ioaddr)
|
static void rtl8139_chip_reset (void __iomem *ioaddr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -773,7 +748,7 @@ static void rtl8139_chip_reset (void *ioaddr)
|
||||||
static int __devinit rtl8139_init_board (struct pci_dev *pdev,
|
static int __devinit rtl8139_init_board (struct pci_dev *pdev,
|
||||||
struct net_device **dev_out)
|
struct net_device **dev_out)
|
||||||
{
|
{
|
||||||
void *ioaddr;
|
void __iomem *ioaddr;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
struct rtl8139_private *tp;
|
struct rtl8139_private *tp;
|
||||||
u8 tmp8;
|
u8 tmp8;
|
||||||
|
@ -855,13 +830,18 @@ static int __devinit rtl8139_init_board (struct pci_dev *pdev,
|
||||||
pci_set_master (pdev);
|
pci_set_master (pdev);
|
||||||
|
|
||||||
#ifdef USE_IO_OPS
|
#ifdef USE_IO_OPS
|
||||||
ioaddr = (void *) pio_start;
|
ioaddr = ioport_map(pio_start, pio_len);
|
||||||
|
if (!ioaddr) {
|
||||||
|
printk (KERN_ERR PFX "%s: cannot map PIO, aborting\n", pci_name(pdev));
|
||||||
|
rc = -EIO;
|
||||||
|
goto err_out;
|
||||||
|
}
|
||||||
dev->base_addr = pio_start;
|
dev->base_addr = pio_start;
|
||||||
tp->mmio_addr = ioaddr;
|
tp->mmio_addr = ioaddr;
|
||||||
tp->regs_len = pio_len;
|
tp->regs_len = pio_len;
|
||||||
#else
|
#else
|
||||||
/* ioremap MMIO region */
|
/* ioremap MMIO region */
|
||||||
ioaddr = ioremap (mmio_start, mmio_len);
|
ioaddr = pci_iomap(pdev, 1, 0);
|
||||||
if (ioaddr == NULL) {
|
if (ioaddr == NULL) {
|
||||||
printk (KERN_ERR PFX "%s: cannot remap MMIO, aborting\n", pci_name(pdev));
|
printk (KERN_ERR PFX "%s: cannot remap MMIO, aborting\n", pci_name(pdev));
|
||||||
rc = -EIO;
|
rc = -EIO;
|
||||||
|
@ -947,7 +927,7 @@ static int __devinit rtl8139_init_one (struct pci_dev *pdev,
|
||||||
struct net_device *dev = NULL;
|
struct net_device *dev = NULL;
|
||||||
struct rtl8139_private *tp;
|
struct rtl8139_private *tp;
|
||||||
int i, addr_len, option;
|
int i, addr_len, option;
|
||||||
void *ioaddr;
|
void __iomem *ioaddr;
|
||||||
static int board_idx = -1;
|
static int board_idx = -1;
|
||||||
u8 pci_rev;
|
u8 pci_rev;
|
||||||
|
|
||||||
|
@ -1147,47 +1127,46 @@ static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
|
||||||
No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
|
No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define eeprom_delay() readl(ee_addr)
|
#define eeprom_delay() RTL_R32(Cfg9346)
|
||||||
|
|
||||||
/* The EEPROM commands include the alway-set leading bit. */
|
/* The EEPROM commands include the alway-set leading bit. */
|
||||||
#define EE_WRITE_CMD (5)
|
#define EE_WRITE_CMD (5)
|
||||||
#define EE_READ_CMD (6)
|
#define EE_READ_CMD (6)
|
||||||
#define EE_ERASE_CMD (7)
|
#define EE_ERASE_CMD (7)
|
||||||
|
|
||||||
static int __devinit read_eeprom (void *ioaddr, int location, int addr_len)
|
static int __devinit read_eeprom (void __iomem *ioaddr, int location, int addr_len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned retval = 0;
|
unsigned retval = 0;
|
||||||
void *ee_addr = ioaddr + Cfg9346;
|
|
||||||
int read_cmd = location | (EE_READ_CMD << addr_len);
|
int read_cmd = location | (EE_READ_CMD << addr_len);
|
||||||
|
|
||||||
writeb (EE_ENB & ~EE_CS, ee_addr);
|
RTL_W8 (Cfg9346, EE_ENB & ~EE_CS);
|
||||||
writeb (EE_ENB, ee_addr);
|
RTL_W8 (Cfg9346, EE_ENB);
|
||||||
eeprom_delay ();
|
eeprom_delay ();
|
||||||
|
|
||||||
/* Shift the read command bits out. */
|
/* Shift the read command bits out. */
|
||||||
for (i = 4 + addr_len; i >= 0; i--) {
|
for (i = 4 + addr_len; i >= 0; i--) {
|
||||||
int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
|
int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
|
||||||
writeb (EE_ENB | dataval, ee_addr);
|
RTL_W8 (Cfg9346, EE_ENB | dataval);
|
||||||
eeprom_delay ();
|
eeprom_delay ();
|
||||||
writeb (EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
|
RTL_W8 (Cfg9346, EE_ENB | dataval | EE_SHIFT_CLK);
|
||||||
eeprom_delay ();
|
eeprom_delay ();
|
||||||
}
|
}
|
||||||
writeb (EE_ENB, ee_addr);
|
RTL_W8 (Cfg9346, EE_ENB);
|
||||||
eeprom_delay ();
|
eeprom_delay ();
|
||||||
|
|
||||||
for (i = 16; i > 0; i--) {
|
for (i = 16; i > 0; i--) {
|
||||||
writeb (EE_ENB | EE_SHIFT_CLK, ee_addr);
|
RTL_W8 (Cfg9346, EE_ENB | EE_SHIFT_CLK);
|
||||||
eeprom_delay ();
|
eeprom_delay ();
|
||||||
retval =
|
retval =
|
||||||
(retval << 1) | ((readb (ee_addr) & EE_DATA_READ) ? 1 :
|
(retval << 1) | ((RTL_R8 (Cfg9346) & EE_DATA_READ) ? 1 :
|
||||||
0);
|
0);
|
||||||
writeb (EE_ENB, ee_addr);
|
RTL_W8 (Cfg9346, EE_ENB);
|
||||||
eeprom_delay ();
|
eeprom_delay ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Terminate the EEPROM access. */
|
/* Terminate the EEPROM access. */
|
||||||
writeb (~EE_CS, ee_addr);
|
RTL_W8 (Cfg9346, ~EE_CS);
|
||||||
eeprom_delay ();
|
eeprom_delay ();
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -1206,7 +1185,7 @@ static int __devinit read_eeprom (void *ioaddr, int location, int addr_len)
|
||||||
#define MDIO_WRITE0 (MDIO_DIR)
|
#define MDIO_WRITE0 (MDIO_DIR)
|
||||||
#define MDIO_WRITE1 (MDIO_DIR | MDIO_DATA_OUT)
|
#define MDIO_WRITE1 (MDIO_DIR | MDIO_DATA_OUT)
|
||||||
|
|
||||||
#define mdio_delay(mdio_addr) readb(mdio_addr)
|
#define mdio_delay() RTL_R8(Config4)
|
||||||
|
|
||||||
|
|
||||||
static char mii_2_8139_map[8] = {
|
static char mii_2_8139_map[8] = {
|
||||||
|
@ -1223,15 +1202,15 @@ static char mii_2_8139_map[8] = {
|
||||||
|
|
||||||
#ifdef CONFIG_8139TOO_8129
|
#ifdef CONFIG_8139TOO_8129
|
||||||
/* Syncronize the MII management interface by shifting 32 one bits out. */
|
/* Syncronize the MII management interface by shifting 32 one bits out. */
|
||||||
static void mdio_sync (void *mdio_addr)
|
static void mdio_sync (void __iomem *ioaddr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 32; i >= 0; i--) {
|
for (i = 32; i >= 0; i--) {
|
||||||
writeb (MDIO_WRITE1, mdio_addr);
|
RTL_W8 (Config4, MDIO_WRITE1);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
writeb (MDIO_WRITE1 | MDIO_CLK, mdio_addr);
|
RTL_W8 (Config4, MDIO_WRITE1 | MDIO_CLK);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1241,35 +1220,36 @@ static int mdio_read (struct net_device *dev, int phy_id, int location)
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
#ifdef CONFIG_8139TOO_8129
|
#ifdef CONFIG_8139TOO_8129
|
||||||
void *mdio_addr = tp->mmio_addr + Config4;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
|
int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
|
||||||
int i;
|
int i;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (phy_id > 31) { /* Really a 8139. Use internal registers. */
|
if (phy_id > 31) { /* Really a 8139. Use internal registers. */
|
||||||
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
return location < 8 && mii_2_8139_map[location] ?
|
return location < 8 && mii_2_8139_map[location] ?
|
||||||
readw (tp->mmio_addr + mii_2_8139_map[location]) : 0;
|
RTL_R16 (mii_2_8139_map[location]) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_8139TOO_8129
|
#ifdef CONFIG_8139TOO_8129
|
||||||
mdio_sync (mdio_addr);
|
mdio_sync (ioaddr);
|
||||||
/* Shift the read command bits out. */
|
/* Shift the read command bits out. */
|
||||||
for (i = 15; i >= 0; i--) {
|
for (i = 15; i >= 0; i--) {
|
||||||
int dataval = (mii_cmd & (1 << i)) ? MDIO_DATA_OUT : 0;
|
int dataval = (mii_cmd & (1 << i)) ? MDIO_DATA_OUT : 0;
|
||||||
|
|
||||||
writeb (MDIO_DIR | dataval, mdio_addr);
|
RTL_W8 (Config4, MDIO_DIR | dataval);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
writeb (MDIO_DIR | dataval | MDIO_CLK, mdio_addr);
|
RTL_W8 (Config4, MDIO_DIR | dataval | MDIO_CLK);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the two transition, 16 data, and wire-idle bits. */
|
/* Read the two transition, 16 data, and wire-idle bits. */
|
||||||
for (i = 19; i > 0; i--) {
|
for (i = 19; i > 0; i--) {
|
||||||
writeb (0, mdio_addr);
|
RTL_W8 (Config4, 0);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
retval = (retval << 1) | ((readb (mdio_addr) & MDIO_DATA_IN) ? 1 : 0);
|
retval = (retval << 1) | ((RTL_R8 (Config4) & MDIO_DATA_IN) ? 1 : 0);
|
||||||
writeb (MDIO_CLK, mdio_addr);
|
RTL_W8 (Config4, MDIO_CLK);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1282,13 +1262,13 @@ static void mdio_write (struct net_device *dev, int phy_id, int location,
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
#ifdef CONFIG_8139TOO_8129
|
#ifdef CONFIG_8139TOO_8129
|
||||||
void *mdio_addr = tp->mmio_addr + Config4;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
|
int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
|
||||||
int i;
|
int i;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (phy_id > 31) { /* Really a 8139. Use internal registers. */
|
if (phy_id > 31) { /* Really a 8139. Use internal registers. */
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
if (location == 0) {
|
if (location == 0) {
|
||||||
RTL_W8 (Cfg9346, Cfg9346_Unlock);
|
RTL_W8 (Cfg9346, Cfg9346_Unlock);
|
||||||
RTL_W16 (BasicModeCtrl, value);
|
RTL_W16 (BasicModeCtrl, value);
|
||||||
|
@ -1299,23 +1279,23 @@ static void mdio_write (struct net_device *dev, int phy_id, int location,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_8139TOO_8129
|
#ifdef CONFIG_8139TOO_8129
|
||||||
mdio_sync (mdio_addr);
|
mdio_sync (ioaddr);
|
||||||
|
|
||||||
/* Shift the command bits out. */
|
/* Shift the command bits out. */
|
||||||
for (i = 31; i >= 0; i--) {
|
for (i = 31; i >= 0; i--) {
|
||||||
int dataval =
|
int dataval =
|
||||||
(mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
|
(mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
|
||||||
writeb (dataval, mdio_addr);
|
RTL_W8 (Config4, dataval);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
writeb (dataval | MDIO_CLK, mdio_addr);
|
RTL_W8 (Config4, dataval | MDIO_CLK);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
}
|
}
|
||||||
/* Clear out extra bits. */
|
/* Clear out extra bits. */
|
||||||
for (i = 2; i > 0; i--) {
|
for (i = 2; i > 0; i--) {
|
||||||
writeb (0, mdio_addr);
|
RTL_W8 (Config4, 0);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
writeb (MDIO_CLK, mdio_addr);
|
RTL_W8 (Config4, MDIO_CLK);
|
||||||
mdio_delay (mdio_addr);
|
mdio_delay ();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1325,7 +1305,7 @@ static int rtl8139_open (struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
int retval;
|
int retval;
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
|
|
||||||
retval = request_irq (dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev);
|
retval = request_irq (dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev);
|
||||||
if (retval)
|
if (retval)
|
||||||
|
@ -1382,7 +1362,7 @@ static void rtl_check_media (struct net_device *dev, unsigned int init_media)
|
||||||
static void rtl8139_hw_start (struct net_device *dev)
|
static void rtl8139_hw_start (struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
u32 i;
|
u32 i;
|
||||||
u8 tmp;
|
u8 tmp;
|
||||||
|
|
||||||
|
@ -1484,7 +1464,7 @@ static void rtl8139_tune_twister (struct net_device *dev,
|
||||||
struct rtl8139_private *tp)
|
struct rtl8139_private *tp)
|
||||||
{
|
{
|
||||||
int linkcase;
|
int linkcase;
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
|
|
||||||
/* This is a complicated state machine to configure the "twister" for
|
/* This is a complicated state machine to configure the "twister" for
|
||||||
impedance/echos based on the cable length.
|
impedance/echos based on the cable length.
|
||||||
|
@ -1568,7 +1548,7 @@ static void rtl8139_tune_twister (struct net_device *dev,
|
||||||
|
|
||||||
static inline void rtl8139_thread_iter (struct net_device *dev,
|
static inline void rtl8139_thread_iter (struct net_device *dev,
|
||||||
struct rtl8139_private *tp,
|
struct rtl8139_private *tp,
|
||||||
void *ioaddr)
|
void __iomem *ioaddr)
|
||||||
{
|
{
|
||||||
int mii_lpa;
|
int mii_lpa;
|
||||||
|
|
||||||
|
@ -1676,7 +1656,7 @@ static inline void rtl8139_tx_clear (struct rtl8139_private *tp)
|
||||||
static void rtl8139_tx_timeout (struct net_device *dev)
|
static void rtl8139_tx_timeout (struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
int i;
|
int i;
|
||||||
u8 tmp8;
|
u8 tmp8;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -1721,7 +1701,7 @@ static void rtl8139_tx_timeout (struct net_device *dev)
|
||||||
static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev)
|
static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
unsigned int entry;
|
unsigned int entry;
|
||||||
unsigned int len = skb->len;
|
unsigned int len = skb->len;
|
||||||
|
|
||||||
|
@ -1763,7 +1743,7 @@ static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev)
|
||||||
|
|
||||||
static void rtl8139_tx_interrupt (struct net_device *dev,
|
static void rtl8139_tx_interrupt (struct net_device *dev,
|
||||||
struct rtl8139_private *tp,
|
struct rtl8139_private *tp,
|
||||||
void *ioaddr)
|
void __iomem *ioaddr)
|
||||||
{
|
{
|
||||||
unsigned long dirty_tx, tx_left;
|
unsigned long dirty_tx, tx_left;
|
||||||
|
|
||||||
|
@ -1833,7 +1813,7 @@ static void rtl8139_tx_interrupt (struct net_device *dev,
|
||||||
|
|
||||||
/* TODO: clean this up! Rx reset need not be this intensive */
|
/* TODO: clean this up! Rx reset need not be this intensive */
|
||||||
static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
|
static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
|
||||||
struct rtl8139_private *tp, void *ioaddr)
|
struct rtl8139_private *tp, void __iomem *ioaddr)
|
||||||
{
|
{
|
||||||
u8 tmp8;
|
u8 tmp8;
|
||||||
#ifdef CONFIG_8139_OLD_RX_RESET
|
#ifdef CONFIG_8139_OLD_RX_RESET
|
||||||
|
@ -1930,7 +1910,7 @@ static __inline__ void wrap_copy(struct sk_buff *skb, const unsigned char *ring,
|
||||||
|
|
||||||
static void rtl8139_isr_ack(struct rtl8139_private *tp)
|
static void rtl8139_isr_ack(struct rtl8139_private *tp)
|
||||||
{
|
{
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
u16 status;
|
u16 status;
|
||||||
|
|
||||||
status = RTL_R16 (IntrStatus) & RxAckBits;
|
status = RTL_R16 (IntrStatus) & RxAckBits;
|
||||||
|
@ -1949,7 +1929,7 @@ static void rtl8139_isr_ack(struct rtl8139_private *tp)
|
||||||
static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
|
static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
|
||||||
int budget)
|
int budget)
|
||||||
{
|
{
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
int received = 0;
|
int received = 0;
|
||||||
unsigned char *rx_ring = tp->rx_ring;
|
unsigned char *rx_ring = tp->rx_ring;
|
||||||
unsigned int cur_rx = tp->cur_rx;
|
unsigned int cur_rx = tp->cur_rx;
|
||||||
|
@ -2087,7 +2067,7 @@ out:
|
||||||
|
|
||||||
static void rtl8139_weird_interrupt (struct net_device *dev,
|
static void rtl8139_weird_interrupt (struct net_device *dev,
|
||||||
struct rtl8139_private *tp,
|
struct rtl8139_private *tp,
|
||||||
void *ioaddr,
|
void __iomem *ioaddr,
|
||||||
int status, int link_changed)
|
int status, int link_changed)
|
||||||
{
|
{
|
||||||
DPRINTK ("%s: Abnormal interrupt, status %8.8x.\n",
|
DPRINTK ("%s: Abnormal interrupt, status %8.8x.\n",
|
||||||
|
@ -2127,7 +2107,7 @@ static void rtl8139_weird_interrupt (struct net_device *dev,
|
||||||
static int rtl8139_poll(struct net_device *dev, int *budget)
|
static int rtl8139_poll(struct net_device *dev, int *budget)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
int orig_budget = min(*budget, dev->quota);
|
int orig_budget = min(*budget, dev->quota);
|
||||||
int done = 1;
|
int done = 1;
|
||||||
|
|
||||||
|
@ -2165,7 +2145,7 @@ static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance,
|
||||||
{
|
{
|
||||||
struct net_device *dev = (struct net_device *) dev_instance;
|
struct net_device *dev = (struct net_device *) dev_instance;
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
u16 status, ackstat;
|
u16 status, ackstat;
|
||||||
int link_changed = 0; /* avoid bogus "uninit" warning */
|
int link_changed = 0; /* avoid bogus "uninit" warning */
|
||||||
int handled = 0;
|
int handled = 0;
|
||||||
|
@ -2241,7 +2221,7 @@ static void rtl8139_poll_controller(struct net_device *dev)
|
||||||
static int rtl8139_close (struct net_device *dev)
|
static int rtl8139_close (struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -2304,7 +2284,7 @@ static int rtl8139_close (struct net_device *dev)
|
||||||
static void rtl8139_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
static void rtl8139_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *np = netdev_priv(dev);
|
struct rtl8139_private *np = netdev_priv(dev);
|
||||||
void *ioaddr = np->mmio_addr;
|
void __iomem *ioaddr = np->mmio_addr;
|
||||||
|
|
||||||
spin_lock_irq(&np->lock);
|
spin_lock_irq(&np->lock);
|
||||||
if (rtl_chip_info[np->chipset].flags & HasLWake) {
|
if (rtl_chip_info[np->chipset].flags & HasLWake) {
|
||||||
|
@ -2338,7 +2318,7 @@ static void rtl8139_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
||||||
static int rtl8139_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
static int rtl8139_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *np = netdev_priv(dev);
|
struct rtl8139_private *np = netdev_priv(dev);
|
||||||
void *ioaddr = np->mmio_addr;
|
void __iomem *ioaddr = np->mmio_addr;
|
||||||
u32 support;
|
u32 support;
|
||||||
u8 cfg3, cfg5;
|
u8 cfg3, cfg5;
|
||||||
|
|
||||||
|
@ -2506,7 +2486,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||||
static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
|
static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (netif_running(dev)) {
|
if (netif_running(dev)) {
|
||||||
|
@ -2525,7 +2505,7 @@ static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
|
||||||
static void __set_rx_mode (struct net_device *dev)
|
static void __set_rx_mode (struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
u32 mc_filter[2]; /* Multicast hash filter */
|
u32 mc_filter[2]; /* Multicast hash filter */
|
||||||
int i, rx_mode;
|
int i, rx_mode;
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
|
@ -2586,7 +2566,7 @@ static int rtl8139_suspend (struct pci_dev *pdev, pm_message_t state)
|
||||||
{
|
{
|
||||||
struct net_device *dev = pci_get_drvdata (pdev);
|
struct net_device *dev = pci_get_drvdata (pdev);
|
||||||
struct rtl8139_private *tp = netdev_priv(dev);
|
struct rtl8139_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void __iomem *ioaddr = tp->mmio_addr;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
pci_save_state (pdev);
|
pci_save_state (pdev);
|
||||||
|
|
Loading…
Reference in New Issue