Data Accelerator Offload
Loading...
Searching...
No Matches
dao_portq_group_worker.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: Marvell-MIT
2 * Copyright (c) 2023 Marvell.
3 */
4
5#ifndef _DAO_PORT_QUEUE_GROUP_WORKER_H_
6#define _DAO_PORT_QUEUE_GROUP_WORKER_H_
7
23#include <errno.h>
24#include <stdint.h>
25#include <stdlib.h>
26#include <string.h>
27#include <stdio.h>
28#include <stddef.h>
29#include <signal.h>
30#include <assert.h>
31
32#include <rte_common.h>
33#include <rte_compat.h>
34#include <rte_debug.h>
35
36#include <dao_portq_group.h>
37#include <dao_log.h>
38#include <dao_util.h>
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44#define DAO_PORTQ_GROUP_NAMELEN 64
45#define DAO_PORTQ_INVALID_VALUE ((uint32_t)(~1))
48typedef struct dao_portq_list {
49 RTE_MARKER cacheline0 __rte_cache_aligned;
50
51 uint32_t num_portqs;
54 uint32_t max_portqs_supported;
55
58} dao_portq_list_t; /* do not cache align */
59
90
112
118extern dao_portq_group_main_t *__portq_group_main;
119
125static inline struct dao_portq_group *
127{
128 dao_portq_group_main_t *pm = __portq_group_main;
129
130 RTE_VERIFY(epg < pm->max_portq_groups_supported);
131
132 return(pm->portq_groups[epg]);
133}
134
146static inline dao_portq_list_t *
147__dao_portq_group_list_get(struct dao_portq_group *epg, uint32_t core_id)
148{
149 if (unlikely(!epg))
150 assert(0);
151
152 RTE_VERIFY(core_id < epg->num_cores);
153
154 return ((dao_portq_list_t *)((uint8_t *)epg->core_portq_list +
155 (core_id * epg->per_core_portq_list_size)));
156}
157
170static inline dao_portq_list_t *
172{
173 return(__dao_portq_group_list_get(dao_portq_group_get(epg), core_id));
174}
175
194static inline int32_t
196 int32_t index)
197{
198 dao_portq_list_t *epl = NULL;
199 int32_t iter = index + 1;
200
201 epl = dao_portq_group_list_get(epg, core_id);
202
203 if (unlikely(iter < 0))
204 return -1;
205
206 while (epl->max_portqs_supported > (uint32_t)iter) {
207 if (epl->portqs[iter].port_id == DAO_PORTQ_INVALID_VALUE) {
208 iter++;
209 continue;
210 }
211 break;
212 }
213 if (likely((uint32_t)iter < epl->max_portqs_supported)) {
214 *portq = epl->portqs + iter;
215 return iter;
216 }
217
218 return -1;
219}
220
237#define DAO_PORTQ_GROUP_FOREACH_CORE(epg, core_id, portq, i) \
238 for (i = dao_portq_group_portq_get_next(epg, core_id, &portq, -1); \
239 (i > -1) && (portq->port_id != DAO_PORTQ_INVALID_VALUE); \
240 i = dao_portq_group_portq_get_next(epg, core_id, &portq, i))
241
242#ifdef __cplusplus
243}
244#endif
245
246#endif
uint32_t dao_portq_group_t
static struct dao_portq_group * dao_portq_group_get(dao_portq_group_t epg)
static int32_t dao_portq_group_portq_get_next(dao_portq_group_t epg, uint32_t core_id, dao_portq_t **portq, int32_t index)
static dao_portq_list_t * __dao_portq_group_list_get(struct dao_portq_group *epg, uint32_t core_id)
struct dao_portq_list dao_portq_list_t
#define DAO_PORTQ_INVALID_VALUE
static dao_portq_list_t * dao_portq_group_list_get(dao_portq_group_t epg, uint32_t core_id)
struct dao_portq_group_main dao_portq_group_main_t
#define DAO_PORTQ_GROUP_NAMELEN
struct dao_portq_group * portq_groups[]
dao_portq_list_t core_portq_list[]
char portq_group_name[DAO_PORTQ_GROUP_NAMELEN]
uint32_t port_id