1/*
2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7
8#include <sel4vm/guest_vm.h>
9
10#include "smc.h"
11
12seL4_Word smc_get_function_id(seL4_UserContext *u)
13{
14    return u->x0;
15}
16
17seL4_Word smc_set_return_value(seL4_UserContext *u, seL4_Word val)
18{
19    u->x0 = val;
20}
21
22seL4_Word smc_get_arg(seL4_UserContext *u, seL4_Word arg)
23{
24    switch (arg) {
25    case 1:
26        return u->x1;
27    case 2:
28        return u->x2;
29    case 3:
30        return u->x3;
31    case 4:
32        return u->x4;
33    case 5:
34        return u->x5;
35    case 6:
36        return u->x6;
37    default:
38        ZF_LOGF("SMC only has 6 argument registers");
39    }
40}
41
42void smc_set_arg(seL4_UserContext *u, seL4_Word arg, seL4_Word val)
43{
44    switch (arg) {
45    case 1:
46        u->x1 = val;
47        break;
48    case 2:
49        u->x2 = val;
50        break;
51    case 3:
52        u->x3 = val;
53        break;
54    case 4:
55        u->x4 = val;
56        break;
57    case 5:
58        u->x5 = val;
59        break;
60    case 6:
61        u->x6 = val;
62        break;
63    default:
64        ZF_LOGF("SMC only has 6 argument registers");
65    }
66}
67