mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
4.9 KiB
280 lines
4.9 KiB
/*++
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
miniport.c
|
|
|
|
Abstract:
|
|
|
|
NDIS wrapper functions
|
|
|
|
Author:
|
|
|
|
Sean Selitrennikoff (SeanSe) 05-Oct-93
|
|
|
|
Environment:
|
|
|
|
Kernel mode, FSD
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#undef NdisAllocateSpinLock
|
|
#undef NdisFreeSpinLock
|
|
#undef NdisAcquireSpinLock
|
|
#undef NdisReleaseSpinLock
|
|
#undef NdisDprAcquireSpinLock
|
|
#undef NdisDprReleaseSpinLock
|
|
#undef NdisFreeBuffer
|
|
#undef NdisQueryBuffer
|
|
#undef NdisQueryBufferOffset
|
|
#undef NDIS_BUFFER_TO_SPAN_PAGES
|
|
#undef NdisGetBufferPhysicalArraySize
|
|
#undef NdisEqualString
|
|
#undef NdisMStartBufferPhysicalMapping
|
|
#undef NdisMCompleteBufferPhysicalMapping
|
|
|
|
VOID
|
|
NdisAllocateSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
);
|
|
|
|
VOID
|
|
NdisFreeSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
);
|
|
|
|
VOID
|
|
NdisAcquireSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
);
|
|
|
|
VOID
|
|
NdisReleaseSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
);
|
|
|
|
VOID
|
|
NdisDprAcquireSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
);
|
|
|
|
VOID
|
|
NdisDprReleaseSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
);
|
|
|
|
VOID
|
|
NdisFreeBuffer(
|
|
IN PNDIS_BUFFER Buffer
|
|
);
|
|
|
|
VOID
|
|
NdisQueryBuffer(
|
|
IN PNDIS_BUFFER Buffer,
|
|
OUT PVOID *VirtualAddress OPTIONAL,
|
|
OUT PUINT Length
|
|
);
|
|
|
|
VOID
|
|
NdisQueryBufferOffset(
|
|
IN PNDIS_BUFFER Buffer,
|
|
OUT PUINT Offset,
|
|
OUT PUINT Length
|
|
);
|
|
|
|
ULONG
|
|
NDIS_BUFFER_TO_SPAN_PAGES(
|
|
IN PNDIS_BUFFER Buffer
|
|
);
|
|
|
|
VOID
|
|
NdisGetBufferPhysicalArraySize(
|
|
IN PNDIS_BUFFER Buffer,
|
|
OUT PUINT ArraySize
|
|
);
|
|
|
|
BOOLEAN
|
|
NdisEqualString(
|
|
IN PNDIS_STRING String1,
|
|
IN PNDIS_STRING String2,
|
|
IN BOOLEAN CaseInsensitive
|
|
);
|
|
|
|
VOID
|
|
NdisMStartBufferPhysicalMapping(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN PNDIS_BUFFER Buffer,
|
|
IN ULONG PhysicalMapRegister,
|
|
IN BOOLEAN WriteToDevice,
|
|
OUT PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray,
|
|
OUT PUINT ArraySize
|
|
);
|
|
|
|
VOID
|
|
NdisMCompleteBufferPhysicalMapping(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN PNDIS_BUFFER Buffer,
|
|
IN ULONG PhysicalMapRegister
|
|
);
|
|
|
|
|
|
VOID
|
|
NdisAllocateSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
)
|
|
{
|
|
KeInitializeSpinLock(&SpinLock->SpinLock);
|
|
}
|
|
|
|
VOID
|
|
NdisFreeSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER (SpinLock);
|
|
}
|
|
|
|
VOID
|
|
NdisAcquireSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
)
|
|
{
|
|
KeAcquireSpinLock(&SpinLock->SpinLock, &SpinLock->OldIrql);
|
|
}
|
|
|
|
VOID
|
|
NdisReleaseSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
)
|
|
{
|
|
KeReleaseSpinLock(&SpinLock->SpinLock, SpinLock->OldIrql);
|
|
}
|
|
|
|
VOID
|
|
NdisDprAcquireSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
)
|
|
{
|
|
KeAcquireSpinLockAtDpcLevel(&SpinLock->SpinLock);
|
|
SpinLock->OldIrql = DISPATCH_LEVEL;
|
|
}
|
|
|
|
VOID
|
|
NdisDprReleaseSpinLock(
|
|
IN PNDIS_SPIN_LOCK SpinLock
|
|
)
|
|
{
|
|
KeReleaseSpinLockFromDpcLevel(&SpinLock->SpinLock);
|
|
}
|
|
VOID
|
|
NdisFreeBuffer(
|
|
IN PNDIS_BUFFER Buffer
|
|
)
|
|
{
|
|
IoFreeMdl(Buffer);
|
|
}
|
|
|
|
VOID
|
|
NdisQueryBuffer(
|
|
IN PNDIS_BUFFER Buffer,
|
|
OUT PVOID *VirtualAddress OPTIONAL,
|
|
OUT PUINT Length
|
|
)
|
|
{
|
|
if ( ARGUMENT_PRESENT(VirtualAddress) ) {
|
|
*VirtualAddress = MmGetSystemAddressForMdl(Buffer);
|
|
}
|
|
*Length = MmGetMdlByteCount(Buffer);
|
|
}
|
|
|
|
VOID
|
|
NdisQueryBufferOffset(
|
|
IN PNDIS_BUFFER Buffer,
|
|
OUT PUINT Offset,
|
|
OUT PUINT Length
|
|
)
|
|
{
|
|
*Offset = MmGetMdlByteOffset(Buffer);
|
|
*Length = MmGetMdlByteCount(Buffer);
|
|
}
|
|
|
|
ULONG
|
|
NDIS_BUFFER_TO_SPAN_PAGES(
|
|
IN PNDIS_BUFFER Buffer
|
|
)
|
|
{
|
|
if (MmGetMdlByteCount(Buffer) == 0) {
|
|
return 1;
|
|
}
|
|
return COMPUTE_PAGES_SPANNED(
|
|
MmGetMdlVirtualAddress(Buffer),
|
|
MmGetMdlByteCount(Buffer)
|
|
);
|
|
}
|
|
|
|
VOID
|
|
NdisGetBufferPhysicalArraySize(
|
|
IN PNDIS_BUFFER Buffer,
|
|
OUT PUINT ArraySize
|
|
)
|
|
{
|
|
if (MmGetMdlByteCount(Buffer) == 0) {
|
|
*ArraySize = 1;
|
|
} else {
|
|
*ArraySize = COMPUTE_PAGES_SPANNED(
|
|
MmGetMdlVirtualAddress(Buffer),
|
|
MmGetMdlByteCount(Buffer)
|
|
);
|
|
}
|
|
}
|
|
|
|
BOOLEAN
|
|
NdisEqualString(
|
|
IN PNDIS_STRING String1,
|
|
IN PNDIS_STRING String2,
|
|
IN BOOLEAN CaseInsensitive
|
|
)
|
|
{
|
|
return RtlEqualUnicodeString(String1, String2, CaseInsensitive);
|
|
}
|
|
|
|
VOID
|
|
NdisMStartBufferPhysicalMapping(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN PNDIS_BUFFER Buffer,
|
|
IN ULONG PhysicalMapRegister,
|
|
IN BOOLEAN WriteToDevice,
|
|
OUT PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray,
|
|
OUT PUINT ArraySize
|
|
)
|
|
{
|
|
NdisMStartBufferPhysicalMappingMacro(
|
|
MiniportAdapterHandle,
|
|
Buffer,
|
|
PhysicalMapRegister,
|
|
WriteToDevice,
|
|
PhysicalAddressArray,
|
|
ArraySize
|
|
);
|
|
}
|
|
|
|
VOID
|
|
NdisMCompleteBufferPhysicalMapping(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN PNDIS_BUFFER Buffer,
|
|
IN ULONG PhysicalMapRegister
|
|
)
|
|
{
|
|
NdisMCompleteBufferPhysicalMappingMacro(
|
|
MiniportAdapterHandle,
|
|
Buffer,
|
|
PhysicalMapRegister
|
|
);
|
|
}
|
|
|