aboutsummaryrefslogtreecommitdiff
path: root/arch/none/host/src/arch_main.c
blob: 5e319dc372e749c21c9aab0c2750db1be004572c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
 * Arm SCP/MCP Software
 * Copyright (c) 2015-2020, Arm Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <fwk_arch.h>
#include <fwk_noreturn.h>
#include <fwk_status.h>

#include <stdio.h>
#include <stdlib.h>

extern int arch_interrupt_init(const struct fwk_arch_interrupt_driver **driver);

/*
 * Catches early failures in the initialization.
 */
static noreturn void panic(void)
{
    printf("Panic!\n");
    exit(1);
}

static int mm_init(struct fwk_arch_mm_data *data)
{
    const size_t size = 1024 * 1024; /* 1MB of heap */
    void *mem;

    mem = malloc(size);
    if (mem == NULL)
        return FWK_E_NOMEM;

    data->start = (uintptr_t)mem;
    data->size = size;

    return FWK_SUCCESS;
}

static const struct fwk_arch_init_driver arch_init_driver = {
    .mm = mm_init,
    .interrupt = arch_interrupt_init,
};

int main(void)
{
    int status;

    status = fwk_arch_init(&arch_init_driver);
    if (status != FWK_SUCCESS)
        panic();
}