X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdebug.c;h=7915b86986c7f2b729bab1fb96693bba193f032e;hb=717454930aa0e255517c68c837927deac49bd78e;hp=c05efa0bbbb67a94afe23f3eebd67bee7e4ff22c;hpb=4e949acb1c98bc071af2d5d9038b4a3e703bf33d;p=tpg%2Facess2.git diff --git a/Kernel/debug.c b/Kernel/debug.c index c05efa0b..7915b869 100644 --- a/Kernel/debug.c +++ b/Kernel/debug.c @@ -7,10 +7,6 @@ #include #include -#define DEBUG_TO_E9 1 -#define DEBUG_TO_SERIAL 1 -#define SERIAL_PORT 0x3F8 -#define GDB_SERIAL_PORT 0x2F8 #define DEBUG_MAX_LINE_LEN 256 #define LOCK_DEBUG_OUTPUT 1 @@ -21,17 +17,16 @@ extern void KernelPanic_SetMode(void); extern void KernelPanic_PutChar(char Ch); // === PROTOTYPES === - int putDebugChar(char ch); - int getDebugChar(void); static void Debug_Putchar(char ch); static void Debug_Puts(int DbgOnly, const char *Str); +void Debug_DbgOnlyFmt(const char *format, va_list args); +void Debug_FmtS(const char *format, ...); void Debug_Fmt(const char *format, va_list args); +void Debug_SetKTerminal(const char *File); // === GLOBALS === int gDebug_Level = 0; int giDebug_KTerm = -1; - int gbDebug_SerialSetup = 0; - int gbGDB_SerialSetup = 0; int gbDebug_IsKPanic = 0; volatile int gbInPutChar = 0; #if LOCK_DEBUG_OUTPUT @@ -39,60 +34,6 @@ tShortSpinlock glDebug_Lock; #endif // === CODE === -int putDebugChar(char ch) -{ - if(!gbGDB_SerialSetup) { - outb(GDB_SERIAL_PORT + 1, 0x00); // Disable all interrupts - outb(GDB_SERIAL_PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) - outb(GDB_SERIAL_PORT + 0, 0x0C); // Set divisor to 12 (lo byte) 9600 baud - outb(GDB_SERIAL_PORT + 1, 0x00); // (base is (hi byte) - outb(GDB_SERIAL_PORT + 3, 0x03); // 8 bits, no parity, one stop bit (8N1) - outb(GDB_SERIAL_PORT + 2, 0xC7); // Enable FIFO with 14-byte threshold and clear it - outb(GDB_SERIAL_PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set - gbDebug_SerialSetup = 1; - } - while( (inb(GDB_SERIAL_PORT + 5) & 0x20) == 0 ); - outb(GDB_SERIAL_PORT, ch); - return 0; -} -int getDebugChar(void) -{ - if(!gbGDB_SerialSetup) { - outb(GDB_SERIAL_PORT + 1, 0x00); // Disable all interrupts - outb(GDB_SERIAL_PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) - outb(GDB_SERIAL_PORT + 0, 0x0C); // Set divisor to 12 (lo byte) 9600 baud - outb(GDB_SERIAL_PORT + 1, 0x00); // (hi byte) - outb(GDB_SERIAL_PORT + 3, 0x03); // 8 bits, no parity, one stop bit - outb(GDB_SERIAL_PORT + 2, 0xC7); // Enable FIFO with 14-byte threshold and clear it - outb(GDB_SERIAL_PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set - gbDebug_SerialSetup = 1; - } - while( (inb(GDB_SERIAL_PORT + 5) & 1) == 0) ; - return inb(GDB_SERIAL_PORT); -} - -static void Debug_PutCharDebug(char ch) -{ - #if DEBUG_TO_E9 - __asm__ __volatile__ ( "outb %%al, $0xe9" :: "a"(((Uint8)ch)) ); - #endif - - #if DEBUG_TO_SERIAL - if(!gbDebug_SerialSetup) { - outb(SERIAL_PORT + 1, 0x00); // Disable all interrupts - outb(SERIAL_PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) - outb(SERIAL_PORT + 0, 0x0C); // Set divisor to 12 (lo byte) 9600 baud - outb(SERIAL_PORT + 1, 0x00); // (hi byte) - outb(SERIAL_PORT + 3, 0x03); // 8 bits, no parity, one stop bit - outb(SERIAL_PORT + 2, 0xC7); // Enable FIFO with 14-byte threshold and clear it - outb(SERIAL_PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set - gbDebug_SerialSetup = 1; - } - while( (inb(SERIAL_PORT + 5) & 0x20) == 0 ); - outb(SERIAL_PORT, ch); - #endif -} - static void Debug_Putchar(char ch) { Debug_PutCharDebug(ch); @@ -111,18 +52,18 @@ static void Debug_Putchar(char ch) static void Debug_Puts(int UseKTerm, const char *Str) { int len = 0; - while( *Str ) - { - Debug_PutCharDebug( *Str ); - - if( gbDebug_IsKPanic ) - KernelPanic_PutChar(*Str); - len ++; - Str ++; - } - Str -= len; + Debug_PutStringDebug(Str); + + if( gbDebug_IsKPanic ) + { + for( len = 0; Str[len]; len ++ ) + KernelPanic_PutChar( Str[len] ); + } + else + for( len = 0; Str[len]; len ++ ); + // Output to the kernel terminal if( UseKTerm && !gbDebug_IsKPanic && giDebug_KTerm != -1) { if(gbInPutChar) return ; @@ -193,7 +134,7 @@ void LogF(const char *Fmt, ...) } /** * \fn void Debug(const char *Msg, ...) - * \brief Print only to the debug channel + * \brief Print only to the debug channel (not KTerm) */ void Debug(const char *Fmt, ...) { @@ -274,9 +215,10 @@ void Panic(const char *Fmt, ...) Threads_Dump(); - __asm__ __volatile__ ("xchg %bx, %bx"); - __asm__ __volatile__ ("cli;\n\thlt"); - for(;;) __asm__ __volatile__ ("hlt"); +// __asm__ __volatile__ ("xchg %bx, %bx"); +// __asm__ __volatile__ ("cli;\n\thlt"); +// for(;;) __asm__ __volatile__ ("hlt"); + for(;;) ; } void Debug_SetKTerminal(const char *File) @@ -308,6 +250,7 @@ void Debug_Enter(const char *FuncName, const char *ArgTypes, ...) va_start(args, ArgTypes); + LogF("%014lli ", now()); while(i--) Debug_Putchar(' '); Debug_Puts(1, FuncName); @@ -365,6 +308,7 @@ void Debug_Log(const char *FuncName, const char *Fmt, ...) va_start(args, Fmt); + LogF("%014lli ", now()); while(i--) Debug_Putchar(' '); Debug_Puts(1, FuncName); @@ -399,6 +343,7 @@ void Debug_Leave(const char *FuncName, char RetType, ...) gDebug_Level = 0; i = 0; } + LogF("%014lli ", now()); // Indenting while(i--) Debug_Putchar(' '); @@ -442,10 +387,11 @@ void Debug_HexDump(const char *Header, const void *Data, Uint Length) { const Uint8 *cdat = Data; Uint pos = 0; + LogF("%014lli ", now()); Debug_Puts(1, Header); LogF(" (Hexdump of %p)\r\n", Data); - #define CH(n) ((' '<=cdat[(n)]&&cdat[(n)]<=0x7F) ? cdat[(n)] : '.') + #define CH(n) ((' '<=cdat[(n)]&&cdat[(n)]<0x7F) ? cdat[(n)] : '.') while(Length >= 16) { @@ -465,7 +411,7 @@ void Debug_HexDump(const char *Header, const void *Data, Uint Length) { int i ; - LogF("Log: %04x: ", pos); + LogF("%014lli Log: %04x: ", now(), pos); for(i = 0; i < Length; i ++) { LogF("%02x ", cdat[i]);