Merge branch 'master' of git://localhost/acess2
[tpg/acess2.git] / KernelLand / Kernel / arch / armv7 / main.c
1 /*
2  * Acess2
3  *
4  * ARM7 Entrypoint
5  * arch/arm7/main.c
6  */
7 #define DEBUG   0
8
9 #include <acess.h>
10 #include <modules.h>
11
12 // === IMPORTS ===
13 extern void     Interrupts_Setup(void);
14 extern void     Arch_LoadBootModules(void);
15 extern void     Heap_Install(void);
16 extern void     Threads_Init(void);
17 extern void     System_Init(const char *Commandline);
18 extern void     Time_Setup(void);
19
20 // === PROTOTYPES ===
21  int    kmain(void);
22 Uint32  ARMv7_int_HandleSyscalls(Uint32 Num, Uint32 *Args);
23
24 // === CODE ===
25 int kmain(void)
26 {
27         LogF("Acess2 ARMv7 v"EXPAND_STR(KERNEL_VERSION)"\n");
28         LogF(" Git Hash %s\n", gsGitHash);
29         LogF(" Build %i\n", BUILD_NUM);
30         
31         MM_SetupPhys();
32
33         LogF("Heap Setup...\n");
34         Heap_Install();
35
36         LogF("Threads Init...\n");
37         Threads_Init();
38         
39         LogF("VFS Init...\n");
40         VFS_Init();
41
42         // Boot modules?
43         Module_EnsureLoaded("armv7_GIC");
44
45         //
46         LogF("Moving to arch-independent init\n");
47         #if PLATFORM_is_tegra2
48         System_Init("Acess2.armv7.bin /Acess=initrd: -VTerm:Video=Tegra2Vid -USB_EHCI:C5000000-14,C5004000-15");
49         #else
50         System_Init("Acess2.armv7.bin /Acess=initrd: -VTerm:Video=PL110");
51         #endif
52 //      System_Init("Acess2.armv7.bin /Acess=initrd:");
53         //TODO: 
54         LogF("End of kmain(), for(;;) Threads_Sleep();\n");
55         for(;;)
56                 Threads_Sleep();
57 }
58
59 void Arch_LoadBootModules(void)
60 {
61 }
62
63 Uint32 ARMv7_int_HandleSyscalls(Uint32 Num, Uint32 *Args)
64 {
65         Uint32  ret = -1, err = 0;
66         Uint32  addr;
67         ENTER("iNum xArgs[0] xArgs[1] xArgs[2] xArgs[3]",
68                 Num, Args[0], Args[1], Args[2], Args[3]
69                 );
70         switch(Num)
71         {
72         case 1:
73 //              Log_Debug("ARMv7", "__clear_cache(%p, %p)", Args[0], Args[1]);
74                 // Align
75                 Args[0] &= ~0xFFF;
76                 Args[1] += 0xFFF;       Args[1] &= ~0xFFF;
77                 // Invalidate!
78                 for( addr = Args[0]; addr < Args[1]; addr += 0x1000 )
79                 {
80                         LOG("addr = %p", addr);
81                         __asm__ __volatile__ (
82                                 "mcrlt p15, 0, %0, c7, c5, 1;\n\t"
83                                 "mcrlt p15, 0, %0, c7, c6, 1;\n\t"
84                                 :
85                                 : "r" (addr)
86                                 );
87                 }
88                 ret = 0;
89                 break;
90         }
91         Args[0] = ret;  // RetLow
92         Args[1] = 0;    // RetHi
93         Args[2] = err;  // Errno
94         LEAVE('x', ret);
95         return ret;
96 }
97

UCC git Repository :: git.ucc.asn.au