* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* DEFINES: i386 - Target platform is i386
- * _NDIS_ - Define only for NDIS library
+ * NDIS_WRAPPER - Define only for NDIS library
* NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
* NDIS40 - Use NDIS 4.0 structures by default
* NDIS50 - Use NDIS 5.0 structures by default
+ * NDIS51 - Use NDIS 5.1 structures by default
+ * NDIS40_MINIPORT - Building NDIS 4.0 miniport driver
* NDIS50_MINIPORT - Building NDIS 5.0 miniport driver
* NDIS51_MINIPORT - Building NDIS 5.1 miniport driver
*/
+
#ifndef __NDIS_H
#define __NDIS_H
extern "C" {
#endif
-#pragma pack(push,4)
-
#include "ntddk.h"
#include "ntddndis.h"
#include "netpnp.h"
#include "netevent.h"
#include <winsock2.h>
-#if defined(_NDIS_)
+#if defined(NDIS_WRAPPER)
#define NDISAPI DECLSPEC_EXPORT
#else
#define NDISAPI DECLSPEC_IMPORT
#endif
-#if defined(NDIS50_MINIPORT)
-#ifndef NDIS50
-#define NDIS50
+#if defined(NDIS50_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
+#define NDIS_MINIPORT_MAJOR_VERSION 5
+#define NDIS_MINIPORT_MINOR_VERSION 0
#endif
-#endif /* NDIS50_MINIPORT */
-#if defined(NDIS51_MINIPORT)
-#ifndef NDIS51
-#define NDIS51
+#if defined(NDIS51_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
+#define NDIS_MINIPORT_MAJOR_VERSION 5
+#define NDIS_MINIPORT_MINOR_VERSION 1
+#endif
+
+#if defined(NDIS50) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
+#define NDIS_PROTOCOL_MAJOR_VERSION 5
+#define NDIS_PROTOCOL_MINOR_VERSION 0
+#endif
+
+#if defined(NDIS51) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
+#define NDIS_PROTOCOL_MAJOR_VERSION 5
+#define NDIS_PROTOCOL_MINOR_VERSION 1
+#endif
+
+#if defined(NDIS_MINIPORT_DRIVER) && !defined(BINARY_COMPATIBLE)
+#define BINARY_COMPATIBLE 1
#endif
-#endif /* NDIS51_MINIPORT */
-/* NDIS 3.0 is default */
-#if !defined(NDIS30) || !defined(NDIS40) || !defined(NDIS50) || !defined(NDIS51)
-#define NDIS30
-#endif /* !NDIS30 || !NDIS40 || !NDIS50 || !NDIS51 */
+#if !defined(_M_IX86) && BINARY_COMPATIBLE
+#undef BINARY_COMPATIBLE
+#define BINARY_COMPATIBLE 0
+#endif
#if 1
/* FIXME: */
PVOID MapRegisterBase;
KEVENT AllocationEvent;
PADAPTER_OBJECT SystemAdapterObject;
+ PVOID Miniport;
BOOLEAN InProgress;
} NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
+typedef UCHAR NDIS_DMA_SIZE;
+
+#define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
+#define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
+#define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
+
+typedef enum _NDIS_PROCESSOR_TYPE {
+ NdisProcessorX86,
+ NdisProcessorMips,
+ NdisProcessorAlpha,
+ NdisProcessorPpc,
+ NdisProcessorAmd64
+} NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
+
+typedef enum _NDIS_ENVIRONMENT_TYPE {
+ NdisEnvironmentWindows,
+ NdisEnvironmentWindowsNt
+} NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
/* Possible hardware architecture */
typedef enum _NDIS_INTERFACE_TYPE {
ULONG PeakBandwidth;
ULONG Latency;
ULONG DelayVariation;
- GUARANTEE LevelOfGuarantee;
- ULONG CostOfCall;
- ULONG NetworkAvailability;
+ SERVICETYPE ServiceType;
ULONG MaxSduSize;
+ ULONG MinimumPolicedSize;
} CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
typedef struct _CO_SPECIFIC_PARAMETERS {
#define NDIS30_PROTOCOL_CHARACTERISTICS_S \
UCHAR MajorNdisVersion; \
UCHAR MinorNdisVersion; \
+ USHORT Filler; \
_ANONYMOUS_UNION union { \
UINT Reserved; \
UINT Flags; \
typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
NDIS40_PROTOCOL_CHARACTERISTICS_S;
} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
-#elif defined(NDIS30)
+#else /* NDIS30 */
typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
NDIS30_PROTOCOL_CHARACTERISTICS_S
} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
-#else
-#error Define an NDIS version
-#endif /* NDIS30 */
+#endif
IN UINT SourceOffset,
OUT PUINT BytesCopied);
+/*
+ * VOID
+ * NdisCopyLookaheadData(
+ * IN PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length,
+ * IN ULONG ReceiveFlags);
+ */
+
+#ifdef _M_IX86
+#define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
+ RtlCopyMemory(Destination, Source, Length)
+#else
+#define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
+ { \
+ if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
+ { \
+ RtlCopyMemory(_Destination, _Source, _Length); \
+ } \
+ else \
+ { \
+ PUCHAR _Src = (PUCHAR)(Source); \
+ PUCHAR _Dest = (PUCHAR)(Destination); \
+ PUCHAR _End = _Dest + (Length); \
+ while (_Dest < _End) \
+ *_Dest++ = *_Src++; \
+ } \
+ }
+#endif
+
NDISAPI
VOID
DDKAPI
NdisFreeBuffer(
IN PNDIS_BUFFER Buffer);
+#if BINARY_COMPATIBLE
+
NDISAPI
VOID
DDKAPI
OUT PUINT Offset,
OUT PUINT Length);
-NDISAPI
-VOID
-DDKAPI
-NdisFreeBuffer(
- IN PNDIS_BUFFER Buffer);
-
+#else
/*
* VOID
(*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
}
-
/*
* VOID
* NdisGetFirstBufferFromPacket(
*((PUINT)Length) = MmGetMdlByteCount(Buffer); \
}
+#endif /* BINARY_COMPATIBLE */
/*
* PVOID
} \
}
+/*
+ * VOID
+ * NdisQueryPacketLength(
+ * IN PNDIS_PACKET Packet,
+ * OUT PUINT PhysicalBufferCount OPTIONAL,
+ * OUT PUINT BufferCount OPTIONAL,
+ * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
+ * OUT PUINT TotalPacketLength OPTIONAL);
+ */
+#define NdisQueryPacketLength(Packet, \
+ TotalPacketLength) \
+{ \
+ if ((TotalPacketLength)) \
+ { \
+ if (!(Packet)->Private.ValidCounts) { \
+ UINT _Offset; \
+ UINT _PacketLength; \
+ PNDIS_BUFFER _NdisBuffer; \
+ UINT _PhysicalBufferCount = 0; \
+ UINT _TotalPacketLength = 0; \
+ UINT _Count = 0; \
+ \
+ for (_NdisBuffer = (Packet)->Private.Head; \
+ _NdisBuffer != (PNDIS_BUFFER)NULL; \
+ _NdisBuffer = _NdisBuffer->Next) \
+ { \
+ _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
+ NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
+ _TotalPacketLength += _PacketLength; \
+ _Count++; \
+ } \
+ (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
+ (Packet)->Private.TotalLength = _TotalPacketLength; \
+ (Packet)->Private.Count = _Count; \
+ (Packet)->Private.ValidCounts = TRUE; \
+ } \
+ \
+ if (TotalPacketLength) \
+ *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
+ } \
+}
+
/*
* VOID
/* Memory management routines */
+#if BINARY_COMPATIBLE
+
+NDISAPI
+VOID
+DDKAPI
+NdisCreateLookaheadBufferFromSharedMemory(
+ IN PVOID pSharedMemory,
+ IN UINT LookaheadLength,
+ OUT PVOID *pLookaheadBuffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDestroyLookaheadBufferFromSharedMemory(
+ IN PVOID pLookaheadBuffer);
+
+#else
+
/*
* VOID
* NdisCreateLookaheadBufferFromSharedMemory(
*/
#define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
-#if defined(i386)
+#endif
+
+#if defined(_M_IX86) || defined(_M_AMD64)
/*
* VOID
- * NdisMoveFromMappedMemory(
+ * NdisMoveMappedMemory(
* OUT PVOID Destination,
* IN PVOID Source,
* IN ULONG Length);
*/
-#define NdisMoveFromMappedMemory(Destination, Source, Length) \
- NdisMoveMappedMemory(Destination, Source, Length)
+#define NdisMoveMappedMemory(Destination, Source, Length) \
+ RtlCopyMemory(Destination, Source, Length)
/*
* VOID
- * NdisMoveMappedMemory(
+ * NdisZeroMappedMemory(
+ * IN PVOID Destination,
+ * IN ULONG Length);
+ */
+#define NdisZeroMappedMemory(Destination, Length) \
+ RtlZeroMemory(Destination, Length)
+
+#else
+
+#define NdisMoveMappedMemory(Destination, Source, Length) \
+{
+ PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length;
+ while (_Dest < _End)
+ *_Dest++ = _Src++;
+}
+
+#define NdisZeroMappedMemory(Destination, Length) \
+{
+ PUCHAR _Dest = Destination, _End = _Dest + Length;
+ while (_Dest < _End)
+ *_Dest++ = 0;
+}
+
+#endif /* _M_IX86 or _M_AMD64 */
+
+/*
+ * VOID
+ * NdisMoveFromMappedMemory(
* OUT PVOID Destination,
* IN PVOID Source,
* IN ULONG Length);
*/
-#define NdisMoveMappedMemory(Destination, Source, Length) \
- RtlCopyMemory(Destination, Source, Length)
+#define NdisMoveFromMappedMemory(Destination, Source, Length) \
+ NdisMoveMappedMemory(Destination, Source, Length)
/*
* VOID
#define NdisMoveToMappedMemory(Destination, Source, Length) \
NdisMoveMappedMemory(Destination, Source, Length)
-#endif /* i386 */
-
/*
* VOID
* NdisMUpdateSharedMemory(
#define NdisFillMemory(Destination, Length, Fill) \
RtlFillMemory(Destination, Length, Fill)
-/*
- * VOID
- * NdisZeroMappedMemory(
- * IN PVOID Destination,
- * IN ULONG Length);
- */
-#define NdisZeroMappedMemory(Destination, Length) \
- RtlZeroMemory(Destination, Length)
-
/*
* VOID
* NdisMoveMemory(
/* Spin lock reoutines */
+#if BINARY_COMPATIBLE
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocateSpinLock(
+ IN PNDIS_SPIN_LOCK SpinLock);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeSpinLock(
+ IN PNDIS_SPIN_LOCK SpinLock);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAcquireSpinLock(
+ IN PNDIS_SPIN_LOCK SpinLock);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReleaseSpinLock(
+ IN PNDIS_SPIN_LOCK SpinLock);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprAcquireSpinLock(
+ IN PNDIS_SPIN_LOCK SpinLock);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprReleaseSpinLock(
+ IN PNDIS_SPIN_LOCK SpinLock);
+
+#else
+
/*
* VOID
* NdisAllocateSpinLock(
#define NdisDprReleaseSpinLock(_SpinLock) \
KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
-
+#endif /* BINARY_COMPATIBLE */
/* I/O routines */
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE WrapperConfigurationContext,
IN PNDIS_STRING Keyword,
- IN PNDIS_CONFIGURATION_PARAMETER *ParameterValue);
+ IN PNDIS_CONFIGURATION_PARAMETER ParameterValue);
NDISAPI
VOID
*/
#define NdisStallExecution KeStallExecutionProcessor
+#if BINARY_COMPATIBLE
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetCurrentSystemTime(
+ IN PLARGE_INTEGER pSystemTime);
+
+#else
+
/*
* VOID
* NdisGetCurrentSystemTime(
*/
#define NdisGetCurrentSystemTime KeQuerySystemTime
+#endif
+
NDISAPI
VOID
DDKAPI
OUT PUINT Length,
IN UINT Priority);
-
/* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
typedef BOOLEAN DDKAPI
#define NDIS30_MINIPORT_CHARACTERISTICS_S \
UCHAR MajorNdisVersion; \
UCHAR MinorNdisVersion; \
+ USHORT Filler; \
UINT Reserved; \
W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
IN PVOID CancelId);
-#if defined(NDIS51)
+#if defined(NDIS51_MINIPORT)
typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
NDIS50_MINIPORT_CHARACTERISTICS_S
} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
-#elif defined(NDIS50)
+#elif defined(NDIS50_MINIPORT)
typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
NDIS50_MINIPORT_CHARACTERISTICS_S
} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
-#elif defined(NDIS40)
+#elif defined(NDIS40_MINIPORT)
typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
NDIS40_MINIPORT_CHARACTERISTICS_S
} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
-#elif defined(NDIS30)
+#else /* NDIS30 */
typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
NDIS30_MINIPORT_CHARACTERISTICS_S
} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
-#endif /* NDIS30 */
+#endif
typedef NDIS_STATUS DDKAPI
BOOLEAN Filler1;
KEVENT DpcsCompletedEvent;
BOOLEAN SharedInterrupt;
- BOOLEAN IsrRequested;
+ BOOLEAN IsrRequested;
} NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
typedef struct _NDIS_MINIPORT_TIMER {
PETH_BINDING_INFO DirectedList;
PETH_BINDING_INFO BMList;
PETH_BINDING_INFO MCastSet;
-#if defined(_NDIS_)
+#if defined(NDIS_WRAPPER)
UINT NumOpens;
PVOID BindListLock;
#endif
UNICODE_STRING MiniportName;
PNDIS_BIND_PATHS BindPaths;
NDIS_HANDLE OpenQueue;
- REFERENCE Ref;
+ REFERENCE ShortRef;
NDIS_HANDLE DeviceContext;
UCHAR Padding1;
UCHAR LockAcquired;
NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
WAN_RCV_HANDLER WanRcvHandler;
WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
-#if defined(_NDIS_)
+#if defined(NDIS_WRAPPER)
PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
RESET_COMPLETE_HANDLER ResetCompleteHandler;
STATUS_HANDLER StatusHandler;
STATUS_COMPLETE_HANDLER StatusCompleteHandler;
-#if defined(_NDIS_)
+#if defined(NDIS_WRAPPER)
ULONG Flags;
ULONG References;
KSPIN_LOCK SpinLock;
struct _NDIS_OPEN_BLOCK
{
NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
-#if defined(_NDIS_)
+#if defined(NDIS_WRAPPER)
struct _NDIS_OPEN_CO
{
struct _NDIS_CO_AF_BLOCK * NextAf;
NdisMAllocateMapRegisters(
IN NDIS_HANDLE MiniportAdapterHandle,
IN UINT DmaChannel,
- IN BOOLEAN Dma32BitAddresses,
+ IN NDIS_DMA_SIZE DmaSize,
IN ULONG PhysicalMapRegistersNeeded,
IN ULONG MaximumPhysicalMapping);
PacketSize) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
- (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB), \
+ ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB, \
(MiniportReceiveContext), \
(HeaderBuffer), \
(HeaderBuffer), \
#define NdisMIndicateStatus(MiniportAdapterHandle, \
GeneralStatus, StatusBuffer, StatusBufferSize) \
- (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)( \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \
MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
/*
IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
IN UINT CharacteristicsLength);
+NDISAPI
+VOID
+DDKAPI
+NdisMSetTimer(
+ IN PNDIS_MINIPORT_TIMER Timer,
+ IN UINT MillisecondsToDelay);
-#if !defined(_NDIS_)
+NDISAPI
+VOID
+DDKAPI
+NdisMInitializeTimer(
+ IN OUT PNDIS_MINIPORT_TIMER Timer,
+ IN NDIS_HANDLE MiniportAdapterHandle,
+ IN PNDIS_TIMER_FUNCTION TimerFunction,
+ IN PVOID FunctionContext);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMSetPeriodicTimer(
+ IN PNDIS_MINIPORT_TIMER Timer,
+ IN UINT MillisecondPeriod);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCancelTimer(
+ IN PNDIS_MINIPORT_TIMER Timer,
+ OUT PBOOLEAN TimerCancelled);
+
+#if !defined(NDIS_WRAPPER)
/*
* VOID
typedef struct _NDIS_MAC_CHARACTERISTICS {
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
+ USHORT Filler;
UINT Reserved;
OPEN_ADAPTER_HANDLER OpenAdapterHandler;
CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
-#pragma pack(pop)
-
#ifdef __cplusplus
}
#endif