qcacld-3.0: Add handling to disable vdev for miracast
Add handling to disable second vdev of mac if miracast is set for one vdev. In case high throughput or low latency is required for particular vdev then another vdev on same mac should be disabled, if present in MCC. Change-Id: I36cc19f442130b098c4a02ec0ebcf69b89dd2a3c CRs-Fixed: 3219512
Dieser Commit ist enthalten in:

committet von
Madan Koyyalamudi

Ursprung
f18f044e74
Commit
56cde67530
@@ -1113,28 +1113,6 @@ QDF_STATUS mlme_get_cfg_wlm_reset(struct wlan_objmgr_psoc *psoc,
|
||||
void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_mlme_lfr_cfg *lfr);
|
||||
|
||||
/**
|
||||
* wlan_mlme_mlo_sta_mlo_concurency_set_link() - Set links for MLO STA
|
||||
*
|
||||
* @vdev: vdev object
|
||||
* @reason: Reason for which link is forced
|
||||
* @mode: Force reason
|
||||
* @num_mlo_vdev: number of mlo vdev
|
||||
* @mlo_vdev_lst: MLO STA vdev list
|
||||
|
||||
* Interface manager Set links for MLO STA
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
void
|
||||
wlan_mlo_sta_mlo_concurency_set_link(struct wlan_objmgr_vdev *vdev,
|
||||
enum mlo_link_force_reason reason,
|
||||
enum mlo_link_force_mode mode,
|
||||
uint8_t num_mlo_vdev,
|
||||
uint8_t *mlo_vdev_lst);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_mac_vdev_id() - get vdev self mac address using vdev id
|
||||
* @pdev: pdev
|
||||
|
@@ -3943,79 +3943,6 @@ QDF_STATUS mlme_get_fw_scan_channels(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static void
|
||||
wlan_mlo_fill_active_link_vdev_bitmap(struct mlo_link_set_active_req *req,
|
||||
uint8_t *mlo_vdev_lst,
|
||||
uint32_t num_mlo_vdev)
|
||||
{
|
||||
uint32_t entry_idx, entry_offset, vdev_idx;
|
||||
uint8_t vdev_id;
|
||||
|
||||
for (vdev_idx = 0; vdev_idx < num_mlo_vdev; vdev_idx++) {
|
||||
vdev_id = mlo_vdev_lst[vdev_idx];
|
||||
entry_idx = vdev_id / 32;
|
||||
entry_offset = vdev_id % 32;
|
||||
if (entry_idx >= MLO_LINK_NUM_SZ) {
|
||||
mlme_err("Invalid entry_idx %d num_mlo_vdev %d vdev %d",
|
||||
entry_idx, num_mlo_vdev, vdev_id);
|
||||
continue;
|
||||
}
|
||||
req->param.vdev_bitmap[entry_idx] |= (1 << entry_offset);
|
||||
/* update entry number if entry index changed */
|
||||
if (req->param.num_vdev_bitmap < entry_idx + 1)
|
||||
req->param.num_vdev_bitmap = entry_idx + 1;
|
||||
}
|
||||
|
||||
mlme_debug("num_vdev_bitmap %d vdev_bitmap[0] = 0x%x, vdev_bitmap[1] = 0x%x",
|
||||
req->param.num_vdev_bitmap, req->param.vdev_bitmap[0],
|
||||
req->param.vdev_bitmap[1]);
|
||||
}
|
||||
|
||||
void
|
||||
wlan_mlo_sta_mlo_concurency_set_link(struct wlan_objmgr_vdev *vdev,
|
||||
enum mlo_link_force_reason reason,
|
||||
enum mlo_link_force_mode mode,
|
||||
uint8_t num_mlo_vdev,
|
||||
uint8_t *mlo_vdev_lst)
|
||||
{
|
||||
struct mlo_link_set_active_req *req;
|
||||
QDF_STATUS status;
|
||||
|
||||
req = qdf_mem_malloc(sizeof(*req));
|
||||
if (!req)
|
||||
return;
|
||||
|
||||
mlme_debug("vdev %d: mode %d num_mlo_vdev %d reason %d",
|
||||
wlan_vdev_get_id(vdev), mode, num_mlo_vdev, reason);
|
||||
|
||||
req->ctx.vdev = vdev;
|
||||
req->param.reason = reason;
|
||||
req->param.force_mode = mode;
|
||||
req->ctx.set_mlo_link_cb = policy_mgr_handle_link_enable_disable_resp;
|
||||
req->ctx.cb_arg = req;
|
||||
|
||||
/* set MLO vdev bit mask for all case */
|
||||
wlan_mlo_fill_active_link_vdev_bitmap(req, mlo_vdev_lst, num_mlo_vdev);
|
||||
|
||||
/* fill num of links for MLO_LINK_FORCE_MODE_ACTIVE_NUM */
|
||||
if (mode == MLO_LINK_FORCE_MODE_ACTIVE_NUM) {
|
||||
req->param.force_mode = MLO_LINK_FORCE_MODE_ACTIVE_NUM;
|
||||
req->param.num_link_entry = 1;
|
||||
req->param.link_num[0].num_of_link = num_mlo_vdev - 1;
|
||||
}
|
||||
|
||||
status = mlo_ser_set_link_req(req);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("vdev %d: Failed to set link mode %d num_mlo_vdev %d reason %d",
|
||||
wlan_vdev_get_id(vdev), mode, num_mlo_vdev,
|
||||
reason);
|
||||
qdf_mem_free(req);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS wlan_mlme_get_mac_vdev_id(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
struct qdf_mac_addr *self_mac)
|
||||
|
@@ -310,49 +310,78 @@ ucfg_mlme_set_fine_time_meas_cap(struct wlan_objmgr_psoc *psoc,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
ucfg_mlme_set_vdev_traffic_type(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev, bool set,
|
||||
uint8_t bit_mask)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
struct vdev_set_params param = {0};
|
||||
enum QDF_OPMODE mode;
|
||||
QDF_STATUS status;
|
||||
uint8_t vdev_id = wlan_vdev_get_id(vdev);
|
||||
uint8_t prev_traffic_type;
|
||||
|
||||
mode = wlan_vdev_mlme_get_opmode(vdev);
|
||||
if (mode != QDF_SAP_MODE && mode != QDF_P2P_CLIENT_MODE &&
|
||||
mode != QDF_P2P_GO_MODE) {
|
||||
mlme_legacy_debug("vdev %d: not supported for opmode %d",
|
||||
vdev_id, mode);
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||
if (!vdev_mlme) {
|
||||
mlme_legacy_err("vdev %d: bit_mask 0x%x, set %d, vdev mlme is null",
|
||||
vdev_id, bit_mask, set);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev %d: bit_mask 0x%x, set %d, vmlme_priv is null",
|
||||
vdev_id, bit_mask, set);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
prev_traffic_type = mlme_priv->vdev_traffic_type;
|
||||
if (set)
|
||||
mlme_priv->vdev_traffic_type |= bit_mask;
|
||||
else
|
||||
mlme_priv->vdev_traffic_type &= ~bit_mask;
|
||||
|
||||
if (prev_traffic_type == mlme_priv->vdev_traffic_type) {
|
||||
mlme_legacy_debug("vdev %d: No change in value 0x%x, set %d mask 0x%x",
|
||||
vdev_id, mlme_priv->vdev_traffic_type, set,
|
||||
bit_mask);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
mlme_legacy_debug("vdev %d: vdev_traffic_type 0x%x (set %d with bit_mask 0x%x)",
|
||||
vdev_id, mlme_priv->vdev_traffic_type, set, bit_mask);
|
||||
param.param_id = WMI_VDEV_PARAM_VDEV_TRAFFIC_CONFIG;
|
||||
param.vdev_id = vdev_id;
|
||||
param.param_value = mlme_priv->vdev_traffic_type;
|
||||
status = tgt_vdev_mgr_set_param_send(vdev_mlme, ¶m);
|
||||
policy_mgr_handle_ml_sta_link_on_traffic_type_change(psoc, vdev);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
ucfg_mlme_set_vdev_traffic_low_latency(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, bool set)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
struct vdev_set_params param = {0};
|
||||
QDF_STATUS status;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_OBJMGR_ID);
|
||||
if (!vdev) {
|
||||
mlme_legacy_err("vdev object is NULL for vdev %d",
|
||||
mlme_legacy_err("vdev %d: vdev not found",
|
||||
vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||
if (!vdev_mlme) {
|
||||
mlme_legacy_err("vdev vdev_mlme object is NULL");
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (set)
|
||||
mlme_priv->vdev_traffic_type |= PM_VDEV_TRAFFIC_LOW_LATENCY;
|
||||
else
|
||||
mlme_priv->vdev_traffic_type &= ~PM_VDEV_TRAFFIC_LOW_LATENCY;
|
||||
|
||||
mlme_legacy_debug("low_latency flag 0x%x set %d on vdev %d",
|
||||
mlme_priv->vdev_traffic_type, set, vdev_id);
|
||||
param.param_id = WMI_VDEV_PARAM_VDEV_TRAFFIC_CONFIG;
|
||||
param.vdev_id = vdev_id;
|
||||
param.param_value = mlme_priv->vdev_traffic_type;
|
||||
status = tgt_vdev_mgr_set_param_send(vdev_mlme, ¶m);
|
||||
|
||||
status = ucfg_mlme_set_vdev_traffic_type(psoc, vdev, set,
|
||||
PM_VDEV_TRAFFIC_LOW_LATENCY);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
|
||||
return status;
|
||||
@@ -363,44 +392,17 @@ ucfg_mlme_set_vdev_traffic_high_throughput(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, bool set)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
struct vdev_set_params param = {0};
|
||||
QDF_STATUS status;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_OBJMGR_ID);
|
||||
if (!vdev) {
|
||||
mlme_legacy_err("vdev object is NULL for vdev %d",
|
||||
mlme_legacy_err("vdev %d: vdev not found",
|
||||
vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||
if (!vdev_mlme) {
|
||||
mlme_legacy_err("vdev vdev_mlme object is NULL");
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (set)
|
||||
mlme_priv->vdev_traffic_type |= PM_VDEV_TRAFFIC_HIGH_TPUT;
|
||||
else
|
||||
mlme_priv->vdev_traffic_type &= ~PM_VDEV_TRAFFIC_HIGH_TPUT;
|
||||
|
||||
mlme_legacy_debug("high_throughput flag 0x%x set %d on vdev %d",
|
||||
mlme_priv->vdev_traffic_type, set, vdev_id);
|
||||
param.param_id = WMI_VDEV_PARAM_VDEV_TRAFFIC_CONFIG;
|
||||
param.vdev_id = vdev_id;
|
||||
param.param_value = mlme_priv->vdev_traffic_type;
|
||||
status = tgt_vdev_mgr_set_param_send(vdev_mlme, ¶m);
|
||||
|
||||
status = ucfg_mlme_set_vdev_traffic_type(psoc, vdev, set,
|
||||
PM_VDEV_TRAFFIC_HIGH_TPUT);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
|
||||
return status;
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren