qcacld-3.0: Add bus bandwidth API
Add bus bandwidth API to DP component Change-Id: I2957671a89d0d425007c373e52dd4db30193fc17 CRs-Fixed: 3165071
This commit is contained in:

committed by
Madan Koyyalamudi

parent
3649d6a5e5
commit
23c9db7762
@@ -29,6 +29,9 @@
|
|||||||
|
|
||||||
#define NUM_RX_QUEUES 5
|
#define NUM_RX_QUEUES 5
|
||||||
|
|
||||||
|
#define dp_enter() QDF_TRACE_ENTER(QDF_MODULE_ID_DP, "enter")
|
||||||
|
#define dp_exit() QDF_TRACE_EXIT(QDF_MODULE_ID_DP, "exit")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_allocate_ctx() - Allocate DP context
|
* dp_allocate_ctx() - Allocate DP context
|
||||||
*
|
*
|
||||||
@@ -238,6 +241,72 @@ void dp_dettach_ctx(void);
|
|||||||
*/
|
*/
|
||||||
struct wlan_dp_psoc_context *dp_get_context(void);
|
struct wlan_dp_psoc_context *dp_get_context(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_add_latency_critical_client() - Add latency critical client
|
||||||
|
* @vdev: pointer to vdev object (Should not be NULL)
|
||||||
|
* @phymode: the phymode of the connected adapter
|
||||||
|
*
|
||||||
|
* This function checks if the present connection is latency critical
|
||||||
|
* and adds to the latency critical clients count and informs the
|
||||||
|
* datapath about this connection being latency critical.
|
||||||
|
*
|
||||||
|
* Returns: None
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
dp_add_latency_critical_client(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum qca_wlan_802_11_mode phymode)
|
||||||
|
{
|
||||||
|
struct wlan_dp_intf *dp_intf = dp_get_vdev_priv_obj(vdev);
|
||||||
|
|
||||||
|
switch (phymode) {
|
||||||
|
case QCA_WLAN_802_11_MODE_11A:
|
||||||
|
case QCA_WLAN_802_11_MODE_11G:
|
||||||
|
qdf_atomic_inc(&dp_intf->dp_ctx->num_latency_critical_clients);
|
||||||
|
|
||||||
|
dp_debug("Adding latency critical connection for vdev %d",
|
||||||
|
dp_intf->intf_id);
|
||||||
|
cdp_vdev_inform_ll_conn(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
|
dp_intf->intf_id,
|
||||||
|
CDP_VDEV_LL_CONN_ADD);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_del_latency_critical_client() - Add tlatency critical client
|
||||||
|
* @vdev: pointer to vdev object (Should not be NULL)
|
||||||
|
* @phymode: the phymode of the connected adapter
|
||||||
|
*
|
||||||
|
* This function checks if the present connection was latency critical
|
||||||
|
* and removes from the latency critical clients count and informs the
|
||||||
|
* datapath about the removed connection being latency critical.
|
||||||
|
*
|
||||||
|
* Returns: None
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
dp_del_latency_critical_client(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum qca_wlan_802_11_mode phymode)
|
||||||
|
{
|
||||||
|
struct wlan_dp_intf *dp_intf = dp_get_vdev_priv_obj(vdev);
|
||||||
|
|
||||||
|
switch (phymode) {
|
||||||
|
case QCA_WLAN_802_11_MODE_11A:
|
||||||
|
case QCA_WLAN_802_11_MODE_11G:
|
||||||
|
qdf_atomic_dec(&dp_intf->dp_ctx->num_latency_critical_clients);
|
||||||
|
|
||||||
|
dp_info("Removing latency critical connection for vdev %d",
|
||||||
|
dp_intf->intf_id);
|
||||||
|
cdp_vdev_inform_ll_conn(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
|
dp_intf->intf_id,
|
||||||
|
CDP_VDEV_LL_CONN_DEL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_send_rps_ind() - send rps indication to daemon
|
* dp_send_rps_ind() - send rps indication to daemon
|
||||||
* @dp_intf: DP interface
|
* @dp_intf: DP interface
|
||||||
|
@@ -31,6 +31,8 @@
|
|||||||
#include "wlan_dp_objmgr.h"
|
#include "wlan_dp_objmgr.h"
|
||||||
#include <cdp_txrx_misc.h>
|
#include <cdp_txrx_misc.h>
|
||||||
#include "qdf_periodic_work.h"
|
#include "qdf_periodic_work.h"
|
||||||
|
#include <cds_api.h>
|
||||||
|
#include "pld_common.h"
|
||||||
|
|
||||||
#ifndef NUM_CPUS
|
#ifndef NUM_CPUS
|
||||||
#ifdef QCA_CONFIG_SMP
|
#ifdef QCA_CONFIG_SMP
|
||||||
@@ -255,6 +257,7 @@ struct dp_stats {
|
|||||||
* @tx_rx_disallow_mask: TX/RX disallow mask
|
* @tx_rx_disallow_mask: TX/RX disallow mask
|
||||||
* @vdev: object manager vdev context
|
* @vdev: object manager vdev context
|
||||||
* @dev: netdev reference
|
* @dev: netdev reference
|
||||||
|
* @stats: Netdev stats
|
||||||
*/
|
*/
|
||||||
struct wlan_dp_intf {
|
struct wlan_dp_intf {
|
||||||
struct wlan_dp_psoc_context *dp_ctx;
|
struct wlan_dp_psoc_context *dp_ctx;
|
||||||
@@ -279,6 +282,7 @@ struct wlan_dp_intf {
|
|||||||
uint32_t periodic_stats_timer_counter;
|
uint32_t periodic_stats_timer_counter;
|
||||||
qdf_mutex_t sta_periodic_stats_lock;
|
qdf_mutex_t sta_periodic_stats_lock;
|
||||||
#endif /* WLAN_FEATURE_PERIODIC_STA_STATS */
|
#endif /* WLAN_FEATURE_PERIODIC_STA_STATS */
|
||||||
|
qdf_net_dev_stats stats;
|
||||||
#ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
|
#ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
|
||||||
unsigned long prev_rx_packets;
|
unsigned long prev_rx_packets;
|
||||||
unsigned long prev_tx_packets;
|
unsigned long prev_tx_packets;
|
||||||
@@ -377,5 +381,4 @@ struct wlan_dp_psoc_context {
|
|||||||
struct bbm_context *bbm_ctx;
|
struct bbm_context *bbm_ctx;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* end of _WLAN_DP_PRIV_STRUCT_H_ */
|
#endif /* end of _WLAN_DP_PRIV_STRUCT_H_ */
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -30,6 +30,7 @@
|
|||||||
#include <wlan_objmgr_psoc_obj.h>
|
#include <wlan_objmgr_psoc_obj.h>
|
||||||
#include "wlan_dp_public_struct.h"
|
#include "wlan_dp_public_struct.h"
|
||||||
#include "wlan_dp_priv.h"
|
#include "wlan_dp_priv.h"
|
||||||
|
#include <cdp_txrx_misc.h>
|
||||||
|
|
||||||
typedef const enum bus_bw_level
|
typedef const enum bus_bw_level
|
||||||
bus_bw_table_type[QCA_WLAN_802_11_MODE_INVALID][TPUT_LEVEL_MAX];
|
bus_bw_table_type[QCA_WLAN_802_11_MODE_INVALID][TPUT_LEVEL_MAX];
|
||||||
@@ -153,6 +154,27 @@ dp_rtpm_tput_policy_get_vote(struct wlan_dp_psoc_context *dp_ctx)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
#endif /* WLAN_FEATURE_DP_BUS_BANDWIDTH && FEATURE_RUNTIME_PM */
|
#endif /* WLAN_FEATURE_DP_BUS_BANDWIDTH && FEATURE_RUNTIME_PM */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_set_high_bus_bw_request() - Set High Bandwidth request value
|
||||||
|
* @psoc: psoc handle
|
||||||
|
* @vdev_id: Vdev ID
|
||||||
|
* @high_bus_bw : Flag to set or clear high bandwidth request
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static inline void dp_set_high_bus_bw_request(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
bool high_bus_bw)
|
||||||
|
{
|
||||||
|
struct wlan_dp_psoc_context *dp_ctx = dp_psoc_get_priv(psoc);
|
||||||
|
|
||||||
|
if (high_bus_bw)
|
||||||
|
dp_ctx->high_bus_bw_request |= (1 << vdev_id);
|
||||||
|
else
|
||||||
|
dp_ctx->high_bus_bw_request &= ~(1 << vdev_id);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
|
#ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
|
||||||
/**
|
/**
|
||||||
* dp_reset_tcp_delack() - Reset tcp delack value to default
|
* dp_reset_tcp_delack() - Reset tcp delack value to default
|
||||||
@@ -177,23 +199,159 @@ void wlan_dp_update_tcp_rx_param(struct wlan_dp_psoc_context *dp_ctx,
|
|||||||
#ifdef RX_PERFORMANCE
|
#ifdef RX_PERFORMANCE
|
||||||
/**
|
/**
|
||||||
* dp_is_current_high_throughput() - Check if vote level is high
|
* dp_is_current_high_throughput() - Check if vote level is high
|
||||||
* @psoc: psoc handle
|
* @dp_ctx: Pointer to DP context
|
||||||
*
|
*
|
||||||
* Function used to check if vote level is high
|
* Function used to check if vote level is high
|
||||||
*
|
*
|
||||||
* Return: True if vote level is high
|
* Return: True if vote level is high
|
||||||
*/
|
*/
|
||||||
bool dp_is_current_high_throughput(struct wlan_objmgr_psoc *psoc);
|
bool dp_is_current_high_throughput(struct wlan_dp_psoc_context *dp_ctx);
|
||||||
#else
|
#else
|
||||||
static inline
|
static inline
|
||||||
bool dp_is_current_high_throughput(struct wlan_objmgr_psoc *psoc)
|
bool dp_is_current_high_throughput(struct wlan_dp_psoc_context *dp_ctx)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif /* RX_PERFORMANCE */
|
#endif /* RX_PERFORMANCE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_reset_tcp_delack() - Reset TCP delack
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_reset_tcp_delack(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_get_current_throughput_level() - Get the current vote
|
||||||
|
* level
|
||||||
|
* @dp_ctx: DP Context handle
|
||||||
|
*
|
||||||
|
* Return: current vote level
|
||||||
|
*/
|
||||||
|
static inline enum pld_bus_width_type
|
||||||
|
dp_get_current_throughput_level(struct wlan_dp_psoc_context *dp_ctx)
|
||||||
|
{
|
||||||
|
return dp_ctx->cur_vote_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_set_current_throughput_level() - update the current vote
|
||||||
|
* level
|
||||||
|
* @psoc: psoc object
|
||||||
|
* @next_vote_level: pld_bus_width_type voting level
|
||||||
|
*
|
||||||
|
* This function updates the current vote level to the new level
|
||||||
|
* provided
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
dp_set_current_throughput_level(struct wlan_objmgr_psoc *psoc,
|
||||||
|
enum pld_bus_width_type next_vote_level)
|
||||||
|
{
|
||||||
|
struct wlan_dp_psoc_context *dp_ctx = dp_psoc_get_priv(psoc);
|
||||||
|
|
||||||
|
dp_ctx->cur_vote_level = next_vote_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_dp_display_tx_rx_histogram() - display tx rx histogram
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
void wlan_dp_display_tx_rx_histogram(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_dp_clear_tx_rx_histogram() - clear tx rx histogram
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
void wlan_dp_clear_tx_rx_histogram(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bandwidth_init() - Initialize bus bandwidth data structures.
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Initialize bus bandwidth related data structures like spinlock and timer.
|
||||||
|
*
|
||||||
|
* Return: None.
|
||||||
|
*/
|
||||||
|
int dp_bus_bandwidth_init(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bandwidth_deinit() - De-initialize bus bandwidth data structures.
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* De-initialize bus bandwidth related data structures like timer.
|
||||||
|
*
|
||||||
|
* Return: None.
|
||||||
|
*/
|
||||||
|
void dp_bus_bandwidth_deinit(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bw_compute_timer_start() - start the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_bus_bw_compute_timer_start(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bw_compute_timer_try_start() - try to start the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* This function ensures there is at least one interface in the assoc state
|
||||||
|
* before starting the bandwidth timer.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_bus_bw_compute_timer_try_start(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bw_compute_timer_stop() - stop the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_bus_bw_compute_timer_stop(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bw_compute_timer_try_stop() - try to stop the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* This function ensures there are no interface in the assoc state before
|
||||||
|
* stopping the bandwidth timer.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_bus_bw_compute_timer_try_stop(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bw_compute_prev_txrx_stats() - get tx and rx stats
|
||||||
|
* @vdev: vdev handle
|
||||||
|
*
|
||||||
|
* This function get the collected tx and rx stats before starting
|
||||||
|
* the bus bandwidth timer.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_bus_bw_compute_prev_txrx_stats(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_bus_bw_compute_reset_prev_txrx_stats() - reset previous tx and rx stats
|
||||||
|
* @vdev: vdev handle
|
||||||
|
*
|
||||||
|
* This function resets the previous tx rx stats.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_bus_bw_compute_reset_prev_txrx_stats(struct wlan_objmgr_vdev *vdev);
|
||||||
#else
|
#else
|
||||||
static inline
|
static inline
|
||||||
void dp_reset_tcp_delack(struct wlan_objmgr_psoc *psoc);
|
void dp_reset_tcp_delack(struct wlan_objmgr_psoc *psoc)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,9 +362,72 @@ void wlan_dp_update_tcp_rx_param(struct wlan_dp_psoc_context *dp_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
bool dp_is_current_high_throughput(struct wlan_objmgr_psoc *psoc)
|
bool dp_is_current_high_throughput(struct wlan_dp_psoc_context *dp_ctx)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline enum pld_bus_width_type
|
||||||
|
dp_get_current_throughput_level(struct wlan_dp_psoc_context *dp_ctx)
|
||||||
|
{
|
||||||
|
return PLD_BUS_WIDTH_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_set_current_throughput_level(struct wlan_objmgr_psoc *psoc,
|
||||||
|
enum pld_bus_width_type next_vote_level)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void wlan_dp_display_tx_rx_histogram(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void wlan_dp_clear_tx_rx_histogram(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bandwidth_init(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bandwidth_deinit(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bw_compute_timer_start(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bw_compute_timer_try_start(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bw_compute_timer_stop(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bw_compute_timer_try_stop(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bw_compute_prev_txrx_stats(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_bus_bw_compute_reset_prev_txrx_stats(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* WLAN_FEATURE_DP_BUS_BANDWIDTH */
|
#endif /* WLAN_FEATURE_DP_BUS_BANDWIDTH */
|
||||||
#endif /* WLAN_DP_BUS_BANDWIDTH_H */
|
#endif /* WLAN_DP_BUS_BANDWIDTH_H */
|
||||||
|
@@ -198,6 +198,16 @@ union wlan_tp_data {
|
|||||||
* @dp_any_adapter_connected: Callback to check if any adapter is connected
|
* @dp_any_adapter_connected: Callback to check if any adapter is connected
|
||||||
* @dp_send_svc_nlink_msg: Callback API to send svc nlink message
|
* @dp_send_svc_nlink_msg: Callback API to send svc nlink message
|
||||||
* @osif_dp_send_tcp_param_update_event: OS IF callback to send TCP param
|
* @osif_dp_send_tcp_param_update_event: OS IF callback to send TCP param
|
||||||
|
* @dp_send_mscs_action_frame: Callback to send MSCS action frame
|
||||||
|
* @dp_pm_qos_add_request: Callback to send add pm qos request
|
||||||
|
* @dp_pm_qos_remove_request: Callback to send remove pm qos request
|
||||||
|
* @dp_pm_qos_update_request: Callback to send update pm qos request
|
||||||
|
* @dp_pld_remove_pm_qos: Callback to send remove pld pm qos request
|
||||||
|
* @dp_pld_request_pm_qos: Callback to send pld pm qos request
|
||||||
|
* @dp_pktlog_enable_disable:Callback to set packet log
|
||||||
|
* @dp_is_roaming_in_progress:Callback to check if roaming is in progress
|
||||||
|
* @dp_is_ap_active:Callback to check if AP is active
|
||||||
|
* @dp_napi_apply_throughput_policy:Callback to apply NAPI throughput policy
|
||||||
*/
|
*/
|
||||||
struct wlan_dp_psoc_callbacks {
|
struct wlan_dp_psoc_callbacks {
|
||||||
void (*os_if_dp_gro_rx)(struct sk_buff *skb, uint8_t napi_to_use,
|
void (*os_if_dp_gro_rx)(struct sk_buff *skb, uint8_t napi_to_use,
|
||||||
@@ -219,6 +229,25 @@ struct wlan_dp_psoc_callbacks {
|
|||||||
(*osif_dp_send_tcp_param_update_event)(struct wlan_objmgr_psoc *psoc,
|
(*osif_dp_send_tcp_param_update_event)(struct wlan_objmgr_psoc *psoc,
|
||||||
union wlan_tp_data *data,
|
union wlan_tp_data *data,
|
||||||
uint8_t dir);
|
uint8_t dir);
|
||||||
|
void (*dp_send_mscs_action_frame)(hdd_cb_handle context,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
void (*dp_pm_qos_add_request)(hdd_cb_handle context);
|
||||||
|
void (*dp_pm_qos_remove_request)(hdd_cb_handle context);
|
||||||
|
void (*dp_pm_qos_update_request)(hdd_cb_handle context,
|
||||||
|
cpumask_t *mask);
|
||||||
|
void (*dp_pld_remove_pm_qos)(hdd_cb_handle context);
|
||||||
|
void (*dp_pld_request_pm_qos)(hdd_cb_handle context);
|
||||||
|
int (*dp_pktlog_enable_disable)(hdd_cb_handle context,
|
||||||
|
bool enable_disable_flag,
|
||||||
|
uint8_t user_triggered, int size);
|
||||||
|
bool (*dp_is_roaming_in_progress)(hdd_cb_handle context);
|
||||||
|
bool (*dp_is_ap_active)(hdd_cb_handle context, uint8_t vdev_id);
|
||||||
|
void (*dp_display_periodic_stats)(hdd_cb_handle context, bool interval);
|
||||||
|
void (*dp_disable_rx_ol_for_low_tput)(hdd_cb_handle context,
|
||||||
|
bool disable);
|
||||||
|
int (*dp_napi_apply_throughput_policy)(hdd_cb_handle context,
|
||||||
|
uint64_t tx_packets,
|
||||||
|
uint64_t rx_packets);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#include <wlan_objmgr_psoc_obj.h>
|
#include <wlan_objmgr_psoc_obj.h>
|
||||||
#include <wlan_objmgr_pdev_obj.h>
|
#include <wlan_objmgr_pdev_obj.h>
|
||||||
#include <wlan_objmgr_vdev_obj.h>
|
#include <wlan_objmgr_vdev_obj.h>
|
||||||
|
#include "pld_common.h"
|
||||||
#include <wlan_dp_public_struct.h>
|
#include <wlan_dp_public_struct.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -214,6 +215,147 @@ void ucfg_dp_reg_ipa_rsp_ind(struct wlan_objmgr_pdev *pdev);
|
|||||||
*/
|
*/
|
||||||
void ucfg_dp_try_set_rps_cpu_mask(struct wlan_objmgr_psoc *psoc);
|
void ucfg_dp_try_set_rps_cpu_mask(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_add_latency_critical_client() - Add latency critical client
|
||||||
|
* @vdev: vdev handle (Should not be NULL)
|
||||||
|
* @phymode: the phymode of the connected adapter
|
||||||
|
*
|
||||||
|
* This function checks if the present connection is latency critical
|
||||||
|
* and adds to the latency critical clients count and informs the
|
||||||
|
* datapath about this connection being latency critical.
|
||||||
|
*
|
||||||
|
* Returns: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_add_latency_critical_client(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum qca_wlan_802_11_mode phymode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_del_latency_critical_client() - Remove latency critical client
|
||||||
|
* @vdev: vdev handle (Should not be NULL)
|
||||||
|
* @phymode: the phymode of the connected adapter
|
||||||
|
*
|
||||||
|
* This function checks if the present connection was latency critical
|
||||||
|
* and removes from the latency critical clients count and informs the
|
||||||
|
* datapath about the removed connection being latency critical.
|
||||||
|
*
|
||||||
|
* Returns: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_del_latency_critical_client(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum qca_wlan_802_11_mode phymode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_reset_tcp_delack() - Reset TCP delay ACK
|
||||||
|
* level
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_reset_tcp_delack(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_set_current_throughput_level() - update the current vote
|
||||||
|
* level
|
||||||
|
* @psoc: psoc handle
|
||||||
|
* @next_vote_level: pld_bus_width_type voting level
|
||||||
|
*
|
||||||
|
* This function updates the current vote level to the new level
|
||||||
|
* provided
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ucfg_dp_set_current_throughput_level(struct wlan_objmgr_psoc *psoc,
|
||||||
|
enum pld_bus_width_type next_vote_level);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_wlan_dp_display_tx_rx_histogram() - display tx rx histogram
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
void ucfg_wlan_dp_display_tx_rx_histogram(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_wlan_dp_clear_tx_rx_histogram() - clear tx rx histogram
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
void ucfg_wlan_dp_clear_tx_rx_histogram(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_set_high_bus_bw_request() - Set high bandwidth request.
|
||||||
|
* @psoc: psoc handle
|
||||||
|
* @vdev_id: vdev_id
|
||||||
|
* @high_bus_bw : High bus bandwidth requested
|
||||||
|
*
|
||||||
|
* Return: None.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ucfg_dp_set_high_bus_bw_request(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
bool high_bus_bw);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_bus_bw_compute_timer_start() - start the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_start(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_bus_bw_compute_timer_try_start() - try to start the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* This function ensures there is at least one intf in the associated state
|
||||||
|
* before starting the bandwidth timer.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_try_start(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_bus_bw_compute_timer_stop() - stop the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_stop(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_bus_bw_compute_timer_try_stop() - try to stop the bandwidth timer
|
||||||
|
* @psoc: psoc handle
|
||||||
|
*
|
||||||
|
* This function ensures there are no interface in the associated state before
|
||||||
|
* stopping the bandwidth timer.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_try_stop(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_bus_bw_compute_prev_txrx_stats() - get tx and rx stats
|
||||||
|
* @vdev: vdev handle
|
||||||
|
*
|
||||||
|
* This function get the collected tx and rx stats before starting
|
||||||
|
* the bus bandwidth timer.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void ucfg_dp_bus_bw_compute_prev_txrx_stats(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_dp_bus_bw_compute_reset_prev_txrx_stats() - reset previous txrx stats
|
||||||
|
* @vdev: vdev handle
|
||||||
|
*
|
||||||
|
* This function resets the adapter previous tx rx stats.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ucfg_dp_bus_bw_compute_reset_prev_txrx_stats(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_dp_register_hdd_callbacks() - Resiter HDD callbacks with DP component
|
* ucfg_dp_register_hdd_callbacks() - Resiter HDD callbacks with DP component
|
||||||
* @psoc: psoc handle
|
* @psoc: psoc handle
|
||||||
@@ -223,5 +365,4 @@ void ucfg_dp_try_set_rps_cpu_mask(struct wlan_objmgr_psoc *psoc);
|
|||||||
*/
|
*/
|
||||||
void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
||||||
struct wlan_dp_psoc_callbacks *cb_obj);
|
struct wlan_dp_psoc_callbacks *cb_obj);
|
||||||
|
|
||||||
#endif /* _WLAN_DP_UCFG_API_H_ */
|
#endif /* _WLAN_DP_UCFG_API_H_ */
|
||||||
|
@@ -358,6 +358,7 @@ QDF_STATUS ucfg_dp_psoc_open(struct wlan_objmgr_psoc *psoc)
|
|||||||
ucfg_dp_store_qdf_dev(psoc);
|
ucfg_dp_store_qdf_dev(psoc);
|
||||||
dp_rtpm_tput_policy_init(psoc);
|
dp_rtpm_tput_policy_init(psoc);
|
||||||
dp_register_pmo_handler();
|
dp_register_pmo_handler();
|
||||||
|
dp_bus_bandwidth_init(psoc);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -366,6 +367,7 @@ QDF_STATUS ucfg_dp_psoc_close(struct wlan_objmgr_psoc *psoc)
|
|||||||
{
|
{
|
||||||
dp_rtpm_tput_policy_deinit(psoc);
|
dp_rtpm_tput_policy_deinit(psoc);
|
||||||
dp_unregister_pmo_handler();
|
dp_unregister_pmo_handler();
|
||||||
|
dp_bus_bandwidth_deinit(psoc);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -522,6 +524,79 @@ void ucfg_dp_try_set_rps_cpu_mask(struct wlan_objmgr_psoc *psoc)
|
|||||||
dp_try_set_rps_cpu_mask(psoc);
|
dp_try_set_rps_cpu_mask(psoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_add_latency_critical_client(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum qca_wlan_802_11_mode phymode)
|
||||||
|
{
|
||||||
|
dp_add_latency_critical_client(vdev, phymode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_del_latency_critical_client(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum qca_wlan_802_11_mode phymode)
|
||||||
|
{
|
||||||
|
dp_del_latency_critical_client(vdev, phymode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_reset_tcp_delack(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
dp_reset_tcp_delack(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ucfg_dp_set_current_throughput_level(struct wlan_objmgr_psoc *psoc,
|
||||||
|
enum pld_bus_width_type next_vote_level)
|
||||||
|
{
|
||||||
|
dp_set_current_throughput_level(psoc, next_vote_level);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ucfg_dp_set_high_bus_bw_request(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
bool high_bus_bw)
|
||||||
|
{
|
||||||
|
dp_set_high_bus_bw_request(psoc, vdev_id, high_bus_bw);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_wlan_dp_display_tx_rx_histogram(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
wlan_dp_display_tx_rx_histogram(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_wlan_dp_clear_tx_rx_histogram(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
wlan_dp_clear_tx_rx_histogram(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_start(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
dp_bus_bw_compute_timer_start(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_try_start(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
dp_bus_bw_compute_timer_try_start(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_stop(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
dp_bus_bw_compute_timer_stop(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_bus_bw_compute_timer_try_stop(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
dp_bus_bw_compute_timer_try_stop(psoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_dp_bus_bw_compute_prev_txrx_stats(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
dp_bus_bw_compute_prev_txrx_stats(vdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ucfg_dp_bus_bw_compute_reset_prev_txrx_stats(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
dp_bus_bw_compute_reset_prev_txrx_stats(vdev);
|
||||||
|
}
|
||||||
|
|
||||||
void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
||||||
struct wlan_dp_psoc_callbacks *cb_obj)
|
struct wlan_dp_psoc_callbacks *cb_obj)
|
||||||
{
|
{
|
||||||
@@ -541,4 +616,24 @@ void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
|||||||
dp_ctx->dp_ops.dp_any_adapter_connected =
|
dp_ctx->dp_ops.dp_any_adapter_connected =
|
||||||
cb_obj->dp_any_adapter_connected;
|
cb_obj->dp_any_adapter_connected;
|
||||||
dp_ctx->dp_ops.dp_send_svc_nlink_msg = cb_obj->dp_send_svc_nlink_msg;
|
dp_ctx->dp_ops.dp_send_svc_nlink_msg = cb_obj->dp_send_svc_nlink_msg;
|
||||||
|
dp_ctx->dp_ops.dp_pm_qos_update_request =
|
||||||
|
cb_obj->dp_pm_qos_update_request;
|
||||||
|
dp_ctx->dp_ops.dp_pld_remove_pm_qos = cb_obj->dp_pld_remove_pm_qos;
|
||||||
|
dp_ctx->dp_ops.dp_pld_request_pm_qos = cb_obj->dp_pld_request_pm_qos;
|
||||||
|
dp_ctx->dp_ops.dp_pm_qos_add_request = cb_obj->dp_pm_qos_add_request;
|
||||||
|
dp_ctx->dp_ops.dp_pm_qos_remove_request =
|
||||||
|
cb_obj->dp_pm_qos_remove_request;
|
||||||
|
dp_ctx->dp_ops.dp_send_mscs_action_frame =
|
||||||
|
cb_obj->dp_send_mscs_action_frame;
|
||||||
|
dp_ctx->dp_ops.dp_pktlog_enable_disable =
|
||||||
|
cb_obj->dp_pktlog_enable_disable;
|
||||||
|
dp_ctx->dp_ops.dp_is_roaming_in_progress =
|
||||||
|
cb_obj->dp_is_roaming_in_progress;
|
||||||
|
dp_ctx->dp_ops.dp_is_ap_active = cb_obj->dp_is_ap_active;
|
||||||
|
dp_ctx->dp_ops.dp_display_periodic_stats =
|
||||||
|
cb_obj->dp_display_periodic_stats;
|
||||||
|
dp_ctx->dp_ops.dp_disable_rx_ol_for_low_tput =
|
||||||
|
cb_obj->dp_disable_rx_ol_for_low_tput;
|
||||||
|
dp_ctx->dp_ops.dp_napi_apply_throughput_policy =
|
||||||
|
cb_obj->dp_napi_apply_throughput_policy;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user