Return-Path: Message-ID: From: Claudio Takahasi To: bluez-devel@lists.sourceforge.net Subject: Re: [Bluez-devel] hcid D-Bus patch In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_15171_21988669.1127495715625" References: <1127292701.495.11.camel@localhost.localdomain> <1127398647.5344.24.camel@blade> <1127411650.12287.15.camel@blade> Sender: bluez-devel-admin@lists.sourceforge.net Errors-To: bluez-devel-admin@lists.sourceforge.net Reply-To: bluez-devel@lists.sourceforge.net List-Unsubscribe: , List-Id: BlueZ development List-Post: List-Help: List-Subscribe: , List-Archive: Date: Fri, 23 Sep 2005 14:15:15 -0300 ------=_Part_15171_21988669.1127495715625 Content-Type: multipart/alternative; boundary="----=_Part_15172_28611206.1127495715625" ------=_Part_15172_28611206.1127495715625 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi folks, Sorry, but the last patch(hcid_dbus_0007.patch) was not based on the latest CVS version. This new one is correct. Regards, Claudio. On 9/23/05, Claudio Takahasi wrote: > > Hi folks, > > This patch implements inquiry, periodic inquiry, role switch and cancel > periodic inquiry. > > Suggestions and comments are welcome! > > Regards, > Claudio > > > >>> Next action > 1. move shared codes to common directory > 2. fix the error code format for EFailed messages > 3. handle multiple devices > 4. develop other services > > >>> Configuration file > location: /etc/dbus-1/system.d/hcid.conf > The D-Bus configuration file is required for security policies. > > >>> How test > This is the easiest way to test the hcid D-Bus services. Another option i= s > develop a "c" client > or a python client. > > //Sending Get Device Request > $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hc= i > org.bluez.hci.GetDevReq > > //Sending Inquiry Request > 1o. param: length > 2o. param: num response > 3o. param: flags (0 or 1) > $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hc= i > org.bluez.hci.InquiryReq byte:4 byte:10 uint16:0 > comment: We have develop a client to extract the reply message arguments > > //Sending Periodic Inquiry Request > 1o. param: length > 2o. param: min period > 3o. param: max period > $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hc= i > org.bluez.hci.PeriodicInquiryReq byte:4 byte:27 byte:49 > > //Sending Cancel Periodic Inquiry Request > $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hc= i > org.bluez.hci.CancelPeriodicInqReq > > //Sending Role Switch Request > 1o. param: Remote device > 2o. param: Role > $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hc= i > org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:1 > $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hc= i > org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:0 > > > ------=_Part_15172_28611206.1127495715625 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi folks,

Sorry, but the last patch(hcid_dbus_0007.patch) was not
based on the latest CVS version.


This new one is correct.

Regards,
Claudio.


On 9/23/05, Claudio Takahasi <ck= takahasi@gmail.com> wrote:
Hi folks,

This patch implements inquiry, periodic inquiry, role switch and cancel periodic inquiry.

Suggestions and comments are welcome!

Regards,
Claudio


>>> Next action
1. move shared codes to common directory
2. fix the error code format for EFailed messages
3. handle multiple devices
4. develop other services

>>> Configuration file
location: /etc/dbus-1/system.d/hcid.conf
The D-Bus configuration file is required for security policies.

>>> How test
This is the easiest way to test the hcid D-Bus services. Another option is = develop a "c" client
or a python client.

//Sending Get Device Request
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.GetDevReq

//Sending Inquiry Request
1o. param: length
2o. param: num response
3o. param: flags (0 or 1)
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.InquiryReq byte:4 byte:10 uint16:0
comment: We have develop a client to extract the reply message arguments
//Sending Periodic Inquiry Request
1o. param: length
2o. param: min period
3o. param: max period
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.PeriodicInquiryReq byte:4 byte:27 byte:49

//Sending Cancel Periodic Inquiry Request
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.CancelPeriodicInqReq

//Sending Role Switch Request
1o. param: Remote device
2o. param: Role
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:1
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:0



------=_Part_15172_28611206.1127495715625-- ------=_Part_15171_21988669.1127495715625 Content-Type: application/octet-stream; name="hcid_dbus_0008.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hcid_dbus_0008.patch" LS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL2hjaWQvZGJ1cy5oCTE5NjktMTItMzEgMjE6MDA6MDAu MDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC1kYnVzL2hjaWQvZGJ1cy5o CTIwMDUtMDktMjMgMTA6MDg6MTYuMDAwMDAwMDAwIC0wMzAwCkBAIC0wLDAgKzEsMTUzIEBACisv KgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKKyAq CisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgIFF1YWxjb21tIEluY29ycG9yYXRlZAorICog IENvcHlyaWdodCAoQykgMjAwMi0yMDAzICBNYXhpbSBLcmFzbnlhbnNreSA8bWF4a0BxdWFsY29t bS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgIE1hcmNlbCBIb2x0bWFubiA8bWFy Y2VsQGhvbHRtYW5uLm9yZz4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK KyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiAg VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MKKyAqICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqICBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJ R0hUUy4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQg QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElO RElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgCisgKiAgV0hB VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU SEVSIElOIEFOIAorICogIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBU T1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIAorICogIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogIEFMTCBM SUFCSUxJVFksIElOQ0xVRElORyBMSUFCSUxJVFkgRk9SIElORlJJTkdFTUVOVCBPRiBBTlkgUEFU RU5UUywgCisgKiAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFU SU5HIFRPIFVTRSBPRiBUSElTIAorICogIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCisgKgorICoK KyAqICAkSWQ6IGRidXMuaCx2IDAuMSAyMDA1LzA5LzE2IDA4OjAwOjAwIGhvbHRtYW5uIEV4cCAk CisgKi8KKyAKKyNpZm5kZWYgX19IX0JMVUVaX0RCVVNfSF9fCisjZGVmaW5lIF9fSF9CTFVFWl9E QlVTX0hfXworCisjZGVmaW5lIF9fRU5EX1NJR19fIERCVVNfVFlQRV9JTlZBTElEX0FTX1NUUklO RworCisvKiBibHVldG9vdGhkIEJ1cyBuYW1lICovCisjZGVmaW5lIEJMVUVaX0RCVVNfTkFNRQkJ Im9yZy5ibHVleiIKKworCisvKiA9PT09PSBIQ0kgZGVmaW5pdGlvbnMgPT09PT0gKi8KKyNkZWZp bmUgQkxVRVpfREJVU19IQ0lfUEFUSAkJIi9vcmcvYmx1ZXovaGNpIgorI2RlZmluZSBCTFVFWl9E QlVTX0hDSV9JTlRFUkZBQ0UJQkxVRVpfREJVU19OQU1FIi5oY2kiCisKKy8vSENJIHNpZ25hbHMK KyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9TVEFSVAkJIklucXVpcnlTdGFydFNpZyIK KyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9DT01QTEVURQkJIklucXVpcnlDb21wbGV0 ZVNpZyIKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9SRVNVTFQJCSJJbnF1aXJ5UmVz dWx0U2lnIgorI2RlZmluZSBCTFVFWl9EQlVTX0hDSV9TSUdfUkVNT1RFX05BTUUJCSJSZW1vdGVO YW1lU2lnIgorCisvL0hDSSBQcm92aWRlZCBzZXJ2aWNlcworI2RlZmluZSBIQ0lfR0VUX0RFVklD RVNfUkVRCQkJIkdldERldlJlcSIKKyNkZWZpbmUgSENJX1BFUklPRElDX0lOUV9SRVEJCQkiUGVy aW9kaWNJbnFSZXEiCisjZGVmaW5lIEhDSV9DQU5DRUxfUEVSSU9ESUNfSU5RX1JFUQkJIkNhbmNl bFBlcmlvZGljSW5xUmVxIgorI2RlZmluZSBIQ0lfSU5RX1JFUQkJCQkiSW5xdWlyeVJlcSIKKyNk ZWZpbmUgSENJX1JPTEVfU1dJVENIX1JFUQkJCSJSb2xlU3dpdGNoUmVxIgorCisvL0hDSSBzaWdu YXR1cmVzCisjZGVmaW5lIEhDSV9HRVRfREVWSUNFU19SRVFfU0lHTkFUVVJFICAgICAgICAgICAg CV9fRU5EX1NJR19fCisKKyNkZWZpbmUgSENJX1BFUklPRElDX0lOUV9SRVFfU0lHTkFUVVJFCQkg ICAgICAgIERCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfQllURV9B U19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX0JZVEVfQVNfU1RSSU5HXAorCQkJCQkJCV9fRU5E X1NJR19fCisJCQkJCQkJCisjZGVmaW5lIEhDSV9DQU5DRUxfUEVSSU9ESUNfSU5RX1JFUV9TSUdO QVRVUkUJCV9fRU5EX1NJR19fCisKKyNkZWZpbmUgSENJX0lOUV9SRVFfU0lHTkFUVVJFICAgICAg ICAgICAgICAgIAkgICAgCURCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZ UEVfQllURV9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX1VJTlQxNl9BU19TVFJJTkdcCisJ CQkJCQkJX19FTkRfU0lHX18KKwkJCQkJCQkKKyNkZWZpbmUgSENJX1JPTEVfU1dJVENIX1JFUV9T SUdOQVRVUkUgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkdcCisJ CQkJCQkJREJVU19UWVBFX0JZVEVfQVNfU1RSSU5HXAorCQkJCQkJCV9fRU5EX1NJR19fCisJCQkJ CQkJCisjZGVmaW5lIEhDSV9ERVZJQ0VfU1RSVUNUX1NJR05BVFVSRQkJREJVU19TVFJVQ1RfQkVH SU5fQ0hBUl9BU19TVFJJTkdcCisJCQkJCQlEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklOR1wKKwkJ CQkJCURCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HXAorCQkJCQkJREJVU19TVFJVQ1RfRU5EX0NI QVJfQVNfU1RSSU5HCisvKiB5eWEoc3MpKi8KKyNkZWZpbmUgSENJX0dFVF9ERVZJQ0VTX1JFUExZ X1NJR05BVFVSRQkJCURCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVf QllURV9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX0FSUkFZX0FTX1NUUklOR1wKKwkJCQkJ CQlIQ0lfREVWSUNFX1NUUlVDVF9TSUdOQVRVUkVcCisJCQkJCQkJX19FTkRfU0lHX18KKworI2Rl ZmluZSBIQ0lfSU5RX1JFUExZX1NJR05BVFVSRQkJCQlEQlVTX1NUUlVDVF9CRUdJTl9DSEFSX0FT X1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVT X1RZUEVfVUlOVDMyX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfVUlOVDE2X0FTX1NUUklO R1wKKwkJCQkJCQlEQlVTX1NUUlVDVF9FTkRfQ0hBUl9BU19TVFJJTkdcCisJCQkJCQkJX19FTkRf U0lHX18KKworCisvKiA9PT09PSBIQ0lDT05GSUcgZGVmaW5pdGlvbnMgPT09PT0gKi8KKy8vSENJ Q09ORklHIHNpZ25hbHMKKy8vSENJQ09ORklHIFByb3ZpZGVkIHNlcnZpY2VzCisvL0hDSUNPTkZJ RyBzaWduYXR1cmVzCisKKy8qID09PT09ICAgIFNEUCBkZWZpbml0aW9ucyAgICA9PT09PSAqLwor Ly9TRFAgc2lnbmFscworLy9TRFAgUHJvdmlkZWQgc2VydmljZXMKKy8vU0RQIHNpZ25hdHVyZXMK KworCisvKiA9PT09PSAgIFJGQ09NTSBkZWZpbml0aW9ucyAgPT09PT0gKi8KKy8vUkZDT01NIHNp Z25hbHMKKy8vUkZDT01NIFByb3ZpZGVkIHNlcnZpY2VzCisvL1JGQ09NTSBzaWduYXR1cmVzCisK KworLyogPT09PT0gICAgUEFOIGRlZmluaXRpb25zICAgID09PT09ICovCisvL1BBTiBzaWduYWxz CisvL1BBTiBQcm92aWRlZCBzZXJ2aWNlcworLy9QQU4gc2lnbmF0dXJlcworCisvKiA9PT09PSAg ICBISUQgZGVmaW5pdGlvbnMgICAgPT09PT0gKi8KKy8vSElEIHNpZ25hbHMKKy8vSElEIFByb3Zp ZGVkIHNlcnZpY2VzCisvL0hJRCBzaWduYXR1cmVzCisKKworLyogPT09PT0gQ29tbW9uIEVycm9y IG1lc3NhZ2VzIG9mIG9yZy5ibHVlei4gPT09PT0qLworI2RlZmluZSBCTFVFWl9EQlVTX0VSUl9G QUlMRUQgICAgICAgICAgICAgIEJMVUVaX0RCVVNfTkFNRSIuRUZhaWxlZCIKKyNkZWZpbmUgQkxV RVpfREJVU19FUlJfTk9fTUVNT1JZICAgICAgICAgICBCTFVFWl9EQlVTX05BTUUiLkVOb01lbW9y eSIKKy8vVE9ETyBXaGF0IGFyZSB0aGUgb3RoZXIgZXJyb3IgdHlwZXM/CisKKworLyogQkxVRVpf REJVU19FUlJfRkFJTEVECisgKiBFRmFpbGVkIGVycm9yIG1lc3NhZ2VzIHNpZ25hdHVyZSBpcyA6 IHNuaQorICogV2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgc3RyaW5nKGVycm9yIG1lc3Nh Z2UgZGVzY3JpcHRpb24pLAorICogdGhlIHNlY29uZCBpcyBhIHVpbnQxNiB0aGF0IGNvbnRhaW5z IHRoZSBlcnJvciBjbGFzcyhzeXN0ZW0sIGRidXMgb3IgaGNpKS4KKyAqIFRoZSBsYXN0IGFyZ3Vt ZW50IGlzIGEgaW50MzIgdGhhdCBjb250YWlucyB0aGUgZXJyb3IgY29kZShlcnJubyAKKyAqIGZv ciBzeXN0ZW0gZXJyb3JzLCBhIGRidXMgZXJyb3IgY29kZSBkZWZpbmVkIGJlbG93IG9yIGEgaGNp IGVycm9yKS4KKyAqIEZvciBoY2kgZXJyb3Igc2VlIHRoZSBibHVldG9vdGggc3BlY2lmaWNhdGlv bi4KKyAqLworIAorLyogZmlyc3QgYXJndW1lbnQgb2YgdGhlIGVycm9yIG1zZyAqLworI2RlZmlu ZSBCTFVFWl9FQ0xBU1NfU1lTVEVNICAgKDB4MDEpCisjZGVmaW5lIEJMVUVaX0VDTEFTU19EQlVT ICAgICAoMHgwMikKKyNkZWZpbmUgQkxVRVpfRUNMQVNTX0hDSSAgICAgICgweDAzKSAvKiBzZWUg Qmx1ZXRvb3RoIGVycm9yIGNvZGUgKi8KKworLyogRC1CdXMgZXJyb3IgY29kZSAoc2Vjb25kIGFy Z3VtZW50IG9mIHRoZSBlcnJvciBtc2cpKi8KKyNkZWZpbmUgQkxVRVpfRURCVVNfVU5LTk9XTl9N RVRIT0QgICAgICgweDAxKQorI2RlZmluZSBCTFVFWl9FREJVU19XUk9OR19TSUdOQVRVUkUgICAg KDB4MDIpCisjZGVmaW5lIEJMVUVaX0VEQlVTX1dST05HX1BBUkFNICAgICAgICAoMHgwMykKKyNk ZWZpbmUgQkxVRVpfRURCVVNfUkVDT1JEX05PVF9GT1VORCAgICgweDA0KQorCisvKiBCTFVFWl9E QlVTX0VSUl9OT19NRU1PUlkgKi8KKyNkZWZpbmUgQkxVRVpfREJVU19FUlJfTk9fTUVNT1JZX1NU UgkiTm8gbWVtb3J5IgorCisKKyNlbmRpZiAvKl9fSF9CTFVFWl9EQlVTX0hfXyovCi0tLSBibHVl ei11dGlscy1jdnMub3JpZy9oY2lkL2RidXMuYwkyMDA1LTA5LTIzIDE0OjA5OjI4LjAwMDAwMDAw MCAtMDMwMAorKysgYmx1ZXotdXRpbHMtY3ZzLWhjaWQtZGJ1cy9oY2lkL2RidXMuYwkyMDA1LTA5 LTIzIDE0OjAwOjUxLjAwMDAwMDAwMCAtMDMwMApAQCAtMzMsNiArMzMsOSBAQAogI2VuZGlmCiAK ICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3Rk Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2lu Y2x1ZGUgPHN5cy9zeXNsb2cuaD4KIApAQCAtNDUsMjMgKzQ4LDE1OSBAQAogI2luY2x1ZGUgImds aWItZWN0b215LmgiCiAKICNpbmNsdWRlICJoY2lkLmgiCisjaW5jbHVkZSAiZGJ1cy5oIgogCiBz dGF0aWMgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb247CiAKICNkZWZpbmUgVElNRU9VVCAoMzAg KiAxMDAwKQkJLyogMzAgc2Vjb25kcyAqLworI2RlZmluZSBCTFVFVE9PVEhfREVWSUNFX05BTUVf TEVOICAgICgxOCkKKyNkZWZpbmUgQkxVRVRPT1RIX0RFVklDRV9BRERSX0xFTiAgICAoMTgpCiAK ICNkZWZpbmUgU0VSVklDRV9OQU1FICJvcmcuYmx1ZXouUGluQWdlbnQiCiAjZGVmaW5lIElOVEVS RkFDRV9OQU1FIFNFUlZJQ0VfTkFNRQogI2RlZmluZSBSRVFVRVNUX05BTUUgIlBpblJlcXVlc3Qi CiAjZGVmaW5lIFBBVEhfTkFNRSAiL29yZy9ibHVlei9QaW5BZ2VudCIKIAotI2RlZmluZSBXUk9O R19BUkdTX0VSUk9SICJvcmcuYmx1ZXouRXJyb3IuV3JvbmdBcmdzIgogCiBzdHJ1Y3QgcGluX3Jl cXVlc3QgewogCWludCBkZXY7CiAJYmRhZGRyX3QgYmRhOwogfTsKIAorLyoKKyAqIFRoaXMgZnVu Y3Rpb24gc2hvdWxkIGJlIG1vdmVkIHRvIGEgY29tbW9uIGxpYnJhcnkKKyAqLworaW50IGZpbmRf Y29ubihpbnQgcywgaW50IGRldl9pZCwgbG9uZyBhcmcpCit7CisJc3RydWN0IGhjaV9jb25uX2xp c3RfcmVxICpjbCA9IE5VTEw7CisJc3RydWN0IGhjaV9jb25uX2luZm8gKmNpOworCWludCBpOwor CWludCByZXN1bHQgPSAwOworCQorCWlmICghKGNsID0gbWFsbG9jKDEwICogc2l6ZW9mKCpjaSkg KyBzaXplb2YoKmNsKSkpKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3QgYWxsb2NhdGUgbWVt b3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCQorCWNsLT5kZXZfaWQgICA9IGRldl9pZDsKKwlj bC0+Y29ubl9udW0gPSAxMDsKKwljaSAgICAgICAgICAgPSBjbC0+Y29ubl9pbmZvOworCisJaWYg KGlvY3RsKHMsIEhDSUdFVENPTk5MSVNULCAodm9pZCAqKSBjbCkpIHsKKwkJc3lzbG9nKExPR19F UlIsICJDYW4ndCBnZXQgY29ubmVjdGlvbiBsaXN0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IGNsLT5jb25uX251bTsgaSsrLCBjaSsrKSB7CisJCWlmICghYmFjbXAo KGJkYWRkcl90ICopIGFyZywgJmNpLT5iZGFkZHIpKSB7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8g Y2xlYW51cDsKKwkJfQorCX0KK2NsZWFudXA6CisJaWYoY2wpCisJCWZyZWUoY2wpOworCXJldHVy biByZXN1bHQ7Cit9CisKKy8qCisgKiBELUJ1cyBlcnJvciBtZXNzYWdlcyBmdW5jdGlvbnMgYW5k IGRlY2xhcmF0aW9ucy4KKyAqIFRoaXMgc2VjdGlvbiBzaG91bGQgYmUgbW92ZWQgdG8gYSBjb21t b24gZmlsZSAKKyAqIGluIHRoZSBmdXR1cmUKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0ICB7CisJ dWludDhfdCBjb2RlOworCWNvbnN0IGNoYXIgKnN0cjsKK31ibHVlel9lcnJvcl90OworCitzdGF0 aWMgY29uc3QgYmx1ZXpfZXJyb3JfdCBlcnJvcl9hcnJheVtdID0geworCXsgQkxVRVpfRURCVVNf VU5LTk9XTl9NRVRIT0QsICAgIk1ldGhvZCBub3QgZm91bmQifSwKKwl7IEJMVUVaX0VEQlVTX1dS T05HX1NJR05BVFVSRSwgICJXcm9uZyBtZXRob2Qgc2lnbmF0dXJlIn0sCisJeyBCTFVFWl9FREJV U19XUk9OR19QQVJBTSwgICAgICAiSW52YWxpZCBwYXJhbWV0ZXJzIn0sCisJeyBCTFVFWl9FREJV U19SRUNPUkRfTk9UX0ZPVU5ELCAiTm8gcmVjb3JkIGZvdW5kIn0sCisJeyAwLCBOVUxMIH0KK307 CisKK3N0YXRpYyBjb25zdCBjaGFyICpibHVlel9kYnVzX2Vycm9yX3RvX3N0cihjb25zdCB1aW50 MTZfdCBlY2xhc3MsIGNvbnN0IGludDMyX3QgZWNvZGUpIAoreworCWNvbnN0IGJsdWV6X2Vycm9y X3QgKnB0cjsKKwkKKwlpZiAoZWNsYXNzID09IEJMVUVaX0VDTEFTU19TWVNURU0pIHsKKwkJcmV0 dXJuIHN0cmVycm9yKGVjb2RlKTsKKwl9IGVsc2UgeyAvKiBCTFVFWl9FQ0xBU1NfREJVUyAqLwor CQkKKwkJZm9yIChwdHIgPSBlcnJvcl9hcnJheTsgcHRyLT5jb2RlOyBwdHIrKykgeworCQkJaWYo cHRyLT5jb2RlID09IGVjb2RlKSB7CisJCQkJcmV0dXJuIHB0ci0+c3RyOworCQkJfQorCQl9CisJ fQorCXJldHVybiBOVUxMOworfQorCitEQnVzTWVzc2FnZSAqYmx1ZXpfbmV3X2ZhaWx1cmVfbXNn KERCdXNNZXNzYWdlICptc2csIGNvbnN0IHVpbnQxNl90IGVjbGFzcywgY29uc3QgaW50MzJfdCBl Y29kZSkKK3sKKwlEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBO VUxMOworCWNvbnN0IGNoYXIgKmVycm9yX21zZyA9IE5VTEw7CisJCisJZXJyb3JfbXNnID0gYmx1 ZXpfZGJ1c19lcnJvcl90b19zdHIoZWNsYXNzLCBlY29kZSk7CisJCisJaWYgKGVycm9yX21zZykg eworCQorCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobXNnLCBCTFVFWl9EQlVTX0VS Ul9GQUlMRUQsIGVycm9yX21zZyk7CisJCisJCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5k KHJlcGx5LCAmaXRlcik7CisJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmaXRlciwg REJVU19UWVBFX1VJTlQxNiAsJmVjbGFzcyk7CisJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9i YXNpYygmaXRlciwgREJVU19UWVBFX0lOVDMyICwmZWNvZGUpOworCX0KKwkKKwlyZXR1cm4gcmVw bHk7Cit9CisKKy8qCisgKiBNZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb25zIG9iamVjdCB0YWJsZSBk ZWNsYXJhdGlvbgorICoKKyAqLworIAordHlwZWRlZiBEQnVzTWVzc2FnZSogKHNlcnZpY2VfaGFu ZGxlcl9mdW5jX3QpKERCdXNNZXNzYWdlICosIHZvaWQgKik7CisKK3R5cGVkZWYgc3RydWN0Cit7 CisJY29uc3QgY2hhciAgICAgICAgICAgICAqbmFtZTsKKwlzZXJ2aWNlX2hhbmRsZXJfZnVuY190 ICpoYW5kbGVyX2Z1bmM7CisJY29uc3QgY2hhciAgICAgICAgICAgICAqc2lnbmF0dXJlOworfXNl cnZpY2VfdGFibGVfdDsKKworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IGhjaV9tc2dfZnVuYyhE QnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0 aWMgREJ1c0hhbmRsZXJSZXN1bHQgaGNpX3NpZ25hbF9maWx0ZXIgKERCdXNDb25uZWN0aW9uICpj b25uLCBEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKTsKKworc3RhdGljIERCdXNNZXNzYWdl KiBoYW5kbGVfZ2V0X2RldmljZXNfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpOwor c3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfcGVyaW9kaWNfaW5xX3JlcShEQnVzTWVzc2FnZSAq bXNnLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2NhbmNlbF9wZXJp b2RpY19pbnFfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpOworc3RhdGljIERCdXNN ZXNzYWdlKiBoYW5kbGVfaW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKTsKK3N0 YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3JvbGVfc3dpdGNoX3JlcShEQnVzTWVzc2FnZSAqbXNn LCB2b2lkICpkYXRhKTsKKworCitzdGF0aWMgY29uc3QgREJ1c09iamVjdFBhdGhWVGFibGUgaGNp X3Z0YWJsZSA9IHsKKwlOVUxMLAorCSZoY2lfbXNnX2Z1bmMsCisJTlVMTCwKKwlOVUxMLAorCU5V TEwsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHNlcnZpY2VfdGFibGVfdCBoY2lfc2Vydmlj ZXNbXSA9IHsKKwl7SENJX0dFVF9ERVZJQ0VTX1JFUSwgICAgICAgICBoYW5kbGVfZ2V0X2Rldmlj ZXNfcmVxLCAgICAgICAgIEhDSV9HRVRfREVWSUNFU19SRVFfU0lHTkFUVVJFfSwKKwl7SENJX1BF UklPRElDX0lOUV9SRVEsICAgICAgICBoYW5kbGVfcGVyaW9kaWNfaW5xX3JlcSwgICAgICAgIEhD SV9QRVJJT0RJQ19JTlFfUkVRX1NJR05BVFVSRX0sCisJe0hDSV9DQU5DRUxfUEVSSU9ESUNfSU5R X1JFUSwgaGFuZGxlX2NhbmNlbF9wZXJpb2RpY19pbnFfcmVxLCBIQ0lfQ0FOQ0VMX1BFUklPRElD X0lOUV9SRVFfU0lHTkFUVVJFfSwKKwl7SENJX1JPTEVfU1dJVENIX1JFUSwgICAgICAgICBoYW5k bGVfcm9sZV9zd2l0Y2hfcmVxLCAgICAgICAgIEhDSV9ST0xFX1NXSVRDSF9SRVFfU0lHTkFUVVJF fSwKKwl7SENJX0lOUV9SRVEsICAgICAgICAgICAgICAgICBoYW5kbGVfaW5xX3JlcSwgICAgICAg ICAgICAgICAgIEhDSV9JTlFfUkVRX1NJR05BVFVSRX0sCQorCXtOVUxMLCBOVUxMLCBOVUxMfQor fTsKKwogc3RhdGljIHZvaWQgcmVwbHlfaGFuZGxlcl9mdW5jdGlvbihEQnVzUGVuZGluZ0NhbGwg KmNhbGwsIHZvaWQgKnVzZXJfZGF0YSkKIHsKIAlzdHJ1Y3QgcGluX3JlcXVlc3QgKnJlcSA9IChz dHJ1Y3QgcGluX3JlcXVlc3QgKikgdXNlcl9kYXRhOwpAQCAtMTcwLDggKzMwOSw5IEBACiAKIAli YXN3YXAoJnRtcCwgbG9jYWwpOyBsb2NhbF9hZGRyID0gYmF0b3N0cigmdG1wKTsKIAotCW1lc3Nh Z2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCgiL29yZy9ibHVlei9EZXZBZ2VudCIsCi0JCQkJ Im9yZy5ibHVlei5EZXZBZ2VudCIsICJJbnF1aXJ5U3RhcnQiKTsKKwltZXNzYWdlID0gZGJ1c19t ZXNzYWdlX25ld19zaWduYWwoQkxVRVpfREJVU19IQ0lfUEFUSCwKKwkJCQkJICBCTFVFWl9EQlVT X0hDSV9JTlRFUkZBQ0UsIAorCQkJCQkgIEJMVUVaX0RCVVNfSENJX1NJR19JTlFfU1RBUlQpOwog CWlmIChtZXNzYWdlID09IE5VTEwpIHsKIAkJc3lzbG9nKExPR19FUlIsICJDYW4ndCBhbGxvY2F0 ZSBELUJVUyBpbnF1aXJ5IHN0YXJ0IG1lc3NhZ2UiKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0yMDQs OCArMzQ0LDkgQEAKIAogCWJhc3dhcCgmdG1wLCBsb2NhbCk7IGxvY2FsX2FkZHIgPSBiYXRvc3Ry KCZ0bXApOwogCi0JbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKCIvb3JnL2JsdWV6 L0RldkFnZW50IiwKLQkJCQkib3JnLmJsdWV6LkRldkFnZW50IiwgIklucXVpcnlDb21wbGV0ZSIp OworCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChCTFVFWl9EQlVTX0hDSV9QQVRI LAorCQkJCUJMVUVaX0RCVVNfSENJX0lOVEVSRkFDRSwgCisJCQkJQkxVRVpfREJVU19IQ0lfU0lH X0lOUV9DT01QTEVURSk7CiAJaWYgKG1lc3NhZ2UgPT0gTlVMTCkgewogCQlzeXNsb2coTE9HX0VS UiwgIkNhbid0IGFsbG9jYXRlIEQtQlVTIGlucXVpcnkgY29tcGxldGUgbWVzc2FnZSIpOwogCQln b3RvIGZhaWxlZDsKQEAgLTI0MSw4ICszODIsOSBAQAogCWJhc3dhcCgmdG1wLCBsb2NhbCk7IGxv Y2FsX2FkZHIgPSBiYXRvc3RyKCZ0bXApOwogCWJhc3dhcCgmdG1wLCBwZWVyKTsgcGVlcl9hZGRy ID0gYmF0b3N0cigmdG1wKTsKIAotCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCgi L29yZy9ibHVlei9EZXZBZ2VudCIsCi0JCQkJIm9yZy5ibHVlei5EZXZBZ2VudCIsICJJbnF1aXJ5 UmVzdWx0Iik7CisJbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKEJMVUVaX0RCVVNf SENJX1BBVEgsCisJCQkJQkxVRVpfREJVU19IQ0lfSU5URVJGQUNFLCAKKwkJCQlCTFVFWl9EQlVT X0hDSV9TSUdfSU5RX1JFU1VMVCk7CiAJaWYgKG1lc3NhZ2UgPT0gTlVMTCkgewogCQlzeXNsb2co TE9HX0VSUiwgIkNhbid0IGFsbG9jYXRlIEQtQlVTIGlucXVpcnkgcmVzdWx0IG1lc3NhZ2UiKTsK IAkJZ290byBmYWlsZWQ7CkBAIC0yODAsOCArNDIyLDkgQEAKIAliYXN3YXAoJnRtcCwgbG9jYWwp OyBsb2NhbF9hZGRyID0gYmF0b3N0cigmdG1wKTsKIAliYXN3YXAoJnRtcCwgcGVlcik7IHBlZXJf YWRkciA9IGJhdG9zdHIoJnRtcCk7CiAKLQltZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19zaWdu YWwoIi9vcmcvYmx1ZXovRGV2QWdlbnQiLAotCQkJCSJvcmcuYmx1ZXouRGV2QWdlbnQiLCAiUmVt b3RlTmFtZSIpOworCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChCTFVFWl9EQlVT X0hDSV9QQVRILAorCQkJCUJMVUVaX0RCVVNfSENJX0lOVEVSRkFDRSwKKwkJCQlCTFVFWl9EQlVT X0hDSV9TSUdfUkVNT1RFX05BTUUpOwogCWlmIChtZXNzYWdlID09IE5VTEwpIHsKIAkJc3lzbG9n KExPR19FUlIsICJDYW4ndCBhbGxvY2F0ZSBELUJVUyByZW1vdGUgbmFtZSBtZXNzYWdlIik7CiAJ CWdvdG8gZmFpbGVkOwpAQCAtMzk4LDggKzU0MSw0MzAgQEAKIAkJcmV0dXJuIEZBTFNFOwogCX0K IAorCWRidXNfYnVzX3JlcXVlc3RfbmFtZShjb25uZWN0aW9uLCBCTFVFWl9EQlVTX05BTUUsIAor CQkJICAgICAgREJVU19OQU1FX0ZMQUdfUFJPSElCSVRfUkVQTEFDRU1FTlQsIAorCQkJICAgICAg JmVycm9yKTsKKwkKKwlpZiAoZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKwkJc3lzbG9n KExPR19FUlIsIkQtQnVzIEVycm9yOiAlc1xuIiwgZXJyb3IubWVzc2FnZSk7CisJCWRidXNfZXJy b3JfZnJlZSAoJmVycm9yKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkKKwlpZiAoIWRidXNfY29u bmVjdGlvbl9yZWdpc3Rlcl9vYmplY3RfcGF0aChjb25uZWN0aW9uLCBCTFVFWl9EQlVTX0hDSV9Q QVRILCAmaGNpX3Z0YWJsZSwgTlVMTCkpIHsKKwkJc3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVk IHRvIHJlZ2lzdGVyICVzIG9iamVjdCIsIEJMVUVaX0RCVVNfSENJX1BBVEgpOworCQlyZXR1cm4g RkFMU0U7CisJfQorCisJaWYgKCFkYnVzX2Nvbm5lY3Rpb25fYWRkX2ZpbHRlciAoY29ubmVjdGlv biwgaGNpX3NpZ25hbF9maWx0ZXIsIE5VTEwsIE5VTEwpKSB7CisJCXN5c2xvZyhMT0dfRVJSLCJE QlVTIGZhaWxlZCB0byBhZGQgZmlsdGVyIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisJCiAJZGJ1 c19jb25uZWN0aW9uX3NldF93YXRjaF9mdW5jdGlvbnMoY29ubmVjdGlvbiwKIAkJYWRkX3dhdGNo LCByZW1vdmVfd2F0Y2gsIHdhdGNoX3RvZ2dsZWQsIE5VTEwsIE5VTEwpOwogCiAJcmV0dXJuIFRS VUU7CiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICogIAorICogIFNlY3Rpb24gcmVzZXJ2ZWQgdG8gRC1CdXMg bWVzc2FnZSBoYW5kbGVycworICogIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgREJ1c0hhbmRsZXJS ZXN1bHQgaGNpX3NpZ25hbF9maWx0ZXIgKERCdXNDb25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2Fn ZSAqbXNnLCB2b2lkICpkYXRhKQoreworCURCdXNIYW5kbGVyUmVzdWx0IHJldCA9IERCVVNfSEFO RExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworCWNvbnN0IGNoYXIgKmlmYWNlOworCWNvbnN0 IGNoYXIgKm1ldGhvZDsKKworCWlmICghbXNnIHx8ICFjb25uKQorCQlyZXR1cm4gREJVU19IQU5E TEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7CisJCisJaWYgKGRidXNfbWVzc2FnZV9nZXRfdHlw ZSAobXNnKSAhPSBEQlVTX01FU1NBR0VfVFlQRV9TSUdOQUwpCisJCXJldHVybiBEQlVTX0hBTkRM RVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKKworCWlmYWNlID0gZGJ1c19tZXNzYWdlX2dldF9p bnRlcmZhY2UobXNnKTsKKwltZXRob2QgPSBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtc2cpOwor CQorCWlmIChzdHJjbXAoaWZhY2UsIERCVVNfSU5URVJGQUNFX0xPQ0FMKSA9PSAwKSB7CisJCWlm IChzdHJjbXAobWV0aG9kLCAiRGlzY29ubmVjdGVkIikgPT0gMCl7CisJCQlyZXQgPSBEQlVTX0hB TkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJCX0KKwl9IGVsc2UJaWYgKHN0cmNtcChpZmFjZSwgREJV U19JTlRFUkZBQ0VfREJVUykgPT0gMCkgeworCQkJaWYgKHN0cmNtcChtZXRob2QsICJOYW1lT3du ZXJDaGFuZ2VkIikgPT0gMCkgeworCQkJCXJldCA9IERCVVNfSEFORExFUl9SRVNVTFRfSEFORExF RDsKKwkJCX0KKwkJCWlmIChzdHJjbXAobWV0aG9kLCAiTmFtZUFjcXVpcmVkIikgPT0gMCkgewor CQkJCXJldCA9IERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKKwkJCX0KKwl9CisJcmV0dXJu IHJldDsKK30KK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBoY2lfbXNnX2Z1bmMoREJ1c0Nvbm5l Y3Rpb24gKmNvbm4sIAorCQkJCSAgICAgIERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpCit7 CisJY29uc3Qgc2VydmljZV90YWJsZV90ICpwdHJfaGFuZGxlcnMgPSAgaGNpX3NlcnZpY2VzOwor CURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJdWludDE2X3QgdHlwZTsKKwljb25zdCBjaGFy ICppZmFjZTsKKwljb25zdCBjaGFyICptZXRob2Q7CisJY29uc3QgY2hhciAqc2lnbmF0dXJlOwor CXVpbnQ4X3QgcmVzdWx0ID0gQkxVRVpfRURCVVNfVU5LTk9XTl9NRVRIT0Q7CisJREJ1c0hhbmRs ZXJSZXN1bHQgcmV0ID0gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7OworCQor CXR5cGUgPSBkYnVzX21lc3NhZ2VfZ2V0X3R5cGUobXNnKTsKKwlpZmFjZSA9IGRidXNfbWVzc2Fn ZV9nZXRfaW50ZXJmYWNlKG1zZyk7CisJbWV0aG9kID0gZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIg KG1zZyk7CisJc2lnbmF0dXJlID0gZGJ1c19tZXNzYWdlX2dldF9zaWduYXR1cmUobXNnKTsKKwkK KwlpZiAoKHR5cGUgPT0gREJVU19NRVNTQUdFX1RZUEVfTUVUSE9EX0NBTEwpICYmIAorCQkoc3Ry Y21wKGlmYWNlLCBCTFVFWl9EQlVTX0hDSV9JTlRFUkZBQ0UpID09IDApICYmIAorCQkobWV0aG9k ICE9IE5VTEwpKSB7CisJCQorCQlmb3IgKDsgcHRyX2hhbmRsZXJzLT5uYW1lOyBwdHJfaGFuZGxl cnMrKykgeworCQkJaWYgKHN0cmNtcChtZXRob2QsIHB0cl9oYW5kbGVycy0+bmFtZSkgPT0gMCkg eworCQkJCS8qIHJlc2V0dGluZyB1bmtub3duIG1ldGhvZC4gSXQncyBwb3NzaWJsZSBoYW5kbGUg bWV0aG9kIG92ZXJsb2FkICovCisJCQkJcmVzdWx0ID0gQkxVRVpfRURCVVNfV1JPTkdfU0lHTkFU VVJFOyAKKwkJCQlpZiAoc3RyY21wKHB0cl9oYW5kbGVycy0+c2lnbmF0dXJlLCBzaWduYXR1cmUp ID09IDApIHsKKwkJCQkJcmVwbHkgPSAocHRyX2hhbmRsZXJzLT5oYW5kbGVyX2Z1bmMpKG1zZywg ZGF0YSk7CisJCQkJCXJlc3VsdCA9IDA7IC8qIHJlc2V0dGluZyB3cm9uZyBzaWduYXR1cmUqLwor CQkJCQlicmVhazsKKwkJCQl9IAorCQkJCQorCQkJfQorCQl9CisJCQorCQlpZiAocmVzdWx0KQor CQkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfREJVUywg cmVzdWx0KTsKKwkJCisJCQorCQkvKiBzZW5kIGFuIGVycm9yIG9yIHRoZSBzdWNjZXNzIHJlcGx5 Ki8KKwkJaWYgKHJlcGx5KSB7CisJCQlpZiAoIWRidXNfY29ubmVjdGlvbl9zZW5kIChjb25uLCBy ZXBseSwgTlVMTCkpIHsgCisJCQkJc3lzbG9nKExPR19FUlIsICIlcyBsaW5lOiVkIENhbid0IHNl bmQgcmVwbHkgbWVzc2FnZSEiLCBcCisJCQkJCV9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9f KSA7CisJCQl9CisJCQlkYnVzX21lc3NhZ2VfdW5yZWYgKHJlcGx5KTsKKwkJfQorCQkKKwkJcmV0 ID0gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworCX0KKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9nZXRfZGV2aWNlc19yZXEoREJ1c01lc3NhZ2UgKm1z Zywgdm9pZCAqZGF0YSkKK3sKKwlEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZUl0 ZXIgYXJyYXlfaXRlcjsKKwlEQnVzTWVzc2FnZUl0ZXIgIHN0cnVjdF9pdGVyOworCURCdXNNZXNz YWdlICpyZXBseSA9IE5VTEw7CisJCisJc3RydWN0IGhjaV9kZXZfbGlzdF9yZXEgKmRsID0gTlVM TDsKKwlzdHJ1Y3QgaGNpX2Rldl9yZXEgKmRyICAgICAgPSBOVUxMOworCXN0cnVjdCBoY2lfZGV2 X2luZm8gZGk7CisJaW50MTZfdCBpOworCXVpbnQ4X3QgdXBfZGV2ID0gMDsKKwlpbnQzMl90IHNv Y2sgPSAtMTsKKwkKKwljaGFyIGFuYW1lW0JMVUVUT09USF9ERVZJQ0VfTkFNRV9MRU5dOworCWNo YXIgYWFkZHJbQkxVRVRPT1RIX0RFVklDRV9BRERSX0xFTl07CisJY2hhciAqcGFkZHIgPSBhYWRk cjsKKwljaGFyICpwbmFtZSA9IGFuYW1lOworCWNvbnN0IGNoYXIgYXJyYXlfc2lnW10gPSBIQ0lf REVWSUNFX1NUUlVDVF9TSUdOQVRVUkU7CisKKyAgICAgICAgLyogQ3JlYXRlIGFuZCBiaW5kIEhD SSBzb2NrZXQgKi8KKyAgICAgICAgaWYgKChzb2NrID0gc29ja2V0KEFGX0JMVUVUT09USCwgU09D S19SQVcsIEJUUFJPVE9fSENJKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19F UlIsICJDYW4ndCBvcGVuIEhDSSBzb2NrZXQ6ICVzICglZCkiLAorICAgICAgICAgICAgICAgIAlz dHJlcnJvcihlcnJubyksIGVycm5vKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2co bXNnLCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBlcnJubyk7CisJCWdvdG8gY2xlYW51cDsKKyAgICAg ICAgfQorCisKKwlkbCA9IG1hbGxvYyhIQ0lfTUFYX0RFViAqIHNpemVvZigqZHIpICsgc2l6ZW9m KCpkbCkpOworCQorCWlmICghZGwpIHsKKwkJc3lzbG9nKExPR19FUlIsICJDYW4ndCBhbGxvY2F0 ZSBtZW1vcnkiKTsKKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywgQkxVRVpf REJVU19FUlJfTk9fTUVNT1JZLCBCTFVFWl9EQlVTX0VSUl9OT19NRU1PUllfU1RSKTsKKwkJZ290 byBjbGVhbnVwOworCX0KKworCWRsLT5kZXZfbnVtID0gSENJX01BWF9ERVY7CisJZHIgPSBkbC0+ ZGV2X3JlcTsKKworCWlmIChpb2N0bChzb2NrLCBIQ0lHRVRERVZMSVNULCAodm9pZCAqKSBkbCkg PCAwKSB7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRUNMQVNT X1NZU1RFTSwgZXJybm8pOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJCisJLyogYWN0aXZlIGJs dWV0b290aCBhZGFwdGVyIGZvdW5kICovCisJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhv ZF9yZXR1cm4obXNnKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBseSwgJml0 ZXIpOworCWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCZpdGVyLCBEQlVTX1RZUEVf QVJSQVksIGFycmF5X3NpZywgJmFycmF5X2l0ZXIpOworCWRyID0gZGwtPmRldl9yZXE7CisJCisJ Zm9yIChpID0gMDsgaSA8IGRsLT5kZXZfbnVtOyBpKyssIGRyKyspIHsKKwkJaWYgKGhjaV90ZXN0 X2JpdChIQ0lfVVAsICZkci0+ZGV2X29wdCkpIHsKKwkJCXVwX2RldisrOworCQkJbWVtc2V0KCZk aSwgMCAsIHNpemVvZihzdHJ1Y3QgaGNpX2Rldl9pbmZvKSk7CisJCQlkaS5kZXZfaWQgPSBkci0+ ZGV2X2lkOworCQkJCQorCQkJaWYgKCFpb2N0bChzb2NrLCBIQ0lHRVRERVZJTkZPLCAodm9pZCAq KSAmZGkpKSB7CisJCQkJc3RyY3B5KGFuYW1lLCBkaS5uYW1lKTsKKwkJCQliYTJzdHIoJmRpLmJk YWRkciwgYWFkZHIpOworCQkJCWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCZhcnJh eV9pdGVyLCBEQlVTX1RZUEVfU1RSVUNULCBOVUxMLAorCQkJCQkJJnN0cnVjdF9pdGVyKTsKKwkJ CQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJnN0cnVjdF9pdGVyLCBEQlVTX1RZUEVf U1RSSU5HICwmcG5hbWUpOworCQkJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmc3Ry dWN0X2l0ZXIsIERCVVNfVFlQRV9TVFJJTkcgLCZwYWRkcik7CisJCQkJZGJ1c19tZXNzYWdlX2l0 ZXJfY2xvc2VfY29udGFpbmVyKCZhcnJheV9pdGVyLCAmc3RydWN0X2l0ZXIpOworCQkJfQorCQl9 CisJfQorCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigmaXRlciwgJmFycmF5X2l0 ZXIpOworCitjbGVhbnVwOgorCWlmIChkbCkKKwkJZnJlZShkbCk7CisJCisJaWYgKHNvY2sgPiAw KQorCQljbG9zZSAoc29jayk7CisJCisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgREJ1c01l c3NhZ2UqIGhhbmRsZV9wZXJpb2RpY19pbnFfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRh dGEpIAoreworCXdyaXRlX2lucXVpcnlfbW9kZV9jcCBpbnFfbW9kZTsKKwlwZXJpb2RpY19pbnF1 aXJ5X2NwIGlucV9wYXJhbTsKKwlEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZSAq cmVwbHkgPSBOVUxMOworCXVpbnQ4X3QgbGVuZ3RoOworCXVpbnQ4X3QgbWF4X3BlcmlvZDsKKwl1 aW50OF90IG1pbl9wZXJpb2Q7CisKKwlpbnQzMl90IHNvY2sgPSAtMTsKKwlpbnQzMl90IGRldl9p ZCA9IC0xOworCQorCWlmICgoZGV2X2lkID0gaGNpX2dldF9yb3V0ZShOVUxMKSkgPCAwKSB7CisJ CXN5c2xvZyhMT0dfRVJSLCAiQmx1ZXRvb3RoIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIik7CisJ CXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRUNMQVNTX1NZU1RFTSwg RU5PREVWKTsKKwkJZ290byBjbGVhbnVwOworCQkKKwl9CisJCisJaWYgKChzb2NrID0gaGNpX29w ZW5fZGV2KGRldl9pZCkpIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkhDSSBkZXZpY2Ugb3Bl biBmYWlsZWQiKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9F Q0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQlnb3RvIGNsZWFudXA7CisJfQorCQorCWRidXNfbWVz c2FnZV9pdGVyX2luaXQobXNnLCAmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2lj KCZpdGVyLCAmbGVuZ3RoKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKwlkYnVz X21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZtaW5fcGVyaW9kKTsKKwlkYnVzX21lc3Nh Z2VfaXRlcl9uZXh0KCZpdGVyKTsJCisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVy LCAmbWF4X3BlcmlvZCk7CisJCisJaWYgKChsZW5ndGggPj0gbWluX3BlcmlvZCkgfHwgKG1pbl9w ZXJpb2QgPj0gbWF4X3BlcmlvZCkpIHsKKwkJICByZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21z Zyhtc2csIEJMVUVaX0VDTEFTU19EQlVTLCBCTFVFWl9FREJVU19XUk9OR19QQVJBTSk7CisJCSAg Z290byBjbGVhbnVwOworCX0KKworCWlucV9wYXJhbS5udW1fcnNwID0gMTAwOworCWlucV9wYXJh bS5sZW5ndGggID0gbGVuZ3RoOworCisJaW5xX3BhcmFtLm1heF9wZXJpb2QgPSBtYXhfcGVyaW9k OworCWlucV9wYXJhbS5taW5fcGVyaW9kID0gbWluX3BlcmlvZDsKKworCS8qIEdlbmVyYWwvVW5s aW1pdGVkIElucXVpcnkgQWNjZXNzIENvZGUgKEdJQUMpICovCisJaW5xX3BhcmFtLmxhcFswXSA9 IDB4MzM7CisJaW5xX3BhcmFtLmxhcFsxXSA9IDB4OGI7CisJaW5xX3BhcmFtLmxhcFsyXSA9IDB4 OWU7CisKKwlpbnFfbW9kZS5tb2RlID0gMTsgLy9JTlFVSVJZX1dJVEhfUlNTSTsKKwkKKwlpZiAo aGNpX3NlbmRfY21kKHNvY2ssIE9HRl9IT1NUX0NUTCwgT0NGX1dSSVRFX0lOUVVJUllfTU9ERSwg CisJCVdSSVRFX0lOUVVJUllfTU9ERV9DUF9TSVpFLCAmaW5xX21vZGUpIDwgMCkgeworCQlzeXNs b2coTE9HX0VSUiwgIkNhbid0IHNldCBpbnF1aXJ5IG1vZGU6JXMuIiwgc3RyZXJyb3IoZXJybm8p KTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfU1lT VEVNLCBlcnJubyk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJCisJaWYgKGhjaV9zZW5kX2NtZChz b2NrLCBPR0ZfTElOS19DVEwsIE9DRl9QRVJJT0RJQ19JTlFVSVJZLCAKKwkJUEVSSU9ESUNfSU5R VUlSWV9DUF9TSVpFLCAmaW5xX3BhcmFtKSA8IDApIHsKKwkJc3lzbG9nKExPR19FUlIsICJDYW4n dCBzZW5kIEhDSSBjb21tYW5kczolcy4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXBseSA9IGJs dWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0sIGVycm5vKTsKKwkJ Z290byBjbGVhbnVwOworCX0gZWxzZSB7CisJCisJCXVpbnQ4X3QgcmVzdWx0ID0gMDsKKwkJLyog cmV0dXJuIFRSVUUgdG8gaW5kaWNhdGUgdGhhdCBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCAqLwor CQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCQlkYnVzX21l c3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBseSwgJml0ZXIpOworCQlkYnVzX21lc3NhZ2VfaXRl cl9hcHBlbmRfYmFzaWMoJml0ZXIsIERCVVNfVFlQRV9CWVRFICwmcmVzdWx0KTsKKwl9CisJCitj bGVhbnVwOgorCisJaWYgKHNvY2sgPiAwKQorCQljbG9zZShzb2NrKTsKKwkKKwlyZXR1cm4gcmVw bHk7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2NhbmNlbF9wZXJpb2RpY19pbnFf cmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpCit7CisJREJ1c01lc3NhZ2VJdGVyIGl0 ZXI7CisJREJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKwlpbnQzMl90IHNvY2sgPSAtMTsKKwlp bnQzMl90IGRldl9pZCA9IC0xOworCQorCWlmICgoZGV2X2lkID0gaGNpX2dldF9yb3V0ZShOVUxM KSkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQmx1ZXRvb3RoIGRldmljZSBpcyBub3QgYXZh aWxhYmxlIik7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRUNM QVNTX1NZU1RFTSwgRU5PREVWKTsKKwkJZ290byBjbGVhbnVwOworCQkKKwl9CisJCisJaWYgKChz b2NrID0gaGNpX29wZW5fZGV2KGRldl9pZCkpIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkhD SSBkZXZpY2Ugb3BlbiBmYWlsZWQiKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2co bXNnLCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQlnb3RvIGNsZWFudXA7CisJfQor CQorCWlmIChoY2lfc2VuZF9jbWQoc29jaywgT0dGX0xJTktfQ1RMLCBPQ0ZfRVhJVF9QRVJJT0RJ Q19JTlFVSVJZLCAwICwgTlVMTCkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiU2VuZCBoY2kg Y29tbWFuZCBmYWlsZWQuIik7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywg QkxVRVpfRUNMQVNTX1NZU1RFTSwgZXJybm8pOworCX0gZWxzZSAgeworCQl1aW50OF90IHJlc3Vs dCAgPSAwOworCQkvKiByZXR1cm4gVFJVRSB0byBpbmRpY2F0ZSB0aGF0IG9wZXJhdGlvbiB3YXMg Y29tcGxldGVkICovCisJCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1z Zyk7CisJCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5LCAmaXRlcik7CisJCWRi dXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmaXRlciwgREJVU19UWVBFX0JZVEUgLCZyZXN1 bHQpOworCX0KKwkKK2NsZWFudXA6CisJaWYgKHNvY2sgPiAwKQorCQljbG9zZShzb2NrKTsKKwkK KwlyZXR1cm4gcmVwbHk7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2lucV9yZXEo REJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBjaGFyIGFycmF5X3NpZ1td ID0gSENJX0lOUV9SRVBMWV9TSUdOQVRVUkU7CisJREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisJREJ1 c01lc3NhZ2VJdGVyIGFycmF5X2l0ZXI7CisJREJ1c01lc3NhZ2VJdGVyICBzdHJ1Y3RfaXRlcjsK KwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworCWlucXVpcnlfaW5mbyAqaW5mbyA9IE5VTEw7 CisJY2hhciBhZGRyWzE4XTsKKwljb25zdCBjaGFyICpwYWRkciA9IGFkZHI7CisJaW50MzJfdCBk ZXZfaWQgPSAtMTsKKwl1aW50MzJfdCBjbGFzcyA9IDA7CisJdWludDE2X3QgY2xvY2tfb2Zmc2V0 OworCXVpbnQxNl90IGZsYWdzOworCWludDhfdCBsZW5ndGg7CisJaW50OF90IG51bV9yc3A7CisJ aW50OF90IGk7CisKKwlpZiAoKGRldl9pZCA9IGhjaV9nZXRfcm91dGUoTlVMTCkpIDwgMCkgewor CQlzeXNsb2coTE9HX0VSUiwgIkJsdWV0b290aCBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSIpOwor CQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0s IEVOT0RFVik7CisJCWdvdG8gY2xlYW51cDsKKwkJCisJfQorCQorCWRidXNfbWVzc2FnZV9pdGVy X2luaXQobXNnLCAmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAm bGVuZ3RoKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKwlkYnVzX21lc3NhZ2Vf aXRlcl9nZXRfYmFzaWMoJml0ZXIsICZudW1fcnNwKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9uZXh0 KCZpdGVyKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZmbGFncyk7CisJ CisJaWYgKChsZW5ndGggPD0gMCkgfHwgKG51bV9yc3AgPD0gMCkpIHsKKwkJcmVwbHkgPSBibHVl el9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfREJVUywgQkxVRVpfRURCVVNfV1JP TkdfUEFSQU0pOworCQlnb3RvIGNsZWFudXA7CisJfQorCQorCW51bV9yc3AgPSBoY2lfaW5xdWly eShkZXZfaWQsIGxlbmd0aCwgbnVtX3JzcCwgTlVMTCwgJmluZm8sIGZsYWdzKTsKKwkKKwlpZiAo bnVtX3JzcCA8IDApIHsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVF Wl9FQ0xBU1NfU1lTVEVNLCBlcnJubyk7CisJfSBlbHNlIHsKKwkJcmVwbHkgPSBkYnVzX21lc3Nh Z2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBl bmQocmVwbHksICZpdGVyKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoJml0 ZXIsIERCVVNfVFlQRV9BUlJBWSwgYXJyYXlfc2lnLCAmYXJyYXlfaXRlcik7CisJCQorCSAgICAg ICAgZm9yIChpID0gMDsgaSA8IG51bV9yc3A7IGkrKykgeworCQkJYmEyc3RyKCYoaW5mbytpKS0+ YmRhZGRyLCBhZGRyKTsKKworCQkJY2xvY2tfb2Zmc2V0ID0gYnRvaHMoKGluZm8raSktPmNsb2Nr X29mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IDMgYnl0ZXMgYXJlIHVz ZWQgKi8KKwkJCW1lbWNweSgmY2xhc3MsIChpbmZvK2kpLT5kZXZfY2xhc3MsIDMpOworCQkJCisJ CQlkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmYXJyYXlfaXRlciwgREJVU19UWVBF X1NUUlVDVCwgTlVMTCwgJnN0cnVjdF9pdGVyKTsKKwkJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVu ZF9iYXNpYygmc3RydWN0X2l0ZXIsIERCVVNfVFlQRV9TVFJJTkcgLCAmcGFkZHIpOworCQkJZGJ1 c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZzdHJ1Y3RfaXRlciwgREJVU19UWVBFX1VJTlQz MiAsICZjbGFzcyk7CisJCQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJnN0cnVjdF9p dGVyLCBEQlVTX1RZUEVfVUlOVDE2ICwgJmNsb2NrX29mZnNldCk7CisJCQlkYnVzX21lc3NhZ2Vf aXRlcl9jbG9zZV9jb250YWluZXIoJmFycmF5X2l0ZXIsICZzdHJ1Y3RfaXRlcik7CisJfQorICAg ICAgICAJZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyKCZpdGVyLCAmYXJyYXlfaXRl cik7CisgICAgICAgIH0KKworY2xlYW51cDoKKwlpZihpbmZvKQorCQlidF9mcmVlKGluZm8pOwor CQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9yb2xlX3N3 aXRjaF9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlEQnVzTWVzc2FnZUl0 ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworCWNoYXIgKnN0cl9iZGFkZHIg PSBOVUxMOworCWJkYWRkcl90IGJkYWRkcjsKKwl1aW50OF90IHJvbGU7CisJaW50MzJfdCBkZXZf aWQgPSAtMSwgc29jayA9IC0xOworCQorCWRidXNfbWVzc2FnZV9pdGVyX2luaXQobXNnLCAmaXRl cik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmc3RyX2JkYWRkcik7CisJ ZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jh c2ljKCZpdGVyLCAmcm9sZSk7CisJCisJc3RyMmJhKHN0cl9iZGFkZHIsICZiZGFkZHIpOworCQor CWRldl9pZCA9IGhjaV9mb3JfZWFjaF9kZXYoSENJX1VQLCBmaW5kX2Nvbm4sIChsb25nKSAmYmRh ZGRyKTsKKwkKKwlpZiAoZGV2X2lkIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkJsdWV0b290 aCBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNn LCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQlnb3RvIGNsZWFudXA7CisJfQorCQor CXNvY2sgPSBoY2lfb3Blbl9kZXYoZGV2X2lkKTsKKwkKKwlpZiAoc29jayA8IDApIHsKKwkJc3lz bG9nKExPR19FUlIsICJIQ0kgZGV2aWNlIG9wZW4gZmFpbGVkXG4iKTsKKwkJcmVwbHkgPSBibHVl el9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQln b3RvIGNsZWFudXA7CisJfQorCisJaWYgKGhjaV9zd2l0Y2hfcm9sZShzb2NrLCAmYmRhZGRyLCBy b2xlLCAxMDAwMCkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiU3dpdGNoIHJvbGUgcmVxdWVz dCBmYWlsZWRcbiIpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVa X0VDTEFTU19TWVNURU0sIGVycm5vKTsKKwl9IGVsc2UgeworCQl1aW50OF90IHJlc3VsdCA9IDA7 CisJCS8qIHJldHVybiBUUlVFIHRvIGluZGljYXRlIHRoYXQgb3BlcmF0aW9uIHdhcyBjb21wbGV0 ZWQgKi8KKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwkJ ZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsKKwkJZGJ1c19tZXNz YWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZpdGVyLCBEQlVTX1RZUEVfQllURSwgJnJlc3VsdCk7CisJ fQorY2xlYW51cDoKKwkKKwlyZXR1cm4gcmVwbHk7Cit9Cg== ------=_Part_15171_21988669.1127495715625-- ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel