1*cc0f5f38SLawrence Tang #ifndef CPER_SECTION_IPF_H
2*cc0f5f38SLawrence Tang #define CPER_SECTION_IPF_H
3*cc0f5f38SLawrence Tang 
4*cc0f5f38SLawrence Tang #include "json.h"
5*cc0f5f38SLawrence Tang #include "../edk/Cper.h"
6*cc0f5f38SLawrence Tang 
7*cc0f5f38SLawrence Tang ///
8*cc0f5f38SLawrence Tang /// IPF Error Record Section
9*cc0f5f38SLawrence Tang /// Defined as according to B.2.3 of the ItaniumTM Processor Family System Abstraction Layer (SAL) Specification.
10*cc0f5f38SLawrence Tang ///
11*cc0f5f38SLawrence Tang typedef struct {
12*cc0f5f38SLawrence Tang     UINT64 ProcErrorMapValid : 1;
13*cc0f5f38SLawrence Tang     UINT64 ProcStateParameterValid : 1;
14*cc0f5f38SLawrence Tang     UINT64 ProcCrLidValid : 1;
15*cc0f5f38SLawrence Tang     UINT64 PsiStaticStructValid : 1;
16*cc0f5f38SLawrence Tang     UINT64 CacheCheckNum : 4;
17*cc0f5f38SLawrence Tang     UINT64 TlbCheckNum : 4;
18*cc0f5f38SLawrence Tang     UINT64 BusCheckNum : 4;
19*cc0f5f38SLawrence Tang     UINT64 RegFileCheckNum : 4;
20*cc0f5f38SLawrence Tang     UINT64 MsCheckNum : 4;
21*cc0f5f38SLawrence Tang     UINT64 CpuIdInfoValid : 1;
22*cc0f5f38SLawrence Tang     UINT64 Reserved : 39;
23*cc0f5f38SLawrence Tang } EPI_IPF_ERROR_VALID_BITS;
24*cc0f5f38SLawrence Tang 
25*cc0f5f38SLawrence Tang typedef struct {
26*cc0f5f38SLawrence Tang     EPI_IPF_ERROR_VALID_BITS ValidBits;
27*cc0f5f38SLawrence Tang     UINT64 ProcErrorMap;
28*cc0f5f38SLawrence Tang     UINT64 ProcStateParameter;
29*cc0f5f38SLawrence Tang     UINT64 ProcCrLid;
30*cc0f5f38SLawrence Tang } EFI_IPF_ERROR_INFO_HEADER;
31*cc0f5f38SLawrence Tang 
32*cc0f5f38SLawrence Tang typedef struct {
33*cc0f5f38SLawrence Tang     UINT64 ValidBits;
34*cc0f5f38SLawrence Tang     UINT64 ModCheckInfo;
35*cc0f5f38SLawrence Tang     UINT64 ModTargetId;
36*cc0f5f38SLawrence Tang     UINT64 ModRequestorId;
37*cc0f5f38SLawrence Tang     UINT64 ModResponderId;
38*cc0f5f38SLawrence Tang     UINT64 ModPreciseIp;
39*cc0f5f38SLawrence Tang } EFI_IPF_MOD_ERROR_INFO;
40*cc0f5f38SLawrence Tang 
41*cc0f5f38SLawrence Tang typedef struct {
42*cc0f5f38SLawrence Tang     UINT8 CpuIdInfo[40];
43*cc0f5f38SLawrence Tang     UINT8 Reserved1[8];
44*cc0f5f38SLawrence Tang     UINT64 ValidBits;
45*cc0f5f38SLawrence Tang     UINT8 MinimalSaveStateInfo[1024];
46*cc0f5f38SLawrence Tang     UINT8 Brs[64];
47*cc0f5f38SLawrence Tang     UINT8 Crs[1024];
48*cc0f5f38SLawrence Tang     UINT8 Rrs[64];
49*cc0f5f38SLawrence Tang     UINT8 Frs[2048];
50*cc0f5f38SLawrence Tang } EFI_IPF_ERROR_INFO_FOOTER;
51*cc0f5f38SLawrence Tang 
52*cc0f5f38SLawrence Tang json_object* cper_section_ipf_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor);
53*cc0f5f38SLawrence Tang 
54*cc0f5f38SLawrence Tang #endif