1 #ifndef CPER_SECTION_PCIE_H
2 #define CPER_SECTION_PCIE_H
3 
4 #include "json.h"
5 #include "../edk/Cper.h"
6 
7 #define PCIE_ERROR_VALID_BITFIELD_NAMES (const char*[]) {"portTypeValid", "versionValid", "commandStatusValid", \
8     "deviceIDValid", "deviceSerialNumberValid", "bridgeControlStatusValid", "capabilityStructureStatusValid", \
9     "aerInfoValid"}
10 #define PCIE_ERROR_PORT_TYPES_KEYS (int []){0, 1, 4, 5, 6, 7, 8, 9, 10}
11 #define PCIE_ERROR_PORT_TYPES_VALUES (const char*[]){"PCI Express End Point", "Legacy PCI End Point Device", \
12     "Root Port", "Upstream Switch Port", "Downstream Switch Port", "PCI Express to PCI/PCI-X Bridge", \
13     "PCI/PCI-X Bridge to PCI Express Bridge", "Root Complex Integrated Endpoint Device", "Root Complex Event Collector"}
14 
15 typedef struct {
16     UINT64 PcieExtendedCapabilityId : 16;
17     UINT64 CapabilityVersion : 4;
18     UINT64 NextCapabilityOffset : 12;
19 } EFI_PCIE_ADV_ERROR_EXT_CAPABILITY_HEADER;
20 
21 typedef struct {
22     EFI_PCIE_ADV_ERROR_EXT_CAPABILITY_HEADER Header;
23     UINT32 UncorrectableErrorStatusReg;
24     UINT32 UncorrectableErrorMaskReg;
25     UINT32 UncorrectableErrorSeverityReg;
26     UINT32 CorrectableErrorStatusReg;
27     UINT32 CorrectableErrorMaskReg;
28     UINT32 AeccReg;
29     UINT8 HeaderLogReg[16];
30     UINT32 RootErrorCommand;
31     UINT32 RootErrorStatus;
32     UINT16 CorrectableSourceIdReg;
33     UINT16 ErrorSourceIdReg;
34 } EFI_PCIE_ADV_ERROR_EXT_CAPABILITY;
35 
36 json_object* cper_section_pcie_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor);
37 void ir_section_pcie_to_cper(json_object* section, FILE* out);
38 
39 #endif