Annotation of ntddk/src/network/inc/ndis.h, revision 1.1

1.1     ! root        1: /*++ BUILD Version: 0002    // Increment this if a change has global effects
        !             2: 
        !             3: Copyright (c) 1992  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:   ndis.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     Main header file for the wrapper
        !            12: 
        !            13: Author:
        !            14: 
        !            15:     Adam Barr (adamba)    26-Jul-1990
        !            16:     Johnson R Apacible (JohnsonA)  10-Jul-1991
        !            17: 
        !            18: Revision History:
        !            19: 
        !            20:     26-Feb-1991     JohnsonA        Debug version of wrapper
        !            21:     10-Jul-1991     JohnsonA        Implement revised NDIS 3.0 specification
        !            22:     01-Nov-1991     SeanSe          Correct and Expand NDIS 3.1 specification
        !            23: 
        !            24: --*/
        !            25: 
        !            26: 
        !            27: #ifndef _NDIS_
        !            28: #define _NDIS_
        !            29: 
        !            30: 
        !            31: #define NDIS_NT 1
        !            32: 
        !            33: #include <ntddk.h>
        !            34: #include <netevent.h>
        !            35: 
        !            36: 
        !            37: #ifndef _WINDEF_    // these are defined in windows.h too
        !            38: typedef signed int INT, *PINT;
        !            39: typedef unsigned int UINT, *PUINT;
        !            40: #endif
        !            41: typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
        !            42: 
        !            43: 
        !            44: //
        !            45: // This file contains the definition of an NDIS_OID as
        !            46: // well as #defines for all the current OID values.
        !            47: //
        !            48: 
        !            49: #include <ntddndis.h>
        !            50: 
        !            51: 
        !            52: #ifdef NDIS_DOS
        !            53: #undef NDIS_DOS
        !            54: #endif
        !            55: 
        !            56: #ifdef IF_ERROR_CHK
        !            57: #undef IF_ERROR_CHK
        !            58: #endif
        !            59: 
        !            60: #ifdef NDISDBG
        !            61: #ifdef MEMPRINT
        !            62: #include "memprint.h"   //DavidTr's memprint program at ntos\srv
        !            63: #endif // MEMPRINT
        !            64: 
        !            65: extern int      NdisMsgLevel;
        !            66: extern BOOLEAN  NdisChkErrorFlag;
        !            67: extern ULONG    PendingSends;
        !            68: 
        !            69: #define TRACE_NONE         0x0000
        !            70: #define TRACE_IMPT         0x0001
        !            71: #define TRACE_ALL          0x0002
        !            72: 
        !            73: #define IF_TRACE(level) if ( NdisMsgLevel >= (level) )   //for tracing
        !            74: 
        !            75: #define IF_ERROR_CHK  if (NdisChkErrorFlag)       // for parameter checking
        !            76: 
        !            77: #define DbgIsMdl(_Buffer)   \
        !            78:     ( ((ULONG)(_Buffer)->Size) == MmSizeOfMdl(MmGetMdlVirtualAddress(_Buffer), \
        !            79:                                               MmGetMdlByteCount(_Buffer)) )
        !            80: 
        !            81: #define DbgIsNonPaged(_Address) \
        !            82:     ( MmIsNonPagedSystemAddressValid((PVOID)(_Address)) )
        !            83: 
        !            84: #define DbgIsPacket(_Packet) \
        !            85:     ( ((_Packet)->Private.Pool->PacketLength) > sizeof(_Packet) )
        !            86: 
        !            87: #define DbgIsNull(_Ptr)  ( ((PVOID)(_Ptr)) == NULL )
        !            88: 
        !            89: #define NdisPrint1(fmt)                DbgPrint(fmt)
        !            90: #define NdisPrint2(fmt,v1)             DbgPrint(fmt,v1)
        !            91: #define NdisPrint3(fmt,v1,v2)          DbgPrint(fmt,v1,v2)
        !            92: #define NdisPrint4(fmt,v1,v2,v3)       DbgPrint(fmt,v1,v2,v3)
        !            93: #define NdisPrint5(fmt,v1,v2,v3,v4)    DbgPrint(fmt,v1,v2,v3,v4)
        !            94: 
        !            95: #else // NDISDBG
        !            96: #define IF_TRACE(level)   if (FALSE)
        !            97: #define IF_ERROR_CHK      if (FALSE)
        !            98: #define DbgIsMdl(_Buffer)       TRUE
        !            99: #define DbgIsNonPaged(_Address) TRUE
        !           100: #define DbgIsPacket(_Packet)    TRUE
        !           101: #define DbgIsNull(_Ptr)         FALSE
        !           102: 
        !           103: #define NdisPrint1(fmt)
        !           104: #define NdisPrint2(fmt,v1)
        !           105: #define NdisPrint3(fmt,v1,v2)
        !           106: #define NdisPrint4(fmt,v1,v2,v3)
        !           107: #define NdisPrint5(fmt,v1,v2,v3,v4)
        !           108: #endif // NDISDBG
        !           109: 
        !           110: //
        !           111: // Ndis defines for configuration manager data structures
        !           112: //
        !           113: 
        !           114: typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
        !           115: typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION;
        !           116: typedef CM_EISA_SLOT_INFORMATION *PNDIS_EISA_SLOT_INFORMATION;
        !           117: typedef CM_EISA_FUNCTION_INFORMATION  NDIS_EISA_FUNCTION_INFORMATION;
        !           118: typedef CM_EISA_FUNCTION_INFORMATION *PNDIS_EISA_FUNCTION_INFORMATION;
        !           119: 
        !           120: //
        !           121: //
        !           122: // Ndis defines and data structures
        !           123: //
        !           124: //
        !           125: 
        !           126: 
        !           127: //
        !           128: // Ndis macros that are supplied to Device Drivers to help
        !           129: // with portability.  They are not published in the NT spec
        !           130: // as yet.  For now you should supply two versions of each
        !           131: // macros - an NT specific one and a portable one.
        !           132: //
        !           133: 
        !           134: #if NDIS_NT
        !           135: 
        !           136: //
        !           137: // ZZZ These macros are peculiar to NT.
        !           138: //
        !           139: 
        !           140: #define NdisMoveMemory(Destination,Source,Length) RtlCopyMemory(Destination,Source,Length)
        !           141: #define NdisZeroMemory(Destination,Length) RtlZeroMemory(Destination,Length)
        !           142: #define NdisRetrieveUlong(Destination,Source) RtlRetrieveUlong(Destination,Source)
        !           143: #define NdisStoreUlong(Destination,Value) RtlStoreUlong(Destination,Value)
        !           144: #define NDIS_STRING_CONST(x)   {sizeof(L##x)-2, sizeof(L##x), L##x}
        !           145: 
        !           146: //
        !           147: // On a MIPS machine, I/O mapped memory can't be accessed with
        !           148: // the Rtl routines.
        !           149: //
        !           150: 
        !           151: #ifdef _M_IX86
        !           152: #define NdisMoveMappedMemory(Destination,Source,Length) RtlCopyMemory(Destination,Source,Length)
        !           153: #define NdisZeroMappedMemory(Destination,Length) RtlZeroMemory(Destination,Length)
        !           154: #elif defined(_M_MRX000) || defined(_MIPS_)
        !           155: #define NdisMoveMappedMemory(Destination,Source,Length) \
        !           156: { \
        !           157:     PUCHAR _Src = (Source); \
        !           158:     PUCHAR _Dest = (Destination); \
        !           159:     PUCHAR _End = _Dest + (Length); \
        !           160:     while (_Dest < _End) { \
        !           161:         *_Dest++ = *_Src++; \
        !           162:     } \
        !           163: }
        !           164: #define NdisZeroMappedMemory(Destination,Length) \
        !           165: { \
        !           166:     PUCHAR _Dest = (Destination); \
        !           167:     PUCHAR _End = _Dest + (Length); \
        !           168:     while (_Dest < _End) { \
        !           169:         *_Dest++ = 0; \
        !           170:     } \
        !           171: }
        !           172: #elif defined(_ALPHA_)
        !           173: 
        !           174: #define NdisMoveMappedMemory(Destination,Source,Length) \
        !           175: { \
        !           176:     PUCHAR _Src = (Source); \
        !           177:     PUCHAR _Dest = (Destination); \
        !           178:     PUCHAR _End = _Dest + (Length); \
        !           179:     while (_Dest < _End) { \
        !           180:         *_Dest++ = *_Src++; \
        !           181:     } \
        !           182: }
        !           183: #define NdisZeroMappedMemory(Destination,Length) \
        !           184: { \
        !           185:     PUCHAR _Dest = (Destination); \
        !           186:     PUCHAR _End = _Dest + (Length); \
        !           187:     while (_Dest < _End) { \
        !           188:         NdisWriteRegisterUchar(_Dest,0); \
        !           189:         _Dest++;        \
        !           190:     } \
        !           191: }
        !           192: 
        !           193: #endif
        !           194: 
        !           195: 
        !           196: #else
        !           197: 
        !           198: //
        !           199: // These macros MUST be portable.
        !           200: //
        !           201: 
        !           202: #define NdisMoveMemory(Destination,Source,Length) memcpy(Destination,Source,Length)
        !           203: #define NdisZeroMemory(Destination,Length) memset(Destination,'\0',Length)
        !           204: #define NdisMoveMappedMemory(Destination,Source,Length) memcpy(Destination,Source,Length)
        !           205: #define NdisZeroMappedMemory(Destination,Length) memset(Destination,'\0',Length)
        !           206: #define NdisRetrieveUlong(Destination,Source)\
        !           207:    {\
        !           208:        UCHAR _S = 0;\
        !           209:        for (; _S < sizeof(ULONG) ; _S++ ) {\
        !           210:            ((PUCHAR)Destination)[_S] = ((PUCHAR)Source)[_S];\
        !           211:        }\
        !           212:    }
        !           213: #define NdisStoreUlong(Destination,Value)\
        !           214:    {\
        !           215:        UCHAR _S = 0;\
        !           216:        for (; _S < sizeof(ULONG) ; _S++ ) {\
        !           217:            ((PUCHAR)Destination)[_S] = ((UCHAR)(Value >> (_S * 8)));\
        !           218:        }\
        !           219:    }
        !           220: 
        !           221: 
        !           222: #endif
        !           223: 
        !           224: 
        !           225: //
        !           226: // On Mips and Intel systems, these are the same. On Alpha, they are different.
        !           227: //
        !           228: 
        !           229: #ifdef _ALPHA_
        !           230: 
        !           231: #define NdisMoveToMappedMemory(Destination,Source,Length) WRITE_REGISTER_BUFFER_UCHAR(Destination,Source,Length)
        !           232: #define NdisMoveFromMappedMemory(Destination,Source,Length) READ_REGISTER_BUFFER_UCHAR(Source,Destination,Length)
        !           233: 
        !           234: #else
        !           235: 
        !           236: #define NdisMoveToMappedMemory(Destination,Source,Length) NdisMoveMappedMemory(Destination,Source,Length)
        !           237: #define NdisMoveFromMappedMemory(Destination,Source,Length) NdisMoveMappedMemory(Destination,Source,Length)
        !           238: 
        !           239: #endif
        !           240: 
        !           241: 
        !           242: 
        !           243: //
        !           244: // This macro is used to determine how many physical pieces
        !           245: // an NDIS_BUFFER will take up when mapped.
        !           246: //
        !           247: 
        !           248: #define NDIS_BUFFER_TO_SPAN_PAGES(_Buffer) \
        !           249:     (ADDRESS_AND_SIZE_TO_SPAN_PAGES(\
        !           250:          MmGetMdlVirtualAddress(_Buffer), \
        !           251:          MmGetMdlByteCount(_Buffer)))
        !           252: 
        !           253: 
        !           254: //
        !           255: // definition of the basic spin lock structure
        !           256: //
        !           257: 
        !           258: typedef struct _NDIS_SPIN_LOCK {
        !           259:     KSPIN_LOCK SpinLock;
        !           260:     KIRQL OldIrql;
        !           261: } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
        !           262: 
        !           263: 
        !           264: typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
        !           265: 
        !           266: typedef int NDIS_STATUS, *PNDIS_STATUS; // note default size
        !           267: 
        !           268: typedef struct _NDIS_TIMER {
        !           269:     KTIMER Timer;
        !           270:     KDPC Dpc;
        !           271: } NDIS_TIMER, *PNDIS_TIMER;
        !           272: 
        !           273: 
        !           274: #define NdisInterruptLatched Latched
        !           275: #define NdisInterruptLevelSensitive LevelSensitive
        !           276: typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
        !           277: 
        !           278: 
        !           279: typedef
        !           280: BOOLEAN
        !           281: (*PNDIS_INTERRUPT_SERVICE) (
        !           282:     IN PVOID InterruptContext
        !           283:     );
        !           284: 
        !           285: typedef
        !           286: VOID
        !           287: (*PNDIS_DEFERRED_PROCESSING) (
        !           288:     IN PVOID SystemSpecific1,
        !           289:     IN PVOID InterruptContext,
        !           290:     IN PVOID SystemSpecific2,
        !           291:     IN PVOID SystemSpecific3
        !           292:     );
        !           293: 
        !           294: 
        !           295: typedef struct _NDIS_INTERRUPT {
        !           296:     PKINTERRUPT InterruptObject;
        !           297:     KSPIN_LOCK DpcCountLock;
        !           298:     PNDIS_INTERRUPT_SERVICE MacIsr;     // Pointer to Mac ISR routine
        !           299:     PNDIS_DEFERRED_PROCESSING MacDpc;   // Pointer to Mac DPC routine
        !           300:     KDPC InterruptDpc;
        !           301:     PVOID InterruptContext;             // Pointer to context for calling
        !           302:                                         // adapters ISR and DPC.
        !           303:     UCHAR DpcCount;
        !           304:     BOOLEAN Removing;                   // TRUE if removing interrupt
        !           305: 
        !           306:     //
        !           307:     // This is used to tell when all the Dpcs for the adapter are completed.
        !           308:     //
        !           309:     KEVENT DpcsCompletedEvent;
        !           310: 
        !           311: } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
        !           312: 
        !           313: struct _NDIS_PACKET;
        !           314: 
        !           315: 
        !           316: //
        !           317: // Configuration definitions
        !           318: //
        !           319: 
        !           320: //
        !           321: // Possible data types
        !           322: //
        !           323: typedef enum _NDIS_PARAMETER_TYPE {
        !           324:     NdisParameterInteger,
        !           325:     NdisParameterHexInteger,
        !           326:     NdisParameterString,
        !           327:     NdisParameterMultiString
        !           328: } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
        !           329: 
        !           330: //
        !           331: // To store configuration information
        !           332: //
        !           333: typedef struct _NDIS_CONFIGURATION_PARAMETER {
        !           334:     NDIS_PARAMETER_TYPE ParameterType;
        !           335:     union {
        !           336:         ULONG IntegerData;
        !           337:         NDIS_STRING StringData;
        !           338:     } ParameterData;
        !           339: } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
        !           340: 
        !           341: 
        !           342: //
        !           343: // Definitions for the "ProcessorType" keyword
        !           344: //
        !           345: typedef enum _NDIS_PROCESSOR_TYPE {
        !           346:     NdisProcessorX86,
        !           347:     NdisProcessorMips,
        !           348:     NdisProcessorAlpha
        !           349: } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
        !           350: 
        !           351: //
        !           352: // Definitions for the "Environment" keyword
        !           353: //
        !           354: typedef enum _NDIS_ENVIRONMENT_TYPE {
        !           355:     NdisEnvironmentWindows,
        !           356:     NdisEnvironmentWindowsNt
        !           357: } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
        !           358: 
        !           359: 
        !           360: //
        !           361: // Possible Hardware Architecture. Define these to
        !           362: // match the HAL INTERFACE_TYPE enum.
        !           363: //
        !           364: typedef enum _NDIS_INTERFACE_TYPE {
        !           365:     NdisInterfaceInternal = Internal,
        !           366:     NdisInterfaceIsa = Isa,
        !           367:     NdisInterfaceEisa = Eisa,
        !           368:     NdisInterfaceMca = MicroChannel,
        !           369:     NdisInterfaceTurboChannel = TurboChannel
        !           370: } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
        !           371: 
        !           372: 
        !           373: //
        !           374: // The structure passed up on a WAN_LINE_UP indication
        !           375: //
        !           376: 
        !           377: typedef struct _NDIS_WAN_LINE_UP {
        !           378:     ULONG LinkSpeed;                // 100 bps units
        !           379:     ULONG MaximumTotalSize;         // suggested max for send packets
        !           380:     NDIS_WAN_QUALITY Quality;
        !           381:     USHORT SendWindow;              // suggested by the MAC
        !           382:     UCHAR Address[1];               // variable length, depends on address type
        !           383: } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
        !           384: 
        !           385: //
        !           386: // The structure passed up on a WAN_LINE_DOWN indication
        !           387: //
        !           388: 
        !           389: typedef struct _NDIS_WAN_LINE_DOWN {
        !           390:     UCHAR Address[1];               // variable length, depends on address type
        !           391: } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
        !           392: 
        !           393: //
        !           394: // The structure passed up on a WAN_FRAGMENT indication
        !           395: //
        !           396: 
        !           397: typedef struct _NDIS_WAN_FRAGMENT {
        !           398:     UCHAR Address[1];               // variable length, depends on address type
        !           399: } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
        !           400: 
        !           401: 
        !           402: //
        !           403: // Ndis Adapter Information
        !           404: //
        !           405: 
        !           406: typedef
        !           407: NDIS_STATUS
        !           408: (*PNDIS_ACTIVATE_CALLBACK) (
        !           409:     IN NDIS_HANDLE NdisAdatperHandle,
        !           410:     IN NDIS_HANDLE MacAdapterContext,
        !           411:     IN ULONG DmaChannel
        !           412:     );
        !           413: 
        !           414: typedef struct _NDIS_PORT_DESCRIPTOR {
        !           415:     ULONG InitialPort;
        !           416:     ULONG NumberOfPorts;
        !           417:     PVOID *PortOffset;
        !           418: } NDIS_PORT_DESCRIPTOR, *PNDIS_PORT_DESCRIPTOR;
        !           419: 
        !           420: typedef struct _NDIS_ADAPTER_INFORMATION {
        !           421:     ULONG DmaChannel;
        !           422:     BOOLEAN Master;
        !           423:     BOOLEAN Dma32BitAddresses;
        !           424:     PNDIS_ACTIVATE_CALLBACK ActivateCallback;
        !           425:     NDIS_INTERFACE_TYPE AdapterType;
        !           426:     ULONG PhysicalMapRegistersNeeded;
        !           427:     ULONG MaximumPhysicalMapping;
        !           428:     ULONG NumberOfPortDescriptors;
        !           429:     NDIS_PORT_DESCRIPTOR PortDescriptors[1];   // as many as needed
        !           430: } NDIS_ADAPTER_INFORMATION, *PNDIS_ADAPTER_INFORMATION;
        !           431: 
        !           432: //
        !           433: // DMA Channel information
        !           434: //
        !           435: typedef struct _NDIS_DMA_DESCRIPTION {
        !           436:     BOOLEAN DemandMode;
        !           437:     BOOLEAN AutoInitialize;
        !           438:     BOOLEAN DmaChannelSpecified;
        !           439:     DMA_WIDTH DmaWidth;
        !           440:     DMA_SPEED DmaSpeed;
        !           441:     ULONG DmaPort;
        !           442:     ULONG DmaChannel;
        !           443: } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
        !           444: 
        !           445: //
        !           446: // Internal structure representing an NDIS DMA channel
        !           447: //
        !           448: typedef struct _NDIS_DMA_BLOCK {
        !           449:     PVOID MapRegisterBase;
        !           450:     KEVENT AllocationEvent;
        !           451:     PADAPTER_OBJECT SystemAdapterObject;
        !           452:     BOOLEAN InProgress;
        !           453: } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
        !           454: 
        !           455: 
        !           456: //
        !           457: // Ndis Buffer is actually an Mdl
        !           458: //
        !           459: typedef MDL NDIS_BUFFER, * PNDIS_BUFFER;
        !           460: 
        !           461: //
        !           462: // packet pool definition
        !           463: //
        !           464: typedef struct _NDIS_PACKET_POOL {
        !           465:     NDIS_SPIN_LOCK SpinLock;
        !           466:     struct _NDIS_PACKET *FreeList;  // linked list of free slots in pool
        !           467:     UINT PacketLength;      // amount needed in each packet
        !           468:     UCHAR Buffer[1];        // actual pool memory
        !           469: } NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
        !           470: 
        !           471: 
        !           472: //
        !           473: // wrapper-specific part of a packet
        !           474: //
        !           475: 
        !           476: typedef struct _NDIS_PACKET_PRIVATE {
        !           477:     UINT PhysicalCount;     // number of physical pages in packet.
        !           478:     UINT TotalLength;       // Total amount of data in the packet.
        !           479:     PNDIS_BUFFER Head;      // first buffer in the chain
        !           480:     PNDIS_BUFFER Tail;      // last buffer in the chain
        !           481: 
        !           482:     // if Head is NULL the chain is empty; Tail doesn't have to be NULL also
        !           483: 
        !           484:     PNDIS_PACKET_POOL Pool; // so we know where to free it back to
        !           485:     UINT Count;
        !           486:     ULONG Flags;
        !           487:     BOOLEAN ValidCounts;
        !           488: } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
        !           489: 
        !           490: 
        !           491: //
        !           492: // packet definition
        !           493: //
        !           494: 
        !           495: typedef struct _NDIS_PACKET {
        !           496:     NDIS_PACKET_PRIVATE Private;
        !           497:     UCHAR MacReserved[16];
        !           498:     UCHAR ProtocolReserved[1];
        !           499: } NDIS_PACKET, * PNDIS_PACKET;
        !           500: 
        !           501: 
        !           502: //
        !           503: // Request types used by NdisRequest; constants are added for
        !           504: // all entry points in the MAC, for those that want to create
        !           505: // their own internal requests.
        !           506: //
        !           507: 
        !           508: typedef enum _NDIS_REQUEST_TYPE {
        !           509:     NdisRequestQueryInformation,
        !           510:     NdisRequestSetInformation,
        !           511:     NdisRequestQueryStatistics,
        !           512:     NdisRequestOpen,
        !           513:     NdisRequestClose,
        !           514:     NdisRequestSend,
        !           515:     NdisRequestTransferData,
        !           516:     NdisRequestReset,
        !           517:     NdisRequestGeneric1,
        !           518:     NdisRequestGeneric2,
        !           519:     NdisRequestGeneric3,
        !           520:     NdisRequestGeneric4
        !           521: } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
        !           522: 
        !           523: 
        !           524: //
        !           525: // Structure of requests sent via NdisRequest
        !           526: //
        !           527: 
        !           528: typedef struct _NDIS_REQUEST {
        !           529:     UCHAR MacReserved[16];
        !           530:     NDIS_REQUEST_TYPE RequestType;
        !           531:     union _DATA {
        !           532: 
        !           533:         struct _QUERY_INFORMATION {
        !           534:             NDIS_OID Oid;
        !           535:             PVOID InformationBuffer;
        !           536:             UINT InformationBufferLength;
        !           537:             UINT BytesWritten;
        !           538:             UINT BytesNeeded;
        !           539:         } QUERY_INFORMATION;
        !           540: 
        !           541:         struct _SET_INFORMATION {
        !           542:             NDIS_OID Oid;
        !           543:             PVOID InformationBuffer;
        !           544:             UINT InformationBufferLength;
        !           545:             UINT BytesRead;
        !           546:             UINT BytesNeeded;
        !           547:         } SET_INFORMATION;
        !           548: 
        !           549:     } DATA;
        !           550: 
        !           551: } NDIS_REQUEST, *PNDIS_REQUEST;
        !           552: 
        !           553: 
        !           554: //
        !           555: // Definitions for physical address.
        !           556: //
        !           557: 
        !           558: typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
        !           559: typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
        !           560:     NDIS_PHYSICAL_ADDRESS PhysicalAddress;
        !           561:     UINT Length;
        !           562: } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
        !           563: 
        !           564: 
        !           565: /*++
        !           566: 
        !           567: ULONG
        !           568: NdisGetPhysicalAddressHigh(
        !           569:     IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
        !           570:     );
        !           571: 
        !           572: --*/
        !           573: 
        !           574: #define NdisGetPhysicalAddressHigh(_PhysicalAddress)\
        !           575:         ((_PhysicalAddress).HighPart)
        !           576: 
        !           577: 
        !           578: /*++
        !           579: 
        !           580: VOID
        !           581: NdisSetPhysicalAddressHigh(
        !           582:     IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
        !           583:     IN ULONG Value
        !           584:     );
        !           585: 
        !           586: --*/
        !           587: 
        !           588: #define NdisSetPhysicalAddressHigh(_PhysicalAddress, _Value)\
        !           589:      ((_PhysicalAddress).HighPart) = (_Value)
        !           590: 
        !           591: 
        !           592: /*++
        !           593: 
        !           594: ULONG
        !           595: NdisGetPhysicalAddressLow(
        !           596:     IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
        !           597:     );
        !           598: 
        !           599: --*/
        !           600: 
        !           601: #define NdisGetPhysicalAddressLow(_PhysicalAddress) \
        !           602:     ((_PhysicalAddress).LowPart)
        !           603: 
        !           604: 
        !           605: /*++
        !           606: 
        !           607: VOID
        !           608: NdisSetPhysicalAddressLow(
        !           609:     IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
        !           610:     IN ULONG Value
        !           611:     );
        !           612: 
        !           613: --*/
        !           614: 
        !           615: #define NdisSetPhysicalAddressLow(_PhysicalAddress, _Value) \
        !           616:     ((_PhysicalAddress).LowPart) = (_Value)
        !           617: 
        !           618: 
        !           619: //
        !           620: // Macro to initialize an NDIS_PHYSICAL_ADDRESS constant
        !           621: //
        !           622: 
        !           623: #define NDIS_PHYSICAL_ADDRESS_CONST(_Low, _High) \
        !           624:     { (ULONG)(_Low), (LONG)(_High) }
        !           625: 
        !           626: 
        !           627: //
        !           628: // Include an incomplete type for NDIS_PACKET structure so that
        !           629: // function types can refer to a type to be defined later.
        !           630: //
        !           631: struct _NDIS_PACKET;
        !           632: 
        !           633: //
        !           634: // Function types for NDIS_PROTOCOL_CHARACTERISTICS
        !           635: //
        !           636: //
        !           637: 
        !           638: typedef
        !           639: VOID
        !           640: (*OPEN_ADAPTER_COMPLETE_HANDLER) (
        !           641:     IN NDIS_HANDLE ProtocolBindingContext,
        !           642:     IN NDIS_STATUS Status,
        !           643:     IN NDIS_STATUS OpenErrorStatus
        !           644:     );
        !           645: 
        !           646: typedef
        !           647: VOID
        !           648: (*CLOSE_ADAPTER_COMPLETE_HANDLER) (
        !           649:     IN NDIS_HANDLE ProtocolBindingContext,
        !           650:     IN NDIS_STATUS Status
        !           651:     );
        !           652: 
        !           653: typedef
        !           654: VOID
        !           655: (*SEND_COMPLETE_HANDLER) (
        !           656:     IN NDIS_HANDLE ProtocolBindingContext,
        !           657:     IN PNDIS_PACKET Packet,
        !           658:     IN NDIS_STATUS Status
        !           659:     );
        !           660: 
        !           661: typedef
        !           662: VOID
        !           663: (*TRANSFER_DATA_COMPLETE_HANDLER) (
        !           664:     IN NDIS_HANDLE ProtocolBindingContext,
        !           665:     IN PNDIS_PACKET Packet,
        !           666:     IN NDIS_STATUS Status,
        !           667:     IN UINT BytesTransferred
        !           668:     );
        !           669: 
        !           670: typedef
        !           671: VOID
        !           672: (*RESET_COMPLETE_HANDLER) (
        !           673:     IN NDIS_HANDLE ProtocolBindingContext,
        !           674:     IN NDIS_STATUS Status
        !           675:     );
        !           676: 
        !           677: typedef
        !           678: VOID
        !           679: (*REQUEST_COMPLETE_HANDLER) (
        !           680:     IN NDIS_HANDLE ProtocolBindingContext,
        !           681:     IN PNDIS_REQUEST NdisRequest,
        !           682:     IN NDIS_STATUS Status
        !           683:     );
        !           684: 
        !           685: typedef
        !           686: NDIS_STATUS
        !           687: (*RECEIVE_HANDLER) (
        !           688:     IN NDIS_HANDLE ProtocolBindingContext,
        !           689:     IN NDIS_HANDLE MacReceiveContext,
        !           690:     IN PVOID HeaderBuffer,
        !           691:     IN UINT HeaderBufferSize,
        !           692:     IN PVOID LookAheadBuffer,
        !           693:     IN UINT LookaheadBufferSize,
        !           694:     IN UINT PacketSize
        !           695:     );
        !           696: 
        !           697: typedef
        !           698: VOID
        !           699: (*RECEIVE_COMPLETE_HANDLER) (
        !           700:     IN NDIS_HANDLE ProtocolBindingContext
        !           701:     );
        !           702: 
        !           703: typedef
        !           704: VOID
        !           705: (*STATUS_HANDLER) (
        !           706:     IN NDIS_HANDLE ProtocolBindingContext,
        !           707:     IN NDIS_STATUS GeneralStatus,
        !           708:     IN PVOID StatusBuffer,
        !           709:     IN UINT StatusBufferSize
        !           710:     );
        !           711: 
        !           712: typedef
        !           713: VOID
        !           714: (*STATUS_COMPLETE_HANDLER) (
        !           715:     IN NDIS_HANDLE ProtocolBindingContext
        !           716:     );
        !           717: 
        !           718: 
        !           719: typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
        !           720:     UCHAR MajorNdisVersion;
        !           721:     UCHAR MinorNdisVersion;
        !           722:     UINT Reserved;
        !           723:     OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
        !           724:     CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
        !           725:     SEND_COMPLETE_HANDLER SendCompleteHandler;
        !           726:     TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
        !           727:     RESET_COMPLETE_HANDLER ResetCompleteHandler;
        !           728:     REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
        !           729:     RECEIVE_HANDLER ReceiveHandler;
        !           730:     RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
        !           731:     STATUS_HANDLER StatusHandler;
        !           732:     STATUS_COMPLETE_HANDLER StatusCompleteHandler;
        !           733:     NDIS_STRING Name;
        !           734: } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
        !           735: 
        !           736: 
        !           737: typedef
        !           738: VOID
        !           739: (*PNDIS_SYNCHRONIZE_ROUTINE) (
        !           740:     IN PVOID SynchronizeContext
        !           741:     );
        !           742: 
        !           743: //
        !           744: // Function types for NDIS_MAC_CHARACTERISTICS
        !           745: //
        !           746: 
        !           747: 
        !           748: typedef
        !           749: NDIS_STATUS
        !           750: (*OPEN_ADAPTER_HANDLER) (
        !           751:     OUT PNDIS_STATUS OpenErrorStatus,
        !           752:     OUT NDIS_HANDLE *MacBindingHandle,
        !           753:     OUT PUINT SelectedMediumIndex,
        !           754:     IN PNDIS_MEDIUM MediumArray,
        !           755:     IN UINT MediumArraySize,
        !           756:     IN NDIS_HANDLE NdisBindingContext,
        !           757:     IN NDIS_HANDLE MacAdapterContext,
        !           758:     IN UINT OpenOptions,
        !           759:     IN PSTRING AddressingInformation OPTIONAL
        !           760:     );
        !           761: 
        !           762: typedef
        !           763: NDIS_STATUS
        !           764: (*CLOSE_ADAPTER_HANDLER) (
        !           765:     IN NDIS_HANDLE MacBindingHandle
        !           766:     );
        !           767: 
        !           768: typedef
        !           769: NDIS_STATUS
        !           770: (*SEND_HANDLER) (
        !           771:     IN NDIS_HANDLE MacBindingHandle,
        !           772:     IN PNDIS_PACKET Packet
        !           773:     );
        !           774: 
        !           775: typedef
        !           776: NDIS_STATUS
        !           777: (*TRANSFER_DATA_HANDLER) (
        !           778:     IN NDIS_HANDLE MacBindingHandle,
        !           779:     IN NDIS_HANDLE MacReceiveContext,
        !           780:     IN UINT ByteOffset,
        !           781:     IN UINT BytesToTransfer,
        !           782:     OUT PNDIS_PACKET Packet,
        !           783:     OUT PUINT BytesTransferred
        !           784:     );
        !           785: 
        !           786: typedef
        !           787: NDIS_STATUS
        !           788: (*RESET_HANDLER) (
        !           789:     IN NDIS_HANDLE MacBindingHandle
        !           790:     );
        !           791: 
        !           792: typedef
        !           793: NDIS_STATUS
        !           794: (*REQUEST_HANDLER) (
        !           795:     IN NDIS_HANDLE MacBindingHandle,
        !           796:     IN PNDIS_REQUEST NdisRequest
        !           797:     );
        !           798: 
        !           799: typedef
        !           800: NDIS_STATUS
        !           801: (*QUERY_GLOBAL_STATISTICS_HANDLER) (
        !           802:     IN NDIS_HANDLE MacAdapterContext,
        !           803:     IN PNDIS_REQUEST NdisRequest
        !           804:     );
        !           805: 
        !           806: typedef
        !           807: VOID
        !           808: (*UNLOAD_MAC_HANDLER) (
        !           809:     IN NDIS_HANDLE MacMacContext
        !           810:     );
        !           811: 
        !           812: typedef
        !           813: NDIS_STATUS
        !           814: (*ADD_ADAPTER_HANDLER) (
        !           815:     IN NDIS_HANDLE MacMacContext,
        !           816:     IN NDIS_HANDLE WrapperConfigurationContext,
        !           817:     IN PNDIS_STRING AdapterName
        !           818:     );
        !           819: 
        !           820: typedef
        !           821: VOID
        !           822: (*REMOVE_ADAPTER_HANDLER) (
        !           823:     IN NDIS_HANDLE MacAdapterContext
        !           824:     );
        !           825: 
        !           826: 
        !           827: typedef struct _NDIS_MAC_CHARACTERISTICS {
        !           828:     UCHAR MajorNdisVersion;
        !           829:     UCHAR MinorNdisVersion;
        !           830:     UINT Reserved;
        !           831:     OPEN_ADAPTER_HANDLER OpenAdapterHandler;
        !           832:     CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
        !           833:     SEND_HANDLER SendHandler;
        !           834:     TRANSFER_DATA_HANDLER TransferDataHandler;
        !           835:     RESET_HANDLER ResetHandler;
        !           836:     REQUEST_HANDLER RequestHandler;
        !           837:     QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
        !           838:     UNLOAD_MAC_HANDLER UnloadMacHandler;
        !           839:     ADD_ADAPTER_HANDLER AddAdapterHandler;
        !           840:     REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
        !           841:     NDIS_STRING Name;
        !           842: } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
        !           843: 
        !           844: 
        !           845: //
        !           846: // Definition for shutdown handler
        !           847: //
        !           848: 
        !           849: typedef
        !           850: VOID
        !           851: (*ADAPTER_SHUTDOWN_HANDLER) (
        !           852:     IN PVOID ShutdownContext
        !           853:     );
        !           854: 
        !           855: 
        !           856: 
        !           857: //
        !           858: // block used for references...
        !           859: //
        !           860: 
        !           861: typedef struct _REFERENCE {
        !           862:     NDIS_SPIN_LOCK SpinLock;
        !           863:     USHORT ReferenceCount;
        !           864:     BOOLEAN Closing;
        !           865: } REFERENCE, * PREFERENCE;
        !           866: 
        !           867: 
        !           868: //
        !           869: // This holds a map register entry.
        !           870: //
        !           871: 
        !           872: typedef struct _MAP_REGISTER_ENTRY {
        !           873:     PVOID MapRegister;
        !           874:     BOOLEAN WriteToDevice;
        !           875: } MAP_REGISTER_ENTRY, * PMAP_REGISTER_ENTRY;
        !           876: 
        !           877: //
        !           878: // declare these first since they point to each other
        !           879: //
        !           880: 
        !           881: typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE, * PNDIS_WRAPPER_HANDLE;
        !           882: typedef struct _NDIS_MAC_BLOCK      NDIS_MAC_BLOCK, * PNDIS_MAC_BLOCK;
        !           883: typedef struct _NDIS_ADAPTER_BLOCK  NDIS_ADAPTER_BLOCK, * PNDIS_ADAPTER_BLOCK;
        !           884: typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, * PNDIS_PROTOCOL_BLOCK;
        !           885: typedef struct _NDIS_OPEN_BLOCK     NDIS_OPEN_BLOCK, * PNDIS_OPEN_BLOCK;
        !           886: 
        !           887: 
        !           888: //
        !           889: // MAC specific considerations.
        !           890: //
        !           891: 
        !           892: struct _NDIS_WRAPPER_HANDLE {
        !           893: 
        !           894:     //
        !           895:     // These store the PDRIVER_OBJECT that
        !           896:     // the MAC passes to NdisInitializeWrapper until it can be
        !           897:     // used by NdisRegisterMac and NdisTerminateWrapper.
        !           898:     //
        !           899: 
        !           900:     PDRIVER_OBJECT NdisWrapperDriver;
        !           901: 
        !           902:     HANDLE NdisWrapperConfigurationHandle;
        !           903: 
        !           904: };
        !           905: 
        !           906: 
        !           907: 
        !           908: 
        !           909: //
        !           910: // one of these per MAC
        !           911: //
        !           912: 
        !           913: struct _NDIS_MAC_BLOCK {
        !           914:     PNDIS_ADAPTER_BLOCK AdapterQueue;   // queue of adapters for this MAC
        !           915:     NDIS_HANDLE MacMacContext;          // Context for calling MACUnload and
        !           916:                                         //    MACAddAdapter.
        !           917: 
        !           918:     REFERENCE Ref;                      // contains spinlock for AdapterQueue
        !           919:     UINT Length;                        // of this NDIS_MAC_BLOCK structure
        !           920:     NDIS_MAC_CHARACTERISTICS MacCharacteristics;    // handler addresses
        !           921:     PNDIS_WRAPPER_HANDLE NdisMacInfo;   // Mac information.
        !           922:     PNDIS_MAC_BLOCK NextMac;
        !           923:     KEVENT AdaptersRemovedEvent;        // used to find when all adapters are gone.
        !           924:     BOOLEAN Unloading;                  // TRUE if unloading
        !           925: 
        !           926: };
        !           927: 
        !           928: //
        !           929: // one of these per adapter registered on a MAC
        !           930: //
        !           931: 
        !           932: struct _NDIS_ADAPTER_BLOCK {
        !           933:     PDEVICE_OBJECT DeviceObject;        // created by NdisRegisterAdapter
        !           934:     PNDIS_MAC_BLOCK MacHandle;          // pointer to our MAC block
        !           935:     NDIS_HANDLE MacAdapterContext;      // context when calling MacOpenAdapter
        !           936:     NDIS_STRING AdapterName;            // how NdisOpenAdapter refers to us
        !           937:     PNDIS_OPEN_BLOCK OpenQueue;         // queue of opens for this adapter
        !           938:     PNDIS_ADAPTER_BLOCK NextAdapter;    // used by MAC's AdapterQueue
        !           939:     REFERENCE Ref;                      // contains spinlock for OpenQueue
        !           940:     BOOLEAN BeingRemoved;               // TRUE if adapter is being removed
        !           941: 
        !           942:     //
        !           943:     // Resource information
        !           944:     //
        !           945:     PCM_RESOURCE_LIST Resources;
        !           946: 
        !           947:     //
        !           948:     // Handling of shutdown
        !           949:     //
        !           950:     ADAPTER_SHUTDOWN_HANDLER ShutdownRoutine;
        !           951:     PVOID ShutdownContext;
        !           952: 
        !           953:     //
        !           954:     // contains adapter information
        !           955:     //
        !           956:     ULONG BusNumber;
        !           957:     NDIS_INTERFACE_TYPE BusType;
        !           958:     ULONG ChannelNumber;
        !           959:     NDIS_INTERFACE_TYPE AdapterType;
        !           960:     BOOLEAN Master;
        !           961:     ULONG PhysicalMapRegistersNeeded;
        !           962:     ULONG MaximumPhysicalMapping;
        !           963:     ULONG InitialPort;
        !           964:     ULONG NumberOfPorts;
        !           965: 
        !           966:     //
        !           967:     // Holds the mapping for ports, if needed.
        !           968:     //
        !           969:     PUCHAR InitialPortMapping;
        !           970: 
        !           971:     //
        !           972:     // TRUE if InitialPortMapping was mapped with NdisMapIoSpace.
        !           973:     //
        !           974:     BOOLEAN InitialPortMapped;
        !           975: 
        !           976:     //
        !           977:     // This is the offset added to the port passed to NdisXXXPort to
        !           978:     // get to the real value to be passed to the NDIS_XXX_PORT macros.
        !           979:     // It equals InitialPortMapping - InitialPort; that is, the
        !           980:     // mapped "address" of port 0, even if we didn't actually
        !           981:     // map port 0.
        !           982:     //
        !           983:     PUCHAR PortOffset;
        !           984: 
        !           985:     //
        !           986:     // Holds the map registers for this adapter.
        !           987:     //
        !           988:     PMAP_REGISTER_ENTRY MapRegisters;
        !           989: 
        !           990:     //
        !           991:     // These two are used temporarily while allocating
        !           992:     // the map registers.
        !           993:     //
        !           994:     KEVENT AllocationEvent;
        !           995:     UINT CurrentMapRegister;
        !           996:     PADAPTER_OBJECT SystemAdapterObject;
        !           997: 
        !           998: };
        !           999: 
        !          1000: //
        !          1001: // one of these per protocol registered
        !          1002: //
        !          1003: 
        !          1004: struct _NDIS_PROTOCOL_BLOCK {
        !          1005:     PNDIS_OPEN_BLOCK OpenQueue;         // queue of opens for this protocol
        !          1006:     REFERENCE Ref;                      // contains spinlock for OpenQueue
        !          1007:     UINT Length;                        // of this NDIS_PROTOCOL_BLOCK struct
        !          1008:     NDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics;  // handler addresses
        !          1009: };
        !          1010: 
        !          1011: //
        !          1012: // one of these per open on an adapter/protocol
        !          1013: //
        !          1014: 
        !          1015: struct _NDIS_OPEN_BLOCK {
        !          1016:     PNDIS_MAC_BLOCK MacHandle;              // pointer to our MAC
        !          1017:     NDIS_HANDLE MacBindingHandle;           // context when calling MacXX funcs
        !          1018:     PNDIS_ADAPTER_BLOCK AdapterHandle;      // pointer to our adapter
        !          1019:     PNDIS_PROTOCOL_BLOCK ProtocolHandle;    // pointer to our protocol
        !          1020:     NDIS_HANDLE ProtocolBindingContext;     // context when calling ProtXX funcs
        !          1021:     PNDIS_OPEN_BLOCK AdapterNextOpen;       // used by adapter's OpenQueue
        !          1022:     PNDIS_OPEN_BLOCK ProtocolNextOpen;      // used by protocol's OpenQueue
        !          1023:     PFILE_OBJECT FileObject;                // created by operating system
        !          1024:     BOOLEAN Closing;                        // TRUE when removing this struct
        !          1025:     NDIS_HANDLE CloseRequestHandle;         // 0 indicates an internal close
        !          1026:     NDIS_SPIN_LOCK SpinLock;                // guards Closing
        !          1027: 
        !          1028:     //
        !          1029:     // These are optimizations for getting to MAC routines.  They are not
        !          1030:     // necessary, but are here to save a dereference through the MAC block.
        !          1031:     //
        !          1032: 
        !          1033:     SEND_HANDLER SendHandler;
        !          1034:     TRANSFER_DATA_HANDLER TransferDataHandler;
        !          1035: 
        !          1036:     //
        !          1037:     // These are optimizations for getting to PROTOCOL routines.  They are not
        !          1038:     // necessary, but are here to save a dereference through the PROTOCOL block.
        !          1039:     //
        !          1040: 
        !          1041:     SEND_COMPLETE_HANDLER SendCompleteHandler;
        !          1042:     TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
        !          1043:     RECEIVE_HANDLER ReceiveHandler;
        !          1044:     RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
        !          1045: 
        !          1046: };
        !          1047: 
        !          1048: //
        !          1049: // Types of Memory (not mutually exclusive)
        !          1050: //
        !          1051: 
        !          1052: #define NDIS_MEMORY_CONTIGUOUS              0x00000001
        !          1053: #define NDIS_MEMORY_NONCACHED               0x00000002
        !          1054: 
        !          1055: //
        !          1056: // Open options
        !          1057: //
        !          1058: #define NDIS_OPEN_RECEIVE_NOT_REENTRANT     0x00000001
        !          1059: 
        !          1060: //
        !          1061: // NDIS_STATUS values
        !          1062: //
        !          1063: 
        !          1064: #define NDIS_STATUS_SUCCESS                 ((NDIS_STATUS) STATUS_SUCCESS)
        !          1065: #define NDIS_STATUS_PENDING                 ((NDIS_STATUS) STATUS_PENDING)
        !          1066: #define NDIS_STATUS_NOT_RECOGNIZED          ((NDIS_STATUS)0x00010001L)
        !          1067: #define NDIS_STATUS_NOT_COPIED              ((NDIS_STATUS)0x00010002L)
        !          1068: 
        !          1069: #define NDIS_STATUS_ONLINE                  ((NDIS_STATUS)0x40010003L)
        !          1070: #define NDIS_STATUS_RESET_START             ((NDIS_STATUS)0x40010004L)
        !          1071: #define NDIS_STATUS_RESET_END               ((NDIS_STATUS)0x40010005L)
        !          1072: #define NDIS_STATUS_RING_STATUS             ((NDIS_STATUS)0x40010006L)
        !          1073: #define NDIS_STATUS_CLOSED                  ((NDIS_STATUS)0x40010007L)
        !          1074: #define NDIS_STATUS_WAN_LINE_UP             ((NDIS_STATUS)0x40010008L)
        !          1075: #define NDIS_STATUS_WAN_LINE_DOWN           ((NDIS_STATUS)0x40010009L)
        !          1076: #define NDIS_STATUS_WAN_FRAGMENT            ((NDIS_STATUS)0x4001000AL)
        !          1077: 
        !          1078: #define NDIS_STATUS_NOT_RESETTABLE          ((NDIS_STATUS)0x80010001L)
        !          1079: #define NDIS_STATUS_SOFT_ERRORS             ((NDIS_STATUS)0x80010003L)
        !          1080: #define NDIS_STATUS_HARD_ERRORS             ((NDIS_STATUS)0x80010004L)
        !          1081: 
        !          1082: #define NDIS_STATUS_FAILURE                 ((NDIS_STATUS) STATUS_UNSUCCESSFUL)
        !          1083: #define NDIS_STATUS_RESOURCES               ((NDIS_STATUS) \
        !          1084:                                                 STATUS_INSUFFICIENT_RESOURCES)
        !          1085: #define NDIS_STATUS_CLOSING                 ((NDIS_STATUS)0xC0010002L)
        !          1086: #define NDIS_STATUS_BAD_VERSION             ((NDIS_STATUS)0xC0010004L)
        !          1087: #define NDIS_STATUS_BAD_CHARACTERISTICS     ((NDIS_STATUS)0xC0010005L)
        !          1088: #define NDIS_STATUS_ADAPTER_NOT_FOUND       ((NDIS_STATUS)0xC0010006L)
        !          1089: #define NDIS_STATUS_OPEN_FAILED             ((NDIS_STATUS)0xC0010007L)
        !          1090: #define NDIS_STATUS_DEVICE_FAILED           ((NDIS_STATUS)0xC0010008L)
        !          1091: #define NDIS_STATUS_MULTICAST_FULL          ((NDIS_STATUS)0xC0010009L)
        !          1092: #define NDIS_STATUS_MULTICAST_EXISTS        ((NDIS_STATUS)0xC001000AL)
        !          1093: #define NDIS_STATUS_MULTICAST_NOT_FOUND     ((NDIS_STATUS)0xC001000BL)
        !          1094: #define NDIS_STATUS_REQUEST_ABORTED         ((NDIS_STATUS)0xC001000CL)
        !          1095: #define NDIS_STATUS_RESET_IN_PROGRESS       ((NDIS_STATUS)0xC001000DL)
        !          1096: #define NDIS_STATUS_CLOSING_INDICATING      ((NDIS_STATUS)0xC001000EL)
        !          1097: #define NDIS_STATUS_NOT_SUPPORTED           ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
        !          1098: #define NDIS_STATUS_INVALID_PACKET          ((NDIS_STATUS)0xC001000FL)
        !          1099: #define NDIS_STATUS_OPEN_LIST_FULL          ((NDIS_STATUS)0xC0010010L)
        !          1100: #define NDIS_STATUS_ADAPTER_NOT_READY       ((NDIS_STATUS)0xC0010011L)
        !          1101: #define NDIS_STATUS_ADAPTER_NOT_OPEN        ((NDIS_STATUS)0xC0010012L)
        !          1102: #define NDIS_STATUS_NOT_INDICATING          ((NDIS_STATUS)0xC0010013L)
        !          1103: #define NDIS_STATUS_INVALID_LENGTH          ((NDIS_STATUS)0xC0010014L)
        !          1104: #define NDIS_STATUS_INVALID_DATA            ((NDIS_STATUS)0xC0010015L)
        !          1105: #define NDIS_STATUS_BUFFER_TOO_SHORT        ((NDIS_STATUS)0xC0010016L)
        !          1106: #define NDIS_STATUS_INVALID_OID             ((NDIS_STATUS)0xC0010017L)
        !          1107: #define NDIS_STATUS_ADAPTER_REMOVED         ((NDIS_STATUS)0xC0010018L)
        !          1108: #define NDIS_STATUS_UNSUPPORTED_MEDIA       ((NDIS_STATUS)0xC0010019L)
        !          1109: #define NDIS_STATUS_GROUP_ADDRESS_IN_USE    ((NDIS_STATUS)0xC001001AL)
        !          1110: #define NDIS_STATUS_FILE_NOT_FOUND          ((NDIS_STATUS)0xC001001BL)
        !          1111: #define NDIS_STATUS_ERROR_READING_FILE      ((NDIS_STATUS)0xC001001CL)
        !          1112: #define NDIS_STATUS_ALREADY_MAPPED          ((NDIS_STATUS)0xC001001DL)
        !          1113: #define NDIS_STATUS_RESOURCE_CONFLICT       ((NDIS_STATUS)0xC001001EL)
        !          1114: 
        !          1115: #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR   ((NDIS_STATUS)0xC0011000L)
        !          1116: 
        !          1117: 
        !          1118: //
        !          1119: // used in error logging
        !          1120: //
        !          1121: 
        !          1122: #define NDIS_ERROR_CODE ULONG
        !          1123: 
        !          1124: #define NDIS_ERROR_CODE_RESOURCE_CONFLICT          EVENT_NDIS_RESOURCE_CONFLICT
        !          1125: #define NDIS_ERROR_CODE_OUT_OF_RESOURCES           EVENT_NDIS_OUT_OF_RESOURCE
        !          1126: #define NDIS_ERROR_CODE_HARDWARE_FAILURE           EVENT_NDIS_HARDWARE_FAILURE
        !          1127: #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND          EVENT_NDIS_ADAPTER_NOT_FOUND
        !          1128: #define NDIS_ERROR_CODE_INTERRUPT_CONNECT          EVENT_NDIS_INTERRUPT_CONNECT
        !          1129: #define NDIS_ERROR_CODE_DRIVER_FAILURE             EVENT_NDIS_DRIVER_FAILURE
        !          1130: #define NDIS_ERROR_CODE_BAD_VERSION                EVENT_NDIS_BAD_VERSION
        !          1131: #define NDIS_ERROR_CODE_TIMEOUT                    EVENT_NDIS_TIMEOUT
        !          1132: #define NDIS_ERROR_CODE_NETWORK_ADDRESS            EVENT_NDIS_NETWORK_ADDRESS
        !          1133: #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION  EVENT_NDIS_UNSUPPORTED_CONFIGURATION
        !          1134: #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
        !          1135: #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER  EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
        !          1136: #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS        EVENT_NDIS_BAD_IO_BASE_ADDRESS
        !          1137: #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL        EVENT_NDIS_RECEIVE_SPACE_SMALL
        !          1138: #define NDIS_ERROR_CODE_ADAPTER_DISABLED           EVENT_NDIS_ADAPTER_DISABLED
        !          1139: 
        !          1140: 
        !          1141: 
        !          1142: #define INTERNAL
        !          1143: 
        !          1144: 
        !          1145: 
        !          1146: //
        !          1147: // Ndis Spin Locks
        !          1148: //
        !          1149: 
        !          1150: /*++
        !          1151: 
        !          1152: VOID
        !          1153: NdisAllocateSpinLock(
        !          1154:     IN PNDIS_SPIN_LOCK SpinLock;
        !          1155:     );
        !          1156: 
        !          1157: --*/
        !          1158: 
        !          1159: 
        !          1160: #ifdef NDISDBG
        !          1161: #define NdisAllocateSpinLock(_SpinLock) { \
        !          1162:     IF_TRACE(TRACE_ALL) {  \
        !          1163:         NdisPrint1("==>NdisAllocateSpinLock\n"); \
        !          1164:     } \
        !          1165:     KeInitializeSpinLock(&(_SpinLock)->SpinLock); \
        !          1166:     IF_TRACE(TRACE_ALL) { \
        !          1167:         NdisPrint1("<==NdisAllocateSpinLock\n"); \
        !          1168:     } \
        !          1169: }
        !          1170: #else
        !          1171: #define NdisAllocateSpinLock(_SpinLock) { \
        !          1172:     KeInitializeSpinLock(&(_SpinLock)->SpinLock); \
        !          1173: }
        !          1174: #endif
        !          1175: 
        !          1176: /*++
        !          1177: 
        !          1178: VOID
        !          1179: NdisFreeSpinLock(
        !          1180:     IN PNDIS_SPIN_LOCK SpinLock;
        !          1181:     );
        !          1182: 
        !          1183: --*/
        !          1184: 
        !          1185: #ifdef NDISDBG
        !          1186: #define NdisFreeSpinLock(_SpinLock) { \
        !          1187:     IF_TRACE(TRACE_ALL) { \
        !          1188:         NdisPrint1("==>NdisFreeSpinLock\n"); \
        !          1189:     } \
        !          1190:     IF_TRACE(TRACE_ALL) { \
        !          1191:         NdisPrint1("<==NdisFreeSpinLock\n");   \
        !          1192:     } \
        !          1193: }
        !          1194: #else
        !          1195: #define NdisFreeSpinLock(_SpinLock) { \
        !          1196: }
        !          1197: #endif
        !          1198: 
        !          1199: 
        !          1200: /*++
        !          1201: 
        !          1202: VOID
        !          1203: NdisAcquireSpinLock(
        !          1204:     IN PNDIS_SPIN_LOCK SpinLock;
        !          1205:     );
        !          1206: 
        !          1207: --*/
        !          1208: 
        !          1209: #ifdef NDISDBG
        !          1210: #define NdisAcquireSpinLock(_SpinLock) { \
        !          1211:     KIRQL OldIrql; \
        !          1212:     IF_TRACE(TRACE_ALL) { \
        !          1213:         NdisPrint1("==>NdisAcquireSpinLock\n"); \
        !          1214:     } \
        !          1215:     KeAcquireSpinLock(&(_SpinLock)->SpinLock, &OldIrql); \
        !          1216:     (_SpinLock)->OldIrql = OldIrql; \
        !          1217:     IF_TRACE(TRACE_ALL) { \
        !          1218:         NdisPrint1("<==NdisAcquireSpinLock\n"); \
        !          1219:     } \
        !          1220: }
        !          1221: #else
        !          1222: #define NdisAcquireSpinLock(_SpinLock) { \
        !          1223:     KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql); \
        !          1224: }
        !          1225: #endif
        !          1226: 
        !          1227: 
        !          1228: /*++
        !          1229: 
        !          1230: VOID
        !          1231: NdisReleaseSpinLock(
        !          1232:     IN PNDIS_SPIN_LOCK SpinLock;
        !          1233:     );
        !          1234: 
        !          1235: --*/
        !          1236: 
        !          1237: #ifdef NDISDBG
        !          1238: #define NdisReleaseSpinLock(_SpinLock) { \
        !          1239:     KIRQL CurrentIrql = (_SpinLock)->OldIrql; \
        !          1240:     IF_TRACE(TRACE_ALL) { \
        !          1241:         NdisPrint1("==>NdisReleaseSpinLock \n"); \
        !          1242:     } \
        !          1243:     KeReleaseSpinLock(&(_SpinLock)->SpinLock, CurrentIrql); \
        !          1244:     IF_TRACE(TRACE_ALL) { \
        !          1245:         NdisPrint1("<==NdisReleaseSpinLock\n"); \
        !          1246:     }\
        !          1247: }
        !          1248: #else
        !          1249: #define NdisReleaseSpinLock(_SpinLock) { \
        !          1250:     KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql); \
        !          1251: }
        !          1252: #endif
        !          1253: 
        !          1254: /*++
        !          1255: 
        !          1256: VOID
        !          1257: NdisDprAcquireSpinLock(
        !          1258:     IN PNDIS_SPIN_LOCK SpinLock;
        !          1259:     );
        !          1260: 
        !          1261: --*/
        !          1262: 
        !          1263: #ifdef NDISDBG
        !          1264: #define NdisDprAcquireSpinLock(_SpinLock) { \
        !          1265:     IF_TRACE(TRACE_ALL) { \
        !          1266:         NdisPrint1("==>NdisDprAcquireSpinLock\n"); \
        !          1267:     } \
        !          1268:     KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
        !          1269:     (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
        !          1270:     IF_TRACE(TRACE_ALL) { \
        !          1271:         NdisPrint1("<==NdisDprAcquireSpinLock\n"); \
        !          1272:     } \
        !          1273: }
        !          1274: #else
        !          1275: #define NdisDprAcquireSpinLock(_SpinLock) { \
        !          1276:     KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
        !          1277:     (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
        !          1278: }
        !          1279: #endif
        !          1280: 
        !          1281: 
        !          1282: /*++
        !          1283: 
        !          1284: VOID
        !          1285: NdisDprReleaseSpinLock(
        !          1286:     IN PNDIS_SPIN_LOCK SpinLock;
        !          1287:     );
        !          1288: 
        !          1289: --*/
        !          1290: 
        !          1291: #ifdef NDISDBG
        !          1292: #define NdisDprReleaseSpinLock(_SpinLock) { \
        !          1293:     IF_TRACE(TRACE_ALL) { \
        !          1294:         NdisPrint1("==>NdisDprReleaseSpinLock \n"); \
        !          1295:     } \
        !          1296:     KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock); \
        !          1297:     IF_TRACE(TRACE_ALL) { \
        !          1298:         NdisPrint1("<==NdisDprReleaseSpinLock\n"); \
        !          1299:     }\
        !          1300: }
        !          1301: #else
        !          1302: #define NdisDprReleaseSpinLock(_SpinLock) { \
        !          1303:     KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock); \
        !          1304: }
        !          1305: #endif
        !          1306: 
        !          1307: 
        !          1308: 
        !          1309: //
        !          1310: // Interlocked support functions
        !          1311: //
        !          1312: 
        !          1313: /*++
        !          1314: 
        !          1315: VOID
        !          1316: NdisInterlockedAddUlong(
        !          1317:     IN PULONG Addend,
        !          1318:     IN ULONG Increment,
        !          1319:     IN PNDIS_SPIN_LOCK SpinLock
        !          1320:     );
        !          1321: 
        !          1322: --*/
        !          1323: 
        !          1324: #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
        !          1325:     ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
        !          1326: 
        !          1327: 
        !          1328: /*++
        !          1329: 
        !          1330: PLIST_ENTRY
        !          1331: NdisInterlockedInsertHeadList(
        !          1332:     IN PLIST_ENTRY ListHead,
        !          1333:     IN PLIST_ENTRY ListEntry,
        !          1334:     IN PNDIS_SPIN_LOCK SpinLock
        !          1335:     );
        !          1336: 
        !          1337: --*/
        !          1338: 
        !          1339: #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
        !          1340:     ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
        !          1341: 
        !          1342: 
        !          1343: /*++
        !          1344: 
        !          1345: PLIST_ENTRY
        !          1346: NdisInterlockedInsertTailList(
        !          1347:     IN PLIST_ENTRY ListHead,
        !          1348:     IN PLIST_ENTRY ListEntry,
        !          1349:     IN PNDIS_SPIN_LOCK SpinLock
        !          1350:     );
        !          1351: 
        !          1352: --*/
        !          1353: 
        !          1354: #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
        !          1355:     ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
        !          1356: 
        !          1357: 
        !          1358: /*++
        !          1359: 
        !          1360: PLIST_ENTRY
        !          1361: NdisInterlockedRemoveHeadList(
        !          1362:     IN PLIST_ENTRY ListHead,
        !          1363:     IN PNDIS_SPIN_LOCK SpinLock
        !          1364:     );
        !          1365: 
        !          1366: --*/
        !          1367: 
        !          1368: #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
        !          1369:     ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
        !          1370: 
        !          1371: 
        !          1372: //
        !          1373: // Routines to access packet flags
        !          1374: //
        !          1375: 
        !          1376: /*++
        !          1377: 
        !          1378: VOID
        !          1379: NdisSetSendFlags(
        !          1380:     IN PNDIS_PACKET Packet,
        !          1381:     IN UINT Flags
        !          1382:     );
        !          1383: 
        !          1384: --*/
        !          1385: 
        !          1386: #define NdisSetSendFlags(_Packet,_Flags) \
        !          1387:     (_Packet)->Private.Flags = (_Flags)
        !          1388: 
        !          1389: /*++
        !          1390: 
        !          1391: VOID
        !          1392: NdisQuerySendFlags(
        !          1393:     IN PNDIS_PACKET Packet,
        !          1394:     OUT PUINT Flags
        !          1395:     );
        !          1396: 
        !          1397: --*/
        !          1398: 
        !          1399: #define NdisQuerySendFlags(_Packet,_Flags) \
        !          1400:     *(_Flags) = (_Packet)->Private.Flags
        !          1401: 
        !          1402: 
        !          1403: 
        !          1404: 
        !          1405: //
        !          1406: // general reference/dereference functions
        !          1407: //
        !          1408: 
        !          1409: INTERNAL
        !          1410: BOOLEAN
        !          1411: NdisReferenceRef(
        !          1412:     IN PREFERENCE RefP
        !          1413:     );
        !          1414: 
        !          1415: 
        !          1416: INTERNAL
        !          1417: BOOLEAN
        !          1418: NdisDereferenceRef(
        !          1419:     PREFERENCE RefP
        !          1420:     );
        !          1421: 
        !          1422: 
        !          1423: INTERNAL
        !          1424: VOID
        !          1425: NdisInitializeRef(
        !          1426:     PREFERENCE RefP
        !          1427:     );
        !          1428: 
        !          1429: 
        !          1430: INTERNAL
        !          1431: BOOLEAN
        !          1432: NdisCloseRef(
        !          1433:     PREFERENCE RefP
        !          1434:     );
        !          1435: 
        !          1436: 
        !          1437: /*++
        !          1438: INTERNAL
        !          1439: BOOLEAN
        !          1440: NdisReferenceProtocol(
        !          1441:     IN PNDIS_PROTOCOL_BLOCK ProtP
        !          1442:     );
        !          1443: --*/
        !          1444: 
        !          1445: #define NdisReferenceProtocol(ProtP) \
        !          1446:     NdisReferenceRef(&(ProtP)->Ref)
        !          1447: 
        !          1448: 
        !          1449: 
        !          1450: INTERNAL
        !          1451: BOOLEAN
        !          1452: QueueOpenOnProtocol(
        !          1453:     IN PNDIS_OPEN_BLOCK OpenP,
        !          1454:     IN PNDIS_PROTOCOL_BLOCK ProtP
        !          1455:     );
        !          1456: 
        !          1457: 
        !          1458: /*++
        !          1459: INTERNAL
        !          1460: VOID
        !          1461: NdisDereferenceProtocol(
        !          1462:     PNDIS_PROTOCOL_BLOCK ProtP
        !          1463:     );
        !          1464: --*/
        !          1465: #define NdisDereferenceProtocol(ProtP) { \
        !          1466:     if (NdisDereferenceRef(&(ProtP)->Ref)) { \
        !          1467:         ExFreePool((PVOID)(ProtP)); \
        !          1468:     } \
        !          1469: }
        !          1470: 
        !          1471: 
        !          1472: 
        !          1473: INTERNAL
        !          1474: VOID
        !          1475: NdisDeQueueOpenOnProtocol(
        !          1476:     PNDIS_OPEN_BLOCK OpenP,
        !          1477:     PNDIS_PROTOCOL_BLOCK ProtP
        !          1478:     );
        !          1479: 
        !          1480: 
        !          1481: INTERNAL
        !          1482: BOOLEAN
        !          1483: NdisFinishOpen(
        !          1484:     PNDIS_OPEN_BLOCK OpenP
        !          1485:     );
        !          1486: 
        !          1487: 
        !          1488: INTERNAL
        !          1489: VOID
        !          1490: NdisKillOpenAndNotifyProtocol(
        !          1491:     PNDIS_OPEN_BLOCK OldOpenP
        !          1492:     );
        !          1493: 
        !          1494: 
        !          1495: INTERNAL
        !          1496: BOOLEAN
        !          1497: NdisKillOpen(
        !          1498:     PNDIS_OPEN_BLOCK OldOpenP
        !          1499:     );
        !          1500: 
        !          1501: /*++
        !          1502: INTERNAL
        !          1503: BOOLEAN
        !          1504: NdisReferenceMac(
        !          1505:     IN PNDIS_MAC_BLOCK MacP
        !          1506:     );
        !          1507: --*/
        !          1508: #define NdisReferenceMac(MacP) \
        !          1509:     NdisReferenceRef(&(MacP)->Ref)
        !          1510: 
        !          1511: static
        !          1512: VOID
        !          1513: NdisDereferenceMac(
        !          1514:     PNDIS_MAC_BLOCK MacP
        !          1515:     );
        !          1516: 
        !          1517: INTERNAL
        !          1518: BOOLEAN
        !          1519: NdisQueueAdapterOnMac(
        !          1520:     PNDIS_ADAPTER_BLOCK AdaptP,
        !          1521:     PNDIS_MAC_BLOCK MacP
        !          1522:     );
        !          1523: 
        !          1524: INTERNAL
        !          1525: VOID
        !          1526: NdisDeQueueAdapterOnMac(
        !          1527:     PNDIS_ADAPTER_BLOCK AdaptP,
        !          1528:     PNDIS_MAC_BLOCK MacP
        !          1529:     );
        !          1530: 
        !          1531: /*++
        !          1532: INTERNAL
        !          1533: BOOLEAN
        !          1534: NdisReferenceAdapter(
        !          1535:     IN PNDIS_ADAPTER_BLOCK AdaptP
        !          1536:     );
        !          1537: --*/
        !          1538: #define NdisReferenceAdapter(AdaptP) \
        !          1539:     NdisReferenceRef(&(AdaptP)->Ref)
        !          1540: 
        !          1541: 
        !          1542: INTERNAL
        !          1543: BOOLEAN
        !          1544: NdisQueueOpenOnAdapter(
        !          1545:     PNDIS_OPEN_BLOCK OpenP,
        !          1546:     PNDIS_ADAPTER_BLOCK AdaptP
        !          1547:     );
        !          1548: 
        !          1549: INTERNAL
        !          1550: VOID
        !          1551: NdisKillAdapter(
        !          1552:     PNDIS_ADAPTER_BLOCK OldAdaptP
        !          1553:     );
        !          1554: 
        !          1555: INTERNAL
        !          1556: VOID
        !          1557: NdisDereferenceAdapter(
        !          1558:     PNDIS_ADAPTER_BLOCK AdaptP
        !          1559:     );
        !          1560: 
        !          1561: INTERNAL
        !          1562: VOID
        !          1563: NdisDeQueueOpenOnAdapter(
        !          1564:     PNDIS_OPEN_BLOCK OpenP,
        !          1565:     PNDIS_ADAPTER_BLOCK AdaptP
        !          1566:     );
        !          1567: 
        !          1568: INTERNAL
        !          1569: NDIS_STATUS
        !          1570: NdisCallDriverAddAdapter(
        !          1571:     IN PNDIS_MAC_BLOCK NewMacP
        !          1572:     );
        !          1573: 
        !          1574: //
        !          1575: // Configuration Requests
        !          1576: //
        !          1577: 
        !          1578: VOID
        !          1579: NdisOpenConfiguration(
        !          1580:     OUT PNDIS_STATUS Status,
        !          1581:     OUT PNDIS_HANDLE ConfigurationHandle,
        !          1582:     IN  NDIS_HANDLE WrapperConfigurationContext
        !          1583:     );
        !          1584: 
        !          1585: VOID
        !          1586: NdisReadConfiguration(
        !          1587:     OUT PNDIS_STATUS Status,
        !          1588:     OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
        !          1589:     IN NDIS_HANDLE ConfigurationHandle,
        !          1590:     IN PNDIS_STRING Keyword,
        !          1591:     IN NDIS_PARAMETER_TYPE ParameterType
        !          1592:     );
        !          1593: 
        !          1594: VOID
        !          1595: NdisCloseConfiguration(
        !          1596:     IN NDIS_HANDLE ConfigurationHandle
        !          1597:     );
        !          1598: 
        !          1599: VOID
        !          1600: NdisReadNetworkAddress(
        !          1601:     OUT PNDIS_STATUS Status,
        !          1602:     OUT PVOID * NetworkAddress,
        !          1603:     OUT PUINT NetworkAddressLength,
        !          1604:     IN NDIS_HANDLE ConfigurationHandle
        !          1605:     );
        !          1606: 
        !          1607: VOID
        !          1608: NdisReadBindingInformation(
        !          1609:     OUT PNDIS_STATUS Status,
        !          1610:     OUT PNDIS_STRING * Binding,
        !          1611:     IN NDIS_HANDLE ConfigurationHandle
        !          1612:     );
        !          1613: 
        !          1614: 
        !          1615: VOID
        !          1616: NdisReadEisaSlotInformation(
        !          1617:         OUT PNDIS_STATUS Status,
        !          1618:         IN  NDIS_HANDLE WrapperConfigurationContext,
        !          1619:         OUT PUINT SlotNumber,
        !          1620:         OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData
        !          1621:         );
        !          1622: 
        !          1623: VOID
        !          1624: NdisReadEisaSlotInformationEx(
        !          1625:         OUT PNDIS_STATUS Status,
        !          1626:         IN  NDIS_HANDLE WrapperConfigurationContext,
        !          1627:         OUT PUINT SlotNumber,
        !          1628:         OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
        !          1629:         OUT PUINT NumberOfFunctions
        !          1630:         );
        !          1631: 
        !          1632: VOID
        !          1633: NdisReadMcaPosInformation(
        !          1634:         OUT PNDIS_STATUS Status,
        !          1635:         IN  NDIS_HANDLE WrapperConfigurationContext,
        !          1636:         IN  PUINT ChannelNumber,
        !          1637:         OUT PNDIS_MCA_POS_DATA McaData
        !          1638:         );
        !          1639: 
        !          1640: //
        !          1641: // Packet and Buffer Requests
        !          1642: //
        !          1643: 
        !          1644: VOID
        !          1645: NdisAllocatePacketPool(
        !          1646:     OUT PNDIS_STATUS Status,
        !          1647:     OUT PNDIS_HANDLE PoolHandle,
        !          1648:     IN UINT NumberOfDescriptors,
        !          1649:     IN UINT ProtocolReservedLength
        !          1650:     );
        !          1651: 
        !          1652: 
        !          1653: #ifdef NDISDBG
        !          1654: VOID
        !          1655: NdisFreePacketPool(
        !          1656:     IN NDIS_HANDLE PoolHandle
        !          1657:     );
        !          1658: #else
        !          1659: #define NdisFreePacketPool(PoolHandle) {\
        !          1660:     NdisFreeSpinLock(&((PNDIS_PACKET_POOL)PoolHandle)->SpinLock);\
        !          1661:     ExFreePool(PoolHandle); \
        !          1662: }
        !          1663: #endif
        !          1664: 
        !          1665: VOID
        !          1666: NdisAllocateBufferPool(
        !          1667:     OUT PNDIS_STATUS Status,
        !          1668:     OUT PNDIS_HANDLE PoolHandle,
        !          1669:     IN UINT NumberOfDescriptors
        !          1670:     );
        !          1671: 
        !          1672: VOID
        !          1673: NdisFreeBufferPool(
        !          1674:     IN NDIS_HANDLE PoolHandle
        !          1675:     );
        !          1676: 
        !          1677: VOID
        !          1678: NdisAllocateBuffer(
        !          1679:     OUT PNDIS_STATUS Status,
        !          1680:     OUT PNDIS_BUFFER * Buffer,
        !          1681:     IN NDIS_HANDLE PoolHandle,
        !          1682:     IN PVOID VirtualAddress,
        !          1683:     IN UINT Length
        !          1684:     );
        !          1685: 
        !          1686: 
        !          1687: VOID
        !          1688: NdisCopyBuffer(
        !          1689:     OUT PNDIS_STATUS Status,
        !          1690:     OUT PNDIS_BUFFER * Buffer,
        !          1691:     IN NDIS_HANDLE PoolHandle,
        !          1692:     IN PVOID MemoryDescriptor,
        !          1693:     IN UINT Offset,
        !          1694:     IN UINT Length
        !          1695:     );
        !          1696: 
        !          1697: 
        !          1698: /*++
        !          1699: 
        !          1700: VOID
        !          1701: NdisFreeBuffer(
        !          1702:     IN PNDIS_BUFFER Buffer
        !          1703:     );
        !          1704: 
        !          1705: --*/
        !          1706: 
        !          1707: #define NdisFreeBuffer(Buffer) \
        !          1708:             IoFreeMdl(Buffer)
        !          1709: 
        !          1710: 
        !          1711: 
        !          1712: VOID
        !          1713: NdisQueryBuffer(
        !          1714:     IN PNDIS_BUFFER Buffer,
        !          1715:     OUT PVOID * VirtualAddress,
        !          1716:     OUT PUINT Length
        !          1717:     );
        !          1718: 
        !          1719: 
        !          1720: /*++
        !          1721: 
        !          1722: VOID
        !          1723: NdisGetBufferPhysicalArraySize(
        !          1724:     IN PNDIS_BUFFER Buffer,
        !          1725:     OUT PUINT ArraySize
        !          1726:     );
        !          1727: 
        !          1728: --*/
        !          1729: 
        !          1730: #define NdisGetBufferPhysicalArraySize(Buffer, ArraySize) \
        !          1731:     (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))
        !          1732: 
        !          1733: 
        !          1734: 
        !          1735: 
        !          1736: /*++
        !          1737: VOID
        !          1738: NdisBufferGetSystemSpecific(
        !          1739:     IN PNDIS_BUFFER Buffer,
        !          1740:     OUT PVOID * SystemSpecific
        !          1741:     );
        !          1742: --*/
        !          1743: 
        !          1744: //
        !          1745: //BUGBUG: What's system specific about this buffer anyway....
        !          1746: // Ask adam when he comes back.
        !          1747: #define NdisBufferGetSystemSpecific(Buffer, SystemSpecific) \
        !          1748:             *(SystemSpecific) = (Buffer)
        !          1749: 
        !          1750: 
        !          1751: /*++
        !          1752: 
        !          1753: VOID
        !          1754: NdisAdjustBufferLength(
        !          1755:     IN PNDIS_BUFFER Buffer,
        !          1756:     IN UINT Length
        !          1757:     );
        !          1758: 
        !          1759: --*/
        !          1760: 
        !          1761: #define NdisAdjustBufferLength(Buffer, Length) \
        !          1762:     (((Buffer)->ByteCount) = (Length))
        !          1763: 
        !          1764: 
        !          1765: /*++
        !          1766: 
        !          1767: NDIS_BUFFER_LINKAGE(
        !          1768:     IN PNDIS_BUFFER Buffer
        !          1769:     );
        !          1770: 
        !          1771: --*/
        !          1772: 
        !          1773: #define NDIS_BUFFER_LINKAGE(Buffer) \
        !          1774:     ((Buffer)->Next)
        !          1775: 
        !          1776: 
        !          1777: 
        !          1778: VOID
        !          1779: NdisAllocatePacket(
        !          1780:     OUT PNDIS_STATUS Status,
        !          1781:     OUT PNDIS_PACKET * Packet,
        !          1782:     IN NDIS_HANDLE PoolHandle
        !          1783:     );
        !          1784: 
        !          1785: 
        !          1786: #ifdef NDISDBG
        !          1787: VOID
        !          1788: NdisFreePacket(
        !          1789:     IN PNDIS_PACKET Packet
        !          1790:     );
        !          1791: #else
        !          1792: #define NdisFreePacket(Packet) {\
        !          1793:     NdisAcquireSpinLock(&(Packet)->Private.Pool->SpinLock); \
        !          1794:     (Packet)->Private.Head = (PNDIS_BUFFER)(Packet)->Private.Pool->FreeList; \
        !          1795:     (Packet)->Private.Pool->FreeList = (Packet); \
        !          1796:     NdisReleaseSpinLock(&(Packet)->Private.Pool->SpinLock); \
        !          1797: }
        !          1798: #endif
        !          1799: 
        !          1800: 
        !          1801: #ifdef NDISDBG
        !          1802: VOID
        !          1803: NdisReinitializePacket( \
        !          1804:     IN OUT PNDIS_PACKET Packet \
        !          1805:     );
        !          1806: #else
        !          1807: #define NdisReinitializePacket(Packet) { \
        !          1808:     (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
        !          1809:     (Packet)->Private.ValidCounts = FALSE; \
        !          1810: }
        !          1811: #endif
        !          1812: 
        !          1813: 
        !          1814: /*++
        !          1815: 
        !          1816: VOID
        !          1817: NdisRecalculatePacketCounts(
        !          1818:     IN OUT PNDIS_PACKET Packet
        !          1819:     );
        !          1820: 
        !          1821: --*/
        !          1822: 
        !          1823: #define NdisRecalculatePacketCounts(Packet) { \
        !          1824:     { \
        !          1825:         PNDIS_BUFFER TmpBuffer = (Packet)->Private.Head; \
        !          1826:         if (TmpBuffer) { \
        !          1827:             while (TmpBuffer->Next) { \
        !          1828:                 TmpBuffer = TmpBuffer->Next; \
        !          1829:             } \
        !          1830:             (Packet)->Private.Tail = TmpBuffer; \
        !          1831:         } \
        !          1832:         (Packet)->Private.ValidCounts = FALSE; \
        !          1833:     } \
        !          1834: }
        !          1835: 
        !          1836: 
        !          1837: #ifdef NDISDBG
        !          1838: VOID
        !          1839: NdisChainBufferAtFront(
        !          1840:     IN OUT PNDIS_PACKET Packet,
        !          1841:     IN OUT PNDIS_BUFFER Buffer
        !          1842:     );
        !          1843: #else
        !          1844: #define NdisChainBufferAtFront(Packet, Buffer) { \
        !          1845:     PNDIS_BUFFER TmpBuffer = (Buffer); \
        !          1846: \
        !          1847:     for (;;) { \
        !          1848:         if (TmpBuffer->Next == (PNDIS_BUFFER)NULL) \
        !          1849:             break; \
        !          1850:         TmpBuffer = TmpBuffer->Next; \
        !          1851:     } \
        !          1852:     if ((Packet)->Private.Head == (PNDIS_BUFFER)NULL) { \
        !          1853:         (Packet)->Private.Tail = TmpBuffer; \
        !          1854:     } \
        !          1855:     TmpBuffer->Next = (Packet)->Private.Head; \
        !          1856:     (Packet)->Private.Head = (Buffer); \
        !          1857:     (Packet)->Private.ValidCounts = FALSE; \
        !          1858: }
        !          1859: #endif
        !          1860: 
        !          1861: #ifdef NDISDBG
        !          1862: VOID
        !          1863: NdisChainBufferAtBack(
        !          1864:     IN OUT PNDIS_PACKET Packet,
        !          1865:     IN OUT PNDIS_BUFFER Buffer
        !          1866:     );
        !          1867: #else
        !          1868: #define NdisChainBufferAtBack(Packet, Buffer) { \
        !          1869:     PNDIS_BUFFER TmpBuffer = (Buffer); \
        !          1870: \
        !          1871:     for (;;) { \
        !          1872:         if (TmpBuffer->Next == (PNDIS_BUFFER)NULL) \
        !          1873:             break; \
        !          1874:         TmpBuffer = TmpBuffer->Next; \
        !          1875:     } \
        !          1876:     if ((Packet)->Private.Head != (PNDIS_BUFFER)NULL) { \
        !          1877:         (Packet)->Private.Tail->Next = (Buffer); \
        !          1878:     } else { \
        !          1879:         (Packet)->Private.Head = (Buffer); \
        !          1880:     } \
        !          1881:     (Packet)->Private.Tail = TmpBuffer; \
        !          1882:     TmpBuffer->Next = (PNDIS_BUFFER)NULL; \
        !          1883:     (Packet)->Private.ValidCounts = FALSE; \
        !          1884: }
        !          1885: #endif
        !          1886: 
        !          1887: VOID
        !          1888: NdisUnchainBufferAtFront(
        !          1889:     IN OUT PNDIS_PACKET Packet,
        !          1890:     OUT PNDIS_BUFFER * Buffer
        !          1891:     );
        !          1892: 
        !          1893: VOID
        !          1894: NdisUnchainBufferAtBack(
        !          1895:     IN OUT PNDIS_PACKET Packet,
        !          1896:     OUT PNDIS_BUFFER * Buffer
        !          1897:     );
        !          1898: 
        !          1899: 
        !          1900: #ifdef NDISDBG
        !          1901: VOID
        !          1902: NdisQueryPacket(
        !          1903:     IN PNDIS_PACKET Packet,
        !          1904:     OUT PUINT PhysicalBufferCount OPTIONAL,
        !          1905:     OUT PUINT BufferCount OPTIONAL,
        !          1906:     OUT PNDIS_BUFFER * FirstBuffer OPTIONAL,
        !          1907:     OUT PUINT TotalPacketLength OPTIONAL
        !          1908:     );
        !          1909: #else
        !          1910: #define NdisQueryPacket(Packet, PhysicalBufferCount, BufferCount, FirstBuffer, TotalPacketLength) \
        !          1911: { \
        !          1912:     PNDIS_PACKET _Packet = Packet; \
        !          1913:     PUINT _PhysicalBufferCount = PhysicalBufferCount; \
        !          1914:     PUINT _BufferCount = BufferCount; \
        !          1915:     PNDIS_BUFFER *_FirstBuffer = FirstBuffer; \
        !          1916:     PUINT _TotalPacketLength = TotalPacketLength; \
        !          1917:  \
        !          1918:     if (_FirstBuffer) *_FirstBuffer = (Packet)->Private.Head; \
        !          1919:     if (_PhysicalBufferCount || _BufferCount || _TotalPacketLength) { \
        !          1920:     if (!(Packet)->Private.ValidCounts) { \
        !          1921:         PNDIS_BUFFER TmpBuffer = (Packet)->Private.Head; \
        !          1922:         UINT PTotalLength = 0, PPhysicalCount = 0, PAddedCount = 0; \
        !          1923:     \
        !          1924:         while (TmpBuffer != (PNDIS_BUFFER)NULL) { \
        !          1925:             PTotalLength += MmGetMdlByteCount(TmpBuffer); \
        !          1926:             PPhysicalCount += NDIS_BUFFER_TO_SPAN_PAGES(TmpBuffer); \
        !          1927:             ++PAddedCount; \
        !          1928:             TmpBuffer = TmpBuffer->Next; \
        !          1929:         } \
        !          1930:         (Packet)->Private.Count = PAddedCount; \
        !          1931:         (Packet)->Private.TotalLength = PTotalLength; \
        !          1932:         (Packet)->Private.PhysicalCount = PPhysicalCount; \
        !          1933:         (Packet)->Private.ValidCounts = TRUE; \
        !          1934:     } \
        !          1935:     if (_PhysicalBufferCount) *_PhysicalBufferCount = (Packet)->Private.PhysicalCount; \
        !          1936:     if (_BufferCount) *_BufferCount = (Packet)->Private.Count; \
        !          1937:     if (_TotalPacketLength) *_TotalPacketLength = (Packet)->Private.TotalLength; \
        !          1938:     } \
        !          1939: }
        !          1940: #endif
        !          1941: 
        !          1942: 
        !          1943: #ifdef NDISDBG
        !          1944: VOID
        !          1945: NdisGetNextBuffer(
        !          1946:     IN PNDIS_BUFFER CurrentBuffer,
        !          1947:     OUT PNDIS_BUFFER * NextBuffer
        !          1948:     );
        !          1949: #else
        !          1950: #define NdisGetNextBuffer(CurrentBuffer, NextBuffer) {\
        !          1951:     *(NextBuffer) = (CurrentBuffer)->Next; \
        !          1952: }
        !          1953: #endif
        !          1954: 
        !          1955: 
        !          1956: VOID
        !          1957: NdisCopyFromPacketToPacket(
        !          1958:     IN PNDIS_PACKET Destination,
        !          1959:     IN UINT DestinationOffset,
        !          1960:     IN UINT BytesToCopy,
        !          1961:     IN PNDIS_PACKET Source,
        !          1962:     IN UINT SourceOffset,
        !          1963:     OUT PUINT BytesCopied
        !          1964:     );
        !          1965: 
        !          1966: 
        !          1967: //
        !          1968: // Operating System Requests
        !          1969: //
        !          1970: 
        !          1971: VOID
        !          1972: NdisMapIoSpace(
        !          1973:     OUT PNDIS_STATUS Status,
        !          1974:     OUT PVOID * VirtualAddress,
        !          1975:     IN NDIS_HANDLE NdisAdapterHandle,
        !          1976:     IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
        !          1977:     IN UINT Length
        !          1978:     );
        !          1979: 
        !          1980: #ifdef _ALPHA_
        !          1981: 
        !          1982: /*++
        !          1983: VOID
        !          1984: NdisUnmapIoSpace(
        !          1985:     IN NDIS_HANDLE NdisAdapterHandle,
        !          1986:     IN PVOID VirtualAddress,
        !          1987:     IN UINT Length
        !          1988:     )
        !          1989: --*/
        !          1990: #define NdisUnmapIoSpace(Handle,VirtualAddress,Length) {}
        !          1991: 
        !          1992: #else
        !          1993: 
        !          1994: /*++
        !          1995: VOID
        !          1996: NdisUnmapIoSpace(
        !          1997:     IN NDIS_HANDLE NdisAdapterHandle,
        !          1998:     IN PVOID VirtualAddress,
        !          1999:     IN UINT Length
        !          2000:     )
        !          2001: --*/
        !          2002: #define NdisUnmapIoSpace(Handle,VirtualAddress,Length) \
        !          2003:             MmUnmapIoSpace((VirtualAddress), (Length));
        !          2004: 
        !          2005: #endif
        !          2006: 
        !          2007: 
        !          2008: NDIS_STATUS
        !          2009: NdisAllocateMemory(
        !          2010:     OUT PVOID *VirtualAddress,
        !          2011:     IN UINT Length,
        !          2012:     IN UINT MemoryFlags,
        !          2013:     IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
        !          2014:     );
        !          2015: 
        !          2016: 
        !          2017: VOID
        !          2018: NdisFreeMemory(
        !          2019:     IN PVOID VirtualAddress,
        !          2020:     IN UINT Length,
        !          2021:     IN UINT MemoryFlags
        !          2022:     );
        !          2023: 
        !          2024: typedef
        !          2025: VOID
        !          2026: (*PNDIS_TIMER_FUNCTION) (
        !          2027:     IN PVOID SystemSpecific1,
        !          2028:     IN PVOID FunctionContext,
        !          2029:     IN PVOID SystemSpecific2,
        !          2030:     IN PVOID SystemSpecific3
        !          2031:     );
        !          2032: 
        !          2033: VOID
        !          2034: NdisInitializeTimer(
        !          2035:     IN OUT PNDIS_TIMER Timer,
        !          2036:     IN PNDIS_TIMER_FUNCTION TimerFunction,
        !          2037:     IN PVOID FunctionContext
        !          2038:     );
        !          2039: 
        !          2040: VOID
        !          2041: NdisSetTimer(
        !          2042:     IN PNDIS_TIMER Timer,
        !          2043:     IN UINT MillisecondsToDelay
        !          2044:     );
        !          2045: 
        !          2046: /*++
        !          2047: VOID
        !          2048: NdisCancelTimer(
        !          2049:     IN PNDIS_TIMER Timer,
        !          2050:     OUT PBOOLEAN TimerCancelled
        !          2051:     )
        !          2052: --*/
        !          2053: #define NdisCancelTimer(NdisTimer,TimerCancelled) \
        !          2054:             (*(TimerCancelled) = KeCancelTimer(&((NdisTimer)->Timer)))
        !          2055: 
        !          2056: /*++
        !          2057: VOID
        !          2058: NdisStallExecution(
        !          2059:     IN UINT MicrosecondsToStall
        !          2060:     )
        !          2061: --*/
        !          2062: 
        !          2063: #define NdisStallExecution(MicroSecondsToStall) \
        !          2064:         KeStallExecutionProcessor(MicroSecondsToStall)
        !          2065: 
        !          2066: 
        !          2067: VOID
        !          2068: NdisInitializeInterrupt(
        !          2069:     OUT PNDIS_STATUS Status,
        !          2070:     IN OUT PNDIS_INTERRUPT Interrupt,
        !          2071:     IN NDIS_HANDLE NdisAdapterHandle,
        !          2072:     IN PNDIS_INTERRUPT_SERVICE InterruptServiceRoutine,
        !          2073:     IN PVOID InterruptContext,
        !          2074:     IN PNDIS_DEFERRED_PROCESSING DeferredProcessingRoutine,
        !          2075:     IN UINT InterruptVector,
        !          2076:     IN UINT InterruptLevel,
        !          2077:     IN BOOLEAN SharedInterrupt,
        !          2078:     IN NDIS_INTERRUPT_MODE InterruptMode
        !          2079:     );
        !          2080: 
        !          2081: VOID
        !          2082: NdisRemoveInterrupt(
        !          2083:     IN PNDIS_INTERRUPT Interrupt
        !          2084:     );
        !          2085: 
        !          2086: /*++
        !          2087: BOOLEAN
        !          2088: NdisSynchronizeWithInterrupt(
        !          2089:     IN PNDIS_INTERRUPT Interrupt,
        !          2090:     IN PVOID SynchronizeFunction,
        !          2091:     IN PVOID SynchronizeContext
        !          2092:     )
        !          2093: --*/
        !          2094: 
        !          2095: #define NdisSynchronizeWithInterrupt(Interrupt,Function,Context) \
        !          2096:             KeSynchronizeExecution( \
        !          2097:                 (Interrupt)->InterruptObject,\
        !          2098:                 (PKSYNCHRONIZE_ROUTINE)Function,\
        !          2099:                 Context  \
        !          2100:                 )
        !          2101: 
        !          2102: //
        !          2103: // Simple I/O support
        !          2104: //
        !          2105: 
        !          2106: VOID
        !          2107: NdisOpenFile(
        !          2108:     OUT PNDIS_STATUS Status,
        !          2109:     OUT PNDIS_HANDLE FileHandle,
        !          2110:     OUT PUINT FileLength,
        !          2111:     IN PNDIS_STRING FileName,
        !          2112:     IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
        !          2113:     );
        !          2114: 
        !          2115: VOID
        !          2116: NdisCloseFile(
        !          2117:     IN NDIS_HANDLE FileHandle
        !          2118:     );
        !          2119: 
        !          2120: VOID
        !          2121: NdisMapFile(
        !          2122:     OUT PNDIS_STATUS Status,
        !          2123:     OUT PVOID * MappedBuffer,
        !          2124:     IN NDIS_HANDLE FileHandle
        !          2125:     );
        !          2126: 
        !          2127: VOID
        !          2128: NdisUnmapFile(
        !          2129:     IN NDIS_HANDLE FileHandle
        !          2130:     );
        !          2131: 
        !          2132: 
        !          2133: //
        !          2134: // Portability extensions
        !          2135: //
        !          2136: 
        !          2137: /*++
        !          2138: VOID
        !          2139: NdisFlushBuffer(
        !          2140:         IN PNDIS_BUFFER Buffer,
        !          2141:         IN BOOLEAN WriteToDevice
        !          2142:         )
        !          2143: --*/
        !          2144: 
        !          2145: #define NdisFlushBuffer(Buffer,WriteToDevice) \
        !          2146:         KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE)
        !          2147: 
        !          2148: 
        !          2149: /*++
        !          2150: ULONG
        !          2151: NdisGetCacheFillSize(
        !          2152:     )
        !          2153: --*/
        !          2154: #define NdisGetCacheFillSize() \
        !          2155:         HalGetDmaAlignmentRequirement()
        !          2156: 
        !          2157: //
        !          2158: // This macro is used to convert a port number as the caller
        !          2159: // thinks of it, to a port number as it should be passed to
        !          2160: // READ/WRITE_PORT.
        !          2161: //
        !          2162: 
        !          2163: #define NDIS_PORT_TO_PORT(Handle,Port)  (((PNDIS_ADAPTER_BLOCK)(Handle))->PortOffset + (Port))
        !          2164: 
        !          2165: 
        !          2166: //
        !          2167: // Write Port
        !          2168: //
        !          2169: 
        !          2170: /*++
        !          2171: VOID
        !          2172: NdisWritePortUchar(
        !          2173:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2174:         IN ULONG Port,
        !          2175:         IN UCHAR Data
        !          2176:         )
        !          2177: --*/
        !          2178: #define NdisWritePortUchar(Handle,Port,Data) \
        !          2179:         WRITE_PORT_UCHAR((PUCHAR)(NDIS_PORT_TO_PORT(Handle,Port)),(UCHAR)(Data))
        !          2180: 
        !          2181: /*++
        !          2182: VOID
        !          2183: NdisWritePortUshort(
        !          2184:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2185:         IN ULONG Port,
        !          2186:         IN USHORT Data
        !          2187:         )
        !          2188: --*/
        !          2189: #define NdisWritePortUshort(Handle,Port,Data) \
        !          2190:         WRITE_PORT_USHORT((PUSHORT)(NDIS_PORT_TO_PORT(Handle,Port)),(USHORT)(Data))
        !          2191: 
        !          2192: 
        !          2193: /*++
        !          2194: VOID
        !          2195: NdisWritePortUlong(
        !          2196:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2197:         IN ULONG Port,
        !          2198:         IN ULONG Data
        !          2199:         )
        !          2200: --*/
        !          2201: #define NdisWritePortUlong(Handle,Port,Data) \
        !          2202:         WRITE_PORT_ULONG((PULONG)(NDIS_PORT_TO_PORT(Handle,Port)),(ULONG)(Data))
        !          2203: 
        !          2204: 
        !          2205: //
        !          2206: // Write Port Buffers
        !          2207: //
        !          2208: 
        !          2209: /*++
        !          2210: VOID
        !          2211: NdisWritePortBufferUchar(
        !          2212:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2213:         IN ULONG Port,
        !          2214:         IN PUCHAR Buffer,
        !          2215:         IN ULONG Length
        !          2216:         )
        !          2217: --*/
        !          2218: #ifdef _M_IX86
        !          2219: #define NdisWritePortBufferUchar(Handle,Port,Buffer,Length) \
        !          2220:         WRITE_PORT_BUFFER_UCHAR((PUCHAR)(NDIS_PORT_TO_PORT(Handle,Port)),(PUCHAR)(Buffer),(Length))
        !          2221: #else
        !          2222: #define NdisWritePortBufferUchar(Handle,Port,Buffer,Length) \
        !          2223: { \
        !          2224:         ULONG _Port = (ULONG)NDIS_PORT_TO_PORT(Handle, Port); \
        !          2225:         PUCHAR _Current = (Buffer); \
        !          2226:         PUCHAR _End = _Current + (Length); \
        !          2227:         for ( ; _Current < _End; ++_Current) { \
        !          2228:             WRITE_PORT_UCHAR((PUCHAR)_Port,*_Current); \
        !          2229:         } \
        !          2230: }
        !          2231: #endif
        !          2232: 
        !          2233: /*++
        !          2234: VOID
        !          2235: NdisWritePortBufferUshort(
        !          2236:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2237:         IN ULONG Port,
        !          2238:         IN PUSHORT Buffer,
        !          2239:         IN ULONG Length
        !          2240:         )
        !          2241: --*/
        !          2242: #ifdef _M_IX86
        !          2243: #define NdisWritePortBufferUshort(Handle,Port,Buffer,Length) \
        !          2244:         WRITE_PORT_BUFFER_USHORT((PUSHORT)(NDIS_PORT_TO_PORT(Handle,Port)),(PUSHORT)(Buffer),(Length))
        !          2245: #else
        !          2246: #define NdisWritePortBufferUshort(Handle,Port,Buffer,Length) \
        !          2247: { \
        !          2248:         ULONG _Port = (ULONG)NDIS_PORT_TO_PORT(Handle, Port); \
        !          2249:         PUSHORT _Current = (Buffer); \
        !          2250:         PUSHORT _End = _Current + (Length); \
        !          2251:         for ( ; _Current < _End; ++_Current) { \
        !          2252:             WRITE_PORT_USHORT((PUSHORT)_Port,*(UNALIGNED USHORT *)_Current); \
        !          2253:         } \
        !          2254: }
        !          2255: #endif
        !          2256: 
        !          2257: 
        !          2258: /*++
        !          2259: VOID
        !          2260: NdisWritePortBufferUlong(
        !          2261:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2262:         IN ULONG Port,
        !          2263:         IN PULONG Buffer,
        !          2264:         IN ULONG Length
        !          2265:         )
        !          2266: --*/
        !          2267: #ifdef _M_IX86
        !          2268: #define NdisWritePortBufferUlong(Handle,Port,Buffer,Length) \
        !          2269:         WRITE_PORT_BUFFER_ULONG((PULONG)(NDIS_PORT_TO_PORT(Handle,Port)),(PULONG)(Buffer),(Length))
        !          2270: #else
        !          2271: #define NdisWritePortBufferUlong(Handle,Port,Buffer,Length) \
        !          2272: { \
        !          2273:         ULONG _Port = (ULONG)NDIS_PORT_TO_PORT(Handle, Port); \
        !          2274:         PULONG _Current = (Buffer); \
        !          2275:         PULONG _End = _Current + (Length); \
        !          2276:         for ( ; _Current < _End; ++_Current) { \
        !          2277:             WRITE_PORT_ULONG((PULONG)_Port,*(UNALIGNED ULONG *)_Current); \
        !          2278:         } \
        !          2279: }
        !          2280: #endif
        !          2281: 
        !          2282: 
        !          2283: //
        !          2284: // Read Ports
        !          2285: //
        !          2286: 
        !          2287: /*++
        !          2288: VOID
        !          2289: NdisReadPortUchar(
        !          2290:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2291:         IN ULONG Port,
        !          2292:         OUT PUCHAR Data
        !          2293:         )
        !          2294: --*/
        !          2295: #define NdisReadPortUchar(Handle,Port, Data) \
        !          2296:         *(Data) = READ_PORT_UCHAR((PUCHAR)(NDIS_PORT_TO_PORT(Handle,Port)))
        !          2297: 
        !          2298: /*++
        !          2299: VOID
        !          2300: NdisReadPortUshort(
        !          2301:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2302:         IN ULONG Port,
        !          2303:         OUT PUSHORT Data
        !          2304:         )
        !          2305: --*/
        !          2306: #define NdisReadPortUshort(Handle,Port,Data) \
        !          2307:         *(Data) = READ_PORT_USHORT((PUSHORT)(NDIS_PORT_TO_PORT(Handle,Port)))
        !          2308: 
        !          2309: 
        !          2310: /*++
        !          2311: VOID
        !          2312: NdisReadPortUlong(
        !          2313:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2314:         IN ULONG Port,
        !          2315:         OUT PULONG Data
        !          2316:         )
        !          2317: --*/
        !          2318: #define NdisReadPortUlong(Handle,Port,Data) \
        !          2319:         *(Data) = READ_PORT_ULONG((PULONG)(NDIS_PORT_TO_PORT(Handle,Port)))
        !          2320: 
        !          2321: //
        !          2322: // Read Buffer Ports
        !          2323: //
        !          2324: 
        !          2325: /*++
        !          2326: VOID
        !          2327: NdisReadPortBufferUchar(
        !          2328:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2329:         IN ULONG Port,
        !          2330:         OUT PUCHAR Buffer,
        !          2331:         IN ULONG Length
        !          2332:         )
        !          2333: --*/
        !          2334: #ifdef _M_IX86
        !          2335: #define NdisReadPortBufferUchar(Handle,Port,Buffer,Length) \
        !          2336:         READ_PORT_BUFFER_UCHAR((PUCHAR)(NDIS_PORT_TO_PORT(Handle,Port)),(PUCHAR)(Buffer),(Length))
        !          2337: #else
        !          2338: #define NdisReadPortBufferUchar(Handle,Port,Buffer,Length) \
        !          2339: { \
        !          2340:         ULONG _Port = (ULONG)NDIS_PORT_TO_PORT(Handle, Port); \
        !          2341:         PUCHAR _Current = (Buffer); \
        !          2342:         PUCHAR _End = _Current + (Length); \
        !          2343:         for ( ; _Current < _End; ++_Current) { \
        !          2344:             *_Current = READ_PORT_UCHAR((PUCHAR)_Port); \
        !          2345:         } \
        !          2346: }
        !          2347: #endif
        !          2348: 
        !          2349: /*++
        !          2350: VOID
        !          2351: NdisReadPortBufferUshort(
        !          2352:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2353:         IN ULONG Port,
        !          2354:         OUT PUSHORT Buffer,
        !          2355:         IN ULONG Length
        !          2356:         )
        !          2357: --*/
        !          2358: #ifdef _M_IX86
        !          2359: #define NdisReadPortBufferUshort(Handle,Port,Buffer,Length) \
        !          2360:         READ_PORT_BUFFER_USHORT((PUSHORT)(NDIS_PORT_TO_PORT(Handle,Port)),(PUSHORT)(Buffer),(Length))
        !          2361: #else
        !          2362: #define NdisReadPortBufferUshort(Handle,Port,Buffer,Length) \
        !          2363: { \
        !          2364:         ULONG _Port = (ULONG)NDIS_PORT_TO_PORT(Handle, Port); \
        !          2365:         PUSHORT _Current = (Buffer); \
        !          2366:         PUSHORT _End = _Current + (Length); \
        !          2367:         for ( ; _Current < _End; ++_Current) { \
        !          2368:             *(UNALIGNED USHORT *)_Current = READ_PORT_USHORT((PUSHORT)_Port); \
        !          2369:         } \
        !          2370: }
        !          2371: #endif
        !          2372: 
        !          2373: 
        !          2374: /*++
        !          2375: VOID
        !          2376: NdisReadPortBufferUlong(
        !          2377:         IN NDIS_HANDLE NdisAdapterHandle,
        !          2378:         IN ULONG Port,
        !          2379:         OUT PULONG Buffer,
        !          2380:         IN ULONG Length
        !          2381:         )
        !          2382: --*/
        !          2383: #ifdef _M_IX86
        !          2384: #define NdisReadPortBufferUlong(Handle,Port,Buffer) \
        !          2385:         READ_PORT_BUFFER_ULONG((PULONG)(NDIS_PORT_TO_PORT(Handle,Port)),(PULONG)(Buffer),(Length))
        !          2386: #else
        !          2387: #define NdisReadPortBufferUlong(Handle,Port,Buffer,Length) \
        !          2388: { \
        !          2389:         ULONG _Port = (ULONG)NDIS_PORT_TO_PORT(Handle, Port); \
        !          2390:         PULONG _Current = (Buffer); \
        !          2391:         PULONG _End = _Current + (Length); \
        !          2392:         for ( ; _Current < _End; ++_Current) { \
        !          2393:             *(UNALIGNED ULONG *)_Current = READ_PORT_ULONG((PULONG)_Port); \
        !          2394:         } \
        !          2395: }
        !          2396: #endif
        !          2397: 
        !          2398: 
        !          2399: //
        !          2400: // Raw Routines
        !          2401: //
        !          2402: 
        !          2403: //
        !          2404: // Write Port Raw
        !          2405: //
        !          2406: 
        !          2407: /*++
        !          2408: VOID
        !          2409: NdisRawWritePortUchar(
        !          2410:         IN ULONG Port,
        !          2411:         IN UCHAR Data
        !          2412:         )
        !          2413: --*/
        !          2414: #define NdisRawWritePortUchar(Port,Data) \
        !          2415:         WRITE_PORT_UCHAR((PUCHAR)(Port),(UCHAR)(Data))
        !          2416: 
        !          2417: /*++
        !          2418: VOID
        !          2419: NdisRawWritePortUshort(
        !          2420:         IN ULONG Port,
        !          2421:         IN USHORT Data
        !          2422:         )
        !          2423: --*/
        !          2424: #define NdisRawWritePortUshort(Port,Data) \
        !          2425:         WRITE_PORT_USHORT((PUSHORT)(Port),(USHORT)(Data))
        !          2426: 
        !          2427: 
        !          2428: /*++
        !          2429: VOID
        !          2430: NdisRawWritePortUlong(
        !          2431:         IN ULONG Port,
        !          2432:         IN ULONG Data
        !          2433:         )
        !          2434: --*/
        !          2435: #define NdisRawWritePortUlong(Port,Data) \
        !          2436:         WRITE_PORT_ULONG((PULONG)(Port),(ULONG)(Data))
        !          2437: 
        !          2438: 
        !          2439: //
        !          2440: // Raw Write Port Buffers
        !          2441: //
        !          2442: 
        !          2443: /*++
        !          2444: VOID
        !          2445: NdisRawWritePortBufferUchar(
        !          2446:         IN ULONG Port,
        !          2447:         IN PUCHAR Buffer,
        !          2448:         IN ULONG Length
        !          2449:         )
        !          2450: --*/
        !          2451: #ifdef _M_IX86
        !          2452: #define NdisRawWritePortBufferUchar(Port,Buffer,Length) \
        !          2453:         WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length))
        !          2454: #else
        !          2455: #define NdisRawWritePortBufferUchar(Port,Buffer,Length) \
        !          2456: { \
        !          2457:         ULONG _Port = (ULONG)(Port); \
        !          2458:         PUCHAR _Current = (Buffer); \
        !          2459:         PUCHAR _End = _Current + (Length); \
        !          2460:         for ( ; _Current < _End; ++_Current) { \
        !          2461:             WRITE_PORT_UCHAR((PUCHAR)_Port,*_Current); \
        !          2462:         } \
        !          2463: }
        !          2464: #endif
        !          2465: 
        !          2466: /*++
        !          2467: VOID
        !          2468: NdisRawWritePortBufferUshort(
        !          2469:         IN ULONG Port,
        !          2470:         IN PUSHORT Buffer,
        !          2471:         IN ULONG Length
        !          2472:         )
        !          2473: --*/
        !          2474: #ifdef _M_IX86
        !          2475: #define NdisRawWritePortBufferUshort(Port,Buffer,Length) \
        !          2476:         WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port),(PUSHORT)(Buffer),(Length))
        !          2477: #else
        !          2478: #define NdisRawWritePortBufferUshort(Port,Buffer,Length) \
        !          2479: { \
        !          2480:         ULONG _Port = (ULONG)(Port); \
        !          2481:         PUSHORT _Current = (Buffer); \
        !          2482:         PUSHORT _End = _Current + (Length); \
        !          2483:         for ( ; _Current < _End; ++_Current) { \
        !          2484:             WRITE_PORT_USHORT((PUSHORT)_Port,*(UNALIGNED USHORT *)_Current); \
        !          2485:         } \
        !          2486: }
        !          2487: #endif
        !          2488: 
        !          2489: 
        !          2490: /*++
        !          2491: VOID
        !          2492: NdisRawWritePortBufferUlong(
        !          2493:         IN ULONG Port,
        !          2494:         IN PULONG Buffer,
        !          2495:         IN ULONG Length
        !          2496:         )
        !          2497: --*/
        !          2498: #ifdef _M_IX86
        !          2499: #define NdisRawWritePortBufferUlong(Port,Buffer,Length) \
        !          2500:         WRITE_PORT_BUFFER_ULONG((PULONG)(Port),(PULONG)(Buffer),(Length))
        !          2501: #else
        !          2502: #define NdisRawWritePortBufferUlong(Port,Buffer,Length) \
        !          2503: { \
        !          2504:         ULONG _Port = (ULONG)(Port); \
        !          2505:         PULONG _Current = (Buffer); \
        !          2506:         PULONG _End = _Current + (Length); \
        !          2507:         for ( ; _Current < _End; ++_Current) { \
        !          2508:             WRITE_PORT_ULONG((PULONG)_Port,*(UNALIGNED ULONG *)_Current); \
        !          2509:         } \
        !          2510: }
        !          2511: #endif
        !          2512: 
        !          2513: 
        !          2514: //
        !          2515: // Raw Read Ports
        !          2516: //
        !          2517: 
        !          2518: /*++
        !          2519: VOID
        !          2520: NdisRawReadPortUchar(
        !          2521:         IN ULONG Port,
        !          2522:         OUT PUCHAR Data
        !          2523:         )
        !          2524: --*/
        !          2525: #define NdisRawReadPortUchar(Port, Data) \
        !          2526:         *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
        !          2527: 
        !          2528: /*++
        !          2529: VOID
        !          2530: NdisRawReadPortUshort(
        !          2531:         IN ULONG Port,
        !          2532:         OUT PUSHORT Data
        !          2533:         )
        !          2534: --*/
        !          2535: #define NdisRawReadPortUshort(Port,Data) \
        !          2536:         *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
        !          2537: 
        !          2538: 
        !          2539: /*++
        !          2540: VOID
        !          2541: NdisRawReadPortUlong(
        !          2542:         IN ULONG Port,
        !          2543:         OUT PULONG Data
        !          2544:         )
        !          2545: --*/
        !          2546: #define NdisRawReadPortUlong(Port,Data) \
        !          2547:         *(Data) = READ_PORT_ULONG((PULONG)(Port))
        !          2548: 
        !          2549: //
        !          2550: // Raw Read Buffer Ports
        !          2551: //
        !          2552: 
        !          2553: /*++
        !          2554: VOID
        !          2555: NdisRawReadPortBufferUchar(
        !          2556:         IN ULONG Port,
        !          2557:         OUT PUCHAR Buffer,
        !          2558:         IN ULONG Length
        !          2559:         )
        !          2560: --*/
        !          2561: #ifdef _M_IX86
        !          2562: #define NdisRawReadPortBufferUchar(Port,Buffer,Length) \
        !          2563:         READ_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length))
        !          2564: #else
        !          2565: #define NdisRawReadPortBufferUchar(Port,Buffer,Length) \
        !          2566: { \
        !          2567:         ULONG _Port = (ULONG)(Port); \
        !          2568:         PUCHAR _Current = (Buffer); \
        !          2569:         PUCHAR _End = _Current + (Length); \
        !          2570:         for ( ; _Current < _End; ++_Current) { \
        !          2571:             *_Current = READ_PORT_UCHAR((PUCHAR)_Port); \
        !          2572:         } \
        !          2573: }
        !          2574: #endif
        !          2575: 
        !          2576: /*++
        !          2577: VOID
        !          2578: NdisRawReadPortBufferUshort(
        !          2579:         IN ULONG Port,
        !          2580:         OUT PUSHORT Buffer,
        !          2581:         IN ULONG Length
        !          2582:         )
        !          2583: --*/
        !          2584: #ifdef _M_IX86
        !          2585: #define NdisRawReadPortBufferUshort(Port,Buffer,Length) \
        !          2586:         READ_PORT_BUFFER_USHORT((PUSHORT)(Port),(PUSHORT)(Buffer),(Length))
        !          2587: #else
        !          2588: #define NdisRawReadPortBufferUshort(Port,Buffer,Length) \
        !          2589: { \
        !          2590:         ULONG _Port = (ULONG)(Port); \
        !          2591:         PUSHORT _Current = (Buffer); \
        !          2592:         PUSHORT _End = _Current + (Length); \
        !          2593:         for ( ; _Current < _End; ++_Current) { \
        !          2594:             *(UNALIGNED USHORT *)_Current = READ_PORT_USHORT((PUSHORT)_Port); \
        !          2595:         } \
        !          2596: }
        !          2597: #endif
        !          2598: 
        !          2599: 
        !          2600: /*++
        !          2601: VOID
        !          2602: NdisRawReadPortBufferUlong(
        !          2603:         IN ULONG Port,
        !          2604:         OUT PULONG Buffer,
        !          2605:         IN ULONG Length
        !          2606:         )
        !          2607: --*/
        !          2608: #ifdef _M_IX86
        !          2609: #define NdisRawReadPortBufferUlong(Port,Buffer,Length) \
        !          2610:         READ_PORT_BUFFER_ULONG((PULONG)(Port),(PULONG)(Buffer),(Length))
        !          2611: #else
        !          2612: #define NdisRawReadPortBufferUlong(Port,Buffer,Length) \
        !          2613: { \
        !          2614:         ULONG _Port = (ULONG)(Port); \
        !          2615:         PULONG _Current = (Buffer); \
        !          2616:         PULONG _End = _Current + (Length); \
        !          2617:         for ( ; _Current < _End; ++_Current) { \
        !          2618:             *(UNALIGNED ULONG *)_Current = READ_PORT_ULONG((PULONG)_Port); \
        !          2619:         } \
        !          2620: }
        !          2621: #endif
        !          2622: 
        !          2623: 
        !          2624: 
        !          2625: 
        !          2626: 
        !          2627: 
        !          2628: //
        !          2629: // Write Registers
        !          2630: //
        !          2631: 
        !          2632: /*++
        !          2633: VOID
        !          2634: NdisWriteRegisterUchar(
        !          2635:         IN PUCHAR Register,
        !          2636:         IN UCHAR Data
        !          2637:         )
        !          2638: --*/
        !          2639: 
        !          2640: #ifdef  _M_IX86
        !          2641: 
        !          2642: #define NdisWriteRegisterUchar(Register,Data) \
        !          2643:     *((PUCHAR)(Register)) = (Data)
        !          2644: 
        !          2645: #else
        !          2646: 
        !          2647: #define NdisWriteRegisterUchar(Register,Data) \
        !          2648: { \
        !          2649:         WRITE_REGISTER_UCHAR((Register),(Data)); \
        !          2650:         READ_REGISTER_UCHAR(Register); \
        !          2651: }
        !          2652: 
        !          2653: #endif
        !          2654: 
        !          2655: /*++
        !          2656: VOID
        !          2657: NdisWriteRegisterUshort(
        !          2658:         IN PUSHORT Register,
        !          2659:         IN USHORT Data
        !          2660:         )
        !          2661: --*/
        !          2662: 
        !          2663: #ifdef  _M_IX86
        !          2664: 
        !          2665: #define NdisWriteRegisterUshort(Register,Data) \
        !          2666:     *((PUSHORT)(Register)) = (Data)
        !          2667: 
        !          2668: #else
        !          2669: 
        !          2670: #define NdisWriteRegisterUshort(Register,Data) \
        !          2671: { \
        !          2672:         WRITE_REGISTER_USHORT((Register),(Data)); \
        !          2673:         READ_REGISTER_USHORT(Register); \
        !          2674: }
        !          2675: 
        !          2676: #endif
        !          2677: 
        !          2678: /*++
        !          2679: VOID
        !          2680: NdisWriteRegisterUlong(
        !          2681:         IN PULONG Register,
        !          2682:         IN ULONG Data
        !          2683:         )
        !          2684: --*/
        !          2685: 
        !          2686: #ifdef  _M_IX86
        !          2687: 
        !          2688: #define NdisWriteRegisterUlong(Register,Data) \
        !          2689:     *((PULONG)(Register)) = (Data)
        !          2690: 
        !          2691: #else
        !          2692: 
        !          2693: #define NdisWriteRegisterUlong(Register,Data) \
        !          2694: { \
        !          2695:         WRITE_REGISTER_ULONG((Register),(Data)); \
        !          2696:         READ_REGISTER_ULONG(Register); \
        !          2697: }
        !          2698: 
        !          2699: #endif
        !          2700: 
        !          2701: /*++
        !          2702: VOID
        !          2703: NdisReadRegisterUchar(
        !          2704:         IN PUCHAR Register,
        !          2705:         OUT PUCHAR Data
        !          2706:         )
        !          2707: --*/
        !          2708: #ifdef  _M_IX86
        !          2709: 
        !          2710: #define NdisReadRegisterUchar(Register,Data) \
        !          2711:     *((PUCHAR)(Data)) = *(Register)
        !          2712: 
        !          2713: #else
        !          2714: 
        !          2715: #define NdisReadRegisterUchar(Register,Data) \
        !          2716:         *(Data) = READ_REGISTER_UCHAR((PUCHAR)(Register))
        !          2717: #endif
        !          2718: 
        !          2719: /*++
        !          2720: VOID
        !          2721: NdisReadRegisterUshort(
        !          2722:         IN PUSHORT Register,
        !          2723:         OUT PUSHORT Data
        !          2724:         )
        !          2725: --*/
        !          2726: #ifdef  _M_IX86
        !          2727: 
        !          2728: #define NdisReadRegisterUshort(Register,Data) \
        !          2729:     *((PUSHORT)(Data)) = *(Register)
        !          2730: 
        !          2731: #else
        !          2732: 
        !          2733: #define NdisReadRegisterUshort(Register,Data) \
        !          2734:         *(Data) = READ_REGISTER_USHORT((PUSHORT)(Register))
        !          2735: #endif
        !          2736: 
        !          2737: /*++
        !          2738: VOID
        !          2739: NdisReadRegisterUlong(
        !          2740:         IN PULONG Register,
        !          2741:         OUT PULONG Data
        !          2742:         )
        !          2743: --*/
        !          2744: #ifdef  _M_IX86
        !          2745: 
        !          2746: #define NdisReadRegisterUlong(Register,Data) \
        !          2747:     *((PULONG)(Data)) = *(Register)
        !          2748: 
        !          2749: #else
        !          2750: 
        !          2751: #define NdisReadRegisterUlong(Register,Data) \
        !          2752:         *(Data) = READ_REGISTER_ULONG((PULONG)(Register))
        !          2753: #endif
        !          2754: 
        !          2755: //
        !          2756: // BOOLEAN
        !          2757: // NdisEqualString(
        !          2758: //          IN PNDIS_STRING _String1,
        !          2759: //          IN PNDIS_STRING _String2,
        !          2760: //          IN BOOLEAN CaseInsensitive
        !          2761: //          );
        !          2762: //
        !          2763: 
        !          2764: #define NdisEqualString(_String1,_String2,CaseInsensitive) \
        !          2765:             RtlEqualUnicodeString((_String1), (_String2), CaseInsensitive)
        !          2766: 
        !          2767: 
        !          2768: //
        !          2769: // Physical Mapping
        !          2770: //
        !          2771: 
        !          2772: //
        !          2773: // VOID
        !          2774: // NdisStartBufferPhysicalMapping(
        !          2775: //     IN NDIS_HANDLE NdisAdapterHandle,
        !          2776: //     IN PNDIS_BUFFER Buffer,
        !          2777: //     IN ULONG PhysicalMapRegister,
        !          2778: //     IN BOOLEAN WriteToDevice,
        !          2779: //     OUT PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray,
        !          2780: //     OUT PUINT ArraySize
        !          2781: //     );
        !          2782: //
        !          2783: 
        !          2784: #define NdisStartBufferPhysicalMapping(                                         \
        !          2785:               NdisAdapterHandle,                                                \
        !          2786:               Buffer,                                                           \
        !          2787:               PhysicalMapRegister,                                              \
        !          2788:               Write,                                                            \
        !          2789:               PhysicalAddressArray,                                             \
        !          2790:               ArraySize                                                         \
        !          2791:               )                                                                 \
        !          2792: {                                                                               \
        !          2793:     PNDIS_ADAPTER_BLOCK _AdaptP = (PNDIS_ADAPTER_BLOCK)(NdisAdapterHandle);     \
        !          2794:     ULONG _PhysicalMapRegister = (PhysicalMapRegister);                         \
        !          2795:     PNDIS_PHYSICAL_ADDRESS_UNIT _PhysicalAddressArray = (PhysicalAddressArray); \
        !          2796:     PNDIS_BUFFER _Buffer = (Buffer);                                            \
        !          2797:     BOOLEAN _WriteToDevice = (Write);                                           \
        !          2798:     PUINT _ArraySize = (ArraySize);                                             \
        !          2799:     PHYSICAL_ADDRESS _LogicalAddress;                                           \
        !          2800:     PUCHAR _VirtualAddress;                                                     \
        !          2801:     ULONG _LengthRemaining;                                                     \
        !          2802:     ULONG _LengthMapped;                                                        \
        !          2803:     UINT _CurrentArrayLocation;                                                 \
        !          2804:     _VirtualAddress = MmGetMdlVirtualAddress(_Buffer);                          \
        !          2805:     _LengthRemaining = MmGetMdlByteCount(_Buffer);                              \
        !          2806:     _CurrentArrayLocation = 0;                                                  \
        !          2807:     while (_LengthRemaining > 0) {                                              \
        !          2808:         _LengthMapped = _LengthRemaining;                                       \
        !          2809:         _LogicalAddress = IoMapTransfer(                                        \
        !          2810:                              NULL,                                              \
        !          2811:                              _Buffer,                                           \
        !          2812:                              _AdaptP->MapRegisters[_PhysicalMapRegister].MapRegister,   \
        !          2813:                              _VirtualAddress,                                   \
        !          2814:                              &_LengthMapped,                                    \
        !          2815:                              _WriteToDevice);                                   \
        !          2816:         _PhysicalAddressArray[_CurrentArrayLocation].PhysicalAddress = _LogicalAddress; \
        !          2817:         _PhysicalAddressArray[_CurrentArrayLocation].Length = _LengthMapped;    \
        !          2818:         _LengthRemaining -= _LengthMapped;                                      \
        !          2819:         _VirtualAddress += _LengthMapped;                                       \
        !          2820:         ++_CurrentArrayLocation;                                                \
        !          2821:     }                                                                           \
        !          2822:     _AdaptP->MapRegisters[_PhysicalMapRegister].WriteToDevice = _WriteToDevice; \
        !          2823:     *(_ArraySize) = _CurrentArrayLocation;                                      \
        !          2824: }
        !          2825: 
        !          2826: 
        !          2827: //
        !          2828: // VOID
        !          2829: // NdisCompleteBufferPhysicalMapping(
        !          2830: //     IN NDIS_HANDLE NdisAdapterHandle,
        !          2831: //     IN PNDIS_BUFFER Buffer,
        !          2832: //     IN ULONG PhysicalMapRegister
        !          2833: //     );
        !          2834: //
        !          2835: 
        !          2836: #define NdisCompleteBufferPhysicalMapping( \
        !          2837:     NdisAdapterHandle,                     \
        !          2838:     Buffer,                                \
        !          2839:     PhysicalMapRegister                    \
        !          2840:     )                                      \
        !          2841: {                                          \
        !          2842:     PNDIS_ADAPTER_BLOCK _AdaptP = (PNDIS_ADAPTER_BLOCK)NdisAdapterHandle; \
        !          2843:     IoFlushAdapterBuffers(                                                \
        !          2844:         NULL,                                                             \
        !          2845:         Buffer,                                                           \
        !          2846:         _AdaptP->MapRegisters[PhysicalMapRegister].MapRegister,           \
        !          2847:         MmGetMdlVirtualAddress(Buffer),                                   \
        !          2848:         MmGetMdlByteCount(Buffer),                                        \
        !          2849:         _AdaptP->MapRegisters[PhysicalMapRegister].WriteToDevice);        \
        !          2850: }
        !          2851: 
        !          2852: 
        !          2853: //
        !          2854: // Shared memory
        !          2855: //
        !          2856: 
        !          2857: VOID
        !          2858: NdisAllocateSharedMemory(
        !          2859:     IN NDIS_HANDLE NdisAdapterHandle,
        !          2860:     IN ULONG Length,
        !          2861:     IN BOOLEAN Cached,
        !          2862:     OUT PVOID *VirtualAddress,
        !          2863:     OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
        !          2864:     );
        !          2865: 
        !          2866: VOID
        !          2867: NdisUpdateSharedMemory(
        !          2868:     IN NDIS_HANDLE NdisAdapterHandle,
        !          2869:     IN ULONG Length,
        !          2870:     IN PVOID VirtualAddress,
        !          2871:     IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
        !          2872:     );
        !          2873: 
        !          2874: VOID
        !          2875: NdisFreeSharedMemory(
        !          2876:     IN NDIS_HANDLE NdisAdapterHandle,
        !          2877:     IN ULONG Length,
        !          2878:     IN BOOLEAN Cached,
        !          2879:     IN PVOID VirtualAddress,
        !          2880:     IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
        !          2881:     );
        !          2882: 
        !          2883: 
        !          2884: //
        !          2885: // DMA operations.
        !          2886: //
        !          2887: 
        !          2888: VOID
        !          2889: NdisAllocateDmaChannel(
        !          2890:     OUT PNDIS_STATUS Status,
        !          2891:     OUT PNDIS_HANDLE NdisDmaHandle,
        !          2892:     IN NDIS_HANDLE NdisAdapterHandle,
        !          2893:     IN PNDIS_DMA_DESCRIPTION DmaDescription,
        !          2894:     IN ULONG MaximumLength
        !          2895:     );
        !          2896: 
        !          2897: VOID
        !          2898: NdisFreeDmaChannel(
        !          2899:     IN PNDIS_HANDLE NdisDmaHandle
        !          2900:     );
        !          2901: 
        !          2902: VOID
        !          2903: NdisSetupDmaTransfer(
        !          2904:     OUT PNDIS_STATUS Status,
        !          2905:     IN PNDIS_HANDLE NdisDmaHandle,
        !          2906:     IN PNDIS_BUFFER Buffer,
        !          2907:     IN ULONG Offset,
        !          2908:     IN ULONG Length,
        !          2909:     IN BOOLEAN WriteToDevice
        !          2910:     );
        !          2911: 
        !          2912: VOID
        !          2913: NdisCompleteDmaTransfer(
        !          2914:     OUT PNDIS_STATUS Status,
        !          2915:     IN PNDIS_HANDLE NdisDmaHandle,
        !          2916:     IN PNDIS_BUFFER Buffer,
        !          2917:     IN ULONG Offset,
        !          2918:     IN ULONG Length,
        !          2919:     IN BOOLEAN WriteToDevice
        !          2920:     );
        !          2921: 
        !          2922: /*++
        !          2923: ULONG
        !          2924: NdisReadDmaCounter(
        !          2925:     IN NDIS_HANDLE NdisDmaHandle
        !          2926:     )
        !          2927: --*/
        !          2928: 
        !          2929: #define NdisReadDmaCounter(_NdisDmaHandle) \
        !          2930:     HalReadDmaCounter(((PNDIS_DMA_BLOCK)(_NdisDmaHandle))->SystemAdapterObject)
        !          2931: 
        !          2932: 
        !          2933: 
        !          2934: //
        !          2935: // Requests used by Protocol Modules
        !          2936: //
        !          2937: 
        !          2938: 
        !          2939: 
        !          2940: VOID
        !          2941: NdisRegisterProtocol(
        !          2942:     OUT PNDIS_STATUS Status,
        !          2943:     OUT PNDIS_HANDLE NdisProtocolHandle,
        !          2944:     IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
        !          2945:     IN UINT CharacteristicsLength
        !          2946:     );
        !          2947: 
        !          2948: VOID
        !          2949: NdisDeregisterProtocol(
        !          2950:     OUT PNDIS_STATUS Status,
        !          2951:     IN NDIS_HANDLE NdisProtocolHandle
        !          2952:     );
        !          2953: 
        !          2954: 
        !          2955: VOID
        !          2956: NdisOpenAdapter(
        !          2957:     OUT PNDIS_STATUS Status,
        !          2958:     OUT PNDIS_STATUS OpenErrorStatus,
        !          2959:     OUT PNDIS_HANDLE NdisBindingHandle,
        !          2960:     OUT PUINT SelectedMediumIndex,
        !          2961:     IN PNDIS_MEDIUM MediumArray,
        !          2962:     IN UINT MediumArraySize,
        !          2963:     IN NDIS_HANDLE NdisProtocolHandle,
        !          2964:     IN NDIS_HANDLE ProtocolBindingContext,
        !          2965:     IN PNDIS_STRING AdapterName,
        !          2966:     IN UINT OpenOptions,
        !          2967:     IN PSTRING AddressingInformation OPTIONAL
        !          2968:     );
        !          2969: 
        !          2970: 
        !          2971: VOID
        !          2972: NdisCloseAdapter(
        !          2973:     OUT PNDIS_STATUS Status,
        !          2974:     IN NDIS_HANDLE NdisBindingHandle
        !          2975:     );
        !          2976: 
        !          2977: 
        !          2978: #ifdef NDISDBG
        !          2979: VOID
        !          2980: NdisSend(
        !          2981:     OUT PNDIS_STATUS Status,
        !          2982:     IN NDIS_HANDLE NdisBindingHandle,
        !          2983:     IN PNDIS_PACKET Packet
        !          2984:     );
        !          2985: #else
        !          2986: #define NdisSend(Status, \
        !          2987:     NdisBindingHandle, \
        !          2988:     Packet \
        !          2989:     ) \
        !          2990: {\
        !          2991:     *(Status) = \
        !          2992:         (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendHandler) ( \
        !          2993:             ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
        !          2994:             (Packet)); \
        !          2995: }
        !          2996: #endif
        !          2997: 
        !          2998: 
        !          2999: #ifdef NDISDBG
        !          3000: VOID
        !          3001: NdisTransferData(
        !          3002:     OUT PNDIS_STATUS Status,
        !          3003:     IN NDIS_HANDLE NdisBindingHandle,
        !          3004:     IN NDIS_HANDLE MacReceiveContext,
        !          3005:     IN UINT ByteOffset,
        !          3006:     IN UINT BytesToTransfer,
        !          3007:     IN OUT PNDIS_PACKET Packet,
        !          3008:     OUT PUINT BytesTransferred
        !          3009:     );
        !          3010: #else
        !          3011: #define NdisTransferData( \
        !          3012:     Status, \
        !          3013:     NdisBindingHandle, \
        !          3014:     MacReceiveContext, \
        !          3015:     ByteOffset, \
        !          3016:     BytesToTransfer, \
        !          3017:     Packet, \
        !          3018:     BytesTransferred \
        !          3019:     ) \
        !          3020: {\
        !          3021:     *(Status) = \
        !          3022:         (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->TransferDataHandler) ( \
        !          3023:             ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
        !          3024:             (MacReceiveContext), \
        !          3025:             (ByteOffset), \
        !          3026:             (BytesToTransfer), \
        !          3027:             (Packet), \
        !          3028:             (BytesTransferred)); \
        !          3029: }
        !          3030: #endif
        !          3031: 
        !          3032: 
        !          3033: #ifdef NDISDBG
        !          3034: VOID
        !          3035: NdisReset(
        !          3036:     OUT PNDIS_STATUS Status,
        !          3037:     IN NDIS_HANDLE NdisBindingHandle
        !          3038:     );
        !          3039: #else
        !          3040: #define NdisReset( \
        !          3041:     Status, \
        !          3042:     NdisBindingHandle \
        !          3043:     ) \
        !          3044: { \
        !          3045:     *(Status) = \
        !          3046:         (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacHandle->MacCharacteristics.ResetHandler) ( \
        !          3047:             ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle); \
        !          3048: }
        !          3049: #endif
        !          3050: 
        !          3051: #ifdef NDISDBG
        !          3052: VOID
        !          3053: NdisRequest(
        !          3054:     OUT PNDIS_STATUS Status,
        !          3055:     IN NDIS_HANDLE NdisBindingHandle,
        !          3056:     IN PNDIS_REQUEST NdisRequest
        !          3057:     );
        !          3058: #else
        !          3059: #define NdisRequest( \
        !          3060:     Status,\
        !          3061:     NdisBindingHandle, \
        !          3062:     NdisRequest \
        !          3063:     ) \
        !          3064: { \
        !          3065:     *(Status) = \
        !          3066:         (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacHandle->MacCharacteristics.RequestHandler) ( \
        !          3067:             ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
        !          3068:             (NdisRequest)); \
        !          3069: }
        !          3070: #endif
        !          3071: 
        !          3072: //
        !          3073: // Requests Used by MAC Drivers
        !          3074: //
        !          3075: 
        !          3076: extern PDRIVER_OBJECT Driver;       // set by initialization routine
        !          3077: 
        !          3078: 
        !          3079: VOID
        !          3080: NdisInitializeWrapper(
        !          3081:     OUT PNDIS_HANDLE NdisWrapperHandle,
        !          3082:     IN PVOID SystemSpecific1,
        !          3083:     IN PVOID SystemSpecific2,
        !          3084:     IN PVOID SystemSpecific3
        !          3085:     );
        !          3086: 
        !          3087: 
        !          3088: VOID
        !          3089: NdisTerminateWrapper(
        !          3090:     IN NDIS_HANDLE NdisWrapperHandle,
        !          3091:     IN PVOID SystemSpecific
        !          3092:     );
        !          3093: 
        !          3094: VOID
        !          3095: NdisRegisterMac(
        !          3096:     OUT PNDIS_STATUS Status,
        !          3097:     OUT PNDIS_HANDLE NdisMacHandle,
        !          3098:     IN NDIS_HANDLE NdisWrapperHandle,
        !          3099:     IN NDIS_HANDLE MacMacContext,
        !          3100:     IN PNDIS_MAC_CHARACTERISTICS MacCharacteristics,
        !          3101:     IN UINT CharacteristicsLength
        !          3102:     );
        !          3103: 
        !          3104: VOID
        !          3105: NdisDeregisterMac(
        !          3106:     OUT PNDIS_STATUS Status,
        !          3107:     IN NDIS_HANDLE NdisMacHandle
        !          3108:     );
        !          3109: 
        !          3110: 
        !          3111: NDIS_STATUS
        !          3112: NdisRegisterAdapter(
        !          3113:     OUT PNDIS_HANDLE NdisAdapterHandle,
        !          3114:     IN NDIS_HANDLE NdisMacHandle,
        !          3115:     IN NDIS_HANDLE MacAdapterContext,
        !          3116:     IN NDIS_HANDLE WrapperConfigurationContext,
        !          3117:     IN PNDIS_STRING AdapterName,
        !          3118:     IN PVOID AdapterInformation
        !          3119:     );
        !          3120: 
        !          3121: NDIS_STATUS
        !          3122: NdisDeregisterAdapter(
        !          3123:     IN NDIS_HANDLE NdisAdapterHandle
        !          3124:     );
        !          3125: 
        !          3126: VOID
        !          3127: NdisRegisterAdapterShutdownHandler(
        !          3128:     IN NDIS_HANDLE NdisAdapterHandle,
        !          3129:     IN PVOID ShutdownContext,
        !          3130:     IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
        !          3131:     );
        !          3132: 
        !          3133: VOID
        !          3134: NdisDeregisterAdapterShutdownHandler(
        !          3135:     IN NDIS_HANDLE NdisAdapterHandle
        !          3136:     );
        !          3137: 
        !          3138: VOID
        !          3139: NdisReleaseAdapterResources(
        !          3140:     IN NDIS_HANDLE NdisAdapterHandle
        !          3141:     );
        !          3142: 
        !          3143: VOID
        !          3144: NdisWriteErrorLogEntry(
        !          3145:     IN NDIS_HANDLE NdisAdapterHandle,
        !          3146:     IN NDIS_ERROR_CODE ErrorCode,
        !          3147:     IN ULONG NumberOfErrorValues,
        !          3148:     ...
        !          3149:     );
        !          3150: 
        !          3151: VOID
        !          3152: NdisCompleteOpenAdapter(
        !          3153:     IN NDIS_HANDLE NdisBindingContext,
        !          3154:     IN NDIS_STATUS Status,
        !          3155:     IN NDIS_STATUS OpenErrorStatus
        !          3156:     );
        !          3157: 
        !          3158: 
        !          3159: VOID
        !          3160: NdisCompleteCloseAdapter(
        !          3161:     IN NDIS_HANDLE NdisBindingContext,
        !          3162:     IN NDIS_STATUS Status
        !          3163:     );
        !          3164: 
        !          3165: 
        !          3166: #ifdef NDISDBG
        !          3167: VOID
        !          3168: NdisCompleteSend(
        !          3169:     IN NDIS_HANDLE NdisBindingContext,
        !          3170:     IN PNDIS_PACKET Packet,
        !          3171:     IN NDIS_STATUS Status
        !          3172:     );
        !          3173: #else
        !          3174: #define NdisCompleteSend( \
        !          3175:     NdisBindingContext, \
        !          3176:     Packet, \
        !          3177:     Status \
        !          3178:     ) \
        !          3179: {\
        !          3180:     (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->SendCompleteHandler) ( \
        !          3181:         ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext, \
        !          3182:         (Packet), \
        !          3183:         (Status)); \
        !          3184: }
        !          3185: #endif
        !          3186: 
        !          3187: 
        !          3188: #ifdef NDISDBG
        !          3189: VOID
        !          3190: NdisCompleteTransferData(
        !          3191:     IN NDIS_HANDLE NdisBindingContext,
        !          3192:     IN PNDIS_PACKET Packet,
        !          3193:     IN NDIS_STATUS Status,
        !          3194:     IN UINT BytesTransferred
        !          3195:     );
        !          3196: #else
        !          3197: #define NdisCompleteTransferData( \
        !          3198:     NdisBindingContext, \
        !          3199:     Packet, \
        !          3200:     Status, \
        !          3201:     BytesTransferred \
        !          3202:     ) \
        !          3203: {\
        !          3204:     (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->TransferDataCompleteHandler) ( \
        !          3205:         ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext, \
        !          3206:         (Packet), \
        !          3207:         (Status), \
        !          3208:         (BytesTransferred)); \
        !          3209: }
        !          3210: #endif
        !          3211: 
        !          3212: #ifdef NDISDBG
        !          3213: VOID
        !          3214: NdisCompleteReset(
        !          3215:     IN NDIS_HANDLE NdisBindingContext,
        !          3216:     IN NDIS_STATUS Status
        !          3217:     );
        !          3218: #else
        !          3219: #define NdisCompleteReset( \
        !          3220:     NdisBindingContext, \
        !          3221:     Status \
        !          3222:     ) \
        !          3223: { \
        !          3224:     (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolHandle->ProtocolCharacteristics.ResetCompleteHandler) ( \
        !          3225:         ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext, \
        !          3226:         Status); \
        !          3227: }
        !          3228: #endif
        !          3229: 
        !          3230: 
        !          3231: #ifdef NDISDBG
        !          3232: VOID
        !          3233: NdisCompleteRequest(
        !          3234:     IN NDIS_HANDLE NdisBindingContext,
        !          3235:     IN PNDIS_REQUEST NdisRequest,
        !          3236:     IN NDIS_STATUS Status
        !          3237:     );
        !          3238: #else
        !          3239: #define NdisCompleteRequest( \
        !          3240:     NdisBindingContext, \
        !          3241:     NdisRequest, \
        !          3242:     Status) \
        !          3243: { \
        !          3244:     (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolHandle->ProtocolCharacteristics.RequestCompleteHandler) ( \
        !          3245:         ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext, \
        !          3246:         NdisRequest, \
        !          3247:         Status); \
        !          3248: }
        !          3249: #endif
        !          3250: 
        !          3251: #ifdef NDISDBG
        !          3252: VOID
        !          3253: NdisIndicateReceive(
        !          3254:     OUT PNDIS_STATUS Status,
        !          3255:     IN NDIS_HANDLE NdisBindingContext,
        !          3256:     IN NDIS_HANDLE MacReceiveContext,
        !          3257:     IN PVOID HeaderBuffer,
        !          3258:     IN UINT HeaderBufferSize,
        !          3259:     IN PVOID LookaheadBuffer,
        !          3260:     IN UINT LookaheadBufferSize,
        !          3261:     IN UINT PacketSize
        !          3262:     );
        !          3263: #else
        !          3264: #define NdisIndicateReceive( \
        !          3265:     Status, \
        !          3266:     NdisBindingContext, \
        !          3267:     MacReceiveContext, \
        !          3268:     HeaderBuffer, \
        !          3269:     HeaderBufferSize, \
        !          3270:     LookaheadBuffer, \
        !          3271:     LookaheadBufferSize, \
        !          3272:     PacketSize \
        !          3273:     ) \
        !          3274: {\
        !          3275:     *(Status) = \
        !          3276:         (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ReceiveHandler) ( \
        !          3277:             ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext, \
        !          3278:             (MacReceiveContext), \
        !          3279:             (HeaderBuffer), \
        !          3280:             (HeaderBufferSize), \
        !          3281:             (LookaheadBuffer), \
        !          3282:             (LookaheadBufferSize), \
        !          3283:             (PacketSize)); \
        !          3284: }
        !          3285: #endif
        !          3286: 
        !          3287: 
        !          3288: #ifdef NDISDBG
        !          3289: VOID
        !          3290: NdisIndicateReceiveComplete(
        !          3291:     IN NDIS_HANDLE NdisBindingContext
        !          3292:     );
        !          3293: #else
        !          3294: #define NdisIndicateReceiveComplete( \
        !          3295:     NdisBindingContext \
        !          3296:     ) \
        !          3297:     (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ReceiveCompleteHandler) ( \
        !          3298:         ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext);
        !          3299: #endif
        !          3300: 
        !          3301: 
        !          3302: #ifdef NDISDBG
        !          3303: VOID
        !          3304: NdisIndicateStatus(
        !          3305:     IN NDIS_HANDLE NdisBindingContext,
        !          3306:     IN NDIS_STATUS GeneralStatus,
        !          3307:     IN PVOID StatusBuffer,
        !          3308:     IN UINT StatusBufferSize
        !          3309:     );
        !          3310: #else
        !          3311: #define NdisIndicateStatus( \
        !          3312:     NdisBindingContext, \
        !          3313:     GeneralStatus, \
        !          3314:     StatusBuffer, \
        !          3315:     StatusBufferSize \
        !          3316:     ) \
        !          3317: {\
        !          3318:     (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolHandle->ProtocolCharacteristics.StatusHandler) ( \
        !          3319:         ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext, \
        !          3320:         (GeneralStatus), \
        !          3321:         (StatusBuffer), \
        !          3322:         (StatusBufferSize)); \
        !          3323: }
        !          3324: #endif
        !          3325: 
        !          3326: 
        !          3327: #ifdef NDISDBG
        !          3328: VOID
        !          3329: NdisIndicateStatusComplete(
        !          3330:     IN NDIS_HANDLE NdisBindingContext
        !          3331:     );
        !          3332: #else
        !          3333: #define NdisIndicateStatusComplete( \
        !          3334:     NdisBindingContext \
        !          3335:     ) \
        !          3336: { \
        !          3337:     (((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolHandle->ProtocolCharacteristics.StatusCompleteHandler) ( \
        !          3338:         ((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext); \
        !          3339: }
        !          3340: #endif
        !          3341: 
        !          3342: VOID
        !          3343: NdisCompleteQueryStatistics(
        !          3344:     IN NDIS_HANDLE NdisAdapterHandle,
        !          3345:     IN PNDIS_REQUEST NdisRequest,
        !          3346:     IN NDIS_STATUS Status
        !          3347:     );
        !          3348: 
        !          3349: #define NdisInitializeString(Destination,Source) \
        !          3350: {\
        !          3351:     PNDIS_STRING _D = (Destination);\
        !          3352:     UCHAR *_S = (Source);\
        !          3353:     WCHAR *_P;\
        !          3354:     _D->Length = (strlen(_S)) * sizeof(WCHAR);\
        !          3355:     _D->MaximumLength = _D->Length + sizeof(WCHAR);\
        !          3356:     NdisAllocateMemory((PVOID *)&(_D->Buffer), _D->MaximumLength, 0, (-1));\
        !          3357:     _P = _D->Buffer;\
        !          3358:     while(*_S != '\0'){\
        !          3359:         *_P = (WCHAR)(*_S);\
        !          3360:         _S++;\
        !          3361:         _P++;\
        !          3362:     }\
        !          3363:     *_P = UNICODE_NULL;\
        !          3364: }
        !          3365: 
        !          3366: 
        !          3367: #define NdisFreeString(String) NdisFreeMemory((String).Buffer, (String).MaximumLength, 0)
        !          3368: 
        !          3369: #define NdisPrintString(String) DbgPrint("%ls",(String).Buffer)
        !          3370: 
        !          3371: 
        !          3372: #ifdef _M_IX86
        !          3373: /*++
        !          3374: 
        !          3375:     VOID
        !          3376:     NdisCreateLookaheadBufferFromSharedMemory(
        !          3377:         IN PVOID pSharedMemory,
        !          3378:         IN UINT LookaheadLength,
        !          3379:         OUT PVOID *pLookaheadBuffer
        !          3380:         );
        !          3381: 
        !          3382: --*/
        !          3383: 
        !          3384: #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) \
        !          3385:   ((*(_B)) = (_S))
        !          3386: 
        !          3387: 
        !          3388: 
        !          3389: /*++
        !          3390: 
        !          3391:     VOID
        !          3392:     NdisDestroyLookaheadBufferFromSharedMemory(
        !          3393:         IN PVOID pLookaheadBuffer
        !          3394:         );
        !          3395: 
        !          3396: --*/
        !          3397: 
        !          3398: #define NdisDestroyLookaheadBufferFromSharedMemory(_B)
        !          3399: 
        !          3400: #else
        !          3401: #ifdef mips
        !          3402: 
        !          3403: /*++
        !          3404: 
        !          3405:     VOID
        !          3406:     NdisCreateLookaheadBufferFromSharedMemory(
        !          3407:         IN PVOID pSharedMemory,
        !          3408:         IN UINT LookaheadLength,
        !          3409:         OUT PVOID *pLookaheadBuffer
        !          3410:         );
        !          3411: 
        !          3412: --*/
        !          3413: 
        !          3414: #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) \
        !          3415:   ((*(_B)) = (_S))
        !          3416: 
        !          3417: 
        !          3418: 
        !          3419: /*++
        !          3420: 
        !          3421:     VOID
        !          3422:     NdisDestroyLookaheadBufferFromSharedMemory(
        !          3423:         IN PVOID pLookaheadBuffer
        !          3424:         );
        !          3425: 
        !          3426: --*/
        !          3427: 
        !          3428: #define NdisDestroyLookaheadBufferFromSharedMemory(_B)
        !          3429: 
        !          3430: #else
        !          3431: 
        !          3432: VOID
        !          3433: NdisCreateLookaheadBufferFromSharedMemory(
        !          3434:     IN PVOID pSharedMemory,
        !          3435:     IN UINT LookaheadLength,
        !          3436:     OUT PVOID *pLookaheadBuffer
        !          3437:     );
        !          3438: 
        !          3439: VOID
        !          3440: NdisDestroyLookaheadBufferFromSharedMemory(
        !          3441:     IN PVOID pLookaheadBuffer
        !          3442:     );
        !          3443: 
        !          3444: #endif // mips
        !          3445: #endif // i386
        !          3446: 
        !          3447: 
        !          3448: //
        !          3449: //*\\ Stubs to compile with Ndis 3.0 Kernel
        !          3450: //
        !          3451: 
        !          3452: extern
        !          3453: NDIS_STATUS
        !          3454: EthAddFilterAddress();
        !          3455: 
        !          3456: extern
        !          3457: NDIS_STATUS
        !          3458: EthDeleteFilterAddress();
        !          3459: 
        !          3460: extern
        !          3461: NDIS_STATUS
        !          3462: NdisInitializePacketPool();
        !          3463: 
        !          3464: // ZZZZ
        !          3465: 
        !          3466: #ifdef NDISDBG
        !          3467: VOID
        !          3468: DbgChkPktLength(
        !          3469:   IN PNDIS_PACKET Packet
        !          3470:   );
        !          3471: #endif
        !          3472: 
        !          3473: #endif  // _NDIS_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.