diff options
Diffstat (limited to 'net/mac80211/debugfs.c')
-rw-r--r-- | net/mac80211/debugfs.c | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c index 2697a2fe608f..e37f557de3f3 100644 --- a/net/mac80211/debugfs.c +++ b/net/mac80211/debugfs.c | |||
@@ -57,11 +57,62 @@ DEBUGFS_READONLY_FILE(long_retry_limit, 20, "%d", | |||
57 | local->hw.conf.long_frame_max_tx_count); | 57 | local->hw.conf.long_frame_max_tx_count); |
58 | DEBUGFS_READONLY_FILE(total_ps_buffered, 20, "%d", | 58 | DEBUGFS_READONLY_FILE(total_ps_buffered, 20, "%d", |
59 | local->total_ps_buffered); | 59 | local->total_ps_buffered); |
60 | DEBUGFS_READONLY_FILE(wep_iv, 20, "%#06x", | 60 | DEBUGFS_READONLY_FILE(wep_iv, 20, "%#08x", |
61 | local->wep_iv & 0xffffff); | 61 | local->wep_iv & 0xffffff); |
62 | DEBUGFS_READONLY_FILE(rate_ctrl_alg, 100, "%s", | 62 | DEBUGFS_READONLY_FILE(rate_ctrl_alg, 100, "%s", |
63 | local->rate_ctrl ? local->rate_ctrl->ops->name : "<unset>"); | 63 | local->rate_ctrl ? local->rate_ctrl->ops->name : "<unset>"); |
64 | 64 | ||
65 | static ssize_t tsf_read(struct file *file, char __user *user_buf, | ||
66 | size_t count, loff_t *ppos) | ||
67 | { | ||
68 | struct ieee80211_local *local = file->private_data; | ||
69 | u64 tsf = 0; | ||
70 | char buf[100]; | ||
71 | |||
72 | if (local->ops->get_tsf) | ||
73 | tsf = local->ops->get_tsf(local_to_hw(local)); | ||
74 | |||
75 | snprintf(buf, sizeof(buf), "0x%016llx\n", (unsigned long long) tsf); | ||
76 | |||
77 | return simple_read_from_buffer(user_buf, count, ppos, buf, 19); | ||
78 | } | ||
79 | |||
80 | static ssize_t tsf_write(struct file *file, | ||
81 | const char __user *user_buf, | ||
82 | size_t count, loff_t *ppos) | ||
83 | { | ||
84 | struct ieee80211_local *local = file->private_data; | ||
85 | unsigned long long tsf; | ||
86 | char buf[100]; | ||
87 | size_t len; | ||
88 | |||
89 | len = min(count, sizeof(buf) - 1); | ||
90 | if (copy_from_user(buf, user_buf, len)) | ||
91 | return -EFAULT; | ||
92 | buf[len] = '\0'; | ||
93 | |||
94 | if (strncmp(buf, "reset", 5) == 0) { | ||
95 | if (local->ops->reset_tsf) { | ||
96 | local->ops->reset_tsf(local_to_hw(local)); | ||
97 | printk(KERN_INFO "%s: debugfs reset TSF\n", wiphy_name(local->hw.wiphy)); | ||
98 | } | ||
99 | } else { | ||
100 | tsf = simple_strtoul(buf, NULL, 0); | ||
101 | if (local->ops->set_tsf) { | ||
102 | local->ops->set_tsf(local_to_hw(local), tsf); | ||
103 | printk(KERN_INFO "%s: debugfs set TSF to %#018llx\n", wiphy_name(local->hw.wiphy), tsf); | ||
104 | } | ||
105 | } | ||
106 | |||
107 | return count; | ||
108 | } | ||
109 | |||
110 | static const struct file_operations tsf_ops = { | ||
111 | .read = tsf_read, | ||
112 | .write = tsf_write, | ||
113 | .open = mac80211_open_file_generic | ||
114 | }; | ||
115 | |||
65 | /* statistics stuff */ | 116 | /* statistics stuff */ |
66 | 117 | ||
67 | #define DEBUGFS_STATS_FILE(name, buflen, fmt, value...) \ | 118 | #define DEBUGFS_STATS_FILE(name, buflen, fmt, value...) \ |
@@ -136,8 +187,6 @@ DEBUGFS_STATS_FILE(multicast_received_frame_count, 20, "%u", | |||
136 | local->dot11MulticastReceivedFrameCount); | 187 | local->dot11MulticastReceivedFrameCount); |
137 | DEBUGFS_STATS_FILE(transmitted_frame_count, 20, "%u", | 188 | DEBUGFS_STATS_FILE(transmitted_frame_count, 20, "%u", |
138 | local->dot11TransmittedFrameCount); | 189 | local->dot11TransmittedFrameCount); |
139 | DEBUGFS_STATS_FILE(wep_undecryptable_count, 20, "%u", | ||
140 | local->dot11WEPUndecryptableCount); | ||
141 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS | 190 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS |
142 | DEBUGFS_STATS_FILE(tx_handlers_drop, 20, "%u", | 191 | DEBUGFS_STATS_FILE(tx_handlers_drop, 20, "%u", |
143 | local->tx_handlers_drop); | 192 | local->tx_handlers_drop); |
@@ -204,6 +253,7 @@ void debugfs_hw_add(struct ieee80211_local *local) | |||
204 | DEBUGFS_ADD(long_retry_limit); | 253 | DEBUGFS_ADD(long_retry_limit); |
205 | DEBUGFS_ADD(total_ps_buffered); | 254 | DEBUGFS_ADD(total_ps_buffered); |
206 | DEBUGFS_ADD(wep_iv); | 255 | DEBUGFS_ADD(wep_iv); |
256 | DEBUGFS_ADD(tsf); | ||
207 | 257 | ||
208 | statsd = debugfs_create_dir("statistics", phyd); | 258 | statsd = debugfs_create_dir("statistics", phyd); |
209 | local->debugfs.statistics = statsd; | 259 | local->debugfs.statistics = statsd; |
@@ -221,7 +271,6 @@ void debugfs_hw_add(struct ieee80211_local *local) | |||
221 | DEBUGFS_STATS_ADD(received_fragment_count); | 271 | DEBUGFS_STATS_ADD(received_fragment_count); |
222 | DEBUGFS_STATS_ADD(multicast_received_frame_count); | 272 | DEBUGFS_STATS_ADD(multicast_received_frame_count); |
223 | DEBUGFS_STATS_ADD(transmitted_frame_count); | 273 | DEBUGFS_STATS_ADD(transmitted_frame_count); |
224 | DEBUGFS_STATS_ADD(wep_undecryptable_count); | ||
225 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS | 274 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS |
226 | DEBUGFS_STATS_ADD(tx_handlers_drop); | 275 | DEBUGFS_STATS_ADD(tx_handlers_drop); |
227 | DEBUGFS_STATS_ADD(tx_handlers_queued); | 276 | DEBUGFS_STATS_ADD(tx_handlers_queued); |
@@ -258,6 +307,7 @@ void debugfs_hw_del(struct ieee80211_local *local) | |||
258 | DEBUGFS_DEL(long_retry_limit); | 307 | DEBUGFS_DEL(long_retry_limit); |
259 | DEBUGFS_DEL(total_ps_buffered); | 308 | DEBUGFS_DEL(total_ps_buffered); |
260 | DEBUGFS_DEL(wep_iv); | 309 | DEBUGFS_DEL(wep_iv); |
310 | DEBUGFS_DEL(tsf); | ||
261 | 311 | ||
262 | DEBUGFS_STATS_DEL(transmitted_fragment_count); | 312 | DEBUGFS_STATS_DEL(transmitted_fragment_count); |
263 | DEBUGFS_STATS_DEL(multicast_transmitted_frame_count); | 313 | DEBUGFS_STATS_DEL(multicast_transmitted_frame_count); |
@@ -268,7 +318,6 @@ void debugfs_hw_del(struct ieee80211_local *local) | |||
268 | DEBUGFS_STATS_DEL(received_fragment_count); | 318 | DEBUGFS_STATS_DEL(received_fragment_count); |
269 | DEBUGFS_STATS_DEL(multicast_received_frame_count); | 319 | DEBUGFS_STATS_DEL(multicast_received_frame_count); |
270 | DEBUGFS_STATS_DEL(transmitted_frame_count); | 320 | DEBUGFS_STATS_DEL(transmitted_frame_count); |
271 | DEBUGFS_STATS_DEL(wep_undecryptable_count); | ||
272 | DEBUGFS_STATS_DEL(num_scans); | 321 | DEBUGFS_STATS_DEL(num_scans); |
273 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS | 322 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS |
274 | DEBUGFS_STATS_DEL(tx_handlers_drop); | 323 | DEBUGFS_STATS_DEL(tx_handlers_drop); |