diff options
Diffstat (limited to 'msdos')
| -rw-r--r-- | msdos/common.dj | 86 | ||||
| -rw-r--r-- | msdos/makefile | 6 | ||||
| -rw-r--r-- | msdos/makefile.dj | 2 | ||||
| -rw-r--r-- | msdos/makefile.wc | 4 | ||||
| -rw-r--r-- | msdos/ndis2.c | 860 | ||||
| -rw-r--r-- | msdos/ndis2.h | 559 | ||||
| -rw-r--r-- | msdos/ndis_0.asm | 188 |
7 files changed, 3 insertions, 1702 deletions
diff --git a/msdos/common.dj b/msdos/common.dj deleted file mode 100644 index dacfd1fdfcc4e..0000000000000 --- a/msdos/common.dj +++ /dev/null @@ -1,86 +0,0 @@ -# -# Common defines for libpcap and 16/32-bit network drivers (djgpp) -# - -.SUFFIXES: .exe .wlm .dxe .l .y -.PHONY: check_gcclib - -default: check_gcclib all - -# -# This value is normally not important. Used by 'dxe3gen' in -# msdos/pm_drvr/makefile.dj to make "dynamically loaded modules". -# But this is not finished. -# -#GCC_LIB = $(shell gcc -print-libgcc-file-name) -GCC_LIB = . -MAKEFILE = Makefile.dj - -# -# DLX 2.91+ lib. Change path to suite. -# Not used anymore. Uses DXE3 now. -# -# DLX_LIB = $(DJDIR)/contrib/dlx.291/libdlx.a -# DLX_LINK = $(DJDIR)/bin/dlxgen.exe - -WATT32_ROOT = $(subst \,/,$(WATT_ROOT)) - -OBJ_DIR = djgpp.obj - -ifeq ($(wildcard $(GCC_LIB)),) -check_gcclib: - @echo libgcc.a not found. Set \"$(GCC_LIB)\" to \"/djgpp/lib/gcc/djgpp/4.X/libgcc.a\" -endif - - -# -# Include 32-bit driver support -# -USE_32BIT_DRIVERS = 0 - -# -# Use loadable driver modules instead of statically linking -# all drivers. -# -USE_32BIT_MODULES = 0 - -# -# Put interrupt sensitive code/data in locked sections -# Do `make clean' in all affected directories after changing this. -# -USE_SECTION_LOCKING = 0 - -# -# Set to 1 to use exception handler lib (only for me) -# -USE_EXCEPT = 0 - -CC = gcc.exe -LD = ld.exe -ASM = nasm.exe -fbin -dDEBUG -YACC = bison.exe -LEX = flex.exe - -CFLAGS = -g -O2 -Wall -I. -I$(WATT32_ROOT)/inc - -ifeq ($(USE_EXCEPT),1) - CFLAGS += -DUSE_EXCEPT - EXC_LIB = d:/prog/mw/except/lib/libexc.a -endif - -ifeq ($(USE_SECTION_LOCKING),1) - CFLAGS += -DUSE_SECTION_LOCKING -endif - -ifeq ($(USE_32BIT_DRIVERS),1) - CFLAGS += -DUSE_32BIT_DRIVERS -endif - -%.o: %.c - $(CC) -c $(CFLAGS) -o $@ $< - @echo - -%.o: %.s - $(CC) -c $(CFLAGS) -x assembler-with-cpp -o $@ $< - @echo - diff --git a/msdos/makefile b/msdos/makefile index 234a2763dbc96..599a619f402ef 100644 --- a/msdos/makefile +++ b/msdos/makefile @@ -23,7 +23,7 @@ ASM = tasm.exe -t -l -mx -m2 -DDEBUG SOURCE = grammar.c scanner.c bpf_filt.c bpf_imag.c bpf_dump.c \ etherent.c gencode.c nametoad.c pcap-dos.c optimize.c \ - savefile.c pcap.c inet.c msdos\ndis2.c msdos\pktdrvr.c \ + savefile.c pcap.c msdos\ndis2.c msdos\pktdrvr.c \ missing\snprintf.c BORLAND_OBJ = $(SOURCE:.c=.obj) msdos\pkt_rx0.obj msdos\ndis_0.obj @@ -118,8 +118,6 @@ savefile.obj: savefile.c pcap-int.h pcap.h pcap-bpf.h pcap.obj: pcap.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h -inet.obj: inet.c pcap-int.h pcap.h pcap-bpf.h - grammar.obj: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h \ pf.h pcap-namedb.h @@ -158,8 +156,6 @@ savefile.o32: savefile.c pcap-int.h pcap.h pcap-bpf.h pcap.o32: pcap.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h -inet.o32: inet.c pcap-int.h pcap.h pcap-bpf.h - grammar.o32: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h \ pf.h pcap-namedb.h diff --git a/msdos/makefile.dj b/msdos/makefile.dj index 3f56da968600c..190db0071e45a 100644 --- a/msdos/makefile.dj +++ b/msdos/makefile.dj @@ -24,7 +24,7 @@ CFLAGS += -Dyylval=pcap_lval # -DBDEBUG -DNDEBUG SOURCES = grammar.c scanner.c bpf/net/bpf_filter.c bpf_image.c bpf_dump.c \ etherent.c gencode.c nametoaddr.c pcap-common.c pcap-dos.c optimize.c \ - savefile.c pcap.c sf-pcap.c sf-pcap-ng.c inet.c \ + savefile.c pcap.c sf-pcap.c sf-pcapng.c \ msdos/pktdrvr.c msdos/ndis2.c # missing/snprintf.c OBJECTS = $(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.c=.o))) diff --git a/msdos/makefile.wc b/msdos/makefile.wc index 61ba137820ee4..0246012050336 100644 --- a/msdos/makefile.wc +++ b/msdos/makefile.wc @@ -28,7 +28,7 @@ OBJS = $(OBJDIR)\grammar.obj $(OBJDIR)\scanner.obj $(OBJDIR)\pcap.obj & $(OBJDIR)\bpf_filter.obj $(OBJDIR)\bpf_imag.obj $(OBJDIR)\bpf_dump.obj & $(OBJDIR)\etherent.obj $(OBJDIR)\gencode.obj $(OBJDIR)\nametoad.obj & $(OBJDIR)\pcap-dos.obj $(OBJDIR)\pktdrvr.obj $(OBJDIR)\optimize.obj & - $(OBJDIR)\savefile.obj $(OBJDIR)\inet.obj $(OBJDIR)\ndis2.obj + $(OBJDIR)\savefile.obj $(OBJDIR)\ndis2.obj CFLAGS = $(DEFS) $(YYDEFS) -I. -I$(%watt_root)\inc -I.\msdos\pm_drvr & -$(MODEL) -mf -zff -zgf -zq -bt=dos -fr=nul -w6 -fpi & @@ -108,8 +108,6 @@ $(OBJDIR)\savefile.obj: savefile.c pcap-int.h pcap.h pcap-bpf.h $(OBJDIR)\pcap.obj: pcap.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h -$(OBJDIR)\inet.obj: inet.c pcap-int.h pcap.h pcap-bpf.h - $(OBJDIR)\grammar.obj: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h & pcap-namedb.h diff --git a/msdos/ndis2.c b/msdos/ndis2.c deleted file mode 100644 index 526b22199efef..0000000000000 --- a/msdos/ndis2.c +++ /dev/null @@ -1,860 +0,0 @@ -/* - * 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 - */ - -#include <stdio.h> -#include <stdlib.h> -#include <dos.h> -#include <io.h> -#include <fcntl.h> -#include <malloc.h> -#include <string.h> - -#include "pcap-dos.h" -#include "pcap-int.h" -#include "msdos/ndis2.h" - -#if defined(USE_NDIS2) - -/* - * Packet buffer handling - */ -extern int FreePktBuf (PktBuf *buf); -extern int EnquePktBuf (PktBuf *buf); -extern PktBuf* AllocPktBuf (void); - -/* - * Various defines - */ -#define MAX_NUM_DEBUG_STRINGS 90 -#define DEBUG_STRING_LENGTH 80 -#define STACK_POOL_SIZE 6 -#define STACK_SIZE 256 - -#define MEDIA_FDDI 1 -#define MEDIA_ETHERNET 2 -#define MEDIA_TOKEN 3 - -static int startDebug = 0; -static int stopDebug = 0; - -static DWORD droppedPackets = 0L; -static WORD frameSize = 0; -static WORD headerSize = 0; -static int mediaType = 0; -static char *lastErr = NULL; - -static BYTE debugStrings [MAX_NUM_DEBUG_STRINGS][DEBUG_STRING_LENGTH]; -static BYTE *freeStacks [STACK_POOL_SIZE]; -static int freeStackPtr = STACK_POOL_SIZE - 1; - -static ProtMan protManEntry = NULL; -static WORD protManDS = 0; -static volatile int xmitPending; - -static struct _PktBuf *txBufPending; -static struct _CardHandle *handle; -static struct _CommonChars common; -static struct _ProtocolChars protChars; -static struct _ProtDispatch lowerTable; - -static struct _FailingModules failingModules; -static struct _BindingsList bindings; - -static struct { - WORD err_num; - char *err_text; - } ndis_errlist[] = { - - { ERR_SUCCESS, - "The function completed successfully.\n" }, - - { ERR_WAIT_FOR_RELEASE, - "The ReceiveChain completed successfully but the protocol has\n" - "retained control of the buffer.\n" }, - - { ERR_REQUEST_QUEUED, - "The current request has been queued.\n" }, - - { ERR_FRAME_NOT_RECOGNIZED, - "Frame not recognized.\n" }, - - { ERR_FRAME_REJECTED, - "Frame was discarded.\n" }, - - { ERR_FORWARD_FRAME, - "Protocol wishes to forward frame to another protocol.\n" }, - - { ERR_OUT_OF_RESOURCE, - "Out of resource.\n" }, - - { ERR_INVALID_PARAMETER, - "Invalid parameter.\n" }, - - { ERR_INVALID_FUNCTION, - "Invalid function.\n" }, - - { ERR_NOT_SUPPORTED, - "Not supported.\n" }, - - { ERR_HARDWARE_ERROR, - "Hardware error.\n" }, - - { ERR_TRANSMIT_ERROR, - "The packet was not transmitted due to an error.\n" }, - - { ERR_NO_SUCH_DESTINATION, - "Token ring packet was not recognized when transmitted.\n" }, - - { ERR_BUFFER_TOO_SMALL, - "Provided buffer was too small.\n" }, - - { ERR_ALREADY_STARTED, - "Network drivers already started.\n" }, - - { ERR_INCOMPLETE_BINDING, - "Protocol driver could not complete its bindings.\n" }, - - { ERR_DRIVER_NOT_INITIALIZED, - "MAC did not initialize properly.\n" }, - - { ERR_HARDWARE_NOT_FOUND, - "Hardware not found.\n" }, - - { ERR_HARDWARE_FAILURE, - "Hardware failure.\n" }, - - { ERR_CONFIGURATION_FAILURE, - "Configuration failure.\n" }, - - { ERR_INTERRUPT_CONFLICT, - "Interrupt conflict.\n" }, - - { ERR_INCOMPATIBLE_MAC, - "The MAC is not compatible with the protocol.\n" }, - - { ERR_INITIALIZATION_FAILED, - "Initialization failed.\n" }, - - { ERR_NO_BINDING, - "Binding did not occur.\n" }, - - { ERR_NETWORK_MAY_NOT_BE_CONNECTED, - "The network may not be connected to the adapter.\n" }, - - { ERR_INCOMPATIBLE_OS_VERSION, - "The version of the operating system is incompatible with the protocol.\n" }, - - { ERR_ALREADY_REGISTERED, - "The protocol is already registered.\n" }, - - { ERR_PATH_NOT_FOUND, - "PROTMAN.EXE could not be found.\n" }, - - { ERR_INSUFFICIENT_MEMORY, - "Insufficient memory.\n" }, - - { ERR_INFO_NOT_FOUND, - "Protocol Mananger info structure is lost or corrupted.\n" }, - - { ERR_GENERAL_FAILURE, - "General failure.\n" } -}; - -/* - * Some handy macros - */ -#define PERROR(str) printf("%s (%d): %s\n", __FILE__,__LINE__,str) -#define DEBUG_RING() (debugStrings[stopDebug+1 == MAX_NUM_DEBUG_STRINGS ? \ - stopDebug = 0 : ++stopDebug]) - -/* - * needs rewrite for DOSX - */ -#define MAC_DISPATCH(hnd) ((struct _MacUpperDispatch*)(hnd)->common->upperDispatchTable) -#define MAC_STATUS(hnd) ((struct _MacStatusTable*) (hnd)->common->serviceStatus) -#define MAC_CHAR(hnd) ((struct _MacChars*) (hnd)->common->serviceChars) - -#ifdef NDIS_DEBUG - #define DEBUG0(str) printf (str) - #define DEBUG1(fmt,a) printf (fmt,a) - #define DEBUG2(fmt,a,b) printf (fmt,a,b) - #define TRACE0(str) sprintf (DEBUG_RING(),str) - #define TRACE1(fmt,a) sprintf (DEBUG_RING(),fmt,a) -#else - #define DEBUG0(str) ((void)0) - #define DEBUG1(fmt,a) ((void)0) - #define DEBUG2(fmt,a,b) ((void)0) - #define TRACE0(str) ((void)0) - #define TRACE1(fmt,a) ((void)0) -#endif - -/* - * This routine is called from both threads - */ -void NdisFreeStack (BYTE *aStack) -{ - GUARD(); - - if (freeStackPtr == STACK_POOL_SIZE - 1) - PERROR ("tried to free too many stacks"); - - freeStacks[++freeStackPtr] = aStack; - - if (freeStackPtr == 0) - TRACE0 ("freeStackPtr went positive\n"); - - UNGUARD(); -} - -/* - * This routine is called from callbacks to allocate local data - */ -BYTE *NdisAllocStack (void) -{ - BYTE *stack; - - GUARD(); - - if (freeStackPtr < 0) - { - /* Ran out of stack buffers. Return NULL which will start - * dropping packets - */ - TRACE0 ("freeStackPtr went negative\n"); - stack = 0; - } - else - stack = freeStacks[freeStackPtr--]; - - UNGUARD(); - return (stack); -} - -CALLBACK (NdisSystemRequest (DWORD param1, DWORD param2, WORD param3, - WORD opcode, WORD targetDS)) -{ - static int bindEntry = 0; - struct _CommonChars *macCommon; - volatile WORD result; - - switch (opcode) - { - case REQ_INITIATE_BIND: - macCommon = (struct _CommonChars*) param2; - if (macCommon == NULL) - { - printf ("There is an NDIS misconfiguration.\n"); - result = ERR_GENERAL_FAILURE; - break; - } - DEBUG2 ("module name %s\n" - "module type %s\n", - macCommon->moduleName, - ((MacChars*) macCommon->serviceChars)->macName); - - /* Binding to the MAC */ - result = macCommon->systemRequest ((DWORD)&common, (DWORD)&macCommon, - 0, REQ_BIND, - macCommon->moduleDS); - - if (!strcmp(bindings.moduleName[bindEntry], handle->moduleName)) - handle->common = macCommon; - else PERROR ("unknown module"); - ++bindEntry; - break; - - case REQ_INITIATE_UNBIND: - macCommon = (struct _CommonChars*) param2; - result = macCommon->systemRequest ((DWORD)&common, 0, - 0, REQ_UNBIND, - macCommon->moduleDS); - break; - - default: - result = ERR_GENERAL_FAILURE; - break; - } - ARGSUSED (param1); - ARGSUSED (param3); - ARGSUSED (targetDS); - return (result); -} - -CALLBACK (NdisRequestConfirm (WORD protId, WORD macId, WORD reqHandle, - WORD status, WORD request, WORD protDS)) -{ - ARGSUSED (protId); ARGSUSED (macId); - ARGSUSED (reqHandle); ARGSUSED (status); - ARGSUSED (request); ARGSUSED (protDS); - return (ERR_SUCCESS); -} - -CALLBACK (NdisTransmitConfirm (WORD protId, WORD macId, WORD reqHandle, - WORD status, WORD protDS)) -{ - xmitPending--; - FreePktBuf (txBufPending); /* Add passed ECB back to the free list */ - - ARGSUSED (reqHandle); - ARGSUSED (status); - ARGSUSED (protDS); - return (ERR_SUCCESS); -} - - -/* - * The primary function for receiving packets - */ -CALLBACK (NdisReceiveLookahead (WORD macId, WORD frameSize, - WORD bytesAvail, BYTE *buffer, - BYTE *indicate, WORD protDS)) -{ - int result; - PktBuf *pktBuf; - WORD bytesCopied; - struct _TDBufDescr tDBufDescr; - -#if 0 - TRACE1 ("lookahead length = %d, ", bytesAvail); - TRACE1 ("ecb = %08lX, ", *ecb); - TRACE1 ("count = %08lX\n", count); - TRACE1 ("offset = %08lX, ", offset); - TRACE1 ("timesAllowed = %d, ", timesAllowed); - TRACE1 ("packet size = %d\n", look->dataLookAheadLen); -#endif - - /* Allocate a buffer for the packet - */ - if ((pktBuf = AllocPktBuf()) == NULL) - { - droppedPackets++; - return (ERR_FRAME_REJECTED); - } - - /* - * Now kludge things. Note we will have to undo this later. This will - * make the packet contiguous after the MLID has done the requested copy. - */ - - tDBufDescr.tDDataCount = 1; - tDBufDescr.tDBufDescrRec[0].tDPtrType = NDIS_PTR_PHYSICAL; - tDBufDescr.tDBufDescrRec[0].tDDataPtr = pktBuf->buffer; - tDBufDescr.tDBufDescrRec[0].tDDataLen = pktBuf->length; - tDBufDescr.tDBufDescrRec[0].dummy = 0; - - result = MAC_DISPATCH(handle)->transferData (&bytesCopied, 0, &tDBufDescr, - handle->common->moduleDS); - pktBuf->packetLength = bytesCopied; - - if (result == ERR_SUCCESS) - EnquePktBuf(pktBuf); - else FreePktBuf (pktBuf); - - ARGSUSED (frameSize); - ARGSUSED (bytesAvail); - ARGSUSED (indicate); - ARGSUSED (protDS); - - return (ERR_SUCCESS); -} - -CALLBACK (NdisIndicationComplete (WORD macId, WORD protDS)) -{ - ARGSUSED (macId); - ARGSUSED (protDS); - - /* We don't give a hoot about these. Just return - */ - return (ERR_SUCCESS); -} - -/* - * This is the OTHER way we may receive packets - */ -CALLBACK (NdisReceiveChain (WORD macId, WORD frameSize, WORD reqHandle, - struct _RxBufDescr *rxBufDescr, - BYTE *indicate, WORD protDS)) -{ - struct _PktBuf *pktBuf; - int i; - - /* - * For now we copy the entire packet over to a PktBuf structure. This may be - * a performance hit but this routine probably isn't called very much, and - * it is a lot of work to do it otherwise. Also if it is a filter protocol - * packet we could end up sucking up MAC buffes. - */ - - if ((pktBuf = AllocPktBuf()) == NULL) - { - droppedPackets++; - return (ERR_FRAME_REJECTED); - } - pktBuf->packetLength = 0; - - /* Copy the packet to the buffer - */ - for (i = 0; i < rxBufDescr->rxDataCount; ++i) - { - struct _RxBufDescrRec *rxDescr = &rxBufDescr->rxBufDescrRec[i]; - - memcpy (pktBuf->buffer + pktBuf->packetLength, - rxDescr->rxDataPtr, rxDescr->rxDataLen); - pktBuf->packetLength += rxDescr->rxDataLen; - } - - EnquePktBuf (pktBuf); - - ARGSUSED (frameSize); - ARGSUSED (reqHandle); - ARGSUSED (indicate); - ARGSUSED (protDS); - - /* This frees up the buffer for the MAC to use - */ - return (ERR_SUCCESS); -} - -CALLBACK (NdisStatusProc (WORD macId, WORD param1, BYTE *indicate, - WORD opcode, WORD protDS)) -{ - switch (opcode) - { - case STATUS_RING_STATUS: - break; - case STATUS_ADAPTER_CHECK: - break; - case STATUS_START_RESET: - break; - case STATUS_INTERRUPT: - break; - case STATUS_END_RESET: - break; - default: - break; - } - ARGSUSED (macId); - ARGSUSED (param1); - ARGSUSED (indicate); - ARGSUSED (opcode); - ARGSUSED (protDS); - - /* We don't need to do anything about this stuff yet - */ - return (ERR_SUCCESS); -} - -/* - * Tell the NDIS driver to start the delivery of the packet - */ -int NdisSendPacket (struct _PktBuf *pktBuf, int macId) -{ - struct _TxBufDescr txBufDescr; - int result; - - xmitPending++; - txBufPending = pktBuf; /* we only have 1 pending Tx at a time */ - - txBufDescr.txImmedLen = 0; - txBufDescr.txImmedPtr = NULL; - txBufDescr.txDataCount = 1; - txBufDescr.txBufDescrRec[0].txPtrType = NDIS_PTR_PHYSICAL; - txBufDescr.txBufDescrRec[0].dummy = 0; - txBufDescr.txBufDescrRec[0].txDataLen = pktBuf->packetLength; - txBufDescr.txBufDescrRec[0].txDataPtr = pktBuf->buffer; - - result = MAC_DISPATCH(handle)->transmitChain (common.moduleId, - pktBuf->handle, - &txBufDescr, - handle->common->moduleDS); - switch (result) - { - case ERR_OUT_OF_RESOURCE: - /* Note that this should not happen but if it does there is not - * much we can do about it - */ - printf ("ERROR: transmit queue overflowed\n"); - return (0); - - case ERR_SUCCESS: - /* Everything was hunky dory and synchronous. Free up the - * packet buffer - */ - xmitPending--; - FreePktBuf (pktBuf); - return (1); - - case ERR_REQUEST_QUEUED: - /* Everything was hunky dory and asynchronous. Do nothing - */ - return (1); - - default: - printf ("Tx fail, code = %04X\n", result); - return (0); - } -} - - - -static int ndis_nerr = sizeof(ndis_errlist) / sizeof(ndis_errlist[0]); - -static char *Ndis_strerror (WORD errorCode) -{ - static char buf[30]; - int i; - - for (i = 0; i < ndis_nerr; i++) - if (errorCode == ndis_errlist[i].err_num) - return (ndis_errlist[i].err_text); - - sprintf (buf,"unknown error %d",errorCode); - return (buf); -} - - -char *NdisLastError (void) -{ - char *errStr = lastErr; - lastErr = NULL; - return (errStr); -} - -int NdisOpen (void) -{ - struct _ReqBlock reqBlock; - int result; - int ndisFd = open (NDIS_PATH, O_RDONLY); - - if (ndisFd < 0) - { - printf ("Could not open NDIS Protocol Manager device.\n"); - return (0); - } - - memset (&reqBlock, 0, sizeof(ReqBlock)); - - reqBlock.opcode = PM_GET_PROTOCOL_MANAGER_LINKAGE; - - result = NdisGetLinkage (ndisFd, (char*)&reqBlock, sizeof(ReqBlock)); - if (result != 0) - { - printf ("Could not get Protocol Manager linkage.\n"); - close (ndisFd); - return (0); - } - - close (ndisFd); - protManEntry = (ProtMan) reqBlock.pointer1; - protManDS = reqBlock.word1; - - DEBUG2 ("Entry Point = %04X:%04X\n", FP_SEG(protManEntry),FP_OFF(protManEntry)); - DEBUG1 ("ProtMan DS = %04X\n", protManDS); - return (1); -} - - -int NdisRegisterAndBind (int promis) -{ - struct _ReqBlock reqBlock; - WORD result; - - memset (&common,0,sizeof(common)); - - common.tableSize = sizeof (common); - - common.majorNdisVersion = 2; - common.minorNdisVersion = 0; - common.majorModuleVersion = 2; - common.minorModuleVersion = 0; - - /* Indicates binding from below and dynamically loaded - */ - common.moduleFlags = 0x00000006L; - - strcpy (common.moduleName, "PCAP"); - - common.protocolLevelUpper = 0xFF; - common.protocolLevelLower = 1; - common.interfaceLower = 1; -#ifdef __DJGPP__ - common.moduleDS = _dos_ds; /* the callback data segment */ -#else - common.moduleDS = _DS; -#endif - - common.systemRequest = (SystemRequest) systemRequestGlue; - common.serviceChars = (BYTE*) &protChars; - common.serviceStatus = NULL; - common.upperDispatchTable = NULL; - common.lowerDispatchTable = (BYTE*) &lowerTable; - - protChars.length = sizeof (protChars); - protChars.name[0] = 0; - protChars.type = 0; - - lowerTable.backPointer = &common; - lowerTable.requestConfirm = requestConfirmGlue; - lowerTable.transmitConfirm = transmitConfirmGlue; - lowerTable.receiveLookahead = receiveLookaheadGlue; - lowerTable.indicationComplete = indicationCompleteGlue; - lowerTable.receiveChain = receiveChainGlue; - lowerTable.status = statusGlue; - lowerTable.flags = 3; - if (promis) - lowerTable.flags |= 4; /* promiscous mode (receive everything) */ - - bindings.numBindings = 1; - strcpy (bindings.moduleName[0], handle->moduleName); - - /* Register ourselves with NDIS - */ - reqBlock.opcode = PM_REGISTER_MODULE; - reqBlock.pointer1 = (BYTE FAR*) &common; - reqBlock.pointer2 = (BYTE FAR*) &bindings; - - result = (*protManEntry) (&reqBlock, protManDS); - if (result) - { - printf ("Protman registering failed: %s\n", Ndis_strerror(result)); - return (0); - } - - /* Start the binding process - */ - reqBlock.opcode = PM_BIND_AND_START; - reqBlock.pointer1 = (BYTE FAR*) &failingModules; - - result = (*protManEntry) (&reqBlock, protManDS); - if (result) - { - printf ("Start binding failed: %s\n", Ndis_strerror(result)); - return (0); - } - return (1); -} - -static int CheckMacFeatures (CardHandle *card) -{ - DWORD serviceFlags; - BYTE _far *mediaString; - BYTE _far *mac_addr; - - DEBUG2 ("checking card features\n" - "common table address = %08lX, macId = %d\n", - card->common, card->common->moduleId); - - serviceFlags = MAC_CHAR (handle)->serviceFlags; - - if ((serviceFlags & SF_PROMISCUOUS) == 0) - { - printf ("The MAC %s does not support promiscuous mode.\n", - card->moduleName); - return (0); - } - - mediaString = MAC_CHAR (handle)->macName; - - DEBUG1 ("media type = %s\n",mediaString); - - /* Get the media type. And set the header size - */ - if (!strncmp(mediaString,"802.3",5) || - !strncmp(mediaString,"DIX",3) || - !strncmp(mediaString,"DIX+802.3",9)) - headerSize = sizeof (EthernetIIHeader); - - else if (!strncmp(mediaString,"FDDI",4)) - headerSize = sizeof (FddiHeader) + - sizeof (Ieee802Dot2SnapHeader); - else - { - printf ("Unsupported MAC type: `%s'\n", mediaString); - return (0); - } - - frameSize = MAC_CHAR (handle)->maxFrameSize; - mac_addr = MAC_CHAR (handle)->currentAddress; - - printf ("Hardware address: %02X:%02X:%02X:%02X:%02X:%02X\n", - mac_addr[0], mac_addr[1], mac_addr[2], - mac_addr[3], mac_addr[4], mac_addr[5]); - return (1); -} - -static int NdisStartMac (CardHandle *card) -{ - WORD result; - - /* Set the lookahead length - */ - result = MAC_DISPATCH(handle)->request (common.moduleId, 0, - headerSize, 0, - REQ_SET_LOOKAHEAD, - card->common->moduleDS); - - /* We assume that if we got INVALID PARAMETER then either this - * is not supported or will work anyway. NE2000 does this. - */ - if (result != ERR_SUCCESS && result != ERR_INVALID_PARAMETER) - { - DEBUG1 ("Set lookahead failed: %s\n", Ndis_strerror(result)); - return (0); - } - - /* Set the packet filter. Note that for some medias and drivers we - * must specify all three flags or the card(s) will not operate correctly. - */ - result = MAC_DISPATCH(handle)->request (common.moduleId, 0, - /* all packets */ FILTER_PROMISCUOUS | - /* packets to us */ FILTER_DIRECTED | - /* broadcasts */ FILTER_BROADCAST, - 0, REQ_SET_PACKET_FILTER, - card->common->moduleDS); - if (result != ERR_SUCCESS) - { - DEBUG1 ("Set packet filter failed: %s\n", Ndis_strerror(result)); - return (0); - } - - /* If OPEN/CLOSE supported then open the adapter - */ - if (MAC_CHAR(handle)->serviceFlags & SF_OPEN_CLOSE) - { - result = MAC_DISPATCH(handle)->request (common.moduleId, 0, 0, NULL, - REQ_OPEN_ADAPTER, - card->common->moduleDS); - if (result != ERR_SUCCESS) - { - DEBUG1 ("Opening the MAC failed: %s\n", Ndis_strerror(result)); - return (0); - } - } - return (1); -} - -void NdisShutdown (void) -{ - struct _ReqBlock reqBlock; - int result, i; - - if (!handle) - return; - - /* If the adapters support open and are open then close them - */ - if ((MAC_CHAR(handle)->serviceFlags & SF_OPEN_CLOSE) && - (MAC_STATUS(handle)->macStatus & MAC_OPEN)) - { - result = MAC_DISPATCH(handle)->request (common.moduleId, 0, 0, 0, - REQ_CLOSE_ADAPTER, - handle->common->moduleDS); - if (result != ERR_SUCCESS) - { - printf ("Closing the MAC failed: %s\n", Ndis_strerror(result)); - return; - } - } - - /* Tell the Protocol Manager to unbind and stop - */ - reqBlock.opcode = PM_UNBIND_AND_STOP; - reqBlock.pointer1 = (BYTE FAR*) &failingModules; - reqBlock.pointer2 = NULL; - - result = (*protManEntry) (&reqBlock, protManDS); - if (result) - printf ("Unbind failed: %s\n", Ndis_strerror(result)); - - for (i = 0; i < STACK_POOL_SIZE; ++i) - free (freeStacks[i] - STACK_SIZE); - - handle = NULL; -} - -int NdisInit (int promis) -{ - int i, result; - - /* Allocate the real mode stacks used for NDIS callbacks - */ - for (i = 0; i < STACK_POOL_SIZE; ++i) - { - freeStacks[i] = malloc (STACK_SIZE); - if (!freeStacks[i]) - return (0); - freeStacks[i] += STACK_SIZE; - } - - if (!NdisOpen()) - return (0); - - if (!NdisRegisterAndBind(promis)) - return (0); - - DEBUG1 ("My module id: %d\n", common.moduleId); - DEBUG1 ("Handle id; %d\n", handle->common->moduleId); - DEBUG1 ("MAC card: %-16s - ", handle->moduleName); - - atexit (NdisShutdown); - - if (!CheckMacFeatures(&handle)) - return (0); - - switch (mediaType) - { - case MEDIA_FDDI: - DEBUG0 ("Media type: FDDI"); - break; - case MEDIA_ETHERNET: - DEBUG0 ("Media type: ETHERNET"); - break; - default: - DEBUG0 ("Unsupported media.\n"); - return (0); - } - - DEBUG1 (" - Frame size: %d\n", frameSize); - - if (!NdisStartMac(&handle)) - return (0); - return (1); -} -#endif /* USE_NDIS2 */ - diff --git a/msdos/ndis2.h b/msdos/ndis2.h deleted file mode 100644 index f278b5dcd6cdf..0000000000000 --- a/msdos/ndis2.h +++ /dev/null @@ -1,559 +0,0 @@ -/* - * 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 diff --git a/msdos/ndis_0.asm b/msdos/ndis_0.asm deleted file mode 100644 index ea65e0f8e15ed..0000000000000 --- a/msdos/ndis_0.asm +++ /dev/null @@ -1,188 +0,0 @@ -PAGE 60,132 -NAME NDIS_0 - -ifdef DOSX - .386 - _TEXT SEGMENT PUBLIC DWORD USE16 'CODE' - _TEXT ENDS - _DATA SEGMENT PUBLIC DWORD USE16 'CODE' - _DATA ENDS - _TEXT32 SEGMENT PUBLIC BYTE USE32 'CODE' - _TEXT32 ENDS - CB_DSEG EQU <CS> ; DOSX is tiny-model - D_SEG EQU <_TEXT SEGMENT> - D_END EQU <_TEXT ENDS> - ASSUME CS:_TEXT,DS:_TEXT - - PUSHREGS equ <pushad> - POPREGS equ <popad> - - PUBPROC macro name - align 4 - public @&name - @&name label near - endm -else - .286 - _TEXT SEGMENT PUBLIC DWORD 'CODE' - _TEXT ENDS - _DATA SEGMENT PUBLIC DWORD 'DATA' - _DATA ENDS - CB_DSEG EQU <SEG _DATA> ; 16bit is small/large model - D_SEG EQU <_DATA SEGMENT> - D_END EQU <_DATA ENDS> - ASSUME CS:_TEXT,DS:_DATA - - PUSHREGS equ <pusha> - POPREGS equ <popa> - - PUBPROC macro name - public _&name - _&name label far - endm -endif - -;------------------------------------------- - -D_SEG - -D_END - - -_TEXT SEGMENT - -EXTRN _NdisSystemRequest : near -EXTRN _NdisRequestConfirm : near -EXTRN _NdisTransmitConfirm : near -EXTRN _NdisReceiveLookahead : near -EXTRN _NdisIndicationComplete : near -EXTRN _NdisReceiveChain : near -EXTRN _NdisStatusProc : near -EXTRN _NdisAllocStack : near -EXTRN _NdisFreeStack : near - -; -; *ALL* interrupt threads come through this macro. -; -CALLBACK macro callbackProc, argsSize - - pushf - PUSHREGS ;; Save the registers - - push es - push ds - mov ax,CB_DSEG ;; Load DS - mov ds,ax - call _NdisAllocStack ;; Get and install a stack. - - mov bx,ss ;; Save off the old stack in other regs - mov cx,sp - mov ss,dx ;; Install the new one - mov sp,ax - push bx ;; Save the old one on to the new stack - push cx - sub sp,&argsSize ;; Allocate space for arguments on the stack - - mov ax,ss ;; Set up the destination for the move - mov es,ax - mov di,sp - mov ds,bx ;; Set up the source for the move. - mov si,cx - add si,4+6+32 - - mov cx,&argsSize ;; Move the arguments to the stack. - shr cx,1 - cld - rep movsw - - mov ax,CB_DSEG ;; Set my data segment again. - mov ds,ax - - call &callbackProc ;; Call the real callback. - pop di ;; Pop off the old stack - pop si - mov bx,ss ;; Save off the current allocated stack. - mov cx,sp - mov ss,si ;; Restore the old stack - mov sp,di - push ax ;; Save the return code - push bx ;; Free the stack. Push the pointer to it - push cx - call _NdisFreeStack - add sp,4 - pop ax ;; Get the return code back - add di,32 ;; Get a pointer to ax on the stack - mov word ptr ss:[di],ax - pop ds - pop es - - POPREGS - popf -endm - -; -; Define all of the callbacks for the NDIS procs. -; - -PUBPROC systemRequestGlue -CALLBACK _NdisSystemRequest,14 -RETF - -PUBPROC requestConfirmGlue -CALLBACK _NdisRequestConfirm,12 -RETF - -PUBPROC transmitConfirmGlue -CALLBACK _NdisTransmitConfirm,10 -RETF - -PUBPROC receiveLookaheadGlue -CALLBACK _NdisReceiveLookahead,16 -RETF - -PUBPROC indicationCompleteGlue -CALLBACK _NdisIndicationComplete,4 -RETF - -PUBPROC receiveChainGlue -CALLBACK _NdisReceiveChain,16 -RETF - -PUBPROC statusGlue -CALLBACK _NdisStatusProc,12 -RETF - -; -; int FAR NdisGetLinkage (int handle, char *data, int size); -; - -ifdef DOSX - PUBPROC NdisGetLinkage - push ebx - mov ebx, [esp+8] ; device handle - mov eax, 4402h ; IOCTRL read function - mov edx, [esp+12] ; DS:EDX -> result data - mov ecx, [esp+16] ; ECX = length - int 21h - pop ebx - jc @fail - xor eax, eax - @fail: ret - -else - PUBPROC NdisGetLinkage - enter 0, 0 - mov bx, [bp+6] - mov ax, 4402h - mov dx, [bp+8] - mov cx, [bp+12] - int 21h - jc @fail - xor ax, ax - @fail: leave - retf -endif - -ENDS - -END |
