Bluetooth: Fix hci_conn timeout routine

If occurs a LE or SCO hci_conn timeout and the connection is already
established (BT_CONNECTED state), the connection is not terminated as
expected. This bug can be reproduced using l2test or scotest tool.
Once the connection is established, kill l2test/scotest and the
connection won't be terminated.

This patch fixes hci_conn_disconnect helper so it is able to
terminate LE and SCO connections, as well as ACL.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Rename hci_acl_disconn

As hci_acl_disconn function basically sends the HCI Disconnect Command
and it is used to disconnect ACL, SCO and LE links, renaming it to
hci_disconnect is more suitable.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Channel timer for LE ATT fixed channel

According to Core spec (see Vol 3, Part A, 6.2.1), the channel timer
used to terminate the channel when the remote endpoint is unreponsive
to signaling requests.

Since there is no signaling requests in LE ATT fixed channel, there
is no need we setup this timer.

This patch modifies l2cap_chan_connect function so it doesn't set
the timer if the cid is L2CAP_CID_LE_DATA.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Support no timeout in LE scan helpers

This patch modifies hci_do_le_scan and hci_cancel_le_scan helpers
in order they support we setup a LE scanning with no timeout. This
feature will be used by the LE connection procedure.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Add new connection states

This patch adds two new connection states which will be used by
hci_conn to establish LE connections.

BT_SCAN state means the controller is scanning for LE devices. Once
the target device is found, the connection goes to BT_DEV_FOUND
state, and then to BT_CONNECT state.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Make hci_le_create_connection non-static

Make hci_le_create_connection helper non-static, so it can be called
from outside hci_conn.c.

The helper will be used used to create a LE connection once the
target device is in-range.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Change LE connection routine

In order to better support LE connection requirements, such as
multiple connections and re-connections, we should support the
general connection establishment procedure described in Core
spec. Today, we support only the direct connection establishment
procedure which has some limitations and, therefore, requires
extra connection management at user-space in order to support
LE connection requirements.

According to the spec, the general procedure is described as
follows: The host starts scanning for LE devices, once the
device we want to connect to is in-range, the host stops scanning
and initiates a connection. The procedure is terminated when the
connection is established or when the host terminates the procedure.

This patch changes the LE connection routine so we carry out the
general procedure instead of the direct procedure.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Remove unneeded check in hci_connect_le

Since the LE connection routine now uses the general connection
procedure, it is guaranteed we have no more than one hci_conn
in BT_CONNECT state. So there is no need to check for LE
connections in BT_CONNECT state anymore.

This patch removes the BT_CONNECT check in hci_connect_le.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Handle hci_conn timeout in BT_SCAN state

If occurs a hci_conn timeout in BT_SCAN state we should stop the
ongoing LE scan.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Handle one LE connection at the time

For now, we are able to carry out one LE connection request at the
time. So, in order to guarantee there is only one connection attempt,
we should check for LE hci_conn objects in BT_SCAN state.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Initialize some hci_conn fields earlier

This patch moves some hci_conn fields initialization to hci_connect_le.
There is no reason we initialize them later at hci_le_create_connection.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>