Add CXL component GUIDs, b64 dumps for unknown.
diff --git a/cper-parse.c b/cper-parse.c
index f80feb7..2bfb3cf 100644
--- a/cper-parse.c
+++ b/cper-parse.c
@@ -7,6 +7,7 @@
#include <stdio.h>
#include "json.h"
+#include "b64.h"
#include "edk/Cper.h"
#include "cper-parse.h"
#include "cper-utils.h"
@@ -24,6 +25,7 @@
#include "sections/cper-section-ccix-per.h"
#include "sections/cper-section-cxl-protocol.h"
#include "sections/cper-section-ipf.h"
+#include "sections/cper-section-cxl-component.h"
//Private pre-definitions.
json_object* cper_header_to_ir(EFI_COMMON_ERROR_RECORD_HEADER* header);
@@ -268,6 +270,16 @@
section_type_readable = "CCIX PER Log Error";
else if (guid_equal(§ion_descriptor->SectionType, &gEfiCxlProtocolErrorSectionGuid))
section_type_readable = "CXL Protocol Error";
+ else if (guid_equal(§ion_descriptor->SectionType, &gEfiCxlGeneralMediaErrorSectionGuid))
+ section_type_readable = "CXL General Media Component Error";
+ else if (guid_equal(§ion_descriptor->SectionType, &gEfiCxlDramEventErrorSectionGuid))
+ section_type_readable = "CXL DRAM Component Error";
+ else if (guid_equal(§ion_descriptor->SectionType, &gEfiCxlPhysicalSwitchErrorSectionGuid))
+ section_type_readable = "CXL Physical Switch Component Error";
+ else if (guid_equal(§ion_descriptor->SectionType, &gEfiCxlVirtualSwitchErrorSectionGuid))
+ section_type_readable = "CXL Virtual Switch Component Error";
+ else if (guid_equal(§ion_descriptor->SectionType, &gEfiCxlMldPortErrorSectionGuid))
+ section_type_readable = "CXL MLD Port Component Error";
//todo: How do you determine if this is a CXL component event?
//perhaps refer to CXL Specification, Rev 2.0
@@ -346,10 +358,22 @@
result = cper_section_ccix_per_to_ir(section, descriptor);
else if (guid_equal(&descriptor->SectionType, &gEfiCxlProtocolErrorSectionGuid))
result = cper_section_cxl_protocol_to_ir(section, descriptor);
+ else if (guid_equal(&descriptor->SectionType, &gEfiCxlGeneralMediaErrorSectionGuid)
+ || guid_equal(&descriptor->SectionType, &gEfiCxlDramEventErrorSectionGuid)
+ || guid_equal(&descriptor->SectionType, &gEfiCxlPhysicalSwitchErrorSectionGuid)
+ || guid_equal(&descriptor->SectionType, &gEfiCxlVirtualSwitchErrorSectionGuid)
+ || guid_equal(&descriptor->SectionType, &gEfiCxlMldPortErrorSectionGuid))
+ {
+ result = cper_section_cxl_component_to_ir(section, descriptor);
+ }
else
{
//Failed read, unknown GUID.
- //todo: dump the binary data out to b64.
+ //Output the data as formatted base64.
+ result = json_object_new_object();
+ char* encoded = b64_encode((unsigned char*)section, descriptor->SectionLength);
+ json_object_object_add(result, "data", json_object_new_string(encoded));
+ free(encoded);
}
//Free section memory, return result.