The aim of the changes is to remove NVME dependency on
memory allocations, and to use a prepared buffer instead.

The changes do not affect other components.

Signed-off-by: Soumyadeep Hore <soumyadeep.h...@intel.com>
---
 drivers/common/idpf/base/idpf_controlq.c     | 27 +++++++++++++++++---
 drivers/common/idpf/base/idpf_controlq_api.h |  9 +++++--
 2 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/drivers/common/idpf/base/idpf_controlq.c 
b/drivers/common/idpf/base/idpf_controlq.c
index a82ca628de..0ba7281a45 100644
--- a/drivers/common/idpf/base/idpf_controlq.c
+++ b/drivers/common/idpf/base/idpf_controlq.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2023 Intel Corporation
+ * Copyright(c) 2001-2024 Intel Corporation
  */
 
 #include "idpf_controlq.h"
@@ -145,8 +145,12 @@ int idpf_ctlq_add(struct idpf_hw *hw,
            qinfo->buf_size > IDPF_CTLQ_MAX_BUF_LEN)
                return -EINVAL;
 
+#ifndef NVME_CPF
        cq = (struct idpf_ctlq_info *)
             idpf_calloc(hw, 1, sizeof(struct idpf_ctlq_info));
+#else
+       cq = *cq_out;
+#endif
        if (!cq)
                return -ENOMEM;
 
@@ -172,10 +176,15 @@ int idpf_ctlq_add(struct idpf_hw *hw,
        }
 
        if (status)
+#ifdef NVME_CPF
+               return status;
+#else
                goto init_free_q;
+#endif
 
        if (is_rxq) {
                idpf_ctlq_init_rxq_bufs(cq);
+#ifndef NVME_CPF
        } else {
                /* Allocate the array of msg pointers for TX queues */
                cq->bi.tx_msg = (struct idpf_ctlq_msg **)
@@ -185,6 +194,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
                        status = -ENOMEM;
                        goto init_dealloc_q_mem;
                }
+#endif
        }
 
        idpf_ctlq_setup_regs(cq, qinfo);
@@ -195,6 +205,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 
        LIST_INSERT_HEAD(&hw->cq_list_head, cq, cq_list);
 
+#ifndef NVME_CPF
        *cq_out = cq;
        return status;
 
@@ -205,6 +216,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
        idpf_free(hw, cq);
        cq = NULL;
 
+#endif
        return status;
 }
 
@@ -232,8 +244,13 @@ void idpf_ctlq_remove(struct idpf_hw *hw,
  * destroyed. This must be called prior to using the individual add/remove
  * APIs.
  */
+#ifdef NVME_CPF
+int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
+                   struct idpf_ctlq_create_info *q_info, struct idpf_ctlq_info 
**ctlq)
+#else
 int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
                   struct idpf_ctlq_create_info *q_info)
+#endif
 {
        struct idpf_ctlq_info *cq = NULL, *tmp = NULL;
        int ret_code = 0;
@@ -244,6 +261,10 @@ int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
        for (i = 0; i < num_q; i++) {
                struct idpf_ctlq_create_info *qinfo = q_info + i;
 
+#ifdef NVME_CPF
+               cq = *(ctlq + i);
+
+#endif 
                ret_code = idpf_ctlq_add(hw, qinfo, &cq);
                if (ret_code)
                        goto init_destroy_qs;
@@ -398,7 +419,7 @@ int idpf_ctlq_send(struct idpf_hw *hw, struct 
idpf_ctlq_info *cq,
  * ctlq_msgs and free or reuse the DMA buffers.
  */
 static int __idpf_ctlq_clean_sq(struct idpf_ctlq_info *cq, u16 *clean_count,
-                               struct idpf_ctlq_msg *msg_status[], bool force)
+                               struct idpf_ctlq_msg *msg_status[], bool force)
 {
        struct idpf_ctlq_desc *desc;
        u16 i = 0, num_to_clean;
@@ -469,7 +490,7 @@ static int __idpf_ctlq_clean_sq(struct idpf_ctlq_info *cq, 
u16 *clean_count,
  * ctlq_msgs and free or reuse the DMA buffers.
  */
 int idpf_ctlq_clean_sq_force(struct idpf_ctlq_info *cq, u16 *clean_count,
-                            struct idpf_ctlq_msg *msg_status[])
+                            struct idpf_ctlq_msg *msg_status[])
 {
        return __idpf_ctlq_clean_sq(cq, clean_count, msg_status, true);
 }
diff --git a/drivers/common/idpf/base/idpf_controlq_api.h 
b/drivers/common/idpf/base/idpf_controlq_api.h
index 38f5d2df3c..bce5187981 100644
--- a/drivers/common/idpf/base/idpf_controlq_api.h
+++ b/drivers/common/idpf/base/idpf_controlq_api.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2023 Intel Corporation
+ * Copyright(c) 2001-2024 Intel Corporation
  */
 
 #ifndef _IDPF_CONTROLQ_API_H_
@@ -158,8 +158,13 @@ enum idpf_mbx_opc {
 /* Will init all required q including default mb.  "q_info" is an array of
  * create_info structs equal to the number of control queues to be created.
  */
+#ifdef NVME_CPF
+int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
+                   struct idpf_ctlq_create_info *q_info, struct idpf_ctlq_info 
**ctlq);
+#else
 int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
                   struct idpf_ctlq_create_info *q_info);
+#endif
 
 /* Allocate and initialize a single control queue, which will be added to the
  * control queue list; returns a handle to the created control queue
@@ -186,7 +191,7 @@ int idpf_ctlq_recv(struct idpf_ctlq_info *cq, u16 
*num_q_msg,
 
 /* Reclaims all descriptors on HW write back */
 int idpf_ctlq_clean_sq_force(struct idpf_ctlq_info *cq, u16 *clean_count,
-                            struct idpf_ctlq_msg *msg_status[]);
+                            struct idpf_ctlq_msg *msg_status[]);
 
 /* Reclaims send descriptors on HW write back */
 int idpf_ctlq_clean_sq(struct idpf_ctlq_info *cq, u16 *clean_count,
-- 
2.43.0

Reply via email to