1 /*++ @file
2   UEFI/PI PEIM to abstract construction of firmware volume in a Unix environment.
3 
4 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
5 Portions copyright (c) 2010 - 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 #include <PiPei.h>
17 
18 #include <Library/DebugLib.h>
19 #include <Library/PeimEntryPoint.h>
20 #include <Library/HobLib.h>
21 #include <Library/PeiServicesLib.h>
22 #include <Library/PeiServicesTablePointerLib.h>
23 
24 #include <Ppi/EmuThunk.h>
25 #include <Protocol/EmuThunk.h>
26 
27 
28 
29 EFI_STATUS
30 EFIAPI
PeiInitialzeThunkPpiToProtocolPei(IN EFI_PEI_FILE_HANDLE FileHandle,IN CONST EFI_PEI_SERVICES ** PeiServices)31 PeiInitialzeThunkPpiToProtocolPei (
32   IN       EFI_PEI_FILE_HANDLE       FileHandle,
33   IN CONST EFI_PEI_SERVICES          **PeiServices
34   )
35 /*++
36 
37 Routine Description:
38 
39   Perform a call-back into the SEC simulator to get Unix Stuff
40 
41 Arguments:
42 
43   PeiServices - General purpose services available to every PEIM.
44 
45 Returns:
46 
47   None
48 
49 **/
50 {
51   EFI_STATUS              Status;
52   EFI_PEI_PPI_DESCRIPTOR  *PpiDescriptor;
53   EMU_THUNK_PPI           *Thunk;
54   VOID                    *Ptr;
55 
56   DEBUG ((EFI_D_ERROR, "Emu Thunk PEIM Loaded\n"));
57 
58   Status = PeiServicesLocatePpi (
59               &gEmuThunkPpiGuid,        // GUID
60               0,                        // INSTANCE
61               &PpiDescriptor,           // EFI_PEI_PPI_DESCRIPTOR
62               (VOID **)&Thunk           // PPI
63               );
64   ASSERT_EFI_ERROR (Status);
65 
66   Ptr = Thunk->Thunk ();
67 
68   BuildGuidDataHob (
69     &gEmuThunkProtocolGuid,              // Guid
70     &Ptr,                                // Buffer
71     sizeof (VOID *)                      // Sizeof Buffer
72     );
73   return Status;
74 }
75