From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH 19/19] mtd: rawnand: Move JEDEC code to nand_jedec.c Date: Fri, 7 Sep 2018 00:38:51 +0200 Message-ID: <20180906223851.6964-20-boris.brezillon@bootlin.com> References: <20180906223851.6964-1-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180906223851.6964-1-boris.brezillon@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: Boris Brezillon , Richard Weinberger , Miquel Raynal , linux-mtd@lists.infradead.org Cc: Andrew Lunn , Rich Felker , linux-doc@vger.kernel.org, Tony Lindgren , linux-mips@linux-mips.org, Thomas Petazzoni , Robert Jarzmik , Alexander Clouter , devel@driverdev.osuosl.org, Alexander Shiyan , Jonathan Corbet , Gregory CLEMENT , linux-sh@vger.kernel.org, Yoshinori Sato , Marek Vasut , NXP Linux Team , Sebastian Hesselbarth , Jason Cooper , Haojian Zhuang , Krzysztof Halasa , linux-omap@vger.kernel.org, Brian Norris , Ryan Mallon , David Woodhouse List-Id: linux-omap@vger.kernel.org VGhpcyBtb3ZlcyBPTkZJIHJlbGF0ZWQgY29kZSB0byBuYW5kX29uZmkuYyBhbmQgT05GSSByZWxh dGVkCnN0cnVjdC9tYWNyb3MgdG8gaW5jbHVkZS9saW51eC9tdGQvb25maS5oLgoKU2lnbmVkLW9m Zi1ieTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Ci0tLQog ZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgICAgIHwgICAxICsKIGRyaXZlcnMvbXRkL25h bmQvcmF3L2ludGVybmFscy5oICB8ICAgMyArCiBkcml2ZXJzL210ZC9uYW5kL3Jhdy9uYW5kX2Jh c2UuYyAgfCAgOTggKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL210 ZC9uYW5kL3Jhdy9uYW5kX2plZGVjLmMgfCAxMTMgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGluY2x1ZGUvbGludXgvbXRkL2plZGVjLmggICAgICAgICB8ICA5MSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvbXRkL3Jhd25hbmQuaCAg ICAgICB8ICA3OSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAy MTAgaW5zZXJ0aW9ucygrKSwgMTc1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbXRkL25hbmQvcmF3L25hbmRfamVkZWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvbGludXgvbXRkL2plZGVjLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9N YWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlCmluZGV4IGNjOWY1MGYzYWQx Yi4uYmUyYzE3ODYzZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmls ZQorKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZQpAQCAtNTksNiArNTksNyBAQCBv YmotJChDT05GSUdfTVREX05BTkRfVEVHUkEpCQkrPSB0ZWdyYV9uYW5kLm8KIAogbmFuZC1vYmpz IDo9IG5hbmRfYmFzZS5vIG5hbmRfbGVnYWN5Lm8gbmFuZF9iYnQubyBuYW5kX3RpbWluZ3MubyBu YW5kX2lkcy5vCiBuYW5kLW9ianMgKz0gbmFuZF9vbmZpLm8KK25hbmQtb2JqcyArPSBuYW5kX2pl ZGVjLm8KIG5hbmQtb2JqcyArPSBuYW5kX2FtZC5vCiBuYW5kLW9ianMgKz0gbmFuZF9oeW5peC5v CiBuYW5kLW9ianMgKz0gbmFuZF9tYWNyb25peC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9u YW5kL3Jhdy9pbnRlcm5hbHMuaCBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L2ludGVybmFscy5oCmlu ZGV4IDFjZTcyMGE4ZDc1Ni4uODhiNWRhNjIwZTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9u YW5kL3Jhdy9pbnRlcm5hbHMuaAorKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9pbnRlcm5hbHMu aApAQCAtMTA4LDQgKzEwOCw3IEBAIGludCBuYW5kX2xlZ2FjeV9jaGVja19ob29rcyhzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwKTsKIHUxNiBvbmZpX2NyYzE2KHUxNiBjcmMsIHU4IGNvbnN0ICpwLCBz aXplX3QgbGVuKTsKIGludCBuYW5kX29uZmlfZGV0ZWN0KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAp OwogCisvKiBKRURFQyBmdW5jdGlvbnMgKi8KK2ludCBuYW5kX2plZGVjX2RldGVjdChzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwKTsKKwogI2VuZGlmIC8qIF9fTElOVVhfUkFXTkFORF9JTlRFUk5BTFMg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jIGIvZHJpdmVy cy9tdGQvbmFuZC9yYXcvbmFuZF9iYXNlLmMKaW5kZXggODEyZThiZDZhZDgyLi5kYzM5NTVkYTA0 MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jCisrKyBiL2Ry aXZlcnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jCkBAIC00Mzg3LDEwMiArNDM4Nyw2IEBAIHZv aWQgc2FuaXRpemVfc3RyaW5nKHVpbnQ4X3QgKnMsIHNpemVfdCBsZW4pCiAJc3RyaW0ocyk7CiB9 CiAKLS8qCi0gKiBDaGVjayBpZiB0aGUgTkFORCBjaGlwIGlzIEpFREVDIGNvbXBsaWFudCwgcmV0 dXJucyAxIGlmIGl0IGlzLCAwIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBuYW5kX2ZsYXNo X2RldGVjdF9qZWRlYyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtdGRfaW5m byAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Ci0Jc3RydWN0IG5hbmRfamVkZWNfcGFyYW1zICpw OwotCXN0cnVjdCBqZWRlY19lY2NfaW5mbyAqZWNjOwotCWludCBqZWRlY192ZXJzaW9uID0gMDsK LQljaGFyIGlkWzVdOwotCWludCBpLCB2YWwsIHJldDsKLQotCS8qIFRyeSBKRURFQyBmb3IgdW5r bm93biBjaGlwIG9yIExQICovCi0JcmV0ID0gbmFuZF9yZWFkaWRfb3AoY2hpcCwgMHg0MCwgaWQs IHNpemVvZihpZCkpOwotCWlmIChyZXQgfHwgc3RybmNtcChpZCwgIkpFREVDIiwgc2l6ZW9mKGlk KSkpCi0JCXJldHVybiAwOwotCi0JLyogSkVERUMgY2hpcDogYWxsb2NhdGUgYSBidWZmZXIgdG8g aG9sZCBpdHMgcGFyYW1ldGVyIHBhZ2UgKi8KLQlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBf S0VSTkVMKTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0ID0gbmFuZF9yZWFk X3BhcmFtX3BhZ2Vfb3AoY2hpcCwgMHg0MCwgTlVMTCwgMCk7Ci0JaWYgKHJldCkgewotCQlyZXQg PSAwOwotCQlnb3RvIGZyZWVfamVkZWNfcGFyYW1fcGFnZTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBp IDwgMzsgaSsrKSB7Ci0JCXJldCA9IG5hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAsIHNpemVvZigq cCksIHRydWUpOwotCQlpZiAocmV0KSB7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBmcmVlX2plZGVj X3BhcmFtX3BhZ2U7Ci0JCX0KLQotCQlpZiAob25maV9jcmMxNihPTkZJX0NSQ19CQVNFLCAodWlu dDhfdCAqKXAsIDUxMCkgPT0KLQkJCQlsZTE2X3RvX2NwdShwLT5jcmMpKQotCQkJYnJlYWs7Ci0J fQotCi0JaWYgKGkgPT0gMykgewotCQlwcl9lcnIoIkNvdWxkIG5vdCBmaW5kIHZhbGlkIEpFREVD IHBhcmFtZXRlciBwYWdlOyBhYm9ydGluZ1xuIik7Ci0JCWdvdG8gZnJlZV9qZWRlY19wYXJhbV9w YWdlOwotCX0KLQotCS8qIENoZWNrIHZlcnNpb24gKi8KLQl2YWwgPSBsZTE2X3RvX2NwdShwLT5y ZXZpc2lvbik7Ci0JaWYgKHZhbCAmICgxIDw8IDIpKQotCQlqZWRlY192ZXJzaW9uID0gMTA7Ci0J ZWxzZSBpZiAodmFsICYgKDEgPDwgMSkpCi0JCWplZGVjX3ZlcnNpb24gPSAxOyAvKiB2ZW5kb3Ig c3BlY2lmaWMgdmVyc2lvbiAqLwotCi0JaWYgKCFqZWRlY192ZXJzaW9uKSB7Ci0JCXByX2luZm8o InVuc3VwcG9ydGVkIEpFREVDIHZlcnNpb246ICVkXG4iLCB2YWwpOwotCQlnb3RvIGZyZWVfamVk ZWNfcGFyYW1fcGFnZTsKLQl9Ci0KLQlzYW5pdGl6ZV9zdHJpbmcocC0+bWFudWZhY3R1cmVyLCBz aXplb2YocC0+bWFudWZhY3R1cmVyKSk7Ci0Jc2FuaXRpemVfc3RyaW5nKHAtPm1vZGVsLCBzaXpl b2YocC0+bW9kZWwpKTsKLQljaGlwLT5wYXJhbWV0ZXJzLm1vZGVsID0ga3N0cmR1cChwLT5tb2Rl bCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGlwLT5wYXJhbWV0ZXJzLm1vZGVsKSB7Ci0JCXJldCA9 IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9qZWRlY19wYXJhbV9wYWdlOwotCX0KLQotCW10ZC0+d3Jp dGVzaXplID0gbGUzMl90b19jcHUocC0+Ynl0ZV9wZXJfcGFnZSk7Ci0KLQkvKiBQbGVhc2UgcmVm ZXJlbmNlIHRvIHRoZSBjb21tZW50IGZvciBuYW5kX2ZsYXNoX2RldGVjdF9vbmZpLiAqLwotCW10 ZC0+ZXJhc2VzaXplID0gMSA8PCAoZmxzKGxlMzJfdG9fY3B1KHAtPnBhZ2VzX3Blcl9ibG9jaykp IC0gMSk7Ci0JbXRkLT5lcmFzZXNpemUgKj0gbXRkLT53cml0ZXNpemU7Ci0KLQltdGQtPm9vYnNp emUgPSBsZTE2X3RvX2NwdShwLT5zcGFyZV9ieXRlc19wZXJfcGFnZSk7Ci0KLQkvKiBQbGVhc2Ug cmVmZXJlbmNlIHRvIHRoZSBjb21tZW50IGZvciBuYW5kX2ZsYXNoX2RldGVjdF9vbmZpLiAqLwot CWNoaXAtPmNoaXBzaXplID0gMSA8PCAoZmxzKGxlMzJfdG9fY3B1KHAtPmJsb2Nrc19wZXJfbHVu KSkgLSAxKTsKLQljaGlwLT5jaGlwc2l6ZSAqPSAodWludDY0X3QpbXRkLT5lcmFzZXNpemUgKiBw LT5sdW5fY291bnQ7Ci0JY2hpcC0+Yml0c19wZXJfY2VsbCA9IHAtPmJpdHNfcGVyX2NlbGw7Ci0K LQlpZiAobGUxNl90b19jcHUocC0+ZmVhdHVyZXMpICYgSkVERUNfRkVBVFVSRV8xNl9CSVRfQlVT KQotCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7Ci0KLQkvKiBFQ0MgaW5mbyAq LwotCWVjYyA9ICZwLT5lY2NfaW5mb1swXTsKLQotCWlmIChlY2MtPmNvZGV3b3JkX3NpemUgPj0g OSkgewotCQljaGlwLT5lY2Nfc3RyZW5ndGhfZHMgPSBlY2MtPmVjY19iaXRzOwotCQljaGlwLT5l Y2Nfc3RlcF9kcyA9IDEgPDwgZWNjLT5jb2Rld29yZF9zaXplOwotCX0gZWxzZSB7Ci0JCXByX3dh cm4oIkludmFsaWQgY29kZXdvcmQgc2l6ZVxuIik7Ci0JfQotCi1mcmVlX2plZGVjX3BhcmFtX3Bh Z2U6Ci0Ja2ZyZWUocCk7Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIG5hbmRfaWRfaGFzX3Bl cmlvZCAtIENoZWNrIGlmIGFuIElEIHN0cmluZyBoYXMgYSBnaXZlbiB3cmFwYXJvdW5kIHBlcmlv ZAogICogQGlkX2RhdGE6IHRoZSBJRCBzdHJpbmcKQEAgLTQ3OTUsNyArNDY5OSw3IEBAIHN0YXRp YyBpbnQgbmFuZF9kZXRlY3Qoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgc3RydWN0IG5hbmRfZmxh c2hfZGV2ICp0eXBlKQogCQkJZ290byBpZGVudF9kb25lOwogCiAJCS8qIENoZWNrIGlmIHRoZSBj aGlwIGlzIEpFREVDIGNvbXBsaWFudCAqLwotCQlyZXQgPSBuYW5kX2ZsYXNoX2RldGVjdF9qZWRl YyhjaGlwKTsKKwkJcmV0ID0gbmFuZF9qZWRlY19kZXRlY3QoY2hpcCk7CiAJCWlmIChyZXQgPCAw KQogCQkJcmV0dXJuIHJldDsKIAkJZWxzZSBpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9t dGQvbmFuZC9yYXcvbmFuZF9qZWRlYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbmFuZF9qZWRl Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWMyNjQ5MmM4NDFk Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbmFuZF9qZWRlYy5jCkBA IC0wLDAgKzEsMTEzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoK KyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGls dXRlZC5jb20pCisgKgkJICAyMDAyLTIwMDYgVGhvbWFzIEdsZWl4bmVyICh0Z2x4QGxpbnV0cm9u aXguZGUpCisgKgorICogIENyZWRpdHM6CisgKglEYXZpZCBXb29kaG91c2UgZm9yIGFkZGluZyBt dWx0aWNoaXAgc3VwcG9ydAorICoKKyAqCUFsZXBoIE9uZSBMdGQuIGFuZCBUb2J5IENodXJjaGls bCBMdGQuIGZvciBzdXBwb3J0aW5nIHRoZQorICoJcmV3b3JrIGZvciAySyBwYWdlIHNpemUgY2hp cHMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIE9ORkkgaGVscGVycy4KKyAqLworCisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWxzLmgiCisKKy8qCisg KiBDaGVjayBpZiB0aGUgTkFORCBjaGlwIGlzIEpFREVDIGNvbXBsaWFudCwgcmV0dXJucyAxIGlm IGl0IGlzLCAwIG90aGVyd2lzZS4KKyAqLworaW50IG5hbmRfamVkZWNfZGV0ZWN0KHN0cnVjdCBu YW5kX2NoaXAgKmNoaXApCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChj aGlwKTsKKwlzdHJ1Y3QgbmFuZF9qZWRlY19wYXJhbXMgKnA7CisJc3RydWN0IGplZGVjX2VjY19p bmZvICplY2M7CisJaW50IGplZGVjX3ZlcnNpb24gPSAwOworCWNoYXIgaWRbNV07CisJaW50IGks IHZhbCwgcmV0OworCisJLyogVHJ5IEpFREVDIGZvciB1bmtub3duIGNoaXAgb3IgTFAgKi8KKwly ZXQgPSBuYW5kX3JlYWRpZF9vcChjaGlwLCAweDQwLCBpZCwgc2l6ZW9mKGlkKSk7CisJaWYgKHJl dCB8fCBzdHJuY21wKGlkLCAiSkVERUMiLCBzaXplb2YoaWQpKSkKKwkJcmV0dXJuIDA7CisKKwkv KiBKRURFQyBjaGlwOiBhbGxvY2F0ZSBhIGJ1ZmZlciB0byBob2xkIGl0cyBwYXJhbWV0ZXIgcGFn ZSAqLworCXAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCWlmICghcCkKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBuYW5kX3JlYWRfcGFyYW1fcGFnZV9vcChjaGlwLCAw eDQwLCBOVUxMLCAwKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IDA7CisJCWdvdG8gZnJlZV9qZWRl Y19wYXJhbV9wYWdlOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcmV0ID0g bmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgcCwgc2l6ZW9mKCpwKSwgdHJ1ZSk7CisJCWlmIChyZXQp IHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGZyZWVfamVkZWNfcGFyYW1fcGFnZTsKKwkJfQorCisJ CWlmIChvbmZpX2NyYzE2KE9ORklfQ1JDX0JBU0UsICh1aW50OF90ICopcCwgNTEwKSA9PQorCQkJ CWxlMTZfdG9fY3B1KHAtPmNyYykpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSAzKSB7CisJ CXByX2VycigiQ291bGQgbm90IGZpbmQgdmFsaWQgSkVERUMgcGFyYW1ldGVyIHBhZ2U7IGFib3J0 aW5nXG4iKTsKKwkJZ290byBmcmVlX2plZGVjX3BhcmFtX3BhZ2U7CisJfQorCisJLyogQ2hlY2sg dmVyc2lvbiAqLworCXZhbCA9IGxlMTZfdG9fY3B1KHAtPnJldmlzaW9uKTsKKwlpZiAodmFsICYg KDEgPDwgMikpCisJCWplZGVjX3ZlcnNpb24gPSAxMDsKKwllbHNlIGlmICh2YWwgJiAoMSA8PCAx KSkKKwkJamVkZWNfdmVyc2lvbiA9IDE7IC8qIHZlbmRvciBzcGVjaWZpYyB2ZXJzaW9uICovCisK KwlpZiAoIWplZGVjX3ZlcnNpb24pIHsKKwkJcHJfaW5mbygidW5zdXBwb3J0ZWQgSkVERUMgdmVy c2lvbjogJWRcbiIsIHZhbCk7CisJCWdvdG8gZnJlZV9qZWRlY19wYXJhbV9wYWdlOworCX0KKwor CXNhbml0aXplX3N0cmluZyhwLT5tYW51ZmFjdHVyZXIsIHNpemVvZihwLT5tYW51ZmFjdHVyZXIp KTsKKwlzYW5pdGl6ZV9zdHJpbmcocC0+bW9kZWwsIHNpemVvZihwLT5tb2RlbCkpOworCWNoaXAt PnBhcmFtZXRlcnMubW9kZWwgPSBrc3RyZHVwKHAtPm1vZGVsLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWNoaXAtPnBhcmFtZXRlcnMubW9kZWwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVl X2plZGVjX3BhcmFtX3BhZ2U7CisJfQorCisJbXRkLT53cml0ZXNpemUgPSBsZTMyX3RvX2NwdShw LT5ieXRlX3Blcl9wYWdlKTsKKworCS8qIFBsZWFzZSByZWZlcmVuY2UgdG8gdGhlIGNvbW1lbnQg Zm9yIG5hbmRfZmxhc2hfZGV0ZWN0X29uZmkuICovCisJbXRkLT5lcmFzZXNpemUgPSAxIDw8IChm bHMobGUzMl90b19jcHUocC0+cGFnZXNfcGVyX2Jsb2NrKSkgLSAxKTsKKwltdGQtPmVyYXNlc2l6 ZSAqPSBtdGQtPndyaXRlc2l6ZTsKKworCW10ZC0+b29ic2l6ZSA9IGxlMTZfdG9fY3B1KHAtPnNw YXJlX2J5dGVzX3Blcl9wYWdlKTsKKworCS8qIFBsZWFzZSByZWZlcmVuY2UgdG8gdGhlIGNvbW1l bnQgZm9yIG5hbmRfZmxhc2hfZGV0ZWN0X29uZmkuICovCisJY2hpcC0+Y2hpcHNpemUgPSAxIDw8 IChmbHMobGUzMl90b19jcHUocC0+YmxvY2tzX3Blcl9sdW4pKSAtIDEpOworCWNoaXAtPmNoaXBz aXplICo9ICh1aW50NjRfdCltdGQtPmVyYXNlc2l6ZSAqIHAtPmx1bl9jb3VudDsKKwljaGlwLT5i aXRzX3Blcl9jZWxsID0gcC0+Yml0c19wZXJfY2VsbDsKKworCWlmIChsZTE2X3RvX2NwdShwLT5m ZWF0dXJlcykgJiBKRURFQ19GRUFUVVJFXzE2X0JJVF9CVVMpCisJCWNoaXAtPm9wdGlvbnMgfD0g TkFORF9CVVNXSURUSF8xNjsKKworCS8qIEVDQyBpbmZvICovCisJZWNjID0gJnAtPmVjY19pbmZv WzBdOworCisJaWYgKGVjYy0+Y29kZXdvcmRfc2l6ZSA+PSA5KSB7CisJCWNoaXAtPmVjY19zdHJl bmd0aF9kcyA9IGVjYy0+ZWNjX2JpdHM7CisJCWNoaXAtPmVjY19zdGVwX2RzID0gMSA8PCBlY2Mt PmNvZGV3b3JkX3NpemU7CisJfSBlbHNlIHsKKwkJcHJfd2FybigiSW52YWxpZCBjb2Rld29yZCBz aXplXG4iKTsKKwl9CisKK2ZyZWVfamVkZWNfcGFyYW1fcGFnZToKKwlrZnJlZShwKTsKKwlyZXR1 cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvamVkZWMuaCBiL2luY2x1 ZGUvbGludXgvbXRkL2plZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4wYjZiNTlmN2NmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9q ZWRlYy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMDAtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3 bXcyQGluZnJhZGVhZC5vcmc+CisgKgkJCSBTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlk aWx1dGVkLmNvbT4KKyAqCQkJIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgor ICoKKyAqIENvbnRhaW5zIGFsbCBKRURFQyByZWxhdGVkIGRlZmluaXRpb25zCisgKi8KKworI2lm bmRlZiBfX0xJTlVYX01URF9KRURFQ19ICisjZGVmaW5lIF9fTElOVVhfTVREX0pFREVDX0gKKwor c3RydWN0IGplZGVjX2VjY19pbmZvIHsKKwl1OCBlY2NfYml0czsKKwl1OCBjb2Rld29yZF9zaXpl OworCV9fbGUxNiBiYl9wZXJfbHVuOworCV9fbGUxNiBibG9ja19lbmR1cmFuY2U7CisJdTggcmVz ZXJ2ZWRbMl07Cit9IF9fcGFja2VkOworCisvKiBKRURFQyBmZWF0dXJlcyAqLworI2RlZmluZSBK RURFQ19GRUFUVVJFXzE2X0JJVF9CVVMJKDEgPDwgMCkKKworc3RydWN0IG5hbmRfamVkZWNfcGFy YW1zIHsKKwkvKiByZXYgaW5mbyBhbmQgZmVhdHVyZXMgYmxvY2sgKi8KKwkvKiAnSicgJ0UnICdT JyAnRCcgICovCisJdTggc2lnWzRdOworCV9fbGUxNiByZXZpc2lvbjsKKwlfX2xlMTYgZmVhdHVy ZXM7CisJdTggb3B0X2NtZFszXTsKKwlfX2xlMTYgc2VjX2NtZDsKKwl1OCBudW1fb2ZfcGFyYW1f cGFnZXM7CisJdTggcmVzZXJ2ZWQwWzE4XTsKKworCS8qIG1hbnVmYWN0dXJlciBpbmZvcm1hdGlv biBibG9jayAqLworCWNoYXIgbWFudWZhY3R1cmVyWzEyXTsKKwljaGFyIG1vZGVsWzIwXTsKKwl1 OCBqZWRlY19pZFs2XTsKKwl1OCByZXNlcnZlZDFbMTBdOworCisJLyogbWVtb3J5IG9yZ2FuaXph dGlvbiBibG9jayAqLworCV9fbGUzMiBieXRlX3Blcl9wYWdlOworCV9fbGUxNiBzcGFyZV9ieXRl c19wZXJfcGFnZTsKKwl1OCByZXNlcnZlZDJbNl07CisJX19sZTMyIHBhZ2VzX3Blcl9ibG9jazsK KwlfX2xlMzIgYmxvY2tzX3Blcl9sdW47CisJdTggbHVuX2NvdW50OworCXU4IGFkZHJfY3ljbGVz OworCXU4IGJpdHNfcGVyX2NlbGw7CisJdTggcHJvZ3JhbXNfcGVyX3BhZ2U7CisJdTggbXVsdGlf cGxhbmVfYWRkcjsKKwl1OCBtdWx0aV9wbGFuZV9vcF9hdHRyOworCXU4IHJlc2VydmVkM1szOF07 CisKKwkvKiBlbGVjdHJpY2FsIHBhcmFtZXRlciBibG9jayAqLworCV9fbGUxNiBhc3luY19zZHJf c3BlZWRfZ3JhZGU7CisJX19sZTE2IHRvZ2dsZV9kZHJfc3BlZWRfZ3JhZGU7CisJX19sZTE2IHN5 bmNfZGRyX3NwZWVkX2dyYWRlOworCXU4IGFzeW5jX3Nkcl9mZWF0dXJlczsKKwl1OCB0b2dnbGVf ZGRyX2ZlYXR1cmVzOworCXU4IHN5bmNfZGRyX2ZlYXR1cmVzOworCV9fbGUxNiB0X3Byb2c7CisJ X19sZTE2IHRfYmVyczsKKwlfX2xlMTYgdF9yOworCV9fbGUxNiB0X3JfbXVsdGlfcGxhbmU7CisJ X19sZTE2IHRfY2NzOworCV9fbGUxNiBpb19waW5fY2FwYWNpdGFuY2VfdHlwOworCV9fbGUxNiBp bnB1dF9waW5fY2FwYWNpdGFuY2VfdHlwOworCV9fbGUxNiBjbGtfcGluX2NhcGFjaXRhbmNlX3R5 cDsKKwl1OCBkcml2ZXJfc3RyZW5ndGhfc3VwcG9ydDsKKwlfX2xlMTYgdF9hZGw7CisJdTggcmVz ZXJ2ZWQ0WzM2XTsKKworCS8qIEVDQyBhbmQgZW5kdXJhbmNlIGJsb2NrICovCisJdTggZ3VhcmFu dGVlZF9nb29kX2Jsb2NrczsKKwlfX2xlMTYgZ3VhcmFudGVlZF9ibG9ja19lbmR1cmFuY2U7CisJ c3RydWN0IGplZGVjX2VjY19pbmZvIGVjY19pbmZvWzRdOworCXU4IHJlc2VydmVkNVsyOV07CisK KwkvKiByZXNlcnZlZCAqLworCXU4IHJlc2VydmVkNlsxNDhdOworCisJLyogdmVuZG9yICovCisJ X19sZTE2IHZlbmRvcl9yZXZfbnVtOworCXU4IHJlc2VydmVkN1s4OF07CisKKwkvKiBDUkMgZm9y IFBhcmFtZXRlciBQYWdlICovCisJX19sZTE2IGNyYzsKK30gX19wYWNrZWQ7CisKKyNlbmRpZiAv KiBfX0xJTlVYX01URF9KRURFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9y YXduYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9yYXduYW5kLmgKaW5kZXggZjRmYzBjY2U3YzU1 Li42OGQwOWUwMWZhNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3Jhd25hbmQuaAor KysgYi9pbmNsdWRlL2xpbnV4L210ZC9yYXduYW5kLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNs dWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgog I2luY2x1ZGUgPGxpbnV4L210ZC9iYm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvamVkZWMuaD4K ICNpbmNsdWRlIDxsaW51eC9tdGQvb25maS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTIwNSw4NCArMjA2LDYgQEAgZW51bSBuYW5kX2VjY19h bGdvIHsKICNkZWZpbmUgTkFORF9DSV9DRUxMVFlQRV9NU0sJMHgwQwogI2RlZmluZSBOQU5EX0NJ X0NFTExUWVBFX1NISUZUCTIKIAotc3RydWN0IGplZGVjX2VjY19pbmZvIHsKLQl1OCBlY2NfYml0 czsKLQl1OCBjb2Rld29yZF9zaXplOwotCV9fbGUxNiBiYl9wZXJfbHVuOwotCV9fbGUxNiBibG9j a19lbmR1cmFuY2U7Ci0JdTggcmVzZXJ2ZWRbMl07Ci19IF9fcGFja2VkOwotCi0vKiBKRURFQyBm ZWF0dXJlcyAqLwotI2RlZmluZSBKRURFQ19GRUFUVVJFXzE2X0JJVF9CVVMJKDEgPDwgMCkKLQot c3RydWN0IG5hbmRfamVkZWNfcGFyYW1zIHsKLQkvKiByZXYgaW5mbyBhbmQgZmVhdHVyZXMgYmxv Y2sgKi8KLQkvKiAnSicgJ0UnICdTJyAnRCcgICovCi0JdTggc2lnWzRdOwotCV9fbGUxNiByZXZp c2lvbjsKLQlfX2xlMTYgZmVhdHVyZXM7Ci0JdTggb3B0X2NtZFszXTsKLQlfX2xlMTYgc2VjX2Nt ZDsKLQl1OCBudW1fb2ZfcGFyYW1fcGFnZXM7Ci0JdTggcmVzZXJ2ZWQwWzE4XTsKLQotCS8qIG1h bnVmYWN0dXJlciBpbmZvcm1hdGlvbiBibG9jayAqLwotCWNoYXIgbWFudWZhY3R1cmVyWzEyXTsK LQljaGFyIG1vZGVsWzIwXTsKLQl1OCBqZWRlY19pZFs2XTsKLQl1OCByZXNlcnZlZDFbMTBdOwot Ci0JLyogbWVtb3J5IG9yZ2FuaXphdGlvbiBibG9jayAqLwotCV9fbGUzMiBieXRlX3Blcl9wYWdl OwotCV9fbGUxNiBzcGFyZV9ieXRlc19wZXJfcGFnZTsKLQl1OCByZXNlcnZlZDJbNl07Ci0JX19s ZTMyIHBhZ2VzX3Blcl9ibG9jazsKLQlfX2xlMzIgYmxvY2tzX3Blcl9sdW47Ci0JdTggbHVuX2Nv dW50OwotCXU4IGFkZHJfY3ljbGVzOwotCXU4IGJpdHNfcGVyX2NlbGw7Ci0JdTggcHJvZ3JhbXNf cGVyX3BhZ2U7Ci0JdTggbXVsdGlfcGxhbmVfYWRkcjsKLQl1OCBtdWx0aV9wbGFuZV9vcF9hdHRy OwotCXU4IHJlc2VydmVkM1szOF07Ci0KLQkvKiBlbGVjdHJpY2FsIHBhcmFtZXRlciBibG9jayAq LwotCV9fbGUxNiBhc3luY19zZHJfc3BlZWRfZ3JhZGU7Ci0JX19sZTE2IHRvZ2dsZV9kZHJfc3Bl ZWRfZ3JhZGU7Ci0JX19sZTE2IHN5bmNfZGRyX3NwZWVkX2dyYWRlOwotCXU4IGFzeW5jX3Nkcl9m ZWF0dXJlczsKLQl1OCB0b2dnbGVfZGRyX2ZlYXR1cmVzOwotCXU4IHN5bmNfZGRyX2ZlYXR1cmVz OwotCV9fbGUxNiB0X3Byb2c7Ci0JX19sZTE2IHRfYmVyczsKLQlfX2xlMTYgdF9yOwotCV9fbGUx NiB0X3JfbXVsdGlfcGxhbmU7Ci0JX19sZTE2IHRfY2NzOwotCV9fbGUxNiBpb19waW5fY2FwYWNp dGFuY2VfdHlwOwotCV9fbGUxNiBpbnB1dF9waW5fY2FwYWNpdGFuY2VfdHlwOwotCV9fbGUxNiBj bGtfcGluX2NhcGFjaXRhbmNlX3R5cDsKLQl1OCBkcml2ZXJfc3RyZW5ndGhfc3VwcG9ydDsKLQlf X2xlMTYgdF9hZGw7Ci0JdTggcmVzZXJ2ZWQ0WzM2XTsKLQotCS8qIEVDQyBhbmQgZW5kdXJhbmNl IGJsb2NrICovCi0JdTggZ3VhcmFudGVlZF9nb29kX2Jsb2NrczsKLQlfX2xlMTYgZ3VhcmFudGVl ZF9ibG9ja19lbmR1cmFuY2U7Ci0Jc3RydWN0IGplZGVjX2VjY19pbmZvIGVjY19pbmZvWzRdOwot CXU4IHJlc2VydmVkNVsyOV07Ci0KLQkvKiByZXNlcnZlZCAqLwotCXU4IHJlc2VydmVkNlsxNDhd OwotCi0JLyogdmVuZG9yICovCi0JX19sZTE2IHZlbmRvcl9yZXZfbnVtOwotCXU4IHJlc2VydmVk N1s4OF07Ci0KLQkvKiBDUkMgZm9yIFBhcmFtZXRlciBQYWdlICovCi0JX19sZTE2IGNyYzsKLX0g X19wYWNrZWQ7Ci0KIC8qKgogICogc3RydWN0IG5hbmRfcGFyYW1ldGVycyAtIE5BTkQgZ2VuZXJp YyBwYXJhbWV0ZXJzIGZyb20gdGhlIHBhcmFtZXRlciBwYWdlCiAgKiBAbW9kZWw6IE1vZGVsIG5h bWUKLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZGV2ZWwgbWFpbGluZyBsaXN0CmRldmVsQGxpbnV4ZHJpdmVycHJvamVjdC5vcmcKaHR0 cDovL2RyaXZlcmRldi5saW51eGRyaXZlcnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vZHJp dmVyZGV2LWRldmVsCg==