Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH BlueZ 0/2] Service caching improvements
From: Marcin Kraglak @ 2017-05-02  8:28 UTC (permalink / raw)
  To: linux-bluetooth

Service discovery is performed after reconnect and after
receiving service changed indication. In current implementation
Bluez does not remove cached services if they were not found in
next discovery and no new services were put in their range.
This patch set removes services which were previously found in
range but were not found in current service discovery.

Marcin Kraglak (2):
  shared/gatt-db: Remove services with match function
  shared/gatt-client: Validate services

 src/shared/gatt-client.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/shared/gatt-db.c     | 41 ++++++++++++++++++++++++++
 src/shared/gatt-db.h     |  7 +++++
 3 files changed, 124 insertions(+)

-- 
2.4.3


^ permalink raw reply

* Re: [PATCH 1/3] Bluetooth: Enable LE Channel Selection Algorithm event
From: Marcel Holtmann @ 2017-05-02  7:48 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <CABBYNZLX2FNXL7pW9AXodwypo-QzDvf0eBJ5yGjg-GZYBkDdkg@mail.gmail.com>

Hi Luiz,

>> If the Channel Selection Algorithm #2 feature is supported, then enable
>> the new LE Channel Selection Algorithm event.
>> 
>> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
>> ---
>> include/net/bluetooth/hci.h | 1 +
>> net/bluetooth/hci_core.c    | 8 ++++++++
>> 2 files changed, 9 insertions(+)
>> 
>> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
>> index 99aa5e5e3100..dd43cfdd443a 100644
>> --- a/include/net/bluetooth/hci.h
>> +++ b/include/net/bluetooth/hci.h
>> @@ -399,6 +399,7 @@ enum {
>> #define HCI_LE_PING                    0x10
>> #define HCI_LE_DATA_LEN_EXT            0x20
>> #define HCI_LE_EXT_SCAN_POLICY         0x80
>> +#define HCI_LE_CHAN_SEL_ALG2           0x40
>> 
>> /* Connection modes */
>> #define HCI_CM_ACTIVE  0x0000
>> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
>> index 4a0cac774107..e58b9034afff 100644
>> --- a/net/bluetooth/hci_core.c
>> +++ b/net/bluetooth/hci_core.c
>> @@ -635,6 +635,14 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt)
>>                                                 * Report
>>                                                 */
>> 
>> +               /* If the controller supports Channel Selection Algorithm #2
>> +                * feature, enable the corresponding event.
>> +                */
>> +               if (hdev->le_features[1] & HCI_LE_CHAN_SEL_ALG2)
>> +                       events[2] |= 0x08;      /* LE Channel Selection
>> +                                                * Algorithm
>> +                                                */
> 
> It might look better if you move the comments before the assignment
> and it may actually fit in a single line. Btw, shoudn't we have a
> define for 0x08?

this is in line with how we have done for all other events. So I have no plan to re-format the whole section at this point.

Regards

Marcel


^ permalink raw reply

* Re: [PATCH 1/3] Bluetooth: Enable LE Channel Selection Algorithm event
From: Luiz Augusto von Dentz @ 2017-05-02  7:37 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <20170502065419.7959-1-marcel@holtmann.org>

Hi Marcel,

On Tue, May 2, 2017 at 9:54 AM, Marcel Holtmann <marcel@holtmann.org> wrote:
> If the Channel Selection Algorithm #2 feature is supported, then enable
> the new LE Channel Selection Algorithm event.
>
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  include/net/bluetooth/hci.h | 1 +
>  net/bluetooth/hci_core.c    | 8 ++++++++
>  2 files changed, 9 insertions(+)
>
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index 99aa5e5e3100..dd43cfdd443a 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -399,6 +399,7 @@ enum {
>  #define HCI_LE_PING                    0x10
>  #define HCI_LE_DATA_LEN_EXT            0x20
>  #define HCI_LE_EXT_SCAN_POLICY         0x80
> +#define HCI_LE_CHAN_SEL_ALG2           0x40
>
>  /* Connection modes */
>  #define HCI_CM_ACTIVE  0x0000
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index 4a0cac774107..e58b9034afff 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -635,6 +635,14 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt)
>                                                  * Report
>                                                  */
>
> +               /* If the controller supports Channel Selection Algorithm #2
> +                * feature, enable the corresponding event.
> +                */
> +               if (hdev->le_features[1] & HCI_LE_CHAN_SEL_ALG2)
> +                       events[2] |= 0x08;      /* LE Channel Selection
> +                                                * Algorithm
> +                                                */

It might look better if you move the comments before the assignment
and it may actually fit in a single line. Btw, shoudn't we have a
define for 0x08?

>                 /* If the controller supports the LE Set Scan Enable command,
>                  * enable the corresponding advertising report event.
>                  */
> --
> 2.9.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Luiz Augusto von Dentz

^ permalink raw reply

* RE: Unexpected SMP Command 0x0a
From: Wong, Joshua Weng Onn @ 2017-05-02  7:15 UTC (permalink / raw)
  To: 'Marcel Holtmann'
  Cc: Wong, Mun choy, Zulqarnain, Adam, Avinash Kadam,
	Bluez mailing list

