From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philippe CORNU Subject: [PATCH v5 4/7] drm/bridge/synopsys: Add MIPI DSI host controller bridge Date: Mon, 3 Jul 2017 10:41:24 +0200 Message-ID: <1499071287-10414-5-git-send-email-philippe.cornu@st.com> References: <1499071287-10414-1-git-send-email-philippe.cornu@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [62.209.51.94]) by gabe.freedesktop.org (Postfix) with ESMTPS id B18256E236 for ; Mon, 3 Jul 2017 08:46:57 +0000 (UTC) In-Reply-To: <1499071287-10414-1-git-send-email-philippe.cornu@st.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandre Torgue , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick Fertre , Neil Armstrong , Archit Taneja , Eric Anholt , Chris Zhong , Andrzej Hajda , Xinliang Liu , zourongrong@gmail.com, Xinwei Kong , Chen Feng , Mark Yao Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Philippe Cornu , Fabien Dessenne , dri-devel@lists.freedesktop.org, Mickael Reulier , Vincent Abriou , Gabriel Fernandez , Ludovic Barre List-Id: dri-devel@lists.freedesktop.org QWRkIGEgU3lub3BzeXMgRGVzaWdud2FyZSBNSVBJIERTSSBob3N0IERSTSBicmlkZ2UgZHJpdmVy LCBiYXNlZCBvbiB0aGUKUm9ja2NoaXAgdmVyc2lvbiBmcm9tIHJvY2tjaGlwL2R3LW1pcGktZHNp LmMgd2l0aCBwaHkgJiBicmlkZ2UgQVBJcy4KClNpZ25lZC1vZmYtYnk6IFBoaWxpcHBlIENPUk5V IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5v cHN5cy9LY29uZmlnICAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3Bz eXMvTWFrZWZpbGUgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lz L2R3LW1pcGktZHNpLmMgfCA5NzkgKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUv ZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oICAgICAgICAgICAgICB8ICAzOSArCiA0IGZpbGVzIGNo YW5nZWQsIDEwMjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctbWlwaS1kc2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5v cHN5cy9LY29uZmlnCmluZGV4IDQwZDI4MjcuLmYwMGVlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL3N5bm9wc3lzL0tjb25maWcKQEAgLTIxLDMgKzIxLDkgQEAgY29uZmlnIERSTV9EV19IRE1J X0kyU19BVURJTwogCWhlbHAKIAkgIFN1cHBvcnQgdGhlIEkyUyBBdWRpbyBpbnRlcmZhY2Ugd2hp Y2ggaXMgcGFydCBvZiB0aGUgU3lub3BzeXMKIAkgIERlc2lnbndhcmUgSERNSSBibG9jay4KKwor Y29uZmlnIERSTV9EV19NSVBJX0RTSQorCXRyaXN0YXRlCisJc2VsZWN0IERSTV9LTVNfSEVMUEVS CisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUxfQlJJREdFCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9NYWtlZmlsZQppbmRleCAxN2FhN2E2Li41ZjU3ZDM2IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvTWFrZWZpbGUKQEAgLTMsMyArMyw1IEBA CiBvYmotJChDT05GSUdfRFJNX0RXX0hETUkpICs9IGR3LWhkbWkubwogb2JqLSQoQ09ORklHX0RS TV9EV19IRE1JX0FIQl9BVURJTykgKz0gZHctaGRtaS1haGItYXVkaW8ubwogb2JqLSQoQ09ORklH X0RSTV9EV19IRE1JX0kyU19BVURJTykgKz0gZHctaGRtaS1pMnMtYXVkaW8ubworCitvYmotJChD T05GSUdfRFJNX0RXX01JUElfRFNJKSArPSBkdy1taXBpLWRzaS5vCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LW1pcGktZHNpLmMgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3N5bm9wc3lzL2R3LW1pcGktZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNDA2MDAwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2Uvc3lub3BzeXMvZHctbWlwaS1kc2kuYwpAQCAtMCwwICsxLDk3OSBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAxNiwgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkCisg KiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyBTQSAyMDE3CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBNb2RpZmllZCBieSBQaGlsaXBwZSBDb3JudSA8cGhp bGlwcGUuY29ybnVAc3QuY29tPgorICogVGhpcyBnZW5lcmljIFN5bm9wc3lzIERlc2lnbldhcmUg TUlQSSBEU0kgaG9zdCBkcml2ZXIgaXMgYmFzZWQgb24gdGhlCisgKiBSb2NrY2hpcCB2ZXJzaW9u IGZyb20gcm9ja2NoaXAvZHctbWlwaS1kc2kuYyB3aXRoIHBoeSAmIGJyaWRnZSBBUElzLgorICov CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4K KyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+ CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29m Lmg+CisjaW5jbHVkZSA8ZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oPgorI2luY2x1ZGUgPHZpZGVv L21pcGlfZGlzcGxheS5oPgorCisjZGVmaW5lIERTSV9WRVJTSU9OCQkJMHgwMAorI2RlZmluZSBE U0lfUFdSX1VQCQkJMHgwNAorI2RlZmluZSBSRVNFVAkJCQkwCisjZGVmaW5lIFBPV0VSVVAJCQkJ QklUKDApCisKKyNkZWZpbmUgRFNJX0NMS01HUl9DRkcJCQkweDA4CisjZGVmaW5lIFRPX0NMS19E SVZJRFNJT04oZGl2KQkJKCgoZGl2KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFRYX0VTQ19DTEtf RElWSURTSU9OKGRpdikJKCgoZGl2KSAmIDB4ZmYpIDw8IDApCisKKyNkZWZpbmUgRFNJX0RQSV9W Q0lECQkJMHgwYworI2RlZmluZSBEUElfVklEKHZpZCkJCQkoKCh2aWQpICYgMHgzKSA8PCAwKQor CisjZGVmaW5lIERTSV9EUElfQ09MT1JfQ09ESU5HCQkweDEwCisjZGVmaW5lIEVOMThfTE9PU0VM WQkJCUJJVCg4KQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzEJMHgwCisjZGVmaW5l IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMgkweDEKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18x NkJJVF8zCTB4MgorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzEJMHgzCisjZGVmaW5l IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMgkweDQKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18y NEJJVAkJMHg1CisKKyNkZWZpbmUgRFNJX0RQSV9DRkdfUE9MCQkJMHgxNAorI2RlZmluZSBDT0xP Uk1fQUNUSVZFX0xPVwkJQklUKDQpCisjZGVmaW5lIFNIVVREX0FDVElWRV9MT1cJCUJJVCgzKQor I2RlZmluZSBIU1lOQ19BQ1RJVkVfTE9XCQlCSVQoMikKKyNkZWZpbmUgVlNZTkNfQUNUSVZFX0xP VwkJQklUKDEpCisjZGVmaW5lIERBVEFFTl9BQ1RJVkVfTE9XCQlCSVQoMCkKKworI2RlZmluZSBE U0lfRFBJX0xQX0NNRF9USU0JCTB4MTgKKyNkZWZpbmUgT1VUVkFDVF9MUENNRF9USU1FKHApCQko KChwKSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBJTlZBQ1RfTFBDTURfVElNRShwKQkJKChwKSAm IDB4ZmYpCisKKyNkZWZpbmUgRFNJX0RCSV9DRkcJCQkweDIwCisjZGVmaW5lIERTSV9EQklfQ01E U0laRQkJCTB4MjgKKworI2RlZmluZSBEU0lfUENLSERMX0NGRwkJCTB4MmMKKyNkZWZpbmUgRU5f Q1JDX1JYCQkJQklUKDQpCisjZGVmaW5lIEVOX0VDQ19SWAkJCUJJVCgzKQorI2RlZmluZSBFTl9C VEEJCQkJQklUKDIpCisjZGVmaW5lIEVOX0VPVFBfUlgJCQlCSVQoMSkKKyNkZWZpbmUgRU5fRU9U UF9UWAkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9NT0RFX0NGRwkJCTB4MzQKKyNkZWZpbmUgRU5B QkxFX1ZJREVPX01PREUJCTAKKyNkZWZpbmUgRU5BQkxFX0NNRF9NT0RFCQkJQklUKDApCisKKyNk ZWZpbmUgRFNJX1ZJRF9NT0RFX0NGRwkJMHgzOAorI2RlZmluZSBGUkFNRV9CVEFfQUNLCQkJQklU KDE0KQorI2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSCQkoMHgzZiA8PCA4KQorI2RlZmluZSBFTkFC TEVfTE9XX1BPV0VSX01BU0sJCSgweDNmIDw8IDgpCisjZGVmaW5lIFZJRF9NT0RFX1RZUEVfTk9O X0JVUlNUX1NZTkNfUFVMU0VTCTB4MAorI2RlZmluZSBWSURfTU9ERV9UWVBFX05PTl9CVVJTVF9T WU5DX0VWRU5UUwkweDEKKyNkZWZpbmUgVklEX01PREVfVFlQRV9CVVJTVAkJCTB4MgorI2RlZmlu ZSBWSURfTU9ERV9UWVBFX01BU0sJCQkweDMKKworI2RlZmluZSBEU0lfVklEX1BLVF9TSVpFCQkw eDNjCisjZGVmaW5lIFZJRF9QS1RfU0laRShwKQkJCSgoKHApICYgMHgzZmZmKSA8PCAwKQorI2Rl ZmluZSBWSURfUEtUX01BWF9TSVpFCQkweDNmZmYKKworI2RlZmluZSBEU0lfVklEX0hTQV9USU1F CQkweDQ4CisjZGVmaW5lIERTSV9WSURfSEJQX1RJTUUJCTB4NGMKKyNkZWZpbmUgRFNJX1ZJRF9I TElORV9USU1FCQkweDUwCisjZGVmaW5lIERTSV9WSURfVlNBX0xJTkVTCQkweDU0CisjZGVmaW5l IERTSV9WSURfVkJQX0xJTkVTCQkweDU4CisjZGVmaW5lIERTSV9WSURfVkZQX0xJTkVTCQkweDVj CisjZGVmaW5lIERTSV9WSURfVkFDVElWRV9MSU5FUwkJMHg2MAorI2RlZmluZSBEU0lfQ01EX01P REVfQ0ZHCQkweDY4CisjZGVmaW5lIE1BWF9SRF9QS1RfU0laRV9MUAkJQklUKDI0KQorI2RlZmlu ZSBEQ1NfTFdfVFhfTFAJCQlCSVQoMTkpCisjZGVmaW5lIERDU19TUl8wUF9UWF9MUAkJCUJJVCgx OCkKKyNkZWZpbmUgRENTX1NXXzFQX1RYX0xQCQkJQklUKDE3KQorI2RlZmluZSBEQ1NfU1dfMFBf VFhfTFAJCQlCSVQoMTYpCisjZGVmaW5lIEdFTl9MV19UWF9MUAkJCUJJVCgxNCkKKyNkZWZpbmUg R0VOX1NSXzJQX1RYX0xQCQkJQklUKDEzKQorI2RlZmluZSBHRU5fU1JfMVBfVFhfTFAJCQlCSVQo MTIpCisjZGVmaW5lIEdFTl9TUl8wUF9UWF9MUAkJCUJJVCgxMSkKKyNkZWZpbmUgR0VOX1NXXzJQ X1RYX0xQCQkJQklUKDEwKQorI2RlZmluZSBHRU5fU1dfMVBfVFhfTFAJCQlCSVQoOSkKKyNkZWZp bmUgR0VOX1NXXzBQX1RYX0xQCQkJQklUKDgpCisjZGVmaW5lIEVOX0FDS19SUVNUCQkJQklUKDEp CisjZGVmaW5lIEVOX1RFQVJfRlgJCQlCSVQoMCkKKworI2RlZmluZSBDTURfTU9ERV9BTExfTFAJ CQkoTUFYX1JEX1BLVF9TSVpFX0xQIHwgXAorCQkJCQkgRENTX0xXX1RYX0xQIHwgXAorCQkJCQkg RENTX1NSXzBQX1RYX0xQIHwgXAorCQkJCQkgRENTX1NXXzFQX1RYX0xQIHwgXAorCQkJCQkgRENT X1NXXzBQX1RYX0xQIHwgXAorCQkJCQkgR0VOX0xXX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NSXzJQ X1RYX0xQIHwgXAorCQkJCQkgR0VOX1NSXzFQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NSXzBQX1RY X0xQIHwgXAorCQkJCQkgR0VOX1NXXzJQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NXXzFQX1RYX0xQ IHwgXAorCQkJCQkgR0VOX1NXXzBQX1RYX0xQKQorCisjZGVmaW5lIERTSV9HRU5fSERSCQkJMHg2 YworI2RlZmluZSBHRU5fSERBVEEoZGF0YSkJCQkoKChkYXRhKSAmIDB4ZmZmZikgPDwgOCkKKyNk ZWZpbmUgR0VOX0hEQVRBX01BU0sJCQkoMHhmZmZmIDw8IDgpCisjZGVmaW5lIEdFTl9IVFlQRSh0 eXBlKQkJCSgoKHR5cGUpICYgMHhmZikgPDwgMCkKKyNkZWZpbmUgR0VOX0hUWVBFX01BU0sJCQkw eGZmCisKKyNkZWZpbmUgRFNJX0dFTl9QTERfREFUQQkJMHg3MAorCisjZGVmaW5lIERTSV9DTURf UEtUX1NUQVRVUwkJMHg3NAorI2RlZmluZSBHRU5fQ01EX0VNUFRZCQkJQklUKDApCisjZGVmaW5l IEdFTl9DTURfRlVMTAkJCUJJVCgxKQorI2RlZmluZSBHRU5fUExEX1dfRU1QVFkJCQlCSVQoMikK KyNkZWZpbmUgR0VOX1BMRF9XX0ZVTEwJCQlCSVQoMykKKyNkZWZpbmUgR0VOX1BMRF9SX0VNUFRZ CQkJQklUKDQpCisjZGVmaW5lIEdFTl9QTERfUl9GVUxMCQkJQklUKDUpCisjZGVmaW5lIEdFTl9S RF9DTURfQlVTWQkJCUJJVCg2KQorCisjZGVmaW5lIERTSV9UT19DTlRfQ0ZHCQkJMHg3OAorI2Rl ZmluZSBIU1RYX1RPX0NOVChwKQkJCSgoKHApICYgMHhmZmZmKSA8PCAxNikKKyNkZWZpbmUgTFBS WF9UT19DTlQocCkJCQkoKHApICYgMHhmZmZmKQorCisjZGVmaW5lIERTSV9CVEFfVE9fQ05UCQkJ MHg4YworI2RlZmluZSBEU0lfTFBDTEtfQ1RSTAkJCTB4OTQKKyNkZWZpbmUgQVVUT19DTEtMQU5F X0NUUkwJCUJJVCgxKQorI2RlZmluZSBQSFlfVFhSRVFVRVNUQ0xLSFMJCUJJVCgwKQorCisjZGVm aW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJMHg5OAorI2RlZmluZSBQSFlfQ0xLSFMyTFBfVElN RShsYmNjKQkJKCgobGJjYykgJiAweDNmZikgPDwgMTYpCisjZGVmaW5lIFBIWV9DTEtMUDJIU19U SU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYpCisKKyNkZWZpbmUgRFNJX1BIWV9UTVJfQ0ZHCQkJ MHg5YworI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweGZmKSA8PCAy NCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwgMTYp CisjZGVmaW5lIE1BWF9SRF9USU1FKGxiY2MpCQkoKGxiY2MpICYgMHg3ZmZmKQorCisjZGVmaW5l IERTSV9QSFlfUlNUWgkJCTB4YTAKKyNkZWZpbmUgUEhZX0RJU0ZPUkNFUExMCQkJMAorI2RlZmlu ZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQorI2RlZmluZSBQSFlfRElTQUJMRUNMSwkJCTAKKyNk ZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQorI2RlZmluZSBQSFlfUlNUWgkJCTAKKyNkZWZp bmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2RlZmluZSBQSFlfU0hVVERPV05aCQkJMAorI2RlZmlu ZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfUEhZX0lGX0NGRwkJCTB4 YTQKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8PCAwKQorI2RlZmlu ZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4ZmYpIDw8IDgpCisKKyNk ZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCisjZGVmaW5lIExPQ0sJCQkJQklUKDApCisjZGVm aW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NU UkwwCQkweGI0CisjZGVmaW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCisjZGVmaW5lIFBIWV9VTlRF U1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCisjZGVmaW5lIFBIWV9VTlRF U1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgKKyNkZWZpbmUgUEhZ X1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAorI2RlZmluZSBQSFlf VEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFBIWV9URVNURElOKG4p CQkJKCgobikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhiYworI2Rl ZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKKyNkZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhjNAorI2Rl ZmluZSBEU0lfSU5UX01TSzEJCQkweGM4CisKKyNkZWZpbmUgUEhZX1NUQVRVU19USU1FT1VUX1VT CQkxMDAwMAorI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTCTIwMDAwCisKK3N0cnVj dCBkd19taXBpX2RzaSB7CisJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOworCXN0cnVjdCBtaXBp X2RzaV9ob3N0IGRzaV9ob3N0OworCXN0cnVjdCBkcm1fYnJpZGdlICpwYW5lbF9icmlkZ2U7CisJ Ym9vbCBpc19wYW5lbF9icmlkZ2U7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21l bSAqYmFzZTsKKworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwl1bnNpZ25lZCBpbnQgbGFuZV9tYnBz OyAvKiBwZXIgbGFuZSAqLworCXUzMiBjaGFubmVsOworCXUzMiBsYW5lczsKKwl1MzIgZm9ybWF0 OworCXVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsKKworCWNvbnN0IHN0cnVjdCBkd19taXBpX2Rz aV9wbGF0X2RhdGEgKnBsYXRfZGF0YTsKK307CisKKy8qCisgKiBUaGUgY29udHJvbGxlciBzaG91 bGQgZ2VuZXJhdGUgMiBmcmFtZXMgYmVmb3JlCisgKiBwcmVwYXJpbmcgdGhlIHBlcmlwaGVyYWwu CisgKi8KK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7CisK KwlyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CisJdHdvX2ZyYW1lcyA9IERJVl9S T1VORF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKKwltc2xlZXAodHdvX2ZyYW1lcyk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpob3N0X3RvX2RzaShzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhvc3QsIHN0 cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBk d19taXBpX2RzaSAqYnJpZGdlX3RvX2RzaShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQorewor CXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGJyaWRnZSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpk c2ksIHUzMiByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgZHNpLT5iYXNlICsgcmVnKTsK K30KKworc3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQoc3RydWN0IGR3X21pcGlfZHNpICpkc2ks IHUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRp YyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Qs CisJCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisJc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlpbnQgcmV0OworCisJaWYgKGRldmlj ZS0+bGFuZXMgPiBkc2ktPnBsYXRfZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsKKwkJZGV2X2Vycihk c2ktPmRldiwgInRoZSBudW1iZXIgb2YgZGF0YSBsYW5lcygldSkgaXMgdG9vIG1hbnlcbiIsCisJ CQlkZXZpY2UtPmxhbmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHNpLT5sYW5lcyA9 IGRldmljZS0+bGFuZXM7CisJZHNpLT5jaGFubmVsID0gZGV2aWNlLT5jaGFubmVsOworCWRzaS0+ Zm9ybWF0ID0gZGV2aWNlLT5mb3JtYXQ7CisJZHNpLT5tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2Rl X2ZsYWdzOworCisJcmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlKGhvc3QtPmRldi0+ b2Zfbm9kZSwgMSwgMCwKKwkJCQkJICAmcGFuZWwsICZicmlkZ2UpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlpZiAocGFuZWwpIHsKKwkJYnJpZGdlID0gZHJtX3BhbmVsX2JyaWRnZV9h ZGQocGFuZWwsIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCQlpZiAoSVNfRVJSKGJyaWRnZSkp CisJCQlyZXR1cm4gUFRSX0VSUihicmlkZ2UpOworCQlkc2ktPmlzX3BhbmVsX2JyaWRnZSA9IHRy dWU7CisJfQorCisJZHNpLT5wYW5lbF9icmlkZ2UgPSBicmlkZ2U7CisKKwlyZXR1cm4gZHJtX2Jy aWRnZV9hZGQoJmRzaS0+YnJpZGdlKTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0 X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3Rv X2RzaShob3N0KTsKKworCWlmIChkc2ktPmlzX3BhbmVsX2JyaWRnZSkKKwkJZHJtX3BhbmVsX2Jy aWRnZV9yZW1vdmUoZHNpLT5wYW5lbF9icmlkZ2UpOworCisJZHJtX2JyaWRnZV9yZW1vdmUoJmRz aS0+YnJpZGdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX21lc3Nh Z2VfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBt aXBpX2RzaV9tc2cgKm1zZykKK3sKKwlib29sIGxwbSA9IG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9N U0dfVVNFX0xQTTsKKwl1MzIgdmFsID0gMDsKKworCWlmIChtc2ctPmZsYWdzICYgTUlQSV9EU0lf TVNHX1JFUV9BQ0spCisJCXZhbCB8PSBFTl9BQ0tfUlFTVDsKKwlpZiAobHBtKQorCQl2YWwgfD0g Q01EX01PREVfQUxMX0xQOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX0xQQ0xLX0NUUkwsIGxwbSA/ IDAgOiBQSFlfVFhSRVFVRVNUQ0xLSFMpOworCWRzaV93cml0ZShkc2ksIERTSV9DTURfTU9ERV9D RkcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUo c3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiBoZHJfdmFsKQoreworCWludCByZXQ7CisJdTMy IHZhbCwgbWFzazsKKworCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lf Q01EX1BLVF9TVEFUVVMsCisJCQkJIHZhbCwgISh2YWwgJiBHRU5fQ01EX0ZVTEwpLCAxMDAwLAor CQkJCSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf ZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgY29tbWFuZCBGSUZPXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgaGRyX3Zh bCk7CisKKwltYXNrID0gR0VOX0NNRF9FTVBUWSB8IEdFTl9QTERfV19FTVBUWTsKKwlyZXQgPSBy ZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVTLAorCQkJCSB2 YWwsICh2YWwgJiBtYXNrKSA9PSBtYXNrLAorCQkJCSAxMDAwLCBDTURfUEtUX1NUQVRVU19USU1F T1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRv IHdyaXRlIGNvbW1hbmQgRklGT1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKHN0cnVjdCBkd19t aXBpX2RzaSAqZHNpLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cp Cit7CisJY29uc3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOworCXUxNiBkYXRhID0gMDsKKwl1 MzIgdmFsOworCisJaWYgKG1zZy0+dHhfbGVuID4gMCkKKwkJZGF0YSB8PSB0eF9idWZbMF07CisJ aWYgKG1zZy0+dHhfbGVuID4gMSkKKwkJZGF0YSB8PSB0eF9idWZbMV0gPDwgODsKKworCWlmICht c2ctPnR4X2xlbiA+IDIpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgInRvbyBsb25nIHR4IGJ1ZiBs ZW5ndGggJXp1IGZvciBzaG9ydCB3cml0ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJdmFsID0gR0VOX0hEQVRBKGRhdGEpIHwgR0VOX0hUWVBFKG1zZy0+ dHlwZSk7CisJcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsK K30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7 CisJY29uc3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOworCWludCBsZW4gPSBtc2ctPnR4X2xl biwgcGxkX2RhdGFfYnl0ZXMgPSBzaXplb2YodTMyKSwgcmV0OworCXUzMiBoZHJfdmFsID0gR0VO X0hEQVRBKG1zZy0+dHhfbGVuKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOworCXUzMiByZW1haW5k ZXI7CisJdTMyIHZhbDsKKworCWlmIChtc2ctPnR4X2xlbiA8IDMpIHsKKwkJZGV2X2Vycihkc2kt PmRldiwgIndyb25nIHR4IGJ1ZiBsZW5ndGggJXp1IGZvciBsb25nIHdyaXRlXG4iLAorCQkJbXNn LT50eF9sZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3aGlsZSAoRElWX1JPVU5EX1VQ KGxlbiwgcGxkX2RhdGFfYnl0ZXMpKSB7CisJCWlmIChsZW4gPCBwbGRfZGF0YV9ieXRlcykgewor CQkJcmVtYWluZGVyID0gMDsKKwkJCW1lbWNweSgmcmVtYWluZGVyLCB0eF9idWYsIGxlbik7CisJ CQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1haW5kZXIpOworCQkJbGVuID0g MDsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweSgmcmVtYWluZGVyLCB0eF9idWYsIHBsZF9kYXRhX2J5 dGVzKTsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsIHJlbWFpbmRlcik7CisJ CQl0eF9idWYgKz0gcGxkX2RhdGFfYnl0ZXM7CisJCQlsZW4gLT0gcGxkX2RhdGFfYnl0ZXM7CisJ CX0KKworCQlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX0NNRF9QS1Rf U1RBVFVTLAorCQkJCQkgdmFsLCAhKHZhbCAmIEdFTl9QTERfV19GVUxMKSwgMTAwMCwKKwkJCQkJ IENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vy cihkc2ktPmRldiwKKwkJCQkiZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgd3JpdGUgcGF5bG9hZCBG SUZPXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gZHdfbWlwaV9kc2lf Z2VuX3BrdF9oZHJfd3JpdGUoZHNpLCBoZHJfdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgZHdf bWlwaV9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkJ IGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCWludCByZXQ7CisKKwkvKgorCSAqIFRPRE8gZHcg ZHJ2IGltcHJvdmVtZW50cworCSAqIHVzZSBtaXBpX2RzaV9jcmVhdGVfcGFja2V0KCkgaW5zdGVh ZCBvZiBhbGwgZm9sbG93aW5nCisJICogZnVuY3Rpb25zIGFuZCBjb2RlIChubyBzd2l0Y2ggY2Fz ZXMsIG5vCisJICogZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKCksIG9ubHkgdGhlIGxvb3Ag aW4gbG9uZ193cml0ZS4uLikKKwkgKiBhbmQgdXNlIHBhY2tldC5oZWFkZXIuLi4KKwkgKi8KKwlk d19taXBpX21lc3NhZ2VfY29uZmlnKGRzaSwgbXNnKTsKKworCXN3aXRjaCAobXNnLT50eXBlKSB7 CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEU6CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hP UlRfV1JJVEVfUEFSQU06CisJY2FzZSBNSVBJX0RTSV9TRVRfTUFYSU1VTV9SRVRVUk5fUEFDS0VU X1NJWkU6CisJCXJldCA9IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93cml0ZShkc2ksIG1zZyk7CisJ CWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRENTX0xPTkdfV1JJVEU6CisJCXJldCA9IGR3X21pcGlf ZHNpX2Rjc19sb25nX3dyaXRlKGRzaSwgbXNnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2 X2Vycihkc2ktPmRldiwgInVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZSAweCUwMnhcbiIsCisJCQlt c2ctPnR5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgZHdfbWlwaV9kc2lfaG9zdF9vcHMg PSB7CisJLmF0dGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfYXR0YWNoLAorCS5kZXRhY2ggPSBkd19t aXBpX2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNmZXIgPSBkd19taXBpX2RzaV9ob3N0X3RyYW5z ZmVyLAorfTsKKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoc3Ry dWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZhbDsKKworCS8qCisJICogVE9ETyBkdyBk cnYgaW1wcm92ZW1lbnRzCisJICogZW5hYmxpbmcgbG93IHBvd2VyIGlzIHBhbmVsLWRlcGVuZGVu dCwgd2Ugc2hvdWxkIHVzZSB0aGUKKwkgKiBwYW5lbCBjb25maWd1cmF0aW9uIGhlcmUuLi4KKwkg Ki8KKwl2YWwgPSBFTkFCTEVfTE9XX1BPV0VSOworCisJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1J UElfRFNJX01PREVfVklERU9fQlVSU1QpCisJCXZhbCB8PSBWSURfTU9ERV9UWVBFX0JVUlNUOwor CWVsc2UgaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxT RSkKKwkJdmFsIHw9IFZJRF9NT0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNfUFVMU0VTOworCWVsc2UK KwkJdmFsIHw9IFZJRF9NT0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNfRVZFTlRTOworCisJZHNpX3dy aXRlKGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfc2V0X21vZGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJIHVuc2lnbmVkIGxv bmcgbW9kZV9mbGFncykKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisK KwlpZiAobW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJZHNpX3dyaXRlKGRz aSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfVklERU9fTU9ERSk7CisJCWR3X21pcGlfZHNpX3ZpZGVv X21vZGVfY29uZmlnKGRzaSk7CisJCWRzaV93cml0ZShkc2ksIERTSV9MUENMS19DVFJMLCBQSFlf VFhSRVFVRVNUQ0xLSFMpOworCX0gZWxzZSB7CisJCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NG RywgRU5BQkxFX0NNRF9NT0RFKTsKKwl9CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQ T1dFUlVQKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJsZShzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJ ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfUlNUWik7Cit9CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJLyoKKwkgKiBU aGUgbWF4aW11bSBwZXJtaXR0ZWQgZXNjYXBlIGNsb2NrIGlzIDIwTUh6IGFuZCBpdCBpcyBkZXJp dmVkIGZyb20KKwkgKiBsYW5lYnl0ZWNsaywgd2hpY2ggaXMgcnVubmluZyBhdCAibGFuZV9tYnBz IC8gOCIuICBUaHVzIHdlIHdhbnQ6CisJICoKKwkgKiAgICAgKGxhbmVfbWJwcyA+PiAzKSAvIGVz Y19jbGtfZGl2aXNpb24gPCAyMAorCSAqIHdoaWNoIGlzOgorCSAqICAgICAobGFuZV9tYnBzID4+ IDMpIC8gMjAgPiBlc2NfY2xrX2RpdmlzaW9uCisJICovCisJdTMyIGVzY19jbGtfZGl2aXNpb24g PSAoZHNpLT5sYW5lX21icHMgPj4gMykgLyAyMCArIDE7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lf UFdSX1VQLCBSRVNFVCk7CisKKwkvKgorCSAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cworCSAq IHRpbWVvdXQgY2xvY2sgZGl2aXNpb24gc2hvdWxkIGJlIGNvbXB1dGVkIHdpdGggdGhlCisJICog aGlnaCBzcGVlZCB0cmFuc21pc3Npb24gY291bnRlciB0aW1lb3V0IGFuZCBieXRlIGxhbmUuLi4K KwkgKi8KKwlkc2lfd3JpdGUoZHNpLCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJVklEU0lPTigx MCkgfAorCQkgIFRYX0VTQ19DTEtfRElWSURTSU9OKGVzY19jbGtfZGl2aXNpb24pKTsKK30KKwor c3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0g MCwgY29sb3IgPSAwOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lf Rk1UX1JHQjg4ODoKKwkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzI0QklUOworCQlicmVhazsK KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18x OEJJVF8yIHwgRU4xOF9MT09TRUxZOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2 NjZfUEFDS0VEOgorCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMTsKKwkJYnJlYWs7 CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdf MTZCSVRfMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19OVlNZTkMpCisJCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOworCWlmIChtb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfTkhTWU5DKQorCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKKworCWRz aV93cml0ZShkc2ksIERTSV9EUElfVkNJRCwgRFBJX1ZJRChkc2ktPmNoYW5uZWwpKTsKKwlkc2lf d3JpdGUoZHNpLCBEU0lfRFBJX0NPTE9SX0NPRElORywgY29sb3IpOworCWRzaV93cml0ZShkc2ks IERTSV9EUElfQ0ZHX1BPTCwgdmFsKTsKKwkvKgorCSAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50 cworCSAqIGxhcmdlc3QgcGFja2V0IHNpemVzIGR1cmluZyBoZnAgb3IgZHVyaW5nIHZzYS92cGIv dmZwCisJICogc2hvdWxkIGJlIGNvbXB1dGVkIGFjY29yZGluZyB0byBieXRlIGxhbmUsIGxhbmUg bnVtYmVyIGFuZCBvbmx5CisJICogaWYgc2VuZGluZyBscCBjbWRzIGluIGhpZ2ggc3BlZWQgaXMg ZW5hYmxlIChQSFlfVFhSRVFVRVNUQ0xLSFMpCisJICovCisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQ SV9MUF9DTURfVElNLCBPVVRWQUNUX0xQQ01EX1RJTUUoNCkKKwkJICB8IElOVkFDVF9MUENNRF9U SU1FKDQpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29u ZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QQ0tI RExfQ0ZHLCBFTl9DUkNfUlggfCBFTl9FQ0NfUlggfCBFTl9CVEEpOworfQorCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp LAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJLyoKKwkgKiBU T0RPIGR3IGRydiBpbXByb3ZlbWVudHMKKwkgKiBvbmx5IGJ1cnN0IG1vZGUgaXMgc3VwcG9ydGVk IGhlcmUuIEZvciBub24tYnVyc3QgdmlkZW8gbW9kZXMsCisJICogd2Ugc2hvdWxkIGNvbXB1dGUg RFNJX1ZJRF9QS1RfU0laRSwgRFNJX1ZDQ1IuTlVNQyAmCisJICogRFNJX1ZOUENSLk5QU0laRS4u LiBlc3BlY2lhbGx5IGJlY2F1c2UgdGhpcyBkcml2ZXIgc3VwcG9ydHMKKwkgKiBub24tYnVyc3Qg dmlkZW8gbW9kZXMsIHNlZSBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZygpLi4uCisJICov CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9QS1RfU0laRSwgVklEX1BLVF9TSVpFKG1vZGUtPmhk aXNwbGF5KSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25m aWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJLyoKKwkgKiBUT0RPIGR3IGRydiBpbXBy b3ZlbWVudHMKKwkgKiBjb21wdXRlIGhpZ2ggc3BlZWQgdHJhbnNtaXNzaW9uIGNvdW50ZXIgdGlt ZW91dCBhY2NvcmRpbmcKKwkgKiB0byB0aGUgdGltZW91dCBjbG9jayBkaXZpc2lvbiAoVE9fQ0xL X0RJVklEU0lPTikgYW5kIGJ5dGUgbGFuZS4uLgorCSAqLworCWRzaV93cml0ZShkc2ksIERTSV9U T19DTlRfQ0ZHLCBIU1RYX1RPX0NOVCgxMDAwKSB8IExQUlhfVE9fQ05UKDEwMDApKTsKKwkvKgor CSAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cworCSAqIHRoZSBCdXMtVHVybi1Bcm91bmQgVGlt ZW91dCBDb3VudGVyIHNob3VsZCBiZSBjb21wdXRlZAorCSAqIGFjY29yZGluZyB0byBieXRlIGxh bmUuLi4KKwkgKi8KKwlkc2lfd3JpdGUoZHNpLCBEU0lfQlRBX1RPX0NOVCwgMHhkMDApOworCWRz aV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RFKTsKK30KKworLyogR2V0 IGxhbmUgYnl0ZSBjbG9jayBjeWNsZXMuICovCitzdGF0aWMgdTMyIGR3X21pcGlfZHNpX2dldF9o Y29tcG9uZW50X2xiY2Moc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQkgICB1MzIgaGNvbXBvbmVudCkKK3sKKwl1MzIg ZnJhYywgbGJjYzsKKworCWxiY2MgPSBoY29tcG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBNU0VD X1BFUl9TRUMgLyA4OworCisJZnJhYyA9IGxiY2MgJSBtb2RlLT5jbG9jazsKKwlsYmNjID0gbGJj YyAvIG1vZGUtPmNsb2NrOworCWlmIChmcmFjKQorCQlsYmNjKys7CisKKwlyZXR1cm4gbGJjYzsK K30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWcoc3RydWN0IGR3 X21pcGlfZHNpICpkc2ksCisJCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7 CisJdTMyIGh0b3RhbCwgaHNhLCBoYnAsIGxiY2M7CisKKwlodG90YWwgPSBtb2RlLT5odG90YWw7 CisJaHNhID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0gbW9k ZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCisJLyoKKwkgKiBUT0RPIGR3IGRydiBpbXBy b3ZlbWVudHMKKwkgKiBjb21wdXRhdGlvbnMgYmVsb3cgbWF5IGJlIGltcHJvdmVkLi4uCisJICov CisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBtb2RlLCBodG90 YWwpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfSExJTkVfVElNRSwgbGJjYyk7CisKKwlsYmNj ID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIG1vZGUsIGhzYSk7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1ZJRF9IU0FfVElNRSwgbGJjYyk7CisKKwlsYmNjID0gZHdfbWlwaV9k c2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIG1vZGUsIGhicCk7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1ZJRF9IQlBfVElNRSwgbGJjYyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3Zl cnRpY2FsX3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgICAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFjdGl2ZSwgdnNhLCB2 ZnAsIHZicDsKKworCXZhY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsKKwl2c2EgPSBtb2RlLT52c3lu Y19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKKwl2ZnAgPSBtb2RlLT52c3luY19zdGFydCAtIG1v ZGUtPnZkaXNwbGF5OworCXZicCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKwor CWRzaV93cml0ZShkc2ksIERTSV9WSURfVkFDVElWRV9MSU5FUywgdmFjdGl2ZSk7CisJZHNpX3dy aXRlKGRzaSwgRFNJX1ZJRF9WU0FfTElORVMsIHZzYSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJ RF9WRlBfTElORVMsIHZmcCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WQlBfTElORVMsIHZi cCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwkvKgorCSAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50 cworCSAqIGRhdGEgJiBjbG9jayBsYW5lIHRpbWVycyBzaG91bGQgYmUgY29tcHV0ZWQgYWNjb3Jk aW5nIHRvIHBhbmVsCisJICogYmxhbmtpbmdzIGFuZCB0byB0aGUgYXV0b21hdGljIGNsb2NrIGxh bmUgY29udHJvbCBtb2RlLi4uCisJICogbm90ZTogRFNJX1BIWV9UTVJfQ0ZHLk1BWF9SRF9USU1F IHNob3VsZCBiZSBpbiBsaW5lIHdpdGgKKwkgKiBEU0lfQ01EX01PREVfQ0ZHLk1BWF9SRF9QS1Rf U0laRV9MUCAoc2VlIENNRF9NT0RFX0FMTF9MUCkKKwkgKi8KKwlkc2lfd3JpdGUoZHNpLCBEU0lf UEhZX1RNUl9DRkcsIFBIWV9IUzJMUF9USU1FKDB4NDApCisJCSAgfCBQSFlfTFAySFNfVElNRSgw eDQwKSB8IE1BWF9SRF9USU1FKDEwMDAwKSk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RN Ul9MUENMS19DRkcsIFBIWV9DTEtIUzJMUF9USU1FKDB4NDApCisJCSAgfCBQSFlfQ0xLTFAySFNf VElNRSgweDQwKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNl X2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwkvKgorCSAqIFRPRE8gZHcgZHJ2 IGltcHJvdmVtZW50cworCSAqIHN0b3Agd2FpdCB0aW1lIHNob3VsZCBiZSB0aGUgbWF4aW11bSBi ZXR3ZWVuIGhvc3QgZHNpCisJICogYW5kIHBhbmVsIHN0b3Agd2FpdCB0aW1lcworCSAqLworCWRz aV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ0ZHLCBQSFlfU1RPUF9XQUlUX1RJTUUoMHgyMCkgfAor CQkgIE5fTEFORVMoZHNpLT5sYW5lcykpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9k cGh5X2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJLyogQ2xlYXIgUEhZIHN0YXRl ICovCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfRElTRk9SQ0VQTEwgfCBQSFlf RElTQUJMRUNMSworCQkgIHwgUEhZX1JTVFogfCBQSFlfU0hVVERPV05aKTsKKwlkc2lfd3JpdGUo ZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xSKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZ X1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMUik7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNp X2RwaHlfZW5hYmxlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXUzMiB2YWw7CisJaW50 IHJldDsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX0VORk9SQ0VQTEwgfCBQ SFlfRU5BQkxFQ0xLIHwKKwkJICBQSFlfVU5SU1RaIHwgUEhZX1VOU0hVVERPV05aKTsKKworCXJl dCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfUEhZX1NUQVRVUywKKwkJCQkg dmFsLCB2YWwgJiBMT0NLLCAxMDAwLCBQSFlfU1RBVFVTX1RJTUVPVVRfVVMpOworCWlmIChyZXQg PCAwKQorCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQgdG8gd2FpdCBwaHkgbG9jayBzdGF0ZVxu Iik7CisKKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1BIWV9TVEFU VVMsCisJCQkJIHZhbCwgdmFsICYgU1RPUF9TVEFURV9DTEtfTEFORSwgMTAwMCwKKwkJCQkgUEhZ X1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkKKwkJRFJNX0RFQlVHX0RSSVZFUigi ZmFpbGVkIHRvIHdhaXQgcGh5IGNsayBsYW5lIHN0b3Agc3RhdGVcbiIpOworfQorCitzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9jbGVhcl9lcnIoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJ ZHNpX3JlYWQoZHNpLCBEU0lfSU5UX1NUMCk7CisJZHNpX3JlYWQoZHNpLCBEU0lfSU5UX1NUMSk7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX0lOVF9NU0swLCAwKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lf SU5UX01TSzEsIDApOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfcG9zdF9k aXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNp ICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7CisKKwkvKgorCSAqIFN3aXRjaCB0byBjb21t YW5kIG1vZGUgYmVmb3JlIHBhbmVsLWJyaWRnZSBwb3N0X2Rpc2FibGUgJgorCSAqIHBhbmVsIHVu cHJlcGFyZS4KKwkgKiBOb3RlOiBwYW5lbC1icmlkZ2UgZGlzYWJsZSAmIHBhbmVsIGRpc2FibGUg aGFzIGJlZW4gY2FsbGVkCisJICogYmVmb3JlIGJ5IHRoZSBkcm0gZnJhbWV3b3JrLgorCSAqLwor CWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgMCk7CisKKwkvKgorCSAqIFRPRE8gT25seSB3YXkg Zm91bmQgdG8gY2FsbCBwYW5lbC1icmlkZ2UgcG9zdF9kaXNhYmxlICYKKwkgKiBwYW5lbCB1bnBy ZXBhcmUgYmVmb3JlIHRoZSBkc2kgImZpbmFsIiBkaXNhYmxlLi4uCisJICogVGhpcyBuZWVkcyB0 byBiZSBmaXhlZCBpbiB0aGUgZHJtX2JyaWRnZSBmcmFtZXdvcmsgYW5kIHRoZSBBUEkKKwkgKiBu ZWVkcyB0byBiZSB1cGRhdGVkIHRvIG1hbmFnZSBvdXIgb3duIGNhbGwgY2hhaW5zLi4uCisJICov CisJZHNpLT5wYW5lbF9icmlkZ2UtPmZ1bmNzLT5wb3N0X2Rpc2FibGUoZHNpLT5wYW5lbF9icmlk Z2UpOworCisJZHdfbWlwaV9kc2lfZGlzYWJsZShkc2kpOworCWNsa19kaXNhYmxlX3VucHJlcGFy ZShkc2ktPnBjbGspOworCXBtX3J1bnRpbWVfcHV0KGRzaS0+ZGV2KTsKK30KKwordm9pZCBkd19t aXBpX2RzaV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdl X3RvX2RzaShicmlkZ2UpOworCWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9waHlfb3BzICpwaHlf b3BzID0gZHNpLT5wbGF0X2RhdGEtPnBoeV9vcHM7CisJdm9pZCAqcHJpdl9kYXRhID0gZHNpLT5w bGF0X2RhdGEtPnByaXZfZGF0YTsKKwlpbnQgcmV0OworCisJY2xrX3ByZXBhcmVfZW5hYmxlKGRz aS0+cGNsayk7CisKKwlyZXQgPSBwaHlfb3BzLT5nZXRfbGFuZV9tYnBzKHByaXZfZGF0YSwgbW9k ZSwgZHNpLT5tb2RlX2ZsYWdzLAorCQkJCSAgICAgZHNpLT5sYW5lcywgZHNpLT5mb3JtYXQsICZk c2ktPmxhbmVfbWJwcyk7CisJaWYgKHJldCkKKwkJRFJNX0RFQlVHX0RSSVZFUigiUGh5IGdldF9s YW5lX21icHMoKSBmYWlsZWRcbiIpOworCisJcG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7 CisJZHdfbWlwaV9kc2lfaW5pdChkc2kpOworCWR3X21pcGlfZHNpX2RwaV9jb25maWcoZHNpLCBt b2RlKTsKKwlkd19taXBpX2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoZHNpKTsKKwlkd19taXBp X2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9j b25maWcoZHNpLCBtb2RlKTsKKwlkd19taXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKGRzaSk7 CisJZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWcoZHNpLCBtb2RlKTsKKwlkd19taXBpX2Rz aV92ZXJ0aWNhbF90aW1pbmdfY29uZmlnKGRzaSwgbW9kZSk7CisKKwlkd19taXBpX2RzaV9kcGh5 X2luaXQoZHNpKTsKKwlkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoZHNpKTsKKwlkd19t aXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoZHNpKTsKKworCWR3X21pcGlfZHNpX2NsZWFy X2Vycihkc2kpOworCisJcmV0ID0gcGh5X29wcy0+aW5pdChwcml2X2RhdGEpOworCWlmIChyZXQp CisJCURSTV9ERUJVR19EUklWRVIoIlBoeSBpbml0KCkgZmFpbGVkXG4iKTsKKworCWR3X21pcGlf ZHNpX2RwaHlfZW5hYmxlKGRzaSk7CisKKwlkd19taXBpX2RzaV93YWl0X2Zvcl90d29fZnJhbWVz KG1vZGUpOworCisJLyogU3dpdGNoIHRvIGNtZCBtb2RlIGZvciBwYW5lbC1icmlkZ2UgcHJlX2Vu YWJsZSAmIHBhbmVsIHByZXBhcmUgKi8KKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIDApOwor fQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNp KGJyaWRnZSk7CisKKwkvKiBTd2l0Y2ggdG8gdmlkZW8gbW9kZSBmb3IgcGFuZWwtYnJpZGdlIGVu YWJsZSAmIHBhbmVsIGVuYWJsZSAqLworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgTUlQSV9E U0lfTU9ERV9WSURFTyk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cworZHdfbWlw aV9kc2lfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCSAg ICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOworCWNvbnN0IHN0cnVjdCBkd19t aXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gZHNpLT5wbGF0X2RhdGE7CisJZW51bSBkcm1fbW9k ZV9zdGF0dXMgbW9kZV9zdGF0dXMgPSBNT0RFX09LOworCisJaWYgKHBkYXRhLT5tb2RlX3ZhbGlk KQorCQltb2RlX3N0YXR1cyA9IHBkYXRhLT5tb2RlX3ZhbGlkKHBkYXRhLT5wcml2X2RhdGEsIG1v ZGUpOworCisJcmV0dXJuIG1vZGVfc3RhdHVzOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNp X2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKKworCWlmICghYnJpZGdlLT5l bmNvZGVyKSB7CisJCURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZFxu Iik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNldCB0aGUgZW5jb2RlciB0eXBlIGFz IGNhbGxlciBkb2VzIG5vdCBrbm93IGl0ICovCisJYnJpZGdlLT5lbmNvZGVyLT5lbmNvZGVyX3R5 cGUgPSBEUk1fTU9ERV9FTkNPREVSX0RTSTsKKworCS8qIEF0dGFjaCB0aGUgcGFuZWwtYnJpZGdl IHRvIHRoZSBkc2kgYnJpZGdlICovCisJcmV0dXJuIGRybV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ ZW5jb2RlciwgZHNpLT5wYW5lbF9icmlkZ2UsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2JyaWRnZV9mdW5jcyBkd19taXBpX2RzaV9icmlkZ2VfZnVuY3MgPSB7CisJLm1vZGVfc2V0 ICAgICA9IGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX3NldCwKKwkuZW5hYmxlCSAgICAgID0gZHdf bWlwaV9kc2lfYnJpZGdlX2VuYWJsZSwKKwkucG9zdF9kaXNhYmxlID0gZHdfbWlwaV9kc2lfYnJp ZGdlX3Bvc3RfZGlzYWJsZSwKKwkubW9kZV92YWxpZCAgID0gZHdfbWlwaV9kc2lfYnJpZGdlX21v ZGVfdmFsaWQsCisJLmF0dGFjaAkgICAgICA9IGR3X21pcGlfZHNpX2JyaWRnZV9hdHRhY2gsCit9 OworCitzdGF0aWMgc3RydWN0IGR3X21pcGlfZHNpICoKK19fZHdfbWlwaV9kc2lfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2Rz aV9wbGF0X2RhdGEgKnBsYXRfZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2OworCXN0cnVjdCByZXNldF9jb250cm9sICphcGJfcnN0OworCXN0cnVjdCBkd19taXBpX2Rz aSAqZHNpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGxhdF9k YXRhID0gcGxhdF9kYXRhOworCisJaWYgKCFwbGF0X2RhdGEtPnBoeV9vcHMtPmluaXQgfHwgIXBs YXRfZGF0YS0+cGh5X29wcy0+Z2V0X2xhbmVfbWJwcykgeworCQlEUk1fRVJST1IoIlBoeSBub3Qg cHJvcGVybHkgY29uZmlndXJlZFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCX0K KworCWlmICghcGxhdF9kYXRhLT5iYXNlKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJCWlmICghcmVzKQorCQkJcmV0dXJuIEVSUl9Q VFIoLUVOT0RFVik7CisKKwkJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKKwkJaWYgKElTX0VSUihkc2ktPmJhc2UpKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RF Vik7CisKKwl9IGVsc2UgeworCQlkc2ktPmJhc2UgPSBwbGF0X2RhdGEtPmJhc2U7CisJfQorCisJ ZHNpLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ cGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBjbGspOworCQlkZXZfZXJyKGRldiwgIlVu YWJsZSB0byBnZXQgcGNsazogJWRcbiIsIHJldCk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJ fQorCisJLyoKKwkgKiBOb3RlIHRoYXQgdGhlIHJlc2V0IHdhcyBub3QgZGVmaW5lZCBpbiB0aGUg aW5pdGlhbCBkZXZpY2UgdHJlZSwgc28KKwkgKiB3ZSBoYXZlIHRvIGJlIHByZXBhcmVkIGZvciBp dCBub3QgYmVpbmcgZm91bmQuCisJICovCisJYXBiX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9n ZXQoZGV2LCAiYXBiIik7CisJaWYgKElTX0VSUihhcGJfcnN0KSkgeworCQlyZXQgPSBQVFJfRVJS KGFwYl9yc3QpOworCQlpZiAocmV0ID09IC1FTk9FTlQpIHsKKwkJCWFwYl9yc3QgPSBOVUxMOwor CQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHJlc2V0IGNvbnRyb2w6 ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJfQorCX0KKworCWlmIChh cGJfcnN0KSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGspOworCQlpZiAo cmV0KSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9f ZnVuY19fKTsKKwkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0KKworCQlyZXNldF9jb250cm9s X2Fzc2VydChhcGJfcnN0KTsKKwkJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJCXJlc2V0X2NvbnRy b2xfZGVhc3NlcnQoYXBiX3JzdCk7CisKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNs ayk7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCWRzaS0+ZHNpX2hvc3Qub3Bz ID0gJmR3X21pcGlfZHNpX2hvc3Rfb3BzOworCWRzaS0+ZHNpX2hvc3QuZGV2ID0gZGV2OworCXJl dCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQSSBob3N0OiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlkc2ktPmJyaWRnZS5kcml2ZXJfcHJp dmF0ZSA9IGRzaTsKKwlkc2ktPmJyaWRnZS5mdW5jcyA9ICZkd19taXBpX2RzaV9icmlkZ2VfZnVu Y3M7CisjaWZkZWYgQ09ORklHX09GCisJZHNpLT5icmlkZ2Uub2Zfbm9kZSA9IHBkZXYtPmRldi5v Zl9ub2RlOworI2VuZGlmCisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOworCisJcmV0dXJu IGRzaTsKK30KKworc3RhdGljIHZvaWQgX19kd19taXBpX2RzaV9yZW1vdmUoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJcG1fcnVudGltZV9kaXNhYmxlKGRzaS0+ZGV2KTsKK30KKworLyoK KyAqIFByb2JlL3JlbW92ZSBBUEksIHVzZWQgZnJvbSBwbGF0Zm9ybXMgYmFzZWQgb24gdGhlIERS TSBicmlkZ2UgQVBJLgorICovCitpbnQgZHdfbWlwaV9kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0 YSAqcGxhdF9kYXRhKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpOworCisJZHNpID0gX19k d19taXBpX2RzaV9wcm9iZShwZGV2LCBwbGF0X2RhdGEpOworCWlmIChJU19FUlIoZHNpKSkKKwkJ cmV0dXJuIFBUUl9FUlIoZHNpKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwo ZHdfbWlwaV9kc2lfcHJvYmUpOworCit2b2lkIGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ ZHNpX2hvc3QpOworCisJX19kd19taXBpX2RzaV9yZW1vdmUoZHNpKTsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKGR3X21pcGlfZHNpX3JlbW92ZSk7CisKKy8qCisgKiBCaW5kL3VuYmluZCBBUEksIHVz ZWQgZnJvbSBwbGF0Zm9ybXMgYmFzZWQgb24gdGhlIGNvbXBvbmVudCBmcmFtZXdvcmsuCisgKi8K K2ludCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJICAgICBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lf cGxhdF9kYXRhICpwbGF0X2RhdGEpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2k7CisJaW50 IHJldDsKKworCWRzaSA9IF9fZHdfbWlwaV9kc2lfcHJvYmUocGRldiwgcGxhdF9kYXRhKTsKKwlp ZiAoSVNfRVJSKGRzaSkpCisJCXJldHVybiBQVFJfRVJSKGRzaSk7CisKKwlyZXQgPSBkcm1fYnJp ZGdlX2F0dGFjaChlbmNvZGVyLCAmZHNpLT5icmlkZ2UsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJ ZHdfbWlwaV9kc2lfcmVtb3ZlKHBkZXYpOworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFs aXplIGJyaWRnZSB3aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7 Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV9iaW5kKTsKKwordm9pZCBkd19taXBp X2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkd19taXBpX2RzaSAq ZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlfX2R3X21pcGlfZHNpX3JlbW92ZShkc2kp OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHdfbWlwaV9kc2lfdW5iaW5kKTsKKworTU9EVUxFX0FV VEhPUigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsKK01PRFVMRV9BVVRIT1Io IlBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJ UFRJT04oIkRXIE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNF TlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ZHctbWlwaS1kc2kiKTsKZGlmZiAt LWdpdCBhL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oIGIvaW5jbHVkZS9kcm0vYnJp ZGdlL2R3X21pcGlfZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIz MGZlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5o CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmlj cyBTQSAyMDE3CisgKgorICogQXV0aG9yczogUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51 QHN0LmNvbT4KKyAqICAgICAgICAgIFlhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5j b20+CisgKgorICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChH UEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaWZuZGVmIF9fRFdfTUlQSV9EU0lfXworI2RlZmluZSBf X0RXX01JUElfRFNJX18KKworc3RydWN0IGR3X21pcGlfZHNpX3BoeV9vcHMgeworCWludCAoKmlu aXQpKHZvaWQgKnByaXZfZGF0YSk7CisJaW50ICgqZ2V0X2xhbmVfbWJwcykodm9pZCAqcHJpdl9k YXRhLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgdW5zaWduZWQgbG9u ZyBtb2RlX2ZsYWdzLCB1MzIgbGFuZXMsIHUzMiBmb3JtYXQsCisJCQkgICAgIHVuc2lnbmVkIGlu dCAqbGFuZV9tYnBzKTsKK307CisKK3N0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgeworCXZv aWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFuZXM7CisKKwllbnVt IGRybV9tb2RlX3N0YXR1cyAoKm1vZGVfdmFsaWQpKHZvaWQgKnByaXZfZGF0YSwKKwkJCQkJICAg Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworCisJY29uc3Qgc3RydWN0IGR3 X21pcGlfZHNpX3BoeV9vcHMgKnBoeV9vcHM7CisKKwl2b2lkICpwcml2X2RhdGE7Cit9OworCitp bnQgZHdfbWlwaV9kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJICAg ICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhKTsKK3ZvaWQg ZHdfbWlwaV9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworaW50IGR3 X21pcGlfZHNpX2JpbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2Rh dGEgKnBsYXRfZGF0YSk7Cit2b2lkIGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYpOworCisjZW5kaWYgLyogX19EV19NSVBJX0RTSV9fICovCi0tIAoxLjkuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==