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