qcacld-3.0: Introduce support for T2LM status for logging
Add support for T2LM status event for connectivity logging. For T2LM status event, band, tid_ul and tid_dl are the parameter used for connectivity logging. Change-Id: Ifdb763185af88617b90ea761e7d10cc35c628808 CRs-Fixed: 3609648
This commit is contained in:

committed by
Rahul Choudhary

parent
b12c496b67
commit
9f57a97491
@@ -1251,7 +1251,21 @@ wlan_connectivity_t2lm_req_resp_event(struct wlan_objmgr_vdev *vdev,
|
||||
enum qdf_dp_tx_rx_status tx_status,
|
||||
qdf_freq_t freq,
|
||||
bool is_rx, uint8_t subtype);
|
||||
/**
|
||||
* wlan_connectivity_t2lm_status_event() - Fill and send T2LM data
|
||||
* @psoc: Pointer to global psoc object
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void wlan_connectivity_t2lm_status_event(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
#else
|
||||
static inline void
|
||||
wlan_connectivity_mlo_reconfig_event(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
@@ -1267,7 +1281,8 @@ wlan_connectivity_t2lm_req_resp_event(struct wlan_objmgr_vdev *vdev,
|
||||
{}
|
||||
|
||||
static inline void
|
||||
wlan_connectivity_mlo_reconfig_event(struct wlan_objmgr_vdev *vdev)
|
||||
wlan_connectivity_t2lm_status_event(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
@@ -546,6 +546,130 @@ wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev)
|
||||
WLAN_HOST_DIAG_EVENT_REPORT(&wlan_diag_event, EVENT_WLAN_MLO_SETUP);
|
||||
}
|
||||
|
||||
#define IS_LINK_SET(link_bitmap, link_id) ((link_bitmap) & (BIT(link_id)))
|
||||
|
||||
static QDF_STATUS
|
||||
wlan_popluatate_tid_link_id_bitmap(struct wlan_objmgr_vdev *vdev,
|
||||
struct mlo_link_info *link_info,
|
||||
struct wlan_diag_mlo_t2lm_status *buf,
|
||||
uint8_t bss_link)
|
||||
{
|
||||
uint8_t link_id;
|
||||
struct wlan_t2lm_info t2lm[WLAN_T2LM_MAX_DIRECTION] = {0};
|
||||
uint8_t dir, i;
|
||||
uint16_t freq;
|
||||
QDF_STATUS status;
|
||||
|
||||
link_id = link_info->link_id;
|
||||
for (dir = 0; dir < WLAN_T2LM_MAX_DIRECTION; dir++)
|
||||
t2lm[dir].direction = WLAN_T2LM_INVALID_DIRECTION;
|
||||
|
||||
status = wlan_get_t2lm_mapping_status(vdev, t2lm);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
logging_err("Unable to get t2lm_mapping");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
freq = link_info->link_chan_info->ch_freq;
|
||||
|
||||
buf->mlo_cmn_info[bss_link].band =
|
||||
wlan_convert_freq_to_diag_band(freq);
|
||||
|
||||
buf->mlo_cmn_info[bss_link].vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
for (dir = 0; dir < WLAN_T2LM_MAX_DIRECTION; dir++) {
|
||||
for (i = 0; i < T2LM_MAX_NUM_TIDS; i++) {
|
||||
switch (t2lm[dir].direction) {
|
||||
case WLAN_T2LM_DL_DIRECTION:
|
||||
if (
|
||||
IS_LINK_SET(
|
||||
t2lm[dir].ieee_link_map_tid[i], link_id))
|
||||
buf->mlo_cmn_info[bss_link].tid_dl |=
|
||||
BIT(i);
|
||||
break;
|
||||
case WLAN_T2LM_UL_DIRECTION:
|
||||
if (
|
||||
IS_LINK_SET(
|
||||
t2lm[dir].ieee_link_map_tid[i], link_id))
|
||||
buf->mlo_cmn_info[bss_link].tid_ul |=
|
||||
BIT(i);
|
||||
break;
|
||||
case WLAN_T2LM_BIDI_DIRECTION:
|
||||
if (
|
||||
IS_LINK_SET(
|
||||
t2lm[dir].ieee_link_map_tid[i], link_id)) {
|
||||
buf->mlo_cmn_info[bss_link].tid_dl |=
|
||||
BIT(i);
|
||||
buf->mlo_cmn_info[bss_link].tid_ul |=
|
||||
BIT(i);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
logging_debug("Invalid direction %d",
|
||||
t2lm[dir].direction);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
wlan_connectivity_t2lm_status_event(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
QDF_STATUS status;
|
||||
struct mlo_link_info *link_info;
|
||||
|
||||
WLAN_HOST_DIAG_EVENT_DEF(wlan_diag_event,
|
||||
struct wlan_diag_mlo_t2lm_status);
|
||||
|
||||
if (!mlo_is_mld_sta(vdev))
|
||||
return;
|
||||
|
||||
wlan_diag_event.diag_cmn.timestamp_us = qdf_get_time_of_the_day_us();
|
||||
wlan_diag_event.diag_cmn.ktime_us = qdf_ktime_to_us(qdf_ktime_get());
|
||||
wlan_diag_event.version = DIAG_MLO_T2LM_STATUS_VERSION;
|
||||
|
||||
if (!vdev->mlo_dev_ctx) {
|
||||
logging_err("MLO dev ctx not found");
|
||||
return;
|
||||
}
|
||||
|
||||
link_info = mlo_mgr_get_ap_link(vdev);
|
||||
if (!link_info) {
|
||||
logging_err("link_info invalid");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < WLAN_MAX_ML_BSS_LINKS && i < MAX_BANDS; i++) {
|
||||
if (qdf_is_macaddr_zero(&link_info->ap_link_addr) ||
|
||||
link_info->vdev_id == WLAN_INVALID_VDEV_ID)
|
||||
continue;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
psoc,
|
||||
link_info->vdev_id,
|
||||
WLAN_MLO_MGR_ID);
|
||||
if (!vdev)
|
||||
continue;
|
||||
status =
|
||||
wlan_popluatate_tid_link_id_bitmap(vdev,
|
||||
link_info,
|
||||
&wlan_diag_event,
|
||||
i);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLO_MGR_ID);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto out;
|
||||
link_info++;
|
||||
}
|
||||
|
||||
out:
|
||||
WLAN_HOST_DIAG_EVENT_REPORT(&wlan_diag_event,
|
||||
EVENT_WLAN_MLO_T2LM_STATUS);
|
||||
}
|
||||
|
||||
#else
|
||||
static QDF_STATUS
|
||||
wlan_populate_link_addr(struct wlan_objmgr_vdev *vdev,
|
||||
|
Reference in New Issue
Block a user