xref: /freebsd/sys/net/sff8436.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1c59adfc6SAlexander V. Chernikov /*-
2c59adfc6SAlexander V. Chernikov  * Copyright (c) 2014 Yandex LLC.
3c59adfc6SAlexander V. Chernikov  *
4c59adfc6SAlexander V. Chernikov  * All rights reserved.
5c59adfc6SAlexander V. Chernikov  *
6c59adfc6SAlexander V. Chernikov  * Redistribution and use in source and binary forms, with or without
7c59adfc6SAlexander V. Chernikov  * modification, are permitted provided that the following conditions
8c59adfc6SAlexander V. Chernikov  * are met:
9c59adfc6SAlexander V. Chernikov  * 1. Redistributions of source code must retain the above copyright
10c59adfc6SAlexander V. Chernikov  *    notice, this list of conditions and the following disclaimer.
11c59adfc6SAlexander V. Chernikov  * 2. Redistributions in binary form must reproduce the above copyright
12c59adfc6SAlexander V. Chernikov  *    notice, this list of conditions and the following disclaimer in the
13c59adfc6SAlexander V. Chernikov  *    documentation and/or other materials provided with the distribution.
14c59adfc6SAlexander V. Chernikov  *
15c59adfc6SAlexander V. Chernikov  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16c59adfc6SAlexander V. Chernikov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17c59adfc6SAlexander V. Chernikov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18c59adfc6SAlexander V. Chernikov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19c59adfc6SAlexander V. Chernikov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20c59adfc6SAlexander V. Chernikov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21c59adfc6SAlexander V. Chernikov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22c59adfc6SAlexander V. Chernikov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23c59adfc6SAlexander V. Chernikov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24c59adfc6SAlexander V. Chernikov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25c59adfc6SAlexander V. Chernikov  * SUCH DAMAGE.
26c59adfc6SAlexander V. Chernikov  */
27c59adfc6SAlexander V. Chernikov 
28c59adfc6SAlexander V. Chernikov /*
29c59adfc6SAlexander V. Chernikov  * The following set of constants are from Document SFF-8436
30c59adfc6SAlexander V. Chernikov  * "QSFP+ 10 Gbs 4X PLUGGABLE TRANSCEIVER" revision 4.8 dated October 31, 2013
31c59adfc6SAlexander V. Chernikov  *
32c59adfc6SAlexander V. Chernikov  * This SFF standard defines the following QSFP+ memory address module:
33c59adfc6SAlexander V. Chernikov  *
34c59adfc6SAlexander V. Chernikov  * 1) 256-byte addressable block and 128-byte pages
35c59adfc6SAlexander V. Chernikov  * 2) Lower 128-bytes addresses always refer to the same page
36c59adfc6SAlexander V. Chernikov  * 3) Upper address space may refer to different pages depending on
37c59adfc6SAlexander V. Chernikov  *   "page select" byte value.
38c59adfc6SAlexander V. Chernikov  *
39c59adfc6SAlexander V. Chernikov  * Map description:
40c59adfc6SAlexander V. Chernikov  *
41c59adfc6SAlexander V. Chernikov  * Serial address 0xA02:
42c59adfc6SAlexander V. Chernikov  *
43c59adfc6SAlexander V. Chernikov  * Lower bits
44c59adfc6SAlexander V. Chernikov  * 0-127   Monitoring data & page select byte
45c59adfc6SAlexander V. Chernikov  * 128-255:
46c59adfc6SAlexander V. Chernikov  *
47c59adfc6SAlexander V. Chernikov  * Page 00:
48c59adfc6SAlexander V. Chernikov  * 128-191 Base ID Fields
49c59adfc6SAlexander V. Chernikov  * 191-223 Extended ID
50c59adfc6SAlexander V. Chernikov  * 223-255 Vendor Specific ID
51c59adfc6SAlexander V. Chernikov  *
52c59adfc6SAlexander V. Chernikov  * Page 01 (optional):
53c59adfc6SAlexander V. Chernikov  * 128-255 App-specific data
54c59adfc6SAlexander V. Chernikov  *
55c59adfc6SAlexander V. Chernikov  * Page 02 (optional):
56c59adfc6SAlexander V. Chernikov  * 128-255 User EEPROM Data
57c59adfc6SAlexander V. Chernikov  *
58c59adfc6SAlexander V. Chernikov  * Page 03 (optional for Cable Assmeblies)
59c59adfc6SAlexander V. Chernikov  * 128-223 Thresholds
60c59adfc6SAlexander V. Chernikov  * 225-237 Vendor Specific
61c59adfc6SAlexander V. Chernikov  * 238-253 Channel Controls/Monitor
62c59adfc6SAlexander V. Chernikov  * 254-255 Reserverd
63c59adfc6SAlexander V. Chernikov  *
64c59adfc6SAlexander V. Chernikov  * All these values are read across an I2C (i squared C) bus.
65c59adfc6SAlexander V. Chernikov  */
66c59adfc6SAlexander V. Chernikov 
67c59adfc6SAlexander V. Chernikov #define	SFF_8436_BASE	0xA0	/* Base address for all requests */
68c59adfc6SAlexander V. Chernikov 
69c59adfc6SAlexander V. Chernikov /* Table 17 - Lower Memory Map */
70c59adfc6SAlexander V. Chernikov enum {
71c59adfc6SAlexander V. Chernikov 	SFF_8436_MID		= 0,	/* Copy of SFF_8436_ID field */
72c59adfc6SAlexander V. Chernikov 	SFF_8436_STATUS		= 1,	/* 2-bytes status (Table 18) */
73c59adfc6SAlexander V. Chernikov 	SFF_8436_INTR_START	= 3,	/* Interrupt flags (Tables 19-21) */
74c59adfc6SAlexander V. Chernikov 	SFF_8436_INTR_END	= 21,
75c59adfc6SAlexander V. Chernikov 	SFF_8436_MODMON_START	= 22,	/* Module monitors (Table 22 */
76c59adfc6SAlexander V. Chernikov 	SFF_8436_TEMP		= 22,	/* Internally measured module temp */
77c59adfc6SAlexander V. Chernikov 	SFF_8436_VCC		= 26,	/* Internally mesasure module
78c59adfc6SAlexander V. Chernikov 					* supplied voltage */
79c59adfc6SAlexander V. Chernikov 	SFF_8436_MODMON_END	= 33,
80c59adfc6SAlexander V. Chernikov 	SFF_8436_CHMON_START	= 34,	/* Channel monitors (Table 23) */
81c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH1_MSB	= 34,	/* Internally measured RX input power */
82c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH1_LSB	= 35,	/* for channel 1 */
83c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH2_MSB	= 36,	/* Internally measured RX input power */
84c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH2_LSB	= 37,	/* for channel 2 */
85c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH3_MSB	= 38,	/* Internally measured RX input power */
86c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH3_LSB	= 39,	/* for channel 3 */
87c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH4_MSB	= 40,	/* Internally measured RX input power */
88c59adfc6SAlexander V. Chernikov 	SFF_8436_RX_CH4_LSB	= 41,	/* for channel 4 */
89c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH1_MSB	= 42,	/* Internally measured TX bias */
90c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH1_LSB	= 43,	/* for channel 1 */
91c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH2_MSB	= 44,	/* Internally measured TX bias */
92c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH2_LSB	= 45,	/* for channel 2 */
93c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH3_MSB	= 46,	/* Internally measured TX bias */
94c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH3_LSB	= 47,	/* for channel 3 */
95c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH4_MSB	= 48,	/* Internally measured TX bias */
96c59adfc6SAlexander V. Chernikov 	SFF_8436_TX_CH4_LSB	= 49,	/* for channel 4 */
97c59adfc6SAlexander V. Chernikov 	SFF_8436_CHANMON_END	= 81,
98c59adfc6SAlexander V. Chernikov 	SFF_8436_CONTROL_START	= 86,	/* Control (Table 24) */
99c59adfc6SAlexander V. Chernikov 	SFF_8436_CONTROL_END	= 97,
100c59adfc6SAlexander V. Chernikov 	SFF_8436_MASKS_START	= 100,	/* Module/channel masks (Table 25) */
101c59adfc6SAlexander V. Chernikov 	SFF_8436_MASKS_END	= 106,
102c59adfc6SAlexander V. Chernikov 	SFF_8436_CHPASSWORD	= 119,	/* Password change entry (4 bytes) */
103c59adfc6SAlexander V. Chernikov 	SFF_8436_PASSWORD	= 123,	/* Password entry area (4 bytes) */
104c59adfc6SAlexander V. Chernikov 	SFF_8436_PAGESEL	= 127,	/* Page select byte */
105c59adfc6SAlexander V. Chernikov };
106c59adfc6SAlexander V. Chernikov 
107c59adfc6SAlexander V. Chernikov /* Table 18 - Status Indicators bits */
108c59adfc6SAlexander V. Chernikov /* Byte 1: all bits reserved */
109c59adfc6SAlexander V. Chernikov 
110c59adfc6SAlexander V. Chernikov /* Byte 2 bits */
111c59adfc6SAlexander V. Chernikov #define	SFF_8436_STATUS_FLATMEM	(1 << 2)	/* Upper memory flat or paged
112c59adfc6SAlexander V. Chernikov 						* 0 = paging, 1=Page 0 only */
113c59adfc6SAlexander V. Chernikov #define	SFF_8436_STATUS_INTL	(1 << 1)	/* Digital state of the intL
114c59adfc6SAlexander V. Chernikov 						* Interrupt output pin */
115c59adfc6SAlexander V. Chernikov #define	SFF_8436_STATUS_NOTREADY 1		/* Module has not yet achieved
116c59adfc6SAlexander V. Chernikov 						* power up and memory data is not
117c59adfc6SAlexander V. Chernikov 						* ready. 0=data is ready */
118c59adfc6SAlexander V. Chernikov /*
119c59adfc6SAlexander V. Chernikov  * Upper page 0 definitions:
120c59adfc6SAlexander V. Chernikov  * Table 29 - Serial ID: Data fields.
121c59adfc6SAlexander V. Chernikov  *
122c59adfc6SAlexander V. Chernikov  * Note that this table is mostly the same as used in SFF-8472.
123c59adfc6SAlexander V. Chernikov  * The only differenee is address shift: +128 bytes.
124c59adfc6SAlexander V. Chernikov  */
125c59adfc6SAlexander V. Chernikov enum {
126c59adfc6SAlexander V. Chernikov 	SFF_8436_ID		= 128,  /* Module Type (defined in sff8472.h) */
127c59adfc6SAlexander V. Chernikov 	SFF_8436_EXT_ID		= 129,  /* Extended transceiver type
128c59adfc6SAlexander V. Chernikov 					 * (Table 31) */
129c59adfc6SAlexander V. Chernikov 	SFF_8436_CONNECTOR	= 130,  /* Connector type (Table 32) */
130c59adfc6SAlexander V. Chernikov 	SFF_8436_TRANS_START	= 131,  /* Electric or Optical Compatibility
131c59adfc6SAlexander V. Chernikov 					 * (Table 33) */
132*a18742e9SAlexander V. Chernikov 	SFF_8436_CODE_E1040100G	= 131,	/* 10/40/100G Ethernet Compliance Code */
133c59adfc6SAlexander V. Chernikov 	SFF_8436_CODE_SONET	= 132,	/* SONET Compliance codes */
134c59adfc6SAlexander V. Chernikov 	SFF_8436_CODE_SATA	= 133,	/* SAS/SATA compliance codes */
135c59adfc6SAlexander V. Chernikov 	SFF_8436_CODE_E1G	= 134,	/* Gigabit Ethernet Compliant codes */
136c59adfc6SAlexander V. Chernikov 	SFF_8436_CODE_FC_START	= 135,	/* FC link/media/speed */
137c59adfc6SAlexander V. Chernikov 	SFF_8436_CODE_FC_END	= 138,
138c59adfc6SAlexander V. Chernikov 	SFF_8436_TRANS_END	= 138,
139c59adfc6SAlexander V. Chernikov 	SFF_8436_ENCODING	= 139,	/* Encoding Code for high speed
140c59adfc6SAlexander V. Chernikov 					* serial encoding algorithm (see
141c59adfc6SAlexander V. Chernikov 					* Table 34) */
142c59adfc6SAlexander V. Chernikov 	SFF_8436_BITRATE	= 140,	/* Nominal signaling rate, units
143c59adfc6SAlexander V. Chernikov 					* of 100MBd. */
144c59adfc6SAlexander V. Chernikov 	SFF_8436_RATEID		= 141,	/* Extended RateSelect Compliance
145c59adfc6SAlexander V. Chernikov 					* (see Table 35) */
146c59adfc6SAlexander V. Chernikov 	SFF_8436_LEN_SMF_KM	= 142,	/* Link length supported for single
147c59adfc6SAlexander V. Chernikov 					* mode fiber, units of km */
148c59adfc6SAlexander V. Chernikov 	SFF_8436_LEN_OM3	= 143,	/* Link length supported for 850nm
149c59adfc6SAlexander V. Chernikov 					* 50um multimode fiber, units of 2 m */
150c59adfc6SAlexander V. Chernikov 	SFF_8436_LEN_OM2	= 144, 	/* Link length supported for 50 um
151c59adfc6SAlexander V. Chernikov 					* OM2 fiber, units of 1 m */
152c59adfc6SAlexander V. Chernikov 	SFF_8436_LEN_OM1	= 145,	/* Link length supported for 1310 nm
153c59adfc6SAlexander V. Chernikov 					 * 50um multi-mode fiber, units of 1m*/
154c59adfc6SAlexander V. Chernikov 	SFF_8436_LEN_ASM	= 144, /* Link length of passive cable assembly
155c59adfc6SAlexander V. Chernikov 					* Length is specified as in the INF
156c59adfc6SAlexander V. Chernikov 					* 8074, units of 1m. 0 means this is
157c59adfc6SAlexander V. Chernikov 					* not value assembly. Value of 255
158c59adfc6SAlexander V. Chernikov 					* means thet the Module supports length
159c59adfc6SAlexander V. Chernikov 					* greater than 254 m. */
160c59adfc6SAlexander V. Chernikov 	SFF_8436_DEV_TECH	= 147,	/* Device/transmitter technology,
161c59adfc6SAlexander V. Chernikov 					* see Table 36/37 */
162c59adfc6SAlexander V. Chernikov 	SFF_8436_VENDOR_START	= 148,	/* Vendor name, 16 bytes, padded
163c59adfc6SAlexander V. Chernikov 					* right with 0x20 */
164c59adfc6SAlexander V. Chernikov 	SFF_8436_VENDOR_END	= 163,
165c59adfc6SAlexander V. Chernikov 	SFF_8436_EXTMODCODE	= 164,	/* Extended module code, Table 164 */
166c59adfc6SAlexander V. Chernikov 	SFF_8436_VENDOR_OUI_START	= 165 , /* Vendor OUI SFP vendor IEEE
167c59adfc6SAlexander V. Chernikov 					* company ID */
168c59adfc6SAlexander V. Chernikov 	SFF_8436_VENDOR_OUI_END	= 167,
169c59adfc6SAlexander V. Chernikov 	SFF_8436_PN_START 	= 168,	/* Vendor PN, padded right with 0x20 */
170c59adfc6SAlexander V. Chernikov 	SFF_8436_PN_END 	= 183,
171c59adfc6SAlexander V. Chernikov 	SFF_8436_REV_START 	= 184,	/* Vendor Revision, padded right 0x20 */
172c59adfc6SAlexander V. Chernikov 	SFF_8436_REV_END 	= 185,
173c59adfc6SAlexander V. Chernikov 	SFF_8436_WAVELEN_START	= 186,	/* Wavelength Laser wavelength
174c59adfc6SAlexander V. Chernikov 					* (Passive/Active Cable
175c59adfc6SAlexander V. Chernikov 					* Specification Compliance) */
176c59adfc6SAlexander V. Chernikov 	SFF_8436_WAVELEN_END	= 189,
177c59adfc6SAlexander V. Chernikov 	SFF_8436_MAX_CASE_TEMP	= 190,	/* Allows to specify maximum temp
178c59adfc6SAlexander V. Chernikov 					* above 70C. Maximum case temperature is
179c59adfc6SAlexander V. Chernikov 					* an 8-bit value in Degrees C. A value
180c59adfc6SAlexander V. Chernikov 					*of 0 implies the standard 70C rating.*/
181c59adfc6SAlexander V. Chernikov 	SFF_8436_CC_BASE	= 191,	/* CC_BASE Check code for Base ID
182c59adfc6SAlexander V. Chernikov 					* Fields (first 63 bytes) */
183c59adfc6SAlexander V. Chernikov 	/* Extended ID fields */
184c59adfc6SAlexander V. Chernikov 	SFF_8436_OPTIONS_START	= 192, /* Options Indicates which optional
185c59adfc6SAlexander V. Chernikov 					* transceiver signals are
186c59adfc6SAlexander V. Chernikov 					* implemented (see Table 39) */
187c59adfc6SAlexander V. Chernikov 	SFF_8436_OPTIONS_END	= 195,
188c59adfc6SAlexander V. Chernikov 	SFF_8436_SN_START 	= 196,	/* Vendor SN, riwght padded with 0x20 */
189c59adfc6SAlexander V. Chernikov 	SFF_8436_SN_END 	= 211,
190c59adfc6SAlexander V. Chernikov 	SFF_8436_DATE_START	= 212,	/* Vendor’s manufacturing date code
191c59adfc6SAlexander V. Chernikov 					* (see Table 40) */
192c59adfc6SAlexander V. Chernikov 	SFF_8436_DATE_END	= 219,
193c59adfc6SAlexander V. Chernikov 	SFF_8436_DIAG_TYPE	= 220,	/* Diagnostic Monitoring Type
194c59adfc6SAlexander V. Chernikov 					* Indicates which type of
195c59adfc6SAlexander V. Chernikov 					* diagnostic monitoring is
196c59adfc6SAlexander V. Chernikov 					* implemented (if any) in the
197c59adfc6SAlexander V. Chernikov 					* transceiver (see Table 41) */
198c59adfc6SAlexander V. Chernikov 
199c59adfc6SAlexander V. Chernikov 	SFF_8436_ENHANCED	= 221,	/* Enhanced Options Indicates which
200c59adfc6SAlexander V. Chernikov 					* optional features are implemented
201c59adfc6SAlexander V. Chernikov 					* (if any) in the transceiver
202c59adfc6SAlexander V. Chernikov 					* (see Table 42) */
2035446b3f1SAlexander V. Chernikov 	SFF_8636_BITRATE	= 222,	/* Nominal bit rate per channel, units
2045446b3f1SAlexander V. Chernikov 					* of 250 Mbps */
2055446b3f1SAlexander V. Chernikov 	SFF_8436_CC_EXT		= 223,	/* Check code for the Extended ID
206c59adfc6SAlexander V. Chernikov 					* Fields (bytes 192-222 incl) */
207c59adfc6SAlexander V. Chernikov 	SFF_8436_VENDOR_RSRVD_START	= 224,
208c59adfc6SAlexander V. Chernikov 	SFF_8436_VENDOR_RSRVD_END	= 255,
209c59adfc6SAlexander V. Chernikov };
210