SGkgTWFyY2VsLA0KDQo+ID4gPj4+PiBZZXMsIGZvciBzZWN1cmUgY29ubmVjdGlvbiB0aGUgTFRL
IGlzIGdlbmVyYXRlZCBsb2NhbGx5Lg0KPiA+ID4+Pj4gQnV0IGlzc3VlIGhlcmUgaXMgb2JzZXJ2
ZWQgdGhhdCBhZnRlciBQYWlyaW5nIGlzIGNvbXBsZXRlIHRoZSBrZXkNCj4gPiA+Pj4+IGRpc3Ry
aWJ1dGlvbiBpcyBub3QgY29tcGxldGVkIGZyb20gTWFzdGVyLg0KPiA+ID4+Pj4NCj4gPiA+Pj4+
IGkuZS4gQWZ0ZXIgU2xhdmUgc2VuZHMgdGhlICAiU2lnbmF0dXJlIGtleToiIGJ1dCBNYXN0ZXIg
ZG9lc24ndA0KPiA+ID4+Pj4gc2hhcmUgYW55IGtleS4gIEF0dGFjaGVkIGxvZ3MuDQo+ID4gPj4+
IEkgZ2V0IHRoYXQgYW5kIHRoYXQgaXMgY2xlYXIgZnJvbSB0aGUgbG9ncy4gU29tZXRoaW5nIGlz
IHN0YWxsaW5nDQo+ID4gPj4+IGhlcmUgYW5kIGJlY2F1c2Ugb2YgdGhhdCwgeW91IHJ1biBpbnRv
IHRoZSAzMCBzZWNvbmRzIFNNUCB0aW1lb3V0Lg0KPiA+ID4+PiBXZSBqdXN0IG5lZWQgdG8ga25v
dyBpZiB0aGUgNC45IGtlcm5lbCBpcyBkb2luZyB0aGlzIGNvcnJlY3RseS4gSWYNCj4gPiA+Pj4g
c28sIHRoZW4geW91IGNhbiBiaS1zZWN0IHRoYXQgcGF0Y2ggdGhhdCBmaXhlcy4gV2l0aG91dCBw
cm9vZiB0aGF0DQo+ID4gPj4+IDQuOSBpcyBhbHNvIGJyb2tlbiwgbm9ib2R5IHdpbGwgZXZlbiBi
b3RoZXIgdG8gY2hhc2UgdGhpcyBkb3duLg0KPiA+ID4+DQo+ID4gPj4gSSB0aGluayB0aGUgcHJv
YmxlbSBoZXJlIGlzIHJhY2UgYmV0d2VlbiBBQ0wgZGF0YSBhbmQgSENJIGV2ZW50cyBvbg0KPiA+
ID4+IFVTQiBkb25nbGUuLi4gIFdlIGdldCBpbml0aWFsIHNsYXZlIGtleXMgYnV0IHRob3NlIGdl
dCBkcm9wcGVkIGR1ZQ0KPiA+ID4+IHRvIGVuY3J5cHRpb24gY2hhbmdlZCBldmVudCBub3QgYmVp
bmcgcmVjZWl2ZWQgeWV0LiBTaW5jZSBrZXlzIHdlcmUNCj4gPiA+PiBzaWxlbnRseSBkcm9wcGVk
IHdlIGxhdGVyIG9uIGdldCB1bmV4cGVjdGVkIFNNUCBQRFUgYW5kIGlnbm9yaW5nDQo+ID4gPj4g
cmVtYWluaW5nIGtleXMgYXMgd2VsbCB3aGljaCBldmVudHVhbGx5IGxlYWRzIHRvIFNNUCB0aW1l
b3V0Lg0KPiA+ID4+DQo+ID4gPj4gSWYgdGhpcyBpcyBVU0IgZG9uZ2xlICh1c2luZyBidHVzZCkg
dGhlbiBvbmx5IChBRkFJSykgc29sdXRpb24NCj4gPiA+PiB3b3VsZCBiZSB0byBoYXZlIGEgd29y
a2Fyb3VuZCBmb3IgdGhpcyBpbnNpZGUgY2hpcCAoaXQgd291bGQgZGVsYXkNCj4gPiA+PiBBQ0wg
ZGF0YSByZWNlaXZlZCByaWdodCBhZnRlciBlbmNyeXB0aW9uIGNoYW5nZSBnaXZpbmcgaG9zdCB0
aW1lIHRvDQo+ID4gPj4gaGFuZGxlIGVuY3ByeXB0aW9uDQo+ID4gY2hhbmdlIGV2ZW50KS4NCj4g
PiA+PiBCbHVldG9vdGggc3BlY2lmaWNhdGlvbiBmb3IgVVNCIHRyYW5zcG9ydCBpcyB1bmZvcnR1
bmF0ZWxseSBraW5kYSBicm9rZW4uDQo+ID4gPj4NCj4gPiA+PiAtLQ0KPiA+ID4+IHBvemRyYXdp
YW0NCj4gPiA+PiBTenltb24gSmFuYw0KPiA+ID4NCj4gPiA+IFRoYW5rIHlvdSBmb3IgeW91ciBy
ZXBseS4gWW91ciBpbnB1dHMgYXJlIHZhbHVhYmxlIHRvIHVzIGluIGhlbHBpbmcNCj4gPiA+IHRv
IGRlYnVnIHRoZQ0KPiA+IGlzc3VlLiBZZXMsIHdlIGFyZSBpbmRlZWQgdXNpbmcgdGhlIGJ0dXNi
IGtlcm5lbCBtb2R1bGUgYW5kIGl0IGlzDQo+ID4gdXNpbmcgYSBVU0IgaW50ZXJmYWNlIChCbHVl
dG9vdGggb3ZlciBVU0IpLg0KPiA+ID4NCj4gPiA+IEkgbm90aWNlZCB0aGF0IHdoZW4gYnRtZ210
IHNldHRpbmdzIGFyZSBzZXQgdG8gdHVybiAnYnJlZHIgb2ZmJywgdGhlDQo+ID4gPiAnc3NwJyBt
b2RlDQo+ID4gYWxzbyB0dXJucyBvZmYuIElzIHRoaXMgYmVoYXZpb3IgZXhwZWN0ZWQgdG8gb2Nj
dXI/DQo+ID4gPiBNeSBjdXJyZW50IHNldHRpbmdzIGFyZSAncG93ZXJlZCBjb25uZWN0YWJsZSBk
aXNjb3ZlcmFibGUgYm9uZGFibGUNCj4gPiA+IGxlDQo+ID4gc2VjdXJlLWNvbm7igJkNCj4gPg0K
PiA+IHRoZSBTU1AgKFNlY3VyZSBTaW1wbGUgUGFpcmluZykgaXMgYSBCUi9FRFIgb25seSBmZWF0
dXJlLiBTbyB3aGVuIHlvdQ0KPiA+IGRpc2FibGUgQlIvRURSLCBpdCB3aWxsIGJlIGRpc2FibGVk
IGFzIHdlbGwuDQo+IA0KPiBUaGFuayB5b3UgZm9yIHlvdXIgcmVwbHkuIEl0IGxvb2tzIGxpa2Ug
SSBoYXZlIHVuZGVyc3Rvb2QgdGhpcyBpbmNvcnJlY3RseSBhcw0KPiBpbml0aWFsbHkgSSByZWFk
IHNvbWV3aGVyZSB0aGF0IExFIGFkb3B0cyB0aGUgU1NQIG1vZGVsIGluIHY0LjEuIExvb2tzIGxp
a2UgdGhpcyBpcw0KPiBub3QgdGhlIGNhc2UuDQo+IA0KPiBGcm9tIHRoZSBzcGVjaWZpY2F0aW9u
LCBJIG5vdGVkIHRoYXQgU1NQIHdhcyBpbnRyb2R1Y2VkIGluIEJSL0VEUiBpbiB2Mi4xIHdoaWNo
DQo+IG1ha2VzIGl0IGEgQlIvRURSIG9ubHkgZmVhdHVyZS4NCj4gDQo+IEkgZmluYWxseSB1bmRl
cnN0YW5kIHdoeSBzc3AgbW9kZSBpcyBkaXNhYmxlZCB3aGVuIEkgdHVybmVkIGJyZWRyIG9mZiB2
aWENCj4gYnRtZ210LiBUaGFuayB5b3UgZm9yIHlvdXIgY2xhcmlmaWNhdGlvbiENCg0KSSB3b3Vs
ZCBsaWtlIHRvIGZvbGxvdyB1cCB3aXRoIHRoaXMgaXRlbS4NCg0KSSBoYXZlIG1hbmFnZWQgdG8g
cnVuIHRoZSB0ZXN0cyBhcyB5b3UgaGF2ZSBzdWdnZXN0ZWQgb24gYSBuZXdlciBsaW51eCA0LjEw
IGtlcm5lbC4gSSB1c2VkIGEgbmV3ZXIgYmx1ZXogdjUuNDMgdmVyc2lvbiBhcyB0aGVyZSB3ZXJl
IHNvbWUgdW5yZWNvZ25pemVkICJNR01UIGNvbW1hbmQiIGluIGJ0bW9uIHdoZW4gSSB1c2VkIGJs
dWV6IHY1LjQwLiBUaGUgQlQgaW50ZXJmYWNlIHVzZWQgaXMgVVNCIDIuMC4NCg0KVGhlIExFIHBh
aXJpbmcgYmV0d2VlbiB0d28gZGV2aWNlcyBhcmUgc3RpbGwgZmFpbGluZyBldmVuIG9uIHRoZSBu
ZXdlciBrZXJuZWwuIFRoZSBJTyBjYXBhYmlsaXR5IG9mIHRoZSBtYXN0ZXIgYW5kIHNsYXZlIGlz
IHNldCB0byBLZXlib2FyZERpc3BsYXkuDQpZb3UgbWF5IGZpbmQgdGhlIHBhaXJpbmcgbG9ncyBp
biBidG1vbiBhcyBmb2xsb3dzOg0KDQpCbHVldG9vdGggbW9uaXRvciB2ZXIgNS40Mw0KPSBOb3Rl
OiBMaW51eCB2ZXJzaW9uIDQuMTAuMTIteW9jdG8tc3RhbmRhcmQgKHg4Nl82NCkgICAgICAgICAg
ICAgICAgICAwLjI4NTY1NQ0KPSBOb3RlOiBCbHVldG9vdGggc3Vic3lzdGVtIHZlcnNpb24gMi4y
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI4NTY2Mg0KPSBOZXcgSW5kZXg6IDc0
OkM2OjNCOkFCOjY4OkQ4IChQcmltYXJ5LFVTQixoY2kwKSAgICAgICAgICAgICAgIFtoY2kwXSAw
LjI4NTY2NQ0KPSBPcGVuIEluZGV4OiA3NDpDNjozQjpBQjo2ODpEOCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFtoY2kwXSAwLjI4NTY2Nw0KPSBJbmRleCBJbmZvOiA3NDpDNjozQjpB
Qjo2OC4uIChNYXJ2ZWxsIFRlY2hub2xvZ3kgR3JvdXAgTHRkLikgIFtoY2kwXSAwLjI4NTY2OQ0K
QCBNR01UIE9wZW46IGJsdWV0b290aGQgKHByaXZpbGVnZWQpIHZlcnNpb24gMS4xNCAgICAgICAg
ICAgICB7MHgwMDAxfSAwLjI4NTY3Mg0KQCBNR01UIE9wZW46IGJ0bW9uIChwcml2aWxlZ2VkKSB2
ZXJzaW9uIDEuMTQgICAgICAgICAgICAgICAgICB7MHgwMDAyfSAwLjI4NTcwNg0KPCBIQ0kgQ29t
bWFuZDogTEUgQ3JlYXRlIENvbm5lY3Rpb24gKDB4MDh8MHgwMDBkKSBwbGVuIDI1ICAgICAgW2hj
aTBdIDQ4LjkzOTQzNA0KICAgICAgICBTY2FuIGludGVydmFsOiA2MC4wMDAgbXNlYyAoMHgwMDYw
KQ0KICAgICAgICBTY2FuIHdpbmRvdzogNjAuMDAwIG1zZWMgKDB4MDA2MCkNCiAgICAgICAgRmls
dGVyIHBvbGljeTogV2hpdGUgbGlzdCBpcyBub3QgdXNlZCAoMHgwMCkNCiAgICAgICAgUGVlciBh
ZGRyZXNzIHR5cGU6IFB1YmxpYyAoMHgwMCkNCiAgICAgICAgUGVlciBhZGRyZXNzOiA3NDpDNjoz
QjpBQjo2ODpFMCAoT1VJIDc0LUM2LTNCKQ0KICAgICAgICBPd24gYWRkcmVzcyB0eXBlOiBQdWJs
aWMgKDB4MDApDQogICAgICAgIE1pbiBjb25uZWN0aW9uIGludGVydmFsOiA1MC4wMCBtc2VjICgw
eDAwMjgpDQogICAgICAgIE1heCBjb25uZWN0aW9uIGludGVydmFsOiA3MC4wMCBtc2VjICgweDAw
MzgpDQogICAgICAgIENvbm5lY3Rpb24gbGF0ZW5jeTogMHgwMDAwDQogICAgICAgIFN1cGVydmlz
aW9uIHRpbWVvdXQ6IDQyMCBtc2VjICgweDAwMmEpDQogICAgICAgIE1pbiBjb25uZWN0aW9uIGxl
bmd0aDogMC4wMDAgbXNlYyAoMHgwMDAwKQ0KICAgICAgICBNYXggY29ubmVjdGlvbiBsZW5ndGg6
IDAuMDAwIG1zZWMgKDB4MDAwMCkNCj4gSENJIEV2ZW50OiBDb21tYW5kIFN0YXR1cyAoMHgwZikg
cGxlbiA0ICAgICAgICAgICAgICAgICAgICAgIFtoY2kwXSA0OC45NDI1OTMNCiAgICAgIExFIENy
ZWF0ZSBDb25uZWN0aW9uICgweDA4fDB4MDAwZCkgbmNtZCAxDQogICAgICAgIFN0YXR1czogU3Vj
Y2VzcyAoMHgwMCkNCj4gSENJIEV2ZW50OiBMRSBNZXRhIEV2ZW50ICgweDNlKSBwbGVuIDE5ICAg
ICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1MC4yMjcwNjYNCiAgICAgIExFIENvbm5lY3Rpb24g
Q29tcGxldGUgKDB4MDEpDQogICAgICAgIFN0YXR1czogU3VjY2VzcyAoMHgwMCkNCiAgICAgICAg
SGFuZGxlOiAxMjgNCiAgICAgICAgUm9sZTogTWFzdGVyICgweDAwKQ0KICAgICAgICBQZWVyIGFk
ZHJlc3MgdHlwZTogUHVibGljICgweDAwKQ0KICAgICAgICBQZWVyIGFkZHJlc3M6IDc0OkM2OjNC
OkFCOjY4OkUwIChPVUkgNzQtQzYtM0IpDQogICAgICAgIENvbm5lY3Rpb24gaW50ZXJ2YWw6IDY3
LjUwIG1zZWMgKDB4MDAzNikNCiAgICAgICAgQ29ubmVjdGlvbiBsYXRlbmN5OiAwLjAwIG1zZWMg
KDB4MDAwMCkNCiAgICAgICAgU3VwZXJ2aXNpb24gdGltZW91dDogNDIwIG1zZWMgKDB4MDAyYSkN
CiAgICAgICAgTWFzdGVyIGNsb2NrIGFjY3VyYWN5OiAweDAxDQpAIE1HTVQgRXZlbnQ6IERldmlj
ZSBDb25uZWN0ZWQgKDB4MDAwYikgcGxlbiAxOSAgICAgICB7MHgwMDAyfSBbaGNpMF0gNTAuMjI3
MTMxDQogICAgICAgIExFIEFkZHJlc3M6IDc0OkM2OjNCOkFCOjY4OkUwIChPVUkgNzQtQzYtM0Ip
DQogICAgICAgIEZsYWdzOiAweDAwMDAwMDAwDQogICAgICAgIERhdGEgbGVuZ3RoOiA2DQogICAg
ICAgIEZsYWdzOiAweDA2DQogICAgICAgICAgTEUgR2VuZXJhbCBEaXNjb3ZlcmFibGUgTW9kZQ0K
ICAgICAgICAgIEJSL0VEUiBOb3QgU3VwcG9ydGVkDQogICAgICAgIFRYIHBvd2VyOiAzIGRCbQ0K
QCBNR01UIEV2ZW50OiBEZXZpY2UgQ29ubmVjdGVkICgweDAwMGIpIHBsZW4gMTkgICAgICAgezB4
MDAwMX0gW2hjaTBdIDUwLjIyNzEzMQ0KICAgICAgICBMRSBBZGRyZXNzOiA3NDpDNjozQjpBQjo2
ODpFMCAoT1VJIDc0LUM2LTNCKQ0KICAgICAgICBGbGFnczogMHgwMDAwMDAwMA0KICAgICAgICBE
YXRhIGxlbmd0aDogNg0KICAgICAgICBGbGFnczogMHgwNg0KICAgICAgICAgIExFIEdlbmVyYWwg
RGlzY292ZXJhYmxlIE1vZGUNCiAgICAgICAgICBCUi9FRFIgTm90IFN1cHBvcnRlZA0KICAgICAg
ICBUWCBwb3dlcjogMyBkQm0NCjwgSENJIENvbW1hbmQ6IExFIFJlYWQgUmVtb3RlIFVzZWQgRmVh
Li4gKDB4MDh8MHgwMDE2KSBwbGVuIDIgIFtoY2kwXSA1MC4yMjczMTMNCiAgICAgICAgSGFuZGxl
OiAxMjgNCj4gSENJIEV2ZW50OiBDb21tYW5kIFN0YXR1cyAoMHgwZikgcGxlbiA0ICAgICAgICAg
ICAgICAgICAgICAgIFtoY2kwXSA1MC4yMjg1NTUNCiAgICAgIExFIFJlYWQgUmVtb3RlIFVzZWQg
RmVhdHVyZXMgKDB4MDh8MHgwMDE2KSBuY21kIDENCiAgICAgICAgU3RhdHVzOiBTdWNjZXNzICgw
eDAwKQ0KPiBIQ0kgRXZlbnQ6IExFIE1ldGEgRXZlbnQgKDB4M2UpIHBsZW4gMTIgICAgICAgICAg
ICAgICAgICAgICAgW2hjaTBdIDUwLjM3MTMxNg0KICAgICAgTEUgUmVhZCBSZW1vdGUgVXNlZCBG
ZWF0dXJlcyAoMHgwNCkNCiAgICAgICAgU3RhdHVzOiBTdWNjZXNzICgweDAwKQ0KICAgICAgICBI
YW5kbGU6IDEyOA0KICAgICAgICBGZWF0dXJlczogMHg0ZiAweDAwIDB4MDAgMHgwMCAweDAwIDB4
MDAgMHgwMCAweDAwDQogICAgICAgICAgTEUgRW5jcnlwdGlvbg0KICAgICAgICAgIENvbm5lY3Rp
b24gUGFyYW1ldGVyIFJlcXVlc3QgUHJvY2VkdXJlDQogICAgICAgICAgRXh0ZW5kZWQgUmVqZWN0
IEluZGljYXRpb24NCiAgICAgICAgICBTbGF2ZS1pbml0aWF0ZWQgRmVhdHVyZXMgRXhjaGFuZ2UN
CiAgICAgICAgICBMTCBQcml2YWN5DQo8IEFDTCBEYXRhIFRYOiBIYW5kbGUgMTI4IGZsYWdzIDB4
MDAgZGxlbiAxMSAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTAuMzcxNDY2DQogICAgICBTTVA6
IFBhaXJpbmcgUmVxdWVzdCAoMHgwMSkgbGVuIDYNCiAgICAgICAgSU8gY2FwYWJpbGl0eTogS2V5
Ym9hcmREaXNwbGF5ICgweDA0KQ0KICAgICAgICBPT0IgZGF0YTogQXV0aGVudGljYXRpb24gZGF0
YSBub3QgcHJlc2VudCAoMHgwMCkNCiAgICAgICAgQXV0aGVudGljYXRpb24gcmVxdWlyZW1lbnQ6
IEJvbmRpbmcsIE1JVE0sIFNDLCBObyBLZXlwcmVzc2VzICgweDBkKQ0KICAgICAgICBNYXggZW5j
cnlwdGlvbiBrZXkgc2l6ZTogMTYNCiAgICAgICAgSW5pdGlhdG9yIGtleSBkaXN0cmlidXRpb246
IEVuY0tleSBTaWduICgweDA1KQ0KICAgICAgICBSZXNwb25kZXIga2V5IGRpc3RyaWJ1dGlvbjog
RW5jS2V5IElkS2V5IFNpZ24gKDB4MDcpDQo8IEFDTCBEYXRhIFRYOiBIYW5kbGUgMTI4IGZsYWdz
IDB4MDAgZGxlbiA3ICAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTAuMzc0NjYyDQogICAgICBB
VFQ6IEV4Y2hhbmdlIE1UVSBSZXF1ZXN0ICgweDAyKSBsZW4gMg0KICAgICAgICBDbGllbnQgUlgg
TVRVOiA1MTcNCj4gQUNMIERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMiBkbGVuIDcgICAg
ICAgICAgICAgICAgICAgIFtoY2kwXSA1MC40Mzc3MzgNCiAgICAgIEFUVDogRXhjaGFuZ2UgTVRV
IFJlcXVlc3QgKDB4MDIpIGxlbiAyDQogICAgICAgIENsaWVudCBSWCBNVFU6IDUxNw0KPCBBQ0wg
RGF0YSBUWDogSGFuZGxlIDEyOCBmbGFncyAweDAwIGRsZW4gNyAgICAgICAgICAgICAgICAgICAg
W2hjaTBdIDUwLjQzODA5NA0KICAgICAgQVRUOiBFeGNoYW5nZSBNVFUgUmVzcG9uc2UgKDB4MDMp
IGxlbiAyDQogICAgICAgIFNlcnZlciBSWCBNVFU6IDUxNw0KPiBIQ0kgRXZlbnQ6IE51bWJlciBv
ZiBDb21wbGV0ZWQgUGFja2V0cyAoMHgxMykgcGxlbiA1ICAgICAgICAgW2hjaTBdIDUwLjQzODA5
Ng0KICAgICAgICBOdW0gaGFuZGxlczogMQ0KICAgICAgICBIYW5kbGU6IDEyOA0KICAgICAgICBD
b3VudDogMQ0KPiBIQ0kgRXZlbnQ6IE51bWJlciBvZiBDb21wbGV0ZWQgUGFja2V0cyAoMHgxMykg
cGxlbiA1ICAgICAgICAgW2hjaTBdIDUwLjQzODcwOA0KICAgICAgICBOdW0gaGFuZGxlczogMQ0K
ICAgICAgICBIYW5kbGU6IDEyOA0KICAgICAgICBDb3VudDogMQ0KPiBBQ0wgRGF0YSBSWDogSGFu
ZGxlIDEyOCBmbGFncyAweDAyIGRsZW4gMTEgICAgICAgICAgICAgICAgICAgW2hjaTBdIDUwLjUw
NTIzNw0KICAgICAgU01QOiBQYWlyaW5nIFJlc3BvbnNlICgweDAyKSBsZW4gNg0KICAgICAgICBJ
TyBjYXBhYmlsaXR5OiBLZXlib2FyZERpc3BsYXkgKDB4MDQpDQogICAgICAgIE9PQiBkYXRhOiBB
dXRoZW50aWNhdGlvbiBkYXRhIG5vdCBwcmVzZW50ICgweDAwKQ0KICAgICAgICBBdXRoZW50aWNh
dGlvbiByZXF1aXJlbWVudDogQm9uZGluZywgTUlUTSwgU0MsIE5vIEtleXByZXNzZXMgKDB4MGQp
DQogICAgICAgIE1heCBlbmNyeXB0aW9uIGtleSBzaXplOiAxNg0KICAgICAgICBJbml0aWF0b3Ig
a2V5IGRpc3RyaWJ1dGlvbjogRW5jS2V5IFNpZ24gKDB4MDUpDQogICAgICAgIFJlc3BvbmRlciBr
ZXkgZGlzdHJpYnV0aW9uOiBFbmNLZXkgU2lnbiAoMHgwNSkNCj4gSENJIEV2ZW50OiBOdW1iZXIg
b2YgQ29tcGxldGVkIFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFtoY2kwXSA1MC41MDU1
OTINCiAgICAgICAgTnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAgICAg
Q291bnQ6IDENCj4gQUNMIERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMiBkbGVuIDcgICAg
ICAgICAgICAgICAgICAgIFtoY2kwXSA1MC41MDU5ODENCiAgICAgIEFUVDogRXhjaGFuZ2UgTVRV
IFJlc3BvbnNlICgweDAzKSBsZW4gMg0KICAgICAgICBTZXJ2ZXIgUlggTVRVOiA1MTcNCjwgQUNM
IERhdGEgVFg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMCBkbGVuIDY5ICAgICAgICAgICAgICAgICAg
IFtoY2kwXSA1MC41MDk2MDgNCiAgICAgIFNNUDogUGFpcmluZyBQdWJsaWMgS2V5ICgweDBjKSBs
ZW4gNjQNCiAgICAgICAgWDogOGM0ZDExZmI1MTkzMmY4ZjBhMGMyMGY2Njk4MjFjMTJjOThhMDMw
MDI3ZGFlNmEyNjYwZjdmNDM5NWFkYWU5MA0KICAgICAgICBZOiA2Yzk1YWNjZjlmNGFmZGJkMzAy
ZWRmZTVhM2U2NDYzZWI3ZWE5MjQxNjBjNmNhMmM0ZmE0ZjkzYTNlMDljNDE1DQo8IEFDTCBEYXRh
IFRYOiBIYW5kbGUgMTI4IGZsYWdzIDB4MDAgZGxlbiAxMSAgICAgICAgICAgICAgICAgICBbaGNp
MF0gNTAuNTA5OTQ1DQogICAgICBBVFQ6IFJlYWQgQnkgR3JvdXAgVHlwZSBSZXF1ZXN0ICgweDEw
KSBsZW4gNg0KICAgICAgICBIYW5kbGUgcmFuZ2U6IDB4MDAwMS0weGZmZmYNCiAgICAgICAgQXR0
cmlidXRlIGdyb3VwIHR5cGU6IFByaW1hcnkgU2VydmljZSAoMHgyODAwKQ0KPiBBQ0wgRGF0YSBS
WDogSGFuZGxlIDEyOCBmbGFncyAweDAyIGRsZW4gMTEgICAgICAgICAgICAgICAgICAgW2hjaTBd
IDUwLjU3NDAyMw0KICAgICAgQVRUOiBSZWFkIEJ5IEdyb3VwIFR5cGUgUmVxdWVzdCAoMHgxMCkg
bGVuIDYNCiAgICAgICAgSGFuZGxlIHJhbmdlOiAweDAwMDEtMHhmZmZmDQogICAgICAgIEF0dHJp
YnV0ZSBncm91cCB0eXBlOiBQcmltYXJ5IFNlcnZpY2UgKDB4MjgwMCkNCjwgQUNMIERhdGEgVFg6
IEhhbmRsZSAxMjggZmxhZ3MgMHgwMCBkbGVuIDE4ICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1
MC41NzQzNzcNCiAgICAgIEFUVDogUmVhZCBCeSBHcm91cCBUeXBlIFJlc3BvbnNlICgweDExKSBs
ZW4gMTMNCiAgICAgICAgQXR0cmlidXRlIGRhdGEgbGVuZ3RoOiA2DQogICAgICAgIEF0dHJpYnV0
ZSBncm91cCBsaXN0OiAyIGVudHJpZXMNCiAgICAgICAgSGFuZGxlIHJhbmdlOiAweDAwMDEtMHgw
MDA1DQogICAgICAgIFVVSUQ6IEdlbmVyaWMgQWNjZXNzIFByb2ZpbGUgKDB4MTgwMCkNCiAgICAg
ICAgSGFuZGxlIHJhbmdlOiAweDAwMDYtMHgwMDA5DQogICAgICAgIFVVSUQ6IEdlbmVyaWMgQXR0
cmlidXRlIFByb2ZpbGUgKDB4MTgwMSkNCj4gSENJIEV2ZW50OiBOdW1iZXIgb2YgQ29tcGxldGVk
IFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFtoY2kwXSA1MC41NzQ0MzcNCiAgICAgICAg
TnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAgICAgQ291bnQ6IDENCj4g
SENJIEV2ZW50OiBOdW1iZXIgb2YgQ29tcGxldGVkIFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAg
ICAgIFtoY2kwXSA1MC41NzUwODANCiAgICAgICAgTnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFu
ZGxlOiAxMjgNCiAgICAgICAgQ291bnQ6IDENCj4gSENJIEV2ZW50OiBOdW1iZXIgb2YgQ29tcGxl
dGVkIFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFtoY2kwXSA1MC42NDAxOTENCiAgICAg
ICAgTnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAgICAgQ291bnQ6IDEN
Cj4gQUNMIERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMiBkbGVuIDY5ICAgICAgICAgICAg
ICAgICAgIFtoY2kwXSA1MC42NDA2NTcNCiAgICAgIFNNUDogUGFpcmluZyBQdWJsaWMgS2V5ICgw
eDBjKSBsZW4gNjQNCiAgICAgICAgWDogZGViZmIxZDdhMzZjNjM0ODNkY2U5YmM3OTcyMGE3ZjVi
ZDFhOWZhYmEzZDAwYzk1N2FlNmIxZTMxYzZhYjE0Mg0KICAgICAgICBZOiAwYWIyZmJiNjRhZGI0
NTM3YjljM2I2MTYzNTU4YjQ5ODUyOTY4ZGUwYzA4MmRiZDZhYzVmYWE1MWY0MTVjNTExDQo+IEFD
TCBEYXRhIFJYOiBIYW5kbGUgMTI4IGZsYWdzIDB4MDIgZGxlbiAyMSAgICAgICAgICAgICAgICAg
ICBbaGNpMF0gNTAuNjQyNTUyDQogICAgICBTTVA6IFBhaXJpbmcgQ29uZmlybSAoMHgwMykgbGVu
IDE2DQogICAgICAgIENvbmZpbSB2YWx1ZTogMWQ0Yzc1NDYzZDliYzlmMTMzYjVhMTNkN2I2ZWI3
OGQNCj4gQUNMIERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMiBkbGVuIDE4ICAgICAgICAg
ICAgICAgICAgIFtoY2kwXSA1MC42NDMwNDkNCiAgICAgIEFUVDogUmVhZCBCeSBHcm91cCBUeXBl
IFJlc3BvbnNlICgweDExKSBsZW4gMTMNCiAgICAgICAgQXR0cmlidXRlIGRhdGEgbGVuZ3RoOiA2
DQogICAgICAgIEF0dHJpYnV0ZSBncm91cCBsaXN0OiAyIGVudHJpZXMNCiAgICAgICAgSGFuZGxl
IHJhbmdlOiAweDAwMDEtMHgwMDA1DQogICAgICAgIFVVSUQ6IEdlbmVyaWMgQWNjZXNzIFByb2Zp
bGUgKDB4MTgwMCkNCiAgICAgICAgSGFuZGxlIHJhbmdlOiAweDAwMDYtMHgwMDA5DQogICAgICAg
IFVVSUQ6IEdlbmVyaWMgQXR0cmlidXRlIFByb2ZpbGUgKDB4MTgwMSkNCjwgQUNMIERhdGEgVFg6
IEhhbmRsZSAxMjggZmxhZ3MgMHgwMCBkbGVuIDIxICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1
MC42NDUwNTYNCiAgICAgIFNNUDogUGFpcmluZyBSYW5kb20gKDB4MDQpIGxlbiAxNg0KICAgICAg
ICBSYW5kb20gdmFsdWU6IDU5ZGYxZTdkYmYyMmEwNzVjMGE1ZjJkYzdhNmZkMzEwDQo8IEFDTCBE
YXRhIFRYOiBIYW5kbGUgMTI4IGZsYWdzIDB4MDAgZGxlbiAxMSAgICAgICAgICAgICAgICAgICBb
aGNpMF0gNTAuNjQ1NDY2DQogICAgICBBVFQ6IFJlYWQgQnkgR3JvdXAgVHlwZSBSZXF1ZXN0ICgw
eDEwKSBsZW4gNg0KICAgICAgICBIYW5kbGUgcmFuZ2U6IDB4MDAwYS0weGZmZmYNCiAgICAgICAg
QXR0cmlidXRlIGdyb3VwIHR5cGU6IFByaW1hcnkgU2VydmljZSAoMHgyODAwKQ0KPiBBQ0wgRGF0
YSBSWDogSGFuZGxlIDEyOCBmbGFncyAweDAyIGRsZW4gMTEgICAgICAgICAgICAgICAgICAgW2hj
aTBdIDUwLjcwNzY5MA0KICAgICAgQVRUOiBSZWFkIEJ5IEdyb3VwIFR5cGUgUmVxdWVzdCAoMHgx
MCkgbGVuIDYNCiAgICAgICAgSGFuZGxlIHJhbmdlOiAweDAwMGEtMHhmZmZmDQogICAgICAgIEF0
dHJpYnV0ZSBncm91cCB0eXBlOiBQcmltYXJ5IFNlcnZpY2UgKDB4MjgwMCkNCjwgQUNMIERhdGEg
VFg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMCBkbGVuIDkgICAgICAgICAgICAgICAgICAgIFtoY2kw
XSA1MC43MDgxMDANCiAgICAgIEFUVDogRXJyb3IgUmVzcG9uc2UgKDB4MDEpIGxlbiA0DQogICAg
ICAgIFJlYWQgQnkgR3JvdXAgVHlwZSBSZXF1ZXN0ICgweDEwKQ0KICAgICAgICBIYW5kbGU6IDB4
MDAwYQ0KICAgICAgICBFcnJvcjogQXR0cmlidXRlIE5vdCBGb3VuZCAoMHgwYSkNCj4gSENJIEV2
ZW50OiBOdW1iZXIgb2YgQ29tcGxldGVkIFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFto
Y2kwXSA1MC43MDgyMzcNCiAgICAgICAgTnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAx
MjgNCiAgICAgICAgQ291bnQ6IDENCj4gSENJIEV2ZW50OiBOdW1iZXIgb2YgQ29tcGxldGVkIFBh
Y2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFtoY2kwXSA1MC43MDg3ODINCiAgICAgICAgTnVt
IGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAgICAgQ291bnQ6IDENCj4gQUNM
IERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMiBkbGVuIDIxICAgICAgICAgICAgICAgICAg
IFtoY2kwXSA1MC43NzUzMjgNCiAgICAgIFNNUDogUGFpcmluZyBSYW5kb20gKDB4MDQpIGxlbiAx
Ng0KICAgICAgICBSYW5kb20gdmFsdWU6IGE4NTM1ODhiMGRiZTZhMTMyZTEzYzg1ZWUxNTdhNGNm
DQpAIE1HTVQgRXZlbnQ6IFVzZXIgQ29uZmlybWF0aW9uIFIuLiAoMHgwMDBmKSBwbGVuIDEyICB7
MHgwMDAyfSBbaGNpMF0gNTAuNzc1NDYwDQogICAgICAgIExFIEFkZHJlc3M6IDc0OkM2OjNCOkFC
OjY4OkUwIChPVUkgNzQtQzYtM0IpDQogICAgICAgIENvbmZpcm0gaGludDogMHgwMA0KICAgICAg
ICBWYWx1ZTogMHgwMDA1OTkwNQ0KQCBNR01UIEV2ZW50OiBVc2VyIENvbmZpcm1hdGlvbiBSLi4g
KDB4MDAwZikgcGxlbiAxMiAgezB4MDAwMX0gW2hjaTBdIDUwLjc3NTQ2MA0KICAgICAgICBMRSBB
ZGRyZXNzOiA3NDpDNjozQjpBQjo2ODpFMCAoT1VJIDc0LUM2LTNCKQ0KICAgICAgICBDb25maXJt
IGhpbnQ6IDB4MDANCiAgICAgICAgVmFsdWU6IDB4MDAwNTk5MDUNCj4gSENJIEV2ZW50OiBOdW1i
ZXIgb2YgQ29tcGxldGVkIFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFtoY2kwXSA1MC43
NzU2MDANCiAgICAgICAgTnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAg
ICAgQ291bnQ6IDENCj4gQUNMIERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMiBkbGVuIDkg
ICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1MC43NzU4ODkNCiAgICAgIEFUVDogRXJyb3IgUmVz
cG9uc2UgKDB4MDEpIGxlbiA0DQogICAgICAgIFJlYWQgQnkgR3JvdXAgVHlwZSBSZXF1ZXN0ICgw
eDEwKQ0KICAgICAgICBIYW5kbGU6IDB4MDAwYQ0KICAgICAgICBFcnJvcjogQXR0cmlidXRlIE5v
dCBGb3VuZCAoMHgwYSkNCjwgQUNMIERhdGEgVFg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMCBkbGVu
IDkgICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1MC44MTc2MzQNCiAgICAgIEFUVDogV3JpdGUg
UmVxdWVzdCAoMHgxMikgbGVuIDQNCiAgICAgICAgSGFuZGxlOiAweDAwMDkNCiAgICAgICAgICBE
YXRhOiAwMjAwDQo+IEhDSSBFdmVudDogTnVtYmVyIG9mIENvbXBsZXRlZCBQYWNrZXRzICgweDEz
KSBwbGVuIDUgICAgICAgICBbaGNpMF0gNTAuODQyODQzDQogICAgICAgIE51bSBoYW5kbGVzOiAx
DQogICAgICAgIEhhbmRsZTogMTI4DQogICAgICAgIENvdW50OiAxDQo+IEFDTCBEYXRhIFJYOiBI
YW5kbGUgMTI4IGZsYWdzIDB4MDIgZGxlbiA1ICAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTAu
OTc4ODYxDQogICAgICBBVFQ6IFdyaXRlIFJlc3BvbnNlICgweDEzKSBsZW4gMA0KPCBBQ0wgRGF0
YSBUWDogSGFuZGxlIDEyOCBmbGFncyAweDAwIGRsZW4gNyAgICAgICAgICAgICAgICAgICAgW2hj
aTBdIDUwLjk3OTI4NA0KICAgICAgQVRUOiBSZWFkIFJlcXVlc3QgKDB4MGEpIGxlbiAyDQogICAg
ICAgIEhhbmRsZTogMHgwMDAzDQo+IEFDTCBEYXRhIFJYOiBIYW5kbGUgMTI4IGZsYWdzIDB4MDIg
ZGxlbiA5ICAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTAuOTc5NDA2DQogICAgICBBVFQ6IFdy
aXRlIFJlcXVlc3QgKDB4MTIpIGxlbiA0DQogICAgICAgIEhhbmRsZTogMHgwMDA5DQogICAgICAg
ICAgRGF0YTogMDIwMA0KPCBBQ0wgRGF0YSBUWDogSGFuZGxlIDEyOCBmbGFncyAweDAwIGRsZW4g
NSAgICAgICAgICAgICAgICAgICAgW2hjaTBdIDUwLjk3OTg1OQ0KICAgICAgQVRUOiBXcml0ZSBS
ZXNwb25zZSAoMHgxMykgbGVuIDANCj4gSENJIEV2ZW50OiBOdW1iZXIgb2YgQ29tcGxldGVkIFBh
Y2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFtoY2kwXSA1MS4wNDUxOTINCiAgICAgICAgTnVt
IGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAgICAgQ291bnQ6IDENCj4gSENJ
IEV2ZW50OiBOdW1iZXIgb2YgQ29tcGxldGVkIFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAg
IFtoY2kwXSA1MS4wNDU2NzANCiAgICAgICAgTnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxl
OiAxMjgNCiAgICAgICAgQ291bnQ6IDENCj4gQUNMIERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3Mg
MHgwMiBkbGVuIDIwICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1MS4xMTQwMzcNCiAgICAgIEFU
VDogUmVhZCBSZXNwb25zZSAoMHgwYikgbGVuIDE1DQogICAgICAgIFZhbHVlOiA2OTZlNzQ2NTZj
MmQ2MzZmNzI2NTY5MzcyZDM2MzQNCjwgQUNMIERhdGEgVFg6IEhhbmRsZSAxMjggZmxhZ3MgMHgw
MCBkbGVuIDcgICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1MS4xMTQ1MjkNCiAgICAgIEFUVDog
UmVhZCBSZXF1ZXN0ICgweDBhKSBsZW4gMg0KICAgICAgICBIYW5kbGU6IDB4MDAwNQ0KPiBBQ0wg
RGF0YSBSWDogSGFuZGxlIDEyOCBmbGFncyAweDAyIGRsZW4gNyAgICAgICAgICAgICAgICAgICAg
W2hjaTBdIDUxLjExNjc1NQ0KICAgICAgQVRUOiBSZWFkIFJlcXVlc3QgKDB4MGEpIGxlbiAyDQog
ICAgICAgIEhhbmRsZTogMHgwMDAzDQo8IEFDTCBEYXRhIFRYOiBIYW5kbGUgMTI4IGZsYWdzIDB4
MDAgZGxlbiAyMCAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTEuMTQzNjU5DQogICAgICBBVFQ6
IFJlYWQgUmVzcG9uc2UgKDB4MGIpIGxlbiAxNQ0KICAgICAgICBWYWx1ZTogNjk2ZTc0NjU2YzJk
NjM2ZjcyNjU2OTM3MmQzNjM0DQo+IEhDSSBFdmVudDogTnVtYmVyIG9mIENvbXBsZXRlZCBQYWNr
ZXRzICgweDEzKSBwbGVuIDUgICAgICAgICBbaGNpMF0gNTEuMTgwMzgzDQogICAgICAgIE51bSBo
YW5kbGVzOiAxDQogICAgICAgIEhhbmRsZTogMTI4DQogICAgICAgIENvdW50OiAxDQo+IEhDSSBF
dmVudDogTnVtYmVyIG9mIENvbXBsZXRlZCBQYWNrZXRzICgweDEzKSBwbGVuIDUgICAgICAgICBb
aGNpMF0gNTEuMTgwNzE2DQogICAgICAgIE51bSBoYW5kbGVzOiAxDQogICAgICAgIEhhbmRsZTog
MTI4DQogICAgICAgIENvdW50OiAxDQo+IEFDTCBEYXRhIFJYOiBIYW5kbGUgMTI4IGZsYWdzIDB4
MDIgZGxlbiA3ICAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTEuMjQ4ODgwDQogICAgICBBVFQ6
IFJlYWQgUmVzcG9uc2UgKDB4MGIpIGxlbiAyDQogICAgICAgIFZhbHVlOiAwMDAwDQo+IEFDTCBE
YXRhIFJYOiBIYW5kbGUgMTI4IGZsYWdzIDB4MDIgZGxlbiA3ICAgICAgICAgICAgICAgICAgICBb
aGNpMF0gNTEuMjQ5MzY0DQogICAgICBBVFQ6IFJlYWQgUmVxdWVzdCAoMHgwYSkgbGVuIDINCiAg
ICAgICAgSGFuZGxlOiAweDAwMDUNCjwgQUNMIERhdGEgVFg6IEhhbmRsZSAxMjggZmxhZ3MgMHgw
MCBkbGVuIDcgICAgICAgICAgICAgICAgICAgIFtoY2kwXSA1MS4yNDk4MDANCiAgICAgIEFUVDog
UmVhZCBSZXNwb25zZSAoMHgwYikgbGVuIDINCiAgICAgICAgVmFsdWU6IDAwMDANCj4gSENJIEV2
ZW50OiBOdW1iZXIgb2YgQ29tcGxldGVkIFBhY2tldHMgKDB4MTMpIHBsZW4gNSAgICAgICAgIFto
Y2kwXSA1MS4zMTUzNjUNCiAgICAgICAgTnVtIGhhbmRsZXM6IDENCiAgICAgICAgSGFuZGxlOiAx
MjgNCiAgICAgICAgQ291bnQ6IDENCkAgTUdNVCBDb21tYW5kOiBVc2VyIENvbmZpcm1hdGlvbi4u
LiAoMHgwMDFjKSBwbGVuIDcgIHsweDAwMDF9IFtoY2kwXSA1Mi45NDk3NDMNCiAgICAgICAgTEUg
QWRkcmVzczogNzQ6QzY6M0I6QUI6Njg6RTAgKE9VSSA3NC1DNi0zQikNCkAgTUdNVCBFdmVudDog
Q29tbWFuZCBDb21wbGV0ZSAoMHgwMDAxKSBwbGVuIDEwICAgICAgIHsweDAwMDF9IFtoY2kwXSA1
Mi45NDk4NDENCiAgICAgIFVzZXIgQ29uZmlybWF0aW9uIFJlcGx5ICgweDAwMWMpIHBsZW4gNw0K
ICAgICAgICBTdGF0dXM6IFN1Y2Nlc3MgKDB4MDApDQogICAgICAgIExFIEFkZHJlc3M6IDc0OkM2
OjNCOkFCOjY4OkUwIChPVUkgNzQtQzYtM0IpDQo8IEFDTCBEYXRhIFRYOiBIYW5kbGUgMTI4IGZs
YWdzIDB4MDAgZGxlbiAyMSAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTIuOTQ5ODU1DQogICAg
ICBTTVA6IFBhaXJpbmcgREhLZXkgQ2hlY2sgKDB4MGQpIGxlbiAxNg0KICAgICAgICBFOiBjZWU4
YjBlNTQ1NDg4ZDAyMjRhNzc3NTk0ODQwYzQ1YQ0KPiBIQ0kgRXZlbnQ6IE51bWJlciBvZiBDb21w
bGV0ZWQgUGFja2V0cyAoMHgxMykgcGxlbiA1ICAgICAgICAgW2hjaTBdIDUzLjAwMjgwNg0KICAg
ICAgICBOdW0gaGFuZGxlczogMQ0KICAgICAgICBIYW5kbGU6IDEyOA0KICAgICAgICBDb3VudDog
MQ0KPiBBQ0wgRGF0YSBSWDogSGFuZGxlIDEyOCBmbGFncyAweDAyIGRsZW4gMjEgICAgICAgICAg
ICAgICAgICAgW2hjaTBdIDU1LjIzMDQ0NQ0KICAgICAgU01QOiBQYWlyaW5nIERIS2V5IENoZWNr
ICgweDBkKSBsZW4gMTYNCiAgICAgICAgRTogOTZkY2ZjNmNjMWY3Njk3NGMzZGM2NzRmZWViOTk4
M2INCjwgSENJIENvbW1hbmQ6IExFIFN0YXJ0IEVuY3J5cHRpb24gKDB4MDh8MHgwMDE5KSBwbGVu
IDI4ICAgICAgIFtoY2kwXSA1NS4yMzA1NDgNCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAgICAg
UmFuZG9tIG51bWJlcjogMHgwMDAwMDAwMDAwMDAwMDAwDQogICAgICAgIEVuY3J5cHRlZCBkaXZl
cnNpZmllcjogMHgwMDAwDQogICAgICAgIExvbmcgdGVybSBrZXk6IDBlMDExNDJiZTlkZGFiOWU2
ZTZjZWY1NDU1NjJhZGM0DQo+IEhDSSBFdmVudDogQ29tbWFuZCBTdGF0dXMgKDB4MGYpIHBsZW4g
NCAgICAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTUuMjM0NDY4DQogICAgICBMRSBTdGFydCBF
bmNyeXB0aW9uICgweDA4fDB4MDAxOSkgbmNtZCAxDQogICAgICAgIFN0YXR1czogU3VjY2VzcyAo
MHgwMCkNCj4gQUNMIERhdGEgUlg6IEhhbmRsZSAxMjggZmxhZ3MgMHgwMiBkbGVuIDIxICAgICAg
ICAgICAgICAgICAgIFtoY2kwXSA1NS41MDA1NjkNCiAgICAgIFNNUDogU2lnbmluZyBJbmZvcm1h
dGlvbiAoMHgwYSkgbGVuIDE2DQogICAgICAgIFNpZ25hdHVyZSBrZXk6IDFkOTE2ZDU5NTE3OTFh
MjcxNDE2YTE2MWNkYTk4MWQ2DQo+IEhDSSBFdmVudDogRW5jcnlwdGlvbiBDaGFuZ2UgKDB4MDgp
IHBsZW4gNCAgICAgICAgICAgICAgICAgICBbaGNpMF0gNTUuNTEzODM2DQogICAgICAgIFN0YXR1
czogU3VjY2VzcyAoMHgwMCkNCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAgICAgRW5jcnlwdGlv
bjogRW5hYmxlZCB3aXRoIEFFUy1DQ00gKDB4MDEpDQo+IEhDSSBFdmVudDogRGlzY29ubmVjdCBD
b21wbGV0ZSAoMHgwNSkgcGxlbiA0ICAgICAgICAgICAgICAgICBbaGNpMF0gODUuODExMTg5DQog
ICAgICAgIFN0YXR1czogU3VjY2VzcyAoMHgwMCkNCiAgICAgICAgSGFuZGxlOiAxMjgNCiAgICAg
ICAgUmVhc29uOiBSZW1vdGUgVXNlciBUZXJtaW5hdGVkIENvbm5lY3Rpb24gKDB4MTMpDQpAIE1H
TVQgRXZlbnQ6IERldmljZSBEaXNjb25uZWN0ZWQgKDB4MDAwYykgcGxlbiA4ICAgICB7MHgwMDAy
fSBbaGNpMF0gODUuODExMjU2DQogICAgICAgIExFIEFkZHJlc3M6IDc0OkM2OjNCOkFCOjY4OkUw
IChPVUkgNzQtQzYtM0IpDQogICAgICAgIFJlYXNvbjogQ29ubmVjdGlvbiB0ZXJtaW5hdGVkIGJ5
IHJlbW90ZSBob3N0ICgweDAzKQ0KQCBNR01UIEV2ZW50OiBEZXZpY2UgRGlzY29ubmVjdGVkICgw
eDAwMGMpIHBsZW4gOCAgICAgezB4MDAwMX0gW2hjaTBdIDg1LjgxMTI1Ng0KICAgICAgICBMRSBB
ZGRyZXNzOiA3NDpDNjozQjpBQjo2ODpFMCAoT1VJIDc0LUM2LTNCKQ0KICAgICAgICBSZWFzb246
IENvbm5lY3Rpb24gdGVybWluYXRlZCBieSByZW1vdGUgaG9zdCAoMHgwMykNCkAgTUdNVCBFdmVu
dDogQ29tbWFuZCBDb21wbGV0ZSAoMHgwMDAxKSBwbGVuIDEwICAgICAgIHsweDAwMDF9IFtoY2kw
XSA4NS44MTEyOTMNCiAgICAgIFBhaXIgRGV2aWNlICgweDAwMTkpIHBsZW4gNw0KICAgICAgICBT
dGF0dXM6IEZhaWxlZCAoMHgwMykNCiAgICAgICAgTEUgQWRkcmVzczogNzQ6QzY6M0I6QUI6Njg6
RTAgKE9VSSA3NC1DNi0zQikNCg0KQXMgb2JzZXJ2ZWQgZnJvbSBhYm92ZSwgdGhlIHN0YXR1cyBz
aG93ZWQgIkZhaWxlZCAoMHgwMykiIGZvciB0aGUgcGFpcmluZy4NCg0KV2hlbiBJIHBlcmZvcm1l
ZCB0aGUgTEUgcGFpcmluZyB3aXRoIHRoZSBtYXN0ZXIgSU8gY2FwYWJpbGl0eSBzZXQgYXMgS2V5
Ym9hcmREaXNwbGF5IGFuZCB0aGUgc2xhdmUgSU8gY2FwYWJpbGl0eSBzZXQgYXMgTm9JbnB1dE5v
T3V0cHV0LCB0aGUgTEUgcGFpcmluZyBpcyBzdWNjZXNzZnVsLiBJdCB1c2VzIExFIFNlY3VyZSBD
b25uZWN0aW9ucyBpLmUuICJVbmF1dGhlbnRpY2F0ZWQga2V5IGZyb20gUC0yNTYiLg0KVGhlIGV4
Y2VycHQgb2YgdGhlIGxvZyBmb3IgdGhlIHBhaXJpbmcgdGhhdCBzaG93cyBpdCBpcyBzdWNjZXNz
ZnVsIGlzIGFzIGZvbGxvd3M6DQoNCkAgTUdNVCBFdmVudDogTmV3IExvbmcgVGVybSBLZXkgKDB4
MDAwYSkgcGxlbiAzNyAgICAgezB4MDAwMn0gW2hjaTBdIDE3MS41ODE0MTcNCiAgICAgICAgU3Rv
cmUgaGludDogWWVzICgweDAxKQ0KICAgICAgICBMRSBBZGRyZXNzOiA3NDpDNjozQjpBQjo2ODpF
MCAoT1VJIDc0LUM2LTNCKQ0KICAgICAgICBLZXkgdHlwZTogVW5hdXRoZW50aWNhdGVkIGtleSBm
cm9tIFAtMjU2ICgweDAyKQ0KICAgICAgICBNYXN0ZXI6IDB4MDANCiAgICAgICAgRW5jcnlwdGlv
biBzaXplOiAxNg0KICAgICAgICBEaXZlcnNpZmllcjogMDAwMA0KICAgICAgICBSYW5kb21pemVy
OiAwMDAwMDAwMDAwMDAwMDAwDQogICAgICAgIEtleTogYTllMGYzZjgwYmQ5OWRmMGMyMjM5ZWE0
ODk1MTIxOWYNCkAgTUdNVCBFdmVudDogTmV3IExvbmcgVGVybSBLZXkgKDB4MDAwYSkgcGxlbiAz
NyAgICAgezB4MDAwMX0gW2hjaTBdIDE3MS41ODE0MTcNCiAgICAgICAgU3RvcmUgaGludDogWWVz
ICgweDAxKQ0KICAgICAgICBMRSBBZGRyZXNzOiA3NDpDNjozQjpBQjo2ODpFMCAoT1VJIDc0LUM2
LTNCKQ0KICAgICAgICBLZXkgdHlwZTogVW5hdXRoZW50aWNhdGVkIGtleSBmcm9tIFAtMjU2ICgw
eDAyKQ0KICAgICAgICBNYXN0ZXI6IDB4MDANCiAgICAgICAgRW5jcnlwdGlvbiBzaXplOiAxNg0K
ICAgICAgICBEaXZlcnNpZmllcjogMDAwMA0KICAgICAgICBSYW5kb21pemVyOiAwMDAwMDAwMDAw
MDAwMDAwDQogICAgICAgIEtleTogYTllMGYzZjgwYmQ5OWRmMGMyMjM5ZWE0ODk1MTIxOWYNCkAg
TUdNVCBFdmVudDogQ29tbWFuZCBDb21wbGV0ZSAoMHgwMDAxKSBwbGVuIDEwICAgICAgezB4MDAw
MX0gW2hjaTBdIDE3MS41ODE0MjcNCiAgICAgIFBhaXIgRGV2aWNlICgweDAwMTkpIHBsZW4gNw0K
ICAgICAgICBTdGF0dXM6IFN1Y2Nlc3MgKDB4MDApDQogICAgICAgIExFIEFkZHJlc3M6IDc0OkM2
OjNCOkFCOjY4OkUwIChPVUkgNzQtQzYtM0IpDQo8IEFDTCBEYXRhIFRYOiBIYW5kbGUgMTI4IGZs
YWdzIDB4MDAgZGxlbiAyMSAgICAgICAgICAgICAgICAgIFtoY2kwXSAxNzEuNTgxNDM3DQogICAg
ICBTTVA6IFNpZ25pbmcgSW5mb3JtYXRpb24gKDB4MGEpIGxlbiAxNg0KICAgICAgICBTaWduYXR1
cmUga2V5OiBmYTI3MDc5ZDgwMjRjMTg1OTc0MTM5MWZkZDgzZmI5OQ0KPiBIQ0kgRXZlbnQ6IE51
bWJlciBvZiBDb21wbGV0ZWQgUGFja2V0cyAoMHgxMykgcGxlbiA1ICAgICAgICBbaGNpMF0gMTcx
LjU4MTU5Mw0KICAgICAgICBOdW0gaGFuZGxlczogMQ0KICAgICAgICBIYW5kbGU6IDEyOA0KICAg
ICAgICBDb3VudDogMQ0KDQpJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRoZSBMRSBwYWlyaW5nIHRv
IGJlIHN1Y2Nlc3NmdWwgb3ZlciBhbGwgSU8gY2FwYWJpbGl0aWVzLg0KDQpUaGFuayB5b3UuDQoN
CkJlc3QgcmVnYXJkcywNCkpvc2h1YQ0KDQo=

