aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43legacy/pio.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2008-05-15 06:55:29 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-05-21 21:48:11 -0400
commite039fa4a4195ac4ee895e6f3d1334beed63256fe (patch)
treecfd0762d73df96b73052378be7b157c4ac6e7035 /drivers/net/wireless/b43legacy/pio.c
parente24549485f859be6518929bb1c9c0257d79f033d (diff)
mac80211: move TX info into skb->cb
This patch converts mac80211 and all drivers to have transmit information and status in skb->cb rather than allocating extra memory for it and copying all the data around. To make it fit, a union is used where only data that is necessary for all steps is kept outside of the union. A number of fixes were done by Ivo, as well as the rt2x00 part of this patch. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43legacy/pio.c')
-rw-r--r--drivers/net/wireless/b43legacy/pio.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/net/wireless/b43legacy/pio.c b/drivers/net/wireless/b43legacy/pio.c
index 8d3d27d3cd67..a86c7647fa2d 100644
--- a/drivers/net/wireless/b43legacy/pio.c
+++ b/drivers/net/wireless/b43legacy/pio.c
@@ -196,7 +196,7 @@ static int pio_tx_write_fragment(struct b43legacy_pioqueue *queue,
196 B43legacy_WARN_ON(skb_shinfo(skb)->nr_frags != 0); 196 B43legacy_WARN_ON(skb_shinfo(skb)->nr_frags != 0);
197 err = b43legacy_generate_txhdr(queue->dev, 197 err = b43legacy_generate_txhdr(queue->dev,
198 txhdr, skb->data, skb->len, 198 txhdr, skb->data, skb->len,
199 &packet->txstat.control, 199 IEEE80211_SKB_CB(skb),
200 generate_cookie(queue, packet)); 200 generate_cookie(queue, packet));
201 if (err) 201 if (err)
202 return err; 202 return err;
@@ -463,8 +463,7 @@ err_destroy0:
463} 463}
464 464
465int b43legacy_pio_tx(struct b43legacy_wldev *dev, 465int b43legacy_pio_tx(struct b43legacy_wldev *dev,
466 struct sk_buff *skb, 466 struct sk_buff *skb)
467 struct ieee80211_tx_control *ctl)
468{ 467{
469 struct b43legacy_pioqueue *queue = dev->pio.queue1; 468 struct b43legacy_pioqueue *queue = dev->pio.queue1;
470 struct b43legacy_pio_txpacket *packet; 469 struct b43legacy_pio_txpacket *packet;
@@ -476,9 +475,6 @@ int b43legacy_pio_tx(struct b43legacy_wldev *dev,
476 list); 475 list);
477 packet->skb = skb; 476 packet->skb = skb;
478 477
479 memset(&packet->txstat, 0, sizeof(packet->txstat));
480 memcpy(&packet->txstat.control, ctl, sizeof(*ctl));
481
482 list_move_tail(&packet->list, &queue->txqueue); 478 list_move_tail(&packet->list, &queue->txqueue);
483 queue->nr_txfree--; 479 queue->nr_txfree--;
484 queue->nr_tx_packets++; 480 queue->nr_tx_packets++;
@@ -494,6 +490,7 @@ void b43legacy_pio_handle_txstatus(struct b43legacy_wldev *dev,
494{ 490{
495 struct b43legacy_pioqueue *queue; 491 struct b43legacy_pioqueue *queue;
496 struct b43legacy_pio_txpacket *packet; 492 struct b43legacy_pio_txpacket *packet;
493 struct ieee80211_tx_info *info;
497 494
498 queue = parse_cookie(dev, status->cookie, &packet); 495 queue = parse_cookie(dev, status->cookie, &packet);
499 B43legacy_WARN_ON(!queue); 496 B43legacy_WARN_ON(!queue);
@@ -505,11 +502,13 @@ void b43legacy_pio_handle_txstatus(struct b43legacy_wldev *dev,
505 queue->tx_devq_used -= (packet->skb->len + 502 queue->tx_devq_used -= (packet->skb->len +
506 sizeof(struct b43legacy_txhdr_fw3)); 503 sizeof(struct b43legacy_txhdr_fw3));
507 504
505 info = IEEE80211_SKB_CB(packet->skb);
506 memset(&info->status, 0, sizeof(info->status));
507
508 if (status->acked) 508 if (status->acked)
509 packet->txstat.flags |= IEEE80211_TX_STATUS_ACK; 509 info->flags |= IEEE80211_TX_STAT_ACK;
510 packet->txstat.retry_count = status->frame_count - 1; 510 info->status.retry_count = status->frame_count - 1;
511 ieee80211_tx_status_irqsafe(dev->wl->hw, packet->skb, 511 ieee80211_tx_status_irqsafe(dev->wl->hw, packet->skb);
512 &(packet->txstat));
513 packet->skb = NULL; 512 packet->skb = NULL;
514 513
515 free_txpacket(packet, 1); 514 free_txpacket(packet, 1);