;------------------------------------------------------------------------------\r
; X64 assembly file for AP startup vector.\r
;\r
-; Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>\r
+; Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
; This program and the accompanying materials\r
; are licensed and made available under the terms and conditions of the BSD License\r
; which accompanies this distribution. The full text of the license may be found at\r
\r
.code\r
\r
-include AsmInclude.inc \r
+include AsmInclude.inc\r
;-------------------------------------------------------------------------------------\r
\r
;-------------------------------------------------------------------------------------\r
db 8ch, 0c8h ; mov ax, cs\r
db 8eh, 0d8h ; mov ds, ax\r
db 8eh, 0c0h ; mov es, ax\r
- db 8eh, 0d0h ; mov ss, ax \r
+ db 8eh, 0d0h ; mov ss, ax\r
db 33h, 0c0h ; xor ax, ax\r
db 8eh, 0e0h ; mov fs, ax\r
db 8eh, 0e8h ; mov gs, ax\r
db 0BEh\r
dw Cr3OffsetLocation ; mov si, Cr3Location\r
db 66h, 8Bh, 0Ch ; mov ecx,dword ptr [si] ; ECX is keeping the value of CR3\r
- \r
+\r
db 0BEh\r
dw GdtrLocation ; mov si, GdtrProfile\r
db 66h ; db 66h\r
db 2Eh, 0Fh, 01h, 14h ; lgdt fword ptr cs:[si]\r
\r
+ db 0BEh\r
+ dw IdtrLocation ; mov si, IdtrProfile\r
+ db 66h ; db 66h\r
+ db 2Eh, 0Fh, 01h, 1Ch ; lidt fword ptr cs:[si]\r
+\r
db 33h, 0C0h ; xor ax, ax\r
db 8Eh, 0D8h ; mov ds, ax\r
- \r
+\r
db 0Fh, 20h, 0C0h ; mov eax, cr0 ; Get control register 0\r
db 66h, 83h, 0C8h, 01h ; or eax, 000000001h ; Set PE bit (bit #0)\r
db 0Fh, 22h, 0C0h ; mov cr0, eax\r
db 0Fh, 22h, 0E0h ; mov cr4, eax\r
\r
db 0Fh, 22h, 0D9h ; mov cr3, ecx\r
- \r
+\r
db 8Bh, 0F2h ; mov esi, edx ; Save wakeup buffer address\r
- \r
+\r
db 0B9h\r
dd 0C0000080h ; mov ecx, 0c0000080h ; EFER MSR number.\r
db 0Fh, 32h ; rdmsr ; Read EFER.\r
db 0Fh, 0BAh, 0E8h, 08h ; bts eax, 8 ; Set LME=1.\r
db 0Fh, 30h ; wrmsr ; Write EFER.\r
- \r
+\r
db 0Fh, 20h, 0C0h ; mov eax, cr0 ; Read CR0.\r
db 0Fh, 0BAh, 0E8h, 1Fh ; bts eax, 31 ; Set PG=1.\r
db 0Fh, 22h, 0C0h ; mov cr0, eax ; Write CR0.\r
\r
LONG_JUMP::\r
- \r
+\r
db 67h, 0EAh ; far jump\r
dd 0h ; 32-bit offset\r
dw 38h ; 16-bit selector\r
- \r
+\r
LongModeStart::\r
\r
mov ax, 30h\r
sub rsp, 20h\r
call rax\r
add rsp, 20h\r
- \r
+\r
GoToSleep::\r
\r
cli\r
hlt\r
jmp $-2\r
- \r
+\r
RendezvousFunnelProc ENDP\r
RendezvousFunnelProcEnd::\r
\r
;-------------------------------------------------------------------------------------\r
; AsmGetAddressMap (&AddressMap);\r
;-------------------------------------------------------------------------------------\r
-AsmGetAddressMap PROC \r
+AsmGetAddressMap PROC\r
\r
mov rax, offset RendezvousFunnelProcStart\r
mov qword ptr [rcx], rax\r
mov qword ptr [rcx+18h], LongModeStart - RendezvousFunnelProcStart\r
mov qword ptr [rcx+20h], LONG_JUMP - RendezvousFunnelProcStart\r
mov qword ptr [rcx+28h], RendezvousFunnelProcEnd - RendezvousFunnelProcStart\r
- \r
+\r
ret\r
- \r
+\r
AsmGetAddressMap ENDP\r
\r
END\r