b1ae970d4b31b02052e2478c00e6e42e8628f0e1
[dpdk.git] / examples / l3fwd / l3fwd_event.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2019 Marvell International Ltd.
3  */
4
5 #ifndef __L3FWD_EVENTDEV_H__
6 #define __L3FWD_EVENTDEV_H__
7
8 #include <rte_common.h>
9 #include <rte_eventdev.h>
10 #include <rte_event_eth_rx_adapter.h>
11 #include <rte_event_eth_tx_adapter.h>
12 #include <rte_service.h>
13 #include <rte_spinlock.h>
14
15 #include "l3fwd.h"
16
17 typedef uint32_t (*event_device_setup_cb)(void);
18 typedef void (*event_queue_setup_cb)(uint32_t event_queue_cfg);
19 typedef void (*event_port_setup_cb)(void);
20 typedef void (*adapter_setup_cb)(void);
21 typedef int (*event_loop_cb)(void *);
22
23 struct l3fwd_event_queues {
24         uint8_t *event_q_id;
25         uint8_t nb_queues;
26 };
27
28 struct l3fwd_event_ports {
29         uint8_t *event_p_id;
30         uint8_t nb_ports;
31         rte_spinlock_t lock;
32 };
33
34 struct l3fwd_event_rx_adptr {
35         uint32_t service_id;
36         uint8_t nb_rx_adptr;
37         uint8_t *rx_adptr;
38 };
39
40 struct l3fwd_event_tx_adptr {
41         uint32_t service_id;
42         uint8_t nb_tx_adptr;
43         uint8_t *tx_adptr;
44 };
45
46 struct l3fwd_event_setup_ops {
47         event_device_setup_cb event_device_setup;
48         event_queue_setup_cb event_queue_setup;
49         event_port_setup_cb event_port_setup;
50         adapter_setup_cb adapter_setup;
51         event_loop_cb lpm_event_loop;
52         event_loop_cb em_event_loop;
53 };
54
55 struct l3fwd_event_resources {
56         struct rte_event_port_conf def_p_conf;
57         struct l3fwd_event_rx_adptr rx_adptr;
58         struct l3fwd_event_tx_adptr tx_adptr;
59         uint8_t disable_implicit_release;
60         struct l3fwd_event_setup_ops ops;
61         struct rte_mempool * (*pkt_pool)[NB_SOCKETS];
62         struct l3fwd_event_queues evq;
63         struct l3fwd_event_ports evp;
64         uint32_t port_mask;
65         uint8_t per_port_pool;
66         uint8_t event_d_id;
67         uint8_t sched_type;
68         uint8_t tx_mode_q;
69         uint8_t deq_depth;
70         uint8_t has_burst;
71         uint8_t enabled;
72         uint8_t eth_rx_queues;
73 };
74
75 struct l3fwd_event_resources *l3fwd_get_eventdev_rsrc(void);
76 void l3fwd_event_resource_setup(struct rte_eth_conf *port_conf);
77 int l3fwd_get_free_event_port(struct l3fwd_event_resources *eventdev_rsrc);
78 void l3fwd_event_set_generic_ops(struct l3fwd_event_setup_ops *ops);
79 void l3fwd_event_set_internal_port_ops(struct l3fwd_event_setup_ops *ops);
80
81 #endif /* __L3FWD_EVENTDEV_H__ */