diff options
author | Luis R. Rodriguez <lrodriguez@atheros.com> | 2009-05-02 00:39:30 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-05-20 14:46:23 -0400 |
commit | 80a3511d70e8fc7ed3fe4417d7b0bf6c3f642f64 (patch) | |
tree | df35f2640eea3e9b7772dcfd112eba98379bb390 /net/wireless | |
parent | 1ac61302dcd18880e28c29e5728cd4d0efeb5366 (diff) |
cfg80211: add debugfs HT40 allow map
Here's a screenshot of what this looks like with ath9k:
mcgrof@pogo /debug/ieee80211/phy0 $ cat ht40allow_map
2412 HT40 +
2417 HT40 +
2422 HT40 +
2427 HT40 +
2432 HT40 -+
2437 HT40 -+
2442 HT40 -+
2447 HT40 -
2452 HT40 -
2457 HT40 -
2462 HT40 -
2467 Disabled
2472 Disabled
2484 Disabled
5180 HT40 +
5200 HT40 -+
5220 HT40 -+
5240 HT40 -+
5260 HT40 -+
5280 HT40 -+
5300 HT40 -+
5320 HT40 -
5500 HT40 +
5520 HT40 -+
5540 HT40 -+
5560 HT40 -+
5580 HT40 -+
5600 HT40 -+
5620 HT40 -+
5640 HT40 -+
5660 HT40 -+
5680 HT40 -+
5700 HT40 -
5745 HT40 +
5765 HT40 -+
5785 HT40 -+
5805 HT40 -+
5825 HT40 -
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/core.h | 1 | ||||
-rw-r--r-- | net/wireless/debugfs.c | 61 |
2 files changed, 62 insertions, 0 deletions
diff --git a/net/wireless/core.h b/net/wireless/core.h index 930a80124dbf..88f234c8f6b3 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h | |||
@@ -58,6 +58,7 @@ struct cfg80211_registered_device { | |||
58 | struct dentry *fragmentation_threshold; | 58 | struct dentry *fragmentation_threshold; |
59 | struct dentry *short_retry_limit; | 59 | struct dentry *short_retry_limit; |
60 | struct dentry *long_retry_limit; | 60 | struct dentry *long_retry_limit; |
61 | struct dentry *ht40allow_map; | ||
61 | } debugfs; | 62 | } debugfs; |
62 | #endif | 63 | #endif |
63 | 64 | ||
diff --git a/net/wireless/debugfs.c b/net/wireless/debugfs.c index 3211e0e9fe4c..679ddfcec1ee 100644 --- a/net/wireless/debugfs.c +++ b/net/wireless/debugfs.c | |||
@@ -44,6 +44,65 @@ DEBUGFS_READONLY_FILE(short_retry_limit, 20, "%d", | |||
44 | DEBUGFS_READONLY_FILE(long_retry_limit, 20, "%d", | 44 | DEBUGFS_READONLY_FILE(long_retry_limit, 20, "%d", |
45 | wiphy->retry_long); | 45 | wiphy->retry_long); |
46 | 46 | ||
47 | static int ht_print_chan(struct ieee80211_channel *chan, | ||
48 | char *buf, int buf_size, int offset) | ||
49 | { | ||
50 | if (WARN_ON(offset > buf_size)) | ||
51 | return 0; | ||
52 | |||
53 | if (chan->flags & IEEE80211_CHAN_DISABLED) | ||
54 | return snprintf(buf + offset, | ||
55 | buf_size - offset, | ||
56 | "%d Disabled\n", | ||
57 | chan->center_freq); | ||
58 | |||
59 | return snprintf(buf + offset, | ||
60 | buf_size - offset, | ||
61 | "%d HT40 %c%c\n", | ||
62 | chan->center_freq, | ||
63 | (chan->flags & IEEE80211_CHAN_NO_HT40MINUS) ? ' ' : '-', | ||
64 | (chan->flags & IEEE80211_CHAN_NO_HT40PLUS) ? ' ' : '+'); | ||
65 | } | ||
66 | |||
67 | static ssize_t ht40allow_map_read(struct file *file, | ||
68 | char __user *user_buf, | ||
69 | size_t count, loff_t *ppos) | ||
70 | { | ||
71 | struct wiphy *wiphy = file->private_data; | ||
72 | char *buf; | ||
73 | unsigned int offset = 0, buf_size = PAGE_SIZE, i, r; | ||
74 | enum ieee80211_band band; | ||
75 | struct ieee80211_supported_band *sband; | ||
76 | |||
77 | buf = kzalloc(buf_size, GFP_KERNEL); | ||
78 | if (!buf) | ||
79 | return -ENOMEM; | ||
80 | |||
81 | mutex_lock(&cfg80211_mutex); | ||
82 | |||
83 | for (band = 0; band < IEEE80211_NUM_BANDS; band++) { | ||
84 | sband = wiphy->bands[band]; | ||
85 | if (!sband) | ||
86 | continue; | ||
87 | for (i = 0; i < sband->n_channels; i++) | ||
88 | offset += ht_print_chan(&sband->channels[i], | ||
89 | buf, buf_size, offset); | ||
90 | } | ||
91 | |||
92 | mutex_unlock(&cfg80211_mutex); | ||
93 | |||
94 | r = simple_read_from_buffer(user_buf, count, ppos, buf, offset); | ||
95 | |||
96 | kfree(buf); | ||
97 | |||
98 | return r; | ||
99 | } | ||
100 | |||
101 | static const struct file_operations ht40allow_map_ops = { | ||
102 | .read = ht40allow_map_read, | ||
103 | .open = cfg80211_open_file_generic, | ||
104 | }; | ||
105 | |||
47 | #define DEBUGFS_ADD(name) \ | 106 | #define DEBUGFS_ADD(name) \ |
48 | drv->debugfs.name = debugfs_create_file(#name, S_IRUGO, phyd, \ | 107 | drv->debugfs.name = debugfs_create_file(#name, S_IRUGO, phyd, \ |
49 | &drv->wiphy, &name## _ops); | 108 | &drv->wiphy, &name## _ops); |
@@ -59,6 +118,7 @@ void cfg80211_debugfs_drv_add(struct cfg80211_registered_device *drv) | |||
59 | DEBUGFS_ADD(fragmentation_threshold); | 118 | DEBUGFS_ADD(fragmentation_threshold); |
60 | DEBUGFS_ADD(short_retry_limit); | 119 | DEBUGFS_ADD(short_retry_limit); |
61 | DEBUGFS_ADD(long_retry_limit); | 120 | DEBUGFS_ADD(long_retry_limit); |
121 | DEBUGFS_ADD(ht40allow_map); | ||
62 | } | 122 | } |
63 | 123 | ||
64 | void cfg80211_debugfs_drv_del(struct cfg80211_registered_device *drv) | 124 | void cfg80211_debugfs_drv_del(struct cfg80211_registered_device *drv) |
@@ -67,4 +127,5 @@ void cfg80211_debugfs_drv_del(struct cfg80211_registered_device *drv) | |||
67 | DEBUGFS_DEL(fragmentation_threshold); | 127 | DEBUGFS_DEL(fragmentation_threshold); |
68 | DEBUGFS_DEL(short_retry_limit); | 128 | DEBUGFS_DEL(short_retry_limit); |
69 | DEBUGFS_DEL(long_retry_limit); | 129 | DEBUGFS_DEL(long_retry_limit); |
130 | DEBUGFS_DEL(ht40allow_map); | ||
70 | } | 131 | } |