From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v4 12/21] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Date: Tue, 23 Dec 2014 18:02:10 +0800 Message-ID: <1419328939-22758-13-git-send-email-Ying.Liu@freescale.com> References: <1419328939-22758-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: <1419328939-22758-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, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9zdCBjb250cm9s bGVyIGRyaXZlciBzdXBwb3J0LgpDdXJyZW50bHksIHRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGJ1 cnN0IHdpdGggc3luYyBwdWxzZXMgbW9kZSBvbmx5LgoKU2lnbmVkLW9mZi1ieTogTGl1IFlpbmcg PFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Ci0tLQp2My0+djQ6CiAqIE1vdmUgdGhlIHJlbGV2YW50 IGR0LWJpbmRpbmdzIHRvIGEgc2VwYXJhdGUgcGF0Y2ggdG8gYWRkcmVzcyBTdGVmYW4KICAgV2Fo cmVuJ3MgY29tbWVudC4KCnYyLT52MzoKICogTmV3bHkgaW50cm9kdWNlZCBpbiB2MyB0byBhZGRy ZXNzIEFuZHkgWWFuJ3MgY29tbWVudC4gIFRoaXMgaXMgYmFzZWQgb24KICAgdGhlIGkuTVggTUlQ SSBEU0kgZHJpdmVyIGluIHYyLiAgVG8gbWFrZSB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNSVBJ IERTSQogICBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGxlc3MgcGxhdGZvcm0tZGVwZW5kYW50LCB0 aGlzIHBhdGNoIHBsYWNlcyBpdCBhdAogICB0aGUgZHJtL2JyaWRnZSBkaXJlY3RvcnkgYXMgYSBE Uk0gYnJpZGdlIGRyaXZlci4KCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgICAg fCAgIDUgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgIHwgICAxICsKIGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYyB8IDk5OCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmggICAg IHwgIDI3ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTAzMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tj b25maWcKaW5kZXggODg0OTIzZi4uODE4MDQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAt MSwzICsxLDggQEAKK2NvbmZpZyBEUk1fRFdfTUlQSV9EU0kKKwlib29sICJTeW5vcHN5cyBEZXNp Z25XYXJlIE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UiCisJZGVwZW5kcyBvbiBEUk0K KwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwogY29uZmlnIERSTV9QVE4zNDYwCiAJdHJpc3RhdGUg IlBUTjM0NjAgRFAvTFZEUyBicmlkZ2UiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01h a2VmaWxlCmluZGV4IGI0NzMzZTEuLmIzMjZhZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpA QCAtMSwzICsxLDQgQEAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKK29iai0kKENPTkZJ R19EUk1fRFdfTUlQSV9EU0kpICs9IGR3X21pcGlfZHNpLm8KIG9iai0kKENPTkZJR19EUk1fUFRO MzQ2MCkgKz0gcHRuMzQ2MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3 X21pcGlfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxY2Q2ZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYwpAQCAtMCwwICsxLDk5OCBAQAor LyoKKyAqIFN5bm9wc3lzIERlc2lnbldhcmUoRFcpIE1JUEkgRFNJIEhvc3QgQ29udHJvbGxlcgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNB LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxkcm0vYnJpZGdlL2R3X21p cGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8 dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNkZWZpbmUgRFNJX1ZFUlNJT04JCQkweDAwCisKKyNk ZWZpbmUgRFNJX1BXUl9VUAkJCTB4MDQKKyNkZWZpbmUgUkVTRVQJCQkJMAorI2RlZmluZSBQT1dF UlVQCQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9DTEtNR1JfQ0ZHCQkJMHgwOAorI2RlZmluZSBU T19DTEtfRElWSURTSU9OKGRpdikJCSgoKGRpdikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBUWF9F U0NfQ0xLX0RJVklEU0lPTihkaXYpCSgoKGRpdikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERT SV9EUElfQ0ZHCQkJMHgwYworI2RlZmluZSBFTjE4X0xPT1NFTFkJCQlCSVQoMTApCisjZGVmaW5l IENPTE9STV9BQ1RJVkVfTE9XCQlCSVQoOSkKKyNkZWZpbmUgU0hVVERfQUNUSVZFX0xPVwkJQklU KDgpCisjZGVmaW5lIEhTWU5DX0FDVElWRV9MT1cJCUJJVCg3KQorI2RlZmluZSBWU1lOQ19BQ1RJ VkVfTE9XCQlCSVQoNikKKyNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJCUJJVCg1KQorI2RlZmlu ZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzEJKDB4MCA8PCAyKQorI2RlZmluZSBEUElfQ09MT1Jf Q09ESU5HXzE2QklUXzIJKDB4MSA8PCAyKQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklU XzMJKDB4MiA8PCAyKQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzEJKDB4MyA8PCAy KQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIJKDB4NCA8PCAyKQorI2RlZmluZSBE UElfQ09MT1JfQ09ESU5HXzI0QklUCQkoMHg1IDw8IDIpCisjZGVmaW5lIERQSV9WSUQodmlkKQkJ CSgoKHZpZCkgJiAweDMpIDw8IDApCisKKyNkZWZpbmUgRFNJX0RCSV9DRkcJCQkweDEwCisjZGVm aW5lIERTSV9EQklTX0NNRFNJWkUJCTB4MTQKKworI2RlZmluZSBEU0lfUENLSERMX0NGRwkJCTB4 MTgKKyNkZWZpbmUgR0VOX1ZJRF9SWCh2aWQpCQkJKCgodmlkKSAmIDB4MykgPDwgNSkKKyNkZWZp bmUgRU5fQ1JDX1JYCQkJQklUKDQpCisjZGVmaW5lIEVOX0VDQ19SWAkJCUJJVCgzKQorI2RlZmlu ZSBFTl9CVEEJCQkJQklUKDIpCisjZGVmaW5lIEVOX0VPVE5fUlgJCQlCSVQoMSkKKyNkZWZpbmUg RU5fRU9UUF9UWAkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURfTU9ERV9DRkcJCTB4MWMKKyNk ZWZpbmUgRlJBTUVfQlRBX0FDSwkJCUJJVCgxMSkKKyNkZWZpbmUgRU5fTlVMTF9QS1QJCQlCSVQo MTApCisjZGVmaW5lIEVOX05VTExfUEtUX01BU0sJCUJJVCgxMCkKKyNkZWZpbmUgRU5fTVVMVElf UEtUCQkJQklUKDkpCisjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVIJCSgweDNmIDw8IDMpCisjZGVm aW5lIEVOQUJMRV9MT1dfUE9XRVJfTUFTSwkJKDB4M2YgPDwgMykKKyNkZWZpbmUgVklEX01PREVf VFlQRV9OT05CVVJTVF9TWU5DX1BVTFNFUwkoMHgwIDw8IDEpCisjZGVmaW5lIFZJRF9NT0RFX1RZ UEVfTk9OQlVSU1RfU1lOQ19FVkVOVFMJKDB4MSA8PCAxKQorI2RlZmluZSBWSURfTU9ERV9UWVBF X0JVUlNUX1NZTkNfUFVMU0VTCQkoMHgzIDw8IDEpCisjZGVmaW5lIFZJRF9NT0RFX1RZUEVfTUFT SwkJCSgweDMgPDwgMSkKKyNkZWZpbmUgRU5BQkxFX1ZJREVPX01PREUJCQlCSVQoMCkKKyNkZWZp bmUgRElTQUJMRV9WSURFT19NT0RFCQkJMAorI2RlZmluZSBFTkFCTEVfVklERU9fTU9ERV9NQVNL CQkJQklUKDApCisKKyNkZWZpbmUgRFNJX1ZJRF9QS1RfQ0ZHCQkJMHgyMAorI2RlZmluZSBOVUxM X1BLVF9TSVpFKGIpCQkoKChiKSAmIDB4M2YpIDw8IDIxKQorI2RlZmluZSBOVU1fQ0hVTktTKG4p CQkJKCgobikgJiAweDNmKSA8PCAxMSkKKyNkZWZpbmUgVklEX1BLVF9TSVpFKHApCQkJKCgocCkg JiAweDdmZikgPDwgMCkKKyNkZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHg3ZmYKKworI2RlZmlu ZSBEU0lfQ01EX01PREVfQ0ZHCQkweDI0CisjZGVmaW5lIEVOX1RFQVJfRlgJCQlCSVQoMTQpCisj ZGVmaW5lIEVOX0FDS19SUVNUCQkJQklUKDEzKQorI2RlZmluZSBEQ1NfTFdfVFhfTFAJCQlCSVQo MTIpCisjZGVmaW5lIEdFTl9MV19UWF9MUAkJCUJJVCgxMSkKKyNkZWZpbmUgTUFYX1JEX1BLVF9T SVpFX0xQCQlCSVQoMTApCisjZGVmaW5lIERDU19TV18yUF9UWF9MUAkJCUJJVCg5KQorI2RlZmlu ZSBEQ1NfU1dfMVBfVFhfTFAJCQlCSVQoOCkKKyNkZWZpbmUgRENTX1NXXzBQX1RYX0xQCQkJQklU KDcpCisjZGVmaW5lIEdFTl9TUl8yUF9UWF9MUAkJCUJJVCg2KQorI2RlZmluZSBHRU5fU1JfMVBf VFhfTFAJCQlCSVQoNSkKKyNkZWZpbmUgR0VOX1NSXzBQX1RYX0xQCQkJQklUKDQpCisjZGVmaW5l IEdFTl9TV18yUF9UWF9MUAkJCUJJVCgzKQorI2RlZmluZSBHRU5fU1dfMVBfVFhfTFAJCQlCSVQo MikKKyNkZWZpbmUgR0VOX1NXXzBQX1RYX0xQCQkJQklUKDEpCisjZGVmaW5lIEVOQUJMRV9DTURf TU9ERQkJCUJJVCgwKQorI2RlZmluZSBESVNBQkxFX0NNRF9NT0RFCQkwCisjZGVmaW5lIEVOQUJM RV9DTURfTU9ERV9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgQ01EX01PREVfQUxMX0xQCQkJKERDU19M V19UWF9MUCB8IFwKKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKKwkJCQkJIE1BWF9SRF9QS1RfU0la RV9MUCB8IFwKKwkJCQkJIERDU19TV18yUF9UWF9MUCB8IFwKKwkJCQkJIERDU19TV18xUF9UWF9M UCB8IFwKKwkJCQkJIERDU19TV18wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8yUF9UWF9MUCB8 IFwKKwkJCQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8wUF9UWF9MUCB8IFwK KwkJCQkJIEdFTl9TV18yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18xUF9UWF9MUCB8IFwKKwkJ CQkJIEdFTl9TV18wUF9UWF9MUCkKKworI2RlZmluZSBEU0lfVE1SX0xJTkVfQ0ZHCQkweDI4Cisj ZGVmaW5lIEhMSU5FX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHgzZmZmKSA8PCAxOCkKKyNkZWZp bmUgSEJQX1RJTUUobGJjYykJCQkoKChsYmNjKSAmIDB4MWZmKSA8PCA5KQorI2RlZmluZSBIU0Ff VElNRShsYmNjKQkJCSgoKGxiY2MpICYgMHgxZmYpIDw8IDApCisKKyNkZWZpbmUgRFNJX1ZUSU1J TkdfQ0ZHCQkJMHgyYworI2RlZmluZSBWX0FDVElWRV9MSU5FUyhsaW5lKQkJKCgobGluZSkgJiAw eDdmZikgPDwgMTYpCisjZGVmaW5lIFZGUF9MSU5FUyhsaW5lKQkJCSgoKGxpbmUpICYgMHgzZikg PDwgMTApCisjZGVmaW5lIFZCUF9MSU5FUyhsaW5lKQkJCSgoKGxpbmUpICYgMHgzZikgPDwgNCkK KyNkZWZpbmUgVlNBX0xJTkVTKGxpbmUpCQkJKCgobGluZSkgJiAweGYpIDw8IDApCisKKyNkZWZp bmUgRFNJX1BIWV9UTVJfQ0ZHCQkJMHgzMAorI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJ KCgobGJjYykgJiAweGZmKSA8PCAyMCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgo KGxiY2MpICYgMHhmZikgPDwgMTIpCisjZGVmaW5lIEJUQV9USU1FKGxiY2MpCQkJKCgobGJjYykg JiAweGZmZikgPDwgMCkKKworI2RlZmluZSBEU0lfR0VOX0hEUgkJCTB4MzQKKyNkZWZpbmUgR0VO X0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkgJiAweGZmZmYpIDw8IDgpCisjZGVmaW5lIEdFTl9IREFU QV9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBHRU5fSFRZUEUodHlwZSkJCQkoKCh0eXBl KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEdFTl9IVFlQRV9NQVNLCQkJMHhmZgorCisjZGVmaW5l IERTSV9HRU5fUExEX0RBVEEJCTB4MzgKKworI2RlZmluZSBEU0lfQ01EX1BLVF9TVEFUVVMJCTB4 M2MKKyNkZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJVCgwKQorI2RlZmluZSBHRU5fQ01EX0ZVTEwJ CQlCSVQoMSkKKyNkZWZpbmUgR0VOX1BMRF9XX0VNUFRZCQkJQklUKDIpCisjZGVmaW5lIEdFTl9Q TERfV19GVUxMCQkJQklUKDMpCisjZGVmaW5lIEdFTl9QTERfUl9FTVBUWQkJCUJJVCg0KQorI2Rl ZmluZSBHRU5fUkRfQ01EX0JVU1kJCQlCSVQoNikKKworI2RlZmluZSBEU0lfVE9fQ05UX0NGRwkJ CTB4NDAKKyNkZWZpbmUgRFNJX0VSUk9SX1NUMAkJCTB4NDQKKyNkZWZpbmUgRFNJX0VSUk9SX1NU MQkJCTB4NDgKKyNkZWZpbmUgRFNJX0VSUk9SX01TSzAJCQkweDRjCisjZGVmaW5lIERTSV9FUlJP Ul9NU0sxCQkJMHg1MAorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4NTQKKyNkZWZpbmUgUEhZ X0RJU0FCTEVDTEsJCQkwCisjZGVmaW5lIFBIWV9FTkFCTEVDTEsJCQlCSVQoMikKKyNkZWZpbmUg UEhZX1JTVFoJCQkwCisjZGVmaW5lIFBIWV9VTlJTVFoJCQlCSVQoMSkKKyNkZWZpbmUgUEhZX1NI VVRET1dOWgkJCTAKKyNkZWZpbmUgUEhZX1VOU0hVVERPV05aCQkJQklUKDApCisKKyNkZWZpbmUg RFNJX1BIWV9JRl9DRkcJCQkweDU4CisjZGVmaW5lIE5fTEFORVMobikJCQkoKCgobikgLSAxKSAm IDB4MykgPDwgMCkKKyNkZWZpbmUgUEhZX1NUT1BfV0FJVF9USU1FKGN5Y2xlKQkoKChjeWNsZSkg JiAweDNmZikgPDwgMikKKworI2RlZmluZSBEU0lfUEhZX0lGX0NUUkwJCQkweDVjCisjZGVmaW5l IFBIWV9JRl9DVFJMX1JFU0VUCQkweDAKKyNkZWZpbmUgVFhfUkVRX0NMS19IUwkJCUJJVCgwKQor CisjZGVmaW5lIERTSV9QSFlfU1RBVFVTCQkJMHg2MAorI2RlZmluZSBMT0NLCQkJCUJJVCgwKQor I2RlZmluZSBTVE9QX1NUQVRFX0NMS19MQU5FCQlCSVQoMikKKworI2RlZmluZSBEU0lfUEhZX1RT VF9DVFJMMAkJMHg2NAorI2RlZmluZSBQSFlfVEVTVENMSwkJCUJJVCgxKQorI2RlZmluZSBQSFlf VU5URVNUQ0xLCQkJMAorI2RlZmluZSBQSFlfVEVTVENMUgkJCUJJVCgwKQorI2RlZmluZSBQSFlf VU5URVNUQ0xSCQkJMAorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwxCQkweDY4CisjZGVmaW5l IFBIWV9URVNURU4JCQlCSVQoMTYpCisjZGVmaW5lIFBIWV9VTlRFU1RFTgkJCTAKKyNkZWZpbmUg UEhZX1RFU1RET1VUKG4pCQkJKCgobikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBQSFlfVEVTVERJ TihuKQkJCSgoKG4pICYgMHhmZikgPDwgMCkKKworI2RlZmluZSBQSFlfU1RBVFVTX1RJTUVPVVQJ CTEwCisjZGVmaW5lIENNRF9QS1RfU1RBVFVTX1RJTUVPVVQJCTIwCisKK3N0cnVjdCBkd19taXBp X2RzaSB7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBk ZXZpY2UgKmRldjsKKworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXN0cnVjdCBjbGsgKnBsbHJl Zl9jbGs7CisJc3RydWN0IGNsayAqY2ZnX2NsazsKKworCXVuc2lnbmVkIGludCBsYW5lX21icHM7 IC8qIHBlciBsYW5lICovCisJdTMyIGNoYW5uZWw7CisJdTMyIGxhbmVzOworCXUzMiBmb3JtYXQ7 CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwljb25zdCBzdHJ1Y3QgZHdfbWlw aV9kc2lfcGxhdF9kYXRhICpwZGF0YTsKKworCWJvb2wgZW5hYmxlZDsKK307CisKK2VudW0gewor CVNUQVRVU19UT19DTEVBUiwKKwlTVEFUVVNfVE9fU0VULAorfTsKKworZW51bSBkd19taXBpX2Rz aV9tb2RlIHsKKwlEV19NSVBJX0RTSV9DTURfTU9ERSwKKwlEV19NSVBJX0RTSV9WSURfTU9ERSwK K307CisKK3N0cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCB7CisJdW5zaWduZWQgaW50IG1heF9t YnBzOworCXU4IHRlc3RkaW47Cit9OworCisvKiBUaGUgdGFibGUgaXMgYmFzZWQgb24gMjdNSHog RFBIWSBwbGwgcmVmZXJlbmNlIGNsb2NrLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGh5X3Bs bF90ZXN0ZGluX21hcCBkcHRkaW5fbWFwW10gPSB7CisJezE2MCwgMHgwNH0sIHsxODAsIDB4MjR9 LCB7MjAwLCAweDQ0fSwgezIxMCwgMHgwNn0sCisJezI0MCwgMHgyNn0sIHsyNTAsIDB4NDZ9LCB7 MjcwLCAweDA4fSwgezMwMCwgMHgyOH0sCisJezMzMCwgMHg0OH0sIHszNjAsIDB4MmF9LCB7NDAw LCAweDRhfSwgezQ1MCwgMHgwY30sCisJezUwMCwgMHgyY30sIHs1NTAsIDB4MGV9LCB7NjAwLCAw eDJlfSwgezY1MCwgMHgxMH0sCisJezcwMCwgMHgzMH0sIHs3NTAsIDB4MTJ9LCB7ODAwLCAweDMy fSwgezg1MCwgMHgxNH0sCisJezkwMCwgMHgzNH0sIHs5NTAsIDB4NTR9LCB7MTAwMCwgMHg3NH0K K307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpob3N0X3RvX2RzaShzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhvc3QsIHN0 cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBk d19taXBpX2RzaSAqY29uX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uKQoreworCXJl dHVybiBjb250YWluZXJfb2YoY29uLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGNvbm5lY3Rvcik7Cit9 CisKK2ludCBkd19taXBpX2RzaV9nZXRfZW5jb2Rlcl9waXhlbF9mb3JtYXQoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rlci0+ YnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKworCXJldHVybiBkc2ktPmZvcm1hdDsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGR3X21pcGlfZHNpX2dldF9lbmNvZGVyX3BpeGVsX2Zvcm1hdCk7CisKK3N0 YXRpYyBpbnQgbWF4X21icHNfdG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4X21icHMpCit7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKQor CQlpZiAoZHB0ZGluX21hcFtpXS5tYXhfbWJwcyA9PSBtYXhfbWJwcykKKwkJCXJldHVybiBkcHRk aW5fbWFwW2ldLnRlc3RkaW47CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHZh bCkKK3sKKwl3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5l IHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKK3sKKwlyZXR1 cm4gcmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzaV9t b2RpZnkoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcsCisJCQkgICAgICB1MzIgbWFz aywgdTMyIHZhbCkKK3sKKwl1MzIgdiA9IHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7CisJdiAmPSB+ bWFzazsKKwl2IHw9IHZhbDsKKwl3cml0ZWwodiwgZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3Rh dGljIGludCBjaGVja19zdGF0dXMoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcsIHUz MiBzdGF0dXMsCisJCQl1bnNpZ25lZCBpbnQgdGltZW91dCwgYm9vbCB0b19zZXQpCit7CisJdW5z aWduZWQgbG9uZyBleHBpcmU7CisJYm9vbCBvdXQ7CisJdTMyIHZhbDsKKworCWV4cGlyZSA9IGpp ZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCWZvciAoOzspIHsKKwkJdmFsID0g ZHNpX3JlYWQoZHNpLCByZWcpOworCQlvdXQgPSB0b19zZXQgPyAoKHZhbCAmIHN0YXR1cykgPT0g c3RhdHVzKSA6ICEodmFsICYgc3RhdHVzKTsKKwkJaWYgKG91dCkKKwkJCWJyZWFrOworCisJCWlm ICh0aW1lX2FmdGVyKGppZmZpZXMsIGV4cGlyZSkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwor CQljcHVfcmVsYXgoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBjb250cm9s bGVyIHNob3VsZCBnZW5lcmF0ZSAyIGZyYW1lcyBiZWZvcmUKKyAqIHByZXBhcmluZyB0aGUgcGVy aXBoZXJhbC4KKyAqLworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1l cyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlp bnQgcmVmcmVzaCwgdHdvX2ZyYW1lczsKKworCXJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChk c2ktPm1vZGUpOworCXR3b19mcmFtZXMgPSBESVZfUk9VTkRfVVAoTVNFQ19QRVJfU0VDLCByZWZy ZXNoKSAqIDI7CisKKwlleHBpcmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0d29fZnJh bWVzKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlKSkKKwkJY3B1X3JlbGF4 KCk7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29uZmlnX3Rlc3RkaW4oc3RydWN0IGR3 X21pcGlfZHNpICpkc2kpCit7CisJaW50IHJldCwgdGVzdGRpbjsKKworCXRlc3RkaW4gPSBtYXhf bWJwc190b190ZXN0ZGluKGRzaS0+bGFuZV9tYnBzKTsKKwlpZiAodGVzdGRpbiA8IDApIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgdGVzdGRpbiBmb3IgJWRtYnBzICIKKwkJ CSJsYW5lIGNsb2NrXG4iLCBkc2ktPmxhbmVfbWJwcyk7CisJCXJldHVybiB0ZXN0ZGluOworCX0K KworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwgUEhZX0lGX0NUUkxfUkVTRVQpOwor CWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCisJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKwlkc2lf d3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9VVCgw KSB8CisJCQkJCSAgUEhZX1RFU1RESU4oMHg0NCkpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf VFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCWRzaV93cml0ZShkc2ks IERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9VTlRFU1RFTiB8IFBIWV9URVNURE9V VCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdGRpbikpOworCWRzaV93cml0ZShkc2ksIERT SV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCAgICAgIFBIWV9FTkFCTEVDTEsgfCBQSFlf VU5SU1RaIHwKKwkJCQkJICBQSFlfVU5TSFVURE9XTlopOworCXJldCA9IGNoZWNrX3N0YXR1cyhk c2ksIERTSV9QSFlfU1RBVFVTLCBMT0NLLAorCQkJICAgUEhZX1NUQVRVU19USU1FT1VULCBTVEFU VVNfVE9fU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVk IHRvIHdhaXQgZm9yIHBoeSBsb2NrIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0 ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX1BIWV9TVEFUVVMsIFNUT1BfU1RBVEVfQ0xLX0xBTkUs CisJCQkgICBQSFlfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19TRVQpOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5IGNsayBsYW5l IHN0b3Agc3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmZpbmFsX21icHMpCit7CisJaW50IGJwcCwgaTsK Kwl1bnNpZ25lZCBpbnQgdGFyZ2V0X21icHMsIG1wY2xrOworCXVuc2lnbmVkIGxvbmcgcGxscmVm OworCisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisJ aWYgKGJwcCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgYnBwIGZv ciBwaXhlbCBmb3JtYXQgJWRcbiIsCisJCQlkc2ktPmZvcm1hdCk7CisJCXJldHVybiBicHA7CisJ fQorCisJcGxscmVmID0gY2xrX2dldF9yYXRlKGRzaS0+cGxscmVmX2Nsayk7CisJaWYgKHBsbHJl ZiAhPSAyNzAwMDAwMCkKKwkJZGV2X3dhcm4oZHNpLT5kZXYsICJleHBlY3QgMjdNSHogRFBIWSBw bGwgcmVmZXJlbmNlIGNsb2NrXG4iKTsKKworCW1wY2xrID0gRElWX1JPVU5EX1VQKGRzaS0+bW9k ZS0+Y2xvY2ssIE1TRUNfUEVSX1NFQyk7CisJaWYgKG1wY2xrKSB7CisJCS8qIHRha2UgMS8wLjcg Ymxhbmtpbmcgb3ZlcmhlYWQgaW50byBjb25zaWRlcmF0aW9uICovCisJCXRhcmdldF9tYnBzID0g KG1wY2xrICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTApIC8gNzsKKwl9IGVsc2UgeworCQlkZXZf ZGJnKGRzaS0+ZGV2LCAidXNlIGRlZmF1bHQgMUdicHMgRFBIWSBwbGwgY2xvY2tcbiIpOworCQl0 YXJnZXRfbWJwcyA9IDEwMDA7CisJfQorCisJZGV2X2RiZyhkc2ktPmRldiwgInRhcmdldCBEUEhZ IHBsbCBjbG9jayBmcmVxdWVuY3kgaXMgJXVNYnBzXG4iLAorCQl0YXJnZXRfbWJwcyk7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKSB7CisJCWlmICh0YXJn ZXRfbWJwcyA8IGRwdGRpbl9tYXBbaV0ubWF4X21icHMpIHsKKwkJCSpmaW5hbF9tYnBzID0gZHB0 ZGluX21hcFtpXS5tYXhfbWJwczsKKwkJCWRldl9kYmcoZHNpLT5kZXYsICJyZWFsIERQSFkgcGxs IGNsb2NrIGZyZXF1ZW5jeSAiCisJCQkJICJpcyAldU1icHNcbiIsICpmaW5hbF9tYnBzKTsKKwkJ CXJldHVybiAwOworCQl9CisJfQorCisJZGV2X2Vycihkc2ktPmRldiwgIkRQSFkgY2xvY2sgZnJl cXVlbmN5ICV1TWJwcyBpcyBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJCQl0YXJnZXRfbWJwcyk7CisK KwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2F0dGFj aChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaSho b3N0KTsKKworCWlmIChkZXZpY2UtPmxhbmVzID4gZHNpLT5wZGF0YS0+bWF4X2RhdGFfbGFuZXMp IHsKKwkJZGV2X2Vycihkc2ktPmRldiwgInRoZSBudW1iZXIgb2YgZGF0YSBsYW5lcyglZCkgaXMg dG9vIG1hbnlcbiIsCisJCQkJZGV2aWNlLT5sYW5lcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWlmICghKGRldmljZS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1Qp IHx8CisJICAgICEoZGV2aWNlLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5D X1BVTFNFKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZGV2aWNlIG1vZGUgaXMgdW5zdXBwb3J0 ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2aWNlLT5mb3JtYXQgIT0g TUlQSV9EU0lfRk1UX1JHQjg4OCAmJgorCSAgICBkZXZpY2UtPmZvcm1hdCAhPSBNSVBJX0RTSV9G TVRfUkdCNTY1KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJkZXZpY2UgcGl4ZWwgZm9ybWF0IGlz IHVuc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHNpLT5sYW5lcyA9 IGRldmljZS0+bGFuZXM7CisJZHNpLT5jaGFubmVsID0gZGV2aWNlLT5jaGFubmVsOworCWRzaS0+ Zm9ybWF0ID0gZGV2aWNlLT5mb3JtYXQ7CisJZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVs KGRldmljZS0+ZGV2Lm9mX25vZGUpOworCWRybV9wYW5lbF9hdHRhY2goZHNpLT5wYW5lbCwgJmRz aS0+Y29ubmVjdG9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNp X2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSAgIHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhv c3RfdG9fZHNpKGhvc3QpOworCisJZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVsKTsKKwlkc2kt PnBhbmVsID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNp X2dlbl9wa3RfaGRyX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgdmFsKQorewor CWludCByZXQ7CisKKwlyZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfQ01EX1BLVF9TVEFUVVMs IEdFTl9DTURfRlVMTCwKKwkJCSAgIENNRF9QS1RfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19D TEVBUik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBn ZXQgYXZhbGlhYmxlIGNvbW1hbmQgRklGT1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNp X3dyaXRlKGRzaSwgRFNJX0dFTl9IRFIsIHZhbCk7CisKKwlyZXQgPSBjaGVja19zdGF0dXMoZHNp LCBEU0lfQ01EX1BLVF9TVEFUVVMsCisJCQkgICBHRU5fQ01EX0VNUFRZIHwgR0VOX1BMRF9XX0VN UFRZLAorCQkJICAgQ01EX1BLVF9TVEFUVVNfVElNRU9VVCwgU1RBVFVTX1RPX1NFVCk7CisJaWYg KHJldCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byB3cml0ZSBjb21tYW5k IEZJRk9cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwK KwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUx NiAqdHhfYnVmID0gbXNnLT50eF9idWY7CisJdTMyIHZhbCA9IEdFTl9IREFUQSgqdHhfYnVmKSB8 IEdFTl9IVFlQRShtc2ctPnR5cGUpOworCisJaWYgKG1zZy0+dHhfbGVuID4gMikgeworCQlkZXZf ZXJyKGRzaS0+ZGV2LCAidG9vIGxvbmcgdHggYnVmIGxlbmd0aCAlZCBmb3Igc2hvcnQgd3JpdGVc biIsCisJCQltc2ctPnR4X2xlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBk d19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShkc2ksIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQg ZHdfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJ ICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUzMiAqdHhf YnVmID0gbXNnLT50eF9idWY7CisJaW50IGxlbiA9IG1zZy0+dHhfbGVuLCBwbGRfZGF0YV9ieXRl cyA9IHNpemVvZigqdHhfYnVmKSwgcmV0OworCXUzMiB2YWwgPSBHRU5fSERBVEEobXNnLT50eF9s ZW4pIHwgR0VOX0hUWVBFKG1zZy0+dHlwZSk7CisJdTMyIHJlbWFpbmRlciA9IDA7CisKKwlpZiAo bXNnLT50eF9sZW4gPCAzKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ3cm9uZyB0eCBidWYgbGVu Z3RoICVkIGZvciBsb25nIHdyaXRlXG4iLAorCQkJbXNnLT50eF9sZW4pOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwl3aGlsZSAoRElWX1JPVU5EX1VQKGxlbiwgcGxkX2RhdGFfYnl0ZXMpKSB7 CisJCWlmIChsZW4gPCBwbGRfZGF0YV9ieXRlcykgeworCQkJbWVtY3B5KCZyZW1haW5kZXIsIHR4 X2J1ZiwgbGVuKTsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsIHJlbWFpbmRl cik7CisJCQlsZW4gPSAwOworCQl9IGVsc2UgeworCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9Q TERfREFUQSwgKnR4X2J1Zik7CisJCQl0eF9idWYrKzsKKwkJCWxlbiAtPSBwbGRfZGF0YV9ieXRl czsKKwkJfQorCQlyZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfQ01EX1BLVF9TVEFUVVMsIEdF Tl9QTERfV19GVUxMLAorCQkJCSAgIENNRF9QS1RfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19D TEVBUik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRv IGdldCBhdmFsaWFibGUgIgorCQkJCQkid3JpdGUgcGF5bG9hZCBGSUZPXG4iKTsKKwkJCXJldHVy biByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUo ZHNpLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVy KHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNp X21zZyAqbXNnKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9z dCk7CisJaW50IHJldDsKKworCXN3aXRjaCAobXNnLT50eXBlKSB7CisJY2FzZSBNSVBJX0RTSV9E Q1NfU0hPUlRfV1JJVEU6CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06CisJ Y2FzZSBNSVBJX0RTSV9TRVRfTUFYSU1VTV9SRVRVUk5fUEFDS0VUX1NJWkU6CisJCXJldCA9IGR3 X21pcGlfZHNpX2Rjc19zaG9ydF93cml0ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWNhc2UgTUlQ SV9EU0lfRENTX0xPTkdfV1JJVEU6CisJCXJldCA9IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRl KGRzaSwgbXNnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihkc2ktPmRldiwgInVu c3VwcG9ydGVkIG1lc3NhZ2UgdHlwZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19t aXBpX2RzaV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2gs CisJLmRldGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfZGV0YWNoLAorCS50cmFuc2ZlciA9IGR3X21p cGlfZHNpX2hvc3RfdHJhbnNmZXIsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0 YXR1cworZHdfbWlwaV9kc2lfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is IGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQor CitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29u bmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGlj IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9 IHsKKwkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBk cm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IGR3X21p cGlfZHNpX2RldGVjdCwKKwkuZGVzdHJveSA9IGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVz dHJveSwKK307CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2Rlcyhz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAq ZHNpID0gY29uX3RvX2RzaShjb25uZWN0b3IpOworCisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9k ZXMoZHNpLT5wYW5lbCk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBkd19taXBp X2RzaV9tb2RlX3ZhbGlkKAorCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAor CQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCWVudW0gZHJtX21vZGVfc3RhdHVz IG1vZGVfc3RhdHVzID0gTU9ERV9PSzsKKworCWlmIChkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKQor CQltb2RlX3N0YXR1cyA9IGRzaS0+cGRhdGEtPm1vZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKTsK KworCXJldHVybiBtb2RlX3N0YXR1czsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAq ZHdfbWlwaV9kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKKwkJCQkJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19k c2koY29ubmVjdG9yKTsKKworCXJldHVybiBkc2ktPmVuY29kZXI7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBl cl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2Rl cywKKwkubW9kZV92YWxpZCA9IGR3X21pcGlfZHNpX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2Rl ciA9IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK K3sKKwl1MzIgdmFsOworCisJdmFsID0gVklEX01PREVfVFlQRV9CVVJTVF9TWU5DX1BVTFNFUyB8 IEVOQUJMRV9MT1dfUE9XRVI7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX01PREVfQ0ZHLCB2 YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9zZXRfbW9kZShzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwKKwkJCQkgZW51bSBkd19taXBpX2RzaV9tb2RlIG1vZGUpCit7CisJaWYgKG1v ZGUgPT0gRFdfTUlQSV9EU0lfQ01EX01PREUpIHsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9V UCwgUkVTRVQpOworCQlkc2lfbW9kaWZ5KGRzaSwgRFNJX0NNRF9NT0RFX0NGRywKKwkJCSAgIEVO QUJMRV9DTURfTU9ERV9NQVNLLCBFTkFCTEVfQ01EX01PREUpOworCQlkc2lfbW9kaWZ5KGRzaSwg RFNJX1ZJRF9NT0RFX0NGRywKKwkJCSAgIEVOQUJMRV9WSURFT19NT0RFX01BU0ssIERJU0FCTEVf VklERU9fTU9ERSk7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCX0g ZWxzZSB7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwkJZHNpX21vZGlm eShkc2ksIERTSV9DTURfTU9ERV9DRkcsCisJCQkgICBFTkFCTEVfQ01EX01PREVfTUFTSywgRElT QUJMRV9DTURfTU9ERSk7CisKKwkJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsK KworCQlkc2lfbW9kaWZ5KGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywKKwkJCSAgIEVOQUJMRV9WSURF T19NT0RFX01BU0ssIEVOQUJMRV9WSURFT19NT0RFKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BX Ul9VUCwgUE9XRVJVUCk7CisJCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwgVFhfUkVR X0NMS19IUyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kaXNhYmxlKHN0cnVj dCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwg UEhZX0lGX0NUUkxfUkVTRVQpOworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9SU1RaKTsKK30KKworc3RhdGljIHZv aWQgZHdfbWlwaV9kc2lfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKwor CWlmIChkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2kt PmNmZ19jbGspOworCWR3X21pcGlfZHNpX2NvbmZpZ190ZXN0ZGluKGRzaSk7CisJZHdfbWlwaV9k c2lfc2V0X21vZGUoZHNpLCBEV19NSVBJX0RTSV9WSURfTU9ERSk7CisJZHdfbWlwaV9kc2lfd2Fp dF9mb3JfdHdvX2ZyYW1lcyhkc2kpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQ SV9EU0lfQ01EX01PREUpOworCWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpOworCWR3X21p cGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUpOworCWNsa19kaXNhYmxl X3VucHJlcGFyZShkc2ktPmNmZ19jbGspOworCisJZHJtX3BhbmVsX2VuYWJsZShkc2ktPnBhbmVs KTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNp X2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGR3 X21pcGlfZHNpICpkc2kgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcg ZXhwaXJlOworCisJaWYgKCFkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWRybV9wYW5lbF9k aXNhYmxlKGRzaS0+cGFuZWwpOworCisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Y2ZnX2Nsayk7 CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHJt X3BhbmVsX3VucHJlcGFyZShkc2ktPnBhbmVsKTsKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ks IERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKworCS8qCisJICogVGhpcyBpcyBuZWNlc3NhcnkgdG8g bWFrZSBzdXJlIHRoZSBwZXJpcGhlcmFsCisJICogd2lsbCBiZSBkcml2ZW4gbm9ybWFsbHkgd2hl biB0aGUgZGlzcGxheSBpcworCSAqIGVuYWJsZWQgYWdhaW4gbGF0ZXIuCisJICovCisJZXhwaXJl ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTIwKTsKKwl3aGlsZSAodGltZV9iZWZvcmUo amlmZmllcywgZXhwaXJlKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlkd19taXBpX2RzaV9zZXRfbW9k ZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKKwlkd19taXBpX2RzaV9kaXNhYmxlKGRzaSk7 CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Y2ZnX2Nsayk7CisKKwlkc2ktPmVuYWJsZWQg PSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfYnJpZGdlX25vcGUoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwkvKiBkbyBub3RoaW5nICovCit9CisKK3N0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dy aXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfUlNU WiwgUEhZX0RJU0FCTEVDTEsgfCBQSFlfUlNUWiB8IFBIWV9TSFVURE9XTlopOworCWRzaV93cml0 ZShkc2ksIERTSV9DTEtNR1JfQ0ZHLCBUT19DTEtfRElWSURTSU9OKDEpIHwgVFhfRVNDX0NMS19E SVZJRFNJT04oNykpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGlfY29uZmlnKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9G TEFHX1BWU1lOQykpCisJCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOworCWlmICghKG1vZGUtPmZs YWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpKQorCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsK KworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJ CXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzI0QklUOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJ X0ZNVF9SR0I2NjY6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzI7CisJCXZhbCB8 PSBFTjE4X0xPT1NFTFk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNL RUQ6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzE7CisJCWJyZWFrOworCWNhc2Ug TUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJdmFsIHw9IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMTsK KwkJYnJlYWs7CisJfQorCisJdmFsIHw9IERQSV9WSUQoZHNpLT5jaGFubmVsKTsKKworCWRzaV93 cml0ZShkc2ksIERTSV9EUElfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2Rz aV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1BDS0hETF9DRkcsIEVOX0NSQ19SWCB8IEVOX0VDQ19SWCB8IEVOX0JU QSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoc3Ry dWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1BLVF9DRkcsIFZJRF9QS1RfU0laRSht b2RlLT5oZGlzcGxheSkpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9jb21tYW5kX21v ZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERT SV9DTURfTU9ERV9DRkcsIENNRF9NT0RFX0FMTF9MUCB8IEVOQUJMRV9DTURfTU9ERSk7Cit9CisK Ky8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3ljbGVzLiAqLworc3RhdGljIHU2NCBkd19taXBpX2Rz aV9nZXRfaGNvbXBvbmVudF9sYmNjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCQkgICB1 NjQgaGNvbXBvbmVudCkKK3sKKwl1NjQgZnJhYywgbGJjYzsKKworCWxiY2MgPSBoY29tcG9uZW50 ICogZHNpLT5sYW5lX21icHMgKiBVU0VDX1BFUl9TRUMgLyA4OworCWZyYWMgPSBkb19kaXYobGJj YywgZHNpLT5tb2RlLT5jbG9jayAqIE1TRUNfUEVSX1NFQyk7CisJaWYgKGZyYWMpCisJCWxiY2Mr KzsKKworCXJldHVybiBsYmNjOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9saW5lX3Rp bWVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsID0gMCwgaHRv dGFsLCBoc2EsIGhicCwgbGJjYzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRz aS0+bW9kZTsKKworCWh0b3RhbCA9IG1vZGUtPmh0b3RhbDsKKwloc2EgPSBtb2RlLT5oc3luY19l bmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwloYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3lu Y19lbmQ7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGh0 b3RhbCk7CisJdmFsIHw9IEhMSU5FX1RJTUUobGJjYyk7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lf Z2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGhzYSk7CisJdmFsIHw9IEhTQV9USU1FKGxiY2MpOwor CisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBoYnApOworCXZh bCB8PSBIQlBfVElNRShsYmNjKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9UTVJfTElORV9DRkcs IHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25m aWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZhbCwgdmFjdGl2ZSwgdnNhLCB2 ZnAsIHZicDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKwor CXZhY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsKKwl2c2EgPSBtb2RlLT52c3luY19lbmQgLSBtb2Rl LT52c3luY19zdGFydDsKKwl2ZnAgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5 OworCXZicCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKworCXZhbCA9IFZfQUNU SVZFX0xJTkVTKHZhY3RpdmUpIHwgVlNBX0xJTkVTKHZzYSkgfAorCSAgICAgIFZGUF9MSU5FUyh2 ZnApIHwgVkJQX0xJTkVTKHZicCk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVlRJTUlOR19DRkcs IHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gUEhZX0hTMkxQ X1RJTUUoMHg0MCkgfCBQSFlfTFAySFNfVElNRSgweDQwKSB8CisJICAgICAgQlRBX1RJTUUoMHhk MDApOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCB2YWwpOworfQorCitzdGF0 aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoc3RydWN0IGR3X21pcGlf ZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9QX1dB SVRfVElNRSgweDIwKSB8CisJCQkJCQlOX0xBTkVTKGRzaS0+bGFuZXMpKTsKK30KKworc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfY2xlYXJfZXJyKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQorewor CWRzaV9yZWFkKGRzaSwgRFNJX0VSUk9SX1NUMCk7CisJZHNpX3JlYWQoZHNpLCBEU0lfRVJST1Jf U1QxKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRVJST1JfTVNLMCwgMCk7CisJZHNpX3dyaXRlKGRz aSwgRFNJX0VSUk9SX01TSzEsIDApOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlk Z2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl ZF9tb2RlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJp dmF0ZTsKKwlpbnQgcmV0OworCisJZHNpLT5tb2RlID0gbW9kZTsKKworCXJldCA9IGR3X21pcGlf ZHNpX2dldF9sYW5lX2Jwcyhkc2ksICZkc2ktPmxhbmVfbWJwcyk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybjsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNmZ19jbGspOworCWR3X21pcGlf ZHNpX2luaXQoZHNpKTsKKwlkd19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdf bWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlkZW9f bW9kZV9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwg bW9kZSk7CisJZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOworCWR3X21pcGlf ZHNpX2xpbmVfdGltZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5n X2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3 X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2NsZWFy X2Vycihkc2kpOworCWR3X21pcGlfZHNpX2NvbmZpZ190ZXN0ZGluKGRzaSk7CisJZHdfbWlwaV9k c2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhkc2kpOworCWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFu ZWwpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNmZ19jbGspOworfQorCitzdGF0aWMg Ym9vbCBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQkg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVl OworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfZGVzdHJveShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQoreworCWRybV9icmlkZ2VfY2xlYW51cChicmlkZ2UpOworCWtmcmVl KGJyaWRnZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBkd19taXBpX2Rz aV9icmlkZ2VfZnVuY3MgPSB7CisJLmVuYWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9lbmFibGUs CisJLmRpc2FibGUgPSBkd19taXBpX2RzaV9icmlkZ2VfZGlzYWJsZSwKKwkucHJlX2VuYWJsZSA9 IGR3X21pcGlfZHNpX2JyaWRnZV9ub3BlLAorCS5wb3N0X2Rpc2FibGUgPSBkd19taXBpX2RzaV9i cmlkZ2Vfbm9wZSwKKwkubW9kZV9zZXQgPSBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9zZXQsCisJ Lm1vZGVfZml4dXAgPSBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9maXh1cCwKKwkuZGVzdHJveSA9 IGR3X21pcGlfZHNpX2JyaWRnZV9kZXN0cm95LAorfTsKKworc3RhdGljIGludCBkd19taXBpX2Rz aV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBkc2ktPmVuY29kZXI7CisJc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlpbnQgcmV0OworCisJYnJpZGdlID0gZGV2bV9remFs bG9jKGRybS0+ZGV2LCBzaXplb2YoKmJyaWRnZSksIEdGUF9LRVJORUwpOworCWlmICghYnJpZGdl KSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJtIGJyaWRnZVxu Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRzaS0+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 RGVzaWduV2FyZSBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIgRFJNIGJyaWRnZSBkcml2ZXIiKTsK K01PRFVMRV9BVVRIT1IoIkxpdSBZaW5nIDxZaW5nLkxpdUBmcmVlc2NhbGUuY29tPiIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21p cGlfZHNpLmggYi9pbmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRlMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHly aWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0RXX01JUElfRFNJX18KKyNkZWZp bmUgX19EV19NSVBJX0RTSV9fCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCitzdHJ1Y3QgZHdf bWlwaV9kc2lfcGxhdF9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFuZXM7CisJZW51 bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAorCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit9OworCitp bnQgZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJfcGl4ZWxfZm9ybWF0KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2Rlcik7CisKK2ludCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2Rlciwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCSAgICAgY29uc3Qgc3RydWN0 IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGEpOwordm9pZCBkd19taXBpX2RzaV91bmJpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpOwor I2VuZGlmCS8qIF9fRFdfTUlQSV9EU0lfXyAqLwotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==