VOID
STDCALL
-KdpPrintToLog(PCH String)
+KdpPrintToLog(PCH String,
+ ULONG StringLength)
{
- ULONG StringLength = strlen(String);
-
/* Don't overflow */
if ((CurrentPosition + StringLength) > BufferSize) return;
/* Make sure we are initialized and can queue */
if (!KdpLogInitialized || (ItemQueued)) return;
- /* Queue the work item */
- ExQueueWorkItem(&KdpDebugLogQueue, HyperCriticalWorkQueue);
- ItemQueued = TRUE;
+ /*
+ * Queue the work item
+ * Note that we don't want to queue if we are > DISPATCH_LEVEL...
+ * The message is in the buffer and will simply be taken care of at
+ * the next time we are at <= DISPATCH, so it won't be lost.
+ */
+ if (KeGetCurrentIrql() <= DISPATCH_LEVEL)
+ {
+ ExQueueWorkItem(&KdpDebugLogQueue, HyperCriticalWorkQueue);
+ ItemQueued = TRUE;
+ }
}
VOID
KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable,
ULONG BootPhase)
{
- if (!KdpDebugMode.File) return;
NTSTATUS Status;
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING FileName;
IO_STATUS_BLOCK Iosb;
+ if (!KdpDebugMode.File) return;
+
if (BootPhase == 0)
{
/* Write out the functions that we support for now */
VOID
STDCALL
-KdpSerialDebugPrint(LPSTR Message)
+KdpSerialDebugPrint(LPSTR Message,
+ ULONG Length)
{
PCHAR pch = (PCHAR) Message;
DispatchTable->KdpPrintRoutine = KdpSerialDebugPrint;
/* Initialize the Port */
- KdPortInitializeEx(&SerialPortInfo, 0, 0);
+ if (!KdPortInitializeEx(&SerialPortInfo, 0, 0))
+ {
+ KdpDebugMode.Serial = FALSE;
+ return;
+ }
/* Register as a Provider */
InsertTailList(&KdProviders, &DispatchTable->KdProvidersList);
/* SCREEN FUNCTIONS **********************************************************/
+VOID
+STDCALL
+KdpScreenPrint(LPSTR Message,
+ ULONG Length)
+{
+ /* Call HAL */
+ HalDisplayString(Message);
+}
+
VOID
STDCALL
KdpScreenInit(PKD_DISPATCH_TABLE DispatchTable,
{
/* Write out the functions that we support for now */
DispatchTable->KdpInitRoutine = KdpScreenInit;
- DispatchTable->KdpPrintRoutine = HalDisplayString;
+ DispatchTable->KdpPrintRoutine = KdpScreenPrint;
/* Register as a Provider */
InsertTailList(&KdProviders, &DispatchTable->KdProvidersList);
ULONG
STDCALL
-KdpPrintString(PANSI_STRING String)
+KdpPrintString(LPSTR String,
+ ULONG Length)
{
- if (!KdpDebugMode.Value) return 0;
- PCH pch = String->Buffer;
PLIST_ENTRY CurrentEntry;
PKD_DISPATCH_TABLE CurrentTable;
+ if (!KdpDebugMode.Value) return 0;
+
/* Call the registered handlers */
CurrentEntry = KdProviders.Flink;
while (CurrentEntry != &KdProviders)
KdProvidersList);
/* Call it */
- CurrentTable->KdpPrintRoutine(pch);
+ CurrentTable->KdpPrintRoutine(String, Length);
/* Next Table */
CurrentEntry = CurrentEntry->Flink;
}
/* Call the Wrapper Routine */
- if (WrapperInitRoutine) WrapperTable.KdpPrintRoutine(pch);
+ if (WrapperInitRoutine) WrapperTable.KdpPrintRoutine(String, Length);
/* Return the Length */
- return((ULONG)String->Length);
+ return Length;
}
/* EOF */