summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c14
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.h1
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx_fwd.c26
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx_fwd.h3
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx.h4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx.c1
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx_types.h3
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c4
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c4
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c6
11 files changed, 66 insertions, 1 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index f34097790774..7b41017f447a 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -42,6 +42,7 @@
#include "wma_api.h"
#include "vos_utils.h"
#include "wdi_out.h"
+#include "ol_rx_fwd.h"
#define TLSHIM_PEER_AUTHORIZE_WAIT 50
@@ -2653,3 +2654,16 @@ void WLANTL_clear_datapath_stats(void *vos_ctx, uint16_t bitmap)
wdi_in_clear_stats(pdev, bitmap);
return;
}
+
+/* tlshim_get_fwd_to_tx_packet_count() - to get the total rx packets that have
+ * been directly forwarded to tx without coming to upper layers
+ *
+ * @session_id: session id/vdev id
+ *
+ * Returns: forwarded packet count
+ *
+ */
+uint64_t tlshim_get_fwd_to_tx_packet_count(uint8_t session_id)
+{
+ return ol_rx_get_fwd_to_tx_packet_count(session_id);
+}
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.h b/CORE/CLD_TXRX/TLSHIM/tl_shim.h
index 0fb1f8809653..f34737814d3d 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.h
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.h
@@ -124,6 +124,7 @@ VOS_STATUS tl_shim_get_vdevid(struct ol_txrx_peer_t *peer, u_int8_t *vdev_id);
int tlshim_mgmt_roam_event_ind(void *context, u_int32_t vdev_id);
void *tl_shim_get_vdev_by_addr(void *vos_context, uint8_t *mac_addr);
void *tl_shim_get_vdev_by_sta_id(void *vos_context, uint8_t sta_id);
+uint64_t tlshim_get_fwd_to_tx_packet_count(uint8_t session_id);
#ifdef QCA_SUPPORT_TXRX_VDEV_PAUSE_LL
void tl_shim_set_peer_authorized_event(void *vos_ctx, v_U8_t session_id);
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c
index 7072eef4e780..5b08918f00e3 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c
@@ -42,6 +42,7 @@
#ifdef QCA_ARP_SPOOFING_WAR
#include <ol_if_athvar.h>
#endif
+#include "ol_tx.h"
/*
@@ -233,6 +234,7 @@ ol_rx_fwd_check(
htt_rx_msdu_desc_free(pdev->htt_pdev, msdu);
ol_rx_fwd_to_tx(tx_vdev, msdu);
msdu = NULL; /* already handled this MSDU */
+ vdev->fwd_to_tx_packets++;
TXRX_STATS_ADD(pdev, pub.rx.intra_bss_fwd.packets_fwd,
1);
} else {
@@ -263,3 +265,27 @@ ol_rx_fwd_check(
}
}
}
+
+/* ol_rx_get_fwd_to_tx_packet_count() - to get the total rx packets that has
+ * been forwarded to tx without going to OS layer.
+ *
+ * @vdev_id: vdev id
+ *
+ * Return: forwarded packet count if vdev is valid
+ * 0 if vdev is NULL
+ *
+ */
+uint64_t ol_rx_get_fwd_to_tx_packet_count(uint8_t vdev_id)
+{
+ struct ol_txrx_vdev_t *vdev = NULL;
+
+ vdev = (struct ol_txrx_vdev_t *)ol_txrx_get_vdev_from_vdev_id(vdev_id);
+ if (!vdev) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: vdev is NULL for vdev id %d", __func__, vdev_id);
+ return 0;
+ }
+
+ return vdev->fwd_to_tx_packets;
+}
+
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h
index 928c151625f9..68e71b0350f3 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h
+++ b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h
@@ -80,5 +80,8 @@ ol_rx_fwd_check(
unsigned tid,
adf_nbuf_t msdu_list);
+uint64_t
+ol_rx_get_fwd_to_tx_packet_count(
+ uint8_t vdev_id);
#endif /* _OL_RX_FWD_H_ */
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.h b/CORE/CLD_TXRX/TXRX/ol_tx.h
index ed6e6439c16c..65275eb0ea64 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx.h
+++ b/CORE/CLD_TXRX/TXRX/ol_tx.h
@@ -121,4 +121,8 @@ ol_tx_vdev_ll_pause_start_timer(struct ol_txrx_vdev_t *vdev);
void
ol_tx_pdev_ll_pause_queue_send_all(struct ol_txrx_pdev_t *pdev);
+
+struct ol_txrx_vdev_t *
+ol_txrx_get_vdev_from_vdev_id(uint8_t vdev_id);
+
#endif /* _OL_TX__H_ */
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c
index e70a4e7b3aff..8adb3fc0e1b2 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c
@@ -1036,6 +1036,7 @@ ol_txrx_vdev_attach(
vdev->safemode = 0;
vdev->drop_unenc = 1;
vdev->num_filters = 0;
+ vdev->fwd_to_tx_packets = 0;
#if defined(CONFIG_PER_VDEV_TX_DESC_POOL)
adf_os_atomic_init(&vdev->tx_desc_count);
#endif
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
index 00fb5cf68d83..d76f26c0da49 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
@@ -967,6 +967,9 @@ struct ol_txrx_vdev_t {
/* Default OCB TX parameter */
struct ocb_tx_ctrl_hdr_t *ocb_def_tx_param;
+
+ /* packet count that only forwarded and not dent to OS layer */
+ uint64_t fwd_to_tx_packets;
};
struct ol_rx_reorder_array_elem_t {
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 496bc79c6d72..3971dcf22e9c 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1133,6 +1133,7 @@ struct hdd_adapter_s
#ifdef FEATURE_BUS_BANDWIDTH
unsigned long prev_rx_packets;
unsigned long prev_tx_packets;
+ unsigned long prev_fwd_packets;
unsigned long prev_tx_bytes;
int connection;
#endif
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 95694d88a2d8..571bf14b3a7e 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -70,6 +70,7 @@
#endif
#include <vos_sched.h>
#include <wlan_logging_sock_svc.h>
+#include "tl_shim.h"
struct ether_addr
{
@@ -794,6 +795,8 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo
spin_lock_bh(&pHddCtx->bus_bw_lock);
pAdapter->prev_tx_packets = pAdapter->stats.tx_packets;
pAdapter->prev_rx_packets = pAdapter->stats.rx_packets;
+ pAdapter->prev_fwd_packets =
+ tlshim_get_fwd_to_tx_packet_count(pAdapter->sessionId);
pAdapter->prev_tx_bytes = pAdapter->stats.tx_bytes;
spin_unlock_bh(&pHddCtx->bus_bw_lock);
hdd_start_bus_bw_compute_timer(pAdapter);
@@ -843,6 +846,7 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo
spin_lock_bh(&pHddCtx->bus_bw_lock);
pAdapter->prev_tx_packets = 0;
pAdapter->prev_rx_packets = 0;
+ pAdapter->prev_fwd_packets = 0;
pAdapter->prev_tx_bytes = 0;
spin_unlock_bh(&pHddCtx->bus_bw_lock);
hdd_stop_bus_bw_compute_timer(pAdapter);
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 9e9af4f184b9..b6995887bbf7 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -81,6 +81,7 @@
#include "wlan_hdd_misc.h"
#include <vos_utils.h>
#include "vos_cnss.h"
+#include "tl_shim.h"
#include "wma.h"
#ifdef DEBUG
@@ -1795,6 +1796,8 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
spin_lock_bh(&pHddCtx->bus_bw_lock);
pHostapdAdapter->prev_tx_packets = pHostapdAdapter->stats.tx_packets;
pHostapdAdapter->prev_rx_packets = pHostapdAdapter->stats.rx_packets;
+ pHostapdAdapter->prev_fwd_packets =
+ tlshim_get_fwd_to_tx_packet_count(pHostapdAdapter->sessionId);
pHostapdAdapter->prev_tx_bytes =
pHostapdAdapter->stats.tx_bytes;
spin_unlock_bh(&pHddCtx->bus_bw_lock);
@@ -1980,6 +1983,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
spin_lock_bh(&pHddCtx->bus_bw_lock);
pHostapdAdapter->prev_tx_packets = 0;
pHostapdAdapter->prev_rx_packets = 0;
+ pHostapdAdapter->prev_fwd_packets = 0;
pHostapdAdapter->prev_tx_bytes = 0;
spin_unlock_bh(&pHddCtx->bus_bw_lock);
hdd_stop_bus_bw_compute_timer(pHostapdAdapter);
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index d0adfde36359..9423e3264068 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -13400,7 +13400,7 @@ static void hdd_bus_bw_compute_cbk(void *priv)
{
hdd_context_t *pHddCtx = (hdd_context_t *)priv;
hdd_adapter_t *pAdapter = NULL;
- uint64_t tx_packets= 0, rx_packets= 0, tx_bytes = 0;
+ uint64_t tx_packets = 0, rx_packets = 0, fwd_packets = 0, tx_bytes = 0;
uint64_t total_tx = 0, total_rx = 0;
hdd_adapter_list_node_t *pAdapterNode = NULL;
VOS_STATUS status = 0;
@@ -13447,6 +13447,9 @@ static void hdd_bus_bw_compute_cbk(void *priv)
pAdapter->prev_tx_bytes);
rx_packets += HDD_BW_GET_DIFF(pAdapter->stats.rx_packets,
pAdapter->prev_rx_packets);
+ fwd_packets = tlshim_get_fwd_to_tx_packet_count(pAdapter->sessionId);
+ tx_packets += HDD_BW_GET_DIFF(fwd_packets,
+ pAdapter->prev_fwd_packets);
hdd_set_bundle_require(pAdapter->sessionId, pHddCtx, tx_bytes);
@@ -13458,6 +13461,7 @@ static void hdd_bus_bw_compute_cbk(void *priv)
pAdapter->prev_tx_packets = pAdapter->stats.tx_packets;
pAdapter->prev_tx_bytes = pAdapter->stats.tx_bytes;
pAdapter->prev_rx_packets = pAdapter->stats.rx_packets;
+ pAdapter->prev_fwd_packets = fwd_packets;
spin_unlock_bh(&pHddCtx->bus_bw_lock);
connected = TRUE;
}