Prechádzať zdrojové kódy

qcacmn: Enhance congestion report

Enhance congestion report by pdev extend stats.

Change-Id: I88e8456fa1e2cbe4f3aa8e94138dafba1166c9a9
CRs-Fixed: 2951006
Paul Zhang 4 rokov pred
rodič
commit
dfb517c3f8

+ 13 - 0
wmi/inc/wmi_unified_param.h

@@ -895,6 +895,7 @@ typedef enum {
 	WMI_HOST_REQUEST_PEER_ADV_STATS = 0x4000,
 	WMI_HOST_REQUEST_PMF_BCN_PROTECT_STAT = 0x8000,
 	WMI_HOST_REQUEST_VDEV_PRB_FILS_STAT = 0x10000,
+	WMI_HOST_REQUEST_PDEV_EXTD_STAT = 0x20000,
 	WMI_HOST_REQUEST_PDEV_TELEMETRY_STAT = 0x40000,
 } wmi_host_stats_id;
 
@@ -4216,6 +4217,14 @@ struct wmi_host_peer_adv_stats {
  * @rx_mcs: RX MCS array
  * @tx_mcs: TX MCS array
  * @ack_rssi: Ack rssi
+ * @my_rx_count: What portion of time, as measured by the MAC HW clock was
+ *               occupied by receiving PPDUs addressed to one of the vdevs
+ *               within this pdev.
+ * @rx_matched_11ax_msdu_cnt: number of Rx 11ax MSDUs with matching BSS color
+ *                            counter updated at EOP (end of packet)
+ * @rx_other_11ax_msdu_cnt: number of Rx 11ax MSDUs with other BSS color counter
+ *                          updated at EOP (end of packet)
+ * @pdev_id: pdev id
  */
 typedef struct {
 	uint32_t	rx_rssi_comb;
@@ -4226,6 +4235,10 @@ typedef struct {
 	uint32_t	rx_mcs[10];
 	uint32_t	tx_mcs[10];
 	uint32_t	ack_rssi;
+	uint32_t	my_rx_count;
+	uint32_t	rx_matched_11ax_msdu_cnt;
+	uint32_t	rx_other_11ax_msdu_cnt;
+	uint32_t	pdev_id;
 } wmi_host_pdev_ext_stats;
 
 /**

+ 8 - 2
wmi/src/wmi_unified_cp_stats_tlv.c

@@ -641,6 +641,12 @@ extract_all_stats_counts_tlv(wmi_unified_t wmi_handle, void *evt_buf,
 			stats_param->stats_id |=
 				WMI_HOST_REQUEST_VDEV_PRB_FILS_STAT;
 			break;
+
+		case WMI_REQUEST_PDEV_EXTD_STAT:
+			stats_param->stats_id |=
+				WMI_HOST_REQUEST_PDEV_EXTD_STAT;
+			break;
+
 		case WMI_REQUEST_PDEV_TELEMETRY_STAT:
 			stats_param->stats_id |=
 				WMI_HOST_REQUEST_PDEV_TELEMETRY_STAT;
@@ -672,7 +678,7 @@ extract_all_stats_counts_tlv(wmi_unified_t wmi_handle, void *evt_buf,
 
 	stats_param->last_event = ev->last_event;
 	stats_param->num_pdev_stats = ev->num_pdev_stats;
-	stats_param->num_pdev_ext_stats = 0;
+	stats_param->num_pdev_ext_stats = param_buf->num_pdev_extd_stats;
 	stats_param->num_vdev_stats = ev->num_vdev_stats;
 	stats_param->num_peer_stats = ev->num_peer_stats;
 	stats_param->num_peer_extd_stats = ev->num_peer_extd_stats;
@@ -797,7 +803,7 @@ extract_pdev_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf, uint32_t index,
 	param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *) evt_buf;
 	ev_param = (wmi_stats_event_fixed_param *) param_buf->fixed_param;
 	pdev_stats->pdev_id =
-	     wmi_handle->ops->convert_pdev_id_target_to_host(wmi_handle,
+	     wmi_handle->ops->convert_target_pdev_id_to_host(wmi_handle,
 							     ev_param->pdev_id);
 
 	data = param_buf->data;

+ 20 - 0
wmi/src/wmi_unified_tlv.c

@@ -12407,6 +12407,26 @@ static QDF_STATUS extract_unit_test_tlv(wmi_unified_t wmi_handle,
 static QDF_STATUS extract_pdev_ext_stats_tlv(wmi_unified_t wmi_handle,
 	void *evt_buf, uint32_t index, wmi_host_pdev_ext_stats *pdev_ext_stats)
 {
+	WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf;
+	wmi_pdev_extd_stats *ev;
+
+	param_buf = evt_buf;
+	if (!param_buf)
+		return QDF_STATUS_E_FAILURE;
+
+	if (!param_buf->pdev_extd_stats)
+		return QDF_STATUS_E_FAILURE;
+
+	ev = param_buf->pdev_extd_stats + index;
+
+	pdev_ext_stats->pdev_id =
+		wmi_handle->ops->convert_target_pdev_id_to_host(
+						wmi_handle,
+						ev->pdev_id);
+	pdev_ext_stats->my_rx_count = ev->my_rx_count;
+	pdev_ext_stats->rx_matched_11ax_msdu_cnt = ev->rx_matched_11ax_msdu_cnt;
+	pdev_ext_stats->rx_other_11ax_msdu_cnt = ev->rx_other_11ax_msdu_cnt;
+
 	return QDF_STATUS_SUCCESS;
 }