|
@@ -348,12 +348,86 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file,
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+static ssize_t iwl_dbgfs_channels_read(struct file *file, char __user *user_buf,
|
|
|
+ size_t count, loff_t *ppos)
|
|
|
+{
|
|
|
+ struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
|
|
|
+ struct ieee80211_channel *channels = NULL;
|
|
|
+ const struct ieee80211_supported_band *supp_band = NULL;
|
|
|
+ int pos = 0, i, bufsz = PAGE_SIZE;
|
|
|
+ char *buf;
|
|
|
+ ssize_t ret;
|
|
|
+
|
|
|
+ if (!test_bit(STATUS_GEO_CONFIGURED, &priv->status))
|
|
|
+ return -EAGAIN;
|
|
|
+
|
|
|
+ buf = kzalloc(bufsz, GFP_KERNEL);
|
|
|
+ if (!buf) {
|
|
|
+ IWL_ERROR("Can not allocate Buffer\n");
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ supp_band = iwl_get_hw_mode(priv, IEEE80211_BAND_2GHZ);
|
|
|
+ channels = supp_band->channels;
|
|
|
+
|
|
|
+ pos += scnprintf(buf + pos, bufsz - pos,
|
|
|
+ "Displaying %d channels in 2.4GHz band 802.11bg):\n",
|
|
|
+ supp_band->n_channels);
|
|
|
+
|
|
|
+ for (i = 0; i < supp_band->n_channels; i++)
|
|
|
+ pos += scnprintf(buf + pos, bufsz - pos,
|
|
|
+ "%d: %ddBm: BSS%s%s, %s.\n",
|
|
|
+ ieee80211_frequency_to_channel(
|
|
|
+ channels[i].center_freq),
|
|
|
+ channels[i].max_power,
|
|
|
+ channels[i].flags & IEEE80211_CHAN_RADAR ?
|
|
|
+ " (IEEE 802.11h required)" : "",
|
|
|
+ (!(channels[i].flags & IEEE80211_CHAN_NO_IBSS)
|
|
|
+ || (channels[i].flags &
|
|
|
+ IEEE80211_CHAN_RADAR)) ? "" :
|
|
|
+ ", IBSS",
|
|
|
+ channels[i].flags &
|
|
|
+ IEEE80211_CHAN_PASSIVE_SCAN ?
|
|
|
+ "passive only" : "active/passive");
|
|
|
+
|
|
|
+ supp_band = iwl_get_hw_mode(priv, IEEE80211_BAND_5GHZ);
|
|
|
+ channels = supp_band->channels;
|
|
|
+
|
|
|
+ pos += scnprintf(buf + pos, bufsz - pos,
|
|
|
+ "Displaying %d channels in 5.2GHz band (802.11a)\n",
|
|
|
+ supp_band->n_channels);
|
|
|
+
|
|
|
+ for (i = 0; i < supp_band->n_channels; i++)
|
|
|
+ pos += scnprintf(buf + pos, bufsz - pos,
|
|
|
+ "%d: %ddBm: BSS%s%s, %s.\n",
|
|
|
+ ieee80211_frequency_to_channel(
|
|
|
+ channels[i].center_freq),
|
|
|
+ channels[i].max_power,
|
|
|
+ channels[i].flags & IEEE80211_CHAN_RADAR ?
|
|
|
+ " (IEEE 802.11h required)" : "",
|
|
|
+ ((channels[i].flags & IEEE80211_CHAN_NO_IBSS)
|
|
|
+ || (channels[i].flags &
|
|
|
+ IEEE80211_CHAN_RADAR)) ? "" :
|
|
|
+ ", IBSS",
|
|
|
+ channels[i].flags &
|
|
|
+ IEEE80211_CHAN_PASSIVE_SCAN ?
|
|
|
+ "passive only" : "active/passive");
|
|
|
+
|
|
|
+ ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
|
|
|
+ kfree(buf);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
DEBUGFS_READ_WRITE_FILE_OPS(sram);
|
|
|
DEBUGFS_WRITE_FILE_OPS(log_event);
|
|
|
DEBUGFS_READ_FILE_OPS(eeprom);
|
|
|
DEBUGFS_READ_FILE_OPS(stations);
|
|
|
DEBUGFS_READ_FILE_OPS(rx_statistics);
|
|
|
DEBUGFS_READ_FILE_OPS(tx_statistics);
|
|
|
+DEBUGFS_READ_FILE_OPS(channels);
|
|
|
|
|
|
/*
|
|
|
* Create the debugfs files and directories
|
|
@@ -387,6 +461,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)
|
|
|
DEBUGFS_ADD_FILE(stations, data);
|
|
|
DEBUGFS_ADD_FILE(rx_statistics, data);
|
|
|
DEBUGFS_ADD_FILE(tx_statistics, data);
|
|
|
+ DEBUGFS_ADD_FILE(channels, data);
|
|
|
DEBUGFS_ADD_BOOL(disable_sensitivity, rf, &priv->disable_sens_cal);
|
|
|
DEBUGFS_ADD_BOOL(disable_chain_noise, rf,
|
|
|
&priv->disable_chain_noise_cal);
|
|
@@ -415,6 +490,7 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv)
|
|
|
DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_sram);
|
|
|
DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_log_event);
|
|
|
DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_stations);
|
|
|
+ DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_channels);
|
|
|
DEBUGFS_REMOVE(priv->dbgfs->dir_data);
|
|
|
DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_sensitivity);
|
|
|
DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_chain_noise);
|