This adds a bwmode node to the ath5k debugfs directory, adds the read and write ops, and implements the read op.
Tested on AR5414 Signed-off-by: Pat Erley <pat-l...@erley.org> --- drivers/net/wireless/ath/ath5k/debug.c | 55 ++++++++++++++++++++++++++++++++ drivers/net/wireless/ath/ath5k/debug.h | 1 + 2 files changed, 56 insertions(+), 0 deletions(-) diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c index 0230f30..335eebb 100644 --- a/drivers/net/wireless/ath/ath5k/debug.c +++ b/drivers/net/wireless/ath/ath5k/debug.c @@ -813,6 +813,55 @@ static const struct file_operations fops_ani = { .llseek = default_llseek, }; +/* debugfs: bwmode */ + +static ssize_t read_file_bwmode(struct file *file, char __user *user_buf, + size_t count, loff_t *ppos) +{ + struct ath5k_softc *sc = file->private_data; + char buf[15]; + unsigned int len = 0; + + int cur_ah_bwmode = sc->ah->ah_bwmode; + +#define print_selected(MODE, LABEL) \ + if (cur_ah_bwmode == MODE) \ + len += snprintf(buf+len, sizeof(buf)-len, "[%s]", LABEL); \ + else \ + len += snprintf(buf+len, sizeof(buf)-len, "%s", LABEL); \ + len += snprintf(buf+len, sizeof(buf)-len, " "); + + print_selected(AR5K_BWMODE_5MHZ, "5"); + print_selected(AR5K_BWMODE_10MHZ, "10"); + print_selected(AR5K_BWMODE_DEFAULT, "20"); + print_selected(AR5K_BWMODE_40MHZ, "40"); +#undef print_selected + + len += snprintf(buf+len, sizeof(buf)-len, "\n"); + + return simple_read_from_buffer(user_buf, count, ppos, buf, len); +} + +static ssize_t write_file_bwmode(struct file *file, + const char __user *userbuf, + size_t count, loff_t *ppos) +{ + struct ath5k_softc *sc = file->private_data; + char buf[20]; + + if (copy_from_user(buf, userbuf, min(count, sizeof(buf)))) + return -EFAULT; + + return -EOPNOTSUPP; +} + +static const struct file_operations fops_bwmode = { + .read = read_file_bwmode, + .write = write_file_bwmode, + .open = ath5k_debugfs_open, + .owner = THIS_MODULE, + .llseek = default_llseek, +}; /* debugfs: queues etc */ @@ -929,6 +978,11 @@ ath5k_debug_init_device(struct ath5k_softc *sc) S_IWUSR | S_IRUSR, sc->debug.debugfs_phydir, sc, &fops_queue); + + sc->debug.debugfs_bwmode = debugfs_create_file("bwmode", + S_IWUSR | S_IRUSR, + sc->debug.debugfs_phydir, sc, + &fops_bwmode); } void @@ -943,6 +997,7 @@ ath5k_debug_finish_device(struct ath5k_softc *sc) debugfs_remove(sc->debug.debugfs_frameerrors); debugfs_remove(sc->debug.debugfs_ani); debugfs_remove(sc->debug.debugfs_queue); + debugfs_remove(sc->debug.debugfs_bwmode); debugfs_remove(sc->debug.debugfs_phydir); } diff --git a/drivers/net/wireless/ath/ath5k/debug.h b/drivers/net/wireless/ath/ath5k/debug.h index b0355ae..bbd04d3 100644 --- a/drivers/net/wireless/ath/ath5k/debug.h +++ b/drivers/net/wireless/ath/ath5k/debug.h @@ -79,6 +79,7 @@ struct ath5k_dbg_info { struct dentry *debugfs_frameerrors; struct dentry *debugfs_ani; struct dentry *debugfs_queue; + struct dentry *debugfs_bwmode; }; /** -- 1.7.4.1 _______________________________________________ ath5k-devel mailing list ath5k-devel@lists.ath5k.org https://lists.ath5k.org/mailman/listinfo/ath5k-devel