File indexing completed on 2025-05-11 08:23:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152 #ifndef __ACTBL2_H__
0153 #define __ACTBL2_H__
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171 #define ACPI_SIG_AGDI "AGDI"
0172 #define ACPI_SIG_APMT "APMT"
0173 #define ACPI_SIG_BDAT "BDAT"
0174 #define ACPI_SIG_CCEL "CCEL"
0175 #define ACPI_SIG_CDAT "CDAT"
0176 #define ACPI_SIG_IORT "IORT"
0177 #define ACPI_SIG_IVRS "IVRS"
0178 #define ACPI_SIG_LPIT "LPIT"
0179 #define ACPI_SIG_MADT "APIC"
0180 #define ACPI_SIG_MCFG "MCFG"
0181 #define ACPI_SIG_MCHI "MCHI"
0182 #define ACPI_SIG_MPAM "MPAM"
0183 #define ACPI_SIG_MPST "MPST"
0184 #define ACPI_SIG_MSDM "MSDM"
0185 #define ACPI_SIG_NFIT "NFIT"
0186 #define ACPI_SIG_NHLT "NHLT"
0187 #define ACPI_SIG_PCCT "PCCT"
0188 #define ACPI_SIG_PDTT "PDTT"
0189 #define ACPI_SIG_PHAT "PHAT"
0190 #define ACPI_SIG_PMTT "PMTT"
0191 #define ACPI_SIG_PPTT "PPTT"
0192 #define ACPI_SIG_PRMT "PRMT"
0193 #define ACPI_SIG_RASF "RASF"
0194 #define ACPI_SIG_RAS2 "RAS2"
0195 #define ACPI_SIG_RGRT "RGRT"
0196 #define ACPI_SIG_RHCT "RHCT"
0197 #define ACPI_SIG_SBST "SBST"
0198 #define ACPI_SIG_SDEI "SDEI"
0199 #define ACPI_SIG_SDEV "SDEV"
0200 #define ACPI_SIG_SVKL "SVKL"
0201 #define ACPI_SIG_TDEL "TDEL"
0202
0203
0204
0205
0206
0207
0208 #pragma pack(1)
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232 typedef struct acpi_table_aest
0233 {
0234 ACPI_TABLE_HEADER Header;
0235
0236 } ACPI_TABLE_AEST;
0237
0238
0239
0240 typedef struct acpi_aest_hdr
0241 {
0242 UINT8 Type;
0243 UINT16 Length;
0244 UINT8 Reserved;
0245 UINT32 NodeSpecificOffset;
0246 UINT32 NodeInterfaceOffset;
0247 UINT32 NodeInterruptOffset;
0248 UINT32 NodeInterruptCount;
0249 UINT64 TimestampRate;
0250 UINT64 Reserved1;
0251 UINT64 ErrorInjectionRate;
0252
0253 } ACPI_AEST_HEADER;
0254
0255
0256
0257 #define ACPI_AEST_PROCESSOR_ERROR_NODE 0
0258 #define ACPI_AEST_MEMORY_ERROR_NODE 1
0259 #define ACPI_AEST_SMMU_ERROR_NODE 2
0260 #define ACPI_AEST_VENDOR_ERROR_NODE 3
0261 #define ACPI_AEST_GIC_ERROR_NODE 4
0262 #define ACPI_AEST_PCIE_ERROR_NODE 5
0263 #define ACPI_AEST_PROXY_ERROR_NODE 6
0264 #define ACPI_AEST_NODE_TYPE_RESERVED 7
0265
0266
0267
0268
0269
0270
0271
0272
0273 typedef struct acpi_aest_processor
0274 {
0275 UINT32 ProcessorId;
0276 UINT8 ResourceType;
0277 UINT8 Reserved;
0278 UINT8 Flags;
0279 UINT8 Revision;
0280 UINT64 ProcessorAffinity;
0281
0282 } ACPI_AEST_PROCESSOR;
0283
0284
0285
0286 #define ACPI_AEST_CACHE_RESOURCE 0
0287 #define ACPI_AEST_TLB_RESOURCE 1
0288 #define ACPI_AEST_GENERIC_RESOURCE 2
0289 #define ACPI_AEST_RESOURCE_RESERVED 3
0290
0291
0292
0293 typedef struct acpi_aest_processor_cache
0294 {
0295 UINT32 CacheReference;
0296 UINT32 Reserved;
0297
0298 } ACPI_AEST_PROCESSOR_CACHE;
0299
0300
0301
0302 #define ACPI_AEST_CACHE_DATA 0
0303 #define ACPI_AEST_CACHE_INSTRUCTION 1
0304 #define ACPI_AEST_CACHE_UNIFIED 2
0305 #define ACPI_AEST_CACHE_RESERVED 3
0306
0307
0308
0309 typedef struct acpi_aest_processor_tlb
0310 {
0311 UINT32 TlbLevel;
0312 UINT32 Reserved;
0313
0314 } ACPI_AEST_PROCESSOR_TLB;
0315
0316
0317
0318 typedef struct acpi_aest_processor_generic
0319 {
0320 UINT32 Resource;
0321
0322 } ACPI_AEST_PROCESSOR_GENERIC;
0323
0324
0325
0326 typedef struct acpi_aest_memory
0327 {
0328 UINT32 SratProximityDomain;
0329
0330 } ACPI_AEST_MEMORY;
0331
0332
0333
0334 typedef struct acpi_aest_smmu
0335 {
0336 UINT32 IortNodeReference;
0337 UINT32 SubcomponentReference;
0338
0339 } ACPI_AEST_SMMU;
0340
0341
0342
0343 typedef struct acpi_aest_vendor
0344 {
0345 UINT32 AcpiHid;
0346 UINT32 AcpiUid;
0347 UINT8 VendorSpecificData[16];
0348
0349 } ACPI_AEST_VENDOR;
0350
0351
0352
0353 typedef struct acpi_aest_vendor_v2
0354 {
0355 UINT64 AcpiHid;
0356 UINT32 AcpiUid;
0357 UINT8 VendorSpecificData[16];
0358
0359 } ACPI_AEST_VENDOR_V2;
0360
0361
0362
0363 typedef struct acpi_aest_gic
0364 {
0365 UINT32 InterfaceType;
0366 UINT32 InstanceId;
0367
0368 } ACPI_AEST_GIC;
0369
0370
0371
0372 #define ACPI_AEST_GIC_CPU 0
0373 #define ACPI_AEST_GIC_DISTRIBUTOR 1
0374 #define ACPI_AEST_GIC_REDISTRIBUTOR 2
0375 #define ACPI_AEST_GIC_ITS 3
0376 #define ACPI_AEST_GIC_RESERVED 4
0377
0378
0379
0380 typedef struct acpi_aest_pcie
0381 {
0382 UINT32 IortNodeReference;
0383
0384 } ACPI_AEST_PCIE;
0385
0386
0387
0388
0389 typedef struct acpi_aest_proxy
0390 {
0391 UINT64 NodeAddress;
0392
0393 } ACPI_AEST_PROXY;
0394
0395
0396
0397 typedef struct acpi_aest_node_interface
0398 {
0399 UINT8 Type;
0400 UINT8 Reserved[3];
0401 UINT32 Flags;
0402 UINT64 Address;
0403 UINT32 ErrorRecordIndex;
0404 UINT32 ErrorRecordCount;
0405 UINT64 ErrorRecordImplemented;
0406 UINT64 ErrorStatusReporting;
0407 UINT64 AddressingMode;
0408
0409 } ACPI_AEST_NODE_INTERFACE;
0410
0411
0412
0413 typedef struct acpi_aest_node_interface_header
0414 {
0415 UINT8 Type;
0416 UINT8 GroupFormat;
0417 UINT8 Reserved[2];
0418 UINT32 Flags;
0419 UINT64 Address;
0420 UINT32 ErrorRecordIndex;
0421 UINT32 ErrorRecordCount;
0422
0423 } ACPI_AEST_NODE_INTERFACE_HEADER;
0424
0425 #define ACPI_AEST_NODE_GROUP_FORMAT_4K 0
0426 #define ACPI_AEST_NODE_GROUP_FORMAT_16K 1
0427 #define ACPI_AEST_NODE_GROUP_FORMAT_64K 2
0428
0429 typedef struct acpi_aest_node_interface_common
0430 {
0431 UINT32 ErrorNodeDevice;
0432 UINT32 ProcessorAffinity;
0433 UINT64 ErrorGroupRegisterBase;
0434 UINT64 FaultInjectRegisterBase;
0435 UINT64 InterruptConfigRegisterBase;
0436
0437 } ACPI_AEST_NODE_INTERFACE_COMMON;
0438
0439 typedef struct acpi_aest_node_interface_4k
0440 {
0441 UINT64 ErrorRecordImplemented;
0442 UINT64 ErrorStatusReporting;
0443 UINT64 AddressingMode;
0444 ACPI_AEST_NODE_INTERFACE_COMMON Common;
0445
0446 } ACPI_AEST_NODE_INTERFACE_4K;
0447
0448 typedef struct acpi_aest_node_interface_16k
0449 {
0450 UINT64 ErrorRecordImplemented[4];
0451 UINT64 ErrorStatusReporting[4];
0452 UINT64 AddressingMode[4];
0453 ACPI_AEST_NODE_INTERFACE_COMMON Common;
0454
0455 } ACPI_AEST_NODE_INTERFACE_16K;
0456
0457 typedef struct acpi_aest_node_interface_64k
0458 {
0459 INT64 ErrorRecordImplemented[14];
0460 UINT64 ErrorStatusReporting[14];
0461 UINT64 AddressingMode[14];
0462 ACPI_AEST_NODE_INTERFACE_COMMON Common;
0463
0464 } ACPI_AEST_NODE_INTERFACE_64K;
0465
0466
0467
0468 #define ACPI_AEST_NODE_SYSTEM_REGISTER 0
0469 #define ACPI_AEST_NODE_MEMORY_MAPPED 1
0470 #define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED 2
0471 #define ACPI_AEST_XFACE_RESERVED 3
0472
0473
0474
0475 typedef struct acpi_aest_node_interrupt
0476 {
0477 UINT8 Type;
0478 UINT8 Reserved[2];
0479 UINT8 Flags;
0480 UINT32 Gsiv;
0481 UINT8 IortId;
0482 UINT8 Reserved1[3];
0483
0484 } ACPI_AEST_NODE_INTERRUPT;
0485
0486
0487
0488 typedef struct acpi_aest_node_interrupt_v2
0489 {
0490 UINT8 Type;
0491 UINT8 Reserved[2];
0492 UINT8 Flags;
0493 UINT32 Gsiv;
0494 UINT8 Reserved1[4];
0495
0496 } ACPI_AEST_NODE_INTERRUPT_V2;
0497
0498
0499
0500 #define ACPI_AEST_NODE_FAULT_HANDLING 0
0501 #define ACPI_AEST_NODE_ERROR_RECOVERY 1
0502 #define ACPI_AEST_XRUPT_RESERVED 2
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512 typedef struct acpi_table_agdi
0513 {
0514 ACPI_TABLE_HEADER Header;
0515 UINT8 Flags;
0516 UINT8 Reserved[3];
0517 UINT32 SdeiEvent;
0518 UINT32 Gsiv;
0519
0520 } ACPI_TABLE_AGDI;
0521
0522
0523
0524 #define ACPI_AGDI_SIGNALING_MODE (1)
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537 typedef struct acpi_table_apmt {
0538 ACPI_TABLE_HEADER Header;
0539 } ACPI_TABLE_APMT;
0540
0541 #define ACPI_APMT_NODE_ID_LENGTH 4
0542
0543
0544
0545
0546 typedef struct acpi_apmt_node {
0547 UINT16 Length;
0548 UINT8 Flags;
0549 UINT8 Type;
0550 UINT32 Id;
0551 UINT64 InstPrimary;
0552 UINT32 InstSecondary;
0553 UINT64 BaseAddress0;
0554 UINT64 BaseAddress1;
0555 UINT32 OvflwIrq;
0556 UINT32 Reserved;
0557 UINT32 OvflwIrqFlags;
0558 UINT32 ProcAffinity;
0559 UINT32 ImplId;
0560 } ACPI_APMT_NODE;
0561
0562
0563
0564 #define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0)
0565 #define ACPI_APMT_FLAGS_AFFINITY (1<<1)
0566 #define ACPI_APMT_FLAGS_ATOMIC (1<<2)
0567
0568
0569
0570 #define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0)
0571 #define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0)
0572
0573
0574 #define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1)
0575 #define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)
0576
0577
0578 #define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2)
0579 #define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2)
0580
0581
0582
0583 enum acpi_apmt_node_type {
0584 ACPI_APMT_NODE_TYPE_MC = 0x00,
0585 ACPI_APMT_NODE_TYPE_SMMU = 0x01,
0586 ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,
0587 ACPI_APMT_NODE_TYPE_ACPI = 0x03,
0588 ACPI_APMT_NODE_TYPE_CACHE = 0x04,
0589 ACPI_APMT_NODE_TYPE_COUNT
0590 };
0591
0592
0593
0594 #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0)
0595 #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1)
0596
0597
0598
0599 #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0)
0600 #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0)
0601
0602
0603
0604 #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1)
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616 typedef struct acpi_table_bdat
0617 {
0618 ACPI_TABLE_HEADER Header;
0619 ACPI_GENERIC_ADDRESS Gas;
0620
0621 } ACPI_TABLE_BDAT;
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631 typedef struct acpi_table_ccel
0632 {
0633 ACPI_TABLE_HEADER Header;
0634 UINT8 CCType;
0635 UINT8 CCSubType;
0636 UINT16 Reserved;
0637 UINT64 LogAreaMinimumLength;
0638 UINT64 LogAreaStartAddress;
0639
0640 } ACPI_TABLE_CCEL;
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651 typedef struct acpi_table_iort
0652 {
0653 ACPI_TABLE_HEADER Header;
0654 UINT32 NodeCount;
0655 UINT32 NodeOffset;
0656 UINT32 Reserved;
0657
0658 } ACPI_TABLE_IORT;
0659
0660
0661
0662
0663
0664 typedef struct acpi_iort_node
0665 {
0666 UINT8 Type;
0667 UINT16 Length;
0668 UINT8 Revision;
0669 UINT32 Identifier;
0670 UINT32 MappingCount;
0671 UINT32 MappingOffset;
0672 char NodeData[];
0673
0674 } ACPI_IORT_NODE;
0675
0676
0677
0678 enum AcpiIortNodeType
0679 {
0680 ACPI_IORT_NODE_ITS_GROUP = 0x00,
0681 ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
0682 ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
0683 ACPI_IORT_NODE_SMMU = 0x03,
0684 ACPI_IORT_NODE_SMMU_V3 = 0x04,
0685 ACPI_IORT_NODE_PMCG = 0x05,
0686 ACPI_IORT_NODE_RMR = 0x06,
0687 };
0688
0689
0690 typedef struct acpi_iort_id_mapping
0691 {
0692 UINT32 InputBase;
0693 UINT32 IdCount;
0694 UINT32 OutputBase;
0695 UINT32 OutputReference;
0696 UINT32 Flags;
0697
0698 } ACPI_IORT_ID_MAPPING;
0699
0700
0701
0702 #define ACPI_IORT_ID_SINGLE_MAPPING (1)
0703
0704
0705 typedef struct acpi_iort_memory_access
0706 {
0707 UINT32 CacheCoherency;
0708 UINT8 Hints;
0709 UINT16 Reserved;
0710 UINT8 MemoryFlags;
0711
0712 } ACPI_IORT_MEMORY_ACCESS;
0713
0714
0715
0716 #define ACPI_IORT_NODE_COHERENT 0x00000001
0717 #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000
0718
0719
0720
0721 #define ACPI_IORT_HT_TRANSIENT (1)
0722 #define ACPI_IORT_HT_WRITE (1<<1)
0723 #define ACPI_IORT_HT_READ (1<<2)
0724 #define ACPI_IORT_HT_OVERRIDE (1<<3)
0725
0726
0727
0728 #define ACPI_IORT_MF_COHERENCY (1)
0729 #define ACPI_IORT_MF_ATTRIBUTES (1<<1)
0730
0731
0732
0733
0734
0735 typedef struct acpi_iort_its_group
0736 {
0737 UINT32 ItsCount;
0738 UINT32 Identifiers[];
0739
0740 } ACPI_IORT_ITS_GROUP;
0741
0742
0743 typedef struct acpi_iort_named_component
0744 {
0745 UINT32 NodeFlags;
0746 UINT64 MemoryProperties;
0747 UINT8 MemoryAddressLimit;
0748 char DeviceName[];
0749
0750 } ACPI_IORT_NAMED_COMPONENT;
0751
0752
0753
0754 #define ACPI_IORT_NC_STALL_SUPPORTED (1)
0755 #define ACPI_IORT_NC_PASID_BITS (31<<1)
0756
0757 typedef struct acpi_iort_root_complex
0758 {
0759 UINT64 MemoryProperties;
0760 UINT32 AtsAttribute;
0761 UINT32 PciSegmentNumber;
0762 UINT8 MemoryAddressLimit;
0763 UINT16 PasidCapabilities;
0764 UINT8 Reserved[];
0765
0766 } ACPI_IORT_ROOT_COMPLEX;
0767
0768
0769
0770 #define ACPI_IORT_ATS_SUPPORTED (1)
0771 #define ACPI_IORT_PRI_SUPPORTED (1<<1)
0772 #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2)
0773
0774
0775 #define ACPI_IORT_PASID_MAX_WIDTH (0x1F)
0776
0777 typedef struct acpi_iort_smmu
0778 {
0779 UINT64 BaseAddress;
0780 UINT64 Span;
0781 UINT32 Model;
0782 UINT32 Flags;
0783 UINT32 GlobalInterruptOffset;
0784 UINT32 ContextInterruptCount;
0785 UINT32 ContextInterruptOffset;
0786 UINT32 PmuInterruptCount;
0787 UINT32 PmuInterruptOffset;
0788 UINT64 Interrupts[];
0789
0790 } ACPI_IORT_SMMU;
0791
0792
0793
0794 #define ACPI_IORT_SMMU_V1 0x00000000
0795 #define ACPI_IORT_SMMU_V2 0x00000001
0796 #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002
0797 #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003
0798 #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004
0799 #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005
0800
0801
0802
0803 #define ACPI_IORT_SMMU_DVM_SUPPORTED (1)
0804 #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)
0805
0806
0807
0808 typedef struct acpi_iort_smmu_gsi
0809 {
0810 UINT32 NSgIrpt;
0811 UINT32 NSgIrptFlags;
0812 UINT32 NSgCfgIrpt;
0813 UINT32 NSgCfgIrptFlags;
0814
0815 } ACPI_IORT_SMMU_GSI;
0816
0817
0818 typedef struct acpi_iort_smmu_v3
0819 {
0820 UINT64 BaseAddress;
0821 UINT32 Flags;
0822 UINT32 Reserved;
0823 UINT64 VatosAddress;
0824 UINT32 Model;
0825 UINT32 EventGsiv;
0826 UINT32 PriGsiv;
0827 UINT32 GerrGsiv;
0828 UINT32 SyncGsiv;
0829 UINT32 Pxm;
0830 UINT32 IdMappingIndex;
0831
0832 } ACPI_IORT_SMMU_V3;
0833
0834
0835
0836 #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000
0837 #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001
0838 #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002
0839
0840
0841
0842 #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)
0843 #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)
0844 #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)
0845 #define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4)
0846
0847 typedef struct acpi_iort_pmcg
0848 {
0849 UINT64 Page0BaseAddress;
0850 UINT32 OverflowGsiv;
0851 UINT32 NodeReference;
0852 UINT64 Page1BaseAddress;
0853
0854 } ACPI_IORT_PMCG;
0855
0856 typedef struct acpi_iort_rmr {
0857 UINT32 Flags;
0858 UINT32 RmrCount;
0859 UINT32 RmrOffset;
0860
0861 } ACPI_IORT_RMR;
0862
0863
0864 #define ACPI_IORT_RMR_REMAP_PERMITTED (1)
0865 #define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1)
0866
0867
0868
0869
0870
0871 #define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF)
0872
0873
0874
0875 #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00
0876 #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01
0877 #define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02
0878 #define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03
0879 #define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04
0880 #define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05
0881
0882 typedef struct acpi_iort_rmr_desc {
0883 UINT64 BaseAddress;
0884 UINT64 Length;
0885 UINT32 Reserved;
0886
0887 } ACPI_IORT_RMR_DESC;
0888
0889
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899 typedef struct acpi_table_ivrs
0900 {
0901 ACPI_TABLE_HEADER Header;
0902 UINT32 Info;
0903 UINT64 Reserved;
0904
0905 } ACPI_TABLE_IVRS;
0906
0907
0908
0909 #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00
0910 #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000
0911 #define ACPI_IVRS_ATS_RESERVED 0x00400000
0912
0913
0914
0915
0916 typedef struct acpi_ivrs_header
0917 {
0918 UINT8 Type;
0919 UINT8 Flags;
0920 UINT16 Length;
0921 UINT16 DeviceId;
0922
0923 } ACPI_IVRS_HEADER;
0924
0925
0926
0927 enum AcpiIvrsType
0928 {
0929 ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
0930 ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
0931 ACPI_IVRS_TYPE_HARDWARE3 = 0x40,
0932 ACPI_IVRS_TYPE_MEMORY1 = 0x20,
0933 ACPI_IVRS_TYPE_MEMORY2 = 0x21,
0934 ACPI_IVRS_TYPE_MEMORY3 = 0x22
0935 };
0936
0937
0938
0939 #define ACPI_IVHD_TT_ENABLE (1)
0940 #define ACPI_IVHD_PASS_PW (1<<1)
0941 #define ACPI_IVHD_RES_PASS_PW (1<<2)
0942 #define ACPI_IVHD_ISOC (1<<3)
0943 #define ACPI_IVHD_IOTLB (1<<4)
0944
0945
0946
0947 #define ACPI_IVMD_UNITY (1)
0948 #define ACPI_IVMD_READ (1<<1)
0949 #define ACPI_IVMD_WRITE (1<<2)
0950 #define ACPI_IVMD_EXCLUSION_RANGE (1<<3)
0951
0952
0953
0954
0955
0956
0957
0958
0959 typedef struct acpi_ivrs_hardware_10
0960 {
0961 ACPI_IVRS_HEADER Header;
0962 UINT16 CapabilityOffset;
0963 UINT64 BaseAddress;
0964 UINT16 PciSegmentGroup;
0965 UINT16 Info;
0966 UINT32 FeatureReporting;
0967
0968 } ACPI_IVRS_HARDWARE1;
0969
0970
0971
0972 typedef struct acpi_ivrs_hardware_11
0973 {
0974 ACPI_IVRS_HEADER Header;
0975 UINT16 CapabilityOffset;
0976 UINT64 BaseAddress;
0977 UINT16 PciSegmentGroup;
0978 UINT16 Info;
0979 UINT32 Attributes;
0980 UINT64 EfrRegisterImage;
0981 UINT64 Reserved;
0982 } ACPI_IVRS_HARDWARE2;
0983
0984
0985
0986 #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F
0987 #define ACPI_IVHD_UNIT_ID_MASK 0x1F00
0988
0989
0990
0991
0992
0993
0994
0995
0996 typedef struct acpi_ivrs_de_header
0997 {
0998 UINT8 Type;
0999 UINT16 Id;
1000 UINT8 DataSetting;
1001
1002 } ACPI_IVRS_DE_HEADER;
1003
1004
1005
1006 #define ACPI_IVHD_ENTRY_LENGTH 0xC0
1007
1008
1009
1010 enum AcpiIvrsDeviceEntryType
1011 {
1012
1013
1014 ACPI_IVRS_TYPE_PAD4 = 0,
1015 ACPI_IVRS_TYPE_ALL = 1,
1016 ACPI_IVRS_TYPE_SELECT = 2,
1017 ACPI_IVRS_TYPE_START = 3,
1018 ACPI_IVRS_TYPE_END = 4,
1019
1020
1021
1022 ACPI_IVRS_TYPE_PAD8 = 64,
1023 ACPI_IVRS_TYPE_NOT_USED = 65,
1024 ACPI_IVRS_TYPE_ALIAS_SELECT = 66,
1025 ACPI_IVRS_TYPE_ALIAS_START = 67,
1026 ACPI_IVRS_TYPE_EXT_SELECT = 70,
1027 ACPI_IVRS_TYPE_EXT_START = 71,
1028 ACPI_IVRS_TYPE_SPECIAL = 72,
1029
1030
1031
1032 ACPI_IVRS_TYPE_HID = 240
1033 };
1034
1035
1036
1037 #define ACPI_IVHD_INIT_PASS (1)
1038 #define ACPI_IVHD_EINT_PASS (1<<1)
1039 #define ACPI_IVHD_NMI_PASS (1<<2)
1040 #define ACPI_IVHD_SYSTEM_MGMT (3<<4)
1041 #define ACPI_IVHD_LINT0_PASS (1<<6)
1042 #define ACPI_IVHD_LINT1_PASS (1<<7)
1043
1044
1045
1046
1047 typedef struct acpi_ivrs_device4
1048 {
1049 ACPI_IVRS_DE_HEADER Header;
1050
1051 } ACPI_IVRS_DEVICE4;
1052
1053
1054
1055 typedef struct acpi_ivrs_device8a
1056 {
1057 ACPI_IVRS_DE_HEADER Header;
1058 UINT8 Reserved1;
1059 UINT16 UsedId;
1060 UINT8 Reserved2;
1061
1062 } ACPI_IVRS_DEVICE8A;
1063
1064
1065
1066 typedef struct acpi_ivrs_device8b
1067 {
1068 ACPI_IVRS_DE_HEADER Header;
1069 UINT32 ExtendedData;
1070
1071 } ACPI_IVRS_DEVICE8B;
1072
1073
1074
1075 #define ACPI_IVHD_ATS_DISABLED (1<<31)
1076
1077
1078
1079 typedef struct acpi_ivrs_device8c
1080 {
1081 ACPI_IVRS_DE_HEADER Header;
1082 UINT8 Handle;
1083 UINT16 UsedId;
1084 UINT8 Variety;
1085
1086 } ACPI_IVRS_DEVICE8C;
1087
1088
1089
1090 #define ACPI_IVHD_IOAPIC 1
1091 #define ACPI_IVHD_HPET 2
1092
1093
1094
1095 typedef struct acpi_ivrs_device_hid
1096 {
1097 ACPI_IVRS_DE_HEADER Header;
1098 UINT64 AcpiHid;
1099 UINT64 AcpiCid;
1100 UINT8 UidType;
1101 UINT8 UidLength;
1102
1103 } ACPI_IVRS_DEVICE_HID;
1104
1105
1106
1107 #define ACPI_IVRS_UID_NOT_PRESENT 0
1108 #define ACPI_IVRS_UID_IS_INTEGER 1
1109 #define ACPI_IVRS_UID_IS_STRING 2
1110
1111
1112
1113 typedef struct acpi_ivrs_memory
1114 {
1115 ACPI_IVRS_HEADER Header;
1116 UINT16 AuxData;
1117 UINT64 Reserved;
1118 UINT64 StartAddress;
1119 UINT64 MemoryLength;
1120
1121 } ACPI_IVRS_MEMORY;
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132 typedef struct acpi_table_lpit
1133 {
1134 ACPI_TABLE_HEADER Header;
1135
1136 } ACPI_TABLE_LPIT;
1137
1138
1139
1140
1141 typedef struct acpi_lpit_header
1142 {
1143 UINT32 Type;
1144 UINT32 Length;
1145 UINT16 UniqueId;
1146 UINT16 Reserved;
1147 UINT32 Flags;
1148
1149 } ACPI_LPIT_HEADER;
1150
1151
1152
1153 enum AcpiLpitType
1154 {
1155 ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
1156 ACPI_LPIT_TYPE_RESERVED = 0x01
1157 };
1158
1159
1160
1161 #define ACPI_LPIT_STATE_DISABLED (1)
1162 #define ACPI_LPIT_NO_COUNTER (1<<1)
1163
1164
1165
1166
1167
1168
1169
1170 typedef struct acpi_lpit_native
1171 {
1172 ACPI_LPIT_HEADER Header;
1173 ACPI_GENERIC_ADDRESS EntryTrigger;
1174 UINT32 Residency;
1175 UINT32 Latency;
1176 ACPI_GENERIC_ADDRESS ResidencyCounter;
1177 UINT64 CounterFrequency;
1178
1179 } ACPI_LPIT_NATIVE;
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189 typedef struct acpi_table_madt
1190 {
1191 ACPI_TABLE_HEADER Header;
1192 UINT32 Address;
1193 UINT32 Flags;
1194
1195 } ACPI_TABLE_MADT;
1196
1197
1198
1199 #define ACPI_MADT_PCAT_COMPAT (1)
1200
1201
1202
1203 #define ACPI_MADT_DUAL_PIC 1
1204 #define ACPI_MADT_MULTIPLE_APIC 0
1205
1206
1207
1208
1209 enum AcpiMadtType
1210 {
1211 ACPI_MADT_TYPE_LOCAL_APIC = 0,
1212 ACPI_MADT_TYPE_IO_APIC = 1,
1213 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
1214 ACPI_MADT_TYPE_NMI_SOURCE = 3,
1215 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
1216 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
1217 ACPI_MADT_TYPE_IO_SAPIC = 6,
1218 ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
1219 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
1220 ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
1221 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
1222 ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
1223 ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
1224 ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
1225 ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
1226 ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
1227 ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
1228 ACPI_MADT_TYPE_CORE_PIC = 17,
1229 ACPI_MADT_TYPE_LIO_PIC = 18,
1230 ACPI_MADT_TYPE_HT_PIC = 19,
1231 ACPI_MADT_TYPE_EIO_PIC = 20,
1232 ACPI_MADT_TYPE_MSI_PIC = 21,
1233 ACPI_MADT_TYPE_BIO_PIC = 22,
1234 ACPI_MADT_TYPE_LPC_PIC = 23,
1235 ACPI_MADT_TYPE_RINTC = 24,
1236 ACPI_MADT_TYPE_IMSIC = 25,
1237 ACPI_MADT_TYPE_APLIC = 26,
1238 ACPI_MADT_TYPE_PLIC = 27,
1239 ACPI_MADT_TYPE_RESERVED = 28,
1240 ACPI_MADT_TYPE_OEM_RESERVED = 0x80
1241 };
1242
1243
1244
1245
1246
1247
1248
1249
1250 typedef struct acpi_madt_local_apic
1251 {
1252 ACPI_SUBTABLE_HEADER Header;
1253 UINT8 ProcessorId;
1254 UINT8 Id;
1255 UINT32 LapicFlags;
1256
1257 } ACPI_MADT_LOCAL_APIC;
1258
1259
1260
1261
1262 typedef struct acpi_madt_io_apic
1263 {
1264 ACPI_SUBTABLE_HEADER Header;
1265 UINT8 Id;
1266 UINT8 Reserved;
1267 UINT32 Address;
1268 UINT32 GlobalIrqBase;
1269
1270 } ACPI_MADT_IO_APIC;
1271
1272
1273
1274
1275 typedef struct acpi_madt_interrupt_override
1276 {
1277 ACPI_SUBTABLE_HEADER Header;
1278 UINT8 Bus;
1279 UINT8 SourceIrq;
1280 UINT32 GlobalIrq;
1281 UINT16 IntiFlags;
1282
1283 } ACPI_MADT_INTERRUPT_OVERRIDE;
1284
1285
1286
1287
1288 typedef struct acpi_madt_nmi_source
1289 {
1290 ACPI_SUBTABLE_HEADER Header;
1291 UINT16 IntiFlags;
1292 UINT32 GlobalIrq;
1293
1294 } ACPI_MADT_NMI_SOURCE;
1295
1296
1297
1298
1299 typedef struct acpi_madt_local_apic_nmi
1300 {
1301 ACPI_SUBTABLE_HEADER Header;
1302 UINT8 ProcessorId;
1303 UINT16 IntiFlags;
1304 UINT8 Lint;
1305
1306 } ACPI_MADT_LOCAL_APIC_NMI;
1307
1308
1309
1310
1311 typedef struct acpi_madt_local_apic_override
1312 {
1313 ACPI_SUBTABLE_HEADER Header;
1314 UINT16 Reserved;
1315 UINT64 Address;
1316
1317 } ACPI_MADT_LOCAL_APIC_OVERRIDE;
1318
1319
1320
1321
1322 typedef struct acpi_madt_io_sapic
1323 {
1324 ACPI_SUBTABLE_HEADER Header;
1325 UINT8 Id;
1326 UINT8 Reserved;
1327 UINT32 GlobalIrqBase;
1328 UINT64 Address;
1329
1330 } ACPI_MADT_IO_SAPIC;
1331
1332
1333
1334
1335 typedef struct acpi_madt_local_sapic
1336 {
1337 ACPI_SUBTABLE_HEADER Header;
1338 UINT8 ProcessorId;
1339 UINT8 Id;
1340 UINT8 Eid;
1341 UINT8 Reserved[3];
1342 UINT32 LapicFlags;
1343 UINT32 Uid;
1344 char UidString[];
1345
1346 } ACPI_MADT_LOCAL_SAPIC;
1347
1348
1349
1350
1351 typedef struct acpi_madt_interrupt_source
1352 {
1353 ACPI_SUBTABLE_HEADER Header;
1354 UINT16 IntiFlags;
1355 UINT8 Type;
1356 UINT8 Id;
1357 UINT8 Eid;
1358 UINT8 IoSapicVector;
1359 UINT32 GlobalIrq;
1360 UINT32 Flags;
1361
1362 } ACPI_MADT_INTERRUPT_SOURCE;
1363
1364
1365
1366 #define ACPI_MADT_CPEI_OVERRIDE (1)
1367
1368
1369
1370
1371 typedef struct acpi_madt_local_x2apic
1372 {
1373 ACPI_SUBTABLE_HEADER Header;
1374 UINT16 Reserved;
1375 UINT32 LocalApicId;
1376 UINT32 LapicFlags;
1377 UINT32 Uid;
1378
1379 } ACPI_MADT_LOCAL_X2APIC;
1380
1381
1382
1383
1384 typedef struct acpi_madt_local_x2apic_nmi
1385 {
1386 ACPI_SUBTABLE_HEADER Header;
1387 UINT16 IntiFlags;
1388 UINT32 Uid;
1389 UINT8 Lint;
1390 UINT8 Reserved[3];
1391
1392 } ACPI_MADT_LOCAL_X2APIC_NMI;
1393
1394
1395
1396
1397 typedef struct acpi_madt_generic_interrupt
1398 {
1399 ACPI_SUBTABLE_HEADER Header;
1400 UINT16 Reserved;
1401 UINT32 CpuInterfaceNumber;
1402 UINT32 Uid;
1403 UINT32 Flags;
1404 UINT32 ParkingVersion;
1405 UINT32 PerformanceInterrupt;
1406 UINT64 ParkedAddress;
1407 UINT64 BaseAddress;
1408 UINT64 GicvBaseAddress;
1409 UINT64 GichBaseAddress;
1410 UINT32 VgicInterrupt;
1411 UINT64 GicrBaseAddress;
1412 UINT64 ArmMpidr;
1413 UINT8 EfficiencyClass;
1414 UINT8 Reserved2[1];
1415 UINT16 SpeInterrupt;
1416 UINT16 TrbeInterrupt;
1417
1418 } ACPI_MADT_GENERIC_INTERRUPT;
1419
1420
1421
1422
1423 #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1)
1424 #define ACPI_MADT_VGIC_IRQ_MODE (1<<2)
1425 #define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3)
1426 #define ACPI_MADT_GICC_NON_COHERENT (1<<4)
1427
1428
1429
1430 typedef struct acpi_madt_generic_distributor
1431 {
1432 ACPI_SUBTABLE_HEADER Header;
1433 UINT16 Reserved;
1434 UINT32 GicId;
1435 UINT64 BaseAddress;
1436 UINT32 GlobalIrqBase;
1437 UINT8 Version;
1438 UINT8 Reserved2[3];
1439
1440 } ACPI_MADT_GENERIC_DISTRIBUTOR;
1441
1442
1443
1444 enum AcpiMadtGicVersion
1445 {
1446 ACPI_MADT_GIC_VERSION_NONE = 0,
1447 ACPI_MADT_GIC_VERSION_V1 = 1,
1448 ACPI_MADT_GIC_VERSION_V2 = 2,
1449 ACPI_MADT_GIC_VERSION_V3 = 3,
1450 ACPI_MADT_GIC_VERSION_V4 = 4,
1451 ACPI_MADT_GIC_VERSION_RESERVED = 5
1452 };
1453
1454
1455
1456
1457 typedef struct acpi_madt_generic_msi_frame
1458 {
1459 ACPI_SUBTABLE_HEADER Header;
1460 UINT16 Reserved;
1461 UINT32 MsiFrameId;
1462 UINT64 BaseAddress;
1463 UINT32 Flags;
1464 UINT16 SpiCount;
1465 UINT16 SpiBase;
1466
1467 } ACPI_MADT_GENERIC_MSI_FRAME;
1468
1469
1470
1471 #define ACPI_MADT_OVERRIDE_SPI_VALUES (1)
1472
1473
1474
1475
1476 typedef struct acpi_madt_generic_redistributor
1477 {
1478 ACPI_SUBTABLE_HEADER Header;
1479 UINT8 Flags;
1480 UINT8 Reserved;
1481 UINT64 BaseAddress;
1482 UINT32 Length;
1483
1484 } ACPI_MADT_GENERIC_REDISTRIBUTOR;
1485
1486 #define ACPI_MADT_GICR_NON_COHERENT (1)
1487
1488
1489
1490 typedef struct acpi_madt_generic_translator
1491 {
1492 ACPI_SUBTABLE_HEADER Header;
1493 UINT8 Flags;
1494 UINT8 Reserved;
1495 UINT32 TranslationId;
1496 UINT64 BaseAddress;
1497 UINT32 Reserved2;
1498
1499 } ACPI_MADT_GENERIC_TRANSLATOR;
1500
1501 #define ACPI_MADT_ITS_NON_COHERENT (1)
1502
1503
1504
1505 typedef struct acpi_madt_multiproc_wakeup
1506 {
1507 ACPI_SUBTABLE_HEADER Header;
1508 UINT16 MailboxVersion;
1509 UINT32 Reserved;
1510 UINT64 BaseAddress;
1511
1512 } ACPI_MADT_MULTIPROC_WAKEUP;
1513
1514 #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032
1515 #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048
1516
1517 typedef struct acpi_madt_multiproc_wakeup_mailbox
1518 {
1519 UINT16 Command;
1520 UINT16 Reserved;
1521 UINT32 ApicId;
1522 UINT64 WakeupVector;
1523 UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE];
1524 UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE];
1525
1526 } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
1527
1528 #define ACPI_MP_WAKE_COMMAND_WAKEUP 1
1529
1530
1531
1532 typedef struct acpi_madt_core_pic {
1533 ACPI_SUBTABLE_HEADER Header;
1534 UINT8 Version;
1535 UINT32 ProcessorId;
1536 UINT32 CoreId;
1537 UINT32 Flags;
1538 } ACPI_MADT_CORE_PIC;
1539
1540
1541
1542 enum AcpiMadtCorePicVersion {
1543 ACPI_MADT_CORE_PIC_VERSION_NONE = 0,
1544 ACPI_MADT_CORE_PIC_VERSION_V1 = 1,
1545 ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2
1546 };
1547
1548
1549
1550 typedef struct acpi_madt_lio_pic {
1551 ACPI_SUBTABLE_HEADER Header;
1552 UINT8 Version;
1553 UINT64 Address;
1554 UINT16 Size;
1555 UINT8 Cascade[2];
1556 UINT32 CascadeMap[2];
1557 } ACPI_MADT_LIO_PIC;
1558
1559
1560
1561 enum AcpiMadtLioPicVersion {
1562 ACPI_MADT_LIO_PIC_VERSION_NONE = 0,
1563 ACPI_MADT_LIO_PIC_VERSION_V1 = 1,
1564 ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2
1565 };
1566
1567
1568
1569 typedef struct acpi_madt_ht_pic {
1570 ACPI_SUBTABLE_HEADER Header;
1571 UINT8 Version;
1572 UINT64 Address;
1573 UINT16 Size;
1574 UINT8 Cascade[8];
1575 } ACPI_MADT_HT_PIC;
1576
1577
1578
1579 enum AcpiMadtHtPicVersion {
1580 ACPI_MADT_HT_PIC_VERSION_NONE = 0,
1581 ACPI_MADT_HT_PIC_VERSION_V1 = 1,
1582 ACPI_MADT_HT_PIC_VERSION_RESERVED = 2
1583 };
1584
1585
1586
1587 typedef struct acpi_madt_eio_pic {
1588 ACPI_SUBTABLE_HEADER Header;
1589 UINT8 Version;
1590 UINT8 Cascade;
1591 UINT8 Node;
1592 UINT64 NodeMap;
1593 } ACPI_MADT_EIO_PIC;
1594
1595
1596
1597 enum AcpiMadtEioPicVersion {
1598 ACPI_MADT_EIO_PIC_VERSION_NONE = 0,
1599 ACPI_MADT_EIO_PIC_VERSION_V1 = 1,
1600 ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2
1601 };
1602
1603
1604
1605 typedef struct acpi_madt_msi_pic {
1606 ACPI_SUBTABLE_HEADER Header;
1607 UINT8 Version;
1608 UINT64 MsgAddress;
1609 UINT32 Start;
1610 UINT32 Count;
1611 } ACPI_MADT_MSI_PIC;
1612
1613
1614
1615 enum AcpiMadtMsiPicVersion {
1616 ACPI_MADT_MSI_PIC_VERSION_NONE = 0,
1617 ACPI_MADT_MSI_PIC_VERSION_V1 = 1,
1618 ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2
1619 };
1620
1621
1622
1623 typedef struct acpi_madt_bio_pic {
1624 ACPI_SUBTABLE_HEADER Header;
1625 UINT8 Version;
1626 UINT64 Address;
1627 UINT16 Size;
1628 UINT16 Id;
1629 UINT16 GsiBase;
1630 } ACPI_MADT_BIO_PIC;
1631
1632
1633
1634 enum AcpiMadtBioPicVersion {
1635 ACPI_MADT_BIO_PIC_VERSION_NONE = 0,
1636 ACPI_MADT_BIO_PIC_VERSION_V1 = 1,
1637 ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2
1638 };
1639
1640
1641
1642 typedef struct acpi_madt_lpc_pic {
1643 ACPI_SUBTABLE_HEADER Header;
1644 UINT8 Version;
1645 UINT64 Address;
1646 UINT16 Size;
1647 UINT8 Cascade;
1648 } ACPI_MADT_LPC_PIC;
1649
1650
1651
1652 enum AcpiMadtLpcPicVersion {
1653 ACPI_MADT_LPC_PIC_VERSION_NONE = 0,
1654 ACPI_MADT_LPC_PIC_VERSION_V1 = 1,
1655 ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2
1656 };
1657
1658
1659 typedef struct acpi_madt_rintc {
1660 ACPI_SUBTABLE_HEADER Header;
1661 UINT8 Version;
1662 UINT8 Reserved;
1663 UINT32 Flags;
1664 UINT64 HartId;
1665 UINT32 Uid;
1666 UINT32 ExtIntcId;
1667 UINT64 ImsicAddr;
1668 UINT32 ImsicSize;
1669 } ACPI_MADT_RINTC;
1670
1671
1672
1673 enum AcpiMadtRintcVersion {
1674 ACPI_MADT_RINTC_VERSION_NONE = 0,
1675 ACPI_MADT_RINTC_VERSION_V1 = 1,
1676 ACPI_MADT_RINTC_VERSION_RESERVED = 2
1677 };
1678
1679
1680 typedef struct acpi_madt_imsic {
1681 ACPI_SUBTABLE_HEADER Header;
1682 UINT8 Version;
1683 UINT8 Reserved;
1684 UINT32 Flags;
1685 UINT16 NumIds;
1686 UINT16 NumGuestIds;
1687 UINT8 GuestIndexBits;
1688 UINT8 HartIndexBits;
1689 UINT8 GroupIndexBits;
1690 UINT8 GroupIndexShift;
1691 } ACPI_MADT_IMSIC;
1692
1693
1694 typedef struct acpi_madt_aplic {
1695 ACPI_SUBTABLE_HEADER Header;
1696 UINT8 Version;
1697 UINT8 Id;
1698 UINT32 Flags;
1699 UINT8 HwId[8];
1700 UINT16 NumIdcs;
1701 UINT16 NumSources;
1702 UINT32 GsiBase;
1703 UINT64 BaseAddr;
1704 UINT32 Size;
1705 } ACPI_MADT_APLIC;
1706
1707
1708 typedef struct acpi_madt_plic {
1709 ACPI_SUBTABLE_HEADER Header;
1710 UINT8 Version;
1711 UINT8 Id;
1712 UINT8 HwId[8];
1713 UINT16 NumIrqs;
1714 UINT16 MaxPrio;
1715 UINT32 Flags;
1716 UINT32 Size;
1717 UINT64 BaseAddr;
1718 UINT32 GsiBase;
1719 } ACPI_MADT_PLIC;
1720
1721
1722
1723
1724 typedef struct acpi_madt_oem_data
1725 {
1726 ACPI_FLEX_ARRAY(UINT8, OemData);
1727 } ACPI_MADT_OEM_DATA;
1728
1729
1730
1731
1732
1733
1734
1735
1736 #define ACPI_MADT_ENABLED (1)
1737 #define ACPI_MADT_ONLINE_CAPABLE (2)
1738
1739
1740
1741 #define ACPI_MADT_POLARITY_MASK (3)
1742 #define ACPI_MADT_TRIGGER_MASK (3<<2)
1743
1744
1745
1746 #define ACPI_MADT_POLARITY_CONFORMS 0
1747 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
1748 #define ACPI_MADT_POLARITY_RESERVED 2
1749 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3
1750
1751 #define ACPI_MADT_TRIGGER_CONFORMS (0)
1752 #define ACPI_MADT_TRIGGER_EDGE (1<<2)
1753 #define ACPI_MADT_TRIGGER_RESERVED (2<<2)
1754 #define ACPI_MADT_TRIGGER_LEVEL (3<<2)
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766 typedef struct acpi_table_mcfg
1767 {
1768 ACPI_TABLE_HEADER Header;
1769 UINT8 Reserved[8];
1770
1771 } ACPI_TABLE_MCFG;
1772
1773
1774
1775
1776 typedef struct acpi_mcfg_allocation
1777 {
1778 UINT64 Address;
1779 UINT16 PciSegment;
1780 UINT8 StartBusNumber;
1781 UINT8 EndBusNumber;
1782 UINT32 Reserved;
1783
1784 } ACPI_MCFG_ALLOCATION;
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797 typedef struct acpi_table_mchi
1798 {
1799 ACPI_TABLE_HEADER Header;
1800 UINT8 InterfaceType;
1801 UINT8 Protocol;
1802 UINT64 ProtocolData;
1803 UINT8 InterruptType;
1804 UINT8 Gpe;
1805 UINT8 PciDeviceFlag;
1806 UINT32 GlobalInterrupt;
1807 ACPI_GENERIC_ADDRESS ControlRegister;
1808 UINT8 PciSegment;
1809 UINT8 PciBus;
1810 UINT8 PciDevice;
1811 UINT8 PciFunction;
1812
1813 } ACPI_TABLE_MCHI;
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825 enum AcpiMpamLocatorType {
1826 ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,
1827 ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,
1828 ACPI_MPAM_LOCATION_TYPE_SMMU = 2,
1829 ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,
1830 ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,
1831 ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,
1832 ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF
1833 };
1834
1835
1836 typedef struct acpi_mpam_func_deps
1837 {
1838 UINT32 Producer;
1839 UINT32 Reserved;
1840 } ACPI_MPAM_FUNC_DEPS;
1841
1842
1843 typedef struct acpi_mpam_resource_cache_locator
1844 {
1845 UINT64 CacheReference;
1846 UINT32 Reserved;
1847 } ACPI_MPAM_RESOURCE_CACHE_LOCATOR;
1848
1849
1850 typedef struct acpi_mpam_resource_memory_locator
1851 {
1852 UINT64 ProximityDomain;
1853 UINT32 Reserved;
1854 } ACPI_MPAM_RESOURCE_MEMORY_LOCATOR;
1855
1856
1857 typedef struct acpi_mpam_resource_smmu_locator
1858 {
1859 UINT64 SmmuInterface;
1860 UINT32 Reserved;
1861 } ACPI_MPAM_RESOURCE_SMMU_INTERFACE;
1862
1863
1864 typedef struct acpi_mpam_resource_memcache_locator
1865 {
1866 UINT8 Reserved[7];
1867 UINT8 Level;
1868 UINT32 Reference;
1869 } ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE;
1870
1871
1872 typedef struct acpi_mpam_resource_acpi_locator
1873 {
1874 UINT64 AcpiHwId;
1875 UINT32 AcpiUniqueId;
1876 } ACPI_MPAM_RESOURCE_ACPI_INTERFACE;
1877
1878
1879 typedef struct acpi_mpam_resource_interconnect_locator
1880 {
1881 UINT64 InterConnectDescTblOff;
1882 UINT32 Reserved;
1883 } ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE;
1884
1885
1886 typedef struct acpi_mpam_resource_generic_locator
1887 {
1888 UINT64 Descriptor1;
1889 UINT32 Descriptor2;
1890 } ACPI_MPAM_RESOURCE_GENERIC_LOCATOR;
1891
1892 typedef union acpi_mpam_resource_locator
1893 {
1894 ACPI_MPAM_RESOURCE_CACHE_LOCATOR CacheLocator;
1895 ACPI_MPAM_RESOURCE_MEMORY_LOCATOR MemoryLocator;
1896 ACPI_MPAM_RESOURCE_SMMU_INTERFACE SmmuLocator;
1897 ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE MemCacheLocator;
1898 ACPI_MPAM_RESOURCE_ACPI_INTERFACE AcpiLocator;
1899 ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE InterconnectIfcLocator;
1900 ACPI_MPAM_RESOURCE_GENERIC_LOCATOR GenericLocator;
1901 } ACPI_MPAM_RESOURCE_LOCATOR;
1902
1903
1904 typedef struct acpi_mpam_resource_node
1905 {
1906 UINT32 Identifier;
1907 UINT8 RISIndex;
1908 UINT16 Reserved1;
1909 UINT8 LocatorType;
1910 ACPI_MPAM_RESOURCE_LOCATOR Locator;
1911 UINT32 NumFunctionalDeps;
1912 } ACPI_MPAM_RESOURCE_NODE;
1913
1914
1915 typedef struct acpi_mpam_msc_node
1916 {
1917 UINT16 Length;
1918 UINT8 InterfaceType;
1919 UINT8 Reserved;
1920 UINT32 Identifier;
1921 UINT64 BaseAddress;
1922 UINT32 MMIOSize;
1923 UINT32 OverflowInterrupt;
1924 UINT32 OverflowInterruptFlags;
1925 UINT32 Reserved1;
1926 UINT32 OverflowInterruptAffinity;
1927 UINT32 ErrorInterrupt;
1928 UINT32 ErrorInterruptFlags;
1929 UINT32 Reserved2;
1930 UINT32 ErrorInterruptAffinity;
1931 UINT32 MaxNrdyUsec;
1932 UINT64 HardwareIdLinkedDevice;
1933 UINT32 InstanceIdLinkedDevice;
1934 UINT32 NumResourceNodes;
1935 } ACPI_MPAM_MSC_NODE;
1936
1937 typedef struct acpi_table_mpam
1938 {
1939 ACPI_TABLE_HEADER Header;
1940 } ACPI_TABLE_MPAM;
1941
1942
1943
1944
1945
1946
1947
1948
1949 #define ACPI_MPST_CHANNEL_INFO \
1950 UINT8 ChannelId; \
1951 UINT8 Reserved1[3]; \
1952 UINT16 PowerNodeCount; \
1953 UINT16 Reserved2;
1954
1955
1956
1957 typedef struct acpi_table_mpst
1958 {
1959 ACPI_TABLE_HEADER Header;
1960 ACPI_MPST_CHANNEL_INFO
1961
1962 } ACPI_TABLE_MPST;
1963
1964
1965
1966
1967 typedef struct acpi_mpst_channel
1968 {
1969 ACPI_MPST_CHANNEL_INFO
1970
1971 } ACPI_MPST_CHANNEL;
1972
1973
1974
1975
1976 typedef struct acpi_mpst_power_node
1977 {
1978 UINT8 Flags;
1979 UINT8 Reserved1;
1980 UINT16 NodeId;
1981 UINT32 Length;
1982 UINT64 RangeAddress;
1983 UINT64 RangeLength;
1984 UINT32 NumPowerStates;
1985 UINT32 NumPhysicalComponents;
1986
1987 } ACPI_MPST_POWER_NODE;
1988
1989
1990
1991 #define ACPI_MPST_ENABLED 1
1992 #define ACPI_MPST_POWER_MANAGED 2
1993 #define ACPI_MPST_HOT_PLUG_CAPABLE 4
1994
1995
1996
1997
1998 typedef struct acpi_mpst_power_state
1999 {
2000 UINT8 PowerState;
2001 UINT8 InfoIndex;
2002
2003 } ACPI_MPST_POWER_STATE;
2004
2005
2006
2007
2008 typedef struct acpi_mpst_component
2009 {
2010 UINT16 ComponentId;
2011
2012 } ACPI_MPST_COMPONENT;
2013
2014
2015
2016
2017 typedef struct acpi_mpst_data_hdr
2018 {
2019 UINT16 CharacteristicsCount;
2020 UINT16 Reserved;
2021
2022 } ACPI_MPST_DATA_HDR;
2023
2024 typedef struct acpi_mpst_power_data
2025 {
2026 UINT8 StructureId;
2027 UINT8 Flags;
2028 UINT16 Reserved1;
2029 UINT32 AveragePower;
2030 UINT32 PowerSaving;
2031 UINT64 ExitLatency;
2032 UINT64 Reserved2;
2033
2034 } ACPI_MPST_POWER_DATA;
2035
2036
2037
2038 #define ACPI_MPST_PRESERVE 1
2039 #define ACPI_MPST_AUTOENTRY 2
2040 #define ACPI_MPST_AUTOEXIT 4
2041
2042
2043
2044
2045 typedef struct acpi_mpst_shared
2046 {
2047 UINT32 Signature;
2048 UINT16 PccCommand;
2049 UINT16 PccStatus;
2050 UINT32 CommandRegister;
2051 UINT32 StatusRegister;
2052 UINT32 PowerStateId;
2053 UINT32 PowerNodeId;
2054 UINT64 EnergyConsumed;
2055 UINT64 AveragePower;
2056
2057 } ACPI_MPST_SHARED;
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067 typedef struct acpi_table_msct
2068 {
2069 ACPI_TABLE_HEADER Header;
2070 UINT32 ProximityOffset;
2071 UINT32 MaxProximityDomains;
2072 UINT32 MaxClockDomains;
2073 UINT64 MaxAddress;
2074
2075 } ACPI_TABLE_MSCT;
2076
2077
2078
2079
2080 typedef struct acpi_msct_proximity
2081 {
2082 UINT8 Revision;
2083 UINT8 Length;
2084 UINT32 RangeStart;
2085 UINT32 RangeEnd;
2086 UINT32 ProcessorCapacity;
2087 UINT64 MemoryCapacity;
2088
2089 } ACPI_MSCT_PROXIMITY;
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103 typedef struct acpi_table_msdm
2104 {
2105 ACPI_TABLE_HEADER Header;
2106
2107 } ACPI_TABLE_MSDM;
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117 typedef struct acpi_table_nfit
2118 {
2119 ACPI_TABLE_HEADER Header;
2120 UINT32 Reserved;
2121
2122 } ACPI_TABLE_NFIT;
2123
2124
2125
2126 typedef struct acpi_nfit_header
2127 {
2128 UINT16 Type;
2129 UINT16 Length;
2130
2131 } ACPI_NFIT_HEADER;
2132
2133
2134
2135
2136 enum AcpiNfitType
2137 {
2138 ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
2139 ACPI_NFIT_TYPE_MEMORY_MAP = 1,
2140 ACPI_NFIT_TYPE_INTERLEAVE = 2,
2141 ACPI_NFIT_TYPE_SMBIOS = 3,
2142 ACPI_NFIT_TYPE_CONTROL_REGION = 4,
2143 ACPI_NFIT_TYPE_DATA_REGION = 5,
2144 ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
2145 ACPI_NFIT_TYPE_CAPABILITIES = 7,
2146 ACPI_NFIT_TYPE_RESERVED = 8
2147 };
2148
2149
2150
2151
2152
2153
2154
2155 typedef struct acpi_nfit_system_address
2156 {
2157 ACPI_NFIT_HEADER Header;
2158 UINT16 RangeIndex;
2159 UINT16 Flags;
2160 UINT32 Reserved;
2161 UINT32 ProximityDomain;
2162 UINT8 RangeGuid[16];
2163 UINT64 Address;
2164 UINT64 Length;
2165 UINT64 MemoryMapping;
2166 UINT64 LocationCookie;
2167
2168 } ACPI_NFIT_SYSTEM_ADDRESS;
2169
2170
2171
2172 #define ACPI_NFIT_ADD_ONLINE_ONLY (1)
2173 #define ACPI_NFIT_PROXIMITY_VALID (1<<1)
2174 #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2)
2175
2176
2177
2178
2179
2180
2181 typedef struct acpi_nfit_memory_map
2182 {
2183 ACPI_NFIT_HEADER Header;
2184 UINT32 DeviceHandle;
2185 UINT16 PhysicalId;
2186 UINT16 RegionId;
2187 UINT16 RangeIndex;
2188 UINT16 RegionIndex;
2189 UINT64 RegionSize;
2190 UINT64 RegionOffset;
2191 UINT64 Address;
2192 UINT16 InterleaveIndex;
2193 UINT16 InterleaveWays;
2194 UINT16 Flags;
2195 UINT16 Reserved;
2196
2197 } ACPI_NFIT_MEMORY_MAP;
2198
2199
2200
2201 #define ACPI_NFIT_MEM_SAVE_FAILED (1)
2202 #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1)
2203 #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2)
2204 #define ACPI_NFIT_MEM_NOT_ARMED (1<<3)
2205 #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4)
2206 #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5)
2207 #define ACPI_NFIT_MEM_MAP_FAILED (1<<6)
2208
2209
2210
2211
2212 typedef struct acpi_nfit_interleave
2213 {
2214 ACPI_NFIT_HEADER Header;
2215 UINT16 InterleaveIndex;
2216 UINT16 Reserved;
2217 UINT32 LineCount;
2218 UINT32 LineSize;
2219 UINT32 LineOffset[];
2220
2221 } ACPI_NFIT_INTERLEAVE;
2222
2223
2224
2225
2226 typedef struct acpi_nfit_smbios
2227 {
2228 ACPI_NFIT_HEADER Header;
2229 UINT32 Reserved;
2230 UINT8 Data[];
2231
2232 } ACPI_NFIT_SMBIOS;
2233
2234
2235
2236
2237 typedef struct acpi_nfit_control_region
2238 {
2239 ACPI_NFIT_HEADER Header;
2240 UINT16 RegionIndex;
2241 UINT16 VendorId;
2242 UINT16 DeviceId;
2243 UINT16 RevisionId;
2244 UINT16 SubsystemVendorId;
2245 UINT16 SubsystemDeviceId;
2246 UINT16 SubsystemRevisionId;
2247 UINT8 ValidFields;
2248 UINT8 ManufacturingLocation;
2249 UINT16 ManufacturingDate;
2250 UINT8 Reserved[2];
2251 UINT32 SerialNumber;
2252 UINT16 Code;
2253 UINT16 Windows;
2254 UINT64 WindowSize;
2255 UINT64 CommandOffset;
2256 UINT64 CommandSize;
2257 UINT64 StatusOffset;
2258 UINT64 StatusSize;
2259 UINT16 Flags;
2260 UINT8 Reserved1[6];
2261
2262 } ACPI_NFIT_CONTROL_REGION;
2263
2264
2265
2266 #define ACPI_NFIT_CONTROL_BUFFERED (1)
2267
2268
2269
2270 #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1)
2271
2272
2273
2274
2275 typedef struct acpi_nfit_data_region
2276 {
2277 ACPI_NFIT_HEADER Header;
2278 UINT16 RegionIndex;
2279 UINT16 Windows;
2280 UINT64 Offset;
2281 UINT64 Size;
2282 UINT64 Capacity;
2283 UINT64 StartAddress;
2284
2285 } ACPI_NFIT_DATA_REGION;
2286
2287
2288
2289
2290 typedef struct acpi_nfit_flush_address
2291 {
2292 ACPI_NFIT_HEADER Header;
2293 UINT32 DeviceHandle;
2294 UINT16 HintCount;
2295 UINT8 Reserved[6];
2296 UINT64 HintAddress[];
2297
2298 } ACPI_NFIT_FLUSH_ADDRESS;
2299
2300
2301
2302
2303 typedef struct acpi_nfit_capabilities
2304 {
2305 ACPI_NFIT_HEADER Header;
2306 UINT8 HighestCapability;
2307 UINT8 Reserved[3];
2308 UINT32 Capabilities;
2309 UINT32 Reserved2;
2310
2311 } ACPI_NFIT_CAPABILITIES;
2312
2313
2314
2315 #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1)
2316 #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1)
2317 #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2)
2318
2319
2320
2321
2322
2323 typedef struct nfit_device_handle
2324 {
2325 UINT32 Handle;
2326
2327 } NFIT_DEVICE_HANDLE;
2328
2329
2330
2331 #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F
2332 #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0
2333 #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00
2334 #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000
2335 #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000
2336
2337 #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0
2338 #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4
2339 #define ACPI_NFIT_MEMORY_ID_OFFSET 8
2340 #define ACPI_NFIT_SOCKET_ID_OFFSET 12
2341 #define ACPI_NFIT_NODE_ID_OFFSET 16
2342
2343
2344
2345 #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
2346 ((dimm) | \
2347 ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \
2348 ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \
2349 ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \
2350 ((node) << ACPI_NFIT_NODE_ID_OFFSET))
2351
2352
2353
2354 #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
2355 ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
2356
2357 #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
2358 (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
2359
2360 #define ACPI_NFIT_GET_MEMORY_ID(handle) \
2361 (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET)
2362
2363 #define ACPI_NFIT_GET_SOCKET_ID(handle) \
2364 (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET)
2365
2366 #define ACPI_NFIT_GET_NODE_ID(handle) \
2367 (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377 typedef struct acpi_table_nhlt
2378 {
2379 ACPI_TABLE_HEADER Header;
2380 UINT8 EndpointsCount;
2381
2382
2383
2384
2385
2386 } ACPI_TABLE_NHLT;
2387
2388 typedef struct acpi_nhlt_endpoint
2389 {
2390 UINT32 Length;
2391 UINT8 LinkType;
2392 UINT8 InstanceId;
2393 UINT16 VendorId;
2394 UINT16 DeviceId;
2395 UINT16 RevisionId;
2396 UINT32 SubsystemId;
2397 UINT8 DeviceType;
2398 UINT8 Direction;
2399 UINT8 VirtualBusId;
2400
2401
2402
2403
2404
2405
2406 } ACPI_NHLT_ENDPOINT;
2407
2408
2409
2410 #define ACPI_NHLT_LINKTYPE_HDA 0
2411 #define ACPI_NHLT_LINKTYPE_DSP 1
2412 #define ACPI_NHLT_LINKTYPE_PDM 2
2413 #define ACPI_NHLT_LINKTYPE_SSP 3
2414 #define ACPI_NHLT_LINKTYPE_SLIMBUS 4
2415 #define ACPI_NHLT_LINKTYPE_SDW 5
2416 #define ACPI_NHLT_LINKTYPE_UAOL 6
2417
2418
2419
2420 #define ACPI_NHLT_DEVICEID_DMIC 0xAE20
2421 #define ACPI_NHLT_DEVICEID_BT 0xAE30
2422 #define ACPI_NHLT_DEVICEID_I2S 0xAE34
2423
2424
2425
2426
2427 #define ACPI_NHLT_DEVICETYPE_PDM 0
2428 #define ACPI_NHLT_DEVICETYPE_PDM_SKL 1
2429
2430 #define ACPI_NHLT_DEVICETYPE_BT 0
2431 #define ACPI_NHLT_DEVICETYPE_FM 1
2432 #define ACPI_NHLT_DEVICETYPE_MODEM 2
2433 #define ACPI_NHLT_DEVICETYPE_CODEC 4
2434
2435
2436
2437 #define ACPI_NHLT_DIR_RENDER 0
2438 #define ACPI_NHLT_DIR_CAPTURE 1
2439
2440 typedef struct acpi_nhlt_config
2441 {
2442 UINT32 CapabilitiesSize;
2443 UINT8 Capabilities[1];
2444
2445 } ACPI_NHLT_CONFIG;
2446
2447 typedef struct acpi_nhlt_gendevice_config
2448 {
2449 UINT8 VirtualSlot;
2450 UINT8 ConfigType;
2451
2452 } ACPI_NHLT_GENDEVICE_CONFIG;
2453
2454
2455
2456 #define ACPI_NHLT_CONFIGTYPE_GENERIC 0
2457 #define ACPI_NHLT_CONFIGTYPE_MICARRAY 1
2458
2459 typedef struct acpi_nhlt_micdevice_config
2460 {
2461 UINT8 VirtualSlot;
2462 UINT8 ConfigType;
2463 UINT8 ArrayType;
2464
2465 } ACPI_NHLT_MICDEVICE_CONFIG;
2466
2467
2468
2469 #define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA
2470 #define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB
2471 #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC
2472 #define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD
2473 #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE
2474 #define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF
2475
2476 typedef struct acpi_nhlt_vendor_mic_config
2477 {
2478 UINT8 Type;
2479 UINT8 Panel;
2480 UINT16 SpeakerPositionDistance;
2481 UINT16 HorizontalOffset;
2482 UINT16 VerticalOffset;
2483 UINT8 FrequencyLowBand;
2484 UINT8 FrequencyHighBand;
2485 UINT16 DirectionAngle;
2486 UINT16 ElevationAngle;
2487 UINT16 WorkVerticalAngleBegin;
2488 UINT16 WorkVerticalAngleEnd;
2489 UINT16 WorkHorizontalAngleBegin;
2490 UINT16 WorkHorizontalAngleEnd;
2491
2492 } ACPI_NHLT_VENDOR_MIC_CONFIG;
2493
2494
2495
2496 #define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 0
2497 #define ACPI_NHLT_MICTYPE_SUBCARDIOID 1
2498 #define ACPI_NHLT_MICTYPE_CARDIOID 2
2499 #define ACPI_NHLT_MICTYPE_SUPERCARDIOID 3
2500 #define ACPI_NHLT_MICTYPE_HYPERCARDIOID 4
2501 #define ACPI_NHLT_MICTYPE_8SHAPED 5
2502 #define ACPI_NHLT_MICTYPE_RESERVED 6
2503 #define ACPI_NHLT_MICTYPE_VENDORDEFINED 7
2504
2505
2506
2507 #define ACPI_NHLT_MICLOCATION_TOP 0
2508 #define ACPI_NHLT_MICLOCATION_BOTTOM 1
2509 #define ACPI_NHLT_MICLOCATION_LEFT 2
2510 #define ACPI_NHLT_MICLOCATION_RIGHT 3
2511 #define ACPI_NHLT_MICLOCATION_FRONT 4
2512 #define ACPI_NHLT_MICLOCATION_REAR 5
2513
2514 typedef struct acpi_nhlt_vendor_micdevice_config
2515 {
2516 UINT8 VirtualSlot;
2517 UINT8 ConfigType;
2518 UINT8 ArrayType;
2519 UINT8 MicsCount;
2520 ACPI_NHLT_VENDOR_MIC_CONFIG Mics[];
2521
2522 } ACPI_NHLT_VENDOR_MICDEVICE_CONFIG;
2523
2524 typedef union acpi_nhlt_device_config
2525 {
2526 UINT8 VirtualSlot;
2527 ACPI_NHLT_GENDEVICE_CONFIG Gen;
2528 ACPI_NHLT_MICDEVICE_CONFIG Mic;
2529 ACPI_NHLT_VENDOR_MICDEVICE_CONFIG VendorMic;
2530
2531 } ACPI_NHLT_DEVICE_CONFIG;
2532
2533
2534 typedef struct acpi_nhlt_wave_formatext
2535 {
2536 UINT16 FormatTag;
2537 UINT16 ChannelCount;
2538 UINT32 SamplesPerSec;
2539 UINT32 AvgBytesPerSec;
2540 UINT16 BlockAlign;
2541 UINT16 BitsPerSample;
2542 UINT16 ExtraFormatSize;
2543 UINT16 ValidBitsPerSample;
2544 UINT32 ChannelMask;
2545 UINT8 Subformat[16];
2546
2547 } ACPI_NHLT_WAVE_FORMATEXT;
2548
2549 typedef struct acpi_nhlt_format_config
2550 {
2551 ACPI_NHLT_WAVE_FORMATEXT Format;
2552 ACPI_NHLT_CONFIG Config;
2553
2554 } ACPI_NHLT_FORMAT_CONFIG;
2555
2556 typedef struct acpi_nhlt_formats_config
2557 {
2558 UINT8 FormatsCount;
2559 ACPI_NHLT_FORMAT_CONFIG Formats[];
2560
2561 } ACPI_NHLT_FORMATS_CONFIG;
2562
2563 typedef struct acpi_nhlt_device_info
2564 {
2565 UINT8 Id[16];
2566 UINT8 InstanceId;
2567 UINT8 PortId;
2568
2569 } ACPI_NHLT_DEVICE_INFO;
2570
2571 typedef struct acpi_nhlt_devices_info
2572 {
2573 UINT8 DevicesCount;
2574 ACPI_NHLT_DEVICE_INFO Devices[];
2575
2576 } ACPI_NHLT_DEVICES_INFO;
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586 typedef struct acpi_table_pcct
2587 {
2588 ACPI_TABLE_HEADER Header;
2589 UINT32 Flags;
2590 UINT64 Reserved;
2591
2592 } ACPI_TABLE_PCCT;
2593
2594
2595
2596 #define ACPI_PCCT_DOORBELL 1
2597
2598
2599
2600 enum AcpiPcctType
2601 {
2602 ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
2603 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
2604 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
2605 ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
2606 ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
2607 ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,
2608 ACPI_PCCT_TYPE_RESERVED = 6
2609 };
2610
2611
2612
2613
2614
2615
2616
2617 typedef struct acpi_pcct_subspace
2618 {
2619 ACPI_SUBTABLE_HEADER Header;
2620 UINT8 Reserved[6];
2621 UINT64 BaseAddress;
2622 UINT64 Length;
2623 ACPI_GENERIC_ADDRESS DoorbellRegister;
2624 UINT64 PreserveMask;
2625 UINT64 WriteMask;
2626 UINT32 Latency;
2627 UINT32 MaxAccessRate;
2628 UINT16 MinTurnaroundTime;
2629
2630 } ACPI_PCCT_SUBSPACE;
2631
2632
2633
2634
2635 typedef struct acpi_pcct_hw_reduced
2636 {
2637 ACPI_SUBTABLE_HEADER Header;
2638 UINT32 PlatformInterrupt;
2639 UINT8 Flags;
2640 UINT8 Reserved;
2641 UINT64 BaseAddress;
2642 UINT64 Length;
2643 ACPI_GENERIC_ADDRESS DoorbellRegister;
2644 UINT64 PreserveMask;
2645 UINT64 WriteMask;
2646 UINT32 Latency;
2647 UINT32 MaxAccessRate;
2648 UINT16 MinTurnaroundTime;
2649
2650 } ACPI_PCCT_HW_REDUCED;
2651
2652
2653
2654
2655 typedef struct acpi_pcct_hw_reduced_type2
2656 {
2657 ACPI_SUBTABLE_HEADER Header;
2658 UINT32 PlatformInterrupt;
2659 UINT8 Flags;
2660 UINT8 Reserved;
2661 UINT64 BaseAddress;
2662 UINT64 Length;
2663 ACPI_GENERIC_ADDRESS DoorbellRegister;
2664 UINT64 PreserveMask;
2665 UINT64 WriteMask;
2666 UINT32 Latency;
2667 UINT32 MaxAccessRate;
2668 UINT16 MinTurnaroundTime;
2669 ACPI_GENERIC_ADDRESS PlatformAckRegister;
2670 UINT64 AckPreserveMask;
2671 UINT64 AckWriteMask;
2672
2673 } ACPI_PCCT_HW_REDUCED_TYPE2;
2674
2675
2676
2677
2678 typedef struct acpi_pcct_ext_pcc_master
2679 {
2680 ACPI_SUBTABLE_HEADER Header;
2681 UINT32 PlatformInterrupt;
2682 UINT8 Flags;
2683 UINT8 Reserved1;
2684 UINT64 BaseAddress;
2685 UINT32 Length;
2686 ACPI_GENERIC_ADDRESS DoorbellRegister;
2687 UINT64 PreserveMask;
2688 UINT64 WriteMask;
2689 UINT32 Latency;
2690 UINT32 MaxAccessRate;
2691 UINT32 MinTurnaroundTime;
2692 ACPI_GENERIC_ADDRESS PlatformAckRegister;
2693 UINT64 AckPreserveMask;
2694 UINT64 AckSetMask;
2695 UINT64 Reserved2;
2696 ACPI_GENERIC_ADDRESS CmdCompleteRegister;
2697 UINT64 CmdCompleteMask;
2698 ACPI_GENERIC_ADDRESS CmdUpdateRegister;
2699 UINT64 CmdUpdatePreserveMask;
2700 UINT64 CmdUpdateSetMask;
2701 ACPI_GENERIC_ADDRESS ErrorStatusRegister;
2702 UINT64 ErrorStatusMask;
2703
2704 } ACPI_PCCT_EXT_PCC_MASTER;
2705
2706
2707
2708
2709 typedef struct acpi_pcct_ext_pcc_slave
2710 {
2711 ACPI_SUBTABLE_HEADER Header;
2712 UINT32 PlatformInterrupt;
2713 UINT8 Flags;
2714 UINT8 Reserved1;
2715 UINT64 BaseAddress;
2716 UINT32 Length;
2717 ACPI_GENERIC_ADDRESS DoorbellRegister;
2718 UINT64 PreserveMask;
2719 UINT64 WriteMask;
2720 UINT32 Latency;
2721 UINT32 MaxAccessRate;
2722 UINT32 MinTurnaroundTime;
2723 ACPI_GENERIC_ADDRESS PlatformAckRegister;
2724 UINT64 AckPreserveMask;
2725 UINT64 AckSetMask;
2726 UINT64 Reserved2;
2727 ACPI_GENERIC_ADDRESS CmdCompleteRegister;
2728 UINT64 CmdCompleteMask;
2729 ACPI_GENERIC_ADDRESS CmdUpdateRegister;
2730 UINT64 CmdUpdatePreserveMask;
2731 UINT64 CmdUpdateSetMask;
2732 ACPI_GENERIC_ADDRESS ErrorStatusRegister;
2733 UINT64 ErrorStatusMask;
2734
2735 } ACPI_PCCT_EXT_PCC_SLAVE;
2736
2737
2738
2739 typedef struct acpi_pcct_hw_reg
2740 {
2741 ACPI_SUBTABLE_HEADER Header;
2742 UINT16 Version;
2743 UINT64 BaseAddress;
2744 UINT64 Length;
2745 ACPI_GENERIC_ADDRESS DoorbellRegister;
2746 UINT64 DoorbellPreserve;
2747 UINT64 DoorbellWrite;
2748 ACPI_GENERIC_ADDRESS CmdCompleteRegister;
2749 UINT64 CmdCompleteMask;
2750 ACPI_GENERIC_ADDRESS ErrorStatusRegister;
2751 UINT64 ErrorStatusMask;
2752 UINT32 NominalLatency;
2753 UINT32 MinTurnaroundTime;
2754
2755 } ACPI_PCCT_HW_REG;
2756
2757
2758
2759
2760 #define ACPI_PCCT_INTERRUPT_POLARITY (1)
2761 #define ACPI_PCCT_INTERRUPT_MODE (1<<1)
2762
2763
2764
2765
2766
2767
2768
2769
2770 typedef struct acpi_pcct_shared_memory
2771 {
2772 UINT32 Signature;
2773 UINT16 Command;
2774 UINT16 Status;
2775
2776 } ACPI_PCCT_SHARED_MEMORY;
2777
2778
2779
2780
2781 typedef struct acpi_pcct_ext_pcc_shared_memory
2782 {
2783 UINT32 Signature;
2784 UINT32 Flags;
2785 UINT32 Length;
2786 UINT32 Command;
2787
2788 } ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798 typedef struct acpi_table_pdtt
2799 {
2800 ACPI_TABLE_HEADER Header;
2801 UINT8 TriggerCount;
2802 UINT8 Reserved[3];
2803 UINT32 ArrayOffset;
2804
2805 } ACPI_TABLE_PDTT;
2806
2807
2808
2809
2810
2811
2812
2813 typedef struct acpi_pdtt_channel
2814 {
2815 UINT8 SubchannelId;
2816 UINT8 Flags;
2817
2818 } ACPI_PDTT_CHANNEL;
2819
2820
2821
2822 #define ACPI_PDTT_RUNTIME_TRIGGER (1)
2823 #define ACPI_PDTT_WAIT_COMPLETION (1<<1)
2824 #define ACPI_PDTT_TRIGGER_ORDER (1<<2)
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834 typedef struct acpi_table_phat
2835 {
2836 ACPI_TABLE_HEADER Header;
2837
2838 } ACPI_TABLE_PHAT;
2839
2840
2841
2842 typedef struct acpi_phat_header
2843 {
2844 UINT16 Type;
2845 UINT16 Length;
2846 UINT8 Revision;
2847
2848 } ACPI_PHAT_HEADER;
2849
2850
2851
2852
2853 #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0
2854 #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1
2855 #define ACPI_PHAT_TYPE_RESERVED 2
2856
2857
2858
2859
2860
2861
2862
2863 typedef struct acpi_phat_version_data
2864 {
2865 ACPI_PHAT_HEADER Header;
2866 UINT8 Reserved[3];
2867 UINT32 ElementCount;
2868
2869 } ACPI_PHAT_VERSION_DATA;
2870
2871 typedef struct acpi_phat_version_element
2872 {
2873 UINT8 Guid[16];
2874 UINT64 VersionValue;
2875 UINT32 ProducerId;
2876
2877 } ACPI_PHAT_VERSION_ELEMENT;
2878
2879
2880
2881
2882 typedef struct acpi_phat_health_data
2883 {
2884 ACPI_PHAT_HEADER Header;
2885 UINT8 Reserved[2];
2886 UINT8 Health;
2887 UINT8 DeviceGuid[16];
2888 UINT32 DeviceSpecificOffset;
2889
2890 } ACPI_PHAT_HEALTH_DATA;
2891
2892
2893
2894 #define ACPI_PHAT_ERRORS_FOUND 0
2895 #define ACPI_PHAT_NO_ERRORS 1
2896 #define ACPI_PHAT_UNKNOWN_ERRORS 2
2897 #define ACPI_PHAT_ADVISORY 3
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907 typedef struct acpi_table_pmtt
2908 {
2909 ACPI_TABLE_HEADER Header;
2910 UINT32 MemoryDeviceCount;
2911
2912
2913
2914
2915
2916 } ACPI_TABLE_PMTT;
2917
2918
2919
2920
2921 typedef struct acpi_pmtt_header
2922 {
2923 UINT8 Type;
2924 UINT8 Reserved1;
2925 UINT16 Length;
2926 UINT16 Flags;
2927 UINT16 Reserved2;
2928 UINT32 MemoryDeviceCount;
2929
2930
2931
2932
2933
2934
2935 } ACPI_PMTT_HEADER;
2936
2937
2938
2939 #define ACPI_PMTT_TYPE_SOCKET 0
2940 #define ACPI_PMTT_TYPE_CONTROLLER 1
2941 #define ACPI_PMTT_TYPE_DIMM 2
2942 #define ACPI_PMTT_TYPE_RESERVED 3
2943 #define ACPI_PMTT_TYPE_VENDOR 0xFF
2944
2945
2946
2947 #define ACPI_PMTT_TOP_LEVEL 0x0001
2948 #define ACPI_PMTT_PHYSICAL 0x0002
2949 #define ACPI_PMTT_MEMORY_TYPE 0x000C
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959 typedef struct acpi_pmtt_socket
2960 {
2961 ACPI_PMTT_HEADER Header;
2962 UINT16 SocketId;
2963 UINT16 Reserved;
2964
2965 } ACPI_PMTT_SOCKET;
2966
2967
2968
2969
2970
2971
2972
2973
2974 typedef struct acpi_pmtt_controller
2975 {
2976 ACPI_PMTT_HEADER Header;
2977 UINT16 ControllerId;
2978 UINT16 Reserved;
2979
2980 } ACPI_PMTT_CONTROLLER;
2981
2982
2983
2984
2985
2986
2987
2988
2989 typedef struct acpi_pmtt_physical_component
2990 {
2991 ACPI_PMTT_HEADER Header;
2992 UINT32 BiosHandle;
2993
2994 } ACPI_PMTT_PHYSICAL_COMPONENT;
2995
2996
2997
2998
2999 typedef struct acpi_pmtt_vendor_specific
3000 {
3001 ACPI_PMTT_HEADER Header;
3002 UINT8 TypeUuid[16];
3003 UINT8 Specific[];
3004
3005
3006
3007
3008
3009
3010 } ACPI_PMTT_VENDOR_SPECIFIC;
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020 typedef struct acpi_table_pptt
3021 {
3022 ACPI_TABLE_HEADER Header;
3023
3024 } ACPI_TABLE_PPTT;
3025
3026
3027
3028 enum AcpiPpttType
3029 {
3030 ACPI_PPTT_TYPE_PROCESSOR = 0,
3031 ACPI_PPTT_TYPE_CACHE = 1,
3032 ACPI_PPTT_TYPE_ID = 2,
3033 ACPI_PPTT_TYPE_RESERVED = 3
3034 };
3035
3036
3037
3038
3039 typedef struct acpi_pptt_processor
3040 {
3041 ACPI_SUBTABLE_HEADER Header;
3042 UINT16 Reserved;
3043 UINT32 Flags;
3044 UINT32 Parent;
3045 UINT32 AcpiProcessorId;
3046 UINT32 NumberOfPrivResources;
3047
3048 } ACPI_PPTT_PROCESSOR;
3049
3050
3051
3052 #define ACPI_PPTT_PHYSICAL_PACKAGE (1)
3053 #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1)
3054 #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2)
3055 #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3)
3056 #define ACPI_PPTT_ACPI_IDENTICAL (1<<4)
3057
3058
3059
3060
3061 typedef struct acpi_pptt_cache
3062 {
3063 ACPI_SUBTABLE_HEADER Header;
3064 UINT16 Reserved;
3065 UINT32 Flags;
3066 UINT32 NextLevelOfCache;
3067 UINT32 Size;
3068 UINT32 NumberOfSets;
3069 UINT8 Associativity;
3070 UINT8 Attributes;
3071 UINT16 LineSize;
3072
3073 } ACPI_PPTT_CACHE;
3074
3075
3076
3077 typedef struct acpi_pptt_cache_v1
3078 {
3079 UINT32 CacheId;
3080
3081 } ACPI_PPTT_CACHE_V1;
3082
3083
3084
3085
3086 #define ACPI_PPTT_SIZE_PROPERTY_VALID (1)
3087 #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1)
3088 #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2)
3089 #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3)
3090 #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4)
3091 #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5)
3092 #define ACPI_PPTT_LINE_SIZE_VALID (1<<6)
3093 #define ACPI_PPTT_CACHE_ID_VALID (1<<7)
3094
3095
3096
3097 #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03)
3098 #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C)
3099 #define ACPI_PPTT_MASK_WRITE_POLICY (0x10)
3100
3101
3102 #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0)
3103 #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01)
3104 #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02)
3105 #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03)
3106
3107 #define ACPI_PPTT_CACHE_TYPE_DATA (0x0)
3108 #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2)
3109 #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2)
3110 #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2)
3111
3112 #define ACPI_PPTT_CACHE_POLICY_WB (0x0)
3113 #define ACPI_PPTT_CACHE_POLICY_WT (1<<4)
3114
3115
3116
3117 typedef struct acpi_pptt_id
3118 {
3119 ACPI_SUBTABLE_HEADER Header;
3120 UINT16 Reserved;
3121 UINT32 VendorId;
3122 UINT64 Level1Id;
3123 UINT64 Level2Id;
3124 UINT16 MajorRev;
3125 UINT16 MinorRev;
3126 UINT16 SpinRev;
3127
3128 } ACPI_PPTT_ID;
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138 typedef struct acpi_table_prmt
3139 {
3140 ACPI_TABLE_HEADER Header;
3141
3142 } ACPI_TABLE_PRMT;
3143
3144 typedef struct acpi_table_prmt_header
3145 {
3146 UINT8 PlatformGuid[16];
3147 UINT32 ModuleInfoOffset;
3148 UINT32 ModuleInfoCount;
3149
3150 } ACPI_TABLE_PRMT_HEADER;
3151
3152 typedef struct acpi_prmt_module_header
3153 {
3154 UINT16 Revision;
3155 UINT16 Length;
3156
3157 } ACPI_PRMT_MODULE_HEADER;
3158
3159 typedef struct acpi_prmt_module_info
3160 {
3161 UINT16 Revision;
3162 UINT16 Length;
3163 UINT8 ModuleGuid[16];
3164 UINT16 MajorRev;
3165 UINT16 MinorRev;
3166 UINT16 HandlerInfoCount;
3167 UINT32 HandlerInfoOffset;
3168 UINT64 MmioListPointer;
3169
3170 } ACPI_PRMT_MODULE_INFO;
3171
3172 typedef struct acpi_prmt_handler_info
3173 {
3174 UINT16 Revision;
3175 UINT16 Length;
3176 UINT8 HandlerGuid[16];
3177 UINT64 HandlerAddress;
3178 UINT64 StaticDataBufferAddress;
3179 UINT64 AcpiParamBufferAddress;
3180
3181 } ACPI_PRMT_HANDLER_INFO;
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191 typedef struct acpi_table_rasf
3192 {
3193 ACPI_TABLE_HEADER Header;
3194 UINT8 ChannelId[12];
3195
3196 } ACPI_TABLE_RASF;
3197
3198
3199
3200 typedef struct acpi_rasf_shared_memory
3201 {
3202 UINT32 Signature;
3203 UINT16 Command;
3204 UINT16 Status;
3205 UINT16 Version;
3206 UINT8 Capabilities[16];
3207 UINT8 SetCapabilities[16];
3208 UINT16 NumParameterBlocks;
3209 UINT32 SetCapabilitiesStatus;
3210
3211 } ACPI_RASF_SHARED_MEMORY;
3212
3213
3214
3215 typedef struct acpi_rasf_parameter_block
3216 {
3217 UINT16 Type;
3218 UINT16 Version;
3219 UINT16 Length;
3220
3221 } ACPI_RASF_PARAMETER_BLOCK;
3222
3223
3224
3225 typedef struct acpi_rasf_patrol_scrub_parameter
3226 {
3227 ACPI_RASF_PARAMETER_BLOCK Header;
3228 UINT16 PatrolScrubCommand;
3229 UINT64 RequestedAddressRange[2];
3230 UINT64 ActualAddressRange[2];
3231 UINT16 Flags;
3232 UINT8 RequestedSpeed;
3233
3234 } ACPI_RASF_PATROL_SCRUB_PARAMETER;
3235
3236
3237
3238 #define ACPI_RASF_SCRUBBER_RUNNING 1
3239 #define ACPI_RASF_SPEED (7<<1)
3240 #define ACPI_RASF_SPEED_SLOW (0<<1)
3241 #define ACPI_RASF_SPEED_MEDIUM (4<<1)
3242 #define ACPI_RASF_SPEED_FAST (7<<1)
3243
3244
3245
3246 enum AcpiRasfCommands
3247 {
3248 ACPI_RASF_EXECUTE_RASF_COMMAND = 1
3249 };
3250
3251
3252
3253 enum AcpiRasfCapabiliities
3254 {
3255 ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,
3256 ACPI_SW_PATROL_SCRUB_EXPOSED = 1
3257 };
3258
3259
3260
3261 enum AcpiRasfPatrolScrubCommands
3262 {
3263 ACPI_RASF_GET_PATROL_PARAMETERS = 1,
3264 ACPI_RASF_START_PATROL_SCRUBBER = 2,
3265 ACPI_RASF_STOP_PATROL_SCRUBBER = 3
3266 };
3267
3268
3269
3270 #define ACPI_RASF_GENERATE_SCI (1<<15)
3271
3272
3273
3274 enum AcpiRasfStatus
3275 {
3276 ACPI_RASF_SUCCESS = 0,
3277 ACPI_RASF_NOT_VALID = 1,
3278 ACPI_RASF_NOT_SUPPORTED = 2,
3279 ACPI_RASF_BUSY = 3,
3280 ACPI_RASF_FAILED = 4,
3281 ACPI_RASF_ABORTED = 5,
3282 ACPI_RASF_INVALID_DATA = 6
3283 };
3284
3285
3286
3287 #define ACPI_RASF_COMMAND_COMPLETE (1)
3288 #define ACPI_RASF_SCI_DOORBELL (1<<1)
3289 #define ACPI_RASF_ERROR (1<<2)
3290 #define ACPI_RASF_STATUS (0x1F<<3)
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301 typedef struct acpi_table_ras2 {
3302 ACPI_TABLE_HEADER Header;
3303 UINT16 Reserved;
3304 UINT16 NumPccDescs;
3305
3306 } ACPI_TABLE_RAS2;
3307
3308
3309
3310 typedef struct acpi_ras2_pcc_desc {
3311 UINT8 ChannelId;
3312 UINT16 Reserved;
3313 UINT8 FeatureType;
3314 UINT32 Instance;
3315
3316 } ACPI_RAS2_PCC_DESC;
3317
3318
3319
3320 typedef struct acpi_ras2_shared_memory {
3321 UINT32 Signature;
3322 UINT16 Command;
3323 UINT16 Status;
3324 UINT16 Version;
3325 UINT8 Features[16];
3326 UINT8 SetCapabilities[16];
3327 UINT16 NumParameterBlocks;
3328 UINT32 SetCapabilitiesStatus;
3329
3330 } ACPI_RAS2_SHARED_MEMORY;
3331
3332
3333
3334 typedef struct acpi_ras2_parameter_block
3335 {
3336 UINT16 Type;
3337 UINT16 Version;
3338 UINT16 Length;
3339
3340 } ACPI_RAS2_PARAMETER_BLOCK;
3341
3342
3343
3344 typedef struct acpi_ras2_patrol_scrub_parameter {
3345 ACPI_RAS2_PARAMETER_BLOCK Header;
3346 UINT16 PatrolScrubCommand;
3347 UINT64 RequestedAddressRange[2];
3348 UINT64 ActualAddressRange[2];
3349 UINT32 Flags;
3350 UINT32 ScrubParamsOut;
3351 UINT32 ScrubParamsIn;
3352
3353 } ACPI_RAS2_PATROL_SCRUB_PARAMETER;
3354
3355
3356
3357 #define ACPI_RAS2_SCRUBBER_RUNNING 1
3358
3359
3360
3361 typedef struct acpi_ras2_la2pa_translation_parameter {
3362 ACPI_RAS2_PARAMETER_BLOCK Header;
3363 UINT16 AddrTranslationCommand;
3364 UINT64 SubInstId;
3365 UINT64 LogicalAddress;
3366 UINT64 PhysicalAddress;
3367 UINT32 Status;
3368
3369 } ACPI_RAS2_LA2PA_TRANSLATION_PARAM;
3370
3371
3372
3373 enum AcpiRas2Commands
3374 {
3375 ACPI_RAS2_EXECUTE_RAS2_COMMAND = 1
3376 };
3377
3378
3379
3380 enum AcpiRas2Features
3381 {
3382 ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0,
3383 ACPI_RAS2_LA2PA_TRANSLATION = 1
3384 };
3385
3386
3387
3388 enum AcpiRas2PatrolScrubCommands
3389 {
3390 ACPI_RAS2_GET_PATROL_PARAMETERS = 1,
3391 ACPI_RAS2_START_PATROL_SCRUBBER = 2,
3392 ACPI_RAS2_STOP_PATROL_SCRUBBER = 3
3393 };
3394
3395
3396
3397 enum AcpiRas2La2PaTranslationCommands
3398 {
3399 ACPI_RAS2_GET_LA2PA_TRANSLATION = 1,
3400 };
3401
3402
3403
3404 enum AcpiRas2La2PaTranslationStatus
3405 {
3406 ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,
3407 ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1,
3408 };
3409
3410
3411
3412 #define ACPI_RAS2_GENERATE_SCI (1<<15)
3413
3414
3415
3416 enum AcpiRas2Status
3417 {
3418 ACPI_RAS2_SUCCESS = 0,
3419 ACPI_RAS2_NOT_VALID = 1,
3420 ACPI_RAS2_NOT_SUPPORTED = 2,
3421 ACPI_RAS2_BUSY = 3,
3422 ACPI_RAS2_FAILED = 4,
3423 ACPI_RAS2_ABORTED = 5,
3424 ACPI_RAS2_INVALID_DATA = 6
3425 };
3426
3427
3428
3429 #define ACPI_RAS2_COMMAND_COMPLETE (1)
3430 #define ACPI_RAS2_SCI_DOORBELL (1<<1)
3431 #define ACPI_RAS2_ERROR (1<<2)
3432 #define ACPI_RAS2_STATUS (0x1F<<3)
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445 typedef struct acpi_table_rgrt
3446 {
3447 ACPI_TABLE_HEADER Header;
3448 UINT16 Version;
3449 UINT8 ImageType;
3450 UINT8 Reserved;
3451 UINT8 Image[];
3452
3453 } ACPI_TABLE_RGRT;
3454
3455
3456
3457 enum AcpiRgrtImageType
3458 {
3459 ACPI_RGRT_TYPE_RESERVED0 = 0,
3460 ACPI_RGRT_IMAGE_TYPE_PNG = 1,
3461 ACPI_RGRT_TYPE_RESERVED = 2
3462 };
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472 typedef struct acpi_table_rhct {
3473 ACPI_TABLE_HEADER Header;
3474 UINT32 Flags;
3475 UINT64 TimeBaseFreq;
3476 UINT32 NodeCount;
3477 UINT32 NodeOffset;
3478 } ACPI_TABLE_RHCT;
3479
3480
3481
3482 #define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1)
3483
3484
3485
3486 typedef struct acpi_rhct_node_header {
3487 UINT16 Type;
3488 UINT16 Length;
3489 UINT16 Revision;
3490 } ACPI_RHCT_NODE_HEADER;
3491
3492
3493
3494 enum acpi_rhct_node_type {
3495 ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,
3496 ACPI_RHCT_NODE_TYPE_CMO = 0x0001,
3497 ACPI_RHCT_NODE_TYPE_MMU = 0x0002,
3498 ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,
3499 ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,
3500 };
3501
3502
3503
3504
3505
3506
3507 typedef struct acpi_rhct_isa_string {
3508 UINT16 IsaLength;
3509 char Isa[];
3510 } ACPI_RHCT_ISA_STRING;
3511
3512 typedef struct acpi_rhct_cmo_node {
3513 UINT8 Reserved;
3514 UINT8 CbomSize;
3515 UINT8 CbopSize;
3516 UINT8 CbozSize;
3517 } ACPI_RHCT_CMO_NODE;
3518
3519 typedef struct acpi_rhct_mmu_node {
3520 UINT8 Reserved;
3521 UINT8 MmuType;
3522 } ACPI_RHCT_MMU_NODE;
3523
3524 enum acpi_rhct_mmu_type {
3525 ACPI_RHCT_MMU_TYPE_SV39 = 0,
3526 ACPI_RHCT_MMU_TYPE_SV48 = 1,
3527 ACPI_RHCT_MMU_TYPE_SV57 = 2
3528 };
3529
3530
3531 typedef struct acpi_rhct_hart_info {
3532 UINT16 NumOffsets;
3533 UINT32 Uid;
3534 } ACPI_RHCT_HART_INFO;
3535
3536
3537
3538
3539
3540
3541
3542
3543 typedef struct acpi_table_sbst
3544 {
3545 ACPI_TABLE_HEADER Header;
3546 UINT32 WarningLevel;
3547 UINT32 LowLevel;
3548 UINT32 CriticalLevel;
3549
3550 } ACPI_TABLE_SBST;
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562 typedef struct acpi_table_sdei
3563 {
3564 ACPI_TABLE_HEADER Header;
3565
3566 } ACPI_TABLE_SDEI;
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576 typedef struct acpi_table_sdev
3577 {
3578 ACPI_TABLE_HEADER Header;
3579
3580 } ACPI_TABLE_SDEV;
3581
3582
3583 typedef struct acpi_sdev_header
3584 {
3585 UINT8 Type;
3586 UINT8 Flags;
3587 UINT16 Length;
3588
3589 } ACPI_SDEV_HEADER;
3590
3591
3592
3593
3594 enum AcpiSdevType
3595 {
3596 ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,
3597 ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
3598 ACPI_SDEV_TYPE_RESERVED = 2
3599 };
3600
3601
3602
3603 #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)
3604 #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
3605
3606
3607
3608
3609
3610
3611
3612 typedef struct acpi_sdev_namespace
3613 {
3614 ACPI_SDEV_HEADER Header;
3615 UINT16 DeviceIdOffset;
3616 UINT16 DeviceIdLength;
3617 UINT16 VendorDataOffset;
3618 UINT16 VendorDataLength;
3619
3620 } ACPI_SDEV_NAMESPACE;
3621
3622 typedef struct acpi_sdev_secure_component
3623 {
3624 UINT16 SecureComponentOffset;
3625 UINT16 SecureComponentLength;
3626
3627 } ACPI_SDEV_SECURE_COMPONENT;
3628
3629
3630
3631
3632
3633 typedef struct acpi_sdev_component
3634 {
3635 ACPI_SDEV_HEADER Header;
3636
3637 } ACPI_SDEV_COMPONENT;
3638
3639
3640
3641
3642 enum AcpiSacType
3643 {
3644 ACPI_SDEV_TYPE_ID_COMPONENT = 0,
3645 ACPI_SDEV_TYPE_MEM_COMPONENT = 1
3646 };
3647
3648 typedef struct acpi_sdev_id_component
3649 {
3650 ACPI_SDEV_HEADER Header;
3651 UINT16 HardwareIdOffset;
3652 UINT16 HardwareIdLength;
3653 UINT16 SubsystemIdOffset;
3654 UINT16 SubsystemIdLength;
3655 UINT16 HardwareRevision;
3656 UINT8 HardwareRevPresent;
3657 UINT8 ClassCodePresent;
3658 UINT8 PciBaseClass;
3659 UINT8 PciSubClass;
3660 UINT8 PciProgrammingXface;
3661
3662 } ACPI_SDEV_ID_COMPONENT;
3663
3664 typedef struct acpi_sdev_mem_component
3665 {
3666 ACPI_SDEV_HEADER Header;
3667 UINT32 Reserved;
3668 UINT64 MemoryBaseAddress;
3669 UINT64 MemoryLength;
3670
3671 } ACPI_SDEV_MEM_COMPONENT;
3672
3673
3674
3675
3676 typedef struct acpi_sdev_pcie
3677 {
3678 ACPI_SDEV_HEADER Header;
3679 UINT16 Segment;
3680 UINT16 StartBus;
3681 UINT16 PathOffset;
3682 UINT16 PathLength;
3683 UINT16 VendorDataOffset;
3684 UINT16 VendorDataLength;
3685
3686 } ACPI_SDEV_PCIE;
3687
3688
3689
3690 typedef struct acpi_sdev_pcie_path
3691 {
3692 UINT8 Device;
3693 UINT8 Function;
3694
3695 } ACPI_SDEV_PCIE_PATH;
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707 typedef struct acpi_table_svkl
3708 {
3709 ACPI_TABLE_HEADER Header;
3710 UINT32 Count;
3711
3712 } ACPI_TABLE_SVKL;
3713
3714 typedef struct acpi_svkl_key
3715 {
3716 UINT16 Type;
3717 UINT16 Format;
3718 UINT32 Size;
3719 UINT64 Address;
3720
3721 } ACPI_SVKL_KEY;
3722
3723 enum acpi_svkl_type
3724 {
3725 ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
3726 ACPI_SVKL_TYPE_RESERVED = 1
3727 };
3728
3729 enum acpi_svkl_format
3730 {
3731 ACPI_SVKL_FORMAT_RAW_BINARY = 0,
3732 ACPI_SVKL_FORMAT_RESERVED = 1
3733 };
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745 typedef struct acpi_table_tdel
3746 {
3747 ACPI_TABLE_HEADER Header;
3748 UINT32 Reserved;
3749 UINT64 LogAreaMinimumLength;
3750 UINT64 LogAreaStartAddress;
3751
3752 } ACPI_TABLE_TDEL;
3753
3754
3755
3756 #pragma pack()
3757
3758 #endif