qcacld-3.0: Add MIC handling to DP component

Add MIC handling and periodic stats display API
in DP component

Change-Id: I5648b9ebe5bd529a83e607b07621c9867d19d402
CRs-Fixed: 3165076
This commit is contained in:
Amit Mehta
2022-04-07 17:40:53 +05:30
committed by Madan Koyyalamudi
parent 23c9db7762
commit 30c5e2a0fa
8 changed files with 571 additions and 7 deletions

View File

@@ -29,6 +29,47 @@
#include "qdf_status.h"
#include <wlan_nlink_common.h>
#include <qca_vendor.h>
#include <ani_system_defs.h>
#include <qdf_defer.h>
/**
* struct dp_mic_info - mic error info in dp
* @ta_mac_addr: transmitter mac address
* @multicast: Flag for multicast
* @key_id: Key ID
* @tsc: Sequence number
* @vdev_id: vdev id
*
*/
struct dp_mic_error_info {
struct qdf_mac_addr ta_mac_addr;
bool multicast;
uint8_t key_id;
uint8_t tsc[SIR_CIPHER_SEQ_CTR_SIZE];
uint16_t vdev_id;
};
enum dp_mic_work_status {
DP_MIC_UNINITIALIZED,
DP_MIC_INITIALIZED,
DP_MIC_SCHEDULED,
DP_MIC_DISABLED
};
/**
* struct dp_mic_work - mic work info in dp
* @mic_error_work: mic error work
* @status: sattus of mic error work
* @info: Pointer to mic error information
* @lock: lock to synchronixe mic error work
*
*/
struct dp_mic_work {
qdf_work_t work;
enum dp_mic_work_status status;
struct dp_mic_error_info *info;
qdf_spinlock_t lock;
};
/**
* typedef hdd_cb_handle - HDD Handle
@@ -208,6 +249,10 @@ union wlan_tp_data {
* @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
* @wlan_dp_display_tx_multiq_stats: Callback to display Tx Mulit queue stats
* @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
*/
struct wlan_dp_psoc_callbacks {
void (*os_if_dp_gro_rx)(struct sk_buff *skb, uint8_t napi_to_use,
@@ -242,12 +287,19 @@ struct wlan_dp_psoc_callbacks {
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);
void (*wlan_dp_display_tx_multiq_stats)(hdd_cb_handle context,
uint8_t vdev_id);
void (*wlan_dp_display_netif_queue_history)(hdd_cb_handle context,
enum qdf_stats_verbosity_level verb_lvl);
void (*osif_dp_process_sta_mic_error)(struct dp_mic_error_info *info,
struct wlan_objmgr_vdev *vdev);
void (*osif_dp_process_sap_mic_error)(struct dp_mic_error_info *info,
struct wlan_objmgr_vdev *vdev);
};
/**

View File

@@ -32,6 +32,7 @@
#include <wlan_objmgr_vdev_obj.h>
#include "pld_common.h"
#include <wlan_dp_public_struct.h>
#include <cdp_txrx_misc.h>
/**
* ucfg_dp_create_intf() - update DP interface MAC address
@@ -130,6 +131,12 @@ ucfg_dp_update_config(struct wlan_objmgr_psoc *psoc,
uint64_t
ucfg_dp_get_rx_softirq_yield_duration(struct wlan_objmgr_psoc *psoc);
/**
* ucfg_dp_register_rx_mic_error_ind_handler : register mic error handler.
* @soc: soc handle
*/
void ucfg_dp_register_rx_mic_error_ind_handler(void *soc);
/**
* ucfg_dp_bbm_context_init() - Initialize BBM context
* @psoc: psoc handle

View File

@@ -82,6 +82,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_mic_init_work(dp_intf);
return QDF_STATUS_SUCCESS;
}
@@ -106,6 +107,8 @@ ucfg_dp_destroy_intf(struct wlan_objmgr_psoc *psoc,
}
dp_periodic_sta_stats_mutex_destroy(dp_intf);
dp_mic_deinit_work(dp_intf);
qdf_spin_lock_bh(&dp_ctx->intf_list_lock);
qdf_list_remove_node(&dp_ctx->intf_list, &dp_intf->node);
qdf_spin_unlock_bh(&dp_ctx->intf_list_lock);
@@ -478,6 +481,11 @@ ucfg_dp_get_rx_softirq_yield_duration(struct wlan_objmgr_psoc *psoc)
return dp_ctx->dp_cfg.rx_softirq_max_yield_duration_ns;
}
void ucfg_dp_register_rx_mic_error_ind_handler(void *soc)
{
cdp_register_rx_mic_error_ind_handler(soc, dp_rx_mic_error_ind);
}
int ucfg_dp_bbm_context_init(struct wlan_objmgr_psoc *psoc)
{
return dp_bbm_context_init(psoc);
@@ -623,6 +631,10 @@ void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
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.wlan_dp_display_tx_multiq_stats =
cb_obj->wlan_dp_display_tx_multiq_stats;
dp_ctx->dp_ops.wlan_dp_display_netif_queue_history =
cb_obj->wlan_dp_display_netif_queue_history;
dp_ctx->dp_ops.dp_send_mscs_action_frame =
cb_obj->dp_send_mscs_action_frame;
dp_ctx->dp_ops.dp_pktlog_enable_disable =
@@ -630,8 +642,6 @@ void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
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 =