From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [PATCH v3 3/7] drm/sun4i: Add Allwinner A31 MIPI-DSI controller support Date: Tue, 6 Mar 2018 14:56:00 +0100 Message-ID: <50e3b73fcd1d2ef6be8ccbcefc91f9779c5a8382.1520344489.git-series.maxime.ripard@bootlin.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: In-Reply-To: References: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding , Chen-Yu Tsai , Maxime Ripard , Mark Rutland , Rob Herring Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Thomas Petazzoni , Daniel Vetter , Maxime Ripard , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org RnJvbTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CgpN b3N0IG9mIHRoZSBBbGx3aW5uZXIgU29DcyBzaW5jZSB0aGUgQTMxIHNoYXJlIHRoZSBzYW1lIE1J UEktRFNJCmNvbnRyb2xsZXIuCgpXaGlsZSB0aGF0IGNvbnRyb2xsZXIgaXMgbW9zdGx5IHVuZG9j dW1lbnRlZCwgdGhlIGNvZGUgaXMgb3V0IHRoZXJlIGFuZCBoYXMKYmVlbiBjbGVhbmVkIHVwIGlu IG9yZGVyIHRvIGJlIGludGVncmF0ZWQgaW50byBEUk0uIEhvd2V2ZXIsIHRoZXJlJ3Mgc3RpbGwK c29tZSBkYXJrIGFyZWFzIHRoYXQgYXJlIGEgYml0IHVuY2xlYXIgYWJvdXQgaG93IHRoZSBibG9j ayBleGFjdGx5Cm9wZXJhdGVzLgoKU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4aW1l LnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3N1bjRpL0tj b25maWcgICAgICAgICAgIHwgICAxMCArLQogZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxl ICAgICAgICAgIHwgICAgNCArLQogZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24uYyAg ICAgIHwgIDEwMiArKy0KIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29uLmggICAgICB8 ICAgNDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9taXBpX2RwaHkuYyB8ICAyOTcg KysrKysrLQogZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21pcGlfZHNpLmMgIHwgMTExMSAr KysrKysrKysrKysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlfbWlw aV9kc2kuaCAgfCAgIDY3ICstCiA3IGZpbGVzIGNoYW5nZWQsIDE2MzMgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9taXBpX2RwaHku YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9taXBpX2Rz aS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21pcGlf ZHNpLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9zdW40aS9LY29uZmlnCmluZGV4IDg4MmQ4NWRiOTA1My4uOTgyZGIxMTZhNjU4 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvS2NvbmZpZworKysgYi9kcml2ZXJz L2dwdS9kcm0vc3VuNGkvS2NvbmZpZwpAQCAtNDAsNiArNDAsMTYgQEAgY29uZmlnIERSTV9TVU40 SV9CQUNLRU5ECiAJICBkbyBzb21lIGFscGhhIGJsZW5kaW5nIGFuZCBmZWVkIGdyYXBoaWNzIHRv IFRDT04uIElmIE0gaXMKIAkgIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3Vu NGktYmFja2VuZC4KIAorY29uZmlnIERSTV9TVU42SV9EU0kKKwl0cmlzdGF0ZSAiQWxsd2lubmVy IEEzMSBNSVBJLURTSSBDb250cm9sbGVyIFN1cHBvcnQiCisJZGVmYXVsdCBNQUNIX1NVTjhJCisJ c2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwloZWxwCisJICBDaG9vc2Ug dGhpcyBvcHRpb24gaWYgeW91IHdhbnQgaGF2ZSBhbiBBbGx3aW5uZXIgU29DIHdpdGgKKwkgIE1J UEktRFNJIHN1cHBvcnQuIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxl ZAorCSAgc3VuNmktZHNpCisKIGNvbmZpZyBEUk1fU1VOOElfTUlYRVIKIAl0cmlzdGF0ZSAiU3Vw cG9ydCBmb3IgQWxsd2lubmVyIERpc3BsYXkgRW5naW5lIDIuMCBNaXhlciIKIAlkZWZhdWx0IE1B Q0hfU1VOOEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZQppbmRleCAyYjM3YTZhYmJiMWQuLjg0ZDhlZDg1 ZTBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZQpAQCAtMTksNiArMTksOSBAQCBzdW40aS10Y29u LXkJCQkrPSBzdW40aV9sdmRzLm8KIHN1bjRpLXRjb24teQkJCSs9IHN1bjRpX3Rjb24ubwogc3Vu NGktdGNvbi15CQkJKz0gc3VuNGlfcmdiLm8KIAorc3VuNmktZHNpLXkJCQkrPSBzdW42aV9taXBp X2RwaHkubworc3VuNmktZHNpLXkJCQkrPSBzdW42aV9taXBpX2RzaS5vCisKIG9iai0kKENPTkZJ R19EUk1fU1VONEkpCQkrPSBzdW40aS1kcm0ubwogb2JqLSQoQ09ORklHX0RSTV9TVU40SSkJCSs9 IHN1bjRpLXRjb24ubwogb2JqLSQoQ09ORklHX0RSTV9TVU40SSkJCSs9IHN1bjRpX3R2Lm8KQEAg LTI2LDQgKzI5LDUgQEAgb2JqLSQoQ09ORklHX0RSTV9TVU40SSkJCSs9IHN1bjZpX2RyYy5vCiAK IG9iai0kKENPTkZJR19EUk1fU1VONElfQkFDS0VORCkJKz0gc3VuNGktYmFja2VuZC5vCiBvYmot JChDT05GSUdfRFJNX1NVTjRJX0hETUkpCSs9IHN1bjRpLWRybS1oZG1pLm8KK29iai0kKENPTkZJ R19EUk1fU1VONklfRFNJKQkrPSBzdW42aS1kc2kubwogb2JqLSQoQ09ORklHX0RSTV9TVU44SV9N SVhFUikJKz0gc3VuOGktbWl4ZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRp L3N1bjRpX3Rjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29uLmMKaW5kZXgg N2U1MTM0YmZiMDI4Li43MmYzN2ZhZWMxODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9z dW40aS9zdW40aV90Y29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24u YwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgInN1bjRpX2x2ZHMuaCIKICNpbmNsdWRlICJz dW40aV9yZ2IuaCIKICNpbmNsdWRlICJzdW40aV90Y29uLmgiCisjaW5jbHVkZSAic3VuNmlfbWlw aV9kc2kuaCIKICNpbmNsdWRlICJzdW54aV9lbmdpbmUuaCIKIAogc3RhdGljIHN0cnVjdCBkcm1f Y29ubmVjdG9yICpzdW40aV90Y29uX2dldF9jb25uZWN0b3IoY29uc3Qgc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQpAQCAtMTY0LDYgKzE2NSw3IEBAIHZvaWQgc3VuNGlfdGNvbl9zZXRfc3Rh dHVzKHN0cnVjdCBzdW40aV90Y29uICp0Y29uLAogCWNhc2UgRFJNX01PREVfRU5DT0RFUl9MVkRT OgogCQlpc19sdmRzID0gdHJ1ZTsKIAkJLyogRmFsbHRocm91Z2ggKi8KKwljYXNlIERSTV9NT0RF X0VOQ09ERVJfRFNJOgogCWNhc2UgRFJNX01PREVfRU5DT0RFUl9OT05FOgogCQljaGFubmVsID0g MDsKIAkJYnJlYWs7CkBAIC0yNTcsNiArMjU5LDI5IEBAIHN0YXRpYyBpbnQgc3VuNGlfdGNvbl9n ZXRfY2xrX2RlbGF5KGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCXJldHVy biBkZWxheTsKIH0KIAorc3RhdGljIHZvaWQgc3VuNGlfdGNvbjBfZnJhbWVfY29udHJvbF9lbmFi bGUoc3RydWN0IHN1bjRpX3Rjb24gKnRjb24pCit7CisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3Ms IFNVTjRJX1RDT05fRlJNX1NFRURfUFJfUkVHLCAxKTsKKwlyZWdtYXBfd3JpdGUodGNvbi0+cmVn cywgU1VONElfVENPTl9GUk1fU0VFRF9QR19SRUcsIDMpOworCXJlZ21hcF93cml0ZSh0Y29uLT5y ZWdzLCBTVU40SV9UQ09OX0ZSTV9TRUVEX1BCX1JFRywgNSk7CisJcmVnbWFwX3dyaXRlKHRjb24t PnJlZ3MsIFNVTjRJX1RDT05fRlJNX1NFRURfTFJfUkVHLCA3KTsKKwlyZWdtYXBfd3JpdGUodGNv bi0+cmVncywgU1VONElfVENPTl9GUk1fU0VFRF9MR19SRUcsIDExKTsKKwlyZWdtYXBfd3JpdGUo dGNvbi0+cmVncywgU1VONElfVENPTl9GUk1fU0VFRF9MQl9SRUcsIDEzKTsKKworCXJlZ21hcF93 cml0ZSh0Y29uLT5yZWdzLCBTVU40SV9UQ09OX0ZSTV9UQkwwX1JFRywgMHgwMTAxMDAwMCk7CisJ cmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT05fRlJNX1RCTDFfUkVHLCAweDE1MTUx MTExKTsKKwlyZWdtYXBfd3JpdGUodGNvbi0+cmVncywgU1VONElfVENPTl9GUk1fVEJMMl9SRUcs IDB4NTc1NzU1NTUpOworCXJlZ21hcF93cml0ZSh0Y29uLT5yZWdzLCBTVU40SV9UQ09OX0ZSTV9U QkwzX1JFRywgMHg3ZjdmNzc3Nyk7CisKKwkvKgorCSAqIEZJWE1FOiBUaGlzIHNlZW1zIHRvIG9u bHkgYmUgdGhlIGNhc2UgZm9yIFJHQjY2NiwgYnV0IGl0J3MKKwkgKiBub3QgY2xlYXIgd2hlbiB0 aGUgVENPTiBzaG91bGQgYmUgc2V0dXAgdG8gc29tZXRoaW5nCisJICogZGlmZmVyZW50CisJICov CisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT05fRlJNX0NUTF9SRUcsCisJCSAg ICAgU1VONElfVENPTl9GUk1fQ1RMX0VOKTsKK30KKwogc3RhdGljIHZvaWQgc3VuNGlfdGNvbjBf bW9kZV9zZXRfY29tbW9uKHN0cnVjdCBzdW40aV90Y29uICp0Y29uLAogCQkJCQljb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKQEAgLTI2OSw2ICsyOTQsNzMgQEAgc3RhdGlj IHZvaWQgc3VuNGlfdGNvbjBfbW9kZV9zZXRfY29tbW9uKHN0cnVjdCBzdW40aV90Y29uICp0Y29u LAogCQkgICAgIFNVTjRJX1RDT04wX0JBU0lDMF9ZKG1vZGUtPmNydGNfdmRpc3BsYXkpKTsKIH0K IAorc3RhdGljIHZvaWQgc3VuNGlfdGNvbjBfbW9kZV9zZXRfY3B1KHN0cnVjdCBzdW40aV90Y29u ICp0Y29uLAorCQkJCSAgICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlLAorCQkJCSAg ICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdTggYnBwID0gbWlw aV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkZXZpY2UtPmZvcm1hdCk7CisJdTggbGFuZXMgPSBk ZXZpY2UtPmxhbmVzOworCXUzMiBibG9ja19zcGFjZSwgc3RhcnRfZGVsYXk7CisJdTMyIHRjb25f ZGl2OworCisJdGNvbi0+ZGNsa19taW5fZGl2ID0gNDsKKwl0Y29uLT5kY2xrX21heF9kaXYgPSAx Mjc7CisKKwlzdW40aV90Y29uMF9tb2RlX3NldF9jb21tb24odGNvbiwgbW9kZSk7CisKKwlyZWdt YXBfdXBkYXRlX2JpdHModGNvbi0+cmVncywgU1VONElfVENPTjBfQ1RMX1JFRywKKwkJCSAgIFNV TjRJX1RDT04wX0NUTF9JRl9NQVNLLAorCQkJICAgU1VONElfVENPTjBfQ1RMX0lGXzgwODApOwor CisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT05fRUNDX0ZJRk9fUkVHLAorCQkg ICAgIFNVTjRJX1RDT05fRUNDX0ZJRk9fRU4pOworCisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3Ms IFNVTjRJX1RDT04wX0NQVV9JRl9SRUcsCisJCSAgICAgU1VONElfVENPTjBfQ1BVX0lGX01PREVf RFNJIHwKKwkJICAgICBTVU40SV9UQ09OMF9DUFVfSUZfVFJJX0ZJRk9fRkxVU0ggfAorCQkgICAg IFNVTjRJX1RDT04wX0NQVV9JRl9UUklfRklGT19FTiB8CisJCSAgICAgU1VONElfVENPTjBfQ1BV X0lGX1RSSV9FTik7CisKKwkvKgorCSAqIFRoaXMgbG9va3Mgc3VzcGljaW91cywgYnV0IGl0IHdv cmtzLi4uCisJICoKKwkgKiBUaGUgZGF0YXNoZWV0IHNheXMgdGhhdCB0aGlzIHNob3VsZCBiZSBz ZXQgaGlnaGVyIHRoYW4gMjAgKgorCSAqIHBpeGVsIGN5Y2xlLCBidXQgaXQncyBub3QgY2xlYXIg d2hhdCBhIHBpeGVsIGN5Y2xlIGlzLgorCSAqLworCXJlZ21hcF9yZWFkKHRjb24tPnJlZ3MsIFNV TjRJX1RDT04wX0RDTEtfUkVHLCAmdGNvbl9kaXYpOworCXRjb25fZGl2ICY9IEdFTk1BU0soNiwg MCk7CisJYmxvY2tfc3BhY2UgPSBtb2RlLT5odG90YWwgKiBicHAgLyAodGNvbl9kaXYgKiBsYW5l cyk7CisJYmxvY2tfc3BhY2UgLT0gbW9kZS0+aGRpc3BsYXkgKyA0MDsKKworCXJlZ21hcF93cml0 ZSh0Y29uLT5yZWdzLCBTVU40SV9UQ09OMF9DUFVfVFJJMF9SRUcsCisJCSAgICAgU1VONElfVENP TjBfQ1BVX1RSSTBfQkxPQ0tfU1BBQ0UoYmxvY2tfc3BhY2UpIHwKKwkJICAgICBTVU40SV9UQ09O MF9DUFVfVFJJMF9CTE9DS19TSVpFKG1vZGUtPmhkaXNwbGF5KSk7CisKKwlyZWdtYXBfd3JpdGUo dGNvbi0+cmVncywgU1VONElfVENPTjBfQ1BVX1RSSTFfUkVHLAorCQkgICAgIFNVTjRJX1RDT04w X0NQVV9UUkkxX0JMT0NLX05VTShtb2RlLT52ZGlzcGxheSkpOworCisJc3RhcnRfZGVsYXkgPSAo bW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMTAgLSAxKTsKKwlzdGFy dF9kZWxheSA9IHN0YXJ0X2RlbGF5ICogbW9kZS0+Y3J0Y19odG90YWwgKiAxNDk7CisJc3RhcnRf ZGVsYXkgPSBzdGFydF9kZWxheSAvIChtb2RlLT5jcnRjX2Nsb2NrIC8gMTAwMCkgLyA4OworCXJl Z21hcF93cml0ZSh0Y29uLT5yZWdzLCBTVU40SV9UQ09OMF9DUFVfVFJJMl9SRUcsCisJCSAgICAg U1VONElfVENPTjBfQ1BVX1RSSTJfVFJBTlNfU1RBUlRfU0VUKDEwKSB8CisJCSAgICAgU1VONElf VENPTjBfQ1BVX1RSSTJfU1RBUlRfREVMQVkoc3RhcnRfZGVsYXkpKTsKKworCXN1bjRpX3Rjb24w X2ZyYW1lX2NvbnRyb2xfZW5hYmxlKHRjb24pOworCisJLyoKKwkgKiBUaGUgQWxsd2lubmVyIEJT UCBoYXMgYSBjb21tZW50IHRoYXQgdGhlIHBlcmlvZCBzaG91bGQgYmUKKwkgKiB0aGUgZGlzcGxh eSBjbG9jayAqIDE1LCBidXQgdXNlcyBhbiBoYXJkY29kZWQgMzAwMC4uLgorCSAqLworCXJlZ21h cF93cml0ZSh0Y29uLT5yZWdzLCBTVU40SV9UQ09OX1NBRkVfUEVSSU9EX1JFRywKKwkJICAgICBT VU40SV9UQ09OX1NBRkVfUEVSSU9EX05VTSgzMDAwKSB8CisJCSAgICAgU1VONElfVENPTl9TQUZF X1BFUklPRF9NT0RFKDMpKTsKKworCS8qIEVuYWJsZSB0aGUgb3V0cHV0IG9uIHRoZSBwaW5zICov CisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT04wX0lPX1RSSV9SRUcsCisJCSAg ICAgMHhlMDAwMDAwMCk7Cit9CisKIHN0YXRpYyB2b2lkIHN1bjRpX3Rjb24wX21vZGVfc2V0X2x2 ZHMoc3RydWN0IHN1bjRpX3Rjb24gKnRjb24sCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQpAQCAtNTA2LDcgKzU5OCwxNyBAQCB2b2lkIHN1bjRpX3Rjb25fbW9kZV9zZXQoc3Ry dWN0IHN1bjRpX3Rjb24gKnRjb24sCiAJCQkgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyLAogCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVj dCBzdW42aV9kc2kgKmRzaTsKKwogCXN3aXRjaCAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlKSB7CisJ Y2FzZSBEUk1fTU9ERV9FTkNPREVSX0RTSToKKwkJLyoKKwkJICogVGhpcyBpcyBub3QgcmVhbGx5 IGVsZWdhbnQsIGJ1dCBpdCdzIHRoZSAiY2xlYW5lciIKKwkJICogd2F5IEkgY291bGQgdGhpbmsg b2YuLi4KKwkJICovCisJCWRzaSA9IGVuY29kZXJfdG9fc3VuNmlfZHNpKGVuY29kZXIpOworCQlz dW40aV90Y29uMF9tb2RlX3NldF9jcHUodGNvbiwgZHNpLT5kZXZpY2UsIG1vZGUpOworCQlicmVh azsKIAljYXNlIERSTV9NT0RFX0VOQ09ERVJfTFZEUzoKIAkJc3VuNGlfdGNvbjBfbW9kZV9zZXRf bHZkcyh0Y29uLCBlbmNvZGVyLCBtb2RlKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRp X3Rjb24uaAppbmRleCAwNjcxODMwNzY4MDcuLmQ5NzZjNDQwMTlhYyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3Vu NGkvc3VuNGlfdGNvbi5oCkBAIC0zNSwxMCArMzUsMjUgQEAKICNkZWZpbmUgU1VONElfVENPTl9H SU5UMF9UQ09OMF9UUklfQ09VTlRFUl9JTlQJCUJJVCgxMCkKIAogI2RlZmluZSBTVU40SV9UQ09O X0dJTlQxX1JFRwkJCTB4OAorCiAjZGVmaW5lIFNVTjRJX1RDT05fRlJNX0NUTF9SRUcJCQkweDEw CisjZGVmaW5lIFNVTjRJX1RDT05fRlJNX0NUTF9FTgkJCQlCSVQoMzEpCisKKyNkZWZpbmUgU1VO NElfVENPTl9GUk1fU0VFRF9QUl9SRUcJCTB4MTQKKyNkZWZpbmUgU1VONElfVENPTl9GUk1fU0VF RF9QR19SRUcJCTB4MTgKKyNkZWZpbmUgU1VONElfVENPTl9GUk1fU0VFRF9QQl9SRUcJCTB4MWMK KyNkZWZpbmUgU1VONElfVENPTl9GUk1fU0VFRF9MUl9SRUcJCTB4MjAKKyNkZWZpbmUgU1VONElf VENPTl9GUk1fU0VFRF9MR19SRUcJCTB4MjQKKyNkZWZpbmUgU1VONElfVENPTl9GUk1fU0VFRF9M Ql9SRUcJCTB4MjgKKyNkZWZpbmUgU1VONElfVENPTl9GUk1fVEJMMF9SRUcJCQkweDJjCisjZGVm aW5lIFNVTjRJX1RDT05fRlJNX1RCTDFfUkVHCQkJMHgzMAorI2RlZmluZSBTVU40SV9UQ09OX0ZS TV9UQkwyX1JFRwkJCTB4MzQKKyNkZWZpbmUgU1VONElfVENPTl9GUk1fVEJMM19SRUcJCQkweDM4 CiAKICNkZWZpbmUgU1VONElfVENPTjBfQ1RMX1JFRwkJCTB4NDAKICNkZWZpbmUgU1VONElfVENP TjBfQ1RMX1RDT05fRU5BQkxFCQkJQklUKDMxKQorI2RlZmluZSBTVU40SV9UQ09OMF9DVExfSUZf TUFTSwkJCQlHRU5NQVNLKDI1LCAyNCkKKyNkZWZpbmUgU1VONElfVENPTjBfQ1RMX0lGXzgwODAJ CQkJKDEgPDwgMjQpCiAjZGVmaW5lIFNVTjRJX1RDT04wX0NUTF9DTEtfREVMQVlfTUFTSwkJCUdF Tk1BU0soOCwgNCkKICNkZWZpbmUgU1VONElfVENPTjBfQ1RMX0NMS19ERUxBWShkZWxheSkJCSgo ZGVsYXkgPDwgNCkgJiBTVU40SV9UQ09OMF9DVExfQ0xLX0RFTEFZX01BU0spCiAjZGVmaW5lIFNV TjRJX1RDT04wX0NUTF9TUkNfU0VMX01BU0sJCQlHRU5NQVNLKDIsIDApCkBAIC02NSw3ICs4MCwx NCBAQAogI2RlZmluZSBTVU40SV9UQ09OMF9CQVNJQzNfVl9TWU5DKGhlaWdodCkJCSgoKGhlaWdo dCkgLSAxKSAmIDB4N2ZmKQogCiAjZGVmaW5lIFNVTjRJX1RDT04wX0hWX0lGX1JFRwkJCTB4NTgK KwogI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfSUZfUkVHCQkJMHg2MAorI2RlZmluZSBTVU40SV9U Q09OMF9DUFVfSUZfTU9ERV9NQVNLCQkJR0VOTUFTSygzMSwgMjgpCisjZGVmaW5lIFNVTjRJX1RD T04wX0NQVV9JRl9NT0RFX0RTSQkJCSgxIDw8IDI4KQorI2RlZmluZSBTVU40SV9UQ09OMF9DUFVf SUZfVFJJX0ZJRk9fRkxVU0gJCUJJVCgxNikKKyNkZWZpbmUgU1VONElfVENPTjBfQ1BVX0lGX1RS SV9GSUZPX0VOCQkJQklUKDIpCisjZGVmaW5lIFNVTjRJX1RDT04wX0NQVV9JRl9UUklfRU4JCQlC SVQoMCkKKwogI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfV1JfUkVHCQkJMHg2NAogI2RlZmluZSBT VU40SV9UQ09OMF9DUFVfUkQwX1JFRwkJCTB4NjgKICNkZWZpbmUgU1VONElfVENPTjBfQ1BVX1JE QV9SRUcJCQkweDZjCkBAIC0xMzIsNiArMTU0LDEwIEBACiAKICNkZWZpbmUgU1VONElfVENPTjFf SU9fUE9MX1JFRwkJCTB4ZjAKICNkZWZpbmUgU1VONElfVENPTjFfSU9fVFJJX1JFRwkJCTB4ZjQK KworI2RlZmluZSBTVU40SV9UQ09OX0VDQ19GSUZPX1JFRwkJCTB4ZjgKKyNkZWZpbmUgU1VONElf VENPTl9FQ0NfRklGT19FTgkJCQlCSVQoMykKKwogI2RlZmluZSBTVU40SV9UQ09OX0NFVV9DVExf UkVHCQkJMHgxMDAKICNkZWZpbmUgU1VONElfVENPTl9DRVVfTVVMX1JSX1JFRwkJMHgxMTAKICNk ZWZpbmUgU1VONElfVENPTl9DRVVfTVVMX1JHX1JFRwkJMHgxMTQKQEAgLTE0OCw2ICsxNzQsMjIg QEAKICNkZWZpbmUgU1VONElfVENPTl9DRVVfUkFOR0VfUl9SRUcJCTB4MTQwCiAjZGVmaW5lIFNV TjRJX1RDT05fQ0VVX1JBTkdFX0dfUkVHCQkweDE0NAogI2RlZmluZSBTVU40SV9UQ09OX0NFVV9S QU5HRV9CX1JFRwkJMHgxNDgKKworI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfVFJJMF9SRUcJCTB4 MTYwCisjZGVmaW5lIFNVTjRJX1RDT04wX0NQVV9UUkkwX0JMT0NLX1NQQUNFKHNwYWNlKQkJKCgo KHNwYWNlKSAtIDEpICYgMHhmZmYpIDw8IDE2KQorI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfVFJJ MF9CTE9DS19TSVpFKHNpemUpCQkoKChzaXplKSAtIDEpICYgMHhmZmYpCisKKyNkZWZpbmUgU1VO NElfVENPTjBfQ1BVX1RSSTFfUkVHCQkweDE2NAorI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfVFJJ MV9CTE9DS19OVU0obnVtKQkJKCgobnVtKSAtIDEpICYgMHhmZmZmKQorCisjZGVmaW5lIFNVTjRJ X1RDT04wX0NQVV9UUkkyX1JFRwkJMHgxNjgKKyNkZWZpbmUgU1VONElfVENPTjBfQ1BVX1RSSTJf U1RBUlRfREVMQVkoZGVsYXkpCQkoKChkZWxheSkgJiAweGZmZmYpIDw8IDE2KQorI2RlZmluZSBT VU40SV9UQ09OMF9DUFVfVFJJMl9UUkFOU19TVEFSVF9TRVQoc2V0KQkoKHNldCkgJiAweGZmZikK KworI2RlZmluZSBTVU40SV9UQ09OX1NBRkVfUEVSSU9EX1JFRwkJMHgxZjAKKyNkZWZpbmUgU1VO NElfVENPTl9TQUZFX1BFUklPRF9OVU0obnVtKQkJCSgoKG51bSkgJiAweGZmZikgPDwgMTYpCisj ZGVmaW5lIFNVTjRJX1RDT05fU0FGRV9QRVJJT0RfTU9ERShtb2RlKQkJKChtb2RlKSAmIDB4MykK KwogI2RlZmluZSBTVU40SV9UQ09OX01VWF9DVFJMX1JFRwkJCTB4MjAwCiAKICNkZWZpbmUgU1VO NElfVENPTjBfTFZEU19BTkEwX1JFRwkJMHgyMjAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9zdW40aS9zdW42aV9taXBpX2RwaHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9t aXBpX2RwaHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYyYWNj NjBmOThmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9t aXBpX2RwaHkuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBB bGx3aW5uZXJ0ZWNoIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEZyZWUgRWxlY3Ry b25zCisgKgorICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5j b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvb2Zf YWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jl c2V0Lmg+CisKKyNpbmNsdWRlICJzdW42aV9taXBpX2RzaS5oIgorCisjZGVmaW5lIFNVTjZJX0RQ SFlfR0NUTF9SRUcJCTB4MDAKKyNkZWZpbmUgU1VONklfRFBIWV9HQ1RMX0xBTkVfTlVNKG4pCQko KCgobikgLSAxKSAmIDMpIDw8IDQpCisjZGVmaW5lIFNVTjZJX0RQSFlfR0NUTF9FTgkJCUJJVCgw KQorCisjZGVmaW5lIFNVTjZJX0RQSFlfVFhfQ1RMX1JFRwkJMHgwNAorI2RlZmluZSBTVU42SV9E UEhZX1RYX0NUTF9IU19UWF9DTEtfQ09OVAlCSVQoMjgpCisKKyNkZWZpbmUgU1VONklfRFBIWV9U WF9USU1FMF9SRUcJCTB4MTAKKyNkZWZpbmUgU1VONklfRFBIWV9UWF9USU1FMF9IU19UUkFJTChu KQkJKCgobikgJiAweGZmKSA8PCAyNCkKKyNkZWZpbmUgU1VONklfRFBIWV9UWF9USU1FMF9IU19Q UkVQQVJFKG4pCSgoKG4pICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIFNVTjZJX0RQSFlfVFhfVElN RTBfTFBfQ0xLX0RJVihuKQkoKG4pICYgMHhmZikKKworI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJ TUUxX1JFRwkJMHgxNAorI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJTUUxX0NMS19QT1NUKG4pCQko KChuKSAmIDB4ZmYpIDw8IDI0KQorI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJTUUxX0NMS19QUkUo bikJCSgoKG4pICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIFNVTjZJX0RQSFlfVFhfVElNRTFfQ0xL X1pFUk8obikJCSgoKG4pICYgMHhmZikgPDwgOCkKKyNkZWZpbmUgU1VONklfRFBIWV9UWF9USU1F MV9DTEtfUFJFUEFSRShuKQkoKG4pICYgMHhmZikKKworI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJ TUUyX1JFRwkJMHgxOAorI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJTUUyX0NMS19UUkFJTChuKQko KG4pICYgMHhmZikKKworI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJTUUzX1JFRwkJMHgxYworCisj ZGVmaW5lIFNVTjZJX0RQSFlfVFhfVElNRTRfUkVHCQkweDIwCisjZGVmaW5lIFNVTjZJX0RQSFlf VFhfVElNRTRfSFNfVFhfQU5BMShuKQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFNVTjZJ X0RQSFlfVFhfVElNRTRfSFNfVFhfQU5BMChuKQkoKG4pICYgMHhmZikKKworI2RlZmluZSBTVU42 SV9EUEhZX0FOQTBfUkVHCQkweDRjCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BMF9SRUdfUFdTCQkJ QklUKDMxKQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTBfUkVHX0RNUEMJCUJJVCgyOCkKKyNkZWZp bmUgU1VONklfRFBIWV9BTkEwX1JFR19ETVBEKG4pCQkoKChuKSAmIDB4ZikgPDwgMjQpCisjZGVm aW5lIFNVTjZJX0RQSFlfQU5BMF9SRUdfU0xWKG4pCQkoKChuKSAmIDcpIDw8IDEyKQorI2RlZmlu ZSBTVU42SV9EUEhZX0FOQTBfUkVHX0RFTihuKQkJKCgobikgJiAweGYpIDw8IDgpCisKKyNkZWZp bmUgU1VONklfRFBIWV9BTkExX1JFRwkJMHg1MAorI2RlZmluZSBTVU42SV9EUEhZX0FOQTFfUkVH X1ZUVE1PREUJCUJJVCgzMSkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkExX1JFR19DU01QUyhuKQkJ KCgobikgJiAzKSA8PCAyOCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkExX1JFR19TVlRUKG4pCQko KChuKSAmIDB4ZikgPDwgMjQpCisKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEyX1JFRwkJMHg1NAor I2RlZmluZSBTVU42SV9EUEhZX0FOQTJfRU5fUDJTX0NQVShuKQkJKCgobikgJiAweGYpIDw8IDI0 KQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTJfRU5fUDJTX0NQVV9NQVNLCQlHRU5NQVNLKDI3LCAy NCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEyX0VOX0NLX0NQVQkJQklUKDQpCisjZGVmaW5lIFNV TjZJX0RQSFlfQU5BMl9SRUdfRU5JQgkJQklUKDEpCisKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEz X1JFRwkJMHg1OAorI2RlZmluZSBTVU42SV9EUEhZX0FOQTNfRU5fVlRURChuKQkJKCgobikgJiAw eGYpIDw8IDI4KQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTNfRU5fVlRURF9NQVNLCQlHRU5NQVNL KDMxLCAyOCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEzX0VOX1ZUVEMJCQlCSVQoMjcpCisjZGVm aW5lIFNVTjZJX0RQSFlfQU5BM19FTl9ESVYJCQlCSVQoMjYpCisjZGVmaW5lIFNVTjZJX0RQSFlf QU5BM19FTl9MRE9DCQkJQklUKDI1KQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTNfRU5fTERPRAkJ CUJJVCgyNCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEzX0VOX0xET1IJCQlCSVQoMTgpCisKKyNk ZWZpbmUgU1VONklfRFBIWV9BTkE0X1JFRwkJMHg1YworI2RlZmluZSBTVU42SV9EUEhZX0FOQTRf UkVHX0RNUExWQwkJQklUKDI0KQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTRfUkVHX0RNUExWRChu KQkJKCgobikgJiAweGYpIDw8IDIwKQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTRfUkVHX0NLRFYo bikJCSgoKG4pICYgMHgxZikgPDwgMTIpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BNF9SRUdfVE1T QyhuKQkJKCgobikgJiAzKSA8PCAxMCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkE0X1JFR19UTVNE KG4pCQkoKChuKSAmIDMpIDw8IDgpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BNF9SRUdfVFhETlND KG4pCQkoKChuKSAmIDMpIDw8IDYpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BNF9SRUdfVFhETlNE KG4pCQkoKChuKSAmIDMpIDw8IDQpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BNF9SRUdfVFhQVVND KG4pCQkoKChuKSAmIDMpIDw8IDIpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BNF9SRUdfVFhQVVNE KG4pCQkoKG4pICYgMykKKworI2RlZmluZSBTVU42SV9EUEhZX0RCRzVfUkVHCQkweGY0CisKK2lu dCBzdW42aV9kcGh5X2luaXQoc3RydWN0IHN1bjZpX2RwaHkgKmRwaHksIHVuc2lnbmVkIGludCBs YW5lcykKK3sKKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGRwaHktPnJlc2V0KTsKKwljbGtfcHJl cGFyZV9lbmFibGUoZHBoeS0+bW9kX2Nsayk7CisJY2xrX3NldF9yYXRlX2V4Y2x1c2l2ZShkcGh5 LT5tb2RfY2xrLCAxNTAwMDAwMDApOworCisJcmVnbWFwX3dyaXRlKGRwaHktPnJlZ3MsIFNVTjZJ X0RQSFlfVFhfQ1RMX1JFRywKKwkJICAgICBTVU42SV9EUEhZX1RYX0NUTF9IU19UWF9DTEtfQ09O VCk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBIWV9UWF9USU1FMF9SRUcs CisJCSAgICAgU1VONklfRFBIWV9UWF9USU1FMF9MUF9DTEtfRElWKDE0KSB8CisJCSAgICAgU1VO NklfRFBIWV9UWF9USU1FMF9IU19QUkVQQVJFKDYpIHwKKwkJICAgICBTVU42SV9EUEhZX1RYX1RJ TUUwX0hTX1RSQUlMKDEwKSk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBI WV9UWF9USU1FMV9SRUcsCisJCSAgICAgU1VONklfRFBIWV9UWF9USU1FMV9DTEtfUFJFUEFSRSg3 KSB8CisJCSAgICAgU1VONklfRFBIWV9UWF9USU1FMV9DTEtfWkVSTyg1MCkgfAorCQkgICAgIFNV TjZJX0RQSFlfVFhfVElNRTFfQ0xLX1BSRSgzKSB8CisJCSAgICAgU1VONklfRFBIWV9UWF9USU1F MV9DTEtfUE9TVCgxMCkpOworCisJcmVnbWFwX3dyaXRlKGRwaHktPnJlZ3MsIFNVTjZJX0RQSFlf VFhfVElNRTJfUkVHLAorCQkgICAgIFNVTjZJX0RQSFlfVFhfVElNRTJfQ0xLX1RSQUlMKDMwKSk7 CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBIWV9UWF9USU1FM19SRUcsIDAp OworCisJcmVnbWFwX3dyaXRlKGRwaHktPnJlZ3MsIFNVTjZJX0RQSFlfVFhfVElNRTRfUkVHLAor CQkgICAgIFNVTjZJX0RQSFlfVFhfVElNRTRfSFNfVFhfQU5BMCgzKSB8CisJCSAgICAgU1VONklf RFBIWV9UWF9USU1FNF9IU19UWF9BTkExKDMpKTsKKworCS8qIEZJWE1FOiBOdW1iZXIgb2YgbGFu ZXM/ICovCisJcmVnbWFwX3dyaXRlKGRwaHktPnJlZ3MsIFNVTjZJX0RQSFlfR0NUTF9SRUcsCisJ CSAgICAgU1VONklfRFBIWV9HQ1RMX0xBTkVfTlVNKGxhbmVzKSB8CisJCSAgICAgU1VONklfRFBI WV9HQ1RMX0VOKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3VuNmlfZHBoeV9wb3dlcl9vbihz dHJ1Y3Qgc3VuNmlfZHBoeSAqZHBoeSwgdW5zaWduZWQgaW50IGxhbmVzKQoreworCXU4IGxhbmVz X21hc2sgPSBHRU5NQVNLKGxhbmVzIC0gMSwgMCk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVn cywgU1VONklfRFBIWV9BTkEwX1JFRywKKwkJICAgICBTVU42SV9EUEhZX0FOQTBfUkVHX1BXUyB8 CisJCSAgICAgU1VONklfRFBIWV9BTkEwX1JFR19ETVBDIHwKKwkJICAgICBTVU42SV9EUEhZX0FO QTBfUkVHX1NMVig3KSB8CisJCSAgICAgU1VONklfRFBIWV9BTkEwX1JFR19ETVBEKGxhbmVzX21h c2spIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTBfUkVHX0RFTihsYW5lc19tYXNrKSk7CisKKwly ZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBIWV9BTkExX1JFRywKKwkJICAgICBTVU42 SV9EUEhZX0FOQTFfUkVHX0NTTVBTKDEpIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTFfUkVHX1NW VFQoNykpOworCisJcmVnbWFwX3dyaXRlKGRwaHktPnJlZ3MsIFNVTjZJX0RQSFlfQU5BNF9SRUcs CisJCSAgICAgU1VONklfRFBIWV9BTkE0X1JFR19DS0RWKDEpIHwKKwkJICAgICBTVU42SV9EUEhZ X0FOQTRfUkVHX1RNU0MoMSkgfAorCQkgICAgIFNVTjZJX0RQSFlfQU5BNF9SRUdfVE1TRCgxKSB8 CisJCSAgICAgU1VONklfRFBIWV9BTkE0X1JFR19UWEROU0MoMSkgfAorCQkgICAgIFNVTjZJX0RQ SFlfQU5BNF9SRUdfVFhETlNEKDEpIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTRfUkVHX1RYUFVT QygxKSB8CisJCSAgICAgU1VONklfRFBIWV9BTkE0X1JFR19UWFBVU0QoMSkgfAorCQkgICAgIFNV TjZJX0RQSFlfQU5BNF9SRUdfRE1QTFZDIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTRfUkVHX0RN UExWRChsYW5lc19tYXNrKSk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBI WV9BTkEyX1JFRywKKwkJICAgICBTVU42SV9EUEhZX0FOQTJfUkVHX0VOSUIpOworCXVkZWxheSg1 KTsKKworCXJlZ21hcF93cml0ZShkcGh5LT5yZWdzLCBTVU42SV9EUEhZX0FOQTNfUkVHLAorCQkg ICAgIFNVTjZJX0RQSFlfQU5BM19FTl9MRE9SIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTNfRU5f TERPQyB8CisJCSAgICAgU1VONklfRFBIWV9BTkEzX0VOX0xET0QpOworCXVkZWxheSgxKTsKKwor CXJlZ21hcF91cGRhdGVfYml0cyhkcGh5LT5yZWdzLCBTVU42SV9EUEhZX0FOQTNfUkVHLAorCQkJ ICAgU1VONklfRFBIWV9BTkEzX0VOX1ZUVEMgfAorCQkJICAgU1VONklfRFBIWV9BTkEzX0VOX1ZU VERfTUFTSywKKwkJCSAgIFNVTjZJX0RQSFlfQU5BM19FTl9WVFRDIHwKKwkJCSAgIFNVTjZJX0RQ SFlfQU5BM19FTl9WVFREKGxhbmVzX21hc2spKTsKKwl1ZGVsYXkoMSk7CisKKwlyZWdtYXBfdXBk YXRlX2JpdHMoZHBoeS0+cmVncywgU1VONklfRFBIWV9BTkEzX1JFRywKKwkJCSAgIFNVTjZJX0RQ SFlfQU5BM19FTl9ESVYsCisJCQkgICBTVU42SV9EUEhZX0FOQTNfRU5fRElWKTsKKwl1ZGVsYXko MSk7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHBoeS0+cmVncywgU1VONklfRFBIWV9BTkEyX1JF RywKKwkJCSAgIFNVTjZJX0RQSFlfQU5BMl9FTl9DS19DUFUsCisJCQkgICBTVU42SV9EUEhZX0FO QTJfRU5fQ0tfQ1BVKTsKKwl1ZGVsYXkoMSk7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHBoeS0+ cmVncywgU1VONklfRFBIWV9BTkExX1JFRywKKwkJCSAgIFNVTjZJX0RQSFlfQU5BMV9SRUdfVlRU TU9ERSwKKwkJCSAgIFNVTjZJX0RQSFlfQU5BMV9SRUdfVlRUTU9ERSk7CisKKwlyZWdtYXBfdXBk YXRlX2JpdHMoZHBoeS0+cmVncywgU1VONklfRFBIWV9BTkEyX1JFRywKKwkJCSAgIFNVTjZJX0RQ SFlfQU5BMl9FTl9QMlNfQ1BVX01BU0ssCisJCQkgICBTVU42SV9EUEhZX0FOQTJfRU5fUDJTX0NQ VShsYW5lc19tYXNrKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHN1bjZpX2RwaHlfcG93ZXJf b2ZmKHN0cnVjdCBzdW42aV9kcGh5ICpkcGh5KQoreworCXJlZ21hcF91cGRhdGVfYml0cyhkcGh5 LT5yZWdzLCBTVU42SV9EUEhZX0FOQTFfUkVHLAorCQkJICAgU1VONklfRFBIWV9BTkExX1JFR19W VFRNT0RFLCAwKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3VuNmlfZHBoeV9leGl0KHN0cnVj dCBzdW42aV9kcGh5ICpkcGh5KQoreworCWNsa19yYXRlX2V4Y2x1c2l2ZV9wdXQoZHBoeS0+bW9k X2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwaHktPm1vZF9jbGspOworCXJlc2V0X2Nv bnRyb2xfYXNzZXJ0KGRwaHktPnJlc2V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3Ry dWN0IHJlZ21hcF9jb25maWcgc3VuNmlfZHBoeV9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0 cwk9IDMyLAorCS52YWxfYml0cwk9IDMyLAorCS5yZWdfc3RyaWRlCT0gNCwKKwkubWF4X3JlZ2lz dGVyCT0gU1VONklfRFBIWV9EQkc1X1JFRywKKwkubmFtZQkJPSAibWlwaS1kcGh5IiwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjZpX2RwaHlfb2ZfdGFibGVbXSA9 IHsKKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtbWlwaS1kcGh5IiB9LAor CXsgfQorfTsKKworaW50IHN1bjZpX2RwaHlfcHJvYmUoc3RydWN0IHN1bjZpX2RzaSAqZHNpLCBz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJc3RydWN0IHN1bjZpX2RwaHkgKmRwaHk7CisJ c3RydWN0IHJlc291cmNlIHJlczsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IHJldDsKKwor CWlmICghb2ZfbWF0Y2hfbm9kZShzdW42aV9kcGh5X29mX3RhYmxlLCBub2RlKSkgeworCQlkZXZf ZXJyKGRzaS0+ZGV2LCAiSW5jb21wYXRpYmxlIEQtUEhZXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJZHBoeSA9IGRldm1fa3phbGxvYyhkc2ktPmRldiwgc2l6ZW9mKCpkcGh5KSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFkcGh5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG9mX2Fk ZHJlc3NfdG9fcmVzb3VyY2Uobm9kZSwgMCwgJnJlcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGRzaS0+ZGV2LCAicGh5OiBDb3VsZG4ndCBnZXQgb3VyIHJlc291cmNlc1xuIik7CisJCXJldHVy biByZXQ7CisJfQorCisJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkc2ktPmRldiwgJnJl cyk7CisJaWYgKElTX0VSUihyZWdzKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiQ291bGRuJ3Qg bWFwIHRoZSBEUEhZIGVuY29kZXIgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocmVn cyk7CisJfQorCisJZHBoeS0+cmVncyA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkc2ktPmRldiwg cmVncywKKwkJCQkJICAgJnN1bjZpX2RwaHlfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihk cGh5LT5yZWdzKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiQ291bGRuJ3QgY3JlYXRlIHRoZSBE UEhZIGVuY29kZXIgcmVnbWFwXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHBoeS0+cmVncyk7CisJ fQorCisJZHBoeS0+cmVzZXQgPSBvZl9yZXNldF9jb250cm9sX2dldF9zaGFyZWQobm9kZSwgTlVM TCk7CisJaWYgKElTX0VSUihkcGh5LT5yZXNldCkpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIkNv dWxkbid0IGdldCBvdXIgcmVzZXQgbGluZVxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwaHktPnJl c2V0KTsKKwl9CisKKwlkcGh5LT5idXNfY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5vZGUsICJi dXMiKTsKKwlpZiAoSVNfRVJSKGRwaHktPmJ1c19jbGspKSB7CisJCWRldl9lcnIoZHNpLT5kZXYs ICJDb3VsZG4ndCBnZXQgdGhlIERQSFkgYnVzIGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihk cGh5LT5idXNfY2xrKTsKKwkJZ290byBlcnJfZnJlZV9yZXNldDsKKwl9CisJcmVnbWFwX21taW9f YXR0YWNoX2NsayhkcGh5LT5yZWdzLCBkcGh5LT5idXNfY2xrKTsKKworCWRwaHktPm1vZF9jbGsg PSBvZl9jbGtfZ2V0X2J5X25hbWUobm9kZSwgIm1vZCIpOworCWlmIChJU19FUlIoZHBoeS0+bW9k X2NsaykpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIkNvdWxkbid0IGdldCB0aGUgRFBIWSBtb2Qg Y2xvY2tcbiIpOworCQlyZXQgPSBQVFJfRVJSKGRwaHktPm1vZF9jbGspOworCQlnb3RvIGVycl9m cmVlX2J1czsKKwl9CisKKwlkc2ktPmRwaHkgPSBkcGh5OworCisJcmV0dXJuIDA7CisKK2Vycl9m cmVlX2J1czoKKwlyZWdtYXBfbW1pb19kZXRhY2hfY2xrKGRwaHktPnJlZ3MpOworCWNsa19wdXQo ZHBoeS0+YnVzX2Nsayk7CitlcnJfZnJlZV9yZXNldDoKKwlyZXNldF9jb250cm9sX3B1dChkcGh5 LT5yZXNldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHN1bjZpX2RwaHlfcmVtb3ZlKHN0cnVj dCBzdW42aV9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3Qgc3VuNmlfZHBoeSAqZHBoeSA9IGRzaS0+ZHBo eTsKKworCXJlZ21hcF9tbWlvX2RldGFjaF9jbGsoZHBoeS0+cmVncyk7CisJY2xrX3B1dChkcGh5 LT5tb2RfY2xrKTsKKwljbGtfcHV0KGRwaHktPmJ1c19jbGspOworCXJlc2V0X2NvbnRyb2xfcHV0 KGRwaHktPnJlc2V0KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3N1bjRpL3N1bjZpX21pcGlfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlf bWlwaV9kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU2NmE1 YzVmNjE0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9t aXBpX2RzaS5jCkBAIC0wLDAgKzEsMTExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBB bGx3aW5uZXJ0ZWNoIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEZyZWUgRWxlY3Ry b25zCisgKgorICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5j b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgv Y3JjLWNjaXR0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxs aW51eC9yZXNldC5oPgorCisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorCisjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgor I2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKworI2luY2x1ZGUgInN1bjRpX2Rydi5oIgorI2lu Y2x1ZGUgInN1bjZpX21pcGlfZHNpLmgiCisKKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXku aD4KKworI2RlZmluZSBTVU42SV9EU0lfQ1RMX1JFRwkJMHgwMDAKKyNkZWZpbmUgU1VONklfRFNJ X0NUTF9FTgkJCUJJVCgwKQorCisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19DVExfUkVHCQkweDAw YworI2RlZmluZSBTVU42SV9EU0lfQkFTSUNfQ1RMX0hCUF9ESVMJCUJJVCgyKQorI2RlZmluZSBT VU42SV9EU0lfQkFTSUNfQ1RMX0hTQV9IU0VfRElTCQlCSVQoMSkKKyNkZWZpbmUgU1VONklfRFNJ X0JBU0lDX0NUTF9WSURFT19CVVJTVAkJQklUKDApCisKKyNkZWZpbmUgU1VONklfRFNJX0JBU0lD X0NUTDBfUkVHCTB4MDEwCisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19DVEwwX0hTX0VPVFBfRU4J CUJJVCgxOCkKKyNkZWZpbmUgU1VONklfRFNJX0JBU0lDX0NUTDBfQ1JDX0VOCQlCSVQoMTcpCisj ZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19DVEwwX0VDQ19FTgkJQklUKDE2KQorI2RlZmluZSBTVU42 SV9EU0lfQkFTSUNfQ1RMMF9JTlNUX1NUCQlCSVQoMCkKKworI2RlZmluZSBTVU42SV9EU0lfQkFT SUNfQ1RMMV9SRUcJMHgwMTQKKyNkZWZpbmUgU1VONklfRFNJX0JBU0lDX0NUTDFfVklERU9fU1Rf REVMQVkobikJKCgobikgJiAweDFmZmYpIDw8IDQpCisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19D VEwxX1ZJREVPX0ZJTEwJCUJJVCgyKQorI2RlZmluZSBTVU42SV9EU0lfQkFTSUNfQ1RMMV9WSURF T19QUkVDSVNJT04JQklUKDEpCisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19DVEwxX1ZJREVPX01P REUJCUJJVCgwKQorCisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19TSVpFMF9SRUcJMHgwMTgKKyNk ZWZpbmUgU1VONklfRFNJX0JBU0lDX1NJWkUwX1ZCUChuKQkJKCgobikgJiAweGZmZikgPDwgMTYp CisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19TSVpFMF9WU0EobikJCSgobikgJiAweGZmZikKKwor I2RlZmluZSBTVU42SV9EU0lfQkFTSUNfU0laRTFfUkVHCTB4MDFjCisjZGVmaW5lIFNVTjZJX0RT SV9CQVNJQ19TSVpFMV9WVChuKQkJKCgobikgJiAweGZmZikgPDwgMTYpCisjZGVmaW5lIFNVTjZJ X0RTSV9CQVNJQ19TSVpFMV9WQUNUKG4pCQkoKG4pICYgMHhmZmYpCisKKyNkZWZpbmUgU1VONklf RFNJX0lOU1RfRlVOQ19SRUcobikJKDB4MDIwICsgKG4pICogMHgwNCkKKyNkZWZpbmUgU1VONklf RFNJX0lOU1RfRlVOQ19JTlNUX01PREUobikJKCgobikgJiAweGYpIDw8IDI4KQorI2RlZmluZSBT VU42SV9EU0lfSU5TVF9GVU5DX0VTQ0FQRV9FTlRSWShuKQkoKChuKSAmIDB4ZikgPDwgMjQpCisj ZGVmaW5lIFNVTjZJX0RTSV9JTlNUX0ZVTkNfVFJBTlNfUEFDS0VUKG4pCSgoKG4pICYgMHhmKSA8 PCAyMCkKKyNkZWZpbmUgU1VONklfRFNJX0lOU1RfRlVOQ19MQU5FX0NFTgkJQklUKDQpCisjZGVm aW5lIFNVTjZJX0RTSV9JTlNUX0ZVTkNfTEFORV9ERU4obikJCSgobikgJiAweGYpCisKKyNkZWZp bmUgU1VONklfRFNJX0lOU1RfTE9PUF9TRUxfUkVHCTB4MDQwCisKKyNkZWZpbmUgU1VONklfRFNJ X0lOU1RfTE9PUF9OVU1fUkVHKG4pCSgweDA0NCArIChuKSAqIDB4MTApCisjZGVmaW5lIFNVTjZJ X0RTSV9JTlNUX0xPT1BfTlVNX04xKG4pCQkoKChuKSAmIDB4ZmZmKSA8PCAxNikKKyNkZWZpbmUg U1VONklfRFNJX0lOU1RfTE9PUF9OVU1fTjAobikJCSgobikgJiAweGZmZikKKworI2RlZmluZSBT VU42SV9EU0lfSU5TVF9KVU1QX1NFTF9SRUcJMHgwNDgKKworI2RlZmluZSBTVU42SV9EU0lfSU5T VF9KVU1QX0NGR19SRUcobikJKDB4MDRjICsgKG4pICogMHgwNCkKKyNkZWZpbmUgU1VONklfRFNJ X0lOU1RfSlVNUF9DRkdfVE8obikJCSgoKG4pICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgU1VONklf RFNJX0lOU1RfSlVNUF9DRkdfUE9JTlQobikJKCgobikgJiAweGYpIDw8IDE2KQorI2RlZmluZSBT VU42SV9EU0lfSU5TVF9KVU1QX0NGR19OVU0obikJCSgobikgJiAweGZmZmYpCisKKyNkZWZpbmUg U1VONklfRFNJX1RSQU5TX1NUQVJUX1JFRwkweDA2MAorCisjZGVmaW5lIFNVTjZJX0RTSV9UUkFO U19aRVJPX1JFRwkweDA3OAorCisjZGVmaW5lIFNVTjZJX0RTSV9UQ09OX0RSUV9SRUcJCTB4MDdj CisjZGVmaW5lIFNVTjZJX0RTSV9UQ09OX0RSUV9FTkFCTEVfTU9ERQkJQklUKDI4KQorI2RlZmlu ZSBTVU42SV9EU0lfVENPTl9EUlFfU0VUKG4pCQkoKG4pICYgMHgzZmYpCisKKyNkZWZpbmUgU1VO NklfRFNJX1BJWEVMX0NUTDBfUkVHCTB4MDgwCisjZGVmaW5lIFNVTjZJX0RTSV9QSVhFTF9DVEww X1BEX1BMVUdfRElTQUJMRQlCSVQoMTYpCisjZGVmaW5lIFNVTjZJX0RTSV9QSVhFTF9DVEwwX0ZP Uk1BVChuKQkJKChuKSAmIDB4ZikKKworI2RlZmluZSBTVU42SV9EU0lfUElYRUxfQ1RMMV9SRUcJ MHgwODQKKworI2RlZmluZSBTVU42SV9EU0lfUElYRUxfUEhfUkVHCQkweDA5MAorI2RlZmluZSBT VU42SV9EU0lfUElYRUxfUEhfRUNDKG4pCQkoKChuKSAmIDB4ZmYpIDw8IDI0KQorI2RlZmluZSBT VU42SV9EU0lfUElYRUxfUEhfV0MobikJCSgoKG4pICYgMHhmZmZmKSA8PCA4KQorI2RlZmluZSBT VU42SV9EU0lfUElYRUxfUEhfVkMobikJCSgoKG4pICYgMykgPDwgNikKKyNkZWZpbmUgU1VONklf RFNJX1BJWEVMX1BIX0RUKG4pCQkoKG4pICYgMHgzZikKKworI2RlZmluZSBTVU42SV9EU0lfUElY RUxfUEYwX1JFRwkJMHgwOTgKKyNkZWZpbmUgU1VONklfRFNJX1BJWEVMX1BGMF9DUkNfRk9SQ0Uo bikJKChuKSAmIDB4ZmZmZikKKworI2RlZmluZSBTVU42SV9EU0lfUElYRUxfUEYxX1JFRwkJMHgw OWMKKyNkZWZpbmUgU1VONklfRFNJX1BJWEVMX1BGMV9DUkNfSU5JVF9MSU5FTihuKQkoKChuKSAm IDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lIFNVTjZJX0RTSV9QSVhFTF9QRjFfQ1JDX0lOSVRfTElO RTAobikJKChuKSAmIDB4ZmZmZikKKworI2RlZmluZSBTVU42SV9EU0lfU1lOQ19IU1NfUkVHCQkw eDBiMAorCisjZGVmaW5lIFNVTjZJX0RTSV9TWU5DX0hTRV9SRUcJCTB4MGI0CisKKyNkZWZpbmUg U1VONklfRFNJX1NZTkNfVlNTX1JFRwkJMHgwYjgKKworI2RlZmluZSBTVU42SV9EU0lfU1lOQ19W U0VfUkVHCQkweDBiYworCisjZGVmaW5lIFNVTjZJX0RTSV9CTEtfSFNBMF9SRUcJCTB4MGMwCisK KyNkZWZpbmUgU1VONklfRFNJX0JMS19IU0ExX1JFRwkJMHgwYzQKKyNkZWZpbmUgU1VONklfRFNJ X0JMS19QRihuKQkJCSgoKG4pICYgMHhmZmZmKSA8PCAxNikKKyNkZWZpbmUgU1VONklfRFNJX0JM S19QRChuKQkJCSgobikgJiAweGZmKQorCisjZGVmaW5lIFNVTjZJX0RTSV9CTEtfSEJQMF9SRUcJ CTB4MGM4CisKKyNkZWZpbmUgU1VONklfRFNJX0JMS19IQlAxX1JFRwkJMHgwY2MKKworI2RlZmlu ZSBTVU42SV9EU0lfQkxLX0hGUDBfUkVHCQkweDBkMAorCisjZGVmaW5lIFNVTjZJX0RTSV9CTEtf SEZQMV9SRUcJCTB4MGQ0CisKKyNkZWZpbmUgU1VONklfRFNJX0JMS19IQkxLMF9SRUcJCTB4MGUw CisKKyNkZWZpbmUgU1VONklfRFNJX0JMS19IQkxLMV9SRUcJCTB4MGU0CisKKyNkZWZpbmUgU1VO NklfRFNJX0JMS19WQkxLMF9SRUcJCTB4MGU4CisKKyNkZWZpbmUgU1VONklfRFNJX0JMS19WQkxL MV9SRUcJCTB4MGVjCisKKyNkZWZpbmUgU1VONklfRFNJX0JVUlNUX0xJTkVfUkVHCTB4MGYwCisj ZGVmaW5lIFNVTjZJX0RTSV9CVVJTVF9MSU5FX1NZTkNfUE9JTlQobikJKCgobikgJiAweGZmZmYp IDw8IDE2KQorI2RlZmluZSBTVU42SV9EU0lfQlVSU1RfTElORV9OVU0obikJCSgobikgJiAweGZm ZmYpCisKKyNkZWZpbmUgU1VONklfRFNJX0JVUlNUX0RSUV9SRUcJCTB4MGY0CisjZGVmaW5lIFNV TjZJX0RTSV9CVVJTVF9EUlFfRURHRTEobikJCSgoKG4pICYgMHhmZmZmKSA8PCAxNikKKyNkZWZp bmUgU1VONklfRFNJX0JVUlNUX0RSUV9FREdFMChuKQkJKChuKSAmIDB4ZmZmZikKKworI2RlZmlu ZSBTVU42SV9EU0lfQ01EX0NUTF9SRUcJCTB4MjAwCisjZGVmaW5lIFNVTjZJX0RTSV9DTURfQ1RM X1JYX09WRVJGTE9XCQlCSVQoMjYpCisjZGVmaW5lIFNVTjZJX0RTSV9DTURfQ1RMX1JYX0ZMQUcJ CUJJVCgyNSkKKyNkZWZpbmUgU1VONklfRFNJX0NNRF9DVExfVFhfRkxBRwkJQklUKDkpCisKKyNk ZWZpbmUgU1VONklfRFNJX0NNRF9SWF9SRUcobikJCSgweDI0MCArIChuKSAqIDB4MDQpCisKKyNk ZWZpbmUgU1VONklfRFNJX0RFQlVHX0RBVEFfUkVHCTB4MmY4CisKKyNkZWZpbmUgU1VONklfRFNJ X0NNRF9UWF9SRUcobikJCSgweDMwMCArIChuKSAqIDB4MDQpCisKK2VudW0gc3VuNmlfZHNpX3N0 YXJ0X2luc3QgeworCURTSV9TVEFSVF9MUFJYLAorCURTSV9TVEFSVF9MUFRYLAorCURTSV9TVEFS VF9IU0MsCisJRFNJX1NUQVJUX0hTRCwKK307CisKK2VudW0gc3VuNmlfZHNpX2luc3RfaWQgewor CURTSV9JTlNUX0lEX0xQMTEJPSAwLAorCURTSV9JTlNUX0lEX1RCQSwKKwlEU0lfSU5TVF9JRF9I U0MsCisJRFNJX0lOU1RfSURfSFNELAorCURTSV9JTlNUX0lEX0xQRFQsCisJRFNJX0lOU1RfSURf SFNDRVhJVCwKKwlEU0lfSU5TVF9JRF9OT1AsCisJRFNJX0lOU1RfSURfRExZLAorCURTSV9JTlNU X0lEX0VORAkJPSAxNSwKK307CisKK2VudW0gc3VuNmlfZHNpX2luc3RfbW9kZSB7CisJRFNJX0lO U1RfTU9ERV9TVE9QCT0gMCwKKwlEU0lfSU5TVF9NT0RFX1RCQSwKKwlEU0lfSU5TVF9NT0RFX0hT LAorCURTSV9JTlNUX01PREVfRVNDQVBFLAorCURTSV9JTlNUX01PREVfSFNDRVhJVCwKKwlEU0lf SU5TVF9NT0RFX05PUCwKK307CisKK2VudW0gc3VuNmlfZHNpX2luc3RfZXNjYXBlIHsKKwlEU0lf SU5TVF9FU0NBX0xQRFQJPSAwLAorCURTSV9JTlNUX0VTQ0FfVUxQUywKKwlEU0lfSU5TVF9FU0NB X1VOMSwKKwlEU0lfSU5TVF9FU0NBX1VOMiwKKwlEU0lfSU5TVF9FU0NBX1JFU0VULAorCURTSV9J TlNUX0VTQ0FfVU4zLAorCURTSV9JTlNUX0VTQ0FfVU40LAorCURTSV9JTlNUX0VTQ0FfVU41LAor fTsKKworZW51bSBzdW42aV9kc2lfaW5zdF9wYWNrZXQgeworCURTSV9JTlNUX1BBQ0tfUElYRUwJ PSAwLAorCURTSV9JTlNUX1BBQ0tfQ09NTUFORCwKK307CisKK3N0YXRpYyB1MzIgc3VuNmlfZHNp X2VjY19hcnJheVtdID0geworCVswXSA9IChCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQo NCkgfCBCSVQoNSkgfCBCSVQoNykgfCBCSVQoMTApIHwKKwkgICAgICAgQklUKDExKSB8IEJJVCgx MykgfCBCSVQoMTYpIHwgQklUKDIwKSB8IEJJVCgyMSkgfCBCSVQoMjIpIHwKKwkgICAgICAgQklU KDIzKSksCisJWzFdID0gKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg2 KSB8IEJJVCg4KSB8IEJJVCgxMCkgfAorCSAgICAgICBCSVQoMTIpIHwgQklUKDE0KSB8IEJJVCgx NykgfCBCSVQoMjApIHwgQklUKDIxKSB8IEJJVCgyMikgfAorCSAgICAgICBCSVQoMjMpKSwKKwlb Ml0gPSAoQklUKDApIHwgQklUKDIpIHwgQklUKDMpIHwgQklUKDUpIHwgQklUKDYpIHwgQklUKDkp IHwgQklUKDExKSB8CisJICAgICAgIEJJVCgxMikgfCBCSVQoMTUpIHwgQklUKDE4KSB8IEJJVCgy MCkgfCBCSVQoMjEpIHwgQklUKDIyKSksCisJWzNdID0gKEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgz KSB8IEJJVCg3KSB8IEJJVCg4KSB8IEJJVCg5KSB8IEJJVCgxMykgfAorCSAgICAgICBCSVQoMTQp IHwgQklUKDE1KSB8IEJJVCgxOSkgfCBCSVQoMjApIHwgQklUKDIxKSB8IEJJVCgyMykpLAorCVs0 XSA9IChCSVQoNCkgfCBCSVQoNSkgfCBCSVQoNikgfCBCSVQoNykgfCBCSVQoOCkgfCBCSVQoOSkg fCBCSVQoMTYpIHwKKwkgICAgICAgQklUKDE3KSB8IEJJVCgxOCkgfCBCSVQoMTkpIHwgQklUKDIw KSB8IEJJVCgyMikgfCBCSVQoMjMpKSwKKwlbNV0gPSAoQklUKDEwKSB8IEJJVCgxMSkgfCBCSVQo MTIpIHwgQklUKDEzKSB8IEJJVCgxNCkgfCBCSVQoMTUpIHwKKwkgICAgICAgQklUKDE2KSB8IEJJ VCgxNykgfCBCSVQoMTgpIHwgQklUKDE5KSB8IEJJVCgyMSkgfCBCSVQoMjIpIHwKKwkgICAgICAg QklUKDIzKSksCit9OworCitzdGF0aWMgdTMyIHN1bjZpX2RzaV9lY2NfY29tcHV0ZSh1bnNpZ25l ZCBpbnQgZGF0YSkKK3sKKwlpbnQgaTsKKwl1OCBlY2MgPSAwOworCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoc3VuNmlfZHNpX2VjY19hcnJheSk7IGkrKykgeworCQl1MzIgZmllbGQgPSBz dW42aV9kc2lfZWNjX2FycmF5W2ldOworCQlib29sIGluaXQgPSBmYWxzZTsKKwkJdTggdmFsID0g MDsKKwkJaW50IGo7CisKKwkJZm9yIChqID0gMDsgaiA8IDI0OyBqKyspIHsKKwkJCWlmICghKEJJ VChqKSAmIGZpZWxkKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFpbml0KSB7CisJCQkJdmFs ID0gKEJJVChqKSAmIGRhdGEpID8gMSA6IDA7CisJCQkJaW5pdCA9IHRydWU7CisJCQl9IGVsc2Ug eworCQkJCXZhbCBePSAoQklUKGopICYgZGF0YSkgPyAxIDogMDsKKwkJCX0KKwkJfQorCisJCWVj YyB8PSB2YWwgPDwgaTsKKwl9CisKKwlyZXR1cm4gZWNjOworfQorCitzdGF0aWMgdTE2IHN1bjZp X2RzaV9jcmNfY29tcHV0ZSh1OCBjb25zdCAqYnVmZmVyLCBzaXplX3QgbGVuKQoreworCXJldHVy biBjcmNfY2NpdHQoMHhmZmZmLCBidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyB1MTYgc3VuNmlf ZHNpX2NyY19yZXBlYXRfY29tcHV0ZSh1OCBwZCwgc2l6ZV90IGxlbikKK3sKKwl1OCBidWZmZXJb bGVuXTsKKworCW1lbXNldChidWZmZXIsIHBkLCBsZW4pOworCisJcmV0dXJuIHN1bjZpX2RzaV9j cmNfY29tcHV0ZShidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyB1MzIgc3VuNmlfZHNpX2J1aWxk X3N5bmNfcGt0KHU4IGR0LCB1OCB2YywgdTggZDAsIHU4IGQxKQoreworCXUzMiB2YWwgPSBkdCAm IDB4M2Y7CisKKwl2YWwgfD0gKHZjICYgMykgPDwgNjsKKwl2YWwgfD0gKGQwICYgMHhmZikgPDwg ODsKKwl2YWwgfD0gKGQxICYgMHhmZikgPDwgMTY7CisJdmFsIHw9IHN1bjZpX2RzaV9lY2NfY29t cHV0ZSh2YWwpIDw8IDI0OworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUzMiBzdW42aV9k c2lfYnVpbGRfYmxrMF9wa3QodTggdmMsIHUxNiB3YykKK3sKKwlyZXR1cm4gc3VuNmlfZHNpX2J1 aWxkX3N5bmNfcGt0KE1JUElfRFNJX0JMQU5LSU5HX1BBQ0tFVCwgdmMsCisJCQkJCXdjICYgMHhm Ziwgd2MgPj4gOCk7Cit9CisKK3N0YXRpYyB1MzIgc3VuNmlfZHNpX2J1aWxkX2JsazFfcGt0KHUx NiBwZCwgc2l6ZV90IGxlbikKK3sKKwl1MzIgdmFsID0gU1VONklfRFNJX0JMS19QRChwZCk7CisK KwlyZXR1cm4gdmFsIHwgU1VONklfRFNJX0JMS19QRihzdW42aV9kc2lfY3JjX3JlcGVhdF9jb21w dXRlKHBkLCBsZW4pKTsKK30KKworc3RhdGljIHZvaWQgc3VuNmlfZHNpX2luc3RfYWJvcnQoc3Ry dWN0IHN1bjZpX2RzaSAqZHNpKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhkc2ktPnJlZ3MsIFNV TjZJX0RTSV9CQVNJQ19DVEwwX1JFRywKKwkJCSAgIFNVTjZJX0RTSV9CQVNJQ19DVEwwX0lOU1Rf U1QsIDApOworfQorCitzdGF0aWMgdm9pZCBzdW42aV9kc2lfaW5zdF9jb21taXQoc3RydWN0IHN1 bjZpX2RzaSAqZHNpKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhkc2ktPnJlZ3MsIFNVTjZJX0RT SV9CQVNJQ19DVEwwX1JFRywKKwkJCSAgIFNVTjZJX0RTSV9CQVNJQ19DVEwwX0lOU1RfU1QsCisJ CQkgICBTVU42SV9EU0lfQkFTSUNfQ1RMMF9JTlNUX1NUKTsKK30KKworc3RhdGljIGludCBzdW42 aV9kc2lfaW5zdF93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBzdW42aV9kc2kgKmRzaSkKK3sK Kwl1MzIgdmFsOworCisJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChkc2ktPnJlZ3Ms IFNVTjZJX0RTSV9CQVNJQ19DVEwwX1JFRywKKwkJCQkJdmFsLAorCQkJCQkhKHZhbCAmIFNVTjZJ X0RTSV9CQVNJQ19DVEwwX0lOU1RfU1QpLAorCQkJCQkxMDAsIDUwMDApOworfQorCitzdGF0aWMg dm9pZCBzdW42aV9kc2lfaW5zdF9zZXR1cChzdHJ1Y3Qgc3VuNmlfZHNpICpkc2ksCisJCQkJIGVu dW0gc3VuNmlfZHNpX2luc3RfaWQgaWQsCisJCQkJIGVudW0gc3VuNmlfZHNpX2luc3RfbW9kZSBt b2RlLAorCQkJCSBib29sIGNsb2NrLCB1OCBkYXRhLAorCQkJCSBlbnVtIHN1bjZpX2RzaV9pbnN0 X3BhY2tldCBwYWNrZXQsCisJCQkJIGVudW0gc3VuNmlfZHNpX2luc3RfZXNjYXBlIGVzY2FwZSkK K3sKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfSU5TVF9GVU5DX1JFRyhpZCks CisJCSAgICAgU1VONklfRFNJX0lOU1RfRlVOQ19JTlNUX01PREUobW9kZSkgfAorCQkgICAgIFNV TjZJX0RTSV9JTlNUX0ZVTkNfRVNDQVBFX0VOVFJZKGVzY2FwZSkgfAorCQkgICAgIFNVTjZJX0RT SV9JTlNUX0ZVTkNfVFJBTlNfUEFDS0VUKHBhY2tldCkgfAorCQkgICAgIChjbG9jayA/IFNVTjZJ X0RTSV9JTlNUX0ZVTkNfTEFORV9DRU4gOiAwKSB8CisJCSAgICAgU1VONklfRFNJX0lOU1RfRlVO Q19MQU5FX0RFTihkYXRhKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN1bjZpX2RzaV9pbnN0X2luaXQo c3RydWN0IHN1bjZpX2RzaSAqZHNpLAorCQkJCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmlj ZSkKK3sKKwl1OCBsYW5lc19tYXNrID0gR0VOTUFTSyhkZXZpY2UtPmxhbmVzIC0gMSwgMCk7CisK KwlzdW42aV9kc2lfaW5zdF9zZXR1cChkc2ksIERTSV9JTlNUX0lEX0xQMTEsIERTSV9JTlNUX01P REVfU1RPUCwKKwkJCSAgICAgdHJ1ZSwgbGFuZXNfbWFzaywgMCwgMCk7CisKKwlzdW42aV9kc2lf aW5zdF9zZXR1cChkc2ksIERTSV9JTlNUX0lEX1RCQSwgRFNJX0lOU1RfTU9ERV9UQkEsCisJCQkg ICAgIGZhbHNlLCAxLCAwLCAwKTsKKworCXN1bjZpX2RzaV9pbnN0X3NldHVwKGRzaSwgRFNJX0lO U1RfSURfSFNDLCBEU0lfSU5TVF9NT0RFX0hTLAorCQkJICAgICB0cnVlLCAwLCBEU0lfSU5TVF9Q QUNLX1BJWEVMLCAwKTsKKworCXN1bjZpX2RzaV9pbnN0X3NldHVwKGRzaSwgRFNJX0lOU1RfSURf SFNELCBEU0lfSU5TVF9NT0RFX0hTLAorCQkJICAgICBmYWxzZSwgbGFuZXNfbWFzaywgRFNJX0lO U1RfUEFDS19QSVhFTCwgMCk7CisKKwlzdW42aV9kc2lfaW5zdF9zZXR1cChkc2ksIERTSV9JTlNU X0lEX0xQRFQsIERTSV9JTlNUX01PREVfRVNDQVBFLAorCQkJICAgICBmYWxzZSwgMSwgRFNJX0lO U1RfUEFDS19DT01NQU5ELAorCQkJICAgICBEU0lfSU5TVF9FU0NBX0xQRFQpOworCisJc3VuNmlf ZHNpX2luc3Rfc2V0dXAoZHNpLCBEU0lfSU5TVF9JRF9IU0NFWElULCBEU0lfSU5TVF9NT0RFX0hT Q0VYSVQsCisJCQkgICAgIHRydWUsIDAsIDAsIDApOworCisJc3VuNmlfZHNpX2luc3Rfc2V0dXAo ZHNpLCBEU0lfSU5TVF9JRF9OT1AsIERTSV9JTlNUX01PREVfU1RPUCwKKwkJCSAgICAgZmFsc2Us IGxhbmVzX21hc2ssIDAsIDApOworCisJc3VuNmlfZHNpX2luc3Rfc2V0dXAoZHNpLCBEU0lfSU5T VF9JRF9ETFksIERTSV9JTlNUX01PREVfTk9QLAorCQkJICAgICB0cnVlLCBsYW5lc19tYXNrLCAw LCAwKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9JTlNUX0pVTVBfQ0ZH X1JFRygwKSwKKwkJICAgICBTVU42SV9EU0lfSU5TVF9KVU1QX0NGR19QT0lOVChEU0lfSU5TVF9J RF9OT1ApIHwKKwkJICAgICBTVU42SV9EU0lfSU5TVF9KVU1QX0NGR19UTyhEU0lfSU5TVF9JRF9I U0NFWElUKSB8CisJCSAgICAgU1VONklfRFNJX0lOU1RfSlVNUF9DRkdfTlVNKDEpKTsKK307CisK K3N0YXRpYyB1MTYgc3VuNmlfZHNpX2dldF92aWRlb19zdGFydF9kZWxheShzdHJ1Y3Qgc3VuNmlf ZHNpICpkc2ksCisJCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXJl dHVybiBtb2RlLT52dG90YWwgLSAobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dmRpc3BsYXkpICsg MTsKK30KKworc3RhdGljIHZvaWQgc3VuNmlfZHNpX3NldHVwX2J1cnN0KHN0cnVjdCBzdW42aV9k c2kgKmRzaSwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSA9IGRzaS0+ZGV2aWNlOworCXUzMiB2YWwgPSAwOwor CisJaWYgKChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oZGlzcGxheSkgPiAyMCkgeworCQkvKiBN YWFhYWFhZ2ljICovCisJCXUxNiBkcnEgPSAobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aGRpc3Bs YXkpIC0gMjA7CisKKwkJZHJxICo9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZGV2aWNl LT5mb3JtYXQpOworCQlkcnEgLz0gMzI7CisKKwkJdmFsID0gKFNVTjZJX0RTSV9UQ09OX0RSUV9F TkFCTEVfTU9ERSB8CisJCSAgICAgICBTVU42SV9EU0lfVENPTl9EUlFfU0VUKGRycSkpOworCX0K KworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9UQ09OX0RSUV9SRUcsIHZhbCk7 Cit9CisKK3N0YXRpYyB2b2lkIHN1bjZpX2RzaV9zZXR1cF9pbnN0X2xvb3Aoc3RydWN0IHN1bjZp X2RzaSAqZHNpLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQorewor CXUxNiBkZWxheSA9IDUwIC0gMTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RT SV9JTlNUX0xPT1BfTlVNX1JFRygwKSwKKwkJICAgICBTVU42SV9EU0lfSU5TVF9MT09QX05VTV9O MCg1MCAtIDEpIHwKKwkJICAgICBTVU42SV9EU0lfSU5TVF9MT09QX05VTV9OMShkZWxheSkpOwor CXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9JTlNUX0xPT1BfTlVNX1JFRygxKSwK KwkJICAgICBTVU42SV9EU0lfSU5TVF9MT09QX05VTV9OMCg1MCAtIDEpIHwKKwkJICAgICBTVU42 SV9EU0lfSU5TVF9MT09QX05VTV9OMShkZWxheSkpOworfQorCitzdGF0aWMgdm9pZCBzdW42aV9k c2lfc2V0dXBfZm9ybWF0KHN0cnVjdCBzdW42aV9kc2kgKmRzaSwKKwkJCQkgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2Ug PSBkc2ktPmRldmljZTsKKwl1MzIgdmFsID0gU1VONklfRFNJX1BJWEVMX1BIX1ZDKGRldmljZS0+ Y2hhbm5lbCk7CisJdTggZHQsIGZtdDsKKwl1MTYgd2M7CisKKwkvKgorCSAqIFRPRE86IFRoZSBm b3JtYXQgZGVmaW5lcyBhcmUgb25seSB2YWxpZCBpbiB2aWRlbyBtb2RlIGFuZAorCSAqIGNoYW5n ZSBpbiBjb21tYW5kIG1vZGUuCisJICovCisJc3dpdGNoIChkZXZpY2UtPmZvcm1hdCkgeworCWNh c2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJZHQgPSBNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RS RUFNXzI0OworCQlmbXQgPSA4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6 CisJCWR0ID0gTUlQSV9EU0lfUElYRUxfU1RSRUFNXzNCWVRFXzE4OworCQlmbXQgPSA5OworCQli cmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlkdCA9IE1JUElfRFNJ X1BBQ0tFRF9QSVhFTF9TVFJFQU1fMTg7CisJCWZtdCA9IDEwOworCQlicmVhazsKKwljYXNlIE1J UElfRFNJX0ZNVF9SR0I1NjU6CisJCWR0ID0gTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8x NjsKKwkJZm10ID0gMTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJdmFs IHw9IFNVTjZJX0RTSV9QSVhFTF9QSF9EVChkdCk7CisKKwl3YyA9IG1vZGUtPmhkaXNwbGF5ICog bWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkZXZpY2UtPmZvcm1hdCkgLyA4OworCXZhbCB8 PSBTVU42SV9EU0lfUElYRUxfUEhfV0Mod2MpOworCXZhbCB8PSBTVU42SV9EU0lfUElYRUxfUEhf RUNDKHN1bjZpX2RzaV9lY2NfY29tcHV0ZSh2YWwpKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJl Z3MsIFNVTjZJX0RTSV9QSVhFTF9QSF9SRUcsIHZhbCk7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5y ZWdzLCBTVU42SV9EU0lfUElYRUxfUEYwX1JFRywKKwkJICAgICBTVU42SV9EU0lfUElYRUxfUEYw X0NSQ19GT1JDRSgweGZmZmYpKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RT SV9QSVhFTF9QRjFfUkVHLAorCQkgICAgIFNVTjZJX0RTSV9QSVhFTF9QRjFfQ1JDX0lOSVRfTElO RTAoMHhmZmZmKSB8CisJCSAgICAgU1VONklfRFNJX1BJWEVMX1BGMV9DUkNfSU5JVF9MSU5FTigw eGZmZmYpKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9QSVhFTF9DVEww X1JFRywKKwkJICAgICBTVU42SV9EU0lfUElYRUxfQ1RMMF9QRF9QTFVHX0RJU0FCTEUgfAorCQkg ICAgIFNVTjZJX0RTSV9QSVhFTF9DVEwwX0ZPUk1BVChmbXQpKTsKK30KKworc3RhdGljIHZvaWQg c3VuNmlfZHNpX3NldHVwX3RpbWluZ3Moc3RydWN0IHN1bjZpX2RzaSAqZHNpLAorCQkJCSAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkZXZpY2UgPSBkc2ktPmRldmljZTsKKwl1bnNpZ25lZCBpbnQgQnBwID0gbWlwaV9kc2lfcGl4 ZWxfZm9ybWF0X3RvX2JwcChkZXZpY2UtPmZvcm1hdCkgLyA4OworCXUxNiBoYnAsIGhmcCwgaHNh LCBoYmxrLCB2YmxrOworCisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0JBU0lD X0NUTF9SRUcsIDApOworCisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX1NZTkNf SFNTX1JFRywKKwkJICAgICBzdW42aV9kc2lfYnVpbGRfc3luY19wa3QoTUlQSV9EU0lfSF9TWU5D X1NUQVJULAorCQkJCQkgICAgICBkZXZpY2UtPmNoYW5uZWwsCisJCQkJCSAgICAgIDAsIDApKTsK KworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9TWU5DX0hTRV9SRUcsCisJCSAg ICAgc3VuNmlfZHNpX2J1aWxkX3N5bmNfcGt0KE1JUElfRFNJX0hfU1lOQ19FTkQsCisJCQkJCSAg ICAgIGRldmljZS0+Y2hhbm5lbCwKKwkJCQkJICAgICAgMCwgMCkpOworCisJcmVnbWFwX3dyaXRl KGRzaS0+cmVncywgU1VONklfRFNJX1NZTkNfVlNTX1JFRywKKwkJICAgICBzdW42aV9kc2lfYnVp bGRfc3luY19wa3QoTUlQSV9EU0lfVl9TWU5DX1NUQVJULAorCQkJCQkgICAgICBkZXZpY2UtPmNo YW5uZWwsCisJCQkJCSAgICAgIDAsIDApKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNV TjZJX0RTSV9TWU5DX1ZTRV9SRUcsCisJCSAgICAgc3VuNmlfZHNpX2J1aWxkX3N5bmNfcGt0KE1J UElfRFNJX1ZfU1lOQ19FTkQsCisJCQkJCSAgICAgIGRldmljZS0+Y2hhbm5lbCwKKwkJCQkJICAg ICAgMCwgMCkpOworCisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0JBU0lDX1NJ WkUwX1JFRywKKwkJICAgICBTVU42SV9EU0lfQkFTSUNfU0laRTBfVlNBKG1vZGUtPnZzeW5jX2Vu ZCAtCisJCQkJCSAgICAgICBtb2RlLT52c3luY19zdGFydCkgfAorCQkgICAgIFNVTjZJX0RTSV9C QVNJQ19TSVpFMF9WQlAobW9kZS0+dnN5bmNfc3RhcnQgLQorCQkJCQkgICAgICAgbW9kZS0+dmRp c3BsYXkpKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9CQVNJQ19TSVpF MV9SRUcsCisJCSAgICAgU1VONklfRFNJX0JBU0lDX1NJWkUxX1ZBQ1QobW9kZS0+dmRpc3BsYXkp IHwKKwkJICAgICBTVU42SV9EU0lfQkFTSUNfU0laRTFfVlQobW9kZS0+dnRvdGFsKSk7CisKKwkv KgorCSAqIEEgc3luYyBwZXJpb2QgaXMgY29tcG9zZWQgb2YgYSBibGFua2luZyBwYWNrZXQgKDQg Ynl0ZXMgKworCSAqIHBheWxvYWQgKyAyIGJ5dGVzKSBhbmQgYSBzeW5jIGV2ZW50IHBhY2tldCAo NCBieXRlcykuIEl0cworCSAqIG1pbmltYWwgc2l6ZSBpcyB0aGVyZWZvcmUgMTAgYnl0ZXMKKwkg Ki8KKyNkZWZpbmUgSFNBX1BBQ0tFVF9PVkVSSEVBRAkxMAorCWhzYSA9IG1heCgodW5zaWduZWQg aW50KUhTQV9QQUNLRVRfT1ZFUkhFQUQsCisJCSAgKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhz eW5jX3N0YXJ0KSAqIEJwcCAtIEhTQV9QQUNLRVRfT1ZFUkhFQUQpOworCXJlZ21hcF93cml0ZShk c2ktPnJlZ3MsIFNVTjZJX0RTSV9CTEtfSFNBMF9SRUcsCisJCSAgICAgc3VuNmlfZHNpX2J1aWxk X2JsazBfcGt0KGRldmljZS0+Y2hhbm5lbCwgaHNhKSk7CisJcmVnbWFwX3dyaXRlKGRzaS0+cmVn cywgU1VONklfRFNJX0JMS19IU0ExX1JFRywKKwkJICAgICBzdW42aV9kc2lfYnVpbGRfYmxrMV9w a3QoMCwgaHNhKSk7CisKKwkvKgorCSAqIFRoZSBiYWNrcG9yY2ggaXMgc2V0IHVzaW5nIGEgYmxh bmtpbmcgcGFja2V0ICg0IGJ5dGVzICsKKwkgKiBwYXlsb2FkICsgMiBieXRlcykuIEl0cyBtaW5p bWFsIHNpemUgaXMgdGhlcmVmb3JlIDYgYnl0ZXMKKwkgKi8KKyNkZWZpbmUgSEJQX1BBQ0tFVF9P VkVSSEVBRAk2CisJaGJwID0gbWF4KCh1bnNpZ25lZCBpbnQpSEJQX1BBQ0tFVF9PVkVSSEVBRCwK KwkJICAobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgKiBCcHAgLSBIQlBfUEFD S0VUX09WRVJIRUFEKTsKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQkxLX0hC UDBfUkVHLAorCQkgICAgIHN1bjZpX2RzaV9idWlsZF9ibGswX3BrdChkZXZpY2UtPmNoYW5uZWws IGhicCkpOworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9CTEtfSEJQMV9SRUcs CisJCSAgICAgc3VuNmlfZHNpX2J1aWxkX2JsazFfcGt0KDAsIGhicCkpOworCisJLyoKKwkgKiBU aGUgZnJvbnRwb3JjaCBpcyBzZXQgdXNpbmcgYSBibGFua2luZyBwYWNrZXQgKDQgYnl0ZXMgKwor CSAqIHBheWxvYWQgKyAyIGJ5dGVzKS4gSXRzIG1pbmltYWwgc2l6ZSBpcyB0aGVyZWZvcmUgNiBi eXRlcworCSAqLworI2RlZmluZSBIRlBfUEFDS0VUX09WRVJIRUFECTYKKwloZnAgPSBtYXgoKHVu c2lnbmVkIGludClIRlBfUEFDS0VUX09WRVJIRUFELAorCQkgIChtb2RlLT5odG90YWwgLSBtb2Rl LT5oc3luY19lbmQpICogQnBwIC0gSEZQX1BBQ0tFVF9PVkVSSEVBRCk7CisJcmVnbWFwX3dyaXRl KGRzaS0+cmVncywgU1VONklfRFNJX0JMS19IRlAwX1JFRywKKwkJICAgICBzdW42aV9kc2lfYnVp bGRfYmxrMF9wa3QoZGV2aWNlLT5jaGFubmVsLCBoZnApKTsKKwlyZWdtYXBfd3JpdGUoZHNpLT5y ZWdzLCBTVU42SV9EU0lfQkxLX0hGUDFfUkVHLAorCQkgICAgIHN1bjZpX2RzaV9idWlsZF9ibGsx X3BrdCgwLCBoZnApKTsKKworCS8qCisJICogaGJsayBzZWVtcyB0byBiZSB0aGUgbGluZSArIHBv cmNoZXMgbGVuZ3RoLgorCSAqLworCWhibGsgPSBtb2RlLT5odG90YWwgKiBCcHAgLSBoc2E7CisJ cmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0JMS19IQkxLMF9SRUcsCisJCSAgICAg c3VuNmlfZHNpX2J1aWxkX2JsazBfcGt0KGRldmljZS0+Y2hhbm5lbCwgaGJsaykpOworCXJlZ21h cF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9CTEtfSEJMSzFfUkVHLAorCQkgICAgIHN1bjZp X2RzaV9idWlsZF9ibGsxX3BrdCgwLCBoYmxrKSk7CisKKwkvKgorCSAqIEFuZCBJJ20gbm90IGVu dGlyZWx5IHN1cmUgd2hhdCB2YmxrIGlzIGFib3V0LiBUaGUgZHJpdmVyIGluCisJICogQWxsd2lu bmVyIEJTUCBpcyB1c2luZyBhIHJhdGhlciBjb252b2x1dGVkIGNhbGN1bGF0aW9uCisJICogdGhl cmUgb25seSBmb3IgNCBsYW5lcy4gSG93ZXZlciwgdXNpbmcgMCAodGhlICE0IGxhbmVzCisJICog Y2FzZSkgZXZlbiB3aXRoIGEgNCBsYW5lcyBzY3JlZW4gc2VlbXMgdG8gd29yay4uLgorCSAqLwor CXZibGsgPSAwOworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9CTEtfVkJMSzBf UkVHLAorCQkgICAgIHN1bjZpX2RzaV9idWlsZF9ibGswX3BrdChkZXZpY2UtPmNoYW5uZWwsIHZi bGspKTsKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQkxLX1ZCTEsxX1JFRywK KwkJICAgICBzdW42aV9kc2lfYnVpbGRfYmxrMV9wa3QoMCwgdmJsaykpOworfQorCitzdGF0aWMg aW50IHN1bjZpX2RzaV9zdGFydChzdHJ1Y3Qgc3VuNmlfZHNpICpkc2ksCisJCQkgICBlbnVtIHN1 bjZpX2RzaV9zdGFydF9pbnN0IGZ1bmMpCit7CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSBEU0lf U1RBUlRfTFBUWDoKKwkJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0lOU1RfSlVN UF9TRUxfUkVHLAorCQkJICAgICBEU0lfSU5TVF9JRF9MUERUIDw8ICg0ICogRFNJX0lOU1RfSURf TFAxMSkgfAorCQkJICAgICBEU0lfSU5TVF9JRF9FTkQgIDw8ICg0ICogRFNJX0lOU1RfSURfTFBE VCkpOworCQlicmVhazsKKwljYXNlIERTSV9TVEFSVF9MUFJYOgorCQlyZWdtYXBfd3JpdGUoZHNp LT5yZWdzLCBTVU42SV9EU0lfSU5TVF9KVU1QX1NFTF9SRUcsCisJCQkgICAgIERTSV9JTlNUX0lE X0xQRFQgPDwgKDQgKiBEU0lfSU5TVF9JRF9MUDExKSB8CisJCQkgICAgIERTSV9JTlNUX0lEX0RM WSAgPDwgKDQgKiBEU0lfSU5TVF9JRF9MUERUKSB8CisJCQkgICAgIERTSV9JTlNUX0lEX1RCQSAg PDwgKDQgKiBEU0lfSU5TVF9JRF9ETFkpIHwKKwkJCSAgICAgRFNJX0lOU1RfSURfRU5EICA8PCAo NCAqIERTSV9JTlNUX0lEX1RCQSkpOworCQlicmVhazsKKwljYXNlIERTSV9TVEFSVF9IU0M6CisJ CXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9JTlNUX0pVTVBfU0VMX1JFRywKKwkJ CSAgICAgRFNJX0lOU1RfSURfSFNDICA8PCAoNCAqIERTSV9JTlNUX0lEX0xQMTEpIHwKKwkJCSAg ICAgRFNJX0lOU1RfSURfRU5EICA8PCAoNCAqIERTSV9JTlNUX0lEX0hTQykpOworCQlicmVhazsK KwljYXNlIERTSV9TVEFSVF9IU0Q6CisJCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RT SV9JTlNUX0pVTVBfU0VMX1JFRywKKwkJCSAgICAgRFNJX0lOU1RfSURfTk9QICA8PCAoNCAqIERT SV9JTlNUX0lEX0xQMTEpIHwKKwkJCSAgICAgRFNJX0lOU1RfSURfSFNEICA8PCAoNCAqIERTSV9J TlNUX0lEX05PUCkgfAorCQkJICAgICBEU0lfSU5TVF9JRF9ETFkgIDw8ICg0ICogRFNJX0lOU1Rf SURfSFNEKSB8CisJCQkgICAgIERTSV9JTlNUX0lEX05PUCAgPDwgKDQgKiBEU0lfSU5TVF9JRF9E TFkpIHwKKwkJCSAgICAgRFNJX0lOU1RfSURfRU5EICA8PCAoNCAqIERTSV9JTlNUX0lEX0hTQ0VY SVQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VO NklfRFNJX0lOU1RfSlVNUF9TRUxfUkVHLAorCQkJICAgICBEU0lfSU5TVF9JRF9FTkQgIDw8ICg0 ICogRFNJX0lOU1RfSURfTFAxMSkpOworCQlicmVhazsKKwl9CisKKwlzdW42aV9kc2lfaW5zdF9h Ym9ydChkc2kpOworCXN1bjZpX2RzaV9pbnN0X2NvbW1pdChkc2kpOworCisJaWYgKGZ1bmMgPT0g RFNJX1NUQVJUX0hTQykKKwkJcmVnbWFwX3dyaXRlX2JpdHMoZHNpLT5yZWdzLAorCQkJCSAgU1VO NklfRFNJX0lOU1RfRlVOQ19SRUcoRFNJX0lOU1RfSURfTFAxMSksCisJCQkJICBTVU42SV9EU0lf SU5TVF9GVU5DX0xBTkVfQ0VOLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBz dW42aV9kc2lfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmVuY29kZXItPmNydGMtPnN0YXRlLT5h ZGp1c3RlZF9tb2RlOworCXN0cnVjdCBzdW42aV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fc3VuNmlf ZHNpKGVuY29kZXIpOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSA9IGRzaS0+ZGV2 aWNlOworCXUxNiBkZWxheTsKKworCURSTV9ERUJVR19EUklWRVIoIkVuYWJsaW5nIERTSSBvdXRw dXRcbiIpOworCisJcG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7CisKKwlkZWxheSA9IHN1 bjZpX2RzaV9nZXRfdmlkZW9fc3RhcnRfZGVsYXkoZHNpLCBtb2RlKTsKKwlyZWdtYXBfd3JpdGUo ZHNpLT5yZWdzLCBTVU42SV9EU0lfQkFTSUNfQ1RMMV9SRUcsCisJCSAgICAgU1VONklfRFNJX0JB U0lDX0NUTDFfVklERU9fU1RfREVMQVkoZGVsYXkpIHwKKwkJICAgICBTVU42SV9EU0lfQkFTSUNf Q1RMMV9WSURFT19GSUxMIHwKKwkJICAgICBTVU42SV9EU0lfQkFTSUNfQ1RMMV9WSURFT19QUkVD SVNJT04gfAorCQkgICAgIFNVTjZJX0RTSV9CQVNJQ19DVEwxX1ZJREVPX01PREUpOworCisJc3Vu NmlfZHNpX3NldHVwX2J1cnN0KGRzaSwgbW9kZSk7CisJc3VuNmlfZHNpX3NldHVwX2luc3RfbG9v cChkc2ksIG1vZGUpOworCXN1bjZpX2RzaV9zZXR1cF9mb3JtYXQoZHNpLCBtb2RlKTsKKwlzdW42 aV9kc2lfc2V0dXBfdGltaW5ncyhkc2ksIG1vZGUpOworCisJc3VuNmlfZHBoeV9pbml0KGRzaS0+ ZHBoeSwgZGV2aWNlLT5sYW5lcyk7CisJc3VuNmlfZHBoeV9wb3dlcl9vbihkc2ktPmRwaHksIGRl dmljZS0+bGFuZXMpOworCisJaWYgKCFJU19FUlIoZHNpLT5wYW5lbCkpCisJCWRybV9wYW5lbF9w cmVwYXJlKGRzaS0+cGFuZWwpOworCisJLyoKKwkgKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92 ZWQgYWZ0ZXIgdGhlIHN3aXRjaCB0byBIUyBtb2RlLgorCSAqCisJICogVW5mb3J0dW5hdGVseSwg b25jZSBpbiBIUyBtb2RlLCBpdCBzZWVtcyBsaWtlIHdlJ3JlIG5vdAorCSAqIGFibGUgdG8gc2Vu ZCBEQ1MgY29tbWFuZHMgYW55bW9yZSwgd2hpY2ggd291bGQgcHJldmVudCBhbnkKKwkgKiBwYW5l bCB0byBzZW5kIGFueSBEQ1MgY29tbWFuZCBhcyBwYXJ0IGFzIHRoZWlyIGVuYWJsZQorCSAqIG1l dGhvZCwgd2hpY2ggaXMgcXVpdGUgY29tbW9uLgorCSAqCisJICogSSBoYXZlbid0IHNlZW4gYW55 IGFydGlmYWN0IGR1ZSB0byB0aGF0IHN1Yi1vcHRpbWFsCisJICogb3JkZXJpbmcgb24gdGhlIHBh bmVscyBJJ3ZlIHRlc3RlZCBpdCB3aXRoLCBzbyBJIGd1ZXNzIHRoaXMKKwkgKiB3aWxsIGRvIGZv ciBub3csIHVudGlsIHRoYXQgSVAgaXMgYmV0dGVyIHVuZGVyc3Rvb2QuCisJICovCisJaWYgKCFJ U19FUlIoZHNpLT5wYW5lbCkpCisJCWRybV9wYW5lbF9lbmFibGUoZHNpLT5wYW5lbCk7CisKKwlz dW42aV9kc2lfc3RhcnQoZHNpLCBEU0lfU1RBUlRfSFNDKTsKKworCXVkZWxheSgxMDAwKTsKKwor CXN1bjZpX2RzaV9zdGFydChkc2ksIERTSV9TVEFSVF9IU0QpOworfQorCitzdGF0aWMgdm9pZCBz dW42aV9kc2lfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sK KwlzdHJ1Y3Qgc3VuNmlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX3N1bjZpX2RzaShlbmNvZGVyKTsK KworCURSTV9ERUJVR19EUklWRVIoIkRpc2FibGluZyBEU0kgb3V0cHV0XG4iKTsKKworCWlmICgh SVNfRVJSKGRzaS0+cGFuZWwpKSB7CisJCWRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpOwor CQlkcm1fcGFuZWxfdW5wcmVwYXJlKGRzaS0+cGFuZWwpOworCX0KKworCXN1bjZpX2RwaHlfcG93 ZXJfb2ZmKGRzaS0+ZHBoeSk7CisJc3VuNmlfZHBoeV9leGl0KGRzaS0+ZHBoeSk7CisKKwlwbV9y dW50aW1lX3B1dChkc2ktPmRldik7Cit9CisKK3N0YXRpYyBpbnQgc3VuNmlfZHNpX2dldF9tb2Rl cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBzdW42aV9kc2kg KmRzaSA9IGNvbm5lY3Rvcl90b19zdW42aV9kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBkcm1f cGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzIHN1bjZpX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewor CS5nZXRfbW9kZXMJPSBzdW42aV9kc2lfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMKK3N1bjZpX2RzaV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3Mgc3VuNmlfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZGV0ZWN0CQkJPSBzdW42aV9k c2lfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcwkJPSBkcm1faGVscGVyX3Byb2JlX3Np bmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kJCT0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVw LAorCS5yZXNldAkJCT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0 ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29k ZXJfaGVscGVyX2Z1bmNzIHN1bjZpX2RzaV9lbmNfaGVscGVyX2Z1bmNzID0geworCS5kaXNhYmxl CT0gc3VuNmlfZHNpX2VuY29kZXJfZGlzYWJsZSwKKwkuZW5hYmxlCQk9IHN1bjZpX2RzaV9lbmNv ZGVyX2VuYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3Mg c3VuNmlfZHNpX2VuY19mdW5jcyA9IHsKKwkuZGVzdHJveQk9IGRybV9lbmNvZGVyX2NsZWFudXAs Cit9OworCitzdGF0aWMgdTMyIHN1bjZpX2RzaV9kY3NfYnVpbGRfcGt0X2hkcihzdHJ1Y3Qgc3Vu NmlfZHNpICpkc2ksCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykK K3sKKwl1MzIgcGt0ID0gbXNnLT50eXBlOworCisJaWYgKG1zZy0+dHlwZSA9PSBNSVBJX0RTSV9E Q1NfTE9OR19XUklURSkgeworCQlwa3QgfD0gKChtc2ctPnR4X2xlbiArIDEpICYgMHhmZmZmKSA8 PCA4OworCQlwa3QgfD0gKCgobXNnLT50eF9sZW4gKyAxKSA+PiA4KSAmIDB4ZmZmZikgPDwgMTY7 CisJfSBlbHNlIHsKKwkJcGt0IHw9ICgoKHU4ICopbXNnLT50eF9idWYpWzBdIDw8IDgpOworCQlp ZiAobXNnLT50eF9sZW4gPiAxKQorCQkJcGt0IHw9ICgoKHU4ICopbXNnLT50eF9idWYpWzFdIDw8 IDE2KTsKKwl9CisKKwlwa3QgfD0gc3VuNmlfZHNpX2VjY19jb21wdXRlKHBrdCkgPDwgMjQ7CisK KwlyZXR1cm4gcGt0OworfQorCitzdGF0aWMgaW50IHN1bjZpX2RzaV9kY3Nfd3JpdGVfc2hvcnQo c3RydWN0IHN1bjZpX2RzaSAqZHNpLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21z ZyAqbXNnKQoreworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9DTURfVFhfUkVH KDApLAorCQkgICAgIHN1bjZpX2RzaV9kY3NfYnVpbGRfcGt0X2hkcihkc2ksIG1zZykpOworCXJl Z21hcF93cml0ZV9iaXRzKGRzaS0+cmVncywgU1VONklfRFNJX0NNRF9DVExfUkVHLAorCQkJICAw eGZmLCAoNCAtIDEpKTsKKworCXN1bjZpX2RzaV9zdGFydChkc2ksIERTSV9TVEFSVF9MUFRYKTsK KworCXJldHVybiBtc2ctPnR4X2xlbjsKK30KKworc3RhdGljIGludCBzdW42aV9kc2lfZGNzX3dy aXRlX2xvbmcoc3RydWN0IHN1bjZpX2RzaSAqZHNpLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbWlw aV9kc2lfbXNnICptc2cpCit7CisJaW50IHJldCwgbGVuID0gMDsKKwl1OCAqYm91bmNlOworCXUx NiBjcmM7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQ01EX1RYX1JFRygw KSwKKwkJICAgICBzdW42aV9kc2lfZGNzX2J1aWxkX3BrdF9oZHIoZHNpLCBtc2cpKTsKKworCWJv dW5jZSA9IGt6YWxsb2MobXNnLT50eF9sZW4gKyBzaXplb2YoY3JjKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFib3VuY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KGJvdW5jZSwgbXNnLT50 eF9idWYsIG1zZy0+dHhfbGVuKTsKKwlsZW4gKz0gbXNnLT50eF9sZW47CisKKwljcmMgPSBzdW42 aV9kc2lfY3JjX2NvbXB1dGUoYm91bmNlLCBtc2ctPnR4X2xlbik7CisJbWVtY3B5KCh1OCAqKWJv dW5jZSArIG1zZy0+dHhfbGVuLCAmY3JjLCBzaXplb2YoY3JjKSk7CisJbGVuICs9IHNpemVvZihj cmMpOworCisJcmVnbWFwX2J1bGtfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQ01EX1RYX1JF RygxKSwgYm91bmNlLCBsZW4pOworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9D TURfQ1RMX1JFRywgbGVuICsgNCAtIDEpOworCWtmcmVlKGJvdW5jZSk7CisKKwlzdW42aV9kc2lf c3RhcnQoZHNpLCBEU0lfU1RBUlRfTFBUWCk7CisKKwlyZXQgPSBzdW42aV9kc2lfaW5zdF93YWl0 X2Zvcl9jb21wbGV0aW9uKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJc3VuNmlfZHNpX2luc3Rf YWJvcnQoZHNpKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIFRPRE86IFRoZXJlJ3Mg c29tZSBiaXRzIChyZWcgMHgyMDAsIGJpdHMgOC85KSB0aGF0CisJICogYXBwYXJlbnRseSBjYW4g YmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIGhhdmUgYmVlbgorCSAqIHNlbnQsIGJ1 dCBJIGNvdWxkbid0IGdldCBpdCB0byB3b3JrIHJlbGlhYmx5LgorCSAqLworCXJldHVybiBtc2ct PnR4X2xlbjsKK30KKworc3RhdGljIGludCBzdW42aV9kc2lfZGNzX3JlYWQoc3RydWN0IHN1bjZp X2RzaSAqZHNpLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQorewor CXUzMiB2YWw7CisJaW50IHJldDsKKwl1OCBieXRlMDsKKworCXJlZ21hcF93cml0ZShkc2ktPnJl Z3MsIFNVTjZJX0RTSV9DTURfVFhfUkVHKDApLAorCQkgICAgIHN1bjZpX2RzaV9kY3NfYnVpbGRf cGt0X2hkcihkc2ksIG1zZykpOworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9D TURfQ1RMX1JFRywKKwkJICAgICAoNCAtIDEpKTsKKworCXN1bjZpX2RzaV9zdGFydChkc2ksIERT SV9TVEFSVF9MUFJYKTsKKworCXJldCA9IHN1bjZpX2RzaV9pbnN0X3dhaXRfZm9yX2NvbXBsZXRp b24oZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdW42aV9kc2lfaW5zdF9hYm9ydChkc2kpOwor CQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogVE9ETzogVGhlcmUncyBzb21lIGJpdHMgKHJl ZyAweDIwMCwgYml0cyAyNC8yNSkgdGhhdAorCSAqIGFwcGFyZW50bHkgY2FuIGJlIHVzZWQgdG8g Y2hlY2sgd2hldGhlciB0aGUgZGF0YSBoYXZlIGJlZW4KKwkgKiByZWNlaXZlZCwgYnV0IEkgY291 bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgcmVsaWFibHkuCisJICovCisJcmVnbWFwX3JlYWQoZHNpLT5y ZWdzLCBTVU42SV9EU0lfQ01EX0NUTF9SRUcsICZ2YWwpOworCWlmICh2YWwgJiBTVU42SV9EU0lf Q01EX0NUTF9SWF9PVkVSRkxPVykKKwkJcmV0dXJuIC1FSU87CisKKwlyZWdtYXBfcmVhZChkc2kt PnJlZ3MsIFNVTjZJX0RTSV9DTURfUlhfUkVHKDApLCAmdmFsKTsKKwlieXRlMCA9IHZhbCAmIDB4 ZmY7CisJaWYgKGJ5dGUwID09IE1JUElfRFNJX1JYX0FDS05PV0xFREdFX0FORF9FUlJPUl9SRVBP UlQpCisJCXJldHVybiAtRUlPOworCisJKCh1OCAqKW1zZy0+cnhfYnVmKVswXSA9ICh2YWwgPj4g OCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzdW42aV9kc2lfYXR0YWNoKHN0cnVj dCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRl dmljZSkKK3sKKwlzdHJ1Y3Qgc3VuNmlfZHNpICpkc2kgPSBob3N0X3RvX3N1bjZpX2RzaShob3N0 KTsKKworCWRzaS0+ZGV2aWNlID0gZGV2aWNlOworCWRzaS0+cGFuZWwgPSBvZl9kcm1fZmluZF9w YW5lbChkZXZpY2UtPmRldi5vZl9ub2RlKTsKKwlpZiAoIWRzaS0+cGFuZWwpCisJCXJldHVybiAt RUlOVkFMOworCisJZGV2X2luZm8oaG9zdC0+ZGV2LCAiQXR0YWNoZWQgZGV2aWNlICVzXG4iLCBk ZXZpY2UtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VuNmlfZHNpX2Rl dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICBzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHN1bjZpX2RzaSAqZHNpID0gaG9zdF90b19zdW42 aV9kc2koaG9zdCk7CisKKwlkc2ktPnBhbmVsID0gTlVMTDsKKwlkc2ktPmRldmljZSA9IE5VTEw7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3VuNmlfZHNpX3RyYW5zZmVyKHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21z ZyAqbXNnKQoreworCXN0cnVjdCBzdW42aV9kc2kgKmRzaSA9IGhvc3RfdG9fc3VuNmlfZHNpKGhv c3QpOworCWludCByZXQ7CisKKwlyZXQgPSBzdW42aV9kc2lfaW5zdF93YWl0X2Zvcl9jb21wbGV0 aW9uKGRzaSk7CisJaWYgKHJldCA8IDApCisJCXN1bjZpX2RzaV9pbnN0X2Fib3J0KGRzaSk7CisK KwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQ01EX0NUTF9SRUcsCisJCSAgICAg U1VONklfRFNJX0NNRF9DVExfUlhfT1ZFUkZMT1cgfAorCQkgICAgIFNVTjZJX0RTSV9DTURfQ1RM X1JYX0ZMQUcgfAorCQkgICAgIFNVTjZJX0RTSV9DTURfQ1RMX1RYX0ZMQUcpOworCisJc3dpdGNo IChtc2ctPnR5cGUpIHsKKwljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURToKKwljYXNlIE1J UElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTToKKwkJcmV0ID0gc3VuNmlfZHNpX2Rjc193cml0 ZV9zaG9ydChkc2ksIG1zZyk7CisJCWJyZWFrOworCisJY2FzZSBNSVBJX0RTSV9EQ1NfTE9OR19X UklURToKKwkJcmV0ID0gc3VuNmlfZHNpX2Rjc193cml0ZV9sb25nKGRzaSwgbXNnKTsKKwkJYnJl YWs7CisKKwljYXNlIE1JUElfRFNJX0RDU19SRUFEOgorCQlpZiAobXNnLT5yeF9sZW4gPT0gMSkg eworCQkJcmV0ID0gc3VuNmlfZHNpX2Rjc19yZWFkKGRzaSwgbXNnKTsKKwkJCWJyZWFrOworCQl9 CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgc3VuNmlfZHNpX2hvc3Rfb3Bz ID0geworCS5hdHRhY2gJCT0gc3VuNmlfZHNpX2F0dGFjaCwKKwkuZGV0YWNoCQk9IHN1bjZpX2Rz aV9kZXRhY2gsCisJLnRyYW5zZmVyCT0gc3VuNmlfZHNpX3RyYW5zZmVyLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHN1bjZpX2RzaV9yZWdtYXBfY29uZmlnID0gewor CS5yZWdfYml0cwk9IDMyLAorCS52YWxfYml0cwk9IDMyLAorCS5yZWdfc3RyaWRlCT0gNCwKKwku bWF4X3JlZ2lzdGVyCT0gU1VONklfRFNJX0NNRF9UWF9SRUcoMjU1KSwKKwkubmFtZQkJPSAibWlw aS1kc2kiLAorfTsKKworc3RhdGljIGludCBzdW42aV9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBzdW40aV9kcnYgKmRydiA9IGRybS0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IHN1bjZpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CisJaW50IHJldDsKKworCWlmICghZHNpLT5wYW5lbCkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7 CisKKwlkc2ktPmRydiA9IGRydjsKKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRzaS0+ZW5j b2RlciwKKwkJCSAgICAgICAmc3VuNmlfZHNpX2VuY19oZWxwZXJfZnVuY3MpOworCXJldCA9IGRy bV9lbmNvZGVyX2luaXQoZHJtLAorCQkJICAgICAgICZkc2ktPmVuY29kZXIsCisJCQkgICAgICAg JnN1bjZpX2RzaV9lbmNfZnVuY3MsCisJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9EU0ksCisJ CQkgICAgICAgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiQ291bGRu J3QgaW5pdGlhbGlzZSB0aGUgRFNJIGVuY29kZXJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlk c2ktPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSBCSVQoMCk7CisKKwlkcm1fY29ubmVjdG9yX2hl bHBlcl9hZGQoJmRzaS0+Y29ubmVjdG9yLAorCQkJCSAmc3VuNmlfZHNpX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MpOworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcm0sICZkc2ktPmNvbm5lY3Rv ciwKKwkJCQkgJnN1bjZpX2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5F Q1RPUl9EU0kpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwKKwkJCSJDb3VsZG4n dCBpbml0aWFsaXNlIHRoZSBEU0kgY29ubmVjdG9yXG4iKTsKKwkJZ290byBlcnJfY2xlYW51cF9j b25uZWN0b3I7CisJfQorCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2kt PmNvbm5lY3RvciwgJmRzaS0+ZW5jb2Rlcik7CisJZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVs LCAmZHNpLT5jb25uZWN0b3IpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVwX2Nvbm5lY3Rv cjoKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIHN1bjZpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3VuNmlf ZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRybV9wYW5lbF9kZXRhY2goZHNp LT5wYW5lbCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBzdW42aV9k c2lfb3BzID0geworCS5iaW5kCT0gc3VuNmlfZHNpX2JpbmQsCisJLnVuYmluZAk9IHN1bjZpX2Rz aV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IHN1bjZpX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJ c3RydWN0IGRldmljZV9ub2RlICpkcGh5X25vZGU7CisJc3RydWN0IHN1bjZpX2RzaSAqZHNpOwor CXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgcmV0Owor CisJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWRzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHNpKTsK Kwlkc2ktPmRldiA9IGRldjsKKwlkc2ktPmhvc3Qub3BzID0gJnN1bjZpX2RzaV9ob3N0X29wczsK Kwlkc2ktPmhvc3QuZGV2ID0gZGV2OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBk ZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwliYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVzKTsKKwlpZiAoSVNfRVJSKGJhc2UpKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3Qg bWFwIHRoZSBEU0kgZW5jb2RlciByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihiYXNl KTsKKwl9CisKKwlkc2ktPnJlZ3MgPSBkZXZtX3JlZ21hcF9pbml0X21taW9fY2xrKGRldiwgImJ1 cyIsIGJhc2UsCisJCQkJCSAgICAgICZzdW42aV9kc2lfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElT X0VSUihkc2ktPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgY3JlYXRlIHRoZSBE U0kgZW5jb2RlciByZWdtYXBcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkc2ktPnJlZ3MpOworCX0K KworCWRzaS0+cmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X3NoYXJlZChkZXYsIE5VTEwp OworCWlmIChJU19FUlIoZHNpLT5yZXNldCkpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBn ZXQgb3VyIHJlc2V0IGxpbmVcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkc2ktPnJlc2V0KTsKKwl9 CisKKwlkc2ktPm1vZF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAibW9kIik7CisJaWYgKElTX0VS Uihkc2ktPm1vZF9jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IHRoZSBEU0kg bW9kIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5tb2RfY2xrKTsKKwl9CisKKwkv KgorCSAqIEluIG9yZGVyIHRvIG9wZXJhdGUgcHJvcGVybHksIHRoYXQgY2xvY2sgc2VlbXMgdG8g YmUgYWx3YXlzCisJICogc2V0IHRvIDI5N01Iei4KKwkgKi8KKwljbGtfc2V0X3JhdGVfZXhjbHVz aXZlKGRzaS0+bW9kX2NsaywgMjk3MDAwMDAwKTsKKworCWRwaHlfbm9kZSA9IG9mX3BhcnNlX3Bo YW5kbGUoZGV2LT5vZl9ub2RlLCAicGh5cyIsIDApOworCXJldCA9IHN1bjZpX2RwaHlfcHJvYmUo ZHNpLCBkcGh5X25vZGUpOworCW9mX25vZGVfcHV0KGRwaHlfbm9kZSk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGdldCB0aGUgTUlQSSBELVBIWVxuIik7CisJCWdvdG8g ZXJyX3VucHJvdGVjdF9jbGs7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXJl dCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+aG9zdCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIE1JUEktRFNJIGhvc3RcbiIpOworCQlnb3Rv IGVycl9yZW1vdmVfcGh5OworCX0KKworCXJldCA9IGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwg JnN1bjZpX2RzaV9vcHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBy ZWdpc3RlciBvdXIgY29tcG9uZW50XG4iKTsKKwkJZ290byBlcnJfcmVtb3ZlX2RzaV9ob3N0Owor CX0KKworCXJldHVybiAwOworCitlcnJfcmVtb3ZlX2RzaV9ob3N0OgorCW1pcGlfZHNpX2hvc3Rf dW5yZWdpc3RlcigmZHNpLT5ob3N0KTsKK2Vycl9yZW1vdmVfcGh5OgorCXBtX3J1bnRpbWVfZGlz YWJsZShkZXYpOworCXN1bjZpX2RwaHlfcmVtb3ZlKGRzaSk7CitlcnJfdW5wcm90ZWN0X2NsazoK KwljbGtfcmF0ZV9leGNsdXNpdmVfcHV0KGRzaS0+bW9kX2Nsayk7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBzdW42aV9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3Qgc3VuNmlf ZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNvbXBvbmVudF9kZWwoJnBkZXYt PmRldiwgJnN1bjZpX2RzaV9vcHMpOworCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5o b3N0KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKKwlzdW42aV9kcGh5X3JlbW92ZShkc2kp OworCWNsa19yYXRlX2V4Y2x1c2l2ZV9wdXQoZHNpLT5tb2RfY2xrKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHN1bjZpX2RzaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IHN1bjZpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisK KwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGRzaS0+cmVzZXQpOworCWNsa19wcmVwYXJlX2VuYWJs ZShkc2ktPm1vZF9jbGspOworCisJLyoKKwkgKiBFbmFibGUgdGhlIERTSSBibG9jay4KKwkgKgor CSAqIFNvbWUgcGFydCBvZiBpdCBjYW4gb25seSBiZSBkb25lIG9uY2Ugd2UgZ2V0IGEgbnVtYmVy IG9mCisJICogbGFuZXMsIHNlZSBzdW42aV9kc2lfaW5zdF9pbml0CisJICovCisJcmVnbWFwX3dy aXRlKGRzaS0+cmVncywgU1VONklfRFNJX0NUTF9SRUcsIFNVTjZJX0RTSV9DVExfRU4pOworCisJ cmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0JBU0lDX0NUTDBfUkVHLAorCQkgICAg IFNVTjZJX0RTSV9CQVNJQ19DVEwwX0VDQ19FTiB8IFNVTjZJX0RTSV9CQVNJQ19DVEwwX0NSQ19F Tik7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfVFJBTlNfU1RBUlRfUkVH LCAxMCk7CisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX1RSQU5TX1pFUk9fUkVH LCAwKTsKKworCWlmIChkc2ktPmRldmljZSkKKwkJc3VuNmlfZHNpX2luc3RfaW5pdChkc2ksIGRz aS0+ZGV2aWNlKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9ERUJVR19E QVRBX1JFRywgMHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdW42aV9kc2lf cnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3VuNmlfZHNp ICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShk c2ktPm1vZF9jbGspOworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+cmVzZXQpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdW42aV9kc2lfcG1f b3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyhzdW42aV9kc2lfcnVudGltZV9zdXNwZW5kLAor CQkJICAgc3VuNmlfZHNpX3J1bnRpbWVfcmVzdW1lLAorCQkJICAgTlVMTCkKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjZpX2RzaV9vZl90YWJsZVtdID0geworCXsg LmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1taXBpLWRzaSIgfSwKKwl7IH0KK307 CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW42aV9kc2lfb2ZfdGFibGUpOworCitzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW42aV9kc2lfcGxhdGZvcm1fZHJpdmVyID0geworCS5w cm9iZQkJPSBzdW42aV9kc2lfcHJvYmUsCisJLnJlbW92ZQkJPSBzdW42aV9kc2lfcmVtb3ZlLAor CS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAic3VuNmktbWlwaS1kc2kiLAorCQkub2ZfbWF0Y2hf dGFibGUJPSBzdW42aV9kc2lfb2ZfdGFibGUsCisJCS5wbQkJPSAmc3VuNmlfZHNpX3BtX29wcywK Kwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNmlfZHNpX3BsYXRmb3JtX2RyaXZl cik7CisKK01PRFVMRV9BVVRIT1IoIk1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1l bGVjdHJvbnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbGx3aW5uZXIgQTMxIERTSSBE cml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9zdW40aS9zdW42aV9taXBpX2RzaS5oIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZp X21pcGlfZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42Mzhm ZWMzNzRhODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlf bWlwaV9kc2kuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFs bHdpbm5lcnRlY2ggQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgRnJlZSBFbGVjdHJv bnMKKyAqCisgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNv bT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX1NVTjZJ X01JUElfRFNJX0hfCisjZGVmaW5lIF9TVU42SV9NSVBJX0RTSV9IXworCisjaW5jbHVkZSA8ZHJt L2RybV9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX21pcGlfZHNpLmg+CisKK3N0cnVjdCBzdW42aV9kcGh5IHsKKwlzdHJ1Y3QgY2xr CQkqYnVzX2NsazsKKwlzdHJ1Y3QgY2xrCQkqbW9kX2NsazsKKwlzdHJ1Y3QgcmVnbWFwCQkqcmVn czsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbAkqcmVzZXQ7Cit9OworCitzdHJ1Y3Qgc3VuNmlfZHNp IHsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcgljb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVy CWVuY29kZXI7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QJaG9zdDsKKworCXN0cnVjdCBjbGsJCSpi dXNfY2xrOworCXN0cnVjdCBjbGsJCSptb2RfY2xrOworCXN0cnVjdCByZWdtYXAJCSpyZWdzOwor CXN0cnVjdCByZXNldF9jb250cm9sCSpyZXNldDsKKwlzdHJ1Y3Qgc3VuNmlfZHBoeQkqZHBoeTsK KworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IHN1bjRpX2RydgkqZHJ2OworCXN0cnVj dCBtaXBpX2RzaV9kZXZpY2UJKmRldmljZTsKKwlzdHJ1Y3QgZHJtX3BhbmVsCSpwYW5lbDsKK307 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1bjZpX2RzaSAqaG9zdF90b19zdW42aV9kc2koc3Ry dWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihob3N0LCBz dHJ1Y3Qgc3VuNmlfZHNpLCBob3N0KTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1bjZp X2RzaSAqY29ubmVjdG9yX3RvX3N1bjZpX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3Qgc3VuNmlfZHNp LCBjb25uZWN0b3IpOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3VuNmlfZHNpICplbmNv ZGVyX3RvX3N1bjZpX2RzaShjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJ cmV0dXJuIGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3Qgc3VuNmlfZHNpLCBlbmNvZGVyKTsK K307CisKK2ludCBzdW42aV9kcGh5X3Byb2JlKHN0cnVjdCBzdW42aV9kc2kgKmRzaSwgc3RydWN0 IGRldmljZV9ub2RlICpub2RlKTsKK2ludCBzdW42aV9kcGh5X3JlbW92ZShzdHJ1Y3Qgc3VuNmlf ZHNpICpkc2kpOworCitpbnQgc3VuNmlfZHBoeV9pbml0KHN0cnVjdCBzdW42aV9kcGh5ICpkcGh5 LCB1bnNpZ25lZCBpbnQgbGFuZXMpOworaW50IHN1bjZpX2RwaHlfcG93ZXJfb24oc3RydWN0IHN1 bjZpX2RwaHkgKmRwaHksIHVuc2lnbmVkIGludCBsYW5lcyk7CitpbnQgc3VuNmlfZHBoeV9wb3dl cl9vZmYoc3RydWN0IHN1bjZpX2RwaHkgKmRwaHkpOworaW50IHN1bjZpX2RwaHlfZXhpdChzdHJ1 Y3Qgc3VuNmlfZHBoeSAqZHBoeSk7CisKKyNlbmRpZiAvKiBfU1VONklfTUlQSV9EU0lfSF8gKi8K LS0gCmdpdC1zZXJpZXMgMC45LjEKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==