From 78d6366d68e627e15c09eba2a321b6da2be73d11 Mon Sep 17 00:00:00 2001 From: mdkinney Date: Wed, 1 Jul 2009 03:42:47 +0000 Subject: [PATCH] Add Null implementation of the Legacy Region Protocol This module may be used on platforms that do not have the ability to manage the legacy regions or as a template module for implementing support for legacy regions git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8695 6f19259b-4bc3-4df7-8a09-765794883524 --- .../IntelFrameworkModulePkg.dsc | 2 +- .../Universal/LegacyRegionDxe/LegacyRegion.c | 209 ++++++++++++++++++ .../LegacyRegionDxe/LegacyRegionDxe.inf | 51 +++++ 3 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegion.c create mode 100644 IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf diff --git a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc index 7284767c65..eb6cb20c32 100644 --- a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc +++ b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc @@ -215,7 +215,7 @@ IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf - + IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf [Components.IA32] IntelFrameworkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCodeRuntimeDxe.inf diff --git a/IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegion.c b/IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegion.c new file mode 100644 index 0000000000..c5467b222f --- /dev/null +++ b/IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegion.c @@ -0,0 +1,209 @@ +/** + Produces the Legacy Region Protocol. + + This generic implementation of the Legacy Region Protocol does not actually + perform any lock/unlock operations. This module may be used on platforms + that do not provide HW locking of the legacy memory regions. It can also + be used as a template driver for implementing the Legacy Region Protocol on + a platform that does support HW locking of the legacy memory regions. + +Copyright (c) 2009, Intel Corporation +All rights reserved. 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. + +**/ + +#include +#include +#include +#include + +// +// Function prototypes of the Legacy Region Protocol services this module produces +// +EFI_STATUS +EFIAPI +LegacyRegionDecode ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + IN BOOLEAN *On + ); + +EFI_STATUS +EFIAPI +LegacyRegionLock ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity OPTIONAL + ); + +EFI_STATUS +EFIAPI +LegacyRegionBootLock ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity OPTIONAL + ); + +EFI_STATUS +EFIAPI +LegacyRegionUnlock ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity OPTIONAL + ); + +// +// Module global for the handle the Legacy Region Protocol is installed +// +EFI_HANDLE mLegacyRegionHandle = NULL; + +// +// Module global for the Legacy Region Protocol instance that is installed onto +// mLegacyRegionHandle +// +EFI_LEGACY_REGION_PROTOCOL mLegacyRegion = { + LegacyRegionDecode, + LegacyRegionLock, + LegacyRegionBootLock, + LegacyRegionUnlock +}; + +/** + Sets hardware to decode or not decode a region. + + @param This Indicates the EFI_LEGACY_REGION_PROTOCOL instance + @param Start Start of region to decode. + @param Length Size in bytes of the region. + @param On Decode/nondecode flag. + + @retval EFI_SUCCESS Decode range successfully changed. + +**/ +EFI_STATUS +EFIAPI +LegacyRegionDecode ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + IN BOOLEAN *On + ) +{ + return EFI_SUCCESS; +} + +/** + Sets a region to read only. + + @param This Indicates the EFI_LEGACY_REGION_PROTOCOL instance + @param Start Start of region to lock. + @param Length Size in bytes of the region. + @param Granularity Lock attribute affects this granularity in bytes. + + @retval EFI_SUCCESS The region was made read only. + +**/ +EFI_STATUS +EFIAPI +LegacyRegionLock ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity OPTIONAL + ) +{ + return EFI_SUCCESS; +} + +/** + Sets a region to read only and ensures that flash is locked from being + inadvertently modified. + + @param This Indicates the EFI_LEGACY_REGION_PROTOCOL instance + @param Start Start of region to lock. + @param Length Size in bytes of the region. + @param Granularity Lock attribute affects this granularity in bytes. + + @retval EFI_SUCCESS The region was made read only and flash is locked. + +**/ +EFI_STATUS +EFIAPI +LegacyRegionBootLock ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity OPTIONAL + ) +{ + return EFI_SUCCESS; +} + +/** + Sets a region to read-write. + + @param This Indicates the EFI_LEGACY_REGION_PROTOCOL instance + @param Start Start of region to lock. + @param Length Size in bytes of the region. + @param Granularity Lock attribute affects this granularity in bytes. + + @retval EFI_SUCCESS The region was successfully made read-write. + +**/ +EFI_STATUS +EFIAPI +LegacyRegionUnlock ( + IN EFI_LEGACY_REGION_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity OPTIONAL + ) +{ + return EFI_SUCCESS; +} + +/** + The user Entry Point for module LegacyRegionDxe. The user code starts with this function. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + @retval other Some error occurs when executing this entry point. + +**/ +EFI_STATUS +EFIAPI +LegacyRegionInstall ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + // + // Make sure the Legacy Region Protocol is not already installed in the system + // + ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiLegacyRegionProtocolGuid); + + // + // Install the protocol on a new handle. + // + Status = gBS->InstallMultipleProtocolInterfaces ( + &mLegacyRegionHandle, + &gEfiLegacyRegionProtocolGuid, &mLegacyRegion, + NULL + ); + ASSERT_EFI_ERROR (Status); + + return Status; +} diff --git a/IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf b/IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf new file mode 100644 index 0000000000..441aa76d96 --- /dev/null +++ b/IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf @@ -0,0 +1,51 @@ +#/** @file +# Produces the Legacy Region Protocol. +# +# This generic implementation of the Legacy Region Protocol does not actually +# perform any lock/unlock operations. This module may be used on platforms +# that do not provide HW locking of the legacy memory regions. It can also +# be used as a template driver for implementing the Legacy Region Protocol on +# a platform that does support HW locking of the legacy memory regions. +# +# Copyright (c) 2009, Intel Corporation +# All rights reserved. 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. +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = LegacyRegionDxe + FILE_GUID = 8C439043-85CA-467a-96F1-CB14F4D0DCDA + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = LegacyRegionInstall + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources] + LegacyRegion.c + +[Packages] + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + +[LibraryClasses] + UefiDriverEntryPoint + DebugLib + UefiBootServicesTableLib + +[Protocols] + gEfiLegacyRegionProtocolGuid ## PRODUCES + +[Depex] + TRUE -- 2.39.2