mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 12:58:12 -04:00
Merge b84e72e50a on remote branch
Change-Id: Ic2030efb3067f294fd32c0878db86f00be7f8a37
This commit is contained in:
commit
cf06cfab50
14 changed files with 126 additions and 27 deletions
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2018, 2020-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
|
|
@ -290,10 +291,12 @@ int pmo_core_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc);
|
|||
* pmo_core_psoc_target_suspend_acknowledge() - update target susspend status
|
||||
* @context: HTC_INIT_INFO->context
|
||||
* @wow_nack: true when wow is rejected
|
||||
* @reason_code : WoW status reason code
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack);
|
||||
void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
|
||||
uint16_t reason_code);
|
||||
|
||||
/**
|
||||
* pmo_core_psoc_wakeup_host_event_received() - received host wake up event
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
|
|
@ -421,14 +422,17 @@ bool pmo_core_is_wow_enabled(struct pmo_psoc_priv_obj *psoc_ctx)
|
|||
* pmo_core_set_wow_nack() - Set wow nack flag
|
||||
* @psoc_ctx: Pointer to objmgr psoc handle
|
||||
* @value: true if received wow nack from else false
|
||||
* @reason_code: WoW status reason code
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline
|
||||
void pmo_core_set_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx, bool value)
|
||||
void pmo_core_set_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx, bool value,
|
||||
uint16_t reason_code)
|
||||
{
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
psoc_ctx->wow.wow_nack = value;
|
||||
psoc_ctx->wow.reason_code = reason_code;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
}
|
||||
|
||||
|
|
@ -449,6 +453,25 @@ bool pmo_core_get_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx)
|
|||
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* pmo_core_get_wow_reason_code() - Get wow status reason code
|
||||
* @psoc_ctx: Pointer to objmgr psoc handle
|
||||
*
|
||||
* Return: wow status reason code
|
||||
*/
|
||||
static inline
|
||||
uint16_t pmo_core_get_wow_reason_code(struct pmo_psoc_priv_obj *psoc_ctx)
|
||||
{
|
||||
uint16_t value;
|
||||
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
value = psoc_ctx->wow.reason_code;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* pmo_core_update_wow_enable_cmd_sent() - update wow enable cmd sent flag
|
||||
* @psoc_ctx: Pointer to objmgr psoc handle
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-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
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -735,12 +735,13 @@ pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
|
|||
struct pmo_psoc_cfg *psoc_cfg = &psoc_ctx->psoc_cfg;
|
||||
QDF_STATUS status;
|
||||
void *hif_ctx;
|
||||
uint16_t reason_code;
|
||||
|
||||
pmo_enter();
|
||||
|
||||
hif_ctx = pmo_core_psoc_get_hif_handle(psoc);
|
||||
qdf_event_reset(&psoc_ctx->wow.target_suspend);
|
||||
pmo_core_set_wow_nack(psoc_ctx, false);
|
||||
pmo_core_set_wow_nack(psoc_ctx, false, 0);
|
||||
host_credits = pmo_tgt_psoc_get_host_credits(psoc);
|
||||
wmi_pending_cmds = pmo_tgt_psoc_get_pending_cmnds(psoc);
|
||||
pmo_debug("Credits:%d; Pending_Cmds: %d",
|
||||
|
|
@ -847,7 +848,8 @@ pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
|
|||
}
|
||||
|
||||
if (pmo_core_get_wow_nack(psoc_ctx)) {
|
||||
pmo_err("FW not ready to WOW");
|
||||
reason_code = pmo_core_get_wow_reason_code(psoc_ctx);
|
||||
pmo_err("FW not ready to WOW reason code: %d", reason_code);
|
||||
pmo_tgt_update_target_suspend_flag(psoc, false);
|
||||
status = QDF_STATUS_E_AGAIN;
|
||||
goto out;
|
||||
|
|
@ -1514,7 +1516,8 @@ out:
|
|||
return status;
|
||||
}
|
||||
|
||||
void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
|
||||
void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
|
||||
uint16_t reason_code)
|
||||
{
|
||||
struct pmo_psoc_priv_obj *psoc_ctx;
|
||||
struct wlan_objmgr_psoc *psoc = (struct wlan_objmgr_psoc *)context;
|
||||
|
|
@ -1535,7 +1538,7 @@ void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
|
|||
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
|
||||
pmo_core_set_wow_nack(psoc_ctx, wow_nack);
|
||||
pmo_core_set_wow_nack(psoc_ctx, wow_nack, reason_code);
|
||||
qdf_event_set(&psoc_ctx->wow.target_suspend);
|
||||
if (!pmo_tgt_psoc_get_runtime_pm_in_progress(psoc)) {
|
||||
if (wow_nack)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
|
|
@ -993,11 +994,14 @@ int ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc);
|
|||
|
||||
/**
|
||||
* ucfg_pmo_psoc_target_suspend_acknowledge() - Clear initial wake up status
|
||||
* @psoc: objmgr psoc handle
|
||||
* @context: caller-provided context
|
||||
* @wow_nack: Was WoW NACK'ed
|
||||
* @reason_code: WoW status reason code
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack);
|
||||
void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
|
||||
uint16_t reason_code);
|
||||
|
||||
/**
|
||||
* ucfg_pmo_psoc_wakeup_host_event_received() - got host wake up evennt from fwr
|
||||
|
|
@ -1665,7 +1669,8 @@ ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc)
|
|||
}
|
||||
|
||||
static inline void
|
||||
ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
|
||||
ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
|
||||
uint16_t reason_code)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-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
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -224,6 +224,7 @@ enum pmo_wow_state {
|
|||
* @target_suspend: target suspend event
|
||||
* @target_resume: target resume event
|
||||
* @wow_nack: wow negative ack flag
|
||||
* @reason_code : wow status reason code
|
||||
* @wow_initial_wake_up: target initial wake up is received
|
||||
* @wow_wake_lock: wow wake lock
|
||||
* @lphb_cache: lphb cache
|
||||
|
|
@ -245,7 +246,8 @@ struct pmo_wow {
|
|||
enum pmo_wow_state wow_state;
|
||||
qdf_event_t target_suspend;
|
||||
qdf_event_t target_resume;
|
||||
int wow_nack;
|
||||
bool wow_nack;
|
||||
uint16_t reason_code;
|
||||
atomic_t wow_initial_wake_up;
|
||||
qdf_wake_lock_t wow_wake_lock;
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
|
|
@ -486,9 +487,11 @@ int ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc)
|
|||
return pmo_core_psoc_clear_target_wake_up(psoc);
|
||||
}
|
||||
|
||||
void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
|
||||
void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
|
||||
uint16_t reason_code)
|
||||
{
|
||||
pmo_core_psoc_target_suspend_acknowledge(context, wow_nack);
|
||||
pmo_core_psoc_target_suspend_acknowledge(context, wow_nack,
|
||||
reason_code);
|
||||
}
|
||||
|
||||
void ucfg_pmo_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc)
|
||||
|
|
|
|||
|
|
@ -363,6 +363,9 @@ static int hdd_convert_dot11mode(uint32_t dot11mode)
|
|||
case eCSR_CFG_DOT11_MODE_11AC:
|
||||
ret_val = QCA_WLAN_802_11_MODE_11AC;
|
||||
break;
|
||||
case eCSR_CFG_DOT11_MODE_11AX:
|
||||
ret_val = QCA_WLAN_802_11_MODE_11AX;
|
||||
break;
|
||||
case eCSR_CFG_DOT11_MODE_AUTO:
|
||||
case eCSR_CFG_DOT11_MODE_ABG:
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@
|
|||
#define QWLAN_VERSION_MAJOR 2
|
||||
#define QWLAN_VERSION_MINOR 0
|
||||
#define QWLAN_VERSION_PATCH 8
|
||||
#define QWLAN_VERSION_EXTRA "X"
|
||||
#define QWLAN_VERSION_BUILD 32
|
||||
#define QWLAN_VERSION_EXTRA "B"
|
||||
#define QWLAN_VERSION_BUILD 33
|
||||
|
||||
#define QWLAN_VERSIONSTR "2.0.8.32X"
|
||||
#define QWLAN_VERSIONSTR "2.0.8.33B"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2020 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
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -2646,7 +2646,7 @@ lim_send_assoc_req_mgmt_frame(struct mac_context *mac_ctx,
|
|||
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
|
||||
frame, (uint16_t)(sizeof(tSirMacMgmtHdr) + payload));
|
||||
|
||||
min_rid = lim_get_min_session_txrate(pe_session);
|
||||
min_rid = lim_get_min_session_txrate(pe_session, NULL);
|
||||
lim_diag_event_report(mac_ctx, WLAN_PE_DIAG_ASSOC_START_EVENT,
|
||||
pe_session, QDF_STATUS_SUCCESS, QDF_STATUS_SUCCESS);
|
||||
lim_diag_mgmt_tx_event_report(mac_ctx, mac_hdr,
|
||||
|
|
@ -3133,7 +3133,7 @@ alloc_packet:
|
|||
session->peSessionId, mac_hdr->fc.subType));
|
||||
|
||||
mac_ctx->auth_ack_status = LIM_ACK_NOT_RCD;
|
||||
min_rid = lim_get_min_session_txrate(session);
|
||||
min_rid = lim_get_min_session_txrate(session, NULL);
|
||||
peer_rssi = mac_ctx->lim.bss_rssi;
|
||||
lim_diag_mgmt_tx_event_report(mac_ctx, mac_hdr,
|
||||
session, QDF_STATUS_SUCCESS, QDF_STATUS_SUCCESS);
|
||||
|
|
@ -5700,6 +5700,9 @@ static void lim_tx_mgmt_frame(struct mac_context *mac_ctx, uint8_t vdev_id,
|
|||
struct pe_session *session;
|
||||
uint16_t auth_ack_status;
|
||||
enum rateid min_rid = RATEID_DEFAULT;
|
||||
qdf_freq_t *pre_auth_freq = NULL;
|
||||
qdf_freq_t channel_freq = 0;
|
||||
enum QDF_OPMODE opmode;
|
||||
|
||||
session = pe_find_session_by_vdev_id(mac_ctx, vdev_id);
|
||||
if (!session) {
|
||||
|
|
@ -5712,7 +5715,24 @@ static void lim_tx_mgmt_frame(struct mac_context *mac_ctx, uint8_t vdev_id,
|
|||
qdf_mtrace(QDF_MODULE_ID_PE, QDF_MODULE_ID_WMA, TRACE_CODE_TX_MGMT,
|
||||
session->peSessionId, 0);
|
||||
|
||||
min_rid = lim_get_min_session_txrate(session);
|
||||
opmode = wlan_get_opmode_from_vdev_id(mac_ctx->pdev, vdev_id);
|
||||
if (opmode != QDF_NAN_DISC_MODE && fc->subType == SIR_MAC_MGMT_AUTH) {
|
||||
tpSirFTPreAuthReq pre_auth_req;
|
||||
uint16_t auth_algo = *(uint16_t *)(frame +
|
||||
sizeof(tSirMacMgmtHdr));
|
||||
|
||||
if (auth_algo == eSIR_AUTH_TYPE_SAE) {
|
||||
if (session->ftPEContext.pFTPreAuthReq) {
|
||||
pre_auth_req =
|
||||
session->ftPEContext.pFTPreAuthReq;
|
||||
channel_freq =
|
||||
pre_auth_req->pre_auth_channel_freq;
|
||||
}
|
||||
pre_auth_freq = &channel_freq;
|
||||
}
|
||||
pe_debug("TX SAE pre-auth frame on freq %d", channel_freq);
|
||||
}
|
||||
min_rid = lim_get_min_session_txrate(session, pre_auth_freq);
|
||||
|
||||
qdf_status = wma_tx_frameWithTxComplete(mac_ctx, packet,
|
||||
(uint16_t)msg_len,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2020 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
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -8248,15 +8248,27 @@ QDF_STATUS lim_util_get_type_subtype(void *pkt, uint8_t *type,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
enum rateid lim_get_min_session_txrate(struct pe_session *session)
|
||||
enum rateid lim_get_min_session_txrate(struct pe_session *session,
|
||||
qdf_freq_t *pre_auth_freq)
|
||||
{
|
||||
enum rateid rid = RATEID_DEFAULT;
|
||||
uint8_t min_rate = SIR_MAC_RATE_54, curr_rate, i;
|
||||
tSirMacRateSet *rateset = &session->rateSet;
|
||||
tSirMacRateSet *rateset;
|
||||
|
||||
if (!session)
|
||||
return rid;
|
||||
|
||||
rateset = &session->rateSet;
|
||||
|
||||
if (pre_auth_freq) {
|
||||
pe_debug("updated rateset to pre auth freq %d",
|
||||
*pre_auth_freq);
|
||||
if ((*pre_auth_freq))
|
||||
csr_get_basic_rates(rateset, *pre_auth_freq);
|
||||
else
|
||||
return rid;
|
||||
}
|
||||
|
||||
for (i = 0; i < rateset->numRates; i++) {
|
||||
/* Ignore MSB - set to indicate basic rate */
|
||||
curr_rate = rateset->rate[i] & 0x7F;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2020 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
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -1687,13 +1687,15 @@ QDF_STATUS lim_util_get_type_subtype(void *pkt, uint8_t *type,
|
|||
/**
|
||||
* lim_get_min_session_txrate() - Get the minimum rate supported in the session
|
||||
* @session: Pointer to PE session
|
||||
* @pre_auth_freq: Pointer to pre_auth_freq
|
||||
*
|
||||
* This API will find the minimum rate supported by the given PE session and
|
||||
* return the enum rateid corresponding to the rate.
|
||||
*
|
||||
* Return: enum rateid
|
||||
*/
|
||||
enum rateid lim_get_min_session_txrate(struct pe_session *session);
|
||||
enum rateid lim_get_min_session_txrate(struct pe_session *session,
|
||||
qdf_freq_t *pre_auth_freq);
|
||||
|
||||
/**
|
||||
* lim_send_dfs_chan_sw_ie_update() - updates the channel switch IE in beacon
|
||||
|
|
|
|||
|
|
@ -1485,6 +1485,15 @@ QDF_STATUS csr_mlme_vdev_disconnect_all_p2p_client_event(uint8_t vdev_id);
|
|||
*/
|
||||
QDF_STATUS csr_mlme_vdev_stop_bss(uint8_t vdev_id);
|
||||
|
||||
/*
|
||||
* csr_get_basic_rates() - Get basic rate for a band
|
||||
* @b_rates: Basic rate
|
||||
* @chan_freq: frequency for which basic rate is required
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void csr_get_basic_rates(tSirMacRateSet *b_rates, uint32_t chan_freq);
|
||||
|
||||
/*
|
||||
* csr_mlme_get_concurrent_operation_freq() - Callback for MLME module to
|
||||
* get the concurrent operation frequency
|
||||
|
|
|
|||
|
|
@ -1839,6 +1839,13 @@ csr_check_band_freq_match(enum band_info band, uint32_t freq)
|
|||
if (band == BAND_5G && WLAN_REG_IS_5GHZ_CH_FREQ(freq))
|
||||
return true;
|
||||
|
||||
/*
|
||||
* Not adding the band check for now as band_info will be soon
|
||||
* replaced with reg_wifi_band enum
|
||||
*/
|
||||
if (WLAN_REG_IS_6GHZ_CHAN_FREQ(freq))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -14951,7 +14958,7 @@ csr_update_sae_single_pmk_ap_cap(struct mac_context *mac,
|
|||
}
|
||||
#endif
|
||||
|
||||
static void csr_get_basic_rates(tSirMacRateSet *b_rates, uint32_t chan_freq)
|
||||
void csr_get_basic_rates(tSirMacRateSet *b_rates, uint32_t chan_freq)
|
||||
{
|
||||
/*
|
||||
* Some IOT APs don't send supported rates in
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
|
|
@ -255,6 +256,9 @@ int __osif_vdev_sync_trans_start(struct net_device *net_dev,
|
|||
dsc_vdev_trans_start);
|
||||
osif_vdev_sync_unlock();
|
||||
|
||||
if (!errno)
|
||||
osif_vdev_sync_wait_for_ops(*out_vdev_sync);
|
||||
|
||||
return errno;
|
||||
}
|
||||
|
||||
|
|
@ -269,6 +273,9 @@ int __osif_vdev_sync_trans_start_wait(struct net_device *net_dev,
|
|||
out_vdev_sync, desc,
|
||||
dsc_vdev_trans_start_wait);
|
||||
|
||||
if (!errno)
|
||||
osif_vdev_sync_wait_for_ops(*out_vdev_sync);
|
||||
|
||||
return errno;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue