2011-11-08 08:38:17

by Yao, Costa

[permalink] [raw]
Subject: [PATCH] Bluetooth: btusb: Add support for Qualcomm Atheros composite chip 3006

QVIzMDA2IGlzIGEgY29tcG9zaXRlIGRldmljZSwgYW5kIGludGVyZmFjZSAwIGlzIHVzZWQgZm9y
IGhpZCBmdW5jdGlvbiwgbm90IGZvciBibHVldG9vdGggZnVuY3Rpb24uDQpXZSBzaG91bGQgbWFr
ZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6DQoxIEJsYWNrbGlzdCBBUjMwMDYgUElEL1ZJRCBpbiBi
dHVzYl90YWJsZQ0KMiBBZGQgY29tcG9zaXRlX2RldmljZV90YWJsZSBpbiBidHVzYi5jIHRvIHJl
Z2lzdGVyIGNvbXBvc2l0ZSBkZXZpY2UNCjMgRm9yIEFSMzAwNiBjb21wb3NpdGUgZGV2aWNlLCBp
bnRlcmZhY2UgMyBpcyB1c2VkIGZvciBkYXRhLT5pc29jDQoNClNpZ25lZC1vZmYtYnk6IENvc3Rh
IFlhbyA8Y3F5YW9AcWNhLnF1YWxjb21tLmNvbT4NCi0tLQ0KIGRyaXZlcnMvYmx1ZXRvb3RoL2J0
dXNiLmMgfCAgIDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCiAxIGZp
bGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1n
aXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2Iu
Yw0KaW5kZXggOWRiMjQ3Ni4uZDMwNmRlYyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3Ro
L2J0dXNiLmMNCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMNCkBAIC01NSw2ICs1NSw3
IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBidHVzYl9kcml2ZXI7DQogI2RlZmluZSBCVFVT
Ql9CUk9LRU5fSVNPQwkweDIwDQogI2RlZmluZSBCVFVTQl9XUk9OR19TQ09fTVRVCTB4NDANCiAj
ZGVmaW5lIEJUVVNCX0FUSDMwMTIJCTB4ODANCisjZGVmaW5lIEJUVVNCX0FUSDMwMDYJCTB4MDEw
MA0KIA0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gew0KIAkv
KiBHZW5lcmljIEJsdWV0b290aCBVU0IgZGV2aWNlICovDQpAQCAtMTAwLDYgKzEwMSw5IEBAIHN0
YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gew0KIAkvKiBDYW55b24g
Q04tQlRVMSB3aXRoIEhJRCBpbnRlcmZhY2VzICovDQogCXsgVVNCX0RFVklDRSgweDBjMTAsIDB4
MDAwMCkgfSwNCiANCisJLyogUXVhbGNvbW0gQXRoZXJvcyB3aXRoIEhJRCBpbnRlcmZhY2VzICov
DQorCXsgVVNCX0RFVklDRSgweDBjZjMsIDB4MzAwNikgfSwNCisNCiAJeyB9CS8qIFRlcm1pbmF0
aW5nIGVudHJ5ICovDQogfTsNCiANCkBAIC0xMjIsNiArMTI2LDcgQEAgc3RhdGljIHN0cnVjdCB1
c2JfZGV2aWNlX2lkIGJsYWNrbGlzdF90YWJsZVtdID0gew0KIA0KIAkvKiBBdGhlcm9zIDMwMTIg
d2l0aCBzZmxhc2ggZmlybXdhcmUgKi8NCiAJeyBVU0JfREVWSUNFKDB4MGNmMywgMHgzMDA0KSwg
LmRyaXZlcl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LA0KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAw
eDMwMDYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDA2IH0sDQogDQogCS8qIEF0aGVyb3Mg
QVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8NCiAJeyBVU0JfREVWSUNFKDB4MDQ4OSwg
MHhlMDJjKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sDQpAQCAtMTc5LDYgKzE4NCwx
OCBAQCBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYmxhY2tsaXN0X3RhYmxlW10gPSB7DQog
CXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLw0KIH07DQogDQorLyoNCisgKiBGb3IgY29tcG9z
aXRlIGRldmljZSwgaW50ZXJmYWNlIDAgbWF5IGJlIG5vdCBmb3IgYmx1ZXRvb3RoIGZ1bmN0aW9u
Lg0KKyAqIEl0IGlzIGJldHRlciB0byBsZXQgdGhlIHZlbmRvciBjb2RlIHRvIGhhbmRsZSB0aGlz
IHNpdHVhdGlvbi4NCisgKiBTbywgd2UgdXNlIGNvbXBvc2l0ZV9kZXZpY2VfdGFibGUgdG8gcmVj
b3JkIHRoZSBjb21wb3NpdGUgZGV2aWNlcy4NCisgKi8NCitzdGF0aWMgc3RydWN0IHVzYl9kZXZp
Y2VfaWQgY29tcG9zaXRlX2RldmljZV90YWJsZVtdID0gew0KKwkvKiBRdWFsY29tbSBBdGhlcm9z
IGNvbXBvc2l0ZSBkZXZpY2UgMzAwNiAqLw0KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDYp
IH0sDQorDQorCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLw0KK307DQorDQogI2RlZmluZSBC
VFVTQl9NQVhfSVNPQ19GUkFNRVMJMTANCiANCiAjZGVmaW5lIEJUVVNCX0lOVFJfUlVOTklORwkw
DQpAQCAtOTEyLDEzICs5MjksMjUgQEAgc3RhdGljIGludCBidHVzYl9wcm9iZShzdHJ1Y3QgdXNi
X2ludGVyZmFjZSAqaW50ZiwNCiAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGE7DQogCXN0cnVjdCBo
Y2lfZGV2ICpoZGV2Ow0KIAlpbnQgaSwgZXJyOw0KKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9p
ZCAqbWF0Y2hfY29tcF9kZXY7DQogDQogCUJUX0RCRygiaW50ZiAlcCBpZCAlcCIsIGludGYsIGlk
KTsNCiANCisJLyogRm9yIGNvbXBvc2l0ZSBkZXZpY2UNCisJKiBpdCBtYXkgbm90IHRoZSBjYXNl
IHRoYXQgaW50ZXJmYWNlIDAgaXMgZm9yIGJsdWV0b290aCBmdW5jdGlvbi4NCisJKi8NCisJbWF0
Y2hfY29tcF9kZXYgPSB1c2JfbWF0Y2hfaWQoaW50ZiwgY29tcG9zaXRlX2RldmljZV90YWJsZSk7
DQorCWlmIChtYXRjaF9jb21wX2Rldikgew0KKwkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5k
ZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMikNCisJCQlyZXR1cm4gLUVOT0RFVjsNCisJCWdvdG8g
bWF0Y2hfaWQ7DQorCX0NCisNCiAJLyogaW50ZXJmYWNlIG51bWJlcnMgYXJlIGhhcmRjb2RlZCBp
biB0aGUgc3BlYyAqLw0KIAlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFj
ZU51bWJlciAhPSAwKQ0KIAkJcmV0dXJuIC1FTk9ERVY7DQogDQorbWF0Y2hfaWQ6DQogCWlmICgh
aWQtPmRyaXZlcl9pbmZvKSB7DQogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqbWF0Y2g7
DQogCQltYXRjaCA9IHVzYl9tYXRjaF9pZChpbnRmLCBibGFja2xpc3RfdGFibGUpOw0KQEAgLTkz
OCw3ICs5NjcsOCBAQCBzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNl
ICppbnRmLA0KIAlpZiAoaWdub3JlX3NuaWZmZXIgJiYgaWQtPmRyaXZlcl9pbmZvICYgQlRVU0Jf
U05JRkZFUikNCiAJCXJldHVybiAtRU5PREVWOw0KIA0KLQlpZiAoaWQtPmRyaXZlcl9pbmZvICYg
QlRVU0JfQVRIMzAxMikgew0KKwlpZiAoKGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0FUSDMwMTIp
IHx8DQorCQkJCShpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9BVEgzMDA2KSkgew0KIAkJc3RydWN0
IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOw0KIA0KIAkJLyog
T2xkIGZpcm13YXJlIHdvdWxkIG90aGVyd2lzZSBsZXQgYXRoM2sgZHJpdmVyIGxvYWQNCkBAIC0x
MDYyLDYgKzEwOTIsMTEgQEAgc3RhdGljIGludCBidHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVy
ZmFjZSAqaW50ZiwNCiAJCX0NCiAJfQ0KIA0KKwlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0Jf
QVRIMzAwNikgew0KKwkJQlRfRVJSKCJoYXJkY29kZWQ6IEludGVyZmFjZSAzIik7DQorCQlkYXRh
LT5pc29jID0gdXNiX2lmbnVtX3RvX2lmKGRhdGEtPnVkZXYsIDMpOw0KKwl9DQorDQogCWlmIChk
YXRhLT5pc29jKSB7DQogCQllcnIgPSB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmYnR1c2Jf
ZHJpdmVyLA0KIAkJCQkJCQlkYXRhLT5pc29jLCBkYXRhKTsNCi0tIA0KMS43LjQuMQ0K


