From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v5 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel Date: Wed, 24 Dec 2014 16:39:38 +0800 Message-ID: <1419410383-6359-17-git-send-email-Ying.Liu@freescale.com> References: <1419410383-6359-1-git-send-email-Ying.Liu@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1419410383-6359-1-git-send-email-Ying.Liu@freescale.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: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, linux-kernel@vger.kernel.org, a.hajda@samsung.com, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEhpbWF4IEhYODM2OUEgTUlQSSBEU0kgcGFuZWwu CgpTaWduZWQtb2ZmLWJ5OiBMaXUgWWluZyA8WWluZy5MaXVAZnJlZXNjYWxlLmNvbT4KLS0tCnY0 LT52NToKICogQWRkcmVzcyBBbmRyemVqIEhhamRhJ3MgY29tbWVudHMuCiAqIEdldCB0aGUgYnMt Z3Bpb3MgcHJvcGVydHkgaW5zdGVhZCBvZiB0aGUgYnNbMzowXS1ncGlvcyBwcm9wZXJ0aWVzLgog KiBJbXBsZW1lbnQgZXJyb3IgcHJvcGFnYXRpb24gZm9yIHBhbmVsIHJlZ2lzdGVyIGNvbmZpZ3Vy YXRpb25zLgogKiBPdGhlciBtaW5vciBjaGFuZ2VzIHRvIGltcHJvdmUgdGhlIGNvZGUgcXVhbGl0 eS4KCnYzLT52NDoKICogTW92ZSB0aGUgcmVsZXZhbnQgZHQtYmluZGluZ3MgdG8gYSBzZXBhcmF0 ZSBwYXRjaCB0byBhZGRyZXNzIFN0ZWZhbgogICBXYWhyZW4ncyBjb21tZW50LgoKdjItPnYzOgog KiBTb3J0IHRoZSBpbmNsdWRlZCBoZWFkZXIgZmlsZXMgYWxwaGFiZXRpY2FsbHkuCgp2MS0+djI6 CiAqIEFkZHJlc3MgYWxtb3N0IGFsbCBjb21tZW50cyBmcm9tIFRoaWVycnkgUmVkaW5nLgogKiBS ZW1vdmUgc2V2ZXJhbCBEVCBwcm9wZXJ0aWVzIGFzIHRoZXkgY2FuIGJlIGltcGxpZWQgYnkgdGhl IGNvbXBhdGlibGUgc3RyaW5nLgogKiBBZGQgdGhlIEhJTUFYL2hpbWF4IHByZWZpeGVzIHRvIHRo ZSBkcml2ZXIncyBLY29uZmlnIG5hbWUgYW5kIGRyaXZlciBuYW1lLgogKiBNb3ZlIHRoZSBkcml2 ZXIncyBNYWtlZmlsZSBlbnRyeSBwbGFjZSB0byBzb3J0IHRoZSBlbnRyaWVzIGFscGhhYmV0aWNh bGx5LgogKiBSZXVzZSBzZXZlcmFsIHN0YW5kYXJkIERDUyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBp bnZlbnRpbmcgd2hlZWxzLgogKiBNb3ZlIHRoZSBwYW5lbCByZXNldHRpbmcgYW5kIHBvd2VyIGxv Z2ljcyB0byB0aGUgZHJpdmVyIHByb2JlL3JlbW92ZSBzdGFnZXMuCiAgIFRoaXMgbWF5IHNpbXBs aWZ5IHBhbmVsIHByZXBhcmUvdW5wcmVwYXJlIGhvb2tzLiBUaGUgcG93ZXIgY29uc3VtcHRpb24g c2hvdWxkCiAgIG5vdCBjaGFuZ2UgYSBsb3QgYXQgRFBNUyBzaW5jZSB0aGUgcGFuZWwgZW50ZXJz IHNsZWVwIG1vZGUgYXQgdGhhdCB0aW1lLgogKiBBZGQgdGhlIG1vZHVsZSBhdXRob3IuCiAqIE90 aGVyIG1pbm9yIGNoYW5nZXMsIHN1Y2ggYXMgY29kaW5nIHN0eWxlIGlzc3Vlcy4KCiBkcml2ZXJz L2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA1ICsKIGRyaXZlcnMvZ3B1 L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJt L3BhbmVsL3BhbmVsLWhpbWF4LWh4ODM2OWEuYyB8IDYwOCArKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDYxNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWhpbWF4LWh4ODM2OWEuYwoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL0tjb25maWcKaW5kZXggMDI0ZTk4ZS4uODFiMGJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcK QEAgLTE2LDYgKzE2LDExIEBAIGNvbmZpZyBEUk1fUEFORUxfU0lNUExFCiAJICB0aGF0IGl0IGNh biBiZSBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYgd2hlbiB0aGUgcGFuZWwgZ29lcyBpbnRvIGEK IAkgIGxvdyBwb3dlciBzdGF0ZS4KIAorY29uZmlnIERSTV9QQU5FTF9ISU1BWF9IWDgzNjlBCisJ dHJpc3RhdGUgIkhpbWF4IEhYODM2OUEgcGFuZWwiCisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBE Uk1fTUlQSV9EU0kKKwogY29uZmlnIERSTV9QQU5FTF9MRDkwNDAKIAl0cmlzdGF0ZSAiTEQ5MDQw IFJHQi9TUEkgcGFuZWwiCiAJZGVwZW5kcyBvbiBPRiAmJiBTUEkKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmls ZQppbmRleCA0YjJhMDQzLi5kNWRiZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCkBAIC0xLDQg KzEsNSBAQAogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSU1QTEUpICs9IHBhbmVsLXNpbXBsZS5v CitvYmotJChDT05GSUdfRFJNX1BBTkVMX0hJTUFYX0hYODM2OUEpICs9IHBhbmVsLWhpbWF4LWh4 ODM2OWEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9MRDkwNDApICs9IHBhbmVsLWxkOTA0MC5v CiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1M2RThBQTApICs9IHBhbmVsLXM2ZThhYTAubwogb2Jq LSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hhcnAtbHEx MDFyMXN4MDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWhpbWF4 LWh4ODM2OWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1oeDgzNjlhLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1YzM0ZgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1oeDgzNjlhLmMKQEAgLTAs MCArMSw2MDggQEAKKy8qCisgKiBIaW1heCBIWDgzNjlBIHBhbmVsIGRyaXZlci4KKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gU2Ftc3Vu ZyBzNmU4YWEwIHBhbmVsIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgor CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVk ZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+ CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNkZWZpbmUgV1JESVNCVgkJMHg1MQor I2RlZmluZSBXUkNUUkxECQkweDUzCisjZGVmaW5lIFdSQ0FCQwkJMHg1NQorI2RlZmluZSBTRVRQ T1dFUgkweGIxCisjZGVmaW5lIFNFVERJU1AJCTB4YjIKKyNkZWZpbmUgU0VUQ1lDCQkweGI0Cisj ZGVmaW5lIFNFVFZDT00JCTB4YjYKKyNkZWZpbmUgU0VURVhUQwkJMHhiOQorI2RlZmluZSBTRVRN SVBJCQkweGJhCisjZGVmaW5lIFNFVFBBTkVMCTB4Y2MKKyNkZWZpbmUgU0VUR0lQCQkweGQ1Cisj ZGVmaW5lIFNFVEdBTU1BCTB4ZTAKKworI2RlZmluZSBIWDgzNjlBX01JTl9CUklHSFRORVNTCTB4 MDAKKyNkZWZpbmUgSFg4MzY5QV9NQVhfQlJJR0hUTkVTUwkweGZmCisKK2VudW0gaHg4MzY5YV9t cHVfaW50ZXJmYWNlIHsKKwlIWDgzNjlBX0RCSV9UWVBFX0FfOEJJVCwKKwlIWDgzNjlBX0RCSV9U WVBFX0FfOUJJVCwKKwlIWDgzNjlBX0RCSV9UWVBFX0FfMTZCSVQsCisJSFg4MzY5QV9EQklfVFlQ RV9BXzE4QklULAorCUhYODM2OUFfREJJX1RZUEVfQl84QklULAorCUhYODM2OUFfREJJX1RZUEVf Ql85QklULAorCUhYODM2OUFfREJJX1RZUEVfQl8xNkJJVCwKKwlIWDgzNjlBX0RCSV9UWVBFX0Jf MThCSVQsCisJSFg4MzY5QV9EU0lfQ01EX01PREUsCisJSFg4MzY5QV9EQklfVFlQRV9CXzI0QklU LAorCUhYODM2OUFfRFNJX1ZJREVPX01PREUsCisJSFg4MzY5QV9NRERJLAorCUhYODM2OUFfRFBJ X0RCSV9UWVBFX0NfT1BUMSwKKwlIWDgzNjlBX0RQSV9EQklfVFlQRV9DX09QVDIsCisJSFg4MzY5 QV9EUElfREJJX1RZUEVfQ19PUFQzCit9OworCitlbnVtIGh4ODM2OWFfcmVzb2x1dGlvbiB7CisJ SFg4MzY5QV9SRVNfNDgwXzg2NCwKKwlIWDgzNjlBX1JFU180ODBfODU0LAorCUhYODM2OUFfUkVT XzQ4MF84MDAsCisJSFg4MzY5QV9SRVNfNDgwXzY0MCwKKwlIWDgzNjlBX1JFU18zNjBfNjQwLAor CUhYODM2OUFfUkVTXzQ4MF83MjAsCit9OworCitzdHJ1Y3QgaHg4MzY5YV9wYW5lbF9kZXNjIHsK Kwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKworCS8qIG1zICovCisJdW5z aWduZWQgaW50IHBvd2VyX29uX2RlbGF5OworCXVuc2lnbmVkIGludCByZXNldF9kZWxheTsKKwor CXVuc2lnbmVkIGludCBkc2lfbGFuZXM7Cit9OworCitzdHJ1Y3QgaHg4MzY5YSB7CisJc3RydWN0 IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7CisKKwljb25zdCBzdHJ1Y3Qg aHg4MzY5YV9wYW5lbF9kZXNjICpwZDsKKworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1 cHBsaWVzWzVdOworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CisJc3RydWN0IGdwaW9f ZGVzYyAqYnNfZ3Bpb1s0XTsKKwl1OCByZXNfc2VsOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgaHg4MzY5YSAqcGFuZWxfdG9faHg4MzY5YShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sK KwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBzdHJ1Y3QgaHg4MzY5YSwgcGFuZWwpOworfQor CitzdGF0aWMgaW50IGh4ODM2OWFfZGNzX3dyaXRlKHN0cnVjdCBoeDgzNjlhICpjdHgsIGNvbnN0 IGNoYXIgKmZ1bmMsCisJCQkgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2 KTsKKwlzc2l6ZV90IHJldDsKKworCXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZV9idWZmZXIoZHNp LCBkYXRhLCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY3R4LT5kZXYsICIlcyBm YWlsZWQ6ICVkXG4iLCBmdW5jLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsK K30KKworI2RlZmluZSBoeDgzNjlhX2Rjc193cml0ZV9zZXEoY3R4LCBzZXEuLi4pIFwKKyh7IFwK Kwljb25zdCB1OCBkW10gPSB7IHNlcSB9OyBcCisJQlVJTERfQlVHX09OX01TRyhBUlJBWV9TSVpF KGQpID4gNjQsICJEQ1Mgc2VxdWVuY2UgdG9vIGJpZyBmb3Igc3RhY2siKTsgXAorCWh4ODM2OWFf ZGNzX3dyaXRlKGN0eCwgX19mdW5jX18sIGQsIEFSUkFZX1NJWkUoZCkpOyBcCit9KQorCisjZGVm aW5lIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBzZXEuLi4pIFwKKyh7IFwKKwlz dGF0aWMgY29uc3QgdTggZFtdID0geyBzZXEgfTsgXAorCWh4ODM2OWFfZGNzX3dyaXRlKGN0eCwg X19mdW5jX18sIGQsIEFSUkFZX1NJWkUoZCkpOyBcCit9KQorCitzdGF0aWMgaW50IGh4ODM2OWFf ZHNpX3NldF9kaXNwbGF5X3JlbGF0ZWRfcmVnaXN0ZXIoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sK Kwl1OCBzZWNfcCA9IChjdHgtPnJlc19zZWwgPDwgNCkgfCAweDAzOworCisJcmV0dXJuIGh4ODM2 OWFfZGNzX3dyaXRlX3NlcShjdHgsIFNFVERJU1AsIDB4MDAsIHNlY19wLCAweDAzLAorCQkJICAg MHgwMywgMHg3MCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCSAgIDB4MDAsIDB4 MDMsIDB4MDMsIDB4MDAsIDB4MDEpOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9k aXNwbGF5X3dhdmVmb3JtX2N5Y2xlKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4 ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBTRVRDWUMsIDB4MDAsIDB4MWQsCisJCQkJ CTB4NWYsIDB4MGUsIDB4MDYpOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9naXAo c3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0 YXRpYyhjdHgsIFNFVEdJUCwgMHgwMCwgMHgwNCwKKwkJCQkgMHgwMywgMHgwMCwgMHgwMSwgMHgw NSwgMHgxYywgMHg3MCwKKwkJCQkgMHgwMSwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNiwK KwkJCQkgMHg1MSwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MSwgMHgwNiwKKwkJCQkgMHg1MCwgMHgw NywgMHgwNywgMHgwZiwgMHgwNCk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X3Bv d2VyKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3Nl cV9zdGF0aWMoY3R4LCBTRVRQT1dFUiwgMHgwMSwgMHgwMCwKKwkJCQkgICAweDM0LCAweDA2LCAw eDAwLCAweDBmLCAweDBmLCAweDJhLAorCQkJCSAgIDB4MzIsIDB4M2YsIDB4M2YsIDB4MDcsIDB4 M2EsIDB4MDEsCisJCQkJICAgMHhlNiwgMHhlNiwgMHhlNiwgMHhlNiwgMHhlNik7Cit9CisKK3N0 YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X3Zjb21fdm9sdGFnZShzdHJ1Y3QgaHg4MzY5YSAqY3R4 KQoreworCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUVkNPTSwg MHg1NiwgMHg1Nik7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X3BhbmVsKHN0cnVj dCBoeDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMo Y3R4LCBTRVRQQU5FTCwgMHgwMik7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X2dh bW1hX2N1cnZlKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFfZGNzX3dy aXRlX3NlcV9zdGF0aWMoY3R4LCBTRVRHQU1NQSwgMHgwMCwgMHgxZCwKKwkJCQkgICAweDIyLCAw eDM4LCAweDNkLCAweDNmLCAweDJlLCAweDRhLAorCQkJCSAgIDB4MDYsIDB4MGQsIDB4MGYsIDB4 MTMsIDB4MTUsIDB4MTMsCisJCQkJICAgMHgxNiwgMHgxMCwgMHgxOSwgMHgwMCwgMHgxZCwgMHgy MiwKKwkJCQkgICAweDM4LCAweDNkLCAweDNmLCAweDJlLCAweDRhLCAweDA2LAorCQkJCSAgIDB4 MGQsIDB4MGYsIDB4MTMsIDB4MTUsIDB4MTMsIDB4MTYsCisJCQkJICAgMHgxMCwgMHgxOSk7Cit9 CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X21pcGkoc3RydWN0IGh4ODM2OWEgKmN0eCkK K3sKKwl1OCBlbGV2ZW50aF9wID0gY3R4LT5wZC0+ZHNpX2xhbmVzID09IDIgPyAweDExIDogMHgx MDsKKworCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXEoY3R4LCBTRVRNSVBJLCAweDAwLCAw eGEwLCAweGM2LAorCQkJCSAweDAwLCAweDBhLCAweDAwLCAweDEwLCAweDMwLCAweDZmLAorCQkJ CSAweDAyLCBlbGV2ZW50aF9wLCAweDE4LCAweDQwKTsKK30KKworc3RhdGljIGludCBoeDgzNjlh X2RzaV9zZXRfaW50ZXJmYWNlX3BpeGVsX2ZvbWF0KHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2 KTsKKwl1OCBmb3JtYXQ7CisJaW50IHJldDsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwlj YXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQlm b3JtYXQgPSAweDc3OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCWZv cm1hdCA9IDB4NTU7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6 CisJCWZvcm1hdCA9IDB4NjY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY3R4LT5k ZXYsICJ1bnN1cHBvcnRlZCBEU0kgcGl4ZWwgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9waXhlbF9mb3JtYXQoZHNpLCBmb3JtYXQp OworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGN0eC0+ZGV2LCAiJXMgZmFpbGVkOiAlZFxuIiwg X19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2Rz aV9zZXRfY29sdW1uX2FkZHJlc3Moc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCWNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gY3R4LT5wZC0+bW9kZTsKKwlpbnQgcmV0 OworCisJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9jb2x1bW5fYWRkcmVzcyhkc2ksIDAsIG1vZGUt PmhkaXNwbGF5IC0gMSk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoY3R4LT5kZXYsICIlcyBm YWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IGh4ODM2OWFfZHNpX3NldF9wYWdlX2FkZHJlc3Moc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sK KwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5k ZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gY3R4LT5wZC0+bW9k ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9wYWdlX2FkZHJlc3MoZHNp LCAwLCBtb2RlLT52ZGlzcGxheSAtIDEpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGN0eC0+ ZGV2LCAiJXMgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBoeDgzNjlhX2RzaV93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3Moc3RydWN0 IGh4ODM2OWEgKmN0eCwKKwkJCQkJCXU4IGJyaWdodG5lc3MpCit7CisJcmV0dXJuIGh4ODM2OWFf ZGNzX3dyaXRlX3NlcShjdHgsIFdSRElTQlYsIGJyaWdodG5lc3MpOworfQorCitzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX3dyaXRlX2NhYmMoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlyZXR1cm4g aHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFdSQ0FCQywgMHgwMSk7Cit9CisKK3N0 YXRpYyBpbnQgaHg4MzY5YV9kc2lfd3JpdGVfY29udHJvbF9kaXNwbGF5KHN0cnVjdCBoeDgzNjlh ICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBXUkNU UkxELCAweDI0KTsKK30KKworI2RlZmluZSBoeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJl dCwgbmFtZSkgXAorKHsgXAorCXJldCA9IGh4ODM2OWFfZHNpXyMjbmFtZShjdHgpOyBcCisJaWYg KHJldCA8IDApIFwKKwkJcmV0dXJuIHJldDsgXAorfSkKKworc3RhdGljIGludCBoeDgzNjlhX2Rz aV9wYW5lbF9pbml0KHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJaW50IHJldDsKKworCWh4ODM2 OWFfZHNpX2luaXRfaGVscGVyKGN0eCwgcmV0LCBzZXRfZGlzcGxheV9yZWxhdGVkX3JlZ2lzdGVy KTsKKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgc2V0X2Rpc3BsYXlfd2F2ZWZv cm1fY3ljbGUpOworCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0eCwgcmV0LCBzZXRfZ2lwKTsK KwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgc2V0X3Bvd2VyKTsKKwloeDgzNjlh X2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgc2V0X3Zjb21fdm9sdGFnZSk7CisJaHg4MzY5YV9k c2lfaW5pdF9oZWxwZXIoY3R4LCByZXQsIHNldF9wYW5lbCk7CisJaHg4MzY5YV9kc2lfaW5pdF9o ZWxwZXIoY3R4LCByZXQsIHNldF9nYW1tYV9jdXJ2ZSk7CisJaHg4MzY5YV9kc2lfaW5pdF9oZWxw ZXIoY3R4LCByZXQsIHNldF9taXBpKTsKKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJl dCwgc2V0X2ludGVyZmFjZV9waXhlbF9mb21hdCk7CisJaHg4MzY5YV9kc2lfaW5pdF9oZWxwZXIo Y3R4LCByZXQsIHNldF9jb2x1bW5fYWRkcmVzcyk7CisJaHg4MzY5YV9kc2lfaW5pdF9oZWxwZXIo Y3R4LCByZXQsIHNldF9wYWdlX2FkZHJlc3MpOworCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0 eCwgcmV0LCB3cml0ZV9jYWJjKTsKKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwg d3JpdGVfY29udHJvbF9kaXNwbGF5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh4 ODM2OWFfZHNpX3NldF9leHRlbnNpb25fY29tbWFuZChzdHJ1Y3QgaHg4MzY5YSAqY3R4KQorewor CXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VURVhUQywgMHhmZiwg MHg4MywgMHg2OSk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X21heGltdW1fcmV0 dXJuX3BhY2tldF9zaXplKHN0cnVjdCBoeDgzNjlhICpjdHgsCisJCQkJCQkgICAgICB1MTYgc2l6 ZSkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2Uo Y3R4LT5kZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9zZXRfbWF4aW11bV9yZXR1 cm5fcGFja2V0X3NpemUoZHNpLCBzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihjdHgt PmRldiwKKwkJCSJlcnJvciAlZCBzZXR0aW5nIG1heGltdW0gcmV0dXJuIHBhY2tldCBzaXplIHRv ICVkXG4iLAorCQkJcmV0LCBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGh4 ODM2OWFfZHNpX3NldF9zZXF1ZW5jZShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCXN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisJaW50 IHJldDsKKworCXJldCA9IGh4ODM2OWFfZHNpX3NldF9leHRlbnNpb25fY29tbWFuZChjdHgpOwor CWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IGh4ODM2OWFfZHNpX3NldF9tYXhp bXVtX3JldHVybl9wYWNrZXRfc2l6ZShjdHgsIDQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91 dDsKKworCXJldCA9IGh4ODM2OWFfZHNpX3BhbmVsX2luaXQoY3R4KTsKKwlpZiAocmV0IDwgMCkK KwkJZ290byBvdXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3NfZXhpdF9zbGVlcF9tb2RlKGRzaSk7 CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBleGl0IHNs ZWVwIG1vZGU6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBtaXBpX2Rz aV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGN0 eC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBkaXNwbGF5IG9uOiAlZFxuIiwgcmV0KTsKKwkJZ290byBv dXQ7CisJfQorCisJLyoKKwkgKiBJdCdzIG5lY2Vzc2FyeSB0byB3YWl0IDEyMG1zZWMgYWZ0ZXIg c2VuZGluZyB0aGUgU2xlZXAgT3V0CisJICogY29tbWFuZCBiZWZvcmUgU2xlZXAgSW4gY29tbWFu ZCBjYW4gYmUgc2VudCwgYWNjb3JkaW5nIHRvCisJICogdGhlIEhYODM2OUEgZGF0YSBzaGVldC4K KwkgKi8KKwltc2xlZXAoMTIwKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0 IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwpOworCXJldHVybiBoeDgzNjlh X2RzaV93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3MoY3R4LCBIWDgzNjlBX01JTl9CUklHSFRORVNT KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV91bnByZXBhcmUoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCit7CisJc3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFu ZWwpOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShj dHgtPmRldik7CisJaW50IHJldDsKKworCXJldCA9IG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVlcF9t b2RlKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0 byBlbnRlciBzbGVlcCBtb2RlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0 ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJ CWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gc2V0IGRpc3BsYXkgb2ZmOiAlZFxuIiwgcmV0 KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIHRvIGFsbG93IHRpbWUgZm9y IHRoZSBzdXBwbHkgdm9sdGFnZXMgYW5kIGNsb2NrCisJICogY2lyY3VpdHMgdG8gc3RhYmxpemUs IGFjY29yZGluZyB0byB0aGUgSFg4MzY5QSBkYXRhIHNoZWV0LgorCSAqLworCW1zbGVlcCg1KTsK K291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3ByZXBhcmUo c3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVs X3RvX2h4ODM2OWEocGFuZWwpOworCXJldHVybiBoeDgzNjlhX2RzaV9zZXRfc2VxdWVuY2UoY3R4 KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAq cGFuZWwpCit7CisJc3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwp OworCXJldHVybiBoeDgzNjlhX2RzaV93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3MoY3R4LCBIWDgz NjlBX01BWF9CUklHSFRORVNTKTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2dldF9tb2Rlcyhz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcGFuZWwt PmRybTsKKwlzdHJ1Y3QgaHg4MzY5YSAqY3R4ID0gcGFuZWxfdG9faHg4MzY5YShwYW5lbCk7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm0gPSBjdHgtPnBkLT5tb2RlOworCisJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShk cm0sIG0pOworCWlmICghbW9kZSkgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGFk ZCBtb2RlICV1eCV1QCV1XG4iLAorCQkJbS0+aGRpc3BsYXksIG0tPnZkaXNwbGF5LCBtLT52cmVm cmVzaCk7CisJCXJldHVybiAwOworCX0KKworCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOworCW1v ZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVE OworCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnBjID0gODsKKwljb25uZWN0b3ItPmRpc3Bs YXlfaW5mby53aWR0aF9tbSA9IG1vZGUtPndpZHRoX21tOworCWNvbm5lY3Rvci0+ZGlzcGxheV9p bmZvLmhlaWdodF9tbSA9IG1vZGUtPmhlaWdodF9tbTsKKworCWRybV9tb2RlX3Byb2JlZF9hZGQo Y29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wYW5lbF9mdW5jcyBoeDgzNjlhX2RzaV9kcm1fZnVuY3MgPSB7CisJLmRpc2FibGUgPSBo eDgzNjlhX2RzaV9kaXNhYmxlLAorCS51bnByZXBhcmUgPSBoeDgzNjlhX2RzaV91bnByZXBhcmUs CisJLnByZXBhcmUgPSBoeDgzNjlhX2RzaV9wcmVwYXJlLAorCS5lbmFibGUgPSBoeDgzNjlhX2Rz aV9lbmFibGUsCisJLmdldF9tb2RlcyA9IGh4ODM2OWFfZ2V0X21vZGVzLAorfTsKKworc3RhdGlj IGludCBoeDgzNjlhX3Bvd2VyX29uKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJaW50IHJldDsK KworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMp LCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW1zbGVl cChjdHgtPnBkLT5wb3dlcl9vbl9kZWxheSk7CisKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNl dF9ncGlvLCAxKTsKKwl1c2xlZXBfcmFuZ2UoNTAsIDYwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4 LT5yZXNldF9ncGlvLCAwKTsKKworCW1zbGVlcChjdHgtPnBkLT5yZXNldF9kZWxheSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoeDgzNjlhX3Bvd2VyX29mZihzdHJ1Y3QgaHg4MzY5 YSAqY3R4KQoreworCXJldHVybiByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoY3R4 LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOzsKK30KKworc3RhdGljIHZvaWQgaHg4MzY5YV92 bV90b19yZXNfc2VsKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUgPSBjdHgtPnBkLT5tb2RlOworCisJc3dpdGNoIChtb2RlLT5oZGlz cGxheSkgeworCWNhc2UgNDgwOgorCQlzd2l0Y2ggKG1vZGUtPnZkaXNwbGF5KSB7CisJCWNhc2Ug ODY0OgorCQkJY3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzg2NDsKKwkJCWJyZWFrOwor CQljYXNlIDg1NDoKKwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2OUFfUkVTXzQ4MF84NTQ7CisJCQli cmVhazsKKwkJY2FzZSA4MDA6CisJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU180ODBfODAw OworCQkJYnJlYWs7CisJCWNhc2UgNjQwOgorCQkJY3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNf NDgwXzY0MDsKKwkJCWJyZWFrOworCQljYXNlIDcyMDoKKwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2 OUFfUkVTXzQ4MF83MjA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJ CWJyZWFrOworCWNhc2UgMzYwOgorCQlpZiAobW9kZS0+dmRpc3BsYXkgPT0gNjQwKQorCQkJY3R4 LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfMzYwXzY0MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ YnJlYWs7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgdHJ1 bHlfdGZ0NDgwODAwXzE2X2VfbW9kZSA9IHsKKwkuY2xvY2sgPSAyNjQwMCwKKwkuaGRpc3BsYXkg PSA0ODAsCisJLmhzeW5jX3N0YXJ0ID0gNDgwICsgOCwKKwkuaHN5bmNfZW5kID0gNDgwICsgOCAr IDgsCisJLmh0b3RhbCA9IDQ4MCArIDggKyA4ICsgOCwKKwkudmRpc3BsYXkgPSA4MDAsCisJLnZz eW5jX3N0YXJ0ID0gODAwICsgNiwKKwkudnN5bmNfZW5kID0gODAwICsgNiArIDYsCisJLnZ0b3Rh bCA9IDgwMCArIDYgKyA2ICsgNiwKKwkudnJlZnJlc2ggPSA2MCwKKwkud2lkdGhfbW0gPSA0NSwK KwkuaGVpZ2h0X21tID0gNzYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh4ODM2OWFfcGFu ZWxfZGVzYyB0cnVseV90ZnQ0ODA4MDBfMTZfZV9kc2kgPSB7CisJLm1vZGUgPSAmdHJ1bHlfdGZ0 NDgwODAwXzE2X2VfbW9kZSwKKwkucG93ZXJfb25fZGVsYXkgPSAxMCwKKwkucmVzZXRfZGVsYXkg PSAxMCwKKwkuZHNpX2xhbmVzID0gMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIGh4ODM2OWFfZHNpX29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJ0 cnVseSx0ZnQ0ODA4MDAtMTYtZS1kc2kiLAorCQkuZGF0YSA9ICZ0cnVseV90ZnQ0ODA4MDBfMTZf ZV9kc2ksCisJfSwgeworCQkvKiBzZW50aW5lbCAqLworCX0sCit9OworTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgaHg4MzY5YV9kc2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IGh4ODM2OWFfZHNp X3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmZHNpLT5kZXY7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQorCQkJ b2ZfbWF0Y2hfZGV2aWNlKGh4ODM2OWFfZHNpX29mX21hdGNoLCBkZXYpOworCXN0cnVjdCBoeDgz NjlhICpjdHg7CisJaW50IHJldCwgaTsKKworCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJ Y3R4LT5kZXYgPSBkZXY7CisKKwlpZiAob2ZfaWQpIHsKKwkJY3R4LT5wZCA9IG9mX2lkLT5kYXRh OworCX0gZWxzZSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgY29tcGF0aWJsZSBkZXZp Y2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwloeDgzNjlhX3ZtX3RvX3Jlc19zZWwo Y3R4KTsKKworCWN0eC0+c3VwcGxpZXNbMF0uc3VwcGx5ID0gInZkZDEiOworCWN0eC0+c3VwcGxp ZXNbMV0uc3VwcGx5ID0gInZkZDIiOworCWN0eC0+c3VwcGxpZXNbMl0uc3VwcGx5ID0gInZkZDMi OworCWN0eC0+c3VwcGxpZXNbM10uc3VwcGx5ID0gImRzaS12Y2MiOworCWN0eC0+c3VwcGxpZXNb NF0uc3VwcGx5ID0gInZwcCI7CisJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBB UlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLAorCQkJCSAgICAgIGN0eC0+c3VwcGxpZXMpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yczog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY3R4LT5yZXNldF9ncGlvID0gZGV2 bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGN0 eC0+cmVzZXRfZ3BpbykpIHsKKwkJZGV2X2luZm8oZGV2LCAiY2Fubm90IGdldCByZXNldC1ncGlv cyAlbGRcbiIsCisJCQkgUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pKTsKKwkJcmV0dXJuIFBUUl9F UlIoY3R4LT5yZXNldF9ncGlvKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJ CWN0eC0+YnNfZ3Bpb1tpXSA9IGRldm1fZ3Bpb2RfZ2V0X2luZGV4KGRldiwgImJzIiwgaSwKKwkJ CQkJCQlHUElPRF9PVVRfSElHSCk7CisJCWlmICghSVNfRVJSX09SX05VTEwoY3R4LT5ic19ncGlv W2ldKSkKKwkJCWRldl9kYmcoZGV2LCAiYnMlZC1ncGlvIGlzIGNvbmZpZ3VyZWRcbiIsIGkpOwor CX0KKworCXJldCA9IGh4ODM2OWFfcG93ZXJfb24oY3R4KTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRldiwgImNhbm5vdCBwb3dlciBvblxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJ ZHJtX3BhbmVsX2luaXQoJmN0eC0+cGFuZWwpOworCWN0eC0+cGFuZWwuZGV2ID0gZGV2OworCWN0 eC0+cGFuZWwuZnVuY3MgPSAmaHg4MzY5YV9kc2lfZHJtX2Z1bmNzOworCisJcmV0ID0gZHJtX3Bh bmVsX2FkZCgmY3R4LT5wYW5lbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlt aXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGN0eCk7CisKKwlkc2ktPmNoYW5uZWwgPSAwOworCWRz aS0+bGFuZXMgPSBjdHgtPnBkLT5kc2lfbGFuZXM7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9G TVRfUkdCODg4OworCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfAorCQkJ ICBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUIHwKKwkJCSAgTUlQSV9EU0lfTU9ERV9WSURFT19T WU5DX1BVTFNFOworCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOworCWlmIChyZXQgPCAwKQor CQlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgaHg4MzY5YV9kc2lfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkK K3sKKwlzdHJ1Y3QgaHg4MzY5YSAqY3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKwor CW1pcGlfZHNpX2RldGFjaChkc2kpOworCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOwor CXJldHVybiBoeDgzNjlhX3Bvd2VyX29mZihjdHgpOworfQorCitzdGF0aWMgc3RydWN0IG1pcGlf ZHNpX2RyaXZlciBoeDgzNjlhX2RzaV9kcml2ZXIgPSB7CisJLnByb2JlID0gaHg4MzY5YV9kc2lf cHJvYmUsCisJLnJlbW92ZSA9IGh4ODM2OWFfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJwYW5lbC1oeDgzNjlhLWRzaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGh4ODM2OWFf ZHNpX29mX21hdGNoLAorCX0sCit9OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcihoeDgzNjlhX2Rz aV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkhpbWF4IEhYODM2OUEgcGFuZWwgZHJp dmVyIik7CitNT0RVTEVfQVVUSE9SKCJMaXUgWWluZyA8WWluZy5MaXVAZnJlZXNjYWxlLmNvbT4i KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjIuMS4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=