mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-05 19:31:57 -04:00
Merge tag 'LA.UM.9.14.r1-20700-LAHAINA.QSSI13.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0 into android13-5.4-lahaina
"LA.UM.9.14.r1-20700-LAHAINA.QSSI13.0" * tag 'LA.UM.9.14.r1-20700-LAHAINA.QSSI13.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0: Release 2.0.8.31E qcacld-3.0: Fix the channel for M2 packet in pkt capture mode Release 2.0.8.31D qcacld-3.0: Fix peer unmap failure due to invalid roam scan mode value qcacld-3.0: Skip reset roam trigger during disconnect Release 2.0.8.31C qcacld-3.0: Reinitialize mon_register_event before wait_for_completion Release 2.0.8.31B qcacld-3.0: Fix the channel for M2 and M4 packets Release 2.0.8.31A qcacld-3.0: Init start completion in fw down instead of reovery shutdown Conflicts: drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_main.c Change-Id: Ic9a46e6858da1926a4270abdf5e31c92c4679f0a
This commit is contained in:
commit
e621ebf5e4
9 changed files with 122 additions and 117 deletions
|
|
@ -33,6 +33,7 @@
|
|||
#include "dp_internal.h"
|
||||
#include "cds_utils.h"
|
||||
#include "htt_ppdu_stats.h"
|
||||
#include <cdp_txrx_ctrl.h>
|
||||
#endif
|
||||
|
||||
#define RESERVE_BYTES (100)
|
||||
|
|
@ -262,16 +263,15 @@ pkt_capture_update_tx_status(
|
|||
struct mon_rx_status *tx_status,
|
||||
struct pkt_capture_tx_hdr_elem_t *pktcapture_hdr)
|
||||
{
|
||||
struct connection_info info[MAX_NUMBER_OF_CONC_CONNECTIONS];
|
||||
struct pkt_capture_vdev_priv *vdev_priv;
|
||||
struct wlan_objmgr_vdev *vdev = context;
|
||||
htt_ppdu_stats_for_smu_tlv *smu;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct pkt_capture_ppdu_stats_q_node *q_node;
|
||||
qdf_list_node_t *node;
|
||||
uint32_t conn_count;
|
||||
uint8_t vdev_id;
|
||||
int i;
|
||||
cdp_config_param_type val;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev);
|
||||
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
if (!psoc) {
|
||||
|
|
@ -279,18 +279,19 @@ pkt_capture_update_tx_status(
|
|||
return;
|
||||
}
|
||||
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
/* Update the connected channel info from policy manager */
|
||||
conn_count = policy_mgr_get_connection_info(psoc, info);
|
||||
for (i = 0; i < conn_count; i++) {
|
||||
if (info[i].vdev_id == vdev_id) {
|
||||
tx_status->chan_freq = info[0].ch_freq;
|
||||
tx_status->chan_num = info[0].channel;
|
||||
break;
|
||||
}
|
||||
if (!pdev) {
|
||||
pkt_capture_err("pdev is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cdp_txrx_get_pdev_param(soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_CHANNEL, &val))
|
||||
tx_status->chan_num = val.cdp_pdev_param_monitor_chan;
|
||||
|
||||
if (!cdp_txrx_get_pdev_param(soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_FREQUENCY, &val))
|
||||
tx_status->chan_freq = val.cdp_pdev_param_mon_freq;
|
||||
|
||||
vdev_priv = pkt_capture_vdev_get_priv(vdev);
|
||||
if (qdf_unlikely(!vdev_priv))
|
||||
goto skip_ppdu_stats;
|
||||
|
|
|
|||
|
|
@ -823,6 +823,7 @@ QDF_STATUS pkt_capture_deregister_callbacks(struct wlan_objmgr_vdev *vdev)
|
|||
&vdev_priv->mon_ctx->mon_event_flag);
|
||||
set_bit(PKT_CAPTURE_RX_POST_EVENT,
|
||||
&vdev_priv->mon_ctx->mon_event_flag);
|
||||
reinit_completion(&vdev_priv->mon_ctx->mon_register_event);
|
||||
wake_up_interruptible(&vdev_priv->mon_ctx->mon_wait_queue);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include "wlan_mgmt_txrx_utils_api.h"
|
||||
#include "wlan_utility.h"
|
||||
#include "cds_ieee80211_common.h"
|
||||
#include "cdp_txrx_ctrl.h"
|
||||
|
||||
enum pkt_capture_tx_status
|
||||
pkt_capture_mgmt_status_map(uint8_t status)
|
||||
|
|
@ -133,15 +134,109 @@ pkt_capture_mgmtpkt_process(struct wlan_objmgr_psoc *psoc,
|
|||
struct wlan_objmgr_vdev *vdev;
|
||||
struct pkt_capture_mon_pkt *pkt;
|
||||
uint32_t headroom;
|
||||
uint8_t type, sub_type;
|
||||
struct ieee80211_frame *wh;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
cdp_config_param_type val;
|
||||
tSirMacAuthFrameBody *auth;
|
||||
struct pkt_capture_vdev_priv *vdev_priv;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_opmode_from_psoc(psoc,
|
||||
QDF_STA_MODE,
|
||||
WLAN_PKT_CAPTURE_ID);
|
||||
|
||||
if (!vdev) {
|
||||
pkt_capture_err("vdev is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_priv = pkt_capture_vdev_get_priv(vdev);
|
||||
if (!vdev_priv) {
|
||||
pkt_capture_err("packet capture vdev priv is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
if (!pdev) {
|
||||
pkt_capture_err("pdev is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
wh = (struct ieee80211_frame *)(qdf_nbuf_data(nbuf));
|
||||
type = (wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
|
||||
sub_type = (wh)->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
|
||||
|
||||
/*
|
||||
* Update channel only if successful AUTH Resp is received.
|
||||
* This is done so that EAPOL M1 data frame have correct
|
||||
* channel
|
||||
*/
|
||||
if ((type == IEEE80211_FC0_TYPE_MGT) &&
|
||||
(sub_type == MGMT_SUBTYPE_AUTH)) {
|
||||
uint8_t chan = wlan_freq_to_chan(txrx_status->chan_freq);
|
||||
|
||||
auth = (tSirMacAuthFrameBody *)(qdf_nbuf_data(nbuf) +
|
||||
sizeof(tSirMacMgmtHdr));
|
||||
|
||||
if (auth->authTransactionSeqNumber == SIR_MAC_AUTH_FRAME_2 ||
|
||||
auth->authTransactionSeqNumber == SIR_MAC_AUTH_FRAME_4) {
|
||||
if (auth->authStatusCode == STATUS_SUCCESS) {
|
||||
val.cdp_pdev_param_monitor_chan = chan;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_CHANNEL, val);
|
||||
|
||||
val.cdp_pdev_param_mon_freq =
|
||||
txrx_status->chan_freq;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_FREQUENCY, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Update channel to last connected channel in case of assoc/reassoc
|
||||
* response failure and save current chan in case of success
|
||||
*/
|
||||
if ((type == IEEE80211_FC0_TYPE_MGT) &&
|
||||
((sub_type == MGMT_SUBTYPE_ASSOC_RESP) ||
|
||||
(sub_type == MGMT_SUBTYPE_REASSOC_RESP))) {
|
||||
if (qdf_nbuf_len(nbuf) < (sizeof(tSirMacMgmtHdr) +
|
||||
SIR_MAC_ASSOC_RSP_STATUS_CODE_OFFSET)) {
|
||||
pkt_capture_err("Packet length is less than expected");
|
||||
qdf_nbuf_free(nbuf);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
status = (uint16_t)(*(qdf_nbuf_data(nbuf) +
|
||||
sizeof(tSirMacMgmtHdr) +
|
||||
SIR_MAC_ASSOC_RSP_STATUS_CODE_OFFSET));
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
vdev_priv->last_freq = vdev_priv->curr_freq;
|
||||
vdev_priv->curr_freq = txrx_status->chan_freq;
|
||||
} else {
|
||||
uint8_t chan_num;
|
||||
|
||||
chan_num = wlan_reg_freq_to_chan(pdev,
|
||||
vdev_priv->last_freq);
|
||||
|
||||
val.cdp_pdev_param_monitor_chan = chan_num;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_CHANNEL, val);
|
||||
|
||||
val.cdp_pdev_param_mon_freq = vdev_priv->last_freq;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_FREQUENCY, val);
|
||||
|
||||
vdev_priv->curr_freq = vdev_priv->last_freq;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the headroom and adjust head to prepare radiotap header
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -24,104 +24,12 @@
|
|||
#include "wlan_pkt_capture_mon_thread.h"
|
||||
#include "cds_ieee80211_common.h"
|
||||
#include "wlan_mgmt_txrx_utils_api.h"
|
||||
#include "cdp_txrx_ctrl.h"
|
||||
#include "cfg_ucfg_api.h"
|
||||
#include "wlan_mgmt_txrx_utils_api.h"
|
||||
|
||||
void pkt_capture_mon(struct pkt_capture_cb_context *cb_ctx, qdf_nbuf_t msdu,
|
||||
struct wlan_objmgr_vdev *vdev, uint16_t ch_freq)
|
||||
{
|
||||
struct radiotap_header *rthdr;
|
||||
uint8_t rtlen, type, sub_type;
|
||||
struct ieee80211_frame *wh;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev);
|
||||
cdp_config_param_type val;
|
||||
uint16_t status;
|
||||
tSirMacAuthFrameBody *auth;
|
||||
struct pkt_capture_vdev_priv *vdev_priv;
|
||||
|
||||
rthdr = (struct radiotap_header *)qdf_nbuf_data(msdu);
|
||||
rtlen = rthdr->it_len;
|
||||
wh = (struct ieee80211_frame *)(qdf_nbuf_data(msdu) + rtlen);
|
||||
type = (wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
|
||||
sub_type = (wh)->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
|
||||
|
||||
vdev_priv = pkt_capture_vdev_get_priv(vdev);
|
||||
if (!vdev_priv) {
|
||||
pkt_capture_err("packet capture vdev priv is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update channel only if successful AUTH Resp is received.
|
||||
* This is done so that EAPOL M1 data frame have correct
|
||||
* channel
|
||||
*/
|
||||
if ((type == IEEE80211_FC0_TYPE_MGT) &&
|
||||
(sub_type == MGMT_SUBTYPE_AUTH)) {
|
||||
uint8_t chan = wlan_freq_to_chan(ch_freq);
|
||||
|
||||
auth = (tSirMacAuthFrameBody *)(qdf_nbuf_data(msdu) + rtlen +
|
||||
sizeof(tSirMacMgmtHdr));
|
||||
|
||||
if (auth->authTransactionSeqNumber == SIR_MAC_AUTH_FRAME_2 ||
|
||||
auth->authTransactionSeqNumber == SIR_MAC_AUTH_FRAME_4) {
|
||||
if (auth->authStatusCode == STATUS_SUCCESS) {
|
||||
val.cdp_pdev_param_monitor_chan = chan;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_CHANNEL, val);
|
||||
|
||||
val.cdp_pdev_param_mon_freq = ch_freq;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_FREQUENCY, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Update channel to last connected channel in case of assoc/reassoc
|
||||
* response failure and save current chan in case of success
|
||||
*/
|
||||
if ((type == IEEE80211_FC0_TYPE_MGT) &&
|
||||
((sub_type == MGMT_SUBTYPE_ASSOC_RESP) ||
|
||||
(sub_type == MGMT_SUBTYPE_REASSOC_RESP))) {
|
||||
if (qdf_nbuf_len(msdu) < (rtlen + sizeof(tSirMacMgmtHdr) +
|
||||
SIR_MAC_ASSOC_RSP_STATUS_CODE_OFFSET)) {
|
||||
pkt_capture_err("Packet length is less than expected");
|
||||
qdf_nbuf_free(msdu);
|
||||
return;
|
||||
}
|
||||
|
||||
status = (uint16_t)(*(qdf_nbuf_data(msdu) + rtlen +
|
||||
sizeof(tSirMacMgmtHdr) +
|
||||
SIR_MAC_ASSOC_RSP_STATUS_CODE_OFFSET));
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
vdev_priv->last_freq = vdev_priv->curr_freq;
|
||||
vdev_priv->curr_freq = ch_freq;
|
||||
} else {
|
||||
uint8_t chan_num;
|
||||
|
||||
chan_num = wlan_reg_freq_to_chan(pdev,
|
||||
vdev_priv->last_freq);
|
||||
|
||||
val.cdp_pdev_param_monitor_chan = chan_num;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_CHANNEL, val);
|
||||
|
||||
val.cdp_pdev_param_mon_freq = vdev_priv->last_freq;
|
||||
cdp_txrx_set_pdev_param(
|
||||
soc, wlan_objmgr_pdev_get_pdev_id(pdev),
|
||||
CDP_MONITOR_FREQUENCY, val);
|
||||
|
||||
vdev_priv->curr_freq = vdev_priv->last_freq;
|
||||
}
|
||||
}
|
||||
|
||||
if (cb_ctx->mon_cb(cb_ctx->mon_ctx, msdu) != QDF_STATUS_SUCCESS) {
|
||||
pkt_capture_err("Frame Rx to HDD failed");
|
||||
qdf_nbuf_free(msdu);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -960,7 +961,10 @@ cm_roam_switch_to_deinit(struct wlan_objmgr_pdev *pdev,
|
|||
if (sup_disabled_roam) {
|
||||
mlme_err("vdev[%d]: supplicant disabled roam. clear roam scan mode",
|
||||
vdev_id);
|
||||
cm_roam_switch_to_rso_stop(pdev, vdev_id, reason);
|
||||
status = cm_roam_stop_req(psoc, vdev_id,
|
||||
REASON_DISCONNECTED);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("ROAM: Unable to clear roam scan mode");
|
||||
}
|
||||
|
||||
case WLAN_ROAM_INIT:
|
||||
|
|
|
|||
|
|
@ -982,7 +982,6 @@ static void __hdd_soc_recovery_shutdown(void)
|
|||
|
||||
/* recovery starts via firmware down indication; ensure we got one */
|
||||
QDF_BUG(cds_is_driver_recovering());
|
||||
hdd_init_start_completion();
|
||||
|
||||
hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
if (!hdd_ctx) {
|
||||
|
|
@ -2097,6 +2096,7 @@ wlan_hdd_pld_uevent(struct device *dev, struct pld_uevent_data *event_data)
|
|||
|
||||
cds_set_target_ready(false);
|
||||
cds_set_recovery_in_progress(true);
|
||||
hdd_init_start_completion();
|
||||
|
||||
/* Notify external threads currently waiting on firmware
|
||||
* by forcefully completing waiting events with a "reset"
|
||||
|
|
|
|||
|
|
@ -16848,6 +16848,9 @@ static ssize_t wlan_hdd_state_ctrl_param_write(struct file *filp,
|
|||
}
|
||||
}
|
||||
|
||||
hdd_info("is_driver_loaded %d is_driver_recovering %d",
|
||||
cds_is_driver_loaded(), cds_is_driver_recovering());
|
||||
|
||||
if (!cds_is_driver_loaded() || cds_is_driver_recovering()) {
|
||||
rc = wait_for_completion_timeout(&wlan_start_comp,
|
||||
msecs_to_jiffies(HDD_WLAN_START_WAIT_TIME));
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@
|
|||
#define QWLAN_VERSION_MAJOR 2
|
||||
#define QWLAN_VERSION_MINOR 0
|
||||
#define QWLAN_VERSION_PATCH 8
|
||||
#define QWLAN_VERSION_EXTRA ""
|
||||
#define QWLAN_VERSION_EXTRA "E"
|
||||
#define QWLAN_VERSION_BUILD 31
|
||||
|
||||
#define QWLAN_VERSIONSTR "2.0.8.31"
|
||||
#define QWLAN_VERSIONSTR "2.0.8.31E"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
|
|
|||
|
|
@ -617,14 +617,7 @@ void csr_roam_reset_roam_params(struct mac_context *mac_ctx)
|
|||
static void csr_roam_restore_default_config(struct mac_context *mac_ctx,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_roam_triggers triggers;
|
||||
|
||||
sme_set_roam_config_enable(MAC_HANDLE(mac_ctx), vdev_id, 0);
|
||||
|
||||
triggers.vdev_id = vdev_id;
|
||||
triggers.trigger_bitmap = wlan_mlme_get_roaming_triggers(mac_ctx->psoc);
|
||||
sme_debug("Reset roam trigger bitmap to 0x%x", triggers.trigger_bitmap);
|
||||
wlan_cm_rso_set_roam_trigger(mac_ctx->pdev, vdev_id, &triggers);
|
||||
sme_roam_control_restore_default_config(MAC_HANDLE(mac_ctx),
|
||||
vdev_id);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue