162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _BPF_JIT_H 362306a36Sopenharmony_ci#define _BPF_JIT_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci/* Conventions: 662306a36Sopenharmony_ci * %g1 : temporary 762306a36Sopenharmony_ci * %g2 : Secondary temporary used by SKB data helper stubs. 862306a36Sopenharmony_ci * %g3 : packet offset passed into SKB data helper stubs. 962306a36Sopenharmony_ci * %o0 : pointer to skb (first argument given to JIT function) 1062306a36Sopenharmony_ci * %o1 : BPF A accumulator 1162306a36Sopenharmony_ci * %o2 : BPF X accumulator 1262306a36Sopenharmony_ci * %o3 : Holds saved %o7 so we can call helper functions without needing 1362306a36Sopenharmony_ci * to allocate a register window. 1462306a36Sopenharmony_ci * %o4 : skb->len - skb->data_len 1562306a36Sopenharmony_ci * %o5 : skb->data 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#ifndef __ASSEMBLER__ 1962306a36Sopenharmony_ci#define G0 0x00 2062306a36Sopenharmony_ci#define G1 0x01 2162306a36Sopenharmony_ci#define G3 0x03 2262306a36Sopenharmony_ci#define G6 0x06 2362306a36Sopenharmony_ci#define O0 0x08 2462306a36Sopenharmony_ci#define O1 0x09 2562306a36Sopenharmony_ci#define O2 0x0a 2662306a36Sopenharmony_ci#define O3 0x0b 2762306a36Sopenharmony_ci#define O4 0x0c 2862306a36Sopenharmony_ci#define O5 0x0d 2962306a36Sopenharmony_ci#define SP 0x0e 3062306a36Sopenharmony_ci#define O7 0x0f 3162306a36Sopenharmony_ci#define FP 0x1e 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci#define r_SKB O0 3462306a36Sopenharmony_ci#define r_A O1 3562306a36Sopenharmony_ci#define r_X O2 3662306a36Sopenharmony_ci#define r_saved_O7 O3 3762306a36Sopenharmony_ci#define r_HEADLEN O4 3862306a36Sopenharmony_ci#define r_SKB_DATA O5 3962306a36Sopenharmony_ci#define r_TMP G1 4062306a36Sopenharmony_ci#define r_TMP2 G2 4162306a36Sopenharmony_ci#define r_OFF G3 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci/* assembly code in arch/sparc/net/bpf_jit_asm_32.S */ 4462306a36Sopenharmony_ciextern u32 bpf_jit_load_word[]; 4562306a36Sopenharmony_ciextern u32 bpf_jit_load_half[]; 4662306a36Sopenharmony_ciextern u32 bpf_jit_load_byte[]; 4762306a36Sopenharmony_ciextern u32 bpf_jit_load_byte_msh[]; 4862306a36Sopenharmony_ciextern u32 bpf_jit_load_word_positive_offset[]; 4962306a36Sopenharmony_ciextern u32 bpf_jit_load_half_positive_offset[]; 5062306a36Sopenharmony_ciextern u32 bpf_jit_load_byte_positive_offset[]; 5162306a36Sopenharmony_ciextern u32 bpf_jit_load_byte_msh_positive_offset[]; 5262306a36Sopenharmony_ciextern u32 bpf_jit_load_word_negative_offset[]; 5362306a36Sopenharmony_ciextern u32 bpf_jit_load_half_negative_offset[]; 5462306a36Sopenharmony_ciextern u32 bpf_jit_load_byte_negative_offset[]; 5562306a36Sopenharmony_ciextern u32 bpf_jit_load_byte_msh_negative_offset[]; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#else 5862306a36Sopenharmony_ci#define r_SKB %o0 5962306a36Sopenharmony_ci#define r_A %o1 6062306a36Sopenharmony_ci#define r_X %o2 6162306a36Sopenharmony_ci#define r_saved_O7 %o3 6262306a36Sopenharmony_ci#define r_HEADLEN %o4 6362306a36Sopenharmony_ci#define r_SKB_DATA %o5 6462306a36Sopenharmony_ci#define r_TMP %g1 6562306a36Sopenharmony_ci#define r_TMP2 %g2 6662306a36Sopenharmony_ci#define r_OFF %g3 6762306a36Sopenharmony_ci#endif 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci#endif /* _BPF_JIT_H */ 70