mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
- Rewrite MiniQueryInformation so it creates a NDIS_REQUEST and passes it to MiniDoRequest for processing to reduce code duplication
- Call MiniportCoRequest in connection-oriented miniports - Now our NDIS loads all the way to the ASSERT for unsupported media on XP svn path=/trunk/; revision=41348
This commit is contained in:
parent
781c590520
commit
b59d119c6c
1 changed files with 47 additions and 33 deletions
|
@ -666,26 +666,30 @@ MiniQueryInformation(
|
|||
*/
|
||||
{
|
||||
NDIS_STATUS NdisStatus;
|
||||
ULONG BytesNeeded;
|
||||
KIRQL OldIrql;
|
||||
PNDIS_REQUEST NdisRequest;
|
||||
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||
|
||||
/* call the miniport's queryinfo handler */
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
||||
Oid,
|
||||
Buffer,
|
||||
Size,
|
||||
BytesWritten,
|
||||
&BytesNeeded);
|
||||
KeLowerIrql(OldIrql);
|
||||
NdisRequest = ExAllocatePool(NonPagedPool, sizeof(NDIS_REQUEST));
|
||||
if (!NdisRequest) return NDIS_STATUS_RESOURCES;
|
||||
|
||||
RtlZeroMemory(NdisRequest, sizeof(NDIS_REQUEST));
|
||||
|
||||
NdisRequest->RequestType = NdisRequestQueryInformation;
|
||||
NdisRequest->DATA.QUERY_INFORMATION.Oid = Oid;
|
||||
NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer = Buffer;
|
||||
NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength = Size;
|
||||
|
||||
NdisStatus = MiniDoRequest(Adapter, NdisRequest);
|
||||
|
||||
/* FIXME: Wait in pending case! */
|
||||
|
||||
ASSERT(NdisStatus != NDIS_STATUS_PENDING);
|
||||
|
||||
*BytesWritten = NdisRequest->DATA.QUERY_INFORMATION.BytesWritten;
|
||||
|
||||
ExFreePool(NdisRequest);
|
||||
|
||||
return NdisStatus;
|
||||
}
|
||||
|
||||
|
@ -929,30 +933,40 @@ MiniDoRequest(
|
|||
Adapter->NdisMiniportBlock.PendingRequest = NdisRequest;
|
||||
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||
|
||||
switch (NdisRequest->RequestType)
|
||||
if (!Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.CoRequestHandler)
|
||||
{
|
||||
case NdisRequestQueryInformation:
|
||||
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.Oid,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength,
|
||||
(PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten,
|
||||
(PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded);
|
||||
break;
|
||||
switch (NdisRequest->RequestType)
|
||||
{
|
||||
case NdisRequestQueryInformation:
|
||||
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.Oid,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength,
|
||||
(PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten,
|
||||
(PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded);
|
||||
break;
|
||||
|
||||
case NdisRequestSetInformation:
|
||||
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SetInformationHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
||||
NdisRequest->DATA.SET_INFORMATION.Oid,
|
||||
NdisRequest->DATA.SET_INFORMATION.InformationBuffer,
|
||||
NdisRequest->DATA.SET_INFORMATION.InformationBufferLength,
|
||||
(PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead,
|
||||
(PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded);
|
||||
break;
|
||||
case NdisRequestSetInformation:
|
||||
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SetInformationHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
||||
NdisRequest->DATA.SET_INFORMATION.Oid,
|
||||
NdisRequest->DATA.SET_INFORMATION.InformationBuffer,
|
||||
NdisRequest->DATA.SET_INFORMATION.InformationBufferLength,
|
||||
(PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead,
|
||||
(PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded);
|
||||
break;
|
||||
|
||||
default:
|
||||
Status = NDIS_STATUS_FAILURE;
|
||||
default:
|
||||
Status = NDIS_STATUS_FAILURE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.CoRequestHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
||||
NULL, /* FIXME */
|
||||
NdisRequest);
|
||||
}
|
||||
|
||||
if (Status != NDIS_STATUS_PENDING) {
|
||||
|
|
Loading…
Reference in a new issue