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

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