static void qtnf_cfg80211_reg_notifier(struct wiphy *wiphy_in, struct regulatory_request *req) { struct qtnf_wmac *mac = wiphy_priv(wiphy_in); struct qtnf_bus *bus = mac->bus; struct wiphy *wiphy; unsigned int mac_idx; enum nl80211_band band; int ret; pr_debug("MAC%u: initiator=%d alpha=%c%c\n", mac->macid, req->initiator, req->alpha2[0], req->alpha2[1]); ret = qtnf_cmd_reg_notify(bus, req); if (ret) { if (ret != -EOPNOTSUPP && ret != -EALREADY) pr_err("failed to update reg domain to %c%c\n", req->alpha2[0], req->alpha2[1]); return; } for (mac_idx = 0; mac_idx < QTNF_MAX_MAC; ++mac_idx) { if (!(bus->hw_info.mac_bitmap & (1 << mac_idx))) continue; mac = bus->mac[mac_idx]; wiphy = priv_to_wiphy(mac); for (band = 0; band < NUM_NL80211_BANDS; ++band) { if (!wiphy->bands[band]) continue; ret = qtnf_cmd_get_mac_chan_info(mac, wiphy->bands[band]); if (ret) pr_err("failed to get chan info for mac %u band %u\n", mac_idx, band); } } }
static int qtnf_mac_init_single_band(struct wiphy *wiphy, struct qtnf_wmac *mac, enum nl80211_band band) { int ret; wiphy->bands[band] = kzalloc(sizeof(*wiphy->bands[band]), GFP_KERNEL); if (!wiphy->bands[band]) return -ENOMEM; wiphy->bands[band]->band = band; ret = qtnf_cmd_get_mac_chan_info(mac, wiphy->bands[band]); if (ret) { pr_err("MAC%u: band %u: failed to get chans info: %d\n", mac->macid, band, ret); return ret; } qtnf_band_init_rates(wiphy->bands[band]); qtnf_band_setup_htvht_caps(&mac->macinfo, wiphy->bands[band]); return 0; }