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