1/* SPDX-License-Identifier: GPL-2.0 */
2
3#ifndef _BPF_TESTMOD_KFUNC_H
4#define _BPF_TESTMOD_KFUNC_H
5
6#ifndef __KERNEL__
7#include <vmlinux.h>
8#include <bpf/bpf_helpers.h>
9#else
10#define __ksym
11struct prog_test_member1 {
12	int a;
13};
14
15struct prog_test_member {
16	struct prog_test_member1 m;
17	int c;
18};
19
20struct prog_test_ref_kfunc {
21	int a;
22	int b;
23	struct prog_test_member memb;
24	struct prog_test_ref_kfunc *next;
25	refcount_t cnt;
26};
27#endif
28
29struct prog_test_pass1 {
30	int x0;
31	struct {
32		int x1;
33		struct {
34			int x2;
35			struct {
36				int x3;
37			};
38		};
39	};
40};
41
42struct prog_test_pass2 {
43	int len;
44	short arr1[4];
45	struct {
46		char arr2[4];
47		unsigned long arr3[8];
48	} x;
49};
50
51struct prog_test_fail1 {
52	void *p;
53	int x;
54};
55
56struct prog_test_fail2 {
57	int x8;
58	struct prog_test_pass1 x;
59};
60
61struct prog_test_fail3 {
62	int len;
63	char arr1[2];
64	char arr2[];
65};
66
67struct prog_test_ref_kfunc *
68bpf_kfunc_call_test_acquire(unsigned long *scalar_ptr) __ksym;
69void bpf_kfunc_call_test_release(struct prog_test_ref_kfunc *p) __ksym;
70void bpf_kfunc_call_test_ref(struct prog_test_ref_kfunc *p) __ksym;
71
72void bpf_kfunc_call_test_mem_len_pass1(void *mem, int len) __ksym;
73int *bpf_kfunc_call_test_get_rdwr_mem(struct prog_test_ref_kfunc *p, const int rdwr_buf_size) __ksym;
74int *bpf_kfunc_call_test_get_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
75int *bpf_kfunc_call_test_acq_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
76void bpf_kfunc_call_int_mem_release(int *p) __ksym;
77
78/* The bpf_kfunc_call_test_static_unused_arg is defined as static,
79 * but bpf program compilation needs to see it as global symbol.
80 */
81#ifndef __KERNEL__
82u32 bpf_kfunc_call_test_static_unused_arg(u32 arg, u32 unused) __ksym;
83#endif
84
85void bpf_testmod_test_mod_kfunc(int i) __ksym;
86
87__u64 bpf_kfunc_call_test1(struct sock *sk, __u32 a, __u64 b,
88				__u32 c, __u64 d) __ksym;
89int bpf_kfunc_call_test2(struct sock *sk, __u32 a, __u32 b) __ksym;
90struct sock *bpf_kfunc_call_test3(struct sock *sk) __ksym;
91long bpf_kfunc_call_test4(signed char a, short b, int c, long d) __ksym;
92
93void bpf_kfunc_call_test_pass_ctx(struct __sk_buff *skb) __ksym;
94void bpf_kfunc_call_test_pass1(struct prog_test_pass1 *p) __ksym;
95void bpf_kfunc_call_test_pass2(struct prog_test_pass2 *p) __ksym;
96void bpf_kfunc_call_test_mem_len_fail2(__u64 *mem, int len) __ksym;
97
98void bpf_kfunc_call_test_destructive(void) __ksym;
99
100void bpf_kfunc_call_test_offset(struct prog_test_ref_kfunc *p);
101struct prog_test_member *bpf_kfunc_call_memb_acquire(void);
102void bpf_kfunc_call_memb1_release(struct prog_test_member1 *p);
103void bpf_kfunc_call_test_fail1(struct prog_test_fail1 *p);
104void bpf_kfunc_call_test_fail2(struct prog_test_fail2 *p);
105void bpf_kfunc_call_test_fail3(struct prog_test_fail3 *p);
106void bpf_kfunc_call_test_mem_len_fail1(void *mem, int len);
107
108void bpf_kfunc_common_test(void) __ksym;
109#endif /* _BPF_TESTMOD_KFUNC_H */
110