1*963f1a54SAndrew Gallatin /*- 2*963f1a54SAndrew Gallatin * Copyright (c) 2026 Netflix Inc. 3*963f1a54SAndrew Gallatin * 4*963f1a54SAndrew Gallatin * SPDX-License-Identifier: BSD-2-Clause 5*963f1a54SAndrew Gallatin */ 6*963f1a54SAndrew Gallatin 7*963f1a54SAndrew Gallatin /* 8*963f1a54SAndrew Gallatin * The following set of constants are from the OIF Common Management 9*963f1a54SAndrew Gallatin * Interface Specification (CMIS) revision 5.3, September 2024. 10*963f1a54SAndrew Gallatin * 11*963f1a54SAndrew Gallatin * CMIS defines a 256-byte addressable memory with lower (0-127) and 12*963f1a54SAndrew Gallatin * upper (128-255) regions. Lower memory is always accessible. 13*963f1a54SAndrew Gallatin * Upper memory is paged via byte 127 (page select) and byte 126 14*963f1a54SAndrew Gallatin * (bank select). 15*963f1a54SAndrew Gallatin * 16*963f1a54SAndrew Gallatin * All values are read across an I2C bus at address 0xA0. 17*963f1a54SAndrew Gallatin */ 18*963f1a54SAndrew Gallatin 19*963f1a54SAndrew Gallatin #ifndef _NET_CMIS_H_ 20*963f1a54SAndrew Gallatin #define _NET_CMIS_H_ 21*963f1a54SAndrew Gallatin 22*963f1a54SAndrew Gallatin #define CMIS_BASE 0xA0 /* Base I2C address for all requests */ 23*963f1a54SAndrew Gallatin 24*963f1a54SAndrew Gallatin /* CMIS Module Types (SFF-8024 Identifier, byte 0) */ 25*963f1a54SAndrew Gallatin #define CMIS_ID_QSFP_DD 0x18 /* QSFP-DD */ 26*963f1a54SAndrew Gallatin #define CMIS_ID_QSFP8X 0x19 /* QSFP 8X (OSFP) */ 27*963f1a54SAndrew Gallatin #define CMIS_ID_SFP_DD 0x1A /* SFP-DD */ 28*963f1a54SAndrew Gallatin #define CMIS_ID_DSFP 0x1B /* DSFP */ 29*963f1a54SAndrew Gallatin #define CMIS_ID_QSFP_CMIS 0x1E /* QSFP+ with CMIS */ 30*963f1a54SAndrew Gallatin 31*963f1a54SAndrew Gallatin /* Table 8-4: Lower Memory Map (bytes 0x00-0x7F) */ 32*963f1a54SAndrew Gallatin enum { 33*963f1a54SAndrew Gallatin /* Table 8-5: Management Characteristics (bytes 0-2) */ 34*963f1a54SAndrew Gallatin CMIS_ID = 0, /* SFF-8024 Identifier */ 35*963f1a54SAndrew Gallatin CMIS_REV = 1, /* CMIS revision (major.minor) */ 36*963f1a54SAndrew Gallatin CMIS_MODULE_TYPE = 2, /* Memory model, config options */ 37*963f1a54SAndrew Gallatin 38*963f1a54SAndrew Gallatin /* Table 8-6: Global Status (byte 3) */ 39*963f1a54SAndrew Gallatin CMIS_MODULE_STATE = 3, /* Module state, interrupt status */ 40*963f1a54SAndrew Gallatin 41*963f1a54SAndrew Gallatin /* Table 8-8: Flags Summary (bytes 4-7) */ 42*963f1a54SAndrew Gallatin CMIS_FLAGS_BANK0 = 4, /* Flags summary, bank 0 */ 43*963f1a54SAndrew Gallatin CMIS_FLAGS_BANK1 = 5, /* Flags summary, bank 1 */ 44*963f1a54SAndrew Gallatin CMIS_FLAGS_BANK2 = 6, /* Flags summary, bank 2 */ 45*963f1a54SAndrew Gallatin CMIS_FLAGS_BANK3 = 7, /* Flags summary, bank 3 */ 46*963f1a54SAndrew Gallatin 47*963f1a54SAndrew Gallatin /* Table 8-9: Module-Level Flags (bytes 8-13) */ 48*963f1a54SAndrew Gallatin CMIS_MOD_FLAGS_START = 8, /* Module firmware/state flags */ 49*963f1a54SAndrew Gallatin CMIS_MOD_FLAGS_TEMP_VCC = 9, /* Temp/VCC alarm/warning flags */ 50*963f1a54SAndrew Gallatin CMIS_MOD_FLAGS_AUX = 10, /* Aux monitor alarm/warning flags */ 51*963f1a54SAndrew Gallatin CMIS_MOD_FLAGS_CUSTOM = 11, /* Custom/Aux3 monitor flags */ 52*963f1a54SAndrew Gallatin CMIS_MOD_FLAGS_RSVD = 12, /* Reserved */ 53*963f1a54SAndrew Gallatin CMIS_MOD_FLAGS_VENDOR = 13, /* Custom module-level flags */ 54*963f1a54SAndrew Gallatin 55*963f1a54SAndrew Gallatin /* Table 8-10: Module-Level Monitor Values (bytes 14-25) */ 56*963f1a54SAndrew Gallatin CMIS_TEMP = 14, /* S16 Temperature (1/256 deg C) */ 57*963f1a54SAndrew Gallatin CMIS_VCC = 16, /* U16 Supply Voltage (100 uV) */ 58*963f1a54SAndrew Gallatin CMIS_AUX1 = 18, /* S16 Aux1 Monitor */ 59*963f1a54SAndrew Gallatin CMIS_AUX2 = 20, /* S16 Aux2 Monitor */ 60*963f1a54SAndrew Gallatin CMIS_AUX3 = 22, /* S16 Aux3 Monitor */ 61*963f1a54SAndrew Gallatin CMIS_CUSTOM_MON = 24, /* S16/U16 Custom Monitor */ 62*963f1a54SAndrew Gallatin 63*963f1a54SAndrew Gallatin /* Table 8-11: Module Global Controls (bytes 26-30) */ 64*963f1a54SAndrew Gallatin CMIS_MOD_CTRL = 26, /* Global control bits */ 65*963f1a54SAndrew Gallatin CMIS_MOD_CTRL2 = 27, /* Global control bits (cont.) */ 66*963f1a54SAndrew Gallatin CMIS_MOD_CTRL3 = 28, /* Global control bits (cont.) */ 67*963f1a54SAndrew Gallatin CMIS_MOD_CTRL4 = 29, /* Global control bits (cont.) */ 68*963f1a54SAndrew Gallatin CMIS_MOD_CTRL5 = 30, /* Global control bits (cont.) */ 69*963f1a54SAndrew Gallatin 70*963f1a54SAndrew Gallatin /* Table 8-12: Module Level Masks (bytes 31-36) */ 71*963f1a54SAndrew Gallatin CMIS_MOD_MASKS_START = 31, /* Module-level masks start */ 72*963f1a54SAndrew Gallatin CMIS_MOD_MASKS_END = 36, /* Module-level masks end */ 73*963f1a54SAndrew Gallatin 74*963f1a54SAndrew Gallatin /* Table 8-13: CDB Command Status (bytes 37-38) */ 75*963f1a54SAndrew Gallatin CMIS_CDB_STATUS1 = 37, /* CDB instance 1 status */ 76*963f1a54SAndrew Gallatin CMIS_CDB_STATUS2 = 38, /* CDB instance 2 status */ 77*963f1a54SAndrew Gallatin 78*963f1a54SAndrew Gallatin /* Table 8-15: Module Active Firmware Version (bytes 39-40) */ 79*963f1a54SAndrew Gallatin CMIS_FW_VER_MAJOR = 39, /* Active firmware major version */ 80*963f1a54SAndrew Gallatin CMIS_FW_VER_MINOR = 40, /* Active firmware minor version */ 81*963f1a54SAndrew Gallatin 82*963f1a54SAndrew Gallatin /* Table 8-16: Fault Information (byte 41) */ 83*963f1a54SAndrew Gallatin CMIS_FAULT_CAUSE = 41, /* Fault cause for ModuleFault */ 84*963f1a54SAndrew Gallatin 85*963f1a54SAndrew Gallatin /* Table 8-17: Miscellaneous Status (bytes 42-45) */ 86*963f1a54SAndrew Gallatin CMIS_MISC_STATUS_START = 42, /* Password status, etc. */ 87*963f1a54SAndrew Gallatin CMIS_MISC_STATUS_END = 45, 88*963f1a54SAndrew Gallatin 89*963f1a54SAndrew Gallatin /* Table 8-18: Extended Module Information (bytes 56-63) */ 90*963f1a54SAndrew Gallatin CMIS_EXT_MOD_INFO_START = 56, 91*963f1a54SAndrew Gallatin CMIS_EXT_MOD_INFO_END = 63, 92*963f1a54SAndrew Gallatin 93*963f1a54SAndrew Gallatin /* Table 8-21: Media Type (byte 85) */ 94*963f1a54SAndrew Gallatin CMIS_MEDIA_TYPE = 85, /* MediaType encoding */ 95*963f1a54SAndrew Gallatin 96*963f1a54SAndrew Gallatin /* Table 8-23: Application Descriptors (bytes 86-117) */ 97*963f1a54SAndrew Gallatin CMIS_APP_DESC_START = 86, /* First Application Descriptor */ 98*963f1a54SAndrew Gallatin CMIS_APP_DESC1 = 86, /* AppDescriptor 1 (AppSel 1) */ 99*963f1a54SAndrew Gallatin CMIS_APP_DESC2 = 90, /* AppDescriptor 2 (AppSel 2) */ 100*963f1a54SAndrew Gallatin CMIS_APP_DESC3 = 94, /* AppDescriptor 3 (AppSel 3) */ 101*963f1a54SAndrew Gallatin CMIS_APP_DESC4 = 98, /* AppDescriptor 4 (AppSel 4) */ 102*963f1a54SAndrew Gallatin CMIS_APP_DESC5 = 102, /* AppDescriptor 5 (AppSel 5) */ 103*963f1a54SAndrew Gallatin CMIS_APP_DESC6 = 106, /* AppDescriptor 6 (AppSel 6) */ 104*963f1a54SAndrew Gallatin CMIS_APP_DESC7 = 110, /* AppDescriptor 7 (AppSel 7) */ 105*963f1a54SAndrew Gallatin CMIS_APP_DESC8 = 114, /* AppDescriptor 8 (AppSel 8) */ 106*963f1a54SAndrew Gallatin 107*963f1a54SAndrew Gallatin /* Table 8-24: Password (bytes 118-125) */ 108*963f1a54SAndrew Gallatin CMIS_PASSWORD_CHANGE = 118, /* Password change entry (4 bytes) */ 109*963f1a54SAndrew Gallatin CMIS_PASSWORD_ENTRY = 122, /* Password entry area (4 bytes) */ 110*963f1a54SAndrew Gallatin 111*963f1a54SAndrew Gallatin /* Table 8-25: Page Mapping (bytes 126-127) */ 112*963f1a54SAndrew Gallatin CMIS_BANK_SEL = 126, /* Bank select */ 113*963f1a54SAndrew Gallatin CMIS_PAGE_SEL = 127, /* Page select */ 114*963f1a54SAndrew Gallatin }; 115*963f1a54SAndrew Gallatin 116*963f1a54SAndrew Gallatin /* 117*963f1a54SAndrew Gallatin * Byte 2 (CMIS_MODULE_TYPE) bit definitions (Table 8-5) 118*963f1a54SAndrew Gallatin */ 119*963f1a54SAndrew Gallatin #define CMIS_MODULE_TYPE_FLAT (1 << 7) /* MemoryModel: 1=flat, 0=paged */ 120*963f1a54SAndrew Gallatin #define CMIS_MODULE_TYPE_STEPPED (1 << 6) /* SteppedConfigOnly */ 121*963f1a54SAndrew Gallatin #define CMIS_MODULE_TYPE_MCISPEED_MASK 0x3C /* MciMaxSpeed, bits 5:2 */ 122*963f1a54SAndrew Gallatin #define CMIS_MODULE_TYPE_MCISPEED_SHIFT 2 123*963f1a54SAndrew Gallatin #define CMIS_MODULE_TYPE_AUTOCOM_MASK 0x03 /* AutoCommissioning, bits 1:0 */ 124*963f1a54SAndrew Gallatin 125*963f1a54SAndrew Gallatin /* MciMaxSpeed values (I2CMCI) */ 126*963f1a54SAndrew Gallatin #define CMIS_MCISPEED_400KHZ 0 /* Up to 400 kHz */ 127*963f1a54SAndrew Gallatin #define CMIS_MCISPEED_1MHZ 1 /* Up to 1 MHz */ 128*963f1a54SAndrew Gallatin #define CMIS_MCISPEED_3_4MHZ 2 /* Up to 3.4 MHz */ 129*963f1a54SAndrew Gallatin 130*963f1a54SAndrew Gallatin /* AutoCommissioning values (when SteppedConfigOnly=1) */ 131*963f1a54SAndrew Gallatin #define CMIS_AUTOCOM_NONE 0x00 /* Neither regular nor hot */ 132*963f1a54SAndrew Gallatin #define CMIS_AUTOCOM_REGULAR 0x01 /* Only regular (ApplyDPInit) */ 133*963f1a54SAndrew Gallatin #define CMIS_AUTOCOM_HOT 0x02 /* Only hot (ApplyImmediate) */ 134*963f1a54SAndrew Gallatin 135*963f1a54SAndrew Gallatin /* 136*963f1a54SAndrew Gallatin * Byte 3 (CMIS_MODULE_STATE) bit definitions (Table 8-6) 137*963f1a54SAndrew Gallatin */ 138*963f1a54SAndrew Gallatin #define CMIS_MODULE_STATE_MASK 0x0E /* ModuleState, bits 3:1 */ 139*963f1a54SAndrew Gallatin #define CMIS_MODULE_STATE_SHIFT 1 140*963f1a54SAndrew Gallatin #define CMIS_MODULE_STATE_INTL 0x01 /* InterruptDeasserted (bit 0) */ 141*963f1a54SAndrew Gallatin 142*963f1a54SAndrew Gallatin /* Table 8-7: Module State Encodings (bits 3:1 of byte 3) */ 143*963f1a54SAndrew Gallatin #define CMIS_STATE_LOWPWR 1 /* ModuleLowPwr */ 144*963f1a54SAndrew Gallatin #define CMIS_STATE_PWRUP 2 /* ModulePwrUp */ 145*963f1a54SAndrew Gallatin #define CMIS_STATE_READY 3 /* ModuleReady */ 146*963f1a54SAndrew Gallatin #define CMIS_STATE_PWRDN 4 /* ModulePwrDn */ 147*963f1a54SAndrew Gallatin #define CMIS_STATE_FAULT 5 /* ModuleFault */ 148*963f1a54SAndrew Gallatin 149*963f1a54SAndrew Gallatin /* 150*963f1a54SAndrew Gallatin * Bytes 4-7 (CMIS_FLAGS_BANKn) bit definitions (Table 8-8) 151*963f1a54SAndrew Gallatin * Same layout for all 4 bank bytes. 152*963f1a54SAndrew Gallatin */ 153*963f1a54SAndrew Gallatin #define CMIS_FLAGS_PAGE2CH (1 << 3) /* Flags on Page 2Ch */ 154*963f1a54SAndrew Gallatin #define CMIS_FLAGS_PAGE14H (1 << 2) /* Flags on Page 14h */ 155*963f1a54SAndrew Gallatin #define CMIS_FLAGS_PAGE12H (1 << 1) /* Flags on Page 12h */ 156*963f1a54SAndrew Gallatin #define CMIS_FLAGS_PAGE11H (1 << 0) /* Flags on Page 11h */ 157*963f1a54SAndrew Gallatin 158*963f1a54SAndrew Gallatin /* 159*963f1a54SAndrew Gallatin * Byte 8 (CMIS_MOD_FLAGS_START) bit definitions (Table 8-9) 160*963f1a54SAndrew Gallatin */ 161*963f1a54SAndrew Gallatin #define CMIS_FLAG_CDB_COMPLETE2 (1 << 7) /* CdbCmdCompleteFlag2 */ 162*963f1a54SAndrew Gallatin #define CMIS_FLAG_CDB_COMPLETE1 (1 << 6) /* CdbCmdCompleteFlag1 */ 163*963f1a54SAndrew Gallatin #define CMIS_FLAG_DP_FW_ERROR (1 << 2) /* DataPathFirmwareErrorFlag */ 164*963f1a54SAndrew Gallatin #define CMIS_FLAG_MOD_FW_ERROR (1 << 1) /* ModuleFirmwareErrorFlag */ 165*963f1a54SAndrew Gallatin #define CMIS_FLAG_STATE_CHANGED (1 << 0) /* ModuleStateChangedFlag */ 166*963f1a54SAndrew Gallatin 167*963f1a54SAndrew Gallatin /* 168*963f1a54SAndrew Gallatin * Byte 9 (CMIS_MOD_FLAGS_TEMP_VCC) bit definitions (Table 8-9) 169*963f1a54SAndrew Gallatin */ 170*963f1a54SAndrew Gallatin #define CMIS_FLAG_VCC_LOW_WARN (1 << 7) /* VccMonLowWarningFlag */ 171*963f1a54SAndrew Gallatin #define CMIS_FLAG_VCC_HIGH_WARN (1 << 6) /* VccMonHighWarningFlag */ 172*963f1a54SAndrew Gallatin #define CMIS_FLAG_VCC_LOW_ALM (1 << 5) /* VccMonLowAlarmFlag */ 173*963f1a54SAndrew Gallatin #define CMIS_FLAG_VCC_HIGH_ALM (1 << 4) /* VccMonHighAlarmFlag */ 174*963f1a54SAndrew Gallatin #define CMIS_FLAG_TEMP_LOW_WARN (1 << 3) /* TempMonLowWarningFlag */ 175*963f1a54SAndrew Gallatin #define CMIS_FLAG_TEMP_HIGH_WARN (1 << 2) /* TempMonHighWarningFlag */ 176*963f1a54SAndrew Gallatin #define CMIS_FLAG_TEMP_LOW_ALM (1 << 1) /* TempMonLowAlarmFlag */ 177*963f1a54SAndrew Gallatin #define CMIS_FLAG_TEMP_HIGH_ALM (1 << 0) /* TempMonHighAlarmFlag */ 178*963f1a54SAndrew Gallatin 179*963f1a54SAndrew Gallatin /* 180*963f1a54SAndrew Gallatin * Byte 10 (CMIS_MOD_FLAGS_AUX) bit definitions (Table 8-9) 181*963f1a54SAndrew Gallatin */ 182*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX2_LOW_WARN (1 << 7) 183*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX2_HIGH_WARN (1 << 6) 184*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX2_LOW_ALM (1 << 5) 185*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX2_HIGH_ALM (1 << 4) 186*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX1_LOW_WARN (1 << 3) 187*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX1_HIGH_WARN (1 << 2) 188*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX1_LOW_ALM (1 << 1) 189*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX1_HIGH_ALM (1 << 0) 190*963f1a54SAndrew Gallatin 191*963f1a54SAndrew Gallatin /* 192*963f1a54SAndrew Gallatin * Byte 11 (CMIS_MOD_FLAGS_CUSTOM) bit definitions (Table 8-9) 193*963f1a54SAndrew Gallatin */ 194*963f1a54SAndrew Gallatin #define CMIS_FLAG_CUST_LOW_WARN (1 << 7) 195*963f1a54SAndrew Gallatin #define CMIS_FLAG_CUST_HIGH_WARN (1 << 6) 196*963f1a54SAndrew Gallatin #define CMIS_FLAG_CUST_LOW_ALM (1 << 5) 197*963f1a54SAndrew Gallatin #define CMIS_FLAG_CUST_HIGH_ALM (1 << 4) 198*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX3_LOW_WARN (1 << 3) 199*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX3_HIGH_WARN (1 << 2) 200*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX3_LOW_ALM (1 << 1) 201*963f1a54SAndrew Gallatin #define CMIS_FLAG_AUX3_HIGH_ALM (1 << 0) 202*963f1a54SAndrew Gallatin 203*963f1a54SAndrew Gallatin /* 204*963f1a54SAndrew Gallatin * Byte 26 (CMIS_MOD_CTRL) bit definitions (Table 8-11) 205*963f1a54SAndrew Gallatin */ 206*963f1a54SAndrew Gallatin #define CMIS_CTRL_BANK_BCAST (1 << 7) /* BankBroadcastEnable */ 207*963f1a54SAndrew Gallatin #define CMIS_CTRL_LOWPWR_HW (1 << 6) /* LowPwrAllowRequestHW */ 208*963f1a54SAndrew Gallatin #define CMIS_CTRL_SQUELCH_METHOD (1 << 5) /* SquelchMethodSelect */ 209*963f1a54SAndrew Gallatin #define CMIS_CTRL_LOWPWR_SW (1 << 4) /* LowPwrRequestSW */ 210*963f1a54SAndrew Gallatin #define CMIS_CTRL_SW_RESET (1 << 3) /* SoftwareReset */ 211*963f1a54SAndrew Gallatin 212*963f1a54SAndrew Gallatin /* 213*963f1a54SAndrew Gallatin * Byte 27 (CMIS_MOD_CTRL2) bit definitions (Table 8-11) 214*963f1a54SAndrew Gallatin */ 215*963f1a54SAndrew Gallatin #define CMIS_CTRL2_MCISPEED_MASK 0x0F /* MciSpeedConfiguration, bits 3:0 */ 216*963f1a54SAndrew Gallatin 217*963f1a54SAndrew Gallatin /* 218*963f1a54SAndrew Gallatin * Bytes 31-36 mask bits mirror bytes 8-13 flag bits (Table 8-12) 219*963f1a54SAndrew Gallatin * Use the same bit positions as CMIS_FLAG_* above. 220*963f1a54SAndrew Gallatin */ 221*963f1a54SAndrew Gallatin 222*963f1a54SAndrew Gallatin /* 223*963f1a54SAndrew Gallatin * Bytes 37-38 (CDB Status) bit definitions (Table 8-14) 224*963f1a54SAndrew Gallatin */ 225*963f1a54SAndrew Gallatin #define CMIS_CDB_BUSY (1 << 7) /* CdbIsBusy */ 226*963f1a54SAndrew Gallatin #define CMIS_CDB_FAILED (1 << 6) /* CdbHasFailed */ 227*963f1a54SAndrew Gallatin #define CMIS_CDB_RESULT_MASK 0x3F /* CdbCommandResult, bits 5:0 */ 228*963f1a54SAndrew Gallatin 229*963f1a54SAndrew Gallatin /* Table 8-20: Media Type Encodings */ 230*963f1a54SAndrew Gallatin #define CMIS_MEDIA_TYPE_UNDEF 0x00 /* Undefined */ 231*963f1a54SAndrew Gallatin #define CMIS_MEDIA_TYPE_MMF 0x01 /* Optical: MMF */ 232*963f1a54SAndrew Gallatin #define CMIS_MEDIA_TYPE_SMF 0x02 /* Optical: SMF */ 233*963f1a54SAndrew Gallatin #define CMIS_MEDIA_TYPE_COPPER 0x03 /* Passive/Active Copper */ 234*963f1a54SAndrew Gallatin #define CMIS_MEDIA_TYPE_ACTIVE 0x04 /* Active Cable */ 235*963f1a54SAndrew Gallatin #define CMIS_MEDIA_TYPE_BASET 0x05 /* BASE-T */ 236*963f1a54SAndrew Gallatin 237*963f1a54SAndrew Gallatin /* Application Descriptor constants */ 238*963f1a54SAndrew Gallatin #define CMIS_APP_DESC_SIZE 4 /* Bytes per descriptor */ 239*963f1a54SAndrew Gallatin #define CMIS_MAX_APP_DESC 8 /* Max descriptors in lower memory */ 240*963f1a54SAndrew Gallatin 241*963f1a54SAndrew Gallatin /* Table 8-22: Offsets within an Application Descriptor */ 242*963f1a54SAndrew Gallatin #define CMIS_APP_HOST_IF_ID 0 /* HostInterfaceID */ 243*963f1a54SAndrew Gallatin #define CMIS_APP_MEDIA_IF_ID 1 /* MediaInterfaceID */ 244*963f1a54SAndrew Gallatin #define CMIS_APP_LANE_COUNT 2 /* Host[7:4], Media[3:0] */ 245*963f1a54SAndrew Gallatin #define CMIS_APP_HOST_ASSIGN 3 /* HostLaneAssignment */ 246*963f1a54SAndrew Gallatin #define CMIS_APP_HOST_LANES_MASK 0xF0 /* HostLaneCount, bits 7:4 */ 247*963f1a54SAndrew Gallatin #define CMIS_APP_HOST_LANES_SHIFT 4 248*963f1a54SAndrew Gallatin #define CMIS_APP_MEDIA_LANES_MASK 0x0F /* MediaLaneCount, bits 3:0 */ 249*963f1a54SAndrew Gallatin 250*963f1a54SAndrew Gallatin /* 251*963f1a54SAndrew Gallatin * Table 8-26: Page 00h - Administrative Information 252*963f1a54SAndrew Gallatin * Accessed with page=0x00, bank=0. 253*963f1a54SAndrew Gallatin */ 254*963f1a54SAndrew Gallatin enum { 255*963f1a54SAndrew Gallatin CMIS_P0_ID = 128, /* SFF-8024 Identifier copy */ 256*963f1a54SAndrew Gallatin CMIS_P0_VENDOR_NAME = 129, /* Vendor name (16 bytes, ASCII) */ 257*963f1a54SAndrew Gallatin CMIS_P0_VENDOR_OUI = 145, /* Vendor IEEE OUI (3 bytes) */ 258*963f1a54SAndrew Gallatin CMIS_P0_VENDOR_PN = 148, /* Part number (16 bytes, ASCII) */ 259*963f1a54SAndrew Gallatin CMIS_P0_VENDOR_REV = 164, /* Vendor revision (2 bytes) */ 260*963f1a54SAndrew Gallatin CMIS_P0_VENDOR_SN = 166, /* Serial number (16 bytes, ASCII) */ 261*963f1a54SAndrew Gallatin CMIS_P0_DATE_CODE = 182, /* Date code (8 bytes: YYMMDDLL) */ 262*963f1a54SAndrew Gallatin CMIS_P0_CLEI = 190, /* CLEI code (10 bytes, ASCII) */ 263*963f1a54SAndrew Gallatin CMIS_P0_MOD_POWER = 200, /* Module power class */ 264*963f1a54SAndrew Gallatin CMIS_P0_MAX_POWER = 201, /* Max power (multiples of 0.25W) */ 265*963f1a54SAndrew Gallatin CMIS_P0_CABLE_LEN = 202, /* Cable assembly link length */ 266*963f1a54SAndrew Gallatin CMIS_P0_CONNECTOR = 203, /* Connector type (SFF-8024) */ 267*963f1a54SAndrew Gallatin CMIS_P0_COPPER_ATTEN = 204, /* Copper cable attenuation (6 bytes) */ 268*963f1a54SAndrew Gallatin CMIS_P0_MEDIA_LANE_INFO = 210, /* Supported near end media lanes */ 269*963f1a54SAndrew Gallatin CMIS_P0_CABLE_ASM_INFO = 211, /* Far end breakout info */ 270*963f1a54SAndrew Gallatin CMIS_P0_MEDIA_TECH = 212, /* Media interface technology */ 271*963f1a54SAndrew Gallatin CMIS_P0_MCI_ADVERT = 213, /* MCI advertisement (2 bytes) */ 272*963f1a54SAndrew Gallatin CMIS_P0_PAGE_CKSUM = 222, /* Page checksum (bytes 128-221) */ 273*963f1a54SAndrew Gallatin CMIS_P0_CUSTOM = 223, /* Custom (33 bytes) */ 274*963f1a54SAndrew Gallatin }; 275*963f1a54SAndrew Gallatin 276*963f1a54SAndrew Gallatin /* 277*963f1a54SAndrew Gallatin * Table 8-82: Page 11h - Lane Status and Data Path Status 278*963f1a54SAndrew Gallatin * Accessed with page=0x11, bank=0 (lanes 1-8). 279*963f1a54SAndrew Gallatin */ 280*963f1a54SAndrew Gallatin enum { 281*963f1a54SAndrew Gallatin /* Table 8-83: Data Path States (bytes 128-131) */ 282*963f1a54SAndrew Gallatin CMIS_P11_DPSTATE_12 = 128, /* DPState for host lanes 1-2 */ 283*963f1a54SAndrew Gallatin CMIS_P11_DPSTATE_34 = 129, /* DPState for host lanes 3-4 */ 284*963f1a54SAndrew Gallatin CMIS_P11_DPSTATE_56 = 130, /* DPState for host lanes 5-6 */ 285*963f1a54SAndrew Gallatin CMIS_P11_DPSTATE_78 = 131, /* DPState for host lanes 7-8 */ 286*963f1a54SAndrew Gallatin 287*963f1a54SAndrew Gallatin /* Table 8-85: Lane Output Status (bytes 132-133) */ 288*963f1a54SAndrew Gallatin CMIS_P11_OUTPUT_RX = 132, /* OutputStatusRx per lane */ 289*963f1a54SAndrew Gallatin CMIS_P11_OUTPUT_TX = 133, /* OutputStatusTx per lane */ 290*963f1a54SAndrew Gallatin 291*963f1a54SAndrew Gallatin /* Table 8-86: State Changed Flags (bytes 134-135) */ 292*963f1a54SAndrew Gallatin CMIS_P11_DPSTATE_CHGD = 134, /* DPStateChanged flags */ 293*963f1a54SAndrew Gallatin CMIS_P11_OUTPUT_CHGD_TX = 135, /* OutputStatusChangedTx flags*/ 294*963f1a54SAndrew Gallatin 295*963f1a54SAndrew Gallatin /* Table 8-87: Lane-Specific Tx Flags (bytes 136-141) */ 296*963f1a54SAndrew Gallatin CMIS_P11_TX_FAULT = 136, /* TxFault per lane */ 297*963f1a54SAndrew Gallatin CMIS_P11_TX_LOS = 137, /* TxLOS per lane */ 298*963f1a54SAndrew Gallatin CMIS_P11_TX_CDR_LOL = 138, /* TxCDRLOL per lane */ 299*963f1a54SAndrew Gallatin CMIS_P11_TX_ADPT_EQ_FAIL = 139, /* TxAdaptEqFail per lane */ 300*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_HIGH_ALM = 140, /* TxPowerHighAlarm per lane */ 301*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_LOW_ALM = 141, /* TxPowerLowAlarm per lane */ 302*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_HIGH_ALM = 142, /* TxBiasHighAlarm per lane */ 303*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_LOW_ALM = 143, /* TxBiasLowAlarm per lane */ 304*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_HIGH_WARN = 144, /* TxPowerHighWarning per lane*/ 305*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_LOW_WARN = 145, /* TxPowerLowWarning per lane */ 306*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_HIGH_WARN = 146, /* TxBiasHighWarning per lane */ 307*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_LOW_WARN = 147, /* TxBiasLowWarning per lane */ 308*963f1a54SAndrew Gallatin 309*963f1a54SAndrew Gallatin /* Table 8-88: Rx Flags (bytes 148-153) */ 310*963f1a54SAndrew Gallatin CMIS_P11_RX_LOS = 148, /* RxLOS per lane */ 311*963f1a54SAndrew Gallatin CMIS_P11_RX_CDR_LOL = 149, /* RxCDRLOL per lane */ 312*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_HIGH_ALM = 150, /* RxPowerHighAlarm per lane */ 313*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_LOW_ALM = 151, /* RxPowerLowAlarm per lane */ 314*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_HIGH_WARN = 152, /* RxPowerHighWarning per lane*/ 315*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_LOW_WARN = 153, /* RxPowerLowWarning per lane */ 316*963f1a54SAndrew Gallatin 317*963f1a54SAndrew Gallatin /* Table 8-89: Lane-Specific Monitors (bytes 154-201) */ 318*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_1 = 154, /* U16 Tx optical pwr, lane 1 */ 319*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_2 = 156, /* (0.1 uW increments) */ 320*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_3 = 158, 321*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_4 = 160, 322*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_5 = 162, 323*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_6 = 164, 324*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_7 = 166, 325*963f1a54SAndrew Gallatin CMIS_P11_TX_PWR_8 = 168, 326*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_1 = 170, /* U16 Tx bias current, lane 1*/ 327*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_2 = 172, /* (2 uA increments) */ 328*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_3 = 174, 329*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_4 = 176, 330*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_5 = 178, 331*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_6 = 180, 332*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_7 = 182, 333*963f1a54SAndrew Gallatin CMIS_P11_TX_BIAS_8 = 184, 334*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_1 = 186, /* U16 Rx input power, lane 1 */ 335*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_2 = 188, /* (0.1 uW increments) */ 336*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_3 = 190, 337*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_4 = 192, 338*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_5 = 194, 339*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_6 = 196, 340*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_7 = 198, 341*963f1a54SAndrew Gallatin CMIS_P11_RX_PWR_8 = 200, 342*963f1a54SAndrew Gallatin 343*963f1a54SAndrew Gallatin /* Table 8-90: Config Command Status (bytes 202-205) */ 344*963f1a54SAndrew Gallatin CMIS_P11_CONFIG_STAT_12 = 202, /* ConfigStatus lanes 1-2 */ 345*963f1a54SAndrew Gallatin CMIS_P11_CONFIG_STAT_34 = 203, /* ConfigStatus lanes 3-4 */ 346*963f1a54SAndrew Gallatin CMIS_P11_CONFIG_STAT_56 = 204, /* ConfigStatus lanes 5-6 */ 347*963f1a54SAndrew Gallatin CMIS_P11_CONFIG_STAT_78 = 205, /* ConfigStatus lanes 7-8 */ 348*963f1a54SAndrew Gallatin 349*963f1a54SAndrew Gallatin /* Table 8-93: Active Control Set (bytes 206-234) */ 350*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG1 = 206, /* DPConfigLane1 (AppSel[7:4])*/ 351*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG2 = 207, /* DPConfigLane2 */ 352*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG3 = 208, /* DPConfigLane3 */ 353*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG4 = 209, /* DPConfigLane4 */ 354*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG5 = 210, /* DPConfigLane5 */ 355*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG6 = 211, /* DPConfigLane6 */ 356*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG7 = 212, /* DPConfigLane7 */ 357*963f1a54SAndrew Gallatin CMIS_P11_ACS_DPCONFIG8 = 213, /* DPConfigLane8 */ 358*963f1a54SAndrew Gallatin CMIS_P11_ACS_TX_START = 214, /* Provisioned Tx Controls */ 359*963f1a54SAndrew Gallatin CMIS_P11_ACS_TX_END = 225, 360*963f1a54SAndrew Gallatin CMIS_P11_ACS_RX_START = 226, /* Provisioned Rx Controls */ 361*963f1a54SAndrew Gallatin CMIS_P11_ACS_RX_END = 234, 362*963f1a54SAndrew Gallatin 363*963f1a54SAndrew Gallatin /* Table 8-96: Data Path Conditions (bytes 235-239) */ 364*963f1a54SAndrew Gallatin CMIS_P11_DP_COND_START = 235, 365*963f1a54SAndrew Gallatin CMIS_P11_DP_COND_END = 239, 366*963f1a54SAndrew Gallatin 367*963f1a54SAndrew Gallatin /* Table 8-97: Media Lane Mapping (bytes 240-255) */ 368*963f1a54SAndrew Gallatin CMIS_P11_MEDIA_MAP_START = 240, 369*963f1a54SAndrew Gallatin CMIS_P11_MEDIA_MAP_END = 255, 370*963f1a54SAndrew Gallatin }; 371*963f1a54SAndrew Gallatin 372*963f1a54SAndrew Gallatin /* 373*963f1a54SAndrew Gallatin * Per-lane bit positions for Page 11h flag/status registers. 374*963f1a54SAndrew Gallatin * Bytes 132-153 use bit N for lane N+1 (bit 7 = lane 8, bit 0 = lane 1). 375*963f1a54SAndrew Gallatin */ 376*963f1a54SAndrew Gallatin #define CMIS_LANE8 (1 << 7) 377*963f1a54SAndrew Gallatin #define CMIS_LANE7 (1 << 6) 378*963f1a54SAndrew Gallatin #define CMIS_LANE6 (1 << 5) 379*963f1a54SAndrew Gallatin #define CMIS_LANE5 (1 << 4) 380*963f1a54SAndrew Gallatin #define CMIS_LANE4 (1 << 3) 381*963f1a54SAndrew Gallatin #define CMIS_LANE3 (1 << 2) 382*963f1a54SAndrew Gallatin #define CMIS_LANE2 (1 << 1) 383*963f1a54SAndrew Gallatin #define CMIS_LANE1 (1 << 0) 384*963f1a54SAndrew Gallatin 385*963f1a54SAndrew Gallatin /* 386*963f1a54SAndrew Gallatin * DPState encoding within bytes 128-131 (Table 8-83). 387*963f1a54SAndrew Gallatin * Each byte holds two 4-bit DPState fields: 388*963f1a54SAndrew Gallatin * bits 7:4 = even lane, bits 3:0 = odd lane. 389*963f1a54SAndrew Gallatin */ 390*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_HI_MASK 0xF0 /* Upper nibble (even lane) */ 391*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_HI_SHIFT 4 392*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_LO_MASK 0x0F /* Lower nibble (odd lane) */ 393*963f1a54SAndrew Gallatin 394*963f1a54SAndrew Gallatin /* Table 8-84: Data Path State Encoding */ 395*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_DEACTIVATED 1 /* DPDeactivated (or unused) */ 396*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_INIT 2 /* DPInit */ 397*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_DEINIT 3 /* DPDeinit */ 398*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_ACTIVATED 4 /* DPActivated */ 399*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_TXTURNON 5 /* DPTxTurnOn */ 400*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_TXTURNOFF 6 /* DPTxTurnOff */ 401*963f1a54SAndrew Gallatin #define CMIS_DPSTATE_INITIALIZED 7 /* DPInitialized */ 402*963f1a54SAndrew Gallatin 403*963f1a54SAndrew Gallatin /* 404*963f1a54SAndrew Gallatin * ConfigStatus encoding within bytes 202-205 (Table 8-90/91). 405*963f1a54SAndrew Gallatin * Each byte holds two 4-bit status fields, same nibble layout as DPState. 406*963f1a54SAndrew Gallatin */ 407*963f1a54SAndrew Gallatin #define CMIS_CFGSTAT_UNDEFINED 0x0 /* Undefined */ 408*963f1a54SAndrew Gallatin #define CMIS_CFGSTAT_SUCCESS 0x1 /* ConfigSuccess */ 409*963f1a54SAndrew Gallatin #define CMIS_CFGSTAT_REJECTED 0x2 /* ConfigRejected */ 410*963f1a54SAndrew Gallatin #define CMIS_CFGSTAT_REJECTEDINV 0x3 /* ConfigRejectedInvalidAppSel*/ 411*963f1a54SAndrew Gallatin #define CMIS_CFGSTAT_INPROGRESS 0x4 /* ConfigInProgress */ 412*963f1a54SAndrew Gallatin #define CMIS_CFGSTAT_REJECTEDLANE 0x5 /* ConfigRejectedInvalidLane */ 413*963f1a54SAndrew Gallatin #define CMIS_CFGSTAT_REJECTEDEQ 0x6 /* ConfigRejectedInvalidEq */ 414*963f1a54SAndrew Gallatin 415*963f1a54SAndrew Gallatin /* DPConfigLane (CMIS_P11_ACS_DPCONFIGn) bit definitions (Table 8-92/93) */ 416*963f1a54SAndrew Gallatin #define CMIS_ACS_APPSEL_MASK 0xF0 /* AppSel code, bits 7:4 */ 417*963f1a54SAndrew Gallatin #define CMIS_ACS_APPSEL_SHIFT 4 418*963f1a54SAndrew Gallatin #define CMIS_ACS_DATAPATH_MASK 0x0F /* DataPathID, bits 3:0 */ 419*963f1a54SAndrew Gallatin 420*963f1a54SAndrew Gallatin /* 421*963f1a54SAndrew Gallatin * Page 00h bit definitions 422*963f1a54SAndrew Gallatin */ 423*963f1a54SAndrew Gallatin 424*963f1a54SAndrew Gallatin /* Byte 200 (CMIS_P0_MOD_POWER) bit definitions (Table 8-31) */ 425*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_MASK 0xE0 /* ModulePowerClass, bits 7:5 */ 426*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_SHIFT 5 427*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_1 0 /* <=1.5W */ 428*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_2 1 /* <=3.5W */ 429*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_3 2 /* <=7.0W */ 430*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_4 3 /* <=8.0W */ 431*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_5 4 /* <=10.0W */ 432*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_6 5 /* <=12.0W */ 433*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_7 6 /* <=14.0W */ 434*963f1a54SAndrew Gallatin #define CMIS_POWER_CLASS_8 7 /* >14.0W, see MaxPower byte */ 435*963f1a54SAndrew Gallatin #define CMIS_POWER_MAX_IN_BYTE (1 << 4) /* MaxPowerOverride: byte 201*/ 436*963f1a54SAndrew Gallatin 437*963f1a54SAndrew Gallatin /* Byte 202 (CMIS_P0_CABLE_LEN) bit definitions (Table 8-32) */ 438*963f1a54SAndrew Gallatin #define CMIS_CABLE_LEN_MULT_MASK 0xC0 /* LengthMultiplier, bits 7:6 */ 439*963f1a54SAndrew Gallatin #define CMIS_CABLE_LEN_MULT_SHIFT 6 440*963f1a54SAndrew Gallatin #define CMIS_CABLE_LEN_VAL_MASK 0x3F /* Length value, bits 5:0 */ 441*963f1a54SAndrew Gallatin #define CMIS_CABLE_LEN_MULT_01 0 /* x 0.1m */ 442*963f1a54SAndrew Gallatin #define CMIS_CABLE_LEN_MULT_1 1 /* x 1m */ 443*963f1a54SAndrew Gallatin #define CMIS_CABLE_LEN_MULT_10 2 /* x 10m */ 444*963f1a54SAndrew Gallatin #define CMIS_CABLE_LEN_MULT_100 3 /* x 100m */ 445*963f1a54SAndrew Gallatin 446*963f1a54SAndrew Gallatin /* Lane monitor stride (each monitor is U16 = 2 bytes per lane) */ 447*963f1a54SAndrew Gallatin #define CMIS_LANE_MON_SIZE 2 448*963f1a54SAndrew Gallatin #define CMIS_MAX_LANES 8 449*963f1a54SAndrew Gallatin 450*963f1a54SAndrew Gallatin #endif /* !_NET_CMIS_H_ */ 451