Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
igb: remove sysfs entry that was used to set the number of vfs
igbvf: add new driver to support 82576 virtual functions
drivers/net/eql.c: Fix a dev leakage.
niu: Fix unused variable warning.
r6040: set MODULE_VERSION
bnx2: Don't use reserved names
FEC driver: add missing #endif
niu: Fix error handling
mv643xx_eth: don't reset the rx coal timer on interface up
smsc911x: correct debugging message on mii read timeout
ethoc: fix library build errors
netfilter: ctnetlink: fix regression in expectation handling
netfilter: fix selection of "LED" target in netfilter
netfilter: ip6tables regression fix

+5267 -149
+23
drivers/net/Kconfig
··· 977 depends on NET_ETHERNET && HAS_IOMEM 978 select MII 979 select PHYLIB 980 help 981 Say Y here if you want to use the OpenCores 10/100 Mbps Ethernet MAC. 982 ··· 2057 Say Y here if you want to use Direct Cache Access (DCA) in the 2058 driver. DCA is a method for warming the CPU cache before data 2059 is used, with the intent of lessening the impact of cache misses. 2060 2061 source "drivers/net/ixp2000/Kconfig" 2062
··· 977 depends on NET_ETHERNET && HAS_IOMEM 978 select MII 979 select PHYLIB 980 + select CRC32 981 + select BITREVERSE 982 help 983 Say Y here if you want to use the OpenCores 10/100 Mbps Ethernet MAC. 984 ··· 2055 Say Y here if you want to use Direct Cache Access (DCA) in the 2056 driver. DCA is a method for warming the CPU cache before data 2057 is used, with the intent of lessening the impact of cache misses. 2058 + 2059 + config IGBVF 2060 + tristate "Intel(R) 82576 Virtual Function Ethernet support" 2061 + depends on PCI 2062 + ---help--- 2063 + This driver supports Intel(R) 82576 virtual functions. For more 2064 + information on how to identify your adapter, go to the Adapter & 2065 + Driver ID Guide at: 2066 + 2067 + <http://support.intel.com/support/network/adapter/pro100/21397.htm> 2068 + 2069 + For general information and support, go to the Intel support 2070 + website at: 2071 + 2072 + <http://support.intel.com> 2073 + 2074 + More specific information on configuring the driver is in 2075 + <file:Documentation/networking/e1000.txt>. 2076 + 2077 + To compile this driver as a module, choose M here. The module 2078 + will be called igbvf. 2079 2080 source "drivers/net/ixp2000/Kconfig" 2081
+1
drivers/net/Makefile
··· 6 obj-$(CONFIG_E1000E) += e1000e/ 7 obj-$(CONFIG_IBM_NEW_EMAC) += ibm_newemac/ 8 obj-$(CONFIG_IGB) += igb/ 9 obj-$(CONFIG_IXGBE) += ixgbe/ 10 obj-$(CONFIG_IXGB) += ixgb/ 11 obj-$(CONFIG_IP1000) += ipg.o
··· 6 obj-$(CONFIG_E1000E) += e1000e/ 7 obj-$(CONFIG_IBM_NEW_EMAC) += ibm_newemac/ 8 obj-$(CONFIG_IGB) += igb/ 9 + obj-$(CONFIG_IGBVF) += igbvf/ 10 obj-$(CONFIG_IXGBE) += ixgbe/ 11 obj-$(CONFIG_IXGB) += ixgb/ 12 obj-$(CONFIG_IP1000) += ipg.o
+13 -13
drivers/net/bnx2.c
··· 3427 bnx2_request_firmware(struct bnx2 *bp) 3428 { 3429 const char *mips_fw_file, *rv2p_fw_file; 3430 - const struct bnx2_mips_fw_file *mips; 3431 - const struct bnx2_rv2p_fw_file *rv2p; 3432 int rc; 3433 3434 if (CHIP_NUM(bp) == CHIP_NUM_5709) { ··· 3452 rv2p_fw_file); 3453 return rc; 3454 } 3455 - mips = (const struct bnx2_mips_fw_file *) bp->mips_firmware->data; 3456 - rv2p = (const struct bnx2_rv2p_fw_file *) bp->rv2p_firmware->data; 3457 - if (bp->mips_firmware->size < sizeof(*mips) || 3458 - check_mips_fw_entry(bp->mips_firmware, &mips->com) || 3459 - check_mips_fw_entry(bp->mips_firmware, &mips->cp) || 3460 - check_mips_fw_entry(bp->mips_firmware, &mips->rxp) || 3461 - check_mips_fw_entry(bp->mips_firmware, &mips->tpat) || 3462 - check_mips_fw_entry(bp->mips_firmware, &mips->txp)) { 3463 printk(KERN_ERR PFX "Firmware file \"%s\" is invalid\n", 3464 mips_fw_file); 3465 return -EINVAL; 3466 } 3467 - if (bp->rv2p_firmware->size < sizeof(*rv2p) || 3468 - check_fw_section(bp->rv2p_firmware, &rv2p->proc1.rv2p, 8, true) || 3469 - check_fw_section(bp->rv2p_firmware, &rv2p->proc2.rv2p, 8, true)) { 3470 printk(KERN_ERR PFX "Firmware file \"%s\" is invalid\n", 3471 rv2p_fw_file); 3472 return -EINVAL;
··· 3427 bnx2_request_firmware(struct bnx2 *bp) 3428 { 3429 const char *mips_fw_file, *rv2p_fw_file; 3430 + const struct bnx2_mips_fw_file *mips_fw; 3431 + const struct bnx2_rv2p_fw_file *rv2p_fw; 3432 int rc; 3433 3434 if (CHIP_NUM(bp) == CHIP_NUM_5709) { ··· 3452 rv2p_fw_file); 3453 return rc; 3454 } 3455 + mips_fw = (const struct bnx2_mips_fw_file *) bp->mips_firmware->data; 3456 + rv2p_fw = (const struct bnx2_rv2p_fw_file *) bp->rv2p_firmware->data; 3457 + if (bp->mips_firmware->size < sizeof(*mips_fw) || 3458 + check_mips_fw_entry(bp->mips_firmware, &mips_fw->com) || 3459 + check_mips_fw_entry(bp->mips_firmware, &mips_fw->cp) || 3460 + check_mips_fw_entry(bp->mips_firmware, &mips_fw->rxp) || 3461 + check_mips_fw_entry(bp->mips_firmware, &mips_fw->tpat) || 3462 + check_mips_fw_entry(bp->mips_firmware, &mips_fw->txp)) { 3463 printk(KERN_ERR PFX "Firmware file \"%s\" is invalid\n", 3464 mips_fw_file); 3465 return -EINVAL; 3466 } 3467 + if (bp->rv2p_firmware->size < sizeof(*rv2p_fw) || 3468 + check_fw_section(bp->rv2p_firmware, &rv2p_fw->proc1.rv2p, 8, true) || 3469 + check_fw_section(bp->rv2p_firmware, &rv2p_fw->proc2.rv2p, 8, true)) { 3470 printk(KERN_ERR PFX "Firmware file \"%s\" is invalid\n", 3471 rv2p_fw_file); 3472 return -EINVAL;
+2
drivers/net/eql.c
··· 542 } 543 spin_unlock_bh(&eql->queue.lock); 544 545 return ret; 546 } 547
··· 542 } 543 spin_unlock_bh(&eql->queue.lock); 544 545 + dev_put(slave_dev); 546 + 547 return ret; 548 } 549
+1
drivers/net/fec.c
··· 1240 icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR1); 1241 *icrp = 0x0d000000; 1242 } 1243 1244 #ifdef CONFIG_M5272 1245 static void __inline__ fec_get_mac(struct net_device *dev)
··· 1240 icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR1); 1241 *icrp = 0x0d000000; 1242 } 1243 + #endif 1244 1245 #ifdef CONFIG_M5272 1246 static void __inline__ fec_get_mac(struct net_device *dev)
+54 -105
drivers/net/igb/igb_main.c
··· 152 /* for netdump / net console */ 153 static void igb_netpoll(struct net_device *); 154 #endif 155 - 156 #ifdef CONFIG_PCI_IOV 157 - static ssize_t igb_set_num_vfs(struct device *, struct device_attribute *, 158 - const char *, size_t); 159 - static ssize_t igb_show_num_vfs(struct device *, struct device_attribute *, 160 - char *); 161 - DEVICE_ATTR(num_vfs, S_IRUGO | S_IWUSR, igb_show_num_vfs, igb_set_num_vfs); 162 - #endif 163 static pci_ers_result_t igb_io_error_detected(struct pci_dev *, 164 pci_channel_state_t); 165 static pci_ers_result_t igb_io_slot_reset(struct pci_dev *); ··· 670 671 /* If we can't do MSI-X, try MSI */ 672 msi_only: 673 adapter->num_rx_queues = 1; 674 adapter->num_tx_queues = 1; 675 if (!pci_enable_msi(adapter->pdev)) ··· 1252 if (err) 1253 goto err_sw_init; 1254 1255 /* setup the private structure */ 1256 err = igb_sw_init(adapter); 1257 if (err) ··· 1444 if (err) 1445 goto err_register; 1446 1447 - #ifdef CONFIG_PCI_IOV 1448 - /* since iov functionality isn't critical to base device function we 1449 - * can accept failure. If it fails we don't allow iov to be enabled */ 1450 - if (hw->mac.type == e1000_82576) { 1451 - err = pci_enable_sriov(pdev, 0); 1452 - if (!err) 1453 - err = device_create_file(&netdev->dev, 1454 - &dev_attr_num_vfs); 1455 - if (err) 1456 - dev_err(&pdev->dev, "Failed to initialize IOV\n"); 1457 - } 1458 - 1459 - #endif 1460 #ifdef CONFIG_IGB_DCA 1461 if (dca_add_requester(&pdev->dev) == 0) { 1462 adapter->flags |= IGB_FLAG_DCA_ENABLED; ··· 5456 igb_vmdq_set_replication_pf(hw, true); 5457 } 5458 5459 - #ifdef CONFIG_PCI_IOV 5460 - static ssize_t igb_show_num_vfs(struct device *dev, 5461 - struct device_attribute *attr, char *buf) 5462 - { 5463 - struct igb_adapter *adapter = netdev_priv(to_net_dev(dev)); 5464 - 5465 - return sprintf(buf, "%d\n", adapter->vfs_allocated_count); 5466 - } 5467 - 5468 - static ssize_t igb_set_num_vfs(struct device *dev, 5469 - struct device_attribute *attr, 5470 - const char *buf, size_t count) 5471 - { 5472 - struct net_device *netdev = to_net_dev(dev); 5473 - struct igb_adapter *adapter = netdev_priv(netdev); 5474 - struct e1000_hw *hw = &adapter->hw; 5475 - struct pci_dev *pdev = adapter->pdev; 5476 - unsigned int num_vfs, i; 5477 - unsigned char mac_addr[ETH_ALEN]; 5478 - int err; 5479 - 5480 - sscanf(buf, "%u", &num_vfs); 5481 - 5482 - if (num_vfs > 7) 5483 - num_vfs = 7; 5484 - 5485 - /* value unchanged do nothing */ 5486 - if (num_vfs == adapter->vfs_allocated_count) 5487 - return count; 5488 - 5489 - if (netdev->flags & IFF_UP) 5490 - igb_close(netdev); 5491 - 5492 - igb_reset_interrupt_capability(adapter); 5493 - igb_free_queues(adapter); 5494 - adapter->tx_ring = NULL; 5495 - adapter->rx_ring = NULL; 5496 - adapter->vfs_allocated_count = 0; 5497 - 5498 - /* reclaim resources allocated to VFs since we are changing count */ 5499 - if (adapter->vf_data) { 5500 - /* disable iov and allow time for transactions to clear */ 5501 - pci_disable_sriov(pdev); 5502 - msleep(500); 5503 - 5504 - kfree(adapter->vf_data); 5505 - adapter->vf_data = NULL; 5506 - wr32(E1000_IOVCTL, E1000_IOVCTL_REUSE_VFQ); 5507 - msleep(100); 5508 - dev_info(&pdev->dev, "IOV Disabled\n"); 5509 - } 5510 - 5511 - if (num_vfs) { 5512 - adapter->vf_data = kcalloc(num_vfs, 5513 - sizeof(struct vf_data_storage), 5514 - GFP_KERNEL); 5515 - if (!adapter->vf_data) { 5516 - dev_err(&pdev->dev, "Could not allocate VF private " 5517 - "data - IOV enable failed\n"); 5518 - } else { 5519 - err = pci_enable_sriov(pdev, num_vfs); 5520 - if (!err) { 5521 - adapter->vfs_allocated_count = num_vfs; 5522 - dev_info(&pdev->dev, "%d vfs allocated\n", num_vfs); 5523 - for (i = 0; i < adapter->vfs_allocated_count; i++) { 5524 - random_ether_addr(mac_addr); 5525 - igb_set_vf_mac(adapter, i, mac_addr); 5526 - } 5527 - } else { 5528 - kfree(adapter->vf_data); 5529 - adapter->vf_data = NULL; 5530 - } 5531 - } 5532 - } 5533 - 5534 - igb_set_interrupt_capability(adapter); 5535 - igb_alloc_queues(adapter); 5536 - igb_reset(adapter); 5537 - 5538 - if (netdev->flags & IFF_UP) 5539 - igb_open(netdev); 5540 - 5541 - return count; 5542 - } 5543 - #endif /* CONFIG_PCI_IOV */ 5544 /* igb_main.c */
··· 152 /* for netdump / net console */ 153 static void igb_netpoll(struct net_device *); 154 #endif 155 #ifdef CONFIG_PCI_IOV 156 + static unsigned int max_vfs = 0; 157 + module_param(max_vfs, uint, 0); 158 + MODULE_PARM_DESC(max_vfs, "Maximum number of virtual functions to allocate " 159 + "per physical function"); 160 + #endif /* CONFIG_PCI_IOV */ 161 + 162 static pci_ers_result_t igb_io_error_detected(struct pci_dev *, 163 pci_channel_state_t); 164 static pci_ers_result_t igb_io_slot_reset(struct pci_dev *); ··· 671 672 /* If we can't do MSI-X, try MSI */ 673 msi_only: 674 + #ifdef CONFIG_PCI_IOV 675 + /* disable SR-IOV for non MSI-X configurations */ 676 + if (adapter->vf_data) { 677 + struct e1000_hw *hw = &adapter->hw; 678 + /* disable iov and allow time for transactions to clear */ 679 + pci_disable_sriov(adapter->pdev); 680 + msleep(500); 681 + 682 + kfree(adapter->vf_data); 683 + adapter->vf_data = NULL; 684 + wr32(E1000_IOVCTL, E1000_IOVCTL_REUSE_VFQ); 685 + msleep(100); 686 + dev_info(&adapter->pdev->dev, "IOV Disabled\n"); 687 + } 688 + #endif 689 adapter->num_rx_queues = 1; 690 adapter->num_tx_queues = 1; 691 if (!pci_enable_msi(adapter->pdev)) ··· 1238 if (err) 1239 goto err_sw_init; 1240 1241 + #ifdef CONFIG_PCI_IOV 1242 + /* since iov functionality isn't critical to base device function we 1243 + * can accept failure. If it fails we don't allow iov to be enabled */ 1244 + if (hw->mac.type == e1000_82576) { 1245 + /* 82576 supports a maximum of 7 VFs in addition to the PF */ 1246 + unsigned int num_vfs = (max_vfs > 7) ? 7 : max_vfs; 1247 + int i; 1248 + unsigned char mac_addr[ETH_ALEN]; 1249 + 1250 + if (num_vfs) 1251 + adapter->vf_data = kcalloc(num_vfs, 1252 + sizeof(struct vf_data_storage), 1253 + GFP_KERNEL); 1254 + if (!adapter->vf_data) { 1255 + dev_err(&pdev->dev, "Could not allocate VF private " 1256 + "data - IOV enable failed\n"); 1257 + } else { 1258 + err = pci_enable_sriov(pdev, num_vfs); 1259 + if (!err) { 1260 + adapter->vfs_allocated_count = num_vfs; 1261 + dev_info(&pdev->dev, "%d vfs allocated\n", num_vfs); 1262 + for (i = 0; i < adapter->vfs_allocated_count; i++) { 1263 + random_ether_addr(mac_addr); 1264 + igb_set_vf_mac(adapter, i, mac_addr); 1265 + } 1266 + } else { 1267 + kfree(adapter->vf_data); 1268 + adapter->vf_data = NULL; 1269 + } 1270 + } 1271 + } 1272 + 1273 + #endif 1274 /* setup the private structure */ 1275 err = igb_sw_init(adapter); 1276 if (err) ··· 1397 if (err) 1398 goto err_register; 1399 1400 #ifdef CONFIG_IGB_DCA 1401 if (dca_add_requester(&pdev->dev) == 0) { 1402 adapter->flags |= IGB_FLAG_DCA_ENABLED; ··· 5422 igb_vmdq_set_replication_pf(hw, true); 5423 } 5424 5425 /* igb_main.c */
+38
drivers/net/igbvf/Makefile
···
··· 1 + ################################################################################ 2 + # 3 + # Intel(R) 82576 Virtual Function Linux driver 4 + # Copyright(c) 2009 Intel Corporation. 5 + # 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, 8 + # version 2, as published by the Free Software Foundation. 9 + # 10 + # This program is distributed in the hope it will be useful, but WITHOUT 11 + # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + # more details. 14 + # 15 + # You should have received a copy of the GNU General Public License along with 16 + # this program; if not, write to the Free Software Foundation, Inc., 17 + # 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + # 19 + # The full GNU General Public License is included in this distribution in 20 + # the file called "COPYING". 21 + # 22 + # Contact Information: 23 + # e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + # Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + # 26 + ################################################################################ 27 + 28 + # 29 + # Makefile for the Intel(R) 82576 VF ethernet driver 30 + # 31 + 32 + obj-$(CONFIG_IGBVF) += igbvf.o 33 + 34 + igbvf-objs := vf.o \ 35 + mbx.o \ 36 + ethtool.o \ 37 + netdev.o 38 +
+125
drivers/net/igbvf/defines.h
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 1999 - 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + #ifndef _E1000_DEFINES_H_ 29 + #define _E1000_DEFINES_H_ 30 + 31 + /* Number of Transmit and Receive Descriptors must be a multiple of 8 */ 32 + #define REQ_TX_DESCRIPTOR_MULTIPLE 8 33 + #define REQ_RX_DESCRIPTOR_MULTIPLE 8 34 + 35 + /* IVAR valid bit */ 36 + #define E1000_IVAR_VALID 0x80 37 + 38 + /* Receive Descriptor bit definitions */ 39 + #define E1000_RXD_STAT_DD 0x01 /* Descriptor Done */ 40 + #define E1000_RXD_STAT_EOP 0x02 /* End of Packet */ 41 + #define E1000_RXD_STAT_IXSM 0x04 /* Ignore checksum */ 42 + #define E1000_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ 43 + #define E1000_RXD_STAT_UDPCS 0x10 /* UDP xsum calculated */ 44 + #define E1000_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */ 45 + #define E1000_RXD_STAT_IPCS 0x40 /* IP xsum calculated */ 46 + #define E1000_RXD_ERR_SE 0x02 /* Symbol Error */ 47 + #define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */ 48 + 49 + #define E1000_RXDEXT_STATERR_CE 0x01000000 50 + #define E1000_RXDEXT_STATERR_SE 0x02000000 51 + #define E1000_RXDEXT_STATERR_SEQ 0x04000000 52 + #define E1000_RXDEXT_STATERR_CXE 0x10000000 53 + #define E1000_RXDEXT_STATERR_TCPE 0x20000000 54 + #define E1000_RXDEXT_STATERR_IPE 0x40000000 55 + #define E1000_RXDEXT_STATERR_RXE 0x80000000 56 + 57 + 58 + /* Same mask, but for extended and packet split descriptors */ 59 + #define E1000_RXDEXT_ERR_FRAME_ERR_MASK ( \ 60 + E1000_RXDEXT_STATERR_CE | \ 61 + E1000_RXDEXT_STATERR_SE | \ 62 + E1000_RXDEXT_STATERR_SEQ | \ 63 + E1000_RXDEXT_STATERR_CXE | \ 64 + E1000_RXDEXT_STATERR_RXE) 65 + 66 + /* Device Control */ 67 + #define E1000_CTRL_RST 0x04000000 /* Global reset */ 68 + 69 + /* Device Status */ 70 + #define E1000_STATUS_FD 0x00000001 /* Full duplex.0=half,1=full */ 71 + #define E1000_STATUS_LU 0x00000002 /* Link up.0=no,1=link */ 72 + #define E1000_STATUS_TXOFF 0x00000010 /* transmission paused */ 73 + #define E1000_STATUS_SPEED_10 0x00000000 /* Speed 10Mb/s */ 74 + #define E1000_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */ 75 + #define E1000_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */ 76 + 77 + #define SPEED_10 10 78 + #define SPEED_100 100 79 + #define SPEED_1000 1000 80 + #define HALF_DUPLEX 1 81 + #define FULL_DUPLEX 2 82 + 83 + /* Transmit Descriptor bit definitions */ 84 + #define E1000_TXD_POPTS_IXSM 0x01 /* Insert IP checksum */ 85 + #define E1000_TXD_POPTS_TXSM 0x02 /* Insert TCP/UDP checksum */ 86 + #define E1000_TXD_CMD_DEXT 0x20000000 /* Descriptor extension (0 = legacy) */ 87 + #define E1000_TXD_STAT_DD 0x00000001 /* Descriptor Done */ 88 + 89 + #define MAX_JUMBO_FRAME_SIZE 0x3F00 90 + 91 + /* 802.1q VLAN Packet Size */ 92 + #define VLAN_TAG_SIZE 4 /* 802.3ac tag (not DMA'd) */ 93 + 94 + /* Error Codes */ 95 + #define E1000_SUCCESS 0 96 + #define E1000_ERR_CONFIG 3 97 + #define E1000_ERR_MAC_INIT 5 98 + #define E1000_ERR_MBX 15 99 + 100 + #ifndef ETH_ADDR_LEN 101 + #define ETH_ADDR_LEN 6 102 + #endif 103 + 104 + /* SRRCTL bit definitions */ 105 + #define E1000_SRRCTL_BSIZEPKT_SHIFT 10 /* Shift _right_ */ 106 + #define E1000_SRRCTL_BSIZEHDRSIZE_MASK 0x00000F00 107 + #define E1000_SRRCTL_BSIZEHDRSIZE_SHIFT 2 /* Shift _left_ */ 108 + #define E1000_SRRCTL_DESCTYPE_ADV_ONEBUF 0x02000000 109 + #define E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS 0x0A000000 110 + #define E1000_SRRCTL_DESCTYPE_MASK 0x0E000000 111 + #define E1000_SRRCTL_DROP_EN 0x80000000 112 + 113 + #define E1000_SRRCTL_BSIZEPKT_MASK 0x0000007F 114 + #define E1000_SRRCTL_BSIZEHDR_MASK 0x00003F00 115 + 116 + /* Additional Descriptor Control definitions */ 117 + #define E1000_TXDCTL_QUEUE_ENABLE 0x02000000 /* Enable specific Tx Queue */ 118 + #define E1000_RXDCTL_QUEUE_ENABLE 0x02000000 /* Enable specific Rx Queue */ 119 + 120 + /* Direct Cache Access (DCA) definitions */ 121 + #define E1000_DCA_TXCTRL_TX_WB_RO_EN (1 << 11) /* Tx Desc writeback RO bit */ 122 + 123 + #define E1000_VF_INIT_TIMEOUT 200 /* Number of retries to clear RSTI */ 124 + 125 + #endif /* _E1000_DEFINES_H_ */
+540
drivers/net/igbvf/ethtool.c
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + /* ethtool support for igbvf */ 29 + 30 + #include <linux/netdevice.h> 31 + #include <linux/ethtool.h> 32 + #include <linux/pci.h> 33 + #include <linux/vmalloc.h> 34 + #include <linux/delay.h> 35 + 36 + #include "igbvf.h" 37 + #include <linux/if_vlan.h> 38 + 39 + 40 + struct igbvf_stats { 41 + char stat_string[ETH_GSTRING_LEN]; 42 + int sizeof_stat; 43 + int stat_offset; 44 + int base_stat_offset; 45 + }; 46 + 47 + #define IGBVF_STAT(current, base) \ 48 + sizeof(((struct igbvf_adapter *)0)->current), \ 49 + offsetof(struct igbvf_adapter, current), \ 50 + offsetof(struct igbvf_adapter, base) 51 + 52 + static const struct igbvf_stats igbvf_gstrings_stats[] = { 53 + { "rx_packets", IGBVF_STAT(stats.gprc, stats.base_gprc) }, 54 + { "tx_packets", IGBVF_STAT(stats.gptc, stats.base_gptc) }, 55 + { "rx_bytes", IGBVF_STAT(stats.gorc, stats.base_gorc) }, 56 + { "tx_bytes", IGBVF_STAT(stats.gotc, stats.base_gotc) }, 57 + { "multicast", IGBVF_STAT(stats.mprc, stats.base_mprc) }, 58 + { "lbrx_bytes", IGBVF_STAT(stats.gorlbc, stats.base_gorlbc) }, 59 + { "lbrx_packets", IGBVF_STAT(stats.gprlbc, stats.base_gprlbc) }, 60 + { "tx_restart_queue", IGBVF_STAT(restart_queue, zero_base) }, 61 + { "rx_long_byte_count", IGBVF_STAT(stats.gorc, stats.base_gorc) }, 62 + { "rx_csum_offload_good", IGBVF_STAT(hw_csum_good, zero_base) }, 63 + { "rx_csum_offload_errors", IGBVF_STAT(hw_csum_err, zero_base) }, 64 + { "rx_header_split", IGBVF_STAT(rx_hdr_split, zero_base) }, 65 + { "alloc_rx_buff_failed", IGBVF_STAT(alloc_rx_buff_failed, zero_base) }, 66 + }; 67 + 68 + #define IGBVF_GLOBAL_STATS_LEN ARRAY_SIZE(igbvf_gstrings_stats) 69 + 70 + static const char igbvf_gstrings_test[][ETH_GSTRING_LEN] = { 71 + "Link test (on/offline)" 72 + }; 73 + 74 + #define IGBVF_TEST_LEN ARRAY_SIZE(igbvf_gstrings_test) 75 + 76 + static int igbvf_get_settings(struct net_device *netdev, 77 + struct ethtool_cmd *ecmd) 78 + { 79 + struct igbvf_adapter *adapter = netdev_priv(netdev); 80 + struct e1000_hw *hw = &adapter->hw; 81 + u32 status; 82 + 83 + ecmd->supported = SUPPORTED_1000baseT_Full; 84 + 85 + ecmd->advertising = ADVERTISED_1000baseT_Full; 86 + 87 + ecmd->port = -1; 88 + ecmd->transceiver = XCVR_DUMMY1; 89 + 90 + status = er32(STATUS); 91 + if (status & E1000_STATUS_LU) { 92 + if (status & E1000_STATUS_SPEED_1000) 93 + ecmd->speed = 1000; 94 + else if (status & E1000_STATUS_SPEED_100) 95 + ecmd->speed = 100; 96 + else 97 + ecmd->speed = 10; 98 + 99 + if (status & E1000_STATUS_FD) 100 + ecmd->duplex = DUPLEX_FULL; 101 + else 102 + ecmd->duplex = DUPLEX_HALF; 103 + } else { 104 + ecmd->speed = -1; 105 + ecmd->duplex = -1; 106 + } 107 + 108 + ecmd->autoneg = AUTONEG_DISABLE; 109 + 110 + return 0; 111 + } 112 + 113 + static u32 igbvf_get_link(struct net_device *netdev) 114 + { 115 + return netif_carrier_ok(netdev); 116 + } 117 + 118 + static int igbvf_set_settings(struct net_device *netdev, 119 + struct ethtool_cmd *ecmd) 120 + { 121 + return -EOPNOTSUPP; 122 + } 123 + 124 + static void igbvf_get_pauseparam(struct net_device *netdev, 125 + struct ethtool_pauseparam *pause) 126 + { 127 + return; 128 + } 129 + 130 + static int igbvf_set_pauseparam(struct net_device *netdev, 131 + struct ethtool_pauseparam *pause) 132 + { 133 + return -EOPNOTSUPP; 134 + } 135 + 136 + static u32 igbvf_get_tx_csum(struct net_device *netdev) 137 + { 138 + return ((netdev->features & NETIF_F_IP_CSUM) != 0); 139 + } 140 + 141 + static int igbvf_set_tx_csum(struct net_device *netdev, u32 data) 142 + { 143 + if (data) 144 + netdev->features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); 145 + else 146 + netdev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); 147 + return 0; 148 + } 149 + 150 + static int igbvf_set_tso(struct net_device *netdev, u32 data) 151 + { 152 + struct igbvf_adapter *adapter = netdev_priv(netdev); 153 + int i; 154 + struct net_device *v_netdev; 155 + 156 + if (data) { 157 + netdev->features |= NETIF_F_TSO; 158 + netdev->features |= NETIF_F_TSO6; 159 + } else { 160 + netdev->features &= ~NETIF_F_TSO; 161 + netdev->features &= ~NETIF_F_TSO6; 162 + /* disable TSO on all VLANs if they're present */ 163 + if (!adapter->vlgrp) 164 + goto tso_out; 165 + for (i = 0; i < VLAN_GROUP_ARRAY_LEN; i++) { 166 + v_netdev = vlan_group_get_device(adapter->vlgrp, i); 167 + if (!v_netdev) 168 + continue; 169 + 170 + v_netdev->features &= ~NETIF_F_TSO; 171 + v_netdev->features &= ~NETIF_F_TSO6; 172 + vlan_group_set_device(adapter->vlgrp, i, v_netdev); 173 + } 174 + } 175 + 176 + tso_out: 177 + dev_info(&adapter->pdev->dev, "TSO is %s\n", 178 + data ? "Enabled" : "Disabled"); 179 + adapter->flags |= FLAG_TSO_FORCE; 180 + return 0; 181 + } 182 + 183 + static u32 igbvf_get_msglevel(struct net_device *netdev) 184 + { 185 + struct igbvf_adapter *adapter = netdev_priv(netdev); 186 + return adapter->msg_enable; 187 + } 188 + 189 + static void igbvf_set_msglevel(struct net_device *netdev, u32 data) 190 + { 191 + struct igbvf_adapter *adapter = netdev_priv(netdev); 192 + adapter->msg_enable = data; 193 + } 194 + 195 + static int igbvf_get_regs_len(struct net_device *netdev) 196 + { 197 + #define IGBVF_REGS_LEN 8 198 + return IGBVF_REGS_LEN * sizeof(u32); 199 + } 200 + 201 + static void igbvf_get_regs(struct net_device *netdev, 202 + struct ethtool_regs *regs, void *p) 203 + { 204 + struct igbvf_adapter *adapter = netdev_priv(netdev); 205 + struct e1000_hw *hw = &adapter->hw; 206 + u32 *regs_buff = p; 207 + u8 revision_id; 208 + 209 + memset(p, 0, IGBVF_REGS_LEN * sizeof(u32)); 210 + 211 + pci_read_config_byte(adapter->pdev, PCI_REVISION_ID, &revision_id); 212 + 213 + regs->version = (1 << 24) | (revision_id << 16) | adapter->pdev->device; 214 + 215 + regs_buff[0] = er32(CTRL); 216 + regs_buff[1] = er32(STATUS); 217 + 218 + regs_buff[2] = er32(RDLEN(0)); 219 + regs_buff[3] = er32(RDH(0)); 220 + regs_buff[4] = er32(RDT(0)); 221 + 222 + regs_buff[5] = er32(TDLEN(0)); 223 + regs_buff[6] = er32(TDH(0)); 224 + regs_buff[7] = er32(TDT(0)); 225 + } 226 + 227 + static int igbvf_get_eeprom_len(struct net_device *netdev) 228 + { 229 + return 0; 230 + } 231 + 232 + static int igbvf_get_eeprom(struct net_device *netdev, 233 + struct ethtool_eeprom *eeprom, u8 *bytes) 234 + { 235 + return -EOPNOTSUPP; 236 + } 237 + 238 + static int igbvf_set_eeprom(struct net_device *netdev, 239 + struct ethtool_eeprom *eeprom, u8 *bytes) 240 + { 241 + return -EOPNOTSUPP; 242 + } 243 + 244 + static void igbvf_get_drvinfo(struct net_device *netdev, 245 + struct ethtool_drvinfo *drvinfo) 246 + { 247 + struct igbvf_adapter *adapter = netdev_priv(netdev); 248 + char firmware_version[32] = "N/A"; 249 + 250 + strncpy(drvinfo->driver, igbvf_driver_name, 32); 251 + strncpy(drvinfo->version, igbvf_driver_version, 32); 252 + strncpy(drvinfo->fw_version, firmware_version, 32); 253 + strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); 254 + drvinfo->regdump_len = igbvf_get_regs_len(netdev); 255 + drvinfo->eedump_len = igbvf_get_eeprom_len(netdev); 256 + } 257 + 258 + static void igbvf_get_ringparam(struct net_device *netdev, 259 + struct ethtool_ringparam *ring) 260 + { 261 + struct igbvf_adapter *adapter = netdev_priv(netdev); 262 + struct igbvf_ring *tx_ring = adapter->tx_ring; 263 + struct igbvf_ring *rx_ring = adapter->rx_ring; 264 + 265 + ring->rx_max_pending = IGBVF_MAX_RXD; 266 + ring->tx_max_pending = IGBVF_MAX_TXD; 267 + ring->rx_mini_max_pending = 0; 268 + ring->rx_jumbo_max_pending = 0; 269 + ring->rx_pending = rx_ring->count; 270 + ring->tx_pending = tx_ring->count; 271 + ring->rx_mini_pending = 0; 272 + ring->rx_jumbo_pending = 0; 273 + } 274 + 275 + static int igbvf_set_ringparam(struct net_device *netdev, 276 + struct ethtool_ringparam *ring) 277 + { 278 + struct igbvf_adapter *adapter = netdev_priv(netdev); 279 + struct igbvf_ring *temp_ring; 280 + int err; 281 + u32 new_rx_count, new_tx_count; 282 + 283 + if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending)) 284 + return -EINVAL; 285 + 286 + new_rx_count = max(ring->rx_pending, (u32)IGBVF_MIN_RXD); 287 + new_rx_count = min(new_rx_count, (u32)IGBVF_MAX_RXD); 288 + new_rx_count = ALIGN(new_rx_count, REQ_RX_DESCRIPTOR_MULTIPLE); 289 + 290 + new_tx_count = max(ring->tx_pending, (u32)IGBVF_MIN_TXD); 291 + new_tx_count = min(new_tx_count, (u32)IGBVF_MAX_TXD); 292 + new_tx_count = ALIGN(new_tx_count, REQ_TX_DESCRIPTOR_MULTIPLE); 293 + 294 + if ((new_tx_count == adapter->tx_ring->count) && 295 + (new_rx_count == adapter->rx_ring->count)) { 296 + /* nothing to do */ 297 + return 0; 298 + } 299 + 300 + temp_ring = vmalloc(sizeof(struct igbvf_ring)); 301 + if (!temp_ring) 302 + return -ENOMEM; 303 + 304 + while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) 305 + msleep(1); 306 + 307 + if (netif_running(adapter->netdev)) 308 + igbvf_down(adapter); 309 + 310 + /* 311 + * We can't just free everything and then setup again, 312 + * because the ISRs in MSI-X mode get passed pointers 313 + * to the tx and rx ring structs. 314 + */ 315 + if (new_tx_count != adapter->tx_ring->count) { 316 + memcpy(temp_ring, adapter->tx_ring, sizeof(struct igbvf_ring)); 317 + 318 + temp_ring->count = new_tx_count; 319 + err = igbvf_setup_tx_resources(adapter, temp_ring); 320 + if (err) 321 + goto err_setup; 322 + 323 + igbvf_free_tx_resources(adapter->tx_ring); 324 + 325 + memcpy(adapter->tx_ring, temp_ring, sizeof(struct igbvf_ring)); 326 + } 327 + 328 + if (new_rx_count != adapter->rx_ring->count) { 329 + memcpy(temp_ring, adapter->rx_ring, sizeof(struct igbvf_ring)); 330 + 331 + temp_ring->count = new_rx_count; 332 + err = igbvf_setup_rx_resources(adapter, temp_ring); 333 + if (err) 334 + goto err_setup; 335 + 336 + igbvf_free_rx_resources(adapter->rx_ring); 337 + 338 + memcpy(adapter->rx_ring, temp_ring,sizeof(struct igbvf_ring)); 339 + } 340 + 341 + err = 0; 342 + err_setup: 343 + if (netif_running(adapter->netdev)) 344 + igbvf_up(adapter); 345 + 346 + clear_bit(__IGBVF_RESETTING, &adapter->state); 347 + vfree(temp_ring); 348 + return err; 349 + } 350 + 351 + static int igbvf_link_test(struct igbvf_adapter *adapter, u64 *data) 352 + { 353 + struct e1000_hw *hw = &adapter->hw; 354 + *data = 0; 355 + 356 + hw->mac.ops.check_for_link(hw); 357 + 358 + if (!(er32(STATUS) & E1000_STATUS_LU)) 359 + *data = 1; 360 + 361 + return *data; 362 + } 363 + 364 + static int igbvf_get_self_test_count(struct net_device *netdev) 365 + { 366 + return IGBVF_TEST_LEN; 367 + } 368 + 369 + static int igbvf_get_stats_count(struct net_device *netdev) 370 + { 371 + return IGBVF_GLOBAL_STATS_LEN; 372 + } 373 + 374 + static void igbvf_diag_test(struct net_device *netdev, 375 + struct ethtool_test *eth_test, u64 *data) 376 + { 377 + struct igbvf_adapter *adapter = netdev_priv(netdev); 378 + 379 + set_bit(__IGBVF_TESTING, &adapter->state); 380 + 381 + /* 382 + * Link test performed before hardware reset so autoneg doesn't 383 + * interfere with test result 384 + */ 385 + if (igbvf_link_test(adapter, &data[0])) 386 + eth_test->flags |= ETH_TEST_FL_FAILED; 387 + 388 + clear_bit(__IGBVF_TESTING, &adapter->state); 389 + msleep_interruptible(4 * 1000); 390 + } 391 + 392 + static void igbvf_get_wol(struct net_device *netdev, 393 + struct ethtool_wolinfo *wol) 394 + { 395 + wol->supported = 0; 396 + wol->wolopts = 0; 397 + 398 + return; 399 + } 400 + 401 + static int igbvf_set_wol(struct net_device *netdev, 402 + struct ethtool_wolinfo *wol) 403 + { 404 + return -EOPNOTSUPP; 405 + } 406 + 407 + static int igbvf_phys_id(struct net_device *netdev, u32 data) 408 + { 409 + return 0; 410 + } 411 + 412 + static int igbvf_get_coalesce(struct net_device *netdev, 413 + struct ethtool_coalesce *ec) 414 + { 415 + struct igbvf_adapter *adapter = netdev_priv(netdev); 416 + 417 + if (adapter->itr_setting <= 3) 418 + ec->rx_coalesce_usecs = adapter->itr_setting; 419 + else 420 + ec->rx_coalesce_usecs = adapter->itr_setting >> 2; 421 + 422 + return 0; 423 + } 424 + 425 + static int igbvf_set_coalesce(struct net_device *netdev, 426 + struct ethtool_coalesce *ec) 427 + { 428 + struct igbvf_adapter *adapter = netdev_priv(netdev); 429 + struct e1000_hw *hw = &adapter->hw; 430 + 431 + if ((ec->rx_coalesce_usecs > IGBVF_MAX_ITR_USECS) || 432 + ((ec->rx_coalesce_usecs > 3) && 433 + (ec->rx_coalesce_usecs < IGBVF_MIN_ITR_USECS)) || 434 + (ec->rx_coalesce_usecs == 2)) 435 + return -EINVAL; 436 + 437 + /* convert to rate of irq's per second */ 438 + if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3) { 439 + adapter->itr = IGBVF_START_ITR; 440 + adapter->itr_setting = ec->rx_coalesce_usecs; 441 + } else { 442 + adapter->itr = ec->rx_coalesce_usecs << 2; 443 + adapter->itr_setting = adapter->itr; 444 + } 445 + 446 + writel(adapter->itr, 447 + hw->hw_addr + adapter->rx_ring[0].itr_register); 448 + 449 + return 0; 450 + } 451 + 452 + static int igbvf_nway_reset(struct net_device *netdev) 453 + { 454 + struct igbvf_adapter *adapter = netdev_priv(netdev); 455 + if (netif_running(netdev)) 456 + igbvf_reinit_locked(adapter); 457 + return 0; 458 + } 459 + 460 + 461 + static void igbvf_get_ethtool_stats(struct net_device *netdev, 462 + struct ethtool_stats *stats, 463 + u64 *data) 464 + { 465 + struct igbvf_adapter *adapter = netdev_priv(netdev); 466 + int i; 467 + 468 + igbvf_update_stats(adapter); 469 + for (i = 0; i < IGBVF_GLOBAL_STATS_LEN; i++) { 470 + char *p = (char *)adapter + 471 + igbvf_gstrings_stats[i].stat_offset; 472 + char *b = (char *)adapter + 473 + igbvf_gstrings_stats[i].base_stat_offset; 474 + data[i] = ((igbvf_gstrings_stats[i].sizeof_stat == 475 + sizeof(u64)) ? (*(u64 *)p - *(u64 *)b) : 476 + (*(u32 *)p - *(u32 *)b)); 477 + } 478 + 479 + } 480 + 481 + static void igbvf_get_strings(struct net_device *netdev, u32 stringset, 482 + u8 *data) 483 + { 484 + u8 *p = data; 485 + int i; 486 + 487 + switch (stringset) { 488 + case ETH_SS_TEST: 489 + memcpy(data, *igbvf_gstrings_test, sizeof(igbvf_gstrings_test)); 490 + break; 491 + case ETH_SS_STATS: 492 + for (i = 0; i < IGBVF_GLOBAL_STATS_LEN; i++) { 493 + memcpy(p, igbvf_gstrings_stats[i].stat_string, 494 + ETH_GSTRING_LEN); 495 + p += ETH_GSTRING_LEN; 496 + } 497 + break; 498 + } 499 + } 500 + 501 + static const struct ethtool_ops igbvf_ethtool_ops = { 502 + .get_settings = igbvf_get_settings, 503 + .set_settings = igbvf_set_settings, 504 + .get_drvinfo = igbvf_get_drvinfo, 505 + .get_regs_len = igbvf_get_regs_len, 506 + .get_regs = igbvf_get_regs, 507 + .get_wol = igbvf_get_wol, 508 + .set_wol = igbvf_set_wol, 509 + .get_msglevel = igbvf_get_msglevel, 510 + .set_msglevel = igbvf_set_msglevel, 511 + .nway_reset = igbvf_nway_reset, 512 + .get_link = igbvf_get_link, 513 + .get_eeprom_len = igbvf_get_eeprom_len, 514 + .get_eeprom = igbvf_get_eeprom, 515 + .set_eeprom = igbvf_set_eeprom, 516 + .get_ringparam = igbvf_get_ringparam, 517 + .set_ringparam = igbvf_set_ringparam, 518 + .get_pauseparam = igbvf_get_pauseparam, 519 + .set_pauseparam = igbvf_set_pauseparam, 520 + .get_tx_csum = igbvf_get_tx_csum, 521 + .set_tx_csum = igbvf_set_tx_csum, 522 + .get_sg = ethtool_op_get_sg, 523 + .set_sg = ethtool_op_set_sg, 524 + .get_tso = ethtool_op_get_tso, 525 + .set_tso = igbvf_set_tso, 526 + .self_test = igbvf_diag_test, 527 + .get_strings = igbvf_get_strings, 528 + .phys_id = igbvf_phys_id, 529 + .get_ethtool_stats = igbvf_get_ethtool_stats, 530 + .self_test_count = igbvf_get_self_test_count, 531 + .get_stats_count = igbvf_get_stats_count, 532 + .get_coalesce = igbvf_get_coalesce, 533 + .set_coalesce = igbvf_set_coalesce, 534 + }; 535 + 536 + void igbvf_set_ethtool_ops(struct net_device *netdev) 537 + { 538 + /* have to "undeclare" const on this struct to remove warnings */ 539 + SET_ETHTOOL_OPS(netdev, (struct ethtool_ops *)&igbvf_ethtool_ops); 540 + }
+335
drivers/net/igbvf/igbvf.h
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + /* Linux PRO/1000 Ethernet Driver main header file */ 29 + 30 + #ifndef _IGBVF_H_ 31 + #define _IGBVF_H_ 32 + 33 + #include <linux/types.h> 34 + #include <linux/timer.h> 35 + #include <linux/io.h> 36 + #include <linux/netdevice.h> 37 + 38 + 39 + #include "vf.h" 40 + 41 + /* Forward declarations */ 42 + struct igbvf_info; 43 + struct igbvf_adapter; 44 + 45 + /* Interrupt defines */ 46 + #define IGBVF_START_ITR 648 /* ~6000 ints/sec */ 47 + 48 + /* Interrupt modes, as used by the IntMode paramter */ 49 + #define IGBVF_INT_MODE_LEGACY 0 50 + #define IGBVF_INT_MODE_MSI 1 51 + #define IGBVF_INT_MODE_MSIX 2 52 + 53 + /* Tx/Rx descriptor defines */ 54 + #define IGBVF_DEFAULT_TXD 256 55 + #define IGBVF_MAX_TXD 4096 56 + #define IGBVF_MIN_TXD 80 57 + 58 + #define IGBVF_DEFAULT_RXD 256 59 + #define IGBVF_MAX_RXD 4096 60 + #define IGBVF_MIN_RXD 80 61 + 62 + #define IGBVF_MIN_ITR_USECS 10 /* 100000 irq/sec */ 63 + #define IGBVF_MAX_ITR_USECS 10000 /* 100 irq/sec */ 64 + 65 + /* RX descriptor control thresholds. 66 + * PTHRESH - MAC will consider prefetch if it has fewer than this number of 67 + * descriptors available in its onboard memory. 68 + * Setting this to 0 disables RX descriptor prefetch. 69 + * HTHRESH - MAC will only prefetch if there are at least this many descriptors 70 + * available in host memory. 71 + * If PTHRESH is 0, this should also be 0. 72 + * WTHRESH - RX descriptor writeback threshold - MAC will delay writing back 73 + * descriptors until either it has this many to write back, or the 74 + * ITR timer expires. 75 + */ 76 + #define IGBVF_RX_PTHRESH 16 77 + #define IGBVF_RX_HTHRESH 8 78 + #define IGBVF_RX_WTHRESH 1 79 + 80 + /* this is the size past which hardware will drop packets when setting LPE=0 */ 81 + #define MAXIMUM_ETHERNET_VLAN_SIZE 1522 82 + 83 + #define IGBVF_FC_PAUSE_TIME 0x0680 /* 858 usec */ 84 + 85 + /* How many Tx Descriptors do we need to call netif_wake_queue ? */ 86 + #define IGBVF_TX_QUEUE_WAKE 32 87 + /* How many Rx Buffers do we bundle into one write to the hardware ? */ 88 + #define IGBVF_RX_BUFFER_WRITE 16 /* Must be power of 2 */ 89 + 90 + #define AUTO_ALL_MODES 0 91 + #define IGBVF_EEPROM_APME 0x0400 92 + 93 + #define IGBVF_MNG_VLAN_NONE (-1) 94 + 95 + /* Number of packet split data buffers (not including the header buffer) */ 96 + #define PS_PAGE_BUFFERS (MAX_PS_BUFFERS - 1) 97 + 98 + enum igbvf_boards { 99 + board_vf, 100 + }; 101 + 102 + struct igbvf_queue_stats { 103 + u64 packets; 104 + u64 bytes; 105 + }; 106 + 107 + /* 108 + * wrappers around a pointer to a socket buffer, 109 + * so a DMA handle can be stored along with the buffer 110 + */ 111 + struct igbvf_buffer { 112 + dma_addr_t dma; 113 + struct sk_buff *skb; 114 + union { 115 + /* Tx */ 116 + struct { 117 + unsigned long time_stamp; 118 + u16 length; 119 + u16 next_to_watch; 120 + }; 121 + /* Rx */ 122 + struct { 123 + struct page *page; 124 + u64 page_dma; 125 + unsigned int page_offset; 126 + }; 127 + }; 128 + struct page *page; 129 + }; 130 + 131 + union igbvf_desc { 132 + union e1000_adv_rx_desc rx_desc; 133 + union e1000_adv_tx_desc tx_desc; 134 + struct e1000_adv_tx_context_desc tx_context_desc; 135 + }; 136 + 137 + struct igbvf_ring { 138 + struct igbvf_adapter *adapter; /* backlink */ 139 + union igbvf_desc *desc; /* pointer to ring memory */ 140 + dma_addr_t dma; /* phys address of ring */ 141 + unsigned int size; /* length of ring in bytes */ 142 + unsigned int count; /* number of desc. in ring */ 143 + 144 + u16 next_to_use; 145 + u16 next_to_clean; 146 + 147 + u16 head; 148 + u16 tail; 149 + 150 + /* array of buffer information structs */ 151 + struct igbvf_buffer *buffer_info; 152 + struct napi_struct napi; 153 + 154 + char name[IFNAMSIZ + 5]; 155 + u32 eims_value; 156 + u32 itr_val; 157 + u16 itr_register; 158 + int set_itr; 159 + 160 + struct sk_buff *rx_skb_top; 161 + 162 + struct igbvf_queue_stats stats; 163 + }; 164 + 165 + /* board specific private data structure */ 166 + struct igbvf_adapter { 167 + struct timer_list watchdog_timer; 168 + struct timer_list blink_timer; 169 + 170 + struct work_struct reset_task; 171 + struct work_struct watchdog_task; 172 + 173 + const struct igbvf_info *ei; 174 + 175 + struct vlan_group *vlgrp; 176 + u32 bd_number; 177 + u32 rx_buffer_len; 178 + u32 polling_interval; 179 + u16 mng_vlan_id; 180 + u16 link_speed; 181 + u16 link_duplex; 182 + 183 + spinlock_t tx_queue_lock; /* prevent concurrent tail updates */ 184 + 185 + /* track device up/down/testing state */ 186 + unsigned long state; 187 + 188 + /* Interrupt Throttle Rate */ 189 + u32 itr; 190 + u32 itr_setting; 191 + u16 tx_itr; 192 + u16 rx_itr; 193 + 194 + /* 195 + * Tx 196 + */ 197 + struct igbvf_ring *tx_ring /* One per active queue */ 198 + ____cacheline_aligned_in_smp; 199 + 200 + unsigned long tx_queue_len; 201 + unsigned int restart_queue; 202 + u32 txd_cmd; 203 + 204 + bool detect_tx_hung; 205 + u8 tx_timeout_factor; 206 + 207 + u32 tx_int_delay; 208 + u32 tx_abs_int_delay; 209 + 210 + unsigned int total_tx_bytes; 211 + unsigned int total_tx_packets; 212 + unsigned int total_rx_bytes; 213 + unsigned int total_rx_packets; 214 + 215 + /* Tx stats */ 216 + u32 tx_timeout_count; 217 + u32 tx_fifo_head; 218 + u32 tx_head_addr; 219 + u32 tx_fifo_size; 220 + u32 tx_dma_failed; 221 + 222 + /* 223 + * Rx 224 + */ 225 + struct igbvf_ring *rx_ring; 226 + 227 + u32 rx_int_delay; 228 + u32 rx_abs_int_delay; 229 + 230 + /* Rx stats */ 231 + u64 hw_csum_err; 232 + u64 hw_csum_good; 233 + u64 rx_hdr_split; 234 + u32 alloc_rx_buff_failed; 235 + u32 rx_dma_failed; 236 + 237 + unsigned int rx_ps_hdr_size; 238 + u32 max_frame_size; 239 + u32 min_frame_size; 240 + 241 + /* OS defined structs */ 242 + struct net_device *netdev; 243 + struct pci_dev *pdev; 244 + struct net_device_stats net_stats; 245 + spinlock_t stats_lock; /* prevent concurrent stats updates */ 246 + 247 + /* structs defined in e1000_hw.h */ 248 + struct e1000_hw hw; 249 + 250 + /* The VF counters don't clear on read so we have to get a base 251 + * count on driver start up and always subtract that base on 252 + * on the first update, thus the flag.. 253 + */ 254 + struct e1000_vf_stats stats; 255 + u64 zero_base; 256 + 257 + struct igbvf_ring test_tx_ring; 258 + struct igbvf_ring test_rx_ring; 259 + u32 test_icr; 260 + 261 + u32 msg_enable; 262 + struct msix_entry *msix_entries; 263 + int int_mode; 264 + u32 eims_enable_mask; 265 + u32 eims_other; 266 + u32 int_counter0; 267 + u32 int_counter1; 268 + 269 + u32 eeprom_wol; 270 + u32 wol; 271 + u32 pba; 272 + 273 + bool fc_autoneg; 274 + 275 + unsigned long led_status; 276 + 277 + unsigned int flags; 278 + }; 279 + 280 + struct igbvf_info { 281 + enum e1000_mac_type mac; 282 + unsigned int flags; 283 + u32 pba; 284 + void (*init_ops)(struct e1000_hw *); 285 + s32 (*get_variants)(struct igbvf_adapter *); 286 + }; 287 + 288 + /* hardware capability, feature, and workaround flags */ 289 + #define FLAG_HAS_HW_VLAN_FILTER (1 << 0) 290 + #define FLAG_HAS_JUMBO_FRAMES (1 << 1) 291 + #define FLAG_MSI_ENABLED (1 << 2) 292 + #define FLAG_RX_CSUM_ENABLED (1 << 3) 293 + #define FLAG_TSO_FORCE (1 << 4) 294 + 295 + #define IGBVF_RX_DESC_ADV(R, i) \ 296 + (&((((R).desc))[i].rx_desc)) 297 + #define IGBVF_TX_DESC_ADV(R, i) \ 298 + (&((((R).desc))[i].tx_desc)) 299 + #define IGBVF_TX_CTXTDESC_ADV(R, i) \ 300 + (&((((R).desc))[i].tx_context_desc)) 301 + 302 + enum igbvf_state_t { 303 + __IGBVF_TESTING, 304 + __IGBVF_RESETTING, 305 + __IGBVF_DOWN 306 + }; 307 + 308 + enum latency_range { 309 + lowest_latency = 0, 310 + low_latency = 1, 311 + bulk_latency = 2, 312 + latency_invalid = 255 313 + }; 314 + 315 + extern char igbvf_driver_name[]; 316 + extern const char igbvf_driver_version[]; 317 + 318 + extern void igbvf_check_options(struct igbvf_adapter *); 319 + extern void igbvf_set_ethtool_ops(struct net_device *); 320 + 321 + extern int igbvf_up(struct igbvf_adapter *); 322 + extern void igbvf_down(struct igbvf_adapter *); 323 + extern void igbvf_reinit_locked(struct igbvf_adapter *); 324 + extern void igbvf_reset(struct igbvf_adapter *); 325 + extern int igbvf_setup_rx_resources(struct igbvf_adapter *, struct igbvf_ring *); 326 + extern int igbvf_setup_tx_resources(struct igbvf_adapter *, struct igbvf_ring *); 327 + extern void igbvf_free_rx_resources(struct igbvf_ring *); 328 + extern void igbvf_free_tx_resources(struct igbvf_ring *); 329 + extern void igbvf_update_stats(struct igbvf_adapter *); 330 + extern void igbvf_set_interrupt_capability(struct igbvf_adapter *); 331 + extern void igbvf_reset_interrupt_capability(struct igbvf_adapter *); 332 + 333 + extern unsigned int copybreak; 334 + 335 + #endif /* _IGBVF_H_ */
+350
drivers/net/igbvf/mbx.c
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + #include "mbx.h" 29 + 30 + /** 31 + * e1000_poll_for_msg - Wait for message notification 32 + * @hw: pointer to the HW structure 33 + * 34 + * returns SUCCESS if it successfully received a message notification 35 + **/ 36 + static s32 e1000_poll_for_msg(struct e1000_hw *hw) 37 + { 38 + struct e1000_mbx_info *mbx = &hw->mbx; 39 + int countdown = mbx->timeout; 40 + 41 + if (!mbx->ops.check_for_msg) 42 + goto out; 43 + 44 + while (countdown && mbx->ops.check_for_msg(hw)) { 45 + countdown--; 46 + udelay(mbx->usec_delay); 47 + } 48 + 49 + /* if we failed, all future posted messages fail until reset */ 50 + if (!countdown) 51 + mbx->timeout = 0; 52 + out: 53 + return countdown ? E1000_SUCCESS : -E1000_ERR_MBX; 54 + } 55 + 56 + /** 57 + * e1000_poll_for_ack - Wait for message acknowledgement 58 + * @hw: pointer to the HW structure 59 + * 60 + * returns SUCCESS if it successfully received a message acknowledgement 61 + **/ 62 + static s32 e1000_poll_for_ack(struct e1000_hw *hw) 63 + { 64 + struct e1000_mbx_info *mbx = &hw->mbx; 65 + int countdown = mbx->timeout; 66 + 67 + if (!mbx->ops.check_for_ack) 68 + goto out; 69 + 70 + while (countdown && mbx->ops.check_for_ack(hw)) { 71 + countdown--; 72 + udelay(mbx->usec_delay); 73 + } 74 + 75 + /* if we failed, all future posted messages fail until reset */ 76 + if (!countdown) 77 + mbx->timeout = 0; 78 + out: 79 + return countdown ? E1000_SUCCESS : -E1000_ERR_MBX; 80 + } 81 + 82 + /** 83 + * e1000_read_posted_mbx - Wait for message notification and receive message 84 + * @hw: pointer to the HW structure 85 + * @msg: The message buffer 86 + * @size: Length of buffer 87 + * 88 + * returns SUCCESS if it successfully received a message notification and 89 + * copied it into the receive buffer. 90 + **/ 91 + static s32 e1000_read_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size) 92 + { 93 + struct e1000_mbx_info *mbx = &hw->mbx; 94 + s32 ret_val = -E1000_ERR_MBX; 95 + 96 + if (!mbx->ops.read) 97 + goto out; 98 + 99 + ret_val = e1000_poll_for_msg(hw); 100 + 101 + /* if ack received read message, otherwise we timed out */ 102 + if (!ret_val) 103 + ret_val = mbx->ops.read(hw, msg, size); 104 + out: 105 + return ret_val; 106 + } 107 + 108 + /** 109 + * e1000_write_posted_mbx - Write a message to the mailbox, wait for ack 110 + * @hw: pointer to the HW structure 111 + * @msg: The message buffer 112 + * @size: Length of buffer 113 + * 114 + * returns SUCCESS if it successfully copied message into the buffer and 115 + * received an ack to that message within delay * timeout period 116 + **/ 117 + static s32 e1000_write_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size) 118 + { 119 + struct e1000_mbx_info *mbx = &hw->mbx; 120 + s32 ret_val = -E1000_ERR_MBX; 121 + 122 + /* exit if we either can't write or there isn't a defined timeout */ 123 + if (!mbx->ops.write || !mbx->timeout) 124 + goto out; 125 + 126 + /* send msg*/ 127 + ret_val = mbx->ops.write(hw, msg, size); 128 + 129 + /* if msg sent wait until we receive an ack */ 130 + if (!ret_val) 131 + ret_val = e1000_poll_for_ack(hw); 132 + out: 133 + return ret_val; 134 + } 135 + 136 + /** 137 + * e1000_read_v2p_mailbox - read v2p mailbox 138 + * @hw: pointer to the HW structure 139 + * 140 + * This function is used to read the v2p mailbox without losing the read to 141 + * clear status bits. 142 + **/ 143 + static u32 e1000_read_v2p_mailbox(struct e1000_hw *hw) 144 + { 145 + u32 v2p_mailbox = er32(V2PMAILBOX(0)); 146 + 147 + v2p_mailbox |= hw->dev_spec.vf.v2p_mailbox; 148 + hw->dev_spec.vf.v2p_mailbox |= v2p_mailbox & E1000_V2PMAILBOX_R2C_BITS; 149 + 150 + return v2p_mailbox; 151 + } 152 + 153 + /** 154 + * e1000_check_for_bit_vf - Determine if a status bit was set 155 + * @hw: pointer to the HW structure 156 + * @mask: bitmask for bits to be tested and cleared 157 + * 158 + * This function is used to check for the read to clear bits within 159 + * the V2P mailbox. 160 + **/ 161 + static s32 e1000_check_for_bit_vf(struct e1000_hw *hw, u32 mask) 162 + { 163 + u32 v2p_mailbox = e1000_read_v2p_mailbox(hw); 164 + s32 ret_val = -E1000_ERR_MBX; 165 + 166 + if (v2p_mailbox & mask) 167 + ret_val = E1000_SUCCESS; 168 + 169 + hw->dev_spec.vf.v2p_mailbox &= ~mask; 170 + 171 + return ret_val; 172 + } 173 + 174 + /** 175 + * e1000_check_for_msg_vf - checks to see if the PF has sent mail 176 + * @hw: pointer to the HW structure 177 + * 178 + * returns SUCCESS if the PF has set the Status bit or else ERR_MBX 179 + **/ 180 + static s32 e1000_check_for_msg_vf(struct e1000_hw *hw) 181 + { 182 + s32 ret_val = -E1000_ERR_MBX; 183 + 184 + if (!e1000_check_for_bit_vf(hw, E1000_V2PMAILBOX_PFSTS)) { 185 + ret_val = E1000_SUCCESS; 186 + hw->mbx.stats.reqs++; 187 + } 188 + 189 + return ret_val; 190 + } 191 + 192 + /** 193 + * e1000_check_for_ack_vf - checks to see if the PF has ACK'd 194 + * @hw: pointer to the HW structure 195 + * 196 + * returns SUCCESS if the PF has set the ACK bit or else ERR_MBX 197 + **/ 198 + static s32 e1000_check_for_ack_vf(struct e1000_hw *hw) 199 + { 200 + s32 ret_val = -E1000_ERR_MBX; 201 + 202 + if (!e1000_check_for_bit_vf(hw, E1000_V2PMAILBOX_PFACK)) { 203 + ret_val = E1000_SUCCESS; 204 + hw->mbx.stats.acks++; 205 + } 206 + 207 + return ret_val; 208 + } 209 + 210 + /** 211 + * e1000_check_for_rst_vf - checks to see if the PF has reset 212 + * @hw: pointer to the HW structure 213 + * 214 + * returns true if the PF has set the reset done bit or else false 215 + **/ 216 + static s32 e1000_check_for_rst_vf(struct e1000_hw *hw) 217 + { 218 + s32 ret_val = -E1000_ERR_MBX; 219 + 220 + if (!e1000_check_for_bit_vf(hw, (E1000_V2PMAILBOX_RSTD | 221 + E1000_V2PMAILBOX_RSTI))) { 222 + ret_val = E1000_SUCCESS; 223 + hw->mbx.stats.rsts++; 224 + } 225 + 226 + return ret_val; 227 + } 228 + 229 + /** 230 + * e1000_obtain_mbx_lock_vf - obtain mailbox lock 231 + * @hw: pointer to the HW structure 232 + * 233 + * return SUCCESS if we obtained the mailbox lock 234 + **/ 235 + static s32 e1000_obtain_mbx_lock_vf(struct e1000_hw *hw) 236 + { 237 + s32 ret_val = -E1000_ERR_MBX; 238 + 239 + /* Take ownership of the buffer */ 240 + ew32(V2PMAILBOX(0), E1000_V2PMAILBOX_VFU); 241 + 242 + /* reserve mailbox for vf use */ 243 + if (e1000_read_v2p_mailbox(hw) & E1000_V2PMAILBOX_VFU) 244 + ret_val = E1000_SUCCESS; 245 + 246 + return ret_val; 247 + } 248 + 249 + /** 250 + * e1000_write_mbx_vf - Write a message to the mailbox 251 + * @hw: pointer to the HW structure 252 + * @msg: The message buffer 253 + * @size: Length of buffer 254 + * 255 + * returns SUCCESS if it successfully copied message into the buffer 256 + **/ 257 + static s32 e1000_write_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size) 258 + { 259 + s32 err; 260 + u16 i; 261 + 262 + /* lock the mailbox to prevent pf/vf race condition */ 263 + err = e1000_obtain_mbx_lock_vf(hw); 264 + if (err) 265 + goto out_no_write; 266 + 267 + /* flush any ack or msg as we are going to overwrite mailbox */ 268 + e1000_check_for_ack_vf(hw); 269 + e1000_check_for_msg_vf(hw); 270 + 271 + /* copy the caller specified message to the mailbox memory buffer */ 272 + for (i = 0; i < size; i++) 273 + array_ew32(VMBMEM(0), i, msg[i]); 274 + 275 + /* update stats */ 276 + hw->mbx.stats.msgs_tx++; 277 + 278 + /* Drop VFU and interrupt the PF to tell it a message has been sent */ 279 + ew32(V2PMAILBOX(0), E1000_V2PMAILBOX_REQ); 280 + 281 + out_no_write: 282 + return err; 283 + } 284 + 285 + /** 286 + * e1000_read_mbx_vf - Reads a message from the inbox intended for vf 287 + * @hw: pointer to the HW structure 288 + * @msg: The message buffer 289 + * @size: Length of buffer 290 + * 291 + * returns SUCCESS if it successfuly read message from buffer 292 + **/ 293 + static s32 e1000_read_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size) 294 + { 295 + s32 err; 296 + u16 i; 297 + 298 + /* lock the mailbox to prevent pf/vf race condition */ 299 + err = e1000_obtain_mbx_lock_vf(hw); 300 + if (err) 301 + goto out_no_read; 302 + 303 + /* copy the message from the mailbox memory buffer */ 304 + for (i = 0; i < size; i++) 305 + msg[i] = array_er32(VMBMEM(0), i); 306 + 307 + /* Acknowledge receipt and release mailbox, then we're done */ 308 + ew32(V2PMAILBOX(0), E1000_V2PMAILBOX_ACK); 309 + 310 + /* update stats */ 311 + hw->mbx.stats.msgs_rx++; 312 + 313 + out_no_read: 314 + return err; 315 + } 316 + 317 + /** 318 + * e1000_init_mbx_params_vf - set initial values for vf mailbox 319 + * @hw: pointer to the HW structure 320 + * 321 + * Initializes the hw->mbx struct to correct values for vf mailbox 322 + */ 323 + s32 e1000_init_mbx_params_vf(struct e1000_hw *hw) 324 + { 325 + struct e1000_mbx_info *mbx = &hw->mbx; 326 + 327 + /* start mailbox as timed out and let the reset_hw call set the timeout 328 + * value to being communications */ 329 + mbx->timeout = 0; 330 + mbx->usec_delay = E1000_VF_MBX_INIT_DELAY; 331 + 332 + mbx->size = E1000_VFMAILBOX_SIZE; 333 + 334 + mbx->ops.read = e1000_read_mbx_vf; 335 + mbx->ops.write = e1000_write_mbx_vf; 336 + mbx->ops.read_posted = e1000_read_posted_mbx; 337 + mbx->ops.write_posted = e1000_write_posted_mbx; 338 + mbx->ops.check_for_msg = e1000_check_for_msg_vf; 339 + mbx->ops.check_for_ack = e1000_check_for_ack_vf; 340 + mbx->ops.check_for_rst = e1000_check_for_rst_vf; 341 + 342 + mbx->stats.msgs_tx = 0; 343 + mbx->stats.msgs_rx = 0; 344 + mbx->stats.reqs = 0; 345 + mbx->stats.acks = 0; 346 + mbx->stats.rsts = 0; 347 + 348 + return E1000_SUCCESS; 349 + } 350 +
+75
drivers/net/igbvf/mbx.h
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 1999 - 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + #ifndef _E1000_MBX_H_ 29 + #define _E1000_MBX_H_ 30 + 31 + #include "vf.h" 32 + 33 + #define E1000_V2PMAILBOX_REQ 0x00000001 /* Request for PF Ready bit */ 34 + #define E1000_V2PMAILBOX_ACK 0x00000002 /* Ack PF message received */ 35 + #define E1000_V2PMAILBOX_VFU 0x00000004 /* VF owns the mailbox buffer */ 36 + #define E1000_V2PMAILBOX_PFU 0x00000008 /* PF owns the mailbox buffer */ 37 + #define E1000_V2PMAILBOX_PFSTS 0x00000010 /* PF wrote a message in the MB */ 38 + #define E1000_V2PMAILBOX_PFACK 0x00000020 /* PF ack the previous VF msg */ 39 + #define E1000_V2PMAILBOX_RSTI 0x00000040 /* PF has reset indication */ 40 + #define E1000_V2PMAILBOX_RSTD 0x00000080 /* PF has indicated reset done */ 41 + #define E1000_V2PMAILBOX_R2C_BITS 0x000000B0 /* All read to clear bits */ 42 + 43 + #define E1000_VFMAILBOX_SIZE 16 /* 16 32 bit words - 64 bytes */ 44 + 45 + /* If it's a E1000_VF_* msg then it originates in the VF and is sent to the 46 + * PF. The reverse is true if it is E1000_PF_*. 47 + * Message ACK's are the value or'd with 0xF0000000 48 + */ 49 + #define E1000_VT_MSGTYPE_ACK 0x80000000 /* Messages below or'd with 50 + * this are the ACK */ 51 + #define E1000_VT_MSGTYPE_NACK 0x40000000 /* Messages below or'd with 52 + * this are the NACK */ 53 + #define E1000_VT_MSGTYPE_CTS 0x20000000 /* Indicates that VF is still 54 + clear to send requests */ 55 + 56 + /* We have a total wait time of 1s for vf mailbox posted messages */ 57 + #define E1000_VF_MBX_INIT_TIMEOUT 2000 /* retry count for mailbox timeout */ 58 + #define E1000_VF_MBX_INIT_DELAY 500 /* usec delay between retries */ 59 + 60 + #define E1000_VT_MSGINFO_SHIFT 16 61 + /* bits 23:16 are used for exra info for certain messages */ 62 + #define E1000_VT_MSGINFO_MASK (0xFF << E1000_VT_MSGINFO_SHIFT) 63 + 64 + #define E1000_VF_RESET 0x01 /* VF requests reset */ 65 + #define E1000_VF_SET_MAC_ADDR 0x02 /* VF requests PF to set MAC addr */ 66 + #define E1000_VF_SET_MULTICAST 0x03 /* VF requests PF to set MC addr */ 67 + #define E1000_VF_SET_VLAN 0x04 /* VF requests PF to set VLAN */ 68 + #define E1000_VF_SET_LPE 0x05 /* VF requests PF to set VMOLR.LPE */ 69 + 70 + #define E1000_PF_CONTROL_MSG 0x0100 /* PF control message */ 71 + 72 + void e1000_init_mbx_ops_generic(struct e1000_hw *hw); 73 + s32 e1000_init_mbx_params_vf(struct e1000_hw *); 74 + 75 + #endif /* _E1000_MBX_H_ */
+2919
drivers/net/igbvf/netdev.c
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + #include <linux/module.h> 29 + #include <linux/types.h> 30 + #include <linux/init.h> 31 + #include <linux/pci.h> 32 + #include <linux/vmalloc.h> 33 + #include <linux/pagemap.h> 34 + #include <linux/delay.h> 35 + #include <linux/netdevice.h> 36 + #include <linux/tcp.h> 37 + #include <linux/ipv6.h> 38 + #include <net/checksum.h> 39 + #include <net/ip6_checksum.h> 40 + #include <linux/mii.h> 41 + #include <linux/ethtool.h> 42 + #include <linux/if_vlan.h> 43 + #include <linux/pm_qos_params.h> 44 + 45 + #include "igbvf.h" 46 + 47 + #define DRV_VERSION "1.0.0-k0" 48 + char igbvf_driver_name[] = "igbvf"; 49 + const char igbvf_driver_version[] = DRV_VERSION; 50 + static const char igbvf_driver_string[] = 51 + "Intel(R) Virtual Function Network Driver"; 52 + static const char igbvf_copyright[] = "Copyright (c) 2009 Intel Corporation."; 53 + 54 + static int igbvf_poll(struct napi_struct *napi, int budget); 55 + 56 + static struct igbvf_info igbvf_vf_info = { 57 + .mac = e1000_vfadapt, 58 + .flags = FLAG_HAS_JUMBO_FRAMES 59 + | FLAG_RX_CSUM_ENABLED, 60 + .pba = 10, 61 + .init_ops = e1000_init_function_pointers_vf, 62 + }; 63 + 64 + static const struct igbvf_info *igbvf_info_tbl[] = { 65 + [board_vf] = &igbvf_vf_info, 66 + }; 67 + 68 + /** 69 + * igbvf_desc_unused - calculate if we have unused descriptors 70 + **/ 71 + static int igbvf_desc_unused(struct igbvf_ring *ring) 72 + { 73 + if (ring->next_to_clean > ring->next_to_use) 74 + return ring->next_to_clean - ring->next_to_use - 1; 75 + 76 + return ring->count + ring->next_to_clean - ring->next_to_use - 1; 77 + } 78 + 79 + /** 80 + * igbvf_receive_skb - helper function to handle Rx indications 81 + * @adapter: board private structure 82 + * @status: descriptor status field as written by hardware 83 + * @vlan: descriptor vlan field as written by hardware (no le/be conversion) 84 + * @skb: pointer to sk_buff to be indicated to stack 85 + **/ 86 + static void igbvf_receive_skb(struct igbvf_adapter *adapter, 87 + struct net_device *netdev, 88 + struct sk_buff *skb, 89 + u32 status, u16 vlan) 90 + { 91 + if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) 92 + vlan_hwaccel_receive_skb(skb, adapter->vlgrp, 93 + le16_to_cpu(vlan) & 94 + E1000_RXD_SPC_VLAN_MASK); 95 + else 96 + netif_receive_skb(skb); 97 + 98 + netdev->last_rx = jiffies; 99 + } 100 + 101 + static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter, 102 + u32 status_err, struct sk_buff *skb) 103 + { 104 + skb->ip_summed = CHECKSUM_NONE; 105 + 106 + /* Ignore Checksum bit is set or checksum is disabled through ethtool */ 107 + if ((status_err & E1000_RXD_STAT_IXSM)) 108 + return; 109 + /* TCP/UDP checksum error bit is set */ 110 + if (status_err & 111 + (E1000_RXDEXT_STATERR_TCPE | E1000_RXDEXT_STATERR_IPE)) { 112 + /* let the stack verify checksum errors */ 113 + adapter->hw_csum_err++; 114 + return; 115 + } 116 + /* It must be a TCP or UDP packet with a valid checksum */ 117 + if (status_err & (E1000_RXD_STAT_TCPCS | E1000_RXD_STAT_UDPCS)) 118 + skb->ip_summed = CHECKSUM_UNNECESSARY; 119 + 120 + adapter->hw_csum_good++; 121 + } 122 + 123 + /** 124 + * igbvf_alloc_rx_buffers - Replace used receive buffers; packet split 125 + * @rx_ring: address of ring structure to repopulate 126 + * @cleaned_count: number of buffers to repopulate 127 + **/ 128 + static void igbvf_alloc_rx_buffers(struct igbvf_ring *rx_ring, 129 + int cleaned_count) 130 + { 131 + struct igbvf_adapter *adapter = rx_ring->adapter; 132 + struct net_device *netdev = adapter->netdev; 133 + struct pci_dev *pdev = adapter->pdev; 134 + union e1000_adv_rx_desc *rx_desc; 135 + struct igbvf_buffer *buffer_info; 136 + struct sk_buff *skb; 137 + unsigned int i; 138 + int bufsz; 139 + 140 + i = rx_ring->next_to_use; 141 + buffer_info = &rx_ring->buffer_info[i]; 142 + 143 + if (adapter->rx_ps_hdr_size) 144 + bufsz = adapter->rx_ps_hdr_size; 145 + else 146 + bufsz = adapter->rx_buffer_len; 147 + bufsz += NET_IP_ALIGN; 148 + 149 + while (cleaned_count--) { 150 + rx_desc = IGBVF_RX_DESC_ADV(*rx_ring, i); 151 + 152 + if (adapter->rx_ps_hdr_size && !buffer_info->page_dma) { 153 + if (!buffer_info->page) { 154 + buffer_info->page = alloc_page(GFP_ATOMIC); 155 + if (!buffer_info->page) { 156 + adapter->alloc_rx_buff_failed++; 157 + goto no_buffers; 158 + } 159 + buffer_info->page_offset = 0; 160 + } else { 161 + buffer_info->page_offset ^= PAGE_SIZE / 2; 162 + } 163 + buffer_info->page_dma = 164 + pci_map_page(pdev, buffer_info->page, 165 + buffer_info->page_offset, 166 + PAGE_SIZE / 2, 167 + PCI_DMA_FROMDEVICE); 168 + } 169 + 170 + if (!buffer_info->skb) { 171 + skb = netdev_alloc_skb(netdev, bufsz); 172 + if (!skb) { 173 + adapter->alloc_rx_buff_failed++; 174 + goto no_buffers; 175 + } 176 + 177 + /* Make buffer alignment 2 beyond a 16 byte boundary 178 + * this will result in a 16 byte aligned IP header after 179 + * the 14 byte MAC header is removed 180 + */ 181 + skb_reserve(skb, NET_IP_ALIGN); 182 + 183 + buffer_info->skb = skb; 184 + buffer_info->dma = pci_map_single(pdev, skb->data, 185 + bufsz, 186 + PCI_DMA_FROMDEVICE); 187 + } 188 + /* Refresh the desc even if buffer_addrs didn't change because 189 + * each write-back erases this info. */ 190 + if (adapter->rx_ps_hdr_size) { 191 + rx_desc->read.pkt_addr = 192 + cpu_to_le64(buffer_info->page_dma); 193 + rx_desc->read.hdr_addr = cpu_to_le64(buffer_info->dma); 194 + } else { 195 + rx_desc->read.pkt_addr = 196 + cpu_to_le64(buffer_info->dma); 197 + rx_desc->read.hdr_addr = 0; 198 + } 199 + 200 + i++; 201 + if (i == rx_ring->count) 202 + i = 0; 203 + buffer_info = &rx_ring->buffer_info[i]; 204 + } 205 + 206 + no_buffers: 207 + if (rx_ring->next_to_use != i) { 208 + rx_ring->next_to_use = i; 209 + if (i == 0) 210 + i = (rx_ring->count - 1); 211 + else 212 + i--; 213 + 214 + /* Force memory writes to complete before letting h/w 215 + * know there are new descriptors to fetch. (Only 216 + * applicable for weak-ordered memory model archs, 217 + * such as IA-64). */ 218 + wmb(); 219 + writel(i, adapter->hw.hw_addr + rx_ring->tail); 220 + } 221 + } 222 + 223 + /** 224 + * igbvf_clean_rx_irq - Send received data up the network stack; legacy 225 + * @adapter: board private structure 226 + * 227 + * the return value indicates whether actual cleaning was done, there 228 + * is no guarantee that everything was cleaned 229 + **/ 230 + static bool igbvf_clean_rx_irq(struct igbvf_adapter *adapter, 231 + int *work_done, int work_to_do) 232 + { 233 + struct igbvf_ring *rx_ring = adapter->rx_ring; 234 + struct net_device *netdev = adapter->netdev; 235 + struct pci_dev *pdev = adapter->pdev; 236 + union e1000_adv_rx_desc *rx_desc, *next_rxd; 237 + struct igbvf_buffer *buffer_info, *next_buffer; 238 + struct sk_buff *skb; 239 + bool cleaned = false; 240 + int cleaned_count = 0; 241 + unsigned int total_bytes = 0, total_packets = 0; 242 + unsigned int i; 243 + u32 length, hlen, staterr; 244 + 245 + i = rx_ring->next_to_clean; 246 + rx_desc = IGBVF_RX_DESC_ADV(*rx_ring, i); 247 + staterr = le32_to_cpu(rx_desc->wb.upper.status_error); 248 + 249 + while (staterr & E1000_RXD_STAT_DD) { 250 + if (*work_done >= work_to_do) 251 + break; 252 + (*work_done)++; 253 + 254 + buffer_info = &rx_ring->buffer_info[i]; 255 + 256 + /* HW will not DMA in data larger than the given buffer, even 257 + * if it parses the (NFS, of course) header to be larger. In 258 + * that case, it fills the header buffer and spills the rest 259 + * into the page. 260 + */ 261 + hlen = (le16_to_cpu(rx_desc->wb.lower.lo_dword.hs_rss.hdr_info) & 262 + E1000_RXDADV_HDRBUFLEN_MASK) >> E1000_RXDADV_HDRBUFLEN_SHIFT; 263 + if (hlen > adapter->rx_ps_hdr_size) 264 + hlen = adapter->rx_ps_hdr_size; 265 + 266 + length = le16_to_cpu(rx_desc->wb.upper.length); 267 + cleaned = true; 268 + cleaned_count++; 269 + 270 + skb = buffer_info->skb; 271 + prefetch(skb->data - NET_IP_ALIGN); 272 + buffer_info->skb = NULL; 273 + if (!adapter->rx_ps_hdr_size) { 274 + pci_unmap_single(pdev, buffer_info->dma, 275 + adapter->rx_buffer_len, 276 + PCI_DMA_FROMDEVICE); 277 + buffer_info->dma = 0; 278 + skb_put(skb, length); 279 + goto send_up; 280 + } 281 + 282 + if (!skb_shinfo(skb)->nr_frags) { 283 + pci_unmap_single(pdev, buffer_info->dma, 284 + adapter->rx_ps_hdr_size + NET_IP_ALIGN, 285 + PCI_DMA_FROMDEVICE); 286 + skb_put(skb, hlen); 287 + } 288 + 289 + if (length) { 290 + pci_unmap_page(pdev, buffer_info->page_dma, 291 + PAGE_SIZE / 2, 292 + PCI_DMA_FROMDEVICE); 293 + buffer_info->page_dma = 0; 294 + 295 + skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags++, 296 + buffer_info->page, 297 + buffer_info->page_offset, 298 + length); 299 + 300 + if ((adapter->rx_buffer_len > (PAGE_SIZE / 2)) || 301 + (page_count(buffer_info->page) != 1)) 302 + buffer_info->page = NULL; 303 + else 304 + get_page(buffer_info->page); 305 + 306 + skb->len += length; 307 + skb->data_len += length; 308 + skb->truesize += length; 309 + } 310 + send_up: 311 + i++; 312 + if (i == rx_ring->count) 313 + i = 0; 314 + next_rxd = IGBVF_RX_DESC_ADV(*rx_ring, i); 315 + prefetch(next_rxd); 316 + next_buffer = &rx_ring->buffer_info[i]; 317 + 318 + if (!(staterr & E1000_RXD_STAT_EOP)) { 319 + buffer_info->skb = next_buffer->skb; 320 + buffer_info->dma = next_buffer->dma; 321 + next_buffer->skb = skb; 322 + next_buffer->dma = 0; 323 + goto next_desc; 324 + } 325 + 326 + if (staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) { 327 + dev_kfree_skb_irq(skb); 328 + goto next_desc; 329 + } 330 + 331 + total_bytes += skb->len; 332 + total_packets++; 333 + 334 + igbvf_rx_checksum_adv(adapter, staterr, skb); 335 + 336 + skb->protocol = eth_type_trans(skb, netdev); 337 + 338 + igbvf_receive_skb(adapter, netdev, skb, staterr, 339 + rx_desc->wb.upper.vlan); 340 + 341 + netdev->last_rx = jiffies; 342 + 343 + next_desc: 344 + rx_desc->wb.upper.status_error = 0; 345 + 346 + /* return some buffers to hardware, one at a time is too slow */ 347 + if (cleaned_count >= IGBVF_RX_BUFFER_WRITE) { 348 + igbvf_alloc_rx_buffers(rx_ring, cleaned_count); 349 + cleaned_count = 0; 350 + } 351 + 352 + /* use prefetched values */ 353 + rx_desc = next_rxd; 354 + buffer_info = next_buffer; 355 + 356 + staterr = le32_to_cpu(rx_desc->wb.upper.status_error); 357 + } 358 + 359 + rx_ring->next_to_clean = i; 360 + cleaned_count = igbvf_desc_unused(rx_ring); 361 + 362 + if (cleaned_count) 363 + igbvf_alloc_rx_buffers(rx_ring, cleaned_count); 364 + 365 + adapter->total_rx_packets += total_packets; 366 + adapter->total_rx_bytes += total_bytes; 367 + adapter->net_stats.rx_bytes += total_bytes; 368 + adapter->net_stats.rx_packets += total_packets; 369 + return cleaned; 370 + } 371 + 372 + static void igbvf_put_txbuf(struct igbvf_adapter *adapter, 373 + struct igbvf_buffer *buffer_info) 374 + { 375 + buffer_info->dma = 0; 376 + if (buffer_info->skb) { 377 + skb_dma_unmap(&adapter->pdev->dev, buffer_info->skb, 378 + DMA_TO_DEVICE); 379 + dev_kfree_skb_any(buffer_info->skb); 380 + buffer_info->skb = NULL; 381 + } 382 + buffer_info->time_stamp = 0; 383 + } 384 + 385 + static void igbvf_print_tx_hang(struct igbvf_adapter *adapter) 386 + { 387 + struct igbvf_ring *tx_ring = adapter->tx_ring; 388 + unsigned int i = tx_ring->next_to_clean; 389 + unsigned int eop = tx_ring->buffer_info[i].next_to_watch; 390 + union e1000_adv_tx_desc *eop_desc = IGBVF_TX_DESC_ADV(*tx_ring, eop); 391 + 392 + /* detected Tx unit hang */ 393 + dev_err(&adapter->pdev->dev, 394 + "Detected Tx Unit Hang:\n" 395 + " TDH <%x>\n" 396 + " TDT <%x>\n" 397 + " next_to_use <%x>\n" 398 + " next_to_clean <%x>\n" 399 + "buffer_info[next_to_clean]:\n" 400 + " time_stamp <%lx>\n" 401 + " next_to_watch <%x>\n" 402 + " jiffies <%lx>\n" 403 + " next_to_watch.status <%x>\n", 404 + readl(adapter->hw.hw_addr + tx_ring->head), 405 + readl(adapter->hw.hw_addr + tx_ring->tail), 406 + tx_ring->next_to_use, 407 + tx_ring->next_to_clean, 408 + tx_ring->buffer_info[eop].time_stamp, 409 + eop, 410 + jiffies, 411 + eop_desc->wb.status); 412 + } 413 + 414 + /** 415 + * igbvf_setup_tx_resources - allocate Tx resources (Descriptors) 416 + * @adapter: board private structure 417 + * 418 + * Return 0 on success, negative on failure 419 + **/ 420 + int igbvf_setup_tx_resources(struct igbvf_adapter *adapter, 421 + struct igbvf_ring *tx_ring) 422 + { 423 + struct pci_dev *pdev = adapter->pdev; 424 + int size; 425 + 426 + size = sizeof(struct igbvf_buffer) * tx_ring->count; 427 + tx_ring->buffer_info = vmalloc(size); 428 + if (!tx_ring->buffer_info) 429 + goto err; 430 + memset(tx_ring->buffer_info, 0, size); 431 + 432 + /* round up to nearest 4K */ 433 + tx_ring->size = tx_ring->count * sizeof(union e1000_adv_tx_desc); 434 + tx_ring->size = ALIGN(tx_ring->size, 4096); 435 + 436 + tx_ring->desc = pci_alloc_consistent(pdev, tx_ring->size, 437 + &tx_ring->dma); 438 + 439 + if (!tx_ring->desc) 440 + goto err; 441 + 442 + tx_ring->adapter = adapter; 443 + tx_ring->next_to_use = 0; 444 + tx_ring->next_to_clean = 0; 445 + 446 + return 0; 447 + err: 448 + vfree(tx_ring->buffer_info); 449 + dev_err(&adapter->pdev->dev, 450 + "Unable to allocate memory for the transmit descriptor ring\n"); 451 + return -ENOMEM; 452 + } 453 + 454 + /** 455 + * igbvf_setup_rx_resources - allocate Rx resources (Descriptors) 456 + * @adapter: board private structure 457 + * 458 + * Returns 0 on success, negative on failure 459 + **/ 460 + int igbvf_setup_rx_resources(struct igbvf_adapter *adapter, 461 + struct igbvf_ring *rx_ring) 462 + { 463 + struct pci_dev *pdev = adapter->pdev; 464 + int size, desc_len; 465 + 466 + size = sizeof(struct igbvf_buffer) * rx_ring->count; 467 + rx_ring->buffer_info = vmalloc(size); 468 + if (!rx_ring->buffer_info) 469 + goto err; 470 + memset(rx_ring->buffer_info, 0, size); 471 + 472 + desc_len = sizeof(union e1000_adv_rx_desc); 473 + 474 + /* Round up to nearest 4K */ 475 + rx_ring->size = rx_ring->count * desc_len; 476 + rx_ring->size = ALIGN(rx_ring->size, 4096); 477 + 478 + rx_ring->desc = pci_alloc_consistent(pdev, rx_ring->size, 479 + &rx_ring->dma); 480 + 481 + if (!rx_ring->desc) 482 + goto err; 483 + 484 + rx_ring->next_to_clean = 0; 485 + rx_ring->next_to_use = 0; 486 + 487 + rx_ring->adapter = adapter; 488 + 489 + return 0; 490 + 491 + err: 492 + vfree(rx_ring->buffer_info); 493 + rx_ring->buffer_info = NULL; 494 + dev_err(&adapter->pdev->dev, 495 + "Unable to allocate memory for the receive descriptor ring\n"); 496 + return -ENOMEM; 497 + } 498 + 499 + /** 500 + * igbvf_clean_tx_ring - Free Tx Buffers 501 + * @tx_ring: ring to be cleaned 502 + **/ 503 + static void igbvf_clean_tx_ring(struct igbvf_ring *tx_ring) 504 + { 505 + struct igbvf_adapter *adapter = tx_ring->adapter; 506 + struct igbvf_buffer *buffer_info; 507 + unsigned long size; 508 + unsigned int i; 509 + 510 + if (!tx_ring->buffer_info) 511 + return; 512 + 513 + /* Free all the Tx ring sk_buffs */ 514 + for (i = 0; i < tx_ring->count; i++) { 515 + buffer_info = &tx_ring->buffer_info[i]; 516 + igbvf_put_txbuf(adapter, buffer_info); 517 + } 518 + 519 + size = sizeof(struct igbvf_buffer) * tx_ring->count; 520 + memset(tx_ring->buffer_info, 0, size); 521 + 522 + /* Zero out the descriptor ring */ 523 + memset(tx_ring->desc, 0, tx_ring->size); 524 + 525 + tx_ring->next_to_use = 0; 526 + tx_ring->next_to_clean = 0; 527 + 528 + writel(0, adapter->hw.hw_addr + tx_ring->head); 529 + writel(0, adapter->hw.hw_addr + tx_ring->tail); 530 + } 531 + 532 + /** 533 + * igbvf_free_tx_resources - Free Tx Resources per Queue 534 + * @tx_ring: ring to free resources from 535 + * 536 + * Free all transmit software resources 537 + **/ 538 + void igbvf_free_tx_resources(struct igbvf_ring *tx_ring) 539 + { 540 + struct pci_dev *pdev = tx_ring->adapter->pdev; 541 + 542 + igbvf_clean_tx_ring(tx_ring); 543 + 544 + vfree(tx_ring->buffer_info); 545 + tx_ring->buffer_info = NULL; 546 + 547 + pci_free_consistent(pdev, tx_ring->size, tx_ring->desc, tx_ring->dma); 548 + 549 + tx_ring->desc = NULL; 550 + } 551 + 552 + /** 553 + * igbvf_clean_rx_ring - Free Rx Buffers per Queue 554 + * @adapter: board private structure 555 + **/ 556 + static void igbvf_clean_rx_ring(struct igbvf_ring *rx_ring) 557 + { 558 + struct igbvf_adapter *adapter = rx_ring->adapter; 559 + struct igbvf_buffer *buffer_info; 560 + struct pci_dev *pdev = adapter->pdev; 561 + unsigned long size; 562 + unsigned int i; 563 + 564 + if (!rx_ring->buffer_info) 565 + return; 566 + 567 + /* Free all the Rx ring sk_buffs */ 568 + for (i = 0; i < rx_ring->count; i++) { 569 + buffer_info = &rx_ring->buffer_info[i]; 570 + if (buffer_info->dma) { 571 + if (adapter->rx_ps_hdr_size){ 572 + pci_unmap_single(pdev, buffer_info->dma, 573 + adapter->rx_ps_hdr_size, 574 + PCI_DMA_FROMDEVICE); 575 + } else { 576 + pci_unmap_single(pdev, buffer_info->dma, 577 + adapter->rx_buffer_len, 578 + PCI_DMA_FROMDEVICE); 579 + } 580 + buffer_info->dma = 0; 581 + } 582 + 583 + if (buffer_info->skb) { 584 + dev_kfree_skb(buffer_info->skb); 585 + buffer_info->skb = NULL; 586 + } 587 + 588 + if (buffer_info->page) { 589 + if (buffer_info->page_dma) 590 + pci_unmap_page(pdev, buffer_info->page_dma, 591 + PAGE_SIZE / 2, 592 + PCI_DMA_FROMDEVICE); 593 + put_page(buffer_info->page); 594 + buffer_info->page = NULL; 595 + buffer_info->page_dma = 0; 596 + buffer_info->page_offset = 0; 597 + } 598 + } 599 + 600 + size = sizeof(struct igbvf_buffer) * rx_ring->count; 601 + memset(rx_ring->buffer_info, 0, size); 602 + 603 + /* Zero out the descriptor ring */ 604 + memset(rx_ring->desc, 0, rx_ring->size); 605 + 606 + rx_ring->next_to_clean = 0; 607 + rx_ring->next_to_use = 0; 608 + 609 + writel(0, adapter->hw.hw_addr + rx_ring->head); 610 + writel(0, adapter->hw.hw_addr + rx_ring->tail); 611 + } 612 + 613 + /** 614 + * igbvf_free_rx_resources - Free Rx Resources 615 + * @rx_ring: ring to clean the resources from 616 + * 617 + * Free all receive software resources 618 + **/ 619 + 620 + void igbvf_free_rx_resources(struct igbvf_ring *rx_ring) 621 + { 622 + struct pci_dev *pdev = rx_ring->adapter->pdev; 623 + 624 + igbvf_clean_rx_ring(rx_ring); 625 + 626 + vfree(rx_ring->buffer_info); 627 + rx_ring->buffer_info = NULL; 628 + 629 + dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc, 630 + rx_ring->dma); 631 + rx_ring->desc = NULL; 632 + } 633 + 634 + /** 635 + * igbvf_update_itr - update the dynamic ITR value based on statistics 636 + * @adapter: pointer to adapter 637 + * @itr_setting: current adapter->itr 638 + * @packets: the number of packets during this measurement interval 639 + * @bytes: the number of bytes during this measurement interval 640 + * 641 + * Stores a new ITR value based on packets and byte 642 + * counts during the last interrupt. The advantage of per interrupt 643 + * computation is faster updates and more accurate ITR for the current 644 + * traffic pattern. Constants in this function were computed 645 + * based on theoretical maximum wire speed and thresholds were set based 646 + * on testing data as well as attempting to minimize response time 647 + * while increasing bulk throughput. This functionality is controlled 648 + * by the InterruptThrottleRate module parameter. 649 + **/ 650 + static unsigned int igbvf_update_itr(struct igbvf_adapter *adapter, 651 + u16 itr_setting, int packets, 652 + int bytes) 653 + { 654 + unsigned int retval = itr_setting; 655 + 656 + if (packets == 0) 657 + goto update_itr_done; 658 + 659 + switch (itr_setting) { 660 + case lowest_latency: 661 + /* handle TSO and jumbo frames */ 662 + if (bytes/packets > 8000) 663 + retval = bulk_latency; 664 + else if ((packets < 5) && (bytes > 512)) 665 + retval = low_latency; 666 + break; 667 + case low_latency: /* 50 usec aka 20000 ints/s */ 668 + if (bytes > 10000) { 669 + /* this if handles the TSO accounting */ 670 + if (bytes/packets > 8000) 671 + retval = bulk_latency; 672 + else if ((packets < 10) || ((bytes/packets) > 1200)) 673 + retval = bulk_latency; 674 + else if ((packets > 35)) 675 + retval = lowest_latency; 676 + } else if (bytes/packets > 2000) { 677 + retval = bulk_latency; 678 + } else if (packets <= 2 && bytes < 512) { 679 + retval = lowest_latency; 680 + } 681 + break; 682 + case bulk_latency: /* 250 usec aka 4000 ints/s */ 683 + if (bytes > 25000) { 684 + if (packets > 35) 685 + retval = low_latency; 686 + } else if (bytes < 6000) { 687 + retval = low_latency; 688 + } 689 + break; 690 + } 691 + 692 + update_itr_done: 693 + return retval; 694 + } 695 + 696 + static void igbvf_set_itr(struct igbvf_adapter *adapter) 697 + { 698 + struct e1000_hw *hw = &adapter->hw; 699 + u16 current_itr; 700 + u32 new_itr = adapter->itr; 701 + 702 + adapter->tx_itr = igbvf_update_itr(adapter, adapter->tx_itr, 703 + adapter->total_tx_packets, 704 + adapter->total_tx_bytes); 705 + /* conservative mode (itr 3) eliminates the lowest_latency setting */ 706 + if (adapter->itr_setting == 3 && adapter->tx_itr == lowest_latency) 707 + adapter->tx_itr = low_latency; 708 + 709 + adapter->rx_itr = igbvf_update_itr(adapter, adapter->rx_itr, 710 + adapter->total_rx_packets, 711 + adapter->total_rx_bytes); 712 + /* conservative mode (itr 3) eliminates the lowest_latency setting */ 713 + if (adapter->itr_setting == 3 && adapter->rx_itr == lowest_latency) 714 + adapter->rx_itr = low_latency; 715 + 716 + current_itr = max(adapter->rx_itr, adapter->tx_itr); 717 + 718 + switch (current_itr) { 719 + /* counts and packets in update_itr are dependent on these numbers */ 720 + case lowest_latency: 721 + new_itr = 70000; 722 + break; 723 + case low_latency: 724 + new_itr = 20000; /* aka hwitr = ~200 */ 725 + break; 726 + case bulk_latency: 727 + new_itr = 4000; 728 + break; 729 + default: 730 + break; 731 + } 732 + 733 + if (new_itr != adapter->itr) { 734 + /* 735 + * this attempts to bias the interrupt rate towards Bulk 736 + * by adding intermediate steps when interrupt rate is 737 + * increasing 738 + */ 739 + new_itr = new_itr > adapter->itr ? 740 + min(adapter->itr + (new_itr >> 2), new_itr) : 741 + new_itr; 742 + adapter->itr = new_itr; 743 + adapter->rx_ring->itr_val = 1952; 744 + 745 + if (adapter->msix_entries) 746 + adapter->rx_ring->set_itr = 1; 747 + else 748 + ew32(ITR, 1952); 749 + } 750 + } 751 + 752 + /** 753 + * igbvf_clean_tx_irq - Reclaim resources after transmit completes 754 + * @adapter: board private structure 755 + * returns true if ring is completely cleaned 756 + **/ 757 + static bool igbvf_clean_tx_irq(struct igbvf_ring *tx_ring) 758 + { 759 + struct igbvf_adapter *adapter = tx_ring->adapter; 760 + struct e1000_hw *hw = &adapter->hw; 761 + struct net_device *netdev = adapter->netdev; 762 + struct igbvf_buffer *buffer_info; 763 + struct sk_buff *skb; 764 + union e1000_adv_tx_desc *tx_desc, *eop_desc; 765 + unsigned int total_bytes = 0, total_packets = 0; 766 + unsigned int i, eop, count = 0; 767 + bool cleaned = false; 768 + 769 + i = tx_ring->next_to_clean; 770 + eop = tx_ring->buffer_info[i].next_to_watch; 771 + eop_desc = IGBVF_TX_DESC_ADV(*tx_ring, eop); 772 + 773 + while ((eop_desc->wb.status & cpu_to_le32(E1000_TXD_STAT_DD)) && 774 + (count < tx_ring->count)) { 775 + for (cleaned = false; !cleaned; count++) { 776 + tx_desc = IGBVF_TX_DESC_ADV(*tx_ring, i); 777 + buffer_info = &tx_ring->buffer_info[i]; 778 + cleaned = (i == eop); 779 + skb = buffer_info->skb; 780 + 781 + if (skb) { 782 + unsigned int segs, bytecount; 783 + 784 + /* gso_segs is currently only valid for tcp */ 785 + segs = skb_shinfo(skb)->gso_segs ?: 1; 786 + /* multiply data chunks by size of headers */ 787 + bytecount = ((segs - 1) * skb_headlen(skb)) + 788 + skb->len; 789 + total_packets += segs; 790 + total_bytes += bytecount; 791 + } 792 + 793 + igbvf_put_txbuf(adapter, buffer_info); 794 + tx_desc->wb.status = 0; 795 + 796 + i++; 797 + if (i == tx_ring->count) 798 + i = 0; 799 + } 800 + eop = tx_ring->buffer_info[i].next_to_watch; 801 + eop_desc = IGBVF_TX_DESC_ADV(*tx_ring, eop); 802 + } 803 + 804 + tx_ring->next_to_clean = i; 805 + 806 + if (unlikely(count && 807 + netif_carrier_ok(netdev) && 808 + igbvf_desc_unused(tx_ring) >= IGBVF_TX_QUEUE_WAKE)) { 809 + /* Make sure that anybody stopping the queue after this 810 + * sees the new next_to_clean. 811 + */ 812 + smp_mb(); 813 + if (netif_queue_stopped(netdev) && 814 + !(test_bit(__IGBVF_DOWN, &adapter->state))) { 815 + netif_wake_queue(netdev); 816 + ++adapter->restart_queue; 817 + } 818 + } 819 + 820 + if (adapter->detect_tx_hung) { 821 + /* Detect a transmit hang in hardware, this serializes the 822 + * check with the clearing of time_stamp and movement of i */ 823 + adapter->detect_tx_hung = false; 824 + if (tx_ring->buffer_info[i].time_stamp && 825 + time_after(jiffies, tx_ring->buffer_info[i].time_stamp + 826 + (adapter->tx_timeout_factor * HZ)) 827 + && !(er32(STATUS) & E1000_STATUS_TXOFF)) { 828 + 829 + tx_desc = IGBVF_TX_DESC_ADV(*tx_ring, i); 830 + /* detected Tx unit hang */ 831 + igbvf_print_tx_hang(adapter); 832 + 833 + netif_stop_queue(netdev); 834 + } 835 + } 836 + adapter->net_stats.tx_bytes += total_bytes; 837 + adapter->net_stats.tx_packets += total_packets; 838 + return (count < tx_ring->count); 839 + } 840 + 841 + static irqreturn_t igbvf_msix_other(int irq, void *data) 842 + { 843 + struct net_device *netdev = data; 844 + struct igbvf_adapter *adapter = netdev_priv(netdev); 845 + struct e1000_hw *hw = &adapter->hw; 846 + 847 + adapter->int_counter1++; 848 + 849 + netif_carrier_off(netdev); 850 + hw->mac.get_link_status = 1; 851 + if (!test_bit(__IGBVF_DOWN, &adapter->state)) 852 + mod_timer(&adapter->watchdog_timer, jiffies + 1); 853 + 854 + ew32(EIMS, adapter->eims_other); 855 + 856 + return IRQ_HANDLED; 857 + } 858 + 859 + static irqreturn_t igbvf_intr_msix_tx(int irq, void *data) 860 + { 861 + struct net_device *netdev = data; 862 + struct igbvf_adapter *adapter = netdev_priv(netdev); 863 + struct e1000_hw *hw = &adapter->hw; 864 + struct igbvf_ring *tx_ring = adapter->tx_ring; 865 + 866 + 867 + adapter->total_tx_bytes = 0; 868 + adapter->total_tx_packets = 0; 869 + 870 + /* auto mask will automatically reenable the interrupt when we write 871 + * EICS */ 872 + if (!igbvf_clean_tx_irq(tx_ring)) 873 + /* Ring was not completely cleaned, so fire another interrupt */ 874 + ew32(EICS, tx_ring->eims_value); 875 + else 876 + ew32(EIMS, tx_ring->eims_value); 877 + 878 + return IRQ_HANDLED; 879 + } 880 + 881 + static irqreturn_t igbvf_intr_msix_rx(int irq, void *data) 882 + { 883 + struct net_device *netdev = data; 884 + struct igbvf_adapter *adapter = netdev_priv(netdev); 885 + 886 + adapter->int_counter0++; 887 + 888 + /* Write the ITR value calculated at the end of the 889 + * previous interrupt. 890 + */ 891 + if (adapter->rx_ring->set_itr) { 892 + writel(adapter->rx_ring->itr_val, 893 + adapter->hw.hw_addr + adapter->rx_ring->itr_register); 894 + adapter->rx_ring->set_itr = 0; 895 + } 896 + 897 + if (napi_schedule_prep(&adapter->rx_ring->napi)) { 898 + adapter->total_rx_bytes = 0; 899 + adapter->total_rx_packets = 0; 900 + __napi_schedule(&adapter->rx_ring->napi); 901 + } 902 + 903 + return IRQ_HANDLED; 904 + } 905 + 906 + #define IGBVF_NO_QUEUE -1 907 + 908 + static void igbvf_assign_vector(struct igbvf_adapter *adapter, int rx_queue, 909 + int tx_queue, int msix_vector) 910 + { 911 + struct e1000_hw *hw = &adapter->hw; 912 + u32 ivar, index; 913 + 914 + /* 82576 uses a table-based method for assigning vectors. 915 + Each queue has a single entry in the table to which we write 916 + a vector number along with a "valid" bit. Sadly, the layout 917 + of the table is somewhat counterintuitive. */ 918 + if (rx_queue > IGBVF_NO_QUEUE) { 919 + index = (rx_queue >> 1); 920 + ivar = array_er32(IVAR0, index); 921 + if (rx_queue & 0x1) { 922 + /* vector goes into third byte of register */ 923 + ivar = ivar & 0xFF00FFFF; 924 + ivar |= (msix_vector | E1000_IVAR_VALID) << 16; 925 + } else { 926 + /* vector goes into low byte of register */ 927 + ivar = ivar & 0xFFFFFF00; 928 + ivar |= msix_vector | E1000_IVAR_VALID; 929 + } 930 + adapter->rx_ring[rx_queue].eims_value = 1 << msix_vector; 931 + array_ew32(IVAR0, index, ivar); 932 + } 933 + if (tx_queue > IGBVF_NO_QUEUE) { 934 + index = (tx_queue >> 1); 935 + ivar = array_er32(IVAR0, index); 936 + if (tx_queue & 0x1) { 937 + /* vector goes into high byte of register */ 938 + ivar = ivar & 0x00FFFFFF; 939 + ivar |= (msix_vector | E1000_IVAR_VALID) << 24; 940 + } else { 941 + /* vector goes into second byte of register */ 942 + ivar = ivar & 0xFFFF00FF; 943 + ivar |= (msix_vector | E1000_IVAR_VALID) << 8; 944 + } 945 + adapter->tx_ring[tx_queue].eims_value = 1 << msix_vector; 946 + array_ew32(IVAR0, index, ivar); 947 + } 948 + } 949 + 950 + /** 951 + * igbvf_configure_msix - Configure MSI-X hardware 952 + * 953 + * igbvf_configure_msix sets up the hardware to properly 954 + * generate MSI-X interrupts. 955 + **/ 956 + static void igbvf_configure_msix(struct igbvf_adapter *adapter) 957 + { 958 + u32 tmp; 959 + struct e1000_hw *hw = &adapter->hw; 960 + struct igbvf_ring *tx_ring = adapter->tx_ring; 961 + struct igbvf_ring *rx_ring = adapter->rx_ring; 962 + int vector = 0; 963 + 964 + adapter->eims_enable_mask = 0; 965 + 966 + igbvf_assign_vector(adapter, IGBVF_NO_QUEUE, 0, vector++); 967 + adapter->eims_enable_mask |= tx_ring->eims_value; 968 + if (tx_ring->itr_val) 969 + writel(tx_ring->itr_val, 970 + hw->hw_addr + tx_ring->itr_register); 971 + else 972 + writel(1952, hw->hw_addr + tx_ring->itr_register); 973 + 974 + igbvf_assign_vector(adapter, 0, IGBVF_NO_QUEUE, vector++); 975 + adapter->eims_enable_mask |= rx_ring->eims_value; 976 + if (rx_ring->itr_val) 977 + writel(rx_ring->itr_val, 978 + hw->hw_addr + rx_ring->itr_register); 979 + else 980 + writel(1952, hw->hw_addr + rx_ring->itr_register); 981 + 982 + /* set vector for other causes, i.e. link changes */ 983 + 984 + tmp = (vector++ | E1000_IVAR_VALID); 985 + 986 + ew32(IVAR_MISC, tmp); 987 + 988 + adapter->eims_enable_mask = (1 << (vector)) - 1; 989 + adapter->eims_other = 1 << (vector - 1); 990 + e1e_flush(); 991 + } 992 + 993 + void igbvf_reset_interrupt_capability(struct igbvf_adapter *adapter) 994 + { 995 + if (adapter->msix_entries) { 996 + pci_disable_msix(adapter->pdev); 997 + kfree(adapter->msix_entries); 998 + adapter->msix_entries = NULL; 999 + } 1000 + } 1001 + 1002 + /** 1003 + * igbvf_set_interrupt_capability - set MSI or MSI-X if supported 1004 + * 1005 + * Attempt to configure interrupts using the best available 1006 + * capabilities of the hardware and kernel. 1007 + **/ 1008 + void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter) 1009 + { 1010 + int err = -ENOMEM; 1011 + int i; 1012 + 1013 + /* we allocate 3 vectors, 1 for tx, 1 for rx, one for pf messages */ 1014 + adapter->msix_entries = kcalloc(3, sizeof(struct msix_entry), 1015 + GFP_KERNEL); 1016 + if (adapter->msix_entries) { 1017 + for (i = 0; i < 3; i++) 1018 + adapter->msix_entries[i].entry = i; 1019 + 1020 + err = pci_enable_msix(adapter->pdev, 1021 + adapter->msix_entries, 3); 1022 + } 1023 + 1024 + if (err) { 1025 + /* MSI-X failed */ 1026 + dev_err(&adapter->pdev->dev, 1027 + "Failed to initialize MSI-X interrupts.\n"); 1028 + igbvf_reset_interrupt_capability(adapter); 1029 + } 1030 + } 1031 + 1032 + /** 1033 + * igbvf_request_msix - Initialize MSI-X interrupts 1034 + * 1035 + * igbvf_request_msix allocates MSI-X vectors and requests interrupts from the 1036 + * kernel. 1037 + **/ 1038 + static int igbvf_request_msix(struct igbvf_adapter *adapter) 1039 + { 1040 + struct net_device *netdev = adapter->netdev; 1041 + int err = 0, vector = 0; 1042 + 1043 + if (strlen(netdev->name) < (IFNAMSIZ - 5)) { 1044 + sprintf(adapter->tx_ring->name, "%s-tx-0", netdev->name); 1045 + sprintf(adapter->rx_ring->name, "%s-rx-0", netdev->name); 1046 + } else { 1047 + memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ); 1048 + memcpy(adapter->rx_ring->name, netdev->name, IFNAMSIZ); 1049 + } 1050 + 1051 + err = request_irq(adapter->msix_entries[vector].vector, 1052 + &igbvf_intr_msix_tx, 0, adapter->tx_ring->name, 1053 + netdev); 1054 + if (err) 1055 + goto out; 1056 + 1057 + adapter->tx_ring->itr_register = E1000_EITR(vector); 1058 + adapter->tx_ring->itr_val = 1952; 1059 + vector++; 1060 + 1061 + err = request_irq(adapter->msix_entries[vector].vector, 1062 + &igbvf_intr_msix_rx, 0, adapter->rx_ring->name, 1063 + netdev); 1064 + if (err) 1065 + goto out; 1066 + 1067 + adapter->rx_ring->itr_register = E1000_EITR(vector); 1068 + adapter->rx_ring->itr_val = 1952; 1069 + vector++; 1070 + 1071 + err = request_irq(adapter->msix_entries[vector].vector, 1072 + &igbvf_msix_other, 0, netdev->name, netdev); 1073 + if (err) 1074 + goto out; 1075 + 1076 + igbvf_configure_msix(adapter); 1077 + return 0; 1078 + out: 1079 + return err; 1080 + } 1081 + 1082 + /** 1083 + * igbvf_alloc_queues - Allocate memory for all rings 1084 + * @adapter: board private structure to initialize 1085 + **/ 1086 + static int __devinit igbvf_alloc_queues(struct igbvf_adapter *adapter) 1087 + { 1088 + struct net_device *netdev = adapter->netdev; 1089 + 1090 + adapter->tx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL); 1091 + if (!adapter->tx_ring) 1092 + return -ENOMEM; 1093 + 1094 + adapter->rx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL); 1095 + if (!adapter->rx_ring) { 1096 + kfree(adapter->tx_ring); 1097 + return -ENOMEM; 1098 + } 1099 + 1100 + netif_napi_add(netdev, &adapter->rx_ring->napi, igbvf_poll, 64); 1101 + 1102 + return 0; 1103 + } 1104 + 1105 + /** 1106 + * igbvf_request_irq - initialize interrupts 1107 + * 1108 + * Attempts to configure interrupts using the best available 1109 + * capabilities of the hardware and kernel. 1110 + **/ 1111 + static int igbvf_request_irq(struct igbvf_adapter *adapter) 1112 + { 1113 + int err = -1; 1114 + 1115 + /* igbvf supports msi-x only */ 1116 + if (adapter->msix_entries) 1117 + err = igbvf_request_msix(adapter); 1118 + 1119 + if (!err) 1120 + return err; 1121 + 1122 + dev_err(&adapter->pdev->dev, 1123 + "Unable to allocate interrupt, Error: %d\n", err); 1124 + 1125 + return err; 1126 + } 1127 + 1128 + static void igbvf_free_irq(struct igbvf_adapter *adapter) 1129 + { 1130 + struct net_device *netdev = adapter->netdev; 1131 + int vector; 1132 + 1133 + if (adapter->msix_entries) { 1134 + for (vector = 0; vector < 3; vector++) 1135 + free_irq(adapter->msix_entries[vector].vector, netdev); 1136 + } 1137 + } 1138 + 1139 + /** 1140 + * igbvf_irq_disable - Mask off interrupt generation on the NIC 1141 + **/ 1142 + static void igbvf_irq_disable(struct igbvf_adapter *adapter) 1143 + { 1144 + struct e1000_hw *hw = &adapter->hw; 1145 + 1146 + ew32(EIMC, ~0); 1147 + 1148 + if (adapter->msix_entries) 1149 + ew32(EIAC, 0); 1150 + } 1151 + 1152 + /** 1153 + * igbvf_irq_enable - Enable default interrupt generation settings 1154 + **/ 1155 + static void igbvf_irq_enable(struct igbvf_adapter *adapter) 1156 + { 1157 + struct e1000_hw *hw = &adapter->hw; 1158 + 1159 + ew32(EIAC, adapter->eims_enable_mask); 1160 + ew32(EIAM, adapter->eims_enable_mask); 1161 + ew32(EIMS, adapter->eims_enable_mask); 1162 + } 1163 + 1164 + /** 1165 + * igbvf_poll - NAPI Rx polling callback 1166 + * @napi: struct associated with this polling callback 1167 + * @budget: amount of packets driver is allowed to process this poll 1168 + **/ 1169 + static int igbvf_poll(struct napi_struct *napi, int budget) 1170 + { 1171 + struct igbvf_ring *rx_ring = container_of(napi, struct igbvf_ring, napi); 1172 + struct igbvf_adapter *adapter = rx_ring->adapter; 1173 + struct e1000_hw *hw = &adapter->hw; 1174 + int work_done = 0; 1175 + 1176 + igbvf_clean_rx_irq(adapter, &work_done, budget); 1177 + 1178 + /* If not enough Rx work done, exit the polling mode */ 1179 + if (work_done < budget) { 1180 + napi_complete(napi); 1181 + 1182 + if (adapter->itr_setting & 3) 1183 + igbvf_set_itr(adapter); 1184 + 1185 + if (!test_bit(__IGBVF_DOWN, &adapter->state)) 1186 + ew32(EIMS, adapter->rx_ring->eims_value); 1187 + } 1188 + 1189 + return work_done; 1190 + } 1191 + 1192 + /** 1193 + * igbvf_set_rlpml - set receive large packet maximum length 1194 + * @adapter: board private structure 1195 + * 1196 + * Configure the maximum size of packets that will be received 1197 + */ 1198 + static void igbvf_set_rlpml(struct igbvf_adapter *adapter) 1199 + { 1200 + int max_frame_size = adapter->max_frame_size; 1201 + struct e1000_hw *hw = &adapter->hw; 1202 + 1203 + if (adapter->vlgrp) 1204 + max_frame_size += VLAN_TAG_SIZE; 1205 + 1206 + e1000_rlpml_set_vf(hw, max_frame_size); 1207 + } 1208 + 1209 + static void igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) 1210 + { 1211 + struct igbvf_adapter *adapter = netdev_priv(netdev); 1212 + struct e1000_hw *hw = &adapter->hw; 1213 + 1214 + if (hw->mac.ops.set_vfta(hw, vid, true)) 1215 + dev_err(&adapter->pdev->dev, "Failed to add vlan id %d\n", vid); 1216 + } 1217 + 1218 + static void igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) 1219 + { 1220 + struct igbvf_adapter *adapter = netdev_priv(netdev); 1221 + struct e1000_hw *hw = &adapter->hw; 1222 + 1223 + igbvf_irq_disable(adapter); 1224 + vlan_group_set_device(adapter->vlgrp, vid, NULL); 1225 + 1226 + if (!test_bit(__IGBVF_DOWN, &adapter->state)) 1227 + igbvf_irq_enable(adapter); 1228 + 1229 + if (hw->mac.ops.set_vfta(hw, vid, false)) 1230 + dev_err(&adapter->pdev->dev, 1231 + "Failed to remove vlan id %d\n", vid); 1232 + } 1233 + 1234 + static void igbvf_vlan_rx_register(struct net_device *netdev, 1235 + struct vlan_group *grp) 1236 + { 1237 + struct igbvf_adapter *adapter = netdev_priv(netdev); 1238 + 1239 + adapter->vlgrp = grp; 1240 + } 1241 + 1242 + static void igbvf_restore_vlan(struct igbvf_adapter *adapter) 1243 + { 1244 + u16 vid; 1245 + 1246 + if (!adapter->vlgrp) 1247 + return; 1248 + 1249 + for (vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) { 1250 + if (!vlan_group_get_device(adapter->vlgrp, vid)) 1251 + continue; 1252 + igbvf_vlan_rx_add_vid(adapter->netdev, vid); 1253 + } 1254 + 1255 + igbvf_set_rlpml(adapter); 1256 + } 1257 + 1258 + /** 1259 + * igbvf_configure_tx - Configure Transmit Unit after Reset 1260 + * @adapter: board private structure 1261 + * 1262 + * Configure the Tx unit of the MAC after a reset. 1263 + **/ 1264 + static void igbvf_configure_tx(struct igbvf_adapter *adapter) 1265 + { 1266 + struct e1000_hw *hw = &adapter->hw; 1267 + struct igbvf_ring *tx_ring = adapter->tx_ring; 1268 + u64 tdba; 1269 + u32 txdctl, dca_txctrl; 1270 + 1271 + /* disable transmits */ 1272 + txdctl = er32(TXDCTL(0)); 1273 + ew32(TXDCTL(0), txdctl & ~E1000_TXDCTL_QUEUE_ENABLE); 1274 + msleep(10); 1275 + 1276 + /* Setup the HW Tx Head and Tail descriptor pointers */ 1277 + ew32(TDLEN(0), tx_ring->count * sizeof(union e1000_adv_tx_desc)); 1278 + tdba = tx_ring->dma; 1279 + ew32(TDBAL(0), (tdba & DMA_32BIT_MASK)); 1280 + ew32(TDBAH(0), (tdba >> 32)); 1281 + ew32(TDH(0), 0); 1282 + ew32(TDT(0), 0); 1283 + tx_ring->head = E1000_TDH(0); 1284 + tx_ring->tail = E1000_TDT(0); 1285 + 1286 + /* Turn off Relaxed Ordering on head write-backs. The writebacks 1287 + * MUST be delivered in order or it will completely screw up 1288 + * our bookeeping. 1289 + */ 1290 + dca_txctrl = er32(DCA_TXCTRL(0)); 1291 + dca_txctrl &= ~E1000_DCA_TXCTRL_TX_WB_RO_EN; 1292 + ew32(DCA_TXCTRL(0), dca_txctrl); 1293 + 1294 + /* enable transmits */ 1295 + txdctl |= E1000_TXDCTL_QUEUE_ENABLE; 1296 + ew32(TXDCTL(0), txdctl); 1297 + 1298 + /* Setup Transmit Descriptor Settings for eop descriptor */ 1299 + adapter->txd_cmd = E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_IFCS; 1300 + 1301 + /* enable Report Status bit */ 1302 + adapter->txd_cmd |= E1000_ADVTXD_DCMD_RS; 1303 + 1304 + adapter->tx_queue_len = adapter->netdev->tx_queue_len; 1305 + } 1306 + 1307 + /** 1308 + * igbvf_setup_srrctl - configure the receive control registers 1309 + * @adapter: Board private structure 1310 + **/ 1311 + static void igbvf_setup_srrctl(struct igbvf_adapter *adapter) 1312 + { 1313 + struct e1000_hw *hw = &adapter->hw; 1314 + u32 srrctl = 0; 1315 + 1316 + srrctl &= ~(E1000_SRRCTL_DESCTYPE_MASK | 1317 + E1000_SRRCTL_BSIZEHDR_MASK | 1318 + E1000_SRRCTL_BSIZEPKT_MASK); 1319 + 1320 + /* Enable queue drop to avoid head of line blocking */ 1321 + srrctl |= E1000_SRRCTL_DROP_EN; 1322 + 1323 + /* Setup buffer sizes */ 1324 + srrctl |= ALIGN(adapter->rx_buffer_len, 1024) >> 1325 + E1000_SRRCTL_BSIZEPKT_SHIFT; 1326 + 1327 + if (adapter->rx_buffer_len < 2048) { 1328 + adapter->rx_ps_hdr_size = 0; 1329 + srrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF; 1330 + } else { 1331 + adapter->rx_ps_hdr_size = 128; 1332 + srrctl |= adapter->rx_ps_hdr_size << 1333 + E1000_SRRCTL_BSIZEHDRSIZE_SHIFT; 1334 + srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS; 1335 + } 1336 + 1337 + ew32(SRRCTL(0), srrctl); 1338 + } 1339 + 1340 + /** 1341 + * igbvf_configure_rx - Configure Receive Unit after Reset 1342 + * @adapter: board private structure 1343 + * 1344 + * Configure the Rx unit of the MAC after a reset. 1345 + **/ 1346 + static void igbvf_configure_rx(struct igbvf_adapter *adapter) 1347 + { 1348 + struct e1000_hw *hw = &adapter->hw; 1349 + struct igbvf_ring *rx_ring = adapter->rx_ring; 1350 + u64 rdba; 1351 + u32 rdlen, rxdctl; 1352 + 1353 + /* disable receives */ 1354 + rxdctl = er32(RXDCTL(0)); 1355 + ew32(RXDCTL(0), rxdctl & ~E1000_RXDCTL_QUEUE_ENABLE); 1356 + msleep(10); 1357 + 1358 + rdlen = rx_ring->count * sizeof(union e1000_adv_rx_desc); 1359 + 1360 + /* 1361 + * Setup the HW Rx Head and Tail Descriptor Pointers and 1362 + * the Base and Length of the Rx Descriptor Ring 1363 + */ 1364 + rdba = rx_ring->dma; 1365 + ew32(RDBAL(0), (rdba & DMA_32BIT_MASK)); 1366 + ew32(RDBAH(0), (rdba >> 32)); 1367 + ew32(RDLEN(0), rx_ring->count * sizeof(union e1000_adv_rx_desc)); 1368 + rx_ring->head = E1000_RDH(0); 1369 + rx_ring->tail = E1000_RDT(0); 1370 + ew32(RDH(0), 0); 1371 + ew32(RDT(0), 0); 1372 + 1373 + rxdctl |= E1000_RXDCTL_QUEUE_ENABLE; 1374 + rxdctl &= 0xFFF00000; 1375 + rxdctl |= IGBVF_RX_PTHRESH; 1376 + rxdctl |= IGBVF_RX_HTHRESH << 8; 1377 + rxdctl |= IGBVF_RX_WTHRESH << 16; 1378 + 1379 + igbvf_set_rlpml(adapter); 1380 + 1381 + /* enable receives */ 1382 + ew32(RXDCTL(0), rxdctl); 1383 + } 1384 + 1385 + /** 1386 + * igbvf_set_multi - Multicast and Promiscuous mode set 1387 + * @netdev: network interface device structure 1388 + * 1389 + * The set_multi entry point is called whenever the multicast address 1390 + * list or the network interface flags are updated. This routine is 1391 + * responsible for configuring the hardware for proper multicast, 1392 + * promiscuous mode, and all-multi behavior. 1393 + **/ 1394 + static void igbvf_set_multi(struct net_device *netdev) 1395 + { 1396 + struct igbvf_adapter *adapter = netdev_priv(netdev); 1397 + struct e1000_hw *hw = &adapter->hw; 1398 + struct dev_mc_list *mc_ptr; 1399 + u8 *mta_list = NULL; 1400 + int i; 1401 + 1402 + if (netdev->mc_count) { 1403 + mta_list = kmalloc(netdev->mc_count * 6, GFP_ATOMIC); 1404 + if (!mta_list) { 1405 + dev_err(&adapter->pdev->dev, 1406 + "failed to allocate multicast filter list\n"); 1407 + return; 1408 + } 1409 + } 1410 + 1411 + /* prepare a packed array of only addresses. */ 1412 + mc_ptr = netdev->mc_list; 1413 + 1414 + for (i = 0; i < netdev->mc_count; i++) { 1415 + if (!mc_ptr) 1416 + break; 1417 + memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr, 1418 + ETH_ALEN); 1419 + mc_ptr = mc_ptr->next; 1420 + } 1421 + 1422 + hw->mac.ops.update_mc_addr_list(hw, mta_list, i, 0, 0); 1423 + kfree(mta_list); 1424 + } 1425 + 1426 + /** 1427 + * igbvf_configure - configure the hardware for Rx and Tx 1428 + * @adapter: private board structure 1429 + **/ 1430 + static void igbvf_configure(struct igbvf_adapter *adapter) 1431 + { 1432 + igbvf_set_multi(adapter->netdev); 1433 + 1434 + igbvf_restore_vlan(adapter); 1435 + 1436 + igbvf_configure_tx(adapter); 1437 + igbvf_setup_srrctl(adapter); 1438 + igbvf_configure_rx(adapter); 1439 + igbvf_alloc_rx_buffers(adapter->rx_ring, 1440 + igbvf_desc_unused(adapter->rx_ring)); 1441 + } 1442 + 1443 + /* igbvf_reset - bring the hardware into a known good state 1444 + * 1445 + * This function boots the hardware and enables some settings that 1446 + * require a configuration cycle of the hardware - those cannot be 1447 + * set/changed during runtime. After reset the device needs to be 1448 + * properly configured for Rx, Tx etc. 1449 + */ 1450 + void igbvf_reset(struct igbvf_adapter *adapter) 1451 + { 1452 + struct e1000_mac_info *mac = &adapter->hw.mac; 1453 + struct net_device *netdev = adapter->netdev; 1454 + struct e1000_hw *hw = &adapter->hw; 1455 + 1456 + /* Allow time for pending master requests to run */ 1457 + if (mac->ops.reset_hw(hw)) 1458 + dev_err(&adapter->pdev->dev, "PF still resetting\n"); 1459 + 1460 + mac->ops.init_hw(hw); 1461 + 1462 + if (is_valid_ether_addr(adapter->hw.mac.addr)) { 1463 + memcpy(netdev->dev_addr, adapter->hw.mac.addr, 1464 + netdev->addr_len); 1465 + memcpy(netdev->perm_addr, adapter->hw.mac.addr, 1466 + netdev->addr_len); 1467 + } 1468 + } 1469 + 1470 + int igbvf_up(struct igbvf_adapter *adapter) 1471 + { 1472 + struct e1000_hw *hw = &adapter->hw; 1473 + 1474 + /* hardware has been reset, we need to reload some things */ 1475 + igbvf_configure(adapter); 1476 + 1477 + clear_bit(__IGBVF_DOWN, &adapter->state); 1478 + 1479 + napi_enable(&adapter->rx_ring->napi); 1480 + if (adapter->msix_entries) 1481 + igbvf_configure_msix(adapter); 1482 + 1483 + /* Clear any pending interrupts. */ 1484 + er32(EICR); 1485 + igbvf_irq_enable(adapter); 1486 + 1487 + /* start the watchdog */ 1488 + hw->mac.get_link_status = 1; 1489 + mod_timer(&adapter->watchdog_timer, jiffies + 1); 1490 + 1491 + 1492 + return 0; 1493 + } 1494 + 1495 + void igbvf_down(struct igbvf_adapter *adapter) 1496 + { 1497 + struct net_device *netdev = adapter->netdev; 1498 + struct e1000_hw *hw = &adapter->hw; 1499 + u32 rxdctl, txdctl; 1500 + 1501 + /* 1502 + * signal that we're down so the interrupt handler does not 1503 + * reschedule our watchdog timer 1504 + */ 1505 + set_bit(__IGBVF_DOWN, &adapter->state); 1506 + 1507 + /* disable receives in the hardware */ 1508 + rxdctl = er32(RXDCTL(0)); 1509 + ew32(RXDCTL(0), rxdctl & ~E1000_RXDCTL_QUEUE_ENABLE); 1510 + 1511 + netif_stop_queue(netdev); 1512 + 1513 + /* disable transmits in the hardware */ 1514 + txdctl = er32(TXDCTL(0)); 1515 + ew32(TXDCTL(0), txdctl & ~E1000_TXDCTL_QUEUE_ENABLE); 1516 + 1517 + /* flush both disables and wait for them to finish */ 1518 + e1e_flush(); 1519 + msleep(10); 1520 + 1521 + napi_disable(&adapter->rx_ring->napi); 1522 + 1523 + igbvf_irq_disable(adapter); 1524 + 1525 + del_timer_sync(&adapter->watchdog_timer); 1526 + 1527 + netdev->tx_queue_len = adapter->tx_queue_len; 1528 + netif_carrier_off(netdev); 1529 + 1530 + /* record the stats before reset*/ 1531 + igbvf_update_stats(adapter); 1532 + 1533 + adapter->link_speed = 0; 1534 + adapter->link_duplex = 0; 1535 + 1536 + igbvf_reset(adapter); 1537 + igbvf_clean_tx_ring(adapter->tx_ring); 1538 + igbvf_clean_rx_ring(adapter->rx_ring); 1539 + } 1540 + 1541 + void igbvf_reinit_locked(struct igbvf_adapter *adapter) 1542 + { 1543 + might_sleep(); 1544 + while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) 1545 + msleep(1); 1546 + igbvf_down(adapter); 1547 + igbvf_up(adapter); 1548 + clear_bit(__IGBVF_RESETTING, &adapter->state); 1549 + } 1550 + 1551 + /** 1552 + * igbvf_sw_init - Initialize general software structures (struct igbvf_adapter) 1553 + * @adapter: board private structure to initialize 1554 + * 1555 + * igbvf_sw_init initializes the Adapter private data structure. 1556 + * Fields are initialized based on PCI device information and 1557 + * OS network device settings (MTU size). 1558 + **/ 1559 + static int __devinit igbvf_sw_init(struct igbvf_adapter *adapter) 1560 + { 1561 + struct net_device *netdev = adapter->netdev; 1562 + s32 rc; 1563 + 1564 + adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN; 1565 + adapter->rx_ps_hdr_size = 0; 1566 + adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN; 1567 + adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN; 1568 + 1569 + adapter->tx_int_delay = 8; 1570 + adapter->tx_abs_int_delay = 32; 1571 + adapter->rx_int_delay = 0; 1572 + adapter->rx_abs_int_delay = 8; 1573 + adapter->itr_setting = 3; 1574 + adapter->itr = 20000; 1575 + 1576 + /* Set various function pointers */ 1577 + adapter->ei->init_ops(&adapter->hw); 1578 + 1579 + rc = adapter->hw.mac.ops.init_params(&adapter->hw); 1580 + if (rc) 1581 + return rc; 1582 + 1583 + rc = adapter->hw.mbx.ops.init_params(&adapter->hw); 1584 + if (rc) 1585 + return rc; 1586 + 1587 + igbvf_set_interrupt_capability(adapter); 1588 + 1589 + if (igbvf_alloc_queues(adapter)) 1590 + return -ENOMEM; 1591 + 1592 + spin_lock_init(&adapter->tx_queue_lock); 1593 + 1594 + /* Explicitly disable IRQ since the NIC can be in any state. */ 1595 + igbvf_irq_disable(adapter); 1596 + 1597 + spin_lock_init(&adapter->stats_lock); 1598 + 1599 + set_bit(__IGBVF_DOWN, &adapter->state); 1600 + return 0; 1601 + } 1602 + 1603 + static void igbvf_initialize_last_counter_stats(struct igbvf_adapter *adapter) 1604 + { 1605 + struct e1000_hw *hw = &adapter->hw; 1606 + 1607 + adapter->stats.last_gprc = er32(VFGPRC); 1608 + adapter->stats.last_gorc = er32(VFGORC); 1609 + adapter->stats.last_gptc = er32(VFGPTC); 1610 + adapter->stats.last_gotc = er32(VFGOTC); 1611 + adapter->stats.last_mprc = er32(VFMPRC); 1612 + adapter->stats.last_gotlbc = er32(VFGOTLBC); 1613 + adapter->stats.last_gptlbc = er32(VFGPTLBC); 1614 + adapter->stats.last_gorlbc = er32(VFGORLBC); 1615 + adapter->stats.last_gprlbc = er32(VFGPRLBC); 1616 + 1617 + adapter->stats.base_gprc = er32(VFGPRC); 1618 + adapter->stats.base_gorc = er32(VFGORC); 1619 + adapter->stats.base_gptc = er32(VFGPTC); 1620 + adapter->stats.base_gotc = er32(VFGOTC); 1621 + adapter->stats.base_mprc = er32(VFMPRC); 1622 + adapter->stats.base_gotlbc = er32(VFGOTLBC); 1623 + adapter->stats.base_gptlbc = er32(VFGPTLBC); 1624 + adapter->stats.base_gorlbc = er32(VFGORLBC); 1625 + adapter->stats.base_gprlbc = er32(VFGPRLBC); 1626 + } 1627 + 1628 + /** 1629 + * igbvf_open - Called when a network interface is made active 1630 + * @netdev: network interface device structure 1631 + * 1632 + * Returns 0 on success, negative value on failure 1633 + * 1634 + * The open entry point is called when a network interface is made 1635 + * active by the system (IFF_UP). At this point all resources needed 1636 + * for transmit and receive operations are allocated, the interrupt 1637 + * handler is registered with the OS, the watchdog timer is started, 1638 + * and the stack is notified that the interface is ready. 1639 + **/ 1640 + static int igbvf_open(struct net_device *netdev) 1641 + { 1642 + struct igbvf_adapter *adapter = netdev_priv(netdev); 1643 + struct e1000_hw *hw = &adapter->hw; 1644 + int err; 1645 + 1646 + /* disallow open during test */ 1647 + if (test_bit(__IGBVF_TESTING, &adapter->state)) 1648 + return -EBUSY; 1649 + 1650 + /* allocate transmit descriptors */ 1651 + err = igbvf_setup_tx_resources(adapter, adapter->tx_ring); 1652 + if (err) 1653 + goto err_setup_tx; 1654 + 1655 + /* allocate receive descriptors */ 1656 + err = igbvf_setup_rx_resources(adapter, adapter->rx_ring); 1657 + if (err) 1658 + goto err_setup_rx; 1659 + 1660 + /* 1661 + * before we allocate an interrupt, we must be ready to handle it. 1662 + * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt 1663 + * as soon as we call pci_request_irq, so we have to setup our 1664 + * clean_rx handler before we do so. 1665 + */ 1666 + igbvf_configure(adapter); 1667 + 1668 + err = igbvf_request_irq(adapter); 1669 + if (err) 1670 + goto err_req_irq; 1671 + 1672 + /* From here on the code is the same as igbvf_up() */ 1673 + clear_bit(__IGBVF_DOWN, &adapter->state); 1674 + 1675 + napi_enable(&adapter->rx_ring->napi); 1676 + 1677 + /* clear any pending interrupts */ 1678 + er32(EICR); 1679 + 1680 + igbvf_irq_enable(adapter); 1681 + 1682 + /* start the watchdog */ 1683 + hw->mac.get_link_status = 1; 1684 + mod_timer(&adapter->watchdog_timer, jiffies + 1); 1685 + 1686 + return 0; 1687 + 1688 + err_req_irq: 1689 + igbvf_free_rx_resources(adapter->rx_ring); 1690 + err_setup_rx: 1691 + igbvf_free_tx_resources(adapter->tx_ring); 1692 + err_setup_tx: 1693 + igbvf_reset(adapter); 1694 + 1695 + return err; 1696 + } 1697 + 1698 + /** 1699 + * igbvf_close - Disables a network interface 1700 + * @netdev: network interface device structure 1701 + * 1702 + * Returns 0, this is not allowed to fail 1703 + * 1704 + * The close entry point is called when an interface is de-activated 1705 + * by the OS. The hardware is still under the drivers control, but 1706 + * needs to be disabled. A global MAC reset is issued to stop the 1707 + * hardware, and all transmit and receive resources are freed. 1708 + **/ 1709 + static int igbvf_close(struct net_device *netdev) 1710 + { 1711 + struct igbvf_adapter *adapter = netdev_priv(netdev); 1712 + 1713 + WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state)); 1714 + igbvf_down(adapter); 1715 + 1716 + igbvf_free_irq(adapter); 1717 + 1718 + igbvf_free_tx_resources(adapter->tx_ring); 1719 + igbvf_free_rx_resources(adapter->rx_ring); 1720 + 1721 + return 0; 1722 + } 1723 + /** 1724 + * igbvf_set_mac - Change the Ethernet Address of the NIC 1725 + * @netdev: network interface device structure 1726 + * @p: pointer to an address structure 1727 + * 1728 + * Returns 0 on success, negative on failure 1729 + **/ 1730 + static int igbvf_set_mac(struct net_device *netdev, void *p) 1731 + { 1732 + struct igbvf_adapter *adapter = netdev_priv(netdev); 1733 + struct e1000_hw *hw = &adapter->hw; 1734 + struct sockaddr *addr = p; 1735 + 1736 + if (!is_valid_ether_addr(addr->sa_data)) 1737 + return -EADDRNOTAVAIL; 1738 + 1739 + memcpy(hw->mac.addr, addr->sa_data, netdev->addr_len); 1740 + 1741 + hw->mac.ops.rar_set(hw, hw->mac.addr, 0); 1742 + 1743 + if (memcmp(addr->sa_data, hw->mac.addr, 6)) 1744 + return -EADDRNOTAVAIL; 1745 + 1746 + memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); 1747 + 1748 + return 0; 1749 + } 1750 + 1751 + #define UPDATE_VF_COUNTER(reg, name) \ 1752 + { \ 1753 + u32 current_counter = er32(reg); \ 1754 + if (current_counter < adapter->stats.last_##name) \ 1755 + adapter->stats.name += 0x100000000LL; \ 1756 + adapter->stats.last_##name = current_counter; \ 1757 + adapter->stats.name &= 0xFFFFFFFF00000000LL; \ 1758 + adapter->stats.name |= current_counter; \ 1759 + } 1760 + 1761 + /** 1762 + * igbvf_update_stats - Update the board statistics counters 1763 + * @adapter: board private structure 1764 + **/ 1765 + void igbvf_update_stats(struct igbvf_adapter *adapter) 1766 + { 1767 + struct e1000_hw *hw = &adapter->hw; 1768 + struct pci_dev *pdev = adapter->pdev; 1769 + 1770 + /* 1771 + * Prevent stats update while adapter is being reset, link is down 1772 + * or if the pci connection is down. 1773 + */ 1774 + if (adapter->link_speed == 0) 1775 + return; 1776 + 1777 + if (test_bit(__IGBVF_RESETTING, &adapter->state)) 1778 + return; 1779 + 1780 + if (pci_channel_offline(pdev)) 1781 + return; 1782 + 1783 + UPDATE_VF_COUNTER(VFGPRC, gprc); 1784 + UPDATE_VF_COUNTER(VFGORC, gorc); 1785 + UPDATE_VF_COUNTER(VFGPTC, gptc); 1786 + UPDATE_VF_COUNTER(VFGOTC, gotc); 1787 + UPDATE_VF_COUNTER(VFMPRC, mprc); 1788 + UPDATE_VF_COUNTER(VFGOTLBC, gotlbc); 1789 + UPDATE_VF_COUNTER(VFGPTLBC, gptlbc); 1790 + UPDATE_VF_COUNTER(VFGORLBC, gorlbc); 1791 + UPDATE_VF_COUNTER(VFGPRLBC, gprlbc); 1792 + 1793 + /* Fill out the OS statistics structure */ 1794 + adapter->net_stats.multicast = adapter->stats.mprc; 1795 + } 1796 + 1797 + static void igbvf_print_link_info(struct igbvf_adapter *adapter) 1798 + { 1799 + dev_info(&adapter->pdev->dev, "Link is Up %d Mbps %s\n", 1800 + adapter->link_speed, 1801 + ((adapter->link_duplex == FULL_DUPLEX) ? 1802 + "Full Duplex" : "Half Duplex")); 1803 + } 1804 + 1805 + static bool igbvf_has_link(struct igbvf_adapter *adapter) 1806 + { 1807 + struct e1000_hw *hw = &adapter->hw; 1808 + s32 ret_val = E1000_SUCCESS; 1809 + bool link_active; 1810 + 1811 + ret_val = hw->mac.ops.check_for_link(hw); 1812 + link_active = !hw->mac.get_link_status; 1813 + 1814 + /* if check for link returns error we will need to reset */ 1815 + if (ret_val) 1816 + schedule_work(&adapter->reset_task); 1817 + 1818 + return link_active; 1819 + } 1820 + 1821 + /** 1822 + * igbvf_watchdog - Timer Call-back 1823 + * @data: pointer to adapter cast into an unsigned long 1824 + **/ 1825 + static void igbvf_watchdog(unsigned long data) 1826 + { 1827 + struct igbvf_adapter *adapter = (struct igbvf_adapter *) data; 1828 + 1829 + /* Do the rest outside of interrupt context */ 1830 + schedule_work(&adapter->watchdog_task); 1831 + } 1832 + 1833 + static void igbvf_watchdog_task(struct work_struct *work) 1834 + { 1835 + struct igbvf_adapter *adapter = container_of(work, 1836 + struct igbvf_adapter, 1837 + watchdog_task); 1838 + struct net_device *netdev = adapter->netdev; 1839 + struct e1000_mac_info *mac = &adapter->hw.mac; 1840 + struct igbvf_ring *tx_ring = adapter->tx_ring; 1841 + struct e1000_hw *hw = &adapter->hw; 1842 + u32 link; 1843 + int tx_pending = 0; 1844 + 1845 + link = igbvf_has_link(adapter); 1846 + 1847 + if (link) { 1848 + if (!netif_carrier_ok(netdev)) { 1849 + bool txb2b = 1; 1850 + 1851 + mac->ops.get_link_up_info(&adapter->hw, 1852 + &adapter->link_speed, 1853 + &adapter->link_duplex); 1854 + igbvf_print_link_info(adapter); 1855 + 1856 + /* 1857 + * tweak tx_queue_len according to speed/duplex 1858 + * and adjust the timeout factor 1859 + */ 1860 + netdev->tx_queue_len = adapter->tx_queue_len; 1861 + adapter->tx_timeout_factor = 1; 1862 + switch (adapter->link_speed) { 1863 + case SPEED_10: 1864 + txb2b = 0; 1865 + netdev->tx_queue_len = 10; 1866 + adapter->tx_timeout_factor = 16; 1867 + break; 1868 + case SPEED_100: 1869 + txb2b = 0; 1870 + netdev->tx_queue_len = 100; 1871 + /* maybe add some timeout factor ? */ 1872 + break; 1873 + } 1874 + 1875 + netif_carrier_on(netdev); 1876 + netif_wake_queue(netdev); 1877 + } 1878 + } else { 1879 + if (netif_carrier_ok(netdev)) { 1880 + adapter->link_speed = 0; 1881 + adapter->link_duplex = 0; 1882 + dev_info(&adapter->pdev->dev, "Link is Down\n"); 1883 + netif_carrier_off(netdev); 1884 + netif_stop_queue(netdev); 1885 + } 1886 + } 1887 + 1888 + if (netif_carrier_ok(netdev)) { 1889 + igbvf_update_stats(adapter); 1890 + } else { 1891 + tx_pending = (igbvf_desc_unused(tx_ring) + 1 < 1892 + tx_ring->count); 1893 + if (tx_pending) { 1894 + /* 1895 + * We've lost link, so the controller stops DMA, 1896 + * but we've got queued Tx work that's never going 1897 + * to get done, so reset controller to flush Tx. 1898 + * (Do the reset outside of interrupt context). 1899 + */ 1900 + adapter->tx_timeout_count++; 1901 + schedule_work(&adapter->reset_task); 1902 + } 1903 + } 1904 + 1905 + /* Cause software interrupt to ensure Rx ring is cleaned */ 1906 + ew32(EICS, adapter->rx_ring->eims_value); 1907 + 1908 + /* Force detection of hung controller every watchdog period */ 1909 + adapter->detect_tx_hung = 1; 1910 + 1911 + /* Reset the timer */ 1912 + if (!test_bit(__IGBVF_DOWN, &adapter->state)) 1913 + mod_timer(&adapter->watchdog_timer, 1914 + round_jiffies(jiffies + (2 * HZ))); 1915 + } 1916 + 1917 + #define IGBVF_TX_FLAGS_CSUM 0x00000001 1918 + #define IGBVF_TX_FLAGS_VLAN 0x00000002 1919 + #define IGBVF_TX_FLAGS_TSO 0x00000004 1920 + #define IGBVF_TX_FLAGS_IPV4 0x00000008 1921 + #define IGBVF_TX_FLAGS_VLAN_MASK 0xffff0000 1922 + #define IGBVF_TX_FLAGS_VLAN_SHIFT 16 1923 + 1924 + static int igbvf_tso(struct igbvf_adapter *adapter, 1925 + struct igbvf_ring *tx_ring, 1926 + struct sk_buff *skb, u32 tx_flags, u8 *hdr_len) 1927 + { 1928 + struct e1000_adv_tx_context_desc *context_desc; 1929 + unsigned int i; 1930 + int err; 1931 + struct igbvf_buffer *buffer_info; 1932 + u32 info = 0, tu_cmd = 0; 1933 + u32 mss_l4len_idx, l4len; 1934 + *hdr_len = 0; 1935 + 1936 + if (skb_header_cloned(skb)) { 1937 + err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); 1938 + if (err) { 1939 + dev_err(&adapter->pdev->dev, 1940 + "igbvf_tso returning an error\n"); 1941 + return err; 1942 + } 1943 + } 1944 + 1945 + l4len = tcp_hdrlen(skb); 1946 + *hdr_len += l4len; 1947 + 1948 + if (skb->protocol == htons(ETH_P_IP)) { 1949 + struct iphdr *iph = ip_hdr(skb); 1950 + iph->tot_len = 0; 1951 + iph->check = 0; 1952 + tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, 1953 + iph->daddr, 0, 1954 + IPPROTO_TCP, 1955 + 0); 1956 + } else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) { 1957 + ipv6_hdr(skb)->payload_len = 0; 1958 + tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, 1959 + &ipv6_hdr(skb)->daddr, 1960 + 0, IPPROTO_TCP, 0); 1961 + } 1962 + 1963 + i = tx_ring->next_to_use; 1964 + 1965 + buffer_info = &tx_ring->buffer_info[i]; 1966 + context_desc = IGBVF_TX_CTXTDESC_ADV(*tx_ring, i); 1967 + /* VLAN MACLEN IPLEN */ 1968 + if (tx_flags & IGBVF_TX_FLAGS_VLAN) 1969 + info |= (tx_flags & IGBVF_TX_FLAGS_VLAN_MASK); 1970 + info |= (skb_network_offset(skb) << E1000_ADVTXD_MACLEN_SHIFT); 1971 + *hdr_len += skb_network_offset(skb); 1972 + info |= (skb_transport_header(skb) - skb_network_header(skb)); 1973 + *hdr_len += (skb_transport_header(skb) - skb_network_header(skb)); 1974 + context_desc->vlan_macip_lens = cpu_to_le32(info); 1975 + 1976 + /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ 1977 + tu_cmd |= (E1000_TXD_CMD_DEXT | E1000_ADVTXD_DTYP_CTXT); 1978 + 1979 + if (skb->protocol == htons(ETH_P_IP)) 1980 + tu_cmd |= E1000_ADVTXD_TUCMD_IPV4; 1981 + tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP; 1982 + 1983 + context_desc->type_tucmd_mlhl = cpu_to_le32(tu_cmd); 1984 + 1985 + /* MSS L4LEN IDX */ 1986 + mss_l4len_idx = (skb_shinfo(skb)->gso_size << E1000_ADVTXD_MSS_SHIFT); 1987 + mss_l4len_idx |= (l4len << E1000_ADVTXD_L4LEN_SHIFT); 1988 + 1989 + context_desc->mss_l4len_idx = cpu_to_le32(mss_l4len_idx); 1990 + context_desc->seqnum_seed = 0; 1991 + 1992 + buffer_info->time_stamp = jiffies; 1993 + buffer_info->next_to_watch = i; 1994 + buffer_info->dma = 0; 1995 + i++; 1996 + if (i == tx_ring->count) 1997 + i = 0; 1998 + 1999 + tx_ring->next_to_use = i; 2000 + 2001 + return true; 2002 + } 2003 + 2004 + static inline bool igbvf_tx_csum(struct igbvf_adapter *adapter, 2005 + struct igbvf_ring *tx_ring, 2006 + struct sk_buff *skb, u32 tx_flags) 2007 + { 2008 + struct e1000_adv_tx_context_desc *context_desc; 2009 + unsigned int i; 2010 + struct igbvf_buffer *buffer_info; 2011 + u32 info = 0, tu_cmd = 0; 2012 + 2013 + if ((skb->ip_summed == CHECKSUM_PARTIAL) || 2014 + (tx_flags & IGBVF_TX_FLAGS_VLAN)) { 2015 + i = tx_ring->next_to_use; 2016 + buffer_info = &tx_ring->buffer_info[i]; 2017 + context_desc = IGBVF_TX_CTXTDESC_ADV(*tx_ring, i); 2018 + 2019 + if (tx_flags & IGBVF_TX_FLAGS_VLAN) 2020 + info |= (tx_flags & IGBVF_TX_FLAGS_VLAN_MASK); 2021 + 2022 + info |= (skb_network_offset(skb) << E1000_ADVTXD_MACLEN_SHIFT); 2023 + if (skb->ip_summed == CHECKSUM_PARTIAL) 2024 + info |= (skb_transport_header(skb) - 2025 + skb_network_header(skb)); 2026 + 2027 + 2028 + context_desc->vlan_macip_lens = cpu_to_le32(info); 2029 + 2030 + tu_cmd |= (E1000_TXD_CMD_DEXT | E1000_ADVTXD_DTYP_CTXT); 2031 + 2032 + if (skb->ip_summed == CHECKSUM_PARTIAL) { 2033 + switch (skb->protocol) { 2034 + case __constant_htons(ETH_P_IP): 2035 + tu_cmd |= E1000_ADVTXD_TUCMD_IPV4; 2036 + if (ip_hdr(skb)->protocol == IPPROTO_TCP) 2037 + tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP; 2038 + break; 2039 + case __constant_htons(ETH_P_IPV6): 2040 + if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP) 2041 + tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP; 2042 + break; 2043 + default: 2044 + break; 2045 + } 2046 + } 2047 + 2048 + context_desc->type_tucmd_mlhl = cpu_to_le32(tu_cmd); 2049 + context_desc->seqnum_seed = 0; 2050 + context_desc->mss_l4len_idx = 0; 2051 + 2052 + buffer_info->time_stamp = jiffies; 2053 + buffer_info->next_to_watch = i; 2054 + buffer_info->dma = 0; 2055 + i++; 2056 + if (i == tx_ring->count) 2057 + i = 0; 2058 + tx_ring->next_to_use = i; 2059 + 2060 + return true; 2061 + } 2062 + 2063 + return false; 2064 + } 2065 + 2066 + static int igbvf_maybe_stop_tx(struct net_device *netdev, int size) 2067 + { 2068 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2069 + 2070 + /* there is enough descriptors then we don't need to worry */ 2071 + if (igbvf_desc_unused(adapter->tx_ring) >= size) 2072 + return 0; 2073 + 2074 + netif_stop_queue(netdev); 2075 + 2076 + smp_mb(); 2077 + 2078 + /* We need to check again just in case room has been made available */ 2079 + if (igbvf_desc_unused(adapter->tx_ring) < size) 2080 + return -EBUSY; 2081 + 2082 + netif_wake_queue(netdev); 2083 + 2084 + ++adapter->restart_queue; 2085 + return 0; 2086 + } 2087 + 2088 + #define IGBVF_MAX_TXD_PWR 16 2089 + #define IGBVF_MAX_DATA_PER_TXD (1 << IGBVF_MAX_TXD_PWR) 2090 + 2091 + static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter, 2092 + struct igbvf_ring *tx_ring, 2093 + struct sk_buff *skb, 2094 + unsigned int first) 2095 + { 2096 + struct igbvf_buffer *buffer_info; 2097 + unsigned int len = skb_headlen(skb); 2098 + unsigned int count = 0, i; 2099 + unsigned int f; 2100 + dma_addr_t *map; 2101 + 2102 + i = tx_ring->next_to_use; 2103 + 2104 + if (skb_dma_map(&adapter->pdev->dev, skb, DMA_TO_DEVICE)) { 2105 + dev_err(&adapter->pdev->dev, "TX DMA map failed\n"); 2106 + return 0; 2107 + } 2108 + 2109 + map = skb_shinfo(skb)->dma_maps; 2110 + 2111 + buffer_info = &tx_ring->buffer_info[i]; 2112 + BUG_ON(len >= IGBVF_MAX_DATA_PER_TXD); 2113 + buffer_info->length = len; 2114 + /* set time_stamp *before* dma to help avoid a possible race */ 2115 + buffer_info->time_stamp = jiffies; 2116 + buffer_info->next_to_watch = i; 2117 + buffer_info->dma = map[count]; 2118 + count++; 2119 + 2120 + for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) { 2121 + struct skb_frag_struct *frag; 2122 + 2123 + i++; 2124 + if (i == tx_ring->count) 2125 + i = 0; 2126 + 2127 + frag = &skb_shinfo(skb)->frags[f]; 2128 + len = frag->size; 2129 + 2130 + buffer_info = &tx_ring->buffer_info[i]; 2131 + BUG_ON(len >= IGBVF_MAX_DATA_PER_TXD); 2132 + buffer_info->length = len; 2133 + buffer_info->time_stamp = jiffies; 2134 + buffer_info->next_to_watch = i; 2135 + buffer_info->dma = map[count]; 2136 + count++; 2137 + } 2138 + 2139 + tx_ring->buffer_info[i].skb = skb; 2140 + tx_ring->buffer_info[first].next_to_watch = i; 2141 + 2142 + return count; 2143 + } 2144 + 2145 + static inline void igbvf_tx_queue_adv(struct igbvf_adapter *adapter, 2146 + struct igbvf_ring *tx_ring, 2147 + int tx_flags, int count, u32 paylen, 2148 + u8 hdr_len) 2149 + { 2150 + union e1000_adv_tx_desc *tx_desc = NULL; 2151 + struct igbvf_buffer *buffer_info; 2152 + u32 olinfo_status = 0, cmd_type_len; 2153 + unsigned int i; 2154 + 2155 + cmd_type_len = (E1000_ADVTXD_DTYP_DATA | E1000_ADVTXD_DCMD_IFCS | 2156 + E1000_ADVTXD_DCMD_DEXT); 2157 + 2158 + if (tx_flags & IGBVF_TX_FLAGS_VLAN) 2159 + cmd_type_len |= E1000_ADVTXD_DCMD_VLE; 2160 + 2161 + if (tx_flags & IGBVF_TX_FLAGS_TSO) { 2162 + cmd_type_len |= E1000_ADVTXD_DCMD_TSE; 2163 + 2164 + /* insert tcp checksum */ 2165 + olinfo_status |= E1000_TXD_POPTS_TXSM << 8; 2166 + 2167 + /* insert ip checksum */ 2168 + if (tx_flags & IGBVF_TX_FLAGS_IPV4) 2169 + olinfo_status |= E1000_TXD_POPTS_IXSM << 8; 2170 + 2171 + } else if (tx_flags & IGBVF_TX_FLAGS_CSUM) { 2172 + olinfo_status |= E1000_TXD_POPTS_TXSM << 8; 2173 + } 2174 + 2175 + olinfo_status |= ((paylen - hdr_len) << E1000_ADVTXD_PAYLEN_SHIFT); 2176 + 2177 + i = tx_ring->next_to_use; 2178 + while (count--) { 2179 + buffer_info = &tx_ring->buffer_info[i]; 2180 + tx_desc = IGBVF_TX_DESC_ADV(*tx_ring, i); 2181 + tx_desc->read.buffer_addr = cpu_to_le64(buffer_info->dma); 2182 + tx_desc->read.cmd_type_len = 2183 + cpu_to_le32(cmd_type_len | buffer_info->length); 2184 + tx_desc->read.olinfo_status = cpu_to_le32(olinfo_status); 2185 + i++; 2186 + if (i == tx_ring->count) 2187 + i = 0; 2188 + } 2189 + 2190 + tx_desc->read.cmd_type_len |= cpu_to_le32(adapter->txd_cmd); 2191 + /* Force memory writes to complete before letting h/w 2192 + * know there are new descriptors to fetch. (Only 2193 + * applicable for weak-ordered memory model archs, 2194 + * such as IA-64). */ 2195 + wmb(); 2196 + 2197 + tx_ring->next_to_use = i; 2198 + writel(i, adapter->hw.hw_addr + tx_ring->tail); 2199 + /* we need this if more than one processor can write to our tail 2200 + * at a time, it syncronizes IO on IA64/Altix systems */ 2201 + mmiowb(); 2202 + } 2203 + 2204 + static int igbvf_xmit_frame_ring_adv(struct sk_buff *skb, 2205 + struct net_device *netdev, 2206 + struct igbvf_ring *tx_ring) 2207 + { 2208 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2209 + unsigned int first, tx_flags = 0; 2210 + u8 hdr_len = 0; 2211 + int count = 0; 2212 + int tso = 0; 2213 + 2214 + if (test_bit(__IGBVF_DOWN, &adapter->state)) { 2215 + dev_kfree_skb_any(skb); 2216 + return NETDEV_TX_OK; 2217 + } 2218 + 2219 + if (skb->len <= 0) { 2220 + dev_kfree_skb_any(skb); 2221 + return NETDEV_TX_OK; 2222 + } 2223 + 2224 + /* 2225 + * need: count + 4 desc gap to keep tail from touching 2226 + * + 2 desc gap to keep tail from touching head, 2227 + * + 1 desc for skb->data, 2228 + * + 1 desc for context descriptor, 2229 + * head, otherwise try next time 2230 + */ 2231 + if (igbvf_maybe_stop_tx(netdev, skb_shinfo(skb)->nr_frags + 4)) { 2232 + /* this is a hard error */ 2233 + return NETDEV_TX_BUSY; 2234 + } 2235 + 2236 + if (adapter->vlgrp && vlan_tx_tag_present(skb)) { 2237 + tx_flags |= IGBVF_TX_FLAGS_VLAN; 2238 + tx_flags |= (vlan_tx_tag_get(skb) << IGBVF_TX_FLAGS_VLAN_SHIFT); 2239 + } 2240 + 2241 + if (skb->protocol == htons(ETH_P_IP)) 2242 + tx_flags |= IGBVF_TX_FLAGS_IPV4; 2243 + 2244 + first = tx_ring->next_to_use; 2245 + 2246 + tso = skb_is_gso(skb) ? 2247 + igbvf_tso(adapter, tx_ring, skb, tx_flags, &hdr_len) : 0; 2248 + if (unlikely(tso < 0)) { 2249 + dev_kfree_skb_any(skb); 2250 + return NETDEV_TX_OK; 2251 + } 2252 + 2253 + if (tso) 2254 + tx_flags |= IGBVF_TX_FLAGS_TSO; 2255 + else if (igbvf_tx_csum(adapter, tx_ring, skb, tx_flags) && 2256 + (skb->ip_summed == CHECKSUM_PARTIAL)) 2257 + tx_flags |= IGBVF_TX_FLAGS_CSUM; 2258 + 2259 + /* 2260 + * count reflects descriptors mapped, if 0 then mapping error 2261 + * has occured and we need to rewind the descriptor queue 2262 + */ 2263 + count = igbvf_tx_map_adv(adapter, tx_ring, skb, first); 2264 + 2265 + if (count) { 2266 + igbvf_tx_queue_adv(adapter, tx_ring, tx_flags, count, 2267 + skb->len, hdr_len); 2268 + netdev->trans_start = jiffies; 2269 + /* Make sure there is space in the ring for the next send. */ 2270 + igbvf_maybe_stop_tx(netdev, MAX_SKB_FRAGS + 4); 2271 + } else { 2272 + dev_kfree_skb_any(skb); 2273 + tx_ring->buffer_info[first].time_stamp = 0; 2274 + tx_ring->next_to_use = first; 2275 + } 2276 + 2277 + return NETDEV_TX_OK; 2278 + } 2279 + 2280 + static int igbvf_xmit_frame(struct sk_buff *skb, struct net_device *netdev) 2281 + { 2282 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2283 + struct igbvf_ring *tx_ring; 2284 + int retval; 2285 + 2286 + if (test_bit(__IGBVF_DOWN, &adapter->state)) { 2287 + dev_kfree_skb_any(skb); 2288 + return NETDEV_TX_OK; 2289 + } 2290 + 2291 + tx_ring = &adapter->tx_ring[0]; 2292 + 2293 + retval = igbvf_xmit_frame_ring_adv(skb, netdev, tx_ring); 2294 + 2295 + return retval; 2296 + } 2297 + 2298 + /** 2299 + * igbvf_tx_timeout - Respond to a Tx Hang 2300 + * @netdev: network interface device structure 2301 + **/ 2302 + static void igbvf_tx_timeout(struct net_device *netdev) 2303 + { 2304 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2305 + 2306 + /* Do the reset outside of interrupt context */ 2307 + adapter->tx_timeout_count++; 2308 + schedule_work(&adapter->reset_task); 2309 + } 2310 + 2311 + static void igbvf_reset_task(struct work_struct *work) 2312 + { 2313 + struct igbvf_adapter *adapter; 2314 + adapter = container_of(work, struct igbvf_adapter, reset_task); 2315 + 2316 + igbvf_reinit_locked(adapter); 2317 + } 2318 + 2319 + /** 2320 + * igbvf_get_stats - Get System Network Statistics 2321 + * @netdev: network interface device structure 2322 + * 2323 + * Returns the address of the device statistics structure. 2324 + * The statistics are actually updated from the timer callback. 2325 + **/ 2326 + static struct net_device_stats *igbvf_get_stats(struct net_device *netdev) 2327 + { 2328 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2329 + 2330 + /* only return the current stats */ 2331 + return &adapter->net_stats; 2332 + } 2333 + 2334 + /** 2335 + * igbvf_change_mtu - Change the Maximum Transfer Unit 2336 + * @netdev: network interface device structure 2337 + * @new_mtu: new value for maximum frame size 2338 + * 2339 + * Returns 0 on success, negative on failure 2340 + **/ 2341 + static int igbvf_change_mtu(struct net_device *netdev, int new_mtu) 2342 + { 2343 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2344 + int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN; 2345 + 2346 + if ((new_mtu < 68) || (max_frame > MAX_JUMBO_FRAME_SIZE)) { 2347 + dev_err(&adapter->pdev->dev, "Invalid MTU setting\n"); 2348 + return -EINVAL; 2349 + } 2350 + 2351 + /* Jumbo frame size limits */ 2352 + if (max_frame > ETH_FRAME_LEN + ETH_FCS_LEN) { 2353 + if (!(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) { 2354 + dev_err(&adapter->pdev->dev, 2355 + "Jumbo Frames not supported.\n"); 2356 + return -EINVAL; 2357 + } 2358 + } 2359 + 2360 + #define MAX_STD_JUMBO_FRAME_SIZE 9234 2361 + if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) { 2362 + dev_err(&adapter->pdev->dev, "MTU > 9216 not supported.\n"); 2363 + return -EINVAL; 2364 + } 2365 + 2366 + while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) 2367 + msleep(1); 2368 + /* igbvf_down has a dependency on max_frame_size */ 2369 + adapter->max_frame_size = max_frame; 2370 + if (netif_running(netdev)) 2371 + igbvf_down(adapter); 2372 + 2373 + /* 2374 + * NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN 2375 + * means we reserve 2 more, this pushes us to allocate from the next 2376 + * larger slab size. 2377 + * i.e. RXBUFFER_2048 --> size-4096 slab 2378 + * However with the new *_jumbo_rx* routines, jumbo receives will use 2379 + * fragmented skbs 2380 + */ 2381 + 2382 + if (max_frame <= 1024) 2383 + adapter->rx_buffer_len = 1024; 2384 + else if (max_frame <= 2048) 2385 + adapter->rx_buffer_len = 2048; 2386 + else 2387 + #if (PAGE_SIZE / 2) > 16384 2388 + adapter->rx_buffer_len = 16384; 2389 + #else 2390 + adapter->rx_buffer_len = PAGE_SIZE / 2; 2391 + #endif 2392 + 2393 + 2394 + /* adjust allocation if LPE protects us, and we aren't using SBP */ 2395 + if ((max_frame == ETH_FRAME_LEN + ETH_FCS_LEN) || 2396 + (max_frame == ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN)) 2397 + adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + 2398 + ETH_FCS_LEN; 2399 + 2400 + dev_info(&adapter->pdev->dev, "changing MTU from %d to %d\n", 2401 + netdev->mtu, new_mtu); 2402 + netdev->mtu = new_mtu; 2403 + 2404 + if (netif_running(netdev)) 2405 + igbvf_up(adapter); 2406 + else 2407 + igbvf_reset(adapter); 2408 + 2409 + clear_bit(__IGBVF_RESETTING, &adapter->state); 2410 + 2411 + return 0; 2412 + } 2413 + 2414 + static int igbvf_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) 2415 + { 2416 + switch (cmd) { 2417 + default: 2418 + return -EOPNOTSUPP; 2419 + } 2420 + } 2421 + 2422 + static int igbvf_suspend(struct pci_dev *pdev, pm_message_t state) 2423 + { 2424 + struct net_device *netdev = pci_get_drvdata(pdev); 2425 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2426 + #ifdef CONFIG_PM 2427 + int retval = 0; 2428 + #endif 2429 + 2430 + netif_device_detach(netdev); 2431 + 2432 + if (netif_running(netdev)) { 2433 + WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state)); 2434 + igbvf_down(adapter); 2435 + igbvf_free_irq(adapter); 2436 + } 2437 + 2438 + #ifdef CONFIG_PM 2439 + retval = pci_save_state(pdev); 2440 + if (retval) 2441 + return retval; 2442 + #endif 2443 + 2444 + pci_disable_device(pdev); 2445 + 2446 + return 0; 2447 + } 2448 + 2449 + #ifdef CONFIG_PM 2450 + static int igbvf_resume(struct pci_dev *pdev) 2451 + { 2452 + struct net_device *netdev = pci_get_drvdata(pdev); 2453 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2454 + u32 err; 2455 + 2456 + pci_restore_state(pdev); 2457 + err = pci_enable_device_mem(pdev); 2458 + if (err) { 2459 + dev_err(&pdev->dev, "Cannot enable PCI device from suspend\n"); 2460 + return err; 2461 + } 2462 + 2463 + pci_set_master(pdev); 2464 + 2465 + if (netif_running(netdev)) { 2466 + err = igbvf_request_irq(adapter); 2467 + if (err) 2468 + return err; 2469 + } 2470 + 2471 + igbvf_reset(adapter); 2472 + 2473 + if (netif_running(netdev)) 2474 + igbvf_up(adapter); 2475 + 2476 + netif_device_attach(netdev); 2477 + 2478 + return 0; 2479 + } 2480 + #endif 2481 + 2482 + static void igbvf_shutdown(struct pci_dev *pdev) 2483 + { 2484 + igbvf_suspend(pdev, PMSG_SUSPEND); 2485 + } 2486 + 2487 + #ifdef CONFIG_NET_POLL_CONTROLLER 2488 + /* 2489 + * Polling 'interrupt' - used by things like netconsole to send skbs 2490 + * without having to re-enable interrupts. It's not called while 2491 + * the interrupt routine is executing. 2492 + */ 2493 + static void igbvf_netpoll(struct net_device *netdev) 2494 + { 2495 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2496 + 2497 + disable_irq(adapter->pdev->irq); 2498 + 2499 + igbvf_clean_tx_irq(adapter->tx_ring); 2500 + 2501 + enable_irq(adapter->pdev->irq); 2502 + } 2503 + #endif 2504 + 2505 + /** 2506 + * igbvf_io_error_detected - called when PCI error is detected 2507 + * @pdev: Pointer to PCI device 2508 + * @state: The current pci connection state 2509 + * 2510 + * This function is called after a PCI bus error affecting 2511 + * this device has been detected. 2512 + */ 2513 + static pci_ers_result_t igbvf_io_error_detected(struct pci_dev *pdev, 2514 + pci_channel_state_t state) 2515 + { 2516 + struct net_device *netdev = pci_get_drvdata(pdev); 2517 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2518 + 2519 + netif_device_detach(netdev); 2520 + 2521 + if (netif_running(netdev)) 2522 + igbvf_down(adapter); 2523 + pci_disable_device(pdev); 2524 + 2525 + /* Request a slot slot reset. */ 2526 + return PCI_ERS_RESULT_NEED_RESET; 2527 + } 2528 + 2529 + /** 2530 + * igbvf_io_slot_reset - called after the pci bus has been reset. 2531 + * @pdev: Pointer to PCI device 2532 + * 2533 + * Restart the card from scratch, as if from a cold-boot. Implementation 2534 + * resembles the first-half of the igbvf_resume routine. 2535 + */ 2536 + static pci_ers_result_t igbvf_io_slot_reset(struct pci_dev *pdev) 2537 + { 2538 + struct net_device *netdev = pci_get_drvdata(pdev); 2539 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2540 + 2541 + if (pci_enable_device_mem(pdev)) { 2542 + dev_err(&pdev->dev, 2543 + "Cannot re-enable PCI device after reset.\n"); 2544 + return PCI_ERS_RESULT_DISCONNECT; 2545 + } 2546 + pci_set_master(pdev); 2547 + 2548 + igbvf_reset(adapter); 2549 + 2550 + return PCI_ERS_RESULT_RECOVERED; 2551 + } 2552 + 2553 + /** 2554 + * igbvf_io_resume - called when traffic can start flowing again. 2555 + * @pdev: Pointer to PCI device 2556 + * 2557 + * This callback is called when the error recovery driver tells us that 2558 + * its OK to resume normal operation. Implementation resembles the 2559 + * second-half of the igbvf_resume routine. 2560 + */ 2561 + static void igbvf_io_resume(struct pci_dev *pdev) 2562 + { 2563 + struct net_device *netdev = pci_get_drvdata(pdev); 2564 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2565 + 2566 + if (netif_running(netdev)) { 2567 + if (igbvf_up(adapter)) { 2568 + dev_err(&pdev->dev, 2569 + "can't bring device back up after reset\n"); 2570 + return; 2571 + } 2572 + } 2573 + 2574 + netif_device_attach(netdev); 2575 + } 2576 + 2577 + static void igbvf_print_device_info(struct igbvf_adapter *adapter) 2578 + { 2579 + struct e1000_hw *hw = &adapter->hw; 2580 + struct net_device *netdev = adapter->netdev; 2581 + struct pci_dev *pdev = adapter->pdev; 2582 + 2583 + dev_info(&pdev->dev, "Intel(R) 82576 Virtual Function\n"); 2584 + dev_info(&pdev->dev, "Address: %02x:%02x:%02x:%02x:%02x:%02x\n", 2585 + /* MAC address */ 2586 + netdev->dev_addr[0], netdev->dev_addr[1], 2587 + netdev->dev_addr[2], netdev->dev_addr[3], 2588 + netdev->dev_addr[4], netdev->dev_addr[5]); 2589 + dev_info(&pdev->dev, "MAC: %d\n", hw->mac.type); 2590 + } 2591 + 2592 + static const struct net_device_ops igbvf_netdev_ops = { 2593 + .ndo_open = igbvf_open, 2594 + .ndo_stop = igbvf_close, 2595 + .ndo_start_xmit = igbvf_xmit_frame, 2596 + .ndo_get_stats = igbvf_get_stats, 2597 + .ndo_set_multicast_list = igbvf_set_multi, 2598 + .ndo_set_mac_address = igbvf_set_mac, 2599 + .ndo_change_mtu = igbvf_change_mtu, 2600 + .ndo_do_ioctl = igbvf_ioctl, 2601 + .ndo_tx_timeout = igbvf_tx_timeout, 2602 + .ndo_vlan_rx_register = igbvf_vlan_rx_register, 2603 + .ndo_vlan_rx_add_vid = igbvf_vlan_rx_add_vid, 2604 + .ndo_vlan_rx_kill_vid = igbvf_vlan_rx_kill_vid, 2605 + #ifdef CONFIG_NET_POLL_CONTROLLER 2606 + .ndo_poll_controller = igbvf_netpoll, 2607 + #endif 2608 + }; 2609 + 2610 + /** 2611 + * igbvf_probe - Device Initialization Routine 2612 + * @pdev: PCI device information struct 2613 + * @ent: entry in igbvf_pci_tbl 2614 + * 2615 + * Returns 0 on success, negative on failure 2616 + * 2617 + * igbvf_probe initializes an adapter identified by a pci_dev structure. 2618 + * The OS initialization, configuring of the adapter private structure, 2619 + * and a hardware reset occur. 2620 + **/ 2621 + static int __devinit igbvf_probe(struct pci_dev *pdev, 2622 + const struct pci_device_id *ent) 2623 + { 2624 + struct net_device *netdev; 2625 + struct igbvf_adapter *adapter; 2626 + struct e1000_hw *hw; 2627 + const struct igbvf_info *ei = igbvf_info_tbl[ent->driver_data]; 2628 + 2629 + static int cards_found; 2630 + int err, pci_using_dac; 2631 + 2632 + err = pci_enable_device_mem(pdev); 2633 + if (err) 2634 + return err; 2635 + 2636 + pci_using_dac = 0; 2637 + err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 2638 + if (!err) { 2639 + err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 2640 + if (!err) 2641 + pci_using_dac = 1; 2642 + } else { 2643 + err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2644 + if (err) { 2645 + err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 2646 + if (err) { 2647 + dev_err(&pdev->dev, "No usable DMA " 2648 + "configuration, aborting\n"); 2649 + goto err_dma; 2650 + } 2651 + } 2652 + } 2653 + 2654 + err = pci_request_regions(pdev, igbvf_driver_name); 2655 + if (err) 2656 + goto err_pci_reg; 2657 + 2658 + pci_set_master(pdev); 2659 + 2660 + err = -ENOMEM; 2661 + netdev = alloc_etherdev(sizeof(struct igbvf_adapter)); 2662 + if (!netdev) 2663 + goto err_alloc_etherdev; 2664 + 2665 + SET_NETDEV_DEV(netdev, &pdev->dev); 2666 + 2667 + pci_set_drvdata(pdev, netdev); 2668 + adapter = netdev_priv(netdev); 2669 + hw = &adapter->hw; 2670 + adapter->netdev = netdev; 2671 + adapter->pdev = pdev; 2672 + adapter->ei = ei; 2673 + adapter->pba = ei->pba; 2674 + adapter->flags = ei->flags; 2675 + adapter->hw.back = adapter; 2676 + adapter->hw.mac.type = ei->mac; 2677 + adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1; 2678 + 2679 + /* PCI config space info */ 2680 + 2681 + hw->vendor_id = pdev->vendor; 2682 + hw->device_id = pdev->device; 2683 + hw->subsystem_vendor_id = pdev->subsystem_vendor; 2684 + hw->subsystem_device_id = pdev->subsystem_device; 2685 + 2686 + pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id); 2687 + 2688 + err = -EIO; 2689 + adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0), 2690 + pci_resource_len(pdev, 0)); 2691 + 2692 + if (!adapter->hw.hw_addr) 2693 + goto err_ioremap; 2694 + 2695 + if (ei->get_variants) { 2696 + err = ei->get_variants(adapter); 2697 + if (err) 2698 + goto err_ioremap; 2699 + } 2700 + 2701 + /* setup adapter struct */ 2702 + err = igbvf_sw_init(adapter); 2703 + if (err) 2704 + goto err_sw_init; 2705 + 2706 + /* construct the net_device struct */ 2707 + netdev->netdev_ops = &igbvf_netdev_ops; 2708 + 2709 + igbvf_set_ethtool_ops(netdev); 2710 + netdev->watchdog_timeo = 5 * HZ; 2711 + strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1); 2712 + 2713 + adapter->bd_number = cards_found++; 2714 + 2715 + netdev->features = NETIF_F_SG | 2716 + NETIF_F_IP_CSUM | 2717 + NETIF_F_HW_VLAN_TX | 2718 + NETIF_F_HW_VLAN_RX | 2719 + NETIF_F_HW_VLAN_FILTER; 2720 + 2721 + netdev->features |= NETIF_F_IPV6_CSUM; 2722 + netdev->features |= NETIF_F_TSO; 2723 + netdev->features |= NETIF_F_TSO6; 2724 + 2725 + if (pci_using_dac) 2726 + netdev->features |= NETIF_F_HIGHDMA; 2727 + 2728 + netdev->vlan_features |= NETIF_F_TSO; 2729 + netdev->vlan_features |= NETIF_F_TSO6; 2730 + netdev->vlan_features |= NETIF_F_IP_CSUM; 2731 + netdev->vlan_features |= NETIF_F_IPV6_CSUM; 2732 + netdev->vlan_features |= NETIF_F_SG; 2733 + 2734 + /*reset the controller to put the device in a known good state */ 2735 + err = hw->mac.ops.reset_hw(hw); 2736 + if (err) { 2737 + dev_info(&pdev->dev, 2738 + "PF still in reset state, assigning new address\n"); 2739 + random_ether_addr(hw->mac.addr); 2740 + } else { 2741 + err = hw->mac.ops.read_mac_addr(hw); 2742 + if (err) { 2743 + dev_err(&pdev->dev, "Error reading MAC address\n"); 2744 + goto err_hw_init; 2745 + } 2746 + } 2747 + 2748 + memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len); 2749 + memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len); 2750 + 2751 + if (!is_valid_ether_addr(netdev->perm_addr)) { 2752 + dev_err(&pdev->dev, "Invalid MAC Address: " 2753 + "%02x:%02x:%02x:%02x:%02x:%02x\n", 2754 + netdev->dev_addr[0], netdev->dev_addr[1], 2755 + netdev->dev_addr[2], netdev->dev_addr[3], 2756 + netdev->dev_addr[4], netdev->dev_addr[5]); 2757 + err = -EIO; 2758 + goto err_hw_init; 2759 + } 2760 + 2761 + setup_timer(&adapter->watchdog_timer, &igbvf_watchdog, 2762 + (unsigned long) adapter); 2763 + 2764 + INIT_WORK(&adapter->reset_task, igbvf_reset_task); 2765 + INIT_WORK(&adapter->watchdog_task, igbvf_watchdog_task); 2766 + 2767 + /* ring size defaults */ 2768 + adapter->rx_ring->count = 1024; 2769 + adapter->tx_ring->count = 1024; 2770 + 2771 + /* reset the hardware with the new settings */ 2772 + igbvf_reset(adapter); 2773 + 2774 + /* tell the stack to leave us alone until igbvf_open() is called */ 2775 + netif_carrier_off(netdev); 2776 + netif_stop_queue(netdev); 2777 + 2778 + strcpy(netdev->name, "eth%d"); 2779 + err = register_netdev(netdev); 2780 + if (err) 2781 + goto err_hw_init; 2782 + 2783 + igbvf_print_device_info(adapter); 2784 + 2785 + igbvf_initialize_last_counter_stats(adapter); 2786 + 2787 + return 0; 2788 + 2789 + err_hw_init: 2790 + kfree(adapter->tx_ring); 2791 + kfree(adapter->rx_ring); 2792 + err_sw_init: 2793 + igbvf_reset_interrupt_capability(adapter); 2794 + iounmap(adapter->hw.hw_addr); 2795 + err_ioremap: 2796 + free_netdev(netdev); 2797 + err_alloc_etherdev: 2798 + pci_release_regions(pdev); 2799 + err_pci_reg: 2800 + err_dma: 2801 + pci_disable_device(pdev); 2802 + return err; 2803 + } 2804 + 2805 + /** 2806 + * igbvf_remove - Device Removal Routine 2807 + * @pdev: PCI device information struct 2808 + * 2809 + * igbvf_remove is called by the PCI subsystem to alert the driver 2810 + * that it should release a PCI device. The could be caused by a 2811 + * Hot-Plug event, or because the driver is going to be removed from 2812 + * memory. 2813 + **/ 2814 + static void __devexit igbvf_remove(struct pci_dev *pdev) 2815 + { 2816 + struct net_device *netdev = pci_get_drvdata(pdev); 2817 + struct igbvf_adapter *adapter = netdev_priv(netdev); 2818 + struct e1000_hw *hw = &adapter->hw; 2819 + 2820 + /* 2821 + * flush_scheduled work may reschedule our watchdog task, so 2822 + * explicitly disable watchdog tasks from being rescheduled 2823 + */ 2824 + set_bit(__IGBVF_DOWN, &adapter->state); 2825 + del_timer_sync(&adapter->watchdog_timer); 2826 + 2827 + flush_scheduled_work(); 2828 + 2829 + unregister_netdev(netdev); 2830 + 2831 + igbvf_reset_interrupt_capability(adapter); 2832 + 2833 + /* 2834 + * it is important to delete the napi struct prior to freeing the 2835 + * rx ring so that you do not end up with null pointer refs 2836 + */ 2837 + netif_napi_del(&adapter->rx_ring->napi); 2838 + kfree(adapter->tx_ring); 2839 + kfree(adapter->rx_ring); 2840 + 2841 + iounmap(hw->hw_addr); 2842 + if (hw->flash_address) 2843 + iounmap(hw->flash_address); 2844 + pci_release_regions(pdev); 2845 + 2846 + free_netdev(netdev); 2847 + 2848 + pci_disable_device(pdev); 2849 + } 2850 + 2851 + /* PCI Error Recovery (ERS) */ 2852 + static struct pci_error_handlers igbvf_err_handler = { 2853 + .error_detected = igbvf_io_error_detected, 2854 + .slot_reset = igbvf_io_slot_reset, 2855 + .resume = igbvf_io_resume, 2856 + }; 2857 + 2858 + static struct pci_device_id igbvf_pci_tbl[] = { 2859 + { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_VF), board_vf }, 2860 + { } /* terminate list */ 2861 + }; 2862 + MODULE_DEVICE_TABLE(pci, igbvf_pci_tbl); 2863 + 2864 + /* PCI Device API Driver */ 2865 + static struct pci_driver igbvf_driver = { 2866 + .name = igbvf_driver_name, 2867 + .id_table = igbvf_pci_tbl, 2868 + .probe = igbvf_probe, 2869 + .remove = __devexit_p(igbvf_remove), 2870 + #ifdef CONFIG_PM 2871 + /* Power Management Hooks */ 2872 + .suspend = igbvf_suspend, 2873 + .resume = igbvf_resume, 2874 + #endif 2875 + .shutdown = igbvf_shutdown, 2876 + .err_handler = &igbvf_err_handler 2877 + }; 2878 + 2879 + /** 2880 + * igbvf_init_module - Driver Registration Routine 2881 + * 2882 + * igbvf_init_module is the first routine called when the driver is 2883 + * loaded. All it does is register with the PCI subsystem. 2884 + **/ 2885 + static int __init igbvf_init_module(void) 2886 + { 2887 + int ret; 2888 + printk(KERN_INFO "%s - version %s\n", 2889 + igbvf_driver_string, igbvf_driver_version); 2890 + printk(KERN_INFO "%s\n", igbvf_copyright); 2891 + 2892 + ret = pci_register_driver(&igbvf_driver); 2893 + pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, igbvf_driver_name, 2894 + PM_QOS_DEFAULT_VALUE); 2895 + 2896 + return ret; 2897 + } 2898 + module_init(igbvf_init_module); 2899 + 2900 + /** 2901 + * igbvf_exit_module - Driver Exit Cleanup Routine 2902 + * 2903 + * igbvf_exit_module is called just before the driver is removed 2904 + * from memory. 2905 + **/ 2906 + static void __exit igbvf_exit_module(void) 2907 + { 2908 + pci_unregister_driver(&igbvf_driver); 2909 + pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, igbvf_driver_name); 2910 + } 2911 + module_exit(igbvf_exit_module); 2912 + 2913 + 2914 + MODULE_AUTHOR("Intel Corporation, <e1000-devel@lists.sourceforge.net>"); 2915 + MODULE_DESCRIPTION("Intel(R) 82576 Virtual Function Network Driver"); 2916 + MODULE_LICENSE("GPL"); 2917 + MODULE_VERSION(DRV_VERSION); 2918 + 2919 + /* netdev.c */
+108
drivers/net/igbvf/regs.h
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + #ifndef _E1000_REGS_H_ 29 + #define _E1000_REGS_H_ 30 + 31 + #define E1000_CTRL 0x00000 /* Device Control - RW */ 32 + #define E1000_STATUS 0x00008 /* Device Status - RO */ 33 + #define E1000_ITR 0x000C4 /* Interrupt Throttling Rate - RW */ 34 + #define E1000_EICR 0x01580 /* Ext. Interrupt Cause Read - R/clr */ 35 + #define E1000_EITR(_n) (0x01680 + (0x4 * (_n))) 36 + #define E1000_EICS 0x01520 /* Ext. Interrupt Cause Set - W0 */ 37 + #define E1000_EIMS 0x01524 /* Ext. Interrupt Mask Set/Read - RW */ 38 + #define E1000_EIMC 0x01528 /* Ext. Interrupt Mask Clear - WO */ 39 + #define E1000_EIAC 0x0152C /* Ext. Interrupt Auto Clear - RW */ 40 + #define E1000_EIAM 0x01530 /* Ext. Interrupt Ack Auto Clear Mask - RW */ 41 + #define E1000_IVAR0 0x01700 /* Interrupt Vector Allocation (array) - RW */ 42 + #define E1000_IVAR_MISC 0x01740 /* IVAR for "other" causes - RW */ 43 + /* 44 + * Convenience macros 45 + * 46 + * Note: "_n" is the queue number of the register to be written to. 47 + * 48 + * Example usage: 49 + * E1000_RDBAL_REG(current_rx_queue) 50 + */ 51 + #define E1000_RDBAL(_n) ((_n) < 4 ? (0x02800 + ((_n) * 0x100)) : \ 52 + (0x0C000 + ((_n) * 0x40))) 53 + #define E1000_RDBAH(_n) ((_n) < 4 ? (0x02804 + ((_n) * 0x100)) : \ 54 + (0x0C004 + ((_n) * 0x40))) 55 + #define E1000_RDLEN(_n) ((_n) < 4 ? (0x02808 + ((_n) * 0x100)) : \ 56 + (0x0C008 + ((_n) * 0x40))) 57 + #define E1000_SRRCTL(_n) ((_n) < 4 ? (0x0280C + ((_n) * 0x100)) : \ 58 + (0x0C00C + ((_n) * 0x40))) 59 + #define E1000_RDH(_n) ((_n) < 4 ? (0x02810 + ((_n) * 0x100)) : \ 60 + (0x0C010 + ((_n) * 0x40))) 61 + #define E1000_RDT(_n) ((_n) < 4 ? (0x02818 + ((_n) * 0x100)) : \ 62 + (0x0C018 + ((_n) * 0x40))) 63 + #define E1000_RXDCTL(_n) ((_n) < 4 ? (0x02828 + ((_n) * 0x100)) : \ 64 + (0x0C028 + ((_n) * 0x40))) 65 + #define E1000_TDBAL(_n) ((_n) < 4 ? (0x03800 + ((_n) * 0x100)) : \ 66 + (0x0E000 + ((_n) * 0x40))) 67 + #define E1000_TDBAH(_n) ((_n) < 4 ? (0x03804 + ((_n) * 0x100)) : \ 68 + (0x0E004 + ((_n) * 0x40))) 69 + #define E1000_TDLEN(_n) ((_n) < 4 ? (0x03808 + ((_n) * 0x100)) : \ 70 + (0x0E008 + ((_n) * 0x40))) 71 + #define E1000_TDH(_n) ((_n) < 4 ? (0x03810 + ((_n) * 0x100)) : \ 72 + (0x0E010 + ((_n) * 0x40))) 73 + #define E1000_TDT(_n) ((_n) < 4 ? (0x03818 + ((_n) * 0x100)) : \ 74 + (0x0E018 + ((_n) * 0x40))) 75 + #define E1000_TXDCTL(_n) ((_n) < 4 ? (0x03828 + ((_n) * 0x100)) : \ 76 + (0x0E028 + ((_n) * 0x40))) 77 + #define E1000_DCA_TXCTRL(_n) (0x03814 + (_n << 8)) 78 + #define E1000_DCA_RXCTRL(_n) (0x02814 + (_n << 8)) 79 + #define E1000_RAL(_i) (((_i) <= 15) ? (0x05400 + ((_i) * 8)) : \ 80 + (0x054E0 + ((_i - 16) * 8))) 81 + #define E1000_RAH(_i) (((_i) <= 15) ? (0x05404 + ((_i) * 8)) : \ 82 + (0x054E4 + ((_i - 16) * 8))) 83 + 84 + /* Statistics registers */ 85 + #define E1000_VFGPRC 0x00F10 86 + #define E1000_VFGORC 0x00F18 87 + #define E1000_VFMPRC 0x00F3C 88 + #define E1000_VFGPTC 0x00F14 89 + #define E1000_VFGOTC 0x00F34 90 + #define E1000_VFGOTLBC 0x00F50 91 + #define E1000_VFGPTLBC 0x00F44 92 + #define E1000_VFGORLBC 0x00F48 93 + #define E1000_VFGPRLBC 0x00F40 94 + 95 + /* These act per VF so an array friendly macro is used */ 96 + #define E1000_V2PMAILBOX(_n) (0x00C40 + (4 * (_n))) 97 + #define E1000_VMBMEM(_n) (0x00800 + (64 * (_n))) 98 + 99 + /* Define macros for handling registers */ 100 + #define er32(reg) readl(hw->hw_addr + E1000_##reg) 101 + #define ew32(reg, val) writel((val), hw->hw_addr + E1000_##reg) 102 + #define array_er32(reg, offset) \ 103 + readl(hw->hw_addr + E1000_##reg + (offset << 2)) 104 + #define array_ew32(reg, offset, val) \ 105 + writel((val), hw->hw_addr + E1000_##reg + (offset << 2)) 106 + #define e1e_flush() er32(STATUS) 107 + 108 + #endif
+398
drivers/net/igbvf/vf.c
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + 29 + #include "vf.h" 30 + 31 + static s32 e1000_check_for_link_vf(struct e1000_hw *hw); 32 + static s32 e1000_get_link_up_info_vf(struct e1000_hw *hw, u16 *speed, 33 + u16 *duplex); 34 + static s32 e1000_init_hw_vf(struct e1000_hw *hw); 35 + static s32 e1000_reset_hw_vf(struct e1000_hw *hw); 36 + 37 + static void e1000_update_mc_addr_list_vf(struct e1000_hw *hw, u8 *, 38 + u32, u32, u32); 39 + static void e1000_rar_set_vf(struct e1000_hw *, u8 *, u32); 40 + static s32 e1000_read_mac_addr_vf(struct e1000_hw *); 41 + static s32 e1000_set_vfta_vf(struct e1000_hw *, u16, bool); 42 + 43 + /** 44 + * e1000_init_mac_params_vf - Inits MAC params 45 + * @hw: pointer to the HW structure 46 + **/ 47 + s32 e1000_init_mac_params_vf(struct e1000_hw *hw) 48 + { 49 + struct e1000_mac_info *mac = &hw->mac; 50 + 51 + /* VF's have no MTA Registers - PF feature only */ 52 + mac->mta_reg_count = 128; 53 + /* VF's have no access to RAR entries */ 54 + mac->rar_entry_count = 1; 55 + 56 + /* Function pointers */ 57 + /* reset */ 58 + mac->ops.reset_hw = e1000_reset_hw_vf; 59 + /* hw initialization */ 60 + mac->ops.init_hw = e1000_init_hw_vf; 61 + /* check for link */ 62 + mac->ops.check_for_link = e1000_check_for_link_vf; 63 + /* link info */ 64 + mac->ops.get_link_up_info = e1000_get_link_up_info_vf; 65 + /* multicast address update */ 66 + mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_vf; 67 + /* set mac address */ 68 + mac->ops.rar_set = e1000_rar_set_vf; 69 + /* read mac address */ 70 + mac->ops.read_mac_addr = e1000_read_mac_addr_vf; 71 + /* set vlan filter table array */ 72 + mac->ops.set_vfta = e1000_set_vfta_vf; 73 + 74 + return E1000_SUCCESS; 75 + } 76 + 77 + /** 78 + * e1000_init_function_pointers_vf - Inits function pointers 79 + * @hw: pointer to the HW structure 80 + **/ 81 + void e1000_init_function_pointers_vf(struct e1000_hw *hw) 82 + { 83 + hw->mac.ops.init_params = e1000_init_mac_params_vf; 84 + hw->mbx.ops.init_params = e1000_init_mbx_params_vf; 85 + } 86 + 87 + /** 88 + * e1000_get_link_up_info_vf - Gets link info. 89 + * @hw: pointer to the HW structure 90 + * @speed: pointer to 16 bit value to store link speed. 91 + * @duplex: pointer to 16 bit value to store duplex. 92 + * 93 + * Since we cannot read the PHY and get accurate link info, we must rely upon 94 + * the status register's data which is often stale and inaccurate. 95 + **/ 96 + static s32 e1000_get_link_up_info_vf(struct e1000_hw *hw, u16 *speed, 97 + u16 *duplex) 98 + { 99 + s32 status; 100 + 101 + status = er32(STATUS); 102 + if (status & E1000_STATUS_SPEED_1000) 103 + *speed = SPEED_1000; 104 + else if (status & E1000_STATUS_SPEED_100) 105 + *speed = SPEED_100; 106 + else 107 + *speed = SPEED_10; 108 + 109 + if (status & E1000_STATUS_FD) 110 + *duplex = FULL_DUPLEX; 111 + else 112 + *duplex = HALF_DUPLEX; 113 + 114 + return E1000_SUCCESS; 115 + } 116 + 117 + /** 118 + * e1000_reset_hw_vf - Resets the HW 119 + * @hw: pointer to the HW structure 120 + * 121 + * VF's provide a function level reset. This is done using bit 26 of ctrl_reg. 122 + * This is all the reset we can perform on a VF. 123 + **/ 124 + static s32 e1000_reset_hw_vf(struct e1000_hw *hw) 125 + { 126 + struct e1000_mbx_info *mbx = &hw->mbx; 127 + u32 timeout = E1000_VF_INIT_TIMEOUT; 128 + u32 ret_val = -E1000_ERR_MAC_INIT; 129 + u32 msgbuf[3]; 130 + u8 *addr = (u8 *)(&msgbuf[1]); 131 + u32 ctrl; 132 + 133 + /* assert vf queue/interrupt reset */ 134 + ctrl = er32(CTRL); 135 + ew32(CTRL, ctrl | E1000_CTRL_RST); 136 + 137 + /* we cannot initialize while the RSTI / RSTD bits are asserted */ 138 + while (!mbx->ops.check_for_rst(hw) && timeout) { 139 + timeout--; 140 + udelay(5); 141 + } 142 + 143 + if (timeout) { 144 + /* mailbox timeout can now become active */ 145 + mbx->timeout = E1000_VF_MBX_INIT_TIMEOUT; 146 + 147 + /* notify pf of vf reset completion */ 148 + msgbuf[0] = E1000_VF_RESET; 149 + mbx->ops.write_posted(hw, msgbuf, 1); 150 + 151 + msleep(10); 152 + 153 + /* set our "perm_addr" based on info provided by PF */ 154 + ret_val = mbx->ops.read_posted(hw, msgbuf, 3); 155 + if (!ret_val) { 156 + if (msgbuf[0] == (E1000_VF_RESET | E1000_VT_MSGTYPE_ACK)) 157 + memcpy(hw->mac.perm_addr, addr, 6); 158 + else 159 + ret_val = -E1000_ERR_MAC_INIT; 160 + } 161 + } 162 + 163 + return ret_val; 164 + } 165 + 166 + /** 167 + * e1000_init_hw_vf - Inits the HW 168 + * @hw: pointer to the HW structure 169 + * 170 + * Not much to do here except clear the PF Reset indication if there is one. 171 + **/ 172 + static s32 e1000_init_hw_vf(struct e1000_hw *hw) 173 + { 174 + /* attempt to set and restore our mac address */ 175 + e1000_rar_set_vf(hw, hw->mac.addr, 0); 176 + 177 + return E1000_SUCCESS; 178 + } 179 + 180 + /** 181 + * e1000_hash_mc_addr_vf - Generate a multicast hash value 182 + * @hw: pointer to the HW structure 183 + * @mc_addr: pointer to a multicast address 184 + * 185 + * Generates a multicast address hash value which is used to determine 186 + * the multicast filter table array address and new table value. See 187 + * e1000_mta_set_generic() 188 + **/ 189 + static u32 e1000_hash_mc_addr_vf(struct e1000_hw *hw, u8 *mc_addr) 190 + { 191 + u32 hash_value, hash_mask; 192 + u8 bit_shift = 0; 193 + 194 + /* Register count multiplied by bits per register */ 195 + hash_mask = (hw->mac.mta_reg_count * 32) - 1; 196 + 197 + /* 198 + * The bit_shift is the number of left-shifts 199 + * where 0xFF would still fall within the hash mask. 200 + */ 201 + while (hash_mask >> bit_shift != 0xFF) 202 + bit_shift++; 203 + 204 + hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) | 205 + (((u16) mc_addr[5]) << bit_shift))); 206 + 207 + return hash_value; 208 + } 209 + 210 + /** 211 + * e1000_update_mc_addr_list_vf - Update Multicast addresses 212 + * @hw: pointer to the HW structure 213 + * @mc_addr_list: array of multicast addresses to program 214 + * @mc_addr_count: number of multicast addresses to program 215 + * @rar_used_count: the first RAR register free to program 216 + * @rar_count: total number of supported Receive Address Registers 217 + * 218 + * Updates the Receive Address Registers and Multicast Table Array. 219 + * The caller must have a packed mc_addr_list of multicast addresses. 220 + * The parameter rar_count will usually be hw->mac.rar_entry_count 221 + * unless there are workarounds that change this. 222 + **/ 223 + void e1000_update_mc_addr_list_vf(struct e1000_hw *hw, 224 + u8 *mc_addr_list, u32 mc_addr_count, 225 + u32 rar_used_count, u32 rar_count) 226 + { 227 + struct e1000_mbx_info *mbx = &hw->mbx; 228 + u32 msgbuf[E1000_VFMAILBOX_SIZE]; 229 + u16 *hash_list = (u16 *)&msgbuf[1]; 230 + u32 hash_value; 231 + u32 cnt, i; 232 + 233 + /* Each entry in the list uses 1 16 bit word. We have 30 234 + * 16 bit words available in our HW msg buffer (minus 1 for the 235 + * msg type). That's 30 hash values if we pack 'em right. If 236 + * there are more than 30 MC addresses to add then punt the 237 + * extras for now and then add code to handle more than 30 later. 238 + * It would be unusual for a server to request that many multi-cast 239 + * addresses except for in large enterprise network environments. 240 + */ 241 + 242 + cnt = (mc_addr_count > 30) ? 30 : mc_addr_count; 243 + msgbuf[0] = E1000_VF_SET_MULTICAST; 244 + msgbuf[0] |= cnt << E1000_VT_MSGINFO_SHIFT; 245 + 246 + for (i = 0; i < cnt; i++) { 247 + hash_value = e1000_hash_mc_addr_vf(hw, mc_addr_list); 248 + hash_list[i] = hash_value & 0x0FFFF; 249 + mc_addr_list += ETH_ADDR_LEN; 250 + } 251 + 252 + mbx->ops.write_posted(hw, msgbuf, E1000_VFMAILBOX_SIZE); 253 + } 254 + 255 + /** 256 + * e1000_set_vfta_vf - Set/Unset vlan filter table address 257 + * @hw: pointer to the HW structure 258 + * @vid: determines the vfta register and bit to set/unset 259 + * @set: if true then set bit, else clear bit 260 + **/ 261 + static s32 e1000_set_vfta_vf(struct e1000_hw *hw, u16 vid, bool set) 262 + { 263 + struct e1000_mbx_info *mbx = &hw->mbx; 264 + u32 msgbuf[2]; 265 + s32 err; 266 + 267 + msgbuf[0] = E1000_VF_SET_VLAN; 268 + msgbuf[1] = vid; 269 + /* Setting the 8 bit field MSG INFO to true indicates "add" */ 270 + if (set) 271 + msgbuf[0] |= 1 << E1000_VT_MSGINFO_SHIFT; 272 + 273 + mbx->ops.write_posted(hw, msgbuf, 2); 274 + 275 + err = mbx->ops.read_posted(hw, msgbuf, 2); 276 + 277 + /* if nacked the vlan was rejected */ 278 + if (!err && (msgbuf[0] == (E1000_VF_SET_VLAN | E1000_VT_MSGTYPE_NACK))) 279 + err = -E1000_ERR_MAC_INIT; 280 + 281 + return err; 282 + } 283 + 284 + /** e1000_rlpml_set_vf - Set the maximum receive packet length 285 + * @hw: pointer to the HW structure 286 + * @max_size: value to assign to max frame size 287 + **/ 288 + void e1000_rlpml_set_vf(struct e1000_hw *hw, u16 max_size) 289 + { 290 + struct e1000_mbx_info *mbx = &hw->mbx; 291 + u32 msgbuf[2]; 292 + 293 + msgbuf[0] = E1000_VF_SET_LPE; 294 + msgbuf[1] = max_size; 295 + 296 + mbx->ops.write_posted(hw, msgbuf, 2); 297 + } 298 + 299 + /** 300 + * e1000_rar_set_vf - set device MAC address 301 + * @hw: pointer to the HW structure 302 + * @addr: pointer to the receive address 303 + * @index receive address array register 304 + **/ 305 + static void e1000_rar_set_vf(struct e1000_hw *hw, u8 * addr, u32 index) 306 + { 307 + struct e1000_mbx_info *mbx = &hw->mbx; 308 + u32 msgbuf[3]; 309 + u8 *msg_addr = (u8 *)(&msgbuf[1]); 310 + s32 ret_val; 311 + 312 + memset(msgbuf, 0, 12); 313 + msgbuf[0] = E1000_VF_SET_MAC_ADDR; 314 + memcpy(msg_addr, addr, 6); 315 + ret_val = mbx->ops.write_posted(hw, msgbuf, 3); 316 + 317 + if (!ret_val) 318 + ret_val = mbx->ops.read_posted(hw, msgbuf, 3); 319 + 320 + /* if nacked the address was rejected, use "perm_addr" */ 321 + if (!ret_val && 322 + (msgbuf[0] == (E1000_VF_SET_MAC_ADDR | E1000_VT_MSGTYPE_NACK))) 323 + e1000_read_mac_addr_vf(hw); 324 + } 325 + 326 + /** 327 + * e1000_read_mac_addr_vf - Read device MAC address 328 + * @hw: pointer to the HW structure 329 + **/ 330 + static s32 e1000_read_mac_addr_vf(struct e1000_hw *hw) 331 + { 332 + int i; 333 + 334 + for (i = 0; i < ETH_ADDR_LEN; i++) 335 + hw->mac.addr[i] = hw->mac.perm_addr[i]; 336 + 337 + return E1000_SUCCESS; 338 + } 339 + 340 + /** 341 + * e1000_check_for_link_vf - Check for link for a virtual interface 342 + * @hw: pointer to the HW structure 343 + * 344 + * Checks to see if the underlying PF is still talking to the VF and 345 + * if it is then it reports the link state to the hardware, otherwise 346 + * it reports link down and returns an error. 347 + **/ 348 + static s32 e1000_check_for_link_vf(struct e1000_hw *hw) 349 + { 350 + struct e1000_mbx_info *mbx = &hw->mbx; 351 + struct e1000_mac_info *mac = &hw->mac; 352 + s32 ret_val = E1000_SUCCESS; 353 + u32 in_msg = 0; 354 + 355 + /* 356 + * We only want to run this if there has been a rst asserted. 357 + * in this case that could mean a link change, device reset, 358 + * or a virtual function reset 359 + */ 360 + 361 + /* If we were hit with a reset drop the link */ 362 + if (!mbx->ops.check_for_rst(hw)) 363 + mac->get_link_status = true; 364 + 365 + if (!mac->get_link_status) 366 + goto out; 367 + 368 + /* if link status is down no point in checking to see if pf is up */ 369 + if (!(er32(STATUS) & E1000_STATUS_LU)) 370 + goto out; 371 + 372 + /* if the read failed it could just be a mailbox collision, best wait 373 + * until we are called again and don't report an error */ 374 + if (mbx->ops.read(hw, &in_msg, 1)) 375 + goto out; 376 + 377 + /* if incoming message isn't clear to send we are waiting on response */ 378 + if (!(in_msg & E1000_VT_MSGTYPE_CTS)) { 379 + /* message is not CTS and is NACK we must have lost CTS status */ 380 + if (in_msg & E1000_VT_MSGTYPE_NACK) 381 + ret_val = -E1000_ERR_MAC_INIT; 382 + goto out; 383 + } 384 + 385 + /* the pf is talking, if we timed out in the past we reinit */ 386 + if (!mbx->timeout) { 387 + ret_val = -E1000_ERR_MAC_INIT; 388 + goto out; 389 + } 390 + 391 + /* if we passed all the tests above then the link is up and we no 392 + * longer need to check for link */ 393 + mac->get_link_status = false; 394 + 395 + out: 396 + return ret_val; 397 + } 398 +
+265
drivers/net/igbvf/vf.h
···
··· 1 + /******************************************************************************* 2 + 3 + Intel(R) 82576 Virtual Function Linux driver 4 + Copyright(c) 2009 Intel Corporation. 5 + 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, 8 + version 2, as published by the Free Software Foundation. 9 + 10 + This program is distributed in the hope it will be useful, but WITHOUT 11 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + more details. 14 + 15 + You should have received a copy of the GNU General Public License along with 16 + this program; if not, write to the Free Software Foundation, Inc., 17 + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 + 19 + The full GNU General Public License is included in this distribution in 20 + the file called "COPYING". 21 + 22 + Contact Information: 23 + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 24 + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 25 + 26 + *******************************************************************************/ 27 + 28 + #ifndef _E1000_VF_H_ 29 + #define _E1000_VF_H_ 30 + 31 + #include <linux/pci.h> 32 + #include <linux/delay.h> 33 + #include <linux/interrupt.h> 34 + #include <linux/if_ether.h> 35 + 36 + #include "regs.h" 37 + #include "defines.h" 38 + 39 + struct e1000_hw; 40 + 41 + #define E1000_DEV_ID_82576_VF 0x10CA 42 + #define E1000_REVISION_0 0 43 + #define E1000_REVISION_1 1 44 + #define E1000_REVISION_2 2 45 + #define E1000_REVISION_3 3 46 + #define E1000_REVISION_4 4 47 + 48 + #define E1000_FUNC_0 0 49 + #define E1000_FUNC_1 1 50 + 51 + /* 52 + * Receive Address Register Count 53 + * Number of high/low register pairs in the RAR. The RAR (Receive Address 54 + * Registers) holds the directed and multicast addresses that we monitor. 55 + * These entries are also used for MAC-based filtering. 56 + */ 57 + #define E1000_RAR_ENTRIES_VF 1 58 + 59 + /* Receive Descriptor - Advanced */ 60 + union e1000_adv_rx_desc { 61 + struct { 62 + u64 pkt_addr; /* Packet buffer address */ 63 + u64 hdr_addr; /* Header buffer address */ 64 + } read; 65 + struct { 66 + struct { 67 + union { 68 + u32 data; 69 + struct { 70 + u16 pkt_info; /* RSS/Packet type */ 71 + u16 hdr_info; /* Split Header, 72 + * hdr buffer length */ 73 + } hs_rss; 74 + } lo_dword; 75 + union { 76 + u32 rss; /* RSS Hash */ 77 + struct { 78 + u16 ip_id; /* IP id */ 79 + u16 csum; /* Packet Checksum */ 80 + } csum_ip; 81 + } hi_dword; 82 + } lower; 83 + struct { 84 + u32 status_error; /* ext status/error */ 85 + u16 length; /* Packet length */ 86 + u16 vlan; /* VLAN tag */ 87 + } upper; 88 + } wb; /* writeback */ 89 + }; 90 + 91 + #define E1000_RXDADV_HDRBUFLEN_MASK 0x7FE0 92 + #define E1000_RXDADV_HDRBUFLEN_SHIFT 5 93 + 94 + /* Transmit Descriptor - Advanced */ 95 + union e1000_adv_tx_desc { 96 + struct { 97 + u64 buffer_addr; /* Address of descriptor's data buf */ 98 + u32 cmd_type_len; 99 + u32 olinfo_status; 100 + } read; 101 + struct { 102 + u64 rsvd; /* Reserved */ 103 + u32 nxtseq_seed; 104 + u32 status; 105 + } wb; 106 + }; 107 + 108 + /* Adv Transmit Descriptor Config Masks */ 109 + #define E1000_ADVTXD_DTYP_CTXT 0x00200000 /* Advanced Context Descriptor */ 110 + #define E1000_ADVTXD_DTYP_DATA 0x00300000 /* Advanced Data Descriptor */ 111 + #define E1000_ADVTXD_DCMD_EOP 0x01000000 /* End of Packet */ 112 + #define E1000_ADVTXD_DCMD_IFCS 0x02000000 /* Insert FCS (Ethernet CRC) */ 113 + #define E1000_ADVTXD_DCMD_RS 0x08000000 /* Report Status */ 114 + #define E1000_ADVTXD_DCMD_DEXT 0x20000000 /* Descriptor extension (1=Adv) */ 115 + #define E1000_ADVTXD_DCMD_VLE 0x40000000 /* VLAN pkt enable */ 116 + #define E1000_ADVTXD_DCMD_TSE 0x80000000 /* TCP Seg enable */ 117 + #define E1000_ADVTXD_PAYLEN_SHIFT 14 /* Adv desc PAYLEN shift */ 118 + 119 + /* Context descriptors */ 120 + struct e1000_adv_tx_context_desc { 121 + u32 vlan_macip_lens; 122 + u32 seqnum_seed; 123 + u32 type_tucmd_mlhl; 124 + u32 mss_l4len_idx; 125 + }; 126 + 127 + #define E1000_ADVTXD_MACLEN_SHIFT 9 /* Adv ctxt desc mac len shift */ 128 + #define E1000_ADVTXD_TUCMD_IPV4 0x00000400 /* IP Packet Type: 1=IPv4 */ 129 + #define E1000_ADVTXD_TUCMD_L4T_TCP 0x00000800 /* L4 Packet TYPE of TCP */ 130 + #define E1000_ADVTXD_L4LEN_SHIFT 8 /* Adv ctxt L4LEN shift */ 131 + #define E1000_ADVTXD_MSS_SHIFT 16 /* Adv ctxt MSS shift */ 132 + 133 + enum e1000_mac_type { 134 + e1000_undefined = 0, 135 + e1000_vfadapt, 136 + e1000_num_macs /* List is 1-based, so subtract 1 for true count. */ 137 + }; 138 + 139 + struct e1000_vf_stats { 140 + u64 base_gprc; 141 + u64 base_gptc; 142 + u64 base_gorc; 143 + u64 base_gotc; 144 + u64 base_mprc; 145 + u64 base_gotlbc; 146 + u64 base_gptlbc; 147 + u64 base_gorlbc; 148 + u64 base_gprlbc; 149 + 150 + u32 last_gprc; 151 + u32 last_gptc; 152 + u32 last_gorc; 153 + u32 last_gotc; 154 + u32 last_mprc; 155 + u32 last_gotlbc; 156 + u32 last_gptlbc; 157 + u32 last_gorlbc; 158 + u32 last_gprlbc; 159 + 160 + u64 gprc; 161 + u64 gptc; 162 + u64 gorc; 163 + u64 gotc; 164 + u64 mprc; 165 + u64 gotlbc; 166 + u64 gptlbc; 167 + u64 gorlbc; 168 + u64 gprlbc; 169 + }; 170 + 171 + #include "mbx.h" 172 + 173 + struct e1000_mac_operations { 174 + /* Function pointers for the MAC. */ 175 + s32 (*init_params)(struct e1000_hw *); 176 + s32 (*check_for_link)(struct e1000_hw *); 177 + void (*clear_vfta)(struct e1000_hw *); 178 + s32 (*get_bus_info)(struct e1000_hw *); 179 + s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *); 180 + void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32, u32, u32); 181 + s32 (*reset_hw)(struct e1000_hw *); 182 + s32 (*init_hw)(struct e1000_hw *); 183 + s32 (*setup_link)(struct e1000_hw *); 184 + void (*write_vfta)(struct e1000_hw *, u32, u32); 185 + void (*mta_set)(struct e1000_hw *, u32); 186 + void (*rar_set)(struct e1000_hw *, u8*, u32); 187 + s32 (*read_mac_addr)(struct e1000_hw *); 188 + s32 (*set_vfta)(struct e1000_hw *, u16, bool); 189 + }; 190 + 191 + struct e1000_mac_info { 192 + struct e1000_mac_operations ops; 193 + u8 addr[6]; 194 + u8 perm_addr[6]; 195 + 196 + enum e1000_mac_type type; 197 + 198 + u16 mta_reg_count; 199 + u16 rar_entry_count; 200 + 201 + bool get_link_status; 202 + }; 203 + 204 + struct e1000_mbx_operations { 205 + s32 (*init_params)(struct e1000_hw *hw); 206 + s32 (*read)(struct e1000_hw *, u32 *, u16); 207 + s32 (*write)(struct e1000_hw *, u32 *, u16); 208 + s32 (*read_posted)(struct e1000_hw *, u32 *, u16); 209 + s32 (*write_posted)(struct e1000_hw *, u32 *, u16); 210 + s32 (*check_for_msg)(struct e1000_hw *); 211 + s32 (*check_for_ack)(struct e1000_hw *); 212 + s32 (*check_for_rst)(struct e1000_hw *); 213 + }; 214 + 215 + struct e1000_mbx_stats { 216 + u32 msgs_tx; 217 + u32 msgs_rx; 218 + 219 + u32 acks; 220 + u32 reqs; 221 + u32 rsts; 222 + }; 223 + 224 + struct e1000_mbx_info { 225 + struct e1000_mbx_operations ops; 226 + struct e1000_mbx_stats stats; 227 + u32 timeout; 228 + u32 usec_delay; 229 + u16 size; 230 + }; 231 + 232 + struct e1000_dev_spec_vf { 233 + u32 vf_number; 234 + u32 v2p_mailbox; 235 + }; 236 + 237 + struct e1000_hw { 238 + void *back; 239 + 240 + u8 __iomem *hw_addr; 241 + u8 __iomem *flash_address; 242 + unsigned long io_base; 243 + 244 + struct e1000_mac_info mac; 245 + struct e1000_mbx_info mbx; 246 + 247 + union { 248 + struct e1000_dev_spec_vf vf; 249 + } dev_spec; 250 + 251 + u16 device_id; 252 + u16 subsystem_vendor_id; 253 + u16 subsystem_device_id; 254 + u16 vendor_id; 255 + 256 + u8 revision_id; 257 + }; 258 + 259 + /* These functions must be implemented by drivers */ 260 + void e1000_rlpml_set_vf(struct e1000_hw *, u16); 261 + void e1000_init_function_pointers_vf(struct e1000_hw *hw); 262 + s32 e1000_init_mac_params_vf(struct e1000_hw *hw); 263 + 264 + 265 + #endif /* _E1000_VF_H_ */
+2 -2
drivers/net/mv643xx_eth.c
··· 2274 pscr |= FORCE_LINK_PASS; 2275 wrlp(mp, PORT_SERIAL_CONTROL, pscr); 2276 2277 - wrlp(mp, SDMA_CONFIG, PORT_SDMA_CONFIG_DEFAULT_VALUE); 2278 - 2279 /* 2280 * Configure TX path and queues. 2281 */ ··· 2954 wrl(mp, WINDOW_PROTECT(mp->port_num), mp->shared->win_protect); 2955 2956 netif_carrier_off(dev); 2957 2958 set_rx_coal(mp, 250); 2959 set_tx_coal(mp, 0);
··· 2274 pscr |= FORCE_LINK_PASS; 2275 wrlp(mp, PORT_SERIAL_CONTROL, pscr); 2276 2277 /* 2278 * Configure TX path and queues. 2279 */ ··· 2956 wrl(mp, WINDOW_PROTECT(mp->port_num), mp->shared->win_protect); 2957 2958 netif_carrier_off(dev); 2959 + 2960 + wrlp(mp, SDMA_CONFIG, PORT_SDMA_CONFIG_DEFAULT_VALUE); 2961 2962 set_rx_coal(mp, 250); 2963 set_tx_coal(mp, 0);
+2 -1
drivers/net/niu.c
··· 4834 { 4835 u64 val = 0; 4836 4837 switch (rp->rbr_block_size) { 4838 case 4 * 1024: 4839 val |= (RBR_BLKSIZE_4K << RBR_CFIG_B_BLKSIZE_SHIFT); ··· 9543 9544 plat_dev = platform_device_register_simple("niu", niu_parent_index, 9545 NULL, 0); 9546 - if (!plat_dev) 9547 return NULL; 9548 9549 for (i = 0; attr_name(niu_parent_attributes[i]); i++) {
··· 4834 { 4835 u64 val = 0; 4836 4837 + *ret = 0; 4838 switch (rp->rbr_block_size) { 4839 case 4 * 1024: 4840 val |= (RBR_BLKSIZE_4K << RBR_CFIG_B_BLKSIZE_SHIFT); ··· 9542 9543 plat_dev = platform_device_register_simple("niu", niu_parent_index, 9544 NULL, 0); 9545 + if (IS_ERR(plat_dev)) 9546 return NULL; 9547 9548 for (i = 0; attr_name(niu_parent_attributes[i]); i++) {
+1
drivers/net/r6040.c
··· 160 "Florian Fainelli <florian@openwrt.org>"); 161 MODULE_LICENSE("GPL"); 162 MODULE_DESCRIPTION("RDC R6040 NAPI PCI FastEthernet driver"); 163 164 /* RX and TX interrupts that we handle */ 165 #define RX_INTS (RX_FIFO_FULL | RX_NO_DESC | RX_FINISH)
··· 160 "Florian Fainelli <florian@openwrt.org>"); 161 MODULE_LICENSE("GPL"); 162 MODULE_DESCRIPTION("RDC R6040 NAPI PCI FastEthernet driver"); 163 + MODULE_VERSION(DRV_VERSION " " DRV_RELDATE); 164 165 /* RX and TX interrupts that we handle */ 166 #define RX_INTS (RX_FIFO_FULL | RX_NO_DESC | RX_FINISH)
+1 -1
drivers/net/smsc911x.c
··· 317 goto out; 318 } 319 320 - SMSC_WARNING(HW, "Timed out waiting for MII write to finish"); 321 reg = -EIO; 322 323 out:
··· 317 goto out; 318 } 319 320 + SMSC_WARNING(HW, "Timed out waiting for MII read to finish"); 321 reg = -EIO; 322 323 out:
+4 -1
include/net/netfilter/nf_conntrack_expect.h
··· 99 const union nf_inet_addr *, 100 u_int8_t, const __be16 *, const __be16 *); 101 void nf_ct_expect_put(struct nf_conntrack_expect *exp); 102 - int nf_ct_expect_related(struct nf_conntrack_expect *expect); 103 int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, 104 u32 pid, int report); 105 106 #endif /*_NF_CONNTRACK_EXPECT_H*/ 107
··· 99 const union nf_inet_addr *, 100 u_int8_t, const __be16 *, const __be16 *); 101 void nf_ct_expect_put(struct nf_conntrack_expect *exp); 102 int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, 103 u32 pid, int report); 104 + static inline int nf_ct_expect_related(struct nf_conntrack_expect *expect) 105 + { 106 + return nf_ct_expect_related_report(expect, 0, 0); 107 + } 108 109 #endif /*_NF_CONNTRACK_EXPECT_H*/ 110
+2
net/ipv6/netfilter/ip6_tables.c
··· 1033 1034 xt_free_table_info(info); 1035 1036 free_counters: 1037 vfree(counters); 1038 nomem:
··· 1033 1034 xt_free_table_info(info); 1035 1036 + return counters; 1037 + 1038 free_counters: 1039 vfree(counters); 1040 nomem:
+1 -1
net/netfilter/Kconfig
··· 374 375 config NETFILTER_XT_TARGET_LED 376 tristate '"LED" target support' 377 - depends on LEDS_CLASS && LED_TRIGGERS 378 depends on NETFILTER_ADVANCED 379 help 380 This option adds a `LED' target, which allows you to blink LEDs in
··· 374 375 config NETFILTER_XT_TARGET_LED 376 tristate '"LED" target support' 377 + depends on LEDS_CLASS && LEDS_TRIGGERS 378 depends on NETFILTER_ADVANCED 379 help 380 This option adds a `LED' target, which allows you to blink LEDs in
+7 -25
net/netfilter/nf_conntrack_expect.c
··· 372 struct net *net = nf_ct_exp_net(expect); 373 struct hlist_node *n; 374 unsigned int h; 375 - int ret = 0; 376 377 if (!master_help->helper) { 378 ret = -ESHUTDOWN; ··· 412 return ret; 413 } 414 415 - int nf_ct_expect_related(struct nf_conntrack_expect *expect) 416 - { 417 - int ret; 418 - 419 - spin_lock_bh(&nf_conntrack_lock); 420 - ret = __nf_ct_expect_check(expect); 421 - if (ret < 0) 422 - goto out; 423 - 424 - nf_ct_expect_insert(expect); 425 - atomic_inc(&expect->use); 426 - spin_unlock_bh(&nf_conntrack_lock); 427 - nf_ct_expect_event(IPEXP_NEW, expect); 428 - nf_ct_expect_put(expect); 429 - return ret; 430 - out: 431 - spin_unlock_bh(&nf_conntrack_lock); 432 - return ret; 433 - } 434 - EXPORT_SYMBOL_GPL(nf_ct_expect_related); 435 - 436 int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, 437 u32 pid, int report) 438 { ··· 419 420 spin_lock_bh(&nf_conntrack_lock); 421 ret = __nf_ct_expect_check(expect); 422 - if (ret < 0) 423 goto out; 424 nf_ct_expect_insert(expect); 425 out: 426 spin_unlock_bh(&nf_conntrack_lock); 427 - if (ret == 0) 428 - nf_ct_expect_event_report(IPEXP_NEW, expect, pid, report); 429 return ret; 430 } 431 EXPORT_SYMBOL_GPL(nf_ct_expect_related_report);
··· 372 struct net *net = nf_ct_exp_net(expect); 373 struct hlist_node *n; 374 unsigned int h; 375 + int ret = 1; 376 377 if (!master_help->helper) { 378 ret = -ESHUTDOWN; ··· 412 return ret; 413 } 414 415 int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, 416 u32 pid, int report) 417 { ··· 440 441 spin_lock_bh(&nf_conntrack_lock); 442 ret = __nf_ct_expect_check(expect); 443 + if (ret <= 0) 444 goto out; 445 + 446 + ret = 0; 447 nf_ct_expect_insert(expect); 448 + spin_unlock_bh(&nf_conntrack_lock); 449 + nf_ct_expect_event_report(IPEXP_NEW, expect, pid, report); 450 + return ret; 451 out: 452 spin_unlock_bh(&nf_conntrack_lock); 453 return ret; 454 } 455 EXPORT_SYMBOL_GPL(nf_ct_expect_related_report);