Johannes Berg
5cff20e6c5
mac80211: tell driver when idle
...
When we aren't doing anything in mac80211, we can turn off
much of the hardware, depending on the driver/hw. Not doing
anything, aka being idle, means:
* no monitor interfaces
* no AP/mesh/wds interfaces
* any station interfaces are in DISABLED state
* any IBSS interfaces aren't trying to be in a network
* we aren't trying to scan
By creating a new function that verifies these conditions and calling
it at strategic points where the states of those conditions change,
we can easily make mac80211 tell the driver when we are idle to save
power.
Additionally, this fixes a small quirk where a recalculated powersave
state is passed to the driver even if the hardware is about to stopped
completely.
This patch intentionally doesn't touch radio_enabled because that is
currently implemented to be a soft rfkill which is inappropriate here
when we need to be able to wake up with low latency.
One thing I'm not entirely sure about is this:
phy0: device no longer idle - in use
wlan0: direct probe to AP 00:11:24:91:07:4d try 1
wlan0 direct probe responded
wlan0: authenticate with AP 00:11:24:91:07:4d
wlan0: authenticated
> phy0: device now idle
> phy0: device no longer idle - in use
wlan0: associate with AP 00:11:24:91:07:4d
wlan0: RX AssocResp from 00:11:24:91:07:4d (capab=0x401 status=0 aid=1)
wlan0: associated
Is it appropriate to go into idle state for a short time when we have
just authenticated, but not associated yet? This happens only with the
userspace SME, because we cannot really know how long it will wait
before asking us to associate. Would going idle after a short timeout
be more appropriate? We may need to revisit this, depending on what
happens.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2009-05-06 15:14:51 -04:00
..
9p
9p: fix sparse warnings
2008-10-22 18:54:47 -05:00
bluetooth
Bluetooth: Add different pairing timeout for Legacy Pairing
2009-04-28 09:31:38 -07:00
irda
irda: Add irda_skb_cb qdisc related padding
2008-12-17 15:44:58 -08:00
iucv
af_iucv: New socket option for setting IUCV MSGLIMITs
2009-04-23 04:04:38 -07:00
netfilter
netfilter: nf_nat: add support for persistent mappings
2009-04-16 18:33:01 +02:00
netns
netfilter: nf_conntrack: use SLAB_DESTROY_BY_RCU and get rid of call_rcu()
2009-03-25 21:05:46 +01:00
phonet
Phonet: use per-namespace devices list
2009-01-26 21:03:35 -08:00
sctp
sctp: Clean up TEST_FRAME hacks.
2009-03-21 13:41:09 -07:00
tc_act
pkt_action: add new action skbedit
2008-09-12 16:30:20 -07:00
tipc
act_api.h
addrconf.h
ipv6: Fix conflict resolutions during ipv6 binding
2009-03-24 19:49:11 -07:00
af_rxrpc.h
af_unix.h
net: Fix soft lockups/OOM issues w/ unix garbage collector
2008-11-26 15:32:27 -08:00
ah.h
arp.h
atmclip.h
clip: convert to internal network_device_stats
2009-01-21 14:01:59 -08:00
ax25.h
ax88796.h
ax88796: Add method to take MAC from platform data
2009-03-24 23:32:03 -07:00
cfg80211.h
nl80211: Add event for authentication/association timeout
2009-04-22 16:57:21 -04:00
checksum.h
include/net net/ - csum_partial - remove unnecessary casts
2008-11-19 15:44:53 -08:00
cipso_ipv4.h
netlabel: Label incoming TCP connections correctly in SELinux
2009-03-28 15:01:36 +11:00
compat.h
datalink.h
dcbnl.h
net: fix DCB setstate to return success/failure
2008-12-21 20:09:50 -08:00
dn.h
decnet: compile fix for removal of byteorder wrapper
2008-11-27 23:04:13 -08:00
dn_dev.h
dn_fib.h
decnet: remove private wrappers of endian helpers
2008-11-27 00:12:47 -08:00
dn_neigh.h
dn_nsp.h
dn_route.h
dsa.h
dsa: add switch chip cascading support
2009-03-21 19:06:54 -07:00
dsfield.h
dst.h
netns xfrm: lookup in netns
2008-11-25 17:35:18 -08:00
esp.h
ethoc.h
net: Add support for the OpenCores 10/100 Mbps Ethernet MAC.
2009-03-27 00:16:21 -07:00
fib_rules.h
flow.h
netns xfrm: lookup in netns
2008-11-25 17:35:18 -08:00
garp.h
gen_stats.h
pkt_sched: gen_estimator: Optimize gen_estimator_active()
2008-11-26 15:24:32 -08:00
genetlink.h
icmp.h
ieee80211_radiotap.h
wireless: radiotap updates
2009-03-27 20:12:52 -04:00
if_inet6.h
ipv6: reorder struct inet6_ifaddr to remove padding on 64 bit builds
2009-03-21 13:29:05 -07:00
inet6_connection_sock.h
inet6_hashtables.h
inet: Don't lookup the socket if there's a socket attached to the skb
2008-10-07 12:41:01 -07:00
inet_common.h
inet_connection_sock.h
net: more #ifdef CONFIG_COMPAT
2008-08-28 02:53:51 -07:00
inet_ecn.h
net: replace __constant_{endian} uses in net headers
2009-02-14 22:58:35 -08:00
inet_frag.h
inet fragments: fix sparse warning: context imbalance
2009-02-26 23:13:35 -08:00
inet_hashtables.h
net: move bsockets outside of read only beginning of struct inet_hashinfo
2009-02-01 12:31:33 -08:00
inet_sock.h
tcp: Port redirection support for TCP
2008-10-01 07:46:49 -07:00
inet_timewait_sock.h
net: Convert TCP & DCCP hash tables to use RCU / hlist_nulls
2008-11-16 19:40:17 -08:00
inetpeer.h
ip.h
snmp: add missing counters for RFC 4293
2009-04-27 02:45:02 -07:00
ip6_checksum.h
ip6_fib.h
ip6_route.h
netns: Add network namespace argument to rt6_fill_node() and ipv6_dev_get_saddr()
2008-08-14 15:33:21 -07:00
ip6_tunnel.h
ip_fib.h
ipv4: remove unused macro (FIB_RES_RESET) from ip_fib.h.
2009-05-03 14:19:51 -07:00
ip_vs.h
net: replace __constant_{endian} uses in net headers
2009-02-14 22:58:35 -08:00
ipcomp.h
ipconfig.h
ipip.h
inet: Make tunnel RX/TX byte counters more consistent
2008-10-09 12:03:17 -07:00
ipv6.h
snmp: add missing counters for RFC 4293
2009-04-27 02:45:02 -07:00
ipx.h
net: replace __constant_{endian} uses in net headers
2009-02-14 22:58:35 -08:00
iw_handler.h
lapb.h
lib80211.h
wireless: missing include in lib80211.h
2008-11-21 11:42:55 -05:00
llc.h
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
llc_if.h
llc_pdu.h
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
mac80211.h
mac80211: tell driver when idle
2009-05-06 15:14:51 -04:00
mip6.h
ndisc.h
ipv6: Fix sporadic sendmsg -EINVAL when sending to multicast groups.
2009-01-04 16:04:39 -08:00
neighbour.h
net: Cleanup of neighbour code
2008-11-12 00:54:54 -08:00
net_namespace.h
netns: Remove net_alive
2009-03-03 01:14:27 -08:00
netdma.h
net_dma: convert to dma_find_channel
2009-01-06 11:38:15 -07:00
netevent.h
netlabel.h
netlabel: Cleanup the Smack/NetLabel code to fix incoming TCP connections
2009-03-28 15:01:37 +11:00
netlink.h
netlink: add nla_policy_len()
2009-03-25 18:26:30 +01:00
netrom.h
netrom: convert to internal net_device_stats
2009-01-21 14:02:01 -08:00
nexthop.h
p8022.h
pkt_cls.h
ematch: simpler tcf_em_unregister()
2008-11-16 23:01:49 -08:00
pkt_sched.h
pkt_sched: sch_hfsc: sch_htb: Add non-work-conserving warning handler.
2009-02-01 01:12:42 -08:00
protocol.h
ipv6: Add GRO support
2009-01-08 10:40:57 -08:00
psnap.h
snap: use const for descriptor
2009-03-21 19:06:50 -07:00
raw.h
rawv6.h
red.h
regulatory.h
cfg80211: clean up includes
2009-04-22 16:57:17 -04:00
request_sock.h
net: Fix memory leak in the proto_register function
2008-11-21 16:45:22 -08:00
rose.h
route.h
ipv4: Conditionally enable transparent flow flag when connecting
2008-10-01 07:35:39 -07:00
rtnetlink.h
sch_generic.h
net: reorder struct Qdisc for better SMP performance
2009-03-20 01:33:32 -07:00
scm.h
Merge branch 'master' into next
2008-11-14 11:29:12 +11:00
slhc_vj.h
snmp.h
snmp: add missing counters for RFC 4293
2009-04-27 02:45:02 -07:00
sock.h
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
2009-02-24 03:50:29 -08:00
stp.h
tcp.h
syncookies: remove last_synq_overflow from struct tcp_sock
2009-04-20 02:25:26 -07:00
tcp_states.h
timewait_sock.h
net: Fix memory leak in the proto_register function
2008-11-21 16:45:22 -08:00
transp_v6.h
net: replace __constant_{endian} uses in net headers
2009-02-14 22:58:35 -08:00
udp.h
ipv6: Fix NULL pointer dereference with time-wait sockets
2009-04-11 01:53:06 -07:00
udplite.h
udp: introduce struct udp_table and multiple spinlocks
2008-10-29 01:41:45 -07:00
wext.h
wimax.h
wimax: fix typo in kernel-doc for debugfs_dentry in struct wimax_dev
2009-01-11 00:06:32 -08:00
x25.h
x25device.h
xfrm.h
netns xfrm: per-netns sysctls
2008-11-25 18:00:48 -08:00