diff --git a/reactos/drivers/net/ndis/ndis/miniport.c b/reactos/drivers/net/ndis/ndis/miniport.c index 4a3528661b7..70cce85d08e 100644 --- a/reactos/drivers/net/ndis/ndis/miniport.c +++ b/reactos/drivers/net/ndis/ndis/miniport.c @@ -627,6 +627,7 @@ MiniQueueWorkItem( NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); ASSERT(Adapter); + ASSERT(KeGetCurrentIrql() >= DISPATCH_LEVEL); #if 0 if (Adapter->WorkQueueLevel < NDIS_MINIPORT_WORK_QUEUE_SIZE - 1) @@ -755,6 +756,24 @@ MiniDoRequest( } } + +#undef NdisMQueryInformationComplete +/* + * @implemented + */ +VOID +EXPORT +NdisMQueryInformationComplete( + IN NDIS_HANDLE MiniportAdapterHandle, + IN NDIS_STATUS Status) +{ + PNDIS_MINIPORT_BLOCK MiniportBlock = + (PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle; + ASSERT(MiniportBlock); + if( MiniportBlock->QueryCompleteHandler ) + (MiniportBlock->QueryCompleteHandler)(MiniportAdapterHandle, Status); +} + VOID STDCALL MiniportDpc( IN PKDPC Dpc, @@ -777,7 +796,6 @@ VOID STDCALL MiniportDpc( NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); - /* XXX is adapter lock held here? should be... */ NdisStatus = MiniDequeueWorkItem(Adapter, &WorkItemType, &WorkItemContext); if (NdisStatus == NDIS_STATUS_SUCCESS) @@ -853,7 +871,7 @@ VOID STDCALL MiniportDpc( switch (((PNDIS_REQUEST)WorkItemContext)->RequestType) { case NdisRequestQueryInformation: - NdisMQueryInformationComplete((NDIS_HANDLE)Adapter, NdisStatus); + NdisMQueryInformationComplete((NDIS_HANDLE)Adapter, NdisStatus); break; case NdisRequestSetInformation: @@ -1046,21 +1064,6 @@ NdisInitializeWrapper( *NdisWrapperHandle = Miniport; } -#undef NdisMQueryInformationComplete - - -/* - * @implemented - */ -VOID -EXPORT -NdisMQueryInformationComplete( - IN NDIS_HANDLE MiniportAdapterHandle, - IN NDIS_STATUS Status) -{ - (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status); -} - VOID STDCALL NdisIBugcheckCallback( IN PVOID Buffer, diff --git a/reactos/drivers/net/ndis/ndis/protocol.c b/reactos/drivers/net/ndis/ndis/protocol.c index 0cd27f00992..b1f95aeb1fe 100644 --- a/reactos/drivers/net/ndis/ndis/protocol.c +++ b/reactos/drivers/net/ndis/ndis/protocol.c @@ -147,14 +147,16 @@ ProRequest( Adapter->MiniportBusy = TRUE; } } - KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); + /* MiniQueueWorkItem must be called at IRQL >= DISPATCH_LEVEL */ if (QueueWorkItem) { MiniQueueWorkItem(Adapter, NdisWorkItemRequest, (PVOID)NdisRequest); return NDIS_STATUS_PENDING; } + KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); + /* MiniportQueryInformation (called by MiniDoRequest) runs at DISPATCH_LEVEL */ /* TODO (?): move the irql raise into MiniDoRequest */ KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);