2006-04-22 00:54:32 +02:00
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
;
|
|
|
|
; Copyright (c) 2006, 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:
|
|
|
|
;
|
|
|
|
; DisablePaging64.Asm
|
|
|
|
;
|
|
|
|
; Abstract:
|
|
|
|
;
|
|
|
|
; AsmDisablePaging64 function
|
|
|
|
;
|
|
|
|
; Notes:
|
|
|
|
;
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
.code
|
|
|
|
|
2006-07-21 10:47:38 +02:00
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; VOID
|
|
|
|
; EFIAPI
|
|
|
|
; InternalX86DisablePaging64 (
|
|
|
|
; IN UINT16 Cs,
|
|
|
|
; IN UINT32 EntryPoint,
|
|
|
|
; IN UINT32 Context1, OPTIONAL
|
|
|
|
; IN UINT32 Context2, OPTIONAL
|
|
|
|
; IN UINT32 NewStack
|
|
|
|
; );
|
|
|
|
;------------------------------------------------------------------------------
|
2006-04-22 00:54:32 +02:00
|
|
|
InternalX86DisablePaging64 PROC
|
|
|
|
cli
|
2007-01-10 07:57:04 +01:00
|
|
|
shl rcx, 32 ; rcx[32..47] <- Cs
|
2006-07-06 06:07:24 +02:00
|
|
|
lea eax, @F
|
2006-04-22 00:54:32 +02:00
|
|
|
mov esi, r8d
|
2007-01-10 07:57:04 +01:00
|
|
|
or rcx, rax ; rcx[0..47] <- Cs:@F
|
2006-04-22 00:54:32 +02:00
|
|
|
mov edi, r9d
|
2007-01-10 07:57:04 +01:00
|
|
|
mov eax, [rsp + 28h] ; eax <- New Stack
|
|
|
|
push rcx
|
|
|
|
retf ; switch to compatibility mode
|
2006-04-22 00:54:32 +02:00
|
|
|
@@:
|
|
|
|
mov esp, eax ; set up new stack
|
|
|
|
mov rax, cr0
|
|
|
|
btr eax, 31
|
|
|
|
mov cr0, rax ; disable paging
|
|
|
|
mov ecx, 0c0000080h
|
|
|
|
rdmsr
|
|
|
|
and ah, NOT 1 ; clear LME
|
|
|
|
wrmsr
|
|
|
|
mov rax, cr4
|
|
|
|
and al, NOT (1 SHL 5) ; clear PAE
|
|
|
|
mov cr4, rax
|
2007-01-10 07:57:04 +01:00
|
|
|
push rdi ; push Context2
|
|
|
|
push rsi ; push Context1
|
|
|
|
call rdx ; transfer control to EntryPoint
|
|
|
|
hlt ; no one should get here
|
2006-04-22 00:54:32 +02:00
|
|
|
InternalX86DisablePaging64 ENDP
|
|
|
|
|
|
|
|
END
|