1 #ifndef CPER_SECTION_IPF_H 2 #define CPER_SECTION_IPF_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #include <json.h> 9 #include <libcper/Cper.h> 10 11 #define IPF_MOD_ERROR_VALID_BITFIELD_NAMES \ 12 (const char *[]){ "checkInfoValid", "requestorIdentifierValid", \ 13 "responderIdentifierValid", "targetIdentifierValid", \ 14 "preciseIPValid" } 15 #define IPF_PSI_STATIC_INFO_VALID_BITFIELD_NAMES \ 16 (const char *[]){ "minstateValid", "brValid", "crValid", \ 17 "arValid", "rrValid", "frValid" } 18 19 /// 20 /// IPF Error Record Section 21 /// Defined as according to B.2.3 of the ItaniumTM Processor Family System Abstraction Layer (SAL) Specification. 22 /// 23 typedef struct { 24 UINT64 ProcErrorMapValid : 1; 25 UINT64 ProcStateParameterValid : 1; 26 UINT64 ProcCrLidValid : 1; 27 UINT64 PsiStaticStructValid : 1; 28 UINT64 CacheCheckNum : 4; 29 UINT64 TlbCheckNum : 4; 30 UINT64 BusCheckNum : 4; 31 UINT64 RegFileCheckNum : 4; 32 UINT64 MsCheckNum : 4; 33 UINT64 CpuIdInfoValid : 1; 34 UINT64 Reserved : 39; 35 } EPI_IPF_ERROR_VALID_BITS; 36 37 typedef struct { 38 EPI_IPF_ERROR_VALID_BITS ValidBits; 39 UINT64 ProcErrorMap; 40 UINT64 ProcStateParameter; 41 UINT64 ProcCrLid; 42 } EFI_IPF_ERROR_INFO_HEADER; 43 44 typedef struct { 45 UINT64 ValidBits; 46 UINT64 ModCheckInfo; 47 UINT64 ModTargetId; 48 UINT64 ModRequestorId; //NOTE: The Intel Itanium specification contains a typo which makes the order 49 UINT64 ModResponderId; // of these two fields undefined. This is a best guess and could be wrong. 50 UINT64 ModPreciseIp; 51 } EFI_IPF_MOD_ERROR_INFO; 52 53 typedef struct { 54 UINT8 CpuIdInfo[40]; 55 UINT8 Reserved1[8]; 56 } EFI_IPF_CPU_INFO; 57 58 typedef struct { 59 UINT64 ValidBits; 60 UINT8 MinimalSaveStateInfo[1024]; 61 UINT64 Brs[8]; 62 UINT64 Crs[128]; 63 UINT64 Ars[128]; 64 UINT64 Rrs[8]; 65 UINT64 Frs[256]; 66 } EFI_IPF_PSI_STATIC; 67 68 json_object *cper_section_ipf_to_ir(void *section); 69 70 #ifdef __cplusplus 71 } 72 #endif 73 74 #endif 75