Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
 1/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
 2#ifndef __BPF_HELPERS__
 3#define __BPF_HELPERS__
 4
 5/*
 6 * Note that bpf programs need to include either
 7 * vmlinux.h (auto-generated from BTF) or linux/types.h
 8 * in advance since bpf_helper_defs.h uses such types
 9 * as __u64.
10 */
11#include "bpf_helper_defs.h"
12
13#define __uint(name, val) int (*name)[val]
14#define __type(name, val) typeof(val) *name
15#define __array(name, val) typeof(val) *name[]
16
17/* Helper macro to print out debug messages */
18#define bpf_printk(fmt, ...)				\
19({							\
20	char ____fmt[] = fmt;				\
21	bpf_trace_printk(____fmt, sizeof(____fmt),	\
22			 ##__VA_ARGS__);		\
23})
24
25/*
26 * Helper macro to place programs, maps, license in
27 * different sections in elf_bpf file. Section names
28 * are interpreted by elf_bpf loader
29 */
30#define SEC(NAME) __attribute__((section(NAME), used))
31
32#ifndef __always_inline
33#define __always_inline __attribute__((always_inline))
34#endif
35#ifndef __weak
36#define __weak __attribute__((weak))
37#endif
38
39/*
40 * Helper macro to manipulate data structures
41 */
42#ifndef offsetof
43#define offsetof(TYPE, MEMBER)	((unsigned long)&((TYPE *)0)->MEMBER)
44#endif
45#ifndef container_of
46#define container_of(ptr, type, member)				\
47	({							\
48		void *__mptr = (void *)(ptr);			\
49		((type *)(__mptr - offsetof(type, member)));	\
50	})
51#endif
52
53/*
54 * Helper structure used by eBPF C program
55 * to describe BPF map attributes to libbpf loader
56 */
57struct bpf_map_def {
58	unsigned int type;
59	unsigned int key_size;
60	unsigned int value_size;
61	unsigned int max_entries;
62	unsigned int map_flags;
63};
64
65enum libbpf_pin_type {
66	LIBBPF_PIN_NONE,
67	/* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */
68	LIBBPF_PIN_BY_NAME,
69};
70
71enum libbpf_tristate {
72	TRI_NO = 0,
73	TRI_YES = 1,
74	TRI_MODULE = 2,
75};
76
77#define __kconfig __attribute__((section(".kconfig")))
78#define __ksym __attribute__((section(".ksyms")))
79
80#endif