| 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;
|
|
|
|
|