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