a5c1c2c4056ad87d289569ffdf5537f0675c5440
[dpdk.git] / examples / l2fwd-event / l2fwd_event.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2019 Marvell International Ltd.
3  */
4
5 #include <stdbool.h>
6 #include <getopt.h>
7
8 #include <rte_atomic.h>
9 #include <rte_cycles.h>
10 #include <rte_ethdev.h>
11 #include <rte_eventdev.h>
12 #include <rte_event_eth_rx_adapter.h>
13 #include <rte_event_eth_tx_adapter.h>
14 #include <rte_lcore.h>
15 #include <rte_malloc.h>
16 #include <rte_spinlock.h>
17
18 #include "l2fwd_event.h"
19
20 static void
21 l2fwd_event_capability_setup(struct l2fwd_event_resources *evt_rsrc)
22 {
23         uint32_t caps = 0;
24         uint16_t i;
25         int ret;
26
27         RTE_ETH_FOREACH_DEV(i) {
28                 ret = rte_event_eth_tx_adapter_caps_get(0, i, &caps);
29                 if (ret)
30                         rte_panic("Invalid capability for Tx adptr port %d\n",
31                                   i);
32
33                 evt_rsrc->tx_mode_q |= !(caps &
34                                    RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT);
35         }
36
37         if (evt_rsrc->tx_mode_q)
38                 l2fwd_event_set_generic_ops(&evt_rsrc->ops);
39         else
40                 l2fwd_event_set_internal_port_ops(&evt_rsrc->ops);
41 }
42
43 void
44 l2fwd_event_resource_setup(struct l2fwd_resources *rsrc)
45 {
46         struct l2fwd_event_resources *evt_rsrc;
47
48         if (!rte_event_dev_count())
49                 rte_panic("No Eventdev found\n");
50
51         evt_rsrc = rte_zmalloc("l2fwd_event",
52                                  sizeof(struct l2fwd_event_resources), 0);
53         if (evt_rsrc == NULL)
54                 rte_panic("Failed to allocate memory\n");
55
56         rsrc->evt_rsrc = evt_rsrc;
57
58         /* Setup eventdev capability callbacks */
59         l2fwd_event_capability_setup(evt_rsrc);
60
61         /* Event device configuration */
62         evt_rsrc->ops.event_device_setup(rsrc);
63 }