From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shobhit Kumar Subject: [v2] drm/i915: Add support for Generic MIPI panel driver Date: Fri, 23 May 2014 21:35:27 +0530 Message-ID: <1400861127-11475-1-git-send-email-shobhit.kumar@intel.com> References: <1397454507-10273-5-git-send-email-shobhit.kumar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 2A5DD6EE53 for ; Fri, 23 May 2014 09:06:10 -0700 (PDT) In-Reply-To: <1397454507-10273-5-git-send-email-shobhit.kumar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx Cc: Jani Nikula , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org VGhpcyBkcml2ZXIgbWFrZXMgdXNlIG9mIHRoZSBnZW5lcmljIHBhbmVsIGluZm9ybWF0aW9uIGZy b20gdGhlIFZCVC4KUGFuZWwgaW5mb3JtYXRpb24gaXMgY2xhc3NpZmllZCBpbnRvIHR3byAtIHBh bmVsIGNvbmZpZ3VyYXRpb24gYW5kIHBhbmVsCnBvd2VyIHNlcXVlbmNlIHdoaWNoIGlzIHVuaXF1 ZSB0byBlYWNoIHBhbmVsLiBUaGUgZ2VuZXJpYyBkcml2ZXIgdXNlcyB0aGUKcGFuZWwgY29uZmln dXJhdGlvbiBhbmQgc2VxdWVuY2UgcGFyc2VkIGZyb20gVkJUIGJsb2NrICM1MiBhbmQgIzUzCgp2 MjogQWRkcmVzcyByZXZpZXcgY29tbWVudHMgYnkgSmFuaQogICAgLSBNb3ZlIGFsbCBvZiB0aGUg dGhpbmdzIGluIGRyaXZlciBjIGZpbGUgZnJvbSBoZWFkZXIKICAgIC0gTWFrZSBhbGwgZnVuY3Rp b25zIHN0YXRpYwogICAgLSBNYWtlIHVzZSBvZiB2aWRlby9taXBpX2Rpc3BsYXkuYyBpbnN0ZWFk IG9mIHJlZGVmaW5pbmcKICAgIC0gTnVsbCBjaGVja3MgZHVyaW5nIHNlcXVlbmNlIGV4ZWN1dGlv bgoKdjM6IEFkZHJlc3MgcmV2aWV3IGNvbW1lbnRzIGJ5IERhbWllbgogICAgLSBSZW5hbWUgdGhl IHBhbmVsIGRyaXZlciBmaWxlIGFzIGludGVsX2RzaV9wYW5lbF92YnQuYwogICAgLSBGaXggc3R5 bGUgY2hhbmdlcyBhcyBzdWdnZXN0ZWQKICAgIC0gQ29ycmVjdCBjb21tZW50cyBmb3IgbHAtPmhz IGFuZCBocy0+bHAgY291bnQgY2FsY3VsYXRpb25zCiAgICAtIEdlbmVyYWwgdXBkYXRpbmcgY29t bWVudHMgdG8gaGF2ZSBtb3JlIGNsYXJpdHkKICAgIC0gdXNpbmcgbWF4KCkgaW5zdGVhZCBvZiB0 ZXJuYXJ5IG9wZXJhdG9yCiAgICAtIEZpeCBuYW1lcyAodWlfbnVtLCB1aV9kZW4pIHdoaWxlIHVz aW5nIFVJIGluIGNhbGN1bGF0aW9ucwogICAgLSBjb21wdXRlIG1heCBvZiBscF90b19ocyBzd2l0 Y2ggYW5kIGhzX3RvX2xwIHN3aXRjaCB3aGlsZSBjb21wdXRpbmcKICAgICAgaHNfbHBfc3dpdGNo X2NvdW50CgpTaWduZWQtb2ZmLWJ5OiBTaG9iaGl0IEt1bWFyIDxzaG9iaGl0Lmt1bWFyQGludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAg IDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmMgICAgICAgICAgIHwgICA1ICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RzaS5oICAgICAgICAgICB8ICAgMiArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kc2lfcGFuZWxfdmJ0LmMgfCA1ODkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNTk3IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kc2lfcGFuZWxfdmJ0 LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDdiMmYzYmUuLmNhZDE2ODMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC02Miw2ICs2Miw3IEBAIGk5MTUteSArPSBkdm9fY2g3MDE3Lm8gXAogCSAg aW50ZWxfZHNpX2NtZC5vIFwKIAkgIGludGVsX2RzaS5vIFwKIAkgIGludGVsX2RzaV9wbGwubyBc CisJICBpbnRlbF9kc2lfcGFuZWxfdmJ0Lm8gXAogCSAgaW50ZWxfZHZvLm8gXAogCSAgaW50ZWxf aGRtaS5vIFwKIAkgIGludGVsX2kyYy5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmMKaW5kZXgg MjUyNWNkZC4uZTczYmVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmMKQEAgLTM1LDYgKzM1 LDExIEBACiAKIC8qIHRoZSBzdWItZW5jb2RlcnMgYWthIHBhbmVsIGRyaXZlcnMgKi8KIHN0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfZHNpX2RldmljZSBpbnRlbF9kc2lfZGV2aWNlc1tdID0gewor CXsKKwkJLnBhbmVsX2lkID0gTUlQSV9EU0lfR0VORVJJQ19QQU5FTF9JRCwKKwkJLm5hbWUgPSAi dmJ0LWdlbmVyaWMtZHNpLXZpZC1tb2RlLWRpc3BsYXkiLAorCQkuZGV2X29wcyA9ICZ2YnRfZ2Vu ZXJpY19kc2lfZGlzcGxheV9vcHMsCisJfSwKIH07CiAKIHN0YXRpYyB2b2lkIGJhbmRfZ2FwX3Jl c2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RzaS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHNpLmgKaW5kZXggZTNmNGU5MS4uMzFkYjMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHNpLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmgK QEAgLTEzMyw0ICsxMzMsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9kc2kgKmVuY190 b19pbnRlbF9kc2koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogZXh0ZXJuIHZvaWQgdmx2 X2VuYWJsZV9kc2lfcGxsKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKTsKIGV4dGVybiB2 b2lkIHZsdl9kaXNhYmxlX2RzaV9wbGwoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpOwog CitleHRlcm4gc3RydWN0IGludGVsX2RzaV9kZXZfb3BzIHZidF9nZW5lcmljX2RzaV9kaXNwbGF5 X29wczsKKwogI2VuZGlmIC8qIF9JTlRFTF9EU0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHNpX3BhbmVsX3ZidC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHNpX3BhbmVsX3ZidC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjIxYTBkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k c2lfcGFuZWxfdmJ0LmMKQEAgLTAsMCArMSw1ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx NCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKiBBdXRob3I6IFNob2JoaXQgS3VtYXIgPHNob2JoaXQua3VtYXJAaW50 ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KKyNpbmNsdWRlIDxkcm0vaTkx NV9kcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8dmlkZW8vbWlwaV9k aXNwbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2ludGVsLW1pZC5oPgorI2luY2x1ZGUgPHZpZGVvL21p cGlfZGlzcGxheS5oPgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2 LmgiCisjaW5jbHVkZSAiaW50ZWxfZHNpLmgiCisjaW5jbHVkZSAiaW50ZWxfZHNpX2NtZC5oIgor CisjZGVmaW5lIE1JUElfVFJBTlNGRVJfTU9ERV9TSElGVAkwCisjZGVmaW5lIE1JUElfVklSVFVB TF9DSEFOTkVMX1NISUZUCTEKKyNkZWZpbmUgTUlQSV9QT1JUX1NISUZUCQkJMworCisjZGVmaW5l IFBSRVBBUkVfQ05UX01BWAkJMHgzRgorI2RlZmluZSBFWElUX1pFUk9fQ05UX01BWAkweDNGCisj ZGVmaW5lIENMS19aRVJPX0NOVF9NQVgJMHhGRgorI2RlZmluZSBUUkFJTF9DTlRfTUFYCQkweDFG CisKKyNkZWZpbmUgTlNfS0haX1JBVElPIDEwMDAwMDAKKworI2RlZmluZSBHUEkwX05DXzBfSFZf RERJMF9IUEQgICAgICAgICAgIDB4NDEzMAorI2RlZmluZSBHUElPX05DXzBfSFZfRERJMF9QQUQg ICAgICAgICAgIDB4NDEzOAorI2RlZmluZSBHUElPX05DXzFfSFZfRERJMF9ERENfU0RBICAgICAg IDB4NDEyMAorI2RlZmluZSBHUElPX05DXzFfSFZfRERJMF9ERENfU0RBX1BBRCAgIDB4NDEyOAor I2RlZmluZSBHUElPX05DXzJfSFZfRERJMF9ERENfU0NMICAgICAgIDB4NDExMAorI2RlZmluZSBH UElPX05DXzJfSFZfRERJMF9ERENfU0NMX1BBRCAgIDB4NDExOAorI2RlZmluZSBHUElPX05DXzNf UEFORUwwX1ZEREVOICAgICAgICAgIDB4NDE0MAorI2RlZmluZSBHUElPX05DXzNfUEFORUwwX1ZE REVOX1BBRCAgICAgIDB4NDE0OAorI2RlZmluZSBHUElPX05DXzRfUEFORUwwX0JMS0VOICAgICAg ICAgIDB4NDE1MAorI2RlZmluZSBHUElPX05DXzRfUEFORUwwX0JMS0VOX1BBRCAgICAgIDB4NDE1 OAorI2RlZmluZSBHUElPX05DXzVfUEFORUwwX0JMS0NUTCAgICAgICAgIDB4NDE2MAorI2RlZmlu ZSBHUElPX05DXzVfUEFORUwwX0JMS0NUTF9QQUQgICAgIDB4NDE2OAorI2RlZmluZSBHUElPX05D XzZfUENPTkYwICAgICAgICAgICAgICAgIDB4NDE4MAorI2RlZmluZSBHUElPX05DXzZfUEFEICAg ICAgICAgICAgICAgICAgIDB4NDE4OAorI2RlZmluZSBHUElPX05DXzdfUENPTkYwICAgICAgICAg ICAgICAgIDB4NDE5MAorI2RlZmluZSBHUElPX05DXzdfUEFEICAgICAgICAgICAgICAgICAgIDB4 NDE5OAorI2RlZmluZSBHUElPX05DXzhfUENPTkYwICAgICAgICAgICAgICAgIDB4NDE3MAorI2Rl ZmluZSBHUElPX05DXzhfUEFEICAgICAgICAgICAgICAgICAgIDB4NDE3OAorI2RlZmluZSBHUElP X05DXzlfUENPTkYwICAgICAgICAgICAgICAgIDB4NDEwMAorI2RlZmluZSBHUElPX05DXzlfUEFE ICAgICAgICAgICAgICAgICAgIDB4NDEwOAorI2RlZmluZSBHUElPX05DXzEwX1BDT05GMCAgICAg ICAgICAgICAgIDB4NDBFMAorI2RlZmluZSBHUElPX05DXzEwX1BBRCAgICAgICAgICAgICAgICAg IDB4NDBFOAorI2RlZmluZSBHUElPX05DXzExX1BDT05GMCAgICAgICAgICAgICAgIDB4NDBGMAor I2RlZmluZSBHUElPX05DXzExX1BBRCAgICAgICAgICAgICAgICAgIDB4NDBGOAorCitzdHJ1Y3Qg Z3Bpb190YWJsZSB7CisJdTE2IGZ1bmN0aW9uX3JlZzsKKwl1MTYgcGFkX3JlZzsKKwl1OCBpbml0 OworfTsKKworc3RhdGljIHN0cnVjdCBncGlvX3RhYmxlIGd0YWJsZVtdID0geworCXsgR1BJMF9O Q18wX0hWX0RESTBfSFBELCBHUElPX05DXzBfSFZfRERJMF9QQUQsIDAgfSwKKwl7IEdQSU9fTkNf MV9IVl9EREkwX0REQ19TREEsIEdQSU9fTkNfMV9IVl9EREkwX0REQ19TREFfUEFELCAwIH0sCisJ eyBHUElPX05DXzJfSFZfRERJMF9ERENfU0NMLCBHUElPX05DXzJfSFZfRERJMF9ERENfU0NMX1BB RCwgMCB9LAorCXsgR1BJT19OQ18zX1BBTkVMMF9WRERFTiwgR1BJT19OQ18zX1BBTkVMMF9WRERF Tl9QQUQsIDAgfSwKKwl7IEdQSU9fTkNfNF9QQU5FTDBfQkxLRU4sIEdQSU9fTkNfNF9QQU5FTDBf QkxLRU5fUEFELCAwIH0sCisJeyBHUElPX05DXzVfUEFORUwwX0JMS0NUTCwgR1BJT19OQ181X1BB TkVMMF9CTEtDVExfUEFELCAwIH0sCisJeyBHUElPX05DXzZfUENPTkYwLCBHUElPX05DXzZfUEFE LCAwIH0sCisJeyBHUElPX05DXzdfUENPTkYwLCBHUElPX05DXzdfUEFELCAwIH0sCisJeyBHUElP X05DXzhfUENPTkYwLCBHUElPX05DXzhfUEFELCAwIH0sCisJeyBHUElPX05DXzlfUENPTkYwLCBH UElPX05DXzlfUEFELCAwIH0sCisJeyBHUElPX05DXzEwX1BDT05GMCwgR1BJT19OQ18xMF9QQUQs IDB9LAorCXsgR1BJT19OQ18xMV9QQ09ORjAsIEdQSU9fTkNfMTFfUEFELCAwfQorfTsKKworc3Rh dGljIHU4ICptaXBpX2V4ZWNfc2VuZF9wYWNrZXQoc3RydWN0IGludGVsX2RzaSAqaW50ZWxfZHNp LCB1OCAqZGF0YSkKK3sKKwl1OCB0eXBlLCBieXRlLCBtb2RlLCB2YywgcG9ydDsKKwl1MTYgbGVu OworCisJYnl0ZSA9ICpkYXRhKys7CisJbW9kZSA9IChieXRlID4+IE1JUElfVFJBTlNGRVJfTU9E RV9TSElGVCkgJiAweDE7CisJdmMgPSAoYnl0ZSA+PiBNSVBJX1ZJUlRVQUxfQ0hBTk5FTF9TSElG VCkgJiAweDM7CisJcG9ydCA9IChieXRlID4+IE1JUElfUE9SVF9TSElGVCkgJiAweDM7CisKKwkv KiBMUCBvciBIUyBtb2RlICovCisJaW50ZWxfZHNpLT5ocyA9IG1vZGU7CisKKwkvKiBnZXQgcGFj a2V0IHR5cGUgYW5kIGluY3JlbWVudCB0aGUgcG9pbnRlciAqLworCXR5cGUgPSAqZGF0YSsrOwor CisJbGVuID0gKigodTE2ICopIGRhdGEpOworCWRhdGEgKz0gMjsKKworCXN3aXRjaCAodHlwZSkg eworCWNhc2UgTUlQSV9EU0lfR0VORVJJQ19TSE9SVF9XUklURV8wX1BBUkFNOgorCQlkc2lfdmNf Z2VuZXJpY193cml0ZV8wKGludGVsX2RzaSwgdmMpOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJ X0dFTkVSSUNfU0hPUlRfV1JJVEVfMV9QQVJBTToKKwkJZHNpX3ZjX2dlbmVyaWNfd3JpdGVfMShp bnRlbF9kc2ksIHZjLCAqZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfR0VORVJJQ19T SE9SVF9XUklURV8yX1BBUkFNOgorCQlkc2lfdmNfZ2VuZXJpY193cml0ZV8yKGludGVsX2RzaSwg dmMsICpkYXRhLCAqKGRhdGEgKyAxKSk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfR0VORVJJ Q19SRUFEX1JFUVVFU1RfMF9QQVJBTToKKwljYXNlIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFV RVNUXzFfUEFSQU06CisJY2FzZSBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8yX1BBUkFN OgorCQlEUk1fREVCVUdfRFJJVkVSKCJHZW5lcmljIFJlYWQgbm90IHlldCBpbXBsZW1lbnRlZCBv ciB1c2VkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9HRU5FUklDX0xPTkdfV1JJVEU6 CisJCWRzaV92Y19nZW5lcmljX3dyaXRlKGludGVsX2RzaSwgdmMsIGRhdGEsIGxlbik7CisJCWJy ZWFrOworCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFOgorCQlkc2lfdmNfZGNzX3dyaXRl XzAoaW50ZWxfZHNpLCB2YywgKmRhdGEpOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0RDU19T SE9SVF9XUklURV9QQVJBTToKKwkJZHNpX3ZjX2Rjc193cml0ZV8xKGludGVsX2RzaSwgdmMsICpk YXRhLCAqKGRhdGEgKyAxKSk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRENTX1JFQUQ6CisJ CURSTV9ERUJVR19EUklWRVIoIkRDUyBSZWFkIG5vdCB5ZXQgaW1wbGVtZW50ZWQgb3IgdXNlZFxu Iik7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRENTX0xPTkdfV1JJVEU6CisJCWRzaV92Y19k Y3Nfd3JpdGUoaW50ZWxfZHNpLCB2YywgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisJfTsKKworCWRh dGEgKz0gbGVuOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB1OCAqbWlwaV9leGVjX2Rl bGF5KHN0cnVjdCBpbnRlbF9kc2kgKmludGVsX2RzaSwgdTggKmRhdGEpCit7CisJdTMyIGRlbGF5 ID0gKigodTMyICopIGRhdGEpOworCisJdXNsZWVwX3JhbmdlKGRlbGF5LCBkZWxheSArIDEwKTsK KwlkYXRhICs9IDQ7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHU4ICptaXBpX2V4ZWNf Z3BpbyhzdHJ1Y3QgaW50ZWxfZHNpICppbnRlbF9kc2ksIHU4ICpkYXRhKQoreworCXU4IGdwaW8s IGFjdGlvbjsKKwl1MTYgZnVuY3Rpb24sIHBhZDsKKwl1MzIgdmFsOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBpbnRlbF9kc2ktPmJhc2UuYmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWdwaW8gPSAqZGF0YSsrOwor CisJLyogcHVsbCB1cC9kb3duICovCisJYWN0aW9uID0gKmRhdGErKzsKKworCWZ1bmN0aW9uID0g Z3RhYmxlW2dwaW9dLmZ1bmN0aW9uX3JlZzsKKwlwYWQgPSBndGFibGVbZ3Bpb10ucGFkX3JlZzsK KworCW11dGV4X2xvY2soJmRldl9wcml2LT5kcGlvX2xvY2spOworCWlmICghZ3RhYmxlW2dwaW9d LmluaXQpIHsKKwkJLyogcHJvZ3JhbSB0aGUgZnVuY3Rpb24gKi8KKwkJLyogRklYTUU6IHJlbW92 ZSBjb25zdGFudCBiZWxvdyAqLworCQl2bHZfZ3Bpb19uY193cml0ZShkZXZfcHJpdiwgZnVuY3Rp b24sIDB4MjAwMENDMDApOworCQlndGFibGVbZ3Bpb10uaW5pdCA9IDE7CisJfQorCisJdmFsID0g MHg0IHwgYWN0aW9uOworCisJLyogcHVsbCB1cC9kb3duICovCisJdmx2X2dwaW9fbmNfd3JpdGUo ZGV2X3ByaXYsIHBhZCwgdmFsKTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcGlvX2xvY2sp OworCisJcmV0dXJuIGRhdGE7Cit9CisKK3R5cGVkZWYgdTggKiAoKmZuX21pcGlfZWxlbV9leGVj KShzdHJ1Y3QgaW50ZWxfZHNpICppbnRlbF9kc2ksIHU4ICpkYXRhKTsKK3N0YXRpYyBjb25zdCBm bl9taXBpX2VsZW1fZXhlYyBleGVjX2VsZW1bXSA9IHsKKwlOVUxMLCAvKiByZXNlcnZlZCAqLwor CW1pcGlfZXhlY19zZW5kX3BhY2tldCwKKwltaXBpX2V4ZWNfZGVsYXksCisJbWlwaV9leGVjX2dw aW8sCisJTlVMTCwgLyogc3RhdHVzIHJlYWQ7IGxhdGVyICovCit9OworCisvKgorICogTUlQSSBT ZXF1ZW5jZSBmcm9tIFZCVCAjNTMgcGFyc2luZyBsb2dpYworICogV2UgaGF2ZSBhbHJlYWR5IHNl cGFyYXRlZCBlYWNoIHNlcWVuY2UgZHVyaW5nIGJpb3MgcGFyc2luZworICogRm9sbG93aW5nIGlz IGdlbmVyaWMgZXhlY3V0aW9uIGZ1bmN0aW9uIGZvciBhbnkgc2VxdWVuY2UKKyAqLworCitzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IHNlcV9uYW1lW10gPSB7CisJIlVOREVGSU5FRCIsCisJIk1J UElfU0VRX0FTU0VSVF9SRVNFVCIsCisJIk1JUElfU0VRX0lOSVRfT1RQIiwKKwkiTUlQSV9TRVFf RElTUExBWV9PTiIsCisJIk1JUElfU0VRX0RJU1BMQVlfT0ZGIiwKKwkiTUlQSV9TRVFfREVBU1NF UlRfUkVTRVQiCit9OworCitzdGF0aWMgdm9pZCBnZW5lcmljX2V4ZWNfc2VxdWVuY2Uoc3RydWN0 IGludGVsX2RzaSAqaW50ZWxfZHNpLCBjaGFyICpzZXF1ZW5jZSkKK3sKKwl1OCAqZGF0YSA9IHNl cXVlbmNlOworCWZuX21pcGlfZWxlbV9leGVjIG1pcGlfZWxlbV9leGVjOworCWludCBpbmRleDsK KworCWlmICghc2VxdWVuY2UpCisJCXJldHVybjsKKworCURSTV9ERUJVR19EUklWRVIoIlN0YXJ0 aW5nIE1JUEkgc2VxdWVuY2UgLSAlc1xuIiwgc2VxX25hbWVbKmRhdGFdKTsKKworCS8qIGdvIHRv IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzZXF1ZW5jZSAqLworCWRhdGErKzsKKworCS8qIHBh cnNlIGVhY2ggYnl0ZSB0aWxsIHdlIHJlYWNoIGVuZCBvZiBzZXF1ZW5jZSBieXRlIC0gMHgwMCAq LworCXdoaWxlICgxKSB7CisJCWluZGV4ID0gKmRhdGE7CisJCW1pcGlfZWxlbV9leGVjID0gZXhl Y19lbGVtW2luZGV4XTsKKwkJaWYgKCFtaXBpX2VsZW1fZXhlYykgeworCQkJRFJNX0VSUk9SKCJV bnN1cHBvcnRlZCBNSVBJIGVsZW1lbnQsIHNraXBwaW5nIHNlcXVlbmNlIGV4ZWN1dGlvblxuIik7 CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBnb3RvIGVsZW1lbnQgcGF5bG9hZCAqLworCQlkYXRh Kys7CisKKwkJLyogZXhlY3V0ZSB0aGUgZWxlbWVudCBzcGVjaWZpYyByb3RpbmVzICovCisJCWRh dGEgPSBtaXBpX2VsZW1fZXhlYyhpbnRlbF9kc2ksIGRhdGEpOworCisJCS8qCisJCSAqIEFmdGVy IHByb2Nlc3NpbmcgdGhlIGVsZW1lbnQsIGRhdGEgc2hvdWxkIHBvaW50IHRvCisJCSAqIG5leHQg ZWxlbWVudCBvciBlbmQgb2Ygc2VxdWVuY2UKKwkJICogY2hlY2sgaWYgaGF2ZSB3ZSByZWFjaGVk IGVuZCBvZiBzZXF1ZW5jZQorCQkgKi8KKwkJaWYgKCpkYXRhID09IDB4MDApCisJCQlicmVhazsK Kwl9Cit9CisKK3N0YXRpYyBib29sIGdlbmVyaWNfaW5pdChzdHJ1Y3QgaW50ZWxfZHNpX2Rldmlj ZSAqZHNpKQoreworCXN0cnVjdCBpbnRlbF9kc2kgKmludGVsX2RzaSA9IGNvbnRhaW5lcl9vZihk c2ksIHN0cnVjdCBpbnRlbF9kc2ksIGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGlu dGVsX2RzaS0+YmFzZS5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBtaXBpX2NvbmZpZyAqbWlwaV9jb25maWcg PSBkZXZfcHJpdi0+dmJ0LmRzaS5jb25maWc7CisJc3RydWN0IG1pcGlfcHBzX2RhdGEgKnBwcyA9 IGRldl9wcml2LT52YnQuZHNpLnBwczsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9 IGRldl9wcml2LT52YnQubGZwX2x2ZHNfdmJ0X21vZGU7CisJdTMyIGJpdHNfcGVyX3BpeGVsID0g MjQ7CisJdTMyIHRscHhfbnMsIGV4dHJhX2J5dGVfY291bnQsIGJpdHJhdGUsIHRscHhfdWk7CisJ dTMyIHVpX251bSwgdWlfZGVuOworCXUzMiBwcmVwYXJlX2NudCwgZXhpdF96ZXJvX2NudCwgY2xr X3plcm9fY250LCB0cmFpbF9jbnQ7CisJdTMyIHRoc19wcmVwYXJlX25zLCB0Y2xrX3RyYWlsX25z OworCXUzMiB0Y2xrX3ByZXBhcmVfY2xremVybywgdGhzX3ByZXBhcmVfaHN6ZXJvOworCXUzMiBs cF90b19oc19zd2l0Y2gsIGhzX3RvX2xwX3N3aXRjaDsKKworCURSTV9ERUJVR19LTVMoIlxuIik7 CisKKwlpbnRlbF9kc2ktPmVvdHBfcGt0ID0gbWlwaV9jb25maWctPmVvdF9wa3RfZGlzYWJsZWQg PyAwIDogMTsKKwlpbnRlbF9kc2ktPmNsb2NrX3N0b3AgPSBtaXBpX2NvbmZpZy0+ZW5hYmxlX2Ns a19zdG9wID8gMSA6IDA7CisJaW50ZWxfZHNpLT5sYW5lX2NvdW50ID0gbWlwaV9jb25maWctPmxh bmVfY250ICsgMTsKKwlpbnRlbF9kc2ktPnBpeGVsX2Zvcm1hdCA9IG1pcGlfY29uZmlnLT52aWRl b21vZGVfY29sb3JfZm9ybWF0IDw8IDc7CisKKwlpZiAoaW50ZWxfZHNpLT5waXhlbF9mb3JtYXQg PT0gVklEX01PREVfRk9STUFUX1JHQjY2NikKKwkJYml0c19wZXJfcGl4ZWwgPSAxODsKKwllbHNl IGlmIChpbnRlbF9kc2ktPnBpeGVsX2Zvcm1hdCA9PSBWSURfTU9ERV9GT1JNQVRfUkdCNTY1KQor CQliaXRzX3Blcl9waXhlbCA9IDE2OworCisJYml0cmF0ZSA9IChtb2RlLT5jbG9jayAqIGJpdHNf cGVyX3BpeGVsKSAvIGludGVsX2RzaS0+bGFuZV9jb3VudDsKKworCWludGVsX2RzaS0+b3BlcmF0 aW9uX21vZGUgPSBtaXBpX2NvbmZpZy0+aXNfY21kX21vZGU7CisJaW50ZWxfZHNpLT52aWRlb19t b2RlX2Zvcm1hdCA9IG1pcGlfY29uZmlnLT52aWRlb190cmFuc2Zlcl9tb2RlOworCWludGVsX2Rz aS0+ZXNjYXBlX2Nsa19kaXYgPSBtaXBpX2NvbmZpZy0+Ynl0ZV9jbGtfc2VsOworCWludGVsX2Rz aS0+bHBfcnhfdGltZW91dCA9IG1pcGlfY29uZmlnLT5scF9yeF90aW1lb3V0OworCWludGVsX2Rz aS0+dHVybl9hcm5kX3ZhbCA9IG1pcGlfY29uZmlnLT50dXJuX2Fyb3VuZF90aW1lb3V0OworCWlu dGVsX2RzaS0+cnN0X3RpbWVyX3ZhbCA9IG1pcGlfY29uZmlnLT5kZXZpY2VfcmVzZXRfdGltZXI7 CisJaW50ZWxfZHNpLT5pbml0X2NvdW50ID0gbWlwaV9jb25maWctPm1hc3Rlcl9pbml0X3RpbWVy OworCWludGVsX2RzaS0+YndfdGltZXIgPSBtaXBpX2NvbmZpZy0+ZGJpX2J3X3RpbWVyOworCWlu dGVsX2RzaS0+dmlkZW9fZnJtdF9jZmdfYml0cyA9IG1pcGlfY29uZmlnLT5idGFfZW5hYmxlZCA/ IERJU0FCTEVfVklERU9fQlRBIDogMDsKKworCXN3aXRjaCAoaW50ZWxfZHNpLT5lc2NhcGVfY2xr X2RpdikgeworCWNhc2UgMDoKKwkJdGxweF9ucyA9IDUwOworCQlicmVhazsKKwljYXNlIDE6CisJ CXRscHhfbnMgPSAxMDA7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQl0bHB4X25zID0gMjAwOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQl0bHB4X25zID0gNTA7CisJCWJyZWFrOworCX0KKworCXN3 aXRjaCAoaW50ZWxfZHNpLT5sYW5lX2NvdW50KSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJZXh0 cmFfYnl0ZV9jb3VudCA9IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZXh0cmFfYnl0ZV9jb3Vu dCA9IDQ7CisJCWJyZWFrOworCWNhc2UgNDoKKwlkZWZhdWx0OgorCQlleHRyYV9ieXRlX2NvdW50 ID0gMzsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiB1aShzKSA9IDEvZiBbZiBpbiBoel0KKwkg KiB1aShucykgPSAxMF45IC8gKGYqMTBeNikgW2YgaW4gTWh6XSAtPiAxMF4zL2YoTWh6KQorCSAq LworCisJLyogaW4gS2JwcyAqLworCXVpX251bSA9IE5TX0tIWl9SQVRJTzsKKwl1aV9kZW4gPSBi aXRyYXRlOworCisJdGNsa19wcmVwYXJlX2Nsa3plcm8gPSBtaXBpX2NvbmZpZy0+dGNsa19wcmVw YXJlX2Nsa3plcm87CisJdGhzX3ByZXBhcmVfaHN6ZXJvID0gbWlwaV9jb25maWctPnRoc19wcmVw YXJlX2hzemVybzsKKworCS8qCisJICogQjA2MAorCSAqIExQIGJ5dGUgY2xvY2sgPSBUTFBYLyAo OFVJKQorCSAqLworCWludGVsX2RzaS0+bHBfYnl0ZV9jbGsgPSBESVZfUk9VTkRfVVAodGxweF9u cyAqIHVpX2RlbiwgOCAqIHVpX251bSk7CisKKwkvKiBjb3VudCB2YWx1ZXMgaW4gVUkgPSAobnMg dmFsdWUpICogKGJpdHJhdGUgLyAoMiAqIDEwXjYpKQorCSAqCisJICogU2luY2UgdHhkZHJjbGto c19pIGlzIDJ4VUksIGFsbCB0aGUgY291bnQgdmFsdWVzIHByb2dyYW1tZWQgaW4KKwkgKiBEUEhZ IHBhcmFtIHJlZ2lzdGVyIGFyZSBkaXZpZGVkIGJ5IDIKKwkgKgorCSAqIHByZXBhcmUgY291bnQK KwkgKi8KKwl0aHNfcHJlcGFyZV9ucyA9IG1heChtaXBpX2NvbmZpZy0+dGhzX3ByZXBhcmUsIG1p cGlfY29uZmlnLT50Y2xrX3ByZXBhcmUpOworCXByZXBhcmVfY250ID0gRElWX1JPVU5EX1VQKHRo c19wcmVwYXJlX25zICogdWlfZGVuLCB1aV9udW0gKiAyKTsKKworCS8qIGV4aXQgemVybyBjb3Vu dCAqLworCWV4aXRfemVyb19jbnQgPSBESVZfUk9VTkRfVVAoCisJCQkJKHRoc19wcmVwYXJlX2hz emVybyAtIHRoc19wcmVwYXJlX25zKSAqIHVpX2RlbiwKKwkJCQl1aV9udW0gKiAyCisJCQkJKTsK KworCS8qCisJICogRXhpdCB6ZXJvICBpcyB1bmlmaWVkIHZhbCB0aHNfemVybyBhbmQgdGhzX2V4 aXQKKwkgKiBtaW5pbXVtIHZhbHVlIGZvciB0aHNfZXhpdCA9IDExMG5zCisJICogbWluIChleGl0 X3plcm9fY250ICogMikgPSAxMTAvVUkKKwkgKiBleGl0X3plcm9fY250ID0gNTUvVUkKKwkgKi8K KwkgaWYgKGV4aXRfemVyb19jbnQgPCAoNTUgKiB1aV9kZW4gLyB1aV9udW0pKQorCQlpZiAoKDU1 ICogdWlfZGVuKSAlIHVpX251bSkKKwkJCWV4aXRfemVyb19jbnQgKz0gMTsKKworCS8qIGNsayB6 ZXJvIGNvdW50ICovCisJY2xrX3plcm9fY250ID0gRElWX1JPVU5EX1VQKAorCQkJKHRjbGtfcHJl cGFyZV9jbGt6ZXJvIC0JdGhzX3ByZXBhcmVfbnMpCisJCQkqIHVpX2RlbiwgMiAqIHVpX251bSk7 CisKKwkvKiB0cmFpbCBjb3VudCAqLworCXRjbGtfdHJhaWxfbnMgPSBtYXgobWlwaV9jb25maWct PnRjbGtfdHJhaWwsIG1pcGlfY29uZmlnLT50aHNfdHJhaWwpOworCXRyYWlsX2NudCA9IERJVl9S T1VORF9VUCh0Y2xrX3RyYWlsX25zICogdWlfZGVuLCAyICogdWlfbnVtKTsKKworCWlmIChwcmVw YXJlX2NudCA+IFBSRVBBUkVfQ05UX01BWCB8fAorCQlleGl0X3plcm9fY250ID4gRVhJVF9aRVJP X0NOVF9NQVggfHwKKwkJY2xrX3plcm9fY250ID4gQ0xLX1pFUk9fQ05UX01BWCB8fAorCQl0cmFp bF9jbnQgPiBUUkFJTF9DTlRfTUFYKQorCQlEUk1fREVCVUdfRFJJVkVSKCJWYWx1ZXMgY3Jvc3Np bmcgbWF4aW11bSBsaW1pdHMsIHJlc3RyaWN0aW5nIHRvIG1heCB2YWx1ZXNcbiIpOworCisJaWYg KHByZXBhcmVfY250ID4gUFJFUEFSRV9DTlRfTUFYKQorCQlwcmVwYXJlX2NudCA9IFBSRVBBUkVf Q05UX01BWDsKKworCWlmIChleGl0X3plcm9fY250ID4gRVhJVF9aRVJPX0NOVF9NQVgpCisJCWV4 aXRfemVyb19jbnQgPSBFWElUX1pFUk9fQ05UX01BWDsKKworCWlmIChjbGtfemVyb19jbnQgPiBD TEtfWkVST19DTlRfTUFYKQorCQljbGtfemVyb19jbnQgPSBDTEtfWkVST19DTlRfTUFYOworCisJ aWYgKHRyYWlsX2NudCA+IFRSQUlMX0NOVF9NQVgpCisJCXRyYWlsX2NudCA9IFRSQUlMX0NOVF9N QVg7CisKKwkvKiBCMDgwICovCisJaW50ZWxfZHNpLT5kcGh5X3JlZyA9IGV4aXRfemVyb19jbnQg PDwgMjQgfCB0cmFpbF9jbnQgPDwgMTYgfAorCQkJCQkJY2xrX3plcm9fY250IDw8IDggfCBwcmVw YXJlX2NudDsKKworCS8qCisJICogTFAgdG8gSFMgc3dpdGNoIGNvdW50ID0gNFRMUFggKyBQUkVQ X0NPVU5UICogMiArIEVYSVRfWkVST19DT1VOVCAqIDIKKwkgKgkJCQkJKyAxMFVJICsgRXh0cmEg Qnl0ZSBDb3VudAorCSAqCisJICogSFMgdG8gTFAgc3dpdGNoIGNvdW50ID0gVEhTLVRSQUlMICsg MlRMUFggKyBFeHRyYSBCeXRlIENvdW50CisJICogRXh0cmEgQnl0ZSBDb3VudCBpcyBjYWxjdWxh dGVkIGFjY29yZGluZyB0byBudW1iZXIgb2YgbGFuZXMuCisJICogSGlnaCBMb3cgU3dpdGNoIENv dW50IGlzIHRoZSBNYXggb2YgTFAgdG8gSFMgYW5kCisJICogSFMgdG8gTFAgc3dpdGNoIGNvdW50 CisJICoKKwkgKi8KKwl0bHB4X3VpID0gRElWX1JPVU5EX1VQKHRscHhfbnMgKiB1aV9kZW4sIHVp X251bSk7CisKKwkvKiBCMDQ0ICovCisJLyogRklYTUU6CisJICogVGhlIGNvbW1lbnQgYWJvdmUg ZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY29kZSAqLworCWxwX3RvX2hzX3N3aXRjaCA9IERJVl9S T1VORF9VUCg0ICogdGxweF91aSArIHByZXBhcmVfY250ICogMiArCisJCQkJCQlleGl0X3plcm9f Y250ICogMiArIDEwLCA4KTsKKworCWhzX3RvX2xwX3N3aXRjaCA9IERJVl9ST1VORF9VUChtaXBp X2NvbmZpZy0+dGhzX3RyYWlsICsgMiAqIHRscHhfdWksIDgpOworCisJaW50ZWxfZHNpLT5oc190 b19scF9jb3VudCA9IG1heChscF90b19oc19zd2l0Y2gsIGhzX3RvX2xwX3N3aXRjaCk7CisJaW50 ZWxfZHNpLT5oc190b19scF9jb3VudCArPSBleHRyYV9ieXRlX2NvdW50OworCisJLyogQjA4OCAq LworCS8qIExQIC0+IEhTIGZvciBjbG9jayBsYW5lcworCSAqIExQIGNsayBzeW5jICsgTFAxMSAr IExQMDEgKyB0Y2xrX3ByZXBhcmUgKyB0Y2xrX3plcm8gKworCSAqCQkJCQkJZXh0cmEgYnl0ZSBj b3VudAorCSAqIDJUUExYICsgMVRMUFggKyAxIFRQTFgoaW4gbnMpICsgcHJlcGFyZV9jbnQgKiAy ICsgY2xrX3plcm9fY250ICoKKwkgKgkJCQkJMihpbiBVSSkgKyBleHRyYSBieXRlIGNvdW50CisJ ICogSW4gYnl0ZWNsa3MgPSAoNFRMUFggKyBwcmVwYXJlX2NudCAqIDIgKyBjbGtfemVyb19jbnQg KjIgKGluIFVJKSkgLworCSAqCQkJCQk4ICsgZXh0cmEgYnl0ZSBjb3VudAorCSAqLworCWludGVs X2RzaS0+Y2xrX2xwX3RvX2hzX2NvdW50ID0KKwkJRElWX1JPVU5EX1VQKAorCQkJNCAqIHRscHhf dWkgKyBwcmVwYXJlX2NudCAqIDIgKworCQkJY2xrX3plcm9fY250ICogMiwKKwkJCTgpOworCisJ aW50ZWxfZHNpLT5jbGtfbHBfdG9faHNfY291bnQgKz0gZXh0cmFfYnl0ZV9jb3VudDsKKworCS8q IEhTLT5MUCBmb3IgQ2xvY2sgTGFuZXMKKwkgKiBMb3cgUG93ZXIgY2xvY2sgc3luY2hyb25pc2F0 aW9ucyArIDFUeCBieXRlY2xrICsgdGNsa190cmFpbCArCisJICoJCQkJCQlFeHRyYSBieXRlIGNv dW50CisJICogMlRMUFggKyA4VUkgKyAodHJhaWxfY291bnQqMikoaW4gVUkpICsgRXh0cmEgYnl0 ZSBjb3VudAorCSAqIEluIGJ5dGVjbGtzID0gKDIqVExweChpbiBVSSkgKyB0cmFpbF9jb3VudCoy ICs4KShpbiBVSSkvOCArCisJICoJCQkJCQlFeHRyYSBieXRlIGNvdW50CisJICovCisJaW50ZWxf ZHNpLT5jbGtfaHNfdG9fbHBfY291bnQgPQorCQlESVZfUk9VTkRfVVAoMiAqIHRscHhfdWkgKyB0 cmFpbF9jbnQgKiAyICsgOCwKKwkJCTgpOworCWludGVsX2RzaS0+Y2xrX2hzX3RvX2xwX2NvdW50 ICs9IGV4dHJhX2J5dGVfY291bnQ7CisKKwlEUk1fREVCVUdfS01TKCJFb3QgJXNcbiIsIGludGVs X2RzaS0+ZW90cF9wa3QgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwlEUk1fREVCVUdfS01T KCJDbG9ja3N0b3AgJXNcbiIsIGludGVsX2RzaS0+Y2xvY2tfc3RvcCA/CisJCQkJCQkiZGlzYWJs ZWQiIDogImVuYWJsZWQiKTsKKwlEUk1fREVCVUdfS01TKCJNb2RlICVzXG4iLCBpbnRlbF9kc2kt Pm9wZXJhdGlvbl9tb2RlID8gImNvbW1hbmQiIDogInZpZGVvIik7CisJRFJNX0RFQlVHX0tNUygi UGl4ZWwgRm9ybWF0ICVkXG4iLCBpbnRlbF9kc2ktPnBpeGVsX2Zvcm1hdCk7CisJRFJNX0RFQlVH X0tNUygiVExQWCAlZFxuIiwgaW50ZWxfZHNpLT5lc2NhcGVfY2xrX2Rpdik7CisJRFJNX0RFQlVH X0tNUygiTFAgUlggVGltZW91dCAweCV4XG4iLCBpbnRlbF9kc2ktPmxwX3J4X3RpbWVvdXQpOwor CURSTV9ERUJVR19LTVMoIlR1cm5hcm91bmQgVGltZW91dCAweCV4XG4iLCBpbnRlbF9kc2ktPnR1 cm5fYXJuZF92YWwpOworCURSTV9ERUJVR19LTVMoIkluaXQgQ291bnQgMHgleFxuIiwgaW50ZWxf ZHNpLT5pbml0X2NvdW50KTsKKwlEUk1fREVCVUdfS01TKCJIUyB0byBMUCBDb3VudCAweCV4XG4i LCBpbnRlbF9kc2ktPmhzX3RvX2xwX2NvdW50KTsKKwlEUk1fREVCVUdfS01TKCJMUCBCeXRlIENs b2NrICVkXG4iLCBpbnRlbF9kc2ktPmxwX2J5dGVfY2xrKTsKKwlEUk1fREVCVUdfS01TKCJEQkkg QlcgVGltZXIgMHgleFxuIiwgaW50ZWxfZHNpLT5id190aW1lcik7CisJRFJNX0RFQlVHX0tNUygi TFAgdG8gSFMgQ2xvY2sgQ291bnQgMHgleFxuIiwgaW50ZWxfZHNpLT5jbGtfbHBfdG9faHNfY291 bnQpOworCURSTV9ERUJVR19LTVMoIkhTIHRvIExQIENsb2NrIENvdW50IDB4JXhcbiIsIGludGVs X2RzaS0+Y2xrX2hzX3RvX2xwX2NvdW50KTsKKwlEUk1fREVCVUdfS01TKCJCVEEgJXNcbiIsCisJ CQlpbnRlbF9kc2ktPnZpZGVvX2ZybXRfY2ZnX2JpdHMgJiBESVNBQkxFX1ZJREVPX0JUQSA/CisJ CQkiZGlzYWJsZWQiIDogImVuYWJsZWQiKTsKKworCS8qIGRlbGF5cyBpbiBWQlQgYXJlIGluIHVu aXQgb2YgMTAwdXMsIHNvIG5lZWQgdG8gY29udmVydAorCSAqIGhlcmUgaW4gbXMKKwkgKiBEZWxh eSAoMTAwdXMpICogMTAwIC8xMDAwID0gRGVsYXkgLyAxMCAobXMpICovCisJaW50ZWxfZHNpLT5i YWNrbGlnaHRfb2ZmX2RlbGF5ID0gcHBzLT5ibF9kaXNhYmxlX2RlbGF5IC8gMTA7CisJaW50ZWxf ZHNpLT5iYWNrbGlnaHRfb25fZGVsYXkgPSBwcHMtPmJsX2VuYWJsZV9kZWxheSAvIDEwOworCWlu dGVsX2RzaS0+cGFuZWxfb25fZGVsYXkgPSBwcHMtPnBhbmVsX29uX2RlbGF5IC8gMTA7CisJaW50 ZWxfZHNpLT5wYW5lbF9vZmZfZGVsYXkgPSBwcHMtPnBhbmVsX29mZl9kZWxheSAvIDEwOworCWlu dGVsX2RzaS0+cGFuZWxfcHdyX2N5Y2xlX2RlbGF5ID0gcHBzLT5wYW5lbF9wb3dlcl9jeWNsZV9k ZWxheSAvIDEwOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19tb2Rl X3ZhbGlkKHN0cnVjdCBpbnRlbF9kc2lfZGV2aWNlICpkc2ksCisJCSAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlKQoreworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgYm9vbCBn ZW5lcmljX21vZGVfZml4dXAoc3RydWN0IGludGVsX2RzaV9kZXZpY2UgKmRzaSwKKwkJICAgIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkgICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUpIHsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv aWQgZ2VuZXJpY19wYW5lbF9yZXNldChzdHJ1Y3QgaW50ZWxfZHNpX2RldmljZSAqZHNpKQorewor CXN0cnVjdCBpbnRlbF9kc2kgKmludGVsX2RzaSA9IGNvbnRhaW5lcl9vZihkc2ksIHN0cnVjdCBp bnRlbF9kc2ksIGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RzaS0+YmFz ZS5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCisJY2hhciAqc2VxdWVuY2UgPSBkZXZfcHJpdi0+dmJ0LmRzaS5zZXF1ZW5j ZVtNSVBJX1NFUV9BU1NFUlRfUkVTRVRdOworCisJZ2VuZXJpY19leGVjX3NlcXVlbmNlKGludGVs X2RzaSwgc2VxdWVuY2UpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmljX2Rpc2FibGVfcGFuZWxf cG93ZXIoc3RydWN0IGludGVsX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHNp ICppbnRlbF9kc2kgPSBjb250YWluZXJfb2YoZHNpLCBzdHJ1Y3QgaW50ZWxfZHNpLCBkZXYpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kc2ktPmJhc2UuYmFzZS5kZXY7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWNo YXIgKnNlcXVlbmNlID0gZGV2X3ByaXYtPnZidC5kc2kuc2VxdWVuY2VbTUlQSV9TRVFfREVBU1NF UlRfUkVTRVRdOworCisJZ2VuZXJpY19leGVjX3NlcXVlbmNlKGludGVsX2RzaSwgc2VxdWVuY2Up OworfQorCitzdGF0aWMgdm9pZCBnZW5lcmljX3NlbmRfb3RwX2NtZHMoc3RydWN0IGludGVsX2Rz aV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHNpICppbnRlbF9kc2kgPSBjb250YWlu ZXJfb2YoZHNpLCBzdHJ1Y3QgaW50ZWxfZHNpLCBkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBpbnRlbF9kc2ktPmJhc2UuYmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWNoYXIgKnNlcXVlbmNlID0gZGV2X3By aXYtPnZidC5kc2kuc2VxdWVuY2VbTUlQSV9TRVFfSU5JVF9PVFBdOworCisJZ2VuZXJpY19leGVj X3NlcXVlbmNlKGludGVsX2RzaSwgc2VxdWVuY2UpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmlj X2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBpbnRlbF9k c2kgKmludGVsX2RzaSA9IGNvbnRhaW5lcl9vZihkc2ksIHN0cnVjdCBpbnRlbF9kc2ksIGRldik7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RzaS0+YmFzZS5iYXNlLmRldjsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJ Y2hhciAqc2VxdWVuY2UgPSBkZXZfcHJpdi0+dmJ0LmRzaS5zZXF1ZW5jZVtNSVBJX1NFUV9ESVNQ TEFZX09OXTsKKworCWdlbmVyaWNfZXhlY19zZXF1ZW5jZShpbnRlbF9kc2ksIHNlcXVlbmNlKTsK K30KKworc3RhdGljIHZvaWQgZ2VuZXJpY19kaXNhYmxlKHN0cnVjdCBpbnRlbF9kc2lfZGV2aWNl ICpkc2kpCit7CisJc3RydWN0IGludGVsX2RzaSAqaW50ZWxfZHNpID0gY29udGFpbmVyX29mKGRz aSwgc3RydWN0IGludGVsX2RzaSwgZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50 ZWxfZHNpLT5iYXNlLmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwljaGFyICpzZXF1ZW5jZSA9IGRldl9wcml2LT52YnQu ZHNpLnNlcXVlbmNlW01JUElfU0VRX0RJU1BMQVlfT0ZGXTsKKworCWdlbmVyaWNfZXhlY19zZXF1 ZW5jZShpbnRlbF9kc2ksIHNlcXVlbmNlKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMgZ2VuZXJpY19kZXRlY3Qoc3RydWN0IGludGVsX2RzaV9kZXZpY2UgKmRzaSkKK3sK KwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyBib29sIGdl bmVyaWNfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9kc2lfZGV2aWNlICpkZXYpCit7CisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZ2VuZXJpY19n ZXRfbW9kZXMoc3RydWN0IGludGVsX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgaW50ZWxf ZHNpICppbnRlbF9kc2kgPSBjb250YWluZXJfb2YoZHNpLCBzdHJ1Y3QgaW50ZWxfZHNpLCBkZXYp OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kc2ktPmJhc2UuYmFzZS5kZXY7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwor CWRldl9wcml2LT52YnQubGZwX2x2ZHNfdmJ0X21vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9Q UkVGRVJSRUQ7CisJcmV0dXJuIGRldl9wcml2LT52YnQubGZwX2x2ZHNfdmJ0X21vZGU7Cit9CisK K3N0YXRpYyB2b2lkIGdlbmVyaWNfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZHNpX2RldmljZSAqZHNp KSB7IH0KKworLyogQ2FsbGJhY2tzLiBXZSBtaWdodCBub3QgbmVlZCB0aGVtIGFsbC4gKi8KK3N0 cnVjdCBpbnRlbF9kc2lfZGV2X29wcyB2YnRfZ2VuZXJpY19kc2lfZGlzcGxheV9vcHMgPSB7CisJ LmluaXQgPSBnZW5lcmljX2luaXQsCisJLm1vZGVfdmFsaWQgPSBnZW5lcmljX21vZGVfdmFsaWQs CisJLm1vZGVfZml4dXAgPSBnZW5lcmljX21vZGVfZml4dXAsCisJLnBhbmVsX3Jlc2V0ID0gZ2Vu ZXJpY19wYW5lbF9yZXNldCwKKwkuZGlzYWJsZV9wYW5lbF9wb3dlciA9IGdlbmVyaWNfZGlzYWJs ZV9wYW5lbF9wb3dlciwKKwkuc2VuZF9vdHBfY21kcyA9IGdlbmVyaWNfc2VuZF9vdHBfY21kcywK KwkuZW5hYmxlID0gZ2VuZXJpY19lbmFibGUsCisJLmRpc2FibGUgPSBnZW5lcmljX2Rpc2FibGUs CisJLmRldGVjdCA9IGdlbmVyaWNfZGV0ZWN0LAorCS5nZXRfaHdfc3RhdGUgPSBnZW5lcmljX2dl dF9od19zdGF0ZSwKKwkuZ2V0X21vZGVzID0gZ2VuZXJpY19nZXRfbW9kZXMsCisJLmRlc3Ryb3kg PSBnZW5lcmljX2Rlc3Ryb3ksCit9OwotLSAKMS44LjMuMgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK