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