From 41894a94e16d1db4a08db235fe74040e7870d201 Mon Sep 17 00:00:00 2001 From: Eugene Syromiatnikov Date: Thu, 25 Jul 2019 13:53:34 +0200 Subject: [PATCH 6/7] Revert "iwlwifi: mvm: support FTM initiator" This reverts commit fc36ffda326706b21f70a4aff0c77d9bc94c4f0a. --- .../net/wireless/intel/iwlwifi/fw/api/location.h | 10 +- drivers/net/wireless/intel/iwlwifi/mvm/Makefile | 3 +- drivers/net/wireless/intel/iwlwifi/mvm/constants.h | 1 - .../net/wireless/intel/iwlwifi/mvm/ftm-initiator.c | 459 --------------------- drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 56 +-- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 16 - drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 7 - include/linux/ieee80211.h | 2 - 8 files changed, 4 insertions(+), 550 deletions(-) delete mode 100644 drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c Index: src/drivers/net/wireless/intel/iwlwifi/fw/api/location.h =================================================================== --- src.orig/drivers/net/wireless/intel/iwlwifi/fw/api/location.h 2019-07-25 13:55:50.467603040 +0200 +++ src/drivers/net/wireless/intel/iwlwifi/fw/api/location.h 2019-07-25 13:56:03.737424284 +0200 @@ -7,7 +7,6 @@ * * Copyright(c) 2015 - 2017 Intel Deutschland GmbH * Copyright (C) 2018 Intel Corporation - * Copyright (C) 2019 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as @@ -29,7 +28,6 @@ * * Copyright(c) 2015 - 2017 Intel Deutschland GmbH * Copyright (C) 2018 Intel Corporation - * Copyright (C) 2019 Intel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -405,10 +403,7 @@ * @IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_A: use antenna A fo TX ACKs during FTM * @IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_B: use antenna B fo TX ACKs during FTM * @IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_C: use antenna C fo TX ACKs during FTM - * @IWL_TOF_INITIATOR_FLAGS_SPECIFIC_CALIB: use the specific calib value from - * the range request command - * @IWL_TOF_INITIATOR_FLAGS_COMMON_CALIB: use the common calib value from the - * ragne request command + * @IWL_TOF_INITIATOR_FLAGS_MINDELTA_NO_PREF: no preference for minDeltaFTM */ enum iwl_tof_initiator_flags { IWL_TOF_INITIATOR_FLAGS_FAST_ALGO_DISABLED = BIT(0), @@ -418,8 +413,7 @@ IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_A = BIT(4), IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_B = BIT(5), IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_C = BIT(6), - IWL_TOF_INITIATOR_FLAGS_SPECIFIC_CALIB = BIT(15), - IWL_TOF_INITIATOR_FLAGS_COMMON_CALIB = BIT(16), + IWL_TOF_INITIATOR_FLAGS_MINDELTA_NO_PREF = BIT(7), }; /* LOCATION_RANGE_REQ_CMD_API_S_VER_5 */ #define IWL_MVM_TOF_MAX_APS 5 Index: src/drivers/net/wireless/intel/iwlwifi/mvm/Makefile =================================================================== --- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/Makefile 2019-06-27 14:54:04.131678361 +0200 +++ src/drivers/net/wireless/intel/iwlwifi/mvm/Makefile 2019-07-25 13:56:03.737424284 +0200 @@ -4,8 +4,7 @@ iwlmvm-y += utils.o rx.o rxmq.o tx.o binding.o quota.o sta.o sf.o iwlmvm-y += scan.o time-event.o rs.o rs-fw.o iwlmvm-y += power.o coex.o -iwlmvm-y += tt.o offloading.o tdls.o -iwlmvm-y += ftm-responder.o ftm-initiator.o +iwlmvm-y += tt.o offloading.o tdls.o ftm-responder.o iwlmvm-$(CONFIG_IWLWIFI_DEBUGFS) += debugfs.o debugfs-vif.o iwlmvm-$(CONFIG_IWLWIFI_LEDS) += led.o iwlmvm-$(CONFIG_PM) += d3.o Index: src/drivers/net/wireless/intel/iwlwifi/mvm/constants.h =================================================================== --- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/constants.h 2019-06-27 14:54:04.132678349 +0200 +++ src/drivers/net/wireless/intel/iwlwifi/mvm/constants.h 2019-07-25 13:56:03.737424284 +0200 @@ -65,7 +65,6 @@ #define __MVM_CONSTANTS_H #include -#include "fw-api.h" #define IWL_MVM_UAPSD_NOAGG_BSSIDS_NUM 20 Index: src/drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c =================================================================== --- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c 2019-07-25 13:55:50.468603026 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,459 +0,0 @@ -/****************************************************************************** - * - * This file is provided under a dual BSD/GPLv2 license. When using or - * redistributing this file, you may do so under either license. - * - * GPL LICENSE SUMMARY - * - * Copyright(c) 2015 - 2017 Intel Deutschland GmbH - * Copyright (C) 2018 Intel Corporation - * Copyright (C) 2019 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * The full GNU General Public License is included in this distribution - * in the file called COPYING. - * - * Contact Information: - * Intel Linux Wireless - * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 - * - * BSD LICENSE - * - * Copyright(c) 2015 - 2017 Intel Deutschland GmbH - * Copyright (C) 2018 Intel Corporation - * Copyright (C) 2019 Intel Corporation - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - *****************************************************************************/ -#include -#include -#include -#include "mvm.h" -#include "iwl-io.h" -#include "iwl-prph.h" -#include "constants.h" - -struct iwl_mvm_loc_entry { - struct list_head list; - u8 addr[ETH_ALEN]; - u8 lci_len, civic_len; - u8 buf[]; -}; - -static void iwl_mvm_ftm_reset(struct iwl_mvm *mvm) -{ - struct iwl_mvm_loc_entry *e, *t; - - mvm->ftm_initiator.req = NULL; - mvm->ftm_initiator.req_wdev = NULL; - memset(mvm->ftm_initiator.responses, 0, - sizeof(mvm->ftm_initiator.responses)); - list_for_each_entry_safe(e, t, &mvm->ftm_initiator.loc_list, list) { - list_del(&e->list); - kfree(e); - } -} - -void iwl_mvm_ftm_restart(struct iwl_mvm *mvm) -{ - struct cfg80211_pmsr_result result = { - .status = NL80211_PMSR_STATUS_FAILURE, - .final = 1, - .host_time = ktime_get_boot_ns(), - .type = NL80211_PMSR_TYPE_FTM, - }; - int i; - - lockdep_assert_held(&mvm->mutex); - - if (!mvm->ftm_initiator.req) - return; - - for (i = 0; i < mvm->ftm_initiator.req->n_peers; i++) { - memcpy(result.addr, mvm->ftm_initiator.req->peers[i].addr, - ETH_ALEN); - result.ftm.burst_index = mvm->ftm_initiator.responses[i]; - - cfg80211_pmsr_report(mvm->ftm_initiator.req_wdev, - mvm->ftm_initiator.req, - &result, GFP_KERNEL); - } - - cfg80211_pmsr_complete(mvm->ftm_initiator.req_wdev, - mvm->ftm_initiator.req, GFP_KERNEL); - iwl_mvm_ftm_reset(mvm); -} - -static int -iwl_ftm_range_request_status_to_err(enum iwl_tof_range_request_status s) -{ - switch (s) { - case IWL_TOF_RANGE_REQUEST_STATUS_SUCCESS: - return 0; - case IWL_TOF_RANGE_REQUEST_STATUS_BUSY: - return -EBUSY; - default: - WARN_ON_ONCE(1); - return -EIO; - } -} - -int iwl_mvm_ftm_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif, - struct cfg80211_pmsr_request *req) -{ - struct iwl_tof_range_req_cmd cmd = { - .request_id = req->cookie, - .req_timeout = DIV_ROUND_UP(req->timeout, 100), - .num_of_ap = req->n_peers, - /* - * We treat it always as random, since if not we'll - * have filled our local address there instead. - */ - .macaddr_random = 1, - }; - struct iwl_host_cmd hcmd = { - .id = iwl_cmd_id(TOF_RANGE_REQ_CMD, LOCATION_GROUP, 0), - .data[0] = &cmd, - .len[0] = sizeof(cmd), - .dataflags[0] = IWL_HCMD_DFL_DUP, - }; - u32 status = 0; - int err, i; - - /* use maximum for "no timeout" or bigger than what we can do */ - if (!req->timeout || req->timeout > 255 * 100) - cmd.req_timeout = 255; - - lockdep_assert_held(&mvm->mutex); - - if (mvm->ftm_initiator.req) - return -EBUSY; - - memcpy(cmd.macaddr_template, req->mac_addr, ETH_ALEN); - for (i = 0; i < ETH_ALEN; i++) - cmd.macaddr_mask[i] = ~req->mac_addr_mask[i]; - - for (i = 0; i < cmd.num_of_ap; i++) { - struct cfg80211_pmsr_request_peer *peer = &req->peers[i]; - struct iwl_tof_range_req_ap_entry *cmd_target = &cmd.ap[i]; - u32 freq = peer->chandef.chan->center_freq; - - cmd_target->channel_num = ieee80211_frequency_to_channel(freq); - switch (peer->chandef.width) { - case NL80211_CHAN_WIDTH_20_NOHT: - cmd_target->bandwidth = IWL_TOF_BW_20_LEGACY; - break; - case NL80211_CHAN_WIDTH_20: - cmd_target->bandwidth = IWL_TOF_BW_20_HT; - break; - case NL80211_CHAN_WIDTH_40: - cmd_target->bandwidth = IWL_TOF_BW_40; - break; - case NL80211_CHAN_WIDTH_80: - cmd_target->bandwidth = IWL_TOF_BW_80; - break; - default: - IWL_ERR(mvm, "Unsupported BW in FTM request (%d)\n", - peer->chandef.width); - return -EINVAL; - } - cmd_target->ctrl_ch_position = - (peer->chandef.width > NL80211_CHAN_WIDTH_20) ? - iwl_mvm_get_ctrl_pos(&peer->chandef) : 0; - - memcpy(cmd_target->bssid, peer->addr, ETH_ALEN); - cmd_target->measure_type = 0; /* regular two-sided FTM */ - cmd_target->num_of_bursts = peer->ftm.num_bursts_exp; - cmd_target->burst_period = - cpu_to_le16(peer->ftm.burst_period); - cmd_target->samples_per_burst = peer->ftm.ftms_per_burst; - cmd_target->retries_per_sample = peer->ftm.ftmr_retries; - cmd_target->asap_mode = peer->ftm.asap; - cmd_target->enable_dyn_ack = IWL_MVM_FTM_INITIATOR_DYNACK; - - if (peer->ftm.request_lci) - cmd_target->location_req |= IWL_TOF_LOC_LCI; - if (peer->ftm.request_civicloc) - cmd_target->location_req |= IWL_TOF_LOC_CIVIC; - - cmd_target->algo_type = IWL_MVM_FTM_INITIATOR_ALGO; - } - - if (vif->bss_conf.assoc) - memcpy(cmd.range_req_bssid, vif->bss_conf.bssid, ETH_ALEN); - else - eth_broadcast_addr(cmd.range_req_bssid); - - err = iwl_mvm_send_cmd_status(mvm, &hcmd, &status); - if (!err && status) { - IWL_ERR(mvm, "FTM range request command failure, status: %u\n", - status); - err = iwl_ftm_range_request_status_to_err(status); - } - - if (!err) { - mvm->ftm_initiator.req = req; - mvm->ftm_initiator.req_wdev = ieee80211_vif_to_wdev(vif); - } - - return err; -} - -void iwl_mvm_ftm_abort(struct iwl_mvm *mvm, struct cfg80211_pmsr_request *req) -{ - struct iwl_tof_range_abort_cmd cmd = { - .request_id = req->cookie, - }; - - lockdep_assert_held(&mvm->mutex); - - if (req != mvm->ftm_initiator.req) - return; - - if (iwl_mvm_send_cmd_pdu(mvm, iwl_cmd_id(TOF_RANGE_ABORT_CMD, - LOCATION_GROUP, 0), - 0, sizeof(cmd), &cmd)) - IWL_ERR(mvm, "failed to abort FTM process\n"); -} - -static int iwl_mvm_ftm_find_peer(struct cfg80211_pmsr_request *req, - const u8 *addr) -{ - int i; - - for (i = 0; i < req->n_peers; i++) { - struct cfg80211_pmsr_request_peer *peer = &req->peers[i]; - - if (ether_addr_equal_unaligned(peer->addr, addr)) - return i; - } - - return -ENOENT; -} - -static u64 iwl_mvm_ftm_get_host_time(struct iwl_mvm *mvm, __le32 fw_gp2_ts) -{ - u32 gp2_ts = le32_to_cpu(fw_gp2_ts); - u32 curr_gp2, diff; - u64 now_from_boot_ns; - - iwl_mvm_get_sync_time(mvm, &curr_gp2, &now_from_boot_ns); - - if (curr_gp2 >= gp2_ts) - diff = curr_gp2 - gp2_ts; - else - diff = curr_gp2 + (U32_MAX - gp2_ts + 1); - - return now_from_boot_ns - (u64)diff * 1000; -} - -static void iwl_mvm_ftm_get_lci_civic(struct iwl_mvm *mvm, - struct cfg80211_pmsr_result *res) -{ - struct iwl_mvm_loc_entry *entry; - - list_for_each_entry(entry, &mvm->ftm_initiator.loc_list, list) { - if (!ether_addr_equal_unaligned(res->addr, entry->addr)) - continue; - - if (entry->lci_len) { - res->ftm.lci_len = entry->lci_len; - res->ftm.lci = entry->buf; - } - - if (entry->civic_len) { - res->ftm.civicloc_len = entry->civic_len; - res->ftm.civicloc = entry->buf + entry->lci_len; - } - - /* we found the entry we needed */ - break; - } -} - -void iwl_mvm_ftm_range_resp(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb) -{ - struct iwl_rx_packet *pkt = rxb_addr(rxb); - struct iwl_tof_range_rsp_ntfy *fw_resp = (void *)pkt->data; - int i; - - lockdep_assert_held(&mvm->mutex); - - if (!mvm->ftm_initiator.req) { - IWL_ERR(mvm, "Got FTM response but have no request?\n"); - return; - } - - if (fw_resp->request_id != (u8)mvm->ftm_initiator.req->cookie) { - IWL_ERR(mvm, "Request ID mismatch, got %u, active %u\n", - fw_resp->request_id, - (u8)mvm->ftm_initiator.req->cookie); - return; - } - - if (fw_resp->num_of_aps > mvm->ftm_initiator.req->n_peers) { - IWL_ERR(mvm, "FTM range response invalid\n"); - return; - } - - for (i = 0; i < fw_resp->num_of_aps && i < IWL_MVM_TOF_MAX_APS; i++) { - struct iwl_tof_range_rsp_ap_entry_ntfy *fw_ap = &fw_resp->ap[i]; - struct cfg80211_pmsr_result result = {}; - int peer_idx; - - peer_idx = iwl_mvm_ftm_find_peer(mvm->ftm_initiator.req, - fw_ap->bssid); - if (peer_idx < 0) { - IWL_WARN(mvm, - "Unknown address (%pM, target #%d) in FTM response.\n", - fw_ap->bssid, i); - continue; - } - - switch (fw_ap->measure_status) { - case IWL_TOF_ENTRY_SUCCESS: - result.status = NL80211_PMSR_STATUS_SUCCESS; - break; - case IWL_TOF_ENTRY_TIMING_MEASURE_TIMEOUT: - result.status = NL80211_PMSR_STATUS_TIMEOUT; - break; - case IWL_TOF_ENTRY_NO_RESPONSE: - result.status = NL80211_PMSR_STATUS_FAILURE; - result.ftm.failure_reason = - NL80211_PMSR_FTM_FAILURE_NO_RESPONSE; - break; - case IWL_TOF_ENTRY_REQUEST_REJECTED: - result.status = NL80211_PMSR_STATUS_FAILURE; - result.ftm.failure_reason = - NL80211_PMSR_FTM_FAILURE_PEER_BUSY; - result.ftm.busy_retry_time = fw_ap->refusal_period; - break; - default: - result.status = NL80211_PMSR_STATUS_FAILURE; - result.ftm.failure_reason = - NL80211_PMSR_FTM_FAILURE_UNSPECIFIED; - break; - } - memcpy(result.addr, fw_ap->bssid, ETH_ALEN); - result.host_time = iwl_mvm_ftm_get_host_time(mvm, - fw_ap->timestamp); - result.type = NL80211_PMSR_TYPE_FTM; - result.ftm.burst_index = mvm->ftm_initiator.responses[peer_idx]; - mvm->ftm_initiator.responses[peer_idx]++; - /* - * FIXME: the firmware needs to report this, we don't even know - * the number of bursts the responder picked (if we asked - * it to) - */ - result.final = 0; - result.ftm.rssi_avg = fw_ap->rssi; - result.ftm.rssi_avg_valid = 1; - result.ftm.rssi_spread = fw_ap->rssi_spread; - result.ftm.rssi_spread_valid = 1; - result.ftm.rtt_avg = (s32)le32_to_cpu(fw_ap->rtt); - result.ftm.rtt_avg_valid = 1; - result.ftm.rtt_variance = le32_to_cpu(fw_ap->rtt_variance); - result.ftm.rtt_variance_valid = 1; - result.ftm.rtt_spread = le32_to_cpu(fw_ap->rtt_spread); - result.ftm.rtt_spread_valid = 1; - - iwl_mvm_ftm_get_lci_civic(mvm, &result); - - cfg80211_pmsr_report(mvm->ftm_initiator.req_wdev, - mvm->ftm_initiator.req, - &result, GFP_KERNEL); - } - - if (fw_resp->last_in_batch) { - cfg80211_pmsr_complete(mvm->ftm_initiator.req_wdev, - mvm->ftm_initiator.req, - GFP_KERNEL); - iwl_mvm_ftm_reset(mvm); - } -} - -void iwl_mvm_ftm_lc_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb) -{ - struct iwl_rx_packet *pkt = rxb_addr(rxb); - const struct ieee80211_mgmt *mgmt = (void *)pkt->data; - size_t len = iwl_rx_packet_payload_len(pkt); - struct iwl_mvm_loc_entry *entry; - const u8 *ies, *lci, *civic, *msr_ie; - size_t ies_len, lci_len = 0, civic_len = 0; - size_t baselen = IEEE80211_MIN_ACTION_SIZE + - sizeof(mgmt->u.action.u.ftm); - static const u8 rprt_type_lci = IEEE80211_SPCT_MSR_RPRT_TYPE_LCI; - static const u8 rprt_type_civic = IEEE80211_SPCT_MSR_RPRT_TYPE_CIVIC; - - if (len <= baselen) - return; - - lockdep_assert_held(&mvm->mutex); - - ies = mgmt->u.action.u.ftm.variable; - ies_len = len - baselen; - - msr_ie = cfg80211_find_ie_match(WLAN_EID_MEASURE_REPORT, ies, ies_len, - &rprt_type_lci, 1, 4); - if (msr_ie) { - lci = msr_ie + 2; - lci_len = msr_ie[1]; - } - - msr_ie = cfg80211_find_ie_match(WLAN_EID_MEASURE_REPORT, ies, ies_len, - &rprt_type_civic, 1, 4); - if (msr_ie) { - civic = msr_ie + 2; - civic_len = msr_ie[1]; - } - - entry = kmalloc(sizeof(*entry) + lci_len + civic_len, GFP_KERNEL); - if (!entry) - return; - - memcpy(entry->addr, mgmt->bssid, ETH_ALEN); - - entry->lci_len = lci_len; - if (lci_len) - memcpy(entry->buf, lci, lci_len); - - entry->civic_len = civic_len; - if (civic_len) - memcpy(entry->buf + lci_len, civic, civic_len); - - list_add_tail(&entry->list, &mvm->ftm_initiator.loc_list); -} Index: src/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c =================================================================== --- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c 2019-07-25 13:34:40.887336660 +0200 +++ src/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c 2019-07-25 13:56:03.738424271 +0200 @@ -184,29 +184,6 @@ }; #endif -static const struct cfg80211_pmsr_capabilities iwl_mvm_pmsr_capa = { - .max_peers = IWL_MVM_TOF_MAX_APS, - .report_ap_tsf = 1, - .randomize_mac_addr = 1, - - .ftm = { - .supported = 1, - .asap = 1, - .non_asap = 1, - .request_lci = 1, - .request_civicloc = 1, - .max_bursts_exponent = -1, /* all supported */ - .max_ftms_per_burst = 0, /* no limits */ - .bandwidths = BIT(NL80211_CHAN_WIDTH_20_NOHT) | - BIT(NL80211_CHAN_WIDTH_20) | - BIT(NL80211_CHAN_WIDTH_40) | - BIT(NL80211_CHAN_WIDTH_80), - .preambles = BIT(NL80211_PREAMBLE_LEGACY) | - BIT(NL80211_PREAMBLE_HT) | - BIT(NL80211_PREAMBLE_VHT), - }, -}; - void iwl_mvm_ref(struct iwl_mvm *mvm, enum iwl_mvm_ref_type ref_type) { if (!iwl_mvm_is_d0i3_supported(mvm)) @@ -573,11 +550,9 @@ } if (fw_has_capa(&mvm->fw->ucode_capa, - IWL_UCODE_TLV_CAPA_FTM_CALIBRATED)) { + IWL_UCODE_TLV_CAPA_FTM_CALIBRATED)) wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER); - hw->wiphy->pmsr_capa = &iwl_mvm_pmsr_capa; - } ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS); hw->wiphy->features |= @@ -1220,8 +1195,6 @@ iwl_mvm_cleanup_roc_te(mvm); ieee80211_remain_on_channel_expired(mvm->hw); - iwl_mvm_ftm_restart(mvm); - /* * cleanup all interfaces, even inactive ones, as some might have * gone down during the HW restart @@ -5066,31 +5039,6 @@ return 0; } -static int iwl_mvm_start_pmsr(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct cfg80211_pmsr_request *request) -{ - struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); - int ret; - - mutex_lock(&mvm->mutex); - ret = iwl_mvm_ftm_start(mvm, vif, request); - mutex_unlock(&mvm->mutex); - - return ret; -} - -static void iwl_mvm_abort_pmsr(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct cfg80211_pmsr_request *request) -{ - struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); - - mutex_lock(&mvm->mutex); - iwl_mvm_ftm_abort(mvm, request); - mutex_unlock(&mvm->mutex); -} - static bool iwl_mvm_can_hw_csum(struct sk_buff *skb) { u8 protocol = ip_hdr(skb)->protocol; @@ -5196,8 +5144,6 @@ .get_survey = iwl_mvm_mac_get_survey, .sta_statistics = iwl_mvm_mac_sta_statistics, .get_ftm_responder_stats = iwl_mvm_mac_get_ftm_responder_stats, - .start_pmsr = iwl_mvm_start_pmsr, - .abort_pmsr = iwl_mvm_abort_pmsr, .can_aggregate_in_amsdu = iwl_mvm_mac_can_aggregate, #ifdef CONFIG_IWLWIFI_DEBUGFS Index: src/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h =================================================================== --- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h 2019-06-27 14:54:04.136678301 +0200 +++ src/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h 2019-07-25 13:56:03.739424257 +0200 @@ -1154,12 +1154,6 @@ struct ieee80211_cipher_scheme cs[IWL_UCODE_MAX_CS]; struct cfg80211_ftm_responder_stats ftm_resp_stats; - struct { - struct cfg80211_pmsr_request *req; - struct wireless_dev *req_wdev; - struct list_head loc_list; - int responses[IWL_MVM_TOF_MAX_APS]; - } ftm_initiator; struct ieee80211_vif *nan_vif; #define IWL_MAX_BAID 32 @@ -2077,16 +2071,6 @@ void iwl_mvm_ftm_responder_stats(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb); -/* FTM initiator */ -void iwl_mvm_ftm_restart(struct iwl_mvm *mvm); -void iwl_mvm_ftm_range_resp(struct iwl_mvm *mvm, - struct iwl_rx_cmd_buffer *rxb); -void iwl_mvm_ftm_lc_notif(struct iwl_mvm *mvm, - struct iwl_rx_cmd_buffer *rxb); -int iwl_mvm_ftm_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif, - struct cfg80211_pmsr_request *request); -void iwl_mvm_ftm_abort(struct iwl_mvm *mvm, struct cfg80211_pmsr_request *req); - /* TDLS */ /* Index: src/drivers/net/wireless/intel/iwlwifi/mvm/ops.c =================================================================== --- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/ops.c 2019-07-25 13:55:50.589601396 +0200 +++ src/drivers/net/wireless/intel/iwlwifi/mvm/ops.c 2019-07-25 13:56:03.739424257 +0200 @@ -302,12 +302,6 @@ RX_HANDLER_SYNC), RX_HANDLER_GRP(LOCATION_GROUP, TOF_RESPONDER_STATS, iwl_mvm_ftm_responder_stats, RX_HANDLER_ASYNC_LOCKED), - - RX_HANDLER_GRP(LOCATION_GROUP, TOF_RANGE_RESPONSE_NOTIF, - iwl_mvm_ftm_range_resp, RX_HANDLER_ASYNC_LOCKED), - RX_HANDLER_GRP(LOCATION_GROUP, TOF_LC_NOTIF, - iwl_mvm_ftm_lc_notif, RX_HANDLER_ASYNC_LOCKED), - RX_HANDLER_GRP(DEBUG_GROUP, MFU_ASSERT_DUMP_NTF, iwl_mvm_mfu_assert_dump_notif, RX_HANDLER_SYNC), RX_HANDLER_GRP(PROT_OFFLOAD_GROUP, STORED_BEACON_NTF, @@ -706,7 +700,6 @@ INIT_LIST_HEAD(&mvm->aux_roc_te_list); INIT_LIST_HEAD(&mvm->async_handlers_list); spin_lock_init(&mvm->time_event_lock); - INIT_LIST_HEAD(&mvm->ftm_initiator.loc_list); INIT_WORK(&mvm->async_handlers_wk, iwl_mvm_async_handlers_wk); INIT_WORK(&mvm->roc_done_wk, iwl_mvm_roc_done_wk);