diff options
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c index bd0b4acc3ece..2a6e45a293a9 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | |||
| @@ -78,18 +78,23 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) | |||
| 78 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); | 78 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); |
| 79 | struct ieee80211_sta *sta = tx_info->control.sta; | 79 | struct ieee80211_sta *sta = tx_info->control.sta; |
| 80 | struct ath9k_htc_sta *ista; | 80 | struct ath9k_htc_sta *ista; |
| 81 | struct ath9k_htc_vif *avp; | ||
| 82 | struct ath9k_htc_tx_ctl tx_ctl; | 81 | struct ath9k_htc_tx_ctl tx_ctl; |
| 83 | enum htc_endpoint_id epid; | 82 | enum htc_endpoint_id epid; |
| 84 | u16 qnum; | 83 | u16 qnum; |
| 85 | __le16 fc; | 84 | __le16 fc; |
| 86 | u8 *tx_fhdr; | 85 | u8 *tx_fhdr; |
| 87 | u8 sta_idx; | 86 | u8 sta_idx, vif_idx; |
| 88 | 87 | ||
| 89 | hdr = (struct ieee80211_hdr *) skb->data; | 88 | hdr = (struct ieee80211_hdr *) skb->data; |
| 90 | fc = hdr->frame_control; | 89 | fc = hdr->frame_control; |
| 91 | 90 | ||
| 92 | avp = (struct ath9k_htc_vif *) tx_info->control.vif->drv_priv; | 91 | if (tx_info->control.vif && |
| 92 | (struct ath9k_htc_vif *) tx_info->control.vif->drv_priv) | ||
| 93 | vif_idx = ((struct ath9k_htc_vif *) | ||
| 94 | tx_info->control.vif->drv_priv)->index; | ||
| 95 | else | ||
| 96 | vif_idx = priv->nvifs; | ||
| 97 | |||
| 93 | if (sta) { | 98 | if (sta) { |
| 94 | ista = (struct ath9k_htc_sta *) sta->drv_priv; | 99 | ista = (struct ath9k_htc_sta *) sta->drv_priv; |
| 95 | sta_idx = ista->index; | 100 | sta_idx = ista->index; |
| @@ -106,7 +111,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) | |||
| 106 | memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr)); | 111 | memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr)); |
| 107 | 112 | ||
| 108 | tx_hdr.node_idx = sta_idx; | 113 | tx_hdr.node_idx = sta_idx; |
| 109 | tx_hdr.vif_idx = avp->index; | 114 | tx_hdr.vif_idx = vif_idx; |
| 110 | 115 | ||
| 111 | if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) { | 116 | if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) { |
| 112 | tx_ctl.type = ATH9K_HTC_AMPDU; | 117 | tx_ctl.type = ATH9K_HTC_AMPDU; |
| @@ -169,7 +174,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) | |||
| 169 | tx_ctl.type = ATH9K_HTC_NORMAL; | 174 | tx_ctl.type = ATH9K_HTC_NORMAL; |
| 170 | 175 | ||
| 171 | mgmt_hdr.node_idx = sta_idx; | 176 | mgmt_hdr.node_idx = sta_idx; |
| 172 | mgmt_hdr.vif_idx = avp->index; | 177 | mgmt_hdr.vif_idx = vif_idx; |
| 173 | mgmt_hdr.tidno = 0; | 178 | mgmt_hdr.tidno = 0; |
| 174 | mgmt_hdr.flags = 0; | 179 | mgmt_hdr.flags = 0; |
| 175 | 180 | ||
