aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/starfire.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/starfire.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (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.c26
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
304static struct pci_device_id starfire_pci_tbl[] = { 304static 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);
1109out_rx: 1109out_rx:
1110 release_firmware(fw_rx); 1110 release_firmware(fw_rx);
1111out_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;