1*d56f51eaSDavid van Moolenbroek /* 2*d56f51eaSDavid van Moolenbroek * Copyright (c) 1993,1994 3*d56f51eaSDavid van Moolenbroek * Texas A&M University. All rights reserved. 4*d56f51eaSDavid van Moolenbroek * 5*d56f51eaSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 6*d56f51eaSDavid van Moolenbroek * modification, are permitted provided that the following conditions 7*d56f51eaSDavid van Moolenbroek * are met: 8*d56f51eaSDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 9*d56f51eaSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 10*d56f51eaSDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 11*d56f51eaSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 12*d56f51eaSDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 13*d56f51eaSDavid van Moolenbroek * 3. All advertising materials mentioning features or use of this software 14*d56f51eaSDavid van Moolenbroek * must display the following acknowledgement: 15*d56f51eaSDavid van Moolenbroek * This product includes software developed by Texas A&M University 16*d56f51eaSDavid van Moolenbroek * and its contributors. 17*d56f51eaSDavid van Moolenbroek * 4. Neither the name of the University nor the names of its contributors 18*d56f51eaSDavid van Moolenbroek * may be used to endorse or promote products derived from this software 19*d56f51eaSDavid van Moolenbroek * without specific prior written permission. 20*d56f51eaSDavid van Moolenbroek * 21*d56f51eaSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND 22*d56f51eaSDavid van Moolenbroek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23*d56f51eaSDavid van Moolenbroek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24*d56f51eaSDavid van Moolenbroek * ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE 25*d56f51eaSDavid van Moolenbroek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26*d56f51eaSDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27*d56f51eaSDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28*d56f51eaSDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29*d56f51eaSDavid van Moolenbroek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30*d56f51eaSDavid van Moolenbroek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*d56f51eaSDavid van Moolenbroek * SUCH DAMAGE. 32*d56f51eaSDavid van Moolenbroek * 33*d56f51eaSDavid van Moolenbroek * Developers: 34*d56f51eaSDavid van Moolenbroek * David K. Hess, Douglas Lee Schales, David R. Safford 35*d56f51eaSDavid van Moolenbroek * 36*d56f51eaSDavid van Moolenbroek * Heavily modified for Metaware HighC + GNU C 2.8+ 37*d56f51eaSDavid van Moolenbroek * Gisle Vanem 1998 38*d56f51eaSDavid van Moolenbroek */ 39*d56f51eaSDavid van Moolenbroek 40*d56f51eaSDavid van Moolenbroek #ifndef __PCAP_NDIS_H 41*d56f51eaSDavid van Moolenbroek #define __PCAP_NDIS_H 42*d56f51eaSDavid van Moolenbroek 43*d56f51eaSDavid van Moolenbroek #if defined (__HIGHC__) 44*d56f51eaSDavid van Moolenbroek #define pascal _CC(_CALLEE_POPS_STACK & ~_REVERSE_PARMS) /* calling convention */ 45*d56f51eaSDavid van Moolenbroek #define CALLBACK(foo) pascal WORD foo 46*d56f51eaSDavid van Moolenbroek #define PAS_PTR(x,arg) typedef FAR WORD pascal (*x) arg 47*d56f51eaSDavid van Moolenbroek #define GUARD() _inline (0x9C,0xFA) /* pushfd, cli */ 48*d56f51eaSDavid van Moolenbroek #define UNGUARD() _inline (0x9D) /* popfd */ 49*d56f51eaSDavid van Moolenbroek #define FAR _far 50*d56f51eaSDavid van Moolenbroek 51*d56f51eaSDavid van Moolenbroek #elif defined(__GNUC__) 52*d56f51eaSDavid van Moolenbroek #define CALLBACK(foo) WORD foo __attribute__((stdcall)) 53*d56f51eaSDavid van Moolenbroek #define PAS_PTR(x,arg) typedef WORD (*x) arg __attribute__((stdcall)) 54*d56f51eaSDavid van Moolenbroek #define GUARD() __asm__ __volatile__ ("pushfd; cli") 55*d56f51eaSDavid van Moolenbroek #define UNGUARD() __asm__ __volatile__ ("popfd") 56*d56f51eaSDavid van Moolenbroek #define FAR 57*d56f51eaSDavid van Moolenbroek 58*d56f51eaSDavid van Moolenbroek #elif defined (__TURBOC__) 59*d56f51eaSDavid van Moolenbroek #define CALLBACK(foo) WORD pascal foo 60*d56f51eaSDavid van Moolenbroek #define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg 61*d56f51eaSDavid van Moolenbroek #define GUARD() _asm { pushf; cli } 62*d56f51eaSDavid van Moolenbroek #define UNGUARD() _asm { popf } 63*d56f51eaSDavid van Moolenbroek #define FAR _far 64*d56f51eaSDavid van Moolenbroek 65*d56f51eaSDavid van Moolenbroek #elif defined (__WATCOMC__) 66*d56f51eaSDavid van Moolenbroek #define CALLBACK(foo) WORD pascal foo 67*d56f51eaSDavid van Moolenbroek #define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg 68*d56f51eaSDavid van Moolenbroek #define GUARD() _disable() 69*d56f51eaSDavid van Moolenbroek #define UNGUARD() _enable() 70*d56f51eaSDavid van Moolenbroek #define FAR _far 71*d56f51eaSDavid van Moolenbroek 72*d56f51eaSDavid van Moolenbroek #else 73*d56f51eaSDavid van Moolenbroek #error Unsupported compiler 74*d56f51eaSDavid van Moolenbroek #endif 75*d56f51eaSDavid van Moolenbroek 76*d56f51eaSDavid van Moolenbroek 77*d56f51eaSDavid van Moolenbroek /* 78*d56f51eaSDavid van Moolenbroek * Forwards 79*d56f51eaSDavid van Moolenbroek */ 80*d56f51eaSDavid van Moolenbroek struct _ReqBlock; 81*d56f51eaSDavid van Moolenbroek struct _TxBufDescr; 82*d56f51eaSDavid van Moolenbroek struct _TDBufDescr; 83*d56f51eaSDavid van Moolenbroek 84*d56f51eaSDavid van Moolenbroek /* 85*d56f51eaSDavid van Moolenbroek * Protocol Manager API 86*d56f51eaSDavid van Moolenbroek */ 87*d56f51eaSDavid van Moolenbroek PAS_PTR (ProtMan, (struct _ReqBlock FAR*, WORD)); 88*d56f51eaSDavid van Moolenbroek 89*d56f51eaSDavid van Moolenbroek /* 90*d56f51eaSDavid van Moolenbroek * System request 91*d56f51eaSDavid van Moolenbroek */ 92*d56f51eaSDavid van Moolenbroek PAS_PTR (SystemRequest, (DWORD, DWORD, WORD, WORD, WORD)); 93*d56f51eaSDavid van Moolenbroek 94*d56f51eaSDavid van Moolenbroek /* 95*d56f51eaSDavid van Moolenbroek * MAC API 96*d56f51eaSDavid van Moolenbroek */ 97*d56f51eaSDavid van Moolenbroek PAS_PTR (TransmitChain, (WORD, WORD, struct _TxBufDescr FAR*, WORD)); 98*d56f51eaSDavid van Moolenbroek PAS_PTR (TransferData, (WORD*,WORD, struct _TDBufDescr FAR*, WORD)); 99*d56f51eaSDavid van Moolenbroek PAS_PTR (Request, (WORD, WORD, WORD, DWORD, WORD, WORD)); 100*d56f51eaSDavid van Moolenbroek PAS_PTR (ReceiveRelease,(WORD, WORD)); 101*d56f51eaSDavid van Moolenbroek PAS_PTR (IndicationOn, (WORD)); 102*d56f51eaSDavid van Moolenbroek PAS_PTR (IndicationOff, (WORD)); 103*d56f51eaSDavid van Moolenbroek 104*d56f51eaSDavid van Moolenbroek 105*d56f51eaSDavid van Moolenbroek typedef enum { 106*d56f51eaSDavid van Moolenbroek HARDWARE_NOT_INSTALLED = 0, 107*d56f51eaSDavid van Moolenbroek HARDWARE_FAILED_DIAG = 1, 108*d56f51eaSDavid van Moolenbroek HARDWARE_FAILED_CONFIG = 2, 109*d56f51eaSDavid van Moolenbroek HARDWARE_HARD_FAULT = 3, 110*d56f51eaSDavid van Moolenbroek HARDWARE_SOFT_FAULT = 4, 111*d56f51eaSDavid van Moolenbroek HARDWARE_OK = 7, 112*d56f51eaSDavid van Moolenbroek HARDWARE_MASK = 0x0007, 113*d56f51eaSDavid van Moolenbroek MAC_BOUND = 0x0008, 114*d56f51eaSDavid van Moolenbroek MAC_OPEN = 0x0010, 115*d56f51eaSDavid van Moolenbroek DIAG_IN_PROGRESS = 0x0020 116*d56f51eaSDavid van Moolenbroek } NdisMacStatus; 117*d56f51eaSDavid van Moolenbroek 118*d56f51eaSDavid van Moolenbroek typedef enum { 119*d56f51eaSDavid van Moolenbroek STATUS_RING_STATUS = 1, 120*d56f51eaSDavid van Moolenbroek STATUS_ADAPTER_CHECK = 2, 121*d56f51eaSDavid van Moolenbroek STATUS_START_RESET = 3, 122*d56f51eaSDavid van Moolenbroek STATUS_INTERRUPT = 4, 123*d56f51eaSDavid van Moolenbroek STATUS_END_RESET = 5 124*d56f51eaSDavid van Moolenbroek } NdisStatus; 125*d56f51eaSDavid van Moolenbroek 126*d56f51eaSDavid van Moolenbroek typedef enum { 127*d56f51eaSDavid van Moolenbroek FILTER_DIRECTED = 1, 128*d56f51eaSDavid van Moolenbroek FILTER_BROADCAST = 2, 129*d56f51eaSDavid van Moolenbroek FILTER_PROMISCUOUS = 4, 130*d56f51eaSDavid van Moolenbroek FILTER_SOURCE_ROUTE = 8 131*d56f51eaSDavid van Moolenbroek } NdisPacketFilter; 132*d56f51eaSDavid van Moolenbroek 133*d56f51eaSDavid van Moolenbroek typedef enum { 134*d56f51eaSDavid van Moolenbroek REQ_INITIATE_DIAGNOSTICS = 1, 135*d56f51eaSDavid van Moolenbroek REQ_READ_ERROR_LOG = 2, 136*d56f51eaSDavid van Moolenbroek REQ_SET_STATION_ADDRESS = 3, 137*d56f51eaSDavid van Moolenbroek REQ_OPEN_ADAPTER = 4, 138*d56f51eaSDavid van Moolenbroek REQ_CLOSE_ADAPTER = 5, 139*d56f51eaSDavid van Moolenbroek REQ_RESET_MAC = 6, 140*d56f51eaSDavid van Moolenbroek REQ_SET_PACKET_FILTER = 7, 141*d56f51eaSDavid van Moolenbroek REQ_ADD_MULTICAST_ADDRESS = 8, 142*d56f51eaSDavid van Moolenbroek REQ_DELETE_MULTICAST_ADDRESS = 9, 143*d56f51eaSDavid van Moolenbroek REQ_UPDATE_STATISTICS = 10, 144*d56f51eaSDavid van Moolenbroek REQ_CLEAR_STATISTICS = 11, 145*d56f51eaSDavid van Moolenbroek REQ_INTERRUPT_REQUEST = 12, 146*d56f51eaSDavid van Moolenbroek REQ_SET_FUNCTIONAL_ADDRESS = 13, 147*d56f51eaSDavid van Moolenbroek REQ_SET_LOOKAHEAD = 14 148*d56f51eaSDavid van Moolenbroek } NdisGeneralRequest; 149*d56f51eaSDavid van Moolenbroek 150*d56f51eaSDavid van Moolenbroek typedef enum { 151*d56f51eaSDavid van Moolenbroek SF_BROADCAST = 0x00000001L, 152*d56f51eaSDavid van Moolenbroek SF_MULTICAST = 0x00000002L, 153*d56f51eaSDavid van Moolenbroek SF_FUNCTIONAL = 0x00000004L, 154*d56f51eaSDavid van Moolenbroek SF_PROMISCUOUS = 0x00000008L, 155*d56f51eaSDavid van Moolenbroek SF_SOFT_ADDRESS = 0x00000010L, 156*d56f51eaSDavid van Moolenbroek SF_STATS_CURRENT = 0x00000020L, 157*d56f51eaSDavid van Moolenbroek SF_INITIATE_DIAGS = 0x00000040L, 158*d56f51eaSDavid van Moolenbroek SF_LOOPBACK = 0x00000080L, 159*d56f51eaSDavid van Moolenbroek SF_RECEIVE_CHAIN = 0x00000100L, 160*d56f51eaSDavid van Moolenbroek SF_SOURCE_ROUTING = 0x00000200L, 161*d56f51eaSDavid van Moolenbroek SF_RESET_MAC = 0x00000400L, 162*d56f51eaSDavid van Moolenbroek SF_OPEN_CLOSE = 0x00000800L, 163*d56f51eaSDavid van Moolenbroek SF_INTERRUPT_REQUEST = 0x00001000L, 164*d56f51eaSDavid van Moolenbroek SF_SOURCE_ROUTING_BRIDGE = 0x00002000L, 165*d56f51eaSDavid van Moolenbroek SF_VIRTUAL_ADDRESSES = 0x00004000L 166*d56f51eaSDavid van Moolenbroek } NdisMacServiceFlags; 167*d56f51eaSDavid van Moolenbroek 168*d56f51eaSDavid van Moolenbroek typedef enum { 169*d56f51eaSDavid van Moolenbroek REQ_INITIATE_BIND = 1, 170*d56f51eaSDavid van Moolenbroek REQ_BIND = 2, 171*d56f51eaSDavid van Moolenbroek REQ_INITIATE_PREBIND = 3, 172*d56f51eaSDavid van Moolenbroek REQ_INITIATE_UNBIND = 4, 173*d56f51eaSDavid van Moolenbroek REQ_UNBIND = 5 174*d56f51eaSDavid van Moolenbroek } NdisSysRequest; 175*d56f51eaSDavid van Moolenbroek 176*d56f51eaSDavid van Moolenbroek typedef enum { 177*d56f51eaSDavid van Moolenbroek PM_GET_PROTOCOL_MANAGER_INFO = 1, 178*d56f51eaSDavid van Moolenbroek PM_REGISTER_MODULE = 2, 179*d56f51eaSDavid van Moolenbroek PM_BIND_AND_START = 3, 180*d56f51eaSDavid van Moolenbroek PM_GET_PROTOCOL_MANAGER_LINKAGE = 4, 181*d56f51eaSDavid van Moolenbroek PM_GET_PROTOCOL_INI_PATH = 5, 182*d56f51eaSDavid van Moolenbroek PM_REGISTER_PROTOCOL_MANAGER_INFO = 6, 183*d56f51eaSDavid van Moolenbroek PM_INIT_AND_REGISTER = 7, 184*d56f51eaSDavid van Moolenbroek PM_UNBIND_AND_STOP = 8, 185*d56f51eaSDavid van Moolenbroek PM_BIND_STATUS = 9, 186*d56f51eaSDavid van Moolenbroek PM_REGISTER_STATUS = 10 187*d56f51eaSDavid van Moolenbroek } NdisProtManager; 188*d56f51eaSDavid van Moolenbroek 189*d56f51eaSDavid van Moolenbroek 190*d56f51eaSDavid van Moolenbroek typedef enum { 191*d56f51eaSDavid van Moolenbroek ERR_SUCCESS = 0x00, 192*d56f51eaSDavid van Moolenbroek ERR_WAIT_FOR_RELEASE = 0x01, 193*d56f51eaSDavid van Moolenbroek ERR_REQUEST_QUEUED = 0x02, 194*d56f51eaSDavid van Moolenbroek ERR_FRAME_NOT_RECOGNIZED = 0x03, 195*d56f51eaSDavid van Moolenbroek ERR_FRAME_REJECTED = 0x04, 196*d56f51eaSDavid van Moolenbroek ERR_FORWARD_FRAME = 0x05, 197*d56f51eaSDavid van Moolenbroek ERR_OUT_OF_RESOURCE = 0x06, 198*d56f51eaSDavid van Moolenbroek ERR_INVALID_PARAMETER = 0x07, 199*d56f51eaSDavid van Moolenbroek ERR_INVALID_FUNCTION = 0x08, 200*d56f51eaSDavid van Moolenbroek ERR_NOT_SUPPORTED = 0x09, 201*d56f51eaSDavid van Moolenbroek ERR_HARDWARE_ERROR = 0x0A, 202*d56f51eaSDavid van Moolenbroek ERR_TRANSMIT_ERROR = 0x0B, 203*d56f51eaSDavid van Moolenbroek ERR_NO_SUCH_DESTINATION = 0x0C, 204*d56f51eaSDavid van Moolenbroek ERR_BUFFER_TOO_SMALL = 0x0D, 205*d56f51eaSDavid van Moolenbroek ERR_ALREADY_STARTED = 0x20, 206*d56f51eaSDavid van Moolenbroek ERR_INCOMPLETE_BINDING = 0x21, 207*d56f51eaSDavid van Moolenbroek ERR_DRIVER_NOT_INITIALIZED = 0x22, 208*d56f51eaSDavid van Moolenbroek ERR_HARDWARE_NOT_FOUND = 0x23, 209*d56f51eaSDavid van Moolenbroek ERR_HARDWARE_FAILURE = 0x24, 210*d56f51eaSDavid van Moolenbroek ERR_CONFIGURATION_FAILURE = 0x25, 211*d56f51eaSDavid van Moolenbroek ERR_INTERRUPT_CONFLICT = 0x26, 212*d56f51eaSDavid van Moolenbroek ERR_INCOMPATIBLE_MAC = 0x27, 213*d56f51eaSDavid van Moolenbroek ERR_INITIALIZATION_FAILED = 0x28, 214*d56f51eaSDavid van Moolenbroek ERR_NO_BINDING = 0x29, 215*d56f51eaSDavid van Moolenbroek ERR_NETWORK_MAY_NOT_BE_CONNECTED = 0x2A, 216*d56f51eaSDavid van Moolenbroek ERR_INCOMPATIBLE_OS_VERSION = 0x2B, 217*d56f51eaSDavid van Moolenbroek ERR_ALREADY_REGISTERED = 0x2C, 218*d56f51eaSDavid van Moolenbroek ERR_PATH_NOT_FOUND = 0x2D, 219*d56f51eaSDavid van Moolenbroek ERR_INSUFFICIENT_MEMORY = 0x2E, 220*d56f51eaSDavid van Moolenbroek ERR_INFO_NOT_FOUND = 0x2F, 221*d56f51eaSDavid van Moolenbroek ERR_GENERAL_FAILURE = 0xFF 222*d56f51eaSDavid van Moolenbroek } NdisError; 223*d56f51eaSDavid van Moolenbroek 224*d56f51eaSDavid van Moolenbroek #define NDIS_PARAM_INTEGER 0 225*d56f51eaSDavid van Moolenbroek #define NDIS_PARAM_STRING 1 226*d56f51eaSDavid van Moolenbroek 227*d56f51eaSDavid van Moolenbroek #define NDIS_TX_BUF_LENGTH 8 228*d56f51eaSDavid van Moolenbroek #define NDIS_TD_BUF_LENGTH 1 229*d56f51eaSDavid van Moolenbroek #define NDIS_RX_BUF_LENGTH 8 230*d56f51eaSDavid van Moolenbroek 231*d56f51eaSDavid van Moolenbroek #define NDIS_PTR_PHYSICAL 0 232*d56f51eaSDavid van Moolenbroek #define NDIS_PTR_VIRTUAL 2 233*d56f51eaSDavid van Moolenbroek 234*d56f51eaSDavid van Moolenbroek #define NDIS_PATH "PROTMAN$" 235*d56f51eaSDavid van Moolenbroek 236*d56f51eaSDavid van Moolenbroek 237*d56f51eaSDavid van Moolenbroek typedef struct _CommonChars { 238*d56f51eaSDavid van Moolenbroek WORD tableSize; 239*d56f51eaSDavid van Moolenbroek BYTE majorNdisVersion; /* 2 - Latest version */ 240*d56f51eaSDavid van Moolenbroek BYTE minorNdisVersion; /* 0 */ 241*d56f51eaSDavid van Moolenbroek WORD reserved1; 242*d56f51eaSDavid van Moolenbroek BYTE majorModuleVersion; 243*d56f51eaSDavid van Moolenbroek BYTE minorModuleVersion; 244*d56f51eaSDavid van Moolenbroek DWORD moduleFlags; 245*d56f51eaSDavid van Moolenbroek /* 0 - Binding at upper boundary supported 246*d56f51eaSDavid van Moolenbroek * 1 - Binding at lower boundary supported 247*d56f51eaSDavid van Moolenbroek * 2 - Dynamically bound. 248*d56f51eaSDavid van Moolenbroek * 3-31 - Reserved, must be zero. 249*d56f51eaSDavid van Moolenbroek */ 250*d56f51eaSDavid van Moolenbroek BYTE moduleName[16]; 251*d56f51eaSDavid van Moolenbroek BYTE protocolLevelUpper; 252*d56f51eaSDavid van Moolenbroek /* 1 - MAC 253*d56f51eaSDavid van Moolenbroek * 2 - Data Link 254*d56f51eaSDavid van Moolenbroek * 3 - Network 255*d56f51eaSDavid van Moolenbroek * 4 - Transport 256*d56f51eaSDavid van Moolenbroek * 5 - Session 257*d56f51eaSDavid van Moolenbroek * -1 - Not specified 258*d56f51eaSDavid van Moolenbroek */ 259*d56f51eaSDavid van Moolenbroek BYTE interfaceUpper; 260*d56f51eaSDavid van Moolenbroek BYTE protocolLevelLower; 261*d56f51eaSDavid van Moolenbroek /* 0 - Physical 262*d56f51eaSDavid van Moolenbroek * 1 - MAC 263*d56f51eaSDavid van Moolenbroek * 2 - Data Link 264*d56f51eaSDavid van Moolenbroek * 3 - Network 265*d56f51eaSDavid van Moolenbroek * 4 - Transport 266*d56f51eaSDavid van Moolenbroek * 5 - Session 267*d56f51eaSDavid van Moolenbroek * -1 - Not specified 268*d56f51eaSDavid van Moolenbroek */ 269*d56f51eaSDavid van Moolenbroek BYTE interfaceLower; 270*d56f51eaSDavid van Moolenbroek WORD moduleId; 271*d56f51eaSDavid van Moolenbroek WORD moduleDS; 272*d56f51eaSDavid van Moolenbroek SystemRequest systemRequest; 273*d56f51eaSDavid van Moolenbroek BYTE *serviceChars; 274*d56f51eaSDavid van Moolenbroek BYTE *serviceStatus; 275*d56f51eaSDavid van Moolenbroek BYTE *upperDispatchTable; 276*d56f51eaSDavid van Moolenbroek BYTE *lowerDispatchTable; 277*d56f51eaSDavid van Moolenbroek BYTE *reserved2; /* Must be NULL */ 278*d56f51eaSDavid van Moolenbroek BYTE *reserved3; /* Must be NULL */ 279*d56f51eaSDavid van Moolenbroek } CommonChars; 280*d56f51eaSDavid van Moolenbroek 281*d56f51eaSDavid van Moolenbroek 282*d56f51eaSDavid van Moolenbroek typedef struct _MulticastList { 283*d56f51eaSDavid van Moolenbroek WORD maxMulticastAddresses; 284*d56f51eaSDavid van Moolenbroek WORD numberMulticastAddresses; 285*d56f51eaSDavid van Moolenbroek BYTE multicastAddress[16][16]; 286*d56f51eaSDavid van Moolenbroek } MulticastList; 287*d56f51eaSDavid van Moolenbroek 288*d56f51eaSDavid van Moolenbroek 289*d56f51eaSDavid van Moolenbroek typedef struct _MacChars { 290*d56f51eaSDavid van Moolenbroek WORD tableSize; 291*d56f51eaSDavid van Moolenbroek BYTE macName[16]; 292*d56f51eaSDavid van Moolenbroek WORD addressLength; 293*d56f51eaSDavid van Moolenbroek BYTE permanentAddress[16]; 294*d56f51eaSDavid van Moolenbroek BYTE currentAddress[16]; 295*d56f51eaSDavid van Moolenbroek DWORD currentFunctionalAddress; 296*d56f51eaSDavid van Moolenbroek MulticastList *multicastList; 297*d56f51eaSDavid van Moolenbroek DWORD linkSpeed; 298*d56f51eaSDavid van Moolenbroek DWORD serviceFlags; 299*d56f51eaSDavid van Moolenbroek WORD maxFrameSize; 300*d56f51eaSDavid van Moolenbroek DWORD txBufferSize; 301*d56f51eaSDavid van Moolenbroek WORD txBufferAllocSize; 302*d56f51eaSDavid van Moolenbroek DWORD rxBufferSize; 303*d56f51eaSDavid van Moolenbroek WORD rxBufferAllocSize; 304*d56f51eaSDavid van Moolenbroek BYTE ieeeVendor[3]; 305*d56f51eaSDavid van Moolenbroek BYTE vendorAdapter; 306*d56f51eaSDavid van Moolenbroek BYTE *vendorAdapterDescription; 307*d56f51eaSDavid van Moolenbroek WORD interruptLevel; 308*d56f51eaSDavid van Moolenbroek WORD txQueueDepth; 309*d56f51eaSDavid van Moolenbroek WORD maxDataBlocks; 310*d56f51eaSDavid van Moolenbroek } MacChars; 311*d56f51eaSDavid van Moolenbroek 312*d56f51eaSDavid van Moolenbroek 313*d56f51eaSDavid van Moolenbroek typedef struct _ProtocolChars { 314*d56f51eaSDavid van Moolenbroek WORD length; 315*d56f51eaSDavid van Moolenbroek BYTE name[16]; 316*d56f51eaSDavid van Moolenbroek WORD type; 317*d56f51eaSDavid van Moolenbroek } ProtocolChars; 318*d56f51eaSDavid van Moolenbroek 319*d56f51eaSDavid van Moolenbroek 320*d56f51eaSDavid van Moolenbroek typedef struct _MacUpperDispatch { 321*d56f51eaSDavid van Moolenbroek CommonChars *backPointer; 322*d56f51eaSDavid van Moolenbroek Request request; 323*d56f51eaSDavid van Moolenbroek TransmitChain transmitChain; 324*d56f51eaSDavid van Moolenbroek TransferData transferData; 325*d56f51eaSDavid van Moolenbroek ReceiveRelease receiveRelease; 326*d56f51eaSDavid van Moolenbroek IndicationOn indicationOn; 327*d56f51eaSDavid van Moolenbroek IndicationOff indicationOff; 328*d56f51eaSDavid van Moolenbroek } MacUpperDispatch; 329*d56f51eaSDavid van Moolenbroek 330*d56f51eaSDavid van Moolenbroek 331*d56f51eaSDavid van Moolenbroek typedef struct _MacStatusTable { 332*d56f51eaSDavid van Moolenbroek WORD tableSize; 333*d56f51eaSDavid van Moolenbroek DWORD lastDiag; 334*d56f51eaSDavid van Moolenbroek DWORD macStatus; 335*d56f51eaSDavid van Moolenbroek WORD packetFilter; 336*d56f51eaSDavid van Moolenbroek BYTE *mediaSpecificStats; 337*d56f51eaSDavid van Moolenbroek DWORD lastClear; 338*d56f51eaSDavid van Moolenbroek DWORD totalFramesRx; 339*d56f51eaSDavid van Moolenbroek DWORD totalFramesCrc; 340*d56f51eaSDavid van Moolenbroek DWORD totalBytesRx; 341*d56f51eaSDavid van Moolenbroek DWORD totalDiscardBufSpaceRx; 342*d56f51eaSDavid van Moolenbroek DWORD totalMulticastRx; 343*d56f51eaSDavid van Moolenbroek DWORD totalBroadcastRx; 344*d56f51eaSDavid van Moolenbroek DWORD obsolete1[5]; 345*d56f51eaSDavid van Moolenbroek DWORD totalDiscardHwErrorRx; 346*d56f51eaSDavid van Moolenbroek DWORD totalFramesTx; 347*d56f51eaSDavid van Moolenbroek DWORD totalBytesTx; 348*d56f51eaSDavid van Moolenbroek DWORD totalMulticastTx; 349*d56f51eaSDavid van Moolenbroek DWORD totalBroadcastTx; 350*d56f51eaSDavid van Moolenbroek DWORD obsolete2[2]; 351*d56f51eaSDavid van Moolenbroek DWORD totalDiscardTimeoutTx; 352*d56f51eaSDavid van Moolenbroek DWORD totalDiscardHwErrorTx; 353*d56f51eaSDavid van Moolenbroek } MacStatusTable; 354*d56f51eaSDavid van Moolenbroek 355*d56f51eaSDavid van Moolenbroek 356*d56f51eaSDavid van Moolenbroek typedef struct _ProtDispatch { 357*d56f51eaSDavid van Moolenbroek CommonChars *backPointer; 358*d56f51eaSDavid van Moolenbroek DWORD flags; 359*d56f51eaSDavid van Moolenbroek /* 0 - handles non-LLC frames 360*d56f51eaSDavid van Moolenbroek * 1 - handles specific-LSAP LLC frames 361*d56f51eaSDavid van Moolenbroek * 2 - handles specific-LSAP LLC frames 362*d56f51eaSDavid van Moolenbroek * 3-31 - reserved must be 0 363*d56f51eaSDavid van Moolenbroek */ 364*d56f51eaSDavid van Moolenbroek void (*requestConfirm) (void); 365*d56f51eaSDavid van Moolenbroek void (*transmitConfirm) (void); 366*d56f51eaSDavid van Moolenbroek void (*receiveLookahead) (void); 367*d56f51eaSDavid van Moolenbroek void (*indicationComplete) (void); 368*d56f51eaSDavid van Moolenbroek void (*receiveChain) (void); 369*d56f51eaSDavid van Moolenbroek void (*status) (void); 370*d56f51eaSDavid van Moolenbroek } ProtDispatch; 371*d56f51eaSDavid van Moolenbroek 372*d56f51eaSDavid van Moolenbroek 373*d56f51eaSDavid van Moolenbroek typedef struct _ReqBlock { 374*d56f51eaSDavid van Moolenbroek WORD opcode; 375*d56f51eaSDavid van Moolenbroek WORD status; 376*d56f51eaSDavid van Moolenbroek BYTE FAR *pointer1; 377*d56f51eaSDavid van Moolenbroek BYTE FAR *pointer2; 378*d56f51eaSDavid van Moolenbroek WORD word1; 379*d56f51eaSDavid van Moolenbroek } ReqBlock; 380*d56f51eaSDavid van Moolenbroek 381*d56f51eaSDavid van Moolenbroek 382*d56f51eaSDavid van Moolenbroek typedef struct _TxBufDescrRec { 383*d56f51eaSDavid van Moolenbroek BYTE txPtrType; 384*d56f51eaSDavid van Moolenbroek BYTE dummy; 385*d56f51eaSDavid van Moolenbroek WORD txDataLen; 386*d56f51eaSDavid van Moolenbroek BYTE *txDataPtr; 387*d56f51eaSDavid van Moolenbroek } TxBufDescrRec; 388*d56f51eaSDavid van Moolenbroek 389*d56f51eaSDavid van Moolenbroek 390*d56f51eaSDavid van Moolenbroek typedef struct _TxBufDescr { 391*d56f51eaSDavid van Moolenbroek WORD txImmedLen; 392*d56f51eaSDavid van Moolenbroek BYTE *txImmedPtr; 393*d56f51eaSDavid van Moolenbroek WORD txDataCount; 394*d56f51eaSDavid van Moolenbroek TxBufDescrRec txBufDescrRec[NDIS_TX_BUF_LENGTH]; 395*d56f51eaSDavid van Moolenbroek } TxBufDescr; 396*d56f51eaSDavid van Moolenbroek 397*d56f51eaSDavid van Moolenbroek 398*d56f51eaSDavid van Moolenbroek typedef struct _TDBufDescrRec { 399*d56f51eaSDavid van Moolenbroek BYTE tDPtrType; 400*d56f51eaSDavid van Moolenbroek BYTE dummy; 401*d56f51eaSDavid van Moolenbroek WORD tDDataLen; 402*d56f51eaSDavid van Moolenbroek BYTE *tDDataPtr; 403*d56f51eaSDavid van Moolenbroek } TDBufDescrRec; 404*d56f51eaSDavid van Moolenbroek 405*d56f51eaSDavid van Moolenbroek 406*d56f51eaSDavid van Moolenbroek typedef struct _TDBufDescr { 407*d56f51eaSDavid van Moolenbroek WORD tDDataCount; 408*d56f51eaSDavid van Moolenbroek TDBufDescrRec tDBufDescrRec[NDIS_TD_BUF_LENGTH]; 409*d56f51eaSDavid van Moolenbroek } TDBufDescr; 410*d56f51eaSDavid van Moolenbroek 411*d56f51eaSDavid van Moolenbroek 412*d56f51eaSDavid van Moolenbroek typedef struct _RxBufDescrRec { 413*d56f51eaSDavid van Moolenbroek WORD rxDataLen; 414*d56f51eaSDavid van Moolenbroek BYTE *rxDataPtr; 415*d56f51eaSDavid van Moolenbroek } RxBufDescrRec; 416*d56f51eaSDavid van Moolenbroek 417*d56f51eaSDavid van Moolenbroek 418*d56f51eaSDavid van Moolenbroek typedef struct _RxBufDescr { 419*d56f51eaSDavid van Moolenbroek WORD rxDataCount; 420*d56f51eaSDavid van Moolenbroek RxBufDescrRec rxBufDescrRec[NDIS_RX_BUF_LENGTH]; 421*d56f51eaSDavid van Moolenbroek } RxBufDescr; 422*d56f51eaSDavid van Moolenbroek 423*d56f51eaSDavid van Moolenbroek 424*d56f51eaSDavid van Moolenbroek typedef struct _PktBuf { 425*d56f51eaSDavid van Moolenbroek struct _PktBuf *nextLink; 426*d56f51eaSDavid van Moolenbroek struct _PktBuf *prevLink; 427*d56f51eaSDavid van Moolenbroek int handle; 428*d56f51eaSDavid van Moolenbroek int length; 429*d56f51eaSDavid van Moolenbroek int packetLength; 430*d56f51eaSDavid van Moolenbroek DWORD sequence; 431*d56f51eaSDavid van Moolenbroek BYTE *buffer; 432*d56f51eaSDavid van Moolenbroek } PktBuf; 433*d56f51eaSDavid van Moolenbroek 434*d56f51eaSDavid van Moolenbroek 435*d56f51eaSDavid van Moolenbroek typedef struct _CardHandle { 436*d56f51eaSDavid van Moolenbroek BYTE moduleName[16]; 437*d56f51eaSDavid van Moolenbroek CommonChars *common; 438*d56f51eaSDavid van Moolenbroek } CardHandle; 439*d56f51eaSDavid van Moolenbroek 440*d56f51eaSDavid van Moolenbroek 441*d56f51eaSDavid van Moolenbroek typedef struct _BindingsList { 442*d56f51eaSDavid van Moolenbroek WORD numBindings; 443*d56f51eaSDavid van Moolenbroek BYTE moduleName[2][16]; 444*d56f51eaSDavid van Moolenbroek } BindingsList; 445*d56f51eaSDavid van Moolenbroek 446*d56f51eaSDavid van Moolenbroek 447*d56f51eaSDavid van Moolenbroek typedef struct _FailingModules { 448*d56f51eaSDavid van Moolenbroek BYTE upperModuleName[16]; 449*d56f51eaSDavid van Moolenbroek BYTE lowerModuleName[16]; 450*d56f51eaSDavid van Moolenbroek } FailingModules; 451*d56f51eaSDavid van Moolenbroek 452*d56f51eaSDavid van Moolenbroek 453*d56f51eaSDavid van Moolenbroek typedef union _HardwareAddress { 454*d56f51eaSDavid van Moolenbroek BYTE bytes[6]; 455*d56f51eaSDavid van Moolenbroek WORD words[3]; 456*d56f51eaSDavid van Moolenbroek struct { 457*d56f51eaSDavid van Moolenbroek BYTE bytes[6]; 458*d56f51eaSDavid van Moolenbroek } addr; 459*d56f51eaSDavid van Moolenbroek } HardwareAddress; 460*d56f51eaSDavid van Moolenbroek 461*d56f51eaSDavid van Moolenbroek 462*d56f51eaSDavid van Moolenbroek typedef struct _FddiHeader { 463*d56f51eaSDavid van Moolenbroek BYTE frameControl; 464*d56f51eaSDavid van Moolenbroek HardwareAddress etherDestHost; 465*d56f51eaSDavid van Moolenbroek HardwareAddress etherSrcHost; 466*d56f51eaSDavid van Moolenbroek } FddiHeader; 467*d56f51eaSDavid van Moolenbroek 468*d56f51eaSDavid van Moolenbroek 469*d56f51eaSDavid van Moolenbroek typedef struct _EthernetIIHeader { 470*d56f51eaSDavid van Moolenbroek HardwareAddress etherDestHost; 471*d56f51eaSDavid van Moolenbroek HardwareAddress etherSrcHost; 472*d56f51eaSDavid van Moolenbroek WORD etherType; 473*d56f51eaSDavid van Moolenbroek } EthernetIIHeader; 474*d56f51eaSDavid van Moolenbroek 475*d56f51eaSDavid van Moolenbroek 476*d56f51eaSDavid van Moolenbroek typedef struct _Ieee802Dot5Header { 477*d56f51eaSDavid van Moolenbroek HardwareAddress etherDestHost; 478*d56f51eaSDavid van Moolenbroek HardwareAddress etherSrcHost; 479*d56f51eaSDavid van Moolenbroek BYTE routeInfo[30]; 480*d56f51eaSDavid van Moolenbroek } Ieee802Dot5Header; 481*d56f51eaSDavid van Moolenbroek 482*d56f51eaSDavid van Moolenbroek 483*d56f51eaSDavid van Moolenbroek typedef struct _Ieee802Dot2SnapHeader { 484*d56f51eaSDavid van Moolenbroek BYTE dsap; /* 0xAA */ 485*d56f51eaSDavid van Moolenbroek BYTE ssap; /* 0xAA */ 486*d56f51eaSDavid van Moolenbroek BYTE control; /* 3 */ 487*d56f51eaSDavid van Moolenbroek BYTE protocolId[5]; 488*d56f51eaSDavid van Moolenbroek } Ieee802Dot2SnapHeader; 489*d56f51eaSDavid van Moolenbroek 490*d56f51eaSDavid van Moolenbroek 491*d56f51eaSDavid van Moolenbroek /* 492*d56f51eaSDavid van Moolenbroek * Prototypes 493*d56f51eaSDavid van Moolenbroek */ 494*d56f51eaSDavid van Moolenbroek extern char *NdisLastError (void); 495*d56f51eaSDavid van Moolenbroek extern int NdisOpen (void); 496*d56f51eaSDavid van Moolenbroek extern int NdisInit (int promis); 497*d56f51eaSDavid van Moolenbroek extern int NdisRegisterAndBind (int promis); 498*d56f51eaSDavid van Moolenbroek extern void NdisShutdown (void); 499*d56f51eaSDavid van Moolenbroek extern void NdisCheckMacFeatures (struct _CardHandle *card); 500*d56f51eaSDavid van Moolenbroek extern int NdisSendPacket (struct _PktBuf *pktBuf, int macId); 501*d56f51eaSDavid van Moolenbroek 502*d56f51eaSDavid van Moolenbroek /* 503*d56f51eaSDavid van Moolenbroek * Assembly "glue" functions 504*d56f51eaSDavid van Moolenbroek */ 505*d56f51eaSDavid van Moolenbroek extern int systemRequestGlue(); 506*d56f51eaSDavid van Moolenbroek extern int requestConfirmGlue(); 507*d56f51eaSDavid van Moolenbroek extern int transmitConfirmGlue(); 508*d56f51eaSDavid van Moolenbroek extern int receiveLookaheadGlue(); 509*d56f51eaSDavid van Moolenbroek extern int indicationCompleteGlue(); 510*d56f51eaSDavid van Moolenbroek extern int receiveChainGlue(); 511*d56f51eaSDavid van Moolenbroek extern int statusGlue(); 512*d56f51eaSDavid van Moolenbroek 513*d56f51eaSDavid van Moolenbroek /* 514*d56f51eaSDavid van Moolenbroek * IOCTL function 515*d56f51eaSDavid van Moolenbroek */ 516*d56f51eaSDavid van Moolenbroek #ifdef __SMALL__ 517*d56f51eaSDavid van Moolenbroek extern int _far NdisGetLinkage (int handle, char *data, int size); 518*d56f51eaSDavid van Moolenbroek #else 519*d56f51eaSDavid van Moolenbroek extern int NdisGetLinkage (int handle, char *data, int size); 520*d56f51eaSDavid van Moolenbroek #endif 521*d56f51eaSDavid van Moolenbroek 522*d56f51eaSDavid van Moolenbroek /* 523*d56f51eaSDavid van Moolenbroek * NDIS callback handlers 524*d56f51eaSDavid van Moolenbroek */ 525*d56f51eaSDavid van Moolenbroek CALLBACK (NdisSystemRequest (DWORD,DWORD, WORD, WORD, WORD)); 526*d56f51eaSDavid van Moolenbroek CALLBACK (NdisRequestConfirm ( WORD, WORD, WORD, WORD, WORD,WORD)); 527*d56f51eaSDavid van Moolenbroek CALLBACK (NdisTransmitConfirm ( WORD, WORD, WORD, WORD, WORD)); 528*d56f51eaSDavid van Moolenbroek CALLBACK (NdisReceiveLookahead ( WORD, WORD, WORD, BYTE*, BYTE*, WORD)); 529*d56f51eaSDavid van Moolenbroek CALLBACK (NdisReceiveChain ( WORD, WORD, WORD, struct _RxBufDescr*, BYTE*, WORD)); 530*d56f51eaSDavid van Moolenbroek CALLBACK (NdisStatusProc ( WORD, WORD, BYTE*, WORD,WORD)); 531*d56f51eaSDavid van Moolenbroek CALLBACK (NdisIndicationComplete( WORD, WORD)); 532*d56f51eaSDavid van Moolenbroek 533*d56f51eaSDavid van Moolenbroek BYTE *NdisAllocStack (void); 534*d56f51eaSDavid van Moolenbroek void NdisFreeStack (BYTE*); 535*d56f51eaSDavid van Moolenbroek 536*d56f51eaSDavid van Moolenbroek #ifdef __HIGHC__ 537*d56f51eaSDavid van Moolenbroek #define RENAME_ASM_SYM(x) pragma Alias(x,"@" #x "") /* prepend `@' */ 538*d56f51eaSDavid van Moolenbroek #define RENAME_C_SYM(x) pragma Alias(x,"_" #x "") /* prepend `_' */ 539*d56f51eaSDavid van Moolenbroek 540*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (systemRequestGlue); 541*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (requestConfirmGlue); 542*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (transmitConfirmGlue); 543*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (receiveLookaheadGlue); 544*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (indicationCompleteGlue); 545*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (receiveChainGlue); 546*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (statusGlue); 547*d56f51eaSDavid van Moolenbroek RENAME_ASM_SYM (NdisGetLinkage); 548*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisSystemRequest); 549*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisRequestConfirm); 550*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisTransmitConfirm); 551*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisReceiveLookahead); 552*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisIndicationComplete); 553*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisReceiveChain); 554*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisStatusProc); 555*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisAllocStack); 556*d56f51eaSDavid van Moolenbroek RENAME_C_SYM (NdisFreeStack); 557*d56f51eaSDavid van Moolenbroek #endif 558*d56f51eaSDavid van Moolenbroek 559*d56f51eaSDavid van Moolenbroek #endif 560