]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupport.c
IntelFrameworkModulePkg: Clean up source files
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / Acpi / AcpiSupportDxe / AcpiSupport.c
1 /** @file
2 This is an implementation of the ACPI Support protocol. This is defined in
3 the Tiano ACPI External Product Specification, revision 0.3.6.
4
5 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
6
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions
9 of the BSD License which accompanies this distribution. The
10 full text of the license may be found at
11 http://opensource.org/licenses/bsd-license.php
12
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15
16 **/
17
18 //
19 // Includes
20 //
21 #include "AcpiSupport.h"
22
23 //
24 // Handle to install ACPI Table Protocol (and ACPI Suppport protocol).
25 //
26 EFI_HANDLE mHandle = NULL;
27
28 /**
29 Entry point of the ACPI support driver. This function creates and initializes an instance of the ACPI Support
30 Protocol and installs it on a new handle.
31
32 @param ImageHandle A handle for the image that is initializing this driver
33 @param SystemTable A pointer to the EFI system table
34
35 @retval EFI_SUCCESS Driver initialized successfully
36 @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded
37 @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
38 **/
39 EFI_STATUS
40 EFIAPI
41 InstallAcpiSupport (
42 IN EFI_HANDLE ImageHandle,
43 IN EFI_SYSTEM_TABLE *SystemTable
44 )
45
46 {
47 EFI_STATUS Status;
48 EFI_ACPI_SUPPORT_INSTANCE *PrivateData;
49
50 //
51 // Initialize our protocol
52 //
53 PrivateData = AllocateZeroPool (sizeof (EFI_ACPI_SUPPORT_INSTANCE));
54 ASSERT (PrivateData);
55 PrivateData->Signature = EFI_ACPI_SUPPORT_SIGNATURE;
56
57 //
58 // Call all constructors per produced protocols
59 //
60 Status = AcpiSupportAcpiSupportConstructor (PrivateData);
61 if (EFI_ERROR (Status)) {
62 gBS->FreePool (PrivateData);
63 return EFI_LOAD_ERROR;
64 }
65
66 //
67 // Install ACPI Table protocol and optional ACPI support protocol based on
68 // feature flag: PcdInstallAcpiSupportProtocol.
69 //
70 if (FeaturePcdGet (PcdInstallAcpiSupportProtocol)) {
71 Status = gBS->InstallMultipleProtocolInterfaces (
72 &mHandle,
73 &gEfiAcpiTableProtocolGuid,
74 &PrivateData->AcpiTableProtocol,
75 &gEfiAcpiSupportProtocolGuid,
76 &PrivateData->AcpiSupport,
77 NULL
78 );
79 ASSERT_EFI_ERROR (Status);
80 } else {
81 Status = gBS->InstallMultipleProtocolInterfaces (
82 &mHandle,
83 &gEfiAcpiTableProtocolGuid,
84 &PrivateData->AcpiTableProtocol,
85 NULL
86 );
87 ASSERT_EFI_ERROR (Status);
88 }
89
90 return Status;
91 }