Initial import.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
223
Tools/Source/TianoTools/Common/PeiLib/ia32/ProcessorAsms.Asm
Normal file
223
Tools/Source/TianoTools/Common/PeiLib/ia32/ProcessorAsms.Asm
Normal file
@@ -0,0 +1,223 @@
|
||||
;
|
||||
; Copyright (c) 2004, Intel Corporation
|
||||
; 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.
|
||||
;
|
||||
; Module Name:
|
||||
;
|
||||
; ProcessorAsms.Asm
|
||||
;
|
||||
; Abstract:
|
||||
; This is separated from processor.c to allow this functions to be built with /O1
|
||||
;
|
||||
; Notes:
|
||||
; - Masm uses "This", "ebx", etc as a directive.
|
||||
; - H2INC is still not embedded in our build process so I translated the struc manually.
|
||||
; - Unreferenced variables/arguments (This, NewBsp, NewStack) were causing compile errors and
|
||||
; did not know of "pragma" mechanism in MASM and I did not want to reduce the warning level.
|
||||
; Instead, I did a dummy referenced.
|
||||
;
|
||||
|
||||
.686P
|
||||
.MMX
|
||||
.MODEL SMALL
|
||||
.CODE
|
||||
|
||||
EFI_SUCCESS equ 0
|
||||
EFI_WARN_RETURN_FROM_LONG_JUMP equ 5
|
||||
|
||||
;
|
||||
; Generated by h2inc run manually
|
||||
;
|
||||
_EFI_JUMP_BUFFER STRUCT 2t
|
||||
_ebx DWORD ?
|
||||
_esi DWORD ?
|
||||
_edi DWORD ?
|
||||
_ebp DWORD ?
|
||||
_esp DWORD ?
|
||||
_eip DWORD ?
|
||||
_EFI_JUMP_BUFFER ENDS
|
||||
|
||||
EFI_JUMP_BUFFER TYPEDEF _EFI_JUMP_BUFFER
|
||||
|
||||
TransferControlSetJump PROTO C \
|
||||
_This:PTR EFI_PEI_TRANSFER_CONTROL_PROTOCOL, \
|
||||
Jump:PTR EFI_JUMP_BUFFER
|
||||
|
||||
TransferControlLongJump PROTO C \
|
||||
_This:PTR EFI_PEI_TRANSFER_CONTROL_PROTOCOL, \
|
||||
Jump:PTR EFI_JUMP_BUFFER
|
||||
|
||||
SwitchStacks PROTO C \
|
||||
EntryPoint:PTR DWORD, \
|
||||
Parameter:DWORD, \
|
||||
NewStack:PTR DWORD, \
|
||||
NewBsp:PTR DWORD
|
||||
|
||||
SwitchIplStacks PROTO C \
|
||||
EntryPoint:PTR DWORD, \
|
||||
Parameter1:DWORD, \
|
||||
Parameter2:DWORD, \
|
||||
NewStack:PTR DWORD, \
|
||||
NewBsp:PTR DWORD
|
||||
|
||||
;
|
||||
;Routine Description:
|
||||
;
|
||||
; This routine implements the IA32 variant of the SetJump call. Its
|
||||
; responsibility is to store system state information for a possible
|
||||
; subsequent LongJump.
|
||||
;
|
||||
;Arguments:
|
||||
;
|
||||
; Pointer to CPU context save buffer.
|
||||
;
|
||||
;Returns:
|
||||
;
|
||||
; EFI_SUCCESS
|
||||
;
|
||||
TransferControlSetJump PROC C \
|
||||
_This:PTR EFI_PEI_TRANSFER_CONTROL_PROTOCOL, \
|
||||
Jump:PTR EFI_JUMP_BUFFER
|
||||
|
||||
mov eax, _This
|
||||
mov ecx, Jump
|
||||
mov (EFI_JUMP_BUFFER PTR [ecx])._ebx, ebx
|
||||
mov (EFI_JUMP_BUFFER PTR [ecx])._esi, esi
|
||||
mov (EFI_JUMP_BUFFER PTR [ecx])._edi, edi
|
||||
mov eax, [ebp]
|
||||
mov (EFI_JUMP_BUFFER PTR [ecx])._ebp, eax
|
||||
lea eax, [ebp+4]
|
||||
mov (EFI_JUMP_BUFFER PTR [ecx])._esp, eax
|
||||
mov eax, [ebp+4]
|
||||
mov (EFI_JUMP_BUFFER PTR [ecx])._eip, eax
|
||||
mov eax, EFI_SUCCESS
|
||||
|
||||
ret
|
||||
|
||||
TransferControlSetJump ENDP
|
||||
|
||||
;
|
||||
; Routine Description:
|
||||
;
|
||||
; This routine implements the IA32 variant of the LongJump call. Its
|
||||
; responsibility is restore the system state to the Context Buffer and
|
||||
; pass control back.
|
||||
;
|
||||
; Arguments:
|
||||
;
|
||||
; Pointer to CPU context save buffer.
|
||||
;
|
||||
; Returns:
|
||||
;
|
||||
; EFI_WARN_RETURN_FROM_LONG_JUMP
|
||||
;
|
||||
|
||||
TransferControlLongJump PROC C \
|
||||
_This:PTR EFI_PEI_TRANSFER_CONTROL_PROTOCOL, \
|
||||
Jump:PTR EFI_JUMP_BUFFER
|
||||
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
mov eax, _This
|
||||
; set return from SetJump to EFI_WARN_RETURN_FROM_LONG_JUMP
|
||||
mov eax, EFI_WARN_RETURN_FROM_LONG_JUMP
|
||||
mov ecx, Jump
|
||||
mov ebx, (EFI_JUMP_BUFFER PTR [ecx])._ebx
|
||||
mov esi, (EFI_JUMP_BUFFER PTR [ecx])._esi
|
||||
mov edi, (EFI_JUMP_BUFFER PTR [ecx])._edi
|
||||
mov ebp, (EFI_JUMP_BUFFER PTR [ecx])._ebp
|
||||
mov esp, (EFI_JUMP_BUFFER PTR [ecx])._esp
|
||||
add esp, 4 ;pop the eip
|
||||
jmp DWORD PTR (EFI_JUMP_BUFFER PTR [ecx])._eip
|
||||
mov eax, EFI_WARN_RETURN_FROM_LONG_JUMP
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
TransferControlLongJump ENDP
|
||||
|
||||
;
|
||||
; Routine Description:
|
||||
; This allows the caller to switch the stack and goes to the new entry point
|
||||
;
|
||||
; Arguments:
|
||||
; EntryPoint - Pointer to the location to enter
|
||||
; Parameter - Parameter to pass in
|
||||
; NewStack - New Location of the stack
|
||||
; NewBsp - New BSP
|
||||
;
|
||||
; Returns:
|
||||
;
|
||||
; Nothing. Goes to the Entry Point passing in the new parameters
|
||||
;
|
||||
SwitchStacks PROC C \
|
||||
EntryPoint:PTR DWORD, \
|
||||
Parameter:DWORD, \
|
||||
NewStack:PTR DWORD, \
|
||||
NewBsp:PTR DWORD
|
||||
|
||||
push ebx
|
||||
mov eax, NewBsp
|
||||
mov ebx, Parameter
|
||||
mov ecx, EntryPoint
|
||||
mov eax, NewStack
|
||||
mov esp, eax
|
||||
push ebx
|
||||
push 0
|
||||
jmp ecx
|
||||
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
SwitchStacks ENDP
|
||||
|
||||
;
|
||||
; Routine Description:
|
||||
; This allows the caller to switch the stack and goes to the new entry point
|
||||
;
|
||||
; Arguments:
|
||||
; EntryPoint - Pointer to the location to enter
|
||||
; Parameter1/Parameter2 - Parameter to pass in
|
||||
; NewStack - New Location of the stack
|
||||
; NewBsp - New BSP
|
||||
;
|
||||
; Returns:
|
||||
;
|
||||
; Nothing. Goes to the Entry Point passing in the new parameters
|
||||
;
|
||||
SwitchIplStacks PROC C \
|
||||
EntryPoint:PTR DWORD, \
|
||||
Parameter1:DWORD, \
|
||||
Parameter2:DWORD, \
|
||||
NewStack:PTR DWORD, \
|
||||
NewBsp:PTR DWORD
|
||||
|
||||
push ebx
|
||||
mov eax, NewBsp
|
||||
mov ebx, Parameter1
|
||||
mov edx, Parameter2
|
||||
mov ecx, EntryPoint
|
||||
mov eax, NewStack
|
||||
mov esp, eax
|
||||
|
||||
push edx
|
||||
push ebx
|
||||
call ecx
|
||||
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
SwitchIplStacks ENDP
|
||||
|
||||
END
|
||||
|
Reference in New Issue
Block a user