net/bnxt: use macro for PCI log format
[dpdk.git] / drivers / net / mlx5 / mlx5.h
index dd16da7..50349ab 100644 (file)
 #include <mlx5_prm.h>
 #include <mlx5_nl.h>
 #include <mlx5_common_mp.h>
+#include <mlx5_common_mr.h>
 
 #include "mlx5_defs.h"
 #include "mlx5_utils.h"
-#include "mlx5_mr.h"
 #include "mlx5_autoconf.h"
 
+
+enum mlx5_ipool_index {
+#ifdef HAVE_IBV_FLOW_DV_SUPPORT
+       MLX5_IPOOL_DECAP_ENCAP = 0, /* Pool for encap/decap resource. */
+       MLX5_IPOOL_PUSH_VLAN, /* Pool for push vlan resource. */
+       MLX5_IPOOL_TAG, /* Pool for tag resource. */
+       MLX5_IPOOL_PORT_ID, /* Pool for port id resource. */
+       MLX5_IPOOL_JUMP, /* Pool for jump resource. */
+#endif
+       MLX5_IPOOL_MTR, /* Pool for meter resource. */
+       MLX5_IPOOL_MCP, /* Pool for metadata resource. */
+       MLX5_IPOOL_HRXQ, /* Pool for hrxq resource. */
+       MLX5_IPOOL_MLX5_FLOW, /* Pool for mlx5 flow handle. */
+       MLX5_IPOOL_RTE_FLOW, /* Pool for rte_flow. */
+       MLX5_IPOOL_MAX,
+};
+
 /** Key string for IPC. */
 #define MLX5_MP_NAME "net_mlx5_mp"
 
@@ -93,9 +110,6 @@ struct mlx5_stats_ctrl {
        uint64_t imissed;
 };
 
-/* Flow list . */
-TAILQ_HEAD(mlx5_flows, rte_flow);
-
 /* Default PMD specific parameter value. */
 #define MLX5_ARG_UNSET (-1)
 
@@ -199,8 +213,6 @@ struct mlx5_verbs_alloc_ctx {
        const void *obj; /* Pointer to the DPDK object. */
 };
 
