From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [PATCH 12/18] drm/sun4i: Add Allwinner A31 MIPI-DSI controller support Date: Thu, 13 Jul 2017 16:13:07 +0200 Message-ID: <55729048aa9c57b46ed3f8d284eec2fbf5f1ae6a.1499955058.git-series.maxime.ripard@free-electrons.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.free-electrons.com (mail.free-electrons.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F0B06E611 for ; Thu, 13 Jul 2017 14:13:17 +0000 (UTC) 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: Mark Brown , Thierry Reding , Laurent Pinchart , Chen-Yu Tsai , Maxime Ripard Cc: Mark Rutland , devicetree@vger.kernel.org, Boris Brezillon , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , Daniel Vetter , Thomas Petazzoni , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org TW9zdCBvZiB0aGUgQWxsd2lubmVyIFNvQ3Mgc2luY2UgdGhlIEEzMSBzaGFyZSB0aGUgc2FtZSBN SVBJLURTSQpjb250cm9sbGVyLgoKV2hpbGUgdGhhdCBjb250cm9sbGVyIGlzIG1vc3RseSB1bmRv Y3VtZW50ZWQsIHRoZSBjb2RlIGlzIG91dCB0aGVyZSBhbmQgaGFzCmJlZW4gY2xlYW5lZCB1cCBp biBvcmRlciB0byBiZSBpbnRlZ3JhdGVkIGludG8gRFJNLiBIb3dldmVyLCB0aGVyZSdzIHN0aWxs CnNvbWUgZGFyayBhcmVhcyB0aGF0IGFyZSBhIGJpdCB1bmNsZWFyIGFib3V0IGhvdyB0aGUgYmxv Y2sgZXhhY3RseQpvcGVyYXRlcy4KClNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGlt ZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9L Y29uZmlnICAgICAgICAgICB8ICAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmls ZSAgICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29uLmMg ICAgICB8ICAgOTkgKystCiBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5oICAgICAg fCAgIDQyICstCiBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlfbWlwaV9kcGh5LmMgfCAgMjk3 ICsrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9taXBpX2RzaS5jICB8IDEwOTgg KysrKysrKysrKysrKysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21p cGlfZHNpLmggIHwgICA2NyArLQogNyBmaWxlcyBjaGFuZ2VkLCAxNjE3IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc3VuNGkv c3VuNmlfbWlwaV9kcGh5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc3Vu NGkvc3VuNmlfbWlwaV9kc2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9z dW40aS9zdW42aV9taXBpX2RzaS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRp L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvS2NvbmZpZwppbmRleCA1Y2MxMTY2OTI5 MTMuLjc2YTE1NzE2ODAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL0tjb25m aWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL0tjb25maWcKQEAgLTMxLDYgKzMxLDE2IEBA IGNvbmZpZyBEUk1fU1VONElfQkFDS0VORAogCSAgZG8gc29tZSBhbHBoYSBibGVuZGluZyBhbmQg ZmVlZCBncmFwaGljcyB0byBUQ09OLiBJZiBNIGlzCiAJICBzZWxlY3RlZCB0aGUgbW9kdWxlIHdp bGwgYmUgY2FsbGVkIHN1bjRpLWJhY2tlbmQuCiAKK2NvbmZpZyBEUk1fU1VONklfRFNJCisJdHJp c3RhdGUgIkFsbHdpbm5lciBBMzEgTUlQSS1EU0kgQ29udHJvbGxlciBTdXBwb3J0IgorCWRlZmF1 bHQgTUFDSF9TVU44SQorCXNlbGVjdCBDUkNfQ0NJVFQKKwlzZWxlY3QgRFJNX01JUElfRFNJCisJ aGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGhhdmUgYW4gQWxsd2lubmVy IFNvQyB3aXRoCisJICBNSVBJLURTSSBzdXBwb3J0LiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1 bGUgd2lsbCBiZSBjYWxsZWQKKwkgIHN1bjZpLWRzaQorCiBjb25maWcgRFJNX1NVTjhJX01JWEVS CiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEFsbHdpbm5lciBEaXNwbGF5IEVuZ2luZSAyLjAgTWl4 ZXIiCiAJZGVmYXVsdCBNQUNIX1NVTjhJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3Vu NGkvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvTWFrZWZpbGUKaW5kZXggNDI4NzFl ZTdhY2Y2Li5iOTM1MzZlZjcwMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvTWFrZWZpbGUKQEAgLTEyLDEyICsx MiwxNSBAQCBzdW40aS10Y29uLXkJCQkrPSBzdW40aV9yZ2Iubwogc3VuNGktdGNvbi15CQkJKz0g c3VuNGlfZG90Y2xvY2subwogc3VuNGktdGNvbi15CQkJKz0gc3VuNGlfY3J0Yy5vCiAKK3N1bjZp LWRzaS15CQkJKz0gc3VuNmlfbWlwaV9kcGh5Lm8KK3N1bjZpLWRzaS15CQkJKz0gc3VuNmlfbWlw aV9kc2kubworCiBzdW44aS1taXhlci15CQkJKz0gc3VuOGlfbWl4ZXIubyBzdW44aV9sYXllci5v CiAKIG9iai0kKENPTkZJR19EUk1fU1VONEkpCQkrPSBzdW40aS1kcm0ubyBzdW40aS10Y29uLm8K IG9iai0kKENPTkZJR19EUk1fU1VONEkpCQkrPSBzdW42aV9kcmMubwogb2JqLSQoQ09ORklHX0RS TV9TVU40SSkJCSs9IHN1bjRpX3R2Lm8KLQogb2JqLSQoQ09ORklHX0RSTV9TVU40SV9CQUNLRU5E KQkrPSBzdW40aS1iYWNrZW5kLm8KIG9iai0kKENPTkZJR19EUk1fU1VONElfSERNSSkJKz0gc3Vu NGktZHJtLWhkbWkubworb2JqLSQoQ09ORklHX0RSTV9TVU42SV9EU0kpCSs9IHN1bjZpLWRzaS5v CiBvYmotJChDT05GSUdfRFJNX1NVTjhJX01JWEVSKQkrPSBzdW44aS1taXhlci5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5jIGIvZHJpdmVycy9ncHUvZHJt L3N1bjRpL3N1bjRpX3Rjb24uYwppbmRleCBmMDUxODYyZDYzNWUuLmQxMWJjOWUwZDM5ZCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24uYworKysgYi9kcml2ZXJz L2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi c3VuNGlfZHJ2LmgiCiAjaW5jbHVkZSAic3VuNGlfcmdiLmgiCiAjaW5jbHVkZSAic3VuNGlfdGNv bi5oIgorI2luY2x1ZGUgInN1bjZpX21pcGlfZHNpLmgiCiAjaW5jbHVkZSAic3VueGlfZW5naW5l LmgiCiAKIHN0YXRpYyB2b2lkIHN1bjRpX3Rjb25fY2hhbm5lbF9zZXRfc3RhdHVzKHN0cnVjdCBz dW40aV90Y29uICp0Y29uLCBpbnQgY2hhbm5lbCwKQEAgLTcwLDYgKzcxLDcgQEAgdm9pZCBzdW40 aV90Y29uX3NldF9zdGF0dXMoc3RydWN0IHN1bjRpX3Rjb24gKnRjb24sCiAJaW50IGNoYW5uZWw7 CiAKIAlzd2l0Y2ggKGVuY29kZXItPmVuY29kZXJfdHlwZSkgeworCWNhc2UgRFJNX01PREVfRU5D T0RFUl9EU0k6CiAJY2FzZSBEUk1fTU9ERV9FTkNPREVSX05PTkU6CiAJCWNoYW5uZWwgPSAwOwog CQlicmVhazsKQEAgLTEyNSw2ICsxMjcsMjkgQEAgc3RhdGljIGludCBzdW40aV90Y29uX2dldF9j bGtfZGVsYXkoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJcmV0dXJuIGRlbGF5Owog fQogCitzdGF0aWMgdm9pZCBzdW40aV90Y29uMF9mcmFtZV9jb250cm9sX2VuYWJsZShzdHJ1Y3Qg c3VuNGlfdGNvbiAqdGNvbikKK3sKKwlyZWdtYXBfd3JpdGUodGNvbi0+cmVncywgU1VONElfVENP Tl9GUk1fU0VFRF9QUl9SRUcsIDEpOworCXJlZ21hcF93cml0ZSh0Y29uLT5yZWdzLCBTVU40SV9U Q09OX0ZSTV9TRUVEX1BHX1JFRywgMyk7CisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJ X1RDT05fRlJNX1NFRURfUEJfUkVHLCA1KTsKKwlyZWdtYXBfd3JpdGUodGNvbi0+cmVncywgU1VO NElfVENPTl9GUk1fU0VFRF9MUl9SRUcsIDcpOworCXJlZ21hcF93cml0ZSh0Y29uLT5yZWdzLCBT VU40SV9UQ09OX0ZSTV9TRUVEX0xHX1JFRywgMTEpOworCXJlZ21hcF93cml0ZSh0Y29uLT5yZWdz LCBTVU40SV9UQ09OX0ZSTV9TRUVEX0xCX1JFRywgMTMpOworCisJcmVnbWFwX3dyaXRlKHRjb24t PnJlZ3MsIFNVTjRJX1RDT05fRlJNX1RCTDBfUkVHLCAweDAxMDEwMDAwKTsKKwlyZWdtYXBfd3Jp dGUodGNvbi0+cmVncywgU1VONElfVENPTl9GUk1fVEJMMV9SRUcsIDB4MTUxNTExMTEpOworCXJl Z21hcF93cml0ZSh0Y29uLT5yZWdzLCBTVU40SV9UQ09OX0ZSTV9UQkwyX1JFRywgMHg1NzU3NTU1 NSk7CisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT05fRlJNX1RCTDNfUkVHLCAw eDdmN2Y3Nzc3KTsKKworCS8qCisJICogRklYTUU6IFRoaXMgc2VlbXMgdG8gb25seSBiZSB0aGUg Y2FzZSBmb3IgUkdCNjY2LCBidXQgaXQncworCSAqIG5vdCBjbGVhciB3aGVuIHRoZSBUQ09OIHNo b3VsZCBiZSBzZXR1cCB0byBzb21ldGhpbmcKKwkgKiBkaWZmZXJlbnQKKwkgKi8KKwlyZWdtYXBf d3JpdGUodGNvbi0+cmVncywgU1VONElfVENPTl9GUk1fQ1RMX1JFRywKKwkJICAgICBTVU40SV9U Q09OX0ZSTV9DVExfRU4pOworfQorCiBzdGF0aWMgdm9pZCBzdW40aV90Y29uMF9tb2RlX3NldF9j b21tb24oc3RydWN0IHN1bjRpX3Rjb24gKnRjb24sCiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQogewpAQCAtMTM3LDYgKzE2Miw3MCBAQCBzdGF0aWMgdm9pZCBzdW40aV90Y29u MF9tb2RlX3NldF9jb21tb24oc3RydWN0IHN1bjRpX3Rjb24gKnRjb24sCiAJCSAgICAgU1VONElf VENPTjBfQkFTSUMwX1kobW9kZS0+Y3J0Y192ZGlzcGxheSkpOwogfQogCitzdGF0aWMgdm9pZCBz dW40aV90Y29uMF9tb2RlX3NldF9jcHUoc3RydWN0IHN1bjRpX3Rjb24gKnRjb24sCisJCQkJICAg ICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1OCBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9f YnBwKGRldmljZS0+Zm9ybWF0KTsKKwl1OCBsYW5lcyA9IGRldmljZS0+bGFuZXM7CisJdTMyIGJs b2NrX3NwYWNlLCBzdGFydF9kZWxheTsKKwl1MzIgdGNvbl9kaXY7CisKKwlzdW40aV90Y29uMF9t b2RlX3NldF9jb21tb24odGNvbiwgbW9kZSk7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHModGNvbi0+ cmVncywgU1VONElfVENPTjBfQ1RMX1JFRywKKwkJCSAgIFNVTjRJX1RDT04wX0NUTF9JRl9NQVNL LAorCQkJICAgU1VONElfVENPTjBfQ1RMX0lGXzgwODApOworCisJcmVnbWFwX3dyaXRlKHRjb24t PnJlZ3MsIFNVTjRJX1RDT05fRUNDX0ZJRk9fUkVHLAorCQkgICAgIFNVTjRJX1RDT05fRUNDX0ZJ Rk9fRU4pOworCisJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT04wX0NQVV9JRl9S RUcsCisJCSAgICAgU1VONElfVENPTjBfQ1BVX0lGX01PREVfRFNJIHwKKwkJICAgICBTVU40SV9U Q09OMF9DUFVfSUZfVFJJX0ZJRk9fRkxVU0ggfAorCQkgICAgIFNVTjRJX1RDT04wX0NQVV9JRl9U UklfRklGT19FTiB8CisJCSAgICAgU1VONElfVENPTjBfQ1BVX0lGX1RSSV9FTik7CisKKwkvKgor CSAqIFRoaXMgbG9va3Mgc3VzcGljaW91cywgYnV0IGl0IHdvcmtzLi4uCisJICoKKwkgKiBUaGUg ZGF0YXNoZWV0IHNheXMgdGhhdCB0aGlzIHNob3VsZCBiZSBzZXQgaGlnaGVyIHRoYW4gMjAgKgor CSAqIHBpeGVsIGN5Y2xlLCBidXQgaXQncyBub3QgY2xlYXIgd2hhdCBhIHBpeGVsIGN5Y2xlIGlz LgorCSAqLworCXJlZ21hcF9yZWFkKHRjb24tPnJlZ3MsIFNVTjRJX1RDT04wX0RDTEtfUkVHLCAm dGNvbl9kaXYpOworCXRjb25fZGl2ICY9IEdFTk1BU0soNiwgMCk7CisJYmxvY2tfc3BhY2UgPSBt b2RlLT5odG90YWwgKiBicHAgLyAodGNvbl9kaXYgKiBsYW5lcyk7CisJYmxvY2tfc3BhY2UgLT0g bW9kZS0+aGRpc3BsYXkgKyA0MDsKKworCXJlZ21hcF93cml0ZSh0Y29uLT5yZWdzLCBTVU40SV9U Q09OMF9DUFVfVFJJMF9SRUcsCisJCSAgICAgU1VONElfVENPTjBfQ1BVX1RSSTBfQkxPQ0tfU1BB Q0UoYmxvY2tfc3BhY2UpIHwKKwkJICAgICBTVU40SV9UQ09OMF9DUFVfVFJJMF9CTE9DS19TSVpF KG1vZGUtPmhkaXNwbGF5KSk7CisKKwlyZWdtYXBfd3JpdGUodGNvbi0+cmVncywgU1VONElfVENP TjBfQ1BVX1RSSTFfUkVHLAorCQkgICAgIFNVTjRJX1RDT04wX0NQVV9UUkkxX0JMT0NLX05VTSht b2RlLT52ZGlzcGxheSkpOworCisJc3RhcnRfZGVsYXkgPSAobW9kZS0+Y3J0Y192dG90YWwgLSBt b2RlLT5jcnRjX3ZkaXNwbGF5IC0gMTAgLSAxKTsKKwlzdGFydF9kZWxheSA9IHN0YXJ0X2RlbGF5 ICogbW9kZS0+Y3J0Y19odG90YWwgKiAxNDk7CisJc3RhcnRfZGVsYXkgPSBzdGFydF9kZWxheSAv IChtb2RlLT5jcnRjX2Nsb2NrIC8gMTAwMCkgLyA4OworCXJlZ21hcF93cml0ZSh0Y29uLT5yZWdz LCBTVU40SV9UQ09OMF9DUFVfVFJJMl9SRUcsCisJCSAgICAgU1VONElfVENPTjBfQ1BVX1RSSTJf VFJBTlNfU1RBUlRfU0VUKDEwKSB8CisJCSAgICAgU1VONElfVENPTjBfQ1BVX1RSSTJfU1RBUlRf REVMQVkoc3RhcnRfZGVsYXkpKTsKKworCXN1bjRpX3Rjb24wX2ZyYW1lX2NvbnRyb2xfZW5hYmxl KHRjb24pOworCisJLyoKKwkgKiBUaGUgQWxsd2lubmVyIEJTUCBoYXMgYSBjb21tZW50IHRoYXQg dGhlIHBlcmlvZCBzaG91bGQgYmUKKwkgKiB0aGUgZGlzcGxheSBjbG9jayAqIDE1LCBidXQgdXNl cyBhbiBoYXJkY29kZWQgMzAwMC4uLgorCSAqLworCXJlZ21hcF93cml0ZSh0Y29uLT5yZWdzLCBT VU40SV9UQ09OX1NBRkVfUEVSSU9EX1JFRywKKwkJICAgICBTVU40SV9UQ09OX1NBRkVfUEVSSU9E X05VTSgzMDAwKSB8CisJCSAgICAgU1VONElfVENPTl9TQUZFX1BFUklPRF9NT0RFKDMpKTsKKwor CS8qIEVuYWJsZSB0aGUgb3V0cHV0IG9uIHRoZSBwaW5zICovCisJcmVnbWFwX3dyaXRlKHRjb24t PnJlZ3MsIFNVTjRJX1RDT04wX0lPX1RSSV9SRUcsCisJCSAgICAgMHhlMDAwMDAwMCk7Cit9CisK IHN0YXRpYyB2b2lkIHN1bjRpX3Rjb24wX21vZGVfc2V0X3JnYihzdHJ1Y3Qgc3VuNGlfdGNvbiAq dGNvbiwKIAkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewpAQCAtMjk5 LDcgKzM4OCwxNyBAQCBzdGF0aWMgdm9pZCBzdW40aV90Y29uMV9tb2RlX3NldChzdHJ1Y3Qgc3Vu NGlfdGNvbiAqdGNvbiwKIHZvaWQgc3VuNGlfdGNvbl9tb2RlX3NldChzdHJ1Y3Qgc3VuNGlfdGNv biAqdGNvbiwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCBzdW42aV9kc2kgKmRzaTsKKwogCXN3aXRjaCAo ZW5jb2Rlci0+ZW5jb2Rlcl90eXBlKSB7CisJY2FzZSBEUk1fTU9ERV9FTkNPREVSX0RTSToKKwkJ LyoKKwkJICogVGhpcyBpcyBub3QgcmVhbGx5IGVsZWdhbnQsIGJ1dCBpdCdzIHRoZSAiY2xlYW5l ciIKKwkJICogd2F5IEkgY291bGQgdGhpbmsgb2YuLi4KKwkJICovCisJCWRzaSA9IGVuY29kZXJf dG9fc3VuNmlfZHNpKGVuY29kZXIpOworCQlzdW40aV90Y29uMF9tb2RlX3NldF9jcHUodGNvbiwg ZHNpLT5kZXZpY2UsIG1vZGUpOworCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0VOQ09ERVJfTk9O RToKIAkJc3VuNGlfdGNvbjBfbW9kZV9zZXRfcmdiKHRjb24sIG1vZGUpOwogCQlicmVhazsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29uLmggYi9kcml2ZXJzL2dw dS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5oCmluZGV4IGIzNTgyZWU4Mjg1NS4uOGY3OWRlODkxYzcx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29uLmgKQEAgLTM1LDEwICszNSwyNSBAQAogI2Rl ZmluZSBTVU40SV9UQ09OX0dJTlQwX1RDT04wX1RSSV9DT1VOVEVSX0lOVAkJQklUKDEwKQogCiAj ZGVmaW5lIFNVTjRJX1RDT05fR0lOVDFfUkVHCQkJMHg4CisKICNkZWZpbmUgU1VONElfVENPTl9G Uk1fQ1RMX1JFRwkJCTB4MTAKKyNkZWZpbmUgU1VONElfVENPTl9GUk1fQ1RMX0VOCQkJCUJJVCgz MSkKKworI2RlZmluZSBTVU40SV9UQ09OX0ZSTV9TRUVEX1BSX1JFRwkJMHgxNAorI2RlZmluZSBT VU40SV9UQ09OX0ZSTV9TRUVEX1BHX1JFRwkJMHgxOAorI2RlZmluZSBTVU40SV9UQ09OX0ZSTV9T RUVEX1BCX1JFRwkJMHgxYworI2RlZmluZSBTVU40SV9UQ09OX0ZSTV9TRUVEX0xSX1JFRwkJMHgy MAorI2RlZmluZSBTVU40SV9UQ09OX0ZSTV9TRUVEX0xHX1JFRwkJMHgyNAorI2RlZmluZSBTVU40 SV9UQ09OX0ZSTV9TRUVEX0xCX1JFRwkJMHgyOAorI2RlZmluZSBTVU40SV9UQ09OX0ZSTV9UQkww X1JFRwkJCTB4MmMKKyNkZWZpbmUgU1VONElfVENPTl9GUk1fVEJMMV9SRUcJCQkweDMwCisjZGVm aW5lIFNVTjRJX1RDT05fRlJNX1RCTDJfUkVHCQkJMHgzNAorI2RlZmluZSBTVU40SV9UQ09OX0ZS TV9UQkwzX1JFRwkJCTB4MzgKIAogI2RlZmluZSBTVU40SV9UQ09OMF9DVExfUkVHCQkJMHg0MAog I2RlZmluZSBTVU40SV9UQ09OMF9DVExfVENPTl9FTkFCTEUJCQlCSVQoMzEpCisjZGVmaW5lIFNV TjRJX1RDT04wX0NUTF9JRl9NQVNLCQkJCUdFTk1BU0soMjUsIDI0KQorI2RlZmluZSBTVU40SV9U Q09OMF9DVExfSUZfODA4MAkJCQkoMSA8PCAyNCkKICNkZWZpbmUgU1VONElfVENPTjBfQ1RMX0NM S19ERUxBWV9NQVNLCQkJR0VOTUFTSyg4LCA0KQogI2RlZmluZSBTVU40SV9UQ09OMF9DVExfQ0xL X0RFTEFZKGRlbGF5KQkJKChkZWxheSA8PCA0KSAmIFNVTjRJX1RDT04wX0NUTF9DTEtfREVMQVlf TUFTSykKIApAQCAtNjQsNyArNzksMTQgQEAKICNkZWZpbmUgU1VONElfVENPTjBfQkFTSUMzX1Zf U1lOQyhoZWlnaHQpCQkoKChoZWlnaHQpIC0gMSkgJiAweDdmZikKIAogI2RlZmluZSBTVU40SV9U Q09OMF9IVl9JRl9SRUcJCQkweDU4CisKICNkZWZpbmUgU1VONElfVENPTjBfQ1BVX0lGX1JFRwkJ CTB4NjAKKyNkZWZpbmUgU1VONElfVENPTjBfQ1BVX0lGX01PREVfTUFTSwkJCUdFTk1BU0soMzEs IDI4KQorI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfSUZfTU9ERV9EU0kJCQkoMSA8PCAyOCkKKyNk ZWZpbmUgU1VONElfVENPTjBfQ1BVX0lGX1RSSV9GSUZPX0ZMVVNICQlCSVQoMTYpCisjZGVmaW5l IFNVTjRJX1RDT04wX0NQVV9JRl9UUklfRklGT19FTgkJCUJJVCgyKQorI2RlZmluZSBTVU40SV9U Q09OMF9DUFVfSUZfVFJJX0VOCQkJQklUKDApCisKICNkZWZpbmUgU1VONElfVENPTjBfQ1BVX1dS X1JFRwkJCTB4NjQKICNkZWZpbmUgU1VONElfVENPTjBfQ1BVX1JEMF9SRUcJCQkweDY4CiAjZGVm aW5lIFNVTjRJX1RDT04wX0NQVV9SREFfUkVHCQkJMHg2YwpAQCAtMTE2LDYgKzEzOCwxMCBAQAog CiAjZGVmaW5lIFNVTjRJX1RDT04xX0lPX1BPTF9SRUcJCQkweGYwCiAjZGVmaW5lIFNVTjRJX1RD T04xX0lPX1RSSV9SRUcJCQkweGY0CisKKyNkZWZpbmUgU1VONElfVENPTl9FQ0NfRklGT19SRUcJ CQkweGY4CisjZGVmaW5lIFNVTjRJX1RDT05fRUNDX0ZJRk9fRU4JCQkJQklUKDMpCisKICNkZWZp bmUgU1VONElfVENPTl9DRVVfQ1RMX1JFRwkJCTB4MTAwCiAjZGVmaW5lIFNVTjRJX1RDT05fQ0VV X01VTF9SUl9SRUcJCTB4MTEwCiAjZGVmaW5lIFNVTjRJX1RDT05fQ0VVX01VTF9SR19SRUcJCTB4 MTE0CkBAIC0xMzIsNiArMTU4LDIyIEBACiAjZGVmaW5lIFNVTjRJX1RDT05fQ0VVX1JBTkdFX1Jf UkVHCQkweDE0MAogI2RlZmluZSBTVU40SV9UQ09OX0NFVV9SQU5HRV9HX1JFRwkJMHgxNDQKICNk ZWZpbmUgU1VONElfVENPTl9DRVVfUkFOR0VfQl9SRUcJCTB4MTQ4CisKKyNkZWZpbmUgU1VONElf VENPTjBfQ1BVX1RSSTBfUkVHCQkweDE2MAorI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfVFJJMF9C TE9DS19TUEFDRShzcGFjZSkJCSgoKChzcGFjZSkgLSAxKSAmIDB4ZmZmKSA8PCAxNikKKyNkZWZp bmUgU1VONElfVENPTjBfQ1BVX1RSSTBfQkxPQ0tfU0laRShzaXplKQkJKCgoc2l6ZSkgLSAxKSAm IDB4ZmZmKQorCisjZGVmaW5lIFNVTjRJX1RDT04wX0NQVV9UUkkxX1JFRwkJMHgxNjQKKyNkZWZp bmUgU1VONElfVENPTjBfQ1BVX1RSSTFfQkxPQ0tfTlVNKG51bSkJCSgoKG51bSkgLSAxKSAmIDB4 ZmZmZikKKworI2RlZmluZSBTVU40SV9UQ09OMF9DUFVfVFJJMl9SRUcJCTB4MTY4CisjZGVmaW5l IFNVTjRJX1RDT04wX0NQVV9UUkkyX1NUQVJUX0RFTEFZKGRlbGF5KQkJKCgoZGVsYXkpICYgMHhm ZmZmKSA8PCAxNikKKyNkZWZpbmUgU1VONElfVENPTjBfQ1BVX1RSSTJfVFJBTlNfU1RBUlRfU0VU KHNldCkJKChzZXQpICYgMHhmZmYpCisKKyNkZWZpbmUgU1VONElfVENPTl9TQUZFX1BFUklPRF9S RUcJCTB4MWYwCisjZGVmaW5lIFNVTjRJX1RDT05fU0FGRV9QRVJJT0RfTlVNKG51bSkJCQkoKChu dW0pICYgMHhmZmYpIDw8IDE2KQorI2RlZmluZSBTVU40SV9UQ09OX1NBRkVfUEVSSU9EX01PREUo bW9kZSkJCSgobW9kZSkgJiAweDMpCisKICNkZWZpbmUgU1VONElfVENPTl9NVVhfQ1RSTF9SRUcJ CQkweDIwMAogI2RlZmluZSBTVU40SV9UQ09OMV9GSUxMX0NUTF9SRUcJCTB4MzAwCiAjZGVmaW5l IFNVTjRJX1RDT04xX0ZJTExfQkVHMF9SRUcJCTB4MzA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vc3VuNGkvc3VuNmlfbWlwaV9kcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3Vu NmlfbWlwaV9kcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5h N2E3MzA4NGM3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3Vu NmlfbWlwaV9kcGh5LmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYgQWxsd2lubmVydGVjaCBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBGcmVlIEVs ZWN0cm9ucworICoKKyAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJv bnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9yZXNldC5oPgorCisjaW5jbHVkZSAic3VuNmlfbWlwaV9kc2kuaCIKKworI2RlZmluZSBTVU42 SV9EUEhZX0dDVExfUkVHCQkweDAwCisjZGVmaW5lIFNVTjZJX0RQSFlfR0NUTF9MQU5FX05VTShu KQkJKCgoKG4pIC0gMSkgJiAzKSA8PCA0KQorI2RlZmluZSBTVU42SV9EUEhZX0dDVExfRU4JCQlC SVQoMCkKKworI2RlZmluZSBTVU42SV9EUEhZX1RYX0NUTF9SRUcJCTB4MDQKKyNkZWZpbmUgU1VO NklfRFBIWV9UWF9DVExfSFNfVFhfQ0xLX0NPTlQJQklUKDI4KQorCisjZGVmaW5lIFNVTjZJX0RQ SFlfVFhfVElNRTBfUkVHCQkweDEwCisjZGVmaW5lIFNVTjZJX0RQSFlfVFhfVElNRTBfSFNfVFJB SUwobikJCSgoKG4pICYgMHhmZikgPDwgMjQpCisjZGVmaW5lIFNVTjZJX0RQSFlfVFhfVElNRTBf SFNfUFJFUEFSRShuKQkoKChuKSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBTVU42SV9EUEhZX1RY X1RJTUUwX0xQX0NMS19ESVYobikJKChuKSAmIDB4ZmYpCisKKyNkZWZpbmUgU1VONklfRFBIWV9U WF9USU1FMV9SRUcJCTB4MTQKKyNkZWZpbmUgU1VONklfRFBIWV9UWF9USU1FMV9DTEtfUE9TVChu KQkJKCgobikgJiAweGZmKSA8PCAyNCkKKyNkZWZpbmUgU1VONklfRFBIWV9UWF9USU1FMV9DTEtf UFJFKG4pCQkoKChuKSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJTUUx X0NMS19aRVJPKG4pCQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFNVTjZJX0RQSFlfVFhf VElNRTFfQ0xLX1BSRVBBUkUobikJKChuKSAmIDB4ZmYpCisKKyNkZWZpbmUgU1VONklfRFBIWV9U WF9USU1FMl9SRUcJCTB4MTgKKyNkZWZpbmUgU1VONklfRFBIWV9UWF9USU1FMl9DTEtfVFJBSUwo bikJKChuKSAmIDB4ZmYpCisKKyNkZWZpbmUgU1VONklfRFBIWV9UWF9USU1FM19SRUcJCTB4MWMK KworI2RlZmluZSBTVU42SV9EUEhZX1RYX1RJTUU0X1JFRwkJMHgyMAorI2RlZmluZSBTVU42SV9E UEhZX1RYX1RJTUU0X0hTX1RYX0FOQTEobikJKCgobikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBT VU42SV9EUEhZX1RYX1RJTUU0X0hTX1RYX0FOQTAobikJKChuKSAmIDB4ZmYpCisKKyNkZWZpbmUg U1VONklfRFBIWV9BTkEwX1JFRwkJMHg0YworI2RlZmluZSBTVU42SV9EUEhZX0FOQTBfUkVHX1BX UwkJCUJJVCgzMSkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEwX1JFR19ETVBDCQlCSVQoMjgpCisj ZGVmaW5lIFNVTjZJX0RQSFlfQU5BMF9SRUdfRE1QRChuKQkJKCgobikgJiAweGYpIDw8IDI0KQor I2RlZmluZSBTVU42SV9EUEhZX0FOQTBfUkVHX1NMVihuKQkJKCgobikgJiA3KSA8PCAxMikKKyNk ZWZpbmUgU1VONklfRFBIWV9BTkEwX1JFR19ERU4obikJCSgoKG4pICYgMHhmKSA8PCA4KQorCisj ZGVmaW5lIFNVTjZJX0RQSFlfQU5BMV9SRUcJCTB4NTAKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEx X1JFR19WVFRNT0RFCQlCSVQoMzEpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BMV9SRUdfQ1NNUFMo bikJCSgoKG4pICYgMykgPDwgMjgpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BMV9SRUdfU1ZUVChu KQkJKCgobikgJiAweGYpIDw8IDI0KQorCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BMl9SRUcJCTB4 NTQKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEyX0VOX1AyU19DUFUobikJCSgoKG4pICYgMHhmKSA8 PCAyNCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEyX0VOX1AyU19DUFVfTUFTSwkJR0VOTUFTSygy NywgMjQpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BMl9FTl9DS19DUFUJCUJJVCg0KQorI2RlZmlu ZSBTVU42SV9EUEhZX0FOQTJfUkVHX0VOSUIJCUJJVCgxKQorCisjZGVmaW5lIFNVTjZJX0RQSFlf QU5BM19SRUcJCTB4NTgKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEzX0VOX1ZUVEQobikJCSgoKG4p ICYgMHhmKSA8PCAyOCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEzX0VOX1ZUVERfTUFTSwkJR0VO TUFTSygzMSwgMjgpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BM19FTl9WVFRDCQkJQklUKDI3KQor I2RlZmluZSBTVU42SV9EUEhZX0FOQTNfRU5fRElWCQkJQklUKDI2KQorI2RlZmluZSBTVU42SV9E UEhZX0FOQTNfRU5fTERPQwkJCUJJVCgyNSkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkEzX0VOX0xE T0QJCQlCSVQoMjQpCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BM19FTl9MRE9SCQkJQklUKDE4KQor CisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BNF9SRUcJCTB4NWMKKyNkZWZpbmUgU1VONklfRFBIWV9B TkE0X1JFR19ETVBMVkMJCUJJVCgyNCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkE0X1JFR19ETVBM VkQobikJCSgoKG4pICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgU1VONklfRFBIWV9BTkE0X1JFR19D S0RWKG4pCQkoKChuKSAmIDB4MWYpIDw8IDEyKQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTRfUkVH X1RNU0MobikJCSgoKG4pICYgMykgPDwgMTApCisjZGVmaW5lIFNVTjZJX0RQSFlfQU5BNF9SRUdf VE1TRChuKQkJKCgobikgJiAzKSA8PCA4KQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTRfUkVHX1RY RE5TQyhuKQkJKCgobikgJiAzKSA8PCA2KQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTRfUkVHX1RY RE5TRChuKQkJKCgobikgJiAzKSA8PCA0KQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTRfUkVHX1RY UFVTQyhuKQkJKCgobikgJiAzKSA8PCAyKQorI2RlZmluZSBTVU42SV9EUEhZX0FOQTRfUkVHX1RY UFVTRChuKQkJKChuKSAmIDMpCisKKyNkZWZpbmUgU1VONklfRFBIWV9EQkc1X1JFRwkJMHhmNAor CitpbnQgc3VuNmlfZHBoeV9pbml0KHN0cnVjdCBzdW42aV9kcGh5ICpkcGh5LCB1bnNpZ25lZCBp bnQgbGFuZXMpCit7CisJcmVzZXRfY29udHJvbF9kZWFzc2VydChkcGh5LT5yZXNldCk7CisJY2xr X3ByZXBhcmVfZW5hYmxlKGRwaHktPm1vZF9jbGspOworCWNsa19zZXRfcmF0ZV9wcm90ZWN0KGRw aHktPm1vZF9jbGssIDE1MDAwMDAwMCk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VO NklfRFBIWV9UWF9DVExfUkVHLAorCQkgICAgIFNVTjZJX0RQSFlfVFhfQ1RMX0hTX1RYX0NMS19D T05UKTsKKworCXJlZ21hcF93cml0ZShkcGh5LT5yZWdzLCBTVU42SV9EUEhZX1RYX1RJTUUwX1JF RywKKwkJICAgICBTVU42SV9EUEhZX1RYX1RJTUUwX0xQX0NMS19ESVYoMTQpIHwKKwkJICAgICBT VU42SV9EUEhZX1RYX1RJTUUwX0hTX1BSRVBBUkUoNikgfAorCQkgICAgIFNVTjZJX0RQSFlfVFhf VElNRTBfSFNfVFJBSUwoMTApKTsKKworCXJlZ21hcF93cml0ZShkcGh5LT5yZWdzLCBTVU42SV9E UEhZX1RYX1RJTUUxX1JFRywKKwkJICAgICBTVU42SV9EUEhZX1RYX1RJTUUxX0NMS19QUkVQQVJF KDcpIHwKKwkJICAgICBTVU42SV9EUEhZX1RYX1RJTUUxX0NMS19aRVJPKDUwKSB8CisJCSAgICAg U1VONklfRFBIWV9UWF9USU1FMV9DTEtfUFJFKDMpIHwKKwkJICAgICBTVU42SV9EUEhZX1RYX1RJ TUUxX0NMS19QT1NUKDEwKSk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBI WV9UWF9USU1FMl9SRUcsCisJCSAgICAgU1VONklfRFBIWV9UWF9USU1FMl9DTEtfVFJBSUwoMzAp KTsKKworCXJlZ21hcF93cml0ZShkcGh5LT5yZWdzLCBTVU42SV9EUEhZX1RYX1RJTUUzX1JFRywg MCk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBIWV9UWF9USU1FNF9SRUcs CisJCSAgICAgU1VONklfRFBIWV9UWF9USU1FNF9IU19UWF9BTkEwKDMpIHwKKwkJICAgICBTVU42 SV9EUEhZX1RYX1RJTUU0X0hTX1RYX0FOQTEoMykpOworCisJLyogRklYTUU6IE51bWJlciBvZiBs YW5lcz8gKi8KKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBIWV9HQ1RMX1JFRywK KwkJICAgICBTVU42SV9EUEhZX0dDVExfTEFORV9OVU0obGFuZXMpIHwKKwkJICAgICBTVU42SV9E UEhZX0dDVExfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdW42aV9kcGh5X3Bvd2VyX29u KHN0cnVjdCBzdW42aV9kcGh5ICpkcGh5LCB1bnNpZ25lZCBpbnQgbGFuZXMpCit7CisJdTggbGFu ZXNfbWFzayA9IEdFTk1BU0sobGFuZXMgLSAxLCAwKTsKKworCXJlZ21hcF93cml0ZShkcGh5LT5y ZWdzLCBTVU42SV9EUEhZX0FOQTBfUkVHLAorCQkgICAgIFNVTjZJX0RQSFlfQU5BMF9SRUdfUFdT IHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTBfUkVHX0RNUEMgfAorCQkgICAgIFNVTjZJX0RQSFlf QU5BMF9SRUdfU0xWKDcpIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTBfUkVHX0RNUEQobGFuZXNf bWFzaykgfAorCQkgICAgIFNVTjZJX0RQSFlfQU5BMF9SRUdfREVOKGxhbmVzX21hc2spKTsKKwor CXJlZ21hcF93cml0ZShkcGh5LT5yZWdzLCBTVU42SV9EUEhZX0FOQTFfUkVHLAorCQkgICAgIFNV TjZJX0RQSFlfQU5BMV9SRUdfQ1NNUFMoMSkgfAorCQkgICAgIFNVTjZJX0RQSFlfQU5BMV9SRUdf U1ZUVCg3KSk7CisKKwlyZWdtYXBfd3JpdGUoZHBoeS0+cmVncywgU1VONklfRFBIWV9BTkE0X1JF RywKKwkJICAgICBTVU42SV9EUEhZX0FOQTRfUkVHX0NLRFYoMSkgfAorCQkgICAgIFNVTjZJX0RQ SFlfQU5BNF9SRUdfVE1TQygxKSB8CisJCSAgICAgU1VONklfRFBIWV9BTkE0X1JFR19UTVNEKDEp IHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTRfUkVHX1RYRE5TQygxKSB8CisJCSAgICAgU1VONklf RFBIWV9BTkE0X1JFR19UWEROU0QoMSkgfAorCQkgICAgIFNVTjZJX0RQSFlfQU5BNF9SRUdfVFhQ VVNDKDEpIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTRfUkVHX1RYUFVTRCgxKSB8CisJCSAgICAg U1VONklfRFBIWV9BTkE0X1JFR19ETVBMVkMgfAorCQkgICAgIFNVTjZJX0RQSFlfQU5BNF9SRUdf RE1QTFZEKGxhbmVzX21hc2spKTsKKworCXJlZ21hcF93cml0ZShkcGh5LT5yZWdzLCBTVU42SV9E UEhZX0FOQTJfUkVHLAorCQkgICAgIFNVTjZJX0RQSFlfQU5BMl9SRUdfRU5JQik7CisJdWRlbGF5 KDUpOworCisJcmVnbWFwX3dyaXRlKGRwaHktPnJlZ3MsIFNVTjZJX0RQSFlfQU5BM19SRUcsCisJ CSAgICAgU1VONklfRFBIWV9BTkEzX0VOX0xET1IgfAorCQkgICAgIFNVTjZJX0RQSFlfQU5BM19F Tl9MRE9DIHwKKwkJICAgICBTVU42SV9EUEhZX0FOQTNfRU5fTERPRCk7CisJdWRlbGF5KDEpOwor CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRwaHktPnJlZ3MsIFNVTjZJX0RQSFlfQU5BM19SRUcsCisJ CQkgICBTVU42SV9EUEhZX0FOQTNfRU5fVlRUQyB8CisJCQkgICBTVU42SV9EUEhZX0FOQTNfRU5f VlRURF9NQVNLLAorCQkJICAgU1VONklfRFBIWV9BTkEzX0VOX1ZUVEMgfAorCQkJICAgU1VONklf RFBIWV9BTkEzX0VOX1ZUVEQobGFuZXNfbWFzaykpOworCXVkZWxheSgxKTsKKworCXJlZ21hcF91 cGRhdGVfYml0cyhkcGh5LT5yZWdzLCBTVU42SV9EUEhZX0FOQTNfUkVHLAorCQkJICAgU1VONklf RFBIWV9BTkEzX0VOX0RJViwKKwkJCSAgIFNVTjZJX0RQSFlfQU5BM19FTl9ESVYpOworCXVkZWxh eSgxKTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhkcGh5LT5yZWdzLCBTVU42SV9EUEhZX0FOQTJf UkVHLAorCQkJICAgU1VONklfRFBIWV9BTkEyX0VOX0NLX0NQVSwKKwkJCSAgIFNVTjZJX0RQSFlf QU5BMl9FTl9DS19DUFUpOworCXVkZWxheSgxKTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhkcGh5 LT5yZWdzLCBTVU42SV9EUEhZX0FOQTFfUkVHLAorCQkJICAgU1VONklfRFBIWV9BTkExX1JFR19W VFRNT0RFLAorCQkJICAgU1VONklfRFBIWV9BTkExX1JFR19WVFRNT0RFKTsKKworCXJlZ21hcF91 cGRhdGVfYml0cyhkcGh5LT5yZWdzLCBTVU42SV9EUEhZX0FOQTJfUkVHLAorCQkJICAgU1VONklf RFBIWV9BTkEyX0VOX1AyU19DUFVfTUFTSywKKwkJCSAgIFNVTjZJX0RQSFlfQU5BMl9FTl9QMlNf Q1BVKGxhbmVzX21hc2spKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3VuNmlfZHBoeV9wb3dl cl9vZmYoc3RydWN0IHN1bjZpX2RwaHkgKmRwaHkpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRw aHktPnJlZ3MsIFNVTjZJX0RQSFlfQU5BMV9SRUcsCisJCQkgICBTVU42SV9EUEhZX0FOQTFfUkVH X1ZUVE1PREUsIDApOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdW42aV9kcGh5X2V4aXQoc3Ry dWN0IHN1bjZpX2RwaHkgKmRwaHkpCit7CisJY2xrX3JhdGVfdW5wcm90ZWN0KGRwaHktPm1vZF9j bGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGh5LT5tb2RfY2xrKTsKKwlyZXNldF9jb250 cm9sX2Fzc2VydChkcGh5LT5yZXNldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVj dCByZWdtYXBfY29uZmlnIHN1bjZpX2RwaHlfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMJ PSAzMiwKKwkudmFsX2JpdHMJPSAzMiwKKwkucmVnX3N0cmlkZQk9IDQsCisJLm1heF9yZWdpc3Rl cgk9IFNVTjZJX0RQSFlfREJHNV9SRUcsCisJLm5hbWUJCT0gIm1pcGktZHBoeSIsCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW42aV9kcGh5X29mX3RhYmxlW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLW1pcGktZHBoeSIgfSwKKwl7 IH0KK307CisKK2ludCBzdW42aV9kcGh5X3Byb2JlKHN0cnVjdCBzdW42aV9kc2kgKmRzaSwgc3Ry dWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXN0cnVjdCBzdW42aV9kcGh5ICpkcGh5OworCXN0 cnVjdCByZXNvdXJjZSByZXM7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCByZXQ7CisKKwlp ZiAoIW9mX21hdGNoX25vZGUoc3VuNmlfZHBoeV9vZl90YWJsZSwgbm9kZSkpIHsKKwkJZGV2X2Vy cihkc2ktPmRldiwgIkluY29tcGF0aWJsZSBELVBIWVxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWRwaHkgPSBkZXZtX2t6YWxsb2MoZHNpLT5kZXYsIHNpemVvZigqZHBoeSksIEdGUF9L RVJORUwpOworCWlmICghZHBoeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBvZl9hZGRy ZXNzX3RvX3Jlc291cmNlKG5vZGUsIDAsICZyZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk c2ktPmRldiwgInBoeTogQ291bGRuJ3QgZ2V0IG91ciByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCXJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZHNpLT5kZXYsICZyZXMp OworCWlmIChJU19FUlIocmVncykpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIkNvdWxkbid0IG1h cCB0aGUgRFBIWSBlbmNvZGVyIHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiBQVFJfRVJSKHJlZ3Mp OworCX0KKworCWRwaHktPnJlZ3MgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZHNpLT5kZXYsIHJl Z3MsCisJCQkJCSAgICZzdW42aV9kcGh5X3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoZHBo eS0+cmVncykpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIkNvdWxkbid0IGNyZWF0ZSB0aGUgRFBI WSBlbmNvZGVyIHJlZ21hcFxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwaHktPnJlZ3MpOworCX0K KworCWRwaHktPnJlc2V0ID0gb2ZfcmVzZXRfY29udHJvbF9nZXRfc2hhcmVkKG5vZGUsIE5VTEwp OworCWlmIChJU19FUlIoZHBoeS0+cmVzZXQpKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJDb3Vs ZG4ndCBnZXQgb3VyIHJlc2V0IGxpbmVcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcGh5LT5yZXNl dCk7CisJfQorCisJZHBoeS0+YnVzX2NsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShub2RlLCAiYnVz Iik7CisJaWYgKElTX0VSUihkcGh5LT5idXNfY2xrKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAi Q291bGRuJ3QgZ2V0IHRoZSBEUEhZIGJ1cyBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoZHBo eS0+YnVzX2Nsayk7CisJCWdvdG8gZXJyX2ZyZWVfcmVzZXQ7CisJfQorCXJlZ21hcF9tbWlvX2F0 dGFjaF9jbGsoZHBoeS0+cmVncywgZHBoeS0+YnVzX2Nsayk7CisKKwlkcGh5LT5tb2RfY2xrID0g b2ZfY2xrX2dldF9ieV9uYW1lKG5vZGUsICJtb2QiKTsKKwlpZiAoSVNfRVJSKGRwaHktPm1vZF9j bGspKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJDb3VsZG4ndCBnZXQgdGhlIERQSFkgbW9kIGNs b2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihkcGh5LT5tb2RfY2xrKTsKKwkJZ290byBlcnJfZnJl ZV9idXM7CisJfQorCisJZHNpLT5kcGh5ID0gZHBoeTsKKworCXJldHVybiAwOworCitlcnJfZnJl ZV9idXM6CisJcmVnbWFwX21taW9fZGV0YWNoX2NsayhkcGh5LT5yZWdzKTsKKwljbGtfcHV0KGRw aHktPmJ1c19jbGspOworZXJyX2ZyZWVfcmVzZXQ6CisJcmVzZXRfY29udHJvbF9wdXQoZHBoeS0+ cmVzZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBzdW42aV9kcGh5X3JlbW92ZShzdHJ1Y3Qg c3VuNmlfZHNpICpkc2kpCit7CisJc3RydWN0IHN1bjZpX2RwaHkgKmRwaHkgPSBkc2ktPmRwaHk7 CisKKwlyZWdtYXBfbW1pb19kZXRhY2hfY2xrKGRwaHktPnJlZ3MpOworCWNsa19wdXQoZHBoeS0+ bW9kX2Nsayk7CisJY2xrX3B1dChkcGh5LT5idXNfY2xrKTsKKwlyZXNldF9jb250cm9sX3B1dChk cGh5LT5yZXNldCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9zdW40aS9zdW42aV9taXBpX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21p cGlfZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zZGEzZjdj MDYwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlfbWlw aV9kc2kuYwpAQCAtMCwwICsxLDEwOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQWxs d2lubmVydGVjaCBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBGcmVlIEVsZWN0cm9u cworICoKKyAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29t PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2Ny Yy1jY2l0dC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2luY2x1ZGUgPGRy bS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisKKyNpbmNsdWRlICJzdW40aV9kcnYuaCIKKyNpbmNs dWRlICJzdW42aV9taXBpX2RzaS5oIgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+ CisKKyNkZWZpbmUgU1VONklfRFNJX0NUTF9SRUcJCTB4MDAwCisjZGVmaW5lIFNVTjZJX0RTSV9D VExfRU4JCQlCSVQoMCkKKworI2RlZmluZSBTVU42SV9EU0lfQkFTSUNfQ1RMX1JFRwkJMHgwMGMK KyNkZWZpbmUgU1VONklfRFNJX0JBU0lDX0NUTF9IQlBfRElTCQlCSVQoMikKKyNkZWZpbmUgU1VO NklfRFNJX0JBU0lDX0NUTF9IU0FfSFNFX0RJUwkJQklUKDEpCisjZGVmaW5lIFNVTjZJX0RTSV9C QVNJQ19DVExfVklERU9fQlVSU1QJCUJJVCgwKQorCisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19D VEwwX1JFRwkweDAxMAorI2RlZmluZSBTVU42SV9EU0lfQkFTSUNfQ1RMMF9IU19FT1RQX0VOCQlC SVQoMTgpCisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19DVEwwX0NSQ19FTgkJQklUKDE3KQorI2Rl ZmluZSBTVU42SV9EU0lfQkFTSUNfQ1RMMF9FQ0NfRU4JCUJJVCgxNikKKyNkZWZpbmUgU1VONklf RFNJX0JBU0lDX0NUTDBfSU5TVF9TVAkJQklUKDApCisKKyNkZWZpbmUgU1VONklfRFNJX0JBU0lD X0NUTDFfUkVHCTB4MDE0CisjZGVmaW5lIFNVTjZJX0RTSV9CQVNJQ19DVEwxX1ZJREVPX1NUX0RF TEFZKG4pCSgoKG4pICYgMHgxZmZmKSA8PCA0KQorI2RlZmluZSBTVU42SV9EU0lfQkFTSUNfQ1RM MV9WSURFT19GSUxMCQlCSVQoMikKKyNkZWZpbmUgU1VONklfRFNJX0JBU0lDX0NUTDFfVklERU9f UFJFQ0lTSU9OCUJJVCgxKQorI2RlZmluZSBTVU42SV9EU0lfQkFTSUNfQ1RMMV9WSURFT19NT0RF CQlCSVQoMCkKKworI2RlZmluZSBTVU42SV9EU0lfQkFTSUNfU0laRTBfUkVHCTB4MDE4CisjZGVm aW5lIFNVTjZJX0RTSV9CQVNJQ19TSVpFMF9WQlAobikJCSgoKG4pICYgMHhmZmYpIDw8IDE2KQor I2RlZmluZSBTVU42SV9EU0lfQkFTSUNfU0laRTBfVlNBKG4pCQkoKG4pICYgMHhmZmYpCisKKyNk ZWZpbmUgU1VONklfRFNJX0JBU0lDX1NJWkUxX1JFRwkweDAxYworI2RlZmluZSBTVU42SV9EU0lf QkFTSUNfU0laRTFfVlQobikJCSgoKG4pICYgMHhmZmYpIDw8IDE2KQorI2RlZmluZSBTVU42SV9E U0lfQkFTSUNfU0laRTFfVkFDVChuKQkJKChuKSAmIDB4ZmZmKQorCisjZGVmaW5lIFNVTjZJX0RT SV9JTlNUX0ZVTkNfUkVHKG4pCSgweDAyMCArIChuKSAqIDB4MDQpCisjZGVmaW5lIFNVTjZJX0RT SV9JTlNUX0ZVTkNfSU5TVF9NT0RFKG4pCSgoKG4pICYgMHhmKSA8PCAyOCkKKyNkZWZpbmUgU1VO NklfRFNJX0lOU1RfRlVOQ19FU0NBUEVfRU5UUlkobikJKCgobikgJiAweGYpIDw8IDI0KQorI2Rl ZmluZSBTVU42SV9EU0lfSU5TVF9GVU5DX1RSQU5TX1BBQ0tFVChuKQkoKChuKSAmIDB4ZikgPDwg MjApCisjZGVmaW5lIFNVTjZJX0RTSV9JTlNUX0ZVTkNfTEFORV9DRU4JCUJJVCg0KQorI2RlZmlu ZSBTVU42SV9EU0lfSU5TVF9GVU5DX0xBTkVfREVOKG4pCQkoKG4pICYgMHhmKQorCisjZGVmaW5l IFNVTjZJX0RTSV9JTlNUX0xPT1BfU0VMX1JFRwkweDA0MAorCisjZGVmaW5lIFNVTjZJX0RTSV9J TlNUX0xPT1BfTlVNX1JFRyhuKQkoMHgwNDQgKyAobikgKiAweDEwKQorI2RlZmluZSBTVU42SV9E U0lfSU5TVF9MT09QX05VTV9OMShuKQkJKCgobikgJiAweGZmZikgPDwgMTYpCisjZGVmaW5lIFNV TjZJX0RTSV9JTlNUX0xPT1BfTlVNX04wKG4pCQkoKG4pICYgMHhmZmYpCisKKyNkZWZpbmUgU1VO NklfRFNJX0lOU1RfSlVNUF9TRUxfUkVHCTB4MDQ4CisKKyNkZWZpbmUgU1VONklfRFNJX0lOU1Rf SlVNUF9DRkdfUkVHKG4pCSgweDA0YyArIChuKSAqIDB4MDQpCisjZGVmaW5lIFNVTjZJX0RTSV9J TlNUX0pVTVBfQ0ZHX1RPKG4pCQkoKChuKSAmIDB4ZikgPDwgMjApCisjZGVmaW5lIFNVTjZJX0RT SV9JTlNUX0pVTVBfQ0ZHX1BPSU5UKG4pCSgoKG4pICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgU1VO NklfRFNJX0lOU1RfSlVNUF9DRkdfTlVNKG4pCQkoKG4pICYgMHhmZmZmKQorCisjZGVmaW5lIFNV TjZJX0RTSV9UUkFOU19TVEFSVF9SRUcJMHgwNjAKKworI2RlZmluZSBTVU42SV9EU0lfVFJBTlNf WkVST19SRUcJMHgwNzgKKworI2RlZmluZSBTVU42SV9EU0lfVENPTl9EUlFfUkVHCQkweDA3Ywor I2RlZmluZSBTVU42SV9EU0lfVENPTl9EUlFfRU5BQkxFX01PREUJCUJJVCgyOCkKKyNkZWZpbmUg U1VONklfRFNJX1RDT05fRFJRX1NFVChuKQkJKChuKSAmIDB4M2ZmKQorCisjZGVmaW5lIFNVTjZJ X0RTSV9QSVhFTF9DVEwwX1JFRwkweDA4MAorI2RlZmluZSBTVU42SV9EU0lfUElYRUxfQ1RMMF9Q RF9QTFVHX0RJU0FCTEUJQklUKDE2KQorI2RlZmluZSBTVU42SV9EU0lfUElYRUxfQ1RMMF9GT1JN QVQobikJCSgobikgJiAweGYpCisKKyNkZWZpbmUgU1VONklfRFNJX1BJWEVMX0NUTDFfUkVHCTB4 MDg0CisKKyNkZWZpbmUgU1VONklfRFNJX1BJWEVMX1BIX1JFRwkJMHgwOTAKKyNkZWZpbmUgU1VO NklfRFNJX1BJWEVMX1BIX0VDQyhuKQkJKCgobikgJiAweGZmKSA8PCAyNCkKKyNkZWZpbmUgU1VO NklfRFNJX1BJWEVMX1BIX1dDKG4pCQkoKChuKSAmIDB4ZmZmZikgPDwgOCkKKyNkZWZpbmUgU1VO NklfRFNJX1BJWEVMX1BIX1ZDKG4pCQkoKChuKSAmIDMpIDw8IDYpCisjZGVmaW5lIFNVTjZJX0RT SV9QSVhFTF9QSF9EVChuKQkJKChuKSAmIDB4M2YpCisKKyNkZWZpbmUgU1VONklfRFNJX1BJWEVM X1BGMF9SRUcJCTB4MDk4CisjZGVmaW5lIFNVTjZJX0RTSV9QSVhFTF9QRjBfQ1JDX0ZPUkNFKG4p CSgobikgJiAweGZmZmYpCisKKyNkZWZpbmUgU1VONklfRFNJX1BJWEVMX1BGMV9SRUcJCTB4MDlj CisjZGVmaW5lIFNVTjZJX0RTSV9QSVhFTF9QRjFfQ1JDX0lOSVRfTElORU4obikJKCgobikgJiAw eGZmZmYpIDw8IDE2KQorI2RlZmluZSBTVU42SV9EU0lfUElYRUxfUEYxX0NSQ19JTklUX0xJTkUw KG4pCSgobikgJiAweGZmZmYpCisKKyNkZWZpbmUgU1VONklfRFNJX1NZTkNfSFNTX1JFRwkJMHgw YjAKKworI2RlZmluZSBTVU42SV9EU0lfU1lOQ19IU0VfUkVHCQkweDBiNAorCisjZGVmaW5lIFNV TjZJX0RTSV9TWU5DX1ZTU19SRUcJCTB4MGI4CisKKyNkZWZpbmUgU1VONklfRFNJX1NZTkNfVlNF X1JFRwkJMHgwYmMKKworI2RlZmluZSBTVU42SV9EU0lfQkxLX0hTQTBfUkVHCQkweDBjMAorCisj ZGVmaW5lIFNVTjZJX0RTSV9CTEtfSFNBMV9SRUcJCTB4MGM0CisjZGVmaW5lIFNVTjZJX0RTSV9C TEtfUEYobikJCQkoKChuKSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lIFNVTjZJX0RTSV9CTEtf UEQobikJCQkoKG4pICYgMHhmZikKKworI2RlZmluZSBTVU42SV9EU0lfQkxLX0hCUDBfUkVHCQkw eDBjOAorCisjZGVmaW5lIFNVTjZJX0RTSV9CTEtfSEJQMV9SRUcJCTB4MGNjCisKKyNkZWZpbmUg U1VONklfRFNJX0JMS19IRlAwX1JFRwkJMHgwZDAKKworI2RlZmluZSBTVU42SV9EU0lfQkxLX0hG UDFfUkVHCQkweDBkNAorCisjZGVmaW5lIFNVTjZJX0RTSV9CTEtfSEJMSzBfUkVHCQkweDBlMAor CisjZGVmaW5lIFNVTjZJX0RTSV9CTEtfSEJMSzFfUkVHCQkweDBlNAorCisjZGVmaW5lIFNVTjZJ X0RTSV9CTEtfVkJMSzBfUkVHCQkweDBlOAorCisjZGVmaW5lIFNVTjZJX0RTSV9CTEtfVkJMSzFf UkVHCQkweDBlYworCisjZGVmaW5lIFNVTjZJX0RTSV9CVVJTVF9MSU5FX1JFRwkweDBmMAorI2Rl ZmluZSBTVU42SV9EU0lfQlVSU1RfTElORV9TWU5DX1BPSU5UKG4pCSgoKG4pICYgMHhmZmZmKSA8 PCAxNikKKyNkZWZpbmUgU1VONklfRFNJX0JVUlNUX0xJTkVfTlVNKG4pCQkoKG4pICYgMHhmZmZm KQorCisjZGVmaW5lIFNVTjZJX0RTSV9CVVJTVF9EUlFfUkVHCQkweDBmNAorI2RlZmluZSBTVU42 SV9EU0lfQlVSU1RfRFJRX0VER0UxKG4pCQkoKChuKSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5l IFNVTjZJX0RTSV9CVVJTVF9EUlFfRURHRTAobikJCSgobikgJiAweGZmZmYpCisKKyNkZWZpbmUg U1VONklfRFNJX0NNRF9DVExfUkVHCQkweDIwMAorI2RlZmluZSBTVU42SV9EU0lfQ01EX0NUTF9S WF9PVkVSRkxPVwkJQklUKDI2KQorI2RlZmluZSBTVU42SV9EU0lfQ01EX0NUTF9SWF9GTEFHCQlC SVQoMjUpCisjZGVmaW5lIFNVTjZJX0RTSV9DTURfQ1RMX1RYX0ZMQUcJCUJJVCg5KQorCisjZGVm aW5lIFNVTjZJX0RTSV9DTURfUlhfUkVHKG4pCQkoMHgyNDAgKyAobikgKiAweDA0KQorCisjZGVm aW5lIFNVTjZJX0RTSV9ERUJVR19EQVRBX1JFRwkweDJmOAorCisjZGVmaW5lIFNVTjZJX0RTSV9D TURfVFhfUkVHKG4pCQkoMHgzMDAgKyAobikgKiAweDA0KQorCitlbnVtIHN1bjZpX2RzaV9zdGFy dF9pbnN0IHsKKwlEU0lfU1RBUlRfTFBSWCwKKwlEU0lfU1RBUlRfTFBUWCwKKwlEU0lfU1RBUlRf SFNDLAorCURTSV9TVEFSVF9IU0QsCit9OworCitlbnVtIHN1bjZpX2RzaV9pbnN0X2lkIHsKKwlE U0lfSU5TVF9JRF9MUDExCT0gMCwKKwlEU0lfSU5TVF9JRF9UQkEsCisJRFNJX0lOU1RfSURfSFND LAorCURTSV9JTlNUX0lEX0hTRCwKKwlEU0lfSU5TVF9JRF9MUERULAorCURTSV9JTlNUX0lEX0hT Q0VYSVQsCisJRFNJX0lOU1RfSURfTk9QLAorCURTSV9JTlNUX0lEX0RMWSwKKwlEU0lfSU5TVF9J RF9FTkQJCT0gMTUsCit9OworCitlbnVtIHN1bjZpX2RzaV9pbnN0X21vZGUgeworCURTSV9JTlNU X01PREVfU1RPUAk9IDAsCisJRFNJX0lOU1RfTU9ERV9UQkEsCisJRFNJX0lOU1RfTU9ERV9IUywK KwlEU0lfSU5TVF9NT0RFX0VTQ0FQRSwKKwlEU0lfSU5TVF9NT0RFX0hTQ0VYSVQsCisJRFNJX0lO U1RfTU9ERV9OT1AsCit9OworCitlbnVtIHN1bjZpX2RzaV9pbnN0X2VzY2FwZSB7CisJRFNJX0lO U1RfRVNDQV9MUERUCT0gMCwKKwlEU0lfSU5TVF9FU0NBX1VMUFMsCisJRFNJX0lOU1RfRVNDQV9V TjEsCisJRFNJX0lOU1RfRVNDQV9VTjIsCisJRFNJX0lOU1RfRVNDQV9SRVNFVCwKKwlEU0lfSU5T VF9FU0NBX1VOMywKKwlEU0lfSU5TVF9FU0NBX1VONCwKKwlEU0lfSU5TVF9FU0NBX1VONSwKK307 CisKK2VudW0gc3VuNmlfZHNpX2luc3RfcGFja2V0IHsKKwlEU0lfSU5TVF9QQUNLX1BJWEVMCT0g MCwKKwlEU0lfSU5TVF9QQUNLX0NPTU1BTkQsCit9OworCitzdGF0aWMgdTMyIHN1bjZpX2RzaV9l Y2NfYXJyYXlbXSA9IHsKKwlbMF0gPSAoQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDQp IHwgQklUKDUpIHwgQklUKDcpIHwgQklUKDEwKSB8CisJICAgICAgIEJJVCgxMSkgfCBCSVQoMTMp IHwgQklUKDE2KSB8IEJJVCgyMCkgfCBCSVQoMjEpIHwgQklUKDIyKSB8CisJICAgICAgIEJJVCgy MykpLAorCVsxXSA9IChCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMykgfCBCSVQoNCkgfCBCSVQoNikg fCBCSVQoOCkgfCBCSVQoMTApIHwKKwkgICAgICAgQklUKDEyKSB8IEJJVCgxNCkgfCBCSVQoMTcp IHwgQklUKDIwKSB8IEJJVCgyMSkgfCBCSVQoMjIpIHwKKwkgICAgICAgQklUKDIzKSksCisJWzJd ID0gKEJJVCgwKSB8IEJJVCgyKSB8IEJJVCgzKSB8IEJJVCg1KSB8IEJJVCg2KSB8IEJJVCg5KSB8 IEJJVCgxMSkgfAorCSAgICAgICBCSVQoMTIpIHwgQklUKDE1KSB8IEJJVCgxOCkgfCBCSVQoMjAp IHwgQklUKDIxKSB8IEJJVCgyMikpLAorCVszXSA9IChCSVQoMSkgfCBCSVQoMikgfCBCSVQoMykg fCBCSVQoNykgfCBCSVQoOCkgfCBCSVQoOSkgfCBCSVQoMTMpIHwKKwkgICAgICAgQklUKDE0KSB8 IEJJVCgxNSkgfCBCSVQoMTkpIHwgQklUKDIwKSB8IEJJVCgyMSkgfCBCSVQoMjMpKSwKKwlbNF0g PSAoQklUKDQpIHwgQklUKDUpIHwgQklUKDYpIHwgQklUKDcpIHwgQklUKDgpIHwgQklUKDkpIHwg QklUKDE2KSB8CisJICAgICAgIEJJVCgxNykgfCBCSVQoMTgpIHwgQklUKDE5KSB8IEJJVCgyMCkg fCBCSVQoMjIpIHwgQklUKDIzKSksCisJWzVdID0gKEJJVCgxMCkgfCBCSVQoMTEpIHwgQklUKDEy KSB8IEJJVCgxMykgfCBCSVQoMTQpIHwgQklUKDE1KSB8CisJICAgICAgIEJJVCgxNikgfCBCSVQo MTcpIHwgQklUKDE4KSB8IEJJVCgxOSkgfCBCSVQoMjEpIHwgQklUKDIyKSB8CisJICAgICAgIEJJ VCgyMykpLAorfTsKKworc3RhdGljIHUzMiBzdW42aV9kc2lfZWNjX2NvbXB1dGUodW5zaWduZWQg aW50IGRhdGEpCit7CisJaW50IGk7CisJdTggZWNjID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKHN1bjZpX2RzaV9lY2NfYXJyYXkpOyBpKyspIHsKKwkJdTMyIGZpZWxkID0gc3Vu NmlfZHNpX2VjY19hcnJheVtpXTsKKwkJYm9vbCBpbml0ID0gZmFsc2U7CisJCXU4IHZhbCA9IDA7 CisJCWludCBqOworCisJCWZvciAoaiA9IDA7IGogPCAyNDsgaisrKSB7CisJCQlpZiAoIShCSVQo aikgJiBmaWVsZCkpCisJCQkJY29udGludWU7CisKKwkJCWlmICghaW5pdCkgeworCQkJCXZhbCA9 IChCSVQoaikgJiBkYXRhKSA/IDEgOiAwOworCQkJCWluaXQgPSB0cnVlOworCQkJfSBlbHNlIHsK KwkJCQl2YWwgXj0gKEJJVChqKSAmIGRhdGEpID8gMSA6IDA7CisJCQl9CisJCX0KKworCQllY2Mg fD0gdmFsIDw8IGk7CisJfQorCisJcmV0dXJuIGVjYzsKK30KKworc3RhdGljIHUxNiBzdW42aV9k c2lfY3JjX2NvbXB1dGUodTggY29uc3QgKmJ1ZmZlciwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4g Y3JjX2NjaXR0KDB4ZmZmZiwgYnVmZmVyLCBsZW4pOworfQorCitzdGF0aWMgdTE2IHN1bjZpX2Rz aV9jcmNfcmVwZWF0X2NvbXB1dGUodTggcGQsIHNpemVfdCBsZW4pCit7CisJdTggYnVmZmVyW2xl bl07CisKKwltZW1zZXQoYnVmZmVyLCBwZCwgbGVuKTsKKworCXJldHVybiBzdW42aV9kc2lfY3Jj X2NvbXB1dGUoYnVmZmVyLCBsZW4pOworfQorCitzdGF0aWMgdTMyIHN1bjZpX2RzaV9idWlsZF9z eW5jX3BrdCh1OCBkdCwgdTggdmMsIHU4IGQwLCB1OCBkMSkKK3sKKwl1MzIgdmFsID0gZHQgJiAw eDNmOworCisJdmFsIHw9ICh2YyAmIDMpIDw8IDY7CisJdmFsIHw9IChkMCAmIDB4ZmYpIDw8IDg7 CisJdmFsIHw9IChkMSAmIDB4ZmYpIDw8IDE2OworCXZhbCB8PSBzdW42aV9kc2lfZWNjX2NvbXB1 dGUodmFsKSA8PCAyNDsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB1MzIgc3VuNmlfZHNp X2J1aWxkX2JsazBfcGt0KHU4IHZjLCB1MTYgd2MpCit7CisJcmV0dXJuIHN1bjZpX2RzaV9idWls ZF9zeW5jX3BrdChNSVBJX0RTSV9CTEFOS0lOR19QQUNLRVQsIHZjLAorCQkJCQl3YyAmIDB4ZmYs IHdjID4+IDgpOworfQorCitzdGF0aWMgdTMyIHN1bjZpX2RzaV9idWlsZF9ibGsxX3BrdCh1MTYg cGQsIHNpemVfdCBsZW4pCit7CisJdTMyIHZhbCA9IFNVTjZJX0RTSV9CTEtfUEQocGQpOworCisJ cmV0dXJuIHZhbCB8IFNVTjZJX0RTSV9CTEtfUEYoc3VuNmlfZHNpX2NyY19yZXBlYXRfY29tcHV0 ZShwZCwgbGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN1bjZpX2RzaV9pbnN0X2Fib3J0KHN0cnVj dCBzdW42aV9kc2kgKmRzaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZWdzLCBTVU42 SV9EU0lfQkFTSUNfQ1RMMF9SRUcsCisJCQkgICBTVU42SV9EU0lfQkFTSUNfQ1RMMF9JTlNUX1NU LCAwKTsKK30KKworc3RhdGljIHZvaWQgc3VuNmlfZHNpX2luc3RfY29tbWl0KHN0cnVjdCBzdW42 aV9kc2kgKmRzaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZWdzLCBTVU42SV9EU0lf QkFTSUNfQ1RMMF9SRUcsCisJCQkgICBTVU42SV9EU0lfQkFTSUNfQ1RMMF9JTlNUX1NULAorCQkJ ICAgU1VONklfRFNJX0JBU0lDX0NUTDBfSU5TVF9TVCk7Cit9CisKK3N0YXRpYyBpbnQgc3VuNmlf ZHNpX2luc3Rfd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3Qgc3VuNmlfZHNpICpkc2kpCit7CisJ dTMyIHZhbDsKKworCXJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoZHNpLT5yZWdzLCBT VU42SV9EU0lfQkFTSUNfQ1RMMF9SRUcsCisJCQkJCXZhbCwKKwkJCQkJISh2YWwgJiBTVU42SV9E U0lfQkFTSUNfQ1RMMF9JTlNUX1NUKSwKKwkJCQkJMTAwLCA1MDAwKTsKK30KKworc3RhdGljIHZv aWQgc3VuNmlfZHNpX2luc3Rfc2V0dXAoc3RydWN0IHN1bjZpX2RzaSAqZHNpLAorCQkJCSBlbnVt IHN1bjZpX2RzaV9pbnN0X2lkIGlkLAorCQkJCSBlbnVtIHN1bjZpX2RzaV9pbnN0X21vZGUgbW9k ZSwKKwkJCQkgYm9vbCBjbG9jaywgdTggZGF0YSwKKwkJCQkgZW51bSBzdW42aV9kc2lfaW5zdF9w YWNrZXQgcGFja2V0LAorCQkJCSBlbnVtIHN1bjZpX2RzaV9pbnN0X2VzY2FwZSBlc2NhcGUpCit7 CisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0lOU1RfRlVOQ19SRUcoaWQpLAor CQkgICAgIFNVTjZJX0RTSV9JTlNUX0ZVTkNfSU5TVF9NT0RFKG1vZGUpIHwKKwkJICAgICBTVU42 SV9EU0lfSU5TVF9GVU5DX0VTQ0FQRV9FTlRSWShlc2NhcGUpIHwKKwkJICAgICBTVU42SV9EU0lf SU5TVF9GVU5DX1RSQU5TX1BBQ0tFVChwYWNrZXQpIHwKKwkJICAgICAoY2xvY2sgPyBTVU42SV9E U0lfSU5TVF9GVU5DX0xBTkVfQ0VOIDogMCkgfAorCQkgICAgIFNVTjZJX0RTSV9JTlNUX0ZVTkNf TEFORV9ERU4oZGF0YSkpOworfQorCitzdGF0aWMgdm9pZCBzdW42aV9kc2lfaW5zdF9pbml0KHN0 cnVjdCBzdW42aV9kc2kgKmRzaSwKKwkJCQlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2Up Cit7CisJdTggbGFuZXNfbWFzayA9IEdFTk1BU0soZGV2aWNlLT5sYW5lcyAtIDEsIDApOworCisJ c3VuNmlfZHNpX2luc3Rfc2V0dXAoZHNpLCBEU0lfSU5TVF9JRF9MUDExLCBEU0lfSU5TVF9NT0RF X1NUT1AsCisJCQkgICAgIHRydWUsIGxhbmVzX21hc2ssIDAsIDApOworCisJc3VuNmlfZHNpX2lu c3Rfc2V0dXAoZHNpLCBEU0lfSU5TVF9JRF9UQkEsIERTSV9JTlNUX01PREVfVEJBLAorCQkJICAg ICBmYWxzZSwgMSwgMCwgMCk7CisKKwlzdW42aV9kc2lfaW5zdF9zZXR1cChkc2ksIERTSV9JTlNU X0lEX0hTQywgRFNJX0lOU1RfTU9ERV9IUywKKwkJCSAgICAgdHJ1ZSwgMCwgRFNJX0lOU1RfUEFD S19QSVhFTCwgMCk7CisKKwlzdW42aV9kc2lfaW5zdF9zZXR1cChkc2ksIERTSV9JTlNUX0lEX0hT RCwgRFNJX0lOU1RfTU9ERV9IUywKKwkJCSAgICAgZmFsc2UsIGxhbmVzX21hc2ssIERTSV9JTlNU X1BBQ0tfUElYRUwsIDApOworCisJc3VuNmlfZHNpX2luc3Rfc2V0dXAoZHNpLCBEU0lfSU5TVF9J RF9MUERULCBEU0lfSU5TVF9NT0RFX0VTQ0FQRSwKKwkJCSAgICAgZmFsc2UsIDEsIERTSV9JTlNU X1BBQ0tfQ09NTUFORCwKKwkJCSAgICAgRFNJX0lOU1RfRVNDQV9MUERUKTsKKworCXN1bjZpX2Rz aV9pbnN0X3NldHVwKGRzaSwgRFNJX0lOU1RfSURfSFNDRVhJVCwgRFNJX0lOU1RfTU9ERV9IU0NF WElULAorCQkJICAgICB0cnVlLCAwLCAwLCAwKTsKKworCXN1bjZpX2RzaV9pbnN0X3NldHVwKGRz aSwgRFNJX0lOU1RfSURfTk9QLCBEU0lfSU5TVF9NT0RFX1NUT1AsCisJCQkgICAgIGZhbHNlLCBs YW5lc19tYXNrLCAwLCAwKTsKKworCXN1bjZpX2RzaV9pbnN0X3NldHVwKGRzaSwgRFNJX0lOU1Rf SURfRExZLCBEU0lfSU5TVF9NT0RFX05PUCwKKwkJCSAgICAgdHJ1ZSwgbGFuZXNfbWFzaywgMCwg MCk7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfSU5TVF9KVU1QX0NGR19S RUcoMCksCisJCSAgICAgU1VONklfRFNJX0lOU1RfSlVNUF9DRkdfUE9JTlQoRFNJX0lOU1RfSURf Tk9QKSB8CisJCSAgICAgU1VONklfRFNJX0lOU1RfSlVNUF9DRkdfVE8oRFNJX0lOU1RfSURfSFND RVhJVCkgfAorCQkgICAgIFNVTjZJX0RTSV9JTlNUX0pVTVBfQ0ZHX05VTSgxKSk7Cit9OworCitz dGF0aWMgdTE2IHN1bjZpX2RzaV9nZXRfdmlkZW9fc3RhcnRfZGVsYXkoc3RydWN0IHN1bjZpX2Rz aSAqZHNpLAorCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlyZXR1 cm4gbW9kZS0+dnRvdGFsIC0gKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZkaXNwbGF5KSArIDE7 Cit9CisKK3N0YXRpYyB2b2lkIHN1bjZpX2RzaV9zZXR1cF9idXJzdChzdHJ1Y3Qgc3VuNmlfZHNp ICpkc2ksCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkZXZpY2UgPSBkc2ktPmRldmljZTsKKwl1MzIgdmFsID0gMDsKKwor CWlmICgobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aGRpc3BsYXkpID4gMjApIHsKKwkJLyogTWFh YWFhYWdpYyAqLworCQl1MTYgZHJxID0gKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhkaXNwbGF5 KSAtIDIwOworCisJCWRycSAqPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRldmljZS0+ Zm9ybWF0KTsKKwkJZHJxIC89IDMyOworCisJCXZhbCA9IChTVU42SV9EU0lfVENPTl9EUlFfRU5B QkxFX01PREUgfAorCQkgICAgICAgU1VONklfRFNJX1RDT05fRFJRX1NFVChkcnEpKTsKKwl9CisK KwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfVENPTl9EUlFfUkVHLCB2YWwpOwor fQorCitzdGF0aWMgdm9pZCBzdW42aV9kc2lfc2V0dXBfaW5zdF9sb29wKHN0cnVjdCBzdW42aV9k c2kgKmRzaSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1 MTYgZGVsYXkgPSA1MCAtIDE7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lf SU5TVF9MT09QX05VTV9SRUcoMCksCisJCSAgICAgU1VONklfRFNJX0lOU1RfTE9PUF9OVU1fTjAo NTAgLSAxKSB8CisJCSAgICAgU1VONklfRFNJX0lOU1RfTE9PUF9OVU1fTjEoZGVsYXkpKTsKKwly ZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfSU5TVF9MT09QX05VTV9SRUcoMSksCisJ CSAgICAgU1VONklfRFNJX0lOU1RfTE9PUF9OVU1fTjAoNTAgLSAxKSB8CisJCSAgICAgU1VONklf RFNJX0lOU1RfTE9PUF9OVU1fTjEoZGVsYXkpKTsKK30KKworc3RhdGljIHZvaWQgc3VuNmlfZHNp X3NldHVwX2Zvcm1hdChzdHJ1Y3Qgc3VuNmlfZHNpICpkc2ksCisJCQkJICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlID0g ZHNpLT5kZXZpY2U7CisJdTMyIHZhbCA9IFNVTjZJX0RTSV9QSVhFTF9QSF9WQyhkZXZpY2UtPmNo YW5uZWwpOworCXU4IGR0LCBmbXQ7CisJdTE2IHdjOworCisJLyoKKwkgKiBUT0RPOiBUaGUgZm9y bWF0IGRlZmluZXMgYXJlIG9ubHkgdmFsaWQgaW4gdmlkZW8gbW9kZSBhbmQKKwkgKiBjaGFuZ2Ug aW4gY29tbWFuZCBtb2RlLgorCSAqLworCXN3aXRjaCAoZGV2aWNlLT5mb3JtYXQpIHsKKwljYXNl IE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCWR0ID0gTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVB TV8yNDsKKwkJZm10ID0gODsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2Ogor CQlkdCA9IE1JUElfRFNJX1BJWEVMX1NUUkVBTV8zQllURV8xODsKKwkJZm10ID0gOTsKKwkJYnJl YWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJZHQgPSBNSVBJX0RTSV9Q QUNLRURfUElYRUxfU1RSRUFNXzE4OworCQlmbXQgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBNSVBJ X0RTSV9GTVRfUkdCNTY1OgorCQlkdCA9IE1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fMTY7 CisJCWZtdCA9IDExOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCXZhbCB8 PSBTVU42SV9EU0lfUElYRUxfUEhfRFQoZHQpOworCisJd2MgPSBtb2RlLT5oZGlzcGxheSAqIG1p cGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZGV2aWNlLT5mb3JtYXQpIC8gODsKKwl2YWwgfD0g U1VONklfRFNJX1BJWEVMX1BIX1dDKHdjKTsKKwl2YWwgfD0gU1VONklfRFNJX1BJWEVMX1BIX0VD QyhzdW42aV9kc2lfZWNjX2NvbXB1dGUodmFsKSk7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdz LCBTVU42SV9EU0lfUElYRUxfUEhfUkVHLCB2YWwpOworCisJcmVnbWFwX3dyaXRlKGRzaS0+cmVn cywgU1VONklfRFNJX1BJWEVMX1BGMF9SRUcsCisJCSAgICAgU1VONklfRFNJX1BJWEVMX1BGMF9D UkNfRk9SQ0UoMHhmZmZmKSk7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lf UElYRUxfUEYxX1JFRywKKwkJICAgICBTVU42SV9EU0lfUElYRUxfUEYxX0NSQ19JTklUX0xJTkUw KDB4ZmZmZikgfAorCQkgICAgIFNVTjZJX0RTSV9QSVhFTF9QRjFfQ1JDX0lOSVRfTElORU4oMHhm ZmZmKSk7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfUElYRUxfQ1RMMF9S RUcsCisJCSAgICAgU1VONklfRFNJX1BJWEVMX0NUTDBfUERfUExVR19ESVNBQkxFIHwKKwkJICAg ICBTVU42SV9EU0lfUElYRUxfQ1RMMF9GT1JNQVQoZm10KSk7Cit9CisKK3N0YXRpYyB2b2lkIHN1 bjZpX2RzaV9zZXR1cF90aW1pbmdzKHN0cnVjdCBzdW42aV9kc2kgKmRzaSwKKwkJCQkgICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZGV2aWNlID0gZHNpLT5kZXZpY2U7CisJdW5zaWduZWQgaW50IEJwcCA9IG1pcGlfZHNpX3BpeGVs X2Zvcm1hdF90b19icHAoZGV2aWNlLT5mb3JtYXQpIC8gODsKKwl1MTYgaGJwLCBoZnAsIGhzYSwg aGJsaywgdmJsazsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9CQVNJQ19D VExfUkVHLCAwKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9TWU5DX0hT U19SRUcsCisJCSAgICAgc3VuNmlfZHNpX2J1aWxkX3N5bmNfcGt0KE1JUElfRFNJX0hfU1lOQ19T VEFSVCwKKwkJCQkJICAgICAgZGV2aWNlLT5jaGFubmVsLAorCQkJCQkgICAgICAwLCAwKSk7CisK KwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfU1lOQ19IU0VfUkVHLAorCQkgICAg IHN1bjZpX2RzaV9idWlsZF9zeW5jX3BrdChNSVBJX0RTSV9IX1NZTkNfRU5ELAorCQkJCQkgICAg ICBkZXZpY2UtPmNoYW5uZWwsCisJCQkJCSAgICAgIDAsIDApKTsKKworCXJlZ21hcF93cml0ZShk c2ktPnJlZ3MsIFNVTjZJX0RTSV9TWU5DX1ZTU19SRUcsCisJCSAgICAgc3VuNmlfZHNpX2J1aWxk X3N5bmNfcGt0KE1JUElfRFNJX1ZfU1lOQ19TVEFSVCwKKwkJCQkJICAgICAgZGV2aWNlLT5jaGFu bmVsLAorCQkJCQkgICAgICAwLCAwKSk7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42 SV9EU0lfU1lOQ19WU0VfUkVHLAorCQkgICAgIHN1bjZpX2RzaV9idWlsZF9zeW5jX3BrdChNSVBJ X0RTSV9WX1NZTkNfRU5ELAorCQkJCQkgICAgICBkZXZpY2UtPmNoYW5uZWwsCisJCQkJCSAgICAg IDAsIDApKTsKKworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9CQVNJQ19TSVpF MF9SRUcsCisJCSAgICAgU1VONklfRFNJX0JBU0lDX1NJWkUwX1ZTQShtb2RlLT52c3luY19lbmQg LQorCQkJCQkgICAgICAgbW9kZS0+dnN5bmNfc3RhcnQpIHwKKwkJICAgICBTVU42SV9EU0lfQkFT SUNfU0laRTBfVkJQKG1vZGUtPnZzeW5jX3N0YXJ0IC0KKwkJCQkJICAgICAgIG1vZGUtPnZkaXNw bGF5KSk7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQkFTSUNfU0laRTFf UkVHLAorCQkgICAgIFNVTjZJX0RTSV9CQVNJQ19TSVpFMV9WQUNUKG1vZGUtPnZkaXNwbGF5KSB8 CisJCSAgICAgU1VONklfRFNJX0JBU0lDX1NJWkUxX1ZUKG1vZGUtPnZ0b3RhbCkpOworCisJLyoK KwkgKiBBIHN5bmMgcGVyaW9kIGlzIGNvbXBvc2VkIG9mIGEgYmxhbmtpbmcgcGFja2V0ICg0IGJ5 dGVzICsKKwkgKiBwYXlsb2FkICsgMiBieXRlcykgYW5kIGEgc3luYyBldmVudCBwYWNrZXQgKDQg Ynl0ZXMpLiBJdHMKKwkgKiBtaW5pbWFsIHNpemUgaXMgdGhlcmVmb3JlIDEwIGJ5dGVzCisJICov CisjZGVmaW5lIEhTQV9QQUNLRVRfT1ZFUkhFQUQJMTAKKwloc2EgPSBtYXgoKHVuc2lnbmVkIGlu dClIU0FfUEFDS0VUX09WRVJIRUFELAorCQkgIChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3lu Y19zdGFydCkgKiBCcHAgLSBIU0FfUEFDS0VUX09WRVJIRUFEKTsKKwlyZWdtYXBfd3JpdGUoZHNp LT5yZWdzLCBTVU42SV9EU0lfQkxLX0hTQTBfUkVHLAorCQkgICAgIHN1bjZpX2RzaV9idWlsZF9i bGswX3BrdChkZXZpY2UtPmNoYW5uZWwsIGhzYSkpOworCXJlZ21hcF93cml0ZShkc2ktPnJlZ3Ms IFNVTjZJX0RTSV9CTEtfSFNBMV9SRUcsCisJCSAgICAgc3VuNmlfZHNpX2J1aWxkX2JsazFfcGt0 KDAsIGhzYSkpOworCisJLyoKKwkgKiBUaGUgYmFja3BvcmNoIGlzIHNldCB1c2luZyBhIGJsYW5r aW5nIHBhY2tldCAoNCBieXRlcyArCisJICogcGF5bG9hZCArIDIgYnl0ZXMpLiBJdHMgbWluaW1h bCBzaXplIGlzIHRoZXJlZm9yZSA2IGJ5dGVzCisJICovCisjZGVmaW5lIEhCUF9QQUNLRVRfT1ZF UkhFQUQJNgorCWhicCA9IG1heCgodW5zaWduZWQgaW50KUhCUF9QQUNLRVRfT1ZFUkhFQUQsCisJ CSAgKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXkpICogQnBwIC0gSEJQX1BBQ0tF VF9PVkVSSEVBRCk7CisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0JMS19IQlAw X1JFRywKKwkJICAgICBzdW42aV9kc2lfYnVpbGRfYmxrMF9wa3QoZGV2aWNlLT5jaGFubmVsLCBo YnApKTsKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQkxLX0hCUDFfUkVHLAor CQkgICAgIHN1bjZpX2RzaV9idWlsZF9ibGsxX3BrdCgwLCBoYnApKTsKKworCS8qCisJICogVGhl IGZyb250cG9yY2ggaXMgc2V0IHVzaW5nIGEgYmxhbmtpbmcgcGFja2V0ICg0IGJ5dGVzICsKKwkg KiBwYXlsb2FkICsgMiBieXRlcykuIEl0cyBtaW5pbWFsIHNpemUgaXMgdGhlcmVmb3JlIDYgYnl0 ZXMKKwkgKi8KKyNkZWZpbmUgSEZQX1BBQ0tFVF9PVkVSSEVBRAk2CisJaGZwID0gbWF4KCh1bnNp Z25lZCBpbnQpSEZQX1BBQ0tFVF9PVkVSSEVBRCwKKwkJICAobW9kZS0+aHRvdGFsIC0gbW9kZS0+ aHN5bmNfZW5kKSAqIEJwcCAtIEhGUF9QQUNLRVRfT1ZFUkhFQUQpOworCXJlZ21hcF93cml0ZShk c2ktPnJlZ3MsIFNVTjZJX0RTSV9CTEtfSEZQMF9SRUcsCisJCSAgICAgc3VuNmlfZHNpX2J1aWxk X2JsazBfcGt0KGRldmljZS0+Y2hhbm5lbCwgaGZwKSk7CisJcmVnbWFwX3dyaXRlKGRzaS0+cmVn cywgU1VONklfRFNJX0JMS19IRlAxX1JFRywKKwkJICAgICBzdW42aV9kc2lfYnVpbGRfYmxrMV9w a3QoMCwgaGZwKSk7CisKKwkvKgorCSAqIGhibGsgc2VlbXMgdG8gYmUgdGhlIGxpbmUgKyBwb3Jj aGVzIGxlbmd0aC4KKwkgKi8KKwloYmxrID0gbW9kZS0+aHRvdGFsICogQnBwIC0gaHNhOworCXJl Z21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9CTEtfSEJMSzBfUkVHLAorCQkgICAgIHN1 bjZpX2RzaV9idWlsZF9ibGswX3BrdChkZXZpY2UtPmNoYW5uZWwsIGhibGspKTsKKwlyZWdtYXBf d3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQkxLX0hCTEsxX1JFRywKKwkJICAgICBzdW42aV9k c2lfYnVpbGRfYmxrMV9wa3QoMCwgaGJsaykpOworCisJLyoKKwkgKiBBbmQgSSdtIG5vdCBlbnRp cmVseSBzdXJlIHdoYXQgdmJsayBpcyBhYm91dC4gVGhlIGRyaXZlciBpbgorCSAqIEFsbHdpbm5l ciBCU1AgaXMgdXNpbmcgYSByYXRoZXIgY29udm9sdXRlZCBjYWxjdWxhdGlvbgorCSAqIHRoZXJl IG9ubHkgZm9yIDQgbGFuZXMuIEhvd2V2ZXIsIHVzaW5nIDAgKHRoZSAhNCBsYW5lcworCSAqIGNh c2UpIGV2ZW4gd2l0aCBhIDQgbGFuZXMgc2NyZWVuIHNlZW1zIHRvIHdvcmsuLi4KKwkgKi8KKwl2 YmxrID0gMDsKKwlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQkxLX1ZCTEswX1JF RywKKwkJICAgICBzdW42aV9kc2lfYnVpbGRfYmxrMF9wa3QoZGV2aWNlLT5jaGFubmVsLCB2Ymxr KSk7CisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0JMS19WQkxLMV9SRUcsCisJ CSAgICAgc3VuNmlfZHNpX2J1aWxkX2JsazFfcGt0KDAsIHZibGspKTsKK30KKworc3RhdGljIGlu dCBzdW42aV9kc2lfc3RhcnQoc3RydWN0IHN1bjZpX2RzaSAqZHNpLAorCQkJICAgZW51bSBzdW42 aV9kc2lfc3RhcnRfaW5zdCBmdW5jKQoreworCXN3aXRjaCAoZnVuYykgeworCWNhc2UgRFNJX1NU QVJUX0xQVFg6CisJCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9JTlNUX0pVTVBf U0VMX1JFRywKKwkJCSAgICAgRFNJX0lOU1RfSURfTFBEVCA8PCAoNCAqIERTSV9JTlNUX0lEX0xQ MTEpIHwKKwkJCSAgICAgRFNJX0lOU1RfSURfRU5EICA8PCAoNCAqIERTSV9JTlNUX0lEX0xQRFQp KTsKKwkJYnJlYWs7CisJY2FzZSBEU0lfU1RBUlRfTFBSWDoKKwkJcmVnbWFwX3dyaXRlKGRzaS0+ cmVncywgU1VONklfRFNJX0lOU1RfSlVNUF9TRUxfUkVHLAorCQkJICAgICBEU0lfSU5TVF9JRF9M UERUIDw8ICg0ICogRFNJX0lOU1RfSURfTFAxMSkgfAorCQkJICAgICBEU0lfSU5TVF9JRF9ETFkg IDw8ICg0ICogRFNJX0lOU1RfSURfTFBEVCkgfAorCQkJICAgICBEU0lfSU5TVF9JRF9UQkEgIDw8 ICg0ICogRFNJX0lOU1RfSURfRExZKSB8CisJCQkgICAgIERTSV9JTlNUX0lEX0VORCAgPDwgKDQg KiBEU0lfSU5TVF9JRF9UQkEpKTsKKwkJYnJlYWs7CisJY2FzZSBEU0lfU1RBUlRfSFNDOgorCQly ZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfSU5TVF9KVU1QX1NFTF9SRUcsCisJCQkg ICAgIERTSV9JTlNUX0lEX0hTQyAgPDwgKDQgKiBEU0lfSU5TVF9JRF9MUDExKSB8CisJCQkgICAg IERTSV9JTlNUX0lEX0VORCAgPDwgKDQgKiBEU0lfSU5TVF9JRF9IU0MpKTsKKwkJYnJlYWs7CisJ Y2FzZSBEU0lfU1RBUlRfSFNEOgorCQlyZWdtYXBfd3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lf SU5TVF9KVU1QX1NFTF9SRUcsCisJCQkgICAgIERTSV9JTlNUX0lEX05PUCAgPDwgKDQgKiBEU0lf SU5TVF9JRF9MUDExKSB8CisJCQkgICAgIERTSV9JTlNUX0lEX0hTRCAgPDwgKDQgKiBEU0lfSU5T VF9JRF9OT1ApIHwKKwkJCSAgICAgRFNJX0lOU1RfSURfRExZICA8PCAoNCAqIERTSV9JTlNUX0lE X0hTRCkgfAorCQkJICAgICBEU0lfSU5TVF9JRF9OT1AgIDw8ICg0ICogRFNJX0lOU1RfSURfRExZ KSB8CisJCQkgICAgIERTSV9JTlNUX0lEX0VORCAgPDwgKDQgKiBEU0lfSU5TVF9JRF9IU0NFWElU KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJ X0RTSV9JTlNUX0pVTVBfU0VMX1JFRywKKwkJCSAgICAgRFNJX0lOU1RfSURfRU5EICA8PCAoNCAq IERTSV9JTlNUX0lEX0xQMTEpKTsKKwkJYnJlYWs7CisJfQorCisJc3VuNmlfZHNpX2luc3RfYWJv cnQoZHNpKTsKKwlzdW42aV9kc2lfaW5zdF9jb21taXQoZHNpKTsKKworCWlmIChmdW5jID09IERT SV9TVEFSVF9IU0MpCisJCXJlZ21hcF93cml0ZV9iaXRzKGRzaS0+cmVncywKKwkJCQkgIFNVTjZJ X0RTSV9JTlNUX0ZVTkNfUkVHKERTSV9JTlNUX0lEX0xQMTEpLAorCQkJCSAgU1VONklfRFNJX0lO U1RfRlVOQ19MQU5FX0NFTiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3Vu NmlfZHNpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZlbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRq dXN0ZWRfbW9kZTsKKwlzdHJ1Y3Qgc3VuNmlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX3N1bjZpX2Rz aShlbmNvZGVyKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UgPSBkc2ktPmRldmlj ZTsKKwl1MTYgZGVsYXk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJFbmFibGluZyBEU0kgb3V0cHV0 XG4iKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYpOworCisJZGVsYXkgPSBzdW42 aV9kc2lfZ2V0X3ZpZGVvX3N0YXJ0X2RlbGF5KGRzaSwgbW9kZSk7CisJcmVnbWFwX3dyaXRlKGRz aS0+cmVncywgU1VONklfRFNJX0JBU0lDX0NUTDFfUkVHLAorCQkgICAgIFNVTjZJX0RTSV9CQVNJ Q19DVEwxX1ZJREVPX1NUX0RFTEFZKGRlbGF5KSB8CisJCSAgICAgU1VONklfRFNJX0JBU0lDX0NU TDFfVklERU9fRklMTCB8CisJCSAgICAgU1VONklfRFNJX0JBU0lDX0NUTDFfVklERU9fUFJFQ0lT SU9OIHwKKwkJICAgICBTVU42SV9EU0lfQkFTSUNfQ1RMMV9WSURFT19NT0RFKTsKKworCXN1bjZp X2RzaV9zZXR1cF9idXJzdChkc2ksIG1vZGUpOworCXN1bjZpX2RzaV9zZXR1cF9pbnN0X2xvb3Ao ZHNpLCBtb2RlKTsKKwlzdW42aV9kc2lfc2V0dXBfZm9ybWF0KGRzaSwgbW9kZSk7CisJc3VuNmlf ZHNpX3NldHVwX3RpbWluZ3MoZHNpLCBtb2RlKTsKKworCXN1bjZpX2RwaHlfaW5pdChkc2ktPmRw aHksIGRldmljZS0+bGFuZXMpOworCXN1bjZpX2RwaHlfcG93ZXJfb24oZHNpLT5kcGh5LCBkZXZp Y2UtPmxhbmVzKTsKKworCWlmICghSVNfRVJSKGRzaS0+cGFuZWwpKQorCQlkcm1fcGFuZWxfcHJl cGFyZShkc2ktPnBhbmVsKTsKKworCXN1bjZpX2RzaV9zdGFydChkc2ksIERTSV9TVEFSVF9IU0Mp OworCisJdWRlbGF5KDEwMDApOworCisJc3VuNmlfZHNpX3N0YXJ0KGRzaSwgRFNJX1NUQVJUX0hT RCk7CisKKwlpZiAoIUlTX0VSUihkc2ktPnBhbmVsKSkKKwkJZHJtX3BhbmVsX2VuYWJsZShkc2kt PnBhbmVsKTsKK30KKworc3RhdGljIHZvaWQgc3VuNmlfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IHN1bjZpX2RzaSAqZHNpID0gZW5j b2Rlcl90b19zdW42aV9kc2koZW5jb2Rlcik7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJEaXNhYmxp bmcgRFNJIG91dHB1dFxuIik7CisKKwlpZiAoIUlTX0VSUihkc2ktPnBhbmVsKSkgeworCQlkcm1f cGFuZWxfZGlzYWJsZShkc2ktPnBhbmVsKTsKKwkJZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBh bmVsKTsKKwl9CisKKwlzdW42aV9kcGh5X3Bvd2VyX29mZihkc2ktPmRwaHkpOworCXN1bjZpX2Rw aHlfZXhpdChkc2ktPmRwaHkpOworCisJcG1fcnVudGltZV9wdXQoZHNpLT5kZXYpOworfQorCitz dGF0aWMgaW50IHN1bjZpX2RzaV9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKK3sKKwlzdHJ1Y3Qgc3VuNmlfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9fc3VuNmlfZHNp KGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2Rlcyhkc2ktPnBhbmVsKTsK K30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBzdW42aV9kc2lf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzCT0gc3VuNmlfZHNpX2dldF9t b2RlcywKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitzdW42aV9kc2lf Y29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZv cmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHN1bjZpX2RzaV9jb25uZWN0b3JfZnVu Y3MgPSB7CisJLmRwbXMJCQk9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5k ZXRlY3QJCQk9IHN1bjZpX2RzaV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21vZGVzCQk9IGRy bV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveQkJPSBkcm1f Y29ubmVjdG9yX2NsZWFudXAsCisJLnJlc2V0CQkJPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mgc3VuNmlfZHNpX2VuY19oZWxwZXJfZnVu Y3MgPSB7CisJLmRpc2FibGUJPSBzdW42aV9kc2lfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUJ CT0gc3VuNmlfZHNpX2VuY29kZXJfZW5hYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fZW5jb2Rlcl9mdW5jcyBzdW42aV9kc2lfZW5jX2Z1bmNzID0geworCS5kZXN0cm95CT0gZHJt X2VuY29kZXJfY2xlYW51cCwKK307CisKK3N0YXRpYyB1MzIgc3VuNmlfZHNpX2Rjc19idWlsZF9w a3RfaGRyKHN0cnVjdCBzdW42aV9kc2kgKmRzaSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG1p cGlfZHNpX21zZyAqbXNnKQoreworCXUzMiBwa3QgPSBtc2ctPnR5cGU7CisKKwlpZiAobXNnLT50 eXBlID09IE1JUElfRFNJX0RDU19MT05HX1dSSVRFKSB7CisJCXBrdCB8PSAoKG1zZy0+dHhfbGVu ICsgMSkgJiAweGZmZmYpIDw8IDg7CisJCXBrdCB8PSAoKChtc2ctPnR4X2xlbiArIDEpID4+IDgp ICYgMHhmZmZmKSA8PCAxNjsKKwl9IGVsc2UgeworCQlwa3QgfD0gKCgodTggKiltc2ctPnR4X2J1 ZilbMF0gPDwgOCk7CisJCWlmIChtc2ctPnR4X2xlbiA+IDEpCisJCQlwa3QgfD0gKCgodTggKilt c2ctPnR4X2J1ZilbMV0gPDwgMTYpOworCX0KKworCXBrdCB8PSBzdW42aV9kc2lfZWNjX2NvbXB1 dGUocGt0KSA8PCAyNDsKKworCXJldHVybiBwa3Q7Cit9CisKK3N0YXRpYyBpbnQgc3VuNmlfZHNp X2Rjc193cml0ZV9zaG9ydChzdHJ1Y3Qgc3VuNmlfZHNpICpkc2ksCisJCQkJICAgICBjb25zdCBz dHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VO NklfRFNJX0NNRF9UWF9SRUcoMCksCisJCSAgICAgc3VuNmlfZHNpX2Rjc19idWlsZF9wa3RfaGRy KGRzaSwgbXNnKSk7CisJcmVnbWFwX3dyaXRlX2JpdHMoZHNpLT5yZWdzLCBTVU42SV9EU0lfQ01E X0NUTF9SRUcsCisJCQkgIDB4ZmYsICg0IC0gMSkpOworCisJc3VuNmlfZHNpX3N0YXJ0KGRzaSwg RFNJX1NUQVJUX0xQVFgpOworCisJcmV0dXJuIG1zZy0+dHhfbGVuOworfQorCitzdGF0aWMgaW50 IHN1bjZpX2RzaV9kY3Nfd3JpdGVfbG9uZyhzdHJ1Y3Qgc3VuNmlfZHNpICpkc2ksCisJCQkJICAg IGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwlpbnQgcmV0LCBsZW4gPSAwOwor CXU4ICpib3VuY2U7CisJdTE2IGNyYzsKKwl1MzIgdmFsOworCisJcmVnbWFwX3dyaXRlKGRzaS0+ cmVncywgU1VONklfRFNJX0NNRF9UWF9SRUcoMCksCisJCSAgICAgc3VuNmlfZHNpX2Rjc19idWls ZF9wa3RfaGRyKGRzaSwgbXNnKSk7CisKKwlib3VuY2UgPSBremFsbG9jKG1zZy0+dHhfbGVuICsg c2l6ZW9mKGNyYyksIEdGUF9LRVJORUwpOworCWlmICghYm91bmNlKQorCQlyZXR1cm4gLUVOT01F TTsKKworCW1lbWNweShib3VuY2UsIG1zZy0+dHhfYnVmLCBtc2ctPnR4X2xlbik7CisJbGVuICs9 IG1zZy0+dHhfbGVuOworCisJY3JjID0gc3VuNmlfZHNpX2NyY19jb21wdXRlKGJvdW5jZSwgbXNn LT50eF9sZW4pOworCW1lbWNweSgodTggKilib3VuY2UgKyBtc2ctPnR4X2xlbiwgJmNyYywgc2l6 ZW9mKGNyYykpOworCWxlbiArPSBzaXplb2YoY3JjKTsKKworCXJlZ21hcF9idWxrX3dyaXRlKGRz aS0+cmVncywgU1VONklfRFNJX0NNRF9UWF9SRUcoMSksIGJvdW5jZSwgbGVuKTsKKwlyZWdtYXBf d3JpdGUoZHNpLT5yZWdzLCBTVU42SV9EU0lfQ01EX0NUTF9SRUcsIGxlbiArIDQgLSAxKTsKKwlr ZnJlZShib3VuY2UpOworCisJc3VuNmlfZHNpX3N0YXJ0KGRzaSwgRFNJX1NUQVJUX0xQVFgpOwor CisJcmV0ID0gc3VuNmlfZHNpX2luc3Rfd2FpdF9mb3JfY29tcGxldGlvbihkc2kpOworCWlmIChy ZXQgPCAwKSB7CisJCXN1bjZpX2RzaV9pbnN0X2Fib3J0KGRzaSk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmVnbWFwX3JlYWQoZHNpLT5yZWdzLCBTVU42SV9EU0lfQ01EX0NUTF9SRUcsICZ2YWwp OworCWlmICghKHZhbCAmIFNVTjZJX0RTSV9DTURfQ1RMX1RYX0ZMQUcpKQorCQlyZXR1cm4gLUVB R0FJTjsKKworCXJldHVybiBtc2ctPnR4X2xlbjsKK30KKworc3RhdGljIGludCBzdW42aV9kc2lf ZGNzX3JlYWQoc3RydWN0IHN1bjZpX2RzaSAqZHNpLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG1p cGlfZHNpX21zZyAqbXNnKQoreworCXUzMiB2YWw7CisJaW50IHJldDsKKwl1OCBieXRlMDsKKwor CXJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIFNVTjZJX0RTSV9DTURfVFhfUkVHKDApLAorCQkgICAg IHN1bjZpX2RzaV9kY3NfYnVpbGRfcGt0X2hkcihkc2ksIG1zZykpOworCXJlZ21hcF93cml0ZShk c2ktPnJlZ3MsIFNVTjZJX0RTSV9DTURfQ1RMX1JFRywKKwkJICAgICAoNCAtIDEpKTsKKworCXN1 bjZpX2RzaV9zdGFydChkc2ksIERTSV9TVEFSVF9MUFJYKTsKKworCXJldCA9IHN1bjZpX2RzaV9p bnN0X3dhaXRfZm9yX2NvbXBsZXRpb24oZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdW42aV9k c2lfaW5zdF9hYm9ydChkc2kpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZ21hcF9yZWFkKGRz aS0+cmVncywgU1VONklfRFNJX0NNRF9DVExfUkVHLCAmdmFsKTsKKwlpZiAoISh2YWwgJiBTVU42 SV9EU0lfQ01EX0NUTF9SWF9GTEFHKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAodmFsICYg U1VONklfRFNJX0NNRF9DVExfUlhfT1ZFUkZMT1cpCisJCXJldHVybiAtRUlPOworCisJcmVnbWFw X3JlYWQoZHNpLT5yZWdzLCBTVU42SV9EU0lfQ01EX1JYX1JFRygwKSwgJnZhbCk7CisJYnl0ZTAg PSB2YWwgJiAweGZmOworCWlmIChieXRlMCA9PSBNSVBJX0RTSV9SWF9BQ0tOT1dMRURHRV9BTkRf RVJST1JfUkVQT1JUKQorCQlyZXR1cm4gLUVJTzsKKworCSgodTggKiltc2ctPnJ4X2J1ZilbMF0g PSAodmFsID4+IDgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3VuNmlfZHNpX2F0 dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICBzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHN1bjZpX2RzaSAqZHNpID0gaG9zdF90b19zdW42 aV9kc2koaG9zdCk7CisKKwlkc2ktPmRldmljZSA9IGRldmljZTsKKwlkc2ktPnBhbmVsID0gb2Zf ZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zfbm9kZSk7CisJaWYgKCFkc2ktPnBhbmVsKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9pbmZvKGhvc3QtPmRldiwgIkF0dGFjaGVkIGRldmlj ZSAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1 bjZpX2RzaV9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkgICAgc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBzdW42aV9kc2kgKmRzaSA9IGhv c3RfdG9fc3VuNmlfZHNpKGhvc3QpOworCisJZHNpLT5wYW5lbCA9IE5VTEw7CisJZHNpLT5kZXZp Y2UgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN1bjZpX2RzaV90 cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBt aXBpX2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3Qgc3VuNmlfZHNpICpkc2kgPSBob3N0X3RvX3N1 bjZpX2RzaShob3N0KTsKKwlpbnQgcmV0OworCisJcmV0ID0gc3VuNmlfZHNpX2luc3Rfd2FpdF9m b3JfY29tcGxldGlvbihkc2kpOworCWlmIChyZXQgPCAwKQorCQlzdW42aV9kc2lfaW5zdF9hYm9y dChkc2kpOworCisJcmVnbWFwX3dyaXRlKGRzaS0+cmVncywgU1VONklfRFNJX0NNRF9DVExfUkVH LAorCQkgICAgIFNVTjZJX0RTSV9DTURfQ1RMX1JYX09WRVJGTE9XIHwKKwkJICAgICBTVU42SV9E U0lfQ01EX0NUTF9SWF9GTEFHIHwKKwkJICAgICBTVU42SV9EU0lfQ01EX0NUTF9UWF9GTEFHKTsK KworCXN3aXRjaCAobXNnLT50eXBlKSB7CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEU6 CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06CisJCXJldCA9IHN1bjZpX2Rz aV9kY3Nfd3JpdGVfc2hvcnQoZHNpLCBtc2cpOworCQlicmVhazsKKworCWNhc2UgTUlQSV9EU0lf RENTX0xPTkdfV1JJVEU6CisJCXJldCA9IHN1bjZpX2RzaV9kY3Nfd3JpdGVfbG9uZyhkc2ksIG1z Zyk7CisJCWJyZWFrOworCisJY2FzZSBNSVBJX0RTSV9EQ1NfUkVBRDoKKwkJaWYgKG1zZy0+cnhf bGVuID09IDEpIHsKKwkJCXJldCA9IHN1bjZpX2RzaV9kY3NfcmVhZChkc2ksIG1zZyk7CisJCQli cmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIHN1bjZpX2Rz aV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoCQk9IHN1bjZpX2RzaV9hdHRhY2gsCisJLmRldGFjaAkJ PSBzdW42aV9kc2lfZGV0YWNoLAorCS50cmFuc2Zlcgk9IHN1bjZpX2RzaV90cmFuc2ZlciwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzdW42aV9kc2lfcmVnbWFwX2Nv bmZpZyA9IHsKKwkucmVnX2JpdHMJPSAzMiwKKwkudmFsX2JpdHMJPSAzMiwKKwkucmVnX3N0cmlk ZQk9IDQsCisJLm1heF9yZWdpc3Rlcgk9IFNVTjZJX0RTSV9DTURfVFhfUkVHKDI1NSksCisJLm5h bWUJCT0gIm1pcGktZHNpIiwKK307CisKK3N0YXRpYyBpbnQgc3VuNmlfZHNpX2JpbmQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgdm9pZCAqZGF0YSkKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3Qgc3VuNGlfZHJ2ICpkcnYg PSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBzdW42aV9kc2kgKmRzaSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlpZiAoIWRzaS0+cGFuZWwpCisJCXJldHVybiAtRVBS T0JFX0RFRkVSOworCisJZHNpLT5kcnYgPSBkcnY7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRk KCZkc2ktPmVuY29kZXIsCisJCQkgICAgICAgJnN1bjZpX2RzaV9lbmNfaGVscGVyX2Z1bmNzKTsK KwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybSwKKwkJCSAgICAgICAmZHNpLT5lbmNvZGVyLAor CQkJICAgICAgICZzdW42aV9kc2lfZW5jX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09E RVJfRFNJLAorCQkJICAgICAgIE5VTEwpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihkc2ktPmRl diwgIkNvdWxkbid0IGluaXRpYWxpc2UgdGhlIERTSSBlbmNvZGVyXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisJZHNpLT5lbmNvZGVyLnBvc3NpYmxlX2NydGNzID0gQklUKDApOworCisJZHJtX2Nv bm5lY3Rvcl9oZWxwZXJfYWRkKCZkc2ktPmNvbm5lY3RvciwKKwkJCQkgJnN1bjZpX2RzaV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNp LT5jb25uZWN0b3IsCisJCQkJICZzdW42aV9kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1f TU9ERV9DT05ORUNUT1JfRFNJKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsCisJ CQkiQ291bGRuJ3QgaW5pdGlhbGlzZSB0aGUgRFNJIGNvbm5lY3RvclxuIik7CisJCWdvdG8gZXJy X2NsZWFudXBfY29ubmVjdG9yOworCX0KKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j b2RlcigmZHNpLT5jb25uZWN0b3IsICZkc2ktPmVuY29kZXIpOworCWRybV9wYW5lbF9hdHRhY2go ZHNpLT5wYW5lbCwgJmRzaS0+Y29ubmVjdG9yKTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51 cF9jb25uZWN0b3I6CisJZHJtX2VuY29kZXJfY2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdW42aV9kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IHN1bjZpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcGFuZWxf ZGV0YWNoKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9v cHMgc3VuNmlfZHNpX29wcyA9IHsKKwkuYmluZAk9IHN1bjZpX2RzaV9iaW5kLAorCS51bmJpbmQJ PSBzdW42aV9kc2lfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBzdW42aV9kc2lfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRl di0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHBoeV9ub2RlOworCXN0cnVjdCBzdW42aV9k c2kgKmRzaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJ aW50IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCWRldl9zZXRfZHJ2ZGF0YShk ZXYsIGRzaSk7CisJZHNpLT5kZXYgPSBkZXY7CisJZHNpLT5ob3N0Lm9wcyA9ICZzdW42aV9kc2lf aG9zdF9vcHM7CisJZHNpLT5ob3N0LmRldiA9IGRldjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9y ZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihiYXNlKSkgeworCQlkZXZfZXJyKGRldiwg IkNvdWxkbid0IG1hcCB0aGUgRFNJIGVuY29kZXIgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIoYmFzZSk7CisJfQorCisJZHNpLT5yZWdzID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvX2Ns ayhkZXYsICJidXMiLCBiYXNlLAorCQkJCQkgICAgICAmc3VuNmlfZHNpX3JlZ21hcF9jb25maWcp OworCWlmIChJU19FUlIoZHNpLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGNy ZWF0ZSB0aGUgRFNJIGVuY29kZXIgcmVnbWFwXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5y ZWdzKTsKKwl9CisKKwlkc2ktPnJlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9zaGFyZWQo ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVzZXQpKSB7CisJCWRldl9lcnIoZGV2LCAi Q291bGRuJ3QgZ2V0IG91ciByZXNldCBsaW5lXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5y ZXNldCk7CisJfQorCisJZHNpLT5tb2RfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgIm1vZCIpOwor CWlmIChJU19FUlIoZHNpLT5tb2RfY2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGdl dCB0aGUgRFNJIG1vZCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRzaS0+bW9kX2Nsayk7 CisJfQorCisJLyoKKwkgKiBJbiBvcmRlciB0byBvcGVyYXRlIHByb3Blcmx5LCB0aGF0IGNsb2Nr IHNlZW1zIHRvIGJlIGFsd2F5cworCSAqIHNldCB0byAyOTdNSHouCisJICovCisJY2xrX3NldF9y YXRlX3Byb3RlY3QoZHNpLT5tb2RfY2xrLCAyOTcwMDAwMDApOworCisJZHBoeV9ub2RlID0gb2Zf cGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJwaHlzIiwgMCk7CisJcmV0ID0gc3VuNmlfZHBo eV9wcm9iZShkc2ksIGRwaHlfbm9kZSk7CisJb2Zfbm9kZV9wdXQoZHBoeV9ub2RlKTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IHRoZSBNSVBJIEQtUEhZXG4iKTsK KwkJZ290byBlcnJfdW5wcm90ZWN0X2NsazsKKwl9CisKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYp OworCisJcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5ob3N0KTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgcmVnaXN0ZXIgTUlQSS1EU0kgaG9zdFxuIik7 CisJCWdvdG8gZXJyX3JlbW92ZV9waHk7CisJfQorCisJcmV0ID0gY29tcG9uZW50X2FkZCgmcGRl di0+ZGV2LCAmc3VuNmlfZHNpX29wcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkNv dWxkbid0IHJlZ2lzdGVyIG91ciBjb21wb25lbnRcbiIpOworCQlnb3RvIGVycl9yZW1vdmVfZHNp X2hvc3Q7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZW1vdmVfZHNpX2hvc3Q6CisJbWlwaV9k c2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmhvc3QpOworZXJyX3JlbW92ZV9waHk6CisJcG1fcnVu dGltZV9kaXNhYmxlKGRldik7CisJc3VuNmlfZHBoeV9yZW1vdmUoZHNpKTsKK2Vycl91bnByb3Rl Y3RfY2xrOgorCWNsa19yYXRlX3VucHJvdGVjdChkc2ktPm1vZF9jbGspOworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgc3VuNmlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHN1 bjZpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljb21wb25lbnRfZGVsKCZw ZGV2LT5kZXYsICZzdW42aV9kc2lfb3BzKTsKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRz aS0+aG9zdCk7CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJc3VuNmlfZHBoeV9yZW1vdmUo ZHNpKTsKKwljbGtfcmF0ZV91bnByb3RlY3QoZHNpLT5tb2RfY2xrKTsKKworCXJldHVybiAwOwor 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 X21pcGlfZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNjM3 NDg4MDg2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlf 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 ZGVyX3RvX3N1bjZpX2RzaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJcmV0dXJu IGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3Qgc3VuNmlfZHNpLCBlbmNvZGVyKTsKK307CisK K2ludCBzdW42aV9kcGh5X3Byb2JlKHN0cnVjdCBzdW42aV9kc2kgKmRzaSwgc3RydWN0IGRldmlj ZV9ub2RlICpub2RlKTsKK2ludCBzdW42aV9kcGh5X3JlbW92ZShzdHJ1Y3Qgc3VuNmlfZHNpICpk c2kpOworCitpbnQgc3VuNmlfZHBoeV9pbml0KHN0cnVjdCBzdW42aV9kcGh5ICpkcGh5LCB1bnNp Z25lZCBpbnQgbGFuZXMpOworaW50IHN1bjZpX2RwaHlfcG93ZXJfb24oc3RydWN0IHN1bjZpX2Rw aHkgKmRwaHksIHVuc2lnbmVkIGludCBsYW5lcyk7CitpbnQgc3VuNmlfZHBoeV9wb3dlcl9vZmYo c3RydWN0IHN1bjZpX2RwaHkgKmRwaHkpOworaW50IHN1bjZpX2RwaHlfZXhpdChzdHJ1Y3Qgc3Vu NmlfZHBoeSAqZHBoeSk7CisKKyNlbmRpZiAvKiBfU1VONklfTUlQSV9EU0lfSF8gKi8KLS0gCmdp dC1zZXJpZXMgMC45LjEKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==