-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 134180 b: refs/heads/master c: 665af4f h: refs/heads/master v: v3
- Loading branch information
Bob Copeland
authored and
John W. Linville
committed
Jan 29, 2009
1 parent
ae84277
commit b8239f8
Showing
5 changed files
with
138 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 0378b3f1c49d48ed524eabda7e4340163d9483c9 | ||
refs/heads/master: 665af4fc8979734d8f73c9a6732be07e545ce4cc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#include <net/mac80211.h> | ||
#include <net/rtnetlink.h> | ||
|
||
#include "ieee80211_i.h" | ||
#include "led.h" | ||
|
||
int __ieee80211_suspend(struct ieee80211_hw *hw) | ||
{ | ||
struct ieee80211_local *local = hw_to_local(hw); | ||
struct ieee80211_sub_if_data *sdata; | ||
struct ieee80211_if_init_conf conf; | ||
struct sta_info *sta; | ||
|
||
flush_workqueue(local->hw.workqueue); | ||
|
||
/* disable keys */ | ||
list_for_each_entry(sdata, &local->interfaces, list) | ||
ieee80211_disable_keys(sdata); | ||
|
||
/* remove STAs */ | ||
list_for_each_entry(sta, &local->sta_list, list) { | ||
|
||
if (local->ops->sta_notify) { | ||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
sdata = container_of(sdata->bss, | ||
struct ieee80211_sub_if_data, | ||
u.ap); | ||
|
||
local->ops->sta_notify(hw, &sdata->vif, | ||
STA_NOTIFY_REMOVE, &sta->sta); | ||
} | ||
} | ||
|
||
/* remove all interfaces */ | ||
list_for_each_entry(sdata, &local->interfaces, list) { | ||
|
||
if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && | ||
sdata->vif.type != NL80211_IFTYPE_MONITOR && | ||
netif_running(sdata->dev)) { | ||
conf.vif = &sdata->vif; | ||
conf.type = sdata->vif.type; | ||
conf.mac_addr = sdata->dev->dev_addr; | ||
local->ops->remove_interface(hw, &conf); | ||
} | ||
} | ||
|
||
/* stop hardware */ | ||
if (local->open_count) { | ||
ieee80211_led_radio(local, false); | ||
local->ops->stop(hw); | ||
} | ||
return 0; | ||
} | ||
|
||
int __ieee80211_resume(struct ieee80211_hw *hw) | ||
{ | ||
struct ieee80211_local *local = hw_to_local(hw); | ||
struct ieee80211_sub_if_data *sdata; | ||
struct ieee80211_if_init_conf conf; | ||
struct sta_info *sta; | ||
int res; | ||
|
||
/* restart hardware */ | ||
if (local->open_count) { | ||
res = local->ops->start(hw); | ||
|
||
ieee80211_led_radio(local, hw->conf.radio_enabled); | ||
} | ||
|
||
/* add interfaces */ | ||
list_for_each_entry(sdata, &local->interfaces, list) { | ||
|
||
if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && | ||
sdata->vif.type != NL80211_IFTYPE_MONITOR && | ||
netif_running(sdata->dev)) { | ||
conf.vif = &sdata->vif; | ||
conf.type = sdata->vif.type; | ||
conf.mac_addr = sdata->dev->dev_addr; | ||
res = local->ops->add_interface(hw, &conf); | ||
} | ||
} | ||
|
||
/* add STAs back */ | ||
list_for_each_entry(sta, &local->sta_list, list) { | ||
|
||
if (local->ops->sta_notify) { | ||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
sdata = container_of(sdata->bss, | ||
struct ieee80211_sub_if_data, | ||
u.ap); | ||
|
||
local->ops->sta_notify(hw, &sdata->vif, | ||
STA_NOTIFY_ADD, &sta->sta); | ||
} | ||
} | ||
|
||
/* add back keys */ | ||
list_for_each_entry(sdata, &local->interfaces, list) | ||
if (netif_running(sdata->dev)) | ||
ieee80211_enable_keys(sdata); | ||
|
||
/* setup RTS threshold */ | ||
if (local->ops->set_rts_threshold) | ||
local->ops->set_rts_threshold(hw, local->rts_threshold); | ||
|
||
/* reconfigure hardware */ | ||
ieee80211_hw_config(local, ~0); | ||
|
||
netif_addr_lock_bh(local->mdev); | ||
ieee80211_configure_filter(local); | ||
netif_addr_unlock_bh(local->mdev); | ||
|
||
return 0; | ||
} |