summaryrefslogblamecommitdiffstats
path: root/private/ntos/ndis/ndis30/minisub.c
blob: 4454cd129c65f377d89cb042eede7d1a9429b47d (plain) (tree)























































































































































































































































































                                                                    
/*++
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
        );
}