blob: 9d161c983ccf4386928c572fdffaff02ec94ca67 [file] [log] [blame]
Lawrence Tanga416ec92022-07-06 14:34:40 +01001#ifndef CPER_SECTION_PCI_DEV_H
2#define CPER_SECTION_PCI_DEV_H
3
Karthik Rajagopalan255bd812024-09-06 14:36:34 -07004#ifdef __cplusplus
5extern "C" {
6#endif
7
Lawrence Tang5202bbb2022-08-12 14:54:36 +01008#include <json.h>
Lawrence Tanga416ec92022-07-06 14:34:40 +01009#include "../edk/Cper.h"
10
John Chungf8fc7052024-05-03 20:05:29 +080011#define PCI_DEV_ERROR_VALID_BITFIELD_NAMES \
12 (const char *[]) \
13 { \
14 "errorStatusValid", "idInfoValid", "memoryNumberValid", \
15 "ioNumberValid", "registerDataPairsValid" \
16 }
Lawrence Tanga416ec92022-07-06 14:34:40 +010017
18///
19/// PCI/PCI-X Device Error Section
20///
21typedef struct {
John Chungf8fc7052024-05-03 20:05:29 +080022 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;
Lawrence Tanga416ec92022-07-06 14:34:40 +010030} EFI_PCI_PCIX_DEVICE_ID_INFO;
31
32typedef struct {
John Chungf8fc7052024-05-03 20:05:29 +080033 UINT64 ValidFields;
34 EFI_GENERIC_ERROR_STATUS ErrorStatus;
35 EFI_PCI_PCIX_DEVICE_ID_INFO IdInfo;
36 UINT32 MemoryNumber;
37 UINT32 IoNumber;
Lawrence Tangefe17e22022-08-08 09:16:23 +010038} __attribute__((packed, aligned(1))) EFI_PCI_PCIX_DEVICE_ERROR_DATA;
Lawrence Tanga416ec92022-07-06 14:34:40 +010039
John Chungf8fc7052024-05-03 20:05:29 +080040json_object *cper_section_pci_dev_to_ir(void *section);
41void ir_section_pci_dev_to_cper(json_object *section, FILE *out);
Lawrence Tanga416ec92022-07-06 14:34:40 +010042
Karthik Rajagopalan255bd812024-09-06 14:36:34 -070043#ifdef __cplusplus
44}
45#endif
46
John Chungf8fc7052024-05-03 20:05:29 +080047#endif