1fd710bb1SScott Branden /* SPDX-License-Identifier: BSD-3-Clause 2d9e70b1dSRandy Schacher * Copyright(c) 2014-2023 Broadcom 3804e746cSAjit Khaparde * All rights reserved. 4804e746cSAjit Khaparde */ 5804e746cSAjit Khaparde 6804e746cSAjit Khaparde #ifndef _BNXT_H_ 7804e746cSAjit Khaparde #define _BNXT_H_ 8804e746cSAjit Khaparde 9804e746cSAjit Khaparde #include <inttypes.h> 10b7778e8aSAjit Khaparde #include <stdbool.h> 112744cb6eSThomas Monjalon #include <pthread.h> 12804e746cSAjit Khaparde #include <sys/queue.h> 13804e746cSAjit Khaparde 146477966cSGaetan Rivet #include <rte_pci.h> 151f37cb2bSDavid Marchand #include <bus_pci_driver.h> 16df96fd0dSBruce Richardson #include <ethdev_driver.h> 17804e746cSAjit Khaparde #include <rte_memory.h> 18804e746cSAjit Khaparde #include <rte_lcore.h> 19804e746cSAjit Khaparde #include <rte_spinlock.h> 20b11cceb8SSomnath Kotur #include <rte_time.h> 214333cbfeSDamodharam Ammepalli #include <rte_eal_paging.h> 22804e746cSAjit Khaparde 23f2a768d4SAjit Khaparde #include "bnxt_cpr.h" 24b7c57f4eSKalesh AP #include "bnxt_util.h" 25f2a768d4SAjit Khaparde 268430a8b8SMichael Wildt #include "tf_core.h" 2780317ff6SFarah Smith #include "tfc.h" 28313ac35aSVenkat Duvvuru #include "bnxt_ulp.h" 2945e8e1d4SVenkat Duvvuru #include "bnxt_tf_common.h" 3080317ff6SFarah Smith #include "bnxt_mpc.h" 316d160d77SRandy Schacher #include "bnxt_vnic.h" 328430a8b8SMichael Wildt 339924dfd6SKalesh AP /* Vendor ID */ 349924dfd6SKalesh AP #define PCI_VENDOR_ID_BROADCOM 0x14E4 359924dfd6SKalesh AP 369924dfd6SKalesh AP /* Device IDs */ 379924dfd6SKalesh AP #define BROADCOM_DEV_ID_STRATUS_NIC_VF1 0x1606 389924dfd6SKalesh AP #define BROADCOM_DEV_ID_STRATUS_NIC_VF2 0x1609 399924dfd6SKalesh AP #define BROADCOM_DEV_ID_STRATUS_NIC 0x1614 409924dfd6SKalesh AP #define BROADCOM_DEV_ID_57414_VF 0x16c1 419924dfd6SKalesh AP #define BROADCOM_DEV_ID_57304_VF 0x16cb 429924dfd6SKalesh AP #define BROADCOM_DEV_ID_57417_MF 0x16cc 439924dfd6SKalesh AP #define BROADCOM_DEV_ID_NS2 0x16cd 449924dfd6SKalesh AP #define BROADCOM_DEV_ID_57406_VF 0x16d3 459924dfd6SKalesh AP #define BROADCOM_DEV_ID_57412 0x16d6 469924dfd6SKalesh AP #define BROADCOM_DEV_ID_57414 0x16d7 479924dfd6SKalesh AP #define BROADCOM_DEV_ID_57416_RJ45 0x16d8 489924dfd6SKalesh AP #define BROADCOM_DEV_ID_57417_RJ45 0x16d9 499924dfd6SKalesh AP #define BROADCOM_DEV_ID_5741X_VF 0x16dc 509924dfd6SKalesh AP #define BROADCOM_DEV_ID_57412_MF 0x16de 519924dfd6SKalesh AP #define BROADCOM_DEV_ID_57317_RJ45 0x16e0 529924dfd6SKalesh AP #define BROADCOM_DEV_ID_5731X_VF 0x16e1 539924dfd6SKalesh AP #define BROADCOM_DEV_ID_57417_SFP 0x16e2 549924dfd6SKalesh AP #define BROADCOM_DEV_ID_57416_SFP 0x16e3 559924dfd6SKalesh AP #define BROADCOM_DEV_ID_57317_SFP 0x16e4 569924dfd6SKalesh AP #define BROADCOM_DEV_ID_57407_MF 0x16ea 579924dfd6SKalesh AP #define BROADCOM_DEV_ID_57414_MF 0x16ec 589924dfd6SKalesh AP #define BROADCOM_DEV_ID_57416_MF 0x16ee 599924dfd6SKalesh AP #define BROADCOM_DEV_ID_57508 0x1750 609924dfd6SKalesh AP #define BROADCOM_DEV_ID_57504 0x1751 619924dfd6SKalesh AP #define BROADCOM_DEV_ID_57502 0x1752 62382e273aSKalesh AP #define BROADCOM_DEV_ID_57508_MF1 0x1800 63382e273aSKalesh AP #define BROADCOM_DEV_ID_57504_MF1 0x1801 64382e273aSKalesh AP #define BROADCOM_DEV_ID_57502_MF1 0x1802 65382e273aSKalesh AP #define BROADCOM_DEV_ID_57508_MF2 0x1803 66382e273aSKalesh AP #define BROADCOM_DEV_ID_57504_MF2 0x1804 67382e273aSKalesh AP #define BROADCOM_DEV_ID_57502_MF2 0x1805 689924dfd6SKalesh AP #define BROADCOM_DEV_ID_57500_VF1 0x1806 699924dfd6SKalesh AP #define BROADCOM_DEV_ID_57500_VF2 0x1807 709924dfd6SKalesh AP #define BROADCOM_DEV_ID_58802 0xd802 719924dfd6SKalesh AP #define BROADCOM_DEV_ID_58804 0xd804 729924dfd6SKalesh AP #define BROADCOM_DEV_ID_58808 0x16f0 739924dfd6SKalesh AP #define BROADCOM_DEV_ID_58802_VF 0xd800 74ecf1474aSKalesh AP #define BROADCOM_DEV_ID_58812 0xd812 75ecf1474aSKalesh AP #define BROADCOM_DEV_ID_58814 0xd814 76ecf1474aSKalesh AP #define BROADCOM_DEV_ID_58818 0xd818 77ecf1474aSKalesh AP #define BROADCOM_DEV_ID_58818_VF 0xd82e 78f91141f0SAjit Khaparde #define BROADCOM_DEV_ID_57608 0x1760 79f91141f0SAjit Khaparde #define BROADCOM_DEV_ID_57604 0x1761 80f91141f0SAjit Khaparde #define BROADCOM_DEV_ID_57602 0x1762 81f91141f0SAjit Khaparde #define BROADCOM_DEV_ID_57601 0x1763 82f91141f0SAjit Khaparde #define BROADCOM_DEV_ID_5760X_VF 0x1819 839924dfd6SKalesh AP 8499ad2abcSKalesh AP #define BROADCOM_DEV_957508_N2100 0x5208 859c1410beSKalesh AP #define BROADCOM_DEV_957414_N225 0x4145 8699ad2abcSKalesh AP 87fe2f715cSAjit Khaparde #define HWRM_SPEC_CODE_1_8_3 0x10803 88fe2f715cSAjit Khaparde #define HWRM_VERSION_1_9_1 0x10901 89fe2f715cSAjit Khaparde #define HWRM_VERSION_1_9_2 0x10903 90fe2f715cSAjit Khaparde #define HWRM_VERSION_1_10_2_13 0x10a020d 91fe2f715cSAjit Khaparde 9280ad678aSAjit Khaparde #define BNXT_MAX_MTU 9574 9309aac391SSantoshkumar Karanappa Rastapur #define BNXT_NUM_VLANS 2 9409aac391SSantoshkumar Karanappa Rastapur #define BNXT_MAX_PKT_LEN (BNXT_MAX_MTU + RTE_ETHER_HDR_LEN +\ 9509aac391SSantoshkumar Karanappa Rastapur RTE_ETHER_CRC_LEN +\ 9625cf2630SFerruh Yigit (BNXT_NUM_VLANS * RTE_VLAN_HLEN)) 977d4e9e26SSantoshkumar Karanappa Rastapur /* FW adds extra 4 bytes for FCS */ 987d4e9e26SSantoshkumar Karanappa Rastapur #define BNXT_VNIC_MRU(mtu)\ 9925cf2630SFerruh Yigit ((mtu) + RTE_ETHER_HDR_LEN + RTE_VLAN_HLEN * BNXT_NUM_VLANS) 1006d8109bcSAjit Khaparde #define BNXT_VF_RSV_NUM_RSS_CTX 1 1016d8109bcSAjit Khaparde #define BNXT_VF_RSV_NUM_L2_CTX 4 1026d8109bcSAjit Khaparde /* TODO: For now, do not support VMDq/RFS on VFs. */ 1036d8109bcSAjit Khaparde #define BNXT_VF_RSV_NUM_VNIC 1 104bb81e073SAjit Khaparde #define BNXT_MAX_LED 4 1056a68c813SAjit Khaparde #define BNXT_MIN_RING_DESC 16 1066a68c813SAjit Khaparde #define BNXT_MAX_TX_RING_DESC 4096 1076a68c813SAjit Khaparde #define BNXT_MAX_RX_RING_DESC 8192 10814255b35SAjit Khaparde #define BNXT_DB_SIZE 0x80 109bb81e073SAjit Khaparde 110b150a7e7SLance Richardson #define TPA_MAX_AGGS 64 111b150a7e7SLance Richardson #define TPA_MAX_AGGS_TH 1024 112b150a7e7SLance Richardson 113b150a7e7SLance Richardson #define TPA_MAX_NUM_SEGS 32 114b150a7e7SLance Richardson #define TPA_MAX_SEGS_TH 8 /* 32 segments in 4-segment units */ 115b150a7e7SLance Richardson #define TPA_MAX_SEGS 5 /* 32 segments in log2 units */ 116b150a7e7SLance Richardson 117b150a7e7SLance Richardson #define BNXT_TPA_MAX_AGGS(bp) \ 1183b56c3ffSAjit Khaparde (BNXT_CHIP_P5_P7(bp) ? TPA_MAX_AGGS_TH : \ 119b150a7e7SLance Richardson TPA_MAX_AGGS) 120b150a7e7SLance Richardson 121b150a7e7SLance Richardson #define BNXT_TPA_MAX_SEGS(bp) \ 1223b56c3ffSAjit Khaparde (BNXT_CHIP_P5_P7(bp) ? TPA_MAX_SEGS_TH : \ 123b150a7e7SLance Richardson TPA_MAX_SEGS) 124b150a7e7SLance Richardson 1254333cbfeSDamodharam Ammepalli #define BNXT_TPA_MAX_PAGES 65536 1264333cbfeSDamodharam Ammepalli 1276d28c53bSLance Richardson /* 1286d28c53bSLance Richardson * Define the number of async completion rings to be used. Set to zero for 1296d28c53bSLance Richardson * configurations in which the maximum number of packet completion rings 1306d28c53bSLance Richardson * for packet completions is desired or when async completion handling 1316d28c53bSLance Richardson * cannot be interrupt-driven. 1326d28c53bSLance Richardson */ 1336d28c53bSLance Richardson #ifdef RTE_EXEC_ENV_FREEBSD 1346d28c53bSLance Richardson /* In FreeBSD OS, nic_uio driver does not support interrupts */ 135c5094460SAjit Khaparde #define BNXT_NUM_ASYNC_CPR(bp) 0U 136bd0a14c9SLance Richardson #else 137c5094460SAjit Khaparde #define BNXT_NUM_ASYNC_CPR(bp) 1U 138bd0a14c9SLance Richardson #endif 139bd0a14c9SLance Richardson 1408a82aef1SRahul Gupta #define BNXT_MISC_VEC_ID RTE_INTR_VEC_ZERO_OFFSET 1418a82aef1SRahul Gupta #define BNXT_RX_VEC_START RTE_INTR_VEC_RXTX_OFFSET 1428a82aef1SRahul Gupta 1432ecdf174SAjit Khaparde /* Chimp Communication Channel */ 1442ecdf174SAjit Khaparde #define GRCPF_REG_CHIMP_CHANNEL_OFFSET 0x0 1452ecdf174SAjit Khaparde #define GRCPF_REG_CHIMP_COMM_TRIGGER 0x100 1462ecdf174SAjit Khaparde /* Kong Communication Channel */ 1472ecdf174SAjit Khaparde #define GRCPF_REG_KONG_CHANNEL_OFFSET 0xA00 1482ecdf174SAjit Khaparde #define GRCPF_REG_KONG_COMM_TRIGGER 0xB00 1492ecdf174SAjit Khaparde 1505c38c04fSAjit Khaparde #define BNXT_INT_LAT_TMR_MIN 75 1515c38c04fSAjit Khaparde #define BNXT_INT_LAT_TMR_MAX 150 1525c38c04fSAjit Khaparde #define BNXT_NUM_CMPL_AGGR_INT 36 1535c38c04fSAjit Khaparde #define BNXT_CMPL_AGGR_DMA_TMR 37 1545c38c04fSAjit Khaparde #define BNXT_NUM_CMPL_DMA_AGGR 36 1555c38c04fSAjit Khaparde #define BNXT_CMPL_AGGR_DMA_TMR_DURING_INT 50 1565c38c04fSAjit Khaparde #define BNXT_NUM_CMPL_DMA_AGGR_DURING_INT 12 1578c047e82SKishore Padmanabha #define BNXT_DEVICE_SERIAL_NUM_SIZE 8 1585c38c04fSAjit Khaparde 159b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_STATE_MASK \ 160b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_MASK 161b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_STATE_SFT \ 162b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_SFT 163b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_ALLOC \ 164b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_ALLOC 165b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_FREE \ 166b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE 167b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_CHANGE_PF_ID_MASK \ 168b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_MASK 169b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_CHANGE_PF_ID_SFT \ 170b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_SFT 171b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_CHANGE_VF_ID_MASK \ 172b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_MASK 173b59e4be2SVenkat Duvvuru #define BNXT_DEFAULT_VNIC_CHANGE_VF_ID_SFT \ 174b59e4be2SVenkat Duvvuru HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_SFT 175b59e4be2SVenkat Duvvuru 17695de0fafSSomnath Kotur #define BNXT_EVENT_ERROR_REPORT_TYPE(data1) \ 17795de0fafSSomnath Kotur (((data1) & \ 17895de0fafSSomnath Kotur HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_MASK) >>\ 17995de0fafSSomnath Kotur HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_SFT) 18095de0fafSSomnath Kotur 181ef10add3SVenkat Duvvuru #define BNXT_HWRM_CMD_TO_FORWARD(cmd) \ 182ef10add3SVenkat Duvvuru (bp->pf->vf_req_fwd[(cmd) / 32] |= (1 << ((cmd) % 32))) 183ef10add3SVenkat Duvvuru 1846d160d77SRandy Schacher #define BNXT_NTOHS rte_be_to_cpu_16 1856d160d77SRandy Schacher 186bb81e073SAjit Khaparde struct bnxt_led_info { 187205b7429SAjit Khaparde uint8_t num_leds; 188bb81e073SAjit Khaparde uint8_t led_id; 189bb81e073SAjit Khaparde uint8_t led_type; 190bb81e073SAjit Khaparde uint8_t led_group_id; 191bb81e073SAjit Khaparde uint8_t unused; 192bb81e073SAjit Khaparde uint16_t led_state_caps; 193bb81e073SAjit Khaparde #define BNXT_LED_ALT_BLINK_CAP(x) ((x) & \ 194bb81e073SAjit Khaparde rte_cpu_to_le_16(HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT)) 195bb81e073SAjit Khaparde 196bb81e073SAjit Khaparde uint16_t led_color_caps; 197bb81e073SAjit Khaparde }; 198bb81e073SAjit Khaparde 199bb81e073SAjit Khaparde struct bnxt_led_cfg { 200bb81e073SAjit Khaparde uint8_t led_id; 201bb81e073SAjit Khaparde uint8_t led_state; 202bb81e073SAjit Khaparde uint8_t led_color; 203bb81e073SAjit Khaparde uint8_t unused; 204bb81e073SAjit Khaparde uint16_t led_blink_on; 205bb81e073SAjit Khaparde uint16_t led_blink_off; 206bb81e073SAjit Khaparde uint8_t led_group_id; 207bb81e073SAjit Khaparde uint8_t rsvd; 208bb81e073SAjit Khaparde }; 209bb81e073SAjit Khaparde 210bb81e073SAjit Khaparde #define BNXT_LED_DFLT_ENA \ 211bb81e073SAjit Khaparde (HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_ID | \ 212bb81e073SAjit Khaparde HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_STATE | \ 213bb81e073SAjit Khaparde HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_ON | \ 214bb81e073SAjit Khaparde HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_OFF | \ 215bb81e073SAjit Khaparde HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_GROUP_ID) 216bb81e073SAjit Khaparde 217bb81e073SAjit Khaparde #define BNXT_LED_DFLT_ENA_SHIFT 6 218bb81e073SAjit Khaparde 219bb81e073SAjit Khaparde #define BNXT_LED_DFLT_ENABLES(x) \ 220bb81e073SAjit Khaparde rte_cpu_to_le_32(BNXT_LED_DFLT_ENA << (BNXT_LED_DFLT_ENA_SHIFT * (x))) 2210a6d2a72SAjit Khaparde 222*e7750639SAndre Muezerie struct __rte_packed_begin bnxt_vlan_table_entry { 223b7778e8aSAjit Khaparde uint16_t tpid; 224b7778e8aSAjit Khaparde uint16_t vid; 225*e7750639SAndre Muezerie } __rte_packed_end; 226b7778e8aSAjit Khaparde 227*e7750639SAndre Muezerie struct __rte_packed_begin bnxt_vlan_antispoof_table_entry { 228910242bcSAjit Khaparde uint16_t tpid; 229910242bcSAjit Khaparde uint16_t vid; 230910242bcSAjit Khaparde uint16_t mask; 231*e7750639SAndre Muezerie } __rte_packed_end; 232910242bcSAjit Khaparde 233b7778e8aSAjit Khaparde struct bnxt_child_vf_info { 234b7778e8aSAjit Khaparde void *req_buf; 235b7778e8aSAjit Khaparde struct bnxt_vlan_table_entry *vlan_table; 236910242bcSAjit Khaparde struct bnxt_vlan_antispoof_table_entry *vlan_as_table; 237b7778e8aSAjit Khaparde STAILQ_HEAD(, bnxt_filter_info) filter; 238b7778e8aSAjit Khaparde uint32_t func_cfg_flags; 239b7778e8aSAjit Khaparde uint32_t l2_rx_mask; 240b7778e8aSAjit Khaparde uint16_t fid; 24136735a93SAjit Khaparde uint16_t max_tx_rate; 24218c2854bSAjit Khaparde uint16_t dflt_vlan; 24336735a93SAjit Khaparde uint16_t vlan_count; 24436735a93SAjit Khaparde uint8_t mac_spoof_en; 24536735a93SAjit Khaparde uint8_t vlan_spoof_en; 246b7778e8aSAjit Khaparde bool random_mac; 24744bec709SAjit Khaparde bool persist_stats; 248804e746cSAjit Khaparde }; 249804e746cSAjit Khaparde 2503fb93bc7SLance Richardson struct bnxt_parent_info { 2513fb93bc7SLance Richardson #define BNXT_PF_FID_INVALID 0xFFFF 2523fb93bc7SLance Richardson uint16_t fid; 2533fb93bc7SLance Richardson uint16_t vnic; 2543fb93bc7SLance Richardson uint16_t port_id; 2553fb93bc7SLance Richardson uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; 2563fb93bc7SLance Richardson }; 2573fb93bc7SLance Richardson 258804e746cSAjit Khaparde struct bnxt_pf_info { 259804e746cSAjit Khaparde #define BNXT_FIRST_PF_FID 1 260e8fe0e06SAjit Khaparde #define BNXT_MAX_VFS(bp) ((bp)->pf->max_vfs) 2616d160d77SRandy Schacher #define BNXT_MAX_VF_REPS_P4 64 2626d160d77SRandy Schacher #define BNXT_MAX_VF_REPS_P5 256 2633d372e8dSShahaji Bhosle #define BNXT_MAX_VF_REPS(bp) \ 2646d160d77SRandy Schacher (BNXT_CHIP_P5(bp) ? BNXT_MAX_VF_REPS_P5 : \ 2656d160d77SRandy Schacher BNXT_MAX_VF_REPS_P4) 266e8fe0e06SAjit Khaparde #define BNXT_TOTAL_VFS(bp) ((bp)->pf->total_vfs) 267804e746cSAjit Khaparde #define BNXT_FIRST_VF_FID 128 268804e746cSAjit Khaparde #define BNXT_PF_RINGS_USED(bp) bnxt_get_num_queues(bp) 269e8fe0e06SAjit Khaparde #define BNXT_PF_RINGS_AVAIL(bp) ((bp)->pf->max_cp_rings - \ 270e8fe0e06SAjit Khaparde BNXT_PF_RINGS_USED(bp)) 271f8244c63SZhiyong Yang uint16_t port_id; 272804e746cSAjit Khaparde uint16_t first_vf_id; 273804e746cSAjit Khaparde uint16_t active_vfs; 274804e746cSAjit Khaparde uint16_t max_vfs; 275a15fd8c0SAjit Khaparde uint16_t total_vfs; /* Total VFs possible. 276a15fd8c0SAjit Khaparde * Not necessarily enabled. 277a15fd8c0SAjit Khaparde */ 278b7778e8aSAjit Khaparde uint32_t func_cfg_flags; 279804e746cSAjit Khaparde void *vf_req_buf; 280df6e0a06SSantosh Shukla rte_iova_t vf_req_buf_dma_addr; 281804e746cSAjit Khaparde uint32_t vf_req_fwd[8]; 282b7778e8aSAjit Khaparde uint16_t total_vnics; 283b7778e8aSAjit Khaparde struct bnxt_child_vf_info *vf_info; 284b7778e8aSAjit Khaparde #define BNXT_EVB_MODE_NONE 0 285b7778e8aSAjit Khaparde #define BNXT_EVB_MODE_VEB 1 286b7778e8aSAjit Khaparde #define BNXT_EVB_MODE_VEPA 2 287b7778e8aSAjit Khaparde uint8_t evb_mode; 288804e746cSAjit Khaparde }; 289804e746cSAjit Khaparde 290074cacb9SSantoshkumar Karanappa Rastapur /* Max wait time for link up is 10s and link down is 500ms */ 291af57c49cSKalesh AP #define BNXT_MAX_LINK_WAIT_CNT 200 292af57c49cSKalesh AP #define BNXT_MIN_LINK_WAIT_CNT 10 293074cacb9SSantoshkumar Karanappa Rastapur #define BNXT_LINK_WAIT_INTERVAL 50 2941d0704f4SAjit Khaparde struct bnxt_link_info { 2957bc8e9a2SAjit Khaparde uint32_t phy_flags; 2961d0704f4SAjit Khaparde uint8_t mac_type; 2971d0704f4SAjit Khaparde uint8_t phy_link_status; 2981d0704f4SAjit Khaparde uint8_t loop_back; 2991d0704f4SAjit Khaparde uint8_t link_up; 3001d0704f4SAjit Khaparde uint8_t duplex; 3011d0704f4SAjit Khaparde uint8_t pause; 3021d0704f4SAjit Khaparde uint8_t force_pause; 3031d0704f4SAjit Khaparde uint8_t auto_pause; 3041d0704f4SAjit Khaparde uint8_t auto_mode; 3051d0704f4SAjit Khaparde #define PHY_VER_LEN 3 3061d0704f4SAjit Khaparde uint8_t phy_ver[PHY_VER_LEN]; 3071d0704f4SAjit Khaparde uint16_t link_speed; 3081d0704f4SAjit Khaparde uint16_t support_speeds; 3091d0704f4SAjit Khaparde uint16_t auto_link_speed; 31090cc14d7SAjit Khaparde uint16_t force_link_speed; 3111d0704f4SAjit Khaparde uint16_t auto_link_speed_mask; 3121d0704f4SAjit Khaparde uint32_t preemphasis; 3139a82633cSAjit Khaparde uint8_t phy_type; 3149a82633cSAjit Khaparde uint8_t media_type; 315c23f9dedSAjit Khaparde uint16_t support_auto_speeds; 316c23f9dedSAjit Khaparde uint8_t link_signal_mode; 317c23f9dedSAjit Khaparde uint16_t force_pam4_link_speed; 318c23f9dedSAjit Khaparde uint16_t support_pam4_speeds; 3192ca07279SAjit Khaparde uint16_t auto_pam4_link_speed_mask; 320c23f9dedSAjit Khaparde uint16_t support_pam4_auto_speeds; 321c23f9dedSAjit Khaparde uint8_t req_signal_mode; 3226253a234SKalesh AP uint8_t module_status; 32352c38677SDamodharam Ammepalli /* P7 speeds2 fields */ 32452c38677SDamodharam Ammepalli bool support_speeds_v2; 32552c38677SDamodharam Ammepalli uint16_t supported_speeds2_force_mode; 32652c38677SDamodharam Ammepalli uint16_t supported_speeds2_auto_mode; 32752c38677SDamodharam Ammepalli uint16_t support_speeds2; 32852c38677SDamodharam Ammepalli uint16_t force_link_speeds2; 32952c38677SDamodharam Ammepalli uint16_t auto_link_speeds2; 33052c38677SDamodharam Ammepalli uint16_t cfg_auto_link_speeds2_mask; 33152c38677SDamodharam Ammepalli uint8_t active_lanes; 33252c38677SDamodharam Ammepalli uint8_t option_flags; 333dc6810a2SDamodharam Ammepalli uint16_t pmd_speed_lanes; 3341d0704f4SAjit Khaparde }; 3351d0704f4SAjit Khaparde 336804e746cSAjit Khaparde #define BNXT_COS_QUEUE_COUNT 8 337804e746cSAjit Khaparde struct bnxt_cos_queue_info { 338804e746cSAjit Khaparde uint8_t id; 339804e746cSAjit Khaparde uint8_t profile; 3402f8d4458SAjit Khaparde uint8_t profile_type; 341804e746cSAjit Khaparde }; 342804e746cSAjit Khaparde 3435ef3b79fSAjit Khaparde struct rte_flow { 3445ef3b79fSAjit Khaparde STAILQ_ENTRY(rte_flow) next; 3455ef3b79fSAjit Khaparde struct bnxt_filter_info *filter; 3465ef3b79fSAjit Khaparde struct bnxt_vnic_info *vnic; 3475ef3b79fSAjit Khaparde }; 3485ef3b79fSAjit Khaparde 349f8120fd0SSomnath Kotur #define BNXT_PTP_RX_PND_CNT 10 3506cbd89f9SKalesh AP #define BNXT_PTP_FLAGS_PATH_TX 0x0 3516cbd89f9SKalesh AP #define BNXT_PTP_FLAGS_PATH_RX 0x1 3526cbd89f9SKalesh AP #define BNXT_PTP_FLAGS_CURRENT_TIME 0x2 35353f98141SKalesh AP #define BNXT_PTP_CURRENT_TIME_MASK 0xFFFF00000000ULL 3546cbd89f9SKalesh AP 355b11cceb8SSomnath Kotur struct bnxt_ptp_cfg { 356b11cceb8SSomnath Kotur #define BNXT_GRCPF_REG_WINDOW_BASE_OUT 0x400 357b11cceb8SSomnath Kotur #define BNXT_GRCPF_REG_SYNC_TIME 0x480 358b11cceb8SSomnath Kotur #define BNXT_CYCLECOUNTER_MASK 0xffffffffffffffffULL 359b11cceb8SSomnath Kotur struct rte_timecounter tc; 360b11cceb8SSomnath Kotur struct rte_timecounter tx_tstamp_tc; 361b11cceb8SSomnath Kotur struct rte_timecounter rx_tstamp_tc; 362b11cceb8SSomnath Kotur struct bnxt *bp; 363b11cceb8SSomnath Kotur #define BNXT_MAX_TX_TS 1 364b11cceb8SSomnath Kotur uint16_t rxctl; 365b7c57f4eSKalesh AP #define BNXT_PTP_MSG_SYNC BIT(0) 366b7c57f4eSKalesh AP #define BNXT_PTP_MSG_DELAY_REQ BIT(1) 367b7c57f4eSKalesh AP #define BNXT_PTP_MSG_PDELAY_REQ BIT(2) 368b7c57f4eSKalesh AP #define BNXT_PTP_MSG_PDELAY_RESP BIT(3) 369b7c57f4eSKalesh AP #define BNXT_PTP_MSG_FOLLOW_UP BIT(8) 370b7c57f4eSKalesh AP #define BNXT_PTP_MSG_DELAY_RESP BIT(9) 371b7c57f4eSKalesh AP #define BNXT_PTP_MSG_PDELAY_RESP_FOLLOW_UP BIT(10) 372b7c57f4eSKalesh AP #define BNXT_PTP_MSG_ANNOUNCE BIT(11) 373b7c57f4eSKalesh AP #define BNXT_PTP_MSG_SIGNALING BIT(12) 374b7c57f4eSKalesh AP #define BNXT_PTP_MSG_MANAGEMENT BIT(13) 375b11cceb8SSomnath Kotur #define BNXT_PTP_MSG_EVENTS (BNXT_PTP_MSG_SYNC | \ 376b11cceb8SSomnath Kotur BNXT_PTP_MSG_DELAY_REQ | \ 377b11cceb8SSomnath Kotur BNXT_PTP_MSG_PDELAY_REQ | \ 378b11cceb8SSomnath Kotur BNXT_PTP_MSG_PDELAY_RESP) 379b11cceb8SSomnath Kotur uint8_t tx_tstamp_en:1; 380b11cceb8SSomnath Kotur int rx_filter; 381925cd070SSomnath Kotur uint8_t filter_all; 382b11cceb8SSomnath Kotur 383b11cceb8SSomnath Kotur #define BNXT_PTP_RX_TS_L 0 384b11cceb8SSomnath Kotur #define BNXT_PTP_RX_TS_H 1 385b11cceb8SSomnath Kotur #define BNXT_PTP_RX_SEQ 2 386b11cceb8SSomnath Kotur #define BNXT_PTP_RX_FIFO 3 387b11cceb8SSomnath Kotur #define BNXT_PTP_RX_FIFO_PENDING 0x1 388b11cceb8SSomnath Kotur #define BNXT_PTP_RX_FIFO_ADV 4 389b11cceb8SSomnath Kotur #define BNXT_PTP_RX_REGS 5 390b11cceb8SSomnath Kotur 391b11cceb8SSomnath Kotur #define BNXT_PTP_TX_TS_L 0 392b11cceb8SSomnath Kotur #define BNXT_PTP_TX_TS_H 1 393b11cceb8SSomnath Kotur #define BNXT_PTP_TX_SEQ 2 394b11cceb8SSomnath Kotur #define BNXT_PTP_TX_FIFO 3 395b11cceb8SSomnath Kotur #define BNXT_PTP_TX_FIFO_EMPTY 0x2 396b11cceb8SSomnath Kotur #define BNXT_PTP_TX_REGS 4 397b11cceb8SSomnath Kotur uint32_t rx_regs[BNXT_PTP_RX_REGS]; 398b11cceb8SSomnath Kotur uint32_t rx_mapped_regs[BNXT_PTP_RX_REGS]; 399b11cceb8SSomnath Kotur uint32_t tx_regs[BNXT_PTP_TX_REGS]; 400b11cceb8SSomnath Kotur uint32_t tx_mapped_regs[BNXT_PTP_TX_REGS]; 4016cbd89f9SKalesh AP 4026d160d77SRandy Schacher /* On P5, the Rx timestamp is present in the Rx completion record */ 4036cbd89f9SKalesh AP uint64_t rx_timestamp; 40453f98141SKalesh AP uint64_t current_time; 405925cd070SSomnath Kotur uint64_t old_time; 406925cd070SSomnath Kotur rte_spinlock_t ptp_lock; 407b11cceb8SSomnath Kotur }; 408b11cceb8SSomnath Kotur 4095c38c04fSAjit Khaparde struct bnxt_coal { 4105c38c04fSAjit Khaparde uint16_t num_cmpl_aggr_int; 4115c38c04fSAjit Khaparde uint16_t num_cmpl_dma_aggr; 4125c38c04fSAjit Khaparde uint16_t num_cmpl_dma_aggr_during_int; 4135c38c04fSAjit Khaparde uint16_t int_lat_tmr_max; 4145c38c04fSAjit Khaparde uint16_t int_lat_tmr_min; 4155c38c04fSAjit Khaparde uint16_t cmpl_aggr_dma_tmr; 4165c38c04fSAjit Khaparde uint16_t cmpl_aggr_dma_tmr_during_int; 4175c38c04fSAjit Khaparde }; 4185c38c04fSAjit Khaparde 419f8168ca0SLance Richardson /* 64-bit doorbell */ 420ecf1474aSKalesh AP #define DBR_EPOCH_MASK 0x01000000UL 421ecf1474aSKalesh AP #define DBR_EPOCH_SFT 24 422f8168ca0SLance Richardson #define DBR_XID_SFT 32 423f8168ca0SLance Richardson #define DBR_PATH_L2 (0x1ULL << 56) 424ecf1474aSKalesh AP #define DBR_VALID (0x1ULL << 58) 425f8168ca0SLance Richardson #define DBR_TYPE_SQ (0x0ULL << 60) 426f8168ca0SLance Richardson #define DBR_TYPE_SRQ (0x2ULL << 60) 427f8168ca0SLance Richardson #define DBR_TYPE_CQ (0x4ULL << 60) 428f8168ca0SLance Richardson #define DBR_TYPE_NQ (0xaULL << 60) 4294af9d0c7SLance Richardson #define DBR_TYPE_NQ_ARM (0xbULL << 60) 430f8168ca0SLance Richardson 431ecf1474aSKalesh AP #define DB_PF_OFFSET 0x10000 432ecf1474aSKalesh AP #define DB_VF_OFFSET 0x4000 433ecf1474aSKalesh AP 4343c1fba19SAjit Khaparde #define BNXT_RSS_TBL_SIZE_P5 512U 4353c1fba19SAjit Khaparde #define BNXT_RSS_ENTRIES_PER_CTX_P5 64 4363c1fba19SAjit Khaparde #define BNXT_MAX_RSS_CTXTS_P5 \ 4373c1fba19SAjit Khaparde (BNXT_RSS_TBL_SIZE_P5 / BNXT_RSS_ENTRIES_PER_CTX_P5) 438f8168ca0SLance Richardson 439f8168ca0SLance Richardson #define BNXT_MAX_QUEUE 8 44040a643b0SAjit Khaparde #define BNXT_MAX_TQM_SP_RINGS 1 44140a643b0SAjit Khaparde #define BNXT_MAX_TQM_FP_LEGACY_RINGS 8 44240a643b0SAjit Khaparde #define BNXT_MAX_TQM_FP_RINGS 9 44340a643b0SAjit Khaparde #define BNXT_MAX_TQM_LEGACY_RINGS \ 44440a643b0SAjit Khaparde (BNXT_MAX_TQM_SP_RINGS + BNXT_MAX_TQM_FP_LEGACY_RINGS) 44540a643b0SAjit Khaparde #define BNXT_MAX_TQM_RINGS \ 44640a643b0SAjit Khaparde (BNXT_MAX_TQM_SP_RINGS + BNXT_MAX_TQM_FP_RINGS) 44740a643b0SAjit Khaparde #define BNXT_BACKING_STORE_CFG_LEGACY_LEN 256 44840a643b0SAjit Khaparde #define BNXT_BACKING_STORE_CFG_LEN \ 44940a643b0SAjit Khaparde sizeof(struct hwrm_func_backing_store_cfg_input) 450f8168ca0SLance Richardson #define BNXT_PAGE_SHFT 12 451f8168ca0SLance Richardson #define BNXT_PAGE_SIZE (1 << BNXT_PAGE_SHFT) 452f8168ca0SLance Richardson #define MAX_CTX_PAGES (BNXT_PAGE_SIZE / 8) 453f8168ca0SLance Richardson 454fe2f715cSAjit Khaparde #define BNXT_RTE_MEMZONE_FLAG (RTE_MEMZONE_1GB | RTE_MEMZONE_IOVA_CONTIG) 455fe2f715cSAjit Khaparde 456f8168ca0SLance Richardson #define PTU_PTE_VALID 0x1UL 457f8168ca0SLance Richardson #define PTU_PTE_LAST 0x2UL 458f8168ca0SLance Richardson #define PTU_PTE_NEXT_TO_LAST 0x4UL 459f8168ca0SLance Richardson 460fe2f715cSAjit Khaparde #define BNXT_CTX_MIN 1 461fe2f715cSAjit Khaparde #define BNXT_CTX_INV 0xffff 462fe2f715cSAjit Khaparde 463fe2f715cSAjit Khaparde #define BNXT_CTX_INIT_VALID(flags) \ 464fe2f715cSAjit Khaparde ((flags) & \ 465fe2f715cSAjit Khaparde HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_ENABLE_CTX_KIND_INIT) 466fe2f715cSAjit Khaparde 467f8168ca0SLance Richardson struct bnxt_ring_mem_info { 468f8168ca0SLance Richardson int nr_pages; 469f8168ca0SLance Richardson int page_size; 470f8168ca0SLance Richardson uint32_t flags; 471f8168ca0SLance Richardson #define BNXT_RMEM_VALID_PTE_FLAG 1 472f8168ca0SLance Richardson #define BNXT_RMEM_RING_PTE_FLAG 2 473fe2f715cSAjit Khaparde #define BNXT_RMEM_USE_FULL_PAGE_FLAG 4 474f8168ca0SLance Richardson 475f8168ca0SLance Richardson void **pg_arr; 476f8168ca0SLance Richardson rte_iova_t *dma_arr; 477f8168ca0SLance Richardson const struct rte_memzone *mz; 478f8168ca0SLance Richardson 479f8168ca0SLance Richardson uint64_t *pg_tbl; 480f8168ca0SLance Richardson rte_iova_t pg_tbl_map; 481f8168ca0SLance Richardson const struct rte_memzone *pg_tbl_mz; 482f8168ca0SLance Richardson 483f8168ca0SLance Richardson int vmem_size; 484f8168ca0SLance Richardson void **vmem; 485f8168ca0SLance Richardson }; 486f8168ca0SLance Richardson 487f8168ca0SLance Richardson struct bnxt_ctx_pg_info { 488f8168ca0SLance Richardson uint32_t entries; 4894371b402SAjit Khaparde void **ctx_pg_arr; 4904371b402SAjit Khaparde rte_iova_t *ctx_dma_arr; 491f8168ca0SLance Richardson struct bnxt_ring_mem_info ring_mem; 492f8168ca0SLance Richardson }; 493f8168ca0SLance Richardson 494fe2f715cSAjit Khaparde struct bnxt_ctx_mem { 495fe2f715cSAjit Khaparde uint16_t type; 496fe2f715cSAjit Khaparde uint16_t entry_size; 497fe2f715cSAjit Khaparde uint32_t flags; 498fe2f715cSAjit Khaparde #define BNXT_CTX_MEM_TYPE_VALID \ 499fe2f715cSAjit Khaparde HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_TYPE_VALID 500fe2f715cSAjit Khaparde uint32_t instance_bmap; 501fe2f715cSAjit Khaparde uint8_t init_value; 502fe2f715cSAjit Khaparde uint8_t entry_multiple; 503fe2f715cSAjit Khaparde uint16_t init_offset; 504fe2f715cSAjit Khaparde #define BNXT_CTX_INIT_INVALID_OFFSET 0xffff 505fe2f715cSAjit Khaparde uint32_t max_entries; 506fe2f715cSAjit Khaparde uint32_t min_entries; 507fe2f715cSAjit Khaparde uint8_t last:1; 508fe2f715cSAjit Khaparde uint8_t split_entry_cnt; 509fe2f715cSAjit Khaparde #define BNXT_MAX_SPLIT_ENTRY 4 510fe2f715cSAjit Khaparde union { 511fe2f715cSAjit Khaparde struct { 512fe2f715cSAjit Khaparde uint32_t qp_l2_entries; 513fe2f715cSAjit Khaparde uint32_t qp_qp1_entries; 514fe2f715cSAjit Khaparde uint32_t qp_fast_qpmd_entries; 515fe2f715cSAjit Khaparde }; 516fe2f715cSAjit Khaparde uint32_t srq_l2_entries; 517fe2f715cSAjit Khaparde uint32_t cq_l2_entries; 518fe2f715cSAjit Khaparde uint32_t vnic_entries; 519fe2f715cSAjit Khaparde struct { 520fe2f715cSAjit Khaparde uint32_t mrav_av_entries; 521fe2f715cSAjit Khaparde uint32_t mrav_num_entries_units; 522fe2f715cSAjit Khaparde }; 523fe2f715cSAjit Khaparde uint32_t split[BNXT_MAX_SPLIT_ENTRY]; 524fe2f715cSAjit Khaparde }; 525fe2f715cSAjit Khaparde struct bnxt_ctx_pg_info *pg_info; 526fe2f715cSAjit Khaparde }; 527fe2f715cSAjit Khaparde 528fe2f715cSAjit Khaparde #define BNXT_CTX_FLAG_INITED 0x01 529fe2f715cSAjit Khaparde 530f8168ca0SLance Richardson struct bnxt_ctx_mem_info { 531fe2f715cSAjit Khaparde struct bnxt_ctx_mem *ctx_arr; 532fe2f715cSAjit Khaparde uint32_t supported_types; 533fe2f715cSAjit Khaparde uint32_t flags; 534fe2f715cSAjit Khaparde uint16_t types; 535fe2f715cSAjit Khaparde uint8_t tqm_fp_rings_count; 536fe2f715cSAjit Khaparde 537fe2f715cSAjit Khaparde /* The following are used for V1 */ 538f8168ca0SLance Richardson uint32_t qp_max_entries; 539f8168ca0SLance Richardson uint16_t qp_min_qp1_entries; 540f8168ca0SLance Richardson uint16_t qp_max_l2_entries; 541f8168ca0SLance Richardson uint16_t qp_entry_size; 542f8168ca0SLance Richardson uint16_t srq_max_l2_entries; 543f8168ca0SLance Richardson uint32_t srq_max_entries; 544f8168ca0SLance Richardson uint16_t srq_entry_size; 545f8168ca0SLance Richardson uint16_t cq_max_l2_entries; 546f8168ca0SLance Richardson uint32_t cq_max_entries; 547f8168ca0SLance Richardson uint16_t cq_entry_size; 548f8168ca0SLance Richardson uint16_t vnic_max_vnic_entries; 549f8168ca0SLance Richardson uint16_t vnic_max_ring_table_entries; 550f8168ca0SLance Richardson uint16_t vnic_entry_size; 551f8168ca0SLance Richardson uint32_t stat_max_entries; 552f8168ca0SLance Richardson uint16_t stat_entry_size; 553f8168ca0SLance Richardson uint16_t tqm_entry_size; 554f8168ca0SLance Richardson uint32_t tqm_min_entries_per_ring; 555f8168ca0SLance Richardson uint32_t tqm_max_entries_per_ring; 556f8168ca0SLance Richardson uint32_t mrav_max_entries; 557f8168ca0SLance Richardson uint16_t mrav_entry_size; 558f8168ca0SLance Richardson uint16_t tim_entry_size; 559f8168ca0SLance Richardson uint32_t tim_max_entries; 560f8168ca0SLance Richardson uint8_t tqm_entries_multiple; 561dd0191d5SShuanglin Wang uint8_t mpc_tqm_entries_multiple; 562dd0191d5SShuanglin Wang uint32_t mpc_tqm_max_num_entries; 563dd0191d5SShuanglin Wang uint32_t mpc_tqm_min_num_entries; 564dd0191d5SShuanglin Wang uint32_t instance_bit_map; /* MPC TQM: TE_CFA(2), RE_CFA (3) */ 565dd0191d5SShuanglin Wang uint16_t mpc_tqm_entry_size; 566dd0191d5SShuanglin Wang uint8_t ctx_init_value; 567dd0191d5SShuanglin Wang uint8_t ctx_init_offset; 568f8168ca0SLance Richardson 569f8168ca0SLance Richardson struct bnxt_ctx_pg_info qp_mem; 570f8168ca0SLance Richardson struct bnxt_ctx_pg_info srq_mem; 571f8168ca0SLance Richardson struct bnxt_ctx_pg_info cq_mem; 572f8168ca0SLance Richardson struct bnxt_ctx_pg_info vnic_mem; 573f8168ca0SLance Richardson struct bnxt_ctx_pg_info stat_mem; 57440a643b0SAjit Khaparde struct bnxt_ctx_pg_info *tqm_mem[BNXT_MAX_TQM_RINGS]; 575dd0191d5SShuanglin Wang #define BNXT_MAX_BMAP 0x5 576dd0191d5SShuanglin Wang struct bnxt_ctx_pg_info *mpc_tqm_mem[BNXT_MAX_BMAP]; 577f8168ca0SLance Richardson }; 578f8168ca0SLance Richardson 57902a95625SSomnath Kotur struct bnxt_ctx_mem_buf_info { 58002a95625SSomnath Kotur void *va; 58102a95625SSomnath Kotur rte_iova_t dma; 58202a95625SSomnath Kotur uint16_t ctx_id; 58302a95625SSomnath Kotur size_t size; 58402a95625SSomnath Kotur }; 58502a95625SSomnath Kotur 586df6cd7c1SKalesh AP /* Maximum Firmware Reset bail out value in milliseconds */ 587df6cd7c1SKalesh AP #define BNXT_MAX_FW_RESET_TIMEOUT 6000 588df6cd7c1SKalesh AP /* Minimum time required for the firmware readiness in milliseconds */ 589df6cd7c1SKalesh AP #define BNXT_MIN_FW_READY_TIMEOUT 2000 590df6cd7c1SKalesh AP /* Frequency for the firmware readiness check in milliseconds */ 591df6cd7c1SKalesh AP #define BNXT_FW_READY_WAIT_INTERVAL 100 592df6cd7c1SKalesh AP 593df6cd7c1SKalesh AP #define US_PER_MS 1000 594df6cd7c1SKalesh AP #define NS_PER_US 1000 595df6cd7c1SKalesh AP 596f8362424SKalesh AP struct bnxt_error_recovery_info { 597f8362424SKalesh AP /* All units in milliseconds */ 598f8362424SKalesh AP uint32_t driver_polling_freq; 599a5d81111SKalesh AP uint32_t primary_func_wait_period; 600f8362424SKalesh AP uint32_t normal_func_wait_period; 601a5d81111SKalesh AP uint32_t primary_func_wait_period_after_reset; 602f8362424SKalesh AP uint32_t max_bailout_time_after_reset; 603f8362424SKalesh AP #define BNXT_FW_STATUS_REG 0 604f8362424SKalesh AP #define BNXT_FW_HEARTBEAT_CNT_REG 1 605f8362424SKalesh AP #define BNXT_FW_RECOVERY_CNT_REG 2 606f8362424SKalesh AP #define BNXT_FW_RESET_INPROG_REG 3 60725c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_CNT 4 60825c7edfcSKalesh AP uint32_t status_regs[BNXT_FW_STATUS_REG_CNT]; 60925c7edfcSKalesh AP uint32_t mapped_status_regs[BNXT_FW_STATUS_REG_CNT]; 610f8362424SKalesh AP uint32_t reset_inprogress_reg_mask; 611f8362424SKalesh AP #define BNXT_NUM_RESET_REG 16 612f8362424SKalesh AP uint8_t reg_array_cnt; 613f8362424SKalesh AP uint32_t reset_reg[BNXT_NUM_RESET_REG]; 614f8362424SKalesh AP uint32_t reset_reg_val[BNXT_NUM_RESET_REG]; 615f8362424SKalesh AP uint8_t delay_after_reset[BNXT_NUM_RESET_REG]; 616b7c57f4eSKalesh AP #define BNXT_FLAG_ERROR_RECOVERY_HOST BIT(0) 617b7c57f4eSKalesh AP #define BNXT_FLAG_ERROR_RECOVERY_CO_CPU BIT(1) 618a5d81111SKalesh AP #define BNXT_FLAG_PRIMARY_FUNC BIT(2) 619b7c57f4eSKalesh AP #define BNXT_FLAG_RECOVERY_ENABLED BIT(3) 620f8362424SKalesh AP uint32_t flags; 6219d0cbaecSKalesh AP 6229d0cbaecSKalesh AP uint32_t last_heart_beat; 6239d0cbaecSKalesh AP uint32_t last_reset_counter; 624f8362424SKalesh AP }; 625f8362424SKalesh AP 626ac2df046SKalesh AP /* Frequency for the FUNC_DRV_IF_CHANGE retry in milliseconds */ 627ac2df046SKalesh AP #define BNXT_IF_CHANGE_RETRY_INTERVAL 50 628ac2df046SKalesh AP /* Maximum retry count for FUNC_DRV_IF_CHANGE */ 629ac2df046SKalesh AP #define BNXT_IF_CHANGE_RETRY_COUNT 40 630ac2df046SKalesh AP 6319db66782SSomnath Kotur struct bnxt_mark_info { 6329db66782SSomnath Kotur uint32_t mark_id; 6339db66782SSomnath Kotur bool valid; 6349db66782SSomnath Kotur }; 6359db66782SSomnath Kotur 636322bd6e7SSomnath Kotur struct bnxt_rep_info { 637322bd6e7SSomnath Kotur struct rte_eth_dev *vfr_eth_dev; 638b59e4be2SVenkat Duvvuru pthread_mutex_t vfr_start_lock; 639b59e4be2SVenkat Duvvuru bool conduit_valid; 640322bd6e7SSomnath Kotur }; 641322bd6e7SSomnath Kotur 64225c7edfcSKalesh AP /* address space location of register */ 64325c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_TYPE_MASK 3 64425c7edfcSKalesh AP /* register is located in PCIe config space */ 64525c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_TYPE_CFG 0 64625c7edfcSKalesh AP /* register is located in GRC address space */ 64725c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_TYPE_GRC 1 64825c7edfcSKalesh AP /* register is located in BAR0 */ 64925c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_TYPE_BAR0 2 65025c7edfcSKalesh AP /* register is located in BAR1 */ 65125c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_TYPE_BAR1 3 65225c7edfcSKalesh AP 65325c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_TYPE(reg) ((reg) & BNXT_FW_STATUS_REG_TYPE_MASK) 65425c7edfcSKalesh AP #define BNXT_FW_STATUS_REG_OFF(reg) ((reg) & ~BNXT_FW_STATUS_REG_TYPE_MASK) 65525c7edfcSKalesh AP 65625c7edfcSKalesh AP #define BNXT_GRCP_WINDOW_2_BASE 0x2000 657be14720dSKalesh AP #define BNXT_GRCP_WINDOW_3_BASE 0x3000 65825c7edfcSKalesh AP 659f02ea89fSKalesh AP #define BNXT_GRCP_BASE_MASK 0xfffff000 660f02ea89fSKalesh AP #define BNXT_GRCP_OFFSET_MASK 0x00000ffc 661f02ea89fSKalesh AP 662f02ea89fSKalesh AP #define BNXT_FW_STATUS_HEALTHY 0x8000 6631db68899SKalesh AP #define BNXT_FW_STATUS_SHUTDOWN 0x100000 6641db68899SKalesh AP 6651cd45aebSAjit Khaparde #define BNXT_HWRM_SHORT_REQ_LEN sizeof(struct hwrm_short_input) 6661e2f8acaSAjit Khaparde 6671e2f8acaSAjit Khaparde struct bnxt_flow_stat_info { 6681e2f8acaSAjit Khaparde uint16_t max_fc; 6691e2f8acaSAjit Khaparde uint16_t flow_count; 6701e2f8acaSAjit Khaparde struct bnxt_ctx_mem_buf_info rx_fc_in_tbl; 6711e2f8acaSAjit Khaparde struct bnxt_ctx_mem_buf_info rx_fc_out_tbl; 6721e2f8acaSAjit Khaparde struct bnxt_ctx_mem_buf_info tx_fc_in_tbl; 6731e2f8acaSAjit Khaparde struct bnxt_ctx_mem_buf_info tx_fc_out_tbl; 6741e2f8acaSAjit Khaparde }; 6751e2f8acaSAjit Khaparde 676219842b9SSomnath Kotur struct bnxt_ring_stats { 677219842b9SSomnath Kotur /* Number of transmitted unicast packets */ 678219842b9SSomnath Kotur uint64_t tx_ucast_pkts; 679219842b9SSomnath Kotur /* Number of transmitted multicast packets */ 680219842b9SSomnath Kotur uint64_t tx_mcast_pkts; 681219842b9SSomnath Kotur /* Number of transmitted broadcast packets */ 682219842b9SSomnath Kotur uint64_t tx_bcast_pkts; 683219842b9SSomnath Kotur /* Number of packets discarded in transmit path */ 684219842b9SSomnath Kotur uint64_t tx_discard_pkts; 685219842b9SSomnath Kotur /* Number of packets in transmit path with error */ 686219842b9SSomnath Kotur uint64_t tx_error_pkts; 687219842b9SSomnath Kotur /* Number of transmitted bytes for unicast traffic */ 688219842b9SSomnath Kotur uint64_t tx_ucast_bytes; 689219842b9SSomnath Kotur /* Number of transmitted bytes for multicast traffic */ 690219842b9SSomnath Kotur uint64_t tx_mcast_bytes; 691219842b9SSomnath Kotur /* Number of transmitted bytes for broadcast traffic */ 692219842b9SSomnath Kotur uint64_t tx_bcast_bytes; 693219842b9SSomnath Kotur /* Number of received unicast packets */ 694219842b9SSomnath Kotur uint64_t rx_ucast_pkts; 695219842b9SSomnath Kotur /* Number of received multicast packets */ 696219842b9SSomnath Kotur uint64_t rx_mcast_pkts; 697219842b9SSomnath Kotur /* Number of received broadcast packets */ 698219842b9SSomnath Kotur uint64_t rx_bcast_pkts; 699219842b9SSomnath Kotur /* Number of packets discarded in receive path */ 700219842b9SSomnath Kotur uint64_t rx_discard_pkts; 701219842b9SSomnath Kotur /* Number of packets in receive path with errors */ 702219842b9SSomnath Kotur uint64_t rx_error_pkts; 703219842b9SSomnath Kotur /* Number of received bytes for unicast traffic */ 704219842b9SSomnath Kotur uint64_t rx_ucast_bytes; 705219842b9SSomnath Kotur /* Number of received bytes for multicast traffic */ 706219842b9SSomnath Kotur uint64_t rx_mcast_bytes; 707219842b9SSomnath Kotur /* Number of received bytes for broadcast traffic */ 708219842b9SSomnath Kotur uint64_t rx_bcast_bytes; 709219842b9SSomnath Kotur /* Number of aggregated unicast packets */ 710219842b9SSomnath Kotur uint64_t rx_agg_pkts; 711219842b9SSomnath Kotur /* Number of aggregated unicast bytes */ 712219842b9SSomnath Kotur uint64_t rx_agg_bytes; 713219842b9SSomnath Kotur /* Number of aggregation events */ 714219842b9SSomnath Kotur uint64_t rx_agg_events; 715219842b9SSomnath Kotur /* Number of aborted aggregations */ 716219842b9SSomnath Kotur uint64_t rx_agg_aborts; 717219842b9SSomnath Kotur }; 718219842b9SSomnath Kotur 71927c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext { 72027c32143SDamodharam Ammepalli /* Number of received unicast packets */ 72127c32143SDamodharam Ammepalli uint64_t rx_ucast_pkts; 72227c32143SDamodharam Ammepalli /* Number of received multicast packets */ 72327c32143SDamodharam Ammepalli uint64_t rx_mcast_pkts; 72427c32143SDamodharam Ammepalli /* Number of received broadcast packets */ 72527c32143SDamodharam Ammepalli uint64_t rx_bcast_pkts; 72627c32143SDamodharam Ammepalli /* Number of discarded packets on receive path */ 72727c32143SDamodharam Ammepalli uint64_t rx_discard_pkts; 72827c32143SDamodharam Ammepalli /* Number of packets on receive path with error */ 72927c32143SDamodharam Ammepalli uint64_t rx_error_pkts; 73027c32143SDamodharam Ammepalli /* Number of received bytes for unicast traffic */ 73127c32143SDamodharam Ammepalli uint64_t rx_ucast_bytes; 73227c32143SDamodharam Ammepalli /* Number of received bytes for multicast traffic */ 73327c32143SDamodharam Ammepalli uint64_t rx_mcast_bytes; 73427c32143SDamodharam Ammepalli /* Number of received bytes for broadcast traffic */ 73527c32143SDamodharam Ammepalli uint64_t rx_bcast_bytes; 73627c32143SDamodharam Ammepalli /* Number of transmitted unicast packets */ 73727c32143SDamodharam Ammepalli uint64_t tx_ucast_pkts; 73827c32143SDamodharam Ammepalli /* Number of transmitted multicast packets */ 73927c32143SDamodharam Ammepalli uint64_t tx_mcast_pkts; 74027c32143SDamodharam Ammepalli /* Number of transmitted broadcast packets */ 74127c32143SDamodharam Ammepalli uint64_t tx_bcast_pkts; 74227c32143SDamodharam Ammepalli /* Number of packets on transmit path with error */ 74327c32143SDamodharam Ammepalli uint64_t tx_error_pkts; 74427c32143SDamodharam Ammepalli /* Number of discarded packets on transmit path */ 74527c32143SDamodharam Ammepalli uint64_t tx_discard_pkts; 74627c32143SDamodharam Ammepalli /* Number of transmitted bytes for unicast traffic */ 74727c32143SDamodharam Ammepalli uint64_t tx_ucast_bytes; 74827c32143SDamodharam Ammepalli /* Number of transmitted bytes for multicast traffic */ 74927c32143SDamodharam Ammepalli uint64_t tx_mcast_bytes; 75027c32143SDamodharam Ammepalli /* Number of transmitted bytes for broadcast traffic */ 75127c32143SDamodharam Ammepalli uint64_t tx_bcast_bytes; 75227c32143SDamodharam Ammepalli /* Number of TPA eligible packets */ 75327c32143SDamodharam Ammepalli uint64_t rx_tpa_eligible_pkt; 75427c32143SDamodharam Ammepalli /* Number of TPA eligible bytes */ 75527c32143SDamodharam Ammepalli uint64_t rx_tpa_eligible_bytes; 75627c32143SDamodharam Ammepalli /* Number of TPA packets */ 75727c32143SDamodharam Ammepalli uint64_t rx_tpa_pkt; 75827c32143SDamodharam Ammepalli /* Number of TPA bytes */ 75927c32143SDamodharam Ammepalli uint64_t rx_tpa_bytes; 76027c32143SDamodharam Ammepalli /* Number of TPA errors */ 76127c32143SDamodharam Ammepalli uint64_t rx_tpa_errors; 76227c32143SDamodharam Ammepalli /* Number of TPA events */ 76327c32143SDamodharam Ammepalli uint64_t rx_tpa_events; 76427c32143SDamodharam Ammepalli }; 76527c32143SDamodharam Ammepalli 766d9e70b1dSRandy Schacher enum bnxt_session_type { 767d9e70b1dSRandy Schacher BNXT_SESSION_TYPE_REGULAR = 0, 768d9e70b1dSRandy Schacher BNXT_SESSION_TYPE_SHARED_COMMON, 769d9e70b1dSRandy Schacher BNXT_SESSION_TYPE_SHARED_WC, 770d9e70b1dSRandy Schacher BNXT_SESSION_TYPE_LAST 771d9e70b1dSRandy Schacher }; 772d9e70b1dSRandy Schacher 773b5dafa31SAjit Khaparde #define BNXT_MAX_BUFFER_SPLIT_SEGS 2 774b5dafa31SAjit Khaparde #define BNXT_MULTI_POOL_BUF_SPLIT_CAP 1 775b5dafa31SAjit Khaparde #define BNXT_BUF_SPLIT_OFFSET_CAP 1 776b5dafa31SAjit Khaparde #define BNXT_BUF_SPLIT_ALIGN_CAP 0 777b5dafa31SAjit Khaparde 778804e746cSAjit Khaparde struct bnxt { 779804e746cSAjit Khaparde void *bar0; 780804e746cSAjit Khaparde 781804e746cSAjit Khaparde struct rte_eth_dev *eth_dev; 782804e746cSAjit Khaparde struct rte_pci_device *pdev; 783e3d8f1e6SAjit Khaparde void *doorbell_base; 784ecf1474aSKalesh AP int legacy_db_size; 785804e746cSAjit Khaparde 786804e746cSAjit Khaparde uint32_t flags; 787b7c57f4eSKalesh AP #define BNXT_FLAG_REGISTERED BIT(0) 788b7c57f4eSKalesh AP #define BNXT_FLAG_VF BIT(1) 789b7c57f4eSKalesh AP #define BNXT_FLAG_PORT_STATS BIT(2) 790b7c57f4eSKalesh AP #define BNXT_FLAG_JUMBO BIT(3) 791b7c57f4eSKalesh AP #define BNXT_FLAG_SHORT_CMD BIT(4) 792b7c57f4eSKalesh AP #define BNXT_FLAG_PTP_SUPPORTED BIT(6) 793b7c57f4eSKalesh AP #define BNXT_FLAG_MULTI_HOST BIT(7) 794b7c57f4eSKalesh AP #define BNXT_FLAG_EXT_RX_PORT_STATS BIT(8) 795b7c57f4eSKalesh AP #define BNXT_FLAG_EXT_TX_PORT_STATS BIT(9) 796b7c57f4eSKalesh AP #define BNXT_FLAG_KONG_MB_EN BIT(10) 797b7c57f4eSKalesh AP #define BNXT_FLAG_TRUSTED_VF_EN BIT(11) 798b7c57f4eSKalesh AP #define BNXT_FLAG_DFLT_VNIC_SET BIT(12) 7993c1fba19SAjit Khaparde #define BNXT_FLAG_CHIP_P5 BIT(13) 800b7c57f4eSKalesh AP #define BNXT_FLAG_STINGRAY BIT(14) 801b7c57f4eSKalesh AP #define BNXT_FLAG_FW_RESET BIT(15) 802b7c57f4eSKalesh AP #define BNXT_FLAG_FATAL_ERROR BIT(16) 803839dee40SKalesh AP #define BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE BIT(17) 804839dee40SKalesh AP #define BNXT_FLAG_FW_HEALTH_CHECK_SCHEDULED BIT(18) 805839dee40SKalesh AP #define BNXT_FLAG_EXT_STATS_SUPPORTED BIT(19) 806839dee40SKalesh AP #define BNXT_FLAG_NEW_RM BIT(20) 8076dc26050SKalesh AP #define BNXT_FLAG_NPAR_PF BIT(21) 808839dee40SKalesh AP #define BNXT_FLAG_FW_CAP_ONE_STEP_TX_TS BIT(22) 80902a95625SSomnath Kotur #define BNXT_FLAG_FC_THREAD BIT(23) 81094eb699bSAjit Khaparde #define BNXT_FLAG_RX_VECTOR_PKT_MODE BIT(24) 8111e2f8acaSAjit Khaparde #define BNXT_FLAG_FLOW_XSTATS_EN BIT(25) 81286421846SKalesh AP #define BNXT_FLAG_DFLT_MAC_SET BIT(26) 813da3731e2SVenkat Duvvuru #define BNXT_FLAG_GFID_ENABLE BIT(27) 814dd0191d5SShuanglin Wang #define BNXT_FLAG_CHIP_P7 BIT(28) 815dd0191d5SShuanglin Wang #define BNXT_FLAG_FW_TIMEDOUT BIT(29) 816dd0191d5SShuanglin Wang #define BNXT_FLAG_RFS_NEEDS_VNIC BIT(30) 817dd0191d5SShuanglin Wang #define BNXT_FLAG_FLOW_CFA_RFS_RING_TBL_IDX_V2 BIT(31) 818dd0191d5SShuanglin Wang #define BNXT_RFS_NEEDS_VNIC(bp) ((bp)->flags & BNXT_FLAG_RFS_NEEDS_VNIC) 819804e746cSAjit Khaparde #define BNXT_PF(bp) (!((bp)->flags & BNXT_FLAG_VF)) 820804e746cSAjit Khaparde #define BNXT_VF(bp) ((bp)->flags & BNXT_FLAG_VF) 8216dc26050SKalesh AP #define BNXT_NPAR(bp) ((bp)->flags & BNXT_FLAG_NPAR_PF) 822ff947c6cSAjit Khaparde #define BNXT_MH(bp) ((bp)->flags & BNXT_FLAG_MULTI_HOST) 823ff947c6cSAjit Khaparde #define BNXT_SINGLE_PF(bp) (BNXT_PF(bp) && !BNXT_NPAR(bp) && !BNXT_MH(bp)) 8242ecdf174SAjit Khaparde #define BNXT_USE_CHIMP_MB 0 //For non-CFA commands, everything uses Chimp. 8252ecdf174SAjit Khaparde #define BNXT_USE_KONG(bp) ((bp)->flags & BNXT_FLAG_KONG_MB_EN) 826b42c15c8SAjit Khaparde #define BNXT_VF_IS_TRUSTED(bp) ((bp)->flags & BNXT_FLAG_TRUSTED_VF_EN) 8273c1fba19SAjit Khaparde #define BNXT_CHIP_P5(bp) ((bp)->flags & BNXT_FLAG_CHIP_P5) 828f91141f0SAjit Khaparde #define BNXT_CHIP_P7(bp) ((bp)->flags & BNXT_FLAG_CHIP_P7) 829f91141f0SAjit Khaparde #define BNXT_CHIP_P5_P7(bp) (BNXT_CHIP_P5(bp) || BNXT_CHIP_P7(bp)) 830bd0a14c9SLance Richardson #define BNXT_STINGRAY(bp) ((bp)->flags & BNXT_FLAG_STINGRAY) 831f91141f0SAjit Khaparde #define BNXT_HAS_NQ(bp) BNXT_CHIP_P5_P7(bp) 832f91141f0SAjit Khaparde #define BNXT_HAS_RING_GRPS(bp) (!BNXT_CHIP_P5_P7(bp)) 8331e2f8acaSAjit Khaparde #define BNXT_FLOW_XSTATS_EN(bp) ((bp)->flags & BNXT_FLAG_FLOW_XSTATS_EN) 83486421846SKalesh AP #define BNXT_HAS_DFLT_MAC_SET(bp) ((bp)->flags & BNXT_FLAG_DFLT_MAC_SET) 835c7020c21SKishore Padmanabha #define BNXT_GFID_ENABLED(bp) ((bp)->flags & BNXT_FLAG_GFID_ENABLE) 836f91141f0SAjit Khaparde #define BNXT_P7_MAX_NQ_RING_CNT 512 837f91141f0SAjit Khaparde #define BNXT_P7_CQ_MAX_L2_ENT 8192 838804e746cSAjit Khaparde 83953f98141SKalesh AP uint32_t flags2; 84053f98141SKalesh AP #define BNXT_FLAGS2_PTP_TIMESYNC_ENABLED BIT(0) 84153f98141SKalesh AP #define BNXT_FLAGS2_PTP_ALARM_SCHEDULED BIT(1) 84253f98141SKalesh AP #define BNXT_P5_PTP_TIMESYNC_ENABLED(bp) \ 84353f98141SKalesh AP ((bp)->flags2 & BNXT_FLAGS2_PTP_TIMESYNC_ENABLED) 844d9e70b1dSRandy Schacher #define BNXT_FLAGS2_TESTPMD_EN BIT(3) 845d9e70b1dSRandy Schacher #define BNXT_TESTPMD_EN(bp) \ 846d9e70b1dSRandy Schacher ((bp)->flags2 & BNXT_FLAGS2_TESTPMD_EN) 84753f98141SKalesh AP 8481531aeabSShuanglin Wang uint16_t multi_host_pf_pci_id; 849ecf1474aSKalesh AP uint16_t chip_num; 85034a7ff5aSKishore Padmanabha #define BNXT_FLAGS2_MULTIROOT_EN BIT(4) 85134a7ff5aSKishore Padmanabha #define BNXT_MULTIROOT_EN(bp) \ 85234a7ff5aSKishore Padmanabha ((bp)->flags2 & BNXT_FLAGS2_MULTIROOT_EN) 853ecf1474aSKalesh AP 8545c980062SAjit Khaparde #define BNXT_FLAGS2_COMPRESSED_RX_CQE BIT(5) 855839dee40SKalesh AP uint32_t fw_cap; 856839dee40SKalesh AP #define BNXT_FW_CAP_HOT_RESET BIT(0) 857839dee40SKalesh AP #define BNXT_FW_CAP_IF_CHANGE BIT(1) 858839dee40SKalesh AP #define BNXT_FW_CAP_ERROR_RECOVERY BIT(2) 859839dee40SKalesh AP #define BNXT_FW_CAP_ERR_RECOVER_RELOAD BIT(3) 860ef10add3SVenkat Duvvuru #define BNXT_FW_CAP_HCOMM_FW_STATUS BIT(4) 86102a95625SSomnath Kotur #define BNXT_FW_CAP_ADV_FLOW_MGMT BIT(5) 86202a95625SSomnath Kotur #define BNXT_FW_CAP_ADV_FLOW_COUNTERS BIT(6) 863ef10add3SVenkat Duvvuru #define BNXT_FW_CAP_LINK_ADMIN BIT(7) 864da3731e2SVenkat Duvvuru #define BNXT_FW_CAP_TRUFLOW_EN BIT(8) 865baedf297SKalesh AP #define BNXT_FW_CAP_VLAN_TX_INSERT BIT(9) 866dd0191d5SShuanglin Wang #define BNXT_FW_CAP_TX_COAL_CMPL BIT(10) 867dd0191d5SShuanglin Wang #define BNXT_FW_CAP_RX_ALL_PKT_TS BIT(11) 868fe2f715cSAjit Khaparde #define BNXT_FW_CAP_BACKING_STORE_V2 BIT(12) 8697a535f30SAjit Khaparde #define BNXT_FW_CAP_RX_RATE_PROFILE BIT(17) 870fe2f715cSAjit Khaparde #define BNXT_FW_BACKING_STORE_V2_EN(bp) \ 871fe2f715cSAjit Khaparde ((bp)->fw_cap & BNXT_FW_CAP_BACKING_STORE_V2) 872fe2f715cSAjit Khaparde #define BNXT_FW_BACKING_STORE_V1_EN(bp) \ 873fe2f715cSAjit Khaparde (BNXT_CHIP_P5_P7((bp)) && \ 874fe2f715cSAjit Khaparde (bp)->hwrm_spec_code >= HWRM_VERSION_1_9_2 && \ 875fe2f715cSAjit Khaparde !BNXT_VF((bp))) 87667ae7016SAjit Khaparde #define BNXT_FW_CAP_UDP_GSO BIT(13) 8776d160d77SRandy Schacher #define BNXT_TRUFLOW_EN(bp) ((bp)->fw_cap & BNXT_FW_CAP_TRUFLOW_EN &&\ 8786d160d77SRandy Schacher (bp)->app_id != 0xFF) 879839dee40SKalesh AP 8801cb3d39aSVenkat Duvvuru pthread_mutex_t flow_lock; 88184d49664SVenkat Duvvuru 88284d49664SVenkat Duvvuru uint32_t vnic_cap_flags; 88384d49664SVenkat Duvvuru #define BNXT_VNIC_CAP_COS_CLASSIFY BIT(0) 8847ed45b1aSAjit Khaparde #define BNXT_VNIC_CAP_OUTER_RSS BIT(1) 885e9766175SKalesh AP #define BNXT_VNIC_CAP_RX_CMPL_V2 BIT(2) 886baedf297SKalesh AP #define BNXT_VNIC_CAP_VLAN_RX_STRIP BIT(3) 887620e0290SKalesh AP #define BNXT_RX_VLAN_STRIP_EN(bp) ((bp)->vnic_cap_flags & BNXT_VNIC_CAP_VLAN_RX_STRIP) 8886d160d77SRandy Schacher #define BNXT_VNIC_CAP_OUTER_RSS_TRUSTED_VF BIT(4) 88935a03209SAjit Khaparde #define BNXT_VNIC_CAP_XOR_MODE BIT(5) 89035a03209SAjit Khaparde #define BNXT_VNIC_CAP_CHKSM_MODE BIT(6) 89154fc3d0dSAjit Khaparde #define BNXT_VNIC_CAP_IPV6_FLOW_LABEL_MODE BIT(7) 8925c980062SAjit Khaparde #define BNXT_VNIC_CAP_L2_CQE_MODE BIT(8) 8938b9adaf0SAjit Khaparde #define BNXT_VNIC_CAP_AH_SPI4_CAP BIT(9) 8948b9adaf0SAjit Khaparde #define BNXT_VNIC_CAP_AH_SPI6_CAP BIT(10) 8958b9adaf0SAjit Khaparde #define BNXT_VNIC_CAP_ESP_SPI4_CAP BIT(11) 8968b9adaf0SAjit Khaparde #define BNXT_VNIC_CAP_ESP_SPI6_CAP BIT(12) 8978b9adaf0SAjit Khaparde #define BNXT_VNIC_CAP_AH_SPI_CAP (BNXT_VNIC_CAP_AH_SPI4_CAP | BNXT_VNIC_CAP_AH_SPI6_CAP) 8988b9adaf0SAjit Khaparde #define BNXT_VNIC_CAP_ESP_SPI_CAP (BNXT_VNIC_CAP_ESP_SPI4_CAP | BNXT_VNIC_CAP_ESP_SPI6_CAP) 8994333cbfeSDamodharam Ammepalli #define BNXT_VNIC_CAP_VNIC_TUNNEL_TPA BIT(13) 90035a03209SAjit Khaparde 9011d0704f4SAjit Khaparde unsigned int rx_nr_rings; 9021d0704f4SAjit Khaparde unsigned int rx_cp_nr_rings; 90336024b2eSAjit Khaparde unsigned int rx_num_qs_per_vnic; 9041d0704f4SAjit Khaparde struct bnxt_rx_queue **rx_queues; 905bfb9c226SAjit Khaparde const void *rx_mem_zone; 906bfb9c226SAjit Khaparde struct rx_port_stats *hw_rx_port_stats; 907df6e0a06SSantosh Shukla rte_iova_t hw_rx_port_stats_map; 908f55e12f3SAjit Khaparde struct rx_port_stats_ext *hw_rx_port_stats_ext; 909f55e12f3SAjit Khaparde rte_iova_t hw_rx_port_stats_ext_map; 910f55e12f3SAjit Khaparde uint16_t fw_rx_port_stats_ext_size; 9111d0704f4SAjit Khaparde 9121d0704f4SAjit Khaparde unsigned int tx_nr_rings; 9131d0704f4SAjit Khaparde unsigned int tx_cp_nr_rings; 9141d0704f4SAjit Khaparde struct bnxt_tx_queue **tx_queues; 915bfb9c226SAjit Khaparde const void *tx_mem_zone; 916bfb9c226SAjit Khaparde struct tx_port_stats *hw_tx_port_stats; 917df6e0a06SSantosh Shukla rte_iova_t hw_tx_port_stats_map; 918f55e12f3SAjit Khaparde struct tx_port_stats_ext *hw_tx_port_stats_ext; 919f55e12f3SAjit Khaparde rte_iova_t hw_tx_port_stats_ext_map; 920f55e12f3SAjit Khaparde uint16_t fw_tx_port_stats_ext_size; 9211d0704f4SAjit Khaparde 922f2a768d4SAjit Khaparde /* Default completion ring */ 923bd0a14c9SLance Richardson struct bnxt_cp_ring_info *async_cp_ring; 924683e5cf7SLance Richardson struct bnxt_cp_ring_info *rxtx_nq_ring; 9252691827eSAjit Khaparde uint32_t max_ring_grps; 9262691827eSAjit Khaparde struct bnxt_ring_grp_info *grp_info; 927f2a768d4SAjit Khaparde 928a0c2315aSLance Richardson uint16_t nr_vnics; 9296133f207SAjit Khaparde 9309738793fSAjit Khaparde struct bnxt_vnic_info *vnic_info; 9319738793fSAjit Khaparde STAILQ_HEAD(, bnxt_vnic_info) free_vnic_list; 932f12d002fSAjit Khaparde const struct rte_memzone *vnic_rss_mz; 9339738793fSAjit Khaparde 934f92735dbSAjit Khaparde struct bnxt_filter_info *filter_info; 935f92735dbSAjit Khaparde STAILQ_HEAD(, bnxt_filter_info) free_filter_list; 936f92735dbSAjit Khaparde 9377bc8e9a2SAjit Khaparde struct bnxt_irq *irq_tbl; 9387bc8e9a2SAjit Khaparde 93935b2d13fSOlivier Matz uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; 940804e746cSAjit Khaparde 9413684541bSRandy Schacher uint16_t chimp_cmd_seq; 9422ecdf174SAjit Khaparde uint16_t kong_cmd_seq; 943804e746cSAjit Khaparde void *hwrm_cmd_resp_addr; 944df6e0a06SSantosh Shukla rte_iova_t hwrm_cmd_resp_dma_addr; 9451cd45aebSAjit Khaparde void *hwrm_short_cmd_req_addr; 946df6e0a06SSantosh Shukla rte_iova_t hwrm_short_cmd_req_dma_addr; 947804e746cSAjit Khaparde rte_spinlock_t hwrm_lock; 94868e2bebfSAjit Khaparde /* synchronize between dev_configure_op and int handler */ 9495526c802SSomnath Kotur pthread_mutex_t def_cp_lock; 95068e2bebfSAjit Khaparde /* synchronize between dev_start_op and async evt handler 95168e2bebfSAjit Khaparde * Locking sequence in async evt handler will be 95268e2bebfSAjit Khaparde * def_cp_lock 95368e2bebfSAjit Khaparde * health_check_lock 95468e2bebfSAjit Khaparde */ 9552993075dSSomnath Kotur pthread_mutex_t health_check_lock; 9566f5f3b99SSomnath Kotur /* synchronize between dev_stop/dev_close_op and 9576f5f3b99SSomnath Kotur * error recovery thread triggered as part of 9586f5f3b99SSomnath Kotur * HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY 9596f5f3b99SSomnath Kotur */ 9606f5f3b99SSomnath Kotur pthread_mutex_t err_recovery_lock; 961804e746cSAjit Khaparde uint16_t max_req_len; 962804e746cSAjit Khaparde uint16_t max_resp_len; 96379cc1efdSLance Richardson uint16_t hwrm_max_ext_req_len; 964804e746cSAjit Khaparde 965975ff25eSRahul Gupta /* default command timeout value of 500ms */ 966975ff25eSRahul Gupta #define DFLT_HWRM_CMD_TIMEOUT 500000 967823e77daSAjit Khaparde #define PCI_FUNC_RESET_WAIT_TIMEOUT 1500000 968975ff25eSRahul Gupta /* short command timeout value of 50ms */ 969975ff25eSRahul Gupta #define SHORT_HWRM_CMD_TIMEOUT 50000 970458f0360SAjit Khaparde /* default HWRM request timeout value */ 971458f0360SAjit Khaparde uint32_t hwrm_cmd_timeout; 972458f0360SAjit Khaparde 973986fa3baSAjit Khaparde struct bnxt_link_info *link_info; 97496477b5dSAjit Khaparde struct bnxt_cos_queue_info *rx_cos_queue; 97596477b5dSAjit Khaparde struct bnxt_cos_queue_info *tx_cos_queue; 97684d49664SVenkat Duvvuru uint8_t tx_cosq_id[BNXT_COS_QUEUE_COUNT]; 97784d49664SVenkat Duvvuru uint8_t rx_cosq_cnt; 978f8168ca0SLance Richardson uint8_t max_tc; 979f8168ca0SLance Richardson uint8_t max_lltc; 980f8168ca0SLance Richardson uint8_t max_q; 981804e746cSAjit Khaparde 982b7778e8aSAjit Khaparde uint16_t fw_fid; 983b7778e8aSAjit Khaparde uint16_t max_rsscos_ctx; 984b7778e8aSAjit Khaparde uint16_t max_cp_rings; 985b7778e8aSAjit Khaparde uint16_t max_tx_rings; 986b7778e8aSAjit Khaparde uint16_t max_rx_rings; 987d35a08b8SRahul Gupta #define MAX_STINGRAY_RINGS 236U 98859e62818SAjit Khaparde #define BNXT_MAX_VF_REP_RINGS 8U 989322bd6e7SSomnath Kotur 990f8168ca0SLance Richardson uint16_t max_nq_rings; 991b7778e8aSAjit Khaparde uint16_t max_l2_ctx; 992ff9c0ca4SAjit Khaparde uint16_t max_rx_em_flows; 993b7778e8aSAjit Khaparde uint16_t max_vnics; 99466834d64SDave Johnson #define BNXT_MAX_VNICS_COS_CLASSIFY 8 995b7778e8aSAjit Khaparde uint16_t max_stat_ctx; 996b150a7e7SLance Richardson uint16_t max_tpa_v2; 99711e5e196SSomnath Kotur uint16_t first_vf_id; 998b7778e8aSAjit Khaparde uint16_t vlan; 999c46c7a71SSomnath Kotur #define BNXT_OUTER_TPID_MASK 0x0000ffff 1000c46c7a71SSomnath Kotur #define BNXT_OUTER_TPID_BD_MASK 0xffff0000 1001c46c7a71SSomnath Kotur #define BNXT_OUTER_TPID_BD_SHFT 16 1002c46c7a71SSomnath Kotur uint32_t outer_tpid_bd; 1003e8fe0e06SAjit Khaparde struct bnxt_pf_info *pf; 10043fb93bc7SLance Richardson struct bnxt_parent_info *parent; 10054e3f887bSVenkat Duvvuru uint8_t port_cnt; 100610d074b2SAjit Khaparde uint8_t vxlan_port_cnt; 100710d074b2SAjit Khaparde uint8_t geneve_port_cnt; 10082d344c36SRandy Schacher uint8_t ecpri_port_cnt; 10095c275d61SShahaji Bhosle uint8_t l2_etype_tunnel_cnt; 101010d074b2SAjit Khaparde uint16_t vxlan_port; 10112921498cSMike Baucom uint16_t vxlan_ip_port; 101210d074b2SAjit Khaparde uint16_t geneve_port; 10132d344c36SRandy Schacher uint16_t ecpri_port; 101410d074b2SAjit Khaparde uint16_t vxlan_fw_dst_port_id; 101510d074b2SAjit Khaparde uint16_t geneve_fw_dst_port_id; 10162d344c36SRandy Schacher uint16_t ecpri_fw_dst_port_id; 10175c275d61SShahaji Bhosle #define BNXT_L2_ETYPE_TUNNEL_ID 0xFFFF /* CUSTOM L2 ENCAP - VF representors */ 10185c275d61SShahaji Bhosle uint16_t l2_etype_tunnel_id; 10192d344c36SRandy Schacher uint16_t ecpri_upar_in_use; 10205c275d61SShahaji Bhosle uint8_t l2_etype_upar_in_use; 10212921498cSMike Baucom uint8_t vxlan_ip_upar_in_use; 1022b7778e8aSAjit Khaparde uint32_t fw_ver; 1023698aa7e9SAjit Khaparde uint32_t hwrm_spec_code; 1024bb81e073SAjit Khaparde 1025205b7429SAjit Khaparde struct bnxt_led_info *leds; 10267c6c0187SAjit Khaparde uint8_t ieee_1588; 1027b11cceb8SSomnath Kotur struct bnxt_ptp_cfg *ptp_cfg; 1028925cd070SSomnath Kotur uint8_t ptp_all_rx_tstamp; 10296d8109bcSAjit Khaparde uint16_t vf_resv_strategy; 1030f8168ca0SLance Richardson struct bnxt_ctx_mem_info *ctx; 1031df6cd7c1SKalesh AP 1032df6cd7c1SKalesh AP uint16_t fw_reset_min_msecs; 1033df6cd7c1SKalesh AP uint16_t fw_reset_max_msecs; 1034322bd6e7SSomnath Kotur uint16_t switch_domain_id; 1035322bd6e7SSomnath Kotur uint16_t num_reps; 10366dc83230SSomnath Kotur struct bnxt_rep_info *rep_info; 10376dc83230SSomnath Kotur uint16_t *cfa_code_map; 10388c047e82SKishore Padmanabha /* Device Serial Number */ 10398c047e82SKishore Padmanabha uint8_t dsn[BNXT_DEVICE_SERIAL_NUM_SIZE]; 1040f8362424SKalesh AP /* Struct to hold adapter error recovery related info */ 1041f8362424SKalesh AP struct bnxt_error_recovery_info *recovery_info; 10429db66782SSomnath Kotur #define BNXT_MARK_TABLE_SZ (sizeof(struct bnxt_mark_info) * 64 * 1024) 104394eb699bSAjit Khaparde /* TCAM and EM should be 16-bit only. Other modes not supported. */ 104494eb699bSAjit Khaparde #define BNXT_FLOW_ID_MASK 0x0000ffff 10459db66782SSomnath Kotur struct bnxt_mark_info *mark_table; 10468430a8b8SMichael Wildt 1047f6e250d2SVenkat Duvvuru #define BNXT_SVIF_INVALID 0xFFFF 1048f6e250d2SVenkat Duvvuru uint16_t func_svif; 1049f6e250d2SVenkat Duvvuru uint16_t port_svif; 10507b094065SVenkat Duvvuru 1051d9e70b1dSRandy Schacher struct tf tfp[BNXT_SESSION_TYPE_LAST]; 1052dd0191d5SShuanglin Wang struct tfc tfcp; 105386015ee3SMike Baucom struct bnxt_ulp_context *ulp_ctx; 10541e2f8acaSAjit Khaparde struct bnxt_flow_stat_info *flow_stat; 1055ba404aacSShuanglin Wang uint16_t max_num_kflows; 1056c6062ec0SMike Baucom uint8_t app_id; 1057dd0191d5SShuanglin Wang uint32_t tx_cfa_action; 1058219842b9SSomnath Kotur struct bnxt_ring_stats *prev_rx_ring_stats; 1059219842b9SSomnath Kotur struct bnxt_ring_stats *prev_tx_ring_stats; 106027c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext *prev_rx_ring_stats_ext; 106127c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext *prev_tx_ring_stats_ext; 10626d160d77SRandy Schacher struct bnxt_vnic_queue_db vnic_queue_db; 10634dc9409eSKalesh AP 106480317ff6SFarah Smith struct bnxt_mpc *mpc; 1065bc9b2c20SKalesh AP #define BNXT_MAX_MC_ADDRS ((bp)->max_mcast_addr) 10664dc9409eSKalesh AP struct rte_ether_addr *mcast_addr_list; 10674dc9409eSKalesh AP rte_iova_t mc_list_dma_addr; 10684dc9409eSKalesh AP uint32_t nb_mc_addr; 106958961999SKalesh AP #define BNXT_DFLT_MAX_MC_ADDR 16 /* for compatibility with older firmware */ 1070bc9b2c20SKalesh AP uint32_t max_mcast_addr; /* maximum number of mcast filters supported */ 10719b4353beSKalesh AP 10729b4353beSKalesh AP struct rte_eth_rss_conf rss_conf; /* RSS configuration. */ 1073c0278f6eSKalesh AP uint16_t tunnel_disable_flag; /* tunnel stateless offloads status */ 1074dd0191d5SShuanglin Wang uint8_t chip_rev; 1075b7778e8aSAjit Khaparde }; 1076b7778e8aSAjit Khaparde 1077c72fe7acSSriharsha Basavapatna static 1078c72fe7acSSriharsha Basavapatna inline uint16_t bnxt_max_rings(struct bnxt *bp) 1079c72fe7acSSriharsha Basavapatna { 1080c72fe7acSSriharsha Basavapatna uint16_t max_tx_rings = bp->max_tx_rings; 1081c72fe7acSSriharsha Basavapatna uint16_t max_rx_rings = bp->max_rx_rings; 1082c72fe7acSSriharsha Basavapatna uint16_t max_cp_rings = bp->max_cp_rings; 1083c72fe7acSSriharsha Basavapatna uint16_t max_rings; 1084c72fe7acSSriharsha Basavapatna 1085c72fe7acSSriharsha Basavapatna /* For the sake of symmetry: 1086c72fe7acSSriharsha Basavapatna * max Tx rings == max Rx rings, one stat ctx for each. 1087c72fe7acSSriharsha Basavapatna */ 1088c72fe7acSSriharsha Basavapatna if (BNXT_STINGRAY(bp)) { 1089c72fe7acSSriharsha Basavapatna max_rx_rings = RTE_MIN(RTE_MIN(max_rx_rings / 2U, 1090c72fe7acSSriharsha Basavapatna MAX_STINGRAY_RINGS), 1091c72fe7acSSriharsha Basavapatna bp->max_stat_ctx / 2U); 1092c72fe7acSSriharsha Basavapatna } else { 1093c72fe7acSSriharsha Basavapatna max_rx_rings = RTE_MIN(max_rx_rings / 2U, 1094c72fe7acSSriharsha Basavapatna bp->max_stat_ctx / 2U); 1095c72fe7acSSriharsha Basavapatna } 1096c72fe7acSSriharsha Basavapatna 1097a49844ffSAjit Khaparde /* 10986d160d77SRandy Schacher * RSS table size in P5 is 512. 1099fe8dd26fSAjit Khaparde * Cap max Rx rings to the same value for RSS. 1100fe8dd26fSAjit Khaparde */ 11013b56c3ffSAjit Khaparde if (BNXT_CHIP_P5_P7(bp)) 1102a49844ffSAjit Khaparde max_rx_rings = RTE_MIN(max_rx_rings, BNXT_RSS_TBL_SIZE_P5); 1103fe8dd26fSAjit Khaparde 1104c72fe7acSSriharsha Basavapatna max_tx_rings = RTE_MIN(max_tx_rings, max_rx_rings); 1105c72fe7acSSriharsha Basavapatna if (max_cp_rings > BNXT_NUM_ASYNC_CPR(bp)) 1106c72fe7acSSriharsha Basavapatna max_cp_rings -= BNXT_NUM_ASYNC_CPR(bp); 1107c72fe7acSSriharsha Basavapatna max_rings = RTE_MIN(max_cp_rings / 2U, max_tx_rings); 1108c72fe7acSSriharsha Basavapatna 1109c72fe7acSSriharsha Basavapatna return max_rings; 1110c72fe7acSSriharsha Basavapatna } 1111c72fe7acSSriharsha Basavapatna 11125c980062SAjit Khaparde static inline bool 11135c980062SAjit Khaparde bnxt_compressed_rx_cqe_mode_enabled(struct bnxt *bp) 11145c980062SAjit Khaparde { 11155c980062SAjit Khaparde uint64_t rx_offloads = bp->eth_dev->data->dev_conf.rxmode.offloads; 11165c980062SAjit Khaparde 11175c980062SAjit Khaparde if (bp->vnic_cap_flags & BNXT_VNIC_CAP_L2_CQE_MODE && 11185c980062SAjit Khaparde bp->flags2 & BNXT_FLAGS2_COMPRESSED_RX_CQE && 11195c980062SAjit Khaparde !(rx_offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO) && 11205c980062SAjit Khaparde !(rx_offloads & RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT) && 11215c980062SAjit Khaparde !bp->num_reps && !bp->ieee_1588) 11225c980062SAjit Khaparde return true; 11235c980062SAjit Khaparde 11245c980062SAjit Khaparde return false; 11255c980062SAjit Khaparde } 11265c980062SAjit Khaparde 112702a95625SSomnath Kotur #define BNXT_FC_TIMER 1 /* Timer freq in Sec Flow Counters */ 112802a95625SSomnath Kotur 1129322bd6e7SSomnath Kotur /** 1130322bd6e7SSomnath Kotur * Structure to store private data for each VF representor instance 1131322bd6e7SSomnath Kotur */ 1132ce9875d7SSomnath Kotur struct bnxt_representor { 1133322bd6e7SSomnath Kotur uint16_t switch_domain_id; 1134322bd6e7SSomnath Kotur uint16_t vf_id; 1135ce9875d7SSomnath Kotur #define BNXT_REP_IS_PF BIT(0) 1136ce9875d7SSomnath Kotur #define BNXT_REP_Q_R2F_VALID BIT(1) 1137ce9875d7SSomnath Kotur #define BNXT_REP_Q_F2R_VALID BIT(2) 1138ce9875d7SSomnath Kotur #define BNXT_REP_FC_R2F_VALID BIT(3) 1139ce9875d7SSomnath Kotur #define BNXT_REP_FC_F2R_VALID BIT(4) 1140e9a705c3SSomnath Kotur #define BNXT_REP_BASED_PF_VALID BIT(5) 1141ce9875d7SSomnath Kotur uint32_t flags; 1142f9e91b13SSomnath Kotur uint16_t fw_fid; 1143b59e4be2SVenkat Duvvuru #define BNXT_DFLT_VNIC_ID_INVALID 0xFFFF 1144f9e91b13SSomnath Kotur uint16_t dflt_vnic_id; 1145f9e91b13SSomnath Kotur uint16_t svif; 1146dd0191d5SShuanglin Wang uint32_t vfr_tx_cfa_action; 1147e9a705c3SSomnath Kotur uint8_t parent_pf_idx; /* Logical PF index */ 114809b23f8bSKishore Padmanabha uint32_t dpdk_port_id; 1149ce9875d7SSomnath Kotur uint32_t rep_based_pf; 1150ce9875d7SSomnath Kotur uint8_t rep_q_r2f; 1151ce9875d7SSomnath Kotur uint8_t rep_q_f2r; 1152ce9875d7SSomnath Kotur uint8_t rep_fc_r2f; 1153ce9875d7SSomnath Kotur uint8_t rep_fc_f2r; 1154322bd6e7SSomnath Kotur /* Private data store of associated PF/Trusted VF */ 11556dc83230SSomnath Kotur struct rte_eth_dev *parent_dev; 1156322bd6e7SSomnath Kotur uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; 1157322bd6e7SSomnath Kotur uint8_t dflt_mac_addr[RTE_ETHER_ADDR_LEN]; 11586dc83230SSomnath Kotur struct bnxt_rx_queue **rx_queues; 11596dc83230SSomnath Kotur unsigned int rx_nr_rings; 11606dc83230SSomnath Kotur unsigned int tx_nr_rings; 11616dc83230SSomnath Kotur uint64_t tx_pkts[BNXT_MAX_VF_REP_RINGS]; 11626dc83230SSomnath Kotur uint64_t tx_bytes[BNXT_MAX_VF_REP_RINGS]; 11636dc83230SSomnath Kotur uint64_t rx_pkts[BNXT_MAX_VF_REP_RINGS]; 11646dc83230SSomnath Kotur uint64_t rx_bytes[BNXT_MAX_VF_REP_RINGS]; 11656dc83230SSomnath Kotur uint64_t rx_drop_pkts[BNXT_MAX_VF_REP_RINGS]; 11666dc83230SSomnath Kotur uint64_t rx_drop_bytes[BNXT_MAX_VF_REP_RINGS]; 11676dc83230SSomnath Kotur }; 11686dc83230SSomnath Kotur 1169ce9875d7SSomnath Kotur #define BNXT_REP_PF(vfr_bp) ((vfr_bp)->flags & BNXT_REP_IS_PF) 1170e9a705c3SSomnath Kotur #define BNXT_REP_BASED_PF(vfr_bp) \ 1171e9a705c3SSomnath Kotur ((vfr_bp)->flags & BNXT_REP_BASED_PF_VALID) 1172ce9875d7SSomnath Kotur 11736dc83230SSomnath Kotur struct bnxt_vf_rep_tx_queue { 11746dc83230SSomnath Kotur struct bnxt_tx_queue *txq; 1175ce9875d7SSomnath Kotur struct bnxt_representor *bp; 1176322bd6e7SSomnath Kotur }; 1177322bd6e7SSomnath Kotur 11786253a234SKalesh AP #define I2C_DEV_ADDR_A0 0xa0 11796253a234SKalesh AP #define I2C_DEV_ADDR_A2 0xa2 11806253a234SKalesh AP #define SFF_DIAG_SUPPORT_OFFSET 0x5c 11816253a234SKalesh AP #define SFF_MODULE_ID_SFP 0x3 11826253a234SKalesh AP #define SFF_MODULE_ID_QSFP 0xc 11836253a234SKalesh AP #define SFF_MODULE_ID_QSFP_PLUS 0xd 11846253a234SKalesh AP #define SFF_MODULE_ID_QSFP28 0x11 11856253a234SKalesh AP #define SFF8636_FLATMEM_OFFSET 0x2 11866253a234SKalesh AP #define SFF8636_FLATMEM_MASK 0x4 11876253a234SKalesh AP #define SFF8636_OPT_PAGES_OFFSET 0xc3 11886253a234SKalesh AP #define SFF8636_PAGE1_MASK 0x40 11896253a234SKalesh AP #define SFF8636_PAGE2_MASK 0x80 11906253a234SKalesh AP #define BNXT_MAX_PHY_I2C_RESP_SIZE 64 11916253a234SKalesh AP 11928937597cSSantoshkumar Karanappa Rastapur int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu); 1193074cacb9SSantoshkumar Karanappa Rastapur int bnxt_link_update(struct rte_eth_dev *eth_dev, int wait_to_complete, 1194074cacb9SSantoshkumar Karanappa Rastapur bool exp_link_status); 1195b7778e8aSAjit Khaparde int bnxt_rcv_msg_from_vf(struct bnxt *bp, uint16_t vf_id, void *msg); 11961bf01f51SKalesh AP int is_bnxt_in_error(struct bnxt *bp); 11977bc8e9a2SAjit Khaparde 119825c7edfcSKalesh AP int bnxt_map_fw_health_status_regs(struct bnxt *bp); 11999d0cbaecSKalesh AP uint32_t bnxt_read_fw_status_reg(struct bnxt *bp, uint32_t index); 12009d0cbaecSKalesh AP void bnxt_schedule_fw_health_check(struct bnxt *bp); 120125c7edfcSKalesh AP 120249947a13SAjit Khaparde bool is_bnxt_supported(struct rte_eth_dev *dev); 12035c38c04fSAjit Khaparde bool bnxt_stratus_device(struct bnxt *bp); 1204322bd6e7SSomnath Kotur void bnxt_print_link_info(struct rte_eth_dev *eth_dev); 12056d160d77SRandy Schacher uint16_t bnxt_rss_ctxts(const struct bnxt *bp); 1206322bd6e7SSomnath Kotur uint16_t bnxt_rss_hash_tbl_size(const struct bnxt *bp); 1207322bd6e7SSomnath Kotur int bnxt_link_update_op(struct rte_eth_dev *eth_dev, 1208322bd6e7SSomnath Kotur int wait_to_complete); 12096d160d77SRandy Schacher int 12106d160d77SRandy Schacher bnxt_udp_tunnel_port_del_op(struct rte_eth_dev *eth_dev, 12116d160d77SRandy Schacher struct rte_eth_udp_tunnel *udp_tunnel); 12126d160d77SRandy Schacher int 12136d160d77SRandy Schacher bnxt_udp_tunnel_port_add_op(struct rte_eth_dev *eth_dev, 12146d160d77SRandy Schacher struct rte_eth_udp_tunnel *udp_tunnel); 1215322bd6e7SSomnath Kotur 12165ef3b79fSAjit Khaparde extern const struct rte_flow_ops bnxt_flow_ops; 12174993c210SRandy Schacher extern const struct rte_flow_ops bnxt_flow_meter_ops; 1218322bd6e7SSomnath Kotur 12191cb3d39aSVenkat Duvvuru #define bnxt_acquire_flow_lock(bp) \ 12201cb3d39aSVenkat Duvvuru pthread_mutex_lock(&(bp)->flow_lock) 12211cb3d39aSVenkat Duvvuru 12221cb3d39aSVenkat Duvvuru #define bnxt_release_flow_lock(bp) \ 12231cb3d39aSVenkat Duvvuru pthread_mutex_unlock(&(bp)->flow_lock) 12243e92fd4eSAjit Khaparde 1225db8241feSSomnath Kotur #define BNXT_VALID_VNIC_OR_RET(bp, vnic_id) do { \ 1226db8241feSSomnath Kotur if ((vnic_id) >= (bp)->max_vnics) { \ 1227db8241feSSomnath Kotur rte_flow_error_set(error, \ 1228db8241feSSomnath Kotur EINVAL, \ 1229db8241feSSomnath Kotur RTE_FLOW_ERROR_TYPE_ATTR_GROUP, \ 1230db8241feSSomnath Kotur NULL, \ 1231db8241feSSomnath Kotur "Group id is invalid!"); \ 1232db8241feSSomnath Kotur rc = -rte_errno; \ 1233db8241feSSomnath Kotur goto ret; \ 1234db8241feSSomnath Kotur } \ 1235db8241feSSomnath Kotur } while (0) 1236db8241feSSomnath Kotur 1237dd0191d5SShuanglin Wang #define BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev) \ 1238dd0191d5SShuanglin Wang ((eth_dev)->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) 1239dd0191d5SShuanglin Wang 12403e92fd4eSAjit Khaparde extern int bnxt_logtype_driver; 12413178e37cSDavid Marchand #define RTE_LOGTYPE_BNXT bnxt_logtype_driver 12422b843cacSDavid Marchand #define PMD_DRV_LOG_LINE(level, ...) \ 12432b843cacSDavid Marchand RTE_LOG_LINE_PREFIX(level, BNXT, "%s(): ", __func__, __VA_ARGS__) 1244f6e250d2SVenkat Duvvuru 124552c38677SDamodharam Ammepalli #define BNXT_LINK_SPEEDS_V2_OPTIONS(f) \ 124652c38677SDamodharam Ammepalli ((f) & HWRM_PORT_PHY_QCFG_OUTPUT_OPTION_FLAGS_SPEEDS2_SUPPORTED) 124752c38677SDamodharam Ammepalli #define BNXT_LINK_SPEEDS_V2_VF(bp) (BNXT_VF((bp)) && ((bp)->link_info->option_flags)) 124852c38677SDamodharam Ammepalli #define BNXT_LINK_SPEEDS_V2(bp) (((bp)->link_info) && (((bp)->link_info->support_speeds_v2) || \ 124952c38677SDamodharam Ammepalli BNXT_LINK_SPEEDS_V2_VF((bp)))) 1250dc6810a2SDamodharam Ammepalli #define BNXT_MAX_SPEED_LANES 8 12514f004840SVenkat Duvvuru extern const struct rte_flow_ops bnxt_ulp_rte_flow_ops; 125209b23f8bSKishore Padmanabha int32_t bnxt_ulp_port_init(struct bnxt *bp); 125309b23f8bSKishore Padmanabha void bnxt_ulp_port_deinit(struct bnxt *bp); 1254769de168SVenkat Duvvuru int32_t bnxt_ulp_create_df_rules(struct bnxt *bp); 1255769de168SVenkat Duvvuru void bnxt_ulp_destroy_df_rules(struct bnxt *bp, bool global); 125609b23f8bSKishore Padmanabha int32_t 125709b23f8bSKishore Padmanabha bnxt_ulp_create_vfr_default_rules(struct rte_eth_dev *vfr_ethdev); 125809b23f8bSKishore Padmanabha int32_t 1259ce9875d7SSomnath Kotur bnxt_ulp_delete_vfr_default_rules(struct bnxt_representor *vfr); 1260ce9875d7SSomnath Kotur int bnxt_rep_dev_start_op(struct rte_eth_dev *eth_dev); 1261f6e250d2SVenkat Duvvuru 126202a95625SSomnath Kotur void bnxt_cancel_fc_thread(struct bnxt *bp); 126302a95625SSomnath Kotur void bnxt_flow_cnt_alarm_cb(void *arg); 126402a95625SSomnath Kotur int bnxt_flow_stats_req(struct bnxt *bp); 126502a95625SSomnath Kotur int bnxt_flow_stats_cnt(struct bnxt *bp); 12660466d286SKalesh AP uint32_t bnxt_get_speed_capabilities(struct bnxt *bp); 1267fb7ad441SThomas Monjalon int bnxt_flow_ops_get_op(struct rte_eth_dev *dev, 1268fb7ad441SThomas Monjalon const struct rte_flow_ops **ops); 12696c63f349SKalesh AP int bnxt_dev_start_op(struct rte_eth_dev *eth_dev); 12706c63f349SKalesh AP int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev); 12716c63f349SKalesh AP void bnxt_handle_vf_cfg_change(void *arg); 12724993c210SRandy Schacher int bnxt_flow_meter_ops_get(struct rte_eth_dev *eth_dev, void *arg); 12736d160d77SRandy Schacher struct bnxt_vnic_info *bnxt_get_default_vnic(struct bnxt *bp); 127435a03209SAjit Khaparde uint64_t bnxt_eth_rss_support(struct bnxt *bp); 1275dc6810a2SDamodharam Ammepalli uint16_t bnxt_parse_eth_link_speed_v2(struct bnxt *bp); 1276dd0191d5SShuanglin Wang struct bnxt *bnxt_pmd_get_bp(uint16_t port); 1277804e746cSAjit Khaparde #endif 1278