Merge "qcacmn: Add WMI support to set OBSS PD per AC"
diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h
index aea884c..90c17af 100644
--- a/dp/inc/cdp_txrx_cmn_struct.h
+++ b/dp/inc/cdp_txrx_cmn_struct.h
@@ -1398,6 +1398,7 @@
* @rx_packets: Rx total packets transmitted
* @rx_bytes : Rx total bytes transmitted
* @rx_errors : Rx erros
+ * @rx_dropped: Rx dropped stats
*/
struct cdp_dev_stats {
uint32_t tx_packets;
@@ -1407,6 +1408,7 @@
uint32_t rx_packets;
uint32_t rx_bytes;
uint32_t rx_errors;
+ uint32_t rx_dropped;
};
/**
diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h
index b534948..e6eaca6 100644
--- a/dp/inc/cdp_txrx_stats_struct.h
+++ b/dp/inc/cdp_txrx_stats_struct.h
@@ -1282,6 +1282,8 @@
uint32_t desc_alloc_fail;
uint32_t ip_csum_err;
uint32_t tcp_udp_csum_err;
+ uint32_t rxdma_error;
+ uint32_t reo_error;
} err;
uint32_t buf_freelist;
diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h
index dfea615..b42741a 100644
--- a/dp/wifi3.0/dp_internal.h
+++ b/dp/wifi3.0/dp_internal.h
@@ -816,8 +816,9 @@
*/
int dp_delba_tx_completion_wifi3(void *peer_handle, uint8_t tid,
int status);
-extern int dp_rx_tid_setup_wifi3(struct dp_peer *peer, int tid,
- uint32_t ba_window_size, uint32_t start_seq);
+extern QDF_STATUS dp_rx_tid_setup_wifi3(struct dp_peer *peer, int tid,
+ uint32_t ba_window_size,
+ uint32_t start_seq);
extern QDF_STATUS dp_reo_send_cmd(struct dp_soc *soc,
enum hal_reo_cmd_type type, struct hal_reo_cmd_params *params,
diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c
index 867fffa..76777c9 100644
--- a/dp/wifi3.0/dp_main.c
+++ b/dp/wifi3.0/dp_main.c
@@ -6845,9 +6845,16 @@
stats->rx_errors = pdev->stats.err.desc_alloc_fail +
pdev->stats.err.ip_csum_err +
pdev->stats.err.tcp_udp_csum_err +
- pdev->stats.rx.err. mic_err +
- pdev->stats.rx.err. decrypt_err +
- pdev->stats.rx.err. fcserr;
+ pdev->stats.rx.err.mic_err +
+ pdev->stats.rx.err.decrypt_err +
+ pdev->stats.err.rxdma_error +
+ pdev->stats.err.reo_error;
+ stats->rx_dropped = pdev->stats.dropped.msdu_not_done +
+ pdev->stats.dropped.mec +
+ pdev->stats.dropped.mesh_filter +
+ pdev->stats.dropped.wifi_parse +
+ pdev->stats.dropped.mon_rx_drop +
+ pdev->stats.dropped.mon_radiotap_update_err;
}
/**
diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c
index 12c5839..d58b2a3 100644
--- a/dp/wifi3.0/dp_peer.c
+++ b/dp/wifi3.0/dp_peer.c
@@ -1677,6 +1677,29 @@
return peer;
}
+static bool dp_get_peer_vdev_roaming_in_progress(struct dp_peer *peer)
+{
+ struct ol_if_ops *ol_ops = NULL;
+ bool is_roaming = false;
+ uint8_t vdev_id = -1;
+
+ if (!peer) {
+ dp_info("Peer is NULL. No roaming possible");
+ return false;
+ }
+ ol_ops = peer->vdev->pdev->soc->cdp_soc.ol_ops;
+
+ if (ol_ops && ol_ops->is_roam_inprogress) {
+ dp_get_vdevid(peer, &vdev_id);
+ is_roaming = ol_ops->is_roam_inprogress(vdev_id);
+ }
+
+ dp_info("peer: %pM, vdev_id: %d, is_roaming: %d",
+ peer->mac_addr.raw, vdev_id, is_roaming);
+
+ return is_roaming;
+}
+
/*
* dp_rx_tid_update_wifi3() – Update receive TID state
* @peer: Datapath peer handle
@@ -1684,10 +1707,10 @@
* @ba_window_size: BlockAck window size
* @start_seq: Starting sequence number
*
- * Return: 0 on success, error code on failure
+ * Return: QDF_STATUS code
*/
-static int dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
- ba_window_size, uint32_t start_seq)
+static QDF_STATUS dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
+ ba_window_size, uint32_t start_seq)
{
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
struct dp_soc *soc = peer->vdev->pdev->soc;
@@ -1712,14 +1735,16 @@
rx_tid->ba_win_size = ba_window_size;
- if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup) {
+ if (dp_get_peer_vdev_roaming_in_progress(peer))
+ return QDF_STATUS_E_PERM;
+
+ if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup)
soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup(
peer->vdev->pdev->ctrl_pdev,
peer->vdev->vdev_id, peer->mac_addr.raw,
rx_tid->hw_qdesc_paddr, tid, tid, 1, ba_window_size);
- }
- return 0;
+ return QDF_STATUS_SUCCESS;
}
/*
@@ -1782,10 +1807,10 @@
* @ba_window_size: BlockAck window size
* @start_seq: Starting sequence number
*
- * Return: 0 on success, error code on failure
+ * Return: QDF_STATUS code
*/
-int dp_rx_tid_setup_wifi3(struct dp_peer *peer, int tid,
- uint32_t ba_window_size, uint32_t start_seq)
+QDF_STATUS dp_rx_tid_setup_wifi3(struct dp_peer *peer, int tid,
+ uint32_t ba_window_size, uint32_t start_seq)
{
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
struct dp_vdev *vdev = peer->vdev;
@@ -1795,7 +1820,7 @@
int hal_pn_type;
void *hw_qdesc_vaddr;
uint32_t alloc_tries = 0;
- int err = QDF_STATUS_SUCCESS;
+ QDF_STATUS err = QDF_STATUS_SUCCESS;
if (peer->delete_in_progress ||
!qdf_atomic_read(&peer->is_default_route_set))
@@ -1923,6 +1948,11 @@
}
}
+ if (dp_get_peer_vdev_roaming_in_progress(peer)) {
+ err = QDF_STATUS_E_PERM;
+ goto error;
+ }
+
if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup) {
if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup(
vdev->pdev->ctrl_pdev, peer->vdev->vdev_id,
@@ -2352,6 +2382,7 @@
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
struct dp_rx_tid *rx_tid = NULL;
+ QDF_STATUS qdf_status;
if (!peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
@@ -2361,26 +2392,13 @@
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
if (status) {
- struct ol_if_ops *ol_ops = NULL;
- bool is_roaming = false;
- uint8_t vdev_id = -1;
-
rx_tid->num_addba_rsp_failed++;
- ol_ops = peer->vdev->pdev->soc->cdp_soc.ol_ops;
-
- if (ol_ops && ol_ops->is_roam_inprogress) {
- dp_get_vdevid(peer, &vdev_id);
- is_roaming = ol_ops->is_roam_inprogress(vdev_id);
- }
-
- if (!is_roaming) {
- dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
+ qdf_status = dp_rx_tid_update_wifi3(peer, tid, 1,
+ IEEE80211_SEQ_MAX);
+ if (qdf_status == QDF_STATUS_SUCCESS)
rx_tid->ba_status = DP_RX_BA_INACTIVE;
- }
-
qdf_spin_unlock_bh(&rx_tid->tid_lock);
- dp_err("RxTid- %d addba rsp tx completion failed, is_roaming %d",
- tid, is_roaming);
+ dp_err("RxTid- %d addba rsp tx completion failed", tid);
return QDF_STATUS_SUCCESS;
}
diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c
index 2de3c63..c38d732 100644
--- a/dp/wifi3.0/dp_rx_err.c
+++ b/dp/wifi3.0/dp_rx_err.c
@@ -1223,6 +1223,10 @@
rx.err.
reo_error[HAL_REO_ERR_PN_CHECK_FAILED],
1);
+ /* increment @pdev level */
+ dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+ if (dp_pdev)
+ DP_STATS_INC(dp_pdev, err.reo_error, 1);
count = dp_rx_pn_error_handle(soc,
ring_desc,
&mpdu_desc_info, &mac_id,
@@ -1238,6 +1242,10 @@
rx.err.
reo_error[HAL_REO_ERR_REGULAR_FRAME_2K_JUMP],
1);
+ /* increment @pdev level */
+ dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+ if (dp_pdev)
+ DP_STATS_INC(dp_pdev, err.reo_error, 1);
count = dp_rx_2k_jump_handle(soc,
ring_desc, &mpdu_desc_info,
@@ -1442,6 +1450,12 @@
DP_STATS_INC(soc,
rx.err.reo_error
[wbm_err_info.reo_err_code], 1);
+ /* increment @pdev level */
+ pool_id = wbm_err_info.pool_id;
+ dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id);
+ if (dp_pdev)
+ DP_STATS_INC(dp_pdev, err.reo_error,
+ 1);
switch (wbm_err_info.reo_err_code) {
/*
@@ -1489,6 +1503,12 @@
DP_STATS_INC(soc,
rx.err.rxdma_error
[wbm_err_info.rxdma_err_code], 1);
+ /* increment @pdev level */
+ pool_id = wbm_err_info.pool_id;
+ dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id);
+ if (dp_pdev)
+ DP_STATS_INC(dp_pdev,
+ err.rxdma_error, 1);
switch (wbm_err_info.rxdma_err_code) {
case HAL_RXDMA_ERR_UNENCRYPTED:
@@ -1708,6 +1728,8 @@
} while (buf_info.paddr);
DP_STATS_INC(soc, rx.err.rxdma_error[rxdma_error_code], 1);
+ if (pdev)
+ DP_STATS_INC(pdev, err.rxdma_error, 1);
if (rxdma_error_code == HAL_RXDMA_ERR_DECRYPT) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c
index dda29ba..32230c2 100644
--- a/dp/wifi3.0/dp_tx.c
+++ b/dp/wifi3.0/dp_tx.c
@@ -397,6 +397,9 @@
uint32_t lo = 0;
uint32_t hi = 0;
+ qdf_assert_always((tso_seg->tso_frags[num_frag].paddr) &&
+ (tso_seg->tso_frags[num_frag].length));
+
qdf_dmaaddr_to_32s(
tso_seg->tso_frags[num_frag].paddr, &lo, &hi);
hal_tx_ext_desc_set_buffer(ext_desc, num_frag, lo, hi,
@@ -1082,6 +1085,8 @@
dma_addr = qdf_nbuf_mapped_paddr_get(tx_desc->nbuf);
}
+ qdf_assert_always(dma_addr);
+
hal_tx_desc_set_fw_metadata(hal_tx_desc_cached, fw_metadata);
hal_tx_desc_set_buf_addr(hal_tx_desc_cached,
dma_addr, bm_id, tx_desc->id,
diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h
index 917bffc..f37c06c 100644
--- a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h
+++ b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h
@@ -189,8 +189,6 @@
SU_EVM_DETAILS_0_NSS_COUNT);
hal_rx_update_su_evm_info(rx_tlv, ppdu_info_hdl);
break;
- default:
- qdf_err("TLV tag not found");
}
}
#else
diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c
index 30553f9..96f2f5b 100644
--- a/qdf/linux/src/qdf_nbuf.c
+++ b/qdf/linux/src/qdf_nbuf.c
@@ -334,7 +334,16 @@
*/
void __qdf_nbuf_count_inc(qdf_nbuf_t nbuf)
{
- qdf_atomic_inc(&nbuf_count);
+ int num_nbuf = 1;
+ qdf_nbuf_t ext_list = qdf_nbuf_get_ext_list(nbuf);
+
+ /* Take care to account for frag_list */
+ while (ext_list) {
+ ++num_nbuf;
+ ext_list = qdf_nbuf_queue_next(ext_list);
+ }
+
+ qdf_atomic_add(num_nbuf, &nbuf_count);
}
qdf_export_symbol(__qdf_nbuf_count_inc);
@@ -347,7 +356,23 @@
*/
void __qdf_nbuf_count_dec(__qdf_nbuf_t nbuf)
{
- qdf_atomic_dec(&nbuf_count);
+ qdf_nbuf_t ext_list;
+ int num_nbuf;
+
+ if (qdf_nbuf_get_users(nbuf) > 1)
+ return;
+
+ num_nbuf = 1;
+
+ /* Take care to account for frag_list */
+ ext_list = qdf_nbuf_get_ext_list(nbuf);
+ while (ext_list) {
+ if (qdf_nbuf_get_users(ext_list) == 1)
+ ++num_nbuf;
+ ext_list = qdf_nbuf_queue_next(ext_list);
+ }
+
+ qdf_atomic_sub(num_nbuf, &nbuf_count);
}
qdf_export_symbol(__qdf_nbuf_count_dec);
#endif
@@ -2567,6 +2592,8 @@
void qdf_nbuf_free_debug(qdf_nbuf_t nbuf, const char *func, uint32_t line)
{
+ qdf_nbuf_t ext_list;
+
if (qdf_unlikely(!nbuf))
return;
@@ -2578,6 +2605,17 @@
qdf_net_buf_debug_delete_node(nbuf);
qdf_nbuf_history_add(nbuf, func, line, QDF_NBUF_FREE);
+ /* Take care to delete the debug entries for frag_list */
+ ext_list = qdf_nbuf_get_ext_list(nbuf);
+ while (ext_list) {
+ if (qdf_nbuf_get_users(ext_list) == 1) {
+ qdf_nbuf_panic_on_free_if_mapped(ext_list, func, line);
+ qdf_net_buf_debug_delete_node(ext_list);
+ }
+
+ ext_list = qdf_nbuf_queue_next(ext_list);
+ }
+
free_buf:
__qdf_nbuf_free(nbuf);
}
diff --git a/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_rx_ops.h b/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_rx_ops.h
index fbfd8f4..991c653 100644
--- a/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_rx_ops.h
+++ b/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_rx_ops.h
@@ -40,6 +40,59 @@
}
/**
+ * target_if_vdev_mgr_delete_response_handler() - API to handle vdev delete
+ * response
+ * @scn: pointer to scan object
+ * @data: pointer to data
+ * @datalen: length of data
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
+ */
+int target_if_vdev_mgr_delete_response_handler(
+ ol_scn_t scn,
+ uint8_t *data,
+ uint32_t datalen);
+
+/**
+ * target_if_vdev_mgr_offload_bcn_tx_status_handler() - API to handle beacon
+ * tx status event
+ * @scn: pointer to scan object
+ * @data: pointer to data
+ * @datalen: length of data
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
+ */
+int target_if_vdev_mgr_offload_bcn_tx_status_handler(ol_scn_t scn,
+ uint8_t *data,
+ uint32_t datalen);
+
+/**
+ * target_if_vdev_mgr_tbttoffset_update_handler() - API to handle tbtt offset
+ * update event
+ * @scn: pointer to scan object
+ * @data: pointer to data
+ * @datalen: length of data
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
+ */
+int target_if_vdev_mgr_tbttoffset_update_handler(ol_scn_t scn,
+ uint8_t *data,
+ uint32_t datalen);
+
+/**
+ * target_if_vdev_mgr_ext_tbttoffset_update_handler() - API to handle ext tbtt
+ * offset update event
+ * @scn: pointer to scan object
+ * @data: pointer to data
+ * @datalen: length of data
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
+ */
+int target_if_vdev_mgr_ext_tbttoffset_update_handler(ol_scn_t scn,
+ uint8_t *data,
+ uint32_t datalen);
+
+/**
* target_if_vdev_mgr_is_panic_on_bug: API to get panic on bug
*
* Return: TRUE or FALSE
diff --git a/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_tx_ops.h b/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_tx_ops.h
index fb643fa..0707c96 100644
--- a/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_tx_ops.h
+++ b/target_if/mlme/vdev_mgr/inc/target_if_vdev_mgr_tx_ops.h
@@ -71,14 +71,14 @@
* Return: NA
*/
#ifdef VDEV_ASSERT_MANAGEMENT
-static void target_if_vdev_mgr_assert_mgmt(
+static inline void target_if_vdev_mgr_assert_mgmt(
struct wlan_objmgr_vdev *vdev,
struct vdev_response_timer *vdev_rsp,
uint8_t set_bit)
{
}
#else
-static void target_if_vdev_mgr_assert_mgmt(
+static inline void target_if_vdev_mgr_assert_mgmt(
struct wlan_objmgr_vdev *vdev,
struct vdev_response_timer *vdev_rsp,
uint8_t set_bit)
diff --git a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c
index f78f75f..275c709 100644
--- a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c
+++ b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c
@@ -31,6 +31,7 @@
#include <target_if.h>
#include <qdf_platform.h>
#include <wlan_vdev_mlme_main.h>
+#include <wmi_unified_vdev_api.h>
void target_if_vdev_mgr_rsp_timer_mgmt_cb(void *arg)
{
@@ -322,7 +323,7 @@
return qdf_status_to_os_return(status);
}
-static int target_if_vdev_mgr_delete_response_handler(
+int target_if_vdev_mgr_delete_response_handler(
ol_scn_t scn,
uint8_t *data,
uint32_t datalen)
@@ -482,10 +483,10 @@
return qdf_status_to_os_return(status);
}
-static int target_if_vdev_mgr_offload_bcn_tx_status_handler(
- ol_scn_t scn,
- uint8_t *data,
- uint32_t datalen)
+int target_if_vdev_mgr_offload_bcn_tx_status_handler(
+ ol_scn_t scn,
+ uint8_t *data,
+ uint32_t datalen)
{
QDF_STATUS status;
struct wlan_objmgr_psoc *psoc;
@@ -528,9 +529,8 @@
return qdf_status_to_os_return(status);
}
-static int target_if_vdev_mgr_tbttoffset_update_handler(
- ol_scn_t scn,
- uint8_t *data,
+int target_if_vdev_mgr_tbttoffset_update_handler(
+ ol_scn_t scn, uint8_t *data,
uint32_t datalen)
{
QDF_STATUS status;
@@ -572,7 +572,7 @@
return qdf_status_to_os_return(status);
}
-static int target_if_vdev_mgr_ext_tbttoffset_update_handler(
+int target_if_vdev_mgr_ext_tbttoffset_update_handler(
ol_scn_t scn,
uint8_t *data,
uint32_t datalen)
diff --git a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c
index 49b6dda..c1c0326 100644
--- a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c
+++ b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c
@@ -35,6 +35,7 @@
#include <wlan_vdev_mgr_tgt_if_tx_defs.h>
#include <wlan_vdev_mgr_utils_api.h>
#include <wlan_cmn.h>
+#include <wmi_unified_vdev_api.h>
static QDF_STATUS target_if_vdev_mgr_register_event_handler(
struct wlan_objmgr_psoc *psoc)
@@ -760,7 +761,6 @@
status = wmi_unified_vdev_config_ratemask_cmd_send(wmi_handle,
param);
-
return status;
}
diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c
index e417c23..c369a61 100644
--- a/target_if/spectral/target_if_spectral.c
+++ b/target_if/spectral/target_if_spectral.c
@@ -345,7 +345,7 @@
const char *function_name,
struct spectral_config *pparam)
{
- spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Returning following params:\nss_count = %u\nss_period = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\n",
+ spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Returning following params:\nss_count = %u\nss_period = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\nss_frequency=%u\n",
function_name,
pparam->ss_count,
pparam->ss_period,
@@ -364,7 +364,8 @@
pparam->ss_rpt_mode,
pparam->ss_bin_scale,
pparam->ss_dbm_adj,
- pparam->ss_chn_mask);
+ pparam->ss_chn_mask,
+ pparam->ss_frequency);
}
/**
@@ -666,7 +667,7 @@
const char *function_name,
int ret)
{
- spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Params:\nss_count = %u\nss_period = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\nstatus = %d",
+ spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Params:\nss_count = %u\nss_period = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\nss_frequency=%u\nstatus = %d",
function_name,
param->ss_count,
param->ss_period,
@@ -684,7 +685,10 @@
param->ss_pwr_format,
param->ss_rpt_mode,
param->ss_bin_scale,
- param->ss_dbm_adj, param->ss_chn_mask, ret);
+ param->ss_dbm_adj,
+ param->ss_chn_mask,
+ param->ss_frequency,
+ ret);
}
/**
diff --git a/target_if/spectral/target_if_spectral_phyerr.c b/target_if/spectral/target_if_spectral_phyerr.c
index 95e79df..997c23f 100644
--- a/target_if/spectral/target_if_spectral_phyerr.c
+++ b/target_if/spectral/target_if_spectral_phyerr.c
@@ -35,30 +35,82 @@
#ifdef WLAN_CONV_SPECTRAL_ENABLE
+#define SPECTRAL_HEXDUMP_OCTET_PRINT_SIZE (3)
+#define SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE (16)
+#define SPECTRAL_HEXDUMP_EXTRA_BUFFER_PER_LINE (16)
+
+/*
+ * Provision for the expected hexdump line size as follows:
+ *
+ * Size per octet multiplied by number of octets per line
+ * +
+ * ASCII representation which is equivalent in print size to number of octets
+ * per line
+ * +
+ * Some extra buffer
+ */
+#define SPECTRAL_HEXDUMP_LINESIZE \
+ ((SPECTRAL_HEXDUMP_OCTET_PRINT_SIZE * \
+ SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE) + \
+ SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE + \
+ SPECTRAL_HEXDUMP_EXTRA_BUFFER_PER_LINE)
+
+/**
+ * target_if_spectral_hexdump() - Print hexdump of the given buffer
+ * @_buf: Pointer to buffer
+ * @_len: Length of the buffer
+ *
+ * Print the hexdump of buffer upto given length. Print upto
+ * SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE per line, followed by the ASCII
+ * representation of these octets.
+ */
static inline void target_if_spectral_hexdump(unsigned char *_buf, int _len)
{
int i, mod;
- unsigned char ascii[17];
+ unsigned char ascii[SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE + 1];
unsigned char *pc = (_buf);
+ char hexdump_line[SPECTRAL_HEXDUMP_LINESIZE + 1];
+ int loc = 0;
+
+ qdf_mem_zero(hexdump_line, sizeof(hexdump_line));
for (i = 0; i < _len; i++) {
- mod = i % 16;
+ mod = i % SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE;
+
if (!mod) {
- if (i)
- spectral_debug(" %s\n", ascii);
+ if (i) {
+ qdf_assert_always(loc < sizeof(hexdump_line));
+ loc += snprintf(&hexdump_line[loc],
+ sizeof(hexdump_line) - loc,
+ " %s", ascii);
+ spectral_debug("%s", hexdump_line);
+ qdf_mem_zero(hexdump_line,
+ sizeof(hexdump_line));
+ loc = 0;
+ }
}
- spectral_debug(" %02x", pc[i]);
+
+ qdf_assert_always(loc < sizeof(hexdump_line));
+ loc += snprintf(&hexdump_line[loc], sizeof(hexdump_line) - loc,
+ " %02x", pc[i]);
+
if ((pc[i] < 0x20) || (pc[i] > 0x7e))
ascii[mod] = '.';
else
ascii[mod] = pc[i];
ascii[(mod) + 1] = '\0';
}
- while ((i % 16) != 0) {
- spectral_debug(" ");
+
+ while ((i % SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE) != 0) {
+ qdf_assert_always(loc < sizeof(hexdump_line));
+ loc += snprintf(&hexdump_line[loc], sizeof(hexdump_line) - loc,
+ " ");
i++;
}
- spectral_debug(" %s\n", ascii);
+
+ qdf_assert_always(loc < sizeof(hexdump_line));
+ snprintf(&hexdump_line[loc], sizeof(hexdump_line) - loc, " %s", ascii);
+ spectral_debug("%s", hexdump_line);
}
/**
diff --git a/umac/cmn_services/mgmt_txrx/configs/ap_mgmt_txrx.config b/umac/cmn_services/mgmt_txrx/configs/ap_mgmt_txrx.config
new file mode 100644
index 0000000..ce93ede
--- /dev/null
+++ b/umac/cmn_services/mgmt_txrx/configs/ap_mgmt_txrx.config
@@ -0,0 +1,7 @@
+ifeq ($(strip ${CONFIG_WIFI_IPQ_MEM_PROFILE}),256)
+EXTRA_CFLAGS += -DMGMT_DESC_POOL_MAX=256
+else ifeq ($(strip ${CONFIG_WIFI_IPQ_MEM_PROFILE}),512)
+EXTRA_CFLAGS += -DMGMT_DESC_POOL_MAX=384
+else
+EXTRA_CFLAGS += -DMGMT_DESC_POOL_MAX=512
+endif
diff --git a/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main.c b/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main.c
index 68b82de..54a4ef4 100644
--- a/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main.c
+++ b/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main.c
@@ -127,6 +127,8 @@
/* acquire the wakelock when there are pending mgmt tx frames */
qdf_wake_lock_timeout_acquire(&mgmt_txrx_pdev_ctx->wakelock_tx_cmp,
MGMT_TXRX_WAKELOCK_TIMEOUT_TX_CMP);
+ qdf_runtime_pm_prevent_suspend(
+ &mgmt_txrx_pdev_ctx->wakelock_tx_runtime_cmp);
qdf_spin_unlock_bh(&mgmt_txrx_pdev_ctx->mgmt_desc_pool.desc_pool_lock);
@@ -160,9 +162,12 @@
/* release the wakelock if there are no pending mgmt tx frames */
if (mgmt_txrx_pdev_ctx->mgmt_desc_pool.free_list.count ==
- mgmt_txrx_pdev_ctx->mgmt_desc_pool.free_list.max_size)
+ mgmt_txrx_pdev_ctx->mgmt_desc_pool.free_list.max_size) {
+ qdf_runtime_pm_allow_suspend(
+ &mgmt_txrx_pdev_ctx->wakelock_tx_runtime_cmp);
qdf_wake_lock_release(&mgmt_txrx_pdev_ctx->wakelock_tx_cmp,
MGMT_TXRX_WAKELOCK_REASON_TX_CMP);
+ }
qdf_spin_unlock_bh(&mgmt_txrx_pdev_ctx->mgmt_desc_pool.desc_pool_lock);
diff --git a/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main_i.h b/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main_i.h
index cdaa897..8aea6af 100644
--- a/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main_i.h
+++ b/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_main_i.h
@@ -186,12 +186,14 @@
* @mgmt_desc_pool: pointer to mgmt desc. pool
* @mgmt_txrx_stats: pointer to mgmt txrx stats
* @wakelock_tx_cmp: mgmt tx complete wake lock
+ * @wakelock_tx_runtime_cmp: mgmt tx runtime complete wake lock
*/
struct mgmt_txrx_priv_pdev_context {
struct wlan_objmgr_pdev *pdev;
struct mgmt_desc_pool_t mgmt_desc_pool;
struct mgmt_txrx_stats_t *mgmt_txrx_stats;
qdf_wake_lock_t wakelock_tx_cmp;
+ qdf_runtime_lock_t wakelock_tx_runtime_cmp;
};
diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h
index 8737a01..622a263 100644
--- a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h
+++ b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h
@@ -30,18 +30,6 @@
#include "wlan_objmgr_cmn.h"
#include "qdf_nbuf.h"
-#ifdef CONFIG_MCL
-#define MGMT_DESC_POOL_MAX 64
-#else
-#ifdef QCA_LOWMEM_CONFIG
-#define MGMT_DESC_POOL_MAX 256
-#elif defined QCA_512M_CONFIG
-#define MGMT_DESC_POOL_MAX 384
-#else
-#define MGMT_DESC_POOL_MAX 512
-#endif
-#endif
-
#define mgmt_txrx_alert(params...) \
QDF_TRACE_FATAL(QDF_MODULE_ID_MGMT_TXRX, params)
#define mgmt_txrx_err(params...) \
diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c
index e3e2edf..4e5b493 100644
--- a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c
+++ b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c
@@ -184,6 +184,7 @@
qdf_wake_lock_create(&mgmt_txrx_pdev_ctx->wakelock_tx_cmp,
"mgmt_txrx tx_cmp");
+ qdf_runtime_lock_init(&mgmt_txrx_pdev_ctx->wakelock_tx_runtime_cmp);
if (wlan_objmgr_pdev_component_obj_attach(pdev,
WLAN_UMAC_COMP_MGMT_TXRX,
@@ -201,6 +202,7 @@
return QDF_STATUS_SUCCESS;
err_pdev_attach:
+ qdf_runtime_lock_deinit(&mgmt_txrx_pdev_ctx->wakelock_tx_runtime_cmp);
qdf_wake_lock_destroy(&mgmt_txrx_pdev_ctx->wakelock_tx_cmp);
qdf_mem_free(mgmt_txrx_stats);
err_mgmt_txrx_stats:
@@ -251,6 +253,7 @@
wlan_mgmt_txrx_desc_pool_deinit(mgmt_txrx_pdev_ctx);
qdf_mem_free(mgmt_txrx_pdev_ctx->mgmt_txrx_stats);
+ qdf_runtime_lock_deinit(&mgmt_txrx_pdev_ctx->wakelock_tx_runtime_cmp);
qdf_wake_lock_destroy(&mgmt_txrx_pdev_ctx->wakelock_tx_cmp);
qdf_mem_free(mgmt_txrx_pdev_ctx);
diff --git a/umac/cp_stats/dispatcher/src/wlan_cp_stats_mc_ucfg_api.c b/umac/cp_stats/dispatcher/src/wlan_cp_stats_mc_ucfg_api.c
index ca85ca1..8c62978 100644
--- a/umac/cp_stats/dispatcher/src/wlan_cp_stats_mc_ucfg_api.c
+++ b/umac/cp_stats/dispatcher/src/wlan_cp_stats_mc_ucfg_api.c
@@ -156,6 +156,7 @@
vdev_mc_stats = vdev_cp_stats_priv->vdev_stats;
stats = &vdev_mc_stats->wow_stats;
switch (protocol) {
+ case QDF_PROTO_ICMP_REQ:
case QDF_PROTO_ICMP_RES:
stats->icmpv4_count++;
break;
diff --git a/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c b/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c
index 80ecc78..4c36122 100644
--- a/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c
+++ b/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c
@@ -858,20 +858,20 @@
dfs->is_radar_found_on_secondary_seg,
dfs_is_precac_timer_running(dfs));
/*
- * Even if radar found on primary, we need to move the channel
- * from precac-required-list and precac-done-list to
- * precac-nol-list.
+ * Even if radar found on primary, we need to mark the channel as NOL
+ * in preCAC list. The preCAC list also maintains the current CAC
+ * channels as part of pre-cleared DFS. Hence call the API
+ * to mark channels as NOL irrespective of preCAC being enabled or not.
*/
- if (dfs->dfs_precac_enable || dfs->dfs_agile_precac_enable) {
- dfs_debug(dfs, WLAN_DEBUG_DFS,
- "%s: %d Radar found on dfs detector:%d",
- __func__, __LINE__, radar_found->detector_id);
- dfs_mark_precac_nol(dfs,
- dfs->is_radar_found_on_secondary_seg,
- radar_found->detector_id, channels,
- num_channels);
- }
+ dfs_debug(dfs, WLAN_DEBUG_DFS,
+ "%s: %d Radar found on dfs detector:%d",
+ __func__, __LINE__, radar_found->detector_id);
+ dfs_mark_precac_nol(dfs,
+ dfs->is_radar_found_on_secondary_seg,
+ radar_found->detector_id,
+ channels,
+ num_channels);
if (utils_get_dfsdomain(dfs->dfs_pdev_obj) == DFS_ETSI_DOMAIN) {
/* Remove chan from ETSI Pre-CAC Cleared List*/
diff --git a/umac/mlme/include/wlan_vdev_mlme.h b/umac/mlme/include/wlan_vdev_mlme.h
index d18466d..12d0017 100644
--- a/umac/mlme/include/wlan_vdev_mlme.h
+++ b/umac/mlme/include/wlan_vdev_mlme.h
@@ -35,6 +35,9 @@
#define WLAN_VDEV_MLME_TYPE_STA 0x2
#define WLAN_VDEV_MLME_TYPE_IBSS 0x3
#define WLAN_VDEV_MLME_TYPE_MONITOR 0x4
+#define WLAN_VDEV_MLME_TYPE_NAN 0x5
+#define WLAN_VDEV_MLME_TYPE_OCB 0x6
+#define WLAN_VDEV_MLME_TYPE_NDI 0x7
/* values for vdev_subtype */
#define WLAN_VDEV_MLME_SUBTYPE_P2P_DEVICE 0x1
diff --git a/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c b/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c
index 70404a1..493a73f 100644
--- a/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c
+++ b/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c
@@ -34,6 +34,7 @@
#include <wlan_dfs_tgt_api.h>
#include <wlan_dfs_utils_api.h>
#include <wlan_vdev_mgr_ucfg_api.h>
+#include <qdf_module.h>
static QDF_STATUS vdev_mgr_create_param_update(
struct vdev_mlme_obj *mlme_obj,
diff --git a/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.h b/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.h
index 06ba419..df683dc 100644
--- a/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.h
+++ b/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.h
@@ -223,11 +223,11 @@
*
* Return: QDF_STATUS - Success or Failure
*/
-QDF_STATUS vdev_mlme_multiple_restart_send(struct wlan_objmgr_pdev *pdev,
- struct mlme_channel_param *chan,
- uint32_t disable_hw_ack,
- uint32_t *vdev_ids,
- uint32_t num_vdevs);
+QDF_STATUS vdev_mgr_multiple_restart_send(struct wlan_objmgr_pdev *pdev,
+ struct mlme_channel_param *chan,
+ uint32_t disable_hw_ack,
+ uint32_t *vdev_ids,
+ uint32_t num_vdevs);
/**
* vdev_mgr_peer_delete_all_send() – MLME API to send peer delete all request
diff --git a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_api.h b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_api.h
index b8b6505..92669e5 100644
--- a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_api.h
+++ b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_api.h
@@ -30,15 +30,27 @@
#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
/**
- * tgt_vdev_mgr_register_rx_ops(): API to register rx ops with lmac
+ * tgt_vdev_mgr_register_rx_ops() - API to register rx ops with lmac
* @rx_ops: rx ops struct
*
* Return: none
*/
void tgt_vdev_mgr_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops);
+
+/**
+ * tgt_vdev_mgr_ext_tbttoffset_update_handle() - API to handle ext tbtt offset
+ * update event
+ * @num_vdevs: number of vdevs
+ * @is_ext: ext is set/reset
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
+ */
+QDF_STATUS
+tgt_vdev_mgr_ext_tbttoffset_update_handle(uint32_t num_vdevs, bool is_ext);
+
#else
/**
- * tgt_vdev_mgr_register_rx_ops(): API to register rx ops with lmac
+ * tgt_vdev_mgr_register_rx_ops() - API to register rx ops with lmac
* @rx_ops: rx ops struct
*
* Return: none
diff --git a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_rx_api.c b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_rx_api.c
index 6dfba4e..674c160 100644
--- a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_rx_api.c
+++ b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_rx_api.c
@@ -208,7 +208,7 @@
return status;
}
-static QDF_STATUS
+QDF_STATUS
tgt_vdev_mgr_ext_tbttoffset_update_handle(uint32_t num_vdevs, bool is_ext)
{
QDF_STATUS status = QDF_STATUS_E_FAILURE;
diff --git a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_ucfg_api.c b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_ucfg_api.c
index 779755d..6582f3c 100644
--- a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_ucfg_api.c
+++ b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_ucfg_api.c
@@ -28,6 +28,7 @@
#include <wlan_mlme_dbg.h>
#include <wlan_vdev_mgr_utils_api.h>
#include <wlan_vdev_mlme_api.h>
+#include <qdf_module.h>
void ucfg_wlan_vdev_mgr_get_param_bssid(
struct wlan_objmgr_vdev *vdev,
diff --git a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c
index 87f89e8..192c6ad 100644
--- a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c
+++ b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c
@@ -26,6 +26,7 @@
#include <wlan_vdev_mgr_tgt_if_tx_api.h>
#include <cdp_txrx_cmn_struct.h>
#include <wlan_mlme_dbg.h>
+#include <qdf_module.h>
static QDF_STATUS vdev_mgr_config_ratemask_update(
struct vdev_mlme_obj *mlme_obj,
@@ -60,6 +61,24 @@
case QDF_MONITOR_MODE:
cdp_txrx_opmode = wlan_op_mode_monitor;
break;
+ case QDF_P2P_DEVICE_MODE:
+ cdp_txrx_opmode = wlan_op_mode_ap;
+ break;
+ case QDF_P2P_CLIENT_MODE:
+ cdp_txrx_opmode = wlan_op_mode_sta;
+ break;
+ case QDF_P2P_GO_MODE:
+ cdp_txrx_opmode = wlan_op_mode_ap;
+ break;
+ case QDF_OCB_MODE:
+ cdp_txrx_opmode = wlan_op_mode_ocb;
+ break;
+ case QDF_IBSS_MODE:
+ cdp_txrx_opmode = wlan_op_mode_ibss;
+ break;
+ case QDF_NDI_MODE:
+ cdp_txrx_opmode = wlan_op_mode_ndi;
+ break;
default:
cdp_txrx_opmode = wlan_op_mode_unknown;
};
diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h
index 2d23dfd..b2b10bb 100644
--- a/wmi/inc/wmi_unified_param.h
+++ b/wmi/inc/wmi_unified_param.h
@@ -5023,6 +5023,7 @@
wmi_pdev_param_set_mu_ppdu_duration,
wmi_pdev_param_set_tbtt_ctrl,
wmi_pdev_param_set_cmd_obss_pd_threshold,
+ wmi_pdev_param_set_cmd_obss_pd_per_ac,
wmi_pdev_param_max,
} wmi_conv_pdev_params_id;
@@ -5348,6 +5349,7 @@
wmi_service_data_stall_recovery_support,
wmi_service_tx_compl_tsf64,
wmi_service_vdev_delete_all_peer,
+ wmi_service_three_way_coex_config_legacy,
wmi_services_max,
} wmi_conv_service_ids;
#define WMI_SERVICE_UNAVAILABLE 0xFFFF
@@ -5469,6 +5471,7 @@
* @twt_ap_sta_count: Max no of STA with which TWT sessions can be formed
* by the AP
* @max_bssid_indicator: max number of MBSS VAPs
+ * @three_way_coex_config_legacy_en: enable three way coex legacy feature
*/
typedef struct {
uint32_t num_vdevs;
@@ -5551,6 +5554,7 @@
uint32_t eapol_minrate_set:1,
eapol_minrate_ac_set:2;
bool tstamp64_en;
+ bool three_way_coex_config_legacy_en;
} target_resource_config;
/**
diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c
index 860032d..899567c 100644
--- a/wmi/src/wmi_unified_api.c
+++ b/wmi/src/wmi_unified_api.c
@@ -20,6 +20,7 @@
#include "wmi_unified_param.h"
#include "qdf_module.h"
#include "cdp_txrx_cmn_struct.h"
+#include <wmi_unified_vdev_api.h>
static const wmi_host_channel_width mode_to_width[WMI_HOST_MODE_MAX] = {
[WMI_HOST_MODE_11A] = WMI_HOST_CHAN_WIDTH_20,
diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c
index 6fe44ec..5e0e053 100644
--- a/wmi/src/wmi_unified_tlv.c
+++ b/wmi/src/wmi_unified_tlv.c
@@ -60,6 +60,7 @@
#ifdef WMI_AP_SUPPORT
#include "wmi_unified_ap_api.h"
#endif
+#include <wmi_unified_vdev_api.h>
/* HTC service ids for WMI for multi-radio */
static const uint32_t multi_svc_ids[] = {WMI_CONTROL_SVC,
@@ -316,6 +317,8 @@
WMI_PDEV_PARAM_SET_TBTT_CTRL,
[wmi_pdev_param_set_cmd_obss_pd_threshold] =
WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD,
+ [wmi_pdev_param_set_cmd_obss_pd_per_ac] =
+ WMI_PDEV_PARAM_SET_CMD_OBSS_PD_PER_AC,
};
/**
@@ -6501,6 +6504,10 @@
WMI_RSRC_CFG_FLAG_TX_COMPLETION_TX_TSF64_ENABLE_SET(
resource_cfg->flag1, 1);
+ if (tgt_res_cfg->three_way_coex_config_legacy_en)
+ WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT_SET(
+ resource_cfg->flag1, 1);
+
wmi_copy_twt_resource_config(resource_cfg, tgt_res_cfg);
resource_cfg->peer_map_unmap_v2_support =
tgt_res_cfg->peer_map_unmap_v2;
@@ -11938,6 +11945,9 @@
#ifdef WLAN_MWS_INFO_DEBUGFS
.send_mws_coex_status_req_cmd = send_mws_coex_status_req_cmd_tlv,
#endif
+#ifdef TGT_IF_VDEV_MGR_CONV
+ .extract_vdev_delete_resp = extract_vdev_delete_resp_tlv,
+#endif
};
/**
@@ -12540,6 +12550,8 @@
WMI_SERVICE_DSM_ROAM_FILTER;
wmi_service[wmi_service_vdev_delete_all_peer] =
WMI_SERVICE_DELETE_ALL_PEER_SUPPORT;
+ wmi_service[wmi_service_three_way_coex_config_legacy] =
+ WMI_SERVICE_THREE_WAY_COEX_CONFIG_LEGACY;
}
/**