summaryrefslogtreecommitdiffhomepage
path: root/dev/DDK/DispatchKernelCall.S
blob: ef1886b9e0df86a76b39f927e66c04cc6984955c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
 lang: asm
 compiler: gnu
 */

.globl __KernelCallDispatch

.text

/* Really simple function, takes our va-list,
    and brings it to the trap handler in the Kernel. */

#ifdef __DDK_AMD64__

/* args rcx, rdx, r8, r9 */
__KernelCallDispatch:
    int $0x33
    ret

#elif defined(__DDK_POWER64__)

/* args r8, r9, r10, r11 */
__KernelCallDispatch:
    /* There is no specific interrupt request id for a system call in POWER. */
    sc
    blr

#elif defined(__DDK_ARM64__)

/* args x0, x8, x9, x10, x11 is kept to tell that this is a Kernel call */
__KernelCallDispatch:
    /* There is no specific interrupt request id for a system call in ARM64 as well. */
    mov x11, #0x33
    svc #0

#endif