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