qcacld-3.0: Add NUD Tracking APIs to DP component
Add NUD tracking APIs to DP component Change-Id: Ib1dccb041b4fc50a2fc4b7eaba9eed6dfc80ea4d CRs-Fixed: 3165120
This commit is contained in:

committed by
Madan Koyyalamudi

parent
5d70b9f96f
commit
72f7ef77cb
@@ -32,6 +32,24 @@
|
||||
#include <ani_system_defs.h>
|
||||
#include <qdf_defer.h>
|
||||
|
||||
#ifdef TX_MULTIQ_PER_AC
|
||||
#define TX_GET_QUEUE_IDX(ac, off) (((ac) * TX_QUEUES_PER_AC) + (off))
|
||||
#define TX_QUEUES_PER_AC 4
|
||||
#else
|
||||
#define TX_GET_QUEUE_IDX(ac, off) (ac)
|
||||
#define TX_QUEUES_PER_AC 1
|
||||
#endif
|
||||
|
||||
/** Number of Tx Queues */
|
||||
#if defined(QCA_LL_TX_FLOW_CONTROL_V2) || \
|
||||
defined(QCA_HL_NETDEV_FLOW_CONTROL) || \
|
||||
defined(QCA_LL_PDEV_TX_FLOW_CONTROL)
|
||||
/* Only one HI_PRIO queue */
|
||||
#define NUM_TX_QUEUES (4 * TX_QUEUES_PER_AC + 1)
|
||||
#else
|
||||
#define NUM_TX_QUEUES (4 * TX_QUEUES_PER_AC)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct dp_mic_info - mic error info in dp
|
||||
* @ta_mac_addr: transmitter mac address
|
||||
@@ -71,6 +89,19 @@ struct dp_mic_work {
|
||||
qdf_spinlock_t lock;
|
||||
};
|
||||
|
||||
enum dp_nud_state {
|
||||
DP_NUD_NONE,
|
||||
DP_NUD_INCOMPLETE,
|
||||
DP_NUD_REACHABLE,
|
||||
DP_NUD_STALE,
|
||||
DP_NUD_DELAY,
|
||||
DP_NUD_PROBE,
|
||||
DP_NUD_FAILED,
|
||||
DP_NUD_NOARP,
|
||||
DP_NUD_PERMANENT,
|
||||
DP_NUD_STATE_INVALID
|
||||
};
|
||||
|
||||
/**
|
||||
* typedef hdd_cb_handle - HDD Handle
|
||||
*
|
||||
@@ -253,6 +284,10 @@ union wlan_tp_data {
|
||||
* @wlan_dp_display_netif_queue_history: Callback to display Netif queue history
|
||||
* @osif_dp_process_sta_mic_error: osif callback to process STA MIC error
|
||||
* @osif_dp_process_sap_mic_error: osif callback to process SAP MIC error
|
||||
* @dp_is_link_adapter: Callback API to check if adapter is link adapter
|
||||
* @os_if_dp_nud_stats_info: osif callback to print nud stats info
|
||||
* @dp_get_pause_map: Callback API to get pause map count
|
||||
* @dp_nud_failure_work: Callback API to handle NUD failuire work
|
||||
*/
|
||||
struct wlan_dp_psoc_callbacks {
|
||||
void (*os_if_dp_gro_rx)(struct sk_buff *skb, uint8_t napi_to_use,
|
||||
@@ -300,6 +335,10 @@ struct wlan_dp_psoc_callbacks {
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
void (*osif_dp_process_sap_mic_error)(struct dp_mic_error_info *info,
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
bool (*dp_is_link_adapter)(hdd_cb_handle context, uint8_t vdev_id);
|
||||
void (*os_if_dp_nud_stats_info)(struct wlan_objmgr_vdev *vdev);
|
||||
uint32_t (*dp_get_pause_map)(hdd_cb_handle context, uint8_t vdev_id);
|
||||
void (*dp_nud_failure_work)(hdd_cb_handle context, uint8_t vdev_id);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -33,6 +33,23 @@
|
||||
#include "pld_common.h"
|
||||
#include <wlan_dp_public_struct.h>
|
||||
#include <cdp_txrx_misc.h>
|
||||
#include "wlan_dp_objmgr.h"
|
||||
|
||||
#define DP_IGNORE_NUD_FAIL 0
|
||||
#define DP_DISCONNECT_AFTER_NUD_FAIL 1
|
||||
#define DP_ROAM_AFTER_NUD_FAIL 2
|
||||
#define DP_DISCONNECT_AFTER_ROAM_FAIL 3
|
||||
|
||||
#ifdef WLAN_NUD_TRACKING
|
||||
bool
|
||||
ucfg_dp_is_roam_after_nud_enabled(struct wlan_objmgr_psoc *psoc);
|
||||
#else
|
||||
static inline bool
|
||||
ucfg_dp_is_roam_after_nud_enabled(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ucfg_dp_create_intf() - update DP interface MAC address
|
||||
@@ -363,6 +380,53 @@ void ucfg_dp_bus_bw_compute_prev_txrx_stats(struct wlan_objmgr_vdev *vdev);
|
||||
void
|
||||
ucfg_dp_bus_bw_compute_reset_prev_txrx_stats(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* ucfg_dp_nud_set_gateway_addr() - set gateway mac address
|
||||
* @vdev: vdev handle
|
||||
* @gw_mac_addr: mac address to be set
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void ucfg_dp_nud_set_gateway_addr(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr gw_mac_addr);
|
||||
|
||||
/**
|
||||
* ucfg_dp_nud_event() - netevent callback
|
||||
* @netdev_addr: netdev_addr
|
||||
* @gw_mac_addr: Gateway MAC address
|
||||
* @nud_state : NUD State
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void ucfg_dp_nud_event(struct qdf_mac_addr *netdev_mac_addr,
|
||||
struct qdf_mac_addr *gw_mac_addr,
|
||||
uint8_t nud_state);
|
||||
|
||||
/**
|
||||
* ucfg_dp_nud_reset_tracking() - reset NUD tracking
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void ucfg_dp_nud_reset_tracking(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* ucfg_dp_nud_tracking_enabled - Check if NUD tracking is enabled
|
||||
*
|
||||
* @psoc: PSOC Handle
|
||||
*
|
||||
* Return : NUD tracking value.
|
||||
*/
|
||||
uint8_t ucfg_dp_nud_tracking_enabled(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* ucfg_dp_nud_indicate_roam() - reset NUD when roaming happens
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void ucfg_dp_nud_indicate_roam(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* ucfg_dp_register_hdd_callbacks() - Resiter HDD callbacks with DP component
|
||||
* @psoc: psoc handle
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#include "wlan_dp_objmgr.h"
|
||||
#include "wlan_dp_bus_bandwidth.h"
|
||||
#include "wlan_dp_periodic_sta_stats.h"
|
||||
#include "wlan_dp_nud_tracking.h"
|
||||
|
||||
void ucfg_dp_update_inf_mac(struct wlan_objmgr_psoc *psoc,
|
||||
struct qdf_mac_addr *cur_mac,
|
||||
@@ -82,6 +83,7 @@ ucfg_dp_create_intf(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
dp_periodic_sta_stats_init(dp_intf);
|
||||
dp_periodic_sta_stats_mutex_create(dp_intf);
|
||||
dp_nud_init_tracking(dp_intf);
|
||||
dp_mic_init_work(dp_intf);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -107,6 +109,7 @@ ucfg_dp_destroy_intf(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
|
||||
dp_periodic_sta_stats_mutex_destroy(dp_intf);
|
||||
dp_nud_deinit_tracking(dp_intf);
|
||||
dp_mic_deinit_work(dp_intf);
|
||||
|
||||
qdf_spin_lock_bh(&dp_ctx->intf_list_lock);
|
||||
@@ -486,6 +489,21 @@ void ucfg_dp_register_rx_mic_error_ind_handler(void *soc)
|
||||
cdp_register_rx_mic_error_ind_handler(soc, dp_rx_mic_error_ind);
|
||||
}
|
||||
|
||||
#ifdef WLAN_NUD_TRACKING
|
||||
bool
|
||||
ucfg_dp_is_roam_after_nud_enabled(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct wlan_dp_psoc_context *dp_ctx = dp_psoc_get_priv(psoc);
|
||||
struct wlan_dp_psoc_cfg *dp_cfg = &dp_ctx->dp_cfg;
|
||||
|
||||
if (dp_cfg->enable_nud_tracking == DP_ROAM_AFTER_NUD_FAIL ||
|
||||
dp_cfg->enable_nud_tracking == DP_DISCONNECT_AFTER_ROAM_FAIL)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
int ucfg_dp_bbm_context_init(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return dp_bbm_context_init(psoc);
|
||||
@@ -605,6 +623,46 @@ 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_nud_set_gateway_addr(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr gw_mac_addr)
|
||||
{
|
||||
dp_nud_set_gateway_addr(vdev, gw_mac_addr);
|
||||
}
|
||||
|
||||
void ucfg_dp_nud_event(struct qdf_mac_addr *netdev_mac_addr,
|
||||
struct qdf_mac_addr *gw_mac_addr,
|
||||
uint8_t nud_state)
|
||||
{
|
||||
dp_nud_netevent_cb(netdev_mac_addr, gw_mac_addr, nud_state);
|
||||
}
|
||||
|
||||
void ucfg_dp_nud_reset_tracking(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct wlan_dp_intf *dp_intf = dp_get_vdev_priv_obj(vdev);
|
||||
|
||||
if (!dp_intf) {
|
||||
dp_err("Unable to get DP Interface");
|
||||
return;
|
||||
}
|
||||
dp_nud_reset_tracking(dp_intf);
|
||||
}
|
||||
|
||||
uint8_t ucfg_dp_nud_tracking_enabled(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct wlan_dp_psoc_context *dp_ctx = dp_psoc_get_priv(psoc);
|
||||
|
||||
if (!dp_ctx) {
|
||||
dp_err("DP Context is NULL");
|
||||
return 0;
|
||||
}
|
||||
return dp_ctx->dp_cfg.enable_nud_tracking;
|
||||
}
|
||||
|
||||
void ucfg_dp_nud_indicate_roam(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
dp_nud_indicate_roam(vdev);
|
||||
}
|
||||
|
||||
void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_dp_psoc_callbacks *cb_obj)
|
||||
{
|
||||
@@ -646,4 +704,7 @@ void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
||||
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;
|
||||
dp_ctx->dp_ops.dp_is_link_adapter = cb_obj->dp_is_link_adapter;
|
||||
dp_ctx->dp_ops.dp_get_pause_map = cb_obj->dp_get_pause_map;
|
||||
dp_ctx->dp_ops.dp_nud_failure_work = cb_obj->dp_nud_failure_work;
|
||||
}
|
||||
|
Reference in New Issue
Block a user