Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
a261af92
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a261af92
编写于
5月 25, 2010
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
上级
acfbe96a
a65e4cb4
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
104 addition
and
132 deletion
+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
未找到文件。
drivers/net/wireless/ath/ath5k/base.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录