aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2010-01-19 15:58:41 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-01-19 15:58:41 -0500
commit031cf0e94c9c8302a4592707939d6c2039f17f28 (patch)
tree02f3f0d3f89f03217bdb83530af30a95c9ab6191 /net
parent730dd70549e0ec755dd55615ba5cfc38a482a947 (diff)
parentad580db50ee8dccd069ffcd76d6f70fa6d4a62a8 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/cfg.c3
-rw-r--r--net/mac80211/iface.c10
-rw-r--r--net/mac80211/mlme.c4
-rw-r--r--net/mac80211/rc80211_pid_algo.c2
-rw-r--r--net/mac80211/rx.c4
-rw-r--r--net/wireless/core.c4
-rw-r--r--net/wireless/sme.c1
7 files changed, 21 insertions, 7 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index b0102c538b30..facf233843e0 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1389,6 +1389,9 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
1389 struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); 1389 struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1390 struct ieee80211_conf *conf = &local->hw.conf; 1390 struct ieee80211_conf *conf = &local->hw.conf;
1391 1391
1392 if (sdata->vif.type != NL80211_IFTYPE_STATION)
1393 return -EOPNOTSUPP;
1394
1392 if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) 1395 if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
1393 return -EOPNOTSUPP; 1396 return -EOPNOTSUPP;
1394 1397
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index fe140bf033f9..edf21cebeee8 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -684,21 +684,25 @@ static u16 ieee80211_monitor_select_queue(struct net_device *dev,
684 struct ieee80211_local *local = sdata->local; 684 struct ieee80211_local *local = sdata->local;
685 struct ieee80211_hdr *hdr; 685 struct ieee80211_hdr *hdr;
686 struct ieee80211_radiotap_header *rtap = (void *)skb->data; 686 struct ieee80211_radiotap_header *rtap = (void *)skb->data;
687 u8 *p;
687 688
688 if (local->hw.queues < 4) 689 if (local->hw.queues < 4)
689 return 0; 690 return 0;
690 691
691 if (skb->len < 4 || 692 if (skb->len < 4 ||
692 skb->len < rtap->it_len + 2 /* frame control */) 693 skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */)
693 return 0; /* doesn't matter, frame will be dropped */ 694 return 0; /* doesn't matter, frame will be dropped */
694 695
695 hdr = (void *)((u8 *)skb->data + rtap->it_len); 696 hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len));
696 697
697 if (!ieee80211_is_data(hdr->frame_control)) { 698 if (!ieee80211_is_data_qos(hdr->frame_control)) {
698 skb->priority = 7; 699 skb->priority = 7;
699 return ieee802_1d_to_ac[skb->priority]; 700 return ieee802_1d_to_ac[skb->priority];
700 } 701 }
701 702
703 p = ieee80211_get_qos_ctl(hdr);
704 skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK;
705
702 return ieee80211_downgrade_queue(local, skb); 706 return ieee80211_downgrade_queue(local, skb);
703} 707}
704 708
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index a82564e73d91..1e1d16c55ee5 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1478,7 +1478,9 @@ static void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1478 rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); 1478 rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len);
1479 break; 1479 break;
1480 case IEEE80211_STYPE_ACTION: 1480 case IEEE80211_STYPE_ACTION:
1481 /* XXX: differentiate, can only happen for CSA now! */ 1481 if (mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT)
1482 break;
1483
1482 ieee80211_sta_process_chanswitch(sdata, 1484 ieee80211_sta_process_chanswitch(sdata,
1483 &mgmt->u.action.u.chan_switch.sw_elem, 1485 &mgmt->u.action.u.chan_switch.sw_elem,
1484 (void *)ifmgd->associated->priv); 1486 (void *)ifmgd->associated->priv);
diff --git a/net/mac80211/rc80211_pid_algo.c b/net/mac80211/rc80211_pid_algo.c
index 699d3ed869c4..29bc4c516238 100644
--- a/net/mac80211/rc80211_pid_algo.c
+++ b/net/mac80211/rc80211_pid_algo.c
@@ -190,7 +190,7 @@ static void rate_control_pid_sample(struct rc_pid_info *pinfo,
190 rate_control_pid_normalize(pinfo, sband->n_bitrates); 190 rate_control_pid_normalize(pinfo, sband->n_bitrates);
191 191
192 /* Compute the proportional, integral and derivative errors. */ 192 /* Compute the proportional, integral and derivative errors. */
193 err_prop = (pinfo->target << RC_PID_ARITH_SHIFT) - pf; 193 err_prop = (pinfo->target - pf) << RC_PID_ARITH_SHIFT;
194 194
195 err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; 195 err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift;
196 spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop; 196 spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index efa6d3689c5e..a8e15b84c05b 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1946,6 +1946,10 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
1946 } 1946 }
1947 break; 1947 break;
1948 default: 1948 default:
1949 /* do not process rejected action frames */
1950 if (mgmt->u.action.category & 0x80)
1951 return RX_DROP_MONITOR;
1952
1949 return RX_CONTINUE; 1953 return RX_CONTINUE;
1950 } 1954 }
1951 1955
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 0a545bb6ed05..20db90246de5 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -746,9 +746,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
746 mutex_unlock(&rdev->devlist_mtx); 746 mutex_unlock(&rdev->devlist_mtx);
747 dev_put(dev); 747 dev_put(dev);
748 } 748 }
749#ifdef CONFIG_CFG80211_WEXT
750 cfg80211_lock_rdev(rdev); 749 cfg80211_lock_rdev(rdev);
751 mutex_lock(&rdev->devlist_mtx); 750 mutex_lock(&rdev->devlist_mtx);
751#ifdef CONFIG_CFG80211_WEXT
752 wdev_lock(wdev); 752 wdev_lock(wdev);
753 switch (wdev->iftype) { 753 switch (wdev->iftype) {
754 case NL80211_IFTYPE_ADHOC: 754 case NL80211_IFTYPE_ADHOC:
@@ -761,10 +761,10 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
761 break; 761 break;
762 } 762 }
763 wdev_unlock(wdev); 763 wdev_unlock(wdev);
764#endif
764 rdev->opencount++; 765 rdev->opencount++;
765 mutex_unlock(&rdev->devlist_mtx); 766 mutex_unlock(&rdev->devlist_mtx);
766 cfg80211_unlock_rdev(rdev); 767 cfg80211_unlock_rdev(rdev);
767#endif
768 break; 768 break;
769 case NETDEV_UNREGISTER: 769 case NETDEV_UNREGISTER:
770 /* 770 /*
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 2ce5e1609a3d..745c37e7992e 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -656,6 +656,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
656 memset(&wrqu, 0, sizeof(wrqu)); 656 memset(&wrqu, 0, sizeof(wrqu));
657 wrqu.ap_addr.sa_family = ARPHRD_ETHER; 657 wrqu.ap_addr.sa_family = ARPHRD_ETHER;
658 wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); 658 wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
659 wdev->wext.connect.ssid_len = 0;
659#endif 660#endif
660} 661}
661 662