blob: ccd016c13e5e18f2a0a57b0c2077df65da0270a8 [file] [log] [blame]
#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, EFI_ERROR_SECTION_DESCRIPTOR* descriptor);
#endif