From 4bfb8af65bcd0bbd9ccfe32353bdd37fc4aa6080 Mon Sep 17 00:00:00 2001 From: w00669608 Date: Wed, 31 Dec 2025 14:55:40 +0800 Subject: [PATCH] add queue cfg get func --- .../include/umq/transport_layer/umq_tp_api.h | 7 +++++++ src/urpc/include/umq/umq_api.h | 8 ++++++++ src/urpc/include/umq/umq_types.h | 13 +++++++++++++ src/urpc/umq/umq_api.c | 11 +++++++++++ src/urpc/umq/umq_ub/core/private/umq_ub.c | 1 + .../umq/umq_ub/core/private/umq_ub_private.h | 1 + src/urpc/umq/umq_ub/core/umq_ub_impl.c | 19 +++++++++++++++++++ src/urpc/umq/umq_ub/core/umq_ub_impl.h | 1 + src/urpc/umq/umq_ub/umq_ub_api.c | 6 ++++++ src/urpc/umq/umq_ub/umq_ub_plus_api.c | 6 ++++++ 10 files changed, 73 insertions(+) diff --git a/src/urpc/include/umq/transport_layer/umq_tp_api.h b/src/urpc/include/umq/transport_layer/umq_tp_api.h index a2aabc0..d11a486 100644 --- a/src/urpc/include/umq/transport_layer/umq_tp_api.h +++ b/src/urpc/include/umq/transport_layer/umq_tp_api.h @@ -261,6 +261,13 @@ typedef struct umq_ops { * Return: 0 on success, other value on error */ int (*umq_tp_dev_info_get)(char *dev_name, umq_trans_mode_t umq_trans_mode, umq_dev_info_t *umq_dev_info); + /** + * Get umq cfg. + * @param[in] umqh_tp: umq tp handle + * @param[out] cfg: umq cfg + * Return: 0 on success, other value on error + */ + int (*umq_tp_cfg_get)(uint64_t umqh_tp, umq_qcfg_get_t *cfg); } umq_ops_t; typedef umq_ops_t* (*umq_ops_get_t)(void); diff --git a/src/urpc/include/umq/umq_api.h b/src/urpc/include/umq/umq_api.h index b8cec11..eb891ea 100644 --- a/src/urpc/include/umq/umq_api.h +++ b/src/urpc/include/umq/umq_api.h @@ -304,6 +304,14 @@ int umq_mempool_state_refresh(uint64_t umqh, uint32_t mempool_id); */ int umq_dev_info_get(char *dev_name, umq_trans_mode_t umq_trans_mode, umq_dev_info_t *umq_dev_info); +/** + * Query umq configuration + * @param[in] umqh: Queue handle + * @param[out] cfg: Configuration information for umq + * Return 0 on success, error code on failure, other value on error + */ +int umq_cfg_get(uint64_t umqh, umq_qcfg_get_t *cfg); + #ifdef __cplusplus } #endif diff --git a/src/urpc/include/umq/umq_types.h b/src/urpc/include/umq/umq_types.h index 183b982..7c88b62 100644 --- a/src/urpc/include/umq/umq_types.h +++ b/src/urpc/include/umq/umq_types.h @@ -553,6 +553,19 @@ typedef struct umq_dev_info { }; } umq_dev_info_t; +typedef struct umq_qcfg_get { + uint32_t create_flag; // indicates which below creation property takes effect + uint32_t rx_buf_size; // size of the receive buffer + uint32_t tx_buf_size; // size of the send buffer + uint32_t rx_depth; // depth of the receive buffer ring + uint32_t tx_depth; // depth of the send buffer ring + uint64_t umq_ctx; // umq ctx + uint64_t share_rq_umqh; // share jfr queue handle + umq_trans_mode_t trans_mode; // transmission mode of the queue + umq_queue_mode_t mode; // mode of queue, QUEUE_MODE_POLLING for default + umq_state_t state; // queue state +} umq_qcfg_get_t; + #ifdef __cplusplus } #endif diff --git a/src/urpc/umq/umq_api.c b/src/urpc/umq/umq_api.c index f817d16..42feebd 100644 --- a/src/urpc/umq/umq_api.c +++ b/src/urpc/umq/umq_api.c @@ -1107,4 +1107,15 @@ int umq_dev_info_get(char *dev_name, umq_trans_mode_t umq_trans_mode, umq_dev_in } return umq_fw->tp_ops->umq_tp_dev_info_get(dev_name, umq_trans_mode, umq_dev_info); +} + +int umq_cfg_get(uint64_t umqh, umq_qcfg_get_t *cfg) +{ + umq_t *umq = (umq_t *)(uintptr_t)umqh; + if (umq == NULL || umq->umqh_tp == UMQ_INVALID_HANDLE || umq->tp_ops == NULL + || umq->tp_ops->umq_tp_cfg_get == NULL) { + UMQ_VLOG_ERR("parameter invalid\n"); + return -UMQ_ERR_EINVAL; + } + return umq->tp_ops->umq_tp_cfg_get(umqh, cfg); } \ No newline at end of file diff --git a/src/urpc/umq/umq_ub/core/private/umq_ub.c b/src/urpc/umq/umq_ub/core/private/umq_ub.c index 2477803..53318ca 100644 --- a/src/urpc/umq/umq_ub/core/private/umq_ub.c +++ b/src/urpc/umq/umq_ub/core/private/umq_ub.c @@ -686,6 +686,7 @@ int check_and_set_param(umq_ub_ctx_t *dev_ctx, umq_create_option_t *option, ub_q queue->umq_trans_mode = option->trans_mode; queue->remote_rx_buf_size = dev_ctx->dev_attr.dev_cap.max_msg_size; queue->create_flag = option->create_flag; + queue->umq_ctx = option->umq_ctx; queue->share_rq_umqh = option->share_rq_umqh; return UMQ_SUCCESS; } diff --git a/src/urpc/umq/umq_ub/core/private/umq_ub_private.h b/src/urpc/umq/umq_ub/core/private/umq_ub_private.h index c4f757b..1bec06c 100644 --- a/src/urpc/umq/umq_ub/core/private/umq_ub_private.h +++ b/src/urpc/umq/umq_ub/core/private/umq_ub_private.h @@ -228,6 +228,7 @@ typedef struct ub_queue { atomic_uint require_rx_count; volatile uint32_t tx_outstanding; uint32_t create_flag; + uint64_t umq_ctx; urma_target_seg_t **imported_tseg_list; // read-only uint64_t addr_list[UMQ_MAX_ID_NUM]; diff --git a/src/urpc/umq/umq_ub/core/umq_ub_impl.c b/src/urpc/umq/umq_ub/core/umq_ub_impl.c index 99377ac..74b4ea5 100644 --- a/src/urpc/umq/umq_ub/core/umq_ub_impl.c +++ b/src/urpc/umq/umq_ub/core/umq_ub_impl.c @@ -1411,6 +1411,25 @@ int umq_ub_dev_info_get_impl(char *dev_name, umq_trans_mode_t umq_trans_mode, um umq_dev_info->umq_trans_mode = umq_trans_mode; memcpy(umq_dev_info->dev_name, dev_name, strnlen(dev_name, UMQ_DEV_NAME_SIZE)); urma_free_eid_list(eid_info_list); + return UMQ_SUCCESS; +} +int umq_ub_cfg_get_impl(uint64_t umqh_tp, umq_qcfg_get_t *cfg) +{ + if (cfg == NULL) { + UMQ_VLOG_ERR("umq cfg is invalid\n"); + return -UMQ_ERR_EINVAL; + } + ub_queue_t *queue = (ub_queue_t *)(uintptr_t)umqh_tp; + cfg->create_flag = queue->create_flag; + cfg->rx_buf_size = queue->rx_buf_size; + cfg->tx_buf_size = queue->tx_buf_size; + cfg->rx_depth = queue->rx_depth; + cfg->tx_depth = queue->tx_depth; + cfg->umq_ctx = queue->umq_ctx; + cfg->share_rq_umqh = queue->share_rq_umqh; + cfg->trans_mode = queue->umq_trans_mode; + cfg->mode = queue->mode; + cfg->state = queue->state; return UMQ_SUCCESS; } \ No newline at end of file diff --git a/src/urpc/umq/umq_ub/core/umq_ub_impl.h b/src/urpc/umq/umq_ub/core/umq_ub_impl.h index b56d3d2..89c3522 100644 --- a/src/urpc/umq/umq_ub/core/umq_ub_impl.h +++ b/src/urpc/umq/umq_ub/core/umq_ub_impl.h @@ -81,6 +81,7 @@ int umq_ub_user_ctl_impl(uint64_t umqh_tp, umq_user_ctl_in_t *in, umq_user_ctl_o int umq_ub_mempool_state_get_impl(uint64_t umqh_tp, uint32_t mempool_id, umq_mempool_state_t *mempool_state); int umq_ub_mempool_state_refresh_impl(uint64_t umqh_tp, uint32_t mempool_id); int umq_ub_dev_info_get_impl(char *umq_dev_name, umq_trans_mode_t umq_trans_mode, umq_dev_info_t *umq_dev_info); +int umq_ub_cfg_get_impl(uint64_t umqh_tp, umq_qcfg_get_t *cfg); #ifdef __cplusplus } diff --git a/src/urpc/umq/umq_ub/umq_ub_api.c b/src/urpc/umq/umq_ub/umq_ub_api.c index 227d686..c6270aa 100644 --- a/src/urpc/umq/umq_ub/umq_ub_api.c +++ b/src/urpc/umq/umq_ub/umq_ub_api.c @@ -174,6 +174,11 @@ static int umq_tp_ub_dev_info_get(char *dev_name, umq_trans_mode_t umq_trans_mod return umq_ub_dev_info_get_impl(dev_name, umq_trans_mode, umq_dev_info); } +static int umq_tp_ub_cfg_get(uint64_t umqh_tp, umq_qcfg_get_t *cfg) +{ + return umq_ub_cfg_get_impl(umqh_tp, cfg); +} + static umq_ops_t g_umq_ub_ops = { .mode = UMQ_TRANS_MODE_UB, // control plane api @@ -194,6 +199,7 @@ static umq_ops_t g_umq_ub_ops = { .umq_tp_mempool_state_get = umq_tp_ub_mempool_state_get, .umq_tp_mempool_state_refresh = umq_tp_ub_mempool_state_refresh, .umq_tp_dev_info_get = umq_tp_ub_dev_info_get, + .umq_tp_cfg_get = umq_tp_ub_cfg_get, // datapath plane api .umq_tp_buf_alloc = umq_tp_ub_buf_alloc, diff --git a/src/urpc/umq/umq_ub/umq_ub_plus_api.c b/src/urpc/umq/umq_ub/umq_ub_plus_api.c index 45fb058..af19704 100644 --- a/src/urpc/umq/umq_ub/umq_ub_plus_api.c +++ b/src/urpc/umq/umq_ub/umq_ub_plus_api.c @@ -188,6 +188,11 @@ static int umq_tp_ub_plus_dev_info_get(char *dev_name, umq_trans_mode_t umq_tran return umq_ub_dev_info_get_impl(dev_name, umq_trans_mode, umq_dev_info); } +static int umq_tp_ub_plus_cfg_get(uint64_t umqh_tp, umq_qcfg_get_t *cfg) +{ + return umq_ub_cfg_get_impl(umqh_tp, cfg); +} + static umq_ops_t g_umq_ub_plus_ops = { .mode = UMQ_TRANS_MODE_UB_PLUS, // control plane api @@ -208,6 +213,7 @@ static umq_ops_t g_umq_ub_plus_ops = { .umq_tp_mempool_state_get = umq_tp_ub_plus_mempool_state_get, .umq_tp_mempool_state_refresh = umq_tp_ub_plus_mempool_state_refresh, .umq_tp_dev_info_get = umq_tp_ub_plus_dev_info_get, + .umq_tp_cfg_get = umq_tp_ub_plus_cfg_get, // datapath plane api .umq_tp_buf_alloc = umq_tp_ub_plus_buf_alloc, -- Gitee