1/**
2 * \file
3 * \brief Dispatcher entry points.
4 */
5
6/*
7 * Copyright (c) 2007-2009, ETH Zurich.
8 * Copyright (c) 2015, Hewlett Packard Enterprise Development LP.
9 * All rights reserved.
10 *
11 * This file is distributed under the terms in the attached LICENSE file.
12 * If you do not find this file, copies can be found by writing to:
13 * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
14 */
15
16#ifndef __ASSEMBLER__
17#define __ASSEMBLER__ // GCC Bug c/25993
18#endif /* __ASSEMBLER__ */
19
20#include <barrelfish/dispatch.h>
21#include <asmoffsets.h>
22
23.text
24.extern disp_run, disp_pagefault, disp_pagefault_disabled, disp_trap
25.globl run_entry, pagefault_entry, disabled_pagefault_entry, trap_entry
26
27.macro init_sp offset
28    /* Offset to the top of the required stack. */
29    ldr x10, =(OFFSETOF_DISP_GENERIC + \offset)
30    add sp, x0, x10
31.endm
32
33/* void run_entry(struct disp_priv* p) */
34run_entry:
35    init_sp OFFSETOF_DISP_PRIV_STACK_LIMIT
36    b disp_run
37
38/*
39 * void pagefault_entry(struct disp_priv *p, vaddr_t fault_addr,
40 *                      uintptr_t error, vaddr_t pc)
41 */
42pagefault_entry:
43    init_sp OFFSETOF_DISP_PRIV_STACK_LIMIT
44    b disp_pagefault
45
46/*
47 * void disabled_pagefault_entry(struct disp_priv *p, vaddr_t fault_addr,
48 *                               uintptr_t error, vaddr_t pc)
49 */
50disabled_pagefault_entry:
51    init_sp OFFSETOF_DISP_PRIV_TRAP_STACK_LIMIT
52    b disp_pagefault_disabled
53
54/*
55 * void trap_entry(struct disp_priv *p, uintptr_t irq,
56 *                 uintptr_t error, vaddr_t pc)
57 */
58trap_entry:
59    init_sp OFFSETOF_DISP_PRIV_TRAP_STACK_LIMIT
60    b disp_trap
61