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
7struct 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 */
24static const struct ice_phy_type_to_ethtool
25phy_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 */
96static const struct ice_phy_type_to_ethtool
97phy_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

source code of linux/drivers/net/ethernet/intel/ice/ice_ethtool.h