PatchworkOS
Loading...
Searching...
No Matches
cpuid.h
Go to the documentation of this file.
1#ifndef _SYS_CPUID_H
2#define _SYS_CPUID_H 1
3
4#include <stdbool.h>
5#include <stdint.h>
6
29
34typedef enum
35{
38
78
85typedef enum
86{
87 CPUID_EDX_FPU = 1 << 0,
88 CPUID_EDX_VME = 1 << 1,
89 CPUID_EDX_DE = 1 << 2,
90 CPUID_EDX_PSE = 1 << 3,
91 CPUID_EDX_TSC = 1 << 4,
92 CPUID_EDX_MSR = 1 << 5,
93 CPUID_EDX_PAE = 1 << 6,
94 CPUID_EDX_MCE = 1 << 7,
95 CPUID_EDX_CX8 = 1 << 8,
97 CPUID_EDX_SEP = 1 << 11,
98 CPUID_EDX_MTRR = 1 << 12,
99 CPUID_EDX_PGE = 1 << 13,
100 CPUID_EDX_MCA = 1 << 14,
101 CPUID_EDX_CMOV = 1 << 15,
102 CPUID_EDX_PAT = 1 << 16,
104 CPUID_EDX_PSN = 1 << 18,
107 CPUID_EDX_DS = 1 << 21,
108 CPUID_EDX_ACPI = 1 << 22,
109 CPUID_EDX_MMX = 1 << 23,
110 CPUID_EDX_FXSR = 1 << 24,
111 CPUID_EDX_SSE = 1 << 25,
112 CPUID_EDX_SSE2 = 1 << 26,
113 CPUID_EDX_SS = 1 << 27,
114 CPUID_EDX_HTT = 1 << 28,
115 CPUID_EDX_TM = 1 << 29,
117 CPUID_EDX_PBE = 1 << 31,
119
162
174
182static inline void cpuid(cpuid_input_eax_t eax, cpuid_input_ecx_t ecx, cpuid_output_t* out)
183{
184 asm volatile("cpuid" : "=a"(out->eax), "=b"(out->ebx), "=c"(out->ecx), "=d"(out->edx) : "a"(eax), "c"(ecx));
185}
186
198
205{
206 cpuid_output_t out;
208 info->version = out.eax;
209 info->brandClflushApicid = out.ebx;
210 info->featuresEcx = (cpuid_ecx_features_t)out.ecx;
211 info->featuresEdx = (cpuid_edx_features_t)out.edx;
212}
213
222
234
237#endif // _SYS_CPUID_H
static void cpuid(cpuid_input_eax_t eax, cpuid_input_ecx_t ecx, cpuid_output_t *out)
CPUID instruction.
Definition cpuid.h:182
cpuid_ecx_features_t
ECX feature flags.
Definition cpuid.h:46
static void cpuid_feature_info(cpuid_feature_info_t *info)
Wrapper to get CPU feature information.
Definition cpuid.h:204
static void cpuid_extended_feature_info(cpuid_extended_feature_info_t *info)
Wrapper to get CPU extended feature information.
Definition cpuid.h:228
cpuid_input_ecx_t
Input ECX values.
Definition cpuid.h:35
cpuid_ebx_features_t
EBX feature flags.
Definition cpuid.h:128
cpuid_input_eax_t
Input EAX values.
Definition cpuid.h:24
cpuid_edx_features_t
Definition cpuid.h:86
@ CPUID_ECX_F16C
Definition cpuid.h:75
@ CPUID_ECX_AVX
Definition cpuid.h:74
@ CPUID_ECX_SMX
Definition cpuid.h:53
@ CPUID_ECX_SSE3
Definition cpuid.h:47
@ CPUID_ECX_DS_CPL
Definition cpuid.h:51
@ CPUID_ECX_CNXT_ID
Definition cpuid.h:57
@ CPUID_ECX_SSE4_1
Definition cpuid.h:65
@ CPUID_ECX_CMPXCHG16B
Definition cpuid.h:60
@ CPUID_ECX_MONITOR
Definition cpuid.h:50
@ CPUID_ECX_SSE4_2
Definition cpuid.h:66
@ CPUID_ECX_FMA
Definition cpuid.h:59
@ CPUID_ECX_TM2
Definition cpuid.h:55
@ CPUID_ECX_MOVBE
Definition cpuid.h:68
@ CPUID_ECX_XSAVE
Definition cpuid.h:72
@ CPUID_ECX_XTPR_UPDATE_CONTROL
Definition cpuid.h:61
@ CPUID_ECX_DCA
Definition cpuid.h:64
@ CPUID_ECX_PDCM
Definition cpuid.h:62
@ CPUID_ECX_POPCNT
Definition cpuid.h:69
@ CPUID_ECX_AESNI
Definition cpuid.h:71
@ CPUID_ECX_SSSE3
Definition cpuid.h:56
@ CPUID_ECX_PCID
Definition cpuid.h:63
@ CPUID_ECX_RDRAND
Definition cpuid.h:76
@ CPUID_ECX_X2APIC
Definition cpuid.h:67
@ CPUID_ECX_EIST
Definition cpuid.h:54
@ CPUID_ECX_SDBG
Definition cpuid.h:58
@ CPUID_ECX_DTES64
Definition cpuid.h:49
@ CPUID_ECX_PCLMULQDQ
Definition cpuid.h:48
@ CPUID_ECX_VMX
Definition cpuid.h:52
@ CPUID_ECX_TSC_DEADLINE
Definition cpuid.h:70
@ CPUID_ECX_OSXSAVE
Definition cpuid.h:73
@ CPUID_ECX_NONE
Definition cpuid.h:36
@ CPUID_EBX_AVX512F
Definition cpuid.h:145
@ CPUID_EBX_FSGSBASE
Definition cpuid.h:129
@ CPUID_EBX_CLFLUSHOPT
Definition cpuid.h:152
@ CPUID_EBX_AVX512VL
Definition cpuid.h:160
@ CPUID_EBX_AVX512DQ
Definition cpuid.h:146
@ CPUID_EBX_AVX512ER
Definition cpuid.h:156
@ CPUID_EBX_AVX512_IFMA
Definition cpuid.h:150
@ CPUID_EBX_FPU_CS_DS_DEPR
Definition cpuid.h:142
@ CPUID_EBX_RDSEED
Definition cpuid.h:147
@ CPUID_EBX_AVX512PF
Definition cpuid.h:155
@ CPUID_EBX_SGX
Definition cpuid.h:131
@ CPUID_EBX_ERMS
Definition cpuid.h:138
@ CPUID_EBX_HLE
Definition cpuid.h:133
@ CPUID_EBX_SMEP
Definition cpuid.h:136
@ CPUID_EBX_TSC_ADJUST
Definition cpuid.h:130
@ CPUID_EBX_AVX2
Definition cpuid.h:134
@ CPUID_EBX_BMI2
Definition cpuid.h:137
@ CPUID_EBX_AVX512CD
Definition cpuid.h:157
@ CPUID_EBX_RDT_A
Definition cpuid.h:144
@ CPUID_EBX_SMAP
Definition cpuid.h:149
@ CPUID_EBX_BMI1
Definition cpuid.h:132
@ CPUID_EBX_RESERVED1
Definition cpuid.h:151
@ CPUID_EBX_INVPCID
Definition cpuid.h:139
@ CPUID_EBX_RDT_M
Definition cpuid.h:141
@ CPUID_EBX_AVX512BW
Definition cpuid.h:159
@ CPUID_EBX_CLWB
Definition cpuid.h:153
@ CPUID_EBX_FDP_EXCPTN_ONLY
Definition cpuid.h:135
@ CPUID_EBX_SHA
Definition cpuid.h:158
@ CPUID_EBX_ADX
Definition cpuid.h:148
@ CPUID_EBX_INTEL_PT
Definition cpuid.h:154
@ CPUID_EBX_RTM
Definition cpuid.h:140
@ CPUID_EBX_MPX
Definition cpuid.h:143
@ CPUID_EAX_FEATURE_INFO
Definition cpuid.h:26
@ CPUID_EAX_NONE
Definition cpuid.h:25
@ CPUID_EAX_EXTENDED_FEATURE_INFO
Definition cpuid.h:27
@ CPUID_EDX_SSE2
Definition cpuid.h:112
@ CPUID_EDX_SS
Definition cpuid.h:113
@ CPUID_EDX_RESERVED2
Definition cpuid.h:116
@ CPUID_EDX_MMX
Definition cpuid.h:109
@ CPUID_EDX_FXSR
Definition cpuid.h:110
@ CPUID_EDX_PSN
Definition cpuid.h:104
@ CPUID_EDX_PAE
Definition cpuid.h:93
@ CPUID_EDX_MTRR
Definition cpuid.h:98
@ CPUID_EDX_PSE36
Definition cpuid.h:103
@ CPUID_EDX_SSE
Definition cpuid.h:111
@ CPUID_EDX_PBE
Definition cpuid.h:117
@ CPUID_EDX_TSC
Definition cpuid.h:91
@ CPUID_EDX_VME
Definition cpuid.h:88
@ CPUID_EDX_APIC
Definition cpuid.h:96
@ CPUID_EDX_DS
Definition cpuid.h:107
@ CPUID_EDX_FPU
Definition cpuid.h:87
@ CPUID_EDX_MSR
Definition cpuid.h:92
@ CPUID_EDX_CX8
Definition cpuid.h:95
@ CPUID_EDX_DE
Definition cpuid.h:89
@ CPUID_EDX_PAT
Definition cpuid.h:102
@ CPUID_EDX_TM
Definition cpuid.h:115
@ CPUID_EDX_MCE
Definition cpuid.h:94
@ CPUID_EDX_PSE
Definition cpuid.h:90
@ CPUID_EDX_CLFSH
Definition cpuid.h:105
@ CPUID_EDX_MCA
Definition cpuid.h:100
@ CPUID_EDX_PGE
Definition cpuid.h:99
@ CPUID_EDX_CMOV
Definition cpuid.h:101
@ CPUID_EDX_SEP
Definition cpuid.h:97
@ CPUID_EDX_RESERVED1
Definition cpuid.h:106
@ CPUID_EDX_HTT
Definition cpuid.h:114
@ CPUID_EDX_ACPI
Definition cpuid.h:108
static fb_info_t info
Definition gop.c:41
__UINT32_TYPE__ uint32_t
Definition stdint.h:15
CPU extended feature information structure.
Definition cpuid.h:219
cpuid_ebx_features_t featuresEbx
Definition cpuid.h:220
CPU feature information structure.
Definition cpuid.h:192
cpuid_ecx_features_t featuresEcx
Definition cpuid.h:195
cpuid_edx_features_t featuresEdx
Definition cpuid.h:196
uint32_t brandClflushApicid
Definition cpuid.h:194
uint32_t version
Definition cpuid.h:193
Output structure for CPUID instruction.
Definition cpuid.h:168
uint32_t ebx
Definition cpuid.h:170
uint32_t eax
Definition cpuid.h:169
uint32_t edx
Definition cpuid.h:172
uint32_t ecx
Definition cpuid.h:171