iwlwifi: add num_of_sos_stats to statistics counter
authorWey-Yi Guy <wey-yi.w.guy@intel.com>
Fri, 15 Jan 2010 21:43:35 +0000 (13:43 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 19 Jan 2010 21:25:10 +0000 (16:25 -0500)
When uCode detects number of beacon missed consecutively above the
internal missed beacon threshold (set by uCode), it will reset and
re-tune the radio in order to get out of bad PHY state.

This "num_of_sos_states" counter monitors number of time uCode
encounters this bad condition and has to re-tune the radio.

Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-commands.h
drivers/net/wireless/iwlwifi/iwl-debugfs.c

index 3320cce3d57b4391c1c9f17c33d732967440d3b4..8dc34a3d4f7e9c4b7ee572584f0bf5f6c9f821c2 100644 (file)
@@ -3095,7 +3095,12 @@ struct statistics_general {
        __le32 ttl_timestamp;
        struct statistics_div div;
        __le32 rx_enable_counter;
-       __le32 reserved1;
+       /*
+        * num_of_sos_states:
+        *  count the number of times we have to re-tune
+        *  in order to get out of bad PHY status
+        */
+       __le32 num_of_sos_states;
        __le32 reserved2;
        __le32 reserved3;
 } __attribute__ ((packed));
index 2264cbd95a00ffbc1e53eeac9bf608589214d781..19c7fab47939d0b01a2262e490aa81d85250a245 100644 (file)
@@ -1728,7 +1728,7 @@ static ssize_t iwl_dbgfs_ucode_general_stats_read(struct file *file,
        struct iwl_priv *priv = file->private_data;
        int pos = 0;
        char *buf;
-       int bufsz = sizeof(struct statistics_general) * 8 + 250;
+       int bufsz = sizeof(struct statistics_general) * 10 + 300;
        ssize_t ret;
        struct statistics_general *general, *accum_general;
        struct statistics_general *delta_general, *max_general;
@@ -1828,6 +1828,12 @@ static ssize_t iwl_dbgfs_ucode_general_stats_read(struct file *file,
                         accum_general->rx_enable_counter,
                         delta_general->rx_enable_counter,
                         max_general->rx_enable_counter);
+       pos += scnprintf(buf + pos, bufsz - pos, ucode_stats_format,
+                        "num_of_sos_states:",
+                        le32_to_cpu(general->num_of_sos_states),
+                        accum_general->num_of_sos_states,
+                        delta_general->num_of_sos_states,
+                        max_general->num_of_sos_states);
        ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
        kfree(buf);
        return ret;