-LIST_HEAD(mlx5_mr_list, mlx5_mr);
-
 /* Flow drop context necessary due to Verbs API. */
 struct mlx5_drop {
        struct mlx5_hrxq *hrxq; /* Hash Rx queue queue. */
@@ -411,13 +423,7 @@ struct mlx5_ibv_shared {
        struct ibv_device_attr_ex device_attr; /* Device properties. */
        LIST_ENTRY(mlx5_ibv_shared) mem_event_cb;
        /**< Called by memory event callback. */
-       struct {
-               uint32_t dev_gen; /* Generation number to flush local caches. */
-               rte_rwlock_t rwlock; /* MR Lock. */
-               struct mlx5_mr_btree cache; /* Global MR cache table. */
-               struct mlx5_mr_list mr_list; /* Registered MR list. */
-               struct mlx5_mr_list mr_free_list; /* Freed MR list. */
-       } mr;
+       struct mlx5_mr_share_cache share_cache;
        /* Shared DV/DR flow data section. */
        pthread_mutex_t dv_mutex; /* DV context mutex. */
        uint32_t dv_meta_mask; /* flow META metadata supported mask. */
@@ -431,14 +437,14 @@ struct mlx5_ibv_shared {
        /* Direct Rules tables for FDB, NIC TX+RX */
        void *esw_drop_action; /* Pointer to DR E-Switch drop action. */
        void *pop_vlan_action; /* Pointer to DR pop VLAN action. */
-       LIST_HEAD(encap_decap, mlx5_flow_dv_encap_decap_resource) encaps_decaps;
+       uint32_t encaps_decaps; /* Encap/decap action indexed memory list. */
        LIST_HEAD(modify_cmd, mlx5_flow_dv_modify_hdr_resource) modify_cmds;
        struct mlx5_hlist *tag_table;
-       LIST_HEAD(port_id_action_list, mlx5_flow_dv_port_id_action_resource)
-               port_id_action_list; /* List of port ID actions. */
-       LIST_HEAD(push_vlan_action_list, mlx5_flow_dv_push_vlan_action_resource)
-               push_vlan_action_list; /* List of push VLAN actions. */
+       uint32_t port_id_action_list; /* List of port ID actions. */
+       uint32_t push_vlan_action_list; /* List of push VLAN actions. */
        struct mlx5_flow_counter_mng cmng; /* Counters management structure. */
+       struct mlx5_indexed_pool *ipool[MLX5_IPOOL_MAX];
+       /* Memory Pool for mlx5 flow resources. */
        /* Shared interrupt handler section. */
        pthread_mutex_t intr_mutex; /* Interrupt config mutex. */
        uint32_t intr_cnt; /* Interrupt handler reference counter. */
@@ -504,14 +510,15 @@ struct mlx5_priv {
        unsigned int (*reta_idx)[]; /* RETA index table. */
        unsigned int reta_idx_n; /* RETA index size. */
        struct mlx5_drop drop_queue; /* Flow drop queues. */
-       struct mlx5_flows flows; /* RTE Flow rules. */
-       struct mlx5_flows ctrl_flows; /* Control flow rules. */
+       uint32_t flows; /* RTE Flow rules. */
+       uint32_t ctrl_flows; /* Control flow rules. */
        void *inter_flows; /* Intermediate resources for flow creation. */
+       void *rss_desc; /* Intermediate rss description resources. */
        int flow_idx; /* Intermediate device flow index. */
        int flow_nested_idx; /* Intermediate device flow index, nested. */
        LIST_HEAD(rxq, mlx5_rxq_ctrl) rxqsctrl; /* DPDK Rx queues. */
        LIST_HEAD(rxqobj, mlx5_rxq_obj) rxqsobj; /* Verbs/DevX Rx queues. */
-       LIST_HEAD(hrxq, mlx5_hrxq) hrxqs; /* Verbs Hash Rx queues. */
+       uint32_t hrxqs; /* Verbs Hash Rx queues. */
        LIST_HEAD(txq, mlx5_txq_ctrl) txqsctrl; /* DPDK Tx queues. */
        LIST_HEAD(txqobj, mlx5_txq_obj) txqsobj; /* Verbs/DevX Tx queues. */
        /* Indirection tables. */
@@ -548,6 +555,7 @@ struct mlx5_priv {
        uint8_t skip_default_rss_reta; /* Skip configuration of default reta. */
        uint8_t fdb_def_rule; /* Whether fdb jump to table 1 is configured. */
        struct mlx5_mp_id mp_id; /* ID of a multi-process process */
+       LIST_HEAD(fdir, mlx5_fdir_flow) fdir_flows; /* fdir flows. */
 };
 
 #define PORT_ID(priv) ((priv)->dev_data->port_id)
@@ -705,8 +713,7 @@ struct rte_flow *mlx5_flow_create(struct rte_eth_dev *dev,
                                  struct rte_flow_error *error);
 int mlx5_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow,
                      struct rte_flow_error *error);
-void mlx5_flow_list_flush(struct rte_eth_dev *dev, struct mlx5_flows *list,
-                         bool active);
+void mlx5_flow_list_flush(struct rte_eth_dev *dev, uint32_t *list, bool active);
 int mlx5_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error);
 int mlx5_flow_query(struct rte_eth_dev *dev, struct rte_flow *flow,
                    const struct rte_flow_action *action, void *data,
@@ -717,8 +724,8 @@ int mlx5_dev_filter_ctrl(struct rte_eth_dev *dev,
                         enum rte_filter_type filter_type,
                         enum rte_filter_op filter_op,
                         void *arg);
-int mlx5_flow_start(struct rte_eth_dev *dev, struct mlx5_flows *list);
-void mlx5_flow_stop(struct rte_eth_dev *dev, struct mlx5_flows *list);
+int mlx5_flow_start(struct rte_eth_dev *dev, uint32_t *list);
+void mlx5_flow_stop(struct rte_eth_dev *dev, uint32_t *list);
 int mlx5_flow_start_default(struct rte_eth_dev *dev);
 void mlx5_flow_stop_default(struct rte_eth_dev *dev);
 void mlx5_flow_alloc_intermediate(struct rte_eth_dev *dev);
@@ -746,6 +753,7 @@ int mlx5_counter_query(struct rte_eth_dev *dev, uint32_t cnt,
                       bool clear, uint64_t *pkts, uint64_t *bytes);
 int mlx5_flow_dev_dump(struct rte_eth_dev *dev, FILE *file,
                       struct rte_flow_error *error);
+void mlx5_flow_rxq_dynf_metadata_set(struct rte_eth_dev *dev);
 
 /* mlx5_mp.c */
 int mlx5_mp_primary_handle(const struct rte_mp_msg *mp_msg, const void *peer);