1d7e8ca34SLawrence Tang #ifndef CPER_SECTION_CXL_COMPONENT_H
2d7e8ca34SLawrence Tang #define CPER_SECTION_CXL_COMPONENT_H
3d7e8ca34SLawrence Tang 
45202bbb4SLawrence Tang #include <json.h>
5d7e8ca34SLawrence Tang #include "../edk/Cper.h"
6d7e8ca34SLawrence Tang 
7*f8fc7052SJohn Chung #define CXL_COMPONENT_ERROR_VALID_BITFIELD_NAMES                               \
8*f8fc7052SJohn Chung 	(const char *[])                                                       \
9*f8fc7052SJohn Chung 	{                                                                      \
10*f8fc7052SJohn Chung 		"deviceIDValid", "deviceSerialValid",                          \
11*f8fc7052SJohn Chung 			"cxlComponentEventLogValid"                            \
12*f8fc7052SJohn Chung 	}
132721739aSLawrence Tang 
14d7e8ca34SLawrence Tang ///
15d7e8ca34SLawrence Tang /// CXL Generic Component Error Section
16d7e8ca34SLawrence Tang ///
17d7e8ca34SLawrence Tang typedef struct {
18d7e8ca34SLawrence Tang 	UINT64 VendorId : 16;
19d7e8ca34SLawrence Tang 	UINT64 DeviceId : 16;
20d7e8ca34SLawrence Tang 	UINT64 FunctionNumber : 8;
21d7e8ca34SLawrence Tang 	UINT64 DeviceNumber : 8;
22d7e8ca34SLawrence Tang 	UINT64 BusNumber : 8;
23d7e8ca34SLawrence Tang 	UINT64 SegmentNumber : 16;
24d7e8ca34SLawrence Tang 	UINT64 Resv1 : 3;
25d7e8ca34SLawrence Tang 	UINT64 SlotNumber : 13;
26d7e8ca34SLawrence Tang 	UINT64 Resv2 : 8;
270a4b3f2dSLawrence Tang } __attribute__((packed, aligned(1))) EFI_CXL_DEVICE_ID_INFO;
28d7e8ca34SLawrence Tang 
29d7e8ca34SLawrence Tang typedef struct {
30d7e8ca34SLawrence Tang 	UINT32 Length;
31d7e8ca34SLawrence Tang 	UINT64 ValidBits;
32d7e8ca34SLawrence Tang 	EFI_CXL_DEVICE_ID_INFO DeviceId;
33d7e8ca34SLawrence Tang 	UINT64 DeviceSerial;
340a4b3f2dSLawrence Tang } __attribute__((packed, aligned(1))) EFI_CXL_COMPONENT_EVENT_HEADER;
35d7e8ca34SLawrence Tang 
36*f8fc7052SJohn Chung json_object *cper_section_cxl_component_to_ir(void *section);
37aec83900SLawrence Tang void ir_section_cxl_component_to_cper(json_object *section, FILE *out);
38d7e8ca34SLawrence Tang 
39d7e8ca34SLawrence Tang #endif
40