00001
00002
00003
00004
00005
00006 #define NDIS_NT 1
00007
00008
#if defined(NDIS_DOS)
00009
#undef NDIS_DOS
00010
#endif
00011
00012
00013
00014
00015
00016
00017
#include <ntstatus.h>
00018
#include <netevent.h>
00019
00020
00021
00022
00023
00024
#if !defined(_WINDEF_) // these are defined in windows.h too
00025 typedef signed int INT, *
PINT;
00026 typedef unsigned int UINT, *
PUINT;
00027
#endif
00028
00029 typedef UNICODE_STRING
NDIS_STRING, *
PNDIS_STRING;
00030
00031
00032
00033
00034
00035
00036 #define NDIS_INIT_FUNCTION(_F) alloc_text(INIT,_F)
00037 #define NDIS_PAGABLE_FUNCTION(_F) alloc_text(PAGE,_F)
00038 #define NDIS_PAGEABLE_FUNCTION(_F) alloc_text(PAGE,_F)
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 typedef PVOID
NDIS_HANDLE, *
PNDIS_HANDLE;
00049
00050 typedef int NDIS_STATUS, *
PNDIS_STATUS;
00051
00052
#include <ntddndis.h>
00053
00054
00055
00056
00057 typedef CM_MCA_POS_DATA
NDIS_MCA_POS_DATA, *
PNDIS_MCA_POS_DATA;
00058 typedef CM_EISA_SLOT_INFORMATION
NDIS_EISA_SLOT_INFORMATION, *
PNDIS_EISA_SLOT_INFORMATION;
00059 typedef CM_EISA_FUNCTION_INFORMATION
NDIS_EISA_FUNCTION_INFORMATION, *
PNDIS_EISA_FUNCTION_INFORMATION;
00060
00061
00062
00063
00064
#if defined(NDIS_WRAPPER)
00065
#define EXPORT
00066
#else
00067 #define EXPORT DECLSPEC_IMPORT
00068
#endif
00069
00070
00071
00072
00073 #define NdisMoveMemory(Destination, Source, Length) RtlCopyMemory(Destination, Source, Length)
00074 #define NdisZeroMemory(Destination, Length) RtlZeroMemory(Destination, Length)
00075 #define NdisEqualMemory(Source1, Source2, Length) RtlEqualMemory(Source1, Source2, Length)
00076 #define NdisFillMemory(Destination, Length, Fill) RtlFillMemory(Destination, Length, Fill)
00077 #define NdisRetrieveUlong(Destination, Source) RtlRetrieveUlong(Destination, Source)
00078 #define NdisStoreUlong(Destination, Value) RtlStoreUlong(Destination, Value)
00079
00080 #define NDIS_STRING_CONST(x) {sizeof(L##x)-2, sizeof(L##x), L##x}
00081
00082
00083
00084
00085
00086
#if defined(_M_IX86)
00087
00088
#define NdisMoveMappedMemory(Destination,Source,Length) RtlCopyMemory(Destination,Source,Length)
00089
#define NdisZeroMappedMemory(Destination,Length) RtlZeroMemory(Destination,Length)
00090
00091
#elif defined(_M_IA64)
00092
00093
#define NdisMoveMappedMemory(Destination,Source,Length) \
00094
{ \
00095
PUCHAR _Src = (Source); \
00096
PUCHAR _Dest = (Destination); \
00097
PUCHAR _End = _Dest + (Length); \
00098
while (_Dest < _End) \
00099
{ \
00100
*_Dest++ = *_Src++; \
00101
} \
00102
}
00103
00104
#define NdisZeroMappedMemory(Destination,Length) \
00105
{ \
00106
PUCHAR _Dest = (Destination); \
00107
PUCHAR _End = _Dest + (Length); \
00108
while (_Dest < _End) \
00109
{ \
00110
*_Dest++ = 0; \
00111
} \
00112
}
00113
00114
#elif defined(_ALPHA_)
00115
00116
#define NdisMoveMappedMemory(Destination,Source,Length) \
00117
{ \
00118
PUCHAR _Src = (Source); \
00119
PUCHAR _Dest = (Destination); \
00120
PUCHAR _End = _Dest + (Length); \
00121
while (_Dest < _End) \
00122
{ \
00123
NdisReadRegisterUchar(_Src, _Dest); \
00124
_Src++; \
00125
_Dest++; \
00126
} \
00127
}
00128
00129
#define NdisZeroMappedMemory(Destination,Length) \
00130
{ \
00131
PUCHAR _Dest = (Destination); \
00132
PUCHAR _End = _Dest + (Length); \
00133
while (_Dest < _End) \
00134
{ \
00135
NdisWriteRegisterUchar(_Dest,0); \
00136
_Dest++; \
00137
} \
00138
}
00139
00140
#endif
00141
00142
00143
00144
00145
00146
00147
#if defined(_ALPHA_)
00148
00149
#define NdisMoveToMappedMemory(Destination,Source,Length) \
00150
WRITE_REGISTER_BUFFER_UCHAR(Destination,Source,Length)
00151
#define NdisMoveFromMappedMemory(Destination,Source,Length) \
00152
READ_REGISTER_BUFFER_UCHAR(Source,Destination,Length)
00153
#else
00154
00155 #define NdisMoveToMappedMemory(Destination,Source,Length) \
00156
NdisMoveMappedMemory(Destination,Source,Length)
00157 #define NdisMoveFromMappedMemory(Destination,Source,Length) \
00158
NdisMoveMappedMemory(Destination,Source,Length)
00159
#endif
00160
00161
00162
00163
00164
00165
00166 typedef struct _NDIS_SPIN_LOCK
00167 {
00168 KSPIN_LOCK
SpinLock;
00169 KIRQL
OldIrql;
00170 }
NDIS_SPIN_LOCK, *
PNDIS_SPIN_LOCK;
00171
00172
00173
00174
00175
00176 typedef struct _NDIS_EVENT
00177 {
00178 KEVENT Event;
00179 }
NDIS_EVENT, *
PNDIS_EVENT;
00180
00181 typedef VOID (*
NDIS_PROC)(
struct _NDIS_WORK_ITEM *, PVOID);
00182
00183
00184
00185
00186 typedef struct _NDIS_WORK_ITEM
00187 {
00188 PVOID
Context;
00189 NDIS_PROC Routine;
00190 UCHAR
WrapperReserved[8*
sizeof(PVOID)];
00191 }
NDIS_WORK_ITEM, *
PNDIS_WORK_ITEM;
00192
00193 #define NdisInterruptLatched Latched
00194 #define NdisInterruptLevelSensitive LevelSensitive
00195 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *
PNDIS_INTERRUPT_MODE;
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205 typedef enum _NDIS_PARAMETER_TYPE
00206 {
00207
NdisParameterInteger,
00208
NdisParameterHexInteger,
00209
NdisParameterString,
00210
NdisParameterMultiString,
00211
NdisParameterBinary
00212 }
NDIS_PARAMETER_TYPE, *
PNDIS_PARAMETER_TYPE;
00213
00214 typedef struct
00215
{
00216 USHORT Length;
00217 PVOID
Buffer;
00218 }
BINARY_DATA;
00219
00220
00221
00222
00223 typedef struct _NDIS_CONFIGURATION_PARAMETER
00224 {
00225 NDIS_PARAMETER_TYPE ParameterType;
00226
union
00227
{
00228 ULONG
IntegerData;
00229 NDIS_STRING StringData;
00230 BINARY_DATA BinaryData;
00231 } ParameterData;
00232 }
NDIS_CONFIGURATION_PARAMETER, *
PNDIS_CONFIGURATION_PARAMETER;
00233
00234
00235
00236
00237
00238 typedef enum _NDIS_PROCESSOR_TYPE
00239 {
00240
NdisProcessorX86,
00241
NdisProcessorMips,
00242
NdisProcessorAlpha,
00243
NdisProcessorPpc
00244 }
NDIS_PROCESSOR_TYPE, *
PNDIS_PROCESSOR_TYPE;
00245
00246
00247
00248
00249 typedef enum _NDIS_ENVIRONMENT_TYPE
00250 {
00251
NdisEnvironmentWindows,
00252
NdisEnvironmentWindowsNt
00253 }
NDIS_ENVIRONMENT_TYPE, *
PNDIS_ENVIRONMENT_TYPE;
00254
00255
00256
00257
00258
00259
00260 typedef enum _NDIS_INTERFACE_TYPE
00261 {
00262
NdisInterfaceInternal = Internal,
00263
NdisInterfaceIsa = Isa,
00264
NdisInterfaceEisa = Eisa,
00265
NdisInterfaceMca = MicroChannel,
00266
NdisInterfaceTurboChannel = TurboChannel,
00267
NdisInterfacePci = PCIBus,
00268
NdisInterfacePcMcia = PCMCIABus
00269 }
NDIS_INTERFACE_TYPE, *
PNDIS_INTERFACE_TYPE;
00270
00271
00272
00273
00274
00275
typedef
00276
VOID
00277 (*ADAPTER_SHUTDOWN_HANDLER) (
00278 IN PVOID ShutdownContext
00279 );
00280
00281
00282
00283
00284
00285 typedef CM_PARTIAL_RESOURCE_LIST
NDIS_RESOURCE_LIST, *
PNDIS_RESOURCE_LIST;
00286
00287
00288
00289
00290
00291
00292 typedef struct _NDIS_WAN_LINE_UP
00293 {
00294 IN ULONG
LinkSpeed;
00295 IN ULONG
MaximumTotalSize;
00296 IN NDIS_WAN_QUALITY
Quality;
00297 IN
USHORT SendWindow;
00298 IN UCHAR
RemoteAddress[6];
00299 IN OUT UCHAR
LocalAddress[6];
00300 IN ULONG
ProtocolBufferLength;
00301 IN PUCHAR
ProtocolBuffer;
00302 IN
USHORT ProtocolType;
00303 IN OUT
NDIS_STRING DeviceName;
00304 }
NDIS_WAN_LINE_UP, *
PNDIS_WAN_LINE_UP;
00305
00306
00307
00308
00309
00310 typedef struct _NDIS_WAN_LINE_DOWN
00311 {
00312 IN UCHAR
RemoteAddress[6];
00313 IN UCHAR
LocalAddress[6];
00314 }
NDIS_WAN_LINE_DOWN, *
PNDIS_WAN_LINE_DOWN;
00315
00316
00317
00318
00319
00320 typedef struct _NDIS_WAN_FRAGMENT
00321 {
00322 IN UCHAR
RemoteAddress[6];
00323 IN UCHAR
LocalAddress[6];
00324 }
NDIS_WAN_FRAGMENT, *
PNDIS_WAN_FRAGMENT;
00325
00326
00327
00328
00329
00330 typedef struct _NDIS_WAN_GET_STATS
00331 {
00332 IN UCHAR
LocalAddress[6];
00333 OUT ULONG
BytesSent;
00334 OUT ULONG
BytesRcvd;
00335 OUT ULONG
FramesSent;
00336 OUT ULONG
FramesRcvd;
00337 OUT ULONG
CRCErrors;
00338 OUT ULONG
TimeoutErrors;
00339 OUT ULONG
AlignmentErrors;
00340 OUT ULONG
SerialOverrunErrors;
00341 OUT ULONG
FramingErrors;
00342 OUT ULONG
BufferOverrunErrors;
00343 OUT ULONG
BytesTransmittedUncompressed;
00344 OUT ULONG
BytesReceivedUncompressed;
00345 OUT ULONG
BytesTransmittedCompressed;
00346 OUT ULONG
BytesReceivedCompressed;
00347 }
NDIS_WAN_GET_STATS, *
PNDIS_WAN_GET_STATS;
00348
00349
00350
00351
00352
00353 typedef struct _NDIS_DMA_DESCRIPTION
00354 {
00355 BOOLEAN
DemandMode;
00356 BOOLEAN
AutoInitialize;
00357 BOOLEAN
DmaChannelSpecified;
00358 DMA_WIDTH
DmaWidth;
00359 DMA_SPEED
DmaSpeed;
00360 ULONG
DmaPort;
00361 ULONG
DmaChannel;
00362 }
NDIS_DMA_DESCRIPTION, *
PNDIS_DMA_DESCRIPTION;
00363
00364
00365
00366
00367 typedef struct _NDIS_DMA_BLOCK
00368 {
00369 PVOID
MapRegisterBase;
00370 KEVENT AllocationEvent;
00371 PADAPTER_OBJECT SystemAdapterObject;
00372 BOOLEAN
InProgress;
00373 }
NDIS_DMA_BLOCK, *
PNDIS_DMA_BLOCK;
00374
00375
00376
00377
#if defined(NDIS_WRAPPER)
00378
00379
00380
00381
00382
typedef enum _NDIS_PNP_DEVICE_STATE
00383 {
00384 NdisPnPDeviceAdded,
00385 NdisPnPDeviceStarted,
00386 NdisPnPDeviceQueryStopped,
00387 NdisPnPDeviceStopped,
00388 NdisPnPDeviceQueryRemoved,
00389 NdisPnPDeviceRemoved,
00390 NdisPnPDeviceSurpriseRemoved
00391 } NDIS_PNP_DEVICE_STATE;
00392
00393
00394
00395
00396
#define NDIS_DEVICE_NOT_STOPPABLE 0x00000001 // the debvice is not stoppable i.e. ISA
00397
#define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002 // the device can not be safely removed
00398
#define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004 // the device can not be safely suspended
00399
#define NDIS_DEVICE_DISABLE_PM 0x00000008 // disable all PM features
00400
#define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010 // disable device waking up the system
00401
#define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020 // disable device waking up the -system- due to a cable re-connect
00402
#ifdef NDIS_WOL_QFE
00403
#define NDIS_DEVICE_RESERVED 0x00000040 // should not be used
00404
#define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080 // disable device waking up the -system- due to a magic packet
00405
#define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100 // disable device waking up the -system- due to a pattern match
00406
#endif
00407
00408
#endif // NDIS_WRAPPER defined
00409
00410
00411
00412
00413
00414
00415 typedef MDL NDIS_BUFFER, *
PNDIS_BUFFER;
00416
00417
struct _NDIS_PACKET;
00418 typedef NDIS_HANDLE PNDIS_PACKET_POOL;
00419
00420
00421
00422
00423
00424
00425 typedef struct _NDIS_PACKET_PRIVATE
00426 {
00427 UINT PhysicalCount;
00428 UINT TotalLength;
00429 PNDIS_BUFFER Head;
00430 PNDIS_BUFFER Tail;
00431
00432
00433
00434 PNDIS_PACKET_POOL Pool;
00435 UINT Count;
00436 ULONG
Flags;
00437 BOOLEAN
ValidCounts;
00438 UCHAR
NdisPacketFlags;
00439 USHORT NdisPacketOobOffset;
00440 }
NDIS_PACKET_PRIVATE, *
PNDIS_PACKET_PRIVATE;
00441
00442
00443
00444
00445 #define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000F // The low 4 bits are defined for protocol-id
00446
00447 #define NDIS_FLAGS_MULTICAST_PACKET 0x00000010
00448 #define NDIS_FLAGS_BROADCAST_PACKET 0x00000020
00449 #define NDIS_FLAGS_DIRECTED_PACKET 0x00000040
00450 #define NDIS_FLAGS_DONT_LOOPBACK 0x00000080
00451 #define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100 // Valid on receive path only
00452 #define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200
00453 #define NDIS_FLAGS_SKIP_LOOPBACK 0x00000400 // Internal use only
00454
00455
00456
00457
00458 #define fPACKET_WRAPPER_RESERVED 0x3F
00459 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
00460 #define fPACKET_ALLOCATED_BY_NDIS 0x80
00461
00462
00463
00464
00465
00466 typedef enum _NDIS_CLASS_ID
00467 {
00468
NdisClass802_3Priority,
00469
NdisClassWirelessWanMbxMailbox,
00470
NdisClassIrdaPacketInfo,
00471
NdisClassAtmAALInfo
00472
00473 }
NDIS_CLASS_ID;
00474
00475 typedef struct _MEDIA_SPECIFIC_INFORMATION
00476 {
00477 UINT NextEntryOffset;
00478 NDIS_CLASS_ID ClassId;
00479 UINT Size;
00480 UCHAR
ClassInformation[1];
00481
00482 }
MEDIA_SPECIFIC_INFORMATION, *
PMEDIA_SPECIFIC_INFORMATION;
00483
00484 typedef struct _NDIS_PACKET_OOB_DATA
00485 {
00486
union
00487
{
00488 ULONGLONG
TimeToSend;
00489 ULONGLONG
TimeSent;
00490 };
00491 ULONGLONG
TimeReceived;
00492 UINT HeaderSize;
00493 UINT SizeMediaSpecificInfo;
00494 PVOID
MediaSpecificInformation;
00495
00496 NDIS_STATUS Status;
00497 }
NDIS_PACKET_OOB_DATA, *
PNDIS_PACKET_OOB_DATA;
00498
00499 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet_) ((_Packet_)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
00500
00501 #define NDIS_OOB_DATA_FROM_PACKET(_p) \
00502
(PNDIS_PACKET_OOB_DATA)((PUCHAR)(_p) + \
00503
(_p)->Private.NdisPacketOobOffset)
00504 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
00505
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00506
(_Packet)->Private.NdisPacketOobOffset))->HeaderSize
00507 #define NDIS_GET_PACKET_STATUS(_Packet) \
00508
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00509
(_Packet)->Private.NdisPacketOobOffset))->Status
00510 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
00511
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00512
(_Packet)->Private.NdisPacketOobOffset))->TimeToSend
00513 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
00514
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00515
(_Packet)->Private.NdisPacketOobOffset))->TimeSent
00516 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
00517
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00518
(_Packet)->Private.NdisPacketOobOffset))->TimeReceived
00519
#define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
00520
_pMediaSpecificInfo, \
00521 _pSizeMediaSpecificInfo) \
00522
{ \
00523
if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) ||\
00524
!((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO))\
00525
{ \
00526
*(_pMediaSpecificInfo) = NULL; \
00527
*(_pSizeMediaSpecificInfo) = 0; \
00528
} \
00529
else \
00530
{ \
00531
*(_pMediaSpecificInfo) =((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +\
00532
(_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation;\
00533
*(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +\
00534
(_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo;\
00535
} \
00536
}
00537
00538 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
00539
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00540
(_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
00541 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
00542
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00543
(_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
00544 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
00545
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00546
(_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
00547 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
00548
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00549
(_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
00550 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
00551
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00552
(_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
00553
#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
00554
_MediaSpecificInfo, \
00555 _SizeMediaSpecificInfo) \
00556
{ \
00557
if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
00558
{ \
00559
(_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO;\
00560
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00561
(_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = (_MediaSpecificInfo);\
00562
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
00563
(_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = (_SizeMediaSpecificInfo);\
00564
} \
00565
}
00566
00567
00568
00569
00570 typedef struct _NDIS_PACKET
00571 {
00572 NDIS_PACKET_PRIVATE Private;
00573
00574
union
00575
{
00576
struct
00577 {
00578 UCHAR
MiniportReserved[2*
sizeof(PVOID)];
00579 UCHAR
WrapperReserved[2*
sizeof(PVOID)];
00580 };
00581
00582
struct
00583
{
00584
00585
00586
00587
00588
00589 UCHAR
MiniportReservedEx[3*
sizeof(PVOID)];
00590 UCHAR
WrapperReservedEx[
sizeof(PVOID)];
00591 };
00592
00593
struct
00594
{
00595 UCHAR
MacReserved[4*
sizeof(PVOID)];
00596 };
00597 };
00598
00599 ULONG_PTR
Reserved[2];
00600 UCHAR
ProtocolReserved[1];
00601
00602 }
NDIS_PACKET, *
PNDIS_PACKET, **
PPNDIS_PACKET;
00603
00604
00605
00606
00607 typedef enum _NDIS_PER_PACKET_INFO
00608 {
00609
TcpIpChecksumPacketInfo,
00610
IpSecPacketInfo,
00611
TcpLargeSendPacketInfo,
00612
ClassificationHandlePacketInfo,
00613
HeaderIndexInfo,
00614
ScatterGatherListPacketInfo,
00615
Ieee8021pPriority,
00616
OriginalPacketInfo,
00617
NdisInternalExtension1,
00618
NdisInternalExtension2,
00619
#if PKT_DBG
00620
NdisInternalPktDebug,
00621
#endif
00622
MaxPerPacketInfo
00623 }
NDIS_PER_PACKET_INFO, *
PNDIS_PER_PACKET_INFO;
00624
00625 typedef struct _NDIS_PACKET_EXTENSION
00626 {
00627 PVOID
NdisPacketInfo[
MaxPerPacketInfo];
00628 }
NDIS_PACKET_EXTENSION, *
PNDIS_PACKET_EXTENSION;
00629
00630 #define NDIS_PACKET_EXTENSION_FROM_PACKET(_P) ((PNDIS_PACKET_EXTENSION)((PUCHAR)(_P) + (_P)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
00631 #define NDIS_PER_PACKET_INFO_FROM_PACKET(_P, _Id) ((PNDIS_PACKET_EXTENSION)((PUCHAR)(_P) + (_P)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(_Id)]
00632 #define NDIS_GET_ORIGINAL_PACKET(_P) NDIS_PER_PACKET_INFO_FROM_PACKET(_P, OriginalPacketInfo)
00633 #define NDIS_SET_ORIGINAL_PACKET(_P, _OP) NDIS_PER_PACKET_INFO_FROM_PACKET(_P, OriginalPacketInfo) = _OP
00634
00635
00636
00637
00638 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO
00639 {
00640
union
00641
{
00642
struct
00643
{
00644 ULONG
NdisPacketChecksumV4:1;
00645 ULONG
NdisPacketChecksumV6:1;
00646 ULONG
NdisPacketTcpChecksum:1;
00647 ULONG
NdisPacketUdpChecksum:1;
00648 ULONG
NdisPacketIpChecksum:1;
00649 } Transmit;
00650
00651
struct
00652
{
00653 ULONG
NdisPacketTcpChecksumFailed:1;
00654 ULONG
NdisPacketUdpChecksumFailed:1;
00655 ULONG
NdisPacketIpChecksumFailed:1;
00656 ULONG
NdisPacketTcpChecksumSucceeded:1;
00657 ULONG
NdisPacketUdpChecksumSucceeded:1;
00658 ULONG
NdisPacketIpChecksumSucceeded:1;
00659 ULONG
NdisPacketLoopback:1;
00660 } Receive;
00661
00662 ULONG
Value;
00663 };
00664 }
NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *
PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
00665
00666
00667
00668 #define MAX_HASHES 4
00669 #define TRUNCATED_HASH_LEN 12
00670
00671 #define CRYPTO_SUCCESS 0
00672 #define CRYPTO_GENERIC_ERROR 1
00673 #define CRYPTO_TRANSPORT_AH_AUTH_FAILED 2
00674 #define CRYPTO_TRANSPORT_ESP_AUTH_FAILED 3
00675 #define CRYPTO_TUNNEL_AH_AUTH_FAILED 4
00676 #define CRYPTO_TUNNEL_ESP_AUTH_FAILED 5
00677 #define CRYPTO_INVALID_PACKET_SYNTAX 6
00678 #define CRYPTO_INVALID_PROTOCOL 7
00679
00680 typedef struct _NDIS_IPSEC_PACKET_INFO
00681 {
00682
union
00683
{
00684
struct
00685
{
00686 NDIS_HANDLE OffloadHandle;
00687 NDIS_HANDLE NextOffloadHandle;
00688
00689 } Transmit;
00690
00691
struct
00692
{
00693 ULONG
SA_DELETE_REQ:1;
00694 ULONG
CRYPTO_DONE:1;
00695 ULONG
NEXT_CRYPTO_DONE:1;
00696 ULONG
CryptoStatus;
00697 } Receive;
00698 };
00699 }
NDIS_IPSEC_PACKET_INFO, *
PNDIS_IPSEC_PACKET_INFO;
00700
00701
00703
00705
00706 #define NDIS_TASK_OFFLOAD_VERSION 1
00707
00708
00709
00710
00711
00712 typedef enum _NDIS_TASK
00713 {
00714
TcpIpChecksumNdisTask,
00715
IpSecNdisTask,
00716
TcpLargeSendNdisTask,
00717
MaxNdisTask
00718 }
NDIS_TASK, *
PNDIS_TASK;
00719
00720 typedef enum _NDIS_ENCAPSULATION
00721 {
00722
UNSPECIFIED_Encapsulation,
00723
NULL_Encapsulation,
00724
IEEE_802_3_Encapsulation,
00725
IEEE_802_5_Encapsulation,
00726
LLC_SNAP_ROUTED_Encapsulation,
00727
LLC_SNAP_BRIDGED_Encapsulation
00728
00729 }
NDIS_ENCAPSULATION;
00730
00731
00732
00733
00734 typedef struct _NDIS_ENCAPSULATION_FORMAT
00735 {
00736 NDIS_ENCAPSULATION Encapsulation;
00737
struct
00738
{
00739 ULONG
FixedHeaderSize:1;
00740 ULONG
Reserved:31;
00741 } Flags;
00742
00743 ULONG
EncapsulationHeaderSize;
00744
00745 }
NDIS_ENCAPSULATION_FORMAT,*
PNDIS_ENCAPSULATION_FORMAT;
00746
00747
00748
00749
00750
00751 typedef struct _NDIS_TASK_OFFLOAD_HEADER
00752 {
00753 ULONG
Version;
00754 ULONG
Size;
00755 ULONG
Reserved;
00756 ULONG
OffsetFirstTask;
00757 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
00758
00759
00760 }
NDIS_TASK_OFFLOAD_HEADER, *
PNDIS_TASK_OFFLOAD_HEADER;
00761
00762
00763
00764
00765
00766 typedef struct _NDIS_TASK_OFFLOAD
00767 {
00768 ULONG
Version;
00769 ULONG
Size;
00770 NDIS_TASK Task;
00771 ULONG
OffsetNextTask;
00772 ULONG
TaskBufferLength;
00773 UCHAR
TaskBuffer[1];
00774 }
NDIS_TASK_OFFLOAD, *
PNDIS_TASK_OFFLOAD;
00775
00776
00777
00778
00779 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM
00780 {
00781
struct
00782
{
00783 ULONG
IpOptionsSupported:1;
00784 ULONG
TcpOptionsSupported:1;
00785 ULONG
TcpChecksum:1;
00786 ULONG
UdpChecksum:1;
00787 ULONG
IpChecksum:1;
00788 }
V4Transmit;
00789
00790
struct
00791
{
00792 ULONG
IpOptionsSupported:1;
00793 ULONG
TcpOptionsSupported:1;
00794 ULONG
TcpChecksum:1;
00795 ULONG
UdpChecksum:1;
00796 ULONG
IpChecksum:1;
00797 } V4Receive;
00798
00799
00800
struct
00801
{
00802 ULONG IpOptionsSupported:1;
00803 ULONG TcpOptionsSupported:1;
00804 ULONG TcpChecksum:1;
00805 ULONG UdpChecksum:1;
00806
00807 }
V6Transmit;
00808
00809
struct
00810
{
00811 ULONG
IpOptionsSupported:1;
00812 ULONG
TcpOptionsSupported:1;
00813 ULONG
TcpChecksum:1;
00814 ULONG
UdpChecksum:1;
00815
00816 } V6Receive;
00817
00818
00819 }
NDIS_TASK_TCP_IP_CHECKSUM, *
PNDIS_TASK_TCP_IP_CHECKSUM;
00820
00821
00822
00823
00824 typedef struct _NDIS_TASK_TCP_LARGE_SEND
00825 {
00826 ULONG
Version;
00827 ULONG
MaxOffLoadSize;
00828 ULONG
MinSegmentCount;
00829 BOOLEAN
TcpOptions;
00830 BOOLEAN
IpOptions;
00831
00832 }
NDIS_TASK_TCP_LARGE_SEND, *
PNDIS_TASK_TCP_LARGE_SEND;
00833
00834
00835 typedef struct _NDIS_TASK_IPSEC
00836 {
00837
struct
00838
{
00839 ULONG
AH_ESP_COMBINED;
00840 ULONG
TRANSPORT_TUNNEL_COMBINED;
00841 ULONG
V4_OPTIONS;
00842 ULONG
RESERVED;
00843 } Supported;
00844
00845
struct
00846
{
00847 ULONG
MD5:1;
00848 ULONG
SHA_1:1;
00849 ULONG
Transport:1;
00850 ULONG
Tunnel:1;
00851 ULONG
Send:1;
00852 ULONG
Receive:1;
00853 } V4AH;
00854
00855
struct
00856
{
00857 ULONG
DES:1;
00858 ULONG
RESERVED:1;
00859 ULONG
TRIPLE_DES:1;
00860 ULONG
NULL_ESP:1;
00861 ULONG
Transport:1;
00862 ULONG
Tunnel:1;
00863 ULONG
Send:1;
00864 ULONG
Receive:1;
00865 } V4ESP;
00866
00867 }
NDIS_TASK_IPSEC, *
PNDIS_TASK_IPSEC;
00868
00869 typedef UINT IEEE8021PPRIORITY;
00870
00871
00872
00873
00874
00875 typedef struct _NDIS_WAN_PACKET
00876 {
00877 LIST_ENTRY
WanPacketQueue;
00878 PUCHAR
CurrentBuffer;
00879 ULONG
CurrentLength;
00880 PUCHAR
StartBuffer;
00881 PUCHAR
EndBuffer;
00882 PVOID
ProtocolReserved1;
00883 PVOID
ProtocolReserved2;
00884 PVOID
ProtocolReserved3;
00885 PVOID
ProtocolReserved4;
00886 PVOID
MacReserved1;
00887 PVOID
MacReserved2;
00888 PVOID
MacReserved3;
00889 PVOID
MacReserved4;
00890 }
NDIS_WAN_PACKET, *
PNDIS_WAN_PACKET;
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905 #define NdisGetPacketFlags(_Packet) (_Packet)->Private.Flags
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917 #define NdisSetPacketFlags(_Packet, _Flags) (_Packet)->Private.Flags |= (_Flags)
00918 #define NdisClearPacketFlags(_Packet, _Flags) (_Packet)->Private.Flags &= ~(_Flags)
00919
00920
00921
00922
00923
00924
00925
00926 typedef enum _NDIS_REQUEST_TYPE
00927 {
00928
NdisRequestQueryInformation,
00929
NdisRequestSetInformation,
00930
NdisRequestQueryStatistics,
00931
NdisRequestOpen,
00932
NdisRequestClose,
00933
NdisRequestSend,
00934
NdisRequestTransferData,
00935
NdisRequestReset,
00936
NdisRequestGeneric1,
00937
NdisRequestGeneric2,
00938
NdisRequestGeneric3,
00939
NdisRequestGeneric4
00940 }
NDIS_REQUEST_TYPE, *
PNDIS_REQUEST_TYPE;
00941
00942
00943
00944
00945
00946
00947 typedef struct _NDIS_REQUEST
00948 {
00949 UCHAR
MacReserved[4*
sizeof(PVOID)];
00950 NDIS_REQUEST_TYPE RequestType;
00951 union _DATA
00952 {
00953 struct _QUERY_INFORMATION
00954 {
00955 NDIS_OID
Oid;
00956 PVOID
InformationBuffer;
00957 UINT InformationBufferLength;
00958 UINT BytesWritten;
00959 UINT BytesNeeded;
00960 }
QUERY_INFORMATION;
00961
00962 struct _SET_INFORMATION
00963 {
00964 NDIS_OID
Oid;
00965 PVOID
InformationBuffer;
00966 UINT InformationBufferLength;
00967 UINT BytesRead;
00968 UINT BytesNeeded;
00969 }
SET_INFORMATION;
00970
00971 }
DATA;
00972
#if (defined(NDIS50) || defined(NDIS50_MINIPORT))
00973
UCHAR NdisReserved[9*
sizeof(PVOID)];
00974
union
00975
{
00976 UCHAR CallMgrReserved[2*
sizeof(PVOID)];
00977 UCHAR ProtocolReserved[2*
sizeof(PVOID)];
00978 };
00979 UCHAR MiniportReserved[2*
sizeof(PVOID)];
00980
#endif
00981
}
NDIS_REQUEST, *
PNDIS_REQUEST;
00982
00983
00984
00985
00986
00987 typedef ULONG
NDIS_AF, *
PNDIS_AF;
00988 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1) // ATM
00989 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2) // Packet scheduler
00990 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
00991 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
00992 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
00993 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
00994 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
00995 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
00996
00997
00998
00999
01000 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
01001
01002
01003
01004
01005
01006
01007
01008 typedef struct
01009
{
01010 NDIS_AF AddressFamily;
01011 ULONG MajorVersion;
01012 ULONG MinorVersion;
01013 }
CO_ADDRESS_FAMILY, *
PCO_ADDRESS_FAMILY;
01014
01015
01016
01017
01018 typedef struct
01019
{
01020 ULONG SapType;
01021 ULONG SapLength;
01022 UCHAR Sap[1];
01023 }
CO_SAP, *
PCO_SAP;
01024
01025
01026
01027
01028
01029 typedef PHYSICAL_ADDRESS
NDIS_PHYSICAL_ADDRESS, *
PNDIS_PHYSICAL_ADDRESS;
01030 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
01031 {
01032 NDIS_PHYSICAL_ADDRESS PhysicalAddress;
01033 UINT Length;
01034 }
NDIS_PHYSICAL_ADDRESS_UNIT, *
PNDIS_PHYSICAL_ADDRESS_UNIT;
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046 #define NdisGetPhysicalAddressHigh(_PhysicalAddress) \
01047
((_PhysicalAddress).HighPart)
01048
01049
01050
01051
01052
01053
01054
01055
01056
01057
01058
01059 #define NdisSetPhysicalAddressHigh(_PhysicalAddress, _Value) \
01060
((_PhysicalAddress).HighPart) = (_Value)
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072 #define NdisGetPhysicalAddressLow(_PhysicalAddress) \
01073
((_PhysicalAddress).LowPart)
01074
01075
01076
01077
01078
01079
01080
01081
01082
01083
01084
01085
01086 #define NdisSetPhysicalAddressLow(_PhysicalAddress, _Value) \
01087
((_PhysicalAddress).LowPart) = (_Value)
01088
01089
01090
01091
01092
01093 #define NDIS_PHYSICAL_ADDRESS_CONST(_Low, _High) \
01094
{ (ULONG)(_Low), (LONG)(_High) }
01095
01096
01097
01098
01099
01100 typedef struct _REFERENCE
01101 {
01102 KSPIN_LOCK
SpinLock;
01103 USHORT ReferenceCount;
01104 BOOLEAN
Closing;
01105 }
REFERENCE, *
PREFERENCE;
01106
01107
01108
01109
01110
01111
01112 typedef struct _MAP_REGISTER_ENTRY
01113 {
01114 PVOID
MapRegister;
01115 BOOLEAN
WriteToDevice;
01116 }
MAP_REGISTER_ENTRY, *
PMAP_REGISTER_ENTRY;
01117
01118
01119
01120
01121
01122 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
01123 #define NDIS_MEMORY_NONCACHED 0x00000002
01124
01125
01126
01127
01128 #define NDIS_OPEN_RECEIVE_NOT_REENTRANT 0x00000001
01129
01130
01131
01132
01133
01134 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
01135 #define NDIS_STATUS_PENDING ((NDIS_STATUS) STATUS_PENDING)
01136 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
01137 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
01138 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
01139 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
01140
01141 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
01142 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
01143 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
01144 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
01145 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
01146 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
01147 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
01148 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
01149 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
01150 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
01151 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
01152 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
01153 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
01154 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
01155 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
01156 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
01157 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
01158 #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
01159 #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
01160 #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
01161 #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
01162
01163 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
01164 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
01165 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
01166 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
01167
01168 #define NDIS_STATUS_FAILURE ((NDIS_STATUS) STATUS_UNSUCCESSFUL)
01169 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
01170 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
01171 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
01172 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
01173 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
01174 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
01175 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
01176 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
01177 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
01178 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
01179 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
01180 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
01181 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
01182 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
01183 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
01184 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
01185 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
01186 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
01187 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
01188 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
01189 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
01190 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
01191 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
01192 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
01193 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
01194 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
01195 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
01196 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
01197 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
01198 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
01199 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
01200
01201 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
01202 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
01203 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
01204 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
01205 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L) // cause 27
01206 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L) // cause 35,45
01207 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L) // cause 37
01208 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L) // cause 49
01209 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L) // cause 93
01210 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L) // cause 3
01211
01212 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
01213 #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
01214 #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
01215
01216
01217
01218
01219
01220
01221 #define NDIS_ERROR_CODE ULONG
01222
01223 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
01224 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
01225 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
01226 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
01227 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
01228 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
01229 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
01230 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
01231 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
01232 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
01233 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
01234 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
01235 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
01236 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
01237 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
01238
01239
#if BINARY_COMPATIBLE
01240
01241
#if USE_KLOCKS
01242
01243
#define DISPATCH_LEVEL 2
01244
01245
#define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
01246
01247
#define NdisFreeSpinLock(_SpinLock)
01248
01249
#define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
01250
01251
#define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
01252
01253
#define NdisDprAcquireSpinLock(_SpinLock) \
01254
{ \
01255
KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
01256
(_SpinLock)->OldIrql = DISPATCH_LEVEL; \
01257
}
01258
01259
#define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
01260
01261
#else
01262
01263
01264
01265
01266
EXPORT
01267
VOID
01268
NdisAllocateSpinLock(
01269 IN PNDIS_SPIN_LOCK SpinLock
01270 );
01271
01272
EXPORT
01273
VOID
01274
NdisFreeSpinLock(
01275 IN PNDIS_SPIN_LOCK SpinLock
01276 );
01277
01278
EXPORT
01279
VOID
01280
NdisAcquireSpinLock(
01281 IN PNDIS_SPIN_LOCK SpinLock
01282 );
01283
01284
EXPORT
01285
VOID
01286
NdisReleaseSpinLock(
01287 IN PNDIS_SPIN_LOCK SpinLock
01288 );
01289
01290
EXPORT
01291
VOID
01292
NdisDprAcquireSpinLock(
01293 IN PNDIS_SPIN_LOCK SpinLock
01294 );
01295
01296
EXPORT
01297
VOID
01298
NdisDprReleaseSpinLock(
01299 IN PNDIS_SPIN_LOCK SpinLock
01300 );
01301
01302
#endif
01303
01304
01305
EXPORT
01306
VOID
01307
NdisGetCurrentSystemTime(
01308 PLARGE_INTEGER pSystemTime
01309 );
01310
01311
01312
01313
01314
01315
EXPORT
01316 ULONG
01317
NdisInterlockedIncrement(
01318 IN PLONG Addend
01319 );
01320
01321
EXPORT
01322 ULONG
01323
NdisInterlockedDecrement(
01324 IN PLONG Addend
01325 );
01326
01327
EXPORT
01328
VOID
01329
NdisInterlockedAddUlong(
01330 IN PULONG Addend,
01331 IN ULONG Increment,
01332 IN PNDIS_SPIN_LOCK SpinLock
01333 );
01334
01335
EXPORT
01336 PLIST_ENTRY
01337
NdisInterlockedInsertHeadList(
01338 IN PLIST_ENTRY ListHead,
01339 IN PLIST_ENTRY ListEntry,
01340 IN PNDIS_SPIN_LOCK SpinLock
01341 );
01342
01343
01344
EXPORT
01345 PLIST_ENTRY
01346
NdisInterlockedInsertTailList(
01347 IN PLIST_ENTRY ListHead,
01348 IN PLIST_ENTRY ListEntry,
01349 IN PNDIS_SPIN_LOCK SpinLock
01350 );
01351
01352
01353
EXPORT
01354 PLIST_ENTRY
01355
NdisInterlockedRemoveHeadList(
01356 IN PLIST_ENTRY ListHead,
01357 IN PNDIS_SPIN_LOCK SpinLock
01358 );
01359
01360
EXPORT
01361 LARGE_INTEGER
01362 NdisInterlockedAddLargeInteger(
01363 IN PLARGE_INTEGER Addend,
01364 IN ULONG Increment,
01365 IN PKSPIN_LOCK Lock
01366 );
01367
01368
#else // BINARY_COMPATIBLE
01369
01370 #define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
01371
01372 #define NdisFreeSpinLock(_SpinLock)
01373
01374 #define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
01375
01376 #define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
01377
01378 #define NdisDprAcquireSpinLock(_SpinLock) \
01379
{ \
01380
KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
01381
(_SpinLock)->OldIrql = DISPATCH_LEVEL; \
01382
}
01383
01384 #define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
01385
01386 #define NdisGetCurrentSystemTime(_pSystemTime) \
01387
{ \
01388
KeQuerySystemTime(_pSystemTime); \
01389
}
01390
01391
01392
01393
01394
01395 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
01396
01397 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
01398
01399 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
01400
ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
01401
01402 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
01403
ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
01404
01405 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
01406
ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
01407
01408 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
01409
ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
01410
01411 #define NdisInterlockedPushEntryList(ListHead, ListEntry, Lock) \
01412
ExInterlockedPushEntryList(ListHead, ListEntry, &(Lock)->SpinLock)
01413
01414 #define NdisInterlockedPopEntryList(ListHead, Lock) \
01415
ExInterlockedPopEntryList(ListHead, &(Lock)->SpinLock)
01416
01417
#endif // BINARY_COMPATIBLE
01418
01419
#ifndef MAXIMUM_PROCESSORS
01420 #define MAXIMUM_PROCESSORS 32
01421
#endif
01422
01423 typedef union _NDIS_RW_LOCK_REFCOUNT
01424 {
01425 UINT RefCount;
01426 UCHAR
cacheLine[16];
01427 }
NDIS_RW_LOCK_REFCOUNT;
01428
01429 typedef struct _NDIS_RW_LOCK
01430 {
01431
union
01432
{
01433
struct
01434
{
01435 KSPIN_LOCK
SpinLock;
01436 PVOID
Context;
01437 };
01438 UCHAR
Reserved[16];
01439 };
01440
01441 NDIS_RW_LOCK_REFCOUNT RefCount[
MAXIMUM_PROCESSORS];
01442 }
NDIS_RW_LOCK, *
PNDIS_RW_LOCK;
01443
01444 typedef struct _LOCK_STATE
01445 {
01446 USHORT LockState;
01447 KIRQL
OldIrql;
01448 }
LOCK_STATE, *
PLOCK_STATE;
01449
01450
01451
EXPORT
01452
VOID
01453
NdisInitializeReadWriteLock(
01454 IN PNDIS_RW_LOCK Lock
01455 );
01456
01457
01458
EXPORT
01459
VOID
01460
NdisAcquireReadWriteLock(
01461 IN PNDIS_RW_LOCK Lock,
01462 IN BOOLEAN fWrite,
01463 IN PLOCK_STATE LockState
01464 );
01465
01466
01467
EXPORT
01468
VOID
01469
NdisReleaseReadWriteLock(
01470 IN PNDIS_RW_LOCK Lock,
01471 IN PLOCK_STATE LockState
01472 );
01473
01474
01475 #define NdisInterlockedAddLargeStatistic(_Addend, _Increment) \
01476
ExInterlockedAddLargeStatistic((PLARGE_INTEGER)_Addend, _Increment)
01477
01478
01479
01480
01481
01482 #define NdisInterlockedPushEntrySList(SListHead, SListEntry, Lock) \
01483
ExInterlockedPushEntrySList(SListHead, SListEntry, &(Lock)->SpinLock)
01484
01485 #define NdisInterlockedPopEntrySList(SListHead, Lock) \
01486
ExInterlockedPopEntrySList(SListHead, &(Lock)->SpinLock)
01487
01488 #define NdisInterlockedFlushSList(SListHead) ExInterlockedFlushSList(SListHead)
01489
01490 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
01491
01492 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
01493
01494
EXPORT
01495
VOID
01496
NdisGetCurrentProcessorCpuUsage(
01497 OUT PULONG pCpuUsage
01498 );
01499
01500
EXPORT
01501
VOID
01502
NdisGetCurrentProcessorCounts(
01503 OUT PULONG pIdleCount,
01504 OUT PULONG pKernelAndUser,
01505 OUT PULONG pIndex
01506 );
01507
01508
EXPORT
01509
VOID
01510
NdisGetSystemUpTime(
01511 OUT PULONG pSystemUpTime
01512 );
01513
01514
01515
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526 #define NdisInitializeListHead(_ListHead) InitializeListHead(_ListHead)
01527
01528
01529
01530
01531
01532
01533
EXPORT
01534
VOID
01535
NdisOpenConfiguration(
01536 OUT PNDIS_STATUS Status,
01537 OUT PNDIS_HANDLE ConfigurationHandle,
01538 IN NDIS_HANDLE WrapperConfigurationContext
01539 );
01540
01541
EXPORT
01542
VOID
01543
NdisOpenConfigurationKeyByName(
01544 OUT PNDIS_STATUS Status,
01545 IN NDIS_HANDLE ConfigurationHandle,
01546 IN PNDIS_STRING SubKeyName,
01547 OUT PNDIS_HANDLE SubKeyHandle
01548 );
01549
01550
EXPORT
01551
VOID
01552
NdisOpenConfigurationKeyByIndex(
01553 OUT PNDIS_STATUS Status,
01554 IN NDIS_HANDLE ConfigurationHandle,
01555 IN ULONG Index,
01556 OUT PNDIS_STRING KeyName,
01557 OUT PNDIS_HANDLE KeyHandle
01558 );
01559
01560
EXPORT
01561
VOID
01562
NdisReadConfiguration(
01563 OUT PNDIS_STATUS Status,
01564 OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
01565 IN NDIS_HANDLE ConfigurationHandle,
01566 IN PNDIS_STRING Keyword,
01567 IN NDIS_PARAMETER_TYPE ParameterType
01568 );
01569
01570
EXPORT
01571
VOID
01572
NdisWriteConfiguration(
01573 OUT PNDIS_STATUS Status,
01574 IN NDIS_HANDLE ConfigurationHandle,
01575 IN PNDIS_STRING Keyword,
01576 IN PNDIS_CONFIGURATION_PARAMETER ParameterValue
01577 );
01578
01579
EXPORT
01580
VOID
01581
NdisCloseConfiguration(
01582 IN NDIS_HANDLE ConfigurationHandle
01583 );
01584
01585
EXPORT
01586
VOID
01587
NdisReadNetworkAddress(
01588 OUT PNDIS_STATUS Status,
01589 OUT PVOID * NetworkAddress,
01590 OUT PUINT NetworkAddressLength,
01591 IN NDIS_HANDLE ConfigurationHandle
01592 );
01593
01594
EXPORT
01595
VOID
01596
NdisReadEisaSlotInformation(
01597 OUT PNDIS_STATUS Status,
01598 IN NDIS_HANDLE WrapperConfigurationContext,
01599 OUT PUINT SlotNumber,
01600 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData
01601 );
01602
01603
EXPORT
01604
VOID
01605
NdisReadEisaSlotInformationEx(
01606 OUT PNDIS_STATUS Status,
01607 IN NDIS_HANDLE WrapperConfigurationContext,
01608 OUT PUINT SlotNumber,
01609 OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
01610 OUT PUINT NumberOfFunctions
01611 );
01612
01613
EXPORT
01614
VOID
01615
NdisReadMcaPosInformation(
01616 OUT PNDIS_STATUS Status,
01617 IN NDIS_HANDLE WrapperConfigurationContext,
01618 IN PUINT ChannelNumber,
01619 OUT PNDIS_MCA_POS_DATA McaData
01620 );
01621
01622
EXPORT
01623 ULONG
01624
NdisReadPciSlotInformation(
01625 IN NDIS_HANDLE NdisAdapterHandle,
01626 IN ULONG SlotNumber,
01627 IN ULONG Offset,
01628 IN PVOID Buffer,
01629 IN ULONG Length
01630 );
01631
01632
EXPORT
01633 ULONG
01634
NdisWritePciSlotInformation(
01635 IN NDIS_HANDLE NdisAdapterHandle,
01636 IN ULONG SlotNumber,
01637 IN ULONG Offset,
01638 IN PVOID Buffer,
01639 IN ULONG Length
01640 );
01641
01642
EXPORT
01643
NDIS_STATUS
01644
NdisPciAssignResources(
01645 IN NDIS_HANDLE NdisMacHandle,
01646 IN NDIS_HANDLE NdisWrapperHandle,
01647 IN NDIS_HANDLE WrapperConfigurationContext,
01648 IN ULONG SlotNumber,
01649 OUT PNDIS_RESOURCE_LIST * AssignedResources
01650 );
01651
01652
EXPORT
01653 ULONG
01654
NdisReadPcmciaAttributeMemory(
01655 IN NDIS_HANDLE NdisAdapterHandle,
01656 IN ULONG Offset,
01657 IN PVOID Buffer,
01658 IN ULONG Length
01659 );
01660
01661
EXPORT
01662 ULONG
01663
NdisWritePcmciaAttributeMemory(
01664 IN NDIS_HANDLE NdisAdapterHandle,
01665 IN ULONG Offset,
01666 IN PVOID Buffer,
01667 IN ULONG Length
01668 );
01669
01670
01671
01672
01673
01674
EXPORT
01675
VOID
01676
NdisAllocateBufferPool(
01677 OUT PNDIS_STATUS Status,
01678 OUT PNDIS_HANDLE PoolHandle,
01679 IN UINT NumberOfDescriptors
01680 );
01681
01682
EXPORT
01683
VOID
01684
NdisFreeBufferPool(
01685 IN NDIS_HANDLE PoolHandle
01686 );
01687
01688
EXPORT
01689
VOID
01690
NdisAllocateBuffer(
01691 OUT PNDIS_STATUS Status,
01692 OUT PNDIS_BUFFER * Buffer,
01693 IN NDIS_HANDLE PoolHandle,
01694 IN PVOID VirtualAddress,
01695 IN UINT Length
01696 );
01697
01698
EXPORT
01699
VOID
01700
NdisCopyBuffer(
01701 OUT PNDIS_STATUS Status,
01702 OUT PNDIS_BUFFER * Buffer,
01703 IN NDIS_HANDLE PoolHandle,
01704 IN PVOID MemoryDescriptor,
01705 IN UINT Offset,
01706 IN UINT Length
01707 );
01708
01709
01710
01711
01712
01713
01714
01715
01716
01717
01718
01719
01720
#ifdef _M_IX86
01721
#define NdisCopyLookaheadData(_Destination, _Source, _Length, _MacOptions) \
01722
RtlCopyMemory(_Destination, _Source, _Length)
01723
#else
01724 #define NdisCopyLookaheadData(_Destination, _Source, _Length, _MacOptions) \
01725
{ \
01726
if ((_MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
01727
{ \
01728
RtlCopyMemory(_Destination, _Source, _Length); \
01729
} \
01730
else \
01731
{ \
01732
PUCHAR _Src = (PUCHAR)(_Source); \
01733
PUCHAR _Dest = (PUCHAR)(_Destination); \
01734
PUCHAR _End = _Dest + (_Length); \
01735
while (_Dest < _End) \
01736
{ \
01737
*_Dest++ = *_Src++; \
01738
} \
01739
} \
01740
}
01741
#endif
01742
01743
01744
01745
01746
EXPORT
01747
VOID
01748
NdisAllocatePacketPool(
01749 OUT PNDIS_STATUS Status,
01750 OUT PNDIS_HANDLE PoolHandle,
01751 IN UINT NumberOfDescriptors,
01752 IN UINT ProtocolReservedLength
01753 );
01754
01755
EXPORT
01756
VOID
01757
NdisAllocatePacketPoolEx(
01758 OUT PNDIS_STATUS Status,
01759 OUT PNDIS_HANDLE PoolHandle,
01760 IN UINT NumberOfDescriptors,
01761 IN UINT NumberOfOverflowDescriptors,
01762 IN UINT ProtocolReservedLength
01763 );
01764
01765
EXPORT
01766
VOID
01767
NdisSetPacketPoolProtocolId(
01768 IN NDIS_HANDLE PacketPoolHandle,
01769 IN UINT ProtocolId
01770 );
01771
01772
EXPORT
01773
UINT
01774
NdisPacketPoolUsage(
01775 IN NDIS_HANDLE PoolHandle
01776 );
01777
01778
EXPORT
01779
VOID
01780
NdisFreePacketPool(
01781 IN NDIS_HANDLE PoolHandle
01782 );
01783
01784
EXPORT
01785
VOID
01786
NdisFreePacket(
01787 IN PNDIS_PACKET Packet
01788 );
01789
01790
EXPORT
01791
VOID
01792
NdisDprFreePacket(
01793 IN PNDIS_PACKET Packet
01794 );
01795
01796
EXPORT
01797
VOID
01798
NdisDprFreePacketNonInterlocked(
01799 IN PNDIS_PACKET Packet
01800 );
01801
01802
01803
EXPORT
01804
VOID
01805
NdisAllocatePacket(
01806 OUT PNDIS_STATUS Status,
01807 OUT PNDIS_PACKET * Packet,
01808 IN NDIS_HANDLE PoolHandle
01809 );
01810
01811
EXPORT
01812
VOID
01813
NdisDprAllocatePacket(
01814 OUT PNDIS_STATUS Status,
01815 OUT PNDIS_PACKET * Packet,
01816 IN NDIS_HANDLE PoolHandle
01817 );
01818
01819
EXPORT
01820
VOID
01821
NdisDprAllocatePacketNonInterlocked(
01822 OUT PNDIS_STATUS Status,
01823 OUT PNDIS_PACKET * Packet,
01824 IN NDIS_HANDLE PoolHandle
01825 );
01826
01827
01828
01829
01830
01831 #define NdisReinitializePacket(Packet) \
01832
{ \
01833
(Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
01834
(Packet)->Private.ValidCounts = FALSE; \
01835
}
01836
01837
01838
#if BINARY_COMPATIBLE
01839
01840
EXPORT
01841
VOID
01842
NdisFreeBuffer(
01843 IN PNDIS_BUFFER Buffer
01844 );
01845
01846
EXPORT
01847
VOID
01848
NdisQueryBuffer(
01849 IN PNDIS_BUFFER Buffer,
01850 OUT PVOID * VirtualAddress OPTIONAL,
01851 OUT PUINT Length
01852 );
01853
01854
EXPORT
01855
VOID
01856
NdisQueryBufferSafe(
01857 IN PNDIS_BUFFER Buffer,
01858 OUT PVOID * VirtualAddress OPTIONAL,
01859 OUT PUINT Length,
01860 IN UINT Priority
01861 );
01862
01863
EXPORT
01864
VOID
01865
NdisQueryBufferOffset(
01866 IN PNDIS_BUFFER Buffer,
01867 OUT PUINT Offset,
01868 OUT PUINT Length
01869 );
01870
01871
01872
01873
01874
01875
VOID
01876
NdisGetFirstBufferFromPacket(
01877 IN PNDIS_PACKET Packet,
01878 OUT PNDIS_BUFFER * FirstBuffer,
01879 OUT PVOID * FirstBufferVA,
01880 OUT PUINT FirstBufferLength,
01881 OUT PUINT TotalBufferLength
01882 );
01883
01884
01885
01886
01887
01888
01889
EXPORT
01890 ULONG
01891
NDIS_BUFFER_TO_SPAN_PAGES(
01892 IN PNDIS_BUFFER Buffer
01893 );
01894
01895
EXPORT
01896
VOID
01897
NdisGetBufferPhysicalArraySize(
01898 IN PNDIS_BUFFER Buffer,
01899 OUT PUINT ArraySize
01900 );
01901
01902
#else // BINARY_COMPATIBLE
01903
01904 #define NdisFreeBuffer(Buffer) IoFreeMdl(Buffer)
01905
01906 #define NdisQueryBuffer(_Buffer, _VirtualAddress, _Length) \
01907
{ \
01908
if (ARGUMENT_PRESENT(_VirtualAddress)) \
01909
{ \
01910
*(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdl(_Buffer); \
01911
} \
01912
*(_Length) = MmGetMdlByteCount(_Buffer); \
01913
}
01914
01915 #define NdisQueryBufferSafe(_Buffer, _VirtualAddress, _Length, _Priority) \
01916
{ \
01917
PVOID _VA; \
01918
\
01919
_VA = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
01920
if (ARGUMENT_PRESENT(_VirtualAddress)) \
01921
{ \
01922
*(PVOID *)(_VirtualAddress) = _VA; \
01923
} \
01924
*(_Length) = (_VA != NULL) ? MmGetMdlByteCount(_Buffer) : 0; \
01925
}
01926
01927 #define NdisQueryBufferOffset(_Buffer, _Offset, _Length) \
01928
{ \
01929
*(_Offset) = MmGetMdlByteOffset(_Buffer); \
01930
*(_Length) = MmGetMdlByteCount(_Buffer); \
01931
}
01932
01933
01934
#define NdisGetFirstBufferFromPacket(_Packet, \
01935
_FirstBuffer, \
01936
_FirstBufferVA, \
01937
_FirstBufferLength, \
01938 _TotalBufferLength) \
01939
{ \
01940
PNDIS_BUFFER _pBuf; \
01941
\
01942
_pBuf = (_Packet)->Private.Head; \
01943
*(_FirstBuffer) = _pBuf; \
01944
*(_FirstBufferVA) = MmGetMdlVirtualAddress(_pBuf); \
01945
*(_FirstBufferLength) = \
01946
*(_TotalBufferLength) = MmGetMdlByteCount(_pBuf); \
01947
for (_pBuf = _pBuf->Next; \
01948
_pBuf != NULL; \
01949
_pBuf = _pBuf->Next) \
01950
{ \
01951
*(_TotalBufferLength) += MmGetMdlByteCount(_pBuf); \
01952
} \
01953
}
01954
01955 #define NDIS_BUFFER_TO_SPAN_PAGES(_Buffer) \
01956
(MmGetMdlByteCount(_Buffer)==0 ? \
01957
1 : \
01958
(COMPUTE_PAGES_SPANNED( \
01959
MmGetMdlVirtualAddress(_Buffer), \
01960
MmGetMdlByteCount(_Buffer))))
01961
01962 #define NdisGetBufferPhysicalArraySize(Buffer, ArraySize) \
01963
(*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))
01964
01965
#endif // BINARY_COMPATIBLE
01966
01967
01968
01969
01970
01971
01972
01973
01974
01975
01976 #define NDIS_BUFFER_LINKAGE(Buffer) ((Buffer)->Next)
01977
01978
01979
01980
01981
01982
01983
01984
01985
01986
01987
01988 #define NdisRecalculatePacketCounts(Packet) \
01989
{ \
01990
{ \
01991
PNDIS_BUFFER TmpBuffer = (Packet)->Private.Head; \
01992
if (TmpBuffer) \
01993
{ \
01994
while (TmpBuffer->Next) \
01995
{ \
01996
TmpBuffer = TmpBuffer->Next; \
01997
} \
01998
(Packet)->Private.Tail = TmpBuffer; \
01999
} \
02000
(Packet)->Private.ValidCounts = FALSE; \
02001
} \
02002
}
02003
02004
02005
02006
02007
02008
02009
02010
02011
02012
02013
02014
02015 #define NdisChainBufferAtFront(Packet, Buffer) \
02016
{ \
02017
PNDIS_BUFFER TmpBuffer = (Buffer); \
02018
\
02019
for (;;) \
02020
{ \
02021
if (TmpBuffer->Next == (PNDIS_BUFFER)NULL) \
02022
break; \
02023
TmpBuffer = TmpBuffer->Next; \
02024
} \
02025
if ((Packet)->Private.Head == NULL) \
02026
{ \
02027
(Packet)->Private.Tail = TmpBuffer; \
02028
} \
02029
TmpBuffer->Next = (Packet)->Private.Head; \
02030
(Packet)->Private.Head = (Buffer); \
02031
(Packet)->Private.ValidCounts = FALSE; \
02032
}
02033
02034
02035
02036
02037
02038
02039
02040
02041
02042
02043
02044 #define NdisChainBufferAtBack(Packet, Buffer) \
02045
{ \
02046
PNDIS_BUFFER TmpBuffer = (Buffer); \
02047
\
02048
for (;;) \
02049
{ \
02050
if (TmpBuffer->Next == NULL) \
02051
break; \
02052
TmpBuffer = TmpBuffer->Next; \
02053
} \
02054
if ((Packet)->Private.Head != NULL) \
02055
{ \
02056
(Packet)->Private.Tail->Next = (Buffer); \
02057
} \
02058
else \
02059
{ \
02060
(Packet)->Private.Head = (Buffer); \
02061
} \
02062
(Packet)->Private.Tail = TmpBuffer; \
02063
TmpBuffer->Next = NULL; \
02064
(Packet)->Private.ValidCounts = FALSE; \
02065
}
02066
02067
EXPORT
02068
VOID
02069
NdisUnchainBufferAtFront(
02070 IN OUT PNDIS_PACKET Packet,
02071 OUT PNDIS_BUFFER * Buffer
02072 );
02073
02074
EXPORT
02075
VOID
02076
NdisUnchainBufferAtBack(
02077 IN OUT PNDIS_PACKET Packet,
02078 OUT PNDIS_BUFFER * Buffer
02079 );
02080
02081
02082
02083
02084
02085
02086
02087
02088
02089
02090
02091
02092
02093
02094
02095
#define NdisQueryPacket(_Packet, \
02096
_PhysicalBufferCount, \
02097
_BufferCount, \
02098
_FirstBuffer, \
02099 _TotalPacketLength) \
02100
{ \
02101
if ((_FirstBuffer) != NULL) \
02102
{ \
02103
PNDIS_BUFFER * __FirstBuffer = (_FirstBuffer); \
02104
*(__FirstBuffer) = (_Packet)->Private.Head; \
02105
} \
02106
if ((_TotalPacketLength) || (_BufferCount) || (_PhysicalBufferCount)) \
02107
{ \
02108
if (!(_Packet)->Private.ValidCounts) \
02109
{ \
02110
PNDIS_BUFFER TmpBuffer = (_Packet)->Private.Head; \
02111
UINT PTotalLength = 0, PPhysicalCount = 0, PAddedCount = 0; \
02112
UINT PacketLength, Offset; \
02113
\
02114
while (TmpBuffer != (PNDIS_BUFFER)NULL) \
02115
{ \
02116
NdisQueryBufferOffset(TmpBuffer, &Offset, &PacketLength); \
02117
PTotalLength += PacketLength; \
02118
PPhysicalCount += (UINT)NDIS_BUFFER_TO_SPAN_PAGES(TmpBuffer);\
02119
++PAddedCount; \
02120
TmpBuffer = TmpBuffer->Next; \
02121
} \
02122
(_Packet)->Private.Count = PAddedCount; \
02123
(_Packet)->Private.TotalLength = PTotalLength; \
02124
(_Packet)->Private.PhysicalCount = PPhysicalCount; \
02125
(_Packet)->Private.ValidCounts = TRUE; \
02126
} \
02127
\
02128
if (_PhysicalBufferCount) \
02129
{ \
02130
PUINT __PhysicalBufferCount = (_PhysicalBufferCount); \
02131
*(__PhysicalBufferCount) = (_Packet)->Private.PhysicalCount; \
02132
} \
02133
if (_BufferCount) \
02134
{ \
02135
PUINT __BufferCount = (_BufferCount); \
02136
*(__BufferCount) = (_Packet)->Private.Count; \
02137
} \
02138
if (_TotalPacketLength) \
02139
{ \
02140
PUINT __TotalPacketLength = (_TotalPacketLength); \
02141
*(__TotalPacketLength) = (_Packet)->Private.TotalLength; \
02142
} \
02143
} \
02144
}
02145
02146
02147
02148
02149
02150
02151
02152
02153
02154
02155
02156
02157 #define NdisGetNextBuffer(CurrentBuffer, NextBuffer) \
02158
{ \
02159
*(NextBuffer) = (CurrentBuffer)->Next; \
02160
}
02161
02162
#if BINARY_COMPATIBLE
02163
02164
VOID
02165
NdisAdjustBufferLength(
02166 IN PNDIS_BUFFER Buffer,
02167 IN UINT Length
02168 );
02169
02170
#else // BINARY_COMPATIBLE
02171
02172
#if NDIS_NT
02173 #define NdisAdjustBufferLength(Buffer, Length) (((Buffer)->ByteCount) = (Length))
02174
#else
02175
#define NdisAdjustBufferLength(Buffer, Length) (((Buffer)->Length) = (Length))
02176
#endif
02177
02178
#endif // BINARY_COMPATIBLE
02179
02180
EXPORT
02181
VOID
02182
NdisCopyFromPacketToPacket(
02183 IN PNDIS_PACKET Destination,
02184 IN UINT DestinationOffset,
02185 IN UINT BytesToCopy,
02186 IN PNDIS_PACKET Source,
02187 IN UINT SourceOffset,
02188 OUT PUINT BytesCopied
02189 );
02190
02191
02192
EXPORT
02193
NDIS_STATUS
02194
NdisAllocateMemory(
02195 OUT PVOID * VirtualAddress,
02196 IN UINT Length,
02197 IN UINT MemoryFlags,
02198 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
02199 );
02200
02201
EXPORT
02202
NDIS_STATUS
02203
NdisAllocateMemoryWithTag(
02204 OUT PVOID * VirtualAddress,
02205 IN UINT Length,
02206 IN ULONG Tag
02207 );
02208
02209
EXPORT
02210
VOID
02211
NdisFreeMemory(
02212 IN PVOID VirtualAddress,
02213 IN UINT Length,
02214 IN UINT MemoryFlags
02215 );
02216
02217
02218
02219
02220
02221
02222
02223
02224
02225 #define NdisStallExecution(MicroSecondsToStall) KeStallExecutionProcessor(MicroSecondsToStall)
02226
02227
02228
EXPORT
02229
VOID
02230
NdisInitializeEvent(
02231 IN PNDIS_EVENT Event
02232 );
02233
02234
EXPORT
02235
VOID
02236
NdisSetEvent(
02237 IN PNDIS_EVENT Event
02238 );
02239
02240
EXPORT
02241
VOID
02242
NdisResetEvent(
02243 IN PNDIS_EVENT Event
02244 );
02245
02246
EXPORT
02247 BOOLEAN
02248
NdisWaitEvent(
02249 IN PNDIS_EVENT Event,
02250 IN UINT msToWait
02251 );
02252
02253
02254
02255
02256
02257
02258
02259
02260
02261
02262 #define NdisInitializeWorkItem(_WI_, _R_, _C_) \
02263
{ \
02264
(_WI_)->Context = _C_; \
02265
(_WI_)->Routine = _R_; \
02266
}
02267
02268
EXPORT
02269
NDIS_STATUS
02270
NdisScheduleWorkItem(
02271 IN PNDIS_WORK_ITEM WorkItem
02272 );
02273
02274
EXPORT
02275
NDIS_STATUS
02276
NdisQueryMapRegisterCount(
02277 IN NDIS_INTERFACE_TYPE BusType,
02278 OUT PUINT MapRegisterCount
02279 );
02280
02281
02282
02283
02284
02285
EXPORT
02286
VOID
02287
NdisOpenFile(
02288 OUT PNDIS_STATUS Status,
02289 OUT PNDIS_HANDLE FileHandle,
02290 OUT PUINT FileLength,
02291 IN PNDIS_STRING FileName,
02292 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
02293 );
02294
02295
EXPORT
02296
VOID
02297
NdisCloseFile(
02298 IN NDIS_HANDLE FileHandle
02299 );
02300
02301
EXPORT
02302
VOID
02303
NdisMapFile(
02304 OUT PNDIS_STATUS Status,
02305 OUT PVOID * MappedBuffer,
02306 IN NDIS_HANDLE FileHandle
02307 );
02308
02309
EXPORT
02310
VOID
02311
NdisUnmapFile(
02312 IN NDIS_HANDLE FileHandle
02313 );
02314
02315
02316
02317
02318
02319
02320
02321
02322
02323
02324
02325
02326
02327
02328 #define NdisFlushBuffer(Buffer,WriteToDevice) \
02329
KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE)
02330
02331
02332
02333
02334
02335
02336 #define NdisGetCacheFillSize() HalGetDmaAlignmentRequirement()
02337
02338
02339
02340
02341
02342
02343
02344 #define NDIS_PORT_TO_PORT(Handle,Port) (((PNDIS_ADAPTER_BLOCK)(Handle))->PortOffset + (Port))
02345
02346
02347
02348
02349
02350
02351
02352
02353
02354
02355
02356
02357
02358
02359 #define NdisWritePortUchar(Handle,Port,Data) \
02360
WRITE_PORT_UCHAR((PUCHAR)(NDIS_PORT_TO_PORT(Handle,Port)),(UCHAR)(Data))
02361
02362
02363
02364
02365
02366
02367
02368
02369
02370 #define NdisWritePortUshort(Handle,Port,Data) \
02371
WRITE_PORT_USHORT((PUSHORT)(NDIS_PORT_TO_PORT(Handle,Port)),(USHORT)(Data))
02372
02373
02374
02375
02376
02377
02378
02379
02380
02381
02382 #define NdisWritePortUlong(Handle,Port,Data) \
02383
WRITE_PORT_ULONG((PULONG)(NDIS_PORT_TO_PORT(Handle,Port)),(ULONG)(Data))
02384
02385
02386
02387
02388
02389
02390
02391
02392
02393
02394
02395
02396
02397
02398
02399 #define NdisWritePortBufferUchar(Handle,Port,Buffer,Length) \
02400
NdisRawWritePortBufferUchar(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length))
02401
02402
02403
02404
02405
02406
02407
02408
02409
02410
02411 #define NdisWritePortBufferUshort(Handle,Port,Buffer,Length) \
02412
NdisRawWritePortBufferUshort(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length))
02413
02414
02415
02416
02417
02418
02419
02420
02421
02422
02423
02424 #define NdisWritePortBufferUlong(Handle,Port,Buffer,Length) \
02425
NdisRawWritePortBufferUlong(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length))
02426
02427
02428
02429
02430
02431
02432
02433
02434
02435
02436
02437
02438
02439
02440 #define NdisReadPortUchar(Handle,Port, Data) \
02441
NdisRawReadPortUchar(NDIS_PORT_TO_PORT((Handle),(Port)),(Data))
02442
02443
02444
02445
02446
02447
02448
02449
02450
02451 #define NdisReadPortUshort(Handle,Port,Data) \
02452
NdisRawReadPortUshort(NDIS_PORT_TO_PORT((Handle),(Port)),(Data))
02453
02454
02455
02456
02457
02458
02459
02460
02461
02462
02463 #define NdisReadPortUlong(Handle,Port,Data) \
02464
NdisRawReadPortUlong(NDIS_PORT_TO_PORT((Handle),(Port)),(Data))
02465
02466
02467
02468
02469
02470
02471
02472
02473
02474
02475
02476
02477
02478
02479 #define NdisReadPortBufferUchar(Handle,Port,Buffer,Length) \
02480
NdisRawReadPortBufferUchar(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length))
02481
02482
02483
02484
02485
02486
02487
02488
02489
02490
02491 #define NdisReadPortBufferUshort(Handle,Port,Buffer,Length) \
02492
NdisRawReadPortBufferUshort(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length))
02493
02494
02495
02496
02497
02498
02499
02500
02501
02502
02503 #define NdisReadPortBufferUlong(Handle,Port,Buffer) \
02504
NdisRawReadPortBufferUlong(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length))
02505
02506
02507
02508
02509
02510
02511
02512
02513
02514
02515
02516
02517
02518
02519
02520
02521 #define NdisRawWritePortUchar(Port,Data) \
02522
WRITE_PORT_UCHAR((PUCHAR)(Port),(UCHAR)(Data))
02523
02524
02525
02526
02527
02528
02529
02530
02531 #define NdisRawWritePortUshort(Port,Data) \
02532
WRITE_PORT_USHORT((PUSHORT)(Port),(USHORT)(Data))
02533
02534
02535
02536
02537
02538
02539
02540
02541 #define NdisRawWritePortUlong(Port,Data) \
02542
WRITE_PORT_ULONG((PULONG)(Port),(ULONG)(Data))
02543
02544
02545
02546
02547
02548
02549
02550
02551
02552
02553
02554
02555
02556
02557 #define NdisRawWritePortBufferUchar(Port,Buffer,Length) \
02558
WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length))
02559
02560
02561
02562
02563
02564
02565
02566
02567
02568
#if defined(_M_IX86)
02569
#define NdisRawWritePortBufferUshort(Port,Buffer,Length) \
02570
WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port),(PUSHORT)(Buffer),(Length))
02571
#else
02572 #define NdisRawWritePortBufferUshort(Port,Buffer,Length) \
02573
{ \
02574
ULONG_PTR _Port = (ULONG_PTR)(Port); \
02575
PUSHORT _Current = (Buffer); \
02576
PUSHORT _End = _Current + (Length); \
02577
for ( ; _Current < _End; ++_Current) \
02578
{ \
02579
WRITE_PORT_USHORT((PUSHORT)_Port,*(UNALIGNED USHORT *)_Current);\
02580
} \
02581
}
02582
#endif
02583
02584
02585
02586
02587
02588
02589
02590
02591
02592
02593
#if defined(_M_IX86)
02594
#define NdisRawWritePortBufferUlong(Port,Buffer,Length) \
02595
WRITE_PORT_BUFFER_ULONG((PULONG)(Port),(PULONG)(Buffer),(Length))
02596
#else
02597 #define NdisRawWritePortBufferUlong(Port,Buffer,Length) \
02598
{ \
02599
ULONG_PTR _Port = (ULONG_PTR)(Port); \
02600
PULONG _Current = (Buffer); \
02601
PULONG _End = _Current + (Length); \
02602
for ( ; _Current < _End; ++_Current) \
02603
{ \
02604
WRITE_PORT_ULONG((PULONG)_Port,*(UNALIGNED ULONG *)_Current); \
02605
} \
02606
}
02607
#endif
02608
02609
02610
02611
02612
02613
02614
02615
02616
02617
02618
02619
02620
02621 #define NdisRawReadPortUchar(Port, Data) \
02622
*(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
02623
02624
02625
02626
02627
02628
02629
02630
02631 #define NdisRawReadPortUshort(Port,Data) \
02632
*(Data) = READ_PORT_USHORT((PUSHORT)(Port))
02633
02634
02635
02636
02637
02638
02639
02640
02641 #define NdisRawReadPortUlong(Port,Data) \
02642
*(Data) = READ_PORT_ULONG((PULONG)(Port))
02643
02644
02645
02646
02647
02648
02649
02650
02651
02652
02653
02654
02655
02656
02657 #define NdisRawReadPortBufferUchar(Port,Buffer,Length) \
02658
READ_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length))
02659
02660
02661
02662
02663
02664
02665
02666
02667
02668
02669
#if defined(_M_IX86)
02670
#define NdisRawReadPortBufferUshort(Port,Buffer,Length) \
02671
READ_PORT_BUFFER_USHORT((PUSHORT)(Port),(PUSHORT)(Buffer),(Length))
02672
#else
02673 #define NdisRawReadPortBufferUshort(Port,Buffer,Length) \
02674
{ \
02675
ULONG_PTR _Port = (ULONG_PTR)(Port); \
02676
PUSHORT _Current = (Buffer); \
02677
PUSHORT _End = _Current + (Length); \
02678
for ( ; _Current < _End; ++_Current) \
02679
{ \
02680
*(UNALIGNED USHORT *)_Current = READ_PORT_USHORT((PUSHORT)_Port); \
02681
} \
02682
}
02683
#endif
02684
02685
02686
02687
02688
02689
02690
02691
02692
02693
02694
#if defined(_M_IX86)
02695
#define NdisRawReadPortBufferUlong(Port,Buffer,Length) \
02696
READ_PORT_BUFFER_ULONG((PULONG)(Port),(PULONG)(Buffer),(Length))
02697
#else
02698 #define NdisRawReadPortBufferUlong(Port,Buffer,Length) \
02699
{ \
02700
ULONG_PTR _Port = (ULONG_PTR)(Port); \
02701
PULONG _Current = (Buffer); \
02702
PULONG _End = _Current + (Length); \
02703
for ( ; _Current < _End; ++_Current) \
02704
{ \
02705
*(UNALIGNED ULONG *)_Current = READ_PORT_ULONG((PULONG)_Port); \
02706
} \
02707
}
02708
#endif
02709
02710
02711
02712
02713
02714
02715
02716
02717
02718
02719
02720
02721
02722
02723
#if defined(_M_IX86)
02724
#define NdisWriteRegisterUchar(Register,Data) \
02725
WRITE_REGISTER_UCHAR((Register),(Data))
02726
#else
02727 #define NdisWriteRegisterUchar(Register,Data) \
02728
{ \
02729
WRITE_REGISTER_UCHAR((Register),(Data)); \
02730
READ_REGISTER_UCHAR(Register); \
02731
}
02732
#endif
02733
02734
02735
02736
02737
02738
02739
02740
02741
02742
#if defined(_M_IX86)
02743
#define NdisWriteRegisterUshort(Register,Data) \
02744
WRITE_REGISTER_USHORT((Register),(Data))
02745
#else
02746 #define NdisWriteRegisterUshort(Register,Data) \
02747
{ \
02748
WRITE_REGISTER_USHORT((Register),(Data)); \
02749
READ_REGISTER_USHORT(Register); \
02750
}
02751
#endif
02752
02753
02754
02755
02756
02757
02758
02759
02760
02761
#if defined(_M_IX86)
02762
#define NdisWriteRegisterUlong(Register,Data) WRITE_REGISTER_ULONG((Register),(Data))
02763
#else
02764 #define NdisWriteRegisterUlong(Register,Data) \
02765
{ \
02766
WRITE_REGISTER_ULONG((Register),(Data)); \
02767
READ_REGISTER_ULONG(Register); \
02768
}
02769
#endif
02770
02771
02772
02773
02774
02775
02776
02777
02778
02779
02780
#if defined(_M_IX86)
02781
#define NdisWriteRegisterUcharWithStall(Register, Data, StallTime) \
02782
WRITE_REGISTER_UCHAR((Register),(Data))
02783
#else
02784 #define NdisWriteRegisterUcharWithStall(Register, Data, StallTime) \
02785
{ \
02786
WRITE_REGISTER_UCHAR((Register),(Data)); \
02787
NdisStallExecution(StallTime); \
02788
READ_REGISTER_UCHAR(Register); \
02789
}
02790
#endif
02791
02792
02793
02794
02795
02796
02797
02798
02799
02800
02801
#if defined(_M_IX86)
02802
#define NdisWriteRegisterUshortWithStall(Register, Data, StallTime) \
02803
WRITE_REGISTER_USHORT((Register),(Data))
02804
#else
02805 #define NdisWriteRegisterUshortWithStall(Register, Data, StallTime) \
02806
{ \
02807
WRITE_REGISTER_USHORT((Register),(Data)); \
02808
NdisStallExecution(StallTime); \
02809
READ_REGISTER_USHORT(Register); \
02810
}
02811
#endif
02812
02813
02814
02815
02816
02817
02818
02819
02820
02821
02822
#if defined(_M_IX86)
02823
#define NdisWriteRegisterUlongWithStall(Register,Data, StallTime) \
02824
WRITE_REGISTER_ULONG((Register),(Data))
02825
#else
02826 #define NdisWriteRegisterUlongWithStall(Register,Data, StallTime) \
02827
{ \
02828
WRITE_REGISTER_ULONG((Register),(Data)); \
02829
NdisStallExecution(StallTime); \
02830
READ_REGISTER_ULONG(Register); \
02831
}
02832
#endif
02833
02834
02835
02836
02837
02838
02839
02840
02841
#if defined(_M_IX86)
02842
#define NdisReadRegisterUchar(Register,Data) *((PUCHAR)(Data)) = *(Register)
02843
#else
02844 #define NdisReadRegisterUchar(Register,Data) *(Data) = READ_REGISTER_UCHAR((PUCHAR)(Register))
02845
#endif
02846
02847
02848
02849
02850
02851
02852
02853
02854
#if defined(_M_IX86)
02855
#define NdisReadRegisterUshort(Register,Data) *((PUSHORT)(Data)) = *(Register)
02856
#else
02857 #define NdisReadRegisterUshort(Register,Data) *(Data) = READ_REGISTER_USHORT((PUSHORT)(Register))
02858
#endif
02859
02860
02861
02862
02863
02864
02865
02866
02867
#if defined(_M_IX86)
02868
#define NdisReadRegisterUlong(Register,Data) *((PULONG)(Data)) = *(Register)
02869
#else
02870 #define NdisReadRegisterUlong(Register,Data) *(Data) = READ_REGISTER_ULONG((PULONG)(Register))
02871
#endif
02872
02873 #define NdisEqualAnsiString(_String1,_String2, _CaseInsensitive) \
02874
RtlEqualAnsiString(_String1, _String2, _CaseInsensitive)
02875
02876 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
02877
RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
02878
02879 #define NdisEqualUnicodeString(_String1, _String2, _CaseInsensitive) \
02880
RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
02881
02882
EXPORT
02883
VOID
02884
NdisWriteErrorLogEntry(
02885 IN NDIS_HANDLE NdisAdapterHandle,
02886 IN NDIS_ERROR_CODE ErrorCode,
02887 IN ULONG NumberOfErrorValues,
02888 ...
02889 );
02890
02891
EXPORT
02892
VOID
02893
NdisInitializeString(
02894 OUT PNDIS_STRING Destination,
02895 IN PUCHAR Source
02896 );
02897
02898 #define NdisFreeString(String) NdisFreeMemory((String).Buffer, (String).MaximumLength, 0)
02899
02900 #define NdisPrintString(String) DbgPrint("%ls",(String).Buffer)
02901
02902
02903
#if !defined(_ALPHA_)
02904
02905
02906
02907
02908
02909
02910
02911
02912
02913
02914
02915 #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) ((*(_B)) = (_S))
02916
02917
02918
02919
02920
02921
02922
02923
02924
02925
02926 #define NdisDestroyLookaheadBufferFromSharedMemory(_B)
02927
02928
#else // Alpha
02929
02930
EXPORT
02931
VOID
02932
NdisCreateLookaheadBufferFromSharedMemory(
02933 IN PVOID pSharedMemory,
02934 IN UINT LookaheadLength,
02935 OUT PVOID * pLookaheadBuffer
02936 );
02937
02938
EXPORT
02939
VOID
02940
NdisDestroyLookaheadBufferFromSharedMemory(
02941 IN PVOID pLookaheadBuffer
02942 );
02943
02944
#endif
02945
02946
02947
02948
02949
02950
02951
02952
02953
02954
02955
02956
02957 typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE, *
PNDIS_WRAPPER_HANDLE;
02958 typedef struct _NDIS_MAC_BLOCK NDIS_MAC_BLOCK, *
PNDIS_MAC_BLOCK;
02959 typedef struct _NDIS_ADAPTER_BLOCK NDIS_ADAPTER_BLOCK, *
PNDIS_ADAPTER_BLOCK;
02960 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *
PNDIS_PROTOCOL_BLOCK;
02961 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *
PNDIS_OPEN_BLOCK;
02962
02963
02964
02965
02966
02967
typedef
02968
VOID
02969 (*PNDIS_TIMER_FUNCTION) (
02970 IN PVOID SystemSpecific1,
02971 IN PVOID FunctionContext,
02972 IN PVOID SystemSpecific2,
02973 IN PVOID SystemSpecific3
02974 );
02975
02976 typedef struct _NDIS_TIMER
02977 {
02978 KTIMER Timer;
02979 KDPC Dpc;
02980 }
NDIS_TIMER, *
PNDIS_TIMER;
02981
02982
EXPORT
02983
VOID
02984
NdisSetTimer(
02985 IN PNDIS_TIMER Timer,
02986 IN UINT MillisecondsToDelay
02987 );
02988
02989
02990
02991
02992
02993
EXPORT
02994
VOID
02995
NdisAllocateDmaChannel(
02996 OUT PNDIS_STATUS Status,
02997 OUT PNDIS_HANDLE NdisDmaHandle,
02998 IN NDIS_HANDLE NdisAdapterHandle,
02999 IN PNDIS_DMA_DESCRIPTION DmaDescription,
03000 IN ULONG MaximumLength
03001 );
03002
03003
EXPORT
03004
VOID
03005
NdisFreeDmaChannel(
03006 IN NDIS_HANDLE NdisDmaHandle
03007 );
03008
03009
EXPORT
03010
VOID
03011
NdisSetupDmaTransfer(
03012 OUT PNDIS_STATUS Status,
03013 IN NDIS_HANDLE NdisDmaHandle,
03014 IN PNDIS_BUFFER Buffer,
03015 IN ULONG Offset,
03016 IN ULONG Length,
03017 IN BOOLEAN WriteToDevice
03018 );
03019
03020
EXPORT
03021
VOID
03022
NdisCompleteDmaTransfer(
03023 OUT PNDIS_STATUS Status,
03024 IN NDIS_HANDLE NdisDmaHandle,
03025 IN PNDIS_BUFFER Buffer,
03026 IN ULONG Offset,
03027 IN ULONG Length,
03028 IN BOOLEAN WriteToDevice
03029 );
03030
03031
03032
03033
03034
03035
03036
03037
03038 #define NdisReadDmaCounter(_NdisDmaHandle) \
03039
HalReadDmaCounter(((PNDIS_DMA_BLOCK)(_NdisDmaHandle))->SystemAdapterObject)
03040
03041
03042
03043
03044
03045
EXPORT
03046
VOID
03047
NdisInitializeWrapper(
03048 OUT PNDIS_HANDLE NdisWrapperHandle,
03049 IN PVOID SystemSpecific1,
03050 IN PVOID SystemSpecific2,
03051 IN PVOID SystemSpecific3
03052 );
03053
03054
EXPORT
03055
VOID
03056
NdisTerminateWrapper(
03057 IN NDIS_HANDLE NdisWrapperHandle,
03058 IN PVOID SystemSpecific
03059 );
03060
03061
03062
03063
03064
03065 #define NdisUpdateSharedMemory(_H, _L, _V, _P)
03066
03067
03068
03069
03070
03071
EXPORT
03072 CCHAR
03073
NdisSystemProcessorCount(
03074 VOID
03075 );
03076
03077
EXPORT
03078
VOID
03079
NdisImmediateReadPortUchar(
03080 IN NDIS_HANDLE WrapperConfigurationContext,
03081 IN ULONG Port,
03082 OUT PUCHAR Data
03083 );
03084
03085
EXPORT
03086
VOID
03087
NdisImmediateReadPortUshort(
03088 IN NDIS_HANDLE WrapperConfigurationContext,
03089 IN ULONG Port,
03090 OUT PUSHORT Data
03091 );
03092
03093
EXPORT
03094
VOID
03095
NdisImmediateReadPortUlong(
03096 IN NDIS_HANDLE WrapperConfigurationContext,
03097 IN ULONG Port,
03098 OUT PULONG Data
03099 );
03100
03101
EXPORT
03102
VOID
03103
NdisImmediateWritePortUchar(
03104 IN NDIS_HANDLE WrapperConfigurationContext,
03105 IN ULONG Port,
03106 IN UCHAR Data
03107 );
03108
03109
EXPORT
03110
VOID
03111
NdisImmediateWritePortUshort(
03112 IN NDIS_HANDLE WrapperConfigurationContext,
03113 IN ULONG Port,
03114 IN USHORT Data
03115 );
03116
03117
EXPORT
03118
VOID
03119
NdisImmediateWritePortUlong(
03120 IN NDIS_HANDLE WrapperConfigurationContext,
03121 IN ULONG Port,
03122 IN ULONG Data
03123 );
03124
03125
EXPORT
03126
VOID
03127
NdisImmediateReadSharedMemory(
03128 IN NDIS_HANDLE WrapperConfigurationContext,
03129 IN ULONG SharedMemoryAddress,
03130 IN PUCHAR Buffer,
03131 IN ULONG Length
03132 );
03133
03134
EXPORT
03135
VOID
03136
NdisImmediateWriteSharedMemory(
03137 IN NDIS_HANDLE WrapperConfigurationContext,
03138 IN ULONG SharedMemoryAddress,
03139 IN PUCHAR Buffer,
03140 IN ULONG Length
03141 );
03142
03143
EXPORT
03144 ULONG
03145
NdisImmediateReadPciSlotInformation(
03146 IN NDIS_HANDLE WrapperConfigurationContext,
03147 IN ULONG SlotNumber,
03148 IN ULONG Offset,
03149 IN PVOID Buffer,
03150 IN ULONG Length
03151 );
03152
03153
EXPORT
03154 ULONG
03155
NdisImmediateWritePciSlotInformation(
03156 IN NDIS_HANDLE WrapperConfigurationContext,
03157 IN ULONG SlotNumber,
03158 IN ULONG Offset,
03159 IN PVOID Buffer,
03160 IN ULONG Length
03161 );
03162
03163
03164
03165
03166
03167
#if BINARY_COMPATIBLE
03168
03169
EXPORT
03170
VOID
03171
NdisInitAnsiString(
03172 IN OUT PANSI_STRING DestinationString,
03173 IN PCSTR SourceString
03174 );
03175
03176
EXPORT
03177
VOID
03178
NdisInitUnicodeString(
03179 IN OUT PUNICODE_STRING DestinationString,
03180 IN PCWSTR SourceString
03181 );
03182
03183
EXPORT
03184
NDIS_STATUS
03185
NdisAnsiStringToUnicodeString(
03186 IN OUT PUNICODE_STRING DestinationString,
03187 IN PANSI_STRING SourceString
03188 );
03189
03190
EXPORT
03191
NDIS_STATUS
03192
NdisUnicodeStringToAnsiString(
03193 IN OUT PANSI_STRING DestinationString,
03194 IN PUNICODE_STRING SourceString
03195 );
03196
03197
EXPORT
03198
NDIS_STATUS
03199
NdisUpcaseUnicodeString(
03200 OUT PUNICODE_STRING DestinationString,
03201 IN PUNICODE_STRING SourceString
03202 );
03203
03204
#else // BINARY_COMPATIBLE
03205
03206 #define NdisInitAnsiString(_as, s) RtlInitString(_as, s)
03207 #define NdisInitUnicodeString(_us, s) RtlInitUnicodeString(_us, s)
03208 #define NdisAnsiStringToUnicodeString(_us, _as) RtlAnsiStringToUnicodeString(_us, _as, FALSE)
03209 #define NdisUnicodeStringToAnsiString(_as, _us) RtlUnicodeStringToAnsiString(_as, _us, FALSE)
03210 #define NdisUpcaseUnicodeString(_d, _s) RtlUpcaseUnicodeString(_d, _s, FALSE)
03211
03212
#endif // BINARY_COMPATIBLE
03213
03214
03215
03216
03217
03218 #define NdisInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D) \
03219
ExInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D)
03220
03221 #define NdisDeleteNPagedLookasideList(_L) ExDeleteNPagedLookasideList(_L)
03222 #define NdisAllocateFromNPagedLookasideList(_L) ExAllocateFromNPagedLookasideList(_L)
03223 #define NdisFreeToNPagedLookasideList(_L, _E) ExFreeToNPagedLookasideList(_L, _E)
03224
03225
03226
#if defined(NDIS_WRAPPER)
03227
typedef struct _OID_LIST OID_LIST, *POID_LIST;
03228
#endif // NDIS_WRAPPER defined
03229
03230
03231
03232
03233