^ permalink raw reply

* [PATCH 3/3] Bluetooth: Set LE Default PHY preferences
From: Marcel Holtmann @ 2017-05-02  6:54 UTC (permalink / raw)
  To: linux-bluetooth

If the LE Set Default PHY command is supported, the indicate to the
controller that the host has no preferences for transmitter PHY or
receiver PHY selection.

Issuing this command gives the controller a clear indication that other
PHY can be selected if available.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 include/net/bluetooth/hci.h |  7 +++++++
 net/bluetooth/hci_core.c    | 12 ++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index dd43cfdd443a..fe98f0a5bef0 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -1499,6 +1499,13 @@ struct hci_rp_le_read_max_data_len {
 	__le16	rx_time;
 } __packed;
 
+#define HCI_OP_LE_SET_DEFAULT_PHY	0x2031
+struct hci_cp_le_set_default_phy {
+	__u8    all_phys;
+	__u8    tx_phys;
+	__u8    rx_phys;
+} __packed;
+
 /* ---- HCI Events ---- */
 #define HCI_EV_INQUIRY_COMPLETE		0x01
 
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 88a616a2b959..43fecd59dfef 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -794,6 +794,18 @@ static int hci_init4_req(struct hci_request *req, unsigned long opt)
 		hci_req_add(req, HCI_OP_LE_WRITE_DEF_DATA_LEN, sizeof(cp), &cp);
 	}
 
