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