Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef _UAPI_ASM_X86_PROCESSOR_FLAGS_H
0003 #define _UAPI_ASM_X86_PROCESSOR_FLAGS_H
0004 /* Various flags defined: can be included from assembler. */
0005 
0006 #include <linux/const.h>
0007 
0008 /*
0009  * EFLAGS bits
0010  */
0011 #define X86_EFLAGS_CF_BIT   0 /* Carry Flag */
0012 #define X86_EFLAGS_CF       _BITUL(X86_EFLAGS_CF_BIT)
0013 #define X86_EFLAGS_FIXED_BIT    1 /* Bit 1 - always on */
0014 #define X86_EFLAGS_FIXED    _BITUL(X86_EFLAGS_FIXED_BIT)
0015 #define X86_EFLAGS_PF_BIT   2 /* Parity Flag */
0016 #define X86_EFLAGS_PF       _BITUL(X86_EFLAGS_PF_BIT)
0017 #define X86_EFLAGS_AF_BIT   4 /* Auxiliary carry Flag */
0018 #define X86_EFLAGS_AF       _BITUL(X86_EFLAGS_AF_BIT)
0019 #define X86_EFLAGS_ZF_BIT   6 /* Zero Flag */
0020 #define X86_EFLAGS_ZF       _BITUL(X86_EFLAGS_ZF_BIT)
0021 #define X86_EFLAGS_SF_BIT   7 /* Sign Flag */
0022 #define X86_EFLAGS_SF       _BITUL(X86_EFLAGS_SF_BIT)
0023 #define X86_EFLAGS_TF_BIT   8 /* Trap Flag */
0024 #define X86_EFLAGS_TF       _BITUL(X86_EFLAGS_TF_BIT)
0025 #define X86_EFLAGS_IF_BIT   9 /* Interrupt Flag */
0026 #define X86_EFLAGS_IF       _BITUL(X86_EFLAGS_IF_BIT)
0027 #define X86_EFLAGS_DF_BIT   10 /* Direction Flag */
0028 #define X86_EFLAGS_DF       _BITUL(X86_EFLAGS_DF_BIT)
0029 #define X86_EFLAGS_OF_BIT   11 /* Overflow Flag */
0030 #define X86_EFLAGS_OF       _BITUL(X86_EFLAGS_OF_BIT)
0031 #define X86_EFLAGS_IOPL_BIT 12 /* I/O Privilege Level (2 bits) */
0032 #define X86_EFLAGS_IOPL     (_AC(3,UL) << X86_EFLAGS_IOPL_BIT)
0033 #define X86_EFLAGS_NT_BIT   14 /* Nested Task */
0034 #define X86_EFLAGS_NT       _BITUL(X86_EFLAGS_NT_BIT)
0035 #define X86_EFLAGS_RF_BIT   16 /* Resume Flag */
0036 #define X86_EFLAGS_RF       _BITUL(X86_EFLAGS_RF_BIT)
0037 #define X86_EFLAGS_VM_BIT   17 /* Virtual Mode */
0038 #define X86_EFLAGS_VM       _BITUL(X86_EFLAGS_VM_BIT)
0039 #define X86_EFLAGS_AC_BIT   18 /* Alignment Check/Access Control */
0040 #define X86_EFLAGS_AC       _BITUL(X86_EFLAGS_AC_BIT)
0041 #define X86_EFLAGS_VIF_BIT  19 /* Virtual Interrupt Flag */
0042 #define X86_EFLAGS_VIF      _BITUL(X86_EFLAGS_VIF_BIT)
0043 #define X86_EFLAGS_VIP_BIT  20 /* Virtual Interrupt Pending */
0044 #define X86_EFLAGS_VIP      _BITUL(X86_EFLAGS_VIP_BIT)
0045 #define X86_EFLAGS_ID_BIT   21 /* CPUID detection */
0046 #define X86_EFLAGS_ID       _BITUL(X86_EFLAGS_ID_BIT)
0047 
0048 /*
0049  * Basic CPU control in CR0
0050  */
0051 #define X86_CR0_PE_BIT      0 /* Protection Enable */
0052 #define X86_CR0_PE      _BITUL(X86_CR0_PE_BIT)
0053 #define X86_CR0_MP_BIT      1 /* Monitor Coprocessor */
0054 #define X86_CR0_MP      _BITUL(X86_CR0_MP_BIT)
0055 #define X86_CR0_EM_BIT      2 /* Emulation */
0056 #define X86_CR0_EM      _BITUL(X86_CR0_EM_BIT)
0057 #define X86_CR0_TS_BIT      3 /* Task Switched */
0058 #define X86_CR0_TS      _BITUL(X86_CR0_TS_BIT)
0059 #define X86_CR0_ET_BIT      4 /* Extension Type */
0060 #define X86_CR0_ET      _BITUL(X86_CR0_ET_BIT)
0061 #define X86_CR0_NE_BIT      5 /* Numeric Error */
0062 #define X86_CR0_NE      _BITUL(X86_CR0_NE_BIT)
0063 #define X86_CR0_WP_BIT      16 /* Write Protect */
0064 #define X86_CR0_WP      _BITUL(X86_CR0_WP_BIT)
0065 #define X86_CR0_AM_BIT      18 /* Alignment Mask */
0066 #define X86_CR0_AM      _BITUL(X86_CR0_AM_BIT)
0067 #define X86_CR0_NW_BIT      29 /* Not Write-through */
0068 #define X86_CR0_NW      _BITUL(X86_CR0_NW_BIT)
0069 #define X86_CR0_CD_BIT      30 /* Cache Disable */
0070 #define X86_CR0_CD      _BITUL(X86_CR0_CD_BIT)
0071 #define X86_CR0_PG_BIT      31 /* Paging */
0072 #define X86_CR0_PG      _BITUL(X86_CR0_PG_BIT)
0073 
0074 /*
0075  * Paging options in CR3
0076  */
0077 #define X86_CR3_PWT_BIT     3 /* Page Write Through */
0078 #define X86_CR3_PWT     _BITUL(X86_CR3_PWT_BIT)
0079 #define X86_CR3_PCD_BIT     4 /* Page Cache Disable */
0080 #define X86_CR3_PCD     _BITUL(X86_CR3_PCD_BIT)
0081 
0082 #define X86_CR3_PCID_BITS   12
0083 #define X86_CR3_PCID_MASK   (_AC((1UL << X86_CR3_PCID_BITS) - 1, UL))
0084 
0085 #define X86_CR3_PCID_NOFLUSH_BIT 63 /* Preserve old PCID */
0086 #define X86_CR3_PCID_NOFLUSH    _BITULL(X86_CR3_PCID_NOFLUSH_BIT)
0087 
0088 /*
0089  * Intel CPU features in CR4
0090  */
0091 #define X86_CR4_VME_BIT     0 /* enable vm86 extensions */
0092 #define X86_CR4_VME     _BITUL(X86_CR4_VME_BIT)
0093 #define X86_CR4_PVI_BIT     1 /* virtual interrupts flag enable */
0094 #define X86_CR4_PVI     _BITUL(X86_CR4_PVI_BIT)
0095 #define X86_CR4_TSD_BIT     2 /* disable time stamp at ipl 3 */
0096 #define X86_CR4_TSD     _BITUL(X86_CR4_TSD_BIT)
0097 #define X86_CR4_DE_BIT      3 /* enable debugging extensions */
0098 #define X86_CR4_DE      _BITUL(X86_CR4_DE_BIT)
0099 #define X86_CR4_PSE_BIT     4 /* enable page size extensions */
0100 #define X86_CR4_PSE     _BITUL(X86_CR4_PSE_BIT)
0101 #define X86_CR4_PAE_BIT     5 /* enable physical address extensions */
0102 #define X86_CR4_PAE     _BITUL(X86_CR4_PAE_BIT)
0103 #define X86_CR4_MCE_BIT     6 /* Machine check enable */
0104 #define X86_CR4_MCE     _BITUL(X86_CR4_MCE_BIT)
0105 #define X86_CR4_PGE_BIT     7 /* enable global pages */
0106 #define X86_CR4_PGE     _BITUL(X86_CR4_PGE_BIT)
0107 #define X86_CR4_PCE_BIT     8 /* enable performance counters at ipl 3 */
0108 #define X86_CR4_PCE     _BITUL(X86_CR4_PCE_BIT)
0109 #define X86_CR4_OSFXSR_BIT  9 /* enable fast FPU save and restore */
0110 #define X86_CR4_OSFXSR      _BITUL(X86_CR4_OSFXSR_BIT)
0111 #define X86_CR4_OSXMMEXCPT_BIT  10 /* enable unmasked SSE exceptions */
0112 #define X86_CR4_OSXMMEXCPT  _BITUL(X86_CR4_OSXMMEXCPT_BIT)
0113 #define X86_CR4_UMIP_BIT    11 /* enable UMIP support */
0114 #define X86_CR4_UMIP        _BITUL(X86_CR4_UMIP_BIT)
0115 #define X86_CR4_LA57_BIT    12 /* enable 5-level page tables */
0116 #define X86_CR4_LA57        _BITUL(X86_CR4_LA57_BIT)
0117 #define X86_CR4_VMXE_BIT    13 /* enable VMX virtualization */
0118 #define X86_CR4_VMXE        _BITUL(X86_CR4_VMXE_BIT)
0119 #define X86_CR4_SMXE_BIT    14 /* enable safer mode (TXT) */
0120 #define X86_CR4_SMXE        _BITUL(X86_CR4_SMXE_BIT)
0121 #define X86_CR4_FSGSBASE_BIT    16 /* enable RDWRFSGS support */
0122 #define X86_CR4_FSGSBASE    _BITUL(X86_CR4_FSGSBASE_BIT)
0123 #define X86_CR4_PCIDE_BIT   17 /* enable PCID support */
0124 #define X86_CR4_PCIDE       _BITUL(X86_CR4_PCIDE_BIT)
0125 #define X86_CR4_OSXSAVE_BIT 18 /* enable xsave and xrestore */
0126 #define X86_CR4_OSXSAVE     _BITUL(X86_CR4_OSXSAVE_BIT)
0127 #define X86_CR4_SMEP_BIT    20 /* enable SMEP support */
0128 #define X86_CR4_SMEP        _BITUL(X86_CR4_SMEP_BIT)
0129 #define X86_CR4_SMAP_BIT    21 /* enable SMAP support */
0130 #define X86_CR4_SMAP        _BITUL(X86_CR4_SMAP_BIT)
0131 #define X86_CR4_PKE_BIT     22 /* enable Protection Keys support */
0132 #define X86_CR4_PKE     _BITUL(X86_CR4_PKE_BIT)
0133 #define X86_CR4_CET_BIT     23 /* enable Control-flow Enforcement Technology */
0134 #define X86_CR4_CET     _BITUL(X86_CR4_CET_BIT)
0135 
0136 /*
0137  * x86-64 Task Priority Register, CR8
0138  */
0139 #define X86_CR8_TPR     _AC(0x0000000f,UL) /* task priority register */
0140 
0141 /*
0142  * AMD and Transmeta use MSRs for configuration; see <asm/msr-index.h>
0143  */
0144 
0145 /*
0146  *      NSC/Cyrix CPU configuration register indexes
0147  */
0148 #define CX86_PCR0   0x20
0149 #define CX86_GCR    0xb8
0150 #define CX86_CCR0   0xc0
0151 #define CX86_CCR1   0xc1
0152 #define CX86_CCR2   0xc2
0153 #define CX86_CCR3   0xc3
0154 #define CX86_CCR4   0xe8
0155 #define CX86_CCR5   0xe9
0156 #define CX86_CCR6   0xea
0157 #define CX86_CCR7   0xeb
0158 #define CX86_PCR1   0xf0
0159 #define CX86_DIR0   0xfe
0160 #define CX86_DIR1   0xff
0161 #define CX86_ARR_BASE   0xc4
0162 #define CX86_RCR_BASE   0xdc
0163 
0164 #define CR0_STATE   (X86_CR0_PE | X86_CR0_MP | X86_CR0_ET | \
0165              X86_CR0_NE | X86_CR0_WP | X86_CR0_AM | \
0166              X86_CR0_PG)
0167 
0168 #endif /* _UAPI_ASM_X86_PROCESSOR_FLAGS_H */