1 #ifndef CPER_SECTION_IA32X64_H 2 #define CPER_SECTION_IA32X64_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #include <stdio.h> 9 #include <json.h> 10 #include <libcper/Cper.h> 11 12 #define IA32X64_PROCESSOR_ERROR_VALID_BITFIELD_NAMES \ 13 (const char *[]){ "checkInfoValid", "targetAddressIDValid", \ 14 "requestorIDValid", "responderIDValid", \ 15 "instructionPointerValid" } 16 #define IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES \ 17 (const char *[]){ "transactionTypeValid", \ 18 "operationValid", \ 19 "levelValid", \ 20 "processorContextCorruptValid", \ 21 "uncorrectedValid", \ 22 "preciseIPValid", \ 23 "restartableIPValid", \ 24 "overflowValid", \ 25 "participationTypeValid", \ 26 "timedOutValid", \ 27 "addressSpaceValid" } 28 #define IA32X64_CHECK_INFO_MS_CHECK_VALID_BITFIELD_NAMES \ 29 (const char *[]){ "errorTypeValid", "processorContextCorruptValid", \ 30 "uncorrectedValid", "preciseIPValid", \ 31 "restartableIPValid", "overflowValid" } 32 #define IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS (int[]){ 0, 1, 2 } 33 #define IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES \ 34 (const char *[]){ "Instruction", "Data Access", "Generic" } 35 #define IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS \ 36 (int[]){ 0, 1, 2, 3, 4, 5, 6, 7, 8 } 37 #define IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES \ 38 (const char *[]){ "Generic Error", "Generic Read", "Generic Write", \ 39 "Data Read", "Data Write", "Instruction Fetch", \ 40 "Prefetch", "Eviction", "Snoop" } 41 #define IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_KEYS (int[]){ 0, 1, 2, 3 } 42 #define IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_VALUES \ 43 (const char *[]){ "Local processor originated request", \ 44 "Local processor responded to request", \ 45 "Local processor observed", "Generic" } 46 #define IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_KEYS (int[]){ 0, 1, 2, 3 } 47 #define IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_VALUES \ 48 (const char *[]){ "Memory Access", "Reserved", "I/O", \ 49 "Other Transaction" } 50 #define IA32X64_MS_CHECK_INFO_ERROR_TYPES_KEYS (int[]){ 0, 1, 2, 3, 4, 5 } 51 #define IA32X64_MS_CHECK_INFO_ERROR_TYPES_VALUES \ 52 (const char *[]){ "No Error", \ 53 "Unclassified", \ 54 "Microcode ROM Parity Error", \ 55 "External Error", \ 56 "FRC Error", \ 57 "Internal Unclassified" } 58 #define IA32X64_REGISTER_CONTEXT_TYPES_KEYS (int[]){ 0, 1, 2, 3, 4, 5, 6, 7 } 59 #define IA32X64_REGISTER_CONTEXT_TYPES_VALUES \ 60 (const char *[]){ "Unclassified Data", \ 61 "MSR Registers", \ 62 "32-bit Mode Execution Context", \ 63 "64-bit Mode Execution Context", \ 64 "FXSave Context", \ 65 "32-bit Mode Debug Registers", \ 66 "64-bit Mode Debug Registers", \ 67 "Memory Mapper Registers" } 68 69 typedef struct { 70 UINT64 Eax; 71 UINT64 Ebx; 72 UINT64 Ecx; 73 UINT64 Edx; 74 UINT64 Reserved[2]; 75 } EFI_IA32_X64_CPU_ID; 76 77 json_object *cper_section_ia32x64_to_ir(void *section); 78 void ir_section_ia32x64_to_cper(json_object *section, FILE *out); 79 80 #ifdef __cplusplus 81 } 82 #endif 83 84 #endif 85