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