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