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/r6040.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/r6040.c')
-rw-r--r-- | drivers/net/r6040.c | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c index 8b14c6eda7c3..0298d8c1dcb6 100644 --- a/drivers/net/r6040.c +++ b/drivers/net/r6040.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <linux/timer.h> | 29 | #include <linux/timer.h> |
30 | #include <linux/errno.h> | 30 | #include <linux/errno.h> |
31 | #include <linux/ioport.h> | 31 | #include <linux/ioport.h> |
32 | #include <linux/slab.h> | ||
33 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
34 | #include <linux/pci.h> | 33 | #include <linux/pci.h> |
35 | #include <linux/netdevice.h> | 34 | #include <linux/netdevice.h> |
@@ -135,7 +134,7 @@ | |||
135 | #define RX_DESC_SIZE (RX_DCNT * sizeof(struct r6040_descriptor)) | 134 | #define RX_DESC_SIZE (RX_DCNT * sizeof(struct r6040_descriptor)) |
136 | #define TX_DESC_SIZE (TX_DCNT * sizeof(struct r6040_descriptor)) | 135 | #define TX_DESC_SIZE (TX_DCNT * sizeof(struct r6040_descriptor)) |
137 | #define MBCR_DEFAULT 0x012A /* MAC Bus Control Register */ | 136 | #define MBCR_DEFAULT 0x012A /* MAC Bus Control Register */ |
138 | #define MCAST_MAX 4 /* Max number multicast addresses to filter */ | 137 | #define MCAST_MAX 3 /* Max number multicast addresses to filter */ |
139 | 138 | ||
140 | /* Descriptor status */ | 139 | /* Descriptor status */ |
141 | #define DSC_OWNER_MAC 0x8000 /* MAC is the owner of this descriptor */ | 140 | #define DSC_OWNER_MAC 0x8000 /* MAC is the owner of this descriptor */ |
@@ -842,7 +841,7 @@ static int r6040_open(struct net_device *dev) | |||
842 | int ret; | 841 | int ret; |
843 | 842 | ||
844 | /* Request IRQ and Register interrupt handler */ | 843 | /* Request IRQ and Register interrupt handler */ |
845 | ret = request_irq(dev->irq, &r6040_interrupt, | 844 | ret = request_irq(dev->irq, r6040_interrupt, |
846 | IRQF_SHARED, dev->name, dev); | 845 | IRQF_SHARED, dev->name, dev); |
847 | if (ret) | 846 | if (ret) |
848 | return ret; | 847 | return ret; |
@@ -938,7 +937,7 @@ static void r6040_multicast_list(struct net_device *dev) | |||
938 | u16 *adrp; | 937 | u16 *adrp; |
939 | u16 reg; | 938 | u16 reg; |
940 | unsigned long flags; | 939 | unsigned long flags; |
941 | struct dev_mc_list *dmi = dev->mc_list; | 940 | struct dev_mc_list *dmi; |
942 | int i; | 941 | int i; |
943 | 942 | ||
944 | /* MAC Address */ | 943 | /* MAC Address */ |
@@ -958,26 +957,24 @@ static void r6040_multicast_list(struct net_device *dev) | |||
958 | } | 957 | } |
959 | /* Too many multicast addresses | 958 | /* Too many multicast addresses |
960 | * accept all traffic */ | 959 | * accept all traffic */ |
961 | else if ((dev->mc_count > MCAST_MAX) | 960 | else if ((netdev_mc_count(dev) > MCAST_MAX) || |
962 | || (dev->flags & IFF_ALLMULTI)) | 961 | (dev->flags & IFF_ALLMULTI)) |
963 | reg |= 0x0020; | 962 | reg |= 0x0020; |
964 | 963 | ||
965 | iowrite16(reg, ioaddr); | 964 | iowrite16(reg, ioaddr); |
966 | spin_unlock_irqrestore(&lp->lock, flags); | 965 | spin_unlock_irqrestore(&lp->lock, flags); |
967 | 966 | ||
968 | /* Build the hash table */ | 967 | /* Build the hash table */ |
969 | if (dev->mc_count > MCAST_MAX) { | 968 | if (netdev_mc_count(dev) > MCAST_MAX) { |
970 | u16 hash_table[4]; | 969 | u16 hash_table[4]; |
971 | u32 crc; | 970 | u32 crc; |
972 | 971 | ||
973 | for (i = 0; i < 4; i++) | 972 | for (i = 0; i < 4; i++) |
974 | hash_table[i] = 0; | 973 | hash_table[i] = 0; |
975 | 974 | ||
976 | for (i = 0; i < dev->mc_count; i++) { | 975 | netdev_for_each_mc_addr(dmi, dev) { |
977 | char *addrs = dmi->dmi_addr; | 976 | char *addrs = dmi->dmi_addr; |
978 | 977 | ||
979 | dmi = dmi->next; | ||
980 | |||
981 | if (!(*addrs & 1)) | 978 | if (!(*addrs & 1)) |
982 | continue; | 979 | continue; |
983 | 980 | ||
@@ -985,9 +982,6 @@ static void r6040_multicast_list(struct net_device *dev) | |||
985 | crc >>= 26; | 982 | crc >>= 26; |
986 | hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf)); | 983 | hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf)); |
987 | } | 984 | } |
988 | /* Write the index of the hash table */ | ||
989 | for (i = 0; i < 4; i++) | ||
990 | iowrite16(hash_table[i] << 14, ioaddr + MCR1); | ||
991 | /* Fill the MAC hash tables with their values */ | 985 | /* Fill the MAC hash tables with their values */ |
992 | iowrite16(hash_table[0], ioaddr + MAR0); | 986 | iowrite16(hash_table[0], ioaddr + MAR0); |
993 | iowrite16(hash_table[1], ioaddr + MAR1); | 987 | iowrite16(hash_table[1], ioaddr + MAR1); |
@@ -995,17 +989,19 @@ static void r6040_multicast_list(struct net_device *dev) | |||
995 | iowrite16(hash_table[3], ioaddr + MAR3); | 989 | iowrite16(hash_table[3], ioaddr + MAR3); |
996 | } | 990 | } |
997 | /* Multicast Address 1~4 case */ | 991 | /* Multicast Address 1~4 case */ |
998 | for (i = 0, dmi; (i < dev->mc_count) && (i < MCAST_MAX); i++) { | 992 | i = 0; |
999 | adrp = (u16 *)dmi->dmi_addr; | 993 | netdev_for_each_mc_addr(dmi, dev) { |
1000 | iowrite16(adrp[0], ioaddr + MID_1L + 8*i); | 994 | if (i < MCAST_MAX) { |
1001 | iowrite16(adrp[1], ioaddr + MID_1M + 8*i); | 995 | adrp = (u16 *) dmi->dmi_addr; |
1002 | iowrite16(adrp[2], ioaddr + MID_1H + 8*i); | 996 | iowrite16(adrp[0], ioaddr + MID_1L + 8 * i); |
1003 | dmi = dmi->next; | 997 | iowrite16(adrp[1], ioaddr + MID_1M + 8 * i); |
1004 | } | 998 | iowrite16(adrp[2], ioaddr + MID_1H + 8 * i); |
1005 | for (i = dev->mc_count; i < MCAST_MAX; i++) { | 999 | } else { |
1006 | iowrite16(0xffff, ioaddr + MID_0L + 8*i); | 1000 | iowrite16(0xffff, ioaddr + MID_1L + 8 * i); |
1007 | iowrite16(0xffff, ioaddr + MID_0M + 8*i); | 1001 | iowrite16(0xffff, ioaddr + MID_1M + 8 * i); |
1008 | iowrite16(0xffff, ioaddr + MID_0H + 8*i); | 1002 | iowrite16(0xffff, ioaddr + MID_1H + 8 * i); |
1003 | } | ||
1004 | i++; | ||
1009 | } | 1005 | } |
1010 | } | 1006 | } |
1011 | 1007 | ||
@@ -1223,7 +1219,7 @@ static void __devexit r6040_remove_one(struct pci_dev *pdev) | |||
1223 | } | 1219 | } |
1224 | 1220 | ||
1225 | 1221 | ||
1226 | static struct pci_device_id r6040_pci_tbl[] = { | 1222 | static DEFINE_PCI_DEVICE_TABLE(r6040_pci_tbl) = { |
1227 | { PCI_DEVICE(PCI_VENDOR_ID_RDC, 0x6040) }, | 1223 | { PCI_DEVICE(PCI_VENDOR_ID_RDC, 0x6040) }, |
1228 | { 0 } | 1224 | { 0 } |
1229 | }; | 1225 | }; |