]> err.no Git - linux-2.6/commitdiff
[PATCH] libertas: clean up scan debug messages
authorHolger Schurig <hs4233@mail.mn-solutions.de>
Tue, 9 Oct 2007 12:15:19 +0000 (14:15 +0200)
committerDavid S. Miller <davem@sunset.davemloft.net>
Wed, 10 Oct 2007 23:55:21 +0000 (16:55 -0700)
* make scan debug output cleaner
* change some LBS_DEB_ASSOC messages to LBS_DEB_SCAN, which is more correct
* move helper functions together
* print function return value in the tracing code at one central location

Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Acked-By: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas/join.c
drivers/net/wireless/libertas/scan.c

index 8dcff00574f30a44dea32e5eb1a99127e0c021b2..dc24a05c9447557d72f3443020e8e00ef0cbc701 100644 (file)
@@ -800,8 +800,6 @@ int libertas_ret_80211_associate(wlan_private * priv,
                netif_wake_queue(priv->mesh_dev);
        }
 
-       lbs_deb_join("ASSOC_RESP: Associated \n");
-
        memcpy(wrqu.ap_addr.sa_data, adapter->curbssparams.bssid, ETH_ALEN);
        wrqu.ap_addr.sa_family = ARPHRD_ETHER;
        wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL);
