]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/wireless/hostap/hostap_info.c
Add another Prism2 card to hostap
[linux-2.6-omap-h63xx.git] / drivers / net / wireless / hostap / hostap_info.c
index 5aa998fdf1c48d276a72cd2b8ea2fc3297218b28..7cd3fb79230e51d12f5b226049e64a474d562eb3 100644 (file)
@@ -1,5 +1,8 @@
 /* Host AP driver Info Frame processing (part of hostap.o module) */
 
+#include "hostap_wlan.h"
+#include "hostap.h"
+#include "hostap_ap.h"
 
 /* Called only as a tasklet (software IRQ) */
 static void prism2_info_commtallies16(local_info_t *local, unsigned char *buf,
@@ -163,6 +166,7 @@ static void prism2_host_roaming(local_info_t *local)
        struct hfa384x_hostscan_result *selected, *entry;
        int i;
        unsigned long flags;
+       DECLARE_MAC_BUF(mac);
 
        if (local->last_join_time &&
            time_before(jiffies, local->last_join_time + 10 * HZ)) {
@@ -195,8 +199,9 @@ static void prism2_host_roaming(local_info_t *local)
            local->preferred_ap[2] || local->preferred_ap[3] ||
            local->preferred_ap[4] || local->preferred_ap[5]) {
                /* Try to find preferred AP */
-               PDEBUG(DEBUG_EXTRA, "%s: Preferred AP BSSID " MACSTR "\n",
-                      dev->name, MAC2STR(local->preferred_ap));
+               PDEBUG(DEBUG_EXTRA, "%s: Preferred AP BSSID "
+                      "%s\n",
+                      dev->name, print_mac(mac, local->preferred_ap));
                for (i = 0; i < local->last_scan_results_count; i++) {
                        entry = &local->last_scan_results[i];
                        if (memcmp(local->preferred_ap, entry->bssid, 6) == 0)
@@ -213,8 +218,9 @@ static void prism2_host_roaming(local_info_t *local)
        req.channel = selected->chid;
        spin_unlock_irqrestore(&local->lock, flags);
 
-       PDEBUG(DEBUG_EXTRA, "%s: JoinRequest: BSSID=" MACSTR " channel=%d\n",
-              dev->name, MAC2STR(req.bssid), le16_to_cpu(req.channel));
+       PDEBUG(DEBUG_EXTRA, "%s: JoinRequest: BSSID=%s"
+              " channel=%d\n",
+              dev->name, print_mac(mac, req.bssid), le16_to_cpu(req.channel));
        if (local->func->set_rid(dev, HFA384X_RID_JOINREQUEST, &req,
                                 sizeof(req))) {
                printk(KERN_DEBUG "%s: JoinRequest failed\n", dev->name);
@@ -297,7 +303,7 @@ static void prism2_info_hostscanresults(local_info_t *local,
        int i, result_size, copy_len, new_count;
        struct hfa384x_hostscan_result *results, *prev;
        unsigned long flags;
-       u16 *pos;
+       __le16 *pos;
        u8 *ptr;
 
        wake_up_interruptible(&local->hostscan_wq);
@@ -308,7 +314,7 @@ static void prism2_info_hostscanresults(local_info_t *local,
                return;
        }
 
-       pos = (u16 *) buf;
+       pos = (__le16 *) buf;
        copy_len = result_size = le16_to_cpu(*pos);
        if (result_size == 0) {
                printk(KERN_DEBUG "%s: invalid result_size (0) in "
@@ -324,11 +330,10 @@ static void prism2_info_hostscanresults(local_info_t *local,
        ptr = (u8 *) pos;
 
        new_count = left / result_size;
-       results = kmalloc(new_count * sizeof(struct hfa384x_hostscan_result),
+       results = kcalloc(new_count, sizeof(struct hfa384x_hostscan_result),
                          GFP_ATOMIC);
        if (results == NULL)
                return;
-       memset(results, 0, new_count * sizeof(struct hfa384x_hostscan_result));
 
        for (i = 0; i < new_count; i++) {
                memcpy(&results[i], ptr, copy_len);
@@ -368,7 +373,7 @@ void hostap_info_process(local_info_t *local, struct sk_buff *skb)
        buf = skb->data + sizeof(*info);
        left = skb->len - sizeof(*info);
 
-       switch (info->type) {
+       switch (le16_to_cpu(info->type)) {
        case HFA384X_INFO_COMMTALLIES:
                prism2_info_commtallies(local, buf, left);
                break;
@@ -390,7 +395,8 @@ void hostap_info_process(local_info_t *local, struct sk_buff *skb)
 #ifndef PRISM2_NO_DEBUG
        default:
                PDEBUG(DEBUG_EXTRA, "%s: INFO - len=%d type=0x%04x\n",
-                      local->dev->name, info->len, info->type);
+                      local->dev->name, le16_to_cpu(info->len),
+                      le16_to_cpu(info->type));
                PDEBUG(DEBUG_EXTRA, "Unknown info frame:");
                for (i = 0; i < (left < 100 ? left : 100); i++)
                        PDEBUG2(DEBUG_EXTRA, " %02x", buf[i]);
@@ -407,6 +413,7 @@ static void handle_info_queue_linkstatus(local_info_t *local)
        int val = local->prev_link_status;
        int connected;
        union iwreq_data wrqu;
+       DECLARE_MAC_BUF(mac);
 
        connected =
                val == HFA384X_LINKSTATUS_CONNECTED ||
@@ -418,9 +425,10 @@ static void handle_info_queue_linkstatus(local_info_t *local)
                printk(KERN_DEBUG "%s: could not read CURRENTBSSID after "
                       "LinkStatus event\n", local->dev->name);
        } else {
-               PDEBUG(DEBUG_EXTRA, "%s: LinkStatus: BSSID=" MACSTR "\n",
+               PDEBUG(DEBUG_EXTRA, "%s: LinkStatus: BSSID="
+                      "%s\n",
                       local->dev->name,
-                      MAC2STR((unsigned char *) local->bssid));
+                      print_mac(mac, (unsigned char *) local->bssid));
                if (local->wds_type & HOSTAP_WDS_AP_CLIENT)
                        hostap_add_sta(local->ap, local->bssid);
        }
@@ -471,9 +479,9 @@ static void handle_info_queue_scanresults(local_info_t *local)
 
 /* Called only as scheduled task after receiving info frames (used to avoid
  * pending too much time in HW IRQ handler). */
-static void handle_info_queue(void *data)
+static void handle_info_queue(struct work_struct *work)
 {
-       local_info_t *local = (local_info_t *) data;
+       local_info_t *local = container_of(work, local_info_t, info_queue);
 
        if (test_and_clear_bit(PRISM2_INFO_PENDING_LINKSTATUS,
                               &local->pending_info))
@@ -490,7 +498,7 @@ void hostap_info_init(local_info_t *local)
 {
        skb_queue_head_init(&local->info_list);
 #ifndef PRISM2_NO_STATION_MODES
-       INIT_WORK(&local->info_queue, handle_info_queue, local);
+       INIT_WORK(&local->info_queue, handle_info_queue);
 #endif /* PRISM2_NO_STATION_MODES */
 }