Reviewed-by: Giri P Mudusuru <[email protected]> > -----Original Message----- > From: Gao, Liming > Sent: Friday, July 8, 2016 7:49 AM > To: [email protected] > Cc: Yao, Jiewen <[email protected]>; Mudusuru, Giri P > <[email protected]> > Subject: [Patch 1/5] IntelFsp2WrapperPkg BaseFspWrapperApiLib: Remove > MASM/GAS files > > Keep NASM file only for new added modules. > > Cc: Jiewen Yao <[email protected]> > Cc: Giri Mudusuru <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Liming Gao <[email protected]> > --- > .../BaseFspWrapperApiLib/BaseFspWrapperApiLib.inf | 2 - > .../Library/BaseFspWrapperApiLib/X64/Thunk64To32.S | 230 > --------------------- > .../BaseFspWrapperApiLib/X64/Thunk64To32.asm | 230 > --------------------- > 3 files changed, 462 deletions(-) > delete mode 100644 > IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.S > delete mode 100644 > IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.asm > > diff --git > a/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLib.i > nf > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLib.i > nf > index f2cef05..b52cfeb 100644 > --- > a/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLib.i > nf > +++ > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLib.i > nf > @@ -43,12 +43,10 @@ > [Sources.IA32] > IA32/DispatchExecute.c > > [Sources.X64] > X64/DispatchExecute.c > - X64/Thunk64To32.asm > - X64/Thunk64To32.S > X64/Thunk64To32.nasm > > > ################################################################# > ############### > # > # Package Dependency Section - list of Package files that are required for > diff --git > a/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.S > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.S > deleted file mode 100644 > index b6b5c1a..0000000 > --- a/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.S > +++ /dev/null > @@ -1,230 +0,0 @@ > -# > -# Copyright (c) 2014, 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: > -# > -# Thunk64To32.asm > -# > -# Abstract: > -# > -# This is the assembly code to transition from long mode to compatibility > mode to execute 32-bit code and then > -# transit back to long mode. > -# > -#------------------------------------------------------------------------------- > - > -#---------------------------------------------------------------------------- > -# Procedure: AsmExecute32BitCode > -# > -# Input: None > -# > -# Output: None > -# > -# Prototype: UINT32 > -# AsmExecute32BitCode ( > -# IN UINT64 Function, > -# IN UINT64 Param1, > -# IN UINT64 Param2, > -# IN IA32_DESCRIPTOR *InternalGdtr > -# ); > -# > -# > -# Description: A thunk function to execute 32-bit code in long mode. > -# > -#---------------------------------------------------------------------------- > - > -ASM_GLOBAL ASM_PFX(AsmExecute32BitCode) > -ASM_PFX(AsmExecute32BitCode): > - # > - # save IFLAG and disable it > - # > - pushfq > - cli > - > - # > - # save orignal GDTR and CS > - # > - movl %ds, %eax > - push %rax > - movl %cs, %eax > - push %rax > - subq $0x10, %rsp > - sgdt (%rsp) > - # > - # load internal GDT > - # > - lgdt (%r9) > - # > - # Save general purpose register and rflag register > - # > - pushfq > - push %rdi > - push %rsi > - push %rbp > - push %rbx > - > - # > - # save CR3 > - # > - movq %cr3, %rax > - movq %rax, %rbp > - > - # > - # Prepare the CS and return address for the transition from 32-bit to > 64-bit > mode > - # > - movq $0x10, %rax # load long mode selector > - shl $32, %rax > - lea ReloadCS(%rip), %r9 #Assume the ReloadCS is under 4G > - orq %r9, %rax > - push %rax > - # > - # Save parameters for 32-bit function call > - # > - movq %r8, %rax > - shl $32, %rax > - orq %rdx, %rax > - push %rax > - # > - # save the 32-bit function entry and the return address into stack which > will > be > - # retrieve in compatibility mode. > - # > - lea ReturnBack(%rip), %rax #Assume the ReloadCS is under 4G > - shl $32, %rax > - orq %rcx, %rax > - push %rax > - > - # > - # let rax save DS > - # > - movq $0x18, %rax > - > - # > - # Change to Compatible Segment > - # > - movq $8, %rcx # load compatible mode selector > - shl $32, %rcx > - lea Compatible(%rip), %rdx # assume address < 4G > - orq %rdx, %rcx > - push %rcx > - .byte 0xcb # retf > - > -Compatible: > - # reload DS/ES/SS to make sure they are correct referred to current GDT > - movw %ax, %ds > - movw %ax, %es > - movw %ax, %ss > - > - # > - # Disable paging > - # > - movq %cr0, %rcx > - btc $31, %ecx > - movq %rcx, %cr0 > - # > - # Clear EFER.LME > - # > - movl $0xC0000080, %ecx > - rdmsr > - btc $8, %eax > - wrmsr > - > -# Now we are in protected mode > - # > - # Call 32-bit function. Assume the function entry address and parameter > value is less than 4G > - # > - pop %rax # Here is the function entry > - # > - # Now the parameter is at the bottom of the stack, then call in to IA32 > function. > - # > - jmp *%rax > -ReturnBack: > - movl %eax, %ebx # save return status > - pop %rcx # drop param1 > - pop %rcx # drop param2 > - > - # > - # restore CR4 > - # > - movq %cr4, %rax > - bts $5, %eax > - movq %rax, %cr4 > - > - # > - # restore CR3 > - # > - movl %ebp, %eax > - movq %rax, %cr3 > - > - # > - # Set EFER.LME to re-enable ia32-e > - # > - movl $0xC0000080, %ecx > - rdmsr > - bts $8, %eax > - wrmsr > - # > - # Enable paging > - # > - movq %cr0, %rax > - bts $31, %eax > - mov %rax, %cr0 > -# Now we are in compatible mode > - > - # > - # Reload cs register > - # > - .byte 0xcb # retf > -ReloadCS: > - # > - # Now we're in Long Mode > - # > - # > - # Restore C register and eax hold the return status from 32-bit function. > - # Note: Do not touch rax from now which hold the return value from IA32 > function > - # > - movl %ebx, %eax # put return status to EAX > - pop %rbx > - pop %rbp > - pop %rsi > - pop %rdi > - popfq > - # > - # Switch to orignal GDT and CS. here rsp is pointer to the orignal GDT > descriptor. > - # > - lgdt (%rsp) > - # > - # drop GDT descriptor in stack > - # > - addq $0x10, %rsp > - # > - # switch to orignal CS and GDTR > - # > - pop %r9 # get CS > - shl $32, %r9 # rcx[32..47] <- Cs > - lea ReturnToLongMode(%rip), %rcx > - orq %r9, %rcx > - push %rcx > - .byte 0xcb # retf > -ReturnToLongMode: > - # > - # Reload original DS/ES/SS > - # > - pop %rcx > - movl %ecx, %ds > - movl %ecx, %es > - movl %ecx, %ss > - > - # > - # Restore IFLAG > - # > - popfq > - > - ret > - > diff --git > a/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.asm > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.asm > deleted file mode 100644 > index 70e7b5f..0000000 > --- > a/IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/X64/Thunk64To32.asm > +++ /dev/null > @@ -1,230 +0,0 @@ > -; > -; Copyright (c) 2014, 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: > -; > -; Thunk64To32.asm > -; > -; Abstract: > -; > -; This is the assembly code to transition from long mode to compatibility > mode > to execute 32-bit code and then > -; transit back to long mode. > -; > -;------------------------------------------------------------------------------- > - .code > -;---------------------------------------------------------------------------- > -; Procedure: AsmExecute32BitCode > -; > -; Input: None > -; > -; Output: None > -; > -; Prototype: UINT32 > -; AsmExecute32BitCode ( > -; IN UINT64 Function, > -; IN UINT64 Param1, > -; IN UINT64 Param2, > -; IN IA32_DESCRIPTOR *InternalGdtr > -; ); > -; > -; > -; Description: A thunk function to execute 32-bit code in long mode. > -; > -;---------------------------------------------------------------------------- > -AsmExecute32BitCode PROC > - ; > - ; save IFLAG and disable it > - ; > - pushfq > - cli > - > - ; > - ; save orignal GDTR and CS > - ; > - mov rax, ds > - push rax > - mov rax, cs > - push rax > - sub rsp, 10h > - sgdt fword ptr [rsp] > - ; > - ; load internal GDT > - ; > - lgdt fword ptr [r9] > - ; > - ; Save general purpose register and rflag register > - ; > - pushfq > - push rdi > - push rsi > - push rbp > - push rbx > - > - ; > - ; save CR3 > - ; > - mov rax, cr3 > - mov rbp, rax > - > - ; > - ; Prepare the CS and return address for the transition from 32-bit to > 64-bit > mode > - ; > - mov rax, 10h ; load long mode selector > - shl rax, 32 > - mov r9, OFFSET ReloadCS ;Assume the ReloadCS is under 4G > - or rax, r9 > - push rax > - ; > - ; Save parameters for 32-bit function call > - ; > - mov rax, r8 > - shl rax, 32 > - or rax, rdx > - push rax > - ; > - ; save the 32-bit function entry and the return address into stack which > will be > - ; retrieve in compatibility mode. > - ; > - mov rax, OFFSET ReturnBack ;Assume the ReloadCS is under 4G > - shl rax, 32 > - or rax, rcx > - push rax > - > - ; > - ; let rax save DS > - ; > - mov rax, 018h > - > - ; > - ; Change to Compatible Segment > - ; > - mov rcx, 08h ; load compatible mode selector > - shl rcx, 32 > - mov rdx, OFFSET Compatible ; assume address < 4G > - or rcx, rdx > - push rcx > - retf > - > -Compatible: > - ; reload DS/ES/SS to make sure they are correct referred to current GDT > - mov ds, ax > - mov es, ax > - mov ss, ax > - > - ; > - ; Disable paging > - ; > - mov rcx, cr0 > - btc ecx, 31 > - mov cr0, rcx > - ; > - ; Clear EFER.LME > - ; > - mov ecx, 0C0000080h > - rdmsr > - btc eax, 8 > - wrmsr > - > -; Now we are in protected mode > - ; > - ; Call 32-bit function. Assume the function entry address and parameter > value > is less than 4G > - ; > - pop rax ; Here is the function entry > - ; > - ; Now the parameter is at the bottom of the stack, then call in to IA32 > function. > - ; > - jmp rax > -ReturnBack: > - mov ebx, eax ; save return status > - pop rcx ; drop param1 > - pop rcx ; drop param2 > - > - ; > - ; restore CR4 > - ; > - mov rax, cr4 > - bts eax, 5 > - mov cr4, rax > - > - ; > - ; restore CR3 > - ; > - mov eax, ebp > - mov cr3, rax > - > - ; > - ; Set EFER.LME to re-enable ia32-e > - ; > - mov ecx, 0C0000080h > - rdmsr > - bts eax, 8 > - wrmsr > - ; > - ; Enable paging > - ; > - mov rax, cr0 > - bts eax, 31 > - mov cr0, rax > -; Now we are in compatible mode > - > - ; > - ; Reload cs register > - ; > - retf > -ReloadCS: > - ; > - ; Now we're in Long Mode > - ; > - ; > - ; Restore C register and eax hold the return status from 32-bit function. > - ; Note: Do not touch rax from now which hold the return value from IA32 > function > - ; > - mov eax, ebx ; put return status to EAX > - pop rbx > - pop rbp > - pop rsi > - pop rdi > - popfq > - ; > - ; Switch to orignal GDT and CS. here rsp is pointer to the orignal GDT > descriptor. > - ; > - lgdt fword ptr[rsp] > - ; > - ; drop GDT descriptor in stack > - ; > - add rsp, 10h > - ; > - ; switch to orignal CS and GDTR > - ; > - pop r9 ; get CS > - shl r9, 32 ; rcx[32..47] <- Cs > - mov rcx, OFFSET @F > - or rcx, r9 > - push rcx > - retf > -@@: > - ; > - ; Reload original DS/ES/SS > - ; > - pop rcx > - mov ds, rcx > - mov es, rcx > - mov ss, rcx > - > - ; > - ; Restore IFLAG > - ; > - popfq > - > - ret > -AsmExecute32BitCode ENDP > - > - END > -- > 1.9.5.msysgit.0
_______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

