1 /**@file 2 3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 FlashMap.c 15 16 Abstract: 17 18 PEIM to build GUIDed HOBs for platform specific flash map 19 20 **/ 21 22 // 23 // The package level header files this module uses 24 // 25 #include <PiPei.h> 26 27 #include <WinNtPeim.h> 28 // 29 // The protocols, PPI and GUID defintions for this module 30 // 31 #include <Ppi/NtFwh.h> 32 33 #include <Library/DebugLib.h> 34 #include <Library/PcdLib.h> 35 #include <Library/PeiServicesLib.h> 36 37 EFI_STATUS 38 EFIAPI 39 PeimInitializeFlashMap ( 40 IN EFI_FFS_FILE_HEADER *FfsHeader, 41 IN EFI_PEI_SERVICES **PeiServices 42 ) 43 /*++ 44 45 Routine Description: 46 Build GUIDed HOBs for platform specific flash map 47 48 Arguments: 49 FfsHeader - A pointer to the EFI_FFS_FILE_HEADER structure. 50 PeiServices - General purpose services available to every PEIM. 51 52 Returns: 53 EFI_STATUS 54 55 --*/ 56 // TODO: EFI_SUCCESS - add return value to function comment 57 { 58 EFI_STATUS Status; 59 NT_FWH_PPI *NtFwhPpi; 60 EFI_PHYSICAL_ADDRESS FdBase; 61 UINT64 FdSize; 62 EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; 63 64 DEBUG ((EFI_D_ERROR, "NT 32 Flash Map PEIM Loaded\n")); 65 66 // 67 // Get the Fwh Information PPI 68 // 69 Status = PeiServicesLocatePpi ( 70 &gNtFwhPpiGuid, // GUID 71 0, // INSTANCE 72 &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR 73 (VOID**)&NtFwhPpi // PPI 74 ); 75 ASSERT_EFI_ERROR (Status); 76 77 // 78 // Assume that FD0 contains the Flash map. 79 // 80 Status = NtFwhPpi->NtFwh (0, &FdBase, &FdSize); 81 if (EFI_ERROR (Status)) { 82 return Status; 83 } 84 85 // 86 // Relocate the base of FV region 87 // 88 PcdSet32 (PcdFlashNvStorageVariableBase, PcdGet32 (PcdWinNtFlashNvStorageVariableBase) + (UINT32) FdBase); 89 PcdSet32 (PcdFlashNvStorageFtwWorkingBase, PcdGet32 (PcdWinNtFlashNvStorageFtwWorkingBase) + (UINT32) FdBase); 90 PcdSet32 (PcdFlashNvStorageFtwSpareBase, PcdGet32 (PcdWinNtFlashNvStorageFtwSpareBase) + (UINT32) FdBase); 91 92 return EFI_SUCCESS; 93 } 94 95