Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
d5bb306b
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
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看板
提交
d5bb306b
编写于
5月 07, 2007
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge
git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6
上级
823036ed
7bb078cb
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
53 addition
and
17 deletion
+53
-17
drivers/bluetooth/hci_usb.c
drivers/bluetooth/hci_usb.c
+6
-0
net/bluetooth/hci_sock.c
net/bluetooth/hci_sock.c
+9
-0
net/bluetooth/hci_sysfs.c
net/bluetooth/hci_sysfs.c
+8
-1
net/bluetooth/l2cap.c
net/bluetooth/l2cap.c
+6
-0
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/core.c
+16
-13
net/bluetooth/rfcomm/tty.c
net/bluetooth/rfcomm/tty.c
+8
-3
未找到文件。
drivers/bluetooth/hci_usb.c
浏览文件 @
d5bb306b
...
...
@@ -114,10 +114,16 @@ static struct usb_device_id blacklist_ids[] = {
{
USB_DEVICE
(
0x0a5c
,
0x200a
),
.
driver_info
=
HCI_RESET
|
HCI_WRONG_SCO_MTU
},
{
USB_DEVICE
(
0x0a5c
,
0x2009
),
.
driver_info
=
HCI_BCM92035
},
/* Broadcom BCM2045 */
{
USB_DEVICE
(
0x0a5c
,
0x2101
),
.
driver_info
=
HCI_WRONG_SCO_MTU
},
/* IBM/Lenovo ThinkPad with Broadcom chip */
{
USB_DEVICE
(
0x0a5c
,
0x201e
),
.
driver_info
=
HCI_WRONG_SCO_MTU
},
{
USB_DEVICE
(
0x0a5c
,
0x2110
),
.
driver_info
=
HCI_WRONG_SCO_MTU
},
/* Targus ACB10US */
{
USB_DEVICE
(
0x0a5c
,
0x2100
),
.
driver_info
=
HCI_RESET
},
/* ANYCOM Bluetooth USB-200 and USB-250 */
{
USB_DEVICE
(
0x0a5c
,
0x2111
),
.
driver_info
=
HCI_RESET
},
...
...
net/bluetooth/hci_sock.c
浏览文件 @
d5bb306b
...
...
@@ -499,6 +499,15 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char
break
;
case
HCI_FILTER
:
{
struct
hci_filter
*
f
=
&
hci_pi
(
sk
)
->
filter
;
uf
.
type_mask
=
f
->
type_mask
;
uf
.
opcode
=
f
->
opcode
;
uf
.
event_mask
[
0
]
=
*
((
u32
*
)
f
->
event_mask
+
0
);
uf
.
event_mask
[
1
]
=
*
((
u32
*
)
f
->
event_mask
+
1
);
}
len
=
min_t
(
unsigned
int
,
len
,
sizeof
(
uf
));
if
(
copy_from_user
(
&
uf
,
optval
,
len
))
{
err
=
-
EFAULT
;
...
...
net/bluetooth/hci_sysfs.c
浏览文件 @
d5bb306b
...
...
@@ -305,7 +305,7 @@ int hci_register_sysfs(struct hci_dev *hdev)
BT_DBG
(
"%p name %s type %d"
,
hdev
,
hdev
->
name
,
hdev
->
type
);
dev
->
class
=
bt_clas
s
;
dev
->
bus
=
&
bt_bu
s
;
dev
->
parent
=
hdev
->
parent
;
strlcpy
(
dev
->
bus_id
,
hdev
->
name
,
BUS_ID_SIZE
);
...
...
@@ -322,6 +322,10 @@ int hci_register_sysfs(struct hci_dev *hdev)
if
(
device_create_file
(
dev
,
bt_attrs
[
i
])
<
0
)
BT_ERR
(
"Failed to create device attribute"
);
if
(
sysfs_create_link
(
&
bt_class
->
subsys
.
kset
.
kobj
,
&
dev
->
kobj
,
kobject_name
(
&
dev
->
kobj
))
<
0
)
BT_ERR
(
"Failed to create class symlink"
);
return
0
;
}
...
...
@@ -329,6 +333,9 @@ void hci_unregister_sysfs(struct hci_dev *hdev)
{
BT_DBG
(
"%p name %s type %d"
,
hdev
,
hdev
->
name
,
hdev
->
type
);
sysfs_remove_link
(
&
bt_class
->
subsys
.
kset
.
kobj
,
kobject_name
(
&
hdev
->
dev
.
kobj
));
device_del
(
&
hdev
->
dev
);
}
...
...
net/bluetooth/l2cap.c
浏览文件 @
d5bb306b
...
...
@@ -954,11 +954,17 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
switch
(
optname
)
{
case
L2CAP_OPTIONS
:
opts
.
imtu
=
l2cap_pi
(
sk
)
->
imtu
;
opts
.
omtu
=
l2cap_pi
(
sk
)
->
omtu
;
opts
.
flush_to
=
l2cap_pi
(
sk
)
->
flush_to
;
opts
.
mode
=
0x00
;
len
=
min_t
(
unsigned
int
,
sizeof
(
opts
),
optlen
);
if
(
copy_from_user
((
char
*
)
&
opts
,
optval
,
len
))
{
err
=
-
EFAULT
;
break
;
}
l2cap_pi
(
sk
)
->
imtu
=
opts
.
imtu
;
l2cap_pi
(
sk
)
->
omtu
=
opts
.
omtu
;
break
;
...
...
net/bluetooth/rfcomm/core.c
浏览文件 @
d5bb306b
...
...
@@ -622,7 +622,7 @@ static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst
bacpy
(
&
addr
.
l2_bdaddr
,
src
);
addr
.
l2_family
=
AF_BLUETOOTH
;
addr
.
l2_psm
=
0
;
*
err
=
sock
->
ops
->
bind
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
));
*
err
=
kernel_
bind
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
));
if
(
*
err
<
0
)
goto
failed
;
...
...
@@ -643,7 +643,7 @@ static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst
bacpy
(
&
addr
.
l2_bdaddr
,
dst
);
addr
.
l2_family
=
AF_BLUETOOTH
;
addr
.
l2_psm
=
htobs
(
RFCOMM_PSM
);
*
err
=
sock
->
ops
->
connect
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
),
O_NONBLOCK
);
*
err
=
kernel_
connect
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
),
O_NONBLOCK
);
if
(
*
err
==
0
||
*
err
==
-
EINPROGRESS
)
return
s
;
...
...
@@ -1058,6 +1058,12 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
case
BT_DISCONN
:
d
->
state
=
BT_CLOSED
;
__rfcomm_dlc_close
(
d
,
0
);
if
(
list_empty
(
&
s
->
dlcs
))
{
s
->
state
=
BT_DISCONN
;
rfcomm_send_disc
(
s
,
0
);
}
break
;
}
}
else
{
...
...
@@ -1067,6 +1073,10 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
s
->
state
=
BT_CONNECTED
;
rfcomm_process_connect
(
s
);
break
;
case
BT_DISCONN
:
rfcomm_session_put
(
s
);
break
;
}
}
return
0
;
...
...
@@ -1757,19 +1767,12 @@ static inline void rfcomm_accept_connection(struct rfcomm_session *s)
BT_DBG
(
"session %p"
,
s
);
if
(
sock_create_lite
(
PF_BLUETOOTH
,
sock
->
type
,
BTPROTO_L2CAP
,
&
nsock
))
err
=
kernel_accept
(
sock
,
&
nsock
,
O_NONBLOCK
);
if
(
err
<
0
)
return
;
nsock
->
ops
=
sock
->
ops
;
__module_get
(
nsock
->
ops
->
owner
);
err
=
sock
->
ops
->
accept
(
sock
,
nsock
,
O_NONBLOCK
);
if
(
err
<
0
)
{
sock_release
(
nsock
);
return
;
}
/* Set our callbacks */
nsock
->
sk
->
sk_data_ready
=
rfcomm_l2data_ready
;
nsock
->
sk
->
sk_state_change
=
rfcomm_l2state_change
;
...
...
@@ -1885,7 +1888,7 @@ static int rfcomm_add_listener(bdaddr_t *ba)
bacpy
(
&
addr
.
l2_bdaddr
,
ba
);
addr
.
l2_family
=
AF_BLUETOOTH
;
addr
.
l2_psm
=
htobs
(
RFCOMM_PSM
);
err
=
sock
->
ops
->
bind
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
));
err
=
kernel_
bind
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
));
if
(
err
<
0
)
{
BT_ERR
(
"Bind failed %d"
,
err
);
goto
failed
;
...
...
@@ -1898,7 +1901,7 @@ static int rfcomm_add_listener(bdaddr_t *ba)
release_sock
(
sk
);
/* Start listening on the socket */
err
=
sock
->
ops
->
listen
(
sock
,
10
);
err
=
kernel_
listen
(
sock
,
10
);
if
(
err
)
{
BT_ERR
(
"Listen failed %d"
,
err
);
goto
failed
;
...
...
net/bluetooth/rfcomm/tty.c
浏览文件 @
d5bb306b
...
...
@@ -517,9 +517,10 @@ static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
if
(
dlc
->
state
==
BT_CLOSED
)
{
if
(
!
dev
->
tty
)
{
if
(
test_bit
(
RFCOMM_RELEASE_ONHUP
,
&
dev
->
flags
))
{
rfcomm_dev_hold
(
dev
);
rfcomm_dev_del
(
dev
)
;
if
(
rfcomm_dev_get
(
dev
->
id
)
==
NULL
)
return
;
rfcomm_dev_del
(
dev
);
/* We have to drop DLC lock here, otherwise
rfcomm_dev_put() will dead lock if it's
the last reference. */
...
...
@@ -974,8 +975,12 @@ static void rfcomm_tty_hangup(struct tty_struct *tty)
rfcomm_tty_flush_buffer
(
tty
);
if
(
test_bit
(
RFCOMM_RELEASE_ONHUP
,
&
dev
->
flags
))
if
(
test_bit
(
RFCOMM_RELEASE_ONHUP
,
&
dev
->
flags
))
{
if
(
rfcomm_dev_get
(
dev
->
id
)
==
NULL
)
return
;
rfcomm_dev_del
(
dev
);
rfcomm_dev_put
(
dev
);
}
}
static
int
rfcomm_tty_read_proc
(
char
*
buf
,
char
**
start
,
off_t
offset
,
int
len
,
int
*
eof
,
void
*
unused
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录