|
@@ -1,6 +1,6 @@
|
|
|
/*
|
|
|
* Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
|
|
|
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
+ * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
*
|
|
|
* Permission to use, copy, modify, and/or distribute this software for
|
|
|
* any purpose with or without fee is hereby granted, provided that the
|
|
@@ -680,20 +680,13 @@ void wlan_util_vdev_get_param(struct wlan_objmgr_vdev *vdev,
|
|
|
|
|
|
qdf_export_symbol(wlan_util_vdev_get_param);
|
|
|
|
|
|
-/**
|
|
|
- * wlan_util_vdev_mgr_get_cac_timeout_for_vdev() - Get the CAC timeout value for
|
|
|
- * a given vdev.
|
|
|
- * @vdev: Pointer to vdev object.
|
|
|
- *
|
|
|
- * Return: CAC timeout value
|
|
|
- */
|
|
|
#ifndef MOBILE_DFS_SUPPORT
|
|
|
-static int wlan_util_vdev_mgr_get_cac_timeout_for_vdev(
|
|
|
- struct wlan_objmgr_vdev *vdev)
|
|
|
+int wlan_util_vdev_mgr_get_cac_timeout_for_vdev(struct wlan_objmgr_vdev *vdev)
|
|
|
{
|
|
|
struct wlan_channel *des_chan = NULL;
|
|
|
struct wlan_channel *bss_chan = NULL;
|
|
|
bool continue_current_cac = 0;
|
|
|
+ int dfs_cac_timeout = 0;
|
|
|
|
|
|
des_chan = wlan_vdev_mlme_get_des_chan(vdev);
|
|
|
if (!des_chan)
|
|
@@ -707,16 +700,38 @@ static int wlan_util_vdev_mgr_get_cac_timeout_for_vdev(
|
|
|
bss_chan, &continue_current_cac))
|
|
|
return 0;
|
|
|
|
|
|
- return dfs_mlme_get_cac_timeout_for_freq(wlan_vdev_get_pdev(vdev),
|
|
|
- des_chan->ch_freq,
|
|
|
- des_chan->ch_cfreq2,
|
|
|
- des_chan->ch_flags);
|
|
|
+ dfs_cac_timeout = dfs_mlme_get_cac_timeout_for_freq(
|
|
|
+ wlan_vdev_get_pdev(vdev), des_chan->ch_freq,
|
|
|
+ des_chan->ch_cfreq2, des_chan->ch_flags);
|
|
|
+ /* Seconds to milliseconds */
|
|
|
+ return SECONDS_TO_MS(dfs_cac_timeout);
|
|
|
}
|
|
|
#else
|
|
|
-static int wlan_util_vdev_mgr_get_cac_timeout_for_vdev(
|
|
|
- struct wlan_objmgr_vdev *vdev)
|
|
|
+int wlan_util_vdev_mgr_get_cac_timeout_for_vdev(struct wlan_objmgr_vdev *vdev)
|
|
|
{
|
|
|
- return 0;
|
|
|
+ struct vdev_mlme_obj *vdev_mlme;
|
|
|
+
|
|
|
+ vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
|
|
+ if (!vdev_mlme) {
|
|
|
+ mlme_err("vdev_mlme is null");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return vdev_mlme->mgmt.ap.cac_duration_ms;
|
|
|
+}
|
|
|
+
|
|
|
+void wlan_util_vdev_mgr_set_cac_timeout_for_vdev(struct wlan_objmgr_vdev *vdev,
|
|
|
+ uint32_t new_chan_cac_ms)
|
|
|
+{
|
|
|
+ struct vdev_mlme_obj *vdev_mlme;
|
|
|
+
|
|
|
+ vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
|
|
+ if (!vdev_mlme) {
|
|
|
+ mlme_err("vdev_mlme is null");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ vdev_mlme->mgmt.ap.cac_duration_ms = new_chan_cac_ms;
|
|
|
}
|
|
|
#endif /* MOBILE_DFS_SUPPORT */
|
|
|
|
|
@@ -751,7 +766,6 @@ QDF_STATUS wlan_util_vdev_mgr_get_csa_channel_switch_time(
|
|
|
QDF_STATUS wlan_util_vdev_mgr_compute_max_channel_switch_time(
|
|
|
struct wlan_objmgr_vdev *vdev, uint32_t *max_chan_switch_time)
|
|
|
{
|
|
|
- int dfs_cac_timeout = 0;
|
|
|
QDF_STATUS status;
|
|
|
|
|
|
status = wlan_util_vdev_mgr_get_csa_channel_switch_time(
|
|
@@ -761,11 +775,9 @@ QDF_STATUS wlan_util_vdev_mgr_compute_max_channel_switch_time(
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
- /* Get the CAC time */
|
|
|
- dfs_cac_timeout = wlan_util_vdev_mgr_get_cac_timeout_for_vdev(vdev);
|
|
|
-
|
|
|
- /* Seconds to milliseconds */
|
|
|
- *max_chan_switch_time += SECONDS_TO_MS(dfs_cac_timeout);
|
|
|
+ /* Plus the CAC time */
|
|
|
+ *max_chan_switch_time +=
|
|
|
+ wlan_util_vdev_mgr_get_cac_timeout_for_vdev(vdev);
|
|
|
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|