xref: /titanic_44/usr/src/lib/libsff/common/sff.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 _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