static int ath_regd_init_wiphy(struct ath_regulatory *reg, struct wiphy *wiphy, void (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request)) { const struct ieee80211_regdomain *regd; wiphy->reg_notifier = reg_notifier; wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; if (ath_is_world_regd(reg)) { /* * Anything applied here (prior to wiphy registration) gets * saved on the wiphy orig_* parameters */ regd = ath_world_regdomain(reg); wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; } else { /* * This gets applied in the case of the absence of CRDA, * it's our own custom world regulatory domain, similar to * cfg80211's but we enable passive scanning. */ regd = ath_default_world_regdomain(); } wiphy_apply_custom_regulatory(wiphy, regd); ath_reg_apply_radar_flags(wiphy); ath_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); return 0; }
static int _rtl_regd_init_wiphy(struct rtl_regulatory *reg, struct wiphy *wiphy, int (*reg_notifier) (struct wiphy * wiphy, struct regulatory_request * request)) { const struct ieee80211_regdomain *regd; wiphy->reg_notifier = reg_notifier; /*<delete in kernel start>*/ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) /*<delete in kernel end>*/ wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_STRICT_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_DISABLE_BEACON_HINTS; /*<delete in kernel start>*/ #else wiphy->custom_regulatory = true; wiphy->strict_regulatory = false; wiphy->disable_beacon_hints = false; #endif /*<delete in kernel end>*/ regd = _rtl_regdomain_select(reg); wiphy_apply_custom_regulatory(wiphy, regd); _rtl_reg_apply_radar_flags(wiphy); _rtl_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); return 0; }
static void _rtw_regd_init_wiphy(struct rtw_regulatory *reg, struct wiphy *wiphy, void (*reg_notifier) (struct wiphy * wiphy, struct regulatory_request * request)) { const struct ieee80211_regdomain *regd; wiphy->reg_notifier = reg_notifier; #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_STRICT_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_DISABLE_BEACON_HINTS; #else wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG; wiphy->regulatory_flags &= ~REGULATORY_STRICT_REG; wiphy->regulatory_flags &= ~REGULATORY_DISABLE_BEACON_HINTS; #endif regd = _rtw_regdomain_select(reg); wiphy_apply_custom_regulatory(wiphy, regd); /* Hard code flags */ _rtw_reg_apply_flags(wiphy); _rtw_reg_apply_radar_flags(wiphy); _rtw_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); }
/** * cds_regulatory_wiphy_init() - regulatory wiphy init * @hdd_ctx: hdd context * @reg: regulatory data * @wiphy: wiphy structure * * Return: int */ static int cds_regulatory_wiphy_init(hdd_context_t *hdd_ctx, struct regulatory *reg, struct wiphy *wiphy) { const struct ieee80211_regdomain *reg_domain; if (cds_is_world_regdomain(reg->reg_domain)) { reg_domain = cds_world_regdomain(reg); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(WITH_BACKPORTS) wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG; #else wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; #endif } else if (hdd_ctx->config->fRegChangeDefCountry) { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(WITH_BACKPORTS) wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG; #else wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; #endif reg_domain = &cds_world_regdom_60_61_62; } else { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(WITH_BACKPORTS) wiphy->regulatory_flags |= REGULATORY_STRICT_REG; #else wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; #endif reg_domain = &cds_world_regdom_60_61_62; } /* * save the original driver regulatory flags */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(WITH_BACKPORTS) hdd_ctx->reg.reg_flags = wiphy->regulatory_flags; #else hdd_ctx->reg.reg_flags = wiphy->flags; #endif wiphy_apply_custom_regulatory(wiphy, reg_domain); /* * restore the driver regulatory flags since * wiphy_apply_custom_regulatory may have * changed them */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(WITH_BACKPORTS) wiphy->regulatory_flags = hdd_ctx->reg.reg_flags; #else wiphy->flags = hdd_ctx->reg.reg_flags; #endif return 0; }
static int _rtl_regd_init_wiphy(struct rtl_regulatory *reg, struct wiphy *wiphy, int (*reg_notifier) (struct wiphy *wiphy, struct regulatory_request * request)) { const struct ieee80211_regdomain *regd; wiphy->reg_notifier = reg_notifier; wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_STRICT_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_DISABLE_BEACON_HINTS; regd = _rtl_regdomain_select(reg); wiphy_apply_custom_regulatory(wiphy, regd); _rtl_reg_apply_radar_flags(wiphy); _rtl_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); return 0; }
static void _rtw_regd_init_wiphy(struct rtw_regulatory *reg, struct wiphy *wiphy, void (*reg_notifier) (struct wiphy * wiphy, struct regulatory_request * request)) { const struct ieee80211_regdomain *regd; wiphy->reg_notifier = reg_notifier; wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG; wiphy->regulatory_flags &= ~REGULATORY_STRICT_REG; wiphy->regulatory_flags &= ~REGULATORY_DISABLE_BEACON_HINTS; regd = _rtw_regdomain_select(reg); wiphy_apply_custom_regulatory(wiphy, regd); /* Hard code flags */ _rtw_reg_apply_flags(wiphy); }
static int ath_regd_init_wiphy(struct ath_regulatory *reg, struct wiphy *wiphy, int (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request)) { const struct ieee80211_regdomain *regd; wiphy->reg_notifier = reg_notifier; wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; if (ath_is_world_regd(reg)) { regd = ath_world_regdomain(reg); wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; wiphy->country_ie_pref = NL80211_COUNTRY_IE_FOLLOW_POWER; } else { regd = ath_default_world_regdomain(); } wiphy_apply_custom_regulatory(wiphy, regd); ath_reg_apply_radar_flags(wiphy); ath_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); return 0; }
int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac) { struct wiphy *wiphy = priv_to_wiphy(mac); struct ieee80211_iface_combination *iface_comb = NULL; int ret; if (!wiphy) { pr_err("invalid wiphy pointer\n"); return -EFAULT; } iface_comb = kzalloc(sizeof(*iface_comb), GFP_KERNEL); if (!iface_comb) return -ENOMEM; ret = qtnf_wiphy_setup_if_comb(wiphy, iface_comb, &mac->macinfo); if (ret) goto out; pr_info("MAC%u: phymode=%#x radar=%#x\n", mac->macid, mac->macinfo.phymode_cap, mac->macinfo.radar_detect_widths); wiphy->frag_threshold = mac->macinfo.frag_thr; wiphy->rts_threshold = mac->macinfo.rts_thr; wiphy->retry_short = mac->macinfo.sretry_limit; wiphy->retry_long = mac->macinfo.lretry_limit; wiphy->coverage_class = mac->macinfo.coverage_class; wiphy->max_scan_ssids = QTNF_MAX_SSID_LIST_LENGTH; wiphy->max_scan_ie_len = QTNF_MAX_VSIE_LEN; wiphy->mgmt_stypes = qtnf_mgmt_stypes; wiphy->max_remain_on_channel_duration = 5000; wiphy->iface_combinations = iface_comb; wiphy->n_iface_combinations = 1; wiphy->max_num_csa_counters = 2; /* Initialize cipher suits */ wiphy->cipher_suites = qtnf_cipher_suites; wiphy->n_cipher_suites = ARRAY_SIZE(qtnf_cipher_suites); wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; wiphy->flags |= WIPHY_FLAG_HAVE_AP_SME | WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD | WIPHY_FLAG_AP_UAPSD | WIPHY_FLAG_HAS_CHANNEL_SWITCH; wiphy->probe_resp_offload = NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS | NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2; wiphy->available_antennas_tx = mac->macinfo.num_tx_chain; wiphy->available_antennas_rx = mac->macinfo.num_rx_chain; wiphy->max_ap_assoc_sta = mac->macinfo.max_ap_assoc_sta; ether_addr_copy(wiphy->perm_addr, mac->macaddr); if (hw_info->hw_capab & QLINK_HW_SUPPORTS_REG_UPDATE) { wiphy->regulatory_flags |= REGULATORY_STRICT_REG | REGULATORY_CUSTOM_REG; wiphy->reg_notifier = qtnf_cfg80211_reg_notifier; wiphy_apply_custom_regulatory(wiphy, hw_info->rd); } else { wiphy->regulatory_flags |= REGULATORY_WIPHY_SELF_MANAGED; } ret = wiphy_register(wiphy); if (ret < 0) goto out; if (wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) ret = regulatory_set_wiphy_regd(wiphy, hw_info->rd); else if (isalpha(hw_info->rd->alpha2[0]) && isalpha(hw_info->rd->alpha2[1])) ret = regulatory_hint(wiphy, hw_info->rd->alpha2); out: if (ret) { kfree(iface_comb); return ret; } return 0; }