From: Hamid Nassiby Subject: crypto accelerator driver problems Date: Sun, 19 Dec 2010 16:28:03 +0330 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 To: linux-crypto@vger.kernel.org Return-path: Received: from mail-yx0-f174.google.com ([209.85.213.174]:48619 "EHLO mail-yx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756250Ab0LSNDv (ORCPT ); Sun, 19 Dec 2010 08:03:51 -0500 Received: by yxt3 with SMTP id 3so958041yxt.19 for ; Sun, 19 Dec 2010 05:03:51 -0800 (PST) In-Reply-To: Sender: linux-crypto-owner@vger.kernel.org List-ID: SGkgQWxsLAoKSW4gYSByZXNlYXJjaCBwcm9qZWN0LCB3ZSd2ZSBkZXZlbG9wZWQgYSBjcnlwdG8g YWNjZWxlcmF0b3IgYmFzZWQgb24gWGlsaW54ClZpcnRleDUgRlBHQSBmYW1pbHkgd2hpY2jCoGlz IGNvbm5lY3RlZCB0byBQQyB0aHJvdWdoIFBDSS1FeHByZXNzIHNsb3QgYW5kIGlzCnVzZWQgYnkg SVBTZWMgdG8gb2ZmbG9hZCBjcnlwdG8gcHJvY2Vzc2luZyBmcm9twqBDUFUuIFRoZSBhY2NlbGVy YXRvciBvbmx5CnByb3ZpZGVzIEFFUyBhbmQgREVTM19FREUgYWxnb3JpdGhtcyBhbmQgSSBhbSBy ZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGRyaXZlcgpvZiB0aGUgc3R1ZmYuIEkgaW5zcGlyZWQg bXVjaCBvZiBkcml2ZXIgd29yayBmcm9tIGdlb2RlX2Flcy5jIHdoaWNoIGlzCmxvY2F0ZWQgaW4g ImRyaXZlcnMvY3J5cHRvIiBzdWJkaXIgb2Yga2VybmVsIHNvdXJjZSBkaXJlY3RvcnkuIEJvdGgg YWxnb3JpdGhtcwphcmUgcmVnaXN0ZXJlZCBhcyBibGtjaXBoZXIgcHJvdmlkaW5nIGNiYyB3cmFw cGVyICJjYmMoYWVzKSIganVzdCBhcyBvbmUgdGhhdCBpcwpyZWdpc3RlcmVkIGluIGdlb2RlX2Fl cy4gTm93IGFmdGVyIG1vbnRocyBvZiB3b3JrLCB0aGUgYWNjZWxlcmF0b3IgaXMgcmVhZHkgdG8K d29yayAoQ29ycmVjdG5lc3Mgb2YgaGFyZHdhcmUgb3BlcmF0aW9uIGlzIGFzc3VyZWQgYnkgZGly ZWN0IGNyeXB0bwp0ZXN0IGFuZCBub3QgYnkgSVBTZWMpIGFuZCBpdCBpcyB0aW1lIG9mIGRyaXZl ciB0byBwcm92aWRlIElQU2VjCmFjY2VzcyB0byBhY2NlbGVyYXRvci4gSW4gZmlyc3QKdHJ5IEkg Y291bGQgZ2V0IMKgInBpbmciIHRocm91Z2ggdGhlIElQc2VjIHR1bm5lbC4gT25lIGVuZCBvZiBJ UFNlYyB0dW5uZWwgaXMKZXF1aXBwZWQgYnkgb3VyIGFjY2VsZXJhdG9yIGFuZCB0aGUgb3RoZXIg ZW5kIGlzIHVzaW5nIGtlcm5lbCBuYXRpdmUgSVBTZWMgYW5kCmJ1aWx0IGluIEFFUyBhbmQgREVT M19FREUgYWxnb3JpdGhtcy4gTm93IEkgYW0gZmFjZWQgd2l0aCAyIHByb2JsZW1zOgoKMS4gUGlu ZyB3aWxsIHN0b3AgZ2V0dGluZyByZXBseSB3aXRoIHBhY2tldCBzaXplcyBncmVhdGVyIHRoYW4g MTQyNiBCeXRlcwoocGluZyBkZXN0X2lwIC1zIMKgMTQyNykuIEkgZ3Vlc3NlZCB0aGF0IGl0IG1p Z2h0IGJlIE1UVSBwcm9ibGVtLCBidXQgcmVkdWNpbmcKbXR1IHdpdGggImlmY29uZmlnIGV0aDEg bXR1IHh4eCIgb3IKImVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9ub19wbXR1X2Rpc2Mi CsKgZG9lcyBub3Qgc29sdmUgdGhlIHByb2JsZW0uIEFsc28gd2hlbiBJIHBpbmcgZWFjaCBvZiB0 dW5uZWwgZW5kcyBmcm9tCmFub3RoZXIgZW5kCnNpbXVsdGFuZW91c2x5IHdpdGggInBpbmcgb3Ro ZXJfbm9kZV9pcMKgIC1pIDAuMDAxIiwgdGhlIGtlcm5lbCBoYW5ncwpvdXQgY29tcGxldGVseS4K CjIuIElwZXJmIHByb2JsZW0uIFdoZW4gSSB0cnkgdG8gbWVhc3VyZSB0aHJvdWdocHV0IG9mIHRo ZSBJUFNlYyBnYXRld2F5IGVxdWlwcGVkCmJ5IG91ciBhY2NlbGVyYXRvciAoIEFFUy1NRDUgKSwg dXNpbmcgaXBlcmYgaW4gdGNwIG1vZGUsIHRoZSBrZXJuZWwgaGFuZ3Mgc3VjaAp0aGF0IHNvbWV0 aW1lcyAiTWFnaWMgU3lzUnEga2V5IiBkb2VzIG5vdCByZXNwb25kIHRvbyEgQW5kIHNvIEkgY291 bGQgbm90IHRyYWNlCnRoZSBwcm9ibGVtIGFueXdheS4gVXNpbmcgaXBlcmYgaW4gdWRwIG1vZGUg d29ya3MgYnV0IEkgZ2V0ICJVRFAgYmFkIGNoZWtzdW0iIGluCidkbWVzZycgb3V0cHV0IG9mIG90 aGVyIGVuZCBvZiB0dW5uZWwgKE5hdGl2ZSBJUFNlYyBhbmQgYnVpbHQgaW4ga2VybmVsCmFsZ29y aXRobXMpLgoKVHdvIGdhdGV3YXlzIGFyZSBjb25uZWN0ZWQgYnkgYSBjcm9zcyBjYWJsZSBhbmQg bm8gcm91dGVyL3N3aXRjaCBpcyBsb2NhdGVkCmJldHdlZW4gdGhlbSB0byBjYXVzZSBtdHUgcHJv YmxlbXMuIEluIG15IHRlc3QgcGNyeXB0IGlzIG5vdCB1c2VkIGJ5IG5vdyBhbmQKYm9vdGluZyB0 aGUga2VybmVsIHdpdGggbm9zbXAgKHNvIG5vIGZlYXIgb2YgdGhyZWFkIGNvbnRlbnRpb24pIGRv ZXMgbm90IGNoYW5nZQp0aGUgc2l0dWF0aW9uLgoKU28gSSByZXF1ZXN0IHlvdSB0byBoZWxwIG1l IHNvbHZlIHRoZSBwcm9ibGVtLiBJIGJyaW5nIHNvbWUgcGFydHMgb2YgZHJpdmVyCnRoYXQgaXMg Y2hhbmdlZCBmcm9tIGdlb2RlX2Flcy5jIGFuZCBtaWdodCBnaXZlIHVzZWZ1bCBpbmZvcm1hdGlv bi4gSWYKaXQgaXMgcmVxdWlyZWQsCkknbGwgcG9zdCBhbGwgZHJpdmVyIHRleHQuCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpzdGF0 aWMgc3RydWN0IGNyeXB0b19hbGcgbXlkcml2ZXJfY2JjX2FsZyA9IHsKwqAgwqAgwqAgwqAuY3Jh X25hbWUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgPSDCoCDCoCDCoCAiY2JjKGFlcykiLArCoCDCoCDC oCDCoC5jcmFfZHJpdmVyX25hbWUgwqAgwqAgwqAgwqA9IMKgIMKgIMKgICJjYmMtYWVzLW15ZHJp dmVyIiwKwqAgwqAgwqAgwqAuY3JhX3ByaW9yaXR5IMKgIMKgIMKgIMKgIMKgID0gwqAgwqAgwqAg NDAwLArCoCDCoCDCoCDCoC5jcmFfZmxhZ3MgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqA9IMKgIMKgIMKgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIgfAoKQ1JZUFRPX0FMR19ORUVE X0ZBTExCQUNLLArCoCDCoCDCoCDCoC5jcmFfaW5pdCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCA9IMKgIMKgIMKgIGZhbGxiYWNrX2luaXRfYmxrLArCoCDCoCDCoCDCoC5jcmFfZXhp dCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA9IMKgIMKgIMKgIGZhbGxiYWNrX2V4 aXRfYmxrLArCoCDCoCDCoCDCoC5jcmFfYmxvY2tzaXplIMKgIMKgIMKgIMKgIMKgPSDCoCDCoCDC oCBBRVNfTUlOX0JMT0NLX1NJWkUsCsKgIMKgIMKgIMKgLmNyYV9jdHhzaXplIMKgIMKgIMKgIMKg IMKgIMKgPSDCoCDCoCDCoCBzaXplb2Yoc3RydWN0IG15ZHJpdmVyX2Flc19vcCksCsKgIMKgIMKg IMKgLmNyYV9hbGlnbm1hc2sgwqAgwqAgwqAgwqAgwqA9IMKgIMKgIMKgIDE1LArCoCDCoCDCoCDC oC5jcmFfdHlwZSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA9IMKgIMKgIMKgICZj cnlwdG9fYmxrY2lwaGVyX3R5cGUsCsKgIMKgIMKgIMKgLmNyYV9tb2R1bGUgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgPSDCoCDCoCDCoCBUSElTX01PRFVMRSwKwqAgwqAgwqAgwqAuY3Jh X2xpc3QgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgPQpMSVNUX0hFQURfSU5JVCht eWRyaXZlcl9jYmNfYWxnLmNyYV9saXN0KSwKwqAgwqAgwqAgwqAuY3JhX3UgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA9IMKgIMKgIMKgIHsKwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAuYmxrY2lwaGVyIMKgIMKgIMKgPSDCoCDCoCDCoCB7CsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgLm1pbl9rZXlzaXplIMKgIMKgPSDCoCDCoCDCoCBBRVNfTUlOX0tFWV9T SVpFLArCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC5tYXhfa2V5c2l6ZSDCoCDC oD0gwqAgwqAgwqAgQUVTX01JTl9LRVlfU0laRSwKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAuc2V0a2V5IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgID0gwqAgwqAgwqAgbXlkcml2 ZXJfc2V0a2V5X2JsaywKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAuZW5jcnlw dCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoD0gwqAgwqAgwqAgbXlkcml2ZXJfY2JjX2VuY3J5cHQs CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLmRlY3J5cHQgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqA9IMKgIMKgIMKgIG15ZHJpdmVyX2NiY19kZWNyeXB0LArCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoC5pdnNpemUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgPSDC oCDCoCDCoCBBRVNfSVZfTEVOR1RILArCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KwqAgwqAgwqAg wqB9Cn07Ci8vLS0tLS0tLS0tLS0tLS0tCnN0YXRpYyBpbnQKbXlkcml2ZXJfY2JjX2VuY3J5cHQo c3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLArCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0 cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqB1bnNpZ25lZCBpbnQgbmJ5dGVzKQp7CgrCoCDCoCDCoCDCoHN0cnVj dCBteWRyaXZlcl9hZXNfb3AgKm9wID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsK wqAgwqAgwqAgwqBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKwqAgwqAgwqAgwqBpbnQgZXJy LCByZXQ7CgrCoCDCoCDCoCDCoGlmICh1bmxpa2VseShvcC0+a2V5bGVuICE9IEFFU19LRVlTSVpF XzEyOCkpCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIGZhbGxiYWNrX2Jsa19lbmMoZGVz YywgZHN0LCBzcmMsIG5ieXRlcyk7CgrCoCDCoCDCoCDCoGJsa2NpcGhlcl93YWxrX2luaXQoJndh bGssIGRzdCwgc3JjLCBuYnl0ZXMpOwrCoCDCoCDCoCDCoGVyciA9IGJsa2NpcGhlcl93YWxrX3Zp cnQoZGVzYywgJndhbGspOwrCoCDCoCDCoCDCoG9wLT5pdiA9IHdhbGsuaXY7CgrCoCDCoCDCoCDC oHdoaWxlKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg b3AtPnNyYyA9IHdhbGsuc3JjLnZpcnQuYWRkciwKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBvcC0+ ZHN0ID0gd2Fsay5kc3QudmlydC5hZGRyOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG9wLT5tb2Rl ID0gQUVTX01PREVfQ0JDOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG9wLT5sZW4gPSBuYnl0ZXMg LSAobmJ5dGVzICUgQUVTX01JTl9CTE9DS19TSVpFKTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBv cC0+ZGlyID0gQUVTX0RJUl9FTkNSWVBUOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoC8vcmV0ID0gbXlkcml2ZXJfYWVzX2NyeXB0KG9wKTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqByZXQgPSBteWRyaXZlcl90cmFuc2Zvcm0ob3AsIDApOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oG5ieXRlcyAtPSByZXQ7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZXJyID0gYmxrY2lwaGVyX3dh bGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKwqAgwqAgwqAgwqB9CgrCoCDCoCDCoCDCoHJl dHVybiBlcnI7Cn0KLyotLS0tLS0tLS0gbXlkcml2ZXJfdHJhbnNmb3JtIHdoaWNoIG1ha2VzIGEg YnVmZmVyIGNvbnRhaW5pbmcga2V5LCBpdiwgZGF0YQp3aXRoCnNvbWUgYWRkaXRpb25hbCBoZWFk ZXIgdGhhdCBpcyByZXF1aXJlZCBieSBvdXIgYWNjZWxlcmF0b3IsIHdyaXRlcyB0aGUgYnVmZmVy CnRvIGFjY2VsZXJhdG9yIGJ5IERNQSBhbmQgdGhlbiByZWFkcyByZXNwb25zZSBmcm9tIGhhcmR3 YXJlLiovCgpzdGF0aWMgaW5saW5lIGludCBteWRyaXZlcl90cmFuc2Zvcm0oc3RydWN0IG15ZHJp dmVyX2Flc19vcCAqb3AsIGludCBhbGcpCnsKCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IMKg cmVxX2xlbiwgZXJyOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHU4ICpyZXFfYnVmID0gTlVMTCwg KnJlc19idWYgPSBOVUxMOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGFsZ19vcGVyYXRpb24gb3Bl cmF0aW9uOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHUzMiBteV9yZXFfaWQ7CsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgaWYgKG9wLT5sZW4gPT0gMCkKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqByZXR1cm4gMDsKCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKChvcC0+ZGlyID09 IEFFU19ESVJfRU5DUllQVCkgfHwob3AtPmRpciA9PQpERVMzX0RJUl9FTkNSWVBUKSl7CsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9wZXJhdGlvbiA9IFNIX0VOQ1JZUFQ7CsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG15X3JlcV9pZCA9IHNtcF9wcm9jZXNz b3JfaWQoKTsvLyBUaGlzIElEIGlzCnB1dCBpbnRvIG91ciBwYWNrZXQgYW5kIGlzIGNoZWNrZWQg YnkgZWFjaCB0aHJlYWQgd2hlbiB0aGUgaGFyZHdhcmUKcmVzcG9uc2UgaXMgcmVhZHkgdG8gc2Vl IGlmIHRoZSBwYWNrZXQgaXMgaXRzPwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBlbHNlIHsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBv cGVyYXRpb24gPSBTSF9ERUNSWVBUOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oG15X3JlcV9pZCA9IHNtcF9wcm9jZXNzb3JfaWQoKSArIDY0OwovL3VuaXF1ZW5lc3Mgb2YgSUQg ZG9lcyBub3Qgc29sdmUgcHJvYmxlbSBkZXNjcmliZWQgaW4gbWFpbCA6KCAuCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgfQoKCgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVyciA9IGNyZWF0ZV9yZXF1 ZXN0KGFsZywgb3AtPm1vZGUsIG9wZXJhdGlvbiwgaHRvbmwobXlfcmVxX2lkKSwKb3AtPmtleSwg b3AtPml2LCBvcC0+c3JjLCBvcC0+bGVuLCAmcmVxX2J1ZiwgJnJlcV9sZW4pOwoKCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgaWYgKGVycil7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgcHJpbnRrKEtFUk5fRU1FUkcibXlkcml2ZXJfdHJhbnNmb3JtIDogRXJyb3IKQ3JlYXRlUmV1 ZXN0IDoKZXJyY29kZSA9ICVkXG4iLCBlcnIpOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoC8vZ290byBlcnJvcjsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9CgrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGVyciA9IHdyaXRlX3JlcXVlc3QocmVxX2J1ZiwgcmVxX2xlbik7CsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgaWYgKGVycil7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcHJpbnRrKEtFUk5fRU1FUkcibXlkcml2ZXJfdHJhbnNmb3JtIDogRXJyb3IgV3JpdGVS ZXVlc3QKOgplcnJjb2RlID0gJWRcbiIsIGVycik7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgLy9nb3RvIGVycm9yOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBrZnJlZShyZXFfYnVmKTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXFf YnVmID0gTlVMTDsKCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZXJyID0gcmVhZF9yZXNwb25zZSgm cmVzX2J1ZiwgLypsb2NhbF9oZHIuTGVuZ3RoKi9teV9yZXFfaWQpOwoKwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBtZW1jcHkob3AtPmRzdCwgKHJlc19idWYgKyBzaXplb2Yoc3RydWN0IHJlc3BvbnNl X2hkcikpLApvcC0+bGVuKTsKCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKga2ZyZWUocmVzX2J1Zik7 CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmVzX2J1ZiA9IE5VTEw7CsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcmV0dXJuIG9wLT5sZW47Cn0KLy8tLS0tLS0tLS0tLQovKiBjcmVhdGVfcmVxdWVzdCB3 aWNoIGJ1aWxkcyBwYWNrZXQgZm9yIG15ZHJpdmVyX3RyYW5zZm9ybSAqLwpzdGF0aWMgaW5saW5l IGludCBjcmVhdGVfcmVxdWVzdChpbnQgYWxnLCBjaGFyIG1vZGUsIGNoYXIgZW5jX2RlYywgdTMy CnJlcXVlc3RfaWQsCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNoYXIgKmtleSwgY2hhciAq aXYsIGNoYXIgKmRhdGEsIGludCBkYXRhbGVuLArCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1 OCAqKm91dGJ1ZiwgaW50ICpvdXRsZW4pCnsKwqAgwqAgwqAgwqBpbnQgcmVxX2xlbiwgbl9wYWRk aW5nLCBrZXlsZW4sIGJsb2NrbGVuLCBhbGdpZDsKwqAgwqAgwqAgwqBzdHJ1Y3QgcmVxdWVzdF9o ZHIgKnBfaGRyOwrCoCDCoCDCoCDCoGNoYXIgKnB0cjsKCsKgIMKgIMKgIMKgaWYgKGFsZyA9PSAw KXsgLy9BRVMgQWxnb3JpdGhtCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKga2V5bGVuID0gMTY7CsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgYmxvY2tsZW4gPSAxNjsKwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBhbGdpZCA9IDQ7CsKgIMKgIMKgIMKgfSBlbHNlIGlmIChhbGcgPT0gMSl7IC8vREVTMyBBbGdv cml0aG0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBrZXlsZW4gPSAyNDsKwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBibG9ja2xlbiA9IDg7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYWxnaWQgPSAzOwrC oCDCoCDCoCDCoH0KCsKgIMKgIMKgIMKgcmVxX2xlbiA9IHNpemVvZihzdHJ1Y3QgcmVxdWVzdF9o ZHIpICsga2V5bGVuOwrCoCDCoCDCoCDCoGlmIChrZXlsZW4gIT0gMCAmJiBrZXlsZW4gJSAxNiA9 PSAwKQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJlcV9sZW4gKz0gODsgLy9Gb3IgcmVxdWVzdCBw YWNrZXQgdG8gYmUgMTI4Yml0IGFsaWduZWQKwqAgwqAgwqAgwqBpZiAobW9kZSA9PSBTSEFNU19D QkMpCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmVxX2xlbiArPSBibG9ja2xlbjsgLy8gZm9yIElW IGxlbgoKwqAgwqAgwqAgwqBuX3BhZGRpbmcgPSAoYmxvY2tsZW4gLSAoZGF0YWxlbiAlIGJsb2Nr bGVuKSkgJSBibG9ja2xlbjsgLy9wYWRkaW5nCmRhdGEgdG8gYmUgbXVsdGlwbGUgb2YgMTI4IGJp dHMuCgrCoCDCoCDCoCDCoHJlcV9sZW4gKz0gKG5fcGFkZGluZyArIGRhdGFsZW4pOwrCoCDCoCDC oCDCoCpvdXRidWYgPSBrbWFsbG9jKHJlcV9sZW4sIEdGUF9BVE9NSUMpOwrCoCDCoCDCoCDCoHBf aGRyID0gKHN0cnVjdCByZXF1ZXN0X2hkciAqKSAqb3V0YnVmOwrCoCDCoCDCoCDCoCpvdXRsZW4g PSBwX2hkci0+TGVuZ3RoID0gcmVxX2xlbjsKCsKgIMKgIMKgIMKgcF9oZHItPnJlcXVlc3RfaWQg PSByZXF1ZXN0X2lkOwrCoCDCoCDCoCDCoHBfaGRyLT5BbGdJRF9Nb2RlX0VuY0RlYyA9IChlbmNf ZGVjIDw8IDE1KSB8IChtb2RlIDw8IDEyKSB8IGFsZ2lkOwrCoCDCoCDCoCDCoC8vIEZpbGxpbmcg a2V5CsKgIMKgIMKgIMKgcHRyID0gKm91dGJ1ZiArIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF9oZHIp OwrCoCDCoCDCoCDCoG1lbWNweShwdHIsIGtleSwga2V5bGVuKTsKwqAgwqAgwqAgwqBwdHIgKz0g a2V5bGVuOwrCoCDCoCDCoCDCoGlmIChrZXlsZW4gIT0gMCAmJiBrZXlsZW4gJSAxNiA9PSAwKXsK wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBtZW1zZXQocHRyLCAwLCA4KTsKwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBwdHIgKz0gODsKwqAgwqAgwqAgwqB9CsKgIMKgIMKgIMKgLy8gRmlsbGluZyBJVgrC oCDCoCDCoCDCoGlmIChtb2RlID09IFNIQU1TX0NCQyl7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg bWVtY3B5KHB0ciwgaXYsIGJsb2NrbGVuKTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwdHIgKz0g YmxvY2tsZW47CsKgIMKgIMKgIMKgfQrCoCDCoCDCoCDCoC8vIENvcHkgZGF0YQrCoCDCoCDCoCDC oG1lbWNweShwdHIsIGRhdGEsIGRhdGFsZW4pOwrCoCDCoCDCoCDCoHB0ciArPSBkYXRhbGVuOwrC oCDCoCDCoCDCoC8vIFplcm9pbmcgcGFkZCBiaXRzCsKgIMKgIMKgIMKgbWVtc2V0KHB0ciwgMCwg bl9wYWRkaW5nKTsKCsKgIMKgIMKgIMKgcmV0dXJuIDA7Cgp9Ci8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLyogd3JpdGVfcmVxdWVzdCB0aGF0IHdyaXRlcyB0aGUgcHJvdmlkZWQg YnVmZmVyIHRvIGRldmljZSAqLwoKc3RhdGljIGlubGluZSBpbnQgd3JpdGVfcmVxdWVzdCh1OCAq YnVmZiwgdW5zaWduZWQgaW50IGNvdW50KQp7CnVuc2lnbmVkIGxvbmcgwqBpZmxhZ3M7CnUzMiB0 bHBfY291bnQsIHRscF9zaXplOwpkbWFfYWRkcl90IGRtYV9hZGRyOwpzdHJ1Y3QgeDVwY2llX2Rt YV9kZXNjICpkZXNjX3RhYmxlID0gKHN0cnVjdCB4NXBjaWVfZG1hX2Rlc2MgKilnbG9iYWxfYmFy WzBdOwoKLyoqIERNQSBvcGVyYXRpb25zOiovCsKgIMKgIMKgIMKgZG1hX2FkZHIgPSBwY2lfbWFw X3NpbmdsZShnbG9iYWxfZGV2LCBidWZmLCBjb3VudCwgUENJX0RNQV9UT0RFVklDRSk7CsKgIMKg IMKgIMKgaWYgKDAgPT0gZG1hX2FkZHIpIHsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludGso S0VSTl9FTUVSRyJYUENJZV9SZWFkOiBNYXAgZXJyb3IuXG4iKTsKwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqByZXR1cm4gLTE7CsKgIMKgIMKgIMKgfQoKLy8gRG8gRE1BIHRyYW5zZmVyIGhlcmUuLi4u CsKgIMKgIMKgIMKgY291bnQgPSBjb3VudCAvNDsvLwrCoCDCoCDCoCDCoGZvciAodGxwX3NpemUg PSAzMjsgdGxwX3NpemUgPiAwOyB0bHBfc2l6ZS0tKQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlm ICgoY291bnQgJSB0bHBfc2l6ZSkgPT0gMCl7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgdGxwX2NvdW50ID0gY291bnQgLyB0bHBfc2l6ZTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBicmVhazsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9CgrCoCDCoCDCoCDC oHRscF9zaXplID0gdGxwX2NvdW50IHwgKHRscF9zaXplIDw8IDE2KTsKwqAgwqAgwqAgwqBzcGlu X2xvY2tfaXJxc2F2ZSgmd2xvY2ssIGlmbGFncyk7CsKgIMKgIMKgIMKgLy9kb3duKCZteV9zZW0p OwovLyDCoCDCoCDCoGlmIChkb3duX2ludGVycnVwdGlibGUoJm15X3NlbSkpewovLyDCoCDCoCDC oCDCoCDCoCDCoCDCoHByaW50ayhLRVJOX0VNRVJHICJcbndyaXRlX3JlcXVlc3Q6IEVycm9yIEFj cXVpcmUgU2VtYXBob3JlISEiKTsKLy8gwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gLUVSRVNU QVJUU1lTOwovLyDCoCDCoCDCoH0KwqAgwqAgwqAgwqB3cml0ZWwoY3B1X3RvX2xlMzIodGxwX3Np emUpLCZkZXNjX3RhYmxlLT5yZG1hdGxwYyk7IMKgIMKgIMKgIMKgIMKgIMKgIC8vIHJlYWQKRE1B IFRMUCBjb3VudDogwqBUTFBzIHRvIHRyYW5zZmVyCsKgIMKgIMKgIMKgd3JpdGVsKGNwdV90b19s ZTMyKGRtYV9hZGRyKSwmZGVzY190YWJsZS0+cmRtYXRscGEpOyDCoC8vIHBoeXNpY2FsIGJ1cwph ZGRyZXNzIG9mIERNQSBhYmxlIGJ1ZmZlcgrCoCDCoCDCoCDCoHdtYigpOwrCoCDCoCDCoCDCoHdy aXRldyhjcHVfdG9fbGUxNigweDAwMDEpLChnbG9iYWxfYmFyWzBdKzYpKTsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAvLyByZWFkCmRtYSBzdGFydCBiaXRbMTZdIHRvIGRkbWFjcgrCoCDCoCDCoCDC oHdtYigpOwrCoCDCoCDCoCDCoHdoaWxlKHJlYWR3KChnbG9iYWxfYmFyWzBdKzYpKSAhPSAweDAx MDEpOwrCoCDCoCDCoCDCoHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsb2NrLCBpZmxhZ3MpOwrC oCDCoCDCoCDCoC8vdXAoJm15X3NlbSk7CsKgIMKgIMKgwqAgLy8gVW5tYXAgdGhlIERNQSBidWZm ZXIgc28gaXQgaXMgc2FmZSBmb3Igbm9ybWFsIGFjY2VzcyBhZ2Fpbi4KwqAgwqAgwqAgwqBwY2lf dW5tYXBfc2luZ2xlKGdsb2JhbF9kZXYsIGRtYV9hZGRyLCBjb3VudCwgUENJX0RNQV9UT0RFVklD RSk7CgrCoCDCoCDCoCDCoC8qKiBFbmQgb2YgZG1hIHNlY3Rpb24qLwrCoCDCoCDCoCDCoHJldHVy biAwOwoKfQovLy0tLS0tLS0tLS0tLS0tCi8qIHJlYWRfcmVzcG9uc2UgdGhhdCByZWFkcyB0aGUg ZW4vZGVjcnlwdGVkIGJ1ZmZlciBmcm9tIGRldmljZSAqLwoKc3RhdGljIGlubGluZSBpbnQgcmVh ZF9yZXNwb25zZSh1OCAqKmJ1ZmYsIMKgdTE2IG15X3JlcV9pZCkKewrCoCDCoCDCoCDCoGRtYV9h ZGRyX3QgZG1hX2FkZHI7CsKgIMKgIMKgIMKgdTE2IGNvdW50LCB0bXBfcmVxX2lkOwrCoCDCoCDC oCDCoHVuc2lnbmVkIGxvbmcgwqBpZmxhZ3MxOy8vLCBpZmxhZ3MyOwrCoCDCoCDCoCDCoHUzMiB0 bHBfY291bnQsIHRscF9zaXplOwrCoCDCoCDCoCDCoHN0cnVjdCB4NXBjaWVfZG1hX2Rlc2MgKmRl c2NfdGFibGUgPSAoc3RydWN0IHg1cGNpZV9kbWFfZGVzYwoqKWdsb2JhbF9iYXJbMF07CgrCoCDC oCDCoCDCoGZvcig7Oyl7CgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHNwaW5fbG9ja19pcnFzYXZl KCZhbG9jaywgaWZsYWdzMSk7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdG1wX3JlcV9pZCA9IHJl YWR3KChnbG9iYWxfYmFyWzBdICsgODIgKyAoZmlmb19lbnRyeSAqIDQpKSk7CsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWxvY2ssIGlmbGFnczEpOwrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGlmKG15X3JlcV9pZCA9PSB0bXBfcmVxX2lkKSAvLyBJcyB0aGUg cHJvdmlkZWQgcGFja2V0IG1pbmU/CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg YnJlYWs7CgrCoCDCoCDCoCDCoH0KCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg Y291bnQgPSByZWFkdyhnbG9iYWxfYmFyWzBdICsgODAgKyAoZmlmb19lbnRyeQoqIDQpKTsvL1do YXQgaXMgdGhlIHNpemUgb2YgbXkgcGFja2V0PwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHByaW50ayhLRVJOX0VNRVJHICJyZWFkX3Jlc3BvbnNlIDogbXlfcmVxX2lkID0gJWQg aGFzCmNvdW50ID0gJWRcbiIsIG15X3JlcV9pZCwgY291bnQpOwoKwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAqYnVmZiA9IGttYWxsb2MoY291bnQsIEdGUF9BVE9NSUMpOwrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUo Z2xvYmFsX2RldiwgKmJ1ZmYsIGNvdW50LApQQ0lfRE1BX0ZST01ERVZJQ0UpOwrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICgwID09IGRtYV9hZGRyKXsKwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludGsoS0VSTl9FTUVSRyJYUENJ ZV9SZWFkOiBNYXAgZXJyb3IuXG4iKTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqByZXR1cm4gLTE7CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgfQoKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb3VudCA9IGNvdW50IC80 Oy8vCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZm9yICh0bHBfc2l6ZSA9IDMy OyB0bHBfc2l6ZSA+IDA7IHRscF9zaXplLS0pCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgaWYgKChjb3VudCAlIHRscF9zaXplKSA9PSAwKXsKwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0bHBfY291 bnQgPSBjb3VudCAvIHRscF9zaXplOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgdGxwX3NpemUgPSB0bHBfY291bnQgfCAodGxwX3NpemUgPDwgMTYpOwrCoCDCoCDCoCDCoC8v IMKgIMKgIMKgIMKgIMKgIMKgIMKgZG93bigmbXlfc2VtKTsKLy8gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZteV9zZW0pKXsKLy8gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludGsoS0VSTl9FTUVSRyAi XG5yZWFkX3Jlc3BvbnNlOiBFcnJvcgpBY3F1aXJlIFNlbWFwaG9yZSEhIik7Ci8vIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC1FUkVTVEFSVFNZUzsK Ly8gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9CsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgd3JpdGVsKGNwdV90b19sZTMyKHRscF9zaXplKSwmZGVzY190YWJsZS0+ d2RtYXRscGMpOwrCoCDCoCDCoCDCoC8vIHJlYWQgRE1BIFRMUCBjb3VudDogwqBUTFBzIHRvIHRy YW5zZmVyCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgd3JpdGVsKGNwdV90b19s ZTMyKGRtYV9hZGRyKSwmZGVzY190YWJsZS0+d2RtYXRscGEpOyDCoC8vCnBoeXNpY2FsIGJ1cyBh ZGRyZXNzIG9mIERNQSBhYmxlIGJ1ZmZlcgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHdtYigpOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHdyaXRldyhjcHVf dG9fbGUxNigweDAwMDEpLChnbG9iYWxfYmFyWzBdKzQpKTsKwqAgwqAgLy8gcmVhZCBkbWEgc3Rh cnQgYml0WzE2XSB0byBkZG1hY3IKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB3 bWIoKTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB3aGlsZShyZWFkdyhnbG9i YWxfYmFyWzBdKzQpICE9IDB4MDEwMSk7CgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGZpZm9fZW50cnkgPSAoZmlmb19lbnRyeSArIDEpICUgOTsgLy8gOSA6IE51bWJlciBvZgpy ZWdpc3RlcnMgaG9sZGluZyByZXF1ZXN0X2lkIGFuZCBsZW4gb2YgRmlGbydzIGVsZW1lbnRzIC4K wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAvL3NwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnJsb2NrLCBpZmxhZ3MyKTsKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAv L3VwKCZteV9zZW0pOwrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHBjaV91bm1h cF9zaW5nbGUoZ2xvYmFsX2RldiwgZG1hX2FkZHIsIGNvdW50LApQQ0lfRE1BX0ZST01ERVZJQ0Up OwoKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gY291bnQ7Cgp9CgoK VGhhbmtzIGluIGFkdmFuY2UsCkhhbWlkLgo=