ath10k: change dma beacon cmd prototype
authorMichal Kazior <michal.kazior@tieto.com>
Thu, 29 Jan 2015 12:29:47 +0000 (14:29 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Wed, 4 Feb 2015 07:17:00 +0000 (09:17 +0200)
The command logic shouldn't really care about
arvif structure.

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

index 058f88b..de43616 100644 (file)
@@ -104,7 +104,10 @@ struct wmi_ops {
                                         u32 value);
        struct sk_buff *(*gen_scan_chan_list)(struct ath10k *ar,
                                              const struct wmi_scan_chan_list_arg *arg);
-       struct sk_buff *(*gen_beacon_dma)(struct ath10k_vif *arvif);
+       struct sk_buff *(*gen_beacon_dma)(struct ath10k *ar, u32 vdev_id,
+                                         const void *bcn, size_t bcn_len,
+                                         u32 bcn_paddr, bool dtim_zero,
+                                         bool deliver_cab);
        struct sk_buff *(*gen_pdev_set_wmm)(struct ath10k *ar,
                                            const struct wmi_wmm_params_all_arg *arg);
        struct sk_buff *(*gen_request_stats)(struct ath10k *ar,
@@ -768,16 +771,19 @@ ath10k_wmi_peer_assoc(struct ath10k *ar,
 }
 
 static inline int
-ath10k_wmi_beacon_send_ref_nowait(struct ath10k_vif *arvif)
+ath10k_wmi_beacon_send_ref_nowait(struct ath10k *ar, u32 vdev_id,
+                                 const void *bcn, size_t bcn_len,
+                                 u32 bcn_paddr, bool dtim_zero,
+                                 bool deliver_cab)
 {
-       struct ath10k *ar = arvif->ar;
        struct sk_buff *skb;
        int ret;
 
        if (!ar->wmi.ops->gen_beacon_dma)
                return -EOPNOTSUPP;
 
-       skb = ar->wmi.ops->gen_beacon_dma(arvif);
+       skb = ar->wmi.ops->gen_beacon_dma(ar, vdev_id, bcn, bcn_len, bcn_paddr,
+                                         dtim_zero, deliver_cab);
        if (IS_ERR(skb))
                return PTR_ERR(skb);
 
index be32db9..ba78c18 100644 (file)
@@ -2001,13 +2001,15 @@ ath10k_wmi_tlv_op_gen_scan_chan_list(struct ath10k *ar,
 }
 
 static struct sk_buff *
-ath10k_wmi_tlv_op_gen_beacon_dma(struct ath10k_vif *arvif)
+ath10k_wmi_tlv_op_gen_beacon_dma(struct ath10k *ar, u32 vdev_id,
+                                const void *bcn, size_t bcn_len,
+                                u32 bcn_paddr, bool dtim_zero,
+                                bool deliver_cab)
+
 {
-       struct ath10k *ar = arvif->ar;
        struct wmi_bcn_tx_ref_cmd *cmd;
        struct wmi_tlv *tlv;
        struct sk_buff *skb;
-       struct sk_buff *beacon = arvif->beacon;
        struct ieee80211_hdr *hdr;
        u16 fc;
 
@@ -2015,24 +2017,24 @@ ath10k_wmi_tlv_op_gen_beacon_dma(struct ath10k_vif *arvif)
        if (!skb)
                return ERR_PTR(-ENOMEM);
 
-       hdr = (struct ieee80211_hdr *)beacon->data;
+       hdr = (struct ieee80211_hdr *)bcn;
        fc = le16_to_cpu(hdr->frame_control);
 
        tlv = (void *)skb->data;
        tlv->tag = __cpu_to_le16(WMI_TLV_TAG_STRUCT_BCN_SEND_FROM_HOST_CMD);
        tlv->len = __cpu_to_le16(sizeof(*cmd));
        cmd = (void *)tlv->value;
-       cmd->vdev_id = __cpu_to_le32(arvif->vdev_id);
-       cmd->data_len = __cpu_to_le32(beacon->len);
-       cmd->data_ptr = __cpu_to_le32(ATH10K_SKB_CB(beacon)->paddr);
+       cmd->vdev_id = __cpu_to_le32(vdev_id);
+       cmd->data_len = __cpu_to_le32(bcn_len);
+       cmd->data_ptr = __cpu_to_le32(bcn_paddr);
        cmd->msdu_id = 0;
        cmd->frame_control = __cpu_to_le32(fc);
        cmd->flags = 0;
 
-       if (ATH10K_SKB_CB(beacon)->bcn.dtim_zero)
+       if (dtim_zero)
                cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DTIM_ZERO);
 
-       if (ATH10K_SKB_CB(beacon)->bcn.deliver_cab)
+       if (deliver_cab)
                cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DELIVER_CAB);
 
        ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv beacon dma\n");
index 81561e4..01c0230 100644 (file)
@@ -956,6 +956,8 @@ err_pull:
 
 static void ath10k_wmi_tx_beacon_nowait(struct ath10k_vif *arvif)
 {
+       struct sk_buff *bcn;
+       struct ath10k_skb_cb *cb;
        int ret;
 
        lockdep_assert_held(&arvif->ar->data_lock);
@@ -966,7 +968,12 @@ static void ath10k_wmi_tx_beacon_nowait(struct ath10k_vif *arvif)
        if (arvif->beacon_sent)
                return;
 
-       ret = ath10k_wmi_beacon_send_ref_nowait(arvif);
+       bcn = arvif->beacon;
+       cb = ATH10K_SKB_CB(bcn);
+       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);
        if (ret)
                return;
 
@@ -4856,12 +4863,12 @@ ath10k_wmi_10_2_op_gen_pdev_get_temperature(struct ath10k *ar)
 
 /* This function assumes the beacon is already DMA mapped */
 static struct sk_buff *
-ath10k_wmi_op_gen_beacon_dma(struct ath10k_vif *arvif)
+ath10k_wmi_op_gen_beacon_dma(struct ath10k *ar, u32 vdev_id, const void *bcn,
+                            size_t bcn_len, u32 bcn_paddr, bool dtim_zero,
+                            bool deliver_cab)
 {
-       struct ath10k *ar = arvif->ar;
        struct wmi_bcn_tx_ref_cmd *cmd;
        struct sk_buff *skb;
-       struct sk_buff *beacon = arvif->beacon;
        struct ieee80211_hdr *hdr;
        u16 fc;
 
@@ -4869,22 +4876,22 @@ ath10k_wmi_op_gen_beacon_dma(struct ath10k_vif *arvif)
        if (!skb)
                return ERR_PTR(-ENOMEM);
 
-       hdr = (struct ieee80211_hdr *)beacon->data;
+       hdr = (struct ieee80211_hdr *)bcn;
        fc = le16_to_cpu(hdr->frame_control);
 
        cmd = (struct wmi_bcn_tx_ref_cmd *)skb->data;
-       cmd->vdev_id = __cpu_to_le32(arvif->vdev_id);
-       cmd->data_len = __cpu_to_le32(beacon->len);
-       cmd->data_ptr = __cpu_to_le32(ATH10K_SKB_CB(beacon)->paddr);
+       cmd->vdev_id = __cpu_to_le32(vdev_id);
+       cmd->data_len = __cpu_to_le32(bcn_len);
+       cmd->data_ptr = __cpu_to_le32(bcn_paddr);
        cmd->msdu_id = 0;
        cmd->frame_control = __cpu_to_le32(fc);
        cmd->flags = 0;
        cmd->antenna_mask = __cpu_to_le32(WMI_BCN_TX_REF_DEF_ANTENNA);
 
-       if (ATH10K_SKB_CB(beacon)->bcn.dtim_zero)
+       if (dtim_zero)
                cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DTIM_ZERO);
 
-       if (ATH10K_SKB_CB(beacon)->bcn.deliver_cab)
+       if (deliver_cab)
                cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DELIVER_CAB);
 
        return skb;