From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v8 12/21] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Date: Wed, 31 Dec 2014 16:23:30 +0800 Message-ID: <1420014219-915-13-git-send-email-Ying.Liu@freescale.com> References: <1420014219-915-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: <1420014219-915-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 VGhpcyBwYXRjaCBhZGRzIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9zdCBjb250cm9s bGVyIGRyaXZlciBzdXBwb3J0LgpDdXJyZW50bHksIHRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGJ1 cnN0IHdpdGggc3luYyBwdWxzZXMgbW9kZSBvbmx5LgoKU2lnbmVkLW9mZi1ieTogTGl1IFlpbmcg PFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Ci0tLQp2Ny0+djg6CiAqIEZpeCB0aGUgZHJpdmVyJ3Mg S2NvbmZpZyBzbyB0aGF0IHdlIG1heSBwYXNzIHRoZSBhbGxtb2Rjb25maWcgZm9yIEFSTS4KCnY2 LT52NzoKICogTm9uZS4KCnY1LT52NjoKICogTWFrZSB0aGUgY2hlY2twYXRjaC5wbCBzY3JpcHQg YmUgaGFwcGllci4KCnY0LT52NToKICogUmVtb3ZlICdkc2ktPnBhbmVsID0gTlVMTDsnIGluIGR3 X21pcGlfZHNpX2hvc3RfZGV0YWNoKCkgdG8gYWRkcmVzcwogICBBbmRyemVqIEhhamRhJ3MgY29t bWVudC4KCnYzLT52NDoKICogTW92ZSB0aGUgcmVsZXZhbnQgZHQtYmluZGluZ3MgdG8gYSBzZXBh cmF0ZSBwYXRjaCB0byBhZGRyZXNzIFN0ZWZhbgogICBXYWhyZW4ncyBjb21tZW50LgoKdjItPnYz OgogKiBOZXdseSBpbnRyb2R1Y2VkIGluIHYzIHRvIGFkZHJlc3MgQW5keSBZYW4ncyBjb21tZW50 LiAgVGhpcyBpcyBiYXNlZCBvbgogICB0aGUgaS5NWCBNSVBJIERTSSBkcml2ZXIgaW4gdjIuICBU byBtYWtlIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIE1JUEkgRFNJCiAgIGhvc3QgY29udHJvbGxl ciBkcml2ZXIgbGVzcyBwbGF0Zm9ybS1kZXBlbmRhbnQsIHRoaXMgcGF0Y2ggcGxhY2VzIGl0IGF0 CiAgIHRoZSBkcm0vYnJpZGdlIGRpcmVjdG9yeSBhcyBhIERSTSBicmlkZ2UgZHJpdmVyLgoKIGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICB8ICAxMCArCiBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL01ha2VmaWxlICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9k d19taXBpX2RzaS5jIHwgOTk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBp bmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaCAgICAgfCAgMjcgKwogNCBmaWxlcyBjaGFu Z2VkLCAxMDM0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL2R3X21pcGlfZHNpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9i cmlkZ2UvZHdfbWlwaV9kc2kuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwppbmRleCA4ODQ5MjNmLi4z MThiMzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCkBAIC0xLDMgKzEsMTMgQEAKK2NvbmZpZyBE Uk1fRFdfTUlQSV9EU0kKKwl0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNSVBJIERTSSBo b3N0IGNvbnRyb2xsZXIgYnJpZGdlIgorCWRlcGVuZHMgb24gRFJNCisJc2VsZWN0IERSTV9LTVNf SEVMUEVSCisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUwKKwloZWxwCisJ ICBDaG9vc2UgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUg TUlQSSBEU0kgaG9zdAorCSAgY29udHJvbGxlciBicmlkZ2UuCisKIGNvbmZpZyBEUk1fUFROMzQ2 MAogCXRyaXN0YXRlICJQVE4zNDYwIERQL0xWRFMgYnJpZGdlIgogCWRlcGVuZHMgb24gRFJNCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9NYWtlZmlsZQppbmRleCBiNDczM2UxLi5iMzI2YWQ1IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQog CitvYmotJChDT05GSUdfRFJNX0RXX01JUElfRFNJKSArPSBkd19taXBpX2RzaS5vCiBvYmotJChD T05GSUdfRFJNX1BUTjM0NjApICs9IHB0bjM0NjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBp X2RzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTRkNDQKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmMKQEAgLTAs MCArMSw5OTYgQEAKKy8qCisgKiBTeW5vcHN5cyBEZXNpZ25XYXJlKERXKSBNSVBJIERTSSBIb3N0 IENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBGcmVlc2NhbGUgU2Vt aWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk ZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 ZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5l bC5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorCisjZGVmaW5lIERTSV9WRVJT SU9OCQkJMHgwMAorCisjZGVmaW5lIERTSV9QV1JfVVAJCQkweDA0CisjZGVmaW5lIFJFU0VUCQkJ CTAKKyNkZWZpbmUgUE9XRVJVUAkJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfQ0xLTUdSX0NGRwkJ CTB4MDgKKyNkZWZpbmUgVE9fQ0xLX0RJVklEU0lPTihkaXYpCQkoKChkaXYpICYgMHhmZikgPDwg OCkKKyNkZWZpbmUgVFhfRVNDX0NMS19ESVZJRFNJT04oZGl2KQkoKChkaXYpICYgMHhmZikgPDwg MCkKKworI2RlZmluZSBEU0lfRFBJX0NGRwkJCTB4MGMKKyNkZWZpbmUgRU4xOF9MT09TRUxZCQkJ QklUKDEwKQorI2RlZmluZSBDT0xPUk1fQUNUSVZFX0xPVwkJQklUKDkpCisjZGVmaW5lIFNIVVRE X0FDVElWRV9MT1cJCUJJVCg4KQorI2RlZmluZSBIU1lOQ19BQ1RJVkVfTE9XCQlCSVQoNykKKyNk ZWZpbmUgVlNZTkNfQUNUSVZFX0xPVwkJQklUKDYpCisjZGVmaW5lIERBVEFFTl9BQ1RJVkVfTE9X CQlCSVQoNSkKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8xCSgweDAgPDwgMikKKyNk ZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8yCSgweDEgPDwgMikKKyNkZWZpbmUgRFBJX0NP TE9SX0NPRElOR18xNkJJVF8zCSgweDIgPDwgMikKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18x OEJJVF8xCSgweDMgPDwgMikKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xOEJJVF8yCSgweDQg PDwgMikKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18yNEJJVAkJKDB4NSA8PCAyKQorI2RlZmlu ZSBEUElfVklEKHZpZCkJCQkoKCh2aWQpICYgMHgzKSA8PCAwKQorCisjZGVmaW5lIERTSV9EQklf Q0ZHCQkJMHgxMAorI2RlZmluZSBEU0lfREJJU19DTURTSVpFCQkweDE0CisKKyNkZWZpbmUgRFNJ X1BDS0hETF9DRkcJCQkweDE4CisjZGVmaW5lIEdFTl9WSURfUlgodmlkKQkJCSgoKHZpZCkgJiAw eDMpIDw8IDUpCisjZGVmaW5lIEVOX0NSQ19SWAkJCUJJVCg0KQorI2RlZmluZSBFTl9FQ0NfUlgJ CQlCSVQoMykKKyNkZWZpbmUgRU5fQlRBCQkJCUJJVCgyKQorI2RlZmluZSBFTl9FT1ROX1JYCQkJ QklUKDEpCisjZGVmaW5lIEVOX0VPVFBfVFgJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfVklEX01P REVfQ0ZHCQkweDFjCisjZGVmaW5lIEZSQU1FX0JUQV9BQ0sJCQlCSVQoMTEpCisjZGVmaW5lIEVO X05VTExfUEtUCQkJQklUKDEwKQorI2RlZmluZSBFTl9OVUxMX1BLVF9NQVNLCQlCSVQoMTApCisj ZGVmaW5lIEVOX01VTFRJX1BLVAkJCUJJVCg5KQorI2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSCQko MHgzZiA8PCAzKQorI2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSX01BU0sJCSgweDNmIDw8IDMpCisj ZGVmaW5lIFZJRF9NT0RFX1RZUEVfTk9OQlVSU1RfU1lOQ19QVUxTRVMJKDB4MCA8PCAxKQorI2Rl ZmluZSBWSURfTU9ERV9UWVBFX05PTkJVUlNUX1NZTkNfRVZFTlRTCSgweDEgPDwgMSkKKyNkZWZp bmUgVklEX01PREVfVFlQRV9CVVJTVF9TWU5DX1BVTFNFUwkJKDB4MyA8PCAxKQorI2RlZmluZSBW SURfTU9ERV9UWVBFX01BU0sJCQkoMHgzIDw8IDEpCisjZGVmaW5lIEVOQUJMRV9WSURFT19NT0RF CQkJQklUKDApCisjZGVmaW5lIERJU0FCTEVfVklERU9fTU9ERQkJCTAKKyNkZWZpbmUgRU5BQkxF X1ZJREVPX01PREVfTUFTSwkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURfUEtUX0NGRwkJCTB4 MjAKKyNkZWZpbmUgTlVMTF9QS1RfU0laRShiKQkJKCgoYikgJiAweDNmKSA8PCAyMSkKKyNkZWZp bmUgTlVNX0NIVU5LUyhuKQkJCSgoKG4pICYgMHgzZikgPDwgMTEpCisjZGVmaW5lIFZJRF9QS1Rf U0laRShwKQkJCSgoKHApICYgMHg3ZmYpIDw8IDApCisjZGVmaW5lIFZJRF9QS1RfTUFYX1NJWkUJ CTB4N2ZmCisKKyNkZWZpbmUgRFNJX0NNRF9NT0RFX0NGRwkJMHgyNAorI2RlZmluZSBFTl9URUFS X0ZYCQkJQklUKDE0KQorI2RlZmluZSBFTl9BQ0tfUlFTVAkJCUJJVCgxMykKKyNkZWZpbmUgRENT X0xXX1RYX0xQCQkJQklUKDEyKQorI2RlZmluZSBHRU5fTFdfVFhfTFAJCQlCSVQoMTEpCisjZGVm aW5lIE1BWF9SRF9QS1RfU0laRV9MUAkJQklUKDEwKQorI2RlZmluZSBEQ1NfU1dfMlBfVFhfTFAJ CQlCSVQoOSkKKyNkZWZpbmUgRENTX1NXXzFQX1RYX0xQCQkJQklUKDgpCisjZGVmaW5lIERDU19T V18wUF9UWF9MUAkJCUJJVCg3KQorI2RlZmluZSBHRU5fU1JfMlBfVFhfTFAJCQlCSVQoNikKKyNk ZWZpbmUgR0VOX1NSXzFQX1RYX0xQCQkJQklUKDUpCisjZGVmaW5lIEdFTl9TUl8wUF9UWF9MUAkJ CUJJVCg0KQorI2RlZmluZSBHRU5fU1dfMlBfVFhfTFAJCQlCSVQoMykKKyNkZWZpbmUgR0VOX1NX XzFQX1RYX0xQCQkJQklUKDIpCisjZGVmaW5lIEdFTl9TV18wUF9UWF9MUAkJCUJJVCgxKQorI2Rl ZmluZSBFTkFCTEVfQ01EX01PREUJCQlCSVQoMCkKKyNkZWZpbmUgRElTQUJMRV9DTURfTU9ERQkJ MAorI2RlZmluZSBFTkFCTEVfQ01EX01PREVfTUFTSwkJQklUKDApCisjZGVmaW5lIENNRF9NT0RF X0FMTF9MUAkJCShEQ1NfTFdfVFhfTFAgfCBcCisJCQkJCSBHRU5fTFdfVFhfTFAgfCBcCisJCQkJ CSBNQVhfUkRfUEtUX1NJWkVfTFAgfCBcCisJCQkJCSBEQ1NfU1dfMlBfVFhfTFAgfCBcCisJCQkJ CSBEQ1NfU1dfMVBfVFhfTFAgfCBcCisJCQkJCSBEQ1NfU1dfMFBfVFhfTFAgfCBcCisJCQkJCSBH RU5fU1JfMlBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1JfMVBfVFhfTFAgfCBcCisJCQkJCSBHRU5f U1JfMFBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1dfMlBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1df MVBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1dfMFBfVFhfTFApCisKKyNkZWZpbmUgRFNJX1RNUl9M SU5FX0NGRwkJMHgyOAorI2RlZmluZSBITElORV9USU1FKGxiY2MpCQkoKChsYmNjKSAmIDB4M2Zm ZikgPDwgMTgpCisjZGVmaW5lIEhCUF9USU1FKGxiY2MpCQkJKCgobGJjYykgJiAweDFmZikgPDwg OSkKKyNkZWZpbmUgSFNBX1RJTUUobGJjYykJCQkoKChsYmNjKSAmIDB4MWZmKSA8PCAwKQorCisj ZGVmaW5lIERTSV9WVElNSU5HX0NGRwkJCTB4MmMKKyNkZWZpbmUgVl9BQ1RJVkVfTElORVMobGlu ZSkJCSgoKGxpbmUpICYgMHg3ZmYpIDw8IDE2KQorI2RlZmluZSBWRlBfTElORVMobGluZSkJCQko KChsaW5lKSAmIDB4M2YpIDw8IDEwKQorI2RlZmluZSBWQlBfTElORVMobGluZSkJCQkoKChsaW5l KSAmIDB4M2YpIDw8IDQpCisjZGVmaW5lIFZTQV9MSU5FUyhsaW5lKQkJCSgoKGxpbmUpICYgMHhm KSA8PCAwKQorCisjZGVmaW5lIERTSV9QSFlfVE1SX0NGRwkJCTB4MzAKKyNkZWZpbmUgUEhZX0hT MkxQX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwgMjApCisjZGVmaW5lIFBIWV9MUDJI U19USU1FKGxiY2MpCQkoKChsYmNjKSAmIDB4ZmYpIDw8IDEyKQorI2RlZmluZSBCVEFfVElNRShs YmNjKQkJCSgoKGxiY2MpICYgMHhmZmYpIDw8IDApCisKKyNkZWZpbmUgRFNJX0dFTl9IRFIJCQkw eDM0CisjZGVmaW5lIEdFTl9IREFUQShkYXRhKQkJCSgoKGRhdGEpICYgMHhmZmZmKSA8PCA4KQor I2RlZmluZSBHRU5fSERBVEFfTUFTSwkJCSgweGZmZmYgPDwgOCkKKyNkZWZpbmUgR0VOX0hUWVBF KHR5cGUpCQkJKCgodHlwZSkgJiAweGZmKSA8PCAwKQorI2RlZmluZSBHRU5fSFRZUEVfTUFTSwkJ CTB4ZmYKKworI2RlZmluZSBEU0lfR0VOX1BMRF9EQVRBCQkweDM4CisKKyNkZWZpbmUgRFNJX0NN RF9QS1RfU1RBVFVTCQkweDNjCisjZGVmaW5lIEdFTl9DTURfRU1QVFkJCQlCSVQoMCkKKyNkZWZp bmUgR0VOX0NNRF9GVUxMCQkJQklUKDEpCisjZGVmaW5lIEdFTl9QTERfV19FTVBUWQkJCUJJVCgy KQorI2RlZmluZSBHRU5fUExEX1dfRlVMTAkJCUJJVCgzKQorI2RlZmluZSBHRU5fUExEX1JfRU1Q VFkJCQlCSVQoNCkKKyNkZWZpbmUgR0VOX1JEX0NNRF9CVVNZCQkJQklUKDYpCisKKyNkZWZpbmUg RFNJX1RPX0NOVF9DRkcJCQkweDQwCisjZGVmaW5lIERTSV9FUlJPUl9TVDAJCQkweDQ0CisjZGVm aW5lIERTSV9FUlJPUl9TVDEJCQkweDQ4CisjZGVmaW5lIERTSV9FUlJPUl9NU0swCQkJMHg0Ywor I2RlZmluZSBEU0lfRVJST1JfTVNLMQkJCTB4NTAKKworI2RlZmluZSBEU0lfUEhZX1JTVFoJCQkw eDU0CisjZGVmaW5lIFBIWV9ESVNBQkxFQ0xLCQkJMAorI2RlZmluZSBQSFlfRU5BQkxFQ0xLCQkJ QklUKDIpCisjZGVmaW5lIFBIWV9SU1RaCQkJMAorI2RlZmluZSBQSFlfVU5SU1RaCQkJQklUKDEp CisjZGVmaW5lIFBIWV9TSFVURE9XTloJCQkwCisjZGVmaW5lIFBIWV9VTlNIVVRET1dOWgkJCUJJ VCgwKQorCisjZGVmaW5lIERTSV9QSFlfSUZfQ0ZHCQkJMHg1OAorI2RlZmluZSBOX0xBTkVTKG4p CQkJKCgoKG4pIC0gMSkgJiAweDMpIDw8IDApCisjZGVmaW5lIFBIWV9TVE9QX1dBSVRfVElNRShj eWNsZSkJKCgoY3ljbGUpICYgMHgzZmYpIDw8IDIpCisKKyNkZWZpbmUgRFNJX1BIWV9JRl9DVFJM CQkJMHg1YworI2RlZmluZSBQSFlfSUZfQ1RSTF9SRVNFVAkJMHgwCisjZGVmaW5lIFRYX1JFUV9D TEtfSFMJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfUEhZX1NUQVRVUwkJCTB4NjAKKyNkZWZpbmUg TE9DSwkJCQlCSVQoMCkKKyNkZWZpbmUgU1RPUF9TVEFURV9DTEtfTEFORQkJQklUKDIpCisKKyNk ZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDAJCTB4NjQKKyNkZWZpbmUgUEhZX1RFU1RDTEsJCQlCSVQo MSkKKyNkZWZpbmUgUEhZX1VOVEVTVENMSwkJCTAKKyNkZWZpbmUgUEhZX1RFU1RDTFIJCQlCSVQo MCkKKyNkZWZpbmUgUEhZX1VOVEVTVENMUgkJCTAKKworI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJM MQkJMHg2OAorI2RlZmluZSBQSFlfVEVTVEVOCQkJQklUKDE2KQorI2RlZmluZSBQSFlfVU5URVNU RU4JCQkwCisjZGVmaW5lIFBIWV9URVNURE9VVChuKQkJCSgoKG4pICYgMHhmZikgPDwgOCkKKyNk ZWZpbmUgUEhZX1RFU1RESU4obikJCQkoKChuKSAmIDB4ZmYpIDw8IDApCisKKyNkZWZpbmUgUEhZ X1NUQVRVU19USU1FT1VUCQkxMAorI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUCQkyMAor CitzdHJ1Y3QgZHdfbWlwaV9kc2kgeworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0Owor CXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXI7CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwlz dHJ1Y3QgY2xrICpwbGxyZWZfY2xrOworCXN0cnVjdCBjbGsgKmNmZ19jbGs7CisKKwl1bnNpZ25l ZCBpbnQgbGFuZV9tYnBzOyAvKiBwZXIgbGFuZSAqLworCXUzMiBjaGFubmVsOworCXUzMiBsYW5l czsKKwl1MzIgZm9ybWF0OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJY29u c3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGE7CisKKwlib29sIGVuYWJsZWQ7 Cit9OworCitlbnVtIHsKKwlTVEFUVVNfVE9fQ0xFQVIsCisJU1RBVFVTX1RPX1NFVCwKK307CisK K2VudW0gZHdfbWlwaV9kc2lfbW9kZSB7CisJRFdfTUlQSV9EU0lfQ01EX01PREUsCisJRFdfTUlQ SV9EU0lfVklEX01PREUsCit9OworCitzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgeworCXVu c2lnbmVkIGludCBtYXhfbWJwczsKKwl1OCB0ZXN0ZGluOworfTsKKworLyogVGhlIHRhYmxlIGlz IGJhc2VkIG9uIDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgZHB0ZGluX21hcFtdID0geworCXsxNjAsIDB4 MDR9LCB7MTgwLCAweDI0fSwgezIwMCwgMHg0NH0sIHsyMTAsIDB4MDZ9LAorCXsyNDAsIDB4MjZ9 LCB7MjUwLCAweDQ2fSwgezI3MCwgMHgwOH0sIHszMDAsIDB4Mjh9LAorCXszMzAsIDB4NDh9LCB7 MzYwLCAweDJhfSwgezQwMCwgMHg0YX0sIHs0NTAsIDB4MGN9LAorCXs1MDAsIDB4MmN9LCB7NTUw LCAweDBlfSwgezYwMCwgMHgyZX0sIHs2NTAsIDB4MTB9LAorCXs3MDAsIDB4MzB9LCB7NzUwLCAw eDEyfSwgezgwMCwgMHgzMn0sIHs4NTAsIDB4MTR9LAorCXs5MDAsIDB4MzR9LCB7OTUwLCAweDU0 fSwgezEwMDAsIDB4NzR9Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAq aG9zdF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihob3N0LCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGRzaV9ob3N0KTsKK30KKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmNvbl90b19kc2koc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbiwgc3RydWN0IGR3X21pcGlfZHNp LCBjb25uZWN0b3IpOworfQorCitpbnQgZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJfcGl4ZWxfZm9y bWF0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSA9IGVuY29kZXItPmJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXR1cm4gZHNpLT5m b3JtYXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV9nZXRfZW5jb2Rlcl9waXhl bF9mb3JtYXQpOworCitzdGF0aWMgaW50IG1heF9tYnBzX3RvX3Rlc3RkaW4odW5zaWduZWQgaW50 IG1heF9tYnBzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB0 ZGluX21hcCk7IGkrKykKKwkJaWYgKGRwdGRpbl9tYXBbaV0ubWF4X21icHMgPT0gbWF4X21icHMp CisJCQlyZXR1cm4gZHB0ZGluX21hcFtpXS50ZXN0ZGluOworCisJcmV0dXJuIC1FSU5WQUw7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ks IHUzMiByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgZHNpLT5iYXNlICsgcmVnKTsKK30K Kworc3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUz MiByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBkc2lfbW9kaWZ5KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLAor CQkJICAgICAgdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJdTMyIHY7CisKKwl2ID0gcmVhZGwoZHNp LT5iYXNlICsgcmVnKTsKKwl2ICY9IH5tYXNrOworCXYgfD0gdmFsOworCXdyaXRlbCh2LCBkc2kt PmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N0YXR1cyhzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHN0YXR1cywKKwkJCXVuc2lnbmVkIGludCB0aW1lb3V0 LCBib29sIHRvX3NldCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlib29sIG91dDsKKwl1 MzIgdmFsOworCisJZXhwaXJlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7 CisJZm9yICg7OykgeworCQl2YWwgPSBkc2lfcmVhZChkc2ksIHJlZyk7CisJCW91dCA9IHRvX3Nl dCA/ICgodmFsICYgc3RhdHVzKSA9PSBzdGF0dXMpIDogISh2YWwgJiBzdGF0dXMpOworCQlpZiAo b3V0KQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZXhwaXJlKSkKKwkJ CXJldHVybiAtRVRJTUVET1VUOworCisJCWNwdV9yZWxheCgpOworCX0KKworCXJldHVybiAwOwor fQorCisvKgorICogVGhlIGNvbnRyb2xsZXIgc2hvdWxkIGdlbmVyYXRlIDIgZnJhbWVzIGJlZm9y ZQorICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFsLgorICovCitzdGF0aWMgdm9pZCBkd19taXBp X2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXVu c2lnbmVkIGxvbmcgZXhwaXJlOworCWludCByZWZyZXNoLCB0d29fZnJhbWVzOworCisJcmVmcmVz aCA9IGRybV9tb2RlX3ZyZWZyZXNoKGRzaS0+bW9kZSk7CisJdHdvX2ZyYW1lcyA9IERJVl9ST1VO RF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKKworCWV4cGlyZSA9IGppZmZpZXMgKyBt c2Vjc190b19qaWZmaWVzKHR3b19mcmFtZXMpOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVz LCBleHBpcmUpKQorCQljcHVfcmVsYXgoKTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9j b25maWdfdGVzdGRpbihzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlpbnQgcmV0LCB0ZXN0 ZGluOworCisJdGVzdGRpbiA9IG1heF9tYnBzX3RvX3Rlc3RkaW4oZHNpLT5sYW5lX21icHMpOwor CWlmICh0ZXN0ZGluIDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJImZhaWxlZCB0byBn ZXQgdGVzdGRpbiBmb3IgJWRtYnBzIGxhbmUgY2xvY2tcbiIsCisJCQlkc2ktPmxhbmVfbWJwcyk7 CisJCXJldHVybiB0ZXN0ZGluOworCX0KKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RS TCwgUEhZX0lGX0NUUkxfUkVTRVQpOworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VS VVApOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsg fCBQSFlfVU5URVNUQ0xSKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZ X1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4oMHg0NCkpOwor CWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRF U1RDTFIpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xL IHwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBI WV9VTlRFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdGRp bikpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBI WV9VTlRFU1RDTFIpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5U RVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCAg ICAgIFBIWV9FTkFCTEVDTEsgfCBQSFlfVU5SU1RaIHwKKwkJCQkJICBQSFlfVU5TSFVURE9XTlop OworCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERTSV9QSFlfU1RBVFVTLCBMT0NLLAorCQkJICAg UEhZX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9fU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdhaXQgZm9yIHBoeSBsb2NrIHN0YXRlXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX1BIWV9TVEFU VVMsIFNUT1BfU1RBVEVfQ0xLX0xBTkUsCisJCQkgICBQSFlfU1RBVFVTX1RJTUVPVVQsIFNUQVRV U19UT19TRVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsCisJCQkiZmFp bGVkIHRvIHdhaXQgZm9yIHBoeSBjbGsgbGFuZSBzdG9wIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dldF9s YW5lX2JwcyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpm aW5hbF9tYnBzKQoreworCWludCBicHAsIGk7CisJdW5zaWduZWQgaW50IHRhcmdldF9tYnBzLCBt cGNsazsKKwl1bnNpZ25lZCBsb25nIHBsbHJlZjsKKworCWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zv cm1hdF90b19icHAoZHNpLT5mb3JtYXQpOworCWlmIChicHAgPCAwKSB7CisJCWRldl9lcnIoZHNp LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGJwcCBmb3IgcGl4ZWwgZm9ybWF0ICVkXG4iLAorCQkJZHNp LT5mb3JtYXQpOworCQlyZXR1cm4gYnBwOworCX0KKworCXBsbHJlZiA9IGNsa19nZXRfcmF0ZShk c2ktPnBsbHJlZl9jbGspOworCWlmIChwbGxyZWYgIT0gMjcwMDAwMDApCisJCWRldl93YXJuKGRz aS0+ZGV2LCAiZXhwZWN0IDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9ja1xuIik7CisKKwlt cGNsayA9IERJVl9ST1VORF9VUChkc2ktPm1vZGUtPmNsb2NrLCBNU0VDX1BFUl9TRUMpOworCWlm IChtcGNsaykgeworCQkvKiB0YWtlIDEvMC43IGJsYW5raW5nIG92ZXJoZWFkIGludG8gY29uc2lk ZXJhdGlvbiAqLworCQl0YXJnZXRfbWJwcyA9IChtcGNsayAqIChicHAgLyBkc2ktPmxhbmVzKSAq IDEwKSAvIDc7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhkc2ktPmRldiwgInVzZSBkZWZhdWx0IDFH YnBzIERQSFkgcGxsIGNsb2NrXG4iKTsKKwkJdGFyZ2V0X21icHMgPSAxMDAwOworCX0KKworCWRl dl9kYmcoZHNpLT5kZXYsICJ0YXJnZXQgRFBIWSBwbGwgY2xvY2sgZnJlcXVlbmN5IGlzICV1TWJw c1xuIiwKKwkJdGFyZ2V0X21icHMpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB0 ZGluX21hcCk7IGkrKykgeworCQlpZiAodGFyZ2V0X21icHMgPCBkcHRkaW5fbWFwW2ldLm1heF9t YnBzKSB7CisJCQkqZmluYWxfbWJwcyA9IGRwdGRpbl9tYXBbaV0ubWF4X21icHM7CisJCQlkZXZf ZGJnKGRzaS0+ZGV2LAorCQkJCSJyZWFsIERQSFkgcGxsIGNsb2NrIGZyZXF1ZW5jeSBpcyAldU1i cHNcbiIsCisJCQkJKmZpbmFsX21icHMpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlkZXZf ZXJyKGRzaS0+ZGV2LCAiRFBIWSBjbG9jayBmcmVxdWVuY3kgJXVNYnBzIGlzIG91dCBvZiByYW5n ZVxuIiwKKwkJCQkJCXRhcmdldF9tYnBzKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0 aWMgaW50IGR3X21pcGlfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAorCQkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJaWYgKGRldmljZS0+bGFuZXMg PiBkc2ktPnBkYXRhLT5tYXhfZGF0YV9sYW5lcykgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAidGhl IG51bWJlciBvZiBkYXRhIGxhbmVzKCVkKSBpcyB0b28gbWFueVxuIiwKKwkJCQlkZXZpY2UtPmxh bmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCEoZGV2aWNlLT5tb2RlX2ZsYWdz ICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgfHwKKwkgICAgIShkZXZpY2UtPm1vZGVfZmxh Z3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKSB7CisJCWRldl9lcnIoZHNpLT5k ZXYsICJkZXZpY2UgbW9kZSBpcyB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWlmIChkZXZpY2UtPmZvcm1hdCAhPSBNSVBJX0RTSV9GTVRfUkdCODg4ICYmCisJICAg IGRldmljZS0+Zm9ybWF0ICE9IE1JUElfRFNJX0ZNVF9SR0I1NjUpIHsKKwkJZGV2X2Vycihkc2kt PmRldiwgImRldmljZSBwaXhlbCBmb3JtYXQgaXMgdW5zdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmNoYW5u ZWwgPSBkZXZpY2UtPmNoYW5uZWw7CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKKwlk c2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zfbm9kZSk7CisJZHJt X3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3IpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNp X2hvc3QgKmhvc3QsCisJCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQorewor CXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisKKwlkcm1fcGFu ZWxfZGV0YWNoKGRzaS0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdf bWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiB2 YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERTSV9DTURfUEtU X1NUQVRVUywgR0VOX0NNRF9GVUxMLAorCQkJICAgQ01EX1BLVF9TVEFUVVNfVElNRU9VVCwgU1RB VFVTX1RPX0NMRUFSKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFp bGVkIHRvIGdldCBhdmFpbGFibGUgY29tbWFuZCBGSUZPXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgdmFsKTsKKworCXJldCA9IGNoZWNrX3N0 YXR1cyhkc2ksIERTSV9DTURfUEtUX1NUQVRVUywKKwkJCSAgIEdFTl9DTURfRU1QVFkgfCBHRU5f UExEX1dfRU1QVFksCisJCQkgICBDTURfUEtUX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9fU0VU KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRl IGNvbW1hbmQgRklGT1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJ Y29uc3QgdTE2ICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKCp0 eF9idWYpIHwgR0VOX0hUWVBFKG1zZy0+dHlwZSk7CisKKwlpZiAobXNnLT50eF9sZW4gPiAyKSB7 CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0b28gbG9uZyB0eCBidWYgbGVuZ3RoICVkIGZvciBzaG9y dCB3cml0ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ cmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsKK30KKworc3Rh dGljIGludCBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJY29uc3Qg dTMyICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsKKwlpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9k YXRhX2J5dGVzID0gc2l6ZW9mKCp0eF9idWYpLCByZXQ7CisJdTMyIHZhbCA9IEdFTl9IREFUQSht c2ctPnR4X2xlbikgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsKKwl1MzIgcmVtYWluZGVyID0gMDsK KworCWlmIChtc2ctPnR4X2xlbiA8IDMpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIndyb25nIHR4 IGJ1ZiBsZW5ndGggJWQgZm9yIGxvbmcgd3JpdGVcbiIsCisJCQltc2ctPnR4X2xlbik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXdoaWxlIChESVZfUk9VTkRfVVAobGVuLCBwbGRfZGF0YV9i eXRlcykpIHsKKwkJaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7CisJCQltZW1jcHkoJnJlbWFp bmRlciwgdHhfYnVmLCBsZW4pOworCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwg cmVtYWluZGVyKTsKKwkJCWxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlkc2lfd3JpdGUoZHNpLCBE U0lfR0VOX1BMRF9EQVRBLCAqdHhfYnVmKTsKKwkJCXR4X2J1ZisrOworCQkJbGVuIC09IHBsZF9k YXRhX2J5dGVzOworCQl9CisJCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERTSV9DTURfUEtUX1NU QVRVUywgR0VOX1BMRF9XX0ZVTEwsCisJCQkJICAgQ01EX1BLVF9TVEFUVVNfVElNRU9VVCwgU1RB VFVTX1RPX0NMRUFSKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZHNpLT5kZXYsCisJ CQkJImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIHdyaXRlIHBheWxvYWQgRklGT1xuIik7CisJCQly ZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dy aXRlKGRzaSwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgZHdfbWlwaV9kc2lfaG9zdF90cmFu c2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkJIGNvbnN0IHN0cnVjdCBtaXBp X2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNp KGhvc3QpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1zZy0+dHlwZSkgeworCWNhc2UgTUlQSV9E U0lfRENTX1NIT1JUX1dSSVRFOgorCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BBUkFN OgorCWNhc2UgTUlQSV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9TSVpFOgorCQlyZXQg PSBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOworCQlicmVhazsKKwljYXNl IE1JUElfRFNJX0RDU19MT05HX1dSSVRFOgorCQlyZXQgPSBkd19taXBpX2RzaV9kY3NfbG9uZ193 cml0ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZHNpLT5kZXYs ICJ1bnN1cHBvcnRlZCBtZXNzYWdlIHR5cGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMg ZHdfbWlwaV9kc2lfaG9zdF9vcHMgPSB7CisJLmF0dGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfYXR0 YWNoLAorCS5kZXRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNmZXIgPSBk d19taXBpX2RzaV9ob3N0X3RyYW5zZmVyLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMKK2R3X21pcGlfZHNpX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBib29sIGZvcmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK K30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVy KGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkd19taXBpX2RzaV9jb25uZWN0b3JfZnVu Y3MgPSB7CisJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVz ID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSBk d19taXBpX2RzaV9kZXRlY3QsCisJLmRlc3Ryb3kgPSBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9y X2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9k ZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0 X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgZHdf bWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGR3X21p cGlfZHNpICpkc2kgPSBjb25fdG9fZHNpKGNvbm5lY3Rvcik7CisKKwllbnVtIGRybV9tb2RlX3N0 YXR1cyBtb2RlX3N0YXR1cyA9IE1PREVfT0s7CisKKwlpZiAoZHNpLT5wZGF0YS0+bW9kZV92YWxp ZCkKKwkJbW9kZV9zdGF0dXMgPSBkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKGNvbm5lY3RvciwgbW9k ZSk7CisKKwlyZXR1cm4gbW9kZV9zdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29k ZXIgKmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCQkJCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBjb25f dG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHNpLT5lbmNvZGVyOworfQorCitzdGF0aWMg c3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9nZXRf bW9kZXMsCisJLm1vZGVfdmFsaWQgPSBkd19taXBpX2RzaV9tb2RlX3ZhbGlkLAorCS5iZXN0X2Vu Y29kZXIgPSBkd19taXBpX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IFZJRF9NT0RFX1RZUEVfQlVSU1RfU1lOQ19QVUxT RVMgfCBFTkFCTEVfTE9XX1BPV0VSOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9NT0RFX0NG RywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfc2V0X21vZGUoc3RydWN0IGR3 X21pcGlfZHNpICpkc2ksCisJCQkJIGVudW0gZHdfbWlwaV9kc2lfbW9kZSBtb2RlKQoreworCWlm IChtb2RlID09IERXX01JUElfRFNJX0NNRF9NT0RFKSB7CisJCWRzaV93cml0ZShkc2ksIERTSV9Q V1JfVVAsIFJFU0VUKTsKKwkJZHNpX21vZGlmeShkc2ksIERTSV9DTURfTU9ERV9DRkcsCisJCQkg ICBFTkFCTEVfQ01EX01PREVfTUFTSywgRU5BQkxFX0NNRF9NT0RFKTsKKwkJZHNpX21vZGlmeShk c2ksIERTSV9WSURfTU9ERV9DRkcsCisJCQkgICBFTkFCTEVfVklERU9fTU9ERV9NQVNLLCBESVNB QkxFX1ZJREVPX01PREUpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsK Kwl9IGVsc2UgeworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJCWRzaV9t b2RpZnkoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLAorCQkJICAgRU5BQkxFX0NNRF9NT0RFX01BU0ss IERJU0FCTEVfQ01EX01PREUpOworCisJCWR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRz aSk7CisKKwkJZHNpX21vZGlmeShkc2ksIERTSV9WSURfTU9ERV9DRkcsCisJCQkgICBFTkFCTEVf VklERU9fTU9ERV9NQVNLLCBFTkFCTEVfVklERU9fTU9ERSk7CisJCWRzaV93cml0ZShkc2ksIERT SV9QV1JfVVAsIFBPV0VSVVApOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX0lGX0NUUkwsIFRY X1JFUV9DTEtfSFMpOworCX0KK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJsZShz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX0lGX0NU UkwsIFBIWV9JRl9DVFJMX1JFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNF VCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfUlNUWik7Cit9CisKK3N0YXRp YyB2b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7 CisKKwlpZiAoZHNpLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljbGtfcHJlcGFyZV9lbmFibGUo ZHNpLT5jZmdfY2xrKTsKKwlkd19taXBpX2RzaV9jb25maWdfdGVzdGRpbihkc2kpOworCWR3X21p cGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUpOworCWR3X21pcGlfZHNp X3dhaXRfZm9yX3R3b19mcmFtZXMoZHNpKTsKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERX X01JUElfRFNJX0NNRF9NT0RFKTsKKwlkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKTsKKwlk d19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKwljbGtfZGlz YWJsZV91bnByZXBhcmUoZHNpLT5jZmdfY2xrKTsKKworCWRybV9wYW5lbF9lbmFibGUoZHNpLT5w YW5lbCk7CisKKwlkc2ktPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkd19taXBp X2RzaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVj dCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKwl1bnNpZ25lZCBs b25nIGV4cGlyZTsKKworCWlmICghZHNpLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlkcm1fcGFu ZWxfZGlzYWJsZShkc2ktPnBhbmVsKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNmZ19j bGspOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOwor CWRybV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUo ZHNpLCBEV19NSVBJX0RTSV9WSURfTU9ERSk7CisKKwkvKgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5 IHRvIG1ha2Ugc3VyZSB0aGUgcGVyaXBoZXJhbAorCSAqIHdpbGwgYmUgZHJpdmVuIG5vcm1hbGx5 IHdoZW4gdGhlIGRpc3BsYXkgaXMKKwkgKiBlbmFibGVkIGFnYWluIGxhdGVyLgorCSAqLworCWV4 cGlyZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEyMCk7CisJd2hpbGUgKHRpbWVfYmVm b3JlKGppZmZpZXMsIGV4cGlyZSkpCisJCWNwdV9yZWxheCgpOworCisJZHdfbWlwaV9kc2lfc2V0 X21vZGUoZHNpLCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHdfbWlwaV9kc2lfZGlzYWJsZShk c2kpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNmZ19jbGspOworCisJZHNpLT5lbmFi bGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9ub3BlKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJLyogZG8gbm90aGluZyAqLworfQorCitzdGF0 aWMgdm9pZCBkd19taXBpX2RzaV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRz aV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZ X1JTVFosIFBIWV9ESVNBQkxFQ0xLIHwgUEhZX1JTVFogfCBQSFlfU0hVVERPV05aKTsKKwlkc2lf d3JpdGUoZHNpLCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJVklEU0lPTigxKSB8CisJCQkJCVRY X0VTQ19DTEtfRElWSURTSU9OKDcpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBp X2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gMDsKKworCWlmICghKG1vZGUtPmZsYWdzICYg RFJNX01PREVfRkxBR19QVlNZTkMpKQorCQl2YWwgfD0gVlNZTkNfQUNUSVZFX0xPVzsKKwlpZiAo IShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKSkKKwkJdmFsIHw9IEhTWU5DX0FD VElWRV9MT1c7CisKKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRf UkdCODg4OgorCQl2YWwgfD0gRFBJX0NPTE9SX0NPRElOR18yNEJJVDsKKwkJYnJlYWs7CisJY2Fz ZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl2YWwgfD0gRFBJX0NPTE9SX0NPRElOR18xOEJJVF8y OworCQl2YWwgfD0gRU4xOF9MT09TRUxZOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9S R0I2NjZfUEFDS0VEOgorCQl2YWwgfD0gRFBJX0NPTE9SX0NPRElOR18xOEJJVF8xOworCQlicmVh azsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5H XzE2QklUXzE7CisJCWJyZWFrOworCX0KKworCXZhbCB8PSBEUElfVklEKGRzaS0+Y2hhbm5lbCk7 CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0NGRywgdmFsKTsKK30KKworc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp KQoreworCWRzaV93cml0ZShkc2ksIERTSV9QQ0tIRExfQ0ZHLCBFTl9DUkNfUlggfCBFTl9FQ0Nf UlggfCBFTl9CVEEpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19wYWNrZXRf Y29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9QS1RfQ0ZHLCBWSURf UEtUX1NJWkUobW9kZS0+aGRpc3BsYXkpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lf Y29tbWFuZF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLCBDTURfTU9ERV9BTExfTFAgfCBFTkFCTEVfQ01EX01P REUpOworfQorCisvKiBHZXQgbGFuZSBieXRlIGNsb2NrIGN5Y2xlcy4gKi8KK3N0YXRpYyB1NjQg ZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwK KwkJCQkJICAgdTY0IGhjb21wb25lbnQpCit7CisJdTY0IGZyYWMsIGxiY2M7CisKKwlsYmNjID0g aGNvbXBvbmVudCAqIGRzaS0+bGFuZV9tYnBzICogVVNFQ19QRVJfU0VDIC8gODsKKwlmcmFjID0g ZG9fZGl2KGxiY2MsIGRzaS0+bW9kZS0+Y2xvY2sgKiBNU0VDX1BFUl9TRUMpOworCWlmIChmcmFj KQorCQlsYmNjKys7CisKKwlyZXR1cm4gbGJjYzsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfbGluZV90aW1lcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZh bCA9IDAsIGh0b3RhbCwgaHNhLCBoYnAsIGxiY2M7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUgPSBkc2ktPm1vZGU7CisKKwlodG90YWwgPSBtb2RlLT5odG90YWw7CisJaHNhID0gbW9k ZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0gbW9kZS0+aHRvdGFsIC0g bW9kZS0+aHN5bmNfZW5kOworCisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xi Y2MoZHNpLCBodG90YWwpOworCXZhbCB8PSBITElORV9USU1FKGxiY2MpOworCisJbGJjYyA9IGR3 X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBoc2EpOworCXZhbCB8PSBIU0FfVElN RShsYmNjKTsKKworCWxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwg aGJwKTsKKwl2YWwgfD0gSEJQX1RJTUUobGJjYyk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVE1S X0xJTkVfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV92ZXJ0aWNhbF90 aW1pbmdfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXUzMiB2YWwsIHZhY3Rp dmUsIHZzYSwgdmZwLCB2YnA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2kt Pm1vZGU7CisKKwl2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7CisJdnNhID0gbW9kZS0+dnN5bmNf ZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2Rl LT52ZGlzcGxheTsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisKKwl2 YWwgPSBWX0FDVElWRV9MSU5FUyh2YWN0aXZlKSB8IFZTQV9MSU5FUyh2c2EpIHwKKwkgICAgICBW RlBfTElORVModmZwKSB8IFZCUF9MSU5FUyh2YnApOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZU SU1JTkdfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X3RpbWlu Z19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZhbDsKKworCXZhbCA9 IFBIWV9IUzJMUF9USU1FKDB4NDApIHwgUEhZX0xQMkhTX1RJTUUoMHg0MCkgfAorCSAgICAgIEJU QV9USU1FKDB4ZDAwKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0NGRywgdmFsKTsK K30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV9pbnRlcmZhY2VfY29uZmlnKHN0cnVj dCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ0ZHLCBQ SFlfU1RPUF9XQUlUX1RJTUUoMHgyMCkgfAorCQkJCQkJTl9MQU5FUyhkc2ktPmxhbmVzKSk7Cit9 CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NsZWFyX2VycihzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSkKK3sKKwlkc2lfcmVhZChkc2ksIERTSV9FUlJPUl9TVDApOworCWRzaV9yZWFkKGRzaSwg RFNJX0VSUk9SX1NUMSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0VSUk9SX01TSzAsIDApOworCWRz aV93cml0ZShkc2ksIERTSV9FUlJPUl9NU0sxLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZS0+ ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCWRzaS0+bW9kZSA9IG1vZGU7CisKKwlyZXQg PSBkd19taXBpX2RzaV9nZXRfbGFuZV9icHMoZHNpLCAmZHNpLT5sYW5lX21icHMpOworCWlmIChy ZXQgPCAwKQorCQlyZXR1cm47CisKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5jZmdfY2xrKTsK Kwlkd19taXBpX2RzaV9pbml0KGRzaSk7CisJZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhkc2ksIG1v ZGUpOworCWR3X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhkc2kpOworCWR3X21pcGlf ZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlkZW9fcGFja2V0X2Nv bmZpZyhkc2ksIG1vZGUpOworCWR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoZHNpKTsK Kwlkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX3ZlcnRp Y2FsX3RpbWluZ19jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWco ZHNpKTsKKwlkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoZHNpKTsKKwlkd19taXBp X2RzaV9jbGVhcl9lcnIoZHNpKTsKKwlkd19taXBpX2RzaV9jb25maWdfdGVzdGRpbihkc2kpOwor CWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoZHNpKTsKKwlkcm1fcGFuZWxfcHJlcGFy ZShkc2ktPnBhbmVsKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5jZmdfY2xrKTsKK30K Kworc3RhdGljIGJvb2wgZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKKwkJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs CisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfZGVzdHJveShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCWRybV9icmlkZ2VfY2xlYW51cChicmlkZ2UpOwor CWtmcmVlKGJyaWRnZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBkd19t aXBpX2RzaV9icmlkZ2VfZnVuY3MgPSB7CisJLmVuYWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9l bmFibGUsCisJLmRpc2FibGUgPSBkd19taXBpX2RzaV9icmlkZ2VfZGlzYWJsZSwKKwkucHJlX2Vu YWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9ub3BlLAorCS5wb3N0X2Rpc2FibGUgPSBkd19taXBp X2RzaV9icmlkZ2Vfbm9wZSwKKwkubW9kZV9zZXQgPSBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9z ZXQsCisJLm1vZGVfZml4dXAgPSBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9maXh1cCwKKwkuZGVz dHJveSA9IGR3X21pcGlfZHNpX2JyaWRnZV9kZXN0cm95LAorfTsKKworc3RhdGljIGludCBkd19t aXBpX2RzaV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBkc2ktPmVuY29kZXI7 CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlpbnQgcmV0OworCisJYnJpZGdlID0gZGV2 bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKmJyaWRnZSksIEdGUF9LRVJORUwpOworCWlmICgh YnJpZGdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzaS0+YnJpZGdlID0gYnJpZGdlOworCWJy aWRnZS0+ZHJpdmVyX3ByaXZhdGUgPSBkc2k7CisKKwlyZXQgPSBkcm1fYnJpZGdlX2luaXQoZHJt LCBicmlkZ2UsICZkd19taXBpX2RzaV9icmlkZ2VfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJZGV2 X2Vycihkcm0tPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGJyaWRnZSB3aXRoIGRybVxuIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJZW5jb2Rlci0+YnJpZGdlID0gYnJpZGdlOworCisJZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZkc2ktPmNvbm5lY3RvciwKKwkJCSZkd19taXBpX2RzaV9j b25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5j b25uZWN0b3IsICZkd19taXBpX2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9D T05ORUNUT1JfRFNJKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmZHNp LT5jb25uZWN0b3IsIGRzaS0+ZW5jb2Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGR3X21p cGlfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZv aWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgcmVz b3VyY2UgKnJlcywKKwkJICAgICBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpw ZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaTsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWRzaS0+cGRhdGEgPSBwZGF0YTsKKwlkc2ktPmRldiA9IGRldjsKKwlkc2ktPmRz aV9ob3N0Lm9wcyA9ICZkd19taXBpX2RzaV9ob3N0X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9 IGRldjsKKwlkc2ktPmVuY29kZXIgPSBlbmNvZGVyOworCisJZHNpLT5iYXNlID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRzaS0+YmFzZSkpCisJCXJldHVy biBQVFJfRVJSKGRzaS0+YmFzZSk7CisKKwlkc2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAicGxscmVmIik7CisJaWYgKElTX0VSUihkc2ktPnBsbHJlZl9jbGspKSB7CisJCXJldCA9 IFBUUl9FUlIoZHNpLT5wbGxyZWZfY2xrKTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0 IHBsbCByZWZlcmVuY2UgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlj bGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wbGxyZWZfY2xrKTsKKworCWRzaS0+Y2ZnX2NsayA9IGRl dm1fY2xrX2dldChkZXYsICJjb3JlX2NmZyIpOworCWlmIChJU19FUlIoZHNpLT5jZmdfY2xrKSkg eworCQlyZXQgPSBQVFJfRVJSKGRzaS0+Y2ZnX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxl IHRvIGdldCBjb25maWd1cmF0aW9uIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcGxs cmVmOworCX0KKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNmZ19jbGspOworCXZhbCA9IGRz aV9yZWFkKGRzaSwgRFNJX1ZFUlNJT04pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNm Z19jbGspOworCisJZGV2X2luZm8oZGV2LCAidmVyc2lvbiBudW1iZXIgaXMgMHglMDh4XG4iLCB2 YWwpOworCisJcmV0ID0gZHdfbWlwaV9kc2lfcmVnaXN0ZXIoZHJtLCBkc2kpOworCWlmIChyZXQp CisJCWdvdG8gZXJyX3BsbHJlZjsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7CisKKwly ZXR1cm4gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7CisKK2Vycl9wbGxy ZWY6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7CisJcmV0dXJuIHJl dDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGR3X21pcGlfZHNpX2JpbmQpOworCit2b2lkIGR3X21p cGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCisJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGR3X21pcGlfZHNpX3VuYmluZCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU3lub3BzeXMg RGVzaWduV2FyZSBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQVVU SE9SKCJMaXUgWWluZyA8WWluZy5MaXVAZnJlZXNjYWxlLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oIGIv aW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZTg0ZTM1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2JyaWRn ZS9kd19taXBpX2RzaS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19EV19NSVBJX0RTSV9fCisjZGVmaW5lIF9fRFdfTUlQ SV9EU0lfXworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKworc3RydWN0IGR3X21pcGlfZHNpX3Bs YXRfZGF0YSB7CisJdW5zaWduZWQgaW50IG1heF9kYXRhX2xhbmVzOworCWVudW0gZHJtX21vZGVf c3RhdHVzICgqbW9kZV92YWxpZCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJ CQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworfTsKKworaW50IGR3X21pcGlf ZHNpX2dldF9lbmNvZGVyX3BpeGVsX2Zvcm1hdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp OworCitpbnQgZHdfbWlwaV9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp Y2UgKm1hc3Rlciwgdm9pZCAqZGF0YSwKKwkJICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2Rz aV9wbGF0X2RhdGEgKnBkYXRhKTsKK3ZvaWQgZHdfbWlwaV9kc2lfdW5iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKTsKKyNlbmRpZgkvKiBf X0RXX01JUElfRFNJX18gKi8KLS0gCjIuMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=