Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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);
+155 −66
Original line number Diff line number Diff line
@@ -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_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,
/*
 * 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;
	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,25 +1148,11 @@ 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
@@ -1121,8 +1165,10 @@ struct bss_descriptor * libertas_find_bssid_in_list(wlan_adapter * adapter,
	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;
	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 */
	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) {