diff options
author | Guo Mang <mang.guo@intel.com> | 2017-04-27 11:36:34 +0800 |
---|---|---|
committer | Guo Mang <mang.guo@intel.com> | 2017-04-27 13:02:46 +0800 |
commit | ca6850ea2728a09559575038eac371c41c7c39af (patch) | |
tree | c5c1874061264afded5a5b6c626e01c0e5cff49f /Nt32Pkg/Sec | |
parent | da94a43c60202dcc2a53d07185ed73f9e9918c34 (diff) | |
download | edk2-platforms-ca6850ea2728a09559575038eac371c41c7c39af.tar.xz |
Nt32Pkg: Remove unused Package
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Guo Mang <mang.guo@intel.com>
Diffstat (limited to 'Nt32Pkg/Sec')
-rw-r--r-- | Nt32Pkg/Sec/FwVol.c | 314 | ||||
-rw-r--r-- | Nt32Pkg/Sec/SecMain.c | 1136 | ||||
-rw-r--r-- | Nt32Pkg/Sec/SecMain.h | 559 | ||||
-rw-r--r-- | Nt32Pkg/Sec/SecMain.inf | 90 | ||||
-rw-r--r-- | Nt32Pkg/Sec/Stack.asm | 94 | ||||
-rw-r--r-- | Nt32Pkg/Sec/StackX64.asm | 110 | ||||
-rw-r--r-- | Nt32Pkg/Sec/WinNtThunk.c | 187 |
7 files changed, 0 insertions, 2490 deletions
diff --git a/Nt32Pkg/Sec/FwVol.c b/Nt32Pkg/Sec/FwVol.c deleted file mode 100644 index f476fa99c7..0000000000 --- a/Nt32Pkg/Sec/FwVol.c +++ /dev/null @@ -1,314 +0,0 @@ -/**@file
-
-Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
- FwVol.c
-
-Abstract:
- A simple FV stack so the SEC can extract the SEC Core from an
- FV.
-
-**/
-
-#include "SecMain.h"
-
-#define GET_OCCUPIED_SIZE(ActualSize, Alignment) \
- (ActualSize) + (((Alignment) - ((ActualSize) & ((Alignment) - 1))) & ((Alignment) - 1))
-
-EFI_FFS_FILE_STATE
-GetFileState (
- IN UINT8 ErasePolarity,
- IN EFI_FFS_FILE_HEADER *FfsHeader
- )
-/*++
-
-Routine Description:
- Returns the highest bit set of the State field
-
-Arguments:
- ErasePolarity - Erase Polarity as defined by EFI_FVB_ERASE_POLARITY
- in the Attributes field.
- FfsHeader - Pointer to FFS File Header.
-
-Returns:
- Returns the highest bit in the State field
-
---*/
-{
- EFI_FFS_FILE_STATE FileState;
- EFI_FFS_FILE_STATE HighestBit;
-
- FileState = FfsHeader->State;
-
- if (ErasePolarity != 0) {
- FileState = (EFI_FFS_FILE_STATE)~FileState;
- }
-
- HighestBit = 0x80;
- while (HighestBit != 0 && (HighestBit & FileState) == 0) {
- HighestBit >>= 1;
- }
-
- return HighestBit;
-}
-
-UINT8
-CalculateHeaderChecksum (
- IN EFI_FFS_FILE_HEADER *FileHeader
- )
-/*++
-
-Routine Description:
- Calculates the checksum of the header of a file.
-
-Arguments:
- FileHeader - Pointer to FFS File Header.
-
-Returns:
- Checksum of the header.
-
---*/
-{
- UINT8 *ptr;
- UINTN Index;
- UINT8 Sum;
-
- Sum = 0;
- ptr = (UINT8 *) FileHeader;
-
- for (Index = 0; Index < sizeof (EFI_FFS_FILE_HEADER) - 3; Index += 4) {
- Sum = (UINT8) (Sum + ptr[Index]);
- Sum = (UINT8) (Sum + ptr[Index + 1]);
- Sum = (UINT8) (Sum + ptr[Index + 2]);
- Sum = (UINT8) (Sum + ptr[Index + 3]);
- }
-
- for (; Index < sizeof (EFI_FFS_FILE_HEADER); Index++) {
- Sum = (UINT8) (Sum + ptr[Index]);
- }
- //
- // State field (since this indicates the different state of file).
- //
- Sum = (UINT8) (Sum - FileHeader->State);
- //
- // Checksum field of the file is not part of the header checksum.
- //
- Sum = (UINT8) (Sum - FileHeader->IntegrityCheck.Checksum.File);
-
- return Sum;
-}
-
-EFI_STATUS
-SecFfsFindNextFile (
- IN EFI_FV_FILETYPE SearchType,
- IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
- IN OUT EFI_FFS_FILE_HEADER **FileHeader
- )
-/*++
-
-Routine Description:
- Given the input file pointer, search for the next matching file in the
- FFS volume as defined by SearchType. The search starts from FileHeader inside
- the Firmware Volume defined by FwVolHeader.
-
-Arguments:
- SearchType - Filter to find only files of this type.
- Type EFI_FV_FILETYPE_ALL causes no filtering to be done.
- FwVolHeader - Pointer to the FV header of the volume to search.
- This parameter must point to a valid FFS volume.
- FileHeader - Pointer to the current file from which to begin searching.
- This pointer will be updated upon return to reflect the file
- found.
-
-Returns:
- EFI_NOT_FOUND - No files matching the search criteria were found
- EFI_SUCCESS
-
---*/
-{
- EFI_FFS_FILE_HEADER *FfsFileHeader;
- UINT32 FileLength;
- UINT32 FileOccupiedSize;
- UINT32 FileOffset;
- UINT64 FvLength;
- UINT8 ErasePolarity;
- UINT8 FileState;
-
- FvLength = FwVolHeader->FvLength;
- if (FwVolHeader->Attributes & EFI_FVB2_ERASE_POLARITY) {
- ErasePolarity = 1;
- } else {
- ErasePolarity = 0;
- }
- //
- // If FileHeader is not specified (NULL) start with the first file in the
- // firmware volume. Otherwise, start from the FileHeader.
- //
- if (*FileHeader == NULL) {
- FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FwVolHeader + FwVolHeader->HeaderLength);
- } else {
- //
- // Length is 24 bits wide so mask upper 8 bits
- // FileLength is adjusted to FileOccupiedSize as it is 8 byte aligned.
- //
- FileLength = *(UINT32 *) (*FileHeader)->Size & 0x00FFFFFF;
- FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
- FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) *FileHeader + FileOccupiedSize);
- }
-
- FileOffset = (UINT32) ((UINT8 *) FfsFileHeader - (UINT8 *) FwVolHeader);
-
- while (FileOffset < (FvLength - sizeof (EFI_FFS_FILE_HEADER))) {
- //
- // Get FileState which is the highest bit of the State
- //
- FileState = GetFileState (ErasePolarity, FfsFileHeader);
-
- switch (FileState) {
-
- case EFI_FILE_HEADER_INVALID:
- FileOffset += sizeof (EFI_FFS_FILE_HEADER);
- FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + sizeof (EFI_FFS_FILE_HEADER));
- break;
-
- case EFI_FILE_DATA_VALID:
- case EFI_FILE_MARKED_FOR_UPDATE:
- if (CalculateHeaderChecksum (FfsFileHeader) == 0) {
- FileLength = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF;
- FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
-
- if ((SearchType == FfsFileHeader->Type) || (SearchType == EFI_FV_FILETYPE_ALL)) {
-
- *FileHeader = FfsFileHeader;
-
- return EFI_SUCCESS;
- }
-
- FileOffset += FileOccupiedSize;
- FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + FileOccupiedSize);
- } else {
- return EFI_NOT_FOUND;
- }
- break;
-
- case EFI_FILE_DELETED:
- FileLength = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF;
- FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
- FileOffset += FileOccupiedSize;
- FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + FileOccupiedSize);
- break;
-
- default:
- return EFI_NOT_FOUND;
-
- }
- }
-
- return EFI_NOT_FOUND;
-}
-
-EFI_STATUS
-SecFfsFindSectionData (
- IN EFI_SECTION_TYPE SectionType,
- IN EFI_FFS_FILE_HEADER *FfsFileHeader,
- IN OUT VOID **SectionData
- )
-/*++
-
-Routine Description:
- Given the input file pointer, search for the next matching section in the
- FFS volume.
-
-Arguments:
- SearchType - Filter to find only sections of this type.
- FfsFileHeader - Pointer to the current file to search.
- SectionData - Pointer to the Section matching SectionType in FfsFileHeader.
- NULL if section not found
-
-Returns:
- EFI_NOT_FOUND - No files matching the search criteria were found
- EFI_SUCCESS
-
---*/
-{
- UINT32 FileSize;
- EFI_COMMON_SECTION_HEADER *Section;
- UINT32 SectionLength;
- UINT32 ParsedLength;
-
- //
- // Size is 24 bits wide so mask upper 8 bits.
- // Does not include FfsFileHeader header size
- // FileSize is adjusted to FileOccupiedSize as it is 8 byte aligned.
- //
- Section = (EFI_COMMON_SECTION_HEADER *) (FfsFileHeader + 1);
- FileSize = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF;
- FileSize -= sizeof (EFI_FFS_FILE_HEADER);
-
- *SectionData = NULL;
- ParsedLength = 0;
- while (ParsedLength < FileSize) {
- if (Section->Type == SectionType) {
- *SectionData = (VOID *) (Section + 1);
- return EFI_SUCCESS;
- }
- //
- // Size is 24 bits wide so mask upper 8 bits.
- // SectionLength is adjusted it is 4 byte aligned.
- // Go to the next section
- //
- SectionLength = *(UINT32 *) Section->Size & 0x00FFFFFF;
- SectionLength = GET_OCCUPIED_SIZE (SectionLength, 4);
-
- ParsedLength += SectionLength;
- Section = (EFI_COMMON_SECTION_HEADER *) ((UINT8 *) Section + SectionLength);
- }
-
- return EFI_NOT_FOUND;
-}
-
-EFI_STATUS
-SecFfsFindPeiCore (
- IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
- OUT VOID **Pe32Data
- )
-/*++
-
-Routine Description:
- Given the pointer to the Firmware Volume Header find the SEC
- core and return it's PE32 image.
-
-Arguments:
- FwVolHeader - Pointer to memory mapped FV
- Pe32Data - Pointer to SEC PE32 iamge.
-
-Returns:
- EFI_SUCCESS - Pe32Data is valid
- other - Failure
-
---*/
-{
- EFI_STATUS Status;
- EFI_FFS_FILE_HEADER *FileHeader;
- EFI_FV_FILETYPE SearchType;
-
- SearchType = EFI_FV_FILETYPE_PEI_CORE;
- FileHeader = NULL;
- do {
- Status = SecFfsFindNextFile (SearchType, FwVolHeader, &FileHeader);
- if (!EFI_ERROR (Status)) {
- Status = SecFfsFindSectionData (EFI_SECTION_PE32, FileHeader, Pe32Data);
- return Status;
- }
- } while (!EFI_ERROR (Status));
-
- return Status;
-}
diff --git a/Nt32Pkg/Sec/SecMain.c b/Nt32Pkg/Sec/SecMain.c deleted file mode 100644 index 80539faa33..0000000000 --- a/Nt32Pkg/Sec/SecMain.c +++ /dev/null @@ -1,1136 +0,0 @@ -/**@file
-
-Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
-(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- SecMain.c
-
-Abstract:
- WinNt emulator of SEC phase. It's really a Win32 application, but this is
- Ok since all the other modules for NT32 are NOT Win32 applications.
-
- This program gets NT32 PCD setting and figures out what the memory layout
- will be, how may FD's will be loaded and also what the boot mode is.
-
- The SEC registers a set of services with the SEC core. gPrivateDispatchTable
- is a list of PPI's produced by the SEC that are available for usage in PEI.
-
- This code produces 128 K of temporary memory for the PEI stack by directly
- allocate memory space with ReadWrite and Execute attribute.
-
-**/
-
-#include "SecMain.h"
-
-#ifndef SE_TIME_ZONE_NAME
-#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
-#endif
-
-NT_PEI_LOAD_FILE_PPI mSecNtLoadFilePpi = { SecWinNtPeiLoadFile };
-
-PEI_NT_AUTOSCAN_PPI mSecNtAutoScanPpi = { SecWinNtPeiAutoScan };
-
-PEI_NT_THUNK_PPI mSecWinNtThunkPpi = { SecWinNtWinNtThunkAddress };
-
-EFI_PEI_PROGRESS_CODE_PPI mSecStatusCodePpi = { SecPeiReportStatusCode };
-
-NT_FWH_PPI mSecFwhInformationPpi = { SecWinNtFdAddress };
-
-EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mSecTemporaryRamSupportPpi = {SecTemporaryRamSupport};
-
-EFI_PEI_PPI_DESCRIPTOR gPrivateDispatchTable[] = {
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gNtPeiLoadFilePpiGuid,
- &mSecNtLoadFilePpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gPeiNtAutoScanPpiGuid,
- &mSecNtAutoScanPpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gPeiNtThunkPpiGuid,
- &mSecWinNtThunkPpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gEfiPeiStatusCodePpiGuid,
- &mSecStatusCodePpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gEfiTemporaryRamSupportPpiGuid,
- &mSecTemporaryRamSupportPpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gNtFwhPpiGuid,
- &mSecFwhInformationPpi
- }
-};
-
-
-//
-// Default information about where the FD is located.
-// This array gets filled in with information from PcdWinNtFirmwareVolume
-// The number of array elements is allocated base on parsing
-// PcdWinNtFirmwareVolume and the memory is never freed.
-//
-UINTN gFdInfoCount = 0;
-NT_FD_INFO *gFdInfo;
-
-//
-// Array that supports seperate memory rantes.
-// The memory ranges are set by PcdWinNtMemorySizeForSecMain.
-// The number of array elements is allocated base on parsing
-// PcdWinNtMemorySizeForSecMain value and the memory is never freed.
-//
-UINTN gSystemMemoryCount = 0;
-NT_SYSTEM_MEMORY *gSystemMemory;
-
-VOID
-EFIAPI
-SecSwitchStack (
- UINT32 TemporaryMemoryBase,
- UINT32 PermenentMemoryBase
- );
-EFI_STATUS
-SecNt32PeCoffRelocateImage (
- IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
- );
-
-VOID
-EFIAPI
-PeiSwitchStacks (
- IN SWITCH_STACK_ENTRY_POINT EntryPoint,
- IN VOID *Context1, OPTIONAL
- IN VOID *Context2, OPTIONAL
- IN VOID *Context3, OPTIONAL
- IN VOID *NewStack
- );
-
-VOID
-SecPrint (
- CHAR8 *Format,
- ...
- )
-{
- va_list Marker;
- UINTN CharCount;
- CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
-
- va_start (Marker, Format);
-
- _vsnprintf (Buffer, sizeof (Buffer), Format, Marker);
-
- va_end (Marker);
-
- CharCount = strlen (Buffer);
- WriteFile (
- GetStdHandle (STD_OUTPUT_HANDLE),
- Buffer,
- (DWORD)CharCount,
- (LPDWORD)&CharCount,
- NULL
- );
-}
-
-INTN
-EFIAPI
-main (
- IN INTN Argc,
- IN CHAR8 **Argv,
- IN CHAR8 **Envp
- )
-/*++
-
-Routine Description:
- Main entry point to SEC for WinNt. This is a Windows program
-
-Arguments:
- Argc - Number of command line arguments
- Argv - Array of command line argument strings
- Envp - Array of environment variable strings
-
-Returns:
- 0 - Normal exit
- 1 - Abnormal exit
-
---*/
-{
- EFI_STATUS Status;
- HANDLE Token;
- TOKEN_PRIVILEGES TokenPrivileges;
- EFI_PHYSICAL_ADDRESS InitialStackMemory;
- UINT64 InitialStackMemorySize;
- UINTN Index;
- UINTN Index1;
- UINTN Index2;
- CHAR16 *FileName;
- CHAR16 *FileNamePtr;
- BOOLEAN Done;
- VOID *PeiCoreFile;
- CHAR16 *MemorySizeStr;
- CHAR16 *FirmwareVolumesStr;
- UINTN *StackPointer;
- UINT32 ProcessAffinityMask;
- UINT32 SystemAffinityMask;
- INT32 LowBit;
-
-
- //
- // Enable the privilege so that RTC driver can successfully run SetTime()
- //
- OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &Token);
- if (LookupPrivilegeValue(NULL, SE_TIME_ZONE_NAME, &TokenPrivileges.Privileges[0].Luid)) {
- TokenPrivileges.PrivilegeCount = 1;
- TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- AdjustTokenPrivileges(Token, FALSE, &TokenPrivileges, 0, (PTOKEN_PRIVILEGES) NULL, 0);
- }
-
- MemorySizeStr = (CHAR16 *) PcdGetPtr (PcdWinNtMemorySizeForSecMain);
- FirmwareVolumesStr = (CHAR16 *) PcdGetPtr (PcdWinNtFirmwareVolume);
-
- SecPrint ("\nEDK II SEC Main NT Emulation Environment from www.TianoCore.org\n");
-
- //
- // Determine the first thread available to this process.
- //
- if (GetProcessAffinityMask (GetCurrentProcess (), &ProcessAffinityMask, &SystemAffinityMask)) {
- LowBit = (INT32)LowBitSet32 (ProcessAffinityMask);
- if (LowBit != -1) {
- //
- // Force the system to bind the process to a single thread to work
- // around odd semaphore type crashes.
- //
- SetProcessAffinityMask (GetCurrentProcess (), (INTN)(BIT0 << LowBit));
- }
- }
-
- //
- // Make some Windows calls to Set the process to the highest priority in the
- // idle class. We need this to have good performance.
- //
- SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS);
- SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST);
-
- //
- // Allocate space for gSystemMemory Array
- //
- gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1;
- gSystemMemory = calloc (gSystemMemoryCount, sizeof (NT_SYSTEM_MEMORY));
- if (gSystemMemory == NULL) {
- SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n", MemorySizeStr);
- exit (1);
- }
- //
- // Allocate space for gSystemMemory Array
- //
- gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1;
- gFdInfo = calloc (gFdInfoCount, sizeof (NT_FD_INFO));
- if (gFdInfo == NULL) {
- SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n", FirmwareVolumesStr);
- exit (1);
- }
- //
- // Setup Boot Mode. If BootModeStr == "" then BootMode = 0 (BOOT_WITH_FULL_CONFIGURATION)
- //
- SecPrint (" BootMode 0x%02x\n", PcdGet32 (PcdWinNtBootMode));
-
- //
- // Allocate 128K memory to emulate temp memory for PEI.
- // on a real platform this would be SRAM, or using the cache as RAM.
- // Set InitialStackMemory to zero so WinNtOpenFile will allocate a new mapping
- //
- InitialStackMemorySize = STACK_SIZE;
- InitialStackMemory = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (InitialStackMemorySize), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
- if (InitialStackMemory == 0) {
- SecPrint ("ERROR : Can not allocate enough space for SecStack\n");
- exit (1);
- }
-
- for (StackPointer = (UINTN*) (UINTN) InitialStackMemory;
- StackPointer < (UINTN*) ((UINTN)InitialStackMemory + (SIZE_T) InitialStackMemorySize);
- StackPointer ++) {
- *StackPointer = 0x5AA55AA5;
- }
-
- SecPrint (" SEC passing in %d bytes of temp RAM to PEI\n", InitialStackMemorySize);
-
- //
- // Open All the firmware volumes and remember the info in the gFdInfo global
- //
- FileNamePtr = (CHAR16 *)malloc (StrLen ((CHAR16 *)FirmwareVolumesStr) * sizeof(CHAR16));
- if (FileNamePtr == NULL) {
- SecPrint ("ERROR : Can not allocate memory for firmware volume string\n");
- exit (1);
- }
-
- StrCpy (FileNamePtr, (CHAR16*)FirmwareVolumesStr);
-
- for (Done = FALSE, Index = 0, PeiCoreFile = NULL; !Done; Index++) {
- FileName = FileNamePtr;
- for (Index1 = 0; (FileNamePtr[Index1] != '!') && (FileNamePtr[Index1] != 0); Index1++)
- ;
- if (FileNamePtr[Index1] == 0) {
- Done = TRUE;
- } else {
- FileNamePtr[Index1] = '\0';
- FileNamePtr = FileNamePtr + Index1 + 1;
- }
-
- //
- // Open the FD and remember where it got mapped into our processes address space
- //
- Status = WinNtOpenFile (
- FileName,
- 0,
- OPEN_EXISTING,
- &gFdInfo[Index].Address,
- &gFdInfo[Index].Size
- );
- if (EFI_ERROR (Status)) {
- SecPrint ("ERROR : Can not open Firmware Device File %S (0x%X). Exiting.\n", FileName, Status);
- exit (1);
- }
-
- SecPrint (" FD loaded from");
- //
- // printf can't print filenames directly as the \ gets interpreted as an
- // escape character.
- //
- for (Index2 = 0; FileName[Index2] != '\0'; Index2++) {
- SecPrint ("%c", FileName[Index2]);
- }
-
- if (PeiCoreFile == NULL) {
- //
- // Assume the beginning of the FD is an FV and look for the PEI Core.
- // Load the first one we find.
- //
- Status = SecFfsFindPeiCore ((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) gFdInfo[Index].Address, &PeiCoreFile);
- if (!EFI_ERROR (Status)) {
- SecPrint (" contains SEC Core");
- }
- }
-
- SecPrint ("\n");
- }
- //
- // Calculate memory regions and store the information in the gSystemMemory
- // global for later use. The autosizing code will use this data to
- // map this memory into the SEC process memory space.
- //
- for (Index = 0, Done = FALSE; !Done; Index++) {
- //
- // Save the size of the memory and make a Unicode filename SystemMemory00, ...
- //
- gSystemMemory[Index].Size = _wtoi (MemorySizeStr) * 0x100000;
-
- //
- // Find the next region
- //
- for (Index1 = 0; MemorySizeStr[Index1] != '!' && MemorySizeStr[Index1] != 0; Index1++)
- ;
- if (MemorySizeStr[Index1] == 0) {
- Done = TRUE;
- }
-
- MemorySizeStr = MemorySizeStr + Index1 + 1;
- }
-
- SecPrint ("\n");
-
- //
- // Hand off to PEI Core
- //
- SecLoadFromCore ((UINTN) InitialStackMemory, (UINTN) InitialStackMemorySize, (UINTN) gFdInfo[0].Address, PeiCoreFile);
-
- //
- // If we get here, then the PEI Core returned. This is an error as PEI should
- // always hand off to DXE.
- //
- SecPrint ("ERROR : PEI Core returned\n");
- exit (1);
-}
-
-EFI_STATUS
-WinNtOpenFile (
- IN CHAR16 *FileName,
- IN UINT32 MapSize,
- IN DWORD CreationDisposition,
- IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,
- OUT UINT64 *Length
- )
-/*++
-
-Routine Description:
- Opens and memory maps a file using WinNt services. If BaseAddress is non zero
- the process will try and allocate the memory starting at BaseAddress.
-
-Arguments:
- FileName - The name of the file to open and map
- MapSize - The amount of the file to map in bytes
- CreationDisposition - The flags to pass to CreateFile(). Use to create new files for
- memory emulation, and exiting files for firmware volume emulation
- BaseAddress - The base address of the mapped file in the user address space.
- If passed in as NULL the new memory region is used.
- If passed in as non NULL the request memory region is used for
- the mapping of the file into the process space.
- Length - The size of the mapped region in bytes
-
-Returns:
- EFI_SUCCESS - The file was opened and mapped.
- EFI_NOT_FOUND - FileName was not found in the current directory
- EFI_DEVICE_ERROR - An error occured attempting to map the opened file
-
---*/
-{
- HANDLE NtFileHandle;
- HANDLE NtMapHandle;
- VOID *VirtualAddress;
- UINTN FileSize;
-
- //
- // Use Win API to open/create a file
- //
- NtFileHandle = CreateFile (
- FileName,
- GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE,
- FILE_SHARE_READ,
- NULL,
- CreationDisposition,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
- if (NtFileHandle == INVALID_HANDLE_VALUE) {
- return EFI_NOT_FOUND;
- }
- //
- // Map the open file into a memory range
- //
- NtMapHandle = CreateFileMapping (
- NtFileHandle,
- NULL,
- PAGE_EXECUTE_READWRITE,
- 0,
- MapSize,
- NULL
- );
- if (NtMapHandle == NULL) {
- return EFI_DEVICE_ERROR;
- }
- //
- // Get the virtual address (address in the emulator) of the mapped file
- //
- VirtualAddress = MapViewOfFileEx (
- NtMapHandle,
- FILE_MAP_EXECUTE | FILE_MAP_ALL_ACCESS,
- 0,
- 0,
- MapSize,
- (LPVOID) (UINTN) *BaseAddress
- );
- if (VirtualAddress == NULL) {
- return EFI_DEVICE_ERROR;
- }
-
- if (MapSize == 0) {
- //
- // Seek to the end of the file to figure out the true file size.
- //
- FileSize = SetFilePointer (
- NtFileHandle,
- 0,
- NULL,
- FILE_END
- );
- if (FileSize == -1) {
- return EFI_DEVICE_ERROR;
- }
-
- *Length = (UINT64) FileSize;
- } else {
- *Length = (UINT64) MapSize;
- }
-
- *BaseAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAddress;
-
- return EFI_SUCCESS;
-}
-
-
-#define BYTES_PER_RECORD 512
-
-EFI_STATUS
-EFIAPI
-SecPeiReportStatusCode (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN CONST EFI_GUID *CallerId,
- IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
- )
-/*++
-
-Routine Description:
-
- This routine produces the ReportStatusCode PEI service. It's passed
- up to the PEI Core via a PPI. T
-
- This code currently uses the NT clib printf. This does not work the same way
- as the EFI Print (), as %t, %g, %s as Unicode are not supported.
-
-Arguments:
- (see EFI_PEI_REPORT_STATUS_CODE)
-
-Returns:
- EFI_SUCCESS - Always return success
-
---*/
-// TODO: PeiServices - add argument and description to function comment
-// TODO: CodeType - add argument and description to function comment
-// TODO: Value - add argument and description to function comment
-// TODO: Instance - add argument and description to function comment
-// TODO: CallerId - add argument and description to function comment
-// TODO: Data - add argument and description to function comment
-{
- CHAR8 *Format;
- BASE_LIST Marker;
- CHAR8 PrintBuffer[BYTES_PER_RECORD * 2];
- CHAR8 *Filename;
- CHAR8 *Description;
- UINT32 LineNumber;
- UINT32 ErrorLevel;
-
-
- if (Data == NULL) {
- } else if (ReportStatusCodeExtractAssertInfo (CodeType, Value, Data, &Filename, &Description, &LineNumber)) {
- //
- // Processes ASSERT ()
- //
- SecPrint ("ASSERT %s(%d): %s\n", Filename, (int)LineNumber, Description);
-
- } else if (ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) {
- //
- // Process DEBUG () macro
- //
- AsciiBSPrint (PrintBuffer, BYTES_PER_RECORD, Format, Marker);
- SecPrint (PrintBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-#if defined (MDE_CPU_IA32)
-/**
- Transfers control to a function starting with a new stack.
-
- Transfers control to the function specified by EntryPoint using the new stack
- specified by NewStack and passing in the parameters specified by Context1 and
- Context2. Context1 and Context2 are optional and may be NULL. The function
- EntryPoint must never return.
-
- If EntryPoint is NULL, then ASSERT().
- If NewStack is NULL, then ASSERT().
-
- @param EntryPoint A pointer to function to call with the new stack.
- @param Context1 A pointer to the context to pass into the EntryPoint
- function.
- @param Context2 A pointer to the context to pass into the EntryPoint
- function.
- @param NewStack A pointer to the new stack to use for the EntryPoint
- function.
- @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's
- Reserved on other architectures.
-
-**/
-VOID
-EFIAPI
-PeiSwitchStacks (
- IN SWITCH_STACK_ENTRY_POINT EntryPoint,
- IN VOID *Context1, OPTIONAL
- IN VOID *Context2, OPTIONAL
- IN VOID *Context3, OPTIONAL
- IN VOID *NewStack
- )
-{
- BASE_LIBRARY_JUMP_BUFFER JumpBuffer;
-
- ASSERT (EntryPoint != NULL);
- ASSERT (NewStack != NULL);
-
- //
- // Stack should be aligned with CPU_STACK_ALIGNMENT
- //
- ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0);
-
- JumpBuffer.Eip = (UINTN)EntryPoint;
- JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID*);
- JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2) + sizeof(Context3);
- ((VOID**)JumpBuffer.Esp)[1] = Context1;
- ((VOID**)JumpBuffer.Esp)[2] = Context2;
- ((VOID**)JumpBuffer.Esp)[3] = Context3;
-
- LongJump (&JumpBuffer, (UINTN)-1);
-
-
- //
- // InternalSwitchStack () will never return
- //
- ASSERT (FALSE);
-}
-#endif
-
-VOID
-SecLoadFromCore (
- IN UINTN LargestRegion,
- IN UINTN LargestRegionSize,
- IN UINTN BootFirmwareVolumeBase,
- IN VOID *PeiCorePe32File
- )
-/*++
-
-Routine Description:
- This is the service to load the PEI Core from the Firmware Volume
-
-Arguments:
- LargestRegion - Memory to use for PEI.
- LargestRegionSize - Size of Memory to use for PEI
- BootFirmwareVolumeBase - Start of the Boot FV
- PeiCorePe32File - PEI Core PE32
-
-Returns:
- Success means control is transfered and thus we should never return
-
---*/
-{
- EFI_STATUS Status;
- VOID *TopOfStack;
- UINT64 PeiCoreSize;
- EFI_PHYSICAL_ADDRESS PeiCoreEntryPoint;
- EFI_PHYSICAL_ADDRESS PeiImageAddress;
- EFI_SEC_PEI_HAND_OFF *SecCoreData;
- UINTN PeiStackSize;
-
- //
- // Compute Top Of Memory for Stack and PEI Core Allocations
- //
- PeiStackSize = (UINTN)RShiftU64((UINT64)STACK_SIZE,1);
-
- //
- // |-----------| <---- TemporaryRamBase + TemporaryRamSize
- // | Heap |
- // | |
- // |-----------| <---- StackBase / PeiTemporaryMemoryBase
- // | |
- // | Stack |
- // |-----------| <---- TemporaryRamBase
- //
- TopOfStack = (VOID *)(LargestRegion + PeiStackSize);
-
- //
- // Reservet space for storing PeiCore's parament in stack.
- //
- TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT);
- TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);
-
- //
- // Bind this information into the SEC hand-off state
- //
- SecCoreData = (EFI_SEC_PEI_HAND_OFF*)(UINTN) TopOfStack;
- SecCoreData->DataSize = sizeof(EFI_SEC_PEI_HAND_OFF);
- SecCoreData->BootFirmwareVolumeBase = (VOID*)BootFirmwareVolumeBase;
- SecCoreData->BootFirmwareVolumeSize = PcdGet32(PcdWinNtFirmwareFdSize);
- SecCoreData->TemporaryRamBase = (VOID*)(UINTN)LargestRegion;
- SecCoreData->TemporaryRamSize = STACK_SIZE;
- SecCoreData->StackBase = SecCoreData->TemporaryRamBase;
- SecCoreData->StackSize = PeiStackSize;
- SecCoreData->PeiTemporaryRamBase = (VOID*) ((UINTN) SecCoreData->TemporaryRamBase + PeiStackSize);
- SecCoreData->PeiTemporaryRamSize = STACK_SIZE - PeiStackSize;
-
- //
- // Load the PEI Core from a Firmware Volume
- //
- Status = SecWinNtPeiLoadFile (
- PeiCorePe32File,
- &PeiImageAddress,
- &PeiCoreSize,
- &PeiCoreEntryPoint
- );
- if (EFI_ERROR (Status)) {
- return ;
- }
-
- //
- // Transfer control to the PEI Core
- //
- PeiSwitchStacks (
- (SWITCH_STACK_ENTRY_POINT) (UINTN) PeiCoreEntryPoint,
- SecCoreData,
- (VOID *) (UINTN) ((EFI_PEI_PPI_DESCRIPTOR *) &gPrivateDispatchTable),
- NULL,
- TopOfStack
- );
- //
- // If we get here, then the PEI Core returned. This is an error
- //
- return ;
-}
-
-EFI_STATUS
-EFIAPI
-SecWinNtPeiAutoScan (
- IN UINTN Index,
- OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
- OUT UINT64 *MemorySize
- )
-/*++
-
-Routine Description:
- This service is called from Index == 0 until it returns EFI_UNSUPPORTED.
- It allows discontinuous memory regions to be supported by the emulator.
- It uses gSystemMemory[] and gSystemMemoryCount that were created by
- parsing PcdWinNtMemorySizeForSecMain value.
- The size comes from the Pcd value and the address comes from the memory space
- with ReadWrite and Execute attributes allocated by VirtualAlloc() API.
-
-Arguments:
- Index - Which memory region to use
- MemoryBase - Return Base address of memory region
- MemorySize - Return size in bytes of the memory region
-
-Returns:
- EFI_SUCCESS - If memory region was mapped
- EFI_UNSUPPORTED - If Index is not supported
-
---*/
-{
- if (Index >= gSystemMemoryCount) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Allocate enough memory space for emulator
- //
- gSystemMemory[Index].Memory = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (gSystemMemory[Index].Size), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
- if (gSystemMemory[Index].Memory == 0) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- *MemoryBase = gSystemMemory[Index].Memory;
- *MemorySize = gSystemMemory[Index].Size;
-
- return EFI_SUCCESS;
-}
-
-VOID *
-EFIAPI
-SecWinNtWinNtThunkAddress (
- VOID
- )
-/*++
-
-Routine Description:
- Since the SEC is the only Windows program in stack it must export
- an interface to do Win API calls. That's what the WinNtThunk address
- is for. gWinNt is initialized in WinNtThunk.c.
-
-Arguments:
- InterfaceSize - sizeof (EFI_WIN_NT_THUNK_PROTOCOL);
- InterfaceBase - Address of the gWinNt global
-
-Returns:
- EFI_SUCCESS - Data returned
-
---*/
-{
- return gWinNt;
-}
-
-
-EFI_STATUS
-EFIAPI
-SecWinNtPeiLoadFile (
- IN VOID *Pe32Data,
- IN EFI_PHYSICAL_ADDRESS *ImageAddress,
- IN UINT64 *ImageSize,
- IN EFI_PHYSICAL_ADDRESS *EntryPoint
- )
-/*++
-
-Routine Description:
- Loads and relocates a PE/COFF image into memory.
-
-Arguments:
- Pe32Data - The base address of the PE/COFF file that is to be loaded and relocated
- ImageAddress - The base address of the relocated PE/COFF image
- ImageSize - The size of the relocated PE/COFF image
- EntryPoint - The entry point of the relocated PE/COFF image
-
-Returns:
- EFI_SUCCESS - The file was loaded and relocated
- EFI_OUT_OF_RESOURCES - There was not enough memory to load and relocate the PE/COFF file
-
---*/
-{
- EFI_STATUS Status;
- PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;
-
- ZeroMem (&ImageContext, sizeof (ImageContext));
- ImageContext.Handle = Pe32Data;
-
- ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) SecImageRead;
-
- Status = PeCoffLoaderGetImageInfo (&ImageContext);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- //
- // Allocate space in NT (not emulator) memory with ReadWrite and Execute attribute.
- // Extra space is for alignment
- //
- ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (ImageContext.ImageSize + (ImageContext.SectionAlignment * 2)), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
- if (ImageContext.ImageAddress == 0) {
- return EFI_OUT_OF_RESOURCES;
- }
- //
- // Align buffer on section boundary
- //
- ImageContext.ImageAddress += ImageContext.SectionAlignment - 1;
- ImageContext.ImageAddress &= ~((EFI_PHYSICAL_ADDRESS)ImageContext.SectionAlignment - 1);
-
- Status = PeCoffLoaderLoadImage (&ImageContext);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = SecNt32PeCoffRelocateImage (&ImageContext);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // BugBug: Flush Instruction Cache Here when CPU Lib is ready
- //
-
- *ImageAddress = ImageContext.ImageAddress;
- *ImageSize = ImageContext.ImageSize;
- *EntryPoint = ImageContext.EntryPoint;
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-SecWinNtFdAddress (
- IN UINTN Index,
- IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
- IN OUT UINT64 *FdSize
- )
-/*++
-
-Routine Description:
- Return the FD Size and base address. Since the FD is loaded from a
- file into Windows memory only the SEC will know it's address.
-
-Arguments:
- Index - Which FD, starts at zero.
- FdSize - Size of the FD in bytes
- FdBase - Start address of the FD. Assume it points to an FV Header
-
-Returns:
- EFI_SUCCESS - Return the Base address and size of the FV
- EFI_UNSUPPORTED - Index does not map to an FD in the system
-
---*/
-{
- if (Index >= gFdInfoCount) {
- return EFI_UNSUPPORTED;
- }
-
- *FdBase = gFdInfo[Index].Address;
- *FdSize = gFdInfo[Index].Size;
-
- if (*FdBase == 0 && *FdSize == 0) {
- return EFI_UNSUPPORTED;
- }
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-SecImageRead (
- IN VOID *FileHandle,
- IN UINTN FileOffset,
- IN OUT UINTN *ReadSize,
- OUT VOID *Buffer
- )
-/*++
-
-Routine Description:
- Support routine for the PE/COFF Loader that reads a buffer from a PE/COFF file
-
-Arguments:
- FileHandle - The handle to the PE/COFF file
- FileOffset - The offset, in bytes, into the file to read
- ReadSize - The number of bytes to read from the file starting at FileOffset
- Buffer - A pointer to the buffer to read the data into.
-
-Returns:
- EFI_SUCCESS - ReadSize bytes of data were read into Buffer from the PE/COFF file starting at FileOffset
-
---*/
-{
- CHAR8 *Destination8;
- CHAR8 *Source8;
- UINTN Length;
-
- Destination8 = Buffer;
- Source8 = (CHAR8 *) ((UINTN) FileHandle + FileOffset);
- Length = *ReadSize;
- while (Length--) {
- *(Destination8++) = *(Source8++);
- }
-
- return EFI_SUCCESS;
-}
-
-CHAR16 *
-AsciiToUnicode (
- IN CHAR8 *Ascii,
- IN UINTN *StrLen OPTIONAL
- )
-/*++
-
-Routine Description:
- Convert the passed in Ascii string to Unicode.
- Optionally return the length of the strings.
-
-Arguments:
- Ascii - Ascii string to convert
- StrLen - Length of string
-
-Returns:
- Pointer to malloc'ed Unicode version of Ascii
-
---*/
-{
- UINTN Index;
- CHAR16 *Unicode;
-
- //
- // Allocate a buffer for unicode string
- //
- for (Index = 0; Ascii[Index] != '\0'; Index++)
- ;
- Unicode = malloc ((Index + 1) * sizeof (CHAR16));
- if (Unicode == NULL) {
- return NULL;
- }
-
- for (Index = 0; Ascii[Index] != '\0'; Index++) {
- Unicode[Index] = (CHAR16) Ascii[Index];
- }
-
- Unicode[Index] = '\0';
-
- if (StrLen != NULL) {
- *StrLen = Index;
- }
-
- return Unicode;
-}
-
-UINTN
-CountSeparatorsInString (
- IN CONST CHAR16 *String,
- IN CHAR16 Separator
- )
-/*++
-
-Routine Description:
- Count the number of separators in String
-
-Arguments:
- String - String to process
- Separator - Item to count
-
-Returns:
- Number of Separator in String
-
---*/
-{
- UINTN Count;
-
- for (Count = 0; *String != '\0'; String++) {
- if (*String == Separator) {
- Count++;
- }
- }
-
- return Count;
-}
-
-
-EFI_STATUS
-SecNt32PeCoffRelocateImage (
- IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
- )
-{
- EFI_STATUS Status;
- VOID *DllEntryPoint;
- CHAR16 *DllFileName;
- HMODULE Library;
- UINTN Index;
-
-
- Status = PeCoffLoaderRelocateImage (ImageContext);
- if (EFI_ERROR (Status)) {
- //
- // We could not relocated the image in memory properly
- //
- return Status;
- }
-
- //
- // If we load our own PE COFF images the Windows debugger can not source
- // level debug our code. If a valid PDB pointer exists usw it to load
- // the *.dll file as a library using Windows* APIs. This allows
- // source level debug. The image is still loaded and relocated
- // in the Framework memory space like on a real system (by the code above),
- // but the entry point points into the DLL loaded by the code bellow.
- //
-
- DllEntryPoint = NULL;
-
- //
- // Load the DLL if it's not an EBC image.
- //
- if ((ImageContext->PdbPointer != NULL) &&
- (ImageContext->Machine != EFI_IMAGE_MACHINE_EBC)) {
- //
- // Convert filename from ASCII to Unicode
- //
- DllFileName = AsciiToUnicode (ImageContext->PdbPointer, &Index);
-
- //
- // Check that we have a valid filename
- //
- if (Index < 5 || DllFileName[Index - 4] != '.') {
- free (DllFileName);
-
- //
- // Never return an error if PeCoffLoaderRelocateImage() succeeded.
- // The image will run, but we just can't source level debug. If we
- // return an error the image will not run.
- //
- return EFI_SUCCESS;
- }
- //
- // Replace .PDB with .DLL on the filename
- //
- DllFileName[Index - 3] = 'D';
- DllFileName[Index - 2] = 'L';
- DllFileName[Index - 1] = 'L';
-
- //
- // Load the .DLL file into the user process's address space for source
- // level debug
- //
- Library = LoadLibraryEx (DllFileName, NULL, DONT_RESOLVE_DLL_REFERENCES);
- if (Library != NULL) {
- //
- // InitializeDriver is the entry point we put in all our EFI DLL's. The
- // DONT_RESOLVE_DLL_REFERENCES argument to LoadLIbraryEx() suppresses the
- // normal DLL entry point of DllMain, and prevents other modules that are
- // referenced in side the DllFileName from being loaded. There is no error
- // checking as the we can point to the PE32 image loaded by Tiano. This
- // step is only needed for source level debugging
- //
- DllEntryPoint = (VOID *) (UINTN) GetProcAddress (Library, "InitializeDriver");
-
- }
-
- if ((Library != NULL) && (DllEntryPoint != NULL)) {
- ImageContext->EntryPoint = (EFI_PHYSICAL_ADDRESS) (UINTN) DllEntryPoint;
- SecPrint ("LoadLibraryEx (%S,\n NULL, DONT_RESOLVE_DLL_REFERENCES)\n", DllFileName);
- } else {
- SecPrint ("WARNING: No source level debug %S. \n", DllFileName);
- }
-
- free (DllFileName);
- }
-
- //
- // Never return an error if PeCoffLoaderRelocateImage() succeeded.
- // The image will run, but we just can't source level debug. If we
- // return an error the image will not run.
- //
- return EFI_SUCCESS;
-}
-
-
-
-
-VOID
-_ModuleEntryPoint (
- VOID
- )
-{
-}
-
-EFI_STATUS
-EFIAPI
-SecTemporaryRamSupport (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
- IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
- IN UINTN CopySize
- )
-{
- //
- // Migrate the whole temporary memory to permanent memory.
- //
- CopyMem (
- (VOID*)(UINTN)PermanentMemoryBase,
- (VOID*)(UINTN)TemporaryMemoryBase,
- CopySize
- );
-
- //
- // SecSwitchStack function must be invoked after the memory migration
- // immediately, also we need fixup the stack change caused by new call into
- // permanent memory.
- //
- SecSwitchStack (
- (UINT32) TemporaryMemoryBase,
- (UINT32) PermanentMemoryBase
- );
-
- //
- // We need *not* fix the return address because currently,
- // The PeiCore is executed in flash.
- //
-
- //
- // Simulate to invalid temporary memory, terminate temporary memory
- //
- //ZeroMem ((VOID*)(UINTN)TemporaryMemoryBase, CopySize);
-
- return EFI_SUCCESS;
-}
-
diff --git a/Nt32Pkg/Sec/SecMain.h b/Nt32Pkg/Sec/SecMain.h deleted file mode 100644 index 8b198789b2..0000000000 --- a/Nt32Pkg/Sec/SecMain.h +++ /dev/null @@ -1,559 +0,0 @@ -/**@file
-
-Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-Module Name:
- SecMain.h
-
-Abstract:
- Include file for Windows API based SEC
-
-**/
-
-#include <stdio.h>
-#include <PiPei.h>
-#include <WinNtPeim.h>
-#include <Guid/StatusCodeDataTypeDebug.h>
-#include <Library/BaseLib.h>
-#include <Library/PeCoffLib.h>
-#include <Ppi/NtPeiLoadFile.h>
-#include <Ppi/NtAutoscan.h>
-#include <Ppi/NtThunk.h>
-#include <Ppi/StatusCode.h>
-#include <Ppi/NtFwh.h>
-#include <Ppi/TemporaryRamSupport.h>
-#include <Library/PcdLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PrintLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/ReportStatusCodeLib.h>
-
-#include <IndustryStandard/PeImage.h>
-
-#define STACK_SIZE 0x20000
-
-typedef struct {
- EFI_PHYSICAL_ADDRESS Address;
- UINT64 Size;
-} NT_FD_INFO;
-
-typedef struct {
- EFI_PHYSICAL_ADDRESS Memory;
- UINT64 Size;
-} NT_SYSTEM_MEMORY;
-
-#define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100
-
-typedef struct {
- CHAR8 *PdbPointer;
- VOID *ModHandle;
-} PDB_NAME_TO_MOD_HANDLE;
-
-
-
-
-EFI_STATUS
-EFIAPI
-SecWinNtPeiLoadFile (
- VOID *Pe32Data, // TODO: add IN/OUT modifier to Pe32Data
- EFI_PHYSICAL_ADDRESS *ImageAddress, // TODO: add IN/OUT modifier to ImageAddress
- UINT64 *ImageSize, // TODO: add IN/OUT modifier to ImageSize
- EFI_PHYSICAL_ADDRESS *EntryPoint // TODO: add IN/OUT modifier to EntryPoint
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- Pe32Data - TODO: add argument description
- ImageAddress - TODO: add argument description
- ImageSize - TODO: add argument description
- EntryPoint - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-SecWinNtPeiAutoScan (
- IN UINTN Index,
- OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
- OUT UINT64 *MemorySize
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- Index - TODO: add argument description
- MemoryBase - TODO: add argument description
- MemorySize - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-VOID *
-EFIAPI
-SecWinNtWinNtThunkAddress (
- VOID
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- InterfaceSize - TODO: add argument description
- InterfaceBase - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-SecWinNtWinNtFwhAddress (
- IN OUT UINT64 *FwhSize,
- IN OUT EFI_PHYSICAL_ADDRESS *FwhBase
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- FwhSize - TODO: add argument description
- FwhBase - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-SecPeiReportStatusCode (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN CONST EFI_GUID * CallerId,
- IN CONST EFI_STATUS_CODE_DATA * Data OPTIONAL
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- PeiServices - TODO: add argument description
- CodeType - TODO: add argument description
- Value - TODO: add argument description
- Instance - TODO: add argument description
- CallerId - TODO: add argument description
- Data - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-INTN
-EFIAPI
-main (
- IN INTN Argc,
- IN CHAR8 **Argv,
- IN CHAR8 **Envp
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- Argc - TODO: add argument description
- Argv - TODO: add argument description
- Envp - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-WinNtOpenFile (
- CHAR16 *FileName,
- UINT32 MapSize,
- DWORD CreationDispostion,
- EFI_PHYSICAL_ADDRESS *BaseAddress,
- UINT64 *Length
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- FileName - TODO: add argument description
- MapSize - TODO: add argument description
- CreationDispostion - TODO: add argument description
- BaseAddress - TODO: add argument description
- Length - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-VOID
-SecLoadFromCore (
- IN UINTN LargestRegion,
- IN UINTN LargestRegionSize,
- IN UINTN BootFirmwareVolumeBase,
- IN VOID *PeiCoreFile
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- LargestRegion - TODO: add argument description
- LargestRegionSize - TODO: add argument description
- BootFirmwareVolumeBase - TODO: add argument description
- PeiCoreFile - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-SecLoadFile (
- IN VOID *Pe32Data,
- IN EFI_PHYSICAL_ADDRESS *ImageAddress,
- IN UINT64 *ImageSize,
- IN EFI_PHYSICAL_ADDRESS *EntryPoint
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- Pe32Data - TODO: add argument description
- ImageAddress - TODO: add argument description
- ImageSize - TODO: add argument description
- EntryPoint - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-SecFfsFindPeiCore (
- IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
- OUT VOID **Pe32Data
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- FwVolHeader - TODO: add argument description
- Pe32Data - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-SecFfsFindNextFile (
- IN EFI_FV_FILETYPE SearchType,
- IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
- IN OUT EFI_FFS_FILE_HEADER **FileHeader
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- SearchType - TODO: add argument description
- FwVolHeader - TODO: add argument description
- FileHeader - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-SecFfsFindSectionData (
- IN EFI_SECTION_TYPE SectionType,
- IN EFI_FFS_FILE_HEADER *FfsFileHeader,
- IN OUT VOID **SectionData
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- SectionType - TODO: add argument description
- FfsFileHeader - TODO: add argument description
- SectionData - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-SecWinNtPeCoffLoaderLoadAsDll (
- IN CHAR8 *PdbFileName,
- IN VOID **ImageEntryPoint,
- OUT VOID **ModHandle
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- PdbFileName - TODO: add argument description
- ImageEntryPoint - TODO: add argument description
- ModHandle - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-SecWinNtPeCoffLoaderFreeLibrary (
- OUT VOID *ModHandle
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- ModHandle - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-;
-
-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
-GetImageReadFunction (
- IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
- IN EFI_PHYSICAL_ADDRESS *TopOfMemory
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- ImageContext - TODO: add argument description
- TopOfMemory - 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
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-SecTemporaryRamSupport (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
- IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
- IN UINTN CopySize
- );
-
-
-extern EFI_WIN_NT_THUNK_PROTOCOL *gWinNt;
diff --git a/Nt32Pkg/Sec/SecMain.inf b/Nt32Pkg/Sec/SecMain.inf deleted file mode 100644 index 423a3c7c48..0000000000 --- a/Nt32Pkg/Sec/SecMain.inf +++ /dev/null @@ -1,90 +0,0 @@ -## @file
-# Entry Point of NT32 Emulator
-#
-# Main executable file of NT32 Emulator that loads PEI core after initialization finished.
-#
-# Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SecMain
- FILE_GUID = 4b837b03-6587-4d19-b82b-edfad836c0a0
- MODULE_TYPE = USER_DEFINED
- VERSION_STRING = 1.0
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32
-#
-
-[Sources]
- SecMain.h
- WinNtThunk.c
- FwVol.c
- SecMain.c
-
-[Sources.ia32]
- Stack.asm
-
-[Sources.x64]
- StackX64.asm
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- Nt32Pkg/Nt32Pkg.dec
-
-[LibraryClasses]
- DebugLib
- PcdLib
- PrintLib
- BaseMemoryLib
- BaseLib
- PeCoffLib
- ReportStatusCodeLib
-
-[Ppis]
- gNtPeiLoadFilePpiGuid # PPI ALWAYS_PRODUCED
- gEfiPeiStatusCodePpiGuid # PPI ALWAYS_PRODUCED
- gNtFwhPpiGuid # PPI ALWAYS_PRODUCED
- gPeiNtAutoScanPpiGuid # PPI ALWAYS_PRODUCED
- gPeiNtThunkPpiGuid # PPI ALWAYS_PRODUCED
- gEfiTemporaryRamSupportPpiGuid
-
-[Pcd]
- gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode
- gEfiNt32PkgTokenSpaceGuid.PcdWinNtFirmwareFdSize
- gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySizeForSecMain
- gEfiNt32PkgTokenSpaceGuid.PcdWinNtFirmwareVolume
-
-[BuildOptions]
- MSFT:*_*_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x86" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x86" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib
- MSFT:*_VS2015_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x86" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x86" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib
- MSFT:*_VS2015x86_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x86" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x86" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib
- MSFT:*_*_IA32_CC_FLAGS == /nologo /W4 /WX /Gy /c /D UNICODE /Od /FIAutoGen.h /EHs-c- /GF /Gs8192 /Zi /Gm /D _CRT_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_DEPRECATE
- MSFT:*_*_IA32_PP_FLAGS == /nologo /E /TC /FIAutoGen.h
- MSFT:*_*_IA32_ASM_FLAGS == /nologo /W3 /WX /c /coff /Cx /Zd /W0 /Zi
- MSFT:*_*_IA32_ASMLINK_FLAGS == /link /nologo /tiny
-
- MSFT:*_*_X64_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib\AMD64" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:AMD64 /LTCG Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib
- MSFT:*_VS2015_X64_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib\AMD64" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:AMD64 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib
- MSFT:*_VS2015x86_X64_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib\AMD64" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:AMD64 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib
- MSFT:*_*_X64_CC_FLAGS == /nologo /W4 /WX /Gy /c /D UNICODE /Od /FIAutoGen.h /EHs-c- /GF /Gs8192 /Zi /Gm /D _CRT_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_DEPRECATE
- MSFT:*_*_X64_PP_FLAGS == /nologo /E /TC /FIAutoGen.h
- MSFT:*_*_X64_ASM_FLAGS == /nologo /W3 /WX /c /Cx /Zd /W0 /Zi
- MSFT:*_*_X64_ASMLINK_FLAGS == /link /nologo
-
- INTEL:*_*_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"C:\Program Files\Intel\Compiler\C++\9.1\IA32\Lib" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib
- INTEL:*_*_IA32_CC_FLAGS == /nologo /W4 /WX /Gy /c /D UNICODE /Od /FIAutoGen.h /EHs-c- /GF /Gs8192 /Zi /Gm /D _CRT_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_DEPRECATE
- INTEL:*_*_IA32_PP_FLAGS == /nologo /E /TC /FIAutoGen.h
- INTEL:*_*_IA32_ASM_FLAGS == /nologo /W3 /WX /c /coff /Cx /Zd /W0 /Zi
- INTEL:*_*_IA32_ASMLINK_FLAGS == /link /nologo /tiny
diff --git a/Nt32Pkg/Sec/Stack.asm b/Nt32Pkg/Sec/Stack.asm deleted file mode 100644 index 7defff6bb1..0000000000 --- a/Nt32Pkg/Sec/Stack.asm +++ /dev/null @@ -1,94 +0,0 @@ -;------------------------------------------------------------------------------
-;
-; Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
-; This program and the accompanying materials
-; are licensed and made available under the terms and conditions of the BSD License
-; which accompanies this distribution. The full text of the license may be found at
-; http://opensource.org/licenses/bsd-license.php
-;
-; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-;
-; Module Name:
-;
-; Stack.asm
-;
-; Abstract:
-;
-; Switch the stack from temporary memory to permenent memory.
-;
-;------------------------------------------------------------------------------
-
- .586p
- .model flat,C
- .code
-
-;------------------------------------------------------------------------------
-; VOID
-; EFIAPI
-; SecSwitchStack (
-; UINT32 TemporaryMemoryBase,
-; UINT32 PermenentMemoryBase
-; );
-;------------------------------------------------------------------------------
-SecSwitchStack PROC
- ;
- ; Save three register: eax, ebx, ecx
- ;
- push eax
- push ebx
- push ecx
- push edx
-
- ;
- ; !!CAUTION!! this function address's is pushed into stack after
- ; migration of whole temporary memory, so need save it to permenent
- ; memory at first!
- ;
-
- mov ebx, [esp + 20] ; Save the first parameter
- mov ecx, [esp + 24] ; Save the second parameter
-
- ;
- ; Save this function's return address into permenent memory at first.
- ; Then, Fixup the esp point to permenent memory
- ;
- mov eax, esp
- sub eax, ebx
- add eax, ecx
- mov edx, dword ptr [esp] ; copy pushed register's value to permenent memory
- mov dword ptr [eax], edx
- mov edx, dword ptr [esp + 4]
- mov dword ptr [eax + 4], edx
- mov edx, dword ptr [esp + 8]
- mov dword ptr [eax + 8], edx
- mov edx, dword ptr [esp + 12]
- mov dword ptr [eax + 12], edx
- mov edx, dword ptr [esp + 16] ; Update this function's return address into permenent memory
- mov dword ptr [eax + 16], edx
- mov esp, eax ; From now, esp is pointed to permenent memory
-
- ;
- ; Fixup the ebp point to permenent memory
- ;
- mov eax, ebp
- sub eax, ebx
- add eax, ecx
- mov ebp, eax ; From now, ebp is pointed to permenent memory
-
- ;
- ; Fixup callee's ebp point for PeiDispatch
- ;
- mov eax, dword ptr [ebp]
- sub eax, ebx
- add eax, ecx
- mov dword ptr [ebp], eax ; From now, Temporary's PPI caller's stack is in permenent memory
-
- pop edx
- pop ecx
- pop ebx
- pop eax
- ret
-SecSwitchStack ENDP
-
- END
diff --git a/Nt32Pkg/Sec/StackX64.asm b/Nt32Pkg/Sec/StackX64.asm deleted file mode 100644 index 2327e2eeac..0000000000 --- a/Nt32Pkg/Sec/StackX64.asm +++ /dev/null @@ -1,110 +0,0 @@ -;------------------------------------------------------------------------------
-;
-; Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
-; This program and the accompanying materials
-; are licensed and made available under the terms and conditions of the BSD License
-; which accompanies this distribution. The full text of the license may be found at
-; http://opensource.org/licenses/bsd-license.php
-;
-; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-;
-; Module Name:
-;
-; Stack.asm
-;
-; Abstract:
-;
-; Switch the stack from temporary memory to permenent memory.
-;
-;------------------------------------------------------------------------------
-
- .code
-
-;------------------------------------------------------------------------------
-; VOID
-; EFIAPI
-; SecSwitchStack (
-; UINT32 TemporaryMemoryBase,
-; UINT32 PermenentMemoryBase
-; );
-;------------------------------------------------------------------------------
-SecSwitchStack PROC
- mov [rsp + 08h], rcx
- mov [rsp + 10h], rdx
-
- ;
- ; Save three register: eax, ebx, ecx
- ;
- push rax
- push rbx
- push rcx
- push rdx
-
- ;
- ; !!CAUTION!! this function address's is pushed into stack after
- ; migration of whole temporary memory, so need save it to permenent
- ; memory at first!
- ;
-
- mov rbx, [rsp + 28h] ; Save the first parameter
- mov rcx, [rsp + 30h] ; Save the second parameter
-
- ;
- ; Save this function's return address into permenent memory at first.
- ; Then, Fixup the esp point to permenent memory
- ;
- mov rax, rsp
- sub rax, rbx
- add rax, rcx
- mov rdx, qword ptr [rsp] ; copy pushed register's value to permenent memory
- mov qword ptr [rax], rdx
- mov rdx, qword ptr [rsp + 8]
- mov qword ptr [rax + 8], rdx
- mov rdx, qword ptr [rsp + 10h]
- mov qword ptr [rax + 10h], rdx
- mov rdx, qword ptr [rsp + 18h]
- mov qword ptr [rax + 18h], rdx
- mov rdx, qword ptr [rsp + 20h] ; Update this function's return address into permenent memory
- mov qword ptr [rax + 20h], rdx
- mov rsp, rax ; From now, esp is pointed to permenent memory
-
- ;
- ; Fixup the ebp point to permenent memory
- ;
- mov rax, rbp
- sub rax, rbx
- add rax, rcx
- mov rbp, rax ; From now, ebp is pointed to permenent memory
-
- pop rdx
- pop rcx
- pop rbx
- pop rax
- ret
-SecSwitchStack ENDP
-
-;------------------------------------------------------------------------------
-; VOID
-; EFIAPI
-; PeiSwitchStacks (
-; IN SWITCH_STACK_ENTRY_POINT EntryPoint,
-; IN VOID *Context1, OPTIONAL
-; IN VOID *Context2, OPTIONAL
-; IN VOID *Context3, OPTIONAL
-; IN VOID *NewStack
-; )
-;------------------------------------------------------------------------------
-PeiSwitchStacks PROC
- mov rax, rcx
- mov rcx, rdx
- mov rdx, r8
- mov r8, r9
- mov rsp, [rsp + 28h]
- sub rsp, 20h
- call rax
- jmp $
- ret
-PeiSwitchStacks ENDP
-
- END
diff --git a/Nt32Pkg/Sec/WinNtThunk.c b/Nt32Pkg/Sec/WinNtThunk.c deleted file mode 100644 index 3159ef483b..0000000000 --- a/Nt32Pkg/Sec/WinNtThunk.c +++ /dev/null @@ -1,187 +0,0 @@ -/**@file
-
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- WinNtThunk.c
-
-Abstract:
-
- Since the SEC is the only windows program in our emulation we
- must use a Tiano mechanism to export Win32 APIs to other modules.
- This is the role of the EFI_WIN_NT_THUNK_PROTOCOL.
-
- The mWinNtThunkTable exists so that a change to EFI_WIN_NT_THUNK_PROTOCOL
- will cause an error in initializing the array if all the member functions
- are not added. It looks like adding a element to end and not initializing
- it may cause the table to be initaliized with the members at the end being
- set to zero. This is bad as jumping to zero will case the NT32 to crash.
-
- All the member functions in mWinNtThunkTable are Win32
- API calls, so please reference Microsoft documentation.
-
-
- gWinNt is a a public exported global that contains the initialized
- data.
-
-**/
-
-#include "SecMain.h"
-
-//
-// This pragma is needed for all the DLL entry points to be asigned to the array.
-// if warning 4232 is not dissabled a warning will be generated as a DLL entry
-// point could be modified dynamically. The SEC does not do that, so we must
-// disable the warning so we can compile the SEC. The previous method was to
-// asign each element in code. The disadvantage to that approach is it's harder
-// to tell if all the elements have been initialized properly.
-//
-#pragma warning(disable : 4232)
-#pragma warning(disable : 4996)
-
-#if __INTEL_COMPILER
-#pragma warning ( disable : 144 )
-#endif
-
-EFI_WIN_NT_THUNK_PROTOCOL mWinNtThunkTable = {
- EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE,
- GetProcAddress,
- GetTickCount,
- LoadLibraryEx,
- FreeLibrary,
- SetPriorityClass,
- SetThreadPriority,
- Sleep,
- SuspendThread,
- GetCurrentThread,
- GetCurrentThreadId,
- GetCurrentProcess,
- CreateThread,
- TerminateThread,
- SendMessage,
- ExitThread,
- ResumeThread,
- DuplicateHandle,
- InitializeCriticalSection,
- EnterCriticalSection,
- LeaveCriticalSection,
- DeleteCriticalSection,
- TlsAlloc,
- TlsFree,
- TlsSetValue,
- TlsGetValue,
- CreateSemaphore,
- WaitForSingleObject,
- ReleaseSemaphore,
- CreateConsoleScreenBuffer,
- FillConsoleOutputAttribute,
- FillConsoleOutputCharacter,
- GetConsoleCursorInfo,
- GetNumberOfConsoleInputEvents,
- PeekConsoleInput,
- ScrollConsoleScreenBuffer,
- ReadConsoleInput,
- SetConsoleActiveScreenBuffer,
- SetConsoleCursorInfo,
- SetConsoleCursorPosition,
- SetConsoleScreenBufferSize,
- SetConsoleTitleW,
- WriteConsoleInput,
- WriteConsoleOutput,
- CreateFile,
- DeviceIoControl,
- CreateDirectory,
- RemoveDirectory,
- GetFileAttributes,
- SetFileAttributes,
- CreateFileMapping,
- CloseHandle,
- DeleteFile,
- FindFirstFile,
- FindNextFile,
- FindClose,
- FlushFileBuffers,
- GetEnvironmentVariable,
- GetLastError,
- SetErrorMode,
- GetStdHandle,
- MapViewOfFileEx,
- ReadFile,
- SetEndOfFile,
- SetFilePointer,
- WriteFile,
- GetFileInformationByHandle,
- GetDiskFreeSpace,
- GetDiskFreeSpaceEx,
- MoveFile,
- SetFileTime,
- SystemTimeToFileTime,
- LocalFileTimeToFileTime,
- FileTimeToLocalFileTime,
- FileTimeToSystemTime,
- GetSystemTime,
- SetSystemTime,
- GetLocalTime,
- SetLocalTime,
- GetTimeZoneInformation,
- SetTimeZoneInformation,
- timeSetEvent,
- timeKillEvent,
- ClearCommError,
- EscapeCommFunction,
- GetCommModemStatus,
- GetCommState,
- SetCommState,
- PurgeComm,
- SetCommTimeouts,
- ExitProcess,
- _snwprintf,
- GetDesktopWindow,
- GetForegroundWindow,
- CreateWindowEx,
- ShowWindow,
- UpdateWindow,
- DestroyWindow,
- InvalidateRect,
- GetWindowDC,
- GetClientRect,
- AdjustWindowRect,
- SetDIBitsToDevice,
- BitBlt,
- GetDC,
- ReleaseDC,
- RegisterClassEx,
- UnregisterClass,
- BeginPaint,
- EndPaint,
- PostQuitMessage,
- DefWindowProc,
- LoadIcon,
- LoadCursor,
- GetStockObject,
- SetViewportOrgEx,
- SetWindowOrgEx,
- MoveWindow,
- GetWindowRect,
- GetMessage,
- TranslateMessage,
- DispatchMessage,
- GetProcessHeap,
- HeapAlloc,
- HeapFree,
- QueryPerformanceCounter,
- QueryPerformanceFrequency
-};
-
-#pragma warning(default : 4996)
-#pragma warning(default : 4232)
-
-EFI_WIN_NT_THUNK_PROTOCOL *gWinNt = &mWinNtThunkTable;
|