index dcce354e904c68848b9db78bc9b341bc22315639..ad1e67d984ce70e9b2a59b4a97cfbe61f71c13c4 100644 (file)
 static const u8 zeromac[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 static const u8 bcastmac[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
 
+
+
+
+/*********************************************************************/
+/*                                                                   */
+/*  Misc helper functions                                            */
+/*                                                                   */
+/*********************************************************************/
+
 static inline void clear_bss_descriptor (struct bss_descriptor * bss)
 {
        /* Don't blow away ->list, just BSS data */
@@ -165,7 +174,7 @@ static int is_network_compatible(wlan_adapter * adapter,
 {
        int matched = 0;
 
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       lbs_deb_enter(LBS_DEB_SCAN);
 
        if (bss->mode != mode)
                goto done;
@@ -214,13 +223,41 @@ static int is_network_compatible(wlan_adapter * adapter,
               (bss->capability & WLAN_CAPABILITY_PRIVACY));
 
 done:
-       lbs_deb_leave(LBS_DEB_SCAN);
+       lbs_deb_leave_args(LBS_DEB_SCAN, "matched: %d", matched);
        return matched;
 }
 
+/**
+ *  @brief Compare two SSIDs
+ *
+ *  @param ssid1    A pointer to ssid to compare
+ *  @param ssid2    A pointer to ssid to compare
+ *
+ *  @return         0--ssid is same, otherwise is different
+ */
+int libertas_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len)
+{
+       if (ssid1_len != ssid2_len)
+               return -1;
+
+       return memcmp(ssid1, ssid2, ssid1_len);
+}
+
+
+
+
+/*********************************************************************/
+/*                                                                   */
+/*  Main scanning support                                            */
+/*                                                                   */
+/*********************************************************************/
+
+
 /**
  *  @brief Create a channel list for the driver to scan based on region info
  *
+ *  Only used from wlan_scan_setup_scan_config()
+ *
  *  Use the driver region/band information to construct a comprehensive list
  *    of channels to scan.  This routine is used for any scan that is not
  *    provided a specific channel list to scan.
@@ -248,6 +285,8 @@ static void wlan_scan_create_channel_list(wlan_private * priv,
        int nextchan;
        u8 scantype;
 
+       lbs_deb_enter_args(LBS_DEB_SCAN, "filteredscan %d", filteredscan);
+
        chanidx = 0;
 
        /* Set the default scan type to the user specified type, will later
@@ -384,6 +423,8 @@ wlan_scan_setup_scan_config(wlan_private * priv,
        int channel;
        int radiotype;
 
+       lbs_deb_enter(LBS_DEB_SCAN);
+
        pscancfgout = kzalloc(MAX_SCAN_CFG_ALLOC, GFP_KERNEL);
        if (pscancfgout == NULL)
                goto out;
@@ -481,13 +522,12 @@ wlan_scan_setup_scan_config(wlan_private * priv,
 
        if (!puserscanin || !puserscanin->chanlist[0].channumber) {
                /* Create a default channel scan list */
-               lbs_deb_scan("Scan: Creating full region channel list\n");
+               lbs_deb_scan("creating full region channel list\n");
                wlan_scan_create_channel_list(priv, pscanchanlist,
                                              *pfilteredscan);
                goto out;
        }
 
-       lbs_deb_scan("Scan: Using supplied channel list\n");
        for (chanidx = 0;
             chanidx < WLAN_IOCTL_USER_SCAN_CHAN_MAX
             && puserscanin->chanlist[chanidx].channumber; chanidx++) {
@@ -529,7 +569,7 @@ wlan_scan_setup_scan_config(wlan_private * priv,
            (puserscanin->chanlist[0].channumber ==
                               priv->adapter->curbssparams.channel)) {
                *pscancurrentonly = 1;
-               lbs_deb_scan("Scan: Scanning current channel only");
+               lbs_deb_scan("scanning current channel only");
        }
 
 out:
@@ -539,6 +579,8 @@ out:
 /**
  *  @brief Construct and send multiple scan config commands to the firmware
  *
+ *  Only used from wlan_scan_networks()
+ *
  *  Previous routines have created a wlan_scan_cmd_config with any requested
  *   TLVs.  This function splits the channel TLV into maxchanperscan lists
  *   and sends the portion of the channel TLV along with the other TLVs
@@ -576,12 +618,14 @@ static int wlan_scan_channel_list(wlan_private * priv,
        int scanned = 0;
        union iwreq_data wrqu;
 
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       lbs_deb_enter_args(LBS_DEB_SCAN, "maxchanperscan %d, filteredscan %d, "
+               "full_scan %d", maxchanperscan, filteredscan, full_scan);
 
        if (!pscancfgout || !pchantlvout || !pscanchanlist) {
-               lbs_deb_scan("Scan: Null detect: %p, %p, %p\n",
-                      pscancfgout, pchantlvout, pscanchanlist);
-               return -1;
+               lbs_deb_scan("pscancfgout, pchantlvout or "
+                       "pscanchanlist is NULL\n");
+               ret = -1;
+               goto out;
        }
 
        pchantlvout->header.type = cpu_to_le16(TLV_TYPE_CHANLIST);
@@ -613,9 +657,10 @@ static int wlan_scan_channel_list(wlan_private * priv,
                while (tlvidx < maxchanperscan && ptmpchan->channumber
                       && !doneearly && scanned < 2) {
 
-                       lbs_deb_scan("Scan: Chan(%3d), Radio(%d), mode(%d,%d), "
-                                    "Dur(%d)\n",
-                                    ptmpchan->channumber, ptmpchan->radiotype,
+                       lbs_deb_scan("channel %d, radio %d, passive %d, "
+                               "dischanflt %d, maxscantime %d\n",
+                               ptmpchan->channumber,
+                               ptmpchan->radiotype,
                                     ptmpchan->chanscanmode.passivescan,
                                     ptmpchan->chanscanmode.disablechanfilt,
                                     ptmpchan->maxscantime);
@@ -700,20 +745,25 @@ done:
                wireless_send_event(priv->dev, SIOCGIWSCAN, &wrqu, NULL);
        }
 
+out:
        lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", ret);
        return ret;
 }
 
-static void
-clear_selected_scan_list_entries(wlan_adapter * adapter,
-                                 const struct wlan_ioctl_user_scan_cfg * scan_cfg)
+/*
+ * Only used from wlan_scan_networks()
+*/
+static void clear_selected_scan_list_entries(wlan_adapter *adapter,
+       const struct wlan_ioctl_user_scan_cfg *scan_cfg)
 {
-       struct bss_descriptor * bss;
-       struct bss_descriptor * safe;
+       struct bss_descriptor *bss;
+       struct bss_descriptor *safe;
        u32 clear_ssid_flag = 0, clear_bssid_flag = 0;
 
+       lbs_deb_enter(LBS_DEB_SCAN);
+
        if (!scan_cfg)
-               return;
+               goto out;
 
        if (scan_cfg->clear_ssid && scan_cfg->ssid_len)
                clear_ssid_flag = 1;
@@ -725,7 +775,7 @@ clear_selected_scan_list_entries(wlan_adapter * adapter,
        }
 
        if (!clear_ssid_flag && !clear_bssid_flag)
-               return;
+               goto out;
 
        mutex_lock(&adapter->lock);
        list_for_each_entry_safe (bss, safe, &adapter->network_list, list) {
@@ -748,12 +798,16 @@ clear_selected_scan_list_entries(wlan_adapter * adapter,
                }
        }
        mutex_unlock(&adapter->lock);
+out:
+       lbs_deb_leave(LBS_DEB_SCAN);
 }
 
 
 /**
  *  @brief Internal function used to start a scan based on an input config
  *
+ *  Also used from debugfs
+ *
  *  Use the input user scan configuration information when provided in
  *    order to send the appropriate scan commands to firmware to populate or
  *    update the internal driver scan table
@@ -761,6 +815,7 @@ clear_selected_scan_list_entries(wlan_adapter * adapter,
  *  @param priv          A pointer to wlan_private structure
  *  @param puserscanin   Pointer to the input configuration for the requested
  *                       scan.
+ *  @param full_scan     ???
  *
  *  @return              0 or < 0 if error
  */
@@ -782,7 +837,7 @@ int wlan_scan_networks(wlan_private * priv,
        DECLARE_MAC_BUF(mac);
 #endif
 
-       lbs_deb_enter(LBS_DEB_SCAN);
+       lbs_deb_enter_args(LBS_DEB_SCAN, "full_scan %d", full_scan);
 
        /* Cancel any partial outstanding partial scans if this scan
         * is a full scan.
@@ -833,8 +888,9 @@ int wlan_scan_networks(wlan_private * priv,
 #ifdef CONFIG_LIBERTAS_DEBUG
        /* Dump the scan table */
        mutex_lock(&adapter->lock);
+       lbs_deb_scan("The scan table contains:\n");
        list_for_each_entry (iter_bss, &adapter->network_list, list) {
-               lbs_deb_scan("Scan:(%02d) %s, RSSI[%03d], SSID[%s]\n",
+               lbs_deb_scan("scan %02d, %s, RSSI, %d, SSID '%s'\n",
                       i++, print_mac(mac, iter_bss->bssid), (s32) iter_bss->rssi,
                       escape_essid(iter_bss->ssid, iter_bss->ssid_len));
        }
@@ -886,7 +942,7 @@ static int libertas_process_bss(struct bss_descriptor * bss,
        u16 beaconsize = 0;
        int ret;
 
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       lbs_deb_enter(LBS_DEB_SCAN);
 
        if (*bytesleft >= sizeof(beaconsize)) {
                /* Extract & convert beacon size from the command buffer */
@@ -898,7 +954,8 @@ static int libertas_process_bss(struct bss_descriptor * bss,
        if (beaconsize == 0 || beaconsize > *bytesleft) {
                *pbeaconinfo += *bytesleft;
                *bytesleft = 0;
-               return -1;
+               ret = -1;
+               goto done;
        }
 
        /* Initialize the current working beacon pointer for this BSS iteration */
@@ -915,7 +972,8 @@ static int libertas_process_bss(struct bss_descriptor * bss,
 
        if ((end - pos) < 12) {
                lbs_deb_scan("process_bss: Not enough bytes left\n");
-               return -1;
+               ret = -1;
+               goto done;
        }
 
        /*
@@ -1090,39 +1148,27 @@ done:
        return ret;
 }
 
-/**
- *  @brief Compare two SSIDs
- *
- *  @param ssid1    A pointer to ssid to compare
- *  @param ssid2    A pointer to ssid to compare
- *
- *  @return         0--ssid is same, otherwise is different
- */
-int libertas_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len)
-{
-       if (ssid1_len != ssid2_len)
-               return -1;
-
-       return memcmp(ssid1, ssid2, ssid1_len);
-}
-
 /**
  *  @brief This function finds a specific compatible BSSID in the scan list
  *
+ *  Used in association code
+ *
  *  @param adapter  A pointer to wlan_adapter
  *  @param bssid    BSSID to find in the scan list
  *  @param mode     Network mode: Infrastructure or IBSS
  *
  *  @return         index in BSSID list, or error return code (< 0)
  */
-struct bss_descriptor * libertas_find_bssid_in_list(wlan_adapter * adapter,
+struct bss_descriptor *libertas_find_bssid_in_list(wlan_adapter * adapter,
                u8 * bssid, u8 mode)
 {
        struct bss_descriptor * iter_bss;
        struct bss_descriptor * found_bss = NULL;
 
+       lbs_deb_enter(LBS_DEB_SCAN);
+
        if (!bssid)
-               return NULL;
+               goto out;
 
        lbs_deb_hex(LBS_DEB_SCAN, "looking for",
                bssid, ETH_ALEN);
@@ -1149,12 +1195,16 @@ struct bss_descriptor * libertas_find_bssid_in_list(wlan_adapter * adapter,
        }
        mutex_unlock(&adapter->lock);
 
+out:
+       lbs_deb_leave_args(LBS_DEB_SCAN, "found_bss %p", found_bss);
        return found_bss;
 }
 
 /**
  *  @brief This function finds ssid in ssid list.
  *
+ *  Used in association code
+ *
  *  @param adapter  A pointer to wlan_adapter
  *  @param ssid     SSID to find in the list
  *  @param bssid    BSSID to qualify the SSID selection (if provided)
@@ -1171,6 +1221,8 @@ struct bss_descriptor * libertas_find_ssid_in_list(wlan_adapter * adapter,
        struct bss_descriptor * found_bss = NULL;
        struct bss_descriptor * tmp_oldest = NULL;
 
+       lbs_deb_enter(LBS_DEB_SCAN);
+
        mutex_lock(&adapter->lock);
 
        list_for_each_entry (iter_bss, &adapter->network_list, list) {
@@ -1215,6 +1267,7 @@ struct bss_descriptor * libertas_find_ssid_in_list(wlan_adapter * adapter,
 
 out:
        mutex_unlock(&adapter->lock);
+       lbs_deb_leave_args(LBS_DEB_SCAN, "found_bss %p", found_bss);
        return found_bss;
 }
 
@@ -1235,6 +1288,8 @@ static struct bss_descriptor * libertas_find_best_ssid_in_list(wlan_adapter * ad
        struct bss_descriptor * iter_bss;
        struct bss_descriptor * best_bss = NULL;
 
+       lbs_deb_enter(LBS_DEB_SCAN);
+
        mutex_lock(&adapter->lock);
 
        list_for_each_entry (iter_bss, &adapter->network_list, list) {
@@ -1259,12 +1314,15 @@ static struct bss_descriptor * libertas_find_best_ssid_in_list(wlan_adapter * ad
        }
 
        mutex_unlock(&adapter->lock);
+       lbs_deb_leave_args(LBS_DEB_SCAN, "best_bss %p", best_bss);
        return best_bss;
 }
 
 /**
  *  @brief Find the AP with specific ssid in the scan list
  *
+ *  Used from association worker.
+ *
  *  @param priv         A pointer to wlan_private structure
  *  @param pSSID        A pointer to AP's ssid
  *
@@ -1277,11 +1335,11 @@ int libertas_find_best_network_ssid(wlan_private * priv,
        int ret = -1;
        struct bss_descriptor * found;
 
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       lbs_deb_enter(LBS_DEB_SCAN);
 
        wlan_scan_networks(priv, NULL, 1);
        if (adapter->surpriseremoved)
-               return -1;
+               goto out;
 
        wait_event_interruptible(adapter->cmd_pending, !adapter->nr_cmd_pending);
 
@@ -1293,6 +1351,7 @@ int libertas_find_best_network_ssid(wlan_private * priv,
                ret = 0;
        }
 
+out:
        lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", ret);
        return ret;
 }
@@ -1327,10 +1386,17 @@ int libertas_set_scan(struct net_device *dev, struct iw_request_info *info,
        return 0;
 }
 
+
 /**
  *  @brief Send a scan command for all available channels filtered on a spec
  *
+ *  Used in association code and from debugfs
+ *
  *  @param priv             A pointer to wlan_private structure
+ *  @param ssid             A pointer to the SSID to scan for
+ *  @param ssid_len         Length of the SSID
+ *  @param clear_ssid       Should existing scan results with this SSID
+ *                          be cleared?
  *  @param prequestedssid   A pointer to AP's ssid
  *  @param keeppreviousscan Flag used to save/clear scan table before scan
  *
@@ -1343,7 +1409,8 @@ int libertas_send_specific_ssid_scan(wlan_private * priv,
        struct wlan_ioctl_user_scan_cfg scancfg;
        int ret = 0;
 
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       lbs_deb_enter_args(LBS_DEB_SCAN, "SSID '%s', clear %d",
+               escape_essid(ssid, ssid_len), clear_ssid);
 
        if (!ssid_len)
                goto out;
@@ -1354,15 +1421,26 @@ int libertas_send_specific_ssid_scan(wlan_private * priv,
        scancfg.clear_ssid = clear_ssid;
 
        wlan_scan_networks(priv, &scancfg, 1);
-       if (adapter->surpriseremoved)
-               return -1;
+       if (adapter->surpriseremoved) {
+               ret = -1;
+               goto out;
+       }
        wait_event_interruptible(adapter->cmd_pending, !adapter->nr_cmd_pending);
 
 out:
-       lbs_deb_leave(LBS_DEB_ASSOC);
+       lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", ret);
        return ret;
 }
 
+
+
+
+/*********************************************************************/
+/*                                                                   */
+/*  Support for Wireless Extensions                                  */
+/*                                                                   */
+/*********************************************************************/
+
 #define MAX_CUSTOM_LEN 64
 
 static inline char *libertas_translate_scan(wlan_private *priv,
@@ -1379,10 +1457,13 @@ static inline char *libertas_translate_scan(wlan_private *priv,
 #define RSSI_DIFF    ((u8)(PERFECT_RSSI - WORST_RSSI))
        u8 rssi;
 
+       lbs_deb_enter(LBS_DEB_SCAN);
+
        cfp = libertas_find_cfp_by_band_and_channel(adapter, 0, bss->channel);
        if (!cfp) {
                lbs_deb_scan("Invalid channel number %d\n", bss->channel);
-               return NULL;
+               start = NULL;
+               goto out;
        }
 
        /* First entry *MUST* be the AP BSSID */
@@ -1510,11 +1591,13 @@ static inline char *libertas_translate_scan(wlan_private *priv,
                        start = iwe_stream_add_point(start, stop, &iwe, custom);
        }
 
+out:
+       lbs_deb_leave_args(LBS_DEB_SCAN, "start %p", start);
        return start;
 }
 
 /**
- *  @brief  Retrieve the scan table entries via wireless tools IOCTL call
+ *  @brief  Handle Retrieve scan table ioctl
  *
  *  @param dev          A pointer to net_device structure
  *  @param info         A pointer to iw_request_info structure
@@ -1535,7 +1618,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
        struct bss_descriptor * iter_bss;
        struct bss_descriptor * safe;
 
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       lbs_deb_enter(LBS_DEB_SCAN);
 
        /* Update RSSI if current BSS is a locally created ad-hoc BSS */
        if ((adapter->mode == IW_MODE_ADHOC) && adapter->adhoccreate) {
@@ -1577,19 +1660,27 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
        dwrq->length = (ev - extra);
        dwrq->flags = 0;
 
-       lbs_deb_leave(LBS_DEB_ASSOC);
+       lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", err);
        return err;
 }
 
+
+
+
+/*********************************************************************/
+/*                                                                   */
+/*  Command execution                                                */
+/*                                                                   */
+/*********************************************************************/
+
+
 /**
  *  @brief Prepare a scan command to be sent to the firmware
  *
- *  Use the wlan_scan_cmd_config sent to the command processing module in
- *   the libertas_prepare_and_send_command to configure a cmd_ds_802_11_scan command
- *   struct to send to firmware.
+ *  Called from libertas_prepare_and_send_command() in cmd.c
  *
- *  The fixed fields specifying the BSS type and BSSID filters as well as a
- *   variable number/length of TLVs are sent in the command to firmware.
+ *  Sends a fixed lenght data part (specifying the BSS type and BSSID filters)
+ *  as well as a variable number/length of TLVs to the firmware.
  *
  *  @param priv       A pointer to wlan_private structure
  *  @param cmd        A pointer to cmd_ds_command structure to be sent to
@@ -1598,18 +1689,14 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
  *                    to set the fields/TLVs for the command sent to firmware
  *
  *  @return           0 or -1
- *
- *  @sa wlan_scan_create_channel_list
  */
 int libertas_cmd_80211_scan(wlan_private * priv,
                         struct cmd_ds_command *cmd, void *pdata_buf)
 {
        struct cmd_ds_802_11_scan *pscan = &cmd->params.scan;
-       struct wlan_scan_cmd_config *pscancfg;
-
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       struct wlan_scan_cmd_config *pscancfg = pdata_buf;
 
-       pscancfg = pdata_buf;
+       lbs_deb_enter(LBS_DEB_SCAN);
 
        /* Set fixed field variables in scan command */
        pscan->bsstype = pscancfg->bsstype;
@@ -1622,11 +1709,11 @@ int libertas_cmd_80211_scan(wlan_private * priv,
        cmd->size = cpu_to_le16(sizeof(pscan->bsstype) + ETH_ALEN
                                + pscancfg->tlvbufferlen + S_DS_GEN);
 
-       lbs_deb_scan("SCAN_CMD: command=%x, size=%x, seqnum=%x\n",
+       lbs_deb_scan("SCAN_CMD: command 0x%04x, size %d, seqnum %d\n",
                     le16_to_cpu(cmd->command), le16_to_cpu(cmd->size),
                     le16_to_cpu(cmd->seqnum));
 
-       lbs_deb_leave(LBS_DEB_ASSOC);
+       lbs_deb_leave(LBS_DEB_SCAN);
        return 0;
 }
 
@@ -1645,6 +1732,8 @@ static inline int is_same_network(struct bss_descriptor *src,
 /**
  *  @brief This function handles the command response of scan
  *
+ *  Called from handle_cmd_response() in cmdrespc.
+ *
  *   The response buffer for the scan command has the following
  *      memory layout:
  *
@@ -1679,7 +1768,7 @@ int libertas_ret_80211_scan(wlan_private * priv, struct cmd_ds_command *resp)
        int tlvbufsize;
        int ret;
 
-       lbs_deb_enter(LBS_DEB_ASSOC);
+       lbs_deb_enter(LBS_DEB_SCAN);
 
        /* Prune old entries from scan table */
        list_for_each_entry_safe (iter_bss, safe, &adapter->network_list, list) {