1*864c0da9SLawrence Tang /**
2*864c0da9SLawrence Tang  * Describes functions for converting CCIX PER log CPER sections from binary and JSON format
3*864c0da9SLawrence Tang  * into an intermediate format.
4*864c0da9SLawrence Tang  *
5*864c0da9SLawrence Tang  * Author: Lawrence.Tang@arm.com
6*864c0da9SLawrence Tang  **/
7*864c0da9SLawrence Tang #include <stdio.h>
8*864c0da9SLawrence Tang #include "json.h"
9*864c0da9SLawrence Tang #include "../edk/Cper.h"
10*864c0da9SLawrence Tang #include "../cper-utils.h"
11*864c0da9SLawrence Tang #include "cper-section-ccix-per.h"
12*864c0da9SLawrence Tang 
13*864c0da9SLawrence Tang //Converts a single CCIX PER log CPER section into JSON IR.
14*864c0da9SLawrence Tang json_object* cper_section_ccix_per_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor)
15*864c0da9SLawrence Tang {
16*864c0da9SLawrence Tang     EFI_CCIX_PER_LOG_DATA* ccix_error = (EFI_CCIX_PER_LOG_DATA*)section;
17*864c0da9SLawrence Tang     json_object* section_ir = json_object_new_object();
18*864c0da9SLawrence Tang 
19*864c0da9SLawrence Tang     //Length (bytes) for the entire structure.
20*864c0da9SLawrence Tang     json_object_object_add(section_ir, "length", json_object_new_uint64(ccix_error->Length));
21*864c0da9SLawrence Tang 
22*864c0da9SLawrence Tang     //Validation bits.
23*864c0da9SLawrence Tang     json_object* validation = bitfield_to_ir(ccix_error->ValidBits, 3, CCIX_PER_ERROR_VALID_BITFIELD_NAMES);
24*864c0da9SLawrence Tang     json_object_object_add(section_ir, "validationBits", validation);
25*864c0da9SLawrence Tang 
26*864c0da9SLawrence Tang     //CCIX source/port IDs.
27*864c0da9SLawrence Tang     json_object_object_add(section_ir, "ccixSourceID", json_object_new_int(ccix_error->CcixSourceId));
28*864c0da9SLawrence Tang     json_object_object_add(section_ir, "ccixPortID", json_object_new_int(ccix_error->CcixPortId));
29*864c0da9SLawrence Tang 
30*864c0da9SLawrence Tang     //CCIX PER Log.
31*864c0da9SLawrence Tang     //todo: implement as described in Section 7.3.2 of CCIX Base Specification (Rev 1.0)
32*864c0da9SLawrence Tang     //the PER Log structure notes the number of DWORDs in the record.
33*864c0da9SLawrence Tang 
34*864c0da9SLawrence Tang     return section_ir;
35*864c0da9SLawrence Tang }