xref: /f-stack/dpdk/examples/pipeline/obj.h (revision 2d9fd380)
1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*2d9fd380Sjfb8856606  * Copyright(c) 2020 Intel Corporation
3*2d9fd380Sjfb8856606  */
4*2d9fd380Sjfb8856606 
5*2d9fd380Sjfb8856606 #ifndef _INCLUDE_OBJ_H_
6*2d9fd380Sjfb8856606 #define _INCLUDE_OBJ_H_
7*2d9fd380Sjfb8856606 
8*2d9fd380Sjfb8856606 #include <stdint.h>
9*2d9fd380Sjfb8856606 #include <sys/queue.h>
10*2d9fd380Sjfb8856606 
11*2d9fd380Sjfb8856606 #include <rte_mempool.h>
12*2d9fd380Sjfb8856606 #include <rte_swx_pipeline.h>
13*2d9fd380Sjfb8856606 #include <rte_swx_ctl.h>
14*2d9fd380Sjfb8856606 
15*2d9fd380Sjfb8856606 #ifndef NAME_SIZE
16*2d9fd380Sjfb8856606 #define NAME_SIZE 64
17*2d9fd380Sjfb8856606 #endif
18*2d9fd380Sjfb8856606 
19*2d9fd380Sjfb8856606 /*
20*2d9fd380Sjfb8856606  * obj
21*2d9fd380Sjfb8856606  */
22*2d9fd380Sjfb8856606 struct obj;
23*2d9fd380Sjfb8856606 
24*2d9fd380Sjfb8856606 struct obj *
25*2d9fd380Sjfb8856606 obj_init(void);
26*2d9fd380Sjfb8856606 
27*2d9fd380Sjfb8856606 /*
28*2d9fd380Sjfb8856606  * mempool
29*2d9fd380Sjfb8856606  */
30*2d9fd380Sjfb8856606 struct mempool_params {
31*2d9fd380Sjfb8856606 	uint32_t buffer_size;
32*2d9fd380Sjfb8856606 	uint32_t pool_size;
33*2d9fd380Sjfb8856606 	uint32_t cache_size;
34*2d9fd380Sjfb8856606 	uint32_t cpu_id;
35*2d9fd380Sjfb8856606 };
36*2d9fd380Sjfb8856606 
37*2d9fd380Sjfb8856606 struct mempool {
38*2d9fd380Sjfb8856606 	TAILQ_ENTRY(mempool) node;
39*2d9fd380Sjfb8856606 	char name[NAME_SIZE];
40*2d9fd380Sjfb8856606 	struct rte_mempool *m;
41*2d9fd380Sjfb8856606 	uint32_t buffer_size;
42*2d9fd380Sjfb8856606 };
43*2d9fd380Sjfb8856606 
44*2d9fd380Sjfb8856606 struct mempool *
45*2d9fd380Sjfb8856606 mempool_create(struct obj *obj,
46*2d9fd380Sjfb8856606 	       const char *name,
47*2d9fd380Sjfb8856606 	       struct mempool_params *params);
48*2d9fd380Sjfb8856606 
49*2d9fd380Sjfb8856606 struct mempool *
50*2d9fd380Sjfb8856606 mempool_find(struct obj *obj,
51*2d9fd380Sjfb8856606 	     const char *name);
52*2d9fd380Sjfb8856606 
53*2d9fd380Sjfb8856606 /*
54*2d9fd380Sjfb8856606  * link
55*2d9fd380Sjfb8856606  */
56*2d9fd380Sjfb8856606 #ifndef LINK_RXQ_RSS_MAX
57*2d9fd380Sjfb8856606 #define LINK_RXQ_RSS_MAX                                   16
58*2d9fd380Sjfb8856606 #endif
59*2d9fd380Sjfb8856606 
60*2d9fd380Sjfb8856606 struct link_params_rss {
61*2d9fd380Sjfb8856606 	uint32_t queue_id[LINK_RXQ_RSS_MAX];
62*2d9fd380Sjfb8856606 	uint32_t n_queues;
63*2d9fd380Sjfb8856606 };
64*2d9fd380Sjfb8856606 
65*2d9fd380Sjfb8856606 struct link_params {
66*2d9fd380Sjfb8856606 	const char *dev_name;
67*2d9fd380Sjfb8856606 	uint16_t port_id; /**< Valid only when *dev_name* is NULL. */
68*2d9fd380Sjfb8856606 
69*2d9fd380Sjfb8856606 	struct {
70*2d9fd380Sjfb8856606 		uint32_t n_queues;
71*2d9fd380Sjfb8856606 		uint32_t queue_size;
72*2d9fd380Sjfb8856606 		const char *mempool_name;
73*2d9fd380Sjfb8856606 		struct link_params_rss *rss;
74*2d9fd380Sjfb8856606 	} rx;
75*2d9fd380Sjfb8856606 
76*2d9fd380Sjfb8856606 	struct {
77*2d9fd380Sjfb8856606 		uint32_t n_queues;
78*2d9fd380Sjfb8856606 		uint32_t queue_size;
79*2d9fd380Sjfb8856606 	} tx;
80*2d9fd380Sjfb8856606 
81*2d9fd380Sjfb8856606 	int promiscuous;
82*2d9fd380Sjfb8856606 };
83*2d9fd380Sjfb8856606 
84*2d9fd380Sjfb8856606 struct link {
85*2d9fd380Sjfb8856606 	TAILQ_ENTRY(link) node;
86*2d9fd380Sjfb8856606 	char name[NAME_SIZE];
87*2d9fd380Sjfb8856606 	char dev_name[NAME_SIZE];
88*2d9fd380Sjfb8856606 	uint16_t port_id;
89*2d9fd380Sjfb8856606 	uint32_t n_rxq;
90*2d9fd380Sjfb8856606 	uint32_t n_txq;
91*2d9fd380Sjfb8856606 };
92*2d9fd380Sjfb8856606 
93*2d9fd380Sjfb8856606 struct link *
94*2d9fd380Sjfb8856606 link_create(struct obj *obj,
95*2d9fd380Sjfb8856606 	    const char *name,
96*2d9fd380Sjfb8856606 	    struct link_params *params);
97*2d9fd380Sjfb8856606 
98*2d9fd380Sjfb8856606 int
99*2d9fd380Sjfb8856606 link_is_up(struct obj *obj, const char *name);
100*2d9fd380Sjfb8856606 
101*2d9fd380Sjfb8856606 struct link *
102*2d9fd380Sjfb8856606 link_find(struct obj *obj, const char *name);
103*2d9fd380Sjfb8856606 
104*2d9fd380Sjfb8856606 struct link *
105*2d9fd380Sjfb8856606 link_next(struct obj *obj, struct link *link);
106*2d9fd380Sjfb8856606 
107*2d9fd380Sjfb8856606 /*
108*2d9fd380Sjfb8856606  * pipeline
109*2d9fd380Sjfb8856606  */
110*2d9fd380Sjfb8856606 struct pipeline {
111*2d9fd380Sjfb8856606 	TAILQ_ENTRY(pipeline) node;
112*2d9fd380Sjfb8856606 	char name[NAME_SIZE];
113*2d9fd380Sjfb8856606 
114*2d9fd380Sjfb8856606 	struct rte_swx_pipeline *p;
115*2d9fd380Sjfb8856606 	struct rte_swx_ctl_pipeline *ctl;
116*2d9fd380Sjfb8856606 
117*2d9fd380Sjfb8856606 	uint32_t timer_period_ms;
118*2d9fd380Sjfb8856606 	int enabled;
119*2d9fd380Sjfb8856606 	uint32_t thread_id;
120*2d9fd380Sjfb8856606 	uint32_t cpu_id;
121*2d9fd380Sjfb8856606 };
122*2d9fd380Sjfb8856606 
123*2d9fd380Sjfb8856606 struct pipeline *
124*2d9fd380Sjfb8856606 pipeline_create(struct obj *obj,
125*2d9fd380Sjfb8856606 		const char *name,
126*2d9fd380Sjfb8856606 		int numa_node);
127*2d9fd380Sjfb8856606 
128*2d9fd380Sjfb8856606 struct pipeline *
129*2d9fd380Sjfb8856606 pipeline_find(struct obj *obj, const char *name);
130*2d9fd380Sjfb8856606 
131*2d9fd380Sjfb8856606 #endif /* _INCLUDE_OBJ_H_ */
132