提交 d7b9bb69 编写于 作者: E Emmanuel Grumbach 提交者: Luca Coelho

iwlwifi: mvm: remove support for Link Quality Measurements

This was never used by any product. Remove it.
Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
上级 72cbb73e
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
......@@ -67,79 +67,12 @@
* enum iwl_mac_conf_subcmd_ids - mac configuration command IDs
*/
enum iwl_mac_conf_subcmd_ids {
/**
* @LINK_QUALITY_MEASUREMENT_CMD: &struct iwl_link_qual_msrmnt_cmd
*/
LINK_QUALITY_MEASUREMENT_CMD = 0x1,
/**
* @LINK_QUALITY_MEASUREMENT_COMPLETE_NOTIF:
* &struct iwl_link_qual_msrmnt_notif
*/
LINK_QUALITY_MEASUREMENT_COMPLETE_NOTIF = 0xFE,
/**
* @CHANNEL_SWITCH_NOA_NOTIF: &struct iwl_channel_switch_noa_notif
*/
CHANNEL_SWITCH_NOA_NOTIF = 0xFF,
};
#define LQM_NUMBER_OF_STATIONS_IN_REPORT 16
enum iwl_lqm_cmd_operatrions {
LQM_CMD_OPERATION_START_MEASUREMENT = 0x01,
LQM_CMD_OPERATION_STOP_MEASUREMENT = 0x02,
};
enum iwl_lqm_status {
LQM_STATUS_SUCCESS = 0,
LQM_STATUS_TIMEOUT = 1,
LQM_STATUS_ABORT = 2,
};
/**
* struct iwl_link_qual_msrmnt_cmd - Link Quality Measurement command
* @cmd_operation: command operation to be performed (start or stop)
* as defined above.
* @mac_id: MAC ID the measurement applies to.
* @measurement_time: time of the total measurement to be performed, in uSec.
* @timeout: maximum time allowed until a response is sent, in uSec.
*/
struct iwl_link_qual_msrmnt_cmd {
__le32 cmd_operation;
__le32 mac_id;
__le32 measurement_time;
__le32 timeout;
} __packed /* LQM_CMD_API_S_VER_1 */;
/**
* struct iwl_link_qual_msrmnt_notif - Link Quality Measurement notification
*
* @frequent_stations_air_time: an array containing the total air time
* (in uSec) used by the most frequently transmitting stations.
* @number_of_stations: the number of uniqe stations included in the array
* (a number between 0 to 16)
* @total_air_time_other_stations: the total air time (uSec) used by all the
* stations which are not included in the above report.
* @time_in_measurement_window: the total time in uSec in which a measurement
* took place.
* @tx_frame_dropped: the number of TX frames dropped due to retry limit during
* measurement
* @mac_id: MAC ID the measurement applies to.
* @status: return status. may be one of the LQM_STATUS_* defined above.
* @reserved: reserved.
*/
struct iwl_link_qual_msrmnt_notif {
__le32 frequent_stations_air_time[LQM_NUMBER_OF_STATIONS_IN_REPORT];
__le32 number_of_stations;
__le32 total_air_time_other_stations;
__le32 time_in_measurement_window;
__le32 tx_frame_dropped;
__le32 mac_id;
__le32 status;
u8 reserved[12];
} __packed; /* LQM_MEASUREMENT_COMPLETE_NTF_API_S_VER1 */
/**
* struct iwl_channel_switch_noa_notif - Channel switch NOA notification
*
......
......@@ -1455,80 +1455,6 @@ static const char * const chanwidths[] = {
[NL80211_CHAN_WIDTH_160] = "vht160",
};
static bool iwl_mvm_lqm_notif_wait(struct iwl_notif_wait_data *notif_wait,
struct iwl_rx_packet *pkt, void *data)
{
struct ieee80211_vif *vif = data;
struct iwl_mvm *mvm =
container_of(notif_wait, struct iwl_mvm, notif_wait);
struct iwl_link_qual_msrmnt_notif *report = (void *)pkt->data;
u32 num_of_stations = le32_to_cpu(report->number_of_stations);
int i;
IWL_INFO(mvm, "LQM report:\n");
IWL_INFO(mvm, "\tstatus: %d\n", report->status);
IWL_INFO(mvm, "\tmacID: %d\n", le32_to_cpu(report->mac_id));
IWL_INFO(mvm, "\ttx_frame_dropped: %d\n",
le32_to_cpu(report->tx_frame_dropped));
IWL_INFO(mvm, "\ttime_in_measurement_window: %d us\n",
le32_to_cpu(report->time_in_measurement_window));
IWL_INFO(mvm, "\ttotal_air_time_other_stations: %d\n",
le32_to_cpu(report->total_air_time_other_stations));
IWL_INFO(mvm, "\tchannel_freq: %d\n",
vif->bss_conf.chandef.center_freq1);
IWL_INFO(mvm, "\tchannel_width: %s\n",
chanwidths[vif->bss_conf.chandef.width]);
IWL_INFO(mvm, "\tnumber_of_stations: %d\n", num_of_stations);
for (i = 0; i < num_of_stations; i++)
IWL_INFO(mvm, "\t\tsta[%d]: %d\n", i,
report->frequent_stations_air_time[i]);
return true;
}
static ssize_t iwl_dbgfs_lqm_send_cmd_write(struct ieee80211_vif *vif,
char *buf, size_t count,
loff_t *ppos)
{
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
struct iwl_mvm *mvm = mvmvif->mvm;
struct iwl_notification_wait wait_lqm_notif;
static u16 lqm_notif[] = {
WIDE_ID(MAC_CONF_GROUP,
LINK_QUALITY_MEASUREMENT_COMPLETE_NOTIF)
};
int err;
u32 duration;
u32 timeout;
if (sscanf(buf, "%d,%d", &duration, &timeout) != 2)
return -EINVAL;
iwl_init_notification_wait(&mvm->notif_wait, &wait_lqm_notif,
lqm_notif, ARRAY_SIZE(lqm_notif),
iwl_mvm_lqm_notif_wait, vif);
mutex_lock(&mvm->mutex);
err = iwl_mvm_send_lqm_cmd(vif, LQM_CMD_OPERATION_START_MEASUREMENT,
duration, timeout);
mutex_unlock(&mvm->mutex);
if (err) {
IWL_ERR(mvm, "Failed to send lqm cmdf(err=%d)\n", err);
iwl_remove_notification(&mvm->notif_wait, &wait_lqm_notif);
return err;
}
/* wait for 2 * timeout (safety guard) and convert to jiffies*/
timeout = msecs_to_jiffies((timeout * 2) / 1000);
err = iwl_wait_notification(&mvm->notif_wait, &wait_lqm_notif,
timeout);
if (err)
IWL_ERR(mvm, "Getting lqm notif timed out\n");
return count;
}
#define MVM_DEBUGFS_WRITE_FILE_OPS(name, bufsz) \
_MVM_DEBUGFS_WRITE_FILE_OPS(name, bufsz, struct ieee80211_vif)
#define MVM_DEBUGFS_READ_WRITE_FILE_OPS(name, bufsz) \
......@@ -1553,7 +1479,6 @@ MVM_DEBUGFS_READ_WRITE_FILE_OPS(tof_range_abort, 32);
MVM_DEBUGFS_READ_FILE_OPS(tof_range_response);
MVM_DEBUGFS_READ_WRITE_FILE_OPS(tof_responder_params, 32);
MVM_DEBUGFS_READ_WRITE_FILE_OPS(quota_min, 32);
MVM_DEBUGFS_WRITE_FILE_OPS(lqm_send_cmd, 64);
MVM_DEBUGFS_READ_FILE_OPS(os_device_timediff);
......@@ -1594,7 +1519,6 @@ void iwl_mvm_vif_dbgfs_register(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
S_IRUSR | S_IWUSR);
MVM_DEBUGFS_ADD_FILE_VIF(quota_min, mvmvif->dbgfs_dir,
S_IRUSR | S_IWUSR);
MVM_DEBUGFS_ADD_FILE_VIF(lqm_send_cmd, mvmvif->dbgfs_dir, S_IWUSR);
MVM_DEBUGFS_ADD_FILE_VIF(os_device_timediff,
mvmvif->dbgfs_dir, S_IRUSR);
......
......@@ -1878,11 +1878,6 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
if (changes & BSS_CHANGED_ASSOC && bss_conf->assoc)
iwl_mvm_mac_ctxt_recalc_tsf_id(mvm, vif);
if (changes & BSS_CHANGED_ASSOC && !bss_conf->assoc &&
mvmvif->lqm_active)
iwl_mvm_send_lqm_cmd(vif, LQM_CMD_OPERATION_STOP_MEASUREMENT,
0, 0);
/*
* If we're not associated yet, take the (new) BSSID before associating
* so the firmware knows. If we're already associated, then use the old
......@@ -3879,11 +3874,6 @@ static int iwl_mvm_pre_channel_switch(struct ieee80211_hw *hw,
break;
case NL80211_IFTYPE_STATION:
if (mvmvif->lqm_active)
iwl_mvm_send_lqm_cmd(vif,
LQM_CMD_OPERATION_STOP_MEASUREMENT,
0, 0);
/* Schedule the time event to a bit before beacon 1,
* to make sure we're in the new channel when the
* GO/AP arrives. In case count <= 1 immediately schedule the
......
......@@ -436,12 +436,6 @@ struct iwl_mvm_vif {
/* TCP Checksum Offload */
netdev_features_t features;
/*
* link quality measurement - used to check whether this interface
* is in the middle of a link quality measurement
*/
bool lqm_active;
};
static inline struct iwl_mvm_vif *
......@@ -1846,12 +1840,6 @@ unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm,
void iwl_mvm_connection_loss(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
const char *errmsg);
/* Link Quality Measurement */
int iwl_mvm_send_lqm_cmd(struct ieee80211_vif *vif,
enum iwl_lqm_cmd_operatrions operation,
u32 duration, u32 timeout);
bool iwl_mvm_lqm_active(struct iwl_mvm *mvm);
int iwl_mvm_sar_select_profile(struct iwl_mvm *mvm, int prof_a, int prof_b);
int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm);
......
......@@ -423,8 +423,6 @@ static const struct iwl_hcmd_names iwl_mvm_system_names[] = {
* Access is done through binary search
*/
static const struct iwl_hcmd_names iwl_mvm_mac_conf_names[] = {
HCMD_NAME(LINK_QUALITY_MEASUREMENT_CMD),
HCMD_NAME(LINK_QUALITY_MEASUREMENT_COMPLETE_NOTIF),
HCMD_NAME(CHANNEL_SWITCH_NOA_NOTIF),
};
......
......@@ -1389,74 +1389,3 @@ void iwl_mvm_get_sync_time(struct iwl_mvm *mvm, u32 *gp2, u64 *boottime)
iwl_mvm_power_update_device(mvm);
}
}
int iwl_mvm_send_lqm_cmd(struct ieee80211_vif *vif,
enum iwl_lqm_cmd_operatrions operation,
u32 duration, u32 timeout)
{
struct iwl_mvm_vif *mvm_vif = iwl_mvm_vif_from_mac80211(vif);
struct iwl_link_qual_msrmnt_cmd cmd = {
.cmd_operation = cpu_to_le32(operation),
.mac_id = cpu_to_le32(mvm_vif->id),
.measurement_time = cpu_to_le32(duration),
.timeout = cpu_to_le32(timeout),
};
u32 cmdid =
iwl_cmd_id(LINK_QUALITY_MEASUREMENT_CMD, MAC_CONF_GROUP, 0);
int ret;
if (!fw_has_capa(&mvm_vif->mvm->fw->ucode_capa,
IWL_UCODE_TLV_CAPA_LQM_SUPPORT))
return -EOPNOTSUPP;
if (vif->type != NL80211_IFTYPE_STATION || vif->p2p)
return -EINVAL;
switch (operation) {
case LQM_CMD_OPERATION_START_MEASUREMENT:
if (iwl_mvm_lqm_active(mvm_vif->mvm))
return -EBUSY;
if (!vif->bss_conf.assoc)
return -EINVAL;
mvm_vif->lqm_active = true;
break;
case LQM_CMD_OPERATION_STOP_MEASUREMENT:
if (!iwl_mvm_lqm_active(mvm_vif->mvm))
return -EINVAL;
break;
default:
return -EINVAL;
}
ret = iwl_mvm_send_cmd_pdu(mvm_vif->mvm, cmdid, 0, sizeof(cmd),
&cmd);
/* command failed - roll back lqm_active state */
if (ret) {
mvm_vif->lqm_active =
operation == LQM_CMD_OPERATION_STOP_MEASUREMENT;
}
return ret;
}
static void iwl_mvm_lqm_active_iterator(void *_data, u8 *mac,
struct ieee80211_vif *vif)
{
struct iwl_mvm_vif *mvm_vif = iwl_mvm_vif_from_mac80211(vif);
bool *lqm_active = _data;
*lqm_active = *lqm_active || mvm_vif->lqm_active;
}
bool iwl_mvm_lqm_active(struct iwl_mvm *mvm)
{
bool ret = false;
lockdep_assert_held(&mvm->mutex);
ieee80211_iterate_active_interfaces_atomic(
mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
iwl_mvm_lqm_active_iterator, &ret);
return ret;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部