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