[openfirmware] r1669 - dev/usb2/device/net
svn at openfirmware.info
svn at openfirmware.info
Wed Jan 13 01:39:18 CET 2010
Author: wmb
Date: 2010-01-13 01:39:17 +0100 (Wed, 13 Jan 2010)
New Revision: 1669
Modified:
dev/usb2/device/net/ax8817x.fth
dev/usb2/device/net/common.fth
dev/usb2/device/net/ethernet.fth
dev/usb2/device/net/pegasus.fth
Log:
Added promiscuous and multicast reception capability to USB
Ethernet drivers.
Modified: dev/usb2/device/net/ax8817x.fth
===================================================================
--- dev/usb2/device/net/ax8817x.fth 2010-01-13 00:38:24 UTC (rev 1668)
+++ dev/usb2/device/net/ax8817x.fth 2010-01-13 00:39:17 UTC (rev 1669)
@@ -215,12 +215,21 @@
0 value has-internal-loopback?
-h# 88 constant def-rx-ctl \ SO (MAC ON) and AB (accept broadcast)
+h# 88 value def-rx-ctl \ SO (MAC ON) and AB (accept broadcast)
: ax-start-nic ( -- )
ax-auto-neg-wait
- def-rx-ctl my-args " promiscuous" $= if 1 or then rx-ctl!
+ h# 88
+ use-promiscuous? if
+ 1 or
+ else
+ use-multicast? if 2 or then
+ then
+ to def-rx-ctl
+ def-rx-ctl rx-ctl!
;
+: ax-promiscuous ( -- ) rx-ctl@ 1 or rx-ctl! ;
+: ax-set-multicast ( adr len -- ) 2drop rx-ctl@ 2 or rx-ctl! ;
: ax-stop-nic ( -- ) 0 rx-ctl! ;
: ax-init-nic ( -- ) \ Per ax8817x_bind
@@ -273,6 +282,8 @@
['] ax-mii-hw to }mii
['] ax-loopback{ to loopback{
['] ax-}loopback to }loopback
+ ['] ax-promiscuous to promiscuous
+ ['] ax-set-multicast to set-multicast
vid h# 2001 = pid h# 1a00 = and if h# 009f.9d9f to ax-gpio then
vid h# 07b8 = pid h# 420a = and if h# 001f.1d1f to ax-gpio then
Modified: dev/usb2/device/net/common.fth
===================================================================
--- dev/usb2/device/net/common.fth 2010-01-13 00:38:24 UTC (rev 1668)
+++ dev/usb2/device/net/common.fth 2010-01-13 00:39:17 UTC (rev 1669)
@@ -14,6 +14,9 @@
6 constant /mac-adr
: mac-adr$ ( -- adr len ) mac-adr /mac-adr ;
+false value use-promiscuous?
+false value use-multicast?
+
defer init-nic ( -- ) ' noop to init-nic
defer wrap-msg ( adr len -- adr' len' ) ' noop to wrap-msg
defer unwrap-msg ( adr len -- adr' len' ) ' noop to unwrap-msg
@@ -25,6 +28,10 @@
defer }mii ( -- ) ' noop to }mii \ Release
defer mii@ ( reg -- val ) ' noop to mii@
defer mii! ( val reg -- ) ' drop to mii@
+external
+defer promiscuous ( -- ) ' noop to promiscuous
+defer set-multicast ( adr len -- ) ' 2drop to set-multicast
+headers
: phy-loopback{ ( -- )
mii{ 0 mii@ h# 4000 or 0 mii! }mii
Modified: dev/usb2/device/net/ethernet.fth
===================================================================
--- dev/usb2/device/net/ethernet.fth 2010-01-13 00:38:24 UTC (rev 1668)
+++ dev/usb2/device/net/ethernet.fth 2010-01-13 00:39:17 UTC (rev 1669)
@@ -201,6 +201,19 @@
false
;
+: parse-args ( -- )
+ false to use-promiscuous?
+ false to use-multicast?
+ my-args
+ begin ?dup while
+ ascii , left-parse-string
+ 2dup " debug" $= if debug-on then
+ 2dup " promiscuous" $= if true to use-promiscuous? then
+ 2dup " multicast" $= if true to use-multicast? then
+ 2drop
+ repeat drop
+;
+
external
: close ( -- )
@@ -209,7 +222,7 @@
;
: open ( -- ok? )
- my-args " debug" $= if debug-on then
+ parse-args
device set-target
opencount @ 0= if
Modified: dev/usb2/device/net/pegasus.fth
===================================================================
--- dev/usb2/device/net/pegasus.fth 2010-01-13 00:38:24 UTC (rev 1668)
+++ dev/usb2/device/net/pegasus.fth 2010-01-13 00:39:17 UTC (rev 1669)
@@ -9,9 +9,9 @@
h# f1 constant SET_REG
\ Select register definitions
-: ec0 0 ;
-: ec1 1 ;
-: ec2 2 ;
+: ectl0 0 ;
+: ectl1 1 ;
+: ectl2 2 ;
: gpio10c h# 7e ;
: gpio32c h# 7f ;
: phya h# 25 ;
@@ -97,8 +97,8 @@
: pg-link-up? ( -- flag ) 1 pg-mii@ 4 and 0<> ;
-: pg-reset-mac ( -- ) 8 ec1 pg-reg-c! ;
-: pg-mac-reset? ( -- ) ec1 pg-reg-c@ 8 and 0= ;
+: pg-reset-mac ( -- ) 8 ectl1 pg-reg-c! ;
+: pg-mac-reset? ( -- ) ectl1 pg-reg-c@ 8 and 0= ;
: pg-init-mac ( -- )
pg-reset-mac begin pg-mac-reset? until
@@ -130,11 +130,19 @@
: pg-start-nic ( -- )
pg-sync-link-status
\ force 100Mbps full-duplex
- h# 0130c9 ec0 3 pg-write-reg
+ h# 0130c9
+ use-promiscuous? if
+ h# 040000 or
+ else
+ use-multicast? if 2 or then
+ then
+ ectl0 3 pg-write-reg
;
+: pg-promiscuous ( -- ) ectl2 pg-reg-c@ 4 or ectl2 pg-reg-c! ;
+: pg-set-multicast ( -- ) ectl0 pg-reg-c@ 2 or ectl0 pg-reg-c! ;
: pg-stop-nic ( -- )
- 0 ec0 2 pg-write-reg
+ 0 ectl0 2 pg-write-reg
;
\ Process the length header that's inlined after the frame
@@ -153,6 +161,8 @@
['] pg-unwrap-msg to unwrap-msg
['] pg-mii@ to mii@
['] pg-mii! to mii!
+ ['] pg-promiscuous to promiscuous
+ ['] pg-set-multicast to set-multicast
;
: init ( -- ) init vid pid pegasus? if init-pegasus then ;
More information about the openfirmware
mailing list