home *** CD-ROM | disk | FTP | other *** search
/ Team Palmtops 7 / Palmtops_numero07.iso / WinCE / SDKWindowsCE / AutoPC / apcsdk10.exe / data1.cab / Emulation_Include_Files / ndis.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-05-13  |  75.1 KB  |  2,554 lines

  1. /*++
  2. Copyright (c) 1996  Microsoft Corporation
  3.  
  4. Module Name:
  5.   ndis.h
  6.  
  7. Abstract:
  8.   This file defines the structures, macros, and functions available to NDIS
  9.   4.0 and above miniport drivers under CE.
  10.  
  11. --*/
  12.  
  13. #ifndef _NDIS_H_
  14. #define _NDIS_H_
  15.  
  16. #ifdef SHx
  17. #pragma warning(disable:4710)
  18. #endif
  19.  
  20. #if DEBUG
  21. #define DBG     1
  22. #else
  23. #undef DBG
  24. #endif
  25.  
  26. #ifndef NO_STRICT
  27. #ifndef STRICT
  28. #define STRICT  1
  29. #endif
  30. #endif
  31.  
  32. #include <windef.h>
  33. #include <types.h>
  34. #include <winbase.h>
  35. #include <memory.h>
  36. #include <ntcompat.h>
  37. #include <ntddndis.h>
  38. #include <netevent.h>
  39.  
  40. #if !defined(BINARY_COMPATIBLE)
  41. #if defined(NDIS_MINIPORT_DRIVER)
  42. #define BINARY_COMPATIBLE       1
  43. #else
  44. #define BINARY_COMPATIBLE       0
  45. #endif
  46. #endif
  47.  
  48. #if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
  49. #define DECLSPEC_IMPORT __declspec(dllimport)
  50. #define DECLSPEC_EXPORT __declspec(dllexport)
  51. #else
  52. #define DECLSPEC_IMPORT
  53. #define DECLSPEC_EXPORT
  54. #endif
  55.  
  56. #define NDISAPI WINAPI
  57.  
  58. #if BINARY_COMPATIBLE
  59. #if defined(NDIS_WRAPPER)
  60. #define EXPORT DECLSPEC_EXPORT
  61. #else
  62. #define EXPORT DECLSPEC_IMPORT
  63. #endif
  64. #else
  65. #define EXPORT
  66. #endif
  67.  
  68. #define NDIS_INIT_FUNCTION(_F) alloc_text(INIT,_F)
  69. #define NDIS_PAGABLE_FUNCTION(_F) alloc_text(PAGE,_F)
  70. #define NDIS_PAGEABLE_FUNCTION(_F) alloc_text(PAGE,_F)
  71.  
  72. #ifdef __cplusplus
  73. extern "C" {
  74. #endif
  75.  
  76. typedef struct _KDPC KDPC, *PKDPC;
  77. typedef struct _NDIS_MAC_BLOCK  NDIS_MAC_BLOCK, *PNDIS_MAC_BLOCK;
  78. typedef struct _NDIS_PACKET NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
  79. typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
  80. typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
  81. typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
  82. typedef struct _NDIS_M_OPEN_BLOCK NDIS_M_OPEN_BLOCK, *PNDIS_M_OPEN_BLOCK;
  83. typedef struct _NDIS_MINIPORT_INTERRUPT
  84.           NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
  85.  
  86. /* KSPIN_LOCK is already typedef-ed in winnt.h */
  87. #define KSPIN_LOCK      CRITICAL_SECTION
  88. typedef KSPIN_LOCK *PKSPIN_LOCK;
  89.  
  90. typedef
  91.   BOOLEAN
  92.   (NDISAPI *PFN_SYNCHRONIZE_ROUTINE)(
  93.     IN PVOID SynchronizeContext
  94.   );
  95.  
  96. typedef
  97.   VOID
  98.   (NDISAPI *PFN_KDEFERRED_ROUTINE)(
  99.     IN PVOID DeferredContext
  100.   );
  101.  
  102. #if (!defined(MIDL_PASS) || defined(__midl)) && (!defined(_M_IX86) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64))
  103. typedef __int64 LONGLONG;
  104. typedef unsigned __int64 ULONGLONG;
  105. #define MAXLONGLONG             (0x7fffffffffffffff)
  106. #else
  107. typedef double LONGLONG;
  108. typedef double ULONGLONG;
  109. #endif
  110.  
  111. typedef LONGLONG *PLONGLONG;
  112. typedef ULONGLONG *PULONGLONG;
  113.  
  114. typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
  115. typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
  116. typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
  117. typedef NTSTATUS NDIS_STATUS, *PNDIS_STATUS;
  118.  
  119. typedef enum _KINTERRUPT_MODE {
  120.           LevelSensitive,
  121.           Latched
  122.         } KINTERRUPT_MODE;
  123. #define NdisInterruptLatched            Latched
  124. #define NdisInterruptLevelSensitive     LevelSensitive
  125. typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
  126.  
  127. typedef struct _NDIS_BUFFER {
  128.           struct _NDIS_BUFFER *Next;
  129.           PVOID   VirtualAddress;
  130.           ULONG   BufferLength;
  131.         } NDIS_BUFFER, *PNDIS_BUFFER;
  132. typedef struct _KDPC {
  133.           SHORT                 Type;
  134.           UCHAR                 Number;
  135.           UCHAR                 Importance;
  136.           LIST_ENTRY            DpcListEntry;
  137.           PFN_KDEFERRED_ROUTINE DeferredRoutine;
  138.           PVOID                 DeferredContext;
  139.           PVOID                 SystemArgument1;
  140.           PVOID                 SystemArgument2;
  141.           PULONG                Lock;
  142.         } KDPC, *PKDPC;
  143.  
  144. typedef UCHAR KIRQL;
  145. typedef KIRQL *PKIRQL;
  146.  
  147. typedef struct _NDIS_SPIN_LOCK {
  148.           KSPIN_LOCK    SpinLock;
  149.         } NDIS_SPIN_LOCK, *PNDIS_SPIN_LOCK;
  150.  
  151. typedef struct _REFERENCE {
  152.           NDIS_SPIN_LOCK        SpinLock;
  153.           USHORT                ReferenceCount;
  154.           BOOLEAN               Closing;
  155.         } REFERENCE, *PREFERENCE;
  156.  
  157. typedef struct _MAP_REGISTER_ENTRY {
  158.           PVOID         MapRegister;
  159.           BOOLEAN       WriteToDevice;
  160.         } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
  161.  
  162. typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
  163. typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
  164.           NDIS_PHYSICAL_ADDRESS PhysicalAddress;
  165.           UINT                  Length;
  166.         } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
  167.  
  168. typedef struct _NDIS_PACKET_POOL {
  169.           NDIS_SPIN_LOCK        SpinLock;
  170.           PNDIS_PACKET          FreeList;
  171.           UINT                  PacketLength;
  172.           UCHAR                 Buffer[1];
  173.         } NDIS_PACKET_POOL, *PNDIS_PACKET_POOL;
  174.  
  175. typedef struct _NDIS_PACKET_PRIVATE {
  176.           UINT                  PhysicalCount;  /* number of physical pages */
  177.           UINT                  TotalLength;    /* amount of data */
  178.           PNDIS_BUFFER          Head;           /* first buffer in the chain */
  179.           PNDIS_BUFFER          Tail;           /* last buffer in the chain */
  180.                                                 /* if Head is NULL the chain
  181.                                                  * is empty; Tail doesn't have
  182.                                                  * to be NULL also */
  183.           PNDIS_PACKET_POOL     Pool;
  184.           UINT                  Count;
  185.           ULONG                 Flags;          // See fPACKET_xxx bits below
  186.           BOOLEAN               ValidCounts;
  187.           UCHAR                 NdisPacketFlags;
  188.           USHORT                NdisPacketOobOffset;
  189.         } NDIS_PACKET_PRIVATE, *PNDIS_PACKET_PRIVATE;
  190.  
  191. struct _NDIS_PACKET {
  192.   NDIS_PACKET_PRIVATE Private;
  193.   union {
  194.     struct {
  195.       UCHAR     MiniportReserved[8];
  196.       UCHAR     WrapperReserved[8];
  197.     };
  198.     struct {
  199.       UCHAR     MacReserved[16];
  200.     };
  201.   };
  202.   UCHAR         ProtocolReserved[1];
  203. };
  204.  
  205. typedef struct _NDIS_PACKET_PRIVATE_EXTENSION {
  206.           LIST_ENTRY    Link;
  207.           PNDIS_PACKET  Packet;
  208.           ULONG         Reserved;       /* make the structure quad aligned */
  209.         } NDIS_PACKET_PRIVATE_EXTENSION, *PNDIS_PACKET_PRIVATE_EXTENSION;
  210.  
  211. typedef enum _NDIS_INTERFACE_TYPE {
  212.           NdisInterfaceInternal = Internal,
  213.           NdisInterfaceIsa = Isa,
  214.           NdisInterfaceEisa = Eisa,
  215.           NdisInterfaceMca = MicroChannel,
  216.           NdisInterfaceTurboChannel = TurboChannel,
  217.           NdisInterfacePci = PCIBus,
  218.           NdisInterfacePcMcia = PCMCIABus
  219.         } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
  220.  
  221. typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
  222.  
  223. typedef enum _NDIS_REQUEST_TYPE {
  224.           NdisRequestQueryInformation,
  225.           NdisRequestSetInformation,
  226.           NdisRequestQueryStatistics,
  227.           NdisRequestOpen,              /* obsolete */
  228.           NdisRequestClose,             /* obsolete */
  229.           NdisRequestSend,              /* obsolete */
  230.           NdisRequestTransferData,      /* obsolete */
  231.           NdisRequestReset,             /* obsolete */
  232.           NdisRequestGeneric1,
  233.           NdisRequestGeneric2,
  234.           NdisRequestGeneric3,
  235.           NdisRequestGeneric4
  236.         } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
  237.  
  238. typedef struct _NDIS_REQUEST {
  239.           UCHAR                 MacReserved[16];
  240.           NDIS_REQUEST_TYPE     RequestType;
  241.           union _DATA {
  242.             struct _QUERY_INFORMATION {
  243.               NDIS_OID  Oid;
  244.               PVOID     InformationBuffer;
  245.               UINT      InformationBufferLength;
  246.               UINT      BytesWritten;
  247.               UINT      BytesNeeded;
  248.             } QUERY_INFORMATION;
  249.             struct _SET_INFORMATION {
  250.               NDIS_OID  Oid;
  251.               PVOID     InformationBuffer;
  252.               UINT      InformationBufferLength;
  253.               UINT      BytesRead;
  254.               UINT      BytesNeeded;
  255.             } SET_INFORMATION;
  256.           } DATA;
  257.         } NDIS_REQUEST, *PNDIS_REQUEST;
  258.  
  259. typedef enum _NDIS_WORK_ITEM_TYPE {
  260.           NdisWorkItemDpc,
  261.           NdisWorkItemResetRequested,
  262.           NdisWorkItemRequest,
  263.           NdisWorkItemSend,
  264.           NdisWorkItemHalt,
  265.           NdisWorkItemSendLoopback,
  266.           NdisWorkItemResetInProgress,
  267.           NdisWorkItemTimer,
  268.           NdisWorkItemPendingOpen,
  269.           NdisWorkItemMiniportCallback,
  270.           NdisMaxWorkItems
  271.         } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
  272.  
  273. typedef enum _NDIS_PARAMETER_TYPE {
  274.           NdisParameterInteger,
  275.           NdisParameterHexInteger,
  276.           NdisParameterString,
  277.           NdisParameterMultiString
  278.         } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
  279.  
  280. typedef struct _NDIS_CONFIGURATION_PARAMETER {
  281.           NDIS_PARAMETER_TYPE ParameterType;
  282.           union {
  283.             ULONG IntegerData;
  284.             NDIS_STRING StringData;
  285.           } ParameterData;
  286.         } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
  287.  
  288. typedef enum _NDIS_PROCESSOR_TYPE {
  289.           NdisProcessorX86,
  290.           NdisProcessorMips,
  291.           NdisProcessorAlpha,
  292.           NdisProcessorPpc
  293.         } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
  294.  
  295. typedef enum _NDIS_ENVIRONMENT_TYPE {
  296.           NdisEnvironmentWindows,
  297.           NdisEnvironmentWindowsNt,
  298.           NdisEnvironmentWindowsCe
  299.         } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
  300.  
  301. typedef struct _KEVENT {
  302.           HANDLE        Event;
  303.           UCHAR         Dummy[8];
  304.         } KEVENT, *PKEVENT;
  305.  
  306. typedef struct _KINTERRUPT *PKINTERRUPT;
  307.  
  308. typedef struct _KTIMER {
  309.           UCHAR               Dummy[12];
  310.           ULARGE_INTEGER      DueTime;
  311.           LIST_ENTRY          TimerListEntry;
  312.           PKDPC               Dpc;
  313.           LONG                Period;
  314.         } KTIMER, *PKTIMER;
  315.  
  316. typedef struct _NDIS_PACKET_OOB_DATA {
  317.           union {
  318.             ULONGLONG   TimeToSend;
  319.             ULONGLONG   TimeSent;
  320.           };
  321.           ULONGLONG     TimeReceived;
  322.           UINT          HeaderSize;
  323.           UINT          SizeMediaSpecificInfo;
  324.           PVOID         MediaSpecificInformation;
  325.           NDIS_STATUS   Status;
  326.         } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
  327.  
  328. #define NUMBER_OF_WORK_ITEM_TYPES       NdisMaxWorkItems
  329. #define NUMBER_OF_SINGLE_WORK_ITEMS     6
  330. #define NDIS_M_MAX_MULTI_LIST           32
  331.  
  332. /* minimum size of packets a miniport must allocate when it indicates packets
  333.  * via NdisMIndicatePacket or NdisMCoIndicatePacket */
  334. #define PROTOCOL_RESERVED_SIZE_IN_PACKET        16
  335.  
  336. #include <afilter.h>
  337. #include <efilter.h>
  338. #include <tfilter.h>
  339. #include <ffilter.h>
  340.  
  341. typedef
  342.   VOID
  343.   (*PFN_FILTER_PACKET_INDICATION_HANDLER)(
  344.     IN NDIS_HANDLE Miniport,
  345.     IN PPNDIS_PACKET PacketArray,
  346.     IN UINT NumberOfPackets
  347.   );
  348.  
  349. typedef
  350.   VOID
  351.   (NDISAPI *ADAPTER_SHUTDOWN_HANDLER)(
  352.     IN PVOID ShutdownContext
  353.   );
  354.  
  355. typedef
  356.   VOID
  357.   (NDISAPI *PNDIS_TIMER_FUNCTION)(
  358.     IN PVOID SystemSpecific1,
  359.     IN PVOID FunctionContext,
  360.     IN PVOID SystemSpecific2,
  361.     IN PVOID SystemSpecific3
  362.   );
  363.  
  364. typedef
  365.   VOID
  366.   (NDISAPI *NDIS_M_SEND_COMPLETE_HANDLER)(
  367.     IN NDIS_HANDLE MiniportAdapterHandle,
  368.     IN PNDIS_PACKET Packet,
  369.     IN NDIS_STATUS Status
  370.   );
  371.  
  372. typedef
  373.   VOID
  374.   (*NDIS_M_SEND_RESOURCES_HANDLER)(
  375.     IN NDIS_HANDLE MiniportAdapterHandle
  376.   );
  377.  
  378. typedef
  379.   VOID
  380.   (*NDIS_M_RESET_COMPLETE_HANDLER)(
  381.     IN NDIS_HANDLE MiniportAdapterHandle,
  382.     IN NDIS_STATUS Status,
  383.     IN BOOLEAN AddressingReset
  384.   );
  385.  
  386. typedef
  387.   VOID
  388.   (*NDIS_M_PROCESS_DEFERRED)(
  389.     IN PNDIS_MINIPORT_BLOCK Miniport
  390.   );
  391.  
  392. typedef
  393.   NDIS_STATUS
  394.   (*NDIS_M_QUEUE_WORK_ITEM)(
  395.     IN PNDIS_MINIPORT_BLOCK Miniport,
  396.     IN NDIS_WORK_ITEM_TYPE WorkItemType,
  397.     IN PVOID WorkItemContext1,
  398.     IN PVOID WorkItemContext2
  399.   );
  400.  
  401. typedef
  402.   NDIS_STATUS
  403.   (*NDIS_M_QUEUE_NEW_WORK_ITEM)(
  404.     IN PNDIS_MINIPORT_BLOCK Miniport,
  405.     IN NDIS_WORK_ITEM_TYPE WorkItemType,
  406.     IN PVOID WorkItemContext1,
  407.     IN PVOID WorkItemContext2
  408.   );
  409.  
  410. typedef
  411.   VOID
  412.   (*NDIS_M_DEQUEUE_WORK_ITEM)(
  413.     IN PNDIS_MINIPORT_BLOCK Miniport,
  414.     IN  NDIS_WORK_ITEM_TYPE WorkItemType,
  415.     OUT PVOID *WorkItemContext1,
  416.     OUT PVOID *WorkItemContext2
  417.   );
  418.  
  419. /* function types for NDIS_MINIPORT_CHARACTERISTICS */
  420. typedef
  421.   VOID
  422.   (NDISAPI *RECEIVE_COMPLETE_HANDLER)(
  423.     IN NDIS_HANDLE ProtocolBindingContext
  424.   );
  425.  
  426. typedef
  427.   BOOLEAN
  428.   (NDISAPI *W_CHECK_FOR_HANG_HANDLER)(
  429.     IN NDIS_HANDLE MiniportAdapterContext
  430.   );
  431.  
  432. typedef
  433.   VOID
  434.   (NDISAPI *W_DISABLE_INTERRUPT_HANDLER)(
  435.     IN NDIS_HANDLE MiniportAdapterContext
  436.   );
  437.  
  438. typedef
  439.   VOID
  440.   (NDISAPI *W_ENABLE_INTERRUPT_HANDLER)(
  441.     IN NDIS_HANDLE MiniportAdapterContext
  442.   );
  443.  
  444. typedef
  445.   VOID
  446.   (NDISAPI *W_HALT_HANDLER)(
  447.     IN NDIS_HANDLE MiniportAdapterContext
  448.   );
  449.  
  450. typedef
  451.   VOID
  452.   (NDISAPI *W_HANDLE_INTERRUPT_HANDLER)(
  453.     IN NDIS_HANDLE MiniportAdapterContext
  454.   );
  455.  
  456. typedef
  457.   NDIS_STATUS
  458.   (NDISAPI *W_INITIALIZE_HANDLER)(
  459.     OUT PNDIS_STATUS OpenErrorStatus,
  460.     OUT PUINT SelectedMediumIndex,
  461.     IN PNDIS_MEDIUM MediumArray,
  462.     IN UINT MediumArraySize,
  463.     IN NDIS_HANDLE MiniportAdapterContext,
  464.     IN NDIS_HANDLE WrapperConfigurationContext
  465.   );
  466.  
  467. typedef
  468.   VOID
  469.   (NDISAPI *W_ISR_HANDLER)(
  470.     OUT PBOOLEAN InterruptRecognized,
  471.     OUT PBOOLEAN QueueMiniportHandleInterrupt,
  472.     IN NDIS_HANDLE MiniportAdapterContext
  473.   );
  474.  
  475. typedef
  476.   NDIS_STATUS
  477.   (NDISAPI *W_QUERY_INFORMATION_HANDLER)(
  478.     IN NDIS_HANDLE MiniportAdapterContext,
  479.     IN NDIS_OID Oid,
  480.     IN PVOID InformationBuffer,
  481.     IN ULONG InformationBufferLength,
  482.     OUT PULONG BytesWritten,
  483.     OUT PULONG BytesNeeded
  484.   );
  485.  
  486. typedef
  487.   NDIS_STATUS
  488.   (NDISAPI *W_RECONFIGURE_HANDLER)(
  489.     OUT PNDIS_STATUS OpenErrorStatus,
  490.     IN NDIS_HANDLE MiniportAdapterContext,
  491.     IN NDIS_HANDLE WrapperConfigurationContext
  492.   );
  493.  
  494. typedef
  495.   NDIS_STATUS
  496.   (NDISAPI *W_RESET_HANDLER)(
  497.     OUT PBOOLEAN AddressingReset,
  498.     IN NDIS_HANDLE MiniportAdapterContext
  499.   );
  500.  
  501. typedef
  502.   NDIS_STATUS
  503.   (NDISAPI *W_SEND_HANDLER)(
  504.     IN NDIS_HANDLE  MiniportAdapterContext,
  505.     IN PNDIS_PACKET Packet,
  506.     IN UINT Flags
  507.   );
  508.  
  509. typedef
  510.   NDIS_STATUS
  511.   (NDISAPI *W_SET_INFORMATION_HANDLER)(
  512.     IN NDIS_HANDLE MiniportAdapterContext,
  513.     IN NDIS_OID Oid,
  514.     IN PVOID InformationBuffer,
  515.     IN ULONG InformationBufferLength,
  516.     OUT PULONG BytesRead,
  517.     OUT PULONG BytesNeeded
  518.   );
  519.  
  520. typedef
  521.   NDIS_STATUS
  522.   (NDISAPI *W_TRANSFER_DATA_HANDLER)(
  523.     OUT PNDIS_PACKET Packet,
  524.     OUT PUINT BytesTransferred,
  525.     IN NDIS_HANDLE MiniportAdapterContext,
  526.     IN NDIS_HANDLE MiniportReceiveContext,
  527.     IN UINT ByteOffset,
  528.     IN UINT BytesToTransfer
  529.   );
  530.  
  531. typedef
  532.   VOID
  533.   (NDISAPI *W_RETURN_PACKET_HANDLER)(
  534.     IN NDIS_HANDLE MiniportAdapterContext,
  535.     IN PNDIS_PACKET Packet
  536.   );
  537.  
  538. typedef
  539.   VOID
  540.   (NDISAPI *W_SEND_PACKETS_HANDLER)(
  541.     IN NDIS_HANDLE MiniportAdapterContext,
  542.     IN PPNDIS_PACKET PacketArray,
  543.     IN UINT NumberOfPackets
  544.   );
  545.  
  546. typedef
  547.   VOID
  548.   (NDISAPI *W_ALLOCATE_COMPLETE_HANDLER)(
  549.     IN NDIS_HANDLE MiniportAdapterContext,
  550.     IN PVOID VirtualAddress,
  551.     IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
  552.     IN ULONG Length,
  553.     IN PVOID Context
  554.   );
  555.  
  556. typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
  557.           UCHAR                         MajorNdisVersion;
  558.           UCHAR                         MinorNdisVersion;
  559.           UINT                          Flags;
  560.           W_CHECK_FOR_HANG_HANDLER      CheckForHangHandler;
  561.           W_DISABLE_INTERRUPT_HANDLER   DisableInterruptHandler;
  562.           W_ENABLE_INTERRUPT_HANDLER    EnableInterruptHandler;
  563.           W_HALT_HANDLER                HaltHandler;
  564.           W_HANDLE_INTERRUPT_HANDLER    HandleInterruptHandler;
  565.           W_INITIALIZE_HANDLER          InitializeHandler;
  566.           W_ISR_HANDLER                 ISRHandler;
  567.           W_QUERY_INFORMATION_HANDLER   QueryInformationHandler;
  568.           W_RECONFIGURE_HANDLER         ReconfigureHandler;
  569.           W_RESET_HANDLER               ResetHandler;
  570.           W_SEND_HANDLER                SendHandler;
  571.           W_SET_INFORMATION_HANDLER     SetInformationHandler;
  572.           W_TRANSFER_DATA_HANDLER       TransferDataHandler;
  573.           W_RETURN_PACKET_HANDLER       ReturnPacketHandler;
  574.           W_SEND_PACKETS_HANDLER        SendPacketsHandler;
  575.           W_ALLOCATE_COMPLETE_HANDLER   AllocateCompleteHandler;
  576.         } NDIS40_MINIPORT_CHARACTERISTICS;
  577.  
  578. typedef NDIS40_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
  579. typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;
  580.  
  581. /* function types for NDIS_PROTOCOL_CHARACTERISTICS */
  582. typedef
  583.   VOID
  584.   (NDISAPI *OPEN_ADAPTER_COMPLETE_HANDLER)(
  585.     IN NDIS_HANDLE ProtocolBindingContext,
  586.     IN NDIS_STATUS Status,
  587.     IN NDIS_STATUS OpenErrorStatus
  588.   );
  589.  
  590. typedef
  591.   VOID
  592.   (NDISAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)(
  593.     IN NDIS_HANDLE ProtocolBindingContext,
  594.     IN NDIS_STATUS Status
  595.   );
  596.  
  597. typedef
  598.   VOID
  599.   (NDISAPI *SEND_COMPLETE_HANDLER)(
  600.     IN NDIS_HANDLE ProtocolBindingContext,
  601.     IN PNDIS_PACKET Packet,
  602.     IN NDIS_STATUS Status
  603.   );
  604.  
  605. typedef
  606.   VOID
  607.   (NDISAPI *TRANSFER_DATA_COMPLETE_HANDLER)(
  608.     IN NDIS_HANDLE ProtocolBindingContext,
  609.     IN PNDIS_PACKET Packet,
  610.     IN NDIS_STATUS Status,
  611.     IN UINT BytesTransferred
  612.   );
  613.  
  614. typedef
  615.   VOID
  616.   (NDISAPI *RESET_COMPLETE_HANDLER)(
  617.     IN NDIS_HANDLE ProtocolBindingContext,
  618.     IN NDIS_STATUS Status
  619.   );
  620.  
  621. typedef
  622.   VOID
  623.   (NDISAPI *REQUEST_COMPLETE_HANDLER)(
  624.     IN NDIS_HANDLE ProtocolBindingContext,
  625.     IN PNDIS_REQUEST NdisRequest,
  626.     IN NDIS_STATUS Status
  627.   );
  628.  
  629. typedef
  630.   NDIS_STATUS
  631.   (NDISAPI *RECEIVE_HANDLER)(
  632.     IN NDIS_HANDLE ProtocolBindingContext,
  633.     IN NDIS_HANDLE MacReceiveContext,
  634.     IN PVOID HeaderBuffer,
  635.     IN UINT HeaderBufferSize,
  636.     IN PVOID LookAheadBuffer,
  637.     IN UINT LookaheadBufferSize,
  638.     IN UINT PacketSize
  639.   );
  640.  
  641. typedef
  642.   VOID
  643.   (NDISAPI *RECEIVE_COMPLETE_HANDLER)(
  644.     IN NDIS_HANDLE ProtocolBindingContext
  645.   );
  646.  
  647. typedef
  648.   VOID
  649.   (NDISAPI *STATUS_HANDLER)(
  650.     IN NDIS_HANDLE ProtocolBindingContext,
  651.     IN NDIS_STATUS GeneralStatus,
  652.     IN PVOID StatusBuffer,
  653.     IN UINT StatusBufferSize
  654.   );
  655.  
  656. typedef
  657.   VOID
  658.   (NDISAPI *STATUS_COMPLETE_HANDLER)(
  659.     IN NDIS_HANDLE ProtocolBindingContext
  660.   );
  661.  
  662. typedef
  663.   INT
  664.   (NDISAPI *RECEIVE_PACKET_HANDLER)(
  665.     IN NDIS_HANDLE ProtocolBindingContext,
  666.     IN PNDIS_PACKET Packet
  667.   );
  668.  
  669. typedef
  670.   VOID
  671.   (NDISAPI *BIND_HANDLER)(
  672.     OUT PNDIS_STATUS Status,
  673.     IN NDIS_HANDLE BindContext,
  674.     IN PNDIS_STRING DeviceName,
  675.     IN PVOID SystemSpecific1,
  676.     IN PVOID SystemSpecific2
  677.   );
  678.  
  679. typedef
  680.   VOID
  681.   (NDISAPI *UNBIND_HANDLER)(
  682.     OUT PNDIS_STATUS Status,
  683.     IN NDIS_HANDLE ProtocolBindingContext,
  684.     IN NDIS_HANDLE UnbindContext
  685.   );
  686.  
  687. typedef
  688.   VOID
  689.   (NDISAPI *TRANSLATE_HANDLER)(
  690.     OUT PNDIS_STATUS Status,
  691.     IN NDIS_HANDLE ProtocolBindingContext,
  692.     OUT PNET_PNP_ID IdList,
  693.     IN ULONG IdListLength,
  694.     OUT PULONG BytesReturned
  695.   );
  696.  
  697. typedef
  698.   VOID
  699.   (NDISAPI *UNLOAD_PROTOCOL_HANDLER)(VOID);
  700.  
  701. typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
  702.           UCHAR                         MajorNdisVersion;
  703.           UCHAR                         MinorNdisVersion;
  704.           UINT                          Reserved;
  705.           OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
  706.           CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
  707.           SEND_COMPLETE_HANDLER         SendCompleteHandler;
  708.           TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
  709.           RESET_COMPLETE_HANDLER        ResetCompleteHandler;
  710.           REQUEST_COMPLETE_HANDLER      RequestCompleteHandler;
  711.           RECEIVE_HANDLER               ReceiveHandler;
  712.           RECEIVE_COMPLETE_HANDLER      ReceiveCompleteHandler;
  713.           STATUS_HANDLER                StatusHandler;
  714.           STATUS_COMPLETE_HANDLER       StatusCompleteHandler;
  715.           NDIS_STRING                   Name;
  716.           RECEIVE_PACKET_HANDLER        ReceivePacketHandler;
  717.           BIND_HANDLER                  BindAdapterHandler;
  718.           UNBIND_HANDLER                UnbindAdapterHandler;
  719.           TRANSLATE_HANDLER             TranslateHandler;
  720.           UNLOAD_PROTOCOL_HANDLER       UnloadHandler;
  721.         } NDIS40_PROTOCOL_CHARACTERISTICS;
  722.  
  723. typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
  724. typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
  725.  
  726. /* full mac driver specific */
  727. typedef struct _NDIS_TIMER {
  728.           KTIMER Timer;
  729.           KDPC Dpc;
  730.         } NDIS_TIMER, *PNDIS_TIMER;
  731.  
  732. /* function types for NDIS_MAC_CHARACTERISTICS */
  733. typedef
  734.   NDIS_STATUS
  735.   (*OPEN_ADAPTER_HANDLER)(
  736.     OUT PNDIS_STATUS OpenErrorStatus,
  737.     OUT NDIS_HANDLE *MacBindingHandle,
  738.     OUT PUINT SelectedMediumIndex,
  739.     IN PNDIS_MEDIUM MediumArray,
  740.     IN UINT MediumArraySize,
  741.     IN NDIS_HANDLE NdisBindingContext,
  742.     IN NDIS_HANDLE MacAdapterContext,
  743.     IN UINT OpenOptions,
  744.     IN PSTRING AddressingInformation OPTIONAL
  745.   );
  746.  
  747. typedef
  748.   NDIS_STATUS
  749.   (*CLOSE_ADAPTER_HANDLER)(
  750.     IN NDIS_HANDLE MacBindingHandle
  751.   );
  752.  
  753. typedef
  754.   NDIS_STATUS
  755.   (*SEND_HANDLER)(
  756.     IN NDIS_HANDLE MacBindingHandle,
  757.     IN PNDIS_PACKET Packet
  758.   );
  759.  
  760. typedef
  761.   NDIS_STATUS
  762.   (*TRANSFER_DATA_HANDLER)(
  763.     IN NDIS_HANDLE MacBindingHandle,
  764.     IN NDIS_HANDLE MacReceiveContext,
  765.     IN UINT ByteOffset,
  766.     IN UINT BytesToTransfer,
  767.     OUT PNDIS_PACKET Packet,
  768.     OUT PUINT BytesTransferred
  769.   );
  770.  
  771. typedef
  772.   NDIS_STATUS
  773.   (*RESET_HANDLER)(
  774.     IN NDIS_HANDLE MacBindingHandle
  775.   );
  776.  
  777. typedef
  778.   NDIS_STATUS
  779.   (*REQUEST_HANDLER)(
  780.     IN NDIS_HANDLE MacBindingHandle,
  781.     IN PNDIS_REQUEST NdisRequest
  782.   );
  783.  
  784. typedef
  785.   NDIS_STATUS
  786.   (*QUERY_GLOBAL_STATISTICS_HANDLER)(
  787.     IN NDIS_HANDLE MacAdapterContext,
  788.     IN PNDIS_REQUEST NdisRequest
  789.   );
  790.  
  791. typedef
  792.   VOID
  793.   (*UNLOAD_MAC_HANDLER)(
  794.     IN NDIS_HANDLE MacMacContext
  795.   );
  796.  
  797. typedef
  798.   NDIS_STATUS
  799.   (*ADD_ADAPTER_HANDLER)(
  800.     IN NDIS_HANDLE MacMacContext,
  801.     IN NDIS_HANDLE WrapperConfigurationContext,
  802.     IN PNDIS_STRING AdapterName
  803.   );
  804.  
  805. typedef
  806.   VOID
  807.   (*REMOVE_ADAPTER_HANDLER)(
  808.     IN NDIS_HANDLE MacAdapterContext
  809.   );
  810.  
  811. typedef
  812.   VOID
  813.   (*SEND_PACKETS_HANDLER)(
  814.     IN NDIS_HANDLE MiniportAdapterContext,
  815.     IN PPNDIS_PACKET PacketArray,
  816.     IN UINT NumberOfPackets
  817.   );
  818.  
  819. typedef struct _NDIS_MAC_CHARACTERISTICS {
  820.           UCHAR                 MajorNdisVersion;
  821.           UCHAR                 MinorNdisVersion;
  822.           UINT                  Reserved;
  823.           OPEN_ADAPTER_HANDLER  OpenAdapterHandler;
  824.           CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
  825.           SEND_HANDLER          SendHandler;
  826.           TRANSFER_DATA_HANDLER TransferDataHandler;
  827.           RESET_HANDLER         ResetHandler;
  828.           REQUEST_HANDLER       RequestHandler;
  829.           QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
  830.           UNLOAD_MAC_HANDLER    UnloadMacHandler;
  831.           ADD_ADAPTER_HANDLER   AddAdapterHandler;
  832.           REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
  833.           NDIS_STRING           Name;
  834.         } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
  835.  
  836. typedef struct _NDIS_WRAPPER_HANDLE {
  837.           PDRIVER_OBJECT        NdisWrapperDriver;
  838.           HANDLE                NdisWrapperConfigurationHandle;
  839.         } NDIS_WRAPPER_HANDLE, *PNDIS_WRAPPER_HANDLE;
  840.  
  841. struct _NDIS_MAC_BLOCK {
  842.   NDIS_HANDLE                   AdapterQueue;
  843.   NDIS_HANDLE                   MacMacContext;
  844.   REFERENCE                     Ref;
  845.   UINT                          Length;
  846.   NDIS_MAC_CHARACTERISTICS      MacCharacteristics;
  847.   PNDIS_WRAPPER_HANDLE          NdisMacInfo;
  848.   PNDIS_MAC_BLOCK               NextMac;
  849.   KEVENT                        AdaptersRemovedEvent;
  850.   BOOLEAN                       Unloading;
  851.   PCM_RESOURCE_LIST             PciAssignedResources;
  852.   UNICODE_STRING                BaseName;
  853. };
  854.  
  855. struct _NDIS_MINIPORT_BLOCK {
  856.   ULONG                 NullValue;      /* to distinguish between MAC and
  857.                                            miniport */
  858.   PDEVICE_OBJECT        DeviceObject;   /* created by the wrapper */
  859.   PNDIS_M_DRIVER_BLOCK  DriverHandle;   /* pointer to the driver block */
  860.   NDIS_HANDLE           MiniportAdapterContext; /* miniport context */
  861.   NDIS_STRING           MiniportName;   /* how miniport refers to us */
  862.   PNDIS_M_OPEN_BLOCK    OpenQueue;      /* queue of opens for this miniport */
  863.   PNDIS_MINIPORT_BLOCK  NextMiniport;   /* used by driver's MiniportQueue */
  864.   REFERENCE             Ref;            /* contains spinlock for OpenQueue */
  865.   BOOLEAN               padding1;       /* normal ints:  DO NOT REMOVE! */
  866.   BOOLEAN               padding2;       /* processing def: DO NOT REMOVE! */
  867.  
  868.   //
  869.   // Synchronization stuff.
  870.   //
  871.   // The boolean is used to lock out several DPCs from running at the
  872.   // same time. The difficultly is if DPC A releases the spin lock
  873.   // and DPC B tries to run, we want to defer B until after A has
  874.   // exited.
  875.   //
  876.   BOOLEAN               LockAcquired;  // EXPOSED via macros. Do not move
  877.   UCHAR                 PmodeOpens;    // Count of opens which turned on pmode/all_local
  878.  
  879.   NDIS_SPIN_LOCK        Lock;
  880.  
  881.   PNDIS_MINIPORT_INTERRUPT      Interrupt;
  882.  
  883.   ULONG                 Flags;      // flags to keep track of the miniport's state.
  884.  
  885.   //
  886.   //Work that the miniport needs to do.
  887.   //
  888.   KSPIN_LOCK            WorkLock;
  889.   SINGLE_LIST_ENTRY     WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
  890.   SINGLE_LIST_ENTRY     WorkItemFreeQueue;
  891.  
  892.   //
  893.   // Stuff that got deferred.
  894.   //
  895.   KDPC                  Dpc;
  896.   NDIS_TIMER            WakeUpDpcTimer;
  897.  
  898.   //
  899.   // Holds media specific information.
  900.   //
  901.   PETH_FILTER           EthDB;    // EXPOSED via macros. Do not move
  902.   PTR_FILTER            TrDB;    // EXPOSED via macros. Do not move
  903.   PFDDI_FILTER          FddiDB;    // EXPOSED via macros. Do not move
  904.   PARC_FILTER           ArcDB;    // EXPOSED via macros. Do not move
  905.  
  906.   PFN_FILTER_PACKET_INDICATION_HANDLER      PacketIndicateHandler;
  907.   NDIS_M_SEND_COMPLETE_HANDLER          SendCompleteHandler;
  908.   NDIS_M_SEND_RESOURCES_HANDLER         SendResourcesHandler;
  909.   NDIS_M_RESET_COMPLETE_HANDLER         ResetCompleteHandler;
  910.  
  911.   PVOID                 WrapperContext;
  912.   NDIS_MEDIUM           MediaType;
  913.  
  914.   //
  915.   // contains mini-port information
  916.   //
  917.   ULONG                 BusNumber;
  918.   NDIS_INTERFACE_TYPE   BusType;
  919.   NDIS_INTERFACE_TYPE   AdapterType;
  920.  
  921.   //
  922.   // Holds the map registers for this mini-port.
  923.   //
  924.   ULONG                 PhysicalMapRegistersNeeded;
  925.   ULONG                 MaximumPhysicalMapping;
  926.   PMAP_REGISTER_ENTRY   MapRegisters;  // EXPOSED via macros. Do not move
  927.  
  928.   //
  929.   //  WorkItem routines that can change depending on whether we
  930.   //  are fullduplex or not.
  931.   //
  932.   NDIS_M_PROCESS_DEFERRED       ProcessDeferredHandler;
  933.   NDIS_M_QUEUE_WORK_ITEM        QueueWorkItemHandler;
  934.   NDIS_M_QUEUE_NEW_WORK_ITEM    QueueNewWorkItemHandler;
  935.   NDIS_M_DEQUEUE_WORK_ITEM      DeQueueWorkItemHandler;
  936.  
  937.   PNDIS_TIMER           DeferredTimer;
  938.  
  939.   //
  940.   // Resource information
  941.   //
  942.   PCM_RESOURCE_LIST     Resources;
  943.  
  944.   //
  945.   //  This pointer is reserved. Used for debugging
  946.   //
  947.   PVOID                 Reserved;
  948.  
  949. //  PADAPTER_OBJECT       SystemAdapterObject;
  950.  
  951.   SINGLE_LIST_ENTRY     SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
  952.  
  953.   //
  954.   //  For efficiency
  955.   //
  956.   W_HANDLE_INTERRUPT_HANDLER    HandleInterruptHandler;
  957.   W_DISABLE_INTERRUPT_HANDLER   DisableInterruptHandler;
  958.   W_ENABLE_INTERRUPT_HANDLER    EnableInterruptHandler;
  959.   W_SEND_PACKETS_HANDLER        SendPacketsHandler;
  960. //  NDIS_M_START_SENDS            DeferredSendHandler;
  961.  
  962.   /* Stuff above is potentially accessed by macros. Add stuff below */
  963.  
  964.   UCHAR                 TrResetRing;
  965.   UCHAR                 ArcnetAddress;
  966.  
  967.   //
  968.   //  This is the processor number that the miniport's
  969.   //  interrupt DPC and timers are running on.
  970.   //
  971.   UCHAR                 AssignedProcessor;
  972.  
  973.   NDIS_HANDLE           ArcnetBufferPool;
  974.   PARC_BUFFER_LIST      ArcnetFreeBufferList;
  975.   PARC_BUFFER_LIST      ArcnetUsedBufferList;
  976.   PUCHAR                ArcnetLookaheadBuffer;
  977.   UINT                  CheckForHangTimeout;
  978.  
  979.   //
  980.   // These two are used temporarily while allocating the map registers.
  981.   //
  982.   KEVENT                AllocationEvent;
  983.   UINT                  CurrentMapRegister;
  984.  
  985.   //
  986.   // Send information
  987.   //
  988.   NDIS_SPIN_LOCK        SendLock;
  989.   ULONG                 SendFlags;      // Flags for send path.
  990.   PNDIS_PACKET          FirstPacket;    // This pointer serves two purposes;
  991.                           // it is the head of the queue of ALL
  992.                           // packets that have been sent to
  993.                           // the miniport, it is also the head
  994.                           // of the packets that have been sent
  995.                           // down to the miniport by the wrapper.
  996.   PNDIS_PACKET          LastPacket;      // This is tail pointer for the global
  997.                           // packet queue and this is the tail
  998.                           // pointer to the queue of packets
  999.                           // waiting to be sent to the miniport.
  1000.   PNDIS_PACKET          FirstPendingPacket; // This is head of the queue of packets
  1001.                           // waiting to be sent to miniport.
  1002.   PNDIS_PACKET          LastMiniportPacket; // This is the tail pointer of the
  1003.                           // queue of packets that have been
  1004.                           // sent to the miniport by the wrapper.
  1005.  
  1006.   PNDIS_PACKET          LoopbackHead;    // Head of loopback queue.
  1007.   PNDIS_PACKET          LoopbackTail;    // Tail of loopback queue.
  1008.  
  1009.   ULONG                 SendResourcesAvailable;
  1010.   PPNDIS_PACKET         PacketArray;
  1011.   UINT                  MaximumSendPackets;
  1012.  
  1013.   //
  1014.   // Transfer data information
  1015.   //
  1016.   PNDIS_PACKET          FirstTDPacket;
  1017.   PNDIS_PACKET          LastTDPacket;
  1018.   PNDIS_PACKET          LoopbackPacket;
  1019.  
  1020.   //
  1021.   // Reset information
  1022.   //
  1023.   NDIS_STATUS           ResetStatus;
  1024.  
  1025.   //
  1026.   // RequestInformation
  1027.   //
  1028.   PNDIS_REQUEST         PendingRequest;
  1029.   PNDIS_REQUEST         MiniportRequest;
  1030.   NDIS_STATUS           RequestStatus;
  1031.   UINT                  MaximumLongAddresses;
  1032.   UINT                  MaximumShortAddresses;
  1033.   UINT                  CurrentLookahead;
  1034.   UINT                  MaximumLookahead;
  1035.   UINT                  MacOptions;
  1036.  
  1037.   KEVENT                RequestEvent;
  1038.   UCHAR                 MulticastBuffer[NDIS_M_MAX_MULTI_LIST][6];
  1039.  
  1040.   //
  1041.   // Temp stuff for using the old NDIS functions
  1042.   //
  1043.   ULONG                 ChannelNumber;
  1044.   UINT                  NumberOfAllocatedWorkItems;
  1045. //  PNDIS_LOG             Log;
  1046.  
  1047.   // Needed for PnP. Upcased version. The buffer is allocated as part of the
  1048.   // NDIS_MINIPORT_BLOCK itself.
  1049.   UNICODE_STRING        BaseName;
  1050. };
  1051.  
  1052. struct _NDIS_M_DRIVER_BLOCK {
  1053.   PNDIS_MINIPORT_BLOCK          MiniportQueue;
  1054.   NDIS_HANDLE                   MiniportIdField;
  1055.   REFERENCE                     Ref;
  1056.   UINT                          Length;
  1057.   NDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics;
  1058.   PNDIS_WRAPPER_HANDLE          NdisDriverInfo;
  1059.   PNDIS_M_DRIVER_BLOCK          NextDriver;
  1060.   PNDIS_MAC_BLOCK               FakeMac;
  1061.   KEVENT                        MiniportsRemovedEvent;
  1062.   BOOLEAN                       Unloading;
  1063.   UNICODE_STRING                BaseName;
  1064. };
  1065.  
  1066. typedef struct _NDIS_PROTOCOL_FILTER {
  1067.           struct _NDIS_PROTOCOL_FILTER  *Next;
  1068.           RECEIVE_HANDLER               ReceiveHandler;
  1069.           USHORT                        Offset;
  1070.           USHORT                        Size;
  1071.           NDIS_MEDIUM                   Medium;
  1072.         } NDIS_PROTOCOL_FILTER, *PNDIS_PROTOCOL_FILTER;
  1073.  
  1074. typedef struct _NDIS_PROTOCOL_BLOCK {
  1075.           PNDIS_OPEN_BLOCK              OpenQueue;
  1076.           REFERENCE                     Ref;
  1077.           UINT                          Length;
  1078.           NDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics;
  1079.           struct _NDIS_PROTOCOL_BLOCK   *NextProtocol;
  1080.           ULONG                         MaxPatternSize;
  1081.           PNDIS_PROTOCOL_FILTER         ProtocolFilter;
  1082.         } NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
  1083.  
  1084. struct _NDIS_OPEN_BLOCK {
  1085.   PNDIS_MAC_BLOCK               MacHandle;
  1086.   NDIS_HANDLE                   MacBindingHandle;
  1087.   NDIS_HANDLE                   AdapterHandle;
  1088.   PNDIS_PROTOCOL_BLOCK          ProtocolHandle;
  1089.   NDIS_HANDLE                   ProtocolBindingContext;
  1090.   PNDIS_OPEN_BLOCK              AdapterNextOpen;
  1091.   PNDIS_OPEN_BLOCK              ProtocolNextOpen;
  1092. //  PFILE_OBJECT                  FileObject;
  1093.   BOOLEAN                       Closing;
  1094.   BOOLEAN                       Unloading;
  1095.   NDIS_HANDLE                   CloseRequestHandle;
  1096.   KSPIN_LOCK                    SpinLock;
  1097.   PNDIS_OPEN_BLOCK              NextGlobalOpen;
  1098.  
  1099.   SEND_HANDLER                  SendHandler;
  1100.   TRANSFER_DATA_HANDLER         TransferDataHandler;
  1101.  
  1102.   SEND_COMPLETE_HANDLER         SendCompleteHandler;
  1103.   TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
  1104.   RECEIVE_HANDLER               ReceiveHandler;
  1105.   RECEIVE_COMPLETE_HANDLER      ReceiveCompleteHandler;
  1106.  
  1107.   RECEIVE_HANDLER               PostNt31ReceiveHandler;
  1108.   RECEIVE_COMPLETE_HANDLER      PostNt31ReceiveCompleteHandler;
  1109.  
  1110.   RECEIVE_PACKET_HANDLER        ReceivePacketHandler;
  1111. //  SEND_PACKETS_HANDLER          SendPacketsHandler;
  1112.  
  1113.   UNICODE_STRING                AdapterName;
  1114. };
  1115.  
  1116. struct _NDIS_M_OPEN_BLOCK {
  1117.   PNDIS_M_DRIVER_BLOCK          DriverHandle;
  1118.   PNDIS_MINIPORT_BLOCK          MiniportHandle;
  1119.   PNDIS_PROTOCOL_BLOCK          ProtocolHandle;
  1120.   PNDIS_OPEN_BLOCK              FakeOpen;
  1121.   NDIS_HANDLE                   ProtocolBindingContext;
  1122.   NDIS_HANDLE                   MiniportAdapterContext;
  1123.   PNDIS_M_OPEN_BLOCK            MiniportNextOpen;
  1124. //  PFILE_OBJECT                  FileObject;
  1125.   ULONG                         Flags;
  1126.   NDIS_HANDLE                   CloseRequestHandle;
  1127.   NDIS_HANDLE                   FilterHandle;
  1128.   NDIS_SPIN_LOCK                SpinLock;
  1129.   ULONG                         References;
  1130.   UINT                          CurrentLookahead;
  1131.   ULONG                         ProtocolOptions;
  1132.  
  1133.   W_SEND_HANDLER                SendHandler;
  1134.   W_TRANSFER_DATA_HANDLER       TransferDataHandler;
  1135.  
  1136.   SEND_COMPLETE_HANDLER         SendCompleteHandler;
  1137.   TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
  1138.   RECEIVE_HANDLER               ReceiveHandler;
  1139.   RECEIVE_COMPLETE_HANDLER      ReceiveCompleteHandler;
  1140.   RECEIVE_PACKET_HANDLER        ReceivePacketHandler;
  1141.  
  1142.   W_SEND_PACKETS_HANDLER        SendPacketsHandler;
  1143.  
  1144. //  W_CO_SEND_PACKETS_HANDLER     CoSendPacketsHandler;
  1145. //  W_CO_REQUEST_HANDLER          CoRequestHandler;
  1146.  
  1147.   BOOLEAN                       ReceivedAPacket;
  1148.   BOOLEAN                       IndicatingNow;
  1149.  
  1150. //  struct _NDIS_CO_AF_BLOCK      *NextAf;
  1151.  
  1152.   ULONG                         AddressFamilyMask;
  1153.  
  1154.   LIST_ENTRY                    ActiveVcHead;
  1155.   LIST_ENTRY                    FreeVcHead;
  1156.  
  1157. //  CO_SEND_COMPLETE_HANDLER      CoSendCompleteHandler;
  1158. //  CO_RECEIVE_PACKET_HANDLER     CoReceivePacketHandler;
  1159. };
  1160.  
  1161. struct _NDIS_MINIPORT_INTERRUPT {
  1162.   PKINTERRUPT                   InterruptObject;
  1163.   KSPIN_LOCK                    DpcCountLock;
  1164.   PVOID                         MiniportIdField;
  1165.   W_ISR_HANDLER                 MiniportIsr;
  1166.   W_HANDLE_INTERRUPT_HANDLER    MiniportDpc;
  1167.   KDPC                          InterruptDpc;
  1168.   PNDIS_MINIPORT_BLOCK          Miniport;
  1169.   UCHAR                         DpcCount;
  1170.   BOOLEAN                       SharedInterrupt;
  1171.   BOOLEAN                       IsrRequested;
  1172. };
  1173.  
  1174. typedef struct _NDIS_MINIPORT_TIMER {
  1175.           KTIMER                Timer;
  1176.           KDPC                  Dpc;
  1177.           PNDIS_TIMER_FUNCTION  MiniportTimerFunction;
  1178.           PVOID                 MiniportTimerContext;
  1179.           PNDIS_MINIPORT_BLOCK  Miniport;
  1180.           struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
  1181.         } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
  1182.  
  1183. typedef struct _MINIPORT_PENDING_OPEN {
  1184.           struct _MINIPORT_PENDING_OPEN *NextPendingOpen;
  1185.           PNDIS_HANDLE          NdisBindingHandle;
  1186.           PNDIS_MINIPORT_BLOCK  Miniport;
  1187.           PVOID                 NewOpenP;
  1188.           PVOID                 FileObject;
  1189.           NDIS_HANDLE           NdisProtocolHandle;
  1190.           NDIS_HANDLE           ProtocolBindingContext;
  1191.           PNDIS_STRING          AdapterName;
  1192.           UINT                  OpenOptions;
  1193.           PSTRING               AddressingInformation;
  1194.           ULONG                 Flags;
  1195.           NDIS_STATUS           Status;
  1196.           NDIS_STATUS           OpenErrorStatus;
  1197. #if defined(NDIS_WRAPPER)
  1198.           WORK_QUEUE_ITEM       WorkItem;
  1199. #endif
  1200.         } MINIPORT_PENDING_OPEN, *PMINIPORT_PENDING_OPEN;
  1201.  
  1202. /* types of memory */
  1203. #define NDIS_MEMORY_CONTIGUOUS          0x00000001
  1204. #define NDIS_MEMORY_NONCACHED           0x00000002
  1205.  
  1206. /* miniport attributes */
  1207. #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT    0x00000001
  1208. #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT   0x00000002
  1209. #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
  1210. #define NDIS_ATTRIBUTE_BUS_MASTER               0x00000008
  1211. #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER      0x00000010
  1212.  
  1213. #define NDIS_ERROR_CODE                         ULONG
  1214.  
  1215. #define NDIS_ERROR_CODE_RESOURCE_CONFLICT       EVENT_NDIS_RESOURCE_CONFLICT
  1216. #define NDIS_ERROR_CODE_OUT_OF_RESOURCES        EVENT_NDIS_OUT_OF_RESOURCE
  1217. #define NDIS_ERROR_CODE_HARDWARE_FAILURE        EVENT_NDIS_HARDWARE_FAILURE
  1218. #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND       EVENT_NDIS_ADAPTER_NOT_FOUND
  1219. #define NDIS_ERROR_CODE_INTERRUPT_CONNECT       EVENT_NDIS_INTERRUPT_CONNECT
  1220. #define NDIS_ERROR_CODE_DRIVER_FAILURE          EVENT_NDIS_DRIVER_FAILURE
  1221. #define NDIS_ERROR_CODE_BAD_VERSION             EVENT_NDIS_BAD_VERSION
  1222. #define NDIS_ERROR_CODE_TIMEOUT                 EVENT_NDIS_TIMEOUT
  1223. #define NDIS_ERROR_CODE_NETWORK_ADDRESS         EVENT_NDIS_NETWORK_ADDRESS
  1224. #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
  1225. #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
  1226. #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
  1227. #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS     EVENT_NDIS_BAD_IO_BASE_ADDRESS
  1228. #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL     EVENT_NDIS_RECEIVE_SPACE_SMALL
  1229. #define NDIS_ERROR_CODE_ADAPTER_DISABLEDi       EVENT_NDIS_ADAPTER_DISABLED
  1230.  
  1231. /*
  1232.  * NDIS_STATUS values
  1233.  *   Status values are 32 bit values layed out as follows:
  1234.  *
  1235.  *   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1236.  *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1237.  *  +---+-+-------------------------+-------------------------------+
  1238.  *  |Sev|C|       Facility          |               Code            |
  1239.  *  +---+-+-------------------------+-------------------------------+
  1240.  *
  1241.  *  where
  1242.  *
  1243.  *    Sev - is the severity code
  1244.  *      00 - Success
  1245.  *      01 - Informational
  1246.  *      10 - Warning
  1247.  *      11 - Error
  1248.  *
  1249.  *    C - is the Customer code flag
  1250.  *
  1251.  *    Facility - is the facility code
  1252.  *
  1253.  *    Code - is the facility's status code
  1254.  */
  1255. #define NDIS_STATUS_SUCCESS             ((NDIS_STATUS)STATUS_SUCCESS)
  1256. #define NDIS_STATUS_PENDING             ((NDIS_STATUS)STATUS_PENDING)
  1257. #define NDIS_STATUS_NOT_RECOGNIZED      ((NDIS_STATUS)0x00010001L)
  1258. #define NDIS_STATUS_NOT_COPIED          ((NDIS_STATUS)0x00010002L)
  1259. #define NDIS_STATUS_NOT_ACCEPTED        ((NDIS_STATUS)0x00010003L)
  1260. #define NDIS_STATUS_CALL_ACTIVE         ((NDIS_STATUS)0x00010007L)
  1261.  
  1262. #define NDIS_STATUS_ONLINE              ((NDIS_STATUS)0x40010003L)
  1263. #define NDIS_STATUS_RESET_START         ((NDIS_STATUS)0x40010004L)
  1264. #define NDIS_STATUS_RESET_END           ((NDIS_STATUS)0x40010005L)
  1265. #define NDIS_STATUS_RING_STATUS         ((NDIS_STATUS)0x40010006L)
  1266. #define NDIS_STATUS_CLOSED              ((NDIS_STATUS)0x40010007L)
  1267. #define NDIS_STATUS_WAN_LINE_UP         ((NDIS_STATUS)0x40010008L)
  1268. #define NDIS_STATUS_WAN_LINE_DOWN       ((NDIS_STATUS)0x40010009L)
  1269. #define NDIS_STATUS_WAN_FRAGMENT        ((NDIS_STATUS)0x4001000AL)
  1270. #define NDIS_STATUS_MEDIA_CONNECT       ((NDIS_STATUS)0x4001000BL)
  1271. #define NDIS_STATUS_MEDIA_DISCONNECT    ((NDIS_STATUS)0x4001000CL)
  1272. #define NDIS_STATUS_HARDWARE_LINE_UP    ((NDIS_STATUS)0x4001000DL)
  1273. #define NDIS_STATUS_HARDWARE_LINE_DOWN  ((NDIS_STATUS)0x4001000EL)
  1274. #define NDIS_STATUS_INTERFACE_UP        ((NDIS_STATUS)0x4001000FL)
  1275. #define NDIS_STATUS_INTERFACE_DOWN      ((NDIS_STATUS)0x40010010L)
  1276. #define NDIS_STATUS_MEDIA_BUSY          ((NDIS_STATUS)0x40010011L)
  1277.  
  1278. #define NDIS_STATUS_NOT_RESETTABLE      ((NDIS_STATUS)0x80010001L)
  1279. #define NDIS_STATUS_SOFT_ERRORS         ((NDIS_STATUS)0x80010003L)
  1280. #define NDIS_STATUS_HARD_ERRORS         ((NDIS_STATUS)0x80010004L)
  1281. #define NDIS_STATUS_BUFFER_OVERFLOW     ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
  1282.  
  1283. #define NDIS_STATUS_FAILURE             ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
  1284. #define NDIS_STATUS_RESOURCES           ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
  1285. #define NDIS_STATUS_NOT_SUPPORTED       ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
  1286. #define NDIS_STATUS_CLOSING             ((NDIS_STATUS)0xC0010002L)
  1287. #define NDIS_STATUS_BAD_VERSION         ((NDIS_STATUS)0xC0010004L)
  1288. #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
  1289. #define NDIS_STATUS_ADAPTER_NOT_FOUND   ((NDIS_STATUS)0xC0010006L)
  1290. #define NDIS_STATUS_OPEN_FAILED         ((NDIS_STATUS)0xC0010007L)
  1291. #define NDIS_STATUS_DEVICE_FAILED       ((NDIS_STATUS)0xC0010008L)
  1292. #define NDIS_STATUS_MULTICAST_FULL      ((NDIS_STATUS)0xC0010009L)
  1293. #define NDIS_STATUS_MULTICAST_EXISTS    ((NDIS_STATUS)0xC001000AL)
  1294. #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
  1295. #define NDIS_STATUS_REQUEST_ABORTED     ((NDIS_STATUS)0xC001000CL)
  1296. #define NDIS_STATUS_RESET_IN_PROGRESS   ((NDIS_STATUS)0xC001000DL)
  1297. #define NDIS_STATUS_CLOSING_INDICATING  ((NDIS_STATUS)0xC001000EL)
  1298. #define NDIS_STATUS_INVALID_PACKET      ((NDIS_STATUS)0xC001000FL)
  1299. #define NDIS_STATUS_OPEN_LIST_FULL      ((NDIS_STATUS)0xC0010010L)
  1300. #define NDIS_STATUS_ADAPTER_NOT_READY   ((NDIS_STATUS)0xC0010011L)
  1301. #define NDIS_STATUS_ADAPTER_NOT_OPEN    ((NDIS_STATUS)0xC0010012L)
  1302. #define NDIS_STATUS_NOT_INDICATING      ((NDIS_STATUS)0xC0010013L)
  1303. #define NDIS_STATUS_INVALID_LENGTH      ((NDIS_STATUS)0xC0010014L)
  1304. #define NDIS_STATUS_INVALID_DATA        ((NDIS_STATUS)0xC0010015L)
  1305. #define NDIS_STATUS_BUFFER_TOO_SHORT    ((NDIS_STATUS)0xC0010016L)
  1306. #define NDIS_STATUS_INVALID_OID         ((NDIS_STATUS)0xC0010017L)
  1307. #define NDIS_STATUS_ADAPTER_REMOVED     ((NDIS_STATUS)0xC0010018L)
  1308. #define NDIS_STATUS_UNSUPPORTED_MEDIA   ((NDIS_STATUS)0xC0010019L)
  1309. #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
  1310. #define NDIS_STATUS_FILE_NOT_FOUND      ((NDIS_STATUS)0xC001001BL)
  1311. #define NDIS_STATUS_ERROR_READING_FILE  ((NDIS_STATUS)0xC001001CL)
  1312. #define NDIS_STATUS_ALREADY_MAPPED      ((NDIS_STATUS)0xC001001DL)
  1313. #define NDIS_STATUS_RESOURCE_CONFLICT   ((NDIS_STATUS)0xC001001EL)
  1314. #define NDIS_STATUS_NO_CABLE            ((NDIS_STATUS)0xC001001FL)
  1315.  
  1316. #define NDIS_STATUS_INVALID_SAP         ((NDIS_STATUS)0xC0010020L)
  1317. #define NDIS_STATUS_SAP_IN_USE          ((NDIS_STATUS)0xC0010021L)
  1318. #define NDIS_STATUS_INVALID_ADDRESS     ((NDIS_STATUS)0xC0010022L)
  1319. #define NDIS_STATUS_VC_NOT_RESERVED     ((NDIS_STATUS)0xC0010023L)
  1320. #define NDIS_STATUS_DEST_OUT_OF_ORDER   ((NDIS_STATUS)0xC0010024L)
  1321. #define NDIS_STATUS_VC_NOT_AVAILABLE    ((NDIS_STATUS)0xC0010025L)
  1322. #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
  1323. #define NDIS_STATUS_INCOMPATABLE_QOS    ((NDIS_STATUS)0xC0010027L)
  1324. #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
  1325. #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
  1326. #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
  1327.  
  1328. #define NT_SUCCESS(_Status) ((LONG)(_Status) >= 0)
  1329. #define NT_INFORMATION(_Status) (((ULONG)(_Status) & 0xc0000000) == 0x40000000)
  1330. #define NT_WARNING(_Status) (((ULONG)(_Status) & 0xc0000000) == 0x80000000)
  1331. #define NT_ERROR(_Status) (((ULONG)(_Status) & 0xc0000000) == 0xc0000000)
  1332. #define NDIS_SUCCESS(_Status) NT_SUCCESS(_Status)
  1333. #define NDIS_INFORMATION(_Status) NT_INFORMATION(_Status)
  1334. #define NDIS_WARNING(_Status) NT_WARNING(_Status)
  1335. #define NDIS_ERROR(_Status) NT_ERROR(_Status)
  1336.  
  1337. #define ARGUMENT_PRESENT(_ArgumentPointer) ((PCHAR)(_ArgumentPointer) != NULL)
  1338.  
  1339. /* macro to initialize an NDIS_STRING constant */
  1340. #define NDIS_STRING_CONST(_x) {sizeof(L##_x)-2, sizeof(L##_x), L##_x}
  1341.  
  1342. /* macro to initialize an NDIS_PHYSICAL_ADDRESS constant */
  1343. #define NDIS_PHYSICAL_ADDRESS_CONST(_Low, _High) \
  1344.          {(ULONG)(_Low), (LONG)(_High)}
  1345.  
  1346. /*++
  1347. VOID
  1348. NdisRawReadPortUchar(
  1349.   IN ULONG Port,
  1350.   OUT PUCHAR Data
  1351. );
  1352. --*/
  1353. #define NdisRawReadPortUchar(_Port, _Data) \
  1354.           *(_Data) = READ_PORT_UCHAR((PUCHAR)(_Port))
  1355.  
  1356. /*++
  1357. VOID
  1358. NdisRawReadPortUshort(
  1359.   IN ULONG Port,
  1360.   OUT PUSHORT Data
  1361. );
  1362. --*/
  1363. #define NdisRawReadPortUshort(_Port, _Data) \
  1364.           *(_Data) = READ_PORT_USHORT((PUSHORT)(_Port))
  1365.  
  1366. /*++
  1367. VOID
  1368. NdisRawReadPortUlong(
  1369.   IN ULONG Port,
  1370.   OUT PULONG Data
  1371. );
  1372. --*/
  1373. #define NdisRawReadPortUlong(_Port, _Data) \
  1374.           *(_Data) = READ_PORT_ULONG((PULONG)(_Port))
  1375.  
  1376. /*++
  1377. VOID
  1378. NdisRawReadPortBufferUchar(
  1379.   IN ULONG Port,
  1380.   OUT PUCHAR Buffer,
  1381.   IN ULONG Length
  1382. );
  1383. --*/
  1384. #define NdisRawReadPortBufferUchar(_Port, _Buffer, _Length) \
  1385.           READ_PORT_BUFFER_UCHAR((PUCHAR)(_Port), (PUCHAR)(_Buffer), _Length)
  1386.  
  1387. /*++
  1388. VOID
  1389. NdisRawReadPortBufferUshort(
  1390.   IN ULONG Port,
  1391.   OUT PUSHORT Buffer,
  1392.   IN ULONG Length
  1393. );
  1394. --*/
  1395. #define NdisRawReadPortBufferUshort(_Port, _Buffer, _Length) \
  1396.           READ_PORT_BUFFER_USHORT((PUSHORT)(_Port), (PUSHORT)(_Buffer), _Length)
  1397.  
  1398. /*++
  1399. VOID
  1400. NdisRawReadPortBufferUlong(
  1401.   IN ULONG Port,
  1402.   OUT PULONG Buffer,
  1403.   IN ULONG Length
  1404. );
  1405. --*/
  1406. #define NdisRawReadPortBufferUlong(_Port, _Buffer, _Length) \
  1407.           READ_PORT_BUFFER_ULONG((PULONG)(_Port), (PULONG)(_Buffer), _Length)
  1408.  
  1409. /*++
  1410. VOID
  1411. NdisRawWritePortUchar(
  1412.   IN ULONG Port,
  1413.   IN UCHAR Data
  1414. );
  1415. --*/
  1416. #define NdisRawWritePortUchar(_Port, _Data) \
  1417.           WRITE_PORT_UCHAR((PUCHAR)(_Port), (UCHAR)(_Data))
  1418.  
  1419. /*++
  1420. VOID
  1421. NdisRawWritePortUshort(
  1422.   IN ULONG Port,
  1423.   IN USHORT Data
  1424. );
  1425. --*/
  1426. #define NdisRawWritePortUshort(_Port, _Data) \
  1427.           WRITE_PORT_USHORT((PUSHORT)(_Port), (USHORT)(_Data))
  1428.  
  1429. /*++
  1430. VOID
  1431. NdisRawWritePortUlong(
  1432.   IN ULONG Port,
  1433.   IN ULONG Data
  1434. );
  1435. --*/
  1436. #define NdisRawWritePortUlong(_Port, _Data) \
  1437.           WRITE_PORT_ULONG((PULONG)(_Port), (ULONG)(_Data))
  1438.  
  1439. /*++
  1440. VOID
  1441. NdisRawWritePortBufferUchar(
  1442.   IN ULONG Port,
  1443.   IN PUCHAR Buffer,
  1444.   IN ULONG Length
  1445. );
  1446. --*/
  1447. #define NdisRawWritePortBufferUchar(_Port, _Buffer, _Length) \
  1448.           WRITE_PORT_BUFFER_UCHAR((PUCHAR)(_Port), (PUCHAR)(_Buffer), _Length)
  1449.  
  1450. /*++
  1451. VOID
  1452. NdisRawWritePortBufferUshort(
  1453.   IN ULONG Port,
  1454.   IN PUSHORT Buffer,
  1455.   IN ULONG Length
  1456. );
  1457. --*/
  1458. #define NdisRawWritePortBufferUshort(_Port, _Buffer, _Length) \
  1459.           WRITE_PORT_BUFFER_USHORT((PUSHORT)(_Port), (PUSHORT)(_Buffer), \
  1460.                                    _Length)
  1461.  
  1462. /*++
  1463. VOID
  1464. NdisRawWritePortBufferUlong(
  1465.   IN ULONG Port,
  1466.   IN PULONG Buffer,
  1467.   IN ULONG Length
  1468. );
  1469. --*/
  1470. #define NdisRawWritePortBufferUlong(_Port, _Buffer, _Length) \
  1471.           WRITE_PORT_BUFFER_ULONG((PULONG)(_Port), (PULONG)(_Buffer), _Length)
  1472.  
  1473. #define NdisMoveMemory(_Destination, _Source, _Length) \
  1474.           RtlCopyMemory(_Destination, _Source, _Length)
  1475. #define NdisZeroMemory(_Destination, _Length) \
  1476.           RtlZeroMemory(_Destination, _Length)
  1477.  
  1478. #define NdisGetCacheFillSize()  HalGetDmaAlignmentRequirement()
  1479. #define NdisFlushBuffer(_Buffer, _WriteToDevice) \
  1480.           KeFlushIoBuffers(_Buffer, !(_WriteToDevice), TRUE)
  1481. #define NdisStallExecution(_MicrosecondsToStall) \
  1482.           KeStallExecutionProcessor(_MicrosecondsToStall)
  1483.  
  1484. #define NdisMInitializeWrapper(_NdisWrapperHandle, _SystemSpecific1, \
  1485.                                _SystemSpecific2, _SystemSpecific3) \
  1486.           NdisInitializeWrapper(_NdisWrapperHandle, _SystemSpecific1, \
  1487.                                 _SystemSpecific2, _SystemSpecific3)
  1488. #define NdisMSetTimer(_Timer, _Delay) \
  1489.           NdisSetTimer((PNDIS_TIMER)(_Timer), _Delay)
  1490. #define NdisUpdateSharedMemory(_M, _L, _V, _P)
  1491. #define NdisMUpdateSharedMemory(_M, _L, _V, _P) \
  1492.           NdisUpdateSharedMemory(_M, _L, _V, _P)
  1493.  
  1494. /* used by the filter packages for indicating receives */
  1495. #define FilterIndicateReceive( \
  1496.           _Status, \
  1497.           _NdisBindingContext, \
  1498.           _MacReceiveContext, \
  1499.           _HeaderBuffer, \
  1500.           _HeaderBufferSize, \
  1501.           _LookaheadBuffer, \
  1502.           _LookaheadBufferSize, \
  1503.           _PacketSize \
  1504.           ) \
  1505.           *(_Status) \
  1506.             = (((PNDIS_OPEN_BLOCK)(_NdisBindingContext)) \
  1507.                ->PostNt31ReceiveHandler)( \
  1508.                  ((PNDIS_OPEN_BLOCK)(_NdisBindingContext)) \
  1509.                    ->ProtocolBindingContext, \
  1510.                  _MacReceiveContext, \
  1511.                  _HeaderBuffer, \
  1512.                  _HeaderBufferSize, \
  1513.                  _LookaheadBuffer, \
  1514.                  _LookaheadBufferSize, \
  1515.                  _PacketSize)
  1516.  
  1517. /* used by the filter packages for indicating receive completion */
  1518. #define FilterIndicateReceiveComplete(_NdisBindingContext) \
  1519.           (((PNDIS_OPEN_BLOCK)(_NdisBindingContext)) \
  1520.            ->PostNt31ReceiveCompleteHandler)( \
  1521.              ((PNDIS_OPEN_BLOCK)(_NdisBindingContext)) \
  1522.                ->ProtocolBindingContext)
  1523.  
  1524. /*++
  1525. VOID
  1526. NdisMIndicateReceivePacket(
  1527.   IN NDIS_HANDLE MiniportAdapterHandle,
  1528.   IN PPNDIS_PACKET ReceivedPackets,
  1529.   IN UINT NumberOfPackets
  1530. );
  1531. --*/
  1532. #define NdisMIndicateReceivePacket(_M, _P, _N) \
  1533.           (*((PNDIS_MINIPORT_BLOCK)(_M))->PacketIndicateHandler)(_M, _P, _N)
  1534.  
  1535. #define NDIS_OOB_DATA_FROM_PACKET(_p) \
  1536.           (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_p) \
  1537.                                   + (_p)->Private.NdisPacketOobOffset)
  1538. #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
  1539.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1540.            + (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
  1541. #define NDIS_GET_PACKET_STATUS(_Packet) \
  1542.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1543.            + (_Packet)->Private.NdisPacketOobOffset))->Status
  1544. #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
  1545.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1546.            + (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
  1547. #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
  1548.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1549.            + (_Packet)->Private.NdisPacketOobOffset))->TimeSent
  1550. #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
  1551.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1552.            + (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
  1553. #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
  1554.                                             _pMediaSpecificInfo, \
  1555.                                             _pSizeMediaSpecificInfo) \
  1556.         { \
  1557.           if (((_Packet)->Private.NdisPacketFlags \
  1558.                 & fPACKET_ALLOCATED_BY_NDIS) == 0 \
  1559.               || ((_Packet)->Private.NdisPacketFlags \
  1560.                    & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO) == 0) { \
  1561.             *(_pMediaSpecificInfo) = NULL; \
  1562.             *(_pSizeMediaSpecificInfo) = 0; \
  1563.           } else { \
  1564.             *(_pMediaSpecificInfo) \
  1565.               = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1566.                  + (_Packet)->Private.NdisPacketOobOffset)) \
  1567.                 ->MediaSpecificInformation; \
  1568.             *(_pSizeMediaSpecificInfo) \
  1569.               = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1570.                  + (_Packet)->Private.NdisPacketOobOffset)) \
  1571.                 ->SizeMediaSpecificInfo; \
  1572.           } \
  1573.         }
  1574.  
  1575. #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
  1576.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1577.            + (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = _HdrSize
  1578. #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
  1579.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1580.            + (_Packet)->Private.NdisPacketOobOffset))->Status = _Status
  1581. #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
  1582.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1583.            + (_Packet)->Private.NdisPacketOobOffset))->TimeToSend \
  1584.           = _TimeToSend
  1585. #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
  1586.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1587.            + (_Packet)->Private.NdisPacketOobOffset))->TimeSent = _TimeSent
  1588. #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
  1589.           ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1590.            + (_Packet)->Private.NdisPacketOobOffset))->TimeReceived \
  1591.           = _TimeReceived
  1592. #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
  1593.                                             _MediaSpecificInfo, \
  1594.                                             _SizeMediaSpecificInfo) \
  1595.         { \
  1596.           if (((_Packet)->Private.NdisPacketFlags \
  1597.                & fPACKET_ALLOCATED_BY_NDIS) != 0) { \
  1598.             (_Packet)->Private.NdisPacketFlags \
  1599.               |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INF; \
  1600.             ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1601.              + (_Packet)->Private.NdisPacketOobOffset)) \
  1602.             ->MediaSpecificInformation = _MediaSpecificInfo; \
  1603.             ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) \
  1604.              + (_Packet)->Private.NdisPacketOobOffset)) \
  1605.             ->SizeMediaSpecificInfo = _SizeMediaSpecificInfo; \
  1606.           } \
  1607.         }
  1608.  
  1609. /*++
  1610. VOID
  1611. NdisGetFirstBufferFromPacket(
  1612.   IN PNDIS_PACKET Packet,
  1613.   OUT PNDIS_BUFFER *FirstBuffer,
  1614.   OUT PVOID *FirstBufferVA,
  1615.   OUT PUINT FirstBufferLength,
  1616.   OUT PUINT TotalBufferLength
  1617. );
  1618. --*/
  1619. #define NdisGetFirstBufferFromPacket(_Packet, \
  1620.                                      _FirstBuffer, \
  1621.                                      _FirstBufferVA, \
  1622.                                      _FirstBufferLength, \
  1623.                                      _TotalBufferLength) \
  1624.         { \
  1625.           PNDIS_BUFFER _pBuf = (_Packet)->Private.Head; \
  1626.           *(_FirstBuffer) = _pBuf; \
  1627.           *(_FirstBufferVA) = _pBuf->VirtualAddress; \
  1628.           *(_FirstBufferLength) = *(_TotalBufferLength) \
  1629.             = _pBuf->BufferLength; \
  1630.           for (_pBuf=_pBuf->Next; _pBuf!=NULL; _pBuf=_pBuf->Next) \
  1631.             *(_TotalBufferLength) += _pBuf->BufferLength; \
  1632.         }
  1633.  
  1634. /*++
  1635. VOID
  1636. NdisFreeString(
  1637.   IN NDIS_STRING String
  1638. );
  1639. --*/
  1640. #define NdisFreeString(_String) \
  1641.           NdisFreeMemory((_String).Buffer, (_String).MaximumLength, 0)
  1642.  
  1643. /*++
  1644. ULONG
  1645. NdisPrintString(
  1646.   PNDIS_STRING String
  1647. );
  1648. --*/
  1649. #define NdisPrintString(_String) DbgPrint("%ls", (_String).Buffer)
  1650.  
  1651. /*++
  1652. ULONG
  1653. NdisGetPhysicalAddressHigh(
  1654.   IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
  1655. );
  1656. --*/
  1657. #define NdisGetPhysicalAddressHigh(_PhysicalAddress) \
  1658.           ((_PhysicalAddress).HighPart)
  1659.  
  1660. /*++
  1661. VOID
  1662. NdisSetPhysicalAddressHigh(
  1663.   IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
  1664.   IN ULONG Value
  1665. );
  1666. --*/
  1667. #define NdisSetPhysicalAddressHigh(_PhysicalAddress, _Value) \
  1668.           (_PhysicalAddress).HighPart = _Value
  1669.  
  1670. /*++
  1671. ULONG
  1672. NdisGetPhysicalAddressLow(
  1673.   IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
  1674. );
  1675. --*/
  1676. #define NdisGetPhysicalAddressLow(_PhysicalAddress) \
  1677.           ((_PhysicalAddress).LowPart)
  1678.  
  1679. /*++
  1680. VOID
  1681. NdisSetPhysicalAddressLow(
  1682.   IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
  1683.   IN ULONG Value
  1684. );
  1685. --*/
  1686. #define NdisSetPhysicalAddressLow(_PhysicalAddress, _Value) \
  1687.           (_PhysicalAddress).LowPart = _Value
  1688.  
  1689. /*++
  1690. PVOID
  1691. NDIS_BUFFER_LINKAGE(
  1692.   IN PNDIS_BUFFER Buffer
  1693. );
  1694. --*/
  1695. #define NDIS_BUFFER_LINKAGE(_Buffer) ((PVOID)(_Buffer)->Next)
  1696.  
  1697. /*++
  1698. VOID
  1699. NdisSetPacketFlags(
  1700.   IN PNDIS_PACKET Packet,
  1701.   IN UINT Flags
  1702. );
  1703. --*/
  1704. #define NdisSetPacketFlags(_Packet, _Flags) (_Packet)->Private.Flags = _Flags
  1705.  
  1706. /*++
  1707. UINT
  1708. NdisGetPacketFlags(
  1709.   IN PNDIS_PACKET Packet
  1710. );
  1711. --*/
  1712. #define NdisGetPacketFlags(_Packet) (_Packet)->Private.Flags
  1713.  
  1714. /*++
  1715. VOID
  1716. NdisRecalculatePacketCounts(
  1717.   IN OUT PNDIS_PACKET Packet
  1718. );
  1719. --*/
  1720. #define NdisRecalculatePacketCounts(_Packet) \
  1721.         { \
  1722.           PNDIS_BUFFER TmpBuffer = (_Packet)->Private.Head; \
  1723.           if (TmpBuffer) { \
  1724.             while (TmpBuffer->Next) \
  1725.               TmpBuffer = TmpBuffer->Next; \
  1726.             (_Packet)->Private.Tail = TmpBuffer; \
  1727.           } \
  1728.           (_Packet)->Private.ValidCounts = FALSE; \
  1729.         }
  1730.  
  1731. /*++
  1732. VOID
  1733. NdisReinitializePacket(
  1734.   IN OUT PNDIS_PACKET Packet
  1735. );
  1736. --*/
  1737. #define NdisReinitializePacket(_Packet) \
  1738.         { \
  1739.           (_Packet)->Private.Head = NULL; \
  1740.           (_Packet)->Private.ValidCounts = FALSE; \
  1741.         }
  1742.  
  1743. /*++
  1744. VOID
  1745. NdisChainBufferAtFront(
  1746.   IN OUT PNDIS_PACKET Packet,
  1747.   IN OUT PNDIS_BUFFER Buffer
  1748. );
  1749. --*/
  1750. #define NdisChainBufferAtFront(_Packet, _Buffer) \
  1751.         { \
  1752.           PNDIS_BUFFER TmpBuffer = _Buffer; \
  1753.           while (TmpBuffer->Next != NULL) \
  1754.             TmpBuffer = TmpBuffer->Next; \
  1755.           if ((_Packet)->Private.Head == NULL) \
  1756.             (_Packet)->Private.Tail = TmpBuffer; \
  1757.           TmpBuffer->Next = (_Packet)->Private.Head; \
  1758.           (_Packet)->Private.Head = _Buffer; \
  1759.           (_Packet)->Private.ValidCounts = FALSE; \
  1760.         }
  1761.  
  1762. /*++
  1763. VOID
  1764. NdisChainBufferAtBack(
  1765.   IN OUT PNDIS_PACKET Packet,
  1766.   IN OUT PNDIS_BUFFER Buffer
  1767. );
  1768. --*/
  1769. #define NdisChainBufferAtBack(_Packet, _Buffer) \
  1770.         { \
  1771.           PNDIS_BUFFER TmpBuffer = _Buffer; \
  1772.           while (TmpBuffer->Next != NULL) \
  1773.             TmpBuffer = TmpBuffer->Next; \
  1774.           if ((_Packet)->Private.Head == NULL) \
  1775.             (_Packet)->Private.Head = _Buffer; \
  1776.           else \
  1777.             (_Packet)->Private.Tail->Next = _Buffer; \
  1778.           (_Packet)->Private.Tail = TmpBuffer; \
  1779.           (_Packet)->Private.ValidCounts = FALSE; \
  1780.         }
  1781.  
  1782. /*++
  1783. VOID
  1784. NdisQueryPacket(
  1785.   IN PNDIS_PACKET _Packet,
  1786.   OUT PUINT _PhysicalBufferCount OPTIONAL,
  1787.   OUT PUINT _BufferCount OPTIONAL,
  1788.   OUT PNDIS_BUFFER *_FirstBuffer OPTIONAL,
  1789.   OUT PUINT _TotalPacketLength OPTIONAL
  1790. );
  1791. --*/
  1792. #define NdisQueryPacket(_Packet, \
  1793.                         _PhysicalBufferCount, \
  1794.                         _BufferCount, \
  1795.                         _FirstBuffer, \
  1796.                         _TotalPacketLength) \
  1797.         { \
  1798.           if (!(_Packet)->Private.ValidCounts \
  1799.               && ((_PhysicalBufferCount) != NULL \
  1800.                   || (_BufferCount) != NULL \
  1801.                   || (_TotalPacketLength) != NULL)) { \
  1802.             PNDIS_BUFFER _TmpBuffer = (_Packet)->Private.Head; \
  1803.             UINT _TotalLength = 0; \
  1804.             UINT _Count = 0; \
  1805.             while (_TmpBuffer != NULL) { \
  1806.               _TotalLength += _TmpBuffer->BufferLength; \
  1807.               _Count++; \
  1808.               _TmpBuffer = _TmpBuffer->Next; \
  1809.             } \
  1810.             (_Packet)->Private.Count = _Count; \
  1811.             (_Packet)->Private.TotalLength = _TotalLength; \
  1812.             (_Packet)->Private.PhysicalCount = 0; \
  1813.             (_Packet)->Private.ValidCounts = TRUE; \
  1814.           } \
  1815.           if ((_PhysicalBufferCount) != NULL) { \
  1816.             PUINT __PhysicalBufferCount = _PhysicalBufferCount; \
  1817.             *__PhysicalBufferCount = (_Packet)->Private.PhysicalCount; \
  1818.           } \
  1819.           if ((_BufferCount) != NULL) { \
  1820.             PUINT __BufferCount = _BufferCount; \
  1821.             *__BufferCount = (_Packet)->Private.Count; \
  1822.           } \
  1823.           if ((_FirstBuffer) != NULL) { \
  1824.             PNDIS_BUFFER *__FirstBuffer = _FirstBuffer; \
  1825.             *__FirstBuffer = (_Packet)->Private.Head; \
  1826.           } \
  1827.           if ((_TotalPacketLength) != NULL) { \
  1828.             PUINT __TotalPacketLength = _TotalPacketLength; \
  1829.             *__TotalPacketLength = (_Packet)->Private.TotalLength; \
  1830.           } \
  1831.         }
  1832.  
  1833. /*++
  1834. VOID
  1835. NdisGetNextBuffer(
  1836.   IN PNDIS_BUFFER CurrentBuffer,
  1837.   OUT PNDIS_BUFFER *NextBuffer
  1838. );
  1839. --*/
  1840. #define NdisGetNextBuffer(_CurrentBuffer, _NextBuffer) \
  1841.           *(_NextBuffer) = (_CurrentBuffer)->Next;
  1842.  
  1843. /*++
  1844. UINT
  1845. NdisGetPacketFlags(
  1846.   IN PNDIS_PACKET Packet
  1847. );
  1848. --*/
  1849. #define NdisGetPacketFlags(_Packet) (_Packet)->Private.Flags
  1850.  
  1851. /*++
  1852. VOID
  1853. NdisSetPacketFlags(
  1854.   IN PNDIS_PACKET Packet,
  1855.   IN UINT Flags
  1856. );
  1857. --*/
  1858. #define NdisSetPacketFlags(_Packet, _Flags) (_Packet)->Private.Flags = _Flags
  1859.  
  1860. /*++
  1861. VOID
  1862. NdisSend(
  1863.   OUT PNDIS_STATUS Status,
  1864.   IN NDIS_HANDLE NdisBindingHandle,
  1865.   IN PNDIS_PACKET Packet
  1866. );
  1867. --*/
  1868. #define NdisSend(_S, _B, _P) \
  1869.   *(_S) = (*((PNDIS_OPEN_BLOCK)(_B))->SendHandler)( \
  1870.             ((PNDIS_OPEN_BLOCK)(_B))->MacBindingHandle, _P)
  1871.  
  1872. /*++
  1873. VOID
  1874. NdisMSendComplete(
  1875.   IN NDIS_HANDLE MiniportAdapterHandle,
  1876.   IN PNDIS_PACKET Packet,
  1877.   IN NDIS_STATUS Status
  1878. );
  1879. --*/
  1880. #define NdisMSendComplete(_M, _P, _S) \
  1881.           (*((PNDIS_MINIPORT_BLOCK)(_M))->SendCompleteHandler)(_M, _P, _S)
  1882.  
  1883. /*++
  1884. VOID
  1885. NdisMSendResourcesAvailable(
  1886.   IN NDIS_HANDLE MiniportAdapterHandle
  1887. );
  1888. --*/
  1889. #define NdisMSendResourcesAvailable(_M) \
  1890.   (*((PNDIS_MINIPORT_BLOCK)(_M))->SendResourcesHandler)(_M)
  1891.  
  1892. /*++
  1893. VOID
  1894. NdisTransferData(
  1895.   OUT PNDIS_STATUS Status,
  1896.   IN NDIS_HANDLE NdisBindingHandle,
  1897.   IN NDIS_HANDLE MacReceiveContext,
  1898.   IN UINT ByteOffset,
  1899.   IN UINT BytesToTransfer,
  1900.   IN OUT PNDIS_PACKET Packet,
  1901.   OUT PUINT BytesTransferred
  1902. );
  1903. --*/
  1904. #define NdisTransferData(_S, _B, _C, _Offset, _ToTransfer, _P, Transferred) \
  1905.           *(_S) = (*((PNDIS_OPEN_BLOCK)(_B))->TransferDataHandler)( \
  1906.                     ((PNDIS_OPEN_BLOCK)(_B))->MacBindingHandle, \
  1907.                     _C, _Offset, _ToTransfer, _P, Transferred)
  1908.  
  1909. /*++
  1910. VOID
  1911. NdisRequest(
  1912.   OUT PNDIS_STATUS Status,
  1913.   IN NDIS_HANDLE NdisBindingHandle,
  1914.   IN PNDIS_REQUEST NdisRequest
  1915. );
  1916. --*/
  1917. #define NdisRequest(_S, _B, _Request) \
  1918.           *(_S) = (*((PNDIS_OPEN_BLOCK)(_B))->MacHandle \
  1919.                       ->MacCharacteristics.RequestHandler)( \
  1920.                     ((PNDIS_OPEN_BLOCK)(_B))->MacBindingHandle, _Request);
  1921.  
  1922. /*++
  1923. VOID
  1924. NdisMEthIndicateReceive(
  1925.   IN NDIS_HANDLE MiniportAdapterHandle,
  1926.   IN NDIS_HANDLE MiniportReceiveContext,
  1927.   IN PVOID HeaderBuffer,
  1928.   IN UINT HeaderBufferSize,
  1929.   IN PVOID LookaheadBuffer,
  1930.   IN UINT LookaheadBufferSize,
  1931.   IN UINT PacketSize
  1932. );
  1933. --*/
  1934. #define NdisMEthIndicateReceive( \
  1935.           _M, _C, _HBuffer, _HSize, _LBuffer, _LSize, _PSize) \
  1936.           EthFilterDprIndicateReceive( \
  1937.             ((PNDIS_MINIPORT_BLOCK)(_M))->EthDB, \
  1938.             _C, _HBuffer, _HBuffer, _HSize, _LBuffer, _LSize, _PSize)
  1939.  
  1940. /*++
  1941. VOID
  1942. NdisMEthIndicateReceiveComplete(
  1943.   IN NDIS_HANDLE MiniportHandle
  1944. );
  1945. --*/
  1946. #define NdisMEthIndicateReceiveComplete(_M) \
  1947.           EthFilterDprIndicateReceiveComplete( \
  1948.             ((PNDIS_MINIPORT_BLOCK)_M)->EthDB)
  1949.  
  1950. /*++
  1951. VOID
  1952. NdisMResetComplete(
  1953.   IN NDIS_HANDLE MiniportAdapterHandle,
  1954.   IN NDIS_STATUS Status,
  1955.   IN BOOLEAN AddressingReset
  1956. );
  1957. --*/
  1958. #define NdisMResetComplete(_M, _S, _A) \
  1959.           (*((PNDIS_MINIPORT_BLOCK)(_M))->ResetCompleteHandler)(_M, _S, _A)
  1960.  
  1961. EXPORT NDIS_STATUS NDISAPI
  1962. NdisAllocateMemory(
  1963.   OUT PVOID *VirtualAddress,
  1964.   IN UINT Length,
  1965.   IN UINT MemoryFlags,
  1966.   IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
  1967. );
  1968.  
  1969. EXPORT VOID NDISAPI
  1970. NdisFreeMemory(
  1971.   IN PVOID VirtualAddress,
  1972.   IN UINT Length,
  1973.   IN UINT MemoryFlags
  1974. );
  1975.  
  1976. EXPORT VOID NDISAPI
  1977. NdisAllocateSpinLock(
  1978.   IN PNDIS_SPIN_LOCK SpinLock
  1979. );
  1980.  
  1981. EXPORT VOID NDISAPI
  1982. NdisFreeSpinLock(
  1983.   IN PNDIS_SPIN_LOCK SpinLock
  1984. );
  1985.  
  1986. EXPORT VOID NDISAPI
  1987. NdisAcquireSpinLock(
  1988.   IN PNDIS_SPIN_LOCK SpinLock
  1989. );
  1990.  
  1991. EXPORT VOID NDISAPI
  1992. NdisReleaseSpinLock(
  1993.   IN PNDIS_SPIN_LOCK SpinLock
  1994. );
  1995.  
  1996. EXPORT VOID NDISAPI
  1997. NdisDprAcquireSpinLock(
  1998.   IN PNDIS_SPIN_LOCK SpinLock
  1999. );
  2000.  
  2001. EXPORT VOID NDISAPI
  2002. NdisDprReleaseSpinLock(
  2003.   IN PNDIS_SPIN_LOCK SpinLock
  2004. );
  2005.  
  2006. EXPORT VOID NDISAPI
  2007. NdisMSleep(
  2008.   IN ULONG MicrosecondsToSleep
  2009. );
  2010.  
  2011. EXPORT BOOLEAN NDISAPI
  2012. NdisMSynchronizeWithInterrupt(
  2013.   IN PNDIS_MINIPORT_INTERRUPT Interrupt,
  2014.   IN PVOID SynchronizeFunction,
  2015.   IN PVOID SynchronizeContext
  2016. );
  2017.  
  2018. EXPORT VOID NDISAPI
  2019. NdisMInitializeTimer(
  2020.   IN OUT PNDIS_MINIPORT_TIMER Timer,
  2021.   IN NDIS_HANDLE MiniportAdapterHandle,
  2022.   IN PNDIS_TIMER_FUNCTION TimerFunction,
  2023.   IN PVOID FunctionContext
  2024. );
  2025.  
  2026. /* use NdisMSetTimer for miniport drivers */
  2027. EXPORT VOID NDISAPI
  2028. NdisSetTimer(
  2029.   IN PNDIS_TIMER Timer,
  2030.   IN UINT MillisecondsToDelay
  2031. );
  2032.  
  2033. EXPORT VOID NDISAPI
  2034. NdisMSetPeriodicTimer(
  2035.   IN PNDIS_MINIPORT_TIMER Timer,
  2036.   IN UINT MillisecondsPeriod
  2037. );
  2038.  
  2039. EXPORT VOID NDISAPI
  2040. NdisMCancelTimer(
  2041.   IN PNDIS_MINIPORT_TIMER Timer,
  2042.   OUT PBOOLEAN TimerCancelled
  2043. );
  2044.  
  2045. /* use NdisMInitializeWrapper for miniport drivers */
  2046. EXPORT VOID NDISAPI
  2047. NdisInitializeWrapper(
  2048.   OUT PNDIS_HANDLE NdisWrapperHandle,
  2049.   IN PVOID SystemSpecific1,
  2050.   IN PVOID SystemSpecific2,
  2051.   IN PVOID SystemSpecific3
  2052. );
  2053.  
  2054. EXPORT VOID NDISAPI
  2055. NdisTerminateWrapper(
  2056.   IN NDIS_HANDLE NdisWrapperHandle,
  2057.   IN PVOID SystemSpecific
  2058. );
  2059.  
  2060. EXPORT NDIS_STATUS NDISAPI
  2061. NdisMRegisterMiniport(
  2062.   IN NDIS_HANDLE NdisWrapperHandle,
  2063.   IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
  2064.   IN UINT CharacteristicsLength
  2065. );
  2066.  
  2067. EXPORT VOID NDISAPI
  2068. NdisMSetAttributes(
  2069.   IN NDIS_HANDLE MiniportAdapterHandle,
  2070.   IN NDIS_HANDLE MiniportAdapterContext,
  2071.   IN BOOLEAN BusMaster,
  2072.   IN NDIS_INTERFACE_TYPE AdapterType
  2073. );
  2074.  
  2075. EXPORT VOID NDISAPI
  2076. NdisMSetAttributesEx(
  2077.   IN NDIS_HANDLE MiniportAdapterHandle,
  2078.   IN NDIS_HANDLE MiniportAdapterContext,
  2079.   IN UINT CheckForHangTimeInSeconds OPTIONAL,
  2080.   IN ULONG AttributeFlags,
  2081.   IN NDIS_INTERFACE_TYPE AdapterType
  2082. );
  2083.  
  2084. EXPORT NDIS_STATUS NDISAPI
  2085. NdisMRegisterIoPortRange(
  2086.   OUT PVOID *PortOffset,
  2087.   IN NDIS_HANDLE MiniportAdapterHandle,
  2088.   IN UINT InitialPort,
  2089.   IN UINT NumberOfPorts
  2090. );
  2091.  
  2092. EXPORT VOID NDISAPI
  2093. NdisMDeregisterIoPortRange(
  2094.   IN NDIS_HANDLE MiniportAdapterHandle,
  2095.   IN UINT InitialPort,
  2096.   IN UINT NumberOfPorts,
  2097.   IN PVOID PortOffset
  2098. );
  2099.  
  2100. EXPORT NDIS_STATUS NDISAPI
  2101. NdisMRegisterInterrupt(
  2102.   OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
  2103.   IN NDIS_HANDLE MiniportAdapterHandle,
  2104.   IN UINT InterruptVector,
  2105.   IN UINT InterruptLevel,
  2106.   IN BOOLEAN RequestIsr,
  2107.   IN BOOLEAN SharedInterrupt,
  2108.   IN NDIS_INTERRUPT_MODE InterruptMode
  2109. );
  2110.  
  2111. EXPORT VOID NDISAPI
  2112. NdisMDeregisterInterrupt(
  2113.   IN PNDIS_MINIPORT_INTERRUPT Interrupt
  2114. );
  2115.  
  2116. EXPORT NDIS_STATUS NDISAPI
  2117. NdisMMapIoSpace(
  2118.   OUT PVOID *VirtualAddress,
  2119.   IN NDIS_HANDLE MiniportAdapterHandle,
  2120.   IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
  2121.   IN UINT Length
  2122. );
  2123.  
  2124. EXPORT VOID NDISAPI
  2125. NdisMUnmapIoSpace(
  2126.   IN NDIS_HANDLE MiniportAdapterHandle,
  2127.   IN PVOID VirtualAddress,
  2128.   IN UINT Length
  2129. );
  2130.  
  2131. EXPORT NDIS_STATUS NDISAPI
  2132. NdisQueryMapRegisterCount(
  2133.   IN NDIS_INTERFACE_TYPE BusType,
  2134.   OUT PUINT  MapRegisterCount
  2135. );
  2136.  
  2137. EXPORT NDIS_STATUS NDISAPI
  2138. NdisMAllocateMapRegisters(
  2139.   IN NDIS_HANDLE MiniportAdapterHandle,
  2140.   IN UINT DmaChannel,
  2141.   IN BOOLEAN Dma32BitAddresses,
  2142.   IN ULONG PhysicalMapRegistersNeeded,
  2143.   IN ULONG MaximumPhysicalMapping
  2144. );
  2145.  
  2146. EXPORT VOID NDISAPI
  2147. NdisMFreeMapRegisters(
  2148.   IN NDIS_HANDLE MiniportAdapterHandle
  2149. );
  2150.  
  2151. EXPORT VOID NDISAPI
  2152. NdisMStartBufferPhysicalMapping(
  2153.   IN NDIS_HANDLE MiniportAdapterHandle,
  2154.   IN PNDIS_BUFFER Buffer,
  2155.   IN ULONG PhysicalMapRegister,
  2156.   IN BOOLEAN WriteToDevice,
  2157.   OUT PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray,
  2158.   OUT PUINT ArraySize
  2159. );
  2160.  
  2161. EXPORT VOID NDISAPI
  2162. NdisMCompleteBufferPhysicalMapping(
  2163.   IN NDIS_HANDLE MiniportAdapterHandle,
  2164.   IN PNDIS_BUFFER Buffer,
  2165.   IN ULONG PhysicalMapRegister
  2166. );
  2167.  
  2168. EXPORT VOID NDISAPI
  2169. NdisMAllocateSharedMemory(
  2170.   IN NDIS_HANDLE  MiniportAdapterHandle,
  2171.   IN ULONG  Length,
  2172.   IN BOOLEAN  Cached,
  2173.   OUT PVOID *VirtualAddress,
  2174.   OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
  2175. );
  2176.  
  2177. EXPORT VOID NDISAPI
  2178. NdisMFreeSharedMemory(
  2179.   IN NDIS_HANDLE MiniportAdapterHandle,
  2180.   IN ULONG Length,
  2181.   IN BOOLEAN Cached,
  2182.   IN PVOID VirtualAddress,
  2183.   IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
  2184. );
  2185.  
  2186. EXPORT ULONG NDISAPI
  2187. NdisReadPciSlotInformation(
  2188.   IN NDIS_HANDLE NdisAdapterHandle,
  2189.   IN ULONG SlotNumber,
  2190.   IN ULONG Offset,
  2191.   IN PVOID Buffer,
  2192.   IN ULONG Length
  2193. );
  2194.  
  2195. EXPORT ULONG NDISAPI
  2196. NdisWritePciSlotInformation(
  2197.   IN NDIS_HANDLE NdisAdapterHandle,
  2198.   IN ULONG SlotNumber,
  2199.   IN ULONG Offset,
  2200.   IN PVOID Buffer,
  2201.   IN ULONG Length
  2202. );
  2203.  
  2204. EXPORT NDIS_STATUS NDISAPI
  2205. NdisMPciAssignResources(
  2206.   IN NDIS_HANDLE MiniportHandle,
  2207.   IN ULONG SlotNumber,
  2208.   OUT PNDIS_RESOURCE_LIST *AssignedResources
  2209. );
  2210.  
  2211. EXPORT VOID NDISAPI
  2212. NdisRegisterProtocol(
  2213.   OUT PNDIS_STATUS Status,
  2214.   OUT PNDIS_HANDLE NdisProtocolHandle,
  2215.   IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
  2216.   IN UINT CharacteristicsLength
  2217. );
  2218.  
  2219. EXPORT VOID NDISAPI
  2220. NdisDeregisterProtocol(
  2221.   OUT PNDIS_STATUS Status,
  2222.   IN NDIS_HANDLE NdisProtocolHandle
  2223. );
  2224.  
  2225. EXPORT VOID NDISAPI
  2226. NdisOpenConfiguration(
  2227.   OUT PNDIS_STATUS Status,
  2228.   OUT PNDIS_HANDLE ConfigurationHandle,
  2229.   IN NDIS_HANDLE WrapperConfigurationContext
  2230. );
  2231.  
  2232. EXPORT VOID NDISAPI
  2233. NdisOpenProtocolConfiguration(
  2234.   OUT PNDIS_STATUS Status,
  2235.   OUT PNDIS_HANDLE ConfigurationHandle,
  2236.   IN PNDIS_STRING ProtocolSection
  2237. );
  2238.  
  2239. EXPORT VOID NDISAPI
  2240. NdisCloseConfiguration(
  2241.   IN NDIS_HANDLE ConfigurationHandle
  2242. );
  2243.  
  2244. EXPORT VOID NDISAPI
  2245. NdisReadConfiguration(
  2246.   OUT PNDIS_STATUS Status,
  2247.   OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
  2248.   IN NDIS_HANDLE ConfigurationHandle,
  2249.   IN PNDIS_STRING Keyword,
  2250.   IN NDIS_PARAMETER_TYPE ParameterType
  2251. );
  2252.  
  2253. EXPORT VOID NDISAPI
  2254. NdisWriteConfiguration(
  2255.   OUT PNDIS_STATUS Status,
  2256.   IN NDIS_HANDLE ConfigurationHandle,
  2257.   IN PNDIS_STRING Keyword,
  2258.   IN PNDIS_CONFIGURATION_PARAMETER ParameterValue
  2259. );
  2260.  
  2261. EXPORT VOID NDISAPI
  2262. NdisReadNetworkAddress(
  2263.   OUT PNDIS_STATUS Status,
  2264.   OUT PVOID *NetworkAddress,
  2265.   OUT PUINT NetworkAddressLength,
  2266.   IN NDIS_HANDLE ConfigurationHandle
  2267. );
  2268.  
  2269. EXPORT VOID NDISAPI
  2270. NdisAllocateBufferPool(
  2271.   OUT PNDIS_STATUS Status,
  2272.   OUT PNDIS_HANDLE PoolHandle,
  2273.   IN UINT NumberOfDescriptors
  2274. );
  2275.  
  2276. EXPORT VOID NDISAPI
  2277. NdisFreeBufferPool(
  2278.   IN NDIS_HANDLE PoolHandle
  2279. );
  2280.  
  2281. EXPORT VOID NDISAPI
  2282. NdisAllocateBuffer(
  2283.   OUT PNDIS_STATUS Status,
  2284.   OUT PNDIS_BUFFER *Buffer,
  2285.   IN NDIS_HANDLE PoolHandle,
  2286.   IN PVOID VirtualAddress,
  2287.   IN UINT Length
  2288. );
  2289.  
  2290. EXPORT VOID NDISAPI
  2291. NdisFreeBuffer(
  2292.   IN PNDIS_BUFFER Buffer
  2293. );
  2294.  
  2295. EXPORT VOID NDISAPI
  2296. NdisAdjustBufferLength(
  2297.   IN PNDIS_BUFFER Buffer,
  2298.   IN UINT Length
  2299. );
  2300.  
  2301. EXPORT VOID NDISAPI
  2302. NdisQueryBuffer(
  2303.   IN PNDIS_BUFFER Buffer,
  2304.   OUT PVOID *VirtualAddress OPTIONAL,
  2305.   OUT PUINT Length
  2306. );
  2307.  
  2308. EXPORT VOID NDISAPI
  2309. NdisQueryBufferOffset(
  2310.   IN PNDIS_BUFFER Buffer,
  2311.   OUT PUINT Offset,
  2312.   OUT PUINT Length
  2313. );
  2314.  
  2315. EXPORT ULONG NDISAPI
  2316. NDIS_BUFFER_TO_SPAN_PAGES(
  2317.   IN PNDIS_BUFFER Buffer
  2318. );
  2319.  
  2320. EXPORT VOID NDISAPI
  2321. NdisUnchainBufferAtFront(
  2322.   IN OUT PNDIS_PACKET Packet,
  2323.   OUT PNDIS_BUFFER *Buffer
  2324. );
  2325.  
  2326. EXPORT VOID NDISAPI
  2327. NdisUnchainBufferAtBack(
  2328.   IN OUT PNDIS_PACKET Packet,
  2329.   OUT PNDIS_BUFFER *Buffer
  2330. );
  2331.  
  2332. EXPORT VOID NDISAPI
  2333. NdisAllocatePacketPool(
  2334.   OUT PNDIS_STATUS Status,
  2335.   OUT PNDIS_HANDLE PoolHandle,
  2336.   IN UINT NumberOfDescriptors,
  2337.   IN UINT ProtocolReservedLength
  2338. );
  2339.  
  2340. EXPORT VOID NDISAPI
  2341. NdisFreePacketPool(
  2342.   IN NDIS_HANDLE PoolHandle
  2343. );
  2344.  
  2345. EXPORT VOID NDISAPI
  2346. NdisAllocatePacket(
  2347.   OUT PNDIS_STATUS Status,
  2348.   OUT PNDIS_PACKET *Packet,
  2349.   IN NDIS_HANDLE PoolHandle
  2350. );
  2351.  
  2352. EXPORT VOID NDISAPI
  2353. NdisFreePacket(
  2354.   IN PNDIS_PACKET Packet
  2355. );
  2356.  
  2357. EXPORT VOID NDISAPI
  2358. NdisCopyFromPacketToPacket(
  2359.   IN PNDIS_PACKET Destination,
  2360.   IN UINT DestinationOffset,
  2361.   IN UINT BytesToCopy,
  2362.   IN PNDIS_PACKET Source,
  2363.   IN UINT SourceOffset,
  2364.   OUT PUINT BytesCopied
  2365. );
  2366.  
  2367. EXPORT VOID NDISAPI
  2368. NdisInitializeString(
  2369.   OUT PNDIS_STRING Destination,
  2370.   IN PUCHAR Source
  2371. );
  2372.  
  2373. EXPORT VOID NDISAPI
  2374. NdisInitAnsiString(
  2375.   IN OUT PANSI_STRING DestinationString,
  2376.   IN PCSTR SourceString
  2377. );
  2378.  
  2379. EXPORT VOID NDISAPI
  2380. NdisInitUnicodeString(
  2381.   IN OUT PUNICODE_STRING DestinationString,
  2382.   IN PCWSTR SourceString
  2383. );
  2384.  
  2385. EXPORT NDIS_STATUS NDISAPI
  2386. NdisAnsiStringToUnicodeString(
  2387.   IN OUT PUNICODE_STRING DestinationString,
  2388.   IN PANSI_STRING SourceString
  2389. );
  2390.  
  2391. EXPORT NDIS_STATUS NDISAPI
  2392. NdisUnicodeStringToAnsiString(
  2393.   IN OUT PANSI_STRING DestinationString,
  2394.   IN PUNICODE_STRING SourceString
  2395. );
  2396.  
  2397. EXPORT BOOLEAN NDISAPI
  2398. NdisEqualString(
  2399.   IN PNDIS_STRING String1,
  2400.   IN PNDIS_STRING String2,
  2401.   IN BOOLEAN CaseInsensitive
  2402. );
  2403.  
  2404. EXPORT VOID NDISAPI
  2405. NdisMTransferDataComplete(
  2406.   IN NDIS_HANDLE MiniportAdapterHandle,
  2407.   IN PNDIS_PACKET Packet,
  2408.   IN NDIS_STATUS Status,
  2409.   IN UINT BytesTransferred
  2410. );
  2411.  
  2412. EXPORT VOID NDISAPI
  2413. NdisOpenAdapter(
  2414.   OUT PNDIS_STATUS Status,
  2415.   OUT PNDIS_STATUS OpenErrorStatus,
  2416.   OUT PNDIS_HANDLE NdisBindingHandle,
  2417.   OUT PUINT SelectedMediumIndex,
  2418.   IN PNDIS_MEDIUM MediumArray,
  2419.   IN UINT MediumArraySize,
  2420.   IN NDIS_HANDLE NdisProtocolHandle,
  2421.   IN NDIS_HANDLE ProtocolBindingContext,
  2422.   IN PNDIS_STRING AdapterName,
  2423.   IN UINT OpenOptions,
  2424.   IN PSTRING AddressingInformation OPTIONAL
  2425. );
  2426.  
  2427. EXPORT VOID NDISAPI
  2428. NdisCloseAdapter(
  2429.   OUT PNDIS_STATUS Status,
  2430.   IN NDIS_HANDLE NdisBindingHandle
  2431. );
  2432.  
  2433. EXPORT VOID NDISAPI
  2434. NdisReturnPackets(
  2435.   IN PNDIS_PACKET *PacketsToReturn,
  2436.   IN UINT NumberOfPackets
  2437. );
  2438.  
  2439. EXPORT VOID NDISAPI
  2440. NdisReset(
  2441.   OUT PNDIS_STATUS Status,
  2442.   IN NDIS_HANDLE NdisBindingHandle
  2443. );
  2444.  
  2445. EXPORT VOID NDISAPI
  2446. NdisMIndicateStatus(
  2447.   IN NDIS_HANDLE MiniportAdapterHandle,
  2448.   IN NDIS_STATUS GeneralStatus,
  2449.   IN PVOID StatusBuffer,
  2450.   IN UINT StatusBufferSize
  2451. );
  2452.  
  2453. EXPORT VOID NDISAPI
  2454. NdisMIndicateStatusComplete(
  2455.   IN NDIS_HANDLE MiniportAdapterHandle
  2456. );
  2457.  
  2458. EXPORT VOID NDISAPI
  2459. NdisMQueryInformationComplete(
  2460.   IN NDIS_HANDLE MiniportAdapterHandle,
  2461.   IN NDIS_STATUS Status
  2462. );
  2463.  
  2464. EXPORT VOID NDISAPI
  2465. NdisMSetInformationComplete(
  2466.   IN NDIS_HANDLE MiniportAdapterHandle,
  2467.   IN NDIS_STATUS Status
  2468. );
  2469.  
  2470. /* dummy routines */
  2471. EXPORT VOID NDISAPI
  2472. NdisWriteErrorLogEntry(
  2473.   IN NDIS_HANDLE NdisAdapterHandle,
  2474.   IN NDIS_ERROR_CODE ErrorCode,
  2475.   IN ULONG NumberOfErrorValues,
  2476.   ...
  2477. );
  2478.  
  2479. EXPORT VOID NDISAPI
  2480. NdisMRegisterAdapterShutdownHandler(
  2481.   IN NDIS_HANDLE MiniportHandle,
  2482.   IN PVOID ShutdownContext,
  2483.   IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
  2484. );
  2485.  
  2486. EXPORT VOID NDISAPI
  2487. NdisMDeregisterAdapterShutdownHandler(
  2488.   IN NDIS_HANDLE MiniportHandle
  2489. );
  2490.  
  2491. #if defined(_M_IX86)
  2492. #define NdisMoveMappedMemory(_Destination, _Source, _Length) \
  2493.           RtlCopyMemory(_Destination, _Source, _Length)
  2494. #define NdisZeroMappedMemory(_Destination, _Length) \
  2495.           RtlZeroMemory(_Destination, _Length)
  2496. #define NdisMoveToMappedMemory(_Destination, _Source, _Length) \
  2497.           NdisMoveMappedMemory(_Destination, _Source, _Length)
  2498. #define NdisMoveFromMappedMemory(_Destination, _Source, _Length) \
  2499.           NdisMoveMappedMemory(_Destination, _Source, _Length)
  2500. #endif /* _M_IX86 */
  2501.  
  2502. /* ASSERT and ASSERTMSG are standard NT DDK macros
  2503.    and should not be defined anywhere else */
  2504. #if BINARY_COMPATIBLE
  2505. #if defined(ASSERT)
  2506. #undef ASSERT
  2507. #endif
  2508. #if defined(ASSERTMSG)
  2509. #undef ASSERTMSG
  2510. #endif
  2511. #endif
  2512.  
  2513. #if DBG
  2514. #define KdBreakPoint() DbgBreakPoint()
  2515. #define KdPrint(_x) DbgPrint _x
  2516.  
  2517. VOID
  2518. RtlAssert(
  2519.   IN PVOID FailedAssertion,
  2520.   IN PVOID FileName,
  2521.   IN ULONG LineNumber,
  2522.   IN PCHAR Message OPTIONAL
  2523. );
  2524. #if !defined(ASSERT)
  2525. #define ASSERT(_exp) \
  2526.           if (!(_exp)) {\
  2527.             RtlAssert(#_exp, __FILE__, __LINE__, NULL); \
  2528.           }
  2529. #endif
  2530. #if !defined(ASSERTMSG)
  2531. #define ASSERTMSG(_msg, _exp) \
  2532.           if (!(_exp)) {\
  2533.             RtlAssert(#_exp, __FILE__, __LINE__, _msg); \
  2534.           }
  2535. #endif
  2536. #else /* DBG */
  2537. #define KdBreakPoint()
  2538. #define KdPrint(_x)
  2539.  
  2540. #if !defined(ASSERT)
  2541. #define ASSERT(_exp)
  2542. #endif
  2543. #if !defined(ASSERTMSG)
  2544. #define ASSERTMSG(_exp, _msg)
  2545. #endif
  2546. #endif /* DBG */
  2547.  
  2548. #ifdef __cplusplus
  2549. }
  2550. #endif
  2551.  
  2552. #endif /* _NDIS_H_ */
  2553.  
  2554.