nl80211: move scan API to wdev
The new P2P Device will have to be able to scan for P2P search, so move scanning to use struct wireless_dev instead of struct net_device. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
1c90f9d404
commit
fd0142844e
|
@ -966,11 +966,11 @@ static int ath6kl_set_probed_ssids(struct ath6kl *ar,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ath6kl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
|
static int ath6kl_cfg80211_scan(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request)
|
struct cfg80211_scan_request *request)
|
||||||
{
|
{
|
||||||
struct ath6kl *ar = ath6kl_priv(ndev);
|
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(request->wdev);
|
||||||
struct ath6kl_vif *vif = netdev_priv(ndev);
|
struct ath6kl *ar = ath6kl_priv(vif->ndev);
|
||||||
s8 n_channels = 0;
|
s8 n_channels = 0;
|
||||||
u16 *channels = NULL;
|
u16 *channels = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
|
@ -691,9 +691,10 @@ scan_out:
|
||||||
}
|
}
|
||||||
|
|
||||||
static s32
|
static s32
|
||||||
brcmf_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
|
brcmf_cfg80211_scan(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request)
|
struct cfg80211_scan_request *request)
|
||||||
{
|
{
|
||||||
|
struct net_device *ndev = request->wdev->netdev;
|
||||||
s32 err = 0;
|
s32 err = 0;
|
||||||
|
|
||||||
WL_TRACE("Enter\n");
|
WL_TRACE("Enter\n");
|
||||||
|
|
|
@ -353,9 +353,10 @@ static int iwm_cfg80211_change_iface(struct wiphy *wiphy,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int iwm_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
|
static int iwm_cfg80211_scan(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request)
|
struct cfg80211_scan_request *request)
|
||||||
{
|
{
|
||||||
|
struct net_device *ndev = request->wdev->netdev;
|
||||||
struct iwm_priv *iwm = ndev_to_iwm(ndev);
|
struct iwm_priv *iwm = ndev_to_iwm(ndev);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
|
@ -805,7 +805,6 @@ void lbs_scan_done(struct lbs_private *priv)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lbs_cfg_scan(struct wiphy *wiphy,
|
static int lbs_cfg_scan(struct wiphy *wiphy,
|
||||||
struct net_device *dev,
|
|
||||||
struct cfg80211_scan_request *request)
|
struct cfg80211_scan_request *request)
|
||||||
{
|
{
|
||||||
struct lbs_private *priv = wiphy_priv(wiphy);
|
struct lbs_private *priv = wiphy_priv(wiphy);
|
||||||
|
|
|
@ -1376,9 +1376,10 @@ mwifiex_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
|
||||||
* it also informs the results.
|
* it also informs the results.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
mwifiex_cfg80211_scan(struct wiphy *wiphy, struct net_device *dev,
|
mwifiex_cfg80211_scan(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request)
|
struct cfg80211_scan_request *request)
|
||||||
{
|
{
|
||||||
|
struct net_device *dev = request->wdev->netdev;
|
||||||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
||||||
int i;
|
int i;
|
||||||
struct ieee80211_channel *chan;
|
struct ieee80211_channel *chan;
|
||||||
|
|
|
@ -138,7 +138,7 @@ static int orinoco_change_vif(struct wiphy *wiphy, struct net_device *dev,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int orinoco_scan(struct wiphy *wiphy, struct net_device *dev,
|
static int orinoco_scan(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request)
|
struct cfg80211_scan_request *request)
|
||||||
{
|
{
|
||||||
struct orinoco_private *priv = wiphy_priv(wiphy);
|
struct orinoco_private *priv = wiphy_priv(wiphy);
|
||||||
|
|
|
@ -484,7 +484,7 @@ static int rndis_change_virtual_intf(struct wiphy *wiphy,
|
||||||
enum nl80211_iftype type, u32 *flags,
|
enum nl80211_iftype type, u32 *flags,
|
||||||
struct vif_params *params);
|
struct vif_params *params);
|
||||||
|
|
||||||
static int rndis_scan(struct wiphy *wiphy, struct net_device *dev,
|
static int rndis_scan(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request);
|
struct cfg80211_scan_request *request);
|
||||||
|
|
||||||
static int rndis_set_wiphy_params(struct wiphy *wiphy, u32 changed);
|
static int rndis_set_wiphy_params(struct wiphy *wiphy, u32 changed);
|
||||||
|
@ -1941,9 +1941,10 @@ static int rndis_get_tx_power(struct wiphy *wiphy, int *dbm)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SCAN_DELAY_JIFFIES (6 * HZ)
|
#define SCAN_DELAY_JIFFIES (6 * HZ)
|
||||||
static int rndis_scan(struct wiphy *wiphy, struct net_device *dev,
|
static int rndis_scan(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request)
|
struct cfg80211_scan_request *request)
|
||||||
{
|
{
|
||||||
|
struct net_device *dev = request->wdev->netdev;
|
||||||
struct usbnet *usbdev = netdev_priv(dev);
|
struct usbnet *usbdev = netdev_priv(dev);
|
||||||
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
|
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -999,7 +999,7 @@ struct cfg80211_ssid {
|
||||||
* @ie_len: length of ie in octets
|
* @ie_len: length of ie in octets
|
||||||
* @rates: bitmap of rates to advertise for each band
|
* @rates: bitmap of rates to advertise for each band
|
||||||
* @wiphy: the wiphy this was for
|
* @wiphy: the wiphy this was for
|
||||||
* @dev: the interface
|
* @wdev: the wireless device to scan for
|
||||||
* @aborted: (internal) scan request was notified as aborted
|
* @aborted: (internal) scan request was notified as aborted
|
||||||
* @no_cck: used to send probe requests at non CCK rate in 2GHz band
|
* @no_cck: used to send probe requests at non CCK rate in 2GHz band
|
||||||
*/
|
*/
|
||||||
|
@ -1012,9 +1012,10 @@ struct cfg80211_scan_request {
|
||||||
|
|
||||||
u32 rates[IEEE80211_NUM_BANDS];
|
u32 rates[IEEE80211_NUM_BANDS];
|
||||||
|
|
||||||
|
struct wireless_dev *wdev;
|
||||||
|
|
||||||
/* internal */
|
/* internal */
|
||||||
struct wiphy *wiphy;
|
struct wiphy *wiphy;
|
||||||
struct net_device *dev;
|
|
||||||
bool aborted;
|
bool aborted;
|
||||||
bool no_cck;
|
bool no_cck;
|
||||||
|
|
||||||
|
@ -1700,7 +1701,7 @@ struct cfg80211_ops {
|
||||||
struct ieee80211_channel *chan,
|
struct ieee80211_channel *chan,
|
||||||
enum nl80211_channel_type channel_type);
|
enum nl80211_channel_type channel_type);
|
||||||
|
|
||||||
int (*scan)(struct wiphy *wiphy, struct net_device *dev,
|
int (*scan)(struct wiphy *wiphy,
|
||||||
struct cfg80211_scan_request *request);
|
struct cfg80211_scan_request *request);
|
||||||
|
|
||||||
int (*auth)(struct wiphy *wiphy, struct net_device *dev,
|
int (*auth)(struct wiphy *wiphy, struct net_device *dev,
|
||||||
|
|
|
@ -1763,10 +1763,11 @@ static int ieee80211_resume(struct wiphy *wiphy)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int ieee80211_scan(struct wiphy *wiphy,
|
static int ieee80211_scan(struct wiphy *wiphy,
|
||||||
struct net_device *dev,
|
|
||||||
struct cfg80211_scan_request *req)
|
struct cfg80211_scan_request *req)
|
||||||
{
|
{
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
struct ieee80211_sub_if_data *sdata;
|
||||||
|
|
||||||
|
sdata = IEEE80211_WDEV_TO_SUB_IF(req->wdev);
|
||||||
|
|
||||||
switch (ieee80211_vif_type_p2p(&sdata->vif)) {
|
switch (ieee80211_vif_type_p2p(&sdata->vif)) {
|
||||||
case NL80211_IFTYPE_STATION:
|
case NL80211_IFTYPE_STATION:
|
||||||
|
|
|
@ -708,7 +708,7 @@ static void wdev_cleanup_work(struct work_struct *work)
|
||||||
|
|
||||||
cfg80211_lock_rdev(rdev);
|
cfg80211_lock_rdev(rdev);
|
||||||
|
|
||||||
if (WARN_ON(rdev->scan_req && rdev->scan_req->dev == wdev->netdev)) {
|
if (WARN_ON(rdev->scan_req && rdev->scan_req->wdev == wdev)) {
|
||||||
rdev->scan_req->aborted = true;
|
rdev->scan_req->aborted = true;
|
||||||
___cfg80211_scan_done(rdev, true);
|
___cfg80211_scan_done(rdev, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4130,7 +4130,7 @@ static int validate_scan_freqs(struct nlattr *freqs)
|
||||||
static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *rdev = info->user_ptr[0];
|
struct cfg80211_registered_device *rdev = info->user_ptr[0];
|
||||||
struct net_device *dev = info->user_ptr[1];
|
struct wireless_dev *wdev = info->user_ptr[1];
|
||||||
struct cfg80211_scan_request *request;
|
struct cfg80211_scan_request *request;
|
||||||
struct nlattr *attr;
|
struct nlattr *attr;
|
||||||
struct wiphy *wiphy;
|
struct wiphy *wiphy;
|
||||||
|
@ -4290,15 +4290,16 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||||
request->no_cck =
|
request->no_cck =
|
||||||
nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);
|
nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);
|
||||||
|
|
||||||
request->dev = dev;
|
request->wdev = wdev;
|
||||||
request->wiphy = &rdev->wiphy;
|
request->wiphy = &rdev->wiphy;
|
||||||
|
|
||||||
rdev->scan_req = request;
|
rdev->scan_req = request;
|
||||||
err = rdev->ops->scan(&rdev->wiphy, dev, request);
|
err = rdev->ops->scan(&rdev->wiphy, request);
|
||||||
|
|
||||||
if (!err) {
|
if (!err) {
|
||||||
nl80211_send_scan_start(rdev, dev);
|
nl80211_send_scan_start(rdev, wdev);
|
||||||
dev_hold(dev);
|
if (wdev->netdev)
|
||||||
|
dev_hold(wdev->netdev);
|
||||||
} else {
|
} else {
|
||||||
out_free:
|
out_free:
|
||||||
rdev->scan_req = NULL;
|
rdev->scan_req = NULL;
|
||||||
|
@ -7066,7 +7067,7 @@ static struct genl_ops nl80211_ops[] = {
|
||||||
.doit = nl80211_trigger_scan,
|
.doit = nl80211_trigger_scan,
|
||||||
.policy = nl80211_policy,
|
.policy = nl80211_policy,
|
||||||
.flags = GENL_ADMIN_PERM,
|
.flags = GENL_ADMIN_PERM,
|
||||||
.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
|
.internal_flags = NL80211_FLAG_NEED_WDEV_UP |
|
||||||
NL80211_FLAG_NEED_RTNL,
|
NL80211_FLAG_NEED_RTNL,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -7458,7 +7459,7 @@ static int nl80211_add_scan_req(struct sk_buff *msg,
|
||||||
|
|
||||||
static int nl80211_send_scan_msg(struct sk_buff *msg,
|
static int nl80211_send_scan_msg(struct sk_buff *msg,
|
||||||
struct cfg80211_registered_device *rdev,
|
struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev,
|
struct wireless_dev *wdev,
|
||||||
u32 pid, u32 seq, int flags,
|
u32 pid, u32 seq, int flags,
|
||||||
u32 cmd)
|
u32 cmd)
|
||||||
{
|
{
|
||||||
|
@ -7469,7 +7470,9 @@ static int nl80211_send_scan_msg(struct sk_buff *msg,
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
|
if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
|
||||||
nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex))
|
(wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX,
|
||||||
|
wdev->netdev->ifindex)) ||
|
||||||
|
nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)))
|
||||||
goto nla_put_failure;
|
goto nla_put_failure;
|
||||||
|
|
||||||
/* ignore errors and send incomplete event anyway */
|
/* ignore errors and send incomplete event anyway */
|
||||||
|
@ -7506,7 +7509,7 @@ nl80211_send_sched_scan_msg(struct sk_buff *msg,
|
||||||
}
|
}
|
||||||
|
|
||||||
void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
|
void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev)
|
struct wireless_dev *wdev)
|
||||||
{
|
{
|
||||||
struct sk_buff *msg;
|
struct sk_buff *msg;
|
||||||
|
|
||||||
|
@ -7514,7 +7517,7 @@ void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (nl80211_send_scan_msg(msg, rdev, netdev, 0, 0, 0,
|
if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0,
|
||||||
NL80211_CMD_TRIGGER_SCAN) < 0) {
|
NL80211_CMD_TRIGGER_SCAN) < 0) {
|
||||||
nlmsg_free(msg);
|
nlmsg_free(msg);
|
||||||
return;
|
return;
|
||||||
|
@ -7525,7 +7528,7 @@ void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
void nl80211_send_scan_done(struct cfg80211_registered_device *rdev,
|
void nl80211_send_scan_done(struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev)
|
struct wireless_dev *wdev)
|
||||||
{
|
{
|
||||||
struct sk_buff *msg;
|
struct sk_buff *msg;
|
||||||
|
|
||||||
|
@ -7533,7 +7536,7 @@ void nl80211_send_scan_done(struct cfg80211_registered_device *rdev,
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (nl80211_send_scan_msg(msg, rdev, netdev, 0, 0, 0,
|
if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0,
|
||||||
NL80211_CMD_NEW_SCAN_RESULTS) < 0) {
|
NL80211_CMD_NEW_SCAN_RESULTS) < 0) {
|
||||||
nlmsg_free(msg);
|
nlmsg_free(msg);
|
||||||
return;
|
return;
|
||||||
|
@ -7544,7 +7547,7 @@ void nl80211_send_scan_done(struct cfg80211_registered_device *rdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev,
|
void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev)
|
struct wireless_dev *wdev)
|
||||||
{
|
{
|
||||||
struct sk_buff *msg;
|
struct sk_buff *msg;
|
||||||
|
|
||||||
|
@ -7552,7 +7555,7 @@ void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev,
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (nl80211_send_scan_msg(msg, rdev, netdev, 0, 0, 0,
|
if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0,
|
||||||
NL80211_CMD_SCAN_ABORTED) < 0) {
|
NL80211_CMD_SCAN_ABORTED) < 0) {
|
||||||
nlmsg_free(msg);
|
nlmsg_free(msg);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -7,11 +7,11 @@ int nl80211_init(void);
|
||||||
void nl80211_exit(void);
|
void nl80211_exit(void);
|
||||||
void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev);
|
void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev);
|
||||||
void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
|
void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev);
|
struct wireless_dev *wdev);
|
||||||
void nl80211_send_scan_done(struct cfg80211_registered_device *rdev,
|
void nl80211_send_scan_done(struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev);
|
struct wireless_dev *wdev);
|
||||||
void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev,
|
void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev);
|
struct wireless_dev *wdev);
|
||||||
void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
|
void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
|
||||||
struct net_device *netdev, u32 cmd);
|
struct net_device *netdev, u32 cmd);
|
||||||
void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev,
|
void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev,
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak)
|
void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak)
|
||||||
{
|
{
|
||||||
struct cfg80211_scan_request *request;
|
struct cfg80211_scan_request *request;
|
||||||
struct net_device *dev;
|
struct wireless_dev *wdev;
|
||||||
#ifdef CONFIG_CFG80211_WEXT
|
#ifdef CONFIG_CFG80211_WEXT
|
||||||
union iwreq_data wrqu;
|
union iwreq_data wrqu;
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,29 +35,31 @@ void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak)
|
||||||
if (!request)
|
if (!request)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dev = request->dev;
|
wdev = request->wdev;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This must be before sending the other events!
|
* This must be before sending the other events!
|
||||||
* Otherwise, wpa_supplicant gets completely confused with
|
* Otherwise, wpa_supplicant gets completely confused with
|
||||||
* wext events.
|
* wext events.
|
||||||
*/
|
*/
|
||||||
cfg80211_sme_scan_done(dev);
|
if (wdev->netdev)
|
||||||
|
cfg80211_sme_scan_done(wdev->netdev);
|
||||||
|
|
||||||
if (request->aborted)
|
if (request->aborted)
|
||||||
nl80211_send_scan_aborted(rdev, dev);
|
nl80211_send_scan_aborted(rdev, wdev);
|
||||||
else
|
else
|
||||||
nl80211_send_scan_done(rdev, dev);
|
nl80211_send_scan_done(rdev, wdev);
|
||||||
|
|
||||||
#ifdef CONFIG_CFG80211_WEXT
|
#ifdef CONFIG_CFG80211_WEXT
|
||||||
if (!request->aborted) {
|
if (wdev->netdev && !request->aborted) {
|
||||||
memset(&wrqu, 0, sizeof(wrqu));
|
memset(&wrqu, 0, sizeof(wrqu));
|
||||||
|
|
||||||
wireless_send_event(dev, SIOCGIWSCAN, &wrqu, NULL);
|
wireless_send_event(wdev->netdev, SIOCGIWSCAN, &wrqu, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dev_put(dev);
|
if (wdev->netdev)
|
||||||
|
dev_put(wdev->netdev);
|
||||||
|
|
||||||
rdev->scan_req = NULL;
|
rdev->scan_req = NULL;
|
||||||
|
|
||||||
|
@ -955,7 +957,7 @@ int cfg80211_wext_siwscan(struct net_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
creq->wiphy = wiphy;
|
creq->wiphy = wiphy;
|
||||||
creq->dev = dev;
|
creq->wdev = dev->ieee80211_ptr;
|
||||||
/* SSIDs come after channels */
|
/* SSIDs come after channels */
|
||||||
creq->ssids = (void *)&creq->channels[n_channels];
|
creq->ssids = (void *)&creq->channels[n_channels];
|
||||||
creq->n_channels = n_channels;
|
creq->n_channels = n_channels;
|
||||||
|
@ -1024,12 +1026,12 @@ int cfg80211_wext_siwscan(struct net_device *dev,
|
||||||
creq->rates[i] = (1 << wiphy->bands[i]->n_bitrates) - 1;
|
creq->rates[i] = (1 << wiphy->bands[i]->n_bitrates) - 1;
|
||||||
|
|
||||||
rdev->scan_req = creq;
|
rdev->scan_req = creq;
|
||||||
err = rdev->ops->scan(wiphy, dev, creq);
|
err = rdev->ops->scan(wiphy, creq);
|
||||||
if (err) {
|
if (err) {
|
||||||
rdev->scan_req = NULL;
|
rdev->scan_req = NULL;
|
||||||
/* creq will be freed below */
|
/* creq will be freed below */
|
||||||
} else {
|
} else {
|
||||||
nl80211_send_scan_start(rdev, dev);
|
nl80211_send_scan_start(rdev, dev->ieee80211_ptr);
|
||||||
/* creq now owned by driver */
|
/* creq now owned by driver */
|
||||||
creq = NULL;
|
creq = NULL;
|
||||||
dev_hold(dev);
|
dev_hold(dev);
|
||||||
|
|
|
@ -136,15 +136,15 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
||||||
wdev->conn->params.ssid_len);
|
wdev->conn->params.ssid_len);
|
||||||
request->ssids[0].ssid_len = wdev->conn->params.ssid_len;
|
request->ssids[0].ssid_len = wdev->conn->params.ssid_len;
|
||||||
|
|
||||||
request->dev = wdev->netdev;
|
request->wdev = wdev;
|
||||||
request->wiphy = &rdev->wiphy;
|
request->wiphy = &rdev->wiphy;
|
||||||
|
|
||||||
rdev->scan_req = request;
|
rdev->scan_req = request;
|
||||||
|
|
||||||
err = rdev->ops->scan(wdev->wiphy, wdev->netdev, request);
|
err = rdev->ops->scan(wdev->wiphy, request);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
wdev->conn->state = CFG80211_CONN_SCANNING;
|
wdev->conn->state = CFG80211_CONN_SCANNING;
|
||||||
nl80211_send_scan_start(rdev, wdev->netdev);
|
nl80211_send_scan_start(rdev, wdev);
|
||||||
dev_hold(wdev->netdev);
|
dev_hold(wdev->netdev);
|
||||||
} else {
|
} else {
|
||||||
rdev->scan_req = NULL;
|
rdev->scan_req = NULL;
|
||||||
|
|
Loading…
Reference in New Issue