xref: /freebsd/sys/net/sff8472.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
14fe3b90bSGeorge V. Neville-Neil /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3fe267a55SPedro F. Giffuni  *
44fe3b90bSGeorge V. Neville-Neil  * Copyright (c) 2013 George V. Neville-Neil
54fe3b90bSGeorge V. Neville-Neil  * All rights reserved.
64fe3b90bSGeorge V. Neville-Neil  *
74fe3b90bSGeorge V. Neville-Neil  * Redistribution and use in source and binary forms, with or without
84fe3b90bSGeorge V. Neville-Neil  * modification, are permitted provided that the following conditions
94fe3b90bSGeorge V. Neville-Neil  * are met:
104fe3b90bSGeorge V. Neville-Neil  * 1. Redistributions of source code must retain the above copyright
114fe3b90bSGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer.
124fe3b90bSGeorge V. Neville-Neil  * 2. Redistributions in binary form must reproduce the above copyright
134fe3b90bSGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer in the
144fe3b90bSGeorge V. Neville-Neil  *    documentation and/or other materials provided with the distribution.
154fe3b90bSGeorge V. Neville-Neil  *
164fe3b90bSGeorge V. Neville-Neil  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
174fe3b90bSGeorge V. Neville-Neil  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
184fe3b90bSGeorge V. Neville-Neil  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
194fe3b90bSGeorge V. Neville-Neil  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
204fe3b90bSGeorge V. Neville-Neil  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
214fe3b90bSGeorge V. Neville-Neil  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
224fe3b90bSGeorge V. Neville-Neil  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
234fe3b90bSGeorge V. Neville-Neil  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
244fe3b90bSGeorge V. Neville-Neil  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
254fe3b90bSGeorge V. Neville-Neil  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
264fe3b90bSGeorge V. Neville-Neil  * SUCH DAMAGE.
274fe3b90bSGeorge V. Neville-Neil  */
284fe3b90bSGeorge V. Neville-Neil 
294fe3b90bSGeorge V. Neville-Neil /*
304fe3b90bSGeorge V. Neville-Neil  * The following set of constants are from Document SFF-8472
314fe3b90bSGeorge V. Neville-Neil  * "Diagnostic Monitoring Interface for Optical Transceivers" revision
324fe3b90bSGeorge V. Neville-Neil  * 11.3 published by the SFF Committee on June 11, 2013
334fe3b90bSGeorge V. Neville-Neil  *
344fe3b90bSGeorge V. Neville-Neil  * The SFF standard defines two ranges of addresses, each 255 bytes
354fe3b90bSGeorge V. Neville-Neil  * long for the storage of data and diagnostics on cables, such as
364fe3b90bSGeorge V. Neville-Neil  * SFP+ optics and TwinAx cables.  The ranges are defined in the
374fe3b90bSGeorge V. Neville-Neil  * following way:
384fe3b90bSGeorge V. Neville-Neil  *
394fe3b90bSGeorge V. Neville-Neil  * Base Address 0xa0 (Identification Data)
404fe3b90bSGeorge V. Neville-Neil  * 0-95    Serial ID Defined by SFP MSA
414fe3b90bSGeorge V. Neville-Neil  * 96-127  Vendor Specific Data
424fe3b90bSGeorge V. Neville-Neil  * 128-255 Reserved
434fe3b90bSGeorge V. Neville-Neil  *
444fe3b90bSGeorge V. Neville-Neil  * Base Address 0xa2 (Diagnostic Data)
454fe3b90bSGeorge V. Neville-Neil  * 0-55    Alarm and Warning Thresholds
464fe3b90bSGeorge V. Neville-Neil  * 56-95   Cal Constants
474fe3b90bSGeorge V. Neville-Neil  * 96-119  Real Time Diagnostic Interface
484fe3b90bSGeorge V. Neville-Neil  * 120-127 Vendor Specific
494fe3b90bSGeorge V. Neville-Neil  * 128-247 User Writable EEPROM
504fe3b90bSGeorge V. Neville-Neil  * 248-255 Vendor Specific
514fe3b90bSGeorge V. Neville-Neil  *
524fe3b90bSGeorge V. Neville-Neil  * Note that not all addresses are supported.  Where support is
534fe3b90bSGeorge V. Neville-Neil  * optional this is noted and instructions for checking for the
544fe3b90bSGeorge V. Neville-Neil  * support are supplied.
554fe3b90bSGeorge V. Neville-Neil  *
564fe3b90bSGeorge V. Neville-Neil  * All these values are read across an I2C (i squared C) bus.  Any
574fe3b90bSGeorge V. Neville-Neil  * device wishing to read these addresses must first have support for
584fe3b90bSGeorge V. Neville-Neil  * i2c calls.  The Chelsio T4/T5 driver (dev/cxgbe) is one such
594fe3b90bSGeorge V. Neville-Neil  * driver.
604fe3b90bSGeorge V. Neville-Neil  */
614fe3b90bSGeorge V. Neville-Neil 
624fe3b90bSGeorge V. Neville-Neil /* Table 3.1 Two-wire interface ID: Data Fields */
634fe3b90bSGeorge V. Neville-Neil 
64d9168b01SGeorge V. Neville-Neil enum {
65d9168b01SGeorge V. Neville-Neil 	SFF_8472_BASE 		= 0xa0,   /* Base address for all our queries. */
66d9168b01SGeorge V. Neville-Neil 	SFF_8472_ID		= 0,  /* Transceiver Type (Table 3.2) */
67d9168b01SGeorge V. Neville-Neil 	SFF_8472_EXT_ID		= 1,  /* Extended transceiver type (Table 3.3) */
68d9168b01SGeorge V. Neville-Neil 	SFF_8472_CONNECTOR	= 2,  /* Connector type (Table 3.4) */
69d9168b01SGeorge V. Neville-Neil 	SFF_8472_TRANS_START	= 3,  /* Elec or Optical Compatibility
704fe3b90bSGeorge V. Neville-Neil 				    * (Table 3.5) */
71d9168b01SGeorge V. Neville-Neil 	SFF_8472_TRANS_END	= 10,
72d9168b01SGeorge V. Neville-Neil 	SFF_8472_ENCODING	= 11, /* Encoding Code for high speed
734fe3b90bSGeorge V. Neville-Neil 				     * serial encoding algorithm (see
744fe3b90bSGeorge V. Neville-Neil 				     * Table 3.6) */
75d9168b01SGeorge V. Neville-Neil 	SFF_8472_BITRATE	= 12, /* Nominal signaling rate, units
764fe3b90bSGeorge V. Neville-Neil 				     * of 100MBd.  (see details for
774fe3b90bSGeorge V. Neville-Neil 				     * rates > 25.0Gb/s) */
78d9168b01SGeorge V. Neville-Neil 	SFF_8472_RATEID		= 13, /* Type of rate select
794fe3b90bSGeorge V. Neville-Neil 				     * functionality (see Table
804fe3b90bSGeorge V. Neville-Neil 				     * 3.6a) */
81d9168b01SGeorge V. Neville-Neil 	SFF_8472_LEN_SMF_KM	= 14, /* Link length supported for single
824fe3b90bSGeorge V. Neville-Neil 				    * mode fiber, units of km */
83d9168b01SGeorge V. Neville-Neil 	SFF_8472_LEN_SMF	= 15, /* Link length supported for single
844fe3b90bSGeorge V. Neville-Neil 				    * mode fiber, units of 100 m */
85d9168b01SGeorge V. Neville-Neil 	SFF_8472_LEN_50UM	= 16, /* Link length supported for 50 um
864fe3b90bSGeorge V. Neville-Neil 				    * OM2 fiber, units of 10 m */
87d9168b01SGeorge V. Neville-Neil 	SFF_8472_LEN_625UM	= 17, /* Link length supported for 62.5
884fe3b90bSGeorge V. Neville-Neil 				    * um OM1 fiber, units of 10 m */
89d9168b01SGeorge V. Neville-Neil 	SFF_8472_LEN_OM4	= 18, /* Link length supported for 50um
904fe3b90bSGeorge V. Neville-Neil 				    * OM4 fiber, units of 10m.
914fe3b90bSGeorge V. Neville-Neil 				    * Alternatively copper or direct
924fe3b90bSGeorge V. Neville-Neil 				    * attach cable, units of m */
93d9168b01SGeorge V. Neville-Neil 	SFF_8472_LEN_OM3	= 19, /* Link length supported for 50 um OM3 fiber, units of 10 m */
94d9168b01SGeorge V. Neville-Neil 	SFF_8472_VENDOR_START 	= 20, /* Vendor name [Address A0h, Bytes
954fe3b90bSGeorge V. Neville-Neil 				    * 20-35] */
96d9168b01SGeorge V. Neville-Neil 	SFF_8472_VENDOR_END 	= 35,
97d9168b01SGeorge V. Neville-Neil 	SFF_8472_TRANS		= 36, /* Transceiver Code for electronic
984fe3b90bSGeorge V. Neville-Neil 				    * or optical compatibility (see
994fe3b90bSGeorge V. Neville-Neil 				    * Table 3.5) */
100d9168b01SGeorge V. Neville-Neil 	SFF_8472_VENDOR_OUI_START	= 37, /* Vendor OUI SFP vendor IEEE
1014fe3b90bSGeorge V. Neville-Neil 				    * company ID */
102d9168b01SGeorge V. Neville-Neil 	SFF_8472_VENDOR_OUI_END	= 39,
103d9168b01SGeorge V. Neville-Neil 	SFF_8472_PN_START 	= 40, /* Vendor PN */
104d9168b01SGeorge V. Neville-Neil 	SFF_8472_PN_END 	= 55,
105d9168b01SGeorge V. Neville-Neil 	SFF_8472_REV_START 	= 56, /* Vendor Revision */
106d9168b01SGeorge V. Neville-Neil 	SFF_8472_REV_END 	= 59,
107d9168b01SGeorge V. Neville-Neil 	SFF_8472_WAVELEN_START	= 60, /* Wavelength Laser wavelength
1084fe3b90bSGeorge V. Neville-Neil 				    * (Passive/Active Cable
1094fe3b90bSGeorge V. Neville-Neil 				    * Specification Compliance) */
110d9168b01SGeorge V. Neville-Neil 	SFF_8472_WAVELEN_END	= 61,
111d9168b01SGeorge V. Neville-Neil 	SFF_8472_CC_BASE	= 63, /* CC_BASE Check code for Base ID
1124fe3b90bSGeorge V. Neville-Neil 				    * Fields (addresses 0 to 62) */
1134fe3b90bSGeorge V. Neville-Neil 
1144fe3b90bSGeorge V. Neville-Neil /*
1154fe3b90bSGeorge V. Neville-Neil  * Extension Fields (optional) check the options before reading other
1164fe3b90bSGeorge V. Neville-Neil  * addresses.
1174fe3b90bSGeorge V. Neville-Neil  */
118d9168b01SGeorge V. Neville-Neil 	SFF_8472_OPTIONS_MSB	= 64, /* Options Indicates which optional
1194fe3b90bSGeorge V. Neville-Neil 				    * transceiver signals are
1204fe3b90bSGeorge V. Neville-Neil 				    * implemented */
121d9168b01SGeorge V. Neville-Neil 	SFF_8472_OPTIONS_LSB	= 65, /* (see Table 3.7) */
122d9168b01SGeorge V. Neville-Neil 	SFF_8472_BR_MAX		= 66, /* BR max Upper bit rate margin,
1234fe3b90bSGeorge V. Neville-Neil 				    * units of % (see details for
1244fe3b90bSGeorge V. Neville-Neil 				    * rates > 25.0Gb/s) */
125d9168b01SGeorge V. Neville-Neil 	SFF_8472_BR_MIN		= 67, /* Lower bit rate margin, units of
1264fe3b90bSGeorge V. Neville-Neil 				    * % (see details for rates >
1274fe3b90bSGeorge V. Neville-Neil 				    * 25.0Gb/s) */
128d9168b01SGeorge V. Neville-Neil 	SFF_8472_SN_START 	= 68, /* Vendor SN [Address A0h, Bytes 68-83] */
129d9168b01SGeorge V. Neville-Neil 	SFF_8472_SN_END 	= 83,
130d9168b01SGeorge V. Neville-Neil 	SFF_8472_DATE_START	= 84, /* Date code Vendor’s manufacturing
1314fe3b90bSGeorge V. Neville-Neil 				    * date code (see Table 3.8) */
132d9168b01SGeorge V. Neville-Neil 	SFF_8472_DATE_END	= 91,
133d9168b01SGeorge V. Neville-Neil 	SFF_8472_DIAG_TYPE	= 92, /* Diagnostic Monitoring Type
1344fe3b90bSGeorge V. Neville-Neil 				    * Indicates which type of
1354fe3b90bSGeorge V. Neville-Neil 				    * diagnostic monitoring is
1364fe3b90bSGeorge V. Neville-Neil 				    * implemented (if any) in the
1374fe3b90bSGeorge V. Neville-Neil 				    * transceiver (see Table 3.9)
1384fe3b90bSGeorge V. Neville-Neil 				    */
139d9168b01SGeorge V. Neville-Neil 
140d9168b01SGeorge V. Neville-Neil 	SFF_8472_ENHANCED	= 93, /* Enhanced Options Indicates which
141d9168b01SGeorge V. Neville-Neil 				    * optional enhanced features are
142d9168b01SGeorge V. Neville-Neil 				    * implemented (if any) in the
143d9168b01SGeorge V. Neville-Neil 				    * transceiver (see Table 3.10) */
144d9168b01SGeorge V. Neville-Neil 	SFF_8472_COMPLIANCE	= 94, /* SFF-8472 Compliance Indicates
145d9168b01SGeorge V. Neville-Neil 				    * which revision of SFF-8472 the
146d9168b01SGeorge V. Neville-Neil 				    * transceiver complies with.  (see
147d9168b01SGeorge V. Neville-Neil 				    * Table 3.12)*/
148d9168b01SGeorge V. Neville-Neil 	SFF_8472_CC_EXT		= 95, /* Check code for the Extended ID
149d9168b01SGeorge V. Neville-Neil 				    * Fields (addresses 64 to 94)
150d9168b01SGeorge V. Neville-Neil 				    */
151d9168b01SGeorge V. Neville-Neil 
152d9168b01SGeorge V. Neville-Neil 	SFF_8472_VENDOR_RSRVD_START	= 96,
153d9168b01SGeorge V. Neville-Neil 	SFF_8472_VENDOR_RSRVD_END	= 127,
154d9168b01SGeorge V. Neville-Neil 
155d9168b01SGeorge V. Neville-Neil 	SFF_8472_RESERVED_START	= 128,
156d9168b01SGeorge V. Neville-Neil 	SFF_8472_RESERVED_END	= 255
157d9168b01SGeorge V. Neville-Neil };
158d9168b01SGeorge V. Neville-Neil 
1594fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_IMPL	(1 << 6) /* Required to be 1 */
1604fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_INTERNAL	(1 << 5) /* Internal measurements. */
1614fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_EXTERNAL	(1 << 4) /* External measurements. */
1624fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_POWER	(1 << 3) /* Power measurement type */
1634fe3b90bSGeorge V. Neville-Neil #define SFF_8472_DIAG_ADDR_CHG	(1 << 2) /* Address change required.
1644fe3b90bSGeorge V. Neville-Neil 					  * See SFF-8472 doc. */
1654fe3b90bSGeorge V. Neville-Neil 
1664fe3b90bSGeorge V. Neville-Neil  /*
1674fe3b90bSGeorge V. Neville-Neil   * Diagnostics are available at the two wire address 0xa2.  All
1684fe3b90bSGeorge V. Neville-Neil   * diagnostics are OPTIONAL so you should check 0xa0 registers 92 to
1694fe3b90bSGeorge V. Neville-Neil   * see which, if any are supported.
1704fe3b90bSGeorge V. Neville-Neil   */
1714fe3b90bSGeorge V. Neville-Neil 
172d9168b01SGeorge V. Neville-Neil enum {SFF_8472_DIAG = 0xa2};  /* Base address for diagnostics. */
1734fe3b90bSGeorge V. Neville-Neil 
1744fe3b90bSGeorge V. Neville-Neil  /*
1754fe3b90bSGeorge V. Neville-Neil   *  Table 3.15 Alarm and Warning Thresholds All values are 2 bytes
1764fe3b90bSGeorge V. Neville-Neil   * and MUST be read in a single read operation starting at the MSB
1774fe3b90bSGeorge V. Neville-Neil   */
1784fe3b90bSGeorge V. Neville-Neil 
179d9168b01SGeorge V. Neville-Neil enum {
180d9168b01SGeorge V. Neville-Neil 	SFF_8472_TEMP_HIGH_ALM		= 0, /* Temp High Alarm  */
181d9168b01SGeorge V. Neville-Neil 	SFF_8472_TEMP_LOW_ALM		= 2, /* Temp Low Alarm */
182d9168b01SGeorge V. Neville-Neil 	SFF_8472_TEMP_HIGH_WARN		= 4, /* Temp High Warning */
183d9168b01SGeorge V. Neville-Neil 	SFF_8472_TEMP_LOW_WARN		= 6, /* Temp Low Warning */
184d9168b01SGeorge V. Neville-Neil 	SFF_8472_VOLTAGE_HIGH_ALM	= 8, /* Voltage High Alarm */
185d9168b01SGeorge V. Neville-Neil 	SFF_8472_VOLTAGE_LOW_ALM	= 10, /* Voltage Low Alarm */
186d9168b01SGeorge V. Neville-Neil 	SFF_8472_VOLTAGE_HIGH_WARN	= 12, /* Voltage High Warning */
187d9168b01SGeorge V. Neville-Neil 	SFF_8472_VOLTAGE_LOW_WARN	= 14, /* Voltage Low Warning */
188d9168b01SGeorge V. Neville-Neil 	SFF_8472_BIAS_HIGH_ALM		= 16, /* Bias High Alarm */
189d9168b01SGeorge V. Neville-Neil 	SFF_8472_BIAS_LOW_ALM		= 18, /* Bias Low Alarm */
190d9168b01SGeorge V. Neville-Neil 	SFF_8472_BIAS_HIGH_WARN		= 20, /* Bias High Warning */
191d9168b01SGeorge V. Neville-Neil 	SFF_8472_BIAS_LOW_WARN		= 22, /* Bias Low Warning */
192d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_POWER_HIGH_ALM	= 24, /* TX Power High Alarm */
193d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_POWER_LOW_ALM	= 26, /* TX Power Low Alarm */
194d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_POWER_HIGH_WARN	= 28, /* TX Power High Warning */
195d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_POWER_LOW_WARN	= 30, /* TX Power Low Warning */
196d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER_HIGH_ALM	= 32, /* RX Power High Alarm */
197d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER_LOW_ALM	= 34, /* RX Power Low Alarm */
198d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER_HIGH_WARN	= 36, /* RX Power High Warning */
199d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER_LOW_WARN	= 38, /* RX Power Low Warning */
2004fe3b90bSGeorge V. Neville-Neil 
201d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER4	= 56, /* Rx_PWR(4) Single precision
2024fe3b90bSGeorge V. Neville-Neil 				    *  floating point calibration data
2034fe3b90bSGeorge V. Neville-Neil 				    *  - Rx optical power. Bit 7 of
2044fe3b90bSGeorge V. Neville-Neil 				    *  byte 56 is MSB. Bit 0 of byte
2054fe3b90bSGeorge V. Neville-Neil 				    *  59 is LSB. Rx_PWR(4) should be
2064fe3b90bSGeorge V. Neville-Neil 				    *  set to zero for “internally
2074fe3b90bSGeorge V. Neville-Neil 				    *  calibrated” devices. */
208d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER3	= 60, /* Rx_PWR(3) Single precision
2094fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data
2104fe3b90bSGeorge V. Neville-Neil 				    * - Rx optical power.  Bit 7 of
2114fe3b90bSGeorge V. Neville-Neil 				    * byte 60 is MSB. Bit 0 of byte 63
2124fe3b90bSGeorge V. Neville-Neil 				    * is LSB. Rx_PWR(3) should be set
2134fe3b90bSGeorge V. Neville-Neil 				    * to zero for “internally
2144fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices.*/
215d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER2	= 64, /* Rx_PWR(2) Single precision
2164fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data,
2174fe3b90bSGeorge V. Neville-Neil 				    * Rx optical power.  Bit 7 of byte
2184fe3b90bSGeorge V. Neville-Neil 				    * 64 is MSB, bit 0 of byte 67 is
2194fe3b90bSGeorge V. Neville-Neil 				    * LSB. Rx_PWR(2) should be set to
2204fe3b90bSGeorge V. Neville-Neil 				    * zero for “internally calibrated”
2214fe3b90bSGeorge V. Neville-Neil 				    * devices. */
222d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER1	= 68, /* Rx_PWR(1) Single precision
2234fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data,
2244fe3b90bSGeorge V. Neville-Neil 				    * Rx optical power. Bit 7 of byte
2254fe3b90bSGeorge V. Neville-Neil 				    * 68 is MSB, bit 0 of byte 71 is
2264fe3b90bSGeorge V. Neville-Neil 				    * LSB. Rx_PWR(1) should be set to
2274fe3b90bSGeorge V. Neville-Neil 				    * 1 for “internally calibrated”
2284fe3b90bSGeorge V. Neville-Neil 				    * devices. */
229d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER0	= 72, /* Rx_PWR(0) Single precision
2304fe3b90bSGeorge V. Neville-Neil 				    * floating point calibration data,
2314fe3b90bSGeorge V. Neville-Neil 				    * Rx optical power. Bit 7 of byte
2324fe3b90bSGeorge V. Neville-Neil 				    * 72 is MSB, bit 0 of byte 75 is
2334fe3b90bSGeorge V. Neville-Neil 				    * LSB. Rx_PWR(0) should be set to
2344fe3b90bSGeorge V. Neville-Neil 				    * zero for “internally calibrated”
2354fe3b90bSGeorge V. Neville-Neil 				    * devices. */
236d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_I_SLOPE	= 76, /* Tx_I(Slope) Fixed decimal
2374fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
2384fe3b90bSGeorge V. Neville-Neil 				    * laser bias current. Bit 7 of
2394fe3b90bSGeorge V. Neville-Neil 				    * byte 76 is MSB, bit 0 of byte 77
2404fe3b90bSGeorge V. Neville-Neil 				    * is LSB. Tx_I(Slope) should be
2414fe3b90bSGeorge V. Neville-Neil 				    * set to 1 for “internally
2424fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices. */
243d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_I_OFFSET	= 78, /* Tx_I(Offset) Fixed decimal
2444fe3b90bSGeorge V. Neville-Neil 				    * (signed two’s complement)
2454fe3b90bSGeorge V. Neville-Neil 				    * calibration data, laser bias
2464fe3b90bSGeorge V. Neville-Neil 				    * current. Bit 7 of byte 78 is
2474fe3b90bSGeorge V. Neville-Neil 				    * MSB, bit 0 of byte 79 is
2484fe3b90bSGeorge V. Neville-Neil 				    * LSB. Tx_I(Offset) should be set
2494fe3b90bSGeorge V. Neville-Neil 				    * to zero for “internally
2504fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices. */
251d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_POWER_SLOPE	= 80, /* Tx_PWR(Slope) Fixed decimal
2524fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
2534fe3b90bSGeorge V. Neville-Neil 				    * transmitter coupled output
2544fe3b90bSGeorge V. Neville-Neil 				    * power. Bit 7 of byte 80 is MSB,
2554fe3b90bSGeorge V. Neville-Neil 				    * bit 0 of byte 81 is LSB.
2564fe3b90bSGeorge V. Neville-Neil 				    * Tx_PWR(Slope) should be set to 1
2574fe3b90bSGeorge V. Neville-Neil 				    * for “internally calibrated”
2584fe3b90bSGeorge V. Neville-Neil 				    * devices. */
259d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_POWER_OFFSET	= 82, /* Tx_PWR(Offset) Fixed decimal
2604fe3b90bSGeorge V. Neville-Neil 					    * (signed two’s complement)
2614fe3b90bSGeorge V. Neville-Neil 					    * calibration data, transmitter
2624fe3b90bSGeorge V. Neville-Neil 					    * coupled output power. Bit 7 of
2634fe3b90bSGeorge V. Neville-Neil 					    * byte 82 is MSB, bit 0 of byte 83
2644fe3b90bSGeorge V. Neville-Neil 					    * is LSB. Tx_PWR(Offset) should be
2654fe3b90bSGeorge V. Neville-Neil 					    * set to zero for “internally
2664fe3b90bSGeorge V. Neville-Neil 					    * calibrated” devices. */
267d9168b01SGeorge V. Neville-Neil 	SFF_8472_T_SLOPE	= 84, /* T (Slope) Fixed decimal
2684fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
2694fe3b90bSGeorge V. Neville-Neil 				    * internal module temperature. Bit
2704fe3b90bSGeorge V. Neville-Neil 				    * 7 of byte 84 is MSB, bit 0 of
2714fe3b90bSGeorge V. Neville-Neil 				    * byte 85 is LSB.  T(Slope) should
2724fe3b90bSGeorge V. Neville-Neil 				    * be set to 1 for “internally
2734fe3b90bSGeorge V. Neville-Neil 				    * calibrated” devices. */
274d9168b01SGeorge V. Neville-Neil 	SFF_8472_T_OFFSET	= 86, /* T (Offset) Fixed decimal (signed
2754fe3b90bSGeorge V. Neville-Neil 				    * two’s complement) calibration
2764fe3b90bSGeorge V. Neville-Neil 				    * data, internal module
2774fe3b90bSGeorge V. Neville-Neil 				    * temperature. Bit 7 of byte 86 is
2784fe3b90bSGeorge V. Neville-Neil 				    * MSB, bit 0 of byte 87 is LSB.
2794fe3b90bSGeorge V. Neville-Neil 				    * T(Offset) should be set to zero
2804fe3b90bSGeorge V. Neville-Neil 				    * for “internally calibrated”
2814fe3b90bSGeorge V. Neville-Neil 				    * devices. */
282d9168b01SGeorge V. Neville-Neil 	SFF_8472_V_SLOPE	= 88, /* V (Slope) Fixed decimal
2834fe3b90bSGeorge V. Neville-Neil 				    * (unsigned) calibration data,
2844fe3b90bSGeorge V. Neville-Neil 				    * internal module supply
2854fe3b90bSGeorge V. Neville-Neil 				    * voltage. Bit 7 of byte 88 is
2864fe3b90bSGeorge V. Neville-Neil 				    * MSB, bit 0 of byte 89 is
2874fe3b90bSGeorge V. Neville-Neil 				    * LSB. V(Slope) should be set to 1
2884fe3b90bSGeorge V. Neville-Neil 				    * for “internally calibrated”
2894fe3b90bSGeorge V. Neville-Neil 				    * devices. */
290d9168b01SGeorge V. Neville-Neil 	SFF_8472_V_OFFSET	= 90, /* V (Offset) Fixed decimal (signed
2914fe3b90bSGeorge V. Neville-Neil 				    * two’s complement) calibration
2924fe3b90bSGeorge V. Neville-Neil 				    * data, internal module supply
2934fe3b90bSGeorge V. Neville-Neil 				    * voltage. Bit 7 of byte 90 is
2944fe3b90bSGeorge V. Neville-Neil 				    * MSB. Bit 0 of byte 91 is
2954fe3b90bSGeorge V. Neville-Neil 				    * LSB. V(Offset) should be set to
2964fe3b90bSGeorge V. Neville-Neil 				    * zero for “internally calibrated”
2974fe3b90bSGeorge V. Neville-Neil 				    * devices. */
298d9168b01SGeorge V. Neville-Neil 	SFF_8472_CHECKSUM	= 95, /* Checksum Byte 95 contains the
2994fe3b90bSGeorge V. Neville-Neil 				    * low order 8 bits of the sum of
3004fe3b90bSGeorge V. Neville-Neil 				    * bytes 0 – 94. */
3014fe3b90bSGeorge V. Neville-Neil 	/* Internal measurements. */
3024fe3b90bSGeorge V. Neville-Neil 
303d9168b01SGeorge V. Neville-Neil 	SFF_8472_TEMP	 	= 96, /* Internally measured module temperature. */
304d9168b01SGeorge V. Neville-Neil 	SFF_8472_VCC 		= 98, /* Internally measured supply
3054fe3b90bSGeorge V. Neville-Neil 				    * voltage in transceiver.
3064fe3b90bSGeorge V. Neville-Neil 				    */
307d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_BIAS	= 100, /* Internally measured TX Bias Current. */
308d9168b01SGeorge V. Neville-Neil 	SFF_8472_TX_POWER	= 102, /* Measured TX output power. */
309d9168b01SGeorge V. Neville-Neil 	SFF_8472_RX_POWER	= 104, /* Measured RX input power. */
3104fe3b90bSGeorge V. Neville-Neil 
311d9168b01SGeorge V. Neville-Neil 	SFF_8472_STATUS		= 110 /* See below */
312d9168b01SGeorge V. Neville-Neil };
3134fe3b90bSGeorge V. Neville-Neil  /* Status Bits Described */
3144fe3b90bSGeorge V. Neville-Neil 
3154fe3b90bSGeorge V. Neville-Neil /*
3164fe3b90bSGeorge V. Neville-Neil  * TX Disable State Digital state of the TX Disable Input Pin. Updated
3174fe3b90bSGeorge V. Neville-Neil  * within 100ms of change on pin.
3184fe3b90bSGeorge V. Neville-Neil  */
3194fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_TX_DISABLE  (1 << 7)
3204fe3b90bSGeorge V. Neville-Neil 
3214fe3b90bSGeorge V. Neville-Neil /*
3224fe3b90bSGeorge V. Neville-Neil  * Select Read/write bit that allows software disable of
3234fe3b90bSGeorge V. Neville-Neil  * laser. Writing ‘1’ disables laser. See Table 3.11 for
3244fe3b90bSGeorge V. Neville-Neil  * enable/disable timing requirements. This bit is “OR”d with the hard
3254fe3b90bSGeorge V. Neville-Neil  * TX_DISABLE pin value. Note, per SFP MSA TX_DISABLE pin is default
3264fe3b90bSGeorge V. Neville-Neil  * enabled unless pulled low by hardware. If Soft TX Disable is not
3274fe3b90bSGeorge V. Neville-Neil  * implemented, the transceiver ignores the value of this bit. Default
3284fe3b90bSGeorge V. Neville-Neil  * power up value is zero/low.
3294fe3b90bSGeorge V. Neville-Neil  */
3304fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_SOFT_TX_DISABLE (1 << 6)
3314fe3b90bSGeorge V. Neville-Neil 
3324fe3b90bSGeorge V. Neville-Neil /*
3334fe3b90bSGeorge V. Neville-Neil  * RS(1) State Digital state of SFP input pin AS(1) per SFF-8079 or
3344fe3b90bSGeorge V. Neville-Neil  * RS(1) per SFF-8431. Updated within 100ms of change on pin. See A2h
3354fe3b90bSGeorge V. Neville-Neil  * Byte 118, Bit 3 for Soft RS(1) Select control information.
3364fe3b90bSGeorge V. Neville-Neil  */
3374fe3b90bSGeorge V. Neville-Neil #define SFF_8472_RS_STATE (1 << 5)
3384fe3b90bSGeorge V. Neville-Neil 
3394fe3b90bSGeorge V. Neville-Neil /*
3404fe3b90bSGeorge V. Neville-Neil  * Rate_Select State [aka. “RS(0)”] Digital state of the SFP
3414fe3b90bSGeorge V. Neville-Neil  * Rate_Select Input Pin. Updated within 100ms of change on pin. Note:
3424fe3b90bSGeorge V. Neville-Neil  * This pin is also known as AS(0) in SFF-8079 and RS(0) in SFF-8431.
3434fe3b90bSGeorge V. Neville-Neil  */
3444fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_SELECT_STATE (1 << 4)
3454fe3b90bSGeorge V. Neville-Neil 
3464fe3b90bSGeorge V. Neville-Neil /*
3474fe3b90bSGeorge V. Neville-Neil  * Read/write bit that allows software rate select control. Writing
3484fe3b90bSGeorge V. Neville-Neil  * ‘1’ selects full bandwidth operation. This bit is “OR’d with the
3494fe3b90bSGeorge V. Neville-Neil  * hard Rate_Select, AS(0) or RS(0) pin value. See Table 3.11 for
3504fe3b90bSGeorge V. Neville-Neil  * timing requirements. Default at power up is logic zero/low. If Soft
3514fe3b90bSGeorge V. Neville-Neil  * Rate Select is not implemented, the transceiver ignores the value
3524fe3b90bSGeorge V. Neville-Neil  * of this bit. Note: Specific transceiver behaviors of this bit are
3534fe3b90bSGeorge V. Neville-Neil  * identified in Table 3.6a and referenced documents. See Table 3.18a,
3544fe3b90bSGeorge V. Neville-Neil  * byte 118, bit 3 for Soft RS(1) Select.
3554fe3b90bSGeorge V. Neville-Neil  */
3564fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_SOFT_RATE_SELECT (1 << 3)
3574fe3b90bSGeorge V. Neville-Neil 
3584fe3b90bSGeorge V. Neville-Neil /*
3594fe3b90bSGeorge V. Neville-Neil  * TX Fault State Digital state of the TX Fault Output Pin. Updated
3604fe3b90bSGeorge V. Neville-Neil  * within 100ms of change on pin.
3614fe3b90bSGeorge V. Neville-Neil  */
3624fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_TX_FAULT_STATE (1 << 2)
3634fe3b90bSGeorge V. Neville-Neil 
3644fe3b90bSGeorge V. Neville-Neil /*
3654fe3b90bSGeorge V. Neville-Neil  * Digital state of the RX_LOS Output Pin. Updated within 100ms of
3664fe3b90bSGeorge V. Neville-Neil  * change on pin.
3674fe3b90bSGeorge V. Neville-Neil  */
3684fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_RX_LOS (1 << 1)
3694fe3b90bSGeorge V. Neville-Neil 
3704fe3b90bSGeorge V. Neville-Neil /*
3714fe3b90bSGeorge V. Neville-Neil  * Indicates transceiver has achieved power up and data is ready. Bit
3724fe3b90bSGeorge V. Neville-Neil  * remains high until data is ready to be read at which time the
3734fe3b90bSGeorge V. Neville-Neil  * device sets the bit low.
3744fe3b90bSGeorge V. Neville-Neil  */
3754fe3b90bSGeorge V. Neville-Neil #define SFF_8472_STATUS_DATA_READY (1 << 0)
3764fe3b90bSGeorge V. Neville-Neil 
377c59adfc6SAlexander V. Chernikov /*
378c59adfc6SAlexander V. Chernikov  * Table 3.2 Identifier values.
379f4aa9b67SEric Joyner  * Identifier constants has taken from SFF-8024 rev 4.6 table 4.1
380c59adfc6SAlexander V. Chernikov  * (as referenced by table 3.2 footer)
381c59adfc6SAlexander V. Chernikov  * */
382d9168b01SGeorge V. Neville-Neil enum {
383c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_UNKNOWN	= 0x0, /* Unknown or unspecified */
384c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_GBIC	= 0x1, /* GBIC */
385c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_SFF		= 0x2, /* Module soldered to motherboard (ex: SFF)*/
386c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_SFP		= 0x3, /* SFP or SFP “Plus” */
387c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_XBI		= 0x4, /* 300 pin XBI */
388c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_XENPAK	= 0x5, /* Xenpak */
389c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_XFP		= 0x6, /* XFP */
390c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_XFF		= 0x7, /* XFF */
391c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_XFPE	= 0x8, /* XFP-E */
392c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_XPAK	= 0x9, /* XPAk */
393c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_X2		= 0xA, /* X2 */
394c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_DWDM_SFP	= 0xB, /* DWDM-SFP */
395c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_QSFP	= 0xC, /* QSFP */
396f4aa9b67SEric Joyner 	SFF_8024_ID_QSFPPLUS	= 0xD, /* QSFP+ or later */
397c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_CXP		= 0xE, /* CXP */
398c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_HD4X	= 0xF, /* Shielded Mini Multilane HD 4X */
399c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_HD8X	= 0x10, /* Shielded Mini Multilane HD 8X */
400b0f3e715SEric Joyner 	SFF_8024_ID_QSFP28	= 0x11, /* QSFP28 or later */
401c59adfc6SAlexander V. Chernikov 	SFF_8024_ID_CXP2	= 0x12, /* CXP2 (aka CXP28) */
4025446b3f1SAlexander V. Chernikov 	SFF_8024_ID_CDFP	= 0x13, /* CDFP (Style 1/Style 2) */
4035446b3f1SAlexander V. Chernikov 	SFF_8024_ID_SMM4	= 0x14, /* Shielded Mini Multilate HD 4X Fanout */
4045446b3f1SAlexander V. Chernikov 	SFF_8024_ID_SMM8	= 0x15, /* Shielded Mini Multilate HD 8X Fanout */
4055446b3f1SAlexander V. Chernikov 	SFF_8024_ID_CDFP3	= 0x16, /* CDFP (Style3) */
406b0f3e715SEric Joyner 	SFF_8024_ID_MICROQSFP	= 0x17, /* microQSFP */
407b0f3e715SEric Joyner 	SFF_8024_ID_QSFP_DD	= 0x18, /* QSFP-DD 8X Pluggable Transceiver */
408f4aa9b67SEric Joyner 	SFF_8024_ID_OSFP8X	= 0x19, /* OSFP 8X Pluggable Transceiver */
409f4aa9b67SEric Joyner 	SFF_8024_ID_SFP_DD	= 0x1A, /* SFP-DD 2X Pluggable Transceiver */
410f4aa9b67SEric Joyner 	SFF_8024_ID_DSFP	= 0x1B, /* DSFP Dual SFF Pluggable Transceiver */
411f4aa9b67SEric Joyner 	SFF_8024_ID_X4ML	= 0x1C, /* x4 MiniLink/OcuLink */
412f4aa9b67SEric Joyner 	SFF_8024_ID_X8ML	= 0x1D, /* x8 MiniLink */
413f4aa9b67SEric Joyner 	SFF_8024_ID_QSFP_CMIS	= 0x1E, /* QSFP+ or later w/ Common Management
414f4aa9b67SEric Joyner 					   Interface Specification */
415f4aa9b67SEric Joyner 	SFF_8024_ID_LAST	= SFF_8024_ID_QSFP_CMIS
416d9168b01SGeorge V. Neville-Neil };
4174fe3b90bSGeorge V. Neville-Neil 
418f4aa9b67SEric Joyner static const char *sff_8024_id[SFF_8024_ID_LAST + 1] = {
419f4aa9b67SEric Joyner 	"Unknown",
4204fe3b90bSGeorge V. Neville-Neil 	"GBIC",
4214fe3b90bSGeorge V. Neville-Neil 	"SFF",
4225446b3f1SAlexander V. Chernikov 	"SFP/SFP+/SFP28",
4234fe3b90bSGeorge V. Neville-Neil 	"XBI",
4244fe3b90bSGeorge V. Neville-Neil 	"Xenpak",
4254fe3b90bSGeorge V. Neville-Neil 	"XFP",
4264fe3b90bSGeorge V. Neville-Neil 	"XFF",
4274fe3b90bSGeorge V. Neville-Neil 	"XFP-E",
4285446b3f1SAlexander V. Chernikov 	"XPAK",
4294fe3b90bSGeorge V. Neville-Neil 	"X2",
4305446b3f1SAlexander V. Chernikov 	"DWDM-SFP/SFP+",
431c59adfc6SAlexander V. Chernikov 	"QSFP",
432c59adfc6SAlexander V. Chernikov 	"QSFP+",
433c59adfc6SAlexander V. Chernikov 	"CXP",
434c59adfc6SAlexander V. Chernikov 	"HD4X",
435c59adfc6SAlexander V. Chernikov 	"HD8X",
436c59adfc6SAlexander V. Chernikov 	"QSFP28",
4375446b3f1SAlexander V. Chernikov 	"CXP2",
4385446b3f1SAlexander V. Chernikov 	"CDFP",
4395446b3f1SAlexander V. Chernikov 	"SMM4",
4405446b3f1SAlexander V. Chernikov 	"SMM8",
441b0f3e715SEric Joyner 	"CDFP3",
442b0f3e715SEric Joyner 	"microQSFP",
443f4aa9b67SEric Joyner 	"QSFP-DD",
444f4aa9b67SEric Joyner 	"QSFP8X",
445f4aa9b67SEric Joyner 	"SFP-DD",
446f4aa9b67SEric Joyner 	"DSFP",
447f4aa9b67SEric Joyner 	"x4MiniLink/OcuLink",
448f4aa9b67SEric Joyner 	"x8MiniLink",
449f4aa9b67SEric Joyner 	"QSFP+(CIMS)"
450f4aa9b67SEric Joyner };
451c59adfc6SAlexander V. Chernikov 
452a4641f4eSPedro F. Giffuni /* Keep compatibility with old definitions */
453c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_UNKNOWN	SFF_8024_ID_UNKNOWN
454c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_GBIC	SFF_8024_ID_GBIC
455c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_SFF		SFF_8024_ID_SFF
456c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_SFP		SFF_8024_ID_SFP
457c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_XBI		SFF_8024_ID_XBI
458c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_XENPAK	SFF_8024_ID_XENPAK
459c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_XFP		SFF_8024_ID_XFP
460c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_XFF		SFF_8024_ID_XFF
461c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_XFPE	SFF_8024_ID_XFPE
462c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_XPAK	SFF_8024_ID_XPAK
463c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_X2		SFF_8024_ID_X2
464c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_DWDM_SFP	SFF_8024_ID_DWDM_SFP
465c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_QSFP	SFF_8024_ID_QSFP
466c59adfc6SAlexander V. Chernikov #define	SFF_8472_ID_LAST	SFF_8024_ID_LAST
467c59adfc6SAlexander V. Chernikov 
468c59adfc6SAlexander V. Chernikov #define	sff_8472_id		sff_8024_id
469c59adfc6SAlexander V. Chernikov 
470c59adfc6SAlexander V. Chernikov /*
471c59adfc6SAlexander V. Chernikov  * Table 3.9 Diagnostic Monitoring Type (byte 92)
472c59adfc6SAlexander V. Chernikov  * bits described.
473c59adfc6SAlexander V. Chernikov  */
474c59adfc6SAlexander V. Chernikov 
475c59adfc6SAlexander V. Chernikov /*
476c59adfc6SAlexander V. Chernikov  * Digital diagnostic monitoring implemented.
477c59adfc6SAlexander V. Chernikov  * Set to 1 for transceivers implementing DDM.
478c59adfc6SAlexander V. Chernikov  */
479c59adfc6SAlexander V. Chernikov #define	SFF_8472_DDM_DONE	(1 << 6)
480c59adfc6SAlexander V. Chernikov 
481c59adfc6SAlexander V. Chernikov /*
482c59adfc6SAlexander V. Chernikov  * Measurements are internally calibrated.
483c59adfc6SAlexander V. Chernikov  */
484c59adfc6SAlexander V. Chernikov #define	SFF_8472_DDM_INTERNAL	(1 << 5)
485c59adfc6SAlexander V. Chernikov 
486c59adfc6SAlexander V. Chernikov /*
487c59adfc6SAlexander V. Chernikov  * Measurements are externally calibrated.
488c59adfc6SAlexander V. Chernikov  */
489c59adfc6SAlexander V. Chernikov #define	SFF_8472_DDM_EXTERNAL	(1 << 4)
490c59adfc6SAlexander V. Chernikov 
491c59adfc6SAlexander V. Chernikov /*
492c59adfc6SAlexander V. Chernikov  * Received power measurement type
493c59adfc6SAlexander V. Chernikov  * 0 = OMA, 1 = average power
494c59adfc6SAlexander V. Chernikov  */
495c59adfc6SAlexander V. Chernikov #define	SFF_8472_DDM_PMTYPE	(1 << 3)
4964fe3b90bSGeorge V. Neville-Neil 
4974fe3b90bSGeorge V. Neville-Neil /* Table 3.13 and 3.14 Temperature Conversion Values */
4984fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_SIGN (1 << 15)
4994fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_SHIFT  8
5004fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_MSK  0xEF00
5014fe3b90bSGeorge V. Neville-Neil #define SFF_8472_TEMP_FRAC 0x00FF
5024fe3b90bSGeorge V. Neville-Neil 
5034fe3b90bSGeorge V. Neville-Neil /* Internal Callibration Conversion factors */
5044fe3b90bSGeorge V. Neville-Neil 
5054fe3b90bSGeorge V. Neville-Neil /*
5064fe3b90bSGeorge V. Neville-Neil  * Represented as a 16 bit unsigned integer with the voltage defined
5074fe3b90bSGeorge V. Neville-Neil  * as the full 16 bit value (0 – 65535) with LSB equal to 100 uVolt,
5084fe3b90bSGeorge V. Neville-Neil  * yielding a total range of 0 to +6.55 Volts.
5094fe3b90bSGeorge V. Neville-Neil  */
5104fe3b90bSGeorge V. Neville-Neil #define SFF_8472_VCC_FACTOR 10000.0
5114fe3b90bSGeorge V. Neville-Neil 
5124fe3b90bSGeorge V. Neville-Neil /*
5134fe3b90bSGeorge V. Neville-Neil  * Represented as a 16 bit unsigned integer with the current defined
5144fe3b90bSGeorge V. Neville-Neil  * as the full 16 bit value (0 – 65535) with LSB equal to 2 uA,
5154fe3b90bSGeorge V. Neville-Neil  * yielding a total range of 0 to 131 mA.
5164fe3b90bSGeorge V. Neville-Neil  */
5174fe3b90bSGeorge V. Neville-Neil 
5184fe3b90bSGeorge V. Neville-Neil #define SFF_8472_BIAS_FACTOR 2000.0
5194fe3b90bSGeorge V. Neville-Neil 
5204fe3b90bSGeorge V. Neville-Neil /*
5214fe3b90bSGeorge V. Neville-Neil  * Represented as a 16 bit unsigned integer with the power defined as
5224fe3b90bSGeorge V. Neville-Neil  * the full 16 bit value (0 – 65535) with LSB equal to 0.1 uW,
5234fe3b90bSGeorge V. Neville-Neil  * yielding a total range of 0 to 6.5535 mW (~ -40 to +8.2 dBm).
5244fe3b90bSGeorge V. Neville-Neil  */
5254fe3b90bSGeorge V. Neville-Neil 
5264fe3b90bSGeorge V. Neville-Neil #define SFF_8472_POWER_FACTOR 10000.0
527