1*7f21db6cSLawrence Tang /**
2*7f21db6cSLawrence Tang  * Describes functions for converting memory error CPER sections from binary and JSON format
3*7f21db6cSLawrence Tang  * into an intermediate format.
4*7f21db6cSLawrence Tang  *
5*7f21db6cSLawrence Tang  * Author: Lawrence.Tang@arm.com
6*7f21db6cSLawrence Tang  **/
7*7f21db6cSLawrence Tang #include <stdio.h>
8*7f21db6cSLawrence Tang #include "json.h"
9*7f21db6cSLawrence Tang #include "../edk/Cper.h"
10*7f21db6cSLawrence Tang #include "../cper-utils.h"
11*7f21db6cSLawrence Tang #include "cper-section-memory.h"
12*7f21db6cSLawrence Tang 
13*7f21db6cSLawrence Tang //Converts a single memory error CPER section into JSON IR.
14*7f21db6cSLawrence Tang json_object* cper_section_memory_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor)
15*7f21db6cSLawrence Tang {
16*7f21db6cSLawrence Tang     EFI_PLATFORM_MEMORY_ERROR_DATA* memory_error = (EFI_PLATFORM_MEMORY_ERROR_DATA*)section;
17*7f21db6cSLawrence Tang     json_object* section_ir = json_object_new_object();
18*7f21db6cSLawrence Tang 
19*7f21db6cSLawrence Tang     //Validation bitfield.
20*7f21db6cSLawrence Tang     json_object* validation = bitfield_to_ir(memory_error->ValidFields, 22, MEMORY_ERROR_VALID_BITFIELD_NAMES);
21*7f21db6cSLawrence Tang     json_object_object_add(section_ir, "validationBits", validation);
22*7f21db6cSLawrence Tang 
23*7f21db6cSLawrence Tang     //Error status.
24*7f21db6cSLawrence Tang     json_object* error_status = json_object_new_object();
25*7f21db6cSLawrence Tang     json_object_object_add(error_status, "errorType", integer_to_readable_pair_with_desc(memory_error->ErrorStatus.Type, 18,
26*7f21db6cSLawrence Tang         MEMORY_ERROR_ERROR_TYPES_KEYS,
27*7f21db6cSLawrence Tang         MEMORY_ERROR_ERROR_TYPES_VALUES,
28*7f21db6cSLawrence Tang         MEMORY_ERROR_ERROR_TYPES_DESCRIPTIONS,
29*7f21db6cSLawrence Tang         "Unknown (Reserved)"));
30*7f21db6cSLawrence Tang }