- Split KdInitSystem in two phases, to enable debug prints (serial line and bochs)

in the very early boot stage (before the initialisation from hal).

svn path=/trunk/; revision=12055
This commit is contained in:
Hartmut Birr 2004-12-12 20:14:01 +00:00
parent 311bcaca5c
commit 803a12e7fe
2 changed files with 44 additions and 37 deletions

View file

@ -1,4 +1,4 @@
/* $Id: kdebug.c,v 1.56 2004/10/13 22:27:03 ion Exp $
/* $Id: kdebug.c,v 1.57 2004/12/12 20:14:01 hbirr Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -69,32 +69,38 @@ PrintString(char* fmt,...)
VOID INIT_FUNCTION
KdInitSystem(ULONG Reserved,
KdInitSystem(ULONG BootPhase,
PLOADER_PARAMETER_BLOCK LoaderBlock)
{
KD_PORT_INFORMATION PortInfo;
ULONG Value;
PCHAR p1, p2;
if (BootPhase > 0)
{
#ifdef KDBG
/* Initialize runtime debugging if available */
DbgRDebugInit();
/* Initialize runtime debugging if available */
DbgRDebugInit();
#endif
#ifdef KDBG
/* Initialize the local kernel debugger. */
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_KDB;
/* Initialize the local kernel debugger. */
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_KDB;
#endif
}
/* Set debug port default values */
PortInfo.ComPort = DEFAULT_DEBUG_PORT;
PortInfo.BaudRate = DEFAULT_DEBUG_BAUD_RATE;
KdpPortIrq = DEFAULT_DEBUG_COM2_IRQ;
if (BootPhase == 0)
{
/* Set debug port default values */
PortInfo.ComPort = DEFAULT_DEBUG_PORT;
PortInfo.BaudRate = DEFAULT_DEBUG_BAUD_RATE;
KdpPortIrq = DEFAULT_DEBUG_COM2_IRQ;
/* Set serial log port default values */
LogPortInfo.ComPort = DEFAULT_DEBUG_PORT;
LogPortInfo.BaudRate = DEFAULT_DEBUG_BAUD_RATE;
/* Set serial log port default values */
LogPortInfo.ComPort = DEFAULT_DEBUG_PORT;
LogPortInfo.BaudRate = DEFAULT_DEBUG_BAUD_RATE;
}
/* Parse kernel command line */
@ -109,19 +115,19 @@ KdInitSystem(ULONG Reserved,
if (*p2 == '=')
{
p2++;
if (!_strnicmp(p2, "SCREEN", 6))
if (!_strnicmp(p2, "SCREEN", 6) && BootPhase > 0)
{
p2 += 6;
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_SCREEN;
}
else if (!_strnicmp(p2, "BOCHS", 5))
else if (!_strnicmp(p2, "BOCHS", 5) && BootPhase == 0)
{
p2 += 5;
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_BOCHS;
}
else if (!_strnicmp(p2, "GDB", 3))
else if (!_strnicmp(p2, "GDB", 3) && BootPhase > 0)
{
p2 += 3;
KdDebuggerEnabled = TRUE;
@ -132,13 +138,13 @@ KdInitSystem(ULONG Reserved,
PortInfo.ComPort = DEFAULT_DEBUG_PORT;
PortInfo.BaudRate = DEFAULT_DEBUG_BAUD_RATE;
}
else if (!_strnicmp(p2, "PICE", 4))
else if (!_strnicmp(p2, "PICE", 4) && BootPhase > 0)
{
p2 += 4;
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_PICE;
}
else if (!_strnicmp(p2, "COM", 3))
else if (!_strnicmp(p2, "COM", 3) && BootPhase == 0)
{
p2 += 3;
Value = (ULONG)atol(p2);
@ -149,13 +155,13 @@ KdInitSystem(ULONG Reserved,
LogPortInfo.ComPort = Value;
}
}
else if (!_strnicmp(p2, "BOOTLOG", 4))
else if (!_strnicmp(p2, "BOOTLOG", 4) && BootPhase > 0)
{
p2 += 4;
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_BOOTLOG;
}
else if (!_strnicmp(p2, "MDA", 3))
else if (!_strnicmp(p2, "MDA", 3) && BootPhase > 0)
{
p2 += 3;
KdDebuggerEnabled = TRUE;
@ -163,42 +169,42 @@ KdInitSystem(ULONG Reserved,
}
}
}
else if (!_strnicmp(p2, "KDSERIAL", 8))
else if (!_strnicmp(p2, "KDSERIAL", 8) && BootPhase > 0)
{
p2 += 8;
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_SERIAL | KD_DEBUG_KDSERIAL;
}
else if (!_strnicmp(p2, "KDNOECHO", 8))
else if (!_strnicmp(p2, "KDNOECHO", 8) && BootPhase > 0)
{
p2 += 8;
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_KDNOECHO;
}
else if (!_strnicmp(p2, "DEBUG", 5))
else if (!_strnicmp(p2, "DEBUG", 5) && BootPhase == 0)
{
p2 += 5;
KdDebuggerEnabled = TRUE;
KdDebugState |= KD_DEBUG_SERIAL;
}
else if (!_strnicmp(p2, "NODEBUG", 7))
else if (!_strnicmp(p2, "NODEBUG", 7) && BootPhase == 0)
{
p2 += 7;
KdDebuggerEnabled = FALSE;
KdDebugState = KD_DEBUG_DISABLED;
}
else if (!_strnicmp(p2, "CRASHDEBUG", 10))
else if (!_strnicmp(p2, "CRASHDEBUG", 10) && BootPhase == 0)
{
p2 += 10;
KdDebuggerEnabled = FALSE;
KdDebugState = KD_DEBUG_DISABLED;
}
else if (!_strnicmp(p2, "BREAK", 5))
else if (!_strnicmp(p2, "BREAK", 5) && BootPhase > 0)
{
p2 += 5;
KdpBreakPending = TRUE;
}
else if (!_strnicmp(p2, "COM", 3))
else if (!_strnicmp(p2, "COM", 3) && BootPhase == 0)
{
p2 += 3;
if ('=' == *p2)
@ -211,7 +217,7 @@ KdInitSystem(ULONG Reserved,
}
}
}
else if (!_strnicmp(p2, "BAUDRATE", 8))
else if (!_strnicmp(p2, "BAUDRATE", 8) && BootPhase == 0)
{
p2 += 8;
if ('=' == *p2)
@ -224,7 +230,7 @@ KdInitSystem(ULONG Reserved,
}
}
}
else if (!_strnicmp(p2, "IRQ", 3))
else if (!_strnicmp(p2, "IRQ", 3) && BootPhase == 0)
{
p2 += 3;
if ('=' == *p2)
@ -238,7 +244,7 @@ KdInitSystem(ULONG Reserved,
}
}
#ifdef KDBG
else if (!_strnicmp(p2, "PROFILE", 7))
else if (!_strnicmp(p2, "PROFILE", 7) && BootPhase > 0)
{
KdbInitProfiling();
}
@ -249,16 +255,16 @@ KdInitSystem(ULONG Reserved,
/* Perform any initialization nescessary */
if (KdDebuggerEnabled == TRUE)
{
if (KdDebugState & KD_DEBUG_GDB)
if (KdDebugState & KD_DEBUG_GDB && BootPhase > 0)
KdPortInitializeEx(&GdbPortInfo, 0, 0);
if (KdDebugState & KD_DEBUG_SERIAL)
if (KdDebugState & KD_DEBUG_SERIAL && BootPhase == 0)
KdPortInitializeEx(&LogPortInfo, 0, 0);
if (KdDebugState & KD_DEBUG_BOOTLOG)
if (KdDebugState & KD_DEBUG_BOOTLOG && BootPhase > 0)
DebugLogInit();
if (KdDebugState & KD_DEBUG_MDA)
if (KdDebugState & KD_DEBUG_MDA && BootPhase > 0)
KdInitializeMda();
}
}

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: main.c,v 1.210 2004/12/04 20:58:13 gvg Exp $
/* $Id: main.c,v 1.211 2004/12/12 20:14:01 hbirr Exp $
*
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ke/main.c
@ -457,7 +457,7 @@ ExpInitializeExecutive(VOID)
/*
* Initialize the kernel debugger
*/
KdInitSystem (0, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
KdInitSystem (1, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
KeInit2();
@ -1044,6 +1044,7 @@ _main (ULONG MultiBootMagic, PLOADER_PARAMETER_BLOCK _LoaderBlock)
KeLoaderBlock.MmapAddr = (ULONG)KeMemoryMap;
}
KdInitSystem (0, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
HalInitSystem (0, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
KiSystemStartup(1);