+	/* Set Default PHY parameters if command is supported */
+	if (hdev->commands[35] & 0x20) {
+		struct hci_cp_le_set_default_phy cp;
+
+		/* No transmitter PHY or receiver PHY preferences */
+		cp.all_phys = 0x03;
+		cp.tx_phys = 0;
+		cp.rx_phys = 0;
+
+		hci_req_add(req, HCI_OP_LE_SET_DEFAULT_PHY, sizeof(cp), &cp);
+	}
+
 	return 0;
 }
 
-- 
2.9.3


^ permalink raw reply related

* [PATCH 2/3] Bluetooth: Enable LE PHY Update Complete event
From: Marcel Holtmann @ 2017-05-02  6:54 UTC (permalink / raw)
  To: linux-bluetooth

If either LE Set Default PHY command or LE Set PHY commands is
supported, then enable the LE PHY Update Complete event.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 net/bluetooth/hci_core.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index e58b9034afff..88a616a2b959 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -685,6 +685,12 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt)
 		if (hdev->commands[34] & 0x04)
 			events[1] |= 0x01;	/* LE Generate DHKey Complete */
 
+		/* If the controller supports the LE Set Default PHY or
+		 * LE Set PHY commands, enable the corresponding event.
+		 */
+		if (hdev->commands[35] & (0x20 | 0x40))
+			events[1] |= 0x08;        /* LE PHY Update Complete */
+
 		hci_req_add(req, HCI_OP_LE_SET_EVENT_MASK, sizeof(events),
 			    events);
 
-- 
2.9.3


^ permalink raw reply related

* [PATCH 1/3] Bluetooth: Enable LE Channel Selection Algorithm event
From: Marcel Holtmann @ 2017-05-02  6:54 UTC (permalink / raw)
  To: linux-bluetooth

If the Channel Selection Algorithm #2 feature is supported, then enable
the new LE Channel Selection Algorithm event.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 include/net/bluetooth/hci.h | 1 +
 net/bluetooth/hci_core.c    | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 99aa5e5e3100..dd43cfdd443a 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -399,6 +399,7 @@ enum {
 #define HCI_LE_PING			0x10
 #define HCI_LE_DATA_LEN_EXT		0x20
 #define HCI_LE_EXT_SCAN_POLICY		0x80
+#define HCI_LE_CHAN_SEL_ALG2		0x40
 
 /* Connection modes */
 #define HCI_CM_ACTIVE	0x0000
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 4a0cac774107..e58b9034afff 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -635,6 +635,14 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt)
 						 * Report
 						 */
 
+		/* If the controller supports Channel Selection Algorithm #2
+		 * feature, enable the corresponding event.
+		 */
+		if (hdev->le_features[1] & HCI_LE_CHAN_SEL_ALG2)
+			events[2] |= 0x08;	/* LE Channel Selection
+						 * Algorithm
+						 */
+
 		/* If the controller supports the LE Set Scan Enable command,
 		 * enable the corresponding advertising report event.
 		 */
-- 
2.9.3


^ permalink raw reply related

* [PATCH] Bluetooth: Set LE Suggested Default Data Length to maximum
From: Marcel Holtmann @ 2017-05-02  4:43 UTC (permalink / raw)
  To: linux-bluetooth

When LE Data Packet Length Extension is supported, then actually
increase the suggested default data length to the maximum to enable
higher througput.

< HCI Command: LE Read Maximum Data Length (0x08|0x002f) plen 0
> HCI Event: Command Complete (0x0e) plen 12
      LE Read Maximum Data Length (0x08|0x002f) ncmd 1
        Status: Success (0x00)
        Max TX octets: 251
        Max TX time: 2120
        Max RX octets: 251
        Max RX time: 2120

< HCI Command: LE Read Suggested Default Data Length (0x08|0x0023) plen 0
> HCI Event: Command Complete (0x0e) plen 8
      LE Read Suggested Default Data Length (0x08|0x0023) ncmd 1
        Status: Success (0x00)
        TX octets: 27
        TX time: 328

< HCI Command: LE Write Suggested Default Data Length (0x08|0x0024) plen 4
        TX octets: 251
        TX time: 2120
> HCI Event: Command Complete (0x0e) plen 4
      LE Write Suggested Default Data Length (0x08|0x0024) ncmd 1
        Status: Success (0x00)

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 net/bluetooth/hci_core.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 05686776a5fb..4a0cac774107 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -771,6 +771,15 @@ static int hci_init4_req(struct hci_request *req, unsigned long opt)
 			    sizeof(support), &support);
 	}
 
+	/* Set Suggested Default Data Length to maximum if supported */
+	if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) {
+		struct hci_cp_le_write_def_data_len cp;
+
+		cp.tx_len = hdev->le_max_tx_len;
+		cp.tx_time = hdev->le_max_tx_time;
+		hci_req_add(req, HCI_OP_LE_WRITE_DEF_DATA_LEN, sizeof(cp), &cp);
+	}
+
 	return 0;
 }
 
-- 
2.9.3


^ permalink raw reply related

* Re: [PATCH] Bluetooth: Add support for Intel Bluetooth device 9460/9560 [8087:0aaa]
From: Marcel Holtmann @ 2017-05-02  3:08 UTC (permalink / raw)
  To: Tedd Ho-Jeong An; +Cc: linux-bluetooth@vger.kernel.org, jaya.p.g
In-Reply-To: <20170501133512.6fc88b81@fedora-linux-22.shared>

Hi Tedd,

> This patch adds support for Intel Bluetooth device 9460/9560 also known
> as Jefferson Peak (JfP). The firmware downloading mechanism is same as
> previous generation. So include the new USB product identifier and
> whitelist the hardware variant.
> 
> T:  Bus=01 Lev=01 Prnt=01 Port=09 Cnt=04 Dev#=  5 Spd=12   MxCh= 0
> D:  Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
> P:  Vendor=8087 ProdID=0aaa Rev= 0.02
> C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
> I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=1ms
> E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
> I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
> E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
> I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
> E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
> I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
> I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
> I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
> I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
> I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
> 
> Bootloader version:
> < HCI Command: Intel Read Version (0x3f|0x0005) plen 0
>> HCI Event: Command Complete (0x0e) plen 13
>      Intel Read Version (0x3f|0x0005) ncmd 32
>        Status: Success (0x00)
>        Hardware platform: 0x37
>        Hardware variant: 0x11
>        Hardware revision: 0.0
>        Firmware variant: 0x06
>        Firmware revision: 0.1
>        Firmware build: 42-52.2015
>        Firmware patch: 0
> 
> Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
> ---
> drivers/bluetooth/btusb.c | 4 ++++
> 1 file changed, 4 insertions(+)

patch has been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply

* [PATCH] Bluetooth: Add support for Intel Bluetooth device 9460/9560 [8087:0aaa]
From: Tedd Ho-Jeong An @ 2017-05-01 20:35 UTC (permalink / raw)
  To: linux-bluetooth@vger.kernel.org; +Cc: jaya.p.g, Tedd Ho-Jeong An

From: Tedd Ho-Jeong An <tedd.an@intel.com>

This patch adds support for Intel Bluetooth device 9460/9560 also known
as Jefferson Peak (JfP). The firmware downloading mechanism is same as
previous generation. So include the new USB product identifier and
whitelist the hardware variant.

T:  Bus=01 Lev=01 Prnt=01 Port=09 Cnt=04 Dev#=  5 Spd=12   MxCh= 0
D:  Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=8087 ProdID=0aaa Rev= 0.02
C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=1ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms

Bootloader version:
< HCI Command: Intel Read Version (0x3f|0x0005) plen 0
> HCI Event: Command Complete (0x0e) plen 13
      Intel Read Version (0x3f|0x0005) ncmd 32
        Status: Success (0x00)
        Hardware platform: 0x37
        Hardware variant: 0x11
        Hardware revision: 0.0
        Firmware variant: 0x06
        Firmware revision: 0.1
        Firmware build: 42-52.2015
        Firmware patch: 0

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
---
 drivers/bluetooth/btusb.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 7fa373b..278e811 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -336,6 +336,7 @@ static const struct usb_device_id blacklist_table[] = {
 	{ USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL },
 	{ USB_DEVICE(0x8087, 0x0a2b), .driver_info = BTUSB_INTEL_NEW },
 	{ USB_DEVICE(0x8087, 0x0aa7), .driver_info = BTUSB_INTEL },
+	{ USB_DEVICE(0x8087, 0x0aaa), .driver_info = BTUSB_INTEL_NEW },
 
 	/* Other Intel Bluetooth devices */
 	{ USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01),
@@ -2036,6 +2037,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
 	switch (ver.hw_variant) {
 	case 0x0b:	/* SfP */
 	case 0x0c:	/* WsP */
+	case 0x11:	/* JfP */
 	case 0x12:	/* ThP */
 		break;
 	default:
@@ -2138,6 +2140,8 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
 	 * Currently the supported hardware variants are:
 	 *   11 (0x0b) for iBT3.0 (LnP/SfP)
 	 *   12 (0x0c) for iBT3.5 (WsP)
+	 *   17 (0x11) for iBT3.5 (JfP)
+	 *   18 (0x12) for iBT3.5 (ThP)
 	 */
 	snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
 		 le16_to_cpu(ver.hw_variant),
-- 
2.4.11


^ permalink raw reply related

* Re: pull request: bluetooth-next 2017-04-30
From: Johan Hedberg @ 2017-05-01 19:21 UTC (permalink / raw)
  To: David Miller; +Cc: linux-bluetooth, netdev
In-Reply-To: <20170501.145019.1619484787513762409.davem@davemloft.net>

On Mon, May 01, 2017, David Miller wrote:
> From: Johan Hedberg <johan.hedberg@gmail.com>
> Date: Mon, 1 May 2017 21:42:21 +0300
> 
> > Hi Dave,
> > 
> > On Sun, Apr 30, 2017, David Miller wrote:
> >> From: Johan Hedberg <johan.hedberg@gmail.com>
> >> Date: Sun, 30 Apr 2017 17:09:28 +0300
> >> 
> >> > Here's one last batch of Bluetooth patches in the bluetooth-next tree
> >> > targeting the 4.12 kernel.
> >> > 
> >> >  - Remove custom ECDH implementation and use new KPP API instead
> >> >  - Add protocol checks to hci_ldisc
> >> >  - Add module license to HCI UART Nokia H4+ driver
> >> >  - Minor fix for 32bit user space - 64 bit kernel combination
> >> > 
> >> > Please let me know if there are any issues pulling. Thanks.
> >> 
> >> Pulled, thanks Johan.
> > 
> > Thanks, however I don't see the patches in net-next yet. I have seen
> > other patches go in there since your response though. Cause for concern?
> 
> Shuld be there now.

Looks good now. Thanks.

Johan

^ permalink raw reply

* Re: pull request: bluetooth-next 2017-04-30
From: David Miller @ 2017-05-01 18:50 UTC (permalink / raw)
  To: johan.hedberg; +Cc: linux-bluetooth, netdev
In-Reply-To: <20170501184221.GA2093@x1c>

From: Johan Hedberg <johan.hedberg@gmail.com>
Date: Mon, 1 May 2017 21:42:21 +0300

> Hi Dave,
> 
> On Sun, Apr 30, 2017, David Miller wrote:
>> From: Johan Hedberg <johan.hedberg@gmail.com>
>> Date: Sun, 30 Apr 2017 17:09:28 +0300
>> 
>> > Here's one last batch of Bluetooth patches in the bluetooth-next tree
>> > targeting the 4.12 kernel.
>> > 
>> >  - Remove custom ECDH implementation and use new KPP API instead
>> >  - Add protocol checks to hci_ldisc
>> >  - Add module license to HCI UART Nokia H4+ driver
>> >  - Minor fix for 32bit user space - 64 bit kernel combination
>> > 
>> > Please let me know if there are any issues pulling. Thanks.
>> 
>> Pulled, thanks Johan.
> 
> Thanks, however I don't see the patches in net-next yet. I have seen
> other patches go in there since your response though. Cause for concern?

Shuld be there now.

^ permalink raw reply

* Re: pull request: bluetooth-next 2017-04-30
From: Johan Hedberg @ 2017-05-01 18:42 UTC (permalink / raw)
  To: David Miller; +Cc: linux-bluetooth, netdev
In-Reply-To: <20170430.230336.142225761153252889.davem@davemloft.net>

Hi Dave,

On Sun, Apr 30, 2017, David Miller wrote:
> From: Johan Hedberg <johan.hedberg@gmail.com>
> Date: Sun, 30 Apr 2017 17:09:28 +0300
> 
> > Here's one last batch of Bluetooth patches in the bluetooth-next tree
> > targeting the 4.12 kernel.
> > 
> >  - Remove custom ECDH implementation and use new KPP API instead
> >  - Add protocol checks to hci_ldisc
> >  - Add module license to HCI UART Nokia H4+ driver
> >  - Minor fix for 32bit user space - 64 bit kernel combination
> > 
> > Please let me know if there are any issues pulling. Thanks.
> 
> Pulled, thanks Johan.

Thanks, however I don't see the patches in net-next yet. I have seen
other patches go in there since your response though. Cause for concern?

Johan

^ permalink raw reply

* [PATCH v2 3/3] unit/test-gatt: Add test for unknown request
From: Luiz Augusto von Dentz @ 2017-05-01 15:57 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <20170501155700.23761-1-luiz.dentz@gmail.com>

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This send an unknown command (0xff) to test that no response is sent
since the spec mandates the server to not respond to commands:

BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part F page 2179

  'If a server receives a command that it does not support, indicated
  by the Command Flag of the PDU set to one, then the server shall
  ignore the Command.'
---
 unit/test-gatt.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/unit/test-gatt.c b/unit/test-gatt.c
index 371cb46..e0d29c7 100644
--- a/unit/test-gatt.c
+++ b/unit/test-gatt.c
@@ -90,6 +90,11 @@ struct context {
 		.size = sizeof(data(args)),			\
 	}
 
+#define false_pdu()						\
+	{							\
+		.valid = false,					\
+	}
+
 #define define_test(name, function, type, bt_uuid, db,			\
 		test_step, args...)					\
 	do {								\
@@ -403,6 +408,13 @@ static gboolean send_pdu(gpointer user_data)
 	if (pdu->valid && (pdu->size == 0)) {
 		test_debug("(no action expected)", "GATT: ");
 		context->pdu_offset++;
+
+		/* Quit the context if we processed the last PDU */
+		if (!context->data->pdu_list[context->pdu_offset].valid) {
+			context_quit(context);
+			return FALSE;
+		}
+
 		return send_pdu(context);
 	}
 
@@ -4467,5 +4479,11 @@ int main(int argc, char *argv[])
 			raw_pdu(0xbf, 0x00),
 			raw_pdu(0x01, 0xbf, 0x00, 0x00, 0x06));
 
+	define_test_server("/robustness/unkown-command",
+			test_server, service_db_1, NULL,
+			raw_pdu(0x03, 0x00, 0x02),
+			raw_pdu(0xff, 0x00),
+			raw_pdu());
+
 	return tester_run();
 }
