qcacld-3.0: Add support of sending multiple COEX config

Add path from osif to target_if of sending multiple COEX config, and
whether send with new multiple COEX WMI CMD depends on WMI capability.

Optimize function hdd_send_coex_config_params() which has multiple
COEX config sending to target, use new multiple COEX config path.
Keep original legacy COEX function which is not included under
FEATURE_COEX.

Change-Id: Ibb2add908466915ad17204cb4a31a38d56446615
CRs-Fixed: 3651235
This commit is contained in:
Will Huang
2023-10-26 08:39:33 +05:30
committed by Ravindra Konda
parent 4b57844470
commit 6d94246820
8 changed files with 363 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 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 above
@@ -28,6 +28,7 @@
#ifdef FEATURE_COEX
struct coex_config_params;
struct coex_multi_config;
/**
* tgt_send_coex_config() - invoke target_if send coex config
@@ -39,6 +40,27 @@ struct coex_config_params;
QDF_STATUS
tgt_send_coex_config(struct wlan_objmgr_vdev *vdev,
struct coex_config_params *param);
/**
* tgt_send_coex_multi_config() - invoke target_if send coex multiple config
* @vdev: vdev object
* @param: coex multiple config parameters
*
* Return: QDF_STATUS
*/
QDF_STATUS
tgt_send_coex_multi_config(struct wlan_objmgr_vdev *vdev,
struct coex_multi_config *param);
/**
* tgt_get_coex_multi_config_support() - invoke target_if get coex multiple
* configure support
* @psoc: PSOC object
*
* Return: true if target support coex multiple config command
*/
bool
tgt_get_coex_multi_config_support(struct wlan_objmgr_psoc *psoc);
#endif
#ifdef WLAN_FEATURE_DBAM_CONFIG

View File

@@ -109,6 +109,18 @@ ucfg_coex_psoc_get_btc_chain_mode(struct wlan_objmgr_psoc *psoc,
QDF_STATUS
ucfg_coex_send_btc_chain_mode(struct wlan_objmgr_vdev *vdev,
enum coex_btc_chain_mode mode);
/**
* ucfg_coex_send_multi_config() - API to send coex multiple config to target
* @vdev: pointer to vdev object
* @param: pointer to coex multiple config parameters
*
* Return: status of operation
*/
QDF_STATUS
ucfg_coex_send_multi_config(struct wlan_objmgr_vdev *vdev,
struct coex_multi_config *param);
/**
* ucfg_coex_send_logging_config() - API to send BT coex logging config to
* target if
@@ -146,6 +158,13 @@ ucfg_coex_send_btc_chain_mode(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
ucfg_coex_send_multi_config(struct wlan_objmgr_vdev *vdev,
struct coex_multi_config *param)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline QDF_STATUS
ucfg_coex_send_logging_config(struct wlan_objmgr_psoc *psoc,
uint32_t *apps_args)

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 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 above
@@ -84,6 +84,50 @@ tgt_send_coex_config(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
tgt_send_coex_multi_config(struct wlan_objmgr_vdev *vdev,
struct coex_multi_config *param)
{
struct wlan_lmac_if_coex_tx_ops *coex_ops;
struct wlan_objmgr_psoc *psoc;
struct wlan_objmgr_pdev *pdev;
if (!vdev) {
coex_err("NULL vdev");
return QDF_STATUS_E_NULL_VALUE;
}
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc) {
coex_err("NULL psoc");
return QDF_STATUS_E_NULL_VALUE;
}
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev) {
coex_err("NULL pdev");
return QDF_STATUS_E_NULL_VALUE;
}
coex_ops = wlan_psoc_get_coex_txops(psoc);
if (coex_ops && coex_ops->coex_multi_config_send)
return coex_ops->coex_multi_config_send(pdev, param);
return QDF_STATUS_SUCCESS;
}
bool
tgt_get_coex_multi_config_support(struct wlan_objmgr_psoc *psoc)
{
struct wlan_lmac_if_coex_tx_ops *coex_ops;
coex_ops = wlan_psoc_get_coex_txops(psoc);
if (coex_ops && coex_ops->coex_get_multi_config_support)
return coex_ops->coex_get_multi_config_support(psoc);
return false;
}
#ifdef WLAN_FEATURE_DBAM_CONFIG
QDF_STATUS
tgt_send_dbam_config(struct wlan_objmgr_vdev *vdev,

View File

@@ -23,6 +23,7 @@
#include <wlan_coex_ucfg_api.h>
#include "wmi_unified.h"
#include "wlan_coex_public_structs.h"
#include "wlan_coex_tgt_api.h"
QDF_STATUS
ucfg_coex_register_cfg_updated_handler(struct wlan_objmgr_psoc *psoc,
@@ -77,6 +78,13 @@ ucfg_coex_send_btc_chain_mode(struct wlan_objmgr_vdev *vdev,
return wlan_coex_config_send(vdev, &param);
}
QDF_STATUS
ucfg_coex_send_multi_config(struct wlan_objmgr_vdev *vdev,
struct coex_multi_config *param)
{
return wlan_coex_multi_config_send(vdev, param);
}
#ifdef WLAN_FEATURE_DBAM_CONFIG
QDF_STATUS
ucfg_coex_send_dbam_config(struct wlan_objmgr_vdev *vdev,