Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[safe/jmp/linux-2.6] / drivers / net / wireless / libertas / debugfs.c
index 8f88786..587b0cb 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/mm.h>
 #include <linux/string.h>
 #include <net/iw_handler.h>
+#include <net/lib80211.h>
 
 #include "dev.h"
 #include "decl.h"
@@ -19,7 +20,7 @@ static char *szStates[] = {
 };
 
 #ifdef PROC_DEBUG
-static void lbs_debug_init(struct lbs_private *priv, struct net_device *dev);
+static void lbs_debug_init(struct lbs_private *priv);
 #endif
 
 static int open_file_generic(struct inode *inode, struct file *file)
@@ -44,6 +45,8 @@ static ssize_t lbs_dev_info(struct file *file, char __user *userbuf,
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
        ssize_t res;
+       if (!buf)
+               return -ENOMEM;
 
        pos += snprintf(buf+pos, len-pos, "state = %s\n",
                                szStates[priv->connect_status]);
@@ -65,8 +68,10 @@ static ssize_t lbs_getscantable(struct file *file, char __user *userbuf,
        int numscansdone = 0, res;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
-       DECLARE_MAC_BUF(mac);
+       DECLARE_SSID_BUF(ssid);
        struct bss_descriptor * iter_bss;
+       if (!buf)
+               return -ENOMEM;
 
        pos += snprintf(buf+pos, len-pos,
                "# | ch  | rssi |       bssid       |   cap    | Qual | SSID \n");
@@ -77,17 +82,17 @@ static ssize_t lbs_getscantable(struct file *file, char __user *userbuf,
                u16 privacy = (iter_bss->capability & WLAN_CAPABILITY_PRIVACY);
                u16 spectrum_mgmt = (iter_bss->capability & WLAN_CAPABILITY_SPECTRUM_MGMT);
 
-               pos += snprintf(buf+pos, len-pos,
-                       "%02u| %03d | %04ld | %s |",
+               pos += snprintf(buf+pos, len-pos, "%02u| %03d | %04d | %pM |",
                        numscansdone, iter_bss->channel, iter_bss->rssi,
-                       print_mac(mac, iter_bss->bssid));
+                       iter_bss->bssid);
                pos += snprintf(buf+pos, len-pos, " %04x-", iter_bss->capability);
                pos += snprintf(buf+pos, len-pos, "%c%c%c |",
                                ibss ? 'A' : 'I', privacy ? 'P' : ' ',
                                spectrum_mgmt ? 'S' : ' ');
                pos += snprintf(buf+pos, len-pos, " %04d |", SCAN_RSSI(iter_bss->rssi));
                pos += snprintf(buf+pos, len-pos, " %s\n",
-                               escape_essid(iter_bss->ssid, iter_bss->ssid_len));
+                               print_ssid(ssid, iter_bss->ssid,
+                                          iter_bss->ssid_len));
 
                numscansdone++;
        }
@@ -109,6 +114,8 @@ static ssize_t lbs_sleepparams_write(struct file *file,
        int p1, p2, p3, p4, p5, p6;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        buf_size = min(count, len - 1);
        if (copy_from_user(buf, user_buf, buf_size)) {
@@ -147,6 +154,8 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf,
        struct sleep_params sp;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        ret = lbs_cmd_802_11_sleep_params(priv, CMD_ACT_GET, &sp);
        if (ret)
@@ -182,12 +191,12 @@ out_unlock:
  */
 static void *lbs_tlv_find(uint16_t tlv_type, const uint8_t *tlv, uint16_t size)
 {
-       struct mrvlietypesheader *tlv_h;
+       struct mrvl_ie_header *tlv_h;
        uint16_t length;
        ssize_t pos = 0;
 
        while (pos < size) {
-               tlv_h = (struct mrvlietypesheader *) tlv;
+               tlv_h = (struct mrvl_ie_header *) tlv;
                if (!tlv_h->len)
                        return NULL;
                if (tlv_h->type == cpu_to_le16(tlv_type))
@@ -205,7 +214,7 @@ static ssize_t lbs_threshold_read(uint16_t tlv_type, uint16_t event_mask,
                                  size_t count, loff_t *ppos)
 {
        struct cmd_ds_802_11_subscribe_event *subscribed;
-       struct mrvlietypes_thresholds *got;
+       struct mrvl_ie_thresholds *got;
        struct lbs_private *priv = file->private_data;
        ssize_t ret = 0;
        size_t pos = 0;
@@ -258,7 +267,7 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask,
                                   loff_t *ppos)
 {
        struct cmd_ds_802_11_subscribe_event *events;
-       struct mrvlietypes_thresholds *tlv;
+       struct mrvl_ie_thresholds *tlv;
        struct lbs_private *priv = file->private_data;
        ssize_t buf_size;
        int value, freq, new_mask;
@@ -312,8 +321,8 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask,
        if (tlv_type != TLV_TYPE_BCNMISS)
                tlv->freq = freq;
 
-       /* The command header, the event mask, and the one TLV */
-       events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 2 + sizeof(*tlv));
+       /* The command header, the action, the event mask, and one TLV */
+       events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 4 + sizeof(*tlv));
 
        ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events);
 
@@ -432,6 +441,8 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf,
        int ret;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        offval.offset = priv->mac_offset;
        offval.value = 0;
@@ -440,10 +451,12 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf,
                                CMD_MAC_REG_ACCESS, 0,
                                CMD_OPTION_WAITFORRSP, 0, &offval);
        mdelay(10);
-       pos += snprintf(buf+pos, len-pos, "MAC[0x%x] = 0x%08x\n",
+       if (!ret) {
+               pos += snprintf(buf+pos, len-pos, "MAC[0x%x] = 0x%08x\n",
                                priv->mac_offset, priv->offsetvalue.value);
 
-       ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
+               ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
+       }
        free_page(addr);
        return ret;
 }
@@ -456,6 +469,8 @@ static ssize_t lbs_rdmac_write(struct file *file,
        ssize_t res, buf_size;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        buf_size = min(count, len - 1);
        if (copy_from_user(buf, userbuf, buf_size)) {
@@ -480,6 +495,8 @@ static ssize_t lbs_wrmac_write(struct file *file,
        struct lbs_offset_value offval;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        buf_size = min(count, len - 1);
        if (copy_from_user(buf, userbuf, buf_size)) {
@@ -499,7 +516,8 @@ static ssize_t lbs_wrmac_write(struct file *file,
                                CMD_OPTION_WAITFORRSP, 0, &offval);
        mdelay(10);
 
-       res = count;
+       if (!res)
+               res = count;
 out_unlock:
        free_page(addr);
        return res;
@@ -514,6 +532,8 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf,
        int ret;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        offval.offset = priv->bbp_offset;
        offval.value = 0;
@@ -522,10 +542,12 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf,
                                CMD_BBP_REG_ACCESS, 0,
                                CMD_OPTION_WAITFORRSP, 0, &offval);
        mdelay(10);
-       pos += snprintf(buf+pos, len-pos, "BBP[0x%x] = 0x%08x\n",
+       if (!ret) {
+               pos += snprintf(buf+pos, len-pos, "BBP[0x%x] = 0x%08x\n",
                                priv->bbp_offset, priv->offsetvalue.value);
 
-       ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
+               ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
+       }
        free_page(addr);
 
        return ret;
@@ -539,6 +561,8 @@ static ssize_t lbs_rdbbp_write(struct file *file,
        ssize_t res, buf_size;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        buf_size = min(count, len - 1);
        if (copy_from_user(buf, userbuf, buf_size)) {
@@ -563,6 +587,8 @@ static ssize_t lbs_wrbbp_write(struct file *file,
        struct lbs_offset_value offval;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        buf_size = min(count, len - 1);
        if (copy_from_user(buf, userbuf, buf_size)) {
@@ -582,7 +608,8 @@ static ssize_t lbs_wrbbp_write(struct file *file,
                                CMD_OPTION_WAITFORRSP, 0, &offval);
        mdelay(10);
 
-       res = count;
+       if (!res)
+               res = count;
 out_unlock:
        free_page(addr);
        return res;
@@ -597,6 +624,8 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf,
        int ret;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        offval.offset = priv->rf_offset;
        offval.value = 0;
@@ -605,10 +634,12 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf,
                                CMD_RF_REG_ACCESS, 0,
                                CMD_OPTION_WAITFORRSP, 0, &offval);
        mdelay(10);
-       pos += snprintf(buf+pos, len-pos, "RF[0x%x] = 0x%08x\n",
+       if (!ret) {
+               pos += snprintf(buf+pos, len-pos, "RF[0x%x] = 0x%08x\n",
                                priv->rf_offset, priv->offsetvalue.value);
 
-       ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
+               ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
+       }
        free_page(addr);
 
        return ret;
@@ -622,13 +653,15 @@ static ssize_t lbs_rdrf_write(struct file *file,
        ssize_t res, buf_size;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        buf_size = min(count, len - 1);
        if (copy_from_user(buf, userbuf, buf_size)) {
                res = -EFAULT;
                goto out_unlock;
        }
-       priv->rf_offset = simple_strtoul((char *)buf, NULL, 16);
+       priv->rf_offset = simple_strtoul(buf, NULL, 16);
        res = count;
 out_unlock:
        free_page(addr);
@@ -646,6 +679,8 @@ static ssize_t lbs_wrrf_write(struct file *file,
        struct lbs_offset_value offval;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        buf_size = min(count, len - 1);
        if (copy_from_user(buf, userbuf, buf_size)) {
@@ -665,7 +700,8 @@ static ssize_t lbs_wrrf_write(struct file *file,
                                CMD_OPTION_WAITFORRSP, 0, &offval);
        mdelay(10);
 
-       res = count;
+       if (!res)
+               res = count;
 out_unlock:
        free_page(addr);
        return res;
@@ -679,12 +715,12 @@ out_unlock:
 }
 
 struct lbs_debugfs_files {
-       char *name;
+       const char *name;
        int perm;
        struct file_operations fops;
 };
 
-static struct lbs_debugfs_files debugfs_files[] = {
+static const struct lbs_debugfs_files debugfs_files[] = {
        { "info", 0444, FOPS(lbs_dev_info, write_file_dummy), },
        { "getscantable", 0444, FOPS(lbs_getscantable,
                                        write_file_dummy), },
@@ -692,7 +728,7 @@ static struct lbs_debugfs_files debugfs_files[] = {
                                lbs_sleepparams_write), },
 };
 
-static struct lbs_debugfs_files debugfs_events_files[] = {
+static const struct lbs_debugfs_files debugfs_events_files[] = {
        {"low_rssi", 0644, FOPS(lbs_lowrssi_read,
                                lbs_lowrssi_write), },
        {"low_snr", 0644, FOPS(lbs_lowsnr_read,
@@ -707,7 +743,7 @@ static struct lbs_debugfs_files debugfs_events_files[] = {
                                lbs_highsnr_write), },
 };
 
-static struct lbs_debugfs_files debugfs_regs_files[] = {
+static const struct lbs_debugfs_files debugfs_regs_files[] = {
        {"rdmac", 0644, FOPS(lbs_rdmac_read, lbs_rdmac_write), },
        {"wrmac", 0600, FOPS(NULL, lbs_wrmac_write), },
        {"rdbbp", 0644, FOPS(lbs_rdbbp_read, lbs_rdbbp_write), },
@@ -734,7 +770,7 @@ void lbs_debugfs_remove(void)
 void lbs_debugfs_init_one(struct lbs_private *priv, struct net_device *dev)
 {
        int i;
-       struct lbs_debugfs_files *files;
+       const struct lbs_debugfs_files *files;
        if (!lbs_dir)
                goto exit;
 
@@ -778,7 +814,7 @@ void lbs_debugfs_init_one(struct lbs_private *priv, struct net_device *dev)
        }
 
 #ifdef PROC_DEBUG
-       lbs_debug_init(priv, dev);
+       lbs_debug_init(priv);
 #endif
 exit:
        return;
@@ -824,7 +860,6 @@ struct debug_data {
 /* To debug any member of struct lbs_private, simply add one line here.
  */
 static struct debug_data items[] = {
-       {"intcounter", item_size(intcounter), item_addr(intcounter)},
        {"psmode", item_size(psmode), item_addr(psmode)},
        {"psstate", item_size(psstate), item_addr(psstate)},
 };
@@ -853,6 +888,8 @@ static ssize_t lbs_debugfs_read(struct file *file, char __user *userbuf,
        struct debug_data *d;
        unsigned long addr = get_zeroed_page(GFP_KERNEL);
        char *buf = (char *)addr;
+       if (!buf)
+               return -ENOMEM;
 
        p = buf;
 
@@ -938,7 +975,7 @@ static ssize_t lbs_debugfs_write(struct file *f, const char __user *buf,
        return (ssize_t)cnt;
 }
 
-static struct file_operations lbs_debug_fops = {
+static const struct file_operations lbs_debug_fops = {
        .owner = THIS_MODULE,
        .open = open_file_generic,
        .write = lbs_debugfs_write,
@@ -952,7 +989,7 @@ static struct file_operations lbs_debug_fops = {
  *  @param dev     pointer net_device
  *  @return       N/A
  */
-static void lbs_debug_init(struct lbs_private *priv, struct net_device *dev)
+static void lbs_debug_init(struct lbs_private *priv)
 {
        int i;