xref: /illumos-gate/usr/src/uts/common/sys/mac_ether.h (revision 2aaafd60ec8d825f1f153557e1d1932ec79b2782)
1  /*
2   * CDDL HEADER START
3   *
4   * The contents of this file are subject to the terms of the
5   * Common Development and Distribution License (the "License").
6   * You may not use this file except in compliance with the License.
7   *
8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9   * or http://www.opensolaris.org/os/licensing.
10   * See the License for the specific language governing permissions
11   * and limitations under the License.
12   *
13   * When distributing Covered Code, include this CDDL HEADER in each
14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15   * If applicable, add the following below this CDDL HEADER, with the
16   * fields enclosed by brackets "[]" replaced with your own identifying
17   * information: Portions Copyright [yyyy] [name of copyright owner]
18   *
19   * CDDL HEADER END
20   */
21  /*
22   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23   * Use is subject to license terms.
24   *
25   * Copyright 2015 Garrett D'Amore <garrett@damore.org>
26   * Copyright 2016 Joyent, Inc.
27   * Copyright 2023 Oxide Computer Company
28   */
29  
30  #ifndef	_SYS_MAC_ETHER_H
31  #define	_SYS_MAC_ETHER_H
32  
33  /*
34   * Ethernet MAC Plugin
35   */
36  
37  #ifdef	__cplusplus
38  extern "C" {
39  #endif
40  
41  /*
42   * Ethernet-specific media types for use with MAC_PROP_MEDIA and
43   * ETHER_STAT_XCVR_INUSE. See mac(9E) for more information.
44   */
45  typedef enum {
46  	ETHER_MEDIA_UNKNOWN	= 0,
47  	ETHER_MEDIA_NONE,
48  	ETHER_MEDIA_10BASE_T,
49  	ETHER_MEDIA_100BASE_T4,
50  	/*
51  	 * 100BASE-X is a catchall term defined in 802.3. In 802.3 section
52  	 * 24.1.1 100BASE-X is used to cover the more specific 100BASE-TX and
53  	 * 100BASE-FX realized in copper and fiber. The PCS is shared between
54  	 * the two, but the PMD is different. Use this if you can't determine TX
55  	 * vs. FX.
56  	 */
57  	ETHER_MEDIA_100BASE_X,
58  	/*
59  	 * Note, previously there was never a 100BASE-TX value so some drivers
60  	 * would have returned this for 100BASE-TX.
61  	 */
62  	ETHER_MEDIA_100BASE_T2,
63  	/*
64  	 * 1000BASE-X is a fiber catch all. This is for compatibility with the
65  	 * traditional ETHER_STAT_XCVR_INUSE 1000BASE-X value. More specific
66  	 * variants are listed below. USe this if nothing more specific is
67  	 * feasible.
68  	 */
69  	ETHER_MEDIA_1000BASE_X,
70  	ETHER_MEDIA_1000BASE_T,
71  	ETHER_MEDIA_1000BASE_KX,
72  	ETHER_MEDIA_1000BASE_T1,
73  	ETHER_MEDIA_1000BASE_CX,
74  	ETHER_MEDIA_1000BASE_SX,
75  	ETHER_MEDIA_1000BASE_LX,
76  	ETHER_MEDIA_1000BASE_BX,
77  	ETHER_MEDIA_1000_SGMII,
78  
79  	/*
80  	 * Additional more recent or erroneously skipped 10/100 modes.
81  	 */
82  	ETHER_MEDIA_100BASE_TX,
83  	ETHER_MEDIA_100BASE_FX,
84  	ETHER_MEDIA_100_SGMII,
85  	ETHER_MEDIA_10BASE_T1,
86  	ETHER_MEDIA_100BASE_T1,
87  
88  	/*
89  	 * 2.5 GbE, 5.0 GbE, single lane.
90  	 */
91  	ETHER_MEDIA_2500BASE_T,
92  	ETHER_MEDIA_2500BASE_KX,
93  	ETHER_MEDIA_2500BASE_X,
94  	ETHER_MEDIA_5000BASE_T,
95  	ETHER_MEDIA_5000BASE_KR,
96  
97  	/*
98  	 * 10 GbE, all lane configurations.
99  	 */
100  	ETHER_MEDIA_10GBASE_T,
101  	ETHER_MEDIA_10GBASE_SR,
102  	ETHER_MEDIA_10GBASE_LR,
103  	ETHER_MEDIA_10GBASE_LRM,
104  	ETHER_MEDIA_10GBASE_KR,
105  	ETHER_MEDIA_10GBASE_CX4,
106  	ETHER_MEDIA_10GBASE_KX4,
107  	ETHER_MEDIA_10G_XAUI,
108  	ETHER_MEDIA_10GBASE_AOC,
109  	ETHER_MEDIA_10GBASE_ACC,
110  	ETHER_MEDIA_10GBASE_CR,
111  	ETHER_MEDIA_10GBASE_ER,
112  	ETHER_MEDIA_10G_SFI,
113  	ETHER_MEDIA_10G_XFI,
114  
115  	/*
116  	 * 25 GbE, single lane.
117  	 */
118  	ETHER_MEDIA_25GBASE_T,
119  	ETHER_MEDIA_25GBASE_SR,
120  	ETHER_MEDIA_25GBASE_LR,
121  	ETHER_MEDIA_25GBASE_ER,
122  	ETHER_MEDIA_25GBASE_KR,
123  	ETHER_MEDIA_25GBASE_CR,
124  	ETHER_MEDIA_25GBASE_AOC,
125  	ETHER_MEDIA_25GBASE_ACC,
126  	ETHER_MEDIA_25G_AUI,
127  
128  	/*
129  	 * 40 GbE based on 10 GbE
130  	 */
131  	ETHER_MEDIA_40GBASE_T,
132  	ETHER_MEDIA_40GBASE_CR4,
133  	ETHER_MEDIA_40GBASE_KR4,
134  	ETHER_MEDIA_40GBASE_LR4,
135  	ETHER_MEDIA_40GBASE_SR4,
136  	ETHER_MEDIA_40GBASE_ER4,
137  	ETHER_MEDIA_40GBASE_LM4,
138  	ETHER_MEDIA_40GBASE_AOC4,
139  	ETHER_MEDIA_40GBASE_ACC4,
140  	ETHER_MEDIA_40G_XLAUI,
141  	ETHER_MEDIA_40G_XLPPI,
142  
143  	/*
144  	 * 50 GbE based on 25 GbE
145  	 */
146  	ETHER_MEDIA_50GBASE_KR2,
147  	ETHER_MEDIA_50GBASE_CR2,
148  	ETHER_MEDIA_50GBASE_SR2,
149  	ETHER_MEDIA_50GBASE_LR2,
150  	ETHER_MEDIA_50GBASE_AOC2,
151  	ETHER_MEDIA_50GBASE_ACC2,
152  
153  	/*
154  	 * 50 GbE based on 50 GbE PAM4
155  	 */
156  	ETHER_MEDIA_50GBASE_KR,
157  	ETHER_MEDIA_50GBASE_CR,
158  	ETHER_MEDIA_50GBASE_SR,
159  	ETHER_MEDIA_50GBASE_LR,
160  	ETHER_MEDIA_50GBASE_FR,
161  	ETHER_MEDIA_50GBASE_ER,
162  	ETHER_MEDIA_50GBASE_AOC,
163  	ETHER_MEDIA_50GBASE_ACC,
164  
165  	/*
166  	 * 100 GbE based on 10 GbE
167  	 */
168  	ETHER_MEDIA_100GBASE_CR10,
169  	ETHER_MEDIA_100GBASE_SR10,
170  
171  	/*
172  	 * 100 GbE based on 25 GbE
173  	 */
174  	ETHER_MEDIA_100GBASE_SR4,
175  	ETHER_MEDIA_100GBASE_LR4,
176  	ETHER_MEDIA_100GBASE_ER4,
177  	ETHER_MEDIA_100GBASE_KR4,
178  	ETHER_MEDIA_100GBASE_CR4,
179  	ETHER_MEDIA_100GBASE_CAUI4,
180  	ETHER_MEDIA_100GBASE_AOC4,
181  	ETHER_MEDIA_100GBASE_ACC4,
182  
183  	/*
184  	 * 100 GbE based on 50 GbE
185  	 */
186  	ETHER_MEDIA_100GBASE_KR2,
187  	ETHER_MEDIA_100GBASE_CR2,
188  	ETHER_MEDIA_100GBASE_SR2,
189  
190  	/*
191  	 * 100 GbE based on 100 GbE
192  	 */
193  	ETHER_MEDIA_100GBASE_KR,
194  	ETHER_MEDIA_100GBASE_CR,
195  	ETHER_MEDIA_100GBASE_SR,
196  	ETHER_MEDIA_100GBASE_DR,
197  	ETHER_MEDIA_100GBASE_LR,
198  	ETHER_MEDIA_100GBASE_FR,
199  
200  	/*
201  	 * 200G Ethernet based on 50 GbE
202  	 */
203  	ETHER_MEDIA_200GAUI_4,
204  	ETHER_MEDIA_200GBASE_CR4,
205  	ETHER_MEDIA_200GBASE_KR4,
206  	ETHER_MEDIA_200GBASE_SR4,
207  	ETHER_MEDIA_200GBASE_DR4,
208  	ETHER_MEDIA_200GBASE_FR4,
209  	ETHER_MEDIA_200GBASE_LR4,
210  	ETHER_MEDIA_200GBASE_ER4,
211  
212  	/*
213  	 * 200G Ethernet based on 100 GbE
214  	 */
215  	ETHER_MEDIA_200GAUI_2,
216  	ETHER_MEDIA_200GBASE_KR2,
217  	ETHER_MEDIA_200GBASE_CR2,
218  	ETHER_MEDIA_200GBASE_SR2,
219  
220  	/*
221  	 * 400G based on 50 GbE
222  	 */
223  	ETHER_MEDIA_400GAUI_8,
224  	ETHER_MEDIA_400GBASE_KR8,
225  	ETHER_MEDIA_400GBASE_FR8,
226  	ETHER_MEDIA_400GBASE_LR8,
227  	ETHER_MEDIA_400GBASE_ER8,
228  
229  	/*
230  	 * 400G based on 100 GbE
231  	 */
232  	ETHER_MEDIA_400GAUI_4,
233  	ETHER_MEDIA_400GBASE_KR4,
234  	ETHER_MEDIA_400GBASE_CR4,
235  	ETHER_MEDIA_400GBASE_SR4,
236  	ETHER_MEDIA_400GBASE_DR4,
237  	ETHER_MEDIA_400GBASE_FR4
238  } mac_ether_media_t;
239  
240  #ifdef	_KERNEL
241  
242  #define	MAC_PLUGIN_IDENT_ETHER	"mac_ether"
243  
244  /*
245   * Do not reorder, and add only to the end of this list.
246   */
247  enum ether_stat {
248  	/* RFC 1643 stats */
249  	ETHER_STAT_ALIGN_ERRORS = MACTYPE_STAT_MIN,
250  	ETHER_STAT_FCS_ERRORS,
251  	ETHER_STAT_FIRST_COLLISIONS,
252  	ETHER_STAT_MULTI_COLLISIONS,
253  	ETHER_STAT_SQE_ERRORS,
254  	ETHER_STAT_DEFER_XMTS,
255  	ETHER_STAT_TX_LATE_COLLISIONS,
256  	ETHER_STAT_EX_COLLISIONS,
257  	ETHER_STAT_MACXMT_ERRORS,
258  	ETHER_STAT_CARRIER_ERRORS,
259  	ETHER_STAT_TOOLONG_ERRORS,
260  	ETHER_STAT_MACRCV_ERRORS,
261  
262  	/* MII/GMII stats */
263  	ETHER_STAT_XCVR_ADDR,
264  	ETHER_STAT_XCVR_ID,
265  	ETHER_STAT_XCVR_INUSE,
266  	ETHER_STAT_CAP_1000FDX,
267  	ETHER_STAT_CAP_1000HDX,
268  	ETHER_STAT_CAP_100FDX,
269  	ETHER_STAT_CAP_100HDX,
270  	ETHER_STAT_CAP_10FDX,
271  	ETHER_STAT_CAP_10HDX,
272  	ETHER_STAT_CAP_ASMPAUSE,
273  	ETHER_STAT_CAP_PAUSE,
274  	ETHER_STAT_CAP_AUTONEG,
275  	ETHER_STAT_ADV_CAP_1000FDX,
276  	ETHER_STAT_ADV_CAP_1000HDX,
277  	ETHER_STAT_ADV_CAP_100FDX,
278  	ETHER_STAT_ADV_CAP_100HDX,
279  	ETHER_STAT_ADV_CAP_10FDX,
280  	ETHER_STAT_ADV_CAP_10HDX,
281  	ETHER_STAT_ADV_CAP_ASMPAUSE,
282  	ETHER_STAT_ADV_CAP_PAUSE,
283  	ETHER_STAT_ADV_CAP_AUTONEG,
284  	ETHER_STAT_LP_CAP_1000FDX,
285  	ETHER_STAT_LP_CAP_1000HDX,
286  	ETHER_STAT_LP_CAP_100FDX,
287  	ETHER_STAT_LP_CAP_100HDX,
288  	ETHER_STAT_LP_CAP_10FDX,
289  	ETHER_STAT_LP_CAP_10HDX,
290  	ETHER_STAT_LP_CAP_ASMPAUSE,
291  	ETHER_STAT_LP_CAP_PAUSE,
292  	ETHER_STAT_LP_CAP_AUTONEG,
293  	ETHER_STAT_LINK_ASMPAUSE,
294  	ETHER_STAT_LINK_PAUSE,
295  	ETHER_STAT_LINK_AUTONEG,
296  	ETHER_STAT_LINK_DUPLEX,
297  
298  	ETHER_STAT_TOOSHORT_ERRORS,
299  	ETHER_STAT_CAP_REMFAULT,
300  	ETHER_STAT_ADV_REMFAULT,
301  	ETHER_STAT_LP_REMFAULT,
302  
303  	ETHER_STAT_JABBER_ERRORS,
304  	ETHER_STAT_CAP_100T4,
305  	ETHER_STAT_ADV_CAP_100T4,
306  	ETHER_STAT_LP_CAP_100T4,
307  
308  	ETHER_STAT_CAP_10GFDX,
309  	ETHER_STAT_ADV_CAP_10GFDX,
310  	ETHER_STAT_LP_CAP_10GFDX,
311  
312  	ETHER_STAT_CAP_40GFDX,
313  	ETHER_STAT_ADV_CAP_40GFDX,
314  	ETHER_STAT_LP_CAP_40GFDX,
315  
316  	ETHER_STAT_CAP_100GFDX,
317  	ETHER_STAT_ADV_CAP_100GFDX,
318  	ETHER_STAT_LP_CAP_100GFDX,
319  
320  	ETHER_STAT_CAP_2500FDX,
321  	ETHER_STAT_ADV_CAP_2500FDX,
322  	ETHER_STAT_LP_CAP_2500FDX,
323  
324  	ETHER_STAT_CAP_5000FDX,
325  	ETHER_STAT_ADV_CAP_5000FDX,
326  	ETHER_STAT_LP_CAP_5000FDX,
327  
328  	ETHER_STAT_CAP_25GFDX,
329  	ETHER_STAT_ADV_CAP_25GFDX,
330  	ETHER_STAT_LP_CAP_25GFDX,
331  
332  	ETHER_STAT_CAP_50GFDX,
333  	ETHER_STAT_ADV_CAP_50GFDX,
334  	ETHER_STAT_LP_CAP_50GFDX,
335  
336  	ETHER_STAT_CAP_200GFDX,
337  	ETHER_STAT_ADV_CAP_200GFDX,
338  	ETHER_STAT_LP_CAP_200GFDX,
339  
340  	ETHER_STAT_CAP_400GFDX,
341  	ETHER_STAT_ADV_CAP_400GFDX,
342  	ETHER_STAT_LP_CAP_400GFDX,
343  };
344  
345  #define	ETHER_NSTAT	\
346  	(ETHER_STAT_LP_CAP_400GFDX - ETHER_STAT_ALIGN_ERRORS + 1)
347  
348  #define	ETHER_STAT_ISACOUNTER(_ether_stat)				\
349  	    ((_ether_stat) == ETHER_STAT_ALIGN_ERRORS ||		\
350  		(_ether_stat) == ETHER_STAT_FCS_ERRORS ||		\
351  		(_ether_stat) == ETHER_STAT_FIRST_COLLISIONS ||		\
352  		(_ether_stat) == ETHER_STAT_MULTI_COLLISIONS ||		\
353  		(_ether_stat) == ETHER_STAT_SQE_ERRORS ||		\
354  		(_ether_stat) == ETHER_STAT_DEFER_XMTS ||		\
355  		(_ether_stat) == ETHER_STAT_TX_LATE_COLLISIONS ||	\
356  		(_ether_stat) == ETHER_STAT_EX_COLLISIONS ||		\
357  		(_ether_stat) == ETHER_STAT_MACXMT_ERRORS ||		\
358  		(_ether_stat) == ETHER_STAT_CARRIER_ERRORS ||		\
359  		(_ether_stat) == ETHER_STAT_TOOLONG_ERRORS ||		\
360  		(_ether_stat) == ETHER_STAT_TOOSHORT_ERRORS ||		\
361  		(_ether_stat) == ETHER_STAT_JABBER_ERRORS ||		\
362  		(_ether_stat) == ETHER_STAT_MACRCV_ERRORS)
363  
364  #endif	/* _KERNEL */
365  
366  #ifdef	__cplusplus
367  }
368  #endif
369  
370  #endif /* _SYS_MAC_ETHER_H */
371