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 "../edk/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