1 /*++ @file 2 3 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> 4 Portions copyright (c) 2011, Apple Inc. All rights reserved. 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #include "PiPei.h" 16 #include <Ppi/EmuThunk.h> 17 #include <Ppi/MemoryDiscovered.h> 18 19 #include <Library/DebugLib.h> 20 #include <Library/PeimEntryPoint.h> 21 #include <Library/BaseLib.h> 22 #include <Library/BaseMemoryLib.h> 23 #include <Library/HobLib.h> 24 #include <Library/PeiServicesLib.h> 25 #include <Library/PeiServicesTablePointerLib.h> 26 27 EFI_STATUS 28 EFIAPI 29 PeimInitializeAutoScanPei ( 30 IN EFI_PEI_FILE_HANDLE FileHandle, 31 IN CONST EFI_PEI_SERVICES **PeiServices 32 ) 33 /*++ 34 35 Routine Description: 36 Perform a call-back into the SEC simulator to get a memory value 37 38 Arguments: 39 FfsHeader - General purpose data available to every PEIM 40 PeiServices - General purpose services available to every PEIM. 41 42 Returns: 43 None 44 45 **/ 46 { 47 EFI_STATUS Status; 48 EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; 49 EMU_THUNK_PPI *Thunk; 50 UINT64 MemorySize; 51 EFI_PHYSICAL_ADDRESS MemoryBase; 52 UINTN Index; 53 EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; 54 55 56 DEBUG ((EFI_D_ERROR, "Emu Autoscan PEIM Loaded\n")); 57 58 // 59 // Get the PEI UNIX Autoscan PPI 60 // 61 Status = PeiServicesLocatePpi ( 62 &gEmuThunkPpiGuid, // GUID 63 0, // INSTANCE 64 &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR 65 (VOID **)&Thunk // PPI 66 ); 67 ASSERT_EFI_ERROR (Status); 68 69 Index = 0; 70 do { 71 Status = Thunk->MemoryAutoScan (Index, &MemoryBase, &MemorySize); 72 if (!EFI_ERROR (Status)) { 73 Attributes = 74 ( 75 EFI_RESOURCE_ATTRIBUTE_PRESENT | 76 EFI_RESOURCE_ATTRIBUTE_INITIALIZED | 77 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | 78 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | 79 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | 80 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 81 ); 82 83 if (Index == 0) { 84 // 85 // Register the memory with the PEI Core 86 // 87 Status = PeiServicesInstallPeiMemory (MemoryBase, MemorySize); 88 ASSERT_EFI_ERROR (Status); 89 90 Attributes |= EFI_RESOURCE_ATTRIBUTE_TESTED; 91 } 92 93 BuildResourceDescriptorHob ( 94 EFI_RESOURCE_SYSTEM_MEMORY, 95 Attributes, 96 MemoryBase, 97 MemorySize 98 ); 99 } 100 Index++; 101 } while (!EFI_ERROR (Status)); 102 103 // 104 // Build the CPU hob with 36-bit addressing and 16-bits of IO space. 105 // 106 BuildCpuHob (36, 16); 107 108 return Status; 109 } 110