xref: /openbmc/libcper/include/libcper/sections/cper-section-nvidia-events.h (revision 51c1813200b42fa35d49eb0c214339ac479f090d)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #ifndef CPER_SECTION_NVIDIA_EVENTS_H
4 #define CPER_SECTION_NVIDIA_EVENTS_H
5 
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 
10 #include <stdio.h>
11 #include <json.h>
12 #include <libcper/Cper.h>
13 
14 // Event Header version (treated as major version)
15 #define EFI_NVIDIA_EVENT_HEADER_VERSION 1
16 
17 typedef struct __attribute__((packed)) {
18 	CHAR8 EventVersion;
19 	CHAR8 EventContextCount;
20 	CHAR8 SourceDeviceType;
21 	CHAR8 Reserved1;
22 	UINT16 EventType;
23 	UINT16 EventSubtype;
24 	UINT64 EventLinkId;
25 	CHAR8 Signature[16];
26 } EFI_NVIDIA_EVENT_HEADER;
27 
28 typedef struct __attribute__((packed)) {
29 	UINT16 InfoVersion;
30 	UINT8 InfoSize;
31 } EFI_NVIDIA_EVENT_INFO_HEADER;
32 
33 // CPU Event Info structure version
34 #define EFI_NVIDIA_CPU_EVENT_INFO_MAJ 0
35 #define EFI_NVIDIA_CPU_EVENT_INFO_MIN 0
36 
37 typedef struct __attribute__((packed)) {
38 	UINT8 SocketNum;
39 	UINT32 Architecture;
40 	UINT32 Ecid[4];
41 	UINT64 InstanceBase;
42 } EFI_NVIDIA_CPU_EVENT_INFO;
43 
44 // GPU Event Info structure version
45 #define EFI_NVIDIA_GPU_EVENT_INFO_MAJ 1
46 #define EFI_NVIDIA_GPU_EVENT_INFO_MIN 0
47 
48 typedef struct __attribute__((packed)) {
49 	UINT8 EventOriginator;
50 	UINT16 SourcePartition;
51 	UINT16 SourceSubPartition;
52 	UINT64 Pdi;
53 } EFI_NVIDIA_GPU_EVENT_INFO;
54 
55 typedef struct __attribute__((packed)) {
56 	UINT32 CtxSize;
57 	UINT16 CtxVersion;
58 	UINT16 Reserved1;
59 	UINT16 DataFormatType;
60 	UINT16 DataFormatVersion;
61 	UINT32 DataSize;
62 	UINT8 Data[0];
63 } EFI_NVIDIA_EVENT_CTX_HEADER;
64 
65 typedef struct __attribute__((packed)) {
66 	UINT64 Key;
67 	UINT64 Value;
68 } EFI_NVIDIA_EVENT_CTX_DATA_TYPE_1;
69 
70 typedef struct __attribute__((packed)) {
71 	UINT32 Key;
72 	UINT32 Value;
73 } EFI_NVIDIA_EVENT_CTX_DATA_TYPE_2;
74 
75 typedef struct __attribute__((packed)) {
76 	UINT64 Value;
77 } EFI_NVIDIA_EVENT_CTX_DATA_TYPE_3;
78 
79 typedef struct __attribute__((packed)) {
80 	UINT32 Value;
81 } EFI_NVIDIA_EVENT_CTX_DATA_TYPE_4;
82 
83 typedef struct __attribute__((packed)) {
84 	UINT8 Class;
85 	UINT8 Subclass;
86 	UINT8 Rev;
87 	UINT16 VendorId;
88 	UINT16 DeviceId;
89 	UINT16 SubsystemVendorId;
90 	UINT16 SubsystemId;
91 	UINT64 Bar0Start;
92 	UINT64 Bar0Size;
93 	UINT64 Bar1Start;
94 	UINT64 Bar1Size;
95 	UINT64 Bar2Start;
96 	UINT64 Bar2Size;
97 } EFI_NVIDIA_GPU_CTX_METADATA_PCI_INFO;
98 
99 typedef struct __attribute__((packed)) {
100 	CHAR8 DeviceName[48];
101 	CHAR8 FirmwareVersion[16];
102 	CHAR8 PfDriverMicrocodeVersion[16];
103 	CHAR8 PfDriverVersion[16];
104 	CHAR8 VfDriverVersion[16];
105 	UINT64 Configuration;
106 	UINT64 Pdi;
107 	UINT32 ArchitectureId;
108 	UINT8 HardwareInfoType;
109 	union {
110 		EFI_NVIDIA_GPU_CTX_METADATA_PCI_INFO PciInfo;
111 		UINT8 Reserved[59];
112 	};
113 } EFI_NVIDIA_GPU_CTX_METADATA;
114 
115 typedef struct __attribute__((packed)) {
116 	UINT32 XidCode;
117 	CHAR8 Message[236];
118 } EFI_NVIDIA_GPU_CTX_LEGACY_XID;
119 
120 typedef struct __attribute__((packed)) {
121 	UINT8 Flags;
122 	UINT8 Reserved1[3];
123 	UINT16 RecoveryAction;
124 	UINT16 DiagnosticFlow;
125 	UINT64 Reserved2; // Padding to 16-byte alignment
126 } EFI_NVIDIA_GPU_CTX_RECOMMENDED_ACTIONS;
127 
128 extern EFI_GUID gEfiNvidiaEventErrorSectionGuid;
129 
130 json_object *cper_section_nvidia_events_to_ir(const UINT8 *section, UINT32 size,
131 					      char **desc_string);
132 void ir_section_nvidia_events_to_cper(json_object *section, FILE *out);
133 
134 #ifdef __cplusplus
135 }
136 #endif
137 
138 #endif
139