blob: cf346efc984d7e9962abd44f07578089e8f544bc [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);
#endif