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 };
104 
105 #endif /* !_ICE_ETHTOOL_H_ */
106