ArmPkg: Fix UncachedFreeAlignedPages in UncachedMemoryAllocationLib

Route both the setting and restoring of cacheability through DXE Services/GCD
and stop using the CPU AP directly.
The patch also removes all references to the CPU AP which eliminates the need
for a library constructor.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eugene Cohen <eugene@hp.com>
Reviewed-by: Senthil Ramakrishnan <senthil.ramakrishnan@hp.com>
Reviewed-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14468 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Eugene Cohen 2013-07-15 23:59:58 +00:00 committed by oliviermartin
parent b95a25d1ca
commit a7463b3040
2 changed files with 5 additions and 43 deletions

View File

@ -1,5 +1,5 @@
/** @file /** @file
UncachedMemoryAllocation lib that uses DXE CPU driver to chnage cachability for UncachedMemoryAllocation lib that uses DXE Service to change cachability for
a buffer. a buffer.
Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR> Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
@ -42,8 +42,6 @@ UncachedInternalAllocateAlignedPages (
EFI_CPU_ARCH_PROTOCOL *gDebugUncachedCpu;
// //
// Assume all of memory has the same cache attributes, unless we do our magic // Assume all of memory has the same cache attributes, unless we do our magic
// //
@ -265,7 +263,7 @@ UncachedFreeAlignedPages (
ASSERT (Pages != 0); ASSERT (Pages != 0);
Memory = (EFI_PHYSICAL_ADDRESS) (UINTN) Buffer; Memory = (EFI_PHYSICAL_ADDRESS) (UINTN) Buffer;
Status = gDebugUncachedCpu->SetMemoryAttributes (gDebugUncachedCpu, Memory, EFI_PAGES_TO_SIZE (Pages), gAttributes); Status = gDS->SetMemorySpaceAttributes (Memory, EFI_PAGES_TO_SIZE (Pages), gAttributes);
Status = gBS->FreePages (Memory, Pages); Status = gBS->FreePages (Memory, Pages);
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);
@ -592,35 +590,3 @@ UncachedSafeFreePool (
} }
} }
/**
The constructor function caches the pointer of DXE Services Table.
The constructor function caches the pointer of DXE Services Table.
It will ASSERT() if that operation fails.
It will ASSERT() if the pointer of DXE Services Table is NULL.
It will always return EFI_SUCCESS.
@param ImageHandle The firmware allocated handle for the EFI image.
@param SystemTable A pointer to the EFI System Table.
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
**/
EFI_STATUS
EFIAPI
UncachedMemoryAllocationLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&gDebugUncachedCpu);
ASSERT_EFI_ERROR(Status);
return Status;
}

View File

@ -1,5 +1,7 @@
#/** @file #/** @file
# Semihosting serail port lib #
# UncachedMemoryAllocation lib that uses DXE Service to change cachability for
# a buffer.
# #
# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR> # Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
# #
@ -20,7 +22,6 @@
MODULE_TYPE = DXE_DRIVER MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0 VERSION_STRING = 1.0
LIBRARY_CLASS = UncachedMemoryAllocationLib LIBRARY_CLASS = UncachedMemoryAllocationLib
CONSTRUCTOR = UncachedMemoryAllocationLibConstructor
[Sources.common] [Sources.common]
UncachedMemoryAllocationLib.c UncachedMemoryAllocationLib.c
@ -29,14 +30,9 @@
ArmPkg/ArmPkg.dec ArmPkg/ArmPkg.dec
MdePkg/MdePkg.dec MdePkg/MdePkg.dec
[Protocols]
gEfiCpuArchProtocolGuid
[LibraryClasses] [LibraryClasses]
BaseLib BaseLib
ArmLib ArmLib
MemoryAllocationLib MemoryAllocationLib
DxeServicesTableLib DxeServicesTableLib
[Depex]
gEfiCpuArchProtocolGuid