| 2887 | } |
| 2888 | |
| 2889 | static __rte_always_inline void |
| 2890 | update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link, |
| 2891 | bool enable_lse, int wait_to_complete) |
| 2892 | { |
| 2893 | #define CHECK_INTERVAL 100 /* 100ms */ |
| 2894 | #define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */ |
| 2895 | uint32_t rep_cnt = MAX_REPEAT_TIME; |
| 2896 | struct i40e_link_status link_status; |
| 2897 | int status; |
| 2898 | |
| 2899 | memset(&link_status, 0, sizeof(link_status)); |
| 2900 | |
| 2901 | do { |
| 2902 | memset(&link_status, 0, sizeof(link_status)); |
| 2903 | |
| 2904 | /* Get link status information from hardware */ |
| 2905 | status = i40e_aq_get_link_info(hw, enable_lse, |
| 2906 | &link_status, NULL); |
| 2907 | if (unlikely(status != I40E_SUCCESS)) { |
| 2908 | link->link_speed = RTE_ETH_SPEED_NUM_NONE; |
| 2909 | link->link_duplex = RTE_ETH_LINK_FULL_DUPLEX; |
| 2910 | PMD_DRV_LOG(ERR, "Failed to get link info"); |
| 2911 | return; |
| 2912 | } |
| 2913 | |
| 2914 | link->link_status = link_status.link_info & I40E_AQ_LINK_UP; |
| 2915 | if (!wait_to_complete || link->link_status) |
| 2916 | break; |
| 2917 | |
| 2918 | rte_delay_ms(CHECK_INTERVAL); |
| 2919 | } while (--rep_cnt); |
| 2920 | |
| 2921 | /* Parse the link status */ |
| 2922 | switch (link_status.link_speed) { |
| 2923 | case I40E_LINK_SPEED_100MB: |
| 2924 | link->link_speed = RTE_ETH_SPEED_NUM_100M; |
| 2925 | break; |
| 2926 | case I40E_LINK_SPEED_1GB: |
| 2927 | link->link_speed = RTE_ETH_SPEED_NUM_1G; |
| 2928 | break; |
| 2929 | case I40E_LINK_SPEED_10GB: |
| 2930 | link->link_speed = RTE_ETH_SPEED_NUM_10G; |
| 2931 | break; |
| 2932 | case I40E_LINK_SPEED_20GB: |
| 2933 | link->link_speed = RTE_ETH_SPEED_NUM_20G; |
| 2934 | break; |
| 2935 | case I40E_LINK_SPEED_25GB: |
| 2936 | link->link_speed = RTE_ETH_SPEED_NUM_25G; |
| 2937 | break; |
| 2938 | case I40E_LINK_SPEED_40GB: |
| 2939 | link->link_speed = RTE_ETH_SPEED_NUM_40G; |
| 2940 | break; |
| 2941 | default: |
| 2942 | if (link->link_status) |
| 2943 | link->link_speed = RTE_ETH_SPEED_NUM_UNKNOWN; |
| 2944 | else |
| 2945 | link->link_speed = RTE_ETH_SPEED_NUM_NONE; |
| 2946 | break; |
no test coverage detected