-- 
2.9.3


^ permalink raw reply related

* [PATCH v2 2/3] unit/test-gatt: Add test for unknown request
From: Luiz Augusto von Dentz @ 2017-05-01 15:56 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <20170501155700.23761-1-luiz.dentz@gmail.com>

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This send an unknown request (0xbf) to test if a response is sent since
the spec mandates the server to always respond to all requests it
receives:

BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part F page 2173

  'A client may send attribute protocol requests to a server, and the
  server shall respond to all requests that it receives.'
---
 unit/test-gatt.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/unit/test-gatt.c b/unit/test-gatt.c
index c7a8fa5..371cb46 100644
--- a/unit/test-gatt.c
+++ b/unit/test-gatt.c
@@ -4461,5 +4461,11 @@ int main(int argc, char *argv[])
 			raw_pdu(0x18, 0x01),
 			raw_pdu(0x01, 0x18, 0x25, 0x00, 0x06));
 
+	define_test_server("/robustness/unkown-request",
+			test_server, service_db_1, NULL,
+			raw_pdu(0x03, 0x00, 0x02),
+			raw_pdu(0xbf, 0x00),
+			raw_pdu(0x01, 0xbf, 0x00, 0x00, 0x06));
+
 	return tester_run();
 }
-- 
2.9.3


^ permalink raw reply related

* [PATCH v2 1/3] shared/att: Respond to any opcode that is not command
From: Luiz Augusto von Dentz @ 2017-05-01 15:56 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Although get_op_type does now check for the command mask it must
respond to anything other than ATT_OP_TYPE_CMD since there is no mask
for response opcode.
---
 src/shared/att.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/shared/att.c b/src/shared/att.c
index 494b10d..ca2d051 100644
--- a/src/shared/att.c
+++ b/src/shared/att.c
@@ -149,7 +149,7 @@ static enum att_op_type get_op_type(uint8_t opcode)
 	}
 
 	if (opcode & ATT_OP_CMD_MASK)
-		return ATT_OP_CMD_MASK;
+		return ATT_OP_TYPE_CMD;
 
 	return ATT_OP_TYPE_UNKNOWN;
 }
@@ -841,10 +841,10 @@ static void handle_notify(struct bt_att *att, uint8_t opcode, uint8_t *pdu,
 	}
 
 	/*
-	 * If this was a request and no handler was registered for it, respond
-	 * with "Not Supported"
+	 * If this was not a command and no handler was registered for it,
+	 * respond with "Not Supported"
 	 */
-	if (!found && get_op_type(opcode) == ATT_OP_TYPE_REQ)
+	if (!found && get_op_type(opcode) != ATT_OP_TYPE_CMD)
 		respond_not_supported(att, opcode);
 
 	bt_att_unref(att);
-- 
2.9.3


^ permalink raw reply related

* Re: pull request: bluetooth-next 2017-04-30
From: David Miller @ 2017-05-01  3:03 UTC (permalink / raw)
  To: johan.hedberg; +Cc: linux-bluetooth, netdev
In-Reply-To: <20170430140928.GA2753@x1c>

From: Johan Hedberg <johan.hedberg@gmail.com>
Date: Sun, 30 Apr 2017 17:09:28 +0300

> Here's one last batch of Bluetooth patches in the bluetooth-next tree
> targeting the 4.12 kernel.
> 
>  - Remove custom ECDH implementation and use new KPP API instead
>  - Add protocol checks to hci_ldisc
>  - Add module license to HCI UART Nokia H4+ driver
>  - Minor fix for 32bit user space - 64 bit kernel combination
> 
> Please let me know if there are any issues pulling. Thanks.

Pulled, thanks Johan.

^ permalink raw reply

* Re: [PATCH 0/4] TI Bluetooth serdev support
From: Sebastian Reichel @ 2017-04-30 16:04 UTC (permalink / raw)
  To: Adam Ford
  Cc: Rob Herring, Marcel Holtmann, linux-bluetooth, Mark Rutland,
	devicetree, Johan Hedberg, Gustavo Padovan, Satish Patel, Wei Xu,
	Eyal Reizer, netdev, linux-arm-kernel
In-Reply-To: <CAHCN7xJUxZm1qKAxT0kaK6qoDg+HWOJK7sTH-q9za4HJuUwe8Q@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1160 bytes --]

Hi,

On Sun, Apr 30, 2017 at 10:14:20AM -0500, Adam Ford wrote:
> On Wed, Apr 5, 2017 at 1:30 PM, Rob Herring <robh@kernel.org> wrote:
> > This series adds serdev support to the HCI LL protocol used on TI BT
> > modules and enables support on HiKey board with with the WL1835 module.
> > With this the custom TI UIM daemon and btattach are no longer needed.
> 
> Without UIM daemon, what instruction do you use to load the BT firmware?
> 
> I was thinking 'hciattach' but I was having trouble.  I was hoping you
> might have some insight.
> 
>  hciattach -t 30 -s 115200 /dev/ttymxc1 texas 3000000 flow  Just
> returns a timeout.
> 
> I modified my i.MX6 device tree per the binding documentation and
> setup the regulators and enable GPIO pins.

If you configured everything correctly no userspace interaction is
required. The driver should request the firmware automatically once
you power up the bluetooth device.

Apart from DT changes make sure, that the following options are
enabled and check dmesg for any hints.

CONFIG_SERIAL_DEV_BUS
CONFIG_SERIAL_DEV_CTRL_TTYPORT
CONFIG_BT_HCIUART
CONFIG_BT_HCIUART_LL

-- Sebastian

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply

* Re: [PATCH 0/4] TI Bluetooth serdev support
From: Adam Ford @ 2017-04-30 15:14 UTC (permalink / raw)
  To: Rob Herring
  Cc: Marcel Holtmann, linux-bluetooth, Mark Rutland, devicetree,
	Johan Hedberg, Gustavo Padovan, Satish Patel, Wei Xu, Eyal Reizer,
	netdev, linux-arm-kernel
In-Reply-To: <20170405183005.20570-1-robh@kernel.org>

On Wed, Apr 5, 2017 at 1:30 PM, Rob Herring <robh@kernel.org> wrote:
> This series adds serdev support to the HCI LL protocol used on TI BT
> modules and enables support on HiKey board with with the WL1835 module.
> With this the custom TI UIM daemon and btattach are no longer needed.

Without UIM daemon, what instruction do you use to load the BT firmware?

I was thinking 'hciattach' but I was having trouble.  I was hoping you
might have some insight.

 hciattach -t 30 -s 115200 /dev/ttymxc1 texas 3000000 flow  Just
returns a timeout.

I modified my i.MX6 device tree per the binding documentation and
setup the regulators and enable GPIO pins.

adam
>
> The series is available on this git branch[1]. Patch 2 is just clean-up
> and can be applied independently. Patch 3 is dependent on the series
> "Nokia H4+ support". I'd suggest both series are merged thru the BT tree.
>
> Rob
>
> [1] git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git ti-bluetooth
>
> Rob Herring (4):
>   dt-bindings: net: Add TI WiLink shared transport binding
>   bluetooth: hci_uart: remove unused hci_uart_init_tty
>   bluetooth: hci_uart: add LL protocol serdev driver support
>   arm64: dts: hikey: add WL1835 Bluetooth device node
>
>  .../devicetree/bindings/net/ti,wilink-st.txt       |  35 +++
>  arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts     |   5 +
>  drivers/bluetooth/hci_ldisc.c                      |  19 --
>  drivers/bluetooth/hci_ll.c                         | 261 ++++++++++++++++++++-
>  drivers/bluetooth/hci_uart.h                       |   1 -
>  5 files changed, 300 insertions(+), 21 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/net/ti,wilink-st.txt
>
> --
> 2.10.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply

* pull request: bluetooth-next 2017-04-30
From: Johan Hedberg @ 2017-04-30 14:09 UTC (permalink / raw)
  To: davem; +Cc: linux-bluetooth, netdev

