mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
This commit is contained in:
commit
f3e979a52c
17 changed files with 58 additions and 34 deletions
|
|
@ -308,12 +308,13 @@ static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata)
|
||||
static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata,
|
||||
enum nl80211_iftype iftype)
|
||||
{
|
||||
int n_queues = sdata->local->hw.queues;
|
||||
int i;
|
||||
|
||||
if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE) {
|
||||
if (iftype != NL80211_IFTYPE_P2P_DEVICE) {
|
||||
for (i = 0; i < IEEE80211_NUM_ACS; i++) {
|
||||
if (WARN_ON_ONCE(sdata->vif.hw_queue[i] ==
|
||||
IEEE80211_INVAL_HW_QUEUE))
|
||||
|
|
@ -324,8 +325,9 @@ static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata)
|
|||
}
|
||||
}
|
||||
|
||||
if ((sdata->vif.type != NL80211_IFTYPE_AP &&
|
||||
sdata->vif.type != NL80211_IFTYPE_MESH_POINT) ||
|
||||
if ((iftype != NL80211_IFTYPE_AP &&
|
||||
iftype != NL80211_IFTYPE_P2P_GO &&
|
||||
iftype != NL80211_IFTYPE_MESH_POINT) ||
|
||||
!(sdata->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL)) {
|
||||
sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
|
||||
return 0;
|
||||
|
|
@ -408,7 +410,7 @@ int ieee80211_add_virtual_monitor(struct ieee80211_local *local)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = ieee80211_check_queues(sdata);
|
||||
ret = ieee80211_check_queues(sdata, NL80211_IFTYPE_MONITOR);
|
||||
if (ret) {
|
||||
kfree(sdata);
|
||||
return ret;
|
||||
|
|
@ -592,7 +594,8 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
|
|||
res = drv_add_interface(local, sdata);
|
||||
if (res)
|
||||
goto err_stop;
|
||||
res = ieee80211_check_queues(sdata);
|
||||
res = ieee80211_check_queues(sdata,
|
||||
ieee80211_vif_type_p2p(&sdata->vif));
|
||||
if (res)
|
||||
goto err_del_interface;
|
||||
}
|
||||
|
|
@ -1389,14 +1392,14 @@ static int ieee80211_runtime_change_iftype(struct ieee80211_sub_if_data *sdata,
|
|||
|
||||
ret = drv_change_interface(local, sdata, internal_type, p2p);
|
||||
if (ret)
|
||||
type = sdata->vif.type;
|
||||
type = ieee80211_vif_type_p2p(&sdata->vif);
|
||||
|
||||
/*
|
||||
* Ignore return value here, there's not much we can do since
|
||||
* the driver changed the interface type internally already.
|
||||
* The warnings will hopefully make driver authors fix it :-)
|
||||
*/
|
||||
ieee80211_check_queues(sdata);
|
||||
ieee80211_check_queues(sdata, type);
|
||||
|
||||
ieee80211_setup_sdata(sdata, type);
|
||||
|
||||
|
|
|
|||
|
|
@ -892,9 +892,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
|||
if (!local->ops->remain_on_channel)
|
||||
local->hw.wiphy->max_remain_on_channel_duration = 5000;
|
||||
|
||||
if (local->ops->sched_scan_start)
|
||||
local->hw.wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
|
||||
|
||||
/* mac80211 based drivers don't support internal TDLS setup */
|
||||
if (local->hw.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS)
|
||||
local->hw.wiphy->flags |= WIPHY_FLAG_TDLS_EXTERNAL_SETUP;
|
||||
|
|
|
|||
|
|
@ -832,6 +832,9 @@ ieee80211_mesh_rx_probe_req(struct ieee80211_sub_if_data *sdata,
|
|||
|
||||
ieee802_11_parse_elems(pos, len - baselen, false, &elems);
|
||||
|
||||
if (!elems.mesh_id)
|
||||
return;
|
||||
|
||||
/* 802.11-2012 10.1.4.3.2 */
|
||||
if ((!ether_addr_equal(mgmt->da, sdata->vif.addr) &&
|
||||
!is_broadcast_ether_addr(mgmt->da)) ||
|
||||
|
|
|
|||
|
|
@ -439,13 +439,12 @@ minstrel_aggr_check(struct ieee80211_sta *pubsta, struct sk_buff *skb)
|
|||
{
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
|
||||
struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
|
||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||
u16 tid;
|
||||
|
||||
if (unlikely(!ieee80211_is_data_qos(hdr->frame_control)))
|
||||
return;
|
||||
|
||||
if (unlikely(info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO))
|
||||
if (unlikely(skb->protocol == cpu_to_be16(ETH_P_PAE)))
|
||||
return;
|
||||
|
||||
tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK;
|
||||
|
|
|
|||
|
|
@ -2684,8 +2684,7 @@ ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
|
|||
sig = status->signal;
|
||||
|
||||
if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig,
|
||||
rx->skb->data, rx->skb->len,
|
||||
GFP_ATOMIC)) {
|
||||
rx->skb->data, rx->skb->len, 0, GFP_ATOMIC)) {
|
||||
if (rx->sta)
|
||||
rx->sta->rx_packets++;
|
||||
dev_kfree_skb(rx->skb);
|
||||
|
|
|
|||
|
|
@ -781,9 +781,11 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
|
|||
/*
|
||||
* Anything but QoS data that has a sequence number field
|
||||
* (is long enough) gets a sequence number from the global
|
||||
* counter.
|
||||
* counter. QoS data frames with a multicast destination
|
||||
* also use the global counter (802.11-2012 9.3.2.10).
|
||||
*/
|
||||
if (!ieee80211_is_data_qos(hdr->frame_control)) {
|
||||
if (!ieee80211_is_data_qos(hdr->frame_control) ||
|
||||
is_multicast_ether_addr(hdr->addr1)) {
|
||||
/* driver should assign sequence number */
|
||||
info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
|
||||
/* for pure STA mode without beacons, we can do it */
|
||||
|
|
|
|||
Loading…
Reference in a new issue