ath10k: add HTC TX credits replenishing notification
authorMichal Kazior <michal.kazior@tieto.com>
Fri, 13 Sep 2013 12:16:53 +0000 (14:16 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Mon, 16 Sep 2013 16:47:46 +0000 (19:47 +0300)
This will allow higher layers to anticipate and
act upon TX credits renewal. This will be
important for some future rework of WMI command
submission.

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

index 1da0f828f458815e60f74b3c2688253d45597377..49da4e509084a7d6dac74b4a91fe8fc44cf70bd3 100644 (file)
@@ -150,6 +150,9 @@ err:
        ep->tx_credits += credits;
        spin_unlock_bh(&htc->tx_lock);
 
+       if (ep->ep_ops.ep_tx_credits)
+               ep->ep_ops.ep_tx_credits(htc->ar);
+
        /* this is the simplest way to handle out-of-resources for non-credit
         * based endpoints. credit based endpoints can still get -ENOSR, but
         * this is highly unlikely as credit reservation should prevent that */
@@ -302,6 +305,12 @@ ath10k_htc_process_credit_report(struct ath10k_htc *htc,
                ep = &htc->endpoint[report->eid];
                ep->tx_credits += report->credits;
 
+               if (ep->ep_ops.ep_tx_credits) {
+                       spin_unlock_bh(&htc->tx_lock);
+                       ep->ep_ops.ep_tx_credits(htc->ar);
+                       spin_lock_bh(&htc->tx_lock);
+               }
+
                if (ep->tx_credits && !skb_queue_empty(&ep->tx_queue))
                        queue_work(htc->ar->workqueue, &ep->send_work);
        }
index e1dd8c761853d7d3197c173aeacb9499d4bd274a..92ca29bf9620cc789fd91489324063203c0e0989 100644 (file)
@@ -276,6 +276,7 @@ struct ath10k_htc_ops {
 struct ath10k_htc_ep_ops {
        void (*ep_tx_complete)(struct ath10k *, struct sk_buff *);
        void (*ep_rx_complete)(struct ath10k *, struct sk_buff *);
+       void (*ep_tx_credits)(struct ath10k *);
 };
 
 /* service connection information */