Bluetooth: Make hci_le_create_connection return error

This patch changes hci_le_create_connection function so it returns
error if hci_send_cmd fails instead of void. It also does the proper
error handling in hci_connect_le in case hci_le_create_connection
fails.

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

This patch moves some hci_conn fields initialization from hci_le_
create_connection. It makes more sense to initialize these fields
within the function that creates the hci_conn object.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Refactor LE Connection Complete HCI event handler

This patch does some code refactorig in LE Connection Complete HCI
event handler. It basically adds a switch statement to separate new
master connection code from new slave connection code.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Locking refactor in hci_le_conn_complete_evt

This patch moves hci_dev_lock and hci_dev_unlock calls to where they
are really required, reducing the critical region in hci_le_conn_
complete_evt function. hdev->lock is required only in hci_conn_del
and hci_conn_add call to protect concurrent add and remove operations
in hci_conn_hash list.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Add passive scanning helpers

This patch adds helpers to add and remove the passive scanning trigger.
As long as the number of triggers are greater than zero, we keep the
passive scanning enabled. Once the number of triggers reaches zero,
the passive scanning is disabled.
Bluetooth: Add LE initiate connection helper

This patch introduces the initiate_le_connection local helper which
will be used create LE connection once the target device is found in
range.

This patch also moves code to handle a pending connection failure
into a helper called fail_pending and re-uses it in enable_passive_
scan_complete and initiate_le_connection_complete.

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 change the
current LE connection routine. Today, we use 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.

The new LE connection routine this patch introduces is based on
the general connection establishment procedure (described in Core
spec) and work as follows: The host starts scanning for LE devices,
once the device we want to connect to is in-range, it initiates a
connection. The procedure is terminated when the connection is
established or when the host terminates the procedure.

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

In order to properly cancel a LE hci_conn in BT_CONNECT state we
should check if we are scanning for devices or initiating a
connection. To identify this situation this patch adds a bool flag
in struct hci_conn to indicate if the connection is initiating. So,
if connection is initiating, we send the LE Create Connection Cancel
command. Otherwise, we remove the passive scanning trigger.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Remove hci_cs_le_create_conn event handler

This patch removes the hci_cs_le_create_conn event handler since since
this handling is now done in initiate_le_connection_complete callback
in hci_conn.c.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Remove unused functions

This patch removes the unused functions hci_le_create_connection and
hci_le_create_connection_cancel.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
WIP: Bluetooth: Add fail_all_le_pending
WIP: Bluetooth: Add proper handling for initiating failure

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

This patch makes fail_pending helper non-local so it can be reused
in hci_event.c.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
WIP: Bluetooth: Disable passive scanning temporarily if controller doesn't support state combination
WIP: Bluetooth: Remove BT_CONNECT check in hci_connect_le

Since the kernel is now prepared to handle multiple LE connection
attemps, we can remove this check.

Since the we supported only on LE connection attempt at a time, we
had to check if we already had one connection attempt running.
However, now we support multiple LE connection attempts so we can
safely remove this check in hci_connect_le function.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Don't set chan_timer for 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.

As a side effect, LE connection attempts won't be aborted by the
channel timer anymore. Therefore, SOCK_NONBLOCK LE L2CAP sockets will
be ready (will receive POLLOUT event) when the LE connection is
established.

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>
WIP: Bluetooth: Check ongoing LE connections attempt

Since LE controllers supports only one connection attempt at a time,
we should check if there already is a connection attempt in hci_conn_
check_le_pending.

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