]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / AcpiParser.h
CommitLineData
a6eaba4d 1/** @file\r
ee4dc24f
RN
2 Header file for ACPI parser\r
3\r
558b37b4 4 Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r
d4633b36 5 Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.\r
691b1786 6 Copyright (c) 2022, AMD Incorporated. All rights reserved.\r
56ba3746 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
ee4dc24f
RN
8**/\r
9\r
10#ifndef ACPIPARSER_H_\r
11#define ACPIPARSER_H_\r
12\r
13#define OUTPUT_FIELD_COLUMN_WIDTH 36\r
14\r
15/// The RSDP table signature is "RSD PTR " (8 bytes)\r
16/// However The signature for ACPI tables is 4 bytes.\r
17/// To work around this oddity define a signature type\r
18/// that allows us to process the log options.\r
19#define RSDP_TABLE_INFO SIGNATURE_32('R', 'S', 'D', 'P')\r
20\r
a6eaba4d
DB
21/**\r
22 This function increments the ACPI table error counter.\r
23**/\r
ee4dc24f
RN
24VOID\r
25EFIAPI\r
26IncrementErrorCount (\r
27 VOID\r
28 );\r
29\r
a6eaba4d
DB
30/**\r
31 This function increments the ACPI table warning counter.\r
32**/\r
ee4dc24f
RN
33VOID\r
34EFIAPI\r
35IncrementWarningCount (\r
36 VOID\r
37 );\r
38\r
a6eaba4d
DB
39/**\r
40 This function verifies the ACPI table checksum.\r
ee4dc24f
RN
41\r
42 This function verifies the checksum for the ACPI table and optionally\r
43 prints the status.\r
44\r
45 @param [in] Log If TRUE log the status of the checksum.\r
46 @param [in] Ptr Pointer to the start of the table buffer.\r
47 @param [in] Length The length of the buffer.\r
48\r
49 @retval TRUE The checksum is OK.\r
50 @retval FALSE The checksum failed.\r
a6eaba4d 51**/\r
ee4dc24f
RN
52BOOLEAN\r
53EFIAPI\r
54VerifyChecksum (\r
47d20b54
MK
55 IN BOOLEAN Log,\r
56 IN UINT8 *Ptr,\r
57 IN UINT32 Length\r
ee4dc24f
RN
58 );\r
59\r
a6eaba4d
DB
60/**\r
61 This function performs a raw data dump of the ACPI table.\r
ee4dc24f
RN
62\r
63 @param [in] Ptr Pointer to the start of the table buffer.\r
64 @param [in] Length The length of the buffer.\r
a6eaba4d 65**/\r
ee4dc24f
RN
66VOID\r
67EFIAPI\r
68DumpRaw (\r
47d20b54
MK
69 IN UINT8 *Ptr,\r
70 IN UINT32 Length\r
ee4dc24f
RN
71 );\r
72\r
a6eaba4d
DB
73/**\r
74 This function traces 1 byte of datum as specified in the format string.\r
ee4dc24f
RN
75\r
76 @param [in] Format The format string for tracing the data.\r
77 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 78**/\r
ee4dc24f
RN
79VOID\r
80EFIAPI\r
81DumpUint8 (\r
47d20b54
MK
82 IN CONST CHAR16 *Format,\r
83 IN UINT8 *Ptr\r
ee4dc24f
RN
84 );\r
85\r
a6eaba4d
DB
86/**\r
87 This function traces 2 bytes of data as specified in the format string.\r
ee4dc24f
RN
88\r
89 @param [in] Format The format string for tracing the data.\r
90 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 91**/\r
ee4dc24f
RN
92VOID\r
93EFIAPI\r
94DumpUint16 (\r
47d20b54
MK
95 IN CONST CHAR16 *Format,\r
96 IN UINT8 *Ptr\r
ee4dc24f
RN
97 );\r
98\r
a6eaba4d
DB
99/**\r
100 This function traces 4 bytes of data as specified in the format string.\r
ee4dc24f
RN
101\r
102 @param [in] Format The format string for tracing the data.\r
103 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 104**/\r
ee4dc24f
RN
105VOID\r
106EFIAPI\r
107DumpUint32 (\r
47d20b54
MK
108 IN CONST CHAR16 *Format,\r
109 IN UINT8 *Ptr\r
ee4dc24f
RN
110 );\r
111\r
a6eaba4d
DB
112/**\r
113 This function traces 8 bytes of data as specified by the format string.\r
ee4dc24f
RN
114\r
115 @param [in] Format The format string for tracing the data.\r
116 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 117**/\r
ee4dc24f
RN
118VOID\r
119EFIAPI\r
120DumpUint64 (\r
47d20b54
MK
121 IN CONST CHAR16 *Format,\r
122 IN UINT8 *Ptr\r
ee4dc24f
RN
123 );\r
124\r
a6eaba4d
DB
125/**\r
126 This function traces 3 characters which can be optionally\r
127 formated using the format string if specified.\r
ee4dc24f
RN
128\r
129 If no format string is specified the Format must be NULL.\r
130\r
131 @param [in] Format Optional format string for tracing the data.\r
132 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 133**/\r
ee4dc24f
RN
134VOID\r
135EFIAPI\r
136Dump3Chars (\r
47d20b54
MK
137 IN CONST CHAR16 *Format OPTIONAL,\r
138 IN UINT8 *Ptr\r
ee4dc24f
RN
139 );\r
140\r
a6eaba4d
DB
141/**\r
142 This function traces 4 characters which can be optionally\r
143 formated using the format string if specified.\r
ee4dc24f
RN
144\r
145 If no format string is specified the Format must be NULL.\r
146\r
147 @param [in] Format Optional format string for tracing the data.\r
148 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 149**/\r
ee4dc24f
RN
150VOID\r
151EFIAPI\r
152Dump4Chars (\r
47d20b54
MK
153 IN CONST CHAR16 *Format OPTIONAL,\r
154 IN UINT8 *Ptr\r
ee4dc24f
RN
155 );\r
156\r
a6eaba4d
DB
157/**\r
158 This function traces 6 characters which can be optionally\r
159 formated using the format string if specified.\r
ee4dc24f
RN
160\r
161 If no format string is specified the Format must be NULL.\r
162\r
163 @param [in] Format Optional format string for tracing the data.\r
164 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 165**/\r
ee4dc24f
RN
166VOID\r
167EFIAPI\r
168Dump6Chars (\r
47d20b54
MK
169 IN CONST CHAR16 *Format OPTIONAL,\r
170 IN UINT8 *Ptr\r
ee4dc24f
RN
171 );\r
172\r
a6eaba4d
DB
173/**\r
174 This function traces 8 characters which can be optionally\r
175 formated using the format string if specified.\r
ee4dc24f
RN
176\r
177 If no format string is specified the Format must be NULL.\r
178\r
179 @param [in] Format Optional format string for tracing the data.\r
180 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 181**/\r
ee4dc24f
RN
182VOID\r
183EFIAPI\r
184Dump8Chars (\r
47d20b54
MK
185 IN CONST CHAR16 *Format OPTIONAL,\r
186 IN UINT8 *Ptr\r
ee4dc24f
RN
187 );\r
188\r
710ff749
KK
189/**\r
190 This function traces 12 characters which can be optionally\r
191 formated using the format string if specified.\r
192\r
193 If no format string is specified the Format must be NULL.\r
194\r
195 @param [in] Format Optional format string for tracing the data.\r
196 @param [in] Ptr Pointer to the start of the buffer.\r
197**/\r
198VOID\r
199EFIAPI\r
200Dump12Chars (\r
47d20b54
MK
201 IN CONST CHAR16 *Format OPTIONAL,\r
202 IN UINT8 *Ptr\r
710ff749
KK
203 );\r
204\r
a6eaba4d
DB
205/**\r
206 This function indents and prints the ACPI table Field Name.\r
ee4dc24f
RN
207\r
208 @param [in] Indent Number of spaces to add to the global table\r
209 indent. The global table indent is 0 by default;\r
210 however this value is updated on entry to the\r
211 ParseAcpi() by adding the indent value provided to\r
212 ParseAcpi() and restored back on exit. Therefore\r
213 the total indent in the output is dependent on from\r
214 where this function is called.\r
215 @param [in] FieldName Pointer to the Field Name.\r
a6eaba4d 216**/\r
ee4dc24f
RN
217VOID\r
218EFIAPI\r
219PrintFieldName (\r
47d20b54
MK
220 IN UINT32 Indent,\r
221 IN CONST CHAR16 *FieldName\r
a6eaba4d 222 );\r
ee4dc24f 223\r
a6eaba4d
DB
224/**\r
225 This function pointer is the template for customizing the trace output\r
ee4dc24f
RN
226\r
227 @param [in] Format Format string for tracing the data as specified by\r
228 the 'Format' member of ACPI_PARSER.\r
229 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 230**/\r
47d20b54 231typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16 *Format, UINT8 *Ptr);\r
ee4dc24f 232\r
a6eaba4d
DB
233/**\r
234 This function pointer is the template for validating an ACPI table field.\r
ee4dc24f
RN
235\r
236 @param [in] Ptr Pointer to the start of the field data.\r
237 @param [in] Context Pointer to context specific information as specified by\r
238 the 'Context' member of the ACPI_PARSER.\r
239 e.g. this could be a pointer to the ACPI table header.\r
a6eaba4d 240**/\r
47d20b54 241typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8 *Ptr, VOID *Context);\r
ee4dc24f 242\r
a6eaba4d
DB
243/**\r
244 The ACPI_PARSER structure describes the fields of an ACPI table and\r
245 provides means for the parser to interpret and trace appropriately.\r
ee4dc24f
RN
246\r
247 The first three members are populated based on information present in\r
248 in the ACPI table specifications. The remaining members describe how\r
249 the parser should report the field information, validate the field data\r
250 and/or update an external pointer to the field (ItemPtr).\r
251\r
252 ParseAcpi() uses the format string specified by 'Format' for tracing\r
253 the field data. If the field is more complex and requires additional\r
254 processing for formatting and representation a print formatter function\r
255 can be specified in 'PrintFormatter'.\r
691b1786
ALA
256\r
257 ParseAcpiBitFields() uses AcpiParser structure to parse the bit fields.\r
258 It considers Length as a number of bits that need to be parsed.\r
259 Also, the Offset field will be considered as starting offset of the bitfield.\r
260\r
ee4dc24f
RN
261 The PrintFormatter function may choose to use the format string\r
262 specified by 'Format' or use its own internal format string.\r
263\r
264 The 'Format' and 'PrintFormatter' members allow flexibility for\r
265 representing the field data.\r
a6eaba4d 266**/\r
ee4dc24f 267typedef struct AcpiParser {\r
ee4dc24f
RN
268 /// String describing the ACPI table field\r
269 /// (Field column from ACPI table spec)\r
47d20b54 270 CONST CHAR16 *NameStr;\r
ee4dc24f
RN
271\r
272 /// The length of the field.\r
273 /// (Byte Length column from ACPI table spec)\r
691b1786 274 /// Length(in bits) of the bitfield if used with ParseAcpiBitFields().\r
47d20b54 275 UINT32 Length;\r
ee4dc24f
RN
276\r
277 /// The offset of the field from the start of the table.\r
278 /// (Byte Offset column from ACPI table spec)\r
691b1786 279 /// The Bit offset of the field if used with ParseAcpiBitFields().\r
47d20b54 280 UINT32 Offset;\r
ee4dc24f
RN
281\r
282 /// Optional Print() style format string for tracing the data. If not\r
283 /// used this must be set to NULL.\r
47d20b54 284 CONST CHAR16 *Format;\r
ee4dc24f
RN
285\r
286 /// Optional pointer to a print formatter function which\r
287 /// is typically used to trace complex field information.\r
288 /// If not used this must be set to NULL.\r
289 /// The Format string is passed to the PrintFormatter function\r
290 /// but may be ignored by the implementation code.\r
47d20b54 291 FNPTR_PRINT_FORMATTER PrintFormatter;\r
ee4dc24f
RN
292\r
293 /// Optional pointer which may be set to request the parser to update\r
8c1b1fe6
CJ
294 /// a pointer to the field data. This value is set after the FieldValidator\r
295 /// has been called and therefore should not be used by the FieldValidator.\r
296 /// If unused this must be set to NULL.\r
691b1786 297 /// ItemPtr is not supported with ParseAcpiBitFields().\r
47d20b54 298 VOID **ItemPtr;\r
ee4dc24f
RN
299\r
300 /// Optional pointer to a field validator function.\r
301 /// The function should directly report any appropriate error or warning\r
302 /// and invoke the appropriate counter update function.\r
303 /// If not used this parameter must be set to NULL.\r
47d20b54 304 FNPTR_FIELD_VALIDATOR FieldValidator;\r
ee4dc24f
RN
305\r
306 /// Optional pointer to context specific information,\r
307 /// which the Field Validator function can use to determine\r
308 /// additional information about the ACPI table and make\r
309 /// decisions about the field being validated.\r
310 /// e.g. this could be a pointer to the ACPI table header\r
47d20b54 311 VOID *Context;\r
ee4dc24f
RN
312} ACPI_PARSER;\r
313\r
a6eaba4d
DB
314/**\r
315 A structure used to store the pointers to the members of the\r
316 ACPI description header structure that was parsed.\r
317**/\r
ee4dc24f
RN
318typedef struct AcpiDescriptionHeaderInfo {\r
319 /// ACPI table signature\r
47d20b54 320 UINT32 *Signature;\r
ee4dc24f 321 /// Length of the ACPI table\r
47d20b54 322 UINT32 *Length;\r
ee4dc24f 323 /// Revision\r
47d20b54 324 UINT8 *Revision;\r
ee4dc24f 325 /// Checksum\r
47d20b54 326 UINT8 *Checksum;\r
ee4dc24f 327 /// OEM Id - length is 6 bytes\r
47d20b54 328 UINT8 *OemId;\r
ee4dc24f 329 /// OEM table Id\r
47d20b54 330 UINT64 *OemTableId;\r
ee4dc24f 331 /// OEM revision Id\r
47d20b54 332 UINT32 *OemRevision;\r
ee4dc24f 333 /// Creator Id\r
47d20b54 334 UINT32 *CreatorId;\r
ee4dc24f 335 /// Creator revision\r
47d20b54 336 UINT32 *CreatorRevision;\r
ee4dc24f
RN
337} ACPI_DESCRIPTION_HEADER_INFO;\r
338\r
a6eaba4d
DB
339/**\r
340 This function is used to parse an ACPI table buffer.\r
ee4dc24f
RN
341\r
342 The ACPI table buffer is parsed using the ACPI table parser information\r
343 specified by a pointer to an array of ACPI_PARSER elements. This parser\r
344 function iterates through each item on the ACPI_PARSER array and logs the\r
345 ACPI table fields.\r
346\r
347 This function can optionally be used to parse ACPI tables and fetch specific\r
348 field values. The ItemPtr member of the ACPI_PARSER structure (where used)\r
349 is updated by this parser function to point to the selected field data\r
350 (e.g. useful for variable length nested fields).\r
351\r
352 @param [in] Trace Trace the ACPI fields TRUE else only parse the\r
353 table.\r
354 @param [in] Indent Number of spaces to indent the output.\r
355 @param [in] AsciiName Optional pointer to an ASCII string that describes\r
356 the table being parsed.\r
357 @param [in] Ptr Pointer to the start of the buffer.\r
358 @param [in] Length Length of the buffer pointed by Ptr.\r
359 @param [in] Parser Pointer to an array of ACPI_PARSER structure that\r
360 describes the table being parsed.\r
361 @param [in] ParserItems Number of items in the ACPI_PARSER array.\r
362\r
363 @retval Number of bytes parsed.\r
a6eaba4d 364**/\r
ee4dc24f
RN
365UINT32\r
366EFIAPI\r
367ParseAcpi (\r
368 IN BOOLEAN Trace,\r
691b1786
ALA
369 IN UINT32 Indent,\r
370 IN CONST CHAR8 *AsciiName OPTIONAL,\r
371 IN UINT8 *Ptr,\r
372 IN UINT32 Length,\r
373 IN CONST ACPI_PARSER *Parser,\r
374 IN UINT32 ParserItems\r
375 );\r
376\r
377/**\r
378 This function is used to parse an ACPI table bitfield buffer.\r
379\r
380 The ACPI table buffer is parsed using the ACPI table parser information\r
381 specified by a pointer to an array of ACPI_PARSER elements. This parser\r
382 function iterates through each item on the ACPI_PARSER array and logs the ACPI table bitfields.\r
383\r
384 This function can optionally be used to parse ACPI tables and fetch specific\r
385 field values. The ItemPtr member of the ACPI_PARSER structure (where used)\r
386 is updated by this parser function to point to the selected field data\r
387 (e.g. useful for variable length nested fields).\r
388\r
389 ItemPtr member of ACPI_PARSER is not supported with this function.\r
390\r
391 @param [in] Trace Trace the ACPI fields TRUE else only parse the\r
392 table.\r
393 @param [in] Indent Number of spaces to indent the output.\r
394 @param [in] AsciiName Optional pointer to an ASCII string that describes\r
395 the table being parsed.\r
396 @param [in] Ptr Pointer to the start of the buffer.\r
397 @param [in] Length Length of the buffer pointed by Ptr.\r
398 @param [in] Parser Pointer to an array of ACPI_PARSER structure that\r
399 describes the table being parsed.\r
400 @param [in] ParserItems Number of items in the ACPI_PARSER array.\r
401\r
402 @retval Number of bits parsed.\r
403**/\r
404UINT32\r
405EFIAPI\r
406ParseAcpiBitFields (\r
407 IN BOOLEAN Trace,\r
ee4dc24f 408 IN UINT32 Indent,\r
47d20b54
MK
409 IN CONST CHAR8 *AsciiName OPTIONAL,\r
410 IN UINT8 *Ptr,\r
ee4dc24f 411 IN UINT32 Length,\r
47d20b54 412 IN CONST ACPI_PARSER *Parser,\r
ee4dc24f 413 IN UINT32 ParserItems\r
a6eaba4d 414 );\r
ee4dc24f 415\r
a6eaba4d
DB
416/**\r
417 This is a helper macro to pass parameters to the Parser functions.\r
ee4dc24f
RN
418\r
419 @param [in] Parser The name of the ACPI_PARSER array describing the\r
420 ACPI table fields.\r
a6eaba4d 421**/\r
47d20b54 422#define PARSER_PARAMS(Parser) Parser, sizeof (Parser) / sizeof (Parser[0])\r
ee4dc24f 423\r
a6eaba4d
DB
424/**\r
425 This is a helper macro for describing the ACPI header fields.\r
ee4dc24f
RN
426\r
427 @param [out] Info Pointer to retrieve the ACPI table header information.\r
a6eaba4d 428**/\r
ee4dc24f
RN
429#define PARSE_ACPI_HEADER(Info) \\r
430 { L"Signature", 4, 0, NULL, Dump4Chars, \\r
431 (VOID**)&(Info)->Signature , NULL, NULL }, \\r
432 { L"Length", 4, 4, L"%d", NULL, \\r
433 (VOID**)&(Info)->Length, NULL, NULL }, \\r
434 { L"Revision", 1, 8, L"%d", NULL, \\r
435 (VOID**)&(Info)->Revision, NULL, NULL }, \\r
436 { L"Checksum", 1, 9, L"0x%X", NULL, \\r
437 (VOID**)&(Info)->Checksum, NULL, NULL }, \\r
438 { L"Oem ID", 6, 10, NULL, Dump6Chars, \\r
439 (VOID**)&(Info)->OemId, NULL, NULL }, \\r
440 { L"Oem Table ID", 8, 16, NULL, Dump8Chars, \\r
441 (VOID**)&(Info)->OemTableId, NULL, NULL }, \\r
442 { L"Oem Revision", 4, 24, L"0x%X", NULL, \\r
443 (VOID**)&(Info)->OemRevision, NULL, NULL }, \\r
444 { L"Creator ID", 4, 28, NULL, Dump4Chars, \\r
445 (VOID**)&(Info)->CreatorId, NULL, NULL }, \\r
446 { L"Creator Revision", 4, 32, L"0x%X", NULL, \\r
447 (VOID**)&(Info)->CreatorRevision, NULL, NULL }\r
448\r
a6eaba4d
DB
449/**\r
450 This function indents and traces the GAS structure as described by the GasParser.\r
ee4dc24f
RN
451\r
452 @param [in] Ptr Pointer to the start of the buffer.\r
453 @param [in] Indent Number of spaces to indent the output.\r
58cc0ffe
KK
454 @param [in] Length Length of the GAS structure buffer.\r
455\r
456 @retval Number of bytes parsed.\r
a6eaba4d 457**/\r
58cc0ffe 458UINT32\r
ee4dc24f
RN
459EFIAPI\r
460DumpGasStruct (\r
47d20b54
MK
461 IN UINT8 *Ptr,\r
462 IN UINT32 Indent,\r
463 IN UINT32 Length\r
ee4dc24f
RN
464 );\r
465\r
a6eaba4d
DB
466/**\r
467 This function traces the GAS structure as described by the GasParser.\r
ee4dc24f
RN
468\r
469 @param [in] Format Optional format string for tracing the data.\r
470 @param [in] Ptr Pointer to the start of the buffer.\r
a6eaba4d 471**/\r
ee4dc24f
RN
472VOID\r
473EFIAPI\r
474DumpGas (\r
47d20b54
MK
475 IN CONST CHAR16 *Format OPTIONAL,\r
476 IN UINT8 *Ptr\r
ee4dc24f
RN
477 );\r
478\r
a6eaba4d
DB
479/**\r
480 This function traces the ACPI header as described by the AcpiHeaderParser.\r
ee4dc24f
RN
481\r
482 @param [in] Ptr Pointer to the start of the buffer.\r
483\r
484 @retval Number of bytes parsed.\r
a6eaba4d 485**/\r
ee4dc24f
RN
486UINT32\r
487EFIAPI\r
488DumpAcpiHeader (\r
47d20b54 489 IN UINT8 *Ptr\r
ee4dc24f
RN
490 );\r
491\r
a6eaba4d
DB
492/**\r
493 This function parses the ACPI header as described by the AcpiHeaderParser.\r
ee4dc24f
RN
494\r
495 This function optionally returns the Signature, Length and revision of the\r
496 ACPI table.\r
497\r
498 @param [in] Ptr Pointer to the start of the buffer.\r
499 @param [out] Signature Gets location of the ACPI table signature.\r
500 @param [out] Length Gets location of the length of the ACPI table.\r
501 @param [out] Revision Gets location of the revision of the ACPI table.\r
502\r
503 @retval Number of bytes parsed.\r
a6eaba4d 504**/\r
ee4dc24f
RN
505UINT32\r
506EFIAPI\r
507ParseAcpiHeader (\r
47d20b54
MK
508 IN UINT8 *Ptr,\r
509 OUT CONST UINT32 **Signature,\r
510 OUT CONST UINT32 **Length,\r
511 OUT CONST UINT8 **Revision\r
ee4dc24f
RN
512 );\r
513\r
1d3d5e32
MMF
514/**\r
515 This function parses the ACPI AEST table.\r
516 When trace is enabled this function parses the AEST table and\r
517 traces the ACPI table fields.\r
518\r
519 This function also performs validation of the ACPI table fields.\r
520\r
521 @param [in] Trace If TRUE, trace the ACPI fields.\r
522 @param [in] Ptr Pointer to the start of the buffer.\r
523 @param [in] AcpiTableLength Length of the ACPI table.\r
524 @param [in] AcpiTableRevision Revision of the ACPI table.\r
525**/\r
526VOID\r
527EFIAPI\r
528ParseAcpiAest (\r
47d20b54
MK
529 IN BOOLEAN Trace,\r
530 IN UINT8 *Ptr,\r
531 IN UINT32 AcpiTableLength,\r
532 IN UINT8 AcpiTableRevision\r
1d3d5e32
MMF
533 );\r
534\r
1fd8d089
JB
535/**\r
536 This function parses the ACPI APMT table.\r
537 When trace is enabled this function parses the APMT table and\r
538 traces the ACPI table fields.\r
539\r
540 This function also performs validation of the ACPI table fields.\r
541\r
542 @param [in] Trace If TRUE, trace the ACPI fields.\r
543 @param [in] Ptr Pointer to the start of the buffer.\r
544 @param [in] AcpiTableLength Length of the ACPI table.\r
545 @param [in] AcpiTableRevision Revision of the ACPI table.\r
546**/\r
547VOID\r
548EFIAPI\r
549ParseAcpiApmt (\r
550 IN BOOLEAN Trace,\r
551 IN UINT8 *Ptr,\r
552 IN UINT32 AcpiTableLength,\r
553 IN UINT8 AcpiTableRevision\r
554 );\r
555\r
a6eaba4d
DB
556/**\r
557 This function parses the ACPI BGRT table.\r
ee4dc24f
RN
558 When trace is enabled this function parses the BGRT table and\r
559 traces the ACPI table fields.\r
560\r
561 This function also performs validation of the ACPI table fields.\r
562\r
563 @param [in] Trace If TRUE, trace the ACPI fields.\r
564 @param [in] Ptr Pointer to the start of the buffer.\r
565 @param [in] AcpiTableLength Length of the ACPI table.\r
566 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 567**/\r
ee4dc24f
RN
568VOID\r
569EFIAPI\r
570ParseAcpiBgrt (\r
47d20b54
MK
571 IN BOOLEAN Trace,\r
572 IN UINT8 *Ptr,\r
573 IN UINT32 AcpiTableLength,\r
574 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
575 );\r
576\r
a6eaba4d
DB
577/**\r
578 This function parses the ACPI DBG2 table.\r
ee4dc24f
RN
579 When trace is enabled this function parses the DBG2 table and\r
580 traces the ACPI table fields.\r
581\r
582 This function also performs validation of the ACPI table fields.\r
583\r
584 @param [in] Trace If TRUE, trace the ACPI fields.\r
585 @param [in] Ptr Pointer to the start of the buffer.\r
586 @param [in] AcpiTableLength Length of the ACPI table.\r
587 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 588**/\r
ee4dc24f
RN
589VOID\r
590EFIAPI\r
591ParseAcpiDbg2 (\r
47d20b54
MK
592 IN BOOLEAN Trace,\r
593 IN UINT8 *Ptr,\r
594 IN UINT32 AcpiTableLength,\r
595 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
596 );\r
597\r
a6eaba4d
DB
598/**\r
599 This function parses the ACPI DSDT table.\r
ee4dc24f
RN
600 When trace is enabled this function parses the DSDT table and\r
601 traces the ACPI table fields.\r
602 For the DSDT table only the ACPI header fields are parsed and\r
603 traced.\r
604\r
605 @param [in] Trace If TRUE, trace the ACPI fields.\r
606 @param [in] Ptr Pointer to the start of the buffer.\r
607 @param [in] AcpiTableLength Length of the ACPI table.\r
608 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 609**/\r
ee4dc24f
RN
610VOID\r
611EFIAPI\r
612ParseAcpiDsdt (\r
47d20b54
MK
613 IN BOOLEAN Trace,\r
614 IN UINT8 *Ptr,\r
615 IN UINT32 AcpiTableLength,\r
616 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
617 );\r
618\r
558b37b4
JS
619/**\r
620 This function parses the ACPI ERST table.\r
621 When trace is enabled this function parses the ERST table and\r
622 traces the ACPI table fields.\r
623\r
624 This function also performs validation of the ACPI table fields.\r
625\r
626 @param [in] Trace If TRUE, trace the ACPI fields.\r
627 @param [in] Ptr Pointer to the start of the buffer.\r
628 @param [in] AcpiTableLength Length of the ACPI table.\r
629 @param [in] AcpiTableRevision Revision of the ACPI table.\r
630**/\r
631VOID\r
632EFIAPI\r
633ParseAcpiErst (\r
634 IN BOOLEAN Trace,\r
635 IN UINT8 *Ptr,\r
636 IN UINT32 AcpiTableLength,\r
637 IN UINT8 AcpiTableRevision\r
638 );\r
639\r
d5cf0fba
SM
640/**\r
641 This function parses the ACPI FACS table.\r
642 When trace is enabled this function parses the FACS table and\r
643 traces the ACPI table fields.\r
644\r
645 This function also performs validation of the ACPI table fields.\r
646\r
647 @param [in] Trace If TRUE, trace the ACPI fields.\r
648 @param [in] Ptr Pointer to the start of the buffer.\r
649 @param [in] AcpiTableLength Length of the ACPI table.\r
650 @param [in] AcpiTableRevision Revision of the ACPI table.\r
651**/\r
652VOID\r
653EFIAPI\r
654ParseAcpiFacs (\r
47d20b54
MK
655 IN BOOLEAN Trace,\r
656 IN UINT8 *Ptr,\r
657 IN UINT32 AcpiTableLength,\r
658 IN UINT8 AcpiTableRevision\r
d5cf0fba
SM
659 );\r
660\r
a6eaba4d
DB
661/**\r
662 This function parses the ACPI FADT table.\r
ee4dc24f
RN
663 This function parses the FADT table and optionally traces the ACPI\r
664 table fields.\r
665\r
666 This function also performs validation of the ACPI table fields.\r
667\r
668 @param [in] Trace If TRUE, trace the ACPI fields.\r
669 @param [in] Ptr Pointer to the start of the buffer.\r
670 @param [in] AcpiTableLength Length of the ACPI table.\r
671 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 672**/\r
ee4dc24f
RN
673VOID\r
674EFIAPI\r
675ParseAcpiFadt (\r
47d20b54
MK
676 IN BOOLEAN Trace,\r
677 IN UINT8 *Ptr,\r
678 IN UINT32 AcpiTableLength,\r
679 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
680 );\r
681\r
a6eaba4d
DB
682/**\r
683 This function parses the ACPI GTDT table.\r
ee4dc24f
RN
684 When trace is enabled this function parses the GTDT table and\r
685 traces the ACPI table fields.\r
686\r
687 This function also parses the following platform timer structures:\r
688 - GT Block timer\r
689 - Watchdog timer\r
690\r
691 This function also performs validation of the ACPI table fields.\r
692\r
693 @param [in] Trace If TRUE, trace the ACPI fields.\r
694 @param [in] Ptr Pointer to the start of the buffer.\r
695 @param [in] AcpiTableLength Length of the ACPI table.\r
696 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 697**/\r
ee4dc24f
RN
698VOID\r
699EFIAPI\r
700ParseAcpiGtdt (\r
47d20b54
MK
701 IN BOOLEAN Trace,\r
702 IN UINT8 *Ptr,\r
703 IN UINT32 AcpiTableLength,\r
704 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
705 );\r
706\r
618e6a1f
MMF
707/**\r
708 This function parses the ACPI HMAT table.\r
709 When trace is enabled this function parses the HMAT table and\r
710 traces the ACPI table fields.\r
711\r
712 This function parses the following HMAT structures:\r
713 - Memory Proximity Domain Attributes Structure (Type 0)\r
714 - System Locality Latency and Bandwidth Info Structure (Type 1)\r
715 - Memory Side Cache Info structure (Type 2)\r
716\r
717 This function also performs validation of the ACPI table fields.\r
718\r
719 @param [in] Trace If TRUE, trace the ACPI fields.\r
720 @param [in] Ptr Pointer to the start of the buffer.\r
721 @param [in] AcpiTableLength Length of the ACPI table.\r
722 @param [in] AcpiTableRevision Revision of the ACPI table.\r
723**/\r
724VOID\r
725EFIAPI\r
726ParseAcpiHmat (\r
47d20b54
MK
727 IN BOOLEAN Trace,\r
728 IN UINT8 *Ptr,\r
729 IN UINT32 AcpiTableLength,\r
730 IN UINT8 AcpiTableRevision\r
618e6a1f
MMF
731 );\r
732\r
a6eaba4d
DB
733/**\r
734 This function parses the ACPI IORT table.\r
ee4dc24f
RN
735 When trace is enabled this function parses the IORT table and\r
736 traces the ACPI fields.\r
737\r
738 This function also parses the following nodes:\r
739 - ITS Group\r
740 - Named Component\r
741 - Root Complex\r
742 - SMMUv1/2\r
743 - SMMUv3\r
744 - PMCG\r
745\r
746 This function also performs validation of the ACPI table fields.\r
747\r
748 @param [in] Trace If TRUE, trace the ACPI fields.\r
749 @param [in] Ptr Pointer to the start of the buffer.\r
750 @param [in] AcpiTableLength Length of the ACPI table.\r
751 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 752**/\r
ee4dc24f
RN
753VOID\r
754EFIAPI\r
755ParseAcpiIort (\r
47d20b54
MK
756 IN BOOLEAN Trace,\r
757 IN UINT8 *Ptr,\r
758 IN UINT32 AcpiTableLength,\r
759 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
760 );\r
761\r
a6eaba4d
DB
762/**\r
763 This function parses the ACPI MADT table.\r
ee4dc24f
RN
764 When trace is enabled this function parses the MADT table and\r
765 traces the ACPI table fields.\r
766\r
767 This function currently parses the following Interrupt Controller\r
768 Structures:\r
769 - GICC\r
770 - GICD\r
771 - GIC MSI Frame\r
772 - GICR\r
773 - GIC ITS\r
774\r
775 This function also performs validation of the ACPI table fields.\r
776\r
777 @param [in] Trace If TRUE, trace the ACPI fields.\r
778 @param [in] Ptr Pointer to the start of the buffer.\r
779 @param [in] AcpiTableLength Length of the ACPI table.\r
780 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 781**/\r
ee4dc24f
RN
782VOID\r
783EFIAPI\r
784ParseAcpiMadt (\r
47d20b54
MK
785 IN BOOLEAN Trace,\r
786 IN UINT8 *Ptr,\r
787 IN UINT32 AcpiTableLength,\r
788 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
789 );\r
790\r
a6eaba4d
DB
791/**\r
792 This function parses the ACPI MCFG table.\r
ee4dc24f
RN
793 When trace is enabled this function parses the MCFG table and\r
794 traces the ACPI table fields.\r
795\r
796 This function also performs validation of the ACPI table fields.\r
797\r
798 @param [in] Trace If TRUE, trace the ACPI fields.\r
799 @param [in] Ptr Pointer to the start of the buffer.\r
800 @param [in] AcpiTableLength Length of the ACPI table.\r
801 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 802**/\r
ee4dc24f
RN
803VOID\r
804EFIAPI\r
805ParseAcpiMcfg (\r
47d20b54
MK
806 IN BOOLEAN Trace,\r
807 IN UINT8 *Ptr,\r
808 IN UINT32 AcpiTableLength,\r
809 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
810 );\r
811\r
d4633b36
MMF
812/**\r
813 This function parses the ACPI PCCT table including its sub-structures\r
814 of type 0 through 4.\r
815 When trace is enabled this function parses the PCCT table and\r
816 traces the ACPI table fields.\r
817\r
818 This function also performs validation of the ACPI table fields.\r
819\r
820 @param [in] Trace If TRUE, trace the ACPI fields.\r
821 @param [in] Ptr Pointer to the start of the buffer.\r
822 @param [in] AcpiTableLength Length of the ACPI table.\r
823 @param [in] AcpiTableRevision Revision of the ACPI table.\r
824**/\r
825VOID\r
826EFIAPI\r
827ParseAcpiPcct (\r
47d20b54
MK
828 IN BOOLEAN Trace,\r
829 IN UINT8 *Ptr,\r
830 IN UINT32 AcpiTableLength,\r
831 IN UINT8 AcpiTableRevision\r
d4633b36
MMF
832 );\r
833\r
d4d2fdf2
KK
834/**\r
835 This function parses the ACPI PPTT table.\r
836 When trace is enabled this function parses the PPTT table and\r
837 traces the ACPI table fields.\r
838\r
839 This function also performs validation of the ACPI table fields.\r
840\r
841 @param [in] Trace If TRUE, trace the ACPI fields.\r
842 @param [in] Ptr Pointer to the start of the buffer.\r
843 @param [in] AcpiTableLength Length of the ACPI table.\r
844 @param [in] AcpiTableRevision Revision of the ACPI table.\r
845**/\r
846VOID\r
847EFIAPI\r
848ParseAcpiPptt (\r
47d20b54
MK
849 IN BOOLEAN Trace,\r
850 IN UINT8 *Ptr,\r
851 IN UINT32 AcpiTableLength,\r
852 IN UINT8 AcpiTableRevision\r
d4d2fdf2
KK
853 );\r
854\r
a6eaba4d
DB
855/**\r
856 This function parses the ACPI RSDP table.\r
ee4dc24f
RN
857\r
858 This function invokes the parser for the XSDT table.\r
859 * Note - This function does not support parsing of RSDT table.\r
860\r
861 This function also performs a RAW dump of the ACPI table and\r
862 validates the checksum.\r
863\r
864 @param [in] Trace If TRUE, trace the ACPI fields.\r
865 @param [in] Ptr Pointer to the start of the buffer.\r
866 @param [in] AcpiTableLength Length of the ACPI table.\r
867 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 868**/\r
ee4dc24f
RN
869VOID\r
870EFIAPI\r
871ParseAcpiRsdp (\r
47d20b54
MK
872 IN BOOLEAN Trace,\r
873 IN UINT8 *Ptr,\r
874 IN UINT32 AcpiTableLength,\r
875 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
876 );\r
877\r
a6eaba4d
DB
878/**\r
879 This function parses the ACPI SLIT table.\r
ee4dc24f
RN
880 When trace is enabled this function parses the SLIT table and\r
881 traces the ACPI table fields.\r
882\r
883 This function also validates System Localities for the following:\r
884 - Diagonal elements have a normalized value of 10\r
885 - Relative distance from System Locality at i*N+j is same as\r
886 j*N+i\r
887\r
888 @param [in] Trace If TRUE, trace the ACPI fields.\r
889 @param [in] Ptr Pointer to the start of the buffer.\r
890 @param [in] AcpiTableLength Length of the ACPI table.\r
891 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 892**/\r
ee4dc24f
RN
893VOID\r
894EFIAPI\r
895ParseAcpiSlit (\r
47d20b54
MK
896 IN BOOLEAN Trace,\r
897 IN UINT8 *Ptr,\r
898 IN UINT32 AcpiTableLength,\r
899 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
900 );\r
901\r
a6eaba4d
DB
902/**\r
903 This function parses the ACPI SPCR table.\r
ee4dc24f
RN
904 When trace is enabled this function parses the SPCR table and\r
905 traces the ACPI table fields.\r
906\r
907 This function also performs validations of the ACPI table fields.\r
908\r
909 @param [in] Trace If TRUE, trace the ACPI fields.\r
910 @param [in] Ptr Pointer to the start of the buffer.\r
911 @param [in] AcpiTableLength Length of the ACPI table.\r
912 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 913**/\r
ee4dc24f
RN
914VOID\r
915EFIAPI\r
916ParseAcpiSpcr (\r
47d20b54
MK
917 IN BOOLEAN Trace,\r
918 IN UINT8 *Ptr,\r
919 IN UINT32 AcpiTableLength,\r
920 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
921 );\r
922\r
a6eaba4d
DB
923/**\r
924 This function parses the ACPI SRAT table.\r
ee4dc24f
RN
925 When trace is enabled this function parses the SRAT table and\r
926 traces the ACPI table fields.\r
927\r
928 This function parses the following Resource Allocation Structures:\r
929 - Processor Local APIC/SAPIC Affinity Structure\r
930 - Memory Affinity Structure\r
931 - Processor Local x2APIC Affinity Structure\r
932 - GICC Affinity Structure\r
933\r
934 This function also performs validation of the ACPI table fields.\r
935\r
936 @param [in] Trace If TRUE, trace the ACPI fields.\r
937 @param [in] Ptr Pointer to the start of the buffer.\r
938 @param [in] AcpiTableLength Length of the ACPI table.\r
939 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 940**/\r
ee4dc24f
RN
941VOID\r
942EFIAPI\r
943ParseAcpiSrat (\r
47d20b54
MK
944 IN BOOLEAN Trace,\r
945 IN UINT8 *Ptr,\r
946 IN UINT32 AcpiTableLength,\r
947 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
948 );\r
949\r
a6eaba4d
DB
950/**\r
951 This function parses the ACPI SSDT table.\r
ee4dc24f
RN
952 When trace is enabled this function parses the SSDT table and\r
953 traces the ACPI table fields.\r
954 For the SSDT table only the ACPI header fields are\r
955 parsed and traced.\r
956\r
957 @param [in] Trace If TRUE, trace the ACPI fields.\r
958 @param [in] Ptr Pointer to the start of the buffer.\r
959 @param [in] AcpiTableLength Length of the ACPI table.\r
960 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 961**/\r
ee4dc24f
RN
962VOID\r
963EFIAPI\r
964ParseAcpiSsdt (\r
47d20b54
MK
965 IN BOOLEAN Trace,\r
966 IN UINT8 *Ptr,\r
967 IN UINT32 AcpiTableLength,\r
968 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
969 );\r
970\r
a6eaba4d
DB
971/**\r
972 This function parses the ACPI XSDT table\r
ee4dc24f
RN
973 and optionally traces the ACPI table fields.\r
974\r
975 This function also performs validation of the XSDT table.\r
976\r
977 @param [in] Trace If TRUE, trace the ACPI fields.\r
978 @param [in] Ptr Pointer to the start of the buffer.\r
979 @param [in] AcpiTableLength Length of the ACPI table.\r
980 @param [in] AcpiTableRevision Revision of the ACPI table.\r
a6eaba4d 981**/\r
ee4dc24f
RN
982VOID\r
983EFIAPI\r
984ParseAcpiXsdt (\r
47d20b54
MK
985 IN BOOLEAN Trace,\r
986 IN UINT8 *Ptr,\r
987 IN UINT32 AcpiTableLength,\r
988 IN UINT8 AcpiTableRevision\r
ee4dc24f
RN
989 );\r
990\r
991#endif // ACPIPARSER_H_\r