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