1db1b7ce2SLawrence Tang #ifndef CPER_SECTION_DMAR_VTD_H
2db1b7ce2SLawrence Tang #define CPER_SECTION_DMAR_VTD_H
3db1b7ce2SLawrence Tang 
4db1b7ce2SLawrence Tang #include "json.h"
5db1b7ce2SLawrence Tang #include "../edk/Cper.h"
6db1b7ce2SLawrence Tang 
7*ce0f82bfSLawrence Tang #define VTD_FAULT_RECORD_TYPES_KEYS (int []){0, 1}
8*ce0f82bfSLawrence Tang #define VTD_FAULT_RECORD_TYPES_VALUES (const char*[]){"Write Request", "Read/AtomicOp Request"}
9*ce0f82bfSLawrence Tang 
10*ce0f82bfSLawrence Tang typedef struct {
11*ce0f82bfSLawrence Tang     UINT64 Resv1 : 12;
12*ce0f82bfSLawrence Tang     UINT64 FaultInformation : 52;
13*ce0f82bfSLawrence Tang     UINT64 SourceIdentifier : 16;
14*ce0f82bfSLawrence Tang     UINT64 Resv2 : 13;
15*ce0f82bfSLawrence Tang     UINT64 PrivelegeModeRequested : 1;
16*ce0f82bfSLawrence Tang     UINT64 ExecutePermissionRequested : 1;
17*ce0f82bfSLawrence Tang     UINT64 PasidPresent : 1;
18*ce0f82bfSLawrence Tang     UINT64 FaultReason : 8;
19*ce0f82bfSLawrence Tang     UINT64 PasidValue : 20;
20*ce0f82bfSLawrence Tang     UINT64 AddressType : 2;
21*ce0f82bfSLawrence Tang     UINT64 Type : 1;
22*ce0f82bfSLawrence Tang     UINT64 Resv3 : 1;
23*ce0f82bfSLawrence Tang } EFI_VTD_FAULT_RECORD;
24*ce0f82bfSLawrence Tang 
25db1b7ce2SLawrence Tang json_object* cper_section_dmar_vtd_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor);
26db1b7ce2SLawrence Tang 
27db1b7ce2SLawrence Tang #endif