]>
Commit | Line | Data |
---|---|---|
ee4dc24f RN |
1 | /**\r |
2 | Header file for ACPI parser\r | |
3 | \r | |
4 | Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.\r | |
5 | This program and the accompanying materials\r | |
6 | are licensed and made available under the terms and conditions of the BSD License\r | |
7 | which accompanies this distribution. The full text of the license may be found at\r | |
8 | http://opensource.org/licenses/bsd-license.php\r | |
9 | \r | |
10 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
11 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r | |
12 | **/\r | |
13 | \r | |
14 | #ifndef ACPIPARSER_H_\r | |
15 | #define ACPIPARSER_H_\r | |
16 | \r | |
17 | #define OUTPUT_FIELD_COLUMN_WIDTH 36\r | |
18 | \r | |
19 | /// The RSDP table signature is "RSD PTR " (8 bytes)\r | |
20 | /// However The signature for ACPI tables is 4 bytes.\r | |
21 | /// To work around this oddity define a signature type\r | |
22 | /// that allows us to process the log options.\r | |
23 | #define RSDP_TABLE_INFO SIGNATURE_32('R', 'S', 'D', 'P')\r | |
24 | \r | |
25 | /** This function increments the ACPI table error counter.\r | |
26 | */\r | |
27 | VOID\r | |
28 | EFIAPI\r | |
29 | IncrementErrorCount (\r | |
30 | VOID\r | |
31 | );\r | |
32 | \r | |
33 | /** This function increments the ACPI table warning counter.\r | |
34 | */\r | |
35 | VOID\r | |
36 | EFIAPI\r | |
37 | IncrementWarningCount (\r | |
38 | VOID\r | |
39 | );\r | |
40 | \r | |
41 | /** This function verifies the ACPI table checksum.\r | |
42 | \r | |
43 | This function verifies the checksum for the ACPI table and optionally\r | |
44 | prints the status.\r | |
45 | \r | |
46 | @param [in] Log If TRUE log the status of the checksum.\r | |
47 | @param [in] Ptr Pointer to the start of the table buffer.\r | |
48 | @param [in] Length The length of the buffer.\r | |
49 | \r | |
50 | @retval TRUE The checksum is OK.\r | |
51 | @retval FALSE The checksum failed.\r | |
52 | */\r | |
53 | BOOLEAN\r | |
54 | EFIAPI\r | |
55 | VerifyChecksum (\r | |
56 | IN BOOLEAN Log,\r | |
57 | IN UINT8* Ptr,\r | |
58 | IN UINT32 Length\r | |
59 | );\r | |
60 | \r | |
61 | /** This function performs a raw data dump of the ACPI table.\r | |
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 | |
65 | */\r | |
66 | VOID\r | |
67 | EFIAPI\r | |
68 | DumpRaw (\r | |
69 | IN UINT8* Ptr,\r | |
70 | IN UINT32 Length\r | |
71 | );\r | |
72 | \r | |
73 | /** This function traces 1 byte of datum as specified in the\r | |
74 | format string.\r | |
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 | |
78 | */\r | |
79 | VOID\r | |
80 | EFIAPI\r | |
81 | DumpUint8 (\r | |
82 | IN CONST CHAR16* Format,\r | |
83 | IN UINT8* Ptr\r | |
84 | );\r | |
85 | \r | |
86 | /** This function traces 2 bytes of data as specified in the\r | |
87 | format string.\r | |
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 | |
91 | */\r | |
92 | VOID\r | |
93 | EFIAPI\r | |
94 | DumpUint16 (\r | |
95 | IN CONST CHAR16* Format,\r | |
96 | IN UINT8* Ptr\r | |
97 | );\r | |
98 | \r | |
99 | /** This function traces 4 bytes of data as specified in the\r | |
100 | format string.\r | |
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 | |
104 | */\r | |
105 | VOID\r | |
106 | EFIAPI\r | |
107 | DumpUint32 (\r | |
108 | IN CONST CHAR16* Format,\r | |
109 | IN UINT8* Ptr\r | |
110 | );\r | |
111 | \r | |
112 | /** This function traces 8 bytes of data as specified by the\r | |
113 | format string.\r | |
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 | |
117 | */\r | |
118 | VOID\r | |
119 | EFIAPI\r | |
120 | DumpUint64 (\r | |
121 | IN CONST CHAR16* Format,\r | |
122 | IN UINT8* Ptr\r | |
123 | );\r | |
124 | \r | |
125 | /** This function traces 3 characters which can be optionally\r | |
126 | formated using the format string if specified.\r | |
127 | \r | |
128 | If no format string is specified the Format must be NULL.\r | |
129 | \r | |
130 | @param [in] Format Optional format string for tracing the data.\r | |
131 | @param [in] Ptr Pointer to the start of the buffer.\r | |
132 | */\r | |
133 | VOID\r | |
134 | EFIAPI\r | |
135 | Dump3Chars (\r | |
136 | IN CONST CHAR16* Format OPTIONAL,\r | |
137 | IN UINT8* Ptr\r | |
138 | );\r | |
139 | \r | |
140 | /** This function traces 4 characters which can be optionally\r | |
141 | formated using the format string if specified.\r | |
142 | \r | |
143 | If no format string is specified the Format must be NULL.\r | |
144 | \r | |
145 | @param [in] Format Optional format string for tracing the data.\r | |
146 | @param [in] Ptr Pointer to the start of the buffer.\r | |
147 | */\r | |
148 | VOID\r | |
149 | EFIAPI\r | |
150 | Dump4Chars (\r | |
151 | IN CONST CHAR16* Format OPTIONAL,\r | |
152 | IN UINT8* Ptr\r | |
153 | );\r | |
154 | \r | |
155 | /** This function traces 6 characters which can be optionally\r | |
156 | formated using the format string if specified.\r | |
157 | \r | |
158 | If no format string is specified the Format must be NULL.\r | |
159 | \r | |
160 | @param [in] Format Optional format string for tracing the data.\r | |
161 | @param [in] Ptr Pointer to the start of the buffer.\r | |
162 | */\r | |
163 | VOID\r | |
164 | EFIAPI\r | |
165 | Dump6Chars (\r | |
166 | IN CONST CHAR16* Format OPTIONAL,\r | |
167 | IN UINT8* Ptr\r | |
168 | );\r | |
169 | \r | |
170 | /** This function traces 8 characters which can be optionally\r | |
171 | formated using the format string if specified.\r | |
172 | \r | |
173 | If no format string is specified the Format must be NULL.\r | |
174 | \r | |
175 | @param [in] Format Optional format string for tracing the data.\r | |
176 | @param [in] Ptr Pointer to the start of the buffer.\r | |
177 | */\r | |
178 | VOID\r | |
179 | EFIAPI\r | |
180 | Dump8Chars (\r | |
181 | IN CONST CHAR16* Format OPTIONAL,\r | |
182 | IN UINT8* Ptr\r | |
183 | );\r | |
184 | \r | |
185 | /** This function indents and prints the ACPI table Field Name.\r | |
186 | \r | |
187 | @param [in] Indent Number of spaces to add to the global table\r | |
188 | indent. The global table indent is 0 by default;\r | |
189 | however this value is updated on entry to the\r | |
190 | ParseAcpi() by adding the indent value provided to\r | |
191 | ParseAcpi() and restored back on exit. Therefore\r | |
192 | the total indent in the output is dependent on from\r | |
193 | where this function is called.\r | |
194 | @param [in] FieldName Pointer to the Field Name.\r | |
195 | */\r | |
196 | VOID\r | |
197 | EFIAPI\r | |
198 | PrintFieldName (\r | |
199 | IN UINT32 Indent,\r | |
200 | IN CONST CHAR16* FieldName\r | |
201 | );\r | |
202 | \r | |
203 | /** This function pointer is the template for customizing the trace output\r | |
204 | \r | |
205 | @param [in] Format Format string for tracing the data as specified by\r | |
206 | the 'Format' member of ACPI_PARSER.\r | |
207 | @param [in] Ptr Pointer to the start of the buffer.\r | |
208 | */\r | |
209 | typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16* Format, UINT8* Ptr);\r | |
210 | \r | |
211 | /** This function pointer is the template for validating an ACPI table field.\r | |
212 | \r | |
213 | @param [in] Ptr Pointer to the start of the field data.\r | |
214 | @param [in] Context Pointer to context specific information as specified by\r | |
215 | the 'Context' member of the ACPI_PARSER.\r | |
216 | e.g. this could be a pointer to the ACPI table header.\r | |
217 | */\r | |
218 | typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8* Ptr, VOID* Context);\r | |
219 | \r | |
220 | /** The ACPI_PARSER structure describes the fields of an ACPI table and\r | |
221 | provides means for the parser to interpret and trace appropriately.\r | |
222 | \r | |
223 | The first three members are populated based on information present in\r | |
224 | in the ACPI table specifications. The remaining members describe how\r | |
225 | the parser should report the field information, validate the field data\r | |
226 | and/or update an external pointer to the field (ItemPtr).\r | |
227 | \r | |
228 | ParseAcpi() uses the format string specified by 'Format' for tracing\r | |
229 | the field data. If the field is more complex and requires additional\r | |
230 | processing for formatting and representation a print formatter function\r | |
231 | can be specified in 'PrintFormatter'.\r | |
232 | The PrintFormatter function may choose to use the format string\r | |
233 | specified by 'Format' or use its own internal format string.\r | |
234 | \r | |
235 | The 'Format' and 'PrintFormatter' members allow flexibility for\r | |
236 | representing the field data.\r | |
237 | */\r | |
238 | typedef struct AcpiParser {\r | |
239 | \r | |
240 | /// String describing the ACPI table field\r | |
241 | /// (Field column from ACPI table spec)\r | |
242 | CONST CHAR16* NameStr;\r | |
243 | \r | |
244 | /// The length of the field.\r | |
245 | /// (Byte Length column from ACPI table spec)\r | |
246 | UINT32 Length;\r | |
247 | \r | |
248 | /// The offset of the field from the start of the table.\r | |
249 | /// (Byte Offset column from ACPI table spec)\r | |
250 | UINT32 Offset;\r | |
251 | \r | |
252 | /// Optional Print() style format string for tracing the data. If not\r | |
253 | /// used this must be set to NULL.\r | |
254 | CONST CHAR16* Format;\r | |
255 | \r | |
256 | /// Optional pointer to a print formatter function which\r | |
257 | /// is typically used to trace complex field information.\r | |
258 | /// If not used this must be set to NULL.\r | |
259 | /// The Format string is passed to the PrintFormatter function\r | |
260 | /// but may be ignored by the implementation code.\r | |
261 | FNPTR_PRINT_FORMATTER PrintFormatter;\r | |
262 | \r | |
263 | /// Optional pointer which may be set to request the parser to update\r | |
264 | /// a pointer to the field data. If unused this must be set to NULL.\r | |
265 | VOID** ItemPtr;\r | |
266 | \r | |
267 | /// Optional pointer to a field validator function.\r | |
268 | /// The function should directly report any appropriate error or warning\r | |
269 | /// and invoke the appropriate counter update function.\r | |
270 | /// If not used this parameter must be set to NULL.\r | |
271 | FNPTR_FIELD_VALIDATOR FieldValidator;\r | |
272 | \r | |
273 | /// Optional pointer to context specific information,\r | |
274 | /// which the Field Validator function can use to determine\r | |
275 | /// additional information about the ACPI table and make\r | |
276 | /// decisions about the field being validated.\r | |
277 | /// e.g. this could be a pointer to the ACPI table header\r | |
278 | VOID* Context;\r | |
279 | } ACPI_PARSER;\r | |
280 | \r | |
281 | /** A structure used to store the pointers to the members of the\r | |
282 | ACPI description header structure that was parsed.\r | |
283 | */\r | |
284 | typedef struct AcpiDescriptionHeaderInfo {\r | |
285 | /// ACPI table signature\r | |
286 | UINT32* Signature;\r | |
287 | /// Length of the ACPI table\r | |
288 | UINT32* Length;\r | |
289 | /// Revision\r | |
290 | UINT8* Revision;\r | |
291 | /// Checksum\r | |
292 | UINT8* Checksum;\r | |
293 | /// OEM Id - length is 6 bytes\r | |
294 | UINT8* OemId;\r | |
295 | /// OEM table Id\r | |
296 | UINT64* OemTableId;\r | |
297 | /// OEM revision Id\r | |
298 | UINT32* OemRevision;\r | |
299 | /// Creator Id\r | |
300 | UINT32* CreatorId;\r | |
301 | /// Creator revision\r | |
302 | UINT32* CreatorRevision;\r | |
303 | } ACPI_DESCRIPTION_HEADER_INFO;\r | |
304 | \r | |
305 | /** This function is used to parse an ACPI table buffer.\r | |
306 | \r | |
307 | The ACPI table buffer is parsed using the ACPI table parser information\r | |
308 | specified by a pointer to an array of ACPI_PARSER elements. This parser\r | |
309 | function iterates through each item on the ACPI_PARSER array and logs the\r | |
310 | ACPI table fields.\r | |
311 | \r | |
312 | This function can optionally be used to parse ACPI tables and fetch specific\r | |
313 | field values. The ItemPtr member of the ACPI_PARSER structure (where used)\r | |
314 | is updated by this parser function to point to the selected field data\r | |
315 | (e.g. useful for variable length nested fields).\r | |
316 | \r | |
317 | @param [in] Trace Trace the ACPI fields TRUE else only parse the\r | |
318 | table.\r | |
319 | @param [in] Indent Number of spaces to indent the output.\r | |
320 | @param [in] AsciiName Optional pointer to an ASCII string that describes\r | |
321 | the table being parsed.\r | |
322 | @param [in] Ptr Pointer to the start of the buffer.\r | |
323 | @param [in] Length Length of the buffer pointed by Ptr.\r | |
324 | @param [in] Parser Pointer to an array of ACPI_PARSER structure that\r | |
325 | describes the table being parsed.\r | |
326 | @param [in] ParserItems Number of items in the ACPI_PARSER array.\r | |
327 | \r | |
328 | @retval Number of bytes parsed.\r | |
329 | */\r | |
330 | UINT32\r | |
331 | EFIAPI\r | |
332 | ParseAcpi (\r | |
333 | IN BOOLEAN Trace,\r | |
334 | IN UINT32 Indent,\r | |
335 | IN CONST CHAR8* AsciiName OPTIONAL,\r | |
336 | IN UINT8* Ptr,\r | |
337 | IN UINT32 Length,\r | |
338 | IN CONST ACPI_PARSER* Parser,\r | |
339 | IN UINT32 ParserItems\r | |
340 | );\r | |
341 | \r | |
342 | /** This is a helper macro to pass parameters to the Parser functions.\r | |
343 | \r | |
344 | @param [in] Parser The name of the ACPI_PARSER array describing the\r | |
345 | ACPI table fields.\r | |
346 | */\r | |
347 | #define PARSER_PARAMS(Parser) Parser, sizeof (Parser) / sizeof (Parser[0])\r | |
348 | \r | |
349 | /** This is a helper macro for describing the ACPI header fields.\r | |
350 | \r | |
351 | @param [out] Info Pointer to retrieve the ACPI table header information.\r | |
352 | */\r | |
353 | #define PARSE_ACPI_HEADER(Info) \\r | |
354 | { L"Signature", 4, 0, NULL, Dump4Chars, \\r | |
355 | (VOID**)&(Info)->Signature , NULL, NULL }, \\r | |
356 | { L"Length", 4, 4, L"%d", NULL, \\r | |
357 | (VOID**)&(Info)->Length, NULL, NULL }, \\r | |
358 | { L"Revision", 1, 8, L"%d", NULL, \\r | |
359 | (VOID**)&(Info)->Revision, NULL, NULL }, \\r | |
360 | { L"Checksum", 1, 9, L"0x%X", NULL, \\r | |
361 | (VOID**)&(Info)->Checksum, NULL, NULL }, \\r | |
362 | { L"Oem ID", 6, 10, NULL, Dump6Chars, \\r | |
363 | (VOID**)&(Info)->OemId, NULL, NULL }, \\r | |
364 | { L"Oem Table ID", 8, 16, NULL, Dump8Chars, \\r | |
365 | (VOID**)&(Info)->OemTableId, NULL, NULL }, \\r | |
366 | { L"Oem Revision", 4, 24, L"0x%X", NULL, \\r | |
367 | (VOID**)&(Info)->OemRevision, NULL, NULL }, \\r | |
368 | { L"Creator ID", 4, 28, NULL, Dump4Chars, \\r | |
369 | (VOID**)&(Info)->CreatorId, NULL, NULL }, \\r | |
370 | { L"Creator Revision", 4, 32, L"0x%X", NULL, \\r | |
371 | (VOID**)&(Info)->CreatorRevision, NULL, NULL }\r | |
372 | \r | |
373 | /** Length of the ACPI GAS structure.\r | |
374 | \r | |
375 | NOTE: This might normally be defined as\r | |
376 | sizeof (EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE).\r | |
377 | However, we deliberately minimise any reference to the EDK2 ACPI\r | |
378 | headers in an attempt to provide cross checking.\r | |
379 | */\r | |
380 | #define GAS_LENGTH 12\r | |
381 | \r | |
382 | /** Length of the ACPI Header structure.\r | |
383 | \r | |
384 | NOTE: This might normally be defined as\r | |
385 | sizeof (EFI_ACPI_DESCRIPTION_HEADER).\r | |
386 | However, we deliberately minimise any reference to the EDK2 ACPI\r | |
387 | headers in an attempt to provide cross checking.\r | |
388 | */\r | |
389 | #define ACPI_DESCRIPTION_HEADER_LENGTH 36\r | |
390 | \r | |
391 | /** This function indents and traces the GAS structure as described\r | |
392 | by the GasParser.\r | |
393 | \r | |
394 | @param [in] Ptr Pointer to the start of the buffer.\r | |
395 | @param [in] Indent Number of spaces to indent the output.\r | |
396 | */\r | |
397 | VOID\r | |
398 | EFIAPI\r | |
399 | DumpGasStruct (\r | |
400 | IN UINT8* Ptr,\r | |
401 | IN UINT32 Indent\r | |
402 | );\r | |
403 | \r | |
404 | /** This function traces the GAS structure as described by the GasParser.\r | |
405 | \r | |
406 | @param [in] Format Optional format string for tracing the data.\r | |
407 | @param [in] Ptr Pointer to the start of the buffer.\r | |
408 | */\r | |
409 | VOID\r | |
410 | EFIAPI\r | |
411 | DumpGas (\r | |
412 | IN CONST CHAR16* Format OPTIONAL,\r | |
413 | IN UINT8* Ptr\r | |
414 | );\r | |
415 | \r | |
416 | /** This function traces the ACPI header as described by the AcpiHeaderParser.\r | |
417 | \r | |
418 | @param [in] Ptr Pointer to the start of the buffer.\r | |
419 | \r | |
420 | @retval Number of bytes parsed.\r | |
421 | */\r | |
422 | UINT32\r | |
423 | EFIAPI\r | |
424 | DumpAcpiHeader (\r | |
425 | IN UINT8* Ptr\r | |
426 | );\r | |
427 | \r | |
428 | /** This function parses the ACPI header as described by the AcpiHeaderParser.\r | |
429 | \r | |
430 | This function optionally returns the Signature, Length and revision of the\r | |
431 | ACPI table.\r | |
432 | \r | |
433 | @param [in] Ptr Pointer to the start of the buffer.\r | |
434 | @param [out] Signature Gets location of the ACPI table signature.\r | |
435 | @param [out] Length Gets location of the length of the ACPI table.\r | |
436 | @param [out] Revision Gets location of the revision of the ACPI table.\r | |
437 | \r | |
438 | @retval Number of bytes parsed.\r | |
439 | */\r | |
440 | UINT32\r | |
441 | EFIAPI\r | |
442 | ParseAcpiHeader (\r | |
443 | IN UINT8* Ptr,\r | |
444 | OUT CONST UINT32** Signature,\r | |
445 | OUT CONST UINT32** Length,\r | |
446 | OUT CONST UINT8** Revision\r | |
447 | );\r | |
448 | \r | |
449 | /** This function parses the ACPI BGRT table.\r | |
450 | When trace is enabled this function parses the BGRT table and\r | |
451 | traces the ACPI table fields.\r | |
452 | \r | |
453 | This function also performs validation of the ACPI table fields.\r | |
454 | \r | |
455 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
456 | @param [in] Ptr Pointer to the start of the buffer.\r | |
457 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
458 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
459 | */\r | |
460 | VOID\r | |
461 | EFIAPI\r | |
462 | ParseAcpiBgrt (\r | |
463 | IN BOOLEAN Trace,\r | |
464 | IN UINT8* Ptr,\r | |
465 | IN UINT32 AcpiTableLength,\r | |
466 | IN UINT8 AcpiTableRevision\r | |
467 | );\r | |
468 | \r | |
469 | /** This function parses the ACPI DBG2 table.\r | |
470 | When trace is enabled this function parses the DBG2 table and\r | |
471 | traces the ACPI table fields.\r | |
472 | \r | |
473 | This function also performs validation of the ACPI table fields.\r | |
474 | \r | |
475 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
476 | @param [in] Ptr Pointer to the start of the buffer.\r | |
477 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
478 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
479 | */\r | |
480 | VOID\r | |
481 | EFIAPI\r | |
482 | ParseAcpiDbg2 (\r | |
483 | IN BOOLEAN Trace,\r | |
484 | IN UINT8* Ptr,\r | |
485 | IN UINT32 AcpiTableLength,\r | |
486 | IN UINT8 AcpiTableRevision\r | |
487 | );\r | |
488 | \r | |
489 | /** This function parses the ACPI DSDT table.\r | |
490 | When trace is enabled this function parses the DSDT table and\r | |
491 | traces the ACPI table fields.\r | |
492 | For the DSDT table only the ACPI header fields are parsed and\r | |
493 | traced.\r | |
494 | \r | |
495 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
496 | @param [in] Ptr Pointer to the start of the buffer.\r | |
497 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
498 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
499 | */\r | |
500 | VOID\r | |
501 | EFIAPI\r | |
502 | ParseAcpiDsdt (\r | |
503 | IN BOOLEAN Trace,\r | |
504 | IN UINT8* Ptr,\r | |
505 | IN UINT32 AcpiTableLength,\r | |
506 | IN UINT8 AcpiTableRevision\r | |
507 | );\r | |
508 | \r | |
509 | /** This function parses the ACPI FADT table.\r | |
510 | This function parses the FADT table and optionally traces the ACPI\r | |
511 | table fields.\r | |
512 | \r | |
513 | This function also performs validation of the ACPI table fields.\r | |
514 | \r | |
515 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
516 | @param [in] Ptr Pointer to the start of the buffer.\r | |
517 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
518 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
519 | */\r | |
520 | VOID\r | |
521 | EFIAPI\r | |
522 | ParseAcpiFadt (\r | |
523 | IN BOOLEAN Trace,\r | |
524 | IN UINT8* Ptr,\r | |
525 | IN UINT32 AcpiTableLength,\r | |
526 | IN UINT8 AcpiTableRevision\r | |
527 | );\r | |
528 | \r | |
529 | /** This function parses the ACPI GTDT table.\r | |
530 | When trace is enabled this function parses the GTDT table and\r | |
531 | traces the ACPI table fields.\r | |
532 | \r | |
533 | This function also parses the following platform timer structures:\r | |
534 | - GT Block timer\r | |
535 | - Watchdog timer\r | |
536 | \r | |
537 | This function also performs validation of the ACPI table fields.\r | |
538 | \r | |
539 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
540 | @param [in] Ptr Pointer to the start of the buffer.\r | |
541 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
542 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
543 | */\r | |
544 | VOID\r | |
545 | EFIAPI\r | |
546 | ParseAcpiGtdt (\r | |
547 | IN BOOLEAN Trace,\r | |
548 | IN UINT8* Ptr,\r | |
549 | IN UINT32 AcpiTableLength,\r | |
550 | IN UINT8 AcpiTableRevision\r | |
551 | );\r | |
552 | \r | |
553 | /** This function parses the ACPI IORT table.\r | |
554 | When trace is enabled this function parses the IORT table and\r | |
555 | traces the ACPI fields.\r | |
556 | \r | |
557 | This function also parses the following nodes:\r | |
558 | - ITS Group\r | |
559 | - Named Component\r | |
560 | - Root Complex\r | |
561 | - SMMUv1/2\r | |
562 | - SMMUv3\r | |
563 | - PMCG\r | |
564 | \r | |
565 | This function also performs validation of the ACPI table fields.\r | |
566 | \r | |
567 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
568 | @param [in] Ptr Pointer to the start of the buffer.\r | |
569 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
570 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
571 | */\r | |
572 | VOID\r | |
573 | EFIAPI\r | |
574 | ParseAcpiIort (\r | |
575 | IN BOOLEAN Trace,\r | |
576 | IN UINT8* Ptr,\r | |
577 | IN UINT32 AcpiTableLength,\r | |
578 | IN UINT8 AcpiTableRevision\r | |
579 | );\r | |
580 | \r | |
581 | /** This function parses the ACPI MADT table.\r | |
582 | When trace is enabled this function parses the MADT table and\r | |
583 | traces the ACPI table fields.\r | |
584 | \r | |
585 | This function currently parses the following Interrupt Controller\r | |
586 | Structures:\r | |
587 | - GICC\r | |
588 | - GICD\r | |
589 | - GIC MSI Frame\r | |
590 | - GICR\r | |
591 | - GIC ITS\r | |
592 | \r | |
593 | This function also performs validation of the ACPI table fields.\r | |
594 | \r | |
595 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
596 | @param [in] Ptr Pointer to the start of the buffer.\r | |
597 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
598 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
599 | */\r | |
600 | VOID\r | |
601 | EFIAPI\r | |
602 | ParseAcpiMadt (\r | |
603 | IN BOOLEAN Trace,\r | |
604 | IN UINT8* Ptr,\r | |
605 | IN UINT32 AcpiTableLength,\r | |
606 | IN UINT8 AcpiTableRevision\r | |
607 | );\r | |
608 | \r | |
609 | /** This function parses the ACPI MCFG table.\r | |
610 | When trace is enabled this function parses the MCFG table and\r | |
611 | traces the ACPI table fields.\r | |
612 | \r | |
613 | This function also performs validation of the ACPI table fields.\r | |
614 | \r | |
615 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
616 | @param [in] Ptr Pointer to the start of the buffer.\r | |
617 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
618 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
619 | */\r | |
620 | VOID\r | |
621 | EFIAPI\r | |
622 | ParseAcpiMcfg (\r | |
623 | IN BOOLEAN Trace,\r | |
624 | IN UINT8* Ptr,\r | |
625 | IN UINT32 AcpiTableLength,\r | |
626 | IN UINT8 AcpiTableRevision\r | |
627 | );\r | |
628 | \r | |
629 | /** This function parses the ACPI RSDP table.\r | |
630 | \r | |
631 | This function invokes the parser for the XSDT table.\r | |
632 | * Note - This function does not support parsing of RSDT table.\r | |
633 | \r | |
634 | This function also performs a RAW dump of the ACPI table and\r | |
635 | validates the checksum.\r | |
636 | \r | |
637 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
638 | @param [in] Ptr Pointer to the start of the buffer.\r | |
639 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
640 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
641 | */\r | |
642 | VOID\r | |
643 | EFIAPI\r | |
644 | ParseAcpiRsdp (\r | |
645 | IN BOOLEAN Trace,\r | |
646 | IN UINT8* Ptr,\r | |
647 | IN UINT32 AcpiTableLength,\r | |
648 | IN UINT8 AcpiTableRevision\r | |
649 | );\r | |
650 | \r | |
651 | /** This function parses the ACPI SLIT table.\r | |
652 | When trace is enabled this function parses the SLIT table and\r | |
653 | traces the ACPI table fields.\r | |
654 | \r | |
655 | This function also validates System Localities for the following:\r | |
656 | - Diagonal elements have a normalized value of 10\r | |
657 | - Relative distance from System Locality at i*N+j is same as\r | |
658 | j*N+i\r | |
659 | \r | |
660 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
661 | @param [in] Ptr Pointer to the start of the buffer.\r | |
662 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
663 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
664 | */\r | |
665 | VOID\r | |
666 | EFIAPI\r | |
667 | ParseAcpiSlit (\r | |
668 | IN BOOLEAN Trace,\r | |
669 | IN UINT8* Ptr,\r | |
670 | IN UINT32 AcpiTableLength,\r | |
671 | IN UINT8 AcpiTableRevision\r | |
672 | );\r | |
673 | \r | |
674 | /** This function parses the ACPI SPCR table.\r | |
675 | When trace is enabled this function parses the SPCR table and\r | |
676 | traces the ACPI table fields.\r | |
677 | \r | |
678 | This function also performs validations of the ACPI table fields.\r | |
679 | \r | |
680 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
681 | @param [in] Ptr Pointer to the start of the buffer.\r | |
682 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
683 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
684 | */\r | |
685 | VOID\r | |
686 | EFIAPI\r | |
687 | ParseAcpiSpcr (\r | |
688 | IN BOOLEAN Trace,\r | |
689 | IN UINT8* Ptr,\r | |
690 | IN UINT32 AcpiTableLength,\r | |
691 | IN UINT8 AcpiTableRevision\r | |
692 | );\r | |
693 | \r | |
694 | /** This function parses the ACPI SRAT table.\r | |
695 | When trace is enabled this function parses the SRAT table and\r | |
696 | traces the ACPI table fields.\r | |
697 | \r | |
698 | This function parses the following Resource Allocation Structures:\r | |
699 | - Processor Local APIC/SAPIC Affinity Structure\r | |
700 | - Memory Affinity Structure\r | |
701 | - Processor Local x2APIC Affinity Structure\r | |
702 | - GICC Affinity Structure\r | |
703 | \r | |
704 | This function also performs validation of the ACPI table fields.\r | |
705 | \r | |
706 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
707 | @param [in] Ptr Pointer to the start of the buffer.\r | |
708 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
709 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
710 | */\r | |
711 | VOID\r | |
712 | EFIAPI\r | |
713 | ParseAcpiSrat (\r | |
714 | IN BOOLEAN Trace,\r | |
715 | IN UINT8* Ptr,\r | |
716 | IN UINT32 AcpiTableLength,\r | |
717 | IN UINT8 AcpiTableRevision\r | |
718 | );\r | |
719 | \r | |
720 | /** This function parses the ACPI SSDT table.\r | |
721 | When trace is enabled this function parses the SSDT table and\r | |
722 | traces the ACPI table fields.\r | |
723 | For the SSDT table only the ACPI header fields are\r | |
724 | parsed and traced.\r | |
725 | \r | |
726 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
727 | @param [in] Ptr Pointer to the start of the buffer.\r | |
728 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
729 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
730 | */\r | |
731 | VOID\r | |
732 | EFIAPI\r | |
733 | ParseAcpiSsdt (\r | |
734 | IN BOOLEAN Trace,\r | |
735 | IN UINT8* Ptr,\r | |
736 | IN UINT32 AcpiTableLength,\r | |
737 | IN UINT8 AcpiTableRevision\r | |
738 | );\r | |
739 | \r | |
740 | /** This function parses the ACPI XSDT table\r | |
741 | and optionally traces the ACPI table fields.\r | |
742 | \r | |
743 | This function also performs validation of the XSDT table.\r | |
744 | \r | |
745 | @param [in] Trace If TRUE, trace the ACPI fields.\r | |
746 | @param [in] Ptr Pointer to the start of the buffer.\r | |
747 | @param [in] AcpiTableLength Length of the ACPI table.\r | |
748 | @param [in] AcpiTableRevision Revision of the ACPI table.\r | |
749 | */\r | |
750 | VOID\r | |
751 | EFIAPI\r | |
752 | ParseAcpiXsdt (\r | |
753 | IN BOOLEAN Trace,\r | |
754 | IN UINT8* Ptr,\r | |
755 | IN UINT32 AcpiTableLength,\r | |
756 | IN UINT8 AcpiTableRevision\r | |
757 | );\r | |
758 | \r | |
759 | #endif // ACPIPARSER_H_\r |