summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsff/common/sff.h
blob: d3b64e7fba6ab8de5c4d1f9c29ecb58ce361ea40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
/*
 * This file and its contents are supplied under the terms of the
 * Common Development and Distribution License ("CDDL"), version 1.0.
 * You may only use this file in accordance with the terms of version
 * 1.0 of the CDDL.
 *
 * A full copy of the text of the CDDL should have accompanied this
 * source.  A copy of the CDDL is also available via the Internet at
 * http://www.illumos.org/license/CDDL.
 */

/*
 * Copyright (c) 2017, Joyent, Inc.
 */

#ifndef _SFF_H
#define	_SFF_H

/*
 * Definitions internal to libsfp for various SFF versions. This generally
 * contains offsets for each byte and its purpose. The meaning of the values are
 * not generally found in this header.
 */

#ifdef __cplusplus
extern "C" {
#endif

/*
 * This table is derived from SFF 8024 Section 4.1, Table 4-1.
 */
typedef enum sff_8024_id {
	SFF_8024_ID_UNKNOWN	= 0x00,
	SFF_8024_ID_GBIC	= 0x01,
	SFF_8024_ID_SOLDERED	= 0x02,
	SFF_8024_ID_SFP		= 0x03, /* SFP, SFP+, SFP28 */
	SFF_8024_ID_XBI		= 0x04,
	SFF_8024_ID_XENPAK	= 0x05,
	SFF_8024_ID_XFP		= 0x06,
	SFF_8024_ID_XFF		= 0x07,
	SFF_8024_ID_XFP_E	= 0x08,
	SFF_8024_ID_XPAK	= 0x09,
	SFF_8024_ID_X2		= 0x0A,
	SFF_8024_ID_DWDM_SFP	= 0x0B,
	SFF_8024_ID_QSFP	= 0x0C,
	SFF_8024_ID_QSFP_PLUS	= 0x0D,
	SFF_8024_ID_CXP		= 0x0E,
	SFF_8024_ID_SMMHD4X	= 0x0F,
	SFF_8024_ID_SMMHD8X	= 0x10,
	SFF_8024_ID_QSFP28	= 0x11,
	SFF_8024_ID_CXP2	= 0x12,
	SFF_8024_ID_CDFP	= 0x13,
	SFF_8024_ID_SMMHD4XF	= 0x14,
	SFF_8024_ID_SMMHD8XF	= 0x15,
	SFF_8024_ID_CDFP3	= 0x16,
	SFF_8024_ID_MICROQSFP	= 0x17,
	SFF_8024_NIDS		= 0x18,
	SFF_8024_VENDOR		= 0x80
} sff_8024_id_t;


/*
 * Byte offsets for SFF-8472. Note that most of this applies to INF-8074.
 * Generally speaking, SFF-8472 is a backwards compatible evolution of INF-8074.
 */
#define	SFF_8472_IDENTIFIER			0
#define	SFF_8472_EXT_IDENTIFER			1
#define	SFF_8472_CONNECTOR			2

/*
 * Note that several constants overlap here as the offset is used for multiple
 * purposes.
 */
#define	SFF_8472_COMPLIANCE_10GE		3
#define	SFF_8472_COMPLIANCE_IB			3
#define	SFF_8472_COMPLIANCE_ESCON		4
#define	SFF_8472_COMPLIANCE_SONET_LOW		4
#define	SFF_8472_COMPLIANCE_SONET_HIGH		5
#define	SFF_8472_COMPLIANCE_ETHERNET		6
#define	SFF_8472_COMPLIANCE_FCLEN		7
#define	SFF_8472_COMPLIANCE_FC_LOW		7
#define	SFF_8472_COMPLIANCE_FC_HIGH		8
#define	SFF_8472_COMPLIANCE_SFP			8
#define	SFF_8472_COMPLIANCE_FC_MEDIA		9
#define	SFF_8472_COMPLIANCE_FC_SPEED		10

#define	SFF_8472_ENCODING			11
#define	SFF_8472_BR_NOMINAL			12
#define	SFF_8472_RATE_IDENTIFIER		13
#define	SFF_8472_LENGTH_SMF_KM			14
#define	SFF_8472_LENGTH_SMF			15
#define	SFF_8472_LENGTH_50UM			16
#define	SFF_8472_LENGTH_62UM			17
#define	SFF_8472_LENGTH_COPPER			18
#define	SFF_8472_LENGTH_OM3			19

#define	SFF_8472_VENDOR				20
#define	SFF_8472_VENDOR_LEN			16
#define	SFF_8472_TRANSCEIVER			36
#define	SFF_8472_OUI				37
#define	SFF_8472_OUI_LEN			3
#define	SFF_8472_VENDOR_PN			40
#define	SFF_8472_VENDOR_PN_LEN			16
#define	SFF_8472_VENDOR_REV			56
#define	SFF_8472_VENDOR_REV_LEN			4

#define	SFF_8472_PASSIVE_SPEC			60
#define	SFF_8472_ACTIVE_SPEC			60
#define	SFF_8472_WAVELENGTH_HI			60
#define	SFF_8472_WAVELENGTH_LOW			61

#define	SFF_8472_CC_BASE			63

#define	SFF_8472_OPTIONS_HI			64
#define	SFF_8472_OPTIONS_LOW			65
#define	SFF_8472_BR_MAX				66
#define	SFF_8472_BR_MIN				67
#define	SFF_8472_VENDOR_SN			68
#define	SFF_8472_VENDOR_SN_LEN			16
#define	SFF_8472_DATE_CODE			84
#define	SFF_8472_DATE_CODE_LEN			8
#define	SFF_8472_DIAG_MONITORING		92
#define	SFF_8472_ENHANCED_OPTIONS		93
#define	SFF_8472_SFF_8472_COMPLIANCE		94

#define	SFF_8472_CC_EXT				95
#define	SFF_8472_VENDOR_SPECIFIC		96
#define	SFF_8472_RESERVED			128

/*
 * These values are factors by which we should multiple or divide various units.
 */
#define	SFF_8472_BR_NOMINAL_FACTOR		100
#define	SFF_8472_BR_MAX_FACTOR			250
#define	SFF_8472_BR_MIN_FACTOR			250
#define	SFF_8472_LENGTH_SMF_KM_FACTOR		1
#define	SFF_8472_LENGTH_SMF_FACTOR		100
#define	SFF_8472_LENGTH_50UM_FACTOR		10
#define	SFF_8472_LENGTH_62UM_FACTOR		10
#define	SFF_8472_LENGTH_COPPER_FACTOR		1
#define	SFF_8472_LENGTH_OM3_FACTOR		10
#define	SFF_8472_WAVELENGTH_FACTOR		1


/*
 * SFF 8636 related constants
 */
#define	SFF_8636_IDENTIFIER			0
#define	SFF_8636_EXT_IDENTIFIER			129
#define	SFF_8636_CONNECTOR			130

#define	SFF_8636_COMPLIANCE_10GBEP		131
#define	SFF_8636_COMPLIANCE_SONET		132
#define	SFF_8636_COMPLIANCE_SAS			133
#define	SFF_8636_COMPLIANCE_ETHERNET		134
#define	SFF_8636_COMPLIANCE_FCLEN		135
#define	SFF_8636_COMPLIANCE_FC_LOW		135
#define	SFF_8636_COMPLIANCE_FC_HIGH		136
#define	SFF_8636_COMPLIANCE_FC_MEDIA		137
#define	SFF_8636_COMPLIANCE_FC_SPEED		138

#define	SFF_8636_ENCODING			139
#define	SFF_8636_BR_NOMINAL			140
#define	SFF_8636_BR_EXT_RATE_SELECT		141
#define	SFF_8636_LENGTH_SMF			142
#define	SFF_8636_LENGTH_OM3			143
#define	SFF_8636_LENGTH_OM2			144
#define	SFF_8636_LENGTH_OM1			145
#define	SFF_8636_LENGTH_COPPER			146
#define	SFF_8636_DEVICE_TECH			147
#define	SFF_8636_VENDOR				148
#define	SFF_8636_VENDOR_LEN			16
#define	SFF_8636_EXTENDED_MODULE		164
#define	SFF_8636_OUI				165
#define	SFF_8636_OUI_LEN			3
#define	SFF_8636_VENDOR_PN			168
#define	SFF_8636_VENDOR_PN_LEN			16
#define	SFF_8636_VENDOR_REV			184
#define	SFF_8636_VENDOR_REV_LEN			2

#define	SFF_8636_ATTENUATE_2G			186
#define	SFF_8636_ATTENUATE_5G			187
#define	SFF_8636_ATTENUATE_7G			188
#define	SFF_8636_ATTENUATE_12G			189
#define	SFF_8636_WAVELENGTH_NOMINAL_HI		186
#define	SFF_8636_WAVELENGTH_NOMINAL_LOW		187
#define	SFF_8636_WAVELENGTH_TOLERANCE_HI	188
#define	SFF_8636_WAVELENGTH_TOLERANCE_LOW	189
#define	SFF_8636_MAX_CASE_TEMP			190
#define	SFF_8636_CC_BASE			191

#define	SFF_8636_LINK_CODES			192
#define	SFF_8636_OPTIONS_HI			193
#define	SFF_8636_OPTIONS_MID			194
#define	SFF_8636_OPTIONS_LOW			195
#define	SFF_8636_VENDOR_SN			196
#define	SFF_8636_VENDOR_SN_LEN			16
#define	SFF_8636_DATE_CODE			212
#define	SFF_8636_DATE_CODE_LEN			8
#define	SFF_8636_DIAG_MONITORING		220
#define	SFF_8636_ENHANCED_OPTIONS		221
#define	SFF_8636_BR_NOMINAL_EXT			222
#define	SFF_8636_CC_EXT				223
#define	SFF_866_VENDOR_SPECIFIC			224

/*
 * SFF 8636 multiplication factors
 */
#define	SFF_8636_BR_NOMINAL_FACTOR		100
#define	SFF_8636_BR_NOMINAL_EXT_FACTOR		250
#define	SFF_8636_LENGTH_SMF_FACTOR		1
#define	SFF_8636_LENGTH_OM3_FACTOR		2
#define	SFF_8636_LENGTH_OM2_FACTOR		1
#define	SFF_8636_LENGTH_OM1_FACTOR		1
#define	SFF_8636_LENGTH_COPPER_FACTOR		1

#ifdef __cplusplus
}
#endif

#endif /* _SFF_H */