aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/smsc
diff options
context:
space:
mode:
authorFrancois Romieu <romieu@fr.zoreil.com>2012-03-09 12:28:59 -0500
committerFrancois Romieu <romieu@fr.zoreil.com>2012-04-07 05:47:16 -0400
commitb5a80837b7e125729a49b2a8b80558d09bea7e19 (patch)
tree713fb4097fdbccdecd6fc84c42478bc9f1a817ca /drivers/net/ethernet/smsc
parent308f2888a3ff442167e2aea419225445b7a1b8b6 (diff)
smsc9420: stop using net_device.{base_addr, irq}.
The device private data pointer can not be NULL in smsc9420_open(). Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> Cc: Steve Glendinning <steve.glendinning@smsc.com>
Diffstat (limited to 'drivers/net/ethernet/smsc')
-rw-r--r--drivers/net/ethernet/smsc/smsc9420.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/drivers/net/ethernet/smsc/smsc9420.c b/drivers/net/ethernet/smsc/smsc9420.c
index f80ec6839003..fd33b21f6c96 100644
--- a/drivers/net/ethernet/smsc/smsc9420.c
+++ b/drivers/net/ethernet/smsc/smsc9420.c
@@ -54,7 +54,7 @@ struct smsc9420_ring_info {
54}; 54};
55 55
56struct smsc9420_pdata { 56struct smsc9420_pdata {
57 void __iomem *base_addr; 57 void __iomem *ioaddr;
58 struct pci_dev *pdev; 58 struct pci_dev *pdev;
59 struct net_device *dev; 59 struct net_device *dev;
60 60
@@ -114,13 +114,13 @@ do { if ((pd)->msg_enable & NETIF_MSG_##TYPE) \
114 114
115static inline u32 smsc9420_reg_read(struct smsc9420_pdata *pd, u32 offset) 115static inline u32 smsc9420_reg_read(struct smsc9420_pdata *pd, u32 offset)
116{ 116{
117 return ioread32(pd->base_addr + offset); 117 return ioread32(pd->ioaddr + offset);
118} 118}
119 119
120static inline void 120static inline void
121smsc9420_reg_write(struct smsc9420_pdata *pd, u32 offset, u32 value) 121smsc9420_reg_write(struct smsc9420_pdata *pd, u32 offset, u32 value)
122{ 122{
123 iowrite32(value, pd->base_addr + offset); 123 iowrite32(value, pd->ioaddr + offset);
124} 124}
125 125
126static inline void smsc9420_pci_flush_write(struct smsc9420_pdata *pd) 126static inline void smsc9420_pci_flush_write(struct smsc9420_pdata *pd)
@@ -660,7 +660,7 @@ static irqreturn_t smsc9420_isr(int irq, void *dev_id)
660 ulong flags; 660 ulong flags;
661 661
662 BUG_ON(!pd); 662 BUG_ON(!pd);
663 BUG_ON(!pd->base_addr); 663 BUG_ON(!pd->ioaddr);
664 664
665 int_cfg = smsc9420_reg_read(pd, INT_CFG); 665 int_cfg = smsc9420_reg_read(pd, INT_CFG);
666 666
@@ -721,9 +721,12 @@ static irqreturn_t smsc9420_isr(int irq, void *dev_id)
721#ifdef CONFIG_NET_POLL_CONTROLLER 721#ifdef CONFIG_NET_POLL_CONTROLLER
722static void smsc9420_poll_controller(struct net_device *dev) 722static void smsc9420_poll_controller(struct net_device *dev)
723{ 723{
724 disable_irq(dev->irq); 724 struct smsc9420_pdata *pd = netdev_priv(dev);
725 const int irq = pd->pdev->irq;
726
727 disable_irq(irq);
725 smsc9420_isr(0, dev); 728 smsc9420_isr(0, dev);
726 enable_irq(dev->irq); 729 enable_irq(irq);
727} 730}
728#endif /* CONFIG_NET_POLL_CONTROLLER */ 731#endif /* CONFIG_NET_POLL_CONTROLLER */
729 732
@@ -760,7 +763,7 @@ static int smsc9420_stop(struct net_device *dev)
760 smsc9420_stop_rx(pd); 763 smsc9420_stop_rx(pd);
761 smsc9420_free_rx_ring(pd); 764 smsc9420_free_rx_ring(pd);
762 765
763 free_irq(dev->irq, pd); 766 free_irq(pd->pdev->irq, pd);
764 767
765 smsc9420_dmac_soft_reset(pd); 768 smsc9420_dmac_soft_reset(pd);
766 769
@@ -1332,15 +1335,12 @@ out:
1332 1335
1333static int smsc9420_open(struct net_device *dev) 1336static int smsc9420_open(struct net_device *dev)
1334{ 1337{
1335 struct smsc9420_pdata *pd; 1338 struct smsc9420_pdata *pd = netdev_priv(dev);
1336 u32 bus_mode, mac_cr, dmac_control, int_cfg, dma_intr_ena, int_ctl; 1339 u32 bus_mode, mac_cr, dmac_control, int_cfg, dma_intr_ena, int_ctl;
1340 const int irq = pd->pdev->irq;
1337 unsigned long flags; 1341 unsigned long flags;
1338 int result = 0, timeout; 1342 int result = 0, timeout;
1339 1343
1340 BUG_ON(!dev);
1341 pd = netdev_priv(dev);
1342 BUG_ON(!pd);
1343
1344 if (!is_valid_ether_addr(dev->dev_addr)) { 1344 if (!is_valid_ether_addr(dev->dev_addr)) {
1345 smsc_warn(IFUP, "dev_addr is not a valid MAC address"); 1345 smsc_warn(IFUP, "dev_addr is not a valid MAC address");
1346 result = -EADDRNOTAVAIL; 1346 result = -EADDRNOTAVAIL;
@@ -1359,9 +1359,10 @@ static int smsc9420_open(struct net_device *dev)
1359 smsc9420_reg_write(pd, INT_STAT, 0xFFFFFFFF); 1359 smsc9420_reg_write(pd, INT_STAT, 0xFFFFFFFF);
1360 smsc9420_pci_flush_write(pd); 1360 smsc9420_pci_flush_write(pd);
1361 1361
1362 if (request_irq(dev->irq, smsc9420_isr, IRQF_SHARED | IRQF_DISABLED, 1362 result = request_irq(irq, smsc9420_isr, IRQF_SHARED | IRQF_DISABLED,
1363 DRV_NAME, pd)) { 1363 DRV_NAME, pd);
1364 smsc_warn(IFUP, "Unable to use IRQ = %d", dev->irq); 1364 if (result) {
1365 smsc_warn(IFUP, "Unable to use IRQ = %d", irq);
1365 result = -ENODEV; 1366 result = -ENODEV;
1366 goto out_0; 1367 goto out_0;
1367 } 1368 }
@@ -1396,7 +1397,7 @@ static int smsc9420_open(struct net_device *dev)
1396 smsc9420_pci_flush_write(pd); 1397 smsc9420_pci_flush_write(pd);
1397 1398
1398 /* test the IRQ connection to the ISR */ 1399 /* test the IRQ connection to the ISR */
1399 smsc_dbg(IFUP, "Testing ISR using IRQ %d", dev->irq); 1400 smsc_dbg(IFUP, "Testing ISR using IRQ %d", irq);
1400 pd->software_irq_signal = false; 1401 pd->software_irq_signal = false;
1401 1402
1402 spin_lock_irqsave(&pd->int_lock, flags); 1403 spin_lock_irqsave(&pd->int_lock, flags);
@@ -1431,7 +1432,7 @@ static int smsc9420_open(struct net_device *dev)
1431 goto out_free_irq_1; 1432 goto out_free_irq_1;
1432 } 1433 }
1433 1434
1434 smsc_dbg(IFUP, "ISR passed test using IRQ %d", dev->irq); 1435 smsc_dbg(IFUP, "ISR passed test using IRQ %d", irq);
1435 1436
1436 result = smsc9420_alloc_tx_ring(pd); 1437 result = smsc9420_alloc_tx_ring(pd);
1437 if (result) { 1438 if (result) {
@@ -1491,7 +1492,7 @@ out_free_rx_ring_3:
1491out_free_tx_ring_2: 1492out_free_tx_ring_2:
1492 smsc9420_free_tx_ring(pd); 1493 smsc9420_free_tx_ring(pd);
1493out_free_irq_1: 1494out_free_irq_1:
1494 free_irq(dev->irq, pd); 1495 free_irq(irq, pd);
1495out_0: 1496out_0:
1496 return result; 1497 return result;
1497} 1498}
@@ -1520,7 +1521,7 @@ static int smsc9420_suspend(struct pci_dev *pdev, pm_message_t state)
1520 smsc9420_stop_rx(pd); 1521 smsc9420_stop_rx(pd);
1521 smsc9420_free_rx_ring(pd); 1522 smsc9420_free_rx_ring(pd);
1522 1523
1523 free_irq(dev->irq, pd); 1524 free_irq(pd->pdev->irq, pd);
1524 1525
1525 netif_device_detach(dev); 1526 netif_device_detach(dev);
1526 } 1527 }
@@ -1553,6 +1554,7 @@ static int smsc9420_resume(struct pci_dev *pdev)
1553 smsc_warn(IFUP, "pci_enable_wake failed: %d", err); 1554 smsc_warn(IFUP, "pci_enable_wake failed: %d", err);
1554 1555
1555 if (netif_running(dev)) { 1556 if (netif_running(dev)) {
1557 /* FIXME: gross. It looks like ancient PM relic.*/
1556 err = smsc9420_open(dev); 1558 err = smsc9420_open(dev);
1557 netif_device_attach(dev); 1559 netif_device_attach(dev);
1558 } 1560 }
@@ -1626,8 +1628,6 @@ smsc9420_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1626 /* registers are double mapped with 0 offset for LE and 0x200 for BE */ 1628 /* registers are double mapped with 0 offset for LE and 0x200 for BE */
1627 virt_addr += LAN9420_CPSR_ENDIAN_OFFSET; 1629 virt_addr += LAN9420_CPSR_ENDIAN_OFFSET;
1628 1630
1629 dev->base_addr = (ulong)virt_addr;
1630
1631 pd = netdev_priv(dev); 1631 pd = netdev_priv(dev);
1632 1632
1633 /* pci descriptors are created in the PCI consistent area */ 1633 /* pci descriptors are created in the PCI consistent area */
@@ -1647,7 +1647,7 @@ smsc9420_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1647 1647
1648 pd->pdev = pdev; 1648 pd->pdev = pdev;
1649 pd->dev = dev; 1649 pd->dev = dev;
1650 pd->base_addr = virt_addr; 1650 pd->ioaddr = virt_addr;
1651 pd->msg_enable = smsc_debug; 1651 pd->msg_enable = smsc_debug;
1652 pd->rx_csum = true; 1652 pd->rx_csum = true;
1653 1653
@@ -1670,7 +1670,6 @@ smsc9420_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1670 1670
1671 dev->netdev_ops = &smsc9420_netdev_ops; 1671 dev->netdev_ops = &smsc9420_netdev_ops;
1672 dev->ethtool_ops = &smsc9420_ethtool_ops; 1672 dev->ethtool_ops = &smsc9420_ethtool_ops;
1673 dev->irq = pdev->irq;
1674 1673
1675 netif_napi_add(dev, &pd->napi, smsc9420_rx_poll, NAPI_WEIGHT); 1674 netif_napi_add(dev, &pd->napi, smsc9420_rx_poll, NAPI_WEIGHT);
1676 1675
@@ -1728,7 +1727,7 @@ static void __devexit smsc9420_remove(struct pci_dev *pdev)
1728 pci_free_consistent(pdev, sizeof(struct smsc9420_dma_desc) * 1727 pci_free_consistent(pdev, sizeof(struct smsc9420_dma_desc) *
1729 (RX_RING_SIZE + TX_RING_SIZE), pd->rx_ring, pd->rx_dma_addr); 1728 (RX_RING_SIZE + TX_RING_SIZE), pd->rx_ring, pd->rx_dma_addr);
1730 1729
1731 iounmap(pd->base_addr - LAN9420_CPSR_ENDIAN_OFFSET); 1730 iounmap(pd->ioaddr - LAN9420_CPSR_ENDIAN_OFFSET);
1732 pci_release_regions(pdev); 1731 pci_release_regions(pdev);
1733 free_netdev(dev); 1732 free_netdev(dev);
1734 pci_disable_device(pdev); 1733 pci_disable_device(pdev);