qcacld-3.0: Add TWT notify support to componentization

Add TWT notify support to componentization.

Change-Id: I44afb4a0d045916e9ca0f29924330de3a5d95859
CRs-Fixed: 3085549
This commit is contained in:
Srinivas Girigowda
2021-11-15 23:12:34 -08:00
committed by Madan Koyyalamudi
parent fa14a0ad6b
commit 96132d1c52
4 changed files with 152 additions and 3 deletions

View File

@@ -158,7 +158,49 @@ static int
target_if_twt_notify_event_handler(ol_scn_t scn, uint8_t *event,
uint32_t len)
{
return 0;
QDF_STATUS qdf_status;
struct wmi_unified *wmi_handle;
struct wlan_objmgr_psoc *psoc;
struct twt_notify_event_param *data;
struct wlan_lmac_if_twt_rx_ops *twt_rx_ops;
TARGET_IF_ENTER();
psoc = target_if_get_psoc_from_scn_hdl(scn);
if (!psoc) {
target_if_err("psoc is null");
return -EINVAL;
}
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
target_if_err("wmi_handle is null");
return -EINVAL;
}
twt_rx_ops = wlan_twt_get_rx_ops(psoc);
if (!twt_rx_ops || !twt_rx_ops->twt_notify_comp_cb) {
target_if_err("No valid twt notify rx ops");
return -EINVAL;
}
data = qdf_mem_malloc(sizeof(*data));
if (!data)
return -ENOMEM;
qdf_status = wmi_extract_twt_notify_event(wmi_handle, event, data);
if (QDF_IS_STATUS_ERROR(qdf_status)) {
target_if_err("extract twt notify event failed (status=%d)",
qdf_status);
goto done;
}
qdf_status = twt_rx_ops->twt_notify_comp_cb(psoc, data);
done:
qdf_mem_free(data);
return qdf_status_to_os_return(qdf_status);
}
static int

View File

@@ -173,7 +173,30 @@ wlan_twt_init_context(struct wlan_objmgr_psoc *psoc,
static bool
wlan_is_twt_notify_in_progress(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id)
{
return false;
struct wlan_objmgr_vdev *vdev;
struct twt_vdev_priv_obj *twt_vdev_priv;
bool is_twt_notify_in_progress;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_TWT_ID);
if (!vdev) {
twt_err("vdev object not found");
return false;
}
twt_vdev_priv = wlan_objmgr_vdev_get_comp_private_obj(vdev,
WLAN_UMAC_COMP_TWT);
if (!twt_vdev_priv) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_TWT_ID);
twt_err("twt vdev private object is NULL");
return false;
}
is_twt_notify_in_progress = twt_vdev_priv->twt_wait_for_notify;
wlan_objmgr_vdev_release_ref(vdev, WLAN_TWT_ID);
twt_debug("is_twt_notify_in_progress: %d", is_twt_notify_in_progress);
return is_twt_notify_in_progress;
}
/**
@@ -188,6 +211,27 @@ static QDF_STATUS
wlan_twt_set_wait_for_notify(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id,
bool is_set)
{
struct wlan_objmgr_vdev *vdev;
struct twt_vdev_priv_obj *twt_vdev_priv;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_TWT_ID);
if (!vdev) {
twt_err("vdev object not found");
return QDF_STATUS_E_INVAL;
}
twt_vdev_priv = wlan_objmgr_vdev_get_comp_private_obj(vdev,
WLAN_UMAC_COMP_TWT);
if (!twt_vdev_priv) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_TWT_ID);
twt_err("twt vdev private object is NULL");
return QDF_STATUS_E_INVAL;
}
twt_vdev_priv->twt_wait_for_notify = is_set;
twt_debug("twt_wait_for_notify: %d", is_set);
wlan_objmgr_vdev_release_ref(vdev, WLAN_TWT_ID);
return QDF_STATUS_SUCCESS;
}
@@ -1336,5 +1380,8 @@ QDF_STATUS
wlan_twt_notify_event_handler(struct wlan_objmgr_psoc *psoc,
struct twt_notify_event_param *event)
{
wlan_twt_set_wait_for_notify(psoc, event->vdev_id, false);
mlme_twt_osif_notify_complete_ind(psoc, event);
return QDF_STATUS_SUCCESS;
}

View File

@@ -65,7 +65,7 @@ static QDF_STATUS
tgt_twt_notify_complete_resp_handler(struct wlan_objmgr_psoc *psoc,
struct twt_notify_event_param *event)
{
return QDF_STATUS_SUCCESS;
return wlan_twt_notify_event_handler(psoc, event);
}
static QDF_STATUS