| /* |
| * Copyright (c) 1993,1994 |
| * Texas A&M University. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. All advertising materials mentioning features or use of this software |
| * must display the following acknowledgement: |
| * This product includes software developed by Texas A&M University |
| * and its contributors. |
| * 4. Neither the name of the University nor the names of its contributors |
| * may be used to endorse or promote products derived from this software |
| * without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| * |
| * Developers: |
| * David K. Hess, Douglas Lee Schales, David R. Safford |
| * |
| * Heavily modified for Metaware HighC + GNU C 2.8+ |
| * Gisle Vanem 1998 |
| */ |
| |
| #ifndef __PCAP_NDIS_H |
| #define __PCAP_NDIS_H |
| |
| #if defined (__HIGHC__) |
| #define pascal _CC(_CALLEE_POPS_STACK & ~_REVERSE_PARMS) /* calling convention */ |
| #define CALLBACK(foo) pascal WORD foo |
| #define PAS_PTR(x,arg) typedef FAR WORD pascal (*x) arg |
| #define GUARD() _inline (0x9C,0xFA) /* pushfd, cli */ |
| #define UNGUARD() _inline (0x9D) /* popfd */ |
| #define FAR _far |
| |
| #elif defined(__GNUC__) |
| #define CALLBACK(foo) WORD foo __attribute__((stdcall)) |
| #define PAS_PTR(x,arg) typedef WORD (*x) arg __attribute__((stdcall)) |
| #define GUARD() __asm__ __volatile__ ("pushfd; cli") |
| #define UNGUARD() __asm__ __volatile__ ("popfd") |
| #define FAR |
| |
| #elif defined (__TURBOC__) |
| #define CALLBACK(foo) WORD pascal foo |
| #define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg |
| #define GUARD() _asm { pushf; cli } |
| #define UNGUARD() _asm { popf } |
| #define FAR _far |
| |
| #elif defined (__WATCOMC__) |
| #define CALLBACK(foo) WORD pascal foo |
| #define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg |
| #define GUARD() _disable() |
| #define UNGUARD() _enable() |
| #define FAR _far |
| |
| #else |
| #error Unsupported compiler |
| #endif |
| |
| |
| /* |
| * Forwards |
| */ |
| struct _ReqBlock; |
| struct _TxBufDescr; |
| struct _TDBufDescr; |
| |
| /* |
| * Protocol Manager API |
| */ |
| PAS_PTR (ProtMan, (struct _ReqBlock FAR*, WORD)); |
| |
| /* |
| * System request |
| */ |
| PAS_PTR (SystemRequest, (DWORD, DWORD, WORD, WORD, WORD)); |
| |
| /* |
| * MAC API |
| */ |
| PAS_PTR (TransmitChain, (WORD, WORD, struct _TxBufDescr FAR*, WORD)); |
| PAS_PTR (TransferData, (WORD*,WORD, struct _TDBufDescr FAR*, WORD)); |
| PAS_PTR (Request, (WORD, WORD, WORD, DWORD, WORD, WORD)); |
| PAS_PTR (ReceiveRelease,(WORD, WORD)); |
| PAS_PTR (IndicationOn, (WORD)); |
| PAS_PTR (IndicationOff, (WORD)); |
| |
| |
| typedef enum { |
| HARDWARE_NOT_INSTALLED = 0, |
| HARDWARE_FAILED_DIAG = 1, |
| HARDWARE_FAILED_CONFIG = 2, |
| HARDWARE_HARD_FAULT = 3, |
| HARDWARE_SOFT_FAULT = 4, |
| HARDWARE_OK = 7, |
| HARDWARE_MASK = 0x0007, |
| MAC_BOUND = 0x0008, |
| MAC_OPEN = 0x0010, |
| DIAG_IN_PROGRESS = 0x0020 |
| } NdisMacStatus; |
| |
| typedef enum { |
| STATUS_RING_STATUS = 1, |
| STATUS_ADAPTER_CHECK = 2, |
| STATUS_START_RESET = 3, |
| STATUS_INTERRUPT = 4, |
| STATUS_END_RESET = 5 |
| } NdisStatus; |
| |
| typedef enum { |
| FILTER_DIRECTED = 1, |
| FILTER_BROADCAST = 2, |
| FILTER_PROMISCUOUS = 4, |
| FILTER_SOURCE_ROUTE = 8 |
| } NdisPacketFilter; |
| |
| typedef enum { |
| REQ_INITIATE_DIAGNOSTICS = 1, |
| REQ_READ_ERROR_LOG = 2, |
| REQ_SET_STATION_ADDRESS = 3, |
| REQ_OPEN_ADAPTER = 4, |
| REQ_CLOSE_ADAPTER = 5, |
| REQ_RESET_MAC = 6, |
| REQ_SET_PACKET_FILTER = 7, |
| REQ_ADD_MULTICAST_ADDRESS = 8, |
| REQ_DELETE_MULTICAST_ADDRESS = 9, |
| REQ_UPDATE_STATISTICS = 10, |
| REQ_CLEAR_STATISTICS = 11, |
| REQ_INTERRUPT_REQUEST = 12, |
| REQ_SET_FUNCTIONAL_ADDRESS = 13, |
| REQ_SET_LOOKAHEAD = 14 |
| } NdisGeneralRequest; |
| |
| typedef enum { |
| SF_BROADCAST = 0x00000001L, |
| SF_MULTICAST = 0x00000002L, |
| SF_FUNCTIONAL = 0x00000004L, |
| SF_PROMISCUOUS = 0x00000008L, |
| SF_SOFT_ADDRESS = 0x00000010L, |
| SF_STATS_CURRENT = 0x00000020L, |
| SF_INITIATE_DIAGS = 0x00000040L, |
| SF_LOOPBACK = 0x00000080L, |
| SF_RECEIVE_CHAIN = 0x00000100L, |
| SF_SOURCE_ROUTING = 0x00000200L, |
| SF_RESET_MAC = 0x00000400L, |
| SF_OPEN_CLOSE = 0x00000800L, |
| SF_INTERRUPT_REQUEST = 0x00001000L, |
| SF_SOURCE_ROUTING_BRIDGE = 0x00002000L, |
| SF_VIRTUAL_ADDRESSES = 0x00004000L |
| } NdisMacServiceFlags; |
| |
| typedef enum { |
| REQ_INITIATE_BIND = 1, |
| REQ_BIND = 2, |
| REQ_INITIATE_PREBIND = 3, |
| REQ_INITIATE_UNBIND = 4, |
| REQ_UNBIND = 5 |
| } NdisSysRequest; |
| |
| typedef enum { |
| PM_GET_PROTOCOL_MANAGER_INFO = 1, |
| PM_REGISTER_MODULE = 2, |
| PM_BIND_AND_START = 3, |
| PM_GET_PROTOCOL_MANAGER_LINKAGE = 4, |
| PM_GET_PROTOCOL_INI_PATH = 5, |
| PM_REGISTER_PROTOCOL_MANAGER_INFO = 6, |
| PM_INIT_AND_REGISTER = 7, |
| PM_UNBIND_AND_STOP = 8, |
| PM_BIND_STATUS = 9, |
| PM_REGISTER_STATUS = 10 |
| } NdisProtManager; |
| |
| |
| typedef enum { |
| ERR_SUCCESS = 0x00, |
| ERR_WAIT_FOR_RELEASE = 0x01, |
| ERR_REQUEST_QUEUED = 0x02, |
| ERR_FRAME_NOT_RECOGNIZED = 0x03, |
| ERR_FRAME_REJECTED = 0x04, |
| ERR_FORWARD_FRAME = 0x05, |
| ERR_OUT_OF_RESOURCE = 0x06, |
| ERR_INVALID_PARAMETER = 0x07, |
| ERR_INVALID_FUNCTION = 0x08, |
| ERR_NOT_SUPPORTED = 0x09, |
| ERR_HARDWARE_ERROR = 0x0A, |
| ERR_TRANSMIT_ERROR = 0x0B, |
| ERR_NO_SUCH_DESTINATION = 0x0C, |
| ERR_BUFFER_TOO_SMALL = 0x0D, |
| ERR_ALREADY_STARTED = 0x20, |
| ERR_INCOMPLETE_BINDING = 0x21, |
| ERR_DRIVER_NOT_INITIALIZED = 0x22, |
| ERR_HARDWARE_NOT_FOUND = 0x23, |
| ERR_HARDWARE_FAILURE = 0x24, |
| ERR_CONFIGURATION_FAILURE = 0x25, |
| ERR_INTERRUPT_CONFLICT = 0x26, |
| ERR_INCOMPATIBLE_MAC = 0x27, |
| ERR_INITIALIZATION_FAILED = 0x28, |
| ERR_NO_BINDING = 0x29, |
| ERR_NETWORK_MAY_NOT_BE_CONNECTED = 0x2A, |
| ERR_INCOMPATIBLE_OS_VERSION = 0x2B, |
| ERR_ALREADY_REGISTERED = 0x2C, |
| ERR_PATH_NOT_FOUND = 0x2D, |
| ERR_INSUFFICIENT_MEMORY = 0x2E, |
| ERR_INFO_NOT_FOUND = 0x2F, |
| ERR_GENERAL_FAILURE = 0xFF |
| } NdisError; |
| |
| #define NDIS_PARAM_INTEGER 0 |
| #define NDIS_PARAM_STRING 1 |
| |
| #define NDIS_TX_BUF_LENGTH 8 |
| #define NDIS_TD_BUF_LENGTH 1 |
| #define NDIS_RX_BUF_LENGTH 8 |
| |
| #define NDIS_PTR_PHYSICAL 0 |
| #define NDIS_PTR_VIRTUAL 2 |
| |
| #define NDIS_PATH "PROTMAN$" |
| |
| |
| typedef struct _CommonChars { |
| WORD tableSize; |
| BYTE majorNdisVersion; /* 2 - Latest version */ |
| BYTE minorNdisVersion; /* 0 */ |
| WORD reserved1; |
| BYTE majorModuleVersion; |
| BYTE minorModuleVersion; |
| DWORD moduleFlags; |
| /* 0 - Binding at upper boundary supported |
| * 1 - Binding at lower boundary supported |
| * 2 - Dynamically bound. |
| * 3-31 - Reserved, must be zero. |
| */ |
| BYTE moduleName[16]; |
| BYTE protocolLevelUpper; |
| /* 1 - MAC |
| * 2 - Data Link |
| * 3 - Network |
| * 4 - Transport |
| * 5 - Session |
| * -1 - Not specified |
| */ |
| BYTE interfaceUpper; |
| BYTE protocolLevelLower; |
| /* 0 - Physical |
| * 1 - MAC |
| * 2 - Data Link |
| * 3 - Network |
| * 4 - Transport |
| * 5 - Session |
| * -1 - Not specified |
| */ |
| BYTE interfaceLower; |
| WORD moduleId; |
| WORD moduleDS; |
| SystemRequest systemRequest; |
| BYTE *serviceChars; |
| BYTE *serviceStatus; |
| BYTE *upperDispatchTable; |
| BYTE *lowerDispatchTable; |
| BYTE *reserved2; /* Must be NULL */ |
| BYTE *reserved3; /* Must be NULL */ |
| } CommonChars; |
| |
| |
| typedef struct _MulticastList { |
| WORD maxMulticastAddresses; |
| WORD numberMulticastAddresses; |
| BYTE multicastAddress[16][16]; |
| } MulticastList; |
| |
| |
| typedef struct _MacChars { |
| WORD tableSize; |
| BYTE macName[16]; |
| WORD addressLength; |
| BYTE permanentAddress[16]; |
| BYTE currentAddress[16]; |
| DWORD currentFunctionalAddress; |
| MulticastList *multicastList; |
| DWORD linkSpeed; |
| DWORD serviceFlags; |
| WORD maxFrameSize; |
| DWORD txBufferSize; |
| WORD txBufferAllocSize; |
| DWORD rxBufferSize; |
| WORD rxBufferAllocSize; |
| BYTE ieeeVendor[3]; |
| BYTE vendorAdapter; |
| BYTE *vendorAdapterDescription; |
| WORD interruptLevel; |
| WORD txQueueDepth; |
| WORD maxDataBlocks; |
| } MacChars; |
| |
| |
| typedef struct _ProtocolChars { |
| WORD length; |
| BYTE name[16]; |
| WORD type; |
| } ProtocolChars; |
| |
| |
| typedef struct _MacUpperDispatch { |
| CommonChars *backPointer; |
| Request request; |
| TransmitChain transmitChain; |
| TransferData transferData; |
| ReceiveRelease receiveRelease; |
| IndicationOn indicationOn; |
| IndicationOff indicationOff; |
| } MacUpperDispatch; |
| |
| |
| typedef struct _MacStatusTable { |
| WORD tableSize; |
| DWORD lastDiag; |
| DWORD macStatus; |
| WORD packetFilter; |
| BYTE *mediaSpecificStats; |
| DWORD lastClear; |
| DWORD totalFramesRx; |
| DWORD totalFramesCrc; |
| DWORD totalBytesRx; |
| DWORD totalDiscardBufSpaceRx; |
| DWORD totalMulticastRx; |
| DWORD totalBroadcastRx; |
| DWORD obsolete1[5]; |
| DWORD totalDiscardHwErrorRx; |
| DWORD totalFramesTx; |
| DWORD totalBytesTx; |
| DWORD totalMulticastTx; |
| DWORD totalBroadcastTx; |
| DWORD obsolete2[2]; |
| DWORD totalDiscardTimeoutTx; |
| DWORD totalDiscardHwErrorTx; |
| } MacStatusTable; |
| |
| |
| typedef struct _ProtDispatch { |
| CommonChars *backPointer; |
| DWORD flags; |
| /* 0 - handles non-LLC frames |
| * 1 - handles specific-LSAP LLC frames |
| * 2 - handles specific-LSAP LLC frames |
| * 3-31 - reserved must be 0 |
| */ |
| void (*requestConfirm) (void); |
| void (*transmitConfirm) (void); |
| void (*receiveLookahead) (void); |
| void (*indicationComplete) (void); |
| void (*receiveChain) (void); |
| void (*status) (void); |
| } ProtDispatch; |
| |
| |
| typedef struct _ReqBlock { |
| WORD opcode; |
| WORD status; |
| BYTE FAR *pointer1; |
| BYTE FAR *pointer2; |
| WORD word1; |
| } ReqBlock; |
| |
| |
| typedef struct _TxBufDescrRec { |
| BYTE txPtrType; |
| BYTE dummy; |
| WORD txDataLen; |
| BYTE *txDataPtr; |
| } TxBufDescrRec; |
| |
| |
| typedef struct _TxBufDescr { |
| WORD txImmedLen; |
| BYTE *txImmedPtr; |
| WORD txDataCount; |
| TxBufDescrRec txBufDescrRec[NDIS_TX_BUF_LENGTH]; |
| } TxBufDescr; |
| |
| |
| typedef struct _TDBufDescrRec { |
| BYTE tDPtrType; |
| BYTE dummy; |
| WORD tDDataLen; |
| BYTE *tDDataPtr; |
| } TDBufDescrRec; |
| |
| |
| typedef struct _TDBufDescr { |
| WORD tDDataCount; |
| TDBufDescrRec tDBufDescrRec[NDIS_TD_BUF_LENGTH]; |
| } TDBufDescr; |
| |
| |
| typedef struct _RxBufDescrRec { |
| WORD rxDataLen; |
| BYTE *rxDataPtr; |
| } RxBufDescrRec; |
| |
| |
| typedef struct _RxBufDescr { |
| WORD rxDataCount; |
| RxBufDescrRec rxBufDescrRec[NDIS_RX_BUF_LENGTH]; |
| } RxBufDescr; |
| |
| |
| typedef struct _PktBuf { |
| struct _PktBuf *nextLink; |
| struct _PktBuf *prevLink; |
| int handle; |
| int length; |
| int packetLength; |
| DWORD sequence; |
| BYTE *buffer; |
| } PktBuf; |
| |
| |
| typedef struct _CardHandle { |
| BYTE moduleName[16]; |
| CommonChars *common; |
| } CardHandle; |
| |
| |
| typedef struct _BindingsList { |
| WORD numBindings; |
| BYTE moduleName[2][16]; |
| } BindingsList; |
| |
| |
| typedef struct _FailingModules { |
| BYTE upperModuleName[16]; |
| BYTE lowerModuleName[16]; |
| } FailingModules; |
| |
| |
| typedef union _HardwareAddress { |
| BYTE bytes[6]; |
| WORD words[3]; |
| struct { |
| BYTE bytes[6]; |
| } addr; |
| } HardwareAddress; |
| |
| |
| typedef struct _FddiHeader { |
| BYTE frameControl; |
| HardwareAddress etherDestHost; |
| HardwareAddress etherSrcHost; |
| } FddiHeader; |
| |
| |
| typedef struct _EthernetIIHeader { |
| HardwareAddress etherDestHost; |
| HardwareAddress etherSrcHost; |
| WORD etherType; |
| } EthernetIIHeader; |
| |
| |
| typedef struct _Ieee802Dot5Header { |
| HardwareAddress etherDestHost; |
| HardwareAddress etherSrcHost; |
| BYTE routeInfo[30]; |
| } Ieee802Dot5Header; |
| |
| |
| typedef struct _Ieee802Dot2SnapHeader { |
| BYTE dsap; /* 0xAA */ |
| BYTE ssap; /* 0xAA */ |
| BYTE control; /* 3 */ |
| BYTE protocolId[5]; |
| } Ieee802Dot2SnapHeader; |
| |
| |
| /* |
| * Prototypes |
| */ |
| extern char *NdisLastError (void); |
| extern int NdisOpen (void); |
| extern int NdisInit (int promis); |
| extern int NdisRegisterAndBind (int promis); |
| extern void NdisShutdown (void); |
| extern void NdisCheckMacFeatures (struct _CardHandle *card); |
| extern int NdisSendPacket (struct _PktBuf *pktBuf, int macId); |
| |
| /* |
| * Assembly "glue" functions |
| */ |
| extern int systemRequestGlue(); |
| extern int requestConfirmGlue(); |
| extern int transmitConfirmGlue(); |
| extern int receiveLookaheadGlue(); |
| extern int indicationCompleteGlue(); |
| extern int receiveChainGlue(); |
| extern int statusGlue(); |
| |
| /* |
| * IOCTL function |
| */ |
| #ifdef __SMALL__ |
| extern int _far NdisGetLinkage (int handle, char *data, int size); |
| #else |
| extern int NdisGetLinkage (int handle, char *data, int size); |
| #endif |
| |
| /* |
| * NDIS callback handlers |
| */ |
| CALLBACK (NdisSystemRequest (DWORD,DWORD, WORD, WORD, WORD)); |
| CALLBACK (NdisRequestConfirm ( WORD, WORD, WORD, WORD, WORD,WORD)); |
| CALLBACK (NdisTransmitConfirm ( WORD, WORD, WORD, WORD, WORD)); |
| CALLBACK (NdisReceiveLookahead ( WORD, WORD, WORD, BYTE*, BYTE*, WORD)); |
| CALLBACK (NdisReceiveChain ( WORD, WORD, WORD, struct _RxBufDescr*, BYTE*, WORD)); |
| CALLBACK (NdisStatusProc ( WORD, WORD, BYTE*, WORD,WORD)); |
| CALLBACK (NdisIndicationComplete( WORD, WORD)); |
| |
| BYTE *NdisAllocStack (void); |
| void NdisFreeStack (BYTE*); |
| |
| #ifdef __HIGHC__ |
| #define RENAME_ASM_SYM(x) pragma Alias(x,"@" #x "") /* prepend `@' */ |
| #define RENAME_C_SYM(x) pragma Alias(x,"_" #x "") /* prepend `_' */ |
| |
| RENAME_ASM_SYM (systemRequestGlue); |
| RENAME_ASM_SYM (requestConfirmGlue); |
| RENAME_ASM_SYM (transmitConfirmGlue); |
| RENAME_ASM_SYM (receiveLookaheadGlue); |
| RENAME_ASM_SYM (indicationCompleteGlue); |
| RENAME_ASM_SYM (receiveChainGlue); |
| RENAME_ASM_SYM (statusGlue); |
| RENAME_ASM_SYM (NdisGetLinkage); |
| RENAME_C_SYM (NdisSystemRequest); |
| RENAME_C_SYM (NdisRequestConfirm); |
| RENAME_C_SYM (NdisTransmitConfirm); |
| RENAME_C_SYM (NdisReceiveLookahead); |
| RENAME_C_SYM (NdisIndicationComplete); |
| RENAME_C_SYM (NdisReceiveChain); |
| RENAME_C_SYM (NdisStatusProc); |
| RENAME_C_SYM (NdisAllocStack); |
| RENAME_C_SYM (NdisFreeStack); |
| #endif |
| |
| #endif |