* [RFCv1 1/6] Bluetooth: remove old code
2011-11-24 12:51 [RFCv1 0/6] AMP/BREDR initialization patches Emeltchenko Andrei
@ 2011-11-24 12:52 ` Emeltchenko Andrei
2011-11-24 12:52 ` [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts Emeltchenko Andrei
` (4 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-11-24 12:52 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>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
---
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 ef0423e..bc71f96 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -230,18 +230,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] 13+ messages in thread* [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts
2011-11-24 12:51 [RFCv1 0/6] AMP/BREDR initialization patches Emeltchenko Andrei
2011-11-24 12:52 ` [RFCv1 1/6] Bluetooth: remove old code Emeltchenko Andrei
@ 2011-11-24 12:52 ` Emeltchenko Andrei
2011-11-25 12:00 ` Marcel Holtmann
2011-12-02 11:50 ` Gustavo Padovan
2011-11-24 12:52 ` [RFCv1 3/6] Bluetooth: Add HCI Read Flow Control Mode function Emeltchenko Andrei
` (3 subsequent siblings)
5 siblings, 2 replies; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-11-24 12:52 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Current controller initialization is moved tp bredr_init and new
function added amp_init to handle later AMP init sequence. Current
AMP init sequence include Reset and Read Local Version.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/hci_core.c | 64 ++++++++++++++++++++++++++++++++------------
net/bluetooth/hci_event.c | 3 ++
2 files changed, 49 insertions(+), 18 deletions(-)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index bc71f96..a0247d3 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -192,33 +192,18 @@ static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
}
-static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
+static void bredr_init(struct hci_dev *hdev)
{
struct hci_cp_delete_stored_link_key cp;
- struct sk_buff *skb;
__le16 param;
__u8 flt_type;
- BT_DBG("%s %ld", hdev->name, opt);
-
- /* Driver initialization */
-
- /* Special commands */
- while ((skb = skb_dequeue(&hdev->driver_init))) {
- bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
- skb->dev = (void *) hdev;
-
- skb_queue_tail(&hdev->cmd_q, skb);
- tasklet_schedule(&hdev->cmd_task);
- }
- skb_queue_purge(&hdev->driver_init);
-
/* 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);
+ set_bit(HCI_RESET, &hdev->flags);
+ hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
}
/* Read Local Supported Features */
@@ -257,6 +242,49 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
}
+static void amp_init(struct hci_dev *hdev)
+{
+ /* Reset */
+ hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
+
+ /* Read Local Version */
+ hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
+}
+
+static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
+{
+ struct sk_buff *skb;
+
+ BT_DBG("%s %ld", hdev->name, opt);
+
+ /* Driver initialization */
+
+ /* Special commands */
+ while ((skb = skb_dequeue(&hdev->driver_init))) {
+ bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
+ skb->dev = (void *) hdev;
+
+ skb_queue_tail(&hdev->cmd_q, skb);
+ tasklet_schedule(&hdev->cmd_task);
+ }
+ skb_queue_purge(&hdev->driver_init);
+
+ switch (hdev->dev_type) {
+ case HCI_BREDR:
+ bredr_init(hdev);
+ break;
+
+ case HCI_AMP:
+ amp_init(hdev);
+ break;
+
+ default:
+ BT_ERR("Unknown device type %d", hdev->dev_type);
+ break;
+ }
+
+}
+
static void hci_le_init_req(struct hci_dev *hdev, unsigned long opt)
{
BT_DBG("%s", hdev->name);
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 60651fa..2e423eb 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -560,6 +560,9 @@ static void hci_set_le_support(struct hci_dev *hdev)
static void hci_setup(struct hci_dev *hdev)
{
+ if (hdev->dev_type != HCI_BREDR)
+ return;
+
hci_setup_event_mask(hdev);
if (hdev->hci_ver > BLUETOOTH_VER_1_1)
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts
2011-11-24 12:52 ` [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts Emeltchenko Andrei
@ 2011-11-25 12:00 ` Marcel Holtmann
2011-12-02 11:50 ` Gustavo Padovan
1 sibling, 0 replies; 13+ messages in thread
From: Marcel Holtmann @ 2011-11-25 12:00 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
> Current controller initialization is moved tp bredr_init and new
> function added amp_init to handle later AMP init sequence. Current
> AMP init sequence include Reset and Read Local Version.
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> net/bluetooth/hci_core.c | 64 ++++++++++++++++++++++++++++++++------------
> net/bluetooth/hci_event.c | 3 ++
> 2 files changed, 49 insertions(+), 18 deletions(-)
so far so good.
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Regards
Marcel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts
2011-11-24 12:52 ` [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts Emeltchenko Andrei
2011-11-25 12:00 ` Marcel Holtmann
@ 2011-12-02 11:50 ` Gustavo Padovan
2011-12-02 11:56 ` Emeltchenko Andrei
1 sibling, 1 reply; 13+ messages in thread
From: Gustavo Padovan @ 2011-12-02 11:50 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
* Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> [2011-11-24 14:52:01 +0200]:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> Current controller initialization is moved tp bredr_init and new
> function added amp_init to handle later AMP init sequence. Current
> AMP init sequence include Reset and Read Local Version.
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> net/bluetooth/hci_core.c | 64 ++++++++++++++++++++++++++++++++------------
> net/bluetooth/hci_event.c | 3 ++
> 2 files changed, 49 insertions(+), 18 deletions(-)
For some reason this patch doesn't apply, please rebase.
Gustavo
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts
2011-12-02 11:50 ` Gustavo Padovan
@ 2011-12-02 11:56 ` Emeltchenko Andrei
2011-12-05 9:34 ` Emeltchenko Andrei
0 siblings, 1 reply; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-12-02 11:56 UTC (permalink / raw)
To: linux-bluetooth
Hi Gustavo,
On Fri, Dec 02, 2011 at 08:50:25PM +0900, Gustavo Padovan wrote:
> Hi Andrei,
>
> * Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> [2011-11-24 14:52:01 +0200]:
>
> > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> >
> > Current controller initialization is moved tp bredr_init and new
> > function added amp_init to handle later AMP init sequence. Current
> > AMP init sequence include Reset and Read Local Version.
> >
> > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> > ---
> > net/bluetooth/hci_core.c | 64 ++++++++++++++++++++++++++++++++------------
> > net/bluetooth/hci_event.c | 3 ++
> > 2 files changed, 49 insertions(+), 18 deletions(-)
>
> For some reason this patch doesn't apply, please rebase.
Have you tried the more recent version:
PATCHv2 2/8] Bluetooth: Split ctrl init to BREDR and AMP parts
Best regards
Andrei Emeltchenko
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts
2011-12-02 11:56 ` Emeltchenko Andrei
@ 2011-12-05 9:34 ` Emeltchenko Andrei
0 siblings, 0 replies; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-12-05 9:34 UTC (permalink / raw)
To: linux-bluetooth
Hi Gustavo,
On Fri, Dec 02, 2011 at 01:56:39PM +0200, Emeltchenko Andrei wrote:
> Hi Gustavo,
>
> On Fri, Dec 02, 2011 at 08:50:25PM +0900, Gustavo Padovan wrote:
> > Hi Andrei,
> >
> > * Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> [2011-11-24 14:52:01 +0200]:
> >
> > > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> > >
> > > Current controller initialization is moved tp bredr_init and new
> > > function added amp_init to handle later AMP init sequence. Current
> > > AMP init sequence include Reset and Read Local Version.
> > >
> > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> > > ---
> > > net/bluetooth/hci_core.c | 64 ++++++++++++++++++++++++++++++++------------
> > > net/bluetooth/hci_event.c | 3 ++
> > > 2 files changed, 49 insertions(+), 18 deletions(-)
> >
> > For some reason this patch doesn't apply, please rebase.
>
> Have you tried the more recent version:
> PATCHv2 2/8] Bluetooth: Split ctrl init to BREDR and AMP parts
One thought might be that the patch "Remove old code" which is 1/8 shall
be applied first. It is better to apply patches in order they are made.
Best regards
Andrei Emeltchenko
^ permalink raw reply [flat|nested] 13+ messages in thread
* [RFCv1 3/6] Bluetooth: Add HCI Read Flow Control Mode function
2011-11-24 12:51 [RFCv1 0/6] AMP/BREDR initialization patches Emeltchenko Andrei
2011-11-24 12:52 ` [RFCv1 1/6] Bluetooth: remove old code Emeltchenko Andrei
2011-11-24 12:52 ` [RFCv1 2/6] Bluetooth: Split ctrl init to BREDR and AMP parts Emeltchenko Andrei
@ 2011-11-24 12:52 ` Emeltchenko Andrei
2011-11-25 12:01 ` Marcel Holtmann
2011-11-24 12:52 ` [RFCv1 4/6] Bluetooth: Initialize default flow control mode Emeltchenko Andrei
` (2 subsequent siblings)
5 siblings, 1 reply; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-11-24 12:52 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Upstream Code Aurora function with minor trivial fixes.
Origin: git://codeaurora.org/kernel/msm.git
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
include/net/bluetooth/hci.h | 6 ++++++
include/net/bluetooth/hci_core.h | 2 ++
net/bluetooth/hci_event.c | 19 +++++++++++++++++++
3 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 376c574..ee83c36 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -677,6 +677,12 @@ struct hci_rp_read_local_oob_data {
#define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58
+#define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66
+struct hci_rp_read_flow_control_mode {
+ __u8 status;
+ __u8 mode;
+} __packed;
+
#define HCI_OP_WRITE_LE_HOST_SUPPORTED 0x0c6d
struct hci_cp_write_le_host_supported {
__u8 le;
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 1795257..a7fd63a 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -170,6 +170,8 @@ struct hci_dev {
__u32 amp_max_flush_to;
__u32 amp_be_flush_to;
+ __u8 flow_ctl_mode;
+
unsigned int auto_accept_delay;
unsigned long quirks;
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 2e423eb..53e56b4 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -720,6 +720,21 @@ static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
hci_req_complete(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, rp->status);
}
+static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
+ struct sk_buff *skb)
+{
+ struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
+
+ BT_DBG("%s status 0x%x", hdev->name, rp->status);
+
+ if (rp->status)
+ return;
+
+ hdev->flow_ctl_mode = rp->mode;
+
+ hci_req_complete(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, rp->status);
+}
+
static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_rp_read_buffer_size *rp = (void *) skb->data;
@@ -1970,6 +1985,10 @@ static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *sk
hci_cc_write_ca_timeout(hdev, skb);
break;
+ case HCI_OP_READ_FLOW_CONTROL_MODE:
+ hci_cc_read_flow_control_mode(hdev, skb);
+ break;
+
case HCI_OP_READ_LOCAL_AMP_INFO:
hci_cc_read_local_amp_info(hdev, skb);
break;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [RFCv1 3/6] Bluetooth: Add HCI Read Flow Control Mode function
2011-11-24 12:52 ` [RFCv1 3/6] Bluetooth: Add HCI Read Flow Control Mode function Emeltchenko Andrei
@ 2011-11-25 12:01 ` Marcel Holtmann
0 siblings, 0 replies; 13+ messages in thread
From: Marcel Holtmann @ 2011-11-25 12:01 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
> Upstream Code Aurora function with minor trivial fixes.
> Origin: git://codeaurora.org/kernel/msm.git
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> include/net/bluetooth/hci.h | 6 ++++++
> include/net/bluetooth/hci_core.h | 2 ++
> net/bluetooth/hci_event.c | 19 +++++++++++++++++++
> 3 files changed, 27 insertions(+), 0 deletions(-)
just keep in mind that this command is not available on all controller
version.
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Regards
Marcel
^ permalink raw reply [flat|nested] 13+ messages in thread
* [RFCv1 4/6] Bluetooth: Initialize default flow control mode
2011-11-24 12:51 [RFCv1 0/6] AMP/BREDR initialization patches Emeltchenko Andrei
` (2 preceding siblings ...)
2011-11-24 12:52 ` [RFCv1 3/6] Bluetooth: Add HCI Read Flow Control Mode function Emeltchenko Andrei
@ 2011-11-24 12:52 ` Emeltchenko Andrei
2011-11-25 12:02 ` Marcel Holtmann
2011-11-24 12:52 ` [RFCv1 5/6] Bluetooth: Add HCI Read Data Block Size function Emeltchenko Andrei
2011-11-24 12:52 ` [RFCv1 6/6] Bluetooth: Recalculate sched for HCI block flow ctrl Emeltchenko Andrei
5 siblings, 1 reply; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-11-24 12:52 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
include/net/bluetooth/hci.h | 4 ++++
net/bluetooth/hci_core.c | 4 ++++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index ee83c36..67f7028 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -271,6 +271,10 @@ enum {
#define HCI_ERROR_LOCAL_HOST_TERM 0x16
#define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18
+/* Flow control modes */
+#define HCI_PACKET_BASED_FLOW_CTL_MODE 0x00
+#define HCI_BLOCK_BASED_FLOW_CTL_MODE 0x01
+
/* ----- HCI Commands ---- */
#define HCI_OP_NOP 0x0000
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index a0247d3..2e4211e 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -198,6 +198,8 @@ static void bredr_init(struct hci_dev *hdev)
__le16 param;
__u8 flt_type;
+ hdev->flow_ctl_mode = HCI_PACKET_BASED_FLOW_CTL_MODE;
+
/* Mandatory initialization */
/* Reset */
@@ -244,6 +246,8 @@ static void bredr_init(struct hci_dev *hdev)
static void amp_init(struct hci_dev *hdev)
{
+ hdev->flow_ctl_mode = HCI_BLOCK_BASED_FLOW_CTL_MODE;
+
/* Reset */
hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [RFCv1 4/6] Bluetooth: Initialize default flow control mode
2011-11-24 12:52 ` [RFCv1 4/6] Bluetooth: Initialize default flow control mode Emeltchenko Andrei
@ 2011-11-25 12:02 ` Marcel Holtmann
0 siblings, 0 replies; 13+ messages in thread
From: Marcel Holtmann @ 2011-11-25 12:02 UTC (permalink / raw)
To: Emeltchenko Andrei; +Cc: linux-bluetooth
Hi Andrei,
> include/net/bluetooth/hci.h | 4 ++++
> net/bluetooth/hci_core.c | 4 ++++
> 2 files changed, 8 insertions(+), 0 deletions(-)
>
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index ee83c36..67f7028 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -271,6 +271,10 @@ enum {
> #define HCI_ERROR_LOCAL_HOST_TERM 0x16
> #define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18
>
> +/* Flow control modes */
> +#define HCI_PACKET_BASED_FLOW_CTL_MODE 0x00
> +#define HCI_BLOCK_BASED_FLOW_CTL_MODE 0x01
see my other email. You have the naming backwards here.
> +
> /* ----- HCI Commands ---- */
> #define HCI_OP_NOP 0x0000
>
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index a0247d3..2e4211e 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -198,6 +198,8 @@ static void bredr_init(struct hci_dev *hdev)
> __le16 param;
> __u8 flt_type;
>
> + hdev->flow_ctl_mode = HCI_PACKET_BASED_FLOW_CTL_MODE;
> +
> /* Mandatory initialization */
>
> /* Reset */
> @@ -244,6 +246,8 @@ static void bredr_init(struct hci_dev *hdev)
>
> static void amp_init(struct hci_dev *hdev)
> {
> + hdev->flow_ctl_mode = HCI_BLOCK_BASED_FLOW_CTL_MODE;
> +
> /* Reset */
> hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
>
Otherwise this is fine.
Regards
Marcel
^ permalink raw reply [flat|nested] 13+ messages in thread
* [RFCv1 5/6] Bluetooth: Add HCI Read Data Block Size function
2011-11-24 12:51 [RFCv1 0/6] AMP/BREDR initialization patches Emeltchenko Andrei
` (3 preceding siblings ...)
2011-11-24 12:52 ` [RFCv1 4/6] Bluetooth: Initialize default flow control mode Emeltchenko Andrei
@ 2011-11-24 12:52 ` Emeltchenko Andrei
2011-11-24 12:52 ` [RFCv1 6/6] Bluetooth: Recalculate sched for HCI block flow ctrl Emeltchenko Andrei
5 siblings, 0 replies; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-11-24 12:52 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Upstream Code Aurora function with minor trivial fixes.
Origin: git://codeaurora.org/kernel/msm.git
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
include/net/bluetooth/hci.h | 8 ++++++++
include/net/bluetooth/hci_core.h | 2 ++
net/bluetooth/hci_event.c | 31 +++++++++++++++++++++++++++++++
3 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 67f7028..86884b4 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -741,6 +741,14 @@ struct hci_rp_read_bd_addr {
bdaddr_t bdaddr;
} __packed;
+#define HCI_OP_READ_DATA_BLOCK_SIZE 0x100a
+struct hci_rp_read_data_block_size {
+ __u8 status;
+ __le16 max_acl_len;
+ __le16 block_len;
+ __le16 num_blocks;
+} __packed;
+
#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
struct hci_cp_write_page_scan_activity {
__le16 interval;
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index a7fd63a..869ab72 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -172,6 +172,8 @@ struct hci_dev {
__u8 flow_ctl_mode;
+ __u16 block_len;
+
unsigned int auto_accept_delay;
unsigned long quirks;
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 53e56b4..dfea1c6 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -774,6 +774,33 @@ static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
}
+static void hci_cc_read_data_block_size(struct hci_dev *hdev,
+ struct sk_buff *skb)
+{
+ struct hci_rp_read_data_block_size *rp = (void *) skb->data;
+
+ BT_DBG("%s status 0x%x", hdev->name, rp->status);
+
+ if (rp->status)
+ return;
+
+ if (hdev->flow_ctl_mode == HCI_BLOCK_BASED_FLOW_CTL_MODE) {
+ hdev->acl_mtu = __le16_to_cpu(rp->max_acl_len);
+ hdev->sco_mtu = 0;
+ hdev->block_len = __le16_to_cpu(rp->block_len);
+ /* acl_pkts indicates the number of blocks */
+ hdev->acl_pkts = __le16_to_cpu(rp->num_blocks);
+ hdev->sco_pkts = 0;
+ hdev->acl_cnt = hdev->acl_pkts;
+ hdev->sco_cnt = 0;
+ }
+
+ BT_DBG("%s acl mtu %d:%d, block len %d", hdev->name, hdev->acl_mtu,
+ hdev->acl_cnt, hdev->block_len);
+
+ hci_req_complete(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, rp->status);
+}
+
static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
{
__u8 status = *((__u8 *) skb->data);
@@ -1981,6 +2008,10 @@ static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *sk
hci_cc_read_bd_addr(hdev, skb);
break;
+ case HCI_OP_READ_DATA_BLOCK_SIZE:
+ hci_cc_read_data_block_size(hdev, skb);
+ break;
+
case HCI_OP_WRITE_CA_TIMEOUT:
hci_cc_write_ca_timeout(hdev, skb);
break;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [RFCv1 6/6] Bluetooth: Recalculate sched for HCI block flow ctrl
2011-11-24 12:51 [RFCv1 0/6] AMP/BREDR initialization patches Emeltchenko Andrei
` (4 preceding siblings ...)
2011-11-24 12:52 ` [RFCv1 5/6] Bluetooth: Add HCI Read Data Block Size function Emeltchenko Andrei
@ 2011-11-24 12:52 ` Emeltchenko Andrei
5 siblings, 0 replies; 13+ messages in thread
From: Emeltchenko Andrei @ 2011-11-24 12:52 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Upstream Code Aurora code with trivial fixes.
Origin: git://codeaurora.org/kernel/msm.git
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/hci_core.c | 25 ++++++++++++++++++++-----
1 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 2e4211e..1b62041 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2290,10 +2290,12 @@ static inline void hci_sched_acl(struct hci_dev *hdev)
cnt = hdev->acl_cnt;
- while (hdev->acl_cnt &&
+ while (hdev->acl_cnt > 0 &&
(chan = hci_chan_sent(hdev, ACL_LINK, "e))) {
u32 priority = (skb_peek(&chan->data_q))->priority;
- while (quote-- && (skb = skb_peek(&chan->data_q))) {
+ while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
+ int blocks = 1;
+
BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
skb->len, skb->priority);
@@ -2303,15 +2305,28 @@ static inline void hci_sched_acl(struct hci_dev *hdev)
skb = skb_dequeue(&chan->data_q);
+ if (hdev->flow_ctl_mode ==
+ HCI_BLOCK_BASED_FLOW_CTL_MODE)
+ /* Calculate count of blocks used by
+ * this packet
+ */
+ blocks = DIV_ROUND_UP(skb->len -
+ HCI_ACL_HDR_SIZE, hdev->block_len);
+
+ if (blocks > hdev->acl_cnt)
+ return;
+
hci_conn_enter_active_mode(chan->conn,
bt_cb(skb)->force_active);
hci_send_frame(skb);
hdev->acl_last_tx = jiffies;
- hdev->acl_cnt--;
- chan->sent++;
- chan->conn->sent++;
+ hdev->acl_cnt -= blocks;
+ quote -= blocks;
+
+ chan->sent += blocks;
+ chan->conn->sent += blocks;
}
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread