ath10k: remove htc polling for tx completion

Since polling for tx completion is handled whenever target to host
messages are received, removing the unnecessary polling mechanism for
send completion at HTC level.

Reviewed-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
Rajkumar Manoharan 2015-10-12 18:27:06 +05:30 committed by Kalle Valo
parent 0da64f19f0
commit 400143e45d
4 changed files with 7 additions and 43 deletions

View File

@ -58,8 +58,7 @@ struct ath10k_hif_ops {
void (*stop)(struct ath10k *ar); void (*stop)(struct ath10k *ar);
int (*map_service_to_pipe)(struct ath10k *ar, u16 service_id, int (*map_service_to_pipe)(struct ath10k *ar, u16 service_id,
u8 *ul_pipe, u8 *dl_pipe, u8 *ul_pipe, u8 *dl_pipe);
int *ul_is_polled);
void (*get_default_pipe)(struct ath10k *ar, u8 *ul_pipe, u8 *dl_pipe); void (*get_default_pipe)(struct ath10k *ar, u8 *ul_pipe, u8 *dl_pipe);
@ -132,12 +131,10 @@ static inline void ath10k_hif_stop(struct ath10k *ar)
static inline int ath10k_hif_map_service_to_pipe(struct ath10k *ar, static inline int ath10k_hif_map_service_to_pipe(struct ath10k *ar,
u16 service_id, u16 service_id,
u8 *ul_pipe, u8 *dl_pipe, u8 *ul_pipe, u8 *dl_pipe)
int *ul_is_polled)
{ {
return ar->hif.ops->map_service_to_pipe(ar, service_id, return ar->hif.ops->map_service_to_pipe(ar, service_id,
ul_pipe, dl_pipe, ul_pipe, dl_pipe);
ul_is_polled);
} }
static inline void ath10k_hif_get_default_pipe(struct ath10k *ar, static inline void ath10k_hif_get_default_pipe(struct ath10k *ar,

View File

@ -23,16 +23,6 @@
/* Send */ /* Send */
/********/ /********/
static inline void ath10k_htc_send_complete_check(struct ath10k_htc_ep *ep,
int force)
{
/*
* Check whether HIF has any prior sends that have finished,
* have not had the post-processing done.
*/
ath10k_hif_send_complete_check(ep->htc->ar, ep->ul_pipe_id, force);
}
static void ath10k_htc_control_tx_complete(struct ath10k *ar, static void ath10k_htc_control_tx_complete(struct ath10k *ar,
struct sk_buff *skb) struct sk_buff *skb)
{ {
@ -328,15 +318,6 @@ void ath10k_htc_rx_completion_handler(struct ath10k *ar, struct sk_buff *skb)
ep = &htc->endpoint[eid]; ep = &htc->endpoint[eid];
/*
* If this endpoint that received a message from the target has
* a to-target HIF pipe whose send completions are polled rather
* than interrupt-driven, this is a good point to ask HIF to check
* whether it has any completed sends to handle.
*/
if (ep->ul_is_polled)
ath10k_htc_send_complete_check(ep, 1);
payload_len = __le16_to_cpu(hdr->len); payload_len = __le16_to_cpu(hdr->len);
if (payload_len + sizeof(*hdr) > ATH10K_HTC_MAX_LEN) { if (payload_len + sizeof(*hdr) > ATH10K_HTC_MAX_LEN) {
@ -758,8 +739,7 @@ setup:
status = ath10k_hif_map_service_to_pipe(htc->ar, status = ath10k_hif_map_service_to_pipe(htc->ar,
ep->service_id, ep->service_id,
&ep->ul_pipe_id, &ep->ul_pipe_id,
&ep->dl_pipe_id, &ep->dl_pipe_id);
&ep->ul_is_polled);
if (status) if (status)
return status; return status;
@ -768,10 +748,6 @@ setup:
htc_service_name(ep->service_id), ep->ul_pipe_id, htc_service_name(ep->service_id), ep->ul_pipe_id,
ep->dl_pipe_id, ep->eid); ep->dl_pipe_id, ep->eid);
ath10k_dbg(ar, ATH10K_DBG_BOOT,
"boot htc ep %d ul polled %d\n",
ep->eid, ep->ul_is_polled);
if (disable_credit_flow_ctrl && ep->tx_credit_flow_enabled) { if (disable_credit_flow_ctrl && ep->tx_credit_flow_enabled) {
ep->tx_credit_flow_enabled = false; ep->tx_credit_flow_enabled = false;
ath10k_dbg(ar, ATH10K_DBG_BOOT, ath10k_dbg(ar, ATH10K_DBG_BOOT,

View File

@ -312,7 +312,6 @@ struct ath10k_htc_ep {
int max_ep_message_len; int max_ep_message_len;
u8 ul_pipe_id; u8 ul_pipe_id;
u8 dl_pipe_id; u8 dl_pipe_id;
int ul_is_polled; /* call HIF to get tx completions */
u8 seq_no; /* for debugging */ u8 seq_no; /* for debugging */
int tx_credits; int tx_credits;

View File

@ -1402,9 +1402,8 @@ static void ath10k_pci_kill_tasklet(struct ath10k *ar)
del_timer_sync(&ar_pci->rx_post_retry); del_timer_sync(&ar_pci->rx_post_retry);
} }
static int ath10k_pci_hif_map_service_to_pipe(struct ath10k *ar, static int ath10k_pci_hif_map_service_to_pipe(struct ath10k *ar, u16 service_id,
u16 service_id, u8 *ul_pipe, u8 *ul_pipe, u8 *dl_pipe)
u8 *dl_pipe, int *ul_is_polled)
{ {
const struct service_to_pipe *entry; const struct service_to_pipe *entry;
bool ul_set = false, dl_set = false; bool ul_set = false, dl_set = false;
@ -1445,24 +1444,17 @@ static int ath10k_pci_hif_map_service_to_pipe(struct ath10k *ar,
if (WARN_ON(!ul_set || !dl_set)) if (WARN_ON(!ul_set || !dl_set))
return -ENOENT; return -ENOENT;
*ul_is_polled =
(host_ce_config_wlan[*ul_pipe].flags & CE_ATTR_DIS_INTR) != 0;
return 0; return 0;
} }
static void ath10k_pci_hif_get_default_pipe(struct ath10k *ar, static void ath10k_pci_hif_get_default_pipe(struct ath10k *ar,
u8 *ul_pipe, u8 *dl_pipe) u8 *ul_pipe, u8 *dl_pipe)
{ {
int ul_is_polled;
ath10k_dbg(ar, ATH10K_DBG_PCI, "pci hif get default pipe\n"); ath10k_dbg(ar, ATH10K_DBG_PCI, "pci hif get default pipe\n");
(void)ath10k_pci_hif_map_service_to_pipe(ar, (void)ath10k_pci_hif_map_service_to_pipe(ar,
ATH10K_HTC_SVC_ID_RSVD_CTRL, ATH10K_HTC_SVC_ID_RSVD_CTRL,
ul_pipe, ul_pipe, dl_pipe);
dl_pipe,
&ul_is_polled);
} }
static void ath10k_pci_irq_msi_fw_mask(struct ath10k *ar) static void ath10k_pci_irq_msi_fw_mask(struct ath10k *ar)