1/*
2 * Copyright (c) 2007, 2008, 2009, ETH Zurich.
3 * All rights reserved.
4 *
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10#include <barrelfish/barrelfish.h>
11#include <barrelfish/caddr.h>
12#include <barrelfish/dispatch.h>
13
14#include <barrelfish/syscalls.h>
15#include <barrelfish/syscall_arch.h>
16#include <barrelfish_kpi/syscalls.h>
17
18STATIC_ASSERT_SIZEOF(struct sysret, 2 * sizeof(uintptr_t));
19STATIC_ASSERT_OFFSETOF(struct sysret, error, 0 * sizeof(uintptr_t));
20STATIC_ASSERT_OFFSETOF(struct sysret, value, 1 * sizeof(uintptr_t));
21STATIC_ASSERT(SYSCALL_REG == 0, "Bad register for system call argument.");
22
23//
24// System call wrappers
25//
26
27void
28sys_armv7_cache_clean_pou(void *start, void *end) {
29    struct sysret r=
30        syscall4(SYSCALL_ARMv7_CACHE_CLEAN,
31                 (uint32_t)start, (uint32_t)end, 0);
32    assert(err_is_ok(r.error));
33}
34
35void
36sys_armv7_cache_clean_poc(void *start, void *end) {
37    struct sysret r=
38        syscall4(SYSCALL_ARMv7_CACHE_CLEAN,
39                 (uint32_t)start, (uint32_t)end, 1);
40    assert(err_is_ok(r.error));
41}
42
43void
44sys_armv7_cache_invalidate(void *start, void *end) {
45    struct sysret r=
46        syscall3(SYSCALL_ARMv7_CACHE_INVAL,
47                 (uint32_t)start, (uint32_t)end);
48    assert(err_is_ok(r.error));
49}
50