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