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