ath10k: pack up flags in skb_cb
authorMichal Kazior <michal.kazior@tieto.com>
Wed, 18 Nov 2015 05:59:20 +0000 (06:59 +0100)
committerKalle Valo <kvalo@qca.qualcomm.com>
Mon, 23 Nov 2015 15:12:27 +0000 (17:12 +0200)
It was wasteful to have all the flags as separate
bools.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/htt_tx.c
drivers/net/wireless/ath/ath10k/mac.c
drivers/net/wireless/ath/ath10k/wmi.c

index 4cc410d2ac27ac2ce9d2706f2d58a2b81021f652..d0f2f2494ea99f8265776713be8c3866b3073c92 100644 (file)
@@ -81,22 +81,23 @@ static inline const char *ath10k_bus_str(enum ath10k_bus bus)
        return "unknown";
 }
 
+enum ath10k_skb_flags {
+       ATH10K_SKB_F_NO_HWCRYPT = BIT(0),
+       ATH10K_SKB_F_DTIM_ZERO = BIT(1),
+       ATH10K_SKB_F_DELIVER_CAB = BIT(2),
+};
+
 struct ath10k_skb_cb {
        dma_addr_t paddr;
+       u8 flags;
        u8 eid;
        u8 vdev_id;
 
        struct {
                u8 tid;
-               bool nohwcrypt;
                struct ath10k_htt_txbuf *txbuf;
                u32 txbuf_paddr;
        } __packed htt;
-
-       struct {
-               bool dtim_zero;
-               bool deliver_cab;
-       } bcn;
 } __packed;
 
 struct ath10k_skb_rxcb {
index a7d8798b2f377c903d1853c568f54f8785901bb4..c955c6b6ea9dcd089cfd0c7cf1e72b314b0eb4b1 100644 (file)
@@ -586,7 +586,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
             ieee80211_is_disassoc(hdr->frame_control)) &&
             ieee80211_has_protected(hdr->frame_control)) {
                skb_put(msdu, IEEE80211_CCMP_MIC_LEN);
-       } else if (!skb_cb->htt.nohwcrypt &&
+       } else if (!(skb_cb->flags & ATH10K_SKB_F_NO_HWCRYPT) &&
                   txmode == ATH10K_HW_TXRX_RAW &&
                   ieee80211_has_protected(hdr->frame_control)) {
                skb_put(msdu, IEEE80211_CCMP_MIC_LEN);
@@ -666,7 +666,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
                        prefetch_len);
        skb_cb->htt.txbuf->htc_hdr.flags = 0;
 
-       if (skb_cb->htt.nohwcrypt)
+       if (skb_cb->flags & ATH10K_SKB_F_NO_HWCRYPT)
                flags0 |= HTT_DATA_TX_DESC_FLAGS0_NO_ENCRYPT;
 
        flags1 |= SM((u16)vdev_id, HTT_DATA_TX_DESC_FLAGS1_VDEV_ID);
index ac70959a4db3ab707d94676be8caf050a3f59cfe..eca0cfe756d0e9eaa646b91d5e58ad8403ec41f1 100644 (file)
@@ -3672,6 +3672,7 @@ static void ath10k_tx(struct ieee80211_hw *hw,
                      struct sk_buff *skb)
 {
        struct ath10k *ar = hw->priv;
+       struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
        struct ieee80211_vif *vif = info->control.vif;
        struct ieee80211_sta *sta = control->sta;
@@ -3684,9 +3685,12 @@ static void ath10k_tx(struct ieee80211_hw *hw,
 
        txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
 
-       ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
-       ATH10K_SKB_CB(skb)->htt.nohwcrypt = !ath10k_tx_h_use_hwcrypto(vif, skb);
-       ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
+       skb_cb->flags = 0;
+       if (!ath10k_tx_h_use_hwcrypto(vif, skb))
+               skb_cb->flags |= ATH10K_SKB_F_NO_HWCRYPT;
+
+       skb_cb->htt.tid = ath10k_tx_h_get_tid(hdr);
+       skb_cb->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
 
        switch (txmode) {
        case ATH10K_HW_TXRX_MGMT:
index 902107934edd38f0648861d40f1f67745db4d29d..6028a598c199f75318d4a24565bc9adbde3cc40d 100644 (file)
@@ -1715,6 +1715,8 @@ static void ath10k_wmi_tx_beacon_nowait(struct ath10k_vif *arvif)
        struct ath10k *ar = arvif->ar;
        struct ath10k_skb_cb *cb;
        struct sk_buff *bcn;
+       bool dtim_zero;
+       bool deliver_cab;
        int ret;
 
        spin_lock_bh(&ar->data_lock);
@@ -1734,12 +1736,14 @@ static void ath10k_wmi_tx_beacon_nowait(struct ath10k_vif *arvif)
                arvif->beacon_state = ATH10K_BEACON_SENDING;
                spin_unlock_bh(&ar->data_lock);
 
+               dtim_zero = !!(cb->flags & ATH10K_SKB_F_DTIM_ZERO);
+               deliver_cab = !!(cb->flags & ATH10K_SKB_F_DELIVER_CAB);
                ret = ath10k_wmi_beacon_send_ref_nowait(arvif->ar,
                                                        arvif->vdev_id,
                                                        bcn->data, bcn->len,
                                                        cb->paddr,
-                                                       cb->bcn.dtim_zero,
-                                                       cb->bcn.deliver_cab);
+                                                       dtim_zero,
+                                                       deliver_cab);
 
                spin_lock_bh(&ar->data_lock);
 
@@ -3157,10 +3161,10 @@ static void ath10k_wmi_update_tim(struct ath10k *ar,
        memcpy(tim->virtual_map, arvif->u.ap.tim_bitmap, pvm_len);
 
        if (tim->dtim_count == 0) {
-               ATH10K_SKB_CB(bcn)->bcn.dtim_zero = true;
+               ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DTIM_ZERO;
 
                if (__le32_to_cpu(tim_info->tim_mcast) == 1)
-                       ATH10K_SKB_CB(bcn)->bcn.deliver_cab = true;
+                       ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DELIVER_CAB;
        }
 
        ath10k_dbg(ar, ATH10K_DBG_MGMT, "dtim %d/%d mcast %d pvmlen %d\n",