0
|
1 // BSP support routine
|
|
2 #include "types.h"
|
|
3 #include "defs.h"
|
|
4 #include "param.h"
|
|
5 #include "arm.h"
|
|
6 #include "proc.h"
|
|
7 #include "memlayout.h"
|
|
8 #include "mmu.h"
|
|
9
|
|
10 extern void* end;
|
|
11
|
|
12 struct cpu cpus[NCPU];
|
|
13 struct cpu *cpu;
|
|
14
|
|
15 #define MB (1024*1024)
|
|
16
|
|
17 void kmain (void)
|
|
18 {
|
|
19 uint vectbl;
|
|
20
|
|
21 cpu = &cpus[0];
|
|
22
|
|
23 uart_init (P2V(UART0));
|
|
24
|
|
25 // interrrupt vector table is in the middle of first 1MB. We use the left
|
|
26 // over for page tables
|
|
27 vectbl = P2V_WO (VEC_TBL & PDE_MASK);
|
|
28
|
|
29 init_vmm ();
|
|
30 kpt_freerange (align_up(&end, PT_SZ), vectbl);
|
|
31 kpt_freerange (vectbl + PT_SZ, P2V_WO(INIT_KERNMAP));
|
|
32 paging_init (INIT_KERNMAP, PHYSTOP);
|
|
33
|
|
34 kmem_init ();
|
|
35 kmem_init2(P2V(INIT_KERNMAP), P2V(PHYSTOP));
|
|
36
|
|
37 trap_init (); // vector table and stacks for models
|
|
38 pic_init (P2V(VIC_BASE)); // interrupt controller
|
|
39 uart_enable_rx (); // interrupt for uart
|
|
40 consoleinit (); // console
|
|
41 pinit (); // process (locks)
|
|
42
|
|
43 binit (); // buffer cache
|
|
44 fileinit (); // file table
|
|
45 iinit (); // inode cache
|
|
46 ideinit (); // ide (memory block device)
|
|
47 timer_init (HZ); // the timer (ticker)
|
|
48
|
|
49
|
|
50 sti ();
|
|
51
|
|
52 userinit(); // first user process
|
|
53 scheduler(); // start running processes
|
|
54 }
|