Mercurial > hg > Members > mitsuki > xv6_rpi2_port
comparison source/main.c @ 0:ed10291ff195
first commit
author | mir3636 |
---|---|
date | Sun, 06 Jan 2019 19:27:03 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ed10291ff195 |
---|---|
1 /***************************************************************** | |
2 * main.c | |
3 * by Zhiyi Huang, hzy@cs.otago.ac.nz | |
4 * University of Otago | |
5 * | |
6 ********************************************************************/ | |
7 | |
8 | |
9 #include "types.h" | |
10 #include "defs.h" | |
11 #include "param.h" | |
12 #include "memlayout.h" | |
13 #include "mmu.h" | |
14 #include "proc.h" | |
15 #include "arm.h" | |
16 #include "mailbox.h" | |
17 | |
18 extern char end[]; // first address after kernel loaded from ELF file | |
19 extern pde_t *kpgdir; | |
20 extern volatile uint *mailbuffer; | |
21 extern unsigned int pm_size; | |
22 | |
23 void OkLoop() | |
24 { | |
25 setgpiofunc(18, 1); // gpio 18 for Ok Led, set as an output | |
26 while(1){ | |
27 setgpioval(18, 0); | |
28 delay(2000000); | |
29 setgpioval(18, 1); | |
30 delay(2000000); | |
31 } | |
32 } | |
33 | |
34 void NotOkLoop() | |
35 { | |
36 setgpiofunc(18, 1); // gpio 18 for Ok Led, set as an output | |
37 while(1){ | |
38 setgpioval(18, 0); | |
39 delay(500000); | |
40 setgpioval(18, 1); | |
41 delay(500000); | |
42 } | |
43 } | |
44 | |
45 unsigned int getpmsize() | |
46 { | |
47 create_request(mailbuffer, MPI_TAG_GET_ARM_MEMORY, 8, 0, 0); | |
48 writemailbox((uint *)mailbuffer, 8); | |
49 readmailbox(8); | |
50 if(mailbuffer[1] != 0x80000000) cprintf("Error readmailbox: %x\n", MPI_TAG_GET_ARM_MEMORY); | |
51 return mailbuffer[MB_HEADER_LENGTH + TAG_HEADER_LENGTH+1]; | |
52 } | |
53 | |
54 void machinit(void) | |
55 { | |
56 memset(cpus, 0, sizeof(struct cpu)*NCPU); | |
57 } | |
58 | |
59 | |
60 void enableirqminiuart(void); | |
61 | |
62 uint mb_data[10]; | |
63 | |
64 int cmain() | |
65 { | |
66 mmuinit0(); | |
67 machinit(); | |
68 | |
69 #if defined (RPI1) || defined (RPI2) | |
70 uartinit(); | |
71 #elif defined (FVP) | |
72 uartinit_fvp(); | |
73 #endif | |
74 | |
75 dsb_barrier(); | |
76 | |
77 consoleinit(); | |
78 cprintf("\nHello World from xv6\n"); | |
79 | |
80 kinit1(end, P2V((8*1024*1024)+PHYSTART)); | |
81 // collect some free space (8 MB) for imminent use | |
82 // the physical space below 0x8000 is reserved for PGDIR and kernel stack | |
83 kpgdir=p2v(K_PDX_BASE); | |
84 | |
85 mailboxinit(); | |
86 | |
87 pm_size = getpmsize(); | |
88 cprintf("ARM memory is %x\n", pm_size); | |
89 | |
90 mmuinit1(); | |
91 gpuinit(); | |
92 pinit(); | |
93 tvinit(); | |
94 cprintf("it is ok after tvinit\n"); | |
95 binit(); | |
96 cprintf("it is ok after binit\n"); | |
97 fileinit(); | |
98 cprintf("it is ok after fileinit\n"); | |
99 iinit(); | |
100 cprintf("it is ok after iinit\n"); | |
101 ideinit(); | |
102 cprintf("it is ok after ideinit\n"); | |
103 kinit2(P2V((8*1024*1024)+PHYSTART), P2V(pm_size)); | |
104 cprintf("it is ok after kinit2\n"); | |
105 userinit(); | |
106 cprintf("it is ok after userinit\n"); | |
107 timer3init(); | |
108 cprintf("it is ok after timer3init\n"); | |
109 scheduler(); | |
110 NotOkLoop(); | |
111 return 0; | |
112 } |