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 _LIBSFF_H 17*48a4016cSRobert Mustacchi #define _LIBSFF_H 18*48a4016cSRobert Mustacchi 19*48a4016cSRobert Mustacchi /* 20*48a4016cSRobert Mustacchi * Parse SFF structures and values and return an nvlist_t of keys. This library 21*48a4016cSRobert Mustacchi * is private and subject to change and break compat at any time. 22*48a4016cSRobert Mustacchi */ 23*48a4016cSRobert Mustacchi 24*48a4016cSRobert Mustacchi #include <libnvpair.h> 25*48a4016cSRobert Mustacchi #include <stdint.h> 26*48a4016cSRobert Mustacchi 27*48a4016cSRobert Mustacchi #ifdef __cplusplus 28*48a4016cSRobert Mustacchi extern "C" { 29*48a4016cSRobert Mustacchi #endif 30*48a4016cSRobert Mustacchi 31*48a4016cSRobert Mustacchi extern int libsff_parse(const uint8_t *, size_t, uint_t, nvlist_t **); 32*48a4016cSRobert Mustacchi 33*48a4016cSRobert Mustacchi /* 34*48a4016cSRobert Mustacchi * Supported Keys in the resulting nvlist. Not every key will be present in 35*48a4016cSRobert Mustacchi * every SFF compatible device. 36*48a4016cSRobert Mustacchi */ 37*48a4016cSRobert Mustacchi #define LIBSFF_KEY_IDENTIFIER "Identifier" /* String */ 38*48a4016cSRobert Mustacchi #define LIBSFF_KEY_CONNECTOR "Connector" /* String */ 39*48a4016cSRobert Mustacchi #define LIBSFF_KEY_ENCODING "Encoding" /* String */ 40*48a4016cSRobert Mustacchi #define LIBSFF_KEY_VENDOR "Vendor" /* String */ 41*48a4016cSRobert Mustacchi #define LIBSFF_KEY_OUI "OUI" /* Byte Array [3] */ 42*48a4016cSRobert Mustacchi #define LIBSFF_KEY_PART "Part Number" /* String */ 43*48a4016cSRobert Mustacchi #define LIBSFF_KEY_REVISION "Revision" /* String */ 44*48a4016cSRobert Mustacchi #define LIBSFF_KEY_SERIAL "Serial Number" /* String */ 45*48a4016cSRobert Mustacchi #define LIBSFF_KEY_DATECODE "Date Code" /* String */ 46*48a4016cSRobert Mustacchi #define LIBSFF_KEY_BR_NOMINAL "BR, nominal" /* String */ 47*48a4016cSRobert Mustacchi #define LIBSFF_KEY_BR_MAX "BR, maximum" /* String */ 48*48a4016cSRobert Mustacchi #define LIBSFF_KEY_BR_MIN "BR, minimum" /* String */ 49*48a4016cSRobert Mustacchi #define LIBSFF_KEY_LENGTH_SMF_KM "Length SMF (km)" /* String */ 50*48a4016cSRobert Mustacchi #define LIBSFF_KEY_LENGTH_SMF "Length SMF (m)" /* String */ 51*48a4016cSRobert Mustacchi #define LIBSFF_KEY_LENGTH_OM2 "Length 50um OM2" /* String */ 52*48a4016cSRobert Mustacchi #define LIBSFF_KEY_LENGTH_OM1 "Length 62.5um OM1" /* String */ 53*48a4016cSRobert Mustacchi #define LIBSFF_KEY_LENGTH_COPPER "Length Copper" /* String */ 54*48a4016cSRobert Mustacchi #define LIBSFF_KEY_LENGTH_OM3 "Length OM3" /* String */ 55*48a4016cSRobert Mustacchi #define LIBSFF_KEY_WAVELENGTH "Laser Wavelength" /* String */ 56*48a4016cSRobert Mustacchi #define LIBSFF_KEY_WAVE_TOLERANCE "Wavelength Tolerance" /* String */ 57*48a4016cSRobert Mustacchi #define LIBSFF_KEY_OPTIONS "Options" /* String Array */ 58*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_8472 "8472 Compliance" /* String */ 59*48a4016cSRobert Mustacchi #define LIBSFF_KEY_EXTENDED_OPTIONS "Extended Options" /* String Array */ 60*48a4016cSRobert Mustacchi #define LIBSFF_KEY_ENHANCED_OPTIONS "Enhanced Options" /* String Array */ 61*48a4016cSRobert Mustacchi #define LIBSFF_KEY_EXT_MOD_CODES "Extended Module Codes" /* String Array */ 62*48a4016cSRobert Mustacchi #define LIBSFF_KEY_DIAG_MONITOR "Diagnostic Monitoring" /* String */ 63*48a4016cSRobert Mustacchi #define LIBSFF_KEY_EXT_SPEC "Extended Specification" /* String */ 64*48a4016cSRobert Mustacchi #define LIBSFF_KEY_MAX_CASE_TEMP "Maximum Case Temperature" /* String */ 65*48a4016cSRobert Mustacchi #define LIBSFF_KEY_ATTENUATE_2G "Cable Attenuation at 2.5 GHz" /* String */ 66*48a4016cSRobert Mustacchi #define LIBSFF_KEY_ATTENUATE_5G "Cable Attenuation at 5.0 GHz" /* String */ 67*48a4016cSRobert Mustacchi #define LIBSFF_KEY_ATTENUATE_7G "Cable Attenuation at 7.0 GHz" /* String */ 68*48a4016cSRobert Mustacchi #define LIBSFF_KEY_ATTENUATE_12G "Cable Attenuation at 12.9 GHz" /* String */ 69*48a4016cSRobert Mustacchi #define LIBSFF_KEY_TRAN_TECH "Transmitter Technology" /* String */ 70*48a4016cSRobert Mustacchi 71*48a4016cSRobert Mustacchi /* 72*48a4016cSRobert Mustacchi * Note, different revisions of the SFF standard have different compliance 73*48a4016cSRobert Mustacchi * values available. We try to use a common set of compliance keys when 74*48a4016cSRobert Mustacchi * possible, even if the values will be different. All entries here are String 75*48a4016cSRobert Mustacchi * Arrays. 76*48a4016cSRobert Mustacchi */ 77*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_10GBE "10G+ Ethernet Compliance Codes" 78*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_IB "Infiniband Compliance Codes" 79*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_ESCON "ESCON Compliance Codes" 80*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_SONET "SONET Compliance Codes" 81*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_GBE "Ethernet Compliance Codes" 82*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_FC_LEN "Fibre Channel Link Lengths" 83*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_FC_TECH "Fibre Channel Technology" 84*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_SFP "SFP+ Cable Technology" 85*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_FC_MEDIA "Fibre Channel Transmission Media" 86*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_FC_SPEED "Fibre Channel Speed" 87*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_SAS "SAS Compliance Codes" 88*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_ACTIVE "Active Cable Specification Compliance" 89*48a4016cSRobert Mustacchi #define LIBSFF_KEY_COMPLIANCE_PASSIVE "Passive Cable Specification Compliance" 90*48a4016cSRobert Mustacchi 91*48a4016cSRobert Mustacchi 92*48a4016cSRobert Mustacchi /* 93*48a4016cSRobert Mustacchi * The following keys have meaning that varies based on the standard. 94*48a4016cSRobert Mustacchi */ 95*48a4016cSRobert Mustacchi #define LIBSFF_KEY_8472_EXT_IDENTIFIER "Extended Identifier" /* uint8_t */ 96*48a4016cSRobert Mustacchi 97*48a4016cSRobert Mustacchi #ifdef __cplusplus 98*48a4016cSRobert Mustacchi } 99*48a4016cSRobert Mustacchi #endif 100*48a4016cSRobert Mustacchi 101*48a4016cSRobert Mustacchi #endif /* _LIBSFF_H */ 102