Update driver to Intel version 2.0.7:
This adds new feature support for the 82599, a hardware assist to LRO, doing this required a large revamp to the RX cleanup code because the descriptor ring may not be processed out of order, this necessitated the elimination of global pointers. Additionally, the RX routine now does not refresh mbufs on every descriptor, rather it will do a range, and then update the hardware pointer at that time. These are performance oriented changes. The TX side now has a cleaner simpler watchdog algorithm as well, in TX cleanup a read of ticks is stored, that can then be compared in local_timer to determine if there is a hang. Various other cleanups along the way, thanks to all who have provided input and testing.
This commit is contained in:
parent
37c0b1019a
commit
f615ab2eb3
File diff suppressed because it is too large
Load Diff
@ -134,9 +134,11 @@
|
||||
#define MAX_LOOP 10
|
||||
|
||||
/*
|
||||
* This parameter controls the duration of transmit watchdog timer.
|
||||
* This is the max watchdog interval, ie. the time that can
|
||||
* pass between any two TX clean operations, such only happening
|
||||
* when the TX hardware is functioning.
|
||||
*/
|
||||
#define IXGBE_TX_TIMEOUT 5 /* set to 5 seconds */
|
||||
#define IXGBE_WATCHDOG (10 * hz)
|
||||
|
||||
/*
|
||||
* This parameters control when the driver calls the routine to reclaim
|
||||
@ -148,7 +150,7 @@
|
||||
#define IXGBE_MAX_FRAME_SIZE 0x3F00
|
||||
|
||||
/* Flow control constants */
|
||||
#define IXGBE_FC_PAUSE 0x680
|
||||
#define IXGBE_FC_PAUSE 0xFFFF
|
||||
#define IXGBE_FC_HI 0x20000
|
||||
#define IXGBE_FC_LO 0x10000
|
||||
|
||||
@ -174,7 +176,7 @@
|
||||
#define MSIX_82599_BAR 4
|
||||
#define IXGBE_TSO_SIZE 65535
|
||||
#define IXGBE_TX_BUFFER_SIZE ((u32) 1514)
|
||||
#define IXGBE_RX_HDR 128
|
||||
#define IXGBE_RX_HDR 256
|
||||
#define IXGBE_VFTA_SIZE 128
|
||||
#define IXGBE_BR_SIZE 4096
|
||||
#define CSUM_OFFLOAD 7 /* Bits in csum flags */
|
||||
@ -253,14 +255,15 @@ struct tx_ring {
|
||||
struct mtx tx_mtx;
|
||||
u32 me;
|
||||
u32 msix;
|
||||
u32 watchdog_timer;
|
||||
bool watchdog_check;
|
||||
int watchdog_time;
|
||||
union ixgbe_adv_tx_desc *tx_base;
|
||||
volatile u32 tx_hwb;
|
||||
struct ixgbe_dma_alloc txdma;
|
||||
struct task tx_task;
|
||||
struct taskqueue *tq;
|
||||
u32 next_avail_tx_desc;
|
||||
u32 next_tx_to_clean;
|
||||
u32 next_avail_desc;
|
||||
u32 next_to_clean;
|
||||
struct ixgbe_tx_buf *tx_buffers;
|
||||
volatile u16 tx_avail;
|
||||
u32 txd_cmd;
|
||||
@ -272,7 +275,10 @@ struct tx_ring {
|
||||
/* Interrupt resources */
|
||||
void *tag;
|
||||
struct resource *res;
|
||||
|
||||
#ifdef IXGBE_FDIR
|
||||
u16 atr_sample;
|
||||
u16 atr_count;
|
||||
#endif
|
||||
/* Soft Stats */
|
||||
u32 no_tx_desc_avail;
|
||||
u32 no_tx_desc_late;
|
||||
@ -297,13 +303,12 @@ struct rx_ring {
|
||||
struct lro_ctrl lro;
|
||||
bool lro_enabled;
|
||||
bool hdr_split;
|
||||
unsigned int last_cleaned;
|
||||
bool hw_rsc;
|
||||
unsigned int last_refreshed;
|
||||
unsigned int next_to_check;
|
||||
struct ixgbe_rx_buf *rx_buffers;
|
||||
bus_dma_tag_t rxtag;
|
||||
bus_dmamap_t spare_map;
|
||||
struct mbuf *fmp;
|
||||
struct mbuf *lmp;
|
||||
char mtx_name[16];
|
||||
|
||||
u32 bytes; /* Used for AIM calc */
|
||||
@ -318,6 +323,10 @@ struct rx_ring {
|
||||
u64 rx_split_packets;
|
||||
u64 rx_packets;
|
||||
u64 rx_bytes;
|
||||
u64 rsc_num;
|
||||
#ifdef IXGBE_FDIR
|
||||
u64 flm;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Our adapter structure */
|
||||
@ -349,21 +358,16 @@ struct adapter {
|
||||
eventhandler_tag vlan_attach;
|
||||
eventhandler_tag vlan_detach;
|
||||
|
||||
u32 num_vlans;
|
||||
u16 num_vlans;
|
||||
u16 num_queues;
|
||||
|
||||
/* Info about the board itself */
|
||||
u32 part_num;
|
||||
u32 optics;
|
||||
bool link_active;
|
||||
u16 max_frame_size;
|
||||
u32 link_speed;
|
||||
bool link_up;
|
||||
u32 linkvec;
|
||||
u32 tx_int_delay;
|
||||
u32 tx_abs_int_delay;
|
||||
u32 rx_int_delay;
|
||||
u32 rx_abs_int_delay;
|
||||
|
||||
/* Mbuf cluster size */
|
||||
u32 rx_mbuf_sz;
|
||||
@ -373,6 +377,10 @@ struct adapter {
|
||||
struct task link_task; /* Link tasklet */
|
||||
struct task mod_task; /* SFP tasklet */
|
||||
struct task msf_task; /* Multispeed Fiber tasklet */
|
||||
#ifdef IXGBE_FDIR
|
||||
int fdir_reinit;
|
||||
struct task fdir_task;
|
||||
#endif
|
||||
struct taskqueue *tq;
|
||||
|
||||
/*
|
||||
@ -423,12 +431,12 @@ struct adapter {
|
||||
#define IXGBE_CORE_LOCK_INIT(_sc, _name) \
|
||||
mtx_init(&(_sc)->core_mtx, _name, "IXGBE Core Lock", MTX_DEF)
|
||||
#define IXGBE_CORE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->core_mtx)
|
||||
#define IXGBE_TX_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->tx_mtx)
|
||||
#define IXGBE_RX_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->rx_mtx)
|
||||
#define IXGBE_TX_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->tx_mtx)
|
||||
#define IXGBE_RX_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->rx_mtx)
|
||||
#define IXGBE_CORE_LOCK(_sc) mtx_lock(&(_sc)->core_mtx)
|
||||
#define IXGBE_TX_LOCK(_sc) mtx_lock(&(_sc)->tx_mtx)
|
||||
#define IXGBE_TX_TRYLOCK(_sc) mtx_trylock(&(_sc)->tx_mtx)
|
||||
#define IXGBE_RX_LOCK(_sc) mtx_lock(&(_sc)->rx_mtx)
|
||||
#define IXGBE_TX_LOCK(_sc) mtx_lock(&(_sc)->tx_mtx)
|
||||
#define IXGBE_TX_TRYLOCK(_sc) mtx_trylock(&(_sc)->tx_mtx)
|
||||
#define IXGBE_RX_LOCK(_sc) mtx_lock(&(_sc)->rx_mtx)
|
||||
#define IXGBE_CORE_UNLOCK(_sc) mtx_unlock(&(_sc)->core_mtx)
|
||||
#define IXGBE_TX_UNLOCK(_sc) mtx_unlock(&(_sc)->tx_mtx)
|
||||
#define IXGBE_RX_UNLOCK(_sc) mtx_unlock(&(_sc)->rx_mtx)
|
||||
|
@ -44,20 +44,21 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
|
||||
bool *autoneg);
|
||||
static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num);
|
||||
static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw);
|
||||
static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
|
||||
bool autoneg_wait_to_complete);
|
||||
static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed *speed, bool *link_up,
|
||||
bool link_up_wait_to_complete);
|
||||
static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
|
||||
static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
bool autoneg,
|
||||
bool autoneg_wait_to_complete);
|
||||
static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw);
|
||||
static s32 ixgbe_setup_copper_link_speed_82598(struct ixgbe_hw *hw,
|
||||
static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
bool autoneg,
|
||||
bool autoneg_wait_to_complete);
|
||||
static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
|
||||
static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
|
||||
s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan,
|
||||
@ -70,7 +71,50 @@ s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
|
||||
u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw);
|
||||
void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw);
|
||||
void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw);
|
||||
static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw);
|
||||
|
||||
/**
|
||||
* ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
|
||||
* @hw: pointer to the HW structure
|
||||
*
|
||||
* The defaults for 82598 should be in the range of 50us to 50ms,
|
||||
* however the hardware default for these parts is 500us to 1ms which is less
|
||||
* than the 10ms recommended by the pci-e spec. To address this we need to
|
||||
* increase the value to either 10ms to 250ms for capability version 1 config,
|
||||
* or 16ms to 55ms for version 2.
|
||||
**/
|
||||
void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw)
|
||||
{
|
||||
u32 gcr = IXGBE_READ_REG(hw, IXGBE_GCR);
|
||||
u16 pcie_devctl2;
|
||||
|
||||
/* only take action if timeout value is defaulted to 0 */
|
||||
if (gcr & IXGBE_GCR_CMPL_TMOUT_MASK)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* if capababilities version is type 1 we can write the
|
||||
* timeout of 10ms to 250ms through the GCR register
|
||||
*/
|
||||
if (!(gcr & IXGBE_GCR_CAP_VER2)) {
|
||||
gcr |= IXGBE_GCR_CMPL_TMOUT_10ms;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* for version 2 capabilities we need to write the config space
|
||||
* directly in order to set the completion timeout value for
|
||||
* 16ms to 55ms
|
||||
*/
|
||||
pcie_devctl2 = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2);
|
||||
pcie_devctl2 |= IXGBE_PCI_DEVICE_CONTROL2_16ms;
|
||||
IXGBE_WRITE_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2, pcie_devctl2);
|
||||
out:
|
||||
/* disable completion timeout resend */
|
||||
gcr &= ~IXGBE_GCR_CMPL_TMOUT_RESEND;
|
||||
IXGBE_WRITE_REG(hw, IXGBE_GCR, gcr);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count
|
||||
@ -83,6 +127,8 @@ u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw)
|
||||
{
|
||||
u32 msix_count = 18;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_pcie_msix_count_82598");
|
||||
|
||||
if (hw->mac.msix_vectors_from_pcie) {
|
||||
msix_count = IXGBE_READ_PCIE_WORD(hw,
|
||||
IXGBE_PCIE_MSIX_82598_CAPS);
|
||||
@ -108,6 +154,8 @@ s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
|
||||
struct ixgbe_phy_info *phy = &hw->phy;
|
||||
s32 ret_val;
|
||||
|
||||
DEBUGFUNC("ixgbe_init_ops_82598");
|
||||
|
||||
ret_val = ixgbe_init_phy_ops_generic(hw);
|
||||
ret_val = ixgbe_init_ops_generic(hw);
|
||||
|
||||
@ -115,6 +163,7 @@ s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
|
||||
phy->ops.init = &ixgbe_init_phy_ops_82598;
|
||||
|
||||
/* MAC */
|
||||
mac->ops.start_hw = &ixgbe_start_hw_82598;
|
||||
mac->ops.reset_hw = &ixgbe_reset_hw_82598;
|
||||
mac->ops.get_media_type = &ixgbe_get_media_type_82598;
|
||||
mac->ops.get_supported_physical_layer =
|
||||
@ -145,7 +194,6 @@ s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
|
||||
/* Link */
|
||||
mac->ops.check_link = &ixgbe_check_mac_link_82598;
|
||||
mac->ops.setup_link = &ixgbe_setup_mac_link_82598;
|
||||
mac->ops.setup_link_speed = &ixgbe_setup_mac_link_speed_82598;
|
||||
mac->ops.get_link_capabilities =
|
||||
&ixgbe_get_link_capabilities_82598;
|
||||
|
||||
@ -168,6 +216,7 @@ s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
|
||||
s32 ret_val = IXGBE_SUCCESS;
|
||||
u16 list_offset, data_offset;
|
||||
|
||||
DEBUGFUNC("ixgbe_init_phy_ops_82598");
|
||||
|
||||
/* Identify the PHY */
|
||||
phy->ops.identify(hw);
|
||||
@ -175,21 +224,20 @@ s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
|
||||
/* Overwrite the link function pointers if copper PHY */
|
||||
if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
|
||||
mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
|
||||
mac->ops.setup_link_speed =
|
||||
&ixgbe_setup_copper_link_speed_82598;
|
||||
mac->ops.get_link_capabilities =
|
||||
&ixgbe_get_copper_link_capabilities_generic;
|
||||
}
|
||||
|
||||
switch (hw->phy.type) {
|
||||
case ixgbe_phy_tn:
|
||||
phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
|
||||
phy->ops.check_link = &ixgbe_check_phy_link_tnx;
|
||||
phy->ops.get_firmware_version =
|
||||
&ixgbe_get_phy_firmware_version_tnx;
|
||||
break;
|
||||
case ixgbe_phy_aq:
|
||||
phy->ops.get_firmware_version =
|
||||
&ixgbe_get_phy_firmware_version_aq;
|
||||
&ixgbe_get_phy_firmware_version_generic;
|
||||
break;
|
||||
case ixgbe_phy_nl:
|
||||
phy->ops.reset = &ixgbe_reset_phy_nl;
|
||||
@ -220,6 +268,46 @@ s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_start_hw_82598 - Prepare hardware for Tx/Rx
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Starts the hardware using the generic start_hw function.
|
||||
* Then set pcie completion timeout
|
||||
**/
|
||||
s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw)
|
||||
{
|
||||
u32 regval;
|
||||
u32 i;
|
||||
s32 ret_val = IXGBE_SUCCESS;
|
||||
|
||||
DEBUGFUNC("ixgbe_start_hw_82598");
|
||||
|
||||
ret_val = ixgbe_start_hw_generic(hw);
|
||||
|
||||
/* Disable relaxed ordering */
|
||||
for (i = 0; ((i < hw->mac.max_tx_queues) &&
|
||||
(i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
|
||||
regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
|
||||
regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
|
||||
IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
|
||||
}
|
||||
|
||||
for (i = 0; ((i < hw->mac.max_rx_queues) &&
|
||||
(i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
|
||||
regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
|
||||
regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
|
||||
IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
|
||||
IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
|
||||
}
|
||||
|
||||
/* set the completion timeout for interface */
|
||||
if (ret_val == IXGBE_SUCCESS)
|
||||
ixgbe_set_pcie_completion_timeout(hw);
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_get_link_capabilities_82598 - Determines link capabilities
|
||||
* @hw: pointer to hardware structure
|
||||
@ -235,6 +323,8 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
u32 autoc = 0;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_link_capabilities_82598");
|
||||
|
||||
/*
|
||||
* Determine link capabilities based on the stored value of AUTOC,
|
||||
* which represents EEPROM defaults. If AUTOC value has not been
|
||||
@ -289,6 +379,8 @@ static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
|
||||
{
|
||||
enum ixgbe_media_type media_type;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_media_type_82598");
|
||||
|
||||
/* Detect if there is a copper PHY attached. */
|
||||
if (hw->phy.type == ixgbe_phy_cu_unknown ||
|
||||
hw->phy.type == ixgbe_phy_tn ||
|
||||
@ -306,15 +398,18 @@ static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
|
||||
break;
|
||||
case IXGBE_DEV_ID_82598AF_DUAL_PORT:
|
||||
case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
|
||||
case IXGBE_DEV_ID_82598EB_CX4:
|
||||
case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
|
||||
case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
|
||||
case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
|
||||
case IXGBE_DEV_ID_82598EB_XF_LR:
|
||||
case IXGBE_DEV_ID_82598EB_SFP_LOM:
|
||||
media_type = ixgbe_media_type_fiber;
|
||||
break;
|
||||
case IXGBE_DEV_ID_82598EB_CX4:
|
||||
case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
|
||||
media_type = ixgbe_media_type_cx4;
|
||||
break;
|
||||
case IXGBE_DEV_ID_82598AT:
|
||||
case IXGBE_DEV_ID_82598AT2:
|
||||
media_type = ixgbe_media_type_copper;
|
||||
break;
|
||||
default:
|
||||
@ -338,9 +433,23 @@ s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
|
||||
u32 fctrl_reg;
|
||||
u32 rmcs_reg;
|
||||
u32 reg;
|
||||
u32 link_speed = 0;
|
||||
bool link_up;
|
||||
|
||||
DEBUGFUNC("ixgbe_fc_enable_82598");
|
||||
|
||||
/*
|
||||
* On 82598 backplane having FC on causes resets while doing
|
||||
* KX, so turn off here.
|
||||
*/
|
||||
hw->mac.ops.check_link(hw, &link_speed, &link_up, FALSE);
|
||||
if (link_up &&
|
||||
link_speed == IXGBE_LINK_SPEED_1GB_FULL &&
|
||||
hw->mac.ops.get_media_type(hw) == ixgbe_media_type_backplane) {
|
||||
hw->fc.disable_fc_autoneg = TRUE;
|
||||
hw->fc.requested_mode = ixgbe_fc_none;
|
||||
}
|
||||
|
||||
/* Negotiate the fc mode to use */
|
||||
ret_val = ixgbe_fc_autoneg(hw);
|
||||
if (ret_val)
|
||||
@ -394,7 +503,7 @@ s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
|
||||
break;
|
||||
default:
|
||||
DEBUGOUT("Flow control param set incorrectly\n");
|
||||
ret_val = -IXGBE_ERR_CONFIG;
|
||||
ret_val = IXGBE_ERR_CONFIG;
|
||||
goto out;
|
||||
break;
|
||||
}
|
||||
@ -433,26 +542,29 @@ s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_mac_link_82598 - Configures MAC link settings
|
||||
* ixgbe_start_mac_link_82598 - Configures MAC link settings
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Configures link settings based on values in the ixgbe_hw struct.
|
||||
* Restarts the link. Performs autonegotiation if needed.
|
||||
**/
|
||||
static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw)
|
||||
static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
|
||||
bool autoneg_wait_to_complete)
|
||||
{
|
||||
u32 autoc_reg;
|
||||
u32 links_reg;
|
||||
u32 i;
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
|
||||
DEBUGFUNC("ixgbe_start_mac_link_82598");
|
||||
|
||||
/* Restart link */
|
||||
autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
|
||||
autoc_reg |= IXGBE_AUTOC_AN_RESTART;
|
||||
IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
|
||||
|
||||
/* Only poll for autoneg to complete if specified to do so */
|
||||
if (hw->phy.autoneg_wait_to_complete) {
|
||||
if (autoneg_wait_to_complete) {
|
||||
if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
|
||||
IXGBE_AUTOC_LMS_KX4_AN ||
|
||||
(autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
|
||||
@ -494,6 +606,8 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
|
||||
u32 i;
|
||||
u16 link_reg, adapt_comp_reg;
|
||||
|
||||
DEBUGFUNC("ixgbe_check_mac_link_82598");
|
||||
|
||||
/*
|
||||
* SERDES PHY requires us to read link status from undocumented
|
||||
* register 0xC79F. Bit 0 set indicates link is up/ready; clear
|
||||
@ -558,17 +672,22 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
|
||||
else
|
||||
*speed = IXGBE_LINK_SPEED_1GB_FULL;
|
||||
|
||||
if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == TRUE) &&
|
||||
(ixgbe_validate_link_ready(hw) != IXGBE_SUCCESS))
|
||||
*link_up = FALSE;
|
||||
|
||||
/* if link is down, zero out the current_mode */
|
||||
if (*link_up == FALSE) {
|
||||
hw->fc.current_mode = ixgbe_fc_none;
|
||||
hw->fc.fc_was_autonegged = FALSE;
|
||||
}
|
||||
|
||||
out:
|
||||
return IXGBE_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_mac_link_speed_82598 - Set MAC link speed
|
||||
* ixgbe_setup_mac_link_82598 - Set MAC link speed
|
||||
* @hw: pointer to hardware structure
|
||||
* @speed: new link speed
|
||||
* @autoneg: TRUE if autonegotiation enabled
|
||||
@ -576,7 +695,7 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
|
||||
*
|
||||
* Set the link speed in the AUTOC register and restarts link.
|
||||
**/
|
||||
static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
|
||||
static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed, bool autoneg,
|
||||
bool autoneg_wait_to_complete)
|
||||
{
|
||||
@ -586,6 +705,8 @@ static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
|
||||
u32 autoc = curr_autoc;
|
||||
u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK;
|
||||
|
||||
DEBUGFUNC("ixgbe_setup_mac_link_82598");
|
||||
|
||||
/* Check to see if speed passed in is supported. */
|
||||
ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
|
||||
speed &= link_capabilities;
|
||||
@ -606,14 +727,13 @@ static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
|
||||
}
|
||||
|
||||
if (status == IXGBE_SUCCESS) {
|
||||
hw->phy.autoneg_wait_to_complete = autoneg_wait_to_complete;
|
||||
|
||||
/*
|
||||
* Setup and restart the link based on the new values in
|
||||
* ixgbe_hw This will write the AUTOC register based on the new
|
||||
* stored values
|
||||
*/
|
||||
status = ixgbe_setup_mac_link_82598(hw);
|
||||
status = ixgbe_start_mac_link_82598(hw,
|
||||
autoneg_wait_to_complete);
|
||||
}
|
||||
|
||||
return status;
|
||||
@ -621,29 +741,7 @@ static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
|
||||
|
||||
|
||||
/**
|
||||
* ixgbe_setup_copper_link_82598 - Setup copper link settings
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Configures link settings based on values in the ixgbe_hw struct.
|
||||
* Restarts the link. Performs autonegotiation if needed. Restart
|
||||
* phy and wait for autonegotiate to finish. Then synchronize the
|
||||
* MAC and PHY.
|
||||
**/
|
||||
static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw)
|
||||
{
|
||||
s32 status;
|
||||
|
||||
/* Restart autonegotiation on PHY */
|
||||
status = hw->phy.ops.setup_link(hw);
|
||||
|
||||
/* Set up MAC */
|
||||
ixgbe_setup_mac_link_82598(hw);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_copper_link_speed_82598 - Set the PHY autoneg advertised field
|
||||
* ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
|
||||
* @hw: pointer to hardware structure
|
||||
* @speed: new link speed
|
||||
* @autoneg: TRUE if autonegotiation enabled
|
||||
@ -651,18 +749,20 @@ static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw)
|
||||
*
|
||||
* Sets the link speed in the AUTOC register in the MAC and restarts link.
|
||||
**/
|
||||
static s32 ixgbe_setup_copper_link_speed_82598(struct ixgbe_hw *hw,
|
||||
static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
bool autoneg,
|
||||
bool autoneg_wait_to_complete)
|
||||
{
|
||||
s32 status;
|
||||
|
||||
DEBUGFUNC("ixgbe_setup_copper_link_82598");
|
||||
|
||||
/* Setup the PHY according to input speed */
|
||||
status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
|
||||
autoneg_wait_to_complete);
|
||||
/* Set up MAC */
|
||||
ixgbe_setup_mac_link_82598(hw);
|
||||
ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
|
||||
|
||||
return status;
|
||||
}
|
||||
@ -685,6 +785,8 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
|
||||
u32 autoc;
|
||||
u8 analog_val;
|
||||
|
||||
DEBUGFUNC("ixgbe_reset_hw_82598");
|
||||
|
||||
/* Call adapter stop to disable tx/rx and clear interrupts */
|
||||
hw->mac.ops.stop_adapter(hw);
|
||||
|
||||
@ -811,6 +913,8 @@ s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
|
||||
{
|
||||
u32 rar_high;
|
||||
|
||||
DEBUGFUNC("ixgbe_set_vmdq_82598");
|
||||
|
||||
rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
|
||||
rar_high &= ~IXGBE_RAH_VIND_MASK;
|
||||
rar_high |= ((vmdq << IXGBE_RAH_VIND_SHIFT) & IXGBE_RAH_VIND_MASK);
|
||||
@ -861,6 +965,8 @@ s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind,
|
||||
u32 bits;
|
||||
u32 vftabyte;
|
||||
|
||||
DEBUGFUNC("ixgbe_set_vfta_82598");
|
||||
|
||||
if (vlan > 4095)
|
||||
return IXGBE_ERR_PARAM;
|
||||
|
||||
@ -903,6 +1009,8 @@ static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw)
|
||||
u32 offset;
|
||||
u32 vlanbyte;
|
||||
|
||||
DEBUGFUNC("ixgbe_clear_vfta_82598");
|
||||
|
||||
for (offset = 0; offset < hw->mac.vft_size; offset++)
|
||||
IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
|
||||
|
||||
@ -926,6 +1034,8 @@ s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val)
|
||||
{
|
||||
u32 atlas_ctl;
|
||||
|
||||
DEBUGFUNC("ixgbe_read_analog_reg8_82598");
|
||||
|
||||
IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL,
|
||||
IXGBE_ATLASCTL_WRITE_CMD | (reg << 8));
|
||||
IXGBE_WRITE_FLUSH(hw);
|
||||
@ -948,6 +1058,8 @@ s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val)
|
||||
{
|
||||
u32 atlas_ctl;
|
||||
|
||||
DEBUGFUNC("ixgbe_write_analog_reg8_82598");
|
||||
|
||||
atlas_ctl = (reg << 8) | val;
|
||||
IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL, atlas_ctl);
|
||||
IXGBE_WRITE_FLUSH(hw);
|
||||
@ -973,6 +1085,8 @@ s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
|
||||
u16 sfp_stat = 0;
|
||||
u32 i;
|
||||
|
||||
DEBUGFUNC("ixgbe_read_i2c_eeprom_82598");
|
||||
|
||||
if (hw->phy.type == ixgbe_phy_nl) {
|
||||
/*
|
||||
* NetLogic phy SDA/SCL registers are at addresses 0xC30A to
|
||||
@ -1032,6 +1146,8 @@ u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw)
|
||||
u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
|
||||
u16 ext_ability = 0;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_supported_physical_layer_82598");
|
||||
|
||||
hw->phy.ops.identify(hw);
|
||||
|
||||
/* Copper PHY must be checked before AUTOC LMS to determine correct
|
||||
@ -1128,6 +1244,8 @@ void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw)
|
||||
struct ixgbe_bus_info *bus = &hw->bus;
|
||||
u16 pci_gen, pci_ctrl2;
|
||||
|
||||
DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie_82598");
|
||||
|
||||
ixgbe_set_lan_id_multi_port_pcie(hw);
|
||||
|
||||
/* check if LAN0 is disabled */
|
||||
@ -1146,4 +1264,38 @@ void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_validate_link_ready - Function looks for phy link
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Function indicates success when phy link is available. If phy is not ready
|
||||
* within 5 seconds of MAC indicating link, the function returns error.
|
||||
**/
|
||||
static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw)
|
||||
{
|
||||
u32 timeout;
|
||||
u16 an_reg;
|
||||
|
||||
if (hw->device_id != IXGBE_DEV_ID_82598AT2)
|
||||
return IXGBE_SUCCESS;
|
||||
|
||||
for (timeout = 0;
|
||||
timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) {
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &an_reg);
|
||||
|
||||
if ((an_reg & IXGBE_MII_AUTONEG_COMPLETE) &&
|
||||
(an_reg & IXGBE_MII_AUTONEG_LINK_UP))
|
||||
break;
|
||||
|
||||
msec_delay(100);
|
||||
}
|
||||
|
||||
if (timeout == IXGBE_VALIDATE_LINK_READY_TIMEOUT) {
|
||||
DEBUGOUT("Link was indicated but link is down\n");
|
||||
return IXGBE_ERR_LINK_SETUP;
|
||||
}
|
||||
|
||||
return IXGBE_SUCCESS;
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -54,6 +54,8 @@ s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
|
||||
{
|
||||
s32 status;
|
||||
|
||||
DEBUGFUNC("ixgbe_init_shared_code");
|
||||
|
||||
/*
|
||||
* Set the mac type
|
||||
*/
|
||||
@ -94,6 +96,7 @@ s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
|
||||
case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
|
||||
case IXGBE_DEV_ID_82598AF_DUAL_PORT:
|
||||
case IXGBE_DEV_ID_82598AT:
|
||||
case IXGBE_DEV_ID_82598AT2:
|
||||
case IXGBE_DEV_ID_82598EB_CX4:
|
||||
case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
|
||||
case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
|
||||
@ -103,7 +106,9 @@ s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
|
||||
hw->mac.type = ixgbe_mac_82598EB;
|
||||
break;
|
||||
case IXGBE_DEV_ID_82599_KX4:
|
||||
case IXGBE_DEV_ID_82599_KX4_MEZZ:
|
||||
case IXGBE_DEV_ID_82599_XAUI_LOM:
|
||||
case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
|
||||
case IXGBE_DEV_ID_82599_SFP:
|
||||
case IXGBE_DEV_ID_82599_CX4:
|
||||
hw->mac.type = ixgbe_mac_82599EB;
|
||||
@ -243,6 +248,23 @@ s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
|
||||
(hw, device_caps), IXGBE_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
|
||||
* @hw: pointer to hardware structure
|
||||
* @wwnn_prefix: the alternative WWNN prefix
|
||||
* @wwpn_prefix: the alternative WWPN prefix
|
||||
*
|
||||
* This function will read the EEPROM from the alternative SAN MAC address
|
||||
* block to check the support for the alternative WWNN/WWPN prefix support.
|
||||
**/
|
||||
s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
|
||||
u16 *wwpn_prefix)
|
||||
{
|
||||
return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
|
||||
(hw, wwnn_prefix, wwpn_prefix),
|
||||
IXGBE_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_get_bus_info - Set PCI bus info
|
||||
* @hw: pointer to hardware structure
|
||||
@ -438,19 +460,6 @@ s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
|
||||
IXGBE_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_link - Configure link settings
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Configures link settings based on values in the ixgbe_hw struct.
|
||||
* Restarts the link. Performs autonegotiation if needed.
|
||||
**/
|
||||
s32 ixgbe_setup_link(struct ixgbe_hw *hw)
|
||||
{
|
||||
return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw),
|
||||
IXGBE_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_check_link - Get link and speed status
|
||||
* @hw: pointer to hardware structure
|
||||
@ -466,18 +475,19 @@ s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_link_speed - Set link speed
|
||||
* ixgbe_setup_link - Set link speed
|
||||
* @hw: pointer to hardware structure
|
||||
* @speed: new link speed
|
||||
* @autoneg: TRUE if autonegotiation enabled
|
||||
*
|
||||
* Set the link speed and restarts the link.
|
||||
* Configures link settings. Restarts the link.
|
||||
* Performs autonegotiation if needed.
|
||||
**/
|
||||
s32 ixgbe_setup_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
|
||||
s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
|
||||
bool autoneg,
|
||||
bool autoneg_wait_to_complete)
|
||||
{
|
||||
return ixgbe_call_func(hw, hw->mac.ops.setup_link_speed, (hw, speed,
|
||||
return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
|
||||
autoneg, autoneg_wait_to_complete),
|
||||
IXGBE_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
@ -67,8 +67,7 @@ s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
bool autoneg,
|
||||
bool autoneg_wait_to_complete);
|
||||
s32 ixgbe_setup_link(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
|
||||
s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
|
||||
bool autoneg, bool autoneg_wait_to_complete);
|
||||
s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
|
||||
bool *link_up, bool link_up_wait_to_complete);
|
||||
@ -97,6 +96,7 @@ s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
|
||||
u32 addr_count, ixgbe_mc_addr_itr func);
|
||||
s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
|
||||
u32 mc_addr_count, ixgbe_mc_addr_itr func);
|
||||
void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr_list, u32 vmdq);
|
||||
s32 ixgbe_enable_mc(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_disable_mc(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_clear_vfta(struct ixgbe_hw *hw);
|
||||
@ -164,6 +164,8 @@ s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr);
|
||||
s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps);
|
||||
s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask);
|
||||
void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask);
|
||||
s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
|
||||
u16 *wwpn_prefix);
|
||||
|
||||
|
||||
#endif /* _IXGBE_API_H_ */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -42,6 +42,8 @@
|
||||
IXGBE_WRITE_REG(hw, reg + 4, (u32) (value >> 32)); \
|
||||
} while (0)
|
||||
|
||||
u32 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw);
|
||||
|
||||
s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw);
|
||||
@ -57,12 +59,14 @@ s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index);
|
||||
|
||||
s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data);
|
||||
s32 ixgbe_read_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 *data);
|
||||
s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data);
|
||||
s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
|
||||
u16 *data);
|
||||
u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
|
||||
u16 *checksum_val);
|
||||
s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg);
|
||||
|
||||
s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
|
||||
u32 enable_addr);
|
||||
@ -73,7 +77,6 @@ s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list,
|
||||
ixgbe_mc_addr_itr func);
|
||||
s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
|
||||
u32 addr_count, ixgbe_mc_addr_itr func);
|
||||
void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
|
||||
s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval);
|
||||
@ -87,9 +90,25 @@ s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask);
|
||||
void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask);
|
||||
s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw);
|
||||
|
||||
s32 ixgbe_read_analog_reg8_generic(struct ixgbe_hw *hw, u32 reg, u8 *val);
|
||||
s32 ixgbe_write_analog_reg8_generic(struct ixgbe_hw *hw, u32 reg, u8 val);
|
||||
s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index);
|
||||
s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index);
|
||||
|
||||
s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr);
|
||||
s32 ixgbe_set_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr);
|
||||
|
||||
s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
|
||||
s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
|
||||
s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
|
||||
s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan,
|
||||
u32 vind, bool vlan_on);
|
||||
s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw);
|
||||
|
||||
s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed *speed,
|
||||
bool *link_up, bool link_up_wait_to_complete);
|
||||
|
||||
s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
|
||||
u16 *wwpn_prefix);
|
||||
|
||||
#endif /* IXGBE_COMMON */
|
||||
|
@ -110,6 +110,16 @@ typedef boolean_t bool;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__i386__) || defined(__amd64__)
|
||||
static __inline
|
||||
void prefetch(void *x)
|
||||
{
|
||||
__asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
|
||||
}
|
||||
#else
|
||||
#define prefetch(x)
|
||||
#endif
|
||||
|
||||
struct ixgbe_osdep
|
||||
{
|
||||
bus_space_tag_t mem_bus_space_tag;
|
||||
|
@ -59,6 +59,8 @@ s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
|
||||
{
|
||||
struct ixgbe_phy_info *phy = &hw->phy;
|
||||
|
||||
DEBUGFUNC("ixgbe_init_phy_ops_generic");
|
||||
|
||||
/* PHY */
|
||||
phy->ops.identify = &ixgbe_identify_phy_generic;
|
||||
phy->ops.reset = &ixgbe_reset_phy_generic;
|
||||
@ -67,7 +69,7 @@ s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
|
||||
phy->ops.setup_link = &ixgbe_setup_phy_link_generic;
|
||||
phy->ops.setup_link_speed = &ixgbe_setup_phy_link_speed_generic;
|
||||
phy->ops.check_link = NULL;
|
||||
phy->ops.get_firmware_version = NULL;
|
||||
phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic;
|
||||
phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_generic;
|
||||
phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_generic;
|
||||
phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic;
|
||||
@ -91,6 +93,8 @@ s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
|
||||
u32 phy_addr;
|
||||
u16 ext_ability = 0;
|
||||
|
||||
DEBUGFUNC("ixgbe_identify_phy_generic");
|
||||
|
||||
if (hw->phy.type == ixgbe_phy_unknown) {
|
||||
for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
|
||||
if (ixgbe_validate_phy_addr(hw, phy_addr)) {
|
||||
@ -138,6 +142,8 @@ bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
|
||||
u16 phy_id = 0;
|
||||
bool valid = FALSE;
|
||||
|
||||
DEBUGFUNC("ixgbe_validate_phy_addr");
|
||||
|
||||
hw->phy.addr = phy_addr;
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
|
||||
IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id);
|
||||
@ -159,6 +165,8 @@ s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
|
||||
u16 phy_id_high = 0;
|
||||
u16 phy_id_low = 0;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_phy_id");
|
||||
|
||||
status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
|
||||
IXGBE_MDIO_PMA_PMD_DEV_TYPE,
|
||||
&phy_id_high);
|
||||
@ -183,6 +191,8 @@ enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
|
||||
{
|
||||
enum ixgbe_phy_type phy_type;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_phy_type_from_id");
|
||||
|
||||
switch (phy_id) {
|
||||
case TN1010_PHY_ID:
|
||||
phy_type = ixgbe_phy_tn;
|
||||
@ -215,6 +225,8 @@ s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
|
||||
u16 ctrl = 0;
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
|
||||
DEBUGFUNC("ixgbe_reset_phy_generic");
|
||||
|
||||
if (hw->phy.type == ixgbe_phy_unknown)
|
||||
status = ixgbe_identify_phy_generic(hw);
|
||||
|
||||
@ -262,6 +274,8 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
u16 gssr;
|
||||
|
||||
DEBUGFUNC("ixgbe_read_phy_reg_generic");
|
||||
|
||||
if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
|
||||
gssr = IXGBE_GSSR_PHY1_SM;
|
||||
else
|
||||
@ -359,6 +373,8 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
u16 gssr;
|
||||
|
||||
DEBUGFUNC("ixgbe_write_phy_reg_generic");
|
||||
|
||||
if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
|
||||
gssr = IXGBE_GSSR_PHY1_SM;
|
||||
else
|
||||
@ -437,10 +453,10 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_phy_link_generic - Set and restart autoneg
|
||||
* @hw: pointer to hardware structure
|
||||
* ixgbe_setup_phy_link_generic - Set and restart autoneg
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Restart autonegotiation and PHY and waits for completion.
|
||||
* Restart autonegotiation and PHY and waits for completion.
|
||||
**/
|
||||
s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
|
||||
{
|
||||
@ -448,23 +464,59 @@ s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
|
||||
u32 time_out;
|
||||
u32 max_time_out = 10;
|
||||
u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
|
||||
bool autoneg = FALSE;
|
||||
ixgbe_link_speed speed;
|
||||
|
||||
/*
|
||||
* Set advertisement settings in PHY based on autoneg_advertised
|
||||
* settings. If autoneg_advertised = 0, then advertise default values
|
||||
* tnx devices cannot be "forced" to a autoneg 10G and fail. But can
|
||||
* for a 1G.
|
||||
*/
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MII_SPEED_SELECTION_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
|
||||
DEBUGFUNC("ixgbe_setup_phy_link_generic");
|
||||
|
||||
if (hw->phy.autoneg_advertised == IXGBE_LINK_SPEED_1GB_FULL)
|
||||
autoneg_reg &= 0xEFFF; /* 0 in bit 12 is 1G operation */
|
||||
else
|
||||
autoneg_reg |= 0x1000; /* 1 in bit 12 is 10G/1G operation */
|
||||
ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MII_SPEED_SELECTION_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
|
||||
if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
|
||||
/* Set or unset auto-negotiation 10G advertisement */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_reg);
|
||||
|
||||
autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
|
||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
|
||||
autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
autoneg_reg);
|
||||
}
|
||||
|
||||
if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
|
||||
/* Set or unset auto-negotiation 1G advertisement */
|
||||
hw->phy.ops.read_reg(hw,
|
||||
IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_reg);
|
||||
|
||||
autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
|
||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
|
||||
autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
|
||||
|
||||
hw->phy.ops.write_reg(hw,
|
||||
IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
autoneg_reg);
|
||||
}
|
||||
|
||||
if (speed & IXGBE_LINK_SPEED_100_FULL) {
|
||||
/* Set or unset auto-negotiation 100M advertisement */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_reg);
|
||||
|
||||
autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
|
||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
|
||||
autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
autoneg_reg);
|
||||
}
|
||||
|
||||
/* Restart PHY autonegotiation and wait for completion */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
@ -489,8 +541,10 @@ s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
|
||||
}
|
||||
}
|
||||
|
||||
if (time_out == max_time_out)
|
||||
if (time_out == max_time_out) {
|
||||
status = IXGBE_ERR_LINK_SETUP;
|
||||
DEBUGOUT("ixgbe_setup_phy_link_generic: time out");
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
@ -509,6 +563,8 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
|
||||
UNREFERENCED_PARAMETER(autoneg);
|
||||
UNREFERENCED_PARAMETER(autoneg_wait_to_complete);
|
||||
|
||||
DEBUGFUNC("ixgbe_setup_phy_link_speed_generic");
|
||||
|
||||
/*
|
||||
* Clear autoneg_advertised and set new values based on input link
|
||||
* speed.
|
||||
@ -545,6 +601,8 @@ s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
|
||||
s32 status = IXGBE_ERR_LINK_SETUP;
|
||||
u16 speed_ability;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic");
|
||||
|
||||
*speed = 0;
|
||||
*autoneg = TRUE;
|
||||
|
||||
@ -581,6 +639,8 @@ s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
|
||||
u16 phy_speed = 0;
|
||||
u16 phy_data = 0;
|
||||
|
||||
DEBUGFUNC("ixgbe_check_phy_link_tnx");
|
||||
|
||||
/* Initialize speed and link to default case */
|
||||
*link_up = FALSE;
|
||||
*speed = IXGBE_LINK_SPEED_10GB_FULL;
|
||||
@ -612,6 +672,102 @@ s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_phy_link_tnx - Set and restart autoneg
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Restart autonegotiation and PHY and waits for completion.
|
||||
**/
|
||||
s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
|
||||
{
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
u32 time_out;
|
||||
u32 max_time_out = 10;
|
||||
u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
|
||||
bool autoneg = FALSE;
|
||||
ixgbe_link_speed speed;
|
||||
|
||||
DEBUGFUNC("ixgbe_setup_phy_link_tnx");
|
||||
|
||||
ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
|
||||
|
||||
if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
|
||||
/* Set or unset auto-negotiation 10G advertisement */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_reg);
|
||||
|
||||
autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
|
||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
|
||||
autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
autoneg_reg);
|
||||
}
|
||||
|
||||
if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
|
||||
/* Set or unset auto-negotiation 1G advertisement */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_reg);
|
||||
|
||||
autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
|
||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
|
||||
autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
autoneg_reg);
|
||||
}
|
||||
|
||||
if (speed & IXGBE_LINK_SPEED_100_FULL) {
|
||||
/* Set or unset auto-negotiation 100M advertisement */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_reg);
|
||||
|
||||
autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
|
||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
|
||||
autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
autoneg_reg);
|
||||
}
|
||||
|
||||
/* Restart PHY autonegotiation and wait for completion */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
|
||||
|
||||
autoneg_reg |= IXGBE_MII_RESTART;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
|
||||
|
||||
/* Wait for autonegotiation to finish */
|
||||
for (time_out = 0; time_out < max_time_out; time_out++) {
|
||||
usec_delay(10);
|
||||
/* Restart PHY autonegotiation and wait for completion */
|
||||
status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
&autoneg_reg);
|
||||
|
||||
autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
|
||||
if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (time_out == max_time_out) {
|
||||
status = IXGBE_ERR_LINK_SETUP;
|
||||
DEBUGOUT("ixgbe_setup_phy_link_tnx: time out");
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
|
||||
* @hw: pointer to hardware structure
|
||||
@ -622,6 +778,8 @@ s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
|
||||
{
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx");
|
||||
|
||||
status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
|
||||
firmware_version);
|
||||
@ -631,15 +789,17 @@ s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
|
||||
|
||||
|
||||
/**
|
||||
* ixgbe_get_phy_firmware_version_aq - Gets the PHY Firmware Version
|
||||
* ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
|
||||
* @hw: pointer to hardware structure
|
||||
* @firmware_version: pointer to the PHY Firmware Version
|
||||
**/
|
||||
s32 ixgbe_get_phy_firmware_version_aq(struct ixgbe_hw *hw,
|
||||
s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
|
||||
u16 *firmware_version)
|
||||
{
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_phy_firmware_version_generic");
|
||||
|
||||
status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
|
||||
IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
|
||||
firmware_version);
|
||||
@ -660,6 +820,8 @@ s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
|
||||
s32 ret_val = IXGBE_SUCCESS;
|
||||
u32 i;
|
||||
|
||||
DEBUGFUNC("ixgbe_reset_phy_nl");
|
||||
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
|
||||
IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
|
||||
|
||||
@ -762,6 +924,8 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
|
||||
u8 cable_tech = 0;
|
||||
u16 enforce_sfp = 0;
|
||||
|
||||
DEBUGFUNC("ixgbe_identify_sfp_module_generic");
|
||||
|
||||
if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
|
||||
hw->phy.sfp_type = ixgbe_sfp_type_not_present;
|
||||
status = IXGBE_ERR_SFP_NOT_PRESENT;
|
||||
@ -850,6 +1014,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
|
||||
((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
|
||||
(comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
|
||||
hw->phy.multispeed_fiber = TRUE;
|
||||
|
||||
/* Determine PHY vendor */
|
||||
if (hw->phy.type != ixgbe_phy_nl) {
|
||||
hw->phy.id = identifier;
|
||||
@ -944,6 +1109,8 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
|
||||
{
|
||||
u16 sfp_id;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
|
||||
|
||||
if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
|
||||
return IXGBE_ERR_SFP_NOT_SUPPORTED;
|
||||
|
||||
@ -1370,6 +1537,8 @@ static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
|
||||
s32 status;
|
||||
u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
|
||||
|
||||
DEBUGFUNC("ixgbe_clock_in_i2c_bit");
|
||||
|
||||
status = ixgbe_raise_i2c_clk(hw, &i2cctl);
|
||||
|
||||
/* Minimum high period of clock is 4us */
|
||||
@ -1398,6 +1567,8 @@ static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
|
||||
s32 status;
|
||||
u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
|
||||
|
||||
DEBUGFUNC("ixgbe_clock_out_i2c_bit");
|
||||
|
||||
status = ixgbe_set_i2c_data(hw, &i2cctl, data);
|
||||
if (status == IXGBE_SUCCESS) {
|
||||
status = ixgbe_raise_i2c_clk(hw, &i2cctl);
|
||||
@ -1429,6 +1600,8 @@ static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
|
||||
{
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
|
||||
DEBUGFUNC("ixgbe_raise_i2c_clk");
|
||||
|
||||
*i2cctl |= IXGBE_I2C_CLK_OUT;
|
||||
|
||||
IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
|
||||
@ -1449,6 +1622,8 @@ static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
|
||||
static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
|
||||
{
|
||||
|
||||
DEBUGFUNC("ixgbe_lower_i2c_clk");
|
||||
|
||||
*i2cctl &= ~IXGBE_I2C_CLK_OUT;
|
||||
|
||||
IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
|
||||
@ -1469,6 +1644,8 @@ static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
|
||||
{
|
||||
s32 status = IXGBE_SUCCESS;
|
||||
|
||||
DEBUGFUNC("ixgbe_set_i2c_data");
|
||||
|
||||
if (data)
|
||||
*i2cctl |= IXGBE_I2C_DATA_OUT;
|
||||
else
|
||||
@ -1500,6 +1677,8 @@ static bool ixgbe_get_i2c_data(u32 *i2cctl)
|
||||
{
|
||||
bool data;
|
||||
|
||||
DEBUGFUNC("ixgbe_get_i2c_data");
|
||||
|
||||
if (*i2cctl & IXGBE_I2C_DATA_IN)
|
||||
data = 1;
|
||||
else
|
||||
|
@ -108,9 +108,10 @@ s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
|
||||
s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed *speed,
|
||||
bool *link_up);
|
||||
s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
|
||||
u16 *firmware_version);
|
||||
s32 ixgbe_get_phy_firmware_version_aq(struct ixgbe_hw *hw,
|
||||
s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
|
||||
u16 *firmware_version);
|
||||
|
||||
s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw);
|
||||
|
@ -47,6 +47,7 @@
|
||||
#define IXGBE_DEV_ID_82598AF_DUAL_PORT 0x10C6
|
||||
#define IXGBE_DEV_ID_82598AF_SINGLE_PORT 0x10C7
|
||||
#define IXGBE_DEV_ID_82598AT 0x10C8
|
||||
#define IXGBE_DEV_ID_82598AT2 0x150B
|
||||
#define IXGBE_DEV_ID_82598EB_SFP_LOM 0x10DB
|
||||
#define IXGBE_DEV_ID_82598EB_CX4 0x10DD
|
||||
#define IXGBE_DEV_ID_82598_CX4_DUAL_PORT 0x10EC
|
||||
@ -54,6 +55,8 @@
|
||||
#define IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM 0x10E1
|
||||
#define IXGBE_DEV_ID_82598EB_XF_LR 0x10F4
|
||||
#define IXGBE_DEV_ID_82599_KX4 0x10F7
|
||||
#define IXGBE_DEV_ID_82599_KX4_MEZZ 0x1514
|
||||
#define IXGBE_DEV_ID_82599_COMBO_BACKPLANE 0x10F8
|
||||
#define IXGBE_DEV_ID_82599_CX4 0x10F9
|
||||
#define IXGBE_DEV_ID_82599_SFP 0x10FB
|
||||
#define IXGBE_DEV_ID_82599_XAUI_LOM 0x10FC
|
||||
@ -74,6 +77,7 @@
|
||||
/* NVM Registers */
|
||||
#define IXGBE_EEC 0x10010
|
||||
#define IXGBE_EERD 0x10014
|
||||
#define IXGBE_EEWR 0x10018
|
||||
#define IXGBE_FLA 0x1001C
|
||||
#define IXGBE_EEMNGCTL 0x10110
|
||||
#define IXGBE_EEMNGDATA 0x10114
|
||||
@ -352,7 +356,7 @@
|
||||
#define IXGBE_WUFC_FLX5 0x00200000 /* Flexible Filter 5 Enable */
|
||||
#define IXGBE_WUFC_FLX_FILTERS 0x000F0000 /* Mask for 4 flex filters */
|
||||
#define IXGBE_WUFC_EXT_FLX_FILTERS 0x00300000 /* Mask for Ext. flex filters */
|
||||
#define IXGBE_WUFC_ALL_FILTERS 0x003F00FF /* Mask for all 6 wakeup filters*/
|
||||
#define IXGBE_WUFC_ALL_FILTERS 0x003F00FF /* Mask for all wakeup filters */
|
||||
#define IXGBE_WUFC_FLX_OFFSET 16 /* Offset to the Flexible Filters bits */
|
||||
|
||||
/* Wake Up Status */
|
||||
@ -703,6 +707,7 @@
|
||||
#define IXGBE_MREVID 0x11064
|
||||
#define IXGBE_DCA_ID 0x11070
|
||||
#define IXGBE_DCA_CTRL 0x11074
|
||||
#define IXGBE_SWFW_SYNC IXGBE_GSSR
|
||||
|
||||
/* PCI-E registers 82599-Specific */
|
||||
#define IXGBE_GCR_EXT 0x11050
|
||||
@ -725,6 +730,12 @@
|
||||
#define IXGBE_ECC_STATUS_82599 0x110E0
|
||||
#define IXGBE_BAR_CTRL_82599 0x110F4
|
||||
|
||||
/* PCI Express Control */
|
||||
#define IXGBE_GCR_CMPL_TMOUT_MASK 0x0000F000
|
||||
#define IXGBE_GCR_CMPL_TMOUT_10ms 0x00001000
|
||||
#define IXGBE_GCR_CMPL_TMOUT_RESEND 0x00010000
|
||||
#define IXGBE_GCR_CAP_VER2 0x00040000
|
||||
|
||||
/* Time Sync Registers */
|
||||
#define IXGBE_TSYNCRXCTL 0x05188 /* Rx Time Sync Control register - RW */
|
||||
#define IXGBE_TSYNCTXCTL 0x08C00 /* Tx Time Sync Control register - RW */
|
||||
@ -848,12 +859,16 @@
|
||||
#define IXGBE_MPVC 0x04318
|
||||
#define IXGBE_SGMIIC 0x04314
|
||||
|
||||
/* Copper Pond 2 link timeout */
|
||||
#define IXGBE_VALIDATE_LINK_READY_TIMEOUT 50
|
||||
|
||||
/* Omer CORECTL */
|
||||
#define IXGBE_CORECTL 0x014F00
|
||||
/* BARCTRL */
|
||||
#define IXGBE_BARCTRL 0x110F4
|
||||
#define IXGBE_BARCTRL_FLSIZE 0x0700
|
||||
#define IXGBE_BARCTRL_CSRSIZE 0x2000
|
||||
#define IXGBE_BARCTRL 0x110F4
|
||||
#define IXGBE_BARCTRL_FLSIZE 0x0700
|
||||
#define IXGBE_BARCTRL_FLSIZE_SHIFT 8
|
||||
#define IXGBE_BARCTRL_CSRSIZE 0x2000
|
||||
|
||||
/* RSCCTL Bit Masks */
|
||||
#define IXGBE_RSCCTL_RSCEN 0x01
|
||||
@ -1013,10 +1028,18 @@
|
||||
/* MII clause 22/28 definitions */
|
||||
#define IXGBE_MDIO_PHY_LOW_POWER_MODE 0x0800
|
||||
|
||||
#define IXGBE_MII_SPEED_SELECTION_REG 0x10
|
||||
#define IXGBE_MII_RESTART 0x200
|
||||
#define IXGBE_MII_AUTONEG_COMPLETE 0x20
|
||||
#define IXGBE_MII_AUTONEG_REG 0x0
|
||||
#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 */
|
||||
#define IXGBE_MII_AUTONEG_ADVERTISE_REG 0x10 /* 100M Advertisement */
|
||||
#define IXGBE_MII_10GBASE_T_ADVERTISE 0x1000 /* full duplex, bit:12*/
|
||||
#define IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX 0x4000 /* full duplex, bit:14*/
|
||||
#define IXGBE_MII_1GBASE_T_ADVERTISE 0x8000 /* full duplex, bit:15*/
|
||||
#define IXGBE_MII_100BASE_T_ADVERTISE 0x0100 /* full duplex, bit:8 */
|
||||
#define IXGBE_MII_RESTART 0x200
|
||||
#define IXGBE_MII_AUTONEG_COMPLETE 0x20
|
||||
#define IXGBE_MII_AUTONEG_LINK_UP 0x04
|
||||
#define IXGBE_MII_AUTONEG_REG 0x0
|
||||
|
||||
#define IXGBE_PHY_REVISION_MASK 0xFFFFFFF0
|
||||
#define IXGBE_MAX_PHY_ADDR 32
|
||||
@ -1408,6 +1431,8 @@
|
||||
#define IXGBE_AUTOC_KX4_SUPP 0x80000000
|
||||
#define IXGBE_AUTOC_KX_SUPP 0x40000000
|
||||
#define IXGBE_AUTOC_PAUSE 0x30000000
|
||||
#define IXGBE_AUTOC_ASM_PAUSE 0x20000000
|
||||
#define IXGBE_AUTOC_SYM_PAUSE 0x10000000
|
||||
#define IXGBE_AUTOC_RF 0x08000000
|
||||
#define IXGBE_AUTOC_PD_TMR 0x06000000
|
||||
#define IXGBE_AUTOC_AN_RX_LOOSE 0x01000000
|
||||
@ -1476,6 +1501,8 @@
|
||||
#define IXGBE_LINK_UP_TIME 90 /* 9.0 Seconds */
|
||||
#define IXGBE_AUTO_NEG_TIME 45 /* 4.5 Seconds */
|
||||
|
||||
#define IXGBE_LINKS2_AN_SUPPORTED 0x00000040
|
||||
|
||||
/* PCS1GLSTA Bit Masks */
|
||||
#define IXGBE_PCS1GLSTA_LINK_OK 1
|
||||
#define IXGBE_PCS1GLSTA_SYNK_OK 0x10
|
||||
@ -1496,12 +1523,18 @@
|
||||
#define IXGBE_PCS1GLCTL_AN_ENABLE 0x10000
|
||||
#define IXGBE_PCS1GLCTL_AN_RESTART 0x20000
|
||||
|
||||
/* ANLP1 Bit Masks */
|
||||
#define IXGBE_ANLP1_PAUSE 0x0C00
|
||||
#define IXGBE_ANLP1_SYM_PAUSE 0x0400
|
||||
#define IXGBE_ANLP1_ASM_PAUSE 0x0800
|
||||
|
||||
/* SW Semaphore Register bitmasks */
|
||||
#define IXGBE_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */
|
||||
#define IXGBE_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */
|
||||
#define IXGBE_SWSM_WMNG 0x00000004 /* Wake MNG Clock */
|
||||
#define IXGBE_SWFW_REGSMP 0x80000000 /* Register Semaphore bit 31 */
|
||||
|
||||
/* GSSR definitions */
|
||||
/* SW_FW_SYNC/GSSR definitions */
|
||||
#define IXGBE_GSSR_EEP_SM 0x0001
|
||||
#define IXGBE_GSSR_PHY0_SM 0x0002
|
||||
#define IXGBE_GSSR_PHY1_SM 0x0004
|
||||
@ -1521,20 +1554,24 @@
|
||||
#define IXGBE_EEC_GNT 0x00000080 /* EEPROM Access Grant */
|
||||
#define IXGBE_EEC_PRES 0x00000100 /* EEPROM Present */
|
||||
#define IXGBE_EEC_ARD 0x00000200 /* EEPROM Auto Read Done */
|
||||
#define IXGBE_EEC_FLUP 0x00800000 /* Flash update command */
|
||||
#define IXGBE_EEC_FLUDONE 0x04000000 /* Flash update done */
|
||||
/* EEPROM Addressing bits based on type (0-small, 1-large) */
|
||||
#define IXGBE_EEC_ADDR_SIZE 0x00000400
|
||||
#define IXGBE_EEC_SIZE 0x00007800 /* EEPROM Size */
|
||||
|
||||
#define IXGBE_EEC_SIZE_SHIFT 11
|
||||
#define IXGBE_EEPROM_WORD_SIZE_SHIFT 6
|
||||
#define IXGBE_EEPROM_OPCODE_BITS 8
|
||||
#define IXGBE_EEC_SIZE_SHIFT 11
|
||||
#define IXGBE_EEPROM_WORD_SIZE_BASE_SHIFT 6
|
||||
#define IXGBE_EEPROM_OPCODE_BITS 8
|
||||
|
||||
/* Checksum and EEPROM pointers */
|
||||
#define IXGBE_EEPROM_CHECKSUM 0x3F
|
||||
#define IXGBE_EEPROM_SUM 0xBABA
|
||||
#define IXGBE_PCIE_ANALOG_PTR 0x03
|
||||
#define IXGBE_ATLAS0_CONFIG_PTR 0x04
|
||||
#define IXGBE_PHY_PTR 0x04
|
||||
#define IXGBE_ATLAS1_CONFIG_PTR 0x05
|
||||
#define IXGBE_OPTION_ROM_PTR 0x05
|
||||
#define IXGBE_PCIE_GENERAL_PTR 0x06
|
||||
#define IXGBE_PCIE_CONFIG0_PTR 0x07
|
||||
#define IXGBE_PCIE_CONFIG1_PTR 0x08
|
||||
@ -1577,10 +1614,12 @@
|
||||
#define IXGBE_EEPROM_ERASE256_OPCODE_SPI 0xDB /* EEPROM ERASE 256B */
|
||||
|
||||
/* EEPROM Read Register */
|
||||
#define IXGBE_EEPROM_READ_REG_DATA 16 /* data offset in EEPROM read reg */
|
||||
#define IXGBE_EEPROM_READ_REG_DONE 2 /* Offset to READ done bit */
|
||||
#define IXGBE_EEPROM_READ_REG_START 1 /* First bit to start operation */
|
||||
#define IXGBE_EEPROM_READ_ADDR_SHIFT 2 /* Shift to the address bits */
|
||||
#define IXGBE_EEPROM_RW_REG_DATA 16 /* data offset in EEPROM read reg */
|
||||
#define IXGBE_EEPROM_RW_REG_DONE 2 /* Offset to READ done bit */
|
||||
#define IXGBE_EEPROM_RW_REG_START 1 /* First bit to start operation */
|
||||
#define IXGBE_EEPROM_RW_ADDR_SHIFT 2 /* Shift to the address bits */
|
||||
#define IXGBE_NVM_POLL_WRITE 1 /* Flag for polling for write complete */
|
||||
#define IXGBE_NVM_POLL_READ 0 /* Flag for polling for read complete */
|
||||
|
||||
#define IXGBE_ETH_LENGTH_OF_ADDRESS 6
|
||||
|
||||
@ -1588,10 +1627,12 @@
|
||||
#define IXGBE_EEPROM_GRANT_ATTEMPTS 1000 /* EEPROM # attempts to gain grant */
|
||||
#endif
|
||||
|
||||
#ifndef IXGBE_EERD_ATTEMPTS
|
||||
/* Number of 5 microseconds we wait for EERD read to complete */
|
||||
#define IXGBE_EERD_ATTEMPTS 100000
|
||||
#endif
|
||||
/* Number of 5 microseconds we wait for EERD read and
|
||||
* EERW write to complete */
|
||||
#define IXGBE_EERD_EEWR_ATTEMPTS 100000
|
||||
|
||||
/* # attempts we wait for flush update to complete */
|
||||
#define IXGBE_FLUDONE_ATTEMPTS 20000
|
||||
|
||||
#define IXGBE_PCIE_CTRL2 0x5 /* PCIe Control 2 Offset */
|
||||
#define IXGBE_PCIE_CTRL2_DUMMY_ENABLE 0x8 /* Dummy Function Enable */
|
||||
@ -1604,9 +1645,18 @@
|
||||
#define IXGBE_DEVICE_CAPS_FCOE_OFFLOADS 0x2
|
||||
#define IXGBE_FW_PASSTHROUGH_PATCH_CONFIG_PTR 0x4
|
||||
#define IXGBE_FW_PATCH_VERSION_4 0x7
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR 0x27 /* Alt. SAN MAC block */
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET 0x0 /* Alt. SAN MAC capability */
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_PORT0_OFFSET 0x1 /* Alt. SAN MAC 0 offset */
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_PORT1_OFFSET 0x4 /* Alt. SAN MAC 1 offset */
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET 0x7 /* Alt. WWNN prefix offset */
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET 0x8 /* Alt. WWPN prefix offset */
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_CAPS_SANMAC 0x0 /* Alt. SAN MAC exists */
|
||||
#define IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN 0x1 /* Alt. WWN base exists */
|
||||
|
||||
/* PCI Bus Info */
|
||||
#define IXGBE_PCI_LINK_STATUS 0xB2
|
||||
#define IXGBE_PCI_DEVICE_CONTROL2 0xC8
|
||||
#define IXGBE_PCI_LINK_WIDTH 0x3F0
|
||||
#define IXGBE_PCI_LINK_WIDTH_1 0x10
|
||||
#define IXGBE_PCI_LINK_WIDTH_2 0x20
|
||||
@ -1617,6 +1667,7 @@
|
||||
#define IXGBE_PCI_LINK_SPEED_5000 0x2
|
||||
#define IXGBE_PCI_HEADER_TYPE_REGISTER 0x0E
|
||||
#define IXGBE_PCI_HEADER_TYPE_MULTIFUNC 0x80
|
||||
#define IXGBE_PCI_DEVICE_CONTROL2_16ms 0x0005
|
||||
|
||||
/* Number of 100 microseconds we wait for PCI Express master disable */
|
||||
#define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800
|
||||
@ -2210,6 +2261,7 @@ struct ixgbe_atr_input {
|
||||
enum ixgbe_eeprom_type {
|
||||
ixgbe_eeprom_uninitialized = 0,
|
||||
ixgbe_eeprom_spi,
|
||||
ixgbe_flash,
|
||||
ixgbe_eeprom_none /* No NVM support */
|
||||
};
|
||||
|
||||
@ -2269,6 +2321,7 @@ enum ixgbe_media_type {
|
||||
ixgbe_media_type_fiber,
|
||||
ixgbe_media_type_copper,
|
||||
ixgbe_media_type_backplane,
|
||||
ixgbe_media_type_cx4,
|
||||
ixgbe_media_type_virtual
|
||||
};
|
||||
|
||||
@ -2281,6 +2334,14 @@ enum ixgbe_fc_mode {
|
||||
ixgbe_fc_default
|
||||
};
|
||||
|
||||
/* Smart Speed Settings */
|
||||
#define IXGBE_SMARTSPEED_MAX_RETRIES 3
|
||||
enum ixgbe_smart_speed {
|
||||
ixgbe_smart_speed_auto = 0,
|
||||
ixgbe_smart_speed_on,
|
||||
ixgbe_smart_speed_off
|
||||
};
|
||||
|
||||
/* PCI bus types */
|
||||
enum ixgbe_bus_type {
|
||||
ixgbe_bus_type_unknown = 0,
|
||||
@ -2434,6 +2495,7 @@ struct ixgbe_eeprom_operations {
|
||||
s32 (*write)(struct ixgbe_hw *, u16, u16);
|
||||
s32 (*validate_checksum)(struct ixgbe_hw *, u16 *);
|
||||
s32 (*update_checksum)(struct ixgbe_hw *);
|
||||
u16 (*calc_checksum)(struct ixgbe_hw *);
|
||||
};
|
||||
|
||||
struct ixgbe_mac_operations {
|
||||
@ -2447,6 +2509,7 @@ struct ixgbe_mac_operations {
|
||||
s32 (*get_san_mac_addr)(struct ixgbe_hw *, u8 *);
|
||||
s32 (*set_san_mac_addr)(struct ixgbe_hw *, u8 *);
|
||||
s32 (*get_device_caps)(struct ixgbe_hw *, u16 *);
|
||||
s32 (*get_wwn_prefix)(struct ixgbe_hw *, u16 *, u16 *);
|
||||
s32 (*stop_adapter)(struct ixgbe_hw *);
|
||||
s32 (*get_bus_info)(struct ixgbe_hw *);
|
||||
void (*set_lan_id)(struct ixgbe_hw *);
|
||||
@ -2458,9 +2521,7 @@ struct ixgbe_mac_operations {
|
||||
void (*release_swfw_sync)(struct ixgbe_hw *, u16);
|
||||
|
||||
/* Link */
|
||||
s32 (*setup_link)(struct ixgbe_hw *);
|
||||
s32 (*setup_link_speed)(struct ixgbe_hw *, ixgbe_link_speed, bool,
|
||||
bool);
|
||||
s32 (*setup_link)(struct ixgbe_hw *, ixgbe_link_speed, bool, bool);
|
||||
s32 (*check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *, bool);
|
||||
s32 (*get_link_capabilities)(struct ixgbe_hw *, ixgbe_link_speed *,
|
||||
bool *);
|
||||
@ -2525,6 +2586,10 @@ struct ixgbe_mac_info {
|
||||
u8 addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
|
||||
u8 perm_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
|
||||
u8 san_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
|
||||
/* prefix for World Wide Node Name (WWNN) */
|
||||
u16 wwnn_prefix;
|
||||
/* prefix for World Wide Port Name (WWPN) */
|
||||
u16 wwpn_prefix;
|
||||
s32 mc_filter_type;
|
||||
u32 mcft_size;
|
||||
u32 vft_size;
|
||||
@ -2537,8 +2602,6 @@ struct ixgbe_mac_info {
|
||||
u32 orig_autoc;
|
||||
u32 orig_autoc2;
|
||||
bool orig_link_settings_stored;
|
||||
bool autoneg;
|
||||
bool autoneg_succeeded;
|
||||
bool autotry_restart;
|
||||
};
|
||||
|
||||
@ -2553,7 +2616,8 @@ struct ixgbe_phy_info {
|
||||
enum ixgbe_media_type media_type;
|
||||
bool reset_disable;
|
||||
ixgbe_autoneg_advertised autoneg_advertised;
|
||||
bool autoneg_wait_to_complete;
|
||||
enum ixgbe_smart_speed smart_speed;
|
||||
bool smart_speed_active;
|
||||
bool multispeed_fiber;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user