ath10k: add inlined wrappers for htt tx ops
authorErik Stromdahl <erik.stromdahl@gmail.com>
Sun, 15 Apr 2018 12:22:27 +0000 (14:22 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 19 Apr 2018 16:19:28 +0000 (19:19 +0300)
These wrappers makes the HTT ops align better with the HIF ops
(where similar wrappers are used).

It also makes it easier for a target to have unsupported ops
(by letting the corresponding function pointer be NULL).

Signed-off-by: Erik Stromdahl <erik.stromdahl@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath10k/htt.c
drivers/net/wireless/ath/ath10k/htt.h
drivers/net/wireless/ath/ath10k/htt_tx.c
drivers/net/wireless/ath/ath10k/mac.c

index 625198d..21a67f8 100644 (file)
@@ -257,11 +257,11 @@ int ath10k_htt_setup(struct ath10k_htt *htt)
                return status;
        }
 
-       status = htt->tx_ops->htt_send_frag_desc_bank_cfg(htt);
+       status = ath10k_htt_send_frag_desc_bank_cfg(htt);
        if (status)
                return status;
 
-       status = htt->tx_ops->htt_send_rx_ring_cfg(htt);
+       status = ath10k_htt_send_rx_ring_cfg(htt);
        if (status) {
                ath10k_warn(ar, "failed to setup rx ring: %d\n",
                            status);
index e5dbb0b..68f3bc9 100644 (file)
@@ -1856,6 +1856,57 @@ struct ath10k_htt_tx_ops {
        void (*htt_free_txbuff)(struct ath10k_htt *htt);
 };
 
+static inline int ath10k_htt_send_rx_ring_cfg(struct ath10k_htt *htt)
+{
+       if (!htt->tx_ops->htt_send_rx_ring_cfg)
+               return -EOPNOTSUPP;
+
+       return htt->tx_ops->htt_send_rx_ring_cfg(htt);
+}
+
+static inline int ath10k_htt_send_frag_desc_bank_cfg(struct ath10k_htt *htt)
+{
+       if (!htt->tx_ops->htt_send_frag_desc_bank_cfg)
+               return -EOPNOTSUPP;
+
+       return htt->tx_ops->htt_send_frag_desc_bank_cfg(htt);
+}
+
+static inline int ath10k_htt_alloc_frag_desc(struct ath10k_htt *htt)
+{
+       if (!htt->tx_ops->htt_alloc_frag_desc)
+               return -EOPNOTSUPP;
+
+       return htt->tx_ops->htt_alloc_frag_desc(htt);
+}
+
+static inline void ath10k_htt_free_frag_desc(struct ath10k_htt *htt)
+{
+       if (htt->tx_ops->htt_free_frag_desc)
+               htt->tx_ops->htt_free_frag_desc(htt);
+}
+
+static inline int ath10k_htt_tx(struct ath10k_htt *htt,
+                               enum ath10k_hw_txrx_mode txmode,
+                               struct sk_buff *msdu)
+{
+       return htt->tx_ops->htt_tx(htt, txmode, msdu);
+}
+
+static inline int ath10k_htt_alloc_txbuff(struct ath10k_htt *htt)
+{
+       if (!htt->tx_ops->htt_alloc_txbuff)
+               return -EOPNOTSUPP;
+
+       return htt->tx_ops->htt_alloc_txbuff(htt);
+}
+
+static inline void ath10k_htt_free_txbuff(struct ath10k_htt *htt)
+{
+       if (htt->tx_ops->htt_free_txbuff)
+               htt->tx_ops->htt_free_txbuff(htt);
+}
+
 struct ath10k_htt_rx_ops {
        size_t (*htt_get_rx_ring_size)(struct ath10k_htt *htt);
        void (*htt_config_paddrs_ring)(struct ath10k_htt *htt, void *vaddr);
index d334b7b..a086958 100644 (file)
@@ -443,13 +443,13 @@ static int ath10k_htt_tx_alloc_buf(struct ath10k_htt *htt)
        struct ath10k *ar = htt->ar;
        int ret;
 
-       ret = htt->tx_ops->htt_alloc_txbuff(htt);
+       ret = ath10k_htt_alloc_txbuff(htt);
        if (ret) {
                ath10k_err(ar, "failed to alloc cont tx buffer: %d\n", ret);
                return ret;
        }
 
-       ret = htt->tx_ops->htt_alloc_frag_desc(htt);
+       ret = ath10k_htt_alloc_frag_desc(htt);
        if (ret) {
                ath10k_err(ar, "failed to alloc cont frag desc: %d\n", ret);
                goto free_txbuf;
@@ -473,10 +473,10 @@ free_txq:
        ath10k_htt_tx_free_txq(htt);
 
 free_frag_desc:
-       htt->tx_ops->htt_free_frag_desc(htt);
+       ath10k_htt_free_frag_desc(htt);
 
 free_txbuf:
-       htt->tx_ops->htt_free_txbuff(htt);
+       ath10k_htt_free_txbuff(htt);
 
        return ret;
 }
@@ -530,9 +530,9 @@ void ath10k_htt_tx_destroy(struct ath10k_htt *htt)
        if (!htt->tx_mem_allocated)
                return;
 
-       htt->tx_ops->htt_free_txbuff(htt);
+       ath10k_htt_free_txbuff(htt);
        ath10k_htt_tx_free_txq(htt);
-       htt->tx_ops->htt_free_frag_desc(htt);
+       ath10k_htt_free_frag_desc(htt);
        ath10k_htt_tx_free_txdone_fifo(htt);
        htt->tx_mem_allocated = false;
 }
index bf05a36..fc3320f 100644 (file)
@@ -3598,7 +3598,7 @@ static int ath10k_mac_tx_submit(struct ath10k *ar,
 
        switch (txpath) {
        case ATH10K_MAC_TX_HTT:
-               ret = htt->tx_ops->htt_tx(htt, txmode, skb);
+               ret = ath10k_htt_tx(htt, txmode, skb);
                break;
        case ATH10K_MAC_TX_HTT_MGMT:
                ret = ath10k_htt_mgmt_tx(htt, skb);