diff options
author | Michael Buesch <mb@bu3sch.de> | 2008-03-29 16:01:16 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-04-08 15:05:56 -0400 |
commit | 5100d5ac81b9330dc57e35adbe50923ba6107b8f (patch) | |
tree | 48224236b50703606c97c05ec077fde4880fc3b9 /drivers/net/wireless/b43/xmit.h | |
parent | 3109ece1114293b8201d9c140d02d7ce9a9fa387 (diff) |
b43: Add PIO support for PCMCIA devices
This adds PIO support back (D'oh!) for PCMCIA devices.
This is a complete rewrite of the old PIO code. It does actually work
and we get reasonable performance out of it on a modern machine.
On a PowerBook G4 I get a few MBit for TX and a few more for RX.
So it doesn't work as well as DMA (of course), but it's a _lot_ faster
than the old PIO code (only got a few kBit with that).
The limiting factor is the host CPU speed. So it will generate 100%
CPU usage when the network interface is heavily loaded. A voluntary preemption
point in the RX path makes sure Desktop Latency isn't hurt.
PIO is needed for 16bit PCMCIA devices, as we really don't want to poke with
the braindead DMA mechanisms on PCMCIA sockets. Additionally, not all
PCMCIA sockets do actually support DMA in 16bit mode (mine doesn't).
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/xmit.h')
-rw-r--r-- | drivers/net/wireless/b43/xmit.h | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/drivers/net/wireless/b43/xmit.h b/drivers/net/wireless/b43/xmit.h index bf58a8a85258..4f26988a5132 100644 --- a/drivers/net/wireless/b43/xmit.h +++ b/drivers/net/wireless/b43/xmit.h | |||
@@ -207,18 +207,6 @@ enum { | |||
207 | B43_TXST_SUPP_ABNACK, /* Afterburner NACK */ | 207 | B43_TXST_SUPP_ABNACK, /* Afterburner NACK */ |
208 | }; | 208 | }; |
209 | 209 | ||
210 | /* Transmit Status as received through DMA/PIO on old chips */ | ||
211 | struct b43_hwtxstatus { | ||
212 | PAD_BYTES(4); | ||
213 | __le16 cookie; | ||
214 | u8 flags; | ||
215 | u8 count; | ||
216 | PAD_BYTES(2); | ||
217 | __le16 seq; | ||
218 | u8 phy_stat; | ||
219 | PAD_BYTES(1); | ||
220 | } __attribute__ ((__packed__)); | ||
221 | |||
222 | /* Receive header for v4 firmware. */ | 210 | /* Receive header for v4 firmware. */ |
223 | struct b43_rxhdr_fw4 { | 211 | struct b43_rxhdr_fw4 { |
224 | __le16 frame_len; /* Frame length */ | 212 | __le16 frame_len; /* Frame length */ |
@@ -295,9 +283,8 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr); | |||
295 | 283 | ||
296 | void b43_handle_txstatus(struct b43_wldev *dev, | 284 | void b43_handle_txstatus(struct b43_wldev *dev, |
297 | const struct b43_txstatus *status); | 285 | const struct b43_txstatus *status); |
298 | 286 | bool b43_fill_txstatus_report(struct ieee80211_tx_status *report, | |
299 | void b43_handle_hwtxstatus(struct b43_wldev *dev, | 287 | const struct b43_txstatus *status); |
300 | const struct b43_hwtxstatus *hw); | ||
301 | 288 | ||
302 | void b43_tx_suspend(struct b43_wldev *dev); | 289 | void b43_tx_suspend(struct b43_wldev *dev); |
303 | void b43_tx_resume(struct b43_wldev *dev); | 290 | void b43_tx_resume(struct b43_wldev *dev); |