Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
2dbbab6f
Commit
2dbbab6f
authored
Mar 23, 2003
by
Maksim Krasnyanskiy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Bluetooth] HCI USB driver update. Support for SCO over HCI USB.
URB and buffer managment rewrite.
parent
0d8865bd
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
572 additions
and
357 deletions
+572
-357
drivers/bluetooth/Kconfig
drivers/bluetooth/Kconfig
+8
-1
drivers/bluetooth/hci_usb.c
drivers/bluetooth/hci_usb.c
+486
-335
drivers/bluetooth/hci_usb.h
drivers/bluetooth/hci_usb.h
+78
-21
No files found.
drivers/bluetooth/Kconfig
View file @
2dbbab6f
...
@@ -13,11 +13,18 @@ config BT_HCIUSB
...
@@ -13,11 +13,18 @@ config BT_HCIUSB
Say Y here to compile support for Bluetooth USB devices into the
Say Y here to compile support for Bluetooth USB devices into the
kernel or say M to compile it as module (hci_usb).
kernel or say M to compile it as module (hci_usb).
config BT_USB_SCO
bool "SCO over HCI USB support"
depends on BT_HCIUSB
help
This option enables the SCO support in the HCI USB driver. You need this
to transmit voice data with your Bluetooth USB device.
Say Y here to compile support for SCO over HCI USB.
config BT_USB_ZERO_PACKET
config BT_USB_ZERO_PACKET
bool "USB zero packet support"
bool "USB zero packet support"
depends on BT_HCIUSB
depends on BT_HCIUSB
help
help
Support for USB zero packets.
This option is provided only as a work around for buggy Bluetooth USB
This option is provided only as a work around for buggy Bluetooth USB
devices. Do _not_ enable it unless you know for sure that your device
devices. Do _not_ enable it unless you know for sure that your device
requires zero packets.
requires zero packets.
...
...
drivers/bluetooth/hci_usb.c
View file @
2dbbab6f
This diff is collapsed.
Click to expand it.
drivers/bluetooth/hci_usb.h
View file @
2dbbab6f
/*
/*
BlueZ - Bluetooth protocol stack for Linux
HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
Copyright (C) 2000-2001 Qualcomm Incorporated
Copyright (C) 2000-2001 Qualcomm Incorporated
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
This program is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation;
published by the Free Software Foundation;
...
@@ -40,40 +41,96 @@
...
@@ -40,40 +41,96 @@
#define HCI_MAX_BULK_TX 4
#define HCI_MAX_BULK_TX 4
#define HCI_MAX_BULK_RX 1
#define HCI_MAX_BULK_RX 1
#define HCI_MAX_ISOC_FRAMES 10
struct
_urb_queue
{
struct
list_head
head
;
spinlock_t
lock
;
};
struct
_urb
{
struct
list_head
list
;
struct
_urb_queue
*
queue
;
int
type
;
void
*
priv
;
struct
urb
urb
;
};
struct
_urb
*
_urb_alloc
(
int
isoc
,
int
gfp
);
static
inline
void
_urb_free
(
struct
_urb
*
_urb
)
{
kfree
(
_urb
);
}
static
inline
void
_urb_queue_init
(
struct
_urb_queue
*
q
)
{
INIT_LIST_HEAD
(
&
q
->
head
);
spin_lock_init
(
&
q
->
lock
);
}
static
inline
void
_urb_queue_head
(
struct
_urb_queue
*
q
,
struct
_urb
*
_urb
)
{
unsigned
long
flags
;
spin_lock_irqsave
(
&
q
->
lock
,
flags
);
list_add
(
&
_urb
->
list
,
&
q
->
head
);
_urb
->
queue
=
q
;
spin_unlock_irqrestore
(
&
q
->
lock
,
flags
);
}
static
inline
void
_urb_queue_tail
(
struct
_urb_queue
*
q
,
struct
_urb
*
_urb
)
{
unsigned
long
flags
;
spin_lock_irqsave
(
&
q
->
lock
,
flags
);
list_add_tail
(
&
_urb
->
list
,
&
q
->
head
);
_urb
->
queue
=
q
;
spin_unlock_irqrestore
(
&
q
->
lock
,
flags
);
}
static
inline
void
_urb_unlink
(
struct
_urb
*
_urb
)
{
struct
_urb_queue
*
q
=
_urb
->
queue
;
unsigned
long
flags
;
if
(
q
)
{
spin_lock_irqsave
(
&
q
->
lock
,
flags
);
list_del
(
&
_urb
->
list
);
_urb
->
queue
=
NULL
;
spin_unlock_irqrestore
(
&
q
->
lock
,
flags
);
}
}
struct
_urb
*
_urb_dequeue
(
struct
_urb_queue
*
q
);
#ifndef container_of
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#endif
struct
hci_usb
{
struct
hci_usb
{
struct
hci_dev
hdev
;
struct
hci_dev
hdev
;
unsigned
long
state
;
unsigned
long
state
;
struct
usb_device
*
udev
;
struct
usb_device
*
udev
;
struct
usb_interface
*
isoc_iface
;
__u8
bulk_out_ep
;
struct
usb_host_endpoint
*
bulk_in_ep
;
__u8
bulk_in_ep
;
struct
usb_host_endpoint
*
bulk_out_ep
;
__u8
isoc_out_ep
;
struct
usb_host_endpoint
*
intr_in_ep
;
__u8
isoc_in_ep
;
struct
usb_interface
*
isoc_iface
;
struct
usb_host_endpoint
*
isoc_out_ep
;
struct
usb_host_endpoint
*
isoc_in_ep
;
__u8
intr_ep
;
struct
sk_buff_head
transmit_q
[
4
];
__u8
intr_interval
;
struct
sk_buff
*
reassembly
[
4
];
// Reassembly buffers
struct
urb
*
intr_urb
;
struct
sk_buff
*
intr_skb
;
rwlock_t
completion_lock
;
rwlock_t
completion_lock
;
struct
sk_buff_head
cmd_q
;
// TX Commands
struct
sk_buff_head
acl_q
;
// TX ACLs
struct
sk_buff_head
pending_q
;
// Pending requests
struct
sk_buff_head
completed_q
;
// Completed requests
};
struct
hci_usb_scb
{
atomic_t
pending_tx
[
4
];
// Number of pending requests
struct
urb
*
urb
;
struct
_urb_queue
pending_q
[
4
];
// Pending requests
int
intr_len
;
struct
_urb_queue
completed_q
[
4
];
// Completed requests
};
};
/* States */
/* States */
#define HCI_USB_TX_PROCESS 1
#define HCI_USB_TX_PROCESS 1
#define HCI_USB_TX_WAKEUP 2
#define HCI_USB_TX_WAKEUP 2
#define HCI_USB_CTRL_TX 3
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment