kern/85886: [an] an0: timeouts with Cisco 350 minipci
Jason Young
jyoung at evelocity.net
Tue Dec 26 22:40:15 PST 2006
The following reply was made to PR kern/85886; it has been noted by GNATS.
From: "Jason Young" <jyoung at evelocity.net>
To: <bug-followup at FreeBSD.org>,
<djb at gofree.co.uk>
Cc:
Subject: Re: kern/85886: [an] an0: timeouts with Cisco 350 minipci
Date: Wed, 27 Dec 2006 01:24:19 -0500
I've had the same symptoms when using the MPI350 (Aironet 350 series
Mini PCI). Every N packets (seems to be 5 for me), the transmit
interrupt would fail to fire and the result would be "an0: device
timeout". The card would reset, then I could get another N packets,
lather rinse repeat. The card will work when running 5.00.03 or below,
but 5.02 and above experienced this problem.
I spent a lot of time comparing what we do with the Cisco-updated Linux
driver that's supposed to work with the new firmware. My results: it
looks like the MPI350 does NOT want certain transmit control bits set.
In if_anreg.h, we define the control bits for an 802.3 frame as follows:
#define AN_TXCTL_8023 \
(AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_HEADERTYPE_8023|
\
AN_PAYLOADTYPE_ETHER|AN_TXCTL_NORELEASE)
There's another definition used when sending 802.11 frames, but the
driver is not written to use that definition at all. If you drop the
bits asking for TX complete and TX error interrupts, like so:
#define AN_TXCTL_8023 \
(AN_HEADERTYPE_8023|AN_PAYLOADTYPE_ETHER|AN_TXCTL_NORELEASE)
The card runs happily at full speed, no timeouts, running any of the
following firmware revisions: 5.00.01, 5.30.17 and 5.60.21. The MPI350
has its own special kind of transmit interrupt, TX_CPY (transmit buffer
copy or DMA done? unsure), so maybe the other two just don't apply to
MPI350.
The driver will still complain of RID length mismatches, but this should
be cosmetic only for the driver's current feature set. In order to take
full advantage of the card's features, the driver will have to learn
about the new fields.
I do not recommend the above change be committed as-is, because it will
affect more than the MPI350. I think the right thing to do is to add an
mpi350 switch (like many other places in the driver), but next week I
should have access to some pccard Aironet 340 and 350s to do regression
testing with. I would be interested in any feedback, though, to see if
this change helps anyone else drive new-firmware MPI350s under FreeBSD.
-jyoung
More information about the freebsd-bugs
mailing list