/** * @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; }
/** * @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; }