xref: /linux/arch/x86/include/asm/extable_fixup_types.h (revision d3d4233c7cf4fb399bd10a7d0ecb08e448783b75)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_X86_EXTABLE_FIXUP_TYPES_H
3 #define _ASM_X86_EXTABLE_FIXUP_TYPES_H
4 
5 #define EX_DATA_TYPE_MASK		(0x000000FF)
6 #define EX_DATA_REG_MASK		(0x00000F00)
7 #define EX_DATA_FLAG_MASK		(0x0000F000)
8 #define EX_DATA_IMM_MASK		(0xFFFF0000)
9 
10 #define EX_DATA_REG_SHIFT		8
11 #define EX_DATA_FLAG_SHIFT		12
12 #define EX_DATA_IMM_SHIFT		16
13 
14 #define EX_DATA_REG(reg)		((reg) << EX_DATA_REG_SHIFT)
15 #define EX_DATA_FLAG(flag)		((flag) << EX_DATA_FLAG_SHIFT)
16 #define EX_DATA_IMM(imm)		((imm) << EX_DATA_IMM_SHIFT)
17 
18 /* segment regs */
19 #define EX_REG_DS			EX_DATA_REG(8)
20 #define EX_REG_ES			EX_DATA_REG(9)
21 #define EX_REG_FS			EX_DATA_REG(10)
22 #define EX_REG_GS			EX_DATA_REG(11)
23 
24 /* flags */
25 #define EX_FLAG_CLEAR_AX		EX_DATA_FLAG(1)
26 #define EX_FLAG_CLEAR_DX		EX_DATA_FLAG(2)
27 #define EX_FLAG_CLEAR_AX_DX		EX_DATA_FLAG(3)
28 
29 /* types */
30 #define	EX_TYPE_NONE			 0
31 #define	EX_TYPE_DEFAULT			 1
32 #define	EX_TYPE_FAULT			 2
33 #define	EX_TYPE_UACCESS			 3
34 /* unused, was: #define EX_TYPE_COPY	 4 */
35 #define	EX_TYPE_CLEAR_FS		 5
36 #define	EX_TYPE_FPU_RESTORE		 6
37 #define	EX_TYPE_BPF			 7
38 #define	EX_TYPE_WRMSR			 8
39 #define	EX_TYPE_RDMSR			 9
40 #define	EX_TYPE_WRMSR_SAFE		10 /* reg := -EIO */
41 #define	EX_TYPE_RDMSR_SAFE		11 /* reg := -EIO */
42 #define	EX_TYPE_WRMSR_IN_MCE		12
43 #define	EX_TYPE_RDMSR_IN_MCE		13
44 #define	EX_TYPE_DEFAULT_MCE_SAFE	14
45 #define	EX_TYPE_FAULT_MCE_SAFE		15
46 
47 #define	EX_TYPE_POP_REG			16 /* sp += sizeof(long) */
48 #define EX_TYPE_POP_ZERO		(EX_TYPE_POP_REG | EX_DATA_IMM(0))
49 
50 #define	EX_TYPE_IMM_REG			17 /* reg := (long)imm */
51 #define	EX_TYPE_EFAULT_REG		(EX_TYPE_IMM_REG | EX_DATA_IMM(-EFAULT))
52 #define	EX_TYPE_ZERO_REG		(EX_TYPE_IMM_REG | EX_DATA_IMM(0))
53 #define	EX_TYPE_ONE_REG			(EX_TYPE_IMM_REG | EX_DATA_IMM(1))
54 
55 #define	EX_TYPE_FAULT_SGX		18
56 
57 #define	EX_TYPE_UCOPY_LEN		19 /* cx := reg + imm*cx */
58 #define	EX_TYPE_UCOPY_LEN1		(EX_TYPE_UCOPY_LEN | EX_DATA_IMM(1))
59 #define	EX_TYPE_UCOPY_LEN4		(EX_TYPE_UCOPY_LEN | EX_DATA_IMM(4))
60 #define	EX_TYPE_UCOPY_LEN8		(EX_TYPE_UCOPY_LEN | EX_DATA_IMM(8))
61 
62 #define	EX_TYPE_ZEROPAD			20 /* longword load with zeropad on fault */
63 
64 #define	EX_TYPE_ERETU			21
65 
66 #endif
67