updated ENC624j6net driver
- fixes to gcc native and cross compilation settings
- implemented hardware based multicast filtering hashes, resulting
in less unwanted traffic to our Amigas (especially Bonjour, UPNP and such)
- MULTICAST option in envarc:sana2/enc624j6net.config will now
allow all multicast traffic as opposed to the default fine grained
filtering behaviour
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
;APS00000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
; ------------------------------------------------------------------------------
|
||||
; | Lowlevel Access to memory mapped ENC624J600 in PSP mode |
|
||||
; | Henryk Richter <henryk.richter@gmx.net> |
|
||||
@@ -19,19 +20,25 @@
|
||||
; - _enc624j6l_RXReset -> won't recover from totally unresponsive chip (but exits gracefully)
|
||||
;
|
||||
; enable debugging code block (comment/uncomment, see below)
|
||||
DEBUG EQU 1
|
||||
DEBUG EQU 0
|
||||
GLOBALINT_BOARD EQU 1 ;if 1, then toggle board interrupt, else ENC624 INTIE
|
||||
|
||||
incdir src:baxnet/trunk/source/
|
||||
;Temp:Amiga/src/Zorro-LAN-IDE.git/Driver/enc624j6net/
|
||||
include "enc624j6net/registers.i"
|
||||
include "enc624j6net/macros.i"
|
||||
include "debug.i"
|
||||
|
||||
ifnd DEBUG
|
||||
DEBUG EQU 0
|
||||
endc
|
||||
|
||||
ifne 1
|
||||
include "debug.i"
|
||||
else
|
||||
WRITEDEBUG macro
|
||||
nop
|
||||
endm
|
||||
endc
|
||||
;
|
||||
ADD_4RX EQU 1 ;add 4 to valid RX size (fake CRC), fixes shapeshifter RAW treatment
|
||||
_OPT_LONGRESET EQU 0 ;in testing, don't enable
|
||||
@@ -134,12 +141,6 @@ _LVOSignal EQU -324
|
||||
|
||||
section code,code
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; | |
|
||||
; | Test/Debug code |
|
||||
@@ -277,7 +278,13 @@ regtests:
|
||||
READREG ESTAT,a0,d0
|
||||
READREG ECON1,a0,d1
|
||||
READREG MACON2,a0,d2
|
||||
READREG MABBIPG,a0,d3
|
||||
; READREG MABBIPG,a0,d3
|
||||
|
||||
READREG ERXFCON,a0,d3
|
||||
READREG EHT1,a0,d4
|
||||
READREG EHT2,a0,d5
|
||||
READREG EHT3,a0,d6
|
||||
READREG EHT4,a0,d7
|
||||
rts
|
||||
|
||||
|
||||
@@ -587,6 +594,7 @@ _enc624j6l_Init:
|
||||
WRITEREG ERXST,a0,d0 ;set RX start pointer (end will be $5fff)
|
||||
WRITEREG PNextPacket,a0,d0 ;set user read pointer
|
||||
|
||||
suba.l a1,a1 ;no multicast hash table (yet)
|
||||
bsr _enc624j6l_bc_mc_filter ;in: A0/D1, out: D0
|
||||
|
||||
move #RXSTOP_INIT&$fffe,d0
|
||||
@@ -644,6 +652,7 @@ _enc624j6l_Init:
|
||||
;
|
||||
; in: A0 - board base
|
||||
; D1 - init flags
|
||||
; A1 - multicast hash table (4x USHORT)
|
||||
;out: D0 >0 = OK
|
||||
; <=0 = FAIL
|
||||
_enc624j6l_bc_mc_filter:
|
||||
@@ -658,15 +667,32 @@ _enc624j6l_bc_mc_filter:
|
||||
move #ERXFCON_NOTMEEN|ERXFCON_MCEN|ERXFCON_BCEN|ERXFCON_UCEN|ERXFCON_MPEN|ERXFCON_CRCEN|ERXFCON_RUNTEN,d0
|
||||
bra.s .setfilter
|
||||
.no_promisc:
|
||||
moveq #PIO_INIT_MULTI_CAST,d0
|
||||
moveq #PIO_INIT_MULTI_CAST,d0 ;all multicast ?
|
||||
and d1,d0
|
||||
beq.s .no_multicast
|
||||
move #ERXFCON_MCEN|ERXFCON_BCEN|ERXFCON_UCEN|ERXFCON_MPEN|ERXFCON_CRCEN|ERXFCON_RUNTEN,d0
|
||||
bra.s .setfilter
|
||||
.no_multicast:
|
||||
move #ERXFCON_BCEN|ERXFCON_UCEN|ERXFCON_MPEN|ERXFCON_CRCEN|ERXFCON_RUNTEN,d0
|
||||
|
||||
; did we get a multicast hash table ?
|
||||
move.l a1,d1
|
||||
beq.s .nohashes
|
||||
AND #$ffff-ERXFCON_MCEN,d0 ;don't accept ALL multicast
|
||||
OR #ERXFCON_HTEN,d0 ;enable multicast hash table filter
|
||||
|
||||
move (a1),d1
|
||||
WRITEREG EHT1,a0,d1
|
||||
move 2(a1),d1
|
||||
WRITEREG EHT2,a0,d1
|
||||
move 4(a1),d1
|
||||
WRITEREG EHT3,a0,d1
|
||||
move 6(a1),d1
|
||||
WRITEREG EHT4,a0,d1
|
||||
.nohashes:
|
||||
|
||||
.setfilter:
|
||||
WRITEREG ERXFCON,a0,d0 ;set filter TODO: pattern matching stuff
|
||||
WRITEREG ERXFCON,a0,d0 ;set filter
|
||||
|
||||
moveq #1,d0
|
||||
.rts:
|
||||
|
||||
Reference in New Issue
Block a user