mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 03:03:46 +01:00 
			
		
		
		
	Add support for parsing the ACPI FACS table. The FADT parser has also been updated as it links the FACS table using the FIRMWARE_CTRL or X_FIRMWARE_CTRL fields. Since the FACS table does not follow the standard ACPI header, the FADT parser extracts the FACS signature, length and version fields before invoking the FACS parser. Cc: Ray Ni <ray.ni@intel.com> Cc: Zhichao Gao <zhichao.gao@intel.com> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   FACS table parser
 | |
| 
 | |
|   Copyright (c) 2019, ARM Limited. All rights reserved.
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   @par Reference(s):
 | |
|     - ACPI 6.3 Specification - January 2019
 | |
| **/
 | |
| 
 | |
| #include <IndustryStandard/Acpi.h>
 | |
| #include <Library/UefiLib.h>
 | |
| #include "AcpiParser.h"
 | |
| #include "AcpiTableParser.h"
 | |
| 
 | |
| /**
 | |
|   An ACPI_PARSER array describing the ACPI FACS Table.
 | |
| **/
 | |
| STATIC CONST ACPI_PARSER FacsParser[] = {
 | |
|   {L"Signature", 4, 0, L"%c%c%c%c", Dump4Chars, NULL, NULL, NULL},
 | |
|   {L"Length", 4, 4, L"%d", NULL,  NULL, NULL, NULL},
 | |
|   {L"Hardware Signature", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
 | |
|   {L"Firmware Waking Vector", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
 | |
|   {L"Global Lock", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
 | |
|   {L"Flags", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
 | |
|   {L"X Firmware Walking Vector", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL},
 | |
|   {L"Version", 1, 32, L"%d", NULL, NULL, NULL, NULL},
 | |
|   {L"Reserved", 3, 33, L"%x %x %x", Dump3Chars, NULL, NULL, NULL},
 | |
|   {L"OSPM Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL},
 | |
|   {L"Reserved", 8, 40, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
 | |
|     NULL},
 | |
|   {L"Reserved", 8, 48, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
 | |
|     NULL},
 | |
|   {L"Reserved", 8, 56, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
 | |
|     NULL}
 | |
| };
 | |
| 
 | |
| /**
 | |
|   This function parses the ACPI FACS table.
 | |
|   When trace is enabled this function parses the FACS table and
 | |
|   traces the ACPI table fields.
 | |
| 
 | |
|   This function also performs validation of the ACPI table fields.
 | |
| 
 | |
|   @param [in] Trace              If TRUE, trace the ACPI fields.
 | |
|   @param [in] Ptr                Pointer to the start of the buffer.
 | |
|   @param [in] AcpiTableLength    Length of the ACPI table.
 | |
|   @param [in] AcpiTableRevision  Revision of the ACPI table.
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| ParseAcpiFacs (
 | |
|   IN BOOLEAN Trace,
 | |
|   IN UINT8*  Ptr,
 | |
|   IN UINT32  AcpiTableLength,
 | |
|   IN UINT8   AcpiTableRevision
 | |
|   )
 | |
| {
 | |
|   if (!Trace) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   ParseAcpi (
 | |
|     Trace,
 | |
|     0,
 | |
|     "FACS",
 | |
|     Ptr,
 | |
|     AcpiTableLength,
 | |
|     PARSER_PARAMS (FacsParser)
 | |
|     );
 | |
| }
 |