- add netmap (FreeBSD header files need to be updated with this) - move prototype perl scripts to prototype/ folder - create basic structure for sipcap app (no code yet)
189 lines
4.3 KiB
NASM
189 lines
4.3 KiB
NASM
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
|