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
a261af92
Commit
a261af92
authored
May 25, 2010
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
parents
acfbe96a
a65e4cb4
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
104 additions
and
132 deletions
+104
-132
drivers/net/wireless/ath/ath5k/base.c
drivers/net/wireless/ath/ath5k/base.c
+4
-3
drivers/net/wireless/ath/ath9k/beacon.c
drivers/net/wireless/ath/ath9k/beacon.c
+13
-62
drivers/net/wireless/ath/ath9k/hif_usb.c
drivers/net/wireless/ath/ath9k/hif_usb.c
+8
-2
drivers/net/wireless/ath/ath9k/htc.h
drivers/net/wireless/ath/ath9k/htc.h
+1
-0
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/main.c
+3
-25
drivers/net/wireless/ath/ath9k/pci.c
drivers/net/wireless/ath/ath9k/pci.c
+0
-1
drivers/net/wireless/ath/ath9k/recv.c
drivers/net/wireless/ath/ath9k/recv.c
+12
-5
drivers/net/wireless/iwlwifi/iwl-agn-ict.c
drivers/net/wireless/iwlwifi/iwl-agn-ict.c
+1
-0
drivers/net/wireless/iwlwifi/iwl-scan.c
drivers/net/wireless/iwlwifi/iwl-scan.c
+18
-3
drivers/net/wireless/iwlwifi/iwl-sta.c
drivers/net/wireless/iwlwifi/iwl-sta.c
+1
-1
drivers/net/wireless/rndis_wlan.c
drivers/net/wireless/rndis_wlan.c
+10
-6
drivers/net/wireless/rt2x00/rt2400pci.c
drivers/net/wireless/rt2x00/rt2400pci.c
+5
-4
drivers/net/wireless/rt2x00/rt2500pci.c
drivers/net/wireless/rt2x00/rt2500pci.c
+5
-4
drivers/net/wireless/rt2x00/rt2800usb.c
drivers/net/wireless/rt2x00/rt2800usb.c
+1
-1
drivers/net/wireless/rt2x00/rt2x00pci.c
drivers/net/wireless/rt2x00/rt2x00pci.c
+1
-1
drivers/net/wireless/rt2x00/rt61pci.c
drivers/net/wireless/rt2x00/rt61pci.c
+4
-3
drivers/net/wireless/rt2x00/rt73usb.c
drivers/net/wireless/rt2x00/rt73usb.c
+4
-3
drivers/net/wireless/wl12xx/wl1271_rx.c
drivers/net/wireless/wl12xx/wl1271_rx.c
+2
-0
include/net/mac80211.h
include/net/mac80211.h
+3
-1
net/mac80211/key.c
net/mac80211/key.c
+0
-1
net/mac80211/sta_info.h
net/mac80211/sta_info.h
+1
-1
net/wireless/chan.c
net/wireless/chan.c
+1
-1
net/wireless/nl80211.c
net/wireless/nl80211.c
+4
-2
net/wireless/scan.c
net/wireless/scan.c
+2
-2
No files found.
drivers/net/wireless/ath/ath5k/base.c
View file @
a261af92
...
@@ -1214,6 +1214,7 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
...
@@ -1214,6 +1214,7 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
struct
ath5k_hw
*
ah
=
sc
->
ah
;
struct
ath5k_hw
*
ah
=
sc
->
ah
;
struct
sk_buff
*
skb
=
bf
->
skb
;
struct
sk_buff
*
skb
=
bf
->
skb
;
struct
ath5k_desc
*
ds
;
struct
ath5k_desc
*
ds
;
int
ret
;
if
(
!
skb
)
{
if
(
!
skb
)
{
skb
=
ath5k_rx_skb_alloc
(
sc
,
&
bf
->
skbaddr
);
skb
=
ath5k_rx_skb_alloc
(
sc
,
&
bf
->
skbaddr
);
...
@@ -1240,9 +1241,9 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
...
@@ -1240,9 +1241,9 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
ds
=
bf
->
desc
;
ds
=
bf
->
desc
;
ds
->
ds_link
=
bf
->
daddr
;
/* link to self */
ds
->
ds_link
=
bf
->
daddr
;
/* link to self */
ds
->
ds_data
=
bf
->
skbaddr
;
ds
->
ds_data
=
bf
->
skbaddr
;
ah
->
ah_setup_rx_desc
(
ah
,
ds
,
ret
=
ah
->
ah_setup_rx_desc
(
ah
,
ds
,
ah
->
common
.
rx_bufsize
,
0
);
skb_tailroom
(
skb
),
/* buffer size */
if
(
ret
)
0
)
;
return
ret
;
if
(
sc
->
rxlink
!=
NULL
)
if
(
sc
->
rxlink
!=
NULL
)
*
sc
->
rxlink
=
bf
->
daddr
;
*
sc
->
rxlink
=
bf
->
daddr
;
...
...
drivers/net/wireless/ath/ath9k/beacon.c
View file @
a261af92
...
@@ -76,22 +76,13 @@ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp,
...
@@ -76,22 +76,13 @@ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp,
ds
=
bf
->
bf_desc
;
ds
=
bf
->
bf_desc
;
flags
=
ATH9K_TXDESC_NOACK
;
flags
=
ATH9K_TXDESC_NOACK
;
if
(((
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_ADHOC
)
||
ds
->
ds_link
=
0
;
(
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_MESH_POINT
))
&&
/*
(
ah
->
caps
.
hw_caps
&
ATH9K_HW_CAP_VEOL
))
{
* Switch antenna every beacon.
ds
->
ds_link
=
bf
->
bf_daddr
;
/* self-linked */
* Should only switch every beacon period, not for every SWBA
flags
|=
ATH9K_TXDESC_VEOL
;
* XXX assumes two antennae
/* Let hardware handle antenna switching. */
*/
antenna
=
0
;
antenna
=
((
sc
->
beacon
.
ast_be_xmit
/
sc
->
nbcnvifs
)
&
1
?
2
:
1
);
}
else
{
ds
->
ds_link
=
0
;
/*
* Switch antenna every beacon.
* Should only switch every beacon period, not for every SWBA
* XXX assumes two antennae
*/
antenna
=
((
sc
->
beacon
.
ast_be_xmit
/
sc
->
nbcnvifs
)
&
1
?
2
:
1
);
}
sband
=
&
sc
->
sbands
[
common
->
hw
->
conf
.
channel
->
band
];
sband
=
&
sc
->
sbands
[
common
->
hw
->
conf
.
channel
->
band
];
rate
=
sband
->
bitrates
[
rateidx
].
hw_value
;
rate
=
sband
->
bitrates
[
rateidx
].
hw_value
;
...
@@ -215,36 +206,6 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,
...
@@ -215,36 +206,6 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,
return
bf
;
return
bf
;
}
}
/*
* Startup beacon transmission for adhoc mode when they are sent entirely
* by the hardware using the self-linked descriptor + veol trick.
*/
static
void
ath_beacon_start_adhoc
(
struct
ath_softc
*
sc
,
struct
ieee80211_vif
*
vif
)
{
struct
ath_hw
*
ah
=
sc
->
sc_ah
;
struct
ath_common
*
common
=
ath9k_hw_common
(
ah
);
struct
ath_buf
*
bf
;
struct
ath_vif
*
avp
;
struct
sk_buff
*
skb
;
avp
=
(
void
*
)
vif
->
drv_priv
;
if
(
avp
->
av_bcbuf
==
NULL
)
return
;
bf
=
avp
->
av_bcbuf
;
skb
=
bf
->
bf_mpdu
;
ath_beacon_setup
(
sc
,
avp
,
bf
,
0
);
/* NB: caller is known to have already stopped tx dma */
ath9k_hw_puttxbuf
(
ah
,
sc
->
beacon
.
beaconq
,
bf
->
bf_daddr
);
ath9k_hw_txstart
(
ah
,
sc
->
beacon
.
beaconq
);
ath_print
(
common
,
ATH_DBG_BEACON
,
"TXDP%u = %llx (%p)
\n
"
,
sc
->
beacon
.
beaconq
,
ito64
(
bf
->
bf_daddr
),
bf
->
bf_desc
);
}
int
ath_beacon_alloc
(
struct
ath_wiphy
*
aphy
,
struct
ieee80211_vif
*
vif
)
int
ath_beacon_alloc
(
struct
ath_wiphy
*
aphy
,
struct
ieee80211_vif
*
vif
)
{
{
struct
ath_softc
*
sc
=
aphy
->
sc
;
struct
ath_softc
*
sc
=
aphy
->
sc
;
...
@@ -265,7 +226,8 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
...
@@ -265,7 +226,8 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
list_del
(
&
avp
->
av_bcbuf
->
list
);
list_del
(
&
avp
->
av_bcbuf
->
list
);
if
(
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_AP
||
if
(
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_AP
||
!
(
sc
->
sc_ah
->
caps
.
hw_caps
&
ATH9K_HW_CAP_VEOL
))
{
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_ADHOC
||
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_MESH_POINT
)
{
int
slot
;
int
slot
;
/*
/*
* Assign the vif to a beacon xmit slot. As
* Assign the vif to a beacon xmit slot. As
...
@@ -274,17 +236,11 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
...
@@ -274,17 +236,11 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
avp
->
av_bslot
=
0
;
avp
->
av_bslot
=
0
;
for
(
slot
=
0
;
slot
<
ATH_BCBUF
;
slot
++
)
for
(
slot
=
0
;
slot
<
ATH_BCBUF
;
slot
++
)
if
(
sc
->
beacon
.
bslot
[
slot
]
==
NULL
)
{
if
(
sc
->
beacon
.
bslot
[
slot
]
==
NULL
)
{
/*
* XXX hack, space out slots to better
* deal with misses
*/
if
(
slot
+
1
<
ATH_BCBUF
&&
sc
->
beacon
.
bslot
[
slot
+
1
]
==
NULL
)
{
avp
->
av_bslot
=
slot
+
1
;
break
;
}
avp
->
av_bslot
=
slot
;
avp
->
av_bslot
=
slot
;
/* NB: keep looking for a double slot */
/* NB: keep looking for a double slot */
if
(
slot
==
0
||
!
sc
->
beacon
.
bslot
[
slot
-
1
])
break
;
}
}
BUG_ON
(
sc
->
beacon
.
bslot
[
avp
->
av_bslot
]
!=
NULL
);
BUG_ON
(
sc
->
beacon
.
bslot
[
avp
->
av_bslot
]
!=
NULL
);
sc
->
beacon
.
bslot
[
avp
->
av_bslot
]
=
vif
;
sc
->
beacon
.
bslot
[
avp
->
av_bslot
]
=
vif
;
...
@@ -721,8 +677,7 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
...
@@ -721,8 +677,7 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
* self-linked tx descriptor and let the hardware deal with things.
* self-linked tx descriptor and let the hardware deal with things.
*/
*/
intval
|=
ATH9K_BEACON_ENA
;
intval
|=
ATH9K_BEACON_ENA
;
if
(
!
(
ah
->
caps
.
hw_caps
&
ATH9K_HW_CAP_VEOL
))
ah
->
imask
|=
ATH9K_INT_SWBA
;
ah
->
imask
|=
ATH9K_INT_SWBA
;
ath_beaconq_config
(
sc
);
ath_beaconq_config
(
sc
);
...
@@ -732,10 +687,6 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
...
@@ -732,10 +687,6 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
ath9k_beacon_init
(
sc
,
nexttbtt
,
intval
);
ath9k_beacon_init
(
sc
,
nexttbtt
,
intval
);
sc
->
beacon
.
bmisscnt
=
0
;
sc
->
beacon
.
bmisscnt
=
0
;
ath9k_hw_set_interrupts
(
ah
,
ah
->
imask
);
ath9k_hw_set_interrupts
(
ah
,
ah
->
imask
);
/* FIXME: Handle properly when vif is NULL */
if
(
vif
&&
ah
->
caps
.
hw_caps
&
ATH9K_HW_CAP_VEOL
)
ath_beacon_start_adhoc
(
sc
,
vif
);
}
}
void
ath_beacon_config
(
struct
ath_softc
*
sc
,
struct
ieee80211_vif
*
vif
)
void
ath_beacon_config
(
struct
ath_softc
*
sc
,
struct
ieee80211_vif
*
vif
)
...
...
drivers/net/wireless/ath/ath9k/hif_usb.c
View file @
a261af92
...
@@ -107,12 +107,14 @@ static inline void ath9k_skb_queue_purge(struct hif_device_usb *hif_dev,
...
@@ -107,12 +107,14 @@ static inline void ath9k_skb_queue_purge(struct hif_device_usb *hif_dev,
static
void
hif_usb_tx_cb
(
struct
urb
*
urb
)
static
void
hif_usb_tx_cb
(
struct
urb
*
urb
)
{
{
struct
tx_buf
*
tx_buf
=
(
struct
tx_buf
*
)
urb
->
context
;
struct
tx_buf
*
tx_buf
=
(
struct
tx_buf
*
)
urb
->
context
;
struct
hif_device_usb
*
hif_dev
=
tx_buf
->
hif_dev
;
struct
hif_device_usb
*
hif_dev
;
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
if
(
!
hif_dev
||
!
tx_buf
)
if
(
!
tx_buf
||
!
tx_buf
->
hif_dev
)
return
;
return
;
hif_dev
=
tx_buf
->
hif_dev
;
switch
(
urb
->
status
)
{
switch
(
urb
->
status
)
{
case
0
:
case
0
:
break
;
break
;
...
@@ -607,6 +609,10 @@ static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
...
@@ -607,6 +609,10 @@ static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
return
0
;
return
0
;
err:
err:
if
(
tx_buf
)
{
kfree
(
tx_buf
->
buf
);
kfree
(
tx_buf
);
}
ath9k_hif_usb_dealloc_tx_urbs
(
hif_dev
);
ath9k_hif_usb_dealloc_tx_urbs
(
hif_dev
);
return
-
ENOMEM
;
return
-
ENOMEM
;
}
}
...
...
drivers/net/wireless/ath/ath9k/htc.h
View file @
a261af92
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include <linux/skbuff.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/netdevice.h>
#include <linux/leds.h>
#include <linux/leds.h>
#include <linux/slab.h>
#include <net/mac80211.h>
#include <net/mac80211.h>
#include "common.h"
#include "common.h"
...
...
drivers/net/wireless/ath/ath9k/main.c
View file @
a261af92
...
@@ -752,7 +752,6 @@ static int ath_key_config(struct ath_common *common,
...
@@ -752,7 +752,6 @@ static int ath_key_config(struct ath_common *common,
struct
ath_hw
*
ah
=
common
->
ah
;
struct
ath_hw
*
ah
=
common
->
ah
;
struct
ath9k_keyval
hk
;
struct
ath9k_keyval
hk
;
const
u8
*
mac
=
NULL
;
const
u8
*
mac
=
NULL
;
u8
gmac
[
ETH_ALEN
];
int
ret
=
0
;
int
ret
=
0
;
int
idx
;
int
idx
;
...
@@ -776,30 +775,9 @@ static int ath_key_config(struct ath_common *common,
...
@@ -776,30 +775,9 @@ static int ath_key_config(struct ath_common *common,
memcpy
(
hk
.
kv_val
,
key
->
key
,
key
->
keylen
);
memcpy
(
hk
.
kv_val
,
key
->
key
,
key
->
keylen
);
if
(
!
(
key
->
flags
&
IEEE80211_KEY_FLAG_PAIRWISE
))
{
if
(
!
(
key
->
flags
&
IEEE80211_KEY_FLAG_PAIRWISE
))
{
/* For now, use the default keys for broadcast keys. This may
if
(
key
->
ap_addr
)
{
* need to change with virtual interfaces. */
/*
idx
=
key
->
keyidx
;
* Group keys on hardware that supports multicast frame
* key search use a mac that is the sender's address with
* the high bit set instead of the app-specified address.
*/
memcpy
(
gmac
,
key
->
ap_addr
,
ETH_ALEN
);
gmac
[
0
]
|=
0x80
;
mac
=
gmac
;
if
(
key
->
alg
==
ALG_TKIP
)
idx
=
ath_reserve_key_cache_slot_tkip
(
common
);
else
idx
=
ath_reserve_key_cache_slot
(
common
);
if
(
idx
<
0
)
mac
=
NULL
;
/* no free key cache entries */
}
if
(
!
mac
)
{
/* For now, use the default keys for broadcast keys. This may
* need to change with virtual interfaces. */
idx
=
key
->
keyidx
;
}
}
else
if
(
key
->
keyidx
)
{
}
else
if
(
key
->
keyidx
)
{
if
(
WARN_ON
(
!
sta
))
if
(
WARN_ON
(
!
sta
))
return
-
EOPNOTSUPP
;
return
-
EOPNOTSUPP
;
...
...
drivers/net/wireless/ath/ath9k/pci.c
View file @
a261af92
...
@@ -28,7 +28,6 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = {
...
@@ -28,7 +28,6 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = {
{
PCI_VDEVICE
(
ATHEROS
,
0x002C
)
},
/* PCI-E 802.11n bonded out */
{
PCI_VDEVICE
(
ATHEROS
,
0x002C
)
},
/* PCI-E 802.11n bonded out */
{
PCI_VDEVICE
(
ATHEROS
,
0x002D
)
},
/* PCI */
{
PCI_VDEVICE
(
ATHEROS
,
0x002D
)
},
/* PCI */
{
PCI_VDEVICE
(
ATHEROS
,
0x002E
)
},
/* PCI-E */
{
PCI_VDEVICE
(
ATHEROS
,
0x002E
)
},
/* PCI-E */
{
PCI_VDEVICE
(
ATHEROS
,
0x0030
)
},
/* PCI-E AR9300 */
{
0
}
{
0
}
};
};
...
...
drivers/net/wireless/ath/ath9k/recv.c
View file @
a261af92
...
@@ -19,6 +19,12 @@
...
@@ -19,6 +19,12 @@
#define SKB_CB_ATHBUF(__skb) (*((struct ath_buf **)__skb->cb))
#define SKB_CB_ATHBUF(__skb) (*((struct ath_buf **)__skb->cb))
static
inline
bool
ath9k_check_auto_sleep
(
struct
ath_softc
*
sc
)
{
return
sc
->
ps_enabled
&&
(
sc
->
sc_ah
->
caps
.
hw_caps
&
ATH9K_HW_CAP_AUTOSLEEP
);
}
static
struct
ieee80211_hw
*
ath_get_virt_hw
(
struct
ath_softc
*
sc
,
static
struct
ieee80211_hw
*
ath_get_virt_hw
(
struct
ath_softc
*
sc
,
struct
ieee80211_hdr
*
hdr
)
struct
ieee80211_hdr
*
hdr
)
{
{
...
@@ -616,8 +622,8 @@ static void ath_rx_ps(struct ath_softc *sc, struct sk_buff *skb)
...
@@ -616,8 +622,8 @@ static void ath_rx_ps(struct ath_softc *sc, struct sk_buff *skb)
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
/* Process Beacon and CAB receive in PS state */
/* Process Beacon and CAB receive in PS state */
if
((
sc
->
ps_flags
&
PS_WAIT_FOR_BEACON
)
&&
if
((
(
sc
->
ps_flags
&
PS_WAIT_FOR_BEACON
)
||
ath9k_check_auto_sleep
(
sc
))
ieee80211_is_beacon
(
hdr
->
frame_control
))
&&
ieee80211_is_beacon
(
hdr
->
frame_control
))
ath_rx_ps_beacon
(
sc
,
skb
);
ath_rx_ps_beacon
(
sc
,
skb
);
else
if
((
sc
->
ps_flags
&
PS_WAIT_FOR_CAB
)
&&
else
if
((
sc
->
ps_flags
&
PS_WAIT_FOR_CAB
)
&&
(
ieee80211_is_data
(
hdr
->
frame_control
)
||
(
ieee80211_is_data
(
hdr
->
frame_control
)
||
...
@@ -932,9 +938,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
...
@@ -932,9 +938,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
sc
->
rx
.
rxotherant
=
0
;
sc
->
rx
.
rxotherant
=
0
;
}
}
if
(
unlikely
(
sc
->
ps_flags
&
(
PS_WAIT_FOR_BEACON
|
if
(
unlikely
(
ath9k_check_auto_sleep
(
sc
)
||
PS_WAIT_FOR_CAB
|
(
sc
->
ps_flags
&
(
PS_WAIT_FOR_BEACON
|
PS_WAIT_FOR_PSPOLL_DATA
)))
PS_WAIT_FOR_CAB
|
PS_WAIT_FOR_PSPOLL_DATA
))))
ath_rx_ps
(
sc
,
skb
);
ath_rx_ps
(
sc
,
skb
);
ath_rx_send_to_mac80211
(
hw
,
sc
,
skb
,
rxs
);
ath_rx_send_to_mac80211
(
hw
,
sc
,
skb
,
rxs
);
...
...
drivers/net/wireless/iwlwifi/iwl-agn-ict.c
View file @
a261af92
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#include <linux/module.h>
#include <linux/module.h>
#include <linux/etherdevice.h>
#include <linux/etherdevice.h>
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/gfp.h>
#include <net/mac80211.h>
#include <net/mac80211.h>
#include "iwl-dev.h"
#include "iwl-dev.h"
...
...
drivers/net/wireless/iwlwifi/iwl-scan.c
View file @
a261af92
...
@@ -376,6 +376,11 @@ void iwl_bg_start_internal_scan(struct work_struct *work)
...
@@ -376,6 +376,11 @@ void iwl_bg_start_internal_scan(struct work_struct *work)
mutex_lock
(
&
priv
->
mutex
);
mutex_lock
(
&
priv
->
mutex
);
if
(
priv
->
is_internal_short_scan
==
true
)
{
IWL_DEBUG_SCAN
(
priv
,
"Internal scan already in progress
\n
"
);
goto
unlock
;
}
if
(
!
iwl_is_ready_rf
(
priv
))
{
if
(
!
iwl_is_ready_rf
(
priv
))
{
IWL_DEBUG_SCAN
(
priv
,
"not ready or exit pending
\n
"
);
IWL_DEBUG_SCAN
(
priv
,
"not ready or exit pending
\n
"
);
goto
unlock
;
goto
unlock
;
...
@@ -497,17 +502,27 @@ void iwl_bg_scan_completed(struct work_struct *work)
...
@@ -497,17 +502,27 @@ void iwl_bg_scan_completed(struct work_struct *work)
{
{
struct
iwl_priv
*
priv
=
struct
iwl_priv
*
priv
=
container_of
(
work
,
struct
iwl_priv
,
scan_completed
);
container_of
(
work
,
struct
iwl_priv
,
scan_completed
);
bool
internal
=
false
;
IWL_DEBUG_SCAN
(
priv
,
"SCAN complete scan
\n
"
);
IWL_DEBUG_SCAN
(
priv
,
"SCAN complete scan
\n
"
);
cancel_delayed_work
(
&
priv
->
scan_check
);
cancel_delayed_work
(
&
priv
->
scan_check
);
if
(
!
priv
->
is_internal_short_scan
)
mutex_lock
(
&
priv
->
mutex
);
ieee80211_scan_completed
(
priv
->
hw
,
false
);
if
(
priv
->
is_internal_short_scan
)
{
else
{
priv
->
is_internal_short_scan
=
false
;
priv
->
is_internal_short_scan
=
false
;
IWL_DEBUG_SCAN
(
priv
,
"internal short scan completed
\n
"
);
IWL_DEBUG_SCAN
(
priv
,
"internal short scan completed
\n
"
);
internal
=
true
;
}
}
mutex_unlock
(
&
priv
->
mutex
);
/*
* Do not hold mutex here since this will cause mac80211 to call
* into driver again into functions that will attempt to take
* mutex.
*/
if
(
!
internal
)
ieee80211_scan_completed
(
priv
->
hw
,
false
);
if
(
test_bit
(
STATUS_EXIT_PENDING
,
&
priv
->
status
))
if
(
test_bit
(
STATUS_EXIT_PENDING
,
&
priv
->
status
))
return
;
return
;
...
...
drivers/net/wireless/iwlwifi/iwl-sta.c
View file @
a261af92
...
@@ -431,7 +431,7 @@ int iwl_add_bssid_station(struct iwl_priv *priv, const u8 *addr, bool init_rs,
...
@@ -431,7 +431,7 @@ int iwl_add_bssid_station(struct iwl_priv *priv, const u8 *addr, bool init_rs,
struct
iwl_link_quality_cmd
*
link_cmd
;
struct
iwl_link_quality_cmd
*
link_cmd
;
unsigned
long
flags
;
unsigned
long
flags
;
if
(
*
sta_id_r
)
if
(
sta_id_r
)
*
sta_id_r
=
IWL_INVALID_STATION
;
*
sta_id_r
=
IWL_INVALID_STATION
;
ret
=
iwl_add_station_common
(
priv
,
addr
,
0
,
NULL
,
&
sta_id
);
ret
=
iwl_add_station_common
(
priv
,
addr
,
0
,
NULL
,
&
sta_id
);
...
...
drivers/net/wireless/rndis_wlan.c
View file @
a261af92
...
@@ -2572,14 +2572,18 @@ static void rndis_wlan_do_link_up_work(struct usbnet *usbdev)
...
@@ -2572,14 +2572,18 @@ static void rndis_wlan_do_link_up_work(struct usbnet *usbdev)
static
void
rndis_wlan_do_link_down_work
(
struct
usbnet
*
usbdev
)
static
void
rndis_wlan_do_link_down_work
(
struct
usbnet
*
usbdev
)
{
{
union
iwreq_data
evt
;
struct
rndis_wlan_private
*
priv
=
get_rndis_wlan_priv
(
usbdev
)
;
netif_carrier_off
(
usbdev
->
net
);
if
(
priv
->
connected
)
{
priv
->
connected
=
false
;
memset
(
priv
->
bssid
,
0
,
ETH_ALEN
);
deauthenticate
(
usbdev
);
evt
.
data
.
flags
=
0
;
cfg80211_disconnected
(
usbdev
->
net
,
0
,
NULL
,
0
,
GFP_KERNEL
)
;
evt
.
data
.
length
=
0
;
}
memset
(
evt
.
ap_addr
.
sa_data
,
0
,
ETH_ALEN
);
wireless_send_event
(
usbdev
->
net
,
SIOCGIWAP
,
&
evt
,
NULL
);
netif_carrier_off
(
usbdev
->
net
);
}
}
static
void
rndis_wlan_worker
(
struct
work_struct
*
work
)
static
void
rndis_wlan_worker
(
struct
work_struct
*
work
)
...
...
drivers/net/wireless/rt2x00/rt2400pci.c
View file @
a261af92
...
@@ -926,7 +926,7 @@ static void rt2400pci_disable_radio(struct rt2x00_dev *rt2x00dev)
...
@@ -926,7 +926,7 @@ static void rt2400pci_disable_radio(struct rt2x00_dev *rt2x00dev)
static
int
rt2400pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
static
int
rt2400pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
enum
dev_state
state
)
{
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
unsigned
int
i
;
char
put_to_sleep
;
char
put_to_sleep
;
char
bbp_state
;
char
bbp_state
;
...
@@ -947,11 +947,12 @@ static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev,
...
@@ -947,11 +947,12 @@ static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev,
* device has entered the correct state.
* device has entered the correct state.
*/
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
);
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
2
);
bbp_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_BBP_CURR_STATE
);
bbp_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_BBP_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_RF_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_RF_CURR_STATE
);
if
(
bbp_state
==
state
&&
rf_state
==
state
)
if
(
bbp_state
==
state
&&
rf_state
==
state
)
return
0
;
return
0
;
rt2x00pci_register_write
(
rt2x00dev
,
PWRCSR1
,
reg
);
msleep
(
10
);
msleep
(
10
);
}
}
...
...
drivers/net/wireless/rt2x00/rt2500pci.c
View file @
a261af92
...
@@ -1084,7 +1084,7 @@ static void rt2500pci_disable_radio(struct rt2x00_dev *rt2x00dev)
...
@@ -1084,7 +1084,7 @@ static void rt2500pci_disable_radio(struct rt2x00_dev *rt2x00dev)
static
int
rt2500pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
static
int
rt2500pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
enum
dev_state
state
)
{
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
unsigned
int
i
;
char
put_to_sleep
;
char
put_to_sleep
;
char
bbp_state
;
char
bbp_state
;
...
@@ -1105,11 +1105,12 @@ static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev,
...
@@ -1105,11 +1105,12 @@ static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev,
* device has entered the correct state.
* device has entered the correct state.
*/
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
);
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
2
);
bbp_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_BBP_CURR_STATE
);
bbp_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_BBP_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_RF_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_RF_CURR_STATE
);
if
(
bbp_state
==
state
&&
rf_state
==
state
)
if
(
bbp_state
==
state
&&
rf_state
==
state
)
return
0
;
return
0
;
rt2x00pci_register_write
(
rt2x00dev
,
PWRCSR1
,
reg
);
msleep
(
10
);
msleep
(
10
);
}
}
...
...
drivers/net/wireless/rt2x00/rt2800usb.c
View file @
a261af92
...
@@ -413,7 +413,7 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
...
@@ -413,7 +413,7 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
*/
*/
rt2x00_desc_read
(
txi
,
0
,
&
word
);
rt2x00_desc_read
(
txi
,
0
,
&
word
);
rt2x00_set_field32
(
&
word
,
TXINFO_W0_USB_DMA_TX_PKT_LEN
,
rt2x00_set_field32
(
&
word
,
TXINFO_W0_USB_DMA_TX_PKT_LEN
,
skb
->
len
+
TXWI
_DESC_SIZE
);
skb
->
len
-
TXINFO
_DESC_SIZE
);
rt2x00_set_field32
(
&
word
,
TXINFO_W0_WIV
,
rt2x00_set_field32
(
&
word
,
TXINFO_W0_WIV
,
!
test_bit
(
ENTRY_TXD_ENCRYPT_IV
,
&
txdesc
->
flags
));
!
test_bit
(
ENTRY_TXD_ENCRYPT_IV
,
&
txdesc
->
flags
));
rt2x00_set_field32
(
&
word
,
TXINFO_W0_QSEL
,
2
);
rt2x00_set_field32
(
&
word
,
TXINFO_W0_QSEL
,
2
);
...
...
drivers/net/wireless/rt2x00/rt2x00pci.c
View file @
a261af92
...
@@ -206,7 +206,7 @@ void rt2x00pci_uninitialize(struct rt2x00_dev *rt2x00dev)
...
@@ -206,7 +206,7 @@ void rt2x00pci_uninitialize(struct rt2x00_dev *rt2x00dev)
/*
/*
* Free irq line.
* Free irq line.
*/
*/
free_irq
(
to_pci_dev
(
rt2x00dev
->
dev
)
->
irq
,
rt2x00dev
);
free_irq
(
rt2x00dev
->
irq
,
rt2x00dev
);
/*
/*
* Free DMA
* Free DMA
...
...
drivers/net/wireless/rt2x00/rt61pci.c
View file @
a261af92
...
@@ -1689,7 +1689,7 @@ static void rt61pci_disable_radio(struct rt2x00_dev *rt2x00dev)
...
@@ -1689,7 +1689,7 @@ static void rt61pci_disable_radio(struct rt2x00_dev *rt2x00dev)
static
int
rt61pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
static
int
rt61pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
{
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
unsigned
int
i
;
char
put_to_sleep
;
char
put_to_sleep
;
...
@@ -1706,10 +1706,11 @@ static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
...
@@ -1706,10 +1706,11 @@ static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
* device has entered the correct state.
* device has entered the correct state.
*/
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00pci_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
);
rt2x00pci_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
2
);
state
=
rt2x00_get_field32
(
reg
,
MAC_CSR12_BBP_CURRENT_STATE
);
state
=
rt2x00_get_field32
(
reg
2
,
MAC_CSR12_BBP_CURRENT_STATE
);
if
(
state
==
!
put_to_sleep
)
if
(
state
==
!
put_to_sleep
)
return
0
;
return
0
;
rt2x00pci_register_write
(
rt2x00dev
,
MAC_CSR12
,
reg
);
msleep
(
10
);
msleep
(
10
);
}
}
...
...
drivers/net/wireless/rt2x00/rt73usb.c
View file @
a261af92
...
@@ -1366,7 +1366,7 @@ static void rt73usb_disable_radio(struct rt2x00_dev *rt2x00dev)
...
@@ -1366,7 +1366,7 @@ static void rt73usb_disable_radio(struct rt2x00_dev *rt2x00dev)
static
int
rt73usb_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
static
int
rt73usb_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
{
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
unsigned
int
i
;
char
put_to_sleep
;
char
put_to_sleep
;
...
@@ -1383,10 +1383,11 @@ static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
...
@@ -1383,10 +1383,11 @@ static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
* device has entered the correct state.
* device has entered the correct state.
*/
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00usb_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
);
rt2x00usb_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
2
);
state
=
rt2x00_get_field32
(
reg
,
MAC_CSR12_BBP_CURRENT_STATE
);
state
=
rt2x00_get_field32
(
reg
2
,
MAC_CSR12_BBP_CURRENT_STATE
);
if
(
state
==
!
put_to_sleep
)
if
(
state
==
!
put_to_sleep
)
return
0
;
return
0
;
rt2x00usb_register_write
(
rt2x00dev
,
MAC_CSR12
,
reg
);
msleep
(
10
);
msleep
(
10
);
}
}
...
...
drivers/net/wireless/wl12xx/wl1271_rx.c
View file @
a261af92
...
@@ -113,6 +113,8 @@ static void wl1271_rx_handle_data(struct wl1271 *wl, u32 length)
...
@@ -113,6 +113,8 @@ static void wl1271_rx_handle_data(struct wl1271 *wl, u32 length)
wl1271_debug
(
DEBUG_RX
,
"rx skb 0x%p: %d B %s"
,
skb
,
skb
->
len
,
wl1271_debug
(
DEBUG_RX
,
"rx skb 0x%p: %d B %s"
,
skb
,
skb
->
len
,
beacon
?
"beacon"
:
""
);
beacon
?
"beacon"
:
""
);
skb_trim
(
skb
,
skb
->
len
-
desc
->
pad_len
);
memcpy
(
IEEE80211_SKB_RXCB
(
skb
),
&
rx_status
,
sizeof
(
rx_status
));
memcpy
(
IEEE80211_SKB_RXCB
(
skb
),
&
rx_status
,
sizeof
(
rx_status
));
ieee80211_rx_ni
(
wl
->
hw
,
skb
);
ieee80211_rx_ni
(
wl
->
hw
,
skb
);
}
}
...
...
include/net/mac80211.h
View file @
a261af92
...
@@ -815,6 +815,7 @@ enum ieee80211_key_flags {
...
@@ -815,6 +815,7 @@ enum ieee80211_key_flags {
* encrypted in hardware.
* encrypted in hardware.
* @alg: The key algorithm.
* @alg: The key algorithm.
* @flags: key flags, see &enum ieee80211_key_flags.
* @flags: key flags, see &enum ieee80211_key_flags.
* @ap_addr: AP's MAC address
* @keyidx: the key index (0-3)
* @keyidx: the key index (0-3)
* @keylen: key material length
* @keylen: key material length
* @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte)
* @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte)
...
@@ -831,7 +832,6 @@ struct ieee80211_key_conf {
...
@@ -831,7 +832,6 @@ struct ieee80211_key_conf {
u8
iv_len
;
u8
iv_len
;
u8
hw_key_idx
;
u8
hw_key_idx
;
u8
flags
;
u8
flags
;
u8
*
ap_addr
;
s8
keyidx
;
s8
keyidx
;
u8
keylen
;
u8
keylen
;
u8
key
[
0
];
u8
key
[
0
];
...
@@ -1638,6 +1638,8 @@ enum ieee80211_ampdu_mlme_action {
...
@@ -1638,6 +1638,8 @@ enum ieee80211_ampdu_mlme_action {
* Returns a negative error code on failure.
* Returns a negative error code on failure.
* The callback must be atomic.
* The callback must be atomic.
*
*
* @get_survey: Return per-channel survey information
*
* @rfkill_poll: Poll rfkill hardware state. If you need this, you also
* @rfkill_poll: Poll rfkill hardware state. If you need this, you also
* need to set wiphy->rfkill_poll to %true before registration,
* need to set wiphy->rfkill_poll to %true before registration,
* and need to call wiphy_rfkill_set_hw_state() in the callback.
* and need to call wiphy_rfkill_set_hw_state() in the callback.
...
...
net/mac80211/key.c
View file @
a261af92
...
@@ -140,7 +140,6 @@ static void ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
...
@@ -140,7 +140,6 @@ static void ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
struct
ieee80211_sub_if_data
,
struct
ieee80211_sub_if_data
,
u
.
ap
);
u
.
ap
);
key
->
conf
.
ap_addr
=
sdata
->
dev
->
dev_addr
;
ret
=
drv_set_key
(
key
->
local
,
SET_KEY
,
sdata
,
sta
,
&
key
->
conf
);
ret
=
drv_set_key
(
key
->
local
,
SET_KEY
,
sdata
,
sta
,
&
key
->
conf
);
if
(
!
ret
)
{
if
(
!
ret
)
{
...
...
net/mac80211/sta_info.h
View file @
a261af92
...
@@ -145,7 +145,7 @@ enum plink_state {
...
@@ -145,7 +145,7 @@ enum plink_state {
/**
/**
* struct sta_ampdu_mlme - STA aggregation information.
* struct sta_ampdu_mlme - STA aggregation information.
*
*
* @tid_
stat
e_rx: TID's state in Rx session state machine.
* @tid_
activ
e_rx: TID's state in Rx session state machine.
* @tid_rx: aggregation info for Rx per TID
* @tid_rx: aggregation info for Rx per TID
* @tid_state_tx: TID's state in Tx session state machine.
* @tid_state_tx: TID's state in Tx session state machine.
* @tid_tx: aggregation info for Tx per TID
* @tid_tx: aggregation info for Tx per TID
...
...
net/wireless/chan.c
View file @
a261af92
...
@@ -50,7 +50,7 @@ int cfg80211_set_freq(struct cfg80211_registered_device *rdev,
...
@@ -50,7 +50,7 @@ int cfg80211_set_freq(struct cfg80211_registered_device *rdev,
struct
ieee80211_channel
*
chan
;
struct
ieee80211_channel
*
chan
;
int
result
;
int
result
;
if
(
wdev
->
iftype
==
NL80211_IFTYPE_MONITOR
)
if
(
wdev
&&
wdev
->
iftype
==
NL80211_IFTYPE_MONITOR
)
wdev
=
NULL
;
wdev
=
NULL
;
if
(
wdev
)
{
if
(
wdev
)
{
...
...
net/wireless/nl80211.c
View file @
a261af92
...
@@ -4443,9 +4443,10 @@ static int nl80211_remain_on_channel(struct sk_buff *skb,
...
@@ -4443,9 +4443,10 @@ static int nl80211_remain_on_channel(struct sk_buff *skb,
if
(
channel_type
!=
NL80211_CHAN_NO_HT
&&
if
(
channel_type
!=
NL80211_CHAN_NO_HT
&&
channel_type
!=
NL80211_CHAN_HT20
&&
channel_type
!=
NL80211_CHAN_HT20
&&
channel_type
!=
NL80211_CHAN_HT40PLUS
&&
channel_type
!=
NL80211_CHAN_HT40PLUS
&&
channel_type
!=
NL80211_CHAN_HT40MINUS
)
channel_type
!=
NL80211_CHAN_HT40MINUS
)
{
err
=
-
EINVAL
;
err
=
-
EINVAL
;
goto
out
;
goto
out
;
}
}
}
freq
=
nla_get_u32
(
info
->
attrs
[
NL80211_ATTR_WIPHY_FREQ
]);
freq
=
nla_get_u32
(
info
->
attrs
[
NL80211_ATTR_WIPHY_FREQ
]);
...
@@ -4717,9 +4718,10 @@ static int nl80211_action(struct sk_buff *skb, struct genl_info *info)
...
@@ -4717,9 +4718,10 @@ static int nl80211_action(struct sk_buff *skb, struct genl_info *info)
if
(
channel_type
!=
NL80211_CHAN_NO_HT
&&
if
(
channel_type
!=
NL80211_CHAN_NO_HT
&&
channel_type
!=
NL80211_CHAN_HT20
&&
channel_type
!=
NL80211_CHAN_HT20
&&
channel_type
!=
NL80211_CHAN_HT40PLUS
&&
channel_type
!=
NL80211_CHAN_HT40PLUS
&&
channel_type
!=
NL80211_CHAN_HT40MINUS
)
channel_type
!=
NL80211_CHAN_HT40MINUS
)
{
err
=
-
EINVAL
;
err
=
-
EINVAL
;
goto
out
;
goto
out
;
}
}
}
freq
=
nla_get_u32
(
info
->
attrs
[
NL80211_ATTR_WIPHY_FREQ
]);
freq
=
nla_get_u32
(
info
->
attrs
[
NL80211_ATTR_WIPHY_FREQ
]);
...
...
net/wireless/scan.c
View file @
a261af92
...
@@ -515,7 +515,7 @@ cfg80211_inform_bss(struct wiphy *wiphy,
...
@@ -515,7 +515,7 @@ cfg80211_inform_bss(struct wiphy *wiphy,
privsz
=
wiphy
->
bss_priv_size
;
privsz
=
wiphy
->
bss_priv_size
;
if
(
WARN_ON
(
wiphy
->
signal_type
==
NL80211_BSS_SIGNAL
_UNSPEC
&&
if
(
WARN_ON
(
wiphy
->
signal_type
==
CFG80211_SIGNAL_TYPE
_UNSPEC
&&
(
signal
<
0
||
signal
>
100
)))
(
signal
<
0
||
signal
>
100
)))
return
NULL
;
return
NULL
;
...
@@ -571,7 +571,7 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
...
@@ -571,7 +571,7 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
u
.
probe_resp
.
variable
);
u
.
probe_resp
.
variable
);
size_t
privsz
=
wiphy
->
bss_priv_size
;
size_t
privsz
=
wiphy
->
bss_priv_size
;
if
(
WARN_ON
(
wiphy
->
signal_type
==
NL80211_BSS_SIGNAL
_UNSPEC
&&
if
(
WARN_ON
(
wiphy
->
signal_type
==
CFG80211_SIGNAL_TYPE
_UNSPEC
&&
(
signal
<
0
||
signal
>
100
)))
(
signal
<
0
||
signal
>
100
)))
return
NULL
;
return
NULL
;
...
...
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