1; Copyright (c) 2004, Intel Corporation. All rights reserved.<BR> 2; This program and the accompanying materials 3; are licensed and made available under the terms and conditions of the BSD License 4; which accompanies this distribution. The full text of the license may be found at 5; http://opensource.org/licenses/bsd-license.php 6; 7; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 8; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 9; 10; Module Name: 11; 12; EnablePaging64.Asm 13; 14; Abstract: 15; 16; AsmEnablePaging64 function 17; 18; Notes: 19; 20;------------------------------------------------------------------------------ 21 22 .code 23 24;------------------------------------------------------------------------------ 25; VOID 26; EFIAPI 27; InternalX86EnablePaging64 ( 28; IN UINT16 Cs, 29; IN UINT64 EntryPoint, 30; IN UINT64 Context1, OPTIONAL 31; IN UINT64 Context2, OPTIONAL 32; IN UINT64 NewStack 33; ); 34;------------------------------------------------------------------------------ 35InternalX86EnablePaging64 PROC 36 cli 37 pop rax ; skip the return address 38 call @Base 39@Base: 40 add dword ptr [rsp], @F - @Base ; offset for far retf, seg is the 1st arg 41 mov rax, cr4 ; mov eax, cr4 42 or al, (1 SHL 5) 43 mov cr4, rax ; enable PAE 44 mov ecx, 0c0000080h 45 rdmsr 46 or ah, 1 ; set LME 47 wrmsr 48 mov rax, cr0 ; mov eax, cr0 49 bts eax, 31 50 mov cr0, rax ; enable paging 51 retf 52@@: ; long mode starts here 53 mov rbx, [esp] 54 mov rcx, [esp + 8] 55 mov rdx, [esp + 10h] 56 mov rsp, [esp + 18h] 57 add rsp, -20h 58 call rbx 59 hlt ; halt processor if EntryPoint() returned 60InternalX86EnablePaging64 ENDP 61 62 END 63