1*4882a593Smuzhiyun /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ 2*4882a593Smuzhiyun #ifndef __BPF_LEGACY__ 3*4882a593Smuzhiyun #define __BPF_LEGACY__ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #define BPF_ANNOTATE_KV_PAIR(name, type_key, type_val) \ 6*4882a593Smuzhiyun struct ____btf_map_##name { \ 7*4882a593Smuzhiyun type_key key; \ 8*4882a593Smuzhiyun type_val value; \ 9*4882a593Smuzhiyun }; \ 10*4882a593Smuzhiyun struct ____btf_map_##name \ 11*4882a593Smuzhiyun __attribute__ ((section(".maps." #name), used)) \ 12*4882a593Smuzhiyun ____btf_map_##name = { } 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /* llvm builtin functions that eBPF C program may use to 15*4882a593Smuzhiyun * emit BPF_LD_ABS and BPF_LD_IND instructions 16*4882a593Smuzhiyun */ 17*4882a593Smuzhiyun unsigned long long load_byte(void *skb, 18*4882a593Smuzhiyun unsigned long long off) asm("llvm.bpf.load.byte"); 19*4882a593Smuzhiyun unsigned long long load_half(void *skb, 20*4882a593Smuzhiyun unsigned long long off) asm("llvm.bpf.load.half"); 21*4882a593Smuzhiyun unsigned long long load_word(void *skb, 22*4882a593Smuzhiyun unsigned long long off) asm("llvm.bpf.load.word"); 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #endif 25*4882a593Smuzhiyun 26