From 242339083bbef84f4b2f0bf96743c5a58ce0cfd1 Mon Sep 17 00:00:00 2001 From: Jinwei Chen Date: Fri, 3 Jun 2022 18:24:41 -0700 Subject: [PATCH] qcacmn: support new htt rx addba and delba msg Add support for new HTT_T2H_MSG_TYPE_RX_ADDBA_EXTN and HTT_T2H_MSG_TYPE_RX_DELBA_EXTN handling. Change-Id: Ie06891092e5bf552bf721404222fb1b0b624ba36 CRs-Fixed: 3208118 --- dp/wifi3.0/dp_htt.c | 96 +++++++++++++++++++++++++++++++++------------ 1 file changed, 71 insertions(+), 25 deletions(-) diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 24b789ac9d..b3f1498bf8 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -3126,6 +3126,40 @@ dp_rx_mlo_timestamp_ind_handler(void *soc_handle, } #endif +/* + * dp_htt_rx_addba_handler() - RX Addba HTT msg handler + * @soc: DP Soc handler + * @peer_id: ID of peer + * @tid: TID number + * @win_sz: BA window size + * + * Return: None + */ +static void +dp_htt_rx_addba_handler(struct dp_soc *soc, uint16_t peer_id, + uint8_t tid, uint16_t win_sz) +{ + uint16_t status; + struct dp_peer *peer; + + peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_HTT); + + if (!peer) { + dp_err("Peer not found peer id %d", peer_id); + return; + } + + status = dp_addba_requestprocess_wifi3((struct cdp_soc_t *)soc, + peer->mac_addr.raw, + peer->vdev->vdev_id, 0, + tid, 0, win_sz, 0xffff); + + dp_info("PeerID %d BAW %d TID %d stat %d", + peer_id, win_sz, tid, status); + + dp_peer_unref_delete(peer, DP_MOD_ID_HTT); +} + /* * dp_htt_t2h_msg_handler() - Generic Target to host Msg/event handler * @context: Opaque context (HTT SOC handle) @@ -3280,9 +3314,7 @@ static void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) { uint16_t peer_id; uint8_t tid; - uint8_t win_sz; - uint16_t status; - struct dp_peer *peer; + uint16_t win_sz; /* * Update REO Queue Desc with new values @@ -3290,37 +3322,30 @@ static void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) peer_id = HTT_RX_ADDBA_PEER_ID_GET(*msg_word); tid = HTT_RX_ADDBA_TID_GET(*msg_word); win_sz = HTT_RX_ADDBA_WIN_SIZE_GET(*msg_word); - peer = dp_peer_get_ref_by_id(soc->dp_soc, peer_id, - DP_MOD_ID_HTT); /* * Window size needs to be incremented by 1 * since fw needs to represent a value of 256 * using just 8 bits */ - if (peer) { - status = dp_addba_requestprocess_wifi3( - (struct cdp_soc_t *)soc->dp_soc, - peer->mac_addr.raw, peer->vdev->vdev_id, - 0, tid, 0, win_sz + 1, 0xffff); + dp_htt_rx_addba_handler(soc->dp_soc, peer_id, + tid, win_sz + 1); + break; + } + case HTT_T2H_MSG_TYPE_RX_ADDBA_EXTN: + { + uint16_t peer_id; + uint8_t tid; + uint16_t win_sz; - /* - * If PEER_LOCK_REF_PROTECT enbled dec ref - * which is inc by dp_peer_get_ref_by_id - */ - dp_peer_unref_delete(peer, DP_MOD_ID_HTT); + peer_id = HTT_RX_ADDBA_EXTN_PEER_ID_GET(*msg_word); + tid = HTT_RX_ADDBA_EXTN_TID_GET(*msg_word); - QDF_TRACE(QDF_MODULE_ID_TXRX, - QDF_TRACE_LEVEL_INFO, - FL("PeerID %d BAW %d TID %d stat %d"), - peer_id, win_sz, tid, status); + msg_word++; + win_sz = HTT_RX_ADDBA_EXTN_WIN_SIZE_GET(*msg_word); - } else { - QDF_TRACE(QDF_MODULE_ID_TXRX, - QDF_TRACE_LEVEL_ERROR, - FL("Peer not found peer id %d"), - peer_id); - } + dp_htt_rx_addba_handler(soc->dp_soc, peer_id, + tid, win_sz); break; } case HTT_T2H_MSG_TYPE_EXT_STATS_CONF: @@ -3468,6 +3493,27 @@ static void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) peer_id, win_sz, tid, status); break; } + case HTT_T2H_MSG_TYPE_RX_DELBA_EXTN: + { + uint16_t peer_id; + uint8_t tid; + uint16_t win_sz; + QDF_STATUS status; + + peer_id = HTT_RX_DELBA_EXTN_PEER_ID_GET(*msg_word); + tid = HTT_RX_DELBA_EXTN_TID_GET(*msg_word); + + msg_word++; + win_sz = HTT_RX_DELBA_EXTN_WIN_SIZE_GET(*msg_word); + + status = dp_rx_delba_ind_handler(soc->dp_soc, + peer_id, tid, + win_sz); + + dp_info("DELBA PeerID %d BAW %d TID %d stat %d", + peer_id, win_sz, tid, status); + break; + } case HTT_T2H_MSG_TYPE_FSE_CMEM_BASE_SEND: { uint16_t num_entries;