#ifndef CPER_SECTION_IPF_H #define CPER_SECTION_IPF_H #include #include "../edk/Cper.h" #define IPF_MOD_ERROR_VALID_BITFIELD_NAMES \ (const char *[]) \ { \ "checkInfoValid", "requestorIdentifierValid", \ "responderIdentifierValid", "targetIdentifierValid", \ "preciseIPValid" \ } #define IPF_PSI_STATIC_INFO_VALID_BITFIELD_NAMES \ (const char *[]) \ { \ "minstateValid", "brValid", "crValid", "arValid", "rrValid", \ "frValid" \ } /// /// IPF Error Record Section /// Defined as according to B.2.3 of the ItaniumTM Processor Family System Abstraction Layer (SAL) Specification. /// typedef struct { UINT64 ProcErrorMapValid : 1; UINT64 ProcStateParameterValid : 1; UINT64 ProcCrLidValid : 1; UINT64 PsiStaticStructValid : 1; UINT64 CacheCheckNum : 4; UINT64 TlbCheckNum : 4; UINT64 BusCheckNum : 4; UINT64 RegFileCheckNum : 4; UINT64 MsCheckNum : 4; UINT64 CpuIdInfoValid : 1; UINT64 Reserved : 39; } EPI_IPF_ERROR_VALID_BITS; typedef struct { EPI_IPF_ERROR_VALID_BITS ValidBits; UINT64 ProcErrorMap; UINT64 ProcStateParameter; UINT64 ProcCrLid; } EFI_IPF_ERROR_INFO_HEADER; typedef struct { UINT64 ValidBits; UINT64 ModCheckInfo; UINT64 ModTargetId; UINT64 ModRequestorId; //NOTE: The Intel Itanium specification contains a typo which makes the order UINT64 ModResponderId; // of these two fields undefined. This is a best guess and could be wrong. UINT64 ModPreciseIp; } EFI_IPF_MOD_ERROR_INFO; typedef struct { UINT8 CpuIdInfo[40]; UINT8 Reserved1[8]; } EFI_IPF_CPU_INFO; typedef struct { UINT64 ValidBits; UINT8 MinimalSaveStateInfo[1024]; UINT64 Brs[8]; UINT64 Crs[128]; UINT64 Ars[128]; UINT64 Rrs[8]; UINT64 Frs[256]; } EFI_IPF_PSI_STATIC; json_object *cper_section_ipf_to_ir(void *section); #endif