From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,1/2] usb: misc: xapea00x: add driver for Xaptum ENF Access Card From: "David R. Bild" Message-Id: <20180430125418.31344-2-david.bild@xaptum.com> Date: Mon, 30 Apr 2018 07:54:17 -0500 To: Greg Kroah-Hartman Cc: Oliver Neukum , linux-usb@vger.kernel.org, "David R. Bild" List-ID: VGhpcyBjb21taXQgYWRkcyBhIGRyaXZlciBmb3IgdGhlIFhhcHR1bSBFTkYgQWNjZXNzIENhcmQs IGEgVFBNMi4wCmhhcmR3YXJlIG1vZHVsZSBmb3IgYXV0aGVudGljYXRpbmcgSW9UIGRldmljZXMg YW5kIGdhdGV3YXlzLgoKVGhlIGNhcmQgY29uc2lzdHMgb2YgYSBTUEkgVFBNIDIuMCBjaGlwIGFu ZCBhIFVTQi1TUEkgYnJpZGdlLiBUaGlzCmRyaXZlciBjb25maWd1cmVzIHRoZSBicmlkZ2UsIHJl Z2lzdGVycyB0aGUgYnJpZGdlIGFzIGFuIFNQSQpjb250cm9sbGVyLCBhbmQgYWRkcyB0aGUgVFBN IDIuMCBhcyBhbiBTUEkgZGV2aWNlLiAgVGhlIGluLWtlcm5lbCBUUE0KMi4wIGRyaXZlciBpcyB0 aGVuIGF1dG9tYXRpY2FsbHkgbG9hZGVkIHRvIGNvbmZpZ3VyZSB0aGUgVFBNIGFuZApleHBvc2Ug aXQgdG8gdXNlcnNwYWNlLgoKU2lnbmVkLW9mZi1ieTogRGF2aWQgUi4gQmlsZCA8ZGF2aWQuYmls ZEB4YXB0dW0uY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDYgKwogZHJpdmVycy91c2IvbWlzYy9LY29uZmlnICAgICAgICAgICAgICAgICAg ICB8ICAgMiArCiBkcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgvS2NvbmZpZyAgICAgICAgICAgfCAgMTYg KysKIGRyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgvTWFrZWZpbGUgICAgICAgICAgfCAgIDcgKwog ZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1icmlkZ2UuYyB8IDQwMCArKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1j b3JlLmMgICB8IDQyNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL3VzYi9t aXNjL3hhcGVhMDB4L3hhcGVhMDB4LXNwaS5jICAgIHwgMjA5ICsrKysrKysrKysrKysrCiBkcml2 ZXJzL3VzYi9taXNjL3hhcGVhMDB4L3hhcGVhMDB4LmggICAgICAgIHwgIDc1ICsrKysrCiA5IGZp bGVzIGNoYW5nZWQsIDExNDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL21pc2MveGFwZWEwMHgvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv dXNiL21pc2MveGFwZWEwMHgvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9taXNjL3hhcGVhMDB4L3hhcGVhMDB4LWJyaWRnZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1jb3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3VzYi9taXNjL3hhcGVhMDB4L3hhcGVhMDB4LXNwaS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC5oCgpkaWZmIC0tZ2l0IGEv TUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA3OWJiMDJmZjgxMmYuLmMwZTM0YTNlZjVh YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE0Nzk1LDYg KzE0Nzk1LDEyIEBAIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRh aW5lZAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCiAKK1VTQiBYQVBFQTAw WCBEUklWRVIKK006CURhdmlkIFIuIEJpbGQgPGRhdmlkLmJpbGRAeGFwdHVtLmNvbT4KK0w6CWxp bnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdXNiL21p c2MveGFwZWEwMHgvCisKIFVTQiBYSENJIERSSVZFUgogTToJTWF0aGlhcyBOeW1hbiA8bWF0aGlh cy5ueW1hbkBpbnRlbC5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcK aW5kZXggNjhkMmYyY2QxN2RkLi43NDdkN2YwM2ZiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNi L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKQEAgLTI3NSwzICsy NzUsNSBAQCBjb25maWcgVVNCX0NIQU9TS0VZCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIg YXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVk IGNoYW9za2V5LgorCitzb3VyY2UgImRyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgvS2NvbmZpZyIK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9taXNj L01ha2VmaWxlCmluZGV4IDEwOWY1NGY1YjlhYS4uZjM1ODM1MDE1NDdjIDEwMDY0NAotLS0gYS9k cml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUK QEAgLTMwLDQgKzMwLDUgQEAgb2JqLSQoQ09ORklHX1VTQl9IU0lDX1VTQjQ2MDQpCQkrPSB1c2I0 NjA0Lm8KIG9iai0kKENPTkZJR19VU0JfQ0hBT1NLRVkpCQkrPSBjaGFvc2tleS5vCiAKIG9iai0k KENPTkZJR19VU0JfU0lTVVNCVkdBKQkJKz0gc2lzdXNidmdhLworb2JqLSQoQ09ORklHX1VTQl9Y QVBFQTAwWCkJCSs9IHhhcGVhMDB4Lwogb2JqLSQoQ09ORklHX1VTQl9MSU5LX0xBWUVSX1RFU1Qp CSs9IGx2c3Rlc3QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC9LY29u ZmlnIGIvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTZjMTFmNmVlN2IzCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK2NvbmZp ZyAgVVNCX1hBUEVBMDBYCisgICAgICAgIHRyaXN0YXRlICJYYXB0dW0gRU5GIEFjY2VzcyBjYXJk IHN1cHBvcnQgKFhBUC1FQS0wMHgpIgorICAgICAgICBkZXBlbmRzIG9uIFVTQl9TVVBQT1JUCisg ICAgICAgIHNlbGVjdCBTUEkKKyAgICAgICAgc2VsZWN0IFRDR19UUE0KKyAgICAgICAgc2VsZWN0 IFRDR19USVNfU1BJCisgICAgICAgIGhlbHAKKyAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSB3 YW50IHRvIHN1cHBvcnQgdGhlIFhhcHR1bSBFTkYgQWNjZXNzCisgICAgICAgICAgbW9kdWxlcyAo WEFQLUVBLTAweCkgaW4gdGhlIFVTQiBvciBNaW5pIFBDSS1lIGZvcm0KKyAgICAgICAgICBmYWN0 b3JzLiBUaGUgWEFQLUVBLTAweCBtb2R1bGUgZXhwb3NlcyBhIFRQTSAyLjAgYXMKKyAgICAgICAg ICAvZGV2L3RwbVggdG8gdXNlIGZvciBhdXRoZW50aWNhdGluZyB3aXRoIHRoZSBYYXB0dW0gRU5G LgorCisgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZS4gVGhlCisgICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHhhcGVhMDB4Lgor CisgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21p c2MveGFwZWEwMHgvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9taXNjL3hhcGVhMDB4L01ha2VmaWxl Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzRiY2Q3NTI0YzMxCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC9NYWtlZmlsZQpAQCAt MCwwICsxLDcgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyMKKyMgTWFr ZWZpbGUgZm9yIHRoZSB4YXBlYTAweCBkcml2ZXIuCisjCitvYmotJChDT05GSUdfVVNCX1hBUEVB MDBYKSArPSB4YXBlYTAweC5vCisKK3hhcGVhMDB4LXkgKz0geGFwZWEwMHgtY29yZS5vIHhhcGVh MDB4LWJyaWRnZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3hhcGVhMDB4L3hhcGVh MDB4LWJyaWRnZS5jIGIvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1icmlkZ2Uu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZkNzhlODNkOTZmNgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHgtYnJp ZGdlLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wKworLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBYQVAtRUEtMDB4IHNlcmllcyBvZiB0aGUgWGFw dHVtIEVkZ2UgQWNjZXNzIENhcmQsIGEKKyAqICBUUE0gMi4wLWJhc2VkIGhhcmR3YXJlIG1vZHVs ZSBmb3IgYXV0aGVudGljYXRpbmcgSW9UIGRldmljZXMgYW5kCisgKiAgZ2F0ZXdheXMuCisgKgor ICogIENvcHlyaWdodCAoYykgMjAxNyBYYXB0dW0sIEluYy4KKyAqLworCisjaW5jbHVkZSAieGFw ZWEwMHguaCIKKworI2RlZmluZSBYQVBFQTAwWF9CUl9DTURfUkVBRAkJICAweDAwCisjZGVmaW5l IFhBUEVBMDBYX0JSX0NNRF9XUklURQkJICAweDAxCisjZGVmaW5lIFhBUEVBMDBYX0JSX0NNRF9X UklURVJFQUQJICAweDAyCisKKyNkZWZpbmUgWEFQRUEwMFhfQlJfQlJFUVRZUF9TRVQJCSAgMHg0 MAorCisjZGVmaW5lIFhBUEVBMDBYX0JSX0JSRVFfU0VUX0dQSU9fVkFMVUVTICAweDIxCisjZGVm aW5lIFhBUEVBMDBYX0JSX0JSRVFfU0VUX0dQSU9fQ1MJICAweDI1CisjZGVmaW5lIFhBUEVBMDBY X0JSX0JSRVFfU0VUX1NQSV9XT1JECSAgMHgzMQorCisjZGVmaW5lIFhBUEVBMDBYX0JSX1VTQl9U SU1FT1VUCQkgIDEwMDAgLy8gbXNlY3MKKworI2RlZmluZSBYQVBFQTAwWF9CUl9DU19ESVNBQkxF RAkJICAweDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCcmlkZ2UgVVNCIHRyYW5z ZmVycworICovCisKK3N0cnVjdCB4YXBlYTAweF9icl9idWxrX2NvbW1hbmQgeworCV9fdTE2ICBy ZXNlcnZlZDE7CisJX191OCAgIGNvbW1hbmQ7CisJX191OCAgIHJlc2VydmVkMjsKKwlfX2xlMzIg bGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8qKgorICogeGFwZWEw MHhfYnJfcHJlcF9idWxrX2NvbW1hbmQgLSBQcmVwYXJlcyB0aGUgYnVsayBjb21tYW5kIGhlYWRl ciB3aXRoCisgKiB0aGUgc3VwcGxpZWQgdmFsdWVzLgorICogQGhkcjogcG9pbnRlciB0byBoZWFk ZXIgdG8gcHJlcGFyZQorICogQGNvbW1hbmQ6IHRoZSBjb21tYW5kIGlkIGZvciB0aGUgY29tbWFu ZAorICogQGxlbmd0aDogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjb21tYW5kIGRhdGEKKyAqCisg KiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWws IDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqLworc3RhdGljIHZvaWQg eGFwZWEwMHhfYnJfcHJlcF9idWxrX2NvbW1hbmQoc3RydWN0IHhhcGVhMDB4X2JyX2J1bGtfY29t bWFuZCAqaGRyLAorCQkJCQkgIHU4IGNvbW1hbmQsIGludCBsZW5ndGgpCit7CisJaGRyLT5yZXNl cnZlZDEgPSAwOworCWhkci0+Y29tbWFuZCAgID0gY29tbWFuZDsKKwloZHItPnJlc2VydmVkMiA9 IDA7CisJaGRyLT5sZW5ndGggICAgPSBfX2NwdV90b19sZTMyKGxlbmd0aCk7Cit9CisKKy8qKgor ICogeGFwZWEwMHhfYnJfYnVsa193cml0ZSAtIElzc3VlcyBhIGJ1bGsgd3JpdGUgdG8gdGhlIGJy aWRnZSBjaGlwLgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRvIHdyaXRlIHRvCisg KiBAY29tbWFuZDogdGhlIGNvbW1hbmQgc3RhcnRlZCBieSB0aGlzIHdyaXRlIChXUklURSwgUkVB RCwgV1JJVEVfUkVBRCkKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlLiBN dXN0IGJlIERNQSBjYXBhYmxlIChlLmcuLAorICoJICBrbWFsbG9jLWVkLCBub3Qgc3RhY2spLgor ICogQGxlbjogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHdyaXRlCisgKgorICogQ29u dGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV0dXJuOiBJZiBzdWNjZXNzZnVsLCAwLiBP dGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgeGFwZWEw MHhfYnJfYnVsa193cml0ZShzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1 Y3QgeGFwZWEwMHhfYnJfYnVsa19jb21tYW5kICpoZWFkZXIsCisJCQkJICBjb25zdCB2b2lkICpk YXRhLCBpbnQgbGVuKQoreworCXU4ICpidWY7CisJdW5zaWduZWQgaW50IHBpcGU7CisJaW50IGJ1 Zl9sZW4sIGFjdHVhbF9sZW4sIHJldHZhbDsKKworCWJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IHhh cGVhMDB4X2JyX2J1bGtfY29tbWFuZCkgKyBsZW47CisJYnVmID0ga3phbGxvYyhidWZfbGVuLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91 dDsKKwl9CisKKwltZW1jcHkoYnVmLCBoZWFkZXIsIHNpemVvZihzdHJ1Y3QgeGFwZWEwMHhfYnJf YnVsa19jb21tYW5kKSk7CisJbWVtY3B5KGJ1ZiArIHNpemVvZihzdHJ1Y3QgeGFwZWEwMHhfYnJf YnVsa19jb21tYW5kKSwgZGF0YSwgbGVuKTsKKworCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGV2 LT51ZGV2LCBkZXYtPmJ1bGtfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlyZXR2YWwgPSB1c2Jf YnVsa19tc2coZGV2LT51ZGV2LCBwaXBlLCBidWYsIGJ1Zl9sZW4sICZhY3R1YWxfbGVuLAorCQkJ ICAgICAgWEFQRUEwMFhfQlJfVVNCX1RJTUVPVVQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X3dh cm4oJmRldi0+aW50ZXJmYWNlLT5kZXYsCisJCQkgIiVzOiB1c2JfYnVsa19tc2coKSBmYWlsZWQg d2l0aCAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZ290byBmcmVlX2J1ZjsKKwl9 CisKKwlyZXR2YWwgPSAwOworCitmcmVlX2J1ZjoKKwlremZyZWUoYnVmKTsKKworb3V0OgorCXJl dHVybiByZXR2YWw7Cit9CisKKy8qKgorICogeGFwZWEwMHhfYnJfYnVsa19yZWFkIC0gSXNzdWVz IGEgYnVsayByZWFkIHRvIHRoZSBicmlkZ2UgY2hpcC4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhl IGRldmljZSB0byByZWFkIGZyb20KKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHJlYWQu IE11c3QgYmUgRE1BIGNhcGFibGUgKGUuZy4sCisgKgkgIGttYWxsb2MtZWQsIG5vdCBzdGFjayku CisgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gcmVhZAorICoKKyAqIFJl dHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4K KyAqLworc3RhdGljIGludCB4YXBlYTAweF9icl9idWxrX3JlYWQoc3RydWN0IHhhcGVhMDB4X2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBw aXBlOworCXZvaWQgKmJ1ZjsKKwlpbnQgYWN0dWFsX2xlbiwgcmV0dmFsOworCisJYnVmID0ga3ph bGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXJldHZhbCA9IC1FTk9NRU07 CisJCWdvdG8gb3V0OworCX0KKworCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCBk ZXYtPmJ1bGtfaW4tPmJFbmRwb2ludEFkZHJlc3MpOworCXJldHZhbCA9IHVzYl9idWxrX21zZyhk ZXYtPnVkZXYsIHBpcGUsIGJ1ZiwgbGVuLCAmYWN0dWFsX2xlbiwKKwkJCSAgICAgIFhBUEVBMDBY X0JSX1VTQl9USU1FT1VUKTsKKworCWlmIChyZXR2YWwpIHsKKwkJZGV2X3dhcm4oJmRldi0+aW50 ZXJmYWNlLT5kZXYsCisJCQkgIiVzOiB1c2JfYnVsa19tc2coKSBmYWlsZWQgd2l0aCAlZFxuIiwK KwkJCSBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZ290byBmcmVlX2J1ZjsKKwl9CisKKwltZW1jcHko ZGF0YSwgYnVmLCBhY3R1YWxfbGVuKTsKKwlyZXR2YWwgPSAwOworCitmcmVlX2J1ZjoKKwlremZy ZWUoYnVmKTsKKworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogeGFwZWEwMHhf YnJfY3RybF93cml0ZSAtIElzc3VlcyBhIHNlbmQgY29udHJvbCB0cmFuc2ZlciB0byB0aGUgYnJp ZGdlCisgKiBjaGlwLgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRvIHdyaXRlIHRv CisgKiBAYlJlcXVlc3Q6IHRoZSBjb21tYW5kCisgKiBAd1ZhbHVlOiB0aGUgY29tbWFuZCB2YWx1 ZQorICogQHdJbmRleDogdGhlIGNvbW1hbmQgaW5kZXgKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRhdGEKKyAqIEBsZW46IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgY29tbWFuZCBk YXRhCisgKgorICogVGhlIHBvc3NpYmxlIGJSZXF1ZXN0LCB3VmFsdWUsIGFuZCB3SW5kZXggdmFs dWVzIGFuZCBkYXRhIGZvcm1hdAorICogYXJlIHNwZWNpZmllZCBpbiB0aGUgaGFyZHdhcmUgZGF0 YXNoZWV0LgorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldHVybjog SWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLwor c3RhdGljIGludCB4YXBlYTAweF9icl9jdHJsX3dyaXRlKHN0cnVjdCB4YXBlYTAweF9kZXZpY2Ug KmRldiwgdTggYlJlcXVlc3QsCisJCQkJICB1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LCB1OCAqZGF0 YSwgdTE2IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwl2b2lkICpidWY7CisJaW50IHJl dHZhbDsKKworCS8qIGNvbnRyb2xfbXNnIGJ1ZmZlciBtdXN0IGJlIGRtYS1jYXBhYmxlIChlLmcu ayBrbWFsbG9jLWVkLAorCSAqIG5vdCBzdGFjaykuCUNvcHkgZGF0YSBpbnRvIHN1Y2ggYnVmZmVy IGhlcmUsIHNvIHdlIGNhbiB1c2UKKwkgKiBzaW1wbGVyIHN0YWNrIGFsbG9jYXRpb24gaW4gdGhl IGNhbGxlcnMgLSB3ZSBoYXZlIG5vCisJICogcGVyZm9ybWFuY2UgY29uY2VybnMgZ2l2ZW4gdGhl IHNtYWxsIGJ1ZmZlcnMgYW5kIGxvdworCSAqIHRocm91Z2hwdXRzIG9mIHRoaXMgZGV2aWNlLgor CSAqLworCWJ1ZiA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQly ZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJbWVtY3B5KGJ1ZiwgZGF0YSwgbGVu KTsKKworCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKTsKKwlyZXR2YWwgPSB1 c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCBwaXBlLCBiUmVxdWVzdCwKKwkJCQkgWEFQRUEwMFhf QlJfQlJFUVRZUF9TRVQsIHdWYWx1ZSwgd0luZGV4LAorCQkJCSBidWYsIGxlbiwgWEFQRUEwMFhf QlJfVVNCX1RJTUVPVVQpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl93YXJuKCZkZXYtPmlu dGVyZmFjZS0+ZGV2LAorCQkJICJ1c2JfY29udHJvbF9tc2coKSBmYWlsZWQgd2l0aCAlZFxuIiwg cmV0dmFsKTsKKwkJZ290byBmcmVlX2J1ZjsKKwl9CisKKwlyZXR2YWwgPSAwOworCitmcmVlX2J1 ZjoKKwlremZyZWUoYnVmKTsKKworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBCcmlkZ2UgY29uZmlndXJhdGlvbiBjb21tYW5kcworICovCisK Ky8qKgorICogeGFwZWEwMHhfYnJfc2V0X2dwaW9fdmFsdWUgLSBTZXRzIHRoZSB2YWx1ZSBvbiB0 aGUgc3BlY2lmaWVkIHBpbiBvZgorICogdGhlIGJyaWRnZSBjaGlwLgorICogQGRldjogcG9pbnRl ciB0byB0aGUgZGV2aWNlIGNvbnRhaW5pbmcgdGhlIGJyaWRnZSB3aG9zZSBwaW4gdG8gc2V0Cisg KiBAcGluOiB0aGUgbnVtYmVyIG9mIHRoZSBwaW4gdG8gc2V0CisgKiBAdmFsdWU6IHRoZSB2YWx1 ZSB0byBzZXQgdGhlIHBpbiB0bywgMCBvciAxCisgKgorICogQ29udGV4dDogIWluX2ludGVycnVw dCgpCisgKgorICogUmV0dXJuOiBJZiBzdWNjZXNzZnVsLCAwLiBPdGhlcndpc2UgYSBuZWdhdGl2 ZSBlcnJvciBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgeGFwZWEwMHhfYnJfc2V0X2dwaW9fdmFs dWUoc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2LCB1OCBwaW4sCisJCQkJICAgICAgdTggdmFs dWUpCit7CisJdTggZGF0YVs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisJc3dpdGNoIChwaW4pIHsK KwljYXNlIDEwOgorCWNhc2UgIDk6CisJY2FzZSAgODoKKwljYXNlICA3OgorCWNhc2UgIDY6CisJ CWRhdGFbMF0gPSB2YWx1ZSA8PCAocGluIC0gNCk7CisJCWRhdGFbMl0gPSAxIDw8IChwaW4gLSA0 KTsKKwkJYnJlYWs7CisJY2FzZSAgNToKKwkJZGF0YVswXSA9IHZhbHVlOworCQlkYXRhWzJdID0g MTsKKwkJYnJlYWs7CisJY2FzZSAgNDoKKwljYXNlICAzOgorCWNhc2UgIDI6CisJY2FzZSAgMToK KwljYXNlICAwOgorCQlkYXRhWzFdID0gdmFsdWUgPDwgKHBpbiArIDMpOworCQlkYXRhWzNdID0g MSA8PCAocGluICsgMyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4geGFwZWEwMHhfYnJfY3RybF93 cml0ZShkZXYsIFhBUEVBMDBYX0JSX0JSRVFfU0VUX0dQSU9fVkFMVUVTLAorCQkJCSAgICAgIDAs IDAsIGRhdGEsIDQpOworfQorCisvKioKKyAqIHhhcGVhMDB4X2JyX3NldF9ncGlvX2NzIC0gU2V0 cyB0aGUgY2hpcCBzZWxlY3QgY29udHJvbCBvbiB0aGUgc3BlY2lmaWVkCisgKiBwaW4gb2YgdGhl IGJyaWRnZSBjaGlwLgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIGNvbnRhaW5pbmcg dGhlIGJyaWRnZSB3aG9zZSBjcyB0byBzZXQKKyAqIEBwaW46IHRoZSBudW1iZXIgb2YgdGhlIHBp biB0byBzZXQKKyAqIEBjb250cm9sOiB0aGUgY2hpcCBzZWxlY3QgY29udHJvbCB2YWx1ZSBmb3Ig dGhlIHBpbiwgMCwgMSwgb3IgMgorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoK KyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3Ig bnVtYmVyLgorICovCitzdGF0aWMgaW50IHhhcGVhMDB4X2JyX3NldF9ncGlvX2NzKHN0cnVjdCB4 YXBlYTAweF9kZXZpY2UgKmRldiwgdTggcGluLAorCQkJCSAgIHU4IGNvbnRyb2wpCit7CisJdTgg ZGF0YVsyXSA9IHsgcGluLCBjb250cm9sIH07CisKKwlyZXR1cm4geGFwZWEwMHhfYnJfY3RybF93 cml0ZShkZXYsIFhBUEVBMDBYX0JSX0JSRVFfU0VUX0dQSU9fQ1MsCisJCQkJICAgICAgMCwgMCwg ZGF0YSwgMik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCcmlkZ2UgY29uZmln dXJhdGlvbiBjb21tYW5kcworICovCisvKioKKyAqIHhhcGVhMDB4X2JyX2Rpc2FibGVfY3MgLSBk aXNhYmxlIHRoZSBidWlsdC1pbiBjaGlwIHNlbGVjdAorICogY2FwYWJpbGl0eSBvZiB0aGUgc3Bl Y2lmaWVkIGNoYW5uZWwuCSBJdCBkb2VzIG5vdCBzdXBwb3J0IGhvbGRpbmcKKyAqIHRoZSBDUyBh Y3RpdmUgYmV0d2VlbiBTUEkgdHJhbnNmZXJzLCBhIGZlYXR1cmUgcmVxdWlyZWQgZm9yIHRoZQor ICogVFBNLgkgSW5zdGVhZCwgd2UgbWFudWFsbHkgY29udHJvbCB0aGUgQ1MgcGluIGFzIGEgR1BJ Ty4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBjb250YWluaW5nIHRoZSBicmlkZ2Ug d2hvc2UgY3MgdG8gZGlzYWJsZQorICogQGNoYW5uZWw6IHRoZSBTUEkgY2hhbm5lbCB3aG9zZSBj cyB0byBkaXNhYmxlCisgKgorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV0 dXJuOiBJZiBzdWNjZXNzZnVsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4K KyAqLworaW50IHhhcGVhMDB4X2JyX2Rpc2FibGVfY3Moc3RydWN0IHhhcGVhMDB4X2RldmljZSAq ZGV2LCB1OCBjaGFubmVsKQoreworCXJldHVybiB4YXBlYTAweF9icl9zZXRfZ3Bpb19jcyhkZXYs IGNoYW5uZWwsCisJCQkJICAgICAgIFhBUEVBMDBYX0JSX0NTX0RJU0FCTEVEKTsKK30KKworLyoq CisgKiB4YXBlYTAweF9icl9hc3NlcnRfY3MgLSBhc3NlcnQgdGhlIGNoaXAgc2VsZWN0IHBpbiBm b3IgdGhlCisgKiBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRl dmljZSBjb250YWluaW5nIHRoZSBicmlkZ2Ugd2hvIGNzIHRvIGFzc2VydAorICogQGNoYW5uZWw6 IHRoZSBTUEkgY2hhbm5lbCB3aG9zZSBjcyB0byBhc3NlcnQKKyAqCisgKiBDb250ZXh0OiAhaW5f aW50ZXJydXB0KCkKKyAqCisgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwgMC4gT3RoZXJ3aXNlIGEg bmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICovCitpbnQgeGFwZWEwMHhfYnJfYXNzZXJ0X2NzKHN0 cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwgdTggY2hhbm5lbCkKK3sKKwlyZXR1cm4geGFwZWEw MHhfYnJfc2V0X2dwaW9fdmFsdWUoZGV2LCBjaGFubmVsLCAwKTsKK30KKworLyoqCisgKiB4YXBl YTAweF9icl9kZWFzc2VydF9jcyAtIGRlYXNzZXJ0IHRoZSBjaGlwIHNlbGVjdCBwaW4gZm9yIHRo ZQorICogc3BlY2lmaWVkIGNoYW5uZWwuCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ug Y29udGFpbmluZyB0aGUgYnJpZGdlIHdobyBjcyB0byBkZWFzc2VydAorICogQGNoYW5uZWw6IHRo ZSBTUEkgY2hhbm5lbCB3aG9zZSBjcyB0byBkZWFzc2VydAorICoKKyAqIENvbnRleHQ6ICFpbl9p bnRlcnJ1cHQoKQorICoKKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCAwLiBPdGhlcndpc2UgYSBu ZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKi8KK2ludCB4YXBlYTAweF9icl9kZWFzc2VydF9jcyhz dHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpCit7CisJcmV0dXJuIHhhcGVh MDB4X2JyX3NldF9ncGlvX3ZhbHVlKGRldiwgY2hhbm5lbCwgMSk7Cit9CisKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiBCcmlkZ2UgU1BJIHJlYWRzIGFuZCB3cml0ZXMKKyAqLworLyoqCisg KiB4ZWFwZWEwMHhfc3BpX3JlYWQgLSBQZXJmb3JtcyBhIHJlYWQgZnJvbSB0aGUgYWN0aXZlIGNo YW5uZWwKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0byBwZXJmb3JtIHRoZSByZWFk CisgKiBAcnhfYnVmOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRv LiAgTXVzdCBiZQorICoJICAgIERNQS1jYXBhYmxlIChlLmcuLCBrbWFsbG9jLWVkLCBub3Qgc3Rh Y2spLgorICogQGxlbjogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHJlYWQKKyAqCisg KiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWws IDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqLworaW50IHhhcGVhMDB4 X2JyX3NwaV9yZWFkKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwgdm9pZCAqcnhfYnVmLCBp bnQgbGVuKQoreworCXN0cnVjdCB4YXBlYTAweF9icl9idWxrX2NvbW1hbmQgaGVhZGVyOworCWlu dCByZXR2YWw7CisKKwl4YXBlYTAweF9icl9wcmVwX2J1bGtfY29tbWFuZCgmaGVhZGVyLCBYQVBF QTAwWF9CUl9DTURfUkVBRCwgbGVuKTsKKwlyZXR2YWwgPSB4YXBlYTAweF9icl9idWxrX3dyaXRl KGRldiwgJmhlYWRlciwgTlVMTCwgMCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwly ZXR2YWwgPSB4YXBlYTAweF9icl9idWxrX3JlYWQoZGV2LCByeF9idWYsIGxlbik7CisKK291dDoK KwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqeGFwZWEwMHhfYnJfc3BpX3dyaXRlIC0gUGVy Zm9ybXMgYSB3cml0ZSB0byB0aGUgYWN0aXZlIGNoYW5uZWwKKyAqIEBkZXY6IHBvaW50ZXIgdG8g dGhlIGRldmljZSB0byBwZXJmb3JtIHRoZSB3cml0ZQorICogQHR4X2J1ZjogcG9pbnRlciB0byB0 aGUgZGF0YSB0byB3cml0ZS4gTXVzdCBiZSBETUEtY2FwYWJsZSAoZS5nLiwKKyAqCSAgICBrbWFs bG9jLWVkLCBub3Qgc3RhY2spLgorICogQGxlbjogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRh IHRvIHdyaXRlCisgKi8KK2ludCB4YXBlYTAweF9icl9zcGlfd3JpdGUoc3RydWN0IHhhcGVhMDB4 X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICp0eF9idWYsCisJCQkgIGludCBsZW4pCit7CisJc3Ry dWN0IHhhcGVhMDB4X2JyX2J1bGtfY29tbWFuZCBoZWFkZXI7CisJaW50IHJldHZhbDsKKworCXhh cGVhMDB4X2JyX3ByZXBfYnVsa19jb21tYW5kKCZoZWFkZXIsIFhBUEVBMDBYX0JSX0NNRF9XUklU RSwgbGVuKTsKKwlyZXR2YWwgPSB4YXBlYTAweF9icl9idWxrX3dyaXRlKGRldiwgJmhlYWRlciwg dHhfYnVmLCBsZW4pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiB4YXBlYTAweF9i cl9zcGlfd3JpdGVfcmVhZCAtIFBlcmZvcm1zIGEgc2ltdWx0YW5lb3VzIHdyaXRlIGFuZCByZWFk IG9uCisgKiB0aGUgYWN0aXZlIGNoYW5uZWwKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmlj ZSB0byBwZXJmb3JtIHRoZSB3cml0ZS9yZWFkCisgKiBAdHhfYnVmOiBwb2ludGVyIHRvIHRoZSBk YXRhIHRvIHdyaXRlLiBNdXN0IGJlIERNQS1jYXBhYmxlIChlLmcuLAorICoJICAgIGttYWxsb2Mt ZWQsIG5vdCBzdGFjaykuCisgKiBAcnhfYnVmOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gcmVh ZCB0aGUgZGF0YSBpbnRvLiBNdXN0IGJlCisgKgkgICAgRE1BLWNhcGFibGUgKGUuZy4sIGttYWxs b2MtZWQsIG5vdCBzdGFjaykuCisgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEg dG8gd3JpdGUvcmVhZAorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJl dHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVy LgorICovCitpbnQgeGFwZWEwMHhfYnJfc3BpX3dyaXRlX3JlYWQoc3RydWN0IHhhcGVhMDB4X2Rl dmljZSAqZGV2LCBjb25zdCB2b2lkICp0eF9idWYsCisJCQkgICAgICAgdm9pZCAqcnhfYnVmLCBp bnQgbGVuKQoreworCXN0cnVjdCB4YXBlYTAweF9icl9idWxrX2NvbW1hbmQgaGVhZGVyOworCWlu dCByZXR2YWw7CisKKwl4YXBlYTAweF9icl9wcmVwX2J1bGtfY29tbWFuZCgmaGVhZGVyLCBYQVBF QTAwWF9CUl9DTURfV1JJVEVSRUFELCBsZW4pOworCXJldHZhbCA9IHhhcGVhMDB4X2JyX2J1bGtf d3JpdGUoZGV2LCAmaGVhZGVyLCB0eF9idWYsIGxlbik7CisJaWYgKHJldHZhbCkKKwkJZ290byBv dXQ7CisKKwlyZXR2YWwgPSB4YXBlYTAweF9icl9idWxrX3JlYWQoZGV2LCByeF9idWYsIGxlbik7 CisKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlz Yy94YXBlYTAweC94YXBlYTAweC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9taXNjL3hhcGVhMDB4L3hh cGVhMDB4LWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY4 Y2FmM2JmOWJlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgv eGFwZWEwMHgtY29yZS5jCkBAIC0wLDAgKzEsNDI2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCsKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgWEFQLUVBLTAweCBzZXJpZXMg b2YgdGhlIFhhcHR1bSBFZGdlIEFjY2VzcyBDYXJkLCBhCisgKiAgVFBNIDIuMC1iYXNlZCBoYXJk d2FyZSBtb2R1bGUgZm9yIGF1dGhlbnRpY2F0aW5nIElvVCBkZXZpY2VzIGFuZAorICogIGdhdGV3 YXlzLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcgWGFwdHVtLCBJbmMuCisgKi8KKworI2lu Y2x1ZGUgInhhcGVhMDB4LmgiCisKKyNkZWZpbmUgWEFQRUEwMFhfVFBNX01PREFMSUFTCSAgICAg ICAidHBtX3Rpc19zcGkiCisKKyNkZWZpbmUga3JlZl90b194YXBlYTAweChrKSBjb250YWluZXJf b2Yoaywgc3RydWN0IHhhcGVhMDB4X2RldmljZSwga3JlZikKKworc3RhdGljIHZvaWQgeGFwZWEw MHhfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB4YXBlYTAweF9kZXZpY2Ug KmRldiA9IGtyZWZfdG9feGFwZWEwMHgoa3JlZik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYp OworCWtmcmVlKGRldik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTUEkgbWFz dGVyIGZ1bmN0aW9ucworICovCisKKy8qKgorICogeGFwZWEwMHhfc3BpX3NldHVwIC0gU2V0dXAg dGhlIFNQSSBjaGFubmVsIGZvciB0aGUgVFBNLgorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1 cHQoKQorICoKKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRp dmUgZXJyb3IgbnVtYmVyLgorICovCitzdGF0aWMgaW50IHhhcGVhMDB4X3NwaV9zZXR1cChzdHJ1 Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldjsKKwlp bnQgcmV0dmFsOworCisJZGV2ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7 CisKKwltdXRleF9sb2NrKCZkZXYtPnVzYl9tdXRleCk7CisJaWYgKCFkZXYtPmludGVyZmFjZSkg eworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBWZXJpZnkgdGhh dCB0aGlzIGlzIHRoZSBUUE0gZGV2aWNlICovCisJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgIT0gMCkg eworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwkvKgorCSAqIERpc2Fi bGUgYXV0byBjaGlwIHNlbGVjdCBmb3IgdGhlIFRQTSBjaGFubmVsLgorCSAqIE11c3QgYmUgZG9u ZSBhZnRlciBzZXR0aW5nIHRoZSBTUEkgcGFyYW1ldGVycy4KKwkgKi8KKwlyZXR2YWwgPSB4YXBl YTAweF9icl9kaXNhYmxlX2NzKGRldiwgMCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisK KwkvKiBEZS1hc3NlcnQgY2hpcCBzZWxlY3QgZm9yIHRoZSBUUE0gY2hhbm5lbC4gKi8KKwlyZXR2 YWwgPSB4YXBlYTAweF9icl9kZWFzc2VydF9jcyhkZXYsIDApOworCWlmIChyZXR2YWwpCisJCWdv dG8gZXJyOworCisJZGV2X2RiZygmZGV2LT5pbnRlcmZhY2UtPmRldiwgImNvbmZpZ3VyZWQgc3Bp IGNoYW5uZWwgZm9yIHRwbVxuIik7CisJZ290byBvdXQ7CisKK2VycjoKKwlkZXZfZXJyKCZkZXYt PmludGVyZmFjZS0+ZGV2LAorCQkiY29uZmlndXJpbmcgU1BJIGNoYW5uZWwgZmFpbGVkIHdpdGgg JWRcbiIsIHJldHZhbCk7CisKK291dDoKKwltdXRleF91bmxvY2soJmRldi0+dXNiX211dGV4KTsK KwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHhhcGVhMDB4X3NwaV90cmFuc2ZlciAtIEV4 ZWN1dGUgYSBzaW5nbGUgU1BJIHRyYW5zZmVyLgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2 aWNlIHRvIGRvIHRoZSB0cmFuc2ZlciBvbgorICogQHR4X2J1ZjogcG9pbnRlciB0byB0aGUgZGF0 YSB0byBzZW5kLCBpZiBub3QgTlVMTAorICogQHJ4X2J1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVy IHRvIHN0b3JlIHRoZSByZWNlaXZlZCBkYXRhLCBpZiBub3QgTlVMTAorICogQGxlbjogbGVuZ3Ro IGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHNlbmQvcmVjZWl2ZQorICogQGNzX2hvbGQ6IElmIG5v bi16ZXJvLCB0aGUgY2hpcCBzZWxlY3Qgd2lsbCByZW1haW4gYXNzZXJ0ZWQKKyAqIEBkZWxheV91 c2VjczogSWYgbm9uemVybywgaG93IGxvbmcgdG8gZGVsYXkgYWZ0ZXIgbGFzdCBiaXQgdHJhbnNm ZXIKKyAqCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXR1cm46IElmIHN1 Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqLworaW50 IHhhcGVhMDB4X3NwaV90cmFuc2ZlcihzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsCisJCQkg IGNvbnN0IHZvaWQgKnR4X2J1Ziwgdm9pZCAqcnhfYnVmLCB1MzIgbGVuLAorCQkJICBpbnQgY3Nf aG9sZCwgdTE2IGRlbGF5X3VzZWNzKQoreworCWludCByZXR2YWw7CisKKwkvKiBBc3NlcnQgY2hp cCBzZWxlY3QgKi8KKwlyZXR2YWwgPSB4YXBlYTAweF9icl9hc3NlcnRfY3MoZGV2LCAwKTsKKwlp ZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCS8qIGVtcHR5IHRyYW5zZmVyICovCisJaWYgKCF0 eF9idWYgJiYgIXJ4X2J1ZikKKwkJcmV0dmFsID0gMDsKKwkvKiByZWFkIHRyYW5zZmVyICovCisJ ZWxzZSBpZiAoIXR4X2J1ZikKKwkJcmV0dmFsID0geGFwZWEwMHhfYnJfc3BpX3JlYWQoZGV2LCBy eF9idWYsIGxlbik7CisJLyogd3JpdGUgdHJhbnNmZXIgKi8KKwllbHNlIGlmICghcnhfYnVmKQor CQlyZXR2YWwgPSB4YXBlYTAweF9icl9zcGlfd3JpdGUoZGV2LCB0eF9idWYsIGxlbik7CisJLyog d3JpdGVfcmVhZCB0cmFuc2ZlciAqLworCWVsc2UKKwkJcmV0dmFsID0geGFwZWEwMHhfYnJfc3Bp X3dyaXRlX3JlYWQoZGV2LCB0eF9idWYsIHJ4X2J1ZiwgbGVuKTsKKworCS8qIERlYXNzZXJ0IGNo aXAgc2VsZWN0LCBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoIWNzX2hvbGQpCisJCXJldHZhbCA9IHhh cGVhMDB4X2JyX2RlYXNzZXJ0X2NzKGRldiwgMCk7CisKKwkvKiBEZWxheSBmb3IgdGhlIHJlcXVl c3RlZCB0aW1lICovCisJdWRlbGF5KGRlbGF5X3VzZWNzKTsKKworb3V0OgorCXJldHVybiByZXR2 YWw7Cit9CisKKy8qKgorICogeGFwZWEwMHhfc3BpX3RyYW5zZmVyX29uZV9tZXNzYWdlIC0gRXhl Y3V0ZSBhIGZ1bGwgU1BJIG1lc3NhZ2UuCisgKiBAbWFzdGVyOiBUaGUgU1BJIG1hc3RlciBvbiB3 aGljaCB0byBleGVjdXRlIHRoZSBtZXNzYWdlLgorICogQG1zZzogVGhlIFNQSSBtZXNzYWdlIHRv IGV4ZWN1dGUuCisgKgorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV0dXJu OiBJZiBzdWNjZXNzZnVsLCAwLiBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcm9yciBudW1iZXIuCisg Ki8KK3N0YXRpYyBpbnQgeGFwZWEwMHhfc3BpX3RyYW5zZmVyX29uZV9tZXNzYWdlKHN0cnVjdCBz cGlfbWFzdGVyICptYXN0ZXIsCisJCQkJCSAgICAgc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCit7 CisJc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2OworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhm ZXI7CisJaW50IGlzX2xhc3QsIHJldHZhbDsKKworCWRldiA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRh dGEobWFzdGVyKTsKKworCW11dGV4X2xvY2soJmRldi0+dXNiX211dGV4KTsKKwlpZiAoIWRldi0+ aW50ZXJmYWNlKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCS8q IHBlcmZvcm0gYWxsIHRyYW5zZmVycyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1z Zy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisJCWlzX2xhc3QgPSBsaXN0X2lzX2xhc3Qo JnhmZXItPnRyYW5zZmVyX2xpc3QsICZtc2ctPnRyYW5zZmVycyk7CisKKwkJLyogVHJhbnNmZXIg bWVzc2FnZSAqLworCQlyZXR2YWwgPSB4YXBlYTAweF9zcGlfdHJhbnNmZXIoZGV2LCB4ZmVyLT50 eF9idWYsCisJCQkJCSAgICAgICB4ZmVyLT5yeF9idWYsIHhmZXItPmxlbiwKKwkJCQkJICAgICAg IGlzX2xhc3QgPT0geGZlci0+Y3NfY2hhbmdlLAorCQkJCQkgICAgICAgeGZlci0+ZGVsYXlfdXNl Y3MpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisKKwkJbXNnLT5hY3R1YWxfbGVuZ3Ro ICs9IHhmZXItPmxlbjsKKwl9CisKKwlyZXR2YWwgPSAwOworCitvdXQ6CisJbXNnLT5zdGF0dXMg PSByZXR2YWw7CisJc3BpX2ZpbmFsaXplX2N1cnJlbnRfbWVzc2FnZShtYXN0ZXIpOworCisJbXV0 ZXhfdW5sb2NrKCZkZXYtPnVzYl9tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisg KiB4YXBlYTAweF9zcGlfcHJvYmUgLSBSZWdpc3RlciBhbmQgY29uZmlndXJlIHRoZSBTUEkgbWFz dGVyLgorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBTUEkgbWFzdGVyIHRvIHJlZ2lzdGVyCisg KgorICogUmV0dXJuOiBJZiBzdWNjZXNzZnVsLCAwLiBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJv ciBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgeGFwZWEwMHhfc3BpX3Byb2JlKHN0cnVjdCB4YXBl YTAweF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqc3BpX21hc3RlcjsKKwlp bnQgcmV0dmFsOworCisJc3BpX21hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJmRldi0+aW50ZXJm YWNlLT5kZXYsIHNpemVvZih2b2lkICopKTsKKwlpZiAoIXNwaV9tYXN0ZXIpIHsKKwkJcmV0dmFs ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXNwaV9tYXN0ZXJfc2V0X2RldmRh dGEoc3BpX21hc3RlciwgZGV2KTsKKworCXNwaV9tYXN0ZXItPm1pbl9zcGVlZF9oeiA9IDkzICog MTAwMCArIDgwMDsgLyogOTMuOWtIeiAqLworCXNwaV9tYXN0ZXItPm1heF9zcGVlZF9oeiA9IDEy ICogMTAwMCAqIDEwMDA7IC8qIDEyIE1IeiAqLworCisJc3BpX21hc3Rlci0+YnVzX251bSA9IC0x OyAvKiBkeW5hbWljYWxseSBhc3NpZ25lZCAqLworCXNwaV9tYXN0ZXItPm51bV9jaGlwc2VsZWN0 ID0gMTsKKwlzcGlfbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfTU9ERV8wOworCisJc3BpX21hc3Rl ci0+ZmxhZ3MgPSAwOworCXNwaV9tYXN0ZXItPnNldHVwID0geGFwZWEwMHhfc3BpX3NldHVwOwor CXNwaV9tYXN0ZXItPmNsZWFudXAgPSBOVUxMOworCXNwaV9tYXN0ZXItPnRyYW5zZmVyX29uZV9t ZXNzYWdlID0geGFwZWEwMHhfc3BpX3RyYW5zZmVyX29uZV9tZXNzYWdlOworCisJcmV0dmFsID0g c3BpX3JlZ2lzdGVyX21hc3RlcihzcGlfbWFzdGVyKTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8g ZnJlZV9zcGk7CisKKwlkZXYtPnNwaV9tYXN0ZXIgPSBzcGlfbWFzdGVyOworCWRldl9kYmcoJmRl di0+aW50ZXJmYWNlLT5kZXYsICJyZWdpc3RlcmVkIFNQSSBtYXN0ZXJcbiIpOworCisJcmV0dXJu IDA7CisKK2ZyZWVfc3BpOgorCXNwaV9tYXN0ZXJfcHV0KHNwaV9tYXN0ZXIpOworCWRldi0+c3Bp X21hc3RlciA9IE5VTEw7CisKK2Vycl9vdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RydWN0 IHhhcGVhMDB4X2FzeW5jX3Byb2JlIHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1 Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXY7Cit9OworCisjZGVmaW5lIHdvcmtfdG9fcHJvYmUodykg Y29udGFpbmVyX29mKHcsIHN0cnVjdCB4YXBlYTAweF9hc3luY19wcm9iZSwgd29yaykKKworLyoq CisgKiB4YXBlYTAweF9pbml0X2FzeW5jX3Byb2JlIC0gaW5pdGlhbGl6ZSBhbiBhc3luYyBwcm9i ZSB3aXRoIHRoZQorICogc3BlY2lmaWVkIHZhbHVlcy4KKyAqIEBwcm9iZTogcG9pbnRlciB0byB0 aGUgYXN5bmNfcHJvYmUgdG8gaW5pdGlhbGl6ZQorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2 aWNlIHRvIHByb2JlCisgKiBAZjogcG9pbnRlciB0byB0aGUgcHJvYmUgZnVuY3Rpb24KKyAqLwor c3RhdGljIHZvaWQgeGFwZWEwMHhfaW5pdF9hc3luY19wcm9iZShzdHJ1Y3QgeGFwZWEwMHhfYXN5 bmNfcHJvYmUgKnByb2JlLAorCQkJCSAgICAgIHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwK KwkJCQkgICAgICB2b2lkICgqZikoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSkKK3sKKwlJTklU X1dPUksoJnByb2JlLT53b3JrLCBmKTsKKwlwcm9iZS0+ZGV2ID0gZGV2OworCisJa3JlZl9nZXQo JmRldi0+a3JlZik7CisJc3BpX21hc3Rlcl9nZXQoZGV2LT5zcGlfbWFzdGVyKTsKK30KKworLyoq CisgKiB4YXBlYTAweF9jbGVhbnVwX2FzeW5jX3Byb2JlIC0gY2xlYW4gdXAgdGhlIGludGVybmFs cyBvZiB0aGUgYXN5bmMKKyAqIHByb2JlLiBDYWxsIHRoaXMgbWV0aG9kIGFmdGVyIHRoZSBwcm9i ZSBoYXMgY29tcGxldGVkLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZy ZWVpbmcgdGhlIHByb2JlIGl0c2VsZiwgaWYKKyAqIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KKyAq CisgKiBAcHJvYmU6IHBvaW50ZXIgdG8gdGhlIGFzeW5jX3Byb2JlIHRvIGNsZWFuIHVwCisgKi8K K3N0YXRpYyB2b2lkIHhhcGVhMDB4X2NsZWFudXBfYXN5bmNfcHJvYmUoc3RydWN0IHhhcGVhMDB4 X2FzeW5jX3Byb2JlICpwcm9iZSkKK3sKKwlzcGlfbWFzdGVyX3B1dChwcm9iZS0+ZGV2LT5zcGlf bWFzdGVyKTsKKwlrcmVmX3B1dCgmcHJvYmUtPmRldi0+a3JlZiwgeGFwZWEwMHhfZGVsZXRlKTsK K30KKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB0cG1fYm9hcmRfaW5mbyA9IHsKKwku bW9kYWxpYXMJID0gWEFQRUEwMFhfVFBNX01PREFMSUFTLAorCS5tYXhfc3BlZWRfaHoJID0gNDMg KiAxMDAwICogMTAwMCwgLy8gSHoKKwkuY2hpcF9zZWxlY3QJID0gMCwKKwkubW9kZQkJID0gU1BJ X01PREVfMCwKKwkucGxhdGZvcm1fZGF0YQkgPSBOVUxMLAorCS5jb250cm9sbGVyX2RhdGEgPSBO VUxMLAorfTsKKworLyoqCisgKiB4YXBlYTAweF90cG1fcHJvYmUgLSBSZWdpc3RlciBhbmQgaW5p dGlhbGl6ZSB0aGUgVFBNIGRldmljZQorICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdCBjb250YWlu ZWQgYnkgdGhlIHhhcGVhMDB4IGRldmljZQorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQo KQorICovCitzdGF0aWMgdm9pZCB4YXBlYTAweF90cG1fcHJvYmUoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQoreworCXN0cnVjdCB4YXBlYTAweF9hc3luY19wcm9iZSAqcHJvYmUgPSB3b3JrX3Rv X3Byb2JlKHdvcmspOworCXN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiA9IHByb2JlLT5kZXY7 CisJc3RydWN0IHNwaV9tYXN0ZXIgKnNwaV9tYXN0ZXIgPSBkZXYtPnNwaV9tYXN0ZXI7CisJc3Ry dWN0IHNwaV9kZXZpY2UgKnRwbTsKKwlpbnQgcmV0dmFsOworCisJdHBtID0gc3BpX25ld19kZXZp Y2Uoc3BpX21hc3RlciwgJnRwbV9ib2FyZF9pbmZvKTsKKwltdXRleF9sb2NrKCZkZXYtPnVzYl9t dXRleCk7CisJaWYgKCFkZXYtPmludGVyZmFjZSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQln b3RvIG91dDsKKwl9CisJaWYgKCF0cG0pIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZGV2X2Vy cigmZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCSJ1bmFibGUgdG8gYWRkIHNwaSBkZXZpY2UgZm9y IFRQTVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWRldi0+dHBtID0gdHBtOworCWRldl9pbmZv KCZkZXYtPmludGVyZmFjZS0+ZGV2LCAiVFBNIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlXG4iKTsK KworCXJldHZhbCA9IDA7CisJZ290byBvdXQ7CisKK2VycjoKKwlkZXZfZXJyKCZkZXYtPmludGVy ZmFjZS0+ZGV2LAorCQkiVFBNIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2 YWwpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYl9tdXRleCk7CisJeGFwZWEwMHhf Y2xlYW51cF9hc3luY19wcm9iZShwcm9iZSk7CisJa3pmcmVlKHByb2JlKTsKK30KKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIFVTQiBkcml2ZXIgc3RydWN0cyBhbmQgZnVuY3Rpb25zCisg Ki8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHhhcGVhMDB4X2RldmljZXNb XSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TSUxBQlMsIFVTQl9QUk9EVUNUX0lE X1hBUEVBMDAxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1hBUFRVTSwgVVNCX1BS T0RVQ1RfSURfWEFQRUEwMDIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfWEFQVFVN LCBVU0JfUFJPRFVDVF9JRF9YQVBFQTAwMykgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKHVzYiwgeGFwZWEwMHhfZGV2aWNlcyk7CisKK3N0YXRpYyBpbnQgeGFwZWEwMHhfcHJvYmUo c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCSAgY29uc3Qgc3RydWN0IHVzYl9k ZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qg eGFwZWEwMHhfYXN5bmNfcHJvYmUgKnByb2JlOworCWludCByZXR2YWw7CisKKwlkZXYgPSBremFs bG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5P TUVNOworCisJa3JlZl9pbml0KCZkZXYtPmtyZWYpOworCW11dGV4X2luaXQoJmRldi0+dXNiX211 dGV4KTsKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNCIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCWRldi0+dWRldiA9IHVz Yl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisKKwlkZXYtPnZpZCA9 IF9fbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlkZXYtPnBp ZCA9IF9fbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisKKwly ZXR2YWwgPSB1c2JfZmluZF9jb21tb25fZW5kcG9pbnRzKGludGVyZmFjZS0+Y3VyX2FsdHNldHRp bmcsCisJCQkJCSAgICZkZXYtPmJ1bGtfaW4sICZkZXYtPmJ1bGtfb3V0LAorCQkJCQkgICBOVUxM LCBOVUxMKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJ ImNvdWxkIG5vdCBmaW5kIGJvdGggYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzXG4iKTsK KwkJZ290byBmcmVlX2RldjsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2 KTsKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BJIE1hc3RlciAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gKi8KKwlyZXR2YWwgPSB4YXBlYTAweF9zcGlfcHJvYmUoZGV2KTsKKwlpZiAo cmV0dmFsKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiY291bGQgbm90IGluaXRpYWxp emUgU1BJIG1hc3RlclxuIik7CisJCWdvdG8gZnJlZV9kZXY7CisJfQorCisJLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSBUUE0gU1BJIERldmljZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K Kwlwcm9iZSA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9iZSksIEdGUF9LRVJORUwpOworCWlmICghcHJv YmUpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3NwaTsKKwl9CisJeGFwZWEw MHhfaW5pdF9hc3luY19wcm9iZShwcm9iZSwgZGV2LCB4YXBlYTAweF90cG1fcHJvYmUpOworCisJ c2NoZWR1bGVfd29yaygmcHJvYmUtPndvcmspOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwg InNjaGVkdWxlZCBpbml0aWFsaXphdGlvbiBvZiBUUE1cbiIpOworCisJLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBGaW5pc2hlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlkZXZfaW5m bygmaW50ZXJmYWNlLT5kZXYsICJkZXZpY2UgY29ubmVjdGVkXG4iKTsKKwlyZXR1cm4gMDsKKwor ZnJlZV9zcGk6CisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKGRldi0+c3BpX21hc3Rlcik7CisKK2Zy ZWVfZGV2OgorCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHhhcGVhMDB4X2RlbGV0ZSk7CisKKwlkZXZf ZXJyKCZpbnRlcmZhY2UtPmRldiwgImRldmljZSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsK KwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCB4YXBlYTAweF9kaXNjb25uZWN0KHN0 cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHhhcGVhMDB4X2Rldmlj ZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJdXNiX3NldF9pbnRmZGF0 YShpbnRlcmZhY2UsIE5VTEwpOworCXNwaV91bnJlZ2lzdGVyX21hc3RlcihkZXYtPnNwaV9tYXN0 ZXIpOworCisJbXV0ZXhfbG9jaygmZGV2LT51c2JfbXV0ZXgpOworCWRldi0+aW50ZXJmYWNlID0g TlVMTDsKKwltdXRleF91bmxvY2soJmRldi0+dXNiX211dGV4KTsKKworCWtyZWZfcHV0KCZkZXYt PmtyZWYsIHhhcGVhMDB4X2RlbGV0ZSk7CisKKwlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsICJk ZXZpY2UgZGlzY29ubmVjdGVkXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHhh cGVhMDB4X2RyaXZlciA9IHsKKwkubmFtZQkJICAgICAgPSAieGFwZWEwMHgiLAorCS5wcm9iZQkJ ICAgICAgPSB4YXBlYTAweF9wcm9iZSwKKwkuZGlzY29ubmVjdAkgICAgICA9IHhhcGVhMDB4X2Rp c2Nvbm5lY3QsCisJLnN1c3BlbmQJICAgICAgPSBOVUxMLAorCS5yZXN1bWUJCSAgICAgID0gTlVM TCwKKwkucmVzZXRfcmVzdW1lCSAgICAgID0gTlVMTCwKKwkuaWRfdGFibGUJICAgICAgPSB4YXBl YTAweF9kZXZpY2VzLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDAKK307CisKK21vZHVsZV91 c2JfZHJpdmVyKHhhcGVhMDB4X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFIuIEJp bGQgPGRhdmlkLmJpbGRAeGFwdHVtLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWGFwdHVt IFhBUC1FQS0wMHggRU5GIEFjY2VzcyBjYXJkIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisK K01PRFVMRV9BTElBUygieGFwZWEwMHgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mv eGFwZWEwMHgveGFwZWEwMHgtc3BpLmMgYi9kcml2ZXJzL3VzYi9taXNjL3hhcGVhMDB4L3hhcGVh MDB4LXNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGUxNDVi ODNmNzNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBl YTAweC1zcGkuYwpAQCAtMCwwICsxLDIwOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArCisvKgorICogIERyaXZlciBmb3IgdGhlIFhBUC1FQS0wMHggc2VyaWVzIG9mIHRo ZSBYYXB0dW0gRWRnZSBBY2Nlc3MgQ2FyZCwgYQorICogIFRQTSAyLjAtYmFzZWQgaGFyZHdhcmUg bW9kdWxlIGZvciBhdXRoZW50aWNhdGluZyBJb1QgZGV2aWNlcyBhbmQKKyAqICBnYXRld2F5cy4K KyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3IFhhcHR1bSwgSW5jLgorICovCisKKyNpbmNsdWRl ICJ4YXBlYTAweC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU1BJIG1hc3RlciBm dW5jdGlvbnMKKyAqLworCisvKioKKyAqIHhhcGVhMDB4X3NwaV9zZXR1cCAtIFNldHVwIHRoZSBT UEkgY2hhbm5lbCBmb3IgdGhlIFRQTS4KKyAqCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkK KyAqCisgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVy cm9yIG51bWJlci4KKyAqLworc3RhdGljIGludCB4YXBlYTAweF9zcGlfc2V0dXAoc3RydWN0IHNw aV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXY7CisJaW50IHJl dHZhbDsKKworCWRldiA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJ LyogVmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgVFBNIGRldmljZSAqLworCWlmIChzcGktPmNoaXBf c2VsZWN0ICE9IDApIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJ LyogU2V0IHRoZSBTUEkgcGFyYW1ldGVycyBmb3IgdGhlIFRQTSBjaGFubmVsLiAqLworCXJldHZh bCA9IHhhcGVhMDB4X2JyX3NldF9zcGlfd29yZChkZXYsIDAsIFhBUEVBMDBYX1RQTV9TUElfV09S RCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisKKwkvKgorCSAqIERpc2FibGUgYXV0byBj aGlwIHNlbGVjdCBmb3IgdGhlIFRQTSBjaGFubmVsLgorCSAqIE11c3QgYmUgZG9uZSBhZnRlciBz ZXR0aW5nIHRoZSBTUEkgcGFyYW1ldGVycy4KKwkgKi8KKwlyZXR2YWwgPSB4YXBlYTAweF9icl9z ZXRfZ3Bpb19jcyhkZXYsIDAsIFhBUEVBMDBYX0dQSU9fQ1NfRElTQUJMRUQpOworCWlmIChyZXR2 YWwpCisJCWdvdG8gZXJyOworCisJLyogRGUtYXNzZXJ0IGNoaXAgc2VsZWN0IGZvciB0aGUgVFBN IGNoYW5uZWwuICovCisJcmV0dmFsID0geGFwZWEwMHhfYnJfc2V0X2dwaW9fdmFsdWUoZGV2LCAw LCAxKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycjsKKworCWRldl9kYmcoJmRldi0+aW50ZXJm YWNlLT5kZXYsICJjb25maWd1cmVkIHNwaSBjaGFubmVsIGZvciB0cG1cbiIpOworCXJldHVybiAw OworCitlcnI6CisJZGV2X2VycigmZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJImNvbmZpZ3VyaW5n IFNQSSBjaGFubmVsIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7 Cit9CisKKy8qKgorICogeGFwZWEwMHhfc3BpX2NsZWFudXAKKyAqCisgKiBDb250ZXh0OiAhaW5f aW50ZXJydXB0KCkKKyAqLworc3RhdGljIHZvaWQgeGFwZWEwMHhfc3BpX2NsZWFudXAoc3RydWN0 IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlkZXZfZGJnKCZzcGktPmRldiwgIiVzXG4iLCBfX2Z1bmNf Xyk7Cit9CisKKy8qKgorICogeGFwZWEwMHhfc3BpX3RyYW5zZmVyIC0gRXhlY3V0ZSBhIHNpbmds ZSBTUEkgdHJhbnNmZXIuCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdG8gZG8gdGhl IHRyYW5zZmVyIG9uCisgKiBAdHhfYnVmOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQsIGlm IG5vdCBOVUxMCisgKiBAcnhfYnVmOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc3RvcmUgdGhl IHJlY2VpdmVkIGRhdGEsIGlmIG5vdCBOVUxMCisgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZXMgb2Yg dGhlIGRhdGEgdG8gc2VuZC9yZWNlaXZlCisgKiBAY3NfaG9sZDogSWYgbm9uLXplcm8sIHRoZSBj aGlwIHNlbGVjdCB3aWxsIHJlbWFpbiBhc3NlcnRlZAorICogQGRlbGF5X3VzZWNzOiBJZiBub256 ZXJvLCBob3cgbG9uZyB0byBkZWxheSBhZnRlciBsYXN0IGJpdCB0cmFuc2ZlcgorICoKKyAqIENv bnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4g T3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICovCitpbnQgeGFwZWEwMHhfc3Bp X3RyYW5zZmVyKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwKKwkJCSAgY29uc3Qgdm9pZCAq dHhfYnVmLCB2b2lkICpyeF9idWYsIHUzMiBsZW4sCisJCQkgIGludCBjc19ob2xkLCB1MTYgZGVs YXlfdXNlY3MpCit7CisJaW50IHJldHZhbDsKKworCS8qIEFzc2VydCBjaGlwIHNlbGVjdCAqLwor CXJldHZhbCA9IHhhcGVhMDB4X2JyX3NldF9ncGlvX3ZhbHVlKGRldiwgMCwgMCk7CisJaWYgKHJl dHZhbCkKKwkJZ290byBvdXQ7CisKKwkvKiBlbXB0eSB0cmFuc2ZlciAqLworCWlmICghdHhfYnVm ICYmICFyeF9idWYpCisJCXJldHZhbCA9IDA7CisJLyogcmVhZCB0cmFuc2ZlciAqLworCWVsc2Ug aWYgKCF0eF9idWYpCisJCXJldHZhbCA9IHhhcGVhMDB4X2JyX3NwaV9yZWFkKGRldiwgcnhfYnVm LCBsZW4pOworCS8qIHdyaXRlIHRyYW5zZmVyICovCisJZWxzZSBpZiAoIXJ4X2J1ZikKKwkJcmV0 dmFsID0geGFwZWEwMHhfYnJfc3BpX3dyaXRlKGRldiwgdHhfYnVmLCBsZW4pOworCS8qIHdyaXRl X3JlYWQgdHJhbnNmZXIgKi8KKwllbHNlCisJCXJldHZhbCA9IHhhcGVhMDB4X2JyX3NwaV93cml0 ZV9yZWFkKGRldiwgdHhfYnVmLCByeF9idWYsIGxlbik7CisKKwkvKiBEZWFzc2VydCBjaGlwIHNl bGVjdCwgaWYgcmVxdWVzdGVkICovCisJaWYgKCFjc19ob2xkKQorCQlyZXR2YWwgPSB4YXBlYTAw eF9icl9zZXRfZ3Bpb192YWx1ZShkZXYsIDAsIDEpOworCisJLyogRGVsYXkgZm9yIHRoZSByZXF1 ZXN0ZWQgdGltZSAqLworCXVkZWxheShkZWxheV91c2Vjcyk7CisKK291dDoKKwlyZXR1cm4gcmV0 dmFsOworfQorCisvKioKKyAqIHhhcGVhMDB4X3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZSAtIEV4 ZWN1dGUgYSBmdWxsIFNQSSBtZXNzYWdlLgorICogQG1hc3RlcjogVGhlIFNQSSBtYXN0ZXIgb24g d2hpY2ggdG8gZXhlY3V0ZSB0aGUgbWVzc2FnZS4KKyAqIEBtc2c6IFRoZSBTUEkgbWVzc2FnZSB0 byBleGVjdXRlLgorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldHVy bjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJvcnIgbnVtYmVyLgor ICovCitzdGF0aWMgaW50IHhhcGVhMDB4X3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZShzdHJ1Y3Qg c3BpX21hc3RlciAqbWFzdGVyLAorCQkJCQkgICAgIHN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQor eworCXN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4 ZmVyOworCWludCBpc19sYXN0LCByZXR2YWw7CisKKwlkZXYgPSBzcGlfbWFzdGVyX2dldF9kZXZk YXRhKG1hc3Rlcik7CisKKwkvKiBwZXJmb3JtIGFsbCB0cmFuc2ZlcnMgKi8KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KHhmZXIsICZtc2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQlpc19s YXN0ID0gbGlzdF9pc19sYXN0KCZ4ZmVyLT50cmFuc2Zlcl9saXN0LCAmbXNnLT50cmFuc2ZlcnMp OworCisJCS8qIFRyYW5zZmVyIG1lc3NhZ2UgKi8KKwkJcmV0dmFsID0geGFwZWEwMHhfc3BpX3Ry YW5zZmVyKGRldiwgeGZlci0+dHhfYnVmLAorCQkJCQkgICAgICAgeGZlci0+cnhfYnVmLCB4ZmVy LT5sZW4sCisJCQkJCSAgICAgICBpc19sYXN0ID09IHhmZXItPmNzX2NoYW5nZSwKKwkJCQkJICAg ICAgIHhmZXItPmRlbGF5X3VzZWNzKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCisJ CW1zZy0+YWN0dWFsX2xlbmd0aCArPSB4ZmVyLT5sZW47CisJfQorCisJcmV0dmFsID0gMDsKKwor b3V0OgorCW1zZy0+c3RhdHVzID0gcmV0dmFsOworCXNwaV9maW5hbGl6ZV9jdXJyZW50X21lc3Nh Z2UobWFzdGVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHhhcGVhMDB4X3NwaV9w cm9iZSAtIFJlZ2lzdGVyIGFuZCBjb25maWd1cmUgdGhlIFNQSSBtYXN0ZXIuCisgKiBAZGV2OiB0 aGUgZGV2aWNlIHdob3NlIFNQSSBtYXN0ZXIgdG8gcmVnaXN0ZXIKKyAqCisgKiBSZXR1cm46IElm IHN1Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqLwor c3RhdGljIGludCB4YXBlYTAweF9zcGlfcHJvYmUoc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICpzcGlfbWFzdGVyOworCWludCByZXR2YWw7CisKKwlz cGlfbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmZGV2LT51ZGV2LT5kZXYsIHNpemVvZih2b2lk ICopKTsKKwlpZiAoIXNwaV9tYXN0ZXIpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBl cnJfb3V0OworCX0KKworCXNwaV9tYXN0ZXJfc2V0X2RldmRhdGEoc3BpX21hc3RlciwgZGV2KTsK KworCXNwaV9tYXN0ZXItPm1pbl9zcGVlZF9oeiA9IDkzICogMTAwMCArIDgwMDsgLyogOTMuOWtI eiAqLworCXNwaV9tYXN0ZXItPm1heF9zcGVlZF9oeiA9IDEyICogMTAwMCAqIDEwMDA7IC8qIDEy IE1IeiAqLworCisJc3BpX21hc3Rlci0+YnVzX251bSA9IC0xOyAvKiBkeW5hbWljYWxseSBhc3Np Z25lZCAqLworCXNwaV9tYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gWEFQRUEwMFhfTlVNX0NTOwor CXNwaV9tYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9NT0RFXzA7CisKKwlzcGlfbWFzdGVyLT5mbGFn cyA9IDA7CisJc3BpX21hc3Rlci0+c2V0dXAgPSB4YXBlYTAweF9zcGlfc2V0dXA7CisJc3BpX21h c3Rlci0+Y2xlYW51cCA9IHhhcGVhMDB4X3NwaV9jbGVhbnVwOworCXNwaV9tYXN0ZXItPnRyYW5z ZmVyX29uZV9tZXNzYWdlID0geGFwZWEwMHhfc3BpX3RyYW5zZmVyX29uZV9tZXNzYWdlOworCisJ cmV0dmFsID0gc3BpX3JlZ2lzdGVyX21hc3RlcihzcGlfbWFzdGVyKTsKKworCWlmIChyZXR2YWwp CisJCWdvdG8gZnJlZV9zcGk7CisKKwlkZXYtPnNwaV9tYXN0ZXIgPSBzcGlfbWFzdGVyOworCWRl dl9kYmcoJmRldi0+aW50ZXJmYWNlLT5kZXYsICJyZWdpc3RlcmVkIFNQSSBtYXN0ZXJcbiIpOwor CisJcmV0dXJuIDA7CisKK2ZyZWVfc3BpOgorCXNwaV9tYXN0ZXJfcHV0KHNwaV9tYXN0ZXIpOwor CWRldi0+c3BpX21hc3RlciA9IE5VTEw7CisKK2Vycl9vdXQ6CisJcmV0dXJuIHJldHZhbDsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHguaCBiL2RyaXZl cnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjA3NTk0ZWM5NTJlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv dXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHguaApAQCAtMCwwICsxLDc1IEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgWEFQLUVB LTAweCBzZXJpZXMgb2YgdGhlIFhhcHR1bSBFZGdlIEFjY2VzcyBDYXJkLCBhCisgKiAgVFBNIDIu MC1iYXNlZCBoYXJkd2FyZSBtb2R1bGUgZm9yIGF1dGhlbnRpY2F0aW5nIElvVCBkZXZpY2VzIGFu ZAorICogIGdhdGV3YXlzLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcgWGFwdHVtLCBJbmMu CisgKi8KKworI2lmbmRlZiBfWEFQRUEwMFhfSAorI2RlZmluZSBfWEFQRUEwMFhfSAorCisjaW5j bHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC91 c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2RlZmluZSBVU0JfVkVORE9S X0lEX1NJTEFCUyAgICAgICAgICAgMHgxMGM0CisjZGVmaW5lIFVTQl9WRU5ET1JfSURfWEFQVFVN ICAgICAgICAgICAweDJGRTAKKworI2RlZmluZSBVU0JfUFJPRFVDVF9JRF9YQVBFQTAwMSAgICAg ICAgMHg4QkRFCisjZGVmaW5lIFVTQl9QUk9EVUNUX0lEX1hBUEVBMDAyICAgICAgICAweDhCREUK KyNkZWZpbmUgVVNCX1BST0RVQ1RfSURfWEFQRUEwMDMgICAgICAgIDB4OEJFRQorCitzdHJ1Y3Qg eGFwZWEwMHhfZGV2aWNlIHsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCisJc3RydWN0IHVzYl9kZXZp Y2UgKnVkZXY7CisJLyoKKwkgKiBUaGUgaW50ZXJmYWNlIHBvaW50ZXIgd2lsbCBiZSBzZXQgTlVM TCB3aGVuIHRoZSBkZXZpY2UKKwkgKiBkaXNjb25uZWN0cy4gIEFjY2Vzc2luZyBpdCBzYWZlIG9u bHkgd2hpbGUgaG9sZGluZyB0aGUKKwkgKiB1c2JfbXV0ZXguCisJICovCisJc3RydWN0IHVzYl9p bnRlcmZhY2UgKmludGVyZmFjZTsKKwkvKgorCSAqIFRoIHVzYl9tdXRleCBtdXN0IGJlIGhlbGQg d2hpbGUgc3luY2hyb25vdXMgVVNCIHJlcXVlc3RzIGFyZQorCSAqIGluIHByb2dyZXNzLiBJdCBp cyBhY3F1aXJlZCBkdXJpbmcgZGlzY29ubmVjdCB0byBiZSBzdXJlCisJICogdGhhdCB0aGVyZSBp cyBub3QgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdC4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggdXNiX211 dGV4OworCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX2luOworCXN0cnVj dCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19vdXQ7CisKKwl1MTYgcGlkOworCXUxNiB2 aWQ7CisKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqc3BpX21hc3RlcjsKKwlzdHJ1Y3Qgc3BpX2Rldmlj ZSAqdHBtOworfTsKKworLyogUHVibGljIGJyaWRnZSBmdW5jdGlvbnMgKi8KK2ludCB4YXBlYTAw eF9icl9kaXNhYmxlX2NzKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwgdTggY2hhbm5lbCk7 CitpbnQgeGFwZWEwMHhfYnJfYXNzZXJ0X2NzKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwg dTggY2hhbm5lbCk7CitpbnQgeGFwZWEwMHhfYnJfZGVhc3NlcnRfY3Moc3RydWN0IHhhcGVhMDB4 X2RldmljZSAqZGV2LCB1OCBjaGFubmVsKTsKKworaW50IHhhcGVhMDB4X2JyX3NwaV9yZWFkKHN0 cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwgdm9pZCAqcnhfYnVmLCBpbnQgbGVuKTsKK2ludCB4 YXBlYTAweF9icl9zcGlfd3JpdGUoc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2LCBjb25zdCB2 b2lkICp0eF9idWYsCisJCQkgIGludCBsZW4pOworaW50IHhhcGVhMDB4X2JyX3NwaV93cml0ZV9y ZWFkKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqdHhfYnVmLAorCQkJ ICAgICAgIHZvaWQgKnJ4X2J1ZiwgaW50IGxlbik7CisKKy8qIFNoYXJlZCBTUEkgZnVuY3Rpb24g Ki8KK2ludCB4YXBlYTAweF9zcGlfdHJhbnNmZXIoc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2 LAorCQkJICBjb25zdCB2b2lkICp0eF9idWYsIHZvaWQgKnJ4X2J1ZiwgdTMyIGxlbiwKKwkJCSAg aW50IGNzX2hvbGQsIHUxNiBkZWxheV91c2Vjcyk7CisKKy8qIFNoYXJlZCBUUE0gZnVuY3Rpb25z ICovCitpbnQgeGFwZWEwMHhfdHBtX3BsYXRmb3JtX2luaXRpYWxpemUoc3RydWN0IHhhcGVhMDB4 X2RldmljZSAqZGV2KTsKKworI2VuZGlmIC8qIF9YQVBFQTAwWF9IICovCg==