diff options
Diffstat (limited to 'sys/src/cmd/nusb/ether/smsc.c')
| -rw-r--r-- | sys/src/cmd/nusb/ether/smsc.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sys/src/cmd/nusb/ether/smsc.c b/sys/src/cmd/nusb/ether/smsc.c index deb8aef43..c0d6710ee 100644 --- a/sys/src/cmd/nusb/ether/smsc.c +++ b/sys/src/cmd/nusb/ether/smsc.c @@ -252,6 +252,32 @@ smsctransmit(Dev *ep, Block *b) freeb(b); } +static int +smscpromiscuous(Dev *d, int on) +{ + int rxctl; + + rxctl = rr(d, Maccr); + if(on) + rxctl |= Prms; + else + rxctl &= ~Prms; + return wr(d, Maccr, rxctl); +} + +static int +smscmulticast(Dev *d, uchar *, int) +{ + int rxctl; + + rxctl = rr(d, Maccr); + if(nmulti != 0) + rxctl |= Mcpas; + else + rxctl &= ~Mcpas; + return wr(d, Maccr, rxctl); +} + int smscinit(Dev *d) { @@ -289,5 +315,8 @@ smscinit(Dev *d) eptransmit = smsctransmit; epreceive = smscreceive; + eppromiscuous = smscpromiscuous; + epmulticast = smscmulticast; + return 0; } |
