Commit Graph

856 Commits

Author SHA1 Message Date
Johan Hedberg
c20b68a221 Bluetooth: Remove broken check for existing rx CID
This check was trying to optimize the CID allocation, but it adds
little value and was actually broken because of the wrong CID passed
to the lookup function.

Change-Id: I793be0c5eeccb931cea4a5430991d4e692926da6
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
4f66545ba7 Bluetooth: Add clarifying comment to l2cap_chan_alloc_cid()
Make it clear why we're checking for non-zero rx CID.

Change-Id: I07a44cf1a0f28c540b191e24aba4d0519c338eaf
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
b5245cb9db Bluetooth: l2cap: Fix setting unnecessary DCID header in response
For an LE L2CAP Connect Response with a failure error code the core
specification states:

"The DCID, MTU, MPS and Initial Credits fields shall be ignored when
the result field indicates the connection was refused."

This means that there's no point in setting any specific value to it,
i.e. it can be left to 0 as set by memset.

Change-Id: Iead8039c7b60e1cf766e9ab14691e83fe9813288
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
450a124c3f Bluetooth: Fix checking for existing dynamic CID
L2CAP_LE_DYN_CID_END is still a valid CID so we should include it in
the search.

Change-Id: I5ead169fd9114c5d418e2e4f504d82faca8b1afa
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
4c6a95bb55 Bluetooth: Add missing check for invalid dynamic CID
When receiving an LE L2CAP Connect Request we should verify that the
proposed remote CID is within the dynamic CID range, and if not return
the appropriate error.

Change-Id: I54ca2431f0f622f96bc2c3acbd3de7ca4c92713a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
394de5d2c1 Bluetooth: L2CAP name dynamic CID ranges appropriately
Change-Id: If66ab2e80c2a0d5c877a4e465363c1d05c8e643a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
d858444eb5 Bluetooth: l2cap: Fix error code for SCID in use
If we receive a connect request for an SCID that's already allocated
we should return the appropriate "SCID in use" error for it instead of
"No resources".

Change-Id: I1c1e1bba7059c8a37a8cc01c4bb2f3fbd7aab67d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Luiz Augusto von Dentz
701404624e Bluetooth: L2CAP: Don't limit tx MTU
This store the original MTU sent by the remote instead of limiting it to
the amount the buffer can allocate since buffer sizes can now be
different and it was anyway wrong to assume the size of buffer used for
signalling would be the same as in data packets.

Change-Id: I52c7e4946ae949a0068ce28a00d2b427a48a1b51
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
c73a6fd017 Bluetooth: Adjust lower bound of HCI command size
Currently the biggest required HCI command is HCI_LE_Generate_DHkey
which needs 1 (H4 header) + 3 (cmd header) + 64 = 68 bytes.

Change-Id: Ice142b7c68c1cb1571e03549bceb301d806bc453
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Jukka Rissanen
db51867a2b net: Fix NET_BUF_ASSERT macro compile error
This commit fixes this compile error if network buffer debugging
is activated.

  CC      net/buf.o
net/buf.c: In function 'net_buf_unref':
net/buf.c:40:31: error: expected expression before 'if'
 #define NET_BUF_ASSERT(cond) (if (!(cond)) {    \
                               ^
net/buf.c:81:2: note: in expansion of macro 'NET_BUF_ASSERT'
  NET_BUF_ASSERT(buf->ref > 0);
  ^

Change-Id: Id4248806a5df571663e47eab581164a16df0cd1b
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
9350318b92 Bluetooth: core: Rename buffer user data more appropriately
The structs are private so there's no need for long name-spacing.
Also, the bt_hci_data is only used for commands, so just call it
cmd_data.

