EmulatorPkg: Fix Visual Studio build for IA32 & X64

This code is untested since there is currently no 'host' component
for Win32/Win64.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13633 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jljusten 2012-08-15 00:03:25 +00:00
parent 33efdf51b0
commit e148512e51
9 changed files with 191 additions and 16 deletions

View File

@ -1,7 +1,7 @@
/*++ @file
Emu driver to produce CPU Architectural Protocol.
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2011 - 2012, Apple Inc. All rights reserved.
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@ -241,9 +241,9 @@ CpuUpdateSmbios (
IN UINTN MaxCpus
)
{
mCpuSmbiosType4.CoreCount = MaxCpus;
mCpuSmbiosType4.EnabledCoreCount = MaxCpus;
mCpuSmbiosType4.ThreadCount = MaxCpus;
mCpuSmbiosType4.CoreCount = (UINT8) MaxCpus;
mCpuSmbiosType4.EnabledCoreCount = (UINT8) MaxCpus;
mCpuSmbiosType4.ThreadCount = (UINT8) MaxCpus;
LogSmbiosData ((EFI_SMBIOS_TABLE_HEADER *)&mCpuSmbiosType4, mCpuSmbiosType4Strings);
}

View File

@ -6,7 +6,7 @@
Bridge I/O Protocol.
Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2011, Apple Inc. All rights reserved.
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@ -315,7 +315,7 @@ CpuIoCheckAddressRange (
}
Width = Width & 0x03;
if (Address - 1 + (1 << Width) * Count > Limit) {
if ((Address - 1 + LShiftU64 (Count, Width)) > Limit) {
return EFI_UNSUPPORTED;
}

View File

@ -28,7 +28,7 @@
APs to help test system memory in parallel with other device initialization.
Diagnostics applications may also use this protocol for multi-processor.
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
Portitions Copyright (c) 2011, Apple Inc. All rights reserved.
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
@ -1158,7 +1158,7 @@ FillInProcessorInformation (
gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag |= PROCESSOR_AS_BSP_BIT;
}
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Package = ProcessorNumber;
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Package = (UINT32) ProcessorNumber;
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Core = 0;
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Thread = 0;
gMPSystem.ProcessorData[ProcessorNumber].State = BSP ? CPU_STATE_BUSY : CPU_STATE_IDLE;
@ -1332,7 +1332,7 @@ CpuMpServicesInit (
return EFI_SUCCESS;
}
gPollInterval = PcdGet64 (PcdEmuMpServicesPollingInterval);
gPollInterval = (UINTN) PcdGet64 (PcdEmuMpServicesPollingInterval);
Status = InitializeMpSystemData (*MaxCpus);
if (EFI_ERROR (Status)) {

View File

@ -1,6 +1,6 @@
/*++ @file
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@ -292,6 +292,6 @@ PeCoffGetSizeOfHeaders (
SizeOfHeaders = 0;
}
return SizeOfHeaders;
return (UINT32) SizeOfHeaders;
}

View File

@ -4,7 +4,7 @@
Copyright (c) 2012, Apple Inc. All rights reserved.
Portitions Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
Portitions Copyright (c) 2006 - 2012, 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 that accompanies this distribution.
The full text of the license may be found at
@ -50,10 +50,12 @@ SmbiosLibInitializeFromTemplate (
return EFI_INVALID_PARAMETER;
}
Status = EFI_SUCCESS;
for (Index = 0; Template[Index].Entry != NULL; Index++) {
Status = SmbiosLibCreateEntry (Template[Index].Entry, Template[Index].StringArray);
}
return Status;
}

View File

@ -0,0 +1,94 @@
;------------------------------------------------------------------------------
;
; Copyright (c) 2007 - 2012, 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

View File

@ -3,6 +3,7 @@
#
# Main executable file of Unix Emulator that loads PEI core after initialization finished.
# Portions copyright (c) 2011, Apple Inc. All rights reserved.<BR>
# Copyright (c) 2012, 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
@ -26,10 +27,12 @@
Sec.c
[Sources.X64]
X64/SwitchRam.asm
X64/SwitchRam.S
[Sources.IA32]
Ia32/TempRam.c
Ia32/SwitchRam.asm
Ia32/SwitchRam.S
[Packages]

View File

@ -0,0 +1,76 @@
;------------------------------------------------------------------------------
;
; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
; Portitions copyright (c) 2011, Apple Inc. All rights reserved.
; 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.
;
;------------------------------------------------------------------------------
EXTERN CopyMem:PROC
EXTERN ZeroMem:PROC
.code
;------------------------------------------------------------------------------
; EFI_STATUS
; EFIAPI
; SecTemporaryRamSupport (
; IN CONST EFI_PEI_SERVICES **PeiServices, // %rcx
; IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, // %rdx
; IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, // %r8
; IN UINTN CopySize // %r9
; )
;------------------------------------------------------------------------------
SecTemporaryRamSupport PROC
; Adjust callers %rbp to account for stack move
sub rbp, rdx ; Calc offset of %rbp in Temp Memory
add rbp, r8 ; add in permanent base to offset
push rbp ; stack frame is for the debugger
mov rbp, rsp
push rdx ; Save TemporaryMemoryBase
push r8 ; Save PermanentMemoryBase
push r9 ; Save CopySize
;
; Copy all of temp RAM to permanent memory, including stack
;
; CopyMem (PermanentMemoryBase, TemporaryMemoryBase, CopySize);
; %rcx, %rdx, %r8
mov rcx, r8 ; Shift arguments
mov r8, r9
sub rsp, 028h ; Allocate register spill area & 16-byte align stack
call CopyMem
; Temp mem stack now copied to permanent location. %esp still in temp memory
add rsp, 028h
pop r9 ; CopySize (old stack)
pop r8 ; PermanentMemoryBase (old stack)
pop rdx ; TemporaryMemoryBase (old stack)
mov rcx, rsp ; Move to new stack
sub rcx, rdx ; Calc offset of stack in Temp Memory
add rcx, r8 ; Calc PermanentMemoryBase address
mov rsp, rcx ; Update stack
; Stack now points to permanent memory
; ZeroMem (TemporaryMemoryBase /* rcx */, CopySize /* rdx */);
mov rcx, rdx
mov rdx, r9
sub rsp, 028h ; Allocate register spill area & 16-byte align stack
call ZeroMem
add rsp, 028h
; This data comes off the NEW stack
pop rbp
ret
SecTemporaryRamSupport ENDP
END

View File

@ -5,7 +5,7 @@
timer service. In the future, the Thread creation should possibly be
abstracted by the CPU architectural protocol
Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2010 - 2011, Apple Inc. All rights reserved.
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@ -74,7 +74,7 @@ TimerCallback (UINT64 DeltaMs)
// registered. Assume all other handlers are legal.
//
if (CallbackFunction != NULL) {
CallbackFunction ((UINT64) (DeltaMs * 10000));
CallbackFunction (MultU64x32 (DeltaMs, 10000));
}
}
@ -246,7 +246,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
*TimerPeriod = mTimerPeriodMs * 10000;
*TimerPeriod = MultU64x32 (mTimerPeriodMs, 10000);
return EFI_SUCCESS;
}