- Fix support for asynchronously completed requests

svn path=/trunk/; revision=40704
This commit is contained in:
Cameron Gutman 2009-04-25 23:31:49 +00:00
parent 6156cae916
commit d818cea15d

View file

@ -259,22 +259,6 @@ MiniIndicateData(
NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n")); NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n"));
} }
VOID NTAPI
MiniQueryComplete(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS Status)
{
UNIMPLEMENTED;
}
VOID NTAPI
MiniSetComplete(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS Status)
{
UNIMPLEMENTED;
}
VOID NTAPI VOID NTAPI
MiniIndicateReceivePacket( MiniIndicateReceivePacket(
@ -409,16 +393,14 @@ MiniResetComplete(
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
} }
VOID NTAPI VOID NTAPI
MiniRequestComplete( MiniRequestComplete(
IN PNDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportAdapterHandle,
IN PNDIS_REQUEST Request,
IN NDIS_STATUS Status) IN NDIS_STATUS Status)
{ {
PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle; PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle;
PNDIS_REQUEST_MAC_BLOCK MacBlock = (PNDIS_REQUEST_MAC_BLOCK)Request->MacReserved; PNDIS_REQUEST Request;
PNDIS_REQUEST_MAC_BLOCK MacBlock;
KIRQL OldIrql; KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
@ -426,15 +408,22 @@ MiniRequestComplete(
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock); KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
Adapter->NdisMiniportBlock.PendingRequest = NULL; Request = Adapter->NdisMiniportBlock.PendingRequest;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock); KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
MacBlock = (PNDIS_REQUEST_MAC_BLOCK)Request->MacReserved;
if( MacBlock->Binding->RequestCompleteHandler ) { if( MacBlock->Binding->RequestCompleteHandler ) {
(*MacBlock->Binding->RequestCompleteHandler)( (*MacBlock->Binding->RequestCompleteHandler)(
MacBlock->Binding->ProtocolBindingContext, MacBlock->Binding->ProtocolBindingContext,
Request, Request,
Status); Status);
} }
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
Adapter->NdisMiniportBlock.PendingRequest = NULL;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
KeLowerIrql(OldIrql); KeLowerIrql(OldIrql);
} }
@ -1148,17 +1137,14 @@ MiniportWorker(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
{ {
case NdisRequestQueryInformation: case NdisRequestQueryInformation:
NdisMQueryInformationComplete((NDIS_HANDLE)Adapter, NdisStatus); NdisMQueryInformationComplete((NDIS_HANDLE)Adapter, NdisStatus);
MiniRequestComplete( (NDIS_HANDLE)Adapter, (PNDIS_REQUEST)WorkItemContext, NdisStatus );
break; break;
case NdisRequestSetInformation: case NdisRequestSetInformation:
NdisMSetInformationComplete((NDIS_HANDLE)Adapter, NdisStatus); NdisMSetInformationComplete((NDIS_HANDLE)Adapter, NdisStatus);
MiniRequestComplete( (NDIS_HANDLE)Adapter, (PNDIS_REQUEST)WorkItemContext, NdisStatus );
break; break;
default: default:
NDIS_DbgPrint(MIN_TRACE, ("Unknown NDIS request type.\n")); NDIS_DbgPrint(MIN_TRACE, ("Unknown NDIS request type.\n"));
MiniRequestComplete( (NDIS_HANDLE)Adapter, (PNDIS_REQUEST)WorkItemContext, NdisStatus );
break; break;
} }
break; break;
@ -1842,8 +1828,8 @@ NdisIPnPStartDevice(
Adapter->NdisMiniportBlock.StatusHandler = MiniStatus; Adapter->NdisMiniportBlock.StatusHandler = MiniStatus;
Adapter->NdisMiniportBlock.StatusCompleteHandler= MiniStatusComplete; Adapter->NdisMiniportBlock.StatusCompleteHandler= MiniStatusComplete;
Adapter->NdisMiniportBlock.SendPacketsHandler = ProSendPackets; Adapter->NdisMiniportBlock.SendPacketsHandler = ProSendPackets;
Adapter->NdisMiniportBlock.QueryCompleteHandler = MiniQueryComplete; Adapter->NdisMiniportBlock.QueryCompleteHandler = MiniRequestComplete;
Adapter->NdisMiniportBlock.SetCompleteHandler = MiniSetComplete; Adapter->NdisMiniportBlock.SetCompleteHandler = MiniRequestComplete;
/* /*
* Call MiniportInitialize. * Call MiniportInitialize.