Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: chromeos/compat-wireless/net/mac80211/main.c

Issue 5326002: Update compat-wireless to 2.6.36-5-spn (Closed) Base URL: http://git.chromium.org/git/kernel.git@master
Patch Set: Fixes for !ACK handling, missing local changes, log message fixes Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2002-2005, Instant802 Networks, Inc. 2 * Copyright 2002-2005, Instant802 Networks, Inc.
3 * Copyright 2005-2006, Devicescape Software, Inc. 3 * Copyright 2005-2006, Devicescape Software, Inc.
4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10 10
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 96
97 ieee80211_configure_filter(local); 97 ieee80211_configure_filter(local);
98 } 98 }
99 99
100 int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) 100 int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
101 { 101 {
102 struct ieee80211_channel *chan, *scan_chan; 102 struct ieee80211_channel *chan, *scan_chan;
103 int ret = 0; 103 int ret = 0;
104 int power; 104 int power;
105 enum nl80211_channel_type channel_type; 105 enum nl80211_channel_type channel_type;
106 u32 offchannel_flag;
106 107
107 might_sleep(); 108 might_sleep();
108 109
109 scan_chan = local->scan_channel; 110 scan_chan = local->scan_channel;
110 111
112 offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
111 if (scan_chan) { 113 if (scan_chan) {
112 chan = scan_chan; 114 chan = scan_chan;
113 channel_type = NL80211_CHAN_NO_HT; 115 channel_type = NL80211_CHAN_NO_HT;
114 local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL; 116 local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
115 » } else if (local->tmp_channel) { 117 » } else if (local->tmp_channel &&
118 » » local->oper_channel != local->tmp_channel) {
116 chan = scan_chan = local->tmp_channel; 119 chan = scan_chan = local->tmp_channel;
117 channel_type = local->tmp_channel_type; 120 channel_type = local->tmp_channel_type;
118 local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL; 121 local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
119 } else { 122 } else {
120 chan = local->oper_channel; 123 chan = local->oper_channel;
121 channel_type = local->_oper_channel_type; 124 channel_type = local->_oper_channel_type;
122 local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL; 125 local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL;
123 } 126 }
127 offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
124 128
125 » if (chan != local->hw.conf.channel || 129 » if (offchannel_flag || chan != local->hw.conf.channel ||
126 channel_type != local->hw.conf.channel_type) { 130 channel_type != local->hw.conf.channel_type) {
127 local->hw.conf.channel = chan; 131 local->hw.conf.channel = chan;
128 local->hw.conf.channel_type = channel_type; 132 local->hw.conf.channel_type = channel_type;
129 changed |= IEEE80211_CONF_CHANGE_CHANNEL; 133 changed |= IEEE80211_CONF_CHANGE_CHANNEL;
130 } 134 }
131 135
132 if (!conf_is_ht(&local->hw.conf)) { 136 if (!conf_is_ht(&local->hw.conf)) {
133 /* 137 /*
134 * mac80211.h documents that this is only valid 138 * mac80211.h documents that this is only valid
135 * when the channel is set to an HT type, and 139 * when the channel is set to an HT type, and
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 735
732 /* 736 /*
733 * At this point, interface list manipulations are fine 737 * At this point, interface list manipulations are fine
734 * because the driver cannot be handing us frames any 738 * because the driver cannot be handing us frames any
735 * more and the tasklet is killed. 739 * more and the tasklet is killed.
736 */ 740 */
737 ieee80211_remove_interfaces(local); 741 ieee80211_remove_interfaces(local);
738 742
739 rtnl_unlock(); 743 rtnl_unlock();
740 744
745 /*
746 * Now all work items will be gone, but the
747 * timer might still be armed, so delete it
748 */
749 del_timer_sync(&local->work_timer);
750
741 cancel_work_sync(&local->reconfig_filter); 751 cancel_work_sync(&local->reconfig_filter);
742 752
743 ieee80211_clear_tx_pending(local); 753 ieee80211_clear_tx_pending(local);
744 sta_info_stop(local); 754 sta_info_stop(local);
745 rate_control_deinitialize(local); 755 rate_control_deinitialize(local);
746 756
747 if (skb_queue_len(&local->skb_queue) || 757 if (skb_queue_len(&local->skb_queue) ||
748 skb_queue_len(&local->skb_queue_unreliable)) 758 skb_queue_len(&local->skb_queue_unreliable))
749 printk(KERN_WARNING "%s: skb_queue not empty\n", 759 printk(KERN_WARNING "%s: skb_queue not empty\n",
750 wiphy_name(local->hw.wiphy)); 760 wiphy_name(local->hw.wiphy));
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 833
824 ieee80211_iface_exit(); 834 ieee80211_iface_exit();
825 } 835 }
826 836
827 837
828 subsys_initcall(ieee80211_init); 838 subsys_initcall(ieee80211_init);
829 module_exit(ieee80211_exit); 839 module_exit(ieee80211_exit);
830 840
831 MODULE_DESCRIPTION("IEEE 802.11 subsystem"); 841 MODULE_DESCRIPTION("IEEE 802.11 subsystem");
832 MODULE_LICENSE("GPL"); 842 MODULE_LICENSE("GPL");
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698