Re: prism 2.5 timeout in wi_cmd 0x010b

Marko Zec <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile,gmane.os.freebsd.devel.net
Message-ID <[email protected]>
Hi Lorenzo,

can you try the attached patch, it does seem to help on my ThinkPad X30, 
which has an internal mini-PCI Prism2.5 card with the same firmware.

Cheers,

Marko


On Saturday 10 January 2004 03:43, Lorenzo Vicisano wrote:
> Hi,
>
> This is the context:
>
>  - Stable as of Jan 9 (FreeBSD 4.9-STABLE #14: Fri Jan  9 15:04:16
> PST 2004) The problem was present since Dec 22.. at least.
>
>  - Linksys PCI WMP11/Prism:
>
> wi0: <Intersil Prism2.5> mem 0xf8a02000-0xf8a02fff irq 5 at device
> 11.0 on pci2 wi0: 802.11 address: 00:06:25:09:a7:8f
> wi0: using RF:PRISM2.5 MAC:ISL3874A(Mini-PCI)
> wi0: Intersil Firmware: Primary 1.01.00, Station 1.04.02
>
>  acting as a client. The AP is a DLink 614+ (I've tried various
>  versions of the firmware).
>
>  - High volume of transmitted traffic (ftp-ed a few MBs within the
>    WLAN). Either towards the AP or towards other clients (E.g.
> AN350).
>
> And this is the symptom:
>
> wi0: timeout in wi_cmd 0x010b; event status 0x0000
> wi0: xmit failed
>
> after this the NIC is dead.
> Sometimes the box freezes for a few seconds, sometimes it doesn't.
> Most of the times the NIC doesn't resume unless it brought up/down
> (ifconfig down/up).
>
> More messages (after the NIC stops working):
>
> wi0: watchdog timeout
> wi0: timeout in wi_cmd 0x0002; event status 0x0000
> wi0: wi_cmd: busy bit won't clear.
> wi0: wi_cmd: busy bit won't clear.
> wi0: wi_cmd: busy bit won't clear.
> wi0: init failed
> wi0: watchdog timeout
>
> Complete log attached. I'm able to reproduce this consistently ;(
> I can do some debugging and provide more info, if needed.
>
> 	thanks,
> 	Lorenzo

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
wi.diff (text/x-diff, 471 B)
--- if_wi.c.orig	Wed Jan  7 15:55:18 2004
+++ if_wi.c	Wed Jan  7 16:38:37 2004
@@ -1016,9 +1016,11 @@ wi_cmd(sc, cmd, val0, val1, val2)
 		 * set in the event status register.
 		 */
 		s = CSR_READ_2(sc, WI_EVENT_STAT);
+		DELAY(1);
 		if (s & WI_EV_CMD) {
 			/* Ack the event and read result code. */
 			s = CSR_READ_2(sc, WI_STATUS);
+			DELAY(1);
 			CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_CMD);
 #ifdef foo
 			if ((s & WI_CMD_CODE_MASK) != (cmd & WI_CMD_CODE_MASK))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.