2011-11-10 06:53:48

by Marcel Holtmann

[permalink] [raw]
Subject: RE: [PATCH] Bluetooth: btusb: Add support for Qualcomm Atheros composite chip 3006

Hi Costa,

> > > For your first comment,
> > > Yes, we can just add device with .driver_info in btusb_table, not in
> > blacklist_table.
> > >
> > > For your other comments,
> > > As the device has 4 USB interfaces and interface 2 is for Bluetooth function.
> > We need to bypass the IF state in btusb.c as follow:
> > > if (intf->cur_altsetting->desc.bInterfaceNuber !=0)
> > > return -ENODEV;
> > >
> > > So we use a composite_device_table matching mechanism and use forward
> > jump to bypass the bInterfaceNumber check.
> > > And other vendors also can add their composite device in the
> > composite_device_table to bypass the check.
> >
> > And this can also be done via the .driver_info to select what interfaces to
> > expect. So please get rid of the composite table.
> >
> > And post the content of /proc/bus/usb/devices so that I see how your enpoints
> > do look like.
> >
> There is no /proc/bus/usb directory on my Ubuntu 11.04. And under directory /sys/bus/usb/devices/usb6/6-1, there are the device related files, such as 6-1:1.0 , 6-1:1.1, 6-1:1.2 and 6-1:1.3.

I prefer that output or the output of the usb-devices script from
usbutils package. It is a lot easier to read.

So I briefly looked through the descriptor table list. Seems like the
interface endpoints are using correct Bluetooth generic interface class
numbers. So we could just fix the enumeration logic to look for these.

The only real trick part is that btusb has to claim two interfaces. The
ACL + events one and the SCO one, but nothing is really stopping you
from using USB_DEVICE_AND_INTERFACE_INFO or USB_INTERFACE_INFO.

Maybe we should be doing that anyway since more and more devices are
kinda trying to squeeze more and more interface into a single device
descriptor. And then just look for the first interface and then try to
find the second interface.

T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#= 95 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0a5c ProdID=217f Rev=03.60
S: Manufacturer=Broadcom Corp
S: Product=Broadcom Bluetooth Device
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

This is my local Bluetooth adapter in my laptop for example. This works
fine since the device descriptor using the e0:01:01, but not all
Bluetooth adapters are doing this anymore.

So if we would instead match for the interface descriptor e0:01:01 and
once matched look for the second one to find the SCO interface we could
just have a more generic driver in the first place. It also pretty easy
from the endpoints (existence of the interrupt) if we have the main
interface or the SCO interface.

Care to send a patch for doing this change?

Regards

Marcel



2011-11-10 04:50:25

by Yao, Costa

[permalink] [raw]
Subject: RE: [PATCH] Bluetooth: btusb: Add support for Qualcomm Atheros composite chip 3006

