7 uint32_t maxidx; /* 0: eax */
8 char vendor[12]; /* 0: ebx, edx, ecx */
9 uint32_t id; /* 1: eax */
10 uint32_t rsvd0; /* 1: ebx */
11 uint32_t feat; /* 1: edx */
12 uint32_t feat2; /* 1: ecx */
14 char brandstr[48]; /* 80000002h-80000004h */
17 extern struct cpuid_info cpuid;
19 #define CPU_HAVE_MMX (cpuid.feat & CPUID_FEAT_MMX)
20 #define CPU_HAVE_MTRR (cpuid.feat & CPUID_FEAT_MTRR)
22 #define CPUID_STEPPING(id) ((id) & 0xf)
23 #define CPUID_MODEL(id) (((id) >> 4) & 0xf)
24 #define CPUID_FAMILY(id) (((id) >> 8) & 0xf)
25 #define CPUID_EXTMODEL(id) (((id) >> 16) & 0xf)
26 #define CPUID_EXTFAMILY(id) (((id) >> 20) & 0xff)
28 #define CPUID_FEAT_FPU 0x00000001
29 #define CPUID_FEAT_VME 0x00000002
30 #define CPUID_FEAT_DBGEXT 0x00000004
31 #define CPUID_FEAT_PSE 0x00000008
32 #define CPUID_FEAT_TSC 0x00000010
33 #define CPUID_FEAT_MSR 0x00000020
34 #define CPUID_FEAT_PAE 0x00000040
35 #define CPUID_FEAT_MCE 0x00000080
36 #define CPUID_FEAT_CX8 0x00000100
37 #define CPUID_FEAT_APIC 0x00000200
39 #define CPUID_FEAT_SEP 0x00000800
40 #define CPUID_FEAT_MTRR 0x00001000
41 #define CPUID_FEAT_PGE 0x00002000
42 #define CPUID_FEAT_MCA 0x00004000
43 #define CPUID_FEAT_CMOV 0x00008000
44 #define CPUID_FEAT_PAT 0x00010000
45 #define CPUID_FEAT_PSE36 0x00020000
46 #define CPUID_FEAT_PSN 0x00040000
47 #define CPUID_FEAT_CLF 0x00080000
49 #define CPUID_FEAT_DTES 0x00200000
50 #define CPUID_FEAT_ACPI 0x00400000
51 #define CPUID_FEAT_MMX 0x00800000
52 #define CPUID_FEAT_FXSR 0x01000000
53 #define CPUID_FEAT_SSE 0x02000000
54 #define CPUID_FEAT_SSE2 0x04000000
55 #define CPUID_FEAT_SS 0x08000000
56 #define CPUID_FEAT_HTT 0x10000000
57 #define CPUID_FEAT_TM1 0x20000000
58 #define CPUID_FEAT_IA64 0x40000000
59 #define CPUID_FEAT_PBE 0x80000000
61 #define CPUID_FEAT2_SSE3 0x00000001
62 #define CPUID_FEAT2_PCLMUL 0x00000002
63 #define CPUID_FEAT2_DTES64 0x00000004
64 #define CPUID_FEAT2_MONITOR 0x00000008
65 #define CPUID_FEAT2_DS_CPL 0x00000010
66 #define CPUID_FEAT2_VMX 0x00000020
67 #define CPUID_FEAT2_SMX 0x00000040
68 #define CPUID_FEAT2_EST 0x00000080
69 #define CPUID_FEAT2_TM2 0x00000100
70 #define CPUID_FEAT2_SSSE3 0x00000200
71 #define CPUID_FEAT2_CID 0x00000400
72 #define CPUID_FEAT2_SDBG 0x00000800
73 #define CPUID_FEAT2_FMA 0x00001000
74 #define CPUID_FEAT2_CX16 0x00002000
75 #define CPUID_FEAT2_ETPRD 0x00004000
76 #define CPUID_FEAT2_PDCM 0x00008000
78 #define CPUID_FEAT2_PCID 0x00020000
79 #define CPUID_FEAT2_DCA 0x00040000
80 #define CPUID_FEAT2_SSE41 0x00080000
81 #define CPUID_FEAT2_SSE42 0x00100000
82 #define CPUID_FEAT2_X2APIC 0x00200000
83 #define CPUID_FEAT2_MOVBE 0x00400000
84 #define CPUID_FEAT2_POPCNT 0x00800000
86 #define CPUID_FEAT2_AES 0x02000000
87 #define CPUID_FEAT2_XSAVE 0x04000000
88 #define CPUID_FEAT2_OSXSAVE 0x08000000
89 #define CPUID_FEAT2_AVX 0x10000000
90 #define CPUID_FEAT2_F16C 0x20000000
91 #define CPUID_FEAT2_RDRAND 0x40000000
93 int read_cpuid(struct cpuid_info *info);
94 void print_cpuid(struct cpuid_info *info);