Change-Id: I924a5b8a8cbcb9eb56038a83c03bcbcf7e79b6e0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
297f4f481f Bluetooth: Split HCI command & event buffers to two pools
The HCI commands and events have slightly different requirements
(e.g. max sizes, or the fact that events don't need any user data) so
it makes sense to keep them separate. The total count is kept at 8 (2
+ 6) but the ACL_OUT count is modified to not exceed the event count
(to avoid inability of handling bursts of Number of Completed Packets
events). The ACL_IN count is also modified to keep these symmetric for
now.

Change-Id: Ia1915a596424425525b6df67e0ddce47a7f618f3
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
eaa34b0753 Bluetooth: Fix using correct host ACL buffer count
The BT_BUF_ACL_IN_MAX was a left-over that shouldn't be used anymore.

Change-Id: Ifa15e00e7e72f56670961ca7830595a2b4301093
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
e9ceedcff7 Bluetooth: Introduce config options for buffer counts/sizes
Introduce dedicate Kconfig options for ACL & HCI buffer counts and
sizes.

Change-Id: I96796058f70998e1e721849422c4bc4e950b6d93
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
fc6b853211 Bluetooth: Clean up Kconfig
Clean up Kconfig conventions.

Change-Id: I06df0b6363cd2dab72e93456455aaef219340e4d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:40 -05:00
Szymon Janc
5fe86c9452 Bluetooth: Fix typo in NET_BUF Kconfig option description
Change-Id: If4249f20a0ec8a6634eaf3c9b9ea1b605b22a2e7
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-02-05 20:24:40 -05:00
Szymon Janc
c84d05a3fe Bluetooth: Allow to enable debugs without connection support
BLUETOOTH_DEBUG and BLUETOOTH_DEBUG_HCI_CORE options are also useful
for Broadcaster and Observer roles and should not depends on connection
support.

Change-Id: Ice1142f3dcc5d73e5460449cc1444a1345eb624a
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-02-05 20:24:40 -05:00
Szymon Janc
ea513bb569 Bluetooth: Always compile in UUID support
This is also useful for Broadcaster and Observer roles and shouldn't
depend on connection support.

Change-Id: I85003253455c3949344e26d24a5fb3a718115947
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-02-05 20:24:40 -05:00
Johan Hedberg
4b433d4fa6 Bluetooth: Differentiate send/recv of needed driver headroom
The space that the HCI driver needs to reserve for its own use is not
necessarily symmetrical. E.g. even with the current H4 driver we only
need to reserve space for sending data but not for receiving it.
Keeping track of these values independently enables more efficient use
of the buffers.

Change-Id: I64917b545c5cd77356ed038d09afe76422334661
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Ravi kumar Veeramally
a81c968b0b net: Add Kconfig option for sanity test
Change-Id: I9d1742fb2c70fbba573fe9ed64bedd8a76aa504c
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
fa8636c24e Bluetooth: Fix handle value in completed packets command
The report_completed_packet() function overwrites the original buf
pointer so we have to use a local variable to store the handle value.

Change-Id: I9caada0dd83270f2de998f57940aaf4995a247da
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
13fcc5ca3e Bluetooth: Make ACL/HCI user data private to hci_core.c
Change-Id: I85ccbfd2d844195bffcc6dd3d6490808569ca129
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
52cf66feb9 Bluetooth: Remove user data from outgoing ACL buffers
Outgoing ACL buffers don't need any user data.

Change-Id: If7e6a27b88d3aa64c51672190bdecc705429aa7b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
31114c384b Bluetooth: Remove buffer type information from user data
Since the type can be determined either from the context or from e.g.
the pool that it belongs to (the 'free' pointer) we no-longer need to
store the type as part of the user data struct.

Change-Id: I090636aaa0a0b1be798b6dadfab072151fc3ab14
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
5f4daa1551 Bluetooth: Merge send_acl/cmd back to a single callback
Now that we have the buffer type enum as part of the HCI driver API we
can take advantage of it to pass the buffer type information and not
have to have two separate callbacks.

Change-Id: Ib2ee5b1540e532c9b27903e97660a276c1293fbc
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
ff2d104105 Bluetooth: Move buffer type enum to driver.h
Since the buffer type is essentially a HCI driver - HCI core
communication detail the appropriate place for it is driver.h. At the
same time remove the unnecessary and slightly confusing BT_DUMMY type.

Change-Id: Ic813ad24d8f0530d3779006063ea21b010d29cf6
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
e000290627 Bluetooth: Move outgoing ACL buffer management to l2cap.c
The only user of this is l2cap.c so move the buffer pool there to
avoid unnecessary calls between c-files.

Change-Id: Ia9335b21c34546e2252fa40d9eec2e09156b0d67
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
3822aecd24 Bluetooth: Merge buf.[ch] functionality into hci_core.[ch]
There's no need to maintain a separate module for this anymore.
Subsequent patches will have further simplifications thanks to this
being now handled in a single c-file.

Change-Id: I4510c9f72b121e1e5fd19eeb8b5d5ddf2f4bfffe
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
1ddc3edcaa Bluetooth: Introduce HCI-driver specific buffer functions
This way we avoid dealing with the specific buffer type value and to
make it clear that these are for drivers onle.

Change-Id: I8aef7ec6a767b2fa68cbe374eb371e2a6192f675
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
7ff1cbd976 Bluetooth: Split HCI driver ACL/CMD send callback
This is a necessary step in preparation for removing the buffer type
information from the buffers.

Change-Id: I29d8fae32aa660416a1c12e87840499c711e659f
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Ravi kumar Veeramally
34f1cacae3 net: Add Kconfig option for loopback num
NET_15_4_LOOPBACK_NUM is Kconfig option for number of times
loopback runs. In a controllable way loopback runs. This will
be helpful in sanity tests.

Change-Id: I48392d7e0d0b793ddc1b2b0c1b8c1f22e1bb318a
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2016-02-05 20:24:39 -05:00
Ravi kumar Veeramally
4d705eec5c net: Fix net_buf variable initialization
Variable len is related uIP stack. datalen is actual variable which
needs to be set zero in net_buf_get_reserve.

Change-Id: I75273ef760d3cd4f90808b496b75f56f19bd2e2b
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
0c338649f0 Bluetooth: Remove unnecessary deadlock check
Previously we didn't have the split to priority rx fiber vs "normal"
rx fiber. This meant that we didn't have full control of code that
would run from this fiber and therefore a deadlock check was useful.
The rx priority fiber (where the deadlock could happen) is very well
defined and controlled so the value of this extra check is now quite
minimal.

Change-Id: I8d09cc39ca6548230a973bc8b8231d999dc1dc67
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
ea11d4b5cd Bluetooth: Add helper macros for accessing Bluetooth user data
To avoid unnecessary stack variables and to simplify code, add helper
macros to access the Bluetooth specific ACL and HCI user data that's
part of the buffers.

Change-Id: Idc337537721115c4091982c04f8a05bbbf0d5a19
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
6e84d77151 Bluetooth: Remove old bt_buf API
Now that all code is converted remove the temporary helpers for the
old bt_buf API.

Change-Id: I5183add527d204c51103549fda3378040d5f8f68
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
ad20899261 Bluetooth: gatt: Convert to net_buf API
Convert the code to use the net_buf API instead of the soon to be
removed bt_buf API.

Change-Id: I9437750aa6fffcde31e1879bf6e3a13143f45480
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:39 -05:00
Johan Hedberg
b9476947d9 Bluetooth: att: Convert to net_buf API
Convert the code to use the net_buf API instead of the soon to be
removed bt_buf API.

Change-Id: I89e5ac5a178cf57c0a3f7fee38d1170c25e07c5b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
dfdd7b24de Bluetooth: smp: Convert to net_buf API
Convert the code to use the net_buf API instead of the soon to be
removed bt_buf API.

Change-Id: I3c7f6c5ec2b447adc8855acf8d66205434ce08eb
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
529a12338b Bluetooth: l2cap: Convert to net_buf API
Convert the code to use the net_buf API instead of the soon to be
removed bt_buf API.

Change-Id: I5f376caeb861ac8b815a0a2e235bd188b9e8185b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
5b4063094a Bluetooth: conn: Convert to net_buf API
Convert the code to use the net_buf API instead of the soon to be
removed bt_buf API.

Change-Id: I7f4577ba31f8e5646873f164ff308c71d23021e5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
c73b131b3b Bluetooth: core: Convert to net_buf API
Convert the code to use the net_buf API instead of the soon to be
removed bt_buf API.

Change-Id: I226de212d4f8d4f5b613708ffe42570443bc2182
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
581fa90ea8 Bluetooth: Initial conversion to net_buf API
This patch performs the minimal necessary conversion to the net_buf
API. It uses a temporary "#define bt_buf net_buf" to make it possible
to convert the code in smaller increments. Most old bt_buf function
also serve as one-line wrappers to the matching net_buf APIs. Once
everything is converted these helpers will be removed.

Change-Id: Ie31433d33576022c9c193a35d2389267005545d6
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
c1f007687f net: Add initial generic buffer implementation
We need to have a generic buffer API in order to efficiently transfer
data between different subsystems. The first such case will be the
Networking and Bluetooth subsystems where 6LoWPAN data will be passed
back and forth.

The needed API needs to provide enough flexibility for different
buffer sizes as well as custom protocol-specific context data.

The implementation offered in this patch follows the general design of
the existing Networking and Bluetooth buffer implementations by using
a backing array of buffer which is fed into a "free buffers" FIFO for
management. The main difference is that the API allows specifying
variable sized buffers for each created pool, as well as a minimum
amount of "user data" that's allocated as part of each buffer.

There's also an optional destroy callback that's e.g. useful for HCI
flow control in Bluetooth (for notifying the controller of available
buffers).

Change-Id: I00b7007135a0ff35219f38f48658f31728fbb7ca
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Luiz Augusto von Dentz
929d4f4c86 Bluetooth: GATT: Make BT_GATT_CHARACTERISTIC declare its value
This makes BT_GATT_CHARACTERISTIC declare a local bt_gatt_chrc so the
applications don't need to declare themselves.

Change-Id: Icf3fad7dffea5667c6f13aa022a5722900da51e8
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:24:38 -05:00
Luiz Augusto von Dentz
1617f5580b Bluetooth: GATT: Remove value_handle from bt_gatt_chrc
The spec says it should always be the very first descriptor after the
characteristic:

  "BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part G] page 534:
   3.3.2 Characteristic Value Declaration
   The Characteristic Value declaration contains the value of the
   characteristic. It is the first Attribute after the characteristic
   declaration. All characteristic definitions shall have a
   Characteristic Value declaration."

Change-Id: I6c38dea9cc4c1a05997edbd348e2759680472725
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:24:38 -05:00
Luiz Augusto von Dentz
1284e608ac Bluetooth: GATT: Remove handles from macros
bt_gatt_register will assign a handle if not initialized and removing
the handle makes it simpler to change the attributes since it is no
longer possible to have conflicting handles.

Change-Id: I787f7325cc990c360056b1aefd07bb7d7876b445
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:24:38 -05:00
Luiz Augusto von Dentz
1c8ab98114 Bluetooth: GATT: Make attribute database into a list
This allow calling bt_gatt_register multiple times so different tasks
can add their own services separately.

Change-Id: I8143ddedfa1079087d608013d1a97b552a3007dc
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:24:38 -05:00
Michael LeMay
0927378a59 net: Add Ethernet support to the network stack
This patch adds support for Ethernet to the network stack, which
entails relying on the Ethernet device driver to set the MAC address,
invoking ARP routines at the appropriate points, configuring the
Contiki network stack to use the appropriate link-level header length,
etc.

Change-Id: I153a6f4c83c28ca7129ef5affa1e9a18b0f92913
Signed-off-by: Michael LeMay <michael.lemay@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
b7ae2f44ad net: Fix enabling both Bluetooth and Networking support
We can't use '=' in net/Makefile since then one statement would
override the value of the previous one when both CONFIG_NETWORKING and
CONFIG_BLUETOOTH were set to 'y'. Instead, use '+='.

Change-Id: Idba9916cc9fb2bd0e53975bdf0a86c0fd184533c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00
Johan Hedberg
49885879f2 Bluetooth: Rename bt_conn_get/put to bt_conn_ref/unref
We want to make the naming convention ref/unref rather than get/put.
So far the only reference counted objects are the buffers and the
connections. For the buffers the new generic buffer API will also use
ref/unref.

Change-Id: I9fe8b8a6a50a8baf06ba231e8f6717a5a47dd292
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:24:38 -05:00