VirtualBox

Ignore:
Timestamp:
Mar 31, 2025 11:31:09 AM (2 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168237
Message:

Devices/EFI/FirmwareNew: Merge edk2-stable202502 from the vendor branch and make it build for the important platforms, bugref:4643

Location:
trunk/src/VBox/Devices/EFI/FirmwareNew
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/FirmwareNew

  • trunk/src/VBox/Devices/EFI/FirmwareNew/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.c

    r99404 r108794  
    2424#include <SmbiosTableGenerator.h>
    2525
    26 ///
    27 /// Bit definitions for acceptable ACPI table presence formats.
    28 /// Currently only ACPI tables present in the ACPI info list and
    29 /// already installed will count towards "Table Present" during
    30 /// verification routine.
    31 ///
    32 #define ACPI_TABLE_PRESENT_INFO_LIST  BIT0
    33 #define ACPI_TABLE_PRESENT_INSTALLED  BIT1
    34 
    35 ///
    36 /// Order of ACPI table being verified during presence inspection.
    37 ///
    38 #define ACPI_TABLE_VERIFY_FADT   0
    39 #define ACPI_TABLE_VERIFY_MADT   1
    40 #define ACPI_TABLE_VERIFY_GTDT   2
    41 #define ACPI_TABLE_VERIFY_DSDT   3
    42 #define ACPI_TABLE_VERIFY_DBG2   4
    43 #define ACPI_TABLE_VERIFY_SPCR   5
    44 #define ACPI_TABLE_VERIFY_COUNT  6
    45 
    46 ///
    47 /// Private data structure to verify the presence of mandatory
    48 /// or optional ACPI tables.
    49 ///
    50 typedef struct {
    51   /// ESTD ID for the ACPI table of interest.
    52   ESTD_ACPI_TABLE_ID    EstdTableId;
    53   /// Standard UINT32 ACPI signature.
    54   UINT32                AcpiTableSignature;
    55   /// 4 character ACPI table name (the 5th char8 is for null terminator).
    56   CHAR8                 AcpiTableName[sizeof (UINT32) + 1];
    57   /// Indicator on whether the ACPI table is required.
    58   BOOLEAN               IsMandatory;
    59   /// Formats of verified presences, as defined by ACPI_TABLE_PRESENT_*
    60   /// This field should be initialized to 0 and will be populated during
    61   /// verification routine.
    62   UINT16                Presence;
    63 } ACPI_TABLE_PRESENCE_INFO;
     26#include "DynamicTableManagerDxe.h"
    6427
    6528///
     
    6730/// This list also include optional ACPI tables: DBG2, SPCR.
    6831///
    69 ACPI_TABLE_PRESENCE_INFO  mAcpiVerifyTables[ACPI_TABLE_VERIFY_COUNT] = {
    70   { EStdAcpiTableIdFadt, EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,            "FADT", TRUE,  0 },
    71   { EStdAcpiTableIdMadt, EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,         "MADT", TRUE,  0 },
    72   { EStdAcpiTableIdGtdt, EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,         "GTDT", TRUE,  0 },
    73   { EStdAcpiTableIdDsdt, EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, "DSDT", TRUE,  0 },
    74   { EStdAcpiTableIdDbg2, EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE,                      "DBG2", FALSE, 0 },
    75   { EStdAcpiTableIdSpcr, EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,   "SPCR", FALSE, 0 },
    76 };
     32STATIC ACPI_TABLE_PRESENCE_INFO  *mAcpiVerifyTables;
     33STATIC UINT32                    mAcpiVerifyTablesCount;
     34STATIC INT32                     mAcpiVerifyTablesFadtIndex;
    7735
    7836/** This macro expands to a function that retrieves the ACPI Table
     
    473431  // Check against the statically initialized ACPI tables to see if they are in ACPI info list
    474432  while (AcpiTableCount-- != 0) {
    475     for (Index = 0; Index < ACPI_TABLE_VERIFY_COUNT; Index++) {
     433    for (Index = 0; Index < mAcpiVerifyTablesCount; Index++) {
    476434      if (AcpiTableInfo[AcpiTableCount].AcpiTableSignature == mAcpiVerifyTables[Index].AcpiTableSignature) {
    477435        mAcpiVerifyTables[Index].Presence |= ACPI_TABLE_PRESENT_INFO_LIST;
     
    492450    }
    493451
    494     for (Index = 0; Index < ACPI_TABLE_VERIFY_COUNT; Index++) {
     452    for (Index = 0; Index < mAcpiVerifyTablesCount; Index++) {
    495453      Handle              = 0;
    496454      InstalledTableIndex = 0;
     
    512470  // Reset the return Status value to EFI_SUCCESS. We do not fully care if the table look up has failed.
    513471  Status = EFI_SUCCESS;
    514   for (Index = 0; Index < ACPI_TABLE_VERIFY_COUNT; Index++) {
     472  for (Index = 0; Index < mAcpiVerifyTablesCount; Index++) {
    515473    if (mAcpiVerifyTables[Index].Presence == 0) {
    516474      if (mAcpiVerifyTables[Index].IsMandatory) {
     
    624582
    625583  // Add the FADT Table first.
    626   if ((mAcpiVerifyTables[ACPI_TABLE_VERIFY_FADT].Presence & ACPI_TABLE_PRESENT_INSTALLED) == 0) {
     584  if ((mAcpiVerifyTablesFadtIndex >= 0) &&
     585      ((mAcpiVerifyTables[mAcpiVerifyTablesFadtIndex].Presence & ACPI_TABLE_PRESENT_INSTALLED) == 0))
     586  {
    627587    // FADT is not yet installed
    628588    for (Idx = 0; Idx < AcpiTableCount; Idx++) {
     
    786746    ));
    787747
     748  Status = GetAcpiTablePresenceInfo (
     749             &mAcpiVerifyTables,
     750             &mAcpiVerifyTablesCount,
     751             &mAcpiVerifyTablesFadtIndex
     752             );
     753  if (EFI_ERROR (Status)) {
     754    ASSERT_EFI_ERROR (Status);
     755    return Status;
     756  }
     757
    788758  Status = ProcessAcpiTables (TableFactoryProtocol, CfgMgrProtocol);
    789759  if (EFI_ERROR (Status)) {
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette