aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-debug.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-debugfs.c149
2 files changed, 150 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h
index 18b8cf792130..82befb7ce997 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debug.h
+++ b/drivers/net/wireless/iwlwifi/iwl-debug.h
@@ -103,6 +103,8 @@ struct iwl_debugfs {
103 struct dentry *file_ucode_rx_stats; 103 struct dentry *file_ucode_rx_stats;
104 struct dentry *file_ucode_tx_stats; 104 struct dentry *file_ucode_tx_stats;
105 struct dentry *file_ucode_general_stats; 105 struct dentry *file_ucode_general_stats;
106 struct dentry *file_sensitivity;
107 struct dentry *file_chain_noise;
106 } dbgfs_debug_files; 108 } dbgfs_debug_files;
107 u32 sram_offset; 109 u32 sram_offset;
108 u32 sram_len; 110 u32 sram_len;
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index 20e4edb36ec4..1ad4ff6bfff7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -38,7 +38,7 @@
38#include "iwl-debug.h" 38#include "iwl-debug.h"
39#include "iwl-core.h" 39#include "iwl-core.h"
40#include "iwl-io.h" 40#include "iwl-io.h"
41 41#include "iwl-calib.h"
42 42
43/* create and remove of files */ 43/* create and remove of files */
44#define DEBUGFS_ADD_DIR(name, parent) do { \ 44#define DEBUGFS_ADD_DIR(name, parent) do { \
@@ -1346,6 +1346,145 @@ static ssize_t iwl_dbgfs_ucode_general_stats_read(struct file *file,
1346 return ret; 1346 return ret;
1347} 1347}
1348 1348
1349static ssize_t iwl_dbgfs_sensitivity_read(struct file *file,
1350 char __user *user_buf,
1351 size_t count, loff_t *ppos) {
1352
1353 struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
1354 int pos = 0;
1355 int cnt = 0;
1356 char *buf;
1357 int bufsz = sizeof(struct iwl_sensitivity_data) * 4 + 100;
1358 ssize_t ret;
1359 struct iwl_sensitivity_data *data;
1360
1361 data = &priv->sensitivity_data;
1362 buf = kzalloc(bufsz, GFP_KERNEL);
1363 if (!buf) {
1364 IWL_ERR(priv, "Can not allocate Buffer\n");
1365 return -ENOMEM;
1366 }
1367
1368 pos += scnprintf(buf + pos, bufsz - pos, "auto_corr_ofdm:\t\t\t %u\n",
1369 data->auto_corr_ofdm);
1370 pos += scnprintf(buf + pos, bufsz - pos,
1371 "auto_corr_ofdm_mrc:\t\t %u\n",
1372 data->auto_corr_ofdm_mrc);
1373 pos += scnprintf(buf + pos, bufsz - pos, "auto_corr_ofdm_x1:\t\t %u\n",
1374 data->auto_corr_ofdm_x1);
1375 pos += scnprintf(buf + pos, bufsz - pos,
1376 "auto_corr_ofdm_mrc_x1:\t\t %u\n",
1377 data->auto_corr_ofdm_mrc_x1);
1378 pos += scnprintf(buf + pos, bufsz - pos, "auto_corr_cck:\t\t\t %u\n",
1379 data->auto_corr_cck);
1380 pos += scnprintf(buf + pos, bufsz - pos, "auto_corr_cck_mrc:\t\t %u\n",
1381 data->auto_corr_cck_mrc);
1382 pos += scnprintf(buf + pos, bufsz - pos,
1383 "last_bad_plcp_cnt_ofdm:\t\t %u\n",
1384 data->last_bad_plcp_cnt_ofdm);
1385 pos += scnprintf(buf + pos, bufsz - pos, "last_fa_cnt_ofdm:\t\t %u\n",
1386 data->last_fa_cnt_ofdm);
1387 pos += scnprintf(buf + pos, bufsz - pos,
1388 "last_bad_plcp_cnt_cck:\t\t %u\n",
1389 data->last_bad_plcp_cnt_cck);
1390 pos += scnprintf(buf + pos, bufsz - pos, "last_fa_cnt_cck:\t\t %u\n",
1391 data->last_fa_cnt_cck);
1392 pos += scnprintf(buf + pos, bufsz - pos, "nrg_curr_state:\t\t\t %u\n",
1393 data->nrg_curr_state);
1394 pos += scnprintf(buf + pos, bufsz - pos, "nrg_prev_state:\t\t\t %u\n",
1395 data->nrg_prev_state);
1396 pos += scnprintf(buf + pos, bufsz - pos, "nrg_value:\t\t\t");
1397 for (cnt = 0; cnt < 10; cnt++) {
1398 pos += scnprintf(buf + pos, bufsz - pos, " %u",
1399 data->nrg_value[cnt]);
1400 }
1401 pos += scnprintf(buf + pos, bufsz - pos, "\n");
1402 pos += scnprintf(buf + pos, bufsz - pos, "nrg_silence_rssi:\t\t");
1403 for (cnt = 0; cnt < NRG_NUM_PREV_STAT_L; cnt++) {
1404 pos += scnprintf(buf + pos, bufsz - pos, " %u",
1405 data->nrg_silence_rssi[cnt]);
1406 }
1407 pos += scnprintf(buf + pos, bufsz - pos, "\n");
1408 pos += scnprintf(buf + pos, bufsz - pos, "nrg_silence_ref:\t\t %u\n",
1409 data->nrg_silence_ref);
1410 pos += scnprintf(buf + pos, bufsz - pos, "nrg_energy_idx:\t\t\t %u\n",
1411 data->nrg_energy_idx);
1412 pos += scnprintf(buf + pos, bufsz - pos, "nrg_silence_idx:\t\t %u\n",
1413 data->nrg_silence_idx);
1414 pos += scnprintf(buf + pos, bufsz - pos, "nrg_th_cck:\t\t\t %u\n",
1415 data->nrg_th_cck);
1416 pos += scnprintf(buf + pos, bufsz - pos,
1417 "nrg_auto_corr_silence_diff:\t %u\n",
1418 data->nrg_auto_corr_silence_diff);
1419 pos += scnprintf(buf + pos, bufsz - pos, "num_in_cck_no_fa:\t\t %u\n",
1420 data->num_in_cck_no_fa);
1421 pos += scnprintf(buf + pos, bufsz - pos, "nrg_th_ofdm:\t\t\t %u\n",
1422 data->nrg_th_ofdm);
1423
1424 ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1425 kfree(buf);
1426 return ret;
1427}
1428
1429
1430static ssize_t iwl_dbgfs_chain_noise_read(struct file *file,
1431 char __user *user_buf,
1432 size_t count, loff_t *ppos) {
1433
1434 struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
1435 int pos = 0;
1436 int cnt = 0;
1437 char *buf;
1438 int bufsz = sizeof(struct iwl_chain_noise_data) * 4 + 100;
1439 ssize_t ret;
1440 struct iwl_chain_noise_data *data;
1441
1442 data = &priv->chain_noise_data;
1443 buf = kzalloc(bufsz, GFP_KERNEL);
1444 if (!buf) {
1445 IWL_ERR(priv, "Can not allocate Buffer\n");
1446 return -ENOMEM;
1447 }
1448
1449 pos += scnprintf(buf + pos, bufsz - pos, "active_chains:\t\t\t %u\n",
1450 data->active_chains);
1451 pos += scnprintf(buf + pos, bufsz - pos, "chain_noise_a:\t\t\t %u\n",
1452 data->chain_noise_a);
1453 pos += scnprintf(buf + pos, bufsz - pos, "chain_noise_b:\t\t\t %u\n",
1454 data->chain_noise_b);
1455 pos += scnprintf(buf + pos, bufsz - pos, "chain_noise_c:\t\t\t %u\n",
1456 data->chain_noise_c);
1457 pos += scnprintf(buf + pos, bufsz - pos, "chain_signal_a:\t\t\t %u\n",
1458 data->chain_signal_a);
1459 pos += scnprintf(buf + pos, bufsz - pos, "chain_signal_b:\t\t\t %u\n",
1460 data->chain_signal_b);
1461 pos += scnprintf(buf + pos, bufsz - pos, "chain_signal_c:\t\t\t %u\n",
1462 data->chain_signal_c);
1463 pos += scnprintf(buf + pos, bufsz - pos, "beacon_count:\t\t\t %u\n",
1464 data->beacon_count);
1465
1466 pos += scnprintf(buf + pos, bufsz - pos, "disconn_array:\t\t\t");
1467 for (cnt = 0; cnt < NUM_RX_CHAINS; cnt++) {
1468 pos += scnprintf(buf + pos, bufsz - pos, " %u",
1469 data->disconn_array[cnt]);
1470 }
1471 pos += scnprintf(buf + pos, bufsz - pos, "\n");
1472 pos += scnprintf(buf + pos, bufsz - pos, "delta_gain_code:\t\t");
1473 for (cnt = 0; cnt < NUM_RX_CHAINS; cnt++) {
1474 pos += scnprintf(buf + pos, bufsz - pos, " %u",
1475 data->delta_gain_code[cnt]);
1476 }
1477 pos += scnprintf(buf + pos, bufsz - pos, "\n");
1478 pos += scnprintf(buf + pos, bufsz - pos, "radio_write:\t\t\t %u\n",
1479 data->radio_write);
1480 pos += scnprintf(buf + pos, bufsz - pos, "state:\t\t\t\t %u\n",
1481 data->state);
1482
1483 ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1484 kfree(buf);
1485 return ret;
1486}
1487
1349DEBUGFS_READ_WRITE_FILE_OPS(rx_statistics); 1488DEBUGFS_READ_WRITE_FILE_OPS(rx_statistics);
1350DEBUGFS_READ_WRITE_FILE_OPS(tx_statistics); 1489DEBUGFS_READ_WRITE_FILE_OPS(tx_statistics);
1351DEBUGFS_READ_WRITE_FILE_OPS(traffic_log); 1490DEBUGFS_READ_WRITE_FILE_OPS(traffic_log);
@@ -1354,6 +1493,8 @@ DEBUGFS_READ_FILE_OPS(tx_queue);
1354DEBUGFS_READ_FILE_OPS(ucode_rx_stats); 1493DEBUGFS_READ_FILE_OPS(ucode_rx_stats);
1355DEBUGFS_READ_FILE_OPS(ucode_tx_stats); 1494DEBUGFS_READ_FILE_OPS(ucode_tx_stats);
1356DEBUGFS_READ_FILE_OPS(ucode_general_stats); 1495DEBUGFS_READ_FILE_OPS(ucode_general_stats);
1496DEBUGFS_READ_FILE_OPS(sensitivity);
1497DEBUGFS_READ_FILE_OPS(chain_noise);
1357 1498
1358/* 1499/*
1359 * Create the debugfs files and directories 1500 * Create the debugfs files and directories
@@ -1404,6 +1545,8 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)
1404 DEBUGFS_ADD_FILE(ucode_rx_stats, debug); 1545 DEBUGFS_ADD_FILE(ucode_rx_stats, debug);
1405 DEBUGFS_ADD_FILE(ucode_tx_stats, debug); 1546 DEBUGFS_ADD_FILE(ucode_tx_stats, debug);
1406 DEBUGFS_ADD_FILE(ucode_general_stats, debug); 1547 DEBUGFS_ADD_FILE(ucode_general_stats, debug);
1548 DEBUGFS_ADD_FILE(sensitivity, debug);
1549 DEBUGFS_ADD_FILE(chain_noise, debug);
1407 } 1550 }
1408 DEBUGFS_ADD_BOOL(disable_sensitivity, rf, &priv->disable_sens_cal); 1551 DEBUGFS_ADD_BOOL(disable_sensitivity, rf, &priv->disable_sens_cal);
1409 DEBUGFS_ADD_BOOL(disable_chain_noise, rf, 1552 DEBUGFS_ADD_BOOL(disable_chain_noise, rf,
@@ -1456,6 +1599,10 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv)
1456 file_ucode_tx_stats); 1599 file_ucode_tx_stats);
1457 DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files. 1600 DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files.
1458 file_ucode_general_stats); 1601 file_ucode_general_stats);
1602 DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files.
1603 file_sensitivity);
1604 DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files.
1605 file_chain_noise);
1459 } 1606 }
1460 DEBUGFS_REMOVE(priv->dbgfs->dir_debug); 1607 DEBUGFS_REMOVE(priv->dbgfs->dir_debug);
1461 DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_sensitivity); 1608 DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_sensitivity);