* [RFC 1/3] Bluetooth: Use queue in the device list
@ 2011-11-16 15:30 Emeltchenko Andrei
2011-11-16 15:30 ` [RFC 2/3] Bluetooth: remove old code Emeltchenko Andrei
` (3 more replies)
0 siblings, 4 replies; 16+ messages in thread
From: Emeltchenko Andrei @ 2011-11-16 15:30 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Use queue instead of stack discipline for device list. When processing
dev_list with list_for_each* devices will be prosessed in order they
were added (Usually BR/EDR first and AMP later).
Also output from hciconfig looks nicer :-)
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/hci_core.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index cf18f6d..aee76fd 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -1452,7 +1452,7 @@ int hci_register_dev(struct hci_dev *hdev)
sprintf(hdev->name, "hci%d", id);
hdev->id = id;
- list_add(&hdev->list, head);
+ list_add_tail(&hdev->list, head);
atomic_set(&hdev->refcnt, 1);
spin_lock_init(&hdev->lock);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC 2/3] Bluetooth: remove old code
2011-11-16 15:30 [RFC 1/3] Bluetooth: Use queue in the device list Emeltchenko Andrei
@ 2011-11-16 15:30 ` Emeltchenko Andrei
2011-11-16 20:44 ` Gustavo Padovan
2011-11-16 15:30 ` [RFC 3/3] Bluetooth: Add AMP initialization Emeltchenko Andrei
` (2 subsequent siblings)
3 siblings, 1 reply; 16+ messages in thread
From: Emeltchenko Andrei @ 2011-11-16 15:30 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Remove old code not touched for several years.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/hci_core.c | 12 ------------
1 files changed, 0 insertions(+), 12 deletions(-)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index aee76fd..d1eef7c 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -228,18 +228,6 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
/* Read Buffer Size (ACL mtu, max pkt, etc.) */
hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
-#if 0
- /* Host buffer size */
- {
- struct hci_cp_host_buffer_size cp;
- cp.acl_mtu = cpu_to_le16(HCI_MAX_ACL_SIZE);
- cp.sco_mtu = HCI_MAX_SCO_SIZE;
- cp.acl_max_pkt = cpu_to_le16(0xffff);
- cp.sco_max_pkt = cpu_to_le16(0xffff);
- hci_send_cmd(hdev, HCI_OP_HOST_BUFFER_SIZE, sizeof(cp), &cp);
- }
-#endif
-
/* Read BD Address */
hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-16 15:30 [RFC 1/3] Bluetooth: Use queue in the device list Emeltchenko Andrei
2011-11-16 15:30 ` [RFC 2/3] Bluetooth: remove old code Emeltchenko Andrei
@ 2011-11-16 15:30 ` Emeltchenko Andrei
2011-11-16 21:49 ` Marcel Holtmann
2011-11-16 21:48 ` [RFC 1/3] Bluetooth: Use queue in the device list Marcel Holtmann
2011-11-21 16:46 ` Gustavo Padovan
3 siblings, 1 reply; 16+ messages in thread
From: Emeltchenko Andrei @ 2011-11-16 15:30 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Define init sequence for AMP controller. Code based on Code Aurora
sequence.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/hci_core.c | 58 ++++++++++++++++++++++++++++----------------
net/bluetooth/hci_event.c | 2 +-
2 files changed, 38 insertions(+), 22 deletions(-)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index d1eef7c..290acb2 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
}
- /* Read Local Supported Features */
- hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
-
/* Read Local Version */
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
/* Read Buffer Size (ACL mtu, max pkt, etc.) */
hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
- /* Read BD Address */
- hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
+ switch (hdev->dev_type) {
+ case HCI_BREDR:
+ /* BR-EDR specific initialization */
+ /* Read Local Supported Features */
+ hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
+
+ /* Read BD Address */
+ hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
- /* Read Class of Device */
- hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
+ /* Read Class of Device */
+ hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
- /* Read Local Name */
- hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
+ /* Read Local Name */
+ hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
- /* Read Voice Setting */
- hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
+ /* Read Voice Setting */
+ hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
- /* Optional initialization */
+ /* Optional initialization */
+ /* Clear Event Filters */
+ flt_type = HCI_FLT_CLEAR_ALL;
+ hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
- /* Clear Event Filters */
- flt_type = HCI_FLT_CLEAR_ALL;
- hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
+ /* Connection accept timeout ~20 secs */
+ param = cpu_to_le16(0x7d00);
+ hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
- /* Connection accept timeout ~20 secs */
- param = cpu_to_le16(0x7d00);
- hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
+ bacpy(&cp.bdaddr, BDADDR_ANY);
+ cp.delete_all = 1;
+ hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY,
+ sizeof(cp), &cp);
+ break;
+
+ case HCI_AMP:
+ /* AMP initialization */
+ /* Read AMP Info */
+ hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
+ break;
+
+ default:
+ BT_ERR("Unknown device type %d", hdev->dev_type);
+ break;
+ }
- bacpy(&cp.bdaddr, BDADDR_ANY);
- cp.delete_all = 1;
- hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
}
static void hci_le_init_req(struct hci_dev *hdev, unsigned long opt)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index a89cf1f..ad31eb4 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -603,7 +603,7 @@ static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
hdev->manufacturer,
hdev->hci_ver, hdev->hci_rev);
- if (test_bit(HCI_INIT, &hdev->flags))
+ if (hdev->dev_type == HCI_BREDR && test_bit(HCI_INIT, &hdev->flags))
hci_setup(hdev);
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [RFC 2/3] Bluetooth: remove old code
2011-11-16 15:30 ` [RFC 2/3] Bluetooth: remove old code Emeltchenko Andrei
@ 2011-11-16 20:44 ` Gustavo Padovan
2011-11-16 21:47 ` Marcel Holtmann
0 siblings, 1 reply; 16+ messages in thread
From: Gustavo Padovan @ 2011-11-16 20:44 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
* Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> [2011-11-16 17:30:21 +0200]:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> Remove old code not touched for several years.
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> net/bluetooth/hci_core.c | 12 ------------
> 1 files changed, 0 insertions(+), 12 deletions(-)
In despite of this being an RFC I'm taking this patch. Applied, thanks.
Gustavo
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 2/3] Bluetooth: remove old code
2011-11-16 20:44 ` Gustavo Padovan
@ 2011-11-16 21:47 ` Marcel Holtmann
0 siblings, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2011-11-16 21:47 UTC (permalink / raw)
To: Gustavo Padovan; +Cc: Emeltchenko Andrei, linux-bluetooth
Hi Gustavo,
> * Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> [2011-11-16 17:30:21 +0200]:
>
> > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> >
> > Remove old code not touched for several years.
> >
> > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> > ---
> > net/bluetooth/hci_core.c | 12 ------------
> > 1 files changed, 0 insertions(+), 12 deletions(-)
>
> In despite of this being an RFC I'm taking this patch. Applied, thanks.
I wish you didn't sine I left that code in as a reminder that eventually
we might need to get this working for host-to-host-controller flow
control.
Regards
Marcel
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 1/3] Bluetooth: Use queue in the device list
2011-11-16 15:30 [RFC 1/3] Bluetooth: Use queue in the device list Emeltchenko Andrei
2011-11-16 15:30 ` [RFC 2/3] Bluetooth: remove old code Emeltchenko Andrei
2011-11-16 15:30 ` [RFC 3/3] Bluetooth: Add AMP initialization Emeltchenko Andrei
@ 2011-11-16 21:48 ` Marcel Holtmann
2011-11-21 16:46 ` Gustavo Padovan
3 siblings, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2011-11-16 21:48 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
> Use queue instead of stack discipline for device list. When processing
> dev_list with list_for_each* devices will be prosessed in order they
> were added (Usually BR/EDR first and AMP later).
>
> Also output from hciconfig looks nicer :-)
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> net/bluetooth/hci_core.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
not that this matters much, but I am fine with it.
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Regards
Marcel
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-16 15:30 ` [RFC 3/3] Bluetooth: Add AMP initialization Emeltchenko Andrei
@ 2011-11-16 21:49 ` Marcel Holtmann
2011-11-17 13:20 ` Emeltchenko Andrei
0 siblings, 1 reply; 16+ messages in thread
From: Marcel Holtmann @ 2011-11-16 21:49 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
> Define init sequence for AMP controller. Code based on Code Aurora
> sequence.
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> net/bluetooth/hci_core.c | 58 ++++++++++++++++++++++++++++----------------
> net/bluetooth/hci_event.c | 2 +-
> 2 files changed, 38 insertions(+), 22 deletions(-)
>
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index d1eef7c..290acb2 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
> hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> }
>
> - /* Read Local Supported Features */
> - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
> -
> /* Read Local Version */
> hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
>
> /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
>
> - /* Read BD Address */
> - hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
> + switch (hdev->dev_type) {
> + case HCI_BREDR:
stop right here and first split this out into proper helper functions.
Making this part longer and more convoluted is not going to work well in
the long run.
> - if (test_bit(HCI_INIT, &hdev->flags))
> + if (hdev->dev_type == HCI_BREDR && test_bit(HCI_INIT, &hdev->flags))
> hci_setup(hdev);
> }
>
This is ugly. Why don't we set HCI_INIT for AMP controllers as well?
Regards
Marcel
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-16 21:49 ` Marcel Holtmann
@ 2011-11-17 13:20 ` Emeltchenko Andrei
2011-11-17 15:45 ` Marcel Holtmann
0 siblings, 1 reply; 16+ messages in thread
From: Emeltchenko Andrei @ 2011-11-17 13:20 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: linux-bluetooth
Hi Marcel,
On Thu, Nov 17, 2011 at 06:49:44AM +0900, Marcel Holtmann wrote:
> > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> > index d1eef7c..290acb2 100644
> > --- a/net/bluetooth/hci_core.c
> > +++ b/net/bluetooth/hci_core.c
> > @@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
> > hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > }
> >
> > - /* Read Local Supported Features */
> > - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
> > -
> > /* Read Local Version */
> > hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> >
> > /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> >
> > - /* Read BD Address */
> > - hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
> > + switch (hdev->dev_type) {
> > + case HCI_BREDR:
>
> stop right here and first split this out into proper helper functions.
> Making this part longer and more convoluted is not going to work well in
> the long run.
Would following functions work:
__hci_common_init
__hci_bredr_init
__hci_amp_init
> > - if (test_bit(HCI_INIT, &hdev->flags))
> > + if (hdev->dev_type == HCI_BREDR && test_bit(HCI_INIT, &hdev->flags))
> > hci_setup(hdev);
> > }
> This is ugly. Why don't we set HCI_INIT for AMP controllers as well?
The purpose of the hunk is to avoid hci_setup for other controllers than
BR/EDR. Maybe later on we will come up with something like amp_setup for
AMP controllers.
Maybe I have to create special patch for it?
Best regards
Andrei Emeltchenko
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-17 13:20 ` Emeltchenko Andrei
@ 2011-11-17 15:45 ` Marcel Holtmann
2011-11-17 18:17 ` Peter Krystad
0 siblings, 1 reply; 16+ messages in thread
From: Marcel Holtmann @ 2011-11-17 15:45 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
> > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> > > index d1eef7c..290acb2 100644
> > > --- a/net/bluetooth/hci_core.c
> > > +++ b/net/bluetooth/hci_core.c
> > > @@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
> > > hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > > }
> > >
> > > - /* Read Local Supported Features */
> > > - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
> > > -
> > > /* Read Local Version */
> > > hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> > >
> > > /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > > hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> > >
> > > - /* Read BD Address */
> > > - hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
> > > + switch (hdev->dev_type) {
> > > + case HCI_BREDR:
> >
> > stop right here and first split this out into proper helper functions.
> > Making this part longer and more convoluted is not going to work well in
> > the long run.
>
> Would following functions work:
>
> __hci_common_init
> __hci_bredr_init
> __hci_amp_init
I would not bother with common init. I think there is nothing really
common between AMP and BR/EDR/LE controllers.
So just split it into bredr_init and amp_init.
> > > - if (test_bit(HCI_INIT, &hdev->flags))
> > > + if (hdev->dev_type == HCI_BREDR && test_bit(HCI_INIT, &hdev->flags))
> > > hci_setup(hdev);
> > > }
> > This is ugly. Why don't we set HCI_INIT for AMP controllers as well?
>
> The purpose of the hunk is to avoid hci_setup for other controllers than
> BR/EDR. Maybe later on we will come up with something like amp_setup for
> AMP controllers.
>
> Maybe I have to create special patch for it?
I like to not see a temporary hack and just init the AMP controller.
This needs to be done anyway. So lets just do it.
Regards
Marcel
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-17 15:45 ` Marcel Holtmann
@ 2011-11-17 18:17 ` Peter Krystad
2011-11-18 5:14 ` Marcel Holtmann
0 siblings, 1 reply; 16+ messages in thread
From: Peter Krystad @ 2011-11-17 18:17 UTC (permalink / raw)
To: 'Marcel Holtmann', 'Emeltchenko Andrei'; +Cc: linux-bluetooth
Hi Andrei & Marcel,
> Hi Andrei,
>
> > > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> > > > index d1eef7c..290acb2 100644
> > > > --- a/net/bluetooth/hci_core.c
> > > > +++ b/net/bluetooth/hci_core.c
> > > > @@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev,
> unsigned long opt)
> > > > hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > > > }
> > > >
> > > > - /* Read Local Supported Features */
> > > > - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
> > > > -
> > > > /* Read Local Version */
> > > > hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> > > >
> > > > /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > > > hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> > > >
> > > > - /* Read BD Address */
> > > > - hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
> > > > + switch (hdev->dev_type) {
> > > > + case HCI_BREDR:
> > >
> > > stop right here and first split this out into proper helper functions.
> > > Making this part longer and more convoluted is not going to work well in
> > > the long run.
> >
> > Would following functions work:
> >
> > __hci_common_init
> > __hci_bredr_init
> > __hci_amp_init
>
> I would not bother with common init. I think there is nothing really
> common between AMP and BR/EDR/LE controllers.
The commands quoted above are the common part of init between BR-EDR and AMP, plus
there will be a few additional common commands when block-based flow control is added.
Makes sense to me to split the controller-specific sequences into two helper funcs
called at this switch statement.
> So just split it into bredr_init and amp_init.
>
> > > > - if (test_bit(HCI_INIT, &hdev->flags))
> > > > + if (hdev->dev_type == HCI_BREDR && test_bit(HCI_INIT, &hdev-
> >flags))
> > > > hci_setup(hdev);
> > > > }
> > > This is ugly. Why don't we set HCI_INIT for AMP controllers as well?
> >
> > The purpose of the hunk is to avoid hci_setup for other controllers than
> > BR/EDR. Maybe later on we will come up with something like amp_setup for
> > AMP controllers.
> >
> > Maybe I have to create special patch for it?
>
> I like to not see a temporary hack and just init the AMP controller.
> This needs to be done anyway. So lets just do it.
>
> Regards
>
> Marcel
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Regards,
Peter.
--Peter Krystad
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-17 18:17 ` Peter Krystad
@ 2011-11-18 5:14 ` Marcel Holtmann
2011-11-18 13:54 ` 'Emeltchenko Andrei'
0 siblings, 1 reply; 16+ messages in thread
From: Marcel Holtmann @ 2011-11-18 5:14 UTC (permalink / raw)
To: Peter Krystad; +Cc: 'Emeltchenko Andrei', linux-bluetooth
Hi Peter,
> > > > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> > > > > index d1eef7c..290acb2 100644
> > > > > --- a/net/bluetooth/hci_core.c
> > > > > +++ b/net/bluetooth/hci_core.c
> > > > > @@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev,
> > unsigned long opt)
> > > > > hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > > > > }
> > > > >
> > > > > - /* Read Local Supported Features */
> > > > > - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
> > > > > -
> > > > > /* Read Local Version */
> > > > > hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> > > > >
> > > > > /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > > > > hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> > > > >
> > > > > - /* Read BD Address */
> > > > > - hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
> > > > > + switch (hdev->dev_type) {
> > > > > + case HCI_BREDR:
> > > >
> > > > stop right here and first split this out into proper helper functions.
> > > > Making this part longer and more convoluted is not going to work well in
> > > > the long run.
> > >
> > > Would following functions work:
> > >
> > > __hci_common_init
> > > __hci_bredr_init
> > > __hci_amp_init
> >
> > I would not bother with common init. I think there is nothing really
> > common between AMP and BR/EDR/LE controllers.
>
> The commands quoted above are the common part of init between BR-EDR and AMP, plus
> there will be a few additional common commands when block-based flow control is added.
> Makes sense to me to split the controller-specific sequences into two helper funcs
> called at this switch statement.
with our current approach on handling this, I rather copy hci_send_cmd
than making this code more complicated.
However since we are talking about controller init. Can someone please
first propose a list of how we init AMP vs BR/EDR/LE controllers instead
of just dumping code here. I think it needs some clear strategy on how
to do it.
Regards
Marcel
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-18 5:14 ` Marcel Holtmann
@ 2011-11-18 13:54 ` 'Emeltchenko Andrei'
2011-11-18 16:23 ` Marcel Holtmann
0 siblings, 1 reply; 16+ messages in thread
From: 'Emeltchenko Andrei' @ 2011-11-18 13:54 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: Peter Krystad, linux-bluetooth
Hi Marcel,
On Fri, Nov 18, 2011 at 06:14:13AM +0100, Marcel Holtmann wrote:
> Hi Peter,
>
> > > > > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> > > > > > index d1eef7c..290acb2 100644
> > > > > > --- a/net/bluetooth/hci_core.c
> > > > > > +++ b/net/bluetooth/hci_core.c
> > > > > > @@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev,
> > > unsigned long opt)
> > > > > > hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > > > > > }
> > > > > >
> > > > > > - /* Read Local Supported Features */
> > > > > > - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
> > > > > > -
> > > > > > /* Read Local Version */
> > > > > > hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> > > > > >
> > > > > > /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > > > > > hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> > > > > >
> > > > > > - /* Read BD Address */
> > > > > > - hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
> > > > > > + switch (hdev->dev_type) {
> > > > > > + case HCI_BREDR:
> > > > >
> > > > > stop right here and first split this out into proper helper functions.
> > > > > Making this part longer and more convoluted is not going to work well in
> > > > > the long run.
> > > >
> > > > Would following functions work:
> > > >
> > > > __hci_common_init
> > > > __hci_bredr_init
> > > > __hci_amp_init
> > >
> > > I would not bother with common init. I think there is nothing really
> > > common between AMP and BR/EDR/LE controllers.
> >
> > The commands quoted above are the common part of init between BR-EDR and AMP, plus
> > there will be a few additional common commands when block-based flow control is added.
> > Makes sense to me to split the controller-specific sequences into two helper funcs
> > called at this switch statement.
>
> with our current approach on handling this, I rather copy hci_send_cmd
> than making this code more complicated.
>
> However since we are talking about controller init. Can someone please
> first propose a list of how we init AMP vs BR/EDR/LE controllers instead
> of just dumping code here. I think it needs some clear strategy on how
> to do it.
AMP controller is initialized following way in Code Aurora code:
Common part:
<------8<--------------------------------------------------
| /* Mandatory initialization */
|
| /* Reset */
| if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
| set_bit(HCI_RESET, &hdev->flags);
| hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
| }
|
| /* Read Local Version */
| hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
|
| /* Read HCI Flow Control Mode */
| hci_send_cmd(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, 0, NULL);
|
| /* Read Buffer Size (ACL mtu, max pkt, etc.) */
| hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
|
| /* Read Data Block Size (ACL mtu, max pkt, etc.) */
| hci_send_cmd(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, 0, NULL);
<------8<------------------------------------------------------
AMP - specific part:
<------8<---------------------------------------------------
| /* AMP initialization */
| /* Connection accept timeout ~5 secs */
| param = cpu_to_le16(0x1f40);
| hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
|
| /* Read AMP Info */
| hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
<------8<---------------------------------------------------
Source:
git://codeaurora.org/kernel/msm.git
Best regards
Andrei Emeltchenko
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-18 13:54 ` 'Emeltchenko Andrei'
@ 2011-11-18 16:23 ` Marcel Holtmann
2011-11-21 10:13 ` 'Emeltchenko Andrei'
0 siblings, 1 reply; 16+ messages in thread
From: Marcel Holtmann @ 2011-11-18 16:23 UTC (permalink / raw)
To: 'Emeltchenko Andrei'; +Cc: Peter Krystad, linux-bluetooth
Hi Andrei,
> > > > > > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> > > > > > > index d1eef7c..290acb2 100644
> > > > > > > --- a/net/bluetooth/hci_core.c
> > > > > > > +++ b/net/bluetooth/hci_core.c
> > > > > > > @@ -219,40 +219,56 @@ static void hci_init_req(struct hci_dev *hdev,
> > > > unsigned long opt)
> > > > > > > hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > > > > > > }
> > > > > > >
> > > > > > > - /* Read Local Supported Features */
> > > > > > > - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
> > > > > > > -
> > > > > > > /* Read Local Version */
> > > > > > > hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> > > > > > >
> > > > > > > /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > > > > > > hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> > > > > > >
> > > > > > > - /* Read BD Address */
> > > > > > > - hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
> > > > > > > + switch (hdev->dev_type) {
> > > > > > > + case HCI_BREDR:
> > > > > >
> > > > > > stop right here and first split this out into proper helper functions.
> > > > > > Making this part longer and more convoluted is not going to work well in
> > > > > > the long run.
> > > > >
> > > > > Would following functions work:
> > > > >
> > > > > __hci_common_init
> > > > > __hci_bredr_init
> > > > > __hci_amp_init
> > > >
> > > > I would not bother with common init. I think there is nothing really
> > > > common between AMP and BR/EDR/LE controllers.
> > >
> > > The commands quoted above are the common part of init between BR-EDR and AMP, plus
> > > there will be a few additional common commands when block-based flow control is added.
> > > Makes sense to me to split the controller-specific sequences into two helper funcs
> > > called at this switch statement.
> >
> > with our current approach on handling this, I rather copy hci_send_cmd
> > than making this code more complicated.
> >
> > However since we are talking about controller init. Can someone please
> > first propose a list of how we init AMP vs BR/EDR/LE controllers instead
> > of just dumping code here. I think it needs some clear strategy on how
> > to do it.
>
> AMP controller is initialized following way in Code Aurora code:
>
> Common part:
>
> <------8<--------------------------------------------------
> | /* Mandatory initialization */
> |
> | /* Reset */
> | if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
> | set_bit(HCI_RESET, &hdev->flags);
> | hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> | }
this check for QUIRK_NO_RESET is pointless. That is just there for old
Bluetooth 1.0b controllers. Or broken hardware. Let's assume the AMP
controllers are fine and just issue OP_RESET.
> | /* Read Local Version */
> | hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> |
> | /* Read HCI Flow Control Mode */
> | hci_send_cmd(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, 0, NULL);
> |
> | /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> | hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> |
> | /* Read Data Block Size (ACL mtu, max pkt, etc.) */
> | hci_send_cmd(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, 0, NULL);
> <------8<------------------------------------------------------
This is not a generic sequence. We will not be reading flow control or
data block size commands. It will heavily fail on older controllers.
Regards
Marcel
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-18 16:23 ` Marcel Holtmann
@ 2011-11-21 10:13 ` 'Emeltchenko Andrei'
2011-11-21 13:00 ` Marcel Holtmann
0 siblings, 1 reply; 16+ messages in thread
From: 'Emeltchenko Andrei' @ 2011-11-21 10:13 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: Peter Krystad, linux-bluetooth
Hi Marcel,
On Fri, Nov 18, 2011 at 05:23:01PM +0100, Marcel Holtmann wrote:
> > >
> > > However since we are talking about controller init. Can someone please
> > > first propose a list of how we init AMP vs BR/EDR/LE controllers instead
> > > of just dumping code here. I think it needs some clear strategy on how
> > > to do it.
> >
> > AMP controller is initialized following way in Code Aurora code:
> >
> > Common part:
> >
> > <------8<--------------------------------------------------
> > | /* Mandatory initialization */
> > |
> > | /* Reset */
> > | if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
> > | set_bit(HCI_RESET, &hdev->flags);
> > | hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > | }
>
> this check for QUIRK_NO_RESET is pointless. That is just there for old
> Bluetooth 1.0b controllers. Or broken hardware. Let's assume the AMP
> controllers are fine and just issue OP_RESET.
>
> > | /* Read Local Version */
> > | hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> > |
> > | /* Read HCI Flow Control Mode */
> > | hci_send_cmd(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, 0, NULL);
> > |
> > | /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > | hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> > |
> > | /* Read Data Block Size (ACL mtu, max pkt, etc.) */
> > | hci_send_cmd(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, 0, NULL);
> > <------8<------------------------------------------------------
>
> This is not a generic sequence. We will not be reading flow control or
> data block size commands. It will heavily fail on older controllers.
What about following code (basically BR/EDR initialization is the same as
now and only amp_init is new). I use now virtual AMP device so any init is
good, I need Read Version and Read AMP info commands.
static void bredr_init(struct hci_dev *hdev)
{
struct hci_cp_delete_stored_link_key cp;
__le16 param;
__u8 flt_type;
/* Mandatory initialization */
/* Reset */
if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
set_bit(HCI_RESET, &hdev->flags);
hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
}
/* Read Local Supported Features */
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
/* Read Local Version */
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
/* Read Buffer Size (ACL mtu, max pkt, etc.) */
hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
/* Read BD Address */
hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
/* Read Class of Device */
hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
/* Read Local Name */
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
/* Read Voice Setting */
hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
/* Optional initialization */
/* Clear Event Filters */
flt_type = HCI_FLT_CLEAR_ALL;
hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
/* Connection accept timeout ~20 secs */
param = cpu_to_le16(0x7d00);
hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
bacpy(&cp.bdaddr, BDADDR_ANY);
cp.delete_all = 1;
hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
}
static void amp_init(struct hci_dev *hdev)
{
/* Mandatory initialization */
/* Reset */
hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
/* Read Local Version */
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
/* Read Buffer Size (ACL mtu, max pkt, etc.) */
hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
/* Read AMP Info */
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
}
Best regards
Andrei Emeltchenko
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 3/3] Bluetooth: Add AMP initialization
2011-11-21 10:13 ` 'Emeltchenko Andrei'
@ 2011-11-21 13:00 ` Marcel Holtmann
0 siblings, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2011-11-21 13:00 UTC (permalink / raw)
To: 'Emeltchenko Andrei'; +Cc: Peter Krystad, linux-bluetooth
Hi Andrei,
> > > > However since we are talking about controller init. Can someone please
> > > > first propose a list of how we init AMP vs BR/EDR/LE controllers instead
> > > > of just dumping code here. I think it needs some clear strategy on how
> > > > to do it.
> > >
> > > AMP controller is initialized following way in Code Aurora code:
> > >
> > > Common part:
> > >
> > > <------8<--------------------------------------------------
> > > | /* Mandatory initialization */
> > > |
> > > | /* Reset */
> > > | if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
> > > | set_bit(HCI_RESET, &hdev->flags);
> > > | hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> > > | }
> >
> > this check for QUIRK_NO_RESET is pointless. That is just there for old
> > Bluetooth 1.0b controllers. Or broken hardware. Let's assume the AMP
> > controllers are fine and just issue OP_RESET.
> >
> > > | /* Read Local Version */
> > > | hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
> > > |
> > > | /* Read HCI Flow Control Mode */
> > > | hci_send_cmd(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, 0, NULL);
> > > |
> > > | /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> > > | hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
> > > |
> > > | /* Read Data Block Size (ACL mtu, max pkt, etc.) */
> > > | hci_send_cmd(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, 0, NULL);
> > > <------8<------------------------------------------------------
> >
> > This is not a generic sequence. We will not be reading flow control or
> > data block size commands. It will heavily fail on older controllers.
>
> What about following code (basically BR/EDR initialization is the same as
> now and only amp_init is new). I use now virtual AMP device so any init is
> good, I need Read Version and Read AMP info commands.
>
> static void bredr_init(struct hci_dev *hdev)
> {
> struct hci_cp_delete_stored_link_key cp;
> __le16 param;
> __u8 flt_type;
>
> /* Mandatory initialization */
> /* Reset */
> if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
> set_bit(HCI_RESET, &hdev->flags);
> hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
> }
>
> /* Read Local Supported Features */
> hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
>
> /* Read Local Version */
> hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
>
> /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
>
> /* Read BD Address */
> hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
>
> /* Read Class of Device */
> hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
>
> /* Read Local Name */
> hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
>
> /* Read Voice Setting */
> hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
>
> /* Optional initialization */
> /* Clear Event Filters */
> flt_type = HCI_FLT_CLEAR_ALL;
> hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
>
> /* Connection accept timeout ~20 secs */
> param = cpu_to_le16(0x7d00);
> hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
>
> bacpy(&cp.bdaddr, BDADDR_ANY);
> cp.delete_all = 1;
> hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
> }
>
> static void amp_init(struct hci_dev *hdev)
> {
> /* Mandatory initialization */
> /* Reset */
> hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
>
> /* Read Local Version */
> hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
>
> /* Read Buffer Size (ACL mtu, max pkt, etc.) */
> hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
>
> /* Read AMP Info */
> hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
> }
actually I think the READ_AMP_INFO is wrong here. It should be only
executed based on an AMP_Get_Info_Request during a connection setup
procedure.
And even the READ_BUFFER_SIZE is the wrong command since by default the
AMP controller is in block based flow control mode. So you would need to
read the flow control mode first actually.
Regards
Marcel
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC 1/3] Bluetooth: Use queue in the device list
2011-11-16 15:30 [RFC 1/3] Bluetooth: Use queue in the device list Emeltchenko Andrei
` (2 preceding siblings ...)
2011-11-16 21:48 ` [RFC 1/3] Bluetooth: Use queue in the device list Marcel Holtmann
@ 2011-11-21 16:46 ` Gustavo Padovan
3 siblings, 0 replies; 16+ messages in thread
From: Gustavo Padovan @ 2011-11-21 16:46 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
* Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> [2011-11-16 17:30:20 +0200]:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> Use queue instead of stack discipline for device list. When processing
> dev_list with list_for_each* devices will be prosessed in order they
> were added (Usually BR/EDR first and AMP later).
>
> Also output from hciconfig looks nicer :-)
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> net/bluetooth/hci_core.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index cf18f6d..aee76fd 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -1452,7 +1452,7 @@ int hci_register_dev(struct hci_dev *hdev)
>
> sprintf(hdev->name, "hci%d", id);
> hdev->id = id;
> - list_add(&hdev->list, head);
> + list_add_tail(&hdev->list, head);
>
> atomic_set(&hdev->refcnt, 1);
> spin_lock_init(&hdev->lock);
Applied, thanks.
Gustavo
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2011-11-21 16:46 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-16 15:30 [RFC 1/3] Bluetooth: Use queue in the device list Emeltchenko Andrei
2011-11-16 15:30 ` [RFC 2/3] Bluetooth: remove old code Emeltchenko Andrei
2011-11-16 20:44 ` Gustavo Padovan
2011-11-16 21:47 ` Marcel Holtmann
2011-11-16 15:30 ` [RFC 3/3] Bluetooth: Add AMP initialization Emeltchenko Andrei
2011-11-16 21:49 ` Marcel Holtmann
2011-11-17 13:20 ` Emeltchenko Andrei
2011-11-17 15:45 ` Marcel Holtmann
2011-11-17 18:17 ` Peter Krystad
2011-11-18 5:14 ` Marcel Holtmann
2011-11-18 13:54 ` 'Emeltchenko Andrei'
2011-11-18 16:23 ` Marcel Holtmann
2011-11-21 10:13 ` 'Emeltchenko Andrei'
2011-11-21 13:00 ` Marcel Holtmann
2011-11-16 21:48 ` [RFC 1/3] Bluetooth: Use queue in the device list Marcel Holtmann
2011-11-21 16:46 ` Gustavo Padovan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).