| #ifndef CPER_SECTION_IPF_H |
| #define CPER_SECTION_IPF_H |
| |
| #include <json.h> |
| #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 |