mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
qcacmn: Handle TLV received asynchronously from Firmware
When TLVs come from TAC_thread last tlv sent by FW is HTT_PPDU_STATS_SCH_CMD_STATUS_TLV and in Tqm thread HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV is the last TLV to be sent. HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV though can come either in tqm thread or tac thread based on tid type. Add change to process HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV when it comes from tqm thread and pass the populated buffer to the appropriate APIs Change-Id: I7a064aba4e3c6814b63dcf4bb97cfb3be0194c39 CRs-Fixed: 2180477
This commit is contained in:
parent
2072557943
commit
1df9464a4d
3 changed files with 10 additions and 4 deletions
|
|
@ -103,6 +103,7 @@
|
|||
#define CDP_MU_MAX_USERS 8
|
||||
#define CDP_MU_MAX_USER_INDEX (CDP_MU_MAX_USERS - 1)
|
||||
|
||||
#define CDP_DATA_TID_MAX 8
|
||||
/*
|
||||
* advance rx monitor filter
|
||||
* */
|
||||
|
|
|
|||
|
|
@ -2249,6 +2249,10 @@ static QDF_STATUS dp_htt_process_tlv(struct dp_pdev *pdev,
|
|||
if (tlv_type == HTT_PPDU_STATS_SCH_CMD_STATUS_TLV)
|
||||
status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((tlv_type == HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV) &&
|
||||
(pdev->last_ppdu_id != ppdu_id))
|
||||
status = QDF_STATUS_SUCCESS;
|
||||
|
||||
tlv_length += HTT_TLV_HDR_LEN;
|
||||
dp_process_ppdu_tag(pdev, msg_word, tlv_length);
|
||||
|
||||
|
|
@ -2256,6 +2260,7 @@ static QDF_STATUS dp_htt_process_tlv(struct dp_pdev *pdev,
|
|||
msg_word = (uint32_t *)((uint8_t *)tlv_buf + tlv_length);
|
||||
length -= (tlv_length);
|
||||
}
|
||||
pdev->last_ppdu_id = ppdu_id;
|
||||
return status;
|
||||
}
|
||||
#endif /* FEATURE_PERPKT_INFO */
|
||||
|
|
@ -2274,7 +2279,6 @@ static void dp_txrx_ppdu_stats_handler(struct dp_soc *soc,
|
|||
uint8_t pdev_id, qdf_nbuf_t htt_t2h_msg)
|
||||
{
|
||||
struct dp_pdev *pdev = soc->pdev_list[pdev_id];
|
||||
struct dp_vdev *vdev;
|
||||
struct dp_peer *peer;
|
||||
struct cdp_tx_completion_ppdu *ppdu_desc;
|
||||
int status;
|
||||
|
|
@ -2321,8 +2325,7 @@ static void dp_txrx_ppdu_stats_handler(struct dp_soc *soc,
|
|||
ppdu_desc = (struct cdp_tx_completion_ppdu *)
|
||||
qdf_nbuf_data(pdev->tx_ppdu_info.buf);
|
||||
|
||||
vdev = dp_get_vdev_from_soc_vdev_id_wifi3(soc,
|
||||
ppdu_desc->vdev_id);
|
||||
ppdu_desc->num_users = pdev->tx_ppdu_info.last_user;
|
||||
|
||||
for (i = 0; i < ppdu_desc->num_users; i++) {
|
||||
peer = dp_peer_find_by_id(soc,
|
||||
|
|
@ -2333,7 +2336,7 @@ static void dp_txrx_ppdu_stats_handler(struct dp_soc *soc,
|
|||
ppdu_desc->num_mpdu += ppdu_desc->user[i].num_mpdu;
|
||||
ppdu_desc->num_msdu += ppdu_desc->user[i].num_msdu;
|
||||
|
||||
if (ppdu_desc->frame_type == CDP_PPDU_FTYPE_DATA) {
|
||||
if (ppdu_desc->user[i].tid < CDP_DATA_TID_MAX) {
|
||||
dp_tx_stats_update(soc, peer,
|
||||
&ppdu_desc->user[i],
|
||||
ppdu_desc->ack_rssi);
|
||||
|
|
|
|||
|
|
@ -1087,6 +1087,8 @@ struct dp_pdev {
|
|||
/* WDI event handlers */
|
||||
struct wdi_event_subscribe_t **wdi_event_list;
|
||||
|
||||
/* ppdu_id of last received HTT TX stats */
|
||||
uint32_t last_ppdu_id;
|
||||
struct {
|
||||
uint8_t last_user;
|
||||
qdf_nbuf_t buf;
|
||||
|
|
|
|||
Loading…
Reference in a new issue