1 /*- 2 * Broadcom NetXtreme-C/E network driver. 3 * 4 * Copyright (c) 2016 Broadcom, All Rights Reserved. 5 * The term Broadcom refers to Broadcom Limited and/or its subsidiaries 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS' 17 * AND 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 COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 26 * THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include <sys/cdefs.h> 30 #ifndef _BNXT_H 31 #define _BNXT_H 32 33 #include <sys/param.h> 34 #include <sys/socket.h> 35 #include <sys/sysctl.h> 36 #include <sys/taskqueue.h> 37 #include <sys/bitstring.h> 38 39 #include <machine/bus.h> 40 41 #include <net/ethernet.h> 42 #include <net/if.h> 43 #include <net/if_var.h> 44 #include <net/iflib.h> 45 #include <linux/types.h> 46 47 #include "hsi_struct_def.h" 48 #include "bnxt_dcb.h" 49 #include "bnxt_auxbus_compat.h" 50 #include "bnxt_sriov.h" 51 52 #define DFLT_HWRM_CMD_TIMEOUT 500 53 54 /* PCI IDs */ 55 #define BROADCOM_VENDOR_ID 0x14E4 56 57 #define BCM57301 0x16c8 58 #define BCM57302 0x16c9 59 #define BCM57304 0x16ca 60 #define BCM57311 0x16ce 61 #define BCM57312 0x16cf 62 #define BCM57314 0x16df 63 #define BCM57402 0x16d0 64 #define BCM57402_NPAR 0x16d4 65 #define BCM57404 0x16d1 66 #define BCM57404_NPAR 0x16e7 67 #define BCM57406 0x16d2 68 #define BCM57406_NPAR 0x16e8 69 #define BCM57407 0x16d5 70 #define BCM57407_NPAR 0x16ea 71 #define BCM57407_SFP 0x16e9 72 #define BCM57412 0x16d6 73 #define BCM57412_NPAR1 0x16de 74 #define BCM57412_NPAR2 0x16eb 75 #define BCM57414 0x16d7 76 #define BCM57414_NPAR1 0x16ec 77 #define BCM57414_NPAR2 0x16ed 78 #define BCM57416 0x16d8 79 #define BCM57416_NPAR1 0x16ee 80 #define BCM57416_NPAR2 0x16ef 81 #define BCM57416_SFP 0x16e3 82 #define BCM57417 0x16d9 83 #define BCM57417_NPAR1 0x16c0 84 #define BCM57417_NPAR2 0x16cc 85 #define BCM57417_SFP 0x16e2 86 #define BCM57454 0x1614 87 #define BCM58700 0x16cd 88 #define BCM57508 0x1750 89 #define BCM57504 0x1751 90 #define BCM57504_NPAR 0x1801 91 #define BCM57502 0x1752 92 #define BCM57608 0x1760 93 #define BCM57604 0x1761 94 #define BCM57602 0x1762 95 #define BCM57601 0x1763 96 #define NETXTREME_C_VF1 0x16cb 97 #define NETXTREME_C_VF2 0x16e1 98 #define NETXTREME_C_VF3 0x16e5 99 100 #define NETXTREME_E_VF1 0x1606 101 #define NETXTREME_E_VF2 0x1609 102 #define NETXTREME_E_VF3 0x16c1 103 #define NETXTREME_E_VF4 0x16d3 104 #define NETXTREME_E_VF5 0x16dc 105 106 #define NETXTREME_E_P5_VF1 0x1806 107 #define NETXTREME_E_P5_VF2 0x1807 108 #define NETXTREME_E_P5_VF_HV1 0x1808 109 #define NETXTREME_E_P5_VF_HV2 0x1809 110 #define E_P7_VF 0x1819 111 112 #define EVENT_DATA1_RESET_NOTIFY_FATAL(data1) \ 113 (((data1) & \ 114 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK) ==\ 115 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_FATAL) 116 117 #define BNXT_EVENT_ERROR_REPORT_TYPE(data1) \ 118 (((data1) & \ 119 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_MASK) >> \ 120 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_SFT) 121 122 #define BNXT_EVENT_INVALID_SIGNAL_DATA(data2) \ 123 (((data2) & \ 124 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA2_PIN_ID_MASK) >> \ 125 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA2_PIN_ID_SFT) 126 127 #define BNXT_EVENT_DBR_EPOCH(data) \ 128 (((data) & HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_DATA1_EPOCH_MASK) >> \ 129 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_DATA1_EPOCH_SFT) 130 131 #define BNXT_EVENT_THERMAL_THRESHOLD_TEMP(data2) \ 132 (((data2) & \ 133 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_THRESHOLD_TEMP_MASK) >> \ 134 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_THRESHOLD_TEMP_SFT) 135 136 #define EVENT_DATA2_NVM_ERR_ADDR(data2) \ 137 (((data2) & \ 138 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA2_ERR_ADDR_MASK) >> \ 139 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA2_ERR_ADDR_SFT) 140 141 #define EVENT_DATA1_THERMAL_THRESHOLD_DIR_INCREASING(data1) \ 142 (((data1) & \ 143 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR) == \ 144 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR_INCREASING) 145 146 #define EVENT_DATA1_NVM_ERR_TYPE_WRITE(data1) \ 147 (((data1) & \ 148 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_MASK) == \ 149 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_WRITE) 150 151 #define EVENT_DATA1_NVM_ERR_TYPE_ERASE(data1) \ 152 (((data1) & \ 153 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_MASK) == \ 154 HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_ERASE) 155 156 #define EVENT_DATA1_THERMAL_THRESHOLD_TYPE(data1) \ 157 ((data1) & HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_MASK) 158 159 #define BNXT_EVENT_THERMAL_CURRENT_TEMP(data2) \ 160 ((data2) & HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_CURRENT_TEMP_MASK) 161 162 #define EVENT_DATA1_RESET_NOTIFY_FW_ACTIVATION(data1) \ 163 (((data1) & \ 164 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK) ==\ 165 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_ACTIVATION) 166 167 #define EVENT_DATA2_RESET_NOTIFY_FW_STATUS_CODE(data2) \ 168 ((data2) & \ 169 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA2_FW_STATUS_CODE_MASK) 170 171 #define EVENT_DATA1_RECOVERY_ENABLED(data1) \ 172 !!((data1) & \ 173 HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_RECOVERY_ENABLED) 174 175 #define EVENT_DATA1_RECOVERY_MASTER_FUNC(data1) \ 176 !!((data1) & \ 177 HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASTER_FUNC) 178 179 #define INVALID_STATS_CTX_ID -1 180 181 /* Maximum numbers of RX and TX descriptors. iflib requires this to be a power 182 * of two. The hardware has no particular limitation. */ 183 #define BNXT_MAX_RXD ((INT32_MAX >> 1) + 1) 184 #define BNXT_MAX_TXD ((INT32_MAX >> 1) + 1) 185 186 #define CSUM_OFFLOAD (CSUM_IP_TSO|CSUM_IP6_TSO|CSUM_IP| \ 187 CSUM_IP_UDP|CSUM_IP_TCP|CSUM_IP_SCTP| \ 188 CSUM_IP6_UDP|CSUM_IP6_TCP|CSUM_IP6_SCTP) 189 190 #define BNXT_MAX_MTU 9600 191 192 #define BNXT_RSS_HASH_TYPE_TCPV4 0 193 #define BNXT_RSS_HASH_TYPE_UDPV4 1 194 #define BNXT_RSS_HASH_TYPE_IPV4 2 195 #define BNXT_RSS_HASH_TYPE_TCPV6 3 196 #define BNXT_RSS_HASH_TYPE_UDPV6 4 197 #define BNXT_RSS_HASH_TYPE_IPV6 5 198 #define BNXT_GET_RSS_PROFILE_ID(rss_hash_type) ((rss_hash_type >> 1) & 0x1F) 199 200 #define BNXT_NO_MORE_WOL_FILTERS 0xFFFF 201 #define bnxt_wol_supported(softc) (!((softc)->flags & BNXT_FLAG_VF) && \ 202 ((softc)->flags & BNXT_FLAG_WOL_CAP )) 203 /* 64-bit doorbell */ 204 #define DBR_INDEX_MASK 0x0000000000ffffffULL 205 #define DBR_PI_LO_MASK 0xff000000UL 206 #define DBR_PI_LO_SFT 24 207 #define DBR_EPOCH_MASK 0x01000000UL 208 #define DBR_EPOCH_SFT 24 209 #define DBR_TOGGLE_MASK 0x06000000UL 210 #define DBR_TOGGLE_SFT 25 211 #define DBR_XID_MASK 0x000fffff00000000ULL 212 #define DBR_XID_SFT 32 213 #define DBR_PI_HI_MASK 0xf0000000000000ULL 214 #define DBR_PI_HI_SFT 52 215 #define DBR_PATH_L2 (0x1ULL << 56) 216 #define DBR_VALID (0x1ULL << 58) 217 #define DBR_TYPE_SQ (0x0ULL << 60) 218 #define DBR_TYPE_RQ (0x1ULL << 60) 219 #define DBR_TYPE_SRQ (0x2ULL << 60) 220 #define DBR_TYPE_SRQ_ARM (0x3ULL << 60) 221 #define DBR_TYPE_CQ (0x4ULL << 60) 222 #define DBR_TYPE_CQ_ARMSE (0x5ULL << 60) 223 #define DBR_TYPE_CQ_ARMALL (0x6ULL << 60) 224 #define DBR_TYPE_CQ_ARMENA (0x7ULL << 60) 225 #define DBR_TYPE_SRQ_ARMENA (0x8ULL << 60) 226 #define DBR_TYPE_CQ_CUTOFF_ACK (0x9ULL << 60) 227 #define DBR_TYPE_NQ (0xaULL << 60) 228 #define DBR_TYPE_NQ_ARM (0xbULL << 60) 229 #define DBR_TYPE_PUSH_START (0xcULL << 60) 230 #define DBR_TYPE_PUSH_END (0xdULL << 60) 231 #define DBR_TYPE_NQ_MASK (0xeULL << 60) 232 #define DBR_TYPE_NULL (0xfULL << 60) 233 234 #define BNXT_MAX_L2_QUEUES 128 235 #define BNXT_ROCE_IRQ_COUNT 9 236 237 #define BNXT_MAX_NUM_QUEUES (BNXT_MAX_L2_QUEUES + BNXT_ROCE_IRQ_COUNT) 238 239 /* Completion related defines */ 240 #define CMP_VALID(cmp, v_bit) \ 241 ((!!(((struct cmpl_base *)(cmp))->info3_v & htole32(CMPL_BASE_V))) == !!(v_bit) ) 242 243 /* Chip class phase 5 */ 244 #define BNXT_CHIP_P5(sc) ((sc->flags & BNXT_FLAG_CHIP_P5)) 245 246 /* Chip class phase 7 */ 247 #define BNXT_CHIP_P7(sc) ((sc->flags & BNXT_FLAG_CHIP_P7)) 248 249 /* Chip class phase 5 plus */ 250 #define BNXT_CHIP_P5_PLUS(sc) \ 251 (BNXT_CHIP_P5(sc) || BNXT_CHIP_P7(sc)) 252 253 #define DB_PF_OFFSET_P5 0x10000 254 #define DB_VF_OFFSET_P5 0x4000 255 #define NQ_VALID(cmp, v_bit) \ 256 ((!!(((nq_cn_t *)(cmp))->v & htole32(NQ_CN_V))) == !!(v_bit) ) 257 258 #ifndef DIV_ROUND_UP 259 #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) 260 #endif 261 #ifndef roundup 262 #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) 263 #endif 264 265 #define NEXT_CP_CONS_V(ring, cons, v_bit) do { \ 266 if (__predict_false(++(cons) == (ring)->ring_size)) \ 267 ((cons) = 0, (v_bit) = !v_bit); \ 268 } while (0) 269 270 #define RING_NEXT(ring, idx) (__predict_false(idx + 1 == (ring)->ring_size) ? \ 271 0 : idx + 1) 272 273 #define CMPL_PREFETCH_NEXT(cpr, idx) \ 274 __builtin_prefetch(&((struct cmpl_base *)(cpr)->ring.vaddr)[((idx) +\ 275 (CACHE_LINE_SIZE / sizeof(struct cmpl_base))) & \ 276 ((cpr)->ring.ring_size - 1)]) 277 278 /* Lock macros */ 279 #define BNXT_HWRM_LOCK_INIT(_softc, _name) \ 280 mtx_init(&(_softc)->hwrm_lock, _name, "BNXT HWRM Lock", MTX_DEF) 281 #define BNXT_HWRM_LOCK(_softc) mtx_lock(&(_softc)->hwrm_lock) 282 #define BNXT_HWRM_UNLOCK(_softc) mtx_unlock(&(_softc)->hwrm_lock) 283 #define BNXT_HWRM_LOCK_DESTROY(_softc) mtx_destroy(&(_softc)->hwrm_lock) 284 #define BNXT_HWRM_LOCK_ASSERT(_softc) mtx_assert(&(_softc)->hwrm_lock, \ 285 MA_OWNED) 286 #define BNXT_IS_FLOW_CTRL_CHANGED(link_info) \ 287 ((link_info->last_flow_ctrl.tx != link_info->flow_ctrl.tx) || \ 288 (link_info->last_flow_ctrl.rx != link_info->flow_ctrl.rx) || \ 289 (link_info->last_flow_ctrl.autoneg != link_info->flow_ctrl.autoneg)) 290 291 /* Chip info */ 292 #define BNXT_TSO_SIZE UINT16_MAX 293 294 #define min_t(type, x, y) ({ \ 295 type __min1 = (x); \ 296 type __min2 = (y); \ 297 __min1 < __min2 ? __min1 : __min2; }) 298 299 #define max_t(type, x, y) ({ \ 300 type __max1 = (x); \ 301 type __max2 = (y); \ 302 __max1 > __max2 ? __max1 : __max2; }) 303 304 #define clamp_t(type, _x, min, max) min_t(type, max_t(type, _x, min), max) 305 306 #define BNXT_IFMEDIA_ADD(supported, fw_speed, ifm_speed) do { \ 307 if ((supported) & HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_ ## fw_speed) \ 308 ifmedia_add(softc->media, IFM_ETHER | (ifm_speed), 0, NULL); \ 309 } while(0) 310 311 #define BNXT_MIN_FRAME_SIZE 52 /* Frames must be padded to this size for some A0 chips */ 312 313 #define BNXT_RX_STATS_EXT_OFFSET(counter) \ 314 (offsetof(struct rx_port_stats_ext, counter) / 8) 315 316 #define BNXT_RX_STATS_EXT_NUM_LEGACY \ 317 BNXT_RX_STATS_EXT_OFFSET(rx_fec_corrected_blocks) 318 319 #define BNXT_TX_STATS_EXT_OFFSET(counter) \ 320 (offsetof(struct tx_port_stats_ext, counter) / 8) 321 322 extern const char bnxt_driver_version[]; 323 typedef void (*bnxt_doorbell_tx)(void *, uint16_t idx); 324 typedef void (*bnxt_doorbell_rx)(void *, uint16_t idx); 325 typedef void (*bnxt_doorbell_rx_cq)(void *, bool); 326 typedef void (*bnxt_doorbell_tx_cq)(void *, bool); 327 typedef void (*bnxt_doorbell_nq)(void *, bool); 328 329 typedef struct bnxt_doorbell_ops { 330 bnxt_doorbell_tx bnxt_db_tx; 331 bnxt_doorbell_rx bnxt_db_rx; 332 bnxt_doorbell_rx_cq bnxt_db_rx_cq; 333 bnxt_doorbell_tx_cq bnxt_db_tx_cq; 334 bnxt_doorbell_nq bnxt_db_nq; 335 } bnxt_dooorbell_ops_t; 336 /* NVRAM access */ 337 enum bnxt_nvm_directory_type { 338 BNX_DIR_TYPE_UNUSED = 0, 339 BNX_DIR_TYPE_PKG_LOG = 1, 340 BNX_DIR_TYPE_UPDATE = 2, 341 BNX_DIR_TYPE_CHIMP_PATCH = 3, 342 BNX_DIR_TYPE_BOOTCODE = 4, 343 BNX_DIR_TYPE_VPD = 5, 344 BNX_DIR_TYPE_EXP_ROM_MBA = 6, 345 BNX_DIR_TYPE_AVS = 7, 346 BNX_DIR_TYPE_PCIE = 8, 347 BNX_DIR_TYPE_PORT_MACRO = 9, 348 BNX_DIR_TYPE_APE_FW = 10, 349 BNX_DIR_TYPE_APE_PATCH = 11, 350 BNX_DIR_TYPE_KONG_FW = 12, 351 BNX_DIR_TYPE_KONG_PATCH = 13, 352 BNX_DIR_TYPE_BONO_FW = 14, 353 BNX_DIR_TYPE_BONO_PATCH = 15, 354 BNX_DIR_TYPE_TANG_FW = 16, 355 BNX_DIR_TYPE_TANG_PATCH = 17, 356 BNX_DIR_TYPE_BOOTCODE_2 = 18, 357 BNX_DIR_TYPE_CCM = 19, 358 BNX_DIR_TYPE_PCI_CFG = 20, 359 BNX_DIR_TYPE_TSCF_UCODE = 21, 360 BNX_DIR_TYPE_ISCSI_BOOT = 22, 361 BNX_DIR_TYPE_ISCSI_BOOT_IPV6 = 24, 362 BNX_DIR_TYPE_ISCSI_BOOT_IPV4N6 = 25, 363 BNX_DIR_TYPE_ISCSI_BOOT_CFG6 = 26, 364 BNX_DIR_TYPE_EXT_PHY = 27, 365 BNX_DIR_TYPE_SHARED_CFG = 40, 366 BNX_DIR_TYPE_PORT_CFG = 41, 367 BNX_DIR_TYPE_FUNC_CFG = 42, 368 BNX_DIR_TYPE_MGMT_CFG = 48, 369 BNX_DIR_TYPE_MGMT_DATA = 49, 370 BNX_DIR_TYPE_MGMT_WEB_DATA = 50, 371 BNX_DIR_TYPE_MGMT_WEB_META = 51, 372 BNX_DIR_TYPE_MGMT_EVENT_LOG = 52, 373 BNX_DIR_TYPE_MGMT_AUDIT_LOG = 53 374 }; 375 376 enum bnxnvm_pkglog_field_index { 377 BNX_PKG_LOG_FIELD_IDX_INSTALLED_TIMESTAMP = 0, 378 BNX_PKG_LOG_FIELD_IDX_PKG_DESCRIPTION = 1, 379 BNX_PKG_LOG_FIELD_IDX_PKG_VERSION = 2, 380 BNX_PKG_LOG_FIELD_IDX_PKG_TIMESTAMP = 3, 381 BNX_PKG_LOG_FIELD_IDX_PKG_CHECKSUM = 4, 382 BNX_PKG_LOG_FIELD_IDX_INSTALLED_ITEMS = 5, 383 BNX_PKG_LOG_FIELD_IDX_INSTALLED_MASK = 6 384 }; 385 386 #define BNX_DIR_ORDINAL_FIRST 0 387 #define BNX_DIR_EXT_NONE 0 388 389 struct bnxt_bar_info { 390 struct resource *res; 391 bus_space_tag_t tag; 392 bus_space_handle_t handle; 393 bus_size_t size; 394 int rid; 395 }; 396 397 struct bnxt_flow_ctrl { 398 bool rx; 399 bool tx; 400 bool autoneg; 401 }; 402 403 struct bnxt_link_info { 404 uint8_t media_type; 405 uint8_t transceiver; 406 uint8_t phy_addr; 407 uint8_t phy_link_status; 408 uint8_t wire_speed; 409 uint8_t loop_back; 410 uint8_t link_up; 411 uint8_t last_link_up; 412 uint8_t duplex; 413 uint8_t last_duplex; 414 uint8_t last_phy_type; 415 struct bnxt_flow_ctrl flow_ctrl; 416 struct bnxt_flow_ctrl last_flow_ctrl; 417 uint8_t duplex_setting; 418 uint8_t auto_mode; 419 #define PHY_VER_LEN 3 420 uint8_t phy_ver[PHY_VER_LEN]; 421 uint8_t phy_type; 422 #define BNXT_PHY_STATE_ENABLED 0 423 #define BNXT_PHY_STATE_DISABLED 1 424 uint8_t phy_state; 425 426 uint16_t link_speed; 427 uint16_t support_speeds; 428 uint16_t support_speeds2; 429 uint16_t support_pam4_speeds; 430 uint16_t auto_link_speeds; 431 uint16_t auto_link_speeds2; 432 uint16_t auto_pam4_link_speeds; 433 uint16_t force_link_speed; 434 uint16_t force_link_speeds2; 435 uint16_t force_pam4_link_speed; 436 437 bool force_pam4_speed; 438 bool force_speed2_nrz; 439 bool force_pam4_56_speed2; 440 bool force_pam4_112_speed2; 441 442 uint16_t advertising; 443 uint16_t advertising_pam4; 444 445 uint32_t preemphasis; 446 uint16_t support_auto_speeds; 447 uint16_t support_force_speeds; 448 uint16_t support_pam4_auto_speeds; 449 uint16_t support_pam4_force_speeds; 450 uint16_t support_auto_speeds2; 451 uint16_t support_force_speeds2; 452 #define BNXT_SIG_MODE_NRZ HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_NRZ 453 #define BNXT_SIG_MODE_PAM4 HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_PAM4 454 #define BNXT_SIG_MODE_PAM4_112 HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_PAM4_112 455 uint8_t req_signal_mode; 456 457 uint8_t active_fec_sig_mode; 458 uint8_t sig_mode; 459 460 /* copy of requested setting */ 461 uint8_t autoneg; 462 #define BNXT_AUTONEG_SPEED 1 463 #define BNXT_AUTONEG_FLOW_CTRL 2 464 uint8_t req_duplex; 465 uint16_t req_link_speed; 466 uint8_t module_status; 467 struct hwrm_port_phy_qcfg_output phy_qcfg_resp; 468 uint8_t active_lanes; 469 }; 470 471 #define BNXT_MAX_LED 4 472 473 /* Layout of one LED capability record returned by HWRM_PORT_LED_QCAPS. */ 474 struct bnxt_led_info { 475 uint8_t led_id; 476 uint8_t led_type; 477 uint8_t led_group_id; 478 uint8_t unused; 479 uint16_t led_state_caps; 480 uint16_t led_color_caps; 481 }; 482 483 enum bnxt_phy_type { 484 BNXT_MEDIA_CR = 0, 485 BNXT_MEDIA_LR, 486 BNXT_MEDIA_SR, 487 BNXT_MEDIA_ER, 488 BNXT_MEDIA_KR, 489 BNXT_MEDIA_AC, 490 BNXT_MEDIA_BASECX, 491 BNXT_MEDIA_BASET, 492 BNXT_MEDIA_BASEKX, 493 BNXT_MEDIA_BASESGMII, 494 BNXT_MEDIA_END 495 }; 496 497 enum bnxt_cp_type { 498 BNXT_DEFAULT, 499 BNXT_TX, 500 BNXT_RX, 501 BNXT_SHARED 502 }; 503 504 struct bnxt_queue_info { 505 uint8_t queue_id; 506 uint8_t queue_profile; 507 }; 508 509 struct bnxt_func_info { 510 uint32_t fw_fid; 511 uint8_t mac_addr[ETHER_ADDR_LEN]; 512 uint16_t max_rsscos_ctxs; 513 uint16_t max_cp_rings; 514 uint16_t max_tx_rings; 515 uint16_t max_rx_rings; 516 uint16_t max_hw_ring_grps; 517 uint16_t max_irqs; 518 uint16_t max_l2_ctxs; 519 uint16_t max_vnics; 520 uint16_t max_stat_ctxs; 521 }; 522 523 struct bnxt_pf_info { 524 #define BNXT_FIRST_PF_FID 1 525 #define BNXT_FIRST_VF_FID 128 526 uint8_t port_id; 527 uint32_t first_vf_id; 528 uint16_t active_vfs; 529 uint16_t registered_vfs; 530 uint16_t max_vfs; 531 uint16_t max_msix_vfs; 532 uint32_t max_encap_records; 533 uint32_t max_decap_records; 534 uint32_t max_tx_em_flows; 535 uint32_t max_tx_wm_flows; 536 uint32_t max_rx_em_flows; 537 uint32_t max_rx_wm_flows; 538 unsigned long *vf_event_bmap; 539 uint16_t hwrm_cmd_req_pages; 540 void *hwrm_cmd_req_addr[4]; 541 bus_addr_t hwrm_cmd_req_dma_addr[4]; 542 uint16_t fw_fid; 543 uint8_t mac_addr[ETHER_ADDR_LEN]; 544 uint8_t vf_resv_strategy; 545 uint8_t num_vfs; 546 struct bnxt_vf_info *vf; 547 uint16_t vf_hwrm_cmd_req_page_shift; 548 struct sysctl_ctx_list sysctl_ctx; 549 struct sysctl_oid *sysctl_node; 550 }; 551 552 #define BNXT_PF(softc) (!((softc)->flags & BNXT_FLAG_VF)) 553 #define BNXT_VF(softc) ((softc)->flags & BNXT_FLAG_VF) 554 555 struct bnxt_vlan_tag { 556 SLIST_ENTRY(bnxt_vlan_tag) next; 557 uint64_t filter_id; 558 uint16_t tag; 559 }; 560 561 struct bnxt_vnic_info { 562 uint16_t id; 563 uint16_t def_ring_grp; 564 uint16_t cos_rule; 565 uint16_t lb_rule; 566 uint16_t mru; 567 568 uint32_t rx_mask; 569 struct iflib_dma_info mc_list; 570 int mc_list_count; 571 #define BNXT_MAX_MC_ADDRS 16 572 573 uint32_t flags; 574 #define BNXT_VNIC_FLAG_DEFAULT 0x01 575 #define BNXT_VNIC_FLAG_BD_STALL 0x02 576 #define BNXT_VNIC_FLAG_VLAN_STRIP 0x04 577 578 uint64_t filter_id; 579 580 uint16_t rss_id; 581 uint32_t rss_hash_type; 582 uint8_t rss_hash_key[HW_HASH_KEY_SIZE]; 583 struct iflib_dma_info rss_hash_key_tbl; 584 struct iflib_dma_info rss_grp_tbl; 585 SLIST_HEAD(vlan_head, bnxt_vlan_tag) vlan_tags; 586 struct iflib_dma_info vlan_tag_list; 587 }; 588 589 struct bnxt_grp_info { 590 uint16_t stats_ctx; 591 uint16_t grp_id; 592 uint16_t rx_ring_id; 593 uint16_t cp_ring_id; 594 uint16_t ag_ring_id; 595 }; 596 597 #define EPOCH_ARR_SZ 4096 598 599 struct bnxt_ring { 600 uint64_t paddr; 601 vm_offset_t doorbell; 602 caddr_t vaddr; 603 struct bnxt_softc *softc; 604 uint32_t ring_size; /* Must be a power of two */ 605 uint16_t id; /* Logical ID */ 606 uint16_t phys_id; 607 uint16_t idx; 608 struct bnxt_full_tpa_start *tpa_start; 609 union { 610 u64 db_key64; 611 u32 db_key32; 612 }; 613 uint32_t db_ring_mask; 614 uint32_t db_epoch_mask; 615 uint8_t db_epoch_shift; 616 617 uint64_t epoch_arr[EPOCH_ARR_SZ]; 618 bool epoch_bit; 619 620 }; 621 622 struct bnxt_cp_ring { 623 struct bnxt_ring ring; 624 struct if_irq irq; 625 uint32_t cons; 626 uint32_t raw_cons; 627 bool v_bit; /* Value of valid bit */ 628 struct ctx_hw_stats *stats; 629 uint32_t stats_ctx_id; 630 uint32_t last_idx; /* Used by RX rings only 631 * set to the last read pidx 632 */ 633 uint64_t int_count; 634 uint8_t toggle; 635 uint8_t type; 636 #define Q_TYPE_TX 1 637 #define Q_TYPE_RX 2 638 }; 639 640 struct bnxt_full_tpa_start { 641 struct rx_tpa_start_cmpl low; 642 struct rx_tpa_start_cmpl_hi high; 643 }; 644 645 /* All the version information for the part */ 646 #define BNXT_VERSTR_SIZE (3*3+2+1) /* ie: "255.255.255\0" */ 647 #define BNXT_NAME_SIZE 17 648 #define FW_VER_STR_LEN 32 649 #define BC_HWRM_STR_LEN 21 650 struct bnxt_ver_info { 651 uint8_t hwrm_if_major; 652 uint8_t hwrm_if_minor; 653 uint8_t hwrm_if_update; 654 char hwrm_if_ver[BNXT_VERSTR_SIZE]; 655 char driver_hwrm_if_ver[BNXT_VERSTR_SIZE]; 656 char mgmt_fw_ver[FW_VER_STR_LEN]; 657 char netctrl_fw_ver[FW_VER_STR_LEN]; 658 char roce_fw_ver[FW_VER_STR_LEN]; 659 char fw_ver_str[FW_VER_STR_LEN]; 660 char phy_ver[BNXT_VERSTR_SIZE]; 661 char pkg_ver[64]; 662 663 char hwrm_fw_name[BNXT_NAME_SIZE]; 664 char mgmt_fw_name[BNXT_NAME_SIZE]; 665 char netctrl_fw_name[BNXT_NAME_SIZE]; 666 char roce_fw_name[BNXT_NAME_SIZE]; 667 char phy_vendor[BNXT_NAME_SIZE]; 668 char phy_partnumber[BNXT_NAME_SIZE]; 669 670 uint16_t chip_num; 671 uint8_t chip_rev; 672 uint8_t chip_metal; 673 uint8_t chip_bond_id; 674 uint8_t chip_type; 675 676 uint8_t hwrm_min_major; 677 uint8_t hwrm_min_minor; 678 uint8_t hwrm_min_update; 679 uint64_t fw_ver_code; 680 #define BNXT_FW_VER_CODE(maj, min, bld, rsv) \ 681 ((uint64_t)(maj) << 48 | (uint64_t)(min) << 32 | (uint64_t)(bld) << 16 | (rsv)) 682 #define BNXT_FW_MAJ(softc) ((softc)->ver_info->fw_ver_code >> 48) 683 #define BNXT_FW_MIN(softc) (((softc)->ver_info->fw_ver_code >> 32) & 0xffff) 684 #define BNXT_FW_BLD(softc) (((softc)->ver_info->fw_ver_code >> 16) & 0xffff) 685 #define BNXT_FW_RSV(softc) (((softc)->ver_info->fw_ver_code) & 0xffff) 686 687 struct sysctl_ctx_list ver_ctx; 688 struct sysctl_oid *ver_oid; 689 }; 690 691 struct bnxt_nvram_info { 692 uint16_t mfg_id; 693 uint16_t device_id; 694 uint32_t sector_size; 695 uint32_t size; 696 uint32_t reserved_size; 697 uint32_t available_size; 698 699 struct sysctl_ctx_list nvm_ctx; 700 struct sysctl_oid *nvm_oid; 701 }; 702 703 struct bnxt_func_qcfg { 704 uint16_t alloc_completion_rings; 705 uint16_t alloc_tx_rings; 706 uint16_t alloc_rx_rings; 707 uint16_t alloc_vnics; 708 uint16_t alloc_rss_ctx; 709 uint16_t alloc_l2_ctx; 710 uint16_t alloc_vfs; 711 uint16_t alloc_hw_ring_grps; 712 uint16_t alloc_stat_ctx; 713 uint16_t alloc_msix; 714 }; 715 716 struct bnxt_hw_lro { 717 uint16_t enable; 718 uint16_t is_mode_gro; 719 uint16_t max_agg_segs; 720 uint16_t max_aggs; 721 uint32_t min_agg_len; 722 }; 723 724 /* The hardware supports certain page sizes. Use the supported page sizes 725 * to allocate the rings. 726 */ 727 #if (PAGE_SHIFT < 12) 728 #define BNXT_PAGE_SHIFT 12 729 #elif (PAGE_SHIFT <= 13) 730 #define BNXT_PAGE_SHIFT PAGE_SHIFT 731 #elif (PAGE_SHIFT < 16) 732 #define BNXT_PAGE_SHIFT 13 733 #else 734 #define BNXT_PAGE_SHIFT 16 735 #endif 736 737 #define BNXT_PAGE_SIZE (1 << BNXT_PAGE_SHIFT) 738 739 #define MAX_CTX_PAGES (BNXT_PAGE_SIZE / 8) 740 #define MAX_CTX_TOTAL_PAGES (MAX_CTX_PAGES * MAX_CTX_PAGES) 741 742 struct bnxt_ring_mem_info { 743 int nr_pages; 744 int page_size; 745 uint16_t flags; 746 #define BNXT_RMEM_VALID_PTE_FLAG 1 747 #define BNXT_RMEM_RING_PTE_FLAG 2 748 #define BNXT_RMEM_USE_FULL_PAGE_FLAG 4 749 uint16_t depth; 750 struct bnxt_ctx_mem_type *ctx_mem; 751 752 struct iflib_dma_info *pg_arr; 753 struct iflib_dma_info pg_tbl; 754 755 int vmem_size; 756 void **vmem; 757 }; 758 759 struct bnxt_ctx_pg_info { 760 uint32_t entries; 761 uint32_t nr_pages; 762 struct iflib_dma_info ctx_arr[MAX_CTX_PAGES]; 763 struct bnxt_ring_mem_info ring_mem; 764 struct bnxt_ctx_pg_info **ctx_pg_tbl; 765 }; 766 767 #define BNXT_MAX_TQM_SP_RINGS 1 768 #define BNXT_MAX_TQM_FP_LEGACY_RINGS 8 769 #define BNXT_MAX_TQM_FP_RINGS 9 770 #define BNXT_MAX_TQM_LEGACY_RINGS \ 771 (BNXT_MAX_TQM_SP_RINGS + BNXT_MAX_TQM_FP_LEGACY_RINGS) 772 #define BNXT_MAX_TQM_RINGS \ 773 (BNXT_MAX_TQM_SP_RINGS + BNXT_MAX_TQM_FP_RINGS) 774 775 #define BNXT_BACKING_STORE_CFG_LEGACY_LEN 256 776 #define BNXT_BACKING_STORE_CFG_LEN \ 777 sizeof(struct hwrm_func_backing_store_cfg_input) 778 779 #define BNXT_SET_CTX_PAGE_ATTR(attr) \ 780 do { \ 781 if (BNXT_PAGE_SIZE == 0x2000) \ 782 attr = HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8K; \ 783 else if (BNXT_PAGE_SIZE == 0x10000) \ 784 attr = HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_64K; \ 785 else \ 786 attr = HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_4K; \ 787 } while (0) 788 789 struct bnxt_ctx_mem_type { 790 u16 type; 791 u16 entry_size; 792 u32 flags; 793 #define BNXT_CTX_MEM_TYPE_VALID HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_TYPE_VALID 794 u32 instance_bmap; 795 u8 init_value; 796 u8 entry_multiple; 797 u16 init_offset; 798 #define BNXT_CTX_INIT_INVALID_OFFSET 0xffff 799 u32 max_entries; 800 u32 min_entries; 801 u8 last:1; 802 u8 mem_valid:1; 803 u8 split_entry_cnt; 804 #define BNXT_MAX_SPLIT_ENTRY 4 805 union { 806 struct { 807 u32 qp_l2_entries; 808 u32 qp_qp1_entries; 809 }; 810 u32 srq_l2_entries; 811 u32 cq_l2_entries; 812 u32 vnic_entries; 813 struct { 814 u32 mrav_av_entries; 815 u32 mrav_num_entries_units; 816 }; 817 u32 split[BNXT_MAX_SPLIT_ENTRY]; 818 }; 819 struct bnxt_ctx_pg_info *pg_info; 820 }; 821 822 #define BNXT_CTX_QP HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_QP 823 #define BNXT_CTX_SRQ HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SRQ 824 #define BNXT_CTX_CQ HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_CQ 825 #define BNXT_CTX_VNIC HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_VNIC 826 #define BNXT_CTX_STAT HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_STAT 827 #define BNXT_CTX_STQM HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SP_TQM_RING 828 #define BNXT_CTX_FTQM HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_FP_TQM_RING 829 #define BNXT_CTX_MRAV HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_MRAV 830 #define BNXT_CTX_TIM HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_TIM 831 #define BNXT_CTX_TKC HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_TKC 832 #define BNXT_CTX_RKC HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_RKC 833 #define BNXT_CTX_MTQM HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_MP_TQM_RING 834 #define BNXT_CTX_SQDBS HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SQ_DB_SHADOW 835 #define BNXT_CTX_RQDBS HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_RQ_DB_SHADOW 836 #define BNXT_CTX_SRQDBS HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SRQ_DB_SHADOW 837 #define BNXT_CTX_CQDBS HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_CQ_DB_SHADOW 838 #define BNXT_CTX_QTKC HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_QUIC_TKC 839 #define BNXT_CTX_QRKC HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_QUIC_RKC 840 #define BNXT_CTX_MAX (BNXT_CTX_TIM + 1) 841 #define BNXT_CTX_L2_MAX (BNXT_CTX_FTQM + 1) 842 843 #define BNXT_CTX_V2_MAX (HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_ROCE_HWRM_TRACE + 1) 844 845 #define BNXT_CTX_SRT_TRACE \ 846 HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_SRT_TRACE 847 848 #define BNXT_CTX_SRT2_TRACE \ 849 HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_SRT2_TRACE 850 851 #define BNXT_CTX_CRT_TRACE \ 852 HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_CRT_TRACE 853 854 #define BNXT_CTX_CRT2_TRACE \ 855 HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_CRT2_TRACE 856 857 #define BNXT_CTX_RIGP0_TRACE \ 858 HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_RIGP0_TRACE 859 860 #define BNXT_CTX_L2_HWRM_TRACE \ 861 HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_L2_HWRM_TRACE 862 863 #define BNXT_CTX_ROCE_HWRM_TRACE \ 864 HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_ROCE_HWRM_TRACE 865 866 #define BNXT_CTX_INV ((u16)-1) 867 868 #define BNXT_CTX_TRACE_BUF_COUNT \ 869 (BNXT_CTX_ROCE_HWRM_TRACE - BNXT_CTX_SRT_TRACE + 1) 870 871 872 struct bnxt_ctx_mem_info { 873 u8 tqm_fp_rings_count; 874 875 u32 flags; 876 #define BNXT_CTX_FLAG_INITED 0x01 877 struct bnxt_ctx_mem_type ctx_arr[BNXT_CTX_V2_MAX]; 878 }; 879 880 struct bnxt_hw_resc { 881 uint16_t min_rsscos_ctxs; 882 uint16_t max_rsscos_ctxs; 883 uint16_t min_cp_rings; 884 uint16_t max_cp_rings; 885 uint16_t resv_cp_rings; 886 uint16_t min_tx_rings; 887 uint16_t max_tx_rings; 888 uint16_t resv_tx_rings; 889 uint16_t max_tx_sch_inputs; 890 uint16_t min_rx_rings; 891 uint16_t max_rx_rings; 892 uint16_t resv_rx_rings; 893 uint16_t min_hw_ring_grps; 894 uint16_t max_hw_ring_grps; 895 uint16_t resv_hw_ring_grps; 896 uint16_t min_l2_ctxs; 897 uint16_t max_l2_ctxs; 898 uint16_t min_vnics; 899 uint16_t max_vnics; 900 uint16_t resv_vnics; 901 uint16_t min_stat_ctxs; 902 uint16_t max_stat_ctxs; 903 uint16_t resv_stat_ctxs; 904 uint16_t max_nqs; 905 uint16_t max_irqs; 906 uint16_t resv_irqs; 907 }; 908 909 enum bnxt_type_ets { 910 BNXT_TYPE_ETS_TSA = 0, 911 BNXT_TYPE_ETS_PRI2TC, 912 BNXT_TYPE_ETS_TCBW, 913 BNXT_TYPE_ETS_MAX 914 }; 915 916 static const char *const BNXT_ETS_TYPE_STR[] = { 917 "tsa", 918 "pri2tc", 919 "tcbw", 920 }; 921 922 static const char *const BNXT_ETS_HELP_STR[] = { 923 "X is 1 (strict), 0 (ets)", 924 "TC values for pri 0 to 7", 925 "TC BW values for pri 0 to 7, Sum should be 100", 926 }; 927 928 #define BNXT_HWRM_MAX_REQ_LEN (softc->hwrm_max_req_len) 929 930 struct bnxt_softc_list { 931 SLIST_ENTRY(bnxt_softc_list) next; 932 struct bnxt_softc *softc; 933 }; 934 935 #ifndef BIT_ULL 936 #define BIT_ULL(nr) (1ULL << (nr)) 937 #endif 938 939 struct bnxt_aux_dev { 940 struct auxiliary_device aux_dev; 941 struct bnxt_en_dev *edev; 942 int id; 943 }; 944 945 struct bnxt_msix_tbl { 946 uint32_t entry; 947 uint32_t vector; 948 }; 949 950 enum bnxt_health_severity { 951 SEVERITY_NORMAL = 0, 952 SEVERITY_WARNING, 953 SEVERITY_RECOVERABLE, 954 SEVERITY_FATAL, 955 }; 956 957 enum bnxt_health_remedy { 958 REMEDY_DEVLINK_RECOVER, 959 REMEDY_POWER_CYCLE_DEVICE, 960 REMEDY_POWER_CYCLE_HOST, 961 REMEDY_FW_UPDATE, 962 REMEDY_HW_REPLACE, 963 }; 964 965 struct bnxt_fw_health { 966 u32 flags; 967 u32 polling_dsecs; 968 u32 master_func_wait_dsecs; 969 u32 normal_func_wait_dsecs; 970 u32 post_reset_wait_dsecs; 971 u32 post_reset_max_wait_dsecs; 972 u32 regs[4]; 973 u32 mapped_regs[4]; 974 #define BNXT_FW_HEALTH_REG 0 975 #define BNXT_FW_HEARTBEAT_REG 1 976 #define BNXT_FW_RESET_CNT_REG 2 977 #define BNXT_FW_RESET_INPROG_REG 3 978 u32 fw_reset_inprog_reg_mask; 979 u32 last_fw_heartbeat; 980 u32 last_fw_reset_cnt; 981 u8 enabled:1; 982 u8 primary:1; 983 u8 status_reliable:1; 984 u8 resets_reliable:1; 985 u8 tmr_multiplier; 986 u8 tmr_counter; 987 u8 fw_reset_seq_cnt; 988 u32 fw_reset_seq_regs[16]; 989 u32 fw_reset_seq_vals[16]; 990 u32 fw_reset_seq_delay_msec[16]; 991 u32 echo_req_data1; 992 u32 echo_req_data2; 993 struct devlink_health_reporter *fw_reporter; 994 struct mutex lock; 995 enum bnxt_health_severity severity; 996 enum bnxt_health_remedy remedy; 997 u32 arrests; 998 u32 discoveries; 999 u32 survivals; 1000 u32 fatalities; 1001 u32 diagnoses; 1002 }; 1003 1004 #define BNXT_FW_HEALTH_REG_TYPE_MASK 3 1005 #define BNXT_FW_HEALTH_REG_TYPE_CFG 0 1006 #define BNXT_FW_HEALTH_REG_TYPE_GRC 1 1007 #define BNXT_FW_HEALTH_REG_TYPE_BAR0 2 1008 #define BNXT_FW_HEALTH_REG_TYPE_BAR1 3 1009 1010 #define BNXT_FW_HEALTH_REG_TYPE(reg) ((reg) & BNXT_FW_HEALTH_REG_TYPE_MASK) 1011 #define BNXT_FW_HEALTH_REG_OFF(reg) ((reg) & ~BNXT_FW_HEALTH_REG_TYPE_MASK) 1012 1013 #define BNXT_FW_HEALTH_WIN_BASE 0x3000 1014 #define BNXT_FW_HEALTH_WIN_MAP_OFF 8 1015 1016 #define BNXT_FW_HEALTH_WIN_OFF(reg) (BNXT_FW_HEALTH_WIN_BASE + \ 1017 ((reg) & BNXT_GRC_OFFSET_MASK)) 1018 1019 #define BNXT_FW_STATUS_HEALTH_MSK 0xffff 1020 #define BNXT_FW_STATUS_HEALTHY 0x8000 1021 #define BNXT_FW_STATUS_SHUTDOWN 0x100000 1022 #define BNXT_FW_STATUS_RECOVERING 0x400000 1023 1024 #define BNXT_FW_IS_HEALTHY(sts) (((sts) & BNXT_FW_STATUS_HEALTH_MSK) ==\ 1025 BNXT_FW_STATUS_HEALTHY) 1026 1027 #define BNXT_FW_IS_BOOTING(sts) (((sts) & BNXT_FW_STATUS_HEALTH_MSK) < \ 1028 BNXT_FW_STATUS_HEALTHY) 1029 1030 #define BNXT_FW_IS_ERR(sts) (((sts) & BNXT_FW_STATUS_HEALTH_MSK) > \ 1031 BNXT_FW_STATUS_HEALTHY) 1032 1033 #define BNXT_FW_IS_RECOVERING(sts) (BNXT_FW_IS_ERR(sts) && \ 1034 ((sts) & BNXT_FW_STATUS_RECOVERING)) 1035 1036 #define BNXT_FW_RETRY 5 1037 #define BNXT_FW_IF_RETRY 10 1038 #define BNXT_FW_SLOT_RESET_RETRY 4 1039 1040 #define BNXT_GRCPF_REG_CHIMP_COMM 0x0 1041 #define BNXT_GRCPF_REG_CHIMP_COMM_TRIGGER 0x100 1042 #define BNXT_GRCPF_REG_WINDOW_BASE_OUT 0x400 1043 #define BNXT_GRCPF_REG_SYNC_TIME 0x480 1044 #define BNXT_GRCPF_REG_SYNC_TIME_ADJ 0x488 1045 #define BNXT_GRCPF_REG_SYNC_TIME_ADJ_PER_MSK 0xffffffUL 1046 #define BNXT_GRCPF_REG_SYNC_TIME_ADJ_PER_SFT 0 1047 #define BNXT_GRCPF_REG_SYNC_TIME_ADJ_VAL_MSK 0x1f000000UL 1048 #define BNXT_GRCPF_REG_SYNC_TIME_ADJ_VAL_SFT 24 1049 #define BNXT_GRCPF_REG_SYNC_TIME_ADJ_SIGN_MSK 0x20000000UL 1050 #define BNXT_GRCPF_REG_SYNC_TIME_ADJ_SIGN_SFT 29 1051 1052 #define BNXT_GRC_REG_STATUS_P5 0x520 1053 1054 #define BNXT_GRCPF_REG_KONG_COMM 0xA00 1055 #define BNXT_GRCPF_REG_KONG_COMM_TRIGGER 0xB00 1056 1057 #define BNXT_CAG_REG_LEGACY_INT_STATUS 0x4014 1058 #define BNXT_CAG_REG_BASE 0x300000 1059 1060 #define BNXT_GRC_REG_CHIP_NUM 0x48 1061 #define BNXT_GRC_REG_BASE 0x260000 1062 1063 #define BNXT_TS_REG_TIMESYNC_TS0_LOWER 0x640180c 1064 #define BNXT_TS_REG_TIMESYNC_TS0_UPPER 0x6401810 1065 1066 #define BNXT_GRC_BASE_MASK 0xfffff000 1067 #define BNXT_GRC_OFFSET_MASK 0x00000ffc 1068 1069 #define NQE_CN_TYPE(type) ((type) & NQ_CN_TYPE_MASK) 1070 #define NQE_CN_TOGGLE(type) (((type) & NQ_CN_TOGGLE_MASK) >> \ 1071 NQ_CN_TOGGLE_SFT) 1072 1073 #define DB_EPOCH(ring, idx) (((idx) & (ring)->db_epoch_mask) << \ 1074 ((ring)->db_epoch_shift)) 1075 1076 #define DB_TOGGLE(tgl) ((tgl) << DBR_TOGGLE_SFT) 1077 1078 #define DB_RING_IDX_CMP(ring, idx) (((idx) & (ring)->db_ring_mask) | \ 1079 DB_EPOCH(ring, idx)) 1080 1081 #define DB_RING_IDX(ring, idx, bit) (((idx) & (ring)->db_ring_mask) | \ 1082 ((bit) << (24))) 1083 1084 struct bnxt_bs_trace_info { 1085 u8 *magic_byte; 1086 #define BNXT_TRACE_BUF_MAGIC_BYTE ((uint8_t)0xBC) 1087 u32 last_offset; 1088 u8 wrapped:1; 1089 u16 ctx_type; 1090 u16 trace_type; 1091 }; 1092 1093 struct bnxt_logger; 1094 1095 struct bnxt_softc { 1096 device_t dev; 1097 if_ctx_t ctx; 1098 if_softc_ctx_t scctx; 1099 if_shared_ctx_t sctx; 1100 if_t ifp; 1101 uint32_t domain; 1102 uint32_t bus; 1103 uint32_t slot; 1104 uint32_t function; 1105 uint32_t dev_fn; 1106 struct ifmedia *media; 1107 struct bnxt_ctx_mem_info *ctx_mem; 1108 struct bnxt_hw_resc hw_resc; 1109 struct bnxt_softc_list list; 1110 1111 struct bnxt_bar_info hwrm_bar; 1112 struct bnxt_bar_info doorbell_bar; 1113 struct bnxt_link_info link_info; 1114 struct bnxt_led_info leds[BNXT_MAX_LED]; 1115 uint8_t num_leds; 1116 bool led_active; 1117 #define BNXT_FLAG_VF 0x0001 1118 #define BNXT_FLAG_NPAR 0x0002 1119 #define BNXT_FLAG_WOL_CAP 0x0004 1120 #define BNXT_FLAG_SHORT_CMD 0x0008 1121 #define BNXT_FLAG_FW_CAP_NEW_RM 0x0010 1122 #define BNXT_FLAG_CHIP_P5 0x0020 1123 #define BNXT_FLAG_TPA 0x0040 1124 #define BNXT_FLAG_FW_CAP_EXT_STATS 0x0080 1125 #define BNXT_FLAG_MULTI_HOST 0x0100 1126 #define BNXT_FLAG_MULTI_ROOT 0x0200 1127 #define BNXT_FLAG_ROCEV1_CAP 0x0400 1128 #define BNXT_FLAG_ROCEV2_CAP 0x0800 1129 #define BNXT_FLAG_ROCE_CAP (BNXT_FLAG_ROCEV1_CAP | BNXT_FLAG_ROCEV2_CAP) 1130 #define BNXT_FLAG_CHIP_P7 0x1000 1131 uint32_t flags; 1132 #define BNXT_STATE_LINK_CHANGE (0) 1133 #define BNXT_STATE_MAX (BNXT_STATE_LINK_CHANGE + 1) 1134 bitstr_t *state_bv; 1135 1136 uint32_t total_irqs; 1137 struct bnxt_msix_tbl *irq_tbl; 1138 1139 struct bnxt_func_info func; 1140 struct bnxt_func_qcfg fn_qcfg; 1141 struct bnxt_pf_info pf; 1142 struct bnxt_vf_info vf; 1143 struct hwrm_func_vf_resource_cfg_input vf_resc_cfg_input; 1144 1145 uint16_t hwrm_cmd_seq; 1146 uint32_t hwrm_cmd_timeo; /* milliseconds */ 1147 1148 /* DDR Crash Dump Support */ 1149 struct bnxt_ctx_pg_info *fw_crash_mem; 1150 uint32_t fw_crash_len; 1151 uint32_t fw_dbg_cap; 1152 #define BNXT_FW_DBG_CAP_CRASHDUMP_SOC 0x00000001 1153 #define BNXT_FW_DBG_CAP_CRASHDUMP_HOST 0x00000002 1154 uint16_t dump_flag; 1155 #define BNXT_DUMP_LIVE 0 1156 #define BNXT_DUMP_CRASH 1 1157 #define BNXT_DUMP_DRIVER 2 1158 #define BNXT_DUMP_LIVE_WITH_CTX_L1_CACHE 3 1159 struct iflib_dma_info hwrm_cmd_resp; 1160 struct iflib_dma_info hwrm_short_cmd_req_addr; 1161 /* Interrupt info for HWRM */ 1162 struct if_irq irq; 1163 struct mtx hwrm_lock; 1164 struct mtx sriov_lock; 1165 uint16_t hwrm_max_req_len; 1166 uint16_t hwrm_max_ext_req_len; 1167 uint32_t hwrm_spec_code; 1168 1169 #define BNXT_MAX_QUEUE 8 1170 uint8_t max_tc; 1171 uint8_t max_lltc; 1172 struct bnxt_queue_info tx_q_info[BNXT_MAX_QUEUE]; 1173 struct bnxt_queue_info rx_q_info[BNXT_MAX_QUEUE]; 1174 uint8_t tc_to_qidx[BNXT_MAX_QUEUE]; 1175 uint8_t tx_q_ids[BNXT_MAX_QUEUE]; 1176 uint8_t rx_q_ids[BNXT_MAX_QUEUE]; 1177 uint8_t tx_max_q; 1178 uint8_t rx_max_q; 1179 uint8_t is_asym_q; 1180 1181 struct bnxt_ieee_ets *ieee_ets; 1182 struct bnxt_ieee_pfc *ieee_pfc; 1183 uint8_t dcbx_cap; 1184 uint8_t default_pri; 1185 uint8_t max_dscp_value; 1186 1187 uint64_t admin_ticks; 1188 struct iflib_dma_info hw_rx_port_stats; 1189 struct iflib_dma_info hw_tx_port_stats; 1190 struct rx_port_stats *rx_port_stats; 1191 struct tx_port_stats *tx_port_stats; 1192 1193 struct iflib_dma_info hw_tx_port_stats_ext; 1194 struct iflib_dma_info hw_rx_port_stats_ext; 1195 struct tx_port_stats_ext *tx_port_stats_ext; 1196 struct rx_port_stats_ext *rx_port_stats_ext; 1197 1198 uint16_t fw_rx_stats_ext_size; 1199 uint16_t fw_tx_stats_ext_size; 1200 uint16_t hw_ring_stats_size; 1201 1202 uint8_t tx_pri2cos_idx[8]; 1203 uint8_t rx_pri2cos_idx[8]; 1204 bool pri2cos_valid; 1205 1206 uint64_t tx_bytes_pri[8]; 1207 uint64_t tx_packets_pri[8]; 1208 uint64_t rx_bytes_pri[8]; 1209 uint64_t rx_packets_pri[8]; 1210 1211 uint8_t port_count; 1212 int num_cp_rings; 1213 1214 struct bnxt_cp_ring *nq_rings; 1215 1216 struct bnxt_ring *tx_rings; 1217 struct bnxt_cp_ring *tx_cp_rings; 1218 struct iflib_dma_info tx_stats[BNXT_MAX_NUM_QUEUES]; 1219 int ntxqsets; 1220 1221 struct bnxt_vnic_info vnic_info; 1222 struct bnxt_ring *ag_rings; 1223 struct bnxt_ring *rx_rings; 1224 struct bnxt_cp_ring *rx_cp_rings; 1225 struct bnxt_grp_info *grp_info; 1226 struct iflib_dma_info rx_stats[BNXT_MAX_NUM_QUEUES]; 1227 int nrxqsets; 1228 uint16_t rx_buf_size; 1229 1230 struct bnxt_cp_ring def_cp_ring; 1231 struct bnxt_cp_ring def_nq_ring; 1232 struct iflib_dma_info def_cp_ring_mem; 1233 struct iflib_dma_info def_nq_ring_mem; 1234 struct task def_cp_task; 1235 int db_size; 1236 int db_offset; 1237 int legacy_db_size; 1238 struct bnxt_doorbell_ops db_ops; 1239 1240 struct sysctl_ctx_list hw_stats; 1241 struct sysctl_oid *hw_stats_oid; 1242 struct sysctl_ctx_list hw_lro_ctx; 1243 struct sysctl_oid *hw_lro_oid; 1244 struct sysctl_ctx_list flow_ctrl_ctx; 1245 struct sysctl_oid *flow_ctrl_oid; 1246 struct sysctl_ctx_list dcb_ctx; 1247 struct sysctl_oid *dcb_oid; 1248 1249 struct bnxt_ver_info *ver_info; 1250 struct hwrm_ver_get_output ver_resp; 1251 struct bnxt_nvram_info *nvm_info; 1252 bool wol; 1253 bool is_dev_init; 1254 struct bnxt_hw_lro hw_lro; 1255 uint8_t wol_filter_id; 1256 uint16_t rx_coal_usecs; 1257 uint16_t rx_coal_usecs_irq; 1258 uint16_t rx_coal_frames; 1259 uint16_t rx_coal_frames_irq; 1260 uint16_t tx_coal_usecs; 1261 uint16_t tx_coal_usecs_irq; 1262 uint16_t tx_coal_frames; 1263 uint16_t tx_coal_frames_irq; 1264 1265 #define BNXT_USEC_TO_COAL_TIMER(x) ((x) * 25 / 2) 1266 #define BNXT_DEF_STATS_COAL_TICKS 1000000 1267 #define BNXT_MIN_STATS_COAL_TICKS 250000 1268 #define BNXT_MAX_STATS_COAL_TICKS 1000000 1269 1270 uint64_t fw_cap; 1271 #define BNXT_FW_CAP_SHORT_CMD BIT_ULL(0) 1272 #define BNXT_FW_CAP_LLDP_AGENT BIT_ULL(1) 1273 #define BNXT_FW_CAP_DCBX_AGENT BIT_ULL(2) 1274 #define BNXT_FW_CAP_NEW_RM BIT_ULL(3) 1275 #define BNXT_FW_CAP_IF_CHANGE BIT_ULL(4) 1276 #define BNXT_FW_CAP_LINK_ADMIN BIT_ULL(5) 1277 #define BNXT_FW_CAP_VF_RES_MIN_GUARANTEED BIT_ULL(6) 1278 #define BNXT_FW_CAP_KONG_MB_CHNL BIT_ULL(7) 1279 #define BNXT_FW_CAP_ADMIN_MTU BIT_ULL(8) 1280 #define BNXT_FW_CAP_ADMIN_PF BIT_ULL(9) 1281 #define BNXT_FW_CAP_OVS_64BIT_HANDLE BIT_ULL(10) 1282 #define BNXT_FW_CAP_TRUSTED_VF BIT_ULL(11) 1283 #define BNXT_FW_CAP_VF_VNIC_NOTIFY BIT_ULL(12) 1284 #define BNXT_FW_CAP_ERROR_RECOVERY BIT_ULL(13) 1285 #define BNXT_FW_CAP_PKG_VER BIT_ULL(14) 1286 #define BNXT_FW_CAP_CFA_ADV_FLOW BIT_ULL(15) 1287 #define BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V2 BIT_ULL(16) 1288 #define BNXT_FW_CAP_PCIE_STATS_SUPPORTED BIT_ULL(17) 1289 #define BNXT_FW_CAP_EXT_STATS_SUPPORTED BIT_ULL(18) 1290 #define BNXT_FW_CAP_SECURE_MODE BIT_ULL(19) 1291 #define BNXT_FW_CAP_ERR_RECOVER_RELOAD BIT_ULL(20) 1292 #define BNXT_FW_CAP_HOT_RESET BIT_ULL(21) 1293 #define BNXT_FW_CAP_CRASHDUMP BIT_ULL(23) 1294 #define BNXT_FW_CAP_VLAN_RX_STRIP BIT_ULL(24) 1295 #define BNXT_FW_CAP_VLAN_TX_INSERT BIT_ULL(25) 1296 #define BNXT_FW_CAP_EXT_HW_STATS_SUPPORTED BIT_ULL(26) 1297 #define BNXT_FW_CAP_CFA_EEM BIT_ULL(27) 1298 #define BNXT_FW_CAP_DBG_QCAPS BIT_ULL(29) 1299 #define BNXT_FW_CAP_RING_MONITOR BIT_ULL(30) 1300 #define BNXT_FW_CAP_ECN_STATS BIT_ULL(31) 1301 #define BNXT_FW_CAP_TRUFLOW BIT_ULL(32) 1302 #define BNXT_FW_CAP_VF_CFG_FOR_PF BIT_ULL(33) 1303 #define BNXT_FW_CAP_PTP_PPS BIT_ULL(34) 1304 #define BNXT_FW_CAP_HOT_RESET_IF BIT_ULL(35) 1305 #define BNXT_FW_CAP_LIVEPATCH BIT_ULL(36) 1306 #define BNXT_FW_CAP_NPAR_1_2 BIT_ULL(37) 1307 #define BNXT_FW_CAP_RSS_HASH_TYPE_DELTA BIT_ULL(38) 1308 #define BNXT_FW_CAP_PTP_RTC BIT_ULL(39) 1309 #define BNXT_FW_CAP_TRUFLOW_EN BIT_ULL(40) 1310 #define BNXT_TRUFLOW_EN(bp) ((bp)->fw_cap & BNXT_FW_CAP_TRUFLOW_EN) 1311 #define BNXT_FW_CAP_RX_ALL_PKT_TS BIT_ULL(41) 1312 #define BNXT_FW_CAP_BACKING_STORE_V2 BIT_ULL(42) 1313 #define BNXT_FW_CAP_DBR_SUPPORTED BIT_ULL(43) 1314 #define BNXT_FW_CAP_GENERIC_STATS BIT_ULL(44) 1315 #define BNXT_FW_CAP_DBR_PACING_SUPPORTED BIT_ULL(45) 1316 #define BNXT_FW_CAP_PTP_PTM BIT_ULL(46) 1317 #define BNXT_FW_CAP_CFA_NTUPLE_RX_EXT_IP_PROTO BIT_ULL(47) 1318 #define BNXT_FW_CAP_ENABLE_RDMA_SRIOV BIT_ULL(48) 1319 #define BNXT_FW_CAP_RSS_TCAM BIT_ULL(49) 1320 1321 #define BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS BIT_ULL(61) 1322 #define BNXT_SW_RES_LMT(bp) ((bp)->fw_cap & BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS) 1323 1324 uint32_t lpi_tmr_lo; 1325 uint32_t lpi_tmr_hi; 1326 /* copied from flags and flags2 in hwrm_port_phy_qcaps_output */ 1327 uint16_t phy_flags; 1328 #define BNXT_PHY_FL_EEE_CAP HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EEE_SUPPORTED 1329 #define BNXT_PHY_FL_EXT_LPBK HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EXTERNAL_LPBK_SUPPORTED 1330 #define BNXT_PHY_FL_AN_PHY_LPBK HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_AUTONEG_LPBK_SUPPORTED 1331 #define BNXT_PHY_FL_SHARED_PORT_CFG HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_SHARED_PHY_CFG_SUPPORTED 1332 #define BNXT_PHY_FL_PORT_STATS_NO_RESET HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_CUMULATIVE_COUNTERS_ON_RESET 1333 #define BNXT_PHY_FL_NO_PHY_LPBK HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_LOCAL_LPBK_NOT_SUPPORTED 1334 #define BNXT_PHY_FL_FW_MANAGED_LKDN HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_FW_MANAGED_LINK_DOWN 1335 #define BNXT_PHY_FL_NO_FCS HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_NO_FCS 1336 #define BNXT_PHY_FL_NO_PAUSE (HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS2_PAUSE_UNSUPPORTED << 8) 1337 #define BNXT_PHY_FL_NO_PFC (HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS2_PFC_UNSUPPORTED << 8) 1338 #define BNXT_PHY_FL_BANK_SEL (HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS2_BANK_ADDR_SUPPORTED << 8) 1339 #define BNXT_PHY_FL_SPEEDS2 (HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS2_SPEEDS2_SUPPORTED << 8) 1340 struct bnxt_aux_dev *aux_dev; 1341 struct net_device *net_dev; 1342 struct mtx en_ops_lock; 1343 uint8_t port_partition_type; 1344 struct bnxt_en_dev *edev; 1345 unsigned long state; 1346 #define BNXT_STATE_OPEN 0 1347 #define BNXT_STATE_IN_SP_TASK 1 1348 #define BNXT_STATE_READ_STATS 2 1349 #define BNXT_STATE_FW_RESET_DET 3 1350 #define BNXT_STATE_IN_FW_RESET 4 1351 #define BNXT_STATE_ABORT_ERR 5 1352 #define BNXT_STATE_FW_FATAL_COND 6 1353 #define BNXT_STATE_DRV_REGISTERED 7 1354 #define BNXT_STATE_PCI_CHANNEL_IO_FROZEN 8 1355 #define BNXT_STATE_NAPI_DISABLED 9 1356 #define BNXT_STATE_L2_FILTER_RETRY 10 1357 #define BNXT_STATE_FW_ACTIVATE 11 1358 #define BNXT_STATE_RECOVER 12 1359 #define BNXT_STATE_FW_NON_FATAL_COND 13 1360 #define BNXT_STATE_FW_ACTIVATE_RESET 14 1361 #define BNXT_STATE_HALF_OPEN 15 1362 #define BNXT_NO_FW_ACCESS(bp) \ 1363 test_bit(BNXT_STATE_FW_FATAL_COND, &(bp)->state) 1364 struct pci_dev *pdev; 1365 1366 struct work_struct sp_task; 1367 unsigned long sp_event; 1368 #define BNXT_RX_MASK_SP_EVENT 0 1369 #define BNXT_RX_NTP_FLTR_SP_EVENT 1 1370 #define BNXT_LINK_CHNG_SP_EVENT 2 1371 #define BNXT_HWRM_EXEC_FWD_REQ_SP_EVENT 3 1372 #define BNXT_VXLAN_ADD_PORT_SP_EVENT 4 1373 #define BNXT_VXLAN_DEL_PORT_SP_EVENT 5 1374 #define BNXT_RESET_TASK_SP_EVENT 6 1375 #define BNXT_RST_RING_SP_EVENT 7 1376 #define BNXT_HWRM_PF_UNLOAD_SP_EVENT 8 1377 #define BNXT_PERIODIC_STATS_SP_EVENT 9 1378 #define BNXT_HWRM_PORT_MODULE_SP_EVENT 10 1379 #define BNXT_RESET_TASK_SILENT_SP_EVENT 11 1380 #define BNXT_GENEVE_ADD_PORT_SP_EVENT 12 1381 #define BNXT_GENEVE_DEL_PORT_SP_EVENT 13 1382 #define BNXT_LINK_SPEED_CHNG_SP_EVENT 14 1383 #define BNXT_FLOW_STATS_SP_EVENT 15 1384 #define BNXT_UPDATE_PHY_SP_EVENT 16 1385 #define BNXT_RING_COAL_NOW_SP_EVENT 17 1386 #define BNXT_FW_RESET_NOTIFY_SP_EVENT 18 1387 #define BNXT_FW_EXCEPTION_SP_EVENT 19 1388 #define BNXT_VF_VNIC_CHANGE_SP_EVENT 20 1389 #define BNXT_LINK_CFG_CHANGE_SP_EVENT 21 1390 #define BNXT_PTP_CURRENT_TIME_EVENT 22 1391 #define BNXT_FW_ECHO_REQUEST_SP_EVENT 23 1392 #define BNXT_VF_CFG_CHNG_SP_EVENT 24 1393 1394 struct delayed_work fw_reset_task; 1395 int fw_reset_state; 1396 #define BNXT_FW_RESET_STATE_POLL_VF 1 1397 #define BNXT_FW_RESET_STATE_RESET_FW 2 1398 #define BNXT_FW_RESET_STATE_ENABLE_DEV 3 1399 #define BNXT_FW_RESET_STATE_POLL_FW 4 1400 #define BNXT_FW_RESET_STATE_OPENING 5 1401 #define BNXT_FW_RESET_STATE_POLL_FW_DOWN 6 1402 u16 fw_reset_min_dsecs; 1403 #define BNXT_DFLT_FW_RST_MIN_DSECS 20 1404 u16 fw_reset_max_dsecs; 1405 #define BNXT_DFLT_FW_RST_MAX_DSECS 60 1406 unsigned long fw_reset_timestamp; 1407 1408 struct bnxt_fw_health *fw_health; 1409 char board_partno[64]; 1410 TAILQ_HEAD(, bnxt_logger) loggers_list; 1411 void *debug_buf; 1412 struct mtx log_lock; /* logging ops lock */ 1413 struct callout time_sync_callout; 1414 struct bnxt_bs_trace_info bs_trace[BNXT_CTX_TRACE_BUF_COUNT]; 1415 1416 #define MAX_NUM_DMA_INDICATIONS 10 1417 struct iflib_dma_info mgmt_dma_data[MAX_NUM_DMA_INDICATIONS]; 1418 }; 1419 1420 struct bnxt_filter_info { 1421 STAILQ_ENTRY(bnxt_filter_info) next; 1422 uint64_t fw_l2_filter_id; 1423 #define INVALID_MAC_INDEX ((uint16_t)-1) 1424 uint16_t mac_index; 1425 1426 /* Filter Characteristics */ 1427 uint32_t flags; 1428 uint32_t enables; 1429 uint8_t l2_addr[ETHER_ADDR_LEN]; 1430 uint8_t l2_addr_mask[ETHER_ADDR_LEN]; 1431 uint16_t l2_ovlan; 1432 uint16_t l2_ovlan_mask; 1433 uint16_t l2_ivlan; 1434 uint16_t l2_ivlan_mask; 1435 uint8_t t_l2_addr[ETHER_ADDR_LEN]; 1436 uint8_t t_l2_addr_mask[ETHER_ADDR_LEN]; 1437 uint16_t t_l2_ovlan; 1438 uint16_t t_l2_ovlan_mask; 1439 uint16_t t_l2_ivlan; 1440 uint16_t t_l2_ivlan_mask; 1441 uint8_t tunnel_type; 1442 uint16_t mirror_vnic_id; 1443 uint32_t vni; 1444 uint8_t pri_hint; 1445 uint64_t l2_filter_id_hint; 1446 }; 1447 1448 #define I2C_DEV_ADDR_A0 0xa0 1449 #define BNXT_MAX_PHY_I2C_RESP_SIZE 64 1450 1451 /* Function declarations */ 1452 void bnxt_report_link(struct bnxt_softc *softc); 1453 bool bnxt_check_hwrm_version(struct bnxt_softc *softc); 1454 struct bnxt_softc *bnxt_find_dev(uint32_t domain, uint32_t bus, uint32_t dev_fn, char *name); 1455 int bnxt_read_sfp_module_eeprom_info(struct bnxt_softc *bp, uint16_t i2c_addr, 1456 uint16_t page_number, uint8_t bank, bool bank_sel_en, uint16_t start_addr, 1457 uint16_t data_length, uint8_t *buf); 1458 void bnxt_dcb_init(struct bnxt_softc *softc); 1459 void bnxt_dcb_free(struct bnxt_softc *softc); 1460 uint8_t bnxt_dcb_setdcbx(struct bnxt_softc *softc, uint8_t mode); 1461 uint8_t bnxt_dcb_getdcbx(struct bnxt_softc *softc); 1462 int bnxt_dcb_ieee_getets(struct bnxt_softc *softc, struct bnxt_ieee_ets *ets); 1463 int bnxt_dcb_ieee_setets(struct bnxt_softc *softc, struct bnxt_ieee_ets *ets); 1464 uint8_t get_phy_type(struct bnxt_softc *softc); 1465 int bnxt_dcb_ieee_getpfc(struct bnxt_softc *softc, struct bnxt_ieee_pfc *pfc); 1466 int bnxt_dcb_ieee_setpfc(struct bnxt_softc *softc, struct bnxt_ieee_pfc *pfc); 1467 int bnxt_dcb_ieee_setapp(struct bnxt_softc *softc, struct bnxt_dcb_app *app); 1468 int bnxt_dcb_ieee_delapp(struct bnxt_softc *softc, struct bnxt_dcb_app *app); 1469 int bnxt_dcb_ieee_listapp(struct bnxt_softc *softc, struct bnxt_dcb_app *app, 1470 size_t nitems, int *num_inputs); 1471 void bnxt_set_flags_by_devid(struct bnxt_softc *softc); 1472 int bnxt_hwrm_reserve_rings(struct bnxt_softc *softc); 1473 void bnxt_free_ctx_pg_tbls(struct bnxt_softc *softc, 1474 struct bnxt_ctx_pg_info *ctx_pg); 1475 int bnxt_alloc_ctx_pg_tbls(struct bnxt_softc *softc, 1476 struct bnxt_ctx_pg_info *ctx_pg, 1477 uint32_t mem_size, uint8_t depth, 1478 struct bnxt_ctx_mem_type *ctxm); 1479 #endif /* _BNXT_H */ 1480