diff options
author | Francois Romieu <romieu@fr.zoreil.com> | 2012-03-09 12:28:59 -0500 |
---|---|---|
committer | Francois Romieu <romieu@fr.zoreil.com> | 2012-04-07 05:47:16 -0400 |
commit | b5a80837b7e125729a49b2a8b80558d09bea7e19 (patch) | |
tree | 713fb4097fdbccdecd6fc84c42478bc9f1a817ca /drivers/net/ethernet/smsc | |
parent | 308f2888a3ff442167e2aea419225445b7a1b8b6 (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.c | 47 |
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 | ||
56 | struct smsc9420_pdata { | 56 | struct 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 | ||
115 | static inline u32 smsc9420_reg_read(struct smsc9420_pdata *pd, u32 offset) | 115 | static 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 | ||
120 | static inline void | 120 | static inline void |
121 | smsc9420_reg_write(struct smsc9420_pdata *pd, u32 offset, u32 value) | 121 | smsc9420_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 | ||
126 | static inline void smsc9420_pci_flush_write(struct smsc9420_pdata *pd) | 126 | static 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 |
722 | static void smsc9420_poll_controller(struct net_device *dev) | 722 | static 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 | ||
1333 | static int smsc9420_open(struct net_device *dev) | 1336 | static 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: | |||
1491 | out_free_tx_ring_2: | 1492 | out_free_tx_ring_2: |
1492 | smsc9420_free_tx_ring(pd); | 1493 | smsc9420_free_tx_ring(pd); |
1493 | out_free_irq_1: | 1494 | out_free_irq_1: |
1494 | free_irq(dev->irq, pd); | 1495 | free_irq(irq, pd); |
1495 | out_0: | 1496 | out_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); |