1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright(c) 2024 Intel Corporation. */ 3 4 #ifndef _IXGBE_TYPE_E610_H_ 5 #define _IXGBE_TYPE_E610_H_ 6 7 #define BYTES_PER_DWORD 4 8 9 /* General E610 defines */ 10 #define IXGBE_MAX_VSI 768 11 12 /* Checksum and Shadow RAM pointers */ 13 #define E610_SR_SW_CHECKSUM_WORD 0x3F 14 15 /* Shadow RAM related */ 16 #define IXGBE_SR_WORDS_IN_1KB 512 17 18 /* Firmware Status Register (GL_FWSTS) */ 19 #define GL_FWSTS 0x00083048 /* Reset Source: POR */ 20 #define GL_FWSTS_EP_PF0 BIT(24) 21 #define GL_FWSTS_EP_PF1 BIT(25) 22 23 /* Global NVM General Status Register */ 24 #define GLNVM_GENS 0x000B6100 /* Reset Source: POR */ 25 #define GLNVM_GENS_SR_SIZE_M GENMASK(7, 5) 26 27 /* Flash Access Register */ 28 #define IXGBE_GLNVM_FLA 0x000B6108 /* Reset Source: POR */ 29 #define IXGBE_GLNVM_FLA_LOCKED_S 6 30 #define IXGBE_GLNVM_FLA_LOCKED_M BIT(6) 31 32 /* Admin Command Interface (ACI) registers */ 33 #define IXGBE_PF_HIDA(_i) (0x00085000 + ((_i) * 4)) 34 #define IXGBE_PF_HIDA_2(_i) (0x00085020 + ((_i) * 4)) 35 #define IXGBE_PF_HIBA(_i) (0x00084000 + ((_i) * 4)) 36 #define IXGBE_PF_HICR 0x00082048 37 38 #define IXGBE_PF_HICR_EN BIT(0) 39 #define IXGBE_PF_HICR_C BIT(1) 40 #define IXGBE_PF_HICR_SV BIT(2) 41 #define IXGBE_PF_HICR_EV BIT(3) 42 43 #define IXGBE_ACI_DESC_SIZE 32 44 #define IXGBE_ACI_DESC_SIZE_IN_DWORDS (IXGBE_ACI_DESC_SIZE / BYTES_PER_DWORD) 45 46 #define IXGBE_ACI_MAX_BUFFER_SIZE 4096 /* Size in bytes */ 47 #define IXGBE_ACI_SEND_DELAY_TIME_MS 10 48 #define IXGBE_ACI_SEND_MAX_EXECUTE 3 49 #define IXGBE_ACI_SEND_TIMEOUT_MS \ 50 (IXGBE_ACI_SEND_MAX_EXECUTE * IXGBE_ACI_SEND_DELAY_TIME_MS) 51 /* [ms] timeout of waiting for sync response */ 52 #define IXGBE_ACI_SYNC_RESPONSE_TIMEOUT 100000 53 /* [ms] timeout of waiting for async response */ 54 #define IXGBE_ACI_ASYNC_RESPONSE_TIMEOUT 150000 55 /* [ms] timeout of waiting for resource release */ 56 #define IXGBE_ACI_RELEASE_RES_TIMEOUT 10000 57 58 /* FW defined boundary for a large buffer, 4k >= Large buffer > 512 bytes */ 59 #define IXGBE_ACI_LG_BUF 512 60 61 /* Flags sub-structure 62 * |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 | 63 * |DD |CMP|ERR|VFE| * * RESERVED * * |LB |RD |VFC|BUF|SI |EI |FE | 64 */ 65 66 #define IXGBE_ACI_FLAG_DD BIT(0) /* 0x1 */ 67 #define IXGBE_ACI_FLAG_CMP BIT(1) /* 0x2 */ 68 #define IXGBE_ACI_FLAG_ERR BIT(2) /* 0x4 */ 69 #define IXGBE_ACI_FLAG_VFE BIT(3) /* 0x8 */ 70 #define IXGBE_ACI_FLAG_LB BIT(9) /* 0x200 */ 71 #define IXGBE_ACI_FLAG_RD BIT(10) /* 0x400 */ 72 #define IXGBE_ACI_FLAG_VFC BIT(11) /* 0x800 */ 73 #define IXGBE_ACI_FLAG_BUF BIT(12) /* 0x1000 */ 74 #define IXGBE_ACI_FLAG_SI BIT(13) /* 0x2000 */ 75 #define IXGBE_ACI_FLAG_EI BIT(14) /* 0x4000 */ 76 #define IXGBE_ACI_FLAG_FE BIT(15) /* 0x8000 */ 77 78 /* Admin Command Interface (ACI) error codes */ 79 enum ixgbe_aci_err { 80 IXGBE_ACI_RC_OK = 0, /* Success */ 81 IXGBE_ACI_RC_EPERM = 1, /* Operation not permitted */ 82 IXGBE_ACI_RC_ENOENT = 2, /* No such element */ 83 IXGBE_ACI_RC_ESRCH = 3, /* Bad opcode */ 84 IXGBE_ACI_RC_EINTR = 4, /* Operation interrupted */ 85 IXGBE_ACI_RC_EIO = 5, /* I/O error */ 86 IXGBE_ACI_RC_ENXIO = 6, /* No such resource */ 87 IXGBE_ACI_RC_E2BIG = 7, /* Arg too long */ 88 IXGBE_ACI_RC_EAGAIN = 8, /* Try again */ 89 IXGBE_ACI_RC_ENOMEM = 9, /* Out of memory */ 90 IXGBE_ACI_RC_EACCES = 10, /* Permission denied */ 91 IXGBE_ACI_RC_EFAULT = 11, /* Bad address */ 92 IXGBE_ACI_RC_EBUSY = 12, /* Device or resource busy */ 93 IXGBE_ACI_RC_EEXIST = 13, /* Object already exists */ 94 IXGBE_ACI_RC_EINVAL = 14, /* Invalid argument */ 95 IXGBE_ACI_RC_ENOTTY = 15, /* Not a typewriter */ 96 IXGBE_ACI_RC_ENOSPC = 16, /* No space left or alloc failure */ 97 IXGBE_ACI_RC_ENOSYS = 17, /* Function not implemented */ 98 IXGBE_ACI_RC_ERANGE = 18, /* Parameter out of range */ 99 IXGBE_ACI_RC_EFLUSHED = 19, /* Cmd flushed due to prev cmd error */ 100 IXGBE_ACI_RC_BAD_ADDR = 20, /* Descriptor contains a bad pointer */ 101 IXGBE_ACI_RC_EMODE = 21, /* Op not allowed in current dev mode */ 102 IXGBE_ACI_RC_EFBIG = 22, /* File too big */ 103 IXGBE_ACI_RC_ESBCOMP = 23, /* SB-IOSF completion unsuccessful */ 104 IXGBE_ACI_RC_ENOSEC = 24, /* Missing security manifest */ 105 IXGBE_ACI_RC_EBADSIG = 25, /* Bad RSA signature */ 106 IXGBE_ACI_RC_ESVN = 26, /* SVN number prohibits this package */ 107 IXGBE_ACI_RC_EBADMAN = 27, /* Manifest hash mismatch */ 108 IXGBE_ACI_RC_EBADBUF = 28, /* Buffer hash mismatches manifest */ 109 IXGBE_ACI_RC_EACCES_BMCU = 29, /* BMC Update in progress */ 110 }; 111 112 /* Admin Command Interface (ACI) opcodes */ 113 enum ixgbe_aci_opc { 114 ixgbe_aci_opc_get_ver = 0x0001, 115 ixgbe_aci_opc_driver_ver = 0x0002, 116 ixgbe_aci_opc_get_exp_err = 0x0005, 117 118 /* resource ownership */ 119 ixgbe_aci_opc_req_res = 0x0008, 120 ixgbe_aci_opc_release_res = 0x0009, 121 122 /* device/function capabilities */ 123 ixgbe_aci_opc_list_func_caps = 0x000A, 124 ixgbe_aci_opc_list_dev_caps = 0x000B, 125 126 /* safe disable of RXEN */ 127 ixgbe_aci_opc_disable_rxen = 0x000C, 128 129 /* FW events */ 130 ixgbe_aci_opc_get_fw_event = 0x0014, 131 132 /* PHY commands */ 133 ixgbe_aci_opc_get_phy_caps = 0x0600, 134 ixgbe_aci_opc_set_phy_cfg = 0x0601, 135 ixgbe_aci_opc_restart_an = 0x0605, 136 ixgbe_aci_opc_get_link_status = 0x0607, 137 ixgbe_aci_opc_set_event_mask = 0x0613, 138 ixgbe_aci_opc_get_link_topo = 0x06E0, 139 ixgbe_aci_opc_get_link_topo_pin = 0x06E1, 140 ixgbe_aci_opc_read_i2c = 0x06E2, 141 ixgbe_aci_opc_write_i2c = 0x06E3, 142 ixgbe_aci_opc_read_mdio = 0x06E4, 143 ixgbe_aci_opc_write_mdio = 0x06E5, 144 ixgbe_aci_opc_set_gpio_by_func = 0x06E6, 145 ixgbe_aci_opc_get_gpio_by_func = 0x06E7, 146 ixgbe_aci_opc_set_gpio = 0x06EC, 147 ixgbe_aci_opc_get_gpio = 0x06ED, 148 ixgbe_aci_opc_sff_eeprom = 0x06EE, 149 ixgbe_aci_opc_prog_topo_dev_nvm = 0x06F2, 150 ixgbe_aci_opc_read_topo_dev_nvm = 0x06F3, 151 152 /* NVM commands */ 153 ixgbe_aci_opc_nvm_read = 0x0701, 154 ixgbe_aci_opc_nvm_erase = 0x0702, 155 ixgbe_aci_opc_nvm_write = 0x0703, 156 ixgbe_aci_opc_nvm_cfg_read = 0x0704, 157 ixgbe_aci_opc_nvm_cfg_write = 0x0705, 158 ixgbe_aci_opc_nvm_checksum = 0x0706, 159 ixgbe_aci_opc_nvm_write_activate = 0x0707, 160 ixgbe_aci_opc_nvm_sr_dump = 0x0707, 161 ixgbe_aci_opc_nvm_save_factory_settings = 0x0708, 162 ixgbe_aci_opc_nvm_update_empr = 0x0709, 163 ixgbe_aci_opc_nvm_pkg_data = 0x070A, 164 ixgbe_aci_opc_nvm_pass_component_tbl = 0x070B, 165 166 /* Alternate Structure Commands */ 167 ixgbe_aci_opc_write_alt_direct = 0x0900, 168 ixgbe_aci_opc_write_alt_indirect = 0x0901, 169 ixgbe_aci_opc_read_alt_direct = 0x0902, 170 ixgbe_aci_opc_read_alt_indirect = 0x0903, 171 ixgbe_aci_opc_done_alt_write = 0x0904, 172 ixgbe_aci_opc_clear_port_alt_write = 0x0906, 173 174 /* TCA Events */ 175 ixgbe_aci_opc_temp_tca_event = 0x0C94, 176 177 /* debug commands */ 178 ixgbe_aci_opc_debug_dump_internals = 0xFF08, 179 180 /* SystemDiagnostic commands */ 181 ixgbe_aci_opc_set_health_status_config = 0xFF20, 182 ixgbe_aci_opc_get_supported_health_status_codes = 0xFF21, 183 ixgbe_aci_opc_get_health_status = 0xFF22, 184 ixgbe_aci_opc_clear_health_status = 0xFF23, 185 }; 186 187 /* Get version (direct 0x0001) */ 188 struct ixgbe_aci_cmd_get_ver { 189 __le32 rom_ver; 190 __le32 fw_build; 191 u8 fw_branch; 192 u8 fw_major; 193 u8 fw_minor; 194 u8 fw_patch; 195 u8 api_branch; 196 u8 api_major; 197 u8 api_minor; 198 u8 api_patch; 199 }; 200 201 #define IXGBE_DRV_VER_STR_LEN_E610 32 202 203 /* Send driver version (indirect 0x0002) */ 204 struct ixgbe_aci_cmd_driver_ver { 205 u8 major_ver; 206 u8 minor_ver; 207 u8 build_ver; 208 u8 subbuild_ver; 209 u8 reserved[4]; 210 __le32 addr_high; 211 __le32 addr_low; 212 }; 213 214 /* Get Expanded Error Code (0x0005, direct) */ 215 struct ixgbe_aci_cmd_get_exp_err { 216 __le32 reason; 217 #define IXGBE_ACI_EXPANDED_ERROR_NOT_PROVIDED 0xFFFFFFFF 218 __le32 identifier; 219 u8 rsvd[8]; 220 }; 221 222 /* FW update timeout definitions are in milliseconds */ 223 #define IXGBE_NVM_TIMEOUT 180000 224 225 enum ixgbe_aci_res_access_type { 226 IXGBE_RES_READ = 1, 227 IXGBE_RES_WRITE 228 }; 229 230 enum ixgbe_aci_res_ids { 231 IXGBE_NVM_RES_ID = 1, 232 IXGBE_SPD_RES_ID, 233 IXGBE_CHANGE_LOCK_RES_ID, 234 IXGBE_GLOBAL_CFG_LOCK_RES_ID 235 }; 236 237 /* Request resource ownership (direct 0x0008) 238 * Release resource ownership (direct 0x0009) 239 */ 240 struct ixgbe_aci_cmd_req_res { 241 __le16 res_id; 242 __le16 access_type; 243 244 /* Upon successful completion, FW writes this value and driver is 245 * expected to release resource before timeout. This value is provided 246 * in milliseconds. 247 */ 248 __le32 timeout; 249 #define IXGBE_ACI_RES_NVM_READ_DFLT_TIMEOUT_MS 3000 250 #define IXGBE_ACI_RES_NVM_WRITE_DFLT_TIMEOUT_MS 180000 251 #define IXGBE_ACI_RES_CHNG_LOCK_DFLT_TIMEOUT_MS 1000 252 #define IXGBE_ACI_RES_GLBL_LOCK_DFLT_TIMEOUT_MS 3000 253 /* For SDP: pin ID of the SDP */ 254 __le32 res_number; 255 __le16 status; 256 #define IXGBE_ACI_RES_GLBL_SUCCESS 0 257 #define IXGBE_ACI_RES_GLBL_IN_PROG 1 258 #define IXGBE_ACI_RES_GLBL_DONE 2 259 u8 reserved[2]; 260 }; 261 262 /* Get function capabilities (indirect 0x000A) 263 * Get device capabilities (indirect 0x000B) 264 */ 265 struct ixgbe_aci_cmd_list_caps { 266 u8 cmd_flags; 267 u8 pf_index; 268 u8 reserved[2]; 269 __le32 count; 270 __le32 addr_high; 271 __le32 addr_low; 272 }; 273 274 /* Device/Function buffer entry, repeated per reported capability */ 275 struct ixgbe_aci_cmd_list_caps_elem { 276 __le16 cap; 277 #define IXGBE_ACI_CAPS_VALID_FUNCTIONS 0x0005 278 #define IXGBE_ACI_MAX_VALID_FUNCTIONS 0x8 279 #define IXGBE_ACI_CAPS_SRIOV 0x0012 280 #define IXGBE_ACI_CAPS_VF 0x0013 281 #define IXGBE_ACI_CAPS_VMDQ 0x0014 282 #define IXGBE_ACI_CAPS_VSI 0x0017 283 #define IXGBE_ACI_CAPS_DCB 0x0018 284 #define IXGBE_ACI_CAPS_RSS 0x0040 285 #define IXGBE_ACI_CAPS_RXQS 0x0041 286 #define IXGBE_ACI_CAPS_TXQS 0x0042 287 #define IXGBE_ACI_CAPS_MSIX 0x0043 288 #define IXGBE_ACI_CAPS_FD 0x0045 289 #define IXGBE_ACI_CAPS_1588 0x0046 290 #define IXGBE_ACI_CAPS_MAX_MTU 0x0047 291 #define IXGBE_ACI_CAPS_NVM_VER 0x0048 292 #define IXGBE_ACI_CAPS_PENDING_NVM_VER 0x0049 293 #define IXGBE_ACI_CAPS_OROM_VER 0x004A 294 #define IXGBE_ACI_CAPS_PENDING_OROM_VER 0x004B 295 #define IXGBE_ACI_CAPS_PENDING_NET_VER 0x004D 296 #define IXGBE_ACI_CAPS_INLINE_IPSEC 0x0070 297 #define IXGBE_ACI_CAPS_NUM_ENABLED_PORTS 0x0072 298 #define IXGBE_ACI_CAPS_PCIE_RESET_AVOIDANCE 0x0076 299 #define IXGBE_ACI_CAPS_POST_UPDATE_RESET_RESTRICT 0x0077 300 #define IXGBE_ACI_CAPS_NVM_MGMT 0x0080 301 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG0 0x0081 302 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG1 0x0082 303 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG2 0x0083 304 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG3 0x0084 305 u8 major_ver; 306 u8 minor_ver; 307 /* Number of resources described by this capability */ 308 __le32 number; 309 /* Only meaningful for some types of resources */ 310 __le32 logical_id; 311 /* Only meaningful for some types of resources */ 312 __le32 phys_id; 313 __le64 rsvd1; 314 __le64 rsvd2; 315 }; 316 317 /* Disable RXEN (direct 0x000C) */ 318 struct ixgbe_aci_cmd_disable_rxen { 319 u8 lport_num; 320 u8 reserved[15]; 321 }; 322 323 /* Get PHY capabilities (indirect 0x0600) */ 324 struct ixgbe_aci_cmd_get_phy_caps { 325 u8 lport_num; 326 u8 reserved; 327 __le16 param0; 328 /* 18.0 - Report qualified modules */ 329 #define IXGBE_ACI_GET_PHY_RQM BIT(0) 330 /* 18.1 - 18.3 : Report mode 331 * 000b - Report topology capabilities, without media 332 * 001b - Report topology capabilities, with media 333 * 010b - Report Active configuration 334 * 011b - Report PHY Type and FEC mode capabilities 335 * 100b - Report Default capabilities 336 */ 337 #define IXGBE_ACI_REPORT_MODE_M GENMASK(3, 1) 338 #define IXGBE_ACI_REPORT_TOPO_CAP_NO_MEDIA 0 339 #define IXGBE_ACI_REPORT_TOPO_CAP_MEDIA BIT(1) 340 #define IXGBE_ACI_REPORT_ACTIVE_CFG BIT(2) 341 #define IXGBE_ACI_REPORT_DFLT_CFG BIT(3) 342 __le32 reserved1; 343 __le32 addr_high; 344 __le32 addr_low; 345 }; 346 347 /* This is #define of PHY type (Extended): 348 * The first set of defines is for phy_type_low. 349 */ 350 #define IXGBE_PHY_TYPE_LOW_100BASE_TX BIT_ULL(0) 351 #define IXGBE_PHY_TYPE_LOW_100M_SGMII BIT_ULL(1) 352 #define IXGBE_PHY_TYPE_LOW_1000BASE_T BIT_ULL(2) 353 #define IXGBE_PHY_TYPE_LOW_1000BASE_SX BIT_ULL(3) 354 #define IXGBE_PHY_TYPE_LOW_1000BASE_LX BIT_ULL(4) 355 #define IXGBE_PHY_TYPE_LOW_1000BASE_KX BIT_ULL(5) 356 #define IXGBE_PHY_TYPE_LOW_1G_SGMII BIT_ULL(6) 357 #define IXGBE_PHY_TYPE_LOW_2500BASE_T BIT_ULL(7) 358 #define IXGBE_PHY_TYPE_LOW_2500BASE_X BIT_ULL(8) 359 #define IXGBE_PHY_TYPE_LOW_2500BASE_KX BIT_ULL(9) 360 #define IXGBE_PHY_TYPE_LOW_5GBASE_T BIT_ULL(10) 361 #define IXGBE_PHY_TYPE_LOW_5GBASE_KR BIT_ULL(11) 362 #define IXGBE_PHY_TYPE_LOW_10GBASE_T BIT_ULL(12) 363 #define IXGBE_PHY_TYPE_LOW_10G_SFI_DA BIT_ULL(13) 364 #define IXGBE_PHY_TYPE_LOW_10GBASE_SR BIT_ULL(14) 365 #define IXGBE_PHY_TYPE_LOW_10GBASE_LR BIT_ULL(15) 366 #define IXGBE_PHY_TYPE_LOW_10GBASE_KR_CR1 BIT_ULL(16) 367 #define IXGBE_PHY_TYPE_LOW_10G_SFI_AOC_ACC BIT_ULL(17) 368 #define IXGBE_PHY_TYPE_LOW_10G_SFI_C2C BIT_ULL(18) 369 #define IXGBE_PHY_TYPE_LOW_25GBASE_T BIT_ULL(19) 370 #define IXGBE_PHY_TYPE_LOW_25GBASE_CR BIT_ULL(20) 371 #define IXGBE_PHY_TYPE_LOW_25GBASE_CR_S BIT_ULL(21) 372 #define IXGBE_PHY_TYPE_LOW_25GBASE_CR1 BIT_ULL(22) 373 #define IXGBE_PHY_TYPE_LOW_25GBASE_SR BIT_ULL(23) 374 #define IXGBE_PHY_TYPE_LOW_25GBASE_LR BIT_ULL(24) 375 #define IXGBE_PHY_TYPE_LOW_25GBASE_KR BIT_ULL(25) 376 #define IXGBE_PHY_TYPE_LOW_25GBASE_KR_S BIT_ULL(26) 377 #define IXGBE_PHY_TYPE_LOW_25GBASE_KR1 BIT_ULL(27) 378 #define IXGBE_PHY_TYPE_LOW_25G_AUI_AOC_ACC BIT_ULL(28) 379 #define IXGBE_PHY_TYPE_LOW_25G_AUI_C2C BIT_ULL(29) 380 #define IXGBE_PHY_TYPE_LOW_MAX_INDEX 29 381 /* The second set of defines is for phy_type_high. */ 382 #define IXGBE_PHY_TYPE_HIGH_10BASE_T BIT_ULL(1) 383 #define IXGBE_PHY_TYPE_HIGH_10M_SGMII BIT_ULL(2) 384 #define IXGBE_PHY_TYPE_HIGH_2500M_SGMII BIT_ULL(56) 385 #define IXGBE_PHY_TYPE_HIGH_100M_USXGMII BIT_ULL(57) 386 #define IXGBE_PHY_TYPE_HIGH_1G_USXGMII BIT_ULL(58) 387 #define IXGBE_PHY_TYPE_HIGH_2500M_USXGMII BIT_ULL(59) 388 #define IXGBE_PHY_TYPE_HIGH_5G_USXGMII BIT_ULL(60) 389 #define IXGBE_PHY_TYPE_HIGH_10G_USXGMII BIT_ULL(61) 390 #define IXGBE_PHY_TYPE_HIGH_MAX_INDEX 61 391 392 struct ixgbe_aci_cmd_get_phy_caps_data { 393 __le64 phy_type_low; /* Use values from IXGBE_PHY_TYPE_LOW_* */ 394 __le64 phy_type_high; /* Use values from IXGBE_PHY_TYPE_HIGH_* */ 395 u8 caps; 396 #define IXGBE_ACI_PHY_EN_TX_LINK_PAUSE BIT(0) 397 #define IXGBE_ACI_PHY_EN_RX_LINK_PAUSE BIT(1) 398 #define IXGBE_ACI_PHY_LOW_POWER_MODE BIT(2) 399 #define IXGBE_ACI_PHY_EN_LINK BIT(3) 400 #define IXGBE_ACI_PHY_AN_MODE BIT(4) 401 #define IXGBE_ACI_PHY_EN_MOD_QUAL BIT(5) 402 #define IXGBE_ACI_PHY_EN_LESM BIT(6) 403 #define IXGBE_ACI_PHY_EN_AUTO_FEC BIT(7) 404 #define IXGBE_ACI_PHY_CAPS_MASK GENMASK(7, 0) 405 u8 low_power_ctrl_an; 406 #define IXGBE_ACI_PHY_EN_D3COLD_LOW_POWER_AUTONEG BIT(0) 407 #define IXGBE_ACI_PHY_AN_EN_CLAUSE28 BIT(1) 408 #define IXGBE_ACI_PHY_AN_EN_CLAUSE73 BIT(2) 409 #define IXGBE_ACI_PHY_AN_EN_CLAUSE37 BIT(3) 410 __le16 eee_cap; 411 #define IXGBE_ACI_PHY_EEE_EN_100BASE_TX BIT(0) 412 #define IXGBE_ACI_PHY_EEE_EN_1000BASE_T BIT(1) 413 #define IXGBE_ACI_PHY_EEE_EN_10GBASE_T BIT(2) 414 #define IXGBE_ACI_PHY_EEE_EN_1000BASE_KX BIT(3) 415 #define IXGBE_ACI_PHY_EEE_EN_10GBASE_KR BIT(4) 416 #define IXGBE_ACI_PHY_EEE_EN_25GBASE_KR BIT(5) 417 #define IXGBE_ACI_PHY_EEE_EN_10BASE_T BIT(11) 418 __le16 eeer_value; 419 u8 phy_id_oui[4]; /* PHY/Module ID connected on the port */ 420 u8 phy_fw_ver[8]; 421 u8 link_fec_options; 422 #define IXGBE_ACI_PHY_FEC_10G_KR_40G_KR4_EN BIT(0) 423 #define IXGBE_ACI_PHY_FEC_10G_KR_40G_KR4_REQ BIT(1) 424 #define IXGBE_ACI_PHY_FEC_25G_RS_528_REQ BIT(2) 425 #define IXGBE_ACI_PHY_FEC_25G_KR_REQ BIT(3) 426 #define IXGBE_ACI_PHY_FEC_25G_RS_544_REQ BIT(4) 427 #define IXGBE_ACI_PHY_FEC_25G_RS_CLAUSE91_EN BIT(6) 428 #define IXGBE_ACI_PHY_FEC_25G_KR_CLAUSE74_EN BIT(7) 429 #define IXGBE_ACI_PHY_FEC_MASK 0xdf 430 u8 module_compliance_enforcement; 431 #define IXGBE_ACI_MOD_ENFORCE_STRICT_MODE BIT(0) 432 u8 extended_compliance_code; 433 #define IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE 3 434 u8 module_type[IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE]; 435 #define IXGBE_ACI_MOD_TYPE_BYTE0_SFP_PLUS 0xA0 436 #define IXGBE_ACI_MOD_TYPE_BYTE0_QSFP_PLUS 0x80 437 #define IXGBE_ACI_MOD_TYPE_IDENT 1 438 #define IXGBE_ACI_MOD_TYPE_BYTE1_SFP_PLUS_CU_PASSIVE BIT(0) 439 #define IXGBE_ACI_MOD_TYPE_BYTE1_SFP_PLUS_CU_ACTIVE BIT(1) 440 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_SR BIT(4) 441 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_LR BIT(5) 442 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_LRM BIT(6) 443 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_ER BIT(7) 444 #define IXGBE_ACI_MOD_TYPE_BYTE2_SFP_PLUS 0xA0 445 #define IXGBE_ACI_MOD_TYPE_BYTE2_QSFP_PLUS 0x86 446 u8 qualified_module_count; 447 u8 rsvd2[7]; /* Bytes 47:41 reserved */ 448 #define IXGBE_ACI_QUAL_MOD_COUNT_MAX 16 449 struct { 450 u8 v_oui[3]; 451 u8 rsvd3; 452 u8 v_part[16]; 453 __le32 v_rev; 454 __le64 rsvd4; 455 } qual_modules[IXGBE_ACI_QUAL_MOD_COUNT_MAX]; 456 }; 457 458 /* Set PHY capabilities (direct 0x0601) 459 * NOTE: This command must be followed by setup link and restart auto-neg 460 */ 461 struct ixgbe_aci_cmd_set_phy_cfg { 462 u8 lport_num; 463 u8 reserved[7]; 464 __le32 addr_high; 465 __le32 addr_low; 466 }; 467 468 /* Set PHY config command data structure */ 469 struct ixgbe_aci_cmd_set_phy_cfg_data { 470 __le64 phy_type_low; /* Use values from IXGBE_PHY_TYPE_LOW_* */ 471 __le64 phy_type_high; /* Use values from IXGBE_PHY_TYPE_HIGH_* */ 472 u8 caps; 473 #define IXGBE_ACI_PHY_ENA_VALID_MASK 0xef 474 #define IXGBE_ACI_PHY_ENA_TX_PAUSE_ABILITY BIT(0) 475 #define IXGBE_ACI_PHY_ENA_RX_PAUSE_ABILITY BIT(1) 476 #define IXGBE_ACI_PHY_ENA_LOW_POWER BIT(2) 477 #define IXGBE_ACI_PHY_ENA_LINK BIT(3) 478 #define IXGBE_ACI_PHY_ENA_AUTO_LINK_UPDT BIT(5) 479 #define IXGBE_ACI_PHY_ENA_LESM BIT(6) 480 #define IXGBE_ACI_PHY_ENA_AUTO_FEC BIT(7) 481 u8 low_power_ctrl_an; 482 __le16 eee_cap; /* Value from ixgbe_aci_get_phy_caps */ 483 __le16 eeer_value; /* Use defines from ixgbe_aci_get_phy_caps */ 484 u8 link_fec_opt; /* Use defines from ixgbe_aci_get_phy_caps */ 485 u8 module_compliance_enforcement; 486 }; 487 488 /* Restart AN command data structure (direct 0x0605) 489 * Also used for response, with only the lport_num field present. 490 */ 491 struct ixgbe_aci_cmd_restart_an { 492 u8 lport_num; 493 u8 reserved; 494 u8 cmd_flags; 495 #define IXGBE_ACI_RESTART_AN_LINK_RESTART BIT(1) 496 #define IXGBE_ACI_RESTART_AN_LINK_ENABLE BIT(2) 497 u8 reserved2[13]; 498 }; 499 500 /* Get link status (indirect 0x0607), also used for Link Status Event */ 501 struct ixgbe_aci_cmd_get_link_status { 502 u8 lport_num; 503 u8 reserved; 504 __le16 cmd_flags; 505 #define IXGBE_ACI_LSE_M GENMASK(1, 0) 506 #define IXGBE_ACI_LSE_NOP 0x0 507 #define IXGBE_ACI_LSE_DIS 0x2 508 #define IXGBE_ACI_LSE_ENA 0x3 509 /* only response uses this flag */ 510 #define IXGBE_ACI_LSE_IS_ENABLED 0x1 511 __le32 reserved2; 512 __le32 addr_high; 513 __le32 addr_low; 514 }; 515 516 /* Get link status response data structure, also used for Link Status Event */ 517 struct ixgbe_aci_cmd_get_link_status_data { 518 u8 topo_media_conflict; 519 #define IXGBE_ACI_LINK_TOPO_CONFLICT BIT(0) 520 #define IXGBE_ACI_LINK_MEDIA_CONFLICT BIT(1) 521 #define IXGBE_ACI_LINK_TOPO_CORRUPT BIT(2) 522 #define IXGBE_ACI_LINK_TOPO_UNREACH_PRT BIT(4) 523 #define IXGBE_ACI_LINK_TOPO_UNDRUTIL_PRT BIT(5) 524 #define IXGBE_ACI_LINK_TOPO_UNDRUTIL_MEDIA BIT(6) 525 #define IXGBE_ACI_LINK_TOPO_UNSUPP_MEDIA BIT(7) 526 u8 link_cfg_err; 527 #define IXGBE_ACI_LINK_CFG_ERR BIT(0) 528 #define IXGBE_ACI_LINK_CFG_COMPLETED BIT(1) 529 #define IXGBE_ACI_LINK_ACT_PORT_OPT_INVAL BIT(2) 530 #define IXGBE_ACI_LINK_FEAT_ID_OR_CONFIG_ID_INVAL BIT(3) 531 #define IXGBE_ACI_LINK_TOPO_CRITICAL_SDP_ERR BIT(4) 532 #define IXGBE_ACI_LINK_MODULE_POWER_UNSUPPORTED BIT(5) 533 #define IXGBE_ACI_LINK_EXTERNAL_PHY_LOAD_FAILURE BIT(6) 534 #define IXGBE_ACI_LINK_INVAL_MAX_POWER_LIMIT BIT(7) 535 u8 link_info; 536 #define IXGBE_ACI_LINK_UP BIT(0) /* Link Status */ 537 #define IXGBE_ACI_LINK_FAULT BIT(1) 538 #define IXGBE_ACI_LINK_FAULT_TX BIT(2) 539 #define IXGBE_ACI_LINK_FAULT_RX BIT(3) 540 #define IXGBE_ACI_LINK_FAULT_REMOTE BIT(4) 541 #define IXGBE_ACI_LINK_UP_PORT BIT(5) /* External Port Link Status */ 542 #define IXGBE_ACI_MEDIA_AVAILABLE BIT(6) 543 #define IXGBE_ACI_SIGNAL_DETECT BIT(7) 544 u8 an_info; 545 #define IXGBE_ACI_AN_COMPLETED BIT(0) 546 #define IXGBE_ACI_LP_AN_ABILITY BIT(1) 547 #define IXGBE_ACI_PD_FAULT BIT(2) /* Parallel Detection Fault */ 548 #define IXGBE_ACI_FEC_EN BIT(3) 549 #define IXGBE_ACI_PHY_LOW_POWER BIT(4) /* Low Power State */ 550 #define IXGBE_ACI_LINK_PAUSE_TX BIT(5) 551 #define IXGBE_ACI_LINK_PAUSE_RX BIT(6) 552 #define IXGBE_ACI_QUALIFIED_MODULE BIT(7) 553 u8 ext_info; 554 #define IXGBE_ACI_LINK_PHY_TEMP_ALARM BIT(0) 555 #define IXGBE_ACI_LINK_EXCESSIVE_ERRORS BIT(1) /* Excessive Link Errors */ 556 /* Port Tx Suspended */ 557 #define IXGBE_ACI_LINK_TX_ACTIVE 0 558 #define IXGBE_ACI_LINK_TX_DRAINED 1 559 #define IXGBE_ACI_LINK_TX_FLUSHED 3 560 u8 lb_status; 561 #define IXGBE_ACI_LINK_LB_PHY_LCL BIT(0) 562 #define IXGBE_ACI_LINK_LB_PHY_RMT BIT(1) 563 #define IXGBE_ACI_LINK_LB_MAC_LCL BIT(2) 564 __le16 max_frame_size; 565 u8 cfg; 566 #define IXGBE_ACI_LINK_25G_KR_FEC_EN BIT(0) 567 #define IXGBE_ACI_LINK_25G_RS_528_FEC_EN BIT(1) 568 #define IXGBE_ACI_LINK_25G_RS_544_FEC_EN BIT(2) 569 #define IXGBE_ACI_FEC_MASK GENMASK(2, 0) 570 /* Pacing Config */ 571 #define IXGBE_ACI_CFG_PACING_M GENMASK(6, 3) 572 #define IXGBE_ACI_CFG_PACING_TYPE_M BIT(7) 573 #define IXGBE_ACI_CFG_PACING_TYPE_AVG 0 574 #define IXGBE_ACI_CFG_PACING_TYPE_FIXED IXGBE_ACI_CFG_PACING_TYPE_M 575 /* External Device Power Ability */ 576 u8 power_desc; 577 #define IXGBE_ACI_PWR_CLASS_M GENMASK(5, 0) 578 #define IXGBE_ACI_LINK_PWR_BASET_LOW_HIGH 0 579 #define IXGBE_ACI_LINK_PWR_BASET_HIGH 1 580 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_1 0 581 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_2 1 582 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_3 2 583 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_4 3 584 __le16 link_speed; 585 #define IXGBE_ACI_LINK_SPEED_M GENMASK(10, 0) 586 #define IXGBE_ACI_LINK_SPEED_10MB BIT(0) 587 #define IXGBE_ACI_LINK_SPEED_100MB BIT(1) 588 #define IXGBE_ACI_LINK_SPEED_1000MB BIT(2) 589 #define IXGBE_ACI_LINK_SPEED_2500MB BIT(3) 590 #define IXGBE_ACI_LINK_SPEED_5GB BIT(4) 591 #define IXGBE_ACI_LINK_SPEED_10GB BIT(5) 592 #define IXGBE_ACI_LINK_SPEED_20GB BIT(6) 593 #define IXGBE_ACI_LINK_SPEED_25GB BIT(7) 594 #define IXGBE_ACI_LINK_SPEED_40GB BIT(8) 595 #define IXGBE_ACI_LINK_SPEED_50GB BIT(9) 596 #define IXGBE_ACI_LINK_SPEED_100GB BIT(10) 597 #define IXGBE_ACI_LINK_SPEED_200GB BIT(11) 598 #define IXGBE_ACI_LINK_SPEED_UNKNOWN BIT(15) 599 __le16 reserved3; 600 u8 ext_fec_status; 601 #define IXGBE_ACI_LINK_RS_272_FEC_EN BIT(0) /* RS 272 FEC enabled */ 602 u8 reserved4; 603 __le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */ 604 __le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */ 605 /* Get link status version 2 link partner data */ 606 __le64 lp_phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */ 607 __le64 lp_phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */ 608 u8 lp_fec_adv; 609 #define IXGBE_ACI_LINK_LP_10G_KR_FEC_CAP BIT(0) 610 #define IXGBE_ACI_LINK_LP_25G_KR_FEC_CAP BIT(1) 611 #define IXGBE_ACI_LINK_LP_RS_528_FEC_CAP BIT(2) 612 #define IXGBE_ACI_LINK_LP_50G_KR_272_FEC_CAP BIT(3) 613 #define IXGBE_ACI_LINK_LP_100G_KR_272_FEC_CAP BIT(4) 614 #define IXGBE_ACI_LINK_LP_200G_KR_272_FEC_CAP BIT(5) 615 u8 lp_fec_req; 616 #define IXGBE_ACI_LINK_LP_10G_KR_FEC_REQ BIT(0) 617 #define IXGBE_ACI_LINK_LP_25G_KR_FEC_REQ BIT(1) 618 #define IXGBE_ACI_LINK_LP_RS_528_FEC_REQ BIT(2) 619 #define IXGBE_ACI_LINK_LP_KR_272_FEC_REQ BIT(3) 620 u8 lp_flowcontrol; 621 #define IXGBE_ACI_LINK_LP_PAUSE_ADV BIT(0) 622 #define IXGBE_ACI_LINK_LP_ASM_DIR_ADV BIT(1) 623 u8 reserved5[5]; 624 } __packed; 625 626 /* Set event mask command (direct 0x0613) */ 627 struct ixgbe_aci_cmd_set_event_mask { 628 u8 lport_num; 629 u8 reserved[7]; 630 __le16 event_mask; 631 #define IXGBE_ACI_LINK_EVENT_UPDOWN BIT(1) 632 #define IXGBE_ACI_LINK_EVENT_MEDIA_NA BIT(2) 633 #define IXGBE_ACI_LINK_EVENT_LINK_FAULT BIT(3) 634 #define IXGBE_ACI_LINK_EVENT_PHY_TEMP_ALARM BIT(4) 635 #define IXGBE_ACI_LINK_EVENT_EXCESSIVE_ERRORS BIT(5) 636 #define IXGBE_ACI_LINK_EVENT_SIGNAL_DETECT BIT(6) 637 #define IXGBE_ACI_LINK_EVENT_AN_COMPLETED BIT(7) 638 #define IXGBE_ACI_LINK_EVENT_MODULE_QUAL_FAIL BIT(8) 639 #define IXGBE_ACI_LINK_EVENT_PORT_TX_SUSPENDED BIT(9) 640 #define IXGBE_ACI_LINK_EVENT_TOPO_CONFLICT BIT(10) 641 #define IXGBE_ACI_LINK_EVENT_MEDIA_CONFLICT BIT(11) 642 #define IXGBE_ACI_LINK_EVENT_PHY_FW_LOAD_FAIL BIT(12) 643 u8 reserved1[6]; 644 }; 645 646 struct ixgbe_aci_cmd_link_topo_params { 647 u8 lport_num; 648 u8 lport_num_valid; 649 #define IXGBE_ACI_LINK_TOPO_PORT_NUM_VALID BIT(0) 650 u8 node_type_ctx; 651 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_M GENMASK(3, 0) 652 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_PHY 0 653 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_GPIO_CTRL 1 654 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_MUX_CTRL 2 655 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_LED_CTRL 3 656 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_LED 4 657 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_THERMAL 5 658 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_CAGE 6 659 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_MEZZ 7 660 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_ID_EEPROM 8 661 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_CLK_CTRL 9 662 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_CLK_MUX 10 663 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_GPS 11 664 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_S 4 665 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_M GENMASK(7, 4) 666 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_GLOBAL 0 667 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_BOARD 1 668 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_PORT 2 669 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_NODE 3 670 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_NODE_HANDLE 4 671 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_DIRECT_BUS_ACCESS 5 672 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_NODE_HANDLE_BUS_ADDRESS 6 673 u8 index; 674 }; 675 676 struct ixgbe_aci_cmd_link_topo_addr { 677 struct ixgbe_aci_cmd_link_topo_params topo_params; 678 __le16 handle; 679 /* Used to decode the handle field */ 680 #define IXGBE_ACI_LINK_TOPO_HANDLE_BRD_TYPE_M BIT(9) 681 #define IXGBE_ACI_LINK_TOPO_HANDLE_BRD_TYPE_LOM BIT(9) 682 #define IXGBE_ACI_LINK_TOPO_HANDLE_BRD_TYPE_MEZZ 0 683 }; 684 685 /* Get Link Topology Handle (direct, 0x06E0) */ 686 struct ixgbe_aci_cmd_get_link_topo { 687 struct ixgbe_aci_cmd_link_topo_addr addr; 688 u8 node_part_num; 689 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_PCA9575 0x21 690 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_ZL30632_80032 0x24 691 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_SI5384 0x25 692 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_C827 0x31 693 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_GEN_CLK_MUX 0x47 694 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_GEN_GPS 0x48 695 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_E610_PTC 0x49 696 u8 rsvd[9]; 697 }; 698 699 /* Get Link Topology Pin (direct, 0x06E1) */ 700 struct ixgbe_aci_cmd_get_link_topo_pin { 701 struct ixgbe_aci_cmd_link_topo_addr addr; 702 u8 input_io_params; 703 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_GPIO 0 704 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RESET_N 1 705 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_INT_N 2 706 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_PRESENT_N 3 707 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_TX_DIS 4 708 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_MODSEL_N 5 709 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_LPMODE 6 710 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_TX_FAULT 7 711 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RX_LOSS 8 712 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RS0 9 713 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RS1 10 714 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_EEPROM_WP 11 715 /* 12 repeats intentionally due to two different uses depending on context */ 716 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_LED 12 717 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RED_LED 12 718 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_GREEN_LED 13 719 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_BLUE_LED 14 720 #define IXGBE_ACI_LINK_TOPO_INPUT_IO_TYPE_GPIO 3 721 /* Use IXGBE_ACI_LINK_TOPO_NODE_TYPE_* for the type values */ 722 u8 output_io_params; 723 /* Use IXGBE_ACI_LINK_TOPO_NODE_TYPE_* for the type values */ 724 u8 output_io_flags; 725 #define IXGBE_ACI_LINK_TOPO_OUTPUT_POLARITY BIT(5) 726 #define IXGBE_ACI_LINK_TOPO_OUTPUT_VALUE BIT(6) 727 #define IXGBE_ACI_LINK_TOPO_OUTPUT_DRIVEN BIT(7) 728 u8 rsvd[7]; 729 }; 730 731 /* Read/Write SFF EEPROM command (indirect 0x06EE) */ 732 struct ixgbe_aci_cmd_sff_eeprom { 733 u8 lport_num; 734 u8 lport_num_valid; 735 #define IXGBE_ACI_SFF_PORT_NUM_VALID BIT(0) 736 __le16 i2c_bus_addr; 737 #define IXGBE_ACI_SFF_I2CBUS_7BIT_M GENMASK(6, 0) 738 #define IXGBE_ACI_SFF_I2CBUS_10BIT_M GENMASK(9, 0) 739 #define IXGBE_ACI_SFF_I2CBUS_TYPE_M BIT(10) 740 #define IXGBE_ACI_SFF_I2CBUS_TYPE_7BIT 0 741 #define IXGBE_ACI_SFF_I2CBUS_TYPE_10BIT IXGBE_ACI_SFF_I2CBUS_TYPE_M 742 #define IXGBE_ACI_SFF_NO_PAGE_BANK_UPDATE 0 743 #define IXGBE_ACI_SFF_UPDATE_PAGE 1 744 #define IXGBE_ACI_SFF_UPDATE_BANK 2 745 #define IXGBE_ACI_SFF_UPDATE_PAGE_BANK 3 746 #define IXGBE_ACI_SFF_IS_WRITE BIT(15) 747 __le16 i2c_offset; 748 u8 module_bank; 749 u8 module_page; 750 __le32 addr_high; 751 __le32 addr_low; 752 }; 753 754 /* NVM Read command (indirect 0x0701) 755 * NVM Erase commands (direct 0x0702) 756 * NVM Write commands (indirect 0x0703) 757 * NVM Write Activate commands (direct 0x0707) 758 * NVM Shadow RAM Dump commands (direct 0x0707) 759 */ 760 struct ixgbe_aci_cmd_nvm { 761 #define IXGBE_ACI_NVM_MAX_OFFSET 0xFFFFFF 762 __le16 offset_low; 763 u8 offset_high; /* For Write Activate offset_high is used as flags2 */ 764 u8 cmd_flags; 765 #define IXGBE_ACI_NVM_LAST_CMD BIT(0) 766 #define IXGBE_ACI_NVM_PCIR_REQ BIT(0) /* Used by NVM Write reply */ 767 #define IXGBE_ACI_NVM_PRESERVE_ALL BIT(1) 768 #define IXGBE_ACI_NVM_ACTIV_SEL_NVM BIT(3) /* Write Activate/SR Dump only */ 769 #define IXGBE_ACI_NVM_ACTIV_SEL_OROM BIT(4) 770 #define IXGBE_ACI_NVM_ACTIV_SEL_NETLIST BIT(5) 771 #define IXGBE_ACI_NVM_SPECIAL_UPDATE BIT(6) 772 #define IXGBE_ACI_NVM_REVERT_LAST_ACTIV BIT(6) /* Write Activate only */ 773 #define IXGBE_ACI_NVM_FLASH_ONLY BIT(7) 774 #define IXGBE_ACI_NVM_RESET_LVL_M GENMASK(1, 0) /* Write reply only */ 775 #define IXGBE_ACI_NVM_POR_FLAG 0 776 #define IXGBE_ACI_NVM_PERST_FLAG 1 777 #define IXGBE_ACI_NVM_EMPR_FLAG 2 778 #define IXGBE_ACI_NVM_EMPR_ENA BIT(0) /* Write Activate reply only */ 779 /* For Write Activate, several flags are sent as part of a separate 780 * flags2 field using a separate byte. For simplicity of the software 781 * interface, we pass the flags as a 16 bit value so these flags are 782 * all offset by 8 bits 783 */ 784 #define IXGBE_ACI_NVM_ACTIV_REQ_EMPR BIT(8) /* NVM Write Activate only */ 785 __le16 module_typeid; 786 __le16 length; 787 #define IXGBE_ACI_NVM_ERASE_LEN 0xFFFF 788 __le32 addr_high; 789 __le32 addr_low; 790 }; 791 792 /* NVM Module_Type ID, needed offset and read_len for 793 * struct ixgbe_aci_cmd_nvm. 794 */ 795 #define IXGBE_ACI_NVM_START_POINT 0 796 797 /* NVM Checksum Command (direct, 0x0706) */ 798 struct ixgbe_aci_cmd_nvm_checksum { 799 u8 flags; 800 #define IXGBE_ACI_NVM_CHECKSUM_VERIFY BIT(0) 801 #define IXGBE_ACI_NVM_CHECKSUM_RECALC BIT(1) 802 u8 rsvd; 803 __le16 checksum; /* Used only by response */ 804 #define IXGBE_ACI_NVM_CHECKSUM_CORRECT 0xBABA 805 u8 rsvd2[12]; 806 }; 807 808 /** 809 * struct ixgbe_aci_desc - Admin Command (AC) descriptor 810 * @flags: IXGBE_ACI_FLAG_* flags 811 * @opcode: Admin command opcode 812 * @datalen: length in bytes of indirect/external data buffer 813 * @retval: return value from firmware 814 * @cookie_high: opaque data high-half 815 * @cookie_low: opaque data low-half 816 * @params: command-specific parameters 817 * 818 * Descriptor format for commands the driver posts via the 819 * Admin Command Interface (ACI). 820 * The firmware writes back onto the command descriptor and returns 821 * the result of the command. Asynchronous events that are not an immediate 822 * result of the command are written to the Admin Command Interface (ACI) using 823 * the same descriptor format. Descriptors are in little-endian notation with 824 * 32-bit words. 825 */ 826 struct ixgbe_aci_desc { 827 __le16 flags; 828 __le16 opcode; 829 __le16 datalen; 830 __le16 retval; 831 __le32 cookie_high; 832 __le32 cookie_low; 833 union { 834 u8 raw[16]; 835 struct ixgbe_aci_cmd_get_ver get_ver; 836 struct ixgbe_aci_cmd_driver_ver driver_ver; 837 struct ixgbe_aci_cmd_get_exp_err exp_err; 838 struct ixgbe_aci_cmd_req_res res_owner; 839 struct ixgbe_aci_cmd_list_caps get_cap; 840 struct ixgbe_aci_cmd_disable_rxen disable_rxen; 841 struct ixgbe_aci_cmd_get_phy_caps get_phy; 842 struct ixgbe_aci_cmd_set_phy_cfg set_phy; 843 struct ixgbe_aci_cmd_restart_an restart_an; 844 struct ixgbe_aci_cmd_get_link_status get_link_status; 845 struct ixgbe_aci_cmd_set_event_mask set_event_mask; 846 struct ixgbe_aci_cmd_get_link_topo get_link_topo; 847 struct ixgbe_aci_cmd_get_link_topo_pin get_link_topo_pin; 848 struct ixgbe_aci_cmd_sff_eeprom read_write_sff_param; 849 struct ixgbe_aci_cmd_nvm nvm; 850 struct ixgbe_aci_cmd_nvm_checksum nvm_checksum; 851 } params; 852 }; 853 854 /* E610-specific adapter context structures */ 855 856 struct ixgbe_link_status { 857 /* Refer to ixgbe_aci_phy_type for bits definition */ 858 u64 phy_type_low; 859 u64 phy_type_high; 860 u16 max_frame_size; 861 u16 link_speed; 862 u16 req_speeds; 863 u8 topo_media_conflict; 864 u8 link_cfg_err; 865 u8 lse_ena; /* Link Status Event notification */ 866 u8 link_info; 867 u8 an_info; 868 u8 ext_info; 869 u8 fec_info; 870 u8 pacing; 871 /* Refer to #define from module_type[IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE] 872 * of ixgbe_aci_get_phy_caps structure 873 */ 874 u8 module_type[IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE]; 875 }; 876 877 /* Common HW capabilities for SW use */ 878 struct ixgbe_hw_caps { 879 /* Write CSR protection */ 880 u64 wr_csr_prot; 881 u32 switching_mode; 882 /* switching mode supported - EVB switching (including cloud) */ 883 #define IXGBE_NVM_IMAGE_TYPE_EVB 0x0 884 885 /* Manageability mode & supported protocols over MCTP */ 886 u32 mgmt_mode; 887 #define IXGBE_MGMT_MODE_PASS_THRU_MODE_M GENMASK(3, 0) 888 #define IXGBE_MGMT_MODE_CTL_INTERFACE_M GENMASK(7, 4) 889 #define IXGBE_MGMT_MODE_REDIR_SB_INTERFACE_M GENMASK(11, 8) 890 891 u32 mgmt_protocols_mctp; 892 #define IXGBE_MGMT_MODE_PROTO_RSVD BIT(0) 893 #define IXGBE_MGMT_MODE_PROTO_PLDM BIT(1) 894 #define IXGBE_MGMT_MODE_PROTO_OEM BIT(2) 895 #define IXGBE_MGMT_MODE_PROTO_NC_SI BIT(3) 896 897 u32 os2bmc; 898 u32 valid_functions; 899 /* DCB capabilities */ 900 u32 active_tc_bitmap; 901 u32 maxtc; 902 903 /* RSS related capabilities */ 904 u32 rss_table_size; /* 512 for PFs and 64 for VFs */ 905 u32 rss_table_entry_width; /* RSS Entry width in bits */ 906 907 /* Tx/Rx queues */ 908 u32 num_rxq; /* Number/Total Rx queues */ 909 u32 rxq_first_id; /* First queue ID for Rx queues */ 910 u32 num_txq; /* Number/Total Tx queues */ 911 u32 txq_first_id; /* First queue ID for Tx queues */ 912 913 /* MSI-X vectors */ 914 u32 num_msix_vectors; 915 u32 msix_vector_first_id; 916 917 /* Max MTU for function or device */ 918 u32 max_mtu; 919 920 /* WOL related */ 921 u32 num_wol_proxy_fltr; 922 u32 wol_proxy_vsi_seid; 923 924 /* LED/SDP pin count */ 925 u32 led_pin_num; 926 u32 sdp_pin_num; 927 928 /* LED/SDP - Supports up to 12 LED pins and 8 SDP signals */ 929 #define IXGBE_MAX_SUPPORTED_GPIO_LED 12 930 #define IXGBE_MAX_SUPPORTED_GPIO_SDP 8 931 u8 led[IXGBE_MAX_SUPPORTED_GPIO_LED]; 932 u8 sdp[IXGBE_MAX_SUPPORTED_GPIO_SDP]; 933 /* SR-IOV virtualization */ 934 u8 sr_iov_1_1; /* SR-IOV enabled */ 935 /* VMDQ */ 936 u8 vmdq; /* VMDQ supported */ 937 938 /* EVB capabilities */ 939 u8 evb_802_1_qbg; /* Edge Virtual Bridging */ 940 u8 evb_802_1_qbh; /* Bridge Port Extension */ 941 942 u8 dcb; 943 u8 iscsi; 944 u8 ieee_1588; 945 u8 mgmt_cem; 946 947 /* WoL and APM support */ 948 #define IXGBE_WOL_SUPPORT_M BIT(0) 949 #define IXGBE_ACPI_PROG_MTHD_M BIT(1) 950 #define IXGBE_PROXY_SUPPORT_M BIT(2) 951 u8 apm_wol_support; 952 u8 acpi_prog_mthd; 953 u8 proxy_support; 954 bool nvm_update_pending_nvm; 955 bool nvm_update_pending_orom; 956 bool nvm_update_pending_netlist; 957 #define IXGBE_NVM_PENDING_NVM_IMAGE BIT(0) 958 #define IXGBE_NVM_PENDING_OROM BIT(1) 959 #define IXGBE_NVM_PENDING_NETLIST BIT(2) 960 bool sec_rev_disabled; 961 bool update_disabled; 962 bool nvm_unified_update; 963 bool netlist_auth; 964 #define IXGBE_NVM_MGMT_SEC_REV_DISABLED BIT(0) 965 #define IXGBE_NVM_MGMT_UPDATE_DISABLED BIT(1) 966 #define IXGBE_NVM_MGMT_UNIFIED_UPD_SUPPORT BIT(3) 967 #define IXGBE_NVM_MGMT_NETLIST_AUTH_SUPPORT BIT(5) 968 bool no_drop_policy_support; 969 /* PCIe reset avoidance */ 970 bool pcie_reset_avoidance; /* false: not supported, true: supported */ 971 /* Post update reset restriction */ 972 bool reset_restrict_support; /* false: not supported, true: supported */ 973 974 /* External topology device images within the NVM */ 975 #define IXGBE_EXT_TOPO_DEV_IMG_COUNT 4 976 u32 ext_topo_dev_img_ver_high[IXGBE_EXT_TOPO_DEV_IMG_COUNT]; 977 u32 ext_topo_dev_img_ver_low[IXGBE_EXT_TOPO_DEV_IMG_COUNT]; 978 u8 ext_topo_dev_img_part_num[IXGBE_EXT_TOPO_DEV_IMG_COUNT]; 979 #define IXGBE_EXT_TOPO_DEV_IMG_PART_NUM_S 8 980 #define IXGBE_EXT_TOPO_DEV_IMG_PART_NUM_M GENMASK(15, 8) 981 bool ext_topo_dev_img_load_en[IXGBE_EXT_TOPO_DEV_IMG_COUNT]; 982 #define IXGBE_EXT_TOPO_DEV_IMG_LOAD_EN BIT(0) 983 bool ext_topo_dev_img_prog_en[IXGBE_EXT_TOPO_DEV_IMG_COUNT]; 984 #define IXGBE_EXT_TOPO_DEV_IMG_PROG_EN BIT(1) 985 } __packed; 986 987 /* Function specific capabilities */ 988 struct ixgbe_hw_func_caps { 989 u32 num_allocd_vfs; /* Number of allocated VFs */ 990 u32 vf_base_id; /* Logical ID of the first VF */ 991 u32 guar_num_vsi; 992 struct ixgbe_hw_caps common_cap; 993 bool no_drop_policy_ena; 994 }; 995 996 /* Device wide capabilities */ 997 struct ixgbe_hw_dev_caps { 998 struct ixgbe_hw_caps common_cap; 999 u32 num_vfs_exposed; /* Total number of VFs exposed */ 1000 u32 num_vsi_allocd_to_host; /* Excluding EMP VSI */ 1001 u32 num_flow_director_fltr; /* Number of FD filters available */ 1002 u32 num_funcs; 1003 }; 1004 1005 /* ACI event information */ 1006 struct ixgbe_aci_event { 1007 struct ixgbe_aci_desc desc; 1008 u8 *msg_buf; 1009 u16 msg_len; 1010 u16 buf_len; 1011 }; 1012 1013 struct ixgbe_aci_info { 1014 struct mutex lock; /* admin command interface lock */ 1015 enum ixgbe_aci_err last_status; /* last status of sent admin command */ 1016 }; 1017 1018 /* Option ROM version information */ 1019 struct ixgbe_orom_info { 1020 u8 major; /* Major version of OROM */ 1021 u8 patch; /* Patch version of OROM */ 1022 u16 build; /* Build version of OROM */ 1023 u32 srev; /* Security revision */ 1024 }; 1025 1026 /* NVM version information */ 1027 struct ixgbe_nvm_info { 1028 u32 eetrack; 1029 u32 srev; 1030 u8 major; 1031 u8 minor; 1032 } __packed; 1033 1034 /* netlist version information */ 1035 struct ixgbe_netlist_info { 1036 u32 major; /* major high/low */ 1037 u32 minor; /* minor high/low */ 1038 u32 type; /* type high/low */ 1039 u32 rev; /* revision high/low */ 1040 u32 hash; /* SHA-1 hash word */ 1041 u16 cust_ver; /* customer version */ 1042 } __packed; 1043 1044 /* Enumeration of possible flash banks for the NVM, OROM, and Netlist modules 1045 * of the flash image. 1046 */ 1047 enum ixgbe_flash_bank { 1048 IXGBE_INVALID_FLASH_BANK, 1049 IXGBE_1ST_FLASH_BANK, 1050 IXGBE_2ND_FLASH_BANK, 1051 }; 1052 1053 /* information for accessing NVM, OROM, and Netlist flash banks */ 1054 struct ixgbe_bank_info { 1055 u32 nvm_ptr; /* Pointer to 1st NVM bank */ 1056 u32 nvm_size; /* Size of NVM bank */ 1057 u32 orom_ptr; /* Pointer to 1st OROM bank */ 1058 u32 orom_size; /* Size of OROM bank */ 1059 u32 netlist_ptr; /* Ptr to 1st Netlist bank */ 1060 u32 netlist_size; /* Size of Netlist bank */ 1061 enum ixgbe_flash_bank nvm_bank; /* Active NVM bank */ 1062 enum ixgbe_flash_bank orom_bank; /* Active OROM bank */ 1063 enum ixgbe_flash_bank netlist_bank; /* Active Netlist bank */ 1064 }; 1065 1066 /* Flash Chip Information */ 1067 struct ixgbe_flash_info { 1068 struct ixgbe_orom_info orom; /* Option ROM version info */ 1069 u32 flash_size; /* Available flash size in bytes */ 1070 struct ixgbe_nvm_info nvm; /* NVM version information */ 1071 struct ixgbe_netlist_info netlist; /* Netlist version info */ 1072 struct ixgbe_bank_info banks; /* Flash Bank information */ 1073 u16 sr_words; /* Shadow RAM size in words */ 1074 u8 blank_nvm_mode; /* is NVM empty (no FW present) */ 1075 }; 1076 1077 #endif /* _IXGBE_TYPE_E610_H_ */ 1078