On 20-Sep-2002 Stephen McKay wrote: > On Thursday, 19th September 2002, John Baldwin wrote: > >>--- if_dc.c 4 Sep 2002 18:14:17 -0000 1.77 >>+++ if_dc.c 19 Sep 2002 20:57:03 -0000 >>@@ -1366,7 +1370,8 @@ >> for (i = 0; i < DC_TIMEOUT; i++) { >> isr = CSR_READ_4(sc, DC_ISR); >> if (isr & DC_ISR_TX_IDLE && > - (isr & DC_ISR_RX_STATE) == DC_RXSTATE_STOPPED) >>+ ((isr & DC_ISR_RX_STATE) == DC_RXSTATE_STOPPED || >>+ (isr & DC_ISR_RX_STATE) == DC_RXSTATE_WAIT)) >> break; >> DELAY(10); >> } > > Sadly this change is insufficient to satisfy all cards.
Well. I think we can keep the check for TX going idle and just not do the check for RX going idle. The original code basically did this until you submitted a patch to wpaul@ that fixed a logic bug (used || above instead of &&) that effectively didn't do the RX idle check. Perhaps we should do the same here? This would be similar to what we do in dc_tx_underrun() where we only make sure the TX is idle. -- John Baldwin <[EMAIL PROTECTED]> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-current" in the body of the message