소스 검색

qcacmn: Provide SON with per peer qos stats

Providing per peer QoS stats to SON via WDI event

Change-Id: Idd3cfbfec332269fdc8ad0ef273674e81d6ee92f
Neha Bisht 4 년 전
부모
커밋
8ae1b8a9e3
6개의 변경된 파일75개의 추가작업 그리고 30개의 파일을 삭제
  1. 6 2
      dp/inc/cdp_txrx_cmn_struct.h
  2. 18 0
      dp/inc/cdp_txrx_stats_struct.h
  3. 7 0
      dp/wifi3.0/dp_internal.h
  4. 7 0
      dp/wifi3.0/dp_rx_mon_status.c
  5. 27 0
      dp/wifi3.0/dp_stats.c
  6. 10 28
      hal/wifi3.0/hal_generic_api.h

+ 6 - 2
dp/inc/cdp_txrx_cmn_struct.h

@@ -2039,17 +2039,19 @@ struct cdp_tx_completion_msdu {
  * @other_msdu_count: Number of MSDUs other than UDP and TCP MSDUs in PPDU
  * @frame_control: frame control field
  * @frame_control_info_valid: frame_control valid
+ * @qos_control: qos control field
+ * @qos_control_info_valid: qos_control valid
  * @data_sequence_control_info_valid: data_sequence_control_info valid
  * @first_data_seq_ctrl: Sequence control field of first data frame
  * @preamble: preamble
  * @ht_flag: ht flag
  * @vht_flag: vht flag
  * @he_re: he_re (range extension)
+ * @mac_addr: Peer MAC Address
  * @mpdu_cnt_fcs_ok: Number of MPDUs in PPDU with fcs ok
  * @mpdu_cnt_fcs_err: Number of MPDUs in PPDU with fcs err
  * @mpdu_fcs_ok_bitmap - MPDU with fcs ok bitmap
  * @retried - number of retries
- * @mac_addr: Peer MAC Address
  */
 struct cdp_rx_stats_ppdu_user {
 	uint16_t peer_id;
@@ -2070,19 +2072,21 @@ struct cdp_rx_stats_ppdu_user {
 	uint16_t  other_msdu_count;
 	uint16_t frame_control;
 	uint8_t  frame_control_info_valid;
+	uint16_t qos_control;
+	uint8_t  qos_control_info_valid;
 	uint8_t data_sequence_control_info_valid;
 	uint16_t first_data_seq_ctrl;
 	uint32_t preamble_type;
 	uint16_t ht_flags;
 	uint16_t vht_flags;
 	uint16_t he_flags;
+	uint8_t  mac_addr[QDF_MAC_ADDR_SIZE];
 	uint32_t mpdu_cnt_fcs_ok;
 	uint32_t mpdu_cnt_fcs_err;
 	uint32_t mpdu_fcs_ok_bitmap[QDF_MON_STATUS_MPDU_FCS_BMAP_NWORDS];
 	uint32_t mpdu_ok_byte_count;
 	uint32_t mpdu_err_byte_count;
 	uint32_t retries;
-	uint8_t  mac_addr[QDF_MAC_ADDR_SIZE];
 };
 
 /**

+ 18 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -360,6 +360,7 @@ enum WDI_EVENT {
 	WDI_EVENT_FLUSH_RATE_STATS_REQ,
 	WDI_EVENT_RX_MPDU,
 	WDI_EVENT_HMWDS_AST_ADD_STATUS,
+	WDI_EVENT_PEER_QOS_STATS,
 	/* End of new event items */
 	WDI_EVENT_LAST
 };
@@ -1317,6 +1318,23 @@ struct cdp_interface_peer_stats {
 	uint32_t ack_rssi;
 };
 
+/* struct cdp_interface_peer_qos_stats - interface structure for peer qos stats
+ * @peer_mac: peer mac address
+ * @frame_control: frame control field
+ * @qos_control: qos control field
+ * @frame_control_info_valid: frame_control valid
+ * @qos_control_info_valid: qos_control valid
+ * @vdev_id : vdev_id for the peer
+ */
+struct cdp_interface_peer_qos_stats {
+	uint8_t  peer_mac[QDF_MAC_ADDR_SIZE];
+	uint16_t frame_control;
+	uint16_t qos_control;
+	uint8_t  frame_control_info_valid;
+	uint8_t  qos_control_info_valid;
+	uint8_t  vdev_id;
+};
+
 /* Tx completions per interrupt */
 struct cdp_hist_tx_comp {
 	uint32_t pkts_1;

+ 7 - 0
dp/wifi3.0/dp_internal.h

@@ -1646,6 +1646,8 @@ dp_hif_update_pipe_callback(struct dp_soc *dp_soc,
 
 QDF_STATUS dp_peer_stats_notify(struct dp_pdev *pdev, struct dp_peer *peer);
 
+QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
+				    struct cdp_rx_stats_ppdu_user *ppdu_user);
 #else
 static inline int dp_wdi_event_unsub(struct cdp_soc_t *soc, uint8_t pdev_id,
 				     wdi_event_subscribe *event_cb_sub_handle,
@@ -1708,6 +1710,11 @@ static inline QDF_STATUS dp_peer_stats_notify(struct dp_pdev *pdev,
 	return QDF_STATUS_SUCCESS;
 }
 
+QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
+				    struct cdp_rx_stats_ppdu_user *ppdu_user)
+{
+	return QDF_STATUS_SUCCESS;
+}
 #endif /* CONFIG_WIN */
 
 #ifdef VDEV_PEER_PROTOCOL_COUNT

+ 7 - 0
dp/wifi3.0/dp_rx_mon_status.c

@@ -200,6 +200,7 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev,
 	uint32_t ast_index;
 	int i;
 	struct mon_rx_user_status *rx_user_status;
+	struct mon_rx_user_info *rx_user_info;
 	struct cdp_rx_stats_ppdu_user *rx_stats_peruser;
 	int ru_size;
 	bool is_data = false;
@@ -211,6 +212,7 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev,
 			return;
 
 		rx_user_status =  &ppdu_info->rx_user_status[i];
+		rx_user_info = &ppdu_info->rx_user_info[i];
 		rx_stats_peruser = &cdp_rx_ppdu->user[i];
 
 		ast_index = rx_user_status->ast_index;
@@ -240,6 +242,10 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev,
 		rx_stats_peruser->frame_control =
 			rx_user_status->frame_control;
 
+		rx_stats_peruser->qos_control_info_valid =
+			rx_user_info->qos_control_info_valid;
+		rx_stats_peruser->qos_control =
+			rx_user_info->qos_control;
 		rx_stats_peruser->tcp_msdu_count =
 			rx_user_status->tcp_msdu_count;
 		rx_stats_peruser->udp_msdu_count =
@@ -696,6 +702,7 @@ static void dp_rx_stats_update(struct dp_pdev *pdev,
 		dp_peer_stats_notify(pdev, peer);
 		DP_STATS_UPD(peer, rx.last_rssi, ppdu->rssi);
 
+		dp_peer_qos_stats_notify(pdev, ppdu_user);
 		if (peer == pdev->invalid_peer)
 			continue;
 

+ 27 - 0
dp/wifi3.0/dp_stats.c

@@ -4394,6 +4394,33 @@ QDF_STATUS dp_peer_stats_notify(struct dp_pdev *dp_pdev, struct dp_peer *peer)
 
 	return QDF_STATUS_SUCCESS;
 }
+
+QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
+				    struct cdp_rx_stats_ppdu_user *ppdu_user)
+{
+	struct cdp_interface_peer_qos_stats qos_stats_intf;
+
+	if (ppdu_user->peer_id == HTT_INVALID_PEER) {
+		qdf_err("Invalid peer id");
+		return QDF_STATUS_E_FAILURE;
+	}
+	qdf_mem_zero(&qos_stats_intf, sizeof(qos_stats_intf));
+
+	qdf_mem_copy(qos_stats_intf.peer_mac, ppdu_user->mac_addr,
+		     QDF_MAC_ADDR_SIZE);
+	qos_stats_intf.frame_control = ppdu_user->frame_control;
+	qos_stats_intf.frame_control_info_valid =
+			ppdu_user->frame_control_info_valid;
+	qos_stats_intf.qos_control = ppdu_user->qos_control;
+	qos_stats_intf.qos_control_info_valid =
+			ppdu_user->qos_control_info_valid;
+	qos_stats_intf.vdev_id = ppdu_user->vdev_id;
+	dp_wdi_event_handler(WDI_EVENT_PEER_QOS_STATS, dp_pdev->soc,
+			     (void *)&qos_stats_intf, 0,
+			     WDI_NO_VAL, dp_pdev->pdev_id);
+
+	return QDF_STATUS_SUCCESS;
+}
 #endif
 
 #ifdef QCA_ENH_V3_STATS_SUPPORT

+ 10 - 28
hal/wifi3.0/hal_generic_api.h

@@ -270,12 +270,20 @@ hal_rx_populate_byte_count(void *rx_tlv, void *ppduinfo,
 #endif
 
 static inline void
-hal_rx_populate_mu_user_info(void *rx_tlv, void *ppduinfo,
+hal_rx_populate_mu_user_info(void *rx_tlv, void *ppduinfo, uint32_t user_id,
 			     struct mon_rx_user_status *mon_rx_user_status)
 {
+	struct mon_rx_info *mon_rx_info;
+	struct mon_rx_user_info *mon_rx_user_info;
 	struct hal_rx_ppdu_info *ppdu_info =
 			(struct hal_rx_ppdu_info *)ppduinfo;
 
+	mon_rx_info = &ppdu_info->rx_info;
+	mon_rx_user_info = &ppdu_info->rx_user_info[user_id];
+	mon_rx_user_info->qos_control_info_valid =
+		mon_rx_info->qos_control_info_valid;
+	mon_rx_user_info->qos_control =  mon_rx_info->qos_control;
+
 	mon_rx_user_status->ast_index = ppdu_info->rx_status.ast_index;
 	mon_rx_user_status->tid = ppdu_info->rx_status.tid;
 	mon_rx_user_status->tcp_msdu_count =
@@ -310,30 +318,6 @@ hal_rx_populate_mu_user_info(void *rx_tlv, void *ppduinfo,
 	hal_rx_populate_byte_count(rx_tlv, ppdu_info, mon_rx_user_status);
 }
 
-#ifdef WLAN_TX_PKT_CAPTURE_ENH
-static inline void
-hal_rx_populate_tx_capture_user_info(void *ppduinfo,
-				     uint32_t user_id)
-{
-	struct hal_rx_ppdu_info *ppdu_info;
-	struct mon_rx_info *mon_rx_info;
-	struct mon_rx_user_info *mon_rx_user_info;
-
-	ppdu_info = (struct hal_rx_ppdu_info *)ppduinfo;
-	mon_rx_info = &ppdu_info->rx_info;
-	mon_rx_user_info = &ppdu_info->rx_user_info[user_id];
-	mon_rx_user_info->qos_control_info_valid =
-		mon_rx_info->qos_control_info_valid;
-	mon_rx_user_info->qos_control =  mon_rx_info->qos_control;
-}
-#else
-static inline void
-hal_rx_populate_tx_capture_user_info(void *ppduinfo,
-				     uint32_t user_id)
-{
-}
-#endif
-
 #define HAL_RX_UPDATE_RSSI_PER_CHAIN_BW(chain, word_1, word_2, \
 					ppdu_info, rssi_info_tlv) \
 	{						\
@@ -740,11 +724,9 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
 			ppdu_info->com_info.num_users++;
 
 			hal_rx_populate_mu_user_info(rx_tlv, ppdu_info,
+						     user_id,
 						     mon_rx_user_status);
 
-			hal_rx_populate_tx_capture_user_info(ppdu_info,
-							     user_id);
-
 		}
 		break;
 	}