merge trunk head (37902)
[reactos.git] / reactos / ntoskrnl / ke / amd64 / boot.S
1 /*
2 * FILE: ntoskrnl/ke/i386/boot.S
3 * COPYRIGHT: See COPYING in the top level directory
4 * PURPOSE: FreeLDR Wrapper Bootstrap Code and Bootstrap Trampoline
5 * PROGRAMMERs: Alex Ionescu (alex@relsoft.net)
6 * Thomas Weidenmueller <w3seek@reactos.org>
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #include <asm.h>
12 .intel_syntax noprefix
13 .code64
14
15 /* GLOBALS *******************************************************************/
16
17 .bss
18 .align 16
19
20 /* Kernel Boot Stack */
21 .globl _P0BootStack
22 .space KERNEL_STACK_SIZE
23 _P0BootStack:
24
25 /* Kernel Double-Fault and Temporary DPC Stack */
26 .globl _KiDoubleFaultStack
27 .space KERNEL_STACK_SIZE
28 _KiDoubleFaultStack:
29
30 /* FUNCTIONS *****************************************************************/
31
32 .text
33
34 /**
35 * VOID
36 * KiSetupStackAndInitializeKernel(
37 * IN PKPROCESS InitProcess, <rsp + 0x08, rcx>
38 * IN PKTHREAD InitThread, <rsp + 0x10, rdx>
39 * IN PVOID IdleStack, <rsp + 0x18, r8>
40 * IN PKPRCB Prcb, <rsp + 0x20, r9>
41 * IN CCHAR Number, <rsp + 0x28>
42 * IN PLOADER_PARAMETER_BLOCK LoaderBlock) <rsp + 0x30>
43 */
44 .globl _KiSetupStackAndInitializeKernel
45 .func KiSetupStackAndInitializeKernel
46 _KiSetupStackAndInitializeKernel:
47
48 /* Save current stack */
49 mov rsi, rsp
50
51 /* Setup the new stack */
52 mov rsp, r8
53 sub rsp, 0x300 // FIXME
54
55 /* Copy stack parameters to the new stack */
56 sub rsp, 0x38
57 mov rdi, rsp
58 movsq
59 movsq
60 movsq
61 movsq
62 movsq
63 movsq
64 movsq
65
66 jmp _KiInitializeKernelAndGotoIdleLoop
67
68 .endfunc