[dpdk-dev,v2,1/4] drivers: add queue parameter in event processing callback
Checks
Commit Message
For event dequeues for ethernet queues, a dpaa2_queue structure is
required to get the configuration for that ethernet queue. Based on
this configuration the rte_event is to be filled at the ingress side.
Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
---
drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 4 ++++
drivers/event/dpaa2/dpaa2_eventdev.c | 8 +++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
Comments
On 10/12/2017 10:48 PM, Nipun Gupta wrote:
> For event dequeues for ethernet queues, a dpaa2_queue structure is
> required to get the configuration for that ethernet queue. Based on
> this configuration the rte_event is to be filled at the ingress side.
>
> Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
> ---
> drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 4 ++++
> drivers/event/dpaa2/dpaa2_eventdev.c | 8 +++++++-
> 2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
> index 8f39cfb..e14a9a9 100644
> --- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
> +++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
> @@ -125,9 +125,12 @@ struct queue_storage_info_t {
> int toggle;
> };
>
> +struct dpaa2_queue;
> +
> typedef void (dpaa2_queue_cb_dqrr_t)(struct qbman_swp *swp,
> const struct qbman_fd *fd,
> const struct qbman_result *dq,
> + struct dpaa2_queue *rxq,
> struct rte_event *ev);
>
> struct dpaa2_queue {
> @@ -144,6 +147,7 @@ struct dpaa2_queue {
> struct queue_storage_info_t *q_storage;
> struct qbman_result *cscn;
> };
> + struct rte_event ev;
> dpaa2_queue_cb_dqrr_t *cb;
> };
>
> diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c
> index 81286a8..8a6a3e3 100644
> --- a/drivers/event/dpaa2/dpaa2_eventdev.c
> +++ b/drivers/event/dpaa2/dpaa2_eventdev.c
> @@ -189,10 +189,14 @@ static void dpaa2_eventdev_dequeue_wait(uint64_t timeout_ticks)
> static void dpaa2_eventdev_process_parallel(struct qbman_swp *swp,
> const struct qbman_fd *fd,
> const struct qbman_result *dq,
> + struct dpaa2_queue *rxq,
> struct rte_event *ev)
> {
> struct rte_event *ev_temp =
> (struct rte_event *)DPAA2_GET_FD_ADDR(fd);
> +
> + RTE_SET_USED(rxq);
> +
> rte_memcpy(ev, ev_temp, sizeof(struct rte_event));
> rte_free(ev_temp);
>
> @@ -202,6 +206,7 @@ static void dpaa2_eventdev_process_parallel(struct qbman_swp *swp,
> static void dpaa2_eventdev_process_atomic(struct qbman_swp *swp,
> const struct qbman_fd *fd,
> const struct qbman_result *dq,
> + struct dpaa2_queue *rxq,
> struct rte_event *ev)
> {
> struct rte_event *ev_temp =
> @@ -209,6 +214,7 @@ static void dpaa2_eventdev_process_atomic(struct qbman_swp *swp,
> uint8_t dqrr_index = qbman_get_dqrr_idx(dq);
>
> RTE_SET_USED(swp);
> + RTE_SET_USED(rxq);
>
> rte_memcpy(ev, ev_temp, sizeof(struct rte_event));
> rte_free(ev_temp);
> @@ -265,7 +271,7 @@ static void dpaa2_eventdev_process_atomic(struct qbman_swp *swp,
>
> rxq = (struct dpaa2_queue *)qbman_result_DQ_fqd_ctx(dq);
> if (rxq) {
> - rxq->cb(swp, fd, dq, &ev[num_pkts]);
> + rxq->cb(swp, fd, dq, rxq, &ev[num_pkts]);
> } else {
> qbman_swp_dqrr_consume(swp, dq);
> PMD_DRV_LOG(ERR, "Null Return VQ received\n");
>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
@@ -125,9 +125,12 @@ struct queue_storage_info_t {
int toggle;
};
+struct dpaa2_queue;
+
typedef void (dpaa2_queue_cb_dqrr_t)(struct qbman_swp *swp,
const struct qbman_fd *fd,
const struct qbman_result *dq,
+ struct dpaa2_queue *rxq,
struct rte_event *ev);
struct dpaa2_queue {
@@ -144,6 +147,7 @@ struct dpaa2_queue {
struct queue_storage_info_t *q_storage;
struct qbman_result *cscn;
};
+ struct rte_event ev;
dpaa2_queue_cb_dqrr_t *cb;
};
@@ -189,10 +189,14 @@ static void dpaa2_eventdev_dequeue_wait(uint64_t timeout_ticks)
static void dpaa2_eventdev_process_parallel(struct qbman_swp *swp,
const struct qbman_fd *fd,
const struct qbman_result *dq,
+ struct dpaa2_queue *rxq,
struct rte_event *ev)
{
struct rte_event *ev_temp =
(struct rte_event *)DPAA2_GET_FD_ADDR(fd);
+
+ RTE_SET_USED(rxq);
+
rte_memcpy(ev, ev_temp, sizeof(struct rte_event));
rte_free(ev_temp);
@@ -202,6 +206,7 @@ static void dpaa2_eventdev_process_parallel(struct qbman_swp *swp,
static void dpaa2_eventdev_process_atomic(struct qbman_swp *swp,
const struct qbman_fd *fd,
const struct qbman_result *dq,
+ struct dpaa2_queue *rxq,
struct rte_event *ev)
{
struct rte_event *ev_temp =
@@ -209,6 +214,7 @@ static void dpaa2_eventdev_process_atomic(struct qbman_swp *swp,
uint8_t dqrr_index = qbman_get_dqrr_idx(dq);
RTE_SET_USED(swp);
+ RTE_SET_USED(rxq);
rte_memcpy(ev, ev_temp, sizeof(struct rte_event));
rte_free(ev_temp);
@@ -265,7 +271,7 @@ static void dpaa2_eventdev_process_atomic(struct qbman_swp *swp,
rxq = (struct dpaa2_queue *)qbman_result_DQ_fqd_ctx(dq);
if (rxq) {
- rxq->cb(swp, fd, dq, &ev[num_pkts]);
+ rxq->cb(swp, fd, dq, rxq, &ev[num_pkts]);
} else {
qbman_swp_dqrr_consume(swp, dq);
PMD_DRV_LOG(ERR, "Null Return VQ received\n");