1a416ec93SLawrence Tang #ifndef CPER_SECTION_PCI_DEV_H 2a416ec93SLawrence Tang #define CPER_SECTION_PCI_DEV_H 3a416ec93SLawrence Tang 45202bbb4SLawrence Tang #include <json.h> 5a416ec93SLawrence Tang #include "../edk/Cper.h" 6a416ec93SLawrence Tang 7*f8fc7052SJohn Chung #define PCI_DEV_ERROR_VALID_BITFIELD_NAMES \ 8*f8fc7052SJohn Chung (const char *[]) \ 9*f8fc7052SJohn Chung { \ 10*f8fc7052SJohn Chung "errorStatusValid", "idInfoValid", "memoryNumberValid", \ 11*f8fc7052SJohn Chung "ioNumberValid", "registerDataPairsValid" \ 12*f8fc7052SJohn Chung } 13a416ec93SLawrence Tang 14a416ec93SLawrence Tang /// 15a416ec93SLawrence Tang /// PCI/PCI-X Device Error Section 16a416ec93SLawrence Tang /// 17a416ec93SLawrence Tang typedef struct { 18d7e8ca34SLawrence Tang UINT64 VendorId : 16; 19d7e8ca34SLawrence Tang UINT64 DeviceId : 16; 20d7e8ca34SLawrence Tang UINT64 ClassCode : 24; 21d7e8ca34SLawrence Tang UINT64 FunctionNumber : 8; 22d7e8ca34SLawrence Tang UINT64 DeviceNumber : 8; 23d7e8ca34SLawrence Tang UINT64 BusNumber : 8; 24d7e8ca34SLawrence Tang UINT64 SegmentNumber : 8; 25d7e8ca34SLawrence Tang UINT64 Reserved : 40; 26a416ec93SLawrence Tang } EFI_PCI_PCIX_DEVICE_ID_INFO; 27a416ec93SLawrence Tang 28a416ec93SLawrence Tang typedef struct { 29a416ec93SLawrence Tang UINT64 ValidFields; 30a416ec93SLawrence Tang EFI_GENERIC_ERROR_STATUS ErrorStatus; 31a416ec93SLawrence Tang EFI_PCI_PCIX_DEVICE_ID_INFO IdInfo; 32a416ec93SLawrence Tang UINT32 MemoryNumber; 33a416ec93SLawrence Tang UINT32 IoNumber; 34efe17e2cSLawrence Tang } __attribute__((packed, aligned(1))) EFI_PCI_PCIX_DEVICE_ERROR_DATA; 35a416ec93SLawrence Tang 36*f8fc7052SJohn Chung json_object *cper_section_pci_dev_to_ir(void *section); 37205dd1d7SLawrence Tang void ir_section_pci_dev_to_cper(json_object *section, FILE *out); 38a416ec93SLawrence Tang 39a416ec93SLawrence Tang #endif 40