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