source: vendor/w32api/current/include/ddk/ndis.h

Last change on this file was 2720, checked in by bird, 19 years ago

w32api v3.6

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