1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright (c) 2017, Joyent, Inc. 14 * Copyright 2025 RackTop Systems, Inc. 15 */ 16 17 #ifndef _SFF_H 18 #define _SFF_H 19 20 /* 21 * Definitions internal to libsfp for various SFF versions. This generally 22 * contains offsets for each byte and its purpose. The meaning of the values are 23 * not generally found in this header. 24 */ 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 /* 31 * This table is derived from SFF 8024 Section 4.1, Table 4-1. 32 */ 33 typedef enum sff_8024_id { 34 SFF_8024_ID_UNKNOWN = 0x00, 35 SFF_8024_ID_GBIC = 0x01, 36 SFF_8024_ID_SOLDERED = 0x02, 37 SFF_8024_ID_SFP = 0x03, /* SFP, SFP+, SFP28 */ 38 SFF_8024_ID_XBI = 0x04, 39 SFF_8024_ID_XENPAK = 0x05, 40 SFF_8024_ID_XFP = 0x06, 41 SFF_8024_ID_XFF = 0x07, 42 SFF_8024_ID_XFP_E = 0x08, 43 SFF_8024_ID_XPAK = 0x09, 44 SFF_8024_ID_X2 = 0x0A, 45 SFF_8024_ID_DWDM_SFP = 0x0B, 46 SFF_8024_ID_QSFP = 0x0C, 47 SFF_8024_ID_QSFP_PLUS = 0x0D, 48 SFF_8024_ID_CXP = 0x0E, 49 SFF_8024_ID_SMMHD4X = 0x0F, 50 SFF_8024_ID_SMMHD8X = 0x10, 51 SFF_8024_ID_QSFP28 = 0x11, 52 SFF_8024_ID_CXP2 = 0x12, 53 SFF_8024_ID_CDFP = 0x13, 54 SFF_8024_ID_SMMHD4XF = 0x14, 55 SFF_8024_ID_SMMHD8XF = 0x15, 56 SFF_8024_ID_CDFP3 = 0x16, 57 SFF_8024_ID_MICROQSFP = 0x17, 58 SFF_8024_ID_QSFP_DD = 0x18, 59 SFF_8024_ID_OSFP = 0x19, 60 SFF_8024_ID_SFP_DD = 0x1a, 61 SFF_8024_ID_DSFP = 0x1b, 62 SFF_8024_ID_MINILINK_X4 = 0x1c, 63 SFF_8024_ID_MINILINK_X8 = 0x1d, 64 SFF_8024_ID_QSFP_PLUS_CMIS = 0x1e, 65 SFF_8024_ID_SFP_DD_CMIS = 0x1f, 66 SFF_8024_ID_SFP_PLUS_CMIS = 0x20, 67 SFF_8024_ID_OSFP_CMIS = 0x21, 68 SFF_8024_ID_OIF_CMIS = 0x22, 69 SFF_8024_ID_CDFP_X4_CMIS = 0x23, 70 SFF_8024_ID_CDFP_X8_CMIS = 0x24, 71 SFF_8024_ID_CDFP_X16_CMIS = 0x25, 72 SFF_8024_NIDS = 0x26, 73 SFF_8024_VENDOR = 0x80 74 } sff_8024_id_t; 75 76 77 /* 78 * Byte offsets for SFF-8472. Note that most of this applies to INF-8074. 79 * Generally speaking, SFF-8472 is a backwards compatible evolution of INF-8074. 80 */ 81 #define SFF_8472_IDENTIFIER 0 82 #define SFF_8472_EXT_IDENTIFER 1 83 #define SFF_8472_CONNECTOR 2 84 85 /* 86 * Note that several constants overlap here as the offset is used for multiple 87 * purposes. 88 */ 89 #define SFF_8472_COMPLIANCE_10GE 3 90 #define SFF_8472_COMPLIANCE_IB 3 91 #define SFF_8472_COMPLIANCE_ESCON 4 92 #define SFF_8472_COMPLIANCE_SONET_LOW 4 93 #define SFF_8472_COMPLIANCE_SONET_HIGH 5 94 #define SFF_8472_COMPLIANCE_ETHERNET 6 95 #define SFF_8472_COMPLIANCE_FCLEN 7 96 #define SFF_8472_COMPLIANCE_FC_LOW 7 97 #define SFF_8472_COMPLIANCE_FC_HIGH 8 98 #define SFF_8472_COMPLIANCE_SFP 8 99 #define SFF_8472_COMPLIANCE_FC_MEDIA 9 100 #define SFF_8472_COMPLIANCE_FC_SPEED 10 101 102 #define SFF_8472_ENCODING 11 103 #define SFF_8472_BR_NOMINAL 12 104 #define SFF_8472_RATE_IDENTIFIER 13 105 #define SFF_8472_LENGTH_SMF_KM 14 106 #define SFF_8472_LENGTH_SMF 15 107 #define SFF_8472_LENGTH_50UM 16 108 #define SFF_8472_LENGTH_62UM 17 109 #define SFF_8472_LENGTH_COPPER 18 110 #define SFF_8472_LENGTH_OM3 19 111 112 #define SFF_8472_VENDOR 20 113 #define SFF_8472_VENDOR_LEN 16 114 #define SFF_8472_TRANSCEIVER 36 115 #define SFF_8472_OUI 37 116 #define SFF_8472_OUI_LEN 3 117 #define SFF_8472_VENDOR_PN 40 118 #define SFF_8472_VENDOR_PN_LEN 16 119 #define SFF_8472_VENDOR_REV 56 120 #define SFF_8472_VENDOR_REV_LEN 4 121 122 #define SFF_8472_PASSIVE_SPEC 60 123 #define SFF_8472_ACTIVE_SPEC 60 124 #define SFF_8472_WAVELENGTH_HI 60 125 #define SFF_8472_WAVELENGTH_LOW 61 126 127 #define SFF_8472_CC_BASE 63 128 129 #define SFF_8472_OPTIONS_HI 64 130 #define SFF_8472_OPTIONS_LOW 65 131 #define SFF_8472_BR_MAX 66 132 #define SFF_8472_BR_MIN 67 133 #define SFF_8472_VENDOR_SN 68 134 #define SFF_8472_VENDOR_SN_LEN 16 135 #define SFF_8472_DATE_CODE 84 136 #define SFF_8472_DATE_CODE_LEN 8 137 #define SFF_8472_DIAG_MONITORING 92 138 #define SFF_8472_ENHANCED_OPTIONS 93 139 #define SFF_8472_SFF_8472_COMPLIANCE 94 140 141 #define SFF_8472_CC_EXT 95 142 #define SFF_8472_VENDOR_SPECIFIC 96 143 #define SFF_8472_RESERVED 128 144 145 /* 146 * These values are factors by which we should multiple or divide various units. 147 */ 148 #define SFF_8472_BR_NOMINAL_FACTOR 100 149 #define SFF_8472_BR_MAX_FACTOR 250 150 #define SFF_8472_BR_MIN_FACTOR 250 151 #define SFF_8472_LENGTH_SMF_KM_FACTOR 1 152 #define SFF_8472_LENGTH_SMF_FACTOR 100 153 #define SFF_8472_LENGTH_50UM_FACTOR 10 154 #define SFF_8472_LENGTH_62UM_FACTOR 10 155 #define SFF_8472_LENGTH_COPPER_FACTOR 1 156 #define SFF_8472_LENGTH_OM3_FACTOR 10 157 #define SFF_8472_WAVELENGTH_FACTOR 1 158 159 160 /* 161 * SFF 8636 related constants 162 */ 163 #define SFF_8636_IDENTIFIER 0 164 #define SFF_8636_EXT_IDENTIFIER 129 165 #define SFF_8636_CONNECTOR 130 166 167 #define SFF_8636_COMPLIANCE_10GBEP 131 168 #define SFF_8636_COMPLIANCE_SONET 132 169 #define SFF_8636_COMPLIANCE_SAS 133 170 #define SFF_8636_COMPLIANCE_ETHERNET 134 171 #define SFF_8636_COMPLIANCE_FCLEN 135 172 #define SFF_8636_COMPLIANCE_FC_LOW 135 173 #define SFF_8636_COMPLIANCE_FC_HIGH 136 174 #define SFF_8636_COMPLIANCE_FC_MEDIA 137 175 #define SFF_8636_COMPLIANCE_FC_SPEED 138 176 177 #define SFF_8636_ENCODING 139 178 #define SFF_8636_BR_NOMINAL 140 179 #define SFF_8636_BR_EXT_RATE_SELECT 141 180 #define SFF_8636_LENGTH_SMF 142 181 #define SFF_8636_LENGTH_OM3 143 182 #define SFF_8636_LENGTH_OM2 144 183 #define SFF_8636_LENGTH_OM1 145 184 #define SFF_8636_LENGTH_COPPER 146 185 #define SFF_8636_DEVICE_TECH 147 186 #define SFF_8636_VENDOR 148 187 #define SFF_8636_VENDOR_LEN 16 188 #define SFF_8636_EXTENDED_MODULE 164 189 #define SFF_8636_OUI 165 190 #define SFF_8636_OUI_LEN 3 191 #define SFF_8636_VENDOR_PN 168 192 #define SFF_8636_VENDOR_PN_LEN 16 193 #define SFF_8636_VENDOR_REV 184 194 #define SFF_8636_VENDOR_REV_LEN 2 195 196 #define SFF_8636_ATTENUATE_2G 186 197 #define SFF_8636_ATTENUATE_5G 187 198 #define SFF_8636_ATTENUATE_7G 188 199 #define SFF_8636_ATTENUATE_12G 189 200 #define SFF_8636_WAVELENGTH_NOMINAL_HI 186 201 #define SFF_8636_WAVELENGTH_NOMINAL_LOW 187 202 #define SFF_8636_WAVELENGTH_TOLERANCE_HI 188 203 #define SFF_8636_WAVELENGTH_TOLERANCE_LOW 189 204 #define SFF_8636_MAX_CASE_TEMP 190 205 #define SFF_8636_CC_BASE 191 206 207 #define SFF_8636_LINK_CODES 192 208 #define SFF_8636_OPTIONS_HI 193 209 #define SFF_8636_OPTIONS_MID 194 210 #define SFF_8636_OPTIONS_LOW 195 211 #define SFF_8636_VENDOR_SN 196 212 #define SFF_8636_VENDOR_SN_LEN 16 213 #define SFF_8636_DATE_CODE 212 214 #define SFF_8636_DATE_CODE_LEN 8 215 #define SFF_8636_DIAG_MONITORING 220 216 #define SFF_8636_ENHANCED_OPTIONS 221 217 #define SFF_8636_BR_NOMINAL_EXT 222 218 #define SFF_8636_CC_EXT 223 219 #define SFF_866_VENDOR_SPECIFIC 224 220 221 /* 222 * SFF 8636 multiplication factors 223 */ 224 #define SFF_8636_BR_NOMINAL_FACTOR 100 225 #define SFF_8636_BR_NOMINAL_EXT_FACTOR 250 226 #define SFF_8636_LENGTH_SMF_FACTOR 1 227 #define SFF_8636_LENGTH_OM3_FACTOR 2 228 #define SFF_8636_LENGTH_OM2_FACTOR 1 229 #define SFF_8636_LENGTH_OM1_FACTOR 1 230 #define SFF_8636_LENGTH_COPPER_FACTOR 1 231 232 #ifdef __cplusplus 233 } 234 #endif 235 236 #endif /* _SFF_H */ 237