Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
3b971a7c
Commit
3b971a7c
authored
Nov 09, 2011
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-davem' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
parents
b12f62ef
e29ec624
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
95 additions
and
29 deletions
+95
-29
drivers/bluetooth/btusb.c
drivers/bluetooth/btusb.c
+3
-0
drivers/net/wireless/ath/regd.c
drivers/net/wireless/ath/regd.c
+2
-0
drivers/net/wireless/b43/xmit.c
drivers/net/wireless/b43/xmit.c
+13
-2
drivers/net/wireless/b43/xmit.h
drivers/net/wireless/b43/xmit.h
+15
-1
drivers/net/wireless/brcm80211/brcmsmac/dma.c
drivers/net/wireless/brcm80211/brcmsmac/dma.c
+3
-2
drivers/net/wireless/mwifiex/scan.c
drivers/net/wireless/mwifiex/scan.c
+2
-1
drivers/net/wireless/wl12xx/scan.c
drivers/net/wireless/wl12xx/scan.c
+1
-1
include/net/bluetooth/l2cap.h
include/net/bluetooth/l2cap.h
+5
-2
include/net/cfg80211.h
include/net/cfg80211.h
+4
-0
net/bluetooth/hci_conn.c
net/bluetooth/hci_conn.c
+1
-1
net/bluetooth/l2cap_core.c
net/bluetooth/l2cap_core.c
+8
-8
net/mac80211/mlme.c
net/mac80211/mlme.c
+19
-0
net/mac80211/sta_info.c
net/mac80211/sta_info.c
+4
-4
net/wireless/nl80211.c
net/wireless/nl80211.c
+7
-2
net/wireless/scan.c
net/wireless/scan.c
+8
-5
No files found.
drivers/bluetooth/btusb.c
View file @
3b971a7c
...
@@ -100,6 +100,9 @@ static struct usb_device_id btusb_table[] = {
...
@@ -100,6 +100,9 @@ static struct usb_device_id btusb_table[] = {
/* Canyon CN-BTU1 with HID interfaces */
/* Canyon CN-BTU1 with HID interfaces */
{
USB_DEVICE
(
0x0c10
,
0x0000
)
},
{
USB_DEVICE
(
0x0c10
,
0x0000
)
},
/* Broadcom BCM20702A0 */
{
USB_DEVICE
(
0x413c
,
0x8197
)
},
{
}
/* Terminating entry */
{
}
/* Terminating entry */
};
};
...
...
drivers/net/wireless/ath/regd.c
View file @
3b971a7c
...
@@ -254,6 +254,8 @@ ath_reg_apply_active_scan_flags(struct wiphy *wiphy,
...
@@ -254,6 +254,8 @@ ath_reg_apply_active_scan_flags(struct wiphy *wiphy,
int
r
;
int
r
;
sband
=
wiphy
->
bands
[
IEEE80211_BAND_2GHZ
];
sband
=
wiphy
->
bands
[
IEEE80211_BAND_2GHZ
];
if
(
!
sband
)
return
;
/*
/*
* If no country IE has been received always enable active scan
* If no country IE has been received always enable active scan
...
...
drivers/net/wireless/b43/xmit.c
View file @
3b971a7c
...
@@ -175,6 +175,7 @@ void b43_generate_plcp_hdr(struct b43_plcp_hdr4 *plcp,
...
@@ -175,6 +175,7 @@ void b43_generate_plcp_hdr(struct b43_plcp_hdr4 *plcp,
}
}
}
}
/* TODO: verify if needed for SSLPN or LCN */
static
u16
b43_generate_tx_phy_ctl1
(
struct
b43_wldev
*
dev
,
u8
bitrate
)
static
u16
b43_generate_tx_phy_ctl1
(
struct
b43_wldev
*
dev
,
u8
bitrate
)
{
{
const
struct
b43_phy
*
phy
=
&
dev
->
phy
;
const
struct
b43_phy
*
phy
=
&
dev
->
phy
;
...
@@ -256,6 +257,9 @@ int b43_generate_txhdr(struct b43_wldev *dev,
...
@@ -256,6 +257,9 @@ int b43_generate_txhdr(struct b43_wldev *dev,
unsigned
int
plcp_fragment_len
;
unsigned
int
plcp_fragment_len
;
u32
mac_ctl
=
0
;
u32
mac_ctl
=
0
;
u16
phy_ctl
=
0
;
u16
phy_ctl
=
0
;
bool
fill_phy_ctl1
=
(
phy
->
type
==
B43_PHYTYPE_LP
||
phy
->
type
==
B43_PHYTYPE_N
||
phy
->
type
==
B43_PHYTYPE_HT
);
u8
extra_ft
=
0
;
u8
extra_ft
=
0
;
struct
ieee80211_rate
*
txrate
;
struct
ieee80211_rate
*
txrate
;
struct
ieee80211_tx_rate
*
rates
;
struct
ieee80211_tx_rate
*
rates
;
...
@@ -531,7 +535,7 @@ int b43_generate_txhdr(struct b43_wldev *dev,
...
@@ -531,7 +535,7 @@ int b43_generate_txhdr(struct b43_wldev *dev,
extra_ft
|=
B43_TXH_EFT_RTSFB_CCK
;
extra_ft
|=
B43_TXH_EFT_RTSFB_CCK
;
if
(
rates
[
0
].
flags
&
IEEE80211_TX_RC_USE_RTS_CTS
&&
if
(
rates
[
0
].
flags
&
IEEE80211_TX_RC_USE_RTS_CTS
&&
phy
->
type
==
B43_PHYTYPE_N
)
{
fill_phy_ctl1
)
{
txhdr
->
phy_ctl1_rts
=
cpu_to_le16
(
txhdr
->
phy_ctl1_rts
=
cpu_to_le16
(
b43_generate_tx_phy_ctl1
(
dev
,
rts_rate
));
b43_generate_tx_phy_ctl1
(
dev
,
rts_rate
));
txhdr
->
phy_ctl1_rts_fb
=
cpu_to_le16
(
txhdr
->
phy_ctl1_rts_fb
=
cpu_to_le16
(
...
@@ -552,7 +556,7 @@ int b43_generate_txhdr(struct b43_wldev *dev,
...
@@ -552,7 +556,7 @@ int b43_generate_txhdr(struct b43_wldev *dev,
break
;
break
;
}
}
if
(
phy
->
type
==
B43_PHYTYPE_N
)
{
if
(
fill_phy_ctl1
)
{
txhdr
->
phy_ctl1
=
txhdr
->
phy_ctl1
=
cpu_to_le16
(
b43_generate_tx_phy_ctl1
(
dev
,
rate
));
cpu_to_le16
(
b43_generate_tx_phy_ctl1
(
dev
,
rate
));
txhdr
->
phy_ctl1_fb
=
txhdr
->
phy_ctl1_fb
=
...
@@ -736,7 +740,14 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)
...
@@ -736,7 +740,14 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)
/* Link quality statistics */
/* Link quality statistics */
switch
(
chanstat
&
B43_RX_CHAN_PHYTYPE
)
{
switch
(
chanstat
&
B43_RX_CHAN_PHYTYPE
)
{
case
B43_PHYTYPE_HT
:
/* TODO: is max the right choice? */
status
.
signal
=
max_t
(
__s8
,
max
(
rxhdr
->
phy_ht_power0
,
rxhdr
->
phy_ht_power1
),
rxhdr
->
phy_ht_power2
);
break
;
case
B43_PHYTYPE_N
:
case
B43_PHYTYPE_N
:
/* Broadcom has code for min and avg, but always uses max */
if
(
rxhdr
->
power0
==
16
||
rxhdr
->
power0
==
32
)
if
(
rxhdr
->
power0
==
16
||
rxhdr
->
power0
==
32
)
status
.
signal
=
max
(
rxhdr
->
power1
,
rxhdr
->
power2
);
status
.
signal
=
max
(
rxhdr
->
power1
,
rxhdr
->
power2
);
else
else
...
...
drivers/net/wireless/b43/xmit.h
View file @
3b971a7c
...
@@ -249,6 +249,12 @@ struct b43_rxhdr_fw4 {
...
@@ -249,6 +249,12 @@ struct b43_rxhdr_fw4 {
}
__packed
;
}
__packed
;
}
__packed
;
}
__packed
;
union
{
union
{
/* HT-PHY */
struct
{
PAD_BYTES
(
1
);
__s8
phy_ht_power0
;
}
__packed
;
/* RSSI for N-PHYs */
/* RSSI for N-PHYs */
struct
{
struct
{
__s8
power2
;
__s8
power2
;
...
@@ -257,7 +263,15 @@ struct b43_rxhdr_fw4 {
...
@@ -257,7 +263,15 @@ struct b43_rxhdr_fw4 {
__le16
phy_status2
;
/* PHY RX Status 2 */
__le16
phy_status2
;
/* PHY RX Status 2 */
}
__packed
;
}
__packed
;
__le16
phy_status3
;
/* PHY RX Status 3 */
union
{
/* HT-PHY */
struct
{
__s8
phy_ht_power1
;
__s8
phy_ht_power2
;
}
__packed
;
__le16
phy_status3
;
/* PHY RX Status 3 */
}
__packed
;
union
{
union
{
/* Tested with 598.314, 644.1001 and 666.2 */
/* Tested with 598.314, 644.1001 and 666.2 */
struct
{
struct
{
...
...
drivers/net/wireless/brcm80211/brcmsmac/dma.c
View file @
3b971a7c
...
@@ -358,13 +358,14 @@ static uint nrxdactive(struct dma_info *di, uint h, uint t)
...
@@ -358,13 +358,14 @@ static uint nrxdactive(struct dma_info *di, uint h, uint t)
static
uint
_dma_ctrlflags
(
struct
dma_info
*
di
,
uint
mask
,
uint
flags
)
static
uint
_dma_ctrlflags
(
struct
dma_info
*
di
,
uint
mask
,
uint
flags
)
{
{
uint
dmactrlflags
=
di
->
dma
.
dmactrlflags
;
uint
dmactrlflags
;
if
(
di
==
NULL
)
{
if
(
di
==
NULL
)
{
DMA_ERROR
((
"
%s: _dma_ctrlflags: NULL dma handle
\n
"
,
di
->
name
));
DMA_ERROR
((
"
_dma_ctrlflags: NULL dma handle
\n
"
));
return
0
;
return
0
;
}
}
dmactrlflags
=
di
->
dma
.
dmactrlflags
;
dmactrlflags
&=
~
mask
;
dmactrlflags
&=
~
mask
;
dmactrlflags
|=
flags
;
dmactrlflags
|=
flags
;
...
...
drivers/net/wireless/mwifiex/scan.c
View file @
3b971a7c
...
@@ -1469,7 +1469,7 @@ mwifiex_update_curr_bss_params(struct mwifiex_private *priv, u8 *bssid,
...
@@ -1469,7 +1469,7 @@ mwifiex_update_curr_bss_params(struct mwifiex_private *priv, u8 *bssid,
s32
rssi
,
const
u8
*
ie_buf
,
size_t
ie_len
,
s32
rssi
,
const
u8
*
ie_buf
,
size_t
ie_len
,
u16
beacon_period
,
u16
cap_info_bitmap
,
u8
band
)
u16
beacon_period
,
u16
cap_info_bitmap
,
u8
band
)
{
{
struct
mwifiex_bssdescriptor
*
bss_desc
=
NULL
;
struct
mwifiex_bssdescriptor
*
bss_desc
;
int
ret
;
int
ret
;
unsigned
long
flags
;
unsigned
long
flags
;
u8
*
beacon_ie
;
u8
*
beacon_ie
;
...
@@ -1484,6 +1484,7 @@ mwifiex_update_curr_bss_params(struct mwifiex_private *priv, u8 *bssid,
...
@@ -1484,6 +1484,7 @@ mwifiex_update_curr_bss_params(struct mwifiex_private *priv, u8 *bssid,
beacon_ie
=
kmemdup
(
ie_buf
,
ie_len
,
GFP_KERNEL
);
beacon_ie
=
kmemdup
(
ie_buf
,
ie_len
,
GFP_KERNEL
);
if
(
!
beacon_ie
)
{
if
(
!
beacon_ie
)
{
kfree
(
bss_desc
);
dev_err
(
priv
->
adapter
->
dev
,
" failed to alloc beacon_ie
\n
"
);
dev_err
(
priv
->
adapter
->
dev
,
" failed to alloc beacon_ie
\n
"
);
return
-
ENOMEM
;
return
-
ENOMEM
;
}
}
...
...
drivers/net/wireless/wl12xx/scan.c
View file @
3b971a7c
...
@@ -559,7 +559,7 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
...
@@ -559,7 +559,7 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
break
;
break
;
}
}
/* Fail if SSID isn't present in the filters */
/* Fail if SSID isn't present in the filters */
if
(
j
==
req
->
n_ssids
)
{
if
(
j
==
cmd
->
n_ssids
)
{
ret
=
-
EINVAL
;
ret
=
-
EINVAL
;
goto
out_free
;
goto
out_free
;
}
}
...
...
include/net/bluetooth/l2cap.h
View file @
3b971a7c
...
@@ -39,8 +39,11 @@
...
@@ -39,8 +39,11 @@
#define L2CAP_DEFAULT_ACK_TO 200
#define L2CAP_DEFAULT_ACK_TO 200
#define L2CAP_LE_DEFAULT_MTU 23
#define L2CAP_LE_DEFAULT_MTU 23
#define L2CAP_CONN_TIMEOUT (40000)
/* 40 seconds */
#define L2CAP_DISC_TIMEOUT (100)
#define L2CAP_INFO_TIMEOUT (4000)
/* 4 seconds */
#define L2CAP_DISC_REJ_TIMEOUT (5000)
/* 5 seconds */
#define L2CAP_ENC_TIMEOUT (5000)
/* 5 seconds */
#define L2CAP_CONN_TIMEOUT (40000)
/* 40 seconds */
#define L2CAP_INFO_TIMEOUT (4000)
/* 4 seconds */
/* L2CAP socket address */
/* L2CAP socket address */
struct
sockaddr_l2
{
struct
sockaddr_l2
{
...
...
include/net/cfg80211.h
View file @
3b971a7c
...
@@ -456,6 +456,9 @@ enum station_parameters_apply_mask {
...
@@ -456,6 +456,9 @@ enum station_parameters_apply_mask {
* as the AC bitmap in the QoS info field
* as the AC bitmap in the QoS info field
* @max_sp: max Service Period. same format as the MAX_SP in the
* @max_sp: max Service Period. same format as the MAX_SP in the
* QoS info field (but already shifted down)
* QoS info field (but already shifted down)
* @sta_modify_mask: bitmap indicating which parameters changed
* (for those that don't have a natural "no change" value),
* see &enum station_parameters_apply_mask
*/
*/
struct
station_parameters
{
struct
station_parameters
{
u8
*
supported_rates
;
u8
*
supported_rates
;
...
@@ -615,6 +618,7 @@ struct sta_bss_parameters {
...
@@ -615,6 +618,7 @@ struct sta_bss_parameters {
* user space MLME/SME implementation. The information is provided for
* user space MLME/SME implementation. The information is provided for
* the cfg80211_new_sta() calls to notify user space of the IEs.
* the cfg80211_new_sta() calls to notify user space of the IEs.
* @assoc_req_ies_len: Length of assoc_req_ies buffer in octets.
* @assoc_req_ies_len: Length of assoc_req_ies buffer in octets.
* @sta_flags: station flags mask & values
*/
*/
struct
station_info
{
struct
station_info
{
u32
filled
;
u32
filled
;
...
...
net/bluetooth/hci_conn.c
View file @
3b971a7c
...
@@ -673,7 +673,7 @@ int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
...
@@ -673,7 +673,7 @@ int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
goto
encrypt
;
goto
encrypt
;
auth:
auth:
if
(
test_bit
(
HCI_CONN_ENCRYPT_PEND
,
&
conn
->
pend
))
if
(
test_
and_set_
bit
(
HCI_CONN_ENCRYPT_PEND
,
&
conn
->
pend
))
return
0
;
return
0
;
if
(
!
hci_conn_auth
(
conn
,
sec_level
,
auth_type
))
if
(
!
hci_conn_auth
(
conn
,
sec_level
,
auth_type
))
...
...
net/bluetooth/l2cap_core.c
View file @
3b971a7c
...
@@ -251,7 +251,7 @@ static void l2cap_chan_timeout(unsigned long arg)
...
@@ -251,7 +251,7 @@ static void l2cap_chan_timeout(unsigned long arg)
if
(
sock_owned_by_user
(
sk
))
{
if
(
sock_owned_by_user
(
sk
))
{
/* sk is owned by user. Try again later */
/* sk is owned by user. Try again later */
__set_chan_timer
(
chan
,
HZ
/
5
);
__set_chan_timer
(
chan
,
L2CAP_DISC_TIMEOUT
);
bh_unlock_sock
(
sk
);
bh_unlock_sock
(
sk
);
chan_put
(
chan
);
chan_put
(
chan
);
return
;
return
;
...
@@ -2488,7 +2488,7 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd
...
@@ -2488,7 +2488,7 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd
if
(
sock_owned_by_user
(
sk
))
{
if
(
sock_owned_by_user
(
sk
))
{
l2cap_state_change
(
chan
,
BT_DISCONN
);
l2cap_state_change
(
chan
,
BT_DISCONN
);
__clear_chan_timer
(
chan
);
__clear_chan_timer
(
chan
);
__set_chan_timer
(
chan
,
HZ
/
5
);
__set_chan_timer
(
chan
,
L2CAP_DISC_TIMEOUT
);
break
;
break
;
}
}
...
@@ -2661,7 +2661,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr
...
@@ -2661,7 +2661,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr
default:
default:
sk
->
sk_err
=
ECONNRESET
;
sk
->
sk_err
=
ECONNRESET
;
__set_chan_timer
(
chan
,
HZ
*
5
);
__set_chan_timer
(
chan
,
L2CAP_DISC_REJ_TIMEOUT
);
l2cap_send_disconn_req
(
conn
,
chan
,
ECONNRESET
);
l2cap_send_disconn_req
(
conn
,
chan
,
ECONNRESET
);
goto
done
;
goto
done
;
}
}
...
@@ -2718,7 +2718,7 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd
...
@@ -2718,7 +2718,7 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd
if
(
sock_owned_by_user
(
sk
))
{
if
(
sock_owned_by_user
(
sk
))
{
l2cap_state_change
(
chan
,
BT_DISCONN
);
l2cap_state_change
(
chan
,
BT_DISCONN
);
__clear_chan_timer
(
chan
);
__clear_chan_timer
(
chan
);
__set_chan_timer
(
chan
,
HZ
/
5
);
__set_chan_timer
(
chan
,
L2CAP_DISC_TIMEOUT
);
bh_unlock_sock
(
sk
);
bh_unlock_sock
(
sk
);
return
0
;
return
0
;
}
}
...
@@ -2752,7 +2752,7 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd
...
@@ -2752,7 +2752,7 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd
if
(
sock_owned_by_user
(
sk
))
{
if
(
sock_owned_by_user
(
sk
))
{
l2cap_state_change
(
chan
,
BT_DISCONN
);
l2cap_state_change
(
chan
,
BT_DISCONN
);
__clear_chan_timer
(
chan
);
__clear_chan_timer
(
chan
);
__set_chan_timer
(
chan
,
HZ
/
5
);
__set_chan_timer
(
chan
,
L2CAP_DISC_TIMEOUT
);
bh_unlock_sock
(
sk
);
bh_unlock_sock
(
sk
);
return
0
;
return
0
;
}
}
...
@@ -3998,7 +3998,7 @@ static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
...
@@ -3998,7 +3998,7 @@ static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
if
(
encrypt
==
0x00
)
{
if
(
encrypt
==
0x00
)
{
if
(
chan
->
sec_level
==
BT_SECURITY_MEDIUM
)
{
if
(
chan
->
sec_level
==
BT_SECURITY_MEDIUM
)
{
__clear_chan_timer
(
chan
);
__clear_chan_timer
(
chan
);
__set_chan_timer
(
chan
,
HZ
*
5
);
__set_chan_timer
(
chan
,
L2CAP_ENC_TIMEOUT
);
}
else
if
(
chan
->
sec_level
==
BT_SECURITY_HIGH
)
}
else
if
(
chan
->
sec_level
==
BT_SECURITY_HIGH
)
l2cap_chan_close
(
chan
,
ECONNREFUSED
);
l2cap_chan_close
(
chan
,
ECONNREFUSED
);
}
else
{
}
else
{
...
@@ -4066,7 +4066,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
...
@@ -4066,7 +4066,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L2CAP_CONN_REQ
,
sizeof
(
req
),
&
req
);
L2CAP_CONN_REQ
,
sizeof
(
req
),
&
req
);
}
else
{
}
else
{
__clear_chan_timer
(
chan
);
__clear_chan_timer
(
chan
);
__set_chan_timer
(
chan
,
HZ
/
10
);
__set_chan_timer
(
chan
,
L2CAP_DISC_TIMEOUT
);
}
}
}
else
if
(
chan
->
state
==
BT_CONNECT2
)
{
}
else
if
(
chan
->
state
==
BT_CONNECT2
)
{
struct
l2cap_conn_rsp
rsp
;
struct
l2cap_conn_rsp
rsp
;
...
@@ -4086,7 +4086,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
...
@@ -4086,7 +4086,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
}
}
}
else
{
}
else
{
l2cap_state_change
(
chan
,
BT_DISCONN
);
l2cap_state_change
(
chan
,
BT_DISCONN
);
__set_chan_timer
(
chan
,
HZ
/
10
);
__set_chan_timer
(
chan
,
L2CAP_DISC_TIMEOUT
);
res
=
L2CAP_CR_SEC_BLOCK
;
res
=
L2CAP_CR_SEC_BLOCK
;
stat
=
L2CAP_CS_NO_INFO
;
stat
=
L2CAP_CS_NO_INFO
;
}
}
...
...
net/mac80211/mlme.c
View file @
3b971a7c
...
@@ -1487,6 +1487,7 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
...
@@ -1487,6 +1487,7 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
int
i
,
j
,
err
;
int
i
,
j
,
err
;
bool
have_higher_than_11mbit
=
false
;
bool
have_higher_than_11mbit
=
false
;
u16
ap_ht_cap_flags
;
u16
ap_ht_cap_flags
;
int
min_rate
=
INT_MAX
,
min_rate_index
=
-
1
;
/* AssocResp and ReassocResp have identical structure */
/* AssocResp and ReassocResp have identical structure */
...
@@ -1553,6 +1554,10 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
...
@@ -1553,6 +1554,10 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
rates
|=
BIT
(
j
);
rates
|=
BIT
(
j
);
if
(
is_basic
)
if
(
is_basic
)
basic_rates
|=
BIT
(
j
);
basic_rates
|=
BIT
(
j
);
if
(
rate
<
min_rate
)
{
min_rate
=
rate
;
min_rate_index
=
j
;
}
break
;
break
;
}
}
}
}
...
@@ -1570,11 +1575,25 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
...
@@ -1570,11 +1575,25 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
rates
|=
BIT
(
j
);
rates
|=
BIT
(
j
);
if
(
is_basic
)
if
(
is_basic
)
basic_rates
|=
BIT
(
j
);
basic_rates
|=
BIT
(
j
);
if
(
rate
<
min_rate
)
{
min_rate
=
rate
;
min_rate_index
=
j
;
}
break
;
break
;
}
}
}
}
}
}
/*
* some buggy APs don't advertise basic_rates. use the lowest
* supported rate instead.
*/
if
(
unlikely
(
!
basic_rates
)
&&
min_rate_index
>=
0
)
{
printk
(
KERN_DEBUG
"%s: No basic rates in AssocResp. "
"Using min supported rate instead.
\n
"
,
sdata
->
name
);
basic_rates
=
BIT
(
min_rate_index
);
}
sta
->
sta
.
supp_rates
[
wk
->
chan
->
band
]
=
rates
;
sta
->
sta
.
supp_rates
[
wk
->
chan
->
band
]
=
rates
;
sdata
->
vif
.
bss_conf
.
basic_rates
=
basic_rates
;
sdata
->
vif
.
bss_conf
.
basic_rates
=
basic_rates
;
...
...
net/mac80211/sta_info.c
View file @
3b971a7c
...
@@ -1354,12 +1354,12 @@ ieee80211_sta_ps_deliver_response(struct sta_info *sta,
...
@@ -1354,12 +1354,12 @@ ieee80211_sta_ps_deliver_response(struct sta_info *sta,
* Use MoreData flag to indicate whether there are
* Use MoreData flag to indicate whether there are
* more buffered frames for this STA
* more buffered frames for this STA
*/
*/
if
(
!
more_data
)
if
(
more_data
||
!
skb_queue_empty
(
&
frames
))
hdr
->
frame_control
&=
cpu_to_le16
(
~
IEEE80211_FCTL_MOREDATA
);
else
hdr
->
frame_control
|=
hdr
->
frame_control
|=
cpu_to_le16
(
IEEE80211_FCTL_MOREDATA
);
cpu_to_le16
(
IEEE80211_FCTL_MOREDATA
);
else
hdr
->
frame_control
&=
cpu_to_le16
(
~
IEEE80211_FCTL_MOREDATA
);
if
(
ieee80211_is_data_qos
(
hdr
->
frame_control
)
||
if
(
ieee80211_is_data_qos
(
hdr
->
frame_control
)
||
ieee80211_is_qos_nullfunc
(
hdr
->
frame_control
))
ieee80211_is_qos_nullfunc
(
hdr
->
frame_control
))
...
...
net/wireless/nl80211.c
View file @
3b971a7c
...
@@ -132,8 +132,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
...
@@ -132,8 +132,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
[
NL80211_ATTR_MESH_CONFIG
]
=
{
.
type
=
NLA_NESTED
},
[
NL80211_ATTR_MESH_CONFIG
]
=
{
.
type
=
NLA_NESTED
},
[
NL80211_ATTR_SUPPORT_MESH_AUTH
]
=
{
.
type
=
NLA_FLAG
},
[
NL80211_ATTR_SUPPORT_MESH_AUTH
]
=
{
.
type
=
NLA_FLAG
},
[
NL80211_ATTR_HT_CAPABILITY
]
=
{
.
type
=
NLA_BINARY
,
[
NL80211_ATTR_HT_CAPABILITY
]
=
{
.
len
=
NL80211_HT_CAPABILITY_LEN
},
.
len
=
NL80211_HT_CAPABILITY_LEN
},
[
NL80211_ATTR_MGMT_SUBTYPE
]
=
{
.
type
=
NLA_U8
},
[
NL80211_ATTR_MGMT_SUBTYPE
]
=
{
.
type
=
NLA_U8
},
[
NL80211_ATTR_IE
]
=
{
.
type
=
NLA_BINARY
,
[
NL80211_ATTR_IE
]
=
{
.
type
=
NLA_BINARY
,
...
@@ -1253,6 +1252,12 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
...
@@ -1253,6 +1252,12 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
goto
bad_res
;
goto
bad_res
;
}
}
if
(
netdev
->
ieee80211_ptr
->
iftype
!=
NL80211_IFTYPE_AP
&&
netdev
->
ieee80211_ptr
->
iftype
!=
NL80211_IFTYPE_P2P_GO
)
{
result
=
-
EINVAL
;
goto
bad_res
;
}
nla_for_each_nested
(
nl_txq_params
,
nla_for_each_nested
(
nl_txq_params
,
info
->
attrs
[
NL80211_ATTR_WIPHY_TXQ_PARAMS
],
info
->
attrs
[
NL80211_ATTR_WIPHY_TXQ_PARAMS
],
rem_txq_params
)
{
rem_txq_params
)
{
...
...
net/wireless/scan.c
View file @
3b971a7c
...
@@ -259,17 +259,20 @@ static int cmp_ies(u8 num, u8 *ies1, size_t len1, u8 *ies2, size_t len2)
...
@@ -259,17 +259,20 @@ static int cmp_ies(u8 num, u8 *ies1, size_t len1, u8 *ies2, size_t len2)
{
{
const
u8
*
ie1
=
cfg80211_find_ie
(
num
,
ies1
,
len1
);
const
u8
*
ie1
=
cfg80211_find_ie
(
num
,
ies1
,
len1
);
const
u8
*
ie2
=
cfg80211_find_ie
(
num
,
ies2
,
len2
);
const
u8
*
ie2
=
cfg80211_find_ie
(
num
,
ies2
,
len2
);
int
r
;
/* equal if both missing */
if
(
!
ie1
&&
!
ie2
)
if
(
!
ie1
&&
!
ie2
)
return
0
;
return
0
;
if
(
!
ie1
||
!
ie2
)
/* sort missing IE before (left of) present IE */
if
(
!
ie1
)
return
-
1
;
return
-
1
;
if
(
!
ie2
)
return
1
;
r
=
memcmp
(
ie1
+
2
,
ie2
+
2
,
min
(
ie1
[
1
],
ie2
[
1
]));
/* sort by length first, then by contents */
if
(
r
==
0
&&
ie1
[
1
]
!=
ie2
[
1
])
if
(
ie1
[
1
]
!=
ie2
[
1
])
return
ie2
[
1
]
-
ie1
[
1
];
return
ie2
[
1
]
-
ie1
[
1
];
return
r
;
return
memcmp
(
ie1
+
2
,
ie2
+
2
,
ie1
[
1
])
;
}
}
static
bool
is_bss
(
struct
cfg80211_bss
*
a
,
static
bool
is_bss
(
struct
cfg80211_bss
*
a
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment