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/dl2k.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/dl2k.c')
-rw-r--r-- | drivers/net/dl2k.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/net/dl2k.c b/drivers/net/dl2k.c index 7fa7a907f134..b05bad829827 100644 --- a/drivers/net/dl2k.c +++ b/drivers/net/dl2k.c | |||
@@ -163,8 +163,8 @@ rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
163 | strcmp (media[card_idx], "4") == 0) { | 163 | strcmp (media[card_idx], "4") == 0) { |
164 | np->speed = 100; | 164 | np->speed = 100; |
165 | np->full_duplex = 1; | 165 | np->full_duplex = 1; |
166 | } else if (strcmp (media[card_idx], "100mbps_hd") == 0 | 166 | } else if (strcmp (media[card_idx], "100mbps_hd") == 0 || |
167 | || strcmp (media[card_idx], "3") == 0) { | 167 | strcmp (media[card_idx], "3") == 0) { |
168 | np->speed = 100; | 168 | np->speed = 100; |
169 | np->full_duplex = 0; | 169 | np->full_duplex = 0; |
170 | } else if (strcmp (media[card_idx], "10mbps_fd") == 0 || | 170 | } else if (strcmp (media[card_idx], "10mbps_fd") == 0 || |
@@ -411,7 +411,7 @@ rio_open (struct net_device *dev) | |||
411 | int i; | 411 | int i; |
412 | u16 macctrl; | 412 | u16 macctrl; |
413 | 413 | ||
414 | i = request_irq (dev->irq, &rio_interrupt, IRQF_SHARED, dev->name, dev); | 414 | i = request_irq (dev->irq, rio_interrupt, IRQF_SHARED, dev->name, dev); |
415 | if (i) | 415 | if (i) |
416 | return i; | 416 | return i; |
417 | 417 | ||
@@ -505,7 +505,8 @@ rio_timer (unsigned long data) | |||
505 | entry = np->old_rx % RX_RING_SIZE; | 505 | entry = np->old_rx % RX_RING_SIZE; |
506 | /* Dropped packets don't need to re-allocate */ | 506 | /* Dropped packets don't need to re-allocate */ |
507 | if (np->rx_skbuff[entry] == NULL) { | 507 | if (np->rx_skbuff[entry] == NULL) { |
508 | skb = netdev_alloc_skb (dev, np->rx_buf_sz); | 508 | skb = netdev_alloc_skb_ip_align(dev, |
509 | np->rx_buf_sz); | ||
509 | if (skb == NULL) { | 510 | if (skb == NULL) { |
510 | np->rx_ring[entry].fraginfo = 0; | 511 | np->rx_ring[entry].fraginfo = 0; |
511 | printk (KERN_INFO | 512 | printk (KERN_INFO |
@@ -514,8 +515,6 @@ rio_timer (unsigned long data) | |||
514 | break; | 515 | break; |
515 | } | 516 | } |
516 | np->rx_skbuff[entry] = skb; | 517 | np->rx_skbuff[entry] = skb; |
517 | /* 16 byte align the IP header */ | ||
518 | skb_reserve (skb, 2); | ||
519 | np->rx_ring[entry].fraginfo = | 518 | np->rx_ring[entry].fraginfo = |
520 | cpu_to_le64 (pci_map_single | 519 | cpu_to_le64 (pci_map_single |
521 | (np->pdev, skb->data, np->rx_buf_sz, | 520 | (np->pdev, skb->data, np->rx_buf_sz, |
@@ -576,7 +575,9 @@ alloc_list (struct net_device *dev) | |||
576 | /* Allocate the rx buffers */ | 575 | /* Allocate the rx buffers */ |
577 | for (i = 0; i < RX_RING_SIZE; i++) { | 576 | for (i = 0; i < RX_RING_SIZE; i++) { |
578 | /* Allocated fixed size of skbuff */ | 577 | /* Allocated fixed size of skbuff */ |
579 | struct sk_buff *skb = netdev_alloc_skb (dev, np->rx_buf_sz); | 578 | struct sk_buff *skb; |
579 | |||
580 | skb = netdev_alloc_skb_ip_align(dev, np->rx_buf_sz); | ||
580 | np->rx_skbuff[i] = skb; | 581 | np->rx_skbuff[i] = skb; |
581 | if (skb == NULL) { | 582 | if (skb == NULL) { |
582 | printk (KERN_ERR | 583 | printk (KERN_ERR |
@@ -584,7 +585,6 @@ alloc_list (struct net_device *dev) | |||
584 | dev->name); | 585 | dev->name); |
585 | break; | 586 | break; |
586 | } | 587 | } |
587 | skb_reserve (skb, 2); /* 16 byte align the IP header. */ | ||
588 | /* Rubicon now supports 40 bits of addressing space. */ | 588 | /* Rubicon now supports 40 bits of addressing space. */ |
589 | np->rx_ring[i].fraginfo = | 589 | np->rx_ring[i].fraginfo = |
590 | cpu_to_le64 ( pci_map_single ( | 590 | cpu_to_le64 ( pci_map_single ( |
@@ -871,13 +871,11 @@ receive_packet (struct net_device *dev) | |||
871 | PCI_DMA_FROMDEVICE); | 871 | PCI_DMA_FROMDEVICE); |
872 | skb_put (skb = np->rx_skbuff[entry], pkt_len); | 872 | skb_put (skb = np->rx_skbuff[entry], pkt_len); |
873 | np->rx_skbuff[entry] = NULL; | 873 | np->rx_skbuff[entry] = NULL; |
874 | } else if ((skb = netdev_alloc_skb(dev, pkt_len + 2))) { | 874 | } else if ((skb = netdev_alloc_skb_ip_align(dev, pkt_len))) { |
875 | pci_dma_sync_single_for_cpu(np->pdev, | 875 | pci_dma_sync_single_for_cpu(np->pdev, |
876 | desc_to_dma(desc), | 876 | desc_to_dma(desc), |
877 | np->rx_buf_sz, | 877 | np->rx_buf_sz, |
878 | PCI_DMA_FROMDEVICE); | 878 | PCI_DMA_FROMDEVICE); |
879 | /* 16 byte align the IP header */ | ||
880 | skb_reserve (skb, 2); | ||
881 | skb_copy_to_linear_data (skb, | 879 | skb_copy_to_linear_data (skb, |
882 | np->rx_skbuff[entry]->data, | 880 | np->rx_skbuff[entry]->data, |
883 | pkt_len); | 881 | pkt_len); |
@@ -907,7 +905,7 @@ receive_packet (struct net_device *dev) | |||
907 | struct sk_buff *skb; | 905 | struct sk_buff *skb; |
908 | /* Dropped packets don't need to re-allocate */ | 906 | /* Dropped packets don't need to re-allocate */ |
909 | if (np->rx_skbuff[entry] == NULL) { | 907 | if (np->rx_skbuff[entry] == NULL) { |
910 | skb = netdev_alloc_skb(dev, np->rx_buf_sz); | 908 | skb = netdev_alloc_skb_ip_align(dev, np->rx_buf_sz); |
911 | if (skb == NULL) { | 909 | if (skb == NULL) { |
912 | np->rx_ring[entry].fraginfo = 0; | 910 | np->rx_ring[entry].fraginfo = 0; |
913 | printk (KERN_INFO | 911 | printk (KERN_INFO |
@@ -917,8 +915,6 @@ receive_packet (struct net_device *dev) | |||
917 | break; | 915 | break; |
918 | } | 916 | } |
919 | np->rx_skbuff[entry] = skb; | 917 | np->rx_skbuff[entry] = skb; |
920 | /* 16 byte align the IP header */ | ||
921 | skb_reserve (skb, 2); | ||
922 | np->rx_ring[entry].fraginfo = | 918 | np->rx_ring[entry].fraginfo = |
923 | cpu_to_le64 (pci_map_single | 919 | cpu_to_le64 (pci_map_single |
924 | (np->pdev, skb->data, np->rx_buf_sz, | 920 | (np->pdev, skb->data, np->rx_buf_sz, |
@@ -1132,19 +1128,16 @@ set_multicast (struct net_device *dev) | |||
1132 | /* Receive all frames promiscuously. */ | 1128 | /* Receive all frames promiscuously. */ |
1133 | rx_mode = ReceiveAllFrames; | 1129 | rx_mode = ReceiveAllFrames; |
1134 | } else if ((dev->flags & IFF_ALLMULTI) || | 1130 | } else if ((dev->flags & IFF_ALLMULTI) || |
1135 | (dev->mc_count > multicast_filter_limit)) { | 1131 | (netdev_mc_count(dev) > multicast_filter_limit)) { |
1136 | /* Receive broadcast and multicast frames */ | 1132 | /* Receive broadcast and multicast frames */ |
1137 | rx_mode = ReceiveBroadcast | ReceiveMulticast | ReceiveUnicast; | 1133 | rx_mode = ReceiveBroadcast | ReceiveMulticast | ReceiveUnicast; |
1138 | } else if (dev->mc_count > 0) { | 1134 | } else if (!netdev_mc_empty(dev)) { |
1139 | int i; | ||
1140 | struct dev_mc_list *mclist; | 1135 | struct dev_mc_list *mclist; |
1141 | /* Receive broadcast frames and multicast frames filtering | 1136 | /* Receive broadcast frames and multicast frames filtering |
1142 | by Hashtable */ | 1137 | by Hashtable */ |
1143 | rx_mode = | 1138 | rx_mode = |
1144 | ReceiveBroadcast | ReceiveMulticastHash | ReceiveUnicast; | 1139 | ReceiveBroadcast | ReceiveMulticastHash | ReceiveUnicast; |
1145 | for (i=0, mclist = dev->mc_list; mclist && i < dev->mc_count; | 1140 | netdev_for_each_mc_addr(mclist, dev) { |
1146 | i++, mclist=mclist->next) | ||
1147 | { | ||
1148 | int bit, index = 0; | 1141 | int bit, index = 0; |
1149 | int crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr); | 1142 | int crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr); |
1150 | /* The inverted high significant 6 bits of CRC are | 1143 | /* The inverted high significant 6 bits of CRC are |