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