/** @file\r
Sample ACPI Platform Driver\r
\r
- Copyright (c) 2008 - 2009, Intel Corporation<BR>\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
+ Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/ \r
+**/\r
\r
#include <PiDxe.h>\r
\r
FV protocol, then it will return the first FV that contains the ACPI table\r
storage file.\r
\r
- @param Protocol The protocol to find.\r
@param Instance Return pointer to the first instance of the protocol\r
\r
@return EFI_SUCCESS The function completed successfully.\r
**/\r
EFI_STATUS\r
LocateFvInstanceWithTables (\r
- OUT EFI_FIRMWARE_VOLUME2_PROTOCOL **Instance\r
+ OUT EFI_FIRMWARE_VOLUME2_PROTOCOL **Instance\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HANDLE *HandleBuffer;\r
- UINTN NumberOfHandles;\r
- EFI_FV_FILETYPE FileType;\r
- UINT32 FvStatus;\r
- EFI_FV_FILE_ATTRIBUTES Attributes;\r
- UINTN Size;\r
- UINTN Index;\r
- EFI_FIRMWARE_VOLUME2_PROTOCOL *FvInstance;\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE *HandleBuffer;\r
+ UINTN NumberOfHandles;\r
+ EFI_FV_FILETYPE FileType;\r
+ UINT32 FvStatus;\r
+ EFI_FV_FILE_ATTRIBUTES Attributes;\r
+ UINTN Size;\r
+ UINTN Index;\r
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FvInstance;\r
\r
FvStatus = 0;\r
\r
// Locate protocol.\r
//\r
Status = gBS->LocateHandleBuffer (\r
- ByProtocol,\r
- &gEfiFirmwareVolume2ProtocolGuid,\r
- NULL,\r
- &NumberOfHandles,\r
- &HandleBuffer\r
- );\r
+ ByProtocol,\r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ NULL,\r
+ &NumberOfHandles,\r
+ &HandleBuffer\r
+ );\r
if (EFI_ERROR (Status)) {\r
//\r
// Defined errors at this time are not found and out of resources.\r
return Status;\r
}\r
\r
-\r
-\r
//\r
// Looking for FV with ACPI storage file\r
//\r
// This should not fail because of LocateHandleBuffer\r
//\r
Status = gBS->HandleProtocol (\r
- HandleBuffer[Index],\r
- &gEfiFirmwareVolume2ProtocolGuid,\r
- (VOID**) &FvInstance\r
- );\r
+ HandleBuffer[Index],\r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ (VOID **)&FvInstance\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
//\r
Status = FvInstance->ReadFile (\r
FvInstance,\r
- (EFI_GUID*)FixedPcdGetPtr (PcdAcpiTableStorageFile),\r
+ (EFI_GUID *)PcdGetPtr (PcdAcpiTableStorageFile),\r
NULL,\r
&Size,\r
&FileType,\r
return Status;\r
}\r
\r
-\r
/**\r
This function calculates and updates an UINT8 checksum.\r
\r
**/\r
VOID\r
AcpiPlatformChecksum (\r
- IN UINT8 *Buffer,\r
- IN UINTN Size\r
+ IN UINT8 *Buffer,\r
+ IN UINTN Size\r
)\r
{\r
- UINTN ChecksumOffset;\r
+ UINTN ChecksumOffset;\r
\r
ChecksumOffset = OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER, Checksum);\r
\r
//\r
// Update checksum value\r
//\r
- Buffer[ChecksumOffset] = CalculateCheckSum8(Buffer, Size);\r
+ Buffer[ChecksumOffset] = CalculateCheckSum8 (Buffer, Size);\r
}\r
\r
-\r
/**\r
Entrypoint of Acpi Platform driver.\r
\r
EFI_STATUS\r
EFIAPI\r
AcpiPlatformEntryPoint (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
EFI_STATUS Status;\r
//\r
// Find the AcpiTable protocol\r
//\r
- Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID**)&AcpiTable);\r
+ Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **)&AcpiTable);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
+\r
//\r
// Read tables from the storage file.\r
//\r
while (Status == EFI_SUCCESS) {\r
-\r
Status = FwVol->ReadSection (\r
FwVol,\r
- (EFI_GUID*)FixedPcdGetPtr (PcdAcpiTableStorageFile),\r
+ (EFI_GUID *)PcdGetPtr (PcdAcpiTableStorageFile),\r
EFI_SECTION_RAW,\r
Instance,\r
- (VOID**) &CurrentTable,\r
+ (VOID **)&CurrentTable,\r
&Size,\r
&FvStatus\r
);\r
- if (!EFI_ERROR(Status)) {\r
+ if (!EFI_ERROR (Status)) {\r
//\r
// Add the table\r
//\r
TableHandle = 0;\r
\r
- TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *) CurrentTable)->Length;\r
+ TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *)CurrentTable)->Length;\r
ASSERT (Size >= TableSize);\r
\r
//\r
// Checksum ACPI table\r
//\r
- AcpiPlatformChecksum ((UINT8*)CurrentTable, TableSize);\r
+ AcpiPlatformChecksum ((UINT8 *)CurrentTable, TableSize);\r
\r
//\r
// Install ACPI table\r
TableSize,\r
&TableHandle\r
);\r
- if (EFI_ERROR(Status)) {\r
+\r
+ //\r
+ // Free memory allocated by ReadSection\r
+ //\r
+ gBS->FreePool (CurrentTable);\r
+\r
+ if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
\r
}\r
}\r
\r
- return EFI_SUCCESS;\r
+ //\r
+ // The driver does not require to be kept loaded.\r
+ //\r
+ return EFI_REQUEST_UNLOAD_IMAGE;\r
}\r
-\r