aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mv643xx_eth.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/mv643xx_eth.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/mv643xx_eth.c')
-rw-r--r--drivers/net/mv643xx_eth.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index b62e61d4ca3e..8613a52ddf17 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -54,8 +54,8 @@
54#include <linux/io.h> 54#include <linux/io.h>
55#include <linux/types.h> 55#include <linux/types.h>
56#include <linux/inet_lro.h> 56#include <linux/inet_lro.h>
57#include <linux/slab.h>
57#include <asm/system.h> 58#include <asm/system.h>
58#include <linux/list.h>
59 59
60static char mv643xx_eth_driver_name[] = "mv643xx_eth"; 60static char mv643xx_eth_driver_name[] = "mv643xx_eth";
61static char mv643xx_eth_driver_version[] = "1.4"; 61static char mv643xx_eth_driver_version[] = "1.4";
@@ -656,6 +656,7 @@ static int rxq_refill(struct rx_queue *rxq, int budget)
656 struct sk_buff *skb; 656 struct sk_buff *skb;
657 int rx; 657 int rx;
658 struct rx_desc *rx_desc; 658 struct rx_desc *rx_desc;
659 int size;
659 660
660 skb = __skb_dequeue(&mp->rx_recycle); 661 skb = __skb_dequeue(&mp->rx_recycle);
661 if (skb == NULL) 662 if (skb == NULL)
@@ -678,10 +679,11 @@ static int rxq_refill(struct rx_queue *rxq, int budget)
678 679
679 rx_desc = rxq->rx_desc_area + rx; 680 rx_desc = rxq->rx_desc_area + rx;
680 681
682 size = skb->end - skb->data;
681 rx_desc->buf_ptr = dma_map_single(mp->dev->dev.parent, 683 rx_desc->buf_ptr = dma_map_single(mp->dev->dev.parent,
682 skb->data, mp->skb_size, 684 skb->data, size,
683 DMA_FROM_DEVICE); 685 DMA_FROM_DEVICE);
684 rx_desc->buf_size = mp->skb_size; 686 rx_desc->buf_size = size;
685 rxq->rx_skb[rx] = skb; 687 rxq->rx_skb[rx] = skb;
686 wmb(); 688 wmb();
687 rx_desc->cmd_sts = BUFFER_OWNED_BY_DMA | RX_ENABLE_INTERRUPT; 689 rx_desc->cmd_sts = BUFFER_OWNED_BY_DMA | RX_ENABLE_INTERRUPT;
@@ -849,7 +851,7 @@ no_csum:
849 return 0; 851 return 0;
850} 852}
851 853
852static int mv643xx_eth_xmit(struct sk_buff *skb, struct net_device *dev) 854static netdev_tx_t mv643xx_eth_xmit(struct sk_buff *skb, struct net_device *dev)
853{ 855{
854 struct mv643xx_eth_private *mp = netdev_priv(dev); 856 struct mv643xx_eth_private *mp = netdev_priv(dev);
855 int queue; 857 int queue;
@@ -1695,7 +1697,7 @@ static u32 uc_addr_filter_mask(struct net_device *dev)
1695 return 0; 1697 return 0;
1696 1698
1697 nibbles = 1 << (dev->dev_addr[5] & 0x0f); 1699 nibbles = 1 << (dev->dev_addr[5] & 0x0f);
1698 list_for_each_entry(ha, &dev->uc.list, list) { 1700 netdev_for_each_uc_addr(ha, dev) {
1699 if (memcmp(dev->dev_addr, ha->addr, 5)) 1701 if (memcmp(dev->dev_addr, ha->addr, 5))
1700 return 0; 1702 return 0;
1701 if ((dev->dev_addr[5] ^ ha->addr[5]) & 0xf0) 1703 if ((dev->dev_addr[5] ^ ha->addr[5]) & 0xf0)
@@ -1793,7 +1795,7 @@ oom:
1793 memset(mc_spec, 0, 0x100); 1795 memset(mc_spec, 0, 0x100);
1794 memset(mc_other, 0, 0x100); 1796 memset(mc_other, 0, 0x100);
1795 1797
1796 for (addr = dev->mc_list; addr != NULL; addr = addr->next) { 1798 netdev_for_each_mc_addr(addr, dev) {
1797 u8 *a = addr->da_addr; 1799 u8 *a = addr->da_addr;
1798 u32 *table; 1800 u32 *table;
1799 int entry; 1801 int entry;
@@ -1827,6 +1829,9 @@ static int mv643xx_eth_set_mac_address(struct net_device *dev, void *addr)
1827{ 1829{
1828 struct sockaddr *sa = addr; 1830 struct sockaddr *sa = addr;
1829 1831
1832 if (!is_valid_ether_addr(sa->sa_data))
1833 return -EINVAL;
1834
1830 memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN); 1835 memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
1831 1836
1832 netif_addr_lock_bh(dev); 1837 netif_addr_lock_bh(dev);
@@ -2842,6 +2847,7 @@ static const struct net_device_ops mv643xx_eth_netdev_ops = {
2842 .ndo_start_xmit = mv643xx_eth_xmit, 2847 .ndo_start_xmit = mv643xx_eth_xmit,
2843 .ndo_set_rx_mode = mv643xx_eth_set_rx_mode, 2848 .ndo_set_rx_mode = mv643xx_eth_set_rx_mode,
2844 .ndo_set_mac_address = mv643xx_eth_set_mac_address, 2849 .ndo_set_mac_address = mv643xx_eth_set_mac_address,
2850 .ndo_validate_addr = eth_validate_addr,
2845 .ndo_do_ioctl = mv643xx_eth_ioctl, 2851 .ndo_do_ioctl = mv643xx_eth_ioctl,
2846 .ndo_change_mtu = mv643xx_eth_change_mtu, 2852 .ndo_change_mtu = mv643xx_eth_change_mtu,
2847 .ndo_tx_timeout = mv643xx_eth_tx_timeout, 2853 .ndo_tx_timeout = mv643xx_eth_tx_timeout,