- Queue a work item in MiniReset if the adapter is currently busy

- Handle NdisWorkItemResetRequested in MiniportWorker
 - Remove a fixme

svn path=/branches/aicom-network-fixes/; revision=36551
This commit is contained in:
Cameron Gutman 2008-09-27 18:00:08 +00:00
parent 337a43d553
commit 9826b2ad04

View file

@ -619,14 +619,18 @@ MiniReset(
* Status of the operation * Status of the operation
*/ */
{ {
NDIS_STATUS Status = NDIS_STATUS_FAILURE; NDIS_STATUS Status;
KIRQL OldIrql; KIRQL OldIrql;
/* FIXME: What should we return if there isn't a reset handler? */ if (Adapter->MiniportBusy) {
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
MiniQueueWorkItem(Adapter, NdisWorkItemResetRequested, NULL);
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
return NDIS_STATUS_PENDING;
}
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
if (Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler) Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)(
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, Adapter->NdisMiniportBlock.MiniportAdapterContext,
AddressingReset); AddressingReset);
KeLowerIrql(OldIrql); KeLowerIrql(OldIrql);
@ -841,6 +845,7 @@ VOID NTAPI MiniportWorker(IN PVOID WorkItem)
NDIS_STATUS NdisStatus; NDIS_STATUS NdisStatus;
PVOID WorkItemContext; PVOID WorkItemContext;
NDIS_WORK_ITEM_TYPE WorkItemType; NDIS_WORK_ITEM_TYPE WorkItemType;
BOOLEAN AddressingReset;
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
@ -938,6 +943,12 @@ VOID NTAPI MiniportWorker(IN PVOID WorkItem)
break; break;
case NdisWorkItemResetRequested: case NdisWorkItemResetRequested:
NdisStatus = MiniReset(Adapter, &AddressingReset);
if (NdisStatus == NDIS_STATUS_PENDING)
break;
MiniResetComplete(Adapter, NdisStatus, AddressingReset);
break; break;
case NdisWorkItemResetInProgress: case NdisWorkItemResetInProgress: