We enabled X64 native version NT32, and made it works on Windows 7 X64 OS.

Signed-off-by: Jiamin Ma <mjmthy@gmail.com>
Reviewed by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed by: Liming Gao <liming.gao@intel.com>
Reviewed by: Jiewen Yao <jiewen.yao@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14766 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Jiamin Ma 2013-10-12 06:31:55 +00:00 committed by jyao1
parent 09acdc0b24
commit f66a43b26e
17 changed files with 234 additions and 62 deletions

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -467,7 +467,7 @@ Returns:
ASSERT (CpuVerStrLen <= SMBIOS_STRING_MAX_LENGTH); ASSERT (CpuVerStrLen <= SMBIOS_STRING_MAX_LENGTH);
TotalSize = sizeof(SMBIOS_TABLE_TYPE4) + CpuVerStrLen + 1 + 1; TotalSize = (UINT32)(sizeof(SMBIOS_TABLE_TYPE4) + CpuVerStrLen + 1 + 1);
SmbiosRecord = AllocatePool(TotalSize); SmbiosRecord = AllocatePool(TotalSize);
ZeroMem(SmbiosRecord, TotalSize); ZeroMem(SmbiosRecord, TotalSize);

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -326,11 +326,11 @@ Returns:
} }
Width = (EFI_CPU_IO_PROTOCOL_WIDTH)(Width & 0x03); Width = (EFI_CPU_IO_PROTOCOL_WIDTH)(Width & 0x03);
if (Address - 1 + (1 << Width) * Count > Limit) { if (Address - 1 + ((UINTN)1 << Width) * Count > Limit) {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
AlignMask = (1 << Width) - 1; AlignMask = ((UINTN)1 << Width) - 1;
if ((UINTN) Buffer & AlignMask) { if ((UINTN) Buffer & AlignMask) {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }

View File

@ -950,7 +950,7 @@ Returns:
// //
// Check input parameters // Check input parameters
// //
if (NumOfLba == 0 || (StartingLba + NumOfLba) > NumOfBlocks) { if ((NumOfLba == 0) || ((StartingLba + NumOfLba) > NumOfBlocks)) {
VA_END (args); VA_END (args);
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -34,9 +34,11 @@ Abstract:
#define GUID _WINNT_DUP_GUID_____ #define GUID _WINNT_DUP_GUID_____
#define _LIST_ENTRY _WINNT_DUP_LIST_ENTRY_FORWARD #define _LIST_ENTRY _WINNT_DUP_LIST_ENTRY_FORWARD
#define LIST_ENTRY _WINNT_DUP_LIST_ENTRY #define LIST_ENTRY _WINNT_DUP_LIST_ENTRY
#if defined (MDE_CPU_IA32)
#define InterlockedIncrement _WINNT_DUP_InterlockedIncrement #define InterlockedIncrement _WINNT_DUP_InterlockedIncrement
#define InterlockedDecrement _WINNT_DUP_InterlockedDecrement #define InterlockedDecrement _WINNT_DUP_InterlockedDecrement
#define InterlockedCompareExchange64 _WINNT_DUP_InterlockedCompareExchange64 #define InterlockedCompareExchange64 _WINNT_DUP_InterlockedCompareExchange64
#endif
#undef UNALIGNED #undef UNALIGNED
#undef CONST #undef CONST
#undef VOID #undef VOID
@ -45,7 +47,9 @@ Abstract:
// WQBugBug: This typedef is to make "windows.h" buildable. // WQBugBug: This typedef is to make "windows.h" buildable.
// It should be removed after the root cause why // It should be removed after the root cause why
// size_t is undefined when go into the line below is found. // size_t is undefined when go into the line below is found.
#if defined (MDE_CPU_IA32)
typedef UINT32 size_t ; typedef UINT32 size_t ;
#endif
#include "windows.h" #include "windows.h"

View File

@ -1,7 +1,7 @@
/** @file /** @file
OEM hook status code library functions with no library constructor/destructor OEM hook status code library functions with no library constructor/destructor
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -145,7 +145,7 @@ OemHookStatusCodeReport (
mWinNt->WriteFile ( mWinNt->WriteFile (
mStdOut, mStdOut,
Buffer, Buffer,
CharCount, (DWORD)CharCount,
(LPDWORD)&CharCount, (LPDWORD)&CharCount,
NULL NULL
); );
@ -228,7 +228,7 @@ OemHookStatusCodeReport (
mWinNt->WriteFile ( mWinNt->WriteFile (
mStdOut, mStdOut,
Buffer, Buffer,
CharCount, (DWORD)CharCount,
(LPDWORD)&CharCount, (LPDWORD)&CharCount,
NULL NULL
); );

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -319,6 +319,6 @@ PeCoffGetSizeOfHeaders (
SizeOfHeaders = 0; SizeOfHeaders = 0;
} }
return SizeOfHeaders; return (UINT32) SizeOfHeaders;
} }

View File

@ -1,7 +1,7 @@
/** @file /** @file
OEM hook status code library functions with no library constructor/destructor OEM hook status code library functions with no library constructor/destructor
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -154,7 +154,7 @@ OemHookStatusCodeReport (
mWinNt->WriteFile ( mWinNt->WriteFile (
mStdOut, mStdOut,
Buffer, Buffer,
CharCount, (DWORD)CharCount,
(LPDWORD)&CharCount, (LPDWORD)&CharCount,
NULL NULL
); );
@ -237,7 +237,7 @@ OemHookStatusCodeReport (
mWinNt->WriteFile ( mWinNt->WriteFile (
mStdOut, mStdOut,
Buffer, Buffer,
CharCount, (DWORD)CharCount,
(LPDWORD)&CharCount, (LPDWORD)&CharCount,
NULL NULL
); );

View File

@ -27,7 +27,7 @@
PLATFORM_VERSION = 0.4 PLATFORM_VERSION = 0.4
DSC_SPECIFICATION = 0x00010005 DSC_SPECIFICATION = 0x00010005
OUTPUT_DIRECTORY = Build/NT32 OUTPUT_DIRECTORY = Build/NT32
SUPPORTED_ARCHITECTURES = IA32 SUPPORTED_ARCHITECTURES = IA32|X64
BUILD_TARGETS = DEBUG|RELEASE BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT SKUID_IDENTIFIER = DEFAULT
FLASH_DEFINITION = Nt32Pkg/Nt32Pkg.fdf FLASH_DEFINITION = Nt32Pkg/Nt32Pkg.fdf
@ -119,6 +119,7 @@
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
CpuExceptionHandlerLib|MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLibNull.inf CpuExceptionHandlerLib|MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLibNull.inf
LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE !if $(SECURE_BOOT_ENABLE) == TRUE
PlatformSecureLib|Nt32Pkg/Library/PlatformSecureLib/PlatformSecureLib.inf PlatformSecureLib|Nt32Pkg/Library/PlatformSecureLib/PlatformSecureLib.inf
@ -208,6 +209,7 @@
[PcdsFeatureFlag] [PcdsFeatureFlag]
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|FALSE gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE
@ -239,7 +241,6 @@
################################################################################ ################################################################################
[PcdsDynamicDefault.common.DEFAULT] [PcdsDynamicDefault.common.DEFAULT]
gEfiNt32PkgTokenSpaceGuid.PcdWinNtSerialPort|L"COM1!COM2"|VOID*|20 gEfiNt32PkgTokenSpaceGuid.PcdWinNtSerialPort|L"COM1!COM2"|VOID*|20
gEfiNt32PkgTokenSpaceGuid.PcdWinNtFileSystem|L".!..\..\..\..\EdkShellBinPkg\Bin\Ia32\Apps"|VOID*|106
gEfiNt32PkgTokenSpaceGuid.PcdWinNtGop|L"UGA Window 1!UGA Window 2"|VOID*|52 gEfiNt32PkgTokenSpaceGuid.PcdWinNtGop|L"UGA Window 1!UGA Window 2"|VOID*|52
gEfiNt32PkgTokenSpaceGuid.PcdWinNtConsole|L"Bus Driver Console Window"|VOID*|52 gEfiNt32PkgTokenSpaceGuid.PcdWinNtConsole|L"Bus Driver Console Window"|VOID*|52
gEfiNt32PkgTokenSpaceGuid.PcdWinNtVirtualDisk|L"FW;40960;512"|VOID*|26 gEfiNt32PkgTokenSpaceGuid.PcdWinNtVirtualDisk|L"FW;40960;512"|VOID*|26
@ -251,6 +252,12 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0 gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0 gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0
[PcdsDynamicDefault.Ia32]
gEfiNt32PkgTokenSpaceGuid.PcdWinNtFileSystem|L".!..\..\..\..\EdkShellBinPkg\Bin\Ia32\Apps"|VOID*|106
[PcdsDynamicDefault.x64]
gEfiNt32PkgTokenSpaceGuid.PcdWinNtFileSystem|L".!..\..\..\..\EdkShellBinPkg\Bin\X64\Apps"|VOID*|106
[PcdsDynamicHii.common.DEFAULT] [PcdsDynamicHii.common.DEFAULT]
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdSetupConOutColumn|L"SetupConsoleConfig"|gEfiNt32PkgTokenSpaceGuid|0x0|80 gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdSetupConOutColumn|L"SetupConsoleConfig"|gEfiNt32PkgTokenSpaceGuid|0x0|80
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdSetupConOutRow|L"SetupConsoleConfig"|gEfiNt32PkgTokenSpaceGuid|0x4|25 gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdSetupConOutRow|L"SetupConsoleConfig"|gEfiNt32PkgTokenSpaceGuid|0x4|25
@ -275,11 +282,15 @@
# generated for it, but the binary will not be put into any firmware volume. # generated for it, but the binary will not be put into any firmware volume.
# #
################################################################################################### ###################################################################################################
[Components.IA32] [Components]
## ##
# SEC Phase modules # SEC Phase modules
## ##
Nt32Pkg/Sec/SecMain.inf Nt32Pkg/Sec/SecMain.inf {
<BuildOptions>
# Add override here, because default X64_CC_FLAGS is already overriden in DSC
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
}
## ##
# PEI Phase modules # PEI Phase modules
@ -315,7 +326,7 @@
NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
<BuildOptions> <BuildOptions>
*_*_IA32_CC_FLAGS = *_*_*_CC_FLAGS =
} }
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf { MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
@ -429,19 +440,24 @@
# #
################################################################################################### ###################################################################################################
[BuildOptions] [BuildOptions]
DEBUG_*_IA32_DLINK_FLAGS = /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000 /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE DEBUG_*_*_DLINK_FLAGS = /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000 /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE
RELEASE_*_IA32_DLINK_FLAGS = /ALIGN:4096 /FILEALIGN:4096 RELEASE_*_*_DLINK_FLAGS = /ALIGN:4096 /FILEALIGN:4096
*_*_IA32_CC_FLAGS = /D EFI_SPECIFICATION_VERSION=0x0002000A /D TIANO_RELEASE_VERSION=0x00080006 *_*_IA32_CC_FLAGS = /D EFI_SPECIFICATION_VERSION=0x0002000A /D TIANO_RELEASE_VERSION=0x00080006
# Add override here, because default X64_CC_FLAGS add /X
DEBUG_*_X64_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Zi /Gm /D EFI_SPECIFICATION_VERSION=0x0002000A /D TIANO_RELEASE_VERSION=0x00080006
RELEASE_*_X64_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /D EFI_SPECIFICATION_VERSION=0x0002000A /D TIANO_RELEASE_VERSION=0x00080006
NOOPT_*_X64_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Zi /Gm /Od /D EFI_SPECIFICATION_VERSION=0x0002000A /D TIANO_RELEASE_VERSION=0x00080006
############################################################################################################# #############################################################################################################
# NOTE: # NOTE:
# The following [Libraries.IA32] section is for building EDK module under the EDKII tool chain. # The following [Libraries] section is for building EDK module under the EDKII tool chain.
# If you want build EDK module for Nt32 platform, please uncomment [Libraries.IA32] section and # If you want build EDK module for Nt32 platform, please uncomment [Libraries] section and
# libraries used by that EDK module. # libraries used by that EDK module.
# Currently, Nt32 platform do not has any EDK style module # Currently, Nt32 platform do not has any EDK style module
# #
# #
#[Libraries.IA32] #[Libraries]
# #
# Libraries common to PEI and DXE # Libraries common to PEI and DXE
# #

View File

@ -270,13 +270,9 @@ INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
# for binary shell, binary fat and logo module. # for binary shell, binary fat and logo module.
# #
################################################################################ ################################################################################
FILE APPLICATION = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile) { INF EdkShellBinPkg/FullShell/FullShell.inf
SECTION PE32 = EdkShellBinPkg/FullShell/Ia32/Shell_Full.efi
}
FILE DRIVER = 961578FE-B6B7-44c3-AF35-6BC705CD2B1F { INF FatBinPkg/EnhancedFatDxe/Fat.inf
SECTION PE32 = FatBinPkg/EnhancedFatDxe/Ia32/Fat.efi
}
FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) { FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
SECTION RAW = MdeModulePkg/Logo/Logo.bmp SECTION RAW = MdeModulePkg/Logo/Logo.bmp
@ -391,3 +387,26 @@ FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
} }
} }
} }
[Rule.Common.UEFI_APPLICATION.BINARY]
FILE APPLICATION = $(NAMED_GUID) {
COMPRESS PI_STD {
GUIDED {
PE32 PE32 |.efi
UI STRING="$(MODULE_NAME)" Optional
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
}
}
}
[Rule.Common.UEFI_DRIVER.BINARY]
FILE DRIVER = $(NAMED_GUID) {
DXE_DEPEX DXE_DEPEX Optional |.depex
COMPRESS PI_STD {
GUIDED {
PE32 PE32 |.efi
UI STRING="$(MODULE_NAME)" Optional
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
}
}
}

View File

@ -109,6 +109,16 @@ SecNt32PeCoffRelocateImage (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext 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 VOID
SecPrint ( SecPrint (
CHAR8 *Format, CHAR8 *Format,
@ -129,7 +139,7 @@ SecPrint (
WriteFile ( WriteFile (
GetStdHandle (STD_OUTPUT_HANDLE), GetStdHandle (STD_OUTPUT_HANDLE),
Buffer, Buffer,
CharCount, (DWORD)CharCount,
(LPDWORD)&CharCount, (LPDWORD)&CharCount,
NULL NULL
); );
@ -505,6 +515,7 @@ Returns:
return EFI_SUCCESS; return EFI_SUCCESS;
} }
#if defined (MDE_CPU_IA32)
/** /**
Transfers control to a function starting with a new stack. Transfers control to a function starting with a new stack.
@ -562,6 +573,7 @@ PeiSwitchStacks (
// //
ASSERT (FALSE); ASSERT (FALSE);
} }
#endif
VOID VOID
SecLoadFromCore ( SecLoadFromCore (

View File

@ -31,8 +31,13 @@
WinNtThunk.c WinNtThunk.c
FwVol.c FwVol.c
SecMain.c SecMain.c
[Sources.ia32]
Stack.asm Stack.asm
[Sources.x64]
StackX64.asm
[Packages] [Packages]
MdePkg/MdePkg.dec MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec MdeModulePkg/MdeModulePkg.dec
@ -68,6 +73,12 @@
MSFT:*_*_IA32_ASM_FLAGS == /nologo /W3 /WX /c /coff /Cx /Zd /W0 /Zi MSFT:*_*_IA32_ASM_FLAGS == /nologo /W3 /WX /c /coff /Cx /Zd /W0 /Zi
MSFT:*_*_IA32_ASMLINK_FLAGS == /link /nologo /tiny 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:"$(VCINSTALLDIR)\PlatformSdk\Lib\AMD64" /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:*_*_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_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_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_PP_FLAGS == /nologo /E /TC /FIAutoGen.h

110
Nt32Pkg/Sec/StackX64.asm Normal file
View File

@ -0,0 +1,110 @@
;------------------------------------------------------------------------------
;
; 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

View File

@ -1,6 +1,6 @@
/** @file /** @file
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -704,7 +704,7 @@ SnpNt32ReceiveFilters (
ReturnValue = GlobalData->NtNetUtilityTable.SetReceiveFilter ( ReturnValue = GlobalData->NtNetUtilityTable.SetReceiveFilter (
Instance->InterfaceInfo.InterfaceIndex, Instance->InterfaceInfo.InterfaceIndex,
EnableBits, EnableBits,
McastFilterCount, (UINT32)McastFilterCount,
McastFilter McastFilter
); );
@ -863,7 +863,7 @@ SnpNt32GetStatus (
{ {
if (TxBuffer != NULL) { if (TxBuffer != NULL) {
*((UINT8 **) TxBuffer) = (UINT8 *) 1; *((UINT8 **) TxBuffer) = (UINT8 *)(UINTN) 1;
} }
if (InterruptStatus != NULL) { if (InterruptStatus != NULL) {
@ -933,8 +933,8 @@ SnpNt32Transmit (
ReturnValue = GlobalData->NtNetUtilityTable.Transmit ( ReturnValue = GlobalData->NtNetUtilityTable.Transmit (
Instance->InterfaceInfo.InterfaceIndex, Instance->InterfaceInfo.InterfaceIndex,
HeaderSize, (UINT32)HeaderSize,
BufferSize, (UINT32)BufferSize,
Buffer, Buffer,
SrcAddr, SrcAddr,
DestAddr, DestAddr,
@ -1189,7 +1189,7 @@ SnpNt32InitializeGlobalData (
// //
// Set the interface information. // Set the interface information.
// //
Instance->InterfaceInfo = NetInterfaceInfoBuffer[Index]; CopyMem (&Instance->InterfaceInfo, &NetInterfaceInfoBuffer[Index], sizeof(Instance->InterfaceInfo));
// //
// Initialize this instance // Initialize this instance
// //
@ -1265,8 +1265,8 @@ SnpNt32InitializeInstanceData (
// //
// Copy Current/PermanentAddress MAC address // Copy Current/PermanentAddress MAC address
// //
Instance->Mode.CurrentAddress = Instance->InterfaceInfo.MacAddr; CopyMem (&Instance->Mode.CurrentAddress, &Instance->InterfaceInfo.MacAddr, sizeof(Instance->Mode.CurrentAddress));
Instance->Mode.PermanentAddress = Instance->InterfaceInfo.MacAddr; CopyMem (&Instance->Mode.PermanentAddress, &Instance->InterfaceInfo.MacAddr, sizeof(Instance->Mode.PermanentAddress));
// //
// Since the fake SNP is based on a real NIC, to avoid conflict with the host // Since the fake SNP is based on a real NIC, to avoid conflict with the host

View File

@ -1,7 +1,7 @@
/**@file /**@file
EFI_PEI_STALL implementation for NT32 simulation environment. EFI_PEI_STALL implementation for NT32 simulation environment.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -100,7 +100,7 @@ Stall (
// so micro second units need be divided by 1000 to convert to ms // so micro second units need be divided by 1000 to convert to ms
// //
NtThunk = (EFI_WIN_NT_THUNK_PROTOCOL*) PeiNtService->NtThunk(); NtThunk = (EFI_WIN_NT_THUNK_PROTOCOL*) PeiNtService->NtThunk();
NtThunk->Sleep ((Microseconds + 999) / 1000); NtThunk->Sleep ((DWORD)((Microseconds + 999) / 1000));
return EFI_SUCCESS; return EFI_SUCCESS;
} }

View File

@ -529,7 +529,7 @@ Returns:
BlockIo = &Private->BlockIo; BlockIo = &Private->BlockIo;
BlockIo->Revision = EFI_BLOCK_IO_PROTOCOL_REVISION; BlockIo->Revision = EFI_BLOCK_IO_PROTOCOL_REVISION;
BlockIo->Media = &Private->Media; BlockIo->Media = &Private->Media;
BlockIo->Media->BlockSize = Private->BlockSize; BlockIo->Media->BlockSize = (UINT32)Private->BlockSize;
BlockIo->Media->LastBlock = Private->NumberOfBlocks - 1; BlockIo->Media->LastBlock = Private->NumberOfBlocks - 1;
BlockIo->Media->MediaId = 0;; BlockIo->Media->MediaId = 0;;
@ -626,10 +626,10 @@ Returns:
// //
Private->NtHandle = Private->WinNtThunk->CreateFile ( Private->NtHandle = Private->WinNtThunk->CreateFile (
Private->Filename, Private->Filename,
Private->ReadMode, (DWORD)Private->ReadMode,
Private->ShareMode, (DWORD)Private->ShareMode,
NULL, NULL,
Private->OpenMode, (DWORD)Private->OpenMode,
0, 0,
NULL NULL
); );
@ -658,7 +658,7 @@ Returns:
Status = SetFilePointer64 (Private, 0, &FileSize, FILE_END); Status = SetFilePointer64 (Private, 0, &FileSize, FILE_END);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
FileSize = MultU64x32 (Private->NumberOfBlocks, Private->BlockSize); FileSize = MultU64x32 (Private->NumberOfBlocks, (UINT32)Private->BlockSize);
if (Private->DeviceType == EfiWinNtVirtualDisks) { if (Private->DeviceType == EfiWinNtVirtualDisks) {
DEBUG ((EFI_D_ERROR, "PlOpenBlock: Could not get filesize of %s\n", Private->Filename)); DEBUG ((EFI_D_ERROR, "PlOpenBlock: Could not get filesize of %s\n", Private->Filename));
Status = EFI_UNSUPPORTED; Status = EFI_UNSUPPORTED;
@ -667,10 +667,10 @@ Returns:
} }
if (Private->NumberOfBlocks == 0) { if (Private->NumberOfBlocks == 0) {
Private->NumberOfBlocks = DivU64x32 (FileSize, Private->BlockSize); Private->NumberOfBlocks = DivU64x32 (FileSize, (UINT32)Private->BlockSize);
} }
EndOfFile = MultU64x32 (Private->NumberOfBlocks, Private->BlockSize); EndOfFile = MultU64x32 (Private->NumberOfBlocks, (UINT32)Private->BlockSize);
if (FileSize != EndOfFile) { if (FileSize != EndOfFile) {
// //
@ -832,7 +832,7 @@ Returns:
return EFI_MEDIA_CHANGED; return EFI_MEDIA_CHANGED;
} }
if ((UINT32) Buffer % Private->Media.IoAlign != 0) { if ((UINTN) Buffer % Private->Media.IoAlign != 0) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
@ -858,7 +858,7 @@ Returns:
// //
// Seek to End of File // Seek to End of File
// //
DistanceToMove = MultU64x32 (Lba, BlockSize); DistanceToMove = MultU64x32 (Lba, (UINT32)BlockSize);
Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, FILE_BEGIN); Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, FILE_BEGIN);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {

View File

@ -1,6 +1,6 @@
/** @file /** @file
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -379,7 +379,7 @@ WinNtGopSetMode (
// //
// Adjust the window size // Adjust the window size
// //
Private->WinNtThunk->MoveWindow (Private->WindowHandle, Rect.left, Rect.top, Width, Height, TRUE); Private->WinNtThunk->MoveWindow (Private->WindowHandle, Rect.left, Rect.top, (INT32)Width, (INT32)Height, TRUE);
} }
@ -582,10 +582,10 @@ WinNtGopBlt (
// //
// Mark the area we just blted as Invalid so WM_PAINT will update. // Mark the area we just blted as Invalid so WM_PAINT will update.
// //
Rect.left = DestinationX; Rect.left = (LONG)DestinationX;
Rect.top = DestinationY; Rect.top = (LONG)DestinationY;
Rect.right = DestinationX + Width; Rect.right = (LONG)(DestinationX + Width);
Rect.bottom = DestinationY + Height; Rect.bottom = (LONG)(DestinationY + Height);
Private->WinNtThunk->InvalidateRect (Private->WindowHandle, &Rect, FALSE); Private->WinNtThunk->InvalidateRect (Private->WindowHandle, &Rect, FALSE);
// //
@ -900,7 +900,7 @@ WinNtGopThreadWinMain (
Private->WindowsClass.hInstance = NULL; Private->WindowsClass.hInstance = NULL;
Private->WindowsClass.hIcon = Private->WinNtThunk->LoadIcon (NULL, IDI_APPLICATION); Private->WindowsClass.hIcon = Private->WinNtThunk->LoadIcon (NULL, IDI_APPLICATION);
Private->WindowsClass.hCursor = Private->WinNtThunk->LoadCursor (NULL, IDC_ARROW); Private->WindowsClass.hCursor = Private->WinNtThunk->LoadCursor (NULL, IDC_ARROW);
Private->WindowsClass.hbrBackground = (HBRUSH) COLOR_WINDOW; Private->WindowsClass.hbrBackground = (HBRUSH)(UINTN)COLOR_WINDOW;
Private->WindowsClass.lpszMenuName = NULL; Private->WindowsClass.lpszMenuName = NULL;
Private->WindowsClass.lpszClassName = WIN_NT_GOP_CLASS_NAME; Private->WindowsClass.lpszClassName = WIN_NT_GOP_CLASS_NAME;
Private->WindowsClass.hIconSm = Private->WinNtThunk->LoadIcon (NULL, IDI_APPLICATION); Private->WindowsClass.hIconSm = Private->WinNtThunk->LoadIcon (NULL, IDI_APPLICATION);
@ -963,7 +963,7 @@ WinNtGopThreadWinMain (
Private->WinNtThunk->DispatchMessage (&Message); Private->WinNtThunk->DispatchMessage (&Message);
} }
return Message.wParam; return (DWORD)Message.wParam;
} }

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -1593,7 +1593,7 @@ Returns:
Status = PrivateFile->WinNtThunk->ReadFile ( Status = PrivateFile->WinNtThunk->ReadFile (
PrivateFile->LHandle, PrivateFile->LHandle,
Buffer, Buffer,
*BufferSize, (DWORD)*BufferSize,
(LPDWORD)BufferSize, (LPDWORD)BufferSize,
NULL NULL
) ? EFI_SUCCESS : EFI_DEVICE_ERROR; ) ? EFI_SUCCESS : EFI_DEVICE_ERROR;
@ -1764,7 +1764,7 @@ Returns:
Status = PrivateFile->WinNtThunk->WriteFile ( Status = PrivateFile->WinNtThunk->WriteFile (
PrivateFile->LHandle, PrivateFile->LHandle,
Buffer, Buffer,
*BufferSize, (DWORD)*BufferSize,
(LPDWORD)BufferSize, (LPDWORD)BufferSize,
NULL NULL
) ? EFI_SUCCESS : EFI_DEVICE_ERROR; ) ? EFI_SUCCESS : EFI_DEVICE_ERROR;