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

Reply via email to