xref: /freebsd/sys/net/sff8472.h (revision 4fe3b90bd33fe6dfb4da5d555af763aeb166cdc9)
1*4fe3b90bSGeorge V. Neville-Neil /*-
2*4fe3b90bSGeorge V. Neville-Neil  * Copyright (c) 2013 George V. Neville-Neil
3*4fe3b90bSGeorge V. Neville-Neil  * All rights reserved.
4*4fe3b90bSGeorge V. Neville-Neil  *
5*4fe3b90bSGeorge V. Neville-Neil  * Redistribution and use in source and binary forms, with or without
6*4fe3b90bSGeorge V. Neville-Neil  * modification, are permitted provided that the following conditions
7*4fe3b90bSGeorge V. Neville-Neil  * are met:
8*4fe3b90bSGeorge V. Neville-Neil  * 1. Redistributions of source code must retain the above copyright
9*4fe3b90bSGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer.
10*4fe3b90bSGeorge V. Neville-Neil  * 2. Redistributions in binary form must reproduce the above copyright
11*4fe3b90bSGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer in the
12*4fe3b90bSGeorge V. Neville-Neil  *    documentation and/or other materials provided with the distribution.
13*4fe3b90bSGeorge V. Neville-Neil  *
14*4fe3b90bSGeorge V. Neville-Neil  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*4fe3b90bSGeorge V. Neville-Neil  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*4fe3b90bSGeorge V. Neville-Neil  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*4fe3b90bSGeorge V. Neville-Neil  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*4fe3b90bSGeorge V. Neville-Neil  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*4fe3b90bSGeorge V. Neville-Neil  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*4fe3b90bSGeorge V. Neville-Neil  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*4fe3b90bSGeorge V. Neville-Neil  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*4fe3b90bSGeorge V. Neville-Neil  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*4fe3b90bSGeorge V. Neville-Neil  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*4fe3b90bSGeorge V. Neville-Neil  * SUCH DAMAGE.
25*4fe3b90bSGeorge V. Neville-Neil  *
26*4fe3b90bSGeorge V. Neville-Neil  * $FreeBSD$
27*4fe3b90bSGeorge V. Neville-Neil  */
28*4fe3b90bSGeorge V. Neville-Neil 
29*4fe3b90bSGeorge V. Neville-Neil /*
30*4fe3b90bSGeorge V. Neville-Neil  * The following set of constants are from Document SFF-8472
31*4fe3b90bSGeorge V. Neville-Neil  * "Diagnostic Monitoring Interface for Optical Transceivers" revision
32*4fe3b90bSGeorge V. Neville-Neil  * 11.3 published by the SFF Committee on June 11, 2013
33*4fe3b90bSGeorge V. Neville-Neil  *
34*4fe3b90bSGeorge V. Neville-Neil  * The SFF standard defines two ranges of addresses, each 255 bytes
35*4fe3b90bSGeorge V. Neville-Neil  * long for the storage of data and diagnostics on cables, such as
36*4fe3b90bSGeorge V. Neville-Neil  * SFP+ optics and TwinAx cables.  The ranges are defined in the
37*4fe3b90bSGeorge V. Neville-Neil  * following way:
38*4fe3b90bSGeorge V. Neville-Neil  *
39*4fe3b90bSGeorge V. Neville-Neil  * Base Address 0xa0 (Identification Data)
40*4fe3b90bSGeorge V. Neville-Neil  * 0-95    Serial ID Defined by SFP MSA
41*4fe3b90bSGeorge V. Neville-Neil  * 96-127  Vendor Specific Data
42*4fe3b90bSGeorge V. Neville-Neil  * 128-255 Reserved
43*4fe3b90bSGeorge V. Neville-Neil  *
44*4fe3b90bSGeorge V. Neville-Neil  * Base Address 0xa2 (Diagnostic Data)
45*4fe3b90bSGeorge V. Neville-Neil  * 0-55    Alarm and Warning Thresholds
46*4fe3b90bSGeorge V. Neville-Neil  * 56-95   Cal Constants
47*4fe3b90bSGeorge V. Neville-Neil  * 96-119  Real Time Diagnostic Interface
48*4fe3b90bSGeorge V. Neville-Neil  * 120-127 Vendor Specific
49*4fe3b90bSGeorge V. Neville-Neil  * 128-247 User Writable EEPROM
50*4fe3b90bSGeorge V. Neville-Neil  * 248-255 Vendor Specific
51*4fe3b90bSGeorge V. Neville-Neil  *
52*4fe3b90bSGeorge V. Neville-Neil  * Note that not all addresses are supported.  Where support is
53*4fe3b90bSGeorge V. Neville-Neil  * optional this is noted and instructions for checking for the
54*4fe3b90bSGeorge V. Neville-Neil  * support are supplied.
55*4fe3b90bSGeorge V. Neville-Neil  *
56*4fe3b90bSGeorge V. Neville-Neil  * All these values are read across an I2C (i squared C) bus.  Any
57*4fe3b90bSGeorge V. Neville-Neil  * device wishing to read these addresses must first have support for
58*4fe3b90bSGeorge V. Neville-Neil  * i2c calls.  The Chelsio T4/T5 driver (dev/cxgbe) is one such
59*4fe3b90bSGeorge V. Neville-Neil  * driver.
60*4fe3b90bSGeorge V. Neville-Neil  */
61*4fe3b90bSGeorge V. Neville-Neil 
62*4fe3b90bSGeorge V. Neville-Neil 
63*4fe3b90bSGeorge V. Neville-Neil /* Table 3.1 Two-wire interface ID: Data Fields */
64*4fe3b90bSGeorge V. Neville-Neil 
65*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BASE 		0xa0   /* Base address for all our queries. */
66*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID		0  /* Transceiver Type (Table 3.2) */
67*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_EXT_ID		1  /* Extended transceiver type (Table 3.3) */
68*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_CONNECTOR	2  /* Connector type (Table 3.4) */
69*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TRANS_START	3  /* Elec or Optical Compatibility
70*4fe3b90bSGeorge V. Neville-Neil 				    * (Table 3.5) */
71*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TRANS_END	10
72*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ENCODING	11 /* Encoding Code for high speed
73*4fe3b90bSGeorge V. Neville-Neil 				    * serial encoding algorithm (see
74*4fe3b90bSGeorge V. Neville-Neil 				    * Table 3.6) */
75*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BITRATE	12 /* Nominal signaling rate, units
76*4fe3b90bSGeorge V. Neville-Neil 				    *  of 100MBd.  (see details for
77*4fe3b90bSGeorge V. Neville-Neil 				    *  rates > 25.0Gb/s) */
78*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RATEID		13 /* Type of rate select
79*4fe3b90bSGeorge V. Neville-Neil 				    * functionality (see Table
80*4fe3b90bSGeorge V. Neville-Neil 				    * 3.6a) */
81*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_LEN_SMF_KM	14 /* Link length supported for single
82*4fe3b90bSGeorge V. Neville-Neil 				    * mode fiber, units of km */
83*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_LEN_SMF	15 /* Link length supported for single
84*4fe3b90bSGeorge V. Neville-Neil 				    * mode fiber, units of 100 m */
85*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_LEN_50UM	16 /* Link length supported for 50 um
86*4fe3b90bSGeorge V. Neville-Neil 				    * OM2 fiber, units of 10 m */
87*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_LEN_625UM	17 /* Link length supported for 62.5
88*4fe3b90bSGeorge V. Neville-Neil 				    * um OM1 fiber, units of 10 m */
89*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_LEN_OM4	18 /* Link length supported for 50um
90*4fe3b90bSGeorge V. Neville-Neil 				    * OM4 fiber, units of 10m.
91*4fe3b90bSGeorge V. Neville-Neil 				    * Alternatively copper or direct
92*4fe3b90bSGeorge V. Neville-Neil 				    * attach cable, units of m */
93*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_LEN_OM3	19 /* Link length supported for 50 um OM3 fiber, units of 10 m */
94*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VENDOR_START 	20 /* Vendor name [Address A0h, Bytes
95*4fe3b90bSGeorge V. Neville-Neil 				    * 20-35] */
96*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VENDOR_END 	35
97*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TRANS		36 /* Transceiver Code for electronic
98*4fe3b90bSGeorge V. Neville-Neil 				    * or optical compatibility (see
99*4fe3b90bSGeorge V. Neville-Neil 				    * Table 3.5) */
100*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VENDOR_OUI_START	37 /* Vendor OUI SFP vendor IEEE
101*4fe3b90bSGeorge V. Neville-Neil 				    * company ID */
102*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VENDOR_OUI_END	39
103*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_PN_START 	40 /* Vendor PN */
104*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_PN_END 	55
105*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_REV_START 	56 /* Vendor Revision */
106*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_REV_END 	59
107*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_WAVELEN_START	60 /* Wavelength Laser wavelength
108*4fe3b90bSGeorge V. Neville-Neil 				    * (Passive/Active Cable
109*4fe3b90bSGeorge V. Neville-Neil 				    * Specification Compliance) */
110*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_WAVELEN_END	61
111*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_CC_BASE	63 /* CC_BASE Check code for Base ID
112*4fe3b90bSGeorge V. Neville-Neil 				    * Fields (addresses 0 to 62) */
113*4fe3b90bSGeorge V. Neville-Neil 
114*4fe3b90bSGeorge V. Neville-Neil /*
115*4fe3b90bSGeorge V. Neville-Neil  * Extension Fields (optional) check the options before reading other
116*4fe3b90bSGeorge V. Neville-Neil  * addresses.
117*4fe3b90bSGeorge V. Neville-Neil  */
118*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_OPTIONS_MSB	64 /* Options Indicates which optional
119*4fe3b90bSGeorge V. Neville-Neil 				    * transceiver signals are
120*4fe3b90bSGeorge V. Neville-Neil 				    * implemented */
121*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_OPTIONS_LSB	65 /* (see Table 3.7) */
122*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BR_MAX		66 /* BR max Upper bit rate margin,
123*4fe3b90bSGeorge V. Neville-Neil 				    * units of % (see details for
124*4fe3b90bSGeorge V. Neville-Neil 				    * rates > 25.0Gb/s) */
125*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BR_MIN		67 /* Lower bit rate margin, units of
126*4fe3b90bSGeorge V. Neville-Neil 				    * % (see details for rates >
127*4fe3b90bSGeorge V. Neville-Neil 				    * 25.0Gb/s) */
128*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_SN_START 	68 /* Vendor SN [Address A0h, Bytes 68-83] */
129*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_SN_END 	83
130*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DATE_START	84 /* Date code Vendor’s manufacturing
131*4fe3b90bSGeorge V. Neville-Neil 				    * date code (see Table 3.8) */
132*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DATE_END	91
133*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_TYPE	92 /* Diagnostic Monitoring Type
134*4fe3b90bSGeorge V. Neville-Neil 				    * Indicates which type of
135*4fe3b90bSGeorge V. Neville-Neil 				    * diagnostic monitoring is
136*4fe3b90bSGeorge V. Neville-Neil 				    * implemented (if any) in the
137*4fe3b90bSGeorge V. Neville-Neil 				    * transceiver (see Table 3.9)
138*4fe3b90bSGeorge V. Neville-Neil 				    */
139*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_IMPL	(1 << 6) /* Required to be 1 */
140*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_INTERNAL	(1 << 5) /* Internal measurements. */
141*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_EXTERNAL	(1 << 4) /* External measurements. */
142*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_POWER	(1 << 3) /* Power measurement type */
143*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_ADDR_CHG	(1 << 2) /* Address change required.
144*4fe3b90bSGeorge V. Neville-Neil 					  * See SFF-8472 doc. */
145*4fe3b90bSGeorge V. Neville-Neil 
146*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ENHANCED	93 /* Enhanced Options Indicates which
147*4fe3b90bSGeorge V. Neville-Neil 				    * optional enhanced features are
148*4fe3b90bSGeorge V. Neville-Neil 				    * implemented (if any) in the
149*4fe3b90bSGeorge V. Neville-Neil 				    * transceiver (see Table 3.10) */
150*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_COMPLIANCE	94 /* SFF-8472 Compliance Indicates
151*4fe3b90bSGeorge V. Neville-Neil 				    * which revision of SFF-8472 the
152*4fe3b90bSGeorge V. Neville-Neil 				    * transceiver complies with.  (see
153*4fe3b90bSGeorge V. Neville-Neil 				    * Table 3.12)*/
154*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_CC_EXT		95 /* Check code for the Extended ID
155*4fe3b90bSGeorge V. Neville-Neil 				    * Fields (addresses 64 to 94)
156*4fe3b90bSGeorge V. Neville-Neil 				    */
157*4fe3b90bSGeorge V. Neville-Neil 
158*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VENDOR_RSRVD_START	96
159*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VENDOR_RSRVD_END	127
160*4fe3b90bSGeorge V. Neville-Neil 
161*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RESERVED_START	128
162*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RESERVED_END	255
163*4fe3b90bSGeorge V. Neville-Neil 
164*4fe3b90bSGeorge V. Neville-Neil  /*
165*4fe3b90bSGeorge V. Neville-Neil   * Diagnostics are available at the two wire address 0xa2.  All
166*4fe3b90bSGeorge V. Neville-Neil   * diagnostics are OPTIONAL so you should check 0xa0 registers 92 to
167*4fe3b90bSGeorge V. Neville-Neil   * see which, if any are supported.
168*4fe3b90bSGeorge V. Neville-Neil   */
169*4fe3b90bSGeorge V. Neville-Neil 
170*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG 		0xa2  /* Base address for diagnostics. */
171*4fe3b90bSGeorge V. Neville-Neil 
172*4fe3b90bSGeorge V. Neville-Neil  /*
173*4fe3b90bSGeorge V. Neville-Neil   *  Table 3.15 Alarm and Warning Thresholds All values are 2 bytes
174*4fe3b90bSGeorge V. Neville-Neil   * and MUST be read in a single read operation starting at the MSB
175*4fe3b90bSGeorge V. Neville-Neil   */
176*4fe3b90bSGeorge V. Neville-Neil 
177*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_HIGH_ALM		0 /* Temp High Alarm  */
178*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_LOW_ALM		2 /* Temp Low Alarm */
179*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_HIGH_WARN		4 /* Temp High Warning */
180*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_LOW_WARN		6 /* Temp Low Warning */
181*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VOLTAGE_HIGH_ALM	8 /* Voltage High Alarm */
182*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VOLTAGE_LOW_ALM	10 /* Voltage Low Alarm */
183*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VOLTAGE_HIGH_WARN	12 /* Voltage High Warning */
184*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VOLTAGE_LOW_WARN	14 /* Voltage Low Warning */
185*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BIAS_HIGH_ALM		16 /* Bias High Alarm */
186*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BIAS_LOW_ALM		18 /* Bias Low Alarm */
187*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BIAS_HIGH_WARN		20 /* Bias High Warning */
188*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BIAS_LOW_WARN		22 /* Bias Low Warning */
189*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_POWER_HIGH_ALM	24 /* TX Power High Alarm */
190*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_POWER_LOW_ALM	26 /* TX Power Low Alarm */
191*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_POWER_HIGH_WARN	28 /* TX Power High Warning */
192*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_POWER_LOW_WARN	30 /* TX Power Low Warning */
193*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER_HIGH_ALM	32 /* RX Power High Alarm */
194*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER_LOW_ALM	34 /* RX Power Low Alarm */
195*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER_HIGH_WARN	36 /* RX Power High Warning */
196*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER_LOW_WARN	38 /* RX Power Low Warning */
197*4fe3b90bSGeorge V. Neville-Neil 
198*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER4	56 /* Rx_PWR(4) Single precision
199*4fe3b90bSGeorge V. Neville-Neil 				    *  floating point calibration data
200*4fe3b90bSGeorge V. Neville-Neil 				    *  - Rx optical power. Bit 7 of
201*4fe3b90bSGeorge V. Neville-Neil 				    *  byte 56 is MSB. Bit 0 of byte
202*4fe3b90bSGeorge V. Neville-Neil 				    *  59 is LSB. Rx_PWR(4) should be
203*4fe3b90bSGeorge V. Neville-Neil 				    *  set to zero for “internally
204*4fe3b90bSGeorge V. Neville-Neil 				    *  calibrated” devices. */
205*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER3	60 /* Rx_PWR(3) Single precision
206*4fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data
207*4fe3b90bSGeorge V. Neville-Neil 				    * - Rx optical power.  Bit 7 of
208*4fe3b90bSGeorge V. Neville-Neil 				    * byte 60 is MSB. Bit 0 of byte 63
209*4fe3b90bSGeorge V. Neville-Neil 				    * is LSB. Rx_PWR(3) should be set
210*4fe3b90bSGeorge V. Neville-Neil 				    * to zero for “internally
211*4fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices.*/
212*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER2	64 /* Rx_PWR(2) Single precision
213*4fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data,
214*4fe3b90bSGeorge V. Neville-Neil 				    * Rx optical power.  Bit 7 of byte
215*4fe3b90bSGeorge V. Neville-Neil 				    * 64 is MSB, bit 0 of byte 67 is
216*4fe3b90bSGeorge V. Neville-Neil 				    * LSB. Rx_PWR(2) should be set to
217*4fe3b90bSGeorge V. Neville-Neil 				    * zero for “internally calibrated”
218*4fe3b90bSGeorge V. Neville-Neil 				    * devices. */
219*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER1	68 /* Rx_PWR(1) Single precision
220*4fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data,
221*4fe3b90bSGeorge V. Neville-Neil 				    * Rx optical power. Bit 7 of byte
222*4fe3b90bSGeorge V. Neville-Neil 				    * 68 is MSB, bit 0 of byte 71 is
223*4fe3b90bSGeorge V. Neville-Neil 				    * LSB. Rx_PWR(1) should be set to
224*4fe3b90bSGeorge V. Neville-Neil 				    * 1 for “internally calibrated”
225*4fe3b90bSGeorge V. Neville-Neil 				    * devices. */
226*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER0	72 /* Rx_PWR(0) Single precision
227*4fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data,
228*4fe3b90bSGeorge V. Neville-Neil 				    * Rx optical power. Bit 7 of byte
229*4fe3b90bSGeorge V. Neville-Neil 				    * 72 is MSB, bit 0 of byte 75 is
230*4fe3b90bSGeorge V. Neville-Neil 				    * LSB. Rx_PWR(0) should be set to
231*4fe3b90bSGeorge V. Neville-Neil 				    * zero for “internally calibrated”
232*4fe3b90bSGeorge V. Neville-Neil 				    * devices. */
233*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_I_SLOPE	76 /* Tx_I(Slope) Fixed decimal
234*4fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
235*4fe3b90bSGeorge V. Neville-Neil 				    * laser bias current. Bit 7 of
236*4fe3b90bSGeorge V. Neville-Neil 				    * byte 76 is MSB, bit 0 of byte 77
237*4fe3b90bSGeorge V. Neville-Neil 				    * is LSB. Tx_I(Slope) should be
238*4fe3b90bSGeorge V. Neville-Neil 				    * set to 1 for “internally
239*4fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices. */
240*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_I_OFFSET	78 /* Tx_I(Offset) Fixed decimal
241*4fe3b90bSGeorge V. Neville-Neil 				    * (signed two’s complement)
242*4fe3b90bSGeorge V. Neville-Neil 				    * calibration data, laser bias
243*4fe3b90bSGeorge V. Neville-Neil 				    * current. Bit 7 of byte 78 is
244*4fe3b90bSGeorge V. Neville-Neil 				    * MSB, bit 0 of byte 79 is
245*4fe3b90bSGeorge V. Neville-Neil 				    * LSB. Tx_I(Offset) should be set
246*4fe3b90bSGeorge V. Neville-Neil 				    * to zero for “internally
247*4fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices. */
248*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_POWER_SLOPE	80 /* Tx_PWR(Slope) Fixed decimal
249*4fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
250*4fe3b90bSGeorge V. Neville-Neil 				    * transmitter coupled output
251*4fe3b90bSGeorge V. Neville-Neil 				    * power. Bit 7 of byte 80 is MSB,
252*4fe3b90bSGeorge V. Neville-Neil 				    * bit 0 of byte 81 is LSB.
253*4fe3b90bSGeorge V. Neville-Neil 				    * Tx_PWR(Slope) should be set to 1
254*4fe3b90bSGeorge V. Neville-Neil 				    * for “internally calibrated”
255*4fe3b90bSGeorge V. Neville-Neil 				    * devices. */
256*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_POWER_OFFSET	82 /* Tx_PWR(Offset) Fixed decimal
257*4fe3b90bSGeorge V. Neville-Neil 				    * (signed two’s complement)
258*4fe3b90bSGeorge V. Neville-Neil 				    * calibration data, transmitter
259*4fe3b90bSGeorge V. Neville-Neil 				    * coupled output power. Bit 7 of
260*4fe3b90bSGeorge V. Neville-Neil 				    * byte 82 is MSB, bit 0 of byte 83
261*4fe3b90bSGeorge V. Neville-Neil 				    * is LSB. Tx_PWR(Offset) should be
262*4fe3b90bSGeorge V. Neville-Neil 				    * set to zero for “internally
263*4fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices. */
264*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_T_SLOPE	84 /* T (Slope) Fixed decimal
265*4fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
266*4fe3b90bSGeorge V. Neville-Neil 				    * internal module temperature. Bit
267*4fe3b90bSGeorge V. Neville-Neil 				    * 7 of byte 84 is MSB, bit 0 of
268*4fe3b90bSGeorge V. Neville-Neil 				    * byte 85 is LSB.  T(Slope) should
269*4fe3b90bSGeorge V. Neville-Neil 				    * be set to 1 for “internally
270*4fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices. */
271*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_T_OFFSET	86 /* T (Offset) Fixed decimal (signed
272*4fe3b90bSGeorge V. Neville-Neil 				    * two’s complement) calibration
273*4fe3b90bSGeorge V. Neville-Neil 				    * data, internal module
274*4fe3b90bSGeorge V. Neville-Neil 				    * temperature. Bit 7 of byte 86 is
275*4fe3b90bSGeorge V. Neville-Neil 				    * MSB, bit 0 of byte 87 is LSB.
276*4fe3b90bSGeorge V. Neville-Neil 				    * T(Offset) should be set to zero
277*4fe3b90bSGeorge V. Neville-Neil 				    * for “internally calibrated”
278*4fe3b90bSGeorge V. Neville-Neil 				    * devices. */
279*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_V_SLOPE	88 /* V (Slope) Fixed decimal
280*4fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
281*4fe3b90bSGeorge V. Neville-Neil 				    * internal module supply
282*4fe3b90bSGeorge V. Neville-Neil 				    * voltage. Bit 7 of byte 88 is
283*4fe3b90bSGeorge V. Neville-Neil 				    * MSB, bit 0 of byte 89 is
284*4fe3b90bSGeorge V. Neville-Neil 				    * LSB. V(Slope) should be set to 1
285*4fe3b90bSGeorge V. Neville-Neil 				    * for “internally calibrated”
286*4fe3b90bSGeorge V. Neville-Neil 				    * devices. */
287*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_V_OFFSET	90 /* V (Offset) Fixed decimal (signed
288*4fe3b90bSGeorge V. Neville-Neil 				    * two’s complement) calibration
289*4fe3b90bSGeorge V. Neville-Neil 				    * data, internal module supply
290*4fe3b90bSGeorge V. Neville-Neil 				    * voltage. Bit 7 of byte 90 is
291*4fe3b90bSGeorge V. Neville-Neil 				    * MSB. Bit 0 of byte 91 is
292*4fe3b90bSGeorge V. Neville-Neil 				    * LSB. V(Offset) should be set to
293*4fe3b90bSGeorge V. Neville-Neil 				    * zero for “internally calibrated”
294*4fe3b90bSGeorge V. Neville-Neil 				    * devices. */
295*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_CHECKSUM	95 /* Checksum Byte 95 contains the
296*4fe3b90bSGeorge V. Neville-Neil 				    * low order 8 bits of the sum of
297*4fe3b90bSGeorge V. Neville-Neil 				    * bytes 0 – 94. */
298*4fe3b90bSGeorge V. Neville-Neil  /* Internal measurements. */
299*4fe3b90bSGeorge V. Neville-Neil 
300*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP	 	96 /* Internally measured module temperature. */
301*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VCC 		98 /* Internally measured supply
302*4fe3b90bSGeorge V. Neville-Neil 				    * voltage in transceiver.
303*4fe3b90bSGeorge V. Neville-Neil 				    */
304*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_BIAS	100 /* Internally measured TX Bias Current. */
305*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TX_POWER	102 /* Measured TX output power. */
306*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RX_POWER	104 /* Measured RX input power. */
307*4fe3b90bSGeorge V. Neville-Neil 
308*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS		110 /* See below */
309*4fe3b90bSGeorge V. Neville-Neil 
310*4fe3b90bSGeorge V. Neville-Neil  /* Status Bits Described */
311*4fe3b90bSGeorge V. Neville-Neil 
312*4fe3b90bSGeorge V. Neville-Neil /*
313*4fe3b90bSGeorge V. Neville-Neil  * TX Disable State Digital state of the TX Disable Input Pin. Updated
314*4fe3b90bSGeorge V. Neville-Neil  * within 100ms of change on pin.
315*4fe3b90bSGeorge V. Neville-Neil  */
316*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_TX_DISABLE  (1 << 7)
317*4fe3b90bSGeorge V. Neville-Neil 
318*4fe3b90bSGeorge V. Neville-Neil /*
319*4fe3b90bSGeorge V. Neville-Neil  * Select Read/write bit that allows software disable of
320*4fe3b90bSGeorge V. Neville-Neil  * laser. Writing ‘1’ disables laser. See Table 3.11 for
321*4fe3b90bSGeorge V. Neville-Neil  * enable/disable timing requirements. This bit is “OR”d with the hard
322*4fe3b90bSGeorge V. Neville-Neil  * TX_DISABLE pin value. Note, per SFP MSA TX_DISABLE pin is default
323*4fe3b90bSGeorge V. Neville-Neil  * enabled unless pulled low by hardware. If Soft TX Disable is not
324*4fe3b90bSGeorge V. Neville-Neil  * implemented, the transceiver ignores the value of this bit. Default
325*4fe3b90bSGeorge V. Neville-Neil  * power up value is zero/low.
326*4fe3b90bSGeorge V. Neville-Neil  */
327*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_SOFT_TX_DISABLE (1 << 6)
328*4fe3b90bSGeorge V. Neville-Neil 
329*4fe3b90bSGeorge V. Neville-Neil /*
330*4fe3b90bSGeorge V. Neville-Neil  * RS(1) State Digital state of SFP input pin AS(1) per SFF-8079 or
331*4fe3b90bSGeorge V. Neville-Neil  * RS(1) per SFF-8431. Updated within 100ms of change on pin. See A2h
332*4fe3b90bSGeorge V. Neville-Neil  * Byte 118, Bit 3 for Soft RS(1) Select control information.
333*4fe3b90bSGeorge V. Neville-Neil  */
334*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RS_STATE (1 << 5)
335*4fe3b90bSGeorge V. Neville-Neil 
336*4fe3b90bSGeorge V. Neville-Neil /*
337*4fe3b90bSGeorge V. Neville-Neil  * Rate_Select State [aka. “RS(0)”] Digital state of the SFP
338*4fe3b90bSGeorge V. Neville-Neil  * Rate_Select Input Pin. Updated within 100ms of change on pin. Note:
339*4fe3b90bSGeorge V. Neville-Neil  * This pin is also known as AS(0) in SFF-8079 and RS(0) in SFF-8431.
340*4fe3b90bSGeorge V. Neville-Neil  */
341*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_SELECT_STATE (1 << 4)
342*4fe3b90bSGeorge V. Neville-Neil 
343*4fe3b90bSGeorge V. Neville-Neil /*
344*4fe3b90bSGeorge V. Neville-Neil  * Read/write bit that allows software rate select control. Writing
345*4fe3b90bSGeorge V. Neville-Neil  * ‘1’ selects full bandwidth operation. This bit is “OR’d with the
346*4fe3b90bSGeorge V. Neville-Neil  * hard Rate_Select, AS(0) or RS(0) pin value. See Table 3.11 for
347*4fe3b90bSGeorge V. Neville-Neil  * timing requirements. Default at power up is logic zero/low. If Soft
348*4fe3b90bSGeorge V. Neville-Neil  * Rate Select is not implemented, the transceiver ignores the value
349*4fe3b90bSGeorge V. Neville-Neil  * of this bit. Note: Specific transceiver behaviors of this bit are
350*4fe3b90bSGeorge V. Neville-Neil  * identified in Table 3.6a and referenced documents. See Table 3.18a,
351*4fe3b90bSGeorge V. Neville-Neil  * byte 118, bit 3 for Soft RS(1) Select.
352*4fe3b90bSGeorge V. Neville-Neil  */
353*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_SOFT_RATE_SELECT (1 << 3)
354*4fe3b90bSGeorge V. Neville-Neil 
355*4fe3b90bSGeorge V. Neville-Neil /*
356*4fe3b90bSGeorge V. Neville-Neil  * TX Fault State Digital state of the TX Fault Output Pin. Updated
357*4fe3b90bSGeorge V. Neville-Neil  * within 100ms of change on pin.
358*4fe3b90bSGeorge V. Neville-Neil  */
359*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_TX_FAULT_STATE (1 << 2)
360*4fe3b90bSGeorge V. Neville-Neil 
361*4fe3b90bSGeorge V. Neville-Neil /*
362*4fe3b90bSGeorge V. Neville-Neil  * Digital state of the RX_LOS Output Pin. Updated within 100ms of
363*4fe3b90bSGeorge V. Neville-Neil  * change on pin.
364*4fe3b90bSGeorge V. Neville-Neil  */
365*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_RX_LOS (1 << 1)
366*4fe3b90bSGeorge V. Neville-Neil 
367*4fe3b90bSGeorge V. Neville-Neil /*
368*4fe3b90bSGeorge V. Neville-Neil  * Indicates transceiver has achieved power up and data is ready. Bit
369*4fe3b90bSGeorge V. Neville-Neil  * remains high until data is ready to be read at which time the
370*4fe3b90bSGeorge V. Neville-Neil  * device sets the bit low.
371*4fe3b90bSGeorge V. Neville-Neil  */
372*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_DATA_READY (1 << 0)
373*4fe3b90bSGeorge V. Neville-Neil 
374*4fe3b90bSGeorge V. Neville-Neil /* Table 3.2 Identifier values */
375*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_UNKNOWN	0x0 /* Unknown or unspecified */
376*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_GBIC	0x1 /* GBIC */
377*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_SFF		0x2 /* Module soldered to motherboard (ex: SFF)*/
378*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_SFP		0x3 /* SFP or SFP “Plus” */
379*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_XBI		0x4 /* Reserved for “300 pin XBI” devices */
380*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_XENPAK	0x5 /* Reserved for “Xenpak” devices */
381*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_XFP		0x6 /* Reserved for “XFP” devices */
382*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_XFF		0x7 /* Reserved for “XFF” devices */
383*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_XFPE	0x8 /* Reserved for “XFP-E” devices */
384*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_XPAK	0x9 /* Reserved for “XPak” devices */
385*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_X2		0xA /* Reserved for “X2” devices */
386*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_DWDM_SFP	0xB /* Reserved for “DWDM-SFP” devices */
387*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_QSFP	0xC /* Reserved for “QSFP” devices */
388*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_ID_LAST	SFF_8472_ID_QSFP
389*4fe3b90bSGeorge V. Neville-Neil 
390*4fe3b90bSGeorge V. Neville-Neil static char *sff_8472_id[SFF_8472_ID_LAST + 1] = {"Unknown",
391*4fe3b90bSGeorge V. Neville-Neil 					     "GBIC",
392*4fe3b90bSGeorge V. Neville-Neil 					     "SFF",
393*4fe3b90bSGeorge V. Neville-Neil 					     "SFP",
394*4fe3b90bSGeorge V. Neville-Neil 					     "XBI",
395*4fe3b90bSGeorge V. Neville-Neil 					     "Xenpak",
396*4fe3b90bSGeorge V. Neville-Neil 					     "XFP",
397*4fe3b90bSGeorge V. Neville-Neil 					     "XFF",
398*4fe3b90bSGeorge V. Neville-Neil 					     "XFP-E",
399*4fe3b90bSGeorge V. Neville-Neil 					     "XPak",
400*4fe3b90bSGeorge V. Neville-Neil 					     "X2",
401*4fe3b90bSGeorge V. Neville-Neil 					     "DWDM-SFP",
402*4fe3b90bSGeorge V. Neville-Neil 					     "QSFP"};
403*4fe3b90bSGeorge V. Neville-Neil 
404*4fe3b90bSGeorge V. Neville-Neil /* Table 3.13 and 3.14 Temperature Conversion Values */
405*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_SIGN (1 << 15)
406*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_SHIFT  8
407*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_MSK  0xEF00
408*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_FRAC 0x00FF
409*4fe3b90bSGeorge V. Neville-Neil 
410*4fe3b90bSGeorge V. Neville-Neil /* Internal Callibration Conversion factors */
411*4fe3b90bSGeorge V. Neville-Neil 
412*4fe3b90bSGeorge V. Neville-Neil /*
413*4fe3b90bSGeorge V. Neville-Neil  * Represented as a 16 bit unsigned integer with the voltage defined
414*4fe3b90bSGeorge V. Neville-Neil  * as the full 16 bit value (0 – 65535) with LSB equal to 100 uVolt,
415*4fe3b90bSGeorge V. Neville-Neil  * yielding a total range of 0 to +6.55 Volts.
416*4fe3b90bSGeorge V. Neville-Neil  */
417*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VCC_FACTOR 10000.0
418*4fe3b90bSGeorge V. Neville-Neil 
419*4fe3b90bSGeorge V. Neville-Neil /*
420*4fe3b90bSGeorge V. Neville-Neil  * Represented as a 16 bit unsigned integer with the current defined
421*4fe3b90bSGeorge V. Neville-Neil  * as the full 16 bit value (0 – 65535) with LSB equal to 2 uA,
422*4fe3b90bSGeorge V. Neville-Neil  * yielding a total range of 0 to 131 mA.
423*4fe3b90bSGeorge V. Neville-Neil  */
424*4fe3b90bSGeorge V. Neville-Neil 
425*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BIAS_FACTOR 2000.0
426*4fe3b90bSGeorge V. Neville-Neil 
427*4fe3b90bSGeorge V. Neville-Neil /*
428*4fe3b90bSGeorge V. Neville-Neil  * Represented as a 16 bit unsigned integer with the power defined as
429*4fe3b90bSGeorge V. Neville-Neil  * the full 16 bit value (0 – 65535) with LSB equal to 0.1 uW,
430*4fe3b90bSGeorge V. Neville-Neil  * yielding a total range of 0 to 6.5535 mW (~ -40 to +8.2 dBm).
431*4fe3b90bSGeorge V. Neville-Neil  */
432*4fe3b90bSGeorge V. Neville-Neil 
433*4fe3b90bSGeorge V. Neville-Neil #define SFF_8472_POWER_FACTOR 10000.0
434