1cc0f5f38SLawrence Tang #ifndef CPER_SECTION_IPF_H 2cc0f5f38SLawrence Tang #define CPER_SECTION_IPF_H 3cc0f5f38SLawrence Tang 4cc0f5f38SLawrence Tang #include "json.h" 5cc0f5f38SLawrence Tang #include "../edk/Cper.h" 6cc0f5f38SLawrence Tang 7*e18aaee9SLawrence Tang #define IPF_MOD_ERROR_VALID_BITFIELD_NAMES (const char*[]) {"checkInfoValid", "requestorIdentifierValid", \ 8*e18aaee9SLawrence Tang "responderIdentifierValid", "targetIdentifierValid", "preciseIPValid"} 9*e18aaee9SLawrence Tang #define IPF_PSI_STATIC_INFO_VALID_BITFIELD_NAMES (const char*[]) {"minstateValid", "brValid", "crValid", \ 10*e18aaee9SLawrence Tang "arValid", "rrValid", "frValid"} 11*e18aaee9SLawrence 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; 41*e18aaee9SLawrence Tang UINT64 ModRequestorId; //todo: Which way around are these? Spec has a typo 42cc0f5f38SLawrence Tang UINT64 ModResponderId; 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]; 49*e18aaee9SLawrence Tang } EFI_IPF_CPU_INFO; 50*e18aaee9SLawrence Tang 51*e18aaee9SLawrence Tang typedef struct { 52cc0f5f38SLawrence Tang UINT64 ValidBits; 53cc0f5f38SLawrence Tang UINT8 MinimalSaveStateInfo[1024]; 54*e18aaee9SLawrence Tang UINT64 Brs[8]; 55*e18aaee9SLawrence Tang UINT64 Crs[128]; 56*e18aaee9SLawrence Tang UINT64 Ars[128]; 57*e18aaee9SLawrence Tang UINT64 Rrs[8]; 58*e18aaee9SLawrence Tang UINT64 Frs[256]; 59*e18aaee9SLawrence 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