blob: e4854a3bd6cf2be76f642abb19b69dc07f9f22b5 [file] [log] [blame]
Lawrence Tangb98ec662022-07-06 16:50:21 +01001#ifndef CPER_SECTION_CXL_PROTOCOL_H
2#define CPER_SECTION_CXL_PROTOCOL_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 Tangb98ec662022-07-06 16:50:21 +01009#include "../edk/Cper.h"
10
John Chungf8fc7052024-05-03 20:05:29 +080011#define CXL_PROTOCOL_ERROR_VALID_BITFIELD_NAMES \
12 (const char *[]) \
13 { \
14 "cxlAgentTypeValid", "cxlAgentAddressValid", "deviceIDValid", \
15 "deviceSerialValid", "capabilityStructureValid", \
16 "cxlDVSECValid", "cxlErrorLogValid" \
17 }
18#define CXL_PROTOCOL_ERROR_AGENT_TYPES_KEYS \
19 (int[]) \
20 { \
21 0, 1 \
22 }
23#define CXL_PROTOCOL_ERROR_AGENT_TYPES_VALUES \
24 (const char *[]) \
25 { \
26 "CXL 1.1 Device", "CXL 1.1 Host Downstream Port" \
27 }
28#define CXL_PROTOCOL_ERROR_DEVICE_AGENT 0
Lawrence Tangb98ec662022-07-06 16:50:21 +010029#define CXL_PROTOCOL_ERROR_HOST_DOWNSTREAM_PORT_AGENT 1
30
31///
32/// CXL Protocol Error Section
33///
34typedef struct {
John Chungf8fc7052024-05-03 20:05:29 +080035 UINT64 VendorId : 16;
36 UINT64 DeviceId : 16;
37 UINT64 SubsystemVendorId : 16;
38 UINT64 SubsystemDeviceId : 16;
39 UINT64 ClassCode : 16;
40 UINT64 Reserved1 : 3;
41 UINT64 SlotNumber : 13;
42 UINT64 Reserved2 : 32;
Lawrence Tangb98ec662022-07-06 16:50:21 +010043} EFI_CXL_DEVICE_ID;
44
45typedef struct {
John Chungf8fc7052024-05-03 20:05:29 +080046 UINT64 FunctionNumber : 8;
47 UINT64 DeviceNumber : 8;
48 UINT64 BusNumber : 8;
49 UINT64 SegmentNumber : 16;
50 UINT64 Reserved : 24;
Lawrence Tangb98ec662022-07-06 16:50:21 +010051} EFI_CXL_DEVICE_AGENT_ADDRESS;
52
53typedef union {
John Chungf8fc7052024-05-03 20:05:29 +080054 EFI_CXL_DEVICE_AGENT_ADDRESS
55 DeviceAddress; //Active when the agent is a CXL1.1 device in CxlAgentType.
56 UINT64 PortRcrbBaseAddress; //Active when the agent is a CXL1.1 host downstream port in CxlAgentType.
Lawrence Tangb98ec662022-07-06 16:50:21 +010057} EFI_CXL_AGENT_ADDRESS;
58
59typedef struct {
John Chungf8fc7052024-05-03 20:05:29 +080060 UINT64 ValidBits;
61 UINT64 CxlAgentType;
62 EFI_CXL_AGENT_ADDRESS CxlAgentAddress;
63 EFI_CXL_DEVICE_ID DeviceId;
64 UINT64 DeviceSerial;
65 EFI_PCIE_ERROR_DATA_CAPABILITY CapabilityStructure;
66 UINT16 CxlDvsecLength;
67 UINT16 CxlErrorLogLength;
68 UINT32 Reserved;
Lawrence Tang0a4b3f22022-07-21 10:40:10 +010069} __attribute__((packed, aligned(1))) EFI_CXL_PROTOCOL_ERROR_DATA;
Lawrence Tangb98ec662022-07-06 16:50:21 +010070
John Chungf8fc7052024-05-03 20:05:29 +080071json_object *cper_section_cxl_protocol_to_ir(void *section);
72void ir_section_cxl_protocol_to_cper(json_object *section, FILE *out);
Lawrence Tangb98ec662022-07-06 16:50:21 +010073
Karthik Rajagopalan255bd812024-09-06 14:36:34 -070074#ifdef __cplusplus
75}
76#endif
77
John Chungf8fc7052024-05-03 20:05:29 +080078#endif