Exemple #1
0
/**
 *  @brief This function generates 11D info from user specified regioncode and download to FW
 *  @param priv    pointer to struct lbs_private
 *  @return 	   0; -1
 */
int lbs_create_dnld_countryinfo_11d(struct lbs_private *priv)
{
	int ret;
	struct region_channel *region_chan;
	u8 j;

	lbs_deb_enter(LBS_DEB_11D);
	lbs_deb_11d("curbssparams.band %d\n", priv->curbssparams.band);

	if (priv->enable11d) {
		/* update parsed_region_chan_11; dnld domaininf to FW */

		for (j = 0; j < ARRAY_SIZE(priv->region_channel); j++) {
			region_chan = &priv->region_channel[j];

			lbs_deb_11d("%d region_chan->band %d\n", j,
			       region_chan->band);

			if (!region_chan || !region_chan->valid
			    || !region_chan->CFP)
				continue;
			if (region_chan->band != priv->curbssparams.band)
				continue;
			break;
		}

		if (j >= ARRAY_SIZE(priv->region_channel)) {
			lbs_deb_11d("region_chan not found, band %d\n",
			       priv->curbssparams.band);
			ret = -1;
			goto done;
		}

		memset(&priv->parsed_region_chan, 0,
		       sizeof(struct parsed_region_chan_11d));
		lbs_generate_parsed_region_chan_11d(region_chan,
						     &priv->
						     parsed_region_chan);

		memset(&priv->domainreg, 0,
		       sizeof(struct lbs_802_11d_domain_reg));
		generate_domain_info_11d(&priv->parsed_region_chan,
					 &priv->domainreg);

		ret = set_domain_info_11d(priv);

		if (ret) {
			lbs_deb_11d("error setting domain info\n");
			goto done;
		}

	}
	ret = 0;

done:
	lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret);
	return ret;
}
Exemple #2
0
/**
 *  @brief This function parses countryinfo from AP and download country info to FW
 *  @param priv    pointer to wlan_private
 *  @return 	   0; -1
 */
int libertas_parse_dnld_countryinfo_11d(wlan_private * priv,
                                        struct bss_descriptor * bss)
{
	int ret;
	wlan_adapter *adapter = priv->adapter;

	lbs_deb_enter(LBS_DEB_11D);
	if (priv->adapter->enable11d) {
		memset(&adapter->parsed_region_chan, 0,
		       sizeof(struct parsed_region_chan_11d));
		ret = parse_domain_info_11d(&bss->countryinfo, 0,
					       &adapter->parsed_region_chan);

		if (ret == -1) {
			lbs_deb_11d("error parsing domain_info from AP\n");
			goto done;
		}

		memset(&adapter->domainreg, 0,
		       sizeof(struct wlan_802_11d_domain_reg));
		generate_domain_info_11d(&adapter->parsed_region_chan,
				      &adapter->domainreg);

		ret = set_domain_info_11d(priv);

		if (ret) {
			lbs_deb_11d("error setting domain info\n");
			goto done;
		}
	}
	ret = 0;

done:
	lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret);
	return ret;
}