comparison source/main.c @ 0:c450faca55f4

Init
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Sun, 22 Oct 2017 18:25:39 +0900
parents
children 59cb42810ad9
comparison
equal deleted inserted replaced
-1:000000000000 0:c450faca55f4
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 FBI fbinfo;
21 extern volatile uint *mailbuffer;
22
23 void OkLoop()
24 {
25 setgpiofunc(16, 1); // gpio 16, set as an output
26 while(1){
27 setgpioval(16, 0);
28 delay(1000000);
29 setgpioval(16, 1);
30 delay(1000000);
31 }
32 }
33
34 void NotOkLoop()
35 {
36 setgpiofunc(16, 1); // gpio 16, set as an output
37 while(1){
38 setgpioval(16, 0);
39 delay(100000);
40 setgpioval(16, 1);
41 delay(100000);
42 }
43 }
44
45 void machinit(void)
46 {
47 memset(cpus, 0, sizeof(struct cpu)*NCPU);
48 }
49
50
51 void enableirqminiuart(void);
52
53 int cmain()
54 {
55
56 mmuinit1();
57 machinit();
58 uartinit();
59 dsb_barrier();
60 consoleinit();
61 cprintf("\nHello World from xv6\n");
62 kinit1(end, P2V(8*1024*1024)); // reserve 8 pages for PGDIR
63 kpgdir=p2v(K_PDX_BASE);
64
65 mailboxinit();
66 create_request(mailbuffer, MPI_TAG_GET_ARM_MEMORY, 8, 0, 0);
67 writemailbox((uint *)mailbuffer, 8);
68 readmailbox(8);
69 if(mailbuffer[1] != 0x80000000) cprintf("new error readmailbox\n");
70 else
71 cprintf("ARM memory is %x %x\n", mailbuffer[MB_HEADER_LENGTH + TAG_HEADER_LENGTH], mailbuffer[MB_HEADER_LENGTH + TAG_HEADER_LENGTH+1]);
72
73 pinit();
74 tvinit();
75 cprintf("it is ok after tvinit\n");
76 binit();
77 cprintf("it is ok after binit\n");
78 fileinit();
79 cprintf("it is ok after fileinit\n");
80 iinit();
81 cprintf("it is ok after iinit\n");
82 ideinit();
83 cprintf("it is ok after ideinit\n");
84 timer3init();
85 kinit2(P2V(8*1024*1024), P2V(PHYSTOP));
86 cprintf("it is ok after kinit2\n");
87 userinit();
88 cprintf("it is ok after userinit\n");
89 scheduler();
90
91
92 NotOkLoop();
93
94 return 0;
95 }