From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neil Armstrong Subject: [PATCH v3 5/9] drm/meson: Add AFBCD module driver Date: Mon, 21 Oct 2019 11:15:05 +0200 Message-ID: <20191021091509.3864-6-narmstrong@baylibre.com> References: <20191021091509.3864-1-narmstrong@baylibre.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0784C89C94 for ; Mon, 21 Oct 2019 09:15:18 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id r19so12403912wmh.2 for ; Mon, 21 Oct 2019 02:15:17 -0700 (PDT) In-Reply-To: <20191021091509.3864-1-narmstrong@baylibre.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: khilman@baylibre.com, linux-amlogic@lists.infradead.org, ayan.halder@arm.com, linux-arm-kernel@lists.infradead.org, Neil Armstrong List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIHRoZSBkcml2ZXIgZm9yIHRoZSBBUk0gRnJhbWVidWZmZXIgQ29tcHJlc3Npb24g ZGVjb2RlcnMgZm91bmQKaW4gdGhlIEFtbG9naWMgR1hNIGFuZCBHMTJBIFNvQ3MuCgpUaGUgQW1s b2dpYyBHWE0gYW5kIEcxMkEgQUZCQyBkZWNvZGVyIGFyZSB0b3RhbGx5IGRpZmZlcmVudCwgdGhl IEdYTSBvbmx5CmhhbmRsaW5nIG9ubHkgdGhlIEFGQkMgdjEuMCBtb2RlcyBhbmQgdGhlIEcxMkEg ZGVjb2RlciBoYW5kbGluZyB0aGUKQUZCQyB2MS4yIG1vZGVzLgoKVGhlIEcxMkEgQUZCQyBkZWNv ZGVyIGlzIGFuIGV4dGVybmFsIElQIGludGVncmF0ZWQgaW4gdGhlIHZpZGVvIHBpcGVsaW5lLAph bmQgdGhlIEdYTSBBRkJDIGRlY29kZXIgc2VlbXMgdG8gdGhlIGFuIEFtbG9naWMgY3VzdG9tIGRl Y29kZXIgbW9yZQp0aWdobHkgaW50ZWdyYXRlZCBpbiB0aGUgdmlkZW8gcGlwZWxpbmUuCgpUaGUg R1hNIEFGQkMgZGVjb2RlciBjYW4gaGFuZGxlIG9ubHkgb25lIEFGQkMgcGxhbmUgZm9yIDIgYXZh aWxhYmxlCk9TRCBwbGFuZXMgYXZhaWxhYmxlIGluIEhXLCBhbmQgdGhlIEcxMkEgQUZCQyBkZWNv ZGVyIGNhbiBoYW5kbGUgdXAKdG8gNCBBRkJDIHBsYW5lcyBmb3IgdXAgdG8gMyBPU0QgcGxhbmVz IGF2YWlsYWJsZSBpbiBIVy4KClRoZSBBbWxvZ2ljIEdYTSBzdXBwb3J0cyAxNngxNiBTUEFSU0Ug YW5kIDE2eDE2IFNQTElUIEFGQkMgYnVmZmVycyB1cAp0byA0ay4KCk9uIHRoZSBvdGhlciBzaWRl LCBmb3IgRzEyQSBTUExJVCBpcyBtYW5kYXRvcnkgaW4gMTZ4MTYgYmxvY2sgbW9kZSwgYnV0CmZv ciA0ayBtb2RlcyAzMng4K1NQTElUIEFGQkMgYnVmZmVycyBpcyBtYW5hZGF0b3J5IGZvciBwZXJm b3JtYW5jZXMgcmVhc29ucy4KClRoZSBSRE1BIGlzIHVzZWQgaGVyZSB0byByZXNldCBhbmQgcHJv Z3JhbSB0aGUgQUZCQyBkZWNvZGVyIHVuaXQKb24gZWFjaCB2c3luYyB3aXRob3V0IGludm9sdmlu ZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdGhhdCBjYW4KYmUgbWFza2VkIGZvciBhIGxvbmcgcGVy aW9kIG9mIHRpbWUsIHByb2R1Y2luZyBkaXNwbGF5IGdsaXRjaGVzLgoKRm9yIHRoaXMgd2UgdXNl IHRoZSBtZXNvbl9yZG1hX3dyaXRlbF9zeW5jKCkgd2hpY2ggYWRkcyB0aGUgcmVnaXN0ZXIKd3Jp dGUgdHVwbGUgKFZQVSByZWdpc3RlciBvZmZzZXQgYW5kIHJlZ2lzdGVyIHZhbHVlKSB0byB0aGUg UkRNQSBidWZmZXIKYW5kIHdyaXRlIHRoZSB2YWx1ZSB0byB0aGUgSFcuCgpXaGVuIGVuYWJsZWQs IHRoZSBSRE1BIGlzIGVuYWJsZWQgdG8gcmV3cml0ZSB0aGUgc2FtZSBzZXF1ZW5jZSBhdCB0aGUK bmV4dCBWU1lOQyBldmVudCwgdW50aWwgYSBuZXcgYnVmZmVyIGlzIGNvbW1pdHRlZCB0byB0aGUg T1NEIHBsYW5lLgoKVGhlIHRoZSBBbWxvZ2ljIEcxMkEgaXMgc3dpdGNoZWQgdG8gUkRNQSwgdGhl IEFtbG9naWMgR1hNIERlY29kZXIKZG9lc24ndCBuZWVkIGEgcmVzZXQvcmVwcm9ncmFtIGF0IGVh Y2ggdnN5bmMsIGJ1dCBuZWVkcyB0byBrZWVwIHRoZQp2c3luYyBpbnRlcnJ1cHQgZW5hYmxlZCB0 byB0cmlnZ2VyIHRoZSBSRE1BIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IE5laWwgQXJtc3Ryb25n IDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVzb24vTWFr ZWZpbGUgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kcnYu YyAgICAgICB8ICA1MCArKy0KIGRyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuaCAgICAg ICB8ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3NkX2FmYmNkLmMgfCAzODkg KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3Nk X2FmYmNkLmggfCAgMjggKysKIDUgZmlsZXMgY2hhbmdlZCwgNDczIGluc2VydGlvbnMoKyksIDgg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lc29uL21l c29uX29zZF9hZmJjZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lc29u L21lc29uX29zZF9hZmJjZC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29uL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lc29uL01ha2VmaWxlCmluZGV4IGZiN2Y1NDQwZmU1 Ny4uMjhhNTE5Y2RmNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vTWFrZWZp bGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lc29uL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAog IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiBtZXNvbi1kcm0teSA6PSBt ZXNvbl9kcnYubyBtZXNvbl9wbGFuZS5vIG1lc29uX2NydGMubyBtZXNvbl92ZW5jX2N2YnMubwog bWVzb24tZHJtLXkgKz0gbWVzb25fdml1Lm8gbWVzb25fdnBwLm8gbWVzb25fdmVuYy5vIG1lc29u X3ZjbGsubyBtZXNvbl9vdmVybGF5Lm8KLW1lc29uLWRybS15ICs9IG1lc29uX3JkbWEubworbWVz b24tZHJtLXkgKz0gbWVzb25fcmRtYS5vIG1lc29uX29zZF9hZmJjZC5vCiAKIG9iai0kKENPTkZJ R19EUk1fTUVTT04pICs9IG1lc29uLWRybS5vCiBvYmotJChDT05GSUdfRFJNX01FU09OX0RXX0hE TUkpICs9IG1lc29uX2R3X2hkbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29u L21lc29uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2Rydi5jCmluZGV4IDM5 N2MzMzE4MmY0Zi4uYjVmNWViN2I0YmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVz b24vbWVzb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2Rydi5jCkBA IC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlICJtZXNvbl9kcnYuaCIKICNpbmNsdWRlICJtZXNv bl9vdmVybGF5LmgiCiAjaW5jbHVkZSAibWVzb25fcGxhbmUuaCIKKyNpbmNsdWRlICJtZXNvbl9v c2RfYWZiY2QuaCIKICNpbmNsdWRlICJtZXNvbl9yZWdpc3RlcnMuaCIKICNpbmNsdWRlICJtZXNv bl92ZW5jX2N2YnMuaCIKICNpbmNsdWRlICJtZXNvbl92aXUuaCIKICNpbmNsdWRlICJtZXNvbl92 cHAuaCIKKyNpbmNsdWRlICJtZXNvbl9yZG1hLmgiCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm1l c29uIgogI2RlZmluZSBEUklWRVJfREVTQyAiQW1sb2dpYyBNZXNvbiBEUk0gZHJpdmVyIgpAQCAt MTg0LDYgKzE4Niw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX3JlbW92ZV9mcmFtZWJ1ZmZlcnModm9p ZCkKIHN0YXRpYyBpbnQgbWVzb25fZHJ2X2JpbmRfbWFzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwg Ym9vbCBoYXNfY29tcG9uZW50cykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0g dG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJY29uc3Qgc3RydWN0IG1lc29uX2RybV9tYXRjaF9k YXRhICptYXRjaDsKIAlzdHJ1Y3QgbWVzb25fZHJtICpwcml2OwogCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm07CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC0xOTYsNiArMTk5LDEwIEBAIHN0YXRp YyBpbnQgbWVzb25fZHJ2X2JpbmRfbWFzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBoYXNf Y29tcG9uZW50cykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJbWF0Y2ggPSBvZl9kZXZpY2Vf Z2V0X21hdGNoX2RhdGEoZGV2KTsKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4gLUVOT0RFVjsKKwog CWRybSA9IGRybV9kZXZfYWxsb2MoJm1lc29uX2RyaXZlciwgZGV2KTsKIAlpZiAoSVNfRVJSKGRy bSkpCiAJCXJldHVybiBQVFJfRVJSKGRybSk7CkBAIC0yMDgsOCArMjE1LDggQEAgc3RhdGljIGlu dCBtZXNvbl9kcnZfYmluZF9tYXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGhhc19jb21w b25lbnRzKQogCWRybS0+ZGV2X3ByaXZhdGUgPSBwcml2OwogCXByaXYtPmRybSA9IGRybTsKIAlw cml2LT5kZXYgPSBkZXY7Ci0KLQlwcml2LT5jb21wYXQgPSAoZW51bSB2cHVfY29tcGF0aWJsZSlv Zl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEocHJpdi0+ZGV2KTsKKwlwcml2LT5jb21wYXQgPSBtYXRj aC0+Y29tcGF0OworCXByaXYtPmFmYmNkLm9wcyA9IG1hdGNoLT5hZmJjZF9vcHM7CiAKIAlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAidnB1 Iik7CiAJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CkBAIC0yODksNiAr Mjk2LDExIEBAIHN0YXRpYyBpbnQgbWVzb25fZHJ2X2JpbmRfbWFzdGVyKHN0cnVjdCBkZXZpY2Ug KmRldiwgYm9vbCBoYXNfY29tcG9uZW50cykKIAltZXNvbl92ZW5jX2luaXQocHJpdik7CiAJbWVz b25fdnBwX2luaXQocHJpdik7CiAJbWVzb25fdml1X2luaXQocHJpdik7CisJaWYgKHByaXYtPmFm YmNkLm9wcykgeworCQlyZXQgPSBwcml2LT5hZmJjZC5vcHMtPmluaXQocHJpdik7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCX0KIAogCS8qIEVuY29kZXIgSW5pdGlhbGl6YXRpb24gKi8K IApAQCAtMzU5LDEyICszNzEsMTYgQEAgc3RhdGljIHZvaWQgbWVzb25fZHJ2X3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCiAJCW1lc29uX2NhbnZhc19mcmVlKHByaXYtPmNhbnZhcywgcHJpdi0+ Y2FudmFzX2lkX3ZkMV8yKTsKIAl9CiAKKwlpZiAocHJpdi0+YWZiY2Qub3BzKSB7CisJCXByaXYt PmFmYmNkLm9wcy0+cmVzZXQocHJpdik7CisJCW1lc29uX3JkbWFfZnJlZShwcml2KTsKKwl9CisK IAlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKIAlkcm1faXJxX3VuaW5zdGFsbChkcm0pOwogCWRy bV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOwogCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRy bSk7CiAJZHJtX2Rldl9wdXQoZHJtKTsKLQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBv bmVudF9tYXN0ZXJfb3BzIG1lc29uX2Rydl9tYXN0ZXJfb3BzID0gewpAQCAtMzkzLDYgKzQwOSw4 IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbWVzb25fZHJ2X3BtX3Jlc3VtZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCiAJbWVzb25fdmVuY19pbml0KHByaXYpOwogCW1lc29uX3ZwcF9pbml0KHBy aXYpOwogCW1lc29uX3ZpdV9pbml0KHByaXYpOworCWlmIChwcml2LT5hZmJjZC5vcHMpCisJCXBy aXYtPmFmYmNkLm9wcy0+aW5pdChwcml2KTsKIAogCWRybV9tb2RlX2NvbmZpZ19oZWxwZXJfcmVz dW1lKHByaXYtPmRybSk7CiAKQEAgLTQ4MSwxNSArNDk5LDMzIEBAIHN0YXRpYyBpbnQgbWVzb25f ZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcmV0dXJuIDA7CiB9Owog CitzdGF0aWMgc3RydWN0IG1lc29uX2RybV9tYXRjaF9kYXRhIG1lc29uX2RybV9neGJiX2RhdGEg PSB7CisJLmNvbXBhdCA9IFZQVV9DT01QQVRJQkxFX0dYQkIsCit9OworCitzdGF0aWMgc3RydWN0 IG1lc29uX2RybV9tYXRjaF9kYXRhIG1lc29uX2RybV9neGxfZGF0YSA9IHsKKwkuY29tcGF0ID0g VlBVX0NPTVBBVElCTEVfR1hMLAorfTsKKworc3RhdGljIHN0cnVjdCBtZXNvbl9kcm1fbWF0Y2hf ZGF0YSBtZXNvbl9kcm1fZ3htX2RhdGEgPSB7CisJLmNvbXBhdCA9IFZQVV9DT01QQVRJQkxFX0dY TSwKKwkuYWZiY2Rfb3BzID0gJm1lc29uX2FmYmNkX2d4bV9vcHMsCit9OworCitzdGF0aWMgc3Ry dWN0IG1lc29uX2RybV9tYXRjaF9kYXRhIG1lc29uX2RybV9nMTJhX2RhdGEgPSB7CisJLmNvbXBh dCA9IFZQVV9DT01QQVRJQkxFX0cxMkEsCisJLmFmYmNkX29wcyA9ICZtZXNvbl9hZmJjZF9nMTJh X29wcywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR0X21hdGNoW10g PSB7CiAJeyAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uLWd4YmItdnB1IiwKLQkgIC5kYXRh ICAgICAgID0gKHZvaWQgKilWUFVfQ09NUEFUSUJMRV9HWEJCIH0sCisJICAuZGF0YSAgICAgICA9 ICh2b2lkICopJm1lc29uX2RybV9neGJiX2RhdGEgfSwKIAl7IC5jb21wYXRpYmxlID0gImFtbG9n aWMsbWVzb24tZ3hsLXZwdSIsCi0JICAuZGF0YSAgICAgICA9ICh2b2lkICopVlBVX0NPTVBBVElC TEVfR1hMIH0sCisJICAuZGF0YSAgICAgICA9ICh2b2lkICopJm1lc29uX2RybV9neGxfZGF0YSB9 LAogCXsgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbi1neG0tdnB1IiwKLQkgIC5kYXRhICAg ICAgID0gKHZvaWQgKilWUFVfQ09NUEFUSUJMRV9HWE0gfSwKKwkgIC5kYXRhICAgICAgID0gKHZv aWQgKikmbWVzb25fZHJtX2d4bV9kYXRhIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1l c29uLWcxMmEtdnB1IiwKLQkgIC5kYXRhICAgICAgID0gKHZvaWQgKilWUFVfQ09NUEFUSUJMRV9H MTJBIH0sCisJICAuZGF0YSAgICAgICA9ICh2b2lkICopJm1lc29uX2RybV9nMTJhX2RhdGEgfSwK IAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR0X21hdGNoKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZXNv bi9tZXNvbl9kcnYuaAppbmRleCBlYTM5YmU5MTNjMGYuLmYxNTE1MzgxYmQwMiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZXNvbi9tZXNvbl9kcnYuaApAQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgZHJtX2NydGM7CiBz dHJ1Y3QgZHJtX2RldmljZTsKIHN0cnVjdCBkcm1fcGxhbmU7CiBzdHJ1Y3QgbWVzb25fZHJtOwor c3RydWN0IG1lc29uX2FmYmNkX29wczsKIAogZW51bSB2cHVfY29tcGF0aWJsZSB7CiAJVlBVX0NP TVBBVElCTEVfR1hCQiA9IDAsCkBAIC0yNCw2ICsyNSwxMSBAQCBlbnVtIHZwdV9jb21wYXRpYmxl IHsKIAlWUFVfQ09NUEFUSUJMRV9HMTJBID0gMywKIH07CiAKK3N0cnVjdCBtZXNvbl9kcm1fbWF0 Y2hfZGF0YSB7CisJZW51bSB2cHVfY29tcGF0aWJsZSBjb21wYXQ7CisJc3RydWN0IG1lc29uX2Fm YmNkX29wcyAqYWZiY2Rfb3BzOworfTsKKwogc3RydWN0IG1lc29uX2RybSB7CiAJc3RydWN0IGRl dmljZSAqZGV2OwogCWVudW0gdnB1X2NvbXBhdGlibGUgY29tcGF0OwpAQCAtMTI5LDYgKzEzNSwx MiBAQCBzdHJ1Y3QgbWVzb25fZHJtIHsKIAkJdWludDMyX3QgKmFkZHI7CiAJCXVuc2lnbmVkIGlu dCBvZmZzZXQ7CiAJfSByZG1hOworCisJc3RydWN0IHsKKwkJc3RydWN0IG1lc29uX2FmYmNkX29w cyAqb3BzOworCQl1NjQgbW9kaWZpZXI7CisJCXUzMiBmb3JtYXQ7CisJfSBhZmJjZDsKIH07CiAK IHN0YXRpYyBpbmxpbmUgaW50IG1lc29uX3ZwdV9pc19jb21wYXRpYmxlKHN0cnVjdCBtZXNvbl9k cm0gKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3NkX2Fm YmNkLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3NkX2FmYmNkLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMTJlMDI3MWYxNjYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3NkX2FmYmNkLmMKQEAgLTAsMCAr MSwzODkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqIENv cHlyaWdodCAoQykgMjAxOSBCYXlMaWJyZSwgU0FTCisgKiBBdXRob3I6IE5laWwgQXJtc3Ryb25n IDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0Zmll bGQuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zv dXJjYy5oPgorCisjaW5jbHVkZSAibWVzb25fZHJ2LmgiCisjaW5jbHVkZSAibWVzb25fcmVnaXN0 ZXJzLmgiCisjaW5jbHVkZSAibWVzb25fdml1LmgiCisjaW5jbHVkZSAibWVzb25fcmRtYS5oIgor I2luY2x1ZGUgIm1lc29uX29zZF9hZmJjZC5oIgorCisvKgorICogRE9DOiBEcml2ZXIgZm9yIHRo ZSBBUk0gRnJhbWVCdWZmZXIgQ29tcHJlc3Npb24gRGVjb2RlcnMKKyAqCisgKiBUaGUgQW1sb2dp YyBHWE0gYW5kIEcxMkEgU29DIGZhbWlsaWVzIGVtYmVkcyBhbiBBRkJDIERlY29kZXIsCisgKiB0 byBkZWNvZGUgY29tcHJlc3NlZCBidWZmZXJzIGdlbmVyYXRlZCBieSB0aGUgQVJNIE1hbGkgR1BV LgorICoKKyAqIEZvciB0aGUgR1hNIEZhbWlseSwgQW1sb2dpYyBkZXNpZ25lZCB0aGVpciBvd24g RGVjb2RlciwgbmFtZWQgaW4KKyAqIHRoZSB2ZW5kb3Igc291cmNlIGFzICJNRVNPTl9BRkJDIiwg YW5kIGEgc2luZ2xlIGRlY29kZXIgaXMgYXZhaWxhYmxlCisgKiBmb3IgdGhlIDIgT1NEIHBsYW5l cy4KKyAqIFRoaXMgZGVjb2RlciBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEFGQkMgMS4wIHNwZWNp ZmljYXRpb25zIGFuZCB0aGUKKyAqIE1hbGkgVDgyMCBHUFUgY2FwYWJpbGl0aWVzLgorICogSXQg c3VwcG9ydHMgOgorICogLSBiYXNpYyBBRkJDIGJ1ZmZlciBmb3IgUkdCMzIgb25seSwgdGh1cyBZ VFIgZmVhdHVyZSBpcyBtYW5kYXRvcnkKKyAqIC0gU1BBUlNFIGxheW91dCBhbmQgU1BMSVQgbGF5 b3V0CisgKiAtIG9ubHkgMTZ4MTYgc3VwZXJibG9jaworICoKKyAqIFRoZSBkZWNvZGVyIHJlYWRz IHRoZSBkYXRhIGZyb20gdGhlIFNEUkFNLCBkZWNvZGVzIGFuZCBzZW5kcyB0aGUKKyAqIGRlY29k ZWQgcGl4ZWwgc3RyZWFtIHRvIHRoZSBPU0QxIFBsYW5lIHBpeGVsIGNvbXBvc2VyLgorICoKKyAq IEZvciB0aGUgRzEyQSBGYW1pbHksIEFtbG9naWMgaW50ZWdyYXRlZCBhbiBBUk0gQUZCQyBEZWNv ZGVyLCBuYW1lZAorICogaW4gdGhlIHZlbmRvciBzb3VyY2UgYXMgIk1BTElfQUZCQyIsIGFuZCB0 aGUgZGVjb2RlciBjYW4gZGVjb2RlIHVwCisgKiB0byA0IHN1cmZhY2VzLCBvbmUgZm9yIGVhY2gg b2YgdGhlIDQgYXZhaWxhYmxlIE9TRHMuCisgKiBUaGlzIGRlY29kZXIgaXMgY29tcGF0aWJsZSB3 aXRoIHRoZSBBRkJDIDEuMiBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlCisgKiBNYWxpIEczMSBhbmQg RzUyIEdQVXMuCisgKiBJcyBzdXBwb3J0cyA6CisgKiAtIGJhc2ljIEFGQkMgYnVmZmVyIGZvciBt dWx0aXBsZSBSR0IgYW5kIFlVViBwaXhlbCBmb3JtYXRzCisgKiAtIFNQQVJTRSBsYXlvdXQgYW5k IFNQTElUIGxheW91dAorICogLSAxNngxNiBhbmQgMzJ4OCAid2lkZWJsayIgc3VwZXJibG9ja3MK KyAqIC0gVGlsZWQgaGVhZGVyCisgKgorICogVGhlIEFSTSBBRkJDIERlY29kZXIgaW5kZXBlbmRl bnQgZnJvbSB0aGUgVlBVIFBpeGVsIFBpcGVsaW5lLCBzbworICogdGhlIEFSTSBBRkJDIERlY29k ZXIgcmVhZHMgdGhlIGRhdGEgZnJvbSB0aGUgU0RSQU0gdGhlbiBkZWNvZGVzCisgKiBpbnRvIGEg cHJpdmF0ZSBpbnRlcm5hbCBwaHlzaWNhbCBhZGRyZXNzIHdoZXJlIHRoZSBPU0QxIFBsYW5lIHBp eGVsCisgKiBjb21wb3NlciB1bnBhY2tzIHRoZSBkZWNvZGVkIGRhdGEuCisgKi8KKworLyogQW1s b2dpYyBBRkJDIERlY29kZXIgZm9yIEdYTSBGYW1pbHkgKi8KKworI2RlZmluZSBPU0QxX0FGQkNE X1JHQjMyCTB4MTUKKworc3RhdGljIGludCBtZXNvbl9neG1fYWZiY2RfcGl4ZWxfZm10KHU2NCBt b2RpZmllciwgdWludDMyX3QgZm9ybWF0KQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBE Uk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJcmV0dXJu IE9TRDFfQUZCQ0RfUkdCMzI7CisJLyogVE9GSVggc3VwcG9ydCBtb2RlIGZvcm1hdHMgKi8KKwlk ZWZhdWx0OgorCQlEUk1fREVCVUcoInVuc3VwcG9ydGVkIGFmYmMgZm9ybWF0WyUwOHhdXG4iLCBm b3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBib29sIG1lc29uX2d4 bV9hZmJjZF9zdXBwb3J0ZWRfZm10KHU2NCBtb2RpZmllciwgdWludDMyX3QgZm9ybWF0KQorewor CWlmIChtb2RpZmllciAmIEFGQkNfRk9STUFUX01PRF9CTE9DS19TSVpFXzMyeDgpCisJCXJldHVy biBmYWxzZTsKKworCWlmICghKG1vZGlmaWVyICYgQUZCQ19GT1JNQVRfTU9EX1lUUikpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiBtZXNvbl9neG1fYWZiY2RfcGl4ZWxfZm10KG1vZGlmaWVy LCBmb3JtYXQpID49IDA7Cit9CisKK3N0YXRpYyBpbnQgbWVzb25fZ3htX2FmYmNkX2luaXQoc3Ry dWN0IG1lc29uX2RybSAqcHJpdikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXNv bl9neG1fYWZiY2RfcmVzZXQoc3RydWN0IG1lc29uX2RybSAqcHJpdikKK3sKKwl3cml0ZWxfcmVs YXhlZChWSVVfU1dfUkVTRVRfT1NEMV9BRkJDRCwKKwkJICAgICAgIHByaXYtPmlvX2Jhc2UgKyBf UkVHKFZJVV9TV19SRVNFVCkpOworCXdyaXRlbF9yZWxheGVkKDAsIHByaXYtPmlvX2Jhc2UgKyBf UkVHKFZJVV9TV19SRVNFVCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWVzb25f Z3htX2FmYmNkX2VuYWJsZShzdHJ1Y3QgbWVzb25fZHJtICpwcml2KQoreworCXdyaXRlbF9yZWxh eGVkKEZJRUxEX1BSRVAoT1NEMV9BRkJDRF9JRF9GSUZPX1RIUkQsIDB4NDApIHwKKwkJICAgICAg IE9TRDFfQUZCQ0RfREVDX0VOQUJMRSwKKwkJICAgICAgIHByaXYtPmlvX2Jhc2UgKyBfUkVHKE9T RDFfQUZCQ0RfRU5BQkxFKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXNvbl9n eG1fYWZiY2RfZGlzYWJsZShzdHJ1Y3QgbWVzb25fZHJtICpwcml2KQoreworCXdyaXRlbF9iaXRz X3JlbGF4ZWQoT1NEMV9BRkJDRF9ERUNfRU5BQkxFLCAwLAorCQkJICAgIHByaXYtPmlvX2Jhc2Ug KyBfUkVHKE9TRDFfQUZCQ0RfRU5BQkxFKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBtZXNvbl9neG1fYWZiY2Rfc2V0dXAoc3RydWN0IG1lc29uX2RybSAqcHJpdikKK3sKKwl1MzIg Y29udl9sYnVmX2xlbjsKKwl1MzIgbW9kZSA9IEZJRUxEX1BSRVAoT1NEMV9BRkJDRF9NSUZfVVJH RU5ULCAzKSB8CisJCSAgIEZJRUxEX1BSRVAoT1NEMV9BRkJDRF9IT0xEX0xJTkVfTlVNLCA0KSB8 CisJCSAgIEZJRUxEX1BSRVAoT1NEMV9BRkJDRF9SR0JBX0VYQ0hBTl9DVFJMLCAweDM0KSB8CisJ CSAgIG1lc29uX2d4bV9hZmJjZF9waXhlbF9mbXQocHJpdi0+YWZiY2QubW9kaWZpZXIsCisJCQkJ CSAgICAgcHJpdi0+YWZiY2QuZm9ybWF0KTsKKworCWlmIChwcml2LT5hZmJjZC5tb2RpZmllciAm IEFGQkNfRk9STUFUX01PRF9TUEFSU0UpCisJCW1vZGUgfD0gT1NEMV9BRkJDRF9IUkVHX0hBTEZf QkxPQ0s7CisKKwlpZiAocHJpdi0+YWZiY2QubW9kaWZpZXIgJiBBRkJDX0ZPUk1BVF9NT0RfU1BM SVQpCisJCW1vZGUgfD0gT1NEMV9BRkJDRF9IUkVHX0JMT0NLX1NQTElUOworCisJd3JpdGVsX3Jl bGF4ZWQobW9kZSwgcHJpdi0+aW9fYmFzZSArIF9SRUcoT1NEMV9BRkJDRF9NT0RFKSk7CisKKwl3 cml0ZWxfcmVsYXhlZChGSUVMRF9QUkVQKE9TRDFfQUZCQ0RfSFJFR19WU0laRV9JTiwKKwkJCQkg IHByaXYtPnZpdS5vc2QxX3dpZHRoKSB8CisJCSAgICAgICBGSUVMRF9QUkVQKE9TRDFfQUZCQ0Rf SFJFR19IU0laRV9JTiwKKwkJCQkgIHByaXYtPnZpdS5vc2QxX2hlaWdodCksCisJCSAgICAgICBw cml2LT5pb19iYXNlICsgX1JFRyhPU0QxX0FGQkNEX1NJWkVfSU4pKTsKKworCXdyaXRlbF9yZWxh eGVkKHByaXYtPnZpdS5vc2QxX2FkZHIgPj4gNCwKKwkJICAgICAgIHByaXYtPmlvX2Jhc2UgKyBf UkVHKE9TRDFfQUZCQ0RfSERSX1BUUikpOworCXdyaXRlbF9yZWxheGVkKHByaXYtPnZpdS5vc2Qx X2FkZHIgPj4gNCwKKwkJICAgICAgIHByaXYtPmlvX2Jhc2UgKyBfUkVHKE9TRDFfQUZCQ0RfRlJB TUVfUFRSKSk7CisJLyogVE9GSVg6IGJpdHMgMzE6MjQgYXJlIG5vdCBkb2N1bWVudGVkLCBub3Ig dGhlIG1lYW5pbmcgb2YgMHhlNCAqLworCXdyaXRlbF9yZWxheGVkKCgweGU0IDw8IDI0KSB8IChw cml2LT52aXUub3NkMV9hZGRyICYgMHhmZmZmZmYpLAorCQkgICAgICAgcHJpdi0+aW9fYmFzZSAr IF9SRUcoT1NEMV9BRkJDRF9DSFJPTUFfUFRSKSk7CisKKwlpZiAocHJpdi0+dml1Lm9zZDFfd2lk dGggPD0gMTI4KQorCQljb252X2xidWZfbGVuID0gMzI7CisJZWxzZSBpZiAocHJpdi0+dml1Lm9z ZDFfd2lkdGggPD0gMjU2KQorCQljb252X2xidWZfbGVuID0gNjQ7CisJZWxzZSBpZiAocHJpdi0+ dml1Lm9zZDFfd2lkdGggPD0gNTEyKQorCQljb252X2xidWZfbGVuID0gMTI4OworCWVsc2UgaWYg KHByaXYtPnZpdS5vc2QxX3dpZHRoIDw9IDEwMjQpCisJCWNvbnZfbGJ1Zl9sZW4gPSAyNTY7CisJ ZWxzZSBpZiAocHJpdi0+dml1Lm9zZDFfd2lkdGggPD0gMjA0OCkKKwkJY29udl9sYnVmX2xlbiA9 IDUxMjsKKwllbHNlCisJCWNvbnZfbGJ1Zl9sZW4gPSAxMDI0OworCisJd3JpdGVsX3JlbGF4ZWQo Y29udl9sYnVmX2xlbiwKKwkJICAgICAgIHByaXYtPmlvX2Jhc2UgKyBfUkVHKE9TRDFfQUZCQ0Rf Q09OVl9DVFJMKSk7CisKKwl3cml0ZWxfcmVsYXhlZChGSUVMRF9QUkVQKE9TRDFfQUZCQ0RfREVD X1BJWEVMX0JHTl9ILCAwKSB8CisJCSAgICAgICBGSUVMRF9QUkVQKE9TRDFfQUZCQ0RfREVDX1BJ WEVMX0VORF9ILAorCQkJCSAgcHJpdi0+dml1Lm9zZDFfd2lkdGggLSAxKSwKKwkJICAgICAgIHBy aXYtPmlvX2Jhc2UgKyBfUkVHKE9TRDFfQUZCQ0RfUElYRUxfSFNDT1BFKSk7CisKKwl3cml0ZWxf cmVsYXhlZChGSUVMRF9QUkVQKE9TRDFfQUZCQ0RfREVDX1BJWEVMX0JHTl9WLCAwKSB8CisJCSAg ICAgICBGSUVMRF9QUkVQKE9TRDFfQUZCQ0RfREVDX1BJWEVMX0VORF9WLAorCQkJCSAgcHJpdi0+ dml1Lm9zZDFfaGVpZ2h0IC0gMSksCisJCSAgICAgICBwcml2LT5pb19iYXNlICsgX1JFRyhPU0Qx X0FGQkNEX1BJWEVMX1ZTQ09QRSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtZXNvbl9h ZmJjZF9vcHMgbWVzb25fYWZiY2RfZ3htX29wcyA9IHsKKwkuaW5pdCA9IG1lc29uX2d4bV9hZmJj ZF9pbml0LAorCS5yZXNldCA9IG1lc29uX2d4bV9hZmJjZF9yZXNldCwKKwkuZW5hYmxlID0gbWVz b25fZ3htX2FmYmNkX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1lc29uX2d4bV9hZmJjZF9kaXNhYmxl LAorCS5zZXR1cCA9IG1lc29uX2d4bV9hZmJjZF9zZXR1cCwKKwkuc3VwcG9ydGVkX2ZtdCA9IG1l c29uX2d4bV9hZmJjZF9zdXBwb3J0ZWRfZm10LAorfTsKKworLyogQVJNIEFGQkMgRGVjb2RlciBm b3IgRzEyQSBGYW1pbHkgKi8KKworLyogQW1sb2dpYyBHMTJBIE1hbGkgQUZCQyBEZWNvZGVyIHN1 cHBvcnRlZCBmb3JtYXRzICovCitlbnVtIHsKKwlNQUZCQ19GTVRfUkdCNTY1ID0gMCwKKwlNQUZC Q19GTVRfUkdCQTU1NTEsCisJTUFGQkNfRk1UX1JHQkExMDEwMTAyLAorCU1BRkJDX0ZNVF9ZVVY0 MjBfMTBCLAorCU1BRkJDX0ZNVF9SR0I4ODgsCisJTUFGQkNfRk1UX1JHQkE4ODg4LAorCU1BRkJD X0ZNVF9SR0JBNDQ0NCwKKwlNQUZCQ19GTVRfUjgsCisJTUFGQkNfRk1UX1JHODgsCisJTUFGQkNf Rk1UX1lVVjQyMF84QiwKKwlNQUZCQ19GTVRfWVVWNDIyXzhCID0gMTEsCisJTUFGQkNfRk1UX1lV VjQyMl8xMEIgPSAxNCwKK307CisKK3N0YXRpYyBpbnQgbWVzb25fZzEyYV9hZmJjZF9waXhlbF9m bXQodTY0IG1vZGlmaWVyLCB1aW50MzJfdCBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQpIHsK KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogor CQkvKiBZVFIgaXMgZm9yYmlkZGVuIGZvciBub24gWEJHUiBmb3JtYXRzICovCisJCWlmIChtb2Rp ZmllciAmIEFGQkNfRk9STUFUX01PRF9ZVFIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBmYWxs IHRocm91Z2ggKi8KKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFU X0FCR1I4ODg4OgorCQlyZXR1cm4gTUFGQkNfRk1UX1JHQkE4ODg4OworCWNhc2UgRFJNX0ZPUk1B VF9SR0I4ODg6CisJCS8qIFlUUiBpcyBmb3JiaWRkZW4gZm9yIG5vbiBYQkdSIGZvcm1hdHMgKi8K KwkJaWYgKG1vZGlmaWVyICYgQUZCQ19GT1JNQVRfTU9EX1lUUikKKwkJCXJldHVybiAtRUlOVkFM OworCQlyZXR1cm4gTUFGQkNfRk1UX1JHQjg4ODsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogor CQkvKiBZVFIgaXMgZm9yYmlkZGVuIGZvciBub24gWEJHUiBmb3JtYXRzICovCisJCWlmIChtb2Rp ZmllciAmIEFGQkNfRk9STUFUX01PRF9ZVFIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJu IE1BRkJDX0ZNVF9SR0I1NjU7CisJLyogVE9GSVggc3VwcG9ydCBtb2RlIGZvcm1hdHMgKi8KKwlk ZWZhdWx0OgorCQlEUk1fREVCVUcoInVuc3VwcG9ydGVkIGFmYmMgZm9ybWF0WyUwOHhdXG4iLCBm b3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWVzb25fZzEy YV9hZmJjZF9icHAodWludDMyX3QgZm9ybWF0KQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2Fz ZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNl IERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQlyZXR1 cm4gMzI7CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJcmV0dXJuIDI0OworCWNhc2UgRFJN X0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiAxNjsKKwkvKiBUT0ZJWCBzdXBwb3J0IG1vZGUgZm9y bWF0cyAqLworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidW5zdXBwb3J0ZWQgYWZiYyBmb3JtYXRb JTA4eF1cbiIsIGZvcm1hdCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBtZXNv bl9nMTJhX2FmYmNkX2ZtdF90b19ibGtfbW9kZSh1NjQgbW9kaWZpZXIsIHVpbnQzMl90IGZvcm1h dCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwlj YXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJcmV0dXJuIE9TRF9NQUxJX0NPTE9SX01PREVfUkdC QTg4ODg7CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJcmV0dXJuIE9TRF9NQUxJX0NPTE9S X01PREVfUkdCODg4OworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiBPU0RfTUFM SV9DT0xPUl9NT0RFX1JHQjU2NTsKKwkvKiBUT0ZJWCBzdXBwb3J0IG1vZGUgZm9ybWF0cyAqLwor CWRlZmF1bHQ6CisJCURSTV9ERUJVRygidW5zdXBwb3J0ZWQgYWZiYyBmb3JtYXRbJTA4eF1cbiIs IGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGJvb2wgbWVzb25f ZzEyYV9hZmJjZF9zdXBwb3J0ZWRfZm10KHU2NCBtb2RpZmllciwgdWludDMyX3QgZm9ybWF0KQor eworCXJldHVybiBtZXNvbl9nMTJhX2FmYmNkX3BpeGVsX2ZtdChtb2RpZmllciwgZm9ybWF0KSA+ PSAwOworfQorCitzdGF0aWMgaW50IG1lc29uX2cxMmFfYWZiY2RfaW5pdChzdHJ1Y3QgbWVzb25f ZHJtICpwcml2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBtZXNvbl9yZG1hX2luaXQocHJpdik7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1lc29uX3JkbWFfc2V0dXAocHJpdik7CisK KwkvKiBIYW5kbGUgQUZCQyBEZWNvZGVyIHJlc2V0IG1hbnVhbGx5ICovCisJd3JpdGVsX2JpdHNf cmVsYXhlZChNQUxJX0FGQkNEX01BTlVBTF9SRVNFVCwgTUFMSV9BRkJDRF9NQU5VQUxfUkVTRVQs CisJCQkgICAgcHJpdi0+aW9fYmFzZSArIF9SRUcoTUFMSV9BRkJDRF9UT1BfQ1RSTCkpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWVzb25fZzEyYV9hZmJjZF9yZXNldChzdHJ1Y3Qg bWVzb25fZHJtICpwcml2KQoreworCW1lc29uX3JkbWFfcmVzZXQocHJpdik7CisKKwltZXNvbl9y ZG1hX3dyaXRlbF9zeW5jKHByaXYsIFZJVV9TV19SRVNFVF9HMTJBX0FGQkNfQVJCIHwKKwkJCSAg ICAgICBWSVVfU1dfUkVTRVRfRzEyQV9PU0QxX0FGQkNELAorCQkJICAgICAgIFZJVV9TV19SRVNF VCk7CisJbWVzb25fcmRtYV93cml0ZWxfc3luYyhwcml2LCAwLCBWSVVfU1dfUkVTRVQpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWVzb25fZzEyYV9hZmJjZF9lbmFibGUoc3RydWN0 IG1lc29uX2RybSAqcHJpdikKK3sKKwltZXNvbl9yZG1hX3dyaXRlbF9zeW5jKHByaXYsIFZQVV9N QUZCQ19JUlFfU1VSRkFDRVNfQ09NUExFVEVEIHwKKwkJCSAgICAgICBWUFVfTUFGQkNfSVJRX0NP TkZJR1VSQVRJT05fU1dBUFBFRCB8CisJCQkgICAgICAgVlBVX01BRkJDX0lSUV9ERUNPREVfRVJS T1IgfAorCQkJICAgICAgIFZQVV9NQUZCQ19JUlFfREVUSUxJTkdfRVJST1IsCisJCQkgICAgICAg VlBVX01BRkJDX0lSUV9NQVNLKTsKKworCW1lc29uX3JkbWFfd3JpdGVsX3N5bmMocHJpdiwgVlBV X01BRkJDX1MwX0VOQUJMRSwKKwkJCSAgICAgICBWUFVfTUFGQkNfU1VSRkFDRV9DRkcpOworCisJ bWVzb25fcmRtYV93cml0ZWxfc3luYyhwcml2LCBWUFVfTUFGQkNfRElSRUNUX1NXQVAsCisJCQkg ICAgICAgVlBVX01BRkJDX0NPTU1BTkQpOworCisJLyogVGhpcyB3aWxsIGVuYWJsZSB0aGUgUkRN QSByZXBsYXlpbmcgdGhlIHJlZ2lzdGVyIHdyaXRlcyBvbiB2c3luYyAqLworCW1lc29uX3JkbWFf Zmx1c2gocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXNvbl9nMTJhX2Fm YmNkX2Rpc2FibGUoc3RydWN0IG1lc29uX2RybSAqcHJpdikKK3sKKwl3cml0ZWxfYml0c19yZWxh eGVkKFZQVV9NQUZCQ19TMF9FTkFCTEUsIDAsCisJCQkgICAgcHJpdi0+aW9fYmFzZSArIF9SRUco VlBVX01BRkJDX1NVUkZBQ0VfQ0ZHKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBt ZXNvbl9nMTJhX2FmYmNkX3NldHVwKHN0cnVjdCBtZXNvbl9kcm0gKnByaXYpCit7CisJdTMyIGZv cm1hdCA9IG1lc29uX2cxMmFfYWZiY2RfcGl4ZWxfZm10KHByaXYtPmFmYmNkLm1vZGlmaWVyLAor CQkJCQkJcHJpdi0+YWZiY2QuZm9ybWF0KTsKKworCWlmIChwcml2LT5hZmJjZC5tb2RpZmllciAm IEFGQkNfRk9STUFUX01PRF9ZVFIpCisJCWZvcm1hdCB8PSBWUFVfTUFGQkNfWVVWX1RSQU5TRk9S TTsKKworCWlmIChwcml2LT5hZmJjZC5tb2RpZmllciAmIEFGQkNfRk9STUFUX01PRF9TUExJVCkK KwkJZm9ybWF0IHw9IFZQVV9NQUZCQ19CTE9DS19TUExJVDsKKworCWlmIChwcml2LT5hZmJjZC5t b2RpZmllciAmIEFGQkNfRk9STUFUX01PRF9USUxFRCkKKwkJZm9ybWF0IHw9IFZQVV9NQUZCQ19U SUxFRF9IRUFERVJfRU47CisKKwlpZiAoKHByaXYtPmFmYmNkLm1vZGlmaWVyICYgQUZCQ19GT1JN QVRfTU9EX0JMT0NLX1NJWkVfTUFTSykgPT0KKwkJQUZCQ19GT1JNQVRfTU9EX0JMT0NLX1NJWkVf MzJ4OCkKKwkJZm9ybWF0IHw9IEZJRUxEX1BSRVAoVlBVX01BRkJDX1NVUEVSX0JMT0NLX0FTUEVD VCwgMSk7CisKKwltZXNvbl9yZG1hX3dyaXRlbF9zeW5jKHByaXYsIGZvcm1hdCwKKwkJCSAgICAg ICBWUFVfTUFGQkNfRk9STUFUX1NQRUNJRklFUl9TMCk7CisKKwltZXNvbl9yZG1hX3dyaXRlbF9z eW5jKHByaXYsIHByaXYtPnZpdS5vc2QxX2FkZHIsCisJCQkgICAgICAgVlBVX01BRkJDX0hFQURF Ul9CVUZfQUREUl9MT1dfUzApOworCW1lc29uX3JkbWFfd3JpdGVsX3N5bmMocHJpdiwgMCwKKwkJ CSAgICAgICBWUFVfTUFGQkNfSEVBREVSX0JVRl9BRERSX0hJR0hfUzApOworCisJbWVzb25fcmRt YV93cml0ZWxfc3luYyhwcml2LCBwcml2LT52aXUub3NkMV93aWR0aCwKKwkJCSAgICAgICBWUFVf TUFGQkNfQlVGRkVSX1dJRFRIX1MwKTsKKwltZXNvbl9yZG1hX3dyaXRlbF9zeW5jKHByaXYsIEFM SUdOKHByaXYtPnZpdS5vc2QxX2hlaWdodCwgMzIpLAorCQkJICAgICAgIFZQVV9NQUZCQ19CVUZG RVJfSEVJR0hUX1MwKTsKKworCW1lc29uX3JkbWFfd3JpdGVsX3N5bmMocHJpdiwgMCwKKwkJCSAg ICAgICBWUFVfTUFGQkNfQk9VTkRJTkdfQk9YX1hfU1RBUlRfUzApOworCW1lc29uX3JkbWFfd3Jp dGVsX3N5bmMocHJpdiwgcHJpdi0+dml1Lm9zZDFfd2lkdGggLSAxLAorCQkJICAgICAgIFZQVV9N QUZCQ19CT1VORElOR19CT1hfWF9FTkRfUzApOworCW1lc29uX3JkbWFfd3JpdGVsX3N5bmMocHJp diwgMCwKKwkJCSAgICAgICBWUFVfTUFGQkNfQk9VTkRJTkdfQk9YX1lfU1RBUlRfUzApOworCW1l c29uX3JkbWFfd3JpdGVsX3N5bmMocHJpdiwgcHJpdi0+dml1Lm9zZDFfaGVpZ2h0IC0gMSwKKwkJ CSAgICAgICBWUFVfTUFGQkNfQk9VTkRJTkdfQk9YX1lfRU5EX1MwKTsKKworCW1lc29uX3JkbWFf d3JpdGVsX3N5bmMocHJpdiwgTUVTT05fRzEyQV9BRkJDRF9PVVRfQUREUiwKKwkJCSAgICAgICBW UFVfTUFGQkNfT1VUUFVUX0JVRl9BRERSX0xPV19TMCk7CisJbWVzb25fcmRtYV93cml0ZWxfc3lu Yyhwcml2LCAwLAorCQkJICAgICAgIFZQVV9NQUZCQ19PVVRQVVRfQlVGX0FERFJfSElHSF9TMCk7 CisKKwltZXNvbl9yZG1hX3dyaXRlbF9zeW5jKHByaXYsIHByaXYtPnZpdS5vc2QxX3dpZHRoICoK KwkJCSAgICAgICAobWVzb25fZzEyYV9hZmJjZF9icHAocHJpdi0+YWZiY2QuZm9ybWF0KSAvIDgp LAorCQkJICAgICAgIFZQVV9NQUZCQ19PVVRQVVRfQlVGX1NUUklERV9TMCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RydWN0IG1lc29uX2FmYmNkX29wcyBtZXNvbl9hZmJjZF9nMTJhX29wcyA9IHsK KwkuaW5pdCA9IG1lc29uX2cxMmFfYWZiY2RfaW5pdCwKKwkucmVzZXQgPSBtZXNvbl9nMTJhX2Fm YmNkX3Jlc2V0LAorCS5lbmFibGUgPSBtZXNvbl9nMTJhX2FmYmNkX2VuYWJsZSwKKwkuZGlzYWJs ZSA9IG1lc29uX2cxMmFfYWZiY2RfZGlzYWJsZSwKKwkuc2V0dXAgPSBtZXNvbl9nMTJhX2FmYmNk X3NldHVwLAorCS5mbXRfdG9fYmxrX21vZGUgPSBtZXNvbl9nMTJhX2FmYmNkX2ZtdF90b19ibGtf bW9kZSwKKwkuc3VwcG9ydGVkX2ZtdCA9IG1lc29uX2cxMmFfYWZiY2Rfc3VwcG9ydGVkX2ZtdCwK K307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3NkX2FmYmNkLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3NkX2FmYmNkLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZTU1MjMzMDRmNDIKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fb3NkX2FmYmNkLmgKQEAgLTAsMCArMSwyOCBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCisvKgorICogQ29weXJp Z2h0IChDKSAyMDE5IEJheUxpYnJlLCBTQVMKKyAqIEF1dGhvcjogTmVpbCBBcm1zdHJvbmcgPG5h cm1zdHJvbmdAYmF5bGlicmUuY29tPgorICovCisKKyNpZm5kZWYgX19NRVNPTl9PU0RfQUZCQ0Rf SAorI2RlZmluZSBfX01FU09OX09TRF9BRkJDRF9ICisKKyNpbmNsdWRlICJtZXNvbl9kcnYuaCIK KworLyogVGhpcyBpcyBhbiBpbnRlcm5hbCBhZGRyZXNzIHVzZWQgdG8gdHJhbnNmZXIgcGl4ZWwg ZnJvbSBBRkJDIHRvIHRoZSBWSVUgKi8KKyNkZWZpbmUgTUVTT05fRzEyQV9BRkJDRF9PVVRfQURE UgkweDEwMDAwMDAKKworc3RydWN0IG1lc29uX2FmYmNkX29wcyB7CisJaW50ICgqaW5pdCkoc3Ry dWN0IG1lc29uX2RybSAqcHJpdik7CisJaW50ICgqcmVzZXQpKHN0cnVjdCBtZXNvbl9kcm0gKnBy aXYpOworCWludCAoKmVuYWJsZSkoc3RydWN0IG1lc29uX2RybSAqcHJpdik7CisJaW50ICgqZGlz YWJsZSkoc3RydWN0IG1lc29uX2RybSAqcHJpdik7CisJaW50ICgqc2V0dXApKHN0cnVjdCBtZXNv bl9kcm0gKnByaXYpOworCWludCAoKmZtdF90b19ibGtfbW9kZSkodTY0IG1vZGlmaWVyLCB1aW50 MzJfdCBmb3JtYXQpOworCWJvb2wgKCpzdXBwb3J0ZWRfZm10KSh1NjQgbW9kaWZpZXIsIHVpbnQz Ml90IGZvcm1hdCk7Cit9OworCitleHRlcm4gc3RydWN0IG1lc29uX2FmYmNkX29wcyBtZXNvbl9h ZmJjZF9neG1fb3BzOworZXh0ZXJuIHN0cnVjdCBtZXNvbl9hZmJjZF9vcHMgbWVzb25fYWZiY2Rf ZzEyYV9vcHM7CisKKyNlbmRpZiAvKiBfX01FU09OX09TRF9BRkJDRF9IICovCi0tIAoyLjIyLjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==