Re-add local w32api changes
[reactos.git] / reactos / w32api / include / ddk / ndis.h
index 216249d..3b64548 100644 (file)
  * 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: */
@@ -537,9 +550,28 @@ typedef struct _NDIS_DMA_BLOCK {
   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 {
@@ -703,10 +735,9 @@ typedef struct _CO_FLOW_PARAMETERS {
   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 {
@@ -1347,6 +1378,7 @@ typedef VOID DDKAPI
 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
   UCHAR  MajorNdisVersion; \
   UCHAR  MinorNdisVersion; \
+  USHORT  Filler; \
   _ANONYMOUS_UNION union { \
     UINT  Reserved; \
     UINT  Flags; \
@@ -1497,13 +1529,11 @@ typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
 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
 
 
 
@@ -1567,6 +1597,36 @@ NdisCopyFromPacketToPacket(
   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
@@ -1665,6 +1725,8 @@ DDKAPI
 NdisFreeBuffer(
   IN PNDIS_BUFFER  Buffer);
 
+#if BINARY_COMPATIBLE
+
 NDISAPI
 VOID
 DDKAPI
@@ -1698,12 +1760,7 @@ NdisQueryBufferOffset(
   OUT PUINT  Offset,
   OUT PUINT  Length);
 
-NDISAPI
-VOID
-DDKAPI
-NdisFreeBuffer(
-  IN PNDIS_BUFFER  Buffer);
-
+#else
 
 /*
  * VOID
@@ -1717,7 +1774,6 @@ NdisFreeBuffer(
   (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))  \
 }
 
-
 /*
  * VOID
  * NdisGetFirstBufferFromPacket(
@@ -1789,6 +1845,7 @@ NdisFreeBuffer(
   *((PUINT)Length) = MmGetMdlByteCount(Buffer);   \
 }
 
+#endif /* BINARY_COMPATIBLE */
 
 /*
  * PVOID
@@ -2026,6 +2083,48 @@ NdisFreeBuffer(
   } \
 }
 
+/*
+ * 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
@@ -2160,6 +2259,24 @@ NdisFreeBuffer(
 
 /* 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(
@@ -2179,27 +2296,56 @@ NdisFreeBuffer(
  */
 #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
@@ -2211,8 +2357,6 @@ NdisFreeBuffer(
 #define NdisMoveToMappedMemory(Destination, Source, Length) \
   NdisMoveMappedMemory(Destination, Source, Length)
 
-#endif /* i386 */
-
 /*
  * VOID
  * NdisMUpdateSharedMemory(
@@ -2362,15 +2506,6 @@ NdisUpdateSharedMemory(
 #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(
@@ -2519,6 +2654,46 @@ NdisUnicodeStringToAnsiString(
 
 /* 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(
@@ -2569,7 +2744,7 @@ NdisUnicodeStringToAnsiString(
 #define NdisDprReleaseSpinLock(_SpinLock) \
   KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
 
-
+#endif /* BINARY_COMPATIBLE */
 
 /* I/O routines */
 
@@ -2853,7 +3028,7 @@ NdisWriteConfiguration(
   OUT  PNDIS_STATUS  Status,
   IN NDIS_HANDLE  WrapperConfigurationContext,
   IN PNDIS_STRING  Keyword,
-  IN PNDIS_CONFIGURATION_PARAMETER  *ParameterValue);
+  IN PNDIS_CONFIGURATION_PARAMETER  ParameterValue);
 
 NDISAPI
 VOID
@@ -2871,6 +3046,16 @@ NdisWriteErrorLogEntry(
  */
 #define NdisStallExecution KeStallExecutionProcessor
 
+#if BINARY_COMPATIBLE
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetCurrentSystemTime(
+  IN PLARGE_INTEGER  pSystemTime);
+
+#else
+
 /*
  * VOID
  * NdisGetCurrentSystemTime(
@@ -2878,6 +3063,8 @@ NdisWriteErrorLogEntry(
  */
 #define NdisGetCurrentSystemTime KeQuerySystemTime
 
+#endif
+
 NDISAPI
 VOID
 DDKAPI
@@ -3611,7 +3798,6 @@ NdisQueryBufferSafe(
   OUT PUINT  Length,
   IN UINT  Priority);
 
-
 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
 
 typedef BOOLEAN DDKAPI
@@ -3709,6 +3895,7 @@ typedef NDIS_STATUS 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; \
@@ -3849,23 +4036,23 @@ typedef VOID DDKAPI
   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
@@ -3927,7 +4114,7 @@ typedef struct _NDIS_MINIPORT_INTERRUPT {
   BOOLEAN  Filler1;
   KEVENT  DpcsCompletedEvent;
   BOOLEAN  SharedInterrupt;
-  BOOLEAN       IsrRequested;
+  BOOLEAN  IsrRequested;
 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
 
 typedef struct _NDIS_MINIPORT_TIMER {
@@ -4017,7 +4204,7 @@ typedef struct _ETH_FILTER {
   PETH_BINDING_INFO  DirectedList;
   PETH_BINDING_INFO  BMList;
   PETH_BINDING_INFO  MCastSet;
-#if defined(_NDIS_)
+#if defined(NDIS_WRAPPER)
   UINT  NumOpens;
   PVOID  BindListLock;
 #endif
@@ -4204,7 +4391,7 @@ struct _NDIS_MINIPORT_BLOCK {
   UNICODE_STRING  MiniportName;
   PNDIS_BIND_PATHS  BindPaths;
   NDIS_HANDLE  OpenQueue;
-  REFERENCE  Ref;
+  REFERENCE  ShortRef;
   NDIS_HANDLE  DeviceContext;
   UCHAR  Padding1;
   UCHAR  LockAcquired;
@@ -4280,7 +4467,7 @@ struct _NDIS_MINIPORT_BLOCK {
   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];
@@ -4430,7 +4617,7 @@ typedef struct _NDIS_COMMON_OPEN_BLOCK {
   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;
@@ -4454,7 +4641,7 @@ typedef struct _NDIS_COMMON_OPEN_BLOCK {
 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;
@@ -4492,7 +4679,7 @@ DDKAPI
 NdisMAllocateMapRegisters(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN UINT  DmaChannel,
-  IN BOOLEAN  Dma32BitAddresses,
+  IN NDIS_DMA_SIZE  DmaSize,
   IN ULONG  PhysicalMapRegistersNeeded,
   IN ULONG  MaximumPhysicalMapping);
 
@@ -4587,7 +4774,7 @@ NdisMDeregisterIoPortRange(
                                 PacketSize)             \
 {                                                       \
     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
-        (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB), \
+               ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB,  \
                (MiniportReceiveContext), \
                (HeaderBuffer),           \
                (HeaderBuffer),           \
@@ -4677,7 +4864,7 @@ NdisMFreeMapRegisters(
 
 #define NdisMIndicateStatus(MiniportAdapterHandle,  \
    GeneralStatus, StatusBuffer, StatusBufferSize)   \
-  (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)(   \
+  (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)(   \
   MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
 
 /*
@@ -4761,8 +4948,37 @@ NdisMRegisterMiniport(
   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
@@ -5161,6 +5377,7 @@ typedef VOID (*REMOVE_ADAPTER_HANDLER)(
 typedef struct _NDIS_MAC_CHARACTERISTICS {
   UCHAR  MajorNdisVersion;
   UCHAR  MinorNdisVersion;
+  USHORT  Filler;
   UINT  Reserved;
   OPEN_ADAPTER_HANDLER  OpenAdapterHandler;
   CLOSE_ADAPTER_HANDLER  CloseAdapterHandler;
@@ -5178,8 +5395,6 @@ typedef struct _NDIS_MAC_CHARACTERISTICS {
 typedef        NDIS_MAC_CHARACTERISTICS        NDIS_WAN_MAC_CHARACTERISTICS;
 typedef        NDIS_WAN_MAC_CHARACTERISTICS    *PNDIS_WAN_MAC_CHARACTERISTICS;
 
-#pragma pack(pop)
-
 #ifdef __cplusplus
 }
 #endif