xref: /openbmc/libcper/sections/cper-section-ampere.c (revision 50b966f7afa31fe39fda70e10eb9139cce39e025)
1 #include <stdio.h>
2 #include <json.h>
3 #include <libcper/Cper.h>
4 #include <libcper/cper-utils.h>
5 #include <libcper/sections/cper-section-ampere.h>
6 #include <libcper/log.h>
7 
8 //Converts the given processor-generic CPER section into JSON IR.
cper_section_ampere_to_ir(const UINT8 * section,UINT32 size)9 json_object *cper_section_ampere_to_ir(const UINT8 *section, UINT32 size)
10 {
11 	if (size < sizeof(EFI_AMPERE_ERROR_DATA)) {
12 		return NULL;
13 	}
14 
15 	EFI_AMPERE_ERROR_DATA *record = (EFI_AMPERE_ERROR_DATA *)section;
16 	json_object *section_ir = json_object_new_object();
17 
18 	json_object_object_add(section_ir, "typeId",
19 			       json_object_new_int(record->TypeId));
20 	json_object_object_add(section_ir, "subTypeId",
21 			       json_object_new_int(record->SubtypeId));
22 	json_object_object_add(section_ir, "instanceId",
23 			       json_object_new_int(record->InstanceId));
24 
25 	return section_ir;
26 }
27 
28 //Converts a single CPER-JSON ARM error section into CPER binary, outputting to the given stream.
ir_section_ampere_to_cper(json_object * section,FILE * out)29 void ir_section_ampere_to_cper(json_object *section, FILE *out)
30 {
31 	EFI_AMPERE_ERROR_DATA *section_cper = (EFI_AMPERE_ERROR_DATA *)calloc(
32 		1, sizeof(EFI_AMPERE_ERROR_DATA));
33 
34 	//Count of error/context info structures.
35 	section_cper->TypeId =
36 		json_object_get_int(json_object_object_get(section, "typeId"));
37 	section_cper->SubtypeId = json_object_get_int(
38 		json_object_object_get(section, "subTypeId"));
39 	section_cper->InstanceId = json_object_get_int(
40 		json_object_object_get(section, "instanceId"));
41 
42 	//Flush header to stream.
43 	fwrite(section_cper, sizeof(EFI_AMPERE_ERROR_DATA), 1, out);
44 	fflush(out);
45 	free(section_cper);
46 }
47