main.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*****************************************************************
  2. * main.c
  3. * by Zhiyi Huang, [email protected]
  4. * University of Otago
  5. *
  6. ********************************************************************/
  7. #include "types.h"
  8. #include "defs.h"
  9. #include "param.h"
  10. #include "memlayout.h"
  11. #include "mmu.h"
  12. #include "proc.h"
  13. #include "arm.h"
  14. #include "mailbox.h"
  15. extern char end[]; // first address after kernel loaded from ELF file
  16. extern pde_t *kpgdir;
  17. extern FBI fbinfo;
  18. extern volatile uint *mailbuffer;
  19. void OkLoop()
  20. {
  21. setgpiofunc(16, 1); // gpio 16, set as an output
  22. while(1){
  23. setgpioval(16, 0);
  24. delay(1000000);
  25. setgpioval(16, 1);
  26. delay(1000000);
  27. }
  28. }
  29. void NotOkLoop()
  30. {
  31. setgpiofunc(16, 1); // gpio 16, set as an output
  32. while(1){
  33. setgpioval(16, 0);
  34. delay(100000);
  35. setgpioval(16, 1);
  36. delay(100000);
  37. }
  38. }
  39. void machinit(void)
  40. {
  41. memset(cpus, 0, sizeof(struct cpu)*NCPU);
  42. }
  43. void enableirqminiuart(void);
  44. int cmain()
  45. {
  46. mmuinit1();
  47. machinit();
  48. uartinit();
  49. dsb_barrier();
  50. consoleinit();
  51. cprintf("\nHello World from xv6\n");
  52. kinit1(end, P2V(8*1024*1024)); // reserve 8 pages for PGDIR
  53. kpgdir=p2v(K_PDX_BASE);
  54. mailboxinit();
  55. create_request(mailbuffer, MPI_TAG_GET_ARM_MEMORY, 8, 0, 0);
  56. writemailbox((uint *)mailbuffer, 8);
  57. readmailbox(8);
  58. if(mailbuffer[1] != 0x80000000) cprintf("new error readmailbox\n");
  59. else
  60. cprintf("ARM memory is %x %x\n", mailbuffer[MB_HEADER_LENGTH + TAG_HEADER_LENGTH], mailbuffer[MB_HEADER_LENGTH + TAG_HEADER_LENGTH+1]);
  61. pinit();
  62. tvinit();
  63. cprintf("it is ok after tvinit\n");
  64. binit();
  65. cprintf("it is ok after binit\n");
  66. fileinit();
  67. cprintf("it is ok after fileinit\n");
  68. iinit();
  69. cprintf("it is ok after iinit\n");
  70. ideinit();
  71. cprintf("it is ok after ideinit\n");
  72. timer3init();
  73. kinit2(P2V(8*1024*1024), P2V(PHYSTOP));
  74. cprintf("it is ok after kinit2\n");
  75. userinit();
  76. cprintf("it is ok after userinit\n");
  77. scheduler();
  78. NotOkLoop();
  79. return 0;
  80. }