qcacmn: Provide SON with per peer qos stats
Providing per peer QoS stats to SON via WDI event Change-Id: Idd3cfbfec332269fdc8ad0ef273674e81d6ee92f
This commit is contained in:
@@ -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];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user