cfg80211: add rfkill support
To be easier on drivers and users, have cfg80211 register an rfkill structure that drivers can access. When soft-killed, simply take down all interfaces; when hard-killed the driver needs to notify us and we will take down the interfaces after the fact. While rfkilled, interfaces cannot be set UP. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
6081162e2e
commit
1f87f7d3a3
@@ -1340,7 +1340,6 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
struct ieee80211_channel *chan = local->hw.conf.channel;
|
||||
u32 changes = 0;
|
||||
bool radio_enabled = true;
|
||||
|
||||
switch (type) {
|
||||
case TX_POWER_AUTOMATIC:
|
||||
@@ -1359,14 +1358,6 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
|
||||
return -EINVAL;
|
||||
local->user_power_level = dbm;
|
||||
break;
|
||||
case TX_POWER_OFF:
|
||||
radio_enabled = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (radio_enabled != local->hw.conf.radio_enabled) {
|
||||
changes |= IEEE80211_CONF_CHANGE_RADIO_ENABLED;
|
||||
local->hw.conf.radio_enabled = radio_enabled;
|
||||
}
|
||||
|
||||
ieee80211_hw_config(local, changes);
|
||||
@@ -1380,12 +1371,16 @@ static int ieee80211_get_tx_power(struct wiphy *wiphy, int *dbm)
|
||||
|
||||
*dbm = local->hw.conf.power_level;
|
||||
|
||||
if (!local->hw.conf.radio_enabled)
|
||||
return -ENETDOWN;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ieee80211_rfkill_poll(struct wiphy *wiphy)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
|
||||
drv_rfkill_poll(local);
|
||||
}
|
||||
|
||||
struct cfg80211_ops mac80211_config_ops = {
|
||||
.add_virtual_intf = ieee80211_add_iface,
|
||||
.del_virtual_intf = ieee80211_del_iface,
|
||||
@@ -1427,4 +1422,5 @@ struct cfg80211_ops mac80211_config_ops = {
|
||||
.set_wiphy_params = ieee80211_set_wiphy_params,
|
||||
.set_tx_power = ieee80211_set_tx_power,
|
||||
.get_tx_power = ieee80211_get_tx_power,
|
||||
.rfkill_poll = ieee80211_rfkill_poll,
|
||||
};
|
||||
|
Reference in New Issue
Block a user