/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ #ifndef _ASMX86_DEBUGREG_H_ #define _ASMX86_DEBUGREG_H_ #include /* * DR6_ACTIVE_LOW combines fixed-1 and active-low bits (e.g. RTM), and is also * the init/reset value for DR6. */ #define DR6_ACTIVE_LOW 0xffff0ff0 #define DR6_VOLATILE 0x0001e80f #define DR6_FIXED_1 (DR6_ACTIVE_LOW & ~DR6_VOLATILE) #define DR6_TRAP0 BIT(0) /* DR0 matched */ #define DR6_TRAP1 BIT(1) /* DR1 matched */ #define DR6_TRAP2 BIT(2) /* DR2 matched */ #define DR6_TRAP3 BIT(3) /* DR3 matched */ #define DR6_TRAP_BITS (DR6_TRAP0|DR6_TRAP1|DR6_TRAP2|DR6_TRAP3) #define DR6_BUS_LOCK BIT(11) /* Bus lock 0x800 */ #define DR6_BD BIT(13) /* General Detect 0x2000 */ #define DR6_BS BIT(14) /* Single-Step 0x4000 */ #define DR6_BT BIT(15) /* Task Switch 0x8000 */ #define DR6_RTM BIT(16) /* RTM / TSX 0x10000 */ #define DR7_FIXED_1 0x00000400 /* init/reset value, too */ #define DR7_VOLATILE 0xffff2bff #define DR7_BP_EN_MASK 0x000000ff #define DR7_LE BIT(8) /* Local Exact 0x100 */ #define DR7_GE BIT(9) /* Global Exact 0x200 */ #define DR7_RTM BIT(11) /* RTM / TSX 0x800 */ #define DR7_GD BIT(13) /* General Detect 0x2000 */ /* * Enable bits for DR0-D3. Bits 0, 2, 4, and 6 are local enable bits (cleared * by the CPU on task switch), bits 1, 3, 5, and 7 are global enable bits * (never cleared by the CPU). */ #define DR7_LOCAL_ENABLE_DRx(x) (BIT(0) << (x)) #define DR7_GLOBAL_ENABLE_DRx(x) (BIT(1) << (x)) #define DR7_ENABLE_DRx(x) \ (DR7_LOCAL_ENABLE_DRx(x) | DR7_GLOBAL_ENABLE_DRx(x)) #define DR7_GLOBAL_ENABLE_DR0 DR7_GLOBAL_ENABLE_DRx(0) #define DR7_GLOBAL_ENABLE_DR1 DR7_GLOBAL_ENABLE_DRx(1) #define DR7_GLOBAL_ENABLE_DR2 DR7_GLOBAL_ENABLE_DRx(2) #define DR7_GLOBAL_ENABLE_DR3 DR7_GLOBAL_ENABLE_DRx(3) /* Condition/type of the breakpoint for DR0-3. */ #define DR7_RW_TYPE_DRx(x, rw) ((rw) << (((x) * 4) + 16)) #define DR7_EXECUTE_DRx(x) DR7_RW_TYPE_DRx(x, 0) #define DR7_WRITE_DRx(x) DR7_RW_TYPE_DRx(x, 1) #define DR7_PORT_IO_DRx(x) DR7_RW_TYPE_DRx(x, 2) #define DR7_DATA_IO_DRx(x) DR7_RW_TYPE_DRx(x, 3) /* Read or Write */ /* Length of the breakpoint for DR0-3. */ #define DR7_LEN_DRx(x, enc) ((enc) << (((x) * 4) + 18)) #define DR7_LEN_1_DRx(x) DR7_LEN_DRx(x, 0) #define DR7_LEN_2_DRx(x) DR7_LEN_DRx(x, 1) #define DR7_LEN_4_DRx(x) DR7_LEN_DRx(x, 3) #define DR7_LEN_8_DRx(x) DR7_LEN_DRx(x, 2) /* Out of sequence, undefined for 32-bit CPUs. */ #endif /* _ASMX86_DEBUGREG_H_ */