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