aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwl8k.c
diff options
context:
space:
mode:
authorNishant Sarmukadam <nishants@marvell.com>2010-12-30 14:23:31 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-01-19 11:36:05 -0500
commit252486a13a36e2846ff046c18aae67658692eced (patch)
treea49cbe37cd290418ec74731f85abe9dbabb07dc6 /drivers/net/wireless/mwl8k.c
parentc56eb8fb6dccb83d9fe62fd4dc00c834de9bc470 (diff)
mwl8k: Modify add_dma_header to include pad parameters
Add capability to add_dma_header to support padding at tail of the data packet to be transmitted when crypto is enabled. Padding is required for adding crypto information in data packets for supporting 802.11 security modes. Signed-off-by: Nishant Sarmukadam <nishants@marvell.com> Signed-off-by: Pradeep Nemavat <pnemavat@marvell.com> Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwl8k.c')
-rw-r--r--drivers/net/wireless/mwl8k.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c
index 9ecf8407cb1b..1798b7e8283f 100644
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -715,10 +715,12 @@ static inline void mwl8k_remove_dma_header(struct sk_buff *skb, __le16 qos)
715 skb_pull(skb, sizeof(*tr) - hdrlen); 715 skb_pull(skb, sizeof(*tr) - hdrlen);
716} 716}
717 717
718static inline void mwl8k_add_dma_header(struct sk_buff *skb) 718static void
719mwl8k_add_dma_header(struct sk_buff *skb, int tail_pad)
719{ 720{
720 struct ieee80211_hdr *wh; 721 struct ieee80211_hdr *wh;
721 int hdrlen; 722 int hdrlen;
723 int reqd_hdrlen;
722 struct mwl8k_dma_data *tr; 724 struct mwl8k_dma_data *tr;
723 725
724 /* 726 /*
@@ -730,11 +732,13 @@ static inline void mwl8k_add_dma_header(struct sk_buff *skb)
730 wh = (struct ieee80211_hdr *)skb->data; 732 wh = (struct ieee80211_hdr *)skb->data;
731 733
732 hdrlen = ieee80211_hdrlen(wh->frame_control); 734 hdrlen = ieee80211_hdrlen(wh->frame_control);
733 if (hdrlen != sizeof(*tr)) 735 reqd_hdrlen = sizeof(*tr);
734 skb_push(skb, sizeof(*tr) - hdrlen); 736
737 if (hdrlen != reqd_hdrlen)
738 skb_push(skb, reqd_hdrlen - hdrlen);
735 739
736 if (ieee80211_is_data_qos(wh->frame_control)) 740 if (ieee80211_is_data_qos(wh->frame_control))
737 hdrlen -= 2; 741 hdrlen -= IEEE80211_QOS_CTL_LEN;
738 742
739 tr = (struct mwl8k_dma_data *)skb->data; 743 tr = (struct mwl8k_dma_data *)skb->data;
740 if (wh != &tr->wh) 744 if (wh != &tr->wh)
@@ -747,7 +751,7 @@ static inline void mwl8k_add_dma_header(struct sk_buff *skb)
747 * payload". That is, everything except for the 802.11 header. 751 * payload". That is, everything except for the 802.11 header.
748 * This includes all crypto material including the MIC. 752 * This includes all crypto material including the MIC.
749 */ 753 */
750 tr->fwlen = cpu_to_le16(skb->len - sizeof(*tr)); 754 tr->fwlen = cpu_to_le16(skb->len - sizeof(*tr) + tail_pad);
751} 755}
752 756
753 757
@@ -1443,7 +1447,7 @@ mwl8k_txq_xmit(struct ieee80211_hw *hw, int index, struct sk_buff *skb)
1443 else 1447 else
1444 qos = 0; 1448 qos = 0;
1445 1449
1446 mwl8k_add_dma_header(skb); 1450 mwl8k_add_dma_header(skb, 0);
1447 wh = &((struct mwl8k_dma_data *)skb->data)->wh; 1451 wh = &((struct mwl8k_dma_data *)skb->data)->wh;
1448 1452
1449 tx_info = IEEE80211_SKB_CB(skb); 1453 tx_info = IEEE80211_SKB_CB(skb);