75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/******************************************************************************
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi Copyright (c) 2001-2015, Intel Corporation
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi All rights reserved.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi Redistribution and use in source and binary forms, with or without
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi modification, are permitted provided that the following conditions are met:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi 1. Redistributions of source code must retain the above copyright notice,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi this list of conditions and the following disclaimer.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi 2. Redistributions in binary form must reproduce the above copyright
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi notice, this list of conditions and the following disclaimer in the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi documentation and/or other materials provided with the distribution.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi 3. Neither the name of the Intel Corporation nor the names of its
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi contributors may be used to endorse or promote products derived from
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi this software without specific prior written permission.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi POSSIBILITY OF SUCH DAMAGE.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi******************************************************************************/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/*$FreeBSD$*/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#include "e1000_api.h"
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_init_mac_params - Initialize MAC function pointers
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function initializes the function pointers for the MAC
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * set of functions. Called by drivers or by e1000_setup_init_funcs.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_init_mac_params(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 ret_val = E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.init_params) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = hw->mac.ops.init_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("MAC Initialization Error\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } else {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("mac.init_mac_params was NULL\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiout:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return ret_val;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_init_nvm_params - Initialize NVM function pointers
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function initializes the function pointers for the NVM
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * set of functions. Called by drivers or by e1000_setup_init_funcs.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_init_nvm_params(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 ret_val = E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->nvm.ops.init_params) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = hw->nvm.ops.init_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("NVM Initialization Error\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } else {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("nvm.init_nvm_params was NULL\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiout:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return ret_val;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_init_phy_params - Initialize PHY function pointers
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function initializes the function pointers for the PHY
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * set of functions. Called by drivers or by e1000_setup_init_funcs.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_init_phy_params(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 ret_val = E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.init_params) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = hw->phy.ops.init_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("PHY Initialization Error\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } else {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("phy.init_phy_params was NULL\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiout:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return ret_val;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_init_mbx_params - Initialize mailbox function pointers
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function initializes the function pointers for the PHY
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * set of functions. Called by drivers or by e1000_setup_init_funcs.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_init_mbx_params(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 ret_val = E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mbx.ops.init_params) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = hw->mbx.ops.init_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("Mailbox Initialization Error\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } else {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("mbx.init_mbx_params was NULL\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiout:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return ret_val;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_set_mac_type - Sets MAC type
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function sets the mac type of the adapter based on the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * device ID stored in the hw structure.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * MUST BE FIRST FUNCTION CALLED (explicitly or through
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_setup_init_funcs()).
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_set_mac_type(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_mac_info *mac = &hw->mac;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 ret_val = E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGFUNC("e1000_set_mac_type");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi switch (hw->device_id) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82542:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82542;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82543GC_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82543GC_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82543;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82544EI_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82544EI_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82544GC_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82544GC_LOM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82544;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82540EM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82540EM_LOM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82540EP:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82540EP_LOM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82540EP_LP:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82540;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82545EM_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82545EM_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82545;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82545GM_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82545GM_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82545GM_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82545_rev_3;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546EB_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546EB_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546EB_QUAD_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82546;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546GB_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546GB_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546GB_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546GB_PCIE:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546GB_QUAD_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82546_rev_3;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82541EI:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82541EI_MOBILE:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82541ER_LOM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82541;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82541ER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82541GI:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82541GI_LF:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82541GI_MOBILE:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82541_rev_2;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82547EI:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82547EI_MOBILE:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82547;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82547GI:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82547_rev_2;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_SERDES_DUAL:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_SERDES_QUAD:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_QUAD_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571PT_QUAD_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_QUAD_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82571;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82572EI:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82572EI_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82572EI_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82572EI_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82572;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82573E:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82573E_IAMT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82573L:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82573;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82574L:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82574LA:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82574;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82583V:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82583;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_80003ES2LAN_COPPER_DPT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_80003ES2LAN_COPPER_SPT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_80003ES2LAN_SERDES_SPT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_80003es2lan;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_IFE:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_IFE_GT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_IFE_G:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_IGP_M:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_IGP_M_AMT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_IGP_AMT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_IGP_C:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH8_82567V_3:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_ich8lan;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IFE:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IFE_GT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IFE_G:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IGP_M:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IGP_M_AMT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IGP_M_V:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IGP_AMT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_BM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH9_IGP_C:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH10_R_BM_LM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH10_R_BM_LF:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH10_R_BM_V:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_ich9lan;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH10_D_BM_LM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH10_D_BM_LF:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_ICH10_D_BM_V:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_ich10lan;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_D_HV_DM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_D_HV_DC:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_M_HV_LM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_M_HV_LC:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_pchlan;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH2_LV_LM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH2_LV_V:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_pch2lan;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_LPT_I217_LM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_LPT_I217_V:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_LPTLP_I218_LM:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_PCH_LPTLP_I218_V:
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi case E1000_DEV_ID_PCH_I218_LM2:
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi case E1000_DEV_ID_PCH_I218_V2:
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi case E1000_DEV_ID_PCH_I218_LM3:
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi case E1000_DEV_ID_PCH_I218_V3:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_pch_lpt;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_LM:
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_V:
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_LM2:
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_V2:
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi case E1000_DEV_ID_PCH_LBG_I219_LM3:
ea4c6b78cebe2a3687fa43deeedf6212a124d817Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_LM4:
ea4c6b78cebe2a3687fa43deeedf6212a124d817Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_V4:
ea4c6b78cebe2a3687fa43deeedf6212a124d817Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_LM5:
ea4c6b78cebe2a3687fa43deeedf6212a124d817Robert Mustacchi case E1000_DEV_ID_PCH_SPT_I219_V5:
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi mac->type = e1000_pch_spt;
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82575EB_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82575EB_FIBER_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82575GB_QUAD_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82575;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_QUAD_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_QUAD_COPPER_ET2:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_NS:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_NS_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_SERDES_QUAD:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82576;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82580_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82580_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82580_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82580_SGMII:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82580_COPPER_DUAL:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82580_QUAD_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_DH89XXCC_SGMII:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_DH89XXCC_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_DH89XXCC_BACKPLANE:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_DH89XXCC_SFP:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_82580;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I350_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I350_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I350_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I350_SGMII:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I350_DA4:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_i350;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi case E1000_DEV_ID_I210_COPPER_FLASHLESS:
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi case E1000_DEV_ID_I210_SERDES_FLASHLESS:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I210_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I210_COPPER_OEM1:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I210_COPPER_IT:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I210_FIBER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I210_SERDES:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I210_SGMII:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_i210;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I211_COPPER:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_i211;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_VF:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_82576_VF_HV:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_vfadapt;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I350_VF:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case E1000_DEV_ID_I350_VF_HV:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mac->type = e1000_vfadapt_i350;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi
13485e69b5429e6c7d27301fb3c0deee0e93768aGarrett D'Amore case E1000_DEV_ID_I354_BACKPLANE_1GBPS:
13485e69b5429e6c7d27301fb3c0deee0e93768aGarrett D'Amore case E1000_DEV_ID_I354_SGMII:
13485e69b5429e6c7d27301fb3c0deee0e93768aGarrett D'Amore case E1000_DEV_ID_I354_BACKPLANE_2_5GBPS:
13485e69b5429e6c7d27301fb3c0deee0e93768aGarrett D'Amore mac->type = e1000_i354;
13485e69b5429e6c7d27301fb3c0deee0e93768aGarrett D'Amore break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi default:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /* Should never have loaded on this device */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = -E1000_ERR_MAC_INIT;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return ret_val;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_setup_init_funcs - Initializes function pointers
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @init_device: TRUE will initialize the rest of the function pointers
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * getting the device ready for use. FALSE will only set
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * MAC type and the function pointers for the other init
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * functions. Passing FALSE will not generate any hardware
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * reads or writes.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function must be called by a driver in order to use the rest
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * of the 'shared' code files. Called by drivers only.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 ret_val;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /* Can't do much good without knowing the MAC type. */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = e1000_set_mac_type(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("ERROR: MAC type could not be set properly.\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (!hw->hw_addr) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("ERROR: Registers not mapped\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /*
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Init function pointers to generic implementations. We do this first
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * allowing a driver module to override it afterward.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_mac_ops_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_phy_ops_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_nvm_ops_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_mbx_ops_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /*
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Set up the init function pointers. These are functions within the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * adapter family file that sets up function pointers for the rest of
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * the functions in that family.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi switch (hw->mac.type) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82542:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_82542(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82543:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82544:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_82543(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82540:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82545:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82545_rev_3:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82546:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82546_rev_3:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_82540(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82541:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82541_rev_2:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82547:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82547_rev_2:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_82541(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82571:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82572:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82573:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82574:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82583:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_82571(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_80003es2lan:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_80003es2lan(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_ich8lan:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_ich9lan:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_ich10lan:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_pchlan:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_pch2lan:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_pch_lpt:
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi case e1000_pch_spt:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_ich8lan(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82575:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82576:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_82580:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_i350:
13485e69b5429e6c7d27301fb3c0deee0e93768aGarrett D'Amore case e1000_i354:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_82575(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_i210:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_i211:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_i210(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_vfadapt:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_vf(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi case e1000_vfadapt_i350:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_init_function_pointers_vf(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi default:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi DEBUGOUT("Hardware not supported\n");
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi break;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /*
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Initialize the rest of the function pointers. These require some
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * register reads/writes in some cases.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (!(ret_val) && init_device) {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = e1000_init_mac_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = e1000_init_nvm_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = e1000_init_phy_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ret_val = e1000_init_mbx_params(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (ret_val)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi goto out;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi }
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiout:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return ret_val;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_get_bus_info - Obtain bus information for adapter
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This will obtain information about the HW bus for which the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * adapter is attached and stores it in the hw structure. This is a
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_get_bus_info(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.get_bus_info)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.get_bus_info(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_clear_vfta - Clear VLAN filter table
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This clears the VLAN filter table on the adapter. This is a function
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_clear_vfta(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.clear_vfta)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->mac.ops.clear_vfta(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_write_vfta - Write value to VLAN filter table
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the 32-bit offset in which to write the value to.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @value: the 32-bit value to write at location offset.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This writes a 32-bit value to a 32-bit offset in the VLAN filter
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * table. This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_write_vfta(struct e1000_hw *hw, u32 offset, u32 value)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.write_vfta)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->mac.ops.write_vfta(hw, offset, value);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_update_mc_addr_list - Update Multicast addresses
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @mc_addr_list: array of multicast addresses to program
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @mc_addr_count: number of multicast addresses to program
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Updates the Multicast Table Array.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * The caller must have a packed mc_addr_list of multicast addresses.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_update_mc_addr_list(struct e1000_hw *hw, u8 *mc_addr_list,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 mc_addr_count)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.update_mc_addr_list)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->mac.ops.update_mc_addr_list(hw, mc_addr_list,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi mc_addr_count);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_force_mac_fc - Force MAC flow control
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Force the MAC's flow control settings. Currently no func pointer exists
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and all implementations are handled in the generic version of this
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_force_mac_fc(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_force_mac_fc_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_check_for_link - Check/Store link connection
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This checks the link condition of the adapter and stores the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * results in the hw->mac structure. This is a function pointer entry
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_check_for_link(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.check_for_link)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.check_for_link(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_check_mng_mode - Check management mode
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This checks if the adapter has manageability enabled.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchibool e1000_check_mng_mode(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.check_mng_mode)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.check_mng_mode(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return FALSE;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_mng_write_dhcp_info - Writes DHCP info to host interface
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @buffer: pointer to the host interface
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @length: size of the buffer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Writes the DHCP information to the host interface.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_mng_write_dhcp_info(struct e1000_hw *hw, u8 *buffer, u16 length)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_mng_write_dhcp_info_generic(hw, buffer, length);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_reset_hw - Reset hardware
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This resets the hardware into a known state. This is a function pointer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_reset_hw(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.reset_hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.reset_hw(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_init_hw - Initialize hardware
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This inits the hardware readying it for operation. This is a function
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_init_hw(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.init_hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.init_hw(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_setup_link - Configures link and flow control
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This configures link and flow control settings for the adapter. This
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * is a function pointer entry point called by drivers. While modules can
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * also call this, they probably call their own version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_setup_link(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.setup_link)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.setup_link(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_get_speed_and_duplex - Returns current speed and duplex
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @speed: pointer to a 16-bit value to store the speed
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @duplex: pointer to a 16-bit value to store the duplex.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This returns the speed and duplex of the adapter in the two 'out'
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * variables passed in. This is a function pointer entry point called
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed, u16 *duplex)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.get_link_up_info)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.get_link_up_info(hw, speed, duplex);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_setup_led - Configures SW controllable LED
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This prepares the SW controllable LED for use and saves the current state
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * of the LED so it can be later restored. This is a function pointer entry
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_setup_led(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.setup_led)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.setup_led(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_cleanup_led - Restores SW controllable LED
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This restores the SW controllable LED to the value saved off by
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_setup_led. This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_cleanup_led(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.cleanup_led)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.cleanup_led(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_blink_led - Blink SW controllable LED
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This starts the adapter LED blinking. Request the LED to be setup first
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and cleaned up after. This is a function pointer entry point called by
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_blink_led(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.blink_led)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.blink_led(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_id_led_init - store LED configurations in SW
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Initializes the LED config in SW. This is a function pointer entry point
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_id_led_init(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.id_led_init)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.id_led_init(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_led_on - Turn on SW controllable LED
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Turns the SW defined LED on. This is a function pointer entry point
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_led_on(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.led_on)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.led_on(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_led_off - Turn off SW controllable LED
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Turns the SW defined LED off. This is a function pointer entry point
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_led_off(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.led_off)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.led_off(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_reset_adaptive - Reset adaptive IFS
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Resets the adaptive IFS. Currently no func pointer exists and all
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * implementations are handled in the generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_reset_adaptive(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_reset_adaptive_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_update_adaptive - Update adaptive IFS
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Updates adapter IFS. Currently no func pointer exists and all
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * implementations are handled in the generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_update_adaptive(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_update_adaptive_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_disable_pcie_master - Disable PCI-Express master access
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Disables PCI-Express master access and verifies there are no pending
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * requests. Currently no func pointer exists and all implementations are
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * handled in the generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_disable_pcie_master(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_disable_pcie_master_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_config_collision_dist - Configure collision distance
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Configures the collision distance to the default value and is used
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * during link setup.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_config_collision_dist(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.config_collision_dist)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->mac.ops.config_collision_dist(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_rar_set - Sets a receive address register
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @addr: address to set the RAR to
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @index: the RAR to set
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Sets a Receive Address Register (RAR) to the specified address.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchiint e1000_rar_set(struct e1000_hw *hw, u8 *addr, u32 index)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.rar_set)
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi return hw->mac.ops.rar_set(hw, addr, index);
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_validate_mdi_setting - Ensures valid MDI/MDIX SW state
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Ensures that the MDI/MDIX SW state is valid.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_validate_mdi_setting(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.validate_mdi_setting)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.validate_mdi_setting(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_hash_mc_addr - Determines address location in multicast table
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @mc_addr: Multicast address to hash.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This hashes an address to determine its location in the multicast
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * table. Currently no func pointer exists and all implementations
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * are handled in the generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiu32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_hash_mc_addr_generic(hw, mc_addr);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_enable_tx_pkt_filtering - Enable packet filtering on TX
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Enables packet filtering on transmit packets if manageability is enabled
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and host interface is enabled.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Currently no func pointer exists and all implementations are handled in the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchibool e1000_enable_tx_pkt_filtering(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_enable_tx_pkt_filtering_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_mng_host_if_write - Writes to the manageability host interface
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @buffer: pointer to the host interface buffer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @length: size of the buffer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: location in the buffer to write to
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @sum: sum of the data (not checksum)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function writes the buffer content at the offset given on the host if.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * It also does alignment considerations to do the writes in most efficient
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * way. Also fills up the sum of the buffer in *buffer parameter.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, u16 length,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 offset, u8 *sum)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_mng_host_if_write_generic(hw, buffer, length, offset, sum);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_mng_write_cmd_header - Writes manageability command header
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hdr: pointer to the host interface command header
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Writes the command header after does the checksum calculation.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_mng_write_cmd_header(struct e1000_hw *hw,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_host_mng_command_header *hdr)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_mng_write_cmd_header_generic(hw, hdr);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_mng_enable_host_if - Checks host interface is enabled
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Returns E1000_success upon success, else E1000_ERR_HOST_INTERFACE_COMMAND
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function checks whether the HOST IF is enabled for command operation
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and also checks whether the previous command is completed. It busy waits
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * in case of previous command is not completed.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_mng_enable_host_if(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_mng_enable_host_if_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_set_obff_timer - Set Optimized Buffer Flush/Fill timer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @itr: u32 indicating itr value
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Set the OBFF timer based on the given interrupt rate.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_set_obff_timer(struct e1000_hw *hw, u32 itr)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.set_obff_timer)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.set_obff_timer(hw, itr);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_check_reset_block - Verifies PHY can be reset
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Checks if the PHY is in a state that can be reset or if manageability
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * has it tied up. This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_check_reset_block(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.check_reset_block)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.check_reset_block(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_read_phy_reg - Reads PHY register
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the register to read
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @data: the buffer to store the 16-bit read.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Reads the PHY register and returns the value in data.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_read_phy_reg(struct e1000_hw *hw, u32 offset, u16 *data)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.read_reg)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.read_reg(hw, offset, data);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_write_phy_reg - Writes PHY register
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the register to write
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @data: the value to write.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Writes the PHY register at offset with the value in data.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_write_phy_reg(struct e1000_hw *hw, u32 offset, u16 data)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.write_reg)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.write_reg(hw, offset, data);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_release_phy - Generic release PHY
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Return if silicon family does not require a semaphore when accessing the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * PHY.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_release_phy(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.release)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->phy.ops.release(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_acquire_phy - Generic acquire PHY
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Return success if silicon family does not require a semaphore when
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * accessing the PHY.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_acquire_phy(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.acquire)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.acquire(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_cfg_on_link_up - Configure PHY upon link up
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_cfg_on_link_up(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.cfg_on_link_up)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.cfg_on_link_up(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_read_kmrn_reg - Reads register using Kumeran interface
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the register to read
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @data: the location to store the 16-bit value read.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Reads a register out of the Kumeran interface. Currently no func pointer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * exists and all implementations are handled in the generic version of
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_read_kmrn_reg_generic(hw, offset, data);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_write_kmrn_reg - Writes register using Kumeran interface
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the register to write
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @data: the value to write.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Writes a register to the Kumeran interface. Currently no func pointer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * exists and all implementations are handled in the generic version of
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_write_kmrn_reg_generic(hw, offset, data);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_get_cable_length - Retrieves cable length estimation
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function estimates the cable length and stores them in
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * hw->phy.min_length and hw->phy.max_length. This is a function pointer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_get_cable_length(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.get_cable_length)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.get_cable_length(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_get_phy_info - Retrieves PHY information from registers
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This function gets some information from various PHY registers and
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * populates hw->phy values with it. This is a function pointer entry
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_get_phy_info(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.get_info)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.get_info(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_phy_hw_reset - Hard PHY reset
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Performs a hard PHY reset. This is a function pointer entry point called
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_phy_hw_reset(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.reset)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.reset(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_phy_commit - Soft PHY reset
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Performs a soft PHY reset on those that apply. This is a function pointer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_phy_commit(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.commit)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.commit(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_set_d0_lplu_state - Sets low power link up state for D0
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @active: boolean used to enable/disable lplu
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Success returns 0, Failure returns 1
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * The low power link up (lplu) state is set to the power management level D0
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and SmartSpeed is disabled when active is TRUE, else clear lplu for D0
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * is used during Dx states where the power conservation is most important.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * During driver activity, SmartSpeed should be enabled so performance is
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * maintained. This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.set_d0_lplu_state)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.set_d0_lplu_state(hw, active);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_set_d3_lplu_state - Sets low power link up state for D3
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @active: boolean used to enable/disable lplu
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Success returns 0, Failure returns 1
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * The low power link up (lplu) state is set to the power management level D3
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * is used during Dx states where the power conservation is most important.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * During driver activity, SmartSpeed should be enabled so performance is
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * maintained. This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.set_d3_lplu_state)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->phy.ops.set_d3_lplu_state(hw, active);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_read_mac_addr - Reads MAC address
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Reads the MAC address out of the adapter and stores it in the HW structure.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Currently no func pointer exists and all implementations are handled in the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_read_mac_addr(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.read_mac_addr)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->mac.ops.read_mac_addr(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_read_mac_addr_generic(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_read_pba_string - Read device part number string
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @pba_num: pointer to device part number
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @pba_num_size: size of part number buffer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Reads the product board assembly (PBA) number from the EEPROM and stores
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * the value in pba_num.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Currently no func pointer exists and all implementations are handled in the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_read_pba_string(struct e1000_hw *hw, u8 *pba_num, u32 pba_num_size)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_read_pba_string_generic(hw, pba_num, pba_num_size);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_read_pba_length - Read device part number string length
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @pba_num_size: size of part number buffer
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Reads the product board assembly (PBA) number length from the EEPROM and
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * stores the value in pba_num.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Currently no func pointer exists and all implementations are handled in the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_read_pba_length(struct e1000_hw *hw, u32 *pba_num_size)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_read_pba_length_generic(hw, pba_num_size);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_validate_nvm_checksum - Verifies NVM (EEPROM) checksum
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Validates the NVM checksum is correct. This is a function pointer entry
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_validate_nvm_checksum(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->nvm.ops.validate)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->nvm.ops.validate(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_update_nvm_checksum - Updates NVM (EEPROM) checksum
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Updates the NVM checksum. Currently no func pointer exists and all
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * implementations are handled in the generic version of this function.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_update_nvm_checksum(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->nvm.ops.update)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->nvm.ops.update(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_reload_nvm - Reloads EEPROM
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Reloads the EEPROM by setting the "Reinitialize from EEPROM" bit in the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * extended control register.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_reload_nvm(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->nvm.ops.reload)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->nvm.ops.reload(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_read_nvm - Reads NVM (EEPROM)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the word offset to read
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @words: number of 16-bit words to read
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @data: pointer to the properly sized buffer for the data.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Reads 16-bit chunks of data from the NVM (EEPROM). This is a function
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_read_nvm(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->nvm.ops.read)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->nvm.ops.read(hw, offset, words, data);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return -E1000_ERR_CONFIG;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_write_nvm - Writes to NVM (EEPROM)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the word offset to read
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @words: number of 16-bit words to write
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @data: pointer to the properly sized buffer for the data.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Writes 16-bit chunks of data to the NVM (EEPROM). This is a function
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_write_nvm(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->nvm.ops.write)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return hw->nvm.ops.write(hw, offset, words, data);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return E1000_SUCCESS;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_write_8bit_ctrl_reg - Writes 8bit Control register
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @reg: 32bit register offset
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @offset: the register to write
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @data: the value to write.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Writes the PHY register at offset with the value in data.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * This is a function pointer entry point called by drivers.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_write_8bit_ctrl_reg(struct e1000_hw *hw, u32 reg, u32 offset,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u8 data)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi return e1000_write_8bit_ctrl_reg_generic(hw, reg, offset, data);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_power_up_phy - Restores link in case of PHY power down
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * The phy may be powered down to save power, to turn off link when the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * driver is unloaded, or wake on lan is not enabled (among others).
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_power_up_phy(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.power_up)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->phy.ops.power_up(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_setup_link(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_power_down_phy - Power down PHY
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * The phy may be powered down to save power, to turn off link when the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * driver is unloaded, or wake on lan is not enabled (among others).
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_power_down_phy(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->phy.ops.power_down)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->phy.ops.power_down(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_power_up_fiber_serdes_link - Power up serdes link
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Power on the optics and PCS.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_power_up_fiber_serdes_link(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.power_up_serdes)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->mac.ops.power_up_serdes(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/**
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * e1000_shutdown_fiber_serdes_link - Remove link during power down
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * @hw: pointer to the HW structure
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi *
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi * Shutdown the optics and PCS on driver unload.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi **/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_shutdown_fiber_serdes_link(struct e1000_hw *hw)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi{
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi if (hw->mac.ops.shutdown_serdes)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi hw->mac.ops.shutdown_serdes(hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi}
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi