Don't blindly receive all multicast packets just because we're on a turbo.

Pay lip service to making promiscuous mode work.
This commit is contained in:
mycroft 2002-09-11 13:15:58 +00:00
parent 08dfbb4305
commit 3294e33d95
2 changed files with 19 additions and 23 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: mb8795.c,v 1.29 2002/09/11 07:17:33 mycroft Exp $ */
/* $NetBSD: mb8795.c,v 1.30 2002/09/11 13:15:58 mycroft Exp $ */
/*
* Copyright (c) 1998 Darrin B. Jewell
* All rights reserved.
@ -552,24 +552,24 @@ mb8795_init(sc)
if (ifp->if_flags & IFF_UP) {
int rxmode;
s = spldma ();
if ((ifp->if_flags & IFF_RUNNING) == 0) {
s = spldma();
if ((ifp->if_flags & IFF_RUNNING) == 0)
mb8795_reset(sc);
}
if (ifp->if_flags & IFF_PROMISC) {
if (ifp->if_flags & IFF_PROMISC)
rxmode = MB8795_RXMODE_PROMISCUOUS;
panic ("promisc");
} else {
/* XXX add support for multicast */
rxmode = turbo ? MB8795_RXMODE_TEST | MB8795_RXMODE_MULTICAST : MB8795_RXMODE_NORMAL;
}
else
rxmode = MB8795_RXMODE_NORMAL;
/* XXX add support for multicast */
if (turbo)
rxmode |= MB8795_RXMODE_TEST;
if ((ifp->if_flags & IFF_RUNNING) == 0) {
/* switching mode probably borken now with turbo */
/* switching mode probably borken now with turbo */
MB_WRITE_REG(sc, MB8795_TXMODE,
turbo ? MB8795_TXMODE_TURBO1 : MB8795_TXMODE_LB_DISABLE);
MB_WRITE_REG(sc, MB8795_RXMODE, rxmode);
if ((ifp->if_flags & IFF_RUNNING) == 0) {
MBDMA_RX_SETUP(sc);
MBDMA_TX_SETUP(sc);
@ -578,8 +578,6 @@ mb8795_init(sc)
ifp->if_timer = 0;
MBDMA_RX_GO(sc);
if (turbo)
MB_WRITE_REG(sc, MB8795_RXMODE, rxmode | MB8795_RXMODE_MULTICAST);
}
splx(s);
#if 0

View File

@ -1,4 +1,4 @@
/* $NetBSD: en.c,v 1.7 2002/09/11 06:32:07 mycroft Exp $ */
/* $NetBSD: en.c,v 1.8 2002/09/11 13:15:59 mycroft Exp $ */
/*
* Copyright (c) 1996 Rolf Grossmann
* All rights reserved.
@ -154,11 +154,10 @@ en_init(struct iodesc *desc, void *machdep_hint)
er->rxmask = 0;
er->rxstat = 0xff;
if (turbo) {
er->rxmode = EN_RMD_TEST;
} else {
if (turbo)
er->rxmode = EN_RMD_TEST | EN_RMD_RECV_NORMAL;
else
er->rxmode = EN_RMD_RECV_NORMAL;
}
for (i=0; i<6; i++)
er->addr[i] = desc->myea[i] = MON(char *,MG_clientetheraddr)[i];
@ -321,11 +320,10 @@ en_get(struct iodesc *desc, void *pkt, size_t len, time_t timeout)
rxdma->dd_start = 0;
rxdma->dd_stop = 0;
rxdma->dd_csr = DMACSR_SETENABLE | DMACSR_READ;
if (turbo) {
er->rxmode = EN_RMD_TEST | EN_RMD_RECV_MULTI;
} else {
if (turbo)
er->rxmode = EN_RMD_TEST | EN_RMD_RECV_NORMAL;
else
er->rxmode = EN_RMD_RECV_NORMAL;
}
#if 01
DPRINTF(("en_get: blocking on rcv dma\n"));