xref: /linux/tools/testing/selftests/kvm/include/s390x/processor.h (revision c34e9ab9a612ee8b18273398ef75c207b01f516d)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * s390x processor specific defines
4  */
5 #ifndef SELFTEST_KVM_PROCESSOR_H
6 #define SELFTEST_KVM_PROCESSOR_H
7 
8 #include <linux/compiler.h>
9 
10 /* Bits in the region/segment table entry */
11 #define REGION_ENTRY_ORIGIN	~0xfffUL /* region/segment table origin	   */
12 #define REGION_ENTRY_PROTECT	0x200	 /* region protection bit	   */
13 #define REGION_ENTRY_NOEXEC	0x100	 /* region no-execute bit	   */
14 #define REGION_ENTRY_OFFSET	0xc0	 /* region table offset		   */
15 #define REGION_ENTRY_INVALID	0x20	 /* invalid region table entry	   */
16 #define REGION_ENTRY_TYPE	0x0c	 /* region/segment table type mask */
17 #define REGION_ENTRY_LENGTH	0x03	 /* region third length		   */
18 
19 /* Bits in the page table entry */
20 #define PAGE_INVALID	0x400		/* HW invalid bit    */
21 #define PAGE_PROTECT	0x200		/* HW read-only bit  */
22 #define PAGE_NOEXEC	0x100		/* HW no-execute bit */
23 
24 /* Page size definitions */
25 #define PAGE_SHIFT 12
26 #define PAGE_SIZE BIT_ULL(PAGE_SHIFT)
27 #define PAGE_MASK (~(PAGE_SIZE - 1))
28 
29 /* Is there a portable way to do this? */
30 static inline void cpu_relax(void)
31 {
32 	barrier();
33 }
34 
35 /* Get the instruction length */
36 static inline int insn_length(unsigned char code)
37 {
38 	return ((((int)code + 64) >> 7) + 1) << 1;
39 }
40 
41 #endif
42