From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 2/3] drm/amd: add ACP driver support [v6] Date: Thu, 20 Aug 2015 16:09:20 -0400 Message-ID: <1440101361-9912-2-git-send-email-alexander.deucher@amd.com> References: <1440101361-9912-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qg0-f53.google.com (mail-qg0-f53.google.com [209.85.192.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id BA8DB6E3C3 for ; Thu, 20 Aug 2015 13:09:33 -0700 (PDT) Received: by qged69 with SMTP id d69so34993585qge.0 for ; Thu, 20 Aug 2015 13:09:33 -0700 (PDT) In-Reply-To: <1440101361-9912-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: broonie@kernel.org, airlied@gmail.com, dri-devel@lists.freedesktop.org, alsa-devel@alsa-project.org, maruthi.bayyavarapu@amd.com Cc: Alex Deucher , lgirdwood@gmail.com, perex@perex.cz List-Id: dri-devel@lists.freedesktop.org RnJvbTogTWFydXRoaSBCYXl5YXZhcmFwdSA8bWFydXRoaS5iYXl5YXZhcmFwdUBhbWQuY29tPgoK VGhpcyBhZGRzIHRoZSBBQ1AgKEF1ZGlvIENvUHJvY2Vzc29yKSBJUCBkcml2ZXIgYW5kIHdpcmVz Cml0IHVwIHRvIHRoZSBhbWRncHUgZHJpdmVyLiAgVGhlIEFDUCBibG9jayBwcm92aWRlcyB0aGUg RE1BCmVuZ2luZSBhbmQgYnVzIGZvciB0aGUgaTJzIGNvZGVjIHdoaWNoIGlzIHN1cHBvcnRlZCBi eSBhbgphbHNhIGRyaXZlci4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGF1ZGlvIG9uIEFQVXMgdGhh dAp1dGlsaXplIGFuIGkycyBjb2RlYy4KCnYyOiBpbnRlZ3JhdGUgaTJzL2F6IGNoZWNrIHBhdGNo CnYzOiBzL2FtZF9hY3AvYW1kZ3B1X2FjcC8KdjQ6IHVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlCnY1 OiBzcXVhc2ggbXVsdGlwbGUgcGF0Y2hlcywgY29udmVydCB0byBtZmQKdjY6IHNxdWFzaCBpbiBk eW5hbWljIGNlbGwgYWxsb2NhdGlvbiBmcm9tIE1hcnV0aGkKClJldmlld2VkLWJ5OiBKYW1teSBa aG91IDxKYW1teS5aaG91QGFtZC5jb20+ClJldmlld2VkLWJ5OiBNYXJ1dGhpIEJheXlhdmFyYXB1 IDxtYXJ1dGhpLmJheXlhdmFyYXB1QGFtZC5jb20+ClJldmlld2VkLWJ5OiBBbGV4IERldWNoZXIg PGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+ClJldmlld2VkLWJ5OiBNdXJhbGkgS3Jpc2huYSBW ZW11cmkgPG11cmFsaS1rcmlzaG5hLnZlbXVyaUBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBNYXJ1 dGhpIEJheXlhdmFyYXB1IDxtYXJ1dGhpLmJheXlhdmFyYXB1QGFtZC5jb20+ClNpZ25lZC1vZmYt Ynk6IENodW5taW5nIFpob3UgPGRhdmlkMS56aG91QGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IEFs ZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJt L2FtZC9hY3AvS2NvbmZpZyAgICAgICAgICAgICAgfCAgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9h bWQvYWNwL01ha2VmaWxlICAgICAgICAgICAgIHwgICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vYW1k L2FjcC9hY3BfaHcuYyAgICAgICAgICAgICB8IDExMzMgKysrKysrKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2FjcF9ody5oICAgICAgICAgICAgIHwgICA5MSAr KysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1ZGUvYWNwX2dmeF9pZi5oIHwgICA0OSAr KwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUgICAgICAgICAgfCAgIDEzICst CiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCAgICAgICAgICB8ICAgIDUgKwog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5jICAgICAgfCAgMjA4ICsrKysr CiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYWNwLmggICAgICB8ICAgNDAgKwog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmkuYyAgICAgICAgICAgICAgfCAgIDEyICsKIGRy aXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hbWRfc2hhcmVkLmggICAgIHwgICAgMSArCiBpbmNs dWRlL2xpbnV4L21mZC9hbWRfYWNwLmggICAgICAgICAgICAgICAgICB8ICAyMTEgKysrKysKIDEz IGZpbGVzIGNoYW5nZWQsIDE3ODMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL0tjb25maWcKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2FjcF9ody5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvYWNwX2h3LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FjcC9pbmNsdWRlL2FjcF9nZnhfaWYuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hY3AuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hY3AuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbWZkL2FtZF9hY3AuaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggZGY5OWIw MS4uMmUzZGYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJp dmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTE2MSw2ICsxNjEsOCBAQCBjb25maWcgRFJNX0FNREdQ VQogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWciCiAKK3NvdXJj ZSAiZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2dw dS9kcm0vbm91dmVhdS9LY29uZmlnIgogCiBjb25maWcgRFJNX0k4MTAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYWNwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTRmZTcKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9LY29uZmlnCkBAIC0wLDAgKzEs MTAgQEAKK21lbnUgIkFDUCBDb25maWd1cmF0aW9uIgorCitjb25maWcgRFJNX0FNRF9BQ1AKKyAg ICAgICBib29sICJFbmFibGUgQUNQIElQIHN1cHBvcnQiCisgICAgICAgZGVmYXVsdCB5CisgICAg ICAgZGVwZW5kcyBvbiBNRkRfQ09SRQorICAgICAgIGhlbHAKKwlDaG9vc2UgdGhpcyBvcHRpb24g dG8gZW5hYmxlIEFDUCBJUCBzdXBwb3J0IGZvciBBTUQgU09Dcy4KKworZW5kbWVudQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FjcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGMz MzAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvTWFrZWZpbGUK QEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgQUNQLCB3aGljaCBpcyBhIHN1 Yi1jb21wb25lbnQKKyMgb2YgQU1EU09DL0FNREdQVSBkcm0gZHJpdmVyLgorIyBJdCBwcm92aWRl cyB0aGUgSFcgY29udHJvbCBmb3IgQUNQIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLgorCitjY2Zs YWdzLXkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvYWNwCitzdWJk aXItY2NmbGFncy15ICs9IC1JJChBTURBQ1BQQVRIKS8gLUkkKEFNREFDUFBBVEgpL2luY2x1ZGUK KworQU1EX0FDUF9GSUxFUyA6PSAkKEFNREFDUFBBVEgpL2FjcF9ody5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9hY3BfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNw L2FjcF9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzhhYTkKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9hY3BfaHcuYwpAQCAtMCww ICsxLDExMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09Q WVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogTk9URToKKyAqIENlcnRhaW4gcGllY2VzIHdl cmUgcmV1c2VkIGZyb20gU3lub3BzaXMgSTJTIElQIHJlbGF0ZWQgY29kZSwKKyAqIHdoaWNoIG90 aGVyd2lzZSBjYW4gYWxzbyBiZSBmb3VuZCBhdDoKKyAqIHNvdW5kL3NvYy9kd2MvZGVzaWdud2Fy ZV9pMnMuYworICoKKyAqIENvcHlyaWdodCBub3RpY2UgYXMgYXBwZWFycyBpbiB0aGUgYWJvdmUg ZmlsZToKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU1QgTWljcm9lbGVjdHJvbmljcworICog UmFqZWV2IEt1bWFyIDxyYWplZXZrdW1hci5saW51eEBnbWFpbC5jb20+CisgKgorICogVGhpcyBm aWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIg d2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3Ig aW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSAiYWNwX2dmeF9pZi5oIgor I2luY2x1ZGUgImFjcF9ody5oIgorCisjaW5jbHVkZSAiYWNwXzJfMl9kLmgiCisjaW5jbHVkZSAi YWNwXzJfMl9zaF9tYXNrLmgiCisKKyNkZWZpbmUgVklTTEFORFMzMF9JVl9TUkNJRF9BQ1AgMHgw MDAwMDBhMgorCisvKiBDb25maWd1cmUgYSBnaXZlbiBkbWEgY2hhbm5lbCBwYXJhbWV0ZXJzIC0g ZW5hYmxlL2Rpc2JsZSwKKyAqIG51bWJlciBvZiBkZXNjcmlwdG9ycywgcHJpb3JpdHkgKi8KK3N0 YXRpYyB2b2lkIGNvbmZpZ19hY3BfZG1hX2NoYW5uZWwoc3RydWN0IGFtZF9hY3BfZGV2aWNlICph Y3BfZGV2LCB1OCBjaF9udW0sCisJCQkJICAgdTE2IGRzY3Jfc3RydF9pZHgsIHUxNiBudW1fZHNj cnMsCisJCQkJICAgZW51bSBhY3BfZG1hX3ByaW9yaXR5X2xldmVsIHByaW9yaXR5X2xldmVsKQor eworCXUzMiBkbWFfY3RybDsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0 cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJLyogZGlzYWJsZSB0aGUgY2hhbm5l bCBydW4gZmllbGQgKi8KKwlkbWFfY3RybCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNn c19kZXZpY2UsCisJCQkJICAgICBtbUFDUF9ETUFfQ05UTF8wICsgY2hfbnVtKTsKKwlkbWFfY3Ry bCAmPSB+QUNQX0RNQV9DTlRMXzBfX0RNQUNoUnVuX01BU0s7CisJY2dzX3dyaXRlX3JlZ2lzdGVy KGFjcF9wcnYtPmNnc19kZXZpY2UsIChtbUFDUF9ETUFfQ05UTF8wICsgY2hfbnVtKSwKKwkJCSAg IGRtYV9jdHJsKTsKKworCS8qIHByb2dyYW0gYSBETUEgY2hhbm5lbCB3aXRoIGZpcnN0IGRlc2Ny aXB0b3IgdG8gYmUgcHJvY2Vzc2VkLiAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5j Z3NfZGV2aWNlLAorCQkJICAgKG1tQUNQX0RNQV9EU0NSX1NUUlRfSURYXzAgKyBjaF9udW0pLAor CQkJICAgKEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8wX19ETUFDaERzY3JTdHJ0SWR4X01BU0sgJgor CQkJICAgIGRzY3Jfc3RydF9pZHgpKTsKKworCS8qIHByb2dyYW0gYSBETUEgY2hhbm5lbCB3aXRo IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUKKwkgKiBwcm9jZXNzZWQgaW4gdGhlIHRy YW5zZmVyICovCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkg ICAobW1BQ1BfRE1BX0RTQ1JfQ05UXzAgKyBjaF9udW0pLAorCQkJICAgKEFDUF9ETUFfRFNDUl9D TlRfMF9fRE1BQ2hEc2NyQ250X01BU0sgJiBudW1fZHNjcnMpKTsKKworCS8qIHNldCBETUEgY2hh bm5lbCBwcmlvcml0eSAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNl LAkobW1BQ1BfRE1BX1BSSU9fMCArIGNoX251bSksCisJCQkgICBwcmlvcml0eV9sZXZlbCk7Cit9 CisKKy8qIEluaXRpYWxpemUgdGhlIGRtYSBkZXNjcmlwdG9ycyBsb2NhdGlvbiBpbiBTUkFNIGFu ZCBwYWdlIHNpemUgKi8KK3N0YXRpYyB2b2lkIGFjcF9kbWFfZGVzY3JfaW5pdChzdHJ1Y3QgYW1k X2FjcF9wcml2YXRlICphY3BfcHJ2KQoreworCXUzMiBzcmFtX3B0ZV9vZmZzZXQgPSAwOworCisJ LyogU1JBTSBzdGFydHMgYXQgMHgwNDAwMDAwMC4gRnJvbSB0aGF0IG9mZnNldCBvbmUgcGFnZSAo NEtCKSBsZWZ0IGZvcgorCSAqIGZpbGxpbmcgRE1BIGRlc2NyaXB0b3JzLnNyYW1fcHRlX29mZnNl dCA9IDB4MDQwMDEwMDAgLCB1c2VkIGZvcgorCSAqIGZpbGxpbmcgc3lzdGVtIFJBTSdzIHBoeXNp Y2FsIHBhZ2VzLgorCSAqIFRoaXMgYmVjb21lcyB0aGUgQUxTQSdzIFJpbmcgYnVmZmVyIHN0YXJ0 IGFkZHJlc3MKKwkgKi8KKwlzcmFtX3B0ZV9vZmZzZXQgPSBBQ1BfREFHQl9HUlBfU1JBTV9CQVNF X0FERFJFU1M7CisKKwkvKiBzbm9vcGFibGUgKi8KKwlzcmFtX3B0ZV9vZmZzZXQgfD0gQUNQX0RB R0JfQkFTRV9BRERSX0dSUF8xX19BWEkyREFHQlNub29wU2VsX01BU0s7CisJLyogTWVtbW9yeSBp cyBzeXN0ZW0gbW1lbW9yeSAqLworCXNyYW1fcHRlX29mZnNldCB8PSBBQ1BfREFHQl9CQVNFX0FE RFJfR1JQXzFfX0FYSTJEQUdCVGFyZ2V0TWVtU2VsX01BU0s7CisJLyogUGFnZSBFbmFibGVkICov CisJc3JhbV9wdGVfb2Zmc2V0IHw9IEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMV9fQVhJMkRBR0JH cnBFbmFibGVfTUFTSzsKKworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNl LAltbUFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMSwKKwkJCSAgIHNyYW1fcHRlX29mZnNldCk7CisJ Y2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQX0RBR0JfUEFHRV9T SVpFX0dSUF8xLAorCQkJICAgUEFHRV9TSVpFXzRLX0VOQUJMRSk7Cit9CisKKy8qIEluaXRpYWxp emUgYSBkbWEgZGVzY3JpcHRvciBpbiBTUkFNIGJhc2VkIG9uIGRlc2NyaXRvciBpbmZvcm1hdGlv biBwYXNzZWQgKi8KK3N0YXRpYyB2b2lkIGNvbmZpZ19kbWFfZGVzY3JpcHRvcl9pbl9zcmFtKHN0 cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCQkJICB1MTYgZGVzY3JfaWR4LAorCQkJ CQkgIGFjcF9kbWFfZHNjcl90cmFuc2Zlcl90ICpkZXNjcl9pbmZvKQoreworCXUzMiBzcmFtX29m ZnNldDsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNw X3ByaXZhdGUgKilhY3BfZGV2OworCisJc3JhbV9vZmZzZXQgPSAoZGVzY3JfaWR4ICogc2l6ZW9m KGFjcF9kbWFfZHNjcl90cmFuc2Zlcl90KSk7CisKKwkvKiBwcm9ncmFtIHRoZSBzb3VyY2UgYmFz ZSBhZGRyZXNzLiAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAlt bUFDUF9TUkJNX1RhcmdfSWR4X0FkZHIsCisJCQkgICBzcmFtX29mZnNldCk7CisJY2dzX3dyaXRl X3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQX1NSQk1fVGFyZ19JZHhfRGF0YSwK KwkJCSAgIGRlc2NyX2luZm8tPnNyYyk7CisJLyogcHJvZ3JhbSB0aGUgZGVzdGluYXRpb24gYmFz ZSBhZGRyZXNzLiAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAlt bUFDUF9TUkJNX1RhcmdfSWR4X0FkZHIsCisJCQkgICAoc3JhbV9vZmZzZXQgKyA0KSk7CisJY2dz X3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQX1NSQk1fVGFyZ19JZHhf RGF0YSwKKwkJCQkJCWRlc2NyX2luZm8tPmRlc3QpOworCisJLyogcHJvZ3JhbSB0aGUgbnVtYmVy IG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIGZvciB0aGlzIGRlc2NyaXB0b3IuICovCisJY2dz X3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCW1tQUNQX1NSQk1fVGFyZ19JZHhf QWRkciwKKwkJCSAgIChzcmFtX29mZnNldCArIDgpKTsKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNw X3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfU1JCTV9UYXJnX0lkeF9EYXRhLAorCQkJICAgZGVzY3Jf aW5mby0+eGZlcl92YWwpOworfQorCisvKiBJbml0aWFsaXplIHRoZSBETUEgZGVzY3JpcHRvciBp bmZvcm1hdGlvbiBmb3IgdHJhbnNmZXIgYmV0d2VlbgorICogc3lzdGVtIG1lbW9yeSA8LT4gQUNQ IFNSQU0KKyAqLworc3RhdGljIHZvaWQgc2V0X2FjcF9zeXNtZW1fZG1hX2Rlc2NyaXB0b3JzKHN0 cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCQkJICAgdTMyIHNpemUsIGludCBkaXJl Y3Rpb24sCisJCQkJCSAgIHUzMiBwdGVfb2Zmc2V0KQoreworCXUxNiBudW1fZGVzY3I7CisJdTE2 IGRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEyOworCWFjcF9kbWFf ZHNjcl90cmFuc2Zlcl90IGRtYWRzY3JbMl07CisKKwludW1fZGVzY3IgPSAyOworCisJZG1hZHNj clswXS54ZmVyX3ZhbCA9IDA7CisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJBQ0spIHsK KwkJZG1hX2RzY3JfaWR4ID0gUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTI7CisJCWRtYWRz Y3JbMF0uZGVzdCA9IEFDUF9TSEFSRURfUkFNX0JBTktfMV9BRERSRVNTICsgKHNpemUgLyAyKTsK KwkJZG1hZHNjclswXS5zcmMgPSBBQ1BfSU5URVJOQUxfQVBFUlRVUkVfV0lORE9XXzBfQUREUkVT UyArCisJCQkocHRlX29mZnNldCAqIFBBR0VfU0laRV80Syk7CisJCWRtYWRzY3JbMF0ueGZlcl92 YWwgfD0gKERJU0FCTEUgPDwgMjIpIHwKKwkJCShBQ1BfRE1BX0FUVFJJQlVURVNfREFHQl9PTklP Tl9UT19TSEFSRURNRU0gPDwgMTYpIHwKKwkJCShzaXplIC8gMik7CisJfSBlbHNlIHsKKwkJZG1h X2RzY3JfaWR4ID0gQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNDsKKwkJZG1hZHNjclswXS5z cmMgPSBBQ1BfU0hBUkVEX1JBTV9CQU5LXzVfQUREUkVTUzsKKwkJZG1hZHNjclswXS5kZXN0ID0g QUNQX0lOVEVSTkFMX0FQRVJUVVJFX1dJTkRPV18wX0FERFJFU1MgKworCQkJKHB0ZV9vZmZzZXQg KiBQQUdFX1NJWkVfNEspOworCQlkbWFkc2NyWzBdLnhmZXJfdmFsIHw9CisJCQkoRU5BQkxFIDw8 IDIyKSB8CisJCQkoQUNQX0RNQV9BVFRSSUJVVEVTX1NIQVJFRE1FTV9UT19EQUdCX09OSU9OIDw8 IDE2KSB8CisJCQkoc2l6ZSAvIDIpOworCX0KKworCWNvbmZpZ19kbWFfZGVzY3JpcHRvcl9pbl9z cmFtKGFjcF9kZXYsIGRtYV9kc2NyX2lkeCwgJmRtYWRzY3JbMF0pOworCisJZG1hZHNjclsxXS54 ZmVyX3ZhbCA9IDA7CisJaWYgKGRpcmVjdGlvbiA9PSBTVFJFQU1fUExBWUJBQ0spIHsKKwkJZG1h X2RzY3JfaWR4ID0gUExBWUJBQ0tfRU5EX0RNQV9ERVNDUl9DSDEyOworCQlkbWFkc2NyWzFdLmRl c3QgPSBBQ1BfU0hBUkVEX1JBTV9CQU5LXzFfQUREUkVTUzsKKwkJZG1hZHNjclsxXS5zcmMgPSBB Q1BfSU5URVJOQUxfQVBFUlRVUkVfV0lORE9XXzBfQUREUkVTUyArCisJCQkocHRlX29mZnNldCAq IFBBR0VfU0laRV80SykgKyAoc2l6ZSAvIDIpOworCQlkbWFkc2NyWzFdLnhmZXJfdmFsIHw9IChE SVNBQkxFIDw8IDIyKSB8CisJCQkoQUNQX0RNQV9BVFRSSUJVVEVTX0RBR0JfT05JT05fVE9fU0hB UkVETUVNIDw8IDE2KSB8CisJCQkoc2l6ZSAvIDIpOworCX0gZWxzZSB7CisJCWRtYV9kc2NyX2lk eCA9IENBUFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE0OworCQlkbWFkc2NyWzFdLmRlc3QgPSBkbWFk c2NyWzBdLmRlc3QgKyAoc2l6ZSAvIDIpOworCQlkbWFkc2NyWzFdLnNyYyA9IGRtYWRzY3JbMF0u c3JjICsgKHNpemUgLyAyKTsKKwkJZG1hZHNjclsxXS54ZmVyX3ZhbCB8PSAoRU5BQkxFIDw8IDIy KSB8CisJCQkoQUNQX0RNQV9BVFRSSUJVVEVTX1NIQVJFRE1FTV9UT19EQUdCX09OSU9OIDw8IDE2 KSB8CisJCQkoc2l6ZSAvIDIpOworCX0KKworCWNvbmZpZ19kbWFfZGVzY3JpcHRvcl9pbl9zcmFt KGFjcF9kZXYsIGRtYV9kc2NyX2lkeCwgJmRtYWRzY3JbMV0pOworCisJaWYgKGRpcmVjdGlvbiA9 PSBTVFJFQU1fUExBWUJBQ0spIHsKKwkJLyogc3RhcnRpbmcgZGVzY3JpcHRvciBmb3IgdGhpcyBj aGFubmVsICovCisJCWRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEy OworCQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9kZXYsIFNZU1JBTV9UT19BQ1BfQ0hfTlVN LAorCQkJCQlkbWFfZHNjcl9pZHgsIG51bV9kZXNjciwKKwkJCQkJQUNQX0RNQV9QUklPUklUWV9M RVZFTF9OT1JNQUwpOworCX0gZWxzZSB7CisJCS8qIHN0YXJ0aW5nIGRlc2NyaXB0b3IgZm9yIHRo aXMgY2hhbm5lbCAqLworCQlkbWFfZHNjcl9pZHggPSBDQVBUVVJFX1NUQVJUX0RNQV9ERVNDUl9D SDE0OworCQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9kZXYsIEFDUF9UT19TWVNSQU1fQ0hf TlVNLAorCQkJCQlkbWFfZHNjcl9pZHgsIG51bV9kZXNjciwKKwkJCQkJQUNQX0RNQV9QUklPUklU WV9MRVZFTF9OT1JNQUwpOworCX0KK30KKworLyogSW5pdGlhbGl6ZSB0aGUgRE1BIGRlc2NyaXB0 b3IgaW5mb3JtYXRpb24gZm9yIHRyYW5zZmVyIGJldHdlZW4KKyAqIEFDUCBTUkFNIDwtPiBJMlMK KyAqLworc3RhdGljIHZvaWQgc2V0X2FjcF90b19pMnNfZG1hX2Rlc2NyaXB0b3JzKHN0cnVjdCBh bWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCQkJICAgdTMyIHNpemUsIGludCBkaXJlY3Rpb24p Cit7CisKKwl1MTYgbnVtX2Rlc2NyOworCXUxNiBkbWFfZHNjcl9pZHggPSBQTEFZQkFDS19TVEFS VF9ETUFfREVTQ1JfQ0gxMzsKKwlhY3BfZG1hX2RzY3JfdHJhbnNmZXJfdCBkbWFkc2NyWzJdOwor CisJbnVtX2Rlc2NyID0gMjsKKworCWRtYWRzY3JbMF0ueGZlcl92YWwgPSAwOworCWlmIChkaXJl Y3Rpb24gPT0gU1RSRUFNX1BMQVlCQUNLKSB7CisJCWRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NU QVJUX0RNQV9ERVNDUl9DSDEzOworCQlkbWFkc2NyWzBdLnNyYyA9IEFDUF9TSEFSRURfUkFNX0JB TktfMV9BRERSRVNTOworCQlkbWFkc2NyWzBdLnhmZXJfdmFsIHw9IChFTkFCTEUgPDwgMjIpIHwg KFRPX0FDUF9JMlNfMSA8PCAxNikgfAorCQkJCQkoc2l6ZSAvIDIpOworCX0gZWxzZSB7CisJCWRt YV9kc2NyX2lkeCA9IENBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTU7CisJCWRtYWRzY3JbMF0u ZGVzdCA9IEFDUF9TSEFSRURfUkFNX0JBTktfNV9BRERSRVNTOworCQlkbWFkc2NyWzBdLnhmZXJf dmFsIHw9IChFTkFCTEUgPDwgMjIpIHwKKwkJCQkJKEZST01fQUNQX0kyU18xIDw8IDE2KSB8IChz aXplIC8gMik7CisJfQorCisJY29uZmlnX2RtYV9kZXNjcmlwdG9yX2luX3NyYW0oYWNwX2Rldiwg ZG1hX2RzY3JfaWR4LCAmZG1hZHNjclswXSk7CisKKwlkbWFkc2NyWzFdLnhmZXJfdmFsID0gMDsK KwlpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFDSykgeworCQlkbWFfZHNjcl9pZHggPSBQ TEFZQkFDS19FTkRfRE1BX0RFU0NSX0NIMTM7CisJCWRtYWRzY3JbMV0uc3JjID0gZG1hZHNjclsw XS5zcmMgKyAoc2l6ZSAvIDIpOworCQlkbWFkc2NyWzFdLnhmZXJfdmFsIHw9IChFTkFCTEUgPDwg MjIpIHwgKFRPX0FDUF9JMlNfMSA8PCAxNikgfAorCQkJCQkoc2l6ZSAvIDIpOworCX0gZWxzZSB7 CisJCWRtYV9kc2NyX2lkeCA9IENBUFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE1OworCQlkbWFkc2Ny WzFdLmRlc3QgPSBkbWFkc2NyWzBdLmRlc3QgKyAoc2l6ZSAvIDIpOworCQlkbWFkc2NyWzFdLnhm ZXJfdmFsIHw9IChFTkFCTEUgPDwgMjIpIHwKKwkJCQkJKEZST01fQUNQX0kyU18xIDw8IDE2KSB8 IChzaXplIC8gMik7CisJfQorCisJY29uZmlnX2RtYV9kZXNjcmlwdG9yX2luX3NyYW0oYWNwX2Rl diwgZG1hX2RzY3JfaWR4LCAmZG1hZHNjclsxXSk7CisKKwkvKiBDb25maWd1cmUgdGhlIERNQSBj aGFubmVsIHdpdGggdGhlIGFib3ZlIGRlc2NyaXB0b3JlICovCisJaWYgKGRpcmVjdGlvbiA9PSBT VFJFQU1fUExBWUJBQ0spIHsKKwkJLyogc3RhcnRpbmcgZGVzY3JpcHRvciBmb3IgdGhpcyBjaGFu bmVsICovCisJCWRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzOwor CQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9kZXYsIEFDUF9UT19JMlNfRE1BX0NIX05VTSwK KwkJCQkJZG1hX2RzY3JfaWR4LCBudW1fZGVzY3IsCisJCQkJCUFDUF9ETUFfUFJJT1JJVFlfTEVW RUxfTk9STUFMKTsKKwl9IGVsc2UgeworCQkvKiBzdGFydGluZyBkZXNjcmlwdG9yIGZvciB0aGlz IGNoYW5uZWwgKi8KKwkJZG1hX2RzY3JfaWR4ID0gQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gx NTsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfZGV2LCBJMlNfVE9fQUNQX0RNQV9DSF9O VU0sCisJCQkJCWRtYV9kc2NyX2lkeCwgbnVtX2Rlc2NyLAorCQkJCQlBQ1BfRE1BX1BSSU9SSVRZ X0xFVkVMX05PUk1BTCk7CisJfQorCit9CisKK3N0YXRpYyB1MTYgZ2V0X2RzY3JfaWR4KHN0cnVj dCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgaW50IGRpcmVjdGlvbikKK3sKKwl1MTYgZHNjcl9p ZHg7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9w cml2YXRlICopYWNwX2RldjsKKworCWlmIChkaXJlY3Rpb24gPT0gU1RSRUFNX1BMQVlCQUNLKSB7 CisJCWRzY3JfaWR4ID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJ CQkJCQltbUFDUF9ETUFfQ1VSX0RTQ1JfMTMpOworCQlkc2NyX2lkeCA9IChkc2NyX2lkeCA9PSBQ TEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMykgPworCQkJCVBMQVlCQUNLX1NUQVJUX0RNQV9E RVNDUl9DSDEyIDoKKwkJCQlQTEFZQkFDS19FTkRfRE1BX0RFU0NSX0NIMTI7CisJfSBlbHNlIHsK KwkJZHNjcl9pZHggPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJ CQkJCW1tQUNQX0RNQV9DVVJfRFNDUl8xNSk7CisJCWRzY3JfaWR4ID0gKGRzY3JfaWR4ID09IENB UFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTUpID8KKwkJCQlDQVBUVVJFX0VORF9ETUFfREVTQ1Jf Q0gxNCA6CisJCQkJQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNDsKKwl9CisKKwlyZXR1cm4g ZHNjcl9pZHg7CisKK30KKworLyogQ3JlYXRlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBBQ1AgU1JB TSBmb3IgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKi8KK3N0YXRpYyB2b2lkIGFjcF9wdGVfY29uZmln KHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2Rldiwgc3RydWN0IHBhZ2UgKnBnLAorCQkJICAg dTE2IG51bV9vZl9wYWdlcywgdTMyIHB0ZV9vZmZzZXQpCit7CisJdTE2IHBhZ2VfaWR4OworCXU2 NCBhZGRyOworCXUzMiBsb3c7CisJdTMyIGhpZ2g7CisJdTMyIG9mZnNldDsKKwlzdHJ1Y3QgYW1k X2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2 OworCisJb2Zmc2V0CT0gQUNQX0RBR0JfR1JQX1NSQk1fU1JBTV9CQVNFX09GRlNFVCArIChwdGVf b2Zmc2V0ICogOCk7CisJZm9yIChwYWdlX2lkeCA9IDA7IHBhZ2VfaWR4IDwgKG51bV9vZl9wYWdl cyk7IHBhZ2VfaWR4KyspIHsKKwkJLyogTG9hZCB0aGUgbG93IGFkZHJlc3Mgb2YgcGFnZSBpbnQg QUNQIFNSQU0gdGhyb3VnaCBTUkJNICovCisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5j Z3NfZGV2aWNlLAorCQkJCSAgIG1tQUNQX1NSQk1fVGFyZ19JZHhfQWRkciwKKwkJCQkgICAob2Zm c2V0ICsgKHBhZ2VfaWR4ICogOCkpKTsKKwkJYWRkciA9IHBhZ2VfdG9fcGh5cyhwZyk7CisKKwkJ bG93ID0gbG93ZXJfMzJfYml0cyhhZGRyKTsKKwkJaGlnaCA9IHVwcGVyXzMyX2JpdHMoYWRkcik7 CisKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJICAgbW1B Q1BfU1JCTV9UYXJnX0lkeF9EYXRhLCBsb3cpOworCisJCS8qIExvYWQgdGhlIEhpZ2ggYWRkcmVz cyBvZiBwYWdlIGludCBBQ1AgU1JBTSB0aHJvdWdoIFNSQk0gKi8KKwkJY2dzX3dyaXRlX3JlZ2lz dGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJICAgbW1BQ1BfU1JCTV9UYXJnX0lkeF9BZGRy LAorCQkJCSAgIChvZmZzZXQgKyAocGFnZV9pZHggKiA4KSArIDQpKTsKKworCQkvKiBwYWdlIGVu YWJsZSBpbiBBQ1AgKi8KKwkJaGlnaCB8PSBCSVQoMzEpOworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIo YWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkgICBtbUFDUF9TUkJNX1RhcmdfSWR4X0RhdGEsIGhp Z2gpOworCisJCS8qIE1vdmUgdG8gbmV4dCBwaHlzaWNhbGx5IGNvbnRpZ3VvcyBwYWdlICovCisJ CXBnKys7CisJfQorfQorCisvKiBlbmFibGVzL2Rpc2FibGVzIEFDUCdzIGV4dGVybmFsIGludGVy cnVwdCAqLworc3RhdGljIHZvaWQgYWNwX2VuYWJsZV9leHRlcm5hbF9pbnRlcnJ1cHRzKHN0cnVj dCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCQkJICAgaW50IGVuYWJsZSkKK3sKKwl1MzIg YWNwX2V4dF9pbnRyX2VuYjsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0 cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJYWNwX2V4dF9pbnRyX2VuYiA9IGVu YWJsZSA/CisJCUFDUF9FWFRFUk5BTF9JTlRSX0VOQl9fQUNQRXh0SW50ckVuYl9NQVNLIDoKKwkJ MDsKKworCS8qIFdyaXRlIHRoZSBTb2Z0d2FyZSBFeHRlcm5hbCBJbnRlcnJ1cHQgRW5hYmxlIHJl Z2lzdGVyICovCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkg ICBtbUFDUF9FWFRFUk5BTF9JTlRSX0VOQiwgYWNwX2V4dF9pbnRyX2VuYik7Cit9CisKKy8qIENs ZWFyIChhY2tub3dsZWRnZSkgRE1BICdJbnRlcnJ1cHQgb24gQ29tcGxldGUnIChJT0MpIGluIEFD UAorICogZXh0ZXJuYWwgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorICovCitzdGF0aWMgdm9p ZCBhY3BfZXh0X3N0YXRfY2xlYXJfZG1haW9jKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2Rl diwgdTggY2hfbnVtKQoreworCXUzMiBleHRfaW50cl9zdGF0OworCXUzMiBjaG1hc2sgPSBCSVQo Y2hfbnVtKTsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRf YWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJZXh0X2ludHJfc3RhdCA9IGNnc19yZWFkX3JlZ2lz dGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCSAgbW1BQ1BfRVhURVJOQUxfSU5UUl9TVEFU KTsKKwlpZiAoZXh0X2ludHJfc3RhdCAmIChjaG1hc2sgPDwKKwkJCSAgICAgQUNQX0VYVEVSTkFM X0lOVFJfU1RBVF9fRE1BSU9DU3RhdF9fU0hJRlQpKSB7CisKKwkJZXh0X2ludHJfc3RhdCAmPSAo Y2htYXNrIDw8CisJCQkJICBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19ETUFJT0NBY2tfX1NISUZU KTsKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJICAgbW1B Q1BfRVhURVJOQUxfSU5UUl9TVEFULCBleHRfaW50cl9zdGF0KTsKKwl9Cit9CisKKy8qIENoZWNr IHdoZXRoZXIgQUNQIERNQSBpbnRlcnJ1cHQgKElPQykgaXMgZ2VuZXJhdGVkIG9yIG5vdCAqLwor c3RhdGljIHUxNiBhY3BfZ2V0X2ludHJfZmxhZyhzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9k ZXYpCit7CisJdTMyIGV4dF9pbnRyX3N0YXR1czsKKwl1MzIgaW50cl9nZW47CisJc3RydWN0IGFt ZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2Rl djsKKworCWV4dF9pbnRyX3N0YXR1cyA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19k ZXZpY2UsCisJCQkJCSAgICBtbUFDUF9FWFRFUk5BTF9JTlRSX1NUQVQpOworCWludHJfZ2VuID0g KCgoZXh0X2ludHJfc3RhdHVzICYKKwkJICAgICAgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRE1B SU9DU3RhdF9NQVNLKSA+PgorCQkgICAgIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RNQUlPQ1N0 YXRfX1NISUZUKSk7CisKKwlyZXR1cm4gaW50cl9nZW47Cit9CisKK3N0YXRpYyBpbnQgaXJxX3Nl dF9zb3VyY2Uodm9pZCAqcHJpdmF0ZV9kYXRhLCB1bnNpZ25lZCBzcmNfaWQsIHVuc2lnbmVkIHR5 cGUsCisJCQkJCQkJCWludCBlbmFibGVkKQoreworCXN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNw X2RldiA9CisJCSgoc3RydWN0IGFjcF9pcnFfcHJ2ICopcHJpdmF0ZV9kYXRhKS0+YWNwX2RldjsK KworCWlmIChzcmNfaWQgPT0gVklTTEFORFMzMF9JVl9TUkNJRF9BQ1ApIHsKKwkJYWNwX2VuYWJs ZV9leHRlcm5hbF9pbnRlcnJ1cHRzKGFjcF9kZXYsIGVuYWJsZWQpOworCQlyZXR1cm4gMDsKKwl9 IGVsc2UgeworCQlyZXR1cm4gLTE7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaTJzX2Ns ZWFyX2lycXMoc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2LAorCQkJCSAgaW50IGRpcmVj dGlvbikKK3sKKwl1MzIgaSA9IDA7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9 IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWlmIChkaXJlY3Rpb24gPT0g U1RSRUFNX1BMQVlCQUNLKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQljZ3Nfd3Jp dGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJKG1tQUNQX0kyU1NQX1RPUjAg KyAoMHgxMCAqIGkpKSwgMCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykK KwkJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkobW1BQ1Bf STJTTUlDU1BfUk9SMCArICgweDEwICogaSkpLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGky c19kaXNhYmxlX2NoYW5uZWxzKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCQkJ dTMyIHN0cmVhbSkKK3sKKwl1MzIgaSA9IDA7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNw X3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWlmIChzdHJlYW0g PT0gU1RSRUFNX1BMQVlCQUNLKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQljZ3Nf d3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJKG1tQUNQX0kyU1NQX1RF UjAgKyAoMHgxMCAqIGkpKSwgMCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkr KykKKwkJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkobW1B Q1BfSTJTTUlDU1BfUkVSMCArICgweDEwICogaSkpLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk IGNvbmZpZ3VyZV9pMnNfc3RyZWFtKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJ CQlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKmF1ZGlvX2NvbmZpZykKK3sKKwlzdHJ1Y3Qg YW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3Bf ZGV2OworCisJaWYgKGF1ZGlvX2NvbmZpZy0+ZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFDSykg eworCQkvKiBUcmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBkYXRhIHdpZHRoICov CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkobW1BQ1Bf STJTU1BfVENSMCArCisJCQkJCSgweDEwICoJYXVkaW9fY29uZmlnLT5jaF9yZWcpKSwKKwkJCQkJ YXVkaW9fY29uZmlnLT54ZmVyX3Jlc29sdXRpb24pOworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNw X3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJKG1tQUNQX0kyU1NQX1RGQ1IwICsKKwkJCQkJKDB4MTAg KiBhdWRpb19jb25maWctPmNoX3JlZykpLCAweDAyKTsKKworCQkvKiBSZWFkIGludGVycnVwdCBt YXNrIHJlZ2lzdGVyICovCisJCWF1ZGlvX2NvbmZpZy0+aXJxID0KKwkJCWNnc19yZWFkX3JlZ2lz dGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCQkobW1BQ1BfSTJTU1BfSU1SMCArCisJCQkJ CQkoMHgxMCAqIGF1ZGlvX2NvbmZpZy0+Y2hfcmVnKSkpOworCQkvKiBUWCBGSUZPIE92ZXJydW4s RW1wdHkgaW50ZXJydXB0cyAqLworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rl dmljZSwKKwkJCQkJKG1tQUNQX0kyU1NQX0lNUjAgKworCQkJCQkoMHgxMCAqIGF1ZGlvX2NvbmZp Zy0+Y2hfcmVnKSksCisJCQkJCShhdWRpb19jb25maWctPmlycSAmIH4weDMwKSk7CisJCS8qRW5h YmxlIFRyYW5zbWl0ICovCisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNl LAorCQkJCQkobW1BQ1BfSTJTU1BfVEVSMCArCisJCQkJCSgweDEwICoJYXVkaW9fY29uZmlnLT5j aF9yZWcpKSwgMSk7CisJfSBlbHNlIHsKKwkJLyogUmVjZWl2ZSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIGZvciBkYXRhIHdpZHRoICovCisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3Nf ZGV2aWNlLAorCQkJCQkobW1BQ1BfSTJTTUlDU1BfUkNSMCArCisJCQkJCSgweDEwICogYXVkaW9f Y29uZmlnLT5jaF9yZWcpKSwKKwkJCQkJYXVkaW9fY29uZmlnLT54ZmVyX3Jlc29sdXRpb24pOwor CQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJKG1tQUNQX0ky U01JQ1NQX1JGQ1IwICsKKwkJCQkJKDB4MTAgKiBhdWRpb19jb25maWctPmNoX3JlZykpLCAweDA3 KTsKKwkJLypSZWFkIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCisJCWF1ZGlvX2NvbmZpZy0+ aXJxID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJKG1tQUNQ X0kyU01JQ1NQX0lNUjAgKworCQkJCQkoMHgxMCAqIGF1ZGlvX2NvbmZpZy0+Y2hfcmVnKSkpOwor CisJCS8qIFRYIEZJRk8gT3ZlcnJ1bixFbXB0eSBpbnRlcnJ1cHRzICovCisJCWNnc193cml0ZV9y ZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkobW1BQ1BfSTJTTUlDU1BfSU1SMCAr CisJCQkJCSgweDEwICogYXVkaW9fY29uZmlnLT5jaF9yZWcpKSwKKwkJCQkJYXVkaW9fY29uZmln LT5pcnEgJiB+MHgwMyk7CisJCS8qRW5hYmxlIFJlY2VpdmUgKi8KKwkJY2dzX3dyaXRlX3JlZ2lz dGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCShtbUFDUF9JMlNNSUNTUF9SRVIwICsKKwkJ CQkJKDB4MTAgKiBhdWRpb19jb25maWctPmNoX3JlZykpLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIGNvbmZpZ19hY3BfZG1hKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCSAg IHN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqYXVkaW9fY29uZmlnKQoreworCXUzMiBwdGVf b2Zmc2V0OworCisJaWYgKGF1ZGlvX2NvbmZpZy0+ZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFD SykKKwkJcHRlX29mZnNldCA9IFBMQVlCQUNLX1BURV9PRkZTRVQ7CisJZWxzZQorCQlwdGVfb2Zm c2V0ID0gQ0FQVFVSRV9QVEVfT0ZGU0VUOworCisJYWNwX3B0ZV9jb25maWcoYWNwX2RldiwgYXVk aW9fY29uZmlnLT5wZywgYXVkaW9fY29uZmlnLT5udW1fb2ZfcGFnZXMsCisJCSAgICAgICBwdGVf b2Zmc2V0KTsKKworCS8qIENvbmZpZ3VyZSBTeXN0ZW0gbWVtb3J5IDwtPiBBQ1AgU1JBTSBETUEg ZGVzY3JpcHRvcnMgKi8KKwlzZXRfYWNwX3N5c21lbV9kbWFfZGVzY3JpcHRvcnMoYWNwX2Rldiwg YXVkaW9fY29uZmlnLT5zaXplLAorCQkJCSAgICAgICBhdWRpb19jb25maWctPmRpcmVjdGlvbiwK KwkJCQkgICAgICAgcHRlX29mZnNldCk7CisKKwkvKiBDb25maWd1cmUgQUNQIFNSQU0gPC0+IEky UyBETUEgZGVzY3JpcHRvcnMgKi8KKwlzZXRfYWNwX3RvX2kyc19kbWFfZGVzY3JpcHRvcnMoYWNw X2RldiwgYXVkaW9fY29uZmlnLT5zaXplLAorCQkJCQlhdWRpb19jb25maWctPmRpcmVjdGlvbik7 Cit9CisKKy8qIFN0YXJ0IGEgZ2l2ZW4gRE1BIGNoYW5uZWwgdHJhbnNmZXIgKi8KK3N0YXRpYyBp bnQgYWNwX2RtYV9zdGFydChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkgdTE2 IGNoX251bSwgYm9vbCBpc19jaXJjdWxhcikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBkbWFfY3Ry bDsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3By aXZhdGUgKilhY3BfZGV2OworCisJc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKworCS8q IHJlYWQgdGhlIGRtYSBjb250cm9sIHJlZ2lzdGVyIGFuZCBkaXNhYmxlIHRoZSBjaGFubmVsIHJ1 biBmaWVsZCAqLworCWRtYV9jdHJsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rl dmljZSwKKwkJCQkgICAgIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOworCisJLypJbnZhbGlk YXRpbmcgdGhlIERBR0IgY2FjaGUgKi8KKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dz X2RldmljZSwJbW1BQ1BfREFHQl9BVFVfQ1RSTCwgRU5BQkxFKTsKKworCS8qIGNvbmZpZ3VyZSB0 aGUgRE1BIGNoYW5uZWwgYW5kIHN0YXJ0IHRoZSBETUEgdHJhbnNmZXIKKwkgKiBzZXQgZG1hY2hy dW4gYml0IHRvIHN0YXJ0IHRoZSB0cmFuc2ZlciBhbmQgZW5hYmxlIHRoZQorCSAqIGludGVycnVw dCBvbiBjb21wbGV0aW9uIG9mIHRoZSBkbWEgdHJhbnNmZXIKKwkgKi8KKwlkbWFfY3RybCB8PSBB Q1BfRE1BX0NOVExfMF9fRE1BQ2hSdW5fTUFTSzsKKworCWlmICgoY2hfbnVtID09IEFDUF9UT19J MlNfRE1BX0NIX05VTSkgfHwKKwkgICAgKGNoX251bSA9PSBBQ1BfVE9fU1lTUkFNX0NIX05VTSkg fHwKKwkgICAgKGNoX251bSA9PSBJMlNfVE9fQUNQX0RNQV9DSF9OVU0pKSB7CisJCWRtYV9jdHJs IHw9IEFDUF9ETUFfQ05UTF8wX19ETUFDaElPQ0VuX01BU0s7CisJfSBlbHNlIHsKKwkJZG1hX2N0 cmwgJj0gfkFDUF9ETUFfQ05UTF8wX19ETUFDaElPQ0VuX01BU0s7CisJfQorCisJLyogZW5hYmxl ICBmb3IgQUNQIFNSQU0gdG8vZnJvbSBJMlMgRE1BIGNoYW5uZWwgKi8KKwlpZiAoaXNfY2lyY3Vs YXIgPT0gdHJ1ZSkgeworCQlkbWFfY3RybCB8PSBBQ1BfRE1BX0NOVExfMF9fQ2lyY3VsYXJfRE1B X0VuX01BU0s7CisJCWNnc19pcnFfZ2V0KGFjcF9wcnYtPmNnc19kZXZpY2UsIFZJU0xBTkRTMzBf SVZfU1JDSURfQUNQLCAwKTsKKwl9IGVsc2UgeworCQlkbWFfY3RybCAmPSB+QUNQX0RNQV9DTlRM XzBfX0NpcmN1bGFyX0RNQV9Fbl9NQVNLOworCX0KKworCWNnc193cml0ZV9yZWdpc3RlcihhY3Bf cHJ2LT5jZ3NfZGV2aWNlLAkobW1BQ1BfRE1BX0NOVExfMCArIGNoX251bSksCisJCQkgICBkbWFf Y3RybCk7CisKKwlzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKwlyZXR1cm4gc3RhdHVzOworfQor CisvKiBTdG9wIGEgZ2l2ZW4gRE1BIGNoYW5uZWwgdHJhbnNmZXIgKi8KK3N0YXRpYyBpbnQgYWNw X2RtYV9zdG9wKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgdTggY2hfbnVtKQorewor CWludCBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOworCXUzMiBkbWFfY3RybDsKKwl1MzIg ZG1hX2NoX3N0czsKKwl1MzIgZGVsYXlfdGltZSA9IEFDUF9ETUFfUkVTRVRfVElNRTsKKwlzdHJ1 Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilh Y3BfZGV2OworCisJaWYgKGFjcF9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWRt YV9jdHJsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkgICAg IG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOworCisJLyogY2xlYXIgdGhlIGRtYSBjb250cm9s IHJlZ2lzdGVyIGZpZWxkcyBiZWZvcmUgd3JpdGluZyB6ZXJvCisJICogaW4gcmVzZXQgYml0CisJ ICovCisJZG1hX2N0cmwgJj0gfkFDUF9ETUFfQ05UTF8wX19ETUFDaFJ1bl9NQVNLOworCWRtYV9j dHJsICY9IH5BQ1BfRE1BX0NOVExfMF9fRE1BQ2hJT0NFbl9NQVNLOworCisJY2dzX3dyaXRlX3Jl Z2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkgICAobW1BQ1BfRE1BX0NOVExfMCArIGNo X251bSksIGRtYV9jdHJsKTsKKwlkbWFfY2hfc3RzID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3By di0+Y2dzX2RldmljZSwgbW1BQ1BfRE1BX0NIX1NUUyk7CisKKwlpZiAoZG1hX2NoX3N0cyAmIEJJ VChjaF9udW0pKSB7CisJCS8qIHNldCB0aGUgcmVzZXQgYml0IGZvciB0aGlzIGNoYW5uZWwKKwkJ ICogdG8gc3RvcCB0aGUgZG1hIHRyYW5zZmVyICovCisJCWRtYV9jdHJsIHw9IEFDUF9ETUFfQ05U TF8wX19ETUFDaFJzdF9NQVNLOworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rl dmljZSwKKwkJCQkgICAobW1BQ1BfRE1BX0NOVExfMCArIGNoX251bSksIGRtYV9jdHJsKTsKKwl9 CisKKwkvKiBpZiBjaGFubmVsIHRyYW5zZmVyIGlzIG5vdCBzdG9wcGVkIHdpdGggaW4gdGltZSBk ZWxheQorCSAqIHJldHVybiB0aGlzIHN0YXR1cyAqLworCXN0YXR1cyA9IC1FQlVTWTsKKworCS8q IGNoZWNrIHRoZSBjaGFubmVsIHN0YXR1cyBiaXQgZm9yIHNvbWUgdGltZSBhbmQgcmV0dXJuIHRo ZSBzdGF0dXMgKi8KKwl3aGlsZSAoMCA8IGRlbGF5X3RpbWUpIHsKKwkJZG1hX2NoX3N0cyA9IGNn c19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCSAgICAgICBtbUFDUF9E TUFfQ0hfU1RTKTsKKwkJaWYgKCEoZG1hX2NoX3N0cyAmIEJJVChjaF9udW0pKSkgeworCQkJLyog Y2xlYXIgdGhlIHJlc2V0IGZsYWcgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0b3BwaW5nCisJCQkgICB0 aGUgZG1hIHRyYW5zZmVyIGFuZCBicmVhayBmcm9tIHRoZSBsb29wICovCisJCQlkbWFfY3RybCAm PSB+QUNQX0RNQV9DTlRMXzBfX0RNQUNoUnN0X01BU0s7CisKKwkJCWNnc193cml0ZV9yZWdpc3Rl cihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkgICAobW1BQ1BfRE1BX0NOVExfMCArIGNoX251 bSksCisJCQkJCSAgIGRtYV9jdHJsKTsKKwkJCXN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCQkJ YnJlYWs7CisJCX0KKwkJZGVsYXlfdGltZS0tOworCX0KKworCWlmICgoY2hfbnVtID09IEFDUF9U T19JMlNfRE1BX0NIX05VTSkgfHwKKwkgICAgKGNoX251bSA9PSBJMlNfVE9fQUNQX0RNQV9DSF9O VU0pKSB7CisJCWNnc19pcnFfcHV0KGFjcF9wcnYtPmNnc19kZXZpY2UsIFZJU0xBTkRTMzBfSVZf U1JDSURfQUNQLCAwKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBBQ1AgRE1BIGly cSBoYW5kbGVyIHJvdXRpbmUgZm9yIHBsYXliYWNrLCBjYXB0dXJlIHVzZWNhc2VzICovCitzdGF0 aWMgaW50IGRtYV9pcnFfaGFuZGxlcih2b2lkICpwcnZfZGF0YSkKK3sKKwl1MTYgcGxheV9hY3Bf aTJzX2ludHIsIGNhcF9pMnNfYWNwX2ludHIsIGNhcF9hY3Bfc3lzcmFtX2ludHI7CisJdTE2IGRz Y3JfaWR4LCBpbnRyX2ZsYWc7CisJdTMyIGV4dF9pbnRyX3N0YXR1czsKKwlpbnQgcHJpb3JpdHlf bGV2ZWwgPSAweDA7CisJaW50IGRtYV90cmFuc2Zlcl9zdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNT RlVMOworCXN0cnVjdCBhY3BfaXJxX3BydiAqaWRhdGEgPSBwcnZfZGF0YTsKKwlzdHJ1Y3QgYW1k X2FjcF9kZXZpY2UgKmFjcF9kZXYgPSBpZGF0YS0+YWNwX2RldjsKKwlzdHJ1Y3QgYW1kX2FjcF9w cml2YXRlICphY3BfcHJ2ID0gKHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUgKilhY3BfZGV2OworCisJ aW50cl9mbGFnID0gYWNwX2dldF9pbnRyX2ZsYWcoYWNwX2Rldik7CisKKwlwbGF5X2FjcF9pMnNf aW50ciA9IChpbnRyX2ZsYWcgJiBCSVQoQUNQX1RPX0kyU19ETUFfQ0hfTlVNKSk7CisJY2FwX2ky c19hY3BfaW50ciA9IChpbnRyX2ZsYWcgJiBCSVQoSTJTX1RPX0FDUF9ETUFfQ0hfTlVNKSk7CisJ Y2FwX2FjcF9zeXNyYW1faW50ciA9IChpbnRyX2ZsYWcgJiBCSVQoQUNQX1RPX1NZU1JBTV9DSF9O VU0pKTsKKworCWlmICghcGxheV9hY3BfaTJzX2ludHIgJiYgIWNhcF9pMnNfYWNwX2ludHIgJiYg IWNhcF9hY3Bfc3lzcmFtX2ludHIpIHsKKwkJLyogV2UgcmVnaXN0ZXJlZCBmb3IgRE1BIEludGVy cnVwdC1Pbi1Db21wbGV0ZSBpbnRlcnJ1cHRzIG9ubHkuCisJCSAqIElmIHdlIGhpdCBoZXJlLCBs b2cgaXQgYW5kIHJldHVybi4gKi8KKwkJZXh0X2ludHJfc3RhdHVzID0gY2dzX3JlYWRfcmVnaXN0 ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJICAgIG1tQUNQX0VYVEVSTkFMX0lOVFJfU1RB VCk7CisJCXByX2luZm8oIkFDUDogTm90IGEgRE1BIElPQyBpcnE6ICV4XG4iLCBleHRfaW50cl9z dGF0dXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGxheV9hY3BfaTJzX2ludHIpIHsKKwkJ ZHNjcl9pZHggPSBnZXRfZHNjcl9pZHgoYWNwX2RldiwgU1RSRUFNX1BMQVlCQUNLKTsKKwkJY29u ZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfZGV2LCBTWVNSQU1fVE9fQUNQX0NIX05VTSwgZHNjcl9p ZHgsCisJCQkJICAgICAgIDEsIHByaW9yaXR5X2xldmVsKTsKKwkJZG1hX3RyYW5zZmVyX3N0YXR1 cyA9IGFjcF9kbWFfc3RhcnQoYWNwX2RldiwKKwkJCQkJCSAgICBTWVNSQU1fVE9fQUNQX0NIX05V TSwKKwkJCQkJCSAgICBmYWxzZSk7CisJCWlkYXRhLT5zZXRfZWxhcHNlZChpZGF0YS0+ZGV2LCAx LCAwKTsKKworCQlhY3BfZXh0X3N0YXRfY2xlYXJfZG1haW9jKGFjcF9kZXYsIEFDUF9UT19JMlNf RE1BX0NIX05VTSk7CisJfQorCisJaWYgKGNhcF9pMnNfYWNwX2ludHIpIHsKKwkJZHNjcl9pZHgg PSBnZXRfZHNjcl9pZHgoYWNwX2RldiwgU1RSRUFNX0NBUFRVUkUpOworCQljb25maWdfYWNwX2Rt YV9jaGFubmVsKGFjcF9kZXYsIEFDUF9UT19TWVNSQU1fQ0hfTlVNLCBkc2NyX2lkeCwKKwkJCQkg ICAgICAgMSwgcHJpb3JpdHlfbGV2ZWwpOworCQlkbWFfdHJhbnNmZXJfc3RhdHVzID0gYWNwX2Rt YV9zdGFydChhY3BfZGV2LAorCQkJCQkJICAgIEFDUF9UT19TWVNSQU1fQ0hfTlVNLAorCQkJCQkJ ICAgIGZhbHNlKTsKKworCQlhY3BfZXh0X3N0YXRfY2xlYXJfZG1haW9jKGFjcF9kZXYsIEkyU19U T19BQ1BfRE1BX0NIX05VTSk7CisJfQorCisJaWYgKGNhcF9hY3Bfc3lzcmFtX2ludHIpIHsKKwkJ aWRhdGEtPnNldF9lbGFwc2VkKGlkYXRhLT5kZXYsIDAsIDEpOworCQlhY3BfZXh0X3N0YXRfY2xl YXJfZG1haW9jKGFjcF9kZXYsIEFDUF9UT19TWVNSQU1fQ0hfTlVNKTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBpcnFfaGFuZGxlcih2b2lkICpwcml2YXRlX2RhdGEsIHVuc2ln bmVkIHNyY19pZCwKKwkJICAgICAgIGNvbnN0IHVpbnQzMl90ICppdl9lbnRyeSkKK3sKKwlpZiAo c3JjX2lkID09IFZJU0xBTkRTMzBfSVZfU1JDSURfQUNQKQorCQlyZXR1cm4gZG1hX2lycV9oYW5k bGVyKHByaXZhdGVfZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qIHBvd2VyIG9m ZiBhIHRpbGUvYmxvY2sgd2l0aGluIEFDUCAqLworc3RhdGljIHZvaWQgYWNwX3N1c3BlbmRfdGls ZShzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2LCBpbnQgdGlsZSkKK3sKKwl1MzIgdmFs ID0gMDsKKwl1MzIgdGltZW91dCA9IDA7CisKKwlpZiAoKHRpbGUgIDwgQUNQX1RJTEVfUDEpIHx8 ICh0aWxlID4gQUNQX1RJTEVfRFNQMikpIHsKKwkJcHJfZXJyKCIgJXMgOiBJbnZhbGlkIEFDUCBw b3dlciB0aWxlIGluZGV4XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl2YWwgPSBj Z3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQltbUFDUF9QR0ZTTV9S RUFEX1JFR18wICsgdGlsZSk7CisJdmFsICY9IEFDUF9USUxFX09OX01BU0s7CisKKwlpZiAodmFs ID09IDB4MCkgeworCQl2YWwgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNl LAorCQkJCQltbUFDUF9QR0ZTTV9SRVRBSU5fUkVHKTsKKwkJdmFsID0gdmFsIHwgKDEgPDwgdGls ZSk7CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9QR0ZT TV9SRVRBSU5fUkVHLAorCQkJCQkJCXZhbCk7CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2 LT5jZ3NfZGV2aWNlLAltbUFDUF9QR0ZTTV9DT05GSUdfUkVHLAorCQkJCQkJCTB4NTAwICsgdGls ZSk7CisKKwkJdGltZW91dCA9IEFDUF9TT0ZUX1JFU0VUX0RPTkVfVElNRV9PVVRfVkFMVUU7CisJ CXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYt PmNnc19kZXZpY2UsCisJCQkJCW1tQUNQX1BHRlNNX1JFQURfUkVHXzAgKyB0aWxlKTsKKwkJCXZh bCA9IHZhbCAmIEFDUF9USUxFX09OX01BU0s7CisJCQlpZiAodmFsID09IEFDUF9USUxFX09GRl9N QVNLKQorCQkJCWJyZWFrOworCQl9CisKKwkJdmFsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3By di0+Y2dzX2RldmljZSwKKwkJCQkJbW1BQ1BfUEdGU01fUkVUQUlOX1JFRyk7CisKKwkJdmFsIHw9 IEFDUF9USUxFX09GRl9SRVRBSU5fUkVHX01BU0s7CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3Bf cHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9QR0ZTTV9SRVRBSU5fUkVHLAorCQkJCQkJCXZhbCk7CisJ fQorCit9CisKKy8qIHBvd2VyIG9uIGEgdGlsZS9ibG9jayB3aXRoaW4gQUNQICovCitzdGF0aWMg dm9pZCBhY3BfcmVzdW1lX3RpbGUoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiwgaW50 IHRpbGUpCit7CisJdTMyIHZhbCA9IDA7CisJdTMyIHRpbWVvdXQgPSAwOworCisJaWYgKCh0aWxl ICA8IEFDUF9USUxFX1AxKSB8fCAodGlsZSA+IEFDUF9USUxFX0RTUDIpKSB7CisJCXByX2Vycigi ICVzIDogSW52YWxpZCBBQ1AgcG93ZXIgdGlsZSBpbmRleFxuIiwgX19mdW5jX18pOworCQlyZXR1 cm47CisJfQorCisJdmFsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwK KwkJCQkJbW1BQ1BfUEdGU01fUkVBRF9SRUdfMCArIHRpbGUpOworCXZhbCA9IHZhbCAmIEFDUF9U SUxFX09OX01BU0s7CisKKwlpZiAodmFsICE9IDB4MCkgeworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIo YWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfUEdGU01fQ09ORklHX1JFRywKKwkJCQkJCQkweDYw MCArIHRpbGUpOworCQl0aW1lb3V0ID0gQUNQX1NPRlRfUkVTRVRfRE9ORV9USU1FX09VVF9WQUxV RTsKKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJdmFsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNw X3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJbW1BQ1BfUEdGU01fUkVBRF9SRUdfMCArIHRpbGUpOwor CQkJdmFsID0gdmFsICYgQUNQX1RJTEVfT05fTUFTSzsKKwkJCWlmICh2YWwgPT0gMHgwKQorCQkJ CWJyZWFrOworCQl9CisJCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZp Y2UsCisJCQkJCW1tQUNQX1BHRlNNX1JFVEFJTl9SRUcpOworCQlpZiAodGlsZSA9PSBBQ1BfVElM RV9QMSkKKwkJCXZhbCA9IHZhbCAmIChBQ1BfVElMRV9QMV9NQVNLKTsKKwkJZWxzZSBpZiAodGls ZSA9PSBBQ1BfVElMRV9QMikKKwkJCXZhbCA9IHZhbCAmIChBQ1BfVElMRV9QMl9NQVNLKTsKKwor CQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfUEdGU01fUkVU QUlOX1JFRywKKwkJCQkJCQl2YWwpOworCX0KK30KKworLyogU2h1dGRvd24gdW51c2VkIFNSQU0g bWVtb3J5IGJhbmtzIGluIEFDUCBJUCAqLworc3RhdGljIHZvaWQgYWNwX3R1cm5vZmZfc3JhbV9i YW5rcyhzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2KQoreworCS8qIEJhbmsgMCA6IHVz ZWQgZm9yIERNQSBkZXNjcmlwdG9ycworCSAqIEJhbmsgMSB0byA0IDogdXNlZCBmb3IgcGxheWJh Y2sKKwkgKiBCYW5rIDUgdG8gOCA6IHVzZWQgZm9yIGNhcHR1cmUKKwkgKiBFYWNoIGJhbmsgaXMg OGtCIGFuZCBtYXggc2l6ZSBhbGxvY2F0ZWQgZm9yIHBsYXliYWNrLyBjYXB0dXJlIGlzCisJICog MTZrQihtYXggcGVyaW9kIHNpemUpICogMihtYXggcGVyaW9kcykgcmVzZXJ2ZWQgZm9yIHBsYXli YWNrL2NhcHR1cmUKKwkgKiBpbiBBTFNBIGRyaXZlcgorCSAqIFR1cm4gb2ZmIGFsbCBTUkFNIGJh bmtzIGV4Y2VwdCBhYm92ZSBiYW5rcyBkdXJpbmcgcGxheWJhY2svY2FwdHVyZQorCSAqLworCXUz MiB2YWwsIGJhbms7CisKKwlmb3IgKGJhbmsgPSA5OyBiYW5rIDwgMzI7IGJhbmsrKykgeworCQl2 YWwgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQltbUFDUF9N RU1fU0hVVF9ET1dOX1JFUV9MTyk7CisJCWlmICghKHZhbCAmICgxIDw8IGJhbmspKSkgeworCQkJ dmFsIHw9IDEgPDwgYmFuazsKKwkJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2 aWNlLAorCQkJCQltbUFDUF9NRU1fU0hVVF9ET1dOX1JFUV9MTywgdmFsKTsKKwkJCS8qIElmIEFD UF9NRU1fU0hVVF9ET1dOX1NUU19MTyBpcyAweEZGRkZGRkZGLCB0aGVuCisJCQkgKiBzaHV0ZG93 biBzZXF1ZW5jZSBpcyBjb21wbGV0ZS4gKi8KKwkJCWRvIHsKKwkJCQl2YWwgPSBjZ3NfcmVhZF9y ZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkJbW1BQ1BfTUVNX1NIVVRfRE9XTl9T VFNfTE8pOworCQkJfSB3aGlsZSAodmFsICE9IDB4RkZGRkZGRkYpOworCQl9CisJfQorCisJZm9y IChiYW5rID0gMzI7IGJhbmsgPCA0ODsgYmFuaysrKSB7CisJCXZhbCA9IGNnc19yZWFkX3JlZ2lz dGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkJCW1tQUNQX01FTV9TSFVUX0RPV05fUkVRX0hJ KTsKKwkJaWYgKCEodmFsICYgKDEgPDwgKGJhbmsgLSAzMikpKSkgeworCQkJdmFsIHw9IDEgPDwg KGJhbmsgLSAzMik7CisJCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwK KwkJCQkJbW1BQ1BfTUVNX1NIVVRfRE9XTl9SRVFfSEksIHZhbCk7CisJCQkvKiBJZiBBQ1BfTUVN X1NIVVRfRE9XTl9TVFNfSEkgaXMgMHgwMDAwRkZGRiwgdGhlbgorCQkJICogc2h1dGRvd24gc2Vx dWVuY2UgaXMgY29tcGxldGUuICovCisJCQlkbyB7CisJCQkJdmFsID0gY2dzX3JlYWRfcmVnaXN0 ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJCW1tQUNQX01FTV9TSFVUX0RPV05fU1RTX0hJ KTsKKwkJCX0gd2hpbGUgKHZhbCAhPSAweDAwMDBGRkZGKTsKKwkJfQorCX0KK30KKworLyogSW5p dGlhbGl6ZSBhbmQgYnJpbmcgQUNQIGhhcmR3YXJlIHRvIGRlZmF1bHQgc3RhdGUuICovCitzdGF0 aWMgdm9pZCBhY3BfaW5pdChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2KQoreworCXUz MiB2YWw7CisJdTMyIHRpbWVvdXRfdmFsdWU7CisKKwkvKiBBc3NlcnQgU29mdCByZXNldCBvZiBB Q1AgKi8KKwl2YWwgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLCBtbUFD UF9TT0ZUX1JFU0VUKTsKKworCXZhbCB8PSBBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkX01B U0s7CisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsCisJCQkgICBtbUFD UF9TT0ZUX1JFU0VULCB2YWwpOworCisJdGltZW91dF92YWx1ZSA9IEFDUF9TT0ZUX1JFU0VUX0RP TkVfVElNRV9PVVRfVkFMVUU7CisJd2hpbGUgKHRpbWVvdXRfdmFsdWUtLSkgeworCQl2YWwgPSBj Z3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLCBtbUFDUF9TT0ZUX1JFU0VUKTsK KwkJaWYgKEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWREb25lX01BU0sgPT0KKwkJICAgICh2 YWwgJiBBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkRG9uZV9NQVNLKSkKKwkJCWJyZWFrOwor CX0KKworCS8qIEVuYWJsZSBjbG9jayB0byBBQ1AgYW5kIHdhaXQgdW50aWwgdGhlIGNsb2NrIGlz IGVuYWJsZWQgKi8KKwl2YWwgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNl LCBtbUFDUF9DT05UUk9MKTsKKwl2YWwgPSB2YWwgfCBBQ1BfQ09OVFJPTF9fQ2xrRW5fTUFTSzsK KwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfQ09OVFJPTCwg dmFsKTsKKworCXRpbWVvdXRfdmFsdWUgPSBBQ1BfQ0xPQ0tfRU5fVElNRV9PVVRfVkFMVUU7CisK Kwl3aGlsZSAodGltZW91dF92YWx1ZS0tKSB7CisJCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFj cF9wcnYtPmNnc19kZXZpY2UsIG1tQUNQX1NUQVRVUyk7CisJCWlmICh2YWwgJiAodTMyKSAweDEp CisJCQlicmVhazsKKwkJdWRlbGF5KDEwMCk7CisJfQorCisJLyogRGVhc3NlcnQgdGhlIFNPRlQg UkVTRVQgZmxhZ3MgKi8KKwl2YWwgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2 aWNlLCBtbUFDUF9TT0ZUX1JFU0VUKTsKKwl2YWwgJj0gfkFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVz ZXRBdWRfTUFTSzsKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1B Q1BfU09GVF9SRVNFVCwgdmFsKTsKKworCS8qIGluaXRpYWlsaXppbmcgR2FybGljIENvbnRyb2wg REFHQiByZWdpc3RlciAqLworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNl LAltbUFDUF9BWEkyREFHQl9PTklPTl9DTlRMLAorCQkJICAgT05JT05fQ05UTF9ERUZBVUxUKTsK KworCS8qIGluaXRpYWlsaXppbmcgT25pb24gQ29udHJvbCBEQUdCIHJlZ2lzdGVycyAqLworCWNn c193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9BWEkyREFHQl9HQVJM SUNfQ05UTCwKKwkJCSAgIEdBUkxJQ19DTlRMX0RFRkFVTFQpOworCisJYWNwX2RtYV9kZXNjcl9p bml0KGFjcF9wcnYpOworCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2Us CW1tQUNQX0RNQV9ERVNDX0JBU0VfQUREUiwKKwkJCSAgIEFDUF9TUkFNX0JBU0VfQUREUkVTUyk7 CisKKwkvKiBOdW0gb2YgZGVzY3JpcHRpb3JzIGluIFNSQU0gMHg0LCBtZWFucyAyNTYgZGVzY3Jp cHRvcnM7KDY0ICogNCkgKi8KKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rldmlj ZSwgbW1BQ1BfRE1BX0RFU0NfTUFYX05VTV9EU0NSLAorCQkJICAgMHg0KTsKKworCWNnc193cml0 ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9FWFRFUk5BTF9JTlRSX0NOVEws CisJCQkgICBBQ1BfRVhURVJOQUxfSU5UUl9DTlRMX19ETUFJT0NNYXNrX01BU0spOworCisJYWNw X3R1cm5vZmZfc3JhbV9iYW5rcyhhY3BfcHJ2KTsKKwlwcl9pbmZvKCJBQ1A6IEluaXRpYWxpemVk LlxuIik7CisKK30KKworc3RhdGljIGludCBhY3BfaHdfaW5pdChzdHJ1Y3QgYW1kX2FjcF9kZXZp Y2UgKmFjcF9kZXYsIHZvaWQgKmlwcnYpCit7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNw X3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWFjcF9pbml0KGFj cF9wcnYpOworCisJY2dzX2FkZF9pcnFfc291cmNlKGFjcF9wcnYtPmNnc19kZXZpY2UsIFZJU0xB TkRTMzBfSVZfU1JDSURfQUNQLCAxLAorCQkJICAgaXJxX3NldF9zb3VyY2UsIGlycV9oYW5kbGVy LCBpcHJ2KTsKKworCS8qIERpc2FibGUgRFNQcyB3aGljaCBhcmUgbm90IHVzZWQgKi8KKwlhY3Bf c3VzcGVuZF90aWxlKGFjcF9wcnYsIEFDUF9USUxFX0RTUDApOworCWFjcF9zdXNwZW5kX3RpbGUo YWNwX3BydiwgQUNQX1RJTEVfRFNQMSk7CisJYWNwX3N1c3BlbmRfdGlsZShhY3BfcHJ2LCBBQ1Bf VElMRV9EU1AyKTsKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworLyogRGVpbnRpYWxp emUgQUNQICovCitzdGF0aWMgdm9pZCBhY3BfZGVpbml0KHN0cnVjdCBhbWRfYWNwX3ByaXZhdGUg KmFjcF9wcnYpCit7CisJdTMyIHZhbDsKKwl1MzIgdGltZW91dF92YWx1ZTsKKworCS8qIEFzc2Vy dCBTb2Z0IHJlc2V0IG9mIEFDUCAqLworCXZhbCA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYt PmNnc19kZXZpY2UsIG1tQUNQX1NPRlRfUkVTRVQpOworCisJdmFsIHw9IEFDUF9TT0ZUX1JFU0VU X19Tb2Z0UmVzZXRBdWRfTUFTSzsKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2Rl dmljZSwJbW1BQ1BfU09GVF9SRVNFVCwgdmFsKTsKKworCXRpbWVvdXRfdmFsdWUgPSBBQ1BfU09G VF9SRVNFVF9ET05FX1RJTUVfT1VUX1ZBTFVFOworCXdoaWxlICh0aW1lb3V0X3ZhbHVlLS0pIHsK KwkJdmFsID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwgbW1BQ1BfU09G VF9SRVNFVCk7CisJCWlmIChBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkRG9uZV9NQVNLID09 CisJCSAgICAodmFsICYgQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldEF1ZERvbmVfTUFTSykpIHsK KwkJCWJyZWFrOworCSAgICB9CisJfQorCS8qKiBEaXNhYmxlIEFDUCBjbG9jayAqLworCXZhbCA9 IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsIG1tQUNQX0NPTlRST0wpOwor CXZhbCAmPSB+QUNQX0NPTlRST0xfX0Nsa0VuX01BU0s7CisJY2dzX3dyaXRlX3JlZ2lzdGVyKGFj cF9wcnYtPmNnc19kZXZpY2UsIG1tQUNQX0NPTlRST0wsIHZhbCk7CisKKwl0aW1lb3V0X3ZhbHVl ID0gQUNQX0NMT0NLX0VOX1RJTUVfT1VUX1ZBTFVFOworCisJd2hpbGUgKHRpbWVvdXRfdmFsdWUt LSkgeworCQl2YWwgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLCBtbUFD UF9TVEFUVVMpOworCQlpZiAoISh2YWwgJiAodTMyKSAweDEpKQorCQkJYnJlYWs7CisJCXVkZWxh eSgxMDApOworCX0KKworCXByX2luZm8oIkFDUDogRGUtSW5pdGlhbGl6ZWQuXG4iKTsKK30KKwor c3RhdGljIHZvaWQgYWNwX2h3X2RlaW5pdChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYp Cit7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9w cml2YXRlICopYWNwX2RldjsKKworCWFjcF9kZWluaXQoYWNwX3Bydik7Cit9CisKKy8qIFVwZGF0 ZSBETUEgcG9zdGlvbiBpbiBhdWRpbyByaW5nIGJ1ZmZlciBhdCBwZXJpb2QgbGV2ZWwgZ3JhbnVs YXJpdHkuCisgKiBUaGlzIHdpbGwgYmUgdXNlZCBieSBBTFNBIFBDTSBkcml2ZXIKKyAqLworc3Rh dGljIHUzMiBhY3BfdXBkYXRlX2RtYV9wb2ludGVyKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNw X2RldiwgaW50IGRpcmVjdGlvbiwKKwkJCQkgIHUzMiBwZXJpb2Rfc2l6ZSkKK3sKKwl1MzIgcG9z OworCXUxNiBkc2NyOworCXUzMiBtdWw7CisJdTMyIGRtYV9jb25maWc7CisJc3RydWN0IGFtZF9h Y3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsK KworCXBvcyA9IDA7CisKKwlpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZQkFDSykgeworCQlk c2NyID0gY2dzX3JlYWRfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwKKwkJCQkJIG1tQUNQ X0RNQV9DVVJfRFNDUl8xMyk7CisKKwkJbXVsID0gKGRzY3IgPT0gUExBWUJBQ0tfU1RBUlRfRE1B X0RFU0NSX0NIMTMpID8gMCA6IDE7CisJCXBvcyA9ICAobXVsICogcGVyaW9kX3NpemUpOworCisJ fSBlbHNlIHsKKwkJZG1hX2NvbmZpZyA9IGNnc19yZWFkX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19k ZXZpY2UsCisJCQkJCSAgICAgICBtbUFDUF9ETUFfQ05UTF8xNCk7CisJCWlmIChkbWFfY29uZmln ICE9IDApIHsKKwkJCWRzY3IgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNl LAorCQkJCQkgbW1BQ1BfRE1BX0NVUl9EU0NSXzE0KTsKKwkJCW11bCA9IChkc2NyID09IENBUFRV UkVfU1RBUlRfRE1BX0RFU0NSX0NIMTQpID8gMSA6IDI7CisJCQlwb3MgPSAobXVsICogcGVyaW9k X3NpemUpOworCQl9CisKKwkJaWYgKHBvcyA+PSAoMiAqIHBlcmlvZF9zaXplKSkKKwkJCXBvcyA9 IDA7CisKKwl9CisJcmV0dXJuIHBvczsKK30KKworLyogV2FpdCBmb3IgaW5pdGlhbCBidWZmZXJp bmcgdG8gY29tcGxldGUgaW4gSE9TVCB0byBTUkFNIERNQSBjaGFubmVsCisgKiBmb3IgcGxhYmFj ayB1c2VjYXNlCisgKi8KK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3ByZWJ1ZmZlcl9maW5pc2goc3Ry dWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2KQoreworCXUzMiBkbWFfY2hfc3RzOworCXUzMiBj aGFubmVsX21hc2sgPSBCSVQoU1lTUkFNX1RPX0FDUF9DSF9OVU0pOworCXN0cnVjdCBhbWRfYWNw X3ByaXZhdGUgKmFjcF9wcnYgPSAoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqKWFjcF9kZXY7CisK KwlkbyB7CisJCS8qIFJlYWQgdGhlIGNoYW5uZWwgc3RhdHVzIHRvIHBvbGwgZG1hIHRyYW5zZmVy IGNvbXBsZXRpb24KKwkJICogKFN5c3RlbSBSQU0gdG8gU1JBTSkKKwkJICogSW4gdGhpcyBjYXNl LCBpdCB3aWxsIGJlIHJ1bnRpbWUtPnN0YXJ0X3RocmVzaG9sZAorCQkgKiAoMiBBTFNBIHBlcmlv ZHMpIG9mIHRyYW5zZmVyLiBSZW5kZXJpbmcgc3RhcnRzIGFmdGVyIHRoaXMKKwkJICogdGhyZXNo b2xkIGlzIG1ldC4KKwkJICovCisJCWRtYV9jaF9zdHMgPSBjZ3NfcmVhZF9yZWdpc3RlcihhY3Bf cHJ2LT5jZ3NfZGV2aWNlLAorCQkJCQkgICAgICAgbW1BQ1BfRE1BX0NIX1NUUyk7CisJCXVkZWxh eSgyMCk7CisJfSB3aGlsZSAoZG1hX2NoX3N0cyAmIGNoYW5uZWxfbWFzayk7Cit9CisKK3N0YXRp YyB2b2lkIGkyc19yZXNldChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsIGludCBkaXJl Y3Rpb24pCit7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1k X2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWlmIChkaXJlY3Rpb24gPT0gU1RSRUFNX1BMQVlC QUNLKQorCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfSTJT U1BfVFhGRlIsIDEpOworCWVsc2UKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19k ZXZpY2UsCisJCQkJICAgbW1BQ1BfSTJTTUlDU1BfUlhGRlIsIDEpOworCit9CisKK3N0YXRpYyB2 b2lkIGkyc19zdGFydChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsIGludCBkaXJlY3Rp b24pCit7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNwX3BydiA9IChzdHJ1Y3QgYW1kX2Fj cF9wcml2YXRlICopYWNwX2RldjsKKworCWlmIChkaXJlY3Rpb24gPT0gU1RSRUFNX1BMQVlCQUNL KSB7CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9JMlNT UF9JRVIsIDEpOworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1B Q1BfSTJTU1BfSVRFUiwgMSk7CisKKwl9IGVsc2UgeworCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoYWNw X3Bydi0+Y2dzX2RldmljZSwgbW1BQ1BfSTJTTUlDU1BfSUVSLCAxKTsKKwkJY2dzX3dyaXRlX3Jl Z2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsIG1tQUNQX0kyU01JQ1NQX0lSRVIsIDEpOworCX0K KworCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9JMlNTUF9D RVIsIDEpOworfQorCitzdGF0aWMgdm9pZCBpMnNfc3RvcChzdHJ1Y3QgYW1kX2FjcF9kZXZpY2Ug KmFjcF9kZXYsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqYWNw X3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKworCWkyc19jbGVhcl9p cnFzKGFjcF9kZXYsIGRpcmVjdGlvbik7CisKKwlpZiAoZGlyZWN0aW9uID09IFNUUkVBTV9QTEFZ QkFDSykKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2UsIG1tQUNQX0ky U1NQX0lURVIsIDApOworCWVsc2UKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19k ZXZpY2UsCW1tQUNQX0kyU01JQ1NQX0lSRVIsIDApOworCisJaWYgKGRpcmVjdGlvbiA9PSBTVFJF QU1fUExBWUJBQ0spIHsKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGFjcF9wcnYtPmNnc19kZXZpY2Us CW1tQUNQX0kyU1NQX0NFUiwgMCk7CisJCWNnc193cml0ZV9yZWdpc3RlcihhY3BfcHJ2LT5jZ3Nf ZGV2aWNlLAltbUFDUF9JMlNTUF9JRVIsIDApOworCX0gZWxzZSB7CisJCWNnc193cml0ZV9yZWdp c3RlcihhY3BfcHJ2LT5jZ3NfZGV2aWNlLAltbUFDUF9JMlNNSUNTUF9DRVIsIDApOworCQljZ3Nf d3JpdGVfcmVnaXN0ZXIoYWNwX3Bydi0+Y2dzX2RldmljZSwJbW1BQ1BfSTJTTUlDU1BfSUVSLCAw KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9pMnMoc3RydWN0IGFtZF9hY3BfZGV2 aWNlICphY3BfZGV2LAorCQkJICBzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKmF1ZGlvX2Nv bmZpZykKK3sKKwlpMnNfZGlzYWJsZV9jaGFubmVscyhhY3BfZGV2LCBhdWRpb19jb25maWctPmRp cmVjdGlvbik7CisJY29uZmlndXJlX2kyc19zdHJlYW0oYWNwX2RldiwgYXVkaW9fY29uZmlnKTsK K30KKwordm9pZCBhbWRfYWNwX3BjbV9zdXNwZW5kKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNw X2RldikKK3sKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2OworCisJYWNwX3BydiA9 IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKwlhbWRfYWNwX3N1c3BlbmQoYWNw X3Bydik7Cit9CisKK3ZvaWQgYW1kX2FjcF9wY21fcmVzdW1lKHN0cnVjdCBhbWRfYWNwX2Rldmlj ZSAqYWNwX2RldikKK3sKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJ2OworCisJYWNw X3BydiA9IChzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICopYWNwX2RldjsKKwlhbWRfYWNwX3Jlc3Vt ZShhY3BfcHJ2KTsKK30KKworaW50IGFtZF9hY3BfaHdfaW5pdCh2b2lkICpjZ3NfZGV2aWNlLAor CQkgICAgdW5zaWduZWQgYWNwX3ZlcnNpb25fbWFqb3IsIHVuc2lnbmVkIGFjcF92ZXJzaW9uX21p bm9yLAorCQkgICAgc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSAqKmFjcF9wcml2YXRlKQoreworCXVu c2lnbmVkIGludCBhY3BfbW9kZSA9IEFDUF9NT0RFX0kyUzsKKworCWlmICgoYWNwX3ZlcnNpb25f bWFqb3IgPT0gMikgJiYgKGFjcF92ZXJzaW9uX21pbm9yID09IDIpKQorCQlhY3BfbW9kZSA9IGNn c19yZWFkX3JlZ2lzdGVyKGNnc19kZXZpY2UsCisJCQkJCW1tQUNQX0FaQUxJQV9JMlNfU0VMRUNU KTsKKworCWlmIChhY3BfbW9kZSAhPSBBQ1BfTU9ERV9JMlMpCisJCXJldHVybiAtRU5PREVWOwor CisJKmFjcF9wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFtZF9hY3BfcHJpdmF0ZSks IEdGUF9LRVJORUwpOworCWlmICgqYWNwX3ByaXZhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwkoKmFjcF9wcml2YXRlKS0+Y2dzX2RldmljZSA9IGNnc19kZXZpY2U7CisJKCphY3Bf cHJpdmF0ZSktPmFjcF92ZXJzaW9uX21ham9yID0gYWNwX3ZlcnNpb25fbWFqb3I7CisJKCphY3Bf cHJpdmF0ZSktPmFjcF92ZXJzaW9uX21pbm9yID0gYWNwX3ZlcnNpb25fbWlub3I7CisKKwkoKmFj cF9wcml2YXRlKS0+cHVibGljLmluaXQgPSBhY3BfaHdfaW5pdDsKKwkoKmFjcF9wcml2YXRlKS0+ cHVibGljLmZpbmkgPSBhY3BfaHdfZGVpbml0OworCSgqYWNwX3ByaXZhdGUpLT5wdWJsaWMuY29u ZmlnX2RtYSA9IGNvbmZpZ19hY3BfZG1hOworCSgqYWNwX3ByaXZhdGUpLT5wdWJsaWMuY29uZmln X2RtYV9jaGFubmVsID0gY29uZmlnX2FjcF9kbWFfY2hhbm5lbDsKKwkoKmFjcF9wcml2YXRlKS0+ cHVibGljLmRtYV9zdGFydCA9IGFjcF9kbWFfc3RhcnQ7CisJKCphY3BfcHJpdmF0ZSktPnB1Ymxp Yy5kbWFfc3RvcCA9IGFjcF9kbWFfc3RvcDsKKwkoKmFjcF9wcml2YXRlKS0+cHVibGljLnVwZGF0 ZV9kbWFfcG9pbnRlciA9IGFjcF91cGRhdGVfZG1hX3BvaW50ZXI7CisJKCphY3BfcHJpdmF0ZSkt PnB1YmxpYy5wcmVidWZmZXJfYXVkaW8gPSB3YWl0X2Zvcl9wcmVidWZmZXJfZmluaXNoOworCisJ KCphY3BfcHJpdmF0ZSktPnB1YmxpYy5pMnNfcmVzZXQgPSBpMnNfcmVzZXQ7CisJKCphY3BfcHJp dmF0ZSktPnB1YmxpYy5jb25maWdfaTJzID0gY29uZmlndXJlX2kyczsKKwkoKmFjcF9wcml2YXRl KS0+cHVibGljLmkyc19zdGFydCA9IGkyc19zdGFydDsKKwkoKmFjcF9wcml2YXRlKS0+cHVibGlj Lmkyc19zdG9wID0gaTJzX3N0b3A7CisKKwkoKmFjcF9wcml2YXRlKS0+cHVibGljLmFjcF9zdXNw ZW5kID0gYW1kX2FjcF9wY21fc3VzcGVuZDsKKwkoKmFjcF9wcml2YXRlKS0+cHVibGljLmFjcF9y ZXN1bWUgPSBhbWRfYWNwX3BjbV9yZXN1bWU7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFtZF9h Y3BfaHdfZmluaShzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICphY3BfcHJpdmF0ZSkKK3sKKwlrZnJl ZShhY3BfcHJpdmF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYW1kX2FjcF9zdXNwZW5kKHN0 cnVjdCBhbWRfYWNwX3ByaXZhdGUgKmFjcF9wcml2YXRlKQoreworCWFjcF9zdXNwZW5kX3RpbGUo YWNwX3ByaXZhdGUsIEFDUF9USUxFX1AyKTsKKwlhY3Bfc3VzcGVuZF90aWxlKGFjcF9wcml2YXRl LCBBQ1BfVElMRV9QMSk7Cit9CisKK3ZvaWQgYW1kX2FjcF9yZXN1bWUoc3RydWN0IGFtZF9hY3Bf cHJpdmF0ZSAqYWNwX3ByaXZhdGUpCit7CisJYWNwX3Jlc3VtZV90aWxlKGFjcF9wcml2YXRlLCBB Q1BfVElMRV9QMSk7CisJYWNwX3Jlc3VtZV90aWxlKGFjcF9wcml2YXRlLCBBQ1BfVElMRV9QMik7 CisKKwlhY3BfaW5pdChhY3BfcHJpdmF0ZSk7CisKKwkvKiBEaXNhYmxlIERTUHMgd2hpY2ggYXJl IG5vdCBnb2luZyB0byBiZSB1c2VkICovCisJYWNwX3N1c3BlbmRfdGlsZShhY3BfcHJpdmF0ZSwg QUNQX1RJTEVfRFNQMCk7CisJYWNwX3N1c3BlbmRfdGlsZShhY3BfcHJpdmF0ZSwgQUNQX1RJTEVf RFNQMSk7CisJYWNwX3N1c3BlbmRfdGlsZShhY3BfcHJpdmF0ZSwgQUNQX1RJTEVfRFNQMik7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9hY3BfaHcuaCBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYWNwL2FjcF9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmUzYTEwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FjcC9h Y3BfaHcuaApAQCAtMCwwICsxLDkxIEBACisjaWZuZGVmIF9fQUNQX0hXX0gKKyNkZWZpbmUgX19B Q1BfSFdfSAorCisjZGVmaW5lIEFDUF9NT0RFX0kyUwkJCQkwCisjZGVmaW5lIEFDUF9NT0RFX0Fa CQkJCTEKKworI2RlZmluZSBESVNBQkxFCQkJCQkwCisjZGVmaW5lIEVOQUJMRQkJCQkJMQorCisj ZGVmaW5lIFBBR0VfU0laRV80SwkJCQk0MDk2CisjZGVmaW5lIFBBR0VfU0laRV80S19FTkFCTEUJ CQkweDAyCisKKyNkZWZpbmUgUExBWUJBQ0tfUFRFX09GRlNFVAkJCTEwCisjZGVmaW5lIENBUFRV UkVfUFRFX09GRlNFVAkJCTAKKworI2RlZmluZSBHQVJMSUNfQ05UTF9ERUZBVUxUCQkJMHgwMDAw MEZCNAorI2RlZmluZSBPTklPTl9DTlRMX0RFRkFVTFQJCQkweDAwMDAwRkI0CisKKyNkZWZpbmUg QUNQX1BIWVNJQ0FMX0JBU0UJCQkweDE0MDAwCisKKy8qIFBsYXliYWNrIFNSQU0gYWRkcmVzcyAo YXMgYSBkZXN0aW5hdGlvbiBpbiBkbWEgZGVzY3JpcHRvcikgKi8KKyNkZWZpbmUgQUNQX1NIQVJF RF9SQU1fQkFOS18xX0FERFJFU1MJCTB4NDAwMjAwMAorCisvKiBDYXB0dXJlIFNSQU0gYWRkcmVz cyAoYXMgYSBzb3VyY2UgaW4gZG1hIGRlc2NyaXB0b3IpICovCisjZGVmaW5lIEFDUF9TSEFSRURf UkFNX0JBTktfNV9BRERSRVNTCQkweDQwMEEwMDAKKworI2RlZmluZSBBQ1BfRE1BX1JFU0VUX1RJ TUUJCQkxMDAwMAorI2RlZmluZSBBQ1BfQ0xPQ0tfRU5fVElNRV9PVVRfVkFMVUUJCTB4MDAwMDAw RkYKKyNkZWZpbmUgQUNQX1NPRlRfUkVTRVRfRE9ORV9USU1FX09VVF9WQUxVRQkweDAwMDAwMEZG CisjZGVmaW5lIEFDUF9ETUFfQ09NUExFVEVfVElNRV9PVVRfVkFMVUUJCTB4MDAwMDAwRkYKKwor I2RlZmluZSBBQ1BfU1JBTV9CQVNFX0FERFJFU1MJCQkweDQwMDAwMDAKKyNkZWZpbmUgQUNQX0RB R0JfR1JQX1NSQU1fQkFTRV9BRERSRVNTCQkweDQwMDEwMDAKKyNkZWZpbmUgQUNQX0RBR0JfR1JQ X1NSQk1fU1JBTV9CQVNFX09GRlNFVAkweDEwMDAKKyNkZWZpbmUgQUNQX0lOVEVSTkFMX0FQRVJU VVJFX1dJTkRPV18wX0FERFJFU1MJMHgwMDAwMDAwMAorI2RlZmluZSBBQ1BfSU5URVJOQUxfQVBF UlRVUkVfV0lORE9XXzRfQUREUkVTUwkweDAxODAwMDAwCisKKyNkZWZpbmUgVE9fQUNQX0kyU18x ICAgMHgyCisjZGVmaW5lIFRPX0FDUF9JMlNfMiAgIDB4NAorI2RlZmluZSBGUk9NX0FDUF9JMlNf MSAweGEKKyNkZWZpbmUgRlJPTV9BQ1BfSTJTXzIgMHhiCisKKyNkZWZpbmUgQUNQX1RJTEVfT05f TUFTSyAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEFDUF9USUxFX09GRl9NQVNLICAgICAg ICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BfVElMRV9PTl9SRVRBSU5fUkVHX01BU0sgICAgIDB4 MWYKKyNkZWZpbmUgQUNQX1RJTEVfT0ZGX1JFVEFJTl9SRUdfTUFTSyAgICAweDIwCisKKyNkZWZp bmUgQUNQX1RJTEVfUDFfTUFTSyAgICAgICAgICAgICAgICAweDNlCisjZGVmaW5lIEFDUF9USUxF X1AyX01BU0sgICAgICAgICAgICAgICAgMHgzZAorI2RlZmluZSBBQ1BfVElMRV9EU1AwX01BU0sg ICAgICAgICAgICAgIDB4M2IKKyNkZWZpbmUgQUNQX1RJTEVfRFNQMV9NQVNLICAgICAgICAgICAg ICAweDM3CisjZGVmaW5lIEFDUF9USUxFX0RTUDJfTUFTSyAgICAgICAgICAgICAgMHgyZgorCitl bnVtIHsKKwlBQ1BfVElMRV9QMSA9IDAsCisJQUNQX1RJTEVfUDIsCisJQUNQX1RJTEVfRFNQMCwK KwlBQ1BfVElMRV9EU1AxLAorCUFDUF9USUxFX0RTUDIsCit9OworCitlbnVtIHsKKwlTVFJFQU1f UExBWUJBQ0sgPSAwLAorCVNUUkVBTV9DQVBUVVJFLAorCVNUUkVBTV9MQVNUID0gU1RSRUFNX0NB UFRVUkUsCit9OworCitlbnVtIHsKKwlBQ1BfRE1BX0FUVFJJQlVURVNfU0hBUkVETUVNX1RPX0RB R0JfT05JT04gPSAweDAsCisJQUNQX0RNQV9BVFRSSUJVVEVTX1NIQVJFRF9NRU1fVE9fREFHQl9H QVJMSUMgPSAweDEsCisJQUNQX0RNQV9BVFRSSUJVVEVTX0RBR0JfT05JT05fVE9fU0hBUkVETUVN ID0gMHg4LAorCUFDUF9ETUFfQVRUUklCVVRFU19EQUdCX0dBUkxJQ19UT19TSEFSRURNRU0gPSAw eDksCisJQUNQX0RNQV9BVFRSSUJVVEVTX0ZPUkNFX1NJWkUgPSAweEYKK307CisKK3R5cGVkZWYg c3RydWN0IGFjcF9kbWFfZHNjcl90cmFuc2ZlciB7CisJLyogU3BlY2lmaWVzIHRoZSBzb3VyY2Ug bWVtb3J5IGxvY2F0aW9uIGZvciB0aGUgRE1BIGRhdGEgdHJhbnNmZXIuICovCisJdTMyIHNyYzsK KwkvKiBTcGVjaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBsb2NhdGlvbiB0byB3aGVyZSB0 aGUgZGF0YSB3aWxsCisJICAgYmUgdHJhbnNmZXJyZWQuCisJICovCisJdTMyIGRlc3Q7CisJLyog U3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZCB0byBiZSB0cmFuc2ZlcnJlZAorCSAq IGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uIG1lbW9yeS5UcmFuc2ZlciBkaXJlY3Rpb24gJiBJ T0MgZW5hYmxlCisJICovCisJdTMyIHhmZXJfdmFsOworCS8qKiBSZXNlcnZlZCBmb3IgZnV0dXJl IHVzZSAqLworCXUzMiByZXNlcnZlZDsKK30gYWNwX2RtYV9kc2NyX3RyYW5zZmVyX3Q7CisKKyNl bmRpZiAvKl9fQUNQX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNw L2luY2x1ZGUvYWNwX2dmeF9pZi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvaW5jbHVkZS9h Y3BfZ2Z4X2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5ODhjMgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1ZGUvYWNwX2dm eF9pZi5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBN aWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisg KiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorKi8KKworI2lmbmRlZiBfQUNQ X0dGWF9JRl9ICisjZGVmaW5lIF9BQ1BfR0ZYX0lGX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2FtZF9hY3AuaD4KKyNpbmNsdWRlICJjZ3NfbGludXgu aCIKKyNpbmNsdWRlICJjZ3NfY29tbW9uLmgiCisKK3N0cnVjdCBhbWRfYWNwX3ByaXZhdGUgewor CS8qIFRoZSBwdWJsaWMgc3RydXR1cmUgaXMgZmlyc3QsIHNvIHRoYXQgcG9pbnRlcnMgY2FuIGJl IGNhc3QKKwkgKiBiZXR3ZWVuIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUgc3RydWN0dXJlICovCisJ c3RydWN0IGFtZF9hY3BfZGV2aWNlIHB1YmxpYzsKKworCS8qIHByaXZhdGUgZWxlbWVudHMgbm90 IGV4cG9zZSB0aHJvdWdoIHRoZSBidXMgaW50ZXJmYWNlICovCisJdm9pZCAqY2dzX2RldmljZTsK Kwl1bnNpZ25lZCBhY3BfdmVyc2lvbl9tYWpvciwgYWNwX3ZlcnNpb25fbWlub3I7Cit9OworCitp bnQgYW1kX2FjcF9od19pbml0KHZvaWQgKmNnc19kZXZpY2UsCisJCSAgICB1bnNpZ25lZCBhY3Bf dmVyc2lvbl9tYWpvciwgdW5zaWduZWQgYWNwX3ZlcnNpb25fbWlub3IsCisJCSAgICBzdHJ1Y3Qg YW1kX2FjcF9wcml2YXRlICoqYXByaXYpOworaW50IGFtZF9hY3BfaHdfZmluaShzdHJ1Y3QgYW1k X2FjcF9wcml2YXRlICphcHJpdik7Cit2b2lkIGFtZF9hY3Bfc3VzcGVuZChzdHJ1Y3QgYW1kX2Fj cF9wcml2YXRlICphY3BfcHJpdmF0ZSk7Cit2b2lkIGFtZF9hY3BfcmVzdW1lKHN0cnVjdCBhbWRf YWNwX3ByaXZhdGUgKmFjcF9wcml2YXRlKTsKKworI2VuZGlmIC8qIF9BQ1BfR0ZYX0lGX0ggKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKaW5kZXggMDRjMjcwNy4uNDRkZTg3OSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKQEAgLTUsNyArNSw4IEBACiBjY2ZsYWdzLXkg Oj0gLUlpbmNsdWRlL2RybSAtSWRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZyBc CiAJLUlkcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUgXAogCS1JZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUgXAotCS1JZHJpdmVycy9ncHUvZHJtL2FtZC9zY2hlZHVsZXIKKwktSWRyaXZlcnMv Z3B1L2RybS9hbWQvc2NoZWR1bGVyIFwKKwktSWRyaXZlcnMvZ3B1L2RybS9hbWQvYWNwL2luY2x1 ZGUKIAogYW1kZ3B1LXkgOj0gYW1kZ3B1X2Rydi5vCiAKQEAgLTg5LDYgKzkwLDE2IEBAIGFtZGdw dS15ICs9IFwKIAkuLi9zY2hlZHVsZXIvc2NoZWRfZmVuY2UubyBcCiAJYW1kZ3B1X3NjaGVkLm8K IAorIyBBQ1AgY29tcG9uZXQKK2lmbmVxICgkKENPTkZJR19EUk1fQU1EX0FDUCksKQorYW1kZ3B1 LXkgKz0gYW1kZ3B1X2FjcC5vCisKK0FNREFDUFBBVEggOj0gLi4vYWNwCitpbmNsdWRlIGRyaXZl cnMvZ3B1L2RybS9hbWQvYWNwL01ha2VmaWxlCisKK2FtZGdwdS15ICs9ICQoQU1EX0FDUF9GSUxF UykKK2VuZGlmCisKIGFtZGdwdS0kKENPTkZJR19DT01QQVQpICs9IGFtZGdwdV9pb2MzMi5vCiBh bWRncHUtJChDT05GSUdfVkdBX1NXSVRDSEVST08pICs9IGFtZGdwdV9hdHB4X2hhbmRsZXIubwog YW1kZ3B1LSQoQ09ORklHX0FDUEkpICs9IGFtZGdwdV9hY3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1LmgKaW5kZXggMmZjNThlNi4uMjYxYWU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1LmgKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJhbWRncHVfaXJxLmgiCiAj aW5jbHVkZSAiYW1kZ3B1X3Vjb2RlLmgiCiAjaW5jbHVkZSAiYW1kZ3B1X2dkcy5oIgorI2luY2x1 ZGUgImFtZGdwdV9hY3AuaCIKIAogI2luY2x1ZGUgImdwdV9zY2hlZHVsZXIuaCIKIApAQCAtMTkz NSw2ICsxOTM2LDEwIEBAIHN0cnVjdCBhbWRncHVfZGV2aWNlIHsKIAlzdHJ1Y3QgcGNpX2RldgkJ CSpwZGV2OwogCXN0cnVjdCByd19zZW1hcGhvcmUJCWV4Y2x1c2l2ZV9sb2NrOwogCisjaWZkZWYg Q09ORklHX0RSTV9BTURfQUNQCisJc3RydWN0IGFtZGdwdV9hY3AJCWFjcDsKKyNlbmRpZgorCiAJ LyogQVNJQyAqLwogCWVudW0gYW1kX2FzaWNfdHlwZQkJYXNpY190eXBlOwogCXVpbnQzMl90CQkJ ZmFtaWx5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Fj cC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDBjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYWNwLmMKQEAgLTAsMCArMSwyMDggQEAKKy8q CisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u CisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihT KSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9U SEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJhbWRncHUu aCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYW1kZ3B1X2FjcC5oIgorCisjaW5jbHVk ZSAiYWNwX2dmeF9pZi5oIgorCitzdGF0aWMgaW50IGFjcF9lYXJseV9pbml0KHZvaWQgKmhhbmRs ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3Bfc3dfaW5pdCh2b2lkICpoYW5k bGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKiloYW5kbGU7CisKKwlhZGV2LT5hY3AucGFyZW50ID0gYWRldi0+ZGV2OworCisJYWRldi0+ YWNwLmNnc19kZXZpY2UgPQorCQlhbWRncHVfY2dzX2NyZWF0ZV9kZXZpY2UoYWRldik7CisJaWYg KCFhZGV2LT5hY3AuY2dzX2RldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBhY3Bfc3dfZmluaSh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlp ZiAoYWRldi0+YWNwLmNnc19kZXZpY2UpCisJCWFtZGdwdV9jZ3NfZGVzdHJveV9kZXZpY2UoYWRl di0+YWNwLmNnc19kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWNwX2h3X2lu aXQgLSBzdGFydCBhbmQgdGVzdCBVVkQgYmxvY2sKKyAqCisgKiBAYWRldjogYW1kZ3B1X2Rldmlj ZSBwb2ludGVyCisgKgorICovCitzdGF0aWMgaW50IGFjcF9od19pbml0KHZvaWQgKmhhbmRsZSkK K3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq KWhhbmRsZTsKKwlpbnQgcjsKKwljb25zdCBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrX3ZlcnNpb24g KmlwX3ZlcnNpb24gPQorCQlhbWRncHVfZ2V0X2lwX2Jsb2NrKGFkZXYsIEFNRF9JUF9CTE9DS19U WVBFX0FDUCk7CisKKwlpZiAoIWlwX3ZlcnNpb24pCisJCXJldHVybiAtRUlOVkFMOworCisJciA9 IGFtZF9hY3BfaHdfaW5pdChhZGV2LT5hY3AuY2dzX2RldmljZSwKKwkJCSAgICBpcF92ZXJzaW9u LT5tYWpvciwgaXBfdmVyc2lvbi0+bWlub3IsCisJCQkgICAgJmFkZXYtPmFjcC5wcml2YXRlKTsK KwkvKiAtRU5PREVWIG1lYW5zIGJvYXJkIHVzZXMgQVogcmF0aGVyIHRoYW4gQUNQICovCisJaWYg KHIgPT0gLUVOT0RFVikKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAocikKKwkJcmV0dXJuIHI7CisK KwlhZGV2LT5hY3AuYWNwX2NlbGwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWZkX2NlbGwpLCBH RlBfS0VSTkVMKTsKKworCWlmIChhZGV2LT5hY3AuYWNwX2NlbGwgPT0gTlVMTCkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlhZGV2LT5hY3AuYWNwX2NlbGwtPm5hbWUgPSAiYWNwLWkycy1hdWRpbyI7 CisJYWRldi0+YWNwLmFjcF9jZWxsLT5wbGF0Zm9ybV9kYXRhID0gYWRldi0+YWNwLnByaXZhdGU7 CisJYWRldi0+YWNwLmFjcF9jZWxsLT5wZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhbWRfYWNw X3ByaXZhdGUpOworCisJciA9IG1mZF9hZGRfaG90cGx1Z19kZXZpY2VzKGFkZXYtPmFjcC5wYXJl bnQsIGFkZXYtPmFjcC5hY3BfY2VsbCwgMSk7CisKKwlpZiAocikgeworCQlhbWRfYWNwX2h3X2Zp bmkoYWRldi0+YWNwLnByaXZhdGUpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisK Ky8qKgorICogYWNwX2h3X2ZpbmkgLSBzdG9wIHRoZSBoYXJkd2FyZSBibG9jaworICoKKyAqIEBh ZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAqCisgKi8KK3N0YXRpYyBpbnQgYWNwX2h3X2Zp bmkodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVj dCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCisJaWYgKGFkZXYtPmFjcC5wcml2YXRlKSB7CisJ CWFtZF9hY3BfaHdfZmluaShhZGV2LT5hY3AucHJpdmF0ZSk7CisJCW1mZF9yZW1vdmVfZGV2aWNl cyhhZGV2LT5hY3AucGFyZW50KTsKKwkJa2ZyZWUoYWRldi0+YWNwLmFjcF9jZWxsKTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3Bfc3VzcGVuZCh2b2lkICpoYW5kbGUpCit7 CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKilo YW5kbGU7CisKKwlpZiAoYWRldi0+YWNwLnByaXZhdGUpCisJCWFtZF9hY3Bfc3VzcGVuZChhZGV2 LT5hY3AucHJpdmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfcmVzdW1l KHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCWlmIChhZGV2LT5hY3AucHJpdmF0ZSkKKwkJYW1k X2FjcF9yZXN1bWUoYWRldi0+YWNwLnByaXZhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBib29sIGFjcF9pc19pZGxlKHZvaWQgKmhhbmRsZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIGludCBhY3Bfd2FpdF9mb3JfaWRsZSh2b2lkICpoYW5kbGUpCit7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgYWNwX3NvZnRfcmVzZXQodm9pZCAqaGFuZGxlKQoreworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBhY3BfcHJpbnRfc3RhdHVzKHZvaWQgKmhhbmRsZSkKK3sK KwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhh bmRsZTsKKworCWRldl9pbmZvKGFkZXYtPmRldiwgIkFDUCBTVEFUVVNcbiIpOworfQorCitzdGF0 aWMgaW50IGFjcF9zZXRfY2xvY2tnYXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAorCQkJCSAgICAg ZW51bSBhbWRfY2xvY2tnYXRpbmdfc3RhdGUgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgYWNwX3NldF9wb3dlcmdhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJICAg ICBlbnVtIGFtZF9wb3dlcmdhdGluZ19zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCS8qIFRoaXMg ZG9lc24ndCBhY3R1YWxseSBwb3dlcmdhdGUgdGhlIEFDUCBibG9jay4KKwkgKiBUaGF0J3MgZG9u ZSBpbiB0aGUgZHBtIGNvZGUgdmlhIHRoZSBTTUMuICBUaGlzCisJICoganVzdCByZS1pbml0cyB0 aGUgYmxvY2sgYXMgbmVjZXNzYXJ5LiAgVGhlIGFjdHVhbAorCSAqIGdhdGluZyBzdGlsbCBoYXBw ZW5zIGluIHRoZSBkcG0gY29kZS4gIFdlIHNob3VsZAorCSAqIHJldmlzaXQgdGhpcyB3aGVuIHRo ZXJlIGlzIGEgY2xlYW5lciBsaW5lIGJldHdlZW4KKwkgKiB0aGUgc21jIGFuZCB0aGUgaHcgYmxv Y2tzCisJICovCisJaWYgKHN0YXRlID09IEFNRF9QR19TVEFURV9HQVRFKSB7CisJCWlmIChhZGV2 LT5hY3AucHJpdmF0ZSkKKwkJCWFtZF9hY3Bfc3VzcGVuZChhZGV2LT5hY3AucHJpdmF0ZSk7CisJ fSBlbHNlIHsKKwkJaWYgKGFkZXYtPmFjcC5wcml2YXRlKQorCQkJYW1kX2FjcF9yZXN1bWUoYWRl di0+YWNwLnByaXZhdGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGFtZF9p cF9mdW5jcyBhY3BfaXBfZnVuY3MgPSB7CisJLmVhcmx5X2luaXQgPSBhY3BfZWFybHlfaW5pdCwK KwkubGF0ZV9pbml0ID0gTlVMTCwKKwkuc3dfaW5pdCA9IGFjcF9zd19pbml0LAorCS5zd19maW5p ID0gYWNwX3N3X2ZpbmksCisJLmh3X2luaXQgPSBhY3BfaHdfaW5pdCwKKwkuaHdfZmluaSA9IGFj cF9od19maW5pLAorCS5zdXNwZW5kID0gYWNwX3N1c3BlbmQsCisJLnJlc3VtZSA9IGFjcF9yZXN1 bWUsCisJLmlzX2lkbGUgPSBhY3BfaXNfaWRsZSwKKwkud2FpdF9mb3JfaWRsZSA9IGFjcF93YWl0 X2Zvcl9pZGxlLAorCS5zb2Z0X3Jlc2V0ID0gYWNwX3NvZnRfcmVzZXQsCisJLnByaW50X3N0YXR1 cyA9IGFjcF9wcmludF9zdGF0dXMsCisJLnNldF9jbG9ja2dhdGluZ19zdGF0ZSA9IGFjcF9zZXRf Y2xvY2tnYXRpbmdfc3RhdGUsCisJLnNldF9wb3dlcmdhdGluZ19zdGF0ZSA9IGFjcF9zZXRfcG93 ZXJnYXRpbmdfc3RhdGUsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2FjcC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FjcC5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjcwZTYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYWNwLmgKQEAgLTAsMCAr MSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklH SFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2lmbmRl ZiBfX0FNREdQVV9BQ1BfSF9fCisjZGVmaW5lIF9fQU1ER1BVX0FDUF9IX18KKworI2luY2x1ZGUg PGxpbnV4L21mZC9jb3JlLmg+CisKK3N0cnVjdCBhbWRncHVfYWNwIHsKKwlzdHJ1Y3QgZGV2aWNl ICpwYXJlbnQ7CisJdm9pZCAqY2dzX2RldmljZTsKKwlzdHJ1Y3QgYW1kX2FjcF9wcml2YXRlICpw cml2YXRlOworCXN0cnVjdCBtZmRfY2VsbCAqYWNwX2NlbGw7Cit9OworCitleHRlcm4gY29uc3Qg c3RydWN0IGFtZF9pcF9mdW5jcyBhY3BfaXBfZnVuY3M7CisKKyNlbmRpZiAvKiBfX0FNREdQVV9B Q1BfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92aS5jIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmkuYwppbmRleCA1NTJkOWU3NS4uZmFhMTQyZCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS92aS5jCkBAIC03MSw2ICs3MSw5IEBACiAjaW5jbHVkZSAidXZk X3Y1XzAuaCIKICNpbmNsdWRlICJ1dmRfdjZfMC5oIgogI2luY2x1ZGUgInZjZV92M18wLmgiCisj aWYgZGVmaW5lZChDT05GSUdfRFJNX0FNRF9BQ1ApCisjaW5jbHVkZSAiYW1kZ3B1X2FjcC5oIgor I2VuZGlmCiAKIC8qCiAgKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKQEAgLTEyOTgsNiAr MTMwMSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9pcF9ibG9ja192ZXJzaW9uIGN6 X2lwX2Jsb2Nrc1tdID0KIAkJLnJldiA9IDAsCiAJCS5mdW5jcyA9ICZ2Y2VfdjNfMF9pcF9mdW5j cywKIAl9LAorI2lmIGRlZmluZWQoQ09ORklHX0RSTV9BTURfQUNQKQorCXsKKwkJLnR5cGUgPSBB TURfSVBfQkxPQ0tfVFlQRV9BQ1AsCisJCS5tYWpvciA9IDIsCisJCS5taW5vciA9IDIsCisJCS5y ZXYgPSAwLAorCQkuZnVuY3MgPSAmYWNwX2lwX2Z1bmNzLAorCX0sCisjZW5kaWYKIH07CiAKIGlu dCB2aV9zZXRfaXBfYmxvY2tzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FtZF9zaGFyZWQuaCBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvaW5jbHVkZS9hbWRfc2hhcmVkLmgKaW5kZXggNjhhOGVhYS4uNTRiZjk2YSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FtZF9zaGFyZWQuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYW1kX3NoYXJlZC5oCkBAIC03Miw2ICs3Miw3IEBA IGVudW0gYW1kX2lwX2Jsb2NrX3R5cGUgewogCUFNRF9JUF9CTE9DS19UWVBFX1NETUEsCiAJQU1E X0lQX0JMT0NLX1RZUEVfVVZELAogCUFNRF9JUF9CTE9DS19UWVBFX1ZDRSwKKwlBTURfSVBfQkxP Q0tfVFlQRV9BQ1AsCiB9OwogCiBlbnVtIGFtZF9jbG9ja2dhdGluZ19zdGF0ZSB7CmRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L21mZC9hbWRfYWNwLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hbWRf YWNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyMzk2ZAotLS0gL2Rl di9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2FtZF9hY3AuaApAQCAtMCwwICsxLDIxMSBA QAorLyoKKyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9M REVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgor ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisqLworCisjaWZuZGVmIF9BTURfQUNQX0gKKyNkZWZpbmUgX0FNRF9B Q1BfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogUGxheWJhY2sgRE1BIGNoYW5u ZWxzICovCisjZGVmaW5lIFNZU1JBTV9UT19BQ1BfQ0hfTlVNIDEyCisjZGVmaW5lIEFDUF9UT19J MlNfRE1BX0NIX05VTSAxMworCisvKiBDYXB0dXJlIERNQSBjaGFubmVscyAqLworI2RlZmluZSBB Q1BfVE9fU1lTUkFNX0NIX05VTSAxNAorI2RlZmluZSBJMlNfVE9fQUNQX0RNQV9DSF9OVU0gMTUK KworI2RlZmluZSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMiAwCisjZGVmaW5lIFBMQVlC QUNLX0VORF9ETUFfREVTQ1JfQ0gxMiAxCisKKyNkZWZpbmUgUExBWUJBQ0tfU1RBUlRfRE1BX0RF U0NSX0NIMTMgMgorI2RlZmluZSBQTEFZQkFDS19FTkRfRE1BX0RFU0NSX0NIMTMgMworCisKKyNk ZWZpbmUgQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNCA0CisjZGVmaW5lIENBUFRVUkVfRU5E X0RNQV9ERVNDUl9DSDE0IDUKKworI2RlZmluZSBDQVBUVVJFX1NUQVJUX0RNQV9ERVNDUl9DSDE1 IDYKKyNkZWZpbmUgQ0FQVFVSRV9FTkRfRE1BX0RFU0NSX0NIMTUgNworCisjZGVmaW5lIFNUQVRV U19TVUNDRVNTIDAKKyNkZWZpbmUgU1RBVFVTX1VOU1VDQ0VTU0ZVTCAtMQorCitlbnVtIGFjcF9k bWFfcHJpb3JpdHlfbGV2ZWwgeworCS8qIDB4MCBTcGVjaWZpZXMgdGhlIERNQSBjaGFubmVsIGlz IGdpdmVuIG5vcm1hbCBwcmlvcml0eSAqLworCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfTk9STUFM ID0gMHgwLAorCS8qIDB4MSBTcGVjaWZpZXMgdGhlIERNQSBjaGFubmVsIGlzIGdpdmVuIGhpZ2gg cHJpb3JpdHkgKi8KKwlBQ1BfRE1BX1BSSU9SSVRZX0xFVkVMX0hJR0ggPSAweDEsCisJQUNQX0RN QV9QUklPUklUWV9MRVZFTF9GT1JDRVNJWkUgPSAweEZGCit9OworCitzdHJ1Y3QgYXVkaW9fc3Vi c3RyZWFtX2RhdGEgeworCXN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldjsKKwlzdHJ1Y3Qg cGFnZSAqcGc7CisJdW5zaWduZWQgaW50IG9yZGVyOworCXUxNiBudW1fb2ZfcGFnZXM7CisJdTE2 IGRpcmVjdGlvbjsKKwl1MzIgeGZlcl9yZXNvbHV0aW9uOworCXUzMiBpcnE7CisJdTMyIGNoX3Jl ZzsKKwl1aW50NjRfdCBzaXplOworfTsKKworc3RydWN0IGFjcF9pcnFfcHJ2IHsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2OworCXZvaWQgKCpz ZXRfZWxhcHNlZCkoc3RydWN0IGRldmljZSAqcGRldiwgdTE2IHBsYXlfaW50ciwKKwkJCQkJCXUx NiBjYXB0dXJlX2ludHIpOworfTsKKworLyogUHVibGljIGludGVyZmFjZSBvZiBBQ1AgZGV2aWNl IGV4cG9zZWQgb24gQU1EIEdOQiBidXMgKi8KK3N0cnVjdCBhbWRfYWNwX2RldmljZSB7CisJLyog SGFuZHNoYWtlIHdoZW4gQUxTQSBkcml2ZXIgY29ubmVjdHMsIGRpc2Nvbm5lY3RzCisJICogVEJE OiBpcyB0aGlzIHJlYWxseSBuZWVkZWQ/ICovCisJaW50ICgqaW5pdCkoc3RydWN0IGFtZF9hY3Bf ZGV2aWNlICphY3BfZGV2LCB2b2lkICppcHJ2KTsKKwl2b2lkICgqZmluaSkoc3RydWN0IGFtZF9h Y3BfZGV2aWNlICphY3BfZGV2KTsKKworCS8qKgorCSAqIGNvbmZpZ19kbWEoKSAtIENvbmZpZ3Vy ZSBBQ1AgaW50ZXJuYWwgRE1BIGNvbnRyb2xsZXIKKwkgKiBAYWNwX2RldjoJICAgIGFjcCBkZXZp Y2UKKwkgKiBAYWNwX2RtYV9jb25maWc6IERNQSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKwkg KgorCSAqIFRoaXMgd2lsbCBjb25maWd1cmUgdGhlIERNQSBjb250cm9sbGVyIHdpdGggdGhlIGdp dmVuCisJICogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorCSAqLworCXZvaWQgKCpjb25maWdf ZG1hKShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkgICBzdHJ1Y3QgYXVkaW9f c3Vic3RyZWFtX2RhdGEgKmF1ZGlvX2NvbmZpZyk7CisKKwkvKioKKwkgKiBjb25maWdfZG1hX2No YW5uZWwoKSAtIENvbmZpZ3VyZSBBQ1AgRE1BIGNoYW5uZWwKKwkgKiBAYWNwX2RldjoJICAgIGFj cCBkZXZpY2UKKwkgKiBAY2hfbnVtOgkgICAgY2hhbm5lbCBudW1iZXIgdG8gYmUgY29uZmlndXJl ZAorCSAqIEBkc2NyX3N0cnRfaWR4OiAgRE1BIGRlc2NyaXB0b3Igc3RhcnRpbmcgaW5kZXgKKwkg KiBAcHJpb3JpdHlfbGV2ZWw6IHByaW9yaXR5IGxldmVsIG9mIGNoYW5uZWwKKwkgKgorCSAqIFRo aXMgd2lsbCBjb25maWd1cmUgdGhlIERNQSBjaGFubmVsIHdpdGggdGhlIGdpdmVuCisJICogY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorCSAqLworCXZvaWQgKCpjb25maWdfZG1hX2NoYW5uZWwp KHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwKKwkJCQkgICB1OCBjaF9udW0sIHUxNiBk c2NyX3N0cnRfaWR4LCB1MTYgbnVtX2RzY3JzLAorCQkJCSAgIGVudW0gYWNwX2RtYV9wcmlvcml0 eV9sZXZlbCBwcmlvcml0eV9sZXZlbCk7CisKKwkvKioKKwkgKiBkbWFfc3RhcnQoKSAtIFN0YXJ0 IEFDUCBETUEgZW5naW5lCisJICogQGFjcF9kZXY6CSBhY3AgZGV2aWNlCisJICogQGNoX251bToJ IERNQSBjaGFubmVsIG51bWJlcgorCSAqIEBpc19jaXJjdWxhcjogY29uZmlndXJlIGNpcmN1bGFy IERNQQorCSAqCisJICogU3RhcnQgRE1BIGNoYW5uZWwgYXMgY29uZmlndXJlZC4KKwkgKi8KKwlp bnQgKCpkbWFfc3RhcnQpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgdTE2IGNoX251 bSwKKwkJCSAgYm9vbCBpc19jaXJjdWxhcik7CisKKwkvKioKKwkgKiBkbWFfc3RvcCgpIC0gU3Rv cCBBQ1AgRE1BIGVuZ2luZQorCSAqIEBhY3BfZGV2OglhY3AgZGV2aWNlCisJICogQGNoX251bToJ RE1BIGNoYW5uZWwgbnVtYmVyCisJICoKKwkgKiBTdG9wIERNQSBjaGFubmVsIGFzIGNvbmZpZ3Vy ZWQuCisJICovCisJaW50ICgqZG1hX3N0b3ApKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2Rl diwgdTggY2hfbnVtKTsKKworCS8qKgorCSAqIHVwZGF0ZV9kbWFfcG9pbnRlcigpIC0gUXVlcnkg dGhlIGJ1ZmZlciBwb3N0aW9uCisJICogQGFjcF9kZXY6CSBhY3AgZGV2aWNlCisJICogQGRpcmVj dGlvbjogICBEbWEgdHJhbnNmZXIgZGlyZWN0aW9uCisJICogQHBlcmlvZF9zaXplOiBzaXplIG9m IGJ1ZmZlciBpbi10ZXJtcyBvZiBBTFNBIHRlcm1pbm9sb2d5CisJICoKKwkgKiBUaGlzIHdpbGwg cXVlcnkgdGhlIGJ1ZmZlciBwb3NpdGlvbiBmcm9tIEFDUCBJUCwgYmFzZWQgb24gZGF0YQorCSAq IHByb2R1Y2VkL2NvbnN1bWVkCisJICovCisJdTMyICgqdXBkYXRlX2RtYV9wb2ludGVyKShzdHJ1 Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkJICBpbnQgZGlyZWN0aW9uLCB1MzIgcGVy aW9kX3NpemUpOworCisJLyoqCisJICogcHJlYnVmZmVyX2F1ZGlvKCkgLSBXYWl0IGZvciBidWZm ZXJpbmcgdG8gY29tcGxldGUKKwkgKiBAYWNwX2RldjoJYWNwIGRldmljZQorCSAqCisJICogV2Fp dCBmb3IgYnVmZmVyaW5nIHRvIGNvbXBsZXRlIGluIEhPU1QgdG8gU1JBTSBETUEgY2hhbm5lbC4K KwkgKi8KKwl2b2lkICgqcHJlYnVmZmVyX2F1ZGlvKShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFj cF9kZXYpOworCisJLyoqCisJICogaTJzX3Jlc2V0KCkgLSAgUmVzZXQgaTJzIEZJRk9zCisJICog QGFjcF9kZXY6CSAgYWNwIGRldmljZQorCSAqIEBkaXJlY3Rpb246ICAgIGRpcmVjdGlvbiBvZiBz dHJlYW0g4oCTIHBsYXliYWNrL3JlY29yZAorCSAqCisJICogUmVzZXRzIEkyUyBGSUZPcworCSAq LworCXZvaWQgKCppMnNfcmVzZXQpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgaW50 IGRpcmVjdGlvbik7CisKKwkvKioKKwkgKiBjb25maWdfaTJzKCkgLSBDb25maWd1cmUgdGhlIGky cyBjb250cm9sbGVyCisJICogQGFjcF9kZXY6ICAgIGFjcCBkZXZpY2UKKwkgKiBAaTJzX2NvbmZp ZzogY29uZmlndXJhdGlvbiBvZiBpMnMgY29udHJvbGxlcgorCSAqCisJICogVGhpcyB3aWxsIGNv bmZpZ3VyZSB0aGUgaTJzIGNvbnRyb2xsZXIgaW5zdGFuY2UgdXNlZCBvbiB0aGUKKwkgKiBib2Fy ZCwgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorCSAqLworCXZvaWQg KCpjb25maWdfaTJzKShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkgICBzdHJ1 Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKmF1ZGlvX2NvbmZpZyk7CisKKwkvKioKKwkgKiBpMnNf c3RhcnQoKSAtIFN0YXJ0IGkycyBjb250cm9sbGVyCisJICogQGFjcF9kZXY6CSAgYWNwIGRldmlj ZQorCSAqIEBkaXJlY3Rpb246ICAgIGRpcmVjdGlvbiBvZiBzdHJlYW0g4oCTIHBsYXliYWNrL3Jl Y29yZAorCSAqCisJICogU3RhcnRzIEkyUyBkYXRhIHRyYW5zbWlzc2lvbgorCSAqLworCXZvaWQg KCppMnNfc3RhcnQpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiwgaW50IGRpcmVjdGlv bik7CisKKwkvKioKKwkgKiBpMnNfc3RvcCgpIC0gU3RvcCBpMnMgY29udHJvbGxlcgorCSAqIEBh Y3BfZGV2OglhY3AgZGV2aWNlCisJICogQHN0cmVhbToJVHlwZSBvZiBzdHJlYW0g4oCTIHBsYXli YWNrL3JlY29yZAorCSAqCisJICogU3RvcHMgSTJTIGRhdGEgdHJhbnNtaXNzaW9uCisJICovCisJ dm9pZCAoKmkyc19zdG9wKShzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsIGludCBkaXJl Y3Rpb24pOworCisJLyoqCisJICogYWNwX3N1c3BlbmQoKSAtIFBvd2VyIG9mZiBBQ1AKKwkgKiBA YWNwX2RldjoJYWNwIGRldmljZQorCSAqCisJICogU3dpdGNoIG9mZiBwb3dlciB0aWxlcyBvZiBB Q1AKKwkgKi8KKwl2b2lkICgqYWNwX3N1c3BlbmQpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNw X2Rldik7CisKKwkvKioKKwkgKiBhY3BfcmVzdW1lKCkgLSBQb3dlciBvbiBBQ1AKKwkgKiBAYWNw X2RldjoJYWNwIGRldmljZQorCSAqCisJICogU3dpdGNoIG9uIHBvd2VyIHRpbGVzIG9mIEFDUAor CSAqLworCisJdm9pZCAoKmFjcF9yZXN1bWUpKHN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2Rl dik7CisKKwkvKiBUT0RPOiBOZWVkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgZm9y IGFzeW5jaHJvbm91cworCSAqIG5vdGlmaWNhdGlvbnMgKi8KK307CisKKyNlbmRpZiAvKiBfQU1E X0FDUF9IICovCi0tIAoxLjguMy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=