diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-debugfs.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-debugfs.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c index c3df5aa8df91..370b66c444b3 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c +++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c | |||
@@ -348,12 +348,86 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file, | |||
348 | return count; | 348 | return count; |
349 | } | 349 | } |
350 | 350 | ||
351 | |||
352 | |||
353 | static ssize_t iwl_dbgfs_channels_read(struct file *file, char __user *user_buf, | ||
354 | size_t count, loff_t *ppos) | ||
355 | { | ||
356 | struct iwl_priv *priv = (struct iwl_priv *)file->private_data; | ||
357 | struct ieee80211_channel *channels = NULL; | ||
358 | const struct ieee80211_supported_band *supp_band = NULL; | ||
359 | int pos = 0, i, bufsz = PAGE_SIZE; | ||
360 | char *buf; | ||
361 | ssize_t ret; | ||
362 | |||
363 | if (!test_bit(STATUS_GEO_CONFIGURED, &priv->status)) | ||
364 | return -EAGAIN; | ||
365 | |||
366 | buf = kzalloc(bufsz, GFP_KERNEL); | ||
367 | if (!buf) { | ||
368 | IWL_ERROR("Can not allocate Buffer\n"); | ||
369 | return -ENOMEM; | ||
370 | } | ||
371 | |||
372 | supp_band = iwl_get_hw_mode(priv, IEEE80211_BAND_2GHZ); | ||
373 | channels = supp_band->channels; | ||
374 | |||
375 | pos += scnprintf(buf + pos, bufsz - pos, | ||
376 | "Displaying %d channels in 2.4GHz band 802.11bg):\n", | ||
377 | supp_band->n_channels); | ||
378 | |||
379 | for (i = 0; i < supp_band->n_channels; i++) | ||
380 | pos += scnprintf(buf + pos, bufsz - pos, | ||
381 | "%d: %ddBm: BSS%s%s, %s.\n", | ||
382 | ieee80211_frequency_to_channel( | ||
383 | channels[i].center_freq), | ||
384 | channels[i].max_power, | ||
385 | channels[i].flags & IEEE80211_CHAN_RADAR ? | ||
386 | " (IEEE 802.11h required)" : "", | ||
387 | (!(channels[i].flags & IEEE80211_CHAN_NO_IBSS) | ||
388 | || (channels[i].flags & | ||
389 | IEEE80211_CHAN_RADAR)) ? "" : | ||
390 | ", IBSS", | ||
391 | channels[i].flags & | ||
392 | IEEE80211_CHAN_PASSIVE_SCAN ? | ||
393 | "passive only" : "active/passive"); | ||
394 | |||
395 | supp_band = iwl_get_hw_mode(priv, IEEE80211_BAND_5GHZ); | ||
396 | channels = supp_band->channels; | ||
397 | |||
398 | pos += scnprintf(buf + pos, bufsz - pos, | ||
399 | "Displaying %d channels in 5.2GHz band (802.11a)\n", | ||
400 | supp_band->n_channels); | ||
401 | |||
402 | for (i = 0; i < supp_band->n_channels; i++) | ||
403 | pos += scnprintf(buf + pos, bufsz - pos, | ||
404 | "%d: %ddBm: BSS%s%s, %s.\n", | ||
405 | ieee80211_frequency_to_channel( | ||
406 | channels[i].center_freq), | ||
407 | channels[i].max_power, | ||
408 | channels[i].flags & IEEE80211_CHAN_RADAR ? | ||
409 | " (IEEE 802.11h required)" : "", | ||
410 | ((channels[i].flags & IEEE80211_CHAN_NO_IBSS) | ||
411 | || (channels[i].flags & | ||
412 | IEEE80211_CHAN_RADAR)) ? "" : | ||
413 | ", IBSS", | ||
414 | channels[i].flags & | ||
415 | IEEE80211_CHAN_PASSIVE_SCAN ? | ||
416 | "passive only" : "active/passive"); | ||
417 | |||
418 | ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos); | ||
419 | kfree(buf); | ||
420 | return ret; | ||
421 | } | ||
422 | |||
423 | |||
351 | DEBUGFS_READ_WRITE_FILE_OPS(sram); | 424 | DEBUGFS_READ_WRITE_FILE_OPS(sram); |
352 | DEBUGFS_WRITE_FILE_OPS(log_event); | 425 | DEBUGFS_WRITE_FILE_OPS(log_event); |
353 | DEBUGFS_READ_FILE_OPS(eeprom); | 426 | DEBUGFS_READ_FILE_OPS(eeprom); |
354 | DEBUGFS_READ_FILE_OPS(stations); | 427 | DEBUGFS_READ_FILE_OPS(stations); |
355 | DEBUGFS_READ_FILE_OPS(rx_statistics); | 428 | DEBUGFS_READ_FILE_OPS(rx_statistics); |
356 | DEBUGFS_READ_FILE_OPS(tx_statistics); | 429 | DEBUGFS_READ_FILE_OPS(tx_statistics); |
430 | DEBUGFS_READ_FILE_OPS(channels); | ||
357 | 431 | ||
358 | /* | 432 | /* |
359 | * Create the debugfs files and directories | 433 | * Create the debugfs files and directories |
@@ -387,6 +461,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name) | |||
387 | DEBUGFS_ADD_FILE(stations, data); | 461 | DEBUGFS_ADD_FILE(stations, data); |
388 | DEBUGFS_ADD_FILE(rx_statistics, data); | 462 | DEBUGFS_ADD_FILE(rx_statistics, data); |
389 | DEBUGFS_ADD_FILE(tx_statistics, data); | 463 | DEBUGFS_ADD_FILE(tx_statistics, data); |
464 | DEBUGFS_ADD_FILE(channels, data); | ||
390 | DEBUGFS_ADD_BOOL(disable_sensitivity, rf, &priv->disable_sens_cal); | 465 | DEBUGFS_ADD_BOOL(disable_sensitivity, rf, &priv->disable_sens_cal); |
391 | DEBUGFS_ADD_BOOL(disable_chain_noise, rf, | 466 | DEBUGFS_ADD_BOOL(disable_chain_noise, rf, |
392 | &priv->disable_chain_noise_cal); | 467 | &priv->disable_chain_noise_cal); |
@@ -415,6 +490,7 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv) | |||
415 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_sram); | 490 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_sram); |
416 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_log_event); | 491 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_log_event); |
417 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_stations); | 492 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_stations); |
493 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_channels); | ||
418 | DEBUGFS_REMOVE(priv->dbgfs->dir_data); | 494 | DEBUGFS_REMOVE(priv->dbgfs->dir_data); |
419 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_sensitivity); | 495 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_sensitivity); |
420 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_chain_noise); | 496 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_chain_noise); |