;
; This file requires NASM 0.97+ to assemble
;
; Currently used only for djgpp + DOS4GW targets
;
; these sizes MUST be equal to the sizes in PKTDRVR.H
;
%define  ETH_MTU     1500                  ; max data size on Ethernet
%define  ETH_MIN     60                    ; min/max total frame size
%define  ETH_MAX     (ETH_MTU+2*6+2)
%define  NUM_RX_BUF  32                    ; # of RX element buffers
%define  RX_SIZE     (ETH_MAX+6)           ; sizeof(RX_ELEMENT) = 1514+6
%idefine offset

struc RX_ELEMENT
      .firstCount  resw 1                  ; # of bytes on 1st call
      .secondCount resw 1                  ; # of bytes on 2nd call
      .handle      resw 1                  ; handle for upcall
    ; .timeStamp   resw 4                  ; 64-bit RDTSC value
      .destinAdr   resb 6                  ; packet destination address
      .sourceAdr   resb 6                  ; packet source address
      .protocol    resw 1                  ; packet protocol number
      .rxBuffer    resb ETH_MTU            ; RX buffer
endstruc

;-------------------------------------------

[org 0]  ; assemble to .bin file

_rxOutOfs   dw   offset _pktRxBuf          ; ring buffer offsets
_rxInOfs    dw   offset _pktRxBuf          ; into _pktRxBuf
_pktDrop    dw   0,0                       ; packet drop counter
_pktTemp    resb 20                        ; temp work area
_pktTxBuf   resb (ETH_MAX)                 ; TX buffer
_pktRxBuf   resb (RX_SIZE*NUM_RX_BUF)      ; RX structures
 LAST_OFS   equ  $

screenSeg   dw  0B800h
newInOffset dw  0

fanChars    db  '-\|/'
fanIndex    dw  0

%macro SHOW_RX 0
       push es
       push bx
       mov bx, [screenSeg]
       mov es, bx                    ;; r-mode segment of colour screen
       mov di, 158                   ;; upper right corner - 1
       mov bx, [fanIndex]
       mov al, [fanChars+bx]         ;; get write char
       mov ah, 15                    ;;  and white colour
       cld                           ;; Needed?
       stosw                         ;; write to screen at ES:EDI
       inc word [fanIndex]           ;; update next index
       and word [fanIndex], 3
       pop bx
       pop es
%endmacro

;PutTimeStamp
;       rdtsc
;       mov [si].timeStamp, eax
;       mov [si+4].timeStamp, edx
;       ret


;------------------------------------------------------------------------
;
; This routine gets called by the packet driver twice:
;   1st time (AX=0) it requests an address where to put the packet
;
;   2nd time (AX=1) the packet has been copied to this location (DS:SI)
;   BX has client handle (stored in RX_ELEMENT.handle).
;   CX has # of bytes in packet on both call. They should be equal.
; A test for equality is done by putting CX in _pktRxBuf [n].firstCount
; and _pktRxBuf[n].secondCount, and CL on first call in
; _pktRxBuf[n].rxBuffer[CX]. These values are checked in "PktReceive"
; (PKTDRVR.C)
;
;---------------------------------------------------------------------

_PktReceiver:
         pushf
         cli                         ; no distraction wanted !
         push ds
         push bx
         mov bx, cs
         mov ds, bx
         mov es, bx                  ; ES = DS = CS or seg _DATA
         pop bx                      ; restore handle

         cmp ax, 0                   ; first call? (AX=0)
         jne @post                   ; AX=1: second call, do post process

%ifdef DEBUG
         SHOW_RX                     ; show that a packet is received
%endif

         cmp cx, ETH_MAX             ; size OK ?
         ja  @skip                   ; no, too big

         mov ax, [_rxInOfs]
         add ax, RX_SIZE
         cmp ax, LAST_OFS
         jb  @noWrap
         mov ax, offset _pktRxBuf
@noWrap:
         cmp ax, [_rxOutOfs]
         je  @dump
         mov di, [_rxInOfs]          ; ES:DI -> _pktRxBuf[n]
         mov [newInOffset], ax

         mov [di], cx                ; remember firstCount.
         mov [di+4], bx              ; remember handle.
         add di, 6                   ; ES:DI -> _pktRxBuf[n].destinAdr
         pop ds
         popf
         retf                        ; far return to driver with ES:DI

@dump:   add word [_pktDrop+0], 1    ; discard the packet on 1st call
         adc word [_pktDrop+2], 0    ; increment packets lost

@skip:   xor di, di                  ; return ES:DI = NIL pointer
         xor ax, ax
         mov es, ax
         pop ds
         popf
         retf

@post:   or si, si                   ; DS:SI->_pktRxBuf[n][n].destinAdr
         jz @discard                 ; make sure we don't use NULL-pointer

       ;
       ; push si
       ; call bpf_filter_match       ; run the filter here some day
       ; pop si
       ; cmp ax, 0
       ; je  @discard

         mov [si-6+2], cx            ; store _pktRxBuf[n].secondCount
         mov ax, [newInOffset]
         mov [_rxInOfs], ax          ; update _pktRxBuf input offset

       ; call PutTimeStamp

@discard:
         pop ds
         popf
         retf

_pktRxEnd  db 0                      ; marker for end of r-mode code/data

END

