Skip to content

Commit

Permalink
cfg80211: pass a channel definition struct
Browse files Browse the repository at this point in the history
Instead of passing a channel pointer and channel type
to all functions and driver methods, pass a new channel
definition struct. Right now, this struct contains just
the control channel and channel type, but for VHT this
will change.

Also, add a small inline cfg80211_get_chandef_type() so
that drivers don't need to use the _type field of the
new structure all the time, which will change.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Johannes Berg committed Nov 26, 2012
1 parent fe4b318 commit 683b6d3
Show file tree
Hide file tree
Showing 20 changed files with 403 additions and 402 deletions.
22 changes: 14 additions & 8 deletions drivers/net/wireless/ath/ath6kl/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -1093,15 +1093,20 @@ void ath6kl_cfg80211_scan_complete_event(struct ath6kl_vif *vif, bool aborted)
void ath6kl_cfg80211_ch_switch_notify(struct ath6kl_vif *vif, int freq,
enum wmi_phy_mode mode)
{
enum nl80211_channel_type type;
struct cfg80211_chan_def chandef;

ath6kl_dbg(ATH6KL_DBG_WLAN_CFG,
"channel switch notify nw_type %d freq %d mode %d\n",
vif->nw_type, freq, mode);

type = (mode == WMI_11G_HT20) ? NL80211_CHAN_HT20 : NL80211_CHAN_NO_HT;
chandef.chan = ieee80211_get_channel(vif->ar->wiphy, freq);
if (WARN_ON(!chandef.chan))
return;

chandef._type = (mode == WMI_11G_HT20) ?
NL80211_CHAN_HT20 : NL80211_CHAN_NO_HT;

cfg80211_ch_switch_notify(vif->ndev, freq, type);
cfg80211_ch_switch_notify(vif->ndev, &chandef);
}

