X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Farmv7%2Fmain.c;h=248c17c5257f2aad7ac84977cf5bd5192d947ff9;hb=7536e8afcc3018c4ca2a4aa8f8422cf86a6c188c;hp=b6186bbe54970ee0c0646b3a433f08e19d52c58e;hpb=acc4756d2e22346862ec098be4a18f52846f6dc4;p=tpg%2Facess2.git diff --git a/Kernel/arch/armv7/main.c b/Kernel/arch/armv7/main.c index b6186bbe..248c17c5 100644 --- a/Kernel/arch/armv7/main.c +++ b/Kernel/arch/armv7/main.c @@ -4,7 +4,10 @@ * ARM7 Entrypoint * arch/arm7/main.c */ +#define DEBUG 0 + #include +#include // === IMPORTS === extern void Interrupts_Setup(void); @@ -15,13 +18,14 @@ extern void System_Init(const char *Commandline); // === PROTOTYPES === int kmain(void); +Uint32 ARMv7_int_HandleSyscalls(Uint32 Num, Uint32 *Args); // === CODE === int kmain(void) { LogF("Acess2 ARMv7 v"EXPAND_STR(KERNEL_VERSION)"\n"); + LogF(" Git Hash %s\n", gsGitHash); LogF(" Build %i\n", BUILD_NUM); -// Interrupts_Setup(); MM_SetupPhys(); @@ -35,16 +39,58 @@ int kmain(void) VFS_Init(); // Boot modules? + Module_EnsureLoaded("armv7_GIC"); // LogF("Moving to arch-independent init\n"); - System_Init(""); + #if PLATFORM_is_tegra2 + System_Init("Acess2.armv7.bin /Acess=initrd: -VTerm:Video=Tegra2Vid"); + #else + System_Init("Acess2.armv7.bin /Acess=initrd: -VTerm:Video=PL110"); + #endif +// System_Init("Acess2.armv7.bin /Acess=initrd:"); //TODO: - LogF("End of kmain(), for(;;);\n"); - for(;;); + LogF("End of kmain(), for(;;) Threads_Sleep();\n"); + for(;;) + Threads_Sleep(); } void Arch_LoadBootModules(void) { } +Uint32 ARMv7_int_HandleSyscalls(Uint32 Num, Uint32 *Args) +{ + Uint32 ret = -1, err = 0; + Uint32 addr; + ENTER("iNum xArgs[0] xArgs[1] xArgs[2] xArgs[3]", + Num, Args[0], Args[1], Args[2], Args[3] + ); + switch(Num) + { + case 1: +// Log_Debug("ARMv7", "__clear_cache(%p, %p)", Args[0], Args[1]); + // Align + Args[0] &= ~0xFFF; + Args[1] += 0xFFF; Args[1] &= ~0xFFF; + // Invalidate! + for( addr = Args[0]; addr < Args[1]; addr += 0x1000 ) + { + LOG("addr = %p", addr); + __asm__ __volatile__ ( + "mcrlt p15, 0, %0, c7, c5, 1;\n\t" + "mcrlt p15, 0, %0, c7, c6, 1;\n\t" + : + : "r" (addr) + ); + } + ret = 0; + break; + } + Args[0] = ret; // RetLow + Args[1] = 0; // RetHi + Args[2] = err; // Errno + LEAVE('x', ret); + return ret; +} +