Index: chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |
diff --git a/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |
index bd0b4acc3ece542d15413a1409421c1e538b73da..50b760954e31c9839c791595171dea53e103d995 100644 |
--- a/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |
+++ b/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |
@@ -20,8 +20,15 @@ |
/* TX */ |
/******/ |
+static const int subtype_txq_to_hwq[] = { |
+ [WME_AC_BE] = ATH_TXQ_AC_BE, |
+ [WME_AC_BK] = ATH_TXQ_AC_BK, |
+ [WME_AC_VI] = ATH_TXQ_AC_VI, |
+ [WME_AC_VO] = ATH_TXQ_AC_VO, |
+}; |
+ |
#define ATH9K_HTC_INIT_TXQ(subtype) do { \ |
- qi.tqi_subtype = subtype; \ |
+ qi.tqi_subtype = subtype_txq_to_hwq[subtype]; \ |
qi.tqi_aifs = ATH9K_TXQ_USEDEFAULT; \ |
qi.tqi_cwmin = ATH9K_TXQ_USEDEFAULT; \ |
qi.tqi_cwmax = ATH9K_TXQ_USEDEFAULT; \ |
@@ -78,18 +85,23 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) |
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); |
struct ieee80211_sta *sta = tx_info->control.sta; |
struct ath9k_htc_sta *ista; |
- struct ath9k_htc_vif *avp; |
struct ath9k_htc_tx_ctl tx_ctl; |
enum htc_endpoint_id epid; |
u16 qnum; |
__le16 fc; |
u8 *tx_fhdr; |
- u8 sta_idx; |
+ u8 sta_idx, vif_idx; |
hdr = (struct ieee80211_hdr *) skb->data; |
fc = hdr->frame_control; |
- avp = (struct ath9k_htc_vif *) tx_info->control.vif->drv_priv; |
+ if (tx_info->control.vif && |
+ (struct ath9k_htc_vif *) tx_info->control.vif->drv_priv) |
+ vif_idx = ((struct ath9k_htc_vif *) |
+ tx_info->control.vif->drv_priv)->index; |
+ else |
+ vif_idx = priv->nvifs; |
+ |
if (sta) { |
ista = (struct ath9k_htc_sta *) sta->drv_priv; |
sta_idx = ista->index; |
@@ -106,7 +118,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) |
memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr)); |
tx_hdr.node_idx = sta_idx; |
- tx_hdr.vif_idx = avp->index; |
+ tx_hdr.vif_idx = vif_idx; |
if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) { |
tx_ctl.type = ATH9K_HTC_AMPDU; |
@@ -169,7 +181,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) |
tx_ctl.type = ATH9K_HTC_NORMAL; |
mgmt_hdr.node_idx = sta_idx; |
- mgmt_hdr.vif_idx = avp->index; |
+ mgmt_hdr.vif_idx = vif_idx; |
mgmt_hdr.tidno = 0; |
mgmt_hdr.flags = 0; |