windows-nt/Source/XPSP1/NT/net/ndis/sys/macros.h
2020-09-26 16:20:57 +08:00

85 lines
4.5 KiB
C

/*++
Copyright (c) 1990-1995 Microsoft Corporation
Module Name:
macros.h
Abstract:
NDIS wrapper definitions
Author:
Environment:
Kernel mode, FSD
Revision History:
Jun-95 Jameel Hyder Split up from a monolithic file
--*/
#ifndef _MACROS_H
#define _MACROS_H
#define NdisMStartBufferPhysicalMappingMacro( \
_MiniportAdapterHandle, \
_Buffer, \
_PhysicalMapRegister, \
_Write, \
_PhysicalAddressArray, \
_ArraySize) \
{ \
PNDIS_MINIPORT_BLOCK _Miniport = (PNDIS_MINIPORT_BLOCK)(_MiniportAdapterHandle);\
PMAP_TRANSFER mapTransfer = *_Miniport->SystemAdapterObject->DmaOperations->MapTransfer;\
PHYSICAL_ADDRESS _LogicalAddress; \
PUCHAR _VirtualAddress; \
ULONG _LengthRemaining; \
ULONG _LengthMapped; \
UINT _CurrentArrayLocation; \
\
_VirtualAddress = (PUCHAR)MmGetMdlVirtualAddress(_Buffer); \
_LengthRemaining = MmGetMdlByteCount(_Buffer); \
_CurrentArrayLocation = 0; \
\
while (_LengthRemaining > 0) \
{ \
_LengthMapped = _LengthRemaining; \
_LogicalAddress = \
mapTransfer(_Miniport->SystemAdapterObject, \
(_Buffer), \
_Miniport->MapRegisters[_PhysicalMapRegister].MapRegister,\
_VirtualAddress, \
&_LengthMapped, \
(_Write)); \
(_PhysicalAddressArray)[_CurrentArrayLocation].PhysicalAddress = _LogicalAddress;\
(_PhysicalAddressArray)[_CurrentArrayLocation].Length = _LengthMapped; \
_LengthRemaining -= _LengthMapped; \
_VirtualAddress += _LengthMapped; \
++_CurrentArrayLocation; \
} \
_Miniport->MapRegisters[_PhysicalMapRegister].WriteToDevice = (_Write); \
*(_ArraySize) = _CurrentArrayLocation; \
}
#define NdisMCompleteBufferPhysicalMappingMacro(_MiniportAdapterHandle, \
_Buffer, \
_PhysicalMapRegister) \
{ \
PNDIS_MINIPORT_BLOCK _Miniport = (PNDIS_MINIPORT_BLOCK)(_MiniportAdapterHandle);\
PFLUSH_ADAPTER_BUFFERS flushAdapterBuffers = *_Miniport->SystemAdapterObject->DmaOperations->FlushAdapterBuffers;\
\
flushAdapterBuffers(_Miniport->SystemAdapterObject, \
_Buffer, \
(_Miniport)->MapRegisters[_PhysicalMapRegister].MapRegister,\
MmGetMdlVirtualAddress(_Buffer), \
MmGetMdlByteCount(_Buffer), \
(_Miniport)->MapRegisters[_PhysicalMapRegister].WriteToDevice);\
}
#endif //_MACROS_H