xref: /titanic_44/usr/src/lib/libsff/common/libsff.h (revision 48a4016cae8aa2b8b3d8b258eb22e0c781912bed)
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