mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 06:09:23 -04:00
qcacld-3.0: Add support for SAP TWT teardown event
Firmare sends SAP TWT teardown event to host. Host handle the event and send values to userspace via nl layer Change-Id: I714c6a18399c1e0d8b79d31af984037f2f5e2024 CRs-Fixed: 2938332
This commit is contained in:
parent
1edc28df9b
commit
b2eec6938c
3 changed files with 92 additions and 26 deletions
|
|
@ -558,6 +558,16 @@ void mlme_set_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc,
|
|||
uint8_t vdev_id, bool from_ap,
|
||||
uint32_t reason_code);
|
||||
|
||||
/**
|
||||
* wlan_get_opmode_from_vdev_id() - Get opmode from vdevid
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: opmode
|
||||
*/
|
||||
enum QDF_OPMODE wlan_get_opmode_from_vdev_id(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* mlme_get_discon_reason_n_from_ap() - Get disconnect reason and from ap flag
|
||||
* @psoc: PSOC pointer
|
||||
|
|
|
|||
|
|
@ -2704,6 +2704,26 @@ void mlme_set_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc,
|
|||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
|
||||
}
|
||||
|
||||
enum QDF_OPMODE wlan_get_opmode_from_vdev_id(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
enum QDF_OPMODE opmode = QDF_MAX_NO_OF_MODE;
|
||||
|
||||
if (!pdev)
|
||||
return opmode;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
|
||||
WLAN_LEGACY_MAC_ID);
|
||||
if (!vdev)
|
||||
return opmode;
|
||||
|
||||
opmode = wlan_vdev_mlme_get_opmode(vdev);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
|
||||
|
||||
return opmode;
|
||||
}
|
||||
|
||||
void mlme_get_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, bool *from_ap,
|
||||
uint32_t *reason_code)
|
||||
|
|
|
|||
|
|
@ -2179,25 +2179,20 @@ sme_is_twt_teardown_failed(enum WMI_HOST_DEL_TWT_STATUS teardown_status)
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* sme_process_twt_del_dialog_event() - Process twt del dialog event
|
||||
* response from firmware
|
||||
* @mac: Global MAC pointer
|
||||
* @param: pointer to wmi_twt_del_dialog_complete_event_param buffer
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
sme_process_twt_del_dialog_event(struct mac_context *mac,
|
||||
struct wmi_twt_del_dialog_complete_event_param *param)
|
||||
sme_process_sta_twt_del_dialog_event(
|
||||
struct mac_context *mac,
|
||||
struct wmi_twt_del_dialog_complete_event_param *param)
|
||||
{
|
||||
twt_del_dialog_cb callback;
|
||||
bool is_evt_allowed;
|
||||
enum wlan_twt_commands active_cmd = WLAN_TWT_NONE;
|
||||
|
||||
is_evt_allowed = mlme_twt_is_command_in_progress(
|
||||
mac->psoc, (struct qdf_mac_addr *)param->peer_macaddr,
|
||||
param->dialog_id, WLAN_TWT_TERMINATE, &active_cmd);
|
||||
mac->psoc, (struct qdf_mac_addr *)
|
||||
param->peer_macaddr, param->dialog_id,
|
||||
WLAN_TWT_TERMINATE, &active_cmd);
|
||||
|
||||
if (!is_evt_allowed &&
|
||||
param->dialog_id != WLAN_ALL_SESSIONS_DIALOG_ID &&
|
||||
param->status != WMI_HOST_DEL_TWT_STATUS_ROAMING &&
|
||||
|
|
@ -2205,6 +2200,7 @@ sme_process_twt_del_dialog_event(struct mac_context *mac,
|
|||
param->status != WMI_HOST_DEL_TWT_STATUS_CONCURRENCY) {
|
||||
sme_debug("Drop TWT Del dialog event for dialog_id:%d status:%d active_cmd:%d",
|
||||
param->dialog_id, param->status, active_cmd);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2214,28 +2210,67 @@ sme_process_twt_del_dialog_event(struct mac_context *mac,
|
|||
|
||||
if (param->status == WMI_HOST_DEL_TWT_STATUS_ROAMING ||
|
||||
param->status == WMI_HOST_DEL_TWT_STATUS_CONCURRENCY)
|
||||
mlme_twt_set_wait_for_notify(
|
||||
mac->psoc, param->vdev_id, true);
|
||||
mlme_twt_set_wait_for_notify(mac->psoc, param->vdev_id, true);
|
||||
|
||||
/* Reset the active TWT command to none */
|
||||
mlme_set_twt_command_in_progress(
|
||||
mac->psoc, (struct qdf_mac_addr *)param->peer_macaddr,
|
||||
param->dialog_id, WLAN_TWT_NONE);
|
||||
mlme_set_twt_command_in_progress(mac->psoc, (struct qdf_mac_addr *)
|
||||
param->peer_macaddr, param->dialog_id,
|
||||
WLAN_TWT_NONE);
|
||||
|
||||
if (sme_is_twt_teardown_failed(param->status))
|
||||
return;
|
||||
|
||||
ucfg_mlme_set_twt_setup_done(mac->psoc, (struct qdf_mac_addr *)
|
||||
param->peer_macaddr,
|
||||
param->dialog_id, false);
|
||||
param->peer_macaddr, param->dialog_id,
|
||||
false);
|
||||
|
||||
ucfg_mlme_set_twt_session_state(
|
||||
mac->psoc, (struct qdf_mac_addr *)param->peer_macaddr,
|
||||
param->dialog_id, WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED);
|
||||
ucfg_mlme_set_twt_session_state(mac->psoc, (struct qdf_mac_addr *)
|
||||
param->peer_macaddr, param->dialog_id,
|
||||
WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED);
|
||||
|
||||
mlme_init_twt_context(mac->psoc, (struct qdf_mac_addr *)
|
||||
param->peer_macaddr,
|
||||
param->dialog_id);
|
||||
param->peer_macaddr, param->dialog_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* sme_process_twt_del_dialog_event() - Process twt del dialog event
|
||||
* response from firmware
|
||||
* @mac: Global MAC pointer
|
||||
* @param: pointer to wmi_twt_del_dialog_complete_event_param buffer
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
sme_process_twt_del_dialog_event(
|
||||
struct mac_context *mac,
|
||||
struct wmi_twt_del_dialog_complete_event_param *param)
|
||||
{
|
||||
twt_del_dialog_cb callback;
|
||||
enum QDF_OPMODE opmode;
|
||||
QDF_STATUS qdf_status = QDF_STATUS_E_FAILURE;
|
||||
|
||||
opmode = wlan_get_opmode_from_vdev_id(mac->pdev, param->vdev_id);
|
||||
|
||||
qdf_status = sme_acquire_global_lock(&mac->sme);
|
||||
if (QDF_IS_STATUS_ERROR(qdf_status))
|
||||
return;
|
||||
|
||||
switch (opmode) {
|
||||
case QDF_SAP_MODE:
|
||||
callback = mac->sme.twt_del_dialog_cb;
|
||||
if (callback)
|
||||
callback(mac->psoc, param);
|
||||
break;
|
||||
case QDF_STA_MODE:
|
||||
sme_process_sta_twt_del_dialog_event(mac, param);
|
||||
break;
|
||||
default:
|
||||
sme_debug("TWT Teardown is not supported on %s",
|
||||
qdf_opmode_str(opmode));
|
||||
}
|
||||
|
||||
sme_release_global_lock(&mac->sme);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2355,8 +2390,9 @@ sme_process_twt_add_dialog_event(struct mac_context *mac,
|
|||
}
|
||||
|
||||
static void
|
||||
sme_process_twt_del_dialog_event(struct mac_context *mac,
|
||||
struct wmi_twt_del_dialog_complete_event_param *param)
|
||||
sme_process_twt_del_dialog_event(
|
||||
struct mac_context *mac,
|
||||
struct wmi_twt_del_dialog_complete_event_param *param)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue