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