On Tue, 2007-10-09 at 14:15 +0200, Holger Schurig wrote: > * 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@xxxxxxxxxxxxxxxxxxxx> Acked-by: Dan Williams <dcbw@xxxxxxxxxx> > --- > > Index: libertas-2.6/drivers/net/wireless/libertas/scan.c > =================================================================== > --- libertas-2.6.orig/drivers/net/wireless/libertas/scan.c 2007-10-09 14:38:35.000000000 +0200 > +++ libertas-2.6/drivers/net/wireless/libertas/scan.c 2007-10-09 15:12:49.000000000 +0200 > @@ -65,6 +65,15 @@ > 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_ad > { > 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_ad > (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_lis > 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 > 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 > > 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 > (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_p > 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_p > 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_ad > } > > 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_ad > } > } > 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_ad > * @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 > */ > @@ -781,7 +836,7 @@ int wlan_scan_networks(wlan_private * pr > int i = 0; > #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. > @@ -832,8 +887,9 @@ int wlan_scan_networks(wlan_private * pr > #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) " MAC_FMT ", RSSI[%03d], SSID[%s]\n", > + lbs_deb_scan("scan %02d, " MAC_FMT ", RSSI, %d, SSID '%s'\n", > i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi, > escape_essid(iter_bss->ssid, iter_bss->ssid_len)); > } > @@ -884,7 +940,7 @@ static int libertas_process_bss(struct b > 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 */ > @@ -896,7 +952,8 @@ static int libertas_process_bss(struct b > 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 */ > @@ -913,7 +970,8 @@ static int libertas_process_bss(struct b > > if ((end - pos) < 12) { > lbs_deb_scan("process_bss: Not enough bytes left\n"); > - return -1; > + ret = -1; > + goto done; > } > > /* > @@ -1089,38 +1147,26 @@ done: > } > > /** > - * @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); > @@ -1147,12 +1193,16 @@ struct bss_descriptor * libertas_find_bs > } > 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) > @@ -1169,6 +1219,8 @@ struct bss_descriptor * libertas_find_ss > 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) { > @@ -1213,6 +1265,7 @@ struct bss_descriptor * libertas_find_ss > > out: > mutex_unlock(&adapter->lock); > + lbs_deb_leave_args(LBS_DEB_SCAN, "found_bss %p", found_bss); > return found_bss; > } > > @@ -1233,6 +1286,8 @@ static struct bss_descriptor * libertas_ > 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) { > @@ -1257,12 +1312,15 @@ static struct bss_descriptor * libertas_ > } > > 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 > * > @@ -1275,11 +1333,11 @@ int libertas_find_best_network_ssid(wlan > 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); > > @@ -1291,6 +1349,7 @@ int libertas_find_best_network_ssid(wlan > ret = 0; > } > > +out: > lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", ret); > return ret; > } > @@ -1325,10 +1384,17 @@ int libertas_set_scan(struct net_device > 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 > * > @@ -1341,7 +1407,8 @@ int libertas_send_specific_ssid_scan(wla > 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; > @@ -1352,15 +1419,26 @@ int libertas_send_specific_ssid_scan(wla > 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, > @@ -1377,10 +1455,13 @@ static inline char *libertas_translate_s > #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 */ > @@ -1508,11 +1589,13 @@ static inline char *libertas_translate_s > 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 > @@ -1533,7 +1616,7 @@ int libertas_get_scan(struct net_device > 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) { > @@ -1575,19 +1658,27 @@ int libertas_get_scan(struct net_device > 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 > @@ -1596,18 +1687,14 @@ int libertas_get_scan(struct net_device > * 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; > @@ -1620,11 +1707,11 @@ int libertas_cmd_80211_scan(wlan_private > 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; > } > > @@ -1643,6 +1730,8 @@ static inline int is_same_network(struct > /** > * @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: > * > @@ -1677,7 +1766,7 @@ int libertas_ret_80211_scan(wlan_private > 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) { > Index: libertas-2.6/drivers/net/wireless/libertas/join.c > =================================================================== > --- libertas-2.6.orig/drivers/net/wireless/libertas/join.c 2007-10-09 14:38:35.000000000 +0200 > +++ libertas-2.6/drivers/net/wireless/libertas/join.c 2007-10-09 14:39:39.000000000 +0200 > @@ -797,8 +797,6 @@ int libertas_ret_80211_associate(wlan_pr > 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); - To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html