SGkgTWFyY2VsLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1hcmNl
bCBIb2x0bWFubiBbbWFpbHRvOm1hcmNlbEBob2x0bWFubi5vcmddDQo+IFNlbnQ6IDIwMTHlubQx
MeaciDnml6UgMjI6NDINCj4gVG86IFlhbywgQ29zdGENCj4gQ2M6IHBhZG92YW5AcHJvZnVzaW9u
Lm1vYmk7IGxpbnV4LWJsdWV0b290aEB2Z2VyLmtlcm5lbC5vcmc7IEZhbiwgSG9uZzsgV3UsDQo+
IEZyYW5rOyBDaGVuLCBKYWNrOyBDaGFuZywgUm9iZXJ0OyBXYW5nLCBUb207IExpdSwgSGFpanVu
Ow0KPiBRQ0EuTWdyLkhhaWp1bi5MaXUtQWxsDQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0hdIEJsdWV0
b290aDogYnR1c2I6IEFkZCBzdXBwb3J0IGZvciBRdWFsY29tbSBBdGhlcm9zDQo+IGNvbXBvc2l0
ZSBjaGlwIDMwMDYNCj4gDQo+IEhpIENvc3RhLA0KPiANCj4gcGxlYXNlIGRvIG5vdCB0b3AgcG9z
dCBvbiB0aGlzIG1haWxpbmcgbGlzdC4gT3RoZXJ3aXNlIEkgYW0ganVzdCBpZ25vcmluZyB5b3Vy
DQo+IGVtYWlscyBmcm9tIHRoZSBuZXh0IHRpbWUuDQo+IA0KPiA+IEZvciB5b3VyIGZpcnN0IGNv
bW1lbnQsDQo+ID4gWWVzLCB3ZSBjYW4ganVzdCBhZGQgZGV2aWNlIHdpdGggLmRyaXZlcl9pbmZv
IGluIGJ0dXNiX3RhYmxlLCBub3QgaW4NCj4gYmxhY2tsaXN0X3RhYmxlLg0KPiA+DQo+ID4gRm9y
IHlvdXIgb3RoZXIgY29tbWVudHMsDQo+ID4gQXMgdGhlIGRldmljZSBoYXMgNCBVU0IgaW50ZXJm
YWNlcyBhbmQgaW50ZXJmYWNlIDIgaXMgZm9yIEJsdWV0b290aCBmdW5jdGlvbi4NCj4gV2UgbmVl
ZCB0byBieXBhc3MgdGhlIElGIHN0YXRlIGluIGJ0dXNiLmMgYXMgZm9sbG93Og0KPiA+ICAgICAg
IGlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnViZXIgIT0wKQ0KPiA+
ICAgICAgIHJldHVybiAtRU5PREVWOw0KPiA+DQo+ID4gU28gd2UgdXNlIGEgY29tcG9zaXRlX2Rl
dmljZV90YWJsZSBtYXRjaGluZyBtZWNoYW5pc20gYW5kIHVzZSBmb3J3YXJkDQo+IGp1bXAgdG8g
YnlwYXNzIHRoZSBiSW50ZXJmYWNlTnVtYmVyIGNoZWNrLg0KPiA+IEFuZCBvdGhlciB2ZW5kb3Jz
IGFsc28gY2FuIGFkZCB0aGVpciBjb21wb3NpdGUgZGV2aWNlIGluIHRoZQ0KPiBjb21wb3NpdGVf
ZGV2aWNlX3RhYmxlIHRvIGJ5cGFzcyB0aGUgY2hlY2suDQo+IA0KPiBBbmQgdGhpcyBjYW4gYWxz
byBiZSBkb25lIHZpYSB0aGUgLmRyaXZlcl9pbmZvIHRvIHNlbGVjdCB3aGF0IGludGVyZmFjZXMg
dG8NCj4gZXhwZWN0LiBTbyBwbGVhc2UgZ2V0IHJpZCBvZiB0aGUgY29tcG9zaXRlIHRhYmxlLg0K
PiANCj4gQW5kIHBvc3QgdGhlIGNvbnRlbnQgb2YgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIHNvIHRo
YXQgSSBzZWUgaG93IHlvdXIgZW5wb2ludHMNCj4gZG8gbG9vayBsaWtlLg0KPiANClRoZXJlIGlz
IG5vIC9wcm9jL2J1cy91c2IgZGlyZWN0b3J5IG9uIG15IFVidW50dSAxMS4wNC4gQW5kIHVuZGVy
IGRpcmVjdG9yeSAvc3lzL2J1cy91c2IvZGV2aWNlcy91c2I2LzYtMSwgdGhlcmUgYXJlIHRoZSBk
ZXZpY2UgcmVsYXRlZCBmaWxlcywgc3VjaCBhcyA2LTE6MS4wICwgNi0xOjEuMSwgNi0xOjEuMiBh
bmQgNi0xOjEuMy4NCjYtMToxLjAgaXMgZGlyZWN0b3J5IGZvciBpbnRlcmZhY2UgMCwgYW5kIGNv
bnRhaW5zIGVwXzg0LiA2LTE6MS4xIGlzIGRpcmVjdG9yeSBmb3IgaW50ZXJmYWNlIDEsIGFuZCBj
b250YWlucyBlcF84NS4gNi0xOjEuMiBpcyBkaXJlY3RvcnkgZm9yIGludGVyZmFjZSAyLCBhbmQg
Y29udGFpbnMgZXBfODMgYW5kIGVwXzAzLg0KNi0xOjEuMyBpcyBkaXJlY3RvcnkgZm9yIGludGVy
ZmFjZSAzLCBhbmQgY29udGFpbnMgZXBfODEgYW5kIGVwXzAyLg0KDQpCZWxvdyBpcyB0aGUgb3V0
cHV0IGJ5IGxzdXNiIC12Og0KQnVzIDAwNiBEZXZpY2UgMDAzOiBJRCAwY2YzOjMwMDYgQXRoZXJv
cyBDb21tdW5pY2F0aW9ucywgSW5jLiANCkRldmljZSBEZXNjcmlwdG9yOg0KICBiTGVuZ3RoICAg
ICAgICAgICAgICAgIDE4DQogIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDENCiAgYmNkVVNCICAg
ICAgICAgICAgICAgMS4xMA0KICBiRGV2aWNlQ2xhc3MgICAgICAgICAgMjM5IE1pc2NlbGxhbmVv
dXMgRGV2aWNlDQogIGJEZXZpY2VTdWJDbGFzcyAgICAgICAgIDIgPw0KICBiRGV2aWNlUHJvdG9j
b2wgICAgICAgICAxIEludGVyZmFjZSBBc3NvY2lhdGlvbg0KICBiTWF4UGFja2V0U2l6ZTAgICAg
ICAgIDY0DQogIGlkVmVuZG9yICAgICAgICAgICAweDBjZjMgQXRoZXJvcyBDb21tdW5pY2F0aW9u
cywgSW5jLg0KICBpZFByb2R1Y3QgICAgICAgICAgMHgzMDA2IA0KICBiY2REZXZpY2UgICAgICAg
ICAgICAwLjAyDQogIGlNYW51ZmFjdHVyZXIgICAgICAgICAgIDAgDQogIGlQcm9kdWN0ICAgICAg
ICAgICAgICAgIDAgDQogIGlTZXJpYWwgICAgICAgICAgICAgICAgIDAgDQogIGJOdW1Db25maWd1
cmF0aW9ucyAgICAgIDENCiAgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yOg0KICAgIGJMZW5ndGgg
ICAgICAgICAgICAgICAgIDkNCiAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICAyDQogICAgd1Rv
dGFsTGVuZ3RoICAgICAgICAgIDIzNQ0KICAgIGJOdW1JbnRlcmZhY2VzICAgICAgICAgIDQNCiAg
ICBiQ29uZmlndXJhdGlvblZhbHVlICAgICAxDQogICAgaUNvbmZpZ3VyYXRpb24gICAgICAgICAg
NCBCVCBIQ0kNCiAgICBibUF0dHJpYnV0ZXMgICAgICAgICAweGUwDQogICAgICBTZWxmIFBvd2Vy
ZWQNCiAgICAgIFJlbW90ZSBXYWtldXANCiAgICBNYXhQb3dlciAgICAgICAgICAgICAgMTAwbUEN
CiAgICBJbnRlcmZhY2UgRGVzY3JpcHRvcjoNCiAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAg
IDkNCiAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDQNCiAgICAgIGJJbnRlcmZhY2VOdW1i
ZXIgICAgICAgIDANCiAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgICAgIDANCiAgICAgIGJOdW1F
bmRwb2ludHMgICAgICAgICAgIDENCiAgICAgIGJJbnRlcmZhY2VDbGFzcyAgICAgICAgIDMgSHVt
YW4gSW50ZXJmYWNlIERldmljZQ0KICAgICAgYkludGVyZmFjZVN1YkNsYXNzICAgICAgMSBCb290
IEludGVyZmFjZSBTdWJjbGFzcw0KICAgICAgYkludGVyZmFjZVByb3RvY29sICAgICAgMSBLZXli
b2FyZA0KICAgICAgaUludGVyZmFjZSAgICAgICAgICAgICAgMCANCiAgICAgICAgSElEIERldmlj
ZSBEZXNjcmlwdG9yOg0KICAgICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDkNCiAgICAg
ICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgIDMzDQogICAgICAgICAgYmNkSElEICAgICAgICAg
ICAgICAgMS4xMA0KICAgICAgICAgIGJDb3VudHJ5Q29kZSAgICAgICAgICAgIDAgTm90IHN1cHBv
cnRlZA0KICAgICAgICAgIGJOdW1EZXNjcmlwdG9ycyAgICAgICAgIDENCiAgICAgICAgICBiRGVz
Y3JpcHRvclR5cGUgICAgICAgIDM0IFJlcG9ydA0KICAgICAgICAgIHdEZXNjcmlwdG9yTGVuZ3Ro
ICAgICAgNjUNCiAgICAgICAgIFJlcG9ydCBEZXNjcmlwdG9yczogDQogICAgICAgICAgICoqIFVO
QVZBSUxBQkxFICoqDQogICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOg0KICAgICAgICBiTGVuZ3Ro
ICAgICAgICAgICAgICAgICA3DQogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUNCiAg
ICAgICAgYkVuZHBvaW50QWRkcmVzcyAgICAgMHg4NCAgRVAgNCBJTg0KICAgICAgICBibUF0dHJp
YnV0ZXMgICAgICAgICAgICAzDQogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIElu
dGVycnVwdA0KICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lDQogICAgICAg
ICAgVXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGENCiAgICAgICAgd01heFBhY2tldFNpemUg
ICAgIDB4MDAwOCAgMXggOCBieXRlcw0KICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAx
DQogICAgSW50ZXJmYWNlIERlc2NyaXB0b3I6DQogICAgICBiTGVuZ3RoICAgICAgICAgICAgICAg
ICA5DQogICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA0DQogICAgICBiSW50ZXJmYWNlTnVt
YmVyICAgICAgICAxDQogICAgICBiQWx0ZXJuYXRlU2V0dGluZyAgICAgICAwDQogICAgICBiTnVt
RW5kcG9pbnRzICAgICAgICAgICAxDQogICAgICBiSW50ZXJmYWNlQ2xhc3MgICAgICAgICAzIEh1
bWFuIEludGVyZmFjZSBEZXZpY2UNCiAgICAgIGJJbnRlcmZhY2VTdWJDbGFzcyAgICAgIDEgQm9v
dCBJbnRlcmZhY2UgU3ViY2xhc3MNCiAgICAgIGJJbnRlcmZhY2VQcm90b2NvbCAgICAgIDIgTW91
c2UNCiAgICAgIGlJbnRlcmZhY2UgICAgICAgICAgICAgIDAgDQogICAgICAgIEhJRCBEZXZpY2Ug
RGVzY3JpcHRvcjoNCiAgICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA5DQogICAgICAg
ICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAzMw0KICAgICAgICAgIGJjZEhJRCAgICAgICAgICAg
ICAgIDEuMTANCiAgICAgICAgICBiQ291bnRyeUNvZGUgICAgICAgICAgICAwIE5vdCBzdXBwb3J0
ZWQNCiAgICAgICAgICBiTnVtRGVzY3JpcHRvcnMgICAgICAgICAxDQogICAgICAgICAgYkRlc2Ny
aXB0b3JUeXBlICAgICAgICAzNCBSZXBvcnQNCiAgICAgICAgICB3RGVzY3JpcHRvckxlbmd0aCAg
ICAgIDUyDQogICAgICAgICBSZXBvcnQgRGVzY3JpcHRvcnM6IA0KICAgICAgICAgICAqKiBVTkFW
QUlMQUJMRSAqKg0KICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoNCiAgICAgICAgYkxlbmd0aCAg
ICAgICAgICAgICAgICAgNw0KICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1DQogICAg
ICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4ODUgIEVQIDUgSU4NCiAgICAgICAgYm1BdHRyaWJ1
dGVzICAgICAgICAgICAgMw0KICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBJbnRl
cnJ1cHQNCiAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQ0KICAgICAgICAg
IFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhDQogICAgICAgIHdNYXhQYWNrZXRTaXplICAg
ICAweDAwMDQgIDF4IDQgYnl0ZXMNCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMQ0K
ICAgIEludGVyZmFjZSBBc3NvY2lhdGlvbjoNCiAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAg
IDgNCiAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgMTENCiAgICAgIGJGaXJzdEludGVyZmFj
ZSAgICAgICAgIDINCiAgICAgIGJJbnRlcmZhY2VDb3VudCAgICAgICAgIDINCiAgICAgIGJGdW5j
dGlvbkNsYXNzICAgICAgICAyMjQgV2lyZWxlc3MNCiAgICAgIGJGdW5jdGlvblN1YkNsYXNzICAg
ICAgIDEgUmFkaW8gRnJlcXVlbmN5DQogICAgICBiRnVuY3Rpb25Qcm90b2NvbCAgICAgICAxIEJs
dWV0b290aA0KICAgICAgaUZ1bmN0aW9uICAgICAgICAgICAgICAgMiBCbHVldG9vdGggVVNCIEhv
c3QgQ29udHJvbGxlcg0KICAgIEludGVyZmFjZSBEZXNjcmlwdG9yOg0KICAgICAgYkxlbmd0aCAg
ICAgICAgICAgICAgICAgOQ0KICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNA0KICAgICAg
YkludGVyZmFjZU51bWJlciAgICAgICAgMg0KICAgICAgYkFsdGVybmF0ZVNldHRpbmcgICAgICAg
MA0KICAgICAgYk51bUVuZHBvaW50cyAgICAgICAgICAgMw0KICAgICAgYkludGVyZmFjZUNsYXNz
ICAgICAgIDIyNCBXaXJlbGVzcw0KICAgICAgYkludGVyZmFjZVN1YkNsYXNzICAgICAgMSBSYWRp
byBGcmVxdWVuY3kNCiAgICAgIGJJbnRlcmZhY2VQcm90b2NvbCAgICAgIDEgQmx1ZXRvb3RoDQog
ICAgICBpSW50ZXJmYWNlICAgICAgICAgICAgICAwIA0KICAgICAgRW5kcG9pbnQgRGVzY3JpcHRv
cjoNCiAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgNw0KICAgICAgICBiRGVzY3JpcHRv
clR5cGUgICAgICAgICA1DQogICAgICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4ODEgIEVQIDEg
SU4NCiAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAgMw0KICAgICAgICAgIFRyYW5zZmVy
IFR5cGUgICAgICAgICAgICBJbnRlcnJ1cHQNCiAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAg
ICAgICAgTm9uZQ0KICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhDQogICAg
ICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwMTAgIDF4IDE2IGJ5dGVzDQogICAgICAgIGJJbnRl
cnZhbCAgICAgICAgICAgICAgIDENCiAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6DQogICAgICAg
IGJMZW5ndGggICAgICAgICAgICAgICAgIDcNCiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAg
ICAgNQ0KICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICAgICAweDgyICBFUCAyIElODQogICAgICAg
IGJtQXR0cmlidXRlcyAgICAgICAgICAgIDINCiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAg
ICAgICAgQnVsaw0KICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lDQogICAg
ICAgICAgVXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGENCiAgICAgICAgd01heFBhY2tldFNp
emUgICAgIDB4MDA0MCAgMXggNjQgYnl0ZXMNCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAg
ICAgMQ0KICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoNCiAgICAgICAgYkxlbmd0aCAgICAgICAg
ICAgICAgICAgNw0KICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1DQogICAgICAgIGJF
bmRwb2ludEFkZHJlc3MgICAgIDB4MDIgIEVQIDIgT1VUDQogICAgICAgIGJtQXR0cmlidXRlcyAg
ICAgICAgICAgIDINCiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgQnVsaw0KICAg
ICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lDQogICAgICAgICAgVXNhZ2UgVHlw
ZSAgICAgICAgICAgICAgIERhdGENCiAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDA0MCAg
MXggNjQgYnl0ZXMNCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMQ0KICAgIEludGVy
ZmFjZSBEZXNjcmlwdG9yOg0KICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgOQ0KICAgICAg
YkRlc2NyaXB0b3JUeXBlICAgICAgICAgNA0KICAgICAgYkludGVyZmFjZU51bWJlciAgICAgICAg
Mw0KICAgICAgYkFsdGVybmF0ZVNldHRpbmcgICAgICAgMA0KICAgICAgYk51bUVuZHBvaW50cyAg
ICAgICAgICAgMg0KICAgICAgYkludGVyZmFjZUNsYXNzICAgICAgIDIyNCBXaXJlbGVzcw0KICAg
ICAgYkludGVyZmFjZVN1YkNsYXNzICAgICAgMSBSYWRpbyBGcmVxdWVuY3kNCiAgICAgIGJJbnRl
cmZhY2VQcm90b2NvbCAgICAgIDEgQmx1ZXRvb3RoDQogICAgICBpSW50ZXJmYWNlICAgICAgICAg
ICAgICAwIA0KICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoNCiAgICAgICAgYkxlbmd0aCAgICAg
ICAgICAgICAgICAgNw0KICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1DQogICAgICAg
IGJFbmRwb2ludEFkZHJlc3MgICAgIDB4ODMgIEVQIDMgSU4NCiAgICAgICAgYm1BdHRyaWJ1dGVz
ICAgICAgICAgICAgMQ0KICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBJc29jaHJv
bm91cw0KICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lDQogICAgICAgICAg
VXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGENCiAgICAgICAgd01heFBhY2tldFNpemUgICAg
IDB4MDAwMCAgMXggMCBieXRlcw0KICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAxDQog
ICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOg0KICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAg
ICA3DQogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUNCiAgICAgICAgYkVuZHBvaW50
QWRkcmVzcyAgICAgMHgwMyAgRVAgMyBPVVQNCiAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAg
ICAgMQ0KICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBJc29jaHJvbm91cw0KICAg
ICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lDQogICAgICAgICAgVXNhZ2UgVHlw
ZSAgICAgICAgICAgICAgIERhdGENCiAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDAwMCAg
MXggMCBieXRlcw0KICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAxDQogICAgSW50ZXJm
YWNlIERlc2NyaXB0b3I6DQogICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA5DQogICAgICBi
RGVzY3JpcHRvclR5cGUgICAgICAgICA0DQogICAgICBiSW50ZXJmYWNlTnVtYmVyICAgICAgICAz
DQogICAgICBiQWx0ZXJuYXRlU2V0dGluZyAgICAgICAxDQogICAgICBiTnVtRW5kcG9pbnRzICAg
ICAgICAgICAyDQogICAgICBiSW50ZXJmYWNlQ2xhc3MgICAgICAgMjI0IFdpcmVsZXNzDQogICAg
ICBiSW50ZXJmYWNlU3ViQ2xhc3MgICAgICAxIFJhZGlvIEZyZXF1ZW5jeQ0KICAgICAgYkludGVy
ZmFjZVByb3RvY29sICAgICAgMSBCbHVldG9vdGgNCiAgICAgIGlJbnRlcmZhY2UgICAgICAgICAg
ICAgIDAgDQogICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOg0KICAgICAgICBiTGVuZ3RoICAgICAg
ICAgICAgICAgICA3DQogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUNCiAgICAgICAg
YkVuZHBvaW50QWRkcmVzcyAgICAgMHg4MyAgRVAgMyBJTg0KICAgICAgICBibUF0dHJpYnV0ZXMg
ICAgICAgICAgICAxDQogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIElzb2Nocm9u
b3VzDQogICAgICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUNCiAgICAgICAgICBV
c2FnZSBUeXBlICAgICAgICAgICAgICAgRGF0YQ0KICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAg
MHgwMDA5ICAxeCA5IGJ5dGVzDQogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDENCiAg
ICAgIEVuZHBvaW50IERlc2NyaXB0b3I6DQogICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAg
IDcNCiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQ0KICAgICAgICBiRW5kcG9pbnRB
ZGRyZXNzICAgICAweDAzICBFUCAzIE9VVA0KICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAgICAg
ICAxDQogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIElzb2Nocm9ub3VzDQogICAg
ICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUNCiAgICAgICAgICBVc2FnZSBUeXBl
ICAgICAgICAgICAgICAgRGF0YQ0KICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAgMHgwMDA5ICAx
eCA5IGJ5dGVzDQogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDENCiAgICBJbnRlcmZh
Y2UgRGVzY3JpcHRvcjoNCiAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDkNCiAgICAgIGJE
ZXNjcmlwdG9yVHlwZSAgICAgICAgIDQNCiAgICAgIGJJbnRlcmZhY2VOdW1iZXIgICAgICAgIDMN
CiAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgICAgIDINCiAgICAgIGJOdW1FbmRwb2ludHMgICAg
ICAgICAgIDINCiAgICAgIGJJbnRlcmZhY2VDbGFzcyAgICAgICAyMjQgV2lyZWxlc3MNCiAgICAg
IGJJbnRlcmZhY2VTdWJDbGFzcyAgICAgIDEgUmFkaW8gRnJlcXVlbmN5DQogICAgICBiSW50ZXJm
YWNlUHJvdG9jb2wgICAgICAxIEJsdWV0b290aA0KICAgICAgaUludGVyZmFjZSAgICAgICAgICAg
ICAgMCANCiAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6DQogICAgICAgIGJMZW5ndGggICAgICAg
ICAgICAgICAgIDcNCiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQ0KICAgICAgICBi
RW5kcG9pbnRBZGRyZXNzICAgICAweDgzICBFUCAzIElODQogICAgICAgIGJtQXR0cmlidXRlcyAg
ICAgICAgICAgIDENCiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgSXNvY2hyb25v
dXMNCiAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQ0KICAgICAgICAgIFVz
YWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhDQogICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAw
eDAwMTEgIDF4IDE3IGJ5dGVzDQogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDENCiAg
ICAgIEVuZHBvaW50IERlc2NyaXB0b3I6DQogICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAg
IDcNCiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQ0KICAgICAgICBiRW5kcG9pbnRB
ZGRyZXNzICAgICAweDAzICBFUCAzIE9VVA0KICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAgICAg
ICAxDQogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIElzb2Nocm9ub3VzDQogICAg
ICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUNCiAgICAgICAgICBVc2FnZSBUeXBl
ICAgICAgICAgICAgICAgRGF0YQ0KICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAgMHgwMDExICAx
eCAxNyBieXRlcw0KICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAxDQogICAgSW50ZXJm
YWNlIERlc2NyaXB0b3I6DQogICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA5DQogICAgICBi
RGVzY3JpcHRvclR5cGUgICAgICAgICA0DQogICAgICBiSW50ZXJmYWNlTnVtYmVyICAgICAgICAz
DQogICAgICBiQWx0ZXJuYXRlU2V0dGluZyAgICAgICAzDQogICAgICBiTnVtRW5kcG9pbnRzICAg
ICAgICAgICAyDQogICAgICBiSW50ZXJmYWNlQ2xhc3MgICAgICAgMjI0IFdpcmVsZXNzDQogICAg
ICBiSW50ZXJmYWNlU3ViQ2xhc3MgICAgICAxIFJhZGlvIEZyZXF1ZW5jeQ0KICAgICAgYkludGVy
ZmFjZVByb3RvY29sICAgICAgMSBCbHVldG9vdGgNCiAgICAgIGlJbnRlcmZhY2UgICAgICAgICAg
ICAgIDAgDQogICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOg0KICAgICAgICBiTGVuZ3RoICAgICAg
ICAgICAgICAgICA3DQogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUNCiAgICAgICAg
YkVuZHBvaW50QWRkcmVzcyAgICAgMHg4MyAgRVAgMyBJTg0KICAgICAgICBibUF0dHJpYnV0ZXMg
ICAgICAgICAgICAxDQogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIElzb2Nocm9u
b3VzDQogICAgICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUNCiAgICAgICAgICBV
c2FnZSBUeXBlICAgICAgICAgICAgICAgRGF0YQ0KICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAg
MHgwMDE5ICAxeCAyNSBieXRlcw0KICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAxDQog
ICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOg0KICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAg
ICA3DQogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUNCiAgICAgICAgYkVuZHBvaW50
QWRkcmVzcyAgICAgMHgwMyAgRVAgMyBPVVQNCiAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAg
ICAgMQ0KICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBJc29jaHJvbm91cw0KICAg
ICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lDQogICAgICAgICAgVXNhZ2UgVHlw
ZSAgICAgICAgICAgICAgIERhdGENCiAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDAxOSAg
MXggMjUgYnl0ZXMNCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMQ0KICAgIEludGVy
ZmFjZSBEZXNjcmlwdG9yOg0KICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgOQ0KICAgICAg
YkRlc2NyaXB0b3JUeXBlICAgICAgICAgNA0KICAgICAgYkludGVyZmFjZU51bWJlciAgICAgICAg
Mw0KICAgICAgYkFsdGVybmF0ZVNldHRpbmcgICAgICAgNA0KICAgICAgYk51bUVuZHBvaW50cyAg
ICAgICAgICAgMg0KICAgICAgYkludGVyZmFjZUNsYXNzICAgICAgIDIyNCBXaXJlbGVzcw0KICAg
ICAgYkludGVyZmFjZVN1YkNsYXNzICAgICAgMSBSYWRpbyBGcmVxdWVuY3kNCiAgICAgIGJJbnRl
cmZhY2VQcm90b2NvbCAgICAgIDEgQmx1ZXRvb3RoDQogICAgICBpSW50ZXJmYWNlICAgICAgICAg
ICAgICAwIA0KICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoNCiAgICAgICAgYkxlbmd0aCAgICAg
ICAgICAgICAgICAgNw0KICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1DQogICAgICAg
IGJFbmRwb2ludEFkZHJlc3MgICAgIDB4ODMgIEVQIDMgSU4NCiAgICAgICAgYm1BdHRyaWJ1dGVz
ICAgICAgICAgICAgMQ0KICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBJc29jaHJv
bm91cw0KICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lDQogICAgICAgICAg
VXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGENCiAgICAgICAgd01heFBhY2tldFNpemUgICAg
IDB4MDAyMSAgMXggMzMgYnl0ZXMNCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMQ0K
ICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoNCiAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAg
ICAgNw0KICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1DQogICAgICAgIGJFbmRwb2lu
dEFkZHJlc3MgICAgIDB4MDMgIEVQIDMgT1VUDQogICAgICAgIGJtQXR0cmlidXRlcyAgICAgICAg
ICAgIDENCiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgSXNvY2hyb25vdXMNCiAg
ICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQ0KICAgICAgICAgIFVzYWdlIFR5
cGUgICAgICAgICAgICAgICBEYXRhDQogICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwMjEg
IDF4IDMzIGJ5dGVzDQogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDENCiAgICBJbnRl
cmZhY2UgRGVzY3JpcHRvcjoNCiAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDkNCiAgICAg
IGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDQNCiAgICAgIGJJbnRlcmZhY2VOdW1iZXIgICAgICAg
IDMNCiAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgICAgIDUNCiAgICAgIGJOdW1FbmRwb2ludHMg
ICAgICAgICAgIDINCiAgICAgIGJJbnRlcmZhY2VDbGFzcyAgICAgICAyMjQgV2lyZWxlc3MNCiAg
ICAgIGJJbnRlcmZhY2VTdWJDbGFzcyAgICAgIDEgUmFkaW8gRnJlcXVlbmN5DQogICAgICBiSW50
ZXJmYWNlUHJvdG9jb2wgICAgICAxIEJsdWV0b290aA0KICAgICAgaUludGVyZmFjZSAgICAgICAg
ICAgICAgMCANCiAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6DQogICAgICAgIGJMZW5ndGggICAg
ICAgICAgICAgICAgIDcNCiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQ0KICAgICAg
ICBiRW5kcG9pbnRBZGRyZXNzICAgICAweDgzICBFUCAzIElODQogICAgICAgIGJtQXR0cmlidXRl
cyAgICAgICAgICAgIDENCiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgSXNvY2hy
b25vdXMNCiAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQ0KICAgICAgICAg
IFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhDQogICAgICAgIHdNYXhQYWNrZXRTaXplICAg
ICAweDAwMzEgIDF4IDQ5IGJ5dGVzDQogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDEN
CiAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6DQogICAgICAgIGJMZW5ndGggICAgICAgICAgICAg
ICAgIDcNCiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQ0KICAgICAgICBiRW5kcG9p
bnRBZGRyZXNzICAgICAweDAzICBFUCAzIE9VVA0KICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAg
ICAgICAxDQogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIElzb2Nocm9ub3VzDQog
ICAgICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUNCiAgICAgICAgICBVc2FnZSBU
eXBlICAgICAgICAgICAgICAgRGF0YQ0KICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAgMHgwMDMx
ICAxeCA0OSBieXRlcw0KICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAxDQpEZXZpY2Ug
U3RhdHVzOiAgICAgMHgwMDAzDQogIFNlbGYgUG93ZXJlZA0KICBSZW1vdGUgV2FrZXVwIEVuYWJs
ZWQNCg0KPiBSZWdhcmRzDQo+IA0KPiBNYXJjZWwNCj4gDQoNCkJlc3Qgd2lzaGVzLA0KQ29zdGEg
WWFvDQo=

2011-11-09 14:41:40

by Marcel Holtmann

[permalink] [raw]
Subject: RE: [PATCH] Bluetooth: btusb: Add support for Qualcomm Atheros composite chip 3006

Hi Costa,

please do not top post on this mailing list. Otherwise I am just
ignoring your emails from the next time.

> For your first comment,
> Yes, we can just add device with .driver_info in btusb_table, not in blacklist_table.
>
> For your other comments,
> As the device has 4 USB interfaces and interface 2 is for Bluetooth function. We need to bypass the IF state in btusb.c as follow:
> if (intf->cur_altsetting->desc.bInterfaceNuber !=0)
> return -ENODEV;
>
> So we use a composite_device_table matching mechanism and use forward jump to bypass the bInterfaceNumber check.
> And other vendors also can add their composite device in the composite_device_table to bypass the check.

And this can also be done via the .driver_info to select what interfaces
to expect. So please get rid of the composite table.

And post the content of /proc/bus/usb/devices so that I see how your
enpoints do look like.

Regards

Marcel



2011-11-09 11:30:57

by Yao, Costa

[permalink] [raw]
Subject: RE: [PATCH] Bluetooth: btusb: Add support for Qualcomm Atheros composite chip 3006

SGkgTWFyY2VsLA0KICAgDQpGb3IgeW91ciBmaXJzdCBjb21tZW50LCANClllcywgd2UgY2FuIGp1
c3QgYWRkIGRldmljZSB3aXRoIC5kcml2ZXJfaW5mbyBpbiBidHVzYl90YWJsZSwgbm90IGluIGJs
YWNrbGlzdF90YWJsZS4NCg0KRm9yIHlvdXIgb3RoZXIgY29tbWVudHMsDQpBcyB0aGUgZGV2aWNl
IGhhcyA0IFVTQiBpbnRlcmZhY2VzIGFuZCBpbnRlcmZhY2UgMiBpcyBmb3IgQmx1ZXRvb3RoIGZ1
bmN0aW9uLiBXZSBuZWVkIHRvIGJ5cGFzcyB0aGUgSUYgc3RhdGUgaW4gYnR1c2IuYyBhcyBmb2xs
b3c6DQogICAgICBpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51YmVy
ICE9MCkNCiAgICAgIHJldHVybiAtRU5PREVWOw0KICAgDQpTbyB3ZSB1c2UgYSBjb21wb3NpdGVf
ZGV2aWNlX3RhYmxlIG1hdGNoaW5nIG1lY2hhbmlzbSBhbmQgdXNlIGZvcndhcmQganVtcCB0byBi
eXBhc3MgdGhlIGJJbnRlcmZhY2VOdW1iZXIgY2hlY2suDQpBbmQgb3RoZXIgdmVuZG9ycyBhbHNv
IGNhbiBhZGQgdGhlaXIgY29tcG9zaXRlIGRldmljZSBpbiB0aGUgY29tcG9zaXRlX2RldmljZV90
YWJsZSB0byBieXBhc3MgdGhlIGNoZWNrLg0KDQpCZXN0IHdpc2hlcywNCkNvc3RhIHlhbw0KDQog
ICANCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IE1hcmNlbCBIb2x0bWFubiBb
bWFpbHRvOm1hcmNlbEBob2x0bWFubi5vcmddIA0KU2VudDogMjAxMeW5tDEx5pyIOeaXpSAxNTo0
OQ0KVG86IFlhbywgQ29zdGENCkNjOiBwYWRvdmFuQHByb2Z1c2lvbi5tb2JpOyBsaW51eC1ibHVl
dG9vdGhAdmdlci5rZXJuZWwub3JnDQpTdWJqZWN0OiBSZTogW1BBVENIXSBCbHVldG9vdGg6IGJ0
dXNiOiBBZGQgc3VwcG9ydCBmb3IgUXVhbGNvbW0gQXRoZXJvcyBjb21wb3NpdGUgY2hpcCAzMDA2
DQoNCkhpIENvc3RhLA0KDQo+IEFSMzAwNiBpcyBhIGNvbXBvc2l0ZSBkZXZpY2UsIGFuZCBpbnRl
cmZhY2UgMCBpcyB1c2VkIGZvciBoaWQgZnVuY3Rpb24sIG5vdCBmb3IgYmx1ZXRvb3RoIGZ1bmN0
aW9uLg0KPiBXZSBzaG91bGQgbWFrZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6DQo+IDEgQmxhY2ts
aXN0IEFSMzAwNiBQSUQvVklEIGluIGJ0dXNiX3RhYmxlDQo+IDIgQWRkIGNvbXBvc2l0ZV9kZXZp
Y2VfdGFibGUgaW4gYnR1c2IuYyB0byByZWdpc3RlciBjb21wb3NpdGUgZGV2aWNlDQo+IDMgRm9y
IEFSMzAwNiBjb21wb3NpdGUgZGV2aWNlLCBpbnRlcmZhY2UgMyBpcyB1c2VkIGZvciBkYXRhLT5p
c29jDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBDb3N0YSBZYW8gPGNxeWFvQHFjYS5xdWFsY29tbS5j
b20+DQo+IC0tLQ0KPiAgZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyB8ICAgMzcgKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiAgMSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNl
cnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1
ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIA0KPiBpbmRleCA5ZGIy
NDc2Li5kMzA2ZGVjIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jDQo+
ICsrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMNCj4gQEAgLTU1LDYgKzU1LDcgQEAgc3Rh
dGljIHN0cnVjdCB1c2JfZHJpdmVyIGJ0dXNiX2RyaXZlcjsNCj4gICNkZWZpbmUgQlRVU0JfQlJP
S0VOX0lTT0MJMHgyMA0KPiAgI2RlZmluZSBCVFVTQl9XUk9OR19TQ09fTVRVCTB4NDANCj4gICNk
ZWZpbmUgQlRVU0JfQVRIMzAxMgkJMHg4MA0KPiArI2RlZmluZSBCVFVTQl9BVEgzMDA2CQkweDAx
MDANCj4gIA0KPiAgc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGJ0dXNiX3RhYmxlW10gPSB7
DQo+ICAJLyogR2VuZXJpYyBCbHVldG9vdGggVVNCIGRldmljZSAqLw0KPiBAQCAtMTAwLDYgKzEw
MSw5IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gew0KPiAg
CS8qIENhbnlvbiBDTi1CVFUxIHdpdGggSElEIGludGVyZmFjZXMgKi8NCj4gIAl7IFVTQl9ERVZJ
Q0UoMHgwYzEwLCAweDAwMDApIH0sDQo+ICANCj4gKwkvKiBRdWFsY29tbSBBdGhlcm9zIHdpdGgg
SElEIGludGVyZmFjZXMgKi8NCj4gKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDYpIH0sDQo+
ICsNCj4gIAl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8NCj4gIH07DQo+ICANCj4gQEAgLTEy
Miw2ICsxMjYsNyBAQCBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYmxhY2tsaXN0X3RhYmxl
W10gPSB7DQo+ICANCj4gIAkvKiBBdGhlcm9zIDMwMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8N
Cj4gIAl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9B
VEgzMDEyIH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4MGNmMywgMHgzMDA2KSwgLmRyaXZlcl9pbmZv
ID0gQlRVU0JfQVRIMzAwNiB9LA0KPiAgDQo+ICAJLyogQXRoZXJvcyBBUjVCQlUxMiB3aXRoIHNm
bGFzaCBmaXJtd2FyZSAqLw0KPiAgCXsgVVNCX0RFVklDRSgweDA0ODksIDB4ZTAyYyksIC5kcml2
ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LCBAQCANCj4gLTE3OSw2ICsxODQsMTggQEAgc3RhdGlj
IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGJsYWNrbGlzdF90YWJsZVtdID0gew0KPiAgCXsgfQkvKiBU
ZXJtaW5hdGluZyBlbnRyeSAqLw0KPiAgfTsNCg0KSSBkbyBub3QgdW5kZXJzdGFuZCB3aHkgdGhl
IGRldmljZSBoYXMgdG8gYmUgaW4gYm90aCB0YWJsZXMuIFRoYXQgbWFrZXMgbm8gc2Vuc2UgdG8g
bWUuDQogDQo+ICsvKg0KPiArICogRm9yIGNvbXBvc2l0ZSBkZXZpY2UsIGludGVyZmFjZSAwIG1h
eSBiZSBub3QgZm9yIGJsdWV0b290aCBmdW5jdGlvbi4NCj4gKyAqIEl0IGlzIGJldHRlciB0byBs
ZXQgdGhlIHZlbmRvciBjb2RlIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbi4NCj4gKyAqIFNvLCB3
ZSB1c2UgY29tcG9zaXRlX2RldmljZV90YWJsZSB0byByZWNvcmQgdGhlIGNvbXBvc2l0ZSBkZXZp
Y2VzLg0KPiArICovDQo+ICtzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY29tcG9zaXRlX2Rl
dmljZV90YWJsZVtdID0gew0KPiArCS8qIFF1YWxjb21tIEF0aGVyb3MgY29tcG9zaXRlIGRldmlj
ZSAzMDA2ICovDQo+ICsJeyBVU0JfREVWSUNFKDB4MGNmMywgMHgzMDA2KSB9LA0KPiArDQo+ICsJ
eyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovDQo+ICt9Ow0KPiArDQoNCkFuZCBhZ2FpbiwgYW5v
dGhlciAzcmQgdGFibGUgd2l0aCB0aGUgc2FtZSBlbnRyeS4gV2h5IGRvIHlvdSBuZWVkIHRoaXM/
DQoNCj4gICNkZWZpbmUgQlRVU0JfTUFYX0lTT0NfRlJBTUVTCTEwDQo+ICANCj4gICNkZWZpbmUg
QlRVU0JfSU5UUl9SVU5OSU5HCTANCj4gQEAgLTkxMiwxMyArOTI5LDI1IEBAIHN0YXRpYyBpbnQg
YnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsDQo+ICAJc3RydWN0IGJ0dXNi
X2RhdGEgKmRhdGE7DQo+ICAJc3RydWN0IGhjaV9kZXYgKmhkZXY7DQo+ICAJaW50IGksIGVycjsN
Cj4gKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqbWF0Y2hfY29tcF9kZXY7DQo+ICANCj4g
IAlCVF9EQkcoImludGYgJXAgaWQgJXAiLCBpbnRmLCBpZCk7DQo+ICANCj4gKwkvKiBGb3IgY29t
cG9zaXRlIGRldmljZQ0KPiArCSogaXQgbWF5IG5vdCB0aGUgY2FzZSB0aGF0IGludGVyZmFjZSAw
IGlzIGZvciBibHVldG9vdGggZnVuY3Rpb24uDQo+ICsJKi8NCj4gKwltYXRjaF9jb21wX2RldiA9
IHVzYl9tYXRjaF9pZChpbnRmLCBjb21wb3NpdGVfZGV2aWNlX3RhYmxlKTsNCj4gKwlpZiAobWF0
Y2hfY29tcF9kZXYpIHsNCj4gKwkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRl
cmZhY2VOdW1iZXIgIT0gMikNCj4gKwkJCXJldHVybiAtRU5PREVWOw0KPiArCQlnb3RvIG1hdGNo
X2lkOw0KPiArCX0NCj4gKw0KDQpTbyBzZXJpb3VzbHksIHRoaXMgY2FuIGJlIGRvbmUgdmlhIHRo
ZSBtYWluIHRhYmxlIGFuZCAuZHJpdmVyX2luZm8uIFRoZSBjb21wb3NpdGUgdGFibGUgaXMgdG90
YWwgd2FzdGUuDQoNCj4gIAkvKiBpbnRlcmZhY2UgbnVtYmVycyBhcmUgaGFyZGNvZGVkIGluIHRo
ZSBzcGVjICovDQo+ICAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VO
dW1iZXIgIT0gMCkNCj4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ICANCj4gK21hdGNoX2lkOg0KDQpJ
IGRvIG5vdCBsaWtlIHRoaXMgZm9yd2FyZCBqdW1wLg0KDQo+ICAJaWYgKCFpZC0+ZHJpdmVyX2lu
Zm8pIHsNCj4gIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKm1hdGNoOw0KPiAgCQltYXRj
aCA9IHVzYl9tYXRjaF9pZChpbnRmLCBibGFja2xpc3RfdGFibGUpOyBAQCAtOTM4LDcgKzk2Nyw4
IEBAIA0KPiBzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRm
LA0KPiAgCWlmIChpZ25vcmVfc25pZmZlciAmJiBpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9TTklG
RkVSKQ0KPiAgCQlyZXR1cm4gLUVOT0RFVjsNCj4gIA0KPiAtCWlmIChpZC0+ZHJpdmVyX2luZm8g
JiBCVFVTQl9BVEgzMDEyKSB7DQo+ICsJaWYgKChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9BVEgz
MDEyKSB8fA0KPiArCQkJCShpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9BVEgzMDA2KSkgew0KPiAg
CQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7DQo+
ICANCj4gIAkJLyogT2xkIGZpcm13YXJlIHdvdWxkIG90aGVyd2lzZSBsZXQgYXRoM2sgZHJpdmVy
IGxvYWQgQEAgLTEwNjIsNiANCj4gKzEwOTIsMTEgQEAgc3RhdGljIGludCBidHVzYl9wcm9iZShz
dHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwNCj4gIAkJfQ0KPiAgCX0NCj4gIA0KPiArCWlmIChp
ZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9BVEgzMDA2KSB7DQo+ICsJCUJUX0VSUigiaGFyZGNvZGVk
OiBJbnRlcmZhY2UgMyIpOw0KPiArCQlkYXRhLT5pc29jID0gdXNiX2lmbnVtX3RvX2lmKGRhdGEt
PnVkZXYsIDMpOw0KPiArCX0NCj4gKw0KPiAgCWlmIChkYXRhLT5pc29jKSB7DQo+ICAJCWVyciA9
IHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZidHVzYl9kcml2ZXIsDQo+ICAJCQkJCQkJZGF0
YS0+aXNvYywgZGF0YSk7DQoNCkFjdHVhbGx5IEkgYW0gbW9yZSBhbmQgbW9yZSB0aGlua2luZyB0
aGF0IHNvbWV0aGluZyBpcyBkb25lIGhlcmUgd2F5IHRvbyBjb21wbGljYXRlZC4gUGxlYXNlIHBv
c3QgdGhlIC9wcm9jL2J1cy91c2IvZGV2aWNlcyBjb250ZW50IGZvciB0aGlzIGRldmljZSBiZWZv
cmUgYW5kIGFmdGVyIGZpcm13YXJlIGdvdCBsb2FkZWQuDQoNClJlZ2FyZHMNCg0KTWFyY2VsDQoN
Cg0K

2011-11-09 07:48:33

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: btusb: Add support for Qualcomm Atheros composite chip 3006

Hi Costa,

> AR3006 is a composite device, and interface 0 is used for hid function, not for bluetooth function.
> We should make the following changes:
> 1 Blacklist AR3006 PID/VID in btusb_table
> 2 Add composite_device_table in btusb.c to register composite device
> 3 For AR3006 composite device, interface 3 is used for data->isoc
>
> Signed-off-by: Costa Yao <[email protected]>
> ---
> drivers/bluetooth/btusb.c | 37 ++++++++++++++++++++++++++++++++++++-
> 1 files changed, 36 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index 9db2476..d306dec 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -55,6 +55,7 @@ static struct usb_driver btusb_driver;
> #define BTUSB_BROKEN_ISOC 0x20
> #define BTUSB_WRONG_SCO_MTU 0x40
> #define BTUSB_ATH3012 0x80
> +#define BTUSB_ATH3006 0x0100
>
> static struct usb_device_id btusb_table[] = {
> /* Generic Bluetooth USB device */
> @@ -100,6 +101,9 @@ static struct usb_device_id btusb_table[] = {
> /* Canyon CN-BTU1 with HID interfaces */
> { USB_DEVICE(0x0c10, 0x0000) },
>
> + /* Qualcomm Atheros with HID interfaces */
> + { USB_DEVICE(0x0cf3, 0x3006) },
> +
> { } /* Terminating entry */
> };
>
> @@ -122,6 +126,7 @@ static struct usb_device_id blacklist_table[] = {
>
> /* Atheros 3012 with sflash firmware */
> { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
> + { USB_DEVICE(0x0cf3, 0x3006), .driver_info = BTUSB_ATH3006 },
>
> /* Atheros AR5BBU12 with sflash firmware */
> { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
> @@ -179,6 +184,18 @@ static struct usb_device_id blacklist_table[] = {
> { } /* Terminating entry */
> };

I do not understand why the device has to be in both tables. That makes
no sense to me.

> +/*
> + * For composite device, interface 0 may be not for bluetooth function.
> + * It is better to let the vendor code to handle this situation.
> + * So, we use composite_device_table to record the composite devices.
> + */
> +static struct usb_device_id composite_device_table[] = {
> + /* Qualcomm Atheros composite device 3006 */
> + { USB_DEVICE(0x0cf3, 0x3006) },
> +
> + { } /* Terminating entry */
> +};
> +

And again, another 3rd table with the same entry. Why do you need this?

> #define BTUSB_MAX_ISOC_FRAMES 10
>
> #define BTUSB_INTR_RUNNING 0
> @@ -912,13 +929,25 @@ static int btusb_probe(struct usb_interface *intf,
> struct btusb_data *data;
> struct hci_dev *hdev;
> int i, err;
> + const struct usb_device_id *match_comp_dev;
>
> BT_DBG("intf %p id %p", intf, id);
>
> + /* For composite device
> + * it may not the case that interface 0 is for bluetooth function.
> + */
> + match_comp_dev = usb_match_id(intf, composite_device_table);
> + if (match_comp_dev) {
> + if (intf->cur_altsetting->desc.bInterfaceNumber != 2)
> + return -ENODEV;
> + goto match_id;
> + }
> +

So seriously, this can be done via the main table and .driver_info. The
composite table is total waste.

> /* interface numbers are hardcoded in the spec */
> if (intf->cur_altsetting->desc.bInterfaceNumber != 0)
> return -ENODEV;
>
> +match_id:

I do not like this forward jump.

> if (!id->driver_info) {
> const struct usb_device_id *match;
> match = usb_match_id(intf, blacklist_table);
> @@ -938,7 +967,8 @@ static int btusb_probe(struct usb_interface *intf,
> if (ignore_sniffer && id->driver_info & BTUSB_SNIFFER)
> return -ENODEV;
>
> - if (id->driver_info & BTUSB_ATH3012) {
> + if ((id->driver_info & BTUSB_ATH3012) ||
> + (id->driver_info & BTUSB_ATH3006)) {
> struct usb_device *udev = interface_to_usbdev(intf);
>
> /* Old firmware would otherwise let ath3k driver load
> @@ -1062,6 +1092,11 @@ static int btusb_probe(struct usb_interface *intf,
> }
> }
>
> + if (id->driver_info & BTUSB_ATH3006) {
> + BT_ERR("hardcoded: Interface 3");
> + data->isoc = usb_ifnum_to_if(data->udev, 3);
> + }
> +
> if (data->isoc) {
> err = usb_driver_claim_interface(&btusb_driver,
> data->isoc, data);

Actually I am more and more thinking that something is done here way too
complicated. Please post the /proc/bus/usb/devices content for this
device before and after firmware got loaded.

Regards

Marcel