Annotation of ntddk/src/network/inc/ndis.h, revision 1.1.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.