Bluetooth: Track number of LE slave connections
authorJohan Hedberg <johan.hedberg@intel.com>
Wed, 16 Jul 2014 08:56:08 +0000 (11:56 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 16 Jul 2014 09:58:03 +0000 (11:58 +0200)
Most (probably all) controllers can only deal with a single slave LE
connection at a time. This patch adds a counter for such connections so
that the number can be quickly looked up without iterating the
connections list.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci_core.h

index 3de000fbecdcdd270a94a912043dfb304a6ad2d7..73e16ecfd6b95ff0381e6f3049a4efc002fe1cc8 100644 (file)
@@ -83,6 +83,7 @@ struct hci_conn_hash {
        unsigned int     amp_num;
        unsigned int     sco_num;
        unsigned int     le_num;
+       unsigned int     le_num_slave;
 };
 
 struct bdaddr_list {
@@ -575,6 +576,8 @@ static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
                break;
        case LE_LINK:
                h->le_num++;
+               if (c->role == HCI_ROLE_SLAVE)
+                       h->le_num_slave++;
                break;
        case SCO_LINK:
        case ESCO_LINK:
@@ -599,6 +602,8 @@ static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
                break;
        case LE_LINK:
                h->le_num--;
+               if (c->role == HCI_ROLE_SLAVE)
+                       h->le_num_slave--;
                break;
        case SCO_LINK:
        case ESCO_LINK: