Home | History | Annotate | Download | only in FlashMapPei
      1 /*++ @file
      2   PEIM to build GUIDed HOBs for platform specific flash map
      3 
      4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
      5 Portions copyright (c) 2011, Apple Inc. All rights reserved.
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 
     17 #include "PiPei.h"
     18 
     19 #include <Guid/SystemNvDataGuid.h>
     20 #include <Ppi/EmuThunk.h>
     21 
     22 #include <Library/DebugLib.h>
     23 #include <Library/PeimEntryPoint.h>
     24 #include <Library/HobLib.h>
     25 #include <Library/PeiServicesLib.h>
     26 #include <Library/PeiServicesTablePointerLib.h>
     27 #include <Library/BaseMemoryLib.h>
     28 #include <Library/PcdLib.h>
     29 
     30 EFI_STATUS
     31 EFIAPI
     32 PeimInitializeFlashMap (
     33   IN       EFI_PEI_FILE_HANDLE       FileHandle,
     34   IN CONST EFI_PEI_SERVICES          **PeiServices
     35   )
     36 /*++
     37 
     38 Routine Description:
     39   Build GUIDed HOBs for platform specific flash map
     40 
     41 Arguments:
     42   FfsHeader   - A pointer to the EFI_FFS_FILE_HEADER structure.
     43   PeiServices - General purpose services available to every PEIM.
     44 
     45 Returns:
     46   EFI_STATUS
     47 
     48 **/
     49 {
     50   EFI_STATUS              Status;
     51   EMU_THUNK_PPI           *Thunk;
     52   EFI_PEI_PPI_DESCRIPTOR  *PpiDescriptor;
     53   EFI_PHYSICAL_ADDRESS    FdBase;
     54   EFI_PHYSICAL_ADDRESS    FdFixUp;
     55   UINT64                  FdSize;
     56 
     57   DEBUG ((EFI_D_ERROR, "EmulatorPkg Flash Map PEIM Loaded\n"));
     58 
     59   //
     60   // Get the Fwh Information PPI
     61   //
     62   Status = PeiServicesLocatePpi (
     63             &gEmuThunkPpiGuid, // GUID
     64             0,                 // INSTANCE
     65             &PpiDescriptor,     // EFI_PEI_PPI_DESCRIPTOR
     66             (VOID **)&Thunk       // PPI
     67             );
     68   ASSERT_EFI_ERROR (Status);
     69 
     70   //
     71   // Assume that FD0 contains the Flash map.
     72   //
     73   Status = Thunk->FirmwareDevices (0, &FdBase, &FdSize, &FdFixUp);
     74   if (EFI_ERROR (Status)) {
     75     return Status;
     76   }
     77 
     78   PcdSet64 (PcdFlashNvStorageVariableBase64, PcdGet64 (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
     79   PcdSet64 (PcdFlashNvStorageFtwWorkingBase64, PcdGet64 (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
     80   PcdSet64 (PcdFlashNvStorageFtwSpareBase64, PcdGet64 (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
     81 
     82   return EFI_SUCCESS;
     83 }
     84