Commit ebaf7f8f authored by Francois Romieu's avatar Francois Romieu

xircom_cb: stop using net_device.{base_addr, irq} and convert to __iomem.

Signed-off-by: default avatarFrancois Romieu <romieu@fr.zoreil.com>
Acked-by: default avatarGrant Grundler <grundler@parisc-linux.org>
parent d59a1881
...@@ -41,7 +41,9 @@ MODULE_DESCRIPTION("Xircom Cardbus ethernet driver"); ...@@ -41,7 +41,9 @@ MODULE_DESCRIPTION("Xircom Cardbus ethernet driver");
MODULE_AUTHOR("Arjan van de Ven <arjanv@redhat.com>"); MODULE_AUTHOR("Arjan van de Ven <arjanv@redhat.com>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
#define xw32(reg, val) iowrite32(val, ioaddr + (reg))
#define xr32(reg) ioread32(ioaddr + (reg))
#define xr8(reg) ioread8(ioaddr + (reg))
/* IO registers on the card, offsets */ /* IO registers on the card, offsets */
#define CSR0 0x00 #define CSR0 0x00
...@@ -83,7 +85,7 @@ struct xircom_private { ...@@ -83,7 +85,7 @@ struct xircom_private {
struct sk_buff *tx_skb[4]; struct sk_buff *tx_skb[4];
unsigned long io_port; void __iomem *ioaddr;
int open; int open;
/* transmit_used is the rotating counter that indicates which transmit /* transmit_used is the rotating counter that indicates which transmit
...@@ -137,7 +139,7 @@ static int link_status(struct xircom_private *card); ...@@ -137,7 +139,7 @@ static int link_status(struct xircom_private *card);
static DEFINE_PCI_DEVICE_TABLE(xircom_pci_table) = { static DEFINE_PCI_DEVICE_TABLE(xircom_pci_table) = {
{0x115D, 0x0003, PCI_ANY_ID, PCI_ANY_ID,}, { PCI_VDEVICE(XIRCOM, 0x0003), },
{0,}, {0,},
}; };
MODULE_DEVICE_TABLE(pci, xircom_pci_table); MODULE_DEVICE_TABLE(pci, xircom_pci_table);
...@@ -146,9 +148,7 @@ static struct pci_driver xircom_ops = { ...@@ -146,9 +148,7 @@ static struct pci_driver xircom_ops = {
.name = "xircom_cb", .name = "xircom_cb",
.id_table = xircom_pci_table, .id_table = xircom_pci_table,
.probe = xircom_probe, .probe = xircom_probe,
.remove = xircom_remove, .remove = __devexit_p(xircom_remove),
.suspend =NULL,
.resume =NULL
}; };
...@@ -253,10 +253,13 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_ ...@@ -253,10 +253,13 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
private->dev = dev; private->dev = dev;
private->pdev = pdev; private->pdev = pdev;
private->io_port = pci_resource_start(pdev, 0);
/* IO range. */
private->ioaddr = pci_iomap(pdev, 0, 0);
if (!private->ioaddr)
goto reg_fail;
spin_lock_init(&private->lock); spin_lock_init(&private->lock);
dev->irq = pdev->irq;
dev->base_addr = private->io_port;
initialize_card(private); initialize_card(private);
read_mac_address(private); read_mac_address(private);
...@@ -268,7 +271,7 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_ ...@@ -268,7 +271,7 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
rc = register_netdev(dev); rc = register_netdev(dev);
if (rc < 0) { if (rc < 0) {
pr_err("%s: netdevice registration failed\n", __func__); pr_err("%s: netdevice registration failed\n", __func__);
goto reg_fail; goto err_unmap;
} }
netdev_info(dev, "Xircom cardbus revision %i at irq %i\n", netdev_info(dev, "Xircom cardbus revision %i at irq %i\n",
...@@ -286,6 +289,8 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_ ...@@ -286,6 +289,8 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
out: out:
return rc; return rc;
err_unmap:
pci_iounmap(pdev, private->ioaddr);
reg_fail: reg_fail:
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
dma_free_coherent(d, 8192, private->tx_buffer, private->tx_dma_handle); dma_free_coherent(d, 8192, private->tx_buffer, private->tx_dma_handle);
...@@ -314,6 +319,7 @@ static void __devexit xircom_remove(struct pci_dev *pdev) ...@@ -314,6 +319,7 @@ static void __devexit xircom_remove(struct pci_dev *pdev)
struct device *d = &pdev->dev; struct device *d = &pdev->dev;
unregister_netdev(dev); unregister_netdev(dev);
pci_iounmap(pdev, card->ioaddr);
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
dma_free_coherent(d, 8192, card->tx_buffer, card->tx_dma_handle); dma_free_coherent(d, 8192, card->tx_buffer, card->tx_dma_handle);
dma_free_coherent(d, 8192, card->rx_buffer, card->rx_dma_handle); dma_free_coherent(d, 8192, card->rx_buffer, card->rx_dma_handle);
...@@ -326,11 +332,12 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance) ...@@ -326,11 +332,12 @@ static irqreturn_t xircom_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 xircom_private *card = netdev_priv(dev); struct xircom_private *card = netdev_priv(dev);
void __iomem *ioaddr = card->ioaddr;
unsigned int status; unsigned int status;
int i; int i;
spin_lock(&card->lock); spin_lock(&card->lock);
status = inl(card->io_port+CSR5); status = xr32(CSR5);
#if defined DEBUG && DEBUG > 1 #if defined DEBUG && DEBUG > 1
print_binary(status); print_binary(status);
...@@ -360,7 +367,7 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance) ...@@ -360,7 +367,7 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
/* Clear all remaining interrupts */ /* Clear all remaining interrupts */
status |= 0xffffffff; /* FIXME: make this clear only the status |= 0xffffffff; /* FIXME: make this clear only the
real existing bits */ real existing bits */
outl(status,card->io_port+CSR5); xw32(CSR5, status);
for (i=0;i<NUMDESCRIPTORS;i++) for (i=0;i<NUMDESCRIPTORS;i++)
...@@ -438,11 +445,11 @@ static netdev_tx_t xircom_start_xmit(struct sk_buff *skb, ...@@ -438,11 +445,11 @@ static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
static int xircom_open(struct net_device *dev) static int xircom_open(struct net_device *dev)
{ {
struct xircom_private *xp = netdev_priv(dev); struct xircom_private *xp = netdev_priv(dev);
const int irq = xp->pdev->irq;
int retval; int retval;
netdev_info(dev, "xircom cardbus adaptor found, using irq %i\n", netdev_info(dev, "xircom cardbus adaptor found, using irq %i\n", irq);
dev->irq); retval = request_irq(irq, xircom_interrupt, IRQF_SHARED, dev->name, dev);
retval = request_irq(dev->irq, xircom_interrupt, IRQF_SHARED, dev->name, dev);
if (retval) if (retval)
return retval; return retval;
...@@ -474,7 +481,7 @@ static int xircom_close(struct net_device *dev) ...@@ -474,7 +481,7 @@ static int xircom_close(struct net_device *dev)
spin_unlock_irqrestore(&card->lock,flags); spin_unlock_irqrestore(&card->lock,flags);
card->open = 0; card->open = 0;
free_irq(dev->irq,dev); free_irq(card->pdev->irq, dev);
return 0; return 0;
...@@ -484,35 +491,39 @@ static int xircom_close(struct net_device *dev) ...@@ -484,35 +491,39 @@ static int xircom_close(struct net_device *dev)
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
static void xircom_poll_controller(struct net_device *dev) static void xircom_poll_controller(struct net_device *dev)
{ {
disable_irq(dev->irq); struct xircom_private *xp = netdev_priv(dev);
xircom_interrupt(dev->irq, dev); const int irq = xp->pdev->irq;
enable_irq(dev->irq);
disable_irq(irq);
xircom_interrupt(irq, dev);
enable_irq(irq);
} }
#endif #endif
static void initialize_card(struct xircom_private *card) static void initialize_card(struct xircom_private *card)
{ {
unsigned int val; void __iomem *ioaddr = card->ioaddr;
unsigned long flags; unsigned long flags;
u32 val;
spin_lock_irqsave(&card->lock, flags); spin_lock_irqsave(&card->lock, flags);
/* First: reset the card */ /* First: reset the card */
val = inl(card->io_port + CSR0); val = xr32(CSR0);
val |= 0x01; /* Software reset */ val |= 0x01; /* Software reset */
outl(val, card->io_port + CSR0); xw32(CSR0, val);
udelay(100); /* give the card some time to reset */ udelay(100); /* give the card some time to reset */
val = inl(card->io_port + CSR0); val = xr32(CSR0);
val &= ~0x01; /* disable Software reset */ val &= ~0x01; /* disable Software reset */
outl(val, card->io_port + CSR0); xw32(CSR0, val);
val = 0; /* Value 0x00 is a safe and conservative value val = 0; /* Value 0x00 is a safe and conservative value
for the PCI configuration settings */ for the PCI configuration settings */
outl(val, card->io_port + CSR0); xw32(CSR0, val);
disable_all_interrupts(card); disable_all_interrupts(card);
...@@ -530,10 +541,9 @@ ignored; I chose zero. ...@@ -530,10 +541,9 @@ ignored; I chose zero.
*/ */
static void trigger_transmit(struct xircom_private *card) static void trigger_transmit(struct xircom_private *card)
{ {
unsigned int val; void __iomem *ioaddr = card->ioaddr;
val = 0; xw32(CSR1, 0);
outl(val, card->io_port + CSR1);
} }
/* /*
...@@ -545,10 +555,9 @@ ignored; I chose zero. ...@@ -545,10 +555,9 @@ ignored; I chose zero.
*/ */
static void trigger_receive(struct xircom_private *card) static void trigger_receive(struct xircom_private *card)
{ {
unsigned int val; void __iomem *ioaddr = card->ioaddr;
val = 0; xw32(CSR2, 0);
outl(val, card->io_port + CSR2);
} }
/* /*
...@@ -557,6 +566,7 @@ descriptors and programs the addresses into the card. ...@@ -557,6 +566,7 @@ descriptors and programs the addresses into the card.
*/ */
static void setup_descriptors(struct xircom_private *card) static void setup_descriptors(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
u32 address; u32 address;
int i; int i;
...@@ -586,7 +596,7 @@ static void setup_descriptors(struct xircom_private *card) ...@@ -586,7 +596,7 @@ static void setup_descriptors(struct xircom_private *card)
wmb(); wmb();
/* Write the receive descriptor ring address to the card */ /* Write the receive descriptor ring address to the card */
address = card->rx_dma_handle; address = card->rx_dma_handle;
outl(address, card->io_port + CSR3); /* Receive descr list address */ xw32(CSR3, address); /* Receive descr list address */
/* transmit descriptors */ /* transmit descriptors */
...@@ -611,7 +621,7 @@ static void setup_descriptors(struct xircom_private *card) ...@@ -611,7 +621,7 @@ static void setup_descriptors(struct xircom_private *card)
wmb(); wmb();
/* wite the transmit descriptor ring to the card */ /* wite the transmit descriptor ring to the card */
address = card->tx_dma_handle; address = card->tx_dma_handle;
outl(address, card->io_port + CSR4); /* xmit descr list address */ xw32(CSR4, address); /* xmit descr list address */
} }
/* /*
...@@ -620,11 +630,12 @@ valid by setting the address in the card to 0x00. ...@@ -620,11 +630,12 @@ valid by setting the address in the card to 0x00.
*/ */
static void remove_descriptors(struct xircom_private *card) static void remove_descriptors(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
val = 0; val = 0;
outl(val, card->io_port + CSR3); /* Receive descriptor address */ xw32(CSR3, val); /* Receive descriptor address */
outl(val, card->io_port + CSR4); /* Send descriptor address */ xw32(CSR4, val); /* Send descriptor address */
} }
/* /*
...@@ -635,17 +646,17 @@ This function also clears the status-bit. ...@@ -635,17 +646,17 @@ This function also clears the status-bit.
*/ */
static int link_status_changed(struct xircom_private *card) static int link_status_changed(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
val = inl(card->io_port + CSR5); /* Status register */ val = xr32(CSR5); /* Status register */
if (!(val & (1 << 27))) /* no change */
if ((val & (1 << 27)) == 0) /* no change */
return 0; return 0;
/* clear the event by writing a 1 to the bit in the /* clear the event by writing a 1 to the bit in the
status register. */ status register. */
val = (1 << 27); val = (1 << 27);
outl(val, card->io_port + CSR5); xw32(CSR5, val);
return 1; return 1;
} }
...@@ -657,11 +668,9 @@ in a non-stopped state. ...@@ -657,11 +668,9 @@ in a non-stopped state.
*/ */
static int transmit_active(struct xircom_private *card) static int transmit_active(struct xircom_private *card)
{ {
unsigned int val; void __iomem *ioaddr = card->ioaddr;
val = inl(card->io_port + CSR5); /* Status register */ if (!(xr32(CSR5) & (7 << 20))) /* transmitter disabled */
if ((val & (7 << 20)) == 0) /* transmitter disabled */
return 0; return 0;
return 1; return 1;
...@@ -673,11 +682,9 @@ in a non-stopped state. ...@@ -673,11 +682,9 @@ in a non-stopped state.
*/ */
static int receive_active(struct xircom_private *card) static int receive_active(struct xircom_private *card)
{ {
unsigned int val; void __iomem *ioaddr = card->ioaddr;
val = inl(card->io_port + CSR5); /* Status register */
if ((val & (7 << 17)) == 0) /* receiver disabled */ if (!(xr32(CSR5) & (7 << 17))) /* receiver disabled */
return 0; return 0;
return 1; return 1;
...@@ -695,10 +702,11 @@ must be called with the lock held and interrupts disabled. ...@@ -695,10 +702,11 @@ must be called with the lock held and interrupts disabled.
*/ */
static void activate_receiver(struct xircom_private *card) static void activate_receiver(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
int counter; int counter;
val = inl(card->io_port + CSR6); /* Operation mode */ val = xr32(CSR6); /* Operation mode */
/* If the "active" bit is set and the receiver is already /* If the "active" bit is set and the receiver is already
active, no need to do the expensive thing */ active, no need to do the expensive thing */
...@@ -707,7 +715,7 @@ static void activate_receiver(struct xircom_private *card) ...@@ -707,7 +715,7 @@ static void activate_receiver(struct xircom_private *card)
val = val & ~2; /* disable the receiver */ val = val & ~2; /* disable the receiver */
outl(val, card->io_port + CSR6); xw32(CSR6, val);
counter = 10; counter = 10;
while (counter > 0) { while (counter > 0) {
...@@ -721,9 +729,9 @@ static void activate_receiver(struct xircom_private *card) ...@@ -721,9 +729,9 @@ static void activate_receiver(struct xircom_private *card)
} }
/* enable the receiver */ /* enable the receiver */
val = inl(card->io_port + CSR6); /* Operation mode */ val = xr32(CSR6); /* Operation mode */
val = val | 2; /* enable the receiver */ val = val | 2; /* enable the receiver */
outl(val, card->io_port + CSR6); xw32(CSR6, val);
/* now wait for the card to activate again */ /* now wait for the card to activate again */
counter = 10; counter = 10;
...@@ -748,12 +756,13 @@ must be called with the lock held and interrupts disabled. ...@@ -748,12 +756,13 @@ must be called with the lock held and interrupts disabled.
*/ */
static void deactivate_receiver(struct xircom_private *card) static void deactivate_receiver(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
int counter; int counter;
val = inl(card->io_port + CSR6); /* Operation mode */ val = xr32(CSR6); /* Operation mode */
val = val & ~2; /* disable the receiver */ val = val & ~2; /* disable the receiver */
outl(val, card->io_port + CSR6); xw32(CSR6, val);
counter = 10; counter = 10;
while (counter > 0) { while (counter > 0) {
...@@ -780,10 +789,11 @@ must be called with the lock held and interrupts disabled. ...@@ -780,10 +789,11 @@ must be called with the lock held and interrupts disabled.
*/ */
static void activate_transmitter(struct xircom_private *card) static void activate_transmitter(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
int counter; int counter;
val = inl(card->io_port + CSR6); /* Operation mode */ val = xr32(CSR6); /* Operation mode */
/* If the "active" bit is set and the receiver is already /* If the "active" bit is set and the receiver is already
active, no need to do the expensive thing */ active, no need to do the expensive thing */
...@@ -791,7 +801,7 @@ static void activate_transmitter(struct xircom_private *card) ...@@ -791,7 +801,7 @@ static void activate_transmitter(struct xircom_private *card)
return; return;
val = val & ~(1 << 13); /* disable the transmitter */ val = val & ~(1 << 13); /* disable the transmitter */
outl(val, card->io_port + CSR6); xw32(CSR6, val);
counter = 10; counter = 10;
while (counter > 0) { while (counter > 0) {
...@@ -806,9 +816,9 @@ static void activate_transmitter(struct xircom_private *card) ...@@ -806,9 +816,9 @@ static void activate_transmitter(struct xircom_private *card)
} }
/* enable the transmitter */ /* enable the transmitter */
val = inl(card->io_port + CSR6); /* Operation mode */ val = xr32(CSR6); /* Operation mode */
val = val | (1 << 13); /* enable the transmitter */ val = val | (1 << 13); /* enable the transmitter */
outl(val, card->io_port + CSR6); xw32(CSR6, val);
/* now wait for the card to activate again */ /* now wait for the card to activate again */
counter = 10; counter = 10;
...@@ -833,12 +843,13 @@ must be called with the lock held and interrupts disabled. ...@@ -833,12 +843,13 @@ must be called with the lock held and interrupts disabled.
*/ */
static void deactivate_transmitter(struct xircom_private *card) static void deactivate_transmitter(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
int counter; int counter;
val = inl(card->io_port + CSR6); /* Operation mode */ val = xr32(CSR6); /* Operation mode */
val = val & ~2; /* disable the transmitter */ val = val & ~2; /* disable the transmitter */
outl(val, card->io_port + CSR6); xw32(CSR6, val);
counter = 20; counter = 20;
while (counter > 0) { while (counter > 0) {
...@@ -861,11 +872,12 @@ must be called with the lock held and interrupts disabled. ...@@ -861,11 +872,12 @@ must be called with the lock held and interrupts disabled.
*/ */
static void enable_transmit_interrupt(struct xircom_private *card) static void enable_transmit_interrupt(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
val = inl(card->io_port + CSR7); /* Interrupt enable register */ val = xr32(CSR7); /* Interrupt enable register */
val |= 1; /* enable the transmit interrupt */ val |= 1; /* enable the transmit interrupt */
outl(val, card->io_port + CSR7); xw32(CSR7, val);
} }
...@@ -876,11 +888,12 @@ must be called with the lock held and interrupts disabled. ...@@ -876,11 +888,12 @@ must be called with the lock held and interrupts disabled.
*/ */
static void enable_receive_interrupt(struct xircom_private *card) static void enable_receive_interrupt(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
val = inl(card->io_port + CSR7); /* Interrupt enable register */ val = xr32(CSR7); /* Interrupt enable register */
val = val | (1 << 6); /* enable the receive interrupt */ val = val | (1 << 6); /* enable the receive interrupt */
outl(val, card->io_port + CSR7); xw32(CSR7, val);
} }
/* /*
...@@ -890,11 +903,12 @@ must be called with the lock held and interrupts disabled. ...@@ -890,11 +903,12 @@ must be called with the lock held and interrupts disabled.
*/ */
static void enable_link_interrupt(struct xircom_private *card) static void enable_link_interrupt(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
val = inl(card->io_port + CSR7); /* Interrupt enable register */ val = xr32(CSR7); /* Interrupt enable register */
val = val | (1 << 27); /* enable the link status chage interrupt */ val = val | (1 << 27); /* enable the link status chage interrupt */
outl(val, card->io_port + CSR7); xw32(CSR7, val);
} }
...@@ -906,10 +920,9 @@ must be called with the lock held and interrupts disabled. ...@@ -906,10 +920,9 @@ must be called with the lock held and interrupts disabled.
*/ */
static void disable_all_interrupts(struct xircom_private *card) static void disable_all_interrupts(struct xircom_private *card)
{ {
unsigned int val; void __iomem *ioaddr = card->ioaddr;
val = 0; /* disable all interrupts */ xw32(CSR7, 0);
outl(val, card->io_port + CSR7);
} }
/* /*
...@@ -919,9 +932,10 @@ must be called with the lock held and interrupts disabled. ...@@ -919,9 +932,10 @@ must be called with the lock held and interrupts disabled.
*/ */
static void enable_common_interrupts(struct xircom_private *card) static void enable_common_interrupts(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
val = inl(card->io_port + CSR7); /* Interrupt enable register */ val = xr32(CSR7); /* Interrupt enable register */
val |= (1<<16); /* Normal Interrupt Summary */ val |= (1<<16); /* Normal Interrupt Summary */
val |= (1<<15); /* Abnormal Interrupt Summary */ val |= (1<<15); /* Abnormal Interrupt Summary */
val |= (1<<13); /* Fatal bus error */ val |= (1<<13); /* Fatal bus error */
...@@ -930,7 +944,7 @@ static void enable_common_interrupts(struct xircom_private *card) ...@@ -930,7 +944,7 @@ static void enable_common_interrupts(struct xircom_private *card)
val |= (1<<5); /* Transmit Underflow */ val |= (1<<5); /* Transmit Underflow */
val |= (1<<2); /* Transmit Buffer Unavailable */ val |= (1<<2); /* Transmit Buffer Unavailable */
val |= (1<<1); /* Transmit Process Stopped */ val |= (1<<1); /* Transmit Process Stopped */
outl(val, card->io_port + CSR7); xw32(CSR7, val);
} }
/* /*
...@@ -940,11 +954,12 @@ must be called with the lock held and interrupts disabled. ...@@ -940,11 +954,12 @@ must be called with the lock held and interrupts disabled.
*/ */
static int enable_promisc(struct xircom_private *card) static int enable_promisc(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned int val; unsigned int val;
val = inl(card->io_port + CSR6); val = xr32(CSR6);
val = val | (1 << 6); val = val | (1 << 6);
outl(val, card->io_port + CSR6); xw32(CSR6, val);
return 1; return 1;
} }
...@@ -959,13 +974,16 @@ Must be called in locked state with interrupts disabled ...@@ -959,13 +974,16 @@ Must be called in locked state with interrupts disabled
*/ */
static int link_status(struct xircom_private *card) static int link_status(struct xircom_private *card)
{ {
unsigned int val; void __iomem *ioaddr = card->ioaddr;
u8 val;
val = inb(card->io_port + CSR12); val = xr8(CSR12);
if (!(val&(1<<2))) /* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */ /* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */
if (!(val & (1 << 2)))
return 10; return 10;
if (!(val&(1<<1))) /* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */ /* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */
if (!(val & (1 << 1)))
return 100; return 100;
/* If we get here -> no link at all */ /* If we get here -> no link at all */
...@@ -984,29 +1002,31 @@ static int link_status(struct xircom_private *card) ...@@ -984,29 +1002,31 @@ static int link_status(struct xircom_private *card)
*/ */
static void read_mac_address(struct xircom_private *card) static void read_mac_address(struct xircom_private *card)
{ {
unsigned char j, tuple, link, data_id, data_count; void __iomem *ioaddr = card->ioaddr;
unsigned long flags; unsigned long flags;
u8 link;
int i; int i;
spin_lock_irqsave(&card->lock, flags); spin_lock_irqsave(&card->lock, flags);
outl(1 << 12, card->io_port + CSR9); /* enable boot rom access */ xw32(CSR9, 1 << 12); /* enable boot rom access */
for (i = 0x100; i < 0x1f7; i += link + 2) { for (i = 0x100; i < 0x1f7; i += link + 2) {
outl(i, card->io_port + CSR10); u8 tuple, data_id, data_count;
tuple = inl(card->io_port + CSR9) & 0xff;
outl(i + 1, card->io_port + CSR10); xw32(CSR10, i);
link = inl(card->io_port + CSR9) & 0xff; tuple = xr32(CSR9);
outl(i + 2, card->io_port + CSR10); xw32(CSR10, i + 1);
data_id = inl(card->io_port + CSR9) & 0xff; link = xr32(CSR9);
outl(i + 3, card->io_port + CSR10); xw32(CSR10, i + 2);
data_count = inl(card->io_port + CSR9) & 0xff; data_id = xr32(CSR9);
xw32(CSR10, i + 3);
data_count = xr32(CSR9);
if ((tuple == 0x22) && (data_id == 0x04) && (data_count == 0x06)) { if ((tuple == 0x22) && (data_id == 0x04) && (data_count == 0x06)) {
/* int j;
* This is it. We have the data we want.
*/
for (j = 0; j < 6; j++) { for (j = 0; j < 6; j++) {
outl(i + j + 4, card->io_port + CSR10); xw32(CSR10, i + j + 4);
card->dev->dev_addr[j] = inl(card->io_port + CSR9) & 0xff; card->dev->dev_addr[j] = xr32(CSR9) & 0xff;
} }
break; break;
} else if (link == 0) { } else if (link == 0) {
...@@ -1025,6 +1045,7 @@ static void read_mac_address(struct xircom_private *card) ...@@ -1025,6 +1045,7 @@ static void read_mac_address(struct xircom_private *card)
*/ */
static void transceiver_voodoo(struct xircom_private *card) static void transceiver_voodoo(struct xircom_private *card)
{ {
void __iomem *ioaddr = card->ioaddr;
unsigned long flags; unsigned long flags;
/* disable all powermanagement */ /* disable all powermanagement */
...@@ -1034,14 +1055,14 @@ static void transceiver_voodoo(struct xircom_private *card) ...@@ -1034,14 +1055,14 @@ static void transceiver_voodoo(struct xircom_private *card)
spin_lock_irqsave(&card->lock, flags); spin_lock_irqsave(&card->lock, flags);
outl(0x0008, card->io_port + CSR15); xw32(CSR15, 0x0008);
udelay(25); udelay(25);
outl(0xa8050000, card->io_port + CSR15); xw32(CSR15, 0xa8050000);
udelay(25); udelay(25);
outl(0xa00f0000, card->io_port + CSR15); xw32(CSR15, 0xa00f0000);
udelay(25); udelay(25);
spin_unlock_irqrestore(&card->lock, flags); spin_unlock_irqrestore(&card->lock, flags);
netif_start_queue(card->dev); netif_start_queue(card->dev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment