]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Dummy implementation of Legacy Region 2 Protocol.
authorxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 25 Nov 2009 08:31:37 +0000 (08:31 +0000)
committerxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 25 Nov 2009 08:31:37 +0000 (08:31 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9483 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/MdeModulePkg.dsc
MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2.c [new file with mode: 0644]
MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2.h [new file with mode: 0644]
MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf [new file with mode: 0644]

index e76738723080afa77608c06adc7f2d947ff8751e..be9392b8140ec313677e8c21b9ca2a7760228df1 100644 (file)
   MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf\r
   MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf\r
   MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSampleDxe.inf\r
+  MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf\r
 \r
 [Components.IA32, Components.X64]\r
   MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf\r
diff --git a/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2.c b/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2.c
new file mode 100644 (file)
index 0000000..80de38c
--- /dev/null
@@ -0,0 +1,249 @@
+/** @file\r
+  Dummy implementation of Legacy Region 2 Protocol.\r
+\r
+  This generic implementation of the Legacy Region 2 Protocol does not actually \r
+  perform any lock/unlock operations.  This module may be used on platforms \r
+  that do not provide HW locking of the legacy memory regions.  It can also \r
+  be used as a template driver for implementing the Legacy Region 2 Protocol on\r
+  a platform that does support HW locking of the legacy memory regions.\r
+\r
+Copyright (c) 2009, Intel Corporation\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
+\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
+#include <LegacyRegion2.h>\r
+\r
+EFI_HANDLE   mLegacyRegion2Handle = NULL;\r
+\r
+EFI_LEGACY_REGION2_PROTOCOL  mLegacyRegion2 = {\r
+  LegacyRegion2Decode,\r
+  LegacyRegion2Lock,\r
+  LegacyRegion2BootLock,\r
+  LegacyRegion2Unlock,\r
+  LegacyRegionGetInfo\r
+};\r
+\r
+/**\r
+  Modify the hardware to allow (decode) or disallow (not decode) memory reads in a region.\r
+\r
+  If the On parameter evaluates to TRUE, this function enables memory reads in the address range \r
+  Start to (Start + Length - 1).\r
+  If the On parameter evaluates to FALSE, this function disables memory reads in the address range \r
+  Start to (Start + Length - 1).\r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose attributes\r
+                                should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address\r
+                                was not aligned to a region's starting address or if the length\r
+                                was greater than the number of bytes in the first region.\r
+  @param  On[in]                Decode / Non-Decode flag.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2Decode (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL  *This,\r
+  IN  UINT32                       Start,\r
+  IN  UINT32                       Length,\r
+  OUT UINT32                       *Granularity,\r
+  IN  BOOLEAN                      *On\r
+  )\r
+{\r
+  ASSERT (Granularity != NULL);\r
+  *Granularity = 0;\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  Modify the hardware to disallow memory writes in a region.\r
+\r
+  This function changes the attributes of a memory range to not allow writes.\r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose\r
+                                attributes should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address was\r
+                                not aligned to a region's starting address or if the length was\r
+                                greater than the number of bytes in the first region.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2Lock (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL *This,\r
+  IN  UINT32                      Start,\r
+  IN  UINT32                      Length,\r
+  OUT UINT32                      *Granularity\r
+  )\r
+{\r
+  ASSERT (Granularity != NULL);\r
+  *Granularity = 0;\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  Modify the hardware to disallow memory attribute changes in a region.\r
+\r
+  This function makes the attributes of a region read only. Once a region is boot-locked with this \r
+  function, the read and write attributes of that region cannot be changed until a power cycle has\r
+  reset the boot-lock attribute. Calls to Decode(), Lock() and Unlock() will have no effect.\r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose\r
+                                attributes should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address was\r
+                                not aligned to a region's starting address or if the length was\r
+                                greater than the number of bytes in the first region.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+  @retval EFI_UNSUPPORTED       The chipset does not support locking the configuration registers in\r
+                                a way that will not affect memory regions outside the legacy memory\r
+                                region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2BootLock (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL         *This,\r
+  IN  UINT32                              Start,\r
+  IN  UINT32                              Length,\r
+  OUT UINT32                              *Granularity\r
+  )\r
+{\r
+  ASSERT (Granularity != NULL);\r
+  *Granularity = 0;\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  Modify the hardware to allow memory writes in a region.\r
+\r
+  This function changes the attributes of a memory range to allow writes.  \r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose\r
+                                attributes should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address was\r
+                                not aligned to a region's starting address or if the length was\r
+                                greater than the number of bytes in the first region.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2Unlock (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL  *This,\r
+  IN  UINT32                       Start,\r
+  IN  UINT32                       Length,\r
+  OUT UINT32                       *Granularity\r
+  )\r
+{\r
+  ASSERT (Granularity != NULL);\r
+  *Granularity = 0;\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  Get region information for the attributes of the Legacy Region.\r
+\r
+  This function is used to discover the granularity of the attributes for the memory in the legacy \r
+  region. Each attribute may have a different granularity and the granularity may not be the same\r
+  for all memory ranges in the legacy region.  \r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  DescriptorCount[out]  The number of region descriptor entries returned in the Descriptor\r
+                                buffer.\r
+  @param  Descriptor[out]       A pointer to a pointer used to return a buffer where the legacy\r
+                                region information is deposited. This buffer will contain a list of\r
+                                DescriptorCount number of region descriptors.  This function will\r
+                                provide the memory for the buffer.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegionGetInfo (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL   *This,\r
+  OUT UINT32                        *DescriptorCount,\r
+  OUT EFI_LEGACY_REGION_DESCRIPTOR  **Descriptor\r
+  )\r
+{\r
+  ASSERT (DescriptorCount != NULL);\r
+  ASSERT (Descriptor != NULL);\r
+\r
+  *DescriptorCount = 0;\r
+  *Descriptor      = NULL;\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  The user Entry Point for module LegacyRegionDxe.  The user code starts with this function.\r
+\r
+  @param[in] ImageHandle    The firmware allocated handle for the EFI image.  \r
+  @param[in] SystemTable    A pointer to the EFI System Table.\r
+  \r
+  @retval EFI_SUCCESS       The entry point is executed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2Install (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+  \r
+  //\r
+  // Make sure the Legacy Region 2 Protocol is not already installed in the system\r
+  //\r
+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiLegacyRegion2ProtocolGuid);\r
+  \r
+  //\r
+  // Install the protocol on a new handle.\r
+  //\r
+  Status = gBS->InstallMultipleProtocolInterfaces (\r
+                  &mLegacyRegion2Handle,\r
+                  &gEfiLegacyRegion2ProtocolGuid, &mLegacyRegion2,\r
+                  NULL\r
+                  );\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  return EFI_SUCCESS;\r
+}\r
diff --git a/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2.h b/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2.h
new file mode 100644 (file)
index 0000000..ceded3b
--- /dev/null
@@ -0,0 +1,175 @@
+/** @file\r
+  Internal include file for the dummy Legacy Region 2 Protocol implementation.\r
+\r
+Copyright (c) 2009, Intel Corporation\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
+\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
+#ifndef __DUMMY_LEGACY_REGION2_H__\r
+#define __DUMMY_LEGACY_REGION2_H__\r
+\r
+#include <Protocol/LegacyRegion2.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+\r
+/**\r
+  Modify the hardware to allow (decode) or disallow (not decode) memory reads in a region.\r
+\r
+  If the On parameter evaluates to TRUE, this function enables memory reads in the address range \r
+  Start to (Start + Length - 1).\r
+  If the On parameter evaluates to FALSE, this function disables memory reads in the address range \r
+  Start to (Start + Length - 1).\r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose attributes\r
+                                should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address\r
+                                was not aligned to a region's starting address or if the length\r
+                                was greater than the number of bytes in the first region.\r
+  @param  On[in]                Decode / Non-Decode flag.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2Decode (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL  *This,\r
+  IN  UINT32                       Start,\r
+  IN  UINT32                       Length,\r
+  OUT UINT32                       *Granularity,\r
+  IN  BOOLEAN                      *On\r
+  );\r
+\r
+/**\r
+  Modify the hardware to disallow memory writes in a region.\r
+\r
+  This function changes the attributes of a memory range to not allow writes.\r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose\r
+                                attributes should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address was\r
+                                not aligned to a region's starting address or if the length was\r
+                                greater than the number of bytes in the first region.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2Lock (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL *This,\r
+  IN  UINT32                      Start,\r
+  IN  UINT32                      Length,\r
+  OUT UINT32                      *Granularity\r
+  );\r
+\r
+/**\r
+  Modify the hardware to disallow memory attribute changes in a region.\r
+\r
+  This function makes the attributes of a region read only. Once a region is boot-locked with this \r
+  function, the read and write attributes of that region cannot be changed until a power cycle has\r
+  reset the boot-lock attribute. Calls to Decode(), Lock() and Unlock() will have no effect.\r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose\r
+                                attributes should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address was\r
+                                not aligned to a region's starting address or if the length was\r
+                                greater than the number of bytes in the first region.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+  @retval EFI_UNSUPPORTED       The chipset does not support locking the configuration registers in\r
+                                a way that will not affect memory regions outside the legacy memory\r
+                                region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2BootLock (\r
+  IN EFI_LEGACY_REGION2_PROTOCOL          *This,\r
+  IN  UINT32                              Start,\r
+  IN  UINT32                              Length,\r
+  OUT UINT32                              *Granularity\r
+  );\r
+\r
+/**\r
+  Modify the hardware to allow memory writes in a region.\r
+\r
+  This function changes the attributes of a memory range to allow writes.  \r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  Start[in]             The beginning of the physical address of the region whose\r
+                                attributes should be modified.\r
+  @param  Length[in]            The number of bytes of memory whose attributes should be modified.\r
+                                The actual number of bytes modified may be greater than the number\r
+                                specified.\r
+  @param  Granularity[out]      The number of bytes in the last region affected. This may be less\r
+                                than the total number of bytes affected if the starting address was\r
+                                not aligned to a region's starting address or if the length was\r
+                                greater than the number of bytes in the first region.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegion2Unlock (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL  *This,\r
+  IN  UINT32                       Start,\r
+  IN  UINT32                       Length,\r
+  OUT UINT32                       *Granularity\r
+  );\r
+\r
+/**\r
+  Get region information for the attributes of the Legacy Region.\r
+\r
+  This function is used to discover the granularity of the attributes for the memory in the legacy \r
+  region. Each attribute may have a different granularity and the granularity may not be the same\r
+  for all memory ranges in the legacy region.  \r
+\r
+  @param  This[in]              Indicates the EFI_LEGACY_REGION_PROTOCOL instance.\r
+  @param  DescriptorCount[out]  The number of region descriptor entries returned in the Descriptor\r
+                                buffer.\r
+  @param  Descriptor[out]       A pointer to a pointer used to return a buffer where the legacy\r
+                                region information is deposited. This buffer will contain a list of\r
+                                DescriptorCount number of region descriptors.  This function will\r
+                                provide the memory for the buffer.\r
+\r
+  @retval EFI_SUCCESS           The region's attributes were successfully modified.\r
+  @retval EFI_INVALID_PARAMETER If Start or Length describe an address not in the Legacy Region.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LegacyRegionGetInfo (\r
+  IN  EFI_LEGACY_REGION2_PROTOCOL   *This,\r
+  OUT UINT32                        *DescriptorCount,\r
+  OUT EFI_LEGACY_REGION_DESCRIPTOR  **Descriptor\r
+  );\r
+\r
+#endif\r
diff --git a/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf b/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf
new file mode 100644 (file)
index 0000000..8c071fc
--- /dev/null
@@ -0,0 +1,51 @@
+#/** @file\r
+#  Produces the Legacy Region 2 Protocol.\r
+#\r
+#  This generic implementation of the Legacy Region 2 Protocol does not actually \r
+#  perform any lock/unlock operations.  This module may be used on platforms \r
+#  that do not provide HW locking of the legacy memory regions.  It can also \r
+#  be used as a template driver for implementing the Legacy Region 2 Protocol on\r
+#  a platform that does support HW locking of the legacy memory regions.\r
+#\r
+# Copyright (c) 2009, Intel Corporation\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
+#                                                                                           \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
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = LegacyRegion2Dxe\r
+  FILE_GUID                      = EC2BEECA-E84A-445B-869B-F7A73C96F58A\r
+  MODULE_TYPE                    = DXE_DRIVER\r
+  ENTRY_POINT                    = LegacyRegion2Install\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC\r
+#\r
+\r
+[Sources]\r
+  LegacyRegion2.c\r
+  LegacyRegion2.h\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
+\r
+[LibraryClasses]\r
+  UefiDriverEntryPoint\r
+  DebugLib\r
+  UefiBootServicesTableLib\r
+\r
+[Protocols]\r
+  gEfiLegacyRegion2ProtocolGuid                 ## PRODUCES\r
+\r
+[Depex]\r
+  TRUE\r