xref: /dpdk/lib/bpf/bpf_impl.h (revision 5d52418fa4b9a7f28eaedc1d88ec5cf330381c0e)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Intel Corporation
3  */
4 
5 #ifndef BPF_IMPL_H
6 #define BPF_IMPL_H
7 
8 #include <rte_bpf.h>
9 #include <sys/mman.h>
10 
11 #define MAX_BPF_STACK_SIZE	0x200
12 
13 struct rte_bpf {
14 	struct rte_bpf_prm prm;
15 	struct rte_bpf_jit jit;
16 	size_t sz;
17 	uint32_t stack_sz;
18 };
19 
20 /*
21  * Use '__rte' prefix for non-static internal functions
22  * to avoid potential name conflict with other libraries.
23  */
24 int __rte_bpf_validate(struct rte_bpf *bpf);
25 int __rte_bpf_jit(struct rte_bpf *bpf);
26 int __rte_bpf_jit_x86(struct rte_bpf *bpf);
27 int __rte_bpf_jit_arm64(struct rte_bpf *bpf);
28 
29 extern int rte_bpf_logtype;
30 
31 #define	RTE_BPF_LOG(lvl, fmt, args...) \
32 	rte_log(RTE_LOG_## lvl, rte_bpf_logtype, fmt, ##args)
33 
34 static inline size_t
35 bpf_size(uint32_t bpf_op_sz)
36 {
37 	if (bpf_op_sz == BPF_B)
38 		return sizeof(uint8_t);
39 	else if (bpf_op_sz == BPF_H)
40 		return sizeof(uint16_t);
41 	else if (bpf_op_sz == BPF_W)
42 		return sizeof(uint32_t);
43 	else if (bpf_op_sz == EBPF_DW)
44 		return sizeof(uint64_t);
45 	return 0;
46 }
47 
48 #endif /* BPF_IMPL_H */
49