MdePkg/Library/BaseLib/Ia32/EnablePaging64.S File Reference


Detailed Description

#------------------------------------------------------------------------------
#
# Copyright (c) 2006 - 2008, 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:
#
# EnablePaging64.S
#
# Abstract:
#
# InternalX86EnablePaging64 function
#
# Notes:
#
#------------------------------------------------------------------------------

ASM_GLOBAL ASM_PFX(InternalX86EnablePaging64)

#------------------------------------------------------------------------------
# VOID
# EFIAPI
# InternalX86EnablePaging64 (
# IN UINT16 CodeSelector,
# IN UINT64 EntryPoint,
# IN UINT64 Context1, OPTIONAL
# IN UINT64 Context2, OPTIONAL
# IN UINT64 NewStack
# );
#------------------------------------------------------------------------------
ASM_PFX(InternalX86EnablePaging64):
cli
movl $LongStart, (esp) # offset for far retf, seg is the 1st arg
movl cr4, eax
orb $0x20, al
movl eax, cr4 # enable PAE
movl $0xc0000080, ecx
rdmsr
orb $1, ah # set LME
wrmsr
movl cr0, eax
btsl $31, eax # set PG
movl eax, cr0 # enable paging
lret # topmost 2 dwords hold the address
LongStart: # long mode starts here
.byte 0x67, 0x48 # 32-bit address size, 64-bit operand size
movl (esp), ebx # mov rbx, [esp]
.byte 0x67, 0x48
movl 8(esp), ecx # mov rcx, [esp + 8]
.byte 0x67, 0x48
movl 0x10(esp), edx # mov rdx, [esp + 10h]
.byte 0x67, 0x48
movl 0x18(esp), esp # mov rsp, [esp + 18h]
.byte 0x48
addl $-0x20, esp # add rsp, -20h
call *ebx # call rbx
jmp . # no one should get here


Generated on Thu Sep 24 23:14:22 2015 for MdePkg[ALL] by  doxygen 1.5.7.1