1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
|
/* inteltool - dump all registers on an Intel CPU + chipset based system */
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef INTELTOOL_H
#define INTELTOOL_H 1
#if defined(__linux__)
#include <linux/stddef.h>
#endif
#include <arch/mmio.h>
#include <commonlib/helpers.h>
#include <stdint.h>
#if defined(__linux__)
#include <sys/io.h>
#endif
#if (defined(__MACH__) && defined(__APPLE__))
/* DirectHW is available here: https://www.coreboot.org/DirectHW */
#define __DARWIN__
#include <DirectHW/DirectHW.h>
#endif
#ifdef __NetBSD__
#include <pciutils/pci.h>
#else
#include <pci/pci.h>
#endif
/* This #include is needed for freebsd_{rd,wr}msr. */
#if defined(__FreeBSD__)
#include <machine/cpufunc.h>
#endif
#ifdef __NetBSD__
static inline uint8_t inb(unsigned port)
{
uint8_t data;
__asm volatile("inb %w1,%0" : "=a" (data) : "d" (port));
return data;
}
static inline uint16_t inw(unsigned port)
{
uint16_t data;
__asm volatile("inw %w1,%0": "=a" (data) : "d" (port));
return data;
}
static inline uint32_t inl(unsigned port)
{
uint32_t data;
__asm volatile("inl %w1,%0": "=a" (data) : "d" (port));
return data;
}
#endif
#define INTELTOOL_VERSION "1.0"
/* Tested chipsets: */
#define PCI_VENDOR_ID_INTEL 0x8086
#define PCI_DEVICE_ID_INTEL_ICH 0x2410
#define PCI_DEVICE_ID_INTEL_ICH0 0x2420
#define PCI_DEVICE_ID_INTEL_ICH2 0x2440
#define PCI_DEVICE_ID_INTEL_ICH4 0x24c0
#define PCI_DEVICE_ID_INTEL_ICH4M 0x24cc
#define PCI_DEVICE_ID_INTEL_ICH5 0x24d0
#define PCI_DEVICE_ID_INTEL_ICH6 0x2640
#define PCI_DEVICE_ID_INTEL_ICH7DH 0x27b0
#define PCI_DEVICE_ID_INTEL_ICH7 0x27b8
#define PCI_DEVICE_ID_INTEL_ICH7M 0x27b9
#define PCI_DEVICE_ID_INTEL_ICH7MDH 0x27bd
#define PCI_DEVICE_ID_INTEL_NM10 0x27bc
#define PCI_DEVICE_ID_INTEL_ICH8 0x2810
#define PCI_DEVICE_ID_INTEL_ICH8M 0x2815
#define PCI_DEVICE_ID_INTEL_ICH8ME 0x2811
#define PCI_DEVICE_ID_INTEL_ICH9DH 0x2912
#define PCI_DEVICE_ID_INTEL_ICH9DO 0x2914
#define PCI_DEVICE_ID_INTEL_ICH9R 0x2916
#define PCI_DEVICE_ID_INTEL_ICH9 0x2918
#define PCI_DEVICE_ID_INTEL_ICH9M 0x2919
#define PCI_DEVICE_ID_INTEL_ICH9ME 0x2917
#define PCI_DEVICE_ID_INTEL_ICH10DO 0x3a14
#define PCI_DEVICE_ID_INTEL_ICH10R 0x3a16
#define PCI_DEVICE_ID_INTEL_ICH10 0x3a18
#define PCI_DEVICE_ID_INTEL_ICH10D 0x3a1a
#define PCI_DEVICE_ID_INTEL_3400_DESKTOP 0x3b00
#define PCI_DEVICE_ID_INTEL_3400_MOBILE 0x3b01
#define PCI_DEVICE_ID_INTEL_P55 0x3b02
#define PCI_DEVICE_ID_INTEL_PM55 0x3b03
#define PCI_DEVICE_ID_INTEL_H55 0x3b06
#define PCI_DEVICE_ID_INTEL_QM57 0x3b07
#define PCI_DEVICE_ID_INTEL_H57 0x3b08
#define PCI_DEVICE_ID_INTEL_HM55 0x3b09
#define PCI_DEVICE_ID_INTEL_Q57 0x3b0a
#define PCI_DEVICE_ID_INTEL_HM57 0x3b0b
#define PCI_DEVICE_ID_INTEL_3400_MOBILE_SFF 0x3b0d
#define PCI_DEVICE_ID_INTEL_B55_A 0x3b0e
#define PCI_DEVICE_ID_INTEL_QS57 0x3b0f
#define PCI_DEVICE_ID_INTEL_3400 0x3b12
#define PCI_DEVICE_ID_INTEL_3420 0x3b14
#define PCI_DEVICE_ID_INTEL_3450 0x3b16
#define PCI_DEVICE_ID_INTEL_B55_B 0x3b1e
#define PCI_DEVICE_ID_INTEL_SCH_POULSBO_LPC 0x8119
#define PCI_DEVICE_ID_INTEL_ICELAKE_LP_U 0x3482
#define PCI_DEVICE_ID_INTEL_Z68 0x1c44
#define PCI_DEVICE_ID_INTEL_P67 0x1c46
#define PCI_DEVICE_ID_INTEL_UM67 0x1c47
#define PCI_DEVICE_ID_INTEL_HM65 0x1c49
#define PCI_DEVICE_ID_INTEL_H67 0x1c4a
#define PCI_DEVICE_ID_INTEL_HM67 0x1c4b
#define PCI_DEVICE_ID_INTEL_Q65 0x1c4c
#define PCI_DEVICE_ID_INTEL_QS67 0x1c4d
#define PCI_DEVICE_ID_INTEL_Q67 0x1c4e
#define PCI_DEVICE_ID_INTEL_QM67 0x1c4f
#define PCI_DEVICE_ID_INTEL_B65 0x1c50
#define PCI_DEVICE_ID_INTEL_C202 0x1c52
#define PCI_DEVICE_ID_INTEL_C204 0x1c54
#define PCI_DEVICE_ID_INTEL_C206 0x1c56
#define PCI_DEVICE_ID_INTEL_H61 0x1c5c
#define PCI_DEVICE_ID_INTEL_Z77 0x1e44
#define PCI_DEVICE_ID_INTEL_Z75 0x1e46
#define PCI_DEVICE_ID_INTEL_Q77 0x1e47
#define PCI_DEVICE_ID_INTEL_Q75 0x1e48
#define PCI_DEVICE_ID_INTEL_B75 0x1e49
#define PCI_DEVICE_ID_INTEL_H77 0x1e4a
#define PCI_DEVICE_ID_INTEL_C216 0x1e53
#define PCI_DEVICE_ID_INTEL_QM77 0x1e55
#define PCI_DEVICE_ID_INTEL_QS77 0x1e56
#define PCI_DEVICE_ID_INTEL_HM77 0x1e57
#define PCI_DEVICE_ID_INTEL_UM77 0x1e58
#define PCI_DEVICE_ID_INTEL_HM76 0x1e59
#define PCI_DEVICE_ID_INTEL_HM75 0x1e5d
#define PCI_DEVICE_ID_INTEL_HM70 0x1e5e
#define PCI_DEVICE_ID_INTEL_NM70 0x1e5f
#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_FULL 0x9c41
#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_PREM 0x9c43
#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_BASE 0x9c45
#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_PREM 0x9cc3
#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP 0x9cc5
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_SATA 0xa102
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_P2SB 0xa120
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_PRE 0xa141
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SATA 0x9d03
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_PRE 0x9d41
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_U_BASE_SKL 0x9d43
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_Y_PREM_SKL 0x9d46
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_U_PREM_SKL 0x9d48
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_U_BASE_KBL 0x9d53
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_Y_PREM_KBL 0x9d56
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_U_PREM_KBL 0x9d58
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_U_IHDCP_BASE 0x9d50
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_U_IHDCP_PREM 0x9d4e
#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_Y_IHDCP_PREM 0x9d4b
#define PCI_DEVICE_ID_INTEL_CANNONPOINT_LP_U_PREM 0x9d84
#define PCI_DEVICE_ID_INTEL_COMETPOINT_LP_U_PREM 0x0284
#define PCI_DEVICE_ID_INTEL_COMETPOINT_LP_U_BASE 0x0285
#define PCI_DEVICE_ID_INTEL_TIGERPOINT_U_SUPER 0xa081
#define PCI_DEVICE_ID_INTEL_TIGERPOINT_U_PREM 0xa082
#define PCI_DEVICE_ID_INTEL_TIGERPOINT_U_BASE 0xa083
#define PCI_DEVICE_ID_INTEL_TIGERPOINT_Y_SUPER 0xa086
#define PCI_DEVICE_ID_INTEL_TIGERPOINT_Y_PREM 0xa087
#define PCI_DEVICE_ID_INTEL_H110 0xa143
#define PCI_DEVICE_ID_INTEL_H170 0xa144
#define PCI_DEVICE_ID_INTEL_Z170 0xa145
#define PCI_DEVICE_ID_INTEL_Q170 0xa146
#define PCI_DEVICE_ID_INTEL_Q150 0xa147
#define PCI_DEVICE_ID_INTEL_B150 0xa148
#define PCI_DEVICE_ID_INTEL_C236 0xa149
#define PCI_DEVICE_ID_INTEL_C232 0xa14a
#define PCI_DEVICE_ID_INTEL_QM170 0xa14d
#define PCI_DEVICE_ID_INTEL_HM170 0xa14e
#define PCI_DEVICE_ID_INTEL_CM236 0xa150
#define PCI_DEVICE_ID_INTEL_HM175 0xa152
#define PCI_DEVICE_ID_INTEL_QM175 0xa153
#define PCI_DEVICE_ID_INTEL_CM238 0xa154
#define PCI_DEVICE_ID_INTEL_C621 0xa1c1
#define PCI_DEVICE_ID_INTEL_C622 0xa1c2
#define PCI_DEVICE_ID_INTEL_C624 0xa1c3
#define PCI_DEVICE_ID_INTEL_C625 0xa1c4
#define PCI_DEVICE_ID_INTEL_C626 0xa1c5
#define PCI_DEVICE_ID_INTEL_C627 0xa1c6
#define PCI_DEVICE_ID_INTEL_C628 0xa1c7
#define PCI_DEVICE_ID_INTEL_C629 0xa1ca
#define PCI_DEVICE_ID_INTEL_C621A 0xa1cb
#define PCI_DEVICE_ID_INTEL_C627A 0xa1cc
#define PCI_DEVICE_ID_INTEL_C629A 0xa1cd
#define PCI_DEVICE_ID_INTEL_C624_SUPER 0xa242
#define PCI_DEVICE_ID_INTEL_C627_SUPER_1 0xa243
#define PCI_DEVICE_ID_INTEL_C621_SUPER 0xa244
#define PCI_DEVICE_ID_INTEL_C627_SUPER_2 0xa245
#define PCI_DEVICE_ID_INTEL_C628_SUPER 0xa246
#define PCI_DEVICE_ID_INTEL_C621A_SUPER 0xa24a
#define PCI_DEVICE_ID_INTEL_C627A_SUPER 0xa24b
#define PCI_DEVICE_ID_INTEL_C629A_SUPER 0xa24c
#define PCI_DEVICE_ID_INTEL_EBG 0x1b81
#define PCI_DEVICE_ID_INTEL_H270 0xa2c4
#define PCI_DEVICE_ID_INTEL_Z270 0xa2c5
#define PCI_DEVICE_ID_INTEL_Q270 0xa2c6
#define PCI_DEVICE_ID_INTEL_Q250 0xa2c7
#define PCI_DEVICE_ID_INTEL_B250 0xa2c8
#define PCI_DEVICE_ID_INTEL_Z370 0xa2c9
#define PCI_DEVICE_ID_INTEL_H310C 0xa2ca
#define PCI_DEVICE_ID_INTEL_X299 0xa2d2
#define PCI_DEVICE_ID_INTEL_H310 0xa303
#define PCI_DEVICE_ID_INTEL_H370 0xa304
#define PCI_DEVICE_ID_INTEL_Z390 0xa305
#define PCI_DEVICE_ID_INTEL_Q370 0xa306
#define PCI_DEVICE_ID_INTEL_B360 0xa308
#define PCI_DEVICE_ID_INTEL_C246 0xa309
#define PCI_DEVICE_ID_INTEL_C242 0xa30a
#define PCI_DEVICE_ID_INTEL_QM370 0xa30c
#define PCI_DEVICE_ID_INTEL_HM370 0xa30d
#define PCI_DEVICE_ID_INTEL_CM246 0xa30e
#define PCI_DEVICE_ID_INTEL_Q570 0x4384
#define PCI_DEVICE_ID_INTEL_Z590 0x4385
#define PCI_DEVICE_ID_INTEL_H570 0x4386
#define PCI_DEVICE_ID_INTEL_B560 0x4387
#define PCI_DEVICE_ID_INTEL_H510 0x4388
#define PCI_DEVICE_ID_INTEL_WM590 0x4389
#define PCI_DEVICE_ID_INTEL_QM580 0x438a
#define PCI_DEVICE_ID_INTEL_HM570 0x438b
#define PCI_DEVICE_ID_INTEL_C252 0x438c
#define PCI_DEVICE_ID_INTEL_C256 0x438d
#define PCI_DEVICE_ID_INTEL_W580 0x438f
#define PCI_DEVICE_ID_INTEL_H610 0x7a87
#define PCI_DEVICE_ID_INTEL_B660 0x7a86
#define PCI_DEVICE_ID_INTEL_H670 0x7a85
#define PCI_DEVICE_ID_INTEL_Q670 0x7a83
#define PCI_DEVICE_ID_INTEL_Z690 0x7a84
#define PCI_DEVICE_ID_INTEL_W680 0x7a88
#define PCI_DEVICE_ID_INTEL_WM690 0x7a8d
#define PCI_DEVICE_ID_INTEL_HM670 0x7a8c
#define PCI_DEVICE_ID_INTEL_R680E 0x7a90
#define PCI_DEVICE_ID_INTEL_Q670E 0x7a91
#define PCI_DEVICE_ID_INTEL_H610E 0x7a92
#define PCI_DEVICE_ID_INTEL_W790 0x7a8a
#define PCI_DEVICE_ID_INTEL_Z790 0x7a04
#define PCI_DEVICE_ID_INTEL_H770 0x7a05
#define PCI_DEVICE_ID_INTEL_B760 0x7a06
#define PCI_DEVICE_ID_INTEL_HM770 0x7a0c
#define PCI_DEVICE_ID_INTEL_WM790 0x7a0d
#define PCI_DEVICE_ID_INTEL_C262 0x7a14
#define PCI_DEVICE_ID_INTEL_C266 0x7a13
#define PCI_DEVICE_ID_INTEL_MTL_0 0x7e00
#define PCI_DEVICE_ID_INTEL_MTL_1 0x7e01
#define PCI_DEVICE_ID_INTEL_MTL_2 0x7e02
#define PCI_DEVICE_ID_INTEL_MTL_3 0x7e03
#define PCI_DEVICE_ID_INTEL_MTL_4 0x7e04
#define PCI_DEVICE_ID_INTEL_MTL_5 0x7e05
#define PCI_DEVICE_ID_INTEL_MTL_6 0x7e06
#define PCI_DEVICE_ID_INTEL_MTL_7 0x7e07
#define PCI_DEVICE_ID_INTEL_82810 0x7120
#define PCI_DEVICE_ID_INTEL_82810_DC 0x7122
#define PCI_DEVICE_ID_INTEL_82810E_DC 0x7124
#define PCI_DEVICE_ID_INTEL_82830M 0x3575
#define PCI_DEVICE_ID_INTEL_82845 0x1a30
#define PCI_DEVICE_ID_INTEL_82865 0x2570
#define PCI_DEVICE_ID_INTEL_82915 0x2580
#define PCI_DEVICE_ID_INTEL_82945P 0x2770
#define PCI_DEVICE_ID_INTEL_82945GM 0x27a0
#define PCI_DEVICE_ID_INTEL_82945GSE 0x27ac
#define PCI_DEVICE_ID_INTEL_82946 0x2970
#define PCI_DEVICE_ID_INTEL_82965PM 0x2a00
#define PCI_DEVICE_ID_INTEL_82Q965 0x2990
#define PCI_DEVICE_ID_INTEL_82975X 0x277c
#define PCI_DEVICE_ID_INTEL_82Q35 0x29b0
#define PCI_DEVICE_ID_INTEL_82G33 0x29c0
#define PCI_DEVICE_ID_INTEL_82Q33 0x29d0
#define PCI_DEVICE_ID_INTEL_82X38 0x29e0
#define PCI_DEVICE_ID_INTEL_32X0 0x29f0
#define PCI_DEVICE_ID_INTEL_82XX4X 0x2a40
#define PCI_DEVICE_ID_INTEL_82Q45 0x2e10
#define PCI_DEVICE_ID_INTEL_82G45 0x2e20
#define PCI_DEVICE_ID_INTEL_82G41 0x2e30
#define PCI_DEVICE_ID_INTEL_82B43 0x2e40
#define PCI_DEVICE_ID_INTEL_82B43_2 0x2e90
#define PCI_DEVICE_ID_INTEL_C8_MOBILE 0x8c41
#define PCI_DEVICE_ID_INTEL_C8_DESKTOP 0x8c42
#define PCI_DEVICE_ID_INTEL_Z87 0x8c44
#define PCI_DEVICE_ID_INTEL_Z85 0x8c46
#define PCI_DEVICE_ID_INTEL_HM86 0x8c49
#define PCI_DEVICE_ID_INTEL_H87 0x8c4a
#define PCI_DEVICE_ID_INTEL_HM87 0x8c4b
#define PCI_DEVICE_ID_INTEL_Q85 0x8c4c
#define PCI_DEVICE_ID_INTEL_Q87 0x8c4e
#define PCI_DEVICE_ID_INTEL_QM87 0x8c4f
#define PCI_DEVICE_ID_INTEL_B85 0x8c50
#define PCI_DEVICE_ID_INTEL_C222 0x8c52
#define PCI_DEVICE_ID_INTEL_C224 0x8c54
#define PCI_DEVICE_ID_INTEL_C226 0x8c56
#define PCI_DEVICE_ID_INTEL_H81 0x8c5c
#define PCI_DEVICE_ID_INTEL_C9_MOBILE 0x8cc1
#define PCI_DEVICE_ID_INTEL_C9_DESKTOP 0x8cc2
#define PCI_DEVICE_ID_INTEL_HM97 0x8cc3
#define PCI_DEVICE_ID_INTEL_Z97 0x8cc4
#define PCI_DEVICE_ID_INTEL_H97 0x8cc6
#define PCI_DEVICE_ID_INTEL_82X58 0x3405
#define PCI_DEVICE_ID_INTEL_SCH_POULSBO 0x8100
#define PCI_DEVICE_ID_INTEL_ATOM_DXXX 0xa000
#define PCI_DEVICE_ID_INTEL_I63XX 0x2670
#define PCI_DEVICE_ID_INTEL_I5000X 0x25c0
#define PCI_DEVICE_ID_INTEL_I5000Z 0x25d0
#define PCI_DEVICE_ID_INTEL_I5000V 0x25d4
#define PCI_DEVICE_ID_INTEL_I5000P 0x25d8
#define PCI_DEVICE_ID_INTEL_ADL_P 0x5182
#define PCI_DEVICE_ID_INTEL_ADL_M 0x5187
#define PCI_DEVICE_ID_INTEL_RPL_P 0x519d
#define PCI_DEVICE_ID_INTEL_ADL_N 0x5481
#define PCI_DEVICE_ID_INTEL_EHL 0x4b00
#define PCI_DEVICE_ID_INTEL_JSL 0x4d87
/* untested, but almost identical to D-series */
#define PCI_DEVICE_ID_INTEL_ATOM_NXXX 0xa010
#define PCI_DEVICE_ID_INTEL_82443LX 0x7180
/* 82443BX has a different device ID if AGP is disabled (hardware-wise). */
#define PCI_DEVICE_ID_INTEL_82443BX 0x7190
#define PCI_DEVICE_ID_INTEL_82443BX_NO_AGP 0x7192
/* 82371AB/EB/MB use the same device ID value. */
#define PCI_DEVICE_ID_INTEL_82371XX 0x7110
/* Bay Trail */
#define PCI_DEVICE_ID_INTEL_BAYTRAIL 0x0f00 /* SOC Transaction Router */
#define PCI_DEVICE_ID_INTEL_BAYTRAIL_LPC 0x0f1c
#define PCI_DEVICE_ID_INTEL_BAYTRAIL_GFX 0x0f31
#define CPUID_BAYTRAIL 0x30670
#define PCI_DEVICE_ID_INTEL_APL_LPC 0x5ae8
#define PCI_DEVICE_ID_INTEL_DNV_LPC 0x19dc
#define PCI_DEVICE_ID_INTEL_GLK_LPC 0x31E8
/* Elkhart Lake */
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_1 0x4514
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_2 0x4516
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_3 0x4518
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_4 0x451a
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_5 0x4528
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_6 0x452a
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_7 0x452c
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_8 0x452e
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_9 0x4532
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_10 0x4534
#define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_11 0x4536
/* Intel starts counting these generations with the integration of the DRAM controller */
#define PCI_DEVICE_ID_INTEL_CORE_0TH_GEN 0xd132 /* Nehalem */
#define PCI_DEVICE_ID_INTEL_CORE_1ST_GEN_D 0x0040 /* Clarkdale (Westmere Desktop) */
#define PCI_DEVICE_ID_INTEL_CORE_1ST_GEN_M 0x0044 /* Arrandale (Westmere Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_1ST_GEN_0048 0x0048 /* Unknown Westmere */
#define PCI_DEVICE_ID_INTEL_CORE_2ND_GEN_D 0x0100 /* Sandy Bridge (Desktop) */
#define PCI_DEVICE_ID_INTEL_CORE_2ND_GEN_M 0x0104 /* Sandy Bridge (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_2ND_GEN_E3 0x0108 /* Sandy Bridge (Xeon E3) */
#define PCI_DEVICE_ID_INTEL_CORE_3RD_GEN_D 0x0150 /* Ivy Bridge (Desktop) */
#define PCI_DEVICE_ID_INTEL_CORE_3RD_GEN_M 0x0154 /* Ivy Bridge (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_3RD_GEN_E3 0x0158 /* Ivy Bridge (Xeon E3 v2) */
#define PCI_DEVICE_ID_INTEL_CORE_3RD_GEN_015c 0x015c /* Ivy Bridge (?) */
#define PCI_DEVICE_ID_INTEL_CORE_4TH_GEN_D 0x0c00 /* Haswell (Desktop) */
#define PCI_DEVICE_ID_INTEL_CORE_4TH_GEN_M 0x0c04 /* Haswell (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_4TH_GEN_E3 0x0c08 /* Haswell (Xeon E3 v3) */
#define PCI_DEVICE_ID_INTEL_CORE_4TH_GEN_U 0x0a04 /* Haswell-ULT */
#define PCI_DEVICE_ID_INTEL_CORE_5TH_GEN_U 0x1604 /* Broadwell-ULT */
#define PCI_DEVICE_ID_INTEL_CORE_5TH_GEN_D 0x1610 /* Broadwell (Desktop) */
#define PCI_DEVICE_ID_INTEL_CORE_5TH_GEN_M 0x1614 /* Broadwell (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_6TH_GEN_D2 0x190f /* Skylake (Desktop) */
#define PCI_DEVICE_ID_INTEL_CORE_6TH_GEN_U 0x1904 /* Skylake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_6TH_GEN_Y 0x190c /* Skylake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_6TH_GEN_M 0x1910 /* Skylake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_6TH_GEN_WST 0x1918 /* Skylake (Workstation) */
#define PCI_DEVICE_ID_INTEL_CORE_6TH_GEN_D 0x191f /* Skylake (Desktop) */
#define PCI_DEVICE_ID_INTEL_CORE_6TH_GEN_E 0x2020 /* Skylake-E (Server) */
#define PCI_DEVICE_ID_INTEL_CORE_7TH_GEN_U 0x5904 /* Kabylake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_7TH_GEN_Y 0x590C /* Kabylake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_7TH_GEN_U_Q 0x5914 /* Kabylake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_7TH_GEN_E3 0x5918 /* Kabylake Xeon E3 */
#define PCI_DEVICE_ID_INTEL_CORE_8TH_GEN_U_1 0x3ed0 /* Coffeelake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_8TH_GEN_U_2 0x3e34 /* Whiskeylake (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_10TH_GEN_U 0x8a12 /* Icelake U */
#define PCI_DEVICE_ID_INTEL_CORE_CML_U1 0x9b51 /* Cometlake U (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_CML_U2 0x9b61 /* Cometlake U (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_CML_U3 0x9b71 /* Cometlake U (Mobile) */
#define PCI_DEVICE_ID_INTEL_CORE_TGL_ID_U_2 0x9a04 /* Tigerlake UP3 2 Cores */
#define PCI_DEVICE_ID_INTEL_CORE_TGL_ID_U_4 0x9a14 /* Tigerlake UP3 4 Cores */
#define PCI_DEVICE_ID_INTEL_CORE_TGL_ID_Y_2 0x9a02 /* Tigerlake UP4 2 Cores */
#define PCI_DEVICE_ID_INTEL_CORE_TGL_ID_Y_4 0x9a12 /* Tigerlake UP4 4 Cores */
#define PCI_DEVICE_ID_INTEL_CORE_TGL_ID_H_4 0x9a16 /* Tigerlake H 4 Cores */
#define PCI_DEVICE_ID_INTEL_CORE_TGL_ID_H_6 0x9a26 /* Tigerlake H 6 Cores */
#define PCI_DEVICE_ID_INTEL_CORE_TGL_ID_H_8 0x9a36 /* Tigerlake H 8 Cores */
#define PCI_DEVICE_ID_INTEL_HEWITTLAKE 0x6f00 /* Hewitt Lake */
#define PCI_DEVICE_ID_INTEL_SAPPHIRERAPIDS_SP 0x09a2 /* Sapphire Rapids SP */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_S_8_8 0x4660 /* Alderlake S LGA 8+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_S_8_4 0x4668 /* Alderlake S LGA 8+4 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_S_6_4 0x4648 /* Alderlake S LGA 6+4 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_S_8_0 0x4670 /* Alderlake S LGA 8+0 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_S_6_0 0x4650 /* Alderlake S LGA 6+0 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_HX_8_8 0x4637 /* Alderlake HX 8+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_HX_6_8 0x463B /* Alderlake HX 6+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_HX_4_8 0x4623 /* Alderlake HX 4+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_P_6_8 0x4641 /* Alderlake P 6+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_P_4_8 0x4621 /* Alderlake P 4+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_P_2_8 0x4601 /* Alderlake P 2+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_N_0_8 0x4617 /* Alderlake N 0+8 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_N_0_4 0x461b /* Alderlake N 0+4 */
#define PCI_DEVICE_ID_INTEL_CORE_ADL_ID_N_0_4_1 0x461c /* Alderlake N 0+4 */
#define PCI_DEVICE_ID_INTEL_CORE_MTL_ID_M 0x7D00 /* Meteorlake M */
#define PCI_DEVICE_ID_INTEL_CORE_MTL_ID_P_1 0x7D01 /* Meteorlake P */
#define PCI_DEVICE_ID_INTEL_CORE_MTL_ID_P_2 0x7D02 /* Meteorlake P */
#define PCI_DEVICE_ID_INTEL_CORE_MTL_ID_P_3 0x7d14 /* Meteorlake P */
#define PCI_DEVICE_ID_INTEL_CORE_MTL_ID_P_4 0x7d15 /* Meteorlake P */
#define PCI_DEVICE_ID_INTEL_CORE_MTL_ID_P_5 0x7d16 /* Meteorlake P */
#define PCI_DEVICE_ID_INTEL_CORE_RPL_ID_H_8_6 0xa706 /* Raptorlake H 8+6 */
/* Intel GPUs */
#define PCI_DEVICE_ID_INTEL_G35_EXPRESS 0x2982
#define PCI_DEVICE_ID_INTEL_G35_EXPRESS_1 0x2983
#define PCI_DEVICE_ID_INTEL_965_EXPRESS 0x2a02
#define PCI_DEVICE_ID_INTEL_965_EXPRESS_1 0x2a03
#define PCI_DEVICE_ID_INTEL_965_EXPRESS_2 0x2a12
#define PCI_DEVICE_ID_INTEL_965_EXPRESS_3 0x2a13
#define PCI_DEVICE_ID_INTEL_4_SERIES 0x2a42
#define PCI_DEVICE_ID_INTEL_4_SERIES_1 0x2a43
#define PCI_DEVICE_ID_INTEL_G45 0x2e22
#define PCI_DEVICE_ID_INTEL_G45_1 0x2e23
#define PCI_DEVICE_ID_INTEL_Q45 0x2e12
#define PCI_DEVICE_ID_INTEL_Q45_1 0x2e13
#define PCI_DEVICE_ID_INTEL_G41 0x2e32
#define PCI_DEVICE_ID_INTEL_G41_1 0x2e33
#define PCI_DEVICE_ID_INTEL_B43 0x2e42
#define PCI_DEVICE_ID_INTEL_B43_1 0x2e43
#define PCI_DEVICE_ID_INTEL_B43_2 0x2e92
#define PCI_DEVICE_ID_INTEL_B43_3 0x2e93
#define PCI_DEVICE_ID_INTEL_HD_GRAPHICS 0x0046
#define PCI_DEVICE_ID_INTEL_HD_GRAPHICS_1 0x0042
#define PCI_DEVICE_ID_INTEL_HD_GRAPHICS_2 0x0106
#define PCI_DEVICE_ID_INTEL_HD_2000 0x0102
#define PCI_DEVICE_ID_INTEL_HD_2000_1 0x0106
#define PCI_DEVICE_ID_INTEL_HD_3000 0x0116
#define PCI_DEVICE_ID_INTEL_HD_3000_1 0x0112
#define PCI_DEVICE_ID_INTEL_HD_3000_2 0x0116
#define PCI_DEVICE_ID_INTEL_HD_3000_3 0x0122
#define PCI_DEVICE_ID_INTEL_HD_3000_4 0x0126
#define PCI_DEVICE_ID_INTEL_HD_3000_5 0x0116
#define PCI_DEVICE_ID_INTEL_HD_2500 0x0152
#define PCI_DEVICE_ID_INTEL_HD_2500_1 0x0156
#define PCI_DEVICE_ID_INTEL_HD_2500_2 0x015A
#define PCI_DEVICE_ID_INTEL_HD_4000 0x0162
#define PCI_DEVICE_ID_INTEL_HD_4000_1 0x0166
#define PCI_DEVICE_ID_INTEL_HD_4000_2 0x016A
#define PCI_DEVICE_ID_INTEL_HD_4600 0x0412
#define PCI_DEVICE_ID_INTEL_HD_4600_1 0x0416
#define PCI_DEVICE_ID_INTEL_HD_4400 0x041E
#define PCI_DEVICE_ID_INTEL_HD_4400_1 0x0A16
#define PCI_DEVICE_ID_INTEL_HD_5000 0x0422
#define PCI_DEVICE_ID_INTEL_HD_5000_1 0x0426
#define PCI_DEVICE_ID_INTEL_HD_5000_2 0x042A
#define PCI_DEVICE_ID_INTEL_HD_510 0x1902
#define PCI_DEVICE_ID_INTEL_HD_515 0x191E
#define PCI_DEVICE_ID_INTEL_HD_520 0x1916
#define PCI_DEVICE_ID_INTEL_HD_530_1 0x191B
#define PCI_DEVICE_ID_INTEL_HD_530_2 0x1912
#define PCI_DEVICE_ID_INTEL_UHD_615_1 0x591C
#define PCI_DEVICE_ID_INTEL_UHD_615_2 0x591E
#define PCI_DEVICE_ID_INTEL_UHD_617 0x87C0
#define PCI_DEVICE_ID_INTEL_UHD_620_1 0x5917
#define PCI_DEVICE_ID_INTEL_UHD_620_2 0x3EA0
#define PCI_DEVICE_ID_INTEL_UHD_620_3 0x5916
#define PCI_DEVICE_ID_INTEL_UHD_630_1 0x3E92
#define PCI_DEVICE_ID_INTEL_UHD_630_2 0x3E9B
#define PCI_DEVICE_ID_INTEL_UHD_630_3 0x3E91
#define PCI_DEVICE_ID_INTEL_UHD_630_4 0x5912
#define PCI_DEVICE_ID_INTEL_UHD_630_5 0x591B
#define PCI_DEVICE_ID_INTEL_UHD_630_6 0x5902
#define PCI_DEVICE_ID_INTEL_UHD_630_7 0x3E98
#define PCI_DEVICE_ID_INTEL_UHD_640 0x5926
#define PCI_DEVICE_ID_INTEL_IRIS_540 0x1926
#define PCI_DEVICE_ID_INTEL_IRIS_550 0x1927
#define PCI_DEVICE_ID_INTEL_IRIS_PRO_580 0x193B
#define PCI_DEVICE_ID_INTEL_IRIS_PLUS_650 0x5927
#define PCI_DEVICE_ID_INTEL_IRIS_PLUS_655 0x3EA5
#define PCI_DEVICE_ID_INTEL_IRIS_PLUS_G7 0x8A52
#define PCI_DEVICE_ID_INTEL_UHD_GRAPHICS 0x9b41
#define PCI_DEVICE_ID_INTEL_TGL_GT2_Y 0x9A40
#define PCI_DEVICE_ID_INTEL_TGL_GT2_UY 0x9A49
#define PCI_DEVICE_ID_INTEL_TGL_GT1 0x9A60
#define PCI_DEVICE_ID_INTEL_TGL_GT1_2 0x9A68
#define PCI_DEVICE_ID_INTEL_TGL_GT2_ULT_1 0x9A78
#define PCI_DEVICE_ID_INTEL_TGL_GT2_ULT_2 0x9A70
/* Elkhart Lake */
#define PCI_DEVICE_ID_INTEL_EHL_GT1_1 0x4541
#define PCI_DEVICE_ID_INTEL_EHL_GT1_2 0x4551
#define PCI_DEVICE_ID_INTEL_EHL_GT1_3 0x4555
#define PCI_DEVICE_ID_INTEL_EHL_GT1_4 0x4557
#define PCI_DEVICE_ID_INTEL_EHL_GT1_5 0x4570
#define PCI_DEVICE_ID_INTEL_EHL_GT1_6 0x4571
#define PCI_DEVICE_ID_INTEL_ADL_S_GT1 0x4680
#define PCI_DEVICE_ID_INTEL_ADL_S_GT1_2 0x4682
#define PCI_DEVICE_ID_INTEL_ADL_S_GT1_3 0x4690
#define PCI_DEVICE_ID_INTEL_ADL_S_GT1_4 0x4692
#define PCI_DEVICE_ID_INTEL_ADL_N_UHD 0x46D0
#define PCI_DEVICE_ID_INTEL_ADL_N_UHD_2 0x46D1
#define PCI_DEVICE_ID_INTEL_ADL_N_UHD_3 0x46D2
#define PCI_DEVICE_ID_INTEL_MTL_M_GT2 0x7d40
#define PCI_DEVICE_ID_INTEL_MTL_P_GT2_1 0x7d45
#define PCI_DEVICE_ID_INTEL_MTL_P_GT2_2 0x7d50
#define PCI_DEVICE_ID_INTEL_MTL_P_GT2_3 0x7d55
#define PCI_DEVICE_ID_INTEL_MTL_P_GT2_4 0x7d60
#define PCI_DEVICE_ID_INTEL_RPL_H_IRIS_XE 0xa7a0
#if !defined(__DARWIN__) && !defined(__FreeBSD__)
typedef struct { uint32_t hi, lo; } msr_t;
#endif
#if defined (__FreeBSD__)
/* FreeBSD already has conflicting definitions for wrmsr/rdmsr. */
#undef rdmsr
#undef wrmsr
#define rdmsr freebsd_rdmsr
#define wrmsr freebsd_wrmsr
typedef struct { uint32_t hi, lo; } msr_t;
#endif
typedef struct { uint16_t addr; int size; char *name; } io_register_t;
typedef struct {
uint32_t eax;
uint32_t ebx;
uint32_t ecx;
uint32_t edx;
} cpuid_result_t;
void *map_physical(uint64_t phys_addr, size_t len);
void unmap_physical(void *virt_addr, size_t len);
unsigned int cpuid(unsigned int op);
int print_intel_msrs(unsigned int range_start, unsigned int range_end);
int print_mchbar(struct pci_dev *nb, struct pci_access *pacc, const char *dump_spd_file);
int print_pmbase(struct pci_dev *sb, struct pci_access *pacc);
int print_lpc(struct pci_dev *sb, struct pci_access *pacc);
int print_rcba(struct pci_dev *sb);
void print_iobp(struct pci_dev *sb, volatile uint8_t *rcba);
int print_gpios(struct pci_dev *sb, int show_all, int show_diffs);
const struct gpio_community *const *get_gpio_communities(struct pci_dev *const sb,
size_t* community_count,
size_t* pad_stepping);
void print_gpio_groups(struct pci_dev *sb);
int print_epbar(struct pci_dev *nb);
int print_dmibar(struct pci_dev *nb);
int print_pciexbar(struct pci_dev *nb);
int print_ambs(struct pci_dev *nb, struct pci_access *pacc);
int print_spi(struct pci_dev *sb, struct pci_access *pacc);
int print_gfx(struct pci_dev *gfx);
int print_ahci(struct pci_dev *ahci);
int print_sgx(void);
void print_tme(void);
void print_keylocker(void);
void ivybridge_dump_timings(const char *dump_spd_file);
#endif
|