Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 315536
b: refs/heads/master
c: fd01428
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg committed Jul 12, 2012
1 parent 0db0a77 commit 0cc0483
Show file tree
Hide file tree
Showing 15 changed files with 58 additions and 48 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1c90f9d404a45a1677c1e5791f5a2a8aaee0370a
refs/heads/master: fd0142844efa85d89017c89227a0f03de1eee327
6 changes: 3 additions & 3 deletions trunk/drivers/net/wireless/ath/ath6kl/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -966,11 +966,11 @@ static int ath6kl_set_probed_ssids(struct ath6kl *ar,
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 ath6kl *ar = ath6kl_priv(ndev);
struct ath6kl_vif *vif = netdev_priv(ndev);
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(request->wdev);
struct ath6kl *ar = ath6kl_priv(vif->ndev);
s8 n_channels = 0;
u16 *channels = NULL;
int ret = 0;
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -691,9 +691,10 @@ __brcmf_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
}

static s32
brcmf_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
brcmf_cfg80211_scan(struct wiphy *wiphy,
struct cfg80211_scan_request *request)
{
struct net_device *ndev = request->wdev->netdev;
s32 err = 0;

WL_TRACE("Enter\n");
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/net/wireless/iwmc3200wifi/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -353,9 +353,10 @@ static int iwm_cfg80211_change_iface(struct wiphy *wiphy,
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 net_device *ndev = request->wdev->netdev;
struct iwm_priv *iwm = ndev_to_iwm(ndev);
int ret;

Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/net/wireless/libertas/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -805,7 +805,6 @@ void lbs_scan_done(struct lbs_private *priv)
}

static int lbs_cfg_scan(struct wiphy *wiphy,
struct net_device *dev,
struct cfg80211_scan_request *request)
{
struct lbs_private *priv = wiphy_priv(wiphy);
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/net/wireless/mwifiex/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -1376,9 +1376,10 @@ mwifiex_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
* it also informs the results.
*/
static int
mwifiex_cfg80211_scan(struct wiphy *wiphy, struct net_device *dev,
mwifiex_cfg80211_scan(struct wiphy *wiphy,
struct cfg80211_scan_request *request)
{
struct net_device *dev = request->wdev->netdev;
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
int i;
struct ieee80211_channel *chan;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/wireless/orinoco/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ static int orinoco_change_vif(struct wiphy *wiphy, struct net_device *dev,
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 orinoco_private *priv = wiphy_priv(wiphy);
Expand Down
5 changes: 3 additions & 2 deletions trunk/drivers/net/wireless/rndis_wlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,7 @@ static int rndis_change_virtual_intf(struct wiphy *wiphy,
enum nl80211_iftype type, u32 *flags,
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);

static int rndis_set_wiphy_params(struct wiphy *wiphy, u32 changed);
Expand Down Expand Up @@ -1941,9 +1941,10 @@ static int rndis_get_tx_power(struct wiphy *wiphy, int *dbm)
}

#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 net_device *dev = request->wdev->netdev;
struct usbnet *usbdev = netdev_priv(dev);
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
int ret;
Expand Down
7 changes: 4 additions & 3 deletions trunk/include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -999,7 +999,7 @@ struct cfg80211_ssid {
* @ie_len: length of ie in octets
* @rates: bitmap of rates to advertise for each band
* @wiphy: the wiphy this was for
* @dev: the interface
* @wdev: the wireless device to scan for
* @aborted: (internal) scan request was notified as aborted
* @no_cck: used to send probe requests at non CCK rate in 2GHz band
*/
Expand All @@ -1012,9 +1012,10 @@ struct cfg80211_scan_request {

u32 rates[IEEE80211_NUM_BANDS];

struct wireless_dev *wdev;

/* internal */
struct wiphy *wiphy;
struct net_device *dev;
bool aborted;
bool no_cck;

Expand Down Expand Up @@ -1700,7 +1701,7 @@ struct cfg80211_ops {
struct ieee80211_channel *chan,
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);

int (*auth)(struct wiphy *wiphy, struct net_device *dev,
Expand Down
5 changes: 3 additions & 2 deletions trunk/net/mac80211/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1763,10 +1763,11 @@ static int ieee80211_resume(struct wiphy *wiphy)
#endif

static int ieee80211_scan(struct wiphy *wiphy,
struct net_device *dev,
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)) {
case NL80211_IFTYPE_STATION:
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/wireless/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -708,7 +708,7 @@ static void wdev_cleanup_work(struct work_struct *work)

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;
___cfg80211_scan_done(rdev, true);
}
Expand Down
31 changes: 17 additions & 14 deletions trunk/net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
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 nlattr *attr;
struct wiphy *wiphy;
Expand Down Expand Up @@ -4290,15 +4290,16 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
request->no_cck =
nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);

request->dev = dev;
request->wdev = wdev;
request->wiphy = &rdev->wiphy;

rdev->scan_req = request;
err = rdev->ops->scan(&rdev->wiphy, dev, request);
err = rdev->ops->scan(&rdev->wiphy, request);

if (!err) {
nl80211_send_scan_start(rdev, dev);
dev_hold(dev);
nl80211_send_scan_start(rdev, wdev);
if (wdev->netdev)
dev_hold(wdev->netdev);
} else {
out_free:
rdev->scan_req = NULL;
Expand Down Expand Up @@ -7066,7 +7067,7 @@ static struct genl_ops nl80211_ops[] = {
.doit = nl80211_trigger_scan,
.policy = nl80211_policy,
.flags = GENL_ADMIN_PERM,
.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
.internal_flags = NL80211_FLAG_NEED_WDEV_UP |
NL80211_FLAG_NEED_RTNL,
},
{
Expand Down Expand Up @@ -7458,7 +7459,7 @@ static int nl80211_add_scan_req(struct sk_buff *msg,

static int nl80211_send_scan_msg(struct sk_buff *msg,
struct cfg80211_registered_device *rdev,
struct net_device *netdev,
struct wireless_dev *wdev,
u32 pid, u32 seq, int flags,
u32 cmd)
{
Expand All @@ -7469,7 +7470,9 @@ static int nl80211_send_scan_msg(struct sk_buff *msg,
return -1;

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;

/* ignore errors and send incomplete event anyway */
Expand Down Expand Up @@ -7506,15 +7509,15 @@ nl80211_send_sched_scan_msg(struct sk_buff *msg,
}

void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
struct net_device *netdev)
struct wireless_dev *wdev)
{
struct sk_buff *msg;

msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
if (!msg)
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) {
nlmsg_free(msg);
return;
Expand All @@ -7525,15 +7528,15 @@ void nl80211_send_scan_start(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;

msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
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) {
nlmsg_free(msg);
return;
Expand All @@ -7544,15 +7547,15 @@ void nl80211_send_scan_done(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;

msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
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) {
nlmsg_free(msg);
return;
Expand Down
6 changes: 3 additions & 3 deletions trunk/net/wireless/nl80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ int nl80211_init(void);
void nl80211_exit(void);
void nl80211_notify_dev_rename(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,
struct net_device *netdev);
struct wireless_dev *wdev);
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,
struct net_device *netdev, u32 cmd);
void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev,
Expand Down
24 changes: 13 additions & 11 deletions trunk/net/wireless/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak)
{
struct cfg80211_scan_request *request;
struct net_device *dev;
struct wireless_dev *wdev;
#ifdef CONFIG_CFG80211_WEXT
union iwreq_data wrqu;
#endif
Expand All @@ -35,29 +35,31 @@ void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak)
if (!request)
return;

dev = request->dev;
wdev = request->wdev;

/*
* This must be before sending the other events!
* Otherwise, wpa_supplicant gets completely confused with
* wext events.
*/
cfg80211_sme_scan_done(dev);
if (wdev->netdev)
cfg80211_sme_scan_done(wdev->netdev);

if (request->aborted)
nl80211_send_scan_aborted(rdev, dev);
nl80211_send_scan_aborted(rdev, wdev);
else
nl80211_send_scan_done(rdev, dev);
nl80211_send_scan_done(rdev, wdev);

#ifdef CONFIG_CFG80211_WEXT
if (!request->aborted) {
if (wdev->netdev && !request->aborted) {
memset(&wrqu, 0, sizeof(wrqu));

wireless_send_event(dev, SIOCGIWSCAN, &wrqu, NULL);
wireless_send_event(wdev->netdev, SIOCGIWSCAN, &wrqu, NULL);
}
#endif

dev_put(dev);
if (wdev->netdev)
dev_put(wdev->netdev);

rdev->scan_req = NULL;

Expand Down Expand Up @@ -955,7 +957,7 @@ int cfg80211_wext_siwscan(struct net_device *dev,
}

creq->wiphy = wiphy;
creq->dev = dev;
creq->wdev = dev->ieee80211_ptr;
/* SSIDs come after channels */
creq->ssids = (void *)&creq->channels[n_channels];
creq->n_channels = n_channels;
Expand Down Expand Up @@ -1024,12 +1026,12 @@ int cfg80211_wext_siwscan(struct net_device *dev,
creq->rates[i] = (1 << wiphy->bands[i]->n_bitrates) - 1;

rdev->scan_req = creq;
err = rdev->ops->scan(wiphy, dev, creq);
err = rdev->ops->scan(wiphy, creq);
if (err) {
rdev->scan_req = NULL;
/* creq will be freed below */
} else {
nl80211_send_scan_start(rdev, dev);
nl80211_send_scan_start(rdev, dev->ieee80211_ptr);
/* creq now owned by driver */
creq = NULL;
dev_hold(dev);
Expand Down
6 changes: 3 additions & 3 deletions trunk/net/wireless/sme.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,15 +136,15 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
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;

rdev->scan_req = request;

err = rdev->ops->scan(wdev->wiphy, wdev->netdev, request);
err = rdev->ops->scan(wdev->wiphy, request);
if (!err) {
wdev->conn->state = CFG80211_CONN_SCANNING;
nl80211_send_scan_start(rdev, wdev->netdev);
nl80211_send_scan_start(rdev, wdev);
dev_hold(wdev->netdev);
} else {
rdev->scan_req = NULL;
Expand Down

0 comments on commit 0cc0483

Please sign in to comment.