Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
9d1cd503
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
170
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9d1cd503
编写于
1月 06, 2014
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
上级
c8bf40ad
b7e04735
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
105 addition
and
40 deletion
+105
-40
drivers/bluetooth/ath3k.c
drivers/bluetooth/ath3k.c
+2
-0
drivers/bluetooth/btusb.c
drivers/bluetooth/btusb.c
+1
-0
drivers/net/wireless/ath/ath9k/ar9002_mac.c
drivers/net/wireless/ath/ath9k/ar9002_mac.c
+43
-9
drivers/net/wireless/ath/ath9k/htc_drv_main.c
drivers/net/wireless/ath/ath9k/htc_drv_main.c
+17
-8
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/main.c
+3
-2
drivers/net/wireless/ath/ath9k/xmit.c
drivers/net/wireless/ath/ath9k/xmit.c
+4
-0
drivers/net/wireless/rtlwifi/pci.c
drivers/net/wireless/rtlwifi/pci.c
+3
-1
net/bluetooth/hci_sock.c
net/bluetooth/hci_sock.c
+16
-10
net/wireless/radiotap.c
net/wireless/radiotap.c
+4
-0
net/wireless/sme.c
net/wireless/sme.c
+12
-10
未找到文件。
drivers/bluetooth/ath3k.c
浏览文件 @
9d1cd503
...
@@ -88,6 +88,7 @@ static const struct usb_device_id ath3k_table[] = {
...
@@ -88,6 +88,7 @@ static const struct usb_device_id ath3k_table[] = {
{
USB_DEVICE
(
0x0CF3
,
0xE004
)
},
{
USB_DEVICE
(
0x0CF3
,
0xE004
)
},
{
USB_DEVICE
(
0x0CF3
,
0xE005
)
},
{
USB_DEVICE
(
0x0CF3
,
0xE005
)
},
{
USB_DEVICE
(
0x0930
,
0x0219
)
},
{
USB_DEVICE
(
0x0930
,
0x0219
)
},
{
USB_DEVICE
(
0x0930
,
0x0220
)
},
{
USB_DEVICE
(
0x0489
,
0xe057
)
},
{
USB_DEVICE
(
0x0489
,
0xe057
)
},
{
USB_DEVICE
(
0x13d3
,
0x3393
)
},
{
USB_DEVICE
(
0x13d3
,
0x3393
)
},
{
USB_DEVICE
(
0x0489
,
0xe04e
)
},
{
USB_DEVICE
(
0x0489
,
0xe04e
)
},
...
@@ -132,6 +133,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
...
@@ -132,6 +133,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
{
USB_DEVICE
(
0x0cf3
,
0xe004
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0cf3
,
0xe004
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0cf3
,
0xe005
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0cf3
,
0xe005
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0930
,
0x0219
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0930
,
0x0219
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0930
,
0x0220
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe057
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe057
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x13d3
,
0x3393
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x13d3
,
0x3393
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe04e
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe04e
),
.
driver_info
=
BTUSB_ATH3012
},
...
...
drivers/bluetooth/btusb.c
浏览文件 @
9d1cd503
...
@@ -155,6 +155,7 @@ static const struct usb_device_id blacklist_table[] = {
...
@@ -155,6 +155,7 @@ static const struct usb_device_id blacklist_table[] = {
{
USB_DEVICE
(
0x0cf3
,
0xe004
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0cf3
,
0xe004
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0cf3
,
0xe005
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0cf3
,
0xe005
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0930
,
0x0219
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0930
,
0x0219
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0930
,
0x0220
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe057
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe057
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x13d3
,
0x3393
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x13d3
,
0x3393
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe04e
),
.
driver_info
=
BTUSB_ATH3012
},
{
USB_DEVICE
(
0x0489
,
0xe04e
),
.
driver_info
=
BTUSB_ATH3012
},
...
...
drivers/net/wireless/ath/ath9k/ar9002_mac.c
浏览文件 @
9d1cd503
...
@@ -77,9 +77,16 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
...
@@ -77,9 +77,16 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
mask2
|=
ATH9K_INT_CST
;
mask2
|=
ATH9K_INT_CST
;
if
(
isr2
&
AR_ISR_S2_TSFOOR
)
if
(
isr2
&
AR_ISR_S2_TSFOOR
)
mask2
|=
ATH9K_INT_TSFOOR
;
mask2
|=
ATH9K_INT_TSFOOR
;
if
(
!
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_RAC_SUPPORTED
))
{
REG_WRITE
(
ah
,
AR_ISR_S2
,
isr2
);
isr
&=
~
AR_ISR_BCNMISC
;
}
}
}
isr
=
REG_READ
(
ah
,
AR_ISR_RAC
);
if
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_RAC_SUPPORTED
)
isr
=
REG_READ
(
ah
,
AR_ISR_RAC
);
if
(
isr
==
0xffffffff
)
{
if
(
isr
==
0xffffffff
)
{
*
masked
=
0
;
*
masked
=
0
;
return
false
;
return
false
;
...
@@ -98,11 +105,23 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
...
@@ -98,11 +105,23 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
*
masked
|=
ATH9K_INT_TX
;
*
masked
|=
ATH9K_INT_TX
;
s0_s
=
REG_READ
(
ah
,
AR_ISR_S0_S
);
if
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_RAC_SUPPORTED
)
{
s0_s
=
REG_READ
(
ah
,
AR_ISR_S0_S
);
s1_s
=
REG_READ
(
ah
,
AR_ISR_S1_S
);
}
else
{
s0_s
=
REG_READ
(
ah
,
AR_ISR_S0
);
REG_WRITE
(
ah
,
AR_ISR_S0
,
s0_s
);
s1_s
=
REG_READ
(
ah
,
AR_ISR_S1
);
REG_WRITE
(
ah
,
AR_ISR_S1
,
s1_s
);
isr
&=
~
(
AR_ISR_TXOK
|
AR_ISR_TXDESC
|
AR_ISR_TXERR
|
AR_ISR_TXEOL
);
}
ah
->
intr_txqs
|=
MS
(
s0_s
,
AR_ISR_S0_QCU_TXOK
);
ah
->
intr_txqs
|=
MS
(
s0_s
,
AR_ISR_S0_QCU_TXOK
);
ah
->
intr_txqs
|=
MS
(
s0_s
,
AR_ISR_S0_QCU_TXDESC
);
ah
->
intr_txqs
|=
MS
(
s0_s
,
AR_ISR_S0_QCU_TXDESC
);
s1_s
=
REG_READ
(
ah
,
AR_ISR_S1_S
);
ah
->
intr_txqs
|=
MS
(
s1_s
,
AR_ISR_S1_QCU_TXERR
);
ah
->
intr_txqs
|=
MS
(
s1_s
,
AR_ISR_S1_QCU_TXERR
);
ah
->
intr_txqs
|=
MS
(
s1_s
,
AR_ISR_S1_QCU_TXEOL
);
ah
->
intr_txqs
|=
MS
(
s1_s
,
AR_ISR_S1_QCU_TXEOL
);
}
}
...
@@ -115,13 +134,15 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
...
@@ -115,13 +134,15 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
*
masked
|=
mask2
;
*
masked
|=
mask2
;
}
}
if
(
AR_SREV_9100
(
ah
))
if
(
!
AR_SREV_9100
(
ah
)
&&
(
isr
&
AR_ISR_GENTMR
))
{
return
true
;
if
(
isr
&
AR_ISR_GENTMR
)
{
u32
s5_s
;
u32
s5_s
;
s5_s
=
REG_READ
(
ah
,
AR_ISR_S5_S
);
if
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_RAC_SUPPORTED
)
{
s5_s
=
REG_READ
(
ah
,
AR_ISR_S5_S
);
}
else
{
s5_s
=
REG_READ
(
ah
,
AR_ISR_S5
);
}
ah
->
intr_gen_timer_trigger
=
ah
->
intr_gen_timer_trigger
=
MS
(
s5_s
,
AR_ISR_S5_GENTIMER_TRIG
);
MS
(
s5_s
,
AR_ISR_S5_GENTIMER_TRIG
);
...
@@ -134,8 +155,21 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
...
@@ -134,8 +155,21 @@ static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked,
if
((
s5_s
&
AR_ISR_S5_TIM_TIMER
)
&&
if
((
s5_s
&
AR_ISR_S5_TIM_TIMER
)
&&
!
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_AUTOSLEEP
))
!
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_AUTOSLEEP
))
*
masked
|=
ATH9K_INT_TIM_TIMER
;
*
masked
|=
ATH9K_INT_TIM_TIMER
;
if
(
!
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_RAC_SUPPORTED
))
{
REG_WRITE
(
ah
,
AR_ISR_S5
,
s5_s
);
isr
&=
~
AR_ISR_GENTMR
;
}
}
}
if
(
!
(
pCap
->
hw_caps
&
ATH9K_HW_CAP_RAC_SUPPORTED
))
{
REG_WRITE
(
ah
,
AR_ISR
,
isr
);
REG_READ
(
ah
,
AR_ISR
);
}
if
(
AR_SREV_9100
(
ah
))
return
true
;
if
(
sync_cause
)
{
if
(
sync_cause
)
{
if
(
sync_cause_p
)
if
(
sync_cause_p
)
*
sync_cause_p
=
sync_cause
;
*
sync_cause_p
=
sync_cause
;
...
...
drivers/net/wireless/ath/ath9k/htc_drv_main.c
浏览文件 @
9d1cd503
...
@@ -127,21 +127,26 @@ static void ath9k_htc_bssid_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
...
@@ -127,21 +127,26 @@ static void ath9k_htc_bssid_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
struct
ath9k_vif_iter_data
*
iter_data
=
data
;
struct
ath9k_vif_iter_data
*
iter_data
=
data
;
int
i
;
int
i
;
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
if
(
iter_data
->
hw_macaddr
!=
NULL
)
{
iter_data
->
mask
[
i
]
&=
~
(
iter_data
->
hw_macaddr
[
i
]
^
mac
[
i
]);
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
iter_data
->
mask
[
i
]
&=
~
(
iter_data
->
hw_macaddr
[
i
]
^
mac
[
i
]);
}
else
{
iter_data
->
hw_macaddr
=
mac
;
}
}
}
static
void
ath9k_htc_set_bssid_mask
(
struct
ath9k_htc_priv
*
priv
,
static
void
ath9k_htc_set_
mac_
bssid_mask
(
struct
ath9k_htc_priv
*
priv
,
struct
ieee80211_vif
*
vif
)
struct
ieee80211_vif
*
vif
)
{
{
struct
ath_common
*
common
=
ath9k_hw_common
(
priv
->
ah
);
struct
ath_common
*
common
=
ath9k_hw_common
(
priv
->
ah
);
struct
ath9k_vif_iter_data
iter_data
;
struct
ath9k_vif_iter_data
iter_data
;
/*
/*
* Use the hardware MAC address as reference, the hardware uses it
* Pick the MAC address of the first interface as the new hardware
* together with the BSSID mask when matching addresses.
* MAC address. The hardware will use it together with the BSSID mask
* when matching addresses.
*/
*/
iter_data
.
hw_macaddr
=
common
->
macaddr
;
iter_data
.
hw_macaddr
=
NULL
;
memset
(
&
iter_data
.
mask
,
0xff
,
ETH_ALEN
);
memset
(
&
iter_data
.
mask
,
0xff
,
ETH_ALEN
);
if
(
vif
)
if
(
vif
)
...
@@ -153,6 +158,10 @@ static void ath9k_htc_set_bssid_mask(struct ath9k_htc_priv *priv,
...
@@ -153,6 +158,10 @@ static void ath9k_htc_set_bssid_mask(struct ath9k_htc_priv *priv,
ath9k_htc_bssid_iter
,
&
iter_data
);
ath9k_htc_bssid_iter
,
&
iter_data
);
memcpy
(
common
->
bssidmask
,
iter_data
.
mask
,
ETH_ALEN
);
memcpy
(
common
->
bssidmask
,
iter_data
.
mask
,
ETH_ALEN
);
if
(
iter_data
.
hw_macaddr
)
memcpy
(
common
->
macaddr
,
iter_data
.
hw_macaddr
,
ETH_ALEN
);
ath_hw_setbssidmask
(
common
);
ath_hw_setbssidmask
(
common
);
}
}
...
@@ -1063,7 +1072,7 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw,
...
@@ -1063,7 +1072,7 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw,
goto
out
;
goto
out
;
}
}
ath9k_htc_set_bssid_mask
(
priv
,
vif
);
ath9k_htc_set_
mac_
bssid_mask
(
priv
,
vif
);
priv
->
vif_slot
|=
(
1
<<
avp
->
index
);
priv
->
vif_slot
|=
(
1
<<
avp
->
index
);
priv
->
nvifs
++
;
priv
->
nvifs
++
;
...
@@ -1128,7 +1137,7 @@ static void ath9k_htc_remove_interface(struct ieee80211_hw *hw,
...
@@ -1128,7 +1137,7 @@ static void ath9k_htc_remove_interface(struct ieee80211_hw *hw,
ath9k_htc_set_opmode
(
priv
);
ath9k_htc_set_opmode
(
priv
);
ath9k_htc_set_bssid_mask
(
priv
,
vif
);
ath9k_htc_set_
mac_
bssid_mask
(
priv
,
vif
);
/*
/*
* Stop ANI only if there are no associated station interfaces.
* Stop ANI only if there are no associated station interfaces.
...
...
drivers/net/wireless/ath/ath9k/main.c
浏览文件 @
9d1cd503
...
@@ -991,8 +991,9 @@ void ath9k_calculate_iter_data(struct ieee80211_hw *hw,
...
@@ -991,8 +991,9 @@ void ath9k_calculate_iter_data(struct ieee80211_hw *hw,
struct
ath_common
*
common
=
ath9k_hw_common
(
ah
);
struct
ath_common
*
common
=
ath9k_hw_common
(
ah
);
/*
/*
* Use the hardware MAC address as reference, the hardware uses it
* Pick the MAC address of the first interface as the new hardware
* together with the BSSID mask when matching addresses.
* MAC address. The hardware will use it together with the BSSID mask
* when matching addresses.
*/
*/
memset
(
iter_data
,
0
,
sizeof
(
*
iter_data
));
memset
(
iter_data
,
0
,
sizeof
(
*
iter_data
));
memset
(
&
iter_data
->
mask
,
0xff
,
ETH_ALEN
);
memset
(
&
iter_data
->
mask
,
0xff
,
ETH_ALEN
);
...
...
drivers/net/wireless/ath/ath9k/xmit.c
浏览文件 @
9d1cd503
...
@@ -1264,6 +1264,10 @@ static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf,
...
@@ -1264,6 +1264,10 @@ static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf,
if
(
!
rts_thresh
||
(
len
>
rts_thresh
))
if
(
!
rts_thresh
||
(
len
>
rts_thresh
))
rts
=
true
;
rts
=
true
;
}
}
if
(
!
aggr
)
len
=
fi
->
framelen
;
ath_buf_set_rate
(
sc
,
bf
,
&
info
,
len
,
rts
);
ath_buf_set_rate
(
sc
,
bf
,
&
info
,
len
,
rts
);
}
}
...
...
drivers/net/wireless/rtlwifi/pci.c
浏览文件 @
9d1cd503
...
@@ -738,6 +738,8 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw)
...
@@ -738,6 +738,8 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw)
};
};
int
index
=
rtlpci
->
rx_ring
[
rx_queue_idx
].
idx
;
int
index
=
rtlpci
->
rx_ring
[
rx_queue_idx
].
idx
;
if
(
rtlpci
->
driver_is_goingto_unload
)
return
;
/*RX NORMAL PKT */
/*RX NORMAL PKT */
while
(
count
--
)
{
while
(
count
--
)
{
/*rx descriptor */
/*rx descriptor */
...
@@ -1634,6 +1636,7 @@ static void rtl_pci_stop(struct ieee80211_hw *hw)
...
@@ -1634,6 +1636,7 @@ static void rtl_pci_stop(struct ieee80211_hw *hw)
*/
*/
set_hal_stop
(
rtlhal
);
set_hal_stop
(
rtlhal
);
rtlpci
->
driver_is_goingto_unload
=
true
;
rtlpriv
->
cfg
->
ops
->
disable_interrupt
(
hw
);
rtlpriv
->
cfg
->
ops
->
disable_interrupt
(
hw
);
cancel_work_sync
(
&
rtlpriv
->
works
.
lps_change_work
);
cancel_work_sync
(
&
rtlpriv
->
works
.
lps_change_work
);
...
@@ -1651,7 +1654,6 @@ static void rtl_pci_stop(struct ieee80211_hw *hw)
...
@@ -1651,7 +1654,6 @@ static void rtl_pci_stop(struct ieee80211_hw *hw)
ppsc
->
rfchange_inprogress
=
true
;
ppsc
->
rfchange_inprogress
=
true
;
spin_unlock_irqrestore
(
&
rtlpriv
->
locks
.
rf_ps_lock
,
flags
);
spin_unlock_irqrestore
(
&
rtlpriv
->
locks
.
rf_ps_lock
,
flags
);
rtlpci
->
driver_is_goingto_unload
=
true
;
rtlpriv
->
cfg
->
ops
->
hw_disable
(
hw
);
rtlpriv
->
cfg
->
ops
->
hw_disable
(
hw
);
/* some things are not needed if firmware not available */
/* some things are not needed if firmware not available */
if
(
!
rtlpriv
->
max_fw_size
)
if
(
!
rtlpriv
->
max_fw_size
)
...
...
net/bluetooth/hci_sock.c
浏览文件 @
9d1cd503
...
@@ -940,8 +940,22 @@ static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
...
@@ -940,8 +940,22 @@ static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
bt_cb
(
skb
)
->
pkt_type
=
*
((
unsigned
char
*
)
skb
->
data
);
bt_cb
(
skb
)
->
pkt_type
=
*
((
unsigned
char
*
)
skb
->
data
);
skb_pull
(
skb
,
1
);
skb_pull
(
skb
,
1
);
if
(
hci_pi
(
sk
)
->
channel
==
HCI_CHANNEL_RAW
&&
if
(
hci_pi
(
sk
)
->
channel
==
HCI_CHANNEL_USER
)
{
bt_cb
(
skb
)
->
pkt_type
==
HCI_COMMAND_PKT
)
{
/* No permission check is needed for user channel
* since that gets enforced when binding the socket.
*
* However check that the packet type is valid.
*/
if
(
bt_cb
(
skb
)
->
pkt_type
!=
HCI_COMMAND_PKT
&&
bt_cb
(
skb
)
->
pkt_type
!=
HCI_ACLDATA_PKT
&&
bt_cb
(
skb
)
->
pkt_type
!=
HCI_SCODATA_PKT
)
{
err
=
-
EINVAL
;
goto
drop
;
}
skb_queue_tail
(
&
hdev
->
raw_q
,
skb
);
queue_work
(
hdev
->
workqueue
,
&
hdev
->
tx_work
);
}
else
if
(
bt_cb
(
skb
)
->
pkt_type
==
HCI_COMMAND_PKT
)
{
u16
opcode
=
get_unaligned_le16
(
skb
->
data
);
u16
opcode
=
get_unaligned_le16
(
skb
->
data
);
u16
ogf
=
hci_opcode_ogf
(
opcode
);
u16
ogf
=
hci_opcode_ogf
(
opcode
);
u16
ocf
=
hci_opcode_ocf
(
opcode
);
u16
ocf
=
hci_opcode_ocf
(
opcode
);
...
@@ -972,14 +986,6 @@ static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
...
@@ -972,14 +986,6 @@ static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
goto
drop
;
goto
drop
;
}
}
if
(
hci_pi
(
sk
)
->
channel
==
HCI_CHANNEL_USER
&&
bt_cb
(
skb
)
->
pkt_type
!=
HCI_COMMAND_PKT
&&
bt_cb
(
skb
)
->
pkt_type
!=
HCI_ACLDATA_PKT
&&
bt_cb
(
skb
)
->
pkt_type
!=
HCI_SCODATA_PKT
)
{
err
=
-
EINVAL
;
goto
drop
;
}
skb_queue_tail
(
&
hdev
->
raw_q
,
skb
);
skb_queue_tail
(
&
hdev
->
raw_q
,
skb
);
queue_work
(
hdev
->
workqueue
,
&
hdev
->
tx_work
);
queue_work
(
hdev
->
workqueue
,
&
hdev
->
tx_work
);
}
}
...
...
net/wireless/radiotap.c
浏览文件 @
9d1cd503
...
@@ -124,6 +124,10 @@ int ieee80211_radiotap_iterator_init(
...
@@ -124,6 +124,10 @@ int ieee80211_radiotap_iterator_init(
/* find payload start allowing for extended bitmap(s) */
/* find payload start allowing for extended bitmap(s) */
if
(
iterator
->
_bitmap_shifter
&
(
1
<<
IEEE80211_RADIOTAP_EXT
))
{
if
(
iterator
->
_bitmap_shifter
&
(
1
<<
IEEE80211_RADIOTAP_EXT
))
{
if
((
unsigned
long
)
iterator
->
_arg
-
(
unsigned
long
)
iterator
->
_rtheader
+
sizeof
(
uint32_t
)
>
(
unsigned
long
)
iterator
->
_max_length
)
return
-
EINVAL
;
while
(
get_unaligned_le32
(
iterator
->
_arg
)
&
while
(
get_unaligned_le32
(
iterator
->
_arg
)
&
(
1
<<
IEEE80211_RADIOTAP_EXT
))
{
(
1
<<
IEEE80211_RADIOTAP_EXT
))
{
iterator
->
_arg
+=
sizeof
(
uint32_t
);
iterator
->
_arg
+=
sizeof
(
uint32_t
);
...
...
net/wireless/sme.c
浏览文件 @
9d1cd503
...
@@ -632,6 +632,16 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
...
@@ -632,6 +632,16 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
}
}
#endif
#endif
if
(
!
bss
&&
(
status
==
WLAN_STATUS_SUCCESS
))
{
WARN_ON_ONCE
(
!
wiphy_to_dev
(
wdev
->
wiphy
)
->
ops
->
connect
);
bss
=
cfg80211_get_bss
(
wdev
->
wiphy
,
NULL
,
bssid
,
wdev
->
ssid
,
wdev
->
ssid_len
,
WLAN_CAPABILITY_ESS
,
WLAN_CAPABILITY_ESS
);
if
(
bss
)
cfg80211_hold_bss
(
bss_from_pub
(
bss
));
}
if
(
wdev
->
current_bss
)
{
if
(
wdev
->
current_bss
)
{
cfg80211_unhold_bss
(
wdev
->
current_bss
);
cfg80211_unhold_bss
(
wdev
->
current_bss
);
cfg80211_put_bss
(
wdev
->
wiphy
,
&
wdev
->
current_bss
->
pub
);
cfg80211_put_bss
(
wdev
->
wiphy
,
&
wdev
->
current_bss
->
pub
);
...
@@ -649,16 +659,8 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
...
@@ -649,16 +659,8 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
return
;
return
;
}
}
if
(
!
bss
)
{
if
(
WARN_ON
(
!
bss
))
WARN_ON_ONCE
(
!
wiphy_to_dev
(
wdev
->
wiphy
)
->
ops
->
connect
);
return
;
bss
=
cfg80211_get_bss
(
wdev
->
wiphy
,
NULL
,
bssid
,
wdev
->
ssid
,
wdev
->
ssid_len
,
WLAN_CAPABILITY_ESS
,
WLAN_CAPABILITY_ESS
);
if
(
WARN_ON
(
!
bss
))
return
;
cfg80211_hold_bss
(
bss_from_pub
(
bss
));
}
wdev
->
current_bss
=
bss_from_pub
(
bss
);
wdev
->
current_bss
=
bss_from_pub
(
bss
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录