@@ -660,6 +660,9 @@ struct i40e_hw {
struct i40e_nvm_info nvm;
struct i40e_fc_info fc;
+ //switch device
+ struct rte_eth_dev *switch_dev;
+
/* pci info */
u16 device_id;
u16 vendor_id;
@@ -1312,6 +1312,9 @@ static inline void i40e_config_automask(struct i40e_pf *pf)
hw->adapter_stopped = 0;
hw->adapter_closed = 0;
+ //Update switch device pointer
+ hw->switch_dev = NULL;
+
/*
* Switch Tag value should not be identical to either the First Tag
* or Second Tag values. So set something other than common Ethertype
@@ -2782,6 +2785,20 @@ void i40e_flex_payload_reg_set_default(struct i40e_hw *hw)
}
}
+void
+i40e_set_switch_dev(struct rte_eth_dev *i40e_dev,
+struct rte_eth_dev *switch_dev)
+{
+ struct i40e_hw *hw;
+
+ if (!i40e_dev)
+ return;
+
+ hw = I40E_DEV_PRIVATE_TO_HW(i40e_dev->data->dev_private);
+
+ hw->switch_dev = switch_dev;
+}
+
int
i40e_dev_link_update(struct rte_eth_dev *dev,
int wait_to_complete)
@@ -2790,6 +2807,7 @@ void i40e_flex_payload_reg_set_default(struct i40e_hw *hw)
struct rte_eth_link link;
bool enable_lse = dev->data->dev_conf.intr_conf.lsc ? true : false;
int ret;
+ struct rte_eth_dev *switch_ethdev;
memset(&link, 0, sizeof(link));
@@ -2803,6 +2821,18 @@ void i40e_flex_payload_reg_set_default(struct i40e_hw *hw)
else
update_link_aq(hw, &link, enable_lse, wait_to_complete);
+ switch_ethdev = hw->switch_dev;
+ if (switch_ethdev) {
+ rte_eth_linkstatus_get(switch_ethdev, &link);
+ printf(">>>>>>>>>>>>>i40e_update_link 5 link.link_status %d\n",
+ link.link_status);
+ } else {
+ link.link_duplex = ETH_LINK_FULL_DUPLEX;
+ link.link_autoneg = ETH_LINK_SPEED_FIXED;
+ link.link_speed = ETH_SPEED_NUM_25G;
+ link.link_status = 0;
+ }
+
ret = rte_eth_linkstatus_set(dev, &link);
i40e_notify_all_vfs_link_status(dev);
@@ -12541,7 +12571,7 @@ struct i40e_customized_pctype*
* b. Old_filter = 10 (Stag_Inner_Vlan)
* c. New_filter = 0x10
* d. TR bit = 0xff (optional, not used here)
- * e. Buffer – 2 entries:
+ * e. Buffer - 2 entries:
* i. Byte 0 = 8 (outer vlan FV index).
* Byte 1 = 0 (rsv)
* Byte 2-3 = 0x0fff
@@ -12555,7 +12585,7 @@ struct i40e_customized_pctype*
* a. Valid_flags.replace_cloud = 1
* b. Old_filter = 1 (instead of outer IP)
* c. New_filter = 0x10
- * d. Buffer – 2 entries:
+ * d. Buffer - 2 entries:
* i. Byte 0 = 0x80 | 7 (valid | Stag).
* Byte 1-3 = 0 (rsv)
* ii. Byte 8 = 0x80 | 0x10 (valid | new l1 filter step1)
@@ -1061,4 +1061,8 @@ int rte_pmd_i40e_inset_set(uint16_t port, uint8_t pctype,
return 0;
}
+void
+i40e_set_switch_dev(struct rte_eth_dev *i40e_dev,
+struct rte_eth_dev *switch_dev);
+
#endif /* _PMD_I40E_H_ */
In ipn3ke, each FPGA network side port bonding to an i40e pf, each i40e pf link status should get data from FPGA network, side port. This patch provide bonding relationship. Signed-off-by: Rosen Xu <rosen.xu@intel.com> --- drivers/net/i40e/base/i40e_type.h | 3 +++ drivers/net/i40e/i40e_ethdev.c | 34 ++++++++++++++++++++++++++++++++-- drivers/net/i40e/rte_pmd_i40e.h | 4 ++++ 3 files changed, 39 insertions(+), 2 deletions(-)