/** * intelDown - quiesce the device and optionally reset the hardware * @adapter: board private structure * @reset: boolean flag to reset the hardware or not */ void IntelMausi::intelDown(struct e1000_adapter *adapter, bool reset) { struct e1000_hw *hw = &adapter->hw; UInt32 tctl, rctl; /* signal that we're down so the interrupt handler does not * reschedule our watchdog timer */ set_bit(__E1000_DOWN, &adapter->state); /* disable receives in the hardware */ rctl = intelReadMem32(E1000_RCTL); rctl &= ~E1000_RCTL_EN; intelWriteMem32(E1000_RCTL, rctl); /* flush and sleep below */ /* disable transmits in the hardware */ tctl = intelReadMem32(E1000_TCTL); tctl &= ~E1000_TCTL_EN; intelWriteMem32(E1000_TCTL, tctl); /* flush both disables and wait for them to finish */ intelFlush(); usleep_range(10000, 20000); intelDisableIRQ(); updateStatistics(adapter); clearDescriptors(); adapter->link_speed = 0; adapter->link_duplex = 0; /* Disable Si errata workaround on PCHx for jumbo frame flow */ if ((hw->mac.type >= e1000_pch2lan) && (mtu > ETH_DATA_LEN) && e1000_lv_jumbo_workaround_ich8lan(hw, false)) DebugLog("Ethernet [IntelMausi]: failed to disable jumbo frame workaround mode\n"); if (reset) intelReset(adapter); }
void IntelMausi::intelEnable() { struct e1000_hw *hw = &adapterData.hw; e1000_phy_hw_reset(hw); if (hw->mac.type >= e1000_pch2lan) e1000_resume_workarounds_pchlan(hw); e1000e_power_up_phy(&adapterData); //intelInitManageabilityPt(&adapterData); /* If AMT is enabled, let the firmware know that the network * interface is now open and reset the part to a known state. */ if (adapterData.flags & FLAG_HAS_AMT) { e1000e_get_hw_control(&adapterData); } intelReset(&adapterData); #if DISABLED_CODE /* DMA latency requirement to workaround jumbo issue */ pm_qos_add_request(&adapter->netdev->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE); #endif /* DISABLED_CODE */ intelConfigure(&adapterData); /* From here on the code is the same as e1000e_up() */ clear_bit(__E1000_DOWN, &adapterData.state); intelEnableIRQ(intrMask); adapterData.tx_hang_recheck = false; hw->mac.get_link_status = true; }