1/*
2 * Copyright 2014, General Dynamics C4 Systems
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#include <types.h>
8#include <machine/registerset.h>
9#include <arch/machine.h>
10#include <plat/machine/hardware.h>
11
12word_t PURE getRestartPC(tcb_t *thread)
13{
14    return getRegister(thread, FaultIP);
15}
16
17void setNextPC(tcb_t *thread, word_t v)
18{
19    setRegister(thread, NEXT_PC_REG, v);
20}
21
22BOOT_CODE int get_num_avail_p_regs(void)
23{
24    return sizeof(avail_p_regs) / sizeof(p_region_t);
25}
26
27BOOT_CODE const p_region_t *get_avail_p_regs(void)
28{
29    return (const p_region_t *) avail_p_regs;
30}
31
32BOOT_CODE void map_kernel_devices(void)
33{
34    for (int i = 0; i < ARRAY_SIZE(kernel_devices); i++) {
35        map_kernel_frame(kernel_devices[i].paddr,
36                         kernel_devices[i].pptr,
37                         VMKernelOnly,
38                         vm_attributes_new(kernel_devices[i].armExecuteNever,
39                                           false, false));
40        if (!kernel_devices[i].userAvailable) {
41            p_region_t reg = {
42                .start = kernel_devices[i].paddr,
43                .end = kernel_devices[i].paddr + (1 << PAGE_BITS),
44            };
45            reserve_region(reg);
46        }
47    }
48}
49
50