blob: 5755fa16bc04136288ed6432ee748402da32fd02 [file] [log] [blame]
Dung Cao04f57712024-08-29 08:03:59 +00001#include <stdio.h>
2#include <json.h>
Thu Nguyene42fb482024-10-15 14:43:11 +00003#include <libcper/Cper.h>
4#include <libcper/cper-utils.h>
5#include <libcper/sections/cper-section-ampere.h>
Ed Tanous50b966f2025-03-11 09:06:19 -07006#include <libcper/log.h>
Dung Cao04f57712024-08-29 08:03:59 +00007
8//Converts the given processor-generic CPER section into JSON IR.
Ed Tanous12dbd4f2025-03-08 19:05:01 -08009json_object *cper_section_ampere_to_ir(const UINT8 *section, UINT32 size)
Dung Cao04f57712024-08-29 08:03:59 +000010{
Ed Tanous12dbd4f2025-03-08 19:05:01 -080011 if (size < sizeof(EFI_AMPERE_ERROR_DATA)) {
12 return NULL;
13 }
14
Dung Cao04f57712024-08-29 08:03:59 +000015 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.
29void 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}