diff options
-rw-r--r-- | drivers/net/b44.c | 67 |
1 files changed, 28 insertions, 39 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index b334cc310bc1..3b6428f004f6 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -102,10 +102,6 @@ MODULE_DEVICE_TABLE(pci, b44_pci_tbl); | |||
102 | static void b44_halt(struct b44 *); | 102 | static void b44_halt(struct b44 *); |
103 | static void b44_init_rings(struct b44 *); | 103 | static void b44_init_rings(struct b44 *); |
104 | static void b44_init_hw(struct b44 *); | 104 | static void b44_init_hw(struct b44 *); |
105 | static int b44_poll(struct net_device *dev, int *budget); | ||
106 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
107 | static void b44_poll_controller(struct net_device *dev); | ||
108 | #endif | ||
109 | 105 | ||
110 | static int dma_desc_align_mask; | 106 | static int dma_desc_align_mask; |
111 | static int dma_desc_sync_size; | 107 | static int dma_desc_sync_size; |
@@ -653,7 +649,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) | |||
653 | 649 | ||
654 | /* Hardware bug work-around, the chip is unable to do PCI DMA | 650 | /* Hardware bug work-around, the chip is unable to do PCI DMA |
655 | to/from anything above 1GB :-( */ | 651 | to/from anything above 1GB :-( */ |
656 | if(mapping+RX_PKT_BUF_SZ > B44_DMA_MASK) { | 652 | if (mapping + RX_PKT_BUF_SZ > B44_DMA_MASK) { |
657 | /* Sigh... */ | 653 | /* Sigh... */ |
658 | pci_unmap_single(bp->pdev, mapping, RX_PKT_BUF_SZ,PCI_DMA_FROMDEVICE); | 654 | pci_unmap_single(bp->pdev, mapping, RX_PKT_BUF_SZ,PCI_DMA_FROMDEVICE); |
659 | dev_kfree_skb_any(skb); | 655 | dev_kfree_skb_any(skb); |
@@ -663,7 +659,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) | |||
663 | mapping = pci_map_single(bp->pdev, skb->data, | 659 | mapping = pci_map_single(bp->pdev, skb->data, |
664 | RX_PKT_BUF_SZ, | 660 | RX_PKT_BUF_SZ, |
665 | PCI_DMA_FROMDEVICE); | 661 | PCI_DMA_FROMDEVICE); |
666 | if(mapping+RX_PKT_BUF_SZ > B44_DMA_MASK) { | 662 | if (mapping + RX_PKT_BUF_SZ > B44_DMA_MASK) { |
667 | pci_unmap_single(bp->pdev, mapping, RX_PKT_BUF_SZ,PCI_DMA_FROMDEVICE); | 663 | pci_unmap_single(bp->pdev, mapping, RX_PKT_BUF_SZ,PCI_DMA_FROMDEVICE); |
668 | dev_kfree_skb_any(skb); | 664 | dev_kfree_skb_any(skb); |
669 | return -ENOMEM; | 665 | return -ENOMEM; |
@@ -964,7 +960,7 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
964 | } | 960 | } |
965 | 961 | ||
966 | mapping = pci_map_single(bp->pdev, skb->data, len, PCI_DMA_TODEVICE); | 962 | mapping = pci_map_single(bp->pdev, skb->data, len, PCI_DMA_TODEVICE); |
967 | if(mapping+len > B44_DMA_MASK) { | 963 | if (mapping + len > B44_DMA_MASK) { |
968 | /* Chip can't handle DMA to/from >1GB, use bounce buffer */ | 964 | /* Chip can't handle DMA to/from >1GB, use bounce buffer */ |
969 | pci_unmap_single(bp->pdev, mapping, len, PCI_DMA_TODEVICE); | 965 | pci_unmap_single(bp->pdev, mapping, len, PCI_DMA_TODEVICE); |
970 | 966 | ||
@@ -975,7 +971,7 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
975 | 971 | ||
976 | mapping = pci_map_single(bp->pdev, bounce_skb->data, | 972 | mapping = pci_map_single(bp->pdev, bounce_skb->data, |
977 | len, PCI_DMA_TODEVICE); | 973 | len, PCI_DMA_TODEVICE); |
978 | if(mapping+len > B44_DMA_MASK) { | 974 | if (mapping + len > B44_DMA_MASK) { |
979 | pci_unmap_single(bp->pdev, mapping, | 975 | pci_unmap_single(bp->pdev, mapping, |
980 | len, PCI_DMA_TODEVICE); | 976 | len, PCI_DMA_TODEVICE); |
981 | dev_kfree_skb_any(bounce_skb); | 977 | dev_kfree_skb_any(bounce_skb); |
@@ -1102,8 +1098,7 @@ static void b44_free_rings(struct b44 *bp) | |||
1102 | * | 1098 | * |
1103 | * The chip has been shut down and the driver detached from | 1099 | * The chip has been shut down and the driver detached from |
1104 | * the networking, so no interrupts or new tx packets will | 1100 | * the networking, so no interrupts or new tx packets will |
1105 | * end up in the driver. bp->lock is not held and we are not | 1101 | * end up in the driver. |
1106 | * in an interrupt context and thus may sleep. | ||
1107 | */ | 1102 | */ |
1108 | static void b44_init_rings(struct b44 *bp) | 1103 | static void b44_init_rings(struct b44 *bp) |
1109 | { | 1104 | { |
@@ -1175,16 +1170,14 @@ static int b44_alloc_consistent(struct b44 *bp) | |||
1175 | int size; | 1170 | int size; |
1176 | 1171 | ||
1177 | size = B44_RX_RING_SIZE * sizeof(struct ring_info); | 1172 | size = B44_RX_RING_SIZE * sizeof(struct ring_info); |
1178 | bp->rx_buffers = kmalloc(size, GFP_KERNEL); | 1173 | bp->rx_buffers = kzalloc(size, GFP_KERNEL); |
1179 | if (!bp->rx_buffers) | 1174 | if (!bp->rx_buffers) |
1180 | goto out_err; | 1175 | goto out_err; |
1181 | memset(bp->rx_buffers, 0, size); | ||
1182 | 1176 | ||
1183 | size = B44_TX_RING_SIZE * sizeof(struct ring_info); | 1177 | size = B44_TX_RING_SIZE * sizeof(struct ring_info); |
1184 | bp->tx_buffers = kmalloc(size, GFP_KERNEL); | 1178 | bp->tx_buffers = kzalloc(size, GFP_KERNEL); |
1185 | if (!bp->tx_buffers) | 1179 | if (!bp->tx_buffers) |
1186 | goto out_err; | 1180 | goto out_err; |
1187 | memset(bp->tx_buffers, 0, size); | ||
1188 | 1181 | ||
1189 | size = DMA_TABLE_BYTES; | 1182 | size = DMA_TABLE_BYTES; |
1190 | bp->rx_ring = pci_alloc_consistent(bp->pdev, size, &bp->rx_ring_dma); | 1183 | bp->rx_ring = pci_alloc_consistent(bp->pdev, size, &bp->rx_ring_dma); |
@@ -1195,10 +1188,10 @@ static int b44_alloc_consistent(struct b44 *bp) | |||
1195 | struct dma_desc *rx_ring; | 1188 | struct dma_desc *rx_ring; |
1196 | dma_addr_t rx_ring_dma; | 1189 | dma_addr_t rx_ring_dma; |
1197 | 1190 | ||
1198 | if (!(rx_ring = (struct dma_desc *)kmalloc(size, GFP_KERNEL))) | 1191 | rx_ring = kzalloc(size, GFP_KERNEL); |
1192 | if (!rx_ring) | ||
1199 | goto out_err; | 1193 | goto out_err; |
1200 | 1194 | ||
1201 | memset(rx_ring, 0, size); | ||
1202 | rx_ring_dma = dma_map_single(&bp->pdev->dev, rx_ring, | 1195 | rx_ring_dma = dma_map_single(&bp->pdev->dev, rx_ring, |
1203 | DMA_TABLE_BYTES, | 1196 | DMA_TABLE_BYTES, |
1204 | DMA_BIDIRECTIONAL); | 1197 | DMA_BIDIRECTIONAL); |
@@ -1221,10 +1214,10 @@ static int b44_alloc_consistent(struct b44 *bp) | |||
1221 | struct dma_desc *tx_ring; | 1214 | struct dma_desc *tx_ring; |
1222 | dma_addr_t tx_ring_dma; | 1215 | dma_addr_t tx_ring_dma; |
1223 | 1216 | ||
1224 | if (!(tx_ring = (struct dma_desc *)kmalloc(size, GFP_KERNEL))) | 1217 | tx_ring = kzalloc(size, GFP_KERNEL); |
1218 | if (!tx_ring) | ||
1225 | goto out_err; | 1219 | goto out_err; |
1226 | 1220 | ||
1227 | memset(tx_ring, 0, size); | ||
1228 | tx_ring_dma = dma_map_single(&bp->pdev->dev, tx_ring, | 1221 | tx_ring_dma = dma_map_single(&bp->pdev->dev, tx_ring, |
1229 | DMA_TABLE_BYTES, | 1222 | DMA_TABLE_BYTES, |
1230 | DMA_TO_DEVICE); | 1223 | DMA_TO_DEVICE); |
@@ -1530,8 +1523,6 @@ static void __b44_set_rx_mode(struct net_device *dev) | |||
1530 | { | 1523 | { |
1531 | struct b44 *bp = netdev_priv(dev); | 1524 | struct b44 *bp = netdev_priv(dev); |
1532 | u32 val; | 1525 | u32 val; |
1533 | int i=0; | ||
1534 | unsigned char zero[6] = {0,0,0,0,0,0}; | ||
1535 | 1526 | ||
1536 | val = br32(bp, B44_RXCONFIG); | 1527 | val = br32(bp, B44_RXCONFIG); |
1537 | val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI); | 1528 | val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI); |
@@ -1539,14 +1530,17 @@ static void __b44_set_rx_mode(struct net_device *dev) | |||
1539 | val |= RXCONFIG_PROMISC; | 1530 | val |= RXCONFIG_PROMISC; |
1540 | bw32(bp, B44_RXCONFIG, val); | 1531 | bw32(bp, B44_RXCONFIG, val); |
1541 | } else { | 1532 | } else { |
1533 | unsigned char zero[6] = {0, 0, 0, 0, 0, 0}; | ||
1534 | int i = 0; | ||
1535 | |||
1542 | __b44_set_mac_addr(bp); | 1536 | __b44_set_mac_addr(bp); |
1543 | 1537 | ||
1544 | if (dev->flags & IFF_ALLMULTI) | 1538 | if (dev->flags & IFF_ALLMULTI) |
1545 | val |= RXCONFIG_ALLMULTI; | 1539 | val |= RXCONFIG_ALLMULTI; |
1546 | else | 1540 | else |
1547 | i=__b44_load_mcast(bp, dev); | 1541 | i = __b44_load_mcast(bp, dev); |
1548 | 1542 | ||
1549 | for(;i<64;i++) { | 1543 | for (; i < 64; i++) { |
1550 | __b44_cam_write(bp, zero, i); | 1544 | __b44_cam_write(bp, zero, i); |
1551 | } | 1545 | } |
1552 | bw32(bp, B44_RXCONFIG, val); | 1546 | bw32(bp, B44_RXCONFIG, val); |
@@ -1898,9 +1892,9 @@ static int __devinit b44_init_one(struct pci_dev *pdev, | |||
1898 | 1892 | ||
1899 | err = pci_set_consistent_dma_mask(pdev, (u64) B44_DMA_MASK); | 1893 | err = pci_set_consistent_dma_mask(pdev, (u64) B44_DMA_MASK); |
1900 | if (err) { | 1894 | if (err) { |
1901 | printk(KERN_ERR PFX "No usable DMA configuration, " | 1895 | printk(KERN_ERR PFX "No usable DMA configuration, " |
1902 | "aborting.\n"); | 1896 | "aborting.\n"); |
1903 | goto err_out_free_res; | 1897 | goto err_out_free_res; |
1904 | } | 1898 | } |
1905 | 1899 | ||
1906 | b44reg_base = pci_resource_start(pdev, 0); | 1900 | b44reg_base = pci_resource_start(pdev, 0); |
@@ -1922,10 +1916,8 @@ static int __devinit b44_init_one(struct pci_dev *pdev, | |||
1922 | bp = netdev_priv(dev); | 1916 | bp = netdev_priv(dev); |
1923 | bp->pdev = pdev; | 1917 | bp->pdev = pdev; |
1924 | bp->dev = dev; | 1918 | bp->dev = dev; |
1925 | if (b44_debug >= 0) | 1919 | |
1926 | bp->msg_enable = (1 << b44_debug) - 1; | 1920 | bp->msg_enable = netif_msg_init(b44_debug, B44_DEF_MSG_ENABLE); |
1927 | else | ||
1928 | bp->msg_enable = B44_DEF_MSG_ENABLE; | ||
1929 | 1921 | ||
1930 | spin_lock_init(&bp->lock); | 1922 | spin_lock_init(&bp->lock); |
1931 | 1923 | ||
@@ -2015,17 +2007,14 @@ err_out_disable_pdev: | |||
2015 | static void __devexit b44_remove_one(struct pci_dev *pdev) | 2007 | static void __devexit b44_remove_one(struct pci_dev *pdev) |
2016 | { | 2008 | { |
2017 | struct net_device *dev = pci_get_drvdata(pdev); | 2009 | struct net_device *dev = pci_get_drvdata(pdev); |
2010 | struct b44 *bp = netdev_priv(dev); | ||
2018 | 2011 | ||
2019 | if (dev) { | 2012 | unregister_netdev(dev); |
2020 | struct b44 *bp = netdev_priv(dev); | 2013 | iounmap(bp->regs); |
2021 | 2014 | free_netdev(dev); | |
2022 | unregister_netdev(dev); | 2015 | pci_release_regions(pdev); |
2023 | iounmap(bp->regs); | 2016 | pci_disable_device(pdev); |
2024 | free_netdev(dev); | 2017 | pci_set_drvdata(pdev, NULL); |
2025 | pci_release_regions(pdev); | ||
2026 | pci_disable_device(pdev); | ||
2027 | pci_set_drvdata(pdev, NULL); | ||
2028 | } | ||
2029 | } | 2018 | } |
2030 | 2019 | ||
2031 | static int b44_suspend(struct pci_dev *pdev, pm_message_t state) | 2020 | static int b44_suspend(struct pci_dev *pdev, pm_message_t state) |