Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

ndismain.h

Go to the documentation of this file.
00001 // 00002 // Indicate that we're building for NT. NDIS_NT is always used for 00003 // miniport builds. 00004 // 00005 00006 #define NDIS_NT 1 00007 00008 #if defined(NDIS_DOS) 00009 #undef NDIS_DOS 00010 #endif 00011 00012 00013 // 00014 // Define status codes and event log codes. 00015 // 00016 00017 #include <ntstatus.h> 00018 #include <netevent.h> 00019 00020 // 00021 // Define a couple of extra types. 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 // Portability extentions 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 // This file contains the definition of an NDIS_OID as 00042 // well as #defines for all the current OID values. 00043 // 00044 00045 // 00046 // Define NDIS_STATUS and NDIS_HANDLE here 00047 // 00048 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE; 00049 00050 typedef int NDIS_STATUS, *PNDIS_STATUS; // note default size 00051 00052 #include <ntddndis.h> 00053 00054 // 00055 // Ndis defines for configuration manager data structures 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 // Define an exported function. 00063 // 00064 #if defined(NDIS_WRAPPER) 00065 #define EXPORT 00066 #else 00067 #define EXPORT DECLSPEC_IMPORT 00068 #endif 00069 00070 // 00071 // Memory manipulation functions. 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 // On a RISC machine, I/O mapped memory can't be accessed with 00084 // the Rtl routines. 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 // On Mips and Intel systems, these are the same. On Alpha, they are different. 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 // definition of the basic spin lock structure 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 // definition of the ndis event structure 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 // Definition of an ndis work-item 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 // Configuration definitions 00199 // 00200 00201 // 00202 // Possible data types 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 // To store configuration information 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 // Definitions for the "ProcessorType" keyword 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 // Definitions for the "Environment" keyword 00248 // 00249 typedef enum _NDIS_ENVIRONMENT_TYPE 00250 { 00251 NdisEnvironmentWindows, 00252 NdisEnvironmentWindowsNt 00253 } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE; 00254 00255 00256 // 00257 // Possible Hardware Architecture. Define these to 00258 // match the HAL INTERFACE_TYPE enum. 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 // Definition for shutdown handler 00273 // 00274 00275 typedef 00276 VOID 00277 (*ADAPTER_SHUTDOWN_HANDLER) ( 00278 IN PVOID ShutdownContext 00279 ); 00280 00281 // 00282 // Stuff for PCI configuring 00283 // 00284 00285 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST; 00286 00287 00288 // 00289 // The structure passed up on a WAN_LINE_UP indication 00290 // 00291 00292 typedef struct _NDIS_WAN_LINE_UP 00293 { 00294 IN ULONG LinkSpeed; // 100 bps units 00295 IN ULONG MaximumTotalSize; // suggested max for send packets 00296 IN NDIS_WAN_QUALITY Quality; 00297 IN USHORT SendWindow; // suggested by the MAC 00298 IN UCHAR RemoteAddress[6]; 00299 IN OUT UCHAR LocalAddress[6]; 00300 IN ULONG ProtocolBufferLength; // Length of protocol info buffer 00301 IN PUCHAR ProtocolBuffer; // Information used by protocol 00302 IN USHORT ProtocolType; // Protocol ID 00303 IN OUT NDIS_STRING DeviceName; 00304 } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP; 00305 00306 // 00307 // The structure passed up on a WAN_LINE_DOWN indication 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 // The structure passed up on a WAN_FRAGMENT indication 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 // The structure passed up on a WAN_GET_STATS indication 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; // Serial-like info only 00338 OUT ULONG TimeoutErrors; // Serial-like info only 00339 OUT ULONG AlignmentErrors; // Serial-like info only 00340 OUT ULONG SerialOverrunErrors; // Serial-like info only 00341 OUT ULONG FramingErrors; // Serial-like info only 00342 OUT ULONG BufferOverrunErrors; // Serial-like info only 00343 OUT ULONG BytesTransmittedUncompressed; // Compression info only 00344 OUT ULONG BytesReceivedUncompressed; // Compression info only 00345 OUT ULONG BytesTransmittedCompressed; // Compression info only 00346 OUT ULONG BytesReceivedCompressed; // Compression info only 00347 } NDIS_WAN_GET_STATS, *PNDIS_WAN_GET_STATS; 00348 00349 00350 // 00351 // DMA Channel information 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 // Internal structure representing an NDIS DMA channel 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 // definitions for PnP state 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 // flags to use in PnPCapabilities Flag 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 // Ndis Buffer is actually an Mdl 00414 // 00415 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER; 00416 00417 struct _NDIS_PACKET; 00418 typedef NDIS_HANDLE PNDIS_PACKET_POOL; 00419 00420 // 00421 // 00422 // wrapper-specific part of a packet 00423 // 00424 00425 typedef struct _NDIS_PACKET_PRIVATE 00426 { 00427 UINT PhysicalCount; // number of physical pages in packet. 00428 UINT TotalLength; // Total amount of data in the packet. 00429 PNDIS_BUFFER Head; // first buffer in the chain 00430 PNDIS_BUFFER Tail; // last buffer in the chain 00431 00432 // if Head is NULL the chain is empty; Tail doesn't have to be NULL also 00433 00434 PNDIS_PACKET_POOL Pool; // so we know where to free it back to 00435 UINT Count; 00436 ULONG Flags; 00437 BOOLEAN ValidCounts; 00438 UCHAR NdisPacketFlags; // See fPACKET_xxx bits below 00439 USHORT NdisPacketOobOffset; 00440 } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE; 00441 00442 // 00443 // The bits define the bits in the NDIS flags 00444 // 00445 #define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000F // The low 4 bits are defined for protocol-id 00446 // The values are defined in ntddndis.h 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 // Low-bits in the NdisPacketFlags are reserved by NDIS Wrapper for internal use 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 // Definition for layout of the media-specific data. More than one class of media-specific 00464 // information can be tagged onto a packet. 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 // packet definition 00569 // 00570 typedef struct _NDIS_PACKET 00571 { 00572 NDIS_PACKET_PRIVATE Private; 00573 00574 union 00575 { 00576 struct // For Connection-less miniports 00577 { 00578 UCHAR MiniportReserved[2*sizeof(PVOID)]; 00579 UCHAR WrapperReserved[2*sizeof(PVOID)]; 00580 }; 00581 00582 struct 00583 { 00584 // 00585 // For de-serialized miniports. And by implication conn-oriented miniports. 00586 // This is for the send-path only. Packets indicated will use WrapperReserved 00587 // instead of WrapperReservedEx 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]; // For compatibility with Win95 00600 UCHAR ProtocolReserved[1]; 00601 00602 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET; 00603 00604 // 00605 // NDIS per-packet information. 00606 // 00607 typedef enum _NDIS_PER_PACKET_INFO 00608 { 00609 TcpIpChecksumPacketInfo, 00610 IpSecPacketInfo, 00611 TcpLargeSendPacketInfo, 00612 ClassificationHandlePacketInfo, 00613 HeaderIndexInfo, // Internal NDIS use only 00614 ScatterGatherListPacketInfo, 00615 Ieee8021pPriority, 00616 OriginalPacketInfo, 00617 NdisInternalExtension1, // Internal NDIS use only 00618 NdisInternalExtension2, // Internal NDIS use only 00619 #if PKT_DBG 00620 NdisInternalPktDebug, // Internal NDIS use only 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 // Per-packet information for TcpIpChecksumPacketInfo. 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 // NDIS Task Off-Load data structures. 00705 00706 #define NDIS_TASK_OFFLOAD_VERSION 1 00707 00708 // 00709 // The following defines are used in the Task field above to define 00710 // the type of task offloading necessary. 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 // Encapsulation header format 00733 // 00734 typedef struct _NDIS_ENCAPSULATION_FORMAT 00735 { 00736 NDIS_ENCAPSULATION Encapsulation; // Encapsulation type 00737 struct 00738 { 00739 ULONG FixedHeaderSize:1; 00740 ULONG Reserved:31; 00741 } Flags; 00742 00743 ULONG EncapsulationHeaderSize; // Encapsulation header size 00744 00745 } NDIS_ENCAPSULATION_FORMAT,*PNDIS_ENCAPSULATION_FORMAT; 00746 00747 00748 // 00749 // OFFLOAD header structure for OID_TCP_TASK_OFFLOAD 00750 // 00751 typedef struct _NDIS_TASK_OFFLOAD_HEADER 00752 { 00753 ULONG Version; // set to NDIS_TASK_OFFLOAD_VERSION 00754 ULONG Size; // Size of this structure 00755 ULONG Reserved; // Reserved for future use 00756 ULONG OffsetFirstTask; // Offset to the first 00757 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat; // Encapsulation information. 00758 // NDIS_TASK_OFFLOAD structure(s) 00759 00760 } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER; 00761 00762 00763 // 00764 // Task offload Structure, which follows the above header in ndis query 00765 // 00766 typedef struct _NDIS_TASK_OFFLOAD 00767 { 00768 ULONG Version; // NDIS_TASK_OFFLOAD_VERSION 00769 ULONG Size; // Size of this structure. Used for version checking. 00770 NDIS_TASK Task; // Task. 00771 ULONG OffsetNextTask; // Offset to the next NDIS_TASK_OFFLOAD 00772 ULONG TaskBufferLength; // Length of the task offload information. 00773 UCHAR TaskBuffer[1]; // The task offload information. 00774 } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD; 00775 00776 // 00777 // Offload structure for NDIS_TASK_TCP_IP_CHECKSUM 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 // Off-load structure for NDIS_TASK_TCP_LARGE_SEND 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 // WAN Packet. This is used by WAN miniports only. This is the legacy model. 00873 // Co-Ndis is the preferred model for WAN miniports 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 // Routines to get/set packet flags 00894 // 00895 00896 /*++ 00897 00898 UINT 00899 NdisGetPacketFlags( 00900 IN PNDIS_PACKET Packet 00901 ); 00902 00903 --*/ 00904 00905 #define NdisGetPacketFlags(_Packet) (_Packet)->Private.Flags 00906 00907 /*++ 00908 00909 VOID 00910 NdisSetPacketFlags( 00911 IN PNDIS_PACKET Packet, 00912 IN UINT Flags 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 // Request types used by NdisRequest; constants are added for 00922 // all entry points in the MAC, for those that want to create 00923 // their own internal requests. 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 // Structure of requests sent via NdisRequest 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 // NDIS Address Family definitions. 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 // The following is OR'ed with the base AF to denote proxy support 00999 // 01000 #define CO_ADDRESS_FAMILY_PROXY 0x80000000 01001 01002 01003 // 01004 // Address family structure registered/opened via 01005 // NdisCmRegisterAddressFamily 01006 // NdisClOpenAddressFamily 01007 // 01008 typedef struct 01009 { 01010 NDIS_AF AddressFamily; // one of the CO_ADDRESS_FAMILY_xxx values above 01011 ULONG MajorVersion; // the major version of call manager 01012 ULONG MinorVersion; // the minor version of call manager 01013 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY; 01014 01015 // 01016 // Definition for a SAP 01017 // 01018 typedef struct 01019 { 01020 ULONG SapType; 01021 ULONG SapLength; 01022 UCHAR Sap[1]; 01023 } CO_SAP, *PCO_SAP; 01024 01025 // 01026 // Definitions for physical address. 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 ULONG 01040 NdisGetPhysicalAddressHigh( 01041 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress 01042 ); 01043 01044 --*/ 01045 01046 #define NdisGetPhysicalAddressHigh(_PhysicalAddress) \ 01047 ((_PhysicalAddress).HighPart) 01048 01049 /*++ 01050 01051 VOID 01052 NdisSetPhysicalAddressHigh( 01053 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, 01054 IN ULONG Value 01055 ); 01056 01057 --*/ 01058 01059 #define NdisSetPhysicalAddressHigh(_PhysicalAddress, _Value) \ 01060 ((_PhysicalAddress).HighPart) = (_Value) 01061 01062 01063 /*++ 01064 01065 ULONG 01066 NdisGetPhysicalAddressLow( 01067 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress 01068 ); 01069 01070 --*/ 01071 01072 #define NdisGetPhysicalAddressLow(_PhysicalAddress) \ 01073 ((_PhysicalAddress).LowPart) 01074 01075 01076 /*++ 01077 01078 VOID 01079 NdisSetPhysicalAddressLow( 01080 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, 01081 IN ULONG Value 01082 ); 01083 01084 --*/ 01085 01086 #define NdisSetPhysicalAddressLow(_PhysicalAddress, _Value) \ 01087 ((_PhysicalAddress).LowPart) = (_Value) 01088 01089 // 01090 // Macro to initialize an NDIS_PHYSICAL_ADDRESS constant 01091 // 01092 01093 #define NDIS_PHYSICAL_ADDRESS_CONST(_Low, _High) \ 01094 { (ULONG)(_Low), (LONG)(_High) } 01095 01096 01097 // 01098 // block used for references... 01099 // 01100 typedef struct _REFERENCE 01101 { 01102 KSPIN_LOCK SpinLock; 01103 USHORT ReferenceCount; 01104 BOOLEAN Closing; 01105 } REFERENCE, * PREFERENCE; 01106 01107 01108 // 01109 // This holds a map register entry. 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 // Types of Memory (not mutually exclusive) 01120 // 01121 01122 #define NDIS_MEMORY_CONTIGUOUS 0x00000001 01123 #define NDIS_MEMORY_NONCACHED 0x00000002 01124 01125 // 01126 // Open options 01127 // 01128 #define NDIS_OPEN_RECEIVE_NOT_REENTRANT 0x00000001 01129 01130 // 01131 // NDIS_STATUS values 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 // used in error logging 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 // Ndis Spin Locks 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 // Interlocked support functions 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 // Interlocked support functions 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]; // One refCount per cache line 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, // TRUE -> Write, FALSE -> Read 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 // S-List support 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 // List manipulation 01516 // 01517 01518 /*++ 01519 01520 VOID 01521 NdisInitializeListHead( 01522 IN PLIST_ENTRY ListHead 01523 ); 01524 01525 --*/ 01526 #define NdisInitializeListHead(_ListHead) InitializeListHead(_ListHead) 01527 01528 01529 // 01530 // Configuration Requests 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 // Buffer Pool 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 // VOID 01712 // NdisCopyLookaheadData( 01713 // IN PVOID Destination, 01714 // IN PVOID Source, 01715 // IN ULONG Length, 01716 // IN ULONG ReceiveFlags 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 // Packet Pool 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 // VOID 01828 // NdisReinitializePacket( 01829 // IN OUT PNDIS_PACKET Packet 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 // This is a combination of NdisQueryPacket and NdisQueryBuffer and 01873 // optimized for protocols to get the first Buffer, its VA and its size. 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 // This is used to determine how many physical pieces 01886 // an NDIS_BUFFER will take up when mapped. 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 NDIS_BUFFER_LINKAGE( 01971 IN PNDIS_BUFFER Buffer 01972 ); 01973 01974 --*/ 01975 01976 #define NDIS_BUFFER_LINKAGE(Buffer) ((Buffer)->Next) 01977 01978 01979 /*++ 01980 01981 VOID 01982 NdisRecalculatePacketCounts( 01983 IN OUT PNDIS_PACKET Packet 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 VOID 02008 NdisChainBufferAtFront( 02009 IN OUT PNDIS_PACKET Packet, 02010 IN OUT PNDIS_BUFFER Buffer 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 VOID 02037 NdisChainBufferAtBack( 02038 IN OUT PNDIS_PACKET Packet, 02039 IN OUT PNDIS_BUFFER Buffer 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 VOID 02085 NdisQueryPacket( 02086 IN PNDIS_PACKET _Packet, 02087 OUT PUINT _PhysicalBufferCount OPTIONAL, 02088 OUT PUINT _BufferCount OPTIONAL, 02089 OUT PNDIS_BUFFER * _FirstBuffer OPTIONAL, 02090 OUT PUINT _TotalPacketLength OPTIONAL 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 VOID 02150 NdisGetNextBuffer( 02151 IN PNDIS_BUFFER CurrentBuffer, 02152 OUT PNDIS_BUFFER * NextBuffer 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 VOID 02220 NdisStallExecution( 02221 IN UINT MicrosecondsToStall 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 VOID 02255 NdisInitializeWorkItem( 02256 IN PNDIS_WORK_ITEM WorkItem, 02257 IN NDIS_PROC Routine, 02258 IN PVOID Context 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 // Simple I/O support 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 // Portability extensions 02318 // 02319 02320 /*++ 02321 VOID 02322 NdisFlushBuffer( 02323 IN PNDIS_BUFFER Buffer, 02324 IN BOOLEAN WriteToDevice 02325 ) 02326 --*/ 02327 02328 #define NdisFlushBuffer(Buffer,WriteToDevice) \ 02329 KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE) 02330 02331 /*++ 02332 ULONG 02333 NdisGetCacheFillSize( 02334 ) 02335 --*/ 02336 #define NdisGetCacheFillSize() HalGetDmaAlignmentRequirement() 02337 02338 // 02339 // This macro is used to convert a port number as the caller 02340 // thinks of it, to a port number as it should be passed to 02341 // READ/WRITE_PORT. 02342 // 02343 02344 #define NDIS_PORT_TO_PORT(Handle,Port) (((PNDIS_ADAPTER_BLOCK)(Handle))->PortOffset + (Port)) 02345 02346 02347 // 02348 // Write Port 02349 // 02350 02351 /*++ 02352 VOID 02353 NdisWritePortUchar( 02354 IN NDIS_HANDLE NdisAdapterHandle, 02355 IN ULONG Port, 02356 IN UCHAR Data 02357 ) 02358 --*/ 02359 #define NdisWritePortUchar(Handle,Port,Data) \ 02360 WRITE_PORT_UCHAR((PUCHAR)(NDIS_PORT_TO_PORT(Handle,Port)),(UCHAR)(Data)) 02361 02362 /*++ 02363 VOID 02364 NdisWritePortUshort( 02365 IN NDIS_HANDLE NdisAdapterHandle, 02366 IN ULONG Port, 02367 IN USHORT Data 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 VOID 02376 NdisWritePortUlong( 02377 IN NDIS_HANDLE NdisAdapterHandle, 02378 IN ULONG Port, 02379 IN ULONG Data 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 // Write Port Buffers 02388 // 02389 02390 /*++ 02391 VOID 02392 NdisWritePortBufferUchar( 02393 IN NDIS_HANDLE NdisAdapterHandle, 02394 IN ULONG Port, 02395 IN PUCHAR Buffer, 02396 IN ULONG Length 02397 ) 02398 --*/ 02399 #define NdisWritePortBufferUchar(Handle,Port,Buffer,Length) \ 02400 NdisRawWritePortBufferUchar(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length)) 02401 02402 /*++ 02403 VOID 02404 NdisWritePortBufferUshort( 02405 IN NDIS_HANDLE NdisAdapterHandle, 02406 IN ULONG Port, 02407 IN PUSHORT Buffer, 02408 IN ULONG Length 02409 ) 02410 --*/ 02411 #define NdisWritePortBufferUshort(Handle,Port,Buffer,Length) \ 02412 NdisRawWritePortBufferUshort(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length)) 02413 02414 02415 /*++ 02416 VOID 02417 NdisWritePortBufferUlong( 02418 IN NDIS_HANDLE NdisAdapterHandle, 02419 IN ULONG Port, 02420 IN PULONG Buffer, 02421 IN ULONG Length 02422 ) 02423 --*/ 02424 #define NdisWritePortBufferUlong(Handle,Port,Buffer,Length) \ 02425 NdisRawWritePortBufferUlong(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length)) 02426 02427 02428 // 02429 // Read Ports 02430 // 02431 02432 /*++ 02433 VOID 02434 NdisReadPortUchar( 02435 IN NDIS_HANDLE NdisAdapterHandle, 02436 IN ULONG Port, 02437 OUT PUCHAR Data 02438 ) 02439 --*/ 02440 #define NdisReadPortUchar(Handle,Port, Data) \ 02441 NdisRawReadPortUchar(NDIS_PORT_TO_PORT((Handle),(Port)),(Data)) 02442 02443 /*++ 02444 VOID 02445 NdisReadPortUshort( 02446 IN NDIS_HANDLE NdisAdapterHandle, 02447 IN ULONG Port, 02448 OUT PUSHORT Data 02449 ) 02450 --*/ 02451 #define NdisReadPortUshort(Handle,Port,Data) \ 02452 NdisRawReadPortUshort(NDIS_PORT_TO_PORT((Handle),(Port)),(Data)) 02453 02454 02455 /*++ 02456 VOID 02457 NdisReadPortUlong( 02458 IN NDIS_HANDLE NdisAdapterHandle, 02459 IN ULONG Port, 02460 OUT PULONG Data 02461 ) 02462 --*/ 02463 #define NdisReadPortUlong(Handle,Port,Data) \ 02464 NdisRawReadPortUlong(NDIS_PORT_TO_PORT((Handle),(Port)),(Data)) 02465 02466 // 02467 // Read Buffer Ports 02468 // 02469 02470 /*++ 02471 VOID 02472 NdisReadPortBufferUchar( 02473 IN NDIS_HANDLE NdisAdapterHandle, 02474 IN ULONG Port, 02475 OUT PUCHAR Buffer, 02476 IN ULONG Length 02477 ) 02478 --*/ 02479 #define NdisReadPortBufferUchar(Handle,Port,Buffer,Length) \ 02480 NdisRawReadPortBufferUchar(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length)) 02481 02482 /*++ 02483 VOID 02484 NdisReadPortBufferUshort( 02485 IN NDIS_HANDLE NdisAdapterHandle, 02486 IN ULONG Port, 02487 OUT PUSHORT Buffer, 02488 IN ULONG Length 02489 ) 02490 --*/ 02491 #define NdisReadPortBufferUshort(Handle,Port,Buffer,Length) \ 02492 NdisRawReadPortBufferUshort(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length)) 02493 02494 /*++ 02495 VOID 02496 NdisReadPortBufferUlong( 02497 IN NDIS_HANDLE NdisAdapterHandle, 02498 IN ULONG Port, 02499 OUT PULONG Buffer, 02500 IN ULONG Length 02501 ) 02502 --*/ 02503 #define NdisReadPortBufferUlong(Handle,Port,Buffer) \ 02504 NdisRawReadPortBufferUlong(NDIS_PORT_TO_PORT((Handle),(Port)),(Buffer),(Length)) 02505 02506 // 02507 // Raw Routines 02508 // 02509 02510 // 02511 // Write Port Raw 02512 // 02513 02514 /*++ 02515 VOID 02516 NdisRawWritePortUchar( 02517 IN ULONG_PTR Port, 02518 IN UCHAR Data 02519 ) 02520 --*/ 02521 #define NdisRawWritePortUchar(Port,Data) \ 02522 WRITE_PORT_UCHAR((PUCHAR)(Port),(UCHAR)(Data)) 02523 02524 /*++ 02525 VOID 02526 NdisRawWritePortUshort( 02527 IN ULONG_PTR Port, 02528 IN USHORT Data 02529 ) 02530 --*/ 02531 #define NdisRawWritePortUshort(Port,Data) \ 02532 WRITE_PORT_USHORT((PUSHORT)(Port),(USHORT)(Data)) 02533 02534 /*++ 02535 VOID 02536 NdisRawWritePortUlong( 02537 IN ULONG_PTR Port, 02538 IN ULONG Data 02539 ) 02540 --*/ 02541 #define NdisRawWritePortUlong(Port,Data) \ 02542 WRITE_PORT_ULONG((PULONG)(Port),(ULONG)(Data)) 02543 02544 02545 // 02546 // Raw Write Port Buffers 02547 // 02548 02549 /*++ 02550 VOID 02551 NdisRawWritePortBufferUchar( 02552 IN ULONG_PTR Port, 02553 IN PUCHAR Buffer, 02554 IN ULONG Length 02555 ) 02556 --*/ 02557 #define NdisRawWritePortBufferUchar(Port,Buffer,Length) \ 02558 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length)) 02559 02560 /*++ 02561 VOID 02562 NdisRawWritePortBufferUshort( 02563 IN ULONG_PTR Port, 02564 IN PUSHORT Buffer, 02565 IN ULONG Length 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 VOID 02587 NdisRawWritePortBufferUlong( 02588 IN ULONG_PTR Port, 02589 IN PULONG Buffer, 02590 IN ULONG Length 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 // Raw Read Ports 02612 // 02613 02614 /*++ 02615 VOID 02616 NdisRawReadPortUchar( 02617 IN ULONG_PTR Port, 02618 OUT PUCHAR Data 02619 ) 02620 --*/ 02621 #define NdisRawReadPortUchar(Port, Data) \ 02622 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port)) 02623 02624 /*++ 02625 VOID 02626 NdisRawReadPortUshort( 02627 IN ULONG_PTR Port, 02628 OUT PUSHORT Data 02629 ) 02630 --*/ 02631 #define NdisRawReadPortUshort(Port,Data) \ 02632 *(Data) = READ_PORT_USHORT((PUSHORT)(Port)) 02633 02634 /*++ 02635 VOID 02636 NdisRawReadPortUlong( 02637 IN ULONG_PTR Port, 02638 OUT PULONG Data 02639 ) 02640 --*/ 02641 #define NdisRawReadPortUlong(Port,Data) \ 02642 *(Data) = READ_PORT_ULONG((PULONG)(Port)) 02643 02644 02645 // 02646 // Raw Read Buffer Ports 02647 // 02648 02649 /*++ 02650 VOID 02651 NdisRawReadPortBufferUchar( 02652 IN ULONG_PTR Port, 02653 OUT PUCHAR Buffer, 02654 IN ULONG Length 02655 ) 02656 --*/ 02657 #define NdisRawReadPortBufferUchar(Port,Buffer,Length) \ 02658 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length)) 02659 02660 02661 /*++ 02662 VOID 02663 NdisRawReadPortBufferUshort( 02664 IN ULONG_PTR Port, 02665 OUT PUSHORT Buffer, 02666 IN ULONG Length 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 VOID 02688 NdisRawReadPortBufferUlong( 02689 IN ULONG_PTR Port, 02690 OUT PULONG Buffer, 02691 IN ULONG Length 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 // Write Registers 02713 // 02714 02715 /*++ 02716 VOID 02717 NdisWriteRegisterUchar( 02718 IN PUCHAR Register, 02719 IN UCHAR Data 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 VOID 02736 NdisWriteRegisterUshort( 02737 IN PUCHAR Register, 02738 IN USHORT Data 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 VOID 02755 NdisWriteRegisterUlong( 02756 IN PUCHAR Register, 02757 IN ULONG Data 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 VOID 02773 NdisWriteRegisterUcharWithStall( 02774 IN PUCHAR Register, 02775 IN UCHAR Data, 02776 IN UINT StallTimeInMicroSeconds 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 VOID 02794 NdisWriteRegisterUshortWithStall( 02795 IN PUCHAR Register, 02796 IN USHORT Data, 02797 IN UINT StallTimeInMicroSeconds 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 VOID 02815 NdisWriteRegisterUlongWithStall( 02816 IN PUCHAR Register, 02817 IN ULONG Data, 02818 IN UINT StallTimeInMicroSeconds 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 VOID 02836 NdisReadRegisterUchar( 02837 IN PUCHAR Register, 02838 OUT PUCHAR Data 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 VOID 02849 NdisReadRegisterUshort( 02850 IN PUSHORT Register, 02851 OUT PUSHORT Data 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 VOID 02862 NdisReadRegisterUlong( 02863 IN PULONG Register, 02864 OUT PULONG Data 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 VOID 02907 NdisCreateLookaheadBufferFromSharedMemory( 02908 IN PVOID pSharedMemory, 02909 IN UINT LookaheadLength, 02910 OUT PVOID * pLookaheadBuffer 02911 ); 02912 02913 --*/ 02914 02915 #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) ((*(_B)) = (_S)) 02916 02917 /*++ 02918 02919 VOID 02920 NdisDestroyLookaheadBufferFromSharedMemory( 02921 IN PVOID pLookaheadBuffer 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 // The following declarations are shared between ndismac.h and ndismini.h. They 02949 // are meant to be for internal use only. They should not be used directly by 02950 // miniport drivers. 02951 // 02952 02953 // 02954 // declare these first since they point to each other 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 // Timers. 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 // DMA operations. 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 ULONG 03033 NdisReadDmaCounter( 03034 IN NDIS_HANDLE NdisDmaHandle 03035 ) 03036 --*/ 03037 03038 #define NdisReadDmaCounter(_NdisDmaHandle) \ 03039 HalReadDmaCounter(((PNDIS_DMA_BLOCK)(_NdisDmaHandle))->SystemAdapterObject) 03040 03041 // 03042 // Wrapper initialization and termination. 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 // Shared memory 03063 // 03064 03065 #define NdisUpdateSharedMemory(_H, _L, _V, _P) 03066 03067 // 03068 // System processor count 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 // Ansi/Unicode support routines 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 // Non-paged lookaside list support routines 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

Generated on Sat May 15 19:40:54 2004 for test by doxygen 1.3.7