blob: 9339f576e642b0d6da9ae9a682d965d8959e41b6 [file] [log] [blame]
#ifndef CPER_SECTION_CXL_PROTOCOL_H
#define CPER_SECTION_CXL_PROTOCOL_H
#include <json.h>
#include "../edk/Cper.h"
#define CXL_PROTOCOL_ERROR_VALID_BITFIELD_NAMES \
(const char *[]) \
{ \
"cxlAgentTypeValid", "cxlAgentAddressValid", "deviceIDValid", \
"deviceSerialValid", "capabilityStructureValid", \
"cxlDVSECValid", "cxlErrorLogValid" \
}
#define CXL_PROTOCOL_ERROR_AGENT_TYPES_KEYS \
(int[]) \
{ \
0, 1 \
}
#define CXL_PROTOCOL_ERROR_AGENT_TYPES_VALUES \
(const char *[]) \
{ \
"CXL 1.1 Device", "CXL 1.1 Host Downstream Port" \
}
#define CXL_PROTOCOL_ERROR_DEVICE_AGENT 0
#define CXL_PROTOCOL_ERROR_HOST_DOWNSTREAM_PORT_AGENT 1
///
/// CXL Protocol Error Section
///
typedef struct {
UINT64 VendorId : 16;
UINT64 DeviceId : 16;
UINT64 SubsystemVendorId : 16;
UINT64 SubsystemDeviceId : 16;
UINT64 ClassCode : 16;
UINT64 Reserved1 : 3;
UINT64 SlotNumber : 13;
UINT64 Reserved2 : 32;
} EFI_CXL_DEVICE_ID;
typedef struct {
UINT64 FunctionNumber : 8;
UINT64 DeviceNumber : 8;
UINT64 BusNumber : 8;
UINT64 SegmentNumber : 16;
UINT64 Reserved : 24;
} EFI_CXL_DEVICE_AGENT_ADDRESS;
typedef union {
EFI_CXL_DEVICE_AGENT_ADDRESS
DeviceAddress; //Active when the agent is a CXL1.1 device in CxlAgentType.
UINT64 PortRcrbBaseAddress; //Active when the agent is a CXL1.1 host downstream port in CxlAgentType.
} EFI_CXL_AGENT_ADDRESS;
typedef struct {
UINT64 ValidBits;
UINT64 CxlAgentType;
EFI_CXL_AGENT_ADDRESS CxlAgentAddress;
EFI_CXL_DEVICE_ID DeviceId;
UINT64 DeviceSerial;
EFI_PCIE_ERROR_DATA_CAPABILITY CapabilityStructure;
UINT16 CxlDvsecLength;
UINT16 CxlErrorLogLength;
UINT32 Reserved;
} __attribute__((packed, aligned(1))) EFI_CXL_PROTOCOL_ERROR_DATA;
json_object *cper_section_cxl_protocol_to_ir(void *section);
void ir_section_cxl_protocol_to_cper(json_object *section, FILE *out);
#endif