1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* Copyright (C) 2023 Intel Corporation */ 3 4 #ifndef _ICE_ETHTOOL_H_ 5 #define _ICE_ETHTOOL_H_ 6 7 struct ice_phy_type_to_ethtool { 8 u64 aq_link_speed; 9 u8 link_mode; 10 }; 11 12 /* Macro to make PHY type to Ethtool link mode table entry. 13 * The index is the PHY type. 14 */ 15 #define ICE_PHY_TYPE(LINK_SPEED, ETHTOOL_LINK_MODE) {\ 16 .aq_link_speed = ICE_AQ_LINK_SPEED_##LINK_SPEED, \ 17 .link_mode = ETHTOOL_LINK_MODE_##ETHTOOL_LINK_MODE##_BIT, \ 18 } 19 20 /* Lookup table mapping PHY type low to link speed and Ethtool link modes. 21 * Array index corresponds to HW PHY type bit, see 22 * ice_adminq_cmd.h:ICE_PHY_TYPE_LOW_*. 23 */ 24 static const struct ice_phy_type_to_ethtool 25 phy_type_low_lkup[] = { 26 [0] = ICE_PHY_TYPE(100MB, 100baseT_Full), 27 [1] = ICE_PHY_TYPE(100MB, 100baseT_Full), 28 [2] = ICE_PHY_TYPE(1000MB, 1000baseT_Full), 29 [3] = ICE_PHY_TYPE(1000MB, 1000baseX_Full), 30 [4] = ICE_PHY_TYPE(1000MB, 1000baseX_Full), 31 [5] = ICE_PHY_TYPE(1000MB, 1000baseKX_Full), 32 [6] = ICE_PHY_TYPE(1000MB, 1000baseT_Full), 33 [7] = ICE_PHY_TYPE(2500MB, 2500baseT_Full), 34 [8] = ICE_PHY_TYPE(2500MB, 2500baseX_Full), 35 [9] = ICE_PHY_TYPE(2500MB, 2500baseX_Full), 36 [10] = ICE_PHY_TYPE(5GB, 5000baseT_Full), 37 [11] = ICE_PHY_TYPE(5GB, 5000baseT_Full), 38 [12] = ICE_PHY_TYPE(10GB, 10000baseT_Full), 39 [13] = ICE_PHY_TYPE(10GB, 10000baseCR_Full), 40 [14] = ICE_PHY_TYPE(10GB, 10000baseSR_Full), 41 [15] = ICE_PHY_TYPE(10GB, 10000baseLR_Full), 42 [16] = ICE_PHY_TYPE(10GB, 10000baseKR_Full), 43 [17] = ICE_PHY_TYPE(10GB, 10000baseCR_Full), 44 [18] = ICE_PHY_TYPE(10GB, 10000baseKR_Full), 45 [19] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 46 [20] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 47 [21] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 48 [22] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 49 [23] = ICE_PHY_TYPE(25GB, 25000baseSR_Full), 50 [24] = ICE_PHY_TYPE(25GB, 25000baseSR_Full), 51 [25] = ICE_PHY_TYPE(25GB, 25000baseKR_Full), 52 [26] = ICE_PHY_TYPE(25GB, 25000baseKR_Full), 53 [27] = ICE_PHY_TYPE(25GB, 25000baseKR_Full), 54 [28] = ICE_PHY_TYPE(25GB, 25000baseSR_Full), 55 [29] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 56 [30] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full), 57 [31] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full), 58 [32] = ICE_PHY_TYPE(40GB, 40000baseLR4_Full), 59 [33] = ICE_PHY_TYPE(40GB, 40000baseKR4_Full), 60 [34] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full), 61 [35] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full), 62 [36] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full), 63 [37] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 64 [38] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 65 [39] = ICE_PHY_TYPE(50GB, 50000baseKR2_Full), 66 [40] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 67 [41] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full), 68 [42] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 69 [43] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full), 70 [44] = ICE_PHY_TYPE(50GB, 50000baseCR_Full), 71 [45] = ICE_PHY_TYPE(50GB, 50000baseSR_Full), 72 [46] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full), 73 [47] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full), 74 [48] = ICE_PHY_TYPE(50GB, 50000baseKR_Full), 75 [49] = ICE_PHY_TYPE(50GB, 50000baseSR_Full), 76 [50] = ICE_PHY_TYPE(50GB, 50000baseCR_Full), 77 [51] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 78 [52] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full), 79 [53] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full), 80 [54] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full), 81 [55] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 82 [56] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 83 [57] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full), 84 [58] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 85 [59] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 86 [60] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full), 87 [61] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full), 88 [62] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full), 89 [63] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full), 90 }; 91 92 /* Lookup table mapping PHY type high to link speed and Ethtool link modes. 93 * Array index corresponds to HW PHY type bit, see 94 * ice_adminq_cmd.h:ICE_PHY_TYPE_HIGH_* 95 */ 96 static const struct ice_phy_type_to_ethtool 97 phy_type_high_lkup[] = { 98 [0] = ICE_PHY_TYPE(100GB, 100000baseKR2_Full), 99 [1] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full), 100 [2] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full), 101 [3] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full), 102 [4] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full), 103 [5] = ICE_PHY_TYPE(200GB, 200000baseCR4_Full), 104 [6] = ICE_PHY_TYPE(200GB, 200000baseSR4_Full), 105 [7] = ICE_PHY_TYPE(200GB, 200000baseLR4_ER4_FR4_Full), 106 [8] = ICE_PHY_TYPE(200GB, 200000baseLR4_ER4_FR4_Full), 107 [9] = ICE_PHY_TYPE(200GB, 200000baseDR4_Full), 108 [10] = ICE_PHY_TYPE(200GB, 200000baseKR4_Full), 109 [11] = ICE_PHY_TYPE(200GB, 200000baseSR4_Full), 110 [12] = ICE_PHY_TYPE(200GB, 200000baseCR4_Full), 111 }; 112 113 #endif /* !_ICE_ETHTOOL_H_ */ 114