Merge 3e51b2ee8e on remote branch

Change-Id: If9bb859ff86680721dcd99c8ca301430a430311c
This commit is contained in:
Linux Build Service Account 2023-07-30 22:54:36 -07:00
commit 95681a7f79
29 changed files with 238 additions and 75 deletions

View file

@ -1967,6 +1967,14 @@ QDF_STATUS policy_mgr_wait_for_connection_update(
*/
QDF_STATUS policy_mgr_reset_connection_update(struct wlan_objmgr_psoc *psoc);
/**
* policy_mgr_reset_hw_mode_change() - Reset the hw mode change.
* @psoc: Pointer to PSOC object
*
* Return: none
*/
void policy_mgr_reset_hw_mode_change(struct wlan_objmgr_psoc *psoc);
/**
* policy_mgr_set_connection_update() - Set connection update
* event

View file

@ -2609,6 +2609,14 @@ QDF_STATUS policy_mgr_reset_connection_update(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_SUCCESS;
}
void policy_mgr_reset_hw_mode_change(struct wlan_objmgr_psoc *psoc)
{
policy_mgr_err("Clear hw mode change and connection update evt");
policy_mgr_set_hw_mode_change_in_progress(
psoc, POLICY_MGR_HW_MODE_NOT_IN_PROGRESS);
policy_mgr_reset_connection_update(psoc);
}
QDF_STATUS policy_mgr_set_connection_update(struct wlan_objmgr_psoc *psoc)
{
QDF_STATUS status;

View file

@ -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
@ -788,6 +789,7 @@ struct nan_datapath_host_event {
* @delete_peers_by_addr: LIM callback for deleting peer by MAC address
* @update_ndi_conn: WMA callback to update NDI's connection info
* @nan_concurrency_update: Callback to handle nan concurrency
* @set_mc_list: HDD callback to set multicast peer list
*/
struct nan_callbacks {
/* callback to os_if layer from umac */
@ -813,6 +815,7 @@ struct nan_callbacks {
struct nan_datapath_channel_info
*chan_info);
void (*nan_concurrency_update)(void);
void (*set_mc_list)(struct wlan_objmgr_vdev *vdev);
};
/**

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-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
@ -186,6 +186,37 @@ inline QDF_STATUS ucfg_nan_set_active_peers(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
/**
* ucfg_nan_update_mc_list() - update the multicast list
* @vdev: Pointer to VDEV Object
*
* This function will update the multicast list for NDP peer
*/
static void ucfg_nan_update_mc_list(struct wlan_objmgr_vdev *vdev)
{
struct nan_callbacks cb_obj;
QDF_STATUS status;
struct wlan_objmgr_psoc *psoc = wlan_vdev_get_psoc(vdev);
if (!psoc) {
nan_err("psoc is null");
return;
}
status = ucfg_nan_get_callbacks(psoc, &cb_obj);
if (QDF_IS_STATUS_ERROR(status)) {
nan_err("Couldn't get callback object");
return;
}
if (!cb_obj.set_mc_list) {
nan_err("set_mc_list callback not registered");
return;
}
cb_obj.set_mc_list(vdev);
}
inline void ucfg_nan_set_peer_mc_list(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr peer_mac_addr)
{
@ -215,7 +246,7 @@ inline void ucfg_nan_set_peer_mc_list(struct wlan_objmgr_vdev *vdev,
}
if (list_idx == max_ndp_sessions) {
nan_err("Peer multicast address list is full");
goto end;
qdf_spin_unlock_bh(&priv_obj->lock);
}
/* Derive peer multicast addr */
peer_mac_addr.bytes[0] = 0x33;
@ -223,8 +254,9 @@ inline void ucfg_nan_set_peer_mc_list(struct wlan_objmgr_vdev *vdev,
peer_mac_addr.bytes[2] = 0xff;
priv_obj->peer_mc_addr_list[list_idx] = peer_mac_addr;
end:
qdf_spin_unlock_bh(&priv_obj->lock);
ucfg_nan_update_mc_list(vdev);
}
inline void ucfg_nan_get_peer_mc_list(
@ -269,7 +301,10 @@ inline void ucfg_nan_clear_peer_mc_list(struct wlan_objmgr_psoc *psoc,
break;
}
}
qdf_spin_unlock_bh(&priv_obj->lock);
ucfg_nan_update_mc_list(vdev);
}
inline uint32_t ucfg_nan_get_active_peers(struct wlan_objmgr_vdev *vdev)
@ -623,6 +658,7 @@ int ucfg_nan_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
ucfg_nan_request_process_cb;
psoc_obj->cb_obj.nan_concurrency_update =
cb_obj->nan_concurrency_update;
psoc_obj->cb_obj.set_mc_list = cb_obj->set_mc_list;
return 0;
}

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021, 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
@ -42,6 +43,8 @@
#define IEEE80211_RADIOTAP_HE_DATA1_STBC_KNOWN 0x0200
#endif
#define HAL_TX_PKT_TYPE_11B 1
/**
* pkt_capture_data_process_type - data pkt types to process
* for packet capture mode

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-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
@ -115,6 +115,7 @@ static unsigned char pkt_capture_get_tx_rate(
case 0x0:
ret = 0x16;
*preamble = LONG_PREAMBLE;
break;
case 0x1:
ret = 0xB;
*preamble = LONG_PREAMBLE;
@ -179,12 +180,14 @@ static void pkt_capture_tx_get_phy_info(
mcs = 8 + pktcapture_hdr->mcs;
else
mcs = pktcapture_hdr->mcs;
tx_status->ht_mcs = mcs;
break;
case 0x3:
tx_status->vht_flags = 1;
mcs = pktcapture_hdr->mcs;
tx_status->vht_flag_values3[0] =
mcs << 0x4 | (pktcapture_hdr->nss + 1);
mcs << 0x4 | (pktcapture_hdr->nss);
tx_status->vht_flag_values2 = pktcapture_hdr->bw;
break;
case 0x4:
@ -205,9 +208,9 @@ static void pkt_capture_tx_get_phy_info(
break;
}
if (preamble == 0)
if (preamble_type != HAL_TX_PKT_TYPE_11B)
tx_status->ofdm_flag = 1;
else if (preamble == 1)
else
tx_status->cck_flag = 1;
tx_status->mcs = mcs;
@ -727,9 +730,9 @@ static void pkt_capture_rx_get_phy_info(void *context, void *psoc,
break;
}
if (preamble == 0)
if (preamble_type != HAL_RX_PKT_TYPE_11B)
rx_status->ofdm_flag = 1;
else if (preamble == 1)
else
rx_status->cck_flag = 1;
rx_status->bw = bw;

View file

@ -292,8 +292,8 @@ pkt_capture_process_tx_data(void *soc, void *log_data, u_int16_t vdev_id,
/* nss not available */
pktcapture_hdr.nss = 0;
pktcapture_hdr.rssi_comb = tx_comp_status.ack_frame_rssi;
/* rate not available */
pktcapture_hdr.rate = 0;
/* update rate from available mcs */
pktcapture_hdr.rate = tx_comp_status.mcs;
pktcapture_hdr.stbc = tx_comp_status.stbc;
pktcapture_hdr.sgi = tx_comp_status.sgi;
pktcapture_hdr.ldpc = tx_comp_status.ldpc;

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, 2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-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
@ -362,6 +362,7 @@ pkt_capture_process_mgmt_tx_data(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_psoc *psoc;
tpSirMacFrameCtl pfc = (tpSirMacFrameCtl)(qdf_nbuf_data(nbuf));
struct ieee80211_frame *wh;
uint16_t rate;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc) {
@ -388,8 +389,6 @@ pkt_capture_process_mgmt_tx_data(struct wlan_objmgr_pdev *pdev,
txrx_status.tsft = (u_int64_t)params->tsf_l32;
txrx_status.chan_num = wlan_freq_to_chan(params->chan_freq);
txrx_status.chan_freq = params->chan_freq;
/* params->rate is in Kbps, convert into Mbps */
txrx_status.rate = (params->rate_kbps / 1000);
if (params->rssi == INVALID_RSSI_FOR_TX)
/* RSSI -128 is invalid rssi for TX, make it 0 here,
* will be normalized during radiotap updation
@ -400,15 +399,18 @@ pkt_capture_process_mgmt_tx_data(struct wlan_objmgr_pdev *pdev,
txrx_status.rssi_comb = txrx_status.ant_signal_db;
txrx_status.nr_ant = 1;
txrx_status.rtap_flags |=
((txrx_status.rate == 6 /* Mbps */) ? BIT(1) : 0);
rate = params->rate_kbps * 2;
/* params->rate is in Kbps, convert into Mbps */
txrx_status.rate = (uint8_t)(rate / 1000);
if (txrx_status.rate == 6)
txrx_status.rtap_flags |=
((txrx_status.rate == 12 /* Mbps */) ? BIT(1) : 0);
if (txrx_status.rate == 12)
txrx_status.ofdm_flag = 1;
else
txrx_status.cck_flag = 1;
txrx_status.rate = ((txrx_status.rate == 6 /* Mbps */) ? 0x0c : 0x02);
txrx_status.tx_status = status;
txrx_status.tx_retry_cnt = params->tx_retry_cnt;
txrx_status.add_rtap_ext = true;

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021, 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
@ -73,7 +73,7 @@ enum pkt_capture_config {
struct mgmt_offload_event_params {
uint32_t tsf_l32;
uint32_t chan_freq;
uint32_t rate_kbps;
uint16_t rate_kbps;
uint32_t rssi;
uint32_t buf_len;
uint32_t tx_status;

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020-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 above
@ -1608,6 +1608,10 @@ static bool dp_fisa_aggregation_should_stop(
uint32_t cumulative_ip_len_delta = hal_cumulative_ip_len -
fisa_flow->hal_cumultive_ip_len;
/**
* kernel network panic if UDP data length < 12 bytes get aggregated,
* no solid conclusion currently, as a SW WAR, only allow UDP
* aggregation if UDP data length >= 16 bytes.
*
* current cumulative ip length should > last cumulative_ip_len
* and <= last cumulative_ip_len + 1478, also current aggregate
* count should be equal to last aggregate count + 1,
@ -1616,6 +1620,7 @@ static bool dp_fisa_aggregation_should_stop(
* otherwise, current fisa flow aggregation should be stopped.
*/
if (fisa_flow->do_not_aggregate ||
msdu_len < (l4_hdr_offset + FISA_MIN_L4_AND_DATA_LEN) ||
hal_cumulative_ip_len <= fisa_flow->hal_cumultive_ip_len ||
cumulative_ip_len_delta > FISA_MAX_SINGLE_CUMULATIVE_IP_LEN ||
(fisa_flow->last_hal_aggr_count + 1) != hal_aggr_count ||

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 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 above
@ -37,6 +38,12 @@
#define FISA_FLOW_MAX_CUMULATIVE_IP_LEN \
(FISA_MAX_SINGLE_CUMULATIVE_IP_LEN * FISA_FLOW_MAX_AGGR_COUNT)
/* minimal pure UDP data length required for FISA */
#define FISA_MIN_UDP_DATA_LEN 16
/* minimal length without L2/L3 header required for FISA */
#define FISA_MIN_L4_AND_DATA_LEN \
(FISA_UDP_HDR_LEN + FISA_MIN_UDP_DATA_LEN)
#define IPSEC_PORT 500
#define IPSEC_NAT_PORT 4500

View file

@ -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
@ -202,6 +203,8 @@ static inline QDF_STATUS dp_txrx_resume(ol_txrx_soc_handle soc)
goto ret;
}
cdp_set_tx_pause(soc, false);
refill_thread = &dp_ext_hdl->refill_thread;
if (refill_thread->enabled) {
qdf_status = dp_rx_refill_thread_resume(refill_thread);
@ -248,6 +251,7 @@ static inline QDF_STATUS dp_txrx_suspend(ol_txrx_soc_handle soc)
if (QDF_IS_STATUS_ERROR(qdf_status) && refill_thread->enabled)
dp_rx_refill_thread_resume(refill_thread);
cdp_set_tx_pause(soc, true);
ret:
return qdf_status;
}

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-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
@ -1223,6 +1223,8 @@ enum qdisc_filter_status {
* @cache_sta_count: number of currently cached stations
* @acs_complete_event: acs complete event
* @latency_level: 0 - normal, 1 - moderate, 2 - low, 3 - ultralow
* @mc_addr_list: multicast address list
* @mc_list_lock: spin lock for multicast list
* @last_disconnect_reason: Last disconnected internal reason code
* as per enum qca_disconnect_reason_codes
* @connect_req_status: Last disconnected internal status code
@ -1408,6 +1410,7 @@ struct hdd_adapter {
#endif
struct hdd_multicast_addr_list mc_addr_list;
qdf_spinlock_t mc_list_lock;
uint8_t addr_filter_pattern;
struct hdd_scan_info scan_info;
@ -1934,6 +1937,7 @@ struct hdd_context {
bool is_ol_rx_thread_suspended;
#endif
bool hdd_wlan_suspend_in_progress;
bool hdd_wlan_suspended;
bool suspended;
/* flag to start pktlog after SSR/PDR if previously enabled */
@ -5030,4 +5034,13 @@ void wlan_hdd_set_pm_qos_request(struct hdd_context *hdd_ctx,
{
}
#endif
/**
* hdd_update_multicast_list() - update the multicast list
* @vdev: pointer to VDEV object
*
* Return: none
*/
void hdd_update_multicast_list(struct wlan_objmgr_vdev *vdev);
#endif /* end #if !defined(WLAN_HDD_MAIN_H) */

View file

@ -16742,8 +16742,7 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = {
.info.vendor_id = QCA_NL80211_VENDOR_ID,
.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_USABLE_CHANNELS,
.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
WIPHY_VENDOR_CMD_NEED_NETDEV |
WIPHY_VENDOR_CMD_NEED_RUNNING,
WIPHY_VENDOR_CMD_NEED_NETDEV,
.doit = wlan_hdd_cfg80211_get_usable_channel,
vendor_command_policy(get_usable_channel_policy,
QCA_WLAN_VENDOR_ATTR_MAX)

View file

@ -3589,6 +3589,7 @@ static void hdd_nan_register_callbacks(struct hdd_context *hdd_ctx)
cb_obj.peer_departed_ind = hdd_ndp_peer_departed_handler;
cb_obj.nan_concurrency_update = hdd_nan_concurrency_update;
cb_obj.set_mc_list = hdd_update_multicast_list;
os_if_nan_register_hdd_callbacks(hdd_ctx->psoc, &cb_obj);
}
@ -4163,7 +4164,7 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit)
goto deregister_cb;
/*
* NAN compoenet requires certian operations like, open adapter,
* NAN component requires certain operations like, open adapter,
* close adapter, etc. to be initiated by HDD, for those
* register HDD callbacks with UMAC's NAN componenet.
*/
@ -4949,8 +4950,7 @@ hdd_set_derived_multicast_list(struct wlan_objmgr_psoc *psoc,
/**
* __hdd_set_multicast_list() - set the multicast address list
* @dev: Pointer to the WLAN device.
* @skb: Pointer to OS packet (sk_buff).
* @dev: Pointer to the WLAN device.
*
* This funciton sets the multicast address list.
*
@ -4992,6 +4992,7 @@ static void __hdd_set_multicast_list(struct net_device *dev)
if (!mc_list_request)
return;
qdf_spin_lock_bh(&adapter->mc_list_lock);
/* Delete already configured multicast address list */
if (adapter->mc_addr_list.mc_cnt > 0)
hdd_disable_and_flush_mc_addr_list(adapter,
@ -5044,6 +5045,7 @@ static void __hdd_set_multicast_list(struct net_device *dev)
hdd_enable_mc_addr_filtering(adapter, pmo_mc_list_change_notify);
free_req:
qdf_spin_unlock_bh(&adapter->mc_list_lock);
qdf_mem_free(mc_list_request);
}
@ -5065,6 +5067,33 @@ static void hdd_set_multicast_list(struct net_device *net_dev)
osif_vdev_sync_op_stop(vdev_sync);
}
void hdd_update_multicast_list(struct wlan_objmgr_vdev *vdev)
{
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
struct hdd_adapter *adapter;
uint8_t vdev_id = wlan_vdev_get_id(vdev);
struct net_device *net_dev;
if (!hdd_ctx) {
hdd_err("hdd_ctx is null");
return;
}
adapter = hdd_get_adapter_by_vdev(hdd_ctx, vdev_id);
if (!adapter) {
hdd_err("adapter is null for vdev_id %d", vdev_id);
return;
}
net_dev = adapter->dev;
if (!net_dev) {
hdd_err("netdev is null");
return;
}
__hdd_set_multicast_list(net_dev);
}
#ifdef WLAN_FEATURE_TSF_PTP
static const struct ethtool_ops wlan_ethtool_ops = {
.get_ts_info = wlan_get_ts_info,
@ -6169,6 +6198,7 @@ static void hdd_cleanup_adapter(struct hdd_context *hdd_ctx,
hdd_periodic_sta_stats_mutex_destroy(adapter);
hdd_apf_context_destroy(adapter);
qdf_spinlock_destroy(&adapter->vdev_lock);
qdf_spinlock_destroy(&adapter->mc_list_lock);
hdd_sta_info_deinit(&adapter->sta_info_list);
hdd_sta_info_deinit(&adapter->cache_sta_info_list);
@ -6996,6 +7026,7 @@ struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx, uint8_t sessio
qdf_list_create(&adapter->blocked_scan_request_q, WLAN_MAX_SCAN_COUNT);
qdf_mutex_create(&adapter->blocked_scan_request_q_lock);
qdf_event_create(&adapter->acs_complete_event);
qdf_spinlock_create(&adapter->mc_list_lock);
qdf_event_create(&adapter->peer_cleanup_done);
hdd_sta_info_init(&adapter->sta_info_list);
hdd_sta_info_init(&adapter->cache_sta_info_list);

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-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
@ -1148,10 +1148,11 @@ void hdd_ndp_peer_departed_handler(uint8_t vdev_id, uint16_t sta_id,
hdd_delete_peer(sta_ctx, peer_mac_addr);
ucfg_nan_clear_peer_mc_list(hdd_ctx->psoc, adapter->vdev,
peer_mac_addr);
if (last_peer) {
hdd_debug("No more ndp peers.");
ucfg_nan_clear_peer_mc_list(hdd_ctx->psoc, adapter->vdev,
peer_mac_addr);
hdd_cleanup_ndi(hdd_ctx, adapter);
qdf_event_set(&adapter->peer_cleanup_done);
/*

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-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
@ -1496,12 +1496,17 @@ hdd_suspend_wlan(void)
hdd_adapter_dev_put_debug(adapter, NET_DEV_HOLD_SUSPEND_WLAN);
}
hdd_ctx->hdd_wlan_suspend_in_progress = true;
status = ucfg_pmo_psoc_user_space_suspend_req(hdd_ctx->psoc,
QDF_SYSTEM_SUSPEND);
if (status != QDF_STATUS_SUCCESS)
if (status != QDF_STATUS_SUCCESS) {
hdd_ctx->hdd_wlan_suspend_in_progress = false;
return -EAGAIN;
}
hdd_ctx->hdd_wlan_suspended = true;
hdd_ctx->hdd_wlan_suspend_in_progress = false;
hdd_configure_sar_sleep_index(hdd_ctx);

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-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
@ -551,7 +551,8 @@ static void __hdd_softap_hard_start_xmit(struct sk_buff *skb,
goto drop_pkt;
}
if (hdd_ctx->hdd_wlan_suspended) {
if (qdf_unlikely(hdd_ctx->hdd_wlan_suspended ||
hdd_ctx->hdd_wlan_suspend_in_progress)) {
hdd_err_rl("Device is system suspended, drop pkt");
goto drop_pkt;
}

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-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
@ -1029,7 +1029,8 @@ static void __hdd_hard_start_xmit(struct sk_buff *skb,
if (wlan_hdd_validate_context(hdd_ctx))
goto drop_pkt;
if (hdd_ctx->hdd_wlan_suspended) {
if (qdf_unlikely(!hdd_ctx || hdd_ctx->hdd_wlan_suspended ||
hdd_ctx->hdd_wlan_suspend_in_progress)) {
hdd_err_rl("Device is system suspended, drop pkt");
goto drop_pkt;
}

View file

@ -32,9 +32,9 @@
#define QWLAN_VERSION_MAJOR 2
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 8
#define QWLAN_VERSION_EXTRA "B"
#define QWLAN_VERSION_EXTRA "M"
#define QWLAN_VERSION_BUILD 33
#define QWLAN_VERSIONSTR "2.0.8.33B"
#define QWLAN_VERSIONSTR "2.0.8.33M"
#endif /* QWLAN_VERSION_H */

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-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
@ -516,7 +516,7 @@ void lim_fill_ft_session(struct mac_context *mac,
tSchBeaconStruct *pBeaconStruct;
ePhyChanBondState cbEnabledMode;
struct vdev_mlme_obj *mlme_obj;
bool is_pwr_constraint;
bool is_pwr_constraint = false;
pBeaconStruct = qdf_mem_malloc(sizeof(tSchBeaconStruct));
if (!pBeaconStruct)
@ -697,6 +697,8 @@ void lim_fill_ft_session(struct mac_context *mac,
if (is_pwr_constraint)
localPowerConstraint = regMax - localPowerConstraint;
mlme_obj->reg_tpc_obj.is_power_constraint_abs = !is_pwr_constraint;
ft_session->limReassocBssQosCaps =
ft_session->limCurrentBssQosCaps;

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-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
@ -2325,8 +2325,7 @@ void lim_handle_add_bss_rsp(struct mac_context *mac_ctx,
}
tx_ops = wlan_reg_get_tx_ops(mac_ctx->psoc);
lim_calculate_tpc(mac_ctx, session_entry, false, 0,
false);
lim_calculate_tpc(mac_ctx, session_entry, 0, false);
if (tx_ops->set_tpc_power)
tx_ops->set_tpc_power(mac_ctx->psoc,
@ -2811,7 +2810,7 @@ static void lim_process_switch_channel_join_req(
goto error;
}
lim_calculate_tpc(mac_ctx, session_entry, false, 0, false);
lim_calculate_tpc(mac_ctx, session_entry, 0, false);
if (tx_ops->set_tpc_power)
tx_ops->set_tpc_power(mac_ctx->psoc,

View file

@ -1222,7 +1222,7 @@ __lim_process_sme_join_req(struct mac_context *mac_ctx, void *msg_buf)
uint8_t vdev_id = 0;
int8_t local_power_constraint = 0;
struct vdev_mlme_obj *mlme_obj;
bool is_pwr_constraint;
bool is_pwr_constraint = false;
uint16_t ie_len;
const uint8_t *vendor_ie;
struct bss_description *bss_desc;
@ -1614,6 +1614,9 @@ __lim_process_sme_join_req(struct mac_context *mac_ctx, void *msg_buf)
&session->gLimCurrentBssUapsd,
&local_power_constraint, session, &is_pwr_constraint);
mlme_obj->reg_tpc_obj.is_power_constraint_abs =
!is_pwr_constraint;
if (wlan_reg_is_ext_tpc_supported(mac_ctx->psoc)) {
mlme_obj->reg_tpc_obj.ap_constraint_power =
local_power_constraint;
@ -2017,7 +2020,6 @@ uint8_t lim_get_max_tx_power(struct mac_context *mac,
void lim_calculate_tpc(struct mac_context *mac,
struct pe_session *session,
bool is_pwr_constraint_absolute,
uint8_t ap_pwr_type,
bool ctry_code_match)
{
@ -2140,8 +2142,9 @@ void lim_calculate_tpc(struct mac_context *mac,
mlme_obj->reg_tpc_obj.ap_constraint_power;
pe_debug("local constraint: %d"
"power constraint absolute: %d",
local_constraint, is_pwr_constraint_absolute);
if (is_pwr_constraint_absolute)
local_constraint,
mlme_obj->reg_tpc_obj.is_power_constraint_abs);
if (mlme_obj->reg_tpc_obj.is_power_constraint_abs)
max_tx_power = QDF_MIN(reg_max,
local_constraint);
else

View file

@ -188,8 +188,6 @@ uint8_t lim_get_max_tx_power(struct mac_context *mac,
* lim_calculate_tpc() - Utility to get maximum tx power
* @mac: mac handle
* @session: PE Session Entry
* @is_pwr_constraint_absolute: If local power constraint is an absolute
* value or an offset value.
* @ap_pwr_type: Ap power type for 6G
* @ctry_code_match: check for country IE and sta programmed ctry match
*
@ -200,7 +198,6 @@ uint8_t lim_get_max_tx_power(struct mac_context *mac,
*/
void lim_calculate_tpc(struct mac_context *mac,
struct pe_session *session,
bool is_pwr_constraint_absolute,
uint8_t ap_pwr_type,
bool ctry_code_match);

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2012-2020 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
@ -270,7 +271,9 @@ rrm_process_link_measurement_request(struct mac_context *mac,
ap_pwr_constraint = mlme_obj->reg_tpc_obj.ap_constraint_power;
mlme_obj->reg_tpc_obj.ap_constraint_power =
pLinkReq->MaxTxPower.maxTxPower;
lim_calculate_tpc(mac, pe_session, true, 0, false);
/* Set is_power_constraint_abs to true to calculate tpc power */
mlme_obj->reg_tpc_obj.is_power_constraint_abs = true;
lim_calculate_tpc(mac, pe_session, 0, false);
LinkReport.txPower =
mlme_obj->reg_tpc_obj.chan_power_info[0].tx_power;

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-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
@ -688,15 +688,19 @@ sch_bcn_process_sta_opmode(struct mac_context *mac_ctx,
#ifdef FEATURE_WLAN_ESE
static void get_local_power_constraint_beacon(
tpSchBeaconStruct bcn,
int8_t *local_constraint)
int8_t *local_constraint,
bool *is_power_constraint_abs)
{
if (bcn->eseTxPwr.present)
if (bcn->eseTxPwr.present) {
*local_constraint = bcn->eseTxPwr.power_limit;
*is_power_constraint_abs = true;
}
}
#else
static void get_local_power_constraint_beacon(
tpSchBeaconStruct bcn,
int8_t *local_constraint)
int8_t *local_constraint,
bool *is_power_constraint_abs)
{
}
@ -721,6 +725,7 @@ static void __sch_beacon_process_for_session(struct mac_context *mac_ctx,
uint8_t programmed_country[REG_ALPHA2_LEN + 1];
enum reg_6g_ap_type pwr_type_6g = REG_INDOOR_AP;
bool ctry_code_match = false;
bool is_power_constraint_abs = false;
qdf_mem_zero(&beaconParams, sizeof(tUpdateBeaconParams));
beaconParams.paramChangeBitmap = 0;
@ -777,25 +782,30 @@ static void __sch_beacon_process_for_session(struct mac_context *mac_ctx,
&tpe_change);
if (mac_ctx->mlme_cfg->sta.allow_tpc_from_ap) {
get_local_power_constraint_beacon(bcn,
&local_constraint);
get_local_power_constraint_beacon(
bcn, &local_constraint,
&is_power_constraint_abs);
if (mac_ctx->rrm.rrmPEContext.rrmEnable &&
bcn->powerConstraintPresent)
bcn->powerConstraintPresent) {
local_constraint =
bcn->localPowerConstraint.localPowerConstraints;
is_power_constraint_abs = false;
}
}
if (local_constraint !=
mlme_obj->reg_tpc_obj.ap_constraint_power) {
mlme_obj->reg_tpc_obj.ap_constraint_power =
local_constraint;
mlme_obj->reg_tpc_obj.is_power_constraint_abs =
is_power_constraint_abs;
ap_constraint_change = true;
}
if ((ap_constraint_change && local_constraint) ||
(tpe_change && !skip_tpe)) {
lim_calculate_tpc(mac_ctx, session, false, pwr_type_6g,
lim_calculate_tpc(mac_ctx, session, pwr_type_6g,
ctry_code_match);
if (tx_ops->set_tpc_power)
@ -810,16 +820,21 @@ static void __sch_beacon_process_for_session(struct mac_context *mac_ctx,
local_constraint = regMax;
if (mac_ctx->mlme_cfg->sta.allow_tpc_from_ap) {
get_local_power_constraint_beacon(bcn,
&local_constraint);
get_local_power_constraint_beacon(
bcn, &local_constraint,
&is_power_constraint_abs);
if (mac_ctx->rrm.rrmPEContext.rrmEnable &&
bcn->powerConstraintPresent) {
local_constraint = regMax;
local_constraint -=
bcn->localPowerConstraint.localPowerConstraints;
is_power_constraint_abs = false;
}
}
mlme_obj->reg_tpc_obj.is_power_constraint_abs =
is_power_constraint_abs;
mlme_obj->reg_tpc_obj.reg_max[0] = regMax;
mlme_obj->reg_tpc_obj.ap_constraint_power = local_constraint;
mlme_obj->reg_tpc_obj.frequency[0] = session->curr_op_freq;

View file

@ -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
@ -615,6 +615,8 @@ QDF_STATUS sme_ser_cmd_callback(struct wlan_serialization_command *cmd,
status = sme_ser_handle_active_cmd(cmd);
break;
case WLAN_SER_CB_CANCEL_CMD:
if (cmd->cmd_type == WLAN_SER_CMD_SET_HW_MODE)
policy_mgr_reset_hw_mode_change(mac_ctx->psoc);
break;
case WLAN_SER_CB_RELEASE_MEM_CMD:
if (cmd->vdev)
@ -629,6 +631,9 @@ QDF_STATUS sme_ser_cmd_callback(struct wlan_serialization_command *cmd,
sme_cmd->command == eSmeCommandWmStatusChange))
qdf_trigger_self_recovery(mac_ctx->psoc,
QDF_ACTIVE_LIST_TIMEOUT);
if (cmd->cmd_type == WLAN_SER_CMD_SET_HW_MODE)
policy_mgr_reset_hw_mode_change(mac_ctx->psoc);
break;
default:
sme_debug("unknown reason code");

View file

@ -21306,10 +21306,19 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
* the candidate was not successful.
* Connection to the previous AP is still valid in this
* case. So move to RSO_ENABLED state.
*
* Switch to RSO enabled state only if the current state is
* WLAN_ROAMING_IN_PROG or WLAN_ROAM_SYNCH_IN_PROG.
* This API can be called in internal roam aborts also when
* RSO state is deinit and cause RSO start to be sent in
* disconnected state.
*/
csr_post_roam_state_change(mac_ctx, session_id,
WLAN_ROAM_RSO_ENABLED,
REASON_ROAM_ABORT);
if (MLME_IS_ROAMING_IN_PROG(mac_ctx->psoc, session_id) ||
MLME_IS_ROAM_SYNCH_IN_PROGRESS(mac_ctx->psoc, session_id))
csr_post_roam_state_change(mac_ctx, session_id,
WLAN_ROAM_RSO_ENABLED,
REASON_ROAM_ABORT);
csr_roam_roaming_offload_timer_action(mac_ctx,
0, session_id, ROAMING_OFFLOAD_TIMER_STOP);
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,

View file

@ -1398,16 +1398,6 @@ int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event,
wma_roam_update_vdev(wma, roam_synch_ind_ptr);
if (QDF_IS_STATUS_ERROR(wma->csr_roam_synch_cb(wma->mac_context,
roam_synch_ind_ptr,
bss_desc_ptr, SIR_ROAM_SYNCH_PROPAGATION))) {
wma_err("CSR roam synch propagation failed, abort roam");
status = -EINVAL;
goto cleanup_label;
}
wma_process_roam_synch_complete(wma, synch_event->vdev_id);
/* update freq and channel width */
wma->interfaces[synch_event->vdev_id].ch_freq =
roam_synch_ind_ptr->chan_freq;
@ -1426,6 +1416,16 @@ int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event,
param_buf->chan,
&wma->interfaces[synch_event->vdev_id]);
if (QDF_IS_STATUS_ERROR(wma->csr_roam_synch_cb(wma->mac_context,
roam_synch_ind_ptr,
bss_desc_ptr, SIR_ROAM_SYNCH_PROPAGATION))) {
wma_err("CSR roam synch propagation failed, abort roam");
status = -EINVAL;
goto cleanup_label;
}
wma_process_roam_synch_complete(wma, synch_event->vdev_id);
wma->csr_roam_synch_cb(wma->mac_context, roam_synch_ind_ptr,
bss_desc_ptr, SIR_ROAM_SYNCH_COMPLETE);
wma->interfaces[synch_event->vdev_id].roam_synch_delay =