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
