Loading dp/inc/cdp_txrx_mob_def.h +9 −3 Original line number Diff line number Diff line /* * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -104,8 +105,9 @@ enum netif_action_type { WLAN_NETIF_VI_QUEUE_ON = 14, WLAN_NETIF_VI_QUEUE_OFF = 15, WLAN_NETIF_BE_BK_QUEUE_OFF = 16, WLAN_WAKE_NON_PRIORITY_QUEUE = 17, WLAN_STOP_NON_PRIORITY_QUEUE = 18, WLAN_NETIF_BE_BK_QUEUE_ON = 17, WLAN_WAKE_NON_PRIORITY_QUEUE = 18, WLAN_STOP_NON_PRIORITY_QUEUE = 19, WLAN_NETIF_ACTION_TYPE_MAX, }; Loading @@ -128,6 +130,10 @@ enum netif_reason_type { WLAN_PEER_UNAUTHORISED, WLAN_THERMAL_MITIGATION, WLAN_DATA_FLOW_CONTROL_PRIORITY, WLAN_DATA_FLOW_CTRL_BE_BK, WLAN_DATA_FLOW_CTRL_VI, WLAN_DATA_FLOW_CTRL_VO, WLAN_DATA_FLOW_CTRL_PRI, WLAN_REASON_TYPE_MAX, }; Loading dp/inc/cdp_txrx_stats_struct.h +2 −0 Original line number Diff line number Diff line Loading @@ -1024,6 +1024,8 @@ struct cdp_tx_stats { uint32_t num_ppdu_cookie_valid; uint32_t no_ack_count[QDF_PROTO_SUBTYPE_MAX]; struct cdp_pkt_info tx_success_twt; /* mpdu retry count in case of successful transmission */ uint32_t mpdu_success_with_retries; }; /* struct cdp_rx_stats - rx Level Stats Loading dp/wifi3.0/dp_internal.h +2 −0 Original line number Diff line number Diff line Loading @@ -871,6 +871,8 @@ static inline void dp_update_vdev_stats(struct dp_soc *soc, tgtobj->tx.dropped.fw_reason3 += srcobj->stats.tx.dropped.fw_reason3; tgtobj->tx.dropped.age_out += srcobj->stats.tx.dropped.age_out; tgtobj->tx.mpdu_success_with_retries += srcobj->stats.tx.mpdu_success_with_retries; tgtobj->rx.err.mic_err += srcobj->stats.rx.err.mic_err; if (srcobj->stats.rx.rssi != 0) tgtobj->rx.rssi = srcobj->stats.rx.rssi; Loading dp/wifi3.0/dp_main.c +2 −1 Original line number Diff line number Diff line Loading @@ -5787,7 +5787,8 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc, dp_vdev_pdev_list_add(soc, pdev, vdev); pdev->vdev_count++; if (wlan_op_mode_sta != vdev->opmode) if (wlan_op_mode_sta != vdev->opmode && wlan_op_mode_ndi != vdev->opmode) vdev->ap_bridge_enabled = true; else vdev->ap_bridge_enabled = false; Loading dp/wifi3.0/dp_rx_defrag.c +15 −6 Original line number Diff line number Diff line Loading @@ -1760,9 +1760,6 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, goto discard_frag; } pdev = peer->vdev->pdev; rx_tid = &peer->rx_tid[tid]; mpdu_sequence_control_valid = hal_rx_get_mpdu_sequence_control_valid(soc->hal_soc, rx_desc->rx_buf_start); Loading Loading @@ -1797,10 +1794,15 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, */ fragno = dp_rx_frag_get_mpdu_frag_number(rx_desc->rx_buf_start); pdev = peer->vdev->pdev; rx_tid = &peer->rx_tid[tid]; qdf_spin_lock_bh(&rx_tid->tid_lock); rx_reorder_array_elem = peer->rx_tid[tid].array; if (!rx_reorder_array_elem) { dp_err_rl("Rcvd Fragmented pkt before tid setup for peer %pK", peer); qdf_spin_unlock_bh(&rx_tid->tid_lock); goto discard_frag; } Loading @@ -1818,6 +1820,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, "Rcvd unfragmented pkt on REO Err srng, dropping"); qdf_spin_unlock_bh(&rx_tid->tid_lock); qdf_assert(0); goto discard_frag; } Loading Loading @@ -1845,6 +1848,13 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, rx_tid->curr_seq_num = rxseq; } } else { /* Check if we are processing first fragment if it is * not first fragment discard fragment. */ if (fragno) { qdf_spin_unlock_bh(&rx_tid->tid_lock); goto discard_frag; } dp_debug("cur rxseq %d\n", rxseq); /* Start of a new sequence */ dp_rx_defrag_cleanup(peer, tid); Loading @@ -1856,11 +1866,9 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, * If the earlier sequence was dropped, this will be the fresh start. * Else, continue with next fragment in a given sequence */ qdf_spin_lock_bh(&rx_tid->tid_lock); status = dp_rx_defrag_fraglist_insert(peer, tid, &rx_reorder_array_elem->head, &rx_reorder_array_elem->tail, frag, &all_frag_present); qdf_spin_unlock_bh(&rx_tid->tid_lock); /* * Currently, we can have only 6 MSDUs per-MPDU, if the current Loading @@ -1878,6 +1886,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, if (status != QDF_STATUS_SUCCESS) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, "%s: Unable to store ring desc !", __func__); qdf_spin_unlock_bh(&rx_tid->tid_lock); goto discard_frag; } } else { Loading Loading @@ -1906,6 +1915,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, dp_rx_defrag_waitlist_add(peer, tid); dp_peer_unref_delete(peer, DP_MOD_ID_RX_ERR); qdf_spin_unlock_bh(&rx_tid->tid_lock); return QDF_STATUS_SUCCESS; } Loading @@ -1914,7 +1924,6 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, "All fragments received for sequence: %d", rxseq); /* Process the fragments */ qdf_spin_lock_bh(&rx_tid->tid_lock); status = dp_rx_defrag(peer, tid, rx_reorder_array_elem->head, rx_reorder_array_elem->tail); if (QDF_IS_STATUS_ERROR(status)) { Loading Loading
dp/inc/cdp_txrx_mob_def.h +9 −3 Original line number Diff line number Diff line /* * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -104,8 +105,9 @@ enum netif_action_type { WLAN_NETIF_VI_QUEUE_ON = 14, WLAN_NETIF_VI_QUEUE_OFF = 15, WLAN_NETIF_BE_BK_QUEUE_OFF = 16, WLAN_WAKE_NON_PRIORITY_QUEUE = 17, WLAN_STOP_NON_PRIORITY_QUEUE = 18, WLAN_NETIF_BE_BK_QUEUE_ON = 17, WLAN_WAKE_NON_PRIORITY_QUEUE = 18, WLAN_STOP_NON_PRIORITY_QUEUE = 19, WLAN_NETIF_ACTION_TYPE_MAX, }; Loading @@ -128,6 +130,10 @@ enum netif_reason_type { WLAN_PEER_UNAUTHORISED, WLAN_THERMAL_MITIGATION, WLAN_DATA_FLOW_CONTROL_PRIORITY, WLAN_DATA_FLOW_CTRL_BE_BK, WLAN_DATA_FLOW_CTRL_VI, WLAN_DATA_FLOW_CTRL_VO, WLAN_DATA_FLOW_CTRL_PRI, WLAN_REASON_TYPE_MAX, }; Loading
dp/inc/cdp_txrx_stats_struct.h +2 −0 Original line number Diff line number Diff line Loading @@ -1024,6 +1024,8 @@ struct cdp_tx_stats { uint32_t num_ppdu_cookie_valid; uint32_t no_ack_count[QDF_PROTO_SUBTYPE_MAX]; struct cdp_pkt_info tx_success_twt; /* mpdu retry count in case of successful transmission */ uint32_t mpdu_success_with_retries; }; /* struct cdp_rx_stats - rx Level Stats Loading
dp/wifi3.0/dp_internal.h +2 −0 Original line number Diff line number Diff line Loading @@ -871,6 +871,8 @@ static inline void dp_update_vdev_stats(struct dp_soc *soc, tgtobj->tx.dropped.fw_reason3 += srcobj->stats.tx.dropped.fw_reason3; tgtobj->tx.dropped.age_out += srcobj->stats.tx.dropped.age_out; tgtobj->tx.mpdu_success_with_retries += srcobj->stats.tx.mpdu_success_with_retries; tgtobj->rx.err.mic_err += srcobj->stats.rx.err.mic_err; if (srcobj->stats.rx.rssi != 0) tgtobj->rx.rssi = srcobj->stats.rx.rssi; Loading
dp/wifi3.0/dp_main.c +2 −1 Original line number Diff line number Diff line Loading @@ -5787,7 +5787,8 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc, dp_vdev_pdev_list_add(soc, pdev, vdev); pdev->vdev_count++; if (wlan_op_mode_sta != vdev->opmode) if (wlan_op_mode_sta != vdev->opmode && wlan_op_mode_ndi != vdev->opmode) vdev->ap_bridge_enabled = true; else vdev->ap_bridge_enabled = false; Loading
dp/wifi3.0/dp_rx_defrag.c +15 −6 Original line number Diff line number Diff line Loading @@ -1760,9 +1760,6 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, goto discard_frag; } pdev = peer->vdev->pdev; rx_tid = &peer->rx_tid[tid]; mpdu_sequence_control_valid = hal_rx_get_mpdu_sequence_control_valid(soc->hal_soc, rx_desc->rx_buf_start); Loading Loading @@ -1797,10 +1794,15 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, */ fragno = dp_rx_frag_get_mpdu_frag_number(rx_desc->rx_buf_start); pdev = peer->vdev->pdev; rx_tid = &peer->rx_tid[tid]; qdf_spin_lock_bh(&rx_tid->tid_lock); rx_reorder_array_elem = peer->rx_tid[tid].array; if (!rx_reorder_array_elem) { dp_err_rl("Rcvd Fragmented pkt before tid setup for peer %pK", peer); qdf_spin_unlock_bh(&rx_tid->tid_lock); goto discard_frag; } Loading @@ -1818,6 +1820,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, "Rcvd unfragmented pkt on REO Err srng, dropping"); qdf_spin_unlock_bh(&rx_tid->tid_lock); qdf_assert(0); goto discard_frag; } Loading Loading @@ -1845,6 +1848,13 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, rx_tid->curr_seq_num = rxseq; } } else { /* Check if we are processing first fragment if it is * not first fragment discard fragment. */ if (fragno) { qdf_spin_unlock_bh(&rx_tid->tid_lock); goto discard_frag; } dp_debug("cur rxseq %d\n", rxseq); /* Start of a new sequence */ dp_rx_defrag_cleanup(peer, tid); Loading @@ -1856,11 +1866,9 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, * If the earlier sequence was dropped, this will be the fresh start. * Else, continue with next fragment in a given sequence */ qdf_spin_lock_bh(&rx_tid->tid_lock); status = dp_rx_defrag_fraglist_insert(peer, tid, &rx_reorder_array_elem->head, &rx_reorder_array_elem->tail, frag, &all_frag_present); qdf_spin_unlock_bh(&rx_tid->tid_lock); /* * Currently, we can have only 6 MSDUs per-MPDU, if the current Loading @@ -1878,6 +1886,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, if (status != QDF_STATUS_SUCCESS) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, "%s: Unable to store ring desc !", __func__); qdf_spin_unlock_bh(&rx_tid->tid_lock); goto discard_frag; } } else { Loading Loading @@ -1906,6 +1915,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, dp_rx_defrag_waitlist_add(peer, tid); dp_peer_unref_delete(peer, DP_MOD_ID_RX_ERR); qdf_spin_unlock_bh(&rx_tid->tid_lock); return QDF_STATUS_SUCCESS; } Loading @@ -1914,7 +1924,6 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, "All fragments received for sequence: %d", rxseq); /* Process the fragments */ qdf_spin_lock_bh(&rx_tid->tid_lock); status = dp_rx_defrag(peer, tid, rx_reorder_array_elem->head, rx_reorder_array_elem->tail); if (QDF_IS_STATUS_ERROR(status)) { Loading