diff options
| author | David Greenman <dg@FreeBSD.org> | 1995-03-23 06:53:39 +0000 |
|---|---|---|
| committer | David Greenman <dg@FreeBSD.org> | 1995-03-23 06:53:39 +0000 |
| commit | 06022879582b42d55365b8ea5000462875368c53 (patch) | |
| tree | 2cfd5e9920535affd65bcc3215ca6fb11087c9a6 /sys/dev | |
| parent | fadfd39bdf101f851bc7619039574bbbc8eb5aca (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/ep/if_ep.c | 33 | ||||
| -rw-r--r-- | sys/dev/ep/if_epreg.h | 3 |
2 files changed, 28 insertions, 8 deletions
diff --git a/sys/dev/ep/if_ep.c b/sys/dev/ep/if_ep.c index 9aaaf763b633..0a45fc15bd3f 100644 --- a/sys/dev/ep/if_ep.c +++ b/sys/dev/ep/if_ep.c @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_ep.c,v 1.18 1995/01/08 10:47:23 davidg Exp $ + * $Id: if_ep.c,v 1.19 1995/01/24 20:53:45 davidg Exp $ */ /* @@ -451,8 +451,12 @@ epinit(unit) outw(BASE + EP_COMMAND, SET_INTR_MASK | S_5_INTS); - outw(BASE + EP_COMMAND, SET_RX_FILTER | FIL_INDIVIDUAL | - FIL_GROUP | FIL_BRDCST); + if(ep_ftst(F_PROMISC)) + outw(BASE + EP_COMMAND, SET_RX_FILTER | FIL_INDIVIDUAL | + FIL_GROUP | FIL_BRDCST | FIL_ALL); + else + outw(BASE + EP_COMMAND, SET_RX_FILTER | FIL_INDIVIDUAL | + FIL_GROUP | FIL_BRDCST); /* * you can `ifconfig ep0 (bnc|aui)' to get the following @@ -643,8 +647,8 @@ epintr(unit) struct ifnet *ifp = &sc->arpcom.ac_if; struct mbuf *m; - outw(BASE + EP_COMMAND, SET_INTR_MASK); /* disable all Ints */ - outw(BASE + EP_COMMAND, C_INTR_LATCH); /* ACK int Latch */ +rescan: + /* outw(BASE + EP_COMMAND, SET_INTR_MASK); /* disable all Ints */ while ((status = inw(BASE + EP_STATUS)) & S_5_INTS) { if (status & (S_RX_COMPLETE | S_RX_EARLY)) { @@ -672,7 +676,7 @@ epintr(unit) sc->rx_no_first, sc->rx_no_mbuf, sc->rx_bpf_disc, sc->rx_overrunf, sc->rx_overrunl, sc->tx_underrun); #else - printf("ep%d: Status: %x\n", unit, status); + printf("ep%d: Status: %x\n", unit, status); #endif epinit(unit); return; @@ -716,7 +720,12 @@ epintr(unit) } /* end TX_COMPLETE */ } /* re-enable ints */ - outw(BASE + EP_COMMAND, SET_INTR_MASK | S_5_INTS); + /* outw(BASE + EP_COMMAND, SET_INTR_MASK | S_5_INTS); */ + + outw(BASE + EP_COMMAND, C_INTR_LATCH); /* ACK int Latch */ + + if ((status = inw(BASE + EP_STATUS)) & S_5_INTS) + goto rescan; } void @@ -1016,6 +1025,16 @@ epioctl(ifp, cmd, data) } if (ifp->if_flags & IFF_UP && (ifp->if_flags & IFF_RUNNING) == 0) epinit(ifp->if_unit); + + if ( (ifp->if_flags & IFF_PROMISC) && !ep_ftst(F_PROMISC) ) { + ep_fset(F_PROMISC); + epinit(ifp->if_unit); + } + else if( !(ifp->if_flags & IFF_PROMISC) && ep_ftst(F_PROMISC) ) { + ep_frst(F_PROMISC); + epinit(ifp->if_unit); + } + break; #ifdef notdef case SIOCGHWADDR: diff --git a/sys/dev/ep/if_epreg.h b/sys/dev/ep/if_epreg.h index 2dc7a984fa77..86942a86b8cf 100644 --- a/sys/dev/ep/if_epreg.h +++ b/sys/dev/ep/if_epreg.h @@ -19,7 +19,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_epreg.h,v 1.2 1994/01/10 19:13:50 ats Exp $ Modified by: + * $Id: if_epreg.h,v 1.4 1994/11/13 10:12:37 gibbs Exp $ Modified by: * October 2, 1994 @@ -55,6 +55,7 @@ struct ep_softc { #define F_RX_FIRST 0x1 #define F_WAIT_TRAIL 0x2 #define F_RX_TRAILER 0x4 +#define F_PROMISC 0x8 #define F_ACCESS_32_BITS 0x100 |
