removed clang-format and clang_complete files from the repo
[dosdemo] / src / cpuid.h
1 #ifndef CPUID_H_
2 #define CPUID_H_
3
4 #include "inttypes.h"
5
6 struct cpuid_info {
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 */
13
14         char brandstr[48];      /* 80000002h-80000004h */
15 };
16
17 extern struct cpuid_info cpuid;
18
19 #define CPU_HAVE_MMX            (cpuid.feat & CPUID_FEAT_MMX)
20 #define CPU_HAVE_MTRR           (cpuid.feat & CPUID_FEAT_MTRR)
21
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)
27
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
38
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
48
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
60
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
77
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
85
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
92
93 int read_cpuid(struct cpuid_info *info);
94 void print_cpuid(struct cpuid_info *info);
95
96 #endif  /* CPUID_H_ */