11b0b00e3SLawrence Tang #ifndef CPER_SECTION_GENERIC_H
21b0b00e3SLawrence Tang #define CPER_SECTION_GENERIC_H
31b0b00e3SLawrence Tang 
4794312c8SLawrence Tang #include "json.h"
5794312c8SLawrence Tang #include "../edk/Cper.h"
6794312c8SLawrence Tang 
73c43f743SLawrence Tang #define GENERIC_PROC_TYPES_KEYS (int []){0, 1, 2}
83c43f743SLawrence Tang #define GENERIC_PROC_TYPES_VALUES (const char*[]){"IA32/X64", "IA64", "ARM"}
93c43f743SLawrence Tang #define GENERIC_ISA_TYPES_KEYS (int []){0, 1, 2, 3, 4}
103c43f743SLawrence Tang #define GENERIC_ISA_TYPES_VALUES (const char*[]){"IA32", "IA64", "X64", "ARM A32/T32", "ARM A64"}
113c43f743SLawrence Tang #define GENERIC_ERROR_TYPES_KEYS (int []){0, 1, 2, 4, 8}
123c43f743SLawrence Tang #define GENERIC_ERROR_TYPES_VALUES (const char*[]){"Unknown", "Cache Error", "TLB Error", "Bus Error", "Micro-Architectural Error"}
133c43f743SLawrence Tang #define GENERIC_OPERATION_TYPES_KEYS (int []){0, 1, 2, 3}
143c43f743SLawrence Tang #define GENERIC_OPERATION_TYPES_VALUES (const char*[]){"Unknown or generic", "Data Read", "Data Write", "Instruction Execution"}
15794312c8SLawrence Tang #define GENERIC_VALIDATION_BITFIELD_NAMES (const char*[]) \
16794312c8SLawrence Tang     {"processorTypeValid", "processorISAValid", "processorErrorTypeValid", "operationValid", "flagsValid" \
17079d581eSLawrence Tang     "levelValid", "cpuVersionValid", "cpuBrandInfoValid", "cpuIDValid", "targetAddressValid", "requestorIDValid" \
18794312c8SLawrence Tang     "responderIDValid", "instructionIPValid"}
19794312c8SLawrence Tang #define GENERIC_FLAGS_BITFIELD_NAMES (const char*[]) \
20794312c8SLawrence Tang     {"restartable", "preciseIP", "overflow", "corrected"}
213c43f743SLawrence Tang 
221b0b00e3SLawrence Tang json_object* cper_section_generic_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor);
23*0cb33793SLawrence Tang void ir_section_generic_to_cper(json_object* section, FILE* out);
241b0b00e3SLawrence Tang 
251b0b00e3SLawrence Tang #endif