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