#define GDB_SERIAL_PORT 0x2F8
#define DEBUG_MAX_LINE_LEN 256
-#define LOCK_DEBUG_OUTPUT 0
+#define LOCK_DEBUG_OUTPUT 1
// === IMPORTS ===
extern void Threads_Dump(void);
int gbDebug_IsKPanic = 0;
volatile int gbInPutChar = 0;
#if LOCK_DEBUG_OUTPUT
-tSpinlock glDebug_Lock;
+tShortSpinlock glDebug_Lock;
#endif
// === CODE ===
return ;
}
+void Debug_FmtS(const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ Debug_Fmt(format, args);
+ va_end(args);
+}
+
void Debug_KernelPanic()
{
gbDebug_IsKPanic = 1;
va_list args;
#if LOCK_DEBUG_OUTPUT
- VTIGHTLOCK(&glDebug_Lock);
+ SHORTLOCK(&glDebug_Lock);
#endif
va_start(args, Fmt);
va_end(args);
#if LOCK_DEBUG_OUTPUT
- RELEASE(&glDebug_Lock);
+ SHORTREL(&glDebug_Lock);
#endif
}
/**
va_list args;
#if LOCK_DEBUG_OUTPUT
- LOCK(&glDebug_Lock);
+ SHORTLOCK(&glDebug_Lock);
#endif
Debug_Puts(0, "Debug: ");
Debug_PutCharDebug('\r');
Debug_PutCharDebug('\n');
#if LOCK_DEBUG_OUTPUT
- RELEASE(&glDebug_Lock);
+ SHORTREL(&glDebug_Lock);
#endif
}
/**
va_list args;
#if LOCK_DEBUG_OUTPUT
- LOCK(&glDebug_Lock);
+ SHORTLOCK(&glDebug_Lock);
#endif
Debug_Puts(1, "Log: ");
Debug_Putchar('\n');
#if LOCK_DEBUG_OUTPUT
- RELEASE(&glDebug_Lock);
+ SHORTREL(&glDebug_Lock);
#endif
}
void Warning(char *Fmt, ...)
va_list args;
#if LOCK_DEBUG_OUTPUT
- LOCK(&glDebug_Lock);
+ SHORTLOCK(&glDebug_Lock);
#endif
Debug_Puts(1, "Warning: ");
Debug_Putchar('\n');
#if LOCK_DEBUG_OUTPUT
- RELEASE(&glDebug_Lock);
+ SHORTREL(&glDebug_Lock);
#endif
}
void Panic(char *Fmt, ...)
va_list args;
#if LOCK_DEBUG_OUTPUT
- LOCK(&glDebug_Lock);
+ SHORTLOCK(&glDebug_Lock);
#endif
- // And never release
+ // And never SHORTREL
Debug_KernelPanic();
void Debug_Enter(char *FuncName, char *ArgTypes, ...)
{
va_list args;
- int i = gDebug_Level ++;
+ int i;
int pos;
+ tTID tid = Threads_GetTID();
+
+ #if LOCK_DEBUG_OUTPUT
+ SHORTLOCK(&glDebug_Lock);
+ #endif
+
+ i = gDebug_Level ++;
va_start(args, ArgTypes);
while(i--) Debug_Putchar(' ');
- Debug_Puts(1, FuncName); Debug_Puts(1, ": (");
+ Debug_Puts(1, FuncName);
+ Debug_FmtS("[%i]", tid);
+ Debug_Puts(1, ": (");
while(*ArgTypes)
{
va_end(args);
Debug_Putchar(')'); Debug_Putchar('\r'); Debug_Putchar('\n');
+
+ #if LOCK_DEBUG_OUTPUT
+ SHORTREL(&glDebug_Lock);
+ #endif
}
void Debug_Log(char *FuncName, char *Fmt, ...)
{
va_list args;
int i = gDebug_Level;
+ tTID tid = Threads_GetTID();
+
+ #if LOCK_DEBUG_OUTPUT
+ SHORTLOCK(&glDebug_Lock);
+ #endif
va_start(args, Fmt);
while(i--) Debug_Putchar(' ');
- Debug_Puts(1, FuncName); Debug_Puts(1, ": ");
+ Debug_Puts(1, FuncName);
+ Debug_FmtS("[%i]", tid);
+ Debug_Puts(1, ": ");
Debug_Fmt(Fmt, args);
va_end(args);
Debug_Putchar('\r');
Debug_Putchar('\n');
+
+ #if LOCK_DEBUG_OUTPUT
+ SHORTREL(&glDebug_Lock);
+ #endif
}
void Debug_Leave(char *FuncName, char RetType, ...)
{
va_list args;
- int i = --gDebug_Level;
+ int i;
+ tTID tid = Threads_GetTID();
#if LOCK_DEBUG_OUTPUT
- LOCK(&glDebug_Lock);
+ SHORTLOCK(&glDebug_Lock);
#endif
+
+ i = --gDebug_Level;
va_start(args, RetType);
// Indenting
while(i--) Debug_Putchar(' ');
- Debug_Puts(1, FuncName); Debug_Puts(1, ": RETURN");
+ Debug_Puts(1, FuncName);
+ Debug_FmtS("(%i)", tid);
+ Debug_Puts(1, ": RETURN");
// No Return
if(RetType == '-') {
Debug_Putchar('\r');
Debug_Putchar('\n');
+ #if LOCK_DEBUG_OUTPUT
+ SHORTREL(&glDebug_Lock);
+ #endif
return;
}
Debug_Putchar('\n');
va_end(args);
+
+ #if LOCK_DEBUG_OUTPUT
+ SHORTREL(&glDebug_Lock);
+ #endif
}
void Debug_HexDump(char *Header, void *Data, Uint Length)
#define RANDOM_SEED 0xACE55052
#define RANDOM_A 0x00731ADE
#define RANDOM_C 12345
-#define RANDOM_SPRUCE 0xf12b02b
+#define RANDOM_SPRUCE 0xf12b039
// Jan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec
const short DAYS_BEFORE[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
#define UNIX_TO_2K ((30*365*3600*24) + (7*3600*24)) //Normal years + leap years
EXPORT(ModUtil_LookupString);
EXPORT(ModUtil_SetIdent);
-// === GLOBALS ===
-static Uint giRandomState = RANDOM_SEED;
-
// === CODE ===
/**
* \brief Convert a string into an integer
*/
Uint rand(void)
{
- Uint old = giRandomState;
+ #if 0
+ static Uint state = RANDOM_SEED;
+ Uint old = state;
// Get the next state value
- giRandomState = (RANDOM_A*giRandomState + RANDOM_C) & 0xFFFFFFFF;
+ giRandomState = (RANDOM_A*state + RANDOM_C);
// Check if it has changed, and if it hasn't, change it
- if(giRandomState == old) giRandomState += RANDOM_SPRUCE;
- return giRandomState;
+ if(state == old) state += RANDOM_SPRUCE;
+ return state;
+ #else
+ // http://en.wikipedia.org/wiki/Xorshift
+ // 2010-10-03
+ static Uint32 x = 123456789;
+ static Uint32 y = 362436069;
+ static Uint32 z = 521288629;
+ static Uint32 w = 88675123;
+ Uint32 t;
+
+ t = x ^ (x << 11);
+ x = y; y = z; z = w;
+ return w = w ^ (w >> 19) ^ t ^ (t >> 8);
+ #endif
}
/* *