[Com0com-cvs] com0com/sys trace.c, 1.25, 1.26 trace.h, 1.10, 1.11 tracetbl.c, 1.11, 1.12
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2007-02-21 16:52:38
|
Update of /cvsroot/com0com/com0com/sys In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv22117 Modified Files: trace.c trace.h tracetbl.c Log Message: Added tracing of IRP_MJ_POWER with more details Index: trace.c =================================================================== RCS file: /cvsroot/com0com/com0com/sys/trace.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** trace.c 20 Feb 2007 12:01:47 -0000 1.25 --- trace.c 21 Feb 2007 16:52:34 -0000 1.26 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.26 2007/02/21 16:52:34 vfrolov + * Added tracing of IRP_MJ_POWER with more details + * * Revision 1.25 2007/02/20 12:01:47 vfrolov * Added result dumping SERIAL_XOFF_COUNTER *************** *** 124,127 **** --- 127,131 ---- #define TRACE_BUF_SIZE 256 #define TRACE_BUFS_NUM 4 + #define TRACE_IRQL_BUF_SIZE 1024 /********************************************************************/ typedef struct _TRACE_BUFFER { *************** *** 149,153 **** static UNICODE_STRING traceFileName; static PDRIVER_OBJECT pDrvObj; ! static KSPIN_LOCK strOldLock; static KSPIN_LOCK bufsLock; static TRACE_BUFFER traceBufs[TRACE_BUFS_NUM]; --- 153,157 ---- static UNICODE_STRING traceFileName; static PDRIVER_OBJECT pDrvObj; ! static KSPIN_LOCK irqlBufLock; static KSPIN_LOCK bufsLock; static TRACE_BUFFER traceBufs[TRACE_BUFS_NUM]; *************** *** 945,951 **** IO_STATUS_BLOCK ioStatusBlock; ! static CHAR strOld[500]; ! static LONG strOldBusyInd = 0; ! static LONG strOldFreeInd = 0; if (errorCount > TRACE_ERROR_LIMIT) { --- 949,955 ---- IO_STATUS_BLOCK ioStatusBlock; ! static CHAR irqlBuf[TRACE_IRQL_BUF_SIZE]; ! static LONG irqlBufBusyInd = 0; ! static LONG irqlBufFreeInd = 0; if (errorCount > TRACE_ERROR_LIMIT) { *************** *** 968,979 **** GetTimeFields(&timeFields); ! KeAcquireSpinLock(&strOldLock, &oldIrql); ! size = sizeof(strOld) - strOldFreeInd; ! pDestStr = strOld + (sizeof(strOld) - size); pDestStr = AnsiStrCopyTimeFields(pDestStr, &size, &timeFields); pDestStr = AnsiStrFormat(pDestStr, &size, " *%u* %s\r\n", (unsigned)KeGetCurrentIrql(), pStr); ! HALT_UNLESS3(size > 0, strOldFreeInd, strOldBusyInd, sizeof(strOld)); if (size == 1) { --- 972,983 ---- GetTimeFields(&timeFields); ! KeAcquireSpinLock(&irqlBufLock, &oldIrql); ! size = sizeof(irqlBuf) - irqlBufFreeInd; ! pDestStr = irqlBuf + (sizeof(irqlBuf) - size); pDestStr = AnsiStrCopyTimeFields(pDestStr, &size, &timeFields); pDestStr = AnsiStrFormat(pDestStr, &size, " *%u* %s\r\n", (unsigned)KeGetCurrentIrql(), pStr); ! HALT_UNLESS3(size > 0, irqlBufFreeInd, irqlBufBusyInd, sizeof(irqlBuf)); if (size == 1) { *************** *** 983,989 **** } ! strOldFreeInd = (LONG)(sizeof(strOld) - size); ! KeReleaseSpinLock(&strOldLock, oldIrql); return; --- 987,993 ---- } ! irqlBufFreeInd = (LONG)(sizeof(irqlBuf) - size); ! KeReleaseSpinLock(&irqlBufLock, oldIrql); return; *************** *** 1024,1044 **** pDestStr = pBuf->buf; ! while (strOldFreeInd) { SIZE_T lenBuf; KIRQL oldIrql; ! KeAcquireSpinLock(&strOldLock, &oldIrql); ! lenBuf = strOldFreeInd - strOldBusyInd; if (lenBuf) { if (lenBuf > size - 1) lenBuf = size - 1; ! RtlCopyMemory(pDestStr, &strOld[strOldBusyInd], lenBuf); pDestStr[lenBuf] = 0; ! strOldBusyInd += (LONG)lenBuf; ! HALT_UNLESS3(strOldBusyInd <= strOldFreeInd, strOldFreeInd, strOldBusyInd, lenBuf); ! if (strOldBusyInd == strOldFreeInd) ! strOldFreeInd = strOldBusyInd = 0; } ! KeReleaseSpinLock(&strOldLock, oldIrql); if (lenBuf) --- 1028,1048 ---- pDestStr = pBuf->buf; ! while (irqlBufFreeInd) { SIZE_T lenBuf; KIRQL oldIrql; ! KeAcquireSpinLock(&irqlBufLock, &oldIrql); ! lenBuf = irqlBufFreeInd - irqlBufBusyInd; if (lenBuf) { if (lenBuf > size - 1) lenBuf = size - 1; ! RtlCopyMemory(pDestStr, &irqlBuf[irqlBufBusyInd], lenBuf); pDestStr[lenBuf] = 0; ! irqlBufBusyInd += (LONG)lenBuf; ! HALT_UNLESS3(irqlBufBusyInd <= irqlBufFreeInd, irqlBufFreeInd, irqlBufBusyInd, lenBuf); ! if (irqlBufBusyInd == irqlBufFreeInd) ! irqlBufFreeInd = irqlBufBusyInd = 0; } ! KeReleaseSpinLock(&irqlBufLock, oldIrql); if (lenBuf) *************** *** 1117,1121 **** pDrvObj = _pDrvObj; ! KeInitializeSpinLock(&strOldLock); KeInitializeSpinLock(&bufsLock); skippedTraces = 0; --- 1121,1125 ---- pDrvObj = _pDrvObj; ! KeInitializeSpinLock(&irqlBufLock); KeInitializeSpinLock(&bufsLock); skippedTraces = 0; *************** *** 1530,1534 **** break; case IRP_MN_QUERY_INTERFACE: - pDestStr = AnsiStrCopyStr(pDestStr, &size, " "); pDestStr = AnsiStrFormat(pDestStr, &size, " GUID: %8lX-%4X-%4X-%2X%2X-%2X%2X%2X%2X%2X%2X", --- 1534,1537 ---- *************** *** 1553,1556 **** --- 1556,1600 ---- pDestStr = AnsiStrCopyStr(pDestStr, &size, " "); pDestStr = AnsiStrCopyCode(pDestStr, &size, code, codeNameTablePower, "POWER_", 10); + + if ((flags & TRACE_FLAG_PARAMS) == 0) + break; + + switch (code) { + case IRP_MN_SET_POWER: + case IRP_MN_QUERY_POWER: { + POWER_STATE_TYPE powerType = pIrpStack->Parameters.Power.Type; + POWER_STATE powerState = pIrpStack->Parameters.Power.State; + + pDestStr = AnsiStrCopyStr(pDestStr, &size, " "); + pDestStr = AnsiStrCopyCode(pDestStr, &size, powerType, codeNameTablePowerType, "Type_", 10); + pDestStr = AnsiStrCopyStr(pDestStr, &size, " "); + + switch (powerType) { + case DevicePowerState: + pDestStr = AnsiStrCopyCode(pDestStr, &size, powerState.DeviceState, + codeNameTableDevicePowerState, "State_", 10); + break; + case SystemPowerState: + pDestStr = AnsiStrCopyCode(pDestStr, &size, powerState.SystemState, + codeNameTableSystemPowerState, "State_", 10); + break; + default: + pDestStr = AnsiStrCopyCode(pDestStr, &size, powerState.SystemState, NULL, "State_", 10); + break; + } + + pDestStr = AnsiStrCopyStr(pDestStr, &size, " "); + pDestStr = AnsiStrCopyCode(pDestStr, &size, pIrpStack->Parameters.Power.ShutdownType, + codeNameTablePowerAction, "Action_", 10); + break; + } + case IRP_MN_WAIT_WAKE: { + SYSTEM_POWER_STATE powerState = pIrpStack->Parameters.WaitWake.PowerState; + + pDestStr = AnsiStrCopyStr(pDestStr, &size, " Sys "); + pDestStr = AnsiStrCopyCode(pDestStr, &size, powerState, codeNameTableSystemPowerState, "State_", 10); + break; + } + } break; } Index: trace.h =================================================================== RCS file: /cvsroot/com0com/com0com/sys/trace.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** trace.h 23 Aug 2006 12:56:20 -0000 1.10 --- trace.h 21 Feb 2007 16:52:34 -0000 1.11 *************** *** 2,6 **** * $Id$ * ! * Copyright (c) 2004-2006 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify --- 2,6 ---- * $Id$ * ! * Copyright (c) 2004-2007 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.11 2007/02/21 16:52:34 vfrolov + * Added tracing of IRP_MJ_POWER with more details + * * Revision 1.10 2006/08/23 12:56:20 vfrolov * Added codeNameTableWmi *************** *** 122,125 **** --- 125,132 ---- CODE2NAME codeNameTablePnp[]; CODE2NAME codeNameTablePower[]; + CODE2NAME codeNameTablePowerType[]; + CODE2NAME codeNameTableSystemPowerState[]; + CODE2NAME codeNameTableDevicePowerState[]; + CODE2NAME codeNameTablePowerAction[]; CODE2NAME codeNameTableWmi[]; CODE2NAME codeNameTableDoType[]; Index: tracetbl.c =================================================================== RCS file: /cvsroot/com0com/com0com/sys/tracetbl.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** tracetbl.c 20 Feb 2007 11:57:59 -0000 1.11 --- tracetbl.c 21 Feb 2007 16:52:34 -0000 1.12 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.12 2007/02/21 16:52:34 vfrolov + * Added tracing of IRP_MJ_POWER with more details + * * Revision 1.11 2007/02/20 11:57:59 vfrolov * Added STATUS_SERIAL_COUNTER_TIMEOUT and STATUS_SERIAL_MORE_WRITES *************** *** 180,183 **** --- 183,226 ---- }; + CODE2NAME codeNameTablePowerType[] = { + {SystemPowerState, "Sys"}, + {DevicePowerState, "Dev"}, + {0, NULL} + }; + + CODE2NAME codeNameTableSystemPowerState[] = { + TOCODE2NAME(PowerSystem, Unspecified), + TOCODE2NAME(PowerSystem, Working), + TOCODE2NAME(PowerSystem, Sleeping1), + TOCODE2NAME(PowerSystem, Sleeping2), + TOCODE2NAME(PowerSystem, Sleeping3), + TOCODE2NAME(PowerSystem, Hibernate), + TOCODE2NAME(PowerSystem, Shutdown), + TOCODE2NAME(PowerSystem, Maximum), + {0, NULL} + }; + + CODE2NAME codeNameTableDevicePowerState[] = { + TOCODE2NAME(PowerDevice, Unspecified), + TOCODE2NAME(PowerDevice, D0), + TOCODE2NAME(PowerDevice, D1), + TOCODE2NAME(PowerDevice, D2), + TOCODE2NAME(PowerDevice, D3), + TOCODE2NAME(PowerDevice, Maximum), + {0, NULL} + }; + + CODE2NAME codeNameTablePowerAction[] = { + TOCODE2NAME(PowerAction, None), + TOCODE2NAME(PowerAction, Reserved), + TOCODE2NAME(PowerAction, Sleep), + TOCODE2NAME(PowerAction, Hibernate), + TOCODE2NAME(PowerAction, Shutdown), + TOCODE2NAME(PowerAction, ShutdownReset), + TOCODE2NAME(PowerAction, ShutdownOff), + TOCODE2NAME(PowerAction, WarmEject), + {0, NULL} + }; + CODE2NAME codeNameTableWmi[] = { TOCODE2NAME(IRP_MN_, QUERY_ALL_DATA), |