From 382abccf277ff1323b0f2d2aecdad9a74175ad09 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 17 Sep 2016 14:06:03 +0200 Subject: nusb/ether: multicast and promisc support for rtl8150 (url) --- sys/src/cmd/nusb/ether/url.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/sys/src/cmd/nusb/ether/url.c b/sys/src/cmd/nusb/ether/url.c index a411c6d4d..42c2d6ea2 100644 --- a/sys/src/cmd/nusb/ether/url.c +++ b/sys/src/cmd/nusb/ether/url.c @@ -300,6 +300,37 @@ urltransmit(Dev *ep, Block *b) freeb(b); } +static int +urlpromiscuous(Dev *d, int on) +{ + int r; + + r = csr16r(d, Rcr); + if(on) + r |= Aam|Aap; + else { + r &= ~Aap; + if(nmulti == 0) + r &= ~Aam; + } + return csr16w(d, Rcr, r); +} + +static int +urlmulticast(Dev *d, uchar*, int) +{ + int r; + + r = csr16r(d, Rcr); + if(nmulti) + r |= Aam; + else { + if(nprom == 0) + r &= ~Aam; + } + return csr16w(d, Rcr, r); +} + int urlinit(Dev *d) { @@ -325,5 +356,8 @@ urlinit(Dev *d) epreceive = urlreceive; eptransmit = urltransmit; + eppromiscuous = urlpromiscuous; + epmulticast = urlmulticast; + return 0; } -- cgit v1.2.3