net/bnxt: fix supporting zero mark ID with RSS action
[dpdk.git] / drivers / net / bnxt / bnxt.h
index 3487b91..68786a8 100644 (file)
@@ -470,6 +470,11 @@ struct bnxt_error_recovery_info {
        uint32_t        last_reset_counter;
 };
 
+struct bnxt_mark_info {
+       uint32_t        mark_id;
+       bool            valid;
+};
+
 /* address space location of register */
 #define BNXT_FW_STATUS_REG_TYPE_MASK   3
 /* register is located in PCIe config space */
@@ -520,13 +525,13 @@ struct bnxt {
 #define BNXT_FLAG_FW_HEALTH_CHECK_SCHEDULED    BIT(18)
 #define BNXT_FLAG_EXT_STATS_SUPPORTED          BIT(19)
 #define BNXT_FLAG_NEW_RM                       BIT(20)
-#define BNXT_FLAG_INIT_DONE                    BIT(21)
+#define BNXT_FLAG_NPAR_PF                      BIT(21)
 #define BNXT_FLAG_FW_CAP_ONE_STEP_TX_TS                BIT(22)
 #define BNXT_FLAG_ADV_FLOW_MGMT                        BIT(23)
 #define BNXT_FLAG_RX_VECTOR_PKT_MODE           BIT(24)
 #define BNXT_PF(bp)            (!((bp)->flags & BNXT_FLAG_VF))
 #define BNXT_VF(bp)            ((bp)->flags & BNXT_FLAG_VF)
-#define BNXT_NPAR(bp)          ((bp)->port_partition_type)
+#define BNXT_NPAR(bp)          ((bp)->flags & BNXT_FLAG_NPAR_PF)
 #define BNXT_MH(bp)             ((bp)->flags & BNXT_FLAG_MULTI_HOST)
 #define BNXT_SINGLE_PF(bp)      (BNXT_PF(bp) && !BNXT_NPAR(bp) && !BNXT_MH(bp))
 #define BNXT_USE_CHIMP_MB      0 //For non-CFA commands, everything uses Chimp.
@@ -622,12 +627,19 @@ struct bnxt {
        uint16_t                max_tx_rings;
        uint16_t                max_rx_rings;
 #define MAX_STINGRAY_RINGS             128U
-#define BNXT_MAX_RINGS(bp) \
+/* For sake of symmetry, max Tx rings == max Rx rings, one stat ctx for each */
+#define BNXT_MAX_RX_RINGS(bp) \
        (BNXT_STINGRAY(bp) ? RTE_MIN(RTE_MIN(bp->max_rx_rings, \
                                             MAX_STINGRAY_RINGS), \
-                                    bp->max_stat_ctx) : \
-                               RTE_MIN(bp->max_rx_rings, bp->max_stat_ctx))
+                                    bp->max_stat_ctx / 2U) : \
+                               RTE_MIN(bp->max_rx_rings, \
+                                       bp->max_stat_ctx / 2U))
+#define BNXT_MAX_TX_RINGS(bp) \
+       (RTE_MIN((bp)->max_tx_rings, BNXT_MAX_RX_RINGS(bp)))
 
+#define BNXT_MAX_RINGS(bp) \
+       (RTE_MIN((((bp)->max_cp_rings - BNXT_NUM_ASYNC_CPR(bp)) / 2U), \
+                BNXT_MAX_TX_RINGS(bp)))
        uint16_t                max_nq_rings;
        uint16_t                max_l2_ctx;
        uint16_t                max_rx_em_flows;
@@ -641,8 +653,6 @@ struct bnxt {
 #define BNXT_OUTER_TPID_BD_SHFT        16
        uint32_t                outer_tpid_bd;
        struct bnxt_pf_info     pf;
-       uint8_t                 port_partition_type;
-       uint8_t                 dev_stopped;
        uint8_t                 vxlan_port_cnt;
        uint8_t                 geneve_port_cnt;
        uint16_t                vxlan_port;
@@ -663,10 +673,10 @@ struct bnxt {
 
        /* Struct to hold adapter error recovery related info */
        struct bnxt_error_recovery_info *recovery_info;
-#define BNXT_MARK_TABLE_SZ     (sizeof(uint32_t)  * 64 * 1024)
+#define BNXT_MARK_TABLE_SZ     (sizeof(struct bnxt_mark_info)  * 64 * 1024)
 /* TCAM and EM should be 16-bit only. Other modes not supported. */
 #define BNXT_FLOW_ID_MASK      0x0000ffff
-       uint32_t                *mark_table;
+       struct bnxt_mark_info   *mark_table;
 };
 
 int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu);
@@ -689,11 +699,23 @@ extern const struct rte_flow_ops bnxt_flow_ops;
 #define bnxt_release_flow_lock(bp) \
        pthread_mutex_unlock(&(bp)->flow_lock)
 
+#define BNXT_VALID_VNIC_OR_RET(bp, vnic_id) do { \
+       if ((vnic_id) >= (bp)->max_vnics) { \
+               rte_flow_error_set(error, \
+                               EINVAL, \
+                               RTE_FLOW_ERROR_TYPE_ATTR_GROUP, \
+                               NULL, \
+                               "Group id is invalid!"); \
+               rc = -rte_errno; \
+               goto ret; \
+       } \
+} while (0)
+
 extern int bnxt_logtype_driver;
 #define PMD_DRV_LOG_RAW(level, fmt, args...) \
        rte_log(RTE_LOG_ ## level, bnxt_logtype_driver, "%s(): " fmt, \
                __func__, ## args)
 
 #define PMD_DRV_LOG(level, fmt, args...) \
-       PMD_DRV_LOG_RAW(level, fmt, ## args)
+         PMD_DRV_LOG_RAW(level, fmt, ## args)
 #endif