diff options
| -rw-r--r-- | CORE/CLD_TXRX/TLSHIM/tl_shim.c | 14 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TLSHIM/tl_shim.h | 1 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_rx_fwd.c | 26 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_rx_fwd.h | 3 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_tx.h | 4 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_txrx.c | 1 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_txrx_types.h | 3 | ||||
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 1 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_assoc.c | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 6 |
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; } |
