diff options
Diffstat (limited to 'drivers/net/ethernet')
83 files changed, 374 insertions, 376 deletions
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c index 8153a3e0a1a4..f9b74c0a8492 100644 --- a/drivers/net/ethernet/3com/3c59x.c +++ b/drivers/net/ethernet/3com/3c59x.c | |||
@@ -1842,7 +1842,7 @@ vortex_timer(unsigned long data) | |||
1842 | ok = 1; | 1842 | ok = 1; |
1843 | } | 1843 | } |
1844 | 1844 | ||
1845 | if (!netif_carrier_ok(dev)) | 1845 | if (dev->flags & IFF_SLAVE || !netif_carrier_ok(dev)) |
1846 | next_tick = 5*HZ; | 1846 | next_tick = 5*HZ; |
1847 | 1847 | ||
1848 | if (vp->medialock) | 1848 | if (vp->medialock) |
diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c index 986019b2c849..c7ca7ec065ee 100644 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | |||
@@ -797,7 +797,7 @@ static int bcm_enet_open(struct net_device *dev) | |||
797 | if (priv->has_phy) { | 797 | if (priv->has_phy) { |
798 | /* connect to PHY */ | 798 | /* connect to PHY */ |
799 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, | 799 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, |
800 | priv->mac_id ? "1" : "0", priv->phy_id); | 800 | priv->mii_bus->id, priv->phy_id); |
801 | 801 | ||
802 | phydev = phy_connect(dev, phy_id, bcm_enet_adjust_phy_link, 0, | 802 | phydev = phy_connect(dev, phy_id, bcm_enet_adjust_phy_link, 0, |
803 | PHY_INTERFACE_MODE_MII); | 803 | PHY_INTERFACE_MODE_MII); |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 03f3935fd8c2..7aee46983be4 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | |||
@@ -523,7 +523,6 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp, | |||
523 | skb = build_skb(data); | 523 | skb = build_skb(data); |
524 | 524 | ||
525 | if (likely(skb)) { | 525 | if (likely(skb)) { |
526 | |||
527 | #ifdef BNX2X_STOP_ON_ERROR | 526 | #ifdef BNX2X_STOP_ON_ERROR |
528 | if (pad + len > fp->rx_buf_size) { | 527 | if (pad + len > fp->rx_buf_size) { |
529 | BNX2X_ERR("skb_put is about to fail... " | 528 | BNX2X_ERR("skb_put is about to fail... " |
@@ -557,7 +556,7 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp, | |||
557 | 556 | ||
558 | return; | 557 | return; |
559 | } | 558 | } |
560 | 559 | kfree(new_data); | |
561 | drop: | 560 | drop: |
562 | /* drop the packet and keep the buffer in the bin */ | 561 | /* drop the packet and keep the buffer in the bin */ |
563 | DP(NETIF_MSG_RX_STATUS, | 562 | DP(NETIF_MSG_RX_STATUS, |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 1e3f978ee6da..254521319150 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | |||
@@ -117,10 +117,6 @@ static int dropless_fc; | |||
117 | module_param(dropless_fc, int, 0); | 117 | module_param(dropless_fc, int, 0); |
118 | MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring"); | 118 | MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring"); |
119 | 119 | ||
120 | static int poll; | ||
121 | module_param(poll, int, 0); | ||
122 | MODULE_PARM_DESC(poll, " Use polling (for debug)"); | ||
123 | |||
124 | static int mrrs = -1; | 120 | static int mrrs = -1; |
125 | module_param(mrrs, int, 0); | 121 | module_param(mrrs, int, 0); |
126 | MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)"); | 122 | MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)"); |
@@ -4834,20 +4830,11 @@ void bnx2x_drv_pulse(struct bnx2x *bp) | |||
4834 | 4830 | ||
4835 | static void bnx2x_timer(unsigned long data) | 4831 | static void bnx2x_timer(unsigned long data) |
4836 | { | 4832 | { |
4837 | u8 cos; | ||
4838 | struct bnx2x *bp = (struct bnx2x *) data; | 4833 | struct bnx2x *bp = (struct bnx2x *) data; |
4839 | 4834 | ||
4840 | if (!netif_running(bp->dev)) | 4835 | if (!netif_running(bp->dev)) |
4841 | return; | 4836 | return; |
4842 | 4837 | ||
4843 | if (poll) { | ||
4844 | struct bnx2x_fastpath *fp = &bp->fp[0]; | ||
4845 | |||
4846 | for_each_cos_in_tx_queue(fp, cos) | ||
4847 | bnx2x_tx_int(bp, &fp->txdata[cos]); | ||
4848 | bnx2x_rx_int(fp, 1000); | ||
4849 | } | ||
4850 | |||
4851 | if (!BP_NOMCP(bp)) { | 4838 | if (!BP_NOMCP(bp)) { |
4852 | int mb_idx = BP_FW_MB_IDX(bp); | 4839 | int mb_idx = BP_FW_MB_IDX(bp); |
4853 | u32 drv_pulse; | 4840 | u32 drv_pulse; |
@@ -10063,7 +10050,6 @@ static void __devinit bnx2x_set_modes_bitmap(struct bnx2x *bp) | |||
10063 | static int __devinit bnx2x_init_bp(struct bnx2x *bp) | 10050 | static int __devinit bnx2x_init_bp(struct bnx2x *bp) |
10064 | { | 10051 | { |
10065 | int func; | 10052 | int func; |
10066 | int timer_interval; | ||
10067 | int rc; | 10053 | int rc; |
10068 | 10054 | ||
10069 | mutex_init(&bp->port.phy_mutex); | 10055 | mutex_init(&bp->port.phy_mutex); |
@@ -10139,8 +10125,7 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp) | |||
10139 | bp->tx_ticks = (50 / BNX2X_BTR) * BNX2X_BTR; | 10125 | bp->tx_ticks = (50 / BNX2X_BTR) * BNX2X_BTR; |
10140 | bp->rx_ticks = (25 / BNX2X_BTR) * BNX2X_BTR; | 10126 | bp->rx_ticks = (25 / BNX2X_BTR) * BNX2X_BTR; |
10141 | 10127 | ||
10142 | timer_interval = (CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ); | 10128 | bp->current_interval = CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ; |
10143 | bp->current_interval = (poll ? poll : timer_interval); | ||
10144 | 10129 | ||
10145 | init_timer(&bp->timer); | 10130 | init_timer(&bp->timer); |
10146 | bp->timer.expires = jiffies + bp->current_interval; | 10131 | bp->timer.expires = jiffies + bp->current_interval; |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c index bc0121ac291e..1adef266fcd5 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c | |||
@@ -1081,17 +1081,17 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp) | |||
1081 | estats->rx_stat_ifhcinbadoctets_lo); | 1081 | estats->rx_stat_ifhcinbadoctets_lo); |
1082 | 1082 | ||
1083 | ADD_64(fstats->total_bytes_received_hi, | 1083 | ADD_64(fstats->total_bytes_received_hi, |
1084 | tfunc->rcv_error_bytes.hi, | 1084 | le32_to_cpu(tfunc->rcv_error_bytes.hi), |
1085 | fstats->total_bytes_received_lo, | 1085 | fstats->total_bytes_received_lo, |
1086 | tfunc->rcv_error_bytes.lo); | 1086 | le32_to_cpu(tfunc->rcv_error_bytes.lo)); |
1087 | 1087 | ||
1088 | memcpy(estats, &(fstats->total_bytes_received_hi), | 1088 | memcpy(estats, &(fstats->total_bytes_received_hi), |
1089 | sizeof(struct host_func_stats) - 2*sizeof(u32)); | 1089 | sizeof(struct host_func_stats) - 2*sizeof(u32)); |
1090 | 1090 | ||
1091 | ADD_64(estats->error_bytes_received_hi, | 1091 | ADD_64(estats->error_bytes_received_hi, |
1092 | tfunc->rcv_error_bytes.hi, | 1092 | le32_to_cpu(tfunc->rcv_error_bytes.hi), |
1093 | estats->error_bytes_received_lo, | 1093 | estats->error_bytes_received_lo, |
1094 | tfunc->rcv_error_bytes.lo); | 1094 | le32_to_cpu(tfunc->rcv_error_bytes.lo)); |
1095 | 1095 | ||
1096 | ADD_64(estats->etherstatsoverrsizepkts_hi, | 1096 | ADD_64(estats->etherstatsoverrsizepkts_hi, |
1097 | estats->rx_stat_dot3statsframestoolong_hi, | 1097 | estats->rx_stat_dot3statsframestoolong_hi, |
diff --git a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c index 9b44ec8096ba..803ea32aa99d 100644 --- a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c +++ b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c | |||
@@ -946,7 +946,7 @@ bnad_get_flash_partition_by_offset(struct bnad *bnad, u32 offset, | |||
946 | 946 | ||
947 | flash_attr = kzalloc(sizeof(struct bfa_flash_attr), GFP_KERNEL); | 947 | flash_attr = kzalloc(sizeof(struct bfa_flash_attr), GFP_KERNEL); |
948 | if (!flash_attr) | 948 | if (!flash_attr) |
949 | return -ENOMEM; | 949 | return 0; |
950 | 950 | ||
951 | fcomp.bnad = bnad; | 951 | fcomp.bnad = bnad; |
952 | fcomp.comp_status = 0; | 952 | fcomp.comp_status = 0; |
@@ -958,7 +958,7 @@ bnad_get_flash_partition_by_offset(struct bnad *bnad, u32 offset, | |||
958 | if (ret != BFA_STATUS_OK) { | 958 | if (ret != BFA_STATUS_OK) { |
959 | spin_unlock_irqrestore(&bnad->bna_lock, flags); | 959 | spin_unlock_irqrestore(&bnad->bna_lock, flags); |
960 | kfree(flash_attr); | 960 | kfree(flash_attr); |
961 | goto out_err; | 961 | return 0; |
962 | } | 962 | } |
963 | spin_unlock_irqrestore(&bnad->bna_lock, flags); | 963 | spin_unlock_irqrestore(&bnad->bna_lock, flags); |
964 | wait_for_completion(&fcomp.comp); | 964 | wait_for_completion(&fcomp.comp); |
@@ -978,8 +978,6 @@ bnad_get_flash_partition_by_offset(struct bnad *bnad, u32 offset, | |||
978 | } | 978 | } |
979 | kfree(flash_attr); | 979 | kfree(flash_attr); |
980 | return flash_part; | 980 | return flash_part; |
981 | out_err: | ||
982 | return -EINVAL; | ||
983 | } | 981 | } |
984 | 982 | ||
985 | static int | 983 | static int |
@@ -1006,7 +1004,7 @@ bnad_get_eeprom(struct net_device *netdev, struct ethtool_eeprom *eeprom, | |||
1006 | /* Query the flash partition based on the offset */ | 1004 | /* Query the flash partition based on the offset */ |
1007 | flash_part = bnad_get_flash_partition_by_offset(bnad, | 1005 | flash_part = bnad_get_flash_partition_by_offset(bnad, |
1008 | eeprom->offset, &base_offset); | 1006 | eeprom->offset, &base_offset); |
1009 | if (flash_part <= 0) | 1007 | if (flash_part == 0) |
1010 | return -EFAULT; | 1008 | return -EFAULT; |
1011 | 1009 | ||
1012 | fcomp.bnad = bnad; | 1010 | fcomp.bnad = bnad; |
@@ -1048,7 +1046,7 @@ bnad_set_eeprom(struct net_device *netdev, struct ethtool_eeprom *eeprom, | |||
1048 | /* Query the flash partition based on the offset */ | 1046 | /* Query the flash partition based on the offset */ |
1049 | flash_part = bnad_get_flash_partition_by_offset(bnad, | 1047 | flash_part = bnad_get_flash_partition_by_offset(bnad, |
1050 | eeprom->offset, &base_offset); | 1048 | eeprom->offset, &base_offset); |
1051 | if (flash_part <= 0) | 1049 | if (flash_part == 0) |
1052 | return -EFAULT; | 1050 | return -EFAULT; |
1053 | 1051 | ||
1054 | fcomp.bnad = bnad; | 1052 | fcomp.bnad = bnad; |
diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c index 6db6b6ae5e9b..802e5ddef8a8 100644 --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c | |||
@@ -716,12 +716,8 @@ static int | |||
716 | be_do_flash(struct net_device *netdev, struct ethtool_flash *efl) | 716 | be_do_flash(struct net_device *netdev, struct ethtool_flash *efl) |
717 | { | 717 | { |
718 | struct be_adapter *adapter = netdev_priv(netdev); | 718 | struct be_adapter *adapter = netdev_priv(netdev); |
719 | char file_name[ETHTOOL_FLASH_MAX_FILENAME]; | ||
720 | 719 | ||
721 | file_name[ETHTOOL_FLASH_MAX_FILENAME - 1] = 0; | 720 | return be_load_fw(adapter, efl->data); |
722 | strcpy(file_name, efl->data); | ||
723 | |||
724 | return be_load_fw(adapter, file_name); | ||
725 | } | 721 | } |
726 | 722 | ||
727 | static int | 723 | static int |
diff --git a/drivers/net/ethernet/freescale/fec.c b/drivers/net/ethernet/freescale/fec.c index 7b25e9cf13f6..e92ef1bd732a 100644 --- a/drivers/net/ethernet/freescale/fec.c +++ b/drivers/net/ethernet/freescale/fec.c | |||
@@ -986,11 +986,11 @@ static int fec_enet_mii_probe(struct net_device *ndev) | |||
986 | printk(KERN_INFO | 986 | printk(KERN_INFO |
987 | "%s: no PHY, assuming direct connection to switch\n", | 987 | "%s: no PHY, assuming direct connection to switch\n", |
988 | ndev->name); | 988 | ndev->name); |
989 | strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); | 989 | strncpy(mdio_bus_id, "fixed-0", MII_BUS_ID_SIZE); |
990 | phy_id = 0; | 990 | phy_id = 0; |
991 | } | 991 | } |
992 | 992 | ||
993 | snprintf(phy_name, MII_BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id); | 993 | snprintf(phy_name, sizeof(phy_name), PHY_ID_FMT, mdio_bus_id, phy_id); |
994 | phy_dev = phy_connect(ndev, phy_name, &fec_enet_adjust_link, 0, | 994 | phy_dev = phy_connect(ndev, phy_name, &fec_enet_adjust_link, 0, |
995 | fep->phy_interface); | 995 | fep->phy_interface); |
996 | if (IS_ERR(phy_dev)) { | 996 | if (IS_ERR(phy_dev)) { |
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 669ca3800c01..d94d64b5d695 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | |||
@@ -4740,12 +4740,14 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake) | |||
4740 | e1000_setup_rctl(adapter); | 4740 | e1000_setup_rctl(adapter); |
4741 | e1000_set_rx_mode(netdev); | 4741 | e1000_set_rx_mode(netdev); |
4742 | 4742 | ||
4743 | rctl = er32(RCTL); | ||
4744 | |||
4743 | /* turn on all-multi mode if wake on multicast is enabled */ | 4745 | /* turn on all-multi mode if wake on multicast is enabled */ |
4744 | if (wufc & E1000_WUFC_MC) { | 4746 | if (wufc & E1000_WUFC_MC) |
4745 | rctl = er32(RCTL); | ||
4746 | rctl |= E1000_RCTL_MPE; | 4747 | rctl |= E1000_RCTL_MPE; |
4747 | ew32(RCTL, rctl); | 4748 | |
4748 | } | 4749 | /* enable receives in the hardware */ |
4750 | ew32(RCTL, rctl | E1000_RCTL_EN); | ||
4749 | 4751 | ||
4750 | if (hw->mac_type >= e1000_82540) { | 4752 | if (hw->mac_type >= e1000_82540) { |
4751 | ctrl = er32(CTRL); | 4753 | ctrl = er32(CTRL); |
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index e91d73c8aa4e..94be6c32fa7d 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
@@ -5012,7 +5012,8 @@ static int igb_find_enabled_vfs(struct igb_adapter *adapter) | |||
5012 | vf_devfn = pdev->devfn + 0x80; | 5012 | vf_devfn = pdev->devfn + 0x80; |
5013 | pvfdev = pci_get_device(hw->vendor_id, device_id, NULL); | 5013 | pvfdev = pci_get_device(hw->vendor_id, device_id, NULL); |
5014 | while (pvfdev) { | 5014 | while (pvfdev) { |
5015 | if (pvfdev->devfn == vf_devfn) | 5015 | if (pvfdev->devfn == vf_devfn && |
5016 | (pvfdev->bus->number >= pdev->bus->number)) | ||
5016 | vfs_found++; | 5017 | vfs_found++; |
5017 | vf_devfn += vf_stride; | 5018 | vf_devfn += vf_stride; |
5018 | pvfdev = pci_get_device(hw->vendor_id, | 5019 | pvfdev = pci_get_device(hw->vendor_id, |
diff --git a/drivers/net/ethernet/intel/igbvf/Makefile b/drivers/net/ethernet/intel/igbvf/Makefile index 0fa3db3dd8b6..044b0ad5fcb9 100644 --- a/drivers/net/ethernet/intel/igbvf/Makefile +++ b/drivers/net/ethernet/intel/igbvf/Makefile | |||
@@ -1,7 +1,7 @@ | |||
1 | ################################################################################ | 1 | ################################################################################ |
2 | # | 2 | # |
3 | # Intel(R) 82576 Virtual Function Linux driver | 3 | # Intel(R) 82576 Virtual Function Linux driver |
4 | # Copyright(c) 2009 - 2010 Intel Corporation. | 4 | # Copyright(c) 2009 - 2012 Intel Corporation. |
5 | # | 5 | # |
6 | # This program is free software; you can redistribute it and/or modify it | 6 | # This program is free software; you can redistribute it and/or modify it |
7 | # under the terms and conditions of the GNU General Public License, | 7 | # under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/defines.h b/drivers/net/ethernet/intel/igbvf/defines.h index 79f2604673fe..33f40d3474ae 100644 --- a/drivers/net/ethernet/intel/igbvf/defines.h +++ b/drivers/net/ethernet/intel/igbvf/defines.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/ethtool.c b/drivers/net/ethernet/intel/igbvf/ethtool.c index 2dba53446064..db7dce2351c2 100644 --- a/drivers/net/ethernet/intel/igbvf/ethtool.c +++ b/drivers/net/ethernet/intel/igbvf/ethtool.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 2009 - 2010 Intel Corporation. | 4 | Copyright(c) 2009 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/igbvf.h b/drivers/net/ethernet/intel/igbvf/igbvf.h index fd4a7b780fdd..2c6d87e4d3d9 100644 --- a/drivers/net/ethernet/intel/igbvf/igbvf.h +++ b/drivers/net/ethernet/intel/igbvf/igbvf.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 2009 - 2010 Intel Corporation. | 4 | Copyright(c) 2009 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/mbx.c b/drivers/net/ethernet/intel/igbvf/mbx.c index 048aae248d06..b4b65bc9fc5d 100644 --- a/drivers/net/ethernet/intel/igbvf/mbx.c +++ b/drivers/net/ethernet/intel/igbvf/mbx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 2009 - 2010 Intel Corporation. | 4 | Copyright(c) 2009 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/mbx.h b/drivers/net/ethernet/intel/igbvf/mbx.h index c2883c45d477..24370bcb0e22 100644 --- a/drivers/net/ethernet/intel/igbvf/mbx.h +++ b/drivers/net/ethernet/intel/igbvf/mbx.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c index a4b20c865759..4e9141cfe81d 100644 --- a/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/drivers/net/ethernet/intel/igbvf/netdev.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 2009 - 2010 Intel Corporation. | 4 | Copyright(c) 2009 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -53,7 +53,7 @@ const char igbvf_driver_version[] = DRV_VERSION; | |||
53 | static const char igbvf_driver_string[] = | 53 | static const char igbvf_driver_string[] = |
54 | "Intel(R) Gigabit Virtual Function Network Driver"; | 54 | "Intel(R) Gigabit Virtual Function Network Driver"; |
55 | static const char igbvf_copyright[] = | 55 | static const char igbvf_copyright[] = |
56 | "Copyright (c) 2009 - 2011 Intel Corporation."; | 56 | "Copyright (c) 2009 - 2012 Intel Corporation."; |
57 | 57 | ||
58 | static int igbvf_poll(struct napi_struct *napi, int budget); | 58 | static int igbvf_poll(struct napi_struct *napi, int budget); |
59 | static void igbvf_reset(struct igbvf_adapter *); | 59 | static void igbvf_reset(struct igbvf_adapter *); |
diff --git a/drivers/net/ethernet/intel/igbvf/regs.h b/drivers/net/ethernet/intel/igbvf/regs.h index 77e18d3d6b15..7dc6341715dc 100644 --- a/drivers/net/ethernet/intel/igbvf/regs.h +++ b/drivers/net/ethernet/intel/igbvf/regs.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 2009 - 2010 Intel Corporation. | 4 | Copyright(c) 2009 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/vf.c b/drivers/net/ethernet/intel/igbvf/vf.c index af3822f9ea9a..19551977b352 100644 --- a/drivers/net/ethernet/intel/igbvf/vf.c +++ b/drivers/net/ethernet/intel/igbvf/vf.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 2009 - 2010 Intel Corporation. | 4 | Copyright(c) 2009 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/igbvf/vf.h b/drivers/net/ethernet/intel/igbvf/vf.h index d7ed58fcd9bb..57db3c68dfcd 100644 --- a/drivers/net/ethernet/intel/igbvf/vf.h +++ b/drivers/net/ethernet/intel/igbvf/vf.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) 82576 Virtual Function Linux driver | 3 | Intel(R) 82576 Virtual Function Linux driver |
4 | Copyright(c) 2009 - 2010 Intel Corporation. | 4 | Copyright(c) 2009 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/Makefile b/drivers/net/ethernet/intel/ixgbe/Makefile index 7d7387fbdecd..7a16177a12a5 100644 --- a/drivers/net/ethernet/intel/ixgbe/Makefile +++ b/drivers/net/ethernet/intel/ixgbe/Makefile | |||
@@ -1,7 +1,7 @@ | |||
1 | ################################################################################ | 1 | ################################################################################ |
2 | # | 2 | # |
3 | # Intel 10 Gigabit PCI Express Linux driver | 3 | # Intel 10 Gigabit PCI Express Linux driver |
4 | # Copyright(c) 1999 - 2010 Intel Corporation. | 4 | # Copyright(c) 1999 - 2012 Intel Corporation. |
5 | # | 5 | # |
6 | # This program is free software; you can redistribute it and/or modify it | 6 | # This program is free software; you can redistribute it and/or modify it |
7 | # under the terms and conditions of the GNU General Public License, | 7 | # under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h index 258164d6d45a..e6aeb64105a4 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c index ef2afefb0cd4..b406c367b190 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c index 772072147bea..4e59083a3de2 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c index a3aa6333073f..383b9413292e 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h index 863f9c1f145b..2c834c46bba1 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -75,7 +75,7 @@ s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, | |||
75 | s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw); | 75 | s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw); |
76 | s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw); | 76 | s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw); |
77 | s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval); | 77 | s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval); |
78 | s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packtetbuf_num); | 78 | s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num); |
79 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw); | 79 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw); |
80 | 80 | ||
81 | s32 ixgbe_validate_mac_addr(u8 *mac_addr); | 81 | s32 ixgbe_validate_mac_addr(u8 *mac_addr); |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c index 318caf4bf623..8bfaaee5ac5b 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h index e162775064da..24333b718166 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c index fcd0e479721f..d3695edfcb8b 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.h index 2f318935561a..ba835708fcac 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c index 32cd97bc794d..888a419dc3d9 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.h index a59d5dc59d04..4dec47faeb00 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c index da31735311f1..79a92fe987b9 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -112,6 +112,8 @@ static u8 ixgbe_dcbnl_get_state(struct net_device *netdev) | |||
112 | static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state) | 112 | static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state) |
113 | { | 113 | { |
114 | u8 err = 0; | 114 | u8 err = 0; |
115 | u8 prio_tc[MAX_USER_PRIORITY] = {0}; | ||
116 | int i; | ||
115 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | 117 | struct ixgbe_adapter *adapter = netdev_priv(netdev); |
116 | 118 | ||
117 | /* Fail command if not in CEE mode */ | 119 | /* Fail command if not in CEE mode */ |
@@ -122,10 +124,15 @@ static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state) | |||
122 | if (!!state != !(adapter->flags & IXGBE_FLAG_DCB_ENABLED)) | 124 | if (!!state != !(adapter->flags & IXGBE_FLAG_DCB_ENABLED)) |
123 | return err; | 125 | return err; |
124 | 126 | ||
125 | if (state > 0) | 127 | if (state > 0) { |
126 | err = ixgbe_setup_tc(netdev, adapter->dcb_cfg.num_tcs.pg_tcs); | 128 | err = ixgbe_setup_tc(netdev, adapter->dcb_cfg.num_tcs.pg_tcs); |
127 | else | 129 | ixgbe_dcb_unpack_map(&adapter->dcb_cfg, DCB_TX_CONFIG, prio_tc); |
130 | } else { | ||
128 | err = ixgbe_setup_tc(netdev, 0); | 131 | err = ixgbe_setup_tc(netdev, 0); |
132 | } | ||
133 | |||
134 | for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) | ||
135 | netdev_set_prio_tc_map(netdev, i, prio_tc[i]); | ||
129 | 136 | ||
130 | return err; | 137 | return err; |
131 | } | 138 | } |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index da7e580f517a..a62975480e37 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -58,7 +58,7 @@ struct ixgbe_stats { | |||
58 | sizeof(((struct rtnl_link_stats64 *)0)->m), \ | 58 | sizeof(((struct rtnl_link_stats64 *)0)->m), \ |
59 | offsetof(struct rtnl_link_stats64, m) | 59 | offsetof(struct rtnl_link_stats64, m) |
60 | 60 | ||
61 | static struct ixgbe_stats ixgbe_gstrings_stats[] = { | 61 | static const struct ixgbe_stats ixgbe_gstrings_stats[] = { |
62 | {"rx_packets", IXGBE_NETDEV_STAT(rx_packets)}, | 62 | {"rx_packets", IXGBE_NETDEV_STAT(rx_packets)}, |
63 | {"tx_packets", IXGBE_NETDEV_STAT(tx_packets)}, | 63 | {"tx_packets", IXGBE_NETDEV_STAT(tx_packets)}, |
64 | {"rx_bytes", IXGBE_NETDEV_STAT(rx_bytes)}, | 64 | {"rx_bytes", IXGBE_NETDEV_STAT(rx_bytes)}, |
@@ -120,19 +120,23 @@ static struct ixgbe_stats ixgbe_gstrings_stats[] = { | |||
120 | #endif /* IXGBE_FCOE */ | 120 | #endif /* IXGBE_FCOE */ |
121 | }; | 121 | }; |
122 | 122 | ||
123 | #define IXGBE_QUEUE_STATS_LEN \ | 123 | /* ixgbe allocates num_tx_queues and num_rx_queues symmetrically so |
124 | ((((struct ixgbe_adapter *)netdev_priv(netdev))->num_tx_queues + \ | 124 | * we set the num_rx_queues to evaluate to num_tx_queues. This is |
125 | ((struct ixgbe_adapter *)netdev_priv(netdev))->num_rx_queues) * \ | 125 | * used because we do not have a good way to get the max number of |
126 | * rx queues with CONFIG_RPS disabled. | ||
127 | */ | ||
128 | #define IXGBE_NUM_RX_QUEUES netdev->num_tx_queues | ||
129 | |||
130 | #define IXGBE_QUEUE_STATS_LEN ( \ | ||
131 | (netdev->num_tx_queues + IXGBE_NUM_RX_QUEUES) * \ | ||
126 | (sizeof(struct ixgbe_queue_stats) / sizeof(u64))) | 132 | (sizeof(struct ixgbe_queue_stats) / sizeof(u64))) |
127 | #define IXGBE_GLOBAL_STATS_LEN ARRAY_SIZE(ixgbe_gstrings_stats) | 133 | #define IXGBE_GLOBAL_STATS_LEN ARRAY_SIZE(ixgbe_gstrings_stats) |
128 | #define IXGBE_PB_STATS_LEN ( \ | 134 | #define IXGBE_PB_STATS_LEN ( \ |
129 | (((struct ixgbe_adapter *)netdev_priv(netdev))->flags & \ | 135 | (sizeof(((struct ixgbe_adapter *)0)->stats.pxonrxc) + \ |
130 | IXGBE_FLAG_DCB_ENABLED) ? \ | 136 | sizeof(((struct ixgbe_adapter *)0)->stats.pxontxc) + \ |
131 | (sizeof(((struct ixgbe_adapter *)0)->stats.pxonrxc) + \ | 137 | sizeof(((struct ixgbe_adapter *)0)->stats.pxoffrxc) + \ |
132 | sizeof(((struct ixgbe_adapter *)0)->stats.pxontxc) + \ | 138 | sizeof(((struct ixgbe_adapter *)0)->stats.pxofftxc)) \ |
133 | sizeof(((struct ixgbe_adapter *)0)->stats.pxoffrxc) + \ | 139 | / sizeof(u64)) |
134 | sizeof(((struct ixgbe_adapter *)0)->stats.pxofftxc)) \ | ||
135 | / sizeof(u64) : 0) | ||
136 | #define IXGBE_STATS_LEN (IXGBE_GLOBAL_STATS_LEN + \ | 140 | #define IXGBE_STATS_LEN (IXGBE_GLOBAL_STATS_LEN + \ |
137 | IXGBE_PB_STATS_LEN + \ | 141 | IXGBE_PB_STATS_LEN + \ |
138 | IXGBE_QUEUE_STATS_LEN) | 142 | IXGBE_QUEUE_STATS_LEN) |
@@ -1078,8 +1082,15 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, | |||
1078 | data[i] = (ixgbe_gstrings_stats[i].sizeof_stat == | 1082 | data[i] = (ixgbe_gstrings_stats[i].sizeof_stat == |
1079 | sizeof(u64)) ? *(u64 *)p : *(u32 *)p; | 1083 | sizeof(u64)) ? *(u64 *)p : *(u32 *)p; |
1080 | } | 1084 | } |
1081 | for (j = 0; j < adapter->num_tx_queues; j++) { | 1085 | for (j = 0; j < IXGBE_NUM_RX_QUEUES; j++) { |
1082 | ring = adapter->tx_ring[j]; | 1086 | ring = adapter->tx_ring[j]; |
1087 | if (!ring) { | ||
1088 | data[i] = 0; | ||
1089 | data[i+1] = 0; | ||
1090 | i += 2; | ||
1091 | continue; | ||
1092 | } | ||
1093 | |||
1083 | do { | 1094 | do { |
1084 | start = u64_stats_fetch_begin_bh(&ring->syncp); | 1095 | start = u64_stats_fetch_begin_bh(&ring->syncp); |
1085 | data[i] = ring->stats.packets; | 1096 | data[i] = ring->stats.packets; |
@@ -1087,8 +1098,15 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, | |||
1087 | } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); | 1098 | } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); |
1088 | i += 2; | 1099 | i += 2; |
1089 | } | 1100 | } |
1090 | for (j = 0; j < adapter->num_rx_queues; j++) { | 1101 | for (j = 0; j < IXGBE_NUM_RX_QUEUES; j++) { |
1091 | ring = adapter->rx_ring[j]; | 1102 | ring = adapter->rx_ring[j]; |
1103 | if (!ring) { | ||
1104 | data[i] = 0; | ||
1105 | data[i+1] = 0; | ||
1106 | i += 2; | ||
1107 | continue; | ||
1108 | } | ||
1109 | |||
1092 | do { | 1110 | do { |
1093 | start = u64_stats_fetch_begin_bh(&ring->syncp); | 1111 | start = u64_stats_fetch_begin_bh(&ring->syncp); |
1094 | data[i] = ring->stats.packets; | 1112 | data[i] = ring->stats.packets; |
@@ -1096,22 +1114,20 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, | |||
1096 | } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); | 1114 | } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); |
1097 | i += 2; | 1115 | i += 2; |
1098 | } | 1116 | } |
1099 | if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) { | 1117 | |
1100 | for (j = 0; j < MAX_TX_PACKET_BUFFERS; j++) { | 1118 | for (j = 0; j < IXGBE_MAX_PACKET_BUFFERS; j++) { |
1101 | data[i++] = adapter->stats.pxontxc[j]; | 1119 | data[i++] = adapter->stats.pxontxc[j]; |
1102 | data[i++] = adapter->stats.pxofftxc[j]; | 1120 | data[i++] = adapter->stats.pxofftxc[j]; |
1103 | } | 1121 | } |
1104 | for (j = 0; j < MAX_RX_PACKET_BUFFERS; j++) { | 1122 | for (j = 0; j < IXGBE_MAX_PACKET_BUFFERS; j++) { |
1105 | data[i++] = adapter->stats.pxonrxc[j]; | 1123 | data[i++] = adapter->stats.pxonrxc[j]; |
1106 | data[i++] = adapter->stats.pxoffrxc[j]; | 1124 | data[i++] = adapter->stats.pxoffrxc[j]; |
1107 | } | ||
1108 | } | 1125 | } |
1109 | } | 1126 | } |
1110 | 1127 | ||
1111 | static void ixgbe_get_strings(struct net_device *netdev, u32 stringset, | 1128 | static void ixgbe_get_strings(struct net_device *netdev, u32 stringset, |
1112 | u8 *data) | 1129 | u8 *data) |
1113 | { | 1130 | { |
1114 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | ||
1115 | char *p = (char *)data; | 1131 | char *p = (char *)data; |
1116 | int i; | 1132 | int i; |
1117 | 1133 | ||
@@ -1126,31 +1142,29 @@ static void ixgbe_get_strings(struct net_device *netdev, u32 stringset, | |||
1126 | ETH_GSTRING_LEN); | 1142 | ETH_GSTRING_LEN); |
1127 | p += ETH_GSTRING_LEN; | 1143 | p += ETH_GSTRING_LEN; |
1128 | } | 1144 | } |
1129 | for (i = 0; i < adapter->num_tx_queues; i++) { | 1145 | for (i = 0; i < netdev->num_tx_queues; i++) { |
1130 | sprintf(p, "tx_queue_%u_packets", i); | 1146 | sprintf(p, "tx_queue_%u_packets", i); |
1131 | p += ETH_GSTRING_LEN; | 1147 | p += ETH_GSTRING_LEN; |
1132 | sprintf(p, "tx_queue_%u_bytes", i); | 1148 | sprintf(p, "tx_queue_%u_bytes", i); |
1133 | p += ETH_GSTRING_LEN; | 1149 | p += ETH_GSTRING_LEN; |
1134 | } | 1150 | } |
1135 | for (i = 0; i < adapter->num_rx_queues; i++) { | 1151 | for (i = 0; i < IXGBE_NUM_RX_QUEUES; i++) { |
1136 | sprintf(p, "rx_queue_%u_packets", i); | 1152 | sprintf(p, "rx_queue_%u_packets", i); |
1137 | p += ETH_GSTRING_LEN; | 1153 | p += ETH_GSTRING_LEN; |
1138 | sprintf(p, "rx_queue_%u_bytes", i); | 1154 | sprintf(p, "rx_queue_%u_bytes", i); |
1139 | p += ETH_GSTRING_LEN; | 1155 | p += ETH_GSTRING_LEN; |
1140 | } | 1156 | } |
1141 | if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) { | 1157 | for (i = 0; i < IXGBE_MAX_PACKET_BUFFERS; i++) { |
1142 | for (i = 0; i < MAX_TX_PACKET_BUFFERS; i++) { | 1158 | sprintf(p, "tx_pb_%u_pxon", i); |
1143 | sprintf(p, "tx_pb_%u_pxon", i); | 1159 | p += ETH_GSTRING_LEN; |
1144 | p += ETH_GSTRING_LEN; | 1160 | sprintf(p, "tx_pb_%u_pxoff", i); |
1145 | sprintf(p, "tx_pb_%u_pxoff", i); | 1161 | p += ETH_GSTRING_LEN; |
1146 | p += ETH_GSTRING_LEN; | 1162 | } |
1147 | } | 1163 | for (i = 0; i < IXGBE_MAX_PACKET_BUFFERS; i++) { |
1148 | for (i = 0; i < MAX_RX_PACKET_BUFFERS; i++) { | 1164 | sprintf(p, "rx_pb_%u_pxon", i); |
1149 | sprintf(p, "rx_pb_%u_pxon", i); | 1165 | p += ETH_GSTRING_LEN; |
1150 | p += ETH_GSTRING_LEN; | 1166 | sprintf(p, "rx_pb_%u_pxoff", i); |
1151 | sprintf(p, "rx_pb_%u_pxoff", i); | 1167 | p += ETH_GSTRING_LEN; |
1152 | p += ETH_GSTRING_LEN; | ||
1153 | } | ||
1154 | } | 1168 | } |
1155 | /* BUG_ON(p - data != IXGBE_STATS_LEN * ETH_GSTRING_LEN); */ | 1169 | /* BUG_ON(p - data != IXGBE_STATS_LEN * ETH_GSTRING_LEN); */ |
1156 | break; | 1170 | break; |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c index d18d6157dd2c..4bc794249801 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.h index 261fd62dda18..1dbed17c8107 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 1ee5d0fbb905..3dc6cef58107 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -64,7 +64,7 @@ char ixgbe_default_device_descr[] = | |||
64 | __stringify(BUILD) "-k" | 64 | __stringify(BUILD) "-k" |
65 | const char ixgbe_driver_version[] = DRV_VERSION; | 65 | const char ixgbe_driver_version[] = DRV_VERSION; |
66 | static const char ixgbe_copyright[] = | 66 | static const char ixgbe_copyright[] = |
67 | "Copyright (c) 1999-2011 Intel Corporation."; | 67 | "Copyright (c) 1999-2012 Intel Corporation."; |
68 | 68 | ||
69 | static const struct ixgbe_info *ixgbe_info_tbl[] = { | 69 | static const struct ixgbe_info *ixgbe_info_tbl[] = { |
70 | [board_82598] = &ixgbe_82598_info, | 70 | [board_82598] = &ixgbe_82598_info, |
@@ -2633,22 +2633,22 @@ static void ixgbe_configure_rscctl(struct ixgbe_adapter *adapter, | |||
2633 | /* | 2633 | /* |
2634 | * we must limit the number of descriptors so that the | 2634 | * we must limit the number of descriptors so that the |
2635 | * total size of max desc * buf_len is not greater | 2635 | * total size of max desc * buf_len is not greater |
2636 | * than 65535 | 2636 | * than 65536 |
2637 | */ | 2637 | */ |
2638 | if (ring_is_ps_enabled(ring)) { | 2638 | if (ring_is_ps_enabled(ring)) { |
2639 | #if (MAX_SKB_FRAGS > 16) | 2639 | #if (PAGE_SIZE < 8192) |
2640 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; | 2640 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; |
2641 | #elif (MAX_SKB_FRAGS > 8) | 2641 | #elif (PAGE_SIZE < 16384) |
2642 | rscctrl |= IXGBE_RSCCTL_MAXDESC_8; | 2642 | rscctrl |= IXGBE_RSCCTL_MAXDESC_8; |
2643 | #elif (MAX_SKB_FRAGS > 4) | 2643 | #elif (PAGE_SIZE < 32768) |
2644 | rscctrl |= IXGBE_RSCCTL_MAXDESC_4; | 2644 | rscctrl |= IXGBE_RSCCTL_MAXDESC_4; |
2645 | #else | 2645 | #else |
2646 | rscctrl |= IXGBE_RSCCTL_MAXDESC_1; | 2646 | rscctrl |= IXGBE_RSCCTL_MAXDESC_1; |
2647 | #endif | 2647 | #endif |
2648 | } else { | 2648 | } else { |
2649 | if (rx_buf_len < IXGBE_RXBUFFER_4K) | 2649 | if (rx_buf_len <= IXGBE_RXBUFFER_4K) |
2650 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; | 2650 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; |
2651 | else if (rx_buf_len < IXGBE_RXBUFFER_8K) | 2651 | else if (rx_buf_len <= IXGBE_RXBUFFER_8K) |
2652 | rscctrl |= IXGBE_RSCCTL_MAXDESC_8; | 2652 | rscctrl |= IXGBE_RSCCTL_MAXDESC_8; |
2653 | else | 2653 | else |
2654 | rscctrl |= IXGBE_RSCCTL_MAXDESC_4; | 2654 | rscctrl |= IXGBE_RSCCTL_MAXDESC_4; |
@@ -2830,7 +2830,7 @@ static void ixgbe_configure_virtualization(struct ixgbe_adapter *adapter) | |||
2830 | IXGBE_WRITE_REG(hw, IXGBE_VT_CTL, vmdctl | vt_reg_bits); | 2830 | IXGBE_WRITE_REG(hw, IXGBE_VT_CTL, vmdctl | vt_reg_bits); |
2831 | 2831 | ||
2832 | vf_shift = adapter->num_vfs % 32; | 2832 | vf_shift = adapter->num_vfs % 32; |
2833 | reg_offset = (adapter->num_vfs > 32) ? 1 : 0; | 2833 | reg_offset = (adapter->num_vfs >= 32) ? 1 : 0; |
2834 | 2834 | ||
2835 | /* Enable only the PF's pool for Tx/Rx */ | 2835 | /* Enable only the PF's pool for Tx/Rx */ |
2836 | IXGBE_WRITE_REG(hw, IXGBE_VFRE(reg_offset), (1 << vf_shift)); | 2836 | IXGBE_WRITE_REG(hw, IXGBE_VFRE(reg_offset), (1 << vf_shift)); |
@@ -4330,6 +4330,10 @@ static int ixgbe_set_num_queues(struct ixgbe_adapter *adapter) | |||
4330 | adapter->num_tx_queues = 1; | 4330 | adapter->num_tx_queues = 1; |
4331 | 4331 | ||
4332 | done: | 4332 | done: |
4333 | if ((adapter->netdev->reg_state == NETREG_UNREGISTERED) || | ||
4334 | (adapter->netdev->reg_state == NETREG_UNREGISTERING)) | ||
4335 | return 0; | ||
4336 | |||
4333 | /* Notify the stack of the (possibly) reduced queue counts. */ | 4337 | /* Notify the stack of the (possibly) reduced queue counts. */ |
4334 | netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); | 4338 | netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); |
4335 | return netif_set_real_num_rx_queues(adapter->netdev, | 4339 | return netif_set_real_num_rx_queues(adapter->netdev, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c index 3f725d48336d..1f3e32b576a5 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h index b239bdac38da..310bdd961075 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c index 7cf1e1f56c69..b91773551a38 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h index 197bdd13106a..cc18165b4c05 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c index cf6812dd1436..b01ecb4d2bb1 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -67,7 +67,8 @@ static int ixgbe_find_enabled_vfs(struct ixgbe_adapter *adapter) | |||
67 | vf_devfn = pdev->devfn + 0x80; | 67 | vf_devfn = pdev->devfn + 0x80; |
68 | pvfdev = pci_get_device(IXGBE_INTEL_VENDOR_ID, device_id, NULL); | 68 | pvfdev = pci_get_device(IXGBE_INTEL_VENDOR_ID, device_id, NULL); |
69 | while (pvfdev) { | 69 | while (pvfdev) { |
70 | if (pvfdev->devfn == vf_devfn) | 70 | if (pvfdev->devfn == vf_devfn && |
71 | (pvfdev->bus->number >= pdev->bus->number)) | ||
71 | vfs_found++; | 72 | vfs_found++; |
72 | vf_devfn += 2; | 73 | vf_devfn += 2; |
73 | pvfdev = pci_get_device(IXGBE_INTEL_VENDOR_ID, | 74 | pvfdev = pci_get_device(IXGBE_INTEL_VENDOR_ID, |
@@ -646,6 +647,9 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf) | |||
646 | ixgbe_ndo_set_vf_spoofchk(adapter->netdev, vf, false); | 647 | ixgbe_ndo_set_vf_spoofchk(adapter->netdev, vf, false); |
647 | retval = ixgbe_set_vf_macvlan(adapter, vf, index, | 648 | retval = ixgbe_set_vf_macvlan(adapter, vf, index, |
648 | (unsigned char *)(&msgbuf[1])); | 649 | (unsigned char *)(&msgbuf[1])); |
650 | if (retval == -ENOSPC) | ||
651 | e_warn(drv, "VF %d has requested a MACVLAN filter " | ||
652 | "but there is no space for it\n", vf); | ||
649 | break; | 653 | break; |
650 | default: | 654 | default: |
651 | e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]); | 655 | e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]); |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h index e8badab03359..2ab38d5fda92 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h index 775602ef90e5..9b95bef60970 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c index 8cc5eccfd651..f838a2be8cfb 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 10 Gigabit PCI Express Linux driver | 3 | Intel 10 Gigabit PCI Express Linux driver |
4 | Copyright(c) 1999 - 2011 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/Makefile b/drivers/net/ethernet/intel/ixgbevf/Makefile index 1f35d229e71a..4ce4c97ef5ad 100644 --- a/drivers/net/ethernet/intel/ixgbevf/Makefile +++ b/drivers/net/ethernet/intel/ixgbevf/Makefile | |||
@@ -1,7 +1,7 @@ | |||
1 | ################################################################################ | 1 | ################################################################################ |
2 | # | 2 | # |
3 | # Intel 82599 Virtual Function driver | 3 | # Intel 82599 Virtual Function driver |
4 | # Copyright(c) 1999 - 2010 Intel Corporation. | 4 | # Copyright(c) 1999 - 2012 Intel Corporation. |
5 | # | 5 | # |
6 | # This program is free software; you can redistribute it and/or modify it | 6 | # This program is free software; you can redistribute it and/or modify it |
7 | # under the terms and conditions of the GNU General Public License, | 7 | # under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/defines.h b/drivers/net/ethernet/intel/ixgbevf/defines.h index 2eb89cb94a0d..947b5c830735 100644 --- a/drivers/net/ethernet/intel/ixgbevf/defines.h +++ b/drivers/net/ethernet/intel/ixgbevf/defines.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c index c85700318147..2bfe0d1d7958 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c +++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2009 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h index 9075c1d61039..dfed420a1bf6 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index bed411bada21..e51d552410ae 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -60,7 +60,7 @@ static const char ixgbevf_driver_string[] = | |||
60 | #define DRV_VERSION "2.2.0-k" | 60 | #define DRV_VERSION "2.2.0-k" |
61 | const char ixgbevf_driver_version[] = DRV_VERSION; | 61 | const char ixgbevf_driver_version[] = DRV_VERSION; |
62 | static char ixgbevf_copyright[] = | 62 | static char ixgbevf_copyright[] = |
63 | "Copyright (c) 2009 - 2010 Intel Corporation."; | 63 | "Copyright (c) 2009 - 2012 Intel Corporation."; |
64 | 64 | ||
65 | static const struct ixgbevf_info *ixgbevf_info_tbl[] = { | 65 | static const struct ixgbevf_info *ixgbevf_info_tbl[] = { |
66 | [board_82599_vf] = &ixgbevf_82599_vf_info, | 66 | [board_82599_vf] = &ixgbevf_82599_vf_info, |
@@ -935,7 +935,11 @@ static irqreturn_t ixgbevf_msix_mbx(int irq, void *data) | |||
935 | if (msg & IXGBE_VT_MSGTYPE_NACK) | 935 | if (msg & IXGBE_VT_MSGTYPE_NACK) |
936 | pr_warn("Last Request of type %2.2x to PF Nacked\n", | 936 | pr_warn("Last Request of type %2.2x to PF Nacked\n", |
937 | msg & 0xFF); | 937 | msg & 0xFF); |
938 | goto out; | 938 | /* |
939 | * Restore the PFSTS bit in case someone is polling for a | ||
940 | * return message from the PF | ||
941 | */ | ||
942 | hw->mbx.v2p_mailbox |= IXGBE_VFMAILBOX_PFSTS; | ||
939 | } | 943 | } |
940 | 944 | ||
941 | /* | 945 | /* |
@@ -945,7 +949,7 @@ static irqreturn_t ixgbevf_msix_mbx(int irq, void *data) | |||
945 | */ | 949 | */ |
946 | if (got_ack) | 950 | if (got_ack) |
947 | hw->mbx.v2p_mailbox |= IXGBE_VFMAILBOX_PFACK; | 951 | hw->mbx.v2p_mailbox |= IXGBE_VFMAILBOX_PFACK; |
948 | out: | 952 | |
949 | return IRQ_HANDLED; | 953 | return IRQ_HANDLED; |
950 | } | 954 | } |
951 | 955 | ||
diff --git a/drivers/net/ethernet/intel/ixgbevf/mbx.c b/drivers/net/ethernet/intel/ixgbevf/mbx.c index 13532d9ba72d..9c955900fe64 100644 --- a/drivers/net/ethernet/intel/ixgbevf/mbx.c +++ b/drivers/net/ethernet/intel/ixgbevf/mbx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/mbx.h b/drivers/net/ethernet/intel/ixgbevf/mbx.h index 9d38a94a348a..cf9131c5c115 100644 --- a/drivers/net/ethernet/intel/ixgbevf/mbx.h +++ b/drivers/net/ethernet/intel/ixgbevf/mbx.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/regs.h b/drivers/net/ethernet/intel/ixgbevf/regs.h index 5e4d5e5cdf38..debd8c0e1f28 100644 --- a/drivers/net/ethernet/intel/ixgbevf/regs.h +++ b/drivers/net/ethernet/intel/ixgbevf/regs.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c index d0138d7a31a1..74be7411242a 100644 --- a/drivers/net/ethernet/intel/ixgbevf/vf.c +++ b/drivers/net/ethernet/intel/ixgbevf/vf.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -283,6 +283,17 @@ static s32 ixgbevf_set_rar_vf(struct ixgbe_hw *hw, u32 index, u8 *addr, | |||
283 | return ret_val; | 283 | return ret_val; |
284 | } | 284 | } |
285 | 285 | ||
286 | static void ixgbevf_write_msg_read_ack(struct ixgbe_hw *hw, | ||
287 | u32 *msg, u16 size) | ||
288 | { | ||
289 | struct ixgbe_mbx_info *mbx = &hw->mbx; | ||
290 | u32 retmsg[IXGBE_VFMAILBOX_SIZE]; | ||
291 | s32 retval = mbx->ops.write_posted(hw, msg, size); | ||
292 | |||
293 | if (!retval) | ||
294 | mbx->ops.read_posted(hw, retmsg, size); | ||
295 | } | ||
296 | |||
286 | /** | 297 | /** |
287 | * ixgbevf_update_mc_addr_list_vf - Update Multicast addresses | 298 | * ixgbevf_update_mc_addr_list_vf - Update Multicast addresses |
288 | * @hw: pointer to the HW structure | 299 | * @hw: pointer to the HW structure |
@@ -294,7 +305,6 @@ static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw, | |||
294 | struct net_device *netdev) | 305 | struct net_device *netdev) |
295 | { | 306 | { |
296 | struct netdev_hw_addr *ha; | 307 | struct netdev_hw_addr *ha; |
297 | struct ixgbe_mbx_info *mbx = &hw->mbx; | ||
298 | u32 msgbuf[IXGBE_VFMAILBOX_SIZE]; | 308 | u32 msgbuf[IXGBE_VFMAILBOX_SIZE]; |
299 | u16 *vector_list = (u16 *)&msgbuf[1]; | 309 | u16 *vector_list = (u16 *)&msgbuf[1]; |
300 | u32 cnt, i; | 310 | u32 cnt, i; |
@@ -321,7 +331,7 @@ static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw, | |||
321 | vector_list[i++] = ixgbevf_mta_vector(hw, ha->addr); | 331 | vector_list[i++] = ixgbevf_mta_vector(hw, ha->addr); |
322 | } | 332 | } |
323 | 333 | ||
324 | mbx->ops.write_posted(hw, msgbuf, IXGBE_VFMAILBOX_SIZE); | 334 | ixgbevf_write_msg_read_ack(hw, msgbuf, IXGBE_VFMAILBOX_SIZE); |
325 | 335 | ||
326 | return 0; | 336 | return 0; |
327 | } | 337 | } |
@@ -336,7 +346,6 @@ static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw, | |||
336 | static s32 ixgbevf_set_vfta_vf(struct ixgbe_hw *hw, u32 vlan, u32 vind, | 346 | static s32 ixgbevf_set_vfta_vf(struct ixgbe_hw *hw, u32 vlan, u32 vind, |
337 | bool vlan_on) | 347 | bool vlan_on) |
338 | { | 348 | { |
339 | struct ixgbe_mbx_info *mbx = &hw->mbx; | ||
340 | u32 msgbuf[2]; | 349 | u32 msgbuf[2]; |
341 | 350 | ||
342 | msgbuf[0] = IXGBE_VF_SET_VLAN; | 351 | msgbuf[0] = IXGBE_VF_SET_VLAN; |
@@ -344,7 +353,9 @@ static s32 ixgbevf_set_vfta_vf(struct ixgbe_hw *hw, u32 vlan, u32 vind, | |||
344 | /* Setting the 8 bit field MSG INFO to TRUE indicates "add" */ | 353 | /* Setting the 8 bit field MSG INFO to TRUE indicates "add" */ |
345 | msgbuf[0] |= vlan_on << IXGBE_VT_MSGINFO_SHIFT; | 354 | msgbuf[0] |= vlan_on << IXGBE_VT_MSGINFO_SHIFT; |
346 | 355 | ||
347 | return mbx->ops.write_posted(hw, msgbuf, 2); | 356 | ixgbevf_write_msg_read_ack(hw, msgbuf, 2); |
357 | |||
358 | return 0; | ||
348 | } | 359 | } |
349 | 360 | ||
350 | /** | 361 | /** |
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.h b/drivers/net/ethernet/intel/ixgbevf/vf.h index d556619a9212..25c951daee5d 100644 --- a/drivers/net/ethernet/intel/ixgbevf/vf.h +++ b/drivers/net/ethernet/intel/ixgbevf/vf.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel 82599 Virtual Function driver | 3 | Intel 82599 Virtual Function driver |
4 | Copyright(c) 1999 - 2010 Intel Corporation. | 4 | Copyright(c) 1999 - 2012 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c index edb9bda55d55..33947ac595c0 100644 --- a/drivers/net/ethernet/marvell/skge.c +++ b/drivers/net/ethernet/marvell/skge.c | |||
@@ -931,20 +931,17 @@ static int skge_ring_alloc(struct skge_ring *ring, void *vaddr, u32 base) | |||
931 | } | 931 | } |
932 | 932 | ||
933 | /* Allocate and setup a new buffer for receiving */ | 933 | /* Allocate and setup a new buffer for receiving */ |
934 | static int skge_rx_setup(struct pci_dev *pdev, | 934 | static void skge_rx_setup(struct skge_port *skge, struct skge_element *e, |
935 | struct skge_element *e, | 935 | struct sk_buff *skb, unsigned int bufsize) |
936 | struct sk_buff *skb, unsigned int bufsize) | ||
937 | { | 936 | { |
938 | struct skge_rx_desc *rd = e->desc; | 937 | struct skge_rx_desc *rd = e->desc; |
939 | dma_addr_t map; | 938 | u64 map; |
940 | 939 | ||
941 | map = pci_map_single(pdev, skb->data, bufsize, | 940 | map = pci_map_single(skge->hw->pdev, skb->data, bufsize, |
942 | PCI_DMA_FROMDEVICE); | 941 | PCI_DMA_FROMDEVICE); |
943 | if (pci_dma_mapping_error(pdev, map)) | ||
944 | goto mapping_error; | ||
945 | 942 | ||
946 | rd->dma_lo = lower_32_bits(map); | 943 | rd->dma_lo = map; |
947 | rd->dma_hi = upper_32_bits(map); | 944 | rd->dma_hi = map >> 32; |
948 | e->skb = skb; | 945 | e->skb = skb; |
949 | rd->csum1_start = ETH_HLEN; | 946 | rd->csum1_start = ETH_HLEN; |
950 | rd->csum2_start = ETH_HLEN; | 947 | rd->csum2_start = ETH_HLEN; |
@@ -956,13 +953,6 @@ static int skge_rx_setup(struct pci_dev *pdev, | |||
956 | rd->control = BMU_OWN | BMU_STF | BMU_IRQ_EOF | BMU_TCP_CHECK | bufsize; | 953 | rd->control = BMU_OWN | BMU_STF | BMU_IRQ_EOF | BMU_TCP_CHECK | bufsize; |
957 | dma_unmap_addr_set(e, mapaddr, map); | 954 | dma_unmap_addr_set(e, mapaddr, map); |
958 | dma_unmap_len_set(e, maplen, bufsize); | 955 | dma_unmap_len_set(e, maplen, bufsize); |
959 | return 0; | ||
960 | |||
961 | mapping_error: | ||
962 | if (net_ratelimit()) | ||
963 | dev_warn(&pdev->dev, "%s: rx mapping error\n", | ||
964 | skb->dev->name); | ||
965 | return -EIO; | ||
966 | } | 956 | } |
967 | 957 | ||
968 | /* Resume receiving using existing skb, | 958 | /* Resume receiving using existing skb, |
@@ -1024,11 +1014,7 @@ static int skge_rx_fill(struct net_device *dev) | |||
1024 | return -ENOMEM; | 1014 | return -ENOMEM; |
1025 | 1015 | ||
1026 | skb_reserve(skb, NET_IP_ALIGN); | 1016 | skb_reserve(skb, NET_IP_ALIGN); |
1027 | if (skge_rx_setup(skge->hw->pdev, e, skb, skge->rx_buf_size)) { | 1017 | skge_rx_setup(skge, e, skb, skge->rx_buf_size); |
1028 | kfree_skb(skb); | ||
1029 | return -ENOMEM; | ||
1030 | } | ||
1031 | |||
1032 | } while ((e = e->next) != ring->start); | 1018 | } while ((e = e->next) != ring->start); |
1033 | 1019 | ||
1034 | ring->to_clean = ring->start; | 1020 | ring->to_clean = ring->start; |
@@ -2743,7 +2729,7 @@ static netdev_tx_t skge_xmit_frame(struct sk_buff *skb, | |||
2743 | struct skge_tx_desc *td; | 2729 | struct skge_tx_desc *td; |
2744 | int i; | 2730 | int i; |
2745 | u32 control, len; | 2731 | u32 control, len; |
2746 | dma_addr_t map; | 2732 | u64 map; |
2747 | 2733 | ||
2748 | if (skb_padto(skb, ETH_ZLEN)) | 2734 | if (skb_padto(skb, ETH_ZLEN)) |
2749 | return NETDEV_TX_OK; | 2735 | return NETDEV_TX_OK; |
@@ -2757,14 +2743,11 @@ static netdev_tx_t skge_xmit_frame(struct sk_buff *skb, | |||
2757 | e->skb = skb; | 2743 | e->skb = skb; |
2758 | len = skb_headlen(skb); | 2744 | len = skb_headlen(skb); |
2759 | map = pci_map_single(hw->pdev, skb->data, len, PCI_DMA_TODEVICE); | 2745 | map = pci_map_single(hw->pdev, skb->data, len, PCI_DMA_TODEVICE); |
2760 | if (pci_dma_mapping_error(hw->pdev, map)) | ||
2761 | goto mapping_error; | ||
2762 | |||
2763 | dma_unmap_addr_set(e, mapaddr, map); | 2746 | dma_unmap_addr_set(e, mapaddr, map); |
2764 | dma_unmap_len_set(e, maplen, len); | 2747 | dma_unmap_len_set(e, maplen, len); |
2765 | 2748 | ||
2766 | td->dma_lo = lower_32_bits(map); | 2749 | td->dma_lo = map; |
2767 | td->dma_hi = upper_32_bits(map); | 2750 | td->dma_hi = map >> 32; |
2768 | 2751 | ||
2769 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 2752 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
2770 | const int offset = skb_checksum_start_offset(skb); | 2753 | const int offset = skb_checksum_start_offset(skb); |
@@ -2795,16 +2778,14 @@ static netdev_tx_t skge_xmit_frame(struct sk_buff *skb, | |||
2795 | 2778 | ||
2796 | map = skb_frag_dma_map(&hw->pdev->dev, frag, 0, | 2779 | map = skb_frag_dma_map(&hw->pdev->dev, frag, 0, |
2797 | skb_frag_size(frag), DMA_TO_DEVICE); | 2780 | skb_frag_size(frag), DMA_TO_DEVICE); |
2798 | if (dma_mapping_error(&hw->pdev->dev, map)) | ||
2799 | goto mapping_unwind; | ||
2800 | 2781 | ||
2801 | e = e->next; | 2782 | e = e->next; |
2802 | e->skb = skb; | 2783 | e->skb = skb; |
2803 | tf = e->desc; | 2784 | tf = e->desc; |
2804 | BUG_ON(tf->control & BMU_OWN); | 2785 | BUG_ON(tf->control & BMU_OWN); |
2805 | 2786 | ||
2806 | tf->dma_lo = lower_32_bits(map); | 2787 | tf->dma_lo = map; |
2807 | tf->dma_hi = upper_32_bits(map); | 2788 | tf->dma_hi = (u64) map >> 32; |
2808 | dma_unmap_addr_set(e, mapaddr, map); | 2789 | dma_unmap_addr_set(e, mapaddr, map); |
2809 | dma_unmap_len_set(e, maplen, skb_frag_size(frag)); | 2790 | dma_unmap_len_set(e, maplen, skb_frag_size(frag)); |
2810 | 2791 | ||
@@ -2834,28 +2815,6 @@ static netdev_tx_t skge_xmit_frame(struct sk_buff *skb, | |||
2834 | } | 2815 | } |
2835 | 2816 | ||
2836 | return NETDEV_TX_OK; | 2817 | return NETDEV_TX_OK; |
2837 | |||
2838 | mapping_unwind: | ||
2839 | /* unroll any pages that were already mapped. */ | ||
2840 | if (e != skge->tx_ring.to_use) { | ||
2841 | struct skge_element *u; | ||
2842 | |||
2843 | for (u = skge->tx_ring.to_use->next; u != e; u = u->next) | ||
2844 | pci_unmap_page(hw->pdev, dma_unmap_addr(u, mapaddr), | ||
2845 | dma_unmap_len(u, maplen), | ||
2846 | PCI_DMA_TODEVICE); | ||
2847 | e = skge->tx_ring.to_use; | ||
2848 | } | ||
2849 | /* undo the mapping for the skb header */ | ||
2850 | pci_unmap_single(hw->pdev, dma_unmap_addr(e, mapaddr), | ||
2851 | dma_unmap_len(e, maplen), | ||
2852 | PCI_DMA_TODEVICE); | ||
2853 | mapping_error: | ||
2854 | /* mapping error causes error message and packet to be discarded. */ | ||
2855 | if (net_ratelimit()) | ||
2856 | dev_warn(&hw->pdev->dev, "%s: tx mapping error\n", dev->name); | ||
2857 | dev_kfree_skb(skb); | ||
2858 | return NETDEV_TX_OK; | ||
2859 | } | 2818 | } |
2860 | 2819 | ||
2861 | 2820 | ||
@@ -3099,17 +3058,13 @@ static struct sk_buff *skge_rx_get(struct net_device *dev, | |||
3099 | if (!nskb) | 3058 | if (!nskb) |
3100 | goto resubmit; | 3059 | goto resubmit; |
3101 | 3060 | ||
3102 | if (unlikely(skge_rx_setup(skge->hw->pdev, e, nskb, skge->rx_buf_size))) { | ||
3103 | dev_kfree_skb(nskb); | ||
3104 | goto resubmit; | ||
3105 | } | ||
3106 | |||
3107 | pci_unmap_single(skge->hw->pdev, | 3061 | pci_unmap_single(skge->hw->pdev, |
3108 | dma_unmap_addr(e, mapaddr), | 3062 | dma_unmap_addr(e, mapaddr), |
3109 | dma_unmap_len(e, maplen), | 3063 | dma_unmap_len(e, maplen), |
3110 | PCI_DMA_FROMDEVICE); | 3064 | PCI_DMA_FROMDEVICE); |
3111 | skb = e->skb; | 3065 | skb = e->skb; |
3112 | prefetch(skb->data); | 3066 | prefetch(skb->data); |
3067 | skge_rx_setup(skge, e, nskb, skge->rx_buf_size); | ||
3113 | } | 3068 | } |
3114 | 3069 | ||
3115 | skb_put(skb, len); | 3070 | skb_put(skb, len); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c index 405e6ac3faf6..eaf09d4f02d0 100644 --- a/drivers/net/ethernet/mellanox/mlx4/cmd.c +++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c | |||
@@ -1616,12 +1616,12 @@ void mlx4_multi_func_cleanup(struct mlx4_dev *dev) | |||
1616 | kfree(priv->mfunc.master.slave_state[i].vlan_filter[port]); | 1616 | kfree(priv->mfunc.master.slave_state[i].vlan_filter[port]); |
1617 | } | 1617 | } |
1618 | kfree(priv->mfunc.master.slave_state); | 1618 | kfree(priv->mfunc.master.slave_state); |
1619 | iounmap(priv->mfunc.comm); | ||
1620 | dma_free_coherent(&(dev->pdev->dev), PAGE_SIZE, | ||
1621 | priv->mfunc.vhcr, | ||
1622 | priv->mfunc.vhcr_dma); | ||
1623 | priv->mfunc.vhcr = NULL; | ||
1624 | } | 1619 | } |
1620 | |||
1621 | iounmap(priv->mfunc.comm); | ||
1622 | dma_free_coherent(&(dev->pdev->dev), PAGE_SIZE, | ||
1623 | priv->mfunc.vhcr, priv->mfunc.vhcr_dma); | ||
1624 | priv->mfunc.vhcr = NULL; | ||
1625 | } | 1625 | } |
1626 | 1626 | ||
1627 | void mlx4_cmd_cleanup(struct mlx4_dev *dev) | 1627 | void mlx4_cmd_cleanup(struct mlx4_dev *dev) |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index 467ae5824875..149e60da0a32 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -892,7 +892,8 @@ void mlx4_en_free_resources(struct mlx4_en_priv *priv) | |||
892 | 892 | ||
893 | for (i = 0; i < priv->rx_ring_num; i++) { | 893 | for (i = 0; i < priv->rx_ring_num; i++) { |
894 | if (priv->rx_ring[i].rx_info) | 894 | if (priv->rx_ring[i].rx_info) |
895 | mlx4_en_destroy_rx_ring(priv, &priv->rx_ring[i]); | 895 | mlx4_en_destroy_rx_ring(priv, &priv->rx_ring[i], |
896 | priv->prof->rx_ring_size, priv->stride); | ||
896 | if (priv->rx_cq[i].buf) | 897 | if (priv->rx_cq[i].buf) |
897 | mlx4_en_destroy_cq(priv, &priv->rx_cq[i]); | 898 | mlx4_en_destroy_cq(priv, &priv->rx_cq[i]); |
898 | } | 899 | } |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index 971d4b6b8dfe..d4ad8c226b51 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c | |||
@@ -168,8 +168,12 @@ static int mlx4_en_prepare_rx_desc(struct mlx4_en_priv *priv, | |||
168 | return 0; | 168 | return 0; |
169 | 169 | ||
170 | err: | 170 | err: |
171 | while (i--) | 171 | while (i--) { |
172 | dma_addr_t dma = be64_to_cpu(rx_desc->data[i].addr); | ||
173 | pci_unmap_single(priv->mdev->pdev, dma, skb_frags[i].size, | ||
174 | PCI_DMA_FROMDEVICE); | ||
172 | put_page(skb_frags[i].page); | 175 | put_page(skb_frags[i].page); |
176 | } | ||
173 | return -ENOMEM; | 177 | return -ENOMEM; |
174 | } | 178 | } |
175 | 179 | ||
@@ -380,12 +384,12 @@ err_allocator: | |||
380 | } | 384 | } |
381 | 385 | ||
382 | void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, | 386 | void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, |
383 | struct mlx4_en_rx_ring *ring) | 387 | struct mlx4_en_rx_ring *ring, u32 size, u16 stride) |
384 | { | 388 | { |
385 | struct mlx4_en_dev *mdev = priv->mdev; | 389 | struct mlx4_en_dev *mdev = priv->mdev; |
386 | 390 | ||
387 | mlx4_en_unmap_buffer(&ring->wqres.buf); | 391 | mlx4_en_unmap_buffer(&ring->wqres.buf); |
388 | mlx4_free_hwq_res(mdev->dev, &ring->wqres, ring->buf_size + TXBB_SIZE); | 392 | mlx4_free_hwq_res(mdev->dev, &ring->wqres, size * stride + TXBB_SIZE); |
389 | vfree(ring->rx_info); | 393 | vfree(ring->rx_info); |
390 | ring->rx_info = NULL; | 394 | ring->rx_info = NULL; |
391 | } | 395 | } |
diff --git a/drivers/net/ethernet/mellanox/mlx4/eq.c b/drivers/net/ethernet/mellanox/mlx4/eq.c index 55d7bd4e210a..8fa41f3082cf 100644 --- a/drivers/net/ethernet/mellanox/mlx4/eq.c +++ b/drivers/net/ethernet/mellanox/mlx4/eq.c | |||
@@ -815,8 +815,9 @@ int mlx4_init_eq_table(struct mlx4_dev *dev) | |||
815 | int err; | 815 | int err; |
816 | int i; | 816 | int i; |
817 | 817 | ||
818 | priv->eq_table.uar_map = kcalloc(sizeof *priv->eq_table.uar_map, | 818 | priv->eq_table.uar_map = kcalloc(mlx4_num_eq_uar(dev), |
819 | mlx4_num_eq_uar(dev), GFP_KERNEL); | 819 | sizeof *priv->eq_table.uar_map, |
820 | GFP_KERNEL); | ||
820 | if (!priv->eq_table.uar_map) { | 821 | if (!priv->eq_table.uar_map) { |
821 | err = -ENOMEM; | 822 | err = -ENOMEM; |
822 | goto err_out_free; | 823 | goto err_out_free; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c index 0785d9b2a265..ca574d850b39 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mcg.c +++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c | |||
@@ -136,7 +136,7 @@ static int new_steering_entry(struct mlx4_dev *dev, u8 port, | |||
136 | u32 prot; | 136 | u32 prot; |
137 | int err; | 137 | int err; |
138 | 138 | ||
139 | s_steer = &mlx4_priv(dev)->steer[0]; | 139 | s_steer = &mlx4_priv(dev)->steer[port - 1]; |
140 | new_entry = kzalloc(sizeof *new_entry, GFP_KERNEL); | 140 | new_entry = kzalloc(sizeof *new_entry, GFP_KERNEL); |
141 | if (!new_entry) | 141 | if (!new_entry) |
142 | return -ENOMEM; | 142 | return -ENOMEM; |
@@ -220,7 +220,7 @@ static int existing_steering_entry(struct mlx4_dev *dev, u8 port, | |||
220 | struct mlx4_promisc_qp *pqp; | 220 | struct mlx4_promisc_qp *pqp; |
221 | struct mlx4_promisc_qp *dqp; | 221 | struct mlx4_promisc_qp *dqp; |
222 | 222 | ||
223 | s_steer = &mlx4_priv(dev)->steer[0]; | 223 | s_steer = &mlx4_priv(dev)->steer[port - 1]; |
224 | 224 | ||
225 | pqp = get_promisc_qp(dev, 0, steer, qpn); | 225 | pqp = get_promisc_qp(dev, 0, steer, qpn); |
226 | if (!pqp) | 226 | if (!pqp) |
@@ -265,7 +265,7 @@ static bool check_duplicate_entry(struct mlx4_dev *dev, u8 port, | |||
265 | struct mlx4_steer_index *tmp_entry, *entry = NULL; | 265 | struct mlx4_steer_index *tmp_entry, *entry = NULL; |
266 | struct mlx4_promisc_qp *dqp, *tmp_dqp; | 266 | struct mlx4_promisc_qp *dqp, *tmp_dqp; |
267 | 267 | ||
268 | s_steer = &mlx4_priv(dev)->steer[0]; | 268 | s_steer = &mlx4_priv(dev)->steer[port - 1]; |
269 | 269 | ||
270 | /* if qp is not promisc, it cannot be duplicated */ | 270 | /* if qp is not promisc, it cannot be duplicated */ |
271 | if (!get_promisc_qp(dev, 0, steer, qpn)) | 271 | if (!get_promisc_qp(dev, 0, steer, qpn)) |
@@ -306,7 +306,7 @@ static bool can_remove_steering_entry(struct mlx4_dev *dev, u8 port, | |||
306 | bool ret = false; | 306 | bool ret = false; |
307 | int i; | 307 | int i; |
308 | 308 | ||
309 | s_steer = &mlx4_priv(dev)->steer[0]; | 309 | s_steer = &mlx4_priv(dev)->steer[port - 1]; |
310 | 310 | ||
311 | mailbox = mlx4_alloc_cmd_mailbox(dev); | 311 | mailbox = mlx4_alloc_cmd_mailbox(dev); |
312 | if (IS_ERR(mailbox)) | 312 | if (IS_ERR(mailbox)) |
@@ -361,7 +361,7 @@ static int add_promisc_qp(struct mlx4_dev *dev, u8 port, | |||
361 | int err; | 361 | int err; |
362 | struct mlx4_priv *priv = mlx4_priv(dev); | 362 | struct mlx4_priv *priv = mlx4_priv(dev); |
363 | 363 | ||
364 | s_steer = &mlx4_priv(dev)->steer[0]; | 364 | s_steer = &mlx4_priv(dev)->steer[port - 1]; |
365 | 365 | ||
366 | mutex_lock(&priv->mcg_table.mutex); | 366 | mutex_lock(&priv->mcg_table.mutex); |
367 | 367 | ||
@@ -466,7 +466,7 @@ static int remove_promisc_qp(struct mlx4_dev *dev, u8 port, | |||
466 | int loc, i; | 466 | int loc, i; |
467 | int err; | 467 | int err; |
468 | 468 | ||
469 | s_steer = &mlx4_priv(dev)->steer[0]; | 469 | s_steer = &mlx4_priv(dev)->steer[port - 1]; |
470 | mutex_lock(&priv->mcg_table.mutex); | 470 | mutex_lock(&priv->mcg_table.mutex); |
471 | 471 | ||
472 | pqp = get_promisc_qp(dev, 0, steer, qpn); | 472 | pqp = get_promisc_qp(dev, 0, steer, qpn); |
@@ -1004,7 +1004,7 @@ EXPORT_SYMBOL_GPL(mlx4_multicast_promisc_remove); | |||
1004 | 1004 | ||
1005 | int mlx4_unicast_promisc_add(struct mlx4_dev *dev, u32 qpn, u8 port) | 1005 | int mlx4_unicast_promisc_add(struct mlx4_dev *dev, u32 qpn, u8 port) |
1006 | { | 1006 | { |
1007 | if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER)) | 1007 | if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_UC_STEER)) |
1008 | return 0; | 1008 | return 0; |
1009 | 1009 | ||
1010 | if (mlx4_is_mfunc(dev)) | 1010 | if (mlx4_is_mfunc(dev)) |
@@ -1016,7 +1016,7 @@ EXPORT_SYMBOL_GPL(mlx4_unicast_promisc_add); | |||
1016 | 1016 | ||
1017 | int mlx4_unicast_promisc_remove(struct mlx4_dev *dev, u32 qpn, u8 port) | 1017 | int mlx4_unicast_promisc_remove(struct mlx4_dev *dev, u32 qpn, u8 port) |
1018 | { | 1018 | { |
1019 | if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER)) | 1019 | if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_UC_STEER)) |
1020 | return 0; | 1020 | return 0; |
1021 | 1021 | ||
1022 | if (mlx4_is_mfunc(dev)) | 1022 | if (mlx4_is_mfunc(dev)) |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h index 35f08840813c..d60335f3c473 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | |||
@@ -528,7 +528,8 @@ int mlx4_en_create_rx_ring(struct mlx4_en_priv *priv, | |||
528 | struct mlx4_en_rx_ring *ring, | 528 | struct mlx4_en_rx_ring *ring, |
529 | u32 size, u16 stride); | 529 | u32 size, u16 stride); |
530 | void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, | 530 | void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, |
531 | struct mlx4_en_rx_ring *ring); | 531 | struct mlx4_en_rx_ring *ring, |
532 | u32 size, u16 stride); | ||
532 | int mlx4_en_activate_rx_rings(struct mlx4_en_priv *priv); | 533 | int mlx4_en_activate_rx_rings(struct mlx4_en_priv *priv); |
533 | void mlx4_en_deactivate_rx_ring(struct mlx4_en_priv *priv, | 534 | void mlx4_en_deactivate_rx_ring(struct mlx4_en_priv *priv, |
534 | struct mlx4_en_rx_ring *ring); | 535 | struct mlx4_en_rx_ring *ring); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c index dcd819bfb2f0..bfdb7af19e49 100644 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | |||
@@ -73,6 +73,7 @@ struct res_gid { | |||
73 | struct list_head list; | 73 | struct list_head list; |
74 | u8 gid[16]; | 74 | u8 gid[16]; |
75 | enum mlx4_protocol prot; | 75 | enum mlx4_protocol prot; |
76 | enum mlx4_steer_type steer; | ||
76 | }; | 77 | }; |
77 | 78 | ||
78 | enum res_qp_states { | 79 | enum res_qp_states { |
@@ -374,6 +375,7 @@ static struct res_common *alloc_qp_tr(int id) | |||
374 | 375 | ||
375 | ret->com.res_id = id; | 376 | ret->com.res_id = id; |
376 | ret->com.state = RES_QP_RESERVED; | 377 | ret->com.state = RES_QP_RESERVED; |
378 | ret->local_qpn = id; | ||
377 | INIT_LIST_HEAD(&ret->mcg_list); | 379 | INIT_LIST_HEAD(&ret->mcg_list); |
378 | spin_lock_init(&ret->mcg_spl); | 380 | spin_lock_init(&ret->mcg_spl); |
379 | 381 | ||
@@ -2479,7 +2481,8 @@ static struct res_gid *find_gid(struct mlx4_dev *dev, int slave, | |||
2479 | } | 2481 | } |
2480 | 2482 | ||
2481 | static int add_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, | 2483 | static int add_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, |
2482 | u8 *gid, enum mlx4_protocol prot) | 2484 | u8 *gid, enum mlx4_protocol prot, |
2485 | enum mlx4_steer_type steer) | ||
2483 | { | 2486 | { |
2484 | struct res_gid *res; | 2487 | struct res_gid *res; |
2485 | int err; | 2488 | int err; |
@@ -2495,6 +2498,7 @@ static int add_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, | |||
2495 | } else { | 2498 | } else { |
2496 | memcpy(res->gid, gid, 16); | 2499 | memcpy(res->gid, gid, 16); |
2497 | res->prot = prot; | 2500 | res->prot = prot; |
2501 | res->steer = steer; | ||
2498 | list_add_tail(&res->list, &rqp->mcg_list); | 2502 | list_add_tail(&res->list, &rqp->mcg_list); |
2499 | err = 0; | 2503 | err = 0; |
2500 | } | 2504 | } |
@@ -2504,14 +2508,15 @@ static int add_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, | |||
2504 | } | 2508 | } |
2505 | 2509 | ||
2506 | static int rem_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, | 2510 | static int rem_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, |
2507 | u8 *gid, enum mlx4_protocol prot) | 2511 | u8 *gid, enum mlx4_protocol prot, |
2512 | enum mlx4_steer_type steer) | ||
2508 | { | 2513 | { |
2509 | struct res_gid *res; | 2514 | struct res_gid *res; |
2510 | int err; | 2515 | int err; |
2511 | 2516 | ||
2512 | spin_lock_irq(&rqp->mcg_spl); | 2517 | spin_lock_irq(&rqp->mcg_spl); |
2513 | res = find_gid(dev, slave, rqp, gid); | 2518 | res = find_gid(dev, slave, rqp, gid); |
2514 | if (!res || res->prot != prot) | 2519 | if (!res || res->prot != prot || res->steer != steer) |
2515 | err = -EINVAL; | 2520 | err = -EINVAL; |
2516 | else { | 2521 | else { |
2517 | list_del(&res->list); | 2522 | list_del(&res->list); |
@@ -2538,7 +2543,7 @@ int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, | |||
2538 | int attach = vhcr->op_modifier; | 2543 | int attach = vhcr->op_modifier; |
2539 | int block_loopback = vhcr->in_modifier >> 31; | 2544 | int block_loopback = vhcr->in_modifier >> 31; |
2540 | u8 steer_type_mask = 2; | 2545 | u8 steer_type_mask = 2; |
2541 | enum mlx4_steer_type type = gid[7] & steer_type_mask; | 2546 | enum mlx4_steer_type type = (gid[7] & steer_type_mask) >> 1; |
2542 | 2547 | ||
2543 | qpn = vhcr->in_modifier & 0xffffff; | 2548 | qpn = vhcr->in_modifier & 0xffffff; |
2544 | err = get_res(dev, slave, qpn, RES_QP, &rqp); | 2549 | err = get_res(dev, slave, qpn, RES_QP, &rqp); |
@@ -2547,7 +2552,7 @@ int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, | |||
2547 | 2552 | ||
2548 | qp.qpn = qpn; | 2553 | qp.qpn = qpn; |
2549 | if (attach) { | 2554 | if (attach) { |
2550 | err = add_mcg_res(dev, slave, rqp, gid, prot); | 2555 | err = add_mcg_res(dev, slave, rqp, gid, prot, type); |
2551 | if (err) | 2556 | if (err) |
2552 | goto ex_put; | 2557 | goto ex_put; |
2553 | 2558 | ||
@@ -2556,7 +2561,7 @@ int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, | |||
2556 | if (err) | 2561 | if (err) |
2557 | goto ex_rem; | 2562 | goto ex_rem; |
2558 | } else { | 2563 | } else { |
2559 | err = rem_mcg_res(dev, slave, rqp, gid, prot); | 2564 | err = rem_mcg_res(dev, slave, rqp, gid, prot, type); |
2560 | if (err) | 2565 | if (err) |
2561 | goto ex_put; | 2566 | goto ex_put; |
2562 | err = mlx4_qp_detach_common(dev, &qp, gid, prot, type); | 2567 | err = mlx4_qp_detach_common(dev, &qp, gid, prot, type); |
@@ -2567,7 +2572,7 @@ int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, | |||
2567 | 2572 | ||
2568 | ex_rem: | 2573 | ex_rem: |
2569 | /* ignore error return below, already in error */ | 2574 | /* ignore error return below, already in error */ |
2570 | err1 = rem_mcg_res(dev, slave, rqp, gid, prot); | 2575 | err1 = rem_mcg_res(dev, slave, rqp, gid, prot, type); |
2571 | ex_put: | 2576 | ex_put: |
2572 | put_res(dev, slave, qpn, RES_QP); | 2577 | put_res(dev, slave, qpn, RES_QP); |
2573 | 2578 | ||
@@ -2606,7 +2611,7 @@ static void detach_qp(struct mlx4_dev *dev, int slave, struct res_qp *rqp) | |||
2606 | list_for_each_entry_safe(rgid, tmp, &rqp->mcg_list, list) { | 2611 | list_for_each_entry_safe(rgid, tmp, &rqp->mcg_list, list) { |
2607 | qp.qpn = rqp->local_qpn; | 2612 | qp.qpn = rqp->local_qpn; |
2608 | err = mlx4_qp_detach_common(dev, &qp, rgid->gid, rgid->prot, | 2613 | err = mlx4_qp_detach_common(dev, &qp, rgid->gid, rgid->prot, |
2609 | MLX4_MC_STEER); | 2614 | rgid->steer); |
2610 | list_del(&rgid->list); | 2615 | list_del(&rgid->list); |
2611 | kfree(rgid); | 2616 | kfree(rgid); |
2612 | } | 2617 | } |
diff --git a/drivers/net/ethernet/micrel/Kconfig b/drivers/net/ethernet/micrel/Kconfig index 1ea811cf515b..fe42fc00d8d3 100644 --- a/drivers/net/ethernet/micrel/Kconfig +++ b/drivers/net/ethernet/micrel/Kconfig | |||
@@ -42,7 +42,6 @@ config KS8851 | |||
42 | select NET_CORE | 42 | select NET_CORE |
43 | select MII | 43 | select MII |
44 | select CRC32 | 44 | select CRC32 |
45 | select MISC_DEVICES | ||
46 | select EEPROM_93CX6 | 45 | select EEPROM_93CX6 |
47 | ---help--- | 46 | ---help--- |
48 | SPI driver for Micrel KS8851 SPI attached network chip. | 47 | SPI driver for Micrel KS8851 SPI attached network chip. |
diff --git a/drivers/net/ethernet/micrel/ks8851.c b/drivers/net/ethernet/micrel/ks8851.c index 6b35e7da9a9c..0c3e4005224d 100644 --- a/drivers/net/ethernet/micrel/ks8851.c +++ b/drivers/net/ethernet/micrel/ks8851.c | |||
@@ -583,7 +583,7 @@ static void ks8851_rx_pkts(struct ks8851_net *ks) | |||
583 | ks8851_dbg_dumpkkt(ks, rxpkt); | 583 | ks8851_dbg_dumpkkt(ks, rxpkt); |
584 | 584 | ||
585 | skb->protocol = eth_type_trans(skb, ks->netdev); | 585 | skb->protocol = eth_type_trans(skb, ks->netdev); |
586 | netif_rx(skb); | 586 | netif_rx_ni(skb); |
587 | 587 | ||
588 | ks->netdev->stats.rx_packets++; | 588 | ks->netdev->stats.rx_packets++; |
589 | ks->netdev->stats.rx_bytes += rxlen; | 589 | ks->netdev->stats.rx_bytes += rxlen; |
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c index e58e78e5c930..231176fcd2ba 100644 --- a/drivers/net/ethernet/micrel/ks8851_mll.c +++ b/drivers/net/ethernet/micrel/ks8851_mll.c | |||
@@ -394,7 +394,6 @@ union ks_tx_hdr { | |||
394 | * @msg_enable : The message flags controlling driver output (see ethtool). | 394 | * @msg_enable : The message flags controlling driver output (see ethtool). |
395 | * @frame_cnt : number of frames received. | 395 | * @frame_cnt : number of frames received. |
396 | * @bus_width : i/o bus width. | 396 | * @bus_width : i/o bus width. |
397 | * @irq : irq number assigned to this device. | ||
398 | * @rc_rxqcr : Cached copy of KS_RXQCR. | 397 | * @rc_rxqcr : Cached copy of KS_RXQCR. |
399 | * @rc_txcr : Cached copy of KS_TXCR. | 398 | * @rc_txcr : Cached copy of KS_TXCR. |
400 | * @rc_ier : Cached copy of KS_IER. | 399 | * @rc_ier : Cached copy of KS_IER. |
@@ -441,7 +440,6 @@ struct ks_net { | |||
441 | u32 msg_enable; | 440 | u32 msg_enable; |
442 | u32 frame_cnt; | 441 | u32 frame_cnt; |
443 | int bus_width; | 442 | int bus_width; |
444 | int irq; | ||
445 | 443 | ||
446 | u16 rc_rxqcr; | 444 | u16 rc_rxqcr; |
447 | u16 rc_txcr; | 445 | u16 rc_txcr; |
@@ -907,10 +905,10 @@ static int ks_net_open(struct net_device *netdev) | |||
907 | netif_dbg(ks, ifup, ks->netdev, "%s - entry\n", __func__); | 905 | netif_dbg(ks, ifup, ks->netdev, "%s - entry\n", __func__); |
908 | 906 | ||
909 | /* reset the HW */ | 907 | /* reset the HW */ |
910 | err = request_irq(ks->irq, ks_irq, KS_INT_FLAGS, DRV_NAME, netdev); | 908 | err = request_irq(netdev->irq, ks_irq, KS_INT_FLAGS, DRV_NAME, netdev); |
911 | 909 | ||
912 | if (err) { | 910 | if (err) { |
913 | pr_err("Failed to request IRQ: %d: %d\n", ks->irq, err); | 911 | pr_err("Failed to request IRQ: %d: %d\n", netdev->irq, err); |
914 | return err; | 912 | return err; |
915 | } | 913 | } |
916 | 914 | ||
@@ -955,7 +953,7 @@ static int ks_net_stop(struct net_device *netdev) | |||
955 | 953 | ||
956 | /* set powermode to soft power down to save power */ | 954 | /* set powermode to soft power down to save power */ |
957 | ks_set_powermode(ks, PMECR_PM_SOFTDOWN); | 955 | ks_set_powermode(ks, PMECR_PM_SOFTDOWN); |
958 | free_irq(ks->irq, netdev); | 956 | free_irq(netdev->irq, netdev); |
959 | mutex_unlock(&ks->lock); | 957 | mutex_unlock(&ks->lock); |
960 | return 0; | 958 | return 0; |
961 | } | 959 | } |
@@ -1545,10 +1543,10 @@ static int __devinit ks8851_probe(struct platform_device *pdev) | |||
1545 | if (!ks->hw_addr_cmd) | 1543 | if (!ks->hw_addr_cmd) |
1546 | goto err_ioremap1; | 1544 | goto err_ioremap1; |
1547 | 1545 | ||
1548 | ks->irq = platform_get_irq(pdev, 0); | 1546 | netdev->irq = platform_get_irq(pdev, 0); |
1549 | 1547 | ||
1550 | if (ks->irq < 0) { | 1548 | if (netdev->irq < 0) { |
1551 | err = ks->irq; | 1549 | err = netdev->irq; |
1552 | goto err_get_irq; | 1550 | goto err_get_irq; |
1553 | } | 1551 | } |
1554 | 1552 | ||
diff --git a/drivers/net/ethernet/octeon/octeon_mgmt.c b/drivers/net/ethernet/octeon/octeon_mgmt.c index 212f43b308a3..cd827ff4a021 100644 --- a/drivers/net/ethernet/octeon/octeon_mgmt.c +++ b/drivers/net/ethernet/octeon/octeon_mgmt.c | |||
@@ -670,7 +670,7 @@ static void octeon_mgmt_adjust_link(struct net_device *netdev) | |||
670 | static int octeon_mgmt_init_phy(struct net_device *netdev) | 670 | static int octeon_mgmt_init_phy(struct net_device *netdev) |
671 | { | 671 | { |
672 | struct octeon_mgmt *p = netdev_priv(netdev); | 672 | struct octeon_mgmt *p = netdev_priv(netdev); |
673 | char phy_id[20]; | 673 | char phy_id[MII_BUS_ID_SIZE + 3]; |
674 | 674 | ||
675 | if (octeon_is_simulation()) { | 675 | if (octeon_is_simulation()) { |
676 | /* No PHYs in the simulator. */ | 676 | /* No PHYs in the simulator. */ |
@@ -678,7 +678,7 @@ static int octeon_mgmt_init_phy(struct net_device *netdev) | |||
678 | return 0; | 678 | return 0; |
679 | } | 679 | } |
680 | 680 | ||
681 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, "0", p->port); | 681 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, "mdio-octeon-0", p->port); |
682 | 682 | ||
683 | p->phydev = phy_connect(netdev, phy_id, octeon_mgmt_adjust_link, 0, | 683 | p->phydev = phy_connect(netdev, phy_id, octeon_mgmt_adjust_link, 0, |
684 | PHY_INTERFACE_MODE_MII); | 684 | PHY_INTERFACE_MODE_MII); |
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index 813d41c4a845..87b650131774 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/pm_runtime.h> | 38 | #include <linux/pm_runtime.h> |
39 | #include <linux/slab.h> | 39 | #include <linux/slab.h> |
40 | #include <linux/ethtool.h> | 40 | #include <linux/ethtool.h> |
41 | #include <linux/if_vlan.h> | ||
41 | #include <linux/sh_eth.h> | 42 | #include <linux/sh_eth.h> |
42 | 43 | ||
43 | #include "sh_eth.h" | 44 | #include "sh_eth.h" |
@@ -817,7 +818,8 @@ static int sh_eth_dev_init(struct net_device *ndev) | |||
817 | sh_eth_write(ndev, 0, TRIMD); | 818 | sh_eth_write(ndev, 0, TRIMD); |
818 | 819 | ||
819 | /* Recv frame limit set register */ | 820 | /* Recv frame limit set register */ |
820 | sh_eth_write(ndev, RFLR_VALUE, RFLR); | 821 | sh_eth_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, |
822 | RFLR); | ||
821 | 823 | ||
822 | sh_eth_write(ndev, sh_eth_read(ndev, EESR), EESR); | 824 | sh_eth_write(ndev, sh_eth_read(ndev, EESR), EESR); |
823 | sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); | 825 | sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); |
diff --git a/drivers/net/ethernet/renesas/sh_eth.h b/drivers/net/ethernet/renesas/sh_eth.h index 47877b13ffad..cdbd844662a7 100644 --- a/drivers/net/ethernet/renesas/sh_eth.h +++ b/drivers/net/ethernet/renesas/sh_eth.h | |||
@@ -575,9 +575,6 @@ enum RPADIR_BIT { | |||
575 | RPADIR_PADR = 0x0003f, | 575 | RPADIR_PADR = 0x0003f, |
576 | }; | 576 | }; |
577 | 577 | ||
578 | /* RFLR */ | ||
579 | #define RFLR_VALUE 0x1000 | ||
580 | |||
581 | /* FDR */ | 578 | /* FDR */ |
582 | #define DEFAULT_FDR_INIT 0x00000707 | 579 | #define DEFAULT_FDR_INIT 0x00000707 |
583 | 580 | ||
diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h index d0b814ef0675..0319d640f728 100644 --- a/drivers/net/ethernet/stmicro/stmmac/common.h +++ b/drivers/net/ethernet/stmicro/stmmac/common.h | |||
@@ -67,6 +67,7 @@ struct stmmac_extra_stats { | |||
67 | unsigned long ipc_csum_error; | 67 | unsigned long ipc_csum_error; |
68 | unsigned long rx_collision; | 68 | unsigned long rx_collision; |
69 | unsigned long rx_crc; | 69 | unsigned long rx_crc; |
70 | unsigned long dribbling_bit; | ||
70 | unsigned long rx_length; | 71 | unsigned long rx_length; |
71 | unsigned long rx_mii; | 72 | unsigned long rx_mii; |
72 | unsigned long rx_multicast; | 73 | unsigned long rx_multicast; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c index d87976364ec5..ad1b627f8ec2 100644 --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c | |||
@@ -201,7 +201,7 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x, | |||
201 | 201 | ||
202 | if (unlikely(p->des01.erx.dribbling)) { | 202 | if (unlikely(p->des01.erx.dribbling)) { |
203 | CHIP_DBG(KERN_ERR "GMAC RX: dribbling error\n"); | 203 | CHIP_DBG(KERN_ERR "GMAC RX: dribbling error\n"); |
204 | ret = discard_frame; | 204 | x->dribbling_bit++; |
205 | } | 205 | } |
206 | if (unlikely(p->des01.erx.sa_filter_fail)) { | 206 | if (unlikely(p->des01.erx.sa_filter_fail)) { |
207 | CHIP_DBG(KERN_ERR "GMAC RX : Source Address filter fail\n"); | 207 | CHIP_DBG(KERN_ERR "GMAC RX : Source Address filter fail\n"); |
diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c index fda5d2b31d3a..25953bb45a73 100644 --- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c +++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c | |||
@@ -104,7 +104,7 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x, | |||
104 | ret = discard_frame; | 104 | ret = discard_frame; |
105 | } | 105 | } |
106 | if (unlikely(p->des01.rx.dribbling)) | 106 | if (unlikely(p->des01.rx.dribbling)) |
107 | ret = discard_frame; | 107 | x->dribbling_bit++; |
108 | 108 | ||
109 | if (unlikely(p->des01.rx.length_error)) { | 109 | if (unlikely(p->des01.rx.length_error)) { |
110 | x->rx_length++; | 110 | x->rx_length++; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h index 120740020e2c..b4b095fdcf29 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h | |||
@@ -21,7 +21,7 @@ | |||
21 | *******************************************************************************/ | 21 | *******************************************************************************/ |
22 | 22 | ||
23 | #define STMMAC_RESOURCE_NAME "stmmaceth" | 23 | #define STMMAC_RESOURCE_NAME "stmmaceth" |
24 | #define DRV_MODULE_VERSION "Dec_2011" | 24 | #define DRV_MODULE_VERSION "Feb_2012" |
25 | #include <linux/stmmac.h> | 25 | #include <linux/stmmac.h> |
26 | #include <linux/phy.h> | 26 | #include <linux/phy.h> |
27 | #include "common.h" | 27 | #include "common.h" |
@@ -97,4 +97,5 @@ int stmmac_resume(struct net_device *ndev); | |||
97 | int stmmac_suspend(struct net_device *ndev); | 97 | int stmmac_suspend(struct net_device *ndev); |
98 | int stmmac_dvr_remove(struct net_device *ndev); | 98 | int stmmac_dvr_remove(struct net_device *ndev); |
99 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, | 99 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, |
100 | struct plat_stmmacenet_data *plat_dat); | 100 | struct plat_stmmacenet_data *plat_dat, |
101 | void __iomem *addr); | ||
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c index 9573303a706b..f98e1511660f 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | |||
@@ -47,23 +47,25 @@ struct stmmac_stats { | |||
47 | offsetof(struct stmmac_priv, xstats.m)} | 47 | offsetof(struct stmmac_priv, xstats.m)} |
48 | 48 | ||
49 | static const struct stmmac_stats stmmac_gstrings_stats[] = { | 49 | static const struct stmmac_stats stmmac_gstrings_stats[] = { |
50 | /* Transmit errors */ | ||
50 | STMMAC_STAT(tx_underflow), | 51 | STMMAC_STAT(tx_underflow), |
51 | STMMAC_STAT(tx_carrier), | 52 | STMMAC_STAT(tx_carrier), |
52 | STMMAC_STAT(tx_losscarrier), | 53 | STMMAC_STAT(tx_losscarrier), |
53 | STMMAC_STAT(vlan_tag), | 54 | STMMAC_STAT(vlan_tag), |
54 | STMMAC_STAT(tx_deferred), | 55 | STMMAC_STAT(tx_deferred), |
55 | STMMAC_STAT(tx_vlan), | 56 | STMMAC_STAT(tx_vlan), |
56 | STMMAC_STAT(rx_vlan), | ||
57 | STMMAC_STAT(tx_jabber), | 57 | STMMAC_STAT(tx_jabber), |
58 | STMMAC_STAT(tx_frame_flushed), | 58 | STMMAC_STAT(tx_frame_flushed), |
59 | STMMAC_STAT(tx_payload_error), | 59 | STMMAC_STAT(tx_payload_error), |
60 | STMMAC_STAT(tx_ip_header_error), | 60 | STMMAC_STAT(tx_ip_header_error), |
61 | /* Receive errors */ | ||
61 | STMMAC_STAT(rx_desc), | 62 | STMMAC_STAT(rx_desc), |
62 | STMMAC_STAT(sa_filter_fail), | 63 | STMMAC_STAT(sa_filter_fail), |
63 | STMMAC_STAT(overflow_error), | 64 | STMMAC_STAT(overflow_error), |
64 | STMMAC_STAT(ipc_csum_error), | 65 | STMMAC_STAT(ipc_csum_error), |
65 | STMMAC_STAT(rx_collision), | 66 | STMMAC_STAT(rx_collision), |
66 | STMMAC_STAT(rx_crc), | 67 | STMMAC_STAT(rx_crc), |
68 | STMMAC_STAT(dribbling_bit), | ||
67 | STMMAC_STAT(rx_length), | 69 | STMMAC_STAT(rx_length), |
68 | STMMAC_STAT(rx_mii), | 70 | STMMAC_STAT(rx_mii), |
69 | STMMAC_STAT(rx_multicast), | 71 | STMMAC_STAT(rx_multicast), |
@@ -73,6 +75,8 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = { | |||
73 | STMMAC_STAT(sa_rx_filter_fail), | 75 | STMMAC_STAT(sa_rx_filter_fail), |
74 | STMMAC_STAT(rx_missed_cntr), | 76 | STMMAC_STAT(rx_missed_cntr), |
75 | STMMAC_STAT(rx_overflow_cntr), | 77 | STMMAC_STAT(rx_overflow_cntr), |
78 | STMMAC_STAT(rx_vlan), | ||
79 | /* Tx/Rx IRQ errors */ | ||
76 | STMMAC_STAT(tx_undeflow_irq), | 80 | STMMAC_STAT(tx_undeflow_irq), |
77 | STMMAC_STAT(tx_process_stopped_irq), | 81 | STMMAC_STAT(tx_process_stopped_irq), |
78 | STMMAC_STAT(tx_jabber_irq), | 82 | STMMAC_STAT(tx_jabber_irq), |
@@ -82,6 +86,7 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = { | |||
82 | STMMAC_STAT(rx_watchdog_irq), | 86 | STMMAC_STAT(rx_watchdog_irq), |
83 | STMMAC_STAT(tx_early_irq), | 87 | STMMAC_STAT(tx_early_irq), |
84 | STMMAC_STAT(fatal_bus_error_irq), | 88 | STMMAC_STAT(fatal_bus_error_irq), |
89 | /* Extra info */ | ||
85 | STMMAC_STAT(threshold), | 90 | STMMAC_STAT(threshold), |
86 | STMMAC_STAT(tx_pkt_n), | 91 | STMMAC_STAT(tx_pkt_n), |
87 | STMMAC_STAT(rx_pkt_n), | 92 | STMMAC_STAT(rx_pkt_n), |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 96fa2da30763..6ee593a55a64 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
@@ -241,7 +241,7 @@ static void stmmac_adjust_link(struct net_device *dev) | |||
241 | case 1000: | 241 | case 1000: |
242 | if (likely(priv->plat->has_gmac)) | 242 | if (likely(priv->plat->has_gmac)) |
243 | ctrl &= ~priv->hw->link.port; | 243 | ctrl &= ~priv->hw->link.port; |
244 | stmmac_hw_fix_mac_speed(priv); | 244 | stmmac_hw_fix_mac_speed(priv); |
245 | break; | 245 | break; |
246 | case 100: | 246 | case 100: |
247 | case 10: | 247 | case 10: |
@@ -785,7 +785,7 @@ static u32 stmmac_get_synopsys_id(struct stmmac_priv *priv) | |||
785 | u32 uid = ((hwid & 0x0000ff00) >> 8); | 785 | u32 uid = ((hwid & 0x0000ff00) >> 8); |
786 | u32 synid = (hwid & 0x000000ff); | 786 | u32 synid = (hwid & 0x000000ff); |
787 | 787 | ||
788 | pr_info("STMMAC - user ID: 0x%x, Synopsys ID: 0x%x\n", | 788 | pr_info("stmmac - user ID: 0x%x, Synopsys ID: 0x%x\n", |
789 | uid, synid); | 789 | uid, synid); |
790 | 790 | ||
791 | return synid; | 791 | return synid; |
@@ -869,38 +869,6 @@ static int stmmac_get_hw_features(struct stmmac_priv *priv) | |||
869 | return hw_cap; | 869 | return hw_cap; |
870 | } | 870 | } |
871 | 871 | ||
872 | /** | ||
873 | * stmmac_mac_device_setup | ||
874 | * @dev : device pointer | ||
875 | * Description: this is to attach the GMAC or MAC 10/100 | ||
876 | * main core structures that will be completed during the | ||
877 | * open step. | ||
878 | */ | ||
879 | static int stmmac_mac_device_setup(struct net_device *dev) | ||
880 | { | ||
881 | struct stmmac_priv *priv = netdev_priv(dev); | ||
882 | |||
883 | struct mac_device_info *device; | ||
884 | |||
885 | if (priv->plat->has_gmac) | ||
886 | device = dwmac1000_setup(priv->ioaddr); | ||
887 | else | ||
888 | device = dwmac100_setup(priv->ioaddr); | ||
889 | |||
890 | if (!device) | ||
891 | return -ENOMEM; | ||
892 | |||
893 | priv->hw = device; | ||
894 | priv->hw->ring = &ring_mode_ops; | ||
895 | |||
896 | if (device_can_wakeup(priv->device)) { | ||
897 | priv->wolopts = WAKE_MAGIC; /* Magic Frame as default */ | ||
898 | enable_irq_wake(priv->wol_irq); | ||
899 | } | ||
900 | |||
901 | return 0; | ||
902 | } | ||
903 | |||
904 | static void stmmac_check_ether_addr(struct stmmac_priv *priv) | 872 | static void stmmac_check_ether_addr(struct stmmac_priv *priv) |
905 | { | 873 | { |
906 | /* verify if the MAC address is valid, in case of failures it | 874 | /* verify if the MAC address is valid, in case of failures it |
@@ -930,20 +898,8 @@ static int stmmac_open(struct net_device *dev) | |||
930 | struct stmmac_priv *priv = netdev_priv(dev); | 898 | struct stmmac_priv *priv = netdev_priv(dev); |
931 | int ret; | 899 | int ret; |
932 | 900 | ||
933 | /* MAC HW device setup */ | ||
934 | ret = stmmac_mac_device_setup(dev); | ||
935 | if (ret < 0) | ||
936 | return ret; | ||
937 | |||
938 | stmmac_check_ether_addr(priv); | 901 | stmmac_check_ether_addr(priv); |
939 | 902 | ||
940 | stmmac_verify_args(); | ||
941 | |||
942 | /* Override with kernel parameters if supplied XXX CRS XXX | ||
943 | * this needs to have multiple instances */ | ||
944 | if ((phyaddr >= 0) && (phyaddr <= 31)) | ||
945 | priv->plat->phy_addr = phyaddr; | ||
946 | |||
947 | /* MDIO bus Registration */ | 903 | /* MDIO bus Registration */ |
948 | ret = stmmac_mdio_register(dev); | 904 | ret = stmmac_mdio_register(dev); |
949 | if (ret < 0) { | 905 | if (ret < 0) { |
@@ -976,44 +932,6 @@ static int stmmac_open(struct net_device *dev) | |||
976 | goto open_error; | 932 | goto open_error; |
977 | } | 933 | } |
978 | 934 | ||
979 | stmmac_get_synopsys_id(priv); | ||
980 | |||
981 | priv->hw_cap_support = stmmac_get_hw_features(priv); | ||
982 | |||
983 | if (priv->hw_cap_support) { | ||
984 | pr_info(" Support DMA HW capability register"); | ||
985 | |||
986 | /* We can override some gmac/dma configuration fields: e.g. | ||
987 | * enh_desc, tx_coe (e.g. that are passed through the | ||
988 | * platform) with the values from the HW capability | ||
989 | * register (if supported). | ||
990 | */ | ||
991 | priv->plat->enh_desc = priv->dma_cap.enh_desc; | ||
992 | priv->plat->tx_coe = priv->dma_cap.tx_coe; | ||
993 | priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up; | ||
994 | |||
995 | /* By default disable wol on magic frame if not supported */ | ||
996 | if (!priv->dma_cap.pmt_magic_frame) | ||
997 | priv->wolopts &= ~WAKE_MAGIC; | ||
998 | |||
999 | } else | ||
1000 | pr_info(" No HW DMA feature register supported"); | ||
1001 | |||
1002 | /* Select the enhnaced/normal descriptor structures */ | ||
1003 | stmmac_selec_desc_mode(priv); | ||
1004 | |||
1005 | /* PMT module is not integrated in all the MAC devices. */ | ||
1006 | if (priv->plat->pmt) { | ||
1007 | pr_info(" Remote wake-up capable\n"); | ||
1008 | device_set_wakeup_capable(priv->device, 1); | ||
1009 | } | ||
1010 | |||
1011 | priv->rx_coe = priv->hw->mac->rx_coe(priv->ioaddr); | ||
1012 | if (priv->rx_coe) | ||
1013 | pr_info(" Checksum Offload Engine supported\n"); | ||
1014 | if (priv->plat->tx_coe) | ||
1015 | pr_info(" Checksum insertion supported\n"); | ||
1016 | |||
1017 | /* Create and initialize the TX/RX descriptors chains. */ | 935 | /* Create and initialize the TX/RX descriptors chains. */ |
1018 | priv->dma_tx_size = STMMAC_ALIGN(dma_txsize); | 936 | priv->dma_tx_size = STMMAC_ALIGN(dma_txsize); |
1019 | priv->dma_rx_size = STMMAC_ALIGN(dma_rxsize); | 937 | priv->dma_rx_size = STMMAC_ALIGN(dma_rxsize); |
@@ -1030,14 +948,14 @@ static int stmmac_open(struct net_device *dev) | |||
1030 | 948 | ||
1031 | /* Copy the MAC addr into the HW */ | 949 | /* Copy the MAC addr into the HW */ |
1032 | priv->hw->mac->set_umac_addr(priv->ioaddr, dev->dev_addr, 0); | 950 | priv->hw->mac->set_umac_addr(priv->ioaddr, dev->dev_addr, 0); |
951 | |||
1033 | /* If required, perform hw setup of the bus. */ | 952 | /* If required, perform hw setup of the bus. */ |
1034 | if (priv->plat->bus_setup) | 953 | if (priv->plat->bus_setup) |
1035 | priv->plat->bus_setup(priv->ioaddr); | 954 | priv->plat->bus_setup(priv->ioaddr); |
955 | |||
1036 | /* Initialize the MAC Core */ | 956 | /* Initialize the MAC Core */ |
1037 | priv->hw->mac->core_init(priv->ioaddr); | 957 | priv->hw->mac->core_init(priv->ioaddr); |
1038 | 958 | ||
1039 | netdev_update_features(dev); | ||
1040 | |||
1041 | /* Request the IRQ lines */ | 959 | /* Request the IRQ lines */ |
1042 | ret = request_irq(dev->irq, stmmac_interrupt, | 960 | ret = request_irq(dev->irq, stmmac_interrupt, |
1043 | IRQF_SHARED, dev->name, dev); | 961 | IRQF_SHARED, dev->name, dev); |
@@ -1047,6 +965,17 @@ static int stmmac_open(struct net_device *dev) | |||
1047 | goto open_error; | 965 | goto open_error; |
1048 | } | 966 | } |
1049 | 967 | ||
968 | /* Request the Wake IRQ in case of another line is used for WoL */ | ||
969 | if (priv->wol_irq != dev->irq) { | ||
970 | ret = request_irq(priv->wol_irq, stmmac_interrupt, | ||
971 | IRQF_SHARED, dev->name, dev); | ||
972 | if (unlikely(ret < 0)) { | ||
973 | pr_err("%s: ERROR: allocating the ext WoL IRQ %d " | ||
974 | "(error: %d)\n", __func__, priv->wol_irq, ret); | ||
975 | goto open_error_wolirq; | ||
976 | } | ||
977 | } | ||
978 | |||
1050 | /* Enable the MAC Rx/Tx */ | 979 | /* Enable the MAC Rx/Tx */ |
1051 | stmmac_set_mac(priv->ioaddr, true); | 980 | stmmac_set_mac(priv->ioaddr, true); |
1052 | 981 | ||
@@ -1062,7 +991,7 @@ static int stmmac_open(struct net_device *dev) | |||
1062 | #ifdef CONFIG_STMMAC_DEBUG_FS | 991 | #ifdef CONFIG_STMMAC_DEBUG_FS |
1063 | ret = stmmac_init_fs(dev); | 992 | ret = stmmac_init_fs(dev); |
1064 | if (ret < 0) | 993 | if (ret < 0) |
1065 | pr_warning("\tFailed debugFS registration"); | 994 | pr_warning("%s: failed debugFS registration\n", __func__); |
1066 | #endif | 995 | #endif |
1067 | /* Start the ball rolling... */ | 996 | /* Start the ball rolling... */ |
1068 | DBG(probe, DEBUG, "%s: DMA RX/TX processes started...\n", dev->name); | 997 | DBG(probe, DEBUG, "%s: DMA RX/TX processes started...\n", dev->name); |
@@ -1072,6 +1001,7 @@ static int stmmac_open(struct net_device *dev) | |||
1072 | #ifdef CONFIG_STMMAC_TIMER | 1001 | #ifdef CONFIG_STMMAC_TIMER |
1073 | priv->tm->timer_start(tmrate); | 1002 | priv->tm->timer_start(tmrate); |
1074 | #endif | 1003 | #endif |
1004 | |||
1075 | /* Dump DMA/MAC registers */ | 1005 | /* Dump DMA/MAC registers */ |
1076 | if (netif_msg_hw(priv)) { | 1006 | if (netif_msg_hw(priv)) { |
1077 | priv->hw->mac->dump_regs(priv->ioaddr); | 1007 | priv->hw->mac->dump_regs(priv->ioaddr); |
@@ -1087,6 +1017,9 @@ static int stmmac_open(struct net_device *dev) | |||
1087 | 1017 | ||
1088 | return 0; | 1018 | return 0; |
1089 | 1019 | ||
1020 | open_error_wolirq: | ||
1021 | free_irq(dev->irq, dev); | ||
1022 | |||
1090 | open_error: | 1023 | open_error: |
1091 | #ifdef CONFIG_STMMAC_TIMER | 1024 | #ifdef CONFIG_STMMAC_TIMER |
1092 | kfree(priv->tm); | 1025 | kfree(priv->tm); |
@@ -1127,6 +1060,8 @@ static int stmmac_release(struct net_device *dev) | |||
1127 | 1060 | ||
1128 | /* Free the IRQ lines */ | 1061 | /* Free the IRQ lines */ |
1129 | free_irq(dev->irq, dev); | 1062 | free_irq(dev->irq, dev); |
1063 | if (priv->wol_irq != dev->irq) | ||
1064 | free_irq(priv->wol_irq, dev); | ||
1130 | 1065 | ||
1131 | /* Stop TX/RX DMA and clear the descriptors */ | 1066 | /* Stop TX/RX DMA and clear the descriptors */ |
1132 | priv->hw->dma->stop_tx(priv->ioaddr); | 1067 | priv->hw->dma->stop_tx(priv->ioaddr); |
@@ -1789,13 +1724,77 @@ static const struct net_device_ops stmmac_netdev_ops = { | |||
1789 | }; | 1724 | }; |
1790 | 1725 | ||
1791 | /** | 1726 | /** |
1727 | * stmmac_hw_init - Init the MAC device | ||
1728 | * @priv : pointer to the private device structure. | ||
1729 | * Description: this function detects which MAC device | ||
1730 | * (GMAC/MAC10-100) has to attached, checks the HW capability | ||
1731 | * (if supported) and sets the driver's features (for example | ||
1732 | * to use the ring or chaine mode or support the normal/enh | ||
1733 | * descriptor structure). | ||
1734 | */ | ||
1735 | static int stmmac_hw_init(struct stmmac_priv *priv) | ||
1736 | { | ||
1737 | int ret = 0; | ||
1738 | struct mac_device_info *mac; | ||
1739 | |||
1740 | /* Identify the MAC HW device */ | ||
1741 | if (priv->plat->has_gmac) | ||
1742 | mac = dwmac1000_setup(priv->ioaddr); | ||
1743 | else | ||
1744 | mac = dwmac100_setup(priv->ioaddr); | ||
1745 | if (!mac) | ||
1746 | return -ENOMEM; | ||
1747 | |||
1748 | priv->hw = mac; | ||
1749 | |||
1750 | /* To use the chained or ring mode */ | ||
1751 | priv->hw->ring = &ring_mode_ops; | ||
1752 | |||
1753 | /* Get and dump the chip ID */ | ||
1754 | stmmac_get_synopsys_id(priv); | ||
1755 | |||
1756 | /* Get the HW capability (new GMAC newer than 3.50a) */ | ||
1757 | priv->hw_cap_support = stmmac_get_hw_features(priv); | ||
1758 | if (priv->hw_cap_support) { | ||
1759 | pr_info(" DMA HW capability register supported"); | ||
1760 | |||
1761 | /* We can override some gmac/dma configuration fields: e.g. | ||
1762 | * enh_desc, tx_coe (e.g. that are passed through the | ||
1763 | * platform) with the values from the HW capability | ||
1764 | * register (if supported). | ||
1765 | */ | ||
1766 | priv->plat->enh_desc = priv->dma_cap.enh_desc; | ||
1767 | priv->plat->tx_coe = priv->dma_cap.tx_coe; | ||
1768 | priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up; | ||
1769 | } else | ||
1770 | pr_info(" No HW DMA feature register supported"); | ||
1771 | |||
1772 | /* Select the enhnaced/normal descriptor structures */ | ||
1773 | stmmac_selec_desc_mode(priv); | ||
1774 | |||
1775 | priv->rx_coe = priv->hw->mac->rx_coe(priv->ioaddr); | ||
1776 | if (priv->rx_coe) | ||
1777 | pr_info(" RX Checksum Offload Engine supported\n"); | ||
1778 | if (priv->plat->tx_coe) | ||
1779 | pr_info(" TX Checksum insertion supported\n"); | ||
1780 | |||
1781 | if (priv->plat->pmt) { | ||
1782 | pr_info(" Wake-Up On Lan supported\n"); | ||
1783 | device_set_wakeup_capable(priv->device, 1); | ||
1784 | } | ||
1785 | |||
1786 | return ret; | ||
1787 | } | ||
1788 | |||
1789 | /** | ||
1792 | * stmmac_dvr_probe | 1790 | * stmmac_dvr_probe |
1793 | * @device: device pointer | 1791 | * @device: device pointer |
1794 | * Description: this is the main probe function used to | 1792 | * Description: this is the main probe function used to |
1795 | * call the alloc_etherdev, allocate the priv structure. | 1793 | * call the alloc_etherdev, allocate the priv structure. |
1796 | */ | 1794 | */ |
1797 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, | 1795 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, |
1798 | struct plat_stmmacenet_data *plat_dat) | 1796 | struct plat_stmmacenet_data *plat_dat, |
1797 | void __iomem *addr) | ||
1799 | { | 1798 | { |
1800 | int ret = 0; | 1799 | int ret = 0; |
1801 | struct net_device *ndev = NULL; | 1800 | struct net_device *ndev = NULL; |
@@ -1815,10 +1814,27 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
1815 | 1814 | ||
1816 | ether_setup(ndev); | 1815 | ether_setup(ndev); |
1817 | 1816 | ||
1818 | ndev->netdev_ops = &stmmac_netdev_ops; | ||
1819 | stmmac_set_ethtool_ops(ndev); | 1817 | stmmac_set_ethtool_ops(ndev); |
1818 | priv->pause = pause; | ||
1819 | priv->plat = plat_dat; | ||
1820 | priv->ioaddr = addr; | ||
1821 | priv->dev->base_addr = (unsigned long)addr; | ||
1822 | |||
1823 | /* Verify driver arguments */ | ||
1824 | stmmac_verify_args(); | ||
1825 | |||
1826 | /* Override with kernel parameters if supplied XXX CRS XXX | ||
1827 | * this needs to have multiple instances */ | ||
1828 | if ((phyaddr >= 0) && (phyaddr <= 31)) | ||
1829 | priv->plat->phy_addr = phyaddr; | ||
1830 | |||
1831 | /* Init MAC and get the capabilities */ | ||
1832 | stmmac_hw_init(priv); | ||
1833 | |||
1834 | ndev->netdev_ops = &stmmac_netdev_ops; | ||
1820 | 1835 | ||
1821 | ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; | 1836 | ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | |
1837 | NETIF_F_RXCSUM; | ||
1822 | ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA; | 1838 | ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA; |
1823 | ndev->watchdog_timeo = msecs_to_jiffies(watchdog); | 1839 | ndev->watchdog_timeo = msecs_to_jiffies(watchdog); |
1824 | #ifdef STMMAC_VLAN_TAG_USED | 1840 | #ifdef STMMAC_VLAN_TAG_USED |
@@ -1830,8 +1846,6 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
1830 | if (flow_ctrl) | 1846 | if (flow_ctrl) |
1831 | priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */ | 1847 | priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */ |
1832 | 1848 | ||
1833 | priv->pause = pause; | ||
1834 | priv->plat = plat_dat; | ||
1835 | netif_napi_add(ndev, &priv->napi, stmmac_poll, 64); | 1849 | netif_napi_add(ndev, &priv->napi, stmmac_poll, 64); |
1836 | 1850 | ||
1837 | spin_lock_init(&priv->lock); | 1851 | spin_lock_init(&priv->lock); |
@@ -1839,15 +1853,10 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
1839 | 1853 | ||
1840 | ret = register_netdev(ndev); | 1854 | ret = register_netdev(ndev); |
1841 | if (ret) { | 1855 | if (ret) { |
1842 | pr_err("%s: ERROR %i registering the device\n", | 1856 | pr_err("%s: ERROR %i registering the device\n", __func__, ret); |
1843 | __func__, ret); | ||
1844 | goto error; | 1857 | goto error; |
1845 | } | 1858 | } |
1846 | 1859 | ||
1847 | DBG(probe, DEBUG, "%s: Scatter/Gather: %s - HW checksums: %s\n", | ||
1848 | ndev->name, (ndev->features & NETIF_F_SG) ? "on" : "off", | ||
1849 | (ndev->features & NETIF_F_IP_CSUM) ? "on" : "off"); | ||
1850 | |||
1851 | return priv; | 1860 | return priv; |
1852 | 1861 | ||
1853 | error: | 1862 | error: |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c index c796de9eed72..50ad5b80cfaf 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | |||
@@ -96,13 +96,11 @@ static int __devinit stmmac_pci_probe(struct pci_dev *pdev, | |||
96 | 96 | ||
97 | stmmac_default_data(); | 97 | stmmac_default_data(); |
98 | 98 | ||
99 | priv = stmmac_dvr_probe(&(pdev->dev), &plat_dat); | 99 | priv = stmmac_dvr_probe(&(pdev->dev), &plat_dat, addr); |
100 | if (!priv) { | 100 | if (!priv) { |
101 | pr_err("%s: main drivr probe failed", __func__); | 101 | pr_err("%s: main driver probe failed", __func__); |
102 | goto err_out; | 102 | goto err_out; |
103 | } | 103 | } |
104 | priv->ioaddr = addr; | ||
105 | priv->dev->base_addr = (unsigned long)addr; | ||
106 | priv->dev->irq = pdev->irq; | 104 | priv->dev->irq = pdev->irq; |
107 | priv->wol_irq = pdev->irq; | 105 | priv->wol_irq = pdev->irq; |
108 | 106 | ||
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c index 1ac83243649a..3aad9810237c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | |||
@@ -59,16 +59,20 @@ static int stmmac_pltfr_probe(struct platform_device *pdev) | |||
59 | goto out_release_region; | 59 | goto out_release_region; |
60 | } | 60 | } |
61 | plat_dat = pdev->dev.platform_data; | 61 | plat_dat = pdev->dev.platform_data; |
62 | priv = stmmac_dvr_probe(&(pdev->dev), plat_dat); | 62 | |
63 | /* Custom initialisation (if needed)*/ | ||
64 | if (plat_dat->init) { | ||
65 | ret = plat_dat->init(pdev); | ||
66 | if (unlikely(ret)) | ||
67 | goto out_unmap; | ||
68 | } | ||
69 | |||
70 | priv = stmmac_dvr_probe(&(pdev->dev), plat_dat, addr); | ||
63 | if (!priv) { | 71 | if (!priv) { |
64 | pr_err("%s: main drivr probe failed", __func__); | 72 | pr_err("%s: main driver probe failed", __func__); |
65 | goto out_unmap; | 73 | goto out_unmap; |
66 | } | 74 | } |
67 | 75 | ||
68 | priv->ioaddr = addr; | ||
69 | /* Set the I/O base addr */ | ||
70 | priv->dev->base_addr = (unsigned long)addr; | ||
71 | |||
72 | /* Get the MAC information */ | 76 | /* Get the MAC information */ |
73 | priv->dev->irq = platform_get_irq_byname(pdev, "macirq"); | 77 | priv->dev->irq = platform_get_irq_byname(pdev, "macirq"); |
74 | if (priv->dev->irq == -ENXIO) { | 78 | if (priv->dev->irq == -ENXIO) { |
@@ -92,13 +96,6 @@ static int stmmac_pltfr_probe(struct platform_device *pdev) | |||
92 | 96 | ||
93 | platform_set_drvdata(pdev, priv->dev); | 97 | platform_set_drvdata(pdev, priv->dev); |
94 | 98 | ||
95 | /* Custom initialisation */ | ||
96 | if (priv->plat->init) { | ||
97 | ret = priv->plat->init(pdev); | ||
98 | if (unlikely(ret)) | ||
99 | goto out_unmap; | ||
100 | } | ||
101 | |||
102 | pr_debug("STMMAC platform driver registration completed"); | 99 | pr_debug("STMMAC platform driver registration completed"); |
103 | 100 | ||
104 | return 0; | 101 | return 0; |
diff --git a/drivers/net/ethernet/ti/cpmac.c b/drivers/net/ethernet/ti/cpmac.c index 4d9a28ffd3c3..cbc8df78d84b 100644 --- a/drivers/net/ethernet/ti/cpmac.c +++ b/drivers/net/ethernet/ti/cpmac.c | |||
@@ -1122,7 +1122,7 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
1122 | pdata = pdev->dev.platform_data; | 1122 | pdata = pdev->dev.platform_data; |
1123 | 1123 | ||
1124 | if (external_switch || dumb_switch) { | 1124 | if (external_switch || dumb_switch) { |
1125 | strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); /* fixed phys bus */ | 1125 | strncpy(mdio_bus_id, "fixed-0", MII_BUS_ID_SIZE); /* fixed phys bus */ |
1126 | phy_id = pdev->id; | 1126 | phy_id = pdev->id; |
1127 | } else { | 1127 | } else { |
1128 | for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { | 1128 | for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { |
@@ -1138,7 +1138,7 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
1138 | if (phy_id == PHY_MAX_ADDR) { | 1138 | if (phy_id == PHY_MAX_ADDR) { |
1139 | dev_err(&pdev->dev, "no PHY present, falling back " | 1139 | dev_err(&pdev->dev, "no PHY present, falling back " |
1140 | "to switch on MDIO bus 0\n"); | 1140 | "to switch on MDIO bus 0\n"); |
1141 | strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); /* fixed phys bus */ | 1141 | strncpy(mdio_bus_id, "fixed-0", MII_BUS_ID_SIZE); /* fixed phys bus */ |
1142 | phy_id = pdev->id; | 1142 | phy_id = pdev->id; |
1143 | } | 1143 | } |
1144 | 1144 | ||
diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c index 794ac30a577b..4fa0bcb25dfc 100644 --- a/drivers/net/ethernet/ti/davinci_emac.c +++ b/drivers/net/ethernet/ti/davinci_emac.c | |||
@@ -1600,8 +1600,9 @@ static int emac_dev_open(struct net_device *ndev) | |||
1600 | if (IS_ERR(priv->phydev)) { | 1600 | if (IS_ERR(priv->phydev)) { |
1601 | dev_err(emac_dev, "could not connect to phy %s\n", | 1601 | dev_err(emac_dev, "could not connect to phy %s\n", |
1602 | priv->phy_id); | 1602 | priv->phy_id); |
1603 | ret = PTR_ERR(priv->phydev); | ||
1603 | priv->phydev = NULL; | 1604 | priv->phydev = NULL; |
1604 | return PTR_ERR(priv->phydev); | 1605 | return ret; |
1605 | } | 1606 | } |
1606 | 1607 | ||
1607 | priv->link = 0; | 1608 | priv->link = 0; |
diff --git a/drivers/net/ethernet/ti/davinci_mdio.c b/drivers/net/ethernet/ti/davinci_mdio.c index ef7c9c17bfff..af8b8fc39eb2 100644 --- a/drivers/net/ethernet/ti/davinci_mdio.c +++ b/drivers/net/ethernet/ti/davinci_mdio.c | |||
@@ -318,9 +318,9 @@ static int __devinit davinci_mdio_probe(struct platform_device *pdev) | |||
318 | 318 | ||
319 | data->clk = clk_get(dev, NULL); | 319 | data->clk = clk_get(dev, NULL); |
320 | if (IS_ERR(data->clk)) { | 320 | if (IS_ERR(data->clk)) { |
321 | data->clk = NULL; | ||
322 | dev_err(dev, "failed to get device clock\n"); | 321 | dev_err(dev, "failed to get device clock\n"); |
323 | ret = PTR_ERR(data->clk); | 322 | ret = PTR_ERR(data->clk); |
323 | data->clk = NULL; | ||
324 | goto bail_out; | 324 | goto bail_out; |
325 | } | 325 | } |
326 | 326 | ||
diff --git a/drivers/net/ethernet/toshiba/Kconfig b/drivers/net/ethernet/toshiba/Kconfig index 051764704559..74acb5cf6099 100644 --- a/drivers/net/ethernet/toshiba/Kconfig +++ b/drivers/net/ethernet/toshiba/Kconfig | |||
@@ -5,7 +5,7 @@ | |||
5 | config NET_VENDOR_TOSHIBA | 5 | config NET_VENDOR_TOSHIBA |
6 | bool "Toshiba devices" | 6 | bool "Toshiba devices" |
7 | default y | 7 | default y |
8 | depends on PCI && (PPC_IBM_CELL_BLADE || PPC_CELLEB) || PPC_PS3 | 8 | depends on PCI && (PPC_IBM_CELL_BLADE || PPC_CELLEB || MIPS) || PPC_PS3 |
9 | ---help--- | 9 | ---help--- |
10 | If you have a network (Ethernet) card belonging to this class, say Y | 10 | If you have a network (Ethernet) card belonging to this class, say Y |
11 | and read the Ethernet-HOWTO, available from | 11 | and read the Ethernet-HOWTO, available from |
diff --git a/drivers/net/ethernet/via/via-velocity.c b/drivers/net/ethernet/via/via-velocity.c index 4128d6b8cc28..cb35b14b73bb 100644 --- a/drivers/net/ethernet/via/via-velocity.c +++ b/drivers/net/ethernet/via/via-velocity.c | |||
@@ -2491,9 +2491,6 @@ static int velocity_close(struct net_device *dev) | |||
2491 | if (dev->irq != 0) | 2491 | if (dev->irq != 0) |
2492 | free_irq(dev->irq, dev); | 2492 | free_irq(dev->irq, dev); |
2493 | 2493 | ||
2494 | /* Power down the chip */ | ||
2495 | pci_set_power_state(vptr->pdev, PCI_D3hot); | ||
2496 | |||
2497 | velocity_free_rings(vptr); | 2494 | velocity_free_rings(vptr); |
2498 | 2495 | ||
2499 | vptr->flags &= (~VELOCITY_FLAGS_OPENED); | 2496 | vptr->flags &= (~VELOCITY_FLAGS_OPENED); |
diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c index 72a854f05bb8..41a8b5a9849e 100644 --- a/drivers/net/ethernet/xscale/ixp4xx_eth.c +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c | |||
@@ -1416,7 +1416,8 @@ static int __devinit eth_init_one(struct platform_device *pdev) | |||
1416 | __raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control); | 1416 | __raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control); |
1417 | udelay(50); | 1417 | udelay(50); |
1418 | 1418 | ||
1419 | snprintf(phy_id, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, "0", plat->phy); | 1419 | snprintf(phy_id, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, |
1420 | mdio_bus->id, plat->phy); | ||
1420 | port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, | 1421 | port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, |
1421 | PHY_INTERFACE_MODE_MII); | 1422 | PHY_INTERFACE_MODE_MII); |
1422 | if (IS_ERR(port->phydev)) { | 1423 | if (IS_ERR(port->phydev)) { |