net/mlx5: reorganize flow tables with hash list
[dpdk.git] / drivers / net / mlx5 / mlx5.h
index f9e1396..7cec367 100644 (file)
@@ -267,6 +267,7 @@ struct mlx5_dev_config {
                /* Rx queue count threshold to enable MPRQ. */
        } mprq; /* Configurations for Multi-Packet RQ. */
        int mps; /* Multi-packet send supported mode. */
+       int dbnc; /* Skip doorbell register write barrier. */
        unsigned int flow_prio; /* Number of flow priorities. */
        enum modify_reg flow_mreg_c[MLX5_MREG_C_NUM];
        /* Availibility of mreg_c's. */
@@ -571,6 +572,18 @@ struct mlx5_ibv_shared_port {
         */
 };
 
+/* Table key of the hash organization. */
+union mlx5_flow_tbl_key {
+       struct {
+               /* Table ID should be at the lowest address. */
+               uint32_t table_id;      /**< ID of the table. */
+               uint16_t reserved;      /**< must be zero for comparison. */
+               uint8_t domain;         /**< 1 - FDB, 0 - NIC TX/RX. */
+               uint8_t direction;      /**< 1 - egress, 0 - ingress. */
+       };
+       uint64_t v64;                   /**< full 64bits value of key */
+};
+
 /* Table structure. */
 struct mlx5_flow_tbl_resource {
        void *obj; /**< Pointer to DR table object. */
@@ -644,23 +657,18 @@ struct mlx5_ibv_shared {
        uint32_t dv_regc0_mask; /* available bits of metatada reg_c[0]. */
        uint32_t dv_refcnt; /* DV/DR data reference counter. */
        void *fdb_domain; /* FDB Direct Rules name space handle. */
-       struct mlx5_flow_tbl_resource fdb_tbl[MLX5_MAX_TABLES_FDB];
-       /* FDB Direct Rules tables. */
        struct mlx5_flow_tbl_resource *fdb_mtr_sfx_tbl;
        /* FDB meter suffix rules table. */
        void *rx_domain; /* RX Direct Rules name space handle. */
-       struct mlx5_flow_tbl_resource rx_tbl[MLX5_MAX_TABLES];
-       /* RX Direct Rules tables. */
        struct mlx5_flow_tbl_resource *rx_mtr_sfx_tbl;
        /* RX meter suffix rules table. */
        void *tx_domain; /* TX Direct Rules name space handle. */
-       struct mlx5_flow_tbl_resource tx_tbl[MLX5_MAX_TABLES];
-       /* TX Direct Rules tables. */
        struct mlx5_flow_tbl_resource *tx_mtr_sfx_tbl;
        /* TX meter suffix rules table. */
+       struct mlx5_hlist *flow_tbls;
+       /* 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. */
-       /* TX Direct Rules tables/ */
        LIST_HEAD(matchers, mlx5_flow_dv_matcher) matchers;
        LIST_HEAD(encap_decap, mlx5_flow_dv_encap_decap_resource) encaps_decaps;
        LIST_HEAD(modify_cmd, mlx5_flow_dv_modify_hdr_resource) modify_cmds;
@@ -1040,5 +1048,11 @@ struct mlx5_devx_obj *mlx5_devx_cmd_create_td(struct ibv_context *ctx);
 int mlx5_flow_meter_ops_get(struct rte_eth_dev *dev, void *arg);
 struct mlx5_flow_meter *mlx5_flow_meter_find(struct mlx5_priv *priv,
                                             uint32_t meter_id);
+struct mlx5_flow_meter *mlx5_flow_meter_attach
+                                       (struct mlx5_priv *priv,
+                                        uint32_t meter_id,
+                                        const struct rte_flow_attr *attr,
+                                        struct rte_flow_error *error);
+void mlx5_flow_meter_detach(struct mlx5_flow_meter *fm);
 
 #endif /* RTE_PMD_MLX5_H_ */