MCPcopy Create free account
hub / github.com/F-Stack/f-stack / update_link_reg

Function update_link_reg

dpdk/drivers/net/i40e/i40e_ethdev.c:2827–2887  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2825}
2826
2827static __rte_always_inline void
2828update_link_reg(struct i40e_hw *hw, struct rte_eth_link *link)
2829{
2830/* Link status registers and values*/
2831#define I40E_REG_LINK_UP 0x40000080
2832#define I40E_PRTMAC_MACC 0x001E24E0
2833#define I40E_REG_MACC_25GB 0x00020000
2834#define I40E_REG_SPEED_MASK 0x38000000
2835#define I40E_REG_SPEED_0 0x00000000
2836#define I40E_REG_SPEED_1 0x08000000
2837#define I40E_REG_SPEED_2 0x10000000
2838#define I40E_REG_SPEED_3 0x18000000
2839#define I40E_REG_SPEED_4 0x20000000
2840 uint32_t link_speed;
2841 uint32_t reg_val;
2842
2843 reg_val = I40E_READ_REG(hw, I40E_PRTMAC_LINKSTA(0));
2844 link_speed = reg_val & I40E_REG_SPEED_MASK;
2845 reg_val &= I40E_REG_LINK_UP;
2846 link->link_status = (reg_val == I40E_REG_LINK_UP) ? 1 : 0;
2847
2848 if (unlikely(link->link_status == 0))
2849 return;
2850
2851 /* Parse the link status */
2852 switch (link_speed) {
2853 case I40E_REG_SPEED_0:
2854 link->link_speed = RTE_ETH_SPEED_NUM_100M;
2855 break;
2856 case I40E_REG_SPEED_1:
2857 link->link_speed = RTE_ETH_SPEED_NUM_1G;
2858 break;
2859 case I40E_REG_SPEED_2:
2860 if (hw->mac.type == I40E_MAC_X722)
2861 link->link_speed = RTE_ETH_SPEED_NUM_2_5G;
2862 else
2863 link->link_speed = RTE_ETH_SPEED_NUM_10G;
2864 break;
2865 case I40E_REG_SPEED_3:
2866 if (hw->mac.type == I40E_MAC_X722) {
2867 link->link_speed = RTE_ETH_SPEED_NUM_5G;
2868 } else {
2869 reg_val = I40E_READ_REG(hw, I40E_PRTMAC_MACC);
2870
2871 if (reg_val & I40E_REG_MACC_25GB)
2872 link->link_speed = RTE_ETH_SPEED_NUM_25G;
2873 else
2874 link->link_speed = RTE_ETH_SPEED_NUM_40G;
2875 }
2876 break;
2877 case I40E_REG_SPEED_4:
2878 if (hw->mac.type == I40E_MAC_X722)
2879 link->link_speed = RTE_ETH_SPEED_NUM_10G;
2880 else
2881 link->link_speed = RTE_ETH_SPEED_NUM_20G;
2882 break;
2883 default:
2884 PMD_DRV_LOG(ERR, "Unknown link speed info %u", link_speed);

Callers 1

i40e_dev_link_updateFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected