Kernel/x86 - Some extra logging in ACPICA shim
[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 #include "include/options.h"
12
13 // === IMPORTS ===
14 extern void     Interrupts_Setup(void);
15 extern void     Arch_LoadBootModules(void);
16 extern void     Heap_Install(void);
17 extern void     Threads_Init(void);
18 extern void     System_Init(const char *Commandline);
19 extern void     Time_Setup(void);
20 extern void     Debug_int_SerialIRQHandler(int IRQ, void *unused);
21
22 // === PROTOTYPES ===
23  int    kmain(void);
24 Uint32  ARMv7_int_HandleSyscalls(Uint32 Num, Uint32 *Args);
25
26 // === CODE ===
27 int kmain(void)
28 {
29         LogF("Acess2 ARMv7 v"EXPAND_STR(KERNEL_VERSION)"\n");
30         LogF(" Git Hash %s\n", gsGitHash);
31         LogF(" Build %i\n", BUILD_NUM);
32         
33         MM_SetupPhys();
34
35         LogF("Heap Setup...\n");
36         Heap_Install();
37
38         LogF("Threads Init...\n");
39         Threads_Init();
40         
41         LogF("VFS Init...\n");
42         VFS_Init();
43
44         // Boot modules?
45         // - most ARMv7 configs use a GIC
46         Module_EnsureLoaded("armv7_GIC");
47         IRQ_AddHandler(UART0_IRQ, Debug_int_SerialIRQHandler, NULL);
48         
49         Time_Setup();
50
51         //
52         LogF("Moving to arch-independent init\n");
53         #if PLATFORM_is_tegra2
54         System_Init("Acess2.armv7.bin /Acess=initrd: -VTerm:Video=Tegra2Vid");
55         #else
56         System_Init("Acess2.armv7.bin /Acess=initrd: -VTerm:Video=PL110");
57         #endif
58 //      System_Init("Acess2.armv7.bin /Acess=initrd:");
59         //TODO: 
60         LogF("End of kmain(), for(;;) Threads_Sleep();\n");
61         for(;;)
62                 Threads_Sleep();
63 }
64
65 void Arch_LoadBootModules(void)
66 {
67 }
68
69 Uint32 ARMv7_int_HandleSyscalls(Uint32 Num, Uint32 *Args)
70 {
71         Uint32  ret = -1, err = 0;
72         Uint32  addr;
73         ENTER("iNum xArgs[0] xArgs[1] xArgs[2] xArgs[3]",
74                 Num, Args[0], Args[1], Args[2], Args[3]
75                 );
76         switch(Num)
77         {
78         case 1:
79 //              Log_Debug("ARMv7", "__clear_cache(%p, %p)", Args[0], Args[1]);
80                 // Align
81                 Args[0] &= ~0xFFF;
82                 Args[1] += 0xFFF;       Args[1] &= ~0xFFF;
83                 // Invalidate!
84                 for( addr = Args[0]; addr < Args[1]; addr += 0x1000 )
85                 {
86                         LOG("addr = %p", addr);
87                         __asm__ __volatile__ (
88                                 "mcrlt p15, 0, %0, c7, c5, 1;\n\t"
89                                 "mcrlt p15, 0, %0, c7, c6, 1;\n\t"
90                                 :
91                                 : "r" (addr)
92                                 );
93                 }
94                 ret = 0;
95                 break;
96         }
97         Args[0] = ret;  // RetLow
98         Args[1] = 0;    // RetHi
99         Args[2] = err;  // Errno
100         LEAVE('x', ret);
101         return ret;
102 }
103

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