vdpa/mlx5: fix maximum number of virtqs
[dpdk.git] / drivers / vdpa / mlx5 / mlx5_vdpa.h
index 5045fea..e7f3319 100644 (file)
@@ -12,7 +12,7 @@
 #pragma GCC diagnostic ignored "-Wpedantic"
 #endif
 #include <rte_vdpa.h>
-#include <rte_vdpa_dev.h>
+#include <vdpa_driver.h>
 #include <rte_vhost.h>
 #ifdef PEDANTIC
 #pragma GCC diagnostic error "-Wpedantic"
@@ -59,10 +59,10 @@ struct mlx5_vdpa_event_qp {
 
 struct mlx5_vdpa_query_mr {
        SLIST_ENTRY(mlx5_vdpa_query_mr) next;
-       void *addr;
-       uint64_t length;
-       struct mlx5dv_devx_umem *umem;
-       struct mlx5_devx_obj *mkey;
+       union {
+               struct ibv_mr *mr;
+               struct mlx5_devx_obj *mkey;
+       };
        int is_indirect;
 };
 
@@ -89,9 +89,10 @@ struct mlx5_vdpa_virtq {
                void *buf;
                uint32_t size;
        } umems[3];
-       struct rte_intr_handle intr_handle;
+       struct rte_intr_handle *intr_handle;
        uint64_t err_time[3]; /* RDTSC time of recent errors. */
        uint32_t n_retry;
+       struct mlx5_devx_virtio_q_couners_attr stats;
        struct mlx5_devx_virtio_q_couners_attr reset;
 };
 
@@ -113,9 +114,16 @@ enum {
        MLX5_VDPA_EVENT_MODE_ONLY_INTERRUPT
 };
 
+enum mlx5_dev_state {
+       MLX5_VDPA_STATE_PROBED = 0,
+       MLX5_VDPA_STATE_CONFIGURED,
+       MLX5_VDPA_STATE_IN_PROGRESS /* Shutting down. */
+};
+
 struct mlx5_vdpa_priv {
        TAILQ_ENTRY(mlx5_vdpa_priv) next;
-       uint8_t configured;
+       bool connected;
+       enum mlx5_dev_state state;
        pthread_mutex_t vq_config_lock;
        uint64_t no_traffic_counter;
        pthread_t timer_tid;
@@ -136,8 +144,8 @@ struct mlx5_vdpa_priv {
        struct rte_vhost_memory *vmem;
        struct mlx5dv_devx_event_channel *eventc;
        struct mlx5dv_devx_event_channel *err_chnl;
-       struct mlx5dv_devx_uar *uar;
-       struct rte_intr_handle err_intr_handle;
+       struct mlx5_uar uar;
+       struct rte_intr_handle *err_intr_handle;
        struct mlx5_devx_obj *td;
        struct mlx5_devx_obj *tiss[16]; /* TIS list for each LAG port. */
        uint16_t nr_virtqs;
@@ -147,6 +155,7 @@ struct mlx5_vdpa_priv {
        struct mlx5_vdpa_steer steer;
        struct mlx5dv_var *var;
        void *virtq_db_addr;
+       struct mlx5_pmd_wrapped_mr lm_mr;
        SLIST_HEAD(mr_list, mlx5_vdpa_query_mr) mr_list;
        struct mlx5_vdpa_virtq virtqs[];
 };
@@ -226,6 +235,15 @@ int mlx5_vdpa_event_qp_create(struct mlx5_vdpa_priv *priv, uint16_t desc_n,
  */
 void mlx5_vdpa_event_qp_destroy(struct mlx5_vdpa_event_qp *eqp);
 
+/**
+ * Create all the event global resources.
+ *
+ * @param[in] priv
+ *   The vdpa driver private structure.
+ */
+int
+mlx5_vdpa_event_qp_global_prepare(struct mlx5_vdpa_priv *priv);
+
 /**
  * Release all the event global resources.
  *
@@ -273,13 +291,21 @@ int mlx5_vdpa_err_event_setup(struct mlx5_vdpa_priv *priv);
 void mlx5_vdpa_err_event_unset(struct mlx5_vdpa_priv *priv);
 
 /**
- * Release a virtq and all its related resources.
+ * Release virtqs and resources except that to be reused.
  *
  * @param[in] priv
  *   The vdpa driver private structure.
  */
 void mlx5_vdpa_virtqs_release(struct mlx5_vdpa_priv *priv);
 
+/**
+ * Cleanup cached resources of all virtqs.
+ *
+ * @param[in] priv
+ *   The vdpa driver private structure.
+ */
+void mlx5_vdpa_virtqs_cleanup(struct mlx5_vdpa_priv *priv);
+
 /**
  * Create all the HW virtqs resources and all their related resources.
  *
@@ -307,7 +333,7 @@ int mlx5_vdpa_virtqs_prepare(struct mlx5_vdpa_priv *priv);
 int mlx5_vdpa_virtq_enable(struct mlx5_vdpa_priv *priv, int index, int enable);
 
 /**
- * Unset steering and release all its related resources- stop traffic.
+ * Unset steering - stop traffic.
  *
  * @param[in] priv
  *   The vdpa driver private structure.