ArmPkg/CpuDxe: remove VirtualUncachedPages protocol and implementation

Virtual uncached pages are simply pages that are aliased using mismatched
attributes, which is not allowed by the ARM architecture. So remove the
protocol and its implementation.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
Ard Biesheuvel 2017-02-23 14:43:49 +00:00
parent a76d0e88c3
commit fc7bd8939d
6 changed files with 0 additions and 138 deletions

View File

@ -52,9 +52,6 @@
## Include/Ppi/ArmMpCoreInfo.h
gArmMpCoreInfoPpiGuid = { 0x6847cc74, 0xe9ec, 0x4f8f, {0xa2, 0x9d, 0xab, 0x44, 0xe7, 0x54, 0xa8, 0xfc} }
[Protocols.common]
gVirtualUncachedPagesProtocolGuid = { 0xAD651C7D, 0x3C22, 0x4DBF, { 0x92, 0xe8, 0x38, 0xa7, 0xcd, 0xae, 0x87, 0xb2 } }
[PcdsFeatureFlag.common]
gArmTokenSpaceGuid.PcdCpuDxeProduceDebugSupport|FALSE|BOOLEAN|0x00000001

View File

@ -253,7 +253,6 @@ CpuDxeInitialize (
Status = gBS->InstallMultipleProtocolInterfaces (
&mCpuHandle,
&gEfiCpuArchProtocolGuid, &mCpu,
&gVirtualUncachedPagesProtocolGuid, &gVirtualUncachedPages,
NULL
);

View File

@ -35,7 +35,6 @@
#include <Protocol/Cpu.h>
#include <Protocol/DebugSupport.h>
#include <Protocol/DebugSupportPeriodicCallback.h>
#include <Protocol/VirtualUncachedPages.h>
#include <Protocol/LoadedImage.h>
@ -169,6 +168,4 @@ SetGcdMemorySpaceAttributes (
IN UINT64 Attributes
);
extern VIRTUAL_UNCACHED_PAGES_PROTOCOL gVirtualUncachedPages;
#endif // __CPU_DXE_ARM_EXCEPTION_H__

View File

@ -61,7 +61,6 @@
[Protocols]
gEfiCpuArchProtocolGuid
gEfiDebugSupportPeriodicCallbackProtocolGuid
gVirtualUncachedPagesProtocolGuid
[Guids]
gEfiDebugImageInfoTableGuid

View File

@ -211,73 +211,3 @@ CpuSetMemoryAttributes (
return EFI_SUCCESS;
}
}
EFI_STATUS
EFIAPI
CpuConvertPagesToUncachedVirtualAddress (
IN VIRTUAL_UNCACHED_PAGES_PROTOCOL *This,
IN EFI_PHYSICAL_ADDRESS Address,
IN UINTN Length,
IN EFI_PHYSICAL_ADDRESS VirtualMask,
OUT UINT64 *Attributes OPTIONAL
)
{
EFI_STATUS Status;
EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor;
if (Attributes != NULL) {
Status = gDS->GetMemorySpaceDescriptor (Address, &GcdDescriptor);
if (!EFI_ERROR (Status)) {
*Attributes = GcdDescriptor.Attributes;
}
}
//
// Make this address range page fault if accessed. If it is a DMA buffer than this would
// be the PCI address. Code should always use the CPU address, and we will or in VirtualMask
// to that address.
//
Status = SetMemoryAttributes (Address, Length, EFI_MEMORY_RO, 0);
if (!EFI_ERROR (Status)) {
Status = SetMemoryAttributes (Address | VirtualMask, Length, EFI_MEMORY_UC, VirtualMask);
}
DEBUG ((DEBUG_INFO | DEBUG_LOAD, "CpuConvertPagesToUncachedVirtualAddress()\n Unmapped 0x%08lx Mapped 0x%08lx 0x%x bytes\n", Address, Address | VirtualMask, Length));
return Status;
}
EFI_STATUS
EFIAPI
CpuReconvertPages (
IN VIRTUAL_UNCACHED_PAGES_PROTOCOL *This,
IN EFI_PHYSICAL_ADDRESS Address,
IN UINTN Length,
IN EFI_PHYSICAL_ADDRESS VirtualMask,
IN UINT64 Attributes
)
{
EFI_STATUS Status;
DEBUG ((DEBUG_INFO | DEBUG_LOAD, "CpuReconvertPages(%lx, %x, %lx, %lx)\n", Address, Length, VirtualMask, Attributes));
//
// Unmap the aliased Address
//
Status = SetMemoryAttributes (Address | VirtualMask, Length, EFI_MEMORY_RO, 0);
if (!EFI_ERROR (Status)) {
//
// Restore atttributes
//
Status = SetMemoryAttributes (Address, Length, Attributes, 0);
}
return Status;
}
VIRTUAL_UNCACHED_PAGES_PROTOCOL gVirtualUncachedPages = {
CpuConvertPagesToUncachedVirtualAddress,
CpuReconvertPages
};

View File

@ -1,60 +0,0 @@
/** @file
Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef __VIRTUAL_UNCACHED_PAGES_ROTOCOL_H__
#define __VIRTUAL_UNCACHED_PAGES_ROTOCOL_H__
//
// Protocol GUID
//
#define VIRTUAL_UNCACHED_PAGES_PROTOCOL_GUID { 0xAD651C7D, 0x3C22, 0x4DBF, { 0x92, 0xe8, 0x38, 0xa7, 0xcd, 0xae, 0x87, 0xb2 } }
//
// Protocol interface structure
//
typedef struct _VIRTUAL_UNCACHED_PAGES_PROTOCOL VIRTUAL_UNCACHED_PAGES_PROTOCOL;
typedef
EFI_STATUS
(EFIAPI *CONVERT_PAGES_TO_UNCACHED_VIRTUAL_ADDRESS) (
IN VIRTUAL_UNCACHED_PAGES_PROTOCOL *This,
IN EFI_PHYSICAL_ADDRESS Address,
IN UINTN Length,
IN EFI_PHYSICAL_ADDRESS VirtualMask,
OUT UINT64 *Attributes OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *FREE_CONVERTED_PAGES) (
IN VIRTUAL_UNCACHED_PAGES_PROTOCOL *This,
IN EFI_PHYSICAL_ADDRESS Address,
IN UINTN Length,
IN EFI_PHYSICAL_ADDRESS VirtualMask,
IN UINT64 Attributes
);
struct _VIRTUAL_UNCACHED_PAGES_PROTOCOL {
CONVERT_PAGES_TO_UNCACHED_VIRTUAL_ADDRESS ConvertPages;
FREE_CONVERTED_PAGES RevertPages;
};
extern EFI_GUID gVirtualUncachedPagesProtocolGuid;
#endif