From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: [PATCH v2 2/4] drm: Add support for ARM's HDLCD controller. Date: Wed, 11 Nov 2015 16:06:48 +0000 Message-ID: <1447258010-2234-3-git-send-email-Liviu.Dudau@arm.com> References: <1447258010-2234-1-git-send-email-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1447258010-2234-1-git-send-email-Liviu.Dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Catalin Marinas , Will Deacon , Rob Herring , Sudeep Holla , Jon Medhurst , Mark Rutland , Ian Campbell , Kumar Gala Cc: devicetree , Pawel Moll , Arnd Bergmann , Greg Kroah-Hartman , Punit Agrawal , LKML , DRI devel , Andrew Morton , Robin Murphy , LAKML List-Id: devicetree@vger.kernel.org VGhlIEhETENEIGNvbnRyb2xsZXIgaXMgYSBkaXNwbGF5IGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0 cyByZXNvbHV0aW9ucwp1cCB0byA0MDk2eDQwOTYgcGl4ZWxzLiBJdCBpcyBwcmVzZW50IG9uIHZh cmlvdXMgZGV2ZWxvcG1lbnQgYm9hcmRzCnByb2R1Y2VkIGJ5IEFSTSBMdGQgYW5kIGVtdWxhdGVk IGJ5IHRoZSBsYXRlc3QgRmFzdCBNb2RlbHMgZnJvbSB0aGUKY29tcGFueS4KCkNjOiBEYXZpZCBB aXJsaWUgPGFpcmxpZWRAbGludXguaWU+CkNjOiBSb2JpbiBNdXJwaHkgPHJvYmluLm11cnBoeUBh cm0uY29tPgoKU2lnbmVkLW9mZi1ieTogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2FybS9LY29u ZmlnICAgICAgfCAgMjkgKysKIGRyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUgICAgIHwgICAy ICsKIGRyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfY3J0Yy5jIHwgMzM0ICsrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5jICB8IDU2MyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hcm0vaGRs Y2RfZHJ2LmggIHwgIDQyICsrKwogZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9yZWdzLmggfCAg ODcgKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDEwNjAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYXJtL2hkbGNkX2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9hcm0vaGRsY2RfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v YXJtL2hkbGNkX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9o ZGxjZF9yZWdzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGM0YmY5YTEuLjNmZDkxMjQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0x MDYsNiArMTA2LDggQEAgY29uZmlnIERSTV9UREZYCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYg eW91IGhhdmUgYSAzZGZ4IEJhbnNoZWUgb3IgVm9vZG9vMyAob3IgbGF0ZXIpLAogCSAgZ3JhcGhp Y3MgY2FyZC4gIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGRm eC4KIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWciCisKIGNvbmZpZyBEUk1f UjEyOAogCXRyaXN0YXRlICJBVEkgUmFnZSAxMjgiCiAJZGVwZW5kcyBvbiBEUk0gJiYgUENJCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUKaW5kZXggMWU5ZmY0Yy4uNmI0MmQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNyBA QCBDRkxBR1NfZHJtX3RyYWNlX3BvaW50cy5vIDo9IC1JJChzcmMpCiAKIG9iai0kKENPTkZJR19E Uk0pCSs9IGRybS5vCiBvYmotJChDT05GSUdfRFJNX01JUElfRFNJKSArPSBkcm1fbWlwaV9kc2ku bworb2JqLSQoQ09ORklHX0RSTV9BUk0pCSs9IGFybS8KIG9iai0kKENPTkZJR19EUk1fVFRNKQkr PSB0dG0vCiBvYmotJChDT05GSUdfRFJNX1RERlgpCSs9IHRkZngvCiBvYmotJChDT05GSUdfRFJN X1IxMjgpCSs9IHIxMjgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNWU4YzhhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0v S2NvbmZpZwpAQCAtMCwwICsxLDI5IEBACitjb25maWcgRFJNX0FSTQorCWJvb2wgIkFSTSBMdGQu IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBEUk0gJiYgT0YgJiYgKEFSTSB8fCBBUk02NCkKKwlzZWxl Y3QgRFJNX0tNU19IRUxQRVIKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gc2VsZWN0 IGRyaXZlcnMgZm9yIEFSTSdzIGRldmljZXMKKworY29uZmlnIERSTV9IRExDRAorCXRyaXN0YXRl ICJBUk0gSERMQ0QiCisJZGVwZW5kcyBvbiBEUk1fQVJNCisJZGVwZW5kcyBvbiBDT01NT05fQ0xL CisJc2VsZWN0IENPTU1PTl9DTEtfU0NQSQorCXNlbGVjdCBETUFfQ01BCisJc2VsZWN0IERSTV9L TVNfQ01BX0hFTFBFUgorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKKwloZWxwCisJICBDaG9v c2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gQVJNIEhpZ2ggRGVmaW5pdGlvbiBDb2xvdXIg TENECisJICBjb250cm9sbGVyLgorCisJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2ls bCBiZSBjYWxsZWQgaGRsY2QuCisKK2NvbmZpZyBEUk1fSERMQ0RfU0hPV19VTkRFUlJVTgorCWJv b2wgIlNob3cgdW5kZXJydW4gY29uZGl0aW9ucyIKKwlkZXBlbmRzIG9uIERSTV9IRExDRAorCWRl ZmF1bHQgbgorCWhlbHAKKwkgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBzaG93IGluIHJlZCBjb2xv dXIgdGhlIHBpeGVscyB0aGF0IHRoZQorCSAgSERMQ0QgZGV2aWNlIGRpZCBub3QgZmV0Y2ggZnJv bSBmcmFtZWJ1ZmZlciBkdWUgdG8gdW5kZXJydW4KKwkgIGNvbmRpdGlvbnMuCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FybS9NYWtl ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWRjYjdiCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAK K2hkbGNkLXkgOj0gaGRsY2RfZHJ2Lm8gaGRsY2RfY3J0Yy5vCitvYmotJChDT05GSUdfRFJNX0hE TENEKQkrPSBoZGxjZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Ny dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjM1MGMxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vYXJtL2hkbGNkX2NydGMuYwpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIENvcHlyaWdo dCAoQykgMjAxMy0yMDE1IEFSTSBMaW1pdGVkCisgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZp dS5EdWRhdUBhcm0uY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAg U2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2 ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgSW1wbGVtZW50YXRpb24gb2YgYSBDUlRD IGNsYXNzIGZvciB0aGUgSERMQ0QgZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RhdGEvc2ltcGxlZmIuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1 ZGUgImhkbGNkX2Rydi5oIgorI2luY2x1ZGUgImhkbGNkX3JlZ3MuaCIKKworLyoKKyAqIFRoZSBI RExDRCBjb250cm9sbGVyIGlzIGEgZHVtYiBSR0Igc3RyZWFtZXIgdGhhdCBnZXRzIGNvbm5lY3Rl ZCB0bworICogYSBzaW5nbGUgSERNSSB0cmFuc21pdHRlciBvciBpbiB0aGUgY2FzZSBvZiB0aGUg QVJNIE1vZGVscyBpdCBnZXRzCisgKiBlbXVsYXRlZCBieSB0aGUgc29mdHdhcmUgdGhhdCBkb2Vz IHRoZSBhY3R1YWwgcmVuZGVyaW5nLgorICoKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jcnRjX2Z1bmNzIGhkbGNkX2NydGNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1fY3J0Y19j bGVhbnVwLAorCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwku cGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMg c3RydWN0IHNpbXBsZWZiX2Zvcm1hdCBzdXBwb3J0ZWRfZm9ybWF0c1tdID0gU0lNUExFRkJfRk9S TUFUUzsKKworLyoKKyAqIFNldHVwIHRoZSBIRExDRCByZWdpc3RlcnMgZm9yIGRlY29kaW5nIHRo ZSBwaXhlbHMgb3V0IG9mIHRoZSBmcmFtZWJ1ZmZlcgorICovCitzdGF0aWMgaW50IGhkbGNkX3Nl dF9weGxfZm10KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwl1bnNpZ25lZCBpbnQgYnRwcCwg ZGVmYXVsdF9jb2xvciA9IDB4MDAwMDAwMDA7CisJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpo ZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKKwl1aW50MzJfdCBwaXhlbF9mb3JtYXQ7 CisJc3RydWN0IHNpbXBsZWZiX2Zvcm1hdCAqZm9ybWF0ID0gTlVMTDsKKwlpbnQgaTsKKworI2lm ZGVmIENPTkZJR19EUk1fSERMQ0RfU0hPV19VTkRFUlJVTgorCWRlZmF1bHRfY29sb3IgPSAweDAw ZmYwMDAwOwkvKiBzaG93IHVuZGVycnVucyBpbiByZWQgKi8KKyNlbmRpZgorCisJaWYgKCFjcnRj LT5wcmltYXJ5LT5zdGF0ZS0+ZmIpIHsKKwkJRFJNX0VSUk9SKCJObyBmYiBhc3NvY2lhdGVkIHdp dGggc3RhdGUgJXBcbiIsCisJCQkgIGNydGMtPnByaW1hcnktPnN0YXRlKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJcGl4ZWxfZm9ybWF0ID0gY3J0Yy0+cHJpbWFyeS0+c3RhdGUtPmZiLT5w aXhlbF9mb3JtYXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0ZWRfZm9y bWF0cyk7IGkrKykgeworCQlpZiAoc3VwcG9ydGVkX2Zvcm1hdHNbaV0uZm91cmNjID09IHBpeGVs X2Zvcm1hdCkKKwkJCWZvcm1hdCA9ICZzdXBwb3J0ZWRfZm9ybWF0c1tpXTsKKwl9CisKKwlpZiAo IWZvcm1hdCkgeworCQlEUk1fRVJST1IoIkZvcm1hdCBub3Qgc3VwcG9ydGVkOiAweCV4XG4iLCBw aXhlbF9mb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBIRExDRCB1c2VzICdi eXRlcyBwZXIgcGl4ZWwnLCB6ZXJvIG1lYW5zIDEgYnl0ZSAqLworCWJ0cHAgPSAoZm9ybWF0LT5i aXRzX3Blcl9waXhlbCArIDcpIC8gODsKKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX1BJ WEVMX0ZPUk1BVCwgKGJ0cHAgLSAxKSA8PCAzKTsKKworCS8qCisJICogVGhlIGZvcm1hdCBvZiB0 aGUgSERMQ0RfUkVHXzxjb2xvcj5fU0VMRUNUIHJlZ2lzdGVyIGlzOgorCSAqICAgLSBiaXRzWzIz OjE2XSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoYXQgY29sb3IgY29tcG9uZW50CisJICogICAtIGJp dHNbMTE6OF0gIC0gbnVtYmVyIG9mIGJpdHMgdG8gZXh0cmFjdCBmb3IgZWFjaCBjb2xvciBjb21w b25lbnQKKwkgKiAgIC0gYml0c1s0OjBdICAgLSBpbmRleCBvZiB0aGUgbG93ZXN0IGJpdCB0byBl eHRyYWN0CisJICoKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciB2YWx1ZSBpcyB1c2VkIHdoZW4gYml0 c1sxMTo4XSBhcmUgemVybywgd2hlbiB0aGUKKwkgKiBwaXhlbCBpcyBvdXRzaWRlIHRoZSB2aXNp YmxlIGZyYW1lIGFyZWEgb3Igd2hlbiB0aGVyZSBpcyBhCisJICogYnVmZmVyIHVuZGVycnVuLgor CSAqLworCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfUkVEX1NFTEVDVCwgZGVmYXVsdF9j b2xvciB8CisJCWZvcm1hdC0+cmVkLm9mZnNldCB8IChmb3JtYXQtPnJlZC5sZW5ndGggJiAweGYp IDw8IDgpOworCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfR1JFRU5fU0VMRUNULCBkZWZh dWx0X2NvbG9yIHwKKwkJZm9ybWF0LT5ncmVlbi5vZmZzZXQgfCAoZm9ybWF0LT5ncmVlbi5sZW5n dGggJiAweGYpIDw8IDgpOworCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfQkxVRV9TRUxF Q1QsIGRlZmF1bHRfY29sb3IgfAorCQlmb3JtYXQtPmJsdWUub2Zmc2V0IHwgKGZvcm1hdC0+Ymx1 ZS5sZW5ndGggJiAweGYpIDw8IDgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhk bGNkX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSA9ICZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsK KwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCXVuc2lnbmVkIGludCBwb2xhcml0aWVzLCBsaW5lX2xl bmd0aCwgZXJyOworCisJdm0udmZyb250X3BvcmNoID0gbS0+Y3J0Y192c3luY19zdGFydCAtIG0t PmNydGNfdmRpc3BsYXk7CisJdm0udmJhY2tfcG9yY2ggPSBtLT5jcnRjX3Z0b3RhbCAtIG0tPmNy dGNfdnN5bmNfZW5kOworCXZtLnZzeW5jX2xlbiA9IG0tPmNydGNfdnN5bmNfZW5kIC0gbS0+Y3J0 Y192c3luY19zdGFydDsKKwl2bS5oZnJvbnRfcG9yY2ggPSBtLT5jcnRjX2hzeW5jX3N0YXJ0IC0g bS0+Y3J0Y19oZGlzcGxheTsKKwl2bS5oYmFja19wb3JjaCA9IG0tPmNydGNfaHRvdGFsIC0gbS0+ Y3J0Y19oc3luY19lbmQ7CisJdm0uaHN5bmNfbGVuID0gbS0+Y3J0Y19oc3luY19lbmQgLSBtLT5j cnRjX2hzeW5jX3N0YXJ0OworCisJcG9sYXJpdGllcyA9IEhETENEX1BPTEFSSVRZX0RBVEFFTiB8 IEhETENEX1BPTEFSSVRZX0RBVEE7CisKKwlpZiAobS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BI U1lOQykKKwkJcG9sYXJpdGllcyB8PSBIRExDRF9QT0xBUklUWV9IU1lOQzsKKwlpZiAobS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKKwkJcG9sYXJpdGllcyB8PSBIRExDRF9QT0xBUklU WV9WU1lOQzsKKworCWxpbmVfbGVuZ3RoID0gY3J0Yy0+cHJpbWFyeS0+c3RhdGUtPmZiLT5waXRj aGVzWzBdOworCisJLyogQWxsb3cgbWF4IG51bWJlciBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyBh bmQgbGFyZ2VzdCBidXJzdCBzaXplICovCisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19C VVNfT1BUSU9OUywKKwkJICAgIEhETENEX0JVU19NQVhfT1VUU1RBTkQgfCBIRExDRF9CVVNfQlVS U1RfMTYpOworCisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19GQl9MSU5FX0xFTkdUSCwg bGluZV9sZW5ndGgpOworCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfRkJfTElORV9QSVRD SCwgbGluZV9sZW5ndGgpOworCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfRkJfTElORV9D T1VOVCwgbS0+Y3J0Y192ZGlzcGxheSAtIDEpOworCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9S RUdfVl9EQVRBLCBtLT5jcnRjX3ZkaXNwbGF5IC0gMSk7CisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhE TENEX1JFR19WX0JBQ0tfUE9SQ0gsIHZtLnZiYWNrX3BvcmNoIC0gMSk7CisJaGRsY2Rfd3JpdGUo aGRsY2QsIEhETENEX1JFR19WX0ZST05UX1BPUkNILCB2bS52ZnJvbnRfcG9yY2ggLSAxKTsKKwlo ZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX1ZfU1lOQywgdm0udnN5bmNfbGVuIC0gMSk7CisJ aGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19IX0JBQ0tfUE9SQ0gsIHZtLmhiYWNrX3BvcmNo IC0gMSk7CisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19IX0ZST05UX1BPUkNILCB2bS5o ZnJvbnRfcG9yY2ggLSAxKTsKKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0hfU1lOQywg dm0uaHN5bmNfbGVuIC0gMSk7CisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19IX0RBVEEs IG0tPmNydGNfaGRpc3BsYXkgLSAxKTsKKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX1BP TEFSSVRJRVMsIHBvbGFyaXRpZXMpOworCisJZXJyID0gaGRsY2Rfc2V0X3B4bF9mbXQoY3J0Yyk7 CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJY2xrX3NldF9yYXRlKGhkbGNkLT5jbGssIG0tPmNy dGNfY2xvY2sgKiAxMDAwKTsKK30KKworc3RhdGljIHZvaWQgaGRsY2RfY3J0Y19lbmFibGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2Qg PSBjcnRjX3RvX2hkbGNkX3ByaXYoY3J0Yyk7CisKKwljbGtfcHJlcGFyZV9lbmFibGUoaGRsY2Qt PmNsayk7CisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19DT01NQU5ELCAxKTsKKwlkcm1f Y3J0Y192Ymxhbmtfb24oY3J0Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGhkbGNkX2NydGNfZGlzYWJs ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpo ZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKKworCWlmICghY3J0Yy0+cHJpbWFyeS0+ ZmIpCisJCXJldHVybjsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZGxjZC0+Y2xrKTsKKwlo ZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0NPTU1BTkQsIDApOworCWRybV9jcnRjX3ZibGFu a19vZmYoY3J0Yyk7Cit9CisKK3N0YXRpYyBpbnQgaGRsY2RfY3J0Y19hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUp Cit7CisJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJp dihjcnRjKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZzdGF0ZS0+YWRqdXN0 ZWRfbW9kZTsKKwlsb25nIHJhdGUsIGNsa19yYXRlID0gbW9kZS0+Y2xvY2sgKiAxMDAwOworCisJ cmF0ZSA9IGNsa19yb3VuZF9yYXRlKGhkbGNkLT5jbGssIGNsa19yYXRlKTsKKwlpZiAocmF0ZSAh PSBjbGtfcmF0ZSkgeworCQkvKiBjbG9jayByZXF1aXJlZCBieSBtb2RlIG5vdCBzdXBwb3J0ZWQg YnkgaGFyZHdhcmUgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGhkbGNkX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKKwkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaGRs Y2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gY3J0Y190b19oZGxjZF9wcml2KGNydGMpOworCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJCWNydGMtPnN0 YXRlLT5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOworCisJCVdBUk5fT04oZHJt X2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0 Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCWhkbGNkLT5ldmVudCA9IGNydGMtPnN0YXRl LT5ldmVudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2Nr LCBmbGFncyk7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMg dm9pZCBoZGxjZF9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJ ICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7Cit9CisKK3N0YXRpYyBib29sIGhk bGNkX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQljb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBoZGxjZF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9k ZV9maXh1cAk9IGhkbGNkX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQJPSBkcm1faGVscGVy X2NydGNfbW9kZV9zZXQsCisJLm1vZGVfc2V0X2Jhc2UJPSBkcm1faGVscGVyX2NydGNfbW9kZV9z ZXRfYmFzZSwKKwkubW9kZV9zZXRfbm9mYgk9IGhkbGNkX2NydGNfbW9kZV9zZXRfbm9mYiwKKwku ZW5hYmxlCQk9IGhkbGNkX2NydGNfZW5hYmxlLAorCS5kaXNhYmxlCT0gaGRsY2RfY3J0Y19kaXNh YmxlLAorCS5wcmVwYXJlCT0gaGRsY2RfY3J0Y19kaXNhYmxlLAorCS5jb21taXQJCT0gaGRsY2Rf Y3J0Y19lbmFibGUsCisJLmF0b21pY19jaGVjawk9IGhkbGNkX2NydGNfYXRvbWljX2NoZWNrLAor CS5hdG9taWNfYmVnaW4JPSBoZGxjZF9jcnRjX2F0b21pY19iZWdpbiwKKwkuYXRvbWljX2ZsdXNo CT0gaGRsY2RfY3J0Y19hdG9taWNfZmx1c2gsCit9OworCitzdGF0aWMgaW50IGhkbGNkX3BsYW5l X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhk bGNkX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAg ICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGhkbGNkX2RybV9w cml2YXRlICpoZGxjZDsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpnZW07CisJZG1hX2Fk ZHJfdCBzY2Fub3V0X3N0YXJ0OworCisJaWYgKCFwbGFuZS0+c3RhdGUtPmNydGMgfHwgIXBsYW5l LT5zdGF0ZS0+ZmIpCisJCXJldHVybjsKKworCWhkbGNkID0gY3J0Y190b19oZGxjZF9wcml2KHBs YW5lLT5zdGF0ZS0+Y3J0Yyk7CisJZ2VtID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihwbGFuZS0+ c3RhdGUtPmZiLCAwKTsKKwlzY2Fub3V0X3N0YXJ0ID0gZ2VtLT5wYWRkcjsKKwloZGxjZF93cml0 ZShoZGxjZCwgSERMQ0RfUkVHX0ZCX0JBU0UsIHNjYW5vdXRfc3RhcnQpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgaGRsY2RfcGxhbmVfaGVscGVyX2Z1 bmNzID0geworCS5wcmVwYXJlX2ZiID0gTlVMTCwKKwkuY2xlYW51cF9mYiA9IE5VTEwsCisJLmF0 b21pY19jaGVjayA9IGhkbGNkX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0ZSA9 IGhkbGNkX3BsYW5lX2F0b21pY191cGRhdGUsCit9OworCitzdGF0aWMgdm9pZCBoZGxjZF9wbGFu ZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCWRybV9wbGFuZV9oZWxwZXJf ZGlzYWJsZShwbGFuZSk7CisJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBoZGxjZF9wbGFuZV9mdW5jcyA9IHsKKwkudXBk YXRlX3BsYW5lCQk9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9w bGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95CQk9IGhk bGNkX3BsYW5lX2Rlc3Ryb3ksCisJLnJlc2V0CQkJPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9y ZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmUg KmhkbGNkX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgaGRs Y2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSA9IE5VTEw7CisJdTMyIGZvcm1hdHNbQVJSQVlfU0laRShzdXBwb3J0ZWRfZm9y bWF0cyldLCBpOworCWludCByZXQ7CisKKwlwbGFuZSA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwg c2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICghcGxhbmUpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VwcG9ydGVkX2Zv cm1hdHMpOyBpKyspCisJCWZvcm1hdHNbaV0gPSBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5mb3VyY2M7 CisKKwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZHJtLCBwbGFuZSwgMHhmZiwgJmhk bGNkX3BsYW5lX2Z1bmNzLAorCQkJCSAgICAgICBmb3JtYXRzLCBBUlJBWV9TSVpFKGZvcm1hdHMp LAorCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZiAocmV0KSB7CisJCWRl dm1fa2ZyZWUoZHJtLT5kZXYsIHBsYW5lKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisK Kwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJmhkbGNkX3BsYW5lX2hlbHBlcl9mdW5jcyk7 CisJaGRsY2QtPnBsYW5lID0gcGxhbmU7CisKKwlyZXR1cm4gcGxhbmU7Cit9CisKK3ZvaWQgaGRs Y2RfY3J0Y19zdXNwZW5kKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwloZGxjZF9jcnRjX2Rp c2FibGUoY3J0Yyk7Cit9CisKK3ZvaWQgaGRsY2RfY3J0Y19yZXN1bWUoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCWhkbGNkX2NydGNfZW5hYmxlKGNydGMpOworfQorCitpbnQgaGRsY2Rfc2V0 dXBfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBoZGxjZF9kcm1fcHJp dmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcGxhbmUgKnByaW1h cnk7CisJaW50IHJldDsKKworCXByaW1hcnkgPSBoZGxjZF9wbGFuZV9pbml0KGRybSk7CisJaWYg KElTX0VSUihwcmltYXJ5KSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpbWFyeSk7CisKKwlyZXQgPSBk cm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJmhkbGNkLT5jcnRjLCBwcmltYXJ5LCBOVUxM LAorCQkJCQkmaGRsY2RfY3J0Y19mdW5jcyk7CisJaWYgKHJldCkgeworCQloZGxjZF9wbGFuZV9k ZXN0cm95KHByaW1hcnkpOworCQlkZXZtX2tmcmVlKGRybS0+ZGV2LCBwcmltYXJ5KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZoZGxjZC0+Y3J0YywgJmhkbGNk X2NydGNfaGVscGVyX2Z1bmNzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hcm0vaGRsY2RfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNWQ4NTAKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5jCkBAIC0wLDAgKzEsNTYzIEBA CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQVJNIExpbWl0ZWQKKyAqIEF1dGhvcjog TGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1 YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rv cnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBBUk0gSERM Q0QgRHJpdmVyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv Y29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2Vt X2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisKKyNpbmNsdWRlICJoZGxj ZF9kcnYuaCIKKyNpbmNsdWRlICJoZGxjZF9yZWdzLmgiCisKK3N0YXRpYyBpbnQgY29tcGFyZV9k ZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXJldHVybiBkZXYtPm9mX25v ZGUgPT0gZGF0YTsKK30KKworc3RhdGljIGludCBoZGxjZF9sb2FkKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGhkbGNkX2RybV9wcml2YXRl ICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diA9IHRvX3BsYXRmb3JtX2RldmljZShkcm0tPmRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7 CisJdTMyIHZlcnNpb247CisJaW50IHJldDsKKworCWhkbGNkLT5jbGsgPSBkZXZtX2Nsa19nZXQo ZHJtLT5kZXYsICJweGxjbGsiKTsKKwlpZiAoSVNfRVJSKGhkbGNkLT5jbGspKQorCQlyZXR1cm4g UFRSX0VSUihoZGxjZC0+Y2xrKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWF0b21pY19z ZXQoJmhkbGNkLT5idWZmZXJfdW5kZXJydW5fY291bnQsIDApOworCWF0b21pY19zZXQoJmhkbGNk LT5idXNfZXJyb3JfY291bnQsIDApOworCWF0b21pY19zZXQoJmhkbGNkLT52c3luY19jb3VudCwg MCk7CisJYXRvbWljX3NldCgmaGRsY2QtPmRtYV9lbmRfY291bnQsIDApOworI2VuZGlmCisKKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWhk bGNkLT5tbWlvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRybS0+ZGV2LCByZXMpOworCWlmIChJ U19FUlIoaGRsY2QtPm1taW8pKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBjb250cm9s IHJlZ2lzdGVycyBhcmVhXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihoZGxjZC0+bW1pbyk7CisJCWhk bGNkLT5tbWlvID0gTlVMTDsKKwkJZ290byBmYWlsOworCX0KKworCXZlcnNpb24gPSBoZGxjZF9y ZWFkKGhkbGNkLCBIRExDRF9SRUdfVkVSU0lPTik7CisJaWYgKCh2ZXJzaW9uICYgSERMQ0RfUFJP RFVDVF9NQVNLKSAhPSBIRExDRF9QUk9EVUNUX0lEKSB7CisJCURSTV9FUlJPUigidW5rbm93biBw cm9kdWN0IGlkOiAweCV4XG4iLCB2ZXJzaW9uKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBm YWlsOworCX0KKwlEUk1fSU5GTygiZm91bmQgQVJNIEhETENEIHZlcnNpb24gciVkcCVkXG4iLAor CQkodmVyc2lvbiAmIEhETENEX1ZFUlNJT05fTUFKT1JfTUFTSykgPj4gOCwKKwkJdmVyc2lvbiAm IEhETENEX1ZFUlNJT05fTUlOT1JfTUFTSyk7CisKKwkvKiBHZXQgdGhlIG9wdGlvbmFsIGNvaGVy ZW50IG1lbW9yeSByZXNvdXJjZSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2 LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKHJlcykgeworCQlyZXQgPSBkbWFfZGVjbGFyZV9j b2hlcmVudF9tZW1vcnkoZHJtLT5kZXYsIHJlcy0+c3RhcnQsCisJCQkJCQkgIHJlcy0+c3RhcnQs CisJCQkJCQkgIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkJCSAgRE1BX01FTU9SWV9NQVApOwor CQlpZiAoKHJldCAmIERNQV9NRU1PUllfTUFQKSA9PSAwKSB7CisJCQlEUk1fRVJST1IoImZhaWxl ZCB0byBkZWNsYXJlIGNvaGVyZW50IGRldmljZSBtZW1vcnlcbiIpOworCQkJcmV0ID0gLUVOWElP OworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hl cmVudChkcm0tPmRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKHJldCkKKwkJZ290byBzZXR1 cF9mYWlsOworCisJcmV0ID0gaGRsY2Rfc2V0dXBfY3J0Yyhkcm0pOworCWlmIChyZXQgPCAwKSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBjcnRjXG4iKTsKKwkJZ290byBzZXR1cF9m YWlsOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRybS0+ZGV2KTsKKworCXBtX3J1bnRpbWVf Z2V0X3N5bmMoZHJtLT5kZXYpOworCXJldCA9IGRybV9pcnFfaW5zdGFsbChkcm0sIHBsYXRmb3Jt X2dldF9pcnEocGRldiwgMCkpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5kZXYpOworCWlm IChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluc3RhbGwgSVJRIGhhbmRsZXJc biIpOworCQlnb3RvIGlycV9mYWlsOworCX0KKworCXJldHVybiAwOworCitpcnFfZmFpbDoKKwlk cm1fY3J0Y19jbGVhbnVwKCZoZGxjZC0+Y3J0Yyk7CitzZXR1cF9mYWlsOgorCWRtYV9yZWxlYXNl X2RlY2xhcmVkX21lbW9yeShkcm0tPmRldik7CitmYWlsOgorCWRldm1fY2xrX3B1dChkcm0tPmRl diwgaGRsY2QtPmNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoZGxjZF9m Yl9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0 IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoaGRs Y2QtPmZiZGV2KSB7CisJCWRybV9mYmRldl9jbWFfaG90cGx1Z19ldmVudChoZGxjZC0+ZmJkZXYp OworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgaGRs Y2RfbW9kZV9jb25maWdfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3JlYXRl LAorCS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0gaGRsY2RfZmJfb3V0cHV0X3BvbGxfY2hhbmdlZCwK KwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21t aXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCit9OworCitzdGF0aWMgdm9pZCBoZGxjZF9z ZXR1cF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9tb2RlX2Nv bmZpZ19pbml0KGRybSk7CisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSAwOworCWRybS0+ bW9kZV9jb25maWcubWluX2hlaWdodCA9IDA7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgg PSBIRExDRF9NQVhfWFJFUzsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBIRExDRF9N QVhfWVJFUzsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJmhkbGNkX21vZGVfY29uZmlnX2Z1 bmNzOworfQorCitzdGF0aWMgdm9pZCBoZGxjZF9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7Cit9CisKK3N0YXRpYyB2b2lkIGhkbGNkX2xh c3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBoZGxjZF9kcm1fcHJp dmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOworCisJZHJtX2ZiZGV2X2NtYV9yZXN0b3Jl X21vZGUoaGRsY2QtPmZiZGV2KTsKK30KKworc3RhdGljIGlycXJldHVybl90IGhkbGNkX2lycShp bnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKKwlz dHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwl1bnNp Z25lZCBsb25nIGlycV9zdGF0dXM7CisKKwlpcnFfc3RhdHVzID0gaGRsY2RfcmVhZChoZGxjZCwg SERMQ0RfUkVHX0lOVF9TVEFUVVMpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJaWYgKGly cV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRfVU5ERVJSVU4pIHsKKwkJYXRvbWljX2luYygmaGRs Y2QtPmJ1ZmZlcl91bmRlcnJ1bl9jb3VudCk7CisJfQorCWlmIChpcnFfc3RhdHVzICYgSERMQ0Rf SU5URVJSVVBUX0RNQV9FTkQpIHsKKwkJYXRvbWljX2luYygmaGRsY2QtPmRtYV9lbmRfY291bnQp OworCX0KKwlpZiAoaXJxX3N0YXR1cyAmIEhETENEX0lOVEVSUlVQVF9CVVNfRVJST1IpIHsKKwkJ YXRvbWljX2luYygmaGRsY2QtPmJ1c19lcnJvcl9jb3VudCk7CisJfQorCWlmIChpcnFfc3RhdHVz ICYgSERMQ0RfSU5URVJSVVBUX1ZTWU5DKSB7CisJCWF0b21pY19pbmMoJmhkbGNkLT52c3luY19j b3VudCk7CisJfQorI2VuZGlmCisJaWYgKGlycV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRfVlNZ TkMpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlkcm1faGFuZGxlX3ZibGFuayhkcm0s IDApOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJ aWYgKGhkbGNkLT5ldmVudCkgeworCQkJZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGRybSwgaGRsY2Qt PmV2ZW50LT5waXBlLCBoZGxjZC0+ZXZlbnQpOworCQkJZHJtX2NydGNfdmJsYW5rX3B1dCgmaGRs Y2QtPmNydGMpOworCQkJaGRsY2QtPmV2ZW50ID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBhY2tub3dsZWRn ZSBpbnRlcnJ1cHQocykgKi8KKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9DTEVB UiwgaXJxX3N0YXR1cyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lk IGhkbGNkX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0 IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJLyogRW5zdXJl IGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JF R19JTlRfTUFTSywgMCk7CisJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19JTlRfQ0xFQVIs IH4wKTsKK30KKworc3RhdGljIGludCBoZGxjZF9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9k ZXZpY2UgKmRybSkKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgaGRsY2RfZHJt X3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGlycV9t YXNrID0gaGRsY2RfcmVhZChoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLKTsKKworCS8qIGVuYWJs ZSBkZWJ1ZyBpbnRlcnJ1cHRzICovCisJaXJxX21hc2sgfD0gSERMQ0RfREVCVUdfSU5UX01BU0s7 CisKKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBpcnFfbWFzayk7Cisj ZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRsY2RfaXJxX3VuaW5zdGFsbChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRs Y2QgPSBkcm0tPmRldl9wcml2YXRlOworCS8qIGRpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzIHRo YXQgd2UgbWlnaHQgaGF2ZSBlbmFibGVkICovCisJdW5zaWduZWQgbG9uZyBpcnFfbWFzayA9IGhk bGNkX3JlYWQoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSyk7CisKKyNpZmRlZiBDT05GSUdfREVC VUdfRlMKKwkvKiBkaXNhYmxlIGRlYnVnIGludGVycnVwdHMgKi8KKwlpcnFfbWFzayAmPSB+SERM Q0RfREVCVUdfSU5UX01BU0s7CisjZW5kaWYKKworCS8qIGRpc2FibGUgdnN5bmMgaW50ZXJydXB0 cyAqLworCWlycV9tYXNrICY9IH5IRExDRF9JTlRFUlJVUFRfVlNZTkM7CisKKwloZGxjZF93cml0 ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBpcnFfbWFzayk7Cit9CisKK3N0YXRpYyBpbnQg aGRsY2RfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQg Y3J0YykKK3sKKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJp dmF0ZTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGhkbGNkX3JlYWQoaGRsY2QsIEhETENEX1JFR19J TlRfTUFTSyk7CisKKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBtYXNr IHwgSERMQ0RfSU5URVJSVVBUX1ZTWU5DKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBoZGxjZF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBp bnQgY3J0YykKK3sKKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZf cHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGhkbGNkX3JlYWQoaGRsY2QsIEhETENEX1JF R19JTlRfTUFTSyk7CisKKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBt YXNrICYgfkhETENEX0lOVEVSUlVQVF9WU1lOQyk7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdf RlMKK3N0YXRpYyBpbnQgaGRsY2Rfc2hvd191bmRlcnJ1bl9jb3VudChzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3Qg ZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG5v ZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ ZGV2X3ByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICJ1bmRlcnJ1biA6ICVkXG4iLCBhdG9taWNf cmVhZCgmaGRsY2QtPmJ1ZmZlcl91bmRlcnJ1bl9jb3VudCkpOworCXNlcV9wcmludGYobSwgImRt YV9lbmQgIDogJWRcbiIsIGF0b21pY19yZWFkKCZoZGxjZC0+ZG1hX2VuZF9jb3VudCkpOworCXNl cV9wcmludGYobSwgImJ1c19lcnJvcjogJWRcbiIsIGF0b21pY19yZWFkKCZoZGxjZC0+YnVzX2Vy cm9yX2NvdW50KSk7CisJc2VxX3ByaW50ZihtLCAidnN5bmMgICAgOiAlZFxuIiwgYXRvbWljX3Jl YWQoJmhkbGNkLT52c3luY19jb3VudCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhk bGNkX3Nob3dfcHhsY2xvY2soc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpCit7CisJc3Ry dWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2 YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVj dCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOworCXVuc2lnbmVk IGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShoZGxjZC0+Y2xrKTsKKwl1bnNpZ25lZCBsb25n IG1vZGVfY2xvY2sgPSBoZGxjZC0+Y3J0Yy5tb2RlLmNydGNfY2xvY2sgKiAxMDAwOworCisJc2Vx X3ByaW50ZihtLCAiaHcgIDogJWx1XG4iLCBjbGtyYXRlKTsKKwlzZXFfcHJpbnRmKG0sICJtb2Rl OiAlbHVcbiIsIG1vZGVfY2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRy bV9pbmZvX2xpc3QgaGRsY2RfZGVidWdmc19saXN0W10gPSB7CisJeyAiaW50ZXJydXB0X2NvdW50 IiwgaGRsY2Rfc2hvd191bmRlcnJ1bl9jb3VudCwgMCB9LAorCXsgImNsb2NrcyIsIGhkbGNkX3No b3dfcHhsY2xvY2ssIDAgfSwKK307CisKK3N0YXRpYyBpbnQgaGRsY2RfZGVidWdmc19pbml0KHN0 cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVfZmls ZXMoaGRsY2RfZGVidWdmc19saXN0LAorCQlBUlJBWV9TSVpFKGhkbGNkX2RlYnVnZnNfbGlzdCks CW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KKworc3RhdGljIHZvaWQgaGRsY2RfZGVi dWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWRybV9kZWJ1Z2ZzX3Jl bW92ZV9maWxlcyhoZGxjZF9kZWJ1Z2ZzX2xpc3QsCisJCUFSUkFZX1NJWkUoaGRsY2RfZGVidWdm c19saXN0KSwgbWlub3IpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIGZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRy bV9vcGVuLAorCS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsCT0gZHJt X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gZHJtX2NvbXBh dF9pb2N0bCwKKyNlbmRpZgorCS5wb2xsCQk9IGRybV9wb2xsLAorCS5yZWFkCQk9IGRybV9yZWFk LAorCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCisJLm1tYXAJCT0gZHJtX2dlbV9jbWFfbW1hcCwK K307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBoZGxjZF9kcml2ZXIgPSB7CisJLmRyaXZl cl9mZWF0dXJlcyA9IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9HRU0gfAorCQkJICAgRFJJVkVS X01PREVTRVQgfCBEUklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywKKwkucHJlY2xv c2UgPSBoZGxjZF9wcmVjbG9zZSwKKwkubGFzdGNsb3NlID0gaGRsY2RfbGFzdGNsb3NlLAorCS5p cnFfaGFuZGxlciA9IGhkbGNkX2lycSwKKwkuaXJxX3ByZWluc3RhbGwgPSBoZGxjZF9pcnFfcHJl aW5zdGFsbCwKKwkuaXJxX3Bvc3RpbnN0YWxsID0gaGRsY2RfaXJxX3Bvc3RpbnN0YWxsLAorCS5p cnFfdW5pbnN0YWxsID0gaGRsY2RfaXJxX3VuaW5zdGFsbCwKKwkuZ2V0X3ZibGFua19jb3VudGVy ID0gZHJtX3ZibGFua19ub19od19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gaGRsY2RfZW5h YmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBoZGxjZF9kaXNhYmxlX3ZibGFuaywKKwku Z2VtX2ZyZWVfb2JqZWN0ID0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCisJLmdlbV92bV9vcHMg PSAmZHJtX2dlbV9jbWFfdm1fb3BzLAorCS5kdW1iX2NyZWF0ZSA9IGRybV9nZW1fY21hX2R1bWJf Y3JlYXRlLAorCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQs CisJLmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCS5wcmltZV9oYW5kbGVf dG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxl ID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1f Z2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1w b3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3Nn X3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVf aW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3Zt YXAsCisJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCisJLmdl bV9wcmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKKyNpZmRlZiBDT05GSUdfREVC VUdfRlMKKwkuZGVidWdmc19pbml0ID0gaGRsY2RfZGVidWdmc19pbml0LAorCS5kZWJ1Z2ZzX2Ns ZWFudXAgPSBoZGxjZF9kZWJ1Z2ZzX2NsZWFudXAsCisjZW5kaWYKKwkuZm9wcyA9ICZmb3BzLAor CS5uYW1lID0gImhkbGNkIiwKKwkuZGVzYyA9ICJBUk0gSERMQ0QgQ29udHJvbGxlciBEUk0iLAor CS5kYXRlID0gIjIwMTUxMDIxIiwKKwkubWFqb3IgPSAxLAorCS5taW5vciA9IDAsCit9OworCitz dGF0aWMgaW50IGhkbGNkX2FkZF9jb21wb25lbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IG1hc3RlciAqbWFzdGVyKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCwgKmVwID0gTlVM TDsKKwlpbnQgcmV0ID0gLUVOWElPOworCisJaWYgKCFkZXYtPm9mX25vZGUpCisJCXJldHVybiAt RU5PREVWOworCisJZG8geworCQllcCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+ b2Zfbm9kZSwgZXApOworCQlpZiAoIWVwKQorCQkJYnJlYWs7CisKKwkJaWYgKCFvZl9kZXZpY2Vf aXNfYXZhaWxhYmxlKGVwKSkgeworCQkJb2Zfbm9kZV9wdXQoZXApOworCQkJY29udGludWU7CisJ CX0KKworCQlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcCk7CisJCW9m X25vZGVfcHV0KGVwKTsKKwkJaWYgKCFwb3J0IHx8ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBv cnQpKSB7CisJCQlvZl9ub2RlX3B1dChwb3J0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0 ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfY2hpbGQobWFzdGVyLCBjb21wYXJlX2RldiwgcG9ydCk7 CisJCW9mX25vZGVfcHV0KHBvcnQpOworCX0gd2hpbGUgKDEpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBoZGxjZF9kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRybTsKKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkOwor CWludCByZXQ7CisKKwloZGxjZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRsY2QpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWhkbGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybSA9IGRy bV9kZXZfYWxsb2MoJmhkbGNkX2RyaXZlciwgZGV2KTsKKwlpZiAoIWRybSkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlkcm0tPmRldl9wcml2YXRlID0gaGRsY2Q7CisKKwlyZXQgPSBkcm1fZGV2X3Nl dF91bmlxdWUoZHJtLCAiJXMiLCBkZXZfbmFtZShkZXYpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9mcmVlOworCisJaGRsY2Rfc2V0dXBfbW9kZV9jb25maWcoZHJtKTsKKworCXJldCA9IGhkbGNk X2xvYWQoZHJtLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJcmV0ID0gZHJt X2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3VubG9hZDsKKwor CWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRybSk7CisKKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwo ZGV2LCBkcm0pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBhbGwg Y29tcG9uZW50c1xuIik7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJfQorCisJcmV0ID0gZHJt X3ZibGFua19pbml0KGRybSwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7CisJaWYgKHJldCA8 IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSB2YmxhbmtcbiIpOworCQln b3RvIGVycl92Ymxhbms7CisJfQorCWRybS0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IHRydWU7 CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2lu aXQoZHJtKTsKKworCWhkbGNkLT5mYmRldiA9IGRybV9mYmRldl9jbWFfaW5pdChkcm0sIDMyLCBk cm0tPm1vZGVfY29uZmlnLm51bV9jcnRjLAorCQkJCQkgIGRybS0+bW9kZV9jb25maWcubnVtX2Nv bm5lY3Rvcik7CisKKwlpZiAoSVNfRVJSKGhkbGNkLT5mYmRldikpIHsKKwkJcmV0ID0gUFRSX0VS UihoZGxjZC0+ZmJkZXYpOworCQloZGxjZC0+ZmJkZXYgPSBOVUxMOworCQlnb3RvIGVycl9mYmRl djsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2ZiZGV2OgorCWRybV9rbXNfaGVscGVyX3BvbGxf ZmluaShkcm0pOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisJZHJtX3ZibGFua19j bGVhbnVwKGRybSk7CitlcnJfdmJsYW5rOgorCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwgZHJt KTsKK2Vycl91bnJlZ2lzdGVyOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX3VubG9h ZDoKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2KTsKKwlkcm1faXJxX3VuaW5zdGFsbChk cm0pOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJs ZShkcm0tPmRldik7CisJZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KGRldik7CisJZGV2bV9j bGtfcHV0KGRldiwgaGRsY2QtPmNsayk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVmKGRybSk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoZGxjZF9kcm1fdW5iaW5kKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3By aXZhdGU7CisKKwlpZiAoaGRsY2QtPmZiZGV2KSB7CisJCWRybV9mYmRldl9jbWFfZmluaShoZGxj ZC0+ZmJkZXYpOworCQloZGxjZC0+ZmJkZXYgPSBOVUxMOworCX0KKwlkcm1fa21zX2hlbHBlcl9w b2xsX2ZpbmkoZHJtKTsKKwljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRybSk7CisJZHJtX3Zi bGFua19jbGVhbnVwKGRybSk7CisJcG1fcnVudGltZV9nZXRfc3luYyhkcm0tPmRldik7CisJZHJt X2lycV91bmluc3RhbGwoZHJtKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsKKwlw bV9ydW50aW1lX2Rpc2FibGUoZHJtLT5kZXYpOworCWRtYV9yZWxlYXNlX2RlY2xhcmVkX21lbW9y eShkcm0tPmRldik7CisJaWYgKCFJU19FUlIoaGRsY2QtPmNsaykpIHsKKwkJZGV2bV9jbGtfcHV0 KGRybS0+ZGV2LCBoZGxjZC0+Y2xrKTsKKwkJaGRsY2QtPmNsayA9IE5VTEw7CisJfQorCWRybV9t b2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CisJZHJt X2Rldl91bnJlZihkcm0pOworCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCWRldl9zZXRfZHJ2 ZGF0YShkZXYsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0 ZXJfb3BzIGhkbGNkX21hc3Rlcl9vcHMgPSB7CisJLmFkZF9jb21wb25lbnRzCT0gaGRsY2RfYWRk X2NvbXBvbmVudHMsCisJLmJpbmQJCT0gaGRsY2RfZHJtX2JpbmQsCisJLnVuYmluZAkJPSBoZGxj ZF9kcm1fdW5iaW5kLAorfTsKKworc3RhdGljIGludCBoZGxjZF9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfbWFzdGVyX2FkZCgmcGRldi0+ ZGV2LCAmaGRsY2RfbWFzdGVyX29wcyk7Cit9CisKK3N0YXRpYyBpbnQgaGRsY2RfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBk ZXYtPmRldiwgJmhkbGNkX21hc3Rlcl9vcHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCAgaGRsY2Rfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRp YmxlCT0gImFybSxoZGxjZCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBo ZGxjZF9vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQgaGRsY2RfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKworCWlmIChwbV9ydW50aW1lX3N1c3BlbmRl ZChkZXYpKQorCQlyZXR1cm4gMDsKKworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJbGlz dF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZHJtLT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQp CisJCWhkbGNkX2NydGNfc3VzcGVuZChjcnRjKTsKKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRy bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRsY2RfcG1fcmVzdW1lKHN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCisJaWYgKCFwbV9ydW50aW1lX3N1c3Bl bmRlZChkZXYpKQorCQlyZXR1cm4gMDsKKworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJ bGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZHJtLT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhl YWQpCisJCWhkbGNkX2NydGNfcmVzdW1lKGNydGMpOworCWRybV9tb2Rlc2V0X3VubG9ja19hbGwo ZHJtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGhkbGNkX3Bt X29wcywgaGRsY2RfcG1fc3VzcGVuZCwgaGRsY2RfcG1fcmVzdW1lKTsKKworc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgaGRsY2RfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQkJPSBo ZGxjZF9wcm9iZSwKKwkucmVtb3ZlCQk9IGhkbGNkX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQku bmFtZSA9ICJoZGxjZCIsCisJCS5wbSA9ICZoZGxjZF9wbV9vcHMsCisJCS5vZl9tYXRjaF90YWJs ZQk9IGhkbGNkX29mX21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGhk bGNkX3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkxpdml1IER1ZGF1Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIkFSTSBIRExDRCBEUk0gZHJpdmVyIik7CitNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5mMmVlZGZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FybS9oZGxjZF9kcnYuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogIEFSTSBIRExDRCBDb250 cm9sbGVyIHJlZ2lzdGVyIGRlZmluaXRpb24KKyAqLworCisjaWZuZGVmIF9fSERMQ0RfRFJWX0hf XworI2RlZmluZSBfX0hETENEX0RSVl9IX18KKworc3RydWN0IGhkbGNkX2RybV9wcml2YXRlIHsK Kwl2b2lkIF9faW9tZW0JCQkqbW1pbzsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKwlzdHJ1Y3QgZHJt X2ZiZGV2X2NtYQkJKmZiZGV2OworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIJCSpmYjsKKwlzdHJ1 Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50CSpldmVudDsKKwlzdHJ1Y3QgZHJtX2NydGMJCQlj cnRjOworCXN0cnVjdCBkcm1fcGxhbmUJCSpwbGFuZTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMK KwlhdG9taWNfdCBidWZmZXJfdW5kZXJydW5fY291bnQ7CisJYXRvbWljX3QgYnVzX2Vycm9yX2Nv dW50OworCWF0b21pY190IHZzeW5jX2NvdW50OworCWF0b21pY190IGRtYV9lbmRfY291bnQ7Cisj ZW5kaWYKK307CisKKyNkZWZpbmUgY3J0Y190b19oZGxjZF9wcml2KHgpCWNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUsIGNydGMpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBo ZGxjZF93cml0ZShzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkLAorCQkJICAgICAgIHVu c2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIGhkbGNkLT5tbWlv ICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaGRsY2RfcmVhZChzdHJ1Y3QgaGRsY2Rf ZHJtX3ByaXZhdGUgKmhkbGNkLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiByZWFkbCho ZGxjZC0+bW1pbyArIHJlZyk7Cit9CisKK2ludCBoZGxjZF9zZXR1cF9jcnRjKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwordm9pZCBoZGxjZF9zZXRfc2Nhbm91dChzdHJ1Y3QgaGRsY2RfZHJtX3By aXZhdGUgKmhkbGNkKTsKK3ZvaWQgaGRsY2RfY3J0Y19zdXNwZW5kKHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7Cit2b2lkIGhkbGNkX2NydGNfcmVzdW1lKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisK KyNlbmRpZiAvKiBfX0hETENEX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hcm0vaGRsY2RfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9yZWdzLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3OTllYgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfcmVncy5oCkBAIC0wLDAgKzEsODcgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsMjAxNCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgZmls ZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4g ZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg QVJNIEhETENEIENvbnRyb2xsZXIgcmVnaXN0ZXIgZGVmaW5pdGlvbgorICovCisKKyNpZm5kZWYg X19IRExDRF9SRUdTX0hfXworI2RlZmluZSBfX0hETENEX1JFR1NfSF9fCisKKy8qIHJlZ2lzdGVy IG9mZnNldHMgKi8KKyNkZWZpbmUgSERMQ0RfUkVHX1ZFUlNJT04JCTB4MDAwMAkvKiBybyAqLwor I2RlZmluZSBIRExDRF9SRUdfSU5UX1JBV1NUQVQJCTB4MDAxMAkvKiBydyAqLworI2RlZmluZSBI RExDRF9SRUdfSU5UX0NMRUFSCQkweDAwMTQJLyogd28gKi8KKyNkZWZpbmUgSERMQ0RfUkVHX0lO VF9NQVNLCQkweDAwMTgJLyogcncgKi8KKyNkZWZpbmUgSERMQ0RfUkVHX0lOVF9TVEFUVVMJCTB4 MDAxYwkvKiBybyAqLworI2RlZmluZSBIRExDRF9SRUdfRkJfQkFTRQkJMHgwMTAwCS8qIHJ3ICov CisjZGVmaW5lIEhETENEX1JFR19GQl9MSU5FX0xFTkdUSAkweDAxMDQJLyogcncgKi8KKyNkZWZp bmUgSERMQ0RfUkVHX0ZCX0xJTkVfQ09VTlQJCTB4MDEwOAkvKiBydyAqLworI2RlZmluZSBIRExD RF9SRUdfRkJfTElORV9QSVRDSAkJMHgwMTBjCS8qIHJ3ICovCisjZGVmaW5lIEhETENEX1JFR19C VVNfT1BUSU9OUwkJMHgwMTEwCS8qIHJ3ICovCisjZGVmaW5lIEhETENEX1JFR19WX1NZTkMJCTB4 MDIwMAkvKiBydyAqLworI2RlZmluZSBIRExDRF9SRUdfVl9CQUNLX1BPUkNICQkweDAyMDQJLyog cncgKi8KKyNkZWZpbmUgSERMQ0RfUkVHX1ZfREFUQQkJMHgwMjA4CS8qIHJ3ICovCisjZGVmaW5l IEhETENEX1JFR19WX0ZST05UX1BPUkNICQkweDAyMGMJLyogcncgKi8KKyNkZWZpbmUgSERMQ0Rf UkVHX0hfU1lOQwkJMHgwMjEwCS8qIHJ3ICovCisjZGVmaW5lIEhETENEX1JFR19IX0JBQ0tfUE9S Q0gJCTB4MDIxNAkvKiBydyAqLworI2RlZmluZSBIRExDRF9SRUdfSF9EQVRBCQkweDAyMTgJLyog cncgKi8KKyNkZWZpbmUgSERMQ0RfUkVHX0hfRlJPTlRfUE9SQ0gJCTB4MDIxYwkvKiBydyAqLwor I2RlZmluZSBIRExDRF9SRUdfUE9MQVJJVElFUwkJMHgwMjIwCS8qIHJ3ICovCisjZGVmaW5lIEhE TENEX1JFR19DT01NQU5ECQkweDAyMzAJLyogcncgKi8KKyNkZWZpbmUgSERMQ0RfUkVHX1BJWEVM X0ZPUk1BVAkJMHgwMjQwCS8qIHJ3ICovCisjZGVmaW5lIEhETENEX1JFR19SRURfU0VMRUNUCQkw eDAyNDQJLyogcncgKi8KKyNkZWZpbmUgSERMQ0RfUkVHX0dSRUVOX1NFTEVDVAkJMHgwMjQ4CS8q IHJ3ICovCisjZGVmaW5lIEhETENEX1JFR19CTFVFX1NFTEVDVAkJMHgwMjRjCS8qIHJ3ICovCisK Ky8qIHZlcnNpb24gKi8KKyNkZWZpbmUgSERMQ0RfUFJPRFVDVF9JRAkJMHgxQ0RDMDAwMAorI2Rl ZmluZSBIRExDRF9QUk9EVUNUX01BU0sJCTB4RkZGRjAwMDAKKyNkZWZpbmUgSERMQ0RfVkVSU0lP Tl9NQUpPUl9NQVNLCTB4MDAwMEZGMDAKKyNkZWZpbmUgSERMQ0RfVkVSU0lPTl9NSU5PUl9NQVNL CTB4MDAwMDAwRkYKKworLyogaW50ZXJydXB0cyAqLworI2RlZmluZSBIRExDRF9JTlRFUlJVUFRf RE1BX0VORAkJKDEgPDwgMCkKKyNkZWZpbmUgSERMQ0RfSU5URVJSVVBUX0JVU19FUlJPUgkoMSA8 PCAxKQorI2RlZmluZSBIRExDRF9JTlRFUlJVUFRfVlNZTkMJCSgxIDw8IDIpCisjZGVmaW5lIEhE TENEX0lOVEVSUlVQVF9VTkRFUlJVTgkoMSA8PCAzKQorI2RlZmluZSBIRExDRF9ERUJVR19JTlRf TUFTSwkJKEhETENEX0lOVEVSUlVQVF9ETUFfRU5EIHwgIFwKKwkJCQkJSERMQ0RfSU5URVJSVVBU X0JVU19FUlJPUiB8IFwKKwkJCQkJSERMQ0RfSU5URVJSVVBUX1VOREVSUlVOKQorCisvKiBwb2xh cml0aWVzICovCisjZGVmaW5lIEhETENEX1BPTEFSSVRZX1ZTWU5DCQkoMSA8PCAwKQorI2RlZmlu ZSBIRExDRF9QT0xBUklUWV9IU1lOQwkJKDEgPDwgMSkKKyNkZWZpbmUgSERMQ0RfUE9MQVJJVFlf REFUQUVOCQkoMSA8PCAyKQorI2RlZmluZSBIRExDRF9QT0xBUklUWV9EQVRBCQkoMSA8PCAzKQor I2RlZmluZSBIRExDRF9QT0xBUklUWV9QSVhFTENMSwkJKDEgPDwgNCkKKworLyogY29tbWFuZHMg Ki8KKyNkZWZpbmUgSERMQ0RfQ09NTUFORF9ESVNBQkxFCQkoMCA8PCAwKQorI2RlZmluZSBIRExD RF9DT01NQU5EX0VOQUJMRQkJKDEgPDwgMCkKKworLyogcGl4ZWwgZm9ybWF0ICovCisjZGVmaW5l IEhETENEX1BJWEVMX0ZNVF9MSVRUTEVfRU5ESUFOCSgwIDw8IDMxKQorI2RlZmluZSBIRExDRF9Q SVhFTF9GTVRfQklHX0VORElBTgkoMSA8PCAzMSkKKyNkZWZpbmUgSERMQ0RfQllURVNfUEVSX1BJ WEVMX01BU0sJKDMgPDwgMykKKworLyogYnVzIG9wdGlvbnMgKi8KKyNkZWZpbmUgSERMQ0RfQlVT X0JVUlNUX01BU0sJCTB4MDFmCisjZGVmaW5lIEhETENEX0JVU19NQVhfT1VUU1RBTkQJCTB4ZjAw CisjZGVmaW5lIEhETENEX0JVU19CVVJTVF9OT05FCQkoMCA8PCAwKQorI2RlZmluZSBIRExDRF9C VVNfQlVSU1RfMQkJKDEgPDwgMCkKKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUXzIJCSgxIDw8IDEp CisjZGVmaW5lIEhETENEX0JVU19CVVJTVF80CQkoMSA8PCAyKQorI2RlZmluZSBIRExDRF9CVVNf QlVSU1RfOAkJKDEgPDwgMykKKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUXzE2CQkoMSA8PCA0KQor CisvKiBNYXggcmVzb2x1dGlvbiBzdXBwb3J0ZWQgaXMgNDA5Nng0MDk2LCAzMmJwcCAqLworI2Rl ZmluZSBIRExDRF9NQVhfWFJFUwkJCTQwOTYKKyNkZWZpbmUgSERMQ0RfTUFYX1lSRVMJCQk0MDk2 CisKKyNkZWZpbmUgTlJfUEFMRVRURQkJCTI1NgorCisjZW5kaWYgLyogX19IRExDRF9SRUdTX0hf XyAqLwotLSAKMi42LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==