static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
Expand Down Expand Up @@ -1613,8 +1618,8 @@ static int ath6kl_cfg80211_join_ibss(struct wiphy *wiphy,
vif->ssid_len = ibss_param->ssid_len;
memcpy(vif->ssid, ibss_param->ssid, vif->ssid_len);

if (ibss_param->channel)
vif->ch_hint = ibss_param->channel->center_freq;
if (ibss_param->chandef.chan)
vif->ch_hint = ibss_param->chandef.chan->center_freq;

if (ibss_param->channel_fixed) {
/*
Expand Down Expand Up @@ -2856,7 +2861,7 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
p.ssid_len = vif->ssid_len;
memcpy(p.ssid, vif->ssid, vif->ssid_len);
p.dot11_auth_mode = vif->dot11_auth_mode;
p.ch = cpu_to_le16(info->channel->center_freq);
p.ch = cpu_to_le16(info->chandef.chan->center_freq);

/* Enable uAPSD support by default */
res = ath6kl_wmi_ap_set_apsd(ar->wmi, vif->fw_vif_idx, true);
Expand All @@ -2880,8 +2885,9 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
return res;
}

if (ath6kl_set_htcap(vif, info->channel->band,
info->channel_type != NL80211_CHAN_NO_HT))
if (ath6kl_set_htcap(vif, info->chandef.chan->band,
cfg80211_get_chandef_type(&info->chandef)
!= NL80211_CHAN_NO_HT))
return -EIO;

/*
Expand Down
11 changes: 6 additions & 5 deletions drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -1212,8 +1212,8 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
else
WL_CONN("No BSSID specified\n");

if (params->channel)
WL_CONN("channel: %d\n", params->channel->center_freq);
if (params->chandef.chan)
WL_CONN("channel: %d\n", params->chandef.chan->center_freq);
else
WL_CONN("no channel specified\n");

Expand Down Expand Up @@ -1286,12 +1286,12 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
}

/* Channel */
if (params->channel) {
if (params->chandef.chan) {
u32 target_channel;

cfg->channel =
ieee80211_frequency_to_channel(
params->channel->center_freq);
params->chandef.chan->center_freq);
if (params->channel_fixed) {
/* adding chanspec */
brcmf_ch_to_chanspec(cfg->channel,
Expand Down Expand Up @@ -3938,7 +3938,8 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
s32 bssidx = 0;

WL_TRACE("channel_type=%d, beacon_interval=%d, dtim_period=%d,\n",
settings->channel_type, settings->beacon_interval,
cfg80211_get_chandef_type(&settings->chandef),
settings->beacon_interval,
settings->dtim_period);
WL_TRACE("ssid=%s(%d), auth_type=%d, inactivity_timeout=%d\n",
settings->ssid, settings->ssid_len, settings->auth_type,
Expand Down
24 changes: 12 additions & 12 deletions drivers/net/wireless/libertas/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -436,19 +436,19 @@ static int lbs_add_wpa_tlv(u8 *tlv, const u8 *ie, u8 ie_len)
*/

static int lbs_cfg_set_monitor_channel(struct wiphy *wiphy,
struct ieee80211_channel *channel,
enum nl80211_channel_type channel_type)
struct cfg80211_chan_def *chandef)
{
struct lbs_private *priv = wiphy_priv(wiphy);
int ret = -ENOTSUPP;

lbs_deb_enter_args(LBS_DEB_CFG80211, "freq %d, type %d",
channel->center_freq, channel_type);
chandef->chan->center_freq,
cfg80211_get_chandef_type(chandef));

if (channel_type != NL80211_CHAN_NO_HT)
if (cfg80211_get_chandef_type(chandef) != NL80211_CHAN_NO_HT)
goto out;

ret = lbs_set_channel(priv, channel->hw_value);
ret = lbs_set_channel(priv, chandef->chan->hw_value);

out:
lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
Expand Down Expand Up @@ -1734,7 +1734,7 @@ static void lbs_join_post(struct lbs_private *priv,
/* Fake DS channel IE */
*fake++ = WLAN_EID_DS_PARAMS;
*fake++ = 1;
*fake++ = params->channel->hw_value;
*fake++ = params->chandef.chan->hw_value;
/* Fake IBSS params IE */
*fake++ = WLAN_EID_IBSS_PARAMS;
*fake++ = 2;
Expand All @@ -1755,7 +1755,7 @@ static void lbs_join_post(struct lbs_private *priv,
lbs_deb_hex(LBS_DEB_CFG80211, "IE", fake_ie, fake - fake_ie);

bss = cfg80211_inform_bss(priv->wdev->wiphy,
params->channel,
params->chandef.chan,
bssid,
0,
capability,
Expand Down Expand Up @@ -1833,7 +1833,7 @@ static int lbs_ibss_join_existing(struct lbs_private *priv,
cmd.bss.beaconperiod = cpu_to_le16(params->beacon_interval);
cmd.bss.ds.header.id = WLAN_EID_DS_PARAMS;
cmd.bss.ds.header.len = 1;
cmd.bss.ds.channel = params->channel->hw_value;
cmd.bss.ds.channel = params->chandef.chan->hw_value;
cmd.bss.ibss.header.id = WLAN_EID_IBSS_PARAMS;
cmd.bss.ibss.header.len = 2;
cmd.bss.ibss.atimwindow = 0;
Expand Down Expand Up @@ -1942,7 +1942,7 @@ static int lbs_ibss_start_new(struct lbs_private *priv,
cmd.ibss.atimwindow = 0;
cmd.ds.header.id = WLAN_EID_DS_PARAMS;
cmd.ds.header.len = 1;
cmd.ds.channel = params->channel->hw_value;
cmd.ds.channel = params->chandef.chan->hw_value;
/* Only v8 and below support setting probe delay */
if (MRVL_FW_MAJOR_REV(priv->fwrelease) <= 8)
cmd.probedelay = cpu_to_le16(CMD_SCAN_PROBE_DELAY_TIME);
Expand Down Expand Up @@ -1987,18 +1987,18 @@ static int lbs_join_ibss(struct wiphy *wiphy, struct net_device *dev,

lbs_deb_enter(LBS_DEB_CFG80211);

if (!params->channel) {
if (!params->chandef.chan) {
ret = -ENOTSUPP;
goto out;
}

ret = lbs_set_channel(priv, params->channel->hw_value);
ret = lbs_set_channel(priv, params->chandef.chan->hw_value);
if (ret)
goto out;

/* Search if someone is beaconing. This assumes that the
* bss list is populated already */
bss = cfg80211_get_bss(wiphy, params->channel, params->bssid,
bss = cfg80211_get_bss(wiphy, params->chandef.chan, params->bssid,
params->ssid, params->ssid_len,
WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS);

Expand Down
30 changes: 18 additions & 12 deletions drivers/net/wireless/mwifiex/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -1291,21 +1291,23 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
return -EINVAL;
}

bss_cfg->channel =
(u8)ieee80211_frequency_to_channel(params->channel->center_freq);
bss_cfg->channel = ieee80211_frequency_to_channel(
params->chandef.chan->center_freq);

/* Set appropriate bands */
if (params->channel->band == IEEE80211_BAND_2GHZ) {
if (params->chandef.chan->band == IEEE80211_BAND_2GHZ) {
bss_cfg->band_cfg = BAND_CONFIG_BG;

if (params->channel_type == NL80211_CHAN_NO_HT)
if (cfg80211_get_chandef_type(&params->chandef) ==
NL80211_CHAN_NO_HT)
config_bands = BAND_B | BAND_G;
else
config_bands = BAND_B | BAND_G | BAND_GN;
} else {
bss_cfg->band_cfg = BAND_CONFIG_A;

if (params->channel_type == NL80211_CHAN_NO_HT)
if (cfg80211_get_chandef_type(&params->chandef) ==
NL80211_CHAN_NO_HT)
config_bands = BAND_A;
else
config_bands = BAND_AN | BAND_A;
Expand Down Expand Up @@ -1678,7 +1680,7 @@ static int mwifiex_set_ibss_params(struct mwifiex_private *priv,
int index = 0, i;
u8 config_bands = 0;

if (params->channel->band == IEEE80211_BAND_2GHZ) {
if (params->chandef.chan->band == IEEE80211_BAND_2GHZ) {
if (!params->basic_rates) {
config_bands = BAND_B | BAND_G;
} else {
Expand All @@ -1703,10 +1705,12 @@ static int mwifiex_set_ibss_params(struct mwifiex_private *priv,
}
}

if (params->channel_type != NL80211_CHAN_NO_HT)
if (cfg80211_get_chandef_type(&params->chandef) !=
NL80211_CHAN_NO_HT)
config_bands |= BAND_GN;
} else {
if (params->channel_type == NL80211_CHAN_NO_HT)
if (cfg80211_get_chandef_type(&params->chandef) !=
NL80211_CHAN_NO_HT)
config_bands = BAND_A;
else
config_bands = BAND_AN | BAND_A;
Expand All @@ -1723,9 +1727,10 @@ static int mwifiex_set_ibss_params(struct mwifiex_private *priv,
}

adapter->sec_chan_offset =
mwifiex_chan_type_to_sec_chan_offset(params->channel_type);
priv->adhoc_channel =
ieee80211_frequency_to_channel(params->channel->center_freq);
mwifiex_chan_type_to_sec_chan_offset(
cfg80211_get_chandef_type(&params->chandef));
priv->adhoc_channel = ieee80211_frequency_to_channel(
params->chandef.chan->center_freq);

wiphy_dbg(wiphy, "info: set ibss band %d, chan %d, chan offset %d\n",
config_bands, priv->adhoc_channel, adapter->sec_chan_offset);
Expand Down Expand Up @@ -1759,7 +1764,8 @@ mwifiex_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,

ret = mwifiex_cfg80211_assoc(priv, params->ssid_len, params->ssid,
params->bssid, priv->bss_mode,
params->channel, NULL, params->privacy);
params->chandef.chan, NULL,
params->privacy);
done:
if (!ret) {
cfg80211_ibss_joined(priv->netdev, priv->cfg_bssid, GFP_KERNEL);
Expand Down
11 changes: 5 additions & 6 deletions drivers/net/wireless/orinoco/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,24 +161,23 @@ static int orinoco_scan(struct wiphy *wiphy,
}

static int orinoco_set_monitor_channel(struct wiphy *wiphy,
struct ieee80211_channel *chan,
enum nl80211_channel_type channel_type)
struct cfg80211_chan_def *chandef)
{
struct orinoco_private *priv = wiphy_priv(wiphy);
int err = 0;
unsigned long flags;
int channel;

if (!chan)
if (!chandef->chan)
return -EINVAL;

if (channel_type != NL80211_CHAN_NO_HT)
if (cfg80211_get_chandef_type(chandef) != NL80211_CHAN_NO_HT)
return -EINVAL;

if (chan->band != IEEE80211_BAND_2GHZ)
if (chandef->chan->band != IEEE80211_BAND_2GHZ)
return -EINVAL;

channel = ieee80211_freq_to_dsss_chan(chan->center_freq);
channel = ieee80211_freq_to_dsss_chan(chandef->chan->center_freq);

if ((channel < 1) || (channel > NUM_CHANNELS) ||
!(priv->channel_mask & (1 << (channel - 1))))
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/rndis_wlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -2293,7 +2293,7 @@ static int rndis_join_ibss(struct wiphy *wiphy, struct net_device *dev,
{
struct rndis_wlan_private *priv = wiphy_priv(wiphy);
struct usbnet *usbdev = priv->usbdev;
struct ieee80211_channel *channel = params->channel;
struct ieee80211_channel *channel = params->chandef.chan;
struct ndis_80211_ssid ssid;
enum nl80211_auth_type auth_type;
int ret, alg, length, chan = -1;
Expand Down
Loading

0 comments on commit 683b6d3

Please sign in to comment.