WIP: Bluetooth: Add hci_transaction_deinit

This patch adds the hci_transaction_deinit function. It must be used
in case something goes wrong during HCI transaction creation.

This sample code show the situation:

	hci_transaction_init(&transaction, hdev, complete_cd);

	hci_transaction_cmd(CMD_A);
	hci_transaction_cmd(CMD_B);
	hci_transaction_cmd(CMD_C);

	if (error condition) {
		hci_transaction_deinit(&transaction);
		return;

	hci_transaction_run(&transaction);

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Make hci_le_scan use HCI transaction

This patch changes hci_le_scan helper so it uses the HCI transaction
framework to enable LE scanning. The LE scanning disable timeout
was removed from the helper and it is now handled by mgmt start_
discovery code.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Merge LE-only and interleaved cases

This patch merges the LE-only and interleaved discovery type cases.
Since hci_le_scan helper uses the hci transaction framework, those
cases are pretty much the same now.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Remove LE scan work

This patch removes the LE scan work and all code related to it. We
now use the HCI transaction framework to enable LE scanning. The
LE scan work is no longer needed.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Remove timeout handling from hci_cancel_le_scan

Since LE scanning timeout is not handled by LE scanning helpers
anymore, we should handle it in stop_discovery instead of
hci_cancel_le_scan.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Change LE scanning timeout macros

Define LE scanning timeout macros in jiffies just like others timeout
macros do.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Add LE scan type macros

This patch adds macros for active and passive LE scan type values. It
also removes the LE_SCAN_TYPE macro since it is not used anymore.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Handle start discovery failure in le_scan_complete

This patch moves start discovery failure handling to le_scan_
complete callback. It also removes the LE Set Scan Parameter
HCI event handler since it becomes empty.

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

This patch changes hci_le_create_connection helper so it return error
if hci_send_cmd fails. It also does the proper error handling in
hci_connect_le.

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>
WIP: Bluetooth: Refactor hci_le_conn_complete_evt

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Update hci_cancel_le_scan to use transactions

This patch changes hci_cancel_le_scan so it uses HCI transaction
framework. The main reason for this change is we'll need this
helper supporting HCI transaction to properly implement the LE
connection state machine.

As a side effect, we can also register a complete callback and handle
stop discovery failures in mgmt layer as we already do with start
discovery failures.
Bluetooth: Add LE create connection helpers

This patch adds two static helpers with HCI transaction support. They
will be used by the LE connection state machine.

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

This patch implements a state machine for carrying out the general
connection establishment procedure described in Core spec.

The state machine should be used as follows: when the kernel
receives a new LE connection attempt, it should go to HCI_CONN_LE_
SCAN state, starting the passive LE scanning. Once the target remote
device is in-range, it should go to HCI_CONN_LE_INITIATE state,
stopping the ongoing LE scanning and create the LE connection.

This state machine will be used by the LE connection routine in
order to establish LE connections.

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

In order to properly cancel an ongoing LE connection attempts (hci_conn
in BT_CONNECT state), we should set HCI_CONN_LE_IDLE state. We also
need to do the proper hci_conn deletion when the scanning is disabled
as we already to in case the connection attempt fails in le_conn_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 use the general connection
establishment procedure described in Core spec. 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.

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 perform the general
procedure instead of the direct procedure.

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

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Bluetooth: Count pending LE connection attempts

To avoid traversing the hci_conn list every time we get an advertising
report, we keep a counter of pending LE connection attempts (connections
in HCI_CONN_LE_SCAN state). This way, we only traverse the list if the
counter is greater from zero.

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: Add LE Create Connection Cancel handler

This patch adds a handler for HCI LE Create Connection Cancel command
complete event. This way, we can do all the properly handling of this
command in this function instead of fixing this logic within LE conn
complete handler.

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