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