]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Guid/ExtendedFirmwarePerformance.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Include / Guid / ExtendedFirmwarePerformance.h
1 /** @file
2 This file defines edk2 extended firmware performance records.
3 These records will be added into ACPI FPDT Firmware Basic Boot Performance Table.
4
5 Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef __EXTENDED_FIRMWARE_PERFORMANCE_H__
11 #define __EXTENDED_FIRMWARE_PERFORMANCE_H__
12
13 #include <IndustryStandard/Acpi.h>
14
15 //
16 // Known performance tokens
17 //
18 #define SEC_TOK "SEC" ///< SEC Phase
19 #define DXE_TOK "DXE" ///< DXE Phase
20 #define PEI_TOK "PEI" ///< PEI Phase
21 #define BDS_TOK "BDS" ///< BDS Phase
22 #define DRIVERBINDING_START_TOK "DB:Start:" ///< Driver Binding Start() function call
23 #define DRIVERBINDING_SUPPORT_TOK "DB:Support:" ///< Driver Binding Support() function call
24 #define DRIVERBINDING_STOP_TOK "DB:Stop:" ///< Driver Binding Stop() function call
25 #define LOAD_IMAGE_TOK "LoadImage:" ///< Load a dispatched module
26 #define START_IMAGE_TOK "StartImage:" ///< Dispatched Modules Entry Point execution
27 #define PEIM_TOK "PEIM" ///< PEIM Modules Entry Point execution
28
29 //
30 // Misc defines
31 //
32 #define FPDT_RECORD_REVISION_1 (0x01)
33
34 //
35 // Length field in EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER is a UINT8, thus:
36 //
37 #define FPDT_MAX_PERF_RECORD_SIZE (MAX_UINT8)
38
39 //
40 // FPDT Record Types
41 //
42 #define FPDT_GUID_EVENT_TYPE 0x1010
43 #define FPDT_DYNAMIC_STRING_EVENT_TYPE 0x1011
44 #define FPDT_DUAL_GUID_STRING_EVENT_TYPE 0x1012
45 #define FPDT_GUID_QWORD_EVENT_TYPE 0x1013
46 #define FPDT_GUID_QWORD_STRING_EVENT_TYPE 0x1014
47
48 //
49 // EDKII extended Fpdt record structures
50 //
51 #define FPDT_STRING_EVENT_RECORD_NAME_LENGTH 24
52
53 #pragma pack(1)
54 //
55 // FPDT Boot Performance Guid Event Record Structure
56 //
57 typedef struct {
58 EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
59 ///
60 /// ProgressID < 0x10 are reserved for core performance entries.
61 /// Start measurement point shall have lowered one nibble set to zero and
62 /// corresponding end points shall have lowered one nibble set to non-zero value;
63 /// keeping other nibbles same as start point.
64 ///
65 UINT16 ProgressID;
66 ///
67 /// APIC ID for the processor in the system used as a timestamp clock source.
68 /// If only one timestamp clock source is used, this field is Reserved and populated as 0.
69 ///
70 UINT32 ApicID;
71 ///
72 /// 64-bit value (nanosecond) describing elapsed time since the most recent deassertion of processor reset.
73 ///
74 UINT64 Timestamp;
75 ///
76 /// If ProgressID < 0x10, GUID of the referenced module; otherwise, GUID of the module logging the event.
77 ///
78 EFI_GUID Guid;
79 } FPDT_GUID_EVENT_RECORD;
80
81 //
82 // FPDT Boot Performance Dynamic String Event Record Structure
83 //
84 typedef struct {
85 EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
86 ///
87 /// ProgressID < 0x10 are reserved for core performance entries.
88 /// Start measurement point shall have lowered one nibble set to zero and
89 /// corresponding end points shall have lowered one nibble set to non-zero value;
90 /// keeping other nibbles same as start point.
91 ///
92 UINT16 ProgressID;
93 ///
94 /// APIC ID for the processor in the system used as a timestamp clock source.
95 /// If only one timestamp clock source is used, this field is Reserved and populated as 0.
96 ///
97 UINT32 ApicID;
98 ///
99 /// 64-bit value (nanosecond) describing elapsed time since the most recent deassertion of processor reset.
100 ///
101 UINT64 Timestamp;
102 ///
103 /// If ProgressID < 0x10, GUID of the referenced module; otherwise, GUID of the module logging the event.
104 ///
105 EFI_GUID Guid;
106 ///
107 /// ASCII string describing the module. Padding supplied at the end if necessary with null characters (0x00).
108 /// It may be module name, function name, or token name.
109 ///
110 CHAR8 String[0];
111 } FPDT_DYNAMIC_STRING_EVENT_RECORD;
112
113 //
114 // FPDT Boot Performance Dual GUID String Event Record Structure
115 //
116 typedef struct {
117 EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
118 ///
119 /// ProgressID < 0x10 are reserved for core performance entries.
120 /// Start measurement point shall have lowered one nibble set to zero and
121 /// corresponding end points shall have lowered one nibble set to non-zero value;
122 /// keeping other nibbles same as start point.
123 ///
124 UINT16 ProgressID;
125 ///
126 /// APIC ID for the processor in the system used as a timestamp clock source.
127 /// If only one timestamp clock source is used, this field is Reserved and populated as 0.
128 ///
129 UINT32 ApicID;
130 ///
131 /// 64-bit value (nanosecond) describing elapsed time since the most recent deassertion of processor reset.
132 ///
133 UINT64 Timestamp;
134 ///
135 /// GUID of the module logging the event.
136 ///
137 EFI_GUID Guid1;
138 ///
139 /// Event or Ppi or Protocol GUID for Callback.
140 ///
141 EFI_GUID Guid2;
142 ///
143 /// ASCII string describing the module. Padding supplied at the end if necessary with null characters (0x00).
144 /// It is the function name.
145 ///
146 CHAR8 String[0];
147 } FPDT_DUAL_GUID_STRING_EVENT_RECORD;
148
149 //
150 // FPDT Boot Performance GUID Qword Event Record Structure
151 //
152 typedef struct {
153 EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
154 ///
155 /// ProgressID < 0x10 are reserved for core performance entries.
156 /// Start measurement point shall have lowered one nibble set to zero and
157 /// corresponding end points shall have lowered one nibble set to non-zero value;
158 /// keeping other nibbles same as start point.
159 ///
160 UINT16 ProgressID;
161 ///
162 /// APIC ID for the processor in the system used as a timestamp clock source.
163 /// If only one timestamp clock source is used, this field is Reserved and populated as 0.
164 ///
165 UINT32 ApicID;
166 ///
167 /// 64-bit value (nanosecond) describing elapsed time since the most recent deassertion of processor reset.
168 ///
169 UINT64 Timestamp;
170 ///
171 /// GUID of the module logging the event
172 ///
173 EFI_GUID Guid;
174 ///
175 /// Qword of misc data, meaning depends on the ProgressId
176 ///
177 UINT64 Qword;
178 } FPDT_GUID_QWORD_EVENT_RECORD;
179
180 //
181 // FPDT Boot Performance GUID Qword String Event Record Structure
182 //
183 typedef struct {
184 EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
185 ///
186 /// ProgressID < 0x10 are reserved for core performance entries.
187 /// Start measurement point shall have lowered one nibble set to zero and
188 /// corresponding end points shall have lowered one nibble set to non-zero value;
189 /// keeping other nibbles same as start point.
190 ///
191 UINT16 ProgressID;
192 ///
193 /// APIC ID for the processor in the system used as a timestamp clock source.
194 /// If only one timestamp clock source is used, this field is Reserved and populated as 0.
195 ///
196 UINT32 ApicID;
197 ///
198 /// 64-bit value (nanosecond) describing elapsed time since the most recent deassertion of processor reset.
199 ///
200 UINT64 Timestamp;
201 ///
202 /// GUID of the module logging the event
203 ///
204 EFI_GUID Guid;
205 ///
206 /// Qword of misc data, meaning depends on the ProgressId
207 ///
208 UINT64 Qword;
209 ///
210 /// ASCII string describing the module. Padding supplied at the end if necessary with null characters (0x00).
211 ///
212 CHAR8 String[0];
213 } FPDT_GUID_QWORD_STRING_EVENT_RECORD;
214
215 #pragma pack()
216
217 //
218 // Union of all FPDT records
219 //
220 typedef union {
221 EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER RecordHeader;
222 FPDT_GUID_EVENT_RECORD GuidEvent;
223 FPDT_DYNAMIC_STRING_EVENT_RECORD DynamicStringEvent;
224 FPDT_DUAL_GUID_STRING_EVENT_RECORD DualGuidStringEvent;
225 FPDT_GUID_QWORD_EVENT_RECORD GuidQwordEvent;
226 FPDT_GUID_QWORD_STRING_EVENT_RECORD GuidQwordStringEvent;
227 } FPDT_RECORD;
228
229 //
230 // Union of all pointers to FPDT records
231 //
232 typedef union {
233 EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER *RecordHeader;
234 FPDT_GUID_EVENT_RECORD *GuidEvent;
235 FPDT_DYNAMIC_STRING_EVENT_RECORD *DynamicStringEvent;
236 FPDT_DUAL_GUID_STRING_EVENT_RECORD *DualGuidStringEvent;
237 FPDT_GUID_QWORD_EVENT_RECORD *GuidQwordEvent;
238 FPDT_GUID_QWORD_STRING_EVENT_RECORD *GuidQwordStringEvent;
239 } FPDT_RECORD_PTR;
240
241 ///
242 /// Hob:
243 /// GUID - gEdkiiFpdtExtendedFirmwarePerformanceGuid;
244 /// Data - FPDT_PEI_EXT_PERF_HEADER + one or more FPDT records
245 ///
246 typedef struct {
247 UINT32 SizeOfAllEntries;
248 UINT32 LoadImageCount;
249 UINT32 HobIsFull;
250 } FPDT_PEI_EXT_PERF_HEADER;
251
252 extern EFI_GUID gEdkiiFpdtExtendedFirmwarePerformanceGuid;
253
254 #endif