aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/b44.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/b44.c')
-rw-r--r--drivers/net/b44.c94
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
105static const struct pci_device_id b44_pci_tbl[] = { 106static 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
345static void __b44_set_flow_ctrl(struct b44 *bp, u32 pause_flags) 344static 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;
415error: 414error:
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
419static inline void b44_wap54g10_workaround(struct b44 *bp) 418static inline void b44_wap54g10_workaround(struct b44 *bp)
@@ -506,18 +505,15 @@ static void b44_stats_update(struct b44 *bp)
506static void b44_link_report(struct b44 *bp) 505static 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