Commit e56188ac authored by Holger Schurig's avatar Holger Schurig Committed by David S. Miller

[PATCH] libertas: clean up scan debug messages

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