ixgbe/base: new X557 phy
Add new phy ID: X557_PHY_ID, and implement its internal setup function and external init function. Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com>
This commit is contained in:
parent
3b3a1423b1
commit
76d5b807ff
@ -536,6 +536,20 @@ s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
|
||||
IXGBE_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_internal_phy - Configure integrated PHY
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Reconfigure the integrated PHY in order to enable talk to the external PHY.
|
||||
* Returns success if not implemented, since nothing needs to be done in this
|
||||
* case.
|
||||
*/
|
||||
s32 ixgbe_setup_internal_phy(struct ixgbe_hw *hw)
|
||||
{
|
||||
return ixgbe_call_func(hw, hw->phy.ops.setup_internal_link, (hw),
|
||||
IXGBE_SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_check_phy_link - Determine link and speed status
|
||||
* @hw: pointer to hardware structure
|
||||
|
@ -70,6 +70,7 @@ s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
|
||||
u16 phy_data);
|
||||
|
||||
s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_internal_phy(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_check_phy_link(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed *speed,
|
||||
bool *link_up);
|
||||
|
@ -435,6 +435,9 @@ enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
|
||||
case ATH_PHY_ID:
|
||||
phy_type = ixgbe_phy_nl;
|
||||
break;
|
||||
case X557_PHY_ID:
|
||||
phy_type = ixgbe_phy_x550em_ext_t;
|
||||
break;
|
||||
default:
|
||||
phy_type = ixgbe_phy_unknown;
|
||||
break;
|
||||
|
@ -1374,6 +1374,7 @@ struct ixgbe_dmac_config {
|
||||
|
||||
#define IXGBE_MDIO_AUTO_NEG_CONTROL 0x0 /* AUTO_NEG Control Reg */
|
||||
#define IXGBE_MDIO_AUTO_NEG_STATUS 0x1 /* AUTO_NEG Status Reg */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STAT 0xC800 /* AUTO_NEG Vendor Status Reg */
|
||||
#define IXGBE_MDIO_AUTO_NEG_ADVT 0x10 /* AUTO_NEG Advt Reg */
|
||||
#define IXGBE_MDIO_AUTO_NEG_LP 0x13 /* AUTO_NEG LP Status Reg */
|
||||
#define IXGBE_MDIO_AUTO_NEG_EEE_ADVT 0x3C /* AUTO_NEG EEE Advt Reg */
|
||||
@ -1394,10 +1395,17 @@ struct ixgbe_dmac_config {
|
||||
#define IXGBE_MDIO_PHY_100BASETX_ABILITY 0x0080 /* 100BaseTX capable */
|
||||
#define IXGBE_MDIO_PHY_SET_LOW_POWER_MODE 0x0800 /* Set low power mode */
|
||||
|
||||
#define IXGBE_MDIO_TX_VENDOR_ALARMS_3 0xCC02 /* Vendor Alarms 3 Reg */
|
||||
#define IXGBE_MDIO_TX_VENDOR_ALARMS_3_RST_MASK 0x3 /* PHY Reset Complete Mask */
|
||||
#define IXGBE_MDIO_GLOBAL_RES_PR_10 0xC479 /* Global Resv Provisioning 10 Reg */
|
||||
#define IXGBE_MDIO_POWER_UP_STALL 0x8000 /* Power Up Stall */
|
||||
|
||||
#define IXGBE_MDIO_PMA_PMD_CONTROL_ADDR 0x0000 /* PMA/PMD Control Reg */
|
||||
#define IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR 0xC30A /* PHY_XS SDA/SCL Addr Reg */
|
||||
#define IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA 0xC30B /* PHY_XS SDA/SCL Data Reg */
|
||||
#define IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT 0xC30C /* PHY_XS SDA/SCL Status Reg */
|
||||
#define IXGBE_MDIO_PMD_STD_TX_DISABLE_CNTR 0x9 /* Standard Transmit Dis Reg */
|
||||
#define IXGBE_MDIO_PMD_GLOBAL_TX_DISABLE 0x0001 /* PMD Global Transmit Dis */
|
||||
|
||||
#define IXGBE_PCRC8ECL 0x0E810 /* PCR CRC-8 Error Count Lo */
|
||||
#define IXGBE_PCRC8ECH 0x0E811 /* PCR CRC-8 Error Count Hi */
|
||||
@ -1408,6 +1416,21 @@ struct ixgbe_dmac_config {
|
||||
/* MII clause 22/28 definitions */
|
||||
#define IXGBE_MDIO_PHY_LOW_POWER_MODE 0x0800
|
||||
|
||||
#define IXGBE_MDIO_XENPAK_LASI_STATUS 0x9005 /* XENPAK LASI Status register*/
|
||||
#define IXGBE_XENPAK_LASI_LINK_STATUS_ALARM 0x1 /* Link Status Alarm change */
|
||||
|
||||
#define IXGBE_MDIO_AUTO_NEG_LINK_STATUS 0x4 /* Indicates if link is up */
|
||||
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_MASK 0x7 /* Speed/Duplex Mask */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_10M_HALF 0x0 /* 10Mb/s Half Duplex */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_10M_FULL 0x1 /* 10Mb/s Full Duplex */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_100M_HALF 0x2 /* 100Mb/s Half Duplex */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_100M_FULL 0x3 /* 100Mb/s Full Duplex */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_1GB_HALF 0x4 /* 1Gb/s Half Duplex */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_1GB_FULL 0x5 /* 1Gb/s Full Duplex */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_10GB_HALF 0x6 /* 10Gb/s Half Duplex */
|
||||
#define IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_10GB_FULL 0x7 /* 10Gb/s Full Duplex */
|
||||
|
||||
#define IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG 0x20 /* 10G Control Reg */
|
||||
#define IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG 0xC400 /* 1G Provisioning 1 */
|
||||
#define IXGBE_MII_AUTONEG_XNP_TX_REG 0x17 /* 1G XNP Transmit */
|
||||
@ -1432,6 +1455,7 @@ struct ixgbe_dmac_config {
|
||||
#define TNX_FW_REV 0xB
|
||||
#define X540_PHY_ID 0x01540200
|
||||
#define X550_PHY_ID 0x01540220
|
||||
#define X557_PHY_ID 0x01540240
|
||||
#define AQ_FW_REV 0x20
|
||||
#define QT2022_PHY_ID 0x0043A400
|
||||
#define ATH_PHY_ID 0x03429050
|
||||
@ -3186,6 +3210,7 @@ enum ixgbe_phy_type {
|
||||
ixgbe_phy_aq,
|
||||
ixgbe_phy_x550em_kr,
|
||||
ixgbe_phy_x550em_kx4,
|
||||
ixgbe_phy_x550em_ext_t,
|
||||
ixgbe_phy_cu_unknown,
|
||||
ixgbe_phy_qt,
|
||||
ixgbe_phy_xaui,
|
||||
@ -3536,6 +3561,7 @@ struct ixgbe_phy_operations {
|
||||
s32 (*read_reg_mdi)(struct ixgbe_hw *, u32, u32, u16 *);
|
||||
s32 (*write_reg_mdi)(struct ixgbe_hw *, u32, u32, u16);
|
||||
s32 (*setup_link)(struct ixgbe_hw *);
|
||||
s32 (*setup_internal_link)(struct ixgbe_hw *);
|
||||
s32 (*setup_link_speed)(struct ixgbe_hw *, ixgbe_link_speed, bool);
|
||||
s32 (*check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *);
|
||||
s32 (*get_firmware_version)(struct ixgbe_hw *, u16 *);
|
||||
|
@ -185,8 +185,6 @@ s32 ixgbe_init_ops_X550EM(struct ixgbe_hw *hw)
|
||||
ixgbe_get_supported_physical_layer_X550em;
|
||||
|
||||
/* PHY */
|
||||
phy->ops.read_reg = ixgbe_read_phy_reg_x550em;
|
||||
phy->ops.write_reg = ixgbe_write_phy_reg_x550em;
|
||||
phy->ops.init = ixgbe_init_phy_ops_X550em;
|
||||
phy->ops.identify = ixgbe_identify_phy_x550em;
|
||||
if (mac->ops.get_media_type(hw) != ixgbe_media_type_copper)
|
||||
@ -944,6 +942,11 @@ s32 ixgbe_init_phy_ops_X550em(struct ixgbe_hw *hw)
|
||||
switch (hw->phy.type) {
|
||||
case ixgbe_phy_x550em_kr:
|
||||
phy->ops.setup_link = ixgbe_setup_kr_x550em;
|
||||
phy->ops.read_reg = ixgbe_read_phy_reg_x550em;
|
||||
phy->ops.write_reg = ixgbe_write_phy_reg_x550em;
|
||||
break;
|
||||
case ixgbe_phy_x550em_ext_t:
|
||||
phy->ops.setup_internal_link = ixgbe_setup_internal_phy_x550em;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -985,6 +988,13 @@ s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
|
||||
if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
|
||||
return status;
|
||||
|
||||
/* start the external PHY */
|
||||
if (hw->phy.type == ixgbe_phy_x550em_ext_t) {
|
||||
status = ixgbe_init_ext_t_x550em(hw);
|
||||
if (status)
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Setup SFP module if there is one present. */
|
||||
if (hw->phy.sfp_setup_needed) {
|
||||
status = hw->mac.ops.setup_sfp(hw);
|
||||
@ -1049,6 +1059,97 @@ s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
|
||||
hw->mac.num_rar_entries = 128;
|
||||
hw->mac.ops.init_rx_addrs(hw);
|
||||
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_init_ext_t_x550em - Start (unstall) the external Base T PHY.
|
||||
* @hw: pointer to hardware structure
|
||||
*/
|
||||
s32 ixgbe_init_ext_t_x550em(struct ixgbe_hw *hw)
|
||||
{
|
||||
u32 status;
|
||||
u16 reg;
|
||||
u32 retries = 1;
|
||||
|
||||
/* TODO: The number of attempts and delay between attempts is undefined */
|
||||
do {
|
||||
/* decrement retries counter and exit if we hit 0 */
|
||||
if (retries < 1) {
|
||||
ERROR_REPORT1(IXGBE_ERROR_INVALID_STATE,
|
||||
"External PHY not yet finished resetting.");
|
||||
return IXGBE_ERR_PHY;
|
||||
}
|
||||
retries--;
|
||||
|
||||
usec_delay(0);
|
||||
|
||||
status = hw->phy.ops.read_reg(hw,
|
||||
IXGBE_MDIO_TX_VENDOR_ALARMS_3,
|
||||
IXGBE_MDIO_PMA_PMD_DEV_TYPE,
|
||||
®);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* Verify PHY FW reset has completed */
|
||||
} while ((reg & IXGBE_MDIO_TX_VENDOR_ALARMS_3_RST_MASK) != 1);
|
||||
|
||||
/* Set port to low power mode */
|
||||
status = hw->phy.ops.read_reg(hw,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
|
||||
®);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
reg |= IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
|
||||
|
||||
status = hw->phy.ops.write_reg(hw,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
|
||||
reg);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* Enable the transmitter */
|
||||
status = hw->phy.ops.read_reg(hw,
|
||||
IXGBE_MDIO_PMD_STD_TX_DISABLE_CNTR,
|
||||
IXGBE_MDIO_PMA_PMD_DEV_TYPE,
|
||||
®);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
reg &= ~IXGBE_MDIO_PMD_GLOBAL_TX_DISABLE;
|
||||
|
||||
status = hw->phy.ops.write_reg(hw,
|
||||
IXGBE_MDIO_PMD_STD_TX_DISABLE_CNTR,
|
||||
IXGBE_MDIO_PMA_PMD_DEV_TYPE,
|
||||
reg);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* Un-stall the PHY FW */
|
||||
status = hw->phy.ops.read_reg(hw,
|
||||
IXGBE_MDIO_GLOBAL_RES_PR_10,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
|
||||
®);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
reg &= ~IXGBE_MDIO_POWER_UP_STALL;
|
||||
|
||||
status = hw->phy.ops.write_reg(hw,
|
||||
IXGBE_MDIO_GLOBAL_RES_PR_10,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
|
||||
reg);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -1095,10 +1196,12 @@ s32 ixgbe_setup_kr_x550em(struct ixgbe_hw *hw)
|
||||
/**
|
||||
* ixgbe_setup_ixfi_x550em - Configure the KR PHY for iXFI.
|
||||
* @hw: pointer to hardware structure
|
||||
* @speed: the link speed to force
|
||||
*
|
||||
* Configures the integrated KR PHY to use iXFI mode.
|
||||
* Configures the integrated KR PHY to use iXFI mode. Used to connect an
|
||||
* internal and external PHY at a specific speed, without autonegotiation.
|
||||
**/
|
||||
s32 ixgbe_setup_ixfi_x550em(struct ixgbe_hw *hw)
|
||||
STATIC s32 ixgbe_setup_ixfi_x550em(struct ixgbe_hw *hw, ixgbe_link_speed *speed)
|
||||
{
|
||||
s32 status;
|
||||
u32 reg_val;
|
||||
@ -1112,7 +1215,20 @@ s32 ixgbe_setup_ixfi_x550em(struct ixgbe_hw *hw)
|
||||
|
||||
reg_val &= ~IXGBE_KRM_LINK_CTRL_1_TETH_AN_ENABLE;
|
||||
reg_val &= ~IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_MASK;
|
||||
reg_val |= IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_10G;
|
||||
|
||||
/* Select forced link speed for internal PHY. */
|
||||
switch (*speed) {
|
||||
case IXGBE_LINK_SPEED_10GB_FULL:
|
||||
reg_val |= IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_10G;
|
||||
break;
|
||||
case IXGBE_LINK_SPEED_1GB_FULL:
|
||||
reg_val |= IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_1G;
|
||||
break;
|
||||
default:
|
||||
/* Other link speeds are not supported by internal KR PHY. */
|
||||
return IXGBE_ERR_LINK_SETUP;
|
||||
}
|
||||
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
@ -1190,6 +1306,74 @@ s32 ixgbe_setup_ixfi_x550em(struct ixgbe_hw *hw)
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_internal_phy_x550em - Configure integrated KR PHY
|
||||
* @hw: point to hardware structure
|
||||
*
|
||||
* Configures the integrated KR PHY to talk to the external PHY. The base
|
||||
* driver will call this function when it gets notification via interrupt from
|
||||
* the external PHY. This function forces the internal PHY into iXFI mode at
|
||||
* the correct speed.
|
||||
*
|
||||
* A return of a non-zero value indicates an error, and the base driver should
|
||||
* not report link up.
|
||||
*/
|
||||
s32 ixgbe_setup_internal_phy_x550em(struct ixgbe_hw *hw)
|
||||
{
|
||||
u32 status;
|
||||
u16 lasi, autoneg_status, speed;
|
||||
ixgbe_link_speed force_speed;
|
||||
|
||||
/* Verify that the external link status has changed */
|
||||
status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_XENPAK_LASI_STATUS,
|
||||
IXGBE_MDIO_PMA_PMD_DEV_TYPE,
|
||||
&lasi);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* If there was no change in link status, we can just exit */
|
||||
if (!(lasi & IXGBE_XENPAK_LASI_LINK_STATUS_ALARM))
|
||||
return IXGBE_SUCCESS;
|
||||
|
||||
/* we read this twice back to back to indicate current status */
|
||||
status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_status);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_status);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* If link is not up return an error indicating treat link as down */
|
||||
if (!(autoneg_status & IXGBE_MDIO_AUTO_NEG_LINK_STATUS))
|
||||
return IXGBE_ERR_INVALID_LINK_SETTINGS;
|
||||
|
||||
status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_VENDOR_STAT,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&speed);
|
||||
|
||||
/* clear everything but the speed and duplex bits */
|
||||
speed &= IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_MASK;
|
||||
|
||||
switch (speed) {
|
||||
case IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_10GB_FULL:
|
||||
force_speed = IXGBE_LINK_SPEED_10GB_FULL;
|
||||
break;
|
||||
case IXGBE_MDIO_AUTO_NEG_VENDOR_STATUS_1GB_FULL:
|
||||
force_speed = IXGBE_LINK_SPEED_1GB_FULL;
|
||||
break;
|
||||
default:
|
||||
/* Internal PHY does not support anything else */
|
||||
return IXGBE_ERR_INVALID_LINK_SETTINGS;
|
||||
}
|
||||
|
||||
return ixgbe_setup_ixfi_x550em(hw, &force_speed);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_phy_loopback_x550em - Configure the KR PHY for loopback.
|
||||
* @hw: pointer to hardware structure
|
||||
@ -1748,6 +1932,7 @@ s32 ixgbe_update_flash_X550(struct ixgbe_hw *hw)
|
||||
u32 ixgbe_get_supported_physical_layer_X550em(struct ixgbe_hw *hw)
|
||||
{
|
||||
u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
|
||||
u16 ext_ability = 0;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_supported_physical_layer_X550em");
|
||||
|
||||
@ -1762,6 +1947,15 @@ u32 ixgbe_get_supported_physical_layer_X550em(struct ixgbe_hw *hw)
|
||||
physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4 |
|
||||
IXGBE_PHYSICAL_LAYER_1000BASE_KX;
|
||||
break;
|
||||
case ixgbe_phy_x550em_ext_t:
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY,
|
||||
IXGBE_MDIO_PMA_PMD_DEV_TYPE,
|
||||
&ext_ability);
|
||||
if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY)
|
||||
physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
|
||||
if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY)
|
||||
physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -80,7 +80,9 @@ void ixgbe_init_mac_link_ops_X550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_init_phy_ops_X550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_kr_x550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_ixfi_x550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_kx4_x550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_init_ext_t_x550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_internal_phy_x550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_phy_loopback_x550em(struct ixgbe_hw *hw);
|
||||
u32 ixgbe_get_supported_physical_layer_X550em(struct ixgbe_hw *hw);
|
||||
void ixgbe_disable_rx_x550(struct ixgbe_hw *hw);
|
||||
|
Loading…
Reference in New Issue
Block a user