ath10k: htc: ready_ext msg support
Added support for extended ready message. The extended ready message contains the maximum bundle count supported by SDIO chipsets. It is transmitted by SDIO chipset only and replaces the "standard" ready message in this case. Signed-off-by: Erik Stromdahl <erik.stromdahl@gmail.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:

committed by
Kalle Valo

parent
34dd398a55
commit
04ff79467e
@@ -586,8 +586,6 @@ int ath10k_htc_wait_target(struct ath10k_htc *htc)
|
||||
unsigned long time_left;
|
||||
struct ath10k_htc_msg *msg;
|
||||
u16 message_id;
|
||||
u16 credit_count;
|
||||
u16 credit_size;
|
||||
|
||||
time_left = wait_for_completion_timeout(&htc->ctl_resp,
|
||||
ATH10K_HTC_WAIT_TIMEOUT_HZ);
|
||||
@@ -624,16 +622,14 @@ int ath10k_htc_wait_target(struct ath10k_htc *htc)
|
||||
|
||||
msg = (struct ath10k_htc_msg *)htc->control_resp_buffer;
|
||||
message_id = __le16_to_cpu(msg->hdr.message_id);
|
||||
credit_count = __le16_to_cpu(msg->ready.credit_count);
|
||||
credit_size = __le16_to_cpu(msg->ready.credit_size);
|
||||
|
||||
if (message_id != ATH10K_HTC_MSG_READY_ID) {
|
||||
ath10k_err(ar, "Invalid HTC ready msg: 0x%x\n", message_id);
|
||||
return -ECOMM;
|
||||
}
|
||||
|
||||
htc->total_transmit_credits = credit_count;
|
||||
htc->target_credit_size = credit_size;
|
||||
htc->total_transmit_credits = __le16_to_cpu(msg->ready.credit_count);
|
||||
htc->target_credit_size = __le16_to_cpu(msg->ready.credit_size);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTC,
|
||||
"Target ready! transmit resources: %d size:%d\n",
|
||||
@@ -646,6 +642,19 @@ int ath10k_htc_wait_target(struct ath10k_htc *htc)
|
||||
return -ECOMM;
|
||||
}
|
||||
|
||||
/* The only way to determine if the ready message is an extended
|
||||
* message is from the size.
|
||||
*/
|
||||
if (htc->control_resp_len >=
|
||||
sizeof(msg->hdr) + sizeof(msg->ready_ext)) {
|
||||
htc->max_msgs_per_htc_bundle =
|
||||
min_t(u8, msg->ready_ext.max_msgs_per_htc_bundle,
|
||||
HTC_HOST_MAX_MSG_PER_BUNDLE);
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTC,
|
||||
"Extended ready message. RX bundle size: %d\n",
|
||||
htc->max_msgs_per_htc_bundle);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -841,6 +850,13 @@ int ath10k_htc_start(struct ath10k_htc *htc)
|
||||
msg->hdr.message_id =
|
||||
__cpu_to_le16(ATH10K_HTC_MSG_SETUP_COMPLETE_EX_ID);
|
||||
|
||||
if (ar->hif.bus == ATH10K_BUS_SDIO) {
|
||||
/* Extra setup params used by SDIO */
|
||||
msg->setup_complete_ext.flags =
|
||||
__cpu_to_le32(ATH10K_HTC_SETUP_COMPLETE_FLAGS_RX_BNDL_EN);
|
||||
msg->setup_complete_ext.max_msgs_per_bundled_recv =
|
||||
htc->max_msgs_per_htc_bundle;
|
||||
}
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTC, "HTC is using TX credit flow control\n");
|
||||
|
||||
status = ath10k_htc_send(htc, ATH10K_HTC_EP_0, skb);
|
||||
|
Reference in New Issue
Block a user