static int qtnf_channel_switch(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_csa_settings *params) { struct qtnf_wmac *mac = wiphy_priv(wiphy); struct qtnf_vif *vif = qtnf_netdev_get_priv(dev); int ret; pr_debug("%s: chan(%u) count(%u) radar(%u) block_tx(%u)\n", dev->name, params->chandef.chan->hw_value, params->count, params->radar_required, params->block_tx); switch (vif->wdev.iftype) { case NL80211_IFTYPE_AP: if (!(vif->bss_status & QTNF_STATE_AP_START)) { pr_warn("AP not started on %s\n", dev->name); return -ENOTCONN; } break; default: pr_err("unsupported vif type (%d) on %s\n", vif->wdev.iftype, dev->name); return -EOPNOTSUPP; } if (vif->vifid != 0) { if (!(mac->status & QTNF_MAC_CSA_ACTIVE)) return -EOPNOTSUPP; if (!cfg80211_chandef_identical(¶ms->chandef, &mac->csa_chandef)) return -EINVAL; return 0; } if (!cfg80211_chandef_valid(¶ms->chandef)) { pr_err("%s: invalid channel\n", dev->name); return -EINVAL; } if (cfg80211_chandef_identical(¶ms->chandef, &mac->chandef)) { pr_err("%s: switch request to the same channel\n", dev->name); return -EALREADY; } ret = qtnf_cmd_send_chan_switch(mac, params); if (ret) pr_warn("%s: failed to switch to channel (%u)\n", dev->name, params->chandef.chan->hw_value); return ret; }
static int qtnf_channel_switch(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_csa_settings *params) { struct qtnf_vif *vif = qtnf_netdev_get_priv(dev); int ret; pr_debug("%s: chan(%u) count(%u) radar(%u) block_tx(%u)\n", dev->name, params->chandef.chan->hw_value, params->count, params->radar_required, params->block_tx); if (!cfg80211_chandef_valid(¶ms->chandef)) { pr_err("%s: invalid channel\n", dev->name); return -EINVAL; } ret = qtnf_cmd_send_chan_switch(vif, params); if (ret) pr_warn("%s: failed to switch to channel (%u)\n", dev->name, params->chandef.chan->hw_value); return ret; }