[-- Attachment #1: Type: text/plain, Size: 2347 bytes --]

Hi Dave,

Here's one last batch of Bluetooth patches in the bluetooth-next tree
targeting the 4.12 kernel.

 - Remove custom ECDH implementation and use new KPP API instead
 - Add protocol checks to hci_ldisc
 - Add module license to HCI UART Nokia H4+ driver
 - Minor fix for 32bit user space - 64 bit kernel combination

Please let me know if there are any issues pulling. Thanks.

Johan

---
The following changes since commit e3a724edeec3836ed44675a6587a6db7b6b68dbe:

  sparc64: Support cbcond instructions in eBPF JIT. (2017-04-24 15:56:21 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git for-upstream

for you to fetch changes up to 71653eb64bcca6110c42aadfd50b8d54d3a88079:

  Bluetooth: Add selftest for ECDH key generation (2017-04-30 16:52:43 +0300)

----------------------------------------------------------------
Dean Jenkins (3):
      Bluetooth: hci_ldisc: Add protocol check to hci_uart_send_frame()
      Bluetooth: hci_ldisc: Add protocol check to hci_uart_dequeue()
      Bluetooth: hci_ldisc: Add protocol check to hci_uart_tx_wakeup()

Frédéric Danis (1):
      Bluetooth: Add module license for HCI UART Nokia H4+

Marcel Holtmann (2):
      Bluetooth: zero kpp input for key generation
      Bluetooth: Add selftest for ECDH key generation

Salvatore Benedetto (2):
      Bluetooth: convert smp and selftest to crypto kpp API
      Bluetooth: allocate data for kpp on heap

Szymon Janc (1):
      Bluetooth: Fix user channel for 32bit userspace on 64bit kernel

 drivers/bluetooth/hci_ldisc.c |  14 +-
 drivers/bluetooth/hci_nokia.c |   7 +
 net/bluetooth/Kconfig         |   1 +
 net/bluetooth/Makefile        |   2 +-
 net/bluetooth/ecc.c           | 816 ------------------------------------------
 net/bluetooth/ecc.h           |  54 ---
 net/bluetooth/ecdh_helper.c   | 231 ++++++++++++
 net/bluetooth/ecdh_helper.h   |  27 ++
 net/bluetooth/hci_sock.c      |   3 +-
 net/bluetooth/selftest.c      |  28 +-
 net/bluetooth/smp.c           |  46 ++-
 11 files changed, 342 insertions(+), 887 deletions(-)
 delete mode 100644 net/bluetooth/ecc.c
 delete mode 100644 net/bluetooth/ecc.h
 create mode 100644 net/bluetooth/ecdh_helper.c
 create mode 100644 net/bluetooth/ecdh_helper.h

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply

* [PATCH] Bluetooth: Add selftest for ECDH key generation
From: Marcel Holtmann @ 2017-04-30 11:20 UTC (permalink / raw)
  To: linux-bluetooth

Since the ECDH key generation takes a different path, it needs to be
tested as well. For this generate the public debug key from the private
debug key and compare both.

This also moves the seeding of the private key into the SMP calling code
to allow for easier re-use of the ECDH key generation helper.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 net/bluetooth/ecdh_helper.c |  3 ---
 net/bluetooth/smp.c         | 38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/net/bluetooth/ecdh_helper.c b/net/bluetooth/ecdh_helper.c
index 2a65ca3fa8fa..24d4e60f8c48 100644
--- a/net/bluetooth/ecdh_helper.c
+++ b/net/bluetooth/ecdh_helper.c
@@ -22,7 +22,6 @@
  */
 #include "ecdh_helper.h"
 
-#include <linux/random.h>
 #include <linux/scatterlist.h>
 #include <crypto/kpp.h>
 #include <crypto/ecdh.h>
@@ -181,8 +180,6 @@ bool generate_ecdh_keys(u8 public_key[64], u8 private_key[32])
 		if (tries++ >= max_tries)
 			goto free_all;
 
-		get_random_bytes(private_key, 32);
-
 		/* Set private Key */
 		p.key = (char *)private_key;
 		crypto_ecdh_encode_key(buf, buf_len, &p);
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 40e921a9cc17..14585edc9439 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -569,6 +569,9 @@ int smp_generate_oob(struct hci_dev *hdev, u8 hash[16], u8 rand[16])
 		smp->debug_key = true;
 	} else {
 		while (true) {
+			/* Seed private key with random number */
+			get_random_bytes(smp->local_sk, 32);
+
 			/* Generate local key pair for Secure Connections */
 			if (!generate_ecdh_keys(smp->local_pk, smp->local_sk))
 				return -EIO;
@@ -1895,6 +1898,9 @@ static u8 sc_send_public_key(struct smp_chan *smp)
 		set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
 	} else {
 		while (true) {
+			/* Seed private key with random number */
+			get_random_bytes(smp->local_sk, 32);
+
 			/* Generate local key pair for Secure Connections */
 			if (!generate_ecdh_keys(smp->local_pk, smp->local_sk))
 				return SMP_UNSPECIFIED;
@@ -3483,6 +3489,32 @@ void smp_unregister(struct hci_dev *hdev)
 
 #if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
 
+static inline void swap_digits(u64 *in, u64 *out, unsigned int ndigits)
+{
+	int i;
+
+	for (i = 0; i < ndigits; i++)
+		out[i] = __swab64(in[ndigits - 1 - i]);
+}
+
+static int __init test_debug_key(void)
+{
+	u8 pk[64], sk[32];
+
+	swap_digits((u64 *)debug_sk, (u64 *)sk, 4);
+
+	if (!generate_ecdh_keys(pk, sk))
+		return -EINVAL;
+
+	if (memcmp(sk, debug_sk, 32))
+		return -EINVAL;
+
+	if (memcmp(pk, debug_pk, 64))
+		return -EINVAL;
+
+	return 0;
+}
+
 static int __init test_ah(struct crypto_cipher *tfm_aes)
 {
 	const u8 irk[16] = {
@@ -3738,6 +3770,12 @@ static int __init run_selftests(struct crypto_cipher *tfm_aes,
 
 	calltime = ktime_get();
 
+	err = test_debug_key();
+	if (err) {
+		BT_ERR("debug_key test failed");
+		goto done;
+	}
+
 	err = test_ah(tfm_aes);
 	if (err) {
 		BT_ERR("smp_ah test failed");
-- 
2.9.3


^ permalink raw reply related

* [PATCH] Bluetooth: zero kpp input for key generation
From: Marcel Holtmann @ 2017-04-30 10:48 UTC (permalink / raw)
  To: linux-bluetooth

When generating new ECDH keys with kpp, the shared secret input needs to
be set to NULL. Fix this by including kpp_request_set_input call.

Fixes: 58771c1c ("Bluetooth: convert smp and selftest to crypto kpp
API")
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 net/bluetooth/ecdh_helper.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/bluetooth/ecdh_helper.c b/net/bluetooth/ecdh_helper.c
index 579684bfc322..2a65ca3fa8fa 100644
--- a/net/bluetooth/ecdh_helper.c
+++ b/net/bluetooth/ecdh_helper.c
@@ -191,6 +191,7 @@ bool generate_ecdh_keys(u8 public_key[64], u8 private_key[32])
 			goto free_all;
 
 		sg_init_one(&dst, tmp, 64);
+		kpp_request_set_input(req, NULL, 0);
 		kpp_request_set_output(req, &dst, 64);
 		kpp_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
 					 ecdh_complete, &result);
-- 
2.9.3


^ permalink raw reply related

* [PATCH BlueZ] shared/att: Respond to any opcode that is not command
From: Luiz Augusto von Dentz @ 2017-04-28 18:24 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Although get_op_type does now check for the command mask it must
respond to anything other than ATT_OP_TYPE_CMD since there is no mask
for response opcode.
---
 src/shared/att.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/shared/att.c b/src/shared/att.c
index 494b10d..2dc9d8b 100644
--- a/src/shared/att.c
+++ b/src/shared/att.c
@@ -841,10 +841,10 @@ static void handle_notify(struct bt_att *att, uint8_t opcode, uint8_t *pdu,
 	}
 
 	/*
-	 * If this was a request and no handler was registered for it, respond
-	 * with "Not Supported"
+	 * If this was not a command and no handler was registered for it,
+	 * respond with "Not Supported"
 	 */
-	if (!found && get_op_type(opcode) == ATT_OP_TYPE_REQ)
+	if (!found && get_op_type(opcode) != ATT_OP_TYPE_CMD)
 		respond_not_supported(att, opcode);
 
 	bt_att_unref(att);
-- 
2.9.3


^ permalink raw reply related

* Re: [PATCH V1 0/3] hci_ldisc: inhibit "proto" function pointers, avoid crash
From: Marcel Holtmann @ 2017-04-28 16:09 UTC (permalink / raw)
  To: Dean Jenkins; +Cc: Gustavo F. Padovan, Johan Hedberg, linux-bluetooth
In-Reply-To: <1493384246-15381-1-git-send-email-Dean_Jenkins@mentor.com>

Hi Dean,

> This is my 2nd patchset in my series of resolving a design flaw in
> hci_uart_tty_close() related to the proper closure of the Data Link protocol
> layer which can result in a kernel crash.
> 
> The 3 patches in this patchset will unmask the design flaw in
> hci_uart_tty_close() and provide a partial fix. My future patchsets based on
> my original 1st patchset V2 can be discussed at a later date to get a complete
> fix.
> 
> 
> Previous Discussions
> ====================
> 
> Please refer to the discussion on my 1st patchset V3 that can be found here:
> https://www.spinics.net/lists/linux-bluetooth/msg70315.html
> You accepted the first 3 patches of my series of commits namely:
>  Bluetooth: hci_ldisc: Add missing return in hci_uart_init_work()
>  Bluetooth: hci_ldisc: Ensure hu->hdev set to NULL before freeing hdev
>  Bluetooth: hci_ldisc: Add missing clear HCI_UART_PROTO_READY
> 
> drivers/bluetooth/hci_ldisc.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
> 
> Please refer to the discussion on my 1st patchset V2 that can be found here:
> https://www.spinics.net/lists/linux-bluetooth/msg70183.html
> 
> Please refer to the discussion on my 1st RFC patchset V1 that can be found here:
> https://www.spinics.net/lists/linux-bluetooth/msg70077.html
> 
> 
> Failure test case
> =================
> 
> Note this failure is probably reproducible on many series 3 and 4 kernels.
> 
> Connect a UART based Bluetooth Radio Module via a USB to serial adaptor to a
> Linux PC running kernel v4.10.11. This module used the Data Link protocol called
> BCSP but that is not too important because the issue is common to all the
> Data Link protocols. If the Data Link protocol supports a retransmission
> procedure then the probability of a kernel crash is higher.
> 
> Use the Bluez utility called btattach to try to use BCSP. Note the BCSP
> implementation is incomplete in the kernel so BCSP will not establish a
> connection with the Bluetooth Radio Module. However, this is ideal in exposing
> the design issue in hci_uart_tty_close() because BCSP performs retransmissions.
> 
> I created this simple testcase script to trigger a kernel crash in
> approximately 10 minutes of running.
> 
> #!/bin/bash
> 
> let i=1
> 
> while [ true ]
> do
>        echo "loop $i"
>        ./btattach -B /dev/ttyUSB0 -P bcsp -r &
>        sleep 5
>        echo "now killing..."
>        killall btattach
>        i=$(($i + 1))
> done
> 
> I got the following kernel crash after 78 loops.
> 
> Here is a snippet of the dmesg log (dynamic debug used) leading up to the crash:
> 
> Note BCSP is retransmitting during hci_uart_tty_close() which increases the
> probability of crashing.
> 
> [ 2932.969451] hci_uart_tty_close: tty ffff8c015f11d400
> [ 2932.969455] hci_uart_close: hdev ffff8c01e3ee4000
> [ 2932.969458] hci_uart_flush: hdev ffff8c01e3ee4000 tty ffff8c015f11d400
> [ 2932.969460] bcsp_flush: hu ffff8c01f0bca240
> [ 2932.969465] hci_unregister_dev: ffff8c01e3ee4000 name hci1 bus 3
> [ 2933.154206] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 2 pkts
> [ 2933.154231] hci_uart_tx_wakeup: 
> [ 2933.154446] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2933.154447] bcsp_prepare_pkt: Sending packet with seqno 0
> [ 2933.154465] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2933.154466] bcsp_prepare_pkt: Sending packet with seqno 1
> [ 2933.410201] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 2 pkts
> [ 2933.410240] hci_uart_tx_wakeup: 
> [ 2933.410307] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2933.410308] bcsp_prepare_pkt: Sending packet with seqno 0
> [ 2933.410321] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2933.410322] bcsp_prepare_pkt: Sending packet with seqno 1
> [ 2933.666198] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 2 pkts
> [ 2933.666225] hci_uart_tx_wakeup: 
> < snipped: do not show all BCSP retransmissions that occur every 250ms >
> [ 2934.182902] Bluetooth: hci1 command 0x1001 tx timeout
> [ 2934.182916] hci_cmd_work: hci1 cmd_cnt 1 cmd queued 1
> [ 2934.182920] hci_send_frame: hci1 type 1 len 3
> [ 2934.182922] hci_uart_send_frame: hci1: type 1 len 3
> [ 2934.182923] hci_uart_tx_wakeup: 
> [ 2934.182928] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2934.182929] bcsp_prepare_pkt: Sending packet with seqno 2
> [ 2934.434214] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 3 pkts
> [ 2934.434217] hci_uart_tx_wakeup: 
> [ 2934.434243] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2934.434244] bcsp_prepare_pkt: Sending packet with seqno 0
> [ 2934.434263] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2934.434264] bcsp_prepare_pkt: Sending packet with seqno 1
> [ 2934.434268] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2934.434269] bcsp_prepare_pkt: Sending packet with seqno 2
> [ 2934.690178] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 3 pkts
> [ 2934.690217] hci_uart_tx_wakeup: 
> < snipped: do not show all BCSP retransmissions that occur every 250ms >
> [ 2936.226215] Bluetooth: hci1 command 0x1009 tx timeout
> [ 2936.226233] hci_cmd_work: hci1 cmd_cnt 1 cmd queued 0
> [ 2936.226280] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2936.226282] bcsp_prepare_pkt: Sending packet with seqno 0
> [ 2936.226300] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2936.226301] bcsp_prepare_pkt: Sending packet with seqno 1
> [ 2936.226304] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2936.226306] bcsp_prepare_pkt: Sending packet with seqno 2
> [ 2936.482149] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 3 pkts
> [ 2936.482179] hci_uart_tx_wakeup: 
> [ 2936.482259] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2936.482261] bcsp_prepare_pkt: Sending packet with seqno 0
> [ 2936.482280] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2936.482281] bcsp_prepare_pkt: Sending packet with seqno 1
> [ 2936.482285] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2936.482286] bcsp_prepare_pkt: Sending packet with seqno 2
> [ 2936.738141] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 3 pkts
> [ 2936.738179] hci_uart_tx_wakeup: 
> < snipped: do not show all BCSP retransmissions that occur every 250ms >
> [ 2940.066125] hci_uart_tx_wakeup: 
> [ 2940.066200] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2940.066202] bcsp_prepare_pkt: Sending packet with seqno 0
> [ 2940.066221] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2940.066223] bcsp_prepare_pkt: Sending packet with seqno 1
> [ 2940.066227] bcsp_prepare_pkt: We request packet no 0 to card
> [ 2940.066230] bcsp_prepare_pkt: Sending packet with seqno 2
> [ 2940.322113] bcsp_timed_event: hu ffff8c01f0bca240 retransmitting 3 pkts
> [ 2940.322126] hci_uart_tx_wakeup: 
> [ 2940.322147] hci_uart_close: hdev ffff8c01e3ee4000
> [ 2940.322149] hci_uart_flush: hdev ffff8c01e3ee4000 tty ffff8c015f11d400
> [ 2940.322164] hci_dev_do_close: hci1 ffff8c01e3ee4000
> [ 2940.322335] hci_conn_params_clear_all: All LE connection parameters were removed
> [ 2940.322340] bcsp_close: hu ffff8c01f0bca240
> [ 2940.322667] ftdi_set_termios: ftdi_sio ttyUSB0: Setting CS8
> [ 2940.322686] BUG: unable to handle kernel NULL pointer dereference at 0000000000000044
> [ 2940.322750] IP: _raw_spin_lock_irqsave+0x22/0x40
> [ 2940.322779] PGD 0 
> [ 2940.383274] Oops: 0002 [#1] SMP
> [ 2940.384001] Modules linked in: hci_uart btqca xt_set ip_set_hash_ip ip_set nf_log_ipv4 nf_log_ipv6 nf_log_common xt_LOG ip6table_nat nf_nat_ipv6 xt_recent iptable_nat nf_nat_ipv4 ip6t_REJECT nf_reject_ipv6 xt_comment ip6table_mangle ipt_REJECT nf_reject_ipv4 xt_addrtype bridge stp llc xt_mark iptable_mangle xt_tcpudp iptable_raw nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_tftp xt_CT nf_nat_snmp_basic nf_conntrack_snmp nf_nat_sip nf_nat_pptp nf_nat_proto_gre ip6table_raw nf_nat_irc xt_multiport nf_nat_h323 nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ftp nf_nat_amanda nf_nat xt_conntrack nf_conntrack_sane nf_conntrack_tftp ts_kmp nf_conntrack_sip nf_conntrack_amanda nf_conntrack_pptp nf_conntrack_proto_gre nf_conntrack_netlink nfnetlink nf_conntrack_netbios_ns nf_conntrack_broadcast nf_conntrack_irc nf_conntrack_h323
> [ 2940.388162]  nf_conntrack_ftp nf_conntrack ip6table_filter ip6_tables iptable_filter ip_tables x_tables lockd grace ctr ccm af_packet bnep msr arc4 brcmsmac uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 cordic btusb btrtl ftdi_sio brcmutil btbcm videobuf2_core btintel mac80211 usbserial bluetooth intel_powerclamp videodev coretemp kvm_intel kvm media snd_hda_codec_hdmi snd_hda_codec_realtek cfg80211 snd_hda_codec_generic snd_hda_intel joydev snd_hda_codec iTCO_wdt irqbypass snd_hda_core toshiba_acpi sparse_keymap iTCO_vendor_support crc32c_intel bcma industrialio snd_hwdep snd_pcm psmouse toshiba_bluetooth snd_timer input_leds serio_raw mei_me rfkill ac e1000e snd thermal wmi shpchp intel_ips battery toshiba_haps soundcore fjes lpc_ich mei ptp pps_core tpm_tis tpm_tis_core tpm cpufreq_ondemand
> [ 2940.393216]  cpufreq_conservative cpufreq_powersave acpi_cpufreq evdev nvram sunrpc sch_fq_codel ipv6 crc_ccitt autofs4 hid_generic usbhid hid sdhci_pci mmc_block sr_mod sdhci ehci_pci ehci_hcd mmc_core usbcore usb_common i915 video button i2c_algo_bit drm_kms_helper drm
> [ 2940.395473] CPU: 3 PID: 6669 Comm: kworker/3:1 Not tainted 4.10.11_pure #1
> [ 2940.396606] Hardware name: TOSHIBA Satellite R630/Portable PC, BIOS Version 1.40   07/20/2010
> [ 2940.397763] Workqueue: events hci_uart_write_work [hci_uart]
> [ 2940.399076] task: ffff8c01f2883600 task.stack: ffffb2a704d34000
> [ 2940.400360] RIP: 0010:_raw_spin_lock_irqsave+0x22/0x40
> [ 2940.401511] RSP: 0018:ffffb2a704d37da8 EFLAGS: 00010046
> [ 2940.402660] RAX: 0000000000000000 RBX: 0000000000000296 RCX: ffff8c01f2883600
> [ 2940.403829] RDX: 0000000000000001 RSI: ffff8c01f7cd8ba0 RDI: 0000000000000044
> [ 2940.404995] RBP: ffffb2a704d37db0 R08: ffff8c01f7cd8b80 R09: 00000000000001f9
> [ 2940.406157] R10: 000002ac98e2f8d0 R11: 0000000000000001 R12: 0000000000000030
> [ 2940.407317] R13: 0000000000000044 R14: 0000000000000030 R15: ffff8c01f0bca780
> [ 2940.408495] FS:  0000000000000000(0000) GS:ffff8c01f7cc0000(0000) knlGS:0000000000000000
> [ 2940.409671] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 2940.410845] CR2: 0000000000000044 CR3: 00000001306fb000 CR4: 00000000000006e0
> [ 2940.412049] Call Trace:
> [ 2940.413276]  skb_dequeue+0x1d/0x70
> [ 2940.414511]  bcsp_dequeue+0x27/0x180 [hci_uart]
> [ 2940.415760]  hci_uart_write_work+0xc4/0x100 [hci_uart]
> [ 2940.417012]  process_one_work+0x151/0x410
> [ 2940.418248]  worker_thread+0x69/0x4b0
> [ 2940.419494]  kthread+0x114/0x150
> [ 2940.420753]  ? rescuer_thread+0x340/0x340
> [ 2940.422017]  ? kthread_park+0x90/0x90
> [ 2940.423295]  ret_from_fork+0x2c/0x40
> [ 2940.424563] Code: 89 e5 e8 22 55 98 ff 5d c3 66 66 66 66 90 55 48 89 e5 53 9c 58 66 66 90 66 90 48 89 c3 fa 66 66 90 66 66 90 31 c0 ba 01 00 00 00 <f0> 0f b1 17 85 c0 75 06 48 89 d8 5b 5d c3 89 c6 e8 c9 41 98 ff 
> [ 2940.427448] RIP: _raw_spin_lock_irqsave+0x22/0x40 RSP: ffffb2a704d37da8
> [ 2940.428956] CR2: 0000000000000044
> [ 2940.435363] ---[ end trace 26e358778a5b55c5 ]---
> 
> 
> Analysis
> ========
> 
> The kernel crashes because the work queue hu->write_work runs
> hci_uart_write_work() which attempts to dequeue a Data Layer protocol frame
> using hu->proto->dequeue(). Unfortunately, hci_uart_tty_close() has already
> called hu->proto->close() which removes the resources needed by
> hu->proto->dequeue() and a kernel crash occurs.
> 
> Assuming device is hci0 (my actual test used hci1). 
> hciattach or btattach can be used and are examples.
> 
> Example normal case scenario:
> -----------------------------
> 
> 1. hciconfig hci0 up ==> hci_dev_do_open() and sets HCI_UP
> 
> 2. hciconfig hci0 down ==> hci_dev_do_close() and clears HCI_UP
> 
> 3. killall hciattach ==> hci_dev_do_close() exits early as HCI_UP is clear
> 
> Notice that hci_dev_do_close() runs twice.
> 
> There is probably many seconds between these events so the HCI layer is likely
> to be idle before hci_uart_tty_close() runs. Therefore, in an environment where
> the communications with the Bluetooth Radio Module are good, the kernel crash is
> very unlikely to occur.
> 
> Example failure case scenario:
> ------------------------------
> 
> 1. hciconfig hci0 up ==> hci_dev_do_open() and sets HCI_UP
> 
> 2. killall hciattach ==> hci_dev_do_close() and clears HCI_UP
> 
> In the failure case, hci_dev_do_close() attempts to perform clean-up because
> HCI_UP is in the set state. hci_dev_do_close() is running in the callstack:
> 
> hci_uart_tty_close()
> hci_unregister_dev()
> hci_dev_do_close()
> 
> hci_uart_tty_close() is acting against hci_dev_do_close() by systematically
> inhibiting various aspects of the data plane between the Data Link protocol
> layer and the UART driver. This seems to be a design flaw; either allow
> successful transmissions OR fully inhibit transmissions. Unfortunately, the
> design is attempting both at the same time.
> 
> When hci_unregister_dev() returns to hci_uart_tty_close(), 1 or
> more HCI commands might have been queued inside the Data Link protocol layer by
> hu->proto->enqueue(). The Data Link protocol layer may attempt to periodically
> retransmit these HCI commands.
> 
> In any case, attempts at sending any HCI commands will fail during the
> execution of hci_uart_tty_close() because the data plane between the Data Link
> protocol Layer and the UART driver has been cut in various places including
> inside the TTY layer.
> 
> The weakness in hci_uart_tty_close() is that hu->proto->close() is not prevented
> from running before or during the execution of the other "proto" function
> pointers such as hu->proto->dequeue(). Therefore a race condition exists.
> 
> 
> Solution implemented by this patchset
> =====================================
> 
> When the flag HCI_UART_PROTO_READY is in the clear state, this means the "proto"
> layer is no longer ready. Therefore use HCI_UART_PROTO_READY to prevent any
> "proto" function pointer except hu->proto->close() from running.
> 
> Already protected:
> p->open() in hci_uart_set_proto()
> hu->proto->flush() in hci_uart_flush()
> hu->proto->close() in hci_uart_tty_close()
> p->close() in hci_uart_set_proto()
> hu->proto->close() in hci_uart_init_work()
> 
> The following "proto" functions pointers are now protected by the patchset:
> hu->proto->enqueue() in hci_uart_send_frame()
> hu->proto->dequeue() in hci_uart_dequeue()
> 
> by the implementations in the patches:
>  Bluetooth: hci_ldisc: Add protocol check to hci_uart_send_frame()
>  Bluetooth: hci_ldisc: Add protocol check to hci_uart_dequeue()
> 
> This protection helps to avoid the kernel crash by ensuring that a "proto"
> function pointer except hu->proto->close() does not run after
> HCI_UART_PROTO_READY has been cleared in hci_uart_tty_close().
> 
> However, a complete solution (not implemented in this patchset) requires locking
> to prevent hu->proto->close() from running whilst another "proto" function
> pointer is already running. The flag HCI_UART_PROTO_READY is insufficient
> because another "proto" function pointer may already be running at the point the
> flag is cleared.
> 
> In addition the patch:
>  Bluetooth: hci_ldisc: Add protocol check to hci_uart_tx_wakeup()
> 
> prevents the scheduling of new or retransmitted HCI commands from being queued
> on the work queue hu->write_work so that hci_uart_write_work() is not able to
> run when HCI_UART_PROTO_READY is in the cleared state. This inhibits
> transmission attempts so reduces the probability of hci_uart_write_work()
> running after hu->proto->close() has run.
> 
> 
> Test results with patchset applied
> ==================================
> 
> snippet of dmesg log
> 
> [ 1122.904072] hci_uart_tty_close: tty ffff91b59c41c000
> [ 1122.904075] hci_uart_close: hdev ffff91b59c456000
> [ 1122.904078] hci_uart_flush: hdev ffff91b59c456000 tty ffff91b59c41c000
> [ 1122.904080] bcsp_flush: hu ffff91b5a29340c0
> [ 1122.904085] hci_unregister_dev: ffff91b59c456000 name hci1 bus 3
> [ 1122.984911] bcsp_timed_event: hu ffff91b5a29340c0 retransmitting 2 pkts
> [ 1124.520958] Bluetooth: hci1 command 0x1001 tx timeout
> [ 1124.521009] hci_cmd_work: hci1 cmd_cnt 1 cmd queued 1
> [ 1124.521013] hci_send_frame: hci1 type 1 len 3
> [ 1124.521015] hci_uart_send_frame: hci1: type 1 len 3
> [ 1124.521016] Bluetooth: hci1 sending frame failed (-49)
> [ 1126.569048] Bluetooth: hci1 command 0x1009 tx timeout
> [ 1126.569065] hci_cmd_work: hci1 cmd_cnt 1 cmd queued 0
> [ 1130.665151] hci_uart_close: hdev ffff91b59c456000
> [ 1130.665154] hci_uart_flush: hdev ffff91b59c456000 tty ffff91b59c41c000
> [ 1130.665173] hci_dev_do_close: hci1 ffff91b59c456000
> [ 1130.665357] hci_conn_params_clear_all: All LE connection parameters were removed
> [ 1130.665361] bcsp_close: hu ffff91b5a29340c0
> 
> Notice the following error message is now output:
> Bluetooth: hci1 sending frame failed (-49)
> 
> This is because the patch
>  Bluetooth: hci_ldisc: Add protocol check to hci_uart_send_frame()
> 
> is preventing hci_send_frame() from calling hu->proto->enqueue() after
> hci_uart_tty_close() has cleared the flag HCI_UART_PROTO_READY. Therefore,
> no new HCI commands can be queued within the Data Link protocol layer because
> the Data Link protocol layer is pending to be closed.
> 
> 
> Conclusions
> ===========
> 
> This patchset demonstrates the following design issues:
> 
> 1. Attempts are made at trying to send HCI commands during hci_uart_tty_close()
>   but this is in conflict with the hci_uart_tty_close() closure procedures.
> 
> 2. Data Link protocol layer retransmission attempts can occur during
>   hci_uart_tty_close() to resend HCI commands but this is in conflict with the
>   hci_uart_tty_close() closure procedures.
> 
> 3. Sending of HCI commands fail anyway during hci_uart_tty_close() because
>   the data plane between the Data Link protocol layer and the UART driver has
>   been cut in various places including inside the TTY layer. Therefore the
>   attempts at sending HCI commands during hci_uart_tty_close() are futile.
> 
> This means that, currently the design is attempting to send HCI commands AND
> trying to inhibit transmissions at the same time. Therefore, there is a conflict
> in the procedures.
> 
> The design of hci_uart_tty_close() needs to be changed to either
> a) allow sucessful transmission of HCI commands and implement a clean controlled
>   closure of the Data Link protocol.
> OR
> b) abruptly inhibit further communications of the Data Link protocol.
> 
> 
> Side-effects
> ------------
> 
> The patchset should be safe although a side-effect could be some occassional
> error messages:
> Bluetooth: hci1 sending frame failed (-49)
> 
> Note hci_send_frame() does not propagate the -EUNATCH (-49) error code so takes
> no specific action. Therefore, hci_core.c handling is not modified by the
> patchset.
> 
> 
> Dean Jenkins (3):
>  Bluetooth: hci_ldisc: Add protocol check to hci_uart_send_frame()
>  Bluetooth: hci_ldisc: Add protocol check to hci_uart_dequeue()
>  Bluetooth: hci_ldisc: Add protocol check to hci_uart_tx_wakeup()
> 
> drivers/bluetooth/hci_ldisc.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)

