Update of /cvsroot/com0com/com0com/sys
In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv19463
Modified Files:
adddev.c com0com.h delay.c delay.h ioctl.c openclos.c read.c
startirp.c wait.c write.c
Log Message:
Mass replacement pDevExt by pIoPort
Index: openclos.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/openclos.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** openclos.c 21 Jun 2006 16:23:57 -0000 1.14
--- openclos.c 23 Jun 2006 11:44:52 -0000 1.15
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.15 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.14 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 78,81 ****
--- 81,85 ----
ULONG size;
KIRQL oldIrql;
+ PC0C_IO_PORT pIoPort;
if (InterlockedIncrement(&pDevExt->openCount) != 1) {
***************
*** 84,87 ****
--- 88,93 ----
}
+ pIoPort = pDevExt->pIoPortLocal;
+
switch (MmQuerySystemSize()) {
case MmLargeSystem:
***************
*** 108,112 ****
#if DBG
! if (pDevExt->pIoPortLocal->amountInWriteQueue) {
NTSTATUS status;
UNICODE_STRING msg;
--- 114,118 ----
#if DBG
! if (pIoPort->amountInWriteQueue) {
NTSTATUS status;
UNICODE_STRING msg;
***************
*** 115,119 ****
RtlInitUnicodeString(&msg, NULL);
StrAppendStr0(&status, &msg, L"!!!WARNING!!! amountInWriteQueue = ");
! StrAppendNum(&status, &msg, pDevExt->pIoPortLocal->amountInWriteQueue, 10);
Trace0((PC0C_COMMON_EXTENSION)pDevExt, msg.Buffer);
--- 121,125 ----
RtlInitUnicodeString(&msg, NULL);
StrAppendStr0(&status, &msg, L"!!!WARNING!!! amountInWriteQueue = ");
! StrAppendNum(&status, &msg, pIoPort->amountInWriteQueue, 10);
Trace0((PC0C_COMMON_EXTENSION)pDevExt, msg.Buffer);
***************
*** 123,143 ****
#endif /* DBG */
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
! InitBuffer(&pDevExt->pIoPortLocal->readBuf, pBase, size);
! pDevExt->pIoPortLocal->amountInWriteQueue = 0;
! pDevExt->pIoPortLocal->tryWrite = FALSE;
! pDevExt->pIoPortLocal->errors = 0;
! pDevExt->pIoPortLocal->waitMask = 0;
! pDevExt->pIoPortLocal->eventMask = 0;
! pDevExt->pIoPortLocal->escapeChar = 0;
! RtlZeroMemory(&pDevExt->pIoPortLocal->perfStats, sizeof(pDevExt->pIoPortLocal->perfStats));
! pDevExt->pIoPortLocal->handFlow.XoffLimit = size >> 3;
! pDevExt->pIoPortLocal->handFlow.XonLimit = size >> 1;
! SetHandFlow(pDevExt->pIoPortLocal, NULL, &queueToComplete);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
--- 129,149 ----
#endif /* DBG */
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
! InitBuffer(&pIoPort->readBuf, pBase, size);
! pIoPort->amountInWriteQueue = 0;
! pIoPort->tryWrite = FALSE;
! pIoPort->errors = 0;
! pIoPort->waitMask = 0;
! pIoPort->eventMask = 0;
! pIoPort->escapeChar = 0;
! RtlZeroMemory(&pIoPort->perfStats, sizeof(pIoPort->perfStats));
! pIoPort->handFlow.XoffLimit = size >> 3;
! pIoPort->handFlow.XonLimit = size >> 1;
! SetHandFlow(pIoPort, NULL, &queueToComplete);
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
***************
*** 150,165 ****
LIST_ENTRY queueToComplete;
KIRQL oldIrql;
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
! pDevExt->pIoPortLocal->writeHoldingRemote = 0;
! pDevExt->pIoPortLocal->sendXonXoff = 0;
! SetModemStatus(pDevExt->pIoPortLocal->pIoPortRemote, 0, C0C_MSB_CTS | C0C_MSB_DSR, &queueToComplete);
! FreeBuffer(&pDevExt->pIoPortLocal->readBuf);
! SetBreakHolding(pDevExt->pIoPortLocal, FALSE);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
--- 156,174 ----
LIST_ENTRY queueToComplete;
KIRQL oldIrql;
+ PC0C_IO_PORT pIoPort;
+
+ pIoPort = pDevExt->pIoPortLocal;
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
! pIoPort->writeHoldingRemote = 0;
! pIoPort->sendXonXoff = 0;
! SetModemStatus(pIoPort->pIoPortRemote, 0, C0C_MSB_CTS | C0C_MSB_DSR, &queueToComplete);
! FreeBuffer(&pIoPort->readBuf);
! SetBreakHolding(pIoPort, FALSE);
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
***************
*** 231,235 ****
switch (pDevExt->doType) {
case C0C_DOTYPE_FP:
! FdoPortCancelQueues((PC0C_FDOPORT_EXTENSION)pDevExt);
status = STATUS_SUCCESS;
--- 240,244 ----
switch (pDevExt->doType) {
case C0C_DOTYPE_FP:
! FdoPortCancelQueues(((PC0C_FDOPORT_EXTENSION)pDevExt)->pIoPortLocal);
status = STATUS_SUCCESS;
Index: ioctl.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/ioctl.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** ioctl.c 21 Jun 2006 16:23:57 -0000 1.23
--- ioctl.c 23 Jun 2006 11:44:52 -0000 1.24
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.24 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.23 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 124,132 ****
case IOCTL_SERIAL_SET_RTS:
case IOCTL_SERIAL_CLR_RTS:
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
switch (pIoPortLocal->handFlow.FlowReplace & SERIAL_RTS_MASK) {
case SERIAL_RTS_HANDSHAKE:
case SERIAL_TRANSMIT_TOGGLE:
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
status = STATUS_INVALID_PARAMETER;
break;
--- 127,135 ----
case IOCTL_SERIAL_SET_RTS:
case IOCTL_SERIAL_CLR_RTS:
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
switch (pIoPortLocal->handFlow.FlowReplace & SERIAL_RTS_MASK) {
case SERIAL_RTS_HANDSHAKE:
case SERIAL_TRANSMIT_TOGGLE:
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
status = STATUS_INVALID_PARAMETER;
break;
***************
*** 149,153 ****
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
}
--- 152,156 ----
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
}
***************
*** 156,163 ****
case IOCTL_SERIAL_SET_DTR:
case IOCTL_SERIAL_CLR_DTR:
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
switch (pIoPortLocal->handFlow.ControlHandShake & SERIAL_DTR_MASK) {
case SERIAL_DTR_HANDSHAKE:
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
status = STATUS_INVALID_PARAMETER;
break;
--- 159,166 ----
case IOCTL_SERIAL_SET_DTR:
case IOCTL_SERIAL_CLR_DTR:
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
switch (pIoPortLocal->handFlow.ControlHandShake & SERIAL_DTR_MASK) {
case SERIAL_DTR_HANDSHAKE:
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
status = STATUS_INVALID_PARAMETER;
break;
***************
*** 180,184 ****
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
}
--- 183,187 ----
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
}
***************
*** 194,200 ****
}
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
modemStatusRemote = pIoPortLocal->pIoPortRemote->modemStatus;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
*(PULONG)pIrp->AssociatedIrp.SystemBuffer =
--- 197,203 ----
}
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
modemStatusRemote = pIoPortLocal->pIoPortRemote->modemStatus;
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
*(PULONG)pIrp->AssociatedIrp.SystemBuffer =
***************
*** 215,219 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
SetXonXoffHolding(pIoPortLocal, C0C_XCHAR_ON);
--- 218,222 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
SetXonXoffHolding(pIoPortLocal, C0C_XCHAR_ON);
***************
*** 224,235 ****
&queueToComplete);
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
}
case IOCTL_SERIAL_SET_XOFF:
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
SetXonXoffHolding(pIoPortLocal, C0C_XCHAR_OFF);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
break;
case IOCTL_SERIAL_SET_BREAK_ON: {
--- 227,238 ----
&queueToComplete);
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
}
case IOCTL_SERIAL_SET_XOFF:
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
SetXonXoffHolding(pIoPortLocal, C0C_XCHAR_OFF);
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
break;
case IOCTL_SERIAL_SET_BREAK_ON: {
***************
*** 238,242 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
SetBreakHolding(pIoPortLocal, TRUE);
--- 241,245 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
SetBreakHolding(pIoPortLocal, TRUE);
***************
*** 248,252 ****
&queueToComplete);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
--- 251,255 ----
&queueToComplete);
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
***************
*** 257,261 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
SetBreakHolding(pIoPortLocal, FALSE);
--- 260,264 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
SetBreakHolding(pIoPortLocal, FALSE);
***************
*** 268,272 ****
&queueToComplete);
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
--- 271,275 ----
&queueToComplete);
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
***************
*** 278,284 ****
}
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
*(PULONG)pIrp->AssociatedIrp.SystemBuffer = pIoPortLocal->modemStatus;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(ULONG);
--- 281,287 ----
}
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
*(PULONG)pIrp->AssociatedIrp.SystemBuffer = pIoPortLocal->modemStatus;
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(ULONG);
***************
*** 286,299 ****
break;
case IOCTL_SERIAL_SET_WAIT_MASK:
! status = FdoPortSetWaitMask(pDevExt, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_GET_WAIT_MASK:
! status = FdoPortGetWaitMask(pDevExt, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_WAIT_ON_MASK:
! status = FdoPortWaitOnMask(pDevExt, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_IMMEDIATE_CHAR:
! status = FdoPortImmediateChar(pDevExt, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_PURGE: {
--- 289,302 ----
break;
case IOCTL_SERIAL_SET_WAIT_MASK:
! status = FdoPortSetWaitMask(pIoPortLocal, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_GET_WAIT_MASK:
! status = FdoPortGetWaitMask(pIoPortLocal, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_WAIT_ON_MASK:
! status = FdoPortWaitOnMask(pIoPortLocal, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_IMMEDIATE_CHAR:
! status = FdoPortImmediateChar(pIoPortLocal, pIrp, pIrpStack);
break;
case IOCTL_SERIAL_PURGE: {
***************
*** 319,323 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
if (*pSysBuf & SERIAL_PURGE_RXABORT)
--- 322,326 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
if (*pSysBuf & SERIAL_PURGE_RXABORT)
***************
*** 338,342 ****
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
--- 341,345 ----
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
***************
*** 356,360 ****
RtlZeroMemory(pSysBuf, sizeof(*pSysBuf));
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
pSysBuf->AmountInInQueue = (ULONG)C0C_BUFFER_BUSY(&pIoPortLocal->readBuf);
--- 359,363 ----
RtlZeroMemory(pSysBuf, sizeof(*pSysBuf));
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
pSysBuf->AmountInInQueue = (ULONG)C0C_BUFFER_BUSY(&pIoPortLocal->readBuf);
***************
*** 387,391 ****
pIoPortLocal->errors = 0;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(SERIAL_STATUS);
--- 390,394 ----
pIoPortLocal->errors = 0;
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(SERIAL_STATUS);
***************
*** 417,425 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
status = SetHandFlow(pIoPortLocal, pSysBuf, &queueToComplete);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
--- 420,428 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
status = SetHandFlow(pIoPortLocal, pSysBuf, &queueToComplete);
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
***************
*** 431,437 ****
}
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
*(PSERIAL_HANDFLOW)pIrp->AssociatedIrp.SystemBuffer = pIoPortLocal->handFlow;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(SERIAL_HANDFLOW);
--- 434,440 ----
}
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
*(PSERIAL_HANDFLOW)pIrp->AssociatedIrp.SystemBuffer = pIoPortLocal->handFlow;
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(SERIAL_HANDFLOW);
***************
*** 455,459 ****
pSysBuf = (PSERIAL_CHARS)pIrp->AssociatedIrp.SystemBuffer;
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
if (pIoPortLocal->escapeChar &&
--- 458,462 ----
pSysBuf = (PSERIAL_CHARS)pIrp->AssociatedIrp.SystemBuffer;
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
if (pIoPortLocal->escapeChar &&
***************
*** 467,471 ****
pIoPortLocal->specialChars = *pSysBuf;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
break;
}
--- 470,474 ----
pIoPortLocal->specialChars = *pSysBuf;
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
break;
}
***************
*** 476,482 ****
}
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
*(PSERIAL_CHARS)pIrp->AssociatedIrp.SystemBuffer = pIoPortLocal->specialChars;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(SERIAL_CHARS);
--- 479,485 ----
}
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
*(PSERIAL_CHARS)pIrp->AssociatedIrp.SystemBuffer = pIoPortLocal->specialChars;
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(SERIAL_CHARS);
***************
*** 494,498 ****
escapeChar = *(PUCHAR)pIrp->AssociatedIrp.SystemBuffer;
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
if (escapeChar && ((escapeChar == pIoPortLocal->specialChars.XoffChar) ||
--- 497,501 ----
escapeChar = *(PUCHAR)pIrp->AssociatedIrp.SystemBuffer;
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
if (escapeChar && ((escapeChar == pIoPortLocal->specialChars.XoffChar) ||
***************
*** 508,512 ****
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
break;
}
--- 511,515 ----
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
break;
}
***************
*** 521,525 ****
KeReleaseSpinLock(&pDevExt->controlLock, oldIrql);
! SetWriteDelay(pDevExt);
break;
case IOCTL_SERIAL_GET_LINE_CONTROL:
--- 524,528 ----
KeReleaseSpinLock(&pDevExt->controlLock, oldIrql);
! SetWriteDelay(pIoPortLocal);
break;
case IOCTL_SERIAL_GET_LINE_CONTROL:
***************
*** 546,550 ****
KeReleaseSpinLock(&pDevExt->controlLock, oldIrql);
! SetWriteDelay(pDevExt);
break;
case IOCTL_SERIAL_GET_BAUD_RATE:
--- 549,553 ----
KeReleaseSpinLock(&pDevExt->controlLock, oldIrql);
! SetWriteDelay(pIoPortLocal);
break;
case IOCTL_SERIAL_GET_BAUD_RATE:
***************
*** 666,675 ****
pReadBuf = &pIoPortLocal->readBuf;
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
if (pSysBuf->InSize <= C0C_BUFFER_SIZE(pReadBuf)) {
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
break;
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
try {
--- 669,678 ----
pReadBuf = &pIoPortLocal->readBuf;
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
if (pSysBuf->InSize <= C0C_BUFFER_SIZE(pReadBuf)) {
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
break;
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
try {
***************
*** 684,688 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
if (SetNewBufferBase(pReadBuf, pBase, pSysBuf->InSize)) {
--- 687,691 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPortLocal->pIoLock, &oldIrql);
if (SetNewBufferBase(pReadBuf, pBase, pSysBuf->InSize)) {
***************
*** 699,703 ****
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
--- 702,706 ----
}
! KeReleaseSpinLock(pIoPortLocal->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
break;
Index: com0com.h
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/com0com.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** com0com.h 21 Jun 2006 16:23:57 -0000 1.26
--- com0com.h 23 Jun 2006 11:44:52 -0000 1.27
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.27 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.26 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 234,237 ****
--- 237,243 ----
} C0C_IO_PORT, *PC0C_IO_PORT;
+ #define FDO_PORT_TO_IO_PORT(pDevObj) \
+ (((PC0C_FDOPORT_EXTENSION)((pDevObj)->DeviceExtension))->pIoPortLocal)
+
typedef struct _C0C_PDOPORT_EXTENSION {
COMMON_EXTENSION
***************
*** 245,249 ****
FDO_EXTENSION
- PKSPIN_LOCK pIoLock;
PC0C_IO_PORT pIoPortLocal;
--- 251,254 ----
***************
*** 308,312 ****
typedef NTSTATUS (*PC0C_FDOPORT_START_ROUTINE)(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PLIST_ENTRY pQueueToComplete);
--- 313,317 ----
typedef NTSTATUS (*PC0C_FDOPORT_START_ROUTINE)(
! IN PC0C_IO_PORT pIoPort,
IN PLIST_ENTRY pQueueToComplete);
***************
*** 314,318 ****
NTSTATUS FdoPortStartIrp(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN UCHAR iQueue,
--- 319,323 ----
NTSTATUS FdoPortStartIrp(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN UCHAR iQueue,
***************
*** 320,343 ****
VOID CancelQueue(PC0C_IRP_QUEUE pQueue, PLIST_ENTRY pQueueToComplete);
! VOID FdoPortCancelQueues(IN PC0C_FDOPORT_EXTENSION pDevExt);
VOID FdoPortCompleteQueue(IN PLIST_ENTRY pQueueToComplete);
NTSTATUS FdoPortImmediateChar(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
NTSTATUS FdoPortWaitOnMask(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
NTSTATUS FdoPortSetWaitMask(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
NTSTATUS FdoPortGetWaitMask(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
--- 325,348 ----
VOID CancelQueue(PC0C_IRP_QUEUE pQueue, PLIST_ENTRY pQueueToComplete);
! VOID FdoPortCancelQueues(IN PC0C_IO_PORT pIoPort);
VOID FdoPortCompleteQueue(IN PLIST_ENTRY pQueueToComplete);
NTSTATUS FdoPortImmediateChar(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
NTSTATUS FdoPortWaitOnMask(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
NTSTATUS FdoPortSetWaitMask(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
NTSTATUS FdoPortGetWaitMask(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack);
Index: startirp.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/startirp.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** startirp.c 21 Jun 2006 16:23:57 -0000 1.11
--- startirp.c 23 Jun 2006 11:44:52 -0000 1.12
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.12 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.11 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 122,126 ****
VOID CancelRoutine(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp)
{
! PC0C_FDOPORT_EXTENSION pDevExt;
PC0C_IRP_STATE pState;
KIRQL oldIrql;
--- 125,129 ----
VOID CancelRoutine(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp)
{
! PC0C_IO_PORT pIoPort;
PC0C_IRP_STATE pState;
KIRQL oldIrql;
***************
*** 129,142 ****
IoReleaseCancelSpinLock(pIrp->CancelIrql);
! pDevExt = pDevObj->DeviceExtension;
pState = GetIrpState(pIrp);
HALT_UNLESS(pState);
! pQueue = &pDevExt->pIoPortLocal->irpQueues[pState->iQueue];
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
if (pState->iQueue == C0C_QUEUE_WRITE) {
! pDevExt->pIoPortLocal->amountInWriteQueue -=
GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information;
}
--- 132,145 ----
IoReleaseCancelSpinLock(pIrp->CancelIrql);
! pIoPort = FDO_PORT_TO_IO_PORT(pDevObj);
pState = GetIrpState(pIrp);
HALT_UNLESS(pState);
! pQueue = &pIoPort->irpQueues[pState->iQueue];
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
if (pState->iQueue == C0C_QUEUE_WRITE) {
! pIoPort->amountInWriteQueue -=
GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information;
}
***************
*** 150,154 ****
ShiftQueue(pQueue);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
TraceIrp("cancel", pIrp, NULL, TRACE_FLAG_RESULTS);
--- 153,157 ----
ShiftQueue(pQueue);
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
TraceIrp("cancel", pIrp, NULL, TRACE_FLAG_RESULTS);
***************
*** 180,184 ****
}
! VOID FdoPortCancelQueues(IN PC0C_FDOPORT_EXTENSION pDevExt)
{
LIST_ENTRY queueToComplete;
--- 183,187 ----
}
! VOID FdoPortCancelQueues(IN PC0C_IO_PORT pIoPort)
{
LIST_ENTRY queueToComplete;
***************
*** 187,196 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
for (i = 0 ; i < C0C_QUEUE_SIZE ; i++)
! CancelQueue(&pDevExt->pIoPortLocal->irpQueues[i], &queueToComplete);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
}
--- 190,199 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
for (i = 0 ; i < C0C_QUEUE_SIZE ; i++)
! CancelQueue(&pIoPort->irpQueues[i], &queueToComplete);
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
}
***************
*** 213,224 ****
if (pState->iQueue == C0C_QUEUE_WRITE) {
KIRQL oldIrql;
! PC0C_FDOPORT_EXTENSION pDevExt;
! pDevExt = IoGetCurrentIrpStackLocation(pIrp)->DeviceObject->DeviceExtension;
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
! pDevExt->pIoPortLocal->amountInWriteQueue -=
GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
}
--- 216,227 ----
if (pState->iQueue == C0C_QUEUE_WRITE) {
KIRQL oldIrql;
! PC0C_IO_PORT pIoPort;
! pIoPort = FDO_PORT_TO_IO_PORT(IoGetCurrentIrpStackLocation(pIrp)->DeviceObject);
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
! pIoPort->amountInWriteQueue -=
GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information;
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
}
***************
*** 245,249 ****
NTSTATUS StartIrp(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PC0C_IRP_STATE pState,
--- 248,252 ----
NTSTATUS StartIrp(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PC0C_IRP_STATE pState,
***************
*** 264,273 ****
if (length) {
! pDevExt->pIoPortLocal->amountInWriteQueue += length;
! UpdateTransmitToggle(pDevExt->pIoPortLocal, &queueToComplete);
}
}
! status = pStartRoutine(pDevExt, &queueToComplete);
if (status == STATUS_PENDING) {
--- 267,276 ----
if (length) {
! pIoPort->amountInWriteQueue += length;
! UpdateTransmitToggle(pIoPort, &queueToComplete);
}
}
! status = pStartRoutine(pIoPort, &queueToComplete);
if (status == STATUS_PENDING) {
***************
*** 278,282 ****
if (pState->iQueue == C0C_QUEUE_WRITE && status != STATUS_PENDING) {
! pDevExt->pIoPortLocal->amountInWriteQueue -=
GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information;
}
--- 281,285 ----
if (pState->iQueue == C0C_QUEUE_WRITE && status != STATUS_PENDING) {
! pIoPort->amountInWriteQueue -=
GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information;
}
***************
*** 286,290 ****
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
--- 289,293 ----
}
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
***************
*** 294,298 ****
NTSTATUS FdoPortStartIrp(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN UCHAR iQueue,
--- 297,301 ----
NTSTATUS FdoPortStartIrp(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN UCHAR iQueue,
***************
*** 311,317 ****
pState->iQueue = iQueue;
! pQueue = &pDevExt->pIoPortLocal->irpQueues[iQueue];
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
#pragma warning(push, 3)
--- 314,320 ----
pState->iQueue = iQueue;
! pQueue = &pIoPort->irpQueues[iQueue];
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
#pragma warning(push, 3)
***************
*** 321,328 ****
if (pIrp->Cancel) {
status = NoPending(pIrp, STATUS_CANCELLED);
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
} else {
if (!pQueue->pCurrent) {
! status = StartIrp(pDevExt, pIrp, pState, pQueue, oldIrql, pStartRoutine);
} else {
PIO_STACK_LOCATION pIrpStack;
--- 324,331 ----
if (pIrp->Cancel) {
status = NoPending(pIrp, STATUS_CANCELLED);
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
} else {
if (!pQueue->pCurrent) {
! status = StartIrp(pIoPort, pIrp, pState, pQueue, oldIrql, pStartRoutine);
} else {
PIO_STACK_LOCATION pIrpStack;
***************
*** 358,362 ****
pCurrentState->flags |= C0C_IRP_FLAG_IN_QUEUE;
! status = StartIrp(pDevExt, pIrp, pState, pQueue, oldIrql, pStartRoutine);
}
}
--- 361,365 ----
pCurrentState->flags |= C0C_IRP_FLAG_IN_QUEUE;
! status = StartIrp(pIoPort, pIrp, pState, pQueue, oldIrql, pStartRoutine);
}
}
***************
*** 368,377 ****
if (pState->iQueue == C0C_QUEUE_WRITE)
! pDevExt->pIoPortLocal->amountInWriteQueue += GetWriteLength(pIrp);
status = STATUS_PENDING;
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
}
}
--- 371,380 ----
if (pState->iQueue == C0C_QUEUE_WRITE)
! pIoPort->amountInWriteQueue += GetWriteLength(pIrp);
status = STATUS_PENDING;
}
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
}
}
Index: delay.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/delay.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** delay.c 21 Jun 2006 16:23:57 -0000 1.3
--- delay.c 23 Jun 2006 11:44:52 -0000 1.4
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.4 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.3 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 137,141 ****
}
! VOID SetWriteDelay(IN PC0C_FDOPORT_EXTENSION pDevExt)
{
PC0C_ADAPTIVE_DELAY pWriteDelay;
--- 140,144 ----
}
! VOID SetWriteDelay(PC0C_IO_PORT pIoPort)
{
PC0C_ADAPTIVE_DELAY pWriteDelay;
***************
*** 143,153 ****
C0C_DELAY_PARAMS params;
SERIAL_LINE_CONTROL lineControl;
! pWriteDelay = pDevExt->pIoPortLocal->pWriteDelay;
if (!pWriteDelay)
return;
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
KeAcquireSpinLockAtDpcLevel(&pDevExt->controlLock);
--- 146,160 ----
C0C_DELAY_PARAMS params;
SERIAL_LINE_CONTROL lineControl;
+ PC0C_FDOPORT_EXTENSION pDevExt;
! pWriteDelay = pIoPort->pWriteDelay;
if (!pWriteDelay)
return;
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
!
! pDevExt = pIoPort->pDevExt;
! HALT_UNLESS(pDevExt);
KeAcquireSpinLockAtDpcLevel(&pDevExt->controlLock);
***************
*** 194,198 ****
}
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
}
--- 201,205 ----
}
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
}
Index: adddev.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/adddev.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** adddev.c 21 Jun 2006 16:23:57 -0000 1.15
--- adddev.c 23 Jun 2006 11:44:52 -0000 1.16
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.16 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.15 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 259,263 ****
pDevExt->pIoPortLocal = ((PC0C_PDOPORT_EXTENSION)pPhDevObj->DeviceExtension)->pIoPortLocal;
! pDevExt->pIoLock = pDevExt->pIoPortLocal->pIoLock;
if (emuBR) {
--- 262,266 ----
pDevExt->pIoPortLocal = ((PC0C_PDOPORT_EXTENSION)pPhDevObj->DeviceExtension)->pIoPortLocal;
! pDevExt->pIoPortLocal->pDevExt = pDevExt;
if (emuBR) {
***************
*** 295,299 ****
pDevExt->baudRate.BaudRate = 1200;
! SetWriteDelay(pDevExt);
status = IoCreateSymbolicLink(&pDevExt->win32DeviceName, &pDevExt->ntDeviceName);
--- 298,302 ----
pDevExt->baudRate.BaudRate = 1200;
! SetWriteDelay(pDevExt->pIoPortLocal);
status = IoCreateSymbolicLink(&pDevExt->win32DeviceName, &pDevExt->ntDeviceName);
***************
*** 329,334 ****
pNewDevObj->Flags |= DO_BUFFERED_IO;
- pDevExt->pIoPortLocal->pDevExt = pDevExt;
-
Trace0((PC0C_COMMON_EXTENSION)pDevExt, L"AddFdoPort OK");
--- 332,335 ----
Index: write.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/write.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** write.c 21 Jun 2006 16:23:57 -0000 1.7
--- write.c 23 Jun 2006 11:44:52 -0000 1.8
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.8 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.7 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 49,63 ****
NTSTATUS StartIrpWrite(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PLIST_ENTRY pQueueToComplete)
{
return ReadWrite(
! pDevExt->pIoPortLocal->pIoPortRemote, FALSE,
! pDevExt->pIoPortLocal, TRUE,
pQueueToComplete);
}
NTSTATUS FdoPortImmediateChar(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
--- 52,66 ----
NTSTATUS StartIrpWrite(
! IN PC0C_IO_PORT pIoPort,
IN PLIST_ENTRY pQueueToComplete)
{
return ReadWrite(
! pIoPort->pIoPortRemote, FALSE,
! pIoPort, TRUE,
pQueueToComplete);
}
NTSTATUS FdoPortImmediateChar(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
***************
*** 66,73 ****
return STATUS_BUFFER_TOO_SMALL;
! return FdoPortStartIrp(pDevExt, pIrp, C0C_QUEUE_WRITE, StartIrpWrite);
}
! NTSTATUS FdoPortWrite(IN PC0C_FDOPORT_EXTENSION pDevExt, IN PIRP pIrp)
{
NTSTATUS status;
--- 69,76 ----
return STATUS_BUFFER_TOO_SMALL;
! return FdoPortStartIrp(pIoPort, pIrp, C0C_QUEUE_WRITE, StartIrpWrite);
}
! NTSTATUS FdoPortWrite(IN PC0C_IO_PORT pIoPort, IN PIRP pIrp)
{
NTSTATUS status;
***************
*** 75,84 ****
pIrp->IoStatus.Information = 0;
! if ((pDevExt->pIoPortLocal->handFlow.ControlHandShake & SERIAL_ERROR_ABORT) && pDevExt->pIoPortLocal->errors) {
status = STATUS_CANCELLED;
} else {
if (IoGetCurrentIrpStackLocation(pIrp)->MajorFunction == IRP_MJ_FLUSH_BUFFERS ||
IoGetCurrentIrpStackLocation(pIrp)->Parameters.Write.Length)
! status = FdoPortStartIrp(pDevExt, pIrp, C0C_QUEUE_WRITE, StartIrpWrite);
else
status = STATUS_SUCCESS;
--- 78,87 ----
pIrp->IoStatus.Information = 0;
! if ((pIoPort->handFlow.ControlHandShake & SERIAL_ERROR_ABORT) && pIoPort->errors) {
status = STATUS_CANCELLED;
} else {
if (IoGetCurrentIrpStackLocation(pIrp)->MajorFunction == IRP_MJ_FLUSH_BUFFERS ||
IoGetCurrentIrpStackLocation(pIrp)->Parameters.Write.Length)
! status = FdoPortStartIrp(pIoPort, pIrp, C0C_QUEUE_WRITE, StartIrpWrite);
else
status = STATUS_SUCCESS;
***************
*** 107,111 ****
switch (pDevExt->doType) {
case C0C_DOTYPE_FP:
! status = FdoPortWrite((PC0C_FDOPORT_EXTENSION)pDevExt, pIrp);
break;
default:
--- 110,114 ----
switch (pDevExt->doType) {
case C0C_DOTYPE_FP:
! status = FdoPortWrite(((PC0C_FDOPORT_EXTENSION)pDevExt)->pIoPortLocal, pIrp);
break;
default:
Index: wait.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/wait.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** wait.c 26 Jan 2005 12:18:54 -0000 1.1
--- wait.c 23 Jun 2006 11:44:52 -0000 1.2
***************
*** 2,6 ****
* $Id$
*
! * Copyright (c) 2004-2005 Vyacheslav Frolov
*
* This program is free software; you can redistribute it and/or modify
--- 2,6 ----
* $Id$
*
! * Copyright (c) 2004-2006 Vyacheslav Frolov
*
* This program is free software; you can redistribute it and/or modify
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.2 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.1 2005/01/26 12:18:54 vfrolov
* Initial revision
***************
*** 29,47 ****
NTSTATUS StartIrpWaitOnMask(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PLIST_ENTRY pQueueToComplete)
{
UNREFERENCED_PARAMETER(pQueueToComplete);
! if (!pDevExt->pIoPortLocal->waitMask)
return STATUS_INVALID_PARAMETER;
! if (pDevExt->pIoPortLocal->eventMask) {
PIRP pIrp;
! pIrp = pDevExt->pIoPortLocal->irpQueues[C0C_QUEUE_WAIT].pCurrent;
! *((PULONG)pIrp->AssociatedIrp.SystemBuffer) = pDevExt->pIoPortLocal->eventMask;
! pDevExt->pIoPortLocal->eventMask = 0;
pIrp->IoStatus.Information = sizeof(ULONG);
return STATUS_SUCCESS;
--- 32,50 ----
NTSTATUS StartIrpWaitOnMask(
! IN PC0C_IO_PORT pIoPort,
IN PLIST_ENTRY pQueueToComplete)
{
UNREFERENCED_PARAMETER(pQueueToComplete);
! if (!pIoPort->waitMask)
return STATUS_INVALID_PARAMETER;
! if (pIoPort->eventMask) {
PIRP pIrp;
! pIrp = pIoPort->irpQueues[C0C_QUEUE_WAIT].pCurrent;
! *((PULONG)pIrp->AssociatedIrp.SystemBuffer) = pIoPort->eventMask;
! pIoPort->eventMask = 0;
pIrp->IoStatus.Information = sizeof(ULONG);
return STATUS_SUCCESS;
***************
*** 52,56 ****
NTSTATUS FdoPortWaitOnMask(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
--- 55,59 ----
NTSTATUS FdoPortWaitOnMask(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
***************
*** 59,67 ****
return STATUS_BUFFER_TOO_SMALL;
! return FdoPortStartIrp(pDevExt, pIrp, C0C_QUEUE_WAIT, StartIrpWaitOnMask);
}
NTSTATUS FdoPortSetWaitMask(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
--- 62,70 ----
return STATUS_BUFFER_TOO_SMALL;
! return FdoPortStartIrp(pIoPort, pIrp, C0C_QUEUE_WAIT, StartIrpWaitOnMask);
}
NTSTATUS FdoPortSetWaitMask(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
***************
*** 95,110 ****
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
FdoPortIo(
C0C_IO_TYPE_WAIT_COMPLETE,
! &pDevExt->pIoPortLocal->eventMask,
! pDevExt->pIoPortLocal,
! &pDevExt->pIoPortLocal->irpQueues[C0C_QUEUE_WAIT],
&queueToComplete);
! pDevExt->pIoPortLocal->waitMask = *pSysBuf;
! pDevExt->pIoPortLocal->eventMask = 0;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
--- 98,113 ----
InitializeListHead(&queueToComplete);
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
FdoPortIo(
C0C_IO_TYPE_WAIT_COMPLETE,
! &pIoPort->eventMask,
! pIoPort,
! &pIoPort->irpQueues[C0C_QUEUE_WAIT],
&queueToComplete);
! pIoPort->waitMask = *pSysBuf;
! pIoPort->eventMask = 0;
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
FdoPortCompleteQueue(&queueToComplete);
***************
*** 113,117 ****
NTSTATUS FdoPortGetWaitMask(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
--- 116,120 ----
NTSTATUS FdoPortGetWaitMask(
! IN PC0C_IO_PORT pIoPort,
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpStack)
***************
*** 125,131 ****
pSysBuf = (PULONG)pIrp->AssociatedIrp.SystemBuffer;
! KeAcquireSpinLock(pDevExt->pIoLock, &oldIrql);
! *pSysBuf = pDevExt->pIoPortLocal->waitMask;
! KeReleaseSpinLock(pDevExt->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(ULONG);
--- 128,134 ----
pSysBuf = (PULONG)pIrp->AssociatedIrp.SystemBuffer;
! KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);
! *pSysBuf = pIoPort->waitMask;
! KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
pIrp->IoStatus.Information = sizeof(ULONG);
Index: read.c
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/read.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** read.c 21 Jun 2006 16:23:57 -0000 1.5
--- read.c 23 Jun 2006 11:44:52 -0000 1.6
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.6 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.5 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 43,56 ****
NTSTATUS StartIrpRead(
! IN PC0C_FDOPORT_EXTENSION pDevExt,
IN PLIST_ENTRY pQueueToComplete)
{
return ReadWrite(
! pDevExt->pIoPortLocal, TRUE,
! pDevExt->pIoPortLocal->pIoPortRemote, FALSE,
pQueueToComplete);
}
! NTSTATUS FdoPortRead(IN PC0C_FDOPORT_EXTENSION pDevExt, IN PIRP pIrp)
{
NTSTATUS status;
--- 46,59 ----
NTSTATUS StartIrpRead(
! IN PC0C_IO_PORT pIoPort,
IN PLIST_ENTRY pQueueToComplete)
{
return ReadWrite(
! pIoPort, TRUE,
! pIoPort->pIoPortRemote, FALSE,
pQueueToComplete);
}
! NTSTATUS FdoPortRead(IN PC0C_IO_PORT pIoPort, IN PIRP pIrp)
{
NTSTATUS status;
***************
*** 58,66 ****
pIrp->IoStatus.Information = 0;
! if ((pDevExt->pIoPortLocal->handFlow.ControlHandShake & SERIAL_ERROR_ABORT) && pDevExt->pIoPortLocal->errors) {
status = STATUS_CANCELLED;
} else {
if (IoGetCurrentIrpStackLocation(pIrp)->Parameters.Read.Length)
! status = FdoPortStartIrp(pDevExt, pIrp, C0C_QUEUE_READ, StartIrpRead);
else
status = STATUS_SUCCESS;
--- 61,69 ----
pIrp->IoStatus.Information = 0;
! if ((pIoPort->handFlow.ControlHandShake & SERIAL_ERROR_ABORT) && pIoPort->errors) {
status = STATUS_CANCELLED;
} else {
if (IoGetCurrentIrpStackLocation(pIrp)->Parameters.Read.Length)
! status = FdoPortStartIrp(pIoPort, pIrp, C0C_QUEUE_READ, StartIrpRead);
else
status = STATUS_SUCCESS;
***************
*** 89,93 ****
switch (pDevExt->doType) {
case C0C_DOTYPE_FP:
! status = FdoPortRead((PC0C_FDOPORT_EXTENSION)pDevExt, pIrp);
break;
default:
--- 92,96 ----
switch (pDevExt->doType) {
case C0C_DOTYPE_FP:
! status = FdoPortRead(((PC0C_FDOPORT_EXTENSION)pDevExt)->pIoPortLocal, pIrp);
break;
default:
Index: delay.h
===================================================================
RCS file: /cvsroot/com0com/com0com/sys/delay.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** delay.h 21 Jun 2006 16:23:57 -0000 1.2
--- delay.h 23 Jun 2006 11:44:52 -0000 1.3
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.3 2006/06/23 11:44:52 vfrolov
+ * Mass replacement pDevExt by pIoPort
+ *
* Revision 1.2 2006/06/21 16:23:57 vfrolov
* Fixed possible BSOD after one port of pair removal
***************
*** 51,55 ****
VOID FreeWriteDelay(PC0C_IO_PORT pIoPort);
SIZE_T GetWriteLimit(PC0C_ADAPTIVE_DELAY pWriteDelay);
! VOID SetWriteDelay(IN PC0C_FDOPORT_EXTENSION pDevExt);
VOID StartWriteDelayTimer(PC0C_ADAPTIVE_DELAY pWriteDelay);
VOID StopWriteDelayTimer(PC0C_ADAPTIVE_DELAY pWriteDelay);
--- 54,58 ----
VOID FreeWriteDelay(PC0C_IO_PORT pIoPort);
SIZE_T GetWriteLimit(PC0C_ADAPTIVE_DELAY pWriteDelay);
! VOID SetWriteDelay(PC0C_IO_PORT pIoPort);
VOID StartWriteDelayTimer(PC0C_ADAPTIVE_DELAY pWriteDelay);
VOID StopWriteDelayTimer(PC0C_ADAPTIVE_DELAY pWriteDelay);
|