9de94548850f8a575db420eb8c6d9964ae03d9c1
[dpdk.git] / drivers / net / af_xdp / compat.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2020 Intel Corporation.
3  */
4
5 #include <bpf/xsk.h>
6 #include <linux/version.h>
7
8 #if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
9         defined(RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM)
10 #define ETH_AF_XDP_SHARED_UMEM 1
11 #endif
12
13 #ifdef ETH_AF_XDP_SHARED_UMEM
14 static __rte_always_inline int
15 create_shared_socket(struct xsk_socket **xsk_ptr,
16                           const char *ifname,
17                           __u32 queue_id, struct xsk_umem *umem,
18                           struct xsk_ring_cons *rx,
19                           struct xsk_ring_prod *tx,
20                           struct xsk_ring_prod *fill,
21                           struct xsk_ring_cons *comp,
22                           const struct xsk_socket_config *config)
23 {
24         return xsk_socket__create_shared(xsk_ptr, ifname, queue_id, umem, rx,
25                                                 tx, fill, comp, config);
26 }
27 #else
28 static __rte_always_inline int
29 create_shared_socket(struct xsk_socket **xsk_ptr __rte_unused,
30                           const char *ifname __rte_unused,
31                           __u32 queue_id __rte_unused,
32                           struct xsk_umem *umem __rte_unused,
33                           struct xsk_ring_cons *rx __rte_unused,
34                           struct xsk_ring_prod *tx __rte_unused,
35                           struct xsk_ring_prod *fill __rte_unused,
36                           struct xsk_ring_cons *comp __rte_unused,
37                           const struct xsk_socket_config *config __rte_unused)
38 {
39         return -1;
40 }
41 #endif
42
43 #ifdef XDP_USE_NEED_WAKEUP
44 static int
45 rx_syscall_needed(struct xsk_ring_prod *q, uint32_t busy_budget)
46 {
47         return xsk_ring_prod__needs_wakeup(q) | busy_budget;
48 }
49 static int
50 tx_syscall_needed(struct xsk_ring_prod *q)
51 {
52         return xsk_ring_prod__needs_wakeup(q);
53 }
54 #else
55 static int
56 rx_syscall_needed(struct xsk_ring_prod *q __rte_unused, uint32_t busy_budget)
57 {
58         return busy_budget;
59 }
60 static int
61 tx_syscall_needed(struct xsk_ring_prod *q __rte_unused)
62 {
63         return 1;
64 }
65 #endif