diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/starfire.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/starfire.c')
-rw-r--r-- | drivers/net/starfire.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index a36e2b51e88c..6dfa69899019 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c | |||
@@ -301,7 +301,7 @@ enum chipset { | |||
301 | CH_6915 = 0, | 301 | CH_6915 = 0, |
302 | }; | 302 | }; |
303 | 303 | ||
304 | static struct pci_device_id starfire_pci_tbl[] = { | 304 | static DEFINE_PCI_DEVICE_TABLE(starfire_pci_tbl) = { |
305 | { 0x9004, 0x6915, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_6915 }, | 305 | { 0x9004, 0x6915, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_6915 }, |
306 | { 0, } | 306 | { 0, } |
307 | }; | 307 | }; |
@@ -928,7 +928,7 @@ static int netdev_open(struct net_device *dev) | |||
928 | 928 | ||
929 | /* Do we ever need to reset the chip??? */ | 929 | /* Do we ever need to reset the chip??? */ |
930 | 930 | ||
931 | retval = request_irq(dev->irq, &intr_handler, IRQF_SHARED, dev->name, dev); | 931 | retval = request_irq(dev->irq, intr_handler, IRQF_SHARED, dev->name, dev); |
932 | if (retval) | 932 | if (retval) |
933 | return retval; | 933 | return retval; |
934 | 934 | ||
@@ -1063,7 +1063,7 @@ static int netdev_open(struct net_device *dev) | |||
1063 | if (retval) { | 1063 | if (retval) { |
1064 | printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", | 1064 | printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", |
1065 | FIRMWARE_RX); | 1065 | FIRMWARE_RX); |
1066 | return retval; | 1066 | goto out_init; |
1067 | } | 1067 | } |
1068 | if (fw_rx->size % 4) { | 1068 | if (fw_rx->size % 4) { |
1069 | printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", | 1069 | printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", |
@@ -1108,6 +1108,9 @@ out_tx: | |||
1108 | release_firmware(fw_tx); | 1108 | release_firmware(fw_tx); |
1109 | out_rx: | 1109 | out_rx: |
1110 | release_firmware(fw_rx); | 1110 | release_firmware(fw_rx); |
1111 | out_init: | ||
1112 | if (retval) | ||
1113 | netdev_close(dev); | ||
1111 | return retval; | 1114 | return retval; |
1112 | } | 1115 | } |
1113 | 1116 | ||
@@ -1482,8 +1485,8 @@ static int __netdev_rx(struct net_device *dev, int *quota) | |||
1482 | printk(KERN_DEBUG " netdev_rx() normal Rx pkt length %d, quota %d.\n", pkt_len, *quota); | 1485 | printk(KERN_DEBUG " netdev_rx() normal Rx pkt length %d, quota %d.\n", pkt_len, *quota); |
1483 | /* Check if the packet is long enough to accept without copying | 1486 | /* Check if the packet is long enough to accept without copying |
1484 | to a minimally-sized skbuff. */ | 1487 | to a minimally-sized skbuff. */ |
1485 | if (pkt_len < rx_copybreak | 1488 | if (pkt_len < rx_copybreak && |
1486 | && (skb = dev_alloc_skb(pkt_len + 2)) != NULL) { | 1489 | (skb = dev_alloc_skb(pkt_len + 2)) != NULL) { |
1487 | skb_reserve(skb, 2); /* 16 byte align the IP header */ | 1490 | skb_reserve(skb, 2); /* 16 byte align the IP header */ |
1488 | pci_dma_sync_single_for_cpu(np->pci_dev, | 1491 | pci_dma_sync_single_for_cpu(np->pci_dev, |
1489 | np->rx_info[entry].mapping, | 1492 | np->rx_info[entry].mapping, |
@@ -1793,22 +1796,22 @@ static void set_rx_mode(struct net_device *dev) | |||
1793 | 1796 | ||
1794 | if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */ | 1797 | if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */ |
1795 | rx_mode |= AcceptAll; | 1798 | rx_mode |= AcceptAll; |
1796 | } else if ((dev->mc_count > multicast_filter_limit) | 1799 | } else if ((netdev_mc_count(dev) > multicast_filter_limit) || |
1797 | || (dev->flags & IFF_ALLMULTI)) { | 1800 | (dev->flags & IFF_ALLMULTI)) { |
1798 | /* Too many to match, or accept all multicasts. */ | 1801 | /* Too many to match, or accept all multicasts. */ |
1799 | rx_mode |= AcceptBroadcast|AcceptAllMulticast|PerfectFilter; | 1802 | rx_mode |= AcceptBroadcast|AcceptAllMulticast|PerfectFilter; |
1800 | } else if (dev->mc_count <= 14) { | 1803 | } else if (netdev_mc_count(dev) <= 14) { |
1801 | /* Use the 16 element perfect filter, skip first two entries. */ | 1804 | /* Use the 16 element perfect filter, skip first two entries. */ |
1802 | void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16; | 1805 | void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16; |
1803 | __be16 *eaddrs; | 1806 | __be16 *eaddrs; |
1804 | for (i = 2, mclist = dev->mc_list; mclist && i < dev->mc_count + 2; | 1807 | netdev_for_each_mc_addr(mclist, dev) { |
1805 | i++, mclist = mclist->next) { | ||
1806 | eaddrs = (__be16 *)mclist->dmi_addr; | 1808 | eaddrs = (__be16 *)mclist->dmi_addr; |
1807 | writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 4; | 1809 | writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 4; |
1808 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; | 1810 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; |
1809 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 8; | 1811 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 8; |
1810 | } | 1812 | } |
1811 | eaddrs = (__be16 *)dev->dev_addr; | 1813 | eaddrs = (__be16 *)dev->dev_addr; |
1814 | i = netdev_mc_count(dev) + 2; | ||
1812 | while (i++ < 16) { | 1815 | while (i++ < 16) { |
1813 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; | 1816 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; |
1814 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; | 1817 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; |
@@ -1822,8 +1825,7 @@ static void set_rx_mode(struct net_device *dev) | |||
1822 | __le16 mc_filter[32] __attribute__ ((aligned(sizeof(long)))); /* Multicast hash filter */ | 1825 | __le16 mc_filter[32] __attribute__ ((aligned(sizeof(long)))); /* Multicast hash filter */ |
1823 | 1826 | ||
1824 | memset(mc_filter, 0, sizeof(mc_filter)); | 1827 | memset(mc_filter, 0, sizeof(mc_filter)); |
1825 | for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count; | 1828 | netdev_for_each_mc_addr(mclist, dev) { |
1826 | i++, mclist = mclist->next) { | ||
1827 | /* The chip uses the upper 9 CRC bits | 1829 | /* The chip uses the upper 9 CRC bits |
1828 | as index into the hash table */ | 1830 | as index into the hash table */ |
1829 | int bit_nr = ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 23; | 1831 | int bit_nr = ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 23; |