Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7b9bb69 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Luca Coelho
Browse files

iwlwifi: mvm: remove support for Link Quality Measurements



This was never used by any product. Remove it.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 72cbb73e
Loading
Loading
Loading
Loading
+0 −67
Original line number Diff line number Diff line
@@ -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
 *
+0 −76
Original line number Diff line number Diff line
@@ -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);

+0 −10
Original line number Diff line number Diff line
@@ -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
+0 −12
Original line number Diff line number Diff line
@@ -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);

+0 −2
Original line number Diff line number Diff line
@@ -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),
};

Loading