The DPCON allocation helpers (rte_dpaa2_alloc_dpcon_dev / rte_dpaa2_free_dpcon_dev) lived in the event driver, but a notification channel is a generic QBMan resource. Move dpaa2_hw_dpcon.c to the fslmc bus and export the helpers as internal symbols so both the event PMD and the net driver's rx-queue interrupt path can draw channels from the same pool. No functional change.
Signed-off-by: Maxime Leroy <[email protected]> --- drivers/bus/fslmc/meson.build | 1 + .../dpaa2 => bus/fslmc/portal}/dpaa2_hw_dpcon.c | 16 +++++++--------- drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 8 ++++++++ drivers/event/dpaa2/dpaa2_eventdev.h | 5 +++-- drivers/event/dpaa2/meson.build | 1 - 5 files changed, 19 insertions(+), 12 deletions(-) rename drivers/{event/dpaa2 => bus/fslmc/portal}/dpaa2_hw_dpcon.c (90%) diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build index ceae1c6c11..50d9e91a37 100644 --- a/drivers/bus/fslmc/meson.build +++ b/drivers/bus/fslmc/meson.build @@ -22,6 +22,7 @@ sources = files( 'mc/mc_sys.c', 'portal/dpaa2_hw_dpbp.c', 'portal/dpaa2_hw_dpci.c', + 'portal/dpaa2_hw_dpcon.c', 'portal/dpaa2_hw_dpio.c', 'portal/dpaa2_hw_dprc.c', 'qbman/qbman_portal.c', diff --git a/drivers/event/dpaa2/dpaa2_hw_dpcon.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c similarity index 90% rename from drivers/event/dpaa2/dpaa2_hw_dpcon.c rename to drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c index ea5b0d4b85..6fd96ec0b9 100644 --- a/drivers/event/dpaa2/dpaa2_hw_dpcon.c +++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c @@ -18,13 +18,12 @@ #include <rte_cycles.h> #include <rte_kvargs.h> #include <dev_driver.h> -#include <ethdev_driver.h> +#include <eal_export.h> #include <bus_fslmc_driver.h> #include <mc/fsl_dpcon.h> #include <portal/dpaa2_hw_pvt.h> -#include "dpaa2_eventdev.h" -#include "dpaa2_eventdev_logs.h" +#include <fslmc_logs.h> TAILQ_HEAD(dpcon_dev_list, dpaa2_dpcon_dev); static struct dpcon_dev_list dpcon_dev_list @@ -55,8 +54,7 @@ rte_dpaa2_create_dpcon_device(int dev_fd __rte_unused, /* Allocate DPAA2 dpcon handle */ dpcon_node = rte_malloc(NULL, sizeof(struct dpaa2_dpcon_dev), 0); if (!dpcon_node) { - DPAA2_EVENTDEV_ERR( - "Memory allocation failed for dpcon device"); + DPAA2_BUS_ERR("Memory allocation failed for dpcon device"); return -1; } @@ -65,8 +63,7 @@ rte_dpaa2_create_dpcon_device(int dev_fd __rte_unused, ret = dpcon_open(&dpcon_node->dpcon, CMD_PRI_LOW, dpcon_id, &dpcon_node->token); if (ret) { - DPAA2_EVENTDEV_ERR("Unable to open dpcon device: err(%d)", - ret); + DPAA2_BUS_ERR("Unable to open dpcon device: err(%d)", ret); rte_free(dpcon_node); return -1; } @@ -75,8 +72,7 @@ rte_dpaa2_create_dpcon_device(int dev_fd __rte_unused, ret = dpcon_get_attributes(&dpcon_node->dpcon, CMD_PRI_LOW, dpcon_node->token, &attr); if (ret != 0) { - DPAA2_EVENTDEV_ERR("dpcon attribute fetch failed: err(%d)", - ret); + DPAA2_BUS_ERR("dpcon attribute fetch failed: err(%d)", ret); rte_free(dpcon_node); return -1; } @@ -92,6 +88,7 @@ rte_dpaa2_create_dpcon_device(int dev_fd __rte_unused, return 0; } +RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_alloc_dpcon_dev) struct dpaa2_dpcon_dev *rte_dpaa2_alloc_dpcon_dev(void) { struct dpaa2_dpcon_dev *dpcon_dev = NULL; @@ -105,6 +102,7 @@ struct dpaa2_dpcon_dev *rte_dpaa2_alloc_dpcon_dev(void) return dpcon_dev; } +RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_free_dpcon_dev) void rte_dpaa2_free_dpcon_dev(struct dpaa2_dpcon_dev *dpcon) { struct dpaa2_dpcon_dev *dpcon_dev = NULL; diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h index e625a5c035..79a2ec41e3 100644 --- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h +++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h @@ -274,6 +274,14 @@ struct dpaa2_dpcon_dev { uint8_t channel_index; }; +/* DPCON channel allocation -- managed by the fslmc bus so both the net + * NAPI/DQRR rx path and the event PMD can grab channels. + */ +__rte_internal +struct dpaa2_dpcon_dev *rte_dpaa2_alloc_dpcon_dev(void); +__rte_internal +void rte_dpaa2_free_dpcon_dev(struct dpaa2_dpcon_dev *dpcon); + /* Refer to Table 7-3 in SEC BG */ #define QBMAN_FLE_WORD4_FMT_SBF 0x0 /* Single buffer frame */ #define QBMAN_FLE_WORD4_FMT_SGE 0x2 /* Scatter gather frame */ diff --git a/drivers/event/dpaa2/dpaa2_eventdev.h b/drivers/event/dpaa2/dpaa2_eventdev.h index bb87bdbab2..f53efce61c 100644 --- a/drivers/event/dpaa2/dpaa2_eventdev.h +++ b/drivers/event/dpaa2/dpaa2_eventdev.h @@ -85,8 +85,9 @@ struct dpaa2_eventdev { uint32_t event_dev_cfg; }; -struct dpaa2_dpcon_dev *rte_dpaa2_alloc_dpcon_dev(void); -void rte_dpaa2_free_dpcon_dev(struct dpaa2_dpcon_dev *dpcon); +/* rte_dpaa2_alloc_dpcon_dev()/rte_dpaa2_free_dpcon_dev() now live in the fslmc + * bus (portal/dpaa2_hw_pvt.h), which this header's includers already pull in. + */ int test_eventdev_dpaa2(void); diff --git a/drivers/event/dpaa2/meson.build b/drivers/event/dpaa2/meson.build index dd5063af43..62b8507652 100644 --- a/drivers/event/dpaa2/meson.build +++ b/drivers/event/dpaa2/meson.build @@ -7,7 +7,6 @@ if not is_linux endif deps += ['bus_vdev', 'net_dpaa2', 'crypto_dpaa2_sec'] sources = files( - 'dpaa2_hw_dpcon.c', 'dpaa2_eventdev.c', 'dpaa2_eventdev_selftest.c', ) -- 2.43.0

