19136e1f1SPaul Greenwalt /* SPDX-License-Identifier: GPL-2.0-only */ 29136e1f1SPaul Greenwalt /* Copyright (C) 2023 Intel Corporation */ 39136e1f1SPaul Greenwalt 49136e1f1SPaul Greenwalt #ifndef _ICE_ETHTOOL_H_ 59136e1f1SPaul Greenwalt #define _ICE_ETHTOOL_H_ 69136e1f1SPaul Greenwalt 79136e1f1SPaul Greenwalt struct ice_phy_type_to_ethtool { 89136e1f1SPaul Greenwalt u64 aq_link_speed; 99136e1f1SPaul Greenwalt u8 link_mode; 109136e1f1SPaul Greenwalt }; 119136e1f1SPaul Greenwalt 129136e1f1SPaul Greenwalt /* Macro to make PHY type to Ethtool link mode table entry. 139136e1f1SPaul Greenwalt * The index is the PHY type. 149136e1f1SPaul Greenwalt */ 159136e1f1SPaul Greenwalt #define ICE_PHY_TYPE(LINK_SPEED, ETHTOOL_LINK_MODE) {\ 169136e1f1SPaul Greenwalt .aq_link_speed = ICE_AQ_LINK_SPEED_##LINK_SPEED, \ 179136e1f1SPaul Greenwalt .link_mode = ETHTOOL_LINK_MODE_##ETHTOOL_LINK_MODE##_BIT, \ 189136e1f1SPaul Greenwalt } 199136e1f1SPaul Greenwalt 209136e1f1SPaul Greenwalt /* Lookup table mapping PHY type low to link speed and Ethtool link modes. 219136e1f1SPaul Greenwalt * Array index corresponds to HW PHY type bit, see 229136e1f1SPaul Greenwalt * ice_adminq_cmd.h:ICE_PHY_TYPE_LOW_*. 239136e1f1SPaul Greenwalt */ 249136e1f1SPaul Greenwalt static const struct ice_phy_type_to_ethtool 259136e1f1SPaul Greenwalt phy_type_low_lkup[] = { 269136e1f1SPaul Greenwalt [0] = ICE_PHY_TYPE(100MB, 100baseT_Full), 279136e1f1SPaul Greenwalt [1] = ICE_PHY_TYPE(100MB, 100baseT_Full), 289136e1f1SPaul Greenwalt [2] = ICE_PHY_TYPE(1000MB, 1000baseT_Full), 299136e1f1SPaul Greenwalt [3] = ICE_PHY_TYPE(1000MB, 1000baseX_Full), 309136e1f1SPaul Greenwalt [4] = ICE_PHY_TYPE(1000MB, 1000baseX_Full), 319136e1f1SPaul Greenwalt [5] = ICE_PHY_TYPE(1000MB, 1000baseKX_Full), 329136e1f1SPaul Greenwalt [6] = ICE_PHY_TYPE(1000MB, 1000baseT_Full), 339136e1f1SPaul Greenwalt [7] = ICE_PHY_TYPE(2500MB, 2500baseT_Full), 349136e1f1SPaul Greenwalt [8] = ICE_PHY_TYPE(2500MB, 2500baseX_Full), 359136e1f1SPaul Greenwalt [9] = ICE_PHY_TYPE(2500MB, 2500baseX_Full), 369136e1f1SPaul Greenwalt [10] = ICE_PHY_TYPE(5GB, 5000baseT_Full), 379136e1f1SPaul Greenwalt [11] = ICE_PHY_TYPE(5GB, 5000baseT_Full), 389136e1f1SPaul Greenwalt [12] = ICE_PHY_TYPE(10GB, 10000baseT_Full), 39*49eb1c1fSPaul Greenwalt [13] = ICE_PHY_TYPE(10GB, 10000baseCR_Full), 409136e1f1SPaul Greenwalt [14] = ICE_PHY_TYPE(10GB, 10000baseSR_Full), 419136e1f1SPaul Greenwalt [15] = ICE_PHY_TYPE(10GB, 10000baseLR_Full), 429136e1f1SPaul Greenwalt [16] = ICE_PHY_TYPE(10GB, 10000baseKR_Full), 43*49eb1c1fSPaul Greenwalt [17] = ICE_PHY_TYPE(10GB, 10000baseCR_Full), 449136e1f1SPaul Greenwalt [18] = ICE_PHY_TYPE(10GB, 10000baseKR_Full), 459136e1f1SPaul Greenwalt [19] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 469136e1f1SPaul Greenwalt [20] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 479136e1f1SPaul Greenwalt [21] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 489136e1f1SPaul Greenwalt [22] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 499136e1f1SPaul Greenwalt [23] = ICE_PHY_TYPE(25GB, 25000baseSR_Full), 509136e1f1SPaul Greenwalt [24] = ICE_PHY_TYPE(25GB, 25000baseSR_Full), 519136e1f1SPaul Greenwalt [25] = ICE_PHY_TYPE(25GB, 25000baseKR_Full), 529136e1f1SPaul Greenwalt [26] = ICE_PHY_TYPE(25GB, 25000baseKR_Full), 539136e1f1SPaul Greenwalt [27] = ICE_PHY_TYPE(25GB, 25000baseKR_Full), 54*49eb1c1fSPaul Greenwalt [28] = ICE_PHY_TYPE(25GB, 25000baseSR_Full), 55*49eb1c1fSPaul Greenwalt [29] = ICE_PHY_TYPE(25GB, 25000baseCR_Full), 569136e1f1SPaul Greenwalt [30] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full), 579136e1f1SPaul Greenwalt [31] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full), 589136e1f1SPaul Greenwalt [32] = ICE_PHY_TYPE(40GB, 40000baseLR4_Full), 599136e1f1SPaul Greenwalt [33] = ICE_PHY_TYPE(40GB, 40000baseKR4_Full), 60*49eb1c1fSPaul Greenwalt [34] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full), 619136e1f1SPaul Greenwalt [35] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full), 629136e1f1SPaul Greenwalt [36] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full), 639136e1f1SPaul Greenwalt [37] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 649136e1f1SPaul Greenwalt [38] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 659136e1f1SPaul Greenwalt [39] = ICE_PHY_TYPE(50GB, 50000baseKR2_Full), 66*49eb1c1fSPaul Greenwalt [40] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 679136e1f1SPaul Greenwalt [41] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full), 68*49eb1c1fSPaul Greenwalt [42] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full), 699136e1f1SPaul Greenwalt [43] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full), 70*49eb1c1fSPaul Greenwalt [44] = ICE_PHY_TYPE(50GB, 50000baseCR_Full), 71*49eb1c1fSPaul Greenwalt [45] = ICE_PHY_TYPE(50GB, 50000baseSR_Full), 72*49eb1c1fSPaul Greenwalt [46] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full), 73*49eb1c1fSPaul Greenwalt [47] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full), 74*49eb1c1fSPaul Greenwalt [48] = ICE_PHY_TYPE(50GB, 50000baseKR_Full), 75*49eb1c1fSPaul Greenwalt [49] = ICE_PHY_TYPE(50GB, 50000baseSR_Full), 76*49eb1c1fSPaul Greenwalt [50] = ICE_PHY_TYPE(50GB, 50000baseCR_Full), 779136e1f1SPaul Greenwalt [51] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 789136e1f1SPaul Greenwalt [52] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full), 799136e1f1SPaul Greenwalt [53] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full), 809136e1f1SPaul Greenwalt [54] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full), 819136e1f1SPaul Greenwalt [55] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 829136e1f1SPaul Greenwalt [56] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 83*49eb1c1fSPaul Greenwalt [57] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full), 849136e1f1SPaul Greenwalt [58] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 859136e1f1SPaul Greenwalt [59] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full), 869136e1f1SPaul Greenwalt [60] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full), 879136e1f1SPaul Greenwalt [61] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full), 889136e1f1SPaul Greenwalt [62] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full), 899136e1f1SPaul Greenwalt [63] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full), 909136e1f1SPaul Greenwalt }; 919136e1f1SPaul Greenwalt 929136e1f1SPaul Greenwalt /* Lookup table mapping PHY type high to link speed and Ethtool link modes. 939136e1f1SPaul Greenwalt * Array index corresponds to HW PHY type bit, see 949136e1f1SPaul Greenwalt * ice_adminq_cmd.h:ICE_PHY_TYPE_HIGH_* 959136e1f1SPaul Greenwalt */ 969136e1f1SPaul Greenwalt static const struct ice_phy_type_to_ethtool 979136e1f1SPaul Greenwalt phy_type_high_lkup[] = { 989136e1f1SPaul Greenwalt [0] = ICE_PHY_TYPE(100GB, 100000baseKR2_Full), 99*49eb1c1fSPaul Greenwalt [1] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full), 100*49eb1c1fSPaul Greenwalt [2] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full), 101*49eb1c1fSPaul Greenwalt [3] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full), 102*49eb1c1fSPaul Greenwalt [4] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full), 1039136e1f1SPaul Greenwalt }; 1049136e1f1SPaul Greenwalt 1059136e1f1SPaul Greenwalt #endif /* !_ICE_ETHTOOL_H_ */ 106