When shutdown is requested, WinHost exits. Otherwise, WinHost re-runs from SEC. Tested no extra memory consumption with multiple resets in PEI. Signed-off-by: Ray Ni <ray.ni@intel.com> Cc: Andrew Fish <afish@apple.com> Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>
		
			
				
	
	
		
			216 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**@file
 | |
| 
 | |
| Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
 | |
| (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| 
 | |
| Module Name:
 | |
|   WinHost.h
 | |
| 
 | |
| Abstract:
 | |
|   Include file for Windows Host
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _HOST_H_
 | |
| #define _HOST_H_
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <time.h>
 | |
| #include "WinInclude.h"
 | |
| 
 | |
| #include <PiPei.h>
 | |
| #include <IndustryStandard/PeImage.h>
 | |
| #include <Guid/FileInfo.h>
 | |
| #include <Guid/FileSystemInfo.h>
 | |
| #include <Guid/FileSystemVolumeLabelInfo.h>
 | |
| #include <Ppi/EmuThunk.h>
 | |
| #include <Ppi/Reset2.h>
 | |
| #include <Protocol/EmuThunk.h>
 | |
| #include <Protocol/SimpleFileSystem.h>
 | |
| 
 | |
| #include <Protocol/EmuBlockIo.h>
 | |
| #include <Protocol/BlockIo.h>
 | |
| #include <Protocol/EmuSnp.h>
 | |
| 
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/PeCoffLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| #include <Library/ThunkPpiList.h>
 | |
| #include <Library/ThunkProtocolList.h>
 | |
| #include <Library/PcdLib.h>
 | |
| #include <Library/PrintLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/PeiServicesLib.h>
 | |
| #include <Library/PeCoffExtraActionLib.h>
 | |
| #include <Library/NetLib.h>
 | |
| 
 | |
| #define TEMPORARY_RAM_SIZE  0x20000
 | |
| 
 | |
| typedef struct {
 | |
|   VOID     *Address;
 | |
|   UINTN    Size;
 | |
| } NT_FD_INFO;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS    Memory;
 | |
|   UINT64                  Size;
 | |
| } NT_SYSTEM_MEMORY;
 | |
| 
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| SecPeCoffGetEntryPoint (
 | |
|   IN     VOID  *Pe32Data,
 | |
|   IN OUT VOID  **EntryPoint
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| SecLoadSecCore (
 | |
|   IN  UINTN  TemporaryRam,
 | |
|   IN  UINTN  TemporaryRamSize,
 | |
|   IN  VOID   *BootFirmwareVolumeBase,
 | |
|   IN  UINTN  BootFirmwareVolumeSize,
 | |
|   IN  VOID   *SecCorePe32File
 | |
|   )
 | |
| 
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
|   This is the service to load the SEC Core from the Firmware Volume
 | |
| 
 | |
| Arguments:
 | |
|   TemporaryRam            - Memory to use for SEC.
 | |
|   TemporaryRamSize        - Size of Memory to use for SEC
 | |
|   BootFirmwareVolumeBase  - Start of the Boot FV
 | |
|   SecCorePe32File         - SEC Core PE32
 | |
| 
 | |
| Returns:
 | |
|   Success means control is transferred and thus we should never return
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecWinNtFdAddress (
 | |
|   IN     UINTN                 Index,
 | |
|   IN OUT EFI_PHYSICAL_ADDRESS  *FdBase,
 | |
|   IN OUT UINT64                *FdSize
 | |
|   )
 | |
| 
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Index   - TODO: add argument description
 | |
|   FdBase  - TODO: add argument description
 | |
|   FdSize  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecImageRead (
 | |
|   IN     VOID   *FileHandle,
 | |
|   IN     UINTN  FileOffset,
 | |
|   IN OUT UINTN  *ReadSize,
 | |
|   OUT    VOID   *Buffer
 | |
|   )
 | |
| 
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   FileHandle  - TODO: add argument description
 | |
|   FileOffset  - TODO: add argument description
 | |
|   ReadSize    - TODO: add argument description
 | |
|   Buffer      - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| CHAR16                            *
 | |
| AsciiToUnicode (
 | |
|   IN  CHAR8  *Ascii,
 | |
|   IN  UINTN  *StrLen OPTIONAL
 | |
|   )
 | |
| 
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Ascii   - TODO: add argument description
 | |
|   StrLen  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| UINTN
 | |
| CountSeparatorsInString (
 | |
|   IN  CONST CHAR16  *String,
 | |
|   IN  CHAR16        Separator
 | |
|   )
 | |
| 
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   String    - TODO: add argument description
 | |
|   Separator - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| BOOLEAN
 | |
| EfiSystemMemoryRange (
 | |
|   IN  VOID  *MemoryAddress
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| SecInitializeThunk (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| extern EMU_THUNK_PROTOCOL     gEmuThunkProtocol;
 | |
| extern EMU_IO_THUNK_PROTOCOL  mWinNtWndThunkIo;
 | |
| extern EMU_IO_THUNK_PROTOCOL  mWinNtFileSystemThunkIo;
 | |
| extern EMU_IO_THUNK_PROTOCOL  mWinNtBlockIoThunkIo;
 | |
| extern EMU_IO_THUNK_PROTOCOL  mWinNtSnpThunkIo;
 | |
| 
 | |
| #endif
 |