REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the ShellPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			224 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Arm Server Base Boot Requirements ACPI table requirement validator.
 | 
						|
 | 
						|
  Copyright (c) 2020, ARM Limited. All rights reserved.
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
  @par Glossary:
 | 
						|
    - Sbbr or SBBR   - Server Base Boot Requirements
 | 
						|
    - Sbsa or SBSA   - Server Base System Architecture
 | 
						|
 | 
						|
  @par Reference(s):
 | 
						|
    - Arm Server Base Boot Requirements 1.2, September 2019
 | 
						|
    - Arm Server Base Boot Requirements 1.1, May 2018
 | 
						|
    - Arm Server Base Boot Requirements 1.0, March 2016
 | 
						|
    - Arm Server Base System Architecture 6.0
 | 
						|
**/
 | 
						|
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include "AcpiParser.h"
 | 
						|
#include "Arm/SbbrValidator.h"
 | 
						|
 | 
						|
/**
 | 
						|
  SBBR specification version strings
 | 
						|
**/
 | 
						|
STATIC CONST CHAR8  *ArmSbbrVersions[ArmSbbrVersionMax] = {
 | 
						|
  "1.0",     // ArmSbbrVersion_1_0
 | 
						|
  "1.1",     // ArmSbbrVersion_1_1
 | 
						|
  "1.2"      // ArmSbbrVersion_1_2
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  SBBR 1.0 mandatory ACPI tables
 | 
						|
**/
 | 
						|
STATIC CONST UINT32  ArmSbbr10Mandatory[] = {
 | 
						|
  EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  SBBR 1.1 mandatory ACPI tables
 | 
						|
**/
 | 
						|
STATIC CONST UINT32  ArmSbbr11Mandatory[] = {
 | 
						|
  EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  SBBR 1.2 mandatory ACPI tables
 | 
						|
**/
 | 
						|
STATIC CONST UINT32  ArmSbbr12Mandatory[] = {
 | 
						|
  EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
 | 
						|
  EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  Mandatory ACPI tables for every SBBR specification version.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_SBBR_REQ  ArmSbbrReqs[ArmSbbrVersionMax] = {
 | 
						|
  { ArmSbbr10Mandatory, ARRAY_SIZE (ArmSbbr10Mandatory) },    // SBBR v1.0
 | 
						|
  { ArmSbbr11Mandatory, ARRAY_SIZE (ArmSbbr11Mandatory) },    // SBBR v1.1
 | 
						|
  { ArmSbbr12Mandatory, ARRAY_SIZE (ArmSbbr12Mandatory) }     // SBBR v1.2
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  Data structure to track instance counts for all ACPI tables which are
 | 
						|
  defined as 'mandatory' in any SBBR version.
 | 
						|
**/
 | 
						|
STATIC ACPI_TABLE_COUNTER  ArmSbbrTableCounts[] = {
 | 
						|
  { EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,                                            0 },
 | 
						|
  { EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,                                                 0 },
 | 
						|
  { EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,                                      0 },
 | 
						|
  { EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,                                              0 },
 | 
						|
  { EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,                                              0 },
 | 
						|
  { EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,                                                           0 },
 | 
						|
  { EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,                                        0 },
 | 
						|
  { EFI_ACPI_6_3_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, 0 },
 | 
						|
  { EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,                                0 }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  Reset the platform ACPI table instance count for all SBBR-mandatory tables.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmSbbrResetTableCounts (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32  Table;
 | 
						|
 | 
						|
  for (Table = 0; Table < ARRAY_SIZE (ArmSbbrTableCounts); Table++) {
 | 
						|
    ArmSbbrTableCounts[Table].Count = 0;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Increment instance count for SBBR-mandatory ACPI table with the given
 | 
						|
  signature.
 | 
						|
 | 
						|
  @param [in]  Signature        ACPI table signature.
 | 
						|
 | 
						|
  @retval TRUE      Count incremented successfully.
 | 
						|
  @retval FALSE     Table with the input signature not found.
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
ArmSbbrIncrementTableCount (
 | 
						|
  UINT32  Signature
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32  Table;
 | 
						|
 | 
						|
  for (Table = 0; Table < ARRAY_SIZE (ArmSbbrTableCounts); Table++) {
 | 
						|
    if (Signature == ArmSbbrTableCounts[Table].Signature) {
 | 
						|
      ArmSbbrTableCounts[Table].Count++;
 | 
						|
      return TRUE;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Validate that all ACPI tables required by the given SBBR specification
 | 
						|
  version are installed on the platform.
 | 
						|
 | 
						|
  @param [in]  Version      SBBR spec version to validate against.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             All required tables are present.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid SBBR version.
 | 
						|
  @retval EFI_NOT_FOUND           One or more mandatory tables are missing.
 | 
						|
  @retval EFI_UNSUPPORTED         Mandatory ACPI table does not have its
 | 
						|
                                  instance count tracked.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
ArmSbbrReqsValidate (
 | 
						|
  ARM_SBBR_VERSION  Version
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32       Table;
 | 
						|
  UINT32       Index;
 | 
						|
  UINT32       MandatoryTable;
 | 
						|
  CONST UINT8  *SignaturePtr;
 | 
						|
  BOOLEAN      IsArmSbbrViolated;
 | 
						|
 | 
						|
  if (Version >= ArmSbbrVersionMax) {
 | 
						|
    return EFI_INVALID_PARAMETER;
 | 
						|
  }
 | 
						|
 | 
						|
  IsArmSbbrViolated = FALSE;
 | 
						|
 | 
						|
  // Go through the list of mandatory tables for the input SBBR version
 | 
						|
  for (Table = 0; Table < ArmSbbrReqs[Version].TableCount; Table++) {
 | 
						|
    MandatoryTable = ArmSbbrReqs[Version].Tables[Table];
 | 
						|
    SignaturePtr   = (CONST UINT8 *)(UINTN)&MandatoryTable;
 | 
						|
 | 
						|
    // Locate the instance count for the table with the given signature
 | 
						|
    Index = 0;
 | 
						|
    while ((Index < ARRAY_SIZE (ArmSbbrTableCounts)) &&
 | 
						|
           (ArmSbbrTableCounts[Index].Signature != MandatoryTable))
 | 
						|
    {
 | 
						|
      Index++;
 | 
						|
    }
 | 
						|
 | 
						|
    if (Index >= ARRAY_SIZE (ArmSbbrTableCounts)) {
 | 
						|
      IncrementErrorCount ();
 | 
						|
      Print (
 | 
						|
        L"\nERROR: SBBR v%a: Mandatory %c%c%c%c table's instance count not " \
 | 
						|
        L"found\n",
 | 
						|
        ArmSbbrVersions[Version],
 | 
						|
        SignaturePtr[0],
 | 
						|
        SignaturePtr[1],
 | 
						|
        SignaturePtr[2],
 | 
						|
        SignaturePtr[3]
 | 
						|
        );
 | 
						|
      return EFI_UNSUPPORTED;
 | 
						|
    }
 | 
						|
 | 
						|
    if (ArmSbbrTableCounts[Index].Count == 0) {
 | 
						|
      IsArmSbbrViolated = TRUE;
 | 
						|
      IncrementErrorCount ();
 | 
						|
      Print (
 | 
						|
        L"\nERROR: SBBR v%a: Mandatory %c%c%c%c table is missing",
 | 
						|
        ArmSbbrVersions[Version],
 | 
						|
        SignaturePtr[0],
 | 
						|
        SignaturePtr[1],
 | 
						|
        SignaturePtr[2],
 | 
						|
        SignaturePtr[3]
 | 
						|
        );
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (!IsArmSbbrViolated) {
 | 
						|
    Print (
 | 
						|
      L"\nINFO: SBBR v%a: All mandatory ACPI tables are installed",
 | 
						|
      ArmSbbrVersions[Version]
 | 
						|
      );
 | 
						|
  }
 | 
						|
 | 
						|
  Print (L"\n");
 | 
						|
 | 
						|
  return IsArmSbbrViolated ? EFI_NOT_FOUND : EFI_SUCCESS;
 | 
						|
}
 |