Skip to content

Commit

Permalink
Bluetooth: Refactor LE connection into its own function
Browse files Browse the repository at this point in the history
The code that handles LE connection is already quite separated from
the rest of the connection procedure, so we can easily put it into
its own.

Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@openbossa.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
  • Loading branch information
Vinicius Costa Gomes authored and Gustavo Padovan committed Aug 15, 2012
1 parent 1aef866 commit d04aef4
Showing 1 changed file with 29 additions and 24 deletions.
53 changes: 29 additions & 24 deletions net/bluetooth/hci_conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,40 +470,45 @@ struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
}
EXPORT_SYMBOL(hci_get_route);

static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
u8 dst_type, u8 sec_level, u8 auth_type)
{
struct hci_conn *le;

le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
if (!le) {
le = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
if (le)
return ERR_PTR(-EBUSY);

le = hci_conn_add(hdev, LE_LINK, dst);
if (!le)
return ERR_PTR(-ENOMEM);

le->dst_type = bdaddr_to_le(dst_type);
hci_le_create_connection(le);
}

le->pending_sec_level = sec_level;
le->auth_type = auth_type;

hci_conn_hold(le);

return le;
}

/* Create SCO, ACL or LE connection.
* Device _must_ be locked */
struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
__u8 dst_type, __u8 sec_level, __u8 auth_type)
{
struct hci_conn *acl;
struct hci_conn *sco;
struct hci_conn *le;

BT_DBG("%s dst %s", hdev->name, batostr(dst));

if (type == LE_LINK) {
le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
if (!le) {
le = hci_conn_hash_lookup_state(hdev, LE_LINK,
BT_CONNECT);
if (le)
return ERR_PTR(-EBUSY);

le = hci_conn_add(hdev, LE_LINK, dst);
if (!le)
return ERR_PTR(-ENOMEM);

le->dst_type = bdaddr_to_le(dst_type);
hci_le_create_connection(le);
}

le->pending_sec_level = sec_level;
le->auth_type = auth_type;

hci_conn_hold(le);

return le;
}
if (type == LE_LINK)
return hci_connect_le(hdev, dst, dst_type, sec_level, auth_type);

acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
if (!acl) {
Expand Down

0 comments on commit d04aef4

Please sign in to comment.