Browse Source

qcacmn: add wildcard search support for peer_hash_find

Add option to ignore vdev_id match to peer hash lookup API
when vdev_id is passed as 0xff to the API, it ignores vdev_id
argument

This option is needed for usecases like peer level statistics
display where only MAC address is known and vdev_id is not known

Also add the missing accounting of rx broadcast frames in the
overall statistics

Change-Id: I9939ac8bf30f6be3d216f9aa28d52560bf445e06
Pamidipati, Vijay 7 years ago
parent
commit
3b0f9169c5
4 changed files with 18 additions and 10 deletions
  1. 5 3
      dp/wifi3.0/dp_internal.h
  2. 8 4
      dp/wifi3.0/dp_main.c
  3. 4 3
      dp/wifi3.0/dp_peer.c
  4. 1 0
      dp/wifi3.0/dp_types.h

+ 5 - 3
dp/wifi3.0/dp_internal.h

@@ -301,19 +301,21 @@ while (0)
 		DP_STATS_AGGR(_tgtobj, _srcobj, rx.non_amsdu_cnt); \
 		DP_STATS_AGGR(_tgtobj, _srcobj, rx.amsdu_cnt); \
 		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.to_stack); \
-		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.bcast);\
 								\
 		for (i = 0; i <  CDP_MAX_RX_RINGS; i++)	\
 			DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.rcvd_reo[i]); \
 									\
 		_srcobj->stats.rx.unicast.num = \
 			_srcobj->stats.rx.to_stack.num - \
-					_srcobj->stats.rx.multicast.num; \
+					(_srcobj->stats.rx.multicast.num +  \
+					_srcobj->stats.rx.bcast.num); \
 		_srcobj->stats.rx.unicast.bytes = \
 			_srcobj->stats.rx.to_stack.bytes - \
-					_srcobj->stats.rx.multicast.bytes; \
+					(_srcobj->stats.rx.multicast.bytes + \
+					_srcobj->stats.rx.bcast.bytes); \
 		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.unicast); \
 		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.multicast); \
+		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.bcast); \
 		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.raw); \
 		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.intra_bss.pkts); \
 		DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.intra_bss.fail); \

+ 8 - 4
dp/wifi3.0/dp_main.c

@@ -4923,9 +4923,11 @@ static void dp_pdev_getstats(struct cdp_pdev *pdev_handle,
 	stats->tx_dropped = stats->tx_errors;
 
 	stats->rx_packets = pdev->stats.rx.unicast.num +
-		pdev->stats.rx.multicast.num;
+		pdev->stats.rx.multicast.num +
+		pdev->stats.rx.bcast.num;
 	stats->rx_bytes = pdev->stats.rx.unicast.bytes +
-		pdev->stats.rx.multicast.bytes;
+		pdev->stats.rx.multicast.bytes +
+		pdev->stats.rx.bcast.bytes;
 }
 
 /**
@@ -5098,9 +5100,11 @@ dp_print_pdev_rx_stats(struct dp_pdev *pdev)
 			pdev->stats.rx.to_stack.bytes);
 	DP_PRINT_STATS("Multicast/Broadcast:");
 	DP_PRINT_STATS("	Packets = %d",
-			pdev->stats.rx.multicast.num);
+			(pdev->stats.rx.multicast.num +
+			pdev->stats.rx.bcast.num));
 	DP_PRINT_STATS("	Bytes = %llu",
-			pdev->stats.rx.multicast.bytes);
+			(pdev->stats.rx.multicast.bytes +
+			pdev->stats.rx.bcast.bytes));
 	DP_PRINT_STATS("Errors:");
 	DP_PRINT_STATS("	Rxdma Ring Un-inititalized = %d",
 			pdev->stats.replenish.rxdma_err);

+ 4 - 3
dp/wifi3.0/dp_peer.c

@@ -714,7 +714,8 @@ struct dp_peer *dp_peer_find_hash_find(struct dp_soc *soc,
 		 * modified find will take care of finding the correct BSS peer.
 		 */
 		if (dp_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) == 0 &&
-			(peer->vdev->vdev_id == vdev_id)) {
+			((peer->vdev->vdev_id == vdev_id) ||
+			 (vdev_id == DP_VDEV_ALL))) {
 #else
 		if (dp_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) == 0) {
 #endif
@@ -1081,7 +1082,7 @@ void *dp_find_peer_by_addr(struct cdp_pdev *dev, uint8_t *peer_mac_addr,
 	struct dp_pdev *pdev = (struct dp_pdev *)dev;
 	struct dp_peer *peer;
 
-	peer = dp_peer_find_hash_find(pdev->soc, peer_mac_addr, 0, 0);
+	peer = dp_peer_find_hash_find(pdev->soc, peer_mac_addr, 0, DP_VDEV_ALL);
 
 	if (!peer)
 		return NULL;
@@ -2041,7 +2042,7 @@ QDF_STATUS dp_peer_state_update(struct cdp_pdev *pdev_handle, uint8_t *peer_mac,
 	struct dp_peer *peer;
 	struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
 
-	peer =  dp_peer_find_hash_find(pdev->soc, peer_mac, 0, 0);
+	peer =  dp_peer_find_hash_find(pdev->soc, peer_mac, 0, DP_VDEV_ALL);
 	if (NULL == peer) {
 		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
 		"Failed to find peer for: [%pM]", peer_mac);

+ 1 - 0
dp/wifi3.0/dp_types.h

@@ -69,6 +69,7 @@
 #define DP_QOS_TID 0x0f
 #define DP_IPV6_PRIORITY_SHIFT 20
 #define MAX_MON_LINK_DESC_BANKS 2
+#define DP_VDEV_ALL 0xff
 
 #if defined(CONFIG_MCL)
 #define MAX_PDEV_CNT 1