1/*
2 * Copyright 2014, General Dynamics C4 Systems
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#pragma once
8
9#include <config.h>
10#include <types.h>
11#include <plat/machine/acpi.h>
12#include <kernel/boot.h>
13#include <sel4/arch/bootinfo_types.h>
14
15typedef struct mem_p_regs {
16    word_t count;
17    p_region_t list[MAX_NUM_FREEMEM_REG];
18} mem_p_regs_t;
19
20typedef struct ui_info {
21    p_region_t p_reg;     /* region where the userland image lies in */
22    sword_t    pv_offset; /* UI virtual address + pv_offset = UI physical address */
23    vptr_t     v_entry;   /* entry point (virtual address) of userland image */
24} ui_info_t;
25
26cap_t create_unmapped_it_frame_cap(pptr_t pptr, bool_t use_large);
27cap_t create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large,
28                                 bool_t executable);
29
30bool_t init_sys_state(
31    cpu_id_t      cpu_id,
32    mem_p_regs_t  *mem_p_regs,
33    ui_info_t     ui_info,
34    p_region_t    boot_mem_reuse_p_reg,
35    /* parameters below not modeled in abstract specification */
36    uint32_t      num_drhu,
37    paddr_t      *drhu_list,
38    acpi_rmrr_list_t *rmrr_list,
39    acpi_rsdp_t      *acpi_rsdp,
40    seL4_X86_BootInfo_VBE *vbe,
41    seL4_X86_BootInfo_mmap_t *mb_mmap,
42    seL4_X86_BootInfo_fb_t *fb_info
43);
44
45bool_t init_cpu(
46    bool_t   mask_legacy_irqs
47);
48
49bool_t add_allocated_p_region(p_region_t reg);
50void init_allocated_p_regions(void);
51
52