diff options
Diffstat (limited to 'drivers/net/b44.c')
-rw-r--r-- | drivers/net/b44.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index c3267e4e1bb0..c4e12b5cbb92 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -608,8 +608,7 @@ static void b44_tx(struct b44 *bp) | |||
608 | struct ring_info *rp = &bp->tx_buffers[cons]; | 608 | struct ring_info *rp = &bp->tx_buffers[cons]; |
609 | struct sk_buff *skb = rp->skb; | 609 | struct sk_buff *skb = rp->skb; |
610 | 610 | ||
611 | if (unlikely(skb == NULL)) | 611 | BUG_ON(skb == NULL); |
612 | BUG(); | ||
613 | 612 | ||
614 | pci_unmap_single(bp->pdev, | 613 | pci_unmap_single(bp->pdev, |
615 | pci_unmap_addr(rp, mapping), | 614 | pci_unmap_addr(rp, mapping), |
@@ -1339,6 +1338,9 @@ static int b44_set_mac_addr(struct net_device *dev, void *p) | |||
1339 | if (netif_running(dev)) | 1338 | if (netif_running(dev)) |
1340 | return -EBUSY; | 1339 | return -EBUSY; |
1341 | 1340 | ||
1341 | if (!is_valid_ether_addr(addr->sa_data)) | ||
1342 | return -EINVAL; | ||
1343 | |||
1342 | memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); | 1344 | memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); |
1343 | 1345 | ||
1344 | spin_lock_irq(&bp->lock); | 1346 | spin_lock_irq(&bp->lock); |
@@ -1876,6 +1878,12 @@ static int __devinit b44_get_invariants(struct b44 *bp) | |||
1876 | bp->dev->dev_addr[3] = eeprom[80]; | 1878 | bp->dev->dev_addr[3] = eeprom[80]; |
1877 | bp->dev->dev_addr[4] = eeprom[83]; | 1879 | bp->dev->dev_addr[4] = eeprom[83]; |
1878 | bp->dev->dev_addr[5] = eeprom[82]; | 1880 | bp->dev->dev_addr[5] = eeprom[82]; |
1881 | |||
1882 | if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){ | ||
1883 | printk(KERN_ERR PFX "Invalid MAC address found in EEPROM\n"); | ||
1884 | return -EINVAL; | ||
1885 | } | ||
1886 | |||
1879 | memcpy(bp->dev->perm_addr, bp->dev->dev_addr, bp->dev->addr_len); | 1887 | memcpy(bp->dev->perm_addr, bp->dev->dev_addr, bp->dev->addr_len); |
1880 | 1888 | ||
1881 | bp->phy_addr = eeprom[90] & 0x1f; | 1889 | bp->phy_addr = eeprom[90] & 0x1f; |
@@ -2033,6 +2041,11 @@ static int __devinit b44_init_one(struct pci_dev *pdev, | |||
2033 | 2041 | ||
2034 | pci_save_state(bp->pdev); | 2042 | pci_save_state(bp->pdev); |
2035 | 2043 | ||
2044 | /* Chip reset provides power to the b44 MAC & PCI cores, which | ||
2045 | * is necessary for MAC register access. | ||
2046 | */ | ||
2047 | b44_chip_reset(bp); | ||
2048 | |||
2036 | printk(KERN_INFO "%s: Broadcom 4400 10/100BaseT Ethernet ", dev->name); | 2049 | printk(KERN_INFO "%s: Broadcom 4400 10/100BaseT Ethernet ", dev->name); |
2037 | for (i = 0; i < 6; i++) | 2050 | for (i = 0; i < 6; i++) |
2038 | printk("%2.2x%c", dev->dev_addr[i], | 2051 | printk("%2.2x%c", dev->dev_addr[i], |