diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/main.c	Sun Oct 22 18:25:39 2017 +0900
@@ -0,0 +1,95 @@
+/*****************************************************************
+*       main.c
+*       by Zhiyi Huang, hzy@cs.otago.ac.nz
+*       University of Otago
+*
+********************************************************************/
+
+
+#include "types.h"
+#include "defs.h"
+#include "param.h"
+#include "memlayout.h"
+#include "mmu.h"
+#include "proc.h"
+#include "arm.h"
+#include "mailbox.h"
+
+extern char end[]; // first address after kernel loaded from ELF file
+extern pde_t *kpgdir;
+extern FBI fbinfo;
+extern volatile uint *mailbuffer;
+
+void OkLoop()
+{
+   setgpiofunc(16, 1); // gpio 16, set as an output
+   while(1){
+        setgpioval(16, 0);
+        delay(1000000);
+        setgpioval(16, 1);
+        delay(1000000);
+   }
+}
+
+void NotOkLoop()
+{
+   setgpiofunc(16, 1); // gpio 16, set as an output
+   while(1){
+        setgpioval(16, 0);
+        delay(100000);
+        setgpioval(16, 1);
+        delay(100000);
+   }
+}
+
+void machinit(void)
+{
+    memset(cpus, 0, sizeof(struct cpu)*NCPU);
+}
+
+
+void enableirqminiuart(void);
+
+int cmain()
+{
+
+  mmuinit1();
+  machinit();
+  uartinit();
+  dsb_barrier();
+  consoleinit();
+  cprintf("\nHello World from xv6\n");
+  kinit1(end, P2V(8*1024*1024));  // reserve 8 pages for PGDIR
+  kpgdir=p2v(K_PDX_BASE);
+
+  mailboxinit();
+  create_request(mailbuffer, MPI_TAG_GET_ARM_MEMORY, 8, 0, 0);
+  writemailbox((uint *)mailbuffer, 8);
+  readmailbox(8);
+  if(mailbuffer[1] != 0x80000000) cprintf("new error readmailbox\n");
+  else 
+cprintf("ARM memory is %x %x\n", mailbuffer[MB_HEADER_LENGTH + TAG_HEADER_LENGTH], mailbuffer[MB_HEADER_LENGTH + TAG_HEADER_LENGTH+1]);
+
+  pinit();
+  tvinit();
+  cprintf("it is ok after tvinit\n");
+  binit();
+cprintf("it is ok after binit\n");
+  fileinit();
+cprintf("it is ok after fileinit\n");
+  iinit();
+cprintf("it is ok after iinit\n");
+  ideinit();
+cprintf("it is ok after ideinit\n");
+  timer3init();
+  kinit2(P2V(8*1024*1024), P2V(PHYSTOP));
+cprintf("it is ok after kinit2\n");
+  userinit();
+cprintf("it is ok after userinit\n");
+  scheduler();
+
+
+  NotOkLoop();
+
+  return 0;
+}