From 804405e7d10525e41720216137b2551f62a0663f Mon Sep 17 00:00:00 2001 From: eric_tian Date: Mon, 30 Jun 2008 05:08:49 +0000 Subject: Port EdkUnixPkg to UnixPkg. The changes are listed as follows: 1. change *.msa to *.inf, and create platform configuration files .dec&.dsc&.fdf to comply with Edk2 build process 2. using PCD mechanism to replace macro. 3. change Sec code to cowork with PI1.0 Pei Core and produce temparory memory ppi. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5380 6f19259b-4bc3-4df7-8a09-765794883524 --- UnixPkg/UnixAutoScanPei/UnixAutoScan.c | 145 +++++++++++++++++++++++++++++++ UnixPkg/UnixAutoScanPei/UnixAutoScan.inf | 60 +++++++++++++ UnixPkg/UnixAutoScanPei/UnixAutoScan.msa | 74 ++++++++++++++++ 3 files changed, 279 insertions(+) create mode 100644 UnixPkg/UnixAutoScanPei/UnixAutoScan.c create mode 100644 UnixPkg/UnixAutoScanPei/UnixAutoScan.inf create mode 100644 UnixPkg/UnixAutoScanPei/UnixAutoScan.msa (limited to 'UnixPkg/UnixAutoScanPei') diff --git a/UnixPkg/UnixAutoScanPei/UnixAutoScan.c b/UnixPkg/UnixAutoScanPei/UnixAutoScan.c new file mode 100644 index 0000000..34f5098 --- /dev/null +++ b/UnixPkg/UnixAutoScanPei/UnixAutoScan.c @@ -0,0 +1,145 @@ +/*++ + +Copyright (c) 2006 - 2008, 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. + +Module Name: + UnixAutoscan.c + +Abstract: + This PEIM to abstract memory auto-scan in an Unix environment. + +Revision History + +--*/ + +#include "PiPei.h" +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +EFI_STATUS +EFIAPI +PeimInitializeUnixAutoScan ( + IN EFI_FFS_FILE_HEADER *FfsHeader, + IN EFI_PEI_SERVICES **PeiServices + ) +/*++ + +Routine Description: + Perform a call-back into the SEC simulator to get a memory value + +Arguments: + FfsHeader - General purpose data available to every PEIM + PeiServices - General purpose services available to every PEIM. + +Returns: + None + +--*/ +{ + EFI_STATUS Status; + EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; + PEI_UNIX_AUTOSCAN_PPI *PeiUnixService; + UINT64 MemorySize; + EFI_PHYSICAL_ADDRESS MemoryBase; + PEI_BASE_MEMORY_TEST_PPI *MemoryTestPpi; + EFI_PHYSICAL_ADDRESS ErrorAddress; + UINTN Index; + EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; + + + DEBUG ((EFI_D_ERROR, "Unix Autoscan PEIM Loaded\n")); + + // + // Get the PEI UNIX Autoscan PPI + // + Status = (**PeiServices).LocatePpi ( + PeiServices, + &gPeiUnixAutoScanPpiGuid, // GUID + 0, // INSTANCE + &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR + (VOID **)&PeiUnixService // PPI + ); + ASSERT_EFI_ERROR (Status); + + // + // Get the Memory Test PPI + // + Status = (**PeiServices).LocatePpi ( + PeiServices, + &gPeiBaseMemoryTestPpiGuid, + 0, + NULL, + (VOID **)&MemoryTestPpi + ); + ASSERT_EFI_ERROR (Status); + + Index = 0; + do { + Status = PeiUnixService->UnixAutoScan (Index, &MemoryBase, &MemorySize); + if (!EFI_ERROR (Status)) { + Attributes = + ( + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE + ); + + if (Index == 0) { + // + // For the first area register it as PEI tested memory + // + Status = MemoryTestPpi->BaseMemoryTest ( + PeiServices, + MemoryTestPpi, + MemoryBase, + MemorySize, + Quick, + &ErrorAddress + ); + ASSERT_EFI_ERROR (Status); + + // + // Register the "tested" memory with the PEI Core + // + Status = (**PeiServices).InstallPeiMemory (PeiServices, MemoryBase, MemorySize); + ASSERT_EFI_ERROR (Status); + + Attributes |= EFI_RESOURCE_ATTRIBUTE_TESTED; + } + + BuildResourceDescriptorHob ( + EFI_RESOURCE_SYSTEM_MEMORY, + Attributes, + MemoryBase, + MemorySize + ); + } + Index++; + } while (!EFI_ERROR (Status)); + + // + // Build the CPU hob with 36-bit addressing and 16-bits of IO space. + // + BuildCpuHob (36, 16); + + return Status; +} diff --git a/UnixPkg/UnixAutoScanPei/UnixAutoScan.inf b/UnixPkg/UnixAutoScanPei/UnixAutoScan.inf new file mode 100644 index 0000000..2b02e41 --- /dev/null +++ b/UnixPkg/UnixAutoScanPei/UnixAutoScan.inf @@ -0,0 +1,60 @@ +#/** @file +# Component description file for UnixAutoScan module +# +# This module abstracts memory auto-scan in a Unix environment. +# Copyright (c) 2006, 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 = UnixAutoScan + FILE_GUID = f3f36cb0-8985-11db-b195-0040d02b1835 + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = PeimInitializeUnixAutoScan + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources.common] + UnixAutoScan.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + UnixPkg/UnixPkg.dec + +[LibraryClasses] + PeiServicesTablePointerLib + PeiServicesLib + HobLib + BaseMemoryLib + BaseLib + PeimEntryPoint + DebugLib + + +[Ppis] + gEfiPeiMemoryDiscoveredPpiGuid # PPI ALWAYS_PRODUCED + gPeiBaseMemoryTestPpiGuid # PPI ALWAYS_CONSUMED + gPeiUnixAutoScanPpiGuid # PPI ALWAYS_CONSUMED + + +[Depex] + gPeiUnixAutoScanPpiGuid AND gEfiPeiMasterBootModePpiGuid AND gPeiBaseMemoryTestPpiGuid + diff --git a/UnixPkg/UnixAutoScanPei/UnixAutoScan.msa b/UnixPkg/UnixAutoScanPei/UnixAutoScan.msa new file mode 100644 index 0000000..60830b6 --- /dev/null +++ b/UnixPkg/UnixAutoScanPei/UnixAutoScan.msa @@ -0,0 +1,74 @@ + + + + UnixAutoScan + PEIM + f3f36cb0-8985-11db-b195-0040d02b1835 + 1.0 + Component description file for UnixAutoScan module + This module abstracts memory auto-scan in a Unix environment. + Copyright (c) 2006, 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + UnixAutoScan + + + + DebugLib + + + PeimEntryPoint + + + BaseLib + + + BaseMemoryLib + + + HobLib + + + PeiServicesLib + + + PeiServicesTablePointerLib + + + + UnixAutoScan.c + UnixAutoScan.dxs + + + + + + + + + gPeiUnixAutoScanPpiGuid + + + gPeiBaseMemoryTestPpiGuid + + + gEfiPeiMemoryDiscoveredPpiGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + PeimInitializeUnixAutoScan + + + -- cgit v1.1