From: Andre Guedes <andre.guedes@openbossa.org>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH v2 12/17] Bluetooth: Auto connection and power on
Date: Wed, 26 Feb 2014 20:21:51 -0300 [thread overview]
Message-ID: <1393456916-22701-12-git-send-email-andre.guedes@openbossa.org> (raw)
In-Reply-To: <1393456916-22701-1-git-send-email-andre.guedes@openbossa.org>
When hdev is closed (e.g. Mgmt power off command, RFKILL or controller
is reset), the ongoing active connections are silently dropped by the
controller (no Disconnection Complete Event is sent to host). For that
reason, the devices that require HCI_AUTO_CONN_ALWAYS are not added to
hdev->pend_le_conns list and they won't auto connect.
So to fix this issue, during hdev closing, we remove all pending LE
connections. After adapter is powered on, we add a pending LE connection
for each HCI_AUTO_CONN_ALWAYS address.
This way, the auto connection mechanism works propely after a power
off and power on sequence as well as RFKILL block/unblock.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
---
net/bluetooth/hci_core.c | 1 +
net/bluetooth/mgmt.c | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 507a137..9470a9c 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2266,6 +2266,7 @@ static int hci_dev_do_close(struct hci_dev *hdev)
hci_dev_lock(hdev);
hci_inquiry_cache_flush(hdev);
hci_conn_hash_flush(hdev);
+ hci_pend_le_conns_clear(hdev);
hci_dev_unlock(hdev);
hci_notify(hdev, HCI_DEV_DOWN);
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index a62e22c..f878267 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -4669,6 +4669,17 @@ void mgmt_index_removed(struct hci_dev *hdev)
mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
}
+/* This function requires the caller holds hdev->lock */
+static void restart_le_auto_conns(struct hci_dev *hdev)
+{
+ struct hci_conn_params *p;
+
+ list_for_each_entry(p, &hdev->le_conn_params, list) {
+ if (p->auto_connect == HCI_AUTO_CONN_ALWAYS)
+ hci_pend_le_conn_add(hdev, &p->addr, p->addr_type);
+ }
+}
+
static void powered_complete(struct hci_dev *hdev, u8 status)
{
struct cmd_lookup match = { NULL, hdev };
@@ -4677,6 +4688,8 @@ static void powered_complete(struct hci_dev *hdev, u8 status)
hci_dev_lock(hdev);
+ restart_le_auto_conns(hdev);
+
mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
new_settings(hdev, match.sk);
--
1.8.5.4
next prev parent reply other threads:[~2014-02-26 23:21 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-26 23:21 [PATCH v2 01/17] Bluetooth: Create hci_req_add_le_scan_disable helper Andre Guedes
2014-02-26 23:21 ` [PATCH v2 02/17] Bluetooth: Declare le_conn_failed in hci_core.h Andre Guedes
2014-02-26 23:21 ` [PATCH v2 03/17] Bluetooth: Stop scanning on LE connection Andre Guedes
2014-02-26 23:21 ` [PATCH v2 04/17] Bluetooth: Remove unused function Andre Guedes
2014-02-26 23:21 ` [PATCH v2 05/17] Bluetooth: Refactor HCI connection code Andre Guedes
2014-02-26 23:21 ` [PATCH v2 06/17] Bluetooth: Move address type conversion to outside hci_connect_le Andre Guedes
2014-02-26 23:21 ` [PATCH v2 07/17] Bluetooth: Introduce hdev->pend_le_conn list Andre Guedes
2014-02-26 23:21 ` [PATCH v2 08/17] Bluetooth: Introduce LE auto connection infrastructure Andre Guedes
2014-02-26 23:21 ` [PATCH v2 09/17] Bluetooth: Introduce LE auto connect options Andre Guedes
2014-02-26 23:21 ` [PATCH v2 10/17] Bluetooth: Connection parameters and auto connection Andre Guedes
2014-02-26 23:21 ` [PATCH v2 11/17] Bluetooth: Temporarily stop background scanning on discovery Andre Guedes
2014-02-26 23:21 ` Andre Guedes [this message]
2014-02-26 23:21 ` [PATCH v2 13/17] Bluetooth: Connection parameters and resolvable address Andre Guedes
2014-02-26 23:21 ` [PATCH v2 14/17] Bluetooth: Support resolvable private addresses Andre Guedes
2014-02-26 23:21 ` [PATCH v2 15/17] Bluetooth: Add le_auto_conn file on debugfs Andre Guedes
2014-02-26 23:21 ` [PATCH v2 16/17] Bluetooth: Create hci_req_add_le_passive_scan helper Andre Guedes
2014-02-26 23:21 ` [PATCH v2 17/17] Bluetooth: Update background scan parameters Andre Guedes
2014-02-27 3:44 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1393456916-22701-12-git-send-email-andre.guedes@openbossa.org \
--to=andre.guedes@openbossa.org \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox