^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * BPF Jit compiler defines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright IBM Corp. 2012,2015
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Michael Holzheu <holzheu@linux.vnet.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #ifndef __ARCH_S390_NET_BPF_JIT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define __ARCH_S390_NET_BPF_JIT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #ifndef __ASSEMBLY__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/filter.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #endif /* __ASSEMBLY__ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * Stackframe layout (packed stack):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * ^ high
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * +---------------+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * | old backchain | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * +---------------+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * | r15 - r6 | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * +---------------+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * | 4 byte align | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * | tail_call_cnt | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * BFP -> +===============+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * | | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * | BPF stack | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * | | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * R15+160 -> +---------------+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * | new backchain | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * R15+152 -> +---------------+ |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * | + 152 byte SA | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * R15 -> +---------------+ + low
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * We get 160 bytes stack space from calling function, but only use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) * 12 * 8 byte for old backchain, r15..r6, and tail_call_cnt.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * The stack size used by the BPF program ("BPF stack" above) is passed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) * via "aux->stack_depth".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define STK_SPACE_ADD (160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define STK_160_UNUSED (160 - 12 * 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define STK_OFF (STK_SPACE_ADD - STK_160_UNUSED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define STK_OFF_R6 (160 - 11 * 8) /* Offset of r6 on stack */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define STK_OFF_TCCNT (160 - 12 * 8) /* Offset of tail_call_cnt on stack */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #endif /* __ARCH_S390_NET_BPF_JIT_H */