blob: d4fa7b89f447d70427888d8b2ca00ed833e86af2 (
plain) (
blame)
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
|
#include <apos/debug.h>
#include <apos/init.h>
#include <apos/vmem.h>
#include <apos/mem.h>
#ifdef DEBUG
static void kernel_dbg(void *fdt)
{
struct dbg_info_t dbg = dbg_from_fdt(fdt);
dbg_init(dbg.dbg_ptr, dbg.dev);
}
#else
#define kernel_dbg(...)
#endif
static void map_fdt(struct vm_branch_t *branch, vm_t fdt_base, vm_t fdt_top)
{
map_vregion(branch, fdt_base, 0, fdt_top - fdt_base, VM_R | VM_W |VM_V);
}
void __main main(struct init_data_t d)
{
/* feck */
dbg_init(0x10000000, NS16550A);
dbg("test\n");
init_pmap((void *)d.pmap_base);
init_mem(d.max_order, d.bits, d.page_shift);
init_vmem(ROOT_PTE, d.tmp_pte);
/* TODO: move pmap into vmem somewhere */
/* TODO: mark kernel area as used */
map_fdt(ROOT_PTE, d.fdt_base, d.fdt_top);
kernel_dbg((void *)d.fdt_base);
/* TODO: approximate order of business:
* setup debugging in vmem (requires mapping fdt)
* free unnecessary init
* setup interrupts (should this be done in init?)
* load init from initrd
* setup init environment (thread control blocks etc.)
* jumpstart init (free stack init setup)
*/
/* functionality that should be implemented:
* figure out best continuous run of memory (pmap etc)
* arbitrary user and kernel mapping (memory)
* vm to pm
*/
}
|