qcacld-3.0: Set to_fw bit in DP vdev for Direct link use case
Set to_fw bit in DP vdev for direct link use case and also set it when the use case is unspecified as well. Change-Id: I7306e22e81303720830cfce4ce19b15d2080d93c CRs-Fixed: 3369891
This commit is contained in:

committed by
Madan Koyyalamudi

parent
150cbe51be
commit
9972a80234
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
#include <htc_api.h>
|
#include <htc_api.h>
|
||||||
#ifdef FEATURE_DIRECT_LINK
|
#ifdef FEATURE_DIRECT_LINK
|
||||||
#include "dp_internal.h"
|
#include "dp_internal.h"
|
||||||
|
#include "cdp_txrx_ctrl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Global DP context */
|
/* Global DP context */
|
||||||
@@ -1731,6 +1732,8 @@ QDF_STATUS dp_config_direct_link(struct wlan_dp_intf *dp_intf,
|
|||||||
struct direct_link_info *config = &dp_intf->direct_link_config;
|
struct direct_link_info *config = &dp_intf->direct_link_config;
|
||||||
void *htc_handle;
|
void *htc_handle;
|
||||||
bool prev_ll, update_ll;
|
bool prev_ll, update_ll;
|
||||||
|
cdp_config_param_type vdev_param = {0};
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
if (!dp_ctx || !dp_ctx->psoc) {
|
if (!dp_ctx || !dp_ctx->psoc) {
|
||||||
dp_err("DP Handle is NULL");
|
dp_err("DP Handle is NULL");
|
||||||
@@ -1753,6 +1756,10 @@ QDF_STATUS dp_config_direct_link(struct wlan_dp_intf *dp_intf,
|
|||||||
update_ll = config_direct_link ? enable_low_latency : prev_ll;
|
update_ll = config_direct_link ? enable_low_latency : prev_ll;
|
||||||
config->config_set = config_direct_link;
|
config->config_set = config_direct_link;
|
||||||
config->low_latency = enable_low_latency;
|
config->low_latency = enable_low_latency;
|
||||||
|
vdev_param.cdp_vdev_tx_to_fw = config_direct_link;
|
||||||
|
status = cdp_txrx_set_vdev_param(wlan_psoc_get_dp_handle(dp_ctx->psoc),
|
||||||
|
dp_intf->intf_id, CDP_VDEV_TX_TO_FW,
|
||||||
|
vdev_param);
|
||||||
qdf_spin_unlock(&dp_intf->vdev_lock);
|
qdf_spin_unlock(&dp_intf->vdev_lock);
|
||||||
|
|
||||||
if (config_direct_link) {
|
if (config_direct_link) {
|
||||||
@@ -1773,6 +1780,6 @@ QDF_STATUS dp_config_direct_link(struct wlan_dp_intf *dp_intf,
|
|||||||
dp_info("Direct link config cleared.");
|
dp_info("Direct link config cleared.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return status;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -610,20 +610,6 @@ dp_softap_inspect_traffic_end_indication_pkt(struct wlan_dp_intf *dp_intf,
|
|||||||
{}
|
{}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FEATURE_DIRECT_LINK
|
|
||||||
static inline void dp_intf_tx_to_fw(struct wlan_dp_intf *dp_intf,
|
|
||||||
qdf_nbuf_t nbuf)
|
|
||||||
{
|
|
||||||
if (qdf_unlikely(dp_intf->direct_link_config.config_set))
|
|
||||||
QDF_NBUF_CB_TX_PACKET_TO_FW(nbuf) = 1;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline void dp_intf_tx_to_fw(struct wlan_dp_intf *dp_intf,
|
|
||||||
qdf_nbuf_t nbuf)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_softap_start_xmit() - Transmit a frame
|
* dp_softap_start_xmit() - Transmit a frame
|
||||||
* @nbuf: pointer to Network buffer
|
* @nbuf: pointer to Network buffer
|
||||||
@@ -686,8 +672,6 @@ QDF_STATUS dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_dp_intf *dp_intf)
|
|||||||
if (dp_softap_traffic_end_indication_enabled(dp_intf))
|
if (dp_softap_traffic_end_indication_enabled(dp_intf))
|
||||||
dp_softap_inspect_traffic_end_indication_pkt(dp_intf, nbuf);
|
dp_softap_inspect_traffic_end_indication_pkt(dp_intf, nbuf);
|
||||||
|
|
||||||
dp_intf_tx_to_fw(dp_intf, nbuf);
|
|
||||||
|
|
||||||
dp_softap_config_tx_pkt_tracing(dp_intf, nbuf);
|
dp_softap_config_tx_pkt_tracing(dp_intf, nbuf);
|
||||||
|
|
||||||
/* check whether need to linearize skb, like non-linear udp data */
|
/* check whether need to linearize skb, like non-linear udp data */
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -40,6 +40,39 @@
|
|||||||
#include "wlan_dp_prealloc.h"
|
#include "wlan_dp_prealloc.h"
|
||||||
#include "wlan_dp_rx_thread.h"
|
#include "wlan_dp_rx_thread.h"
|
||||||
|
|
||||||
|
#ifdef FEATURE_DIRECT_LINK
|
||||||
|
/**
|
||||||
|
* wlan_dp_set_vdev_direct_link_cfg() - Set direct link config in DP vdev
|
||||||
|
* @psoc: objmgr psoc handle
|
||||||
|
* @dp_intf: pointer to DP component interface handle
|
||||||
|
*
|
||||||
|
* Return: direct link configuration
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
QDF_STATUS wlan_dp_set_vdev_direct_link_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct wlan_dp_intf *dp_intf)
|
||||||
|
{
|
||||||
|
cdp_config_param_type vdev_param = {0};
|
||||||
|
|
||||||
|
if (dp_intf->device_mode != QDF_SAP_MODE ||
|
||||||
|
!dp_intf->dp_ctx->dp_direct_link_ctx)
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
vdev_param.cdp_vdev_tx_to_fw = dp_intf->direct_link_config.config_set;
|
||||||
|
|
||||||
|
return cdp_txrx_set_vdev_param(wlan_psoc_get_dp_handle(psoc),
|
||||||
|
dp_intf->intf_id, CDP_VDEV_TX_TO_FW,
|
||||||
|
vdev_param);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
QDF_STATUS wlan_dp_set_vdev_direct_link_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct wlan_dp_intf *dp_intf)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void ucfg_dp_update_inf_mac(struct wlan_objmgr_psoc *psoc,
|
void ucfg_dp_update_inf_mac(struct wlan_objmgr_psoc *psoc,
|
||||||
struct qdf_mac_addr *cur_mac,
|
struct qdf_mac_addr *cur_mac,
|
||||||
struct qdf_mac_addr *new_mac)
|
struct qdf_mac_addr *new_mac)
|
||||||
@@ -62,6 +95,8 @@ void ucfg_dp_update_inf_mac(struct wlan_objmgr_psoc *psoc,
|
|||||||
QDF_MAC_ADDR_REF(new_mac->bytes));
|
QDF_MAC_ADDR_REF(new_mac->bytes));
|
||||||
|
|
||||||
qdf_copy_macaddr(&dp_intf->mac_addr, new_mac);
|
qdf_copy_macaddr(&dp_intf->mac_addr, new_mac);
|
||||||
|
|
||||||
|
wlan_dp_set_vdev_direct_link_cfg(psoc, dp_intf);
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2018-2021 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
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -352,6 +352,18 @@ QDF_STATUS ucfg_mlme_set_ap_policy(struct wlan_objmgr_vdev *vdev,
|
|||||||
return wlan_mlme_set_ap_policy(vdev, ap_cfg_policy);
|
return wlan_mlme_set_ap_policy(vdev, ap_cfg_policy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_get_ap_policy() - Get the AP policy value
|
||||||
|
* @vdev: pointer to vdev object
|
||||||
|
*
|
||||||
|
* Return: enum host_concurrent_ap_policy
|
||||||
|
*/
|
||||||
|
static inline enum host_concurrent_ap_policy
|
||||||
|
ucfg_mlme_get_ap_policy(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
return wlan_mlme_get_ap_policy(vdev);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_mlme_get_prevent_link_down() - Get the prevent link down config
|
* ucfg_mlme_get_prevent_link_down() - Get the prevent link down config
|
||||||
* @psoc: pointer to psoc object
|
* @psoc: pointer to psoc object
|
||||||
|
@@ -14182,19 +14182,50 @@ uint8_t hdd_get_sap_operating_band(struct hdd_context *hdd_ctx)
|
|||||||
return operating_band;
|
return operating_band;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
static inline QDF_STATUS
|
||||||
QDF_STATUS wlan_hdd_config_dp_direct_link_profile(struct wlan_objmgr_vdev *vdev,
|
wlan_hdd_config_dp_direct_link_profile(struct wlan_objmgr_vdev *vdev,
|
||||||
uint8_t ap_config)
|
enum host_concurrent_ap_policy ap_policy)
|
||||||
{
|
{
|
||||||
switch (ap_config) {
|
enum host_concurrent_ap_policy prev_ap_policy;
|
||||||
case QCA_WLAN_CONCURRENT_AP_POLICY_GAMING_AUDIO:
|
|
||||||
return ucfg_dp_config_direct_link(vdev, true, true);
|
prev_ap_policy = ucfg_mlme_get_ap_policy(vdev);
|
||||||
case QCA_WLAN_CONCURRENT_AP_POLICY_LOSSLESS_AUDIO_STREAMING:
|
|
||||||
return ucfg_dp_config_direct_link(vdev, true, false);
|
hdd_debug("Current AP policy %d prev AP policy %d", ap_policy,
|
||||||
case QCA_WLAN_CONCURRENT_AP_POLICY_UNSPECIFIED:
|
prev_ap_policy);
|
||||||
|
|
||||||
|
switch (prev_ap_policy) {
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_UNSPECIFIED:
|
||||||
|
switch (ap_policy) {
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_LOSSLESS_AUDIO_STREAMING:
|
||||||
|
return ucfg_dp_config_direct_link(vdev, true, false);
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_GAMING_AUDIO:
|
||||||
|
return ucfg_dp_config_direct_link(vdev, true, true);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_GAMING_AUDIO:
|
||||||
|
switch (ap_policy) {
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_UNSPECIFIED:
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_LOSSLESS_AUDIO_STREAMING:
|
||||||
|
return ucfg_dp_config_direct_link(vdev, true, false);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_LOSSLESS_AUDIO_STREAMING:
|
||||||
|
switch (ap_policy) {
|
||||||
|
case HOST_CONCURRENT_AP_POLICY_GAMING_AUDIO:
|
||||||
|
return ucfg_dp_config_direct_link(vdev, true, true);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return ucfg_dp_config_direct_link(vdev, false, false);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct nla_policy
|
const struct nla_policy
|
||||||
@@ -14390,13 +14421,14 @@ static int __wlan_hdd_cfg80211_ap_policy(struct wlan_objmgr_vdev *vdev,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = wlan_hdd_config_dp_direct_link_profile(vdev, ap_config);
|
ap_cfg_policy = wlan_mlme_convert_ap_policy_config(ap_config);
|
||||||
|
|
||||||
|
status = wlan_hdd_config_dp_direct_link_profile(vdev, ap_cfg_policy);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
hdd_err("failed to set DP ap config");
|
hdd_err("failed to set DP ap config");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ap_cfg_policy = wlan_mlme_convert_ap_policy_config(ap_config);
|
|
||||||
status = ucfg_mlme_set_ap_policy(vdev, ap_cfg_policy);
|
status = ucfg_mlme_set_ap_policy(vdev, ap_cfg_policy);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
hdd_err("failed to set MLME ap config");
|
hdd_err("failed to set MLME ap config");
|
||||||
|
Reference in New Issue
Block a user