diff options
author | Christian Lamparter <chunkeey@web.de> | 2009-06-20 15:13:46 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-07-10 15:01:57 -0400 |
commit | 1795378ee8d162084c6f98fc62ec309e418dfbe9 (patch) | |
tree | 0f94532cbf1f1318b90ba27de67a0bcc99ac9a93 /drivers/net/wireless/p54 | |
parent | 92179986ba5221a21e0f8a1e9b7b82a2883fef79 (diff) |
p54: redo rx_status into skb->cb
This patch slightly optimizes p54_rx_data's stack and code size.
Signed-off-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/p54')
-rw-r--r-- | drivers/net/wireless/p54/p54common.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c index 1b15f9e0b861..d1ea609a6905 100644 --- a/drivers/net/wireless/p54/p54common.c +++ b/drivers/net/wireless/p54/p54common.c | |||
@@ -743,7 +743,7 @@ static int p54_rx_data(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
743 | { | 743 | { |
744 | struct p54_common *priv = dev->priv; | 744 | struct p54_common *priv = dev->priv; |
745 | struct p54_rx_data *hdr = (struct p54_rx_data *) skb->data; | 745 | struct p54_rx_data *hdr = (struct p54_rx_data *) skb->data; |
746 | struct ieee80211_rx_status rx_status = {0}; | 746 | struct ieee80211_rx_status *rx_status = IEEE80211_SKB_RXCB(skb); |
747 | u16 freq = le16_to_cpu(hdr->freq); | 747 | u16 freq = le16_to_cpu(hdr->freq); |
748 | size_t header_len = sizeof(*hdr); | 748 | size_t header_len = sizeof(*hdr); |
749 | u32 tsf32; | 749 | u32 tsf32; |
@@ -762,39 +762,37 @@ static int p54_rx_data(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
762 | } | 762 | } |
763 | 763 | ||
764 | if (hdr->decrypt_status == P54_DECRYPT_OK) | 764 | if (hdr->decrypt_status == P54_DECRYPT_OK) |
765 | rx_status.flag |= RX_FLAG_DECRYPTED; | 765 | rx_status->flag |= RX_FLAG_DECRYPTED; |
766 | if ((hdr->decrypt_status == P54_DECRYPT_FAIL_MICHAEL) || | 766 | if ((hdr->decrypt_status == P54_DECRYPT_FAIL_MICHAEL) || |
767 | (hdr->decrypt_status == P54_DECRYPT_FAIL_TKIP)) | 767 | (hdr->decrypt_status == P54_DECRYPT_FAIL_TKIP)) |
768 | rx_status.flag |= RX_FLAG_MMIC_ERROR; | 768 | rx_status->flag |= RX_FLAG_MMIC_ERROR; |
769 | 769 | ||
770 | rx_status.signal = p54_rssi_to_dbm(dev, hdr->rssi); | 770 | rx_status->signal = p54_rssi_to_dbm(dev, hdr->rssi); |
771 | rx_status.noise = priv->noise; | 771 | rx_status->noise = priv->noise; |
772 | if (hdr->rate & 0x10) | 772 | if (hdr->rate & 0x10) |
773 | rx_status.flag |= RX_FLAG_SHORTPRE; | 773 | rx_status->flag |= RX_FLAG_SHORTPRE; |
774 | if (dev->conf.channel->band == IEEE80211_BAND_5GHZ) | 774 | if (dev->conf.channel->band == IEEE80211_BAND_5GHZ) |
775 | rx_status.rate_idx = (rate < 4) ? 0 : rate - 4; | 775 | rx_status->rate_idx = (rate < 4) ? 0 : rate - 4; |
776 | else | 776 | else |
777 | rx_status.rate_idx = rate; | 777 | rx_status->rate_idx = rate; |
778 | 778 | ||
779 | rx_status.freq = freq; | 779 | rx_status->freq = freq; |
780 | rx_status.band = dev->conf.channel->band; | 780 | rx_status->band = dev->conf.channel->band; |
781 | rx_status.antenna = hdr->antenna; | 781 | rx_status->antenna = hdr->antenna; |
782 | 782 | ||
783 | tsf32 = le32_to_cpu(hdr->tsf32); | 783 | tsf32 = le32_to_cpu(hdr->tsf32); |
784 | if (tsf32 < priv->tsf_low32) | 784 | if (tsf32 < priv->tsf_low32) |
785 | priv->tsf_high32++; | 785 | priv->tsf_high32++; |
786 | rx_status.mactime = ((u64)priv->tsf_high32) << 32 | tsf32; | 786 | rx_status->mactime = ((u64)priv->tsf_high32) << 32 | tsf32; |
787 | priv->tsf_low32 = tsf32; | 787 | priv->tsf_low32 = tsf32; |
788 | 788 | ||
789 | rx_status.flag |= RX_FLAG_TSFT; | 789 | rx_status->flag |= RX_FLAG_TSFT; |
790 | 790 | ||
791 | if (hdr->flags & cpu_to_le16(P54_HDR_FLAG_DATA_ALIGN)) | 791 | if (hdr->flags & cpu_to_le16(P54_HDR_FLAG_DATA_ALIGN)) |
792 | header_len += hdr->align[0]; | 792 | header_len += hdr->align[0]; |
793 | 793 | ||
794 | skb_pull(skb, header_len); | 794 | skb_pull(skb, header_len); |
795 | skb_trim(skb, le16_to_cpu(hdr->len)); | 795 | skb_trim(skb, le16_to_cpu(hdr->len)); |
796 | |||
797 | memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status)); | ||
798 | ieee80211_rx_irqsafe(dev, skb); | 796 | ieee80211_rx_irqsafe(dev, skb); |
799 | 797 | ||
800 | queue_delayed_work(dev->workqueue, &priv->work, | 798 | queue_delayed_work(dev->workqueue, &priv->work, |