mingw-5.1.4/win32/include/ddk/ndis.h
changeset 0 76b1f169d9fe
equal deleted inserted replaced
-1:000000000000 0:76b1f169d9fe
       
     1 /*
       
     2  * ndis.h
       
     3  *
       
     4  * Network Device Interface Specification definitions
       
     5  *
       
     6  * This file is part of the w32api package.
       
     7  *
       
     8  * Contributors:
       
     9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
       
    10  *
       
    11  * THIS SOFTWARE IS NOT COPYRIGHTED
       
    12  *
       
    13  * This source code is offered for use in the public domain. You may
       
    14  * use, modify or distribute it freely.
       
    15  *
       
    16  * This code is distributed in the hope that it will be useful but
       
    17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
       
    18  * DISCLAIMED. This includes but is not limited to warranties of
       
    19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       
    20  *
       
    21  * DEFINES: i386                 - Target platform is i386
       
    22  *          _NDIS_               - Define only for NDIS library
       
    23  *          NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
       
    24  *          NDIS40               - Use NDIS 4.0 structures by default
       
    25  *          NDIS50               - Use NDIS 5.0 structures by default
       
    26  *          NDIS50_MINIPORT      - Building NDIS 5.0 miniport driver
       
    27  *          NDIS51_MINIPORT      - Building NDIS 5.1 miniport driver
       
    28  */
       
    29 #ifndef __NDIS_H
       
    30 #define __NDIS_H
       
    31 
       
    32 #if __GNUC__ >=3
       
    33 #pragma GCC system_header
       
    34 #endif
       
    35 
       
    36 #ifdef __cplusplus
       
    37 extern "C" {
       
    38 #endif
       
    39 
       
    40 #include "ntddk.h"
       
    41 #include "ntddndis.h"
       
    42 #include "netpnp.h"
       
    43 #include "netevent.h"
       
    44 #include <winsock2.h>
       
    45 
       
    46 #if defined(_NDIS_)
       
    47   #define NDISAPI DECLSPEC_EXPORT
       
    48 #else
       
    49   #define NDISAPI DECLSPEC_IMPORT
       
    50 #endif
       
    51 
       
    52 #if defined(NDIS50_MINIPORT)
       
    53 #ifndef NDIS50
       
    54 #define NDIS50
       
    55 #endif
       
    56 #endif /* NDIS50_MINIPORT */
       
    57 
       
    58 #if defined(NDIS51_MINIPORT)
       
    59 #ifndef NDIS51
       
    60 #define NDIS51
       
    61 #endif
       
    62 #endif /* NDIS51_MINIPORT */
       
    63 
       
    64 /* NDIS 3.0 is default */
       
    65 #if !defined(NDIS30) || !defined(NDIS40) || !defined(NDIS50) || !defined(NDIS51)
       
    66 #define NDIS30
       
    67 #endif /* !NDIS30 || !NDIS40 || !NDIS50 || !NDIS51 */
       
    68 
       
    69 #if 1
       
    70 /* FIXME: */
       
    71 typedef PVOID QUEUED_CLOSE;
       
    72 #endif
       
    73 
       
    74 typedef ULONG NDIS_OID, *PNDIS_OID;
       
    75 
       
    76 typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
       
    77 typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
       
    78 typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
       
    79 
       
    80 typedef struct _REFERENCE {
       
    81 	KSPIN_LOCK  SpinLock;
       
    82 	USHORT  ReferenceCount;
       
    83 	BOOLEAN  Closing;
       
    84 } REFERENCE, * PREFERENCE;
       
    85 
       
    86 
       
    87 /* NDIS base types */
       
    88 
       
    89 typedef struct _NDIS_SPIN_LOCK {
       
    90   KSPIN_LOCK  SpinLock;
       
    91   KIRQL  OldIrql;
       
    92 } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
       
    93 
       
    94 typedef struct _NDIS_EVENT {
       
    95   KEVENT  Event;
       
    96 } NDIS_EVENT, *PNDIS_EVENT;
       
    97 
       
    98 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
       
    99 typedef int NDIS_STATUS, *PNDIS_STATUS;
       
   100 
       
   101 typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
       
   102 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
       
   103 
       
   104 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
       
   105 typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
       
   106 
       
   107 
       
   108 /* NDIS_STATUS constants */
       
   109 #define NDIS_STATUS_SUCCESS                     ((NDIS_STATUS)STATUS_SUCCESS)
       
   110 #define NDIS_STATUS_PENDING                     ((NDIS_STATUS)STATUS_PENDING)
       
   111 #define NDIS_STATUS_NOT_RECOGNIZED              ((NDIS_STATUS)0x00010001L)
       
   112 #define NDIS_STATUS_NOT_COPIED                  ((NDIS_STATUS)0x00010002L)
       
   113 #define NDIS_STATUS_NOT_ACCEPTED                ((NDIS_STATUS)0x00010003L)
       
   114 #define NDIS_STATUS_CALL_ACTIVE                 ((NDIS_STATUS)0x00010007L)
       
   115 #define NDIS_STATUS_ONLINE                      ((NDIS_STATUS)0x40010003L)
       
   116 #define NDIS_STATUS_RESET_START                 ((NDIS_STATUS)0x40010004L)
       
   117 #define NDIS_STATUS_RESET_END                   ((NDIS_STATUS)0x40010005L)
       
   118 #define NDIS_STATUS_RING_STATUS                 ((NDIS_STATUS)0x40010006L)
       
   119 #define NDIS_STATUS_CLOSED                      ((NDIS_STATUS)0x40010007L)
       
   120 #define NDIS_STATUS_WAN_LINE_UP                 ((NDIS_STATUS)0x40010008L)
       
   121 #define NDIS_STATUS_WAN_LINE_DOWN               ((NDIS_STATUS)0x40010009L)
       
   122 #define NDIS_STATUS_WAN_FRAGMENT                ((NDIS_STATUS)0x4001000AL)
       
   123 #define	NDIS_STATUS_MEDIA_CONNECT               ((NDIS_STATUS)0x4001000BL)
       
   124 #define	NDIS_STATUS_MEDIA_DISCONNECT            ((NDIS_STATUS)0x4001000CL)
       
   125 #define NDIS_STATUS_HARDWARE_LINE_UP            ((NDIS_STATUS)0x4001000DL)
       
   126 #define NDIS_STATUS_HARDWARE_LINE_DOWN          ((NDIS_STATUS)0x4001000EL)
       
   127 #define NDIS_STATUS_INTERFACE_UP                ((NDIS_STATUS)0x4001000FL)
       
   128 #define NDIS_STATUS_INTERFACE_DOWN              ((NDIS_STATUS)0x40010010L)
       
   129 #define NDIS_STATUS_MEDIA_BUSY                  ((NDIS_STATUS)0x40010011L)
       
   130 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION   ((NDIS_STATUS)0x40010012L)
       
   131 #define NDIS_STATUS_WW_INDICATION               NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
       
   132 #define NDIS_STATUS_LINK_SPEED_CHANGE           ((NDIS_STATUS)0x40010013L)
       
   133 #define NDIS_STATUS_WAN_GET_STATS               ((NDIS_STATUS)0x40010014L)
       
   134 #define NDIS_STATUS_WAN_CO_FRAGMENT             ((NDIS_STATUS)0x40010015L)
       
   135 #define NDIS_STATUS_WAN_CO_LINKPARAMS           ((NDIS_STATUS)0x40010016L)
       
   136 
       
   137 #define NDIS_STATUS_NOT_RESETTABLE              ((NDIS_STATUS)0x80010001L)
       
   138 #define NDIS_STATUS_SOFT_ERRORS	                ((NDIS_STATUS)0x80010003L)
       
   139 #define NDIS_STATUS_HARD_ERRORS                 ((NDIS_STATUS)0x80010004L)
       
   140 #define NDIS_STATUS_BUFFER_OVERFLOW	            ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
       
   141 
       
   142 #define NDIS_STATUS_FAILURE	                    ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
       
   143 #define NDIS_STATUS_RESOURCES                   ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
       
   144 #define NDIS_STATUS_CLOSING	                    ((NDIS_STATUS)0xC0010002L)
       
   145 #define NDIS_STATUS_BAD_VERSION	                ((NDIS_STATUS)0xC0010004L)
       
   146 #define NDIS_STATUS_BAD_CHARACTERISTICS         ((NDIS_STATUS)0xC0010005L)
       
   147 #define NDIS_STATUS_ADAPTER_NOT_FOUND           ((NDIS_STATUS)0xC0010006L)
       
   148 #define NDIS_STATUS_OPEN_FAILED	                ((NDIS_STATUS)0xC0010007L)
       
   149 #define NDIS_STATUS_DEVICE_FAILED               ((NDIS_STATUS)0xC0010008L)
       
   150 #define NDIS_STATUS_MULTICAST_FULL              ((NDIS_STATUS)0xC0010009L)
       
   151 #define NDIS_STATUS_MULTICAST_EXISTS            ((NDIS_STATUS)0xC001000AL)
       
   152 #define NDIS_STATUS_MULTICAST_NOT_FOUND	        ((NDIS_STATUS)0xC001000BL)
       
   153 #define NDIS_STATUS_REQUEST_ABORTED	            ((NDIS_STATUS)0xC001000CL)
       
   154 #define NDIS_STATUS_RESET_IN_PROGRESS           ((NDIS_STATUS)0xC001000DL)
       
   155 #define NDIS_STATUS_CLOSING_INDICATING          ((NDIS_STATUS)0xC001000EL)
       
   156 #define NDIS_STATUS_NOT_SUPPORTED               ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
       
   157 #define NDIS_STATUS_INVALID_PACKET              ((NDIS_STATUS)0xC001000FL)
       
   158 #define NDIS_STATUS_OPEN_LIST_FULL              ((NDIS_STATUS)0xC0010010L)
       
   159 #define NDIS_STATUS_ADAPTER_NOT_READY           ((NDIS_STATUS)0xC0010011L)
       
   160 #define NDIS_STATUS_ADAPTER_NOT_OPEN            ((NDIS_STATUS)0xC0010012L)
       
   161 #define NDIS_STATUS_NOT_INDICATING              ((NDIS_STATUS)0xC0010013L)
       
   162 #define NDIS_STATUS_INVALID_LENGTH              ((NDIS_STATUS)0xC0010014L)
       
   163 #define NDIS_STATUS_INVALID_DATA                ((NDIS_STATUS)0xC0010015L)
       
   164 #define NDIS_STATUS_BUFFER_TOO_SHORT            ((NDIS_STATUS)0xC0010016L)
       
   165 #define NDIS_STATUS_INVALID_OID	                ((NDIS_STATUS)0xC0010017L)
       
   166 #define NDIS_STATUS_ADAPTER_REMOVED	            ((NDIS_STATUS)0xC0010018L)
       
   167 #define NDIS_STATUS_UNSUPPORTED_MEDIA           ((NDIS_STATUS)0xC0010019L)
       
   168 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE        ((NDIS_STATUS)0xC001001AL)
       
   169 #define NDIS_STATUS_FILE_NOT_FOUND              ((NDIS_STATUS)0xC001001BL)
       
   170 #define NDIS_STATUS_ERROR_READING_FILE          ((NDIS_STATUS)0xC001001CL)
       
   171 #define NDIS_STATUS_ALREADY_MAPPED              ((NDIS_STATUS)0xC001001DL)
       
   172 #define NDIS_STATUS_RESOURCE_CONFLICT           ((NDIS_STATUS)0xC001001EL)
       
   173 #define NDIS_STATUS_NO_CABLE                    ((NDIS_STATUS)0xC001001FL)
       
   174 
       
   175 #define NDIS_STATUS_INVALID_SAP	                ((NDIS_STATUS)0xC0010020L)
       
   176 #define NDIS_STATUS_SAP_IN_USE                  ((NDIS_STATUS)0xC0010021L)
       
   177 #define NDIS_STATUS_INVALID_ADDRESS             ((NDIS_STATUS)0xC0010022L)
       
   178 #define NDIS_STATUS_VC_NOT_ACTIVATED            ((NDIS_STATUS)0xC0010023L)
       
   179 #define NDIS_STATUS_DEST_OUT_OF_ORDER           ((NDIS_STATUS)0xC0010024L)
       
   180 #define NDIS_STATUS_VC_NOT_AVAILABLE            ((NDIS_STATUS)0xC0010025L)
       
   181 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE      ((NDIS_STATUS)0xC0010026L)
       
   182 #define NDIS_STATUS_INCOMPATABLE_QOS            ((NDIS_STATUS)0xC0010027L)
       
   183 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED      ((NDIS_STATUS)0xC0010028L)
       
   184 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION     ((NDIS_STATUS)0xC0010029L)
       
   185 
       
   186 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR       ((NDIS_STATUS)0xC0011000L)
       
   187 #define NDIS_STATUS_INVALID_DEVICE_REQUEST      ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
       
   188 #define NDIS_STATUS_NETWORK_UNREACHABLE         ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
       
   189 
       
   190 
       
   191 /* NDIS error codes for error logging */
       
   192 
       
   193 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT			            EVENT_NDIS_RESOURCE_CONFLICT
       
   194 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES			            EVENT_NDIS_OUT_OF_RESOURCE
       
   195 #define NDIS_ERROR_CODE_HARDWARE_FAILURE			            EVENT_NDIS_HARDWARE_FAILURE
       
   196 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND			            EVENT_NDIS_ADAPTER_NOT_FOUND
       
   197 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT			            EVENT_NDIS_INTERRUPT_CONNECT
       
   198 #define NDIS_ERROR_CODE_DRIVER_FAILURE				            EVENT_NDIS_DRIVER_FAILURE
       
   199 #define NDIS_ERROR_CODE_BAD_VERSION					              EVENT_NDIS_BAD_VERSION
       
   200 #define NDIS_ERROR_CODE_TIMEOUT						                EVENT_NDIS_TIMEOUT
       
   201 #define NDIS_ERROR_CODE_NETWORK_ADDRESS				            EVENT_NDIS_NETWORK_ADDRESS
       
   202 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION	        EVENT_NDIS_UNSUPPORTED_CONFIGURATION
       
   203 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER	      EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
       
   204 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER	  EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
       
   205 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS			          EVENT_NDIS_BAD_IO_BASE_ADDRESS
       
   206 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL			          EVENT_NDIS_RECEIVE_SPACE_SMALL
       
   207 #define NDIS_ERROR_CODE_ADAPTER_DISABLED			            EVENT_NDIS_ADAPTER_DISABLED
       
   208 
       
   209 
       
   210 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
       
   211 #define NDIS_MEMORY_CONTIGUOUS            0x00000001
       
   212 #define NDIS_MEMORY_NONCACHED             0x00000002
       
   213 
       
   214 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
       
   215 #define	NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT    0x00000001
       
   216 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT   0x00000002
       
   217 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
       
   218 #define NDIS_ATTRIBUTE_BUS_MASTER               0x00000008
       
   219 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER      0x00000010
       
   220 #define NDIS_ATTRIBUTE_DESERIALIZE              0x00000020
       
   221 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND       0x00000040
       
   222 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK       0x00000080
       
   223 #define NDIS_ATTRIBUTE_NOT_CO_NDIS              0x00000100
       
   224 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS    0x00000200
       
   225 
       
   226 
       
   227 /* Lock */
       
   228 
       
   229 typedef union _NDIS_RW_LOCK_REFCOUNT {
       
   230   UINT  RefCount;
       
   231   UCHAR  cacheLine[16];
       
   232 } NDIS_RW_LOCK_REFCOUNT;
       
   233 
       
   234 typedef struct _NDIS_RW_LOCK {
       
   235   union {
       
   236     struct {
       
   237       KSPIN_LOCK  SpinLock;
       
   238       PVOID  Context;
       
   239     } s;
       
   240     UCHAR  Reserved[16];
       
   241   } u;
       
   242 
       
   243   NDIS_RW_LOCK_REFCOUNT  RefCount[MAXIMUM_PROCESSORS];
       
   244 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
       
   245 
       
   246 typedef struct _LOCK_STATE {
       
   247   USHORT  LockState;
       
   248   KIRQL  OldIrql;
       
   249 } LOCK_STATE, *PLOCK_STATE;
       
   250 
       
   251 
       
   252 
       
   253 /* Timer */
       
   254 
       
   255 typedef VOID DDKAPI
       
   256 (*PNDIS_TIMER_FUNCTION)(
       
   257   /*IN*/ PVOID  SystemSpecific1,
       
   258   /*IN*/ PVOID  FunctionContext,
       
   259   /*IN*/ PVOID  SystemSpecific2,
       
   260   /*IN*/ PVOID  SystemSpecific3);
       
   261 
       
   262 typedef struct _NDIS_TIMER {
       
   263   KTIMER  Timer;
       
   264   KDPC  Dpc;
       
   265 } NDIS_TIMER, *PNDIS_TIMER;
       
   266 
       
   267 
       
   268 
       
   269 /* Hardware */
       
   270 
       
   271 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
       
   272 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
       
   273 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
       
   274 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
       
   275 
       
   276 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
       
   277 typedef enum _NDIS_HARDWARE_STATUS {
       
   278   NdisHardwareStatusReady,
       
   279   NdisHardwareStatusInitializing,
       
   280   NdisHardwareStatusReset,
       
   281   NdisHardwareStatusClosing,
       
   282   NdisHardwareStatusNotReady
       
   283 } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
       
   284 
       
   285 /* OID_GEN_GET_TIME_CAPS */
       
   286 typedef struct _GEN_GET_TIME_CAPS {
       
   287   ULONG  Flags;
       
   288   ULONG  ClockPrecision;
       
   289 } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
       
   290 
       
   291 /* Flag bits */
       
   292 #define	READABLE_LOCAL_CLOCK                    0x00000001
       
   293 #define	CLOCK_NETWORK_DERIVED                   0x00000002
       
   294 #define	CLOCK_PRECISION                         0x00000004
       
   295 #define	RECEIVE_TIME_INDICATION_CAPABLE         0x00000008
       
   296 #define	TIMED_SEND_CAPABLE                      0x00000010
       
   297 #define	TIME_STAMP_CAPABLE                      0x00000020
       
   298 
       
   299 /* OID_GEN_GET_NETCARD_TIME */
       
   300 typedef struct _GEN_GET_NETCARD_TIME {
       
   301   ULONGLONG  ReadTime;
       
   302 } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
       
   303 
       
   304 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
       
   305 typedef enum _NDIS_MEDIUM {
       
   306   NdisMedium802_3,
       
   307   NdisMedium802_5,
       
   308   NdisMediumFddi,
       
   309   NdisMediumWan,
       
   310   NdisMediumLocalTalk,
       
   311   NdisMediumDix,
       
   312   NdisMediumArcnetRaw,
       
   313   NdisMediumArcnet878_2,
       
   314   NdisMediumAtm,
       
   315   NdisMediumWirelessWan,
       
   316   NdisMediumIrda,
       
   317   NdisMediumBpc,
       
   318   NdisMediumCoWan,
       
   319   NdisMedium1394,
       
   320   NdisMediumMax
       
   321 } NDIS_MEDIUM, *PNDIS_MEDIUM;
       
   322 
       
   323 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
       
   324 #define NDIS_PACKET_TYPE_DIRECTED               0x00000001
       
   325 #define NDIS_PACKET_TYPE_MULTICAST              0x00000002
       
   326 #define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
       
   327 #define NDIS_PACKET_TYPE_BROADCAST              0x00000008
       
   328 #define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
       
   329 #define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
       
   330 #define NDIS_PACKET_TYPE_SMT                    0x00000040
       
   331 #define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
       
   332 #define NDIS_PACKET_TYPE_GROUP                  0x00001000
       
   333 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
       
   334 #define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
       
   335 #define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
       
   336 
       
   337 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
       
   338 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH       0x00000001
       
   339 #define NDIS_PROT_OPTION_NO_LOOPBACK            0x00000002
       
   340 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT      0x00000004
       
   341 
       
   342 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
       
   343 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA     0x00000001
       
   344 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED      0x00000002
       
   345 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND      0x00000004
       
   346 #define NDIS_MAC_OPTION_NO_LOOPBACK             0x00000008
       
   347 #define NDIS_MAC_OPTION_FULL_DUPLEX             0x00000010
       
   348 #define	NDIS_MAC_OPTION_EOTX_INDICATION         0x00000020
       
   349 #define	NDIS_MAC_OPTION_8021P_PRIORITY          0x00000040
       
   350 #define NDIS_MAC_OPTION_RESERVED                0x80000000
       
   351 
       
   352 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
       
   353 typedef enum _NDIS_MEDIA_STATE {
       
   354 	NdisMediaStateConnected,
       
   355 	NdisMediaStateDisconnected
       
   356 } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
       
   357 
       
   358 /* OID_GEN_SUPPORTED_GUIDS */
       
   359 typedef struct _NDIS_GUID {
       
   360 	GUID  Guid;
       
   361 	union {
       
   362 		NDIS_OID  Oid;
       
   363 		NDIS_STATUS  Status;
       
   364 	} u;
       
   365 	ULONG  Size;
       
   366 	ULONG  Flags;
       
   367 } NDIS_GUID, *PNDIS_GUID;
       
   368 
       
   369 #define	NDIS_GUID_TO_OID                  0x00000001
       
   370 #define	NDIS_GUID_TO_STATUS               0x00000002
       
   371 #define	NDIS_GUID_ANSI_STRING             0x00000004
       
   372 #define	NDIS_GUID_UNICODE_STRING          0x00000008
       
   373 #define	NDIS_GUID_ARRAY	                  0x00000010
       
   374 
       
   375 
       
   376 typedef struct _NDIS_PACKET_POOL {
       
   377   NDIS_SPIN_LOCK  SpinLock;
       
   378   struct _NDIS_PACKET *FreeList;
       
   379   UINT  PacketLength;
       
   380   UCHAR  Buffer[1];
       
   381 } NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
       
   382 
       
   383 /* NDIS_PACKET_PRIVATE.Flags constants */
       
   384 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO    0x40
       
   385 #define fPACKET_ALLOCATED_BY_NDIS               0x80
       
   386 
       
   387 typedef struct _NDIS_PACKET_PRIVATE {
       
   388   UINT  PhysicalCount;
       
   389   UINT  TotalLength;
       
   390   PNDIS_BUFFER  Head;
       
   391   PNDIS_BUFFER  Tail;
       
   392   PNDIS_PACKET_POOL  Pool;
       
   393   UINT  Count;
       
   394   ULONG  Flags;
       
   395   BOOLEAN	 ValidCounts;
       
   396   UCHAR  NdisPacketFlags;
       
   397   USHORT  NdisPacketOobOffset;
       
   398 } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
       
   399 
       
   400 typedef struct _NDIS_PACKET {
       
   401   NDIS_PACKET_PRIVATE  Private;
       
   402   union {
       
   403     struct {
       
   404       UCHAR  MiniportReserved[2 * sizeof(PVOID)];
       
   405       UCHAR  WrapperReserved[2 * sizeof(PVOID)];
       
   406     } s1;
       
   407     struct {
       
   408       UCHAR  MiniportReservedEx[3 * sizeof(PVOID)];
       
   409       UCHAR  WrapperReservedEx[sizeof(PVOID)];
       
   410     } s2;
       
   411     struct {
       
   412       UCHAR  MacReserved[4 * sizeof(PVOID)];
       
   413     } s3;
       
   414   } u;
       
   415   ULONG_PTR  Reserved[2];
       
   416   UCHAR  ProtocolReserved[1];
       
   417 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
       
   418 
       
   419 typedef enum _NDIS_CLASS_ID {
       
   420 	NdisClass802_3Priority,
       
   421 	NdisClassWirelessWanMbxMailbox,
       
   422 	NdisClassIrdaPacketInfo,
       
   423 	NdisClassAtmAALInfo
       
   424 } NDIS_CLASS_ID;
       
   425 
       
   426 typedef struct MediaSpecificInformation {
       
   427   UINT  NextEntryOffset;
       
   428   NDIS_CLASS_ID  ClassId;
       
   429   UINT  Size;
       
   430   UCHAR  ClassInformation[1];
       
   431 } MEDIA_SPECIFIC_INFORMATION;
       
   432 
       
   433 typedef struct _NDIS_PACKET_OOB_DATA {
       
   434   _ANONYMOUS_UNION union {
       
   435     ULONGLONG  TimeToSend;
       
   436     ULONGLONG  TimeSent;
       
   437   } DUMMYUNIONNAME;
       
   438   ULONGLONG  TimeReceived;
       
   439   UINT  HeaderSize;
       
   440   UINT  SizeMediaSpecificInfo;
       
   441   PVOID  MediaSpecificInformation;
       
   442   NDIS_STATUS  Status;
       
   443 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
       
   444 
       
   445 typedef struct _NDIS_PM_PACKET_PATTERN {
       
   446   ULONG  Priority;
       
   447   ULONG  Reserved;
       
   448   ULONG  MaskSize;
       
   449   ULONG  PatternOffset;
       
   450   ULONG  PatternSize;
       
   451   ULONG  PatternFlags;
       
   452 } NDIS_PM_PACKET_PATTERN,  *PNDIS_PM_PACKET_PATTERN;
       
   453 
       
   454 
       
   455 /* Request types used by NdisRequest */
       
   456 typedef enum _NDIS_REQUEST_TYPE {
       
   457   NdisRequestQueryInformation,
       
   458   NdisRequestSetInformation,
       
   459   NdisRequestQueryStatistics,
       
   460   NdisRequestOpen,
       
   461   NdisRequestClose,
       
   462   NdisRequestSend,
       
   463   NdisRequestTransferData,
       
   464   NdisRequestReset,
       
   465   NdisRequestGeneric1,
       
   466   NdisRequestGeneric2,
       
   467   NdisRequestGeneric3,
       
   468   NdisRequestGeneric4
       
   469 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
       
   470 
       
   471 typedef struct _NDIS_REQUEST {
       
   472   UCHAR  MacReserved[4 * sizeof(PVOID)];
       
   473   NDIS_REQUEST_TYPE  RequestType;
       
   474   union _DATA {
       
   475     struct QUERY_INFORMATION {
       
   476       NDIS_OID  Oid;
       
   477       PVOID  InformationBuffer;
       
   478       UINT  InformationBufferLength;
       
   479       UINT  BytesWritten;
       
   480       UINT  BytesNeeded;
       
   481     } QUERY_INFORMATION;
       
   482     struct SET_INFORMATION {
       
   483       NDIS_OID  Oid;
       
   484       PVOID  InformationBuffer;
       
   485       UINT  InformationBufferLength;
       
   486       UINT  BytesRead;
       
   487       UINT  BytesNeeded;
       
   488     } SET_INFORMATION;
       
   489  } DATA;
       
   490 #if (defined(NDIS50) || defined(NDIS51))
       
   491   UCHAR  NdisReserved[9 * sizeof(PVOID)];
       
   492   union {
       
   493     UCHAR  CallMgrReserved[2 * sizeof(PVOID)];
       
   494     UCHAR  ProtocolReserved[2 * sizeof(PVOID)];
       
   495   };
       
   496   UCHAR  MiniportReserved[2 * sizeof(PVOID)];
       
   497 #endif
       
   498 } NDIS_REQUEST, *PNDIS_REQUEST;
       
   499 
       
   500 
       
   501 
       
   502 /* Wide Area Networks definitions */
       
   503 
       
   504 typedef struct _NDIS_WAN_PACKET {
       
   505   LIST_ENTRY  WanPacketQueue;
       
   506   PUCHAR  CurrentBuffer;
       
   507   ULONG  CurrentLength;
       
   508   PUCHAR  StartBuffer;
       
   509   PUCHAR  EndBuffer;
       
   510   PVOID  ProtocolReserved1;
       
   511   PVOID  ProtocolReserved2;
       
   512   PVOID  ProtocolReserved3;
       
   513   PVOID  ProtocolReserved4;
       
   514   PVOID  MacReserved1;
       
   515   PVOID  MacReserved2;
       
   516   PVOID  MacReserved3;
       
   517   PVOID  MacReserved4;
       
   518 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
       
   519 
       
   520 
       
   521 
       
   522 /* DMA channel information */
       
   523 
       
   524 typedef struct _NDIS_DMA_DESCRIPTION {
       
   525   BOOLEAN  DemandMode;
       
   526   BOOLEAN  AutoInitialize;
       
   527   BOOLEAN  DmaChannelSpecified;
       
   528   DMA_WIDTH  DmaWidth;
       
   529   DMA_SPEED  DmaSpeed;
       
   530   ULONG  DmaPort;
       
   531   ULONG  DmaChannel;
       
   532 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
       
   533 
       
   534 typedef struct _NDIS_DMA_BLOCK {
       
   535   PVOID  MapRegisterBase;
       
   536   KEVENT  AllocationEvent;
       
   537   PADAPTER_OBJECT  SystemAdapterObject;
       
   538   PVOID  Miniport;
       
   539   BOOLEAN  InProgress;
       
   540 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
       
   541 
       
   542 
       
   543 /* Possible hardware architecture */
       
   544 typedef enum _NDIS_INTERFACE_TYPE {
       
   545 	NdisInterfaceInternal = Internal,
       
   546 	NdisInterfaceIsa = Isa,
       
   547 	NdisInterfaceEisa = Eisa,
       
   548 	NdisInterfaceMca = MicroChannel,
       
   549 	NdisInterfaceTurboChannel = TurboChannel,
       
   550 	NdisInterfacePci = PCIBus,
       
   551 	NdisInterfacePcMcia = PCMCIABus,
       
   552 	NdisInterfaceCBus = CBus,
       
   553 	NdisInterfaceMPIBus = MPIBus,
       
   554 	NdisInterfaceMPSABus = MPSABus,
       
   555 	NdisInterfaceProcessorInternal = ProcessorInternal,
       
   556 	NdisInterfaceInternalPowerBus = InternalPowerBus,
       
   557 	NdisInterfacePNPISABus = PNPISABus,
       
   558 	NdisInterfacePNPBus = PNPBus,
       
   559 	NdisMaximumInterfaceType
       
   560 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
       
   561 
       
   562 #define NdisInterruptLevelSensitive       LevelSensitive
       
   563 #define NdisInterruptLatched              Latched
       
   564 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
       
   565 
       
   566 
       
   567 typedef enum _NDIS_PARAMETER_TYPE {
       
   568   NdisParameterInteger,
       
   569   NdisParameterHexInteger,
       
   570   NdisParameterString,
       
   571   NdisParameterMultiString,
       
   572   NdisParameterBinary
       
   573 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
       
   574 
       
   575 typedef struct {
       
   576 	USHORT  Length;
       
   577 	PVOID  Buffer;
       
   578 } BINARY_DATA;
       
   579 
       
   580 typedef struct _NDIS_CONFIGURATION_PARAMETER {
       
   581   NDIS_PARAMETER_TYPE  ParameterType;
       
   582   union {
       
   583     ULONG  IntegerData;
       
   584     NDIS_STRING  StringData;
       
   585     BINARY_DATA  BinaryData;
       
   586   } ParameterData;
       
   587 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
       
   588 
       
   589 
       
   590 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
       
   591 
       
   592 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
       
   593   NDIS_PHYSICAL_ADDRESS  PhysicalAddress;
       
   594   UINT  Length;
       
   595 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
       
   596 
       
   597 typedef struct _NDIS_WAN_LINE_DOWN {
       
   598   UCHAR  RemoteAddress[6];
       
   599   UCHAR  LocalAddress[6];
       
   600 } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
       
   601 
       
   602 typedef struct _NDIS_WAN_LINE_UP {
       
   603   ULONG  LinkSpeed;
       
   604   ULONG  MaximumTotalSize;
       
   605   NDIS_WAN_QUALITY  Quality;
       
   606   USHORT  SendWindow;
       
   607   UCHAR  RemoteAddress[6];
       
   608   /*OUT*/ UCHAR  LocalAddress[6];
       
   609   ULONG  ProtocolBufferLength;
       
   610   PUCHAR  ProtocolBuffer;
       
   611   USHORT  ProtocolType;
       
   612   NDIS_STRING  DeviceName;
       
   613 } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
       
   614 
       
   615 
       
   616 typedef VOID DDKAPI
       
   617 (*ADAPTER_SHUTDOWN_HANDLER)(
       
   618   /*IN*/ PVOID  ShutdownContext);
       
   619 
       
   620 
       
   621 typedef struct _OID_LIST    OID_LIST, *POID_LIST;
       
   622 
       
   623 /* PnP state */
       
   624 
       
   625 typedef enum _NDIS_PNP_DEVICE_STATE {
       
   626   NdisPnPDeviceAdded,
       
   627   NdisPnPDeviceStarted,
       
   628   NdisPnPDeviceQueryStopped,
       
   629   NdisPnPDeviceStopped,
       
   630   NdisPnPDeviceQueryRemoved,
       
   631   NdisPnPDeviceRemoved,
       
   632   NdisPnPDeviceSurpriseRemoved
       
   633 } NDIS_PNP_DEVICE_STATE;
       
   634 
       
   635 #define	NDIS_DEVICE_NOT_STOPPABLE                 0x00000001
       
   636 #define	NDIS_DEVICE_NOT_REMOVEABLE                0x00000002
       
   637 #define	NDIS_DEVICE_NOT_SUSPENDABLE	              0x00000004
       
   638 #define NDIS_DEVICE_DISABLE_PM                    0x00000008
       
   639 #define NDIS_DEVICE_DISABLE_WAKE_UP               0x00000010
       
   640 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT     0x00000020
       
   641 #define NDIS_DEVICE_RESERVED                      0x00000040
       
   642 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET  0x00000080
       
   643 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
       
   644 
       
   645 
       
   646 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
       
   647 typedef struct _NETWORK_ADDRESS {
       
   648   USHORT  AddressLength; 
       
   649   USHORT  AddressType; 
       
   650   UCHAR  Address[1]; 
       
   651 } NETWORK_ADDRESS, *PNETWORK_ADDRESS;
       
   652 
       
   653 typedef struct _NETWORK_ADDRESS_LIST {
       
   654 	LONG  AddressCount; 
       
   655 	USHORT  AddressType; 
       
   656 	NETWORK_ADDRESS  Address[1]; 
       
   657 } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
       
   658 
       
   659 /* Protocol types supported by NDIS */
       
   660 #define	NDIS_PROTOCOL_ID_DEFAULT        0x00
       
   661 #define	NDIS_PROTOCOL_ID_TCP_IP         0x02
       
   662 #define	NDIS_PROTOCOL_ID_IPX            0x06
       
   663 #define	NDIS_PROTOCOL_ID_NBF            0x07
       
   664 #define	NDIS_PROTOCOL_ID_MAX            0x0F
       
   665 #define	NDIS_PROTOCOL_ID_MASK           0x0F
       
   666 
       
   667 
       
   668 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
       
   669 typedef struct _TRANSPORT_HEADER_OFFSET {
       
   670 	USHORT  ProtocolType; 
       
   671 	USHORT  HeaderOffset; 
       
   672 } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
       
   673 
       
   674 
       
   675 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
       
   676 typedef struct _NDIS_CO_LINK_SPEED {
       
   677   ULONG  Outbound;
       
   678   ULONG  Inbound;
       
   679 } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
       
   680 
       
   681 typedef ULONG NDIS_AF, *PNDIS_AF;
       
   682 #define CO_ADDRESS_FAMILY_Q2931           ((NDIS_AF)0x1)
       
   683 #define CO_ADDRESS_FAMILY_PSCHED          ((NDIS_AF)0x2)
       
   684 #define CO_ADDRESS_FAMILY_L2TP            ((NDIS_AF)0x3)
       
   685 #define CO_ADDRESS_FAMILY_IRDA            ((NDIS_AF)0x4)
       
   686 #define CO_ADDRESS_FAMILY_1394            ((NDIS_AF)0x5)
       
   687 #define CO_ADDRESS_FAMILY_PPP             ((NDIS_AF)0x6)
       
   688 #define CO_ADDRESS_FAMILY_TAPI            ((NDIS_AF)0x800)
       
   689 #define CO_ADDRESS_FAMILY_TAPI_PROXY      ((NDIS_AF)0x801)
       
   690 
       
   691 #define CO_ADDRESS_FAMILY_PROXY           0x80000000
       
   692 
       
   693 typedef struct {
       
   694   NDIS_AF  AddressFamily;
       
   695   ULONG  MajorVersion;
       
   696   ULONG  MinorVersion;
       
   697 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
       
   698 
       
   699 typedef struct _CO_FLOW_PARAMETERS {
       
   700   ULONG  TokenRate;
       
   701   ULONG  TokenBucketSize;
       
   702   ULONG  PeakBandwidth;
       
   703   ULONG  Latency;
       
   704   ULONG  DelayVariation;
       
   705   SERVICETYPE  ServiceType;
       
   706   ULONG  MaxSduSize;
       
   707   ULONG  MinimumPolicedSize;
       
   708 } CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
       
   709 
       
   710 typedef struct _CO_SPECIFIC_PARAMETERS {
       
   711   ULONG  ParamType;
       
   712   ULONG  Length;
       
   713   UCHAR  Parameters[1];
       
   714 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
       
   715 
       
   716 typedef struct _CO_CALL_MANAGER_PARAMETERS {
       
   717   CO_FLOW_PARAMETERS  Transmit;
       
   718   CO_FLOW_PARAMETERS  Receive;
       
   719   CO_SPECIFIC_PARAMETERS  CallMgrSpecific;
       
   720 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
       
   721 
       
   722 /* CO_MEDIA_PARAMETERS.Flags constants */
       
   723 #define RECEIVE_TIME_INDICATION           0x00000001
       
   724 #define USE_TIME_STAMPS                   0x00000002
       
   725 #define TRANSMIT_VC	                      0x00000004
       
   726 #define RECEIVE_VC                        0x00000008
       
   727 #define INDICATE_ERRED_PACKETS            0x00000010
       
   728 #define INDICATE_END_OF_TX                0x00000020
       
   729 #define RESERVE_RESOURCES_VC              0x00000040
       
   730 #define	ROUND_DOWN_FLOW	                  0x00000080
       
   731 #define	ROUND_UP_FLOW                     0x00000100
       
   732 
       
   733 typedef struct _CO_MEDIA_PARAMETERS {
       
   734   ULONG  Flags;
       
   735   ULONG  ReceivePriority;
       
   736   ULONG  ReceiveSizeHint;
       
   737   CO_SPECIFIC_PARAMETERS  MediaSpecific;
       
   738 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
       
   739 
       
   740 /* CO_CALL_PARAMETERS.Flags constants */
       
   741 #define PERMANENT_VC                      0x00000001
       
   742 #define CALL_PARAMETERS_CHANGED           0x00000002
       
   743 #define QUERY_CALL_PARAMETERS             0x00000004
       
   744 #define BROADCAST_VC                      0x00000008
       
   745 #define MULTIPOINT_VC                     0x00000010
       
   746 
       
   747 typedef struct _CO_CALL_PARAMETERS {
       
   748   ULONG  Flags;
       
   749   PCO_CALL_MANAGER_PARAMETERS  CallMgrParameters;
       
   750   PCO_MEDIA_PARAMETERS  MediaParameters;
       
   751 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
       
   752 
       
   753 typedef struct _CO_SAP {
       
   754   ULONG  SapType;
       
   755   ULONG  SapLength;
       
   756   UCHAR  Sap[1];
       
   757 } CO_SAP, *PCO_SAP;
       
   758 
       
   759 typedef struct _NDIS_IPSEC_PACKET_INFO {
       
   760   _ANONYMOUS_UNION union {
       
   761     struct {
       
   762       NDIS_HANDLE  OffloadHandle;
       
   763       NDIS_HANDLE  NextOffloadHandle;
       
   764     } Transmit;
       
   765     struct {
       
   766       ULONG  SA_DELETE_REQ : 1;
       
   767       ULONG  CRYPTO_DONE : 1;
       
   768       ULONG  NEXT_CRYPTO_DONE : 1;
       
   769       ULONG  CryptoStatus;
       
   770     } Receive;
       
   771   } DUMMYUNIONNAME;
       
   772 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
       
   773 
       
   774 /* NDIS_MAC_FRAGMENT.Errors constants */
       
   775 #define WAN_ERROR_CRC               			0x00000001
       
   776 #define WAN_ERROR_FRAMING           			0x00000002
       
   777 #define WAN_ERROR_HARDWAREOVERRUN   			0x00000004
       
   778 #define WAN_ERROR_BUFFEROVERRUN     			0x00000008
       
   779 #define WAN_ERROR_TIMEOUT           			0x00000010
       
   780 #define WAN_ERROR_ALIGNMENT         			0x00000020
       
   781 
       
   782 typedef struct _NDIS_MAC_FRAGMENT {
       
   783   NDIS_HANDLE  NdisLinkContext;
       
   784   ULONG  Errors;
       
   785 } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
       
   786 
       
   787 typedef struct _NDIS_MAC_LINE_DOWN {
       
   788   NDIS_HANDLE  NdisLinkContext;
       
   789 } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
       
   790 
       
   791 typedef struct _NDIS_MAC_LINE_UP {
       
   792   ULONG  LinkSpeed;
       
   793   NDIS_WAN_QUALITY  Quality;
       
   794   USHORT  SendWindow;
       
   795   NDIS_HANDLE  ConnectionWrapperID;
       
   796   NDIS_HANDLE  NdisLinkHandle;
       
   797   NDIS_HANDLE  NdisLinkContext;
       
   798 } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
       
   799 
       
   800 typedef struct _NDIS_PACKET_8021Q_INFO {
       
   801 	_ANONYMOUS_UNION union {
       
   802 		struct {
       
   803 			UINT32  UserPriority : 3;
       
   804 			UINT32  CanonicalFormatId : 1;
       
   805 			UINT32  VlanId : 12;
       
   806 			UINT32  Reserved : 16;
       
   807 		} TagHeader;
       
   808 		PVOID  Value;
       
   809 	} DUMMYUNIONNAME;
       
   810 } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
       
   811 
       
   812 typedef enum _NDIS_PER_PACKET_INFO {
       
   813 	TcpIpChecksumPacketInfo,
       
   814 	IpSecPacketInfo,
       
   815 	TcpLargeSendPacketInfo,
       
   816 	ClassificationHandlePacketInfo,
       
   817 	NdisReserved,
       
   818 	ScatterGatherListPacketInfo,
       
   819 	Ieee8021QInfo,
       
   820 	OriginalPacketInfo,
       
   821 	PacketCancelId,
       
   822 	MaxPerPacketInfo
       
   823 } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
       
   824 
       
   825 typedef struct _NDIS_PACKET_EXTENSION {
       
   826   PVOID  NdisPacketInfo[MaxPerPacketInfo];
       
   827 } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
       
   828 
       
   829 /*
       
   830  * PNDIS_PACKET
       
   831  * NDIS_GET_ORIGINAL_PACKET(
       
   832  * IN PNDIS_PACKET  Packet);
       
   833  */
       
   834 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
       
   835   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
       
   836 
       
   837 /*
       
   838  * PVOID
       
   839  * NDIS_GET_PACKET_CANCEL_ID(
       
   840  * IN PNDIS_PACKET  Packet);
       
   841  */
       
   842 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
       
   843   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
       
   844 
       
   845 /*
       
   846  * PNDIS_PACKET_EXTENSION
       
   847  * NDIS_PACKET_EXTENSION_FROM_PACKET(
       
   848  * IN PNDIS_PACKET  Packet);
       
   849  */
       
   850 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
       
   851   ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
       
   852     + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
       
   853 
       
   854 /*
       
   855  * PVOID
       
   856  * NDIS_PER_PACKET_INFO_FROM_PACKET(
       
   857  * IN OUT  PNDIS_PACKET  Packet,
       
   858  * IN NDIS_PER_PACKET_INFO  InfoType);
       
   859  */
       
   860 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
       
   861   ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
       
   862     + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
       
   863 
       
   864 /*
       
   865  * VOID
       
   866  * NDIS_SET_ORIGINAL_PACKET(
       
   867  * IN OUT  PNDIS_PACKET  Packet,
       
   868  * IN PNDIS_PACKET  OriginalPacket);
       
   869  */
       
   870 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
       
   871   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
       
   872 
       
   873 /*
       
   874  * VOID
       
   875  * NDIS_SET_PACKET_CANCEL_ID(
       
   876  * IN PNDIS_PACKET  Packet
       
   877  * IN ULONG_PTR  CancelId);
       
   878  */
       
   879 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
       
   880   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
       
   881 
       
   882 typedef enum _NDIS_TASK {
       
   883   TcpIpChecksumNdisTask,
       
   884   IpSecNdisTask,
       
   885   TcpLargeSendNdisTask,
       
   886   MaxNdisTask
       
   887 } NDIS_TASK, *PNDIS_TASK;
       
   888 
       
   889 typedef struct _NDIS_TASK_IPSEC {
       
   890   struct {
       
   891     ULONG  AH_ESP_COMBINED;
       
   892     ULONG  TRANSPORT_TUNNEL_COMBINED;
       
   893     ULONG  V4_OPTIONS;
       
   894     ULONG  RESERVED;
       
   895   } Supported;
       
   896  
       
   897   struct {
       
   898     ULONG  MD5 : 1;
       
   899     ULONG  SHA_1 : 1;
       
   900     ULONG  Transport : 1;
       
   901     ULONG  Tunnel : 1;
       
   902     ULONG  Send : 1;
       
   903     ULONG  Receive : 1;
       
   904   } V4AH;
       
   905  
       
   906   struct {
       
   907     ULONG  DES : 1;
       
   908     ULONG  RESERVED : 1;
       
   909     ULONG  TRIPLE_DES : 1;
       
   910     ULONG  NULL_ESP : 1;
       
   911     ULONG  Transport : 1;
       
   912     ULONG  Tunnel : 1;
       
   913     ULONG  Send : 1;
       
   914     ULONG  Receive : 1;
       
   915   } V4ESP;
       
   916 } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
       
   917 
       
   918 typedef struct _NDIS_TASK_OFFLOAD {
       
   919   ULONG  Version;
       
   920   ULONG  Size;
       
   921   NDIS_TASK  Task;
       
   922   ULONG  OffsetNextTask;
       
   923   ULONG  TaskBufferLength;
       
   924   UCHAR  TaskBuffer[1];
       
   925 } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
       
   926 
       
   927 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
       
   928 #define NDIS_TASK_OFFLOAD_VERSION 1
       
   929 
       
   930 typedef enum _NDIS_ENCAPSULATION {
       
   931   UNSPECIFIED_Encapsulation,
       
   932   NULL_Encapsulation,
       
   933   IEEE_802_3_Encapsulation,
       
   934   IEEE_802_5_Encapsulation,
       
   935   LLC_SNAP_ROUTED_Encapsulation,
       
   936   LLC_SNAP_BRIDGED_Encapsulation
       
   937 } NDIS_ENCAPSULATION;
       
   938 
       
   939 typedef struct _NDIS_ENCAPSULATION_FORMAT {
       
   940   NDIS_ENCAPSULATION  Encapsulation;
       
   941   struct {
       
   942     ULONG  FixedHeaderSize : 1;
       
   943     ULONG  Reserved : 31;
       
   944   } Flags;
       
   945   ULONG  EncapsulationHeaderSize;
       
   946 } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
       
   947 
       
   948 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
       
   949   struct {
       
   950     ULONG  IpOptionsSupported:1;
       
   951     ULONG  TcpOptionsSupported:1;
       
   952     ULONG  TcpChecksum:1;
       
   953     ULONG  UdpChecksum:1;
       
   954     ULONG  IpChecksum:1;
       
   955   } V4Transmit;
       
   956  
       
   957   struct {
       
   958     ULONG  IpOptionsSupported : 1;
       
   959     ULONG  TcpOptionsSupported : 1;
       
   960     ULONG  TcpChecksum : 1;
       
   961     ULONG  UdpChecksum : 1;
       
   962     ULONG  IpChecksum : 1;
       
   963   } V4Receive;
       
   964  
       
   965   struct {
       
   966     ULONG  IpOptionsSupported : 1;
       
   967     ULONG  TcpOptionsSupported : 1;
       
   968     ULONG  TcpChecksum : 1;
       
   969     ULONG  UdpChecksum : 1;
       
   970   } V6Transmit;
       
   971  
       
   972   struct {
       
   973     ULONG  IpOptionsSupported : 1;
       
   974     ULONG  TcpOptionsSupported : 1;
       
   975     ULONG  TcpChecksum : 1;
       
   976     ULONG  UdpChecksum : 1;
       
   977   } V6Receive;
       
   978 } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
       
   979 
       
   980 typedef struct _NDIS_TASK_TCP_LARGE_SEND {
       
   981   ULONG  Version;
       
   982   ULONG  MaxOffLoadSize;
       
   983   ULONG  MinSegmentCount;
       
   984   BOOLEAN  TcpOptions;
       
   985   BOOLEAN  IpOptions;
       
   986 } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
       
   987 
       
   988 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
       
   989   _ANONYMOUS_UNION union {
       
   990     struct {
       
   991       ULONG  NdisPacketChecksumV4 : 1;
       
   992       ULONG  NdisPacketChecksumV6 : 1;
       
   993       ULONG  NdisPacketTcpChecksum : 1;
       
   994       ULONG  NdisPacketUdpChecksum : 1;
       
   995       ULONG  NdisPacketIpChecksum : 1;
       
   996       } Transmit;
       
   997  
       
   998     struct {
       
   999       ULONG  NdisPacketTcpChecksumFailed : 1;
       
  1000       ULONG  NdisPacketUdpChecksumFailed : 1;
       
  1001       ULONG  NdisPacketIpChecksumFailed : 1;
       
  1002       ULONG  NdisPacketTcpChecksumSucceeded : 1;
       
  1003       ULONG  NdisPacketUdpChecksumSucceeded : 1;
       
  1004       ULONG  NdisPacketIpChecksumSucceeded : 1;
       
  1005       ULONG  NdisPacketLoopback : 1;
       
  1006     } Receive;
       
  1007     ULONG  Value;
       
  1008   } DUMMYUNIONNAME;
       
  1009 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
       
  1010 
       
  1011 typedef struct _NDIS_WAN_CO_FRAGMENT {
       
  1012   ULONG  Errors;
       
  1013 } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
       
  1014 
       
  1015 typedef struct _NDIS_WAN_FRAGMENT {
       
  1016   UCHAR  RemoteAddress[6];
       
  1017   UCHAR  LocalAddress[6];
       
  1018 } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
       
  1019 
       
  1020 typedef struct _WAN_CO_LINKPARAMS {
       
  1021   ULONG  TransmitSpeed; 
       
  1022   ULONG  ReceiveSpeed; 
       
  1023   ULONG  SendWindow; 
       
  1024 } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
       
  1025 
       
  1026 
       
  1027 /* Call Manager */
       
  1028 
       
  1029 typedef VOID DDKAPI
       
  1030 (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
       
  1031   /*IN*/ NDIS_STATUS  Status,
       
  1032   /*IN*/ NDIS_HANDLE  CallMgrVcContext,
       
  1033   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1034 
       
  1035 typedef NDIS_STATUS DDKAPI
       
  1036 (*CM_ADD_PARTY_HANDLER)(
       
  1037   /*IN*/ NDIS_HANDLE  CallMgrVcContext,
       
  1038   /*IN OUT*/ PCO_CALL_PARAMETERS  CallParameters,
       
  1039   /*IN*/ NDIS_HANDLE  NdisPartyHandle,
       
  1040   /*OUT*/ PNDIS_HANDLE  CallMgrPartyContext);
       
  1041 
       
  1042 typedef NDIS_STATUS DDKAPI
       
  1043 (*CM_CLOSE_AF_HANDLER)(
       
  1044   /*IN*/ NDIS_HANDLE  CallMgrAfContext);
       
  1045 
       
  1046 typedef NDIS_STATUS DDKAPI
       
  1047 (*CM_CLOSE_CALL_HANDLER)(
       
  1048   /*IN*/ NDIS_HANDLE  CallMgrVcContext,
       
  1049   /*IN*/ NDIS_HANDLE  CallMgrPartyContext  /*OPTIONAL*/,
       
  1050   /*IN*/ PVOID  CloseData  /*OPTIONAL*/,
       
  1051   /*IN*/ UINT  Size  /*OPTIONAL*/);
       
  1052 
       
  1053 typedef NDIS_STATUS DDKAPI
       
  1054 (*CM_DEREG_SAP_HANDLER)(
       
  1055   /*IN*/ NDIS_HANDLE  CallMgrSapContext);
       
  1056 
       
  1057 typedef VOID DDKAPI
       
  1058 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
       
  1059   /*IN*/ NDIS_STATUS  Status,
       
  1060   /*IN*/ NDIS_HANDLE  CallMgrVcContext);
       
  1061 
       
  1062 typedef NDIS_STATUS DDKAPI
       
  1063 (*CM_DROP_PARTY_HANDLER)(
       
  1064   /*IN*/ NDIS_HANDLE  CallMgrPartyContext,
       
  1065   /*IN*/ PVOID  CloseData  /*OPTIONAL*/,
       
  1066   /*IN*/ UINT  Size  /*OPTIONAL*/);
       
  1067 
       
  1068 typedef VOID DDKAPI
       
  1069 (*CM_INCOMING_CALL_COMPLETE_HANDLER)(
       
  1070   /*IN*/ NDIS_STATUS  Status,
       
  1071   /*IN*/ NDIS_HANDLE  CallMgrVcContext,
       
  1072   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1073 
       
  1074 typedef NDIS_STATUS DDKAPI
       
  1075 (*CM_MAKE_CALL_HANDLER)(
       
  1076   /*IN*/ NDIS_HANDLE  CallMgrVcContext,
       
  1077   /*IN OUT*/ PCO_CALL_PARAMETERS  CallParameters,
       
  1078   /*IN*/ NDIS_HANDLE  NdisPartyHandle	/*OPTIONAL*/,
       
  1079   /*OUT*/ PNDIS_HANDLE  CallMgrPartyContext  /*OPTIONAL*/);
       
  1080 
       
  1081 typedef NDIS_STATUS DDKAPI
       
  1082 (*CM_MODIFY_CALL_QOS_HANDLER)(
       
  1083   /*IN*/ NDIS_HANDLE  CallMgrVcContext,
       
  1084   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1085 
       
  1086 typedef NDIS_STATUS DDKAPI
       
  1087 (*CM_OPEN_AF_HANDLER)(
       
  1088   /*IN*/ NDIS_HANDLE  CallMgrBindingContext,
       
  1089   /*IN*/ PCO_ADDRESS_FAMILY  AddressFamily,
       
  1090   /*IN*/ NDIS_HANDLE  NdisAfHandle,
       
  1091   /*OUT*/ PNDIS_HANDLE  CallMgrAfContext);
       
  1092 
       
  1093 typedef NDIS_STATUS DDKAPI
       
  1094 (*CM_REG_SAP_HANDLER)(
       
  1095   /*IN*/ NDIS_HANDLE  CallMgrAfContext,
       
  1096   /*IN*/ PCO_SAP  Sap,
       
  1097   /*IN*/ NDIS_HANDLE  NdisSapHandle,
       
  1098   /*OUT*/ PNDIS_HANDLE  CallMgrSapContext);
       
  1099 
       
  1100 typedef NDIS_STATUS DDKAPI
       
  1101 (*CO_CREATE_VC_HANDLER)(
       
  1102   /*IN*/ NDIS_HANDLE  ProtocolAfContext,
       
  1103   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  1104   /*OUT*/ PNDIS_HANDLE  ProtocolVcContext);
       
  1105 
       
  1106 typedef NDIS_STATUS DDKAPI
       
  1107 (*CO_DELETE_VC_HANDLER)(
       
  1108   /*IN*/ NDIS_HANDLE  ProtocolVcContext);
       
  1109 
       
  1110 typedef VOID DDKAPI
       
  1111 (*CO_REQUEST_COMPLETE_HANDLER)(
       
  1112   /*IN*/ NDIS_STATUS  Status,
       
  1113   /*IN*/ NDIS_HANDLE  ProtocolAfContext  /*OPTIONAL*/,
       
  1114   /*IN*/ NDIS_HANDLE  ProtocolVcContext  /*OPTIONAL*/,
       
  1115   /*IN*/ NDIS_HANDLE  ProtocolPartyContext  /*OPTIONAL*/,
       
  1116   /*IN*/ PNDIS_REQUEST  NdisRequest);
       
  1117 
       
  1118 typedef NDIS_STATUS DDKAPI
       
  1119 (*CO_REQUEST_HANDLER)(
       
  1120   /*IN*/ NDIS_HANDLE  ProtocolAfContext,
       
  1121   /*IN*/ NDIS_HANDLE  ProtocolVcContext  /*OPTIONAL*/,
       
  1122   /*IN*/ NDIS_HANDLE	ProtocolPartyContext  /*OPTIONAL*/,
       
  1123   /*IN OUT*/ PNDIS_REQUEST  NdisRequest);
       
  1124 
       
  1125 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
       
  1126 	UCHAR  MajorVersion;
       
  1127 	UCHAR  MinorVersion;
       
  1128 	USHORT  Filler;
       
  1129 	UINT  Reserved;
       
  1130 	CO_CREATE_VC_HANDLER  CmCreateVcHandler;
       
  1131 	CO_DELETE_VC_HANDLER  CmDeleteVcHandler;
       
  1132 	CM_OPEN_AF_HANDLER  CmOpenAfHandler;
       
  1133 	CM_CLOSE_AF_HANDLER	 CmCloseAfHandler;
       
  1134 	CM_REG_SAP_HANDLER  CmRegisterSapHandler;
       
  1135 	CM_DEREG_SAP_HANDLER  CmDeregisterSapHandler;
       
  1136 	CM_MAKE_CALL_HANDLER  CmMakeCallHandler;
       
  1137 	CM_CLOSE_CALL_HANDLER  CmCloseCallHandler;
       
  1138 	CM_INCOMING_CALL_COMPLETE_HANDLER  CmIncomingCallCompleteHandler;
       
  1139 	CM_ADD_PARTY_HANDLER  CmAddPartyHandler;
       
  1140 	CM_DROP_PARTY_HANDLER  CmDropPartyHandler;
       
  1141 	CM_ACTIVATE_VC_COMPLETE_HANDLER  CmActivateVcCompleteHandler;
       
  1142 	CM_DEACTIVATE_VC_COMPLETE_HANDLER  CmDeactivateVcCompleteHandler;
       
  1143 	CM_MODIFY_CALL_QOS_HANDLER  CmModifyCallQoSHandler;
       
  1144 	CO_REQUEST_HANDLER  CmRequestHandler;
       
  1145 	CO_REQUEST_COMPLETE_HANDLER  CmRequestCompleteHandler;
       
  1146 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
       
  1147 
       
  1148 
       
  1149 
       
  1150 /* Call Manager clients */
       
  1151 
       
  1152 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
       
  1153   /*IN*/ NDIS_STATUS Status,
       
  1154   /*IN*/ NDIS_HANDLE ProtocolAfContext,
       
  1155   /*IN*/ NDIS_HANDLE NdisAfHandle);
       
  1156 
       
  1157 typedef VOID DDKAPI
       
  1158 (*CL_CLOSE_AF_COMPLETE_HANDLER)(
       
  1159   /*IN*/ NDIS_STATUS  Status,
       
  1160   /*IN*/ NDIS_HANDLE  ProtocolAfContext);
       
  1161 
       
  1162 typedef VOID DDKAPI
       
  1163 (*CL_REG_SAP_COMPLETE_HANDLER)(
       
  1164   /*IN*/ NDIS_STATUS  Status,
       
  1165   /*IN*/ NDIS_HANDLE  ProtocolSapContext,
       
  1166   /*IN*/ PCO_SAP  Sap,
       
  1167   /*IN*/ NDIS_HANDLE  NdisSapHandle);
       
  1168 
       
  1169 typedef VOID DDKAPI
       
  1170 (*CL_DEREG_SAP_COMPLETE_HANDLER)(
       
  1171   /*IN*/ NDIS_STATUS  Status,
       
  1172   /*IN*/ NDIS_HANDLE  ProtocolSapContext);
       
  1173 
       
  1174 typedef VOID DDKAPI
       
  1175 (*CL_MAKE_CALL_COMPLETE_HANDLER)(
       
  1176   /*IN*/ NDIS_STATUS  Status,
       
  1177   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1178   /*IN*/ NDIS_HANDLE  NdisPartyHandle  /*OPTIONAL*/,
       
  1179   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1180 
       
  1181 typedef VOID DDKAPI
       
  1182 (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
       
  1183   /*IN*/ NDIS_STATUS  Status,
       
  1184   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1185   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1186 
       
  1187 typedef VOID DDKAPI
       
  1188 (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
       
  1189   /*IN*/ NDIS_STATUS  Status,
       
  1190   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1191   /*IN*/ NDIS_HANDLE  ProtocolPartyContext  /*OPTIONAL*/);
       
  1192 
       
  1193 typedef VOID DDKAPI
       
  1194 (*CL_ADD_PARTY_COMPLETE_HANDLER)(
       
  1195   /*IN*/ NDIS_STATUS  Status,
       
  1196   /*IN*/ NDIS_HANDLE  ProtocolPartyContext,
       
  1197   /*IN*/ NDIS_HANDLE  NdisPartyHandle,
       
  1198   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1199 
       
  1200 typedef VOID DDKAPI
       
  1201 (*CL_DROP_PARTY_COMPLETE_HANDLER)(
       
  1202   /*IN*/ NDIS_STATUS  Status,
       
  1203   /*IN*/ NDIS_HANDLE  ProtocolPartyContext);
       
  1204 
       
  1205 typedef NDIS_STATUS DDKAPI
       
  1206 (*CL_INCOMING_CALL_HANDLER)(
       
  1207   /*IN*/ NDIS_HANDLE  ProtocolSapContext,
       
  1208   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1209   /*IN OUT*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1210 
       
  1211 typedef VOID DDKAPI
       
  1212 (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
       
  1213   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1214   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  1215 
       
  1216 typedef VOID DDKAPI
       
  1217 (*CL_INCOMING_CLOSE_CALL_HANDLER)(
       
  1218   /*IN*/ NDIS_STATUS  CloseStatus,
       
  1219   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1220   /*IN*/ PVOID  CloseData  /*OPTIONAL*/,
       
  1221   /*IN*/ UINT  Size  /*OPTIONAL*/);
       
  1222 
       
  1223 typedef VOID DDKAPI
       
  1224 (*CL_INCOMING_DROP_PARTY_HANDLER)(
       
  1225   /*IN*/ NDIS_STATUS  DropStatus,
       
  1226   /*IN*/ NDIS_HANDLE  ProtocolPartyContext,
       
  1227   /*IN*/ PVOID  CloseData  /*OPTIONAL*/,
       
  1228   /*IN*/ UINT  Size  /*OPTIONAL*/);
       
  1229 
       
  1230 typedef VOID DDKAPI
       
  1231 (*CL_CALL_CONNECTED_HANDLER)(
       
  1232   /*IN*/ NDIS_HANDLE  ProtocolVcContext);
       
  1233 
       
  1234 
       
  1235 typedef struct _NDIS_CLIENT_CHARACTERISTICS {
       
  1236   UCHAR  MajorVersion;
       
  1237   UCHAR  MinorVersion;
       
  1238   USHORT  Filler;
       
  1239   UINT  Reserved;
       
  1240   CO_CREATE_VC_HANDLER  ClCreateVcHandler;
       
  1241   CO_DELETE_VC_HANDLER  ClDeleteVcHandler;
       
  1242   CO_REQUEST_HANDLER  ClRequestHandler;
       
  1243   CO_REQUEST_COMPLETE_HANDLER  ClRequestCompleteHandler;
       
  1244   CL_OPEN_AF_COMPLETE_HANDLER  ClOpenAfCompleteHandler;
       
  1245   CL_CLOSE_AF_COMPLETE_HANDLER  ClCloseAfCompleteHandler;
       
  1246   CL_REG_SAP_COMPLETE_HANDLER  ClRegisterSapCompleteHandler;
       
  1247   CL_DEREG_SAP_COMPLETE_HANDLER  ClDeregisterSapCompleteHandler;
       
  1248   CL_MAKE_CALL_COMPLETE_HANDLER  ClMakeCallCompleteHandler;
       
  1249   CL_MODIFY_CALL_QOS_COMPLETE_HANDLER	 ClModifyCallQoSCompleteHandler;
       
  1250   CL_CLOSE_CALL_COMPLETE_HANDLER  ClCloseCallCompleteHandler;
       
  1251   CL_ADD_PARTY_COMPLETE_HANDLER  ClAddPartyCompleteHandler;
       
  1252   CL_DROP_PARTY_COMPLETE_HANDLER  ClDropPartyCompleteHandler;
       
  1253   CL_INCOMING_CALL_HANDLER  ClIncomingCallHandler;
       
  1254   CL_INCOMING_CALL_QOS_CHANGE_HANDLER  ClIncomingCallQoSChangeHandler;
       
  1255   CL_INCOMING_CLOSE_CALL_HANDLER  ClIncomingCloseCallHandler;
       
  1256   CL_INCOMING_DROP_PARTY_HANDLER  ClIncomingDropPartyHandler;
       
  1257   CL_CALL_CONNECTED_HANDLER  ClCallConnectedHandler;
       
  1258 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
       
  1259 
       
  1260 
       
  1261 /* NDIS protocol structures */
       
  1262 
       
  1263 /* Prototypes for NDIS 3.0 protocol characteristics */
       
  1264 
       
  1265 typedef VOID DDKAPI
       
  1266 (*OPEN_ADAPTER_COMPLETE_HANDLER)(
       
  1267   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1268   /*IN*/ NDIS_STATUS  Status,
       
  1269   /*IN*/ NDIS_STATUS  OpenErrorStatus);
       
  1270 
       
  1271 typedef VOID DDKAPI
       
  1272 (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
       
  1273   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1274   /*IN*/ NDIS_STATUS  Status);
       
  1275 
       
  1276 typedef VOID DDKAPI
       
  1277 (*RESET_COMPLETE_HANDLER)(
       
  1278   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1279   /*IN*/ NDIS_STATUS  Status);
       
  1280 
       
  1281 typedef VOID DDKAPI
       
  1282 (*REQUEST_COMPLETE_HANDLER)(
       
  1283   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1284   /*IN*/ PNDIS_REQUEST  NdisRequest,
       
  1285   /*IN*/ NDIS_STATUS  Status);
       
  1286 
       
  1287 typedef VOID DDKAPI
       
  1288 (*STATUS_HANDLER)(
       
  1289   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1290   /*IN*/ NDIS_STATUS  GeneralStatus,
       
  1291   /*IN*/ PVOID  StatusBuffer,
       
  1292   /*IN*/ UINT  StatusBufferSize);
       
  1293 
       
  1294 typedef VOID DDKAPI
       
  1295 (*STATUS_COMPLETE_HANDLER)(
       
  1296   /*IN*/ NDIS_HANDLE  ProtocolBindingContext);
       
  1297 
       
  1298 typedef VOID DDKAPI
       
  1299 (*SEND_COMPLETE_HANDLER)(
       
  1300   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1301   /*IN*/ PNDIS_PACKET  Packet,
       
  1302   /*IN*/ NDIS_STATUS  Status);
       
  1303 
       
  1304 typedef VOID DDKAPI
       
  1305 (*WAN_SEND_COMPLETE_HANDLER)(
       
  1306   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1307   /*IN*/ PNDIS_WAN_PACKET  Packet,
       
  1308   /*IN*/ NDIS_STATUS  Status);
       
  1309 
       
  1310 typedef VOID DDKAPI
       
  1311 (*TRANSFER_DATA_COMPLETE_HANDLER)(
       
  1312   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1313   /*IN*/ PNDIS_PACKET  Packet,
       
  1314   /*IN*/ NDIS_STATUS  Status,
       
  1315   /*IN*/ UINT  BytesTransferred);
       
  1316 
       
  1317 typedef VOID DDKAPI
       
  1318 (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
       
  1319     VOID);
       
  1320 
       
  1321 
       
  1322 typedef NDIS_STATUS DDKAPI
       
  1323 (*RECEIVE_HANDLER)(
       
  1324   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1325   /*IN*/ NDIS_HANDLE  MacReceiveContext,
       
  1326   /*IN*/ PVOID  HeaderBuffer,
       
  1327   /*IN*/ UINT  HeaderBufferSize,
       
  1328   /*IN*/ PVOID  LookAheadBuffer,
       
  1329   /*IN*/ UINT  LookaheadBufferSize,
       
  1330   /*IN*/ UINT  PacketSize);
       
  1331 
       
  1332 typedef NDIS_STATUS DDKAPI
       
  1333 (*WAN_RECEIVE_HANDLER)(
       
  1334   /*IN*/ NDIS_HANDLE  NdisLinkHandle,
       
  1335   /*IN*/ PUCHAR  Packet,
       
  1336   /*IN*/ ULONG  PacketSize);
       
  1337 
       
  1338 typedef VOID DDKAPI
       
  1339 (*RECEIVE_COMPLETE_HANDLER)(
       
  1340   /*IN*/ NDIS_HANDLE  ProtocolBindingContext);
       
  1341 
       
  1342 
       
  1343 /* Protocol characteristics for NDIS 3.0 protocols */
       
  1344 
       
  1345 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
       
  1346   UCHAR  MajorNdisVersion; \
       
  1347   UCHAR  MinorNdisVersion; \
       
  1348   _ANONYMOUS_UNION union { \
       
  1349     UINT  Reserved; \
       
  1350     UINT  Flags; \
       
  1351   } DUMMYUNIONNAME; \
       
  1352   OPEN_ADAPTER_COMPLETE_HANDLER  OpenAdapterCompleteHandler; \
       
  1353   CLOSE_ADAPTER_COMPLETE_HANDLER  CloseAdapterCompleteHandler; \
       
  1354   _ANONYMOUS_UNION union { \
       
  1355     SEND_COMPLETE_HANDLER  SendCompleteHandler; \
       
  1356     WAN_SEND_COMPLETE_HANDLER  WanSendCompleteHandler; \
       
  1357   } DUMMYUNIONNAME2; \
       
  1358   _ANONYMOUS_UNION union { \
       
  1359     TRANSFER_DATA_COMPLETE_HANDLER  TransferDataCompleteHandler; \
       
  1360     WAN_TRANSFER_DATA_COMPLETE_HANDLER  WanTransferDataCompleteHandler; \
       
  1361   } DUMMYUNIONNAME3; \
       
  1362   RESET_COMPLETE_HANDLER  ResetCompleteHandler; \
       
  1363   REQUEST_COMPLETE_HANDLER  RequestCompleteHandler; \
       
  1364   _ANONYMOUS_UNION union { \
       
  1365     RECEIVE_HANDLER	 ReceiveHandler; \
       
  1366     WAN_RECEIVE_HANDLER  WanReceiveHandler; \
       
  1367   } DUMMYUNIONNAME4; \
       
  1368   RECEIVE_COMPLETE_HANDLER  ReceiveCompleteHandler; \
       
  1369   STATUS_HANDLER  StatusHandler; \
       
  1370   STATUS_COMPLETE_HANDLER  StatusCompleteHandler; \
       
  1371   NDIS_STRING  Name;
       
  1372 
       
  1373 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
       
  1374   NDIS30_PROTOCOL_CHARACTERISTICS_S
       
  1375 } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
       
  1376 
       
  1377 
       
  1378 /* Prototypes for NDIS 4.0 protocol characteristics */
       
  1379 
       
  1380 typedef INT DDKAPI
       
  1381 (*RECEIVE_PACKET_HANDLER)(
       
  1382   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1383   /*IN*/ PNDIS_PACKET  Packet);
       
  1384 
       
  1385 typedef VOID DDKAPI
       
  1386 (*BIND_HANDLER)(
       
  1387   /*OUT*/ PNDIS_STATUS  Status,
       
  1388   /*IN*/ NDIS_HANDLE  BindContext,
       
  1389   /*IN*/ PNDIS_STRING  DeviceName,
       
  1390   /*IN*/ PVOID  SystemSpecific1,
       
  1391   /*IN*/ PVOID  SystemSpecific2);
       
  1392 
       
  1393 typedef VOID DDKAPI
       
  1394 (*UNBIND_HANDLER)(
       
  1395   /*OUT*/ PNDIS_STATUS  Status,
       
  1396   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1397   /*IN*/ NDIS_HANDLE  UnbindContext);
       
  1398 
       
  1399 typedef NDIS_STATUS DDKAPI
       
  1400 (*PNP_EVENT_HANDLER)(
       
  1401   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1402   /*IN*/ PNET_PNP_EVENT  NetPnPEvent);
       
  1403 
       
  1404 typedef VOID DDKAPI
       
  1405 (*UNLOAD_PROTOCOL_HANDLER)(
       
  1406   VOID);
       
  1407 
       
  1408 
       
  1409 /* Protocol characteristics for NDIS 4.0 protocols */
       
  1410 
       
  1411 #ifdef __cplusplus
       
  1412 
       
  1413 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
       
  1414   NDIS30_PROTOCOL_CHARACTERISTICS  Ndis30Chars; \
       
  1415   RECEIVE_PACKET_HANDLER  ReceivePacketHandler; \
       
  1416   BIND_HANDLER  BindAdapterHandler; \
       
  1417   UNBIND_HANDLER  UnbindAdapterHandler; \
       
  1418   PNP_EVENT_HANDLER  PnPEventHandler; \
       
  1419   UNLOAD_PROTOCOL_HANDLER  UnloadHandler; 
       
  1420 
       
  1421 #else /* !__cplusplus */
       
  1422 
       
  1423 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
       
  1424   NDIS30_PROTOCOL_CHARACTERISTICS_S \
       
  1425   RECEIVE_PACKET_HANDLER  ReceivePacketHandler; \
       
  1426   BIND_HANDLER  BindAdapterHandler; \
       
  1427   UNBIND_HANDLER  UnbindAdapterHandler; \
       
  1428   PNP_EVENT_HANDLER  PnPEventHandler; \
       
  1429   UNLOAD_PROTOCOL_HANDLER  UnloadHandler; 
       
  1430 
       
  1431 #endif /* __cplusplus */
       
  1432 
       
  1433 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
       
  1434   NDIS40_PROTOCOL_CHARACTERISTICS_S
       
  1435 } NDIS40_PROTOCOL_CHARACTERISTICS, *PNDIS40_PROTOCOL_CHARACTERISTICS;
       
  1436 
       
  1437 /* Prototypes for NDIS 5.0 protocol characteristics */
       
  1438 
       
  1439 typedef VOID DDKAPI
       
  1440 (*CO_SEND_COMPLETE_HANDLER)(
       
  1441   /*IN*/ NDIS_STATUS  Status,
       
  1442   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1443   /*IN*/ PNDIS_PACKET  Packet);
       
  1444 
       
  1445 typedef VOID DDKAPI
       
  1446 (*CO_STATUS_HANDLER)(
       
  1447   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1448   /*IN*/ NDIS_HANDLE  ProtocolVcContext  /*OPTIONAL*/,
       
  1449   /*IN*/ NDIS_STATUS  GeneralStatus,
       
  1450   /*IN*/ PVOID  StatusBuffer,
       
  1451   /*IN*/ UINT  StatusBufferSize);
       
  1452 
       
  1453 typedef UINT DDKAPI
       
  1454 (*CO_RECEIVE_PACKET_HANDLER)(
       
  1455   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1456   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  1457   /*IN*/ PNDIS_PACKET  Packet);
       
  1458 
       
  1459 typedef VOID DDKAPI
       
  1460 (*CO_AF_REGISTER_NOTIFY_HANDLER)(
       
  1461   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  1462   /*IN*/ PCO_ADDRESS_FAMILY  AddressFamily);
       
  1463 
       
  1464 #ifdef __cplusplus \
       
  1465 
       
  1466 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
       
  1467   NDIS40_PROTOCOL_CHARACTERISTICS  Ndis40Chars; \
       
  1468   PVOID  ReservedHandlers[4]; \
       
  1469   CO_SEND_COMPLETE_HANDLER  CoSendCompleteHandler; \
       
  1470   CO_STATUS_HANDLER  CoStatusHandler; \
       
  1471   CO_RECEIVE_PACKET_HANDLER  CoReceivePacketHandler; \
       
  1472   CO_AF_REGISTER_NOTIFY_HANDLER  CoAfRegisterNotifyHandler;
       
  1473 
       
  1474 #else /* !__cplusplus */
       
  1475 
       
  1476 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
       
  1477   NDIS40_PROTOCOL_CHARACTERISTICS_S \
       
  1478   PVOID  ReservedHandlers[4]; \
       
  1479   CO_SEND_COMPLETE_HANDLER  CoSendCompleteHandler; \
       
  1480   CO_STATUS_HANDLER  CoStatusHandler; \
       
  1481   CO_RECEIVE_PACKET_HANDLER  CoReceivePacketHandler; \
       
  1482   CO_AF_REGISTER_NOTIFY_HANDLER  CoAfRegisterNotifyHandler;
       
  1483 
       
  1484 #endif /* !__cplusplus */
       
  1485 
       
  1486 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
       
  1487   NDIS50_PROTOCOL_CHARACTERISTICS_S
       
  1488 } NDIS50_PROTOCOL_CHARACTERISTICS, *PNDIS50_PROTOCOL_CHARACTERISTICS;
       
  1489 
       
  1490 #if defined(NDIS50) || defined(NDIS51)
       
  1491 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
       
  1492   NDIS50_PROTOCOL_CHARACTERISTICS_S;
       
  1493 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
       
  1494 #elif defined(NDIS40)
       
  1495 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
       
  1496   NDIS40_PROTOCOL_CHARACTERISTICS_S;
       
  1497 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
       
  1498 #elif defined(NDIS30)
       
  1499 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
       
  1500   NDIS30_PROTOCOL_CHARACTERISTICS_S
       
  1501 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
       
  1502 #else
       
  1503 #error Define an NDIS version
       
  1504 #endif /* NDIS30 */
       
  1505 
       
  1506 
       
  1507 
       
  1508 /* Buffer management routines */
       
  1509 
       
  1510 NDISAPI
       
  1511 VOID
       
  1512 DDKAPI
       
  1513 NdisAllocateBuffer(
       
  1514   /*OUT*/ PNDIS_STATUS  Status,
       
  1515   /*OUT*/ PNDIS_BUFFER  *Buffer,
       
  1516   /*IN*/ NDIS_HANDLE  PoolHandle,
       
  1517   /*IN*/ PVOID  VirtualAddress,
       
  1518   /*IN*/ UINT  Length);
       
  1519 
       
  1520 
       
  1521 NDISAPI
       
  1522 VOID
       
  1523 DDKAPI
       
  1524 NdisAllocateBufferPool(
       
  1525   /*OUT*/ PNDIS_STATUS  Status,
       
  1526   /*OUT*/ PNDIS_HANDLE  PoolHandle,
       
  1527   /*IN*/ UINT  NumberOfDescriptors);
       
  1528 
       
  1529 NDISAPI
       
  1530 VOID
       
  1531 DDKAPI
       
  1532 NdisAllocatePacket(
       
  1533   /*OUT*/ PNDIS_STATUS  Status,
       
  1534   /*OUT*/ PNDIS_PACKET  *Packet,
       
  1535   /*IN*/ NDIS_HANDLE  PoolHandle);
       
  1536 
       
  1537 NDISAPI
       
  1538 VOID
       
  1539 DDKAPI
       
  1540 NdisAllocatePacketPool(
       
  1541   /*OUT*/ PNDIS_STATUS  Status,
       
  1542   /*OUT*/ PNDIS_HANDLE  PoolHandle,
       
  1543   /*IN*/ UINT  NumberOfDescriptors,
       
  1544   /*IN*/ UINT  ProtocolReservedLength);
       
  1545 
       
  1546 NDISAPI
       
  1547 VOID
       
  1548 DDKAPI
       
  1549 NdisCopyBuffer(
       
  1550   /*OUT*/ PNDIS_STATUS  Status,
       
  1551   /*OUT*/ PNDIS_BUFFER  *Buffer,
       
  1552   /*IN*/ NDIS_HANDLE  PoolHandle,
       
  1553   /*IN*/ PVOID  MemoryDescriptor,
       
  1554   /*IN*/ UINT  Offset,
       
  1555   /*IN*/ UINT  Length);
       
  1556 
       
  1557 NDISAPI
       
  1558 VOID
       
  1559 DDKAPI
       
  1560 NdisCopyFromPacketToPacket(
       
  1561   /*IN*/ PNDIS_PACKET  Destination,
       
  1562   /*IN*/ UINT  DestinationOffset,
       
  1563   /*IN*/ UINT  BytesToCopy,
       
  1564   /*IN*/ PNDIS_PACKET  Source,
       
  1565   /*IN*/ UINT  SourceOffset,
       
  1566   /*OUT*/ PUINT  BytesCopied);
       
  1567 
       
  1568 NDISAPI
       
  1569 VOID
       
  1570 DDKAPI
       
  1571 NdisDprAllocatePacket(
       
  1572   /*OUT*/ PNDIS_STATUS  Status,
       
  1573   /*OUT*/ PNDIS_PACKET  *Packet,
       
  1574   /*IN*/ NDIS_HANDLE  PoolHandle);
       
  1575 
       
  1576 NDISAPI
       
  1577 VOID
       
  1578 DDKAPI
       
  1579 NdisDprAllocatePacketNonInterlocked(
       
  1580   /*OUT*/ PNDIS_STATUS  Status,
       
  1581   /*OUT*/ PNDIS_PACKET  *Packet,
       
  1582   /*IN*/ NDIS_HANDLE  PoolHandle);
       
  1583 
       
  1584 NDISAPI
       
  1585 VOID
       
  1586 DDKAPI
       
  1587 NdisDprFreePacket(
       
  1588   /*IN*/ PNDIS_PACKET  Packet);
       
  1589 
       
  1590 NDISAPI
       
  1591 VOID
       
  1592 DDKAPI
       
  1593 NdisDprFreePacketNonInterlocked(
       
  1594   /*IN*/ PNDIS_PACKET  Packet);
       
  1595 
       
  1596 NDISAPI
       
  1597 VOID
       
  1598 DDKAPI
       
  1599 NdisFreeBufferPool(
       
  1600   /*IN*/ NDIS_HANDLE  PoolHandle);
       
  1601 
       
  1602 NDISAPI
       
  1603 VOID
       
  1604 DDKAPI
       
  1605 NdisFreePacket(
       
  1606   /*IN*/ PNDIS_PACKET  Packet);
       
  1607 
       
  1608 NDISAPI
       
  1609 VOID
       
  1610 DDKAPI
       
  1611 NdisFreePacketPool(
       
  1612   /*IN*/ NDIS_HANDLE  PoolHandle);
       
  1613 
       
  1614 NDISAPI
       
  1615 VOID
       
  1616 DDKAPI
       
  1617 NdisReturnPackets(
       
  1618   /*IN*/ PNDIS_PACKET  *PacketsToReturn,
       
  1619   /*IN*/ UINT  NumberOfPackets);
       
  1620 
       
  1621 NDISAPI
       
  1622 VOID
       
  1623 DDKAPI
       
  1624 NdisUnchainBufferAtBack(
       
  1625   /*IN OUT*/ PNDIS_PACKET  Packet,
       
  1626   /*OUT*/ PNDIS_BUFFER  *Buffer);
       
  1627 
       
  1628 NDISAPI
       
  1629 VOID
       
  1630 DDKAPI
       
  1631 NdisUnchainBufferAtFront(
       
  1632   /*IN OUT*/ PNDIS_PACKET  Packet,
       
  1633   /*OUT*/ PNDIS_BUFFER  *Buffer);
       
  1634 
       
  1635 NDISAPI
       
  1636 VOID
       
  1637 DDKAPI
       
  1638 NdisAdjustBufferLength(
       
  1639   /*IN*/ PNDIS_BUFFER  Buffer,
       
  1640   /*IN*/ UINT  Length);
       
  1641 
       
  1642 NDISAPI
       
  1643 ULONG
       
  1644 DDKAPI
       
  1645 NdisBufferLength(
       
  1646   /*IN*/ PNDIS_BUFFER  Buffer);
       
  1647 
       
  1648 NDISAPI
       
  1649 PVOID
       
  1650 DDKAPI
       
  1651 NdisBufferVirtualAddress(
       
  1652   /*IN*/ PNDIS_BUFFER  Buffer);
       
  1653 
       
  1654 NDISAPI
       
  1655 ULONG
       
  1656 DDKAPI
       
  1657 NDIS_BUFFER_TO_SPAN_PAGES(
       
  1658   /*IN*/ PNDIS_BUFFER  Buffer);
       
  1659 
       
  1660 NDISAPI
       
  1661 VOID
       
  1662 DDKAPI
       
  1663 NdisFreeBuffer(
       
  1664   /*IN*/ PNDIS_BUFFER  Buffer);
       
  1665 
       
  1666 NDISAPI
       
  1667 VOID
       
  1668 DDKAPI
       
  1669 NdisGetBufferPhysicalArraySize(
       
  1670   /*IN*/ PNDIS_BUFFER  Buffer,
       
  1671   /*OUT*/ PUINT  ArraySize);
       
  1672 
       
  1673 NDISAPI
       
  1674 VOID
       
  1675 DDKAPI
       
  1676 NdisGetFirstBufferFromPacket(
       
  1677   /*IN*/ PNDIS_PACKET  _Packet,
       
  1678   /*OUT*/ PNDIS_BUFFER  *_FirstBuffer,
       
  1679   /*OUT*/ PVOID  *_FirstBufferVA,
       
  1680   /*OUT*/ PUINT  _FirstBufferLength,
       
  1681   /*OUT*/ PUINT  _TotalBufferLength);
       
  1682 
       
  1683 NDISAPI
       
  1684 VOID
       
  1685 DDKAPI
       
  1686 NdisQueryBuffer(
       
  1687   /*IN*/ PNDIS_BUFFER  Buffer,
       
  1688   /*OUT*/ PVOID  *VirtualAddress /*OPTIONAL*/,
       
  1689   /*OUT*/ PUINT  Length);
       
  1690 
       
  1691 NDISAPI
       
  1692 VOID
       
  1693 DDKAPI
       
  1694 NdisQueryBufferOffset(
       
  1695   /*IN*/ PNDIS_BUFFER  Buffer,
       
  1696   /*OUT*/ PUINT  Offset,
       
  1697   /*OUT*/ PUINT  Length);
       
  1698 
       
  1699 NDISAPI
       
  1700 VOID
       
  1701 DDKAPI
       
  1702 NdisFreeBuffer(
       
  1703   /*IN*/ PNDIS_BUFFER  Buffer);
       
  1704 
       
  1705 
       
  1706 /*
       
  1707  * VOID
       
  1708  * NdisGetBufferPhysicalArraySize(
       
  1709  * IN PNDIS_BUFFER  Buffer,
       
  1710  * OUT PUINT  ArraySize);
       
  1711  */
       
  1712 #define NdisGetBufferPhysicalArraySize(Buffer,        \
       
  1713                                        ArraySize)     \
       
  1714 {                                                     \
       
  1715   (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))  \
       
  1716 }
       
  1717 
       
  1718 
       
  1719 /*
       
  1720  * VOID
       
  1721  * NdisGetFirstBufferFromPacket(
       
  1722  * IN PNDIS_PACKET  _Packet,
       
  1723  * OUT PNDIS_BUFFER  * _FirstBuffer,
       
  1724  * OUT PVOID  * _FirstBufferVA,
       
  1725  * OUT PUINT  _FirstBufferLength,
       
  1726  * OUT PUINT  _TotalBufferLength)
       
  1727  */
       
  1728 #define	NdisGetFirstBufferFromPacket(_Packet,             \
       
  1729                                      _FirstBuffer,        \
       
  1730                                      _FirstBufferVA,      \
       
  1731                                      _FirstBufferLength,  \
       
  1732                                      _TotalBufferLength)  \
       
  1733 {                                                         \
       
  1734   PNDIS_BUFFER _Buffer;                                   \
       
  1735                                                           \
       
  1736   _Buffer         = (_Packet)->Private.Head;              \
       
  1737   *(_FirstBuffer) = _Buffer;                              \
       
  1738   if (_Buffer != NULL)                                    \
       
  1739     {                                                     \
       
  1740 	    *(_FirstBufferVA)     = MmGetSystemAddressForMdl(_Buffer);  \
       
  1741 	    *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer);	        \
       
  1742 	    _Buffer = _Buffer->Next;                                    \
       
  1743 		  *(_TotalBufferLength) = *(_FirstBufferLength);              \
       
  1744 		  while (_Buffer != NULL) {                                   \
       
  1745 		    *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer);      \
       
  1746 		    _Buffer = _Buffer->Next;                                  \
       
  1747 		  }                                                           \
       
  1748     }                             \
       
  1749   else                            \
       
  1750     {                             \
       
  1751       *(_FirstBufferVA) = 0;      \
       
  1752       *(_FirstBufferLength) = 0;  \
       
  1753       *(_TotalBufferLength) = 0;  \
       
  1754     } \
       
  1755 }
       
  1756 
       
  1757 /*
       
  1758  * VOID
       
  1759  * NdisQueryBuffer(
       
  1760  * IN PNDIS_BUFFER  Buffer,
       
  1761  * OUT PVOID  *VirtualAddress OPTIONAL,
       
  1762  * OUT PUINT  Length)
       
  1763  */
       
  1764 #define NdisQueryBuffer(Buffer,         \
       
  1765                         VirtualAddress, \
       
  1766                         Length)         \
       
  1767 {                                       \
       
  1768 	if (VirtualAddress)                   \
       
  1769 		*((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
       
  1770                                         \
       
  1771 	*((PUINT)Length) = MmGetMdlByteCount(Buffer); \
       
  1772 }
       
  1773 
       
  1774 
       
  1775 /*
       
  1776  * VOID
       
  1777  * NdisQueryBufferOffset(
       
  1778  * IN PNDIS_BUFFER  Buffer,
       
  1779  * OUT PUINT  Offset,
       
  1780  * OUT PUINT  Length);
       
  1781  */
       
  1782 #define NdisQueryBufferOffset(Buffer,             \
       
  1783                               Offset,             \
       
  1784                               Length)             \
       
  1785 {                                                 \
       
  1786   *((PUINT)Offset) = MmGetMdlByteOffset(Buffer);  \
       
  1787   *((PUINT)Length) = MmGetMdlByteCount(Buffer);   \
       
  1788 }
       
  1789 
       
  1790 
       
  1791 /*
       
  1792  * PVOID
       
  1793  * NDIS_BUFFER_LINKAGE(
       
  1794  * IN PNDIS_BUFFER  Buffer);
       
  1795  */
       
  1796 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
       
  1797 
       
  1798 
       
  1799 /*
       
  1800  * VOID
       
  1801  * NdisChainBufferAtBack(
       
  1802  * IN OUT PNDIS_PACKET  Packet,
       
  1803  * IN OUT PNDIS_BUFFER  Buffer)
       
  1804  */
       
  1805 #define NdisChainBufferAtBack(Packet,           \
       
  1806                               Buffer)           \
       
  1807 {                                               \
       
  1808 	PNDIS_BUFFER NdisBuffer = (Buffer);           \
       
  1809                                                 \
       
  1810 	while (NdisBuffer->Next != NULL)              \
       
  1811    NdisBuffer = NdisBuffer->Next;               \
       
  1812 	                                              \
       
  1813 	NdisBuffer->Next = NULL;                      \
       
  1814 	                                              \
       
  1815 	if ((Packet)->Private.Head != NULL)           \
       
  1816     (Packet)->Private.Tail->Next = (Buffer);    \
       
  1817 	else                                          \
       
  1818     (Packet)->Private.Head = (Buffer);          \
       
  1819 	                                              \
       
  1820 	(Packet)->Private.Tail = NdisBuffer;          \
       
  1821 	(Packet)->Private.ValidCounts = FALSE;        \
       
  1822 }
       
  1823 
       
  1824 
       
  1825 /*
       
  1826  * VOID
       
  1827  * NdisChainBufferAtFront(
       
  1828  * IN OUT PNDIS_PACKET  Packet,
       
  1829  * IN OUT PNDIS_BUFFER  Buffer)
       
  1830  */
       
  1831 #define NdisChainBufferAtFront(Packet,        \
       
  1832                                Buffer)        \
       
  1833 {                                             \
       
  1834 	PNDIS_BUFFER _NdisBuffer = (Buffer);        \
       
  1835                                               \
       
  1836   while (_NdisBuffer->Next != NULL)           \
       
  1837     _NdisBuffer = _NdisBuffer->Next;          \
       
  1838                                               \
       
  1839   if ((Packet)->Private.Head == NULL)         \
       
  1840     (Packet)->Private.Tail = _NdisBuffer;     \
       
  1841                                               \
       
  1842 	_NdisBuffer->Next = (Packet)->Private.Head; \
       
  1843 	(Packet)->Private.Head = (Buffer);          \
       
  1844 	(Packet)->Private.ValidCounts = FALSE;      \
       
  1845 }
       
  1846 
       
  1847 
       
  1848 /*
       
  1849  * VOID
       
  1850  * NdisGetNextBuffer(
       
  1851  * IN PNDIS_BUFFER  CurrentBuffer,
       
  1852  * OUT PNDIS_BUFFER  * NextBuffer)
       
  1853  */
       
  1854 #define NdisGetNextBuffer(CurrentBuffer,  \
       
  1855                           NextBuffer)     \
       
  1856 {                                         \
       
  1857   *(NextBuffer) = (CurrentBuffer)->Next;  \
       
  1858 }
       
  1859 
       
  1860 
       
  1861 /*
       
  1862  * UINT
       
  1863  * NdisGetPacketFlags(
       
  1864  * IN PNDIS_PACKET  Packet); 
       
  1865  */
       
  1866 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
       
  1867 
       
  1868 
       
  1869 /*
       
  1870  * VOID
       
  1871  * NdisClearPacketFlags(
       
  1872  * IN PNDIS_PACKET  Packet,
       
  1873  * IN UINT  Flags);
       
  1874  */
       
  1875 #define NdisClearPacketFlags(Packet, Flags) \
       
  1876   (Packet)->Private.Flags &= ~(Flags)
       
  1877 
       
  1878 
       
  1879 /*
       
  1880  * VOID
       
  1881  * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
       
  1882  * IN PNDIS_PACKET    Packet,
       
  1883  * IN PPVOID          pMediaSpecificInfo,
       
  1884  * IN PUINT           pSizeMediaSpecificInfo);
       
  1885  */
       
  1886 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet,                                  \
       
  1887                                             _pMediaSpecificInfo,                      \
       
  1888                                             _pSizeMediaSpecificInfo)                  \
       
  1889 {                                                                                     \
       
  1890   if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) ||            \
       
  1891       !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO))   \
       
  1892 	  {                                                                                 \
       
  1893 	    *(_pMediaSpecificInfo) = NULL;                                                  \
       
  1894 	    *(_pSizeMediaSpecificInfo) = 0;                                                 \
       
  1895 	  }                                                                                 \
       
  1896   else                                                                                \
       
  1897 	  {                                                                                 \
       
  1898 	    *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +           \
       
  1899         (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation;           \
       
  1900 	    *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +       \
       
  1901 	      (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo;              \
       
  1902 	  }                                                                                 \
       
  1903 }
       
  1904 
       
  1905 
       
  1906 /*
       
  1907  * ULONG
       
  1908  * NDIS_GET_PACKET_PROTOCOL_TYPE(
       
  1909  * IN PNDIS_PACKET  Packet);
       
  1910  */
       
  1911 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
       
  1912   ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
       
  1913 
       
  1914 /*
       
  1915  * ULONG
       
  1916  * NDIS_GET_PACKET_HEADER_SIZE(
       
  1917  * IN PNDIS_PACKET  Packet);
       
  1918  */
       
  1919 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
       
  1920 	((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
       
  1921 	(_Packet)->Private.NdisPacketOobOffset))->HeaderSize
       
  1922 
       
  1923 
       
  1924 /*
       
  1925  * NDIS_STATUS
       
  1926  * NDIS_GET_PACKET_STATUS(
       
  1927  * IN PNDIS_PACKET  Packet);
       
  1928  */
       
  1929 #define NDIS_GET_PACKET_STATUS(_Packet) \
       
  1930 	((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
       
  1931 	(_Packet)->Private.NdisPacketOobOffset))->Status
       
  1932 
       
  1933 
       
  1934 /*
       
  1935  * ULONGLONG
       
  1936  * NDIS_GET_PACKET_TIME_RECEIVED(
       
  1937  * IN PNDIS_PACKET  Packet);
       
  1938  */
       
  1939 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet)  \
       
  1940 	((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
       
  1941 	(_Packet)->Private.NdisPacketOobOffset))->TimeReceived
       
  1942 
       
  1943 
       
  1944 /*
       
  1945  * ULONGLONG
       
  1946  * NDIS_GET_PACKET_TIME_SENT(
       
  1947  * IN PNDIS_PACKET  Packet);
       
  1948  */
       
  1949 #define NDIS_GET_PACKET_TIME_SENT(_Packet)      \
       
  1950 	((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
       
  1951 	(_Packet)->Private.NdisPacketOobOffset))->TimeSent
       
  1952 
       
  1953 
       
  1954 /*
       
  1955  * ULONGLONG
       
  1956  * NDIS_GET_PACKET_TIME_TO_SEND(
       
  1957  * IN PNDIS_PACKET  Packet);
       
  1958  */
       
  1959 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet)   \
       
  1960 	((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
       
  1961 	(_Packet)->Private.NdisPacketOobOffset))->TimeToSend
       
  1962 
       
  1963 
       
  1964 /*
       
  1965  * PNDIS_PACKET_OOB_DATA
       
  1966  * NDIS_OOB_DATA_FROM_PACKET(
       
  1967  * IN PNDIS_PACKET  Packet);
       
  1968  */
       
  1969 #define NDIS_OOB_DATA_FROM_PACKET(_Packet)    \
       
  1970   (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
       
  1971   (_Packet)->Private.NdisPacketOobOffset)
       
  1972 
       
  1973  
       
  1974 /*
       
  1975  * VOID
       
  1976  * NdisQueryPacket(
       
  1977  * IN PNDIS_PACKET  Packet,
       
  1978  * OUT PUINT  PhysicalBufferCount  OPTIONAL,
       
  1979  * OUT PUINT  BufferCount  OPTIONAL,
       
  1980  * OUT PNDIS_BUFFER  *FirstBuffer OPTIONAL,
       
  1981  * OUT PUINT  TotalPacketLength  OPTIONAL);
       
  1982  */
       
  1983 #define NdisQueryPacket(Packet,                                           \
       
  1984                         PhysicalBufferCount,                              \
       
  1985                         BufferCount,                                      \
       
  1986                         FirstBuffer,                                      \
       
  1987                         TotalPacketLength)                                \
       
  1988 {                                                                         \
       
  1989   if (FirstBuffer)                                                        \
       
  1990     *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head;               \
       
  1991   if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount))      \
       
  1992   {                                                                       \
       
  1993     if (!(Packet)->Private.ValidCounts) {                                 \
       
  1994       UINT _Offset;                                                       \
       
  1995       UINT _PacketLength;                                                 \
       
  1996       PNDIS_BUFFER _NdisBuffer;                                           \
       
  1997       UINT _PhysicalBufferCount = 0;                                      \
       
  1998       UINT _TotalPacketLength   = 0;                                      \
       
  1999       UINT _Count               = 0;                                      \
       
  2000                                                                           \
       
  2001       for (_NdisBuffer = (Packet)->Private.Head;                          \
       
  2002         _NdisBuffer != (PNDIS_BUFFER)NULL;                                \
       
  2003         _NdisBuffer = _NdisBuffer->Next)                                  \
       
  2004       {                                                                   \
       
  2005         _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer);   \
       
  2006         NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength);     \
       
  2007         _TotalPacketLength += _PacketLength;                              \
       
  2008         _Count++;                                                         \
       
  2009       }                                                                   \
       
  2010       (Packet)->Private.PhysicalCount = _PhysicalBufferCount;             \
       
  2011       (Packet)->Private.TotalLength   = _TotalPacketLength;               \
       
  2012       (Packet)->Private.Count         = _Count;                           \
       
  2013       (Packet)->Private.ValidCounts   = TRUE;                             \
       
  2014 	}                                                                       \
       
  2015                                                                           \
       
  2016   if (PhysicalBufferCount)                                                \
       
  2017       *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount;    \
       
  2018                                                                           \
       
  2019   if (BufferCount)                                                        \
       
  2020       *((PUINT)BufferCount) = (Packet)->Private.Count;                    \
       
  2021                                                                           \
       
  2022   if (TotalPacketLength)                                                  \
       
  2023       *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength;        \
       
  2024   } \
       
  2025 }
       
  2026 
       
  2027 /*
       
  2028  * VOID
       
  2029  * NdisQueryPacketLength(
       
  2030  * IN PNDIS_PACKET  Packet,
       
  2031  * OUT PUINT  PhysicalBufferCount  OPTIONAL,
       
  2032  * OUT PUINT  BufferCount  OPTIONAL,
       
  2033  * OUT PNDIS_BUFFER  *FirstBuffer  OPTIONAL,
       
  2034  * OUT PUINT  TotalPacketLength  OPTIONAL);
       
  2035  */
       
  2036 #define NdisQueryPacketLength(Packet,                                     \
       
  2037                               TotalPacketLength)                          \
       
  2038 {                                                                         \
       
  2039   if ((TotalPacketLength))                                                \
       
  2040   {                                                                       \
       
  2041     if (!(Packet)->Private.ValidCounts) {                                 \
       
  2042       UINT _Offset;                                                       \
       
  2043       UINT _PacketLength;                                                 \
       
  2044       PNDIS_BUFFER _NdisBuffer;                                           \
       
  2045       UINT _PhysicalBufferCount = 0;                                      \
       
  2046       UINT _TotalPacketLength   = 0;                                      \
       
  2047       UINT _Count               = 0;                                      \
       
  2048                                                                           \
       
  2049       for (_NdisBuffer = (Packet)->Private.Head;                          \
       
  2050         _NdisBuffer != (PNDIS_BUFFER)NULL;                                \
       
  2051         _NdisBuffer = _NdisBuffer->Next)                                  \
       
  2052       {                                                                   \
       
  2053         _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer);   \
       
  2054         NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength);     \
       
  2055         _TotalPacketLength += _PacketLength;                              \
       
  2056         _Count++;                                                         \
       
  2057       }                                                                   \
       
  2058       (Packet)->Private.PhysicalCount = _PhysicalBufferCount;             \
       
  2059       (Packet)->Private.TotalLength   = _TotalPacketLength;               \
       
  2060       (Packet)->Private.Count         = _Count;                           \
       
  2061       (Packet)->Private.ValidCounts   = TRUE;                             \
       
  2062   }                                                                       \
       
  2063                                                                           \
       
  2064   if (TotalPacketLength)                                                  \
       
  2065       *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength;        \
       
  2066   } \
       
  2067 }
       
  2068 
       
  2069 
       
  2070 /*
       
  2071  * VOID
       
  2072  * NdisRecalculatePacketCounts(
       
  2073  * IN OUT  PNDIS_PACKET  Packet);
       
  2074  */
       
  2075 #define NdisRecalculatePacketCounts(Packet)       \
       
  2076 {                                                 \
       
  2077   PNDIS_BUFFER _Buffer = (Packet)->Private.Head;  \
       
  2078   if (_Buffer != NULL)                            \
       
  2079   {                                               \
       
  2080       while (_Buffer->Next != NULL)               \
       
  2081       {                                           \
       
  2082           ´_Buffer = _Buffer->Next;               \
       
  2083       }                                           \
       
  2084       (Packet)->Private.Tail = _Buffer;           \
       
  2085   }                                               \
       
  2086   (Packet)->Private.ValidCounts = FALSE;          \
       
  2087 }
       
  2088 
       
  2089 
       
  2090 /*
       
  2091  * VOID
       
  2092  * NdisReinitializePacket(
       
  2093  * IN OUT  PNDIS_PACKET  Packet);
       
  2094  */
       
  2095 #define NdisReinitializePacketCounts(Packet)    \
       
  2096 {                                               \
       
  2097 	(Packet)->Private.Head = (PNDIS_BUFFER)NULL;  \
       
  2098 	(Packet)->Private.ValidCounts = FALSE;        \
       
  2099 }
       
  2100 
       
  2101 
       
  2102 /*
       
  2103  * VOID
       
  2104  * NdisSetPacketFlags(
       
  2105  * IN PNDIS_PACKET  Packet,
       
  2106  * IN UINT  Flags); 
       
  2107  */
       
  2108 #define NdisSetPacketFlags(Packet, Flags) \
       
  2109   (Packet)->Private.Flags |= (Flags);
       
  2110 
       
  2111 
       
  2112 /*
       
  2113  * VOID
       
  2114  * NDIS_SET_PACKET_HEADER_SIZE(
       
  2115  * IN PNDIS_PACKET  Packet,
       
  2116  * IN UINT  HdrSize);
       
  2117  */
       
  2118 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize)              \
       
  2119   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                      \
       
  2120   (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
       
  2121 
       
  2122 
       
  2123 /*
       
  2124  * VOID
       
  2125  * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
       
  2126  * IN PNDIS_PACKET  Packet,
       
  2127  * IN PVOID  MediaSpecificInfo,
       
  2128  * IN UINT  SizeMediaSpecificInfo);
       
  2129  */
       
  2130 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet,                      \
       
  2131                                             _MediaSpecificInfo,           \
       
  2132                                             _SizeMediaSpecificInfo)       \
       
  2133 {                                                                         \
       
  2134   if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS)     \
       
  2135 	  {                                                                     \
       
  2136       (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
       
  2137       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
       
  2138         (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
       
  2139           (_MediaSpecificInfo);                                           \
       
  2140       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
       
  2141         (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
       
  2142           (_SizeMediaSpecificInfo);                                       \
       
  2143 	  }                                                                     \
       
  2144 }
       
  2145 
       
  2146 
       
  2147 /*
       
  2148  * VOID
       
  2149  * NDIS_SET_PACKET_STATUS(
       
  2150  * IN PNDIS_PACKET    Packet,
       
  2151  * IN NDIS_STATUS     Status);
       
  2152  */
       
  2153 #define NDIS_SET_PACKET_STATUS(_Packet, _Status)  \
       
  2154   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +    \
       
  2155   (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
       
  2156 
       
  2157 
       
  2158 /*
       
  2159  * VOID
       
  2160  * NDIS_SET_PACKET_TIME_RECEIVED(
       
  2161  * IN PNDIS_PACKET  Packet,
       
  2162  * IN ULONGLONG  TimeReceived);
       
  2163  */
       
  2164 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
       
  2165   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                \
       
  2166   (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
       
  2167 
       
  2168 
       
  2169 /*
       
  2170  * VOID
       
  2171  * NDIS_SET_PACKET_TIME_SENT(
       
  2172  * IN PNDIS_PACKET  Packet,
       
  2173  * IN ULONGLONG  TimeSent);
       
  2174  */
       
  2175 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
       
  2176   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +        \
       
  2177   (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
       
  2178 
       
  2179 
       
  2180 /*
       
  2181  * VOID
       
  2182  * NDIS_SET_PACKET_TIME_TO_SEND(
       
  2183  * IN PNDIS_PACKET  Packet,
       
  2184  * IN ULONGLONG  TimeToSend);
       
  2185  */
       
  2186 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend)  \
       
  2187   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +              \
       
  2188   (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
       
  2189 
       
  2190 
       
  2191 /*
       
  2192  * VOID
       
  2193  * NdisSetSendFlags(
       
  2194  * IN PNDIS_PACKET  Packet,
       
  2195  * IN UINT  Flags);
       
  2196  */
       
  2197 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
       
  2198 
       
  2199 
       
  2200 
       
  2201 /* Memory management routines */
       
  2202 
       
  2203 /*
       
  2204  * VOID
       
  2205  * NdisCreateLookaheadBufferFromSharedMemory(
       
  2206  * IN PVOID  pSharedMemory,
       
  2207  * IN UINT  LookaheadLength,
       
  2208  * OUT PVOID  *pLookaheadBuffer)
       
  2209  */
       
  2210 #define NdisCreateLookaheadBufferFromSharedMemory(_pSharedMemory,     \
       
  2211                                                   _LookaheadLength,   \
       
  2212                                                   _pLookaheadBuffer)  \
       
  2213   ((*(_pLookaheadBuffer)) = (_pSharedMemory))
       
  2214 
       
  2215 /*
       
  2216  * VOID
       
  2217  * NdisDestroyLookaheadBufferFromSharedMemory(
       
  2218  * IN PVOID  pLookaheadBuffer)
       
  2219  */
       
  2220 #define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
       
  2221 
       
  2222 #if defined(i386)
       
  2223 
       
  2224 /*
       
  2225  * VOID
       
  2226  * NdisMoveFromMappedMemory(
       
  2227  * OUT PVOID  Destination,
       
  2228  * IN PVOID  Source,
       
  2229  * IN ULONG  Length);
       
  2230  */
       
  2231 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
       
  2232   NdisMoveMappedMemory(Destination, Source, Length)
       
  2233 
       
  2234 /*
       
  2235  * VOID
       
  2236  * NdisMoveMappedMemory(
       
  2237  * OUT PVOID  Destination,
       
  2238  * IN PVOID  Source,
       
  2239  * IN ULONG  Length);
       
  2240  */
       
  2241 #define NdisMoveMappedMemory(Destination, Source, Length) \
       
  2242   RtlCopyMemory(Destination, Source, Length)
       
  2243 
       
  2244 /*
       
  2245  * VOID
       
  2246  * NdisMoveToMappedMemory(
       
  2247  * OUT PVOID  Destination,
       
  2248  * IN PVOID  Source,
       
  2249  * IN ULONG  Length);
       
  2250  */
       
  2251 #define NdisMoveToMappedMemory(Destination, Source, Length) \
       
  2252   NdisMoveMappedMemory(Destination, Source, Length)
       
  2253 
       
  2254 #endif /* i386 */
       
  2255 
       
  2256 /*
       
  2257  * VOID
       
  2258  * NdisMUpdateSharedMemory(
       
  2259  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  2260  * IN ULONG  Length,
       
  2261  * IN PVOID  VirtualAddress,
       
  2262  * IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress);
       
  2263  */
       
  2264 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
       
  2265   NdisUpdateSharedMemory(_H, _L, _V, _P)
       
  2266 
       
  2267 NDISAPI
       
  2268 NDIS_STATUS
       
  2269 DDKAPI
       
  2270 NdisAllocateMemory(
       
  2271   /*OUT*/  PVOID  *VirtualAddress,
       
  2272   /*IN*/ UINT  Length,
       
  2273   /*IN*/ UINT  MemoryFlags,
       
  2274   /*IN*/ NDIS_PHYSICAL_ADDRESS  HighestAcceptableAddress);
       
  2275 
       
  2276 NDISAPI
       
  2277 VOID
       
  2278 DDKAPI
       
  2279 NdisFreeMemory(
       
  2280   /*IN*/ PVOID  VirtualAddress,
       
  2281   /*IN*/ UINT  Length,
       
  2282   /*IN*/ UINT  MemoryFlags);
       
  2283 
       
  2284 NDISAPI
       
  2285 VOID
       
  2286 DDKAPI
       
  2287 NdisImmediateReadSharedMemory(
       
  2288   /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
       
  2289   /*IN*/ ULONG       SharedMemoryAddress,
       
  2290   /*OUT*/ PUCHAR      Buffer,
       
  2291   /*IN*/ ULONG       Length);
       
  2292 
       
  2293 NDISAPI
       
  2294 VOID
       
  2295 DDKAPI
       
  2296 NdisImmediateWriteSharedMemory(
       
  2297   /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
       
  2298   /*IN*/ ULONG       SharedMemoryAddress,
       
  2299   /*IN*/ PUCHAR      Buffer,
       
  2300   /*IN*/ ULONG       Length);
       
  2301 
       
  2302 NDISAPI
       
  2303 VOID
       
  2304 DDKAPI
       
  2305 NdisMAllocateSharedMemory(
       
  2306   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  2307   /*IN*/ ULONG  Length,
       
  2308   /*IN*/ BOOLEAN  Cached,
       
  2309   /*OUT*/ PVOID  *VirtualAddress,
       
  2310   /*OUT*/ PNDIS_PHYSICAL_ADDRESS  PhysicalAddress);
       
  2311 
       
  2312 NDISAPI
       
  2313 NDIS_STATUS
       
  2314 DDKAPI
       
  2315 NdisMAllocateSharedMemoryAsync(
       
  2316   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  2317   /*IN*/ ULONG  Length,
       
  2318   /*IN*/ BOOLEAN  Cached,
       
  2319   /*IN*/ PVOID  Context);
       
  2320 
       
  2321 #if defined(NDIS50)
       
  2322 
       
  2323 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
       
  2324                                Length,            \
       
  2325                                VirtualAddress,    \
       
  2326                                PhysicalAddress)
       
  2327 
       
  2328 #else
       
  2329 
       
  2330 NDISAPI
       
  2331 VOID
       
  2332 DDKAPI
       
  2333 NdisUpdateSharedMemory(
       
  2334   /*IN*/ NDIS_HANDLE             NdisAdapterHandle,
       
  2335   /*IN*/ ULONG                   Length,
       
  2336   /*IN*/ PVOID                   VirtualAddress,
       
  2337   /*IN*/ NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
       
  2338 
       
  2339 #endif /* defined(NDIS50) */
       
  2340 
       
  2341 /*
       
  2342  * ULONG
       
  2343  * NdisGetPhysicalAddressHigh(
       
  2344  * IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress);
       
  2345  */
       
  2346 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
       
  2347   ((PhysicalAddress).HighPart)
       
  2348 
       
  2349 /*
       
  2350  * VOID
       
  2351  * NdisSetPhysicalAddressHigh(
       
  2352  * IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress,
       
  2353  * IN ULONG  Value);
       
  2354  */
       
  2355 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
       
  2356   ((PhysicalAddress).HighPart) = (Value)
       
  2357 
       
  2358 /*
       
  2359  * ULONG
       
  2360  * NdisGetPhysicalAddressLow(
       
  2361  * IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress);
       
  2362  */
       
  2363 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
       
  2364   ((PhysicalAddress).LowPart)
       
  2365 
       
  2366 
       
  2367 /*
       
  2368  * VOID
       
  2369  * NdisSetPhysicalAddressLow(
       
  2370  * IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress,
       
  2371  * IN ULONG  Value);
       
  2372  */
       
  2373 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
       
  2374   ((PhysicalAddress).LowPart) = (Value)
       
  2375 
       
  2376 /*
       
  2377  * VOID
       
  2378  * NDIS_PHYSICAL_ADDRESS_CONST(
       
  2379  * IN ULONG  Low,
       
  2380  * IN LONG  High); 
       
  2381  */
       
  2382 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High)  \
       
  2383     { {(ULONG)(Low), (LONG)(High)} }
       
  2384 
       
  2385 /*
       
  2386  * ULONG
       
  2387  * NdisEqualMemory(
       
  2388  * IN CONST VOID  *Source1,
       
  2389  * IN CONST VOID  *Source2,
       
  2390  * IN ULONG  Length);
       
  2391  */
       
  2392 #define NdisEqualMemory(Source1, Source2, Length) \
       
  2393   RtlEqualMemory(Source1, Source2, Length)
       
  2394 
       
  2395 /*
       
  2396  * VOID
       
  2397  * NdisFillMemory(
       
  2398  * IN PVOID  Destination,
       
  2399  * IN ULONG  Length,
       
  2400  * IN UCHAR  Fill);
       
  2401  */
       
  2402 #define NdisFillMemory(Destination, Length, Fill) \
       
  2403   RtlFillMemory(Destination, Length, Fill)
       
  2404 
       
  2405 /*
       
  2406  * VOID
       
  2407  * NdisZeroMappedMemory(
       
  2408  * IN PVOID  Destination,
       
  2409  * IN ULONG  Length);
       
  2410  */
       
  2411 #define NdisZeroMappedMemory(Destination, Length) \
       
  2412   RtlZeroMemory(Destination, Length)
       
  2413 
       
  2414 /*
       
  2415  * VOID
       
  2416  * NdisMoveMemory(
       
  2417  * OUT  PVOID  Destination,
       
  2418  * IN PVOID  Source,
       
  2419  * IN ULONG  Length);
       
  2420  */
       
  2421 #define NdisMoveMemory(Destination, Source, Length) \
       
  2422   RtlCopyMemory(Destination, Source, Length)
       
  2423 
       
  2424 
       
  2425 /*
       
  2426  * VOID
       
  2427  * NdisRetrieveUlong(
       
  2428  * IN PULONG  DestinationAddress,
       
  2429  * IN PULONG  SourceAddress);
       
  2430  */
       
  2431 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
       
  2432   RtlRetrieveUlong(DestinationAddress, SourceAddress)
       
  2433 
       
  2434 
       
  2435 /*
       
  2436  * VOID
       
  2437  * NdisStoreUlong(
       
  2438  * IN PULONG  DestinationAddress,
       
  2439  * IN ULONG  Value); 
       
  2440  */
       
  2441 #define NdisStoreUlong(DestinationAddress, Value) \
       
  2442   RtlStoreUlong(DestinationAddress, Value)
       
  2443 
       
  2444 
       
  2445 /*
       
  2446  * VOID
       
  2447  * NdisZeroMemory(
       
  2448  * IN PVOID  Destination,
       
  2449  * IN ULONG  Length)
       
  2450  */
       
  2451 #define NdisZeroMemory(Destination, Length) \
       
  2452   RtlZeroMemory(Destination, Length)
       
  2453 
       
  2454 
       
  2455 
       
  2456 /* Configuration routines */
       
  2457 
       
  2458 NDISAPI
       
  2459 VOID
       
  2460 DDKAPI
       
  2461 NdisOpenConfiguration(
       
  2462   /*OUT*/  PNDIS_STATUS  Status,
       
  2463   /*OUT*/  PNDIS_HANDLE  ConfigurationHandle,
       
  2464   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext);
       
  2465 
       
  2466 NDISAPI
       
  2467 VOID
       
  2468 DDKAPI
       
  2469 NdisReadNetworkAddress(
       
  2470   /*OUT*/ PNDIS_STATUS  Status,
       
  2471   /*OUT*/ PVOID  *NetworkAddress,
       
  2472   /*OUT*/ PUINT  NetworkAddressLength,
       
  2473   /*IN*/ NDIS_HANDLE  ConfigurationHandle);
       
  2474 
       
  2475 NDISAPI
       
  2476 VOID
       
  2477 DDKAPI
       
  2478 NdisReadEisaSlotInformation(
       
  2479   /*OUT*/ PNDIS_STATUS  Status,
       
  2480   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext,
       
  2481   /*OUT*/ PUINT  SlotNumber,
       
  2482   /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION  EisaData);
       
  2483 
       
  2484 NDISAPI
       
  2485 VOID
       
  2486 DDKAPI
       
  2487 NdisReadEisaSlotInformationEx(
       
  2488   /*OUT*/ PNDIS_STATUS  Status,
       
  2489   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext,
       
  2490   /*OUT*/ PUINT  SlotNumber,
       
  2491   /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION  *EisaData,
       
  2492   /*OUT*/ PUINT  NumberOfFunctions);
       
  2493 
       
  2494 NDISAPI
       
  2495 ULONG
       
  2496 DDKAPI
       
  2497 NdisReadPciSlotInformation(
       
  2498   /*IN*/ NDIS_HANDLE  NdisAdapterHandle,
       
  2499   /*IN*/ ULONG  SlotNumber,
       
  2500   /*IN*/ ULONG  Offset,
       
  2501   /*IN*/ PVOID  Buffer,
       
  2502   /*IN*/ ULONG  Length);
       
  2503 
       
  2504 NDISAPI
       
  2505 ULONG 
       
  2506 DDKAPI
       
  2507 NdisWritePciSlotInformation(
       
  2508   /*IN*/ NDIS_HANDLE  NdisAdapterHandle,
       
  2509   /*IN*/ ULONG  SlotNumber,
       
  2510   /*IN*/ ULONG  Offset,
       
  2511   /*IN*/ PVOID  Buffer,
       
  2512   /*IN*/ ULONG  Length);
       
  2513 
       
  2514 
       
  2515 
       
  2516 /* String management routines */
       
  2517 
       
  2518 NDISAPI
       
  2519 NDIS_STATUS
       
  2520 DDKAPI
       
  2521 NdisAnsiStringToUnicodeString(
       
  2522   /*IN OUT*/ PNDIS_STRING  DestinationString,
       
  2523   /*IN*/ PNDIS_ANSI_STRING  SourceString);
       
  2524 
       
  2525 /*
       
  2526  * BOOLEAN
       
  2527  * NdisEqualString(
       
  2528  * IN PNDIS_STRING  String1,
       
  2529  * IN PNDIS_STRING  String2,
       
  2530  * IN BOOLEAN  CaseInsensitive);
       
  2531  */
       
  2532 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
       
  2533   RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
       
  2534 
       
  2535 NDISAPI
       
  2536 VOID
       
  2537 DDKAPI
       
  2538 NdisInitAnsiString(
       
  2539   /*IN OUT*/ PNDIS_ANSI_STRING  DestinationString,
       
  2540   /*IN*/ PCSTR  SourceString);
       
  2541 
       
  2542 NDISAPI
       
  2543 VOID
       
  2544 DDKAPI
       
  2545 NdisInitUnicodeString(
       
  2546   /*IN OUT*/ PNDIS_STRING  DestinationString,
       
  2547   /*IN*/ PCWSTR  SourceString);
       
  2548 
       
  2549 NDISAPI
       
  2550 NDIS_STATUS
       
  2551 DDKAPI
       
  2552 NdisUnicodeStringToAnsiString(
       
  2553   /*IN OUT*/ PNDIS_ANSI_STRING  DestinationString,
       
  2554   /*IN*/ PNDIS_STRING  SourceString);
       
  2555 
       
  2556 #define NdisFreeString(_s)  NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
       
  2557 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
       
  2558 
       
  2559 
       
  2560 /* Spin lock reoutines */
       
  2561 
       
  2562 /*
       
  2563  * VOID
       
  2564  * NdisAllocateSpinLock(
       
  2565  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2566  */
       
  2567 #define NdisAllocateSpinLock(_SpinLock) \
       
  2568   KeInitializeSpinLock(&(_SpinLock)->SpinLock)
       
  2569 
       
  2570 /*
       
  2571  * VOID
       
  2572  * NdisFreeSpinLock(
       
  2573  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2574  */
       
  2575 #define NdisFreeSpinLock(_SpinLock)
       
  2576 
       
  2577 /*
       
  2578  * VOID
       
  2579  * NdisAcquireSpinLock(
       
  2580  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2581  */
       
  2582 #define NdisAcquireSpinLock(_SpinLock) \
       
  2583   KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
       
  2584 
       
  2585 /*
       
  2586  * VOID
       
  2587  * NdisReleaseSpinLock(
       
  2588  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2589  */
       
  2590 #define NdisReleaseSpinLock(_SpinLock) \
       
  2591   KeReleaseSpinLock(&(_SpinLock)->SpinLock, (_SpinLock)->OldIrql)
       
  2592 
       
  2593 /*
       
  2594  * VOID
       
  2595  * NdisDprAcquireSpinLock(
       
  2596  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2597  */
       
  2598 #define NdisDprAcquireSpinLock(_SpinLock)                \
       
  2599 {                                                       \
       
  2600     KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
       
  2601     (_SpinLock)->OldIrql = DISPATCH_LEVEL;               \
       
  2602 }
       
  2603 
       
  2604 /*
       
  2605  * VOID
       
  2606  * NdisDprReleaseSpinLock(
       
  2607  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2608  */
       
  2609 #define NdisDprReleaseSpinLock(_SpinLock) \
       
  2610   KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
       
  2611 
       
  2612 
       
  2613 
       
  2614 /* I/O routines */
       
  2615 
       
  2616 /*
       
  2617  * VOID
       
  2618  * NdisRawReadPortBufferUchar(
       
  2619  * IN ULONG  Port,
       
  2620  * OUT PUCHAR  Buffer,
       
  2621  * IN ULONG  Length);
       
  2622  */
       
  2623 #define NdisRawReadPortBufferUchar(Port, Buffer, Length)    \
       
  2624   READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
       
  2625 
       
  2626 /*
       
  2627  * VOID
       
  2628  * NdisRawReadPortBufferUlong(
       
  2629  * IN ULONG  Port,
       
  2630  * OUT PULONG  Buffer,
       
  2631  * IN ULONG  Length);
       
  2632  */
       
  2633 #define NdisRawReadPortBufferUlong(Port, Buffer, Length)  \
       
  2634   READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
       
  2635 
       
  2636 /*
       
  2637  * VOID
       
  2638  * NdisRawReadPortBufferUshort(
       
  2639  * IN ULONG  Port,
       
  2640  * OUT PUSHORT  Buffer,
       
  2641  * IN ULONG  Length);
       
  2642  */
       
  2643 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
       
  2644   READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
       
  2645 
       
  2646 
       
  2647 /*
       
  2648  * VOID
       
  2649  * NdisRawReadPortUchar(
       
  2650  * IN ULONG  Port,
       
  2651  * OUT PUCHAR  Data);
       
  2652  */
       
  2653 #define NdisRawReadPortUchar(Port, Data) \
       
  2654   *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
       
  2655 
       
  2656 /*
       
  2657  * VOID
       
  2658  * NdisRawReadPortUlong(
       
  2659  * IN ULONG  Port,
       
  2660  * OUT PULONG  Data);
       
  2661  */
       
  2662 #define NdisRawReadPortUlong(Port, Data) \
       
  2663   *(Data) = READ_PORT_ULONG((PULONG)(Port))
       
  2664 
       
  2665 /*
       
  2666  * VOID
       
  2667  * NdisRawReadPortUshort(
       
  2668  * IN ULONG   Port,
       
  2669  * OUT PUSHORT Data);
       
  2670  */
       
  2671 #define NdisRawReadPortUshort(Port, Data) \
       
  2672   *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
       
  2673 
       
  2674 
       
  2675 /*
       
  2676  * VOID
       
  2677  * NdisRawWritePortBufferUchar(
       
  2678  * IN ULONG  Port,
       
  2679  * IN PUCHAR  Buffer,
       
  2680  * IN ULONG  Length);
       
  2681  */
       
  2682 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
       
  2683   WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
       
  2684 
       
  2685 /*
       
  2686  * VOID
       
  2687  * NdisRawWritePortBufferUlong(
       
  2688  * IN ULONG  Port,
       
  2689  * IN PULONG  Buffer,
       
  2690  * IN ULONG  Length);
       
  2691  */
       
  2692 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
       
  2693   WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
       
  2694 
       
  2695 /*
       
  2696  * VOID
       
  2697  * NdisRawWritePortBufferUshort(
       
  2698  * IN ULONG   Port,
       
  2699  * IN PUSHORT Buffer,
       
  2700  * IN ULONG   Length);
       
  2701  */
       
  2702 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
       
  2703   WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
       
  2704 
       
  2705 
       
  2706 /*
       
  2707  * VOID
       
  2708  * NdisRawWritePortUchar(
       
  2709  * IN ULONG  Port,
       
  2710  * IN UCHAR  Data);
       
  2711  */
       
  2712 #define NdisRawWritePortUchar(Port, Data) \
       
  2713   WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
       
  2714 
       
  2715 /*
       
  2716  * VOID
       
  2717  * NdisRawWritePortUlong(
       
  2718  * IN ULONG  Port,
       
  2719  * IN ULONG  Data);
       
  2720  */
       
  2721 #define NdisRawWritePortUlong(Port, Data)   \
       
  2722   WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
       
  2723 
       
  2724 /*
       
  2725  * VOID
       
  2726  * NdisRawWritePortUshort(
       
  2727  * IN ULONG  Port,
       
  2728  * IN USHORT  Data);
       
  2729  */
       
  2730 #define NdisRawWritePortUshort(Port, Data) \
       
  2731   WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
       
  2732 
       
  2733 
       
  2734 /*
       
  2735  * VOID
       
  2736  * NdisReadRegisterUchar(
       
  2737  * IN PUCHAR  Register,
       
  2738  * OUT PUCHAR  Data);
       
  2739  */
       
  2740 #define NdisReadRegisterUchar(Register, Data) \
       
  2741   *(Data) = *(Register)
       
  2742 
       
  2743 /*
       
  2744  * VOID
       
  2745  * NdisReadRegisterUlong(
       
  2746  * IN PULONG  Register,
       
  2747  * OUT PULONG  Data);
       
  2748  */
       
  2749 #define NdisReadRegisterUlong(Register, Data)   \
       
  2750   *(Data) = *(Register)
       
  2751 
       
  2752 /*
       
  2753  * VOID
       
  2754  * NdisReadRegisterUshort(
       
  2755  * IN PUSHORT  Register,
       
  2756  * OUT PUSHORT  Data);
       
  2757  */
       
  2758 #define NdisReadRegisterUshort(Register, Data)  \
       
  2759     *(Data) = *(Register)
       
  2760 
       
  2761 /*
       
  2762  * VOID
       
  2763  * NdisReadRegisterUchar(
       
  2764  * IN PUCHAR  Register,
       
  2765  * IN UCHAR  Data);
       
  2766  */
       
  2767 #define NdisWriteRegisterUchar(Register, Data) \
       
  2768   WRITE_REGISTER_UCHAR((Register), (Data))
       
  2769 
       
  2770 /*
       
  2771  * VOID
       
  2772  * NdisReadRegisterUlong(
       
  2773  * IN PULONG  Register,
       
  2774  * IN ULONG  Data);
       
  2775  */
       
  2776 #define NdisWriteRegisterUlong(Register, Data) \
       
  2777   WRITE_REGISTER_ULONG((Register), (Data))
       
  2778 
       
  2779 /*
       
  2780  * VOID
       
  2781  * NdisReadRegisterUshort(
       
  2782  * IN PUSHORT  Register,
       
  2783  * IN USHORT  Data);
       
  2784  */
       
  2785 #define NdisWriteRegisterUshort(Register, Data) \
       
  2786   WRITE_REGISTER_USHORT((Register), (Data))
       
  2787 
       
  2788 
       
  2789 /* Linked lists */
       
  2790 
       
  2791 /*
       
  2792  * VOID
       
  2793  * NdisInitializeListHead(
       
  2794  * IN PLIST_ENTRY  ListHead);
       
  2795  */
       
  2796 #define NdisInitializeListHead(_ListHead) \
       
  2797   InitializeListHead(_ListHead)
       
  2798 
       
  2799 /*
       
  2800  * PLIST_ENTRY
       
  2801  * NdisInterlockedInsertHeadList(
       
  2802  * IN PLIST_ENTRY  ListHead,
       
  2803  * IN PLIST_ENTRY  ListEntry,
       
  2804  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2805  */
       
  2806 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
       
  2807   ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
       
  2808 
       
  2809 /*
       
  2810  * PLIST_ENTRY
       
  2811  * NdisInterlockedInsertTailList(
       
  2812  * IN PLIST_ENTRY  ListHead,
       
  2813  * IN PLIST_ENTRY  ListEntry,
       
  2814  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2815  */
       
  2816 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
       
  2817   ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
       
  2818 
       
  2819 /*
       
  2820  * PLIST_ENTRY
       
  2821  * NdisInterlockedRemoveHeadList(
       
  2822  * IN PLIST_ENTRY  ListHead,
       
  2823  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2824 */
       
  2825 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
       
  2826   ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
       
  2827 
       
  2828 /*
       
  2829  * VOID
       
  2830  * NdisInitializeSListHead(
       
  2831  * IN PSLIST_HEADER  SListHead);
       
  2832  */
       
  2833 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
       
  2834 
       
  2835 /*
       
  2836  * USHORT NdisQueryDepthSList(
       
  2837  * IN PSLIST_HEADER  SListHead);
       
  2838  */
       
  2839 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
       
  2840 
       
  2841 
       
  2842 
       
  2843 /* Interlocked routines */
       
  2844 
       
  2845 /*
       
  2846  * LONG
       
  2847  * NdisInterlockedDecrement(
       
  2848  * IN PLONG  Addend);
       
  2849  */
       
  2850 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
       
  2851 
       
  2852 /*
       
  2853  * LONG
       
  2854  * NdisInterlockedIncrement(
       
  2855  * IN PLONG  Addend);
       
  2856  */
       
  2857 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
       
  2858 
       
  2859 /*
       
  2860  * VOID
       
  2861  * NdisInterlockedAddUlong(
       
  2862  * IN PULONG  Addend,
       
  2863  * IN ULONG  Increment,
       
  2864  * IN PNDIS_SPIN_LOCK  SpinLock);
       
  2865  */
       
  2866 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
       
  2867   ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
       
  2868 
       
  2869 
       
  2870 
       
  2871 /* Miscellaneous routines */
       
  2872 
       
  2873 NDISAPI
       
  2874 VOID
       
  2875 DDKAPI
       
  2876 NdisCloseConfiguration(
       
  2877   /*IN*/ NDIS_HANDLE  ConfigurationHandle);
       
  2878 
       
  2879 NDISAPI
       
  2880 VOID
       
  2881 DDKAPI
       
  2882 NdisReadConfiguration(
       
  2883   /*OUT*/  PNDIS_STATUS  Status,
       
  2884   /*OUT*/  PNDIS_CONFIGURATION_PARAMETER  *ParameterValue,
       
  2885   /*IN*/ NDIS_HANDLE  ConfigurationHandle,
       
  2886   /*IN*/ PNDIS_STRING  Keyword,
       
  2887   /*IN*/ NDIS_PARAMETER_TYPE  ParameterType);
       
  2888 
       
  2889 NDISAPI
       
  2890 VOID
       
  2891 DDKAPI
       
  2892 NdisWriteConfiguration(
       
  2893   /*OUT*/  PNDIS_STATUS  Status,
       
  2894   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext,
       
  2895   /*IN*/ PNDIS_STRING  Keyword,
       
  2896   /*IN*/ PNDIS_CONFIGURATION_PARAMETER  *ParameterValue);
       
  2897 
       
  2898 NDISAPI
       
  2899 VOID
       
  2900 DDKCDECLAPI
       
  2901 NdisWriteErrorLogEntry(
       
  2902   /*IN*/ NDIS_HANDLE  NdisAdapterHandle,
       
  2903   /*IN*/ NDIS_ERROR_CODE  ErrorCode,
       
  2904   /*IN*/ ULONG  NumberOfErrorValues,
       
  2905   /*IN*/ ...);
       
  2906 
       
  2907 /*
       
  2908  * VOID
       
  2909  * NdisStallExecution(
       
  2910  * IN UINT  MicrosecondsToStall)
       
  2911  */
       
  2912 #define NdisStallExecution KeStallExecutionProcessor
       
  2913 
       
  2914 /*
       
  2915  * VOID
       
  2916  * NdisGetCurrentSystemTime(
       
  2917  * IN PLARGE_INTEGER  pSystemTime);
       
  2918  */
       
  2919 #define NdisGetCurrentSystemTime KeQuerySystemTime
       
  2920 
       
  2921 NDISAPI
       
  2922 VOID
       
  2923 DDKAPI
       
  2924 NdisGetCurrentProcessorCpuUsage(
       
  2925   /*OUT*/ PULONG  pCpuUsage);
       
  2926 
       
  2927 
       
  2928 
       
  2929 /* NDIS helper macros */
       
  2930 
       
  2931 /*
       
  2932  * VOID
       
  2933  * NDIS_INIT_FUNCTION(FunctionName)
       
  2934  */
       
  2935 #define NDIS_INIT_FUNCTION(FunctionName)    \
       
  2936   alloc_text(init, FunctionName)
       
  2937 
       
  2938 /*
       
  2939  * VOID
       
  2940  * NDIS_PAGABLE_FUNCTION(FunctionName) 
       
  2941  */
       
  2942 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
       
  2943   alloc_text(page, FunctionName)
       
  2944 
       
  2945 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
       
  2946 
       
  2947 
       
  2948 /* NDIS 4.0 extensions */
       
  2949 
       
  2950 NDISAPI
       
  2951 VOID
       
  2952 DDKAPI
       
  2953 NdisMFreeSharedMemory(
       
  2954   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  2955   /*IN*/ ULONG  Length,
       
  2956   /*IN*/ BOOLEAN  Cached,
       
  2957   /*IN*/ PVOID  VirtualAddress,
       
  2958   /*IN*/ NDIS_PHYSICAL_ADDRESS  PhysicalAddress);
       
  2959 
       
  2960 NDISAPI
       
  2961 VOID
       
  2962 DDKAPI
       
  2963 NdisMWanIndicateReceive(
       
  2964   /*OUT*/ PNDIS_STATUS  Status,
       
  2965   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  2966   /*IN*/ NDIS_HANDLE  NdisLinkContext,
       
  2967   /*IN*/ PUCHAR  PacketBuffer,
       
  2968   /*IN*/ UINT  PacketSize);
       
  2969 
       
  2970 NDISAPI
       
  2971 VOID
       
  2972 DDKAPI
       
  2973 NdisMWanIndicateReceiveComplete(
       
  2974   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  2975 
       
  2976 NDISAPI
       
  2977 VOID
       
  2978 DDKAPI
       
  2979 NdisMWanSendComplete(
       
  2980   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  2981   /*IN*/ PNDIS_WAN_PACKET  Packet,
       
  2982   /*IN*/ NDIS_STATUS  Status);
       
  2983 
       
  2984 NDISAPI
       
  2985 NDIS_STATUS
       
  2986 DDKAPI
       
  2987 NdisPciAssignResources(
       
  2988   /*IN*/ NDIS_HANDLE  NdisMacHandle,
       
  2989   /*IN*/ NDIS_HANDLE  NdisWrapperHandle,
       
  2990   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext,
       
  2991   /*IN*/ ULONG  SlotNumber,
       
  2992   /*OUT*/ PNDIS_RESOURCE_LIST  *AssignedResources);
       
  2993 
       
  2994 
       
  2995 /* NDIS 5.0 extensions */
       
  2996 
       
  2997 NDISAPI
       
  2998 VOID
       
  2999 DDKAPI
       
  3000 NdisAcquireReadWriteLock(
       
  3001   /*IN*/ PNDIS_RW_LOCK  Lock,
       
  3002   /*IN*/ BOOLEAN  fWrite,
       
  3003   /*IN*/ PLOCK_STATE  LockState);
       
  3004 
       
  3005 NDISAPI
       
  3006 NDIS_STATUS
       
  3007 DDKAPI
       
  3008 NdisAllocateMemoryWithTag(
       
  3009   /*OUT*/ PVOID  *VirtualAddress,
       
  3010   /*IN*/ UINT  Length,
       
  3011   /*IN*/ ULONG  Tag);
       
  3012 
       
  3013 NDISAPI
       
  3014 VOID
       
  3015 DDKAPI
       
  3016 NdisAllocatePacketPoolEx(
       
  3017   /*OUT*/ PNDIS_STATUS  Status,
       
  3018   /*OUT*/ PNDIS_HANDLE  PoolHandle,
       
  3019   /*IN*/ UINT  NumberOfDescriptors,
       
  3020   /*IN*/ UINT  NumberOfOverflowDescriptors,
       
  3021   /*IN*/ UINT  ProtocolReservedLength);
       
  3022 
       
  3023 NDISAPI
       
  3024 VOID
       
  3025 DDKAPI
       
  3026 NdisCompletePnPEvent(
       
  3027   /*IN*/ NDIS_STATUS  Status,
       
  3028   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  3029   /*IN*/ PNET_PNP_EVENT  NetPnPEvent);
       
  3030 
       
  3031 NDISAPI
       
  3032 VOID
       
  3033 DDKAPI
       
  3034 NdisGetCurrentProcessorCounts(
       
  3035   /*OUT*/ PULONG  pIdleCount,
       
  3036   /*OUT*/ PULONG  pKernelAndUser,
       
  3037   /*OUT*/ PULONG  pIndex);
       
  3038 
       
  3039 NDISAPI
       
  3040 VOID
       
  3041 DDKAPI
       
  3042 NdisGetDriverHandle(
       
  3043   /*IN*/ PNDIS_HANDLE  NdisBindingHandle,
       
  3044   /*OUT*/ PNDIS_HANDLE  NdisDriverHandle);
       
  3045 
       
  3046 NDISAPI
       
  3047 PNDIS_PACKET
       
  3048 DDKAPI
       
  3049 NdisGetReceivedPacket(
       
  3050   /*IN*/ PNDIS_HANDLE  NdisBindingHandle,
       
  3051   /*IN*/ PNDIS_HANDLE  MacContext);
       
  3052 
       
  3053 NDISAPI
       
  3054 VOID
       
  3055 DDKAPI
       
  3056 NdisGetSystemUptime(
       
  3057   /*OUT*/ PULONG  pSystemUpTime);
       
  3058 
       
  3059 NDISAPI
       
  3060 VOID
       
  3061 DDKAPI
       
  3062 NdisInitializeReadWriteLock(
       
  3063   /*IN*/ PNDIS_RW_LOCK  Lock);
       
  3064 
       
  3065 NDISAPI
       
  3066 NDIS_STATUS
       
  3067 DDKAPI
       
  3068 NdisMDeregisterDevice(
       
  3069   /*IN*/ NDIS_HANDLE  NdisDeviceHandle);
       
  3070 
       
  3071 NDISAPI
       
  3072 VOID
       
  3073 DDKAPI
       
  3074 NdisMGetDeviceProperty(
       
  3075   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  3076   /*IN OUT*/ PDEVICE_OBJECT  *PhysicalDeviceObject  /*OPTIONAL*/,
       
  3077   /*IN OUT*/ PDEVICE_OBJECT  *FunctionalDeviceObject  /*OPTIONAL*/,
       
  3078   /*IN OUT*/ PDEVICE_OBJECT  *NextDeviceObject  /*OPTIONAL*/,
       
  3079   /*IN OUT*/ PCM_RESOURCE_LIST  *AllocatedResources  /*OPTIONAL*/,
       
  3080   /*IN OUT*/ PCM_RESOURCE_LIST  *AllocatedResourcesTranslated  /*OPTIONAL*/);
       
  3081 
       
  3082 NDISAPI
       
  3083 NDIS_STATUS
       
  3084 DDKAPI
       
  3085 NdisMInitializeScatterGatherDma(
       
  3086   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  3087   /*IN*/ BOOLEAN  Dma64BitAddresses,
       
  3088   /*IN*/ ULONG  MaximumPhysicalMapping);
       
  3089 
       
  3090 NDISAPI
       
  3091 NDIS_STATUS
       
  3092 DDKAPI
       
  3093 NdisMPromoteMiniport(
       
  3094   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  3095 
       
  3096 NDISAPI
       
  3097 NDIS_STATUS
       
  3098 DDKAPI
       
  3099 NdisMQueryAdapterInstanceName(
       
  3100   /*OUT*/ PNDIS_STRING  AdapterInstanceName,
       
  3101   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  3102 
       
  3103 NDISAPI
       
  3104 NDIS_STATUS
       
  3105 DDKAPI
       
  3106 NdisMRegisterDevice(
       
  3107   /*IN*/ NDIS_HANDLE  NdisWrapperHandle,
       
  3108   /*IN*/ PNDIS_STRING  DeviceName,
       
  3109   /*IN*/ PNDIS_STRING  SymbolicName,
       
  3110   /*IN*/ PDRIVER_DISPATCH  MajorFunctions[],
       
  3111   /*OUT*/ PDEVICE_OBJECT  *pDeviceObject,
       
  3112   /*OUT*/ NDIS_HANDLE  *NdisDeviceHandle);
       
  3113 
       
  3114 NDISAPI
       
  3115 VOID
       
  3116 DDKAPI
       
  3117 NdisMRegisterUnloadHandler(
       
  3118   /*IN*/ NDIS_HANDLE  NdisWrapperHandle,
       
  3119   /*IN*/ PDRIVER_UNLOAD  UnloadHandler);
       
  3120 
       
  3121 NDISAPI
       
  3122 NDIS_STATUS
       
  3123 DDKAPI
       
  3124 NdisMRemoveMiniport(
       
  3125   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  3126 
       
  3127 NDISAPI
       
  3128 NDIS_STATUS
       
  3129 DDKAPI
       
  3130 NdisMSetMiniportSecondary(
       
  3131   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  3132   /*IN*/ NDIS_HANDLE  PrimaryMiniportAdapterHandle);
       
  3133 
       
  3134 NDISAPI
       
  3135 VOID
       
  3136 DDKAPI
       
  3137 NdisOpenConfigurationKeyByIndex(
       
  3138   /*OUT*/ PNDIS_STATUS  Status,
       
  3139   /*IN*/ NDIS_HANDLE  ConfigurationHandle,
       
  3140   /*IN*/ ULONG  Index,
       
  3141   /*OUT*/ PNDIS_STRING  KeyName,
       
  3142   /*OUT*/ PNDIS_HANDLE  KeyHandle);
       
  3143 
       
  3144 NDISAPI
       
  3145 VOID
       
  3146 DDKAPI
       
  3147 NdisOpenConfigurationKeyByName(
       
  3148   /*OUT*/ PNDIS_STATUS  Status,
       
  3149   /*IN*/ NDIS_HANDLE  ConfigurationHandle,
       
  3150   /*IN*/ PNDIS_STRING  SubKeyName,
       
  3151   /*OUT*/ PNDIS_HANDLE  SubKeyHandle);
       
  3152 
       
  3153 NDISAPI
       
  3154 UINT
       
  3155 DDKAPI
       
  3156 NdisPacketPoolUsage(
       
  3157   /*IN*/ NDIS_HANDLE  PoolHandle);
       
  3158 
       
  3159 NDISAPI
       
  3160 NDIS_STATUS
       
  3161 DDKAPI
       
  3162 NdisQueryAdapterInstanceName(
       
  3163   /*OUT*/ PNDIS_STRING  AdapterInstanceName,
       
  3164   /*IN*/ NDIS_HANDLE  NdisBindingHandle);
       
  3165 
       
  3166 NDISAPI
       
  3167 ULONG
       
  3168 DDKAPI
       
  3169 NdisReadPcmciaAttributeMemory(
       
  3170   /*IN*/ NDIS_HANDLE  NdisAdapterHandle,
       
  3171   /*IN*/ ULONG  Offset,
       
  3172   /*IN*/ PVOID  Buffer,
       
  3173   /*IN*/ ULONG  Length);
       
  3174 
       
  3175 NDISAPI
       
  3176 VOID
       
  3177 DDKAPI
       
  3178 NdisReleaseReadWriteLock(
       
  3179   /*IN*/ PNDIS_RW_LOCK  Lock,
       
  3180   /*IN*/ PLOCK_STATE  LockState);
       
  3181 
       
  3182 NDISAPI
       
  3183 NDIS_STATUS
       
  3184 DDKAPI
       
  3185 NdisWriteEventLogEntry(
       
  3186   /*IN*/ PVOID  LogHandle,
       
  3187   /*IN*/ NDIS_STATUS  EventCode,
       
  3188   /*IN*/ ULONG  UniqueEventValue,
       
  3189   /*IN*/ USHORT  NumStrings,
       
  3190   /*IN*/ PVOID  StringsList  /*OPTIONAL*/,
       
  3191   /*IN*/ ULONG  DataSize,
       
  3192   /*IN*/ PVOID  Data  /*OPTIONAL*/);
       
  3193 
       
  3194 NDISAPI
       
  3195 ULONG
       
  3196 DDKAPI
       
  3197 NdisWritePcmciaAttributeMemory(
       
  3198   /*IN*/ NDIS_HANDLE  NdisAdapterHandle,
       
  3199   /*IN*/ ULONG  Offset,
       
  3200   /*IN*/ PVOID  Buffer,
       
  3201   /*IN*/ ULONG  Length);
       
  3202 
       
  3203 
       
  3204 /* Connectionless services */
       
  3205 
       
  3206 NDISAPI
       
  3207 NDIS_STATUS
       
  3208 DDKAPI
       
  3209 NdisClAddParty(
       
  3210   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3211   /*IN*/ NDIS_HANDLE  ProtocolPartyContext,
       
  3212   /*IN OUT*/ PCO_CALL_PARAMETERS  CallParameters,
       
  3213   /*OUT*/ PNDIS_HANDLE  NdisPartyHandle);
       
  3214 
       
  3215 NDISAPI
       
  3216 NDIS_STATUS
       
  3217 DDKAPI
       
  3218 NdisClCloseAddressFamily(
       
  3219   /*IN*/ NDIS_HANDLE  NdisAfHandle);
       
  3220 
       
  3221 NDISAPI
       
  3222 NDIS_STATUS
       
  3223 DDKAPI
       
  3224 NdisClCloseCall(
       
  3225   /*IN*/ NDIS_HANDLE NdisVcHandle,
       
  3226   /*IN*/ NDIS_HANDLE NdisPartyHandle  /*OPTIONAL*/,
       
  3227   /*IN*/ PVOID  Buffer  /*OPTIONAL*/,
       
  3228   /*IN*/ UINT  Size);
       
  3229 
       
  3230 NDISAPI
       
  3231 NDIS_STATUS
       
  3232 DDKAPI
       
  3233 NdisClDeregisterSap(
       
  3234   /*IN*/ NDIS_HANDLE  NdisSapHandle);
       
  3235 
       
  3236 NDISAPI
       
  3237 NDIS_STATUS
       
  3238 DDKAPI
       
  3239 NdisClDropParty(
       
  3240   /*IN*/ NDIS_HANDLE  NdisPartyHandle,
       
  3241   /*IN*/ PVOID  Buffer  /*OPTIONAL*/,
       
  3242   /*IN*/ UINT  Size);
       
  3243 
       
  3244 NDISAPI
       
  3245 VOID
       
  3246 DDKAPI
       
  3247 NdisClIncomingCallComplete(
       
  3248   /*IN*/ NDIS_STATUS  Status,
       
  3249   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3250   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3251 
       
  3252 NDISAPI
       
  3253 NDIS_STATUS
       
  3254 DDKAPI
       
  3255 NdisClMakeCall(
       
  3256   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3257   /*IN OUT*/ PCO_CALL_PARAMETERS  CallParameters,
       
  3258   /*IN*/ NDIS_HANDLE  ProtocolPartyContext  /*OPTIONAL*/,
       
  3259   /*OUT*/ PNDIS_HANDLE  NdisPartyHandle  /*OPTIONAL*/);
       
  3260 
       
  3261 NDISAPI
       
  3262 NDIS_STATUS 
       
  3263 DDKAPI
       
  3264 NdisClModifyCallQoS(
       
  3265   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3266   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3267 
       
  3268 
       
  3269 NDISAPI
       
  3270 NDIS_STATUS
       
  3271 DDKAPI
       
  3272 NdisClOpenAddressFamily(
       
  3273   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  3274   /*IN*/ PCO_ADDRESS_FAMILY  AddressFamily,
       
  3275   /*IN*/ NDIS_HANDLE  ProtocolAfContext,
       
  3276   /*IN*/ PNDIS_CLIENT_CHARACTERISTICS  ClCharacteristics,
       
  3277   /*IN*/ UINT  SizeOfClCharacteristics,
       
  3278   /*OUT*/ PNDIS_HANDLE  NdisAfHandle);
       
  3279 
       
  3280 NDISAPI
       
  3281 NDIS_STATUS
       
  3282 DDKAPI
       
  3283 NdisClRegisterSap(
       
  3284   /*IN*/ NDIS_HANDLE  NdisAfHandle,
       
  3285   /*IN*/ NDIS_HANDLE  ProtocolSapContext,
       
  3286   /*IN*/ PCO_SAP  Sap,
       
  3287   /*OUT*/ PNDIS_HANDLE  NdisSapHandle);
       
  3288 
       
  3289 
       
  3290 /* Call Manager services */
       
  3291 
       
  3292 NDISAPI
       
  3293 NDIS_STATUS
       
  3294 DDKAPI
       
  3295 NdisCmActivateVc(
       
  3296   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3297   /*IN OUT*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3298 
       
  3299 NDISAPI
       
  3300 VOID
       
  3301 DDKAPI
       
  3302 NdisCmAddPartyComplete(
       
  3303   /*IN*/ NDIS_STATUS  Status,
       
  3304   /*IN*/ NDIS_HANDLE  NdisPartyHandle,
       
  3305   /*IN*/ NDIS_HANDLE  CallMgrPartyContext  /*OPTIONAL*/,
       
  3306   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3307 
       
  3308 NDISAPI
       
  3309 VOID
       
  3310 DDKAPI
       
  3311 NdisCmCloseAddressFamilyComplete(
       
  3312   /*IN*/ NDIS_STATUS Status,
       
  3313   /*IN*/ NDIS_HANDLE NdisAfHandle);
       
  3314 
       
  3315 NDISAPI
       
  3316 VOID
       
  3317 DDKAPI
       
  3318 NdisCmCloseCallComplete(
       
  3319   /*IN*/ NDIS_STATUS  Status,
       
  3320   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3321   /*IN*/ NDIS_HANDLE  NdisPartyHandle  /*OPTIONAL*/);
       
  3322 
       
  3323 NDISAPI
       
  3324 NDIS_STATUS
       
  3325 DDKAPI
       
  3326 NdisCmDeactivateVc(
       
  3327   /*IN*/ NDIS_HANDLE  NdisVcHandle);
       
  3328 
       
  3329 NDISAPI
       
  3330 VOID
       
  3331 DDKAPI
       
  3332 NdisCmDeregisterSapComplete(
       
  3333   /*IN*/ NDIS_STATUS  Status,
       
  3334   /*IN*/ NDIS_HANDLE  NdisSapHandle);
       
  3335 
       
  3336 NDISAPI
       
  3337 VOID
       
  3338 DDKAPI
       
  3339 NdisCmDispatchCallConnected(
       
  3340   /*IN*/ NDIS_HANDLE  NdisVcHandle);
       
  3341 
       
  3342 NDISAPI
       
  3343 NDIS_STATUS
       
  3344 DDKAPI
       
  3345 NdisCmDispatchIncomingCall(
       
  3346   /*IN*/ NDIS_HANDLE  NdisSapHandle,
       
  3347   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3348   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3349 
       
  3350 NDISAPI
       
  3351 VOID
       
  3352 DDKAPI
       
  3353 NdisCmDispatchIncomingCallQoSChange(
       
  3354   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3355   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3356 
       
  3357 NDISAPI
       
  3358 VOID
       
  3359 DDKAPI
       
  3360 NdisCmDispatchIncomingCloseCall(
       
  3361   /*IN*/ NDIS_STATUS  CloseStatus,
       
  3362   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3363   /*IN*/ PVOID  Buffer  /*OPTIONAL*/,
       
  3364   /*IN*/ UINT  Size);
       
  3365 
       
  3366 NDISAPI
       
  3367 VOID
       
  3368 DDKAPI
       
  3369 NdisCmDispatchIncomingDropParty(
       
  3370   /*IN*/ NDIS_STATUS  DropStatus,
       
  3371   /*IN*/ NDIS_HANDLE  NdisPartyHandle,
       
  3372   /*IN*/ PVOID  Buffer  /*OPTIONAL*/,
       
  3373   /*IN*/ UINT  Size);
       
  3374 
       
  3375 NDISAPI
       
  3376 VOID
       
  3377 DDKAPI
       
  3378 NdisCmDropPartyComplete(
       
  3379   /*IN*/ NDIS_STATUS  Status,
       
  3380   /*IN*/ NDIS_HANDLE  NdisPartyHandle);
       
  3381 
       
  3382 NDISAPI
       
  3383 VOID
       
  3384 DDKAPI
       
  3385 NdisCmMakeCallComplete(
       
  3386   /*IN*/ NDIS_STATUS  Status,
       
  3387   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3388   /*IN*/ NDIS_HANDLE  NdisPartyHandle  /*OPTIONAL*/,
       
  3389   /*IN*/ NDIS_HANDLE  CallMgrPartyContext  /*OPTIONAL*/,
       
  3390   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3391 
       
  3392 NDISAPI
       
  3393 VOID
       
  3394 DDKAPI
       
  3395 NdisCmModifyCallQoSComplete(
       
  3396   /*IN*/ NDIS_STATUS  Status,
       
  3397   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3398   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3399 
       
  3400 NDISAPI
       
  3401 VOID
       
  3402 DDKAPI
       
  3403 NdisCmOpenAddressFamilyComplete(
       
  3404   /*IN*/ NDIS_STATUS Status,
       
  3405   /*IN*/ NDIS_HANDLE NdisAfHandle,
       
  3406   /*IN*/ NDIS_HANDLE CallMgrAfContext);
       
  3407 
       
  3408 NDISAPI
       
  3409 NDIS_STATUS
       
  3410 DDKAPI
       
  3411 NdisCmRegisterAddressFamily(
       
  3412   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  3413   /*IN*/ PCO_ADDRESS_FAMILY  AddressFamily,
       
  3414   /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS  CmCharacteristics,
       
  3415   /*IN*/ UINT  SizeOfCmCharacteristics);
       
  3416 
       
  3417 NDISAPI
       
  3418 VOID
       
  3419 DDKAPI
       
  3420 NdisCmRegisterSapComplete(
       
  3421   /*IN*/ NDIS_STATUS  Status,
       
  3422   /*IN*/ NDIS_HANDLE  NdisSapHandle,
       
  3423   /*IN*/ NDIS_HANDLE  CallMgrSapContext);
       
  3424 
       
  3425 
       
  3426 NDISAPI
       
  3427 NDIS_STATUS
       
  3428 DDKAPI
       
  3429 NdisMCmActivateVc(
       
  3430   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3431   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3432 
       
  3433 NDISAPI
       
  3434 NDIS_STATUS
       
  3435 DDKAPI
       
  3436 NdisMCmCreateVc(
       
  3437   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  3438   /*IN*/ NDIS_HANDLE  NdisAfHandle,
       
  3439   /*IN*/ NDIS_HANDLE  MiniportVcContext,
       
  3440   /*OUT*/  PNDIS_HANDLE  NdisVcHandle);
       
  3441 
       
  3442 NDISAPI
       
  3443 NDIS_STATUS
       
  3444 DDKAPI
       
  3445 NdisMCmDeactivateVc(
       
  3446   /*IN*/ NDIS_HANDLE  NdisVcHandle);
       
  3447 
       
  3448 NDISAPI
       
  3449 NDIS_STATUS
       
  3450 DDKAPI
       
  3451 NdisMCmDeleteVc(
       
  3452   /*IN*/ NDIS_HANDLE  NdisVcHandle);
       
  3453 
       
  3454 NDISAPI
       
  3455 NDIS_STATUS
       
  3456 DDKAPI
       
  3457 NdisMCmRegisterAddressFamily(
       
  3458   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  3459   /*IN*/ PCO_ADDRESS_FAMILY  AddressFamily,
       
  3460   /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS  CmCharacteristics,
       
  3461   /*IN*/ UINT  SizeOfCmCharacteristics);
       
  3462 
       
  3463 NDISAPI
       
  3464 NDIS_STATUS
       
  3465 DDKAPI
       
  3466 NdisMCmRequest(
       
  3467   /*IN*/ NDIS_HANDLE  NdisAfHandle,
       
  3468   /*IN*/ NDIS_HANDLE  NdisVcHandle  /*OPTIONAL*/,
       
  3469   /*IN*/ NDIS_HANDLE  NdisPartyHandle  /*OPTIONAL*/,
       
  3470   /*IN OUT*/  PNDIS_REQUEST  NdisRequest);
       
  3471 
       
  3472 
       
  3473 /* Connection-oriented services */
       
  3474 
       
  3475 NDISAPI
       
  3476 NDIS_STATUS
       
  3477 DDKAPI
       
  3478 NdisCoCreateVc(
       
  3479   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  3480   /*IN*/ NDIS_HANDLE  NdisAfHandle  /*OPTIONAL*/,
       
  3481   /*IN*/ NDIS_HANDLE  ProtocolVcContext,
       
  3482   /*IN OUT*/ PNDIS_HANDLE  NdisVcHandle);
       
  3483 
       
  3484 NDISAPI
       
  3485 NDIS_STATUS
       
  3486 DDKAPI
       
  3487 NdisCoDeleteVc(
       
  3488   /*IN*/ NDIS_HANDLE  NdisVcHandle);
       
  3489 
       
  3490 NDISAPI
       
  3491 NDIS_STATUS
       
  3492 DDKAPI
       
  3493 NdisCoRequest(
       
  3494   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  3495   /*IN*/ NDIS_HANDLE  NdisAfHandle  /*OPTIONAL*/,
       
  3496   /*IN*/ NDIS_HANDLE  NdisVcHandle  /*OPTIONAL*/,
       
  3497   /*IN*/ NDIS_HANDLE  NdisPartyHandle  /*OPTIONAL*/,
       
  3498   /*IN OUT*/  PNDIS_REQUEST  NdisRequest);
       
  3499 
       
  3500 NDISAPI
       
  3501 VOID
       
  3502 DDKAPI
       
  3503 NdisCoRequestComplete(
       
  3504   /*IN*/ NDIS_STATUS  Status,
       
  3505   /*IN*/ NDIS_HANDLE  NdisAfHandle,
       
  3506   /*IN*/ NDIS_HANDLE  NdisVcHandle  /*OPTIONAL*/,
       
  3507   /*IN*/ NDIS_HANDLE  NdisPartyHandle  /*OPTIONAL*/,
       
  3508   /*IN*/ PNDIS_REQUEST  NdisRequest);
       
  3509 
       
  3510 NDISAPI
       
  3511 VOID
       
  3512 DDKAPI
       
  3513 NdisCoSendPackets(
       
  3514   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3515   /*IN*/ PPNDIS_PACKET  PacketArray,
       
  3516   /*IN*/ UINT  NumberOfPackets);
       
  3517 
       
  3518 NDISAPI
       
  3519 VOID
       
  3520 DDKAPI
       
  3521 NdisMCoActivateVcComplete(
       
  3522   /*IN*/ NDIS_STATUS  Status,
       
  3523   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3524   /*IN*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3525 
       
  3526 NDISAPI
       
  3527 VOID
       
  3528 DDKAPI
       
  3529 NdisMCoDeactivateVcComplete(
       
  3530   /*IN*/ NDIS_STATUS  Status,
       
  3531   /*IN*/ NDIS_HANDLE  NdisVcHandle);
       
  3532 
       
  3533 NDISAPI
       
  3534 VOID
       
  3535 DDKAPI
       
  3536 NdisMCoIndicateReceivePacket(
       
  3537   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3538   /*IN*/ PPNDIS_PACKET  PacketArray,
       
  3539   /*IN*/ UINT  NumberOfPackets);
       
  3540 
       
  3541 NDISAPI
       
  3542 VOID
       
  3543 DDKAPI
       
  3544 NdisMCoIndicateStatus(
       
  3545   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  3546   /*IN*/ NDIS_HANDLE  NdisVcHandle  /*OPTIONAL*/,
       
  3547   /*IN*/ NDIS_STATUS  GeneralStatus,
       
  3548   /*IN*/ PVOID  StatusBuffer  /*OPTIONAL*/,
       
  3549   /*IN*/ ULONG  StatusBufferSize);
       
  3550 
       
  3551 NDISAPI
       
  3552 VOID
       
  3553 DDKAPI
       
  3554 NdisMCoReceiveComplete(
       
  3555   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  3556 
       
  3557 NDISAPI
       
  3558 VOID
       
  3559 DDKAPI
       
  3560 NdisMCoRequestComplete(
       
  3561   /*IN*/ NDIS_STATUS  Status,
       
  3562   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  3563   /*IN*/ PNDIS_REQUEST  Request);
       
  3564 
       
  3565 NDISAPI
       
  3566 VOID 
       
  3567 DDKAPI
       
  3568 NdisMCoSendComplete(
       
  3569   /*IN*/ NDIS_STATUS  Status,
       
  3570   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3571   /*IN*/ PNDIS_PACKET  Packet);
       
  3572 
       
  3573 
       
  3574 /* NDIS 5.0 extensions for intermediate drivers */
       
  3575 
       
  3576 NDISAPI
       
  3577 VOID
       
  3578 DDKAPI
       
  3579 NdisIMAssociateMiniport(
       
  3580   /*IN*/ NDIS_HANDLE  DriverHandle,
       
  3581   /*IN*/ NDIS_HANDLE  ProtocolHandle);
       
  3582 
       
  3583 NDISAPI
       
  3584 NDIS_STATUS 
       
  3585 DDKAPI
       
  3586 NdisIMCancelInitializeDeviceInstance(
       
  3587   /*IN*/ NDIS_HANDLE  DriverHandle,
       
  3588   /*IN*/ PNDIS_STRING  DeviceInstance);
       
  3589 
       
  3590 NDISAPI
       
  3591 VOID
       
  3592 DDKAPI
       
  3593 NdisIMCopySendCompletePerPacketInfo(
       
  3594   /*IN*/ PNDIS_PACKET  DstPacket,
       
  3595   /*IN*/ PNDIS_PACKET  SrcPacket);
       
  3596 
       
  3597 NDISAPI
       
  3598 VOID
       
  3599 DDKAPI
       
  3600 NdisIMCopySendPerPacketInfo(
       
  3601   /*IN*/ PNDIS_PACKET  DstPacket,
       
  3602   /*IN*/ PNDIS_PACKET  SrcPacket);
       
  3603 
       
  3604 NDISAPI
       
  3605 VOID
       
  3606 DDKAPI
       
  3607 NdisIMDeregisterLayeredMiniport(
       
  3608   /*IN*/ NDIS_HANDLE  DriverHandle);
       
  3609 
       
  3610 NDISAPI
       
  3611 NDIS_HANDLE
       
  3612 DDKAPI
       
  3613 NdisIMGetBindingContext(
       
  3614   /*IN*/ NDIS_HANDLE  NdisBindingHandle);
       
  3615 
       
  3616 NDISAPI
       
  3617 NDIS_HANDLE
       
  3618 DDKAPI
       
  3619 NdisIMGetDeviceContext(
       
  3620   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  3621 
       
  3622 NDISAPI
       
  3623 NDIS_STATUS
       
  3624 DDKAPI
       
  3625 NdisIMInitializeDeviceInstanceEx(
       
  3626   /*IN*/ NDIS_HANDLE  DriverHandle,
       
  3627   /*IN*/ PNDIS_STRING  DriverInstance,
       
  3628   /*IN*/ NDIS_HANDLE  DeviceContext  /*OPTIONAL*/);
       
  3629 
       
  3630 NDISAPI
       
  3631 PSINGLE_LIST_ENTRY
       
  3632 DDKAPI
       
  3633 NdisInterlockedPopEntrySList(
       
  3634   /*IN*/ PSLIST_HEADER  ListHead,
       
  3635   /*IN*/ PKSPIN_LOCK  Lock);
       
  3636 
       
  3637 NDISAPI
       
  3638 PSINGLE_LIST_ENTRY
       
  3639 DDKAPI
       
  3640 NdisInterlockedPushEntrySList(
       
  3641   /*IN*/ PSLIST_HEADER  ListHead,
       
  3642   /*IN*/ PSINGLE_LIST_ENTRY  ListEntry,
       
  3643   /*IN*/ PKSPIN_LOCK  Lock);
       
  3644 
       
  3645 NDISAPI
       
  3646 VOID
       
  3647 DDKAPI
       
  3648 NdisQueryBufferSafe(
       
  3649   /*IN*/ PNDIS_BUFFER  Buffer,
       
  3650   /*OUT*/ PVOID  *VirtualAddress  /*OPTIONAL*/,
       
  3651   /*OUT*/ PUINT  Length,
       
  3652   /*IN*/ UINT  Priority);
       
  3653 
       
  3654 
       
  3655 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
       
  3656 
       
  3657 typedef BOOLEAN DDKAPI
       
  3658 (*W_CHECK_FOR_HANG_HANDLER)(
       
  3659   /*IN*/ NDIS_HANDLE  MiniportAdapterContext);
       
  3660 
       
  3661 typedef VOID DDKAPI
       
  3662 (*W_DISABLE_INTERRUPT_HANDLER)(
       
  3663   /*IN*/ NDIS_HANDLE  MiniportAdapterContext);
       
  3664 
       
  3665 typedef VOID DDKAPI
       
  3666 (*W_ENABLE_INTERRUPT_HANDLER)(
       
  3667   /*IN*/ NDIS_HANDLE  MiniportAdapterContext);
       
  3668 
       
  3669 typedef VOID DDKAPI
       
  3670 (*W_HALT_HANDLER)(
       
  3671   /*IN*/ NDIS_HANDLE  MiniportAdapterContext);
       
  3672 
       
  3673 typedef VOID DDKAPI
       
  3674 (*W_HANDLE_INTERRUPT_HANDLER)(
       
  3675   /*IN*/ NDIS_HANDLE  MiniportAdapterContext);
       
  3676 
       
  3677 typedef NDIS_STATUS DDKAPI
       
  3678 (*W_INITIALIZE_HANDLER)(
       
  3679   /*OUT*/ PNDIS_STATUS  OpenErrorStatus,
       
  3680   /*OUT*/ PUINT  SelectedMediumIndex,
       
  3681   /*IN*/ PNDIS_MEDIUM  MediumArray,
       
  3682   /*IN*/ UINT  MediumArraySize,
       
  3683   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3684   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext);
       
  3685 
       
  3686 typedef VOID DDKAPI
       
  3687 (*W_ISR_HANDLER)(
       
  3688   /*OUT*/ PBOOLEAN  InterruptRecognized,
       
  3689   /*OUT*/ PBOOLEAN  QueueMiniportHandleInterrupt,
       
  3690   /*IN*/ NDIS_HANDLE  MiniportAdapterContext);
       
  3691  
       
  3692 typedef NDIS_STATUS DDKAPI
       
  3693 (*W_QUERY_INFORMATION_HANDLER)(
       
  3694   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3695   /*IN*/ NDIS_OID  Oid,
       
  3696   /*IN*/ PVOID  InformationBuffer,
       
  3697   /*IN*/ ULONG  InformationBufferLength,
       
  3698   /*OUT*/ PULONG  BytesWritten,
       
  3699   /*OUT*/ PULONG  BytesNeeded);
       
  3700 
       
  3701 typedef NDIS_STATUS DDKAPI
       
  3702 (*W_RECONFIGURE_HANDLER)(
       
  3703   /*OUT*/ PNDIS_STATUS  OpenErrorStatus,
       
  3704   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3705   /*IN*/ NDIS_HANDLE	WrapperConfigurationContext);
       
  3706 
       
  3707 typedef NDIS_STATUS DDKAPI
       
  3708 (*W_RESET_HANDLER)(
       
  3709   /*OUT*/ PBOOLEAN  AddressingReset,
       
  3710   /*IN*/ NDIS_HANDLE  MiniportAdapterContext);
       
  3711 
       
  3712 typedef NDIS_STATUS DDKAPI
       
  3713 (*W_SEND_HANDLER)(
       
  3714   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3715   /*IN*/ PNDIS_PACKET  Packet,
       
  3716   /*IN*/ UINT  Flags);
       
  3717 
       
  3718 typedef NDIS_STATUS DDKAPI
       
  3719 (*WM_SEND_HANDLER)(
       
  3720   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3721   /*IN*/ NDIS_HANDLE  NdisLinkHandle,
       
  3722   /*IN*/ PNDIS_WAN_PACKET  Packet);
       
  3723 
       
  3724 typedef NDIS_STATUS DDKAPI
       
  3725 (*W_SET_INFORMATION_HANDLER)(
       
  3726   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3727   /*IN*/ NDIS_OID  Oid,
       
  3728   /*IN*/ PVOID  InformationBuffer,
       
  3729   /*IN*/ ULONG  InformationBufferLength,
       
  3730   /*OUT*/ PULONG  BytesRead,
       
  3731   /*OUT*/ PULONG  BytesNeeded);
       
  3732 
       
  3733 typedef NDIS_STATUS DDKAPI
       
  3734 (*W_TRANSFER_DATA_HANDLER)(
       
  3735   /*OUT*/ PNDIS_PACKET  Packet,
       
  3736   /*OUT*/ PUINT  BytesTransferred,
       
  3737   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3738   /*IN*/ NDIS_HANDLE  MiniportReceiveContext,
       
  3739   /*IN*/ UINT  ByteOffset,
       
  3740   /*IN*/ UINT  BytesToTransfer);
       
  3741 
       
  3742 typedef NDIS_STATUS DDKAPI
       
  3743 (*WM_TRANSFER_DATA_HANDLER)(
       
  3744   VOID);
       
  3745 
       
  3746 
       
  3747 /* NDIS structures available only to miniport drivers */
       
  3748 
       
  3749 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
       
  3750   UCHAR  MajorNdisVersion; \
       
  3751   UCHAR  MinorNdisVersion; \
       
  3752   UINT  Reserved; \
       
  3753   W_CHECK_FOR_HANG_HANDLER  CheckForHangHandler; \
       
  3754   W_DISABLE_INTERRUPT_HANDLER  DisableInterruptHandler; \
       
  3755   W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler; \
       
  3756   W_HALT_HANDLER  HaltHandler; \
       
  3757   W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler; \
       
  3758   W_INITIALIZE_HANDLER  InitializeHandler; \
       
  3759   W_ISR_HANDLER  ISRHandler; \
       
  3760   W_QUERY_INFORMATION_HANDLER  QueryInformationHandler; \
       
  3761   W_RECONFIGURE_HANDLER  ReconfigureHandler; \
       
  3762   W_RESET_HANDLER  ResetHandler; \
       
  3763   _ANONYMOUS_UNION union { \
       
  3764     W_SEND_HANDLER  SendHandler; \
       
  3765     WM_SEND_HANDLER  WanSendHandler; \
       
  3766   } _UNION_NAME(u1); \
       
  3767   W_SET_INFORMATION_HANDLER  SetInformationHandler; \
       
  3768   _ANONYMOUS_UNION union { \
       
  3769     W_TRANSFER_DATA_HANDLER  TransferDataHandler; \
       
  3770     WM_TRANSFER_DATA_HANDLER  WanTransferDataHandler; \
       
  3771   } _UNION_NAME(u2);
       
  3772 
       
  3773 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
       
  3774   NDIS30_MINIPORT_CHARACTERISTICS_S
       
  3775 } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
       
  3776 
       
  3777 
       
  3778 /* Extensions for NDIS 4.0 miniports */
       
  3779 
       
  3780 typedef VOID DDKAPI
       
  3781 (*W_SEND_PACKETS_HANDLER)(
       
  3782   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3783   /*IN*/ PPNDIS_PACKET  PacketArray,
       
  3784   /*IN*/ UINT  NumberOfPackets);
       
  3785 
       
  3786 typedef VOID DDKAPI
       
  3787 (*W_RETURN_PACKET_HANDLER)(
       
  3788   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3789   /*IN*/ PNDIS_PACKET  Packet);
       
  3790 
       
  3791 typedef VOID DDKAPI
       
  3792 (*W_ALLOCATE_COMPLETE_HANDLER)(
       
  3793   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3794   /*IN*/ PVOID  VirtualAddress,
       
  3795   /*IN*/ PNDIS_PHYSICAL_ADDRESS  PhysicalAddress,
       
  3796   /*IN*/ ULONG  Length,
       
  3797   /*IN*/ PVOID  Context);
       
  3798 
       
  3799 #ifdef __cplusplus
       
  3800 
       
  3801 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
       
  3802   NDIS30_MINIPORT_CHARACTERISTICS  Ndis30Chars; \
       
  3803   W_RETURN_PACKET_HANDLER  ReturnPacketHandler; \
       
  3804   W_SEND_PACKETS_HANDLER  SendPacketsHandler; \
       
  3805   W_ALLOCATE_COMPLETE_HANDLER  AllocateCompleteHandler;
       
  3806 
       
  3807 #else /* !__cplusplus */
       
  3808 
       
  3809 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
       
  3810   NDIS30_MINIPORT_CHARACTERISTICS_S \
       
  3811   W_RETURN_PACKET_HANDLER  ReturnPacketHandler; \
       
  3812   W_SEND_PACKETS_HANDLER  SendPacketsHandler; \
       
  3813   W_ALLOCATE_COMPLETE_HANDLER  AllocateCompleteHandler;
       
  3814 
       
  3815 #endif /* !__cplusplus */
       
  3816 
       
  3817 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
       
  3818   NDIS40_MINIPORT_CHARACTERISTICS_S
       
  3819 } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
       
  3820 
       
  3821 
       
  3822 /* Extensions for NDIS 5.0 miniports */
       
  3823 
       
  3824 typedef NDIS_STATUS DDKAPI
       
  3825 (*W_CO_CREATE_VC_HANDLER)(
       
  3826   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3827   /*IN*/ NDIS_HANDLE  NdisVcHandle,
       
  3828   /*OUT*/ PNDIS_HANDLE  MiniportVcContext);
       
  3829 
       
  3830 typedef NDIS_STATUS DDKAPI
       
  3831 (*W_CO_DELETE_VC_HANDLER)(
       
  3832   /*IN*/ NDIS_HANDLE  MiniportVcContext);
       
  3833 
       
  3834 typedef NDIS_STATUS DDKAPI
       
  3835 (*W_CO_ACTIVATE_VC_HANDLER)(
       
  3836   /*IN*/ NDIS_HANDLE  MiniportVcContext,
       
  3837   /*IN OUT*/ PCO_CALL_PARAMETERS  CallParameters);
       
  3838 
       
  3839 typedef NDIS_STATUS DDKAPI
       
  3840 (*W_CO_DEACTIVATE_VC_HANDLER)(
       
  3841   /*IN*/ NDIS_HANDLE  MiniportVcContext);
       
  3842 
       
  3843 typedef VOID DDKAPI
       
  3844 (*W_CO_SEND_PACKETS_HANDLER)(
       
  3845   /*IN*/ NDIS_HANDLE  MiniportVcContext,
       
  3846   /*IN*/ PPNDIS_PACKET  PacketArray,
       
  3847   /*IN*/ UINT  NumberOfPackets);
       
  3848 
       
  3849 typedef NDIS_STATUS DDKAPI
       
  3850 (*W_CO_REQUEST_HANDLER)(
       
  3851   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3852   /*IN*/ NDIS_HANDLE  MiniportVcContext  /*OPTIONAL*/,
       
  3853   /*IN OUT*/ PNDIS_REQUEST  NdisRequest);
       
  3854 
       
  3855 #ifdef __cplusplus
       
  3856 
       
  3857 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
       
  3858   NDIS40_MINIPORT_CHARACTERISTICS  Ndis40Chars; \
       
  3859   W_CO_CREATE_VC_HANDLER  CoCreateVcHandler; \
       
  3860   W_CO_DELETE_VC_HANDLER  CoDeleteVcHandler; \
       
  3861   W_CO_ACTIVATE_VC_HANDLER  CoActivateVcHandler; \
       
  3862   W_CO_DEACTIVATE_VC_HANDLER  CoDeactivateVcHandler; \
       
  3863   W_CO_SEND_PACKETS_HANDLER  CoSendPacketsHandler; \
       
  3864   W_CO_REQUEST_HANDLER  CoRequestHandler;
       
  3865 
       
  3866 #else /* !__cplusplus */
       
  3867 
       
  3868 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
       
  3869   NDIS40_MINIPORT_CHARACTERISTICS_S \
       
  3870   W_CO_CREATE_VC_HANDLER  CoCreateVcHandler; \
       
  3871   W_CO_DELETE_VC_HANDLER  CoDeleteVcHandler; \
       
  3872   W_CO_ACTIVATE_VC_HANDLER  CoActivateVcHandler; \
       
  3873   W_CO_DEACTIVATE_VC_HANDLER  CoDeactivateVcHandler; \
       
  3874   W_CO_SEND_PACKETS_HANDLER  CoSendPacketsHandler; \
       
  3875   W_CO_REQUEST_HANDLER  CoRequestHandler;
       
  3876 
       
  3877 #endif /* !__cplusplus */
       
  3878 
       
  3879 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
       
  3880    NDIS50_MINIPORT_CHARACTERISTICS_S
       
  3881 } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
       
  3882 
       
  3883 
       
  3884 /* Extensions for NDIS 5.1 miniports */
       
  3885 
       
  3886 typedef VOID DDKAPI
       
  3887 (*W_CANCEL_SEND_PACKETS_HANDLER)(
       
  3888   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  3889   /*IN*/ PVOID  CancelId);
       
  3890 
       
  3891 
       
  3892 #if defined(NDIS51)
       
  3893 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
       
  3894   NDIS50_MINIPORT_CHARACTERISTICS_S
       
  3895 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
       
  3896 #elif defined(NDIS50)
       
  3897 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
       
  3898   NDIS50_MINIPORT_CHARACTERISTICS_S
       
  3899 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
       
  3900 #elif defined(NDIS40)
       
  3901 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
       
  3902   NDIS40_MINIPORT_CHARACTERISTICS_S
       
  3903 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
       
  3904 #elif defined(NDIS30)
       
  3905 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
       
  3906   NDIS30_MINIPORT_CHARACTERISTICS_S
       
  3907 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
       
  3908 #endif /* NDIS30 */
       
  3909 
       
  3910 
       
  3911 typedef NDIS_STATUS DDKAPI
       
  3912 (*SEND_HANDLER)(
       
  3913   /*IN*/ NDIS_HANDLE  MacBindingHandle,
       
  3914   /*IN*/ PNDIS_PACKET  Packet);
       
  3915 
       
  3916 typedef NDIS_STATUS DDKAPI
       
  3917 (*TRANSFER_DATA_HANDLER)(
       
  3918   /*IN*/ NDIS_HANDLE  MacBindingHandle,
       
  3919   /*IN*/ NDIS_HANDLE  MacReceiveContext,
       
  3920   /*IN*/ UINT  ByteOffset,
       
  3921   /*IN*/ UINT  BytesToTransfer,
       
  3922   /*OUT*/ PNDIS_PACKET  Packet,
       
  3923   /*OUT*/ PUINT  BytesTransferred);
       
  3924 
       
  3925 typedef NDIS_STATUS DDKAPI
       
  3926 (*RESET_HANDLER)(
       
  3927   /*IN*/ NDIS_HANDLE  MacBindingHandle);
       
  3928 
       
  3929 typedef NDIS_STATUS DDKAPI
       
  3930 (*REQUEST_HANDLER)(
       
  3931   /*IN*/ NDIS_HANDLE   MacBindingHandle,
       
  3932   /*IN*/ PNDIS_REQUEST   NdisRequest);
       
  3933 
       
  3934 
       
  3935 
       
  3936 /* Structures available only to full MAC drivers */
       
  3937 
       
  3938 typedef BOOLEAN DDKAPI
       
  3939 (*PNDIS_INTERRUPT_SERVICE)(
       
  3940   /*IN*/ PVOID  InterruptContext);
       
  3941 
       
  3942 typedef VOID DDKAPI
       
  3943 (*PNDIS_DEFERRED_PROCESSING)(
       
  3944   /*IN*/ PVOID  SystemSpecific1,
       
  3945   /*IN*/ PVOID  InterruptContext,
       
  3946   /*IN*/ PVOID  SystemSpecific2,
       
  3947   /*IN*/ PVOID  SystemSpecific3);
       
  3948 
       
  3949 
       
  3950 
       
  3951 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
       
  3952 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
       
  3953 typedef struct _NDIS_OPEN_BLOCK		NDIS_OPEN_BLOCK,     *PNDIS_OPEN_BLOCK;
       
  3954 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
       
  3955 typedef	struct _NDIS_AF_LIST        NDIS_AF_LIST,        *PNDIS_AF_LIST;
       
  3956 
       
  3957 
       
  3958 typedef struct _NDIS_MINIPORT_INTERRUPT {
       
  3959   PKINTERRUPT  InterruptObject;
       
  3960   KSPIN_LOCK  DpcCountLock;
       
  3961   PVOID  MiniportIdField;
       
  3962   W_ISR_HANDLER  MiniportIsr;
       
  3963   W_HANDLE_INTERRUPT_HANDLER  MiniportDpc;
       
  3964   KDPC  InterruptDpc;
       
  3965   PNDIS_MINIPORT_BLOCK  Miniport;
       
  3966   UCHAR  DpcCount;
       
  3967   BOOLEAN  Filler1;
       
  3968   KEVENT  DpcsCompletedEvent;
       
  3969   BOOLEAN  SharedInterrupt;
       
  3970   BOOLEAN	 IsrRequested;
       
  3971 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
       
  3972 
       
  3973 typedef struct _NDIS_MINIPORT_TIMER {
       
  3974   KTIMER  Timer;
       
  3975   KDPC  Dpc;
       
  3976   PNDIS_TIMER_FUNCTION  MiniportTimerFunction;
       
  3977   PVOID  MiniportTimerContext;
       
  3978   PNDIS_MINIPORT_BLOCK  Miniport;
       
  3979   struct _NDIS_MINIPORT_TIMER  *NextDeferredTimer;
       
  3980 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
       
  3981 
       
  3982 typedef struct _NDIS_INTERRUPT {
       
  3983   PKINTERRUPT  InterruptObject;
       
  3984   KSPIN_LOCK  DpcCountLock;
       
  3985   PNDIS_INTERRUPT_SERVICE  MacIsr;
       
  3986   PNDIS_DEFERRED_PROCESSING  MacDpc;
       
  3987   KDPC  InterruptDpc;
       
  3988   PVOID  InterruptContext;
       
  3989   UCHAR  DpcCount;
       
  3990   BOOLEAN	 Removing;
       
  3991   KEVENT  DpcsCompletedEvent;
       
  3992 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
       
  3993 
       
  3994 
       
  3995 typedef struct _MAP_REGISTER_ENTRY {
       
  3996 	PVOID  MapRegister;
       
  3997 	BOOLEAN  WriteToDevice;
       
  3998 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
       
  3999 
       
  4000 
       
  4001 typedef enum _NDIS_WORK_ITEM_TYPE {
       
  4002   NdisWorkItemRequest,
       
  4003   NdisWorkItemSend,
       
  4004   NdisWorkItemReturnPackets,
       
  4005   NdisWorkItemResetRequested,
       
  4006   NdisWorkItemResetInProgress,
       
  4007   NdisWorkItemHalt,
       
  4008   NdisWorkItemSendLoopback,
       
  4009   NdisWorkItemMiniportCallback,
       
  4010   NdisMaxWorkItems
       
  4011 } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
       
  4012 
       
  4013 #define	NUMBER_OF_WORK_ITEM_TYPES         NdisMaxWorkItems
       
  4014 #define	NUMBER_OF_SINGLE_WORK_ITEMS       6
       
  4015 
       
  4016 typedef struct _NDIS_MINIPORT_WORK_ITEM {
       
  4017 	SINGLE_LIST_ENTRY  Link;
       
  4018 	NDIS_WORK_ITEM_TYPE  WorkItemType;
       
  4019 	PVOID  WorkItemContext;
       
  4020 } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
       
  4021 
       
  4022 
       
  4023 typedef struct _NDIS_BIND_PATHS {
       
  4024 	UINT  Number;
       
  4025 	NDIS_STRING  Paths[1];
       
  4026 } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
       
  4027 
       
  4028 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
       
  4029   typedef struct _##BaseName BaseName, *P##BaseName;
       
  4030 
       
  4031 #define DECLARE_UNKNOWN_PROTOTYPE(Name) \
       
  4032   typedef VOID (*(Name))(VOID);
       
  4033 
       
  4034 #define ETH_LENGTH_OF_ADDRESS 6
       
  4035 
       
  4036 DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO)
       
  4037 
       
  4038 DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)
       
  4039 DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)
       
  4040 DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)
       
  4041 
       
  4042 typedef struct _ETH_FILTER {
       
  4043   PNDIS_SPIN_LOCK  Lock;
       
  4044   CHAR  (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
       
  4045   struct _NDIS_MINIPORT_BLOCK  *Miniport;
       
  4046   UINT  CombinedPacketFilter;
       
  4047   PETH_BINDING_INFO  OpenList;
       
  4048   ETH_ADDRESS_CHANGE  AddressChangeAction;
       
  4049   ETH_FILTER_CHANGE  FilterChangeAction;
       
  4050   ETH_DEFERRED_CLOSE  CloseAction;
       
  4051   UINT  MaxMulticastAddresses;
       
  4052   UINT  NumAddresses;
       
  4053   UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS];
       
  4054   UINT  OldCombinedPacketFilter;
       
  4055   CHAR  (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
       
  4056   UINT  OldNumAddresses;
       
  4057   PETH_BINDING_INFO  DirectedList;
       
  4058   PETH_BINDING_INFO  BMList;
       
  4059   PETH_BINDING_INFO  MCastSet;
       
  4060 #if defined(_NDIS_)
       
  4061   UINT  NumOpens;
       
  4062   PVOID  BindListLock;
       
  4063 #endif
       
  4064 } ETH_FILTER, *PETH_FILTER;
       
  4065 
       
  4066 typedef VOID DDKAPI
       
  4067 (*ETH_RCV_COMPLETE_HANDLER)(
       
  4068   /*IN*/ PETH_FILTER  Filter);
       
  4069 
       
  4070 typedef VOID DDKAPI
       
  4071 (*ETH_RCV_INDICATE_HANDLER)(
       
  4072   /*IN*/ PETH_FILTER  Filter,
       
  4073   /*IN*/ NDIS_HANDLE  MacReceiveContext,
       
  4074   /*IN*/ PCHAR  Address,
       
  4075   /*IN*/ PVOID  HeaderBuffer,
       
  4076   /*IN*/ UINT  HeaderBufferSize,
       
  4077   /*IN*/ PVOID  LookaheadBuffer,
       
  4078   /*IN*/ UINT  LookaheadBufferSize,
       
  4079   /*IN*/ UINT  PacketSize);
       
  4080 
       
  4081 typedef VOID DDKAPI
       
  4082 (*FDDI_RCV_COMPLETE_HANDLER)(
       
  4083   /*IN*/ PFDDI_FILTER  Filter);
       
  4084 
       
  4085 typedef VOID DDKAPI
       
  4086 (*FDDI_RCV_INDICATE_HANDLER)(
       
  4087   /*IN*/ PFDDI_FILTER  Filter,
       
  4088   /*IN*/ NDIS_HANDLE  MacReceiveContext,
       
  4089   /*IN*/ PCHAR  Address,
       
  4090   /*IN*/ UINT  AddressLength,
       
  4091   /*IN*/ PVOID  HeaderBuffer,
       
  4092   /*IN*/ UINT  HeaderBufferSize,
       
  4093   /*IN*/ PVOID  LookaheadBuffer,
       
  4094   /*IN*/ UINT  LookaheadBufferSize,
       
  4095   /*IN*/ UINT  PacketSize);
       
  4096 
       
  4097 typedef VOID DDKAPI
       
  4098 (*FILTER_PACKET_INDICATION_HANDLER)(
       
  4099   /*IN*/ NDIS_HANDLE  Miniport,
       
  4100   /*IN*/ PPNDIS_PACKET  PacketArray,
       
  4101   /*IN*/ UINT  NumberOfPackets);
       
  4102 
       
  4103 typedef VOID DDKAPI
       
  4104 (*TR_RCV_COMPLETE_HANDLER)(
       
  4105   /*IN*/ PTR_FILTER  Filter);
       
  4106 
       
  4107 typedef VOID DDKAPI
       
  4108 (*TR_RCV_INDICATE_HANDLER)(
       
  4109   /*IN*/ PTR_FILTER  Filter,
       
  4110   /*IN*/ NDIS_HANDLE  MacReceiveContext,
       
  4111   /*IN*/ PVOID  HeaderBuffer,
       
  4112   /*IN*/ UINT  HeaderBufferSize,
       
  4113   /*IN*/ PVOID  LookaheadBuffer,
       
  4114   /*IN*/ UINT  LookaheadBufferSize,
       
  4115   /*IN*/ UINT  PacketSize);
       
  4116 
       
  4117 typedef VOID DDKAPI
       
  4118 (*WAN_RCV_COMPLETE_HANDLER)(
       
  4119   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4120   /*IN*/ NDIS_HANDLE  NdisLinkContext);
       
  4121 
       
  4122 typedef VOID DDKAPI
       
  4123 (*WAN_RCV_HANDLER)(
       
  4124   /*OUT*/ PNDIS_STATUS  Status,
       
  4125   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4126   /*IN*/ NDIS_HANDLE  NdisLinkContext,
       
  4127   /*IN*/ PUCHAR  Packet,
       
  4128   /*IN*/ ULONG  PacketSize);
       
  4129 
       
  4130 typedef VOID DDKFASTAPI
       
  4131 (*NDIS_M_DEQUEUE_WORK_ITEM)(
       
  4132   /*IN*/ PNDIS_MINIPORT_BLOCK  Miniport,
       
  4133   /*IN*/ NDIS_WORK_ITEM_TYPE  WorkItemType,
       
  4134   /*OUT*/ PVOID  *WorkItemContext);
       
  4135 
       
  4136 typedef NDIS_STATUS DDKFASTAPI
       
  4137 (*NDIS_M_QUEUE_NEW_WORK_ITEM)(
       
  4138   /*IN*/ PNDIS_MINIPORT_BLOCK  Miniport,
       
  4139   /*IN*/ NDIS_WORK_ITEM_TYPE  WorkItemType,
       
  4140   /*IN*/ PVOID  WorkItemContext);
       
  4141 
       
  4142 typedef NDIS_STATUS DDKFASTAPI
       
  4143 (*NDIS_M_QUEUE_WORK_ITEM)(
       
  4144   /*IN*/ PNDIS_MINIPORT_BLOCK  Miniport,
       
  4145   /*IN*/ NDIS_WORK_ITEM_TYPE  WorkItemType,
       
  4146   /*IN*/ PVOID  WorkItemContext);
       
  4147 
       
  4148 typedef VOID DDKAPI
       
  4149 (*NDIS_M_REQ_COMPLETE_HANDLER)(
       
  4150   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4151   /*IN*/ NDIS_STATUS  Status);
       
  4152 
       
  4153 typedef VOID DDKAPI
       
  4154 (*NDIS_M_RESET_COMPLETE_HANDLER)(
       
  4155   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4156   /*IN*/ NDIS_STATUS  Status,
       
  4157   /*IN*/ BOOLEAN  AddressingReset);
       
  4158 
       
  4159 typedef VOID DDKAPI
       
  4160 (*NDIS_M_SEND_COMPLETE_HANDLER)(
       
  4161   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4162   /*IN*/ PNDIS_PACKET  Packet,
       
  4163   /*IN*/ NDIS_STATUS  Status);
       
  4164 
       
  4165 typedef VOID DDKAPI
       
  4166 (*NDIS_M_SEND_RESOURCES_HANDLER)(
       
  4167   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  4168 
       
  4169 typedef BOOLEAN DDKFASTAPI
       
  4170 (*NDIS_M_START_SENDS)(
       
  4171   /*IN*/ PNDIS_MINIPORT_BLOCK  Miniport);
       
  4172 
       
  4173 typedef VOID DDKAPI
       
  4174 (*NDIS_M_STATUS_HANDLER)(
       
  4175   /*IN*/ NDIS_HANDLE  MiniportHandle,
       
  4176   /*IN*/ NDIS_STATUS  GeneralStatus,
       
  4177   /*IN*/ PVOID  StatusBuffer,
       
  4178   /*IN*/ UINT  StatusBufferSize);
       
  4179 
       
  4180 typedef VOID DDKAPI
       
  4181 (*NDIS_M_STS_COMPLETE_HANDLER)(
       
  4182   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  4183 
       
  4184 typedef VOID DDKAPI
       
  4185 (*NDIS_M_TD_COMPLETE_HANDLER)(
       
  4186   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4187   /*IN*/ PNDIS_PACKET  Packet,
       
  4188   /*IN*/ NDIS_STATUS  Status,
       
  4189   /*IN*/ UINT  BytesTransferred);
       
  4190 
       
  4191 typedef VOID (DDKAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
       
  4192   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4193   /*IN*/ PVOID  Packet,
       
  4194   /*IN*/ NDIS_STATUS  Status);
       
  4195 
       
  4196 
       
  4197 #if ARCNET
       
  4198 
       
  4199 #define ARC_SEND_BUFFERS                  8
       
  4200 #define ARC_HEADER_SIZE                   4
       
  4201 
       
  4202 typedef struct _NDIS_ARC_BUF {
       
  4203   NDIS_HANDLE  ArcnetBufferPool;
       
  4204   PUCHAR  ArcnetLookaheadBuffer;
       
  4205   UINT  NumFree;
       
  4206   ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
       
  4207 } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
       
  4208 
       
  4209 #endif /* ARCNET */
       
  4210 
       
  4211 #define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
       
  4212 
       
  4213 typedef struct _NDIS_LOG {
       
  4214   PNDIS_MINIPORT_BLOCK  Miniport;
       
  4215   KSPIN_LOCK  LogLock;
       
  4216   PIRP  Irp;
       
  4217   UINT  TotalSize;
       
  4218   UINT  CurrentSize;
       
  4219   UINT  InPtr;
       
  4220   UINT  OutPtr;
       
  4221   UCHAR  LogBuf[1];
       
  4222 } NDIS_LOG, *PNDIS_LOG;
       
  4223 
       
  4224 typedef struct _FILTERDBS {
       
  4225   _ANONYMOUS_UNION union {
       
  4226     PETH_FILTER  EthDB;
       
  4227     PNULL_FILTER  NullDB;
       
  4228   } DUMMYUNIONNAME;
       
  4229   PTR_FILTER  TrDB;
       
  4230   PFDDI_FILTER  FddiDB;
       
  4231 #if ARCNET
       
  4232   PARC_FILTER  ArcDB;
       
  4233 #else /* !ARCNET */
       
  4234   PVOID  XXXDB;
       
  4235 #endif /* !ARCNET */
       
  4236 } FILTERDBS, *PFILTERDBS;
       
  4237 
       
  4238 
       
  4239 struct _NDIS_MINIPORT_BLOCK {
       
  4240   PVOID  Signature;
       
  4241   PNDIS_MINIPORT_BLOCK  NextMiniport;
       
  4242   PNDIS_M_DRIVER_BLOCK  DriverHandle;
       
  4243   NDIS_HANDLE  MiniportAdapterContext;
       
  4244   UNICODE_STRING  MiniportName;
       
  4245   PNDIS_BIND_PATHS  BindPaths;
       
  4246   NDIS_HANDLE  OpenQueue;
       
  4247   REFERENCE  Ref;
       
  4248   NDIS_HANDLE  DeviceContext;
       
  4249   UCHAR  Padding1;
       
  4250   UCHAR  LockAcquired;
       
  4251   UCHAR  PmodeOpens;
       
  4252   UCHAR  AssignedProcessor;
       
  4253   KSPIN_LOCK  Lock;
       
  4254   PNDIS_REQUEST  MediaRequest;
       
  4255   PNDIS_MINIPORT_INTERRUPT  Interrupt;
       
  4256   ULONG  Flags;
       
  4257   ULONG  PnPFlags;
       
  4258   LIST_ENTRY  PacketList;
       
  4259   PNDIS_PACKET  FirstPendingPacket;
       
  4260   PNDIS_PACKET  ReturnPacketsQueue;
       
  4261   ULONG  RequestBuffer;
       
  4262   PVOID  SetMCastBuffer;
       
  4263   PNDIS_MINIPORT_BLOCK  PrimaryMiniport;
       
  4264   PVOID  WrapperContext;
       
  4265   PVOID  BusDataContext;
       
  4266   ULONG  PnPCapabilities;
       
  4267   PCM_RESOURCE_LIST  Resources;
       
  4268   NDIS_TIMER  WakeUpDpcTimer;
       
  4269   UNICODE_STRING  BaseName;
       
  4270   UNICODE_STRING  SymbolicLinkName;
       
  4271   ULONG  CheckForHangSeconds;
       
  4272   USHORT  CFHangTicks;
       
  4273   USHORT  CFHangCurrentTick;
       
  4274   NDIS_STATUS  ResetStatus;
       
  4275   NDIS_HANDLE  ResetOpen;
       
  4276   FILTERDBS  FilterDbs;
       
  4277   FILTER_PACKET_INDICATION_HANDLER  PacketIndicateHandler;
       
  4278   NDIS_M_SEND_COMPLETE_HANDLER  SendCompleteHandler;
       
  4279   NDIS_M_SEND_RESOURCES_HANDLER  SendResourcesHandler;
       
  4280   NDIS_M_RESET_COMPLETE_HANDLER  ResetCompleteHandler;
       
  4281   NDIS_MEDIUM  MediaType;
       
  4282   ULONG  BusNumber;
       
  4283   NDIS_INTERFACE_TYPE  BusType;
       
  4284   NDIS_INTERFACE_TYPE  AdapterType;
       
  4285   PDEVICE_OBJECT  DeviceObject;
       
  4286   PDEVICE_OBJECT  PhysicalDeviceObject;
       
  4287   PDEVICE_OBJECT  NextDeviceObject;
       
  4288   PMAP_REGISTER_ENTRY  MapRegisters;
       
  4289   PNDIS_AF_LIST  CallMgrAfList;
       
  4290   PVOID  MiniportThread;
       
  4291   PVOID  SetInfoBuf;
       
  4292   USHORT  SetInfoBufLen;
       
  4293   USHORT  MaxSendPackets;
       
  4294   NDIS_STATUS  FakeStatus;
       
  4295   PVOID  LockHandler;
       
  4296   PUNICODE_STRING  pAdapterInstanceName;
       
  4297   PNDIS_MINIPORT_TIMER  TimerQueue;
       
  4298   UINT  MacOptions;
       
  4299   PNDIS_REQUEST  PendingRequest;
       
  4300   UINT  MaximumLongAddresses;
       
  4301   UINT  MaximumShortAddresses;
       
  4302   UINT  CurrentLookahead;
       
  4303   UINT  MaximumLookahead;
       
  4304   W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler;
       
  4305   W_DISABLE_INTERRUPT_HANDLER  DisableInterruptHandler;
       
  4306   W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler;
       
  4307   W_SEND_PACKETS_HANDLER  SendPacketsHandler;
       
  4308   NDIS_M_START_SENDS  DeferredSendHandler;
       
  4309   ETH_RCV_INDICATE_HANDLER  EthRxIndicateHandler;
       
  4310   TR_RCV_INDICATE_HANDLER  TrRxIndicateHandler;
       
  4311   FDDI_RCV_INDICATE_HANDLER  FddiRxIndicateHandler;
       
  4312   ETH_RCV_COMPLETE_HANDLER  EthRxCompleteHandler;
       
  4313   TR_RCV_COMPLETE_HANDLER  TrRxCompleteHandler;
       
  4314   FDDI_RCV_COMPLETE_HANDLER  FddiRxCompleteHandler;
       
  4315   NDIS_M_STATUS_HANDLER  StatusHandler;
       
  4316   NDIS_M_STS_COMPLETE_HANDLER  StatusCompleteHandler;
       
  4317   NDIS_M_TD_COMPLETE_HANDLER  TDCompleteHandler;
       
  4318   NDIS_M_REQ_COMPLETE_HANDLER  QueryCompleteHandler;
       
  4319   NDIS_M_REQ_COMPLETE_HANDLER  SetCompleteHandler;
       
  4320   NDIS_WM_SEND_COMPLETE_HANDLER  WanSendCompleteHandler;
       
  4321   WAN_RCV_HANDLER  WanRcvHandler;
       
  4322   WAN_RCV_COMPLETE_HANDLER  WanRcvCompleteHandler;
       
  4323 #if defined(_NDIS_)
       
  4324   PNDIS_MINIPORT_BLOCK  NextGlobalMiniport;
       
  4325   SINGLE_LIST_ENTRY  WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
       
  4326   SINGLE_LIST_ENTRY  SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
       
  4327   UCHAR  SendFlags;
       
  4328   UCHAR  TrResetRing;
       
  4329   UCHAR  ArcnetAddress;
       
  4330   UCHAR  XState;
       
  4331   _ANONYMOUS_UNION union {
       
  4332 #if ARCNET
       
  4333     PNDIS_ARC_BUF  ArcBuf;
       
  4334 #endif
       
  4335     PVOID  BusInterface;
       
  4336   } DUMMYUNIONNAME;
       
  4337   PNDIS_LOG  Log;
       
  4338   ULONG  SlotNumber;
       
  4339   PCM_RESOURCE_LIST  AllocatedResources;
       
  4340   PCM_RESOURCE_LIST  AllocatedResourcesTranslated;
       
  4341   SINGLE_LIST_ENTRY  PatternList;
       
  4342   NDIS_PNP_CAPABILITIES  PMCapabilities;
       
  4343   DEVICE_CAPABILITIES  DeviceCaps;
       
  4344   ULONG  WakeUpEnable;
       
  4345   DEVICE_POWER_STATE  CurrentDevicePowerState;
       
  4346   PIRP  pIrpWaitWake;
       
  4347   SYSTEM_POWER_STATE  WaitWakeSystemState;
       
  4348   LARGE_INTEGER  VcIndex;
       
  4349   KSPIN_LOCK  VcCountLock;
       
  4350   LIST_ENTRY  WmiEnabledVcs;
       
  4351   PNDIS_GUID  pNdisGuidMap;
       
  4352   PNDIS_GUID  pCustomGuidMap;
       
  4353   USHORT  VcCount;
       
  4354   USHORT  cNdisGuidMap;
       
  4355   USHORT  cCustomGuidMap;
       
  4356   USHORT  CurrentMapRegister;
       
  4357   PKEVENT  AllocationEvent;
       
  4358   USHORT  BaseMapRegistersNeeded;
       
  4359   USHORT  SGMapRegistersNeeded;
       
  4360   ULONG  MaximumPhysicalMapping;
       
  4361   NDIS_TIMER  MediaDisconnectTimer;
       
  4362   USHORT  MediaDisconnectTimeOut;
       
  4363   USHORT  InstanceNumber;
       
  4364   NDIS_EVENT  OpenReadyEvent;
       
  4365   NDIS_PNP_DEVICE_STATE  PnPDeviceState;
       
  4366   NDIS_PNP_DEVICE_STATE  OldPnPDeviceState;
       
  4367   PGET_SET_DEVICE_DATA  SetBusData;
       
  4368   PGET_SET_DEVICE_DATA  GetBusData;
       
  4369   KDPC  DeferredDpc;
       
  4370 #if 0
       
  4371   /* FIXME: */
       
  4372   NDIS_STATS  NdisStats;
       
  4373 #else
       
  4374   ULONG  NdisStats;
       
  4375 #endif
       
  4376   PNDIS_PACKET  IndicatedPacket[MAXIMUM_PROCESSORS];
       
  4377   PKEVENT  RemoveReadyEvent;
       
  4378   PKEVENT  AllOpensClosedEvent;
       
  4379   PKEVENT  AllRequestsCompletedEvent;
       
  4380   ULONG  InitTimeMs;
       
  4381   NDIS_MINIPORT_WORK_ITEM  WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
       
  4382   PDMA_ADAPTER  SystemAdapterObject;
       
  4383   ULONG  DriverVerifyFlags;
       
  4384   POID_LIST  OidList;
       
  4385   USHORT  InternalResetCount;
       
  4386   USHORT  MiniportResetCount;
       
  4387   USHORT  MediaSenseConnectCount;
       
  4388   USHORT  MediaSenseDisconnectCount;
       
  4389   PNDIS_PACKET  *xPackets;
       
  4390   ULONG  UserModeOpenReferences;
       
  4391   _ANONYMOUS_UNION union {
       
  4392     PVOID  SavedSendHandler;
       
  4393     PVOID  SavedWanSendHandler;
       
  4394   } DUMMYUNIONNAME2;
       
  4395   PVOID  SavedSendPacketsHandler;
       
  4396   PVOID  SavedCancelSendPacketsHandler;
       
  4397   W_SEND_PACKETS_HANDLER  WSendPacketsHandler;                
       
  4398   ULONG  MiniportAttributes;
       
  4399   PDMA_ADAPTER  SavedSystemAdapterObject;
       
  4400   USHORT  NumOpens;
       
  4401   USHORT  CFHangXTicks; 
       
  4402   ULONG  RequestCount;
       
  4403   ULONG  IndicatedPacketsCount;
       
  4404   ULONG  PhysicalMediumType;
       
  4405   PNDIS_REQUEST  LastRequest;
       
  4406   LONG  DmaAdapterRefCount;
       
  4407   PVOID  FakeMac;
       
  4408   ULONG  LockDbg;
       
  4409   ULONG  LockDbgX;
       
  4410   PVOID  LockThread;
       
  4411   ULONG  InfoFlags;
       
  4412   KSPIN_LOCK  TimerQueueLock;
       
  4413   PKEVENT  ResetCompletedEvent;
       
  4414   PKEVENT  QueuedBindingCompletedEvent;
       
  4415   PKEVENT  DmaResourcesReleasedEvent;
       
  4416   FILTER_PACKET_INDICATION_HANDLER  SavedPacketIndicateHandler;
       
  4417   ULONG  RegisteredInterrupts;
       
  4418   PNPAGED_LOOKASIDE_LIST  SGListLookasideList;
       
  4419   ULONG  ScatterGatherListSize;
       
  4420 #endif /* _NDIS_ */
       
  4421 };
       
  4422 
       
  4423 
       
  4424 /* Handler prototypes for NDIS_OPEN_BLOCK */
       
  4425 
       
  4426 typedef NDIS_STATUS (DDKAPI *WAN_SEND_HANDLER)(
       
  4427   /*IN*/ NDIS_HANDLE  MacBindingHandle,
       
  4428   /*IN*/ NDIS_HANDLE  LinkHandle,
       
  4429   /*IN*/ PVOID  Packet);
       
  4430 
       
  4431 /* NDIS 4.0 extension */
       
  4432 
       
  4433 typedef VOID (DDKAPI *SEND_PACKETS_HANDLER)(
       
  4434   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  4435   /*IN*/ PPNDIS_PACKET  PacketArray,
       
  4436   /*IN*/ UINT  NumberOfPackets);
       
  4437 
       
  4438 
       
  4439 typedef struct _NDIS_COMMON_OPEN_BLOCK {
       
  4440   PVOID  MacHandle;
       
  4441   NDIS_HANDLE  BindingHandle;
       
  4442   PNDIS_MINIPORT_BLOCK  MiniportHandle;
       
  4443   PNDIS_PROTOCOL_BLOCK  ProtocolHandle;
       
  4444   NDIS_HANDLE  ProtocolBindingContext;
       
  4445   PNDIS_OPEN_BLOCK  MiniportNextOpen;
       
  4446   PNDIS_OPEN_BLOCK  ProtocolNextOpen;
       
  4447   NDIS_HANDLE  MiniportAdapterContext;
       
  4448   BOOLEAN  Reserved1;
       
  4449   BOOLEAN  Reserved2;
       
  4450   BOOLEAN  Reserved3;
       
  4451   BOOLEAN  Reserved4;
       
  4452   PNDIS_STRING  BindDeviceName;
       
  4453   KSPIN_LOCK  Reserved5;
       
  4454   PNDIS_STRING  RootDeviceName;
       
  4455   _ANONYMOUS_UNION union {
       
  4456     SEND_HANDLER  SendHandler;
       
  4457     WAN_SEND_HANDLER  WanSendHandler;
       
  4458   } DUMMYUNIONNAME;
       
  4459   TRANSFER_DATA_HANDLER  TransferDataHandler;
       
  4460   SEND_COMPLETE_HANDLER  SendCompleteHandler;
       
  4461   TRANSFER_DATA_COMPLETE_HANDLER  TransferDataCompleteHandler;
       
  4462   RECEIVE_HANDLER  ReceiveHandler;
       
  4463   RECEIVE_COMPLETE_HANDLER  ReceiveCompleteHandler;
       
  4464   WAN_RECEIVE_HANDLER  WanReceiveHandler;
       
  4465   REQUEST_COMPLETE_HANDLER  RequestCompleteHandler;
       
  4466   RECEIVE_PACKET_HANDLER  ReceivePacketHandler;
       
  4467   SEND_PACKETS_HANDLER  SendPacketsHandler;
       
  4468   RESET_HANDLER  ResetHandler;
       
  4469   REQUEST_HANDLER  RequestHandler;
       
  4470   RESET_COMPLETE_HANDLER  ResetCompleteHandler;
       
  4471   STATUS_HANDLER  StatusHandler;
       
  4472   STATUS_COMPLETE_HANDLER  StatusCompleteHandler;
       
  4473 #if defined(_NDIS_)
       
  4474   ULONG  Flags;
       
  4475   ULONG  References;
       
  4476   KSPIN_LOCK  SpinLock;
       
  4477   NDIS_HANDLE  FilterHandle;
       
  4478   ULONG  ProtocolOptions;
       
  4479   USHORT  CurrentLookahead;
       
  4480   USHORT  ConnectDampTicks;
       
  4481   USHORT  DisconnectDampTicks;
       
  4482   W_SEND_HANDLER  WSendHandler;
       
  4483   W_TRANSFER_DATA_HANDLER  WTransferDataHandler;
       
  4484   W_SEND_PACKETS_HANDLER  WSendPacketsHandler;
       
  4485   W_CANCEL_SEND_PACKETS_HANDLER  CancelSendPacketsHandler;
       
  4486   ULONG  WakeUpEnable;
       
  4487   PKEVENT  CloseCompleteEvent;
       
  4488   QUEUED_CLOSE  QC;
       
  4489   ULONG  AfReferences;
       
  4490   PNDIS_OPEN_BLOCK  NextGlobalOpen;
       
  4491 #endif /* _NDIS_ */
       
  4492 } NDIS_COMMON_OPEN_BLOCK;
       
  4493 
       
  4494 struct _NDIS_OPEN_BLOCK
       
  4495 {
       
  4496     NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
       
  4497 #if defined(_NDIS_)
       
  4498     struct _NDIS_OPEN_CO
       
  4499     {
       
  4500         struct _NDIS_CO_AF_BLOCK *  NextAf;
       
  4501         W_CO_CREATE_VC_HANDLER      MiniportCoCreateVcHandler;
       
  4502         W_CO_REQUEST_HANDLER        MiniportCoRequestHandler;
       
  4503         CO_CREATE_VC_HANDLER        CoCreateVcHandler;
       
  4504         CO_DELETE_VC_HANDLER        CoDeleteVcHandler;
       
  4505         PVOID                       CmActivateVcCompleteHandler;
       
  4506         PVOID                       CmDeactivateVcCompleteHandler;
       
  4507         PVOID                       CoRequestCompleteHandler;
       
  4508         LIST_ENTRY                  ActiveVcHead;
       
  4509         LIST_ENTRY                  InactiveVcHead;
       
  4510         LONG                        PendingAfNotifications;
       
  4511         PKEVENT                     AfNotifyCompleteEvent;
       
  4512     };
       
  4513 #endif /* _NDIS_ */
       
  4514 };
       
  4515 
       
  4516 
       
  4517 
       
  4518 /* Routines for NDIS miniport drivers */
       
  4519 
       
  4520 NDISAPI
       
  4521 VOID
       
  4522 DDKAPI
       
  4523 NdisInitializeWrapper(
       
  4524   /*OUT*/ PNDIS_HANDLE  NdisWrapperHandle,
       
  4525   /*IN*/ PVOID  SystemSpecific1,
       
  4526   /*IN*/ PVOID  SystemSpecific2,
       
  4527   /*IN*/ PVOID  SystemSpecific3);
       
  4528 
       
  4529 NDISAPI
       
  4530 NDIS_STATUS
       
  4531 DDKAPI
       
  4532 NdisMAllocateMapRegisters(
       
  4533   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4534   /*IN*/ UINT  DmaChannel,
       
  4535   /*IN*/ BOOLEAN  Dma32BitAddresses,
       
  4536   /*IN*/ ULONG  PhysicalMapRegistersNeeded,
       
  4537   /*IN*/ ULONG  MaximumPhysicalMapping);
       
  4538 
       
  4539 /*
       
  4540  * VOID
       
  4541  * NdisMArcIndicateReceive(
       
  4542  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4543  * IN PUCHAR  HeaderBuffer,
       
  4544  * IN PUCHAR  DataBuffer,
       
  4545  * IN UINT  Length);
       
  4546  */
       
  4547 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
       
  4548                                 HeaderBuffer,          \
       
  4549                                 DataBuffer,            \
       
  4550                                 Length)                \
       
  4551 {                                                      \
       
  4552     ArcFilterDprIndicateReceive(                       \
       
  4553         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
       
  4554         (HeaderBuffer), \
       
  4555         (DataBuffer),   \
       
  4556         (Length));      \
       
  4557 }
       
  4558 
       
  4559 /*
       
  4560  * VOID
       
  4561  * NdisMArcIndicateReceiveComplete(
       
  4562  * IN NDIS_HANDLE  MiniportAdapterHandle);
       
  4563  */
       
  4564 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
       
  4565 {                                                              \
       
  4566     if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB)  \
       
  4567 	    {                                                        \
       
  4568 	        NdisMEthIndicateReceiveComplete(_H);                 \
       
  4569 	    }                                                        \
       
  4570                                                                \
       
  4571     ArcFilterDprIndicateReceiveComplete(                       \
       
  4572       ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB);   \
       
  4573 }
       
  4574 
       
  4575 NDISAPI
       
  4576 VOID
       
  4577 DDKAPI
       
  4578 NdisMCloseLog(
       
  4579   /*IN*/ NDIS_HANDLE  LogHandle);
       
  4580 
       
  4581 NDISAPI
       
  4582 NDIS_STATUS
       
  4583 DDKAPI
       
  4584 NdisMCreateLog(
       
  4585   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4586   /*IN*/ UINT  Size,
       
  4587   /*OUT*/ PNDIS_HANDLE  LogHandle);
       
  4588 
       
  4589 NDISAPI
       
  4590 VOID
       
  4591 DDKAPI
       
  4592 NdisMDeregisterAdapterShutdownHandler(
       
  4593   /*IN*/ NDIS_HANDLE  MiniportHandle);
       
  4594 
       
  4595 NDISAPI
       
  4596 VOID
       
  4597 DDKAPI
       
  4598 NdisMDeregisterInterrupt(
       
  4599   /*IN*/ PNDIS_MINIPORT_INTERRUPT  Interrupt);
       
  4600 
       
  4601 NDISAPI
       
  4602 VOID
       
  4603 DDKAPI
       
  4604 NdisMDeregisterIoPortRange(
       
  4605   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4606   /*IN*/ UINT  InitialPort,
       
  4607   /*IN*/ UINT  NumberOfPorts,
       
  4608   /*IN*/ PVOID  PortOffset);
       
  4609 
       
  4610 /*
       
  4611  * VOID
       
  4612  * NdisMEthIndicateReceive(
       
  4613  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4614  * IN NDIS_HANDLE  MiniportReceiveContext,
       
  4615  * IN PVOID  HeaderBuffer,
       
  4616  * IN UINT  HeaderBufferSize,
       
  4617  * IN PVOID  LookaheadBuffer,
       
  4618  * IN UINT  LookaheadBufferSize,
       
  4619  * IN UINT  PacketSize);
       
  4620  */
       
  4621 #define NdisMEthIndicateReceive(MiniportAdapterHandle,  \
       
  4622                                 MiniportReceiveContext, \
       
  4623                                 HeaderBuffer,           \
       
  4624                                 HeaderBufferSize,       \
       
  4625                                 LookaheadBuffer,        \
       
  4626                                 LookaheadBufferSize,    \
       
  4627                                 PacketSize)             \
       
  4628 {                                                       \
       
  4629     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
       
  4630         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB), \
       
  4631 		(MiniportReceiveContext), \
       
  4632 		(HeaderBuffer),           \
       
  4633 		(HeaderBuffer),           \
       
  4634 		(HeaderBufferSize),       \
       
  4635 		(LookaheadBuffer),        \
       
  4636 		(LookaheadBufferSize),    \
       
  4637 		(PacketSize));            \
       
  4638 }
       
  4639 
       
  4640 /*
       
  4641  * VOID
       
  4642  * NdisMEthIndicateReceiveComplete(
       
  4643  * IN NDIS_HANDLE MiniportAdapterHandle);
       
  4644  */
       
  4645 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
       
  4646 {                                                              \
       
  4647     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
       
  4648         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.EthDB);    \
       
  4649 }
       
  4650 
       
  4651 /*
       
  4652  * VOID
       
  4653  * NdisMFddiIndicateReceive(
       
  4654  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4655  * IN NDIS_HANDLE  MiniportReceiveContext,
       
  4656  * IN PVOID  HeaderBuffer,
       
  4657  * IN UINT  HeaderBufferSize,
       
  4658  * IN PVOID  LookaheadBuffer,
       
  4659  * IN UINT  LookaheadBufferSize,
       
  4660  * IN UINT  PacketSize);
       
  4661  */
       
  4662 #define NdisMFddiIndicateReceive(MiniportAdapterHandle,  \
       
  4663                                  MiniportReceiveContext, \
       
  4664                                  HeaderBuffer,           \
       
  4665                                  HeaderBufferSize,       \
       
  4666                                  LookaheadBuffer,        \
       
  4667                                  LookaheadBufferSize,    \
       
  4668                                  PacketSize)             \
       
  4669 {                                                        \
       
  4670     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
       
  4671         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB),   \
       
  4672         (MiniportReceiveContext),              \
       
  4673         (PUCHAR)(HeaderBuffer) + 1,            \
       
  4674         (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
       
  4675             FDDI_LENGTH_OF_LONG_ADDRESS :      \
       
  4676 		    FDDI_LENGTH_OF_SHORT_ADDRESS),     \
       
  4677         (HeaderBuffer),                        \
       
  4678         (HeaderBufferSize),                    \
       
  4679         (LookaheadBuffer),                     \
       
  4680         (LookaheadBufferSize),                 \
       
  4681         (PacketSize));                         \
       
  4682 }
       
  4683 
       
  4684 
       
  4685 
       
  4686 /*
       
  4687  * VOID
       
  4688  * NdisMFddiIndicateReceiveComplete(
       
  4689  * IN NDIS_HANDLE  MiniportAdapterHandle);
       
  4690  */
       
  4691 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
       
  4692 {                                                               \
       
  4693     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
       
  4694         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB);      \
       
  4695 }
       
  4696 
       
  4697 NDISAPI
       
  4698 VOID
       
  4699 DDKAPI
       
  4700 NdisMFlushLog(
       
  4701   /*IN*/ NDIS_HANDLE  LogHandle);
       
  4702 
       
  4703 NDISAPI
       
  4704 VOID
       
  4705 DDKAPI
       
  4706 NdisMFreeMapRegisters(
       
  4707   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle);
       
  4708 
       
  4709 /*
       
  4710  * VOID
       
  4711  * NdisMIndicateStatus(
       
  4712  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4713  * IN NDIS_STATUS  GeneralStatus,
       
  4714  * IN PVOID  StatusBuffer,
       
  4715  * IN UINT  StatusBufferSize);
       
  4716  */
       
  4717 
       
  4718 #define NdisMIndicateStatus(MiniportAdapterHandle,  \
       
  4719    GeneralStatus, StatusBuffer, StatusBufferSize)   \
       
  4720   (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)(   \
       
  4721   MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
       
  4722 
       
  4723 /*
       
  4724  * VOID
       
  4725  * NdisMIndicateStatusComplete(
       
  4726  * IN NDIS_HANDLE  MiniportAdapterHandle);
       
  4727  */
       
  4728 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
       
  4729   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
       
  4730     MiniportAdapterHandle)
       
  4731 
       
  4732 /*
       
  4733  * VOID
       
  4734  * NdisMInitializeWrapper(
       
  4735  * OUT PNDIS_HANDLE  NdisWrapperHandle,
       
  4736  * IN PVOID  SystemSpecific1,
       
  4737  * IN PVOID  SystemSpecific2,
       
  4738  * IN PVOID  SystemSpecific3);
       
  4739  */
       
  4740 #define NdisMInitializeWrapper(NdisWrapperHandle, \
       
  4741                                SystemSpecific1,   \
       
  4742                                SystemSpecific2,   \
       
  4743                                SystemSpecific3)   \
       
  4744     NdisInitializeWrapper((NdisWrapperHandle),    \
       
  4745                           (SystemSpecific1),      \
       
  4746                           (SystemSpecific2),      \
       
  4747                           (SystemSpecific3))
       
  4748 
       
  4749 NDISAPI
       
  4750 NDIS_STATUS
       
  4751 DDKAPI
       
  4752 NdisMMapIoSpace(
       
  4753   /*OUT*/ PVOID  *VirtualAddress,
       
  4754   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4755   /*IN*/ NDIS_PHYSICAL_ADDRESS  PhysicalAddress,
       
  4756   /*IN*/ UINT  Length);
       
  4757 
       
  4758 /*
       
  4759  * VOID
       
  4760  * NdisMQueryInformationComplete(
       
  4761  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4762  * IN NDIS_STATUS  Status);
       
  4763  */
       
  4764 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
       
  4765   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
       
  4766 
       
  4767 NDISAPI
       
  4768 VOID
       
  4769 DDKAPI
       
  4770 NdisMRegisterAdapterShutdownHandler(
       
  4771   /*IN*/ NDIS_HANDLE  MiniportHandle,
       
  4772   /*IN*/ PVOID  ShutdownContext,
       
  4773   /*IN*/ ADAPTER_SHUTDOWN_HANDLER  ShutdownHandler);
       
  4774 
       
  4775 NDISAPI
       
  4776 NDIS_STATUS
       
  4777 DDKAPI
       
  4778 NdisMRegisterInterrupt(
       
  4779   /*OUT*/ PNDIS_MINIPORT_INTERRUPT  Interrupt,
       
  4780   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4781   /*IN*/ UINT  InterruptVector,
       
  4782   /*IN*/ UINT  InterruptLevel,
       
  4783   /*IN*/ BOOLEAN  RequestIsr,
       
  4784   /*IN*/ BOOLEAN  SharedInterrupt,
       
  4785   /*IN*/ NDIS_INTERRUPT_MODE  InterruptMode);
       
  4786 
       
  4787 NDISAPI
       
  4788 NDIS_STATUS
       
  4789 DDKAPI
       
  4790 NdisMRegisterIoPortRange(
       
  4791   /*OUT*/ PVOID  *PortOffset,
       
  4792   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4793   /*IN*/ UINT  InitialPort,
       
  4794   /*IN*/ UINT  NumberOfPorts);
       
  4795 
       
  4796 NDISAPI
       
  4797 NDIS_STATUS
       
  4798 DDKAPI
       
  4799 NdisMRegisterMiniport(
       
  4800   /*IN*/ NDIS_HANDLE  NdisWrapperHandle,
       
  4801   /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,
       
  4802   /*IN*/ UINT  CharacteristicsLength);
       
  4803 
       
  4804 
       
  4805 #if !defined(_NDIS_)
       
  4806 
       
  4807 /*
       
  4808  * VOID
       
  4809  * NdisMResetComplete(
       
  4810  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4811  * IN NDIS_STATUS  Status,
       
  4812  * IN BOOLEAN  AddressingReset);
       
  4813  */
       
  4814 #define	NdisMResetComplete(MiniportAdapterHandle, \
       
  4815                            Status,                \
       
  4816                            AddressingReset)       \
       
  4817 {                                                 \
       
  4818     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
       
  4819         MiniportAdapterHandle, Status, AddressingReset); \
       
  4820 }
       
  4821 
       
  4822 /*
       
  4823  * VOID
       
  4824  * NdisMSendComplete(
       
  4825  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4826  * IN PNDIS_PACKET  Packet,
       
  4827  * IN NDIS_STATUS  Status);
       
  4828  */
       
  4829 #define	NdisMSendComplete(MiniportAdapterHandle, \
       
  4830                           Packet,                \
       
  4831                           Status)                \
       
  4832 {                                                \
       
  4833     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
       
  4834         MiniportAdapterHandle, Packet, Status);  \
       
  4835 }
       
  4836 
       
  4837 /*
       
  4838  * VOID
       
  4839  * NdisMSendResourcesAvailable(
       
  4840  * IN NDIS_HANDLE  MiniportAdapterHandle);
       
  4841  */
       
  4842 #define	NdisMSendResourcesAvailable(MiniportAdapterHandle) \
       
  4843 {                                                \
       
  4844     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
       
  4845         MiniportAdapterHandle); \
       
  4846 }
       
  4847 
       
  4848 /*
       
  4849  * VOID
       
  4850  * NdisMTransferDataComplete(
       
  4851  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4852  * IN PNDIS_PACKET  Packet,
       
  4853  * IN NDIS_STATUS  Status,
       
  4854  * IN UINT  BytesTransferred);
       
  4855  */
       
  4856 #define	NdisMTransferDataComplete(MiniportAdapterHandle, \
       
  4857                                   Packet,                \
       
  4858                                   Status,                \
       
  4859                                   BytesTransferred)      \
       
  4860 {                                                        \
       
  4861     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
       
  4862         MiniportAdapterHandle, Packet, Status, BytesTransferred)           \
       
  4863 }
       
  4864 
       
  4865 #endif /* !_NDIS_ */
       
  4866 
       
  4867 
       
  4868 /*
       
  4869  * VOID
       
  4870  * NdisMSetAttributes(
       
  4871  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4872  * IN NDIS_HANDLE  MiniportAdapterContext,
       
  4873  * IN BOOLEAN  BusMaster,
       
  4874  * IN NDIS_INTERFACE_TYPE  AdapterType);
       
  4875  */
       
  4876 #define NdisMSetAttributes(MiniportAdapterHandle,   \
       
  4877                            MiniportAdapterContext,  \
       
  4878                            BusMaster,               \
       
  4879                            AdapterType)             \
       
  4880   NdisMSetAttributesEx(MiniportAdapterHandle,       \
       
  4881     MiniportAdapterContext,                         \
       
  4882     0,                                              \
       
  4883     (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0,    \
       
  4884     AdapterType)
       
  4885 
       
  4886 NDISAPI
       
  4887 VOID 
       
  4888 DDKAPI
       
  4889 NdisMSetAttributesEx(
       
  4890   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4891   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  4892   /*IN*/ UINT  CheckForHangTimeInSeconds   /*OPTIONAL*/,
       
  4893   /*IN*/ ULONG  AttributeFlags,
       
  4894   /*IN*/ NDIS_INTERFACE_TYPE AdapterType); 
       
  4895 
       
  4896 /*
       
  4897  * VOID
       
  4898  * NdisMSetInformationComplete(
       
  4899  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4900  * IN NDIS_STATUS  Status);
       
  4901  */
       
  4902 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
       
  4903                                     Status) \
       
  4904   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
       
  4905     MiniportAdapterHandle, Status)
       
  4906 
       
  4907 NDISAPI
       
  4908 VOID
       
  4909 DDKAPI
       
  4910 NdisMSleep(
       
  4911   /*IN*/ ULONG  MicrosecondsToSleep);
       
  4912 
       
  4913 NDISAPI
       
  4914 BOOLEAN
       
  4915 DDKAPI
       
  4916 NdisMSynchronizeWithInterrupt(
       
  4917   /*IN*/ PNDIS_MINIPORT_INTERRUPT  Interrupt,
       
  4918   /*IN*/ PVOID  SynchronizeFunction,
       
  4919   /*IN*/ PVOID  SynchronizeContext);
       
  4920 
       
  4921 /*
       
  4922  * VOID
       
  4923  * NdisMTrIndicateReceive(
       
  4924  * IN NDIS_HANDLE  MiniportAdapterHandle,
       
  4925  * IN NDIS_HANDLE  MiniportReceiveContext,
       
  4926  * IN PVOID  HeaderBuffer,
       
  4927  * IN UINT  HeaderBufferSize,
       
  4928  * IN PVOID  LookaheadBuffer,
       
  4929  * IN UINT  LookaheadBufferSize,
       
  4930  * IN UINT  PacketSize);
       
  4931  */
       
  4932 #define NdisMTrIndicateReceive(MiniportAdapterHandle,  \
       
  4933                                MiniportReceiveContext, \
       
  4934                                HeaderBuffer,           \
       
  4935                                HeaderBufferSize,       \
       
  4936                                LookaheadBuffer,        \
       
  4937                                LookaheadBufferSize,    \
       
  4938                                PacketSize)             \
       
  4939 {                                                      \
       
  4940     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
       
  4941       (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB),     \
       
  4942 		(MiniportReceiveContext), \
       
  4943 		(HeaderBuffer),           \
       
  4944 		(HeaderBuffer),           \
       
  4945 		(HeaderBufferSize),       \
       
  4946 		(LookaheadBuffer),        \
       
  4947 		(LookaheadBufferSize),    \
       
  4948 		(PacketSize));            \
       
  4949 }
       
  4950 
       
  4951 /*
       
  4952  * VOID
       
  4953  * NdisMTrIndicateReceiveComplete(
       
  4954  * IN NDIS_HANDLE  MiniportAdapterHandle);
       
  4955  */
       
  4956 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
       
  4957 {                                                             \
       
  4958 	(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
       
  4959     ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB);    \
       
  4960 }
       
  4961 
       
  4962 NDISAPI
       
  4963 NDIS_STATUS
       
  4964 DDKAPI
       
  4965 NdisMWriteLogData(
       
  4966   /*IN*/ NDIS_HANDLE  LogHandle,
       
  4967   /*IN*/ PVOID  LogBuffer,
       
  4968   /*IN*/ UINT  LogBufferSize);
       
  4969 
       
  4970 NDISAPI
       
  4971 VOID
       
  4972 DDKAPI
       
  4973 NdisMQueryAdapterResources(
       
  4974   /*OUT*/ PNDIS_STATUS  Status,
       
  4975   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext,
       
  4976   /*OUT*/ PNDIS_RESOURCE_LIST  ResourceList,
       
  4977   /*IN OUT*/ PUINT  BufferSize);
       
  4978 
       
  4979 NDISAPI
       
  4980 VOID
       
  4981 DDKAPI
       
  4982 NdisTerminateWrapper(
       
  4983   /*IN*/ NDIS_HANDLE  NdisWrapperHandle,
       
  4984   /*IN*/ PVOID  SystemSpecific);
       
  4985 
       
  4986 NDISAPI
       
  4987 VOID
       
  4988 DDKAPI
       
  4989 NdisMUnmapIoSpace(
       
  4990   /*IN*/ NDIS_HANDLE  MiniportAdapterHandle,
       
  4991   /*IN*/ PVOID  VirtualAddress,
       
  4992   /*IN*/ UINT  Length);
       
  4993 
       
  4994 
       
  4995 
       
  4996 /* NDIS intermediate miniport structures */
       
  4997 
       
  4998 typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
       
  4999   /*IN*/ NDIS_HANDLE  MiniportAdapterContext,
       
  5000   /*IN*/ PVOID  CallbackContext);
       
  5001 
       
  5002 
       
  5003 
       
  5004 /* Routines for intermediate miniport drivers */
       
  5005 
       
  5006 NDISAPI
       
  5007 NDIS_STATUS
       
  5008 DDKAPI
       
  5009 NdisIMDeInitializeDeviceInstance(
       
  5010   /*IN*/ NDIS_HANDLE NdisMiniportHandle);
       
  5011 
       
  5012 /*
       
  5013  * NDIS_STATUS
       
  5014  * NdisIMInitializeDeviceInstance(
       
  5015  * IN NDIS_HANDLE  DriverHandle,
       
  5016  * IN PNDIS_STRING  DeviceInstance);
       
  5017  */
       
  5018 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
       
  5019   NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
       
  5020 
       
  5021 NDISAPI
       
  5022 NDIS_STATUS
       
  5023 DDKAPI
       
  5024 NdisIMRegisterLayeredMiniport(
       
  5025   /*IN*/ NDIS_HANDLE  NdisWrapperHandle,
       
  5026   /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,
       
  5027   /*IN*/ UINT  CharacteristicsLength,
       
  5028   /*OUT*/ PNDIS_HANDLE  DriverHandle);
       
  5029 
       
  5030 
       
  5031 /* Functions obsoleted by NDIS 5.0 */
       
  5032 
       
  5033 NDISAPI
       
  5034 VOID
       
  5035 DDKAPI
       
  5036 NdisFreeDmaChannel(
       
  5037   /*IN*/ PNDIS_HANDLE  NdisDmaHandle);
       
  5038 
       
  5039 NDISAPI
       
  5040 VOID
       
  5041 DDKAPI
       
  5042 NdisSetupDmaTransfer(
       
  5043   /*OUT*/ PNDIS_STATUS  Status,
       
  5044   /*IN*/ PNDIS_HANDLE  NdisDmaHandle,
       
  5045   /*IN*/ PNDIS_BUFFER  Buffer,
       
  5046   /*IN*/ ULONG  Offset,
       
  5047   /*IN*/ ULONG  Length,
       
  5048   /*IN*/ BOOLEAN  WriteToDevice);
       
  5049 
       
  5050 NDISAPI
       
  5051 NTSTATUS
       
  5052 DDKAPI
       
  5053 NdisUpcaseUnicodeString(
       
  5054   /*OUT*/ PUNICODE_STRING  DestinationString,  
       
  5055   /*IN*/ PUNICODE_STRING  SourceString);
       
  5056 
       
  5057 
       
  5058 /* Routines for NDIS protocol drivers */
       
  5059 
       
  5060 NDISAPI
       
  5061 VOID
       
  5062 DDKAPI
       
  5063 NdisRequest(
       
  5064   /*OUT*/ PNDIS_STATUS  Status,
       
  5065   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  5066   /*IN*/ PNDIS_REQUEST  NdisRequest);
       
  5067 
       
  5068 NDISAPI
       
  5069 VOID
       
  5070 DDKAPI
       
  5071 NdisReset(
       
  5072   /*OUT*/ PNDIS_STATUS  Status,
       
  5073   /*IN*/ NDIS_HANDLE  NdisBindingHandle);
       
  5074 
       
  5075 NDISAPI
       
  5076 VOID
       
  5077 DDKAPI
       
  5078 NdisSend(
       
  5079   /*OUT*/ PNDIS_STATUS  Status,
       
  5080   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  5081   /*IN*/ PNDIS_PACKET  Packet);
       
  5082 
       
  5083 NDISAPI
       
  5084 VOID
       
  5085 DDKAPI
       
  5086 NdisSendPackets(
       
  5087   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  5088   /*IN*/ PPNDIS_PACKET  PacketArray,
       
  5089   /*IN*/ UINT  NumberOfPackets);
       
  5090 
       
  5091 NDISAPI
       
  5092 VOID
       
  5093 DDKAPI
       
  5094 NdisTransferData(
       
  5095   /*OUT*/ PNDIS_STATUS        Status,
       
  5096   /*IN*/ NDIS_HANDLE  NdisBindingHandle,
       
  5097   /*IN*/ NDIS_HANDLE  MacReceiveContext,
       
  5098   /*IN*/ UINT  ByteOffset,
       
  5099   /*IN*/ UINT  BytesToTransfer,
       
  5100   /*IN OUT*/ PNDIS_PACKET  Packet,
       
  5101   /*OUT*/ PUINT  BytesTransferred);
       
  5102 
       
  5103 NDISAPI
       
  5104 VOID
       
  5105 DDKAPI
       
  5106 NdisCloseAdapter(
       
  5107   /*OUT*/ PNDIS_STATUS  Status,
       
  5108   /*IN*/ NDIS_HANDLE  NdisBindingHandle);
       
  5109 
       
  5110 NDISAPI
       
  5111 VOID
       
  5112 DDKAPI
       
  5113 NdisCompleteBindAdapter(
       
  5114   /*IN*/ NDIS_HANDLE  BindAdapterContext,
       
  5115   /*IN*/ NDIS_STATUS  Status,
       
  5116   /*IN*/ NDIS_STATUS  OpenStatus);
       
  5117 
       
  5118 NDISAPI
       
  5119 VOID
       
  5120 DDKAPI
       
  5121 NdisCompleteUnbindAdapter(
       
  5122   /*IN*/ NDIS_HANDLE  UnbindAdapterContext,
       
  5123   /*IN*/ NDIS_STATUS  Status);
       
  5124 
       
  5125 NDISAPI
       
  5126 VOID
       
  5127 DDKAPI
       
  5128 NdisDeregisterProtocol(
       
  5129   /*OUT*/ PNDIS_STATUS  Status,
       
  5130   /*IN*/ NDIS_HANDLE  NdisProtocolHandle);
       
  5131 
       
  5132 NDISAPI
       
  5133 VOID
       
  5134 DDKAPI
       
  5135 NdisOpenAdapter(
       
  5136   /*OUT*/ PNDIS_STATUS  Status,
       
  5137   /*OUT*/ PNDIS_STATUS  OpenErrorStatus,
       
  5138   /*OUT*/ PNDIS_HANDLE  NdisBindingHandle,
       
  5139   /*OUT*/ PUINT  SelectedMediumIndex,
       
  5140   /*IN*/ PNDIS_MEDIUM  MediumArray,
       
  5141   /*IN*/ UINT  MediumArraySize,
       
  5142   /*IN*/ NDIS_HANDLE  NdisProtocolHandle,
       
  5143   /*IN*/ NDIS_HANDLE  ProtocolBindingContext,
       
  5144   /*IN*/ PNDIS_STRING  AdapterName,
       
  5145   /*IN*/ UINT  OpenOptions,
       
  5146   /*IN*/ PSTRING  AddressingInformation);
       
  5147 
       
  5148 NDISAPI
       
  5149 VOID
       
  5150 DDKAPI
       
  5151 NdisOpenProtocolConfiguration(
       
  5152   /*OUT*/ PNDIS_STATUS  Status,
       
  5153   /*OUT*/ PNDIS_HANDLE  ConfigurationHandle,
       
  5154   /*IN*/ PNDIS_STRING  ProtocolSection);
       
  5155 
       
  5156 NDISAPI
       
  5157 VOID
       
  5158 DDKAPI
       
  5159 NdisRegisterProtocol(
       
  5160   /*OUT*/ PNDIS_STATUS  Status,
       
  5161   /*OUT*/ PNDIS_HANDLE  NdisProtocolHandle,
       
  5162   /*IN*/ PNDIS_PROTOCOL_CHARACTERISTICS  ProtocolCharacteristics,
       
  5163   /*IN*/ UINT  CharacteristicsLength);
       
  5164 
       
  5165 /* Obsoleted in Windows XP */
       
  5166 
       
  5167 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
       
  5168 
       
  5169 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
       
  5170   /*OUT*/ PNDIS_STATUS  OpenErrorStatus,
       
  5171   /*OUT*/ NDIS_HANDLE  *MacBindingHandle,
       
  5172   /*OUT*/ PUINT  SelectedMediumIndex,
       
  5173   /*IN*/ PNDIS_MEDIUM  MediumArray,
       
  5174   /*IN*/ UINT  MediumArraySize,
       
  5175   /*IN*/ NDIS_HANDLE  NdisBindingContext,
       
  5176   /*IN*/ NDIS_HANDLE  MacAdapterContext,
       
  5177   /*IN*/ UINT  OpenOptions,
       
  5178   /*IN*/ PSTRING  AddressingInformation  /*OPTIONAL*/);
       
  5179 
       
  5180 typedef NDIS_STATUS (DDKAPI *CLOSE_ADAPTER_HANDLER)(
       
  5181   /*IN*/ NDIS_HANDLE  MacBindingHandle);
       
  5182 
       
  5183 typedef NDIS_STATUS (DDKAPI *WAN_TRANSFER_DATA_HANDLER)(
       
  5184   VOID);
       
  5185 
       
  5186 typedef NDIS_STATUS (DDKAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
       
  5187   /*IN*/ NDIS_HANDLE  MacAdapterContext,
       
  5188   /*IN*/ PNDIS_REQUEST  NdisRequest);
       
  5189 
       
  5190 typedef VOID (DDKAPI *UNLOAD_MAC_HANDLER)(
       
  5191   /*IN*/ NDIS_HANDLE  MacMacContext);
       
  5192 
       
  5193 typedef NDIS_STATUS (DDKAPI *ADD_ADAPTER_HANDLER)(
       
  5194   /*IN*/ NDIS_HANDLE  MacMacContext,
       
  5195   /*IN*/ NDIS_HANDLE  WrapperConfigurationContext,
       
  5196   /*IN*/ PNDIS_STRING  AdapterName);
       
  5197 
       
  5198 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
       
  5199   /*IN*/ NDIS_HANDLE  MacAdapterContext);
       
  5200 
       
  5201 typedef struct _NDIS_MAC_CHARACTERISTICS {
       
  5202   UCHAR  MajorNdisVersion;
       
  5203   UCHAR  MinorNdisVersion;
       
  5204   UINT  Reserved;
       
  5205   OPEN_ADAPTER_HANDLER  OpenAdapterHandler;
       
  5206   CLOSE_ADAPTER_HANDLER  CloseAdapterHandler;
       
  5207   SEND_HANDLER  SendHandler;
       
  5208   TRANSFER_DATA_HANDLER  TransferDataHandler;
       
  5209   RESET_HANDLER  ResetHandler;
       
  5210   REQUEST_HANDLER  RequestHandler;
       
  5211   QUERY_GLOBAL_STATISTICS_HANDLER  QueryGlobalStatisticsHandler;
       
  5212   UNLOAD_MAC_HANDLER  UnloadMacHandler;
       
  5213   ADD_ADAPTER_HANDLER  AddAdapterHandler;
       
  5214   REMOVE_ADAPTER_HANDLER  RemoveAdapterHandler;
       
  5215   NDIS_STRING  Name;
       
  5216 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
       
  5217 
       
  5218 typedef	NDIS_MAC_CHARACTERISTICS        NDIS_WAN_MAC_CHARACTERISTICS;
       
  5219 typedef	NDIS_WAN_MAC_CHARACTERISTICS    *PNDIS_WAN_MAC_CHARACTERISTICS;
       
  5220 
       
  5221 #ifdef __cplusplus
       
  5222 }
       
  5223 #endif
       
  5224 
       
  5225 #endif /* __NDIS_H */
       
  5226 
       
  5227 /* EOF */