Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
9d55911e
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9d55911e
编写于
7月 25, 2013
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
上级
72bb2f26
23d412a2
变更
40
隐藏空白更改
内联
并排
Showing
40 changed file
with
338 addition
and
159 deletion
+338
-159
drivers/net/wireless/ath/ath5k/mac80211-ops.c
drivers/net/wireless/ath/ath5k/mac80211-ops.c
+1
-1
drivers/net/wireless/ath/ath9k/ar5008_phy.c
drivers/net/wireless/ath/ath9k/ar5008_phy.c
+9
-1
drivers/net/wireless/ath/ath9k/hif_usb.c
drivers/net/wireless/ath/ath9k/hif_usb.c
+9
-4
drivers/net/wireless/ath/ath9k/htc_drv_init.c
drivers/net/wireless/ath/ath9k/htc_drv_init.c
+1
-0
drivers/net/wireless/ath/ath9k/xmit.c
drivers/net/wireless/ath/ath9k/xmit.c
+28
-16
drivers/net/wireless/ath/wil6210/debugfs.c
drivers/net/wireless/ath/wil6210/debugfs.c
+2
-2
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
+1
-1
drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
+7
-1
drivers/net/wireless/cw1200/txrx.c
drivers/net/wireless/cw1200/txrx.c
+1
-1
drivers/net/wireless/iwlwifi/dvm/main.c
drivers/net/wireless/iwlwifi/dvm/main.c
+1
-1
drivers/net/wireless/iwlwifi/mvm/debugfs.c
drivers/net/wireless/iwlwifi/mvm/debugfs.c
+5
-1
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
+22
-1
drivers/net/wireless/iwlwifi/mvm/mvm.h
drivers/net/wireless/iwlwifi/mvm/mvm.h
+1
-0
drivers/net/wireless/iwlwifi/mvm/scan.c
drivers/net/wireless/iwlwifi/mvm/scan.c
+6
-4
drivers/net/wireless/iwlwifi/mvm/sta.c
drivers/net/wireless/iwlwifi/mvm/sta.c
+21
-2
drivers/net/wireless/mwifiex/init.c
drivers/net/wireless/mwifiex/init.c
+2
-8
drivers/net/wireless/mwifiex/main.c
drivers/net/wireless/mwifiex/main.c
+12
-1
drivers/net/wireless/mwifiex/main.h
drivers/net/wireless/mwifiex/main.h
+1
-0
drivers/net/wireless/mwifiex/sdio.c
drivers/net/wireless/mwifiex/sdio.c
+42
-49
drivers/net/wireless/mwifiex/sdio.h
drivers/net/wireless/mwifiex/sdio.h
+0
-3
drivers/net/wireless/rt2x00/Kconfig
drivers/net/wireless/rt2x00/Kconfig
+1
-1
drivers/net/wireless/rtlwifi/Kconfig
drivers/net/wireless/rtlwifi/Kconfig
+48
-24
drivers/net/wireless/rtlwifi/Makefile
drivers/net/wireless/rtlwifi/Makefile
+4
-6
drivers/net/wireless/rtlwifi/base.c
drivers/net/wireless/rtlwifi/base.c
+16
-3
drivers/net/wireless/rtlwifi/base.h
drivers/net/wireless/rtlwifi/base.h
+1
-1
drivers/net/wireless/rtlwifi/core.c
drivers/net/wireless/rtlwifi/core.c
+1
-0
drivers/net/wireless/rtlwifi/debug.c
drivers/net/wireless/rtlwifi/debug.c
+1
-0
drivers/net/wireless/rtlwifi/efuse.c
drivers/net/wireless/rtlwifi/efuse.c
+1
-0
drivers/net/wireless/rtlwifi/pci.c
drivers/net/wireless/rtlwifi/pci.c
+8
-14
drivers/net/wireless/rtlwifi/ps.c
drivers/net/wireless/rtlwifi/ps.c
+16
-0
drivers/net/wireless/rtlwifi/ps.h
drivers/net/wireless/rtlwifi/ps.h
+1
-0
drivers/net/wireless/rtlwifi/usb.c
drivers/net/wireless/rtlwifi/usb.c
+9
-0
include/linux/mod_devicetable.h
include/linux/mod_devicetable.h
+3
-2
net/mac80211/cfg.c
net/mac80211/cfg.c
+2
-0
net/mac80211/rc80211_minstrel.c
net/mac80211/rc80211_minstrel.c
+2
-1
net/mac80211/rc80211_minstrel_ht.c
net/mac80211/rc80211_minstrel_ht.c
+9
-1
net/mac80211/rx.c
net/mac80211/rx.c
+8
-2
net/wireless/nl80211.c
net/wireless/nl80211.c
+7
-4
net/wireless/reg.c
net/wireless/reg.c
+2
-0
net/wireless/sme.c
net/wireless/sme.c
+26
-3
未找到文件。
drivers/net/wireless/ath/ath5k/mac80211-ops.c
浏览文件 @
9d55911e
...
...
@@ -325,7 +325,7 @@ ath5k_prepare_multicast(struct ieee80211_hw *hw,
struct
netdev_hw_addr
*
ha
;
mfilt
[
0
]
=
0
;
mfilt
[
1
]
=
1
;
mfilt
[
1
]
=
0
;
netdev_hw_addr_list_for_each
(
ha
,
mc_list
)
{
/* calculate XOR of eight 6-bit values */
...
...
drivers/net/wireless/ath/ath9k/ar5008_phy.c
浏览文件 @
9d55911e
...
...
@@ -610,7 +610,15 @@ static void ar5008_hw_override_ini(struct ath_hw *ah,
REG_SET_BIT
(
ah
,
AR_DIAG_SW
,
(
AR_DIAG_RX_DIS
|
AR_DIAG_RX_ABORT
));
if
(
AR_SREV_9280_20_OR_LATER
(
ah
))
{
val
=
REG_READ
(
ah
,
AR_PCU_MISC_MODE2
);
/*
* For AR9280 and above, there is a new feature that allows
* Multicast search based on both MAC Address and Key ID.
* By default, this feature is enabled. But since the driver
* is not using this feature, we switch it off; otherwise
* multicast search based on MAC addr only will fail.
*/
val
=
REG_READ
(
ah
,
AR_PCU_MISC_MODE2
)
&
(
~
AR_ADHOC_MCAST_KEYID_ENABLE
);
if
(
!
AR_SREV_9271
(
ah
))
val
&=
~
AR_PCU_MISC_MODE2_HWWAR1
;
...
...
drivers/net/wireless/ath/ath9k/hif_usb.c
浏览文件 @
9d55911e
...
...
@@ -1082,7 +1082,7 @@ static void ath9k_hif_usb_firmware_fail(struct hif_device_usb *hif_dev)
struct
device
*
dev
=
&
hif_dev
->
udev
->
dev
;
struct
device
*
parent
=
dev
->
parent
;
complete
(
&
hif_dev
->
fw_done
);
complete
_all
(
&
hif_dev
->
fw_done
);
if
(
parent
)
device_lock
(
parent
);
...
...
@@ -1131,7 +1131,7 @@ static void ath9k_hif_usb_firmware_cb(const struct firmware *fw, void *context)
release_firmware
(
fw
);
hif_dev
->
flags
|=
HIF_USB_READY
;
complete
(
&
hif_dev
->
fw_done
);
complete
_all
(
&
hif_dev
->
fw_done
);
return
;
...
...
@@ -1295,7 +1295,9 @@ static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
usb_set_intfdata
(
interface
,
NULL
);
if
(
!
unplugged
&&
(
hif_dev
->
flags
&
HIF_USB_START
))
/* If firmware was loaded we should drop it
* go back to first stage bootloader. */
if
(
!
unplugged
&&
(
hif_dev
->
flags
&
HIF_USB_READY
))
ath9k_hif_usb_reboot
(
udev
);
kfree
(
hif_dev
);
...
...
@@ -1316,7 +1318,10 @@ static int ath9k_hif_usb_suspend(struct usb_interface *interface,
if
(
!
(
hif_dev
->
flags
&
HIF_USB_START
))
ath9k_htc_suspend
(
hif_dev
->
htc_handle
);
ath9k_hif_usb_dealloc_urbs
(
hif_dev
);
wait_for_completion
(
&
hif_dev
->
fw_done
);
if
(
hif_dev
->
flags
&
HIF_USB_READY
)
ath9k_hif_usb_dealloc_urbs
(
hif_dev
);
return
0
;
}
...
...
drivers/net/wireless/ath/ath9k/htc_drv_init.c
浏览文件 @
9d55911e
...
...
@@ -861,6 +861,7 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv,
if
(
error
!=
0
)
goto
err_rx
;
ath9k_hw_disable
(
priv
->
ah
);
#ifdef CONFIG_MAC80211_LEDS
/* must be initialized before ieee80211_register_hw */
priv
->
led_cdev
.
default_trigger
=
ieee80211_create_tpt_led_trigger
(
priv
->
hw
,
...
...
drivers/net/wireless/ath/ath9k/xmit.c
浏览文件 @
9d55911e
...
...
@@ -146,6 +146,28 @@ static void ath_set_rates(struct ieee80211_vif *vif, struct ieee80211_sta *sta,
ARRAY_SIZE
(
bf
->
rates
));
}
static
void
ath_txq_skb_done
(
struct
ath_softc
*
sc
,
struct
ath_txq
*
txq
,
struct
sk_buff
*
skb
)
{
int
q
;
q
=
skb_get_queue_mapping
(
skb
);
if
(
txq
==
sc
->
tx
.
uapsdq
)
txq
=
sc
->
tx
.
txq_map
[
q
];
if
(
txq
!=
sc
->
tx
.
txq_map
[
q
])
return
;
if
(
WARN_ON
(
--
txq
->
pending_frames
<
0
))
txq
->
pending_frames
=
0
;
if
(
txq
->
stopped
&&
txq
->
pending_frames
<
sc
->
tx
.
txq_max_pending
[
q
])
{
ieee80211_wake_queue
(
sc
->
hw
,
q
);
txq
->
stopped
=
false
;
}
}
static
void
ath_tx_flush_tid
(
struct
ath_softc
*
sc
,
struct
ath_atx_tid
*
tid
)
{
struct
ath_txq
*
txq
=
tid
->
ac
->
txq
;
...
...
@@ -167,6 +189,7 @@ static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid)
if
(
!
bf
)
{
bf
=
ath_tx_setup_buffer
(
sc
,
txq
,
tid
,
skb
);
if
(
!
bf
)
{
ath_txq_skb_done
(
sc
,
txq
,
skb
);
ieee80211_free_txskb
(
sc
->
hw
,
skb
);
continue
;
}
...
...
@@ -811,6 +834,7 @@ ath_tx_get_tid_subframe(struct ath_softc *sc, struct ath_txq *txq,
if
(
!
bf
)
{
__skb_unlink
(
skb
,
&
tid
->
buf_q
);
ath_txq_skb_done
(
sc
,
txq
,
skb
);
ieee80211_free_txskb
(
sc
->
hw
,
skb
);
continue
;
}
...
...
@@ -1852,6 +1876,7 @@ static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_txq *txq,
bf
=
ath_tx_setup_buffer
(
sc
,
txq
,
tid
,
skb
);
if
(
!
bf
)
{
ath_txq_skb_done
(
sc
,
txq
,
skb
);
ieee80211_free_txskb
(
sc
->
hw
,
skb
);
return
;
}
...
...
@@ -2118,6 +2143,7 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
bf
=
ath_tx_setup_buffer
(
sc
,
txq
,
tid
,
skb
);
if
(
!
bf
)
{
ath_txq_skb_done
(
sc
,
txq
,
skb
);
if
(
txctl
->
paprd
)
dev_kfree_skb_any
(
skb
);
else
...
...
@@ -2217,7 +2243,7 @@ static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb,
struct
ieee80211_tx_info
*
tx_info
=
IEEE80211_SKB_CB
(
skb
);
struct
ath_common
*
common
=
ath9k_hw_common
(
sc
->
sc_ah
);
struct
ieee80211_hdr
*
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
int
q
,
padpos
,
padsize
;
int
padpos
,
padsize
;
unsigned
long
flags
;
ath_dbg
(
common
,
XMIT
,
"TX complete: skb: %p
\n
"
,
skb
);
...
...
@@ -2253,21 +2279,7 @@ static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb,
spin_unlock_irqrestore
(
&
sc
->
sc_pm_lock
,
flags
);
__skb_queue_tail
(
&
txq
->
complete_q
,
skb
);
q
=
skb_get_queue_mapping
(
skb
);
if
(
txq
==
sc
->
tx
.
uapsdq
)
txq
=
sc
->
tx
.
txq_map
[
q
];
if
(
txq
==
sc
->
tx
.
txq_map
[
q
])
{
if
(
WARN_ON
(
--
txq
->
pending_frames
<
0
))
txq
->
pending_frames
=
0
;
if
(
txq
->
stopped
&&
txq
->
pending_frames
<
sc
->
tx
.
txq_max_pending
[
q
])
{
ieee80211_wake_queue
(
sc
->
hw
,
q
);
txq
->
stopped
=
false
;
}
}
ath_txq_skb_done
(
sc
,
txq
,
skb
);
}
static
void
ath_tx_complete_buf
(
struct
ath_softc
*
sc
,
struct
ath_buf
*
bf
,
...
...
drivers/net/wireless/ath/wil6210/debugfs.c
浏览文件 @
9d55911e
...
...
@@ -145,7 +145,7 @@ static void wil_print_ring(struct seq_file *s, const char *prefix,
le16_to_cpu
(
hdr
.
type
),
hdr
.
flags
);
if
(
len
<=
MAX_MBOXITEM_SIZE
)
{
int
n
=
0
;
unsigned
char
printbuf
[
16
*
3
+
2
];
char
printbuf
[
16
*
3
+
2
];
unsigned
char
databuf
[
MAX_MBOXITEM_SIZE
];
void
__iomem
*
src
=
wmi_buffer
(
wil
,
d
.
addr
)
+
sizeof
(
struct
wil6210_mbox_hdr
);
...
...
@@ -416,7 +416,7 @@ static int wil_txdesc_debugfs_show(struct seq_file *s, void *data)
seq_printf
(
s
,
" SKB = %p
\n
"
,
skb
);
if
(
skb
)
{
unsigned
char
printbuf
[
16
*
3
+
2
];
char
printbuf
[
16
*
3
+
2
];
int
i
=
0
;
int
len
=
le16_to_cpu
(
d
->
dma
.
length
);
void
*
p
=
skb
->
data
;
...
...
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
浏览文件 @
9d55911e
...
...
@@ -242,7 +242,7 @@ void brcmf_txflowblock_if(struct brcmf_if *ifp,
{
unsigned
long
flags
;
if
(
!
ifp
)
if
(
!
ifp
||
!
ifp
->
ndev
)
return
;
brcmf_dbg
(
TRACE
,
"enter: idx=%d stop=0x%X reason=%d state=%d
\n
"
,
...
...
drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
浏览文件 @
9d55911e
...
...
@@ -1744,13 +1744,14 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb)
ulong
flags
;
int
fifo
=
BRCMF_FWS_FIFO_BCMC
;
bool
multicast
=
is_multicast_ether_addr
(
eh
->
h_dest
);
bool
pae
=
eh
->
h_proto
==
htons
(
ETH_P_PAE
);
/* determine the priority */
if
(
!
skb
->
priority
)
skb
->
priority
=
cfg80211_classify8021d
(
skb
);
drvr
->
tx_multicast
+=
!!
multicast
;
if
(
ntohs
(
eh
->
h_proto
)
==
ETH_P_PAE
)
if
(
pae
)
atomic_inc
(
&
ifp
->
pend_8021x_cnt
);
if
(
!
brcmf_fws_fc_active
(
fws
))
{
...
...
@@ -1781,6 +1782,11 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb)
brcmf_fws_schedule_deq
(
fws
);
}
else
{
brcmf_err
(
"drop skb: no hanger slot
\n
"
);
if
(
pae
)
{
atomic_dec
(
&
ifp
->
pend_8021x_cnt
);
if
(
waitqueue_active
(
&
ifp
->
pend_8021x_wait
))
wake_up
(
&
ifp
->
pend_8021x_wait
);
}
brcmu_pkt_buf_free_skb
(
skb
);
}
brcmf_fws_unlock
(
drvr
,
flags
);
...
...
drivers/net/wireless/cw1200/txrx.c
浏览文件 @
9d55911e
...
...
@@ -1165,7 +1165,7 @@ void cw1200_rx_cb(struct cw1200_common *priv,
if
(
cw1200_handle_action_rx
(
priv
,
skb
))
return
;
}
else
if
(
ieee80211_is_beacon
(
frame
->
frame_control
)
&&
!
arg
->
status
&&
!
arg
->
status
&&
priv
->
vif
&&
!
memcmp
(
ieee80211_get_SA
(
frame
),
priv
->
vif
->
bss_conf
.
bssid
,
ETH_ALEN
))
{
const
u8
*
tim_ie
;
...
...
drivers/net/wireless/iwlwifi/dvm/main.c
浏览文件 @
9d55911e
...
...
@@ -758,7 +758,7 @@ int iwl_alive_start(struct iwl_priv *priv)
BT_COEX_PRIO_TBL_EVT_INIT_CALIB2
);
if
(
ret
)
return
ret
;
}
else
{
}
else
if
(
priv
->
lib
->
bt_params
)
{
/*
* default is 2-wire BT coexexistence support
*/
...
...
drivers/net/wireless/iwlwifi/mvm/debugfs.c
浏览文件 @
9d55911e
...
...
@@ -988,7 +988,11 @@ void iwl_mvm_vif_dbgfs_register(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
char
buf
[
100
];
if
(
!
dbgfs_dir
)
/*
* Check if debugfs directory already exist before creating it.
* This may happen when, for example, resetting hw or suspend-resume
*/
if
(
!
dbgfs_dir
||
mvmvif
->
dbgfs_dir
)
return
;
mvmvif
->
dbgfs_dir
=
debugfs_create_dir
(
"iwlmvm"
,
dbgfs_dir
);
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
浏览文件 @
9d55911e
...
...
@@ -257,7 +257,11 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
if
(
ret
)
return
ret
;
return
ieee80211_register_hw
(
mvm
->
hw
);
ret
=
ieee80211_register_hw
(
mvm
->
hw
);
if
(
ret
)
iwl_mvm_leds_exit
(
mvm
);
return
ret
;
}
static
void
iwl_mvm_mac_tx
(
struct
ieee80211_hw
*
hw
,
...
...
@@ -385,6 +389,7 @@ static void iwl_mvm_restart_cleanup(struct iwl_mvm *mvm)
ieee80211_wake_queues
(
mvm
->
hw
);
mvm
->
vif_count
=
0
;
mvm
->
rx_ba_sessions
=
0
;
}
static
int
iwl_mvm_mac_start
(
struct
ieee80211_hw
*
hw
)
...
...
@@ -1006,6 +1011,21 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
mutex_lock
(
&
mvm
->
mutex
);
if
(
old_state
==
IEEE80211_STA_NOTEXIST
&&
new_state
==
IEEE80211_STA_NONE
)
{
/*
* Firmware bug - it'll crash if the beacon interval is less
* than 16. We can't avoid connecting at all, so refuse the
* station state change, this will cause mac80211 to abandon
* attempts to connect to this AP, and eventually wpa_s will
* blacklist the AP...
*/
if
(
vif
->
type
==
NL80211_IFTYPE_STATION
&&
vif
->
bss_conf
.
beacon_int
<
16
)
{
IWL_ERR
(
mvm
,
"AP %pM beacon interval is %d, refusing due to firmware bug!
\n
"
,
sta
->
addr
,
vif
->
bss_conf
.
beacon_int
);
ret
=
-
EINVAL
;
goto
out_unlock
;
}
ret
=
iwl_mvm_add_sta
(
mvm
,
vif
,
sta
);
}
else
if
(
old_state
==
IEEE80211_STA_NONE
&&
new_state
==
IEEE80211_STA_AUTH
)
{
...
...
@@ -1038,6 +1058,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
}
else
{
ret
=
-
EIO
;
}
out_unlock:
mutex_unlock
(
&
mvm
->
mutex
);
return
ret
;
...
...
drivers/net/wireless/iwlwifi/mvm/mvm.h
浏览文件 @
9d55911e
...
...
@@ -419,6 +419,7 @@ struct iwl_mvm {
struct
work_struct
sta_drained_wk
;
unsigned
long
sta_drained
[
BITS_TO_LONGS
(
IWL_MVM_STATION_COUNT
)];
atomic_t
pending_frames
[
IWL_MVM_STATION_COUNT
];
u8
rx_ba_sessions
;
/* configured by mac80211 */
u32
rts_threshold
;
...
...
drivers/net/wireless/iwlwifi/mvm/scan.c
浏览文件 @
9d55911e
...
...
@@ -137,8 +137,8 @@ static void iwl_mvm_scan_fill_ssids(struct iwl_scan_cmd *cmd,
{
int
fw_idx
,
req_idx
;
f
w_idx
=
0
;
for
(
req_idx
=
req
->
n_ssids
-
1
;
req_idx
>
0
;
req_idx
--
)
{
f
or
(
req_idx
=
req
->
n_ssids
-
1
,
fw_idx
=
0
;
req_idx
>
0
;
req_idx
--
,
fw_idx
++
)
{
cmd
->
direct_scan
[
fw_idx
].
id
=
WLAN_EID_SSID
;
cmd
->
direct_scan
[
fw_idx
].
len
=
req
->
ssids
[
req_idx
].
ssid_len
;
memcpy
(
cmd
->
direct_scan
[
fw_idx
].
ssid
,
...
...
@@ -153,7 +153,9 @@ static void iwl_mvm_scan_fill_ssids(struct iwl_scan_cmd *cmd,
* just to notify that this scan is active and not passive.
* In order to notify the FW of the number of SSIDs we wish to scan (including
* the zero-length one), we need to set the corresponding bits in chan->type,
* one for each SSID, and set the active bit (first).
* one for each SSID, and set the active bit (first). The first SSID is already
* included in the probe template, so we need to set only req->n_ssids - 1 bits
* in addition to the first bit.
*/
static
u16
iwl_mvm_get_active_dwell
(
enum
ieee80211_band
band
,
int
n_ssids
)
{
...
...
@@ -179,7 +181,7 @@ static void iwl_mvm_scan_fill_channels(struct iwl_scan_cmd *cmd,
__le32
chan_type_value
;
if
(
req
->
n_ssids
>
0
)
chan_type_value
=
cpu_to_le32
(
BIT
(
req
->
n_ssids
+
1
)
-
1
);
chan_type_value
=
cpu_to_le32
(
BIT
(
req
->
n_ssids
)
-
1
);
else
chan_type_value
=
SCAN_CHANNEL_TYPE_PASSIVE
;
...
...
drivers/net/wireless/iwlwifi/mvm/sta.c
浏览文件 @
9d55911e
...
...
@@ -608,6 +608,8 @@ int iwl_mvm_rm_bcast_sta(struct iwl_mvm *mvm, struct iwl_mvm_int_sta *bsta)
return
ret
;
}
#define IWL_MAX_RX_BA_SESSIONS 16
int
iwl_mvm_sta_rx_agg
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_sta
*
sta
,
int
tid
,
u16
ssn
,
bool
start
)
{
...
...
@@ -618,11 +620,20 @@ int iwl_mvm_sta_rx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
lockdep_assert_held
(
&
mvm
->
mutex
);
if
(
start
&&
mvm
->
rx_ba_sessions
>=
IWL_MAX_RX_BA_SESSIONS
)
{
IWL_WARN
(
mvm
,
"Not enough RX BA SESSIONS
\n
"
);
return
-
ENOSPC
;
}
cmd
.
mac_id_n_color
=
cpu_to_le32
(
mvm_sta
->
mac_id_n_color
);
cmd
.
sta_id
=
mvm_sta
->
sta_id
;
cmd
.
add_modify
=
STA_MODE_MODIFY
;
cmd
.
add_immediate_ba_tid
=
(
u8
)
tid
;
cmd
.
add_immediate_ba_ssn
=
cpu_to_le16
(
ssn
);
if
(
start
)
{
cmd
.
add_immediate_ba_tid
=
(
u8
)
tid
;
cmd
.
add_immediate_ba_ssn
=
cpu_to_le16
(
ssn
);
}
else
{
cmd
.
remove_immediate_ba_tid
=
(
u8
)
tid
;
}
cmd
.
modify_mask
=
start
?
STA_MODIFY_ADD_BA_TID
:
STA_MODIFY_REMOVE_BA_TID
;
...
...
@@ -648,6 +659,14 @@ int iwl_mvm_sta_rx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
break
;
}
if
(
!
ret
)
{
if
(
start
)
mvm
->
rx_ba_sessions
++
;
else
if
(
mvm
->
rx_ba_sessions
>
0
)
/* check that restart flow didn't zero the counter */
mvm
->
rx_ba_sessions
--
;
}
return
ret
;
}
...
...
drivers/net/wireless/mwifiex/init.c
浏览文件 @
9d55911e
...
...
@@ -682,7 +682,7 @@ int mwifiex_dnld_fw(struct mwifiex_adapter *adapter,
if
(
!
ret
)
{
dev_notice
(
adapter
->
dev
,
"WLAN FW already running! Skip FW dnld
\n
"
);
goto
done
;
return
0
;
}
poll_num
=
MAX_FIRMWARE_POLL_TRIES
;
...
...
@@ -707,14 +707,8 @@ int mwifiex_dnld_fw(struct mwifiex_adapter *adapter,
poll_fw:
/* Check if the firmware is downloaded successfully or not */
ret
=
adapter
->
if_ops
.
check_fw_status
(
adapter
,
poll_num
);
if
(
ret
)
{
if
(
ret
)
dev_err
(
adapter
->
dev
,
"FW failed to be active in time
\n
"
);
return
-
1
;
}
done:
/* re-enable host interrupt for mwifiex after fw dnld is successful */
if
(
adapter
->
if_ops
.
enable_int
)
adapter
->
if_ops
.
enable_int
(
adapter
);
return
ret
;
}
drivers/net/wireless/mwifiex/main.c
浏览文件 @
9d55911e
...
...
@@ -431,6 +431,10 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
"Cal data request_firmware() failed
\n
"
);
}
/* enable host interrupt after fw dnld is successful */
if
(
adapter
->
if_ops
.
enable_int
)
adapter
->
if_ops
.
enable_int
(
adapter
);
adapter
->
init_wait_q_woken
=
false
;
ret
=
mwifiex_init_fw
(
adapter
);
if
(
ret
==
-
1
)
{
...
...
@@ -482,6 +486,8 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
mwifiex_del_virtual_intf
(
adapter
->
wiphy
,
priv
->
wdev
);
rtnl_unlock
();
err_init_fw:
if
(
adapter
->
if_ops
.
disable_int
)
adapter
->
if_ops
.
disable_int
(
adapter
);
pr_debug
(
"info: %s: unregister device
\n
"
,
__func__
);
adapter
->
if_ops
.
unregister_dev
(
adapter
);
done:
...
...
@@ -859,7 +865,7 @@ mwifiex_add_card(void *card, struct semaphore *sem,
INIT_WORK
(
&
adapter
->
main_work
,
mwifiex_main_work_queue
);
/* Register the device. Fill up the private data structure with relevant
information from the card
and request for the required IRQ
. */
information from the card. */
if
(
adapter
->
if_ops
.
register_dev
(
adapter
))
{
pr_err
(
"%s: failed to register mwifiex device
\n
"
,
__func__
);
goto
err_registerdev
;
...
...
@@ -923,6 +929,11 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
if
(
!
adapter
)
goto
exit_remove
;
/* We can no longer handle interrupts once we start doing the teardown
* below. */
if
(
adapter
->
if_ops
.
disable_int
)
adapter
->
if_ops
.
disable_int
(
adapter
);
adapter
->
surprise_removed
=
true
;
/* Stop data */
...
...
drivers/net/wireless/mwifiex/main.h
浏览文件 @
9d55911e
...
...
@@ -602,6 +602,7 @@ struct mwifiex_if_ops {
int
(
*
register_dev
)
(
struct
mwifiex_adapter
*
);
void
(
*
unregister_dev
)
(
struct
mwifiex_adapter
*
);
int
(
*
enable_int
)
(
struct
mwifiex_adapter
*
);
void
(
*
disable_int
)
(
struct
mwifiex_adapter
*
);
int
(
*
process_int_status
)
(
struct
mwifiex_adapter
*
);
int
(
*
host_to_card
)
(
struct
mwifiex_adapter
*
,
u8
,
struct
sk_buff
*
,
struct
mwifiex_tx_param
*
);
...
...
drivers/net/wireless/mwifiex/sdio.c
浏览文件 @
9d55911e
...
...
@@ -51,6 +51,7 @@ static struct mwifiex_if_ops sdio_ops;
static
struct
semaphore
add_remove_card_sem
;
static
int
mwifiex_sdio_resume
(
struct
device
*
dev
);
static
void
mwifiex_sdio_interrupt
(
struct
sdio_func
*
func
);
/*
* SDIO probe.
...
...
@@ -296,6 +297,15 @@ static struct sdio_driver mwifiex_sdio = {
}
};
/* Write data into SDIO card register. Caller claims SDIO device. */
static
int
mwifiex_write_reg_locked
(
struct
sdio_func
*
func
,
u32
reg
,
u8
data
)
{
int
ret
=
-
1
;
sdio_writeb
(
func
,
data
,
reg
,
&
ret
);
return
ret
;
}
/*
* This function writes data into SDIO card register.
*/
...
...
@@ -303,10 +313,10 @@ static int
mwifiex_write_reg
(
struct
mwifiex_adapter
*
adapter
,
u32
reg
,
u8
data
)
{
struct
sdio_mmc_card
*
card
=
adapter
->
card
;
int
ret
=
-
1
;
int
ret
;
sdio_claim_host
(
card
->
func
);
sdio_writeb
(
card
->
func
,
data
,
reg
,
&
ret
);
ret
=
mwifiex_write_reg_locked
(
card
->
func
,
reg
,
data
);
sdio_release_host
(
card
->
func
);
return
ret
;
...
...
@@ -685,23 +695,15 @@ mwifiex_sdio_read_fw_status(struct mwifiex_adapter *adapter, u16 *dat)
* The host interrupt mask is read, the disable bit is reset and
* written back to the card host interrupt mask register.
*/
static
int
mwifiex_sdio_disable_host_int
(
struct
mwifiex_adapter
*
adapter
)
static
void
mwifiex_sdio_disable_host_int
(
struct
mwifiex_adapter
*
adapter
)
{
u8
host_int_mask
,
host_int_disable
=
HOST_INT_DISABLE
;
/* Read back the host_int_mask register */
if
(
mwifiex_read_reg
(
adapter
,
HOST_INT_MASK_REG
,
&
host_int_mask
))
return
-
1
;
/* Update with the mask and write back to the register */
host_int_mask
&=
~
host_int_disable
;
if
(
mwifiex_write_reg
(
adapter
,
HOST_INT_MASK_REG
,
host_int_mask
))
{
dev_err
(
adapter
->
dev
,
"disable host interrupt failed
\n
"
);
return
-
1
;
}
struct
sdio_mmc_card
*
card
=
adapter
->
card
;
struct
sdio_func
*
func
=
card
->
func
;
return
0
;
sdio_claim_host
(
func
);
mwifiex_write_reg_locked
(
func
,
HOST_INT_MASK_REG
,
0
);
sdio_release_irq
(
func
);
sdio_release_host
(
func
);
}
/*
...
...
@@ -713,14 +715,29 @@ static int mwifiex_sdio_disable_host_int(struct mwifiex_adapter *adapter)
static
int
mwifiex_sdio_enable_host_int
(
struct
mwifiex_adapter
*
adapter
)
{
struct
sdio_mmc_card
*
card
=
adapter
->
card
;
struct
sdio_func
*
func
=
card
->
func
;
int
ret
;
sdio_claim_host
(
func
);
/* Request the SDIO IRQ */
ret
=
sdio_claim_irq
(
func
,
mwifiex_sdio_interrupt
);
if
(
ret
)
{
dev_err
(
adapter
->
dev
,
"claim irq failed: ret=%d
\n
"
,
ret
);
goto
out
;
}
/* Simply write the mask to the register */
if
(
mwifiex_write_reg
(
adapter
,
HOST_INT_MASK_REG
,
card
->
reg
->
host_int_enable
))
{
ret
=
mwifiex_write_reg_locked
(
func
,
HOST_INT_MASK_REG
,
card
->
reg
->
host_int_enable
);
if
(
ret
)
{
dev_err
(
adapter
->
dev
,
"enable host interrupt failed
\n
"
);
return
-
1
;
sdio_release_irq
(
func
)
;
}
return
0
;
out:
sdio_release_host
(
func
);
return
ret
;
}
/*
...
...
@@ -997,9 +1014,6 @@ mwifiex_sdio_interrupt(struct sdio_func *func)
}
adapter
=
card
->
adapter
;
if
(
adapter
->
surprise_removed
)
return
;
if
(
!
adapter
->
pps_uapsd_mode
&&
adapter
->
ps_state
==
PS_STATE_SLEEP
)
adapter
->
ps_state
=
PS_STATE_AWAKE
;
...
...
@@ -1728,9 +1742,7 @@ mwifiex_unregister_dev(struct mwifiex_adapter *adapter)
struct
sdio_mmc_card
*
card
=
adapter
->
card
;
if
(
adapter
->
card
)
{
/* Release the SDIO IRQ */
sdio_claim_host
(
card
->
func
);
sdio_release_irq
(
card
->
func
);
sdio_disable_func
(
card
->
func
);
sdio_release_host
(
card
->
func
);
sdio_set_drvdata
(
card
->
func
,
NULL
);
...
...
@@ -1744,7 +1756,7 @@ mwifiex_unregister_dev(struct mwifiex_adapter *adapter)
*/
static
int
mwifiex_register_dev
(
struct
mwifiex_adapter
*
adapter
)
{
int
ret
=
0
;
int
ret
;
struct
sdio_mmc_card
*
card
=
adapter
->
card
;
struct
sdio_func
*
func
=
card
->
func
;
...
...
@@ -1753,22 +1765,14 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
sdio_claim_host
(
func
);
/* Request the SDIO IRQ */
ret
=
sdio_claim_irq
(
func
,
mwifiex_sdio_interrupt
);
if
(
ret
)
{
pr_err
(
"claim irq failed: ret=%d
\n
"
,
ret
);
goto
disable_func
;
}
/* Set block size */
ret
=
sdio_set_block_size
(
card
->
func
,
MWIFIEX_SDIO_BLOCK_SIZE
);
sdio_release_host
(
func
);
if
(
ret
)
{
pr_err
(
"cannot set SDIO block size
\n
"
);
ret
=
-
1
;
goto
release_irq
;
return
ret
;
}
sdio_release_host
(
func
);
sdio_set_drvdata
(
func
,
card
);
adapter
->
dev
=
&
func
->
dev
;
...
...
@@ -1776,15 +1780,6 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
strcpy
(
adapter
->
fw_name
,
card
->
firmware
);
return
0
;
release_irq:
sdio_release_irq
(
func
);
disable_func:
sdio_disable_func
(
func
);
sdio_release_host
(
func
);
adapter
->
card
=
NULL
;
return
-
1
;
}
/*
...
...
@@ -1813,9 +1808,6 @@ static int mwifiex_init_sdio(struct mwifiex_adapter *adapter)
*/
mwifiex_read_reg
(
adapter
,
HOST_INTSTATUS_REG
,
&
sdio_ireg
);
/* Disable host interrupt mask register for SDIO */
mwifiex_sdio_disable_host_int
(
adapter
);
/* Get SDIO ioport */
mwifiex_init_sdio_ioport
(
adapter
);
...
...
@@ -1957,6 +1949,7 @@ static struct mwifiex_if_ops sdio_ops = {
.
register_dev
=
mwifiex_register_dev
,
.
unregister_dev
=
mwifiex_unregister_dev
,
.
enable_int
=
mwifiex_sdio_enable_host_int
,
.
disable_int
=
mwifiex_sdio_disable_host_int
,
.
process_int_status
=
mwifiex_process_int_status
,
.
host_to_card
=
mwifiex_sdio_host_to_card
,
.
wakeup
=
mwifiex_pm_wakeup_card
,
...
...
drivers/net/wireless/mwifiex/sdio.h
浏览文件 @
9d55911e
...
...
@@ -92,9 +92,6 @@
/* Host Control Registers : Download host interrupt mask */
#define DN_LD_HOST_INT_MASK (0x2U)
/* Disable Host interrupt mask */
#define HOST_INT_DISABLE 0xff
/* Host Control Registers : Host interrupt status */
#define HOST_INTSTATUS_REG 0x03
/* Host Control Registers : Upload host interrupt status */
...
...
drivers/net/wireless/rt2x00/Kconfig
浏览文件 @
9d55911e
menuconfig RT2X00
tristate "Ralink driver support"
depends on MAC80211
depends on MAC80211
&& HAS_DMA
---help---
This will enable the support for the Ralink drivers,
developed in the rt2x00 project <http://rt2x00.serialmonkey.com>.
...
...
drivers/net/wireless/rtlwifi/Kconfig
浏览文件 @
9d55911e
config RTLWIFI
tristate "Realtek wireless card support"
depends on MAC80211
select FW_LOADER
---help---
This is common code for RTL8192CE/RTL8192CU/RTL8192SE/RTL8723AE
drivers. This module does nothing by itself - the various front-end
drivers need to be enabled to support any desired devices.
If you choose to build as a module, it'll be called rtlwifi.
config RTLWIFI_DEBUG
bool "Debugging output for rtlwifi driver family"
depends on RTLWIFI
menuconfig RTL_CARDS
tristate "Realtek rtlwifi family of devices"
depends on MAC80211 && (PCI || USB)
default y
---help---
To use the module option that sets the dynamic-debugging level for,
the front-end driver, this parameter must be "Y". For memory-limited
systems, choose "N". If in doubt, choose "Y".
This option will enable support for the Realtek mac80211-based
wireless drivers. Drivers rtl8192ce, rtl8192cu, rtl8192se, rtl8192de,
rtl8723eu, and rtl8188eu share some common code.
if RTL_CARDS
config RTL8192CE
tristate "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter"
depends on
RTLWIFI &&
PCI
depends on PCI
select RTL8192C_COMMON
select RTLWIFI
select RTLWIFI_PCI
---help---
This is the driver for Realtek RTL8192CE/RTL8188CE 802.11n PCIe
wireless network adapters.
...
...
@@ -30,7 +23,9 @@ config RTL8192CE
config RTL8192SE
tristate "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter"
depends on RTLWIFI && PCI
depends on PCI
select RTLWIFI
select RTLWIFI_PCI
---help---
This is the driver for Realtek RTL8192SE/RTL8191SE 802.11n PCIe
wireless network adapters.
...
...
@@ -39,7 +34,9 @@ config RTL8192SE
config RTL8192DE
tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
depends on RTLWIFI && PCI
depends on PCI
select RTLWIFI
select RTLWIFI_PCI
---help---
This is the driver for Realtek RTL8192DE/RTL8188DE 802.11n PCIe
wireless network adapters.
...
...
@@ -48,7 +45,9 @@ config RTL8192DE
config RTL8723AE
tristate "Realtek RTL8723AE PCIe Wireless Network Adapter"
depends on RTLWIFI && PCI
depends on PCI
select RTLWIFI
select RTLWIFI_PCI
---help---
This is the driver for Realtek RTL8723AE 802.11n PCIe
wireless network adapters.
...
...
@@ -57,7 +56,9 @@ config RTL8723AE
config RTL8188EE
tristate "Realtek RTL8188EE Wireless Network Adapter"
depends on RTLWIFI && PCI
depends on PCI
select RTLWIFI
select RTLWIFI_PCI
---help---
This is the driver for Realtek RTL8188EE 802.11n PCIe
wireless network adapters.
...
...
@@ -66,7 +67,9 @@ config RTL8188EE
config RTL8192CU
tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
depends on RTLWIFI && USB
depends on USB
select RTLWIFI
select RTLWIFI_USB
select RTL8192C_COMMON
---help---
This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
...
...
@@ -74,7 +77,28 @@ config RTL8192CU
If you choose to build it as a module, it will be called rtl8192cu
config RTLWIFI
tristate
select FW_LOADER
config RTLWIFI_PCI
tristate
config RTLWIFI_USB
tristate
config RTLWIFI_DEBUG
bool "Debugging output for rtlwifi driver family"
depends on RTLWIFI
default y
---help---
To use the module option that sets the dynamic-debugging level for,
the front-end driver, this parameter must be "Y". For memory-limited
systems, choose "N". If in doubt, choose "Y".
config RTL8192C_COMMON
tristate
depends on RTL8192CE || RTL8192CU
default m
default y
endif
drivers/net/wireless/rtlwifi/Makefile
浏览文件 @
9d55911e
...
...
@@ -12,13 +12,11 @@ rtlwifi-objs := \
rtl8192c_common-objs
+=
\
ifneq
($(CONFIG_PCI),)
rtlwifi-objs
+=
pci.o
endif
obj-$(CONFIG_RTLWIFI_PCI)
+=
rtl_pci.o
rtl_pci-objs
:=
pci.o
ifneq
($(CONFIG_USB),)
rtlwifi-objs
+=
usb.o
endif
obj-$(CONFIG_RTLWIFI_USB)
+=
rtl_usb.o
rtl_usb-objs
:=
usb.o
obj-$(CONFIG_RTL8192C_COMMON)
+=
rtl8192c/
obj-$(CONFIG_RTL8192CE)
+=
rtl8192ce/
...
...
drivers/net/wireless/rtlwifi/base.c
浏览文件 @
9d55911e
...
...
@@ -172,6 +172,7 @@ u8 rtl_tid_to_ac(u8 tid)
{
return
tid_to_ac
[
tid
];
}
EXPORT_SYMBOL_GPL
(
rtl_tid_to_ac
);
static
void
_rtl_init_hw_ht_capab
(
struct
ieee80211_hw
*
hw
,
struct
ieee80211_sta_ht_cap
*
ht_cap
)
...
...
@@ -406,6 +407,7 @@ void rtl_deinit_deferred_work(struct ieee80211_hw *hw)
cancel_delayed_work
(
&
rtlpriv
->
works
.
ps_rfon_wq
);
cancel_delayed_work
(
&
rtlpriv
->
works
.
fwevt_wq
);
}
EXPORT_SYMBOL_GPL
(
rtl_deinit_deferred_work
);
void
rtl_init_rfkill
(
struct
ieee80211_hw
*
hw
)
{
...
...
@@ -439,6 +441,7 @@ void rtl_deinit_rfkill(struct ieee80211_hw *hw)
{
wiphy_rfkill_stop_polling
(
hw
->
wiphy
);
}
EXPORT_SYMBOL_GPL
(
rtl_deinit_rfkill
);
int
rtl_init_core
(
struct
ieee80211_hw
*
hw
)
{
...
...
@@ -489,10 +492,12 @@ int rtl_init_core(struct ieee80211_hw *hw)
return
0
;
}
EXPORT_SYMBOL_GPL
(
rtl_init_core
);
void
rtl_deinit_core
(
struct
ieee80211_hw
*
hw
)
{
}
EXPORT_SYMBOL_GPL
(
rtl_deinit_core
);
void
rtl_init_rx_config
(
struct
ieee80211_hw
*
hw
)
{
...
...
@@ -501,6 +506,7 @@ void rtl_init_rx_config(struct ieee80211_hw *hw)
rtlpriv
->
cfg
->
ops
->
get_hw_reg
(
hw
,
HW_VAR_RCR
,
(
u8
*
)
(
&
mac
->
rx_conf
));
}
EXPORT_SYMBOL_GPL
(
rtl_init_rx_config
);
/*********************************************************
*
...
...
@@ -879,6 +885,7 @@ bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb)
return
true
;
}
EXPORT_SYMBOL_GPL
(
rtl_tx_mgmt_proc
);
void
rtl_get_tcb_desc
(
struct
ieee80211_hw
*
hw
,
struct
ieee80211_tx_info
*
info
,
...
...
@@ -1052,6 +1059,7 @@ bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
return
true
;
}
EXPORT_SYMBOL_GPL
(
rtl_action_proc
);
/*should call before software enc*/
u8
rtl_is_special_data
(
struct
ieee80211_hw
*
hw
,
struct
sk_buff
*
skb
,
u8
is_tx
)
...
...
@@ -1125,6 +1133,7 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
return
false
;
}
EXPORT_SYMBOL_GPL
(
rtl_is_special_data
);
/*********************************************************
*
...
...
@@ -1300,6 +1309,7 @@ void rtl_beacon_statistic(struct ieee80211_hw *hw, struct sk_buff *skb)
rtlpriv
->
link_info
.
bcn_rx_inperiod
++
;
}
EXPORT_SYMBOL_GPL
(
rtl_beacon_statistic
);
void
rtl_watchdog_wq_callback
(
void
*
data
)
{
...
...
@@ -1793,6 +1803,7 @@ void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len)
mac
->
vendor
=
vendor
;
}
EXPORT_SYMBOL_GPL
(
rtl_recognize_peer
);
/*********************************************************
*
...
...
@@ -1849,6 +1860,7 @@ struct attribute_group rtl_attribute_group = {
.
name
=
"rtlsysfs"
,
.
attrs
=
rtl_sysfs_entries
,
};
EXPORT_SYMBOL_GPL
(
rtl_attribute_group
);
MODULE_AUTHOR
(
"lizhaoming <chaoming_li@realsil.com.cn>"
);
MODULE_AUTHOR
(
"Realtek WlanFAE <wlanfae@realtek.com>"
);
...
...
@@ -1856,7 +1868,8 @@ MODULE_AUTHOR("Larry Finger <Larry.FInger@lwfinger.net>");
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Realtek 802.11n PCI wireless core"
);
struct
rtl_global_var
global_var
=
{};
struct
rtl_global_var
rtl_global_var
=
{};
EXPORT_SYMBOL_GPL
(
rtl_global_var
);
static
int
__init
rtl_core_module_init
(
void
)
{
...
...
@@ -1864,8 +1877,8 @@ static int __init rtl_core_module_init(void)
pr_err
(
"Unable to register rtl_rc, use default RC !!
\n
"
);
/* init some global vars */
INIT_LIST_HEAD
(
&
global_var
.
glb_priv_list
);
spin_lock_init
(
&
global_var
.
glb_list_lock
);
INIT_LIST_HEAD
(
&
rtl_
global_var
.
glb_priv_list
);
spin_lock_init
(
&
rtl_
global_var
.
glb_list_lock
);
return
0
;
}
...
...
drivers/net/wireless/rtlwifi/base.h
浏览文件 @
9d55911e
...
...
@@ -147,7 +147,7 @@ void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len);
u8
rtl_tid_to_ac
(
u8
tid
);
extern
struct
attribute_group
rtl_attribute_group
;
void
rtl_easy_concurrent_retrytimer_callback
(
unsigned
long
data
);
extern
struct
rtl_global_var
global_var
;
extern
struct
rtl_global_var
rtl_
global_var
;
int
rtlwifi_rate_mapping
(
struct
ieee80211_hw
*
hw
,
bool
isht
,
u8
desc_rate
,
bool
first_ampdu
);
bool
rtl_tx_mgmt_proc
(
struct
ieee80211_hw
*
hw
,
struct
sk_buff
*
skb
);
...
...
drivers/net/wireless/rtlwifi/core.c
浏览文件 @
9d55911e
...
...
@@ -1330,3 +1330,4 @@ const struct ieee80211_ops rtl_ops = {
.
rfkill_poll
=
rtl_op_rfkill_poll
,
.
flush
=
rtl_op_flush
,
};
EXPORT_SYMBOL_GPL
(
rtl_ops
);
drivers/net/wireless/rtlwifi/debug.c
浏览文件 @
9d55911e
...
...
@@ -51,3 +51,4 @@ void rtl_dbgp_flag_init(struct ieee80211_hw *hw)
/*Init Debug flag enable condition */
}
EXPORT_SYMBOL_GPL
(
rtl_dbgp_flag_init
);
drivers/net/wireless/rtlwifi/efuse.c
浏览文件 @
9d55911e
...
...
@@ -229,6 +229,7 @@ void read_efuse_byte(struct ieee80211_hw *hw, u16 _offset, u8 *pbuf)
*
pbuf
=
(
u8
)
(
value32
&
0xff
);
}
EXPORT_SYMBOL_GPL
(
read_efuse_byte
);
void
read_efuse
(
struct
ieee80211_hw
*
hw
,
u16
_offset
,
u16
_size_byte
,
u8
*
pbuf
)
{
...
...
drivers/net/wireless/rtlwifi/pci.c
浏览文件 @
9d55911e
...
...
@@ -35,6 +35,13 @@
#include "efuse.h"
#include <linux/export.h>
#include <linux/kmemleak.h>
#include <linux/module.h>
MODULE_AUTHOR
(
"lizhaoming <chaoming_li@realsil.com.cn>"
);
MODULE_AUTHOR
(
"Realtek WlanFAE <wlanfae@realtek.com>"
);
MODULE_AUTHOR
(
"Larry Finger <Larry.FInger@lwfinger.net>"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"PCI basic driver for rtlwifi"
);
static
const
u16
pcibridge_vendors
[
PCI_BRIDGE_VENDOR_MAX
]
=
{
PCI_VENDOR_ID_INTEL
,
...
...
@@ -1008,19 +1015,6 @@ static void _rtl_pci_prepare_bcn_tasklet(struct ieee80211_hw *hw)
return
;
}
static
void
rtl_lps_change_work_callback
(
struct
work_struct
*
work
)
{
struct
rtl_works
*
rtlworks
=
container_of
(
work
,
struct
rtl_works
,
lps_change_work
);
struct
ieee80211_hw
*
hw
=
rtlworks
->
hw
;
struct
rtl_priv
*
rtlpriv
=
rtl_priv
(
hw
);
if
(
rtlpriv
->
enter_ps
)
rtl_lps_enter
(
hw
);
else
rtl_lps_leave
(
hw
);
}
static
void
_rtl_pci_init_trx_var
(
struct
ieee80211_hw
*
hw
)
{
struct
rtl_pci
*
rtlpci
=
rtl_pcidev
(
rtl_pcipriv
(
hw
));
...
...
@@ -1899,7 +1893,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
rtlpriv
->
rtlhal
.
interface
=
INTF_PCI
;
rtlpriv
->
cfg
=
(
struct
rtl_hal_cfg
*
)(
id
->
driver_data
);
rtlpriv
->
intf_ops
=
&
rtl_pci_ops
;
rtlpriv
->
glb_var
=
&
global_var
;
rtlpriv
->
glb_var
=
&
rtl_
global_var
;
/*
*init dbgp flags before all
...
...
drivers/net/wireless/rtlwifi/ps.c
浏览文件 @
9d55911e
...
...
@@ -269,6 +269,7 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
spin_unlock_irqrestore
(
&
rtlpriv
->
locks
.
ips_lock
,
flags
);
}
EXPORT_SYMBOL_GPL
(
rtl_ips_nic_on
);
/*for FW LPS*/
...
...
@@ -518,6 +519,7 @@ void rtl_swlps_beacon(struct ieee80211_hw *hw, void *data, unsigned int len)
"u_bufferd: %x, m_buffered: %x
\n
"
,
u_buffed
,
m_buffed
);
}
}
EXPORT_SYMBOL_GPL
(
rtl_swlps_beacon
);
void
rtl_swlps_rf_awake
(
struct
ieee80211_hw
*
hw
)
{
...
...
@@ -611,6 +613,19 @@ void rtl_swlps_rf_sleep(struct ieee80211_hw *hw)
MSECS
(
sleep_intv
*
mac
->
vif
->
bss_conf
.
beacon_int
-
40
));
}
void
rtl_lps_change_work_callback
(
struct
work_struct
*
work
)
{
struct
rtl_works
*
rtlworks
=
container_of
(
work
,
struct
rtl_works
,
lps_change_work
);
struct
ieee80211_hw
*
hw
=
rtlworks
->
hw
;
struct
rtl_priv
*
rtlpriv
=
rtl_priv
(
hw
);
if
(
rtlpriv
->
enter_ps
)
rtl_lps_enter
(
hw
);
else
rtl_lps_leave
(
hw
);
}
EXPORT_SYMBOL_GPL
(
rtl_lps_change_work_callback
);
void
rtl_swlps_wq_callback
(
void
*
data
)
{
...
...
@@ -922,3 +937,4 @@ void rtl_p2p_info(struct ieee80211_hw *hw, void *data, unsigned int len)
else
rtl_p2p_noa_ie
(
hw
,
data
,
len
-
FCS_LEN
);
}
EXPORT_SYMBOL_GPL
(
rtl_p2p_info
);
drivers/net/wireless/rtlwifi/ps.h
浏览文件 @
9d55911e
...
...
@@ -49,5 +49,6 @@ void rtl_swlps_rf_awake(struct ieee80211_hw *hw);
void
rtl_swlps_rf_sleep
(
struct
ieee80211_hw
*
hw
);
void
rtl_p2p_ps_cmd
(
struct
ieee80211_hw
*
hw
,
u8
p2p_ps_state
);
void
rtl_p2p_info
(
struct
ieee80211_hw
*
hw
,
void
*
data
,
unsigned
int
len
);
void
rtl_lps_change_work_callback
(
struct
work_struct
*
work
);
#endif
drivers/net/wireless/rtlwifi/usb.c
浏览文件 @
9d55911e
...
...
@@ -32,6 +32,13 @@
#include "ps.h"
#include "rtl8192c/fw_common.h"
#include <linux/export.h>
#include <linux/module.h>
MODULE_AUTHOR
(
"lizhaoming <chaoming_li@realsil.com.cn>"
);
MODULE_AUTHOR
(
"Realtek WlanFAE <wlanfae@realtek.com>"
);
MODULE_AUTHOR
(
"Larry Finger <Larry.FInger@lwfinger.net>"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"USB basic driver for rtlwifi"
);
#define REALTEK_USB_VENQT_READ 0xC0
#define REALTEK_USB_VENQT_WRITE 0x40
...
...
@@ -1070,6 +1077,8 @@ int rtl_usb_probe(struct usb_interface *intf,
spin_lock_init
(
&
rtlpriv
->
locks
.
usb_lock
);
INIT_WORK
(
&
rtlpriv
->
works
.
fill_h2c_cmd
,
rtl_fill_h2c_cmd_work_callback
);
INIT_WORK
(
&
rtlpriv
->
works
.
lps_change_work
,
rtl_lps_change_work_callback
);
rtlpriv
->
usb_data_index
=
0
;
init_completion
(
&
rtlpriv
->
firmware_loading_complete
);
...
...
include/linux/mod_devicetable.h
浏览文件 @
9d55911e
...
...
@@ -361,7 +361,8 @@ struct ssb_device_id {
__u16
vendor
;
__u16
coreid
;
__u8
revision
;
};
__u8
__pad
;
}
__attribute__
((
packed
,
aligned
(
2
)));
#define SSB_DEVICE(_vendor, _coreid, _revision) \
{ .vendor = _vendor, .coreid = _coreid, .revision = _revision, }
#define SSB_DEVTABLE_END \
...
...
@@ -377,7 +378,7 @@ struct bcma_device_id {
__u16
id
;
__u8
rev
;
__u8
class
;
};
}
__attribute__
((
packed
,
aligned
(
2
)))
;
#define BCMA_CORE(_manuf, _id, _rev, _class) \
{ .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, }
#define BCMA_CORETABLE_END \
...
...
net/mac80211/cfg.c
浏览文件 @
9d55911e
...
...
@@ -666,6 +666,8 @@ static void ieee80211_get_et_stats(struct wiphy *wiphy,
if
(
sta
->
sdata
->
dev
!=
dev
)
continue
;
sinfo
.
filled
=
0
;
sta_set_sinfo
(
sta
,
&
sinfo
);
i
=
0
;
ADD_STA_STATS
(
sta
);
}
...
...
net/mac80211/rc80211_minstrel.c
浏览文件 @
9d55911e
...
...
@@ -290,7 +290,7 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,
struct
minstrel_rate
*
msr
,
*
mr
;
unsigned
int
ndx
;
bool
mrr_capable
;
bool
prev_sample
=
mi
->
prev_sample
;
bool
prev_sample
;
int
delta
;
int
sampling_ratio
;
...
...
@@ -314,6 +314,7 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,
(
mi
->
sample_count
+
mi
->
sample_deferred
/
2
);
/* delta < 0: no sampling required */
prev_sample
=
mi
->
prev_sample
;
mi
->
prev_sample
=
false
;
if
(
delta
<
0
||
(
!
mrr_capable
&&
prev_sample
))
return
;
...
...
net/mac80211/rc80211_minstrel_ht.c
浏览文件 @
9d55911e
...
...
@@ -804,10 +804,18 @@ minstrel_ht_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
sample_group
=
&
minstrel_mcs_groups
[
sample_idx
/
MCS_GROUP_RATES
];
info
->
flags
|=
IEEE80211_TX_CTL_RATE_CTRL_PROBE
;
rate
->
count
=
1
;
if
(
sample_idx
/
MCS_GROUP_RATES
==
MINSTREL_CCK_GROUP
)
{
int
idx
=
sample_idx
%
ARRAY_SIZE
(
mp
->
cck_rates
);
rate
->
idx
=
mp
->
cck_rates
[
idx
];
rate
->
flags
=
0
;
return
;
}
rate
->
idx
=
sample_idx
%
MCS_GROUP_RATES
+
(
sample_group
->
streams
-
1
)
*
MCS_GROUP_RATES
;
rate
->
flags
=
IEEE80211_TX_RC_MCS
|
sample_group
->
flags
;
rate
->
count
=
1
;
}
static
void
...
...
net/mac80211/rx.c
浏览文件 @
9d55911e
...
...
@@ -936,8 +936,14 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
struct
ieee80211_hdr
*
hdr
=
(
struct
ieee80211_hdr
*
)
rx
->
skb
->
data
;
struct
ieee80211_rx_status
*
status
=
IEEE80211_SKB_RXCB
(
rx
->
skb
);
/* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */
if
(
rx
->
sta
&&
!
is_multicast_ether_addr
(
hdr
->
addr1
))
{
/*
* Drop duplicate 802.11 retransmissions
* (IEEE 802.11-2012: 9.3.2.10 "Duplicate detection and recovery")
*/
if
(
rx
->
skb
->
len
>=
24
&&
rx
->
sta
&&
!
ieee80211_is_ctl
(
hdr
->
frame_control
)
&&
!
ieee80211_is_qos_nullfunc
(
hdr
->
frame_control
)
&&
!
is_multicast_ether_addr
(
hdr
->
addr1
))
{
if
(
unlikely
(
ieee80211_has_retry
(
hdr
->
frame_control
)
&&
rx
->
sta
->
last_seq_ctrl
[
rx
->
seqno_idx
]
==
hdr
->
seq_ctrl
))
{
...
...
net/wireless/nl80211.c
浏览文件 @
9d55911e
...
...
@@ -4770,9 +4770,9 @@ do { \
FILL_IN_MESH_PARAM_IF_SET
(
tb
,
cfg
,
dot11MeshForwarding
,
0
,
1
,
mask
,
NL80211_MESHCONF_FORWARDING
,
nla_get_u8
);
FILL_IN_MESH_PARAM_IF_SET
(
tb
,
cfg
,
rssi_threshold
,
1
,
255
,
FILL_IN_MESH_PARAM_IF_SET
(
tb
,
cfg
,
rssi_threshold
,
-
255
,
0
,
mask
,
NL80211_MESHCONF_RSSI_THRESHOLD
,
nla_get_
u
32
);
nla_get_
s
32
);
FILL_IN_MESH_PARAM_IF_SET
(
tb
,
cfg
,
ht_opmode
,
0
,
16
,
mask
,
NL80211_MESHCONF_HT_OPMODE
,
nla_get_u16
);
...
...
@@ -6613,12 +6613,14 @@ EXPORT_SYMBOL(cfg80211_testmode_alloc_event_skb);
void
cfg80211_testmode_event
(
struct
sk_buff
*
skb
,
gfp_t
gfp
)
{
struct
cfg80211_registered_device
*
rdev
=
((
void
**
)
skb
->
cb
)[
0
];
void
*
hdr
=
((
void
**
)
skb
->
cb
)[
1
];
struct
nlattr
*
data
=
((
void
**
)
skb
->
cb
)[
2
];
nla_nest_end
(
skb
,
data
);
genlmsg_end
(
skb
,
hdr
);
genlmsg_multicast
(
skb
,
0
,
nl80211_testmode_mcgrp
.
id
,
gfp
);
genlmsg_multicast_netns
(
wiphy_net
(
&
rdev
->
wiphy
),
skb
,
0
,
nl80211_testmode_mcgrp
.
id
,
gfp
);
}
EXPORT_SYMBOL
(
cfg80211_testmode_event
);
#endif
...
...
@@ -10064,7 +10066,8 @@ void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
genlmsg_end
(
msg
,
hdr
);
genlmsg_multicast
(
msg
,
0
,
nl80211_mlme_mcgrp
.
id
,
gfp
);
genlmsg_multicast_netns
(
wiphy_net
(
&
rdev
->
wiphy
),
msg
,
0
,
nl80211_mlme_mcgrp
.
id
,
gfp
);
return
;
nla_put_failure:
...
...
net/wireless/reg.c
浏览文件 @
9d55911e
...
...
@@ -2279,7 +2279,9 @@ void wiphy_regulatory_deregister(struct wiphy *wiphy)
static
void
reg_timeout_work
(
struct
work_struct
*
work
)
{
REG_DBG_PRINT
(
"Timeout while waiting for CRDA to reply, restoring regulatory settings
\n
"
);
rtnl_lock
();
restore_regulatory_settings
(
true
);
rtnl_unlock
();
}
int
__init
regulatory_init
(
void
)
...
...
net/wireless/sme.c
浏览文件 @
9d55911e
...
...
@@ -34,8 +34,10 @@ struct cfg80211_conn {
CFG80211_CONN_SCAN_AGAIN
,
CFG80211_CONN_AUTHENTICATE_NEXT
,
CFG80211_CONN_AUTHENTICATING
,
CFG80211_CONN_AUTH_FAILED
,
CFG80211_CONN_ASSOCIATE_NEXT
,
CFG80211_CONN_ASSOCIATING
,
CFG80211_CONN_ASSOC_FAILED
,
CFG80211_CONN_DEAUTH
,
CFG80211_CONN_CONNECTED
,
}
state
;
...
...
@@ -164,6 +166,8 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
NULL
,
0
,
params
->
key
,
params
->
key_len
,
params
->
key_idx
,
NULL
,
0
);
case
CFG80211_CONN_AUTH_FAILED
:
return
-
ENOTCONN
;
case
CFG80211_CONN_ASSOCIATE_NEXT
:
BUG_ON
(
!
rdev
->
ops
->
assoc
);
wdev
->
conn
->
state
=
CFG80211_CONN_ASSOCIATING
;
...
...
@@ -188,10 +192,17 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
WLAN_REASON_DEAUTH_LEAVING
,
false
);
return
err
;
case
CFG80211_CONN_ASSOC_FAILED
:
cfg80211_mlme_deauth
(
rdev
,
wdev
->
netdev
,
params
->
bssid
,
NULL
,
0
,
WLAN_REASON_DEAUTH_LEAVING
,
false
);
return
-
ENOTCONN
;
case
CFG80211_CONN_DEAUTH
:
cfg80211_mlme_deauth
(
rdev
,
wdev
->
netdev
,
params
->
bssid
,
NULL
,
0
,
WLAN_REASON_DEAUTH_LEAVING
,
false
);
/* free directly, disconnected event already sent */
cfg80211_sme_free
(
wdev
);
return
0
;
default:
return
0
;
...
...
@@ -371,7 +382,7 @@ bool cfg80211_sme_rx_assoc_resp(struct wireless_dev *wdev, u16 status)
return
true
;
}
wdev
->
conn
->
state
=
CFG80211_CONN_
DEAUTH
;
wdev
->
conn
->
state
=
CFG80211_CONN_
ASSOC_FAILED
;
schedule_work
(
&
rdev
->
conn_work
);
return
false
;
}
...
...
@@ -383,7 +394,13 @@ void cfg80211_sme_deauth(struct wireless_dev *wdev)
void
cfg80211_sme_auth_timeout
(
struct
wireless_dev
*
wdev
)
{
cfg80211_sme_free
(
wdev
);
struct
cfg80211_registered_device
*
rdev
=
wiphy_to_dev
(
wdev
->
wiphy
);
if
(
!
wdev
->
conn
)
return
;
wdev
->
conn
->
state
=
CFG80211_CONN_AUTH_FAILED
;
schedule_work
(
&
rdev
->
conn_work
);
}
void
cfg80211_sme_disassoc
(
struct
wireless_dev
*
wdev
)
...
...
@@ -399,7 +416,13 @@ void cfg80211_sme_disassoc(struct wireless_dev *wdev)
void
cfg80211_sme_assoc_timeout
(
struct
wireless_dev
*
wdev
)
{
cfg80211_sme_disassoc
(
wdev
);
struct
cfg80211_registered_device
*
rdev
=
wiphy_to_dev
(
wdev
->
wiphy
);
if
(
!
wdev
->
conn
)
return
;
wdev
->
conn
->
state
=
CFG80211_CONN_ASSOC_FAILED
;
schedule_work
(
&
rdev
->
conn_work
);
}
static
int
cfg80211_sme_connect
(
struct
wireless_dev
*
wdev
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录