123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /** @file
- Entry point of OVMF ACPI Platform Driver
- Copyright (C) 2015, Red Hat, Inc.
- Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <Guid/RootBridgesConnectedEventGroup.h>
- #include "AcpiPlatform.h"
- STATIC
- EFI_ACPI_TABLE_PROTOCOL *
- FindAcpiTableProtocol (
- VOID
- )
- {
- EFI_STATUS Status;
- EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
- Status = gBS->LocateProtocol (
- &gEfiAcpiTableProtocolGuid,
- NULL,
- (VOID **)&AcpiTable
- );
- ASSERT_EFI_ERROR (Status);
- return AcpiTable;
- }
- STATIC
- VOID
- EFIAPI
- OnRootBridgesConnected (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
- {
- EFI_STATUS Status;
- DEBUG ((
- DEBUG_INFO,
- "%a: root bridges have been connected, installing ACPI tables\n",
- __FUNCTION__
- ));
- Status = InstallAcpiTables (FindAcpiTableProtocol ());
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_ERROR, "%a: InstallAcpiTables: %r\n", __FUNCTION__, Status));
- }
- gBS->CloseEvent (Event);
- }
- EFI_STATUS
- EFIAPI
- AcpiPlatformEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
- {
- EFI_STATUS Status;
- EFI_EVENT RootBridgesConnected;
- //
- // If the platform doesn't support PCI, or PCI enumeration has been disabled,
- // install the tables at once, and let the entry point's return code reflect
- // the full functionality.
- //
- if (PcdGetBool (PcdPciDisableBusEnumeration)) {
- DEBUG ((
- DEBUG_INFO,
- "%a: PCI or its enumeration disabled, installing "
- "ACPI tables\n",
- __FUNCTION__
- ));
- return InstallAcpiTables (FindAcpiTableProtocol ());
- }
- //
- // Otherwise, delay installing the ACPI tables until root bridges are
- // connected. The entry point's return status will only reflect the callback
- // setup. (Note that we're a DXE_DRIVER; our entry point function is invoked
- // strictly before BDS is entered and can connect the root bridges.)
- //
- Status = gBS->CreateEventEx (
- EVT_NOTIFY_SIGNAL,
- TPL_CALLBACK,
- OnRootBridgesConnected,
- NULL /* Context */,
- &gRootBridgesConnectedEventGroupGuid,
- &RootBridgesConnected
- );
- if (!EFI_ERROR (Status)) {
- DEBUG ((
- DEBUG_INFO,
- "%a: waiting for root bridges to be connected, registered callback\n",
- __FUNCTION__
- ));
- }
- return Status;
- }
|