From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v6.3 4/6] drm: rockchip: Support Synopsys DW MIPI DSI Date: Wed, 23 Dec 2015 11:43:35 +0800 Message-ID: <1450842215-10883-1-git-send-email-zyw@rock-chips.com> References: <1450260616-21160-5-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1450260616-21160-5-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: heiko@sntech.de, linux-rockchip@lists.infradead.org, mark.yao@rock-chips.com, treding@nvidia.com Cc: Chris Zhong , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgY29udHJvbGxlciB3 aGljaCBpcwplbWJlZGRlZCBpbiB0aGUgcmszMjg4IFNvQ3MuCgpTaWduZWQtb2ZmLWJ5OiBDaHJp cyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgotLS0KCkNoYW5nZXMgaW4gdjYuMzoKLSBtb3Zl IHRoZSBtaXBpX2VuIGdhdGUgdG8gb2NrY2hpcF9kcm1fY3J0Y19tb2RlX2NvbmZpZwoKQ2hhbmdl cyBpbiB2Ni4yOgotIFJlbW92ZSB0aGUgYXRvbWljIGZlYXR1cmUgY2hlY2sgKE1hcmsgWWFvKQoK Q2hhbmdlcyBpbiB2Ni4xOgotIEFkZCBhdG9taWMgQVBJIHN1cHBvcnQgKEhlaWtvIFN0w7xibmUp CgpDaGFuZ2VzIGluIHY2OgotIERvIG5vdCB1c2UgYnJpZGdlIGRyaXZlciAoVGhpZXJyeSBSZWRp bmcpCi0gT3B0aW1pemF0aW9uIHRoZSBwaHkgaW5pdCBzZXF1ZW5jZQoKQ2hhbmdlcyBpbiB2NTog Tm9uZQpDaGFuZ2VzIGluIHY0OiBOb25lCkNoYW5nZXMgaW4gdjM6IE5vbmUKCiBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgICAgICAgIHwgICAxMCArCiBkcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvZHctbWlwaS1kc2kuYyAgICAgIHwgMTE5NiArKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgfCAgICAz ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTIxMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9LY29uZmlnCmluZGV4IDY4NmNiNDkuLjFkYjFiODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29u ZmlnCkBAIC0zNCwzICszNCwxMyBAQCBjb25maWcgUk9DS0NISVBfQU5BTE9HSVhfRFAKIAkgIFRo aXMgc2VsZWN0cyBzdXBwb3J0IGZvciBSb2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5zaW9ucwog CSAgZm9yIHRoZSBBbmFsb2dpeCBDb3JlIERQIGRyaXZlci4gSWYgeW91IHdhbnQgdG8gZW5hYmxl IERQCiAJICBvbiBSSzMyODggYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGV0IHRoaXMgb3B0aW9u LgorCitjb25maWcgUk9DS0NISVBfRFdfTUlQSV9EU0kKKwlib29sICJSb2NrY2hpcCBzcGVjaWZp YyBleHRlbnNpb25zIGZvciBTeW5vcHN5cyBEVyBNSVBJIERTSSIKKwlkZXBlbmRzIG9uIERSTV9S T0NLQ0hJUAorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwloZWxwCisJIFRoaXMgc2VsZWN0cyBzdXBw b3J0IGZvciBSb2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5zaW9ucworCSBmb3IgdGhlIFN5bm9w c3lzIERlc2lnbldhcmUgSERNSSBkcml2ZXIuIElmIHlvdSB3YW50IHRvCisJIGVuYWJsZSBNSVBJ IERTSSBvbiBSSzMyODggYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGV0IHRoaXMKKwkgb3B0aW9u LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCmluZGV4IDhhZDAxZmIuLmM1YzJkNjEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKQEAgLTcsNSArNyw2IEBAIHJvY2tjaGlwZHJtLXkgOj0g cm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlwX2RybV9mYi5vIHJvY2tjaGlwX2RybV9mYmRldi5v IFwKIAogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0RXX0hETUkpICs9IGR3X2hkbWktcm9ja2NoaXAu bwogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeF9kcC1yb2Nr Y2hpcC5vCitvYmotJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNp Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9ST0NLQ0hJUCkgKz0gcm9ja2NoaXBkcm0ubyByb2NrY2hp cF9kcm1fdm9wLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBp LWRzaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlNjMxZQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCkBAIC0wLDAgKzEsMTE5NiBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENv LiwgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor ICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jl Z21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KKworI2luY2x1 ZGUgInJvY2tjaGlwX2RybV9kcnYuaCIKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fdm9wLmgiCisK KyNkZWZpbmUgRFJJVkVSX05BTUUgICAgImR3LW1pcGktZHNpIgorCisjZGVmaW5lIEdSRl9TT0Nf Q09ONiAgICAgICAgICAgICAgICAgICAgMHgwMjVjCisjZGVmaW5lIERTSTBfU0VMX1ZPUF9MSVQg ICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgRFNJMV9TRUxfVk9QX0xJVCAgICAgICAg ICAgICAgICAoMSA8PCA5KQorCisjZGVmaW5lIERTSV9WRVJTSU9OCQkJMHgwMAorI2RlZmluZSBE U0lfUFdSX1VQCQkJMHgwNAorI2RlZmluZSBSRVNFVAkJCQkwCisjZGVmaW5lIFBPV0VSVVAJCQkJ QklUKDApCisKKyNkZWZpbmUgRFNJX0NMS01HUl9DRkcJCQkweDA4CisjZGVmaW5lIFRPX0NMS19E SVZJRFNJT04oZGl2KQkJKCgoZGl2KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFRYX0VTQ19DTEtf RElWSURTSU9OKGRpdikJKCgoZGl2KSAmIDB4ZmYpIDw8IDApCisKKyNkZWZpbmUgRFNJX0RQSV9W Q0lECQkJMHgwYworI2RlZmluZSBEUElfVklEKHZpZCkJCQkoKCh2aWQpICYgMHgzKSA8PCAwKQor CisjZGVmaW5lIERTSV9EUElfQ09MT1JfQ09ESU5HCQkweDEwCisjZGVmaW5lIEVOMThfTE9PU0VM WQkJCUJJVCg4KQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzEJMHgwCisjZGVmaW5l IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMgkweDEKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18x NkJJVF8zCTB4MgorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzEJMHgzCisjZGVmaW5l IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMgkweDQKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18y NEJJVAkJMHg1CisKKyNkZWZpbmUgRFNJX0RQSV9DRkdfUE9MCQkJMHgxNAorI2RlZmluZSBDT0xP Uk1fQUNUSVZFX0xPVwkJQklUKDQpCisjZGVmaW5lIFNIVVREX0FDVElWRV9MT1cJCUJJVCgzKQor I2RlZmluZSBIU1lOQ19BQ1RJVkVfTE9XCQlCSVQoMikKKyNkZWZpbmUgVlNZTkNfQUNUSVZFX0xP VwkJQklUKDEpCisjZGVmaW5lIERBVEFFTl9BQ1RJVkVfTE9XCQlCSVQoMCkKKworI2RlZmluZSBE U0lfRFBJX0xQX0NNRF9USU0JCTB4MTgKKyNkZWZpbmUgT1VUVkFDVF9MUENNRF9USU1FKHApCQko KChwKSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBJTlZBQ1RfTFBDTURfVElNRShwKQkJKChwKSAm IDB4ZmYpCisKKyNkZWZpbmUgRFNJX0RCSV9DRkcJCQkweDIwCisjZGVmaW5lIERTSV9EQklfQ01E U0laRQkJCTB4MjgKKworI2RlZmluZSBEU0lfUENLSERMX0NGRwkJCTB4MmMKKyNkZWZpbmUgRU5f Q1JDX1JYCQkJQklUKDQpCisjZGVmaW5lIEVOX0VDQ19SWAkJCUJJVCgzKQorI2RlZmluZSBFTl9C VEEJCQkJQklUKDIpCisjZGVmaW5lIEVOX0VPVFBfUlgJCQlCSVQoMSkKKyNkZWZpbmUgRU5fRU9U UF9UWAkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9NT0RFX0NGRwkJCTB4MzQKKyNkZWZpbmUgRU5B QkxFX1ZJREVPX01PREUJCTAKKyNkZWZpbmUgRU5BQkxFX0NNRF9NT0RFCQkJQklUKDApCisKKyNk ZWZpbmUgRFNJX1ZJRF9NT0RFX0NGRwkJMHgzOAorI2RlZmluZSBGUkFNRV9CVEFfQUNLCQkJQklU KDE0KQorI2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSCQkoMHgzZiA8PCA4KQorI2RlZmluZSBFTkFC TEVfTE9XX1BPV0VSX01BU0sJCSgweDNmIDw8IDgpCisjZGVmaW5lIFZJRF9NT0RFX1RZUEVfQlVS U1RfU1lOQ19QVUxTRVMJCTB4MgorI2RlZmluZSBWSURfTU9ERV9UWVBFX01BU0sJCQkweDMKKwor I2RlZmluZSBEU0lfVklEX1BLVF9TSVpFCQkweDNjCisjZGVmaW5lIFZJRF9QS1RfU0laRShwKQkJ CSgoKHApICYgMHgzZmZmKSA8PCAwKQorI2RlZmluZSBWSURfUEtUX01BWF9TSVpFCQkweDNmZmYK KworI2RlZmluZSBEU0lfVklEX0hTQV9USU1FCQkweDQ4CisjZGVmaW5lIERTSV9WSURfSEJQX1RJ TUUJCTB4NGMKKyNkZWZpbmUgRFNJX1ZJRF9ITElORV9USU1FCQkweDUwCisjZGVmaW5lIERTSV9W SURfVlNBX0xJTkVTCQkweDU0CisjZGVmaW5lIERTSV9WSURfVkJQX0xJTkVTCQkweDU4CisjZGVm aW5lIERTSV9WSURfVkZQX0xJTkVTCQkweDVjCisjZGVmaW5lIERTSV9WSURfVkFDVElWRV9MSU5F UwkJMHg2MAorI2RlZmluZSBEU0lfQ01EX01PREVfQ0ZHCQkweDY4CisjZGVmaW5lIE1BWF9SRF9Q S1RfU0laRV9MUAkJQklUKDI0KQorI2RlZmluZSBEQ1NfTFdfVFhfTFAJCQlCSVQoMTkpCisjZGVm aW5lIERDU19TUl8wUF9UWF9MUAkJCUJJVCgxOCkKKyNkZWZpbmUgRENTX1NXXzFQX1RYX0xQCQkJ QklUKDE3KQorI2RlZmluZSBEQ1NfU1dfMFBfVFhfTFAJCQlCSVQoMTYpCisjZGVmaW5lIEdFTl9M V19UWF9MUAkJCUJJVCgxNCkKKyNkZWZpbmUgR0VOX1NSXzJQX1RYX0xQCQkJQklUKDEzKQorI2Rl ZmluZSBHRU5fU1JfMVBfVFhfTFAJCQlCSVQoMTIpCisjZGVmaW5lIEdFTl9TUl8wUF9UWF9MUAkJ CUJJVCgxMSkKKyNkZWZpbmUgR0VOX1NXXzJQX1RYX0xQCQkJQklUKDEwKQorI2RlZmluZSBHRU5f U1dfMVBfVFhfTFAJCQlCSVQoOSkKKyNkZWZpbmUgR0VOX1NXXzBQX1RYX0xQCQkJQklUKDgpCisj ZGVmaW5lIEVOX0FDS19SUVNUCQkJQklUKDEpCisjZGVmaW5lIEVOX1RFQVJfRlgJCQlCSVQoMCkK KworI2RlZmluZSBDTURfTU9ERV9BTExfTFAJCQkoTUFYX1JEX1BLVF9TSVpFX0xQIHwgXAorCQkJ CQkgRENTX0xXX1RYX0xQIHwgXAorCQkJCQkgRENTX1NSXzBQX1RYX0xQIHwgXAorCQkJCQkgRENT X1NXXzFQX1RYX0xQIHwgXAorCQkJCQkgRENTX1NXXzBQX1RYX0xQIHwgXAorCQkJCQkgR0VOX0xX X1RYX0xQIHwgXAorCQkJCQkgR0VOX1NSXzJQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NSXzFQX1RY X0xQIHwgXAorCQkJCQkgR0VOX1NSXzBQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NXXzJQX1RYX0xQ IHwgXAorCQkJCQkgR0VOX1NXXzFQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NXXzBQX1RYX0xQKQor CisjZGVmaW5lIERTSV9HRU5fSERSCQkJMHg2YworI2RlZmluZSBHRU5fSERBVEEoZGF0YSkJCQko KChkYXRhKSAmIDB4ZmZmZikgPDwgOCkKKyNkZWZpbmUgR0VOX0hEQVRBX01BU0sJCQkoMHhmZmZm IDw8IDgpCisjZGVmaW5lIEdFTl9IVFlQRSh0eXBlKQkJCSgoKHR5cGUpICYgMHhmZikgPDwgMCkK KyNkZWZpbmUgR0VOX0hUWVBFX01BU0sJCQkweGZmCisKKyNkZWZpbmUgRFNJX0dFTl9QTERfREFU QQkJMHg3MAorCisjZGVmaW5lIERTSV9DTURfUEtUX1NUQVRVUwkJMHg3NAorI2RlZmluZSBHRU5f Q01EX0VNUFRZCQkJQklUKDApCisjZGVmaW5lIEdFTl9DTURfRlVMTAkJCUJJVCgxKQorI2RlZmlu ZSBHRU5fUExEX1dfRU1QVFkJCQlCSVQoMikKKyNkZWZpbmUgR0VOX1BMRF9XX0ZVTEwJCQlCSVQo MykKKyNkZWZpbmUgR0VOX1BMRF9SX0VNUFRZCQkJQklUKDQpCisjZGVmaW5lIEdFTl9QTERfUl9G VUxMCQkJQklUKDUpCisjZGVmaW5lIEdFTl9SRF9DTURfQlVTWQkJCUJJVCg2KQorCisjZGVmaW5l IERTSV9UT19DTlRfQ0ZHCQkJMHg3OAorI2RlZmluZSBIU1RYX1RPX0NOVChwKQkJCSgoKHApICYg MHhmZmZmKSA8PCAxNikKKyNkZWZpbmUgTFBSWF9UT19DTlQocCkJCQkoKHApICYgMHhmZmZmKQor CisjZGVmaW5lIERTSV9CVEFfVE9fQ05UCQkJMHg4YworCisjZGVmaW5lIERTSV9MUENMS19DVFJM CQkJMHg5NAorI2RlZmluZSBBVVRPX0NMS0xBTkVfQ1RSTAkJQklUKDEpCisjZGVmaW5lIFBIWV9U WFJFUVVFU1RDTEtIUwkJQklUKDApCisKKyNkZWZpbmUgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHCQkw eDk4CisjZGVmaW5lIFBIWV9DTEtIUzJMUF9USU1FKGxiY2MpCQkoKChsYmNjKSAmIDB4M2ZmKSA8 PCAxNikKKyNkZWZpbmUgUEhZX0NMS0xQMkhTX1RJTUUobGJjYykJCSgobGJjYykgJiAweDNmZikK KworI2RlZmluZSBEU0lfUEhZX1RNUl9DRkcJCQkweDljCisjZGVmaW5lIFBIWV9IUzJMUF9USU1F KGxiY2MpCQkoKChsYmNjKSAmIDB4ZmYpIDw8IDI0KQorI2RlZmluZSBQSFlfTFAySFNfVElNRShs YmNjKQkJKCgobGJjYykgJiAweGZmKSA8PCAxNikKKyNkZWZpbmUgTUFYX1JEX1RJTUUobGJjYykJ CSgobGJjYykgJiAweDdmZmYpCisKKyNkZWZpbmUgRFNJX1BIWV9SU1RaCQkJMHhhMAorI2RlZmlu ZSBQSFlfRElTRk9SQ0VQTEwJCQkwCisjZGVmaW5lIFBIWV9FTkZPUkNFUExMCQkJQklUKDMpCisj ZGVmaW5lIFBIWV9ESVNBQkxFQ0xLCQkJMAorI2RlZmluZSBQSFlfRU5BQkxFQ0xLCQkJQklUKDIp CisjZGVmaW5lIFBIWV9SU1RaCQkJMAorI2RlZmluZSBQSFlfVU5SU1RaCQkJQklUKDEpCisjZGVm aW5lIFBIWV9TSFVURE9XTloJCQkwCisjZGVmaW5lIFBIWV9VTlNIVVRET1dOWgkJCUJJVCgwKQor CisjZGVmaW5lIERTSV9QSFlfSUZfQ0ZHCQkJMHhhNAorI2RlZmluZSBOX0xBTkVTKG4pCQkJKCgo KG4pIC0gMSkgJiAweDMpIDw8IDApCisjZGVmaW5lIFBIWV9TVE9QX1dBSVRfVElNRShjeWNsZSkJ KCgoY3ljbGUpICYgMHhmZikgPDwgOCkKKworI2RlZmluZSBEU0lfUEhZX1NUQVRVUwkJCTB4YjAK KyNkZWZpbmUgTE9DSwkJCQlCSVQoMCkKKyNkZWZpbmUgU1RPUF9TVEFURV9DTEtfTEFORQkJQklU KDIpCisKKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDAJCTB4YjQKKyNkZWZpbmUgUEhZX1RFU1RD TEsJCQlCSVQoMSkKKyNkZWZpbmUgUEhZX1VOVEVTVENMSwkJCTAKKyNkZWZpbmUgUEhZX1RFU1RD TFIJCQlCSVQoMCkKKyNkZWZpbmUgUEhZX1VOVEVTVENMUgkJCTAKKworI2RlZmluZSBEU0lfUEhZ X1RTVF9DVFJMMQkJMHhiOAorI2RlZmluZSBQSFlfVEVTVEVOCQkJQklUKDE2KQorI2RlZmluZSBQ SFlfVU5URVNURU4JCQkwCisjZGVmaW5lIFBIWV9URVNURE9VVChuKQkJCSgoKG4pICYgMHhmZikg PDwgOCkKKyNkZWZpbmUgUEhZX1RFU1RESU4obikJCQkoKChuKSAmIDB4ZmYpIDw8IDApCisKKyNk ZWZpbmUgRFNJX0lOVF9TVDAJCQkweGJjCisjZGVmaW5lIERTSV9JTlRfU1QxCQkJMHhjMAorI2Rl ZmluZSBEU0lfSU5UX01TSzAJCQkweGM0CisjZGVmaW5lIERTSV9JTlRfTVNLMQkJCTB4YzgKKwor I2RlZmluZSBQSFlfU1RBVFVTX1RJTUVPVVRfVVMJCTEwMDAwCisjZGVmaW5lIENNRF9QS1RfU1RB VFVTX1RJTUVPVVRfVVMJMjAwMDAKKworI2RlZmluZSBCWVBBU1NfVkNPX1JBTkdFCUJJVCg3KQor I2RlZmluZSBWQ09fUkFOR0VfQ09OX1NFTCh2YWwpCSgoKHZhbCkgJiAweDcpIDw8IDMpCisjZGVm aW5lIFZDT19JTl9DQVBfQ09OX0RFRkFVTFQJKDB4MCA8PCAxKQorI2RlZmluZSBWQ09fSU5fQ0FQ X0NPTl9MT1cJKDB4MSA8PCAxKQorI2RlZmluZSBWQ09fSU5fQ0FQX0NPTl9ISUdICSgweDIgPDwg MSkKKyNkZWZpbmUgUkVGX0JJQVNfQ1VSX1NFTAlCSVQoMCkKKworI2RlZmluZSBDUF9DVVJSRU5U XzNNQQkJQklUKDMpCisjZGVmaW5lIENQX1BST0dSQU1fRU4JCUJJVCg3KQorI2RlZmluZSBMUEZf UFJPR1JBTV9FTgkJQklUKDYpCisjZGVmaW5lIExQRl9SRVNJU1RPUlNfMjBfS09ITQkwCisKKyNk ZWZpbmUgSFNGUkVRUkFOR0VfU0VMKHZhbCkJKCgodmFsKSAmIDB4M2YpIDw8IDEpCisKKyNkZWZp bmUgSU5QVVRfRElWSURFUih2YWwpCSgodmFsIC0gMSkgJiAweDdmKQorI2RlZmluZSBMT1dfUFJP R1JBTV9FTgkJMAorI2RlZmluZSBISUdIX1BST0dSQU1fRU4JCUJJVCg3KQorI2RlZmluZSBMT09Q X0RJVl9MT1dfU0VMKHZhbCkJKCh2YWwgLSAxKSAmIDB4MWYpCisjZGVmaW5lIExPT1BfRElWX0hJ R0hfU0VMKHZhbCkJKCgodmFsIC0gMSkgPj4gNSkgJiAweDFmKQorI2RlZmluZSBQTExfTE9PUF9E SVZfRU4JCUJJVCg1KQorI2RlZmluZSBQTExfSU5QVVRfRElWX0VOCUJJVCg0KQorCisjZGVmaW5l IFBPV0VSX0NPTlRST0wJCUJJVCg2KQorI2RlZmluZSBJTlRFUk5BTF9SRUdfQ1VSUkVOVAlCSVQo MykKKyNkZWZpbmUgQklBU19CTE9DS19PTgkJQklUKDIpCisjZGVmaW5lIEJBTkRHQVBfT04JCUJJ VCgwKQorCisjZGVmaW5lIFRFUl9SRVNJU1RPUl9ISUdICUJJVCg3KQorI2RlZmluZQlURVJfUkVT SVNUT1JfTE9XCTAKKyNkZWZpbmUgTEVWRUxfU0hJRlRFUlNfT04JQklUKDYpCisjZGVmaW5lIFRF Ul9DQUxfRE9ORQkJQklUKDUpCisjZGVmaW5lIFNFVFJEX01BWAkJKDB4NyA8PCAyKQorI2RlZmlu ZSBQT1dFUl9NQU5BR0UJCUJJVCgxKQorI2RlZmluZSBURVJfUkVTSVNUT1JTX09OCUJJVCgwKQor CisjZGVmaW5lIEJJQVNFWFRSX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKKyNkZWZpbmUgQkFOREdB UF9TRUwodmFsKQkoKHZhbCkgJiAweDcpCisjZGVmaW5lIFRMUF9QUk9HUkFNX0VOCQlCSVQoNykK KyNkZWZpbmUgVEhTX1BSRV9QUk9HUkFNX0VOCUJJVCg3KQorI2RlZmluZSBUSFNfWkVST19QUk9H UkFNX0VOCUJJVCg2KQorCitlbnVtIHsKKwlCQU5ER0FQXzk3XzA3LAorCUJBTkRHQVBfOThfMDUs CisJQkFOREdBUF85OV8wMiwKKwlCQU5ER0FQXzEwMF8wMCwKKwlCQU5ER0FQXzkzXzE3LAorCUJB TkRHQVBfOTRfMTUsCisJQkFOREdBUF85NV8xMiwKKwlCQU5ER0FQXzk2XzEwLAorfTsKKworZW51 bSB7CisJQklBU0VYVFJfODdfMSwKKwlCSUFTRVhUUl85MV81LAorCUJJQVNFWFRSXzk1XzksCisJ QklBU0VYVFJfMTAwLAorCUJJQVNFWFRSXzEwNV85NCwKKwlCSUFTRVhUUl8xMTFfODgsCisJQklB U0VYVFJfMTE4XzgsCisJQklBU0VYVFJfMTI3XzcsCit9OworCitzdHJ1Y3QgZHdfbWlwaV9kc2lf cGxhdF9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFuZXM7CisJZW51bSBkcm1fbW9k ZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAor CQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit9OworCitzdHJ1Y3QgZHdf bWlwaV9kc2kgeworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVjdCBkcm1fY29u bmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBkc2lfaG9zdDsKKwlzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHJlZ21h cCAqZ3JmX3JlZ21hcDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwlzdHJ1Y3QgY2xrICpwbGxy ZWZfY2xrOworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwl1bnNpZ25lZCBpbnQgbGFuZV9tYnBzOyAv KiBwZXIgbGFuZSAqLworCXUzMiBjaGFubmVsOworCXUzMiBsYW5lczsKKwl1MzIgZm9ybWF0Owor CXUxNiBpbnB1dF9kaXY7CisJdTE2IGZlZWRiYWNrX2RpdjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZTsKKworCWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRh OworCit9OworCitlbnVtIGR3X21pcGlfZHNpX21vZGUgeworCURXX01JUElfRFNJX0NNRF9NT0RF LAorCURXX01JUElfRFNJX1ZJRF9NT0RFLAorfTsKKworc3RydWN0IGRwaHlfcGxsX3Rlc3RkaW5f bWFwIHsKKwl1bnNpZ25lZCBpbnQgbWF4X21icHM7CisJdTggdGVzdGRpbjsKK307CisKKy8qIFRo ZSB0YWJsZSBpcyBiYXNlZCBvbiAyN01IeiBEUEhZIHBsbCByZWZlcmVuY2UgY2xvY2suICovCitz dGF0aWMgY29uc3Qgc3RydWN0IGRwaHlfcGxsX3Rlc3RkaW5fbWFwIGRwdGRpbl9tYXBbXSA9IHsK Kwl7ICA5MCwgMHgwMH0sIHsgMTAwLCAweDEwfSwgeyAxMTAsIDB4MjB9LCB7IDEzMCwgMHgwMX0s CisJeyAxNDAsIDB4MTF9LCB7IDE1MCwgMHgyMX0sIHsgMTcwLCAweDAyfSwgeyAxODAsIDB4MTJ9 LAorCXsgMjAwLCAweDIyfSwgeyAyMjAsIDB4MDN9LCB7IDI0MCwgMHgxM30sIHsgMjUwLCAweDIz fSwKKwl7IDI3MCwgMHgwNH0sIHsgMzAwLCAweDE0fSwgeyAzMzAsIDB4MDV9LCB7IDM2MCwgMHgx NX0sCisJeyA0MDAsIDB4MjV9LCB7IDQ1MCwgMHgwNn0sIHsgNTAwLCAweDE2fSwgeyA1NTAsIDB4 MDd9LAorCXsgNjAwLCAweDE3fSwgeyA2NTAsIDB4MDh9LCB7IDcwMCwgMHgxOH0sIHsgNzUwLCAw eDA5fSwKKwl7IDgwMCwgMHgxOX0sIHsgODUwLCAweDI5fSwgeyA5MDAsIDB4Mzl9LCB7IDk1MCwg MHgwYX0sCisJezEwMDAsIDB4MWF9LCB7MTA1MCwgMHgyYX0sIHsxMTAwLCAweDNhfSwgezExNTAs IDB4MGJ9LAorCXsxMjAwLCAweDFifSwgezEyNTAsIDB4MmJ9LCB7MTMwMCwgMHgzYn0sIHsxMzUw LCAweDBjfSwKKwl7MTQwMCwgMHgxY30sIHsxNDUwLCAweDJjfSwgezE1MDAsIDB4M2N9Cit9Owor CitzdGF0aWMgaW50IG1heF9tYnBzX3RvX3Rlc3RkaW4odW5zaWduZWQgaW50IG1heF9tYnBzKQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB0ZGluX21hcCk7IGkr KykKKwkJaWYgKGRwdGRpbl9tYXBbaV0ubWF4X21icHMgPiBtYXhfbWJwcykKKwkJCXJldHVybiBk cHRkaW5fbWFwW2ldLnRlc3RkaW47CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIFRo ZSBjb250cm9sbGVyIHNob3VsZCBnZW5lcmF0ZSAyIGZyYW1lcyBiZWZvcmUKKyAqIHByZXBhcmlu ZyB0aGUgcGVyaXBoZXJhbC4KKyAqLworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfd2FpdF9mb3Jf dHdvX2ZyYW1lcyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlpbnQgcmVmcmVzaCwgdHdv X2ZyYW1lczsKKworCXJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChkc2ktPm1vZGUpOworCXR3 b19mcmFtZXMgPSBESVZfUk9VTkRfVVAoTVNFQ19QRVJfU0VDLCByZWZyZXNoKSAqIDI7CisJbXNs ZWVwKHR3b19mcmFtZXMpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAq aG9zdF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihob3N0LCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGRzaV9ob3N0KTsKK30KKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmNvbl90b19kc2koc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbiwgc3RydWN0IGR3X21pcGlfZHNp LCBjb25uZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqZW5j b2Rlcl90b19kc2koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXJldHVybiBjb250 YWluZXJfb2YoZW5jb2Rlciwgc3RydWN0IGR3X21pcGlfZHNpLCBlbmNvZGVyKTsKK30KK3N0YXRp YyBpbmxpbmUgdm9pZCBkc2lfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcs IHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGlj IGlubGluZSB1MzIgZHNpX3JlYWQoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcpCit7 CisJcmV0dXJuIHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21p cGlfZHNpX3BoeV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTggdGVzdF9jb2RlLAor CQkJCSB1OCB0ZXN0X2RhdGEpCit7CisJLyoKKwkgKiBXaXRoIHRoZSBmYWxsaW5nIGVkZ2Ugb24g VEVTVENMSywgdGhlIFRFU1RESU5bNzowXSBzaWduYWwgY29udGVudAorCSAqIGlzIGxhdGNoZWQg aW50ZXJuYWxseSBhcyB0aGUgY3VycmVudCB0ZXN0IGNvZGUuIFRlc3QgZGF0YSBpcworCSAqIHBy b2dyYW1tZWQgaW50ZXJuYWxseSBieSByaXNpbmcgZWRnZSBvbiBURVNUQ0xLLgorCSAqLworCWRz aV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RD TFIpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9URVNURU4gfCBQ SFlfVEVTVERPVVQoMCkgfAorCQkJCQkgIFBIWV9URVNURElOKHRlc3RfY29kZSkpOworCisJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNU Q0xSKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVU5URVNURU4g fCBQSFlfVEVTVERPVVQoMCkgfAorCQkJCQkgIFBIWV9URVNURElOKHRlc3RfZGF0YSkpOworCisJ ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVT VENMUik7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcGh5X2luaXQoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJaW50IHJldCwgdGVzdGRpbiwgdmNvLCB2YWw7CisKKwl2Y28gPSAo ZHNpLT5sYW5lX21icHMgPCAyMDApID8gMCA6IChkc2ktPmxhbmVfbWJwcyArIDEwMCkgLyAyMDA7 CisKKwl0ZXN0ZGluID0gbWF4X21icHNfdG9fdGVzdGRpbihkc2ktPmxhbmVfbWJwcyk7CisJaWYg KHRlc3RkaW4gPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsCisJCQkiZmFpbGVkIHRvIGdldCB0 ZXN0ZGluIGZvciAlZG1icHMgbGFuZSBjbG9ja1xuIiwKKwkJCWRzaS0+bGFuZV9tYnBzKTsKKwkJ cmV0dXJuIHRlc3RkaW47CisJfQorCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJV UCk7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDEwLCBCWVBBU1NfVkNPX1JBTkdF IHwKKwkJCQkJIFZDT19SQU5HRV9DT05fU0VMKHZjbykgfAorCQkJCQkgVkNPX0lOX0NBUF9DT05f TE9XIHwKKwkJCQkJIFJFRl9CSUFTX0NVUl9TRUwpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRl KGRzaSwgMHgxMSwgQ1BfQ1VSUkVOVF8zTUEpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IDB4MTIsIENQX1BST0dSQU1fRU4gfCBMUEZfUFJPR1JBTV9FTiB8CisJCQkJCSBMUEZfUkVTSVNU T1JTXzIwX0tPSE0pOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg0NCwgSFNGUkVR UkFOR0VfU0VMKHRlc3RkaW4pKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTks IFBMTF9MT09QX0RJVl9FTiB8IFBMTF9JTlBVVF9ESVZfRU4pOworCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIDB4MTcsIElOUFVUX0RJVklERVIoZHNpLT5pbnB1dF9kaXYpKTsKKwlkd19taXBp X2RzaV9waHlfd3JpdGUoZHNpLCAweDE4LCBMT09QX0RJVl9MT1dfU0VMKGRzaS0+ZmVlZGJhY2tf ZGl2KSB8CisJCQkJCSBMT1dfUFJPR1JBTV9FTik7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRz aSwgMHgxOCwgTE9PUF9ESVZfSElHSF9TRUwoZHNpLT5mZWVkYmFja19kaXYpIHwKKwkJCQkJIEhJ R0hfUFJPR1JBTV9FTik7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIwLCBQT1dF Ul9DT05UUk9MIHwgSU5URVJOQUxfUkVHX0NVUlJFTlQgfAorCQkJCQkgQklBU19CTE9DS19PTiB8 IEJBTkRHQVBfT04pOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMSwgVEVSX1JF U0lTVE9SX0xPVyB8IFRFUl9DQUxfRE9ORSB8CisJCQkJCSBTRVRSRF9NQVggfCBURVJfUkVTSVNU T1JTX09OKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIxLCBURVJfUkVTSVNUT1Jf SElHSCB8IExFVkVMX1NISUZURVJTX09OIHwKKwkJCQkJIFNFVFJEX01BWCB8IFBPV0VSX01BTkFH RSB8CisJCQkJCSBURVJfUkVTSVNUT1JTX09OKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShk c2ksIDB4MjIsIExPV19QUk9HUkFNX0VOIHwKKwkJCQkJIEJJQVNFWFRSX1NFTChCSUFTRVhUUl8x MjdfNykpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjIsIEhJR0hfUFJPR1JBTV9F TiB8CisJCQkJCSBCQU5ER0FQX1NFTChCQU5ER0FQXzk2XzEwKSk7CisKKwlkd19taXBpX2RzaV9w aHlfd3JpdGUoZHNpLCAweDcwLCBUTFBfUFJPR1JBTV9FTiB8IDB4Zik7CisJZHdfbWlwaV9kc2lf cGh5X3dyaXRlKGRzaSwgMHg3MSwgVEhTX1BSRV9QUk9HUkFNX0VOIHwgMHg1NSk7CisJZHdfbWlw aV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MiwgVEhTX1pFUk9fUFJPR1JBTV9FTiB8IDB4YSk7CisK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9FTkZPUkNFUExMIHwgUEhZX0VOQUJM RUNMSyB8CisJCQkJICAgICBQSFlfVU5SU1RaIHwgUEhZX1VOU0hVVERPV05aKTsKKworCisJcmV0 ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfUEhZX1NUQVRVUywK KwkJCQkgdmFsLCB2YWwgJiBMT0NLLCAxMDAwLCBQSFlfU1RBVFVTX1RJTUVPVVRfVVMpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5 IGxvY2sgc3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlYWR4X3BvbGxf dGltZW91dChyZWFkbCwgZHNpLT5iYXNlICsgRFNJX1BIWV9TVEFUVVMsCisJCQkJIHZhbCwgdmFs ICYgU1RPUF9TVEFURV9DTEtfTEFORSwgMTAwMCwKKwkJCQkgUEhZX1NUQVRVU19USU1FT1VUX1VT KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJImZhaWxlZCB0byB3 YWl0IGZvciBwaHkgY2xrIGxhbmUgc3RvcCBzdGF0ZVxuIik7CisJCXJldHVybiByZXQ7CisJfQor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9nZXRfbGFuZV9icHMo c3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdW5zaWduZWQgaW50IGJwcCwgaSwgcHJlOwor CXVuc2lnbmVkIGxvbmcgbXBjbGssIHBsbHJlZiwgdG1wOworCXVuc2lnbmVkIGludCBtID0gMSwg biA9IDEsIHRhcmdldF9tYnBzID0gMTAwMDsKKwl1bnNpZ25lZCBpbnQgbWF4X21icHMgPSBkcHRk aW5fbWFwW0FSUkFZX1NJWkUoZHB0ZGluX21hcCkgLSAxXS5tYXhfbWJwczsKKworCWJwcCA9IG1p cGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOworCWlmIChicHAgPCAwKSB7 CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gZ2V0IGJwcCBmb3IgcGl4ZWwgZm9ybWF0 ICVkXG4iLAorCQkJZHNpLT5mb3JtYXQpOworCQlyZXR1cm4gYnBwOworCX0KKworCW1wY2xrID0g RElWX1JPVU5EX1VQKGRzaS0+bW9kZS0+Y2xvY2ssIE1TRUNfUEVSX1NFQyk7CisJaWYgKG1wY2xr KSB7CisJCS8qIHRha2UgMSAvIDAuOSwgc2luY2UgbWJwcyBtdXN0IGJpZyB0aGFuIGJhbmR3aWR0 aCBvZiBSR0IgKi8KKwkJdG1wID0gbXBjbGsgKiAoYnBwIC8gZHNpLT5sYW5lcykgKiAxMCAvIDk7 CisJCWlmICh0bXAgPCBtYXhfbWJwcykKKwkJCXRhcmdldF9tYnBzID0gdG1wOworCQllbHNlCisJ CQlkZXZfZXJyKGRzaS0+ZGV2LCAiRFBIWSBjbG9jayBmcmVxdWVuY3kgaXMgb3V0IG9mIHJhbmdl XG4iKTsKKwl9CisKKwlwbGxyZWYgPSBESVZfUk9VTkRfVVAoY2xrX2dldF9yYXRlKGRzaS0+cGxs cmVmX2NsayksIFVTRUNfUEVSX1NFQyk7CisJdG1wID0gcGxscmVmOworCisJZm9yIChpID0gMTsg aSA8IDY7IGkrKykgeworCQlwcmUgPSBwbGxyZWYgLyBpOworCQlpZiAoKHRtcCA+ICh0YXJnZXRf bWJwcyAlIHByZSkpICYmICh0YXJnZXRfbWJwcyAvIHByZSA8IDUxMikpIHsKKwkJCXRtcCA9IHRh cmdldF9tYnBzICUgcHJlOworCQkJbiA9IGk7CisJCQltID0gdGFyZ2V0X21icHMgLyBwcmU7CisJ CX0KKwkJaWYgKHRtcCA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJZHNpLT5sYW5lX21icHMgPSBw bGxyZWYgLyBuICogbTsKKwlkc2ktPmlucHV0X2RpdiA9IG47CisJZHNpLT5mZWVkYmFja19kaXYg PSBtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9hdHRh Y2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJICAgc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2ko aG9zdCk7CisKKwlpZiAoZGV2aWNlLT5sYW5lcyA+IGRzaS0+cGRhdGEtPm1heF9kYXRhX2xhbmVz KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0aGUgbnVtYmVyIG9mIGRhdGEgbGFuZXMoJXUpIGlz IHRvbyBtYW55XG4iLAorCQkJCWRldmljZS0+bGFuZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpZiAoIShkZXZpY2UtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNU KSB8fAorCSAgICAhKGRldmljZS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lO Q19QVUxTRSkpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImRldmljZSBtb2RlIGlzIHVuc3VwcG9y dGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHNpLT5sYW5lcyA9IGRldmljZS0+ bGFuZXM7CisJZHNpLT5jaGFubmVsID0gZGV2aWNlLT5jaGFubmVsOworCWRzaS0+Zm9ybWF0ID0g ZGV2aWNlLT5mb3JtYXQ7CisJZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmljZS0+ ZGV2Lm9mX25vZGUpOworCWlmIChkc2ktPnBhbmVsKQorCQlyZXR1cm4gZHJtX3BhbmVsX2F0dGFj aChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3IpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisK K3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3Qg Kmhvc3QsCisJCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVj dCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisKKwlkcm1fcGFuZWxfZGV0 YWNoKGRzaS0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9k c2lfZ2VuX3BrdF9oZHJfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiB2YWwpCit7 CisJaW50IHJldDsKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHNpLT5iYXNl ICsgRFNJX0NNRF9QS1RfU1RBVFVTLAorCQkJCSB2YWwsICEodmFsICYgR0VOX0NNRF9GVUxMKSwg MTAwMCwKKwkJCQkgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsK KwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIGNvbW1hbmQgRklG T1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9IRFIs IHZhbCk7CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFzZSArIERT SV9DTURfUEtUX1NUQVRVUywKKwkJCQkgdmFsLCB2YWwgJiAoR0VOX0NNRF9FTVBUWSB8IEdFTl9Q TERfV19FTVBUWSksCisJCQkJIDEwMDAsIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgY29tbWFu ZCBGSUZPXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ks CisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwljb25zdCB1 MTYgKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOworCXUzMiB2YWwgPSBHRU5fSERBVEEoKnR4X2J1Zikg fCBHRU5fSFRZUEUobXNnLT50eXBlKTsKKworCWlmIChtc2ctPnR4X2xlbiA+IDIpIHsKKwkJZGV2 X2Vycihkc2ktPmRldiwgInRvbyBsb25nIHR4IGJ1ZiBsZW5ndGggJXp1IGZvciBzaG9ydCB3cml0 ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJu IGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsKK30KKworc3RhdGljIGlu dCBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJ CQkgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJY29uc3QgdTMyICp0 eF9idWYgPSBtc2ctPnR4X2J1ZjsKKwlpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9kYXRhX2J5 dGVzID0gc2l6ZW9mKCp0eF9idWYpLCByZXQ7CisJdTMyIHZhbCA9IEdFTl9IREFUQShtc2ctPnR4 X2xlbikgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsKKwl1MzIgcmVtYWluZGVyID0gMDsKKworCWlm IChtc2ctPnR4X2xlbiA8IDMpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIndyb25nIHR4IGJ1ZiBs ZW5ndGggJXp1IGZvciBsb25nIHdyaXRlXG4iLAorCQkJbXNnLT50eF9sZW4pOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwl3aGlsZSAoRElWX1JPVU5EX1VQKGxlbiwgcGxkX2RhdGFfYnl0ZXMp KSB7CisJCWlmIChsZW4gPCBwbGRfZGF0YV9ieXRlcykgeworCQkJbWVtY3B5KCZyZW1haW5kZXIs IHR4X2J1ZiwgbGVuKTsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsIHJlbWFp bmRlcik7CisJCQlsZW4gPSAwOworCQl9IGVsc2UgeworCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dF Tl9QTERfREFUQSwgKnR4X2J1Zik7CisJCQl0eF9idWYrKzsKKwkJCWxlbiAtPSBwbGRfZGF0YV9i eXRlczsKKwkJfQorCisJCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHNpLT5iYXNl ICsgRFNJX0NNRF9QS1RfU1RBVFVTLAorCQkJCQkgdmFsLCAhKHZhbCAmIEdFTl9QTERfV19GVUxM KSwgMTAwMCwKKwkJCQkJIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOworCQlpZiAocmV0IDwg MCkgeworCQkJZGV2X2Vycihkc2ktPmRldiwKKwkJCQkiZmFpbGVkIHRvIGdldCBhdmFpbGFibGUg d3JpdGUgcGF5bG9hZCBGSUZPXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1 cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCB2YWwpOworfQorCitzdGF0aWMg c3NpemVfdCBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpo b3N0LAorCQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCXN0cnVjdCBk d19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisJaW50IHJldDsKKworCXN3aXRj aCAobXNnLT50eXBlKSB7CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEU6CisJY2FzZSBN SVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06CisJY2FzZSBNSVBJX0RTSV9TRVRfTUFYSU1V TV9SRVRVUk5fUEFDS0VUX1NJWkU6CisJCXJldCA9IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93cml0 ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRENTX0xPTkdfV1JJVEU6CisJ CXJldCA9IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKGRzaSwgbXNnKTsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJZGV2X2Vycihkc2ktPmRldiwgInVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZVxu Iik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBpX2RzaV9ob3N0X29wcyA9IHsKKwku YXR0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9IGR3X21pcGlfZHNp X2hvc3RfZGV0YWNoLAorCS50cmFuc2ZlciA9IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIsCit9 OworCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gVklEX01PREVfVFlQRV9CVVJT VF9TWU5DX1BVTFNFUyB8IEVOQUJMRV9MT1dfUE9XRVI7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lf VklEX01PREVfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9zZXRfbW9k ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgZW51bSBkd19taXBpX2RzaV9tb2RlIG1v ZGUpCit7CisJaWYgKG1vZGUgPT0gRFdfTUlQSV9EU0lfQ01EX01PREUpIHsKKwkJZHNpX3dyaXRl KGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcs IEVOQUJMRV9DTURfTU9ERSk7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVAp OworCX0gZWxzZSB7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwkJZHNp X3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfVklERU9fTU9ERSk7CisJCWR3X21pcGlf ZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRzaSk7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAs IFBPV0VSVVApOworCX0KK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJsZShzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNF VCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfUlNUWik7Cit9CisKK3N0YXRp YyB2b2lkIGR3X21pcGlfZHNpX2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf UlNUWiwgUEhZX0RJU0ZPUkNFUExMIHwgUEhZX0RJU0FCTEVDTEsKKwkJICB8IFBIWV9SU1RaIHwg UEhZX1NIVVRET1dOWik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0NMS01HUl9DRkcsIFRPX0NMS19E SVZJRFNJT04oMTApIHwKKwkJICBUWF9FU0NfQ0xLX0RJVklEU0lPTig3KSk7CisJZHNpX3dyaXRl KGRzaSwgRFNJX0xQQ0xLX0NUUkwsIFBIWV9UWFJFUVVFU1RDTEtIUyk7Cit9CisKK3N0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX2RwaV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJ ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdTMyIHZhbCA9IDAsIGNvbG9y ID0gMDsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4 ODg6CisJCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18yNEJJVDsKKwkJYnJlYWs7CisJY2FzZSBN SVBJX0RTSV9GTVRfUkdCNjY2OgorCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMiB8 IEVOMThfTE9PU0VMWTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tF RDoKKwkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzE7CisJCWJyZWFrOworCWNhc2Ug TUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzE7 CisJCWJyZWFrOworCX0KKworCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZ TkMpKQorCQl2YWwgfD0gVlNZTkNfQUNUSVZFX0xPVzsKKwlpZiAoIShtb2RlLT5mbGFncyAmIERS TV9NT0RFX0ZMQUdfUEhTWU5DKSkKKwkJdmFsIHw9IEhTWU5DX0FDVElWRV9MT1c7CisKKwlkc2lf d3JpdGUoZHNpLCBEU0lfRFBJX1ZDSUQsIERQSV9WSUQoZHNpLT5jaGFubmVsKSk7CisJZHNpX3dy aXRlKGRzaSwgRFNJX0RQSV9DT0xPUl9DT0RJTkcsIGNvbG9yKTsKKwlkc2lfd3JpdGUoZHNpLCBE U0lfRFBJX0NGR19QT0wsIHZhbCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9MUF9DTURfVElN LCBPVVRWQUNUX0xQQ01EX1RJTUUoNCkKKwkJICB8IElOVkFDVF9MUENNRF9USU1FKDQpKTsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKHN0cnVjdCBk d19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QQ0tIRExfQ0ZHLCBFTl9D UkNfUlggfCBFTl9FQ0NfUlggfCBFTl9CVEEpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2Rz aV92aWRlb19wYWNrZXRfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCQkgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJ RF9QS1RfU0laRSwgVklEX1BLVF9TSVpFKG1vZGUtPmhkaXNwbGF5KSk7Cit9CisKK3N0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1RPX0NOVF9DRkcsIEhTVFhfVE9fQ05UKDEwMDAp IHwgTFBSWF9UT19DTlQoMTAwMCkpOworCWRzaV93cml0ZShkc2ksIERTSV9CVEFfVE9fQ05ULCAw eGQwMCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0NNRF9NT0RFX0NGRywgQ01EX01PREVfQUxMX0xQ KTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURfTU9ERSk7Cit9CisK Ky8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3ljbGVzLiAqLworc3RhdGljIHUzMiBkd19taXBpX2Rz aV9nZXRfaGNvbXBvbmVudF9sYmNjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCQkgICB1 MzIgaGNvbXBvbmVudCkKK3sKKwl1MzIgZnJhYywgbGJjYzsKKworCWxiY2MgPSBoY29tcG9uZW50 ICogZHNpLT5sYW5lX21icHMgKiBNU0VDX1BFUl9TRUMgLyA4OworCisJZnJhYyA9IGxiY2MgJSBk c2ktPm1vZGUtPmNsb2NrOworCWxiY2MgPSBsYmNjIC8gZHNpLT5tb2RlLT5jbG9jazsKKwlpZiAo ZnJhYykKKwkJbGJjYysrOworCisJcmV0dXJuIGxiY2M7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21p cGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXUz MiBodG90YWwsIGhzYSwgaGJwLCBsYmNjOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl ID0gZHNpLT5tb2RlOworCisJaHRvdGFsID0gbW9kZS0+aHRvdGFsOworCWhzYSA9IG1vZGUtPmhz eW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCWhicCA9IG1vZGUtPmh0b3RhbCAtIG1vZGUt PmhzeW5jX2VuZDsKKworCWxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKGRz aSwgaHRvdGFsKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX0hMSU5FX1RJTUUsIGxiY2MpOwor CisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBoc2EpOworCWRz aV93cml0ZShkc2ksIERTSV9WSURfSFNBX1RJTUUsIGxiY2MpOworCisJbGJjYyA9IGR3X21pcGlf ZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBoYnApOworCWRzaV93cml0ZShkc2ksIERTSV9W SURfSEJQX1RJTUUsIGxiY2MpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV92ZXJ0aWNh bF90aW1pbmdfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXUzMiB2YWN0aXZl LCB2c2EsIHZmcCwgdmJwOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gZHNpLT5t b2RlOworCisJdmFjdGl2ZSA9IG1vZGUtPnZkaXNwbGF5OworCXZzYSA9IG1vZGUtPnZzeW5jX2Vu ZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZmcCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+ dmRpc3BsYXk7CisJdmJwID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kOworCisJZHNp X3dyaXRlKGRzaSwgRFNJX1ZJRF9WQUNUSVZFX0xJTkVTLCB2YWN0aXZlKTsKKwlkc2lfd3JpdGUo ZHNpLCBEU0lfVklEX1ZTQV9MSU5FUywgdnNhKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZG UF9MSU5FUywgdmZwKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZCUF9MSU5FUywgdmJwKTsK K30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29uZmlnKHN0cnVjdCBk d19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0NGRywgUEhZ X0hTMkxQX1RJTUUoMHg0MCkKKwkJICB8IFBIWV9MUDJIU19USU1FKDB4NDApIHwgTUFYX1JEX1RJ TUUoMTAwMDApKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0xQQ0xLX0NGRywgUEhZ X0NMS0hTMkxQX1RJTUUoMHg0MCkKKwkJICB8IFBIWV9DTEtMUDJIU19USU1FKDB4NDApKTsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV9pbnRlcmZhY2VfY29uZmlnKHN0cnVjdCBk d19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ0ZHLCBQSFlf U1RPUF9XQUlUX1RJTUUoMHgyMCkgfAorCQkgIE5fTEFORVMoZHNpLT5sYW5lcykpOworfQorCitz dGF0aWMgdm9pZCBkd19taXBpX2RzaV9jbGVhcl9lcnIoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cit7CisJZHNpX3JlYWQoZHNpLCBEU0lfSU5UX1NUMCk7CisJZHNpX3JlYWQoZHNpLCBEU0lfSU5U X1NUMSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0lOVF9NU0swLCAwKTsKKwlkc2lfd3JpdGUoZHNp LCBEU0lfSU5UX01TSzEsIDApOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNvZGVy X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl ZF9tb2RlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5j b2Rlcik7CisJaW50IHJldDsKKworCWRzaS0+bW9kZSA9IGFkanVzdGVkX21vZGU7CisKKwlyZXQg PSBkd19taXBpX2RzaV9nZXRfbGFuZV9icHMoZHNpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJu OworCisJaWYgKGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGspKSB7CisJCWRldl9lcnIoZHNp LT5kZXYsICIlczogRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVy bjsKKwl9CisKKwlkd19taXBpX2RzaV9pbml0KGRzaSk7CisJZHdfbWlwaV9kc2lfZHBpX2NvbmZp Zyhkc2ksIG1vZGUpOworCWR3X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhkc2kpOwor CWR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlkZW9f cGFja2V0X2NvbmZpZyhkc2ksIG1vZGUpOworCWR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25m aWcoZHNpKTsKKwlkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZpZyhkc2kpOworCWR3X21pcGlf ZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV9kcGh5X3RpbWlu Z19jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoZHNpKTsK Kwlkd19taXBpX2RzaV9jbGVhcl9lcnIoZHNpKTsKKwlpZiAoZHJtX3BhbmVsX3ByZXBhcmUoZHNp LT5wYW5lbCkpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBwcmVwYXJlIHBhbmVs XG4iKTsKKwkJcmV0dXJuOworCX0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xrKTsK K30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXJf dG9fZHNpKGVuY29kZXIpOworCisJZHJtX3BhbmVsX2Rpc2FibGUoZHNpLT5wYW5lbCk7CisKKwlp ZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwg IiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0K KworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOworCWRy bV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNp LCBEV19NSVBJX0RTSV9WSURfTU9ERSk7CisKKwkvKgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRv IG1ha2Ugc3VyZSB0aGUgcGVyaXBoZXJhbCB3aWxsIGJlIGRyaXZlbgorCSAqIG5vcm1hbGx5IHdo ZW4gdGhlIGRpc3BsYXkgaXMgZW5hYmxlZCBhZ2FpbiBsYXRlci4KKwkgKi8KKwltc2xlZXAoMTIw KTsKKworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOwor CWR3X21pcGlfZHNpX2Rpc2FibGUoZHNpKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5w Y2xrKTsKK30KKworc3RhdGljIGJvb2wgZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl KQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNvZGVy X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGR3X21pcGlf ZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKwlpbnQgbXV4ICA9IHJvY2tjaGlw X2RybV9lbmNvZGVyX2dldF9tdXhfaWQoZHNpLT5kZXYtPm9mX25vZGUsIGVuY29kZXIpOworCXUz MiBpbnRlcmZhY2VfcGl4X2ZtdDsKKwl1MzIgdmFsOworCisJaWYgKGNsa19wcmVwYXJlX2VuYWJs ZShkc2ktPnBjbGspKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICIlczogRmFpbGVkIHRvIGVuYWJs ZSBwY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkd19taXBpX2RzaV9waHlf aW5pdChkc2kpOworCWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoZHNpKTsKKworCWR3 X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUpOworCWRybV9wYW5l bF9lbmFibGUoZHNpLT5wYW5lbCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xr KTsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6 CisJCWludGVyZmFjZV9waXhfZm10ID0gUk9DS0NISVBfT1VUX01PREVfUDg4ODsKKwkJYnJlYWs7 CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQlpbnRlcmZhY2VfcGl4X2ZtdCA9IFJPQ0tD SElQX09VVF9NT0RFX1A2NjY7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToK KwkJaW50ZXJmYWNlX3BpeF9mbXQgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNTY1OworCQlicmVhazsK KwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJcm9ja2NoaXBfZHJt X2NydGNfbW9kZV9jb25maWcoZW5jb2Rlci0+Y3J0YywgRFJNX01PREVfQ09OTkVDVE9SX0RTSSwK KwkJCQkgICAgICBpbnRlcmZhY2VfcGl4X2ZtdCk7CisKKwlpZiAobXV4KQorCQl2YWwgPSBEU0kw X1NFTF9WT1BfTElUIHwgKERTSTBfU0VMX1ZPUF9MSVQgPDwgMTYpOworCWVsc2UKKwkJdmFsID0g RFNJMF9TRUxfVk9QX0xJVCA8PCAxNjsKKworCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAs IEdSRl9TT0NfQ09ONiwgdmFsKTsKKwlkZXZfZGJnKGRzaS0+ZGV2LCAidm9wICVzIG91dHB1dCB0 byBkc2kwXG4iLCAobXV4KSA/ICJMSVQiIDogIkJJRyIpOworfQorCitzdGF0aWMgc3RydWN0IGRy bV9lbmNvZGVyX2hlbHBlcl9mdW5jcworZHdfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3Mg PSB7CisJLm1vZGVfZml4dXAgPSBkd19taXBpX2RzaV9lbmNvZGVyX21vZGVfZml4dXAsCisJLmNv bW1pdCA9IGR3X21pcGlfZHNpX2VuY29kZXJfY29tbWl0LAorCS5tb2RlX3NldCA9IGR3X21pcGlf ZHNpX2VuY29kZXJfbW9kZV9zZXQsCisJLmRpc2FibGUgPSBkd19taXBpX2RzaV9lbmNvZGVyX2Rp c2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGR3X21pcGlfZHNp X2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsK Kworc3RhdGljIGludCBkd19taXBpX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBjb25f dG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2Rlcyhkc2ktPnBh bmVsKTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIGR3X21pcGlfZHNpX21vZGVf dmFsaWQoCisJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0g Y29uX3RvX2RzaShjb25uZWN0b3IpOworCisJZW51bSBkcm1fbW9kZV9zdGF0dXMgbW9kZV9zdGF0 dXMgPSBNT0RFX09LOworCisJaWYgKGRzaS0+cGRhdGEtPm1vZGVfdmFsaWQpCisJCW1vZGVfc3Rh dHVzID0gZHNpLT5wZGF0YS0+bW9kZV92YWxpZChjb25uZWN0b3IsIG1vZGUpOworCisJcmV0dXJu IG1vZGVfc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICpkd19taXBpX2Rz aV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKAorCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3RvX2RzaShjb25uZWN0 b3IpOworCisJcmV0dXJuICZkc2ktPmVuY29kZXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9 IHsKKwkuZ2V0X21vZGVzID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9k ZV92YWxpZCA9IGR3X21pcGlfZHNpX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IGR3X21p cGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29u bmVjdG9yX3N0YXR1cworZHdfbWlwaV9kc2lfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVj dGVkOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ko c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVn aXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGR3X21pcGlfZHNpX2F0b21pY19j b25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZHBtcywKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9t b2RlcywKKwkuZGV0ZWN0ID0gZHdfbWlwaV9kc2lfZGV0ZWN0LAorCS5kZXN0cm95ID0gZHdfbWlw aV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0 aWMgaW50IGR3X21pcGlfZHNpX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkJ ICAgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gJmRzaS0+Y29ubmVjdG9yOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCWlu dCByZXQ7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9vZl9maW5kX3Bvc3NpYmxl X2NydGNzKGRybSwKKwkJCQkJCQkgICAgIGRldi0+b2Zfbm9kZSk7CisJLyoKKwkgKiBJZiB3ZSBm YWlsZWQgdG8gZmluZCB0aGUgQ1JUQyhzKSB3aGljaCB0aGlzIGVuY29kZXIgaXMKKwkgKiBzdXBw b3NlZCB0byBiZSBjb25uZWN0ZWQgdG8sIGl0J3MgYmVjYXVzZSB0aGUgQ1JUQyBoYXMKKwkgKiBu b3QgYmVlbiByZWdpc3RlcmVkIHlldC4gIERlZmVyIHByb2JpbmcsIGFuZCBob3BlIHRoYXQKKwkg KiB0aGUgcmVxdWlyZWQgQ1JUQyBpcyBhZGRlZCBsYXRlci4KKwkgKi8KKwlpZiAoZW5jb2Rlci0+ cG9zc2libGVfY3J0Y3MgPT0gMCkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwlkcm1fZW5j b2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsCisJCQkgICAgICAgJmR3X21pcGlfZHNpX2Vu Y29kZXJfaGVscGVyX2Z1bmNzKTsKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybSwgJmRzaS0+ ZW5jb2RlciwgJmR3X21pcGlfZHNpX2VuY29kZXJfZnVuY3MsCisJCQkgRFJNX01PREVfRU5DT0RF Ul9EU0kpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6 ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fY29ubmVj dG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLAorCQkJJmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MpOworCisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgJmRzaS0+Y29ubmVjdG9yLAor CQkJICAgJmR3X21pcGlfZHNpX2F0b21pY19jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9E RV9DT05ORUNUT1JfRFNJKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihj b25uZWN0b3IsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm9ja2No aXBfbWlwaV9wYXJzZV9kdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wID0gZHNpLT5kZXYtPm9mX25vZGU7CisKKwlkc2ktPmdyZl9yZWdtYXAgPSBz eXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIik7CisJaWYg KElTX0VSUihkc2ktPmdyZl9yZWdtYXApKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJVbmFibGUg dG8gZ2V0IHJvY2tjaGlwLGdyZlxuIik7CisJCXJldHVybiBQVFJfRVJSKGRzaS0+Z3JmX3JlZ21h cCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBy azMyODhfbWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJLyoKKwkg KiBUaGUgVklEX1BLVF9TSVpFIGZpZWxkIGluIHRoZSBEU0lfVklEX1BLVF9DRkcKKwkgKiByZWdp c3RlciBpcyAxMS1iaXQuCisJICovCisJaWYgKG1vZGUtPmhkaXNwbGF5ID4gMHg3ZmYpCisJCXJl dHVybiBNT0RFX0JBRF9IVkFMVUU7CisKKwkvKgorCSAqIFRoZSBWX0FDVElWRV9MSU5FUyBmaWVs ZCBpbiB0aGUgRFNJX1ZUSU1JTkdfQ0ZHCisJICogcmVnaXN0ZXIgaXMgMTEtYml0LgorCSAqLwor CWlmIChtb2RlLT52ZGlzcGxheSA+IDB4N2ZmKQorCQlyZXR1cm4gTU9ERV9CQURfVlZBTFVFOwor CisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9k YXRhIHJrMzI4OF9taXBpX2RzaV9kcnZfZGF0YSA9IHsKKwkubWF4X2RhdGFfbGFuZXMgPSA0LAor CS5tb2RlX3ZhbGlkID0gcmszMjg4X21pcGlfZHNpX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9kdF9pZHNbXSA9IHsKKwl7CisJ IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRzaSIsCisJIC5kYXRhID0gJnJr MzI4OF9taXBpX2RzaV9kcnZfZGF0YSwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X21pcGlfZHNpX2R0X2lkcyk7CisKK3N0YXRpYyBpbnQg ZHdfbWlwaV9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpv Zl9pZCA9CisJCQlvZl9tYXRjaF9kZXZpY2UoZHdfbWlwaV9kc2lfZHRfaWRzLCBkZXYpOworCWNv bnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7CisJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNp OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4g LUVOT01FTTsKKworCWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGRhdGEgPSBwZGF0YTsKKworCXJl dCA9IHJvY2tjaGlwX21pcGlfcGFyc2VfZHQoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkc2ktPmJhc2UgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoZHNpLT5iYXNlKSkKKwkJcmV0 dXJuIFBUUl9FUlIoZHNpLT5iYXNlKTsKKworCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJyZWYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJcmV0ID0g UFRSX0VSUihkc2ktPnBsbHJlZl9jbGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQg cGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ ZHNpLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ cGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBjbGspOworCQlkZXZfZXJyKGRldiwgIlVu YWJsZSB0byBnZXQgcGNsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGtcbiIsIF9fZnVuY19f KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkd19taXBpX2RzaV9yZWdpc3Rlcihkcm0s IGRzaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBt aXBpX2RzaTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BsbHJlZjsKKwl9CisKKwlkZXZfc2V0 X2RydmRhdGEoZGV2LCBkc2kpOworCisJZHNpLT5kc2lfaG9zdC5vcHMgPSAmZHdfbWlwaV9kc2lf aG9zdF9vcHM7CisJZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7CisJcmV0dXJuIG1pcGlfZHNpX2hv c3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCitlcnJfcGxscmVmOgorCWNsa19kaXNhYmxl X3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug Km1hc3RlciwKKwl2b2lkICpkYXRhKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNp X2hvc3QpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHdfbWlwaV9kc2lfb3BzID0geworCS5i aW5kCT0gZHdfbWlwaV9kc2lfYmluZCwKKwkudW5iaW5kCT0gZHdfbWlwaV9kc2lfdW5iaW5kLAor fTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkd19taXBpX2Rz aV9vcHMpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmR3X21pcGlf ZHNpX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGR3X21pcGlfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZHdfbWlwaV9kc2lfcHJvYmUsCisJ LnJlbW92ZQkJPSBkd19taXBpX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9tYXRj aF90YWJsZSA9IGR3X21pcGlfZHNpX2R0X2lkcywKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9 LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHdfbWlwaV9kc2lfZHJpdmVyKTsKKworTU9E VUxFX0RFU0NSSVBUSU9OKCJST0NLQ0hJUCBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVy Iik7CitNT0RVTEVfQVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPiIpOwor TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9O QU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f dm9wLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCmluZGV4 IDdmNzViYjEuLjY3ZmQwOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fdm9wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV92b3AuYwpAQCAtMTAyOCw2ICsxMDI4LDkgQEAgaW50IHJvY2tjaGlwX2RybV9jcnRjX21v ZGVfY29uZmlnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RP Ul9IRE1JQToKIAkJVk9QX0NUUkxfU0VUKHZvcCwgaGRtaV9lbiwgMSk7CiAJCWJyZWFrOworCWNh c2UgRFJNX01PREVfQ09OTkVDVE9SX0RTSToKKwkJVk9QX0NUUkxfU0VUKHZvcCwgbWlwaV9lbiwg MSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigidW5zdXBwb3J0IGNvbm5lY3Rv cl90eXBlWyVkXVxuIiwgY29ubmVjdG9yX3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKLS0gCjIu Ni4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=