From c9093a06e72ef16d2f3bd7ce0a2b9a172e9d048c Mon Sep 17 00:00:00 2001 From: tgingold Date: Sat, 6 Jan 2007 14:59:06 +0000 Subject: Unix version of EFI emulator git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2182 6f19259b-4bc3-4df7-8a09-765794883524 --- EdkUnixPkg/Pei/AutoScan/UnixAutoScan.c | 132 +++++++++++++++++++++++++++++++ EdkUnixPkg/Pei/AutoScan/UnixAutoScan.dxs | 29 +++++++ EdkUnixPkg/Pei/AutoScan/UnixAutoScan.msa | 74 +++++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 EdkUnixPkg/Pei/AutoScan/UnixAutoScan.c create mode 100644 EdkUnixPkg/Pei/AutoScan/UnixAutoScan.dxs create mode 100644 EdkUnixPkg/Pei/AutoScan/UnixAutoScan.msa (limited to 'EdkUnixPkg/Pei/AutoScan') diff --git a/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.c b/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.c new file mode 100644 index 0000000000..35c61affda --- /dev/null +++ b/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.c @@ -0,0 +1,132 @@ +/*++ + +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. + +Module Name: + UnixAutoscan.c + +Abstract: + This PEIM to abstract memory auto-scan in an Unix environment. + +Revision History + +--*/ + +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 NT 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/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.dxs b/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.dxs new file mode 100644 index 0000000000..8ad908860b --- /dev/null +++ b/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.dxs @@ -0,0 +1,29 @@ +/*++ + +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. + +Module Name: + + UnixAutoscan.dxs + +Abstract: + + Dependency expression file for UnixAutoscan. + +--*/ + +#include +#include + +DEPENDENCY_START + PEI_UNIX_AUTOSCAN_PPI_GUID AND EFI_PEI_MASTER_BOOT_MODE_PEIM_PPI AND PEI_BASE_MEMORY_TEST_GUID +DEPENDENCY_END + + diff --git a/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.msa b/EdkUnixPkg/Pei/AutoScan/UnixAutoScan.msa new file mode 100644 index 0000000000..60830b613c --- /dev/null +++ b/EdkUnixPkg/Pei/AutoScan/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.2.3