mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 22:40:54 -04:00
Merge 3e51b2ee8e on remote branch
Change-Id: If9bb859ff86680721dcd99c8ca301430a430311c
This commit is contained in:
commit
95681a7f79
29 changed files with 238 additions and 75 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 ||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) */
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
Loading…
Reference in a new issue