Fixes to x86 error and interrupt handling
[tpg/acess2.git] / Kernel / system.c
index 3d1ebca..2097f9b 100644 (file)
@@ -3,8 +3,8 @@
  * Architecture Independent System Init
  * system.c
  */
-#define DEBUG  1
-#include <common.h>
+#define DEBUG  0
+#include <acess.h>
 
 // === TYPES ===
 typedef struct
@@ -21,7 +21,7 @@ typedef struct
 
 // === IMPORTS ===
 extern int     Modules_LoadBuiltins();
-extern int     PCI_Install();
+//extern int   PCI_Install();
 extern void    DMA_Install();
 extern void    Debug_SetKTerminal(char *File);
 extern void    StartupPrint(char *Str);
@@ -39,24 +39,16 @@ char        *gsConfigScript = "/Acess/Conf/BootConf.cfg";
 
 // === CODE ===
 void System_Init(char *ArgString)
-{
-       // - Start Builtin Drivers & Filesystems
-       StartupPrint("Scanning PCI Bus...");
-       PCI_Install();
-       StartupPrint("Loading DMA...");
-       DMA_Install();
-       StartupPrint("Loading staticly compiled modules...");
-       Modules_LoadBuiltins();
-       
+{      
        // Set the debug to be echoed to the terminal
-       StartupPrint("Kernel now echoes to VT6 (Ctrl-Alt-F7)");
-       Debug_SetKTerminal("/Devices/VTerm/6");
+       StartupPrint("Kernel now echoes to VT7 (Ctrl-Alt-F8)");
+       Debug_SetKTerminal("/Devices/VTerm/7");
        
        // - Parse Kernel's Command Line
        System_ParseCommandLine(ArgString);
        
        // - Execute the Config Script
-       Log("Executing config script...");
+       Log_Log("Config", "Executing config script...");
        System_ExecuteScript();
 }
 
@@ -71,14 +63,16 @@ void System_ParseCommandLine(char *ArgString)
         int    i;
        char    *str;
        
-       Log("Kernel Command Line: \"%s\"", ArgString);
+       Log_Log("Config", "Kernel Invocation \"%s\"", ArgString);
        
        // --- Get Arguments ---
        str = ArgString;
        for( argc = 0; argc < 32; argc++ )
        {
-               while(*str == ' ')      str++;  // Eat Whitespace
-               if(*str == '\0') {      argc--; break;} // End of string
+               // Eat Whitespace
+               while(*str == ' ')      str++;
+               // Check for the end of the string
+               if(*str == '\0') {      argc--; break;} 
                argv[argc] = str;
                while(*str && *str != ' ')
                {
@@ -88,7 +82,7 @@ void System_ParseCommandLine(char *ArgString)
                        }*/
                        str++;
                }
-               if(*str == '\0')        break;  // End of string
+               if(*str == '\0')        break;  // Check for EOS
                *str = '\0';    // Cap off argument string
                str ++; // and increment the string pointer
        }
@@ -120,7 +114,7 @@ void System_ParseVFS(char *Arg)
        
        // Check if the equals was found
        if( *value == '\0' ) {
-               Warning("Expected '=' in the string '%s'", Arg);
+               Log_Warning("Config", "Expected '=' in the string '%s'", Arg);
                return ;
        }
        
@@ -131,7 +125,7 @@ void System_ParseVFS(char *Arg)
        // - Symbolic Link <link>=<destination>
        if(value[0] == '/')
        {
-               Log("Symbolic link '%s' pointing to '%s'", Arg, value);
+               Log_Log("Config", "Symbolic link '%s' pointing to '%s'", Arg, value);
                VFS_Symlink(Arg, value);
        }
        // - Mount <mountpoint>=<fs>:<device>
@@ -146,13 +140,13 @@ void System_ParseVFS(char *Arg)
                }
                // Create Mountpoint
                if( (fd = VFS_Open(Arg, 0)) == -1 ) {
-                       Log("Creating directory '%s'", Arg, value);
+                       Log_Log("Config", "Creating directory '%s'", Arg, value);
                        VFS_MkDir( Arg );
                } else {
                        VFS_Close(fd);
                }
                // Mount
-               Log("Mounting '%s' to '%s' ('%s')", dev, Arg, value);
+               Log_Log("Config", "Mounting '%s' to '%s' ('%s')", dev, Arg, value);
                VFS_Mount(dev, Arg, value, "");
        }
 }
@@ -172,10 +166,10 @@ void System_ParseSetting(char *Arg)
        // Check for boolean/flag (no '=')
        if(*value == '\0')
        {
-               if(strcmp(Arg, "") == 0) {
-               } else {
-                       Warning("Kernel flag '%s' is not recognised", Arg);
-               }
+               //if(strcmp(Arg, "") == 0) {
+               //} else {
+                       Log_Warning("Config", "Kernel flag '%s' is not recognised", Arg);
+               //}
        }
        else
        {
@@ -183,10 +177,10 @@ void System_ParseSetting(char *Arg)
                value ++;       // and eat it's position
                
                if(strcmp(Arg, "SCRIPT") == 0) {
-                       Log("Config Script: '%s'", value);
+                       Log_Log("Config", "Config Script: '%s'", value);
                        gsConfigScript = value;
                } else {
-                       Warning("Kernel config setting '%s' is not recognised", Arg);
+                       Log_Warning("Config", "Kernel config setting '%s' is not recognised", Arg);
                }
                
        }
@@ -207,7 +201,7 @@ void System_ExecuteScript()
        // Open Script
        fp = VFS_Open(gsConfigScript, VFS_OPENFLAG_READ);
        if(fp == -1) {
-               Warning("[CFG] Passed script '%s' does not exist", gsConfigScript);
+               Log_Warning("Config", "Passed script '%s' does not exist", gsConfigScript);
                return;
        }
        
