diff options
Diffstat (limited to 'drivers/net/lib8390.c')
-rw-r--r-- | drivers/net/lib8390.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/drivers/net/lib8390.c b/drivers/net/lib8390.c index 256119882b1e..56f66f485400 100644 --- a/drivers/net/lib8390.c +++ b/drivers/net/lib8390.c | |||
@@ -464,8 +464,8 @@ static irqreturn_t __ei_interrupt(int irq, void *dev_id) | |||
464 | ei_inb_p(e8390_base + EN0_ISR)); | 464 | ei_inb_p(e8390_base + EN0_ISR)); |
465 | 465 | ||
466 | /* !!Assumption!! -- we stay in page 0. Don't break this. */ | 466 | /* !!Assumption!! -- we stay in page 0. Don't break this. */ |
467 | while ((interrupts = ei_inb_p(e8390_base + EN0_ISR)) != 0 | 467 | while ((interrupts = ei_inb_p(e8390_base + EN0_ISR)) != 0 && |
468 | && ++nr_serviced < MAX_SERVICE) | 468 | ++nr_serviced < MAX_SERVICE) |
469 | { | 469 | { |
470 | if (!netif_running(dev)) { | 470 | if (!netif_running(dev)) { |
471 | printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name); | 471 | printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name); |
@@ -721,10 +721,10 @@ static void ei_receive(struct net_device *dev) | |||
721 | /* Check for bogosity warned by 3c503 book: the status byte is never | 721 | /* Check for bogosity warned by 3c503 book: the status byte is never |
722 | written. This happened a lot during testing! This code should be | 722 | written. This happened a lot during testing! This code should be |
723 | cleaned up someday. */ | 723 | cleaned up someday. */ |
724 | if (rx_frame.next != next_frame | 724 | if (rx_frame.next != next_frame && |
725 | && rx_frame.next != next_frame + 1 | 725 | rx_frame.next != next_frame + 1 && |
726 | && rx_frame.next != next_frame - num_rx_pages | 726 | rx_frame.next != next_frame - num_rx_pages && |
727 | && rx_frame.next != next_frame + 1 - num_rx_pages) { | 727 | rx_frame.next != next_frame + 1 - num_rx_pages) { |
728 | ei_local->current_page = rxing_page; | 728 | ei_local->current_page = rxing_page; |
729 | ei_outb(ei_local->current_page-1, e8390_base+EN0_BOUNDARY); | 729 | ei_outb(ei_local->current_page-1, e8390_base+EN0_BOUNDARY); |
730 | dev->stats.rx_errors++; | 730 | dev->stats.rx_errors++; |
@@ -907,15 +907,8 @@ static inline void make_mc_bits(u8 *bits, struct net_device *dev) | |||
907 | { | 907 | { |
908 | struct dev_mc_list *dmi; | 908 | struct dev_mc_list *dmi; |
909 | 909 | ||
910 | for (dmi=dev->mc_list; dmi; dmi=dmi->next) | 910 | netdev_for_each_mc_addr(dmi, dev) { |
911 | { | 911 | u32 crc = ether_crc(ETH_ALEN, dmi->dmi_addr); |
912 | u32 crc; | ||
913 | if (dmi->dmi_addrlen != ETH_ALEN) | ||
914 | { | ||
915 | printk(KERN_INFO "%s: invalid multicast address length given.\n", dev->name); | ||
916 | continue; | ||
917 | } | ||
918 | crc = ether_crc(ETH_ALEN, dmi->dmi_addr); | ||
919 | /* | 912 | /* |
920 | * The 8390 uses the 6 most significant bits of the | 913 | * The 8390 uses the 6 most significant bits of the |
921 | * CRC to index the multicast table. | 914 | * CRC to index the multicast table. |
@@ -941,7 +934,7 @@ static void do_set_multicast_list(struct net_device *dev) | |||
941 | if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) | 934 | if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) |
942 | { | 935 | { |
943 | memset(ei_local->mcfilter, 0, 8); | 936 | memset(ei_local->mcfilter, 0, 8); |
944 | if (dev->mc_list) | 937 | if (!netdev_mc_empty(dev)) |
945 | make_mc_bits(ei_local->mcfilter, dev); | 938 | make_mc_bits(ei_local->mcfilter, dev); |
946 | } | 939 | } |
947 | else | 940 | else |
@@ -975,7 +968,7 @@ static void do_set_multicast_list(struct net_device *dev) | |||
975 | 968 | ||
976 | if(dev->flags&IFF_PROMISC) | 969 | if(dev->flags&IFF_PROMISC) |
977 | ei_outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR); | 970 | ei_outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR); |
978 | else if(dev->flags&IFF_ALLMULTI || dev->mc_list) | 971 | else if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev)) |
979 | ei_outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR); | 972 | ei_outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR); |
980 | else | 973 | else |
981 | ei_outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); | 974 | ei_outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); |