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