@@ -225,28 +219,31 @@ void System_ExecuteScript()
        // Parse File
        file = System_Int_ParseFile(fData);
        
-       // Loop lines
+       // Parse each line
        for( i = 0; i < file->nLines; i++ )
        {
                line = &file->Lines[i];
                if( line->nParts == 0 ) continue;       // Skip blank
                
-               // Mount
-               if( strcmp(line->Parts[0], "mount") == 0 ) {
+               // Mount Device
+               if( strcmp(line->Parts[0], "mount") == 0 )
+               {
                        if( line->nParts != 4 ) {
-                               Warning("Configuration command 'mount' requires 3 arguments, %i given",
+                               Log_Warning("Config", "Configuration command 'mount' requires 3 arguments, %i given",
                                        line->nParts-1);
                                continue;
                        }
-                       //Log("[CFG ] Mount '%s' to '%s' (%s)",
+                       //Log_Log("Config", "Mount '%s' to '%s' (%s)",
                        //      line->Parts[1], line->Parts[2], line->Parts[3]);
                        //! \todo Use an optional 4th argument for the options string
                        VFS_Mount(line->Parts[1], line->Parts[2], line->Parts[3], "");
                }
-               // Module
-               else if(strcmp(line->Parts[0], "module") == 0) {
+               // Load a Module
+               else if(strcmp(line->Parts[0], "module") == 0)
+               {
                        if( line->nParts < 2 || line->nParts > 3 ) {
-                               Warning("Configuration command 'module' requires 1 or 2 arguments, %i given",
+                               Log_Warning("CFG",
+                                       "Configuration command 'module' requires 1 or 2 arguments, %i given",
                                        line->nParts-1);
                                continue;
                        }
@@ -255,59 +252,64 @@ void System_ExecuteScript()
                        else
                                Module_LoadFile(line->Parts[1], "");
                }
-               // UDI Module
-               else if(strcmp(line->Parts[0], "udimod") == 0) {
+               // Load a UDI Module
+               else if(strcmp(line->Parts[0], "udimod") == 0)
+               {
                        if( line->nParts != 2 ) {
-                               Warning("Configuration command 'udimod' requires 1 argument, %i given",
+                               Log_Warning("Config", "Configuration command 'udimod' requires 1 argument, %i given",
                                        line->nParts-1);
                                continue;
                        }
-                       Log("[CFG  ] Load UDI Module '%s'", line->Parts[1]);
+                       Log_Log("Config", "Load UDI Module '%s'", line->Parts[1]);
                        Module_LoadFile(line->Parts[1], "");
                }
-               // EDI Module
-               else if(strcmp(line->Parts[0], "edimod") == 0) {
+               // Load a EDI Module
+               else if(strcmp(line->Parts[0], "edimod") == 0)
+               {
                        if( line->nParts != 2 ) {
-                               Warning("Configuration command 'edimod' requires 1 argument, %i given",
+                               Log_Warning("Config", "Configuration command 'edimod' requires 1 argument, %i given",
                                        line->nParts-1);
                                continue;
                        }
-                       Log("[CFG  ] Load EDI Module '%s'", line->Parts[1]);
+                       Log_Log("Config", "Load EDI Module '%s'", line->Parts[1]);
                        Module_LoadFile(line->Parts[1], "");
                }
-               // Symbolic Link
-               else if(strcmp(line->Parts[0], "symlink") == 0) {
+               // Create a Symbolic Link
+               else if(strcmp(line->Parts[0], "symlink") == 0)
+               {
                        if( line->nParts != 3 ) {
-                               Warning("Configuration command 'symlink' requires 2 arguments, %i given",
+                               Log_Warning("Config", "Configuration command 'symlink' requires 2 arguments, %i given",
                                        line->nParts-1);
                                continue;
                        }
-                       Log("[CFG  ] Symlink '%s' pointing to '%s'",
+                       Log_Log("Config", "Symlink '%s' pointing to '%s'",
                                line->Parts[1], line->Parts[2]);
                        VFS_Symlink(line->Parts[1], line->Parts[2]);
                }
-               // Create Directory
-               else if(strcmp(line->Parts[0], "mkdir") == 0) {
+               // Create a Directory
+               else if(strcmp(line->Parts[0], "mkdir") == 0)
+               {
                        if( line->nParts != 2 ) {
-                               Warning("Configuration command 'mkdir' requires 1 argument, %i given",
+                               Log_Warning("Config", "Configuration command 'mkdir' requires 1 argument, %i given",
                                        line->nParts-1);
                                continue;
                        }
-                       Log("[CFG  ] New Directory '%s'", line->Parts[1]);
+                       Log_Log("Config", "New Directory '%s'", line->Parts[1]);
                        VFS_MkDir(line->Parts[1]);
                }
                // Spawn a process
-               else if(strcmp(line->Parts[0], "spawn") == 0) {
+               else if(strcmp(line->Parts[0], "spawn") == 0)
+               {
                        if( line->nParts != 2 ) {
-                               Warning("Configuration command 'spawn' requires 1 argument, %i given",
+                               Log_Warning("Config", "Configuration command 'spawn' requires 1 argument, %i given",
                                        line->nParts-1);
                                continue;
                        }
-                       Log("[CFG  ] Starting '%s' as a new task", line->Parts[1]);
+                       Log_Log("Config", "Starting '%s' as a new task", line->Parts[1]);
                        Proc_Spawn(line->Parts[1]);
                }
                else {
-                       Warning("Unknown configuration command '%s' on line %i",
+                       Log_Warning("Config", "Unknown configuration command '%s' on line %i",
                                line->Parts[0],
                                line->TrueLine
                                );

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