1 #ifndef CPER_SECTION_CXL_PROTOCOL_H 2 #define CPER_SECTION_CXL_PROTOCOL_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #include <stdio.h> 9 #include <json.h> 10 #include <libcper/Cper.h> 11 12 #define CXL_PROTOCOL_ERROR_VALID_BITFIELD_NAMES \ 13 (const char *[]){ "cxlAgentTypeValid", \ 14 "cxlAgentAddressValid", \ 15 "deviceIDValid", \ 16 "deviceSerialValid", \ 17 "capabilityStructureValid", \ 18 "cxlDVSECValid", \ 19 "cxlErrorLogValid" } 20 #define CXL_PROTOCOL_ERROR_AGENT_TYPES_KEYS (int[]){ 0, 1 } 21 #define CXL_PROTOCOL_ERROR_AGENT_TYPES_VALUES \ 22 (const char *[]){ "CXL 1.1 Device", "CXL 1.1 Host Downstream Port" } 23 #define CXL_PROTOCOL_ERROR_DEVICE_AGENT 0 24 #define CXL_PROTOCOL_ERROR_HOST_DOWNSTREAM_PORT_AGENT 1 25 26 /// 27 /// CXL Protocol Error Section 28 /// 29 typedef struct { 30 UINT64 VendorId : 16; 31 UINT64 DeviceId : 16; 32 UINT64 SubsystemVendorId : 16; 33 UINT64 SubsystemDeviceId : 16; 34 UINT64 ClassCode : 16; 35 UINT64 Reserved1 : 3; 36 UINT64 SlotNumber : 13; 37 UINT64 Reserved2 : 32; 38 } EFI_CXL_DEVICE_ID; 39 40 typedef struct { 41 UINT64 FunctionNumber : 8; 42 UINT64 DeviceNumber : 8; 43 UINT64 BusNumber : 8; 44 UINT64 SegmentNumber : 16; 45 UINT64 Reserved : 24; 46 } EFI_CXL_DEVICE_AGENT_ADDRESS; 47 48 typedef union { 49 EFI_CXL_DEVICE_AGENT_ADDRESS 50 DeviceAddress; //Active when the agent is a CXL1.1 device in CxlAgentType. 51 UINT64 PortRcrbBaseAddress; //Active when the agent is a CXL1.1 host downstream port in CxlAgentType. 52 } EFI_CXL_AGENT_ADDRESS; 53 54 typedef struct { 55 UINT64 ValidBits; 56 UINT64 CxlAgentType; 57 EFI_CXL_AGENT_ADDRESS CxlAgentAddress; 58 EFI_CXL_DEVICE_ID DeviceId; 59 UINT64 DeviceSerial; 60 EFI_PCIE_ERROR_DATA_CAPABILITY CapabilityStructure; 61 UINT16 CxlDvsecLength; 62 UINT16 CxlErrorLogLength; 63 UINT32 Reserved; 64 } __attribute__((packed, aligned(1))) EFI_CXL_PROTOCOL_ERROR_DATA; 65 66 json_object *cper_section_cxl_protocol_to_ir(void *section); 67 void ir_section_cxl_protocol_to_cper(json_object *section, FILE *out); 68 69 #ifdef __cplusplus 70 } 71 #endif 72 73 #endif 74