brintos

brintos / linux-shallow public Read only

0
0
Text · 145.1 KiB · ab7ae41 Raw
5311 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright(c) 1999 - 2006 Intel Corporation. */3 4#include "e1000.h"5#include <net/ip6_checksum.h>6#include <linux/io.h>7#include <linux/prefetch.h>8#include <linux/bitops.h>9#include <linux/if_vlan.h>10 11char e1000_driver_name[] = "e1000";12static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";13static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";14 15/* e1000_pci_tbl - PCI Device ID Table16 *17 * Last entry must be all 0s18 *19 * Macro expands to...20 *   {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}21 */22static const struct pci_device_id e1000_pci_tbl[] = {23	INTEL_E1000_ETHERNET_DEVICE(0x1000),24	INTEL_E1000_ETHERNET_DEVICE(0x1001),25	INTEL_E1000_ETHERNET_DEVICE(0x1004),26	INTEL_E1000_ETHERNET_DEVICE(0x1008),27	INTEL_E1000_ETHERNET_DEVICE(0x1009),28	INTEL_E1000_ETHERNET_DEVICE(0x100C),29	INTEL_E1000_ETHERNET_DEVICE(0x100D),30	INTEL_E1000_ETHERNET_DEVICE(0x100E),31	INTEL_E1000_ETHERNET_DEVICE(0x100F),32	INTEL_E1000_ETHERNET_DEVICE(0x1010),33	INTEL_E1000_ETHERNET_DEVICE(0x1011),34	INTEL_E1000_ETHERNET_DEVICE(0x1012),35	INTEL_E1000_ETHERNET_DEVICE(0x1013),36	INTEL_E1000_ETHERNET_DEVICE(0x1014),37	INTEL_E1000_ETHERNET_DEVICE(0x1015),38	INTEL_E1000_ETHERNET_DEVICE(0x1016),39	INTEL_E1000_ETHERNET_DEVICE(0x1017),40	INTEL_E1000_ETHERNET_DEVICE(0x1018),41	INTEL_E1000_ETHERNET_DEVICE(0x1019),42	INTEL_E1000_ETHERNET_DEVICE(0x101A),43	INTEL_E1000_ETHERNET_DEVICE(0x101D),44	INTEL_E1000_ETHERNET_DEVICE(0x101E),45	INTEL_E1000_ETHERNET_DEVICE(0x1026),46	INTEL_E1000_ETHERNET_DEVICE(0x1027),47	INTEL_E1000_ETHERNET_DEVICE(0x1028),48	INTEL_E1000_ETHERNET_DEVICE(0x1075),49	INTEL_E1000_ETHERNET_DEVICE(0x1076),50	INTEL_E1000_ETHERNET_DEVICE(0x1077),51	INTEL_E1000_ETHERNET_DEVICE(0x1078),52	INTEL_E1000_ETHERNET_DEVICE(0x1079),53	INTEL_E1000_ETHERNET_DEVICE(0x107A),54	INTEL_E1000_ETHERNET_DEVICE(0x107B),55	INTEL_E1000_ETHERNET_DEVICE(0x107C),56	INTEL_E1000_ETHERNET_DEVICE(0x108A),57	INTEL_E1000_ETHERNET_DEVICE(0x1099),58	INTEL_E1000_ETHERNET_DEVICE(0x10B5),59	INTEL_E1000_ETHERNET_DEVICE(0x2E6E),60	/* required last entry */61	{0,}62};63 64MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);65 66int e1000_up(struct e1000_adapter *adapter);67void e1000_down(struct e1000_adapter *adapter);68void e1000_reinit_locked(struct e1000_adapter *adapter);69void e1000_reset(struct e1000_adapter *adapter);70int e1000_setup_all_tx_resources(struct e1000_adapter *adapter);71int e1000_setup_all_rx_resources(struct e1000_adapter *adapter);72void e1000_free_all_tx_resources(struct e1000_adapter *adapter);73void e1000_free_all_rx_resources(struct e1000_adapter *adapter);74static int e1000_setup_tx_resources(struct e1000_adapter *adapter,75				    struct e1000_tx_ring *txdr);76static int e1000_setup_rx_resources(struct e1000_adapter *adapter,77				    struct e1000_rx_ring *rxdr);78static void e1000_free_tx_resources(struct e1000_adapter *adapter,79				    struct e1000_tx_ring *tx_ring);80static void e1000_free_rx_resources(struct e1000_adapter *adapter,81				    struct e1000_rx_ring *rx_ring);82void e1000_update_stats(struct e1000_adapter *adapter);83 84static int e1000_init_module(void);85static void e1000_exit_module(void);86static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent);87static void e1000_remove(struct pci_dev *pdev);88static int e1000_alloc_queues(struct e1000_adapter *adapter);89static int e1000_sw_init(struct e1000_adapter *adapter);90int e1000_open(struct net_device *netdev);91int e1000_close(struct net_device *netdev);92static void e1000_configure_tx(struct e1000_adapter *adapter);93static void e1000_configure_rx(struct e1000_adapter *adapter);94static void e1000_setup_rctl(struct e1000_adapter *adapter);95static void e1000_clean_all_tx_rings(struct e1000_adapter *adapter);96static void e1000_clean_all_rx_rings(struct e1000_adapter *adapter);97static void e1000_clean_tx_ring(struct e1000_adapter *adapter,98				struct e1000_tx_ring *tx_ring);99static void e1000_clean_rx_ring(struct e1000_adapter *adapter,100				struct e1000_rx_ring *rx_ring);101static void e1000_set_rx_mode(struct net_device *netdev);102static void e1000_update_phy_info_task(struct work_struct *work);103static void e1000_watchdog(struct work_struct *work);104static void e1000_82547_tx_fifo_stall_task(struct work_struct *work);105static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,106				    struct net_device *netdev);107static int e1000_change_mtu(struct net_device *netdev, int new_mtu);108static int e1000_set_mac(struct net_device *netdev, void *p);109static irqreturn_t e1000_intr(int irq, void *data);110static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,111			       struct e1000_tx_ring *tx_ring);112static int e1000_clean(struct napi_struct *napi, int budget);113static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,114			       struct e1000_rx_ring *rx_ring,115			       int *work_done, int work_to_do);116static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,117				     struct e1000_rx_ring *rx_ring,118				     int *work_done, int work_to_do);119static void e1000_alloc_dummy_rx_buffers(struct e1000_adapter *adapter,120					 struct e1000_rx_ring *rx_ring,121					 int cleaned_count)122{123}124static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,125				   struct e1000_rx_ring *rx_ring,126				   int cleaned_count);127static void e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,128					 struct e1000_rx_ring *rx_ring,129					 int cleaned_count);130static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);131static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,132			   int cmd);133static void e1000_enter_82542_rst(struct e1000_adapter *adapter);134static void e1000_leave_82542_rst(struct e1000_adapter *adapter);135static void e1000_tx_timeout(struct net_device *dev, unsigned int txqueue);136static void e1000_reset_task(struct work_struct *work);137static void e1000_smartspeed(struct e1000_adapter *adapter);138static int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,139				       struct sk_buff *skb);140 141static bool e1000_vlan_used(struct e1000_adapter *adapter);142static void e1000_vlan_mode(struct net_device *netdev,143			    netdev_features_t features);144static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter,145				     bool filter_on);146static int e1000_vlan_rx_add_vid(struct net_device *netdev,147				 __be16 proto, u16 vid);148static int e1000_vlan_rx_kill_vid(struct net_device *netdev,149				  __be16 proto, u16 vid);150static void e1000_restore_vlan(struct e1000_adapter *adapter);151 152static int e1000_suspend(struct device *dev);153static int e1000_resume(struct device *dev);154static void e1000_shutdown(struct pci_dev *pdev);155 156#ifdef CONFIG_NET_POLL_CONTROLLER157/* for netdump / net console */158static void e1000_netpoll (struct net_device *netdev);159#endif160 161#define COPYBREAK_DEFAULT 256162static unsigned int copybreak __read_mostly = COPYBREAK_DEFAULT;163module_param(copybreak, uint, 0644);164MODULE_PARM_DESC(copybreak,165	"Maximum size of packet that is copied to a new buffer on receive");166 167static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,168						pci_channel_state_t state);169static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev);170static void e1000_io_resume(struct pci_dev *pdev);171 172static const struct pci_error_handlers e1000_err_handler = {173	.error_detected = e1000_io_error_detected,174	.slot_reset = e1000_io_slot_reset,175	.resume = e1000_io_resume,176};177 178static DEFINE_SIMPLE_DEV_PM_OPS(e1000_pm_ops, e1000_suspend, e1000_resume);179 180static struct pci_driver e1000_driver = {181	.name     = e1000_driver_name,182	.id_table = e1000_pci_tbl,183	.probe    = e1000_probe,184	.remove   = e1000_remove,185	.driver.pm = pm_sleep_ptr(&e1000_pm_ops),186	.shutdown = e1000_shutdown,187	.err_handler = &e1000_err_handler188};189 190MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");191MODULE_LICENSE("GPL v2");192 193#define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)194static int debug = -1;195module_param(debug, int, 0);196MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");197 198/**199 * e1000_get_hw_dev - helper function for getting netdev200 * @hw: pointer to HW struct201 *202 * return device used by hardware layer to print debugging information203 *204 **/205struct net_device *e1000_get_hw_dev(struct e1000_hw *hw)206{207	struct e1000_adapter *adapter = hw->back;208	return adapter->netdev;209}210 211/**212 * e1000_init_module - Driver Registration Routine213 *214 * e1000_init_module is the first routine called when the driver is215 * loaded. All it does is register with the PCI subsystem.216 **/217static int __init e1000_init_module(void)218{219	int ret;220	pr_info("%s\n", e1000_driver_string);221 222	pr_info("%s\n", e1000_copyright);223 224	ret = pci_register_driver(&e1000_driver);225	if (copybreak != COPYBREAK_DEFAULT) {226		if (copybreak == 0)227			pr_info("copybreak disabled\n");228		else229			pr_info("copybreak enabled for "230				   "packets <= %u bytes\n", copybreak);231	}232	return ret;233}234 235module_init(e1000_init_module);236 237/**238 * e1000_exit_module - Driver Exit Cleanup Routine239 *240 * e1000_exit_module is called just before the driver is removed241 * from memory.242 **/243static void __exit e1000_exit_module(void)244{245	pci_unregister_driver(&e1000_driver);246}247 248module_exit(e1000_exit_module);249 250static int e1000_request_irq(struct e1000_adapter *adapter)251{252	struct net_device *netdev = adapter->netdev;253	irq_handler_t handler = e1000_intr;254	int irq_flags = IRQF_SHARED;255	int err;256 257	err = request_irq(adapter->pdev->irq, handler, irq_flags, netdev->name,258			  netdev);259	if (err) {260		e_err(probe, "Unable to allocate interrupt Error: %d\n", err);261	}262 263	return err;264}265 266static void e1000_free_irq(struct e1000_adapter *adapter)267{268	struct net_device *netdev = adapter->netdev;269 270	free_irq(adapter->pdev->irq, netdev);271}272 273/**274 * e1000_irq_disable - Mask off interrupt generation on the NIC275 * @adapter: board private structure276 **/277static void e1000_irq_disable(struct e1000_adapter *adapter)278{279	struct e1000_hw *hw = &adapter->hw;280 281	ew32(IMC, ~0);282	E1000_WRITE_FLUSH();283	synchronize_irq(adapter->pdev->irq);284}285 286/**287 * e1000_irq_enable - Enable default interrupt generation settings288 * @adapter: board private structure289 **/290static void e1000_irq_enable(struct e1000_adapter *adapter)291{292	struct e1000_hw *hw = &adapter->hw;293 294	ew32(IMS, IMS_ENABLE_MASK);295	E1000_WRITE_FLUSH();296}297 298static void e1000_update_mng_vlan(struct e1000_adapter *adapter)299{300	struct e1000_hw *hw = &adapter->hw;301	struct net_device *netdev = adapter->netdev;302	u16 vid = hw->mng_cookie.vlan_id;303	u16 old_vid = adapter->mng_vlan_id;304 305	if (!e1000_vlan_used(adapter))306		return;307 308	if (!test_bit(vid, adapter->active_vlans)) {309		if (hw->mng_cookie.status &310		    E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) {311			e1000_vlan_rx_add_vid(netdev, htons(ETH_P_8021Q), vid);312			adapter->mng_vlan_id = vid;313		} else {314			adapter->mng_vlan_id = E1000_MNG_VLAN_NONE;315		}316		if ((old_vid != (u16)E1000_MNG_VLAN_NONE) &&317		    (vid != old_vid) &&318		    !test_bit(old_vid, adapter->active_vlans))319			e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q),320					       old_vid);321	} else {322		adapter->mng_vlan_id = vid;323	}324}325 326static void e1000_init_manageability(struct e1000_adapter *adapter)327{328	struct e1000_hw *hw = &adapter->hw;329 330	if (adapter->en_mng_pt) {331		u32 manc = er32(MANC);332 333		/* disable hardware interception of ARP */334		manc &= ~(E1000_MANC_ARP_EN);335 336		ew32(MANC, manc);337	}338}339 340static void e1000_release_manageability(struct e1000_adapter *adapter)341{342	struct e1000_hw *hw = &adapter->hw;343 344	if (adapter->en_mng_pt) {345		u32 manc = er32(MANC);346 347		/* re-enable hardware interception of ARP */348		manc |= E1000_MANC_ARP_EN;349 350		ew32(MANC, manc);351	}352}353 354/**355 * e1000_configure - configure the hardware for RX and TX356 * @adapter: private board structure357 **/358static void e1000_configure(struct e1000_adapter *adapter)359{360	struct net_device *netdev = adapter->netdev;361	int i;362 363	e1000_set_rx_mode(netdev);364 365	e1000_restore_vlan(adapter);366	e1000_init_manageability(adapter);367 368	e1000_configure_tx(adapter);369	e1000_setup_rctl(adapter);370	e1000_configure_rx(adapter);371	/* call E1000_DESC_UNUSED which always leaves372	 * at least 1 descriptor unused to make sure373	 * next_to_use != next_to_clean374	 */375	for (i = 0; i < adapter->num_rx_queues; i++) {376		struct e1000_rx_ring *ring = &adapter->rx_ring[i];377		adapter->alloc_rx_buf(adapter, ring,378				      E1000_DESC_UNUSED(ring));379	}380}381 382int e1000_up(struct e1000_adapter *adapter)383{384	struct e1000_hw *hw = &adapter->hw;385 386	/* hardware has been reset, we need to reload some things */387	e1000_configure(adapter);388 389	clear_bit(__E1000_DOWN, &adapter->flags);390 391	napi_enable(&adapter->napi);392 393	e1000_irq_enable(adapter);394 395	netif_wake_queue(adapter->netdev);396 397	/* fire a link change interrupt to start the watchdog */398	ew32(ICS, E1000_ICS_LSC);399	return 0;400}401 402/**403 * e1000_power_up_phy - restore link in case the phy was powered down404 * @adapter: address of board private structure405 *406 * The phy may be powered down to save power and turn off link when the407 * driver is unloaded and wake on lan is not enabled (among others)408 * *** this routine MUST be followed by a call to e1000_reset ***409 **/410void e1000_power_up_phy(struct e1000_adapter *adapter)411{412	struct e1000_hw *hw = &adapter->hw;413	u16 mii_reg = 0;414 415	/* Just clear the power down bit to wake the phy back up */416	if (hw->media_type == e1000_media_type_copper) {417		/* according to the manual, the phy will retain its418		 * settings across a power-down/up cycle419		 */420		e1000_read_phy_reg(hw, PHY_CTRL, &mii_reg);421		mii_reg &= ~MII_CR_POWER_DOWN;422		e1000_write_phy_reg(hw, PHY_CTRL, mii_reg);423	}424}425 426static void e1000_power_down_phy(struct e1000_adapter *adapter)427{428	struct e1000_hw *hw = &adapter->hw;429 430	/* Power down the PHY so no link is implied when interface is down *431	 * The PHY cannot be powered down if any of the following is true *432	 * (a) WoL is enabled433	 * (b) AMT is active434	 * (c) SoL/IDER session is active435	 */436	if (!adapter->wol && hw->mac_type >= e1000_82540 &&437	   hw->media_type == e1000_media_type_copper) {438		u16 mii_reg = 0;439 440		switch (hw->mac_type) {441		case e1000_82540:442		case e1000_82545:443		case e1000_82545_rev_3:444		case e1000_82546:445		case e1000_ce4100:446		case e1000_82546_rev_3:447		case e1000_82541:448		case e1000_82541_rev_2:449		case e1000_82547:450		case e1000_82547_rev_2:451			if (er32(MANC) & E1000_MANC_SMBUS_EN)452				goto out;453			break;454		default:455			goto out;456		}457		e1000_read_phy_reg(hw, PHY_CTRL, &mii_reg);458		mii_reg |= MII_CR_POWER_DOWN;459		e1000_write_phy_reg(hw, PHY_CTRL, mii_reg);460		msleep(1);461	}462out:463	return;464}465 466static void e1000_down_and_stop(struct e1000_adapter *adapter)467{468	set_bit(__E1000_DOWN, &adapter->flags);469 470	cancel_delayed_work_sync(&adapter->watchdog_task);471 472	/*473	 * Since the watchdog task can reschedule other tasks, we should cancel474	 * it first, otherwise we can run into the situation when a work is475	 * still running after the adapter has been turned down.476	 */477 478	cancel_delayed_work_sync(&adapter->phy_info_task);479	cancel_delayed_work_sync(&adapter->fifo_stall_task);480 481	/* Only kill reset task if adapter is not resetting */482	if (!test_bit(__E1000_RESETTING, &adapter->flags))483		cancel_work_sync(&adapter->reset_task);484}485 486void e1000_down(struct e1000_adapter *adapter)487{488	struct e1000_hw *hw = &adapter->hw;489	struct net_device *netdev = adapter->netdev;490	u32 rctl, tctl;491 492	/* disable receives in the hardware */493	rctl = er32(RCTL);494	ew32(RCTL, rctl & ~E1000_RCTL_EN);495	/* flush and sleep below */496 497	netif_tx_disable(netdev);498 499	/* disable transmits in the hardware */500	tctl = er32(TCTL);501	tctl &= ~E1000_TCTL_EN;502	ew32(TCTL, tctl);503	/* flush both disables and wait for them to finish */504	E1000_WRITE_FLUSH();505	msleep(10);506 507	/* Set the carrier off after transmits have been disabled in the508	 * hardware, to avoid race conditions with e1000_watchdog() (which509	 * may be running concurrently to us, checking for the carrier510	 * bit to decide whether it should enable transmits again). Such511	 * a race condition would result into transmission being disabled512	 * in the hardware until the next IFF_DOWN+IFF_UP cycle.513	 */514	netif_carrier_off(netdev);515 516	napi_disable(&adapter->napi);517 518	e1000_irq_disable(adapter);519 520	/* Setting DOWN must be after irq_disable to prevent521	 * a screaming interrupt.  Setting DOWN also prevents522	 * tasks from rescheduling.523	 */524	e1000_down_and_stop(adapter);525 526	adapter->link_speed = 0;527	adapter->link_duplex = 0;528 529	e1000_reset(adapter);530	e1000_clean_all_tx_rings(adapter);531	e1000_clean_all_rx_rings(adapter);532}533 534void e1000_reinit_locked(struct e1000_adapter *adapter)535{536	while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))537		msleep(1);538 539	/* only run the task if not already down */540	if (!test_bit(__E1000_DOWN, &adapter->flags)) {541		e1000_down(adapter);542		e1000_up(adapter);543	}544 545	clear_bit(__E1000_RESETTING, &adapter->flags);546}547 548void e1000_reset(struct e1000_adapter *adapter)549{550	struct e1000_hw *hw = &adapter->hw;551	u32 pba = 0, tx_space, min_tx_space, min_rx_space;552	bool legacy_pba_adjust = false;553	u16 hwm;554 555	/* Repartition Pba for greater than 9k mtu556	 * To take effect CTRL.RST is required.557	 */558 559	switch (hw->mac_type) {560	case e1000_82542_rev2_0:561	case e1000_82542_rev2_1:562	case e1000_82543:563	case e1000_82544:564	case e1000_82540:565	case e1000_82541:566	case e1000_82541_rev_2:567		legacy_pba_adjust = true;568		pba = E1000_PBA_48K;569		break;570	case e1000_82545:571	case e1000_82545_rev_3:572	case e1000_82546:573	case e1000_ce4100:574	case e1000_82546_rev_3:575		pba = E1000_PBA_48K;576		break;577	case e1000_82547:578	case e1000_82547_rev_2:579		legacy_pba_adjust = true;580		pba = E1000_PBA_30K;581		break;582	case e1000_undefined:583	case e1000_num_macs:584		break;585	}586 587	if (legacy_pba_adjust) {588		if (hw->max_frame_size > E1000_RXBUFFER_8192)589			pba -= 8; /* allocate more FIFO for Tx */590 591		if (hw->mac_type == e1000_82547) {592			adapter->tx_fifo_head = 0;593			adapter->tx_head_addr = pba << E1000_TX_HEAD_ADDR_SHIFT;594			adapter->tx_fifo_size =595				(E1000_PBA_40K - pba) << E1000_PBA_BYTES_SHIFT;596			atomic_set(&adapter->tx_fifo_stall, 0);597		}598	} else if (hw->max_frame_size >  ETH_FRAME_LEN + ETH_FCS_LEN) {599		/* adjust PBA for jumbo frames */600		ew32(PBA, pba);601 602		/* To maintain wire speed transmits, the Tx FIFO should be603		 * large enough to accommodate two full transmit packets,604		 * rounded up to the next 1KB and expressed in KB.  Likewise,605		 * the Rx FIFO should be large enough to accommodate at least606		 * one full receive packet and is similarly rounded up and607		 * expressed in KB.608		 */609		pba = er32(PBA);610		/* upper 16 bits has Tx packet buffer allocation size in KB */611		tx_space = pba >> 16;612		/* lower 16 bits has Rx packet buffer allocation size in KB */613		pba &= 0xffff;614		/* the Tx fifo also stores 16 bytes of information about the Tx615		 * but don't include ethernet FCS because hardware appends it616		 */617		min_tx_space = (hw->max_frame_size +618				sizeof(struct e1000_tx_desc) -619				ETH_FCS_LEN) * 2;620		min_tx_space = ALIGN(min_tx_space, 1024);621		min_tx_space >>= 10;622		/* software strips receive CRC, so leave room for it */623		min_rx_space = hw->max_frame_size;624		min_rx_space = ALIGN(min_rx_space, 1024);625		min_rx_space >>= 10;626 627		/* If current Tx allocation is less than the min Tx FIFO size,628		 * and the min Tx FIFO size is less than the current Rx FIFO629		 * allocation, take space away from current Rx allocation630		 */631		if (tx_space < min_tx_space &&632		    ((min_tx_space - tx_space) < pba)) {633			pba = pba - (min_tx_space - tx_space);634 635			/* PCI/PCIx hardware has PBA alignment constraints */636			switch (hw->mac_type) {637			case e1000_82545 ... e1000_82546_rev_3:638				pba &= ~(E1000_PBA_8K - 1);639				break;640			default:641				break;642			}643 644			/* if short on Rx space, Rx wins and must trump Tx645			 * adjustment or use Early Receive if available646			 */647			if (pba < min_rx_space)648				pba = min_rx_space;649		}650	}651 652	ew32(PBA, pba);653 654	/* flow control settings:655	 * The high water mark must be low enough to fit one full frame656	 * (or the size used for early receive) above it in the Rx FIFO.657	 * Set it to the lower of:658	 * - 90% of the Rx FIFO size, and659	 * - the full Rx FIFO size minus the early receive size (for parts660	 *   with ERT support assuming ERT set to E1000_ERT_2048), or661	 * - the full Rx FIFO size minus one full frame662	 */663	hwm = min(((pba << 10) * 9 / 10),664		  ((pba << 10) - hw->max_frame_size));665 666	hw->fc_high_water = hwm & 0xFFF8;	/* 8-byte granularity */667	hw->fc_low_water = hw->fc_high_water - 8;668	hw->fc_pause_time = E1000_FC_PAUSE_TIME;669	hw->fc_send_xon = 1;670	hw->fc = hw->original_fc;671 672	/* Allow time for pending master requests to run */673	e1000_reset_hw(hw);674	if (hw->mac_type >= e1000_82544)675		ew32(WUC, 0);676 677	if (e1000_init_hw(hw))678		e_dev_err("Hardware Error\n");679	e1000_update_mng_vlan(adapter);680 681	/* if (adapter->hwflags & HWFLAGS_PHY_PWR_BIT) { */682	if (hw->mac_type >= e1000_82544 &&683	    hw->autoneg == 1 &&684	    hw->autoneg_advertised == ADVERTISE_1000_FULL) {685		u32 ctrl = er32(CTRL);686		/* clear phy power management bit if we are in gig only mode,687		 * which if enabled will attempt negotiation to 100Mb, which688		 * can cause a loss of link at power off or driver unload689		 */690		ctrl &= ~E1000_CTRL_SWDPIN3;691		ew32(CTRL, ctrl);692	}693 694	/* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */695	ew32(VET, ETHERNET_IEEE_VLAN_TYPE);696 697	e1000_reset_adaptive(hw);698	e1000_phy_get_info(hw, &adapter->phy_info);699 700	e1000_release_manageability(adapter);701}702 703/* Dump the eeprom for users having checksum issues */704static void e1000_dump_eeprom(struct e1000_adapter *adapter)705{706	struct net_device *netdev = adapter->netdev;707	struct ethtool_eeprom eeprom;708	const struct ethtool_ops *ops = netdev->ethtool_ops;709	u8 *data;710	int i;711	u16 csum_old, csum_new = 0;712 713	eeprom.len = ops->get_eeprom_len(netdev);714	eeprom.offset = 0;715 716	data = kmalloc(eeprom.len, GFP_KERNEL);717	if (!data)718		return;719 720	ops->get_eeprom(netdev, &eeprom, data);721 722	csum_old = (data[EEPROM_CHECKSUM_REG * 2]) +723		   (data[EEPROM_CHECKSUM_REG * 2 + 1] << 8);724	for (i = 0; i < EEPROM_CHECKSUM_REG * 2; i += 2)725		csum_new += data[i] + (data[i + 1] << 8);726	csum_new = EEPROM_SUM - csum_new;727 728	pr_err("/*********************/\n");729	pr_err("Current EEPROM Checksum : 0x%04x\n", csum_old);730	pr_err("Calculated              : 0x%04x\n", csum_new);731 732	pr_err("Offset    Values\n");733	pr_err("========  ======\n");734	print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 16, 1, data, 128, 0);735 736	pr_err("Include this output when contacting your support provider.\n");737	pr_err("This is not a software error! Something bad happened to\n");738	pr_err("your hardware or EEPROM image. Ignoring this problem could\n");739	pr_err("result in further problems, possibly loss of data,\n");740	pr_err("corruption or system hangs!\n");741	pr_err("The MAC Address will be reset to 00:00:00:00:00:00,\n");742	pr_err("which is invalid and requires you to set the proper MAC\n");743	pr_err("address manually before continuing to enable this network\n");744	pr_err("device. Please inspect the EEPROM dump and report the\n");745	pr_err("issue to your hardware vendor or Intel Customer Support.\n");746	pr_err("/*********************/\n");747 748	kfree(data);749}750 751/**752 * e1000_is_need_ioport - determine if an adapter needs ioport resources or not753 * @pdev: PCI device information struct754 *755 * Return true if an adapter needs ioport resources756 **/757static int e1000_is_need_ioport(struct pci_dev *pdev)758{759	switch (pdev->device) {760	case E1000_DEV_ID_82540EM:761	case E1000_DEV_ID_82540EM_LOM:762	case E1000_DEV_ID_82540EP:763	case E1000_DEV_ID_82540EP_LOM:764	case E1000_DEV_ID_82540EP_LP:765	case E1000_DEV_ID_82541EI:766	case E1000_DEV_ID_82541EI_MOBILE:767	case E1000_DEV_ID_82541ER:768	case E1000_DEV_ID_82541ER_LOM:769	case E1000_DEV_ID_82541GI:770	case E1000_DEV_ID_82541GI_LF:771	case E1000_DEV_ID_82541GI_MOBILE:772	case E1000_DEV_ID_82544EI_COPPER:773	case E1000_DEV_ID_82544EI_FIBER:774	case E1000_DEV_ID_82544GC_COPPER:775	case E1000_DEV_ID_82544GC_LOM:776	case E1000_DEV_ID_82545EM_COPPER:777	case E1000_DEV_ID_82545EM_FIBER:778	case E1000_DEV_ID_82546EB_COPPER:779	case E1000_DEV_ID_82546EB_FIBER:780	case E1000_DEV_ID_82546EB_QUAD_COPPER:781		return true;782	default:783		return false;784	}785}786 787static netdev_features_t e1000_fix_features(struct net_device *netdev,788	netdev_features_t features)789{790	/* Since there is no support for separate Rx/Tx vlan accel791	 * enable/disable make sure Tx flag is always in same state as Rx.792	 */793	if (features & NETIF_F_HW_VLAN_CTAG_RX)794		features |= NETIF_F_HW_VLAN_CTAG_TX;795	else796		features &= ~NETIF_F_HW_VLAN_CTAG_TX;797 798	return features;799}800 801static int e1000_set_features(struct net_device *netdev,802	netdev_features_t features)803{804	struct e1000_adapter *adapter = netdev_priv(netdev);805	netdev_features_t changed = features ^ netdev->features;806 807	if (changed & NETIF_F_HW_VLAN_CTAG_RX)808		e1000_vlan_mode(netdev, features);809 810	if (!(changed & (NETIF_F_RXCSUM | NETIF_F_RXALL)))811		return 0;812 813	netdev->features = features;814	adapter->rx_csum = !!(features & NETIF_F_RXCSUM);815 816	if (netif_running(netdev))817		e1000_reinit_locked(adapter);818	else819		e1000_reset(adapter);820 821	return 1;822}823 824static const struct net_device_ops e1000_netdev_ops = {825	.ndo_open		= e1000_open,826	.ndo_stop		= e1000_close,827	.ndo_start_xmit		= e1000_xmit_frame,828	.ndo_set_rx_mode	= e1000_set_rx_mode,829	.ndo_set_mac_address	= e1000_set_mac,830	.ndo_tx_timeout		= e1000_tx_timeout,831	.ndo_change_mtu		= e1000_change_mtu,832	.ndo_eth_ioctl		= e1000_ioctl,833	.ndo_validate_addr	= eth_validate_addr,834	.ndo_vlan_rx_add_vid	= e1000_vlan_rx_add_vid,835	.ndo_vlan_rx_kill_vid	= e1000_vlan_rx_kill_vid,836#ifdef CONFIG_NET_POLL_CONTROLLER837	.ndo_poll_controller	= e1000_netpoll,838#endif839	.ndo_fix_features	= e1000_fix_features,840	.ndo_set_features	= e1000_set_features,841};842 843/**844 * e1000_init_hw_struct - initialize members of hw struct845 * @adapter: board private struct846 * @hw: structure used by e1000_hw.c847 *848 * Factors out initialization of the e1000_hw struct to its own function849 * that can be called very early at init (just after struct allocation).850 * Fields are initialized based on PCI device information and851 * OS network device settings (MTU size).852 * Returns negative error codes if MAC type setup fails.853 */854static int e1000_init_hw_struct(struct e1000_adapter *adapter,855				struct e1000_hw *hw)856{857	struct pci_dev *pdev = adapter->pdev;858 859	/* PCI config space info */860	hw->vendor_id = pdev->vendor;861	hw->device_id = pdev->device;862	hw->subsystem_vendor_id = pdev->subsystem_vendor;863	hw->subsystem_id = pdev->subsystem_device;864	hw->revision_id = pdev->revision;865 866	pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);867 868	hw->max_frame_size = adapter->netdev->mtu +869			     ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;870	hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;871 872	/* identify the MAC */873	if (e1000_set_mac_type(hw)) {874		e_err(probe, "Unknown MAC Type\n");875		return -EIO;876	}877 878	switch (hw->mac_type) {879	default:880		break;881	case e1000_82541:882	case e1000_82547:883	case e1000_82541_rev_2:884	case e1000_82547_rev_2:885		hw->phy_init_script = 1;886		break;887	}888 889	e1000_set_media_type(hw);890	e1000_get_bus_info(hw);891 892	hw->wait_autoneg_complete = false;893	hw->tbi_compatibility_en = true;894	hw->adaptive_ifs = true;895 896	/* Copper options */897 898	if (hw->media_type == e1000_media_type_copper) {899		hw->mdix = AUTO_ALL_MODES;900		hw->disable_polarity_correction = false;901		hw->master_slave = E1000_MASTER_SLAVE;902	}903 904	return 0;905}906 907/**908 * e1000_probe - Device Initialization Routine909 * @pdev: PCI device information struct910 * @ent: entry in e1000_pci_tbl911 *912 * Returns 0 on success, negative on failure913 *914 * e1000_probe initializes an adapter identified by a pci_dev structure.915 * The OS initialization, configuring of the adapter private structure,916 * and a hardware reset occur.917 **/918static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)919{920	struct net_device *netdev;921	struct e1000_adapter *adapter = NULL;922	struct e1000_hw *hw;923 924	static int cards_found;925	static int global_quad_port_a; /* global ksp3 port a indication */926	int i, err, pci_using_dac;927	u16 eeprom_data = 0;928	u16 tmp = 0;929	u16 eeprom_apme_mask = E1000_EEPROM_APME;930	int bars, need_ioport;931	bool disable_dev = false;932 933	/* do not allocate ioport bars when not needed */934	need_ioport = e1000_is_need_ioport(pdev);935	if (need_ioport) {936		bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO);937		err = pci_enable_device(pdev);938	} else {939		bars = pci_select_bars(pdev, IORESOURCE_MEM);940		err = pci_enable_device_mem(pdev);941	}942	if (err)943		return err;944 945	err = pci_request_selected_regions(pdev, bars, e1000_driver_name);946	if (err)947		goto err_pci_reg;948 949	pci_set_master(pdev);950	err = pci_save_state(pdev);951	if (err)952		goto err_alloc_etherdev;953 954	err = -ENOMEM;955	netdev = alloc_etherdev(sizeof(struct e1000_adapter));956	if (!netdev)957		goto err_alloc_etherdev;958 959	SET_NETDEV_DEV(netdev, &pdev->dev);960 961	pci_set_drvdata(pdev, netdev);962	adapter = netdev_priv(netdev);963	adapter->netdev = netdev;964	adapter->pdev = pdev;965	adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);966	adapter->bars = bars;967	adapter->need_ioport = need_ioport;968 969	hw = &adapter->hw;970	hw->back = adapter;971 972	err = -EIO;973	hw->hw_addr = pci_ioremap_bar(pdev, BAR_0);974	if (!hw->hw_addr)975		goto err_ioremap;976 977	if (adapter->need_ioport) {978		for (i = BAR_1; i < PCI_STD_NUM_BARS; i++) {979			if (pci_resource_len(pdev, i) == 0)980				continue;981			if (pci_resource_flags(pdev, i) & IORESOURCE_IO) {982				hw->io_base = pci_resource_start(pdev, i);983				break;984			}985		}986	}987 988	/* make ready for any if (hw->...) below */989	err = e1000_init_hw_struct(adapter, hw);990	if (err)991		goto err_sw_init;992 993	/* there is a workaround being applied below that limits994	 * 64-bit DMA addresses to 64-bit hardware.  There are some995	 * 32-bit adapters that Tx hang when given 64-bit DMA addresses996	 */997	pci_using_dac = 0;998	if ((hw->bus_type == e1000_bus_type_pcix) &&999	    !dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64))) {1000		pci_using_dac = 1;1001	} else {1002		err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));1003		if (err) {1004			pr_err("No usable DMA config, aborting\n");1005			goto err_dma;1006		}1007	}1008 1009	netdev->netdev_ops = &e1000_netdev_ops;1010	e1000_set_ethtool_ops(netdev);1011	netdev->watchdog_timeo = 5 * HZ;1012	netif_napi_add(netdev, &adapter->napi, e1000_clean);1013 1014	strscpy(netdev->name, pci_name(pdev), sizeof(netdev->name));1015 1016	adapter->bd_number = cards_found;1017 1018	/* setup the private structure */1019 1020	err = e1000_sw_init(adapter);1021	if (err)1022		goto err_sw_init;1023 1024	err = -EIO;1025	if (hw->mac_type == e1000_ce4100) {1026		hw->ce4100_gbe_mdio_base_virt =1027					ioremap(pci_resource_start(pdev, BAR_1),1028						pci_resource_len(pdev, BAR_1));1029 1030		if (!hw->ce4100_gbe_mdio_base_virt)1031			goto err_mdio_ioremap;1032	}1033 1034	if (hw->mac_type >= e1000_82543) {1035		netdev->hw_features = NETIF_F_SG |1036				   NETIF_F_HW_CSUM |1037				   NETIF_F_HW_VLAN_CTAG_RX;1038		netdev->features = NETIF_F_HW_VLAN_CTAG_TX |1039				   NETIF_F_HW_VLAN_CTAG_FILTER;1040	}1041 1042	if ((hw->mac_type >= e1000_82544) &&1043	   (hw->mac_type != e1000_82547))1044		netdev->hw_features |= NETIF_F_TSO;1045 1046	netdev->priv_flags |= IFF_SUPP_NOFCS;1047 1048	netdev->features |= netdev->hw_features;1049	netdev->hw_features |= (NETIF_F_RXCSUM |1050				NETIF_F_RXALL |1051				NETIF_F_RXFCS);1052 1053	if (pci_using_dac) {1054		netdev->features |= NETIF_F_HIGHDMA;1055		netdev->vlan_features |= NETIF_F_HIGHDMA;1056	}1057 1058	netdev->vlan_features |= (NETIF_F_TSO |1059				  NETIF_F_HW_CSUM |1060				  NETIF_F_SG);1061 1062	/* Do not set IFF_UNICAST_FLT for VMWare's 82545EM */1063	if (hw->device_id != E1000_DEV_ID_82545EM_COPPER ||1064	    hw->subsystem_vendor_id != PCI_VENDOR_ID_VMWARE)1065		netdev->priv_flags |= IFF_UNICAST_FLT;1066 1067	/* MTU range: 46 - 16110 */1068	netdev->min_mtu = ETH_ZLEN - ETH_HLEN;1069	netdev->max_mtu = MAX_JUMBO_FRAME_SIZE - (ETH_HLEN + ETH_FCS_LEN);1070 1071	adapter->en_mng_pt = e1000_enable_mng_pass_thru(hw);1072 1073	/* initialize eeprom parameters */1074	if (e1000_init_eeprom_params(hw)) {1075		e_err(probe, "EEPROM initialization failed\n");1076		goto err_eeprom;1077	}1078 1079	/* before reading the EEPROM, reset the controller to1080	 * put the device in a known good starting state1081	 */1082 1083	e1000_reset_hw(hw);1084 1085	/* make sure the EEPROM is good */1086	if (e1000_validate_eeprom_checksum(hw) < 0) {1087		e_err(probe, "The EEPROM Checksum Is Not Valid\n");1088		e1000_dump_eeprom(adapter);1089		/* set MAC address to all zeroes to invalidate and temporary1090		 * disable this device for the user. This blocks regular1091		 * traffic while still permitting ethtool ioctls from reaching1092		 * the hardware as well as allowing the user to run the1093		 * interface after manually setting a hw addr using1094		 * `ip set address`1095		 */1096		memset(hw->mac_addr, 0, netdev->addr_len);1097	} else {1098		/* copy the MAC address out of the EEPROM */1099		if (e1000_read_mac_addr(hw))1100			e_err(probe, "EEPROM Read Error\n");1101	}1102	/* don't block initialization here due to bad MAC address */1103	eth_hw_addr_set(netdev, hw->mac_addr);1104 1105	if (!is_valid_ether_addr(netdev->dev_addr))1106		e_err(probe, "Invalid MAC Address\n");1107 1108 1109	INIT_DELAYED_WORK(&adapter->watchdog_task, e1000_watchdog);1110	INIT_DELAYED_WORK(&adapter->fifo_stall_task,1111			  e1000_82547_tx_fifo_stall_task);1112	INIT_DELAYED_WORK(&adapter->phy_info_task, e1000_update_phy_info_task);1113	INIT_WORK(&adapter->reset_task, e1000_reset_task);1114 1115	e1000_check_options(adapter);1116 1117	/* Initial Wake on LAN setting1118	 * If APM wake is enabled in the EEPROM,1119	 * enable the ACPI Magic Packet filter1120	 */1121 1122	switch (hw->mac_type) {1123	case e1000_82542_rev2_0:1124	case e1000_82542_rev2_1:1125	case e1000_82543:1126		break;1127	case e1000_82544:1128		e1000_read_eeprom(hw,1129			EEPROM_INIT_CONTROL2_REG, 1, &eeprom_data);1130		eeprom_apme_mask = E1000_EEPROM_82544_APM;1131		break;1132	case e1000_82546:1133	case e1000_82546_rev_3:1134		if (er32(STATUS) & E1000_STATUS_FUNC_1) {1135			e1000_read_eeprom(hw,1136				EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);1137			break;1138		}1139		fallthrough;1140	default:1141		e1000_read_eeprom(hw,1142			EEPROM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);1143		break;1144	}1145	if (eeprom_data & eeprom_apme_mask)1146		adapter->eeprom_wol |= E1000_WUFC_MAG;1147 1148	/* now that we have the eeprom settings, apply the special cases1149	 * where the eeprom may be wrong or the board simply won't support1150	 * wake on lan on a particular port1151	 */1152	switch (pdev->device) {1153	case E1000_DEV_ID_82546GB_PCIE:1154		adapter->eeprom_wol = 0;1155		break;1156	case E1000_DEV_ID_82546EB_FIBER:1157	case E1000_DEV_ID_82546GB_FIBER:1158		/* Wake events only supported on port A for dual fiber1159		 * regardless of eeprom setting1160		 */1161		if (er32(STATUS) & E1000_STATUS_FUNC_1)1162			adapter->eeprom_wol = 0;1163		break;1164	case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:1165		/* if quad port adapter, disable WoL on all but port A */1166		if (global_quad_port_a != 0)1167			adapter->eeprom_wol = 0;1168		else1169			adapter->quad_port_a = true;1170		/* Reset for multiple quad port adapters */1171		if (++global_quad_port_a == 4)1172			global_quad_port_a = 0;1173		break;1174	}1175 1176	/* initialize the wol settings based on the eeprom settings */1177	adapter->wol = adapter->eeprom_wol;1178	device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);1179 1180	/* Auto detect PHY address */1181	if (hw->mac_type == e1000_ce4100) {1182		for (i = 0; i < 32; i++) {1183			hw->phy_addr = i;1184			e1000_read_phy_reg(hw, PHY_ID2, &tmp);1185 1186			if (tmp != 0 && tmp != 0xFF)1187				break;1188		}1189 1190		if (i >= 32)1191			goto err_eeprom;1192	}1193 1194	/* reset the hardware with the new settings */1195	e1000_reset(adapter);1196 1197	strcpy(netdev->name, "eth%d");1198	err = register_netdev(netdev);1199	if (err)1200		goto err_register;1201 1202	e1000_vlan_filter_on_off(adapter, false);1203 1204	/* print bus type/speed/width info */1205	e_info(probe, "(PCI%s:%dMHz:%d-bit) %pM\n",1206	       ((hw->bus_type == e1000_bus_type_pcix) ? "-X" : ""),1207	       ((hw->bus_speed == e1000_bus_speed_133) ? 133 :1208		(hw->bus_speed == e1000_bus_speed_120) ? 120 :1209		(hw->bus_speed == e1000_bus_speed_100) ? 100 :1210		(hw->bus_speed == e1000_bus_speed_66) ? 66 : 33),1211	       ((hw->bus_width == e1000_bus_width_64) ? 64 : 32),1212	       netdev->dev_addr);1213 1214	/* carrier off reporting is important to ethtool even BEFORE open */1215	netif_carrier_off(netdev);1216 1217	e_info(probe, "Intel(R) PRO/1000 Network Connection\n");1218 1219	cards_found++;1220	return 0;1221 1222err_register:1223err_eeprom:1224	e1000_phy_hw_reset(hw);1225 1226	if (hw->flash_address)1227		iounmap(hw->flash_address);1228	kfree(adapter->tx_ring);1229	kfree(adapter->rx_ring);1230err_dma:1231err_sw_init:1232err_mdio_ioremap:1233	iounmap(hw->ce4100_gbe_mdio_base_virt);1234	iounmap(hw->hw_addr);1235err_ioremap:1236	disable_dev = !test_and_set_bit(__E1000_DISABLED, &adapter->flags);1237	free_netdev(netdev);1238err_alloc_etherdev:1239	pci_release_selected_regions(pdev, bars);1240err_pci_reg:1241	if (!adapter || disable_dev)1242		pci_disable_device(pdev);1243	return err;1244}1245 1246/**1247 * e1000_remove - Device Removal Routine1248 * @pdev: PCI device information struct1249 *1250 * e1000_remove is called by the PCI subsystem to alert the driver1251 * that it should release a PCI device. That could be caused by a1252 * Hot-Plug event, or because the driver is going to be removed from1253 * memory.1254 **/1255static void e1000_remove(struct pci_dev *pdev)1256{1257	struct net_device *netdev = pci_get_drvdata(pdev);1258	struct e1000_adapter *adapter = netdev_priv(netdev);1259	struct e1000_hw *hw = &adapter->hw;1260	bool disable_dev;1261 1262	e1000_down_and_stop(adapter);1263	e1000_release_manageability(adapter);1264 1265	unregister_netdev(netdev);1266 1267	e1000_phy_hw_reset(hw);1268 1269	kfree(adapter->tx_ring);1270	kfree(adapter->rx_ring);1271 1272	if (hw->mac_type == e1000_ce4100)1273		iounmap(hw->ce4100_gbe_mdio_base_virt);1274	iounmap(hw->hw_addr);1275	if (hw->flash_address)1276		iounmap(hw->flash_address);1277	pci_release_selected_regions(pdev, adapter->bars);1278 1279	disable_dev = !test_and_set_bit(__E1000_DISABLED, &adapter->flags);1280	free_netdev(netdev);1281 1282	if (disable_dev)1283		pci_disable_device(pdev);1284}1285 1286/**1287 * e1000_sw_init - Initialize general software structures (struct e1000_adapter)1288 * @adapter: board private structure to initialize1289 *1290 * e1000_sw_init initializes the Adapter private data structure.1291 * e1000_init_hw_struct MUST be called before this function1292 **/1293static int e1000_sw_init(struct e1000_adapter *adapter)1294{1295	adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE;1296 1297	adapter->num_tx_queues = 1;1298	adapter->num_rx_queues = 1;1299 1300	if (e1000_alloc_queues(adapter)) {1301		e_err(probe, "Unable to allocate memory for queues\n");1302		return -ENOMEM;1303	}1304 1305	/* Explicitly disable IRQ since the NIC can be in any state. */1306	e1000_irq_disable(adapter);1307 1308	spin_lock_init(&adapter->stats_lock);1309 1310	set_bit(__E1000_DOWN, &adapter->flags);1311 1312	return 0;1313}1314 1315/**1316 * e1000_alloc_queues - Allocate memory for all rings1317 * @adapter: board private structure to initialize1318 *1319 * We allocate one ring per queue at run-time since we don't know the1320 * number of queues at compile-time.1321 **/1322static int e1000_alloc_queues(struct e1000_adapter *adapter)1323{1324	adapter->tx_ring = kcalloc(adapter->num_tx_queues,1325				   sizeof(struct e1000_tx_ring), GFP_KERNEL);1326	if (!adapter->tx_ring)1327		return -ENOMEM;1328 1329	adapter->rx_ring = kcalloc(adapter->num_rx_queues,1330				   sizeof(struct e1000_rx_ring), GFP_KERNEL);1331	if (!adapter->rx_ring) {1332		kfree(adapter->tx_ring);1333		return -ENOMEM;1334	}1335 1336	return E1000_SUCCESS;1337}1338 1339/**1340 * e1000_open - Called when a network interface is made active1341 * @netdev: network interface device structure1342 *1343 * Returns 0 on success, negative value on failure1344 *1345 * The open entry point is called when a network interface is made1346 * active by the system (IFF_UP).  At this point all resources needed1347 * for transmit and receive operations are allocated, the interrupt1348 * handler is registered with the OS, the watchdog task is started,1349 * and the stack is notified that the interface is ready.1350 **/1351int e1000_open(struct net_device *netdev)1352{1353	struct e1000_adapter *adapter = netdev_priv(netdev);1354	struct e1000_hw *hw = &adapter->hw;1355	int err;1356 1357	/* disallow open during test */1358	if (test_bit(__E1000_TESTING, &adapter->flags))1359		return -EBUSY;1360 1361	netif_carrier_off(netdev);1362 1363	/* allocate transmit descriptors */1364	err = e1000_setup_all_tx_resources(adapter);1365	if (err)1366		goto err_setup_tx;1367 1368	/* allocate receive descriptors */1369	err = e1000_setup_all_rx_resources(adapter);1370	if (err)1371		goto err_setup_rx;1372 1373	e1000_power_up_phy(adapter);1374 1375	adapter->mng_vlan_id = E1000_MNG_VLAN_NONE;1376	if ((hw->mng_cookie.status &1377			  E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT)) {1378		e1000_update_mng_vlan(adapter);1379	}1380 1381	/* before we allocate an interrupt, we must be ready to handle it.1382	 * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt1383	 * as soon as we call pci_request_irq, so we have to setup our1384	 * clean_rx handler before we do so.1385	 */1386	e1000_configure(adapter);1387 1388	err = e1000_request_irq(adapter);1389	if (err)1390		goto err_req_irq;1391 1392	/* From here on the code is the same as e1000_up() */1393	clear_bit(__E1000_DOWN, &adapter->flags);1394 1395	napi_enable(&adapter->napi);1396 1397	e1000_irq_enable(adapter);1398 1399	netif_start_queue(netdev);1400 1401	/* fire a link status change interrupt to start the watchdog */1402	ew32(ICS, E1000_ICS_LSC);1403 1404	return E1000_SUCCESS;1405 1406err_req_irq:1407	e1000_power_down_phy(adapter);1408	e1000_free_all_rx_resources(adapter);1409err_setup_rx:1410	e1000_free_all_tx_resources(adapter);1411err_setup_tx:1412	e1000_reset(adapter);1413 1414	return err;1415}1416 1417/**1418 * e1000_close - Disables a network interface1419 * @netdev: network interface device structure1420 *1421 * Returns 0, this is not allowed to fail1422 *1423 * The close entry point is called when an interface is de-activated1424 * by the OS.  The hardware is still under the drivers control, but1425 * needs to be disabled.  A global MAC reset is issued to stop the1426 * hardware, and all transmit and receive resources are freed.1427 **/1428int e1000_close(struct net_device *netdev)1429{1430	struct e1000_adapter *adapter = netdev_priv(netdev);1431	struct e1000_hw *hw = &adapter->hw;1432	int count = E1000_CHECK_RESET_COUNT;1433 1434	while (test_and_set_bit(__E1000_RESETTING, &adapter->flags) && count--)1435		usleep_range(10000, 20000);1436 1437	WARN_ON(count < 0);1438 1439	/* signal that we're down so that the reset task will no longer run */1440	set_bit(__E1000_DOWN, &adapter->flags);1441	clear_bit(__E1000_RESETTING, &adapter->flags);1442 1443	e1000_down(adapter);1444	e1000_power_down_phy(adapter);1445	e1000_free_irq(adapter);1446 1447	e1000_free_all_tx_resources(adapter);1448	e1000_free_all_rx_resources(adapter);1449 1450	/* kill manageability vlan ID if supported, but not if a vlan with1451	 * the same ID is registered on the host OS (let 8021q kill it)1452	 */1453	if ((hw->mng_cookie.status &1454	     E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) &&1455	    !test_bit(adapter->mng_vlan_id, adapter->active_vlans)) {1456		e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q),1457				       adapter->mng_vlan_id);1458	}1459 1460	return 0;1461}1462 1463/**1464 * e1000_check_64k_bound - check that memory doesn't cross 64kB boundary1465 * @adapter: address of board private structure1466 * @start: address of beginning of memory1467 * @len: length of memory1468 **/1469static bool e1000_check_64k_bound(struct e1000_adapter *adapter, void *start,1470				  unsigned long len)1471{1472	struct e1000_hw *hw = &adapter->hw;1473	unsigned long begin = (unsigned long)start;1474	unsigned long end = begin + len;1475 1476	/* First rev 82545 and 82546 need to not allow any memory1477	 * write location to cross 64k boundary due to errata 231478	 */1479	if (hw->mac_type == e1000_82545 ||1480	    hw->mac_type == e1000_ce4100 ||1481	    hw->mac_type == e1000_82546) {1482		return ((begin ^ (end - 1)) >> 16) == 0;1483	}1484 1485	return true;1486}1487 1488/**1489 * e1000_setup_tx_resources - allocate Tx resources (Descriptors)1490 * @adapter: board private structure1491 * @txdr:    tx descriptor ring (for a specific queue) to setup1492 *1493 * Return 0 on success, negative on failure1494 **/1495static int e1000_setup_tx_resources(struct e1000_adapter *adapter,1496				    struct e1000_tx_ring *txdr)1497{1498	struct pci_dev *pdev = adapter->pdev;1499	int size;1500 1501	size = sizeof(struct e1000_tx_buffer) * txdr->count;1502	txdr->buffer_info = vzalloc(size);1503	if (!txdr->buffer_info)1504		return -ENOMEM;1505 1506	/* round up to nearest 4K */1507 1508	txdr->size = txdr->count * sizeof(struct e1000_tx_desc);1509	txdr->size = ALIGN(txdr->size, 4096);1510 1511	txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size, &txdr->dma,1512					GFP_KERNEL);1513	if (!txdr->desc) {1514setup_tx_desc_die:1515		vfree(txdr->buffer_info);1516		return -ENOMEM;1517	}1518 1519	/* Fix for errata 23, can't cross 64kB boundary */1520	if (!e1000_check_64k_bound(adapter, txdr->desc, txdr->size)) {1521		void *olddesc = txdr->desc;1522		dma_addr_t olddma = txdr->dma;1523		e_err(tx_err, "txdr align check failed: %u bytes at %p\n",1524		      txdr->size, txdr->desc);1525		/* Try again, without freeing the previous */1526		txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size,1527						&txdr->dma, GFP_KERNEL);1528		/* Failed allocation, critical failure */1529		if (!txdr->desc) {1530			dma_free_coherent(&pdev->dev, txdr->size, olddesc,1531					  olddma);1532			goto setup_tx_desc_die;1533		}1534 1535		if (!e1000_check_64k_bound(adapter, txdr->desc, txdr->size)) {1536			/* give up */1537			dma_free_coherent(&pdev->dev, txdr->size, txdr->desc,1538					  txdr->dma);1539			dma_free_coherent(&pdev->dev, txdr->size, olddesc,1540					  olddma);1541			e_err(probe, "Unable to allocate aligned memory "1542			      "for the transmit descriptor ring\n");1543			vfree(txdr->buffer_info);1544			return -ENOMEM;1545		} else {1546			/* Free old allocation, new allocation was successful */1547			dma_free_coherent(&pdev->dev, txdr->size, olddesc,1548					  olddma);1549		}1550	}1551	memset(txdr->desc, 0, txdr->size);1552 1553	txdr->next_to_use = 0;1554	txdr->next_to_clean = 0;1555 1556	return 0;1557}1558 1559/**1560 * e1000_setup_all_tx_resources - wrapper to allocate Tx resources1561 * 				  (Descriptors) for all queues1562 * @adapter: board private structure1563 *1564 * Return 0 on success, negative on failure1565 **/1566int e1000_setup_all_tx_resources(struct e1000_adapter *adapter)1567{1568	int i, err = 0;1569 1570	for (i = 0; i < adapter->num_tx_queues; i++) {1571		err = e1000_setup_tx_resources(adapter, &adapter->tx_ring[i]);1572		if (err) {1573			e_err(probe, "Allocation for Tx Queue %u failed\n", i);1574			for (i-- ; i >= 0; i--)1575				e1000_free_tx_resources(adapter,1576							&adapter->tx_ring[i]);1577			break;1578		}1579	}1580 1581	return err;1582}1583 1584/**1585 * e1000_configure_tx - Configure 8254x Transmit Unit after Reset1586 * @adapter: board private structure1587 *1588 * Configure the Tx unit of the MAC after a reset.1589 **/1590static void e1000_configure_tx(struct e1000_adapter *adapter)1591{1592	u64 tdba;1593	struct e1000_hw *hw = &adapter->hw;1594	u32 tdlen, tctl, tipg;1595	u32 ipgr1, ipgr2;1596 1597	/* Setup the HW Tx Head and Tail descriptor pointers */1598 1599	switch (adapter->num_tx_queues) {1600	case 1:1601	default:1602		tdba = adapter->tx_ring[0].dma;1603		tdlen = adapter->tx_ring[0].count *1604			sizeof(struct e1000_tx_desc);1605		ew32(TDLEN, tdlen);1606		ew32(TDBAH, (tdba >> 32));1607		ew32(TDBAL, (tdba & 0x00000000ffffffffULL));1608		ew32(TDT, 0);1609		ew32(TDH, 0);1610		adapter->tx_ring[0].tdh = ((hw->mac_type >= e1000_82543) ?1611					   E1000_TDH : E1000_82542_TDH);1612		adapter->tx_ring[0].tdt = ((hw->mac_type >= e1000_82543) ?1613					   E1000_TDT : E1000_82542_TDT);1614		break;1615	}1616 1617	/* Set the default values for the Tx Inter Packet Gap timer */1618	if ((hw->media_type == e1000_media_type_fiber ||1619	     hw->media_type == e1000_media_type_internal_serdes))1620		tipg = DEFAULT_82543_TIPG_IPGT_FIBER;1621	else1622		tipg = DEFAULT_82543_TIPG_IPGT_COPPER;1623 1624	switch (hw->mac_type) {1625	case e1000_82542_rev2_0:1626	case e1000_82542_rev2_1:1627		tipg = DEFAULT_82542_TIPG_IPGT;1628		ipgr1 = DEFAULT_82542_TIPG_IPGR1;1629		ipgr2 = DEFAULT_82542_TIPG_IPGR2;1630		break;1631	default:1632		ipgr1 = DEFAULT_82543_TIPG_IPGR1;1633		ipgr2 = DEFAULT_82543_TIPG_IPGR2;1634		break;1635	}1636	tipg |= ipgr1 << E1000_TIPG_IPGR1_SHIFT;1637	tipg |= ipgr2 << E1000_TIPG_IPGR2_SHIFT;1638	ew32(TIPG, tipg);1639 1640	/* Set the Tx Interrupt Delay register */1641 1642	ew32(TIDV, adapter->tx_int_delay);1643	if (hw->mac_type >= e1000_82540)1644		ew32(TADV, adapter->tx_abs_int_delay);1645 1646	/* Program the Transmit Control Register */1647 1648	tctl = er32(TCTL);1649	tctl &= ~E1000_TCTL_CT;1650	tctl |= E1000_TCTL_PSP | E1000_TCTL_RTLC |1651		(E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);1652 1653	e1000_config_collision_dist(hw);1654 1655	/* Setup Transmit Descriptor Settings for eop descriptor */1656	adapter->txd_cmd = E1000_TXD_CMD_EOP | E1000_TXD_CMD_IFCS;1657 1658	/* only set IDE if we are delaying interrupts using the timers */1659	if (adapter->tx_int_delay)1660		adapter->txd_cmd |= E1000_TXD_CMD_IDE;1661 1662	if (hw->mac_type < e1000_82543)1663		adapter->txd_cmd |= E1000_TXD_CMD_RPS;1664	else1665		adapter->txd_cmd |= E1000_TXD_CMD_RS;1666 1667	/* Cache if we're 82544 running in PCI-X because we'll1668	 * need this to apply a workaround later in the send path.1669	 */1670	if (hw->mac_type == e1000_82544 &&1671	    hw->bus_type == e1000_bus_type_pcix)1672		adapter->pcix_82544 = true;1673 1674	ew32(TCTL, tctl);1675 1676}1677 1678/**1679 * e1000_setup_rx_resources - allocate Rx resources (Descriptors)1680 * @adapter: board private structure1681 * @rxdr:    rx descriptor ring (for a specific queue) to setup1682 *1683 * Returns 0 on success, negative on failure1684 **/1685static int e1000_setup_rx_resources(struct e1000_adapter *adapter,1686				    struct e1000_rx_ring *rxdr)1687{1688	struct pci_dev *pdev = adapter->pdev;1689	int size, desc_len;1690 1691	size = sizeof(struct e1000_rx_buffer) * rxdr->count;1692	rxdr->buffer_info = vzalloc(size);1693	if (!rxdr->buffer_info)1694		return -ENOMEM;1695 1696	desc_len = sizeof(struct e1000_rx_desc);1697 1698	/* Round up to nearest 4K */1699 1700	rxdr->size = rxdr->count * desc_len;1701	rxdr->size = ALIGN(rxdr->size, 4096);1702 1703	rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size, &rxdr->dma,1704					GFP_KERNEL);1705	if (!rxdr->desc) {1706setup_rx_desc_die:1707		vfree(rxdr->buffer_info);1708		return -ENOMEM;1709	}1710 1711	/* Fix for errata 23, can't cross 64kB boundary */1712	if (!e1000_check_64k_bound(adapter, rxdr->desc, rxdr->size)) {1713		void *olddesc = rxdr->desc;1714		dma_addr_t olddma = rxdr->dma;1715		e_err(rx_err, "rxdr align check failed: %u bytes at %p\n",1716		      rxdr->size, rxdr->desc);1717		/* Try again, without freeing the previous */1718		rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size,1719						&rxdr->dma, GFP_KERNEL);1720		/* Failed allocation, critical failure */1721		if (!rxdr->desc) {1722			dma_free_coherent(&pdev->dev, rxdr->size, olddesc,1723					  olddma);1724			goto setup_rx_desc_die;1725		}1726 1727		if (!e1000_check_64k_bound(adapter, rxdr->desc, rxdr->size)) {1728			/* give up */1729			dma_free_coherent(&pdev->dev, rxdr->size, rxdr->desc,1730					  rxdr->dma);1731			dma_free_coherent(&pdev->dev, rxdr->size, olddesc,1732					  olddma);1733			e_err(probe, "Unable to allocate aligned memory for "1734			      "the Rx descriptor ring\n");1735			goto setup_rx_desc_die;1736		} else {1737			/* Free old allocation, new allocation was successful */1738			dma_free_coherent(&pdev->dev, rxdr->size, olddesc,1739					  olddma);1740		}1741	}1742	memset(rxdr->desc, 0, rxdr->size);1743 1744	rxdr->next_to_clean = 0;1745	rxdr->next_to_use = 0;1746	rxdr->rx_skb_top = NULL;1747 1748	return 0;1749}1750 1751/**1752 * e1000_setup_all_rx_resources - wrapper to allocate Rx resources1753 * 				  (Descriptors) for all queues1754 * @adapter: board private structure1755 *1756 * Return 0 on success, negative on failure1757 **/1758int e1000_setup_all_rx_resources(struct e1000_adapter *adapter)1759{1760	int i, err = 0;1761 1762	for (i = 0; i < adapter->num_rx_queues; i++) {1763		err = e1000_setup_rx_resources(adapter, &adapter->rx_ring[i]);1764		if (err) {1765			e_err(probe, "Allocation for Rx Queue %u failed\n", i);1766			for (i-- ; i >= 0; i--)1767				e1000_free_rx_resources(adapter,1768							&adapter->rx_ring[i]);1769			break;1770		}1771	}1772 1773	return err;1774}1775 1776/**1777 * e1000_setup_rctl - configure the receive control registers1778 * @adapter: Board private structure1779 **/1780static void e1000_setup_rctl(struct e1000_adapter *adapter)1781{1782	struct e1000_hw *hw = &adapter->hw;1783	u32 rctl;1784 1785	rctl = er32(RCTL);1786 1787	rctl &= ~(3 << E1000_RCTL_MO_SHIFT);1788 1789	rctl |= E1000_RCTL_BAM | E1000_RCTL_LBM_NO |1790		E1000_RCTL_RDMTS_HALF |1791		(hw->mc_filter_type << E1000_RCTL_MO_SHIFT);1792 1793	if (hw->tbi_compatibility_on == 1)1794		rctl |= E1000_RCTL_SBP;1795	else1796		rctl &= ~E1000_RCTL_SBP;1797 1798	if (adapter->netdev->mtu <= ETH_DATA_LEN)1799		rctl &= ~E1000_RCTL_LPE;1800	else1801		rctl |= E1000_RCTL_LPE;1802 1803	/* Setup buffer sizes */1804	rctl &= ~E1000_RCTL_SZ_4096;1805	rctl |= E1000_RCTL_BSEX;1806	switch (adapter->rx_buffer_len) {1807	case E1000_RXBUFFER_2048:1808	default:1809		rctl |= E1000_RCTL_SZ_2048;1810		rctl &= ~E1000_RCTL_BSEX;1811		break;1812	case E1000_RXBUFFER_4096:1813		rctl |= E1000_RCTL_SZ_4096;1814		break;1815	case E1000_RXBUFFER_8192:1816		rctl |= E1000_RCTL_SZ_8192;1817		break;1818	case E1000_RXBUFFER_16384:1819		rctl |= E1000_RCTL_SZ_16384;1820		break;1821	}1822 1823	/* This is useful for sniffing bad packets. */1824	if (adapter->netdev->features & NETIF_F_RXALL) {1825		/* UPE and MPE will be handled by normal PROMISC logic1826		 * in e1000e_set_rx_mode1827		 */1828		rctl |= (E1000_RCTL_SBP | /* Receive bad packets */1829			 E1000_RCTL_BAM | /* RX All Bcast Pkts */1830			 E1000_RCTL_PMCF); /* RX All MAC Ctrl Pkts */1831 1832		rctl &= ~(E1000_RCTL_VFE | /* Disable VLAN filter */1833			  E1000_RCTL_DPF | /* Allow filtered pause */1834			  E1000_RCTL_CFIEN); /* Dis VLAN CFIEN Filter */1835		/* Do not mess with E1000_CTRL_VME, it affects transmit as well,1836		 * and that breaks VLANs.1837		 */1838	}1839 1840	ew32(RCTL, rctl);1841}1842 1843/**1844 * e1000_configure_rx - Configure 8254x Receive Unit after Reset1845 * @adapter: board private structure1846 *1847 * Configure the Rx unit of the MAC after a reset.1848 **/1849static void e1000_configure_rx(struct e1000_adapter *adapter)1850{1851	u64 rdba;1852	struct e1000_hw *hw = &adapter->hw;1853	u32 rdlen, rctl, rxcsum;1854 1855	if (adapter->netdev->mtu > ETH_DATA_LEN) {1856		rdlen = adapter->rx_ring[0].count *1857			sizeof(struct e1000_rx_desc);1858		adapter->clean_rx = e1000_clean_jumbo_rx_irq;1859		adapter->alloc_rx_buf = e1000_alloc_jumbo_rx_buffers;1860	} else {1861		rdlen = adapter->rx_ring[0].count *1862			sizeof(struct e1000_rx_desc);1863		adapter->clean_rx = e1000_clean_rx_irq;1864		adapter->alloc_rx_buf = e1000_alloc_rx_buffers;1865	}1866 1867	/* disable receives while setting up the descriptors */1868	rctl = er32(RCTL);1869	ew32(RCTL, rctl & ~E1000_RCTL_EN);1870 1871	/* set the Receive Delay Timer Register */1872	ew32(RDTR, adapter->rx_int_delay);1873 1874	if (hw->mac_type >= e1000_82540) {1875		ew32(RADV, adapter->rx_abs_int_delay);1876		if (adapter->itr_setting != 0)1877			ew32(ITR, 1000000000 / (adapter->itr * 256));1878	}1879 1880	/* Setup the HW Rx Head and Tail Descriptor Pointers and1881	 * the Base and Length of the Rx Descriptor Ring1882	 */1883	switch (adapter->num_rx_queues) {1884	case 1:1885	default:1886		rdba = adapter->rx_ring[0].dma;1887		ew32(RDLEN, rdlen);1888		ew32(RDBAH, (rdba >> 32));1889		ew32(RDBAL, (rdba & 0x00000000ffffffffULL));1890		ew32(RDT, 0);1891		ew32(RDH, 0);1892		adapter->rx_ring[0].rdh = ((hw->mac_type >= e1000_82543) ?1893					   E1000_RDH : E1000_82542_RDH);1894		adapter->rx_ring[0].rdt = ((hw->mac_type >= e1000_82543) ?1895					   E1000_RDT : E1000_82542_RDT);1896		break;1897	}1898 1899	/* Enable 82543 Receive Checksum Offload for TCP and UDP */1900	if (hw->mac_type >= e1000_82543) {1901		rxcsum = er32(RXCSUM);1902		if (adapter->rx_csum)1903			rxcsum |= E1000_RXCSUM_TUOFL;1904		else1905			/* don't need to clear IPPCSE as it defaults to 0 */1906			rxcsum &= ~E1000_RXCSUM_TUOFL;1907		ew32(RXCSUM, rxcsum);1908	}1909 1910	/* Enable Receives */1911	ew32(RCTL, rctl | E1000_RCTL_EN);1912}1913 1914/**1915 * e1000_free_tx_resources - Free Tx Resources per Queue1916 * @adapter: board private structure1917 * @tx_ring: Tx descriptor ring for a specific queue1918 *1919 * Free all transmit software resources1920 **/1921static void e1000_free_tx_resources(struct e1000_adapter *adapter,1922				    struct e1000_tx_ring *tx_ring)1923{1924	struct pci_dev *pdev = adapter->pdev;1925 1926	e1000_clean_tx_ring(adapter, tx_ring);1927 1928	vfree(tx_ring->buffer_info);1929	tx_ring->buffer_info = NULL;1930 1931	dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,1932			  tx_ring->dma);1933 1934	tx_ring->desc = NULL;1935}1936 1937/**1938 * e1000_free_all_tx_resources - Free Tx Resources for All Queues1939 * @adapter: board private structure1940 *1941 * Free all transmit software resources1942 **/1943void e1000_free_all_tx_resources(struct e1000_adapter *adapter)1944{1945	int i;1946 1947	for (i = 0; i < adapter->num_tx_queues; i++)1948		e1000_free_tx_resources(adapter, &adapter->tx_ring[i]);1949}1950 1951static void1952e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter,1953				 struct e1000_tx_buffer *buffer_info,1954				 int budget)1955{1956	if (buffer_info->dma) {1957		if (buffer_info->mapped_as_page)1958			dma_unmap_page(&adapter->pdev->dev, buffer_info->dma,1959				       buffer_info->length, DMA_TO_DEVICE);1960		else1961			dma_unmap_single(&adapter->pdev->dev, buffer_info->dma,1962					 buffer_info->length,1963					 DMA_TO_DEVICE);1964		buffer_info->dma = 0;1965	}1966	if (buffer_info->skb) {1967		napi_consume_skb(buffer_info->skb, budget);1968		buffer_info->skb = NULL;1969	}1970	buffer_info->time_stamp = 0;1971	/* buffer_info must be completely set up in the transmit path */1972}1973 1974/**1975 * e1000_clean_tx_ring - Free Tx Buffers1976 * @adapter: board private structure1977 * @tx_ring: ring to be cleaned1978 **/1979static void e1000_clean_tx_ring(struct e1000_adapter *adapter,1980				struct e1000_tx_ring *tx_ring)1981{1982	struct e1000_hw *hw = &adapter->hw;1983	struct e1000_tx_buffer *buffer_info;1984	unsigned long size;1985	unsigned int i;1986 1987	/* Free all the Tx ring sk_buffs */1988 1989	for (i = 0; i < tx_ring->count; i++) {1990		buffer_info = &tx_ring->buffer_info[i];1991		e1000_unmap_and_free_tx_resource(adapter, buffer_info, 0);1992	}1993 1994	netdev_reset_queue(adapter->netdev);1995	size = sizeof(struct e1000_tx_buffer) * tx_ring->count;1996	memset(tx_ring->buffer_info, 0, size);1997 1998	/* Zero out the descriptor ring */1999 2000	memset(tx_ring->desc, 0, tx_ring->size);2001 2002	tx_ring->next_to_use = 0;2003	tx_ring->next_to_clean = 0;2004	tx_ring->last_tx_tso = false;2005 2006	writel(0, hw->hw_addr + tx_ring->tdh);2007	writel(0, hw->hw_addr + tx_ring->tdt);2008}2009 2010/**2011 * e1000_clean_all_tx_rings - Free Tx Buffers for all queues2012 * @adapter: board private structure2013 **/2014static void e1000_clean_all_tx_rings(struct e1000_adapter *adapter)2015{2016	int i;2017 2018	for (i = 0; i < adapter->num_tx_queues; i++)2019		e1000_clean_tx_ring(adapter, &adapter->tx_ring[i]);2020}2021 2022/**2023 * e1000_free_rx_resources - Free Rx Resources2024 * @adapter: board private structure2025 * @rx_ring: ring to clean the resources from2026 *2027 * Free all receive software resources2028 **/2029static void e1000_free_rx_resources(struct e1000_adapter *adapter,2030				    struct e1000_rx_ring *rx_ring)2031{2032	struct pci_dev *pdev = adapter->pdev;2033 2034	e1000_clean_rx_ring(adapter, rx_ring);2035 2036	vfree(rx_ring->buffer_info);2037	rx_ring->buffer_info = NULL;2038 2039	dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,2040			  rx_ring->dma);2041 2042	rx_ring->desc = NULL;2043}2044 2045/**2046 * e1000_free_all_rx_resources - Free Rx Resources for All Queues2047 * @adapter: board private structure2048 *2049 * Free all receive software resources2050 **/2051void e1000_free_all_rx_resources(struct e1000_adapter *adapter)2052{2053	int i;2054 2055	for (i = 0; i < adapter->num_rx_queues; i++)2056		e1000_free_rx_resources(adapter, &adapter->rx_ring[i]);2057}2058 2059#define E1000_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN)2060static unsigned int e1000_frag_len(const struct e1000_adapter *a)2061{2062	return SKB_DATA_ALIGN(a->rx_buffer_len + E1000_HEADROOM) +2063		SKB_DATA_ALIGN(sizeof(struct skb_shared_info));2064}2065 2066static void *e1000_alloc_frag(const struct e1000_adapter *a)2067{2068	unsigned int len = e1000_frag_len(a);2069	u8 *data = netdev_alloc_frag(len);2070 2071	if (likely(data))2072		data += E1000_HEADROOM;2073	return data;2074}2075 2076/**2077 * e1000_clean_rx_ring - Free Rx Buffers per Queue2078 * @adapter: board private structure2079 * @rx_ring: ring to free buffers from2080 **/2081static void e1000_clean_rx_ring(struct e1000_adapter *adapter,2082				struct e1000_rx_ring *rx_ring)2083{2084	struct e1000_hw *hw = &adapter->hw;2085	struct e1000_rx_buffer *buffer_info;2086	struct pci_dev *pdev = adapter->pdev;2087	unsigned long size;2088	unsigned int i;2089 2090	/* Free all the Rx netfrags */2091	for (i = 0; i < rx_ring->count; i++) {2092		buffer_info = &rx_ring->buffer_info[i];2093		if (adapter->clean_rx == e1000_clean_rx_irq) {2094			if (buffer_info->dma)2095				dma_unmap_single(&pdev->dev, buffer_info->dma,2096						 adapter->rx_buffer_len,2097						 DMA_FROM_DEVICE);2098			if (buffer_info->rxbuf.data) {2099				skb_free_frag(buffer_info->rxbuf.data);2100				buffer_info->rxbuf.data = NULL;2101			}2102		} else if (adapter->clean_rx == e1000_clean_jumbo_rx_irq) {2103			if (buffer_info->dma)2104				dma_unmap_page(&pdev->dev, buffer_info->dma,2105					       adapter->rx_buffer_len,2106					       DMA_FROM_DEVICE);2107			if (buffer_info->rxbuf.page) {2108				put_page(buffer_info->rxbuf.page);2109				buffer_info->rxbuf.page = NULL;2110			}2111		}2112 2113		buffer_info->dma = 0;2114	}2115 2116	/* there also may be some cached data from a chained receive */2117	napi_free_frags(&adapter->napi);2118	rx_ring->rx_skb_top = NULL;2119 2120	size = sizeof(struct e1000_rx_buffer) * rx_ring->count;2121	memset(rx_ring->buffer_info, 0, size);2122 2123	/* Zero out the descriptor ring */2124	memset(rx_ring->desc, 0, rx_ring->size);2125 2126	rx_ring->next_to_clean = 0;2127	rx_ring->next_to_use = 0;2128 2129	writel(0, hw->hw_addr + rx_ring->rdh);2130	writel(0, hw->hw_addr + rx_ring->rdt);2131}2132 2133/**2134 * e1000_clean_all_rx_rings - Free Rx Buffers for all queues2135 * @adapter: board private structure2136 **/2137static void e1000_clean_all_rx_rings(struct e1000_adapter *adapter)2138{2139	int i;2140 2141	for (i = 0; i < adapter->num_rx_queues; i++)2142		e1000_clean_rx_ring(adapter, &adapter->rx_ring[i]);2143}2144 2145/* The 82542 2.0 (revision 2) needs to have the receive unit in reset2146 * and memory write and invalidate disabled for certain operations2147 */2148static void e1000_enter_82542_rst(struct e1000_adapter *adapter)2149{2150	struct e1000_hw *hw = &adapter->hw;2151	struct net_device *netdev = adapter->netdev;2152	u32 rctl;2153 2154	e1000_pci_clear_mwi(hw);2155 2156	rctl = er32(RCTL);2157	rctl |= E1000_RCTL_RST;2158	ew32(RCTL, rctl);2159	E1000_WRITE_FLUSH();2160	mdelay(5);2161 2162	if (netif_running(netdev))2163		e1000_clean_all_rx_rings(adapter);2164}2165 2166static void e1000_leave_82542_rst(struct e1000_adapter *adapter)2167{2168	struct e1000_hw *hw = &adapter->hw;2169	struct net_device *netdev = adapter->netdev;2170	u32 rctl;2171 2172	rctl = er32(RCTL);2173	rctl &= ~E1000_RCTL_RST;2174	ew32(RCTL, rctl);2175	E1000_WRITE_FLUSH();2176	mdelay(5);2177 2178	if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)2179		e1000_pci_set_mwi(hw);2180 2181	if (netif_running(netdev)) {2182		/* No need to loop, because 82542 supports only 1 queue */2183		struct e1000_rx_ring *ring = &adapter->rx_ring[0];2184		e1000_configure_rx(adapter);2185		adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));2186	}2187}2188 2189/**2190 * e1000_set_mac - Change the Ethernet Address of the NIC2191 * @netdev: network interface device structure2192 * @p: pointer to an address structure2193 *2194 * Returns 0 on success, negative on failure2195 **/2196static int e1000_set_mac(struct net_device *netdev, void *p)2197{2198	struct e1000_adapter *adapter = netdev_priv(netdev);2199	struct e1000_hw *hw = &adapter->hw;2200	struct sockaddr *addr = p;2201 2202	if (!is_valid_ether_addr(addr->sa_data))2203		return -EADDRNOTAVAIL;2204 2205	/* 82542 2.0 needs to be in reset to write receive address registers */2206 2207	if (hw->mac_type == e1000_82542_rev2_0)2208		e1000_enter_82542_rst(adapter);2209 2210	eth_hw_addr_set(netdev, addr->sa_data);2211	memcpy(hw->mac_addr, addr->sa_data, netdev->addr_len);2212 2213	e1000_rar_set(hw, hw->mac_addr, 0);2214 2215	if (hw->mac_type == e1000_82542_rev2_0)2216		e1000_leave_82542_rst(adapter);2217 2218	return 0;2219}2220 2221/**2222 * e1000_set_rx_mode - Secondary Unicast, Multicast and Promiscuous mode set2223 * @netdev: network interface device structure2224 *2225 * The set_rx_mode entry point is called whenever the unicast or multicast2226 * address lists or the network interface flags are updated. This routine is2227 * responsible for configuring the hardware for proper unicast, multicast,2228 * promiscuous mode, and all-multi behavior.2229 **/2230static void e1000_set_rx_mode(struct net_device *netdev)2231{2232	struct e1000_adapter *adapter = netdev_priv(netdev);2233	struct e1000_hw *hw = &adapter->hw;2234	struct netdev_hw_addr *ha;2235	bool use_uc = false;2236	u32 rctl;2237	u32 hash_value;2238	int i, rar_entries = E1000_RAR_ENTRIES;2239	int mta_reg_count = E1000_NUM_MTA_REGISTERS;2240	u32 *mcarray = kcalloc(mta_reg_count, sizeof(u32), GFP_ATOMIC);2241 2242	if (!mcarray)2243		return;2244 2245	/* Check for Promiscuous and All Multicast modes */2246 2247	rctl = er32(RCTL);2248 2249	if (netdev->flags & IFF_PROMISC) {2250		rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);2251		rctl &= ~E1000_RCTL_VFE;2252	} else {2253		if (netdev->flags & IFF_ALLMULTI)2254			rctl |= E1000_RCTL_MPE;2255		else2256			rctl &= ~E1000_RCTL_MPE;2257		/* Enable VLAN filter if there is a VLAN */2258		if (e1000_vlan_used(adapter))2259			rctl |= E1000_RCTL_VFE;2260	}2261 2262	if (netdev_uc_count(netdev) > rar_entries - 1) {2263		rctl |= E1000_RCTL_UPE;2264	} else if (!(netdev->flags & IFF_PROMISC)) {2265		rctl &= ~E1000_RCTL_UPE;2266		use_uc = true;2267	}2268 2269	ew32(RCTL, rctl);2270 2271	/* 82542 2.0 needs to be in reset to write receive address registers */2272 2273	if (hw->mac_type == e1000_82542_rev2_0)2274		e1000_enter_82542_rst(adapter);2275 2276	/* load the first 14 addresses into the exact filters 1-14. Unicast2277	 * addresses take precedence to avoid disabling unicast filtering2278	 * when possible.2279	 *2280	 * RAR 0 is used for the station MAC address2281	 * if there are not 14 addresses, go ahead and clear the filters2282	 */2283	i = 1;2284	if (use_uc)2285		netdev_for_each_uc_addr(ha, netdev) {2286			if (i == rar_entries)2287				break;2288			e1000_rar_set(hw, ha->addr, i++);2289		}2290 2291	netdev_for_each_mc_addr(ha, netdev) {2292		if (i == rar_entries) {2293			/* load any remaining addresses into the hash table */2294			u32 hash_reg, hash_bit, mta;2295			hash_value = e1000_hash_mc_addr(hw, ha->addr);2296			hash_reg = (hash_value >> 5) & 0x7F;2297			hash_bit = hash_value & 0x1F;2298			mta = (1 << hash_bit);2299			mcarray[hash_reg] |= mta;2300		} else {2301			e1000_rar_set(hw, ha->addr, i++);2302		}2303	}2304 2305	for (; i < rar_entries; i++) {2306		E1000_WRITE_REG_ARRAY(hw, RA, i << 1, 0);2307		E1000_WRITE_FLUSH();2308		E1000_WRITE_REG_ARRAY(hw, RA, (i << 1) + 1, 0);2309		E1000_WRITE_FLUSH();2310	}2311 2312	/* write the hash table completely, write from bottom to avoid2313	 * both stupid write combining chipsets, and flushing each write2314	 */2315	for (i = mta_reg_count - 1; i >= 0 ; i--) {2316		/* If we are on an 82544 has an errata where writing odd2317		 * offsets overwrites the previous even offset, but writing2318		 * backwards over the range solves the issue by always2319		 * writing the odd offset first2320		 */2321		E1000_WRITE_REG_ARRAY(hw, MTA, i, mcarray[i]);2322	}2323	E1000_WRITE_FLUSH();2324 2325	if (hw->mac_type == e1000_82542_rev2_0)2326		e1000_leave_82542_rst(adapter);2327 2328	kfree(mcarray);2329}2330 2331/**2332 * e1000_update_phy_info_task - get phy info2333 * @work: work struct contained inside adapter struct2334 *2335 * Need to wait a few seconds after link up to get diagnostic information from2336 * the phy2337 */2338static void e1000_update_phy_info_task(struct work_struct *work)2339{2340	struct e1000_adapter *adapter = container_of(work,2341						     struct e1000_adapter,2342						     phy_info_task.work);2343 2344	e1000_phy_get_info(&adapter->hw, &adapter->phy_info);2345}2346 2347/**2348 * e1000_82547_tx_fifo_stall_task - task to complete work2349 * @work: work struct contained inside adapter struct2350 **/2351static void e1000_82547_tx_fifo_stall_task(struct work_struct *work)2352{2353	struct e1000_adapter *adapter = container_of(work,2354						     struct e1000_adapter,2355						     fifo_stall_task.work);2356	struct e1000_hw *hw = &adapter->hw;2357	struct net_device *netdev = adapter->netdev;2358	u32 tctl;2359 2360	if (atomic_read(&adapter->tx_fifo_stall)) {2361		if ((er32(TDT) == er32(TDH)) &&2362		   (er32(TDFT) == er32(TDFH)) &&2363		   (er32(TDFTS) == er32(TDFHS))) {2364			tctl = er32(TCTL);2365			ew32(TCTL, tctl & ~E1000_TCTL_EN);2366			ew32(TDFT, adapter->tx_head_addr);2367			ew32(TDFH, adapter->tx_head_addr);2368			ew32(TDFTS, adapter->tx_head_addr);2369			ew32(TDFHS, adapter->tx_head_addr);2370			ew32(TCTL, tctl);2371			E1000_WRITE_FLUSH();2372 2373			adapter->tx_fifo_head = 0;2374			atomic_set(&adapter->tx_fifo_stall, 0);2375			netif_wake_queue(netdev);2376		} else if (!test_bit(__E1000_DOWN, &adapter->flags)) {2377			schedule_delayed_work(&adapter->fifo_stall_task, 1);2378		}2379	}2380}2381 2382bool e1000_has_link(struct e1000_adapter *adapter)2383{2384	struct e1000_hw *hw = &adapter->hw;2385	bool link_active = false;2386 2387	/* get_link_status is set on LSC (link status) interrupt or rx2388	 * sequence error interrupt (except on intel ce4100).2389	 * get_link_status will stay false until the2390	 * e1000_check_for_link establishes link for copper adapters2391	 * ONLY2392	 */2393	switch (hw->media_type) {2394	case e1000_media_type_copper:2395		if (hw->mac_type == e1000_ce4100)2396			hw->get_link_status = 1;2397		if (hw->get_link_status) {2398			e1000_check_for_link(hw);2399			link_active = !hw->get_link_status;2400		} else {2401			link_active = true;2402		}2403		break;2404	case e1000_media_type_fiber:2405		e1000_check_for_link(hw);2406		link_active = !!(er32(STATUS) & E1000_STATUS_LU);2407		break;2408	case e1000_media_type_internal_serdes:2409		e1000_check_for_link(hw);2410		link_active = hw->serdes_has_link;2411		break;2412	default:2413		break;2414	}2415 2416	return link_active;2417}2418 2419/**2420 * e1000_watchdog - work function2421 * @work: work struct contained inside adapter struct2422 **/2423static void e1000_watchdog(struct work_struct *work)2424{2425	struct e1000_adapter *adapter = container_of(work,2426						     struct e1000_adapter,2427						     watchdog_task.work);2428	struct e1000_hw *hw = &adapter->hw;2429	struct net_device *netdev = adapter->netdev;2430	struct e1000_tx_ring *txdr = adapter->tx_ring;2431	u32 link, tctl;2432 2433	link = e1000_has_link(adapter);2434	if ((netif_carrier_ok(netdev)) && link)2435		goto link_up;2436 2437	if (link) {2438		if (!netif_carrier_ok(netdev)) {2439			u32 ctrl;2440			/* update snapshot of PHY registers on LSC */2441			e1000_get_speed_and_duplex(hw,2442						   &adapter->link_speed,2443						   &adapter->link_duplex);2444 2445			ctrl = er32(CTRL);2446			pr_info("%s NIC Link is Up %d Mbps %s, "2447				"Flow Control: %s\n",2448				netdev->name,2449				adapter->link_speed,2450				adapter->link_duplex == FULL_DUPLEX ?2451				"Full Duplex" : "Half Duplex",2452				((ctrl & E1000_CTRL_TFCE) && (ctrl &2453				E1000_CTRL_RFCE)) ? "RX/TX" : ((ctrl &2454				E1000_CTRL_RFCE) ? "RX" : ((ctrl &2455				E1000_CTRL_TFCE) ? "TX" : "None")));2456 2457			/* adjust timeout factor according to speed/duplex */2458			adapter->tx_timeout_factor = 1;2459			switch (adapter->link_speed) {2460			case SPEED_10:2461				adapter->tx_timeout_factor = 16;2462				break;2463			case SPEED_100:2464				/* maybe add some timeout factor ? */2465				break;2466			}2467 2468			/* enable transmits in the hardware */2469			tctl = er32(TCTL);2470			tctl |= E1000_TCTL_EN;2471			ew32(TCTL, tctl);2472 2473			netif_carrier_on(netdev);2474			if (!test_bit(__E1000_DOWN, &adapter->flags))2475				schedule_delayed_work(&adapter->phy_info_task,2476						      2 * HZ);2477			adapter->smartspeed = 0;2478		}2479	} else {2480		if (netif_carrier_ok(netdev)) {2481			adapter->link_speed = 0;2482			adapter->link_duplex = 0;2483			pr_info("%s NIC Link is Down\n",2484				netdev->name);2485			netif_carrier_off(netdev);2486 2487			if (!test_bit(__E1000_DOWN, &adapter->flags))2488				schedule_delayed_work(&adapter->phy_info_task,2489						      2 * HZ);2490		}2491 2492		e1000_smartspeed(adapter);2493	}2494 2495link_up:2496	e1000_update_stats(adapter);2497 2498	hw->tx_packet_delta = adapter->stats.tpt - adapter->tpt_old;2499	adapter->tpt_old = adapter->stats.tpt;2500	hw->collision_delta = adapter->stats.colc - adapter->colc_old;2501	adapter->colc_old = adapter->stats.colc;2502 2503	adapter->gorcl = adapter->stats.gorcl - adapter->gorcl_old;2504	adapter->gorcl_old = adapter->stats.gorcl;2505	adapter->gotcl = adapter->stats.gotcl - adapter->gotcl_old;2506	adapter->gotcl_old = adapter->stats.gotcl;2507 2508	e1000_update_adaptive(hw);2509 2510	if (!netif_carrier_ok(netdev)) {2511		if (E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {2512			/* We've lost link, so the controller stops DMA,2513			 * but we've got queued Tx work that's never going2514			 * to get done, so reset controller to flush Tx.2515			 * (Do the reset outside of interrupt context).2516			 */2517			adapter->tx_timeout_count++;2518			schedule_work(&adapter->reset_task);2519			/* exit immediately since reset is imminent */2520			return;2521		}2522	}2523 2524	/* Simple mode for Interrupt Throttle Rate (ITR) */2525	if (hw->mac_type >= e1000_82540 && adapter->itr_setting == 4) {2526		/* Symmetric Tx/Rx gets a reduced ITR=2000;2527		 * Total asymmetrical Tx or Rx gets ITR=8000;2528		 * everyone else is between 2000-8000.2529		 */2530		u32 goc = (adapter->gotcl + adapter->gorcl) / 10000;2531		u32 dif = (adapter->gotcl > adapter->gorcl ?2532			    adapter->gotcl - adapter->gorcl :2533			    adapter->gorcl - adapter->gotcl) / 10000;2534		u32 itr = goc > 0 ? (dif * 6000 / goc + 2000) : 8000;2535 2536		ew32(ITR, 1000000000 / (itr * 256));2537	}2538 2539	/* Cause software interrupt to ensure rx ring is cleaned */2540	ew32(ICS, E1000_ICS_RXDMT0);2541 2542	/* Force detection of hung controller every watchdog period */2543	adapter->detect_tx_hung = true;2544 2545	/* Reschedule the task */2546	if (!test_bit(__E1000_DOWN, &adapter->flags))2547		schedule_delayed_work(&adapter->watchdog_task, 2 * HZ);2548}2549 2550enum latency_range {2551	lowest_latency = 0,2552	low_latency = 1,2553	bulk_latency = 2,2554	latency_invalid = 2552555};2556 2557/**2558 * e1000_update_itr - update the dynamic ITR value based on statistics2559 * @adapter: pointer to adapter2560 * @itr_setting: current adapter->itr2561 * @packets: the number of packets during this measurement interval2562 * @bytes: the number of bytes during this measurement interval2563 *2564 *      Stores a new ITR value based on packets and byte2565 *      counts during the last interrupt.  The advantage of per interrupt2566 *      computation is faster updates and more accurate ITR for the current2567 *      traffic pattern.  Constants in this function were computed2568 *      based on theoretical maximum wire speed and thresholds were set based2569 *      on testing data as well as attempting to minimize response time2570 *      while increasing bulk throughput.2571 *      this functionality is controlled by the InterruptThrottleRate module2572 *      parameter (see e1000_param.c)2573 **/2574static unsigned int e1000_update_itr(struct e1000_adapter *adapter,2575				     u16 itr_setting, int packets, int bytes)2576{2577	unsigned int retval = itr_setting;2578	struct e1000_hw *hw = &adapter->hw;2579 2580	if (unlikely(hw->mac_type < e1000_82540))2581		goto update_itr_done;2582 2583	if (packets == 0)2584		goto update_itr_done;2585 2586	switch (itr_setting) {2587	case lowest_latency:2588		/* jumbo frames get bulk treatment*/2589		if (bytes/packets > 8000)2590			retval = bulk_latency;2591		else if ((packets < 5) && (bytes > 512))2592			retval = low_latency;2593		break;2594	case low_latency:  /* 50 usec aka 20000 ints/s */2595		if (bytes > 10000) {2596			/* jumbo frames need bulk latency setting */2597			if (bytes/packets > 8000)2598				retval = bulk_latency;2599			else if ((packets < 10) || ((bytes/packets) > 1200))2600				retval = bulk_latency;2601			else if ((packets > 35))2602				retval = lowest_latency;2603		} else if (bytes/packets > 2000)2604			retval = bulk_latency;2605		else if (packets <= 2 && bytes < 512)2606			retval = lowest_latency;2607		break;2608	case bulk_latency: /* 250 usec aka 4000 ints/s */2609		if (bytes > 25000) {2610			if (packets > 35)2611				retval = low_latency;2612		} else if (bytes < 6000) {2613			retval = low_latency;2614		}2615		break;2616	}2617 2618update_itr_done:2619	return retval;2620}2621 2622static void e1000_set_itr(struct e1000_adapter *adapter)2623{2624	struct e1000_hw *hw = &adapter->hw;2625	u16 current_itr;2626	u32 new_itr = adapter->itr;2627 2628	if (unlikely(hw->mac_type < e1000_82540))2629		return;2630 2631	/* for non-gigabit speeds, just fix the interrupt rate at 4000 */2632	if (unlikely(adapter->link_speed != SPEED_1000)) {2633		new_itr = 4000;2634		goto set_itr_now;2635	}2636 2637	adapter->tx_itr = e1000_update_itr(adapter, adapter->tx_itr,2638					   adapter->total_tx_packets,2639					   adapter->total_tx_bytes);2640	/* conservative mode (itr 3) eliminates the lowest_latency setting */2641	if (adapter->itr_setting == 3 && adapter->tx_itr == lowest_latency)2642		adapter->tx_itr = low_latency;2643 2644	adapter->rx_itr = e1000_update_itr(adapter, adapter->rx_itr,2645					   adapter->total_rx_packets,2646					   adapter->total_rx_bytes);2647	/* conservative mode (itr 3) eliminates the lowest_latency setting */2648	if (adapter->itr_setting == 3 && adapter->rx_itr == lowest_latency)2649		adapter->rx_itr = low_latency;2650 2651	current_itr = max(adapter->rx_itr, adapter->tx_itr);2652 2653	switch (current_itr) {2654	/* counts and packets in update_itr are dependent on these numbers */2655	case lowest_latency:2656		new_itr = 70000;2657		break;2658	case low_latency:2659		new_itr = 20000; /* aka hwitr = ~200 */2660		break;2661	case bulk_latency:2662		new_itr = 4000;2663		break;2664	default:2665		break;2666	}2667 2668set_itr_now:2669	if (new_itr != adapter->itr) {2670		/* this attempts to bias the interrupt rate towards Bulk2671		 * by adding intermediate steps when interrupt rate is2672		 * increasing2673		 */2674		new_itr = new_itr > adapter->itr ?2675			  min(adapter->itr + (new_itr >> 2), new_itr) :2676			  new_itr;2677		adapter->itr = new_itr;2678		ew32(ITR, 1000000000 / (new_itr * 256));2679	}2680}2681 2682#define E1000_TX_FLAGS_CSUM		0x000000012683#define E1000_TX_FLAGS_VLAN		0x000000022684#define E1000_TX_FLAGS_TSO		0x000000042685#define E1000_TX_FLAGS_IPV4		0x000000082686#define E1000_TX_FLAGS_NO_FCS		0x000000102687#define E1000_TX_FLAGS_VLAN_MASK	0xffff00002688#define E1000_TX_FLAGS_VLAN_SHIFT	162689 2690static int e1000_tso(struct e1000_adapter *adapter,2691		     struct e1000_tx_ring *tx_ring, struct sk_buff *skb,2692		     __be16 protocol)2693{2694	struct e1000_context_desc *context_desc;2695	struct e1000_tx_buffer *buffer_info;2696	unsigned int i;2697	u32 cmd_length = 0;2698	u16 ipcse = 0, tucse, mss;2699	u8 ipcss, ipcso, tucss, tucso, hdr_len;2700 2701	if (skb_is_gso(skb)) {2702		int err;2703 2704		err = skb_cow_head(skb, 0);2705		if (err < 0)2706			return err;2707 2708		hdr_len = skb_tcp_all_headers(skb);2709		mss = skb_shinfo(skb)->gso_size;2710		if (protocol == htons(ETH_P_IP)) {2711			struct iphdr *iph = ip_hdr(skb);2712			iph->tot_len = 0;2713			iph->check = 0;2714			tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,2715								 iph->daddr, 0,2716								 IPPROTO_TCP,2717								 0);2718			cmd_length = E1000_TXD_CMD_IP;2719			ipcse = skb_transport_offset(skb) - 1;2720		} else if (skb_is_gso_v6(skb)) {2721			tcp_v6_gso_csum_prep(skb);2722			ipcse = 0;2723		}2724		ipcss = skb_network_offset(skb);2725		ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data;2726		tucss = skb_transport_offset(skb);2727		tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data;2728		tucse = 0;2729 2730		cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE |2731			       E1000_TXD_CMD_TCP | (skb->len - (hdr_len)));2732 2733		i = tx_ring->next_to_use;2734		context_desc = E1000_CONTEXT_DESC(*tx_ring, i);2735		buffer_info = &tx_ring->buffer_info[i];2736 2737		context_desc->lower_setup.ip_fields.ipcss  = ipcss;2738		context_desc->lower_setup.ip_fields.ipcso  = ipcso;2739		context_desc->lower_setup.ip_fields.ipcse  = cpu_to_le16(ipcse);2740		context_desc->upper_setup.tcp_fields.tucss = tucss;2741		context_desc->upper_setup.tcp_fields.tucso = tucso;2742		context_desc->upper_setup.tcp_fields.tucse = cpu_to_le16(tucse);2743		context_desc->tcp_seg_setup.fields.mss     = cpu_to_le16(mss);2744		context_desc->tcp_seg_setup.fields.hdr_len = hdr_len;2745		context_desc->cmd_and_length = cpu_to_le32(cmd_length);2746 2747		buffer_info->time_stamp = jiffies;2748		buffer_info->next_to_watch = i;2749 2750		if (++i == tx_ring->count)2751			i = 0;2752 2753		tx_ring->next_to_use = i;2754 2755		return true;2756	}2757	return false;2758}2759 2760static bool e1000_tx_csum(struct e1000_adapter *adapter,2761			  struct e1000_tx_ring *tx_ring, struct sk_buff *skb,2762			  __be16 protocol)2763{2764	struct e1000_context_desc *context_desc;2765	struct e1000_tx_buffer *buffer_info;2766	unsigned int i;2767	u8 css;2768	u32 cmd_len = E1000_TXD_CMD_DEXT;2769 2770	if (skb->ip_summed != CHECKSUM_PARTIAL)2771		return false;2772 2773	switch (protocol) {2774	case cpu_to_be16(ETH_P_IP):2775		if (ip_hdr(skb)->protocol == IPPROTO_TCP)2776			cmd_len |= E1000_TXD_CMD_TCP;2777		break;2778	case cpu_to_be16(ETH_P_IPV6):2779		/* XXX not handling all IPV6 headers */2780		if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)2781			cmd_len |= E1000_TXD_CMD_TCP;2782		break;2783	default:2784		if (unlikely(net_ratelimit()))2785			e_warn(drv, "checksum_partial proto=%x!\n",2786			       skb->protocol);2787		break;2788	}2789 2790	css = skb_checksum_start_offset(skb);2791 2792	i = tx_ring->next_to_use;2793	buffer_info = &tx_ring->buffer_info[i];2794	context_desc = E1000_CONTEXT_DESC(*tx_ring, i);2795 2796	context_desc->lower_setup.ip_config = 0;2797	context_desc->upper_setup.tcp_fields.tucss = css;2798	context_desc->upper_setup.tcp_fields.tucso =2799		css + skb->csum_offset;2800	context_desc->upper_setup.tcp_fields.tucse = 0;2801	context_desc->tcp_seg_setup.data = 0;2802	context_desc->cmd_and_length = cpu_to_le32(cmd_len);2803 2804	buffer_info->time_stamp = jiffies;2805	buffer_info->next_to_watch = i;2806 2807	if (unlikely(++i == tx_ring->count))2808		i = 0;2809 2810	tx_ring->next_to_use = i;2811 2812	return true;2813}2814 2815#define E1000_MAX_TXD_PWR	122816#define E1000_MAX_DATA_PER_TXD	(1<<E1000_MAX_TXD_PWR)2817 2818static int e1000_tx_map(struct e1000_adapter *adapter,2819			struct e1000_tx_ring *tx_ring,2820			struct sk_buff *skb, unsigned int first,2821			unsigned int max_per_txd, unsigned int nr_frags,2822			unsigned int mss)2823{2824	struct e1000_hw *hw = &adapter->hw;2825	struct pci_dev *pdev = adapter->pdev;2826	struct e1000_tx_buffer *buffer_info;2827	unsigned int len = skb_headlen(skb);2828	unsigned int offset = 0, size, count = 0, i;2829	unsigned int f, bytecount, segs;2830 2831	i = tx_ring->next_to_use;2832 2833	while (len) {2834		buffer_info = &tx_ring->buffer_info[i];2835		size = min(len, max_per_txd);2836		/* Workaround for Controller erratum --2837		 * descriptor for non-tso packet in a linear SKB that follows a2838		 * tso gets written back prematurely before the data is fully2839		 * DMA'd to the controller2840		 */2841		if (!skb->data_len && tx_ring->last_tx_tso &&2842		    !skb_is_gso(skb)) {2843			tx_ring->last_tx_tso = false;2844			size -= 4;2845		}2846 2847		/* Workaround for premature desc write-backs2848		 * in TSO mode.  Append 4-byte sentinel desc2849		 */2850		if (unlikely(mss && !nr_frags && size == len && size > 8))2851			size -= 4;2852		/* work-around for errata 10 and it applies2853		 * to all controllers in PCI-X mode2854		 * The fix is to make sure that the first descriptor of a2855		 * packet is smaller than 2048 - 16 - 16 (or 2016) bytes2856		 */2857		if (unlikely((hw->bus_type == e1000_bus_type_pcix) &&2858			     (size > 2015) && count == 0))2859			size = 2015;2860 2861		/* Workaround for potential 82544 hang in PCI-X.  Avoid2862		 * terminating buffers within evenly-aligned dwords.2863		 */2864		if (unlikely(adapter->pcix_82544 &&2865		   !((unsigned long)(skb->data + offset + size - 1) & 4) &&2866		   size > 4))2867			size -= 4;2868 2869		buffer_info->length = size;2870		/* set time_stamp *before* dma to help avoid a possible race */2871		buffer_info->time_stamp = jiffies;2872		buffer_info->mapped_as_page = false;2873		buffer_info->dma = dma_map_single(&pdev->dev,2874						  skb->data + offset,2875						  size, DMA_TO_DEVICE);2876		if (dma_mapping_error(&pdev->dev, buffer_info->dma))2877			goto dma_error;2878		buffer_info->next_to_watch = i;2879 2880		len -= size;2881		offset += size;2882		count++;2883		if (len) {2884			i++;2885			if (unlikely(i == tx_ring->count))2886				i = 0;2887		}2888	}2889 2890	for (f = 0; f < nr_frags; f++) {2891		const skb_frag_t *frag = &skb_shinfo(skb)->frags[f];2892 2893		len = skb_frag_size(frag);2894		offset = 0;2895 2896		while (len) {2897			unsigned long bufend;2898			i++;2899			if (unlikely(i == tx_ring->count))2900				i = 0;2901 2902			buffer_info = &tx_ring->buffer_info[i];2903			size = min(len, max_per_txd);2904			/* Workaround for premature desc write-backs2905			 * in TSO mode.  Append 4-byte sentinel desc2906			 */2907			if (unlikely(mss && f == (nr_frags-1) &&2908			    size == len && size > 8))2909				size -= 4;2910			/* Workaround for potential 82544 hang in PCI-X.2911			 * Avoid terminating buffers within evenly-aligned2912			 * dwords.2913			 */2914			bufend = (unsigned long)2915				page_to_phys(skb_frag_page(frag));2916			bufend += offset + size - 1;2917			if (unlikely(adapter->pcix_82544 &&2918				     !(bufend & 4) &&2919				     size > 4))2920				size -= 4;2921 2922			buffer_info->length = size;2923			buffer_info->time_stamp = jiffies;2924			buffer_info->mapped_as_page = true;2925			buffer_info->dma = skb_frag_dma_map(&pdev->dev, frag,2926						offset, size, DMA_TO_DEVICE);2927			if (dma_mapping_error(&pdev->dev, buffer_info->dma))2928				goto dma_error;2929			buffer_info->next_to_watch = i;2930 2931			len -= size;2932			offset += size;2933			count++;2934		}2935	}2936 2937	segs = skb_shinfo(skb)->gso_segs ?: 1;2938	/* multiply data chunks by size of headers */2939	bytecount = ((segs - 1) * skb_headlen(skb)) + skb->len;2940 2941	tx_ring->buffer_info[i].skb = skb;2942	tx_ring->buffer_info[i].segs = segs;2943	tx_ring->buffer_info[i].bytecount = bytecount;2944	tx_ring->buffer_info[first].next_to_watch = i;2945 2946	return count;2947 2948dma_error:2949	dev_err(&pdev->dev, "TX DMA map failed\n");2950	buffer_info->dma = 0;2951	if (count)2952		count--;2953 2954	while (count--) {2955		if (i == 0)2956			i += tx_ring->count;2957		i--;2958		buffer_info = &tx_ring->buffer_info[i];2959		e1000_unmap_and_free_tx_resource(adapter, buffer_info, 0);2960	}2961 2962	return 0;2963}2964 2965static void e1000_tx_queue(struct e1000_adapter *adapter,2966			   struct e1000_tx_ring *tx_ring, int tx_flags,2967			   int count)2968{2969	struct e1000_tx_desc *tx_desc = NULL;2970	struct e1000_tx_buffer *buffer_info;2971	u32 txd_upper = 0, txd_lower = E1000_TXD_CMD_IFCS;2972	unsigned int i;2973 2974	if (likely(tx_flags & E1000_TX_FLAGS_TSO)) {2975		txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D |2976			     E1000_TXD_CMD_TSE;2977		txd_upper |= E1000_TXD_POPTS_TXSM << 8;2978 2979		if (likely(tx_flags & E1000_TX_FLAGS_IPV4))2980			txd_upper |= E1000_TXD_POPTS_IXSM << 8;2981	}2982 2983	if (likely(tx_flags & E1000_TX_FLAGS_CSUM)) {2984		txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;2985		txd_upper |= E1000_TXD_POPTS_TXSM << 8;2986	}2987 2988	if (unlikely(tx_flags & E1000_TX_FLAGS_VLAN)) {2989		txd_lower |= E1000_TXD_CMD_VLE;2990		txd_upper |= (tx_flags & E1000_TX_FLAGS_VLAN_MASK);2991	}2992 2993	if (unlikely(tx_flags & E1000_TX_FLAGS_NO_FCS))2994		txd_lower &= ~(E1000_TXD_CMD_IFCS);2995 2996	i = tx_ring->next_to_use;2997 2998	while (count--) {2999		buffer_info = &tx_ring->buffer_info[i];3000		tx_desc = E1000_TX_DESC(*tx_ring, i);3001		tx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);3002		tx_desc->lower.data =3003			cpu_to_le32(txd_lower | buffer_info->length);3004		tx_desc->upper.data = cpu_to_le32(txd_upper);3005		if (unlikely(++i == tx_ring->count))3006			i = 0;3007	}3008 3009	tx_desc->lower.data |= cpu_to_le32(adapter->txd_cmd);3010 3011	/* txd_cmd re-enables FCS, so we'll re-disable it here as desired. */3012	if (unlikely(tx_flags & E1000_TX_FLAGS_NO_FCS))3013		tx_desc->lower.data &= ~(cpu_to_le32(E1000_TXD_CMD_IFCS));3014 3015	/* Force memory writes to complete before letting h/w3016	 * know there are new descriptors to fetch.  (Only3017	 * applicable for weak-ordered memory model archs,3018	 * such as IA-64).3019	 */3020	dma_wmb();3021 3022	tx_ring->next_to_use = i;3023}3024 3025/* 82547 workaround to avoid controller hang in half-duplex environment.3026 * The workaround is to avoid queuing a large packet that would span3027 * the internal Tx FIFO ring boundary by notifying the stack to resend3028 * the packet at a later time.  This gives the Tx FIFO an opportunity to3029 * flush all packets.  When that occurs, we reset the Tx FIFO pointers3030 * to the beginning of the Tx FIFO.3031 */3032 3033#define E1000_FIFO_HDR			0x103034#define E1000_82547_PAD_LEN		0x3E03035 3036static int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,3037				       struct sk_buff *skb)3038{3039	u32 fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head;3040	u32 skb_fifo_len = skb->len + E1000_FIFO_HDR;3041 3042	skb_fifo_len = ALIGN(skb_fifo_len, E1000_FIFO_HDR);3043 3044	if (adapter->link_duplex != HALF_DUPLEX)3045		goto no_fifo_stall_required;3046 3047	if (atomic_read(&adapter->tx_fifo_stall))3048		return 1;3049 3050	if (skb_fifo_len >= (E1000_82547_PAD_LEN + fifo_space)) {3051		atomic_set(&adapter->tx_fifo_stall, 1);3052		return 1;3053	}3054 3055no_fifo_stall_required:3056	adapter->tx_fifo_head += skb_fifo_len;3057	if (adapter->tx_fifo_head >= adapter->tx_fifo_size)3058		adapter->tx_fifo_head -= adapter->tx_fifo_size;3059	return 0;3060}3061 3062static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)3063{3064	struct e1000_adapter *adapter = netdev_priv(netdev);3065	struct e1000_tx_ring *tx_ring = adapter->tx_ring;3066 3067	netif_stop_queue(netdev);3068	/* Herbert's original patch had:3069	 *  smp_mb__after_netif_stop_queue();3070	 * but since that doesn't exist yet, just open code it.3071	 */3072	smp_mb();3073 3074	/* We need to check again in a case another CPU has just3075	 * made room available.3076	 */3077	if (likely(E1000_DESC_UNUSED(tx_ring) < size))3078		return -EBUSY;3079 3080	/* A reprieve! */3081	netif_start_queue(netdev);3082	++adapter->restart_queue;3083	return 0;3084}3085 3086static int e1000_maybe_stop_tx(struct net_device *netdev,3087			       struct e1000_tx_ring *tx_ring, int size)3088{3089	if (likely(E1000_DESC_UNUSED(tx_ring) >= size))3090		return 0;3091	return __e1000_maybe_stop_tx(netdev, size);3092}3093 3094#define TXD_USE_COUNT(S, X) (((S) + ((1 << (X)) - 1)) >> (X))3095static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,3096				    struct net_device *netdev)3097{3098	struct e1000_adapter *adapter = netdev_priv(netdev);3099	struct e1000_hw *hw = &adapter->hw;3100	struct e1000_tx_ring *tx_ring;3101	unsigned int first, max_per_txd = E1000_MAX_DATA_PER_TXD;3102	unsigned int max_txd_pwr = E1000_MAX_TXD_PWR;3103	unsigned int tx_flags = 0;3104	unsigned int len = skb_headlen(skb);3105	unsigned int nr_frags;3106	unsigned int mss;3107	int count = 0;3108	int tso;3109	unsigned int f;3110	__be16 protocol = vlan_get_protocol(skb);3111 3112	/* This goes back to the question of how to logically map a Tx queue3113	 * to a flow.  Right now, performance is impacted slightly negatively3114	 * if using multiple Tx queues.  If the stack breaks away from a3115	 * single qdisc implementation, we can look at this again.3116	 */3117	tx_ring = adapter->tx_ring;3118 3119	/* On PCI/PCI-X HW, if packet size is less than ETH_ZLEN,3120	 * packets may get corrupted during padding by HW.3121	 * To WA this issue, pad all small packets manually.3122	 */3123	if (eth_skb_pad(skb))3124		return NETDEV_TX_OK;3125 3126	mss = skb_shinfo(skb)->gso_size;3127	/* The controller does a simple calculation to3128	 * make sure there is enough room in the FIFO before3129	 * initiating the DMA for each buffer.  The calc is:3130	 * 4 = ceil(buffer len/mss).  To make sure we don't3131	 * overrun the FIFO, adjust the max buffer len if mss3132	 * drops.3133	 */3134	if (mss) {3135		u8 hdr_len;3136		max_per_txd = min(mss << 2, max_per_txd);3137		max_txd_pwr = fls(max_per_txd) - 1;3138 3139		hdr_len = skb_tcp_all_headers(skb);3140		if (skb->data_len && hdr_len == len) {3141			switch (hw->mac_type) {3142			case e1000_82544: {3143				unsigned int pull_size;3144 3145				/* Make sure we have room to chop off 4 bytes,3146				 * and that the end alignment will work out to3147				 * this hardware's requirements3148				 * NOTE: this is a TSO only workaround3149				 * if end byte alignment not correct move us3150				 * into the next dword3151				 */3152				if ((unsigned long)(skb_tail_pointer(skb) - 1)3153				    & 4)3154					break;3155				pull_size = min((unsigned int)4, skb->data_len);3156				if (!__pskb_pull_tail(skb, pull_size)) {3157					e_err(drv, "__pskb_pull_tail "3158					      "failed.\n");3159					dev_kfree_skb_any(skb);3160					return NETDEV_TX_OK;3161				}3162				len = skb_headlen(skb);3163				break;3164			}3165			default:3166				/* do nothing */3167				break;3168			}3169		}3170	}3171 3172	/* reserve a descriptor for the offload context */3173	if ((mss) || (skb->ip_summed == CHECKSUM_PARTIAL))3174		count++;3175	count++;3176 3177	/* Controller Erratum workaround */3178	if (!skb->data_len && tx_ring->last_tx_tso && !skb_is_gso(skb))3179		count++;3180 3181	count += TXD_USE_COUNT(len, max_txd_pwr);3182 3183	if (adapter->pcix_82544)3184		count++;3185 3186	/* work-around for errata 10 and it applies to all controllers3187	 * in PCI-X mode, so add one more descriptor to the count3188	 */3189	if (unlikely((hw->bus_type == e1000_bus_type_pcix) &&3190			(len > 2015)))3191		count++;3192 3193	nr_frags = skb_shinfo(skb)->nr_frags;3194	for (f = 0; f < nr_frags; f++)3195		count += TXD_USE_COUNT(skb_frag_size(&skb_shinfo(skb)->frags[f]),3196				       max_txd_pwr);3197	if (adapter->pcix_82544)3198		count += nr_frags;3199 3200	/* need: count + 2 desc gap to keep tail from touching3201	 * head, otherwise try next time3202	 */3203	if (unlikely(e1000_maybe_stop_tx(netdev, tx_ring, count + 2)))3204		return NETDEV_TX_BUSY;3205 3206	if (unlikely((hw->mac_type == e1000_82547) &&3207		     (e1000_82547_fifo_workaround(adapter, skb)))) {3208		netif_stop_queue(netdev);3209		if (!test_bit(__E1000_DOWN, &adapter->flags))3210			schedule_delayed_work(&adapter->fifo_stall_task, 1);3211		return NETDEV_TX_BUSY;3212	}3213 3214	if (skb_vlan_tag_present(skb)) {3215		tx_flags |= E1000_TX_FLAGS_VLAN;3216		tx_flags |= (skb_vlan_tag_get(skb) <<3217			     E1000_TX_FLAGS_VLAN_SHIFT);3218	}3219 3220	first = tx_ring->next_to_use;3221 3222	tso = e1000_tso(adapter, tx_ring, skb, protocol);3223	if (tso < 0) {3224		dev_kfree_skb_any(skb);3225		return NETDEV_TX_OK;3226	}3227 3228	if (likely(tso)) {3229		if (likely(hw->mac_type != e1000_82544))3230			tx_ring->last_tx_tso = true;3231		tx_flags |= E1000_TX_FLAGS_TSO;3232	} else if (likely(e1000_tx_csum(adapter, tx_ring, skb, protocol)))3233		tx_flags |= E1000_TX_FLAGS_CSUM;3234 3235	if (protocol == htons(ETH_P_IP))3236		tx_flags |= E1000_TX_FLAGS_IPV4;3237 3238	if (unlikely(skb->no_fcs))3239		tx_flags |= E1000_TX_FLAGS_NO_FCS;3240 3241	count = e1000_tx_map(adapter, tx_ring, skb, first, max_per_txd,3242			     nr_frags, mss);3243 3244	if (count) {3245		/* The descriptors needed is higher than other Intel drivers3246		 * due to a number of workarounds.  The breakdown is below:3247		 * Data descriptors: MAX_SKB_FRAGS + 13248		 * Context Descriptor: 13249		 * Keep head from touching tail: 23250		 * Workarounds: 33251		 */3252		int desc_needed = MAX_SKB_FRAGS + 7;3253 3254		netdev_sent_queue(netdev, skb->len);3255		skb_tx_timestamp(skb);3256 3257		e1000_tx_queue(adapter, tx_ring, tx_flags, count);3258 3259		/* 82544 potentially requires twice as many data descriptors3260		 * in order to guarantee buffers don't end on evenly-aligned3261		 * dwords3262		 */3263		if (adapter->pcix_82544)3264			desc_needed += MAX_SKB_FRAGS + 1;3265 3266		/* Make sure there is space in the ring for the next send. */3267		e1000_maybe_stop_tx(netdev, tx_ring, desc_needed);3268 3269		if (!netdev_xmit_more() ||3270		    netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) {3271			writel(tx_ring->next_to_use, hw->hw_addr + tx_ring->tdt);3272		}3273	} else {3274		dev_kfree_skb_any(skb);3275		tx_ring->buffer_info[first].time_stamp = 0;3276		tx_ring->next_to_use = first;3277	}3278 3279	return NETDEV_TX_OK;3280}3281 3282#define NUM_REGS 38 /* 1 based count */3283static void e1000_regdump(struct e1000_adapter *adapter)3284{3285	struct e1000_hw *hw = &adapter->hw;3286	u32 regs[NUM_REGS];3287	u32 *regs_buff = regs;3288	int i = 0;3289 3290	static const char * const reg_name[] = {3291		"CTRL",  "STATUS",3292		"RCTL", "RDLEN", "RDH", "RDT", "RDTR",3293		"TCTL", "TDBAL", "TDBAH", "TDLEN", "TDH", "TDT",3294		"TIDV", "TXDCTL", "TADV", "TARC0",3295		"TDBAL1", "TDBAH1", "TDLEN1", "TDH1", "TDT1",3296		"TXDCTL1", "TARC1",3297		"CTRL_EXT", "ERT", "RDBAL", "RDBAH",3298		"TDFH", "TDFT", "TDFHS", "TDFTS", "TDFPC",3299		"RDFH", "RDFT", "RDFHS", "RDFTS", "RDFPC"3300	};3301 3302	regs_buff[0]  = er32(CTRL);3303	regs_buff[1]  = er32(STATUS);3304 3305	regs_buff[2]  = er32(RCTL);3306	regs_buff[3]  = er32(RDLEN);3307	regs_buff[4]  = er32(RDH);3308	regs_buff[5]  = er32(RDT);3309	regs_buff[6]  = er32(RDTR);3310 3311	regs_buff[7]  = er32(TCTL);3312	regs_buff[8]  = er32(TDBAL);3313	regs_buff[9]  = er32(TDBAH);3314	regs_buff[10] = er32(TDLEN);3315	regs_buff[11] = er32(TDH);3316	regs_buff[12] = er32(TDT);3317	regs_buff[13] = er32(TIDV);3318	regs_buff[14] = er32(TXDCTL);3319	regs_buff[15] = er32(TADV);3320	regs_buff[16] = er32(TARC0);3321 3322	regs_buff[17] = er32(TDBAL1);3323	regs_buff[18] = er32(TDBAH1);3324	regs_buff[19] = er32(TDLEN1);3325	regs_buff[20] = er32(TDH1);3326	regs_buff[21] = er32(TDT1);3327	regs_buff[22] = er32(TXDCTL1);3328	regs_buff[23] = er32(TARC1);3329	regs_buff[24] = er32(CTRL_EXT);3330	regs_buff[25] = er32(ERT);3331	regs_buff[26] = er32(RDBAL0);3332	regs_buff[27] = er32(RDBAH0);3333	regs_buff[28] = er32(TDFH);3334	regs_buff[29] = er32(TDFT);3335	regs_buff[30] = er32(TDFHS);3336	regs_buff[31] = er32(TDFTS);3337	regs_buff[32] = er32(TDFPC);3338	regs_buff[33] = er32(RDFH);3339	regs_buff[34] = er32(RDFT);3340	regs_buff[35] = er32(RDFHS);3341	regs_buff[36] = er32(RDFTS);3342	regs_buff[37] = er32(RDFPC);3343 3344	pr_info("Register dump\n");3345	for (i = 0; i < NUM_REGS; i++)3346		pr_info("%-15s  %08x\n", reg_name[i], regs_buff[i]);3347}3348 3349/*3350 * e1000_dump: Print registers, tx ring and rx ring3351 */3352static void e1000_dump(struct e1000_adapter *adapter)3353{3354	/* this code doesn't handle multiple rings */3355	struct e1000_tx_ring *tx_ring = adapter->tx_ring;3356	struct e1000_rx_ring *rx_ring = adapter->rx_ring;3357	int i;3358 3359	if (!netif_msg_hw(adapter))3360		return;3361 3362	/* Print Registers */3363	e1000_regdump(adapter);3364 3365	/* transmit dump */3366	pr_info("TX Desc ring0 dump\n");3367 3368	/* Transmit Descriptor Formats - DEXT[29] is 0 (Legacy) or 1 (Extended)3369	 *3370	 * Legacy Transmit Descriptor3371	 *   +--------------------------------------------------------------+3372	 * 0 |         Buffer Address [63:0] (Reserved on Write Back)       |3373	 *   +--------------------------------------------------------------+3374	 * 8 | Special  |    CSS     | Status |  CMD    |  CSO   |  Length  |3375	 *   +--------------------------------------------------------------+3376	 *   63       48 47        36 35    32 31     24 23    16 15        03377	 *3378	 * Extended Context Descriptor (DTYP=0x0) for TSO or checksum offload3379	 *   63      48 47    40 39       32 31             16 15    8 7      03380	 *   +----------------------------------------------------------------+3381	 * 0 |  TUCSE  | TUCS0  |   TUCSS   |     IPCSE       | IPCS0 | IPCSS |3382	 *   +----------------------------------------------------------------+3383	 * 8 |   MSS   | HDRLEN | RSV | STA | TUCMD | DTYP |      PAYLEN      |3384	 *   +----------------------------------------------------------------+3385	 *   63      48 47    40 39 36 35 32 31   24 23  20 19                03386	 *3387	 * Extended Data Descriptor (DTYP=0x1)3388	 *   +----------------------------------------------------------------+3389	 * 0 |                     Buffer Address [63:0]                      |3390	 *   +----------------------------------------------------------------+3391	 * 8 | VLAN tag |  POPTS  | Rsvd | Status | Command | DTYP |  DTALEN  |3392	 *   +----------------------------------------------------------------+3393	 *   63       48 47     40 39  36 35    32 31     24 23  20 19        03394	 */3395	pr_info("Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma       ] leng  ntw timestmp         bi->skb\n");3396	pr_info("Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen] [bi->dma       ] leng  ntw timestmp         bi->skb\n");3397 3398	if (!netif_msg_tx_done(adapter))3399		goto rx_ring_summary;3400 3401	for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) {3402		struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*tx_ring, i);3403		struct e1000_tx_buffer *buffer_info = &tx_ring->buffer_info[i];3404		struct my_u { __le64 a; __le64 b; };3405		struct my_u *u = (struct my_u *)tx_desc;3406		const char *type;3407 3408		if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean)3409			type = "NTC/U";3410		else if (i == tx_ring->next_to_use)3411			type = "NTU";3412		else if (i == tx_ring->next_to_clean)3413			type = "NTC";3414		else3415			type = "";3416 3417		pr_info("T%c[0x%03X]    %016llX %016llX %016llX %04X  %3X %016llX %p %s\n",3418			((le64_to_cpu(u->b) & (1<<20)) ? 'd' : 'c'), i,3419			le64_to_cpu(u->a), le64_to_cpu(u->b),3420			(u64)buffer_info->dma, buffer_info->length,3421			buffer_info->next_to_watch,3422			(u64)buffer_info->time_stamp, buffer_info->skb, type);3423	}3424 3425rx_ring_summary:3426	/* receive dump */3427	pr_info("\nRX Desc ring dump\n");3428 3429	/* Legacy Receive Descriptor Format3430	 *3431	 * +-----------------------------------------------------+3432	 * |                Buffer Address [63:0]                |3433	 * +-----------------------------------------------------+3434	 * | VLAN Tag | Errors | Status 0 | Packet csum | Length |3435	 * +-----------------------------------------------------+3436	 * 63       48 47    40 39      32 31         16 15      03437	 */3438	pr_info("R[desc]      [address 63:0  ] [vl er S cks ln] [bi->dma       ] [bi->skb]\n");3439 3440	if (!netif_msg_rx_status(adapter))3441		goto exit;3442 3443	for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) {3444		struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rx_ring, i);3445		struct e1000_rx_buffer *buffer_info = &rx_ring->buffer_info[i];3446		struct my_u { __le64 a; __le64 b; };3447		struct my_u *u = (struct my_u *)rx_desc;3448		const char *type;3449 3450		if (i == rx_ring->next_to_use)3451			type = "NTU";3452		else if (i == rx_ring->next_to_clean)3453			type = "NTC";3454		else3455			type = "";3456 3457		pr_info("R[0x%03X]     %016llX %016llX %016llX %p %s\n",3458			i, le64_to_cpu(u->a), le64_to_cpu(u->b),3459			(u64)buffer_info->dma, buffer_info->rxbuf.data, type);3460	} /* for */3461 3462	/* dump the descriptor caches */3463	/* rx */3464	pr_info("Rx descriptor cache in 64bit format\n");3465	for (i = 0x6000; i <= 0x63FF ; i += 0x10) {3466		pr_info("R%04X: %08X|%08X %08X|%08X\n",3467			i,3468			readl(adapter->hw.hw_addr + i+4),3469			readl(adapter->hw.hw_addr + i),3470			readl(adapter->hw.hw_addr + i+12),3471			readl(adapter->hw.hw_addr + i+8));3472	}3473	/* tx */3474	pr_info("Tx descriptor cache in 64bit format\n");3475	for (i = 0x7000; i <= 0x73FF ; i += 0x10) {3476		pr_info("T%04X: %08X|%08X %08X|%08X\n",3477			i,3478			readl(adapter->hw.hw_addr + i+4),3479			readl(adapter->hw.hw_addr + i),3480			readl(adapter->hw.hw_addr + i+12),3481			readl(adapter->hw.hw_addr + i+8));3482	}3483exit:3484	return;3485}3486 3487/**3488 * e1000_tx_timeout - Respond to a Tx Hang3489 * @netdev: network interface device structure3490 * @txqueue: number of the Tx queue that hung (unused)3491 **/3492static void e1000_tx_timeout(struct net_device *netdev, unsigned int __always_unused txqueue)3493{3494	struct e1000_adapter *adapter = netdev_priv(netdev);3495 3496	/* Do the reset outside of interrupt context */3497	adapter->tx_timeout_count++;3498	schedule_work(&adapter->reset_task);3499}3500 3501static void e1000_reset_task(struct work_struct *work)3502{3503	struct e1000_adapter *adapter =3504		container_of(work, struct e1000_adapter, reset_task);3505 3506	e_err(drv, "Reset adapter\n");3507	e1000_reinit_locked(adapter);3508}3509 3510/**3511 * e1000_change_mtu - Change the Maximum Transfer Unit3512 * @netdev: network interface device structure3513 * @new_mtu: new value for maximum frame size3514 *3515 * Returns 0 on success, negative on failure3516 **/3517static int e1000_change_mtu(struct net_device *netdev, int new_mtu)3518{3519	struct e1000_adapter *adapter = netdev_priv(netdev);3520	struct e1000_hw *hw = &adapter->hw;3521	int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;3522 3523	/* Adapter-specific max frame size limits. */3524	switch (hw->mac_type) {3525	case e1000_undefined ... e1000_82542_rev2_1:3526		if (max_frame > (ETH_FRAME_LEN + ETH_FCS_LEN)) {3527			e_err(probe, "Jumbo Frames not supported.\n");3528			return -EINVAL;3529		}3530		break;3531	default:3532		/* Capable of supporting up to MAX_JUMBO_FRAME_SIZE limit. */3533		break;3534	}3535 3536	while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))3537		msleep(1);3538	/* e1000_down has a dependency on max_frame_size */3539	hw->max_frame_size = max_frame;3540	if (netif_running(netdev)) {3541		/* prevent buffers from being reallocated */3542		adapter->alloc_rx_buf = e1000_alloc_dummy_rx_buffers;3543		e1000_down(adapter);3544	}3545 3546	/* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN3547	 * means we reserve 2 more, this pushes us to allocate from the next3548	 * larger slab size.3549	 * i.e. RXBUFFER_2048 --> size-4096 slab3550	 * however with the new *_jumbo_rx* routines, jumbo receives will use3551	 * fragmented skbs3552	 */3553 3554	if (max_frame <= E1000_RXBUFFER_2048)3555		adapter->rx_buffer_len = E1000_RXBUFFER_2048;3556	else3557#if (PAGE_SIZE >= E1000_RXBUFFER_16384)3558		adapter->rx_buffer_len = E1000_RXBUFFER_16384;3559#elif (PAGE_SIZE >= E1000_RXBUFFER_4096)3560		adapter->rx_buffer_len = PAGE_SIZE;3561#endif3562 3563	/* adjust allocation if LPE protects us, and we aren't using SBP */3564	if (!hw->tbi_compatibility_on &&3565	    ((max_frame == (ETH_FRAME_LEN + ETH_FCS_LEN)) ||3566	     (max_frame == MAXIMUM_ETHERNET_VLAN_SIZE)))3567		adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE;3568 3569	netdev_dbg(netdev, "changing MTU from %d to %d\n",3570		   netdev->mtu, new_mtu);3571	WRITE_ONCE(netdev->mtu, new_mtu);3572 3573	if (netif_running(netdev))3574		e1000_up(adapter);3575	else3576		e1000_reset(adapter);3577 3578	clear_bit(__E1000_RESETTING, &adapter->flags);3579 3580	return 0;3581}3582 3583/**3584 * e1000_update_stats - Update the board statistics counters3585 * @adapter: board private structure3586 **/3587void e1000_update_stats(struct e1000_adapter *adapter)3588{3589	struct net_device *netdev = adapter->netdev;3590	struct e1000_hw *hw = &adapter->hw;3591	struct pci_dev *pdev = adapter->pdev;3592	unsigned long flags;3593	u16 phy_tmp;3594 3595#define PHY_IDLE_ERROR_COUNT_MASK 0x00FF3596 3597	/* Prevent stats update while adapter is being reset, or if the pci3598	 * connection is down.3599	 */3600	if (adapter->link_speed == 0)3601		return;3602	if (pci_channel_offline(pdev))3603		return;3604 3605	spin_lock_irqsave(&adapter->stats_lock, flags);3606 3607	/* these counters are modified from e1000_tbi_adjust_stats,3608	 * called from the interrupt context, so they must only3609	 * be written while holding adapter->stats_lock3610	 */3611 3612	adapter->stats.crcerrs += er32(CRCERRS);3613	adapter->stats.gprc += er32(GPRC);3614	adapter->stats.gorcl += er32(GORCL);3615	adapter->stats.gorch += er32(GORCH);3616	adapter->stats.bprc += er32(BPRC);3617	adapter->stats.mprc += er32(MPRC);3618	adapter->stats.roc += er32(ROC);3619 3620	adapter->stats.prc64 += er32(PRC64);3621	adapter->stats.prc127 += er32(PRC127);3622	adapter->stats.prc255 += er32(PRC255);3623	adapter->stats.prc511 += er32(PRC511);3624	adapter->stats.prc1023 += er32(PRC1023);3625	adapter->stats.prc1522 += er32(PRC1522);3626 3627	adapter->stats.symerrs += er32(SYMERRS);3628	adapter->stats.mpc += er32(MPC);3629	adapter->stats.scc += er32(SCC);3630	adapter->stats.ecol += er32(ECOL);3631	adapter->stats.mcc += er32(MCC);3632	adapter->stats.latecol += er32(LATECOL);3633	adapter->stats.dc += er32(DC);3634	adapter->stats.sec += er32(SEC);3635	adapter->stats.rlec += er32(RLEC);3636	adapter->stats.xonrxc += er32(XONRXC);3637	adapter->stats.xontxc += er32(XONTXC);3638	adapter->stats.xoffrxc += er32(XOFFRXC);3639	adapter->stats.xofftxc += er32(XOFFTXC);3640	adapter->stats.fcruc += er32(FCRUC);3641	adapter->stats.gptc += er32(GPTC);3642	adapter->stats.gotcl += er32(GOTCL);3643	adapter->stats.gotch += er32(GOTCH);3644	adapter->stats.rnbc += er32(RNBC);3645	adapter->stats.ruc += er32(RUC);3646	adapter->stats.rfc += er32(RFC);3647	adapter->stats.rjc += er32(RJC);3648	adapter->stats.torl += er32(TORL);3649	adapter->stats.torh += er32(TORH);3650	adapter->stats.totl += er32(TOTL);3651	adapter->stats.toth += er32(TOTH);3652	adapter->stats.tpr += er32(TPR);3653 3654	adapter->stats.ptc64 += er32(PTC64);3655	adapter->stats.ptc127 += er32(PTC127);3656	adapter->stats.ptc255 += er32(PTC255);3657	adapter->stats.ptc511 += er32(PTC511);3658	adapter->stats.ptc1023 += er32(PTC1023);3659	adapter->stats.ptc1522 += er32(PTC1522);3660 3661	adapter->stats.mptc += er32(MPTC);3662	adapter->stats.bptc += er32(BPTC);3663 3664	/* used for adaptive IFS */3665 3666	hw->tx_packet_delta = er32(TPT);3667	adapter->stats.tpt += hw->tx_packet_delta;3668	hw->collision_delta = er32(COLC);3669	adapter->stats.colc += hw->collision_delta;3670 3671	if (hw->mac_type >= e1000_82543) {3672		adapter->stats.algnerrc += er32(ALGNERRC);3673		adapter->stats.rxerrc += er32(RXERRC);3674		adapter->stats.tncrs += er32(TNCRS);3675		adapter->stats.cexterr += er32(CEXTERR);3676		adapter->stats.tsctc += er32(TSCTC);3677		adapter->stats.tsctfc += er32(TSCTFC);3678	}3679 3680	/* Fill out the OS statistics structure */3681	netdev->stats.multicast = adapter->stats.mprc;3682	netdev->stats.collisions = adapter->stats.colc;3683 3684	/* Rx Errors */3685 3686	/* RLEC on some newer hardware can be incorrect so build3687	 * our own version based on RUC and ROC3688	 */3689	netdev->stats.rx_errors = adapter->stats.rxerrc +3690		adapter->stats.crcerrs + adapter->stats.algnerrc +3691		adapter->stats.ruc + adapter->stats.roc +3692		adapter->stats.cexterr;3693	adapter->stats.rlerrc = adapter->stats.ruc + adapter->stats.roc;3694	netdev->stats.rx_length_errors = adapter->stats.rlerrc;3695	netdev->stats.rx_crc_errors = adapter->stats.crcerrs;3696	netdev->stats.rx_frame_errors = adapter->stats.algnerrc;3697	netdev->stats.rx_missed_errors = adapter->stats.mpc;3698 3699	/* Tx Errors */3700	adapter->stats.txerrc = adapter->stats.ecol + adapter->stats.latecol;3701	netdev->stats.tx_errors = adapter->stats.txerrc;3702	netdev->stats.tx_aborted_errors = adapter->stats.ecol;3703	netdev->stats.tx_window_errors = adapter->stats.latecol;3704	netdev->stats.tx_carrier_errors = adapter->stats.tncrs;3705	if (hw->bad_tx_carr_stats_fd &&3706	    adapter->link_duplex == FULL_DUPLEX) {3707		netdev->stats.tx_carrier_errors = 0;3708		adapter->stats.tncrs = 0;3709	}3710 3711	/* Tx Dropped needs to be maintained elsewhere */3712 3713	/* Phy Stats */3714	if (hw->media_type == e1000_media_type_copper) {3715		if ((adapter->link_speed == SPEED_1000) &&3716		   (!e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_tmp))) {3717			phy_tmp &= PHY_IDLE_ERROR_COUNT_MASK;3718			adapter->phy_stats.idle_errors += phy_tmp;3719		}3720 3721		if ((hw->mac_type <= e1000_82546) &&3722		   (hw->phy_type == e1000_phy_m88) &&3723		   !e1000_read_phy_reg(hw, M88E1000_RX_ERR_CNTR, &phy_tmp))3724			adapter->phy_stats.receive_errors += phy_tmp;3725	}3726 3727	/* Management Stats */3728	if (hw->has_smbus) {3729		adapter->stats.mgptc += er32(MGTPTC);3730		adapter->stats.mgprc += er32(MGTPRC);3731		adapter->stats.mgpdc += er32(MGTPDC);3732	}3733 3734	spin_unlock_irqrestore(&adapter->stats_lock, flags);3735}3736 3737/**3738 * e1000_intr - Interrupt Handler3739 * @irq: interrupt number3740 * @data: pointer to a network interface device structure3741 **/3742static irqreturn_t e1000_intr(int irq, void *data)3743{3744	struct net_device *netdev = data;3745	struct e1000_adapter *adapter = netdev_priv(netdev);3746	struct e1000_hw *hw = &adapter->hw;3747	u32 icr = er32(ICR);3748 3749	if (unlikely((!icr)))3750		return IRQ_NONE;  /* Not our interrupt */3751 3752	/* we might have caused the interrupt, but the above3753	 * read cleared it, and just in case the driver is3754	 * down there is nothing to do so return handled3755	 */3756	if (unlikely(test_bit(__E1000_DOWN, &adapter->flags)))3757		return IRQ_HANDLED;3758 3759	if (unlikely(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))) {3760		hw->get_link_status = 1;3761		/* guard against interrupt when we're going down */3762		if (!test_bit(__E1000_DOWN, &adapter->flags))3763			schedule_delayed_work(&adapter->watchdog_task, 1);3764	}3765 3766	/* disable interrupts, without the synchronize_irq bit */3767	ew32(IMC, ~0);3768	E1000_WRITE_FLUSH();3769 3770	if (likely(napi_schedule_prep(&adapter->napi))) {3771		adapter->total_tx_bytes = 0;3772		adapter->total_tx_packets = 0;3773		adapter->total_rx_bytes = 0;3774		adapter->total_rx_packets = 0;3775		__napi_schedule(&adapter->napi);3776	} else {3777		/* this really should not happen! if it does it is basically a3778		 * bug, but not a hard error, so enable ints and continue3779		 */3780		if (!test_bit(__E1000_DOWN, &adapter->flags))3781			e1000_irq_enable(adapter);3782	}3783 3784	return IRQ_HANDLED;3785}3786 3787/**3788 * e1000_clean - NAPI Rx polling callback3789 * @napi: napi struct containing references to driver info3790 * @budget: budget given to driver for receive packets3791 **/3792static int e1000_clean(struct napi_struct *napi, int budget)3793{3794	struct e1000_adapter *adapter = container_of(napi, struct e1000_adapter,3795						     napi);3796	int tx_clean_complete = 0, work_done = 0;3797 3798	tx_clean_complete = e1000_clean_tx_irq(adapter, &adapter->tx_ring[0]);3799 3800	adapter->clean_rx(adapter, &adapter->rx_ring[0], &work_done, budget);3801 3802	if (!tx_clean_complete || work_done == budget)3803		return budget;3804 3805	/* Exit the polling mode, but don't re-enable interrupts if stack might3806	 * poll us due to busy-polling3807	 */3808	if (likely(napi_complete_done(napi, work_done))) {3809		if (likely(adapter->itr_setting & 3))3810			e1000_set_itr(adapter);3811		if (!test_bit(__E1000_DOWN, &adapter->flags))3812			e1000_irq_enable(adapter);3813	}3814 3815	return work_done;3816}3817 3818/**3819 * e1000_clean_tx_irq - Reclaim resources after transmit completes3820 * @adapter: board private structure3821 * @tx_ring: ring to clean3822 **/3823static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,3824			       struct e1000_tx_ring *tx_ring)3825{3826	struct e1000_hw *hw = &adapter->hw;3827	struct net_device *netdev = adapter->netdev;3828	struct e1000_tx_desc *tx_desc, *eop_desc;3829	struct e1000_tx_buffer *buffer_info;3830	unsigned int i, eop;3831	unsigned int count = 0;3832	unsigned int total_tx_bytes = 0, total_tx_packets = 0;3833	unsigned int bytes_compl = 0, pkts_compl = 0;3834 3835	i = tx_ring->next_to_clean;3836	eop = tx_ring->buffer_info[i].next_to_watch;3837	eop_desc = E1000_TX_DESC(*tx_ring, eop);3838 3839	while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) &&3840	       (count < tx_ring->count)) {3841		bool cleaned = false;3842		dma_rmb();	/* read buffer_info after eop_desc */3843		for ( ; !cleaned; count++) {3844			tx_desc = E1000_TX_DESC(*tx_ring, i);3845			buffer_info = &tx_ring->buffer_info[i];3846			cleaned = (i == eop);3847 3848			if (cleaned) {3849				total_tx_packets += buffer_info->segs;3850				total_tx_bytes += buffer_info->bytecount;3851				if (buffer_info->skb) {3852					bytes_compl += buffer_info->skb->len;3853					pkts_compl++;3854				}3855 3856			}3857			e1000_unmap_and_free_tx_resource(adapter, buffer_info,3858							 64);3859			tx_desc->upper.data = 0;3860 3861			if (unlikely(++i == tx_ring->count))3862				i = 0;3863		}3864 3865		eop = tx_ring->buffer_info[i].next_to_watch;3866		eop_desc = E1000_TX_DESC(*tx_ring, eop);3867	}3868 3869	/* Synchronize with E1000_DESC_UNUSED called from e1000_xmit_frame,3870	 * which will reuse the cleaned buffers.3871	 */3872	smp_store_release(&tx_ring->next_to_clean, i);3873 3874	netdev_completed_queue(netdev, pkts_compl, bytes_compl);3875 3876#define TX_WAKE_THRESHOLD 323877	if (unlikely(count && netif_carrier_ok(netdev) &&3878		     E1000_DESC_UNUSED(tx_ring) >= TX_WAKE_THRESHOLD)) {3879		/* Make sure that anybody stopping the queue after this3880		 * sees the new next_to_clean.3881		 */3882		smp_mb();3883 3884		if (netif_queue_stopped(netdev) &&3885		    !(test_bit(__E1000_DOWN, &adapter->flags))) {3886			netif_wake_queue(netdev);3887			++adapter->restart_queue;3888		}3889	}3890 3891	if (adapter->detect_tx_hung) {3892		/* Detect a transmit hang in hardware, this serializes the3893		 * check with the clearing of time_stamp and movement of i3894		 */3895		adapter->detect_tx_hung = false;3896		if (tx_ring->buffer_info[eop].time_stamp &&3897		    time_after(jiffies, tx_ring->buffer_info[eop].time_stamp +3898			       (adapter->tx_timeout_factor * HZ)) &&3899		    !(er32(STATUS) & E1000_STATUS_TXOFF)) {3900 3901			/* detected Tx unit hang */3902			e_err(drv, "Detected Tx Unit Hang\n"3903			      "  Tx Queue             <%lu>\n"3904			      "  TDH                  <%x>\n"3905			      "  TDT                  <%x>\n"3906			      "  next_to_use          <%x>\n"3907			      "  next_to_clean        <%x>\n"3908			      "buffer_info[next_to_clean]\n"3909			      "  time_stamp           <%lx>\n"3910			      "  next_to_watch        <%x>\n"3911			      "  jiffies              <%lx>\n"3912			      "  next_to_watch.status <%x>\n",3913				(unsigned long)(tx_ring - adapter->tx_ring),3914				readl(hw->hw_addr + tx_ring->tdh),3915				readl(hw->hw_addr + tx_ring->tdt),3916				tx_ring->next_to_use,3917				tx_ring->next_to_clean,3918				tx_ring->buffer_info[eop].time_stamp,3919				eop,3920				jiffies,3921				eop_desc->upper.fields.status);3922			e1000_dump(adapter);3923			netif_stop_queue(netdev);3924		}3925	}3926	adapter->total_tx_bytes += total_tx_bytes;3927	adapter->total_tx_packets += total_tx_packets;3928	netdev->stats.tx_bytes += total_tx_bytes;3929	netdev->stats.tx_packets += total_tx_packets;3930	return count < tx_ring->count;3931}3932 3933/**3934 * e1000_rx_checksum - Receive Checksum Offload for 825433935 * @adapter:     board private structure3936 * @status_err:  receive descriptor status and error fields3937 * @csum:        receive descriptor csum field3938 * @skb:         socket buffer with received data3939 **/3940static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err,3941			      u32 csum, struct sk_buff *skb)3942{3943	struct e1000_hw *hw = &adapter->hw;3944	u16 status = (u16)status_err;3945	u8 errors = (u8)(status_err >> 24);3946 3947	skb_checksum_none_assert(skb);3948 3949	/* 82543 or newer only */3950	if (unlikely(hw->mac_type < e1000_82543))3951		return;3952	/* Ignore Checksum bit is set */3953	if (unlikely(status & E1000_RXD_STAT_IXSM))3954		return;3955	/* TCP/UDP checksum error bit is set */3956	if (unlikely(errors & E1000_RXD_ERR_TCPE)) {3957		/* let the stack verify checksum errors */3958		adapter->hw_csum_err++;3959		return;3960	}3961	/* TCP/UDP Checksum has not been calculated */3962	if (!(status & E1000_RXD_STAT_TCPCS))3963		return;3964 3965	/* It must be a TCP or UDP packet with a valid checksum */3966	if (likely(status & E1000_RXD_STAT_TCPCS)) {3967		/* TCP checksum is good */3968		skb->ip_summed = CHECKSUM_UNNECESSARY;3969	}3970	adapter->hw_csum_good++;3971}3972 3973/**3974 * e1000_consume_page - helper function for jumbo Rx path3975 * @bi: software descriptor shadow data3976 * @skb: skb being modified3977 * @length: length of data being added3978 **/3979static void e1000_consume_page(struct e1000_rx_buffer *bi, struct sk_buff *skb,3980			       u16 length)3981{3982	bi->rxbuf.page = NULL;3983	skb->len += length;3984	skb->data_len += length;3985	skb->truesize += PAGE_SIZE;3986}3987 3988/**3989 * e1000_receive_skb - helper function to handle rx indications3990 * @adapter: board private structure3991 * @status: descriptor status field as written by hardware3992 * @vlan: descriptor vlan field as written by hardware (no le/be conversion)3993 * @skb: pointer to sk_buff to be indicated to stack3994 */3995static void e1000_receive_skb(struct e1000_adapter *adapter, u8 status,3996			      __le16 vlan, struct sk_buff *skb)3997{3998	skb->protocol = eth_type_trans(skb, adapter->netdev);3999 4000	if (status & E1000_RXD_STAT_VP) {4001		u16 vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK;4002 4003		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vid);4004	}4005	napi_gro_receive(&adapter->napi, skb);4006}4007 4008/**4009 * e1000_tbi_adjust_stats4010 * @hw: Struct containing variables accessed by shared code4011 * @stats: point to stats struct4012 * @frame_len: The length of the frame in question4013 * @mac_addr: The Ethernet destination address of the frame in question4014 *4015 * Adjusts the statistic counters when a frame is accepted by TBI_ACCEPT4016 */4017static void e1000_tbi_adjust_stats(struct e1000_hw *hw,4018				   struct e1000_hw_stats *stats,4019				   u32 frame_len, const u8 *mac_addr)4020{4021	u64 carry_bit;4022 4023	/* First adjust the frame length. */4024	frame_len--;4025	/* We need to adjust the statistics counters, since the hardware4026	 * counters overcount this packet as a CRC error and undercount4027	 * the packet as a good packet4028	 */4029	/* This packet should not be counted as a CRC error. */4030	stats->crcerrs--;4031	/* This packet does count as a Good Packet Received. */4032	stats->gprc++;4033 4034	/* Adjust the Good Octets received counters */4035	carry_bit = 0x80000000 & stats->gorcl;4036	stats->gorcl += frame_len;4037	/* If the high bit of Gorcl (the low 32 bits of the Good Octets4038	 * Received Count) was one before the addition,4039	 * AND it is zero after, then we lost the carry out,4040	 * need to add one to Gorch (Good Octets Received Count High).4041	 * This could be simplified if all environments supported4042	 * 64-bit integers.4043	 */4044	if (carry_bit && ((stats->gorcl & 0x80000000) == 0))4045		stats->gorch++;4046	/* Is this a broadcast or multicast?  Check broadcast first,4047	 * since the test for a multicast frame will test positive on4048	 * a broadcast frame.4049	 */4050	if (is_broadcast_ether_addr(mac_addr))4051		stats->bprc++;4052	else if (is_multicast_ether_addr(mac_addr))4053		stats->mprc++;4054 4055	if (frame_len == hw->max_frame_size) {4056		/* In this case, the hardware has overcounted the number of4057		 * oversize frames.4058		 */4059		if (stats->roc > 0)4060			stats->roc--;4061	}4062 4063	/* Adjust the bin counters when the extra byte put the frame in the4064	 * wrong bin. Remember that the frame_len was adjusted above.4065	 */4066	if (frame_len == 64) {4067		stats->prc64++;4068		stats->prc127--;4069	} else if (frame_len == 127) {4070		stats->prc127++;4071		stats->prc255--;4072	} else if (frame_len == 255) {4073		stats->prc255++;4074		stats->prc511--;4075	} else if (frame_len == 511) {4076		stats->prc511++;4077		stats->prc1023--;4078	} else if (frame_len == 1023) {4079		stats->prc1023++;4080		stats->prc1522--;4081	} else if (frame_len == 1522) {4082		stats->prc1522++;4083	}4084}4085 4086static bool e1000_tbi_should_accept(struct e1000_adapter *adapter,4087				    u8 status, u8 errors,4088				    u32 length, const u8 *data)4089{4090	struct e1000_hw *hw = &adapter->hw;4091	u8 last_byte = *(data + length - 1);4092 4093	if (TBI_ACCEPT(hw, status, errors, length, last_byte)) {4094		unsigned long irq_flags;4095 4096		spin_lock_irqsave(&adapter->stats_lock, irq_flags);4097		e1000_tbi_adjust_stats(hw, &adapter->stats, length, data);4098		spin_unlock_irqrestore(&adapter->stats_lock, irq_flags);4099 4100		return true;4101	}4102 4103	return false;4104}4105 4106static struct sk_buff *e1000_alloc_rx_skb(struct e1000_adapter *adapter,4107					  unsigned int bufsz)4108{4109	struct sk_buff *skb = napi_alloc_skb(&adapter->napi, bufsz);4110 4111	if (unlikely(!skb))4112		adapter->alloc_rx_buff_failed++;4113	return skb;4114}4115 4116/**4117 * e1000_clean_jumbo_rx_irq - Send received data up the network stack; legacy4118 * @adapter: board private structure4119 * @rx_ring: ring to clean4120 * @work_done: amount of napi work completed this call4121 * @work_to_do: max amount of work allowed for this call to do4122 *4123 * the return value indicates whether actual cleaning was done, there4124 * is no guarantee that everything was cleaned4125 */4126static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,4127				     struct e1000_rx_ring *rx_ring,4128				     int *work_done, int work_to_do)4129{4130	struct net_device *netdev = adapter->netdev;4131	struct pci_dev *pdev = adapter->pdev;4132	struct e1000_rx_desc *rx_desc, *next_rxd;4133	struct e1000_rx_buffer *buffer_info, *next_buffer;4134	u32 length;4135	unsigned int i;4136	int cleaned_count = 0;4137	bool cleaned = false;4138	unsigned int total_rx_bytes = 0, total_rx_packets = 0;4139 4140	i = rx_ring->next_to_clean;4141	rx_desc = E1000_RX_DESC(*rx_ring, i);4142	buffer_info = &rx_ring->buffer_info[i];4143 4144	while (rx_desc->status & E1000_RXD_STAT_DD) {4145		struct sk_buff *skb;4146		u8 status;4147 4148		if (*work_done >= work_to_do)4149			break;4150		(*work_done)++;4151		dma_rmb(); /* read descriptor and rx_buffer_info after status DD */4152 4153		status = rx_desc->status;4154 4155		if (++i == rx_ring->count)4156			i = 0;4157 4158		next_rxd = E1000_RX_DESC(*rx_ring, i);4159		prefetch(next_rxd);4160 4161		next_buffer = &rx_ring->buffer_info[i];4162 4163		cleaned = true;4164		cleaned_count++;4165		dma_unmap_page(&pdev->dev, buffer_info->dma,4166			       adapter->rx_buffer_len, DMA_FROM_DEVICE);4167		buffer_info->dma = 0;4168 4169		length = le16_to_cpu(rx_desc->length);4170 4171		/* errors is only valid for DD + EOP descriptors */4172		if (unlikely((status & E1000_RXD_STAT_EOP) &&4173		    (rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK))) {4174			u8 *mapped = page_address(buffer_info->rxbuf.page);4175 4176			if (e1000_tbi_should_accept(adapter, status,4177						    rx_desc->errors,4178						    length, mapped)) {4179				length--;4180			} else if (netdev->features & NETIF_F_RXALL) {4181				goto process_skb;4182			} else {4183				/* an error means any chain goes out the window4184				 * too4185				 */4186				dev_kfree_skb(rx_ring->rx_skb_top);4187				rx_ring->rx_skb_top = NULL;4188				goto next_desc;4189			}4190		}4191 4192#define rxtop rx_ring->rx_skb_top4193process_skb:4194		if (!(status & E1000_RXD_STAT_EOP)) {4195			/* this descriptor is only the beginning (or middle) */4196			if (!rxtop) {4197				/* this is the beginning of a chain */4198				rxtop = napi_get_frags(&adapter->napi);4199				if (!rxtop)4200					break;4201 4202				skb_fill_page_desc(rxtop, 0,4203						   buffer_info->rxbuf.page,4204						   0, length);4205			} else {4206				/* this is the middle of a chain */4207				skb_fill_page_desc(rxtop,4208				    skb_shinfo(rxtop)->nr_frags,4209				    buffer_info->rxbuf.page, 0, length);4210			}4211			e1000_consume_page(buffer_info, rxtop, length);4212			goto next_desc;4213		} else {4214			if (rxtop) {4215				/* end of the chain */4216				skb_fill_page_desc(rxtop,4217				    skb_shinfo(rxtop)->nr_frags,4218				    buffer_info->rxbuf.page, 0, length);4219				skb = rxtop;4220				rxtop = NULL;4221				e1000_consume_page(buffer_info, skb, length);4222			} else {4223				struct page *p;4224				/* no chain, got EOP, this buf is the packet4225				 * copybreak to save the put_page/alloc_page4226				 */4227				p = buffer_info->rxbuf.page;4228				if (length <= copybreak) {4229					if (likely(!(netdev->features & NETIF_F_RXFCS)))4230						length -= 4;4231					skb = e1000_alloc_rx_skb(adapter,4232								 length);4233					if (!skb)4234						break;4235 4236					memcpy(skb_tail_pointer(skb),4237					       page_address(p), length);4238 4239					/* re-use the page, so don't erase4240					 * buffer_info->rxbuf.page4241					 */4242					skb_put(skb, length);4243					e1000_rx_checksum(adapter,4244							  status | rx_desc->errors << 24,4245							  le16_to_cpu(rx_desc->csum), skb);4246 4247					total_rx_bytes += skb->len;4248					total_rx_packets++;4249 4250					e1000_receive_skb(adapter, status,4251							  rx_desc->special, skb);4252					goto next_desc;4253				} else {4254					skb = napi_get_frags(&adapter->napi);4255					if (!skb) {4256						adapter->alloc_rx_buff_failed++;4257						break;4258					}4259					skb_fill_page_desc(skb, 0, p, 0,4260							   length);4261					e1000_consume_page(buffer_info, skb,4262							   length);4263				}4264			}4265		}4266 4267		/* Receive Checksum Offload XXX recompute due to CRC strip? */4268		e1000_rx_checksum(adapter,4269				  (u32)(status) |4270				  ((u32)(rx_desc->errors) << 24),4271				  le16_to_cpu(rx_desc->csum), skb);4272 4273		total_rx_bytes += (skb->len - 4); /* don't count FCS */4274		if (likely(!(netdev->features & NETIF_F_RXFCS)))4275			pskb_trim(skb, skb->len - 4);4276		total_rx_packets++;4277 4278		if (status & E1000_RXD_STAT_VP) {4279			__le16 vlan = rx_desc->special;4280			u16 vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK;4281 4282			__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vid);4283		}4284 4285		napi_gro_frags(&adapter->napi);4286 4287next_desc:4288		rx_desc->status = 0;4289 4290		/* return some buffers to hardware, one at a time is too slow */4291		if (unlikely(cleaned_count >= E1000_RX_BUFFER_WRITE)) {4292			adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count);4293			cleaned_count = 0;4294		}4295 4296		/* use prefetched values */4297		rx_desc = next_rxd;4298		buffer_info = next_buffer;4299	}4300	rx_ring->next_to_clean = i;4301 4302	cleaned_count = E1000_DESC_UNUSED(rx_ring);4303	if (cleaned_count)4304		adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count);4305 4306	adapter->total_rx_packets += total_rx_packets;4307	adapter->total_rx_bytes += total_rx_bytes;4308	netdev->stats.rx_bytes += total_rx_bytes;4309	netdev->stats.rx_packets += total_rx_packets;4310	return cleaned;4311}4312 4313/* this should improve performance for small packets with large amounts4314 * of reassembly being done in the stack4315 */4316static struct sk_buff *e1000_copybreak(struct e1000_adapter *adapter,4317				       struct e1000_rx_buffer *buffer_info,4318				       u32 length, const void *data)4319{4320	struct sk_buff *skb;4321 4322	if (length > copybreak)4323		return NULL;4324 4325	skb = e1000_alloc_rx_skb(adapter, length);4326	if (!skb)4327		return NULL;4328 4329	dma_sync_single_for_cpu(&adapter->pdev->dev, buffer_info->dma,4330				length, DMA_FROM_DEVICE);4331 4332	skb_put_data(skb, data, length);4333 4334	return skb;4335}4336 4337/**4338 * e1000_clean_rx_irq - Send received data up the network stack; legacy4339 * @adapter: board private structure4340 * @rx_ring: ring to clean4341 * @work_done: amount of napi work completed this call4342 * @work_to_do: max amount of work allowed for this call to do4343 */4344static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,4345			       struct e1000_rx_ring *rx_ring,4346			       int *work_done, int work_to_do)4347{4348	struct net_device *netdev = adapter->netdev;4349	struct pci_dev *pdev = adapter->pdev;4350	struct e1000_rx_desc *rx_desc, *next_rxd;4351	struct e1000_rx_buffer *buffer_info, *next_buffer;4352	u32 length;4353	unsigned int i;4354	int cleaned_count = 0;4355	bool cleaned = false;4356	unsigned int total_rx_bytes = 0, total_rx_packets = 0;4357 4358	i = rx_ring->next_to_clean;4359	rx_desc = E1000_RX_DESC(*rx_ring, i);4360	buffer_info = &rx_ring->buffer_info[i];4361 4362	while (rx_desc->status & E1000_RXD_STAT_DD) {4363		struct sk_buff *skb;4364		u8 *data;4365		u8 status;4366 4367		if (*work_done >= work_to_do)4368			break;4369		(*work_done)++;4370		dma_rmb(); /* read descriptor and rx_buffer_info after status DD */4371 4372		status = rx_desc->status;4373		length = le16_to_cpu(rx_desc->length);4374 4375		data = buffer_info->rxbuf.data;4376		prefetch(data);4377		skb = e1000_copybreak(adapter, buffer_info, length, data);4378		if (!skb) {4379			unsigned int frag_len = e1000_frag_len(adapter);4380 4381			skb = napi_build_skb(data - E1000_HEADROOM, frag_len);4382			if (!skb) {4383				adapter->alloc_rx_buff_failed++;4384				break;4385			}4386 4387			skb_reserve(skb, E1000_HEADROOM);4388			dma_unmap_single(&pdev->dev, buffer_info->dma,4389					 adapter->rx_buffer_len,4390					 DMA_FROM_DEVICE);4391			buffer_info->dma = 0;4392			buffer_info->rxbuf.data = NULL;4393		}4394 4395		if (++i == rx_ring->count)4396			i = 0;4397 4398		next_rxd = E1000_RX_DESC(*rx_ring, i);4399		prefetch(next_rxd);4400 4401		next_buffer = &rx_ring->buffer_info[i];4402 4403		cleaned = true;4404		cleaned_count++;4405 4406		/* !EOP means multiple descriptors were used to store a single4407		 * packet, if thats the case we need to toss it.  In fact, we4408		 * to toss every packet with the EOP bit clear and the next4409		 * frame that _does_ have the EOP bit set, as it is by4410		 * definition only a frame fragment4411		 */4412		if (unlikely(!(status & E1000_RXD_STAT_EOP)))4413			adapter->discarding = true;4414 4415		if (adapter->discarding) {4416			/* All receives must fit into a single buffer */4417			netdev_dbg(netdev, "Receive packet consumed multiple buffers\n");4418			dev_kfree_skb(skb);4419			if (status & E1000_RXD_STAT_EOP)4420				adapter->discarding = false;4421			goto next_desc;4422		}4423 4424		if (unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) {4425			if (e1000_tbi_should_accept(adapter, status,4426						    rx_desc->errors,4427						    length, data)) {4428				length--;4429			} else if (netdev->features & NETIF_F_RXALL) {4430				goto process_skb;4431			} else {4432				dev_kfree_skb(skb);4433				goto next_desc;4434			}4435		}4436 4437process_skb:4438		total_rx_bytes += (length - 4); /* don't count FCS */4439		total_rx_packets++;4440 4441		if (likely(!(netdev->features & NETIF_F_RXFCS)))4442			/* adjust length to remove Ethernet CRC, this must be4443			 * done after the TBI_ACCEPT workaround above4444			 */4445			length -= 4;4446 4447		if (buffer_info->rxbuf.data == NULL)4448			skb_put(skb, length);4449		else /* copybreak skb */4450			skb_trim(skb, length);4451 4452		/* Receive Checksum Offload */4453		e1000_rx_checksum(adapter,4454				  (u32)(status) |4455				  ((u32)(rx_desc->errors) << 24),4456				  le16_to_cpu(rx_desc->csum), skb);4457 4458		e1000_receive_skb(adapter, status, rx_desc->special, skb);4459 4460next_desc:4461		rx_desc->status = 0;4462 4463		/* return some buffers to hardware, one at a time is too slow */4464		if (unlikely(cleaned_count >= E1000_RX_BUFFER_WRITE)) {4465			adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count);4466			cleaned_count = 0;4467		}4468 4469		/* use prefetched values */4470		rx_desc = next_rxd;4471		buffer_info = next_buffer;4472	}4473	rx_ring->next_to_clean = i;4474 4475	cleaned_count = E1000_DESC_UNUSED(rx_ring);4476	if (cleaned_count)4477		adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count);4478 4479	adapter->total_rx_packets += total_rx_packets;4480	adapter->total_rx_bytes += total_rx_bytes;4481	netdev->stats.rx_bytes += total_rx_bytes;4482	netdev->stats.rx_packets += total_rx_packets;4483	return cleaned;4484}4485 4486/**4487 * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers4488 * @adapter: address of board private structure4489 * @rx_ring: pointer to receive ring structure4490 * @cleaned_count: number of buffers to allocate this pass4491 **/4492static void4493e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,4494			     struct e1000_rx_ring *rx_ring, int cleaned_count)4495{4496	struct pci_dev *pdev = adapter->pdev;4497	struct e1000_rx_desc *rx_desc;4498	struct e1000_rx_buffer *buffer_info;4499	unsigned int i;4500 4501	i = rx_ring->next_to_use;4502	buffer_info = &rx_ring->buffer_info[i];4503 4504	while (cleaned_count--) {4505		/* allocate a new page if necessary */4506		if (!buffer_info->rxbuf.page) {4507			buffer_info->rxbuf.page = alloc_page(GFP_ATOMIC);4508			if (unlikely(!buffer_info->rxbuf.page)) {4509				adapter->alloc_rx_buff_failed++;4510				break;4511			}4512		}4513 4514		if (!buffer_info->dma) {4515			buffer_info->dma = dma_map_page(&pdev->dev,4516							buffer_info->rxbuf.page, 0,4517							adapter->rx_buffer_len,4518							DMA_FROM_DEVICE);4519			if (dma_mapping_error(&pdev->dev, buffer_info->dma)) {4520				put_page(buffer_info->rxbuf.page);4521				buffer_info->rxbuf.page = NULL;4522				buffer_info->dma = 0;4523				adapter->alloc_rx_buff_failed++;4524				break;4525			}4526		}4527 4528		rx_desc = E1000_RX_DESC(*rx_ring, i);4529		rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);4530 4531		if (unlikely(++i == rx_ring->count))4532			i = 0;4533		buffer_info = &rx_ring->buffer_info[i];4534	}4535 4536	if (likely(rx_ring->next_to_use != i)) {4537		rx_ring->next_to_use = i;4538		if (unlikely(i-- == 0))4539			i = (rx_ring->count - 1);4540 4541		/* Force memory writes to complete before letting h/w4542		 * know there are new descriptors to fetch.  (Only4543		 * applicable for weak-ordered memory model archs,4544		 * such as IA-64).4545		 */4546		dma_wmb();4547		writel(i, adapter->hw.hw_addr + rx_ring->rdt);4548	}4549}4550 4551/**4552 * e1000_alloc_rx_buffers - Replace used receive buffers; legacy & extended4553 * @adapter: address of board private structure4554 * @rx_ring: pointer to ring struct4555 * @cleaned_count: number of new Rx buffers to try to allocate4556 **/4557static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,4558				   struct e1000_rx_ring *rx_ring,4559				   int cleaned_count)4560{4561	struct e1000_hw *hw = &adapter->hw;4562	struct pci_dev *pdev = adapter->pdev;4563	struct e1000_rx_desc *rx_desc;4564	struct e1000_rx_buffer *buffer_info;4565	unsigned int i;4566	unsigned int bufsz = adapter->rx_buffer_len;4567 4568	i = rx_ring->next_to_use;4569	buffer_info = &rx_ring->buffer_info[i];4570 4571	while (cleaned_count--) {4572		void *data;4573 4574		if (buffer_info->rxbuf.data)4575			goto skip;4576 4577		data = e1000_alloc_frag(adapter);4578		if (!data) {4579			/* Better luck next round */4580			adapter->alloc_rx_buff_failed++;4581			break;4582		}4583 4584		/* Fix for errata 23, can't cross 64kB boundary */4585		if (!e1000_check_64k_bound(adapter, data, bufsz)) {4586			void *olddata = data;4587			e_err(rx_err, "skb align check failed: %u bytes at "4588			      "%p\n", bufsz, data);4589			/* Try again, without freeing the previous */4590			data = e1000_alloc_frag(adapter);4591			/* Failed allocation, critical failure */4592			if (!data) {4593				skb_free_frag(olddata);4594				adapter->alloc_rx_buff_failed++;4595				break;4596			}4597 4598			if (!e1000_check_64k_bound(adapter, data, bufsz)) {4599				/* give up */4600				skb_free_frag(data);4601				skb_free_frag(olddata);4602				adapter->alloc_rx_buff_failed++;4603				break;4604			}4605 4606			/* Use new allocation */4607			skb_free_frag(olddata);4608		}4609		buffer_info->dma = dma_map_single(&pdev->dev,4610						  data,4611						  adapter->rx_buffer_len,4612						  DMA_FROM_DEVICE);4613		if (dma_mapping_error(&pdev->dev, buffer_info->dma)) {4614			skb_free_frag(data);4615			buffer_info->dma = 0;4616			adapter->alloc_rx_buff_failed++;4617			break;4618		}4619 4620		/* XXX if it was allocated cleanly it will never map to a4621		 * boundary crossing4622		 */4623 4624		/* Fix for errata 23, can't cross 64kB boundary */4625		if (!e1000_check_64k_bound(adapter,4626					(void *)(unsigned long)buffer_info->dma,4627					adapter->rx_buffer_len)) {4628			e_err(rx_err, "dma align check failed: %u bytes at "4629			      "%p\n", adapter->rx_buffer_len,4630			      (void *)(unsigned long)buffer_info->dma);4631 4632			dma_unmap_single(&pdev->dev, buffer_info->dma,4633					 adapter->rx_buffer_len,4634					 DMA_FROM_DEVICE);4635 4636			skb_free_frag(data);4637			buffer_info->rxbuf.data = NULL;4638			buffer_info->dma = 0;4639 4640			adapter->alloc_rx_buff_failed++;4641			break;4642		}4643		buffer_info->rxbuf.data = data;4644 skip:4645		rx_desc = E1000_RX_DESC(*rx_ring, i);4646		rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);4647 4648		if (unlikely(++i == rx_ring->count))4649			i = 0;4650		buffer_info = &rx_ring->buffer_info[i];4651	}4652 4653	if (likely(rx_ring->next_to_use != i)) {4654		rx_ring->next_to_use = i;4655		if (unlikely(i-- == 0))4656			i = (rx_ring->count - 1);4657 4658		/* Force memory writes to complete before letting h/w4659		 * know there are new descriptors to fetch.  (Only4660		 * applicable for weak-ordered memory model archs,4661		 * such as IA-64).4662		 */4663		dma_wmb();4664		writel(i, hw->hw_addr + rx_ring->rdt);4665	}4666}4667 4668/**4669 * e1000_smartspeed - Workaround for SmartSpeed on 82541 and 82547 controllers.4670 * @adapter: address of board private structure4671 **/4672static void e1000_smartspeed(struct e1000_adapter *adapter)4673{4674	struct e1000_hw *hw = &adapter->hw;4675	u16 phy_status;4676	u16 phy_ctrl;4677 4678	if ((hw->phy_type != e1000_phy_igp) || !hw->autoneg ||4679	   !(hw->autoneg_advertised & ADVERTISE_1000_FULL))4680		return;4681 4682	if (adapter->smartspeed == 0) {4683		/* If Master/Slave config fault is asserted twice,4684		 * we assume back-to-back4685		 */4686		e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_status);4687		if (!(phy_status & SR_1000T_MS_CONFIG_FAULT))4688			return;4689		e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_status);4690		if (!(phy_status & SR_1000T_MS_CONFIG_FAULT))4691			return;4692		e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_ctrl);4693		if (phy_ctrl & CR_1000T_MS_ENABLE) {4694			phy_ctrl &= ~CR_1000T_MS_ENABLE;4695			e1000_write_phy_reg(hw, PHY_1000T_CTRL,4696					    phy_ctrl);4697			adapter->smartspeed++;4698			if (!e1000_phy_setup_autoneg(hw) &&4699			   !e1000_read_phy_reg(hw, PHY_CTRL,4700					       &phy_ctrl)) {4701				phy_ctrl |= (MII_CR_AUTO_NEG_EN |4702					     MII_CR_RESTART_AUTO_NEG);4703				e1000_write_phy_reg(hw, PHY_CTRL,4704						    phy_ctrl);4705			}4706		}4707		return;4708	} else if (adapter->smartspeed == E1000_SMARTSPEED_DOWNSHIFT) {4709		/* If still no link, perhaps using 2/3 pair cable */4710		e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_ctrl);4711		phy_ctrl |= CR_1000T_MS_ENABLE;4712		e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_ctrl);4713		if (!e1000_phy_setup_autoneg(hw) &&4714		   !e1000_read_phy_reg(hw, PHY_CTRL, &phy_ctrl)) {4715			phy_ctrl |= (MII_CR_AUTO_NEG_EN |4716				     MII_CR_RESTART_AUTO_NEG);4717			e1000_write_phy_reg(hw, PHY_CTRL, phy_ctrl);4718		}4719	}4720	/* Restart process after E1000_SMARTSPEED_MAX iterations */4721	if (adapter->smartspeed++ == E1000_SMARTSPEED_MAX)4722		adapter->smartspeed = 0;4723}4724 4725/**4726 * e1000_ioctl - handle ioctl calls4727 * @netdev: pointer to our netdev4728 * @ifr: pointer to interface request structure4729 * @cmd: ioctl data4730 **/4731static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)4732{4733	switch (cmd) {4734	case SIOCGMIIPHY:4735	case SIOCGMIIREG:4736	case SIOCSMIIREG:4737		return e1000_mii_ioctl(netdev, ifr, cmd);4738	default:4739		return -EOPNOTSUPP;4740	}4741}4742 4743/**4744 * e1000_mii_ioctl -4745 * @netdev: pointer to our netdev4746 * @ifr: pointer to interface request structure4747 * @cmd: ioctl data4748 **/4749static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,4750			   int cmd)4751{4752	struct e1000_adapter *adapter = netdev_priv(netdev);4753	struct e1000_hw *hw = &adapter->hw;4754	struct mii_ioctl_data *data = if_mii(ifr);4755	int retval;4756	u16 mii_reg;4757	unsigned long flags;4758 4759	if (hw->media_type != e1000_media_type_copper)4760		return -EOPNOTSUPP;4761 4762	switch (cmd) {4763	case SIOCGMIIPHY:4764		data->phy_id = hw->phy_addr;4765		break;4766	case SIOCGMIIREG:4767		spin_lock_irqsave(&adapter->stats_lock, flags);4768		if (e1000_read_phy_reg(hw, data->reg_num & 0x1F,4769				   &data->val_out)) {4770			spin_unlock_irqrestore(&adapter->stats_lock, flags);4771			return -EIO;4772		}4773		spin_unlock_irqrestore(&adapter->stats_lock, flags);4774		break;4775	case SIOCSMIIREG:4776		if (data->reg_num & ~(0x1F))4777			return -EFAULT;4778		mii_reg = data->val_in;4779		spin_lock_irqsave(&adapter->stats_lock, flags);4780		if (e1000_write_phy_reg(hw, data->reg_num,4781					mii_reg)) {4782			spin_unlock_irqrestore(&adapter->stats_lock, flags);4783			return -EIO;4784		}4785		spin_unlock_irqrestore(&adapter->stats_lock, flags);4786		if (hw->media_type == e1000_media_type_copper) {4787			switch (data->reg_num) {4788			case PHY_CTRL:4789				if (mii_reg & MII_CR_POWER_DOWN)4790					break;4791				if (mii_reg & MII_CR_AUTO_NEG_EN) {4792					hw->autoneg = 1;4793					hw->autoneg_advertised = 0x2F;4794				} else {4795					u32 speed;4796					if (mii_reg & 0x40)4797						speed = SPEED_1000;4798					else if (mii_reg & 0x2000)4799						speed = SPEED_100;4800					else4801						speed = SPEED_10;4802					retval = e1000_set_spd_dplx(4803						adapter, speed,4804						((mii_reg & 0x100)4805						 ? DUPLEX_FULL :4806						 DUPLEX_HALF));4807					if (retval)4808						return retval;4809				}4810				if (netif_running(adapter->netdev))4811					e1000_reinit_locked(adapter);4812				else4813					e1000_reset(adapter);4814				break;4815			case M88E1000_PHY_SPEC_CTRL:4816			case M88E1000_EXT_PHY_SPEC_CTRL:4817				if (e1000_phy_reset(hw))4818					return -EIO;4819				break;4820			}4821		} else {4822			switch (data->reg_num) {4823			case PHY_CTRL:4824				if (mii_reg & MII_CR_POWER_DOWN)4825					break;4826				if (netif_running(adapter->netdev))4827					e1000_reinit_locked(adapter);4828				else4829					e1000_reset(adapter);4830				break;4831			}4832		}4833		break;4834	default:4835		return -EOPNOTSUPP;4836	}4837	return E1000_SUCCESS;4838}4839 4840void e1000_pci_set_mwi(struct e1000_hw *hw)4841{4842	struct e1000_adapter *adapter = hw->back;4843	int ret_val = pci_set_mwi(adapter->pdev);4844 4845	if (ret_val)4846		e_err(probe, "Error in setting MWI\n");4847}4848 4849void e1000_pci_clear_mwi(struct e1000_hw *hw)4850{4851	struct e1000_adapter *adapter = hw->back;4852 4853	pci_clear_mwi(adapter->pdev);4854}4855 4856int e1000_pcix_get_mmrbc(struct e1000_hw *hw)4857{4858	struct e1000_adapter *adapter = hw->back;4859	return pcix_get_mmrbc(adapter->pdev);4860}4861 4862void e1000_pcix_set_mmrbc(struct e1000_hw *hw, int mmrbc)4863{4864	struct e1000_adapter *adapter = hw->back;4865	pcix_set_mmrbc(adapter->pdev, mmrbc);4866}4867 4868void e1000_io_write(struct e1000_hw *hw, unsigned long port, u32 value)4869{4870	outl(value, port);4871}4872 4873static bool e1000_vlan_used(struct e1000_adapter *adapter)4874{4875	u16 vid;4876 4877	for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)4878		return true;4879	return false;4880}4881 4882static void __e1000_vlan_mode(struct e1000_adapter *adapter,4883			      netdev_features_t features)4884{4885	struct e1000_hw *hw = &adapter->hw;4886	u32 ctrl;4887 4888	ctrl = er32(CTRL);4889	if (features & NETIF_F_HW_VLAN_CTAG_RX) {4890		/* enable VLAN tag insert/strip */4891		ctrl |= E1000_CTRL_VME;4892	} else {4893		/* disable VLAN tag insert/strip */4894		ctrl &= ~E1000_CTRL_VME;4895	}4896	ew32(CTRL, ctrl);4897}4898static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter,4899				     bool filter_on)4900{4901	struct e1000_hw *hw = &adapter->hw;4902	u32 rctl;4903 4904	if (!test_bit(__E1000_DOWN, &adapter->flags))4905		e1000_irq_disable(adapter);4906 4907	__e1000_vlan_mode(adapter, adapter->netdev->features);4908	if (filter_on) {4909		/* enable VLAN receive filtering */4910		rctl = er32(RCTL);4911		rctl &= ~E1000_RCTL_CFIEN;4912		if (!(adapter->netdev->flags & IFF_PROMISC))4913			rctl |= E1000_RCTL_VFE;4914		ew32(RCTL, rctl);4915		e1000_update_mng_vlan(adapter);4916	} else {4917		/* disable VLAN receive filtering */4918		rctl = er32(RCTL);4919		rctl &= ~E1000_RCTL_VFE;4920		ew32(RCTL, rctl);4921	}4922 4923	if (!test_bit(__E1000_DOWN, &adapter->flags))4924		e1000_irq_enable(adapter);4925}4926 4927static void e1000_vlan_mode(struct net_device *netdev,4928			    netdev_features_t features)4929{4930	struct e1000_adapter *adapter = netdev_priv(netdev);4931 4932	if (!test_bit(__E1000_DOWN, &adapter->flags))4933		e1000_irq_disable(adapter);4934 4935	__e1000_vlan_mode(adapter, features);4936 4937	if (!test_bit(__E1000_DOWN, &adapter->flags))4938		e1000_irq_enable(adapter);4939}4940 4941static int e1000_vlan_rx_add_vid(struct net_device *netdev,4942				 __be16 proto, u16 vid)4943{4944	struct e1000_adapter *adapter = netdev_priv(netdev);4945	struct e1000_hw *hw = &adapter->hw;4946	u32 vfta, index;4947 4948	if ((hw->mng_cookie.status &4949	     E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) &&4950	    (vid == adapter->mng_vlan_id))4951		return 0;4952 4953	if (!e1000_vlan_used(adapter))4954		e1000_vlan_filter_on_off(adapter, true);4955 4956	/* add VID to filter table */4957	index = (vid >> 5) & 0x7F;4958	vfta = E1000_READ_REG_ARRAY(hw, VFTA, index);4959	vfta |= (1 << (vid & 0x1F));4960	e1000_write_vfta(hw, index, vfta);4961 4962	set_bit(vid, adapter->active_vlans);4963 4964	return 0;4965}4966 4967static int e1000_vlan_rx_kill_vid(struct net_device *netdev,4968				  __be16 proto, u16 vid)4969{4970	struct e1000_adapter *adapter = netdev_priv(netdev);4971	struct e1000_hw *hw = &adapter->hw;4972	u32 vfta, index;4973 4974	if (!test_bit(__E1000_DOWN, &adapter->flags))4975		e1000_irq_disable(adapter);4976	if (!test_bit(__E1000_DOWN, &adapter->flags))4977		e1000_irq_enable(adapter);4978 4979	/* remove VID from filter table */4980	index = (vid >> 5) & 0x7F;4981	vfta = E1000_READ_REG_ARRAY(hw, VFTA, index);4982	vfta &= ~(1 << (vid & 0x1F));4983	e1000_write_vfta(hw, index, vfta);4984 4985	clear_bit(vid, adapter->active_vlans);4986 4987	if (!e1000_vlan_used(adapter))4988		e1000_vlan_filter_on_off(adapter, false);4989 4990	return 0;4991}4992 4993static void e1000_restore_vlan(struct e1000_adapter *adapter)4994{4995	u16 vid;4996 4997	if (!e1000_vlan_used(adapter))4998		return;4999 5000	e1000_vlan_filter_on_off(adapter, true);5001	for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)5002		e1000_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid);5003}5004 5005int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx)5006{5007	struct e1000_hw *hw = &adapter->hw;5008 5009	hw->autoneg = 0;5010 5011	/* Make sure dplx is at most 1 bit and lsb of speed is not set5012	 * for the switch() below to work5013	 */5014	if ((spd & 1) || (dplx & ~1))5015		goto err_inval;5016 5017	/* Fiber NICs only allow 1000 gbps Full duplex */5018	if ((hw->media_type == e1000_media_type_fiber) &&5019	    spd != SPEED_1000 &&5020	    dplx != DUPLEX_FULL)5021		goto err_inval;5022 5023	switch (spd + dplx) {5024	case SPEED_10 + DUPLEX_HALF:5025		hw->forced_speed_duplex = e1000_10_half;5026		break;5027	case SPEED_10 + DUPLEX_FULL:5028		hw->forced_speed_duplex = e1000_10_full;5029		break;5030	case SPEED_100 + DUPLEX_HALF:5031		hw->forced_speed_duplex = e1000_100_half;5032		break;5033	case SPEED_100 + DUPLEX_FULL:5034		hw->forced_speed_duplex = e1000_100_full;5035		break;5036	case SPEED_1000 + DUPLEX_FULL:5037		hw->autoneg = 1;5038		hw->autoneg_advertised = ADVERTISE_1000_FULL;5039		break;5040	case SPEED_1000 + DUPLEX_HALF: /* not supported */5041	default:5042		goto err_inval;5043	}5044 5045	/* clear MDI, MDI(-X) override is only allowed when autoneg enabled */5046	hw->mdix = AUTO_ALL_MODES;5047 5048	return 0;5049 5050err_inval:5051	e_err(probe, "Unsupported Speed/Duplex configuration\n");5052	return -EINVAL;5053}5054 5055static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)5056{5057	struct net_device *netdev = pci_get_drvdata(pdev);5058	struct e1000_adapter *adapter = netdev_priv(netdev);5059	struct e1000_hw *hw = &adapter->hw;5060	u32 ctrl, ctrl_ext, rctl, status;5061	u32 wufc = adapter->wol;5062 5063	netif_device_detach(netdev);5064 5065	if (netif_running(netdev)) {5066		int count = E1000_CHECK_RESET_COUNT;5067 5068		while (test_bit(__E1000_RESETTING, &adapter->flags) && count--)5069			usleep_range(10000, 20000);5070 5071		WARN_ON(test_bit(__E1000_RESETTING, &adapter->flags));5072		e1000_down(adapter);5073	}5074 5075	status = er32(STATUS);5076	if (status & E1000_STATUS_LU)5077		wufc &= ~E1000_WUFC_LNKC;5078 5079	if (wufc) {5080		e1000_setup_rctl(adapter);5081		e1000_set_rx_mode(netdev);5082 5083		rctl = er32(RCTL);5084 5085		/* turn on all-multi mode if wake on multicast is enabled */5086		if (wufc & E1000_WUFC_MC)5087			rctl |= E1000_RCTL_MPE;5088 5089		/* enable receives in the hardware */5090		ew32(RCTL, rctl | E1000_RCTL_EN);5091 5092		if (hw->mac_type >= e1000_82540) {5093			ctrl = er32(CTRL);5094			/* advertise wake from D3Cold */5095			#define E1000_CTRL_ADVD3WUC 0x001000005096			/* phy power management enable */5097			#define E1000_CTRL_EN_PHY_PWR_MGMT 0x002000005098			ctrl |= E1000_CTRL_ADVD3WUC |5099				E1000_CTRL_EN_PHY_PWR_MGMT;5100			ew32(CTRL, ctrl);5101		}5102 5103		if (hw->media_type == e1000_media_type_fiber ||5104		    hw->media_type == e1000_media_type_internal_serdes) {5105			/* keep the laser running in D3 */5106			ctrl_ext = er32(CTRL_EXT);5107			ctrl_ext |= E1000_CTRL_EXT_SDP7_DATA;5108			ew32(CTRL_EXT, ctrl_ext);5109		}5110 5111		ew32(WUC, E1000_WUC_PME_EN);5112		ew32(WUFC, wufc);5113	} else {5114		ew32(WUC, 0);5115		ew32(WUFC, 0);5116	}5117 5118	e1000_release_manageability(adapter);5119 5120	*enable_wake = !!wufc;5121 5122	/* make sure adapter isn't asleep if manageability is enabled */5123	if (adapter->en_mng_pt)5124		*enable_wake = true;5125 5126	if (netif_running(netdev))5127		e1000_free_irq(adapter);5128 5129	if (!test_and_set_bit(__E1000_DISABLED, &adapter->flags))5130		pci_disable_device(pdev);5131 5132	return 0;5133}5134 5135static int e1000_suspend(struct device *dev)5136{5137	int retval;5138	struct pci_dev *pdev = to_pci_dev(dev);5139	bool wake;5140 5141	retval = __e1000_shutdown(pdev, &wake);5142	device_set_wakeup_enable(dev, wake);5143 5144	return retval;5145}5146 5147static int e1000_resume(struct device *dev)5148{5149	struct pci_dev *pdev = to_pci_dev(dev);5150	struct net_device *netdev = pci_get_drvdata(pdev);5151	struct e1000_adapter *adapter = netdev_priv(netdev);5152	struct e1000_hw *hw = &adapter->hw;5153	u32 err;5154 5155	if (adapter->need_ioport)5156		err = pci_enable_device(pdev);5157	else5158		err = pci_enable_device_mem(pdev);5159	if (err) {5160		pr_err("Cannot enable PCI device from suspend\n");5161		return err;5162	}5163 5164	/* flush memory to make sure state is correct */5165	smp_mb__before_atomic();5166	clear_bit(__E1000_DISABLED, &adapter->flags);5167	pci_set_master(pdev);5168 5169	pci_enable_wake(pdev, PCI_D3hot, 0);5170	pci_enable_wake(pdev, PCI_D3cold, 0);5171 5172	if (netif_running(netdev)) {5173		err = e1000_request_irq(adapter);5174		if (err)5175			return err;5176	}5177 5178	e1000_power_up_phy(adapter);5179	e1000_reset(adapter);5180	ew32(WUS, ~0);5181 5182	e1000_init_manageability(adapter);5183 5184	if (netif_running(netdev))5185		e1000_up(adapter);5186 5187	netif_device_attach(netdev);5188 5189	return 0;5190}5191 5192static void e1000_shutdown(struct pci_dev *pdev)5193{5194	bool wake;5195 5196	__e1000_shutdown(pdev, &wake);5197 5198	if (system_state == SYSTEM_POWER_OFF) {5199		pci_wake_from_d3(pdev, wake);5200		pci_set_power_state(pdev, PCI_D3hot);5201	}5202}5203 5204#ifdef CONFIG_NET_POLL_CONTROLLER5205/* Polling 'interrupt' - used by things like netconsole to send skbs5206 * without having to re-enable interrupts. It's not called while5207 * the interrupt routine is executing.5208 */5209static void e1000_netpoll(struct net_device *netdev)5210{5211	struct e1000_adapter *adapter = netdev_priv(netdev);5212 5213	if (disable_hardirq(adapter->pdev->irq))5214		e1000_intr(adapter->pdev->irq, netdev);5215	enable_irq(adapter->pdev->irq);5216}5217#endif5218 5219/**5220 * e1000_io_error_detected - called when PCI error is detected5221 * @pdev: Pointer to PCI device5222 * @state: The current pci connection state5223 *5224 * This function is called after a PCI bus error affecting5225 * this device has been detected.5226 */5227static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,5228						pci_channel_state_t state)5229{5230	struct net_device *netdev = pci_get_drvdata(pdev);5231	struct e1000_adapter *adapter = netdev_priv(netdev);5232 5233	netif_device_detach(netdev);5234 5235	if (state == pci_channel_io_perm_failure)5236		return PCI_ERS_RESULT_DISCONNECT;5237 5238	if (netif_running(netdev))5239		e1000_down(adapter);5240 5241	if (!test_and_set_bit(__E1000_DISABLED, &adapter->flags))5242		pci_disable_device(pdev);5243 5244	/* Request a slot reset. */5245	return PCI_ERS_RESULT_NEED_RESET;5246}5247 5248/**5249 * e1000_io_slot_reset - called after the pci bus has been reset.5250 * @pdev: Pointer to PCI device5251 *5252 * Restart the card from scratch, as if from a cold-boot. Implementation5253 * resembles the first-half of the e1000_resume routine.5254 */5255static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)5256{5257	struct net_device *netdev = pci_get_drvdata(pdev);5258	struct e1000_adapter *adapter = netdev_priv(netdev);5259	struct e1000_hw *hw = &adapter->hw;5260	int err;5261 5262	if (adapter->need_ioport)5263		err = pci_enable_device(pdev);5264	else5265		err = pci_enable_device_mem(pdev);5266	if (err) {5267		pr_err("Cannot re-enable PCI device after reset.\n");5268		return PCI_ERS_RESULT_DISCONNECT;5269	}5270 5271	/* flush memory to make sure state is correct */5272	smp_mb__before_atomic();5273	clear_bit(__E1000_DISABLED, &adapter->flags);5274	pci_set_master(pdev);5275 5276	pci_enable_wake(pdev, PCI_D3hot, 0);5277	pci_enable_wake(pdev, PCI_D3cold, 0);5278 5279	e1000_reset(adapter);5280	ew32(WUS, ~0);5281 5282	return PCI_ERS_RESULT_RECOVERED;5283}5284 5285/**5286 * e1000_io_resume - called when traffic can start flowing again.5287 * @pdev: Pointer to PCI device5288 *5289 * This callback is called when the error recovery driver tells us that5290 * its OK to resume normal operation. Implementation resembles the5291 * second-half of the e1000_resume routine.5292 */5293static void e1000_io_resume(struct pci_dev *pdev)5294{5295	struct net_device *netdev = pci_get_drvdata(pdev);5296	struct e1000_adapter *adapter = netdev_priv(netdev);5297 5298	e1000_init_manageability(adapter);5299 5300	if (netif_running(netdev)) {5301		if (e1000_up(adapter)) {5302			pr_info("can't bring device back up after reset\n");5303			return;5304		}5305	}5306 5307	netif_device_attach(netdev);5308}5309 5310/* e1000_main.c */5311