[PATCH v2 01/21] common/idpf: added NVME CPF specific code with defines
Soumyadeep Hore
soumyadeep.hore at intel.com
Tue Jun 4 10:05:51 CEST 2024
Removes NVME dependency on memory allocations and
uses a prepared buffer instead.
The changes do not affect other components.
Signed-off-by: Soumyadeep Hore <soumyadeep.hore at intel.com>
---
drivers/common/idpf/base/idpf_controlq.c | 23 +++++++++++++++++++-
drivers/common/idpf/base/idpf_controlq_api.h | 7 +++++-
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/drivers/common/idpf/base/idpf_controlq.c b/drivers/common/idpf/base/idpf_controlq.c
index a82ca628de..bada75abfc 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;
@@ -204,6 +215,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
init_free_q:
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;
diff --git a/drivers/common/idpf/base/idpf_controlq_api.h b/drivers/common/idpf/base/idpf_controlq_api.h
index 38f5d2df3c..6b6f3e84c2 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
--
2.43.0
More information about the dev
mailing list