diff options
Diffstat (limited to 'drivers/net/b44.c')
-rw-r--r-- | drivers/net/b44.c | 94 |
1 files changed, 46 insertions, 48 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index 4869adb69586..332c60356285 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -10,6 +10,8 @@ | |||
10 | * Distribute under GPL. | 10 | * Distribute under GPL. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
14 | |||
13 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
14 | #include <linux/module.h> | 16 | #include <linux/module.h> |
15 | #include <linux/moduleparam.h> | 17 | #include <linux/moduleparam.h> |
@@ -34,7 +36,6 @@ | |||
34 | #include "b44.h" | 36 | #include "b44.h" |
35 | 37 | ||
36 | #define DRV_MODULE_NAME "b44" | 38 | #define DRV_MODULE_NAME "b44" |
37 | #define PFX DRV_MODULE_NAME ": " | ||
38 | #define DRV_MODULE_VERSION "2.0" | 39 | #define DRV_MODULE_VERSION "2.0" |
39 | 40 | ||
40 | #define B44_DEF_MSG_ENABLE \ | 41 | #define B44_DEF_MSG_ENABLE \ |
@@ -102,7 +103,7 @@ MODULE_PARM_DESC(b44_debug, "B44 bitmapped debugging message enable value"); | |||
102 | 103 | ||
103 | 104 | ||
104 | #ifdef CONFIG_B44_PCI | 105 | #ifdef CONFIG_B44_PCI |
105 | static const struct pci_device_id b44_pci_tbl[] = { | 106 | static DEFINE_PCI_DEVICE_TABLE(b44_pci_tbl) = { |
106 | { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401) }, | 107 | { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401) }, |
107 | { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401B0) }, | 108 | { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401B0) }, |
108 | { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401B1) }, | 109 | { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401B1) }, |
@@ -189,11 +190,10 @@ static int b44_wait_bit(struct b44 *bp, unsigned long reg, | |||
189 | udelay(10); | 190 | udelay(10); |
190 | } | 191 | } |
191 | if (i == timeout) { | 192 | if (i == timeout) { |
192 | printk(KERN_ERR PFX "%s: BUG! Timeout waiting for bit %08x of register " | 193 | if (net_ratelimit()) |
193 | "%lx to %s.\n", | 194 | netdev_err(bp->dev, "BUG! Timeout waiting for bit %08x of register %lx to %s\n", |
194 | bp->dev->name, | 195 | bit, reg, clear ? "clear" : "set"); |
195 | bit, reg, | 196 | |
196 | (clear ? "clear" : "set")); | ||
197 | return -ENODEV; | 197 | return -ENODEV; |
198 | } | 198 | } |
199 | return 0; | 199 | return 0; |
@@ -333,13 +333,12 @@ static int b44_phy_reset(struct b44 *bp) | |||
333 | err = b44_readphy(bp, MII_BMCR, &val); | 333 | err = b44_readphy(bp, MII_BMCR, &val); |
334 | if (!err) { | 334 | if (!err) { |
335 | if (val & BMCR_RESET) { | 335 | if (val & BMCR_RESET) { |
336 | printk(KERN_ERR PFX "%s: PHY Reset would not complete.\n", | 336 | netdev_err(bp->dev, "PHY Reset would not complete\n"); |
337 | bp->dev->name); | ||
338 | err = -ENODEV; | 337 | err = -ENODEV; |
339 | } | 338 | } |
340 | } | 339 | } |
341 | 340 | ||
342 | return 0; | 341 | return err; |
343 | } | 342 | } |
344 | 343 | ||
345 | static void __b44_set_flow_ctrl(struct b44 *bp, u32 pause_flags) | 344 | static void __b44_set_flow_ctrl(struct b44 *bp, u32 pause_flags) |
@@ -413,7 +412,7 @@ static void b44_wap54g10_workaround(struct b44 *bp) | |||
413 | } | 412 | } |
414 | return; | 413 | return; |
415 | error: | 414 | error: |
416 | printk(KERN_WARNING PFX "PHY: cannot reset MII transceiver isolate bit.\n"); | 415 | pr_warning("PHY: cannot reset MII transceiver isolate bit\n"); |
417 | } | 416 | } |
418 | #else | 417 | #else |
419 | static inline void b44_wap54g10_workaround(struct b44 *bp) | 418 | static inline void b44_wap54g10_workaround(struct b44 *bp) |
@@ -506,18 +505,15 @@ static void b44_stats_update(struct b44 *bp) | |||
506 | static void b44_link_report(struct b44 *bp) | 505 | static void b44_link_report(struct b44 *bp) |
507 | { | 506 | { |
508 | if (!netif_carrier_ok(bp->dev)) { | 507 | if (!netif_carrier_ok(bp->dev)) { |
509 | printk(KERN_INFO PFX "%s: Link is down.\n", bp->dev->name); | 508 | netdev_info(bp->dev, "Link is down\n"); |
510 | } else { | 509 | } else { |
511 | printk(KERN_INFO PFX "%s: Link is up at %d Mbps, %s duplex.\n", | 510 | netdev_info(bp->dev, "Link is up at %d Mbps, %s duplex\n", |
512 | bp->dev->name, | 511 | (bp->flags & B44_FLAG_100_BASE_T) ? 100 : 10, |
513 | (bp->flags & B44_FLAG_100_BASE_T) ? 100 : 10, | 512 | (bp->flags & B44_FLAG_FULL_DUPLEX) ? "full" : "half"); |
514 | (bp->flags & B44_FLAG_FULL_DUPLEX) ? "full" : "half"); | 513 | |
515 | 514 | netdev_info(bp->dev, "Flow control is %s for TX and %s for RX\n", | |
516 | printk(KERN_INFO PFX "%s: Flow control is %s for TX and " | 515 | (bp->flags & B44_FLAG_TX_PAUSE) ? "on" : "off", |
517 | "%s for RX.\n", | 516 | (bp->flags & B44_FLAG_RX_PAUSE) ? "on" : "off"); |
518 | bp->dev->name, | ||
519 | (bp->flags & B44_FLAG_TX_PAUSE) ? "on" : "off", | ||
520 | (bp->flags & B44_FLAG_RX_PAUSE) ? "on" : "off"); | ||
521 | } | 517 | } |
522 | } | 518 | } |
523 | 519 | ||
@@ -576,11 +572,9 @@ static void b44_check_phy(struct b44 *bp) | |||
576 | } | 572 | } |
577 | 573 | ||
578 | if (bmsr & BMSR_RFAULT) | 574 | if (bmsr & BMSR_RFAULT) |
579 | printk(KERN_WARNING PFX "%s: Remote fault detected in PHY\n", | 575 | netdev_warn(bp->dev, "Remote fault detected in PHY\n"); |
580 | bp->dev->name); | ||
581 | if (bmsr & BMSR_JCD) | 576 | if (bmsr & BMSR_JCD) |
582 | printk(KERN_WARNING PFX "%s: Jabber detected in PHY\n", | 577 | netdev_warn(bp->dev, "Jabber detected in PHY\n"); |
583 | bp->dev->name); | ||
584 | } | 578 | } |
585 | } | 579 | } |
586 | 580 | ||
@@ -815,7 +809,7 @@ static int b44_rx(struct b44 *bp, int budget) | |||
815 | struct sk_buff *copy_skb; | 809 | struct sk_buff *copy_skb; |
816 | 810 | ||
817 | b44_recycle_rx(bp, cons, bp->rx_prod); | 811 | b44_recycle_rx(bp, cons, bp->rx_prod); |
818 | copy_skb = dev_alloc_skb(len + 2); | 812 | copy_skb = netdev_alloc_skb(bp->dev, len + 2); |
819 | if (copy_skb == NULL) | 813 | if (copy_skb == NULL) |
820 | goto drop_it_no_recycle; | 814 | goto drop_it_no_recycle; |
821 | 815 | ||
@@ -901,7 +895,7 @@ static irqreturn_t b44_interrupt(int irq, void *dev_id) | |||
901 | handled = 1; | 895 | handled = 1; |
902 | 896 | ||
903 | if (unlikely(!netif_running(dev))) { | 897 | if (unlikely(!netif_running(dev))) { |
904 | printk(KERN_INFO "%s: late interrupt.\n", dev->name); | 898 | netdev_info(dev, "late interrupt\n"); |
905 | goto irq_ack; | 899 | goto irq_ack; |
906 | } | 900 | } |
907 | 901 | ||
@@ -926,8 +920,7 @@ static void b44_tx_timeout(struct net_device *dev) | |||
926 | { | 920 | { |
927 | struct b44 *bp = netdev_priv(dev); | 921 | struct b44 *bp = netdev_priv(dev); |
928 | 922 | ||
929 | printk(KERN_ERR PFX "%s: transmit timed out, resetting\n", | 923 | netdev_err(dev, "transmit timed out, resetting\n"); |
930 | dev->name); | ||
931 | 924 | ||
932 | spin_lock_irq(&bp->lock); | 925 | spin_lock_irq(&bp->lock); |
933 | 926 | ||
@@ -956,8 +949,7 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
956 | /* This is a hard error, log it. */ | 949 | /* This is a hard error, log it. */ |
957 | if (unlikely(TX_BUFFS_AVAIL(bp) < 1)) { | 950 | if (unlikely(TX_BUFFS_AVAIL(bp) < 1)) { |
958 | netif_stop_queue(dev); | 951 | netif_stop_queue(dev); |
959 | printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", | 952 | netdev_err(dev, "BUG! Tx Ring full when queue awake!\n"); |
960 | dev->name); | ||
961 | goto err_out; | 953 | goto err_out; |
962 | } | 954 | } |
963 | 955 | ||
@@ -1333,7 +1325,7 @@ static void b44_halt(struct b44 *bp) | |||
1333 | /* reset PHY */ | 1325 | /* reset PHY */ |
1334 | b44_phy_reset(bp); | 1326 | b44_phy_reset(bp); |
1335 | /* power down PHY */ | 1327 | /* power down PHY */ |
1336 | printk(KERN_INFO PFX "%s: powering down PHY\n", bp->dev->name); | 1328 | netdev_info(bp->dev, "powering down PHY\n"); |
1337 | bw32(bp, B44_MAC_CTRL, MAC_CTRL_PHY_PDOWN); | 1329 | bw32(bp, B44_MAC_CTRL, MAC_CTRL_PHY_PDOWN); |
1338 | /* now reset the chip, but without enabling the MAC&PHY | 1330 | /* now reset the chip, but without enabling the MAC&PHY |
1339 | * part of it. This has to be done _after_ we shut down the PHY */ | 1331 | * part of it. This has to be done _after_ we shut down the PHY */ |
@@ -1524,7 +1516,7 @@ static void b44_setup_pseudo_magicp(struct b44 *bp) | |||
1524 | 1516 | ||
1525 | pwol_pattern = kzalloc(B44_PATTERN_SIZE, GFP_KERNEL); | 1517 | pwol_pattern = kzalloc(B44_PATTERN_SIZE, GFP_KERNEL); |
1526 | if (!pwol_pattern) { | 1518 | if (!pwol_pattern) { |
1527 | printk(KERN_ERR PFX "Memory not available for WOL\n"); | 1519 | pr_err("Memory not available for WOL\n"); |
1528 | return; | 1520 | return; |
1529 | } | 1521 | } |
1530 | 1522 | ||
@@ -1691,10 +1683,12 @@ static int __b44_load_mcast(struct b44 *bp, struct net_device *dev) | |||
1691 | struct dev_mc_list *mclist; | 1683 | struct dev_mc_list *mclist; |
1692 | int i, num_ents; | 1684 | int i, num_ents; |
1693 | 1685 | ||
1694 | num_ents = min_t(int, dev->mc_count, B44_MCAST_TABLE_SIZE); | 1686 | num_ents = min_t(int, netdev_mc_count(dev), B44_MCAST_TABLE_SIZE); |
1695 | mclist = dev->mc_list; | 1687 | i = 0; |
1696 | for (i = 0; mclist && i < num_ents; i++, mclist = mclist->next) { | 1688 | netdev_for_each_mc_addr(mclist, dev) { |
1697 | __b44_cam_write(bp, mclist->dmi_addr, i + 1); | 1689 | if (i == num_ents) |
1690 | break; | ||
1691 | __b44_cam_write(bp, mclist->dmi_addr, i++ + 1); | ||
1698 | } | 1692 | } |
1699 | return i+1; | 1693 | return i+1; |
1700 | } | 1694 | } |
@@ -1716,7 +1710,7 @@ static void __b44_set_rx_mode(struct net_device *dev) | |||
1716 | __b44_set_mac_addr(bp); | 1710 | __b44_set_mac_addr(bp); |
1717 | 1711 | ||
1718 | if ((dev->flags & IFF_ALLMULTI) || | 1712 | if ((dev->flags & IFF_ALLMULTI) || |
1719 | (dev->mc_count > B44_MCAST_TABLE_SIZE)) | 1713 | (netdev_mc_count(dev) > B44_MCAST_TABLE_SIZE)) |
1720 | val |= RXCONFIG_ALLMULTI; | 1714 | val |= RXCONFIG_ALLMULTI; |
1721 | else | 1715 | else |
1722 | i = __b44_load_mcast(bp, dev); | 1716 | i = __b44_load_mcast(bp, dev); |
@@ -2097,7 +2091,7 @@ static int __devinit b44_get_invariants(struct b44 *bp) | |||
2097 | memcpy(bp->dev->dev_addr, addr, 6); | 2091 | memcpy(bp->dev->dev_addr, addr, 6); |
2098 | 2092 | ||
2099 | if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){ | 2093 | if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){ |
2100 | printk(KERN_ERR PFX "Invalid MAC address found in EEPROM\n"); | 2094 | pr_err("Invalid MAC address found in EEPROM\n"); |
2101 | return -EINVAL; | 2095 | return -EINVAL; |
2102 | } | 2096 | } |
2103 | 2097 | ||
@@ -2142,12 +2136,12 @@ static int __devinit b44_init_one(struct ssb_device *sdev, | |||
2142 | instance++; | 2136 | instance++; |
2143 | 2137 | ||
2144 | if (b44_version_printed++ == 0) | 2138 | if (b44_version_printed++ == 0) |
2145 | printk(KERN_INFO "%s", version); | 2139 | pr_info("%s", version); |
2146 | 2140 | ||
2147 | 2141 | ||
2148 | dev = alloc_etherdev(sizeof(*bp)); | 2142 | dev = alloc_etherdev(sizeof(*bp)); |
2149 | if (!dev) { | 2143 | if (!dev) { |
2150 | dev_err(sdev->dev, "Etherdev alloc failed, aborting.\n"); | 2144 | dev_err(sdev->dev, "Etherdev alloc failed, aborting\n"); |
2151 | err = -ENOMEM; | 2145 | err = -ENOMEM; |
2152 | goto out; | 2146 | goto out; |
2153 | } | 2147 | } |
@@ -2186,13 +2180,13 @@ static int __devinit b44_init_one(struct ssb_device *sdev, | |||
2186 | err = ssb_dma_set_mask(sdev, DMA_BIT_MASK(30)); | 2180 | err = ssb_dma_set_mask(sdev, DMA_BIT_MASK(30)); |
2187 | if (err) { | 2181 | if (err) { |
2188 | dev_err(sdev->dev, | 2182 | dev_err(sdev->dev, |
2189 | "Required 30BIT DMA mask unsupported by the system.\n"); | 2183 | "Required 30BIT DMA mask unsupported by the system\n"); |
2190 | goto err_out_powerdown; | 2184 | goto err_out_powerdown; |
2191 | } | 2185 | } |
2192 | err = b44_get_invariants(bp); | 2186 | err = b44_get_invariants(bp); |
2193 | if (err) { | 2187 | if (err) { |
2194 | dev_err(sdev->dev, | 2188 | dev_err(sdev->dev, |
2195 | "Problem fetching invariants of chip, aborting.\n"); | 2189 | "Problem fetching invariants of chip, aborting\n"); |
2196 | goto err_out_powerdown; | 2190 | goto err_out_powerdown; |
2197 | } | 2191 | } |
2198 | 2192 | ||
@@ -2212,7 +2206,7 @@ static int __devinit b44_init_one(struct ssb_device *sdev, | |||
2212 | 2206 | ||
2213 | err = register_netdev(dev); | 2207 | err = register_netdev(dev); |
2214 | if (err) { | 2208 | if (err) { |
2215 | dev_err(sdev->dev, "Cannot register net device, aborting.\n"); | 2209 | dev_err(sdev->dev, "Cannot register net device, aborting\n"); |
2216 | goto err_out_powerdown; | 2210 | goto err_out_powerdown; |
2217 | } | 2211 | } |
2218 | 2212 | ||
@@ -2223,8 +2217,12 @@ static int __devinit b44_init_one(struct ssb_device *sdev, | |||
2223 | */ | 2217 | */ |
2224 | b44_chip_reset(bp, B44_CHIP_RESET_FULL); | 2218 | b44_chip_reset(bp, B44_CHIP_RESET_FULL); |
2225 | 2219 | ||
2226 | printk(KERN_INFO "%s: Broadcom 44xx/47xx 10/100BaseT Ethernet %pM\n", | 2220 | /* do a phy reset to test if there is an active phy */ |
2227 | dev->name, dev->dev_addr); | 2221 | if (b44_phy_reset(bp) < 0) |
2222 | bp->phy_addr = B44_PHY_ADDR_NO_PHY; | ||
2223 | |||
2224 | netdev_info(dev, "Broadcom 44xx/47xx 10/100BaseT Ethernet %pM\n", | ||
2225 | dev->dev_addr); | ||
2228 | 2226 | ||
2229 | return 0; | 2227 | return 0; |
2230 | 2228 | ||
@@ -2297,7 +2295,7 @@ static int b44_resume(struct ssb_device *sdev) | |||
2297 | 2295 | ||
2298 | rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev); | 2296 | rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev); |
2299 | if (rc) { | 2297 | if (rc) { |
2300 | printk(KERN_ERR PFX "%s: request_irq failed\n", dev->name); | 2298 | netdev_err(dev, "request_irq failed\n"); |
2301 | return rc; | 2299 | return rc; |
2302 | } | 2300 | } |
2303 | 2301 | ||