OSAPI  0.29
Open System API
machine_cpu_type_intel.h
1 // *****************************************************************************************
2 //
3 // File description:
4 //
5 // Author: Joao Costa
6 // Purpose: Provide Intel CPU specific declarations/definitions
7 //
8 // *****************************************************************************************
9 
10 #ifndef OSAPI_MACHINE_CPU_TYPE_INTEL_H_
11 #define OSAPI_MACHINE_CPU_TYPE_INTEL_H_
12 
13 #if (OSAPI_CPU_ARCHITECTURE_TARGET == OSAPI_CPU_ARCHITECTURE_X86) || (OSAPI_CPU_ARCHITECTURE_TARGET == OSAPI_CPU_ARCHITECTURE_AMD64)
14 
15 
16 // *****************************************************************************************
17 //
18 // Section: Import headers
19 //
20 // *****************************************************************************************
21 
22 // System headers
23 #include <stdint.h>
24 
25 
26 
27 // *****************************************************************************************
28 //
29 // Section: Define structures for Standard CPUID functions
30 //
31 // *****************************************************************************************
32 
33 // *****************************************************************************************
34 // Standard CPUID function 1
35 // *****************************************************************************************
36 
39 {
40  uint32_t revision:4; // 1-4
41  uint32_t model:4; // 5-8
42  uint32_t family_id:4; // 9-12
43  uint32_t type:2; // 13-14
44  uint32_t :1; // 15
45  uint32_t ext_model:4; // 16-19
46  uint32_t ext_family:8; // 20-28
47  uint32_t :4; // 29-32
48 };
49 
52 {
53  uint32_t brand_index:8; // 1-8
54  uint32_t cf_lnsize:8; // 8-16
55  uint32_t max_lcpus:8; // 17-24
56  uint32_t initial_apic_id:1; // 25-32
57 };
58 
61 {
62  uint32_t SSE3:1; // 1
63  uint32_t PCLMULQDQ:1; // 2
64  uint32_t DTES64:1; // 3
65  uint32_t MONITOR:1; // 4
66  uint32_t DS_CPL:1; // 5
67  uint32_t VMX:1; // 6
68  uint32_t SMX:1; // 7
69  uint32_t EIST:1; // 8
70  uint32_t TM2:1; // 9
71  uint32_t SSSE3:1; // 10
72  uint32_t CNXT_ID:1; // 11
73  uint32_t SDBG:1; // 12
74  uint32_t FMA:1; // 13
75  uint32_t CMPXCHG16B:1; // 14
76  uint32_t XTPR:1; // 15
77  uint32_t PDCM:1; // 16
78  uint32_t :1; // 17
79  uint32_t PCID:1; // 18
80  uint32_t DCA:1; // 19
81  uint32_t SSE4_1:1; // 20
82  uint32_t SSE4_2:1; // 21
83  uint32_t X2APIC:1; // 22
84  uint32_t MOVBE:1; // 23
85  uint32_t POPCNT:1; // 24
86  uint32_t TSC:1; // 25
87  uint32_t AES:1; // 26
88  uint32_t XSAVE:1; // 27
89  uint32_t OSXSAVE:1; // 28
90  uint32_t AVX:1; // 29
91  uint32_t F16C:1; // 30
92  uint32_t RDRAND:1; // 31
93  uint32_t :1; // 32
94 };
95 
96 
99 {
100  uint32_t FPU:1; // 1
101  uint32_t VME:1; // 2
102  uint32_t DE:1; // 3
103  uint32_t PSE:1; // 4
104  uint32_t TSC:1; // 5
105  uint32_t MSR:1; // 6
106  uint32_t PAE:1; // 7
107  uint32_t MCE:1; // 8
108  uint32_t CX8:1; // 9
109  uint32_t APIC:1; // 10
110  uint32_t :1; // 11
111  uint32_t SEP:1; // 12
112  uint32_t MTRR:1; // 13
113  uint32_t PGE:1; // 14
114  uint32_t MCA:1; // 15
115  uint32_t CMOV:1; // 16
116  uint32_t PAT:1; // 17
117  uint32_t PSE36:1; // 18
118  uint32_t PSN:1; // 19
119  uint32_t CLFSH:1; // 20
120  uint32_t :1; // 21
121  uint32_t DS:1; // 22
122  uint32_t ACPI:1; // 23
123  uint32_t MMX:1; // 24
124  uint32_t FXSR:1; // 25
125  uint32_t SSE:1; // 26
126  uint32_t SSE2:1; // 27
127  uint32_t SS:1; // 28
128  uint32_t HTT:1; // 29
129  uint32_t TM:1; // 30
130  uint32_t :1; // 31 (Reserved)
131  uint32_t PBE:1; // 32
132 };
133 
136 {
137  struct intel_cpu_s1_a_S eax;
138  struct intel_cpu_s1_b_S ebx;
139  struct intel_cpu_s1_c_S ecx;
140  struct intel_cpu_s1_d_S edx;
141 };
142 
143 
144 // *****************************************************************************************
145 // Standard CPUID function 2 - Cache and TLB Information
146 // *****************************************************************************************
147 
148 // *****************************************************************************************
149 // Standard CPUID function 3 - Processor serial number
150 // *****************************************************************************************
151 
152 // *****************************************************************************************
153 // Standard CPUID function 4 - Deterministic Cache Parameters
154 // *****************************************************************************************
155 
156 // *****************************************************************************************
157 // Standard CPUID function 5 - Monitor/MWAIT
158 // *****************************************************************************************
159 
160 
161 // *****************************************************************************************
162 // Standard CPUID function 6 - Thermal and Power Management
163 // *****************************************************************************************
164 
167 {
168  uint32_t DIGTEMP:1; // 1
169  uint32_t TRBOBST:1; // 2
170  uint32_t ARAT:1; // 3
171  uint32_t :1; // 4
172  uint32_t PLN:1; // 5
173  uint32_t ECMD:1; // 6
174  uint32_t PTM:1; // 7
175  uint32_t HWP:1; // 8
176  uint32_t HWP_NOT:1; // 9
177  uint32_t HWP_AW:1; // 10
178  uint32_t HWP_EPP:1; // 11
179  uint32_t HWP_PLR:1; // 12
180  uint32_t :1; // 13
181  uint32_t HDC:1; // 14
182  uint32_t TBOOST_MAX:1; // 15
183  uint32_t HWP_CAP:1; // 16
184  uint32_t HWP_PECI:1; // 17
185  uint32_t HWP_FLEX:1; // 18
186  uint32_t FAST_MODE:1; // 19
187  uint32_t HW_FEEDBACK:1; // 20
188  uint32_t HWP_IGNORE:1; // 21
189  uint32_t :11; // 22-32
190 };
191 
194 {
195  uint32_t dgt_interrupts:4; // 4
196  uint32_t :28; // 28
197 };
198 
201 {
202  uint32_t HW_CFC:1; // 1
203  uint32_t :2; // 2-3
204  uint32_t ENERGY_BIAS:1; // 4
205  uint32_t :28; // 5-32
206 };
207 
210 {
211  uint32_t hw_feedback_support:1; // 1
212  uint32_t hw_feedback:7; // 2-8
213  uint32_t hw_fb_enum:4; // 9-12
214  uint32_t :4; // 13-16 ?
215  uint32_t hw_fb_index:16; // 17-32
216 };
217 
218 
221 {
222  struct intel_cpu_s6_a_S eax;
223  struct intel_cpu_s6_b_S ebx;
224  struct intel_cpu_s6_c_S ecx;
225  struct intel_cpu_s6_d_S edx;
226 };
227 
228 
229 // *****************************************************************************************
230 // Standard CPUID function 7 - Extended feature flags
231 // *****************************************************************************************
232 
235 {
236  uint32_t max_subleaves:32; // All
237 };
238 
241 {
242  uint32_t FSGSBASE:1; // 1
243  uint32_t :1; // 2 : IA32_TSC_ADJUST
244  uint32_t SGX:1; // 3
245  uint32_t BMI1:1; // 4
246  uint32_t HLE:1; // 5
247  uint32_t AVX2:1; // 6
248  uint32_t SMEP:1; // 8
249  uint32_t :1; // 7
250  uint32_t BMI2:1; // 9
251  uint32_t ERMS:1; // 10
252  uint32_t INVPCID:1; // 11
253  uint32_t RTM:1; // 12
254  uint32_t PQM:1; // 13
255  uint32_t :1; // 14 Deprecates FPU CS and DS if on
256  uint32_t MPX:1; // 15
257  uint32_t PQE:1; // 16
258  uint32_t AVX512_F:1; // 17
259  uint32_t AVX512_DQ:1; // 18
260  uint32_t RDSEED:1; // 19
261  uint32_t ADX:1; // 20
262  uint32_t SMAP:1; // 21
263  uint32_t AVX512_IFMA:1; // 22
264  uint32_t :1; // 23
265  uint32_t CLFLUSHOPT:1; // 24
266  uint32_t CLWB:1; // 25
267  uint32_t INTEL_PT:1; // 26
268  uint32_t AVX512_PF:1; // 27
269  uint32_t AVX512_ER:1; // 28
270  uint32_t AVX512_CD:1; // 29
271  uint32_t SHA:1; // 30
272  uint32_t AVX512_BW:1; // 31
273  uint32_t AVX512_VL:1; // 32
274 
275 };
276 
279 {
280  uint32_t PREFETCHWT1:1; // 1
281  uint32_t AVX512_VBMI:1; // 2
282  uint32_t UMIP:1; // 3
283  uint32_t PKU:1; // 4
284  uint32_t OSPKE:1; // 5
285  uint32_t WAITPKG:1; // 6
286  uint32_t AVX512_VBMI2:1; // 7
287  uint32_t :1; // 8
288  uint32_t GFNI:1; // 9
289  uint32_t VAES:1; // 10
290  uint32_t VPCLMULQDQ:1; // 11
291  uint32_t AVX512_VNNI:1; // 12
292  uint32_t AVX512_BITALG:1; // 13
293  uint32_t :1; // 14
294  uint32_t AVX512_VPOPCNTDQ:1; // 15
295  uint32_t :7; // 16-22 (The value of userspace MPX Address-Width Adjust used by the BNDLDX and BNDSTX Intel MPX instructions in 64-bit mode)
296  uint32_t RDPID:1; // 23
297  uint32_t :2; // 24-25 (reserved)
298  uint32_t CLDEMOTE:1; // 26
299  uint32_t :1; // 27
300  uint32_t MOVDIRI:1; // 28
301  uint32_t MOVDIR64B:1; // 29
302  uint32_t ENQCMD:1; // 30
303  uint32_t SGX_LC:1; // 31
304  uint32_t :1; // 32
305 };
306 
307 
310 {
311  uint32_t :2; // 1-2
312  uint32_t AVX512_4VNNIW:1; // 3
313  uint32_t AVX512_4FMAPS:1; // 4
314  uint32_t FSRM:1; // 5
315  uint32_t :3; // 6-8
316  uint32_t AVX512_VP2I:1; // 9
317  uint32_t :8; // 10-18 Reserved
318  uint32_t PCONFIG:1; // 19
319  uint32_t :7; // 20-26 Reserved
320  uint32_t SPEC_CTRL:1; // 27
321  uint32_t STIBP:1; // 28
322  uint32_t :1; // 29
323  uint32_t IA32_AC:1; // 30
324  uint32_t IA32_CC:1; // 31
325  uint32_t SSBD:1; // 32
326 
327 };
328 
331 {
332  struct intel_cpu_s7_a_S eax;
333  struct intel_cpu_s7_b_S ebx;
334  struct intel_cpu_s7_c_S ecx;
335  struct intel_cpu_s7_d_S edx;
336 };
337 
338 
341 {
342  uint32_t :5; // 1-5
343  uint32_t AVX512_BF16:1; // 6
344  uint32_t :26; // 7-32
345 };
346 
347 
350 {
351  struct intel_cpu_s7_1_a_S eax;
352  uint32_t ebx;
353  uint32_t ecx;
354  uint32_t edx;
355 };
356 
357 
358 
359 // *****************************************************************************************
360 // Standard CPUID function 9 - Direct Cache Access Information
361 // *****************************************************************************************
362 
363 
364 // *****************************************************************************************
365 // Standard CPUID function A - Architecture Performance Monitoring
366 // *****************************************************************************************
367 
368 
369 // *****************************************************************************************
370 // Standard CPUID function B - Extended Topology
371 // *****************************************************************************************
372 
373 // *****************************************************************************************
374 // Standard CPUID function D - Processor Extended State
375 // *****************************************************************************************
376 
377 // *****************************************************************************************
378 // Standard CPUID function F - Intel Resource Director Technology (RDT) Monitoring
379 // *****************************************************************************************
380 
381 // *****************************************************************************************
382 // Standard CPUID function 10h - L3 Cache RDT Monitoring capabiity
383 // *****************************************************************************************
384 
385 // *****************************************************************************************
386 // Standard CPUID function 12h - Software Guard Extensions Capacity enumeration
387 // *****************************************************************************************
388 
389 // *****************************************************************************************
390 // Standard CPUID function 14h - Processor Trace
391 // *****************************************************************************************
392 
393 
394 // *****************************************************************************************
395 // Standard CPUID function 15h - Time Stamp Counter and Core Crystal Clock Information
396 // *****************************************************************************************
397 
398 
399 // *****************************************************************************************
400 // Standard CPUID function 16h - Processor Frequency Information
401 // *****************************************************************************************
402 
403 // All frequencies are in MHz and are factory settings, not actual values
404 
406 {
407  uint32_t freq_base:16; // 1-16
408  uint32_t :16; // 17-32
409 };
410 
411 
413 {
414  uint32_t freq_max:16; // 1-16
415  uint32_t :16; // 17-32
416 };
417 
419 {
420  uint32_t freq_bus:16; // 1-16
421  uint32_t :16; // 17-32
422 };
423 
424 
425 // Structure that matches the register structure
427 {
428  struct intel_cpu_s16_a_S eax;
429  struct intel_cpu_s16_b_S ebx;
430  struct intel_cpu_s16_c_S ecx;
431  uint32_t edx;
432 };
433 
434 
435 // *****************************************************************************************
436 // Standard CPUID function 17h - System-On-Chip Vendor Attribute
437 // *****************************************************************************************
438 
439 
440 // *****************************************************************************************
441 // Standard CPUID function 18h - Deterministic Address Translation Parameters
442 // *****************************************************************************************
443 
444 // *****************************************************************************************
445 // Standard CPUID function 1B - PCONFIG Information
446 // *****************************************************************************************
447 
448 // *****************************************************************************************
449 // Standard CPUID function 1F - V2 Extended Topology enumeration
450 // *****************************************************************************************
451 
452 
453 // *****************************************************************************************
454 //
455 // Section: Define structures for Extended CPUID functions (0x8000xxxxH)
456 //
457 // *****************************************************************************************
458 
459 
460 // *****************************************************************************************
461 // Extended CPUID function 1 - Extended CPUID information
462 // *****************************************************************************************
463 
465 {
466  uint32_t LAHF_SAHF:1; // 1
467  uint32_t CMP:1; // 2
468  uint32_t SVM:1; // 3
469  uint32_t EXTAPIC:1; // 4
470  uint32_t CR8:1; // 5
471  uint32_t ABM:1; // 6
472  uint32_t SSE4A:1; // 7
473  uint32_t MISALIGN:1; // 8
474  uint32_t S3D_PREF:1; // 9
475  uint32_t OSVW:1; // 10
476  uint32_t IBS:1; // 11
477  uint32_t XOP:1; // 12
478  uint32_t SKINIT:1; // 13
479  uint32_t WDT:1; // 14
480  uint32_t :1; // 15
481  uint32_t LWP:1; // 16
482  uint32_t FMA4:1; // 17
483  uint32_t TCE:1; // 18
484  uint32_t :1; // 19
485  uint32_t NID:1; // 20
486  uint32_t :1; // 21
487  uint32_t TBM:1; // 22
488  uint32_t TOPO:1; // 23
489  uint32_t PCORE:1; // 24
490  uint32_t PNB:1; // 25
491  uint32_t :1; // 26
492  uint32_t DBX:1; // 27
493  uint32_t PTSC:1; // 28
494  uint32_t PL2:1; // 29
495  uint32_t :3; // 30-32
496 
497 };
498 
499 
501 {
502  uint32_t :19; // 1-19 // Already available in standard function 1 ( SEP & SYSCALL are the same instruction? )
503  uint32_t MP:1; // 20
504  uint32_t NX:1; // 21
505  uint32_t :1; // 22
506  uint32_t MMXEXT:1; // 23
507  uint32_t :2; // 24-25
508  uint32_t FXSR_OPT:1; // 26
509  uint32_t PDP1GB:1; // 27
510  uint32_t RDTSCP:1; // 28
511  uint32_t :1; // 29
512  uint32_t LM:1; // 30
513  uint32_t E3DNOW:1; // 31
514  uint32_t S3DNOW:1; // 32
515 };
516 
517 
518 // Structure that matches the register structure
520 {
521  uint32_t eax;
522  uint32_t ebx;
523  struct intel_cpu_e1_c_S ecx;
524  struct intel_cpu_e1_d_S edx;
525 };
526 
527 
528 // *****************************************************************************************
529 // Extended CPUID function 2 - CPU Brand 1
530 // *****************************************************************************************
531 
532 
533 // *****************************************************************************************
534 // Extended CPUID function 3 - CPU Brand 2
535 // *****************************************************************************************
536 
537 // *****************************************************************************************
538 // Extended CPUID function 4 - CPU Brand 3
539 // *****************************************************************************************
540 
541 // *****************************************************************************************
542 // Extended CPUID function 6 - Cache line information
543 // *****************************************************************************************
544 
545 
546 // *****************************************************************************************
547 // Extended CPUID function 7 - Invariant TSC
548 // *****************************************************************************************
549 
551 {
552  uint32_t :8; // 1-8
553  uint32_t INVTSC:1; // 9
554 };
555 
556 // Structure that matches the register structure
558 {
559  uint32_t eax;
560  struct intel_cpu_e7_b_S ebx;
561  uint32_t ecx;
562  uint32_t edx;
563 };
564 
565 // *****************************************************************************************
566 // Extended CPUID function 8 - Virtual/Physical Address size
567 // *****************************************************************************************
568 
570 {
571  uint32_t :9; // 1-9
572  uint32_t WBNOINVD:1; // 10
573  uint32_t :22; // 11-32
574 };
575 
576 // Structure that matches the register structure
578 {
579  uint32_t eax;
580  struct intel_cpu_e8_b_S ebx;
581  uint32_t ecx;
582  uint32_t edx;
583 };
584 
585 
586 
587 #endif // X86 & AMD64
588 
589 #endif /* OSAPI_MACHINE_CPU_COMMON_H_ */
intel_cpu_s16_a_S
Definition: machine_cpu_type_intel.h:405
intel_cpu_s1_c_S
Definition: machine_cpu_type_intel.h:60
intel_cpu_s6_S
Definition: machine_cpu_type_intel.h:220
intel_cpu_e1_d_S
Definition: machine_cpu_type_intel.h:500
intel_cpu_s16_c_S
Definition: machine_cpu_type_intel.h:418
intel_cpu_s16_S
Definition: machine_cpu_type_intel.h:426
intel_cpu_s1_S
Definition: machine_cpu_type_intel.h:135
intel_cpu_e7_S
Definition: machine_cpu_type_intel.h:557
intel_cpu_s1_b_S
Definition: machine_cpu_type_intel.h:51
intel_cpu_s7_a_S
< Intel Standard CPUID 7, register EAX
Definition: machine_cpu_type_intel.h:234
intel_cpu_s16_b_S
Definition: machine_cpu_type_intel.h:412
intel_cpu_s1_d_S
Definition: machine_cpu_type_intel.h:98
intel_cpu_s6_a_S
< Intel Standard CPUID 6, register EAX
Definition: machine_cpu_type_intel.h:166
intel_cpu_s7_c_S
Definition: machine_cpu_type_intel.h:278
intel_cpu_e7_b_S
Definition: machine_cpu_type_intel.h:550
intel_cpu_s6_c_S
Definition: machine_cpu_type_intel.h:200
intel_cpu_e1_S
Definition: machine_cpu_type_intel.h:519
intel_cpu_s7_S
Definition: machine_cpu_type_intel.h:330
intel_cpu_e1_c_S
Definition: machine_cpu_type_intel.h:464
intel_cpu_s7_b_S
Definition: machine_cpu_type_intel.h:240
intel_cpu_e8_S
Definition: machine_cpu_type_intel.h:577
intel_cpu_s7_1_a_S
Definition: machine_cpu_type_intel.h:340
intel_cpu_s7_1_S
Definition: machine_cpu_type_intel.h:349
intel_cpu_s6_b_S
Definition: machine_cpu_type_intel.h:193
intel_cpu_s7_d_S
Definition: machine_cpu_type_intel.h:309
intel_cpu_e8_b_S
Definition: machine_cpu_type_intel.h:569
intel_cpu_s1_a_S
< Intel Standard CPUID 1, register EAX
Definition: machine_cpu_type_intel.h:38
intel_cpu_s6_d_S
Definition: machine_cpu_type_intel.h:209