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