summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsff/common/sff.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libsff/common/sff.h')
-rw-r--r--usr/src/lib/libsff/common/sff.h221
1 files changed, 221 insertions, 0 deletions
diff --git a/usr/src/lib/libsff/common/sff.h b/usr/src/lib/libsff/common/sff.h
new file mode 100644
index 0000000000..d3b64e7fba
--- /dev/null
+++ b/usr/src/lib/libsff/common/sff.h
@@ -0,0 +1,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 */