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