diff options
Diffstat (limited to 'drivers/net/ethernet/intel/i40e')
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h | 20 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_common.c | 11 |
2 files changed, 28 insertions, 3 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h index e2a9ec80a623..5d0291c1337e 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h +++ b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h | |||
@@ -1734,6 +1734,8 @@ enum i40e_aq_phy_type { | |||
1734 | I40E_PHY_TYPE_10GBASE_CR1_CU = 0xB, | 1734 | I40E_PHY_TYPE_10GBASE_CR1_CU = 0xB, |
1735 | I40E_PHY_TYPE_10GBASE_AOC = 0xC, | 1735 | I40E_PHY_TYPE_10GBASE_AOC = 0xC, |
1736 | I40E_PHY_TYPE_40GBASE_AOC = 0xD, | 1736 | I40E_PHY_TYPE_40GBASE_AOC = 0xD, |
1737 | I40E_PHY_TYPE_UNRECOGNIZED = 0xE, | ||
1738 | I40E_PHY_TYPE_UNSUPPORTED = 0xF, | ||
1737 | I40E_PHY_TYPE_100BASE_TX = 0x11, | 1739 | I40E_PHY_TYPE_100BASE_TX = 0x11, |
1738 | I40E_PHY_TYPE_1000BASE_T = 0x12, | 1740 | I40E_PHY_TYPE_1000BASE_T = 0x12, |
1739 | I40E_PHY_TYPE_10GBASE_T = 0x13, | 1741 | I40E_PHY_TYPE_10GBASE_T = 0x13, |
@@ -1752,6 +1754,8 @@ enum i40e_aq_phy_type { | |||
1752 | I40E_PHY_TYPE_25GBASE_CR = 0x20, | 1754 | I40E_PHY_TYPE_25GBASE_CR = 0x20, |
1753 | I40E_PHY_TYPE_25GBASE_SR = 0x21, | 1755 | I40E_PHY_TYPE_25GBASE_SR = 0x21, |
1754 | I40E_PHY_TYPE_25GBASE_LR = 0x22, | 1756 | I40E_PHY_TYPE_25GBASE_LR = 0x22, |
1757 | I40E_PHY_TYPE_EMPTY = 0xFE, | ||
1758 | I40E_PHY_TYPE_DEFAULT = 0xFF, | ||
1755 | I40E_PHY_TYPE_MAX | 1759 | I40E_PHY_TYPE_MAX |
1756 | }; | 1760 | }; |
1757 | 1761 | ||
@@ -1942,19 +1946,31 @@ struct i40e_aqc_get_link_status { | |||
1942 | #define I40E_AQ_25G_SERDES_UCODE_ERR 0X04 | 1946 | #define I40E_AQ_25G_SERDES_UCODE_ERR 0X04 |
1943 | #define I40E_AQ_25G_NIMB_UCODE_ERR 0X05 | 1947 | #define I40E_AQ_25G_NIMB_UCODE_ERR 0X05 |
1944 | u8 loopback; /* use defines from i40e_aqc_set_lb_mode */ | 1948 | u8 loopback; /* use defines from i40e_aqc_set_lb_mode */ |
1949 | /* Since firmware API 1.7 loopback field keeps power class info as well */ | ||
1950 | #define I40E_AQ_LOOPBACK_MASK 0x07 | ||
1951 | #define I40E_AQ_PWR_CLASS_SHIFT_LB 6 | ||
1952 | #define I40E_AQ_PWR_CLASS_MASK_LB (0x03 << I40E_AQ_PWR_CLASS_SHIFT_LB) | ||
1945 | __le16 max_frame_size; | 1953 | __le16 max_frame_size; |
1946 | u8 config; | 1954 | u8 config; |
1947 | #define I40E_AQ_CONFIG_FEC_KR_ENA 0x01 | 1955 | #define I40E_AQ_CONFIG_FEC_KR_ENA 0x01 |
1948 | #define I40E_AQ_CONFIG_FEC_RS_ENA 0x02 | 1956 | #define I40E_AQ_CONFIG_FEC_RS_ENA 0x02 |
1949 | #define I40E_AQ_CONFIG_CRC_ENA 0x04 | 1957 | #define I40E_AQ_CONFIG_CRC_ENA 0x04 |
1950 | #define I40E_AQ_CONFIG_PACING_MASK 0x78 | 1958 | #define I40E_AQ_CONFIG_PACING_MASK 0x78 |
1951 | u8 power_desc; | 1959 | union { |
1960 | struct { | ||
1961 | u8 power_desc; | ||
1952 | #define I40E_AQ_LINK_POWER_CLASS_1 0x00 | 1962 | #define I40E_AQ_LINK_POWER_CLASS_1 0x00 |
1953 | #define I40E_AQ_LINK_POWER_CLASS_2 0x01 | 1963 | #define I40E_AQ_LINK_POWER_CLASS_2 0x01 |
1954 | #define I40E_AQ_LINK_POWER_CLASS_3 0x02 | 1964 | #define I40E_AQ_LINK_POWER_CLASS_3 0x02 |
1955 | #define I40E_AQ_LINK_POWER_CLASS_4 0x03 | 1965 | #define I40E_AQ_LINK_POWER_CLASS_4 0x03 |
1956 | #define I40E_AQ_PWR_CLASS_MASK 0x03 | 1966 | #define I40E_AQ_PWR_CLASS_MASK 0x03 |
1957 | u8 reserved[4]; | 1967 | u8 reserved[4]; |
1968 | }; | ||
1969 | struct { | ||
1970 | u8 link_type[4]; | ||
1971 | u8 link_type_ext; | ||
1972 | }; | ||
1973 | }; | ||
1958 | }; | 1974 | }; |
1959 | 1975 | ||
1960 | I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); | 1976 | I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c index 7346d8850c8e..64c15f4c9d2b 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_common.c +++ b/drivers/net/ethernet/intel/i40e/i40e_common.c | |||
@@ -1821,7 +1821,7 @@ i40e_status i40e_aq_get_link_info(struct i40e_hw *hw, | |||
1821 | hw_link_info->fec_info = resp->config & (I40E_AQ_CONFIG_FEC_KR_ENA | | 1821 | hw_link_info->fec_info = resp->config & (I40E_AQ_CONFIG_FEC_KR_ENA | |
1822 | I40E_AQ_CONFIG_FEC_RS_ENA); | 1822 | I40E_AQ_CONFIG_FEC_RS_ENA); |
1823 | hw_link_info->ext_info = resp->ext_info; | 1823 | hw_link_info->ext_info = resp->ext_info; |
1824 | hw_link_info->loopback = resp->loopback; | 1824 | hw_link_info->loopback = resp->loopback & I40E_AQ_LOOPBACK_MASK; |
1825 | hw_link_info->max_frame_size = le16_to_cpu(resp->max_frame_size); | 1825 | hw_link_info->max_frame_size = le16_to_cpu(resp->max_frame_size); |
1826 | hw_link_info->pacing = resp->config & I40E_AQ_CONFIG_PACING_MASK; | 1826 | hw_link_info->pacing = resp->config & I40E_AQ_CONFIG_PACING_MASK; |
1827 | 1827 | ||
@@ -1852,6 +1852,15 @@ i40e_status i40e_aq_get_link_info(struct i40e_hw *hw, | |||
1852 | hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE) | 1852 | hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE) |
1853 | hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU; | 1853 | hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU; |
1854 | 1854 | ||
1855 | if (hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR && | ||
1856 | hw->aq.api_min_ver >= 7) { | ||
1857 | __le32 tmp; | ||
1858 | |||
1859 | memcpy(&tmp, resp->link_type, sizeof(tmp)); | ||
1860 | hw->phy.phy_types = le32_to_cpu(tmp); | ||
1861 | hw->phy.phy_types |= ((u64)resp->link_type_ext << 32); | ||
1862 | } | ||
1863 | |||
1855 | /* save link status information */ | 1864 | /* save link status information */ |
1856 | if (link) | 1865 | if (link) |
1857 | *link = *hw_link_info; | 1866 | *link = *hw_link_info; |