all 3 patches have been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply

* Re: [PATCH] Bluetooth: Add module license for HCI UART Nokia H4+
From: Marcel Holtmann @ 2017-04-28 16:06 UTC (permalink / raw)
  To: Frédéric Danis; +Cc: Sebastian Reichel, linux-bluetooth
In-Reply-To: <1493378771-22557-1-git-send-email-frederic.danis.oss@gmail.com>

Hi Fred,

> Fix the following error preventing to load Nokia H4+ module:
>  kernel: [  826.461619] hci_nokia: module license 'unspecified' taints kernel.
>  kernel: [  826.461629] Disabling lock debugging due to kernel taint
>  kernel: [  826.461836] hci_nokia: Unknown symbol gpiod_get_value_cansleep (err 0)
>  kernel: [  826.461876] hci_nokia: Unknown symbol devm_kmalloc (err 0)
>  kernel: [  826.461908] hci_nokia: Unknown symbol gpiod_set_value (err 0)
>  kernel: [  826.461937] hci_nokia: Unknown symbol serdev_device_set_baudrate (err 0)
>  kernel: [  826.461994] hci_nokia: Unknown symbol gpiod_set_value_cansleep (err 0)
>  kernel: [  826.462021] hci_nokia: Unknown symbol hci_uart_tx_wakeup (err 0)
>  kernel: [  826.462043] hci_nokia: Unknown symbol serdev_device_set_flow_control (err 0)
>  kernel: [  826.462064] hci_nokia: Unknown symbol gpiod_to_irq (err 0)
>  kernel: [  826.462085] hci_nokia: Unknown symbol serdev_device_open (err 0)
>  kernel: [  826.462106] hci_nokia: Unknown symbol gpiod_get_value (err 0)
>  kernel: [  826.462150] hci_nokia: Unknown symbol clk_prepare (err 0)
>  kernel: [  826.462182] hci_nokia: Unknown symbol pm_runtime_enable (err 0)
>  kernel: [  826.462204] hci_nokia: Unknown symbol h4_recv_buf (err 0)
>  kernel: [  826.462246] hci_nokia: Unknown symbol serdev_device_write_flush (err 0)
>  kernel: [  826.462268] hci_nokia: Unknown symbol serdev_device_get_tiocm (err 0)
>  kernel: [  826.462298] hci_nokia: Unknown symbol driver_unregister (err 0)
>  kernel: [  826.462318] hci_nokia: Unknown symbol serdev_device_wait_until_sent (err 0)
>  kernel: [  826.462347] hci_nokia: Unknown symbol __serdev_device_driver_register (err 0)
>  kernel: [  826.462384] hci_nokia: Unknown symbol serdev_device_set_tiocm (err 0)
>  kernel: [  826.462417] hci_nokia: Unknown symbol clk_get_rate (err 0)
>  kernel: [  826.462454] hci_nokia: Unknown symbol __pm_runtime_resume (err 0)
>  kernel: [  826.462486] hci_nokia: Unknown symbol serdev_device_close (err 0)
>  kernel: [  826.462524] hci_nokia: Unknown symbol cancel_work_sync (err 0)
>  kernel: [  826.462546] hci_nokia: Unknown symbol btbcm_set_bdaddr (err 0)
>  kernel: [  826.462567] hci_nokia: Unknown symbol clk_disable (err 0)
>  kernel: [  826.462610] hci_nokia: Unknown symbol __pm_runtime_disable (err 0)
>  kernel: [  826.462632] hci_nokia: Unknown symbol hci_uart_register_device (err 0)
>  kernel: [  826.462653] hci_nokia: Unknown symbol clk_enable (err 0)
>  kernel: [  826.462675] hci_nokia: Unknown symbol __pm_runtime_idle (err 0)
>  kernel: [  826.462700] hci_nokia: Unknown symbol clk_unprepare (err 0)
> 
> Signed-off-by: Frédéric Danis <frederic.danis.oss@gmail.com>
> ---
> drivers/bluetooth/hci_nokia.c | 7 +++++++
> 1 file changed, 7 insertions(+)

patch has been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox