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