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
Kirill Smelkov
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)
struct
ath5k_hw
*
ah
=
sc
->
ah
;
struct
sk_buff
*
skb
=
bf
->
skb
;
struct
ath5k_desc
*
ds
;
int
ret
;
if
(
!
skb
)
{
skb
=
ath5k_rx_skb_alloc
(
sc
,
&
bf
->
skbaddr
);
...
...
@@ -1240,9 +1241,9 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
ds
=
bf
->
desc
;
ds
->
ds_link
=
bf
->
daddr
;
/* link to self */
ds
->
ds_data
=
bf
->
skbaddr
;
ah
->
ah_setup_rx_desc
(
ah
,
ds
,
skb_tailroom
(
skb
),
/* buffer size */
0
)
;
ret
=
ah
->
ah_setup_rx_desc
(
ah
,
ds
,
ah
->
common
.
rx_bufsize
,
0
);
if
(
ret
)
return
ret
;
if
(
sc
->
rxlink
!=
NULL
)
*
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,
ds
=
bf
->
bf_desc
;
flags
=
ATH9K_TXDESC_NOACK
;
if
(((
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_ADHOC
)
||
(
sc
->
sc_ah
->
opmode
==
NL80211_IFTYPE_MESH_POINT
))
&&
(
ah
->
caps
.
hw_caps
&
ATH9K_HW_CAP_VEOL
))
{
ds
->
ds_link
=
bf
->
bf_daddr
;
/* self-linked */
flags
|=
ATH9K_TXDESC_VEOL
;
/* Let hardware handle antenna switching. */
antenna
=
0
;
}
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
);
}
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
];
rate
=
sband
->
bitrates
[
rateidx
].
hw_value
;
...
...
@@ -215,36 +206,6 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,
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
)
{
struct
ath_softc
*
sc
=
aphy
->
sc
;
...
...
@@ -265,7 +226,8 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
list_del
(
&
avp
->
av_bcbuf
->
list
);
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
;
/*
* 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)
avp
->
av_bslot
=
0
;
for
(
slot
=
0
;
slot
<
ATH_BCBUF
;
slot
++
)
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
;
/* 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
);
sc
->
beacon
.
bslot
[
avp
->
av_bslot
]
=
vif
;
...
...
@@ -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.
*/
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
);
...
...
@@ -732,10 +687,6 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
ath9k_beacon_init
(
sc
,
nexttbtt
,
intval
);
sc
->
beacon
.
bmisscnt
=
0
;
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
)
...
...
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,
static
void
hif_usb_tx_cb
(
struct
urb
*
urb
)
{
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
;
if
(
!
hif_dev
||
!
tx_buf
)
if
(
!
tx_buf
||
!
tx_buf
->
hif_dev
)
return
;
hif_dev
=
tx_buf
->
hif_dev
;
switch
(
urb
->
status
)
{
case
0
:
break
;
...
...
@@ -607,6 +609,10 @@ static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
return
0
;
err:
if
(
tx_buf
)
{
kfree
(
tx_buf
->
buf
);
kfree
(
tx_buf
);
}
ath9k_hif_usb_dealloc_tx_urbs
(
hif_dev
);
return
-
ENOMEM
;
}
...
...
drivers/net/wireless/ath/ath9k/htc.h
View file @
a261af92
...
...
@@ -23,6 +23,7 @@
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/leds.h>
#include <linux/slab.h>
#include <net/mac80211.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,
struct
ath_hw
*
ah
=
common
->
ah
;
struct
ath9k_keyval
hk
;
const
u8
*
mac
=
NULL
;
u8
gmac
[
ETH_ALEN
];
int
ret
=
0
;
int
idx
;
...
...
@@ -776,30 +775,9 @@ static int ath_key_config(struct ath_common *common,
memcpy
(
hk
.
kv_val
,
key
->
key
,
key
->
keylen
);
if
(
!
(
key
->
flags
&
IEEE80211_KEY_FLAG_PAIRWISE
))
{
if
(
key
->
ap_addr
)
{
/*
* 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
;
}
/* For now, use the default keys for broadcast keys. This may
* need to change with virtual interfaces. */
idx
=
key
->
keyidx
;
}
else
if
(
key
->
keyidx
)
{
if
(
WARN_ON
(
!
sta
))
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) = {
{
PCI_VDEVICE
(
ATHEROS
,
0x002C
)
},
/* PCI-E 802.11n bonded out */
{
PCI_VDEVICE
(
ATHEROS
,
0x002D
)
},
/* PCI */
{
PCI_VDEVICE
(
ATHEROS
,
0x002E
)
},
/* PCI-E */
{
PCI_VDEVICE
(
ATHEROS
,
0x0030
)
},
/* PCI-E AR9300 */
{
0
}
};
...
...
drivers/net/wireless/ath/ath9k/recv.c
View file @
a261af92
...
...
@@ -19,6 +19,12 @@
#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
,
struct
ieee80211_hdr
*
hdr
)
{
...
...
@@ -616,8 +622,8 @@ static void ath_rx_ps(struct ath_softc *sc, struct sk_buff *skb)
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
/* Process Beacon and CAB receive in PS state */
if
((
sc
->
ps_flags
&
PS_WAIT_FOR_BEACON
)
&&
ieee80211_is_beacon
(
hdr
->
frame_control
))
if
((
(
sc
->
ps_flags
&
PS_WAIT_FOR_BEACON
)
||
ath9k_check_auto_sleep
(
sc
))
&&
ieee80211_is_beacon
(
hdr
->
frame_control
))
ath_rx_ps_beacon
(
sc
,
skb
);
else
if
((
sc
->
ps_flags
&
PS_WAIT_FOR_CAB
)
&&
(
ieee80211_is_data
(
hdr
->
frame_control
)
||
...
...
@@ -932,9 +938,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
sc
->
rx
.
rxotherant
=
0
;
}
if
(
unlikely
(
sc
->
ps_flags
&
(
PS_WAIT_FOR_BEACON
|
PS_WAIT_FOR_CAB
|
PS_WAIT_FOR_PSPOLL_DATA
)))
if
(
unlikely
(
ath9k_check_auto_sleep
(
sc
)
||
(
sc
->
ps_flags
&
(
PS_WAIT_FOR_BEACON
|
PS_WAIT_FOR_CAB
|
PS_WAIT_FOR_PSPOLL_DATA
))))
ath_rx_ps
(
sc
,
skb
);
ath_rx_send_to_mac80211
(
hw
,
sc
,
skb
,
rxs
);
...
...
drivers/net/wireless/iwlwifi/iwl-agn-ict.c
View file @
a261af92
...
...
@@ -30,6 +30,7 @@
#include <linux/module.h>
#include <linux/etherdevice.h>
#include <linux/sched.h>
#include <linux/gfp.h>
#include <net/mac80211.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)
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
))
{
IWL_DEBUG_SCAN
(
priv
,
"not ready or exit pending
\n
"
);
goto
unlock
;
...
...
@@ -497,17 +502,27 @@ void iwl_bg_scan_completed(struct work_struct *work)
{
struct
iwl_priv
*
priv
=
container_of
(
work
,
struct
iwl_priv
,
scan_completed
);
bool
internal
=
false
;
IWL_DEBUG_SCAN
(
priv
,
"SCAN complete scan
\n
"
);
cancel_delayed_work
(
&
priv
->
scan_check
);
if
(
!
priv
->
is_internal_short_scan
)
ieee80211_scan_completed
(
priv
->
hw
,
false
);
else
{
mutex_lock
(
&
priv
->
mutex
);
if
(
priv
->
is_internal_short_scan
)
{
priv
->
is_internal_short_scan
=
false
;
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
))
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,
struct
iwl_link_quality_cmd
*
link_cmd
;
unsigned
long
flags
;
if
(
*
sta_id_r
)
if
(
sta_id_r
)
*
sta_id_r
=
IWL_INVALID_STATION
;
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)
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
;
evt
.
data
.
length
=
0
;
memset
(
evt
.
ap_addr
.
sa_data
,
0
,
ETH_ALEN
);
wireless_send_event
(
usbdev
->
net
,
SIOCGIWAP
,
&
evt
,
NULL
);
cfg80211_disconnected
(
usbdev
->
net
,
0
,
NULL
,
0
,
GFP_KERNEL
)
;
}
netif_carrier_off
(
usbdev
->
net
);
}
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)
static
int
rt2400pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
char
put_to_sleep
;
char
bbp_state
;
...
...
@@ -947,11 +947,12 @@ static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev,
* device has entered the correct state.
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
);
bbp_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_BBP_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_RF_CURR_STATE
);
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
2
);
bbp_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_BBP_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_RF_CURR_STATE
);
if
(
bbp_state
==
state
&&
rf_state
==
state
)
return
0
;
rt2x00pci_register_write
(
rt2x00dev
,
PWRCSR1
,
reg
);
msleep
(
10
);
}
...
...
drivers/net/wireless/rt2x00/rt2500pci.c
View file @
a261af92
...
...
@@ -1084,7 +1084,7 @@ static void rt2500pci_disable_radio(struct rt2x00_dev *rt2x00dev)
static
int
rt2500pci_set_state
(
struct
rt2x00_dev
*
rt2x00dev
,
enum
dev_state
state
)
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
char
put_to_sleep
;
char
bbp_state
;
...
...
@@ -1105,11 +1105,12 @@ static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev,
* device has entered the correct state.
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
);
bbp_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_BBP_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
,
PWRCSR1_RF_CURR_STATE
);
rt2x00pci_register_read
(
rt2x00dev
,
PWRCSR1
,
&
reg
2
);
bbp_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_BBP_CURR_STATE
);
rf_state
=
rt2x00_get_field32
(
reg
2
,
PWRCSR1_RF_CURR_STATE
);
if
(
bbp_state
==
state
&&
rf_state
==
state
)
return
0
;
rt2x00pci_register_write
(
rt2x00dev
,
PWRCSR1
,
reg
);
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,
*/
rt2x00_desc_read
(
txi
,
0
,
&
word
);
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
,
!
test_bit
(
ENTRY_TXD_ENCRYPT_IV
,
&
txdesc
->
flags
));
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)
/*
* Free irq line.
*/
free_irq
(
to_pci_dev
(
rt2x00dev
->
dev
)
->
irq
,
rt2x00dev
);
free_irq
(
rt2x00dev
->
irq
,
rt2x00dev
);
/*
* Free DMA
...
...
drivers/net/wireless/rt2x00/rt61pci.c
View file @
a261af92
...
...
@@ -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
)
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
char
put_to_sleep
;
...
...
@@ -1706,10 +1706,11 @@ static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
* device has entered the correct state.
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00pci_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
);
state
=
rt2x00_get_field32
(
reg
,
MAC_CSR12_BBP_CURRENT_STATE
);
rt2x00pci_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
2
);
state
=
rt2x00_get_field32
(
reg
2
,
MAC_CSR12_BBP_CURRENT_STATE
);
if
(
state
==
!
put_to_sleep
)
return
0
;
rt2x00pci_register_write
(
rt2x00dev
,
MAC_CSR12
,
reg
);
msleep
(
10
);
}
...
...
drivers/net/wireless/rt2x00/rt73usb.c
View file @
a261af92
...
...
@@ -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
)
{
u32
reg
;
u32
reg
,
reg2
;
unsigned
int
i
;
char
put_to_sleep
;
...
...
@@ -1383,10 +1383,11 @@ static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
* device has entered the correct state.
*/
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00usb_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
);
state
=
rt2x00_get_field32
(
reg
,
MAC_CSR12_BBP_CURRENT_STATE
);
rt2x00usb_register_read
(
rt2x00dev
,
MAC_CSR12
,
&
reg
2
);
state
=
rt2x00_get_field32
(
reg
2
,
MAC_CSR12_BBP_CURRENT_STATE
);
if
(
state
==
!
put_to_sleep
)
return
0
;
rt2x00usb_register_write
(
rt2x00dev
,
MAC_CSR12
,
reg
);
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)
wl1271_debug
(
DEBUG_RX
,
"rx skb 0x%p: %d B %s"
,
skb
,
skb
->
len
,
beacon
?
"beacon"
:
""
);
skb_trim
(
skb
,
skb
->
len
-
desc
->
pad_len
);
memcpy
(
IEEE80211_SKB_RXCB
(
skb
),
&
rx_status
,
sizeof
(
rx_status
));
ieee80211_rx_ni
(
wl
->
hw
,
skb
);
}
...
...
include/net/mac80211.h
View file @
a261af92
...
...
@@ -815,6 +815,7 @@ enum ieee80211_key_flags {
* encrypted in hardware.
* @alg: The key algorithm.
* @flags: key flags, see &enum ieee80211_key_flags.
* @ap_addr: AP's MAC address
* @keyidx: the key index (0-3)
* @keylen: key material length
* @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte)
...
...
@@ -831,7 +832,6 @@ struct ieee80211_key_conf {
u8
iv_len
;
u8
hw_key_idx
;
u8
flags
;
u8
*
ap_addr
;
s8
keyidx
;
u8
keylen
;
u8
key
[
0
];
...
...
@@ -1638,6 +1638,8 @@ enum ieee80211_ampdu_mlme_action {
* Returns a negative error code on failure.
* The callback must be atomic.
*
* @get_survey: Return per-channel survey information
*
* @rfkill_poll: Poll rfkill hardware state. If you need this, you also
* need to set wiphy->rfkill_poll to %true before registration,
* 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)
struct
ieee80211_sub_if_data
,
u
.
ap
);
key
->
conf
.
ap_addr
=
sdata
->
dev
->
dev_addr
;
ret
=
drv_set_key
(
key
->
local
,
SET_KEY
,
sdata
,
sta
,
&
key
->
conf
);
if
(
!
ret
)
{
...
...
net/mac80211/sta_info.h
View file @
a261af92
...
...
@@ -145,7 +145,7 @@ enum plink_state {
/**
* 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_state_tx: TID's state in Tx session state machine.
* @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,
struct
ieee80211_channel
*
chan
;
int
result
;
if
(
wdev
->
iftype
==
NL80211_IFTYPE_MONITOR
)
if
(
wdev
&&
wdev
->
iftype
==
NL80211_IFTYPE_MONITOR
)
wdev
=
NULL
;
if
(
wdev
)
{
...
...
net/wireless/nl80211.c
View file @
a261af92
...
...
@@ -4443,9 +4443,10 @@ static int nl80211_remain_on_channel(struct sk_buff *skb,
if
(
channel_type
!=
NL80211_CHAN_NO_HT
&&
channel_type
!=
NL80211_CHAN_HT20
&&
channel_type
!=
NL80211_CHAN_HT40PLUS
&&
channel_type
!=
NL80211_CHAN_HT40MINUS
)
channel_type
!=
NL80211_CHAN_HT40MINUS
)
{
err
=
-
EINVAL
;
goto
out
;
}
}
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)
if
(
channel_type
!=
NL80211_CHAN_NO_HT
&&
channel_type
!=
NL80211_CHAN_HT20
&&
channel_type
!=
NL80211_CHAN_HT40PLUS
&&
channel_type
!=
NL80211_CHAN_HT40MINUS
)
channel_type
!=
NL80211_CHAN_HT40MINUS
)
{
err
=
-
EINVAL
;
goto
out
;
}
}
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,
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
)))
return
NULL
;
...
...
@@ -571,7 +571,7 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
u
.
probe_resp
.
variable
);
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
)))
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