diff options
Diffstat (limited to 'drivers/net/ethernet/intel')
33 files changed, 899 insertions, 580 deletions
diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c index 5a2fdf7a00c..9436397e572 100644 --- a/drivers/net/ethernet/intel/e100.c +++ b/drivers/net/ethernet/intel/e100.c @@ -2376,10 +2376,10 @@ static void e100_get_drvinfo(struct net_device *netdev,  	struct ethtool_drvinfo *info)  {  	struct nic *nic = netdev_priv(netdev); -	strcpy(info->driver, DRV_NAME); -	strcpy(info->version, DRV_VERSION); -	strcpy(info->fw_version, "N/A"); -	strcpy(info->bus_info, pci_name(nic->pdev)); +	strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); +	strlcpy(info->version, DRV_VERSION, sizeof(info->version)); +	strlcpy(info->bus_info, pci_name(nic->pdev), +		sizeof(info->bus_info));  }  #define E100_PHY_REGS 0x1C diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c index 2b223ac99c4..3103f0b6bf5 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c +++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c @@ -515,14 +515,14 @@ static void e1000_get_drvinfo(struct net_device *netdev,  			      struct ethtool_drvinfo *drvinfo)  {  	struct e1000_adapter *adapter = netdev_priv(netdev); -	char firmware_version[32]; -	strncpy(drvinfo->driver,  e1000_driver_name, 32); -	strncpy(drvinfo->version, e1000_driver_version, 32); +	strlcpy(drvinfo->driver,  e1000_driver_name, +		sizeof(drvinfo->driver)); +	strlcpy(drvinfo->version, e1000_driver_version, +		sizeof(drvinfo->version)); -	sprintf(firmware_version, "N/A"); -	strncpy(drvinfo->fw_version, firmware_version, 32); -	strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); +	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), +		sizeof(drvinfo->bus_info));  	drvinfo->regdump_len = e1000_get_regs_len(netdev);  	drvinfo->eedump_len = e1000_get_eeprom_len(netdev);  } diff --git a/drivers/net/ethernet/intel/e1000/e1000_hw.h b/drivers/net/ethernet/intel/e1000/e1000_hw.h index 5c9a8403668..f6c4d7e2560 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_hw.h +++ b/drivers/net/ethernet/intel/e1000/e1000_hw.h @@ -448,7 +448,6 @@ void e1000_io_write(struct e1000_hw *hw, unsigned long port, u32 value);  #define E1000_DEV_ID_INTEL_CE4100_GBE    0x2E6E  #define NODE_ADDRESS_SIZE 6 -#define ETH_LENGTH_OF_ADDRESS 6  /* MAC decode size is 128K - This is the size of BAR0 */  #define MAC_DECODE_SIZE (128 * 1024) @@ -813,8 +812,7 @@ struct e1000_ffvt_entry {  #define E1000_FLA      0x0001C	/* Flash Access - RW */  #define E1000_MDIC     0x00020	/* MDI Control - RW */ -extern void __iomem *ce4100_gbe_mdio_base_virt; -#define INTEL_CE_GBE_MDIO_RCOMP_BASE    (ce4100_gbe_mdio_base_virt) +#define INTEL_CE_GBE_MDIO_RCOMP_BASE    (hw->ce4100_gbe_mdio_base_virt)  #define E1000_MDIO_STS  (INTEL_CE_GBE_MDIO_RCOMP_BASE + 0)  #define E1000_MDIO_CMD  (INTEL_CE_GBE_MDIO_RCOMP_BASE + 4)  #define E1000_MDIO_DRV  (INTEL_CE_GBE_MDIO_RCOMP_BASE + 8) @@ -1344,6 +1342,7 @@ struct e1000_hw_stats {  struct e1000_hw {  	u8 __iomem *hw_addr;  	u8 __iomem *flash_address; +	void __iomem *ce4100_gbe_mdio_base_virt;  	e1000_mac_type mac_type;  	e1000_phy_type phy_type;  	u32 phy_init_script; diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index cf480b55462..669ca3800c0 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c @@ -33,11 +33,6 @@  #include <linux/bitops.h>  #include <linux/if_vlan.h> -/* Intel Media SOC GbE MDIO physical base address */ -static unsigned long ce4100_gbe_mdio_base_phy; -/* Intel Media SOC GbE MDIO virtual base address */ -void __iomem *ce4100_gbe_mdio_base_virt; -  char e1000_driver_name[] = "e1000";  static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";  #define DRV_VERSION "7.3.21-k8-NAPI" @@ -167,9 +162,10 @@ static int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,                                         struct sk_buff *skb);  static bool e1000_vlan_used(struct e1000_adapter *adapter); -static void e1000_vlan_mode(struct net_device *netdev, u32 features); -static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid); -static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid); +static void e1000_vlan_mode(struct net_device *netdev, +			    netdev_features_t features); +static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid); +static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid);  static void e1000_restore_vlan(struct e1000_adapter *adapter);  #ifdef CONFIG_PM @@ -806,7 +802,8 @@ static int e1000_is_need_ioport(struct pci_dev *pdev)  	}  } -static u32 e1000_fix_features(struct net_device *netdev, u32 features) +static netdev_features_t e1000_fix_features(struct net_device *netdev, +	netdev_features_t features)  {  	/*  	 * Since there is no support for separate rx/tx vlan accel @@ -820,10 +817,11 @@ static u32 e1000_fix_features(struct net_device *netdev, u32 features)  	return features;  } -static int e1000_set_features(struct net_device *netdev, u32 features) +static int e1000_set_features(struct net_device *netdev, +	netdev_features_t features)  {  	struct e1000_adapter *adapter = netdev_priv(netdev); -	u32 changed = features ^ netdev->features; +	netdev_features_t changed = features ^ netdev->features;  	if (changed & NETIF_F_HW_VLAN_RX)  		e1000_vlan_mode(netdev, features); @@ -1051,11 +1049,11 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  	err = -EIO;  	if (hw->mac_type == e1000_ce4100) { -		ce4100_gbe_mdio_base_phy = pci_resource_start(pdev, BAR_1); -		ce4100_gbe_mdio_base_virt = ioremap(ce4100_gbe_mdio_base_phy, +		hw->ce4100_gbe_mdio_base_virt = +					ioremap(pci_resource_start(pdev, BAR_1),  		                                pci_resource_len(pdev, BAR_1)); -		if (!ce4100_gbe_mdio_base_virt) +		if (!hw->ce4100_gbe_mdio_base_virt)  			goto err_mdio_ioremap;  	} @@ -1182,7 +1180,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  		if (global_quad_port_a != 0)  			adapter->eeprom_wol = 0;  		else -			adapter->quad_port_a = 1; +			adapter->quad_port_a = true;  		/* Reset for multiple quad port adapters */  		if (++global_quad_port_a == 4)  			global_quad_port_a = 0; @@ -1246,7 +1244,7 @@ err_eeprom:  err_dma:  err_sw_init:  err_mdio_ioremap: -	iounmap(ce4100_gbe_mdio_base_virt); +	iounmap(hw->ce4100_gbe_mdio_base_virt);  	iounmap(hw->hw_addr);  err_ioremap:  	free_netdev(netdev); @@ -1283,6 +1281,8 @@ static void __devexit e1000_remove(struct pci_dev *pdev)  	kfree(adapter->tx_ring);  	kfree(adapter->rx_ring); +	if (hw->mac_type == e1000_ce4100) +		iounmap(hw->ce4100_gbe_mdio_base_virt);  	iounmap(hw->hw_addr);  	if (hw->flash_address)  		iounmap(hw->flash_address); @@ -1676,7 +1676,7 @@ static void e1000_configure_tx(struct e1000_adapter *adapter)  	 * need this to apply a workaround later in the send path. */  	if (hw->mac_type == e1000_82544 &&  	    hw->bus_type == e1000_bus_type_pcix) -		adapter->pcix_82544 = 1; +		adapter->pcix_82544 = true;  	ew32(TCTL, tctl); @@ -1999,7 +1999,7 @@ static void e1000_clean_tx_ring(struct e1000_adapter *adapter,  	tx_ring->next_to_use = 0;  	tx_ring->next_to_clean = 0; -	tx_ring->last_tx_tso = 0; +	tx_ring->last_tx_tso = false;  	writel(0, hw->hw_addr + tx_ring->tdh);  	writel(0, hw->hw_addr + tx_ring->tdt); @@ -2848,7 +2848,7 @@ static int e1000_tx_map(struct e1000_adapter *adapter,  		 * DMA'd to the controller */  		if (!skb->data_len && tx_ring->last_tx_tso &&  		    !skb_is_gso(skb)) { -			tx_ring->last_tx_tso = 0; +			tx_ring->last_tx_tso = false;  			size -= 4;  		} @@ -3216,7 +3216,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,  	if (likely(tso)) {  		if (likely(hw->mac_type != e1000_82544)) -			tx_ring->last_tx_tso = 1; +			tx_ring->last_tx_tso = true;  		tx_flags |= E1000_TX_FLAGS_TSO;  	} else if (likely(e1000_tx_csum(adapter, tx_ring, skb)))  		tx_flags |= E1000_TX_FLAGS_CSUM; @@ -4577,7 +4577,8 @@ static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter,  		e1000_irq_enable(adapter);  } -static void e1000_vlan_mode(struct net_device *netdev, u32 features) +static void e1000_vlan_mode(struct net_device *netdev, +	netdev_features_t features)  {  	struct e1000_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -4600,7 +4601,7 @@ static void e1000_vlan_mode(struct net_device *netdev, u32 features)  		e1000_irq_enable(adapter);  } -static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  {  	struct e1000_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -4609,7 +4610,7 @@ static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	if ((hw->mng_cookie.status &  	     E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) &&  	    (vid == adapter->mng_vlan_id)) -		return; +		return 0;  	if (!e1000_vlan_used(adapter))  		e1000_vlan_filter_on_off(adapter, true); @@ -4621,9 +4622,11 @@ static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	e1000_write_vfta(hw, index, vfta);  	set_bit(vid, adapter->active_vlans); + +	return 0;  } -static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) +static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  {  	struct e1000_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -4644,6 +4647,8 @@ static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  	if (!e1000_vlan_used(adapter))  		e1000_vlan_filter_on_off(adapter, false); + +	return 0;  }  static void e1000_restore_vlan(struct e1000_adapter *adapter) @@ -4716,8 +4721,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)  	netif_device_detach(netdev); -	mutex_lock(&adapter->mutex); -  	if (netif_running(netdev)) {  		WARN_ON(test_bit(__E1000_RESETTING, &adapter->flags));  		e1000_down(adapter); @@ -4725,10 +4728,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)  #ifdef CONFIG_PM  	retval = pci_save_state(pdev); -	if (retval) { -		mutex_unlock(&adapter->mutex); +	if (retval)  		return retval; -	}  #endif  	status = er32(STATUS); @@ -4783,8 +4784,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)  	if (netif_running(netdev))  		e1000_free_irq(adapter); -	mutex_unlock(&adapter->mutex); -  	pci_disable_device(pdev);  	return 0; diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h index 9fe18d1d53d..f478a22ed57 100644 --- a/drivers/net/ethernet/intel/e1000e/e1000.h +++ b/drivers/net/ethernet/intel/e1000e/e1000.h @@ -309,6 +309,7 @@ struct e1000_adapter {  	u32 txd_cmd;  	bool detect_tx_hung; +	bool tx_hang_recheck;  	u8 tx_timeout_factor;  	u32 tx_int_delay; diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c index 69c9d219914..fb2c28e799a 100644 --- a/drivers/net/ethernet/intel/e1000e/ethtool.c +++ b/drivers/net/ethernet/intel/e1000e/ethtool.c @@ -579,26 +579,24 @@ static void e1000_get_drvinfo(struct net_device *netdev,  			      struct ethtool_drvinfo *drvinfo)  {  	struct e1000_adapter *adapter = netdev_priv(netdev); -	char firmware_version[32]; -	strncpy(drvinfo->driver,  e1000e_driver_name, -		sizeof(drvinfo->driver) - 1); -	strncpy(drvinfo->version, e1000e_driver_version, -		sizeof(drvinfo->version) - 1); +	strlcpy(drvinfo->driver,  e1000e_driver_name, +		sizeof(drvinfo->driver)); +	strlcpy(drvinfo->version, e1000e_driver_version, +		sizeof(drvinfo->version));  	/*  	 * EEPROM image version # is reported as firmware version # for  	 * PCI-E controllers  	 */ -	snprintf(firmware_version, sizeof(firmware_version), "%d.%d-%d", +	snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), +		"%d.%d-%d",  		(adapter->eeprom_vers & 0xF000) >> 12,  		(adapter->eeprom_vers & 0x0FF0) >> 4,  		(adapter->eeprom_vers & 0x000F)); -	strncpy(drvinfo->fw_version, firmware_version, -		sizeof(drvinfo->fw_version) - 1); -	strncpy(drvinfo->bus_info, pci_name(adapter->pdev), -		sizeof(drvinfo->bus_info) - 1); +	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), +		sizeof(drvinfo->bus_info));  	drvinfo->regdump_len = e1000_get_regs_len(netdev);  	drvinfo->eedump_len = e1000_get_eeprom_len(netdev);  } diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index a855db1ad24..3911401ed65 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -163,16 +163,13 @@ static void e1000_regdump(struct e1000_hw *hw, struct e1000_reg_info *reginfo)  			regs[n] = __er32(hw, E1000_TARC(n));  		break;  	default: -		printk(KERN_INFO "%-15s %08x\n", -		       reginfo->name, __er32(hw, reginfo->ofs)); +		pr_info("%-15s %08x\n", +			reginfo->name, __er32(hw, reginfo->ofs));  		return;  	}  	snprintf(rname, 16, "%s%s", reginfo->name, "[0-1]"); -	printk(KERN_INFO "%-15s ", rname); -	for (n = 0; n < 2; n++) -		printk(KERN_CONT "%08x ", regs[n]); -	printk(KERN_CONT "\n"); +	pr_info("%-15s %08x %08x\n", rname, regs[0], regs[1]);  }  /* @@ -208,16 +205,15 @@ static void e1000e_dump(struct e1000_adapter *adapter)  	/* Print netdevice Info */  	if (netdev) {  		dev_info(&adapter->pdev->dev, "Net device Info\n"); -		printk(KERN_INFO "Device Name     state            " -		       "trans_start      last_rx\n"); -		printk(KERN_INFO "%-15s %016lX %016lX %016lX\n", -		       netdev->name, netdev->state, netdev->trans_start, -		       netdev->last_rx); +		pr_info("Device Name     state            trans_start      last_rx\n"); +		pr_info("%-15s %016lX %016lX %016lX\n", +			netdev->name, netdev->state, netdev->trans_start, +			netdev->last_rx);  	}  	/* Print Registers */  	dev_info(&adapter->pdev->dev, "Register Dump\n"); -	printk(KERN_INFO " Register Name   Value\n"); +	pr_info(" Register Name   Value\n");  	for (reginfo = (struct e1000_reg_info *)e1000_reg_info_tbl;  	     reginfo->name; reginfo++) {  		e1000_regdump(hw, reginfo); @@ -228,15 +224,14 @@ static void e1000e_dump(struct e1000_adapter *adapter)  		goto exit;  	dev_info(&adapter->pdev->dev, "Tx Ring Summary\n"); -	printk(KERN_INFO "Queue [NTU] [NTC] [bi(ntc)->dma  ]" -	       " leng ntw timestamp\n"); +	pr_info("Queue [NTU] [NTC] [bi(ntc)->dma  ] leng ntw timestamp\n");  	buffer_info = &tx_ring->buffer_info[tx_ring->next_to_clean]; -	printk(KERN_INFO " %5d %5X %5X %016llX %04X %3X %016llX\n", -	       0, tx_ring->next_to_use, tx_ring->next_to_clean, -	       (unsigned long long)buffer_info->dma, -	       buffer_info->length, -	       buffer_info->next_to_watch, -	       (unsigned long long)buffer_info->time_stamp); +	pr_info(" %5d %5X %5X %016llX %04X %3X %016llX\n", +		0, tx_ring->next_to_use, tx_ring->next_to_clean, +		(unsigned long long)buffer_info->dma, +		buffer_info->length, +		buffer_info->next_to_watch, +		(unsigned long long)buffer_info->time_stamp);  	/* Print Tx Ring */  	if (!netif_msg_tx_done(adapter)) @@ -271,37 +266,32 @@ static void e1000e_dump(struct e1000_adapter *adapter)  	 *   +----------------------------------------------------------------+  	 *   63       48 47     40 39  36 35    32 31     24 23  20 19        0  	 */ -	printk(KERN_INFO "Tl[desc]     [address 63:0  ] [SpeCssSCmCsLen]" -	       " [bi->dma       ] leng  ntw timestamp        bi->skb " -	       "<-- Legacy format\n"); -	printk(KERN_INFO "Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen]" -	       " [bi->dma       ] leng  ntw timestamp        bi->skb " -	       "<-- Ext Context format\n"); -	printk(KERN_INFO "Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen]" -	       " [bi->dma       ] leng  ntw timestamp        bi->skb " -	       "<-- Ext Data format\n"); +	pr_info("Tl[desc]     [address 63:0  ] [SpeCssSCmCsLen] [bi->dma       ] leng  ntw timestamp        bi->skb <-- Legacy format\n"); +	pr_info("Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma       ] leng  ntw timestamp        bi->skb <-- Ext Context format\n"); +	pr_info("Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen] [bi->dma       ] leng  ntw timestamp        bi->skb <-- Ext Data format\n");  	for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) { +		const char *next_desc;  		tx_desc = E1000_TX_DESC(*tx_ring, i);  		buffer_info = &tx_ring->buffer_info[i];  		u0 = (struct my_u0 *)tx_desc; -		printk(KERN_INFO "T%c[0x%03X]    %016llX %016llX %016llX " -		       "%04X  %3X %016llX %p", -		       (!(le64_to_cpu(u0->b) & (1 << 29)) ? 'l' : -			((le64_to_cpu(u0->b) & (1 << 20)) ? 'd' : 'c')), i, -		       (unsigned long long)le64_to_cpu(u0->a), -		       (unsigned long long)le64_to_cpu(u0->b), -		       (unsigned long long)buffer_info->dma, -		       buffer_info->length, buffer_info->next_to_watch, -		       (unsigned long long)buffer_info->time_stamp, -		       buffer_info->skb);  		if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean) -			printk(KERN_CONT " NTC/U\n"); +			next_desc = " NTC/U";  		else if (i == tx_ring->next_to_use) -			printk(KERN_CONT " NTU\n"); +			next_desc = " NTU";  		else if (i == tx_ring->next_to_clean) -			printk(KERN_CONT " NTC\n"); +			next_desc = " NTC";  		else -			printk(KERN_CONT "\n"); +			next_desc = ""; +		pr_info("T%c[0x%03X]    %016llX %016llX %016llX %04X  %3X %016llX %p%s\n", +			(!(le64_to_cpu(u0->b) & (1 << 29)) ? 'l' : +			 ((le64_to_cpu(u0->b) & (1 << 20)) ? 'd' : 'c')), +			i, +			(unsigned long long)le64_to_cpu(u0->a), +			(unsigned long long)le64_to_cpu(u0->b), +			(unsigned long long)buffer_info->dma, +			buffer_info->length, buffer_info->next_to_watch, +			(unsigned long long)buffer_info->time_stamp, +			buffer_info->skb, next_desc);  		if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)  			print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, @@ -312,9 +302,9 @@ static void e1000e_dump(struct e1000_adapter *adapter)  	/* Print Rx Ring Summary */  rx_ring_summary:  	dev_info(&adapter->pdev->dev, "Rx Ring Summary\n"); -	printk(KERN_INFO "Queue [NTU] [NTC]\n"); -	printk(KERN_INFO " %5d %5X %5X\n", 0, -	       rx_ring->next_to_use, rx_ring->next_to_clean); +	pr_info("Queue [NTU] [NTC]\n"); +	pr_info(" %5d %5X %5X\n", +		0, rx_ring->next_to_use, rx_ring->next_to_clean);  	/* Print Rx Ring */  	if (!netif_msg_rx_status(adapter)) @@ -337,10 +327,7 @@ rx_ring_summary:  		 * 24 |                Buffer Address 3 [63:0]              |  		 *    +-----------------------------------------------------+  		 */ -		printk(KERN_INFO "R  [desc]      [buffer 0 63:0 ] " -		       "[buffer 1 63:0 ] " -		       "[buffer 2 63:0 ] [buffer 3 63:0 ] [bi->dma       ] " -		       "[bi->skb] <-- Ext Pkt Split format\n"); +		pr_info("R  [desc]      [buffer 0 63:0 ] [buffer 1 63:0 ] [buffer 2 63:0 ] [buffer 3 63:0 ] [bi->dma       ] [bi->skb] <-- Ext Pkt Split format\n");  		/* [Extended] Receive Descriptor (Write-Back) Format  		 *  		 *   63       48 47    32 31     13 12    8 7    4 3        0 @@ -352,35 +339,40 @@ rx_ring_summary:  		 *   +------------------------------------------------------+  		 *   63       48 47    32 31            20 19               0  		 */ -		printk(KERN_INFO "RWB[desc]      [ck ipid mrqhsh] " -		       "[vl   l0 ee  es] " -		       "[ l3  l2  l1 hs] [reserved      ] ---------------- " -		       "[bi->skb] <-- Ext Rx Write-Back format\n"); +		pr_info("RWB[desc]      [ck ipid mrqhsh] [vl   l0 ee  es] [ l3  l2  l1 hs] [reserved      ] ---------------- [bi->skb] <-- Ext Rx Write-Back format\n");  		for (i = 0; i < rx_ring->count; i++) { +			const char *next_desc;  			buffer_info = &rx_ring->buffer_info[i];  			rx_desc_ps = E1000_RX_DESC_PS(*rx_ring, i);  			u1 = (struct my_u1 *)rx_desc_ps;  			staterr =  			    le32_to_cpu(rx_desc_ps->wb.middle.status_error); + +			if (i == rx_ring->next_to_use) +				next_desc = " NTU"; +			else if (i == rx_ring->next_to_clean) +				next_desc = " NTC"; +			else +				next_desc = ""; +  			if (staterr & E1000_RXD_STAT_DD) {  				/* Descriptor Done */ -				printk(KERN_INFO "RWB[0x%03X]     %016llX " -				       "%016llX %016llX %016llX " -				       "---------------- %p", i, -				       (unsigned long long)le64_to_cpu(u1->a), -				       (unsigned long long)le64_to_cpu(u1->b), -				       (unsigned long long)le64_to_cpu(u1->c), -				       (unsigned long long)le64_to_cpu(u1->d), -				       buffer_info->skb); +				pr_info("%s[0x%03X]     %016llX %016llX %016llX %016llX ---------------- %p%s\n", +					"RWB", i, +					(unsigned long long)le64_to_cpu(u1->a), +					(unsigned long long)le64_to_cpu(u1->b), +					(unsigned long long)le64_to_cpu(u1->c), +					(unsigned long long)le64_to_cpu(u1->d), +					buffer_info->skb, next_desc);  			} else { -				printk(KERN_INFO "R  [0x%03X]     %016llX " -				       "%016llX %016llX %016llX %016llX %p", i, -				       (unsigned long long)le64_to_cpu(u1->a), -				       (unsigned long long)le64_to_cpu(u1->b), -				       (unsigned long long)le64_to_cpu(u1->c), -				       (unsigned long long)le64_to_cpu(u1->d), -				       (unsigned long long)buffer_info->dma, -				       buffer_info->skb); +				pr_info("%s[0x%03X]     %016llX %016llX %016llX %016llX %016llX %p%s\n", +					"R  ", i, +					(unsigned long long)le64_to_cpu(u1->a), +					(unsigned long long)le64_to_cpu(u1->b), +					(unsigned long long)le64_to_cpu(u1->c), +					(unsigned long long)le64_to_cpu(u1->d), +					(unsigned long long)buffer_info->dma, +					buffer_info->skb, next_desc);  				if (netif_msg_pktdata(adapter))  					print_hex_dump(KERN_INFO, "", @@ -388,13 +380,6 @@ rx_ring_summary:  						phys_to_virt(buffer_info->dma),  						adapter->rx_ps_bsize0, true);  			} - -			if (i == rx_ring->next_to_use) -				printk(KERN_CONT " NTU\n"); -			else if (i == rx_ring->next_to_clean) -				printk(KERN_CONT " NTC\n"); -			else -				printk(KERN_CONT "\n");  		}  		break;  	default: @@ -407,9 +392,7 @@ rx_ring_summary:  		 * 8 |                      Reserved                       |  		 *   +-----------------------------------------------------+  		 */ -		printk(KERN_INFO "R  [desc]      [buf addr 63:0 ] " -		       "[reserved 63:0 ] [bi->dma       ] " -		       "[bi->skb] <-- Ext (Read) format\n"); +		pr_info("R  [desc]      [buf addr 63:0 ] [reserved 63:0 ] [bi->dma       ] [bi->skb] <-- Ext (Read) format\n");  		/* Extended Receive Descriptor (Write-Back) Format  		 *  		 *   63       48 47    32 31    24 23            4 3        0 @@ -423,29 +406,37 @@ rx_ring_summary:  		 *   +------------------------------------------------------+  		 *   63       48 47    32 31            20 19               0  		 */ -		printk(KERN_INFO "RWB[desc]      [cs ipid    mrq] " -		       "[vt   ln xe  xs] " -		       "[bi->skb] <-- Ext (Write-Back) format\n"); +		pr_info("RWB[desc]      [cs ipid    mrq] [vt   ln xe  xs] [bi->skb] <-- Ext (Write-Back) format\n");  		for (i = 0; i < rx_ring->count; i++) { +			const char *next_desc; +  			buffer_info = &rx_ring->buffer_info[i];  			rx_desc = E1000_RX_DESC_EXT(*rx_ring, i);  			u1 = (struct my_u1 *)rx_desc;  			staterr = le32_to_cpu(rx_desc->wb.upper.status_error); + +			if (i == rx_ring->next_to_use) +				next_desc = " NTU"; +			else if (i == rx_ring->next_to_clean) +				next_desc = " NTC"; +			else +				next_desc = ""; +  			if (staterr & E1000_RXD_STAT_DD) {  				/* Descriptor Done */ -				printk(KERN_INFO "RWB[0x%03X]     %016llX " -				       "%016llX ---------------- %p", i, -				       (unsigned long long)le64_to_cpu(u1->a), -				       (unsigned long long)le64_to_cpu(u1->b), -				       buffer_info->skb); +				pr_info("%s[0x%03X]     %016llX %016llX ---------------- %p%s\n", +					"RWB", i, +					(unsigned long long)le64_to_cpu(u1->a), +					(unsigned long long)le64_to_cpu(u1->b), +					buffer_info->skb, next_desc);  			} else { -				printk(KERN_INFO "R  [0x%03X]     %016llX " -				       "%016llX %016llX %p", i, -				       (unsigned long long)le64_to_cpu(u1->a), -				       (unsigned long long)le64_to_cpu(u1->b), -				       (unsigned long long)buffer_info->dma, -				       buffer_info->skb); +				pr_info("%s[0x%03X]     %016llX %016llX %016llX %p%s\n", +					"R  ", i, +					(unsigned long long)le64_to_cpu(u1->a), +					(unsigned long long)le64_to_cpu(u1->b), +					(unsigned long long)buffer_info->dma, +					buffer_info->skb, next_desc);  				if (netif_msg_pktdata(adapter))  					print_hex_dump(KERN_INFO, "", @@ -456,13 +447,6 @@ rx_ring_summary:  						       adapter->rx_buffer_len,  						       true);  			} - -			if (i == rx_ring->next_to_use) -				printk(KERN_CONT " NTU\n"); -			else if (i == rx_ring->next_to_clean) -				printk(KERN_CONT " NTC\n"); -			else -				printk(KERN_CONT "\n");  		}  	} @@ -875,7 +859,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,  	u32 length, staterr;  	unsigned int i;  	int cleaned_count = 0; -	bool cleaned = 0; +	bool cleaned = false;  	unsigned int total_rx_bytes = 0, total_rx_packets = 0;  	i = rx_ring->next_to_clean; @@ -904,7 +888,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,  		next_buffer = &rx_ring->buffer_info[i]; -		cleaned = 1; +		cleaned = true;  		cleaned_count++;  		dma_unmap_single(&pdev->dev,  				 buffer_info->dma, @@ -1030,6 +1014,7 @@ static void e1000_print_hw_hang(struct work_struct *work)  	struct e1000_adapter *adapter = container_of(work,  	                                             struct e1000_adapter,  	                                             print_hang_task); +	struct net_device *netdev = adapter->netdev;  	struct e1000_ring *tx_ring = adapter->tx_ring;  	unsigned int i = tx_ring->next_to_clean;  	unsigned int eop = tx_ring->buffer_info[i].next_to_watch; @@ -1041,6 +1026,21 @@ static void e1000_print_hw_hang(struct work_struct *work)  	if (test_bit(__E1000_DOWN, &adapter->state))  		return; +	if (!adapter->tx_hang_recheck && +	    (adapter->flags2 & FLAG2_DMA_BURST)) { +		/* May be block on write-back, flush and detect again +		 * flush pending descriptor writebacks to memory +		 */ +		ew32(TIDV, adapter->tx_int_delay | E1000_TIDV_FPD); +		/* execute the writes immediately */ +		e1e_flush(); +		adapter->tx_hang_recheck = true; +		return; +	} +	/* Real hang detected */ +	adapter->tx_hang_recheck = false; +	netif_stop_queue(netdev); +  	e1e_rphy(hw, PHY_STATUS, &phy_status);  	e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status);  	e1e_rphy(hw, PHY_EXT_STATUS, &phy_ext_status); @@ -1095,6 +1095,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)  	unsigned int i, eop;  	unsigned int count = 0;  	unsigned int total_tx_bytes = 0, total_tx_packets = 0; +	unsigned int bytes_compl = 0, pkts_compl = 0;  	i = tx_ring->next_to_clean;  	eop = tx_ring->buffer_info[i].next_to_watch; @@ -1112,6 +1113,10 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)  			if (cleaned) {  				total_tx_packets += buffer_info->segs;  				total_tx_bytes += buffer_info->bytecount; +				if (buffer_info->skb) { +					bytes_compl += buffer_info->skb->len; +					pkts_compl++; +				}  			}  			e1000_put_txbuf(adapter, buffer_info); @@ -1130,6 +1135,8 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)  	tx_ring->next_to_clean = i; +	netdev_completed_queue(netdev, pkts_compl, bytes_compl); +  #define TX_WAKE_THRESHOLD 32  	if (count && netif_carrier_ok(netdev) &&  	    e1000_desc_unused(tx_ring) >= TX_WAKE_THRESHOLD) { @@ -1150,14 +1157,14 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)  		 * Detect a transmit hang in hardware, this serializes the  		 * check with the clearing of time_stamp and movement of i  		 */ -		adapter->detect_tx_hung = 0; +		adapter->detect_tx_hung = false;  		if (tx_ring->buffer_info[i].time_stamp &&  		    time_after(jiffies, tx_ring->buffer_info[i].time_stamp  			       + (adapter->tx_timeout_factor * HZ)) && -		    !(er32(STATUS) & E1000_STATUS_TXOFF)) { +		    !(er32(STATUS) & E1000_STATUS_TXOFF))  			schedule_work(&adapter->print_hang_task); -			netif_stop_queue(netdev); -		} +		else +			adapter->tx_hang_recheck = false;  	}  	adapter->total_tx_bytes += total_tx_bytes;  	adapter->total_tx_packets += total_tx_packets; @@ -1185,7 +1192,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,  	unsigned int i, j;  	u32 length, staterr;  	int cleaned_count = 0; -	bool cleaned = 0; +	bool cleaned = false;  	unsigned int total_rx_bytes = 0, total_rx_packets = 0;  	i = rx_ring->next_to_clean; @@ -1211,7 +1218,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,  		next_buffer = &rx_ring->buffer_info[i]; -		cleaned = 1; +		cleaned = true;  		cleaned_count++;  		dma_unmap_single(&pdev->dev, buffer_info->dma,  				 adapter->rx_ps_bsize0, DMA_FROM_DEVICE); @@ -1222,8 +1229,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,  			adapter->flags2 |= FLAG2_IS_DISCARDING;  		if (adapter->flags2 & FLAG2_IS_DISCARDING) { -			e_dbg("Packet Split buffers didn't pick up the full " -			      "packet\n"); +			e_dbg("Packet Split buffers didn't pick up the full packet\n");  			dev_kfree_skb_irq(skb);  			if (staterr & E1000_RXD_STAT_EOP)  				adapter->flags2 &= ~FLAG2_IS_DISCARDING; @@ -1238,8 +1244,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,  		length = le16_to_cpu(rx_desc->wb.middle.length0);  		if (!length) { -			e_dbg("Last part of the packet spanning multiple " -			      "descriptors\n"); +			e_dbg("Last part of the packet spanning multiple descriptors\n");  			dev_kfree_skb_irq(skb);  			goto next_desc;  		} @@ -1917,8 +1922,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)  					return;  			}  			/* MSI-X failed, so fall through and try MSI */ -			e_err("Failed to initialize MSI-X interrupts.  " -			      "Falling back to MSI interrupts.\n"); +			e_err("Failed to initialize MSI-X interrupts.  Falling back to MSI interrupts.\n");  			e1000e_reset_interrupt_capability(adapter);  		}  		adapter->int_mode = E1000E_INT_MODE_MSI; @@ -1928,8 +1932,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)  			adapter->flags |= FLAG_MSI_ENABLED;  		} else {  			adapter->int_mode = E1000E_INT_MODE_LEGACY; -			e_err("Failed to initialize MSI interrupts.  Falling " -			      "back to legacy interrupts.\n"); +			e_err("Failed to initialize MSI interrupts.  Falling back to legacy interrupts.\n");  		}  		/* Fall through */  	case E1000E_INT_MODE_LEGACY: @@ -2260,6 +2263,7 @@ static void e1000_clean_tx_ring(struct e1000_adapter *adapter)  		e1000_put_txbuf(adapter, buffer_info);  	} +	netdev_reset_queue(adapter->netdev);  	size = sizeof(struct e1000_buffer) * tx_ring->count;  	memset(tx_ring->buffer_info, 0, size); @@ -2518,7 +2522,7 @@ clean_rx:  	return work_done;  } -static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  {  	struct e1000_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -2528,7 +2532,7 @@ static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	if ((adapter->hw.mng_cookie.status &  	     E1000_MNG_DHCP_COOKIE_STATUS_VLAN) &&  	    (vid == adapter->mng_vlan_id)) -		return; +		return 0;  	/* add VID to filter table */  	if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) { @@ -2539,9 +2543,11 @@ static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	}  	set_bit(vid, adapter->active_vlans); + +	return 0;  } -static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) +static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  {  	struct e1000_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -2552,7 +2558,7 @@ static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  	    (vid == adapter->mng_vlan_id)) {  		/* release control to f/w */  		e1000e_release_hw_control(adapter); -		return; +		return 0;  	}  	/* remove VID from filter table */ @@ -2564,6 +2570,8 @@ static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  	}  	clear_bit(vid, adapter->active_vlans); + +	return 0;  }  /** @@ -3113,79 +3121,147 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)  }  /** - *  e1000_update_mc_addr_list - Update Multicast addresses - *  @hw: pointer to the HW structure - *  @mc_addr_list: array of multicast addresses to program - *  @mc_addr_count: number of multicast addresses to program + * e1000e_write_mc_addr_list - write multicast addresses to MTA + * @netdev: network interface device structure + * + * Writes multicast address list to the MTA hash table. + * Returns: -ENOMEM on failure + *                0 on no addresses written + *                X on writing X addresses to MTA + */ +static int e1000e_write_mc_addr_list(struct net_device *netdev) +{ +	struct e1000_adapter *adapter = netdev_priv(netdev); +	struct e1000_hw *hw = &adapter->hw; +	struct netdev_hw_addr *ha; +	u8 *mta_list; +	int i; + +	if (netdev_mc_empty(netdev)) { +		/* nothing to program, so clear mc list */ +		hw->mac.ops.update_mc_addr_list(hw, NULL, 0); +		return 0; +	} + +	mta_list = kzalloc(netdev_mc_count(netdev) * ETH_ALEN, GFP_ATOMIC); +	if (!mta_list) +		return -ENOMEM; + +	/* update_mc_addr_list expects a packed array of only addresses. */ +	i = 0; +	netdev_for_each_mc_addr(ha, netdev) +		memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN); + +	hw->mac.ops.update_mc_addr_list(hw, mta_list, i); +	kfree(mta_list); + +	return netdev_mc_count(netdev); +} + +/** + * e1000e_write_uc_addr_list - write unicast addresses to RAR table + * @netdev: network interface device structure   * - *  Updates the Multicast Table Array. - *  The caller must have a packed mc_addr_list of multicast addresses. + * Writes unicast address list to the RAR table. + * Returns: -ENOMEM on failure/insufficient address space + *                0 on no addresses written + *                X on writing X addresses to the RAR table   **/ -static void e1000_update_mc_addr_list(struct e1000_hw *hw, u8 *mc_addr_list, -				      u32 mc_addr_count) +static int e1000e_write_uc_addr_list(struct net_device *netdev)  { -	hw->mac.ops.update_mc_addr_list(hw, mc_addr_list, mc_addr_count); +	struct e1000_adapter *adapter = netdev_priv(netdev); +	struct e1000_hw *hw = &adapter->hw; +	unsigned int rar_entries = hw->mac.rar_entry_count; +	int count = 0; + +	/* save a rar entry for our hardware address */ +	rar_entries--; + +	/* save a rar entry for the LAA workaround */ +	if (adapter->flags & FLAG_RESET_OVERWRITES_LAA) +		rar_entries--; + +	/* return ENOMEM indicating insufficient memory for addresses */ +	if (netdev_uc_count(netdev) > rar_entries) +		return -ENOMEM; + +	if (!netdev_uc_empty(netdev) && rar_entries) { +		struct netdev_hw_addr *ha; + +		/* +		 * write the addresses in reverse order to avoid write +		 * combining +		 */ +		netdev_for_each_uc_addr(ha, netdev) { +			if (!rar_entries) +				break; +			e1000e_rar_set(hw, ha->addr, rar_entries--); +			count++; +		} +	} + +	/* zero out the remaining RAR entries not used above */ +	for (; rar_entries > 0; rar_entries--) { +		ew32(RAH(rar_entries), 0); +		ew32(RAL(rar_entries), 0); +	} +	e1e_flush(); + +	return count;  }  /** - * e1000_set_multi - Multicast and Promiscuous mode set + * e1000e_set_rx_mode - secondary unicast, Multicast and Promiscuous mode set   * @netdev: network interface device structure   * - * The set_multi entry point is called whenever the multicast address - * list or the network interface flags are updated.  This routine is - * responsible for configuring the hardware for proper multicast, + * The ndo_set_rx_mode entry point is called whenever the unicast or multicast + * address list or the network interface flags are updated.  This routine is + * responsible for configuring the hardware for proper unicast, multicast,   * promiscuous mode, and all-multi behavior.   **/ -static void e1000_set_multi(struct net_device *netdev) +static void e1000e_set_rx_mode(struct net_device *netdev)  {  	struct e1000_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; -	struct netdev_hw_addr *ha; -	u8  *mta_list;  	u32 rctl;  	/* Check for Promiscuous and All Multicast modes */ -  	rctl = er32(RCTL); +	/* clear the affected bits */ +	rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE); +  	if (netdev->flags & IFF_PROMISC) {  		rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); -		rctl &= ~E1000_RCTL_VFE;  		/* Do not hardware filter VLANs in promisc mode */  		e1000e_vlan_filter_disable(adapter);  	} else { +		int count;  		if (netdev->flags & IFF_ALLMULTI) {  			rctl |= E1000_RCTL_MPE; -			rctl &= ~E1000_RCTL_UPE;  		} else { -			rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE); +			/* +			 * Write addresses to the MTA, if the attempt fails +			 * then we should just turn on promiscuous mode so +			 * that we can at least receive multicast traffic +			 */ +			count = e1000e_write_mc_addr_list(netdev); +			if (count < 0) +				rctl |= E1000_RCTL_MPE;  		}  		e1000e_vlan_filter_enable(adapter); -	} - -	ew32(RCTL, rctl); - -	if (!netdev_mc_empty(netdev)) { -		int i = 0; - -		mta_list = kmalloc(netdev_mc_count(netdev) * 6, GFP_ATOMIC); -		if (!mta_list) -			return; - -		/* prepare a packed array of only addresses. */ -		netdev_for_each_mc_addr(ha, netdev) -			memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN); - -		e1000_update_mc_addr_list(hw, mta_list, i); -		kfree(mta_list); -	} else {  		/* -		 * if we're called from probe, we might not have -		 * anything to do here, so clear out the list +		 * Write addresses to available RAR registers, if there is not +		 * sufficient space to store all the addresses then enable +		 * unicast promiscuous mode  		 */ -		e1000_update_mc_addr_list(hw, NULL, 0); +		count = e1000e_write_uc_addr_list(netdev); +		if (count < 0) +			rctl |= E1000_RCTL_UPE;  	} +	ew32(RCTL, rctl); +  	if (netdev->features & NETIF_F_HW_VLAN_RX)  		e1000e_vlan_strip_enable(adapter);  	else @@ -3198,7 +3274,7 @@ static void e1000_set_multi(struct net_device *netdev)   **/  static void e1000_configure(struct e1000_adapter *adapter)  { -	e1000_set_multi(adapter->netdev); +	e1000e_set_rx_mode(adapter->netdev);  	e1000_restore_vlan(adapter);  	e1000_init_manageability_pt(adapter); @@ -3444,7 +3520,6 @@ int e1000e_up(struct e1000_adapter *adapter)  	clear_bit(__E1000_DOWN, &adapter->state); -	napi_enable(&adapter->napi);  	if (adapter->msix_entries)  		e1000_configure_msix(adapter);  	e1000_irq_enable(adapter); @@ -3506,7 +3581,6 @@ void e1000e_down(struct e1000_adapter *adapter)  	e1e_flush();  	usleep_range(10000, 20000); -	napi_disable(&adapter->napi);  	e1000_irq_disable(adapter);  	del_timer_sync(&adapter->watchdog_timer); @@ -3782,6 +3856,7 @@ static int e1000_open(struct net_device *netdev)  	e1000_irq_enable(adapter); +	adapter->tx_hang_recheck = false;  	netif_start_queue(netdev);  	adapter->idle_check = true; @@ -3828,6 +3903,8 @@ static int e1000_close(struct net_device *netdev)  	pm_runtime_get_sync(&pdev->dev); +	napi_disable(&adapter->napi); +  	if (!test_bit(__E1000_DOWN, &adapter->state)) {  		e1000e_down(adapter);  		e1000_free_irq(adapter); @@ -4168,22 +4245,19 @@ static void e1000_print_link_info(struct e1000_adapter *adapter)  	u32 ctrl = er32(CTRL);  	/* Link status message must follow this format for user tools */ -	printk(KERN_INFO "e1000e: %s NIC Link is Up %d Mbps %s, " -	       "Flow Control: %s\n", -	       adapter->netdev->name, -	       adapter->link_speed, -	       (adapter->link_duplex == FULL_DUPLEX) ? -	       "Full Duplex" : "Half Duplex", -	       ((ctrl & E1000_CTRL_TFCE) && (ctrl & E1000_CTRL_RFCE)) ? -	       "Rx/Tx" : -	       ((ctrl & E1000_CTRL_RFCE) ? "Rx" : -		((ctrl & E1000_CTRL_TFCE) ? "Tx" : "None"))); +	printk(KERN_INFO "e1000e: %s NIC Link is Up %d Mbps %s Duplex, Flow Control: %s\n", +		adapter->netdev->name, +		adapter->link_speed, +		adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half", +		(ctrl & E1000_CTRL_TFCE) && (ctrl & E1000_CTRL_RFCE) ? "Rx/Tx" : +		(ctrl & E1000_CTRL_RFCE) ? "Rx" : +		(ctrl & E1000_CTRL_TFCE) ? "Tx" : "None");  }  static bool e1000e_has_link(struct e1000_adapter *adapter)  {  	struct e1000_hw *hw = &adapter->hw; -	bool link_active = 0; +	bool link_active = false;  	s32 ret_val = 0;  	/* @@ -4198,7 +4272,7 @@ static bool e1000e_has_link(struct e1000_adapter *adapter)  			ret_val = hw->mac.ops.check_for_link(hw);  			link_active = !hw->mac.get_link_status;  		} else { -			link_active = 1; +			link_active = true;  		}  		break;  	case e1000_media_type_fiber: @@ -4297,7 +4371,7 @@ static void e1000_watchdog_task(struct work_struct *work)  	if (link) {  		if (!netif_carrier_ok(netdev)) { -			bool txb2b = 1; +			bool txb2b = true;  			/* Cancel scheduled suspend requests. */  			pm_runtime_resume(netdev->dev.parent); @@ -4323,21 +4397,18 @@ static void e1000_watchdog_task(struct work_struct *work)  				e1e_rphy(hw, PHY_AUTONEG_EXP, &autoneg_exp);  				if (!(autoneg_exp & NWAY_ER_LP_NWAY_CAPS)) -					e_info("Autonegotiated half duplex but" -					       " link partner cannot autoneg. " -					       " Try forcing full duplex if " -					       "link gets many collisions.\n"); +					e_info("Autonegotiated half duplex but link partner cannot autoneg.  Try forcing full duplex if link gets many collisions.\n");  			}  			/* adjust timeout factor according to speed/duplex */  			adapter->tx_timeout_factor = 1;  			switch (adapter->link_speed) {  			case SPEED_10: -				txb2b = 0; +				txb2b = false;  				adapter->tx_timeout_factor = 16;  				break;  			case SPEED_100: -				txb2b = 0; +				txb2b = false;  				adapter->tx_timeout_factor = 10;  				break;  			} @@ -4473,7 +4544,7 @@ link_up:  	e1000e_flush_descriptors(adapter);  	/* Force detection of hung controller every watchdog period */ -	adapter->detect_tx_hung = 1; +	adapter->detect_tx_hung = true;  	/*  	 * With 82571 controllers, LAA may be overwritten due to controller @@ -4985,6 +5056,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,  	/* if count is 0 then mapping error has occurred */  	count = e1000_tx_map(adapter, skb, first, max_per_txd, nr_frags, mss);  	if (count) { +		netdev_sent_queue(netdev, skb->len);  		e1000_tx_queue(adapter, tx_flags, count);  		/* Make sure there is space in the ring for the next send. */  		e1000_maybe_stop_tx(netdev, MAX_SKB_FRAGS + 2); @@ -5110,8 +5182,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)  	if ((adapter->hw.mac.type == e1000_pch2lan) &&  	    !(adapter->flags2 & FLAG2_CRC_STRIPPING) &&  	    (new_mtu > ETH_DATA_LEN)) { -		e_err("Jumbo Frames not supported on 82579 when CRC " -		      "stripping is disabled.\n"); +		e_err("Jumbo Frames not supported on 82579 when CRC stripping is disabled.\n");  		return -EINVAL;  	} @@ -5331,7 +5402,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake,  	if (wufc) {  		e1000_setup_rctl(adapter); -		e1000_set_multi(netdev); +		e1000e_set_rx_mode(netdev);  		/* turn on all-multi mode if wake on multicast is enabled */  		if (wufc & E1000_WUFC_MC) { @@ -5527,8 +5598,8 @@ static int __e1000_resume(struct pci_dev *pdev)  				phy_data & E1000_WUS_MC ? "Multicast Packet" :  				phy_data & E1000_WUS_BC ? "Broadcast Packet" :  				phy_data & E1000_WUS_MAG ? "Magic Packet" : -				phy_data & E1000_WUS_LNKC ? "Link Status " -				" Change" : "other"); +				phy_data & E1000_WUS_LNKC ? +				"Link Status Change" : "other");  		}  		e1e_wphy(&adapter->hw, BM_WUS, ~0);  	} else { @@ -5859,10 +5930,11 @@ static void e1000_eeprom_checks(struct e1000_adapter *adapter)  	}  } -static int e1000_set_features(struct net_device *netdev, u32 features) +static int e1000_set_features(struct net_device *netdev, +	netdev_features_t features)  {  	struct e1000_adapter *adapter = netdev_priv(netdev); -	u32 changed = features ^ netdev->features; +	netdev_features_t changed = features ^ netdev->features;  	if (changed & (NETIF_F_TSO | NETIF_F_TSO6))  		adapter->flags |= FLAG_TSO_FORCE; @@ -5884,7 +5956,7 @@ static const struct net_device_ops e1000e_netdev_ops = {  	.ndo_stop		= e1000_close,  	.ndo_start_xmit		= e1000_xmit_frame,  	.ndo_get_stats64	= e1000e_get_stats64, -	.ndo_set_rx_mode	= e1000_set_multi, +	.ndo_set_rx_mode	= e1000e_set_rx_mode,  	.ndo_set_mac_address	= e1000_set_mac,  	.ndo_change_mtu		= e1000_change_mtu,  	.ndo_do_ioctl		= e1000_ioctl, @@ -5949,8 +6021,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  			err = dma_set_coherent_mask(&pdev->dev,  						    DMA_BIT_MASK(32));  			if (err) { -				dev_err(&pdev->dev, "No usable DMA " -					"configuration, aborting\n"); +				dev_err(&pdev->dev, "No usable DMA configuration, aborting\n");  				goto err_dma;  			}  		} @@ -6076,6 +6147,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  				  NETIF_F_TSO6 |  				  NETIF_F_HW_CSUM); +	netdev->priv_flags |= IFF_UNICAST_FLT; +  	if (pci_using_dac) {  		netdev->features |= NETIF_F_HIGHDMA;  		netdev->vlan_features |= NETIF_F_HIGHDMA; @@ -6135,7 +6208,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  	/* Initialize link parameters. User can change them with ethtool */  	adapter->hw.mac.autoneg = 1; -	adapter->fc_autoneg = 1; +	adapter->fc_autoneg = true;  	adapter->hw.fc.requested_mode = e1000_fc_default;  	adapter->hw.fc.current_mode = e1000_fc_default;  	adapter->hw.phy.autoneg_advertised = 0x2f; diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c index 7881fb95a25..b8e20f037d0 100644 --- a/drivers/net/ethernet/intel/igb/e1000_82575.c +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c @@ -29,6 +29,8 @@   * e1000_82576   */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/types.h>  #include <linux/if_ether.h> @@ -244,8 +246,7 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)  	 * Check for invalid size  	 */  	if ((hw->mac.type == e1000_82576) && (size > 15)) { -		printk("igb: The NVM size is not valid, " -			"defaulting to 32K.\n"); +		pr_notice("The NVM size is not valid, defaulting to 32K\n");  		size = 15;  	}  	nvm->word_size = 1 << size; diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h index c69feebf265..3d12e67eebb 100644 --- a/drivers/net/ethernet/intel/igb/igb.h +++ b/drivers/net/ethernet/intel/igb/igb.h @@ -447,4 +447,9 @@ static inline s32 igb_get_phy_info(struct e1000_hw *hw)  	return 0;  } +static inline struct netdev_queue *txring_txq(const struct igb_ring *tx_ring) +{ +	return netdev_get_tx_queue(tx_ring->netdev, tx_ring->queue_index); +} +  #endif /* _IGB_H_ */ diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c index 43873eba2f6..7998bf4d594 100644 --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c @@ -36,6 +36,7 @@  #include <linux/ethtool.h>  #include <linux/sched.h>  #include <linux/slab.h> +#include <linux/pm_runtime.h>  #include "igb.h" @@ -148,7 +149,8 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)  				   SUPPORTED_1000baseT_Full|  				   SUPPORTED_Autoneg |  				   SUPPORTED_TP); -		ecmd->advertising = ADVERTISED_TP; +		ecmd->advertising = (ADVERTISED_TP | +				     ADVERTISED_Pause);  		if (hw->mac.autoneg == 1) {  			ecmd->advertising |= ADVERTISED_Autoneg; @@ -165,7 +167,8 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)  		ecmd->advertising = (ADVERTISED_1000baseT_Full |  				     ADVERTISED_FIBRE | -				     ADVERTISED_Autoneg); +				     ADVERTISED_Autoneg | +				     ADVERTISED_Pause);  		ecmd->port = PORT_FIBRE;  	} @@ -673,25 +676,22 @@ static void igb_get_drvinfo(struct net_device *netdev,  			    struct ethtool_drvinfo *drvinfo)  {  	struct igb_adapter *adapter = netdev_priv(netdev); -	char firmware_version[32];  	u16 eeprom_data; -	strncpy(drvinfo->driver,  igb_driver_name, sizeof(drvinfo->driver) - 1); -	strncpy(drvinfo->version, igb_driver_version, -		sizeof(drvinfo->version) - 1); +	strlcpy(drvinfo->driver,  igb_driver_name, sizeof(drvinfo->driver)); +	strlcpy(drvinfo->version, igb_driver_version, sizeof(drvinfo->version));  	/* EEPROM image version # is reported as firmware version # for  	 * 82575 controllers */  	adapter->hw.nvm.ops.read(&adapter->hw, 5, 1, &eeprom_data); -	sprintf(firmware_version, "%d.%d-%d", +	snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), +		"%d.%d-%d",  		(eeprom_data & 0xF000) >> 12,  		(eeprom_data & 0x0FF0) >> 4,  		eeprom_data & 0x000F); -	strncpy(drvinfo->fw_version, firmware_version, -		sizeof(drvinfo->fw_version) - 1); -	strncpy(drvinfo->bus_info, pci_name(adapter->pdev), -		sizeof(drvinfo->bus_info) - 1); +	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), +		sizeof(drvinfo->bus_info));  	drvinfo->n_stats = IGB_STATS_LEN;  	drvinfo->testinfo_len = IGB_TEST_LEN;  	drvinfo->regdump_len = igb_get_regs_len(netdev); @@ -2162,6 +2162,19 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)  	}  } +static int igb_ethtool_begin(struct net_device *netdev) +{ +	struct igb_adapter *adapter = netdev_priv(netdev); +	pm_runtime_get_sync(&adapter->pdev->dev); +	return 0; +} + +static void igb_ethtool_complete(struct net_device *netdev) +{ +	struct igb_adapter *adapter = netdev_priv(netdev); +	pm_runtime_put(&adapter->pdev->dev); +} +  static const struct ethtool_ops igb_ethtool_ops = {  	.get_settings           = igb_get_settings,  	.set_settings           = igb_set_settings, @@ -2188,6 +2201,8 @@ static const struct ethtool_ops igb_ethtool_ops = {  	.get_ethtool_stats      = igb_get_ethtool_stats,  	.get_coalesce           = igb_get_coalesce,  	.set_coalesce           = igb_set_coalesce, +	.begin			= igb_ethtool_begin, +	.complete		= igb_ethtool_complete,  };  void igb_set_ethtool_ops(struct net_device *netdev) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index ced544499f1..01e5e89ef95 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -25,6 +25,8 @@  *******************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/module.h>  #include <linux/types.h>  #include <linux/init.h> @@ -51,6 +53,7 @@  #include <linux/if_ether.h>  #include <linux/aer.h>  #include <linux/prefetch.h> +#include <linux/pm_runtime.h>  #ifdef CONFIG_IGB_DCA  #include <linux/dca.h>  #endif @@ -145,9 +148,9 @@ static bool igb_clean_rx_irq(struct igb_q_vector *, int);  static int igb_ioctl(struct net_device *, struct ifreq *, int cmd);  static void igb_tx_timeout(struct net_device *);  static void igb_reset_task(struct work_struct *); -static void igb_vlan_mode(struct net_device *netdev, u32 features); -static void igb_vlan_rx_add_vid(struct net_device *, u16); -static void igb_vlan_rx_kill_vid(struct net_device *, u16); +static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features); +static int igb_vlan_rx_add_vid(struct net_device *, u16); +static int igb_vlan_rx_kill_vid(struct net_device *, u16);  static void igb_restore_vlan(struct igb_adapter *);  static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8);  static void igb_ping_all_vfs(struct igb_adapter *); @@ -170,8 +173,18 @@ static int igb_check_vf_assignment(struct igb_adapter *adapter);  #endif  #ifdef CONFIG_PM -static int igb_suspend(struct pci_dev *, pm_message_t); -static int igb_resume(struct pci_dev *); +static int igb_suspend(struct device *); +static int igb_resume(struct device *); +#ifdef CONFIG_PM_RUNTIME +static int igb_runtime_suspend(struct device *dev); +static int igb_runtime_resume(struct device *dev); +static int igb_runtime_idle(struct device *dev); +#endif +static const struct dev_pm_ops igb_pm_ops = { +	SET_SYSTEM_SLEEP_PM_OPS(igb_suspend, igb_resume) +	SET_RUNTIME_PM_OPS(igb_runtime_suspend, igb_runtime_resume, +			igb_runtime_idle) +};  #endif  static void igb_shutdown(struct pci_dev *);  #ifdef CONFIG_IGB_DCA @@ -212,9 +225,7 @@ static struct pci_driver igb_driver = {  	.probe    = igb_probe,  	.remove   = __devexit_p(igb_remove),  #ifdef CONFIG_PM -	/* Power Management Hooks */ -	.suspend  = igb_suspend, -	.resume   = igb_resume, +	.driver.pm = &igb_pm_ops,  #endif  	.shutdown = igb_shutdown,  	.err_handler = &igb_err_handler @@ -325,16 +336,13 @@ static void igb_regdump(struct e1000_hw *hw, struct igb_reg_info *reginfo)  			regs[n] = rd32(E1000_TXDCTL(n));  		break;  	default: -		printk(KERN_INFO "%-15s %08x\n", -			reginfo->name, rd32(reginfo->ofs)); +		pr_info("%-15s %08x\n", reginfo->name, rd32(reginfo->ofs));  		return;  	}  	snprintf(rname, 16, "%s%s", reginfo->name, "[0-3]"); -	printk(KERN_INFO "%-15s ", rname); -	for (n = 0; n < 4; n++) -		printk(KERN_CONT "%08x ", regs[n]); -	printk(KERN_CONT "\n"); +	pr_info("%-15s %08x %08x %08x %08x\n", rname, regs[0], regs[1], +		regs[2], regs[3]);  }  /* @@ -359,18 +367,15 @@ static void igb_dump(struct igb_adapter *adapter)  	/* Print netdevice Info */  	if (netdev) {  		dev_info(&adapter->pdev->dev, "Net device Info\n"); -		printk(KERN_INFO "Device Name     state            " -			"trans_start      last_rx\n"); -		printk(KERN_INFO "%-15s %016lX %016lX %016lX\n", -		netdev->name, -		netdev->state, -		netdev->trans_start, -		netdev->last_rx); +		pr_info("Device Name     state            trans_start      " +			"last_rx\n"); +		pr_info("%-15s %016lX %016lX %016lX\n", netdev->name, +			netdev->state, netdev->trans_start, netdev->last_rx);  	}  	/* Print Registers */  	dev_info(&adapter->pdev->dev, "Register Dump\n"); -	printk(KERN_INFO " Register Name   Value\n"); +	pr_info(" Register Name   Value\n");  	for (reginfo = (struct igb_reg_info *)igb_reg_info_tbl;  	     reginfo->name; reginfo++) {  		igb_regdump(hw, reginfo); @@ -381,18 +386,17 @@ static void igb_dump(struct igb_adapter *adapter)  		goto exit;  	dev_info(&adapter->pdev->dev, "TX Rings Summary\n"); -	printk(KERN_INFO "Queue [NTU] [NTC] [bi(ntc)->dma  ]" -		" leng ntw timestamp\n"); +	pr_info("Queue [NTU] [NTC] [bi(ntc)->dma  ] leng ntw timestamp\n");  	for (n = 0; n < adapter->num_tx_queues; n++) {  		struct igb_tx_buffer *buffer_info;  		tx_ring = adapter->tx_ring[n];  		buffer_info = &tx_ring->tx_buffer_info[tx_ring->next_to_clean]; -		printk(KERN_INFO " %5d %5X %5X %016llX %04X %p %016llX\n", -			   n, tx_ring->next_to_use, tx_ring->next_to_clean, -			   (u64)buffer_info->dma, -			   buffer_info->length, -			   buffer_info->next_to_watch, -			   (u64)buffer_info->time_stamp); +		pr_info(" %5d %5X %5X %016llX %04X %p %016llX\n", +			n, tx_ring->next_to_use, tx_ring->next_to_clean, +			(u64)buffer_info->dma, +			buffer_info->length, +			buffer_info->next_to_watch, +			(u64)buffer_info->time_stamp);  	}  	/* Print TX Rings */ @@ -414,36 +418,38 @@ static void igb_dump(struct igb_adapter *adapter)  	for (n = 0; n < adapter->num_tx_queues; n++) {  		tx_ring = adapter->tx_ring[n]; -		printk(KERN_INFO "------------------------------------\n"); -		printk(KERN_INFO "TX QUEUE INDEX = %d\n", tx_ring->queue_index); -		printk(KERN_INFO "------------------------------------\n"); -		printk(KERN_INFO "T [desc]     [address 63:0  ] " -			"[PlPOCIStDDM Ln] [bi->dma       ] " -			"leng  ntw timestamp        bi->skb\n"); +		pr_info("------------------------------------\n"); +		pr_info("TX QUEUE INDEX = %d\n", tx_ring->queue_index); +		pr_info("------------------------------------\n"); +		pr_info("T [desc]     [address 63:0  ] [PlPOCIStDDM Ln] " +			"[bi->dma       ] leng  ntw timestamp        " +			"bi->skb\n");  		for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) { +			const char *next_desc;  			struct igb_tx_buffer *buffer_info;  			tx_desc = IGB_TX_DESC(tx_ring, i);  			buffer_info = &tx_ring->tx_buffer_info[i];  			u0 = (struct my_u0 *)tx_desc; -			printk(KERN_INFO "T [0x%03X]    %016llX %016llX %016llX" -				" %04X  %p %016llX %p", i, +			if (i == tx_ring->next_to_use && +			    i == tx_ring->next_to_clean) +				next_desc = " NTC/U"; +			else if (i == tx_ring->next_to_use) +				next_desc = " NTU"; +			else if (i == tx_ring->next_to_clean) +				next_desc = " NTC"; +			else +				next_desc = ""; + +			pr_info("T [0x%03X]    %016llX %016llX %016llX" +				" %04X  %p %016llX %p%s\n", i,  				le64_to_cpu(u0->a),  				le64_to_cpu(u0->b),  				(u64)buffer_info->dma,  				buffer_info->length,  				buffer_info->next_to_watch,  				(u64)buffer_info->time_stamp, -				buffer_info->skb); -			if (i == tx_ring->next_to_use && -				i == tx_ring->next_to_clean) -				printk(KERN_CONT " NTC/U\n"); -			else if (i == tx_ring->next_to_use) -				printk(KERN_CONT " NTU\n"); -			else if (i == tx_ring->next_to_clean) -				printk(KERN_CONT " NTC\n"); -			else -				printk(KERN_CONT "\n"); +				buffer_info->skb, next_desc);  			if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)  				print_hex_dump(KERN_INFO, "", @@ -456,11 +462,11 @@ static void igb_dump(struct igb_adapter *adapter)  	/* Print RX Rings Summary */  rx_ring_summary:  	dev_info(&adapter->pdev->dev, "RX Rings Summary\n"); -	printk(KERN_INFO "Queue [NTU] [NTC]\n"); +	pr_info("Queue [NTU] [NTC]\n");  	for (n = 0; n < adapter->num_rx_queues; n++) {  		rx_ring = adapter->rx_ring[n]; -		printk(KERN_INFO " %5d %5X %5X\n", n, -			   rx_ring->next_to_use, rx_ring->next_to_clean); +		pr_info(" %5d %5X %5X\n", +			n, rx_ring->next_to_use, rx_ring->next_to_clean);  	}  	/* Print RX Rings */ @@ -492,36 +498,43 @@ rx_ring_summary:  	for (n = 0; n < adapter->num_rx_queues; n++) {  		rx_ring = adapter->rx_ring[n]; -		printk(KERN_INFO "------------------------------------\n"); -		printk(KERN_INFO "RX QUEUE INDEX = %d\n", rx_ring->queue_index); -		printk(KERN_INFO "------------------------------------\n"); -		printk(KERN_INFO "R  [desc]      [ PktBuf     A0] " -			"[  HeadBuf   DD] [bi->dma       ] [bi->skb] " -			"<-- Adv Rx Read format\n"); -		printk(KERN_INFO "RWB[desc]      [PcsmIpSHl PtRs] " -			"[vl er S cks ln] ---------------- [bi->skb] " -			"<-- Adv Rx Write-Back format\n"); +		pr_info("------------------------------------\n"); +		pr_info("RX QUEUE INDEX = %d\n", rx_ring->queue_index); +		pr_info("------------------------------------\n"); +		pr_info("R  [desc]      [ PktBuf     A0] [  HeadBuf   DD] " +			"[bi->dma       ] [bi->skb] <-- Adv Rx Read format\n"); +		pr_info("RWB[desc]      [PcsmIpSHl PtRs] [vl er S cks ln] -----" +			"----------- [bi->skb] <-- Adv Rx Write-Back format\n");  		for (i = 0; i < rx_ring->count; i++) { +			const char *next_desc;  			struct igb_rx_buffer *buffer_info;  			buffer_info = &rx_ring->rx_buffer_info[i];  			rx_desc = IGB_RX_DESC(rx_ring, i);  			u0 = (struct my_u0 *)rx_desc;  			staterr = le32_to_cpu(rx_desc->wb.upper.status_error); + +			if (i == rx_ring->next_to_use) +				next_desc = " NTU"; +			else if (i == rx_ring->next_to_clean) +				next_desc = " NTC"; +			else +				next_desc = ""; +  			if (staterr & E1000_RXD_STAT_DD) {  				/* Descriptor Done */ -				printk(KERN_INFO "RWB[0x%03X]     %016llX " -					"%016llX ---------------- %p", i, +				pr_info("%s[0x%03X]     %016llX %016llX -------" +					"--------- %p%s\n", "RWB", i,  					le64_to_cpu(u0->a),  					le64_to_cpu(u0->b), -					buffer_info->skb); +					buffer_info->skb, next_desc);  			} else { -				printk(KERN_INFO "R  [0x%03X]     %016llX " -					"%016llX %016llX %p", i, +				pr_info("%s[0x%03X]     %016llX %016llX %016llX" +					" %p%s\n", "R  ", i,  					le64_to_cpu(u0->a),  					le64_to_cpu(u0->b),  					(u64)buffer_info->dma, -					buffer_info->skb); +					buffer_info->skb, next_desc);  				if (netif_msg_pktdata(adapter)) {  					print_hex_dump(KERN_INFO, "", @@ -538,14 +551,6 @@ rx_ring_summary:  					  PAGE_SIZE/2, true);  				}  			} - -			if (i == rx_ring->next_to_use) -				printk(KERN_CONT " NTU\n"); -			else if (i == rx_ring->next_to_clean) -				printk(KERN_CONT " NTC\n"); -			else -				printk(KERN_CONT "\n"); -  		}  	} @@ -599,10 +604,10 @@ struct net_device *igb_get_hw_dev(struct e1000_hw *hw)  static int __init igb_init_module(void)  {  	int ret; -	printk(KERN_INFO "%s - version %s\n", +	pr_info("%s - version %s\n",  	       igb_driver_string, igb_driver_version); -	printk(KERN_INFO "%s\n", igb_copyright); +	pr_info("%s\n", igb_copyright);  #ifdef CONFIG_IGB_DCA  	dca_register_notify(&dca_notifier); @@ -1502,6 +1507,7 @@ void igb_power_up_link(struct igb_adapter *adapter)  		igb_power_up_phy_copper(&adapter->hw);  	else  		igb_power_up_serdes_link_82575(&adapter->hw); +	igb_reset_phy(&adapter->hw);  }  /** @@ -1742,7 +1748,8 @@ void igb_reset(struct igb_adapter *adapter)  	igb_get_phy_info(hw);  } -static u32 igb_fix_features(struct net_device *netdev, u32 features) +static netdev_features_t igb_fix_features(struct net_device *netdev, +	netdev_features_t features)  {  	/*  	 * Since there is no support for separate rx/tx vlan accel @@ -1756,9 +1763,10 @@ static u32 igb_fix_features(struct net_device *netdev, u32 features)  	return features;  } -static int igb_set_features(struct net_device *netdev, u32 features) +static int igb_set_features(struct net_device *netdev, +	netdev_features_t features)  { -	u32 changed = netdev->features ^ features; +	netdev_features_t changed = netdev->features ^ features;  	if (changed & NETIF_F_HW_VLAN_RX)  		igb_vlan_mode(netdev, features); @@ -2113,6 +2121,8 @@ static int __devinit igb_probe(struct pci_dev *pdev,  	default:  		break;  	} + +	pm_runtime_put_noidle(&pdev->dev);  	return 0;  err_register: @@ -2152,6 +2162,8 @@ static void __devexit igb_remove(struct pci_dev *pdev)  	struct igb_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; +	pm_runtime_get_noresume(&pdev->dev); +  	/*  	 * The watchdog timer may be rescheduled, so explicitly  	 * disable watchdog from being rescheduled. @@ -2474,16 +2486,22 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)   * handler is registered with the OS, the watchdog timer is started,   * and the stack is notified that the interface is ready.   **/ -static int igb_open(struct net_device *netdev) +static int __igb_open(struct net_device *netdev, bool resuming)  {  	struct igb_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; +	struct pci_dev *pdev = adapter->pdev;  	int err;  	int i;  	/* disallow open during test */ -	if (test_bit(__IGB_TESTING, &adapter->state)) +	if (test_bit(__IGB_TESTING, &adapter->state)) { +		WARN_ON(resuming);  		return -EBUSY; +	} + +	if (!resuming) +		pm_runtime_get_sync(&pdev->dev);  	netif_carrier_off(netdev); @@ -2529,6 +2547,9 @@ static int igb_open(struct net_device *netdev)  	netif_tx_start_all_queues(netdev); +	if (!resuming) +		pm_runtime_put(&pdev->dev); +  	/* start the watchdog. */  	hw->mac.get_link_status = 1;  	schedule_work(&adapter->watchdog_task); @@ -2543,10 +2564,17 @@ err_setup_rx:  	igb_free_all_tx_resources(adapter);  err_setup_tx:  	igb_reset(adapter); +	if (!resuming) +		pm_runtime_put(&pdev->dev);  	return err;  } +static int igb_open(struct net_device *netdev) +{ +	return __igb_open(netdev, false); +} +  /**   * igb_close - Disables a network interface   * @netdev: network interface device structure @@ -2558,21 +2586,32 @@ err_setup_tx:   * needs to be disabled.  A global MAC reset is issued to stop the   * hardware, and all transmit and receive resources are freed.   **/ -static int igb_close(struct net_device *netdev) +static int __igb_close(struct net_device *netdev, bool suspending)  {  	struct igb_adapter *adapter = netdev_priv(netdev); +	struct pci_dev *pdev = adapter->pdev;  	WARN_ON(test_bit(__IGB_RESETTING, &adapter->state)); -	igb_down(adapter); +	if (!suspending) +		pm_runtime_get_sync(&pdev->dev); + +	igb_down(adapter);  	igb_free_irq(adapter);  	igb_free_all_tx_resources(adapter);  	igb_free_all_rx_resources(adapter); +	if (!suspending) +		pm_runtime_put_sync(&pdev->dev);  	return 0;  } +static int igb_close(struct net_device *netdev) +{ +	return __igb_close(netdev, false); +} +  /**   * igb_setup_tx_resources - allocate Tx resources (Descriptors)   * @tx_ring: tx descriptor ring (for a specific queue) to setup @@ -3203,6 +3242,7 @@ static void igb_clean_tx_ring(struct igb_ring *tx_ring)  		buffer_info = &tx_ring->tx_buffer_info[i];  		igb_unmap_and_free_tx_resource(tx_ring, buffer_info);  	} +	netdev_tx_reset_queue(txring_txq(tx_ring));  	size = sizeof(struct igb_tx_buffer) * tx_ring->count;  	memset(tx_ring->tx_buffer_info, 0, size); @@ -3632,6 +3672,9 @@ static void igb_watchdog_task(struct work_struct *work)  	link = igb_has_link(adapter);  	if (link) { +		/* Cancel scheduled suspend requests. */ +		pm_runtime_resume(netdev->dev.parent); +  		if (!netif_carrier_ok(netdev)) {  			u32 ctrl;  			hw->mac.ops.get_speed_and_duplex(hw, @@ -3640,23 +3683,23 @@ static void igb_watchdog_task(struct work_struct *work)  			ctrl = rd32(E1000_CTRL);  			/* Links status message must follow this format */ -			printk(KERN_INFO "igb: %s NIC Link is Up %d Mbps %s, " -				 "Flow Control: %s\n", +			printk(KERN_INFO "igb: %s NIC Link is Up %d Mbps %s " +			       "Duplex, Flow Control: %s\n",  			       netdev->name,  			       adapter->link_speed,  			       adapter->link_duplex == FULL_DUPLEX ? -				 "Full Duplex" : "Half Duplex", -			       ((ctrl & E1000_CTRL_TFCE) && -			        (ctrl & E1000_CTRL_RFCE)) ? "RX/TX" : -			       ((ctrl & E1000_CTRL_RFCE) ?  "RX" : -			       ((ctrl & E1000_CTRL_TFCE) ?  "TX" : "None"))); +			       "Full" : "Half", +			       (ctrl & E1000_CTRL_TFCE) && +			       (ctrl & E1000_CTRL_RFCE) ? "RX/TX" : +			       (ctrl & E1000_CTRL_RFCE) ?  "RX" : +			       (ctrl & E1000_CTRL_TFCE) ?  "TX" : "None");  			/* check for thermal sensor event */ -			if (igb_thermal_sensor_event(hw, E1000_THSTAT_LINK_THROTTLE)) { -				printk(KERN_INFO "igb: %s The network adapter " -						 "link speed was downshifted " -						 "because it overheated.\n", -						 netdev->name); +			if (igb_thermal_sensor_event(hw, +			    E1000_THSTAT_LINK_THROTTLE)) { +				netdev_info(netdev, "The network adapter link " +					    "speed was downshifted because it " +					    "overheated\n");  			}  			/* adjust timeout factor according to speed/duplex */ @@ -3686,11 +3729,10 @@ static void igb_watchdog_task(struct work_struct *work)  			adapter->link_duplex = 0;  			/* check for thermal sensor event */ -			if (igb_thermal_sensor_event(hw, E1000_THSTAT_PWR_DOWN)) { -				printk(KERN_ERR "igb: %s The network adapter " -						"was stopped because it " -						"overheated.\n", -						netdev->name); +			if (igb_thermal_sensor_event(hw, +			    E1000_THSTAT_PWR_DOWN)) { +				netdev_err(netdev, "The network adapter was " +					   "stopped because it overheated\n");  			}  			/* Links status message must follow this format */ @@ -3704,6 +3746,9 @@ static void igb_watchdog_task(struct work_struct *work)  			if (!test_bit(__IGB_DOWN, &adapter->state))  				mod_timer(&adapter->phy_info_timer,  					  round_jiffies(jiffies + 2 * HZ)); + +			pm_schedule_suspend(netdev->dev.parent, +					    MSEC_PER_SEC * 5);  		}  	} @@ -4241,6 +4286,8 @@ static void igb_tx_map(struct igb_ring *tx_ring,  		frag++;  	} +	netdev_tx_sent_queue(txring_txq(tx_ring), first->bytecount); +  	/* write last descriptor with RS and EOP bits */  	cmd_type |= cpu_to_le32(size) | cpu_to_le32(IGB_TXD_DCMD);  	tx_desc->read.cmd_type_len = cmd_type; @@ -5780,6 +5827,8 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)  		}  	} +	netdev_tx_completed_queue(txring_txq(tx_ring), +				  total_packets, total_bytes);  	i += tx_ring->count;  	tx_ring->next_to_clean = i;  	u64_stats_update_begin(&tx_ring->tx_syncp); @@ -6138,7 +6187,7 @@ static bool igb_alloc_mapped_page(struct igb_ring *rx_ring,  		return true;  	if (!page) { -		page = netdev_alloc_page(rx_ring->netdev); +		page = alloc_page(GFP_ATOMIC | __GFP_COLD);  		bi->page = page;  		if (unlikely(!page)) {  			rx_ring->rx_stats.alloc_failed++; @@ -6467,7 +6516,7 @@ s32 igb_write_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value)  	return 0;  } -static void igb_vlan_mode(struct net_device *netdev, u32 features) +static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features)  {  	struct igb_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -6494,7 +6543,7 @@ static void igb_vlan_mode(struct net_device *netdev, u32 features)  	igb_rlpml_set(adapter);  } -static void igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  {  	struct igb_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -6507,9 +6556,11 @@ static void igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	igb_vfta_set(hw, vid, true);  	set_bit(vid, adapter->active_vlans); + +	return 0;  } -static void igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) +static int igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  {  	struct igb_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -6524,6 +6575,8 @@ static void igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  		igb_vfta_set(hw, vid, false);  	clear_bit(vid, adapter->active_vlans); + +	return 0;  }  static void igb_restore_vlan(struct igb_adapter *adapter) @@ -6582,13 +6635,14 @@ err_inval:  	return -EINVAL;  } -static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake) +static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, +			  bool runtime)  {  	struct net_device *netdev = pci_get_drvdata(pdev);  	struct igb_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw;  	u32 ctrl, rctl, status; -	u32 wufc = adapter->wol; +	u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;  #ifdef CONFIG_PM  	int retval = 0;  #endif @@ -6596,7 +6650,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake)  	netif_device_detach(netdev);  	if (netif_running(netdev)) -		igb_close(netdev); +		__igb_close(netdev, true);  	igb_clear_interrupt_scheme(adapter); @@ -6655,12 +6709,13 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake)  }  #ifdef CONFIG_PM -static int igb_suspend(struct pci_dev *pdev, pm_message_t state) +static int igb_suspend(struct device *dev)  {  	int retval;  	bool wake; +	struct pci_dev *pdev = to_pci_dev(dev); -	retval = __igb_shutdown(pdev, &wake); +	retval = __igb_shutdown(pdev, &wake, 0);  	if (retval)  		return retval; @@ -6674,8 +6729,9 @@ static int igb_suspend(struct pci_dev *pdev, pm_message_t state)  	return 0;  } -static int igb_resume(struct pci_dev *pdev) +static int igb_resume(struct device *dev)  { +	struct pci_dev *pdev = to_pci_dev(dev);  	struct net_device *netdev = pci_get_drvdata(pdev);  	struct igb_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -6696,7 +6752,18 @@ static int igb_resume(struct pci_dev *pdev)  	pci_enable_wake(pdev, PCI_D3hot, 0);  	pci_enable_wake(pdev, PCI_D3cold, 0); -	if (igb_init_interrupt_scheme(adapter)) { +	if (!rtnl_is_locked()) { +		/* +		 * shut up ASSERT_RTNL() warning in +		 * netif_set_real_num_tx/rx_queues. +		 */ +		rtnl_lock(); +		err = igb_init_interrupt_scheme(adapter); +		rtnl_unlock(); +	} else { +		err = igb_init_interrupt_scheme(adapter); +	} +	if (err) {  		dev_err(&pdev->dev, "Unable to allocate memory for queues\n");  		return -ENOMEM;  	} @@ -6709,23 +6776,61 @@ static int igb_resume(struct pci_dev *pdev)  	wr32(E1000_WUS, ~0); -	if (netif_running(netdev)) { -		err = igb_open(netdev); +	if (netdev->flags & IFF_UP) { +		err = __igb_open(netdev, true);  		if (err)  			return err;  	}  	netif_device_attach(netdev); +	return 0; +} + +#ifdef CONFIG_PM_RUNTIME +static int igb_runtime_idle(struct device *dev) +{ +	struct pci_dev *pdev = to_pci_dev(dev); +	struct net_device *netdev = pci_get_drvdata(pdev); +	struct igb_adapter *adapter = netdev_priv(netdev); + +	if (!igb_has_link(adapter)) +		pm_schedule_suspend(dev, MSEC_PER_SEC * 5); + +	return -EBUSY; +} + +static int igb_runtime_suspend(struct device *dev) +{ +	struct pci_dev *pdev = to_pci_dev(dev); +	int retval; +	bool wake; + +	retval = __igb_shutdown(pdev, &wake, 1); +	if (retval) +		return retval; + +	if (wake) { +		pci_prepare_to_sleep(pdev); +	} else { +		pci_wake_from_d3(pdev, false); +		pci_set_power_state(pdev, PCI_D3hot); +	}  	return 0;  } + +static int igb_runtime_resume(struct device *dev) +{ +	return igb_resume(dev); +} +#endif /* CONFIG_PM_RUNTIME */  #endif  static void igb_shutdown(struct pci_dev *pdev)  {  	bool wake; -	__igb_shutdown(pdev, &wake); +	__igb_shutdown(pdev, &wake, 0);  	if (system_state == SYSTEM_POWER_OFF) {  		pci_wake_from_d3(pdev, wake); @@ -7064,15 +7169,28 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)  			wr32(E1000_DMCTXTH, 0);  			/* -			 * DMA Coalescing high water mark needs to be higher -			 * than the RX threshold. set hwm to PBA -  2 * max -			 * frame size +			 * DMA Coalescing high water mark needs to be greater +			 * than the Rx threshold. Set hwm to PBA - max frame +			 * size in 16B units, capping it at PBA - 6KB.  			 */ -			hwm = pba - (2 * adapter->max_frame_size); +			hwm = 64 * pba - adapter->max_frame_size / 16; +			if (hwm < 64 * (pba - 6)) +				hwm = 64 * (pba - 6); +			reg = rd32(E1000_FCRTC); +			reg &= ~E1000_FCRTC_RTH_COAL_MASK; +			reg |= ((hwm << E1000_FCRTC_RTH_COAL_SHIFT) +				& E1000_FCRTC_RTH_COAL_MASK); +			wr32(E1000_FCRTC, reg); + +			/* +			 * Set the DMA Coalescing Rx threshold to PBA - 2 * max +			 * frame size, capping it at PBA - 10KB. +			 */ +			dmac_thr = pba - adapter->max_frame_size / 512; +			if (dmac_thr < pba - 10) +				dmac_thr = pba - 10;  			reg = rd32(E1000_DMACR);  			reg &= ~E1000_DMACR_DMACTHR_MASK; -			dmac_thr = pba - 4; -  			reg |= ((dmac_thr << E1000_DMACR_DMACTHR_SHIFT)  				& E1000_DMACR_DMACTHR_MASK); @@ -7088,7 +7206,6 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)  			 * coalescing(smart fifb)-UTRESH=0  			 */  			wr32(E1000_DMCRTRH, 0); -			wr32(E1000_FCRTC, hwm);  			reg = (IGB_DMCTLX_DCFLUSH_DIS | 0x4); diff --git a/drivers/net/ethernet/intel/igbvf/ethtool.c b/drivers/net/ethernet/intel/igbvf/ethtool.c index 2c25858cc0f..7b600a1f636 100644 --- a/drivers/net/ethernet/intel/igbvf/ethtool.c +++ b/drivers/net/ethernet/intel/igbvf/ethtool.c @@ -191,12 +191,12 @@ static void igbvf_get_drvinfo(struct net_device *netdev,                                struct ethtool_drvinfo *drvinfo)  {  	struct igbvf_adapter *adapter = netdev_priv(netdev); -	char firmware_version[32] = "N/A"; -	strncpy(drvinfo->driver,  igbvf_driver_name, 32); -	strncpy(drvinfo->version, igbvf_driver_version, 32); -	strncpy(drvinfo->fw_version, firmware_version, 32); -	strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); +	strlcpy(drvinfo->driver,  igbvf_driver_name, sizeof(drvinfo->driver)); +	strlcpy(drvinfo->version, igbvf_driver_version, +		sizeof(drvinfo->version)); +	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), +		sizeof(drvinfo->bus_info));  	drvinfo->regdump_len = igbvf_get_regs_len(netdev);  	drvinfo->eedump_len = igbvf_get_eeprom_len(netdev);  } diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c index cca78124be3..fd3da3076c2 100644 --- a/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/drivers/net/ethernet/intel/igbvf/netdev.c @@ -25,6 +25,8 @@  *******************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/module.h>  #include <linux/types.h>  #include <linux/init.h> @@ -1174,18 +1176,20 @@ static void igbvf_set_rlpml(struct igbvf_adapter *adapter)  	e1000_rlpml_set_vf(hw, max_frame_size);  } -static void igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +static int igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  {  	struct igbvf_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; -	if (hw->mac.ops.set_vfta(hw, vid, true)) +	if (hw->mac.ops.set_vfta(hw, vid, true)) {  		dev_err(&adapter->pdev->dev, "Failed to add vlan id %d\n", vid); -	else -		set_bit(vid, adapter->active_vlans); +		return -EINVAL; +	} +	set_bit(vid, adapter->active_vlans); +	return 0;  } -static void igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) +static int igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  {  	struct igbvf_adapter *adapter = netdev_priv(netdev);  	struct e1000_hw *hw = &adapter->hw; @@ -1195,11 +1199,13 @@ static void igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  	if (!test_bit(__IGBVF_DOWN, &adapter->state))  		igbvf_irq_enable(adapter); -	if (hw->mac.ops.set_vfta(hw, vid, false)) +	if (hw->mac.ops.set_vfta(hw, vid, false)) {  		dev_err(&adapter->pdev->dev,  		        "Failed to remove vlan id %d\n", vid); -	else -		clear_bit(vid, adapter->active_vlans); +		return -EINVAL; +	} +	clear_bit(vid, adapter->active_vlans); +	return 0;  }  static void igbvf_restore_vlan(struct igbvf_adapter *adapter) @@ -1746,10 +1752,9 @@ void igbvf_update_stats(struct igbvf_adapter *adapter)  static void igbvf_print_link_info(struct igbvf_adapter *adapter)  { -	dev_info(&adapter->pdev->dev, "Link is Up %d Mbps %s\n", -	         adapter->link_speed, -	         ((adapter->link_duplex == FULL_DUPLEX) ? -	          "Full Duplex" : "Half Duplex")); +	dev_info(&adapter->pdev->dev, "Link is Up %d Mbps %s Duplex\n", +		 adapter->link_speed, +		 adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half");  }  static bool igbvf_has_link(struct igbvf_adapter *adapter) @@ -2532,7 +2537,8 @@ static void igbvf_print_device_info(struct igbvf_adapter *adapter)  	dev_info(&pdev->dev, "Address: %pM\n", netdev->dev_addr);  } -static int igbvf_set_features(struct net_device *netdev, u32 features) +static int igbvf_set_features(struct net_device *netdev, +	netdev_features_t features)  {  	struct igbvf_adapter *adapter = netdev_priv(netdev); @@ -2842,9 +2848,8 @@ static struct pci_driver igbvf_driver = {  static int __init igbvf_init_module(void)  {  	int ret; -	printk(KERN_INFO "%s - version %s\n", -	       igbvf_driver_string, igbvf_driver_version); -	printk(KERN_INFO "%s\n", igbvf_copyright); +	pr_info("%s - version %s\n", igbvf_driver_string, igbvf_driver_version); +	pr_info("%s\n", igbvf_copyright);  	ret = pci_register_driver(&igbvf_driver); diff --git a/drivers/net/ethernet/intel/ixgb/ixgb_ethtool.c b/drivers/net/ethernet/intel/ixgb/ixgb_ethtool.c index 9dfce7dff79..dbb7dd2f8e3 100644 --- a/drivers/net/ethernet/intel/ixgb/ixgb_ethtool.c +++ b/drivers/net/ethernet/intel/ixgb/ixgb_ethtool.c @@ -473,10 +473,12 @@ ixgb_get_drvinfo(struct net_device *netdev,  {  	struct ixgb_adapter *adapter = netdev_priv(netdev); -	strncpy(drvinfo->driver,  ixgb_driver_name, 32); -	strncpy(drvinfo->version, ixgb_driver_version, 32); -	strncpy(drvinfo->fw_version, "N/A", 32); -	strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); +	strlcpy(drvinfo->driver,  ixgb_driver_name, +		sizeof(drvinfo->driver)); +	strlcpy(drvinfo->version, ixgb_driver_version, +		sizeof(drvinfo->version)); +	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), +		sizeof(drvinfo->bus_info));  	drvinfo->n_stats = IXGB_STATS_LEN;  	drvinfo->regdump_len = ixgb_get_regs_len(netdev);  	drvinfo->eedump_len = ixgb_get_eeprom_len(netdev); diff --git a/drivers/net/ethernet/intel/ixgb/ixgb_main.c b/drivers/net/ethernet/intel/ixgb/ixgb_main.c index e21148f8b16..9bd5faf64a8 100644 --- a/drivers/net/ethernet/intel/ixgb/ixgb_main.c +++ b/drivers/net/ethernet/intel/ixgb/ixgb_main.c @@ -101,8 +101,8 @@ static void ixgb_tx_timeout_task(struct work_struct *work);  static void ixgb_vlan_strip_enable(struct ixgb_adapter *adapter);  static void ixgb_vlan_strip_disable(struct ixgb_adapter *adapter); -static void ixgb_vlan_rx_add_vid(struct net_device *netdev, u16 vid); -static void ixgb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid); +static int ixgb_vlan_rx_add_vid(struct net_device *netdev, u16 vid); +static int ixgb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid);  static void ixgb_restore_vlan(struct ixgb_adapter *adapter);  #ifdef CONFIG_NET_POLL_CONTROLLER @@ -228,7 +228,7 @@ ixgb_up(struct ixgb_adapter *adapter)  	if (IXGB_READ_REG(&adapter->hw, STATUS) & IXGB_STATUS_PCIX_MODE) {  		err = pci_enable_msi(adapter->pdev);  		if (!err) { -			adapter->have_msi = 1; +			adapter->have_msi = true;  			irq_flags = 0;  		}  		/* proceed to try to request regular interrupt */ @@ -325,8 +325,8 @@ ixgb_reset(struct ixgb_adapter *adapter)  	}  } -static u32 -ixgb_fix_features(struct net_device *netdev, u32 features) +static netdev_features_t +ixgb_fix_features(struct net_device *netdev, netdev_features_t features)  {  	/*  	 * Tx VLAN insertion does not work per HW design when Rx stripping is @@ -339,10 +339,10 @@ ixgb_fix_features(struct net_device *netdev, u32 features)  }  static int -ixgb_set_features(struct net_device *netdev, u32 features) +ixgb_set_features(struct net_device *netdev, netdev_features_t features)  {  	struct ixgb_adapter *adapter = netdev_priv(netdev); -	u32 changed = features ^ netdev->features; +	netdev_features_t changed = features ^ netdev->features;  	if (!(changed & (NETIF_F_RXCSUM|NETIF_F_HW_VLAN_RX)))  		return 0; @@ -2217,7 +2217,7 @@ ixgb_vlan_strip_disable(struct ixgb_adapter *adapter)  	IXGB_WRITE_REG(&adapter->hw, CTRL0, ctrl);  } -static void +static int  ixgb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  {  	struct ixgb_adapter *adapter = netdev_priv(netdev); @@ -2230,9 +2230,11 @@ ixgb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	vfta |= (1 << (vid & 0x1F));  	ixgb_write_vfta(&adapter->hw, index, vfta);  	set_bit(vid, adapter->active_vlans); + +	return 0;  } -static void +static int  ixgb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  {  	struct ixgb_adapter *adapter = netdev_priv(netdev); @@ -2245,6 +2247,8 @@ ixgb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  	vfta &= ~(1 << (vid & 0x1F));  	ixgb_write_vfta(&adapter->hw, index, vfta);  	clear_bit(vid, adapter->active_vlans); + +	return 0;  }  static void diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h index a8368d5cf68..258164d6d45 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h @@ -560,6 +560,7 @@ extern int ixgbe_copy_dcb_cfg(struct ixgbe_dcb_config *src_dcb_cfg,  extern char ixgbe_driver_name[];  extern const char ixgbe_driver_version[]; +extern char ixgbe_default_device_descr[];  extern void ixgbe_up(struct ixgbe_adapter *adapter);  extern void ixgbe_down(struct ixgbe_adapter *adapter); @@ -627,6 +628,8 @@ extern u8 ixgbe_fcoe_getapp(struct ixgbe_adapter *adapter);  extern u8 ixgbe_fcoe_setapp(struct ixgbe_adapter *adapter, u8 up);  #endif /* CONFIG_IXGBE_DCB */  extern int ixgbe_fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type); +extern int ixgbe_fcoe_get_hbainfo(struct net_device *netdev, +				  struct netdev_fcoe_hbainfo *info);  #endif /* IXGBE_FCOE */  #endif /* _IXGBE_H_ */ diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c index 4ae26a748da..772072147be 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c @@ -356,6 +356,7 @@ static enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)  	case IXGBE_DEV_ID_82599_SFP_FCOE:  	case IXGBE_DEV_ID_82599_SFP_EM:  	case IXGBE_DEV_ID_82599_SFP_SF2: +	case IXGBE_DEV_ID_82599_SFP_SF_QP:  	case IXGBE_DEV_ID_82599EN_SFP:  		media_type = ixgbe_media_type_fiber;  		break; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c index f1365fef4ed..a3aa6333073 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c @@ -266,10 +266,10 @@ s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw)  	if (hw->mac.type == ixgbe_mac_X540) {  		if (hw->phy.id == 0)  			hw->phy.ops.identify(hw); -		hw->phy.ops.read_reg(hw, 0x3, IXGBE_PCRC8ECL, &i); -		hw->phy.ops.read_reg(hw, 0x3, IXGBE_PCRC8ECH, &i); -		hw->phy.ops.read_reg(hw, 0x3, IXGBE_LDPCECL, &i); -		hw->phy.ops.read_reg(hw, 0x3, IXGBE_LDPCECH, &i); +		hw->phy.ops.read_reg(hw, IXGBE_PCRC8ECL, MDIO_MMD_PCS, &i); +		hw->phy.ops.read_reg(hw, IXGBE_PCRC8ECH, MDIO_MMD_PCS, &i); +		hw->phy.ops.read_reg(hw, IXGBE_LDPCECL, MDIO_MMD_PCS, &i); +		hw->phy.ops.read_reg(hw, IXGBE_LDPCECH, MDIO_MMD_PCS, &i);  	}  	return 0; @@ -2599,7 +2599,7 @@ s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval)  s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)  {  	ixgbe_link_speed speed = 0; -	bool link_up = 0; +	bool link_up = false;  	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);  	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c index 33b93ffb87c..da31735311f 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c @@ -158,10 +158,6 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_tx(struct net_device *netdev, int tc,  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev); -	/* Abort a bad configuration */ -	if (ffs(up_map) > adapter->dcb_cfg.num_tcs.pg_tcs) -		return; -  	if (prio != DCB_ATTR_VALUE_UNDEFINED)  		adapter->temp_dcb_cfg.tc_config[tc].path[0].prio_type = prio;  	if (bwg_id != DCB_ATTR_VALUE_UNDEFINED) @@ -185,7 +181,7 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_tx(struct net_device *netdev, int tc,  	if (adapter->temp_dcb_cfg.tc_config[tc].path[0].up_to_tc_bitmap !=  	     adapter->dcb_cfg.tc_config[tc].path[0].up_to_tc_bitmap) -		adapter->dcb_set_bitmap |= BIT_PFC; +		adapter->dcb_set_bitmap |= BIT_PFC | BIT_APP_UPCHG;  }  static void ixgbe_dcbnl_set_pg_bwg_cfg_tx(struct net_device *netdev, int bwg_id, @@ -206,10 +202,6 @@ static void ixgbe_dcbnl_set_pg_tc_cfg_rx(struct net_device *netdev, int tc,  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev); -	/* Abort bad configurations */ -	if (ffs(up_map) > adapter->dcb_cfg.num_tcs.pg_tcs) -		return; -  	if (prio != DCB_ATTR_VALUE_UNDEFINED)  		adapter->temp_dcb_cfg.tc_config[tc].path[1].prio_type = prio;  	if (bwg_id != DCB_ATTR_VALUE_UNDEFINED) @@ -309,6 +301,27 @@ static void ixgbe_dcbnl_get_pfc_cfg(struct net_device *netdev, int priority,  	*setting = adapter->dcb_cfg.tc_config[priority].dcb_pfc;  } +#ifdef IXGBE_FCOE +static void ixgbe_dcbnl_devreset(struct net_device *dev) +{ +	struct ixgbe_adapter *adapter = netdev_priv(dev); + +	while (test_and_set_bit(__IXGBE_RESETTING, &adapter->state)) +		usleep_range(1000, 2000); + +	if (netif_running(dev)) +		dev->netdev_ops->ndo_stop(dev); + +	ixgbe_clear_interrupt_scheme(adapter); +	ixgbe_init_interrupt_scheme(adapter); + +	if (netif_running(dev)) +		dev->netdev_ops->ndo_open(dev); + +	clear_bit(__IXGBE_RESETTING, &adapter->state); +} +#endif +  static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev); @@ -338,27 +351,6 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)  	if (ret)  		return DCB_NO_HW_CHG; -#ifdef IXGBE_FCOE -	if (up && !(up & (1 << adapter->fcoe.up))) -		adapter->dcb_set_bitmap |= BIT_APP_UPCHG; - -	/* -	 * Only take down the adapter if an app change occurred. FCoE -	 * may shuffle tx rings in this case and this can not be done -	 * without a reset currently. -	 */ -	if (adapter->dcb_set_bitmap & BIT_APP_UPCHG) { -		while (test_and_set_bit(__IXGBE_RESETTING, &adapter->state)) -			usleep_range(1000, 2000); - -		adapter->fcoe.up = ffs(up) - 1; - -		if (netif_running(netdev)) -			netdev->netdev_ops->ndo_stop(netdev); -		ixgbe_clear_interrupt_scheme(adapter); -	} -#endif -  	if (adapter->dcb_cfg.pfc_mode_enable) {  		switch (adapter->hw.mac.type) {  		case ixgbe_mac_82599EB: @@ -385,15 +377,6 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)  		}  	} -#ifdef IXGBE_FCOE -	if (adapter->dcb_set_bitmap & BIT_APP_UPCHG) { -		ixgbe_init_interrupt_scheme(adapter); -		if (netif_running(netdev)) -			netdev->netdev_ops->ndo_open(netdev); -		ret = DCB_HW_CHG_RST; -	} -#endif -  	if (adapter->dcb_set_bitmap & (BIT_PG_TX|BIT_PG_RX)) {  		u16 refill[MAX_TRAFFIC_CLASS], max[MAX_TRAFFIC_CLASS];  		u8 bwg_id[MAX_TRAFFIC_CLASS], prio_type[MAX_TRAFFIC_CLASS]; @@ -442,8 +425,19 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)  	if (adapter->dcb_cfg.pfc_mode_enable)  		adapter->hw.fc.current_mode = ixgbe_fc_pfc; -	if (adapter->dcb_set_bitmap & BIT_APP_UPCHG) -		clear_bit(__IXGBE_RESETTING, &adapter->state); +#ifdef IXGBE_FCOE +	/* Reprogam FCoE hardware offloads when the traffic class +	 * FCoE is using changes. This happens if the APP info +	 * changes or the up2tc mapping is updated. +	 */ +	if ((up && !(up & (1 << adapter->fcoe.up))) || +	    (adapter->dcb_set_bitmap & BIT_APP_UPCHG)) { +		adapter->fcoe.up = ffs(up) - 1; +		ixgbe_dcbnl_devreset(netdev); +		ret = DCB_HW_CHG_RST; +	} +#endif +  	adapter->dcb_set_bitmap = 0x00;  	return ret;  } @@ -661,22 +655,6 @@ static int ixgbe_dcbnl_ieee_setpfc(struct net_device *dev,  	return ixgbe_dcb_hw_pfc_config(&adapter->hw, pfc->pfc_en, prio_tc);  } -#ifdef IXGBE_FCOE -static void ixgbe_dcbnl_devreset(struct net_device *dev) -{ -	struct ixgbe_adapter *adapter = netdev_priv(dev); - -	if (netif_running(dev)) -		dev->netdev_ops->ndo_stop(dev); - -	ixgbe_clear_interrupt_scheme(adapter); -	ixgbe_init_interrupt_scheme(adapter); - -	if (netif_running(dev)) -		dev->netdev_ops->ndo_open(dev); -} -#endif -  static int ixgbe_dcbnl_ieee_setapp(struct net_device *dev,  				   struct dcb_app *app)  { @@ -761,7 +739,9 @@ static u8 ixgbe_dcbnl_setdcbx(struct net_device *dev, u8 mode)  		ixgbe_dcbnl_ieee_setets(dev, &ets);  		ixgbe_dcbnl_ieee_setpfc(dev, &pfc);  	} else if (mode & DCB_CAP_DCBX_VER_CEE) { -		adapter->dcb_set_bitmap |= (BIT_PFC & BIT_PG_TX & BIT_PG_RX); +		u8 mask = BIT_PFC | BIT_PG_TX | BIT_PG_RX | BIT_APP_UPCHG; + +		adapter->dcb_set_bitmap |= mask;  		ixgbe_dcbnl_set_all(dev);  	} else {  		/* Drop into single TC mode strict priority as this diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index 70d58c3849b..da7e580f517 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -888,23 +888,19 @@ static void ixgbe_get_drvinfo(struct net_device *netdev,                                struct ethtool_drvinfo *drvinfo)  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev); -	char firmware_version[32];  	u32 nvm_track_id; -	strncpy(drvinfo->driver, ixgbe_driver_name, -	        sizeof(drvinfo->driver) - 1); -	strncpy(drvinfo->version, ixgbe_driver_version, -	        sizeof(drvinfo->version) - 1); +	strlcpy(drvinfo->driver, ixgbe_driver_name, sizeof(drvinfo->driver)); +	strlcpy(drvinfo->version, ixgbe_driver_version, +		sizeof(drvinfo->version));  	nvm_track_id = (adapter->eeprom_verh << 16) |  			adapter->eeprom_verl; -	snprintf(firmware_version, sizeof(firmware_version), "0x%08x", +	snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), "0x%08x",  		 nvm_track_id); -	strncpy(drvinfo->fw_version, firmware_version, -		sizeof(drvinfo->fw_version) - 1); -	strncpy(drvinfo->bus_info, pci_name(adapter->pdev), -		sizeof(drvinfo->bus_info) - 1); +	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), +		sizeof(drvinfo->bus_info));  	drvinfo->n_stats = IXGBE_STATS_LEN;  	drvinfo->testinfo_len = IXGBE_TEST_LEN;  	drvinfo->regdump_len = ixgbe_get_regs_len(netdev); @@ -1959,12 +1955,21 @@ static int ixgbe_wol_exclusion(struct ixgbe_adapter *adapter,  	/* WOL not supported except for the following */  	switch(hw->device_id) {  	case IXGBE_DEV_ID_82599_SFP: -		/* Only this subdevice supports WOL */ -		if (hw->subsystem_device_id != IXGBE_SUBDEV_ID_82599_SFP) { +		/* Only these subdevices could supports WOL */ +		switch (hw->subsystem_device_id) { +		case IXGBE_SUBDEV_ID_82599_560FLR: +			/* only support first port */ +			if (hw->bus.func != 0) { +				wol->supported = 0; +				break; +			} +		case IXGBE_SUBDEV_ID_82599_SFP: +			retval = 0; +			break; +		default:  			wol->supported = 0;  			break;  		} -		retval = 0;  		break;  	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:  		/* All except this subdevice support WOL */ diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c index df3b1be69d8..d18d6157dd2 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c @@ -855,3 +855,86 @@ int ixgbe_fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type)  	}  	return rc;  } + +/** + * ixgbe_fcoe_get_hbainfo - get FCoE HBA information + * @netdev : ixgbe adapter + * @info : HBA information + * + * Returns ixgbe HBA information + * + * Returns : 0 on success + */ +int ixgbe_fcoe_get_hbainfo(struct net_device *netdev, +			   struct netdev_fcoe_hbainfo *info) +{ +	struct ixgbe_adapter *adapter = netdev_priv(netdev); +	struct ixgbe_hw *hw = &adapter->hw; +	int i, pos; +	u8 buf[8]; + +	if (!info) +		return -EINVAL; + +	/* Don't return information on unsupported devices */ +	if (hw->mac.type != ixgbe_mac_82599EB && +	    hw->mac.type != ixgbe_mac_X540) +		return -EINVAL; + +	/* Manufacturer */ +	snprintf(info->manufacturer, sizeof(info->manufacturer), +		 "Intel Corporation"); + +	/* Serial Number */ + +	/* Get the PCI-e Device Serial Number Capability */ +	pos = pci_find_ext_capability(adapter->pdev, PCI_EXT_CAP_ID_DSN); +	if (pos) { +		pos += 4; +		for (i = 0; i < 8; i++) +			pci_read_config_byte(adapter->pdev, pos + i, &buf[i]); + +		snprintf(info->serial_number, sizeof(info->serial_number), +			 "%02X%02X%02X%02X%02X%02X%02X%02X", +			 buf[7], buf[6], buf[5], buf[4], +			 buf[3], buf[2], buf[1], buf[0]); +	} else +		snprintf(info->serial_number, sizeof(info->serial_number), +			 "Unknown"); + +	/* Hardware Version */ +	snprintf(info->hardware_version, +		 sizeof(info->hardware_version), +		 "Rev %d", hw->revision_id); +	/* Driver Name/Version */ +	snprintf(info->driver_version, +		 sizeof(info->driver_version), +		 "%s v%s", +		 ixgbe_driver_name, +		 ixgbe_driver_version); +	/* Firmware Version */ +	snprintf(info->firmware_version, +		 sizeof(info->firmware_version), +		 "0x%08x", +		 (adapter->eeprom_verh << 16) | +		  adapter->eeprom_verl); + +	/* Model */ +	if (hw->mac.type == ixgbe_mac_82599EB) { +		snprintf(info->model, +			 sizeof(info->model), +			 "Intel 82599"); +	} else { +		snprintf(info->model, +			 sizeof(info->model), +			 "Intel X540"); +	} + +	/* Model Description */ +	snprintf(info->model_description, +		 sizeof(info->model_description), +		 "%s", +		 ixgbe_default_device_descr); + +	return 0; +} diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 8ef92d1a6aa..1ee5d0fbb90 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -55,6 +55,8 @@  char ixgbe_driver_name[] = "ixgbe";  static const char ixgbe_driver_string[] =  			      "Intel(R) 10 Gigabit PCI Express Network Driver"; +char ixgbe_default_device_descr[] = +			      "Intel(R) 10 Gigabit Network Connection";  #define MAJ 3  #define MIN 6  #define BUILD 7 @@ -106,6 +108,7 @@ static DEFINE_PCI_DEVICE_TABLE(ixgbe_pci_tbl) = {  	{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_SFP_SF2), board_82599 },  	{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_LS), board_82599 },  	{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599EN_SFP), board_82599 }, +	{PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_SFP_SF_QP), board_82599 },  	/* required last entry */  	{0, }  }; @@ -146,7 +149,7 @@ static void ixgbe_service_event_complete(struct ixgbe_adapter *adapter)  {  	BUG_ON(!test_bit(__IXGBE_SERVICE_SCHED, &adapter->state)); -	/* flush memory to make sure state is correct before next watchog */ +	/* flush memory to make sure state is correct before next watchdog */  	smp_mb__before_clear_bit();  	clear_bit(__IXGBE_SERVICE_SCHED, &adapter->state);  } @@ -1140,7 +1143,7 @@ void ixgbe_alloc_rx_buffers(struct ixgbe_ring *rx_ring, u16 cleaned_count)  		if (ring_is_ps_enabled(rx_ring)) {  			if (!bi->page) { -				bi->page = netdev_alloc_page(rx_ring->netdev); +				bi->page = alloc_page(GFP_ATOMIC | __GFP_COLD);  				if (!bi->page) {  					rx_ring->rx_stats.alloc_rx_page_failed++;  					goto no_buffers; @@ -2156,7 +2159,7 @@ static irqreturn_t ixgbe_intr(int irq, void *data)  	IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_IRQ_CLEAR_MASK);  	/* for NAPI, using EIAM to auto-mask tx/rx interrupt bits on read -	 * therefore no explict interrupt disable is necessary */ +	 * therefore no explicit interrupt disable is necessary */  	eicr = IXGBE_READ_REG(hw, IXGBE_EICR);  	if (!eicr) {  		/* @@ -3044,7 +3047,7 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)  	hw->mac.ops.enable_rx_dma(hw, rxctrl);  } -static void ixgbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +static int ixgbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev);  	struct ixgbe_hw *hw = &adapter->hw; @@ -3053,9 +3056,11 @@ static void ixgbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	/* add VID to filter table */  	hw->mac.ops.set_vfta(&adapter->hw, vid, pool_ndx, true);  	set_bit(vid, adapter->active_vlans); + +	return 0;  } -static void ixgbe_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) +static int ixgbe_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev);  	struct ixgbe_hw *hw = &adapter->hw; @@ -3064,6 +3069,8 @@ static void ixgbe_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  	/* remove VID from filter table */  	hw->mac.ops.set_vfta(&adapter->hw, vid, pool_ndx, false);  	clear_bit(vid, adapter->active_vlans); + +	return 0;  }  /** @@ -3602,7 +3609,7 @@ static inline bool ixgbe_is_sfp(struct ixgbe_hw *hw)  static void ixgbe_sfp_link_config(struct ixgbe_adapter *adapter)  {  	/* -	 * We are assuming the worst case scenerio here, and that +	 * We are assuming the worst case scenario here, and that  	 * is that an SFP was inserted/removed after the reset  	 * but before SFP detection was enabled.  As such the best  	 * solution is to just start searching as soon as we start @@ -3824,7 +3831,7 @@ void ixgbe_reset(struct ixgbe_adapter *adapter)  	case IXGBE_ERR_EEPROM_VERSION:  		/* We are running on a pre-production device, log a warning */  		e_dev_warn("This device is a pre-production adapter/LOM. " -			   "Please be aware there may be issuesassociated with " +			   "Please be aware there may be issues associated with "  			   "your hardware.  If you are experiencing problems "  			   "please contact your Intel or hardware "  			   "representative who provided you with this " @@ -4019,7 +4026,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter)  		/* Mark all the VFs as inactive */  		for (i = 0 ; i < adapter->num_vfs; i++) -			adapter->vfinfo[i].clear_to_send = 0; +			adapter->vfinfo[i].clear_to_send = false;  		/* ping all the active vfs to let them know we are going down */  		ixgbe_ping_all_vfs(adapter); @@ -5788,9 +5795,9 @@ static void ixgbe_fdir_reinit_subtask(struct ixgbe_adapter *adapter)   * @adapter - pointer to the device adapter structure   *   * This function serves two purposes.  First it strobes the interrupt lines - * in order to make certain interrupts are occuring.  Secondly it sets the + * in order to make certain interrupts are occurring.  Secondly it sets the   * bits needed to check for TX hangs.  As a result we should immediately - * determine if a hang has occured. + * determine if a hang has occurred.   */  static void ixgbe_check_hang_subtask(struct ixgbe_adapter *adapter)  { @@ -7128,7 +7135,7 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)  		return -EINVAL;  	/* Hardware has to reinitialize queues and interrupts to -	 * match packet buffer alignment. Unfortunantly, the +	 * match packet buffer alignment. Unfortunately, the  	 * hardware is not flexible enough to do this dynamically.  	 */  	if (netif_running(dev)) @@ -7174,7 +7181,8 @@ void ixgbe_do_reset(struct net_device *netdev)  		ixgbe_reset(adapter);  } -static u32 ixgbe_fix_features(struct net_device *netdev, u32 data) +static netdev_features_t ixgbe_fix_features(struct net_device *netdev, +	netdev_features_t data)  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev); @@ -7204,7 +7212,8 @@ static u32 ixgbe_fix_features(struct net_device *netdev, u32 data)  	return data;  } -static int ixgbe_set_features(struct net_device *netdev, u32 data) +static int ixgbe_set_features(struct net_device *netdev, +	netdev_features_t data)  {  	struct ixgbe_adapter *adapter = netdev_priv(netdev);  	bool need_reset = false; @@ -7286,6 +7295,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {  	.ndo_fcoe_enable = ixgbe_fcoe_enable,  	.ndo_fcoe_disable = ixgbe_fcoe_disable,  	.ndo_fcoe_get_wwn = ixgbe_fcoe_get_wwn, +	.ndo_fcoe_get_hbainfo = ixgbe_fcoe_get_hbainfo,  #endif /* IXGBE_FCOE */  	.ndo_set_features = ixgbe_set_features,  	.ndo_fix_features = ixgbe_fix_features, @@ -7598,9 +7608,16 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,  	adapter->wol = 0;  	switch (pdev->device) {  	case IXGBE_DEV_ID_82599_SFP: -		/* Only this subdevice supports WOL */ -		if (pdev->subsystem_device == IXGBE_SUBDEV_ID_82599_SFP) +		/* Only these subdevice supports WOL */ +		switch (pdev->subsystem_device) { +		case IXGBE_SUBDEV_ID_82599_560FLR: +			/* only support first port */ +			if (hw->bus.func != 0) +				break; +		case IXGBE_SUBDEV_ID_82599_SFP:  			adapter->wol = IXGBE_WUFC_MAG; +			break; +		}  		break;  	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:  		/* All except this subdevice support WOL */ @@ -7708,7 +7725,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,  	/* add san mac addr to netdev */  	ixgbe_add_sanmac_netdev(netdev); -	e_dev_info("Intel(R) 10 Gigabit Network Connection\n"); +	e_dev_info("%s\n", ixgbe_default_device_descr);  	cards_found++;  	return 0; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c index 9a56fd74e67..7cf1e1f56c6 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c @@ -1214,7 +1214,7 @@ s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,  	u32 max_retry = 10;  	u32 retry = 0;  	u16 swfw_mask = 0; -	bool nack = 1; +	bool nack = true;  	*data = 0;  	if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1) @@ -1421,7 +1421,7 @@ static void ixgbe_i2c_stop(struct ixgbe_hw *hw)  static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)  {  	s32 i; -	bool bit = 0; +	bool bit = false;  	for (i = 7; i >= 0; i--) {  		ixgbe_clock_in_i2c_bit(hw, &bit); @@ -1443,7 +1443,7 @@ static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)  	s32 status = 0;  	s32 i;  	u32 i2cctl; -	bool bit = 0; +	bool bit = false;  	for (i = 7; i >= 0; i--) {  		bit = (data >> i) & 0x1; @@ -1457,6 +1457,7 @@ static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)  	i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);  	i2cctl |= IXGBE_I2C_DATA_OUT;  	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl); +	IXGBE_WRITE_FLUSH(hw);  	return status;  } @@ -1473,7 +1474,7 @@ static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)  	u32 i = 0;  	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);  	u32 timeout = 10; -	bool ack = 1; +	bool ack = true;  	ixgbe_raise_i2c_clk(hw, &i2cctl); @@ -1646,9 +1647,9 @@ static bool ixgbe_get_i2c_data(u32 *i2cctl)  	bool data;  	if (*i2cctl & IXGBE_I2C_DATA_IN) -		data = 1; +		data = true;  	else -		data = 0; +		data = false;  	return data;  } diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c index 00fcd39ad66..cf6812dd143 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c @@ -572,7 +572,7 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)  		/* reply to reset with ack and vf mac address */  		msgbuf[0] = IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK; -		memcpy(new_mac, vf_mac, IXGBE_ETH_LENGTH_OF_ADDRESS); +		memcpy(new_mac, vf_mac, ETH_ALEN);  		/*  		 * Piggyback the multicast filter type so VF can compute the  		 * correct vectors diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h index df04f1a3857..e8badab0335 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h @@ -33,7 +33,6 @@ void ixgbe_msg_task(struct ixgbe_adapter *adapter);  int ixgbe_vf_configuration(struct pci_dev *pdev, unsigned int event_mask);  void ixgbe_disable_tx_rx(struct ixgbe_adapter *adapter);  void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter); -void ixgbe_dump_registers(struct ixgbe_adapter *adapter);  int ixgbe_ndo_set_vf_mac(struct net_device *netdev, int queue, u8 *mac);  int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int queue, u16 vlan,  			   u8 qos); diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h index 6c5cca808bd..802bfa0f62c 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h @@ -57,6 +57,7 @@  #define IXGBE_DEV_ID_82599_BACKPLANE_FCOE       0x152a  #define IXGBE_DEV_ID_82599_SFP_FCOE      0x1529  #define IXGBE_SUBDEV_ID_82599_SFP        0x11A9 +#define IXGBE_SUBDEV_ID_82599_560FLR     0x17D0  #define IXGBE_DEV_ID_82599_SFP_EM        0x1507  #define IXGBE_DEV_ID_82599_SFP_SF2       0x154D  #define IXGBE_DEV_ID_82599EN_SFP         0x1557 @@ -65,6 +66,7 @@  #define IXGBE_SUBDEV_ID_82599_KX4_KR_MEZZ  0x000C  #define IXGBE_DEV_ID_82599_LS            0x154F  #define IXGBE_DEV_ID_X540T               0x1528 +#define IXGBE_DEV_ID_82599_SFP_SF_QP     0x154A  /* VF Device IDs */  #define IXGBE_DEV_ID_82599_VF           0x10ED @@ -1710,8 +1712,6 @@ enum {  #define IXGBE_NVM_POLL_WRITE       1  /* Flag for polling for write complete */  #define IXGBE_NVM_POLL_READ        0  /* Flag for polling for read complete */ -#define IXGBE_ETH_LENGTH_OF_ADDRESS   6 -  #define IXGBE_EEPROM_PAGE_SIZE_MAX       128  #define IXGBE_EEPROM_RD_BUFFER_MAX_COUNT 512 /* EEPROM words # read in burst */  #define IXGBE_EEPROM_WR_BUFFER_MAX_COUNT 256 /* EEPROM words # wr in burst */ @@ -2802,9 +2802,9 @@ struct ixgbe_eeprom_info {  struct ixgbe_mac_info {  	struct ixgbe_mac_operations     ops;  	enum ixgbe_mac_type             type; -	u8                              addr[IXGBE_ETH_LENGTH_OF_ADDRESS]; -	u8                              perm_addr[IXGBE_ETH_LENGTH_OF_ADDRESS]; -	u8                              san_addr[IXGBE_ETH_LENGTH_OF_ADDRESS]; +	u8                              addr[ETH_ALEN]; +	u8                              perm_addr[ETH_ALEN]; +	u8                              san_addr[ETH_ALEN];  	/* prefix for World Wide Node Name (WWNN) */  	u16                             wwnn_prefix;  	/* prefix for World Wide Port Name (WWPN) */ diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c index e5101e91b6b..8cc5eccfd65 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c @@ -751,16 +751,20 @@ static s32 ixgbe_blink_led_start_X540(struct ixgbe_hw *hw, u32 index)  {  	u32 macc_reg;  	u32 ledctl_reg; +	ixgbe_link_speed speed; +	bool link_up;  	/* -	 * In order for the blink bit in the LED control register -	 * to work, link and speed must be forced in the MAC. We -	 * will reverse this when we stop the blinking. +	 * Link should be up in order for the blink bit in the LED control +	 * register to work. Force link and speed in the MAC if link is down. +	 * This will be reversed when we stop the blinking.  	 */ -	macc_reg = IXGBE_READ_REG(hw, IXGBE_MACC); -	macc_reg |= IXGBE_MACC_FLU | IXGBE_MACC_FSV_10G | IXGBE_MACC_FS; -	IXGBE_WRITE_REG(hw, IXGBE_MACC, macc_reg); - +	hw->mac.ops.check_link(hw, &speed, &link_up, false); +	if (link_up == false) { +		macc_reg = IXGBE_READ_REG(hw, IXGBE_MACC); +		macc_reg |= IXGBE_MACC_FLU | IXGBE_MACC_FSV_10G | IXGBE_MACC_FS; +		IXGBE_WRITE_REG(hw, IXGBE_MACC, macc_reg); +	}  	/* Set the LED to LINK_UP + BLINK. */  	ledctl_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);  	ledctl_reg &= ~IXGBE_LED_MODE_MASK(index); diff --git a/drivers/net/ethernet/intel/ixgbevf/defines.h b/drivers/net/ethernet/intel/ixgbevf/defines.h index 78abb6f1a86..2eb89cb94a0 100644 --- a/drivers/net/ethernet/intel/ixgbevf/defines.h +++ b/drivers/net/ethernet/intel/ixgbevf/defines.h @@ -35,7 +35,6 @@  #define IXGBE_VF_IRQ_CLEAR_MASK         7  #define IXGBE_VF_MAX_TX_QUEUES          1  #define IXGBE_VF_MAX_RX_QUEUES          1 -#define IXGBE_ETH_LENGTH_OF_ADDRESS     6  /* Link speed */  typedef u32 ixgbe_link_speed; diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c index e29ba4506b7..dc8e6511c64 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c +++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c @@ -27,6 +27,8 @@  /* ethtool support for ixgbevf */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/types.h>  #include <linux/module.h>  #include <linux/slab.h> @@ -265,11 +267,11 @@ static void ixgbevf_get_drvinfo(struct net_device *netdev,  {  	struct ixgbevf_adapter *adapter = netdev_priv(netdev); -	strlcpy(drvinfo->driver, ixgbevf_driver_name, 32); -	strlcpy(drvinfo->version, ixgbevf_driver_version, 32); - -	strlcpy(drvinfo->fw_version, "N/A", 4); -	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); +	strlcpy(drvinfo->driver, ixgbevf_driver_name, sizeof(drvinfo->driver)); +	strlcpy(drvinfo->version, ixgbevf_driver_version, +		sizeof(drvinfo->version)); +	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), +		sizeof(drvinfo->bus_info));  }  static void ixgbevf_get_ringparam(struct net_device *netdev, @@ -549,8 +551,8 @@ static const u32 register_test_patterns[] = {  	writel((W & M), (adapter->hw.hw_addr + R));                           \  	val = readl(adapter->hw.hw_addr + R);                                 \  	if ((W & M) != (val & M)) {                                           \ -		printk(KERN_ERR "set/check reg %04X test failed: got 0x%08X " \ -				 "expected 0x%08X\n", R, (val & M), (W & M)); \ +		pr_err("set/check reg %04X test failed: got 0x%08X expected " \ +		       "0x%08X\n", R, (val & M), (W & M));                    \  		*data = R;                                                    \  		writel(before, (adapter->hw.hw_addr + R));                    \  		return 1;                                                     \ diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 4c8e19951d5..891162d1610 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c @@ -29,6 +29,9 @@  /******************************************************************************   Copyright (c)2006 - 2007 Myricom, Inc. for some LRO specific code  ******************************************************************************/ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/types.h>  #include <linux/bitops.h>  #include <linux/module.h> @@ -363,7 +366,7 @@ static void ixgbevf_alloc_rx_buffers(struct ixgbevf_adapter *adapter,  		if (!bi->page_dma &&  		    (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED)) {  			if (!bi->page) { -				bi->page = netdev_alloc_page(adapter->netdev); +				bi->page = alloc_page(GFP_ATOMIC | __GFP_COLD);  				if (!bi->page) {  					adapter->alloc_rx_page_failed++;  					goto no_buffers; @@ -1400,7 +1403,7 @@ static void ixgbevf_configure_rx(struct ixgbevf_adapter *adapter)  	}  } -static void ixgbevf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +static int ixgbevf_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  {  	struct ixgbevf_adapter *adapter = netdev_priv(netdev);  	struct ixgbe_hw *hw = &adapter->hw; @@ -1409,9 +1412,11 @@ static void ixgbevf_vlan_rx_add_vid(struct net_device *netdev, u16 vid)  	if (hw->mac.ops.set_vfta)  		hw->mac.ops.set_vfta(hw, vid, 0, true);  	set_bit(vid, adapter->active_vlans); + +	return 0;  } -static void ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) +static int ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  {  	struct ixgbevf_adapter *adapter = netdev_priv(netdev);  	struct ixgbe_hw *hw = &adapter->hw; @@ -1420,6 +1425,8 @@ static void ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)  	if (hw->mac.ops.set_vfta)  		hw->mac.ops.set_vfta(hw, vid, 0, false);  	clear_bit(vid, adapter->active_vlans); + +	return 0;  }  static void ixgbevf_restore_vlan(struct ixgbevf_adapter *adapter) @@ -1437,7 +1444,7 @@ static int ixgbevf_write_uc_addr_list(struct net_device *netdev)  	int count = 0;  	if ((netdev_uc_count(netdev)) > 10) { -		printk(KERN_ERR "Too many unicast filters - No Space\n"); +		pr_err("Too many unicast filters - No Space\n");  		return -ENOSPC;  	} @@ -2135,7 +2142,7 @@ static int ixgbevf_init_interrupt_scheme(struct ixgbevf_adapter *adapter)  	err = ixgbevf_alloc_queues(adapter);  	if (err) { -		printk(KERN_ERR "Unable to allocate memory for queues\n"); +		pr_err("Unable to allocate memory for queues\n");  		goto err_alloc_queues;  	} @@ -2189,7 +2196,7 @@ static int __devinit ixgbevf_sw_init(struct ixgbevf_adapter *adapter)  	} else {  		err = hw->mac.ops.init_hw(hw);  		if (err) { -			printk(KERN_ERR "init_shared_code failed: %d\n", err); +			pr_err("init_shared_code failed: %d\n", err);  			goto out;  		}  	} @@ -2630,8 +2637,8 @@ static int ixgbevf_open(struct net_device *netdev)  		 * the vf can't start. */  		if (hw->adapter_stopped) {  			err = IXGBE_ERR_MBX; -			printk(KERN_ERR "Unable to start - perhaps the PF" -			       " Driver isn't up yet\n"); +			pr_err("Unable to start - perhaps the PF Driver isn't " +			       "up yet\n");  			goto err_setup_reset;  		}  	} @@ -2842,10 +2849,8 @@ static bool ixgbevf_tx_csum(struct ixgbevf_adapter *adapter,  				break;  			default:  				if (unlikely(net_ratelimit())) { -					printk(KERN_WARNING -					       "partial checksum but " -					       "proto=%x!\n", -					       skb->protocol); +					pr_warn("partial checksum but " +						"proto=%x!\n", skb->protocol);  				}  				break;  			} @@ -3249,7 +3254,8 @@ static struct rtnl_link_stats64 *ixgbevf_get_stats(struct net_device *netdev,  	return stats;  } -static int ixgbevf_set_features(struct net_device *netdev, u32 features) +static int ixgbevf_set_features(struct net_device *netdev, +	netdev_features_t features)  {  	struct ixgbevf_adapter *adapter = netdev_priv(netdev); @@ -3414,7 +3420,7 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,  	memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len);  	if (!is_valid_ether_addr(netdev->dev_addr)) { -		printk(KERN_ERR "invalid MAC address\n"); +		pr_err("invalid MAC address\n");  		err = -EIO;  		goto err_sw_init;  	} @@ -3535,10 +3541,10 @@ static struct pci_driver ixgbevf_driver = {  static int __init ixgbevf_init_module(void)  {  	int ret; -	printk(KERN_INFO "ixgbevf: %s - version %s\n", ixgbevf_driver_string, -	       ixgbevf_driver_version); +	pr_info("%s - version %s\n", ixgbevf_driver_string, +		ixgbevf_driver_version); -	printk(KERN_INFO "%s\n", ixgbevf_copyright); +	pr_info("%s\n", ixgbevf_copyright);  	ret = pci_register_driver(&ixgbevf_driver);  	return ret; diff --git a/drivers/net/ethernet/intel/ixgbevf/mbx.h b/drivers/net/ethernet/intel/ixgbevf/mbx.h index ea393eb03f3..9d38a94a348 100644 --- a/drivers/net/ethernet/intel/ixgbevf/mbx.h +++ b/drivers/net/ethernet/intel/ixgbevf/mbx.h @@ -47,8 +47,8 @@  #define IXGBE_VFMAILBOX_RSTD     0x00000080 /* PF has indicated reset done */  #define IXGBE_VFMAILBOX_R2C_BITS 0x000000B0 /* All read to clear bits */ -#define IXGBE_PFMAILBOX(x)          (0x04B00 + (4 * x)) -#define IXGBE_PFMBMEM(vfn)          (0x13000 + (64 * vfn)) +#define IXGBE_PFMAILBOX(x)          (0x04B00 + (4 * (x))) +#define IXGBE_PFMBMEM(vfn)          (0x13000 + (64 * (vfn)))  #define IXGBE_PFMAILBOX_STS   0x00000001 /* Initiate message send to VF */  #define IXGBE_PFMAILBOX_ACK   0x00000002 /* Ack message recv'd from VF */ diff --git a/drivers/net/ethernet/intel/ixgbevf/regs.h b/drivers/net/ethernet/intel/ixgbevf/regs.h index 189200eeca2..5e4d5e5cdf3 100644 --- a/drivers/net/ethernet/intel/ixgbevf/regs.h +++ b/drivers/net/ethernet/intel/ixgbevf/regs.h @@ -39,29 +39,29 @@  #define IXGBE_VTEIMC           0x0010C  #define IXGBE_VTEIAC           0x00110  #define IXGBE_VTEIAM           0x00114 -#define IXGBE_VTEITR(x)        (0x00820 + (4 * x)) -#define IXGBE_VTIVAR(x)        (0x00120 + (4 * x)) +#define IXGBE_VTEITR(x)        (0x00820 + (4 * (x))) +#define IXGBE_VTIVAR(x)        (0x00120 + (4 * (x)))  #define IXGBE_VTIVAR_MISC      0x00140 -#define IXGBE_VTRSCINT(x)      (0x00180 + (4 * x)) -#define IXGBE_VFRDBAL(x)       (0x01000 + (0x40 * x)) -#define IXGBE_VFRDBAH(x)       (0x01004 + (0x40 * x)) -#define IXGBE_VFRDLEN(x)       (0x01008 + (0x40 * x)) -#define IXGBE_VFRDH(x)         (0x01010 + (0x40 * x)) -#define IXGBE_VFRDT(x)         (0x01018 + (0x40 * x)) -#define IXGBE_VFRXDCTL(x)      (0x01028 + (0x40 * x)) -#define IXGBE_VFSRRCTL(x)      (0x01014 + (0x40 * x)) -#define IXGBE_VFRSCCTL(x)      (0x0102C + (0x40 * x)) +#define IXGBE_VTRSCINT(x)      (0x00180 + (4 * (x))) +#define IXGBE_VFRDBAL(x)       (0x01000 + (0x40 * (x))) +#define IXGBE_VFRDBAH(x)       (0x01004 + (0x40 * (x))) +#define IXGBE_VFRDLEN(x)       (0x01008 + (0x40 * (x))) +#define IXGBE_VFRDH(x)         (0x01010 + (0x40 * (x))) +#define IXGBE_VFRDT(x)         (0x01018 + (0x40 * (x))) +#define IXGBE_VFRXDCTL(x)      (0x01028 + (0x40 * (x))) +#define IXGBE_VFSRRCTL(x)      (0x01014 + (0x40 * (x))) +#define IXGBE_VFRSCCTL(x)      (0x0102C + (0x40 * (x)))  #define IXGBE_VFPSRTYPE        0x00300 -#define IXGBE_VFTDBAL(x)       (0x02000 + (0x40 * x)) -#define IXGBE_VFTDBAH(x)       (0x02004 + (0x40 * x)) -#define IXGBE_VFTDLEN(x)       (0x02008 + (0x40 * x)) -#define IXGBE_VFTDH(x)         (0x02010 + (0x40 * x)) -#define IXGBE_VFTDT(x)         (0x02018 + (0x40 * x)) -#define IXGBE_VFTXDCTL(x)      (0x02028 + (0x40 * x)) -#define IXGBE_VFTDWBAL(x)      (0x02038 + (0x40 * x)) -#define IXGBE_VFTDWBAH(x)      (0x0203C + (0x40 * x)) -#define IXGBE_VFDCA_RXCTRL(x)  (0x0100C + (0x40 * x)) -#define IXGBE_VFDCA_TXCTRL(x)  (0x0200c + (0x40 * x)) +#define IXGBE_VFTDBAL(x)       (0x02000 + (0x40 * (x))) +#define IXGBE_VFTDBAH(x)       (0x02004 + (0x40 * (x))) +#define IXGBE_VFTDLEN(x)       (0x02008 + (0x40 * (x))) +#define IXGBE_VFTDH(x)         (0x02010 + (0x40 * (x))) +#define IXGBE_VFTDT(x)         (0x02018 + (0x40 * (x))) +#define IXGBE_VFTXDCTL(x)      (0x02028 + (0x40 * (x))) +#define IXGBE_VFTDWBAL(x)      (0x02038 + (0x40 * (x))) +#define IXGBE_VFTDWBAH(x)      (0x0203C + (0x40 * (x))) +#define IXGBE_VFDCA_RXCTRL(x)  (0x0100C + (0x40 * (x))) +#define IXGBE_VFDCA_TXCTRL(x)  (0x0200c + (0x40 * (x)))  #define IXGBE_VFGPRC           0x0101C  #define IXGBE_VFGPTC           0x0201C  #define IXGBE_VFGORC_LSB       0x01020 diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c index aa3682e8c47..21533e30036 100644 --- a/drivers/net/ethernet/intel/ixgbevf/vf.c +++ b/drivers/net/ethernet/intel/ixgbevf/vf.c @@ -108,7 +108,7 @@ static s32 ixgbevf_reset_hw_vf(struct ixgbe_hw *hw)  	if (msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK))  		return IXGBE_ERR_INVALID_MAC_ADDR; -	memcpy(hw->mac.perm_addr, addr, IXGBE_ETH_LENGTH_OF_ADDRESS); +	memcpy(hw->mac.perm_addr, addr, ETH_ALEN);  	hw->mac.mc_filter_type = msgbuf[IXGBE_VF_MC_TYPE_WORD];  	return 0; @@ -211,7 +211,7 @@ static s32 ixgbevf_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr)   **/  static s32 ixgbevf_get_mac_addr_vf(struct ixgbe_hw *hw, u8 *mac_addr)  { -	memcpy(mac_addr, hw->mac.perm_addr, IXGBE_ETH_LENGTH_OF_ADDRESS); +	memcpy(mac_addr, hw->mac.perm_addr, ETH_ALEN);  	return 0;  }  |