Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
9b6941d8
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9b6941d8
编写于
1月 26, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
上级
de221bd5
acd9f9cc
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
105 addition
and
132 deletion
+105
-132
MAINTAINERS
MAINTAINERS
+0
-1
drivers/bluetooth/ath3k.c
drivers/bluetooth/ath3k.c
+20
-55
drivers/net/wireless/ath/ath9k/hw.c
drivers/net/wireless/ath/ath9k/hw.c
+5
-1
drivers/net/wireless/ath/ath9k/hw.h
drivers/net/wireless/ath/ath9k/hw.h
+1
-0
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/main.c
+5
-3
drivers/net/wireless/ath/ath9k/xmit.c
drivers/net/wireless/ath/ath9k/xmit.c
+0
-2
drivers/net/wireless/iwlwifi/iwl-4965.c
drivers/net/wireless/iwlwifi/iwl-4965.c
+1
-0
drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
+7
-4
drivers/net/wireless/rt2x00/rt73usb.c
drivers/net/wireless/rt2x00/rt73usb.c
+1
-0
drivers/net/wireless/rtlwifi/pci.c
drivers/net/wireless/rtlwifi/pci.c
+9
-2
include/net/bluetooth/hci_core.h
include/net/bluetooth/hci_core.h
+1
-0
net/bluetooth/hci_conn.c
net/bluetooth/hci_conn.c
+9
-7
net/bluetooth/hci_core.c
net/bluetooth/hci_core.c
+4
-0
net/bluetooth/hci_event.c
net/bluetooth/hci_event.c
+5
-4
net/bluetooth/l2cap.c
net/bluetooth/l2cap.c
+32
-52
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/core.c
+2
-1
net/mac80211/tx.c
net/mac80211/tx.c
+3
-0
未找到文件。
MAINTAINERS
浏览文件 @
9b6941d8
...
...
@@ -3327,7 +3327,6 @@ F: drivers/net/wimax/i2400m/
F: include/linux/wimax/i2400m.h
INTEL WIRELESS WIFI LINK (iwlwifi)
M: Reinette Chatre <reinette.chatre@intel.com>
M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org
...
...
drivers/bluetooth/ath3k.c
浏览文件 @
9b6941d8
...
...
@@ -47,46 +47,40 @@ MODULE_DEVICE_TABLE(usb, ath3k_table);
#define USB_REQ_DFU_DNLOAD 1
#define BULK_SIZE 4096
struct
ath3k_data
{
struct
usb_device
*
udev
;
u8
*
fw_data
;
u32
fw_size
;
u32
fw_sent
;
};
static
int
ath3k_load_firmware
(
struct
ath3k_data
*
data
,
unsigned
char
*
firmware
,
int
count
)
static
int
ath3k_load_firmware
(
struct
usb_device
*
udev
,
const
struct
firmware
*
firmware
)
{
u8
*
send_buf
;
int
err
,
pipe
,
len
,
size
,
sent
=
0
;
int
count
=
firmware
->
size
;
BT_DBG
(
"
ath3k %p udev %p"
,
data
,
data
->
udev
);
BT_DBG
(
"
udev %p"
,
udev
);
pipe
=
usb_sndctrlpipe
(
data
->
udev
,
0
);
pipe
=
usb_sndctrlpipe
(
udev
,
0
);
if
((
usb_control_msg
(
data
->
udev
,
pipe
,
send_buf
=
kmalloc
(
BULK_SIZE
,
GFP_ATOMIC
);
if
(
!
send_buf
)
{
BT_ERR
(
"Can't allocate memory chunk for firmware"
);
return
-
ENOMEM
;
}
memcpy
(
send_buf
,
firmware
->
data
,
20
);
if
((
err
=
usb_control_msg
(
udev
,
pipe
,
USB_REQ_DFU_DNLOAD
,
USB_TYPE_VENDOR
,
0
,
0
,
firmware
,
20
,
USB_CTRL_SET_TIMEOUT
))
<
0
)
{
send_buf
,
20
,
USB_CTRL_SET_TIMEOUT
))
<
0
)
{
BT_ERR
(
"Can't change to loading configuration err"
);
return
-
EBUSY
;
goto
error
;
}
sent
+=
20
;
count
-=
20
;
send_buf
=
kmalloc
(
BULK_SIZE
,
GFP_ATOMIC
);
if
(
!
send_buf
)
{
BT_ERR
(
"Can't allocate memory chunk for firmware"
);
return
-
ENOMEM
;
}
while
(
count
)
{
size
=
min_t
(
uint
,
count
,
BULK_SIZE
);
pipe
=
usb_sndbulkpipe
(
data
->
udev
,
0x02
);
memcpy
(
send_buf
,
firmware
+
sent
,
size
);
pipe
=
usb_sndbulkpipe
(
udev
,
0x02
);
memcpy
(
send_buf
,
firmware
->
data
+
sent
,
size
);
err
=
usb_bulk_msg
(
data
->
udev
,
pipe
,
send_buf
,
size
,
err
=
usb_bulk_msg
(
udev
,
pipe
,
send_buf
,
size
,
&
len
,
3000
);
if
(
err
||
(
len
!=
size
))
{
...
...
@@ -112,57 +106,28 @@ static int ath3k_probe(struct usb_interface *intf,
{
const
struct
firmware
*
firmware
;
struct
usb_device
*
udev
=
interface_to_usbdev
(
intf
);
struct
ath3k_data
*
data
;
int
size
;
BT_DBG
(
"intf %p id %p"
,
intf
,
id
);
if
(
intf
->
cur_altsetting
->
desc
.
bInterfaceNumber
!=
0
)
return
-
ENODEV
;
data
=
kzalloc
(
sizeof
(
*
data
),
GFP_KERNEL
);
if
(
!
data
)
return
-
ENOMEM
;
data
->
udev
=
udev
;
if
(
request_firmware
(
&
firmware
,
"ath3k-1.fw"
,
&
udev
->
dev
)
<
0
)
{
kfree
(
data
);
return
-
EIO
;
}
size
=
max_t
(
uint
,
firmware
->
size
,
4096
);
data
->
fw_data
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
!
data
->
fw_data
)
{
if
(
ath3k_load_firmware
(
udev
,
firmware
))
{
release_firmware
(
firmware
);
kfree
(
data
);
return
-
ENOMEM
;
}
memcpy
(
data
->
fw_data
,
firmware
->
data
,
firmware
->
size
);
data
->
fw_size
=
firmware
->
size
;
data
->
fw_sent
=
0
;
release_firmware
(
firmware
);
usb_set_intfdata
(
intf
,
data
);
if
(
ath3k_load_firmware
(
data
,
data
->
fw_data
,
data
->
fw_size
))
{
usb_set_intfdata
(
intf
,
NULL
);
kfree
(
data
->
fw_data
);
kfree
(
data
);
return
-
EIO
;
}
release_firmware
(
firmware
);
return
0
;
}
static
void
ath3k_disconnect
(
struct
usb_interface
*
intf
)
{
struct
ath3k_data
*
data
=
usb_get_intfdata
(
intf
);
BT_DBG
(
"ath3k_disconnect intf %p"
,
intf
);
kfree
(
data
->
fw_data
);
kfree
(
data
);
}
static
struct
usb_driver
ath3k_driver
=
{
...
...
drivers/net/wireless/ath/ath9k/hw.c
浏览文件 @
9b6941d8
...
...
@@ -369,6 +369,9 @@ static void ath9k_hw_init_config(struct ath_hw *ah)
else
ah
->
config
.
ht_enable
=
0
;
/* PAPRD needs some more work to be enabled */
ah
->
config
.
paprd_disable
=
1
;
ah
->
config
.
rx_intr_mitigation
=
true
;
ah
->
config
.
pcieSerDesWrite
=
true
;
...
...
@@ -1933,7 +1936,8 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
pCap
->
rx_status_len
=
sizeof
(
struct
ar9003_rxs
);
pCap
->
tx_desc_len
=
sizeof
(
struct
ar9003_txc
);
pCap
->
txs_len
=
sizeof
(
struct
ar9003_txs
);
if
(
ah
->
eep_ops
->
get_eeprom
(
ah
,
EEP_PAPRD
))
if
(
!
ah
->
config
.
paprd_disable
&&
ah
->
eep_ops
->
get_eeprom
(
ah
,
EEP_PAPRD
))
pCap
->
hw_caps
|=
ATH9K_HW_CAP_PAPRD
;
}
else
{
pCap
->
tx_desc_len
=
sizeof
(
struct
ath_desc
);
...
...
drivers/net/wireless/ath/ath9k/hw.h
浏览文件 @
9b6941d8
...
...
@@ -225,6 +225,7 @@ struct ath9k_ops_config {
u32
pcie_waen
;
u8
analog_shiftreg
;
u8
ht_enable
;
u8
paprd_disable
;
u32
ofdm_trig_low
;
u32
ofdm_trig_high
;
u32
cck_trig_high
;
...
...
drivers/net/wireless/ath/ath9k/main.c
浏览文件 @
9b6941d8
...
...
@@ -592,14 +592,12 @@ void ath9k_tasklet(unsigned long data)
u32
status
=
sc
->
intrstatus
;
u32
rxmask
;
ath9k_ps_wakeup
(
sc
);
if
(
status
&
ATH9K_INT_FATAL
)
{
ath_reset
(
sc
,
true
);
ath9k_ps_restore
(
sc
);
return
;
}
ath9k_ps_wakeup
(
sc
);
spin_lock
(
&
sc
->
sc_pcu_lock
);
if
(
!
ath9k_hw_check_alive
(
ah
))
...
...
@@ -969,6 +967,7 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
/* Stop ANI */
del_timer_sync
(
&
common
->
ani
.
timer
);
ath9k_ps_wakeup
(
sc
);
spin_lock_bh
(
&
sc
->
sc_pcu_lock
);
ieee80211_stop_queues
(
hw
);
...
...
@@ -1015,6 +1014,7 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
/* Start ANI */
ath_start_ani
(
common
);
ath9k_ps_restore
(
sc
);
return
r
;
}
...
...
@@ -1701,7 +1701,9 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
skip_chan_change:
if
(
changed
&
IEEE80211_CONF_CHANGE_POWER
)
{
sc
->
config
.
txpowlimit
=
2
*
conf
->
power_level
;
ath9k_ps_wakeup
(
sc
);
ath_update_txpow
(
sc
);
ath9k_ps_restore
(
sc
);
}
spin_lock_bh
(
&
sc
->
wiphy_lock
);
...
...
drivers/net/wireless/ath/ath9k/xmit.c
浏览文件 @
9b6941d8
...
...
@@ -2113,9 +2113,7 @@ static void ath_tx_complete_poll_work(struct work_struct *work)
if
(
needreset
)
{
ath_dbg
(
ath9k_hw_common
(
sc
->
sc_ah
),
ATH_DBG_RESET
,
"tx hung, resetting the chip
\n
"
);
ath9k_ps_wakeup
(
sc
);
ath_reset
(
sc
,
true
);
ath9k_ps_restore
(
sc
);
}
ieee80211_queue_delayed_work
(
sc
->
hw
,
&
sc
->
tx_complete_work
,
...
...
drivers/net/wireless/iwlwifi/iwl-4965.c
浏览文件 @
9b6941d8
...
...
@@ -2624,6 +2624,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
.
fw_name_pre
=
IWL4965_FW_PRE
,
.
ucode_api_max
=
IWL4965_UCODE_API_MAX
,
.
ucode_api_min
=
IWL4965_UCODE_API_MIN
,
.
sku
=
IWL_SKU_A
|
IWL_SKU_G
|
IWL_SKU_N
,
.
valid_tx_ant
=
ANT_AB
,
.
valid_rx_ant
=
ANT_ABC
,
.
eeprom_ver
=
EEPROM_4965_EEPROM_VERSION
,
...
...
drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
浏览文件 @
9b6941d8
...
...
@@ -152,11 +152,14 @@ int iwl_eeprom_check_sku(struct iwl_priv *priv)
eeprom_sku
=
iwl_eeprom_query16
(
priv
,
EEPROM_SKU_CAP
);
priv
->
cfg
->
sku
=
((
eeprom_sku
&
EEPROM_SKU_CAP_BAND_SELECTION
)
>>
if
(
!
priv
->
cfg
->
sku
)
{
/* not using sku overwrite */
priv
->
cfg
->
sku
=
((
eeprom_sku
&
EEPROM_SKU_CAP_BAND_SELECTION
)
>>
EEPROM_SKU_CAP_BAND_POS
);
if
(
eeprom_sku
&
EEPROM_SKU_CAP_11N_ENABLE
)
priv
->
cfg
->
sku
|=
IWL_SKU_N
;
if
(
eeprom_sku
&
EEPROM_SKU_CAP_11N_ENABLE
)
priv
->
cfg
->
sku
|=
IWL_SKU_N
;
}
if
(
!
priv
->
cfg
->
sku
)
{
IWL_ERR
(
priv
,
"Invalid device sku
\n
"
);
return
-
EINVAL
;
...
...
drivers/net/wireless/rt2x00/rt73usb.c
浏览文件 @
9b6941d8
...
...
@@ -2446,6 +2446,7 @@ static struct usb_device_id rt73usb_device_table[] = {
{
USB_DEVICE
(
0x04bb
,
0x093d
),
USB_DEVICE_DATA
(
&
rt73usb_ops
)
},
{
USB_DEVICE
(
0x148f
,
0x2573
),
USB_DEVICE_DATA
(
&
rt73usb_ops
)
},
{
USB_DEVICE
(
0x148f
,
0x2671
),
USB_DEVICE_DATA
(
&
rt73usb_ops
)
},
{
USB_DEVICE
(
0x0812
,
0x3101
),
USB_DEVICE_DATA
(
&
rt73usb_ops
)
},
/* Qcom */
{
USB_DEVICE
(
0x18e8
,
0x6196
),
USB_DEVICE_DATA
(
&
rt73usb_ops
)
},
{
USB_DEVICE
(
0x18e8
,
0x6229
),
USB_DEVICE_DATA
(
&
rt73usb_ops
)
},
...
...
drivers/net/wireless/rtlwifi/pci.c
浏览文件 @
9b6941d8
...
...
@@ -619,6 +619,13 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw)
struct
sk_buff
*
uskb
=
NULL
;
u8
*
pdata
;
uskb
=
dev_alloc_skb
(
skb
->
len
+
128
);
if
(
!
uskb
)
{
RT_TRACE
(
rtlpriv
,
(
COMP_INTR
|
COMP_RECV
),
DBG_EMERG
,
(
"can't alloc rx skb
\n
"
));
goto
done
;
}
memcpy
(
IEEE80211_SKB_RXCB
(
uskb
),
&
rx_status
,
sizeof
(
rx_status
));
...
...
@@ -641,7 +648,7 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw)
new_skb
=
dev_alloc_skb
(
rtlpci
->
rxbuffersize
);
if
(
unlikely
(
!
new_skb
))
{
RT_TRACE
(
rtlpriv
,
(
COMP_INTR
|
COMP_RECV
),
DBG_
DMES
G
,
DBG_
EMER
G
,
(
"can't alloc skb for rx
\n
"
));
goto
done
;
}
...
...
@@ -1066,9 +1073,9 @@ static int _rtl_pci_init_rx_ring(struct ieee80211_hw *hw)
struct
sk_buff
*
skb
=
dev_alloc_skb
(
rtlpci
->
rxbuffersize
);
u32
bufferaddress
;
entry
=
&
rtlpci
->
rx_ring
[
rx_queue_idx
].
desc
[
i
];
if
(
!
skb
)
return
0
;
entry
=
&
rtlpci
->
rx_ring
[
rx_queue_idx
].
desc
[
i
];
/*skb->dev = dev; */
...
...
include/net/bluetooth/hci_core.h
浏览文件 @
9b6941d8
...
...
@@ -184,6 +184,7 @@ struct hci_conn {
__u32
link_mode
;
__u8
auth_type
;
__u8
sec_level
;
__u8
pending_sec_level
;
__u8
power_save
;
__u16
disc_timeout
;
unsigned
long
pend
;
...
...
net/bluetooth/hci_conn.c
浏览文件 @
9b6941d8
...
...
@@ -379,14 +379,10 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8
hci_conn_hold
(
acl
);
if
(
acl
->
state
==
BT_OPEN
||
acl
->
state
==
BT_CLOSED
)
{
acl
->
sec_level
=
sec_level
;
acl
->
sec_level
=
BT_SECURITY_LOW
;
acl
->
pending_sec_level
=
sec_level
;
acl
->
auth_type
=
auth_type
;
hci_acl_connect
(
acl
);
}
else
{
if
(
acl
->
sec_level
<
sec_level
)
acl
->
sec_level
=
sec_level
;
if
(
acl
->
auth_type
<
auth_type
)
acl
->
auth_type
=
auth_type
;
}
if
(
type
==
ACL_LINK
)
...
...
@@ -442,11 +438,17 @@ static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
{
BT_DBG
(
"conn %p"
,
conn
);
if
(
conn
->
pending_sec_level
>
sec_level
)
sec_level
=
conn
->
pending_sec_level
;
if
(
sec_level
>
conn
->
sec_level
)
conn
->
sec_level
=
sec_level
;
conn
->
pending_
sec_level
=
sec_level
;
else
if
(
conn
->
link_mode
&
HCI_LM_AUTH
)
return
1
;
/* Make sure we preserve an existing MITM requirement*/
auth_type
|=
(
conn
->
auth_type
&
0x01
);
conn
->
auth_type
=
auth_type
;
if
(
!
test_and_set_bit
(
HCI_CONN_AUTH_PEND
,
&
conn
->
pend
))
{
...
...
net/bluetooth/hci_core.c
浏览文件 @
9b6941d8
...
...
@@ -1011,6 +1011,10 @@ int hci_unregister_dev(struct hci_dev *hdev)
destroy_workqueue
(
hdev
->
workqueue
);
hci_dev_lock_bh
(
hdev
);
hci_blacklist_clear
(
hdev
);
hci_dev_unlock_bh
(
hdev
);
__hci_dev_put
(
hdev
);
return
0
;
...
...
net/bluetooth/hci_event.c
浏览文件 @
9b6941d8
...
...
@@ -692,13 +692,13 @@ static int hci_outgoing_auth_needed(struct hci_dev *hdev,
if
(
conn
->
state
!=
BT_CONFIG
||
!
conn
->
out
)
return
0
;
if
(
conn
->
sec_level
==
BT_SECURITY_SDP
)
if
(
conn
->
pending_
sec_level
==
BT_SECURITY_SDP
)
return
0
;
/* Only request authentication for SSP connections or non-SSP
* devices with sec_level HIGH */
if
(
!
(
hdev
->
ssp_mode
>
0
&&
conn
->
ssp_mode
>
0
)
&&
conn
->
sec_level
!=
BT_SECURITY_HIGH
)
conn
->
pending_
sec_level
!=
BT_SECURITY_HIGH
)
return
0
;
return
1
;
...
...
@@ -1095,9 +1095,10 @@ static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *s
conn
=
hci_conn_hash_lookup_handle
(
hdev
,
__le16_to_cpu
(
ev
->
handle
));
if
(
conn
)
{
if
(
!
ev
->
status
)
if
(
!
ev
->
status
)
{
conn
->
link_mode
|=
HCI_LM_AUTH
;
else
conn
->
sec_level
=
conn
->
pending_sec_level
;
}
else
conn
->
sec_level
=
BT_SECURITY_LOW
;
clear_bit
(
HCI_CONN_AUTH_PEND
,
&
conn
->
pend
);
...
...
net/bluetooth/l2cap.c
浏览文件 @
9b6941d8
...
...
@@ -305,33 +305,44 @@ static void l2cap_chan_del(struct sock *sk, int err)
}
}
/* Service level security */
static
inline
int
l2cap_check_security
(
struct
sock
*
sk
)
static
inline
u8
l2cap_get_auth_type
(
struct
sock
*
sk
)
{
struct
l2cap_conn
*
conn
=
l2cap_pi
(
sk
)
->
conn
;
__u8
auth_type
;
if
(
sk
->
sk_type
==
SOCK_RAW
)
{
switch
(
l2cap_pi
(
sk
)
->
sec_level
)
{
case
BT_SECURITY_HIGH
:
return
HCI_AT_DEDICATED_BONDING_MITM
;
case
BT_SECURITY_MEDIUM
:
return
HCI_AT_DEDICATED_BONDING
;
default:
return
HCI_AT_NO_BONDING
;
}
}
else
if
(
l2cap_pi
(
sk
)
->
psm
==
cpu_to_le16
(
0x0001
))
{
if
(
l2cap_pi
(
sk
)
->
sec_level
==
BT_SECURITY_LOW
)
l2cap_pi
(
sk
)
->
sec_level
=
BT_SECURITY_SDP
;
if
(
l2cap_pi
(
sk
)
->
psm
==
cpu_to_le16
(
0x0001
))
{
if
(
l2cap_pi
(
sk
)
->
sec_level
==
BT_SECURITY_HIGH
)
auth_type
=
HCI_AT_NO_BONDING_MITM
;
return
HCI_AT_NO_BONDING_MITM
;
else
auth_type
=
HCI_AT_NO_BONDING
;
if
(
l2cap_pi
(
sk
)
->
sec_level
==
BT_SECURITY_LOW
)
l2cap_pi
(
sk
)
->
sec_level
=
BT_SECURITY_SDP
;
return
HCI_AT_NO_BONDING
;
}
else
{
switch
(
l2cap_pi
(
sk
)
->
sec_level
)
{
case
BT_SECURITY_HIGH
:
auth_type
=
HCI_AT_GENERAL_BONDING_MITM
;
break
;
return
HCI_AT_GENERAL_BONDING_MITM
;
case
BT_SECURITY_MEDIUM
:
auth_type
=
HCI_AT_GENERAL_BONDING
;
break
;
return
HCI_AT_GENERAL_BONDING
;
default:
auth_type
=
HCI_AT_NO_BONDING
;
break
;
return
HCI_AT_NO_BONDING
;
}
}
}
/* Service level security */
static
inline
int
l2cap_check_security
(
struct
sock
*
sk
)
{
struct
l2cap_conn
*
conn
=
l2cap_pi
(
sk
)
->
conn
;
__u8
auth_type
;
auth_type
=
l2cap_get_auth_type
(
sk
);
return
hci_conn_security
(
conn
->
hcon
,
l2cap_pi
(
sk
)
->
sec_level
,
auth_type
);
...
...
@@ -1068,39 +1079,7 @@ static int l2cap_do_connect(struct sock *sk)
err
=
-
ENOMEM
;
if
(
sk
->
sk_type
==
SOCK_RAW
)
{
switch
(
l2cap_pi
(
sk
)
->
sec_level
)
{
case
BT_SECURITY_HIGH
:
auth_type
=
HCI_AT_DEDICATED_BONDING_MITM
;
break
;
case
BT_SECURITY_MEDIUM
:
auth_type
=
HCI_AT_DEDICATED_BONDING
;
break
;
default:
auth_type
=
HCI_AT_NO_BONDING
;
break
;
}
}
else
if
(
l2cap_pi
(
sk
)
->
psm
==
cpu_to_le16
(
0x0001
))
{
if
(
l2cap_pi
(
sk
)
->
sec_level
==
BT_SECURITY_HIGH
)
auth_type
=
HCI_AT_NO_BONDING_MITM
;
else
auth_type
=
HCI_AT_NO_BONDING
;
if
(
l2cap_pi
(
sk
)
->
sec_level
==
BT_SECURITY_LOW
)
l2cap_pi
(
sk
)
->
sec_level
=
BT_SECURITY_SDP
;
}
else
{
switch
(
l2cap_pi
(
sk
)
->
sec_level
)
{
case
BT_SECURITY_HIGH
:
auth_type
=
HCI_AT_GENERAL_BONDING_MITM
;
break
;
case
BT_SECURITY_MEDIUM
:
auth_type
=
HCI_AT_GENERAL_BONDING
;
break
;
default:
auth_type
=
HCI_AT_NO_BONDING
;
break
;
}
}
auth_type
=
l2cap_get_auth_type
(
sk
);
hcon
=
hci_connect
(
hdev
,
ACL_LINK
,
dst
,
l2cap_pi
(
sk
)
->
sec_level
,
auth_type
);
...
...
@@ -1127,7 +1106,8 @@ static int l2cap_do_connect(struct sock *sk)
if
(
sk
->
sk_type
!=
SOCK_SEQPACKET
&&
sk
->
sk_type
!=
SOCK_STREAM
)
{
l2cap_sock_clear_timer
(
sk
);
sk
->
sk_state
=
BT_CONNECTED
;
if
(
l2cap_check_security
(
sk
))
sk
->
sk_state
=
BT_CONNECTED
;
}
else
l2cap_do_start
(
sk
);
}
...
...
@@ -1893,8 +1873,8 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct ms
if
(
pi
->
mode
==
L2CAP_MODE_STREAMING
)
{
l2cap_streaming_send
(
sk
);
}
else
{
if
(
pi
->
conn_state
&
L2CAP_CONN_REMOTE_BUSY
&&
pi
->
conn_state
&&
L2CAP_CONN_WAIT_F
)
{
if
(
(
pi
->
conn_state
&
L2CAP_CONN_REMOTE_BUSY
)
&&
(
pi
->
conn_state
&
L2CAP_CONN_WAIT_F
)
)
{
err
=
len
;
break
;
}
...
...
net/bluetooth/rfcomm/core.c
浏览文件 @
9b6941d8
...
...
@@ -1164,7 +1164,8 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
* initiator rfcomm_process_rx already calls
* rfcomm_session_put() */
if
(
s
->
sock
->
sk
->
sk_state
!=
BT_CLOSED
)
rfcomm_session_put
(
s
);
if
(
list_empty
(
&
s
->
dlcs
))
rfcomm_session_put
(
s
);
break
;
}
}
...
...
net/mac80211/tx.c
浏览文件 @
9b6941d8
...
...
@@ -2230,6 +2230,9 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
sdata
=
vif_to_sdata
(
vif
);
if
(
!
ieee80211_sdata_running
(
sdata
))
goto
out
;
if
(
tim_offset
)
*
tim_offset
=
0
;
if
(
tim_length
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录