From owner-freebsd-bluetooth@FreeBSD.ORG Thu Mar 5 19:03:37 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4DE41065686 for ; Thu, 5 Mar 2009 19:03:37 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from wf-out-1314.google.com (wf-out-1314.google.com [209.85.200.170]) by mx1.freebsd.org (Postfix) with ESMTP id 7C1638FC27 for ; Thu, 5 Mar 2009 19:03:37 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by wf-out-1314.google.com with SMTP id 27so69445wfd.7 for ; Thu, 05 Mar 2009 11:03:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=um+6eh+uJQa/a45SjRN5wJvTWfd6e6kDs3v3rD8vvEM=; b=xBy7Zrs8aTi/xpodE6ttiiAPdysM0Ndz9wjZsrS2/wCJ96McMn1tE+bt9xGlC4EqjP DIfkJ05jMRkvhUil/FMqJV9FLk1y5BqU03epRVSwt7WB1IAk3QX5h7apliGWKfSPpY2i gpafukKhvKSfqkNpIF6FHOPA7nj9PBpDsTsnU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=m7pYHTsunl8BDwhH1obiZfLkr7Ty8qzJSi+ylhpD3odBcKPnj98ZoOj9x6h6aBRxho B3kaBbBimngSLq16n58XA8W+1o9JL4HwIyVflvjDwyq3PYyUlr6Mhy2XB/awQNOM3UPi GYTMQ8suLXXmt2xRkmSQSJBe4Hr6vdpu3V8Pg= MIME-Version: 1.0 Received: by 10.142.141.21 with SMTP id o21mr47603wfd.103.1236279816979; Thu, 05 Mar 2009 11:03:36 -0800 (PST) In-Reply-To: <1234605178.990729.799.nullmailer@galant.ukfsn.org> References: <1233365217.00068654.1233354838@10.7.7.3> <4988EBAC.3080202@mavhome.dp.ua> <1233758519.360141.162.nullmailer@galant.ukfsn.org> <1233845167.798942.24919.nullmailer@galant.ukfsn.org> <1233919880.530235.10843.nullmailer@galant.ukfsn.org> <1234605178.990729.799.nullmailer@galant.ukfsn.org> Date: Thu, 5 Mar 2009 11:03:36 -0800 Message-ID: From: Maksim Yevmenkin To: Iain Hibbert Content-Type: multipart/mixed; boundary=000e0cd17ea8558850046463d37d Cc: "freebsd-bluetooth@freebsd.org" Subject: Re: libhci X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Mar 2009 19:03:40 -0000 --000e0cd17ea8558850046463d37d Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Iain & All, On Sat, Feb 14, 2009 at 1:52 AM, Iain Hibbert wrote: > On Fri, 13 Feb 2009, Maksim Yevmenkin wrote: > >> i kinda started to work on hci/bluetooth shims. please take a look at >> the attached patch. this is basically to implement bt_devname() and >> bt_devaddr() similar to netbsd and i also added bt_hci_devinfo() and >> bt_hci_devenum() inspired by linux-bluez. > > some quick comments as I'm on battery and ENOTIME > > - I think it should lose the "_hci" part of the name :) sure :) > - count = bt_devenum(cb, arg) > > no limits in API (no objection to underlying implementation limit :) > the callback can signal, if it has seen enough. > (could allow callback=NULL to just count the devices) well, i'm kinda torn about it, but i guess its ok. i will just set internal limit to "reasonable" size :) > - len = bt_devinfo(name, buffer, sizeof(buffer)) > > the calling program gives buffer and size, allowing the devinfo to > be extended later without breaking ABI. actually, i'd rather add some padding to the devinfo structure. > len == 0 means not found > also, reserved slots in the structure become unnecessary, let the > compiler handle padding. i'd like to keep them. i prefer to have "hole" filled with something so it can be reused later if needed. > (size and name could be passed in devinfo?) sure, i agree to pass name in devinfo > (is variable size struct perhaps too ugly to handle? what about > 'version' field?) probably too much. please take a look at the attached patch and let me know what do you think. thanks, max --000e0cd17ea8558850046463d37d Content-Type: text/plain; charset=US-ASCII; name="bluetooth-hci.diff.txt" Content-Disposition: attachment; filename="bluetooth-hci.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frxt2lmh0 SW5kZXg6IGRldi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi5jCShyZXZpc2lvbiAwKQorKysgZGV2LmMJ KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBkZXYuYworICovCisKKy8qLQor ICogQ29weXJpZ2h0IChjKSAyMDA5IE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28u Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNs dWRlIDxibHVldG9vdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorCitzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcKK3sKKwljaGFyCQlkZXZuYW1lW0hDSV9E RVZOQU1FX1NJWkVdOworCWJkYWRkcl90IGNvbnN0CSpiZGFkZHI7Cit9OworCitzdGF0aWMgYnRf ZGV2ZW51bV9jYl90CWJ0X2RldmFkZHJfbWF0Y2g7CisKK2ludAorYnRfZGV2YWRkcihjaGFyIGNv bnN0ICpkZXZuYW1lLCBiZGFkZHJfdCAqYWRkcikKK3sKKwlzdHJ1Y3QgYnRfZGV2aW5mbwlkaTsK KworCXN0cmxjcHkoZGkuZGV2bmFtZSwgZGV2bmFtZSwgc2l6ZW9mKGRpLmRldm5hbWUpKTsKKwor CWlmIChidF9kZXZpbmZvKCZkaSkgPCAwKQorCQlyZXR1cm4gKDApOworCisJaWYgKGFkZHIgIT0g TlVMTCkKKwkJYmRhZGRyX2NvcHkoYWRkciwgJmRpLmJkYWRkcik7CisKKwlyZXR1cm4gKDEpOwor fQorCitpbnQKK2J0X2Rldm5hbWUoY2hhciAqZGV2bmFtZSwgYmRhZGRyX3QgY29uc3QgKmFkZHIp Cit7CisJc3RydWN0IGJ0X2RldmFkZHJfbWF0Y2hfYXJnCWFyZzsKKworCW1lbXNldCgmYXJnLCAw LCBzaXplb2YoYXJnKSk7CisJYXJnLmJkYWRkciA9IGFkZHI7CisKKwlpZiAoYnRfZGV2ZW51bSgm YnRfZGV2YWRkcl9tYXRjaCwgJmFyZykgPCAwKQorCQlyZXR1cm4gKDApOworCQorCWlmIChhcmcu ZGV2bmFtZVswXSA9PSAnXDAnKSB7CisJCWVycm5vID0gRU5YSU87CisJCXJldHVybiAoMCk7CisJ fQorCisJaWYgKGRldm5hbWUgIT0gTlVMTCkKKwkJc3RybGNweShkZXZuYW1lLCBhcmcuZGV2bmFt ZSwgSENJX0RFVk5BTUVfU0laRSk7CisKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50Citi dF9kZXZhZGRyX21hdGNoKGludCBzLCBzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcJKm0gPSAoc3RydWN0IGJ0X2Rl dmFkZHJfbWF0Y2hfYXJnICopYXJnOworCisJaWYgKCFiZGFkZHJfc2FtZSgmZGktPmJkYWRkciwg bS0+YmRhZGRyKSkKKwkJcmV0dXJuICgwKTsKKworCXN0cmxjcHkobS0+ZGV2bmFtZSwgZGktPmRl dm5hbWUsIHNpemVvZihtLT5kZXZuYW1lKSk7CisKKwlyZXR1cm4gKDEpOworfQorCkluZGV4OiBo Y2kuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBoY2kuYwkocmV2aXNpb24gMCkKKysrIGhjaS5jCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIGhjaS5jCisgKi8KKworLyotCisgKiBDb3B5 cmlnaHQgKGMpIDIwMDkgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+Cisg KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGJs dWV0b290aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBjaGFyICogYnRf ZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQgbm5sZW4p OworCitpbnQKK2J0X2RldmluZm8oc3RydWN0IGJ0X2RldmluZm8gKmRpKQoreworCXVuaW9uIHsK KwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdfbm9kZV9zdGF0ZQkJcjA7CisJCXN0cnVjdCBu Z19idHNvY2tldF9oY2lfcmF3X25vZGVfYmRhZGRyCQlyMTsKKwkJc3RydWN0IG5nX2J0c29ja2V0 X2hjaV9yYXdfbm9kZV9mZWF0dXJlcwlyMjsKKwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdf bm9kZV9idWZmZXIJCXIzOworCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX3N0YXQJ CXI0OworCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX2xpbmtfcG9saWN5X21hc2sg cjU7CisJCXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfcGFja2V0X21hc2sJcjY7CisJ CXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfcm9sZV9zd2l0Y2gJcjc7CisJCXN0cnVj dCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfZGVidWcJCXI4OworCX0JCQkJCQlycDsKKwlzdHJ1 Y3Qgc29ja2FkZHJfaGNpCQkJCWhhOworCWludAkJCQkJCXMsIHJ2YWw7CisKKwlpZiAoZGkgPT0g TlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbWVtc2V0 KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJaGEuaGNpX2xlbiA9IHNpemVvZihoYSk7CisJaGEuaGNp X2ZhbWlseSA9IEFGX0JMVUVUT09USDsKKworCWlmIChidF9hdG9uKGRpLT5kZXZuYW1lLCAmcnAu cjEuYmRhZGRyKSkgeworCQlpZiAoIWJ0X2Rldm5hbWUoaGEuaGNpX25vZGUsICZycC5yMS5iZGFk ZHIpKQorCQkJcmV0dXJuICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShkaS0+ZGV2bmFt ZSwgaGEuaGNpX25vZGUsCisJCQkJCXNpemVvZihoYS5oY2lfbm9kZSkpID09IE5VTEwpIHsKKwkJ ZXJybm8gPSBFTlhJTzsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcyA9IHNvY2tldChQRl9CTFVF VE9PVEgsIFNPQ0tfUkFXLCBCTFVFVE9PVEhfUFJPVE9fSENJKTsKKwlpZiAocyA8IDApCisJCXJl dHVybiAoLTEpOworCisJcnZhbCA9IC0xOworCisJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRk ciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAorCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29j a2FkZHIgKikgJmhhLCBzaXplb2YoaGEpKSA8IDApCisJCWdvdG8gYmFkOworCXN0cmxjcHkoZGkt PmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2YoZGktPmRldm5hbWUpKTsKKworCWlmIChpb2N0 bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfU1RBVEUsICZycC5yMCwgc2l6ZW9mKHJwLnIwKSkg PCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+c3RhdGUgPSBycC5yMC5zdGF0ZTsKKworCWlmIChpb2N0 bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfQkRBRERSLCAmcnAucjEsIHNpemVvZihycC5yMSkp IDwgMCkKKwkJZ290byBiYWQ7CisJYmRhZGRyX2NvcHkoJmRpLT5iZGFkZHIsICZycC5yMS5iZGFk ZHIpOworCQorCWlmIChpb2N0bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfRkVBVFVSRVMsICZy cC5yMiwgc2l6ZW9mKHJwLnIyKSkgPCAwKQorCQlnb3RvIGJhZDsKKwltZW1jcHkoZGktPmZlYXR1 cmVzLCBycC5yMi5mZWF0dXJlcywgc2l6ZW9mKGRpLT5mZWF0dXJlcykpOworCisJaWYgKGlvY3Rs KHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9CVUZGRVIsICZycC5yMywgc2l6ZW9mKHJwLnIzKSkg PCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+Y21kX2ZyZWUgPSBycC5yMy5idWZmZXIuY21kX2ZyZWU7 CisJZGktPnNjb19zaXplID0gcnAucjMuYnVmZmVyLnNjb19zaXplOworCWRpLT5zY29fcGt0cyA9 IHJwLnIzLmJ1ZmZlci5zY29fcGt0czsKKwlkaS0+c2NvX2ZyZWUgPSBycC5yMy5idWZmZXIuc2Nv X2ZyZWU7CisJZGktPmFjbF9zaXplID0gcnAucjMuYnVmZmVyLmFjbF9zaXplOworCWRpLT5hY2xf cGt0cyA9IHJwLnIzLmJ1ZmZlci5hY2xfcGt0czsKKwlkaS0+YWNsX2ZyZWUgPSBycC5yMy5idWZm ZXIuYWNsX2ZyZWU7CisKKwlpZiAoaW9jdGwocywgU0lPQ19IQ0lfUkFXX05PREVfR0VUX1NUQVQs ICZycC5yNCwgc2l6ZW9mKHJwLnI0KSkgPCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+Y21kX3NlbnQg PSBycC5yNC5zdGF0LmNtZF9zZW50OworCWRpLT5ldm50X3JlY3YgPSBycC5yNC5zdGF0LmV2bnRf cmVjdjsKKwlkaS0+YWNsX3JlY3YgPSBycC5yNC5zdGF0LmFjbF9yZWN2OworCWRpLT5hY2xfc2Vu dCA9IHJwLnI0LnN0YXQuYWNsX3NlbnQ7CisJZGktPnNjb19yZWN2ID0gcnAucjQuc3RhdC5zY29f cmVjdjsKKwlkaS0+c2NvX3NlbnQgPSBycC5yNC5zdGF0LnNjb19zZW50OworCWRpLT5ieXRlc19y ZWN2ID0gcnAucjQuc3RhdC5ieXRlc19yZWN2OworCWRpLT5ieXRlc19zZW50ID0gcnAucjQuc3Rh dC5ieXRlc19zZW50OworCisJaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9MSU5L X1BPTElDWV9NQVNLLAorCQkJJnJwLnI1LCBzaXplb2YocnAucjUpKSA8IDApCisJCWdvdG8gYmFk OworCWRpLT5saW5rX3BvbGljeV9pbmZvID0gcnAucjUucG9saWN5X21hc2s7CisKKwlpZiAoaW9j dGwocywgU0lPQ19IQ0lfUkFXX05PREVfR0VUX1BBQ0tFVF9NQVNLLAorCQkJJnJwLnI2LCBzaXpl b2YocnAucjYpKSA8IDApCisJCWdvdG8gYmFkOworCWRpLT5wYWNrZXRfdHlwZV9pbmZvID0gcnAu cjYucGFja2V0X21hc2s7CisKKwkgaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9S T0xFX1NXSVRDSCwKKwkJCSZycC5yNywgc2l6ZW9mKHJwLnI3KSkgPCAwKQorCQlnb3RvIGJhZDsK KwlkaS0+cm9sZV9zd2l0Y2hfaW5mbyA9IHJwLnI3LnJvbGVfc3dpdGNoOworCisJaWYgKGlvY3Rs KHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9ERUJVRywgJnJwLnI4LCBzaXplb2YocnAucjgpKSA8 IDApCisJCWdvdG8gYmFkOworCWRpLT5kZWJ1ZyA9IHJwLnI4LmRlYnVnOworCisJcnZhbCA9IDA7 CitiYWQ6CisJY2xvc2Uocyk7CisKKwlyZXR1cm4gKHJ2YWwpOworfQorCitpbnQKK2J0X2RldmVu dW0oYnRfZGV2ZW51bV9jYl90IGNiLCB2b2lkICphcmcpCit7CisJc3RydWN0IG5nX2J0c29ja2V0 X2hjaV9yYXdfbm9kZV9saXN0X25hbWVzCXJwOworCXN0cnVjdCBidF9kZXZpbmZvCQkJCWRpOwor CXN0cnVjdCBzb2NrYWRkcl9oY2kJCQkJaGE7CisJaW50CQkJCQkJcywgaSwgY291bnQ7CisKKwly cC5udW1fbmFtZXMgPSBIQ0lfREVWTUFYOworCXJwLm5hbWVzID0gKHN0cnVjdCBub2RlaW5mbyAq KSBjYWxsb2MocnAubnVtX25hbWVzLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBub2RlaW5mbykpOwor CWlmIChycC5uYW1lcyA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0x KTsKKwl9CisKKwltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKKwloYS5oY2lfbGVuID0gc2l6 ZW9mKGhhKTsKKwloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOworCWhhLmhjaV9ub2RlWzBd ID0gJ3gnOworCisJcyA9IHNvY2tldChQRl9CTFVFVE9PVEgsIFNPQ0tfUkFXLCBCTFVFVE9PVEhf UFJPVE9fSENJKTsKKwlpZiAocyA8IDApIHsKKwkJZnJlZShycC5uYW1lcyk7CisKKwkJcmV0dXJu ICgtMSk7CisJfQorCisJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVv ZihoYSkpIDwgMCB8fAorCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBz aXplb2YoaGEpKSA8IDAgfHwKKwkgICAgaW9jdGwocywgU0lPQ19IQ0lfUkFXX05PREVfTElTVF9O QU1FUywgJnJwLCBzaXplb2YocnApKSA8IDApIHsKKwkJY2xvc2Uocyk7CisJCWZyZWUocnAubmFt ZXMpOworCisJCXJldHVybiAoLTEpOworCX0KKworCWZvciAoY291bnQgPSAwLCBpID0gMDsgaSA8 IHJwLm51bV9uYW1lczsgaSArKykgeworCQlzdHJsY3B5KGRpLmRldm5hbWUsIHJwLm5hbWVzW2ld Lm5hbWUsIHNpemVvZihkaS5kZXZuYW1lKSk7CisJCWlmIChidF9kZXZpbmZvKCZkaSkgPCAwKQor CQkJY29udGludWU7CisKKwkJY291bnQgKys7CisKKwkJaWYgKGNiID09IE5VTEwpCisJCQljb250 aW51ZTsKKworCQlzdHJsY3B5KGhhLmhjaV9ub2RlLCBycC5uYW1lc1tpXS5uYW1lLCBzaXplb2Yo aGEuaGNpX25vZGUpKTsKKwkJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNp emVvZihoYSkpIDwgMCB8fAorCQkgICAgY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopICZo YSwgc2l6ZW9mKGhhKSkgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCgqY2IpKHMsICZkaSwg YXJnKSA+IDApCisJCQlicmVhazsKKwl9CisKKwljbG9zZSAocyk7CisJZnJlZShycC5uYW1lcyk7 CisKKwlyZXR1cm4gKGNvdW50KTsKK30KKworc3RhdGljIGNoYXIgKgorYnRfZGV2Mm5vZGUoY2hh ciBjb25zdCAqZGV2bmFtZSwgY2hhciAqbm9kZW5hbWUsIGludCBubmxlbikKK3sKKwlzdGF0aWMg Y2hhciBjb25zdCAqCSBidF9kZXZfcHJlZml4W10gPSB7CisJCSJidGNjYyIsCS8qIDNDb20gQmx1 ZXRvb3RoIFBDLUNBUkQgKi8KKwkJImg0IiwJCS8qIFVBUlQvc2VyaWFsIEJsdWV0b290aCBkZXZp Y2VzICovCisJCSJ1YnQiLAkJLyogQmx1ZXRvb3RoIFVTQiBkZXZpY2VzICovCisJCU5VTEwJCS8q IHNob3VsZCBiZSBsYXN0ICovCisJfTsKKworCXN0YXRpYyBjaGFyCQlfbm9kZW5hbWVbSENJX0RF Vk5BTUVfU0laRV07CisJY2hhciBjb25zdAkJKipwOworCWNoYXIJCQkqZXA7CisJaW50CQkJcGxl biwgdW5pdDsKKworCWlmIChub2RlbmFtZSA9PSBOVUxMKSB7CisJCW5vZGVuYW1lID0gX25vZGVu YW1lOworCQlubmxlbiA9IEhDSV9ERVZOQU1FX1NJWkU7CisJfQorCisJZm9yIChwID0gYnRfZGV2 X3ByZWZpeDsgKnAgIT0gTlVMTDsgcCArKykgeworCQlwbGVuID0gc3RybGVuKCpwKTsKKwkJaWYg KHN0cm5jbXAoZGV2bmFtZSwgKnAsIHBsZW4pICE9IDApCisJCQljb250aW51ZTsKKworCQl1bml0 ID0gc3RydG91bChkZXZuYW1lICsgcGxlbiwgJmVwLCAxMCk7CisJCWlmICgqZXAgIT0gJ1wwJyAm JgorCQkgICAgc3RyY21wKGVwLCAiaGNpIikgIT0gMCAmJgorCQkgICAgc3RyY21wKGVwLCAibDJj YXAiKSAhPSAwKQorCQkJcmV0dXJuIChOVUxMKTsJLyogY2FuJ3QgbWFrZSBzZW5zZSBvZiBkZXZp Y2UgbmFtZSAqLworCisJCXNucHJpbnRmKG5vZGVuYW1lLCBubmxlbiwgIiVzJXVoY2kiLCAqcCwg dW5pdCk7CisKKwkJcmV0dXJuIChub2RlbmFtZSk7CisJfQorCisJcmV0dXJuIChOVUxMKTsKK30K KwpJbmRleDogYmx1ZXRvb3RoLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLjMJKHJldmlzaW9u IDE4OTQxNCkKKysrIGJsdWV0b290aC4zCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot LlwiIENvcHlyaWdodCAoYykgMjAwMyBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9v LmNvbT4KKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOSBNYWtzaW0gWWV2bWVua2luIDxtX2V2 bWVua2luQHlhaG9vLmNvbT4KIC5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLlwiCiAuXCIgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CkBAIC0yNSw3ICsyNSw3IEBACiAuXCIgJElkOiBibHVldG9vdGguMyx2IDEuNSAyMDAz LzA1LzIwIDIzOjA0OjMwIG1heCBFeHAgJAogLlwiICRGcmVlQlNEJAogLlwiCi0uRGQgQXVndXN0 IDEzLCAyMDA4CisuRGQgRmVicnVhcnkgMTMsIDIwMDkKIC5EdCBCTFVFVE9PVEggMwogLk9zCiAu U2ggTkFNRQpAQCAtNzQsNiArNzQsMTYgQEAKIC5GdCBjb25zdCBjaGFyICoKIC5GbiBidF9udG9h ICJjb25zdCBiZGFkZHJfdCAqYmEiICJjaGFyICpzdHIiCiAuRnQgaW50CisuRm4gYnRfZGV2YWRk ciAiY29uc3QgY2hhciAqZGV2bmFtZSIgImJkYWRkcl90ICphZGRyIgorLkZ0IGludAorLkZuIGJ0 X2Rldm5hbWUgImNoYXIgKmRldm5hbWUiICJjb25zdCBiZGFkZHJfdCAqYWRkciIKKy5GdCBpbnQK Ky5GbiAoYnRfZGV2ZW51bV9jYl90KSAiaW50IHMiICJzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAq ZGkiICJ2b2lkICphcmciCisuRnQgaW50CisuRm4gYnRfZGV2aW5mbyAic3RydWN0IGJ0X2Rldmlu Zm8gKmRpIgorLkZ0IGludAorLkZuIGJ0X2RldmVudW0gImJ0X2RldmVudW1fY2JfdCAqY2IiICJ2 b2lkICphcmciCisuRnQgaW50CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICphIiAi Y29uc3QgYmRhZGRyX3QgKmIiCiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRhZGRy X3QgKmEiCkBAIC0xOTcsNiArMjA3LDExOCBAQAogSWYgbm8gYnVmZmVyIHdhcyBwcm92aWRlZCB0 aGVuIGludGVybmFsIHN0YXRpYyBidWZmZXIgd2lsbCBiZSB1c2VkLgogLlBwCiBUaGUKKy5GbiBi dF9kZXZhZGRyCitmdW5jdGlvbiBpbnRlcnByZXRzIHRoZSBzcGVjaWZpZWQKKy5GYSBkZXZuYW1l CitzdHJpbmcgYXMgdGhlIGFkZHJlc3Mgb3IgZGV2aWNlIG5hbWUgb2YgYSBCbHVldG9vdGggZGV2 aWNlIG9uIHRoZSBsb2NhbCBzeXN0ZW0sCithbmQgcGxhY2VzIHRoZSBkZXZpY2UgYWRkcmVzcyBp biB0aGUgcHJvdmlkZWQKKy5GYSBiZGFkZHIgLAoraWYgYW55LgorVGhlIGZ1bmN0aW9uIHJldHVy bnMgMSBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgaW50ZXJwcmV0ZWQsCitvciAwIGlm IHRoZSBzdHJpbmcgZGlkIG5vdCBtYXRjaCBhbnkgbG9jYWwgZGV2aWNlLgorVGhlCisuRm4gYnRf ZGV2bmFtZQorZnVuY3Rpb24gdGFrZXMgYSBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3MgYW5kIGNv cGllcyB0aGUgbG9jYWwgZGV2aWNlCituYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGFkZHJlc3Mg aW50byB0aGUgYnVmZmVyIHByb3ZpZGVkLAoraWYgYW55LgorQ2FsbGVyIG11c3QgZW5zdXJlIHRo YXQgcHJvdmlkZWQgYnVmZmVyIGlzIGF0IGxlYXN0CisuRHYgSENJX0RFVk5BTUVfU0laRQorY2hh cmFjdGVycyBpbiBzaXplLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIHRoZSBkZXZpY2Ug d2FzIGZvdW5kLAorb3RoZXJ3aXNlIDAuCisuUHAKK1RoZQorLkZuIGJ0X2RldmluZm8KK2Z1bmN0 aW9uIHBvcHVsYXRlcyBwcm9kaXZkZWQKKy5WdCBidF9kZXZpbmZvCitzdHJ1Y3R1cmUgd2l0aCB0 aGUgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gQmx1ZXRvb3RoIGRldmljZS4KK1RoZSBjYWxsZXIg aXMgZXhwZWN0ZWQgdG8gcGFzcyBCbHVldG9vdGggZGV2aWNlIG5hbWUgaW4gdGhlCisuRmEgZGV2 bmFtZQorZmllbGQgb2YgdGhlIHBhc3NlZAorLlZ0IGJ0X2RldmluZm8KK3N0cnVjdHVyZS4KK1Ro ZSBmdW5jdGlvbiByZXR1cm5zIDAgd2hlbiBzdWNjZXNzZnVsLAorb3RoZXJ3aXNlIC0xLgorVGhl CisuVnQgYnRfZGV2aW5mbworc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93cworLkJkIC1s aXRlcmFsIC1vZmZzZXQgaW5kZW50CitzdHJ1Y3QgYnRfZGV2aW5mbworeworICAgICAgICBjaGFy ICAgICAgICAgICAgZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsKKworICAgICAgICB1aW50MzJf dCAgICAgICAgc3RhdGU7CisKKyAgICAgICAgYmRhZGRyX3QgICAgICAgIGJkYWRkcjsKKyAgICAg ICAgdWludDE2X3QgICAgICAgIF9yZXNlcnZlZDA7CisKKyAgICAgICAgdWludDhfdCAgICAgICAg IGZlYXR1cmVzW0hDSV9ERVZGRUFUVVJFU19TSVpFXTsKKworICAgICAgICAvKiBidWZmZXIgaW5m byAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgX3Jlc2VydmVkMTsKKyAgICAgICAgdWludDE2 X3QgICAgICAgIGNtZF9mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgc2NvX3NpemU7Cisg ICAgICAgIHVpbnQxNl90ICAgICAgICBzY29fcGt0czsKKyAgICAgICAgdWludDE2X3QgICAgICAg IHNjb19mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgYWNsX3NpemU7CisgICAgICAgIHVp bnQxNl90ICAgICAgICBhY2xfcGt0czsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGFjbF9mcmVl OworCisgICAgICAgIC8qIHN0YXRzICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICBjbWRfc2Vu dDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGV2bnRfcmVjdjsKKyAgICAgICAgdWludDMyX3Qg ICAgICAgIGFjbF9yZWN2OworICAgICAgICB1aW50MzJfdCAgICAgICAgYWNsX3NlbnQ7CisgICAg ICAgIHVpbnQzMl90ICAgICAgICBzY29fcmVjdjsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHNj b19zZW50OworICAgICAgICB1aW50MzJfdCAgICAgICAgYnl0ZXNfcmVjdjsKKyAgICAgICAgdWlu dDMyX3QgICAgICAgIGJ5dGVzX3NlbnQ7CisKKyAgICAgICAgLyogbWlzYy9zcGVjaWZpYyAqLwor ICAgICAgICB1aW50MTZfdCAgICAgICAgbGlua19wb2xpY3lfaW5mbzsKKyAgICAgICAgdWludDE2 X3QgICAgICAgIHBhY2tldF90eXBlX2luZm87CisgICAgICAgIHVpbnQxNl90ICAgICAgICByb2xl X3N3aXRjaF9pbmZvOworICAgICAgICB1aW50MTZfdCAgICAgICAgZGVidWc7CisKKyAgICAgICAg dWludDhfdCAgICAgICAgIF9wYWRkaW5nWzIwXTsKK307CisuRWQKKy5QcAorVGhlCisuRm4gYnRf ZGV2ZW51bQorZnVuY3Rpb24gZW51bWVyYXRlcyB1cCB0bworLkR2IEhDSV9ERVZNQVgKK0JsdWV0 b290aCBkZXZpY2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4KK0ZvciBldmVyeSBkZXZpY2UgZm91 bmQsCit0aGUgZnVuY3Rpb24gd2lsbCBjYWxsIHByb3ZpZGVkCisuRmEgY2IKK2NhbGxiYWNrIGZ1 bmN0aW9uIHdoaWNoIHNob3VsZCBiZSBvZgorLlZ0IGJ0X2RldmVudW1fY2JfdAordHlwZS4KK1Ro ZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgYSBjb25uZWN0ZWQKKy5EdiBIQ0kKK3NvY2tl dAorLkZhIHMgLAorZnVsbHkgcG9wdWxhdGVkCisuVnQgYnRfZGV2aW5mbworc3RydWN0dXJlCisu RmEgZGkKK2FuZAorLkZhIGFyZworYXJndW1lbnQgcHJvdmlkZWQgdG8gdGhlCisuRm4gYnRfZGV2 ZW51bSAuCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIHN0b3AgZW51bWVyYXRpb24gYnkgcmV0 dXJuaW5nIGEgdmFsdWUKK3RoYXQgaXMgZ3JlYXRlciB0aGFuIHplcm8uCitUaGUKKy5GbiBidF9k ZXZlbnVtCit1c2VzIHRoZSBzYW1lIHNvY2tldCBmb3IgdGhlIGR1cmF0aW9uIG9mIGVudW1lcmF0 aW9uLgorVGhlIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCB0aGUgc29ja2V0LAorcGFzc2VkIHRv IHRoZSBjYWxsYmFjayBmdW5jdGlvbiwKK3dpbGwgYmUgYm91bmQgYW5kIGNvbm5lY3RlZCB0byB0 aGUgQmx1ZXRvb3RoIGRldmljZSBiZWluZyBlbnVtZXJhdGVkLgorVGhlIGZ1bmN0aW9uIHJldHVy bnMgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBlbnVtZXJhdGVkIGRldmljZXMsCitvdGhlcndpc2Ug LTEuCisuUHAKK1RoZQogLkZuIGJkYWRkcl9zYW1lICwKIC5GbiBiZGFkZHJfYW55CiBhbmQKQEAg LTI4Nyw3ICs0MDksOCBAQAogLlhyIGdldHByb3RvYnludW1iZXIgMyAsCiAuWHIgaGVycm9yIDMg LAogLlhyIGluZXRfYXRvbiAzICwKLS5YciBpbmV0X250b2EgMworLlhyIGluZXRfbnRvYSAzICwK Ky5YciBuZ19oY2kgNAogLlNoIENBVkVBVAogVGhlCiAuRm4gYnRfZ2V0aG9zdGVudApJbmRleDog Ymx1ZXRvb3RoLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLmMJKHJldmlzaW9uIDE4OTQxNCkK KysrIGJsdWV0b290aC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsOSBAQAogLyoKICAqIGJs dWV0b290aC5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgTWFrc2ltIFlldm1lbmtp biA8bV9ldm1lbmtpbkB5YWhvby5jb20+CisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw MDEtMjAwOSBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9vLmNvbT4KICAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkluZGV4OiBibHVldG9vdGguaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBibHVldG9vdGguaAkocmV2aXNpb24gMTg5NDE0KQorKysgYmx1ZXRvb3RoLmgJ KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw5IEBACiAvKgogICogYmx1ZXRvb3RoLmgKLSAqCi0g KiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMyBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlh aG9vLmNvbT4KKyAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA5IE1ha3NpbSBZ ZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28uY29tPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM1LDkgKzM3LDEyIEBACiAjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CiAjaW5jbHVkZSA8c3lzL2JpdHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4K KyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVk ZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxuZXRkYi5oPgorI2lu Y2x1ZGUgPG5ldGdyYXBoL25nX21lc3NhZ2UuaD4KICNpbmNsdWRlIDxuZXRncmFwaC9ibHVldG9v dGgvaW5jbHVkZS9uZ19oY2kuaD4KICNpbmNsdWRlIDxuZXRncmFwaC9ibHVldG9vdGgvaW5jbHVk ZS9uZ19sMmNhcC5oPgogI2luY2x1ZGUgPG5ldGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25nX2J0 c29ja2V0Lmg+CkBAIC03Miw2ICs3Nyw2MyBAQAogY2hhciBjb25zdCAqICAgICAgYnRfbnRvYSAg ICAgICAgICAgICAoYmRhZGRyX3QgY29uc3QgKmJhLCBjaGFyICpzdHIpOwogaW50ICAgICAgICAg ICAgICAgYnRfYXRvbiAgICAgICAgICAgICAoY2hhciBjb25zdCAqc3RyLCBiZGFkZHJfdCAqYmEp OwogCisvKiBidF9kZXZYWFhYKCkgZnVuY3Rpb25zIChpbnNwaXJlZCBieSBOZXRCU0QpICovCitp bnQgICAgICAgICAgICAgICBidF9kZXZhZGRyICAgICAgICAgIChjaGFyIGNvbnN0ICpkZXZuYW1l LCBiZGFkZHJfdCAqYWRkcik7CitpbnQgICAgICAgICAgICAgICBidF9kZXZuYW1lICAgICAgICAg IChjaGFyICpkZXZuYW1lLCBiZGFkZHJfdCBjb25zdCAqYWRkcik7CisKKy8qIAorICogQmx1ZXRv b3RoIEhDSSBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lCUhDSV9ERVZNQVgJCQkzMgkJLyogYXJi aXRyYXJ5ICovCisjZGVmaW5lCUhDSV9ERVZOQU1FX1NJWkUJCU5HX05PREVTSVoKKyNkZWZpbmUJ SENJX0RFVkZFQVRVUkVTX1NJWkUJCU5HX0hDSV9GRUFUVVJFU19TSVpFCisKK3N0cnVjdCBidF9k ZXZpbmZvCit7CisJY2hhcgkJZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsKKworCXVpbnQzMl90 CXN0YXRlOworCisJYmRhZGRyX3QJYmRhZGRyOworCXVpbnQxNl90CV9yZXNlcnZlZDA7CisKKwl1 aW50OF90CQlmZWF0dXJlc1tIQ0lfREVWRkVBVFVSRVNfU0laRV07CisKKwkvKiBidWZmZXIgaW5m byAqLworCXVpbnQxNl90CV9yZXNlcnZlZDE7CisJdWludDE2X3QJY21kX2ZyZWU7CisJdWludDE2 X3QJc2NvX3NpemU7CisJdWludDE2X3QJc2NvX3BrdHM7CisJdWludDE2X3QJc2NvX2ZyZWU7CisJ dWludDE2X3QJYWNsX3NpemU7CisJdWludDE2X3QJYWNsX3BrdHM7CisJdWludDE2X3QJYWNsX2Zy ZWU7CisKKwkvKiBzdGF0cyAqLworCXVpbnQzMl90CWNtZF9zZW50OworCXVpbnQzMl90CWV2bnRf cmVjdjsKKwl1aW50MzJfdAlhY2xfcmVjdjsKKwl1aW50MzJfdAlhY2xfc2VudDsKKwl1aW50MzJf dAlzY29fcmVjdjsKKwl1aW50MzJfdAlzY29fc2VudDsKKwl1aW50MzJfdAlieXRlc19yZWN2Owor CXVpbnQzMl90CWJ5dGVzX3NlbnQ7CisKKwkvKiBtaXNjL3NwZWNpZmljICovCisJdWludDE2X3QJ bGlua19wb2xpY3lfaW5mbzsKKwl1aW50MTZfdAlwYWNrZXRfdHlwZV9pbmZvOworCXVpbnQxNl90 CXJvbGVfc3dpdGNoX2luZm87CisJdWludDE2X3QJZGVidWc7CisKKwl1aW50OF90CQlfcGFkZGlu Z1syMF07CS8qIG1ha2UgaXQgMTI4IGJ5dGVzIGluIHNpemUgKi8KK307CisKK3R5cGVkZWYgaW50 CShidF9kZXZlbnVtX2NiX3QpKGludCwgc3RydWN0IGJ0X2RldmluZm8gY29uc3QgKiwgdm9pZCAq KTsKKworaW50CQlidF9kZXZpbmZvIChzdHJ1Y3QgYnRfZGV2aW5mbyAqZGkpOworaW50CQlidF9k ZXZlbnVtIChidF9kZXZlbnVtX2NiX3QgKmNiLCB2b2lkICphcmcpOworCiAvKgogICogYmRhZGRy IHV0aWxpdHkgZnVuY3Rpb25zIChmcm9tIE5ldEJTRCkKICAqLwpJbmRleDogTWFrZWZpbGUKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gTWFrZWZpbGUJKHJldmlzaW9uIDE4OTQxNCkKKysrIE1ha2VmaWxlCSh3b3Jr aW5nIGNvcHkpCkBAIC05LDcgKzksNyBAQAogCiBTSExJQl9NQUpPUj0JMwogCi1TUkNTPQkJYmx1 ZXRvb3RoLmMKK1NSQ1M9CQlibHVldG9vdGguYyBkZXYuYyBoY2kuYwogSU5DUz0JCWJsdWV0b290 aC5oCiAKIE1MSU5LUys9CWJsdWV0b290aC4zIGJ0X2dldGhvc3RieW5hbWUuMwpAQCAtMjcsNiAr MjcsMTIgQEAKIE1MSU5LUys9CWJsdWV0b290aC4zIGJ0X250b2EuMwogTUxJTktTKz0JYmx1ZXRv b3RoLjMgYnRfYXRvbi4zCiAKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmFkZHIuMworTUxJ TktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2bmFtZS4zCisKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0 X2RldmluZm8uMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZW51bS4zCisKIE1MSU5LUys9 CWJsdWV0b290aC4zIGJkYWRkcl9zYW1lLjMKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9h bnkuMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYmRhZGRyX2NvcHkuMwo= --000e0cd17ea8558850046463d37d-- From owner-freebsd-bluetooth@FreeBSD.ORG Thu Mar 5 20:15:26 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 512791065670 for ; Thu, 5 Mar 2009 20:15:26 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from smtp01.one2one.net (smtp01.one2one.net [149.254.200.196]) by mx1.freebsd.org (Postfix) with ESMTP id DA3848FC0C for ; Thu, 5 Mar 2009 20:15:25 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from [127.0.0.1] (helo=localhost) by smtpbarns01 with esmtp (Exim 4.50) id 1LfJyS-0006ov-P7; Thu, 05 Mar 2009 20:15:20 +0000 Received: from smtpbarns01 ([127.0.0.1]) by localhost (smtpbarns01 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26163-02; Thu, 5 Mar 2009 20:15:20 +0000 (GMT) Received: from [10.35.201.38] (helo=rya-online.net) by smtpbarns01 with smtp (Exim 4.50) id 1LfJyP-0006ok-Oj; Thu, 05 Mar 2009 20:15:20 +0000 Received: (nullmailer pid 792 invoked by uid 1000); Thu, 05 Mar 2009 20:14:55 -0000 Date: Thu, 5 Mar 2009 20:14:55 +0000 (GMT) To: Maksim Yevmenkin In-Reply-To: References: <1233365217.00068654.1233354838@10.7.7.3> <4988EBAC.3080202@mavhome.dp.ua> <1233758519.360141.162.nullmailer@galant.ukfsn.org> <1233845167.798942.24919.nullmailer@galant.ukfsn.org> <1233919880.530235.10843.nullmailer@galant.ukfsn.org> <1234605178.990729.799.nullmailer@galant.ukfsn.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Message-Id: <1236284095.692711.620.nullmailer@galant.ukfsn.org> From: Iain Hibbert X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at example.com X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: plunky@rya-online.net X-SA-Exim-Scanned: No (on smtpbarns01); SAEximRunCond expanded to false Cc: "freebsd-bluetooth@freebsd.org" Subject: Re: libhci X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Mar 2009 20:15:26 -0000 On Thu, 5 Mar 2009, Maksim Yevmenkin wrote: > [v2] seems fine, some documentation comments +The +.Fn bt_devenum +function enumerates up to +.Dv HCI_DEVMAX +Bluetooth devices present in the system. This should not be in the function API but in a CAVEATS or BUGS section as its implementation dependent :) +The +.Fn bt_devenum +uses the same socket for the duration of enumeration. Likewise I don't think this should be part of the specification as some implementations might not be able to reuse the socket. Perhaps just say that the socket handle provided will only be valid during the callback to make sure that the callback doesn't store it? (can put it in CAVEATS section that it is reused if you like?) +The function guarantees that the socket, +passed to the callback function, +will be bound and connected to the Bluetooth device being enumerated. +The function returns number of successfully enumerated devices, +otherwise -1. can we say 'or -1 if an error occurred', as I think it could be valid to successfully enumerate 0 devices..? +#define HCI_DEVFEATURES_SIZE NG_HCI_FEATURES_SIZE when I ported the include files I just chopped off the NG_, is there any gain in having another definition? + uint32_t state; I guess state is impementation dependent? (some kind of device flags not mentioned here?) + uint8_t _padding[20]; /* make it 128 bytes in size */ that comment shoud be 'leave space for future additions' rather than specifying the size as some platforms won't actually be that size anyway.. regards, iain From owner-freebsd-bluetooth@FreeBSD.ORG Thu Mar 5 23:00:02 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BC2CB106564A for ; Thu, 5 Mar 2009 23:00:02 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from wf-out-1314.google.com (wf-out-1314.google.com [209.85.200.173]) by mx1.freebsd.org (Postfix) with ESMTP id 7B5BC8FC1C for ; Thu, 5 Mar 2009 23:00:02 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by wf-out-1314.google.com with SMTP id 27so164828wfd.7 for ; Thu, 05 Mar 2009 15:00:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=kR4AU0y3OKC4ajyvuEfovhPm+VJz1+/y4HfjQqlpn7I=; b=Salqbw/CjVsKoFl8RaXzhIfgd9KFyeMMI8qJ8s4TUpDn51eE95WJxPeVaMMtlULIbk juEdF76PnSNStxVw2q8nq8sk0LXW1FWp5Si5SJv3F2il6ypvU38vTcTak02S4Y9tMrtE rV2BVko/ZDcPWYY6Tek0YH1Qndi7rfXp2Sy8A= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=pN1lUvBn8MoKXRXU7nv7eIsy6dHrSi3Z13tY3WKRsbBuljmqzneCdecsetdAv38FvM 18YyHYdQeSsFEgKFwy3oEMus2ZNylyS4hqpWAiw7PeRbctYuS1TA6Mc8h5bv5rCFUTM/ a2Mm7R5mmxuIuly2UE6BSnNgqklkgRGqB/qI8= MIME-Version: 1.0 Received: by 10.142.100.1 with SMTP id x1mr740082wfb.256.1236294001851; Thu, 05 Mar 2009 15:00:01 -0800 (PST) In-Reply-To: <1236284095.692711.620.nullmailer@galant.ukfsn.org> References: <1233365217.00068654.1233354838@10.7.7.3> <1233758519.360141.162.nullmailer@galant.ukfsn.org> <1233845167.798942.24919.nullmailer@galant.ukfsn.org> <1233919880.530235.10843.nullmailer@galant.ukfsn.org> <1234605178.990729.799.nullmailer@galant.ukfsn.org> <1236284095.692711.620.nullmailer@galant.ukfsn.org> Date: Thu, 5 Mar 2009 15:00:01 -0800 Message-ID: From: Maksim Yevmenkin To: Iain Hibbert Content-Type: multipart/mixed; boundary=00504502c8e6d17e0904646720df Cc: "freebsd-bluetooth@freebsd.org" Subject: Re: libhci X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Mar 2009 23:00:03 -0000 --00504502c8e6d17e0904646720df Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On Thu, Mar 5, 2009 at 12:14 PM, Iain Hibbert wrote: > On Thu, 5 Mar 2009, Maksim Yevmenkin wrote: >> [v2] > > seems fine, some documentation comments > > +The > +.Fn bt_devenum > +function enumerates up to > +.Dv HCI_DEVMAX > +Bluetooth devices present in the system. > > This should not be in the function API but in a CAVEATS or BUGS section as > its implementation dependent :) yeah, sure. > +The > +.Fn bt_devenum > +uses the same socket for the duration of enumeration. > > Likewise I don't think this should be part of the specification as some > implementations might not be able to reuse the socket. Perhaps just say > that the socket handle provided will only be valid during the callback to > make sure that the callback doesn't store it? (can put it in CAVEATS > section that it is reused if you like?) fine > +The function guarantees that the socket, > +passed to the callback function, > +will be bound and connected to the Bluetooth device being enumerated. > +The function returns number of successfully enumerated devices, > +otherwise -1. > > can we say 'or -1 if an error occurred', as I think it could be valid to > successfully enumerate 0 devices..? yes, we can :) > +#define HCI_DEVFEATURES_SIZE NG_HCI_FEATURES_SIZE > > when I ported the include files I just chopped off the NG_, is there > any gain in having another definition? well, i wanted to have something that is compatible on the source code level. i could have used NG_HCI_FEATURES_SIZE but decided not to. > + uint32_t state; > > I guess state is impementation dependent? (some kind of device flags not > mentioned here?) yeah, its what ever device chooses to report. > + uint8_t _padding[20]; /* make it 128 bytes in size */ > > that comment shoud be 'leave space for future additions' rather than > specifying the size as some platforms won't actually be that size anyway.. sure. thanks, max --00504502c8e6d17e0904646720df Content-Type: text/plain; charset=US-ASCII; name="bluetooth-hci.diff.txt" Content-Disposition: attachment; filename="bluetooth-hci.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fry1irpe0 SW5kZXg6IGRldi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi5jCShyZXZpc2lvbiAwKQorKysgZGV2LmMJ KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBkZXYuYworICovCisKKy8qLQor ICogQ29weXJpZ2h0IChjKSAyMDA5IE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28u Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNs dWRlIDxibHVldG9vdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorCitzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcKK3sKKwljaGFyCQlkZXZuYW1lW0hDSV9E RVZOQU1FX1NJWkVdOworCWJkYWRkcl90IGNvbnN0CSpiZGFkZHI7Cit9OworCitzdGF0aWMgYnRf ZGV2ZW51bV9jYl90CWJ0X2RldmFkZHJfbWF0Y2g7CisKK2ludAorYnRfZGV2YWRkcihjaGFyIGNv bnN0ICpkZXZuYW1lLCBiZGFkZHJfdCAqYWRkcikKK3sKKwlzdHJ1Y3QgYnRfZGV2aW5mbwlkaTsK KworCXN0cmxjcHkoZGkuZGV2bmFtZSwgZGV2bmFtZSwgc2l6ZW9mKGRpLmRldm5hbWUpKTsKKwor CWlmIChidF9kZXZpbmZvKCZkaSkgPCAwKQorCQlyZXR1cm4gKDApOworCisJaWYgKGFkZHIgIT0g TlVMTCkKKwkJYmRhZGRyX2NvcHkoYWRkciwgJmRpLmJkYWRkcik7CisKKwlyZXR1cm4gKDEpOwor fQorCitpbnQKK2J0X2Rldm5hbWUoY2hhciAqZGV2bmFtZSwgYmRhZGRyX3QgY29uc3QgKmFkZHIp Cit7CisJc3RydWN0IGJ0X2RldmFkZHJfbWF0Y2hfYXJnCWFyZzsKKworCW1lbXNldCgmYXJnLCAw LCBzaXplb2YoYXJnKSk7CisJYXJnLmJkYWRkciA9IGFkZHI7CisKKwlpZiAoYnRfZGV2ZW51bSgm YnRfZGV2YWRkcl9tYXRjaCwgJmFyZykgPCAwKQorCQlyZXR1cm4gKDApOworCQorCWlmIChhcmcu ZGV2bmFtZVswXSA9PSAnXDAnKSB7CisJCWVycm5vID0gRU5YSU87CisJCXJldHVybiAoMCk7CisJ fQorCisJaWYgKGRldm5hbWUgIT0gTlVMTCkKKwkJc3RybGNweShkZXZuYW1lLCBhcmcuZGV2bmFt ZSwgSENJX0RFVk5BTUVfU0laRSk7CisKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50Citi dF9kZXZhZGRyX21hdGNoKGludCBzLCBzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcJKm0gPSAoc3RydWN0IGJ0X2Rl dmFkZHJfbWF0Y2hfYXJnICopYXJnOworCisJaWYgKCFiZGFkZHJfc2FtZSgmZGktPmJkYWRkciwg bS0+YmRhZGRyKSkKKwkJcmV0dXJuICgwKTsKKworCXN0cmxjcHkobS0+ZGV2bmFtZSwgZGktPmRl dm5hbWUsIHNpemVvZihtLT5kZXZuYW1lKSk7CisKKwlyZXR1cm4gKDEpOworfQorCkluZGV4OiBo Y2kuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBoY2kuYwkocmV2aXNpb24gMCkKKysrIGhjaS5jCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIGhjaS5jCisgKi8KKworLyotCisgKiBDb3B5 cmlnaHQgKGMpIDIwMDkgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+Cisg KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGJs dWV0b290aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBjaGFyICogYnRf ZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQgbm5sZW4p OworCitpbnQKK2J0X2RldmluZm8oc3RydWN0IGJ0X2RldmluZm8gKmRpKQoreworCXVuaW9uIHsK KwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdfbm9kZV9zdGF0ZQkJcjA7CisJCXN0cnVjdCBu Z19idHNvY2tldF9oY2lfcmF3X25vZGVfYmRhZGRyCQlyMTsKKwkJc3RydWN0IG5nX2J0c29ja2V0 X2hjaV9yYXdfbm9kZV9mZWF0dXJlcwlyMjsKKwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdf bm9kZV9idWZmZXIJCXIzOworCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX3N0YXQJ CXI0OworCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX2xpbmtfcG9saWN5X21hc2sg cjU7CisJCXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfcGFja2V0X21hc2sJcjY7CisJ CXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfcm9sZV9zd2l0Y2gJcjc7CisJCXN0cnVj dCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfZGVidWcJCXI4OworCX0JCQkJCQlycDsKKwlzdHJ1 Y3Qgc29ja2FkZHJfaGNpCQkJCWhhOworCWludAkJCQkJCXMsIHJ2YWw7CisKKwlpZiAoZGkgPT0g TlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbWVtc2V0 KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJaGEuaGNpX2xlbiA9IHNpemVvZihoYSk7CisJaGEuaGNp X2ZhbWlseSA9IEFGX0JMVUVUT09USDsKKworCWlmIChidF9hdG9uKGRpLT5kZXZuYW1lLCAmcnAu cjEuYmRhZGRyKSkgeworCQlpZiAoIWJ0X2Rldm5hbWUoaGEuaGNpX25vZGUsICZycC5yMS5iZGFk ZHIpKQorCQkJcmV0dXJuICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShkaS0+ZGV2bmFt ZSwgaGEuaGNpX25vZGUsCisJCQkJCXNpemVvZihoYS5oY2lfbm9kZSkpID09IE5VTEwpIHsKKwkJ ZXJybm8gPSBFTlhJTzsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcyA9IHNvY2tldChQRl9CTFVF VE9PVEgsIFNPQ0tfUkFXLCBCTFVFVE9PVEhfUFJPVE9fSENJKTsKKwlpZiAocyA8IDApCisJCXJl dHVybiAoLTEpOworCisJcnZhbCA9IC0xOworCisJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRk ciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAorCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29j a2FkZHIgKikgJmhhLCBzaXplb2YoaGEpKSA8IDApCisJCWdvdG8gYmFkOworCXN0cmxjcHkoZGkt PmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2YoZGktPmRldm5hbWUpKTsKKworCWlmIChpb2N0 bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfU1RBVEUsICZycC5yMCwgc2l6ZW9mKHJwLnIwKSkg PCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+c3RhdGUgPSBycC5yMC5zdGF0ZTsKKworCWlmIChpb2N0 bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfQkRBRERSLCAmcnAucjEsIHNpemVvZihycC5yMSkp IDwgMCkKKwkJZ290byBiYWQ7CisJYmRhZGRyX2NvcHkoJmRpLT5iZGFkZHIsICZycC5yMS5iZGFk ZHIpOworCQorCWlmIChpb2N0bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfRkVBVFVSRVMsICZy cC5yMiwgc2l6ZW9mKHJwLnIyKSkgPCAwKQorCQlnb3RvIGJhZDsKKwltZW1jcHkoZGktPmZlYXR1 cmVzLCBycC5yMi5mZWF0dXJlcywgc2l6ZW9mKGRpLT5mZWF0dXJlcykpOworCisJaWYgKGlvY3Rs KHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9CVUZGRVIsICZycC5yMywgc2l6ZW9mKHJwLnIzKSkg PCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+Y21kX2ZyZWUgPSBycC5yMy5idWZmZXIuY21kX2ZyZWU7 CisJZGktPnNjb19zaXplID0gcnAucjMuYnVmZmVyLnNjb19zaXplOworCWRpLT5zY29fcGt0cyA9 IHJwLnIzLmJ1ZmZlci5zY29fcGt0czsKKwlkaS0+c2NvX2ZyZWUgPSBycC5yMy5idWZmZXIuc2Nv X2ZyZWU7CisJZGktPmFjbF9zaXplID0gcnAucjMuYnVmZmVyLmFjbF9zaXplOworCWRpLT5hY2xf cGt0cyA9IHJwLnIzLmJ1ZmZlci5hY2xfcGt0czsKKwlkaS0+YWNsX2ZyZWUgPSBycC5yMy5idWZm ZXIuYWNsX2ZyZWU7CisKKwlpZiAoaW9jdGwocywgU0lPQ19IQ0lfUkFXX05PREVfR0VUX1NUQVQs ICZycC5yNCwgc2l6ZW9mKHJwLnI0KSkgPCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+Y21kX3NlbnQg PSBycC5yNC5zdGF0LmNtZF9zZW50OworCWRpLT5ldm50X3JlY3YgPSBycC5yNC5zdGF0LmV2bnRf cmVjdjsKKwlkaS0+YWNsX3JlY3YgPSBycC5yNC5zdGF0LmFjbF9yZWN2OworCWRpLT5hY2xfc2Vu dCA9IHJwLnI0LnN0YXQuYWNsX3NlbnQ7CisJZGktPnNjb19yZWN2ID0gcnAucjQuc3RhdC5zY29f cmVjdjsKKwlkaS0+c2NvX3NlbnQgPSBycC5yNC5zdGF0LnNjb19zZW50OworCWRpLT5ieXRlc19y ZWN2ID0gcnAucjQuc3RhdC5ieXRlc19yZWN2OworCWRpLT5ieXRlc19zZW50ID0gcnAucjQuc3Rh dC5ieXRlc19zZW50OworCisJaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9MSU5L X1BPTElDWV9NQVNLLAorCQkJJnJwLnI1LCBzaXplb2YocnAucjUpKSA8IDApCisJCWdvdG8gYmFk OworCWRpLT5saW5rX3BvbGljeV9pbmZvID0gcnAucjUucG9saWN5X21hc2s7CisKKwlpZiAoaW9j dGwocywgU0lPQ19IQ0lfUkFXX05PREVfR0VUX1BBQ0tFVF9NQVNLLAorCQkJJnJwLnI2LCBzaXpl b2YocnAucjYpKSA8IDApCisJCWdvdG8gYmFkOworCWRpLT5wYWNrZXRfdHlwZV9pbmZvID0gcnAu cjYucGFja2V0X21hc2s7CisKKwkgaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9S T0xFX1NXSVRDSCwKKwkJCSZycC5yNywgc2l6ZW9mKHJwLnI3KSkgPCAwKQorCQlnb3RvIGJhZDsK KwlkaS0+cm9sZV9zd2l0Y2hfaW5mbyA9IHJwLnI3LnJvbGVfc3dpdGNoOworCisJaWYgKGlvY3Rs KHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9ERUJVRywgJnJwLnI4LCBzaXplb2YocnAucjgpKSA8 IDApCisJCWdvdG8gYmFkOworCWRpLT5kZWJ1ZyA9IHJwLnI4LmRlYnVnOworCisJcnZhbCA9IDA7 CitiYWQ6CisJY2xvc2Uocyk7CisKKwlyZXR1cm4gKHJ2YWwpOworfQorCitpbnQKK2J0X2RldmVu dW0oYnRfZGV2ZW51bV9jYl90IGNiLCB2b2lkICphcmcpCit7CisJc3RydWN0IG5nX2J0c29ja2V0 X2hjaV9yYXdfbm9kZV9saXN0X25hbWVzCXJwOworCXN0cnVjdCBidF9kZXZpbmZvCQkJCWRpOwor CXN0cnVjdCBzb2NrYWRkcl9oY2kJCQkJaGE7CisJaW50CQkJCQkJcywgaSwgY291bnQ7CisKKwly cC5udW1fbmFtZXMgPSBIQ0lfREVWTUFYOworCXJwLm5hbWVzID0gKHN0cnVjdCBub2RlaW5mbyAq KSBjYWxsb2MocnAubnVtX25hbWVzLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBub2RlaW5mbykpOwor CWlmIChycC5uYW1lcyA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0x KTsKKwl9CisKKwltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKKwloYS5oY2lfbGVuID0gc2l6 ZW9mKGhhKTsKKwloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOworCWhhLmhjaV9ub2RlWzBd ID0gJ3gnOworCisJcyA9IHNvY2tldChQRl9CTFVFVE9PVEgsIFNPQ0tfUkFXLCBCTFVFVE9PVEhf UFJPVE9fSENJKTsKKwlpZiAocyA8IDApIHsKKwkJZnJlZShycC5uYW1lcyk7CisKKwkJcmV0dXJu ICgtMSk7CisJfQorCisJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVv ZihoYSkpIDwgMCB8fAorCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBz aXplb2YoaGEpKSA8IDAgfHwKKwkgICAgaW9jdGwocywgU0lPQ19IQ0lfUkFXX05PREVfTElTVF9O QU1FUywgJnJwLCBzaXplb2YocnApKSA8IDApIHsKKwkJY2xvc2Uocyk7CisJCWZyZWUocnAubmFt ZXMpOworCisJCXJldHVybiAoLTEpOworCX0KKworCWZvciAoY291bnQgPSAwLCBpID0gMDsgaSA8 IHJwLm51bV9uYW1lczsgaSArKykgeworCQlzdHJsY3B5KGRpLmRldm5hbWUsIHJwLm5hbWVzW2ld Lm5hbWUsIHNpemVvZihkaS5kZXZuYW1lKSk7CisJCWlmIChidF9kZXZpbmZvKCZkaSkgPCAwKQor CQkJY29udGludWU7CisKKwkJY291bnQgKys7CisKKwkJaWYgKGNiID09IE5VTEwpCisJCQljb250 aW51ZTsKKworCQlzdHJsY3B5KGhhLmhjaV9ub2RlLCBycC5uYW1lc1tpXS5uYW1lLCBzaXplb2Yo aGEuaGNpX25vZGUpKTsKKwkJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNp emVvZihoYSkpIDwgMCB8fAorCQkgICAgY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopICZo YSwgc2l6ZW9mKGhhKSkgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCgqY2IpKHMsICZkaSwg YXJnKSA+IDApCisJCQlicmVhazsKKwl9CisKKwljbG9zZSAocyk7CisJZnJlZShycC5uYW1lcyk7 CisKKwlyZXR1cm4gKGNvdW50KTsKK30KKworc3RhdGljIGNoYXIgKgorYnRfZGV2Mm5vZGUoY2hh ciBjb25zdCAqZGV2bmFtZSwgY2hhciAqbm9kZW5hbWUsIGludCBubmxlbikKK3sKKwlzdGF0aWMg Y2hhciBjb25zdCAqCSBidF9kZXZfcHJlZml4W10gPSB7CisJCSJidGNjYyIsCS8qIDNDb20gQmx1 ZXRvb3RoIFBDLUNBUkQgKi8KKwkJImg0IiwJCS8qIFVBUlQvc2VyaWFsIEJsdWV0b290aCBkZXZp Y2VzICovCisJCSJ1YnQiLAkJLyogQmx1ZXRvb3RoIFVTQiBkZXZpY2VzICovCisJCU5VTEwJCS8q IHNob3VsZCBiZSBsYXN0ICovCisJfTsKKworCXN0YXRpYyBjaGFyCQlfbm9kZW5hbWVbSENJX0RF Vk5BTUVfU0laRV07CisJY2hhciBjb25zdAkJKipwOworCWNoYXIJCQkqZXA7CisJaW50CQkJcGxl biwgdW5pdDsKKworCWlmIChub2RlbmFtZSA9PSBOVUxMKSB7CisJCW5vZGVuYW1lID0gX25vZGVu YW1lOworCQlubmxlbiA9IEhDSV9ERVZOQU1FX1NJWkU7CisJfQorCisJZm9yIChwID0gYnRfZGV2 X3ByZWZpeDsgKnAgIT0gTlVMTDsgcCArKykgeworCQlwbGVuID0gc3RybGVuKCpwKTsKKwkJaWYg KHN0cm5jbXAoZGV2bmFtZSwgKnAsIHBsZW4pICE9IDApCisJCQljb250aW51ZTsKKworCQl1bml0 ID0gc3RydG91bChkZXZuYW1lICsgcGxlbiwgJmVwLCAxMCk7CisJCWlmICgqZXAgIT0gJ1wwJyAm JgorCQkgICAgc3RyY21wKGVwLCAiaGNpIikgIT0gMCAmJgorCQkgICAgc3RyY21wKGVwLCAibDJj YXAiKSAhPSAwKQorCQkJcmV0dXJuIChOVUxMKTsJLyogY2FuJ3QgbWFrZSBzZW5zZSBvZiBkZXZp Y2UgbmFtZSAqLworCisJCXNucHJpbnRmKG5vZGVuYW1lLCBubmxlbiwgIiVzJXVoY2kiLCAqcCwg dW5pdCk7CisKKwkJcmV0dXJuIChub2RlbmFtZSk7CisJfQorCisJcmV0dXJuIChOVUxMKTsKK30K KwpJbmRleDogYmx1ZXRvb3RoLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLjMJKHJldmlzaW9u IDE4OTQxNCkKKysrIGJsdWV0b290aC4zCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot LlwiIENvcHlyaWdodCAoYykgMjAwMyBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9v LmNvbT4KKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOSBNYWtzaW0gWWV2bWVua2luIDxtX2V2 bWVua2luQHlhaG9vLmNvbT4KIC5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLlwiCiAuXCIgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CkBAIC0yNSw3ICsyNSw3IEBACiAuXCIgJElkOiBibHVldG9vdGguMyx2IDEuNSAyMDAz LzA1LzIwIDIzOjA0OjMwIG1heCBFeHAgJAogLlwiICRGcmVlQlNEJAogLlwiCi0uRGQgQXVndXN0 IDEzLCAyMDA4CisuRGQgRmVicnVhcnkgMTMsIDIwMDkKIC5EdCBCTFVFVE9PVEggMwogLk9zCiAu U2ggTkFNRQpAQCAtNzQsNiArNzQsMTYgQEAKIC5GdCBjb25zdCBjaGFyICoKIC5GbiBidF9udG9h ICJjb25zdCBiZGFkZHJfdCAqYmEiICJjaGFyICpzdHIiCiAuRnQgaW50CisuRm4gYnRfZGV2YWRk ciAiY29uc3QgY2hhciAqZGV2bmFtZSIgImJkYWRkcl90ICphZGRyIgorLkZ0IGludAorLkZuIGJ0 X2Rldm5hbWUgImNoYXIgKmRldm5hbWUiICJjb25zdCBiZGFkZHJfdCAqYWRkciIKKy5GdCBpbnQK Ky5GbiAoYnRfZGV2ZW51bV9jYl90KSAiaW50IHMiICJzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAq ZGkiICJ2b2lkICphcmciCisuRnQgaW50CisuRm4gYnRfZGV2aW5mbyAic3RydWN0IGJ0X2Rldmlu Zm8gKmRpIgorLkZ0IGludAorLkZuIGJ0X2RldmVudW0gImJ0X2RldmVudW1fY2JfdCAqY2IiICJ2 b2lkICphcmciCisuRnQgaW50CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICphIiAi Y29uc3QgYmRhZGRyX3QgKmIiCiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRhZGRy X3QgKmEiCkBAIC0xOTcsNiArMjA3LDExMCBAQAogSWYgbm8gYnVmZmVyIHdhcyBwcm92aWRlZCB0 aGVuIGludGVybmFsIHN0YXRpYyBidWZmZXIgd2lsbCBiZSB1c2VkLgogLlBwCiBUaGUKKy5GbiBi dF9kZXZhZGRyCitmdW5jdGlvbiBpbnRlcnByZXRzIHRoZSBzcGVjaWZpZWQKKy5GYSBkZXZuYW1l CitzdHJpbmcgYXMgdGhlIGFkZHJlc3Mgb3IgZGV2aWNlIG5hbWUgb2YgYSBCbHVldG9vdGggZGV2 aWNlIG9uIHRoZSBsb2NhbCBzeXN0ZW0sCithbmQgcGxhY2VzIHRoZSBkZXZpY2UgYWRkcmVzcyBp biB0aGUgcHJvdmlkZWQKKy5GYSBiZGFkZHIgLAoraWYgYW55LgorVGhlIGZ1bmN0aW9uIHJldHVy bnMgMSBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgaW50ZXJwcmV0ZWQsCitvciAwIGlm IHRoZSBzdHJpbmcgZGlkIG5vdCBtYXRjaCBhbnkgbG9jYWwgZGV2aWNlLgorVGhlCisuRm4gYnRf ZGV2bmFtZQorZnVuY3Rpb24gdGFrZXMgYSBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3MgYW5kIGNv cGllcyB0aGUgbG9jYWwgZGV2aWNlCituYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGFkZHJlc3Mg aW50byB0aGUgYnVmZmVyIHByb3ZpZGVkLAoraWYgYW55LgorQ2FsbGVyIG11c3QgZW5zdXJlIHRo YXQgcHJvdmlkZWQgYnVmZmVyIGlzIGF0IGxlYXN0CisuRHYgSENJX0RFVk5BTUVfU0laRQorY2hh cmFjdGVycyBpbiBzaXplLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIHRoZSBkZXZpY2Ug d2FzIGZvdW5kLAorb3RoZXJ3aXNlIDAuCisuUHAKK1RoZQorLkZuIGJ0X2RldmluZm8KK2Z1bmN0 aW9uIHBvcHVsYXRlcyBwcm9kaXZkZWQKKy5WdCBidF9kZXZpbmZvCitzdHJ1Y3R1cmUgd2l0aCB0 aGUgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gQmx1ZXRvb3RoIGRldmljZS4KK1RoZSBjYWxsZXIg aXMgZXhwZWN0ZWQgdG8gcGFzcyBCbHVldG9vdGggZGV2aWNlIG5hbWUgaW4gdGhlCisuRmEgZGV2 bmFtZQorZmllbGQgb2YgdGhlIHBhc3NlZAorLlZ0IGJ0X2RldmluZm8KK3N0cnVjdHVyZS4KK1Ro ZSBmdW5jdGlvbiByZXR1cm5zIDAgd2hlbiBzdWNjZXNzZnVsLAorb3RoZXJ3aXNlIC0xLgorVGhl CisuVnQgYnRfZGV2aW5mbworc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93cworLkJkIC1s aXRlcmFsIC1vZmZzZXQgaW5kZW50CitzdHJ1Y3QgYnRfZGV2aW5mbworeworICAgICAgICBjaGFy ICAgICAgICAgICAgZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsKKworICAgICAgICB1aW50MzJf dCAgICAgICAgc3RhdGU7CisKKyAgICAgICAgYmRhZGRyX3QgICAgICAgIGJkYWRkcjsKKyAgICAg ICAgdWludDE2X3QgICAgICAgIF9yZXNlcnZlZDA7CisKKyAgICAgICAgdWludDhfdCAgICAgICAg IGZlYXR1cmVzW0hDSV9ERVZGRUFUVVJFU19TSVpFXTsKKworICAgICAgICAvKiBidWZmZXIgaW5m byAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgX3Jlc2VydmVkMTsKKyAgICAgICAgdWludDE2 X3QgICAgICAgIGNtZF9mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgc2NvX3NpemU7Cisg ICAgICAgIHVpbnQxNl90ICAgICAgICBzY29fcGt0czsKKyAgICAgICAgdWludDE2X3QgICAgICAg IHNjb19mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgYWNsX3NpemU7CisgICAgICAgIHVp bnQxNl90ICAgICAgICBhY2xfcGt0czsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGFjbF9mcmVl OworCisgICAgICAgIC8qIHN0YXRzICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICBjbWRfc2Vu dDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGV2bnRfcmVjdjsKKyAgICAgICAgdWludDMyX3Qg ICAgICAgIGFjbF9yZWN2OworICAgICAgICB1aW50MzJfdCAgICAgICAgYWNsX3NlbnQ7CisgICAg ICAgIHVpbnQzMl90ICAgICAgICBzY29fcmVjdjsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHNj b19zZW50OworICAgICAgICB1aW50MzJfdCAgICAgICAgYnl0ZXNfcmVjdjsKKyAgICAgICAgdWlu dDMyX3QgICAgICAgIGJ5dGVzX3NlbnQ7CisKKyAgICAgICAgLyogbWlzYy9zcGVjaWZpYyAqLwor ICAgICAgICB1aW50MTZfdCAgICAgICAgbGlua19wb2xpY3lfaW5mbzsKKyAgICAgICAgdWludDE2 X3QgICAgICAgIHBhY2tldF90eXBlX2luZm87CisgICAgICAgIHVpbnQxNl90ICAgICAgICByb2xl X3N3aXRjaF9pbmZvOworICAgICAgICB1aW50MTZfdCAgICAgICAgZGVidWc7CisKKyAgICAgICAg dWludDhfdCAgICAgICAgIF9wYWRkaW5nWzIwXTsKK307CisuRWQKKy5QcAorVGhlCisuRm4gYnRf ZGV2ZW51bQorZnVuY3Rpb24gZW51bWVyYXRlcyBCbHVldG9vdGggZGV2aWNlcyBwcmVzZW50IGlu IHRoZSBzeXN0ZW0uCitGb3IgZXZlcnkgZGV2aWNlIGZvdW5kLAordGhlIGZ1bmN0aW9uIHdpbGwg Y2FsbCBwcm92aWRlZAorLkZhIGNiCitjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBzaG91bGQgYmUg b2YKKy5WdCBidF9kZXZlbnVtX2NiX3QKK3R5cGUuCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMg cGFzc2VkIGEKKy5EdiBIQ0kKK3NvY2tldAorLkZhIHMgLAorZnVsbHkgcG9wdWxhdGVkCisuVnQg YnRfZGV2aW5mbworc3RydWN0dXJlCisuRmEgZGkKK2FuZAorLkZhIGFyZworYXJndW1lbnQgcHJv dmlkZWQgdG8gdGhlCisuRm4gYnRfZGV2ZW51bSAuCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gY2Fu IHN0b3AgZW51bWVyYXRpb24gYnkgcmV0dXJuaW5nIGEgdmFsdWUKK3RoYXQgaXMgZ3JlYXRlciB0 aGFuIHplcm8uCitUaGUgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGVu dW1lcmF0ZWQgZGV2aWNlcywKK29yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorLlBwCitUaGUK IC5GbiBiZGFkZHJfc2FtZSAsCiAuRm4gYmRhZGRyX2FueQogYW5kCkBAIC0yODcsNyArNDAxLDgg QEAKIC5YciBnZXRwcm90b2J5bnVtYmVyIDMgLAogLlhyIGhlcnJvciAzICwKIC5YciBpbmV0X2F0 b24gMyAsCi0uWHIgaW5ldF9udG9hIDMKKy5YciBpbmV0X250b2EgMyAsCisuWHIgbmdfaGNpIDQK IC5TaCBDQVZFQVQKIFRoZQogLkZuIGJ0X2dldGhvc3RlbnQKQEAgLTMxMiw2ICs0MjcsMjAgQEAK IGZ1bmN0aW9uIG9wZW5zIGFuZC9vciByZXdpbmRzIHRoZQogLlBhIC9ldGMvYmx1ZXRvb3RoL3By b3RvY29scwogZmlsZS4KKy5QcAorVGhlCisuRm4gYnRfZGV2ZW51bQorZnVuY3Rpb24gZW51bWVy YXRlcyB1cCB0bworLkR2IEhDSV9ERVZNQVgKK0JsdWV0b290aCBkZXZpY2VzLgorRHVyaW5nIGVu dW1lcmF0aW9uIHRoZQorLkZuIGJ0X2RldmVudW0KK2Z1bmN0aW9uIHVzZXMgdGhlIHNhbWUKKy5E diBIQ0kKK3NvY2tldC4KK1RoZSBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgdGhlIHNvY2tldCwK K3Bhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sCit3aWxsIGJlIGJvdW5kIGFuZCBjb25u ZWN0ZWQgdG8gdGhlIEJsdWV0b290aCBkZXZpY2UgYmVpbmcgZW51bWVyYXRlZC4KIC5TaCBBVVRI T1JTCiAuQW4gTWFrc2ltIFlldm1lbmtpbiBBcSBtX2V2bWVua2luQHlhaG9vLmNvbQogLlNoIEJV R1MKSW5kZXg6IGJsdWV0b290aC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJsdWV0b290aC5jCShyZXZpc2lv biAxODk0MTQpCisrKyBibHVldG9vdGguYwkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDkgQEAK IC8qCiAgKiBibHVldG9vdGguYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIE1ha3Np bSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28uY29tPgorICovCisKKy8qLQorICogQ29weXJp Z2h0IChjKSAyMDAxLTIwMDkgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+ CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApJbmRleDogYmx1ZXRv b3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLmgJKHJldmlzaW9uIDE4OTQxNCkKKysrIGJs dWV0b290aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsOSBAQAogLyoKICAqIGJsdWV0b290 aC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgTWFrc2ltIFlldm1lbmtpbiA8bV9l dm1lbmtpbkB5YWhvby5jb20+CisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAw OSBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9vLmNvbT4KICAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNSw5ICszNywxMiBAQAogI2luY2x1ZGUg PHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9iaXRzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMv ZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5o PgogI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bmV0 ZGIuaD4KKyNpbmNsdWRlIDxuZXRncmFwaC9uZ19tZXNzYWdlLmg+CiAjaW5jbHVkZSA8bmV0Z3Jh cGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfaGNpLmg+CiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRv b3RoL2luY2x1ZGUvbmdfbDJjYXAuaD4KICNpbmNsdWRlIDxuZXRncmFwaC9ibHVldG9vdGgvaW5j bHVkZS9uZ19idHNvY2tldC5oPgpAQCAtNzIsNiArNzcsNjMgQEAKIGNoYXIgY29uc3QgKiAgICAg IGJ0X250b2EgICAgICAgICAgICAgKGJkYWRkcl90IGNvbnN0ICpiYSwgY2hhciAqc3RyKTsKIGlu dCAgICAgICAgICAgICAgIGJ0X2F0b24gICAgICAgICAgICAgKGNoYXIgY29uc3QgKnN0ciwgYmRh ZGRyX3QgKmJhKTsKIAorLyogYnRfZGV2WFhYWCgpIGZ1bmN0aW9ucyAoaW5zcGlyZWQgYnkgTmV0 QlNEKSAqLworaW50ICAgICAgICAgICAgICAgYnRfZGV2YWRkciAgICAgICAgICAoY2hhciBjb25z dCAqZGV2bmFtZSwgYmRhZGRyX3QgKmFkZHIpOworaW50ICAgICAgICAgICAgICAgYnRfZGV2bmFt ZSAgICAgICAgICAoY2hhciAqZGV2bmFtZSwgYmRhZGRyX3QgY29uc3QgKmFkZHIpOworCisvKiAK KyAqIEJsdWV0b290aCBIQ0kgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZQlIQ0lfREVWTUFYCQkJ MzIJCS8qIGFyYml0cmFyeSAqLworI2RlZmluZQlIQ0lfREVWTkFNRV9TSVpFCQlOR19OT0RFU0la CisjZGVmaW5lCUhDSV9ERVZGRUFUVVJFU19TSVpFCQlOR19IQ0lfRkVBVFVSRVNfU0laRQorCitz dHJ1Y3QgYnRfZGV2aW5mbworeworCWNoYXIJCWRldm5hbWVbSENJX0RFVk5BTUVfU0laRV07CisK Kwl1aW50MzJfdAlzdGF0ZTsJCS8qIGRldmljZS9pbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyAqLwor CisJYmRhZGRyX3QJYmRhZGRyOworCXVpbnQxNl90CV9yZXNlcnZlZDA7CisKKwl1aW50OF90CQlm ZWF0dXJlc1tIQ0lfREVWRkVBVFVSRVNfU0laRV07CisKKwkvKiBidWZmZXIgaW5mbyAqLworCXVp bnQxNl90CV9yZXNlcnZlZDE7CisJdWludDE2X3QJY21kX2ZyZWU7CisJdWludDE2X3QJc2NvX3Np emU7CisJdWludDE2X3QJc2NvX3BrdHM7CisJdWludDE2X3QJc2NvX2ZyZWU7CisJdWludDE2X3QJ YWNsX3NpemU7CisJdWludDE2X3QJYWNsX3BrdHM7CisJdWludDE2X3QJYWNsX2ZyZWU7CisKKwkv KiBzdGF0cyAqLworCXVpbnQzMl90CWNtZF9zZW50OworCXVpbnQzMl90CWV2bnRfcmVjdjsKKwl1 aW50MzJfdAlhY2xfcmVjdjsKKwl1aW50MzJfdAlhY2xfc2VudDsKKwl1aW50MzJfdAlzY29fcmVj djsKKwl1aW50MzJfdAlzY29fc2VudDsKKwl1aW50MzJfdAlieXRlc19yZWN2OworCXVpbnQzMl90 CWJ5dGVzX3NlbnQ7CisKKwkvKiBtaXNjL3NwZWNpZmljICovCisJdWludDE2X3QJbGlua19wb2xp Y3lfaW5mbzsKKwl1aW50MTZfdAlwYWNrZXRfdHlwZV9pbmZvOworCXVpbnQxNl90CXJvbGVfc3dp dGNoX2luZm87CisJdWludDE2X3QJZGVidWc7CisKKwl1aW50OF90CQlfcGFkZGluZ1syMF07CS8q IGxlYXZlIHNwYWNlIGZvciBmdXR1cmUgYWRkaXRpb25zICovCit9OworCit0eXBlZGVmIGludAko YnRfZGV2ZW51bV9jYl90KShpbnQsIHN0cnVjdCBidF9kZXZpbmZvIGNvbnN0ICosIHZvaWQgKik7 CisKK2ludAkJYnRfZGV2aW5mbyAoc3RydWN0IGJ0X2RldmluZm8gKmRpKTsKK2ludAkJYnRfZGV2 ZW51bSAoYnRfZGV2ZW51bV9jYl90ICpjYiwgdm9pZCAqYXJnKTsKKwogLyoKICAqIGJkYWRkciB1 dGlsaXR5IGZ1bmN0aW9ucyAoZnJvbSBOZXRCU0QpCiAgKi8KSW5kZXg6IE1ha2VmaWxlCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIE1ha2VmaWxlCShyZXZpc2lvbiAxODk0MTQpCisrKyBNYWtlZmlsZQkod29ya2lu ZyBjb3B5KQpAQCAtOSw3ICs5LDcgQEAKIAogU0hMSUJfTUFKT1I9CTMKIAotU1JDUz0JCWJsdWV0 b290aC5jCitTUkNTPQkJYmx1ZXRvb3RoLmMgZGV2LmMgaGNpLmMKIElOQ1M9CQlibHVldG9vdGgu aAogCiBNTElOS1MrPQlibHVldG9vdGguMyBidF9nZXRob3N0YnluYW1lLjMKQEAgLTI3LDYgKzI3 LDEyIEBACiBNTElOS1MrPQlibHVldG9vdGguMyBidF9udG9hLjMKIE1MSU5LUys9CWJsdWV0b290 aC4zIGJ0X2F0b24uMwogCitNTElOS1MrPQlibHVldG9vdGguMyBidF9kZXZhZGRyLjMKK01MSU5L Uys9CWJsdWV0b290aC4zIGJ0X2Rldm5hbWUuMworCitNTElOS1MrPQlibHVldG9vdGguMyBidF9k ZXZpbmZvLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmVudW0uMworCiBNTElOS1MrPQli bHVldG9vdGguMyBiZGFkZHJfc2FtZS4zCiBNTElOS1MrPQlibHVldG9vdGguMyBiZGFkZHJfYW55 LjMKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9jb3B5LjMK --00504502c8e6d17e0904646720df--