From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v6 12/21] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Date: Mon, 29 Dec 2014 14:39:19 +0800 Message-ID: <1419835168-9034-13-git-send-email-Ying.Liu@freescale.com> References: <1419835168-9034-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: <1419835168-9034-1-git-send-email-Ying.Liu@freescale.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, linux-kernel@vger.kernel.org, a.hajda@samsung.com, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9zdCBjb250cm9s bGVyIGRyaXZlciBzdXBwb3J0LgpDdXJyZW50bHksIHRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGJ1 cnN0IHdpdGggc3luYyBwdWxzZXMgbW9kZSBvbmx5LgoKU2lnbmVkLW9mZi1ieTogTGl1IFlpbmcg PFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Ci0tLQp2NS0+djY6CiAqIE1ha2UgdGhlIGNoZWNrcGF0 Y2gucGwgc2NyaXB0IGJlIGhhcHBpZXIuCgp2NC0+djU6CiAqIFJlbW92ZSAnZHNpLT5wYW5lbCA9 IE5VTEw7JyBpbiBkd19taXBpX2RzaV9ob3N0X2RldGFjaCgpIHRvIGFkZHJlc3MKICAgQW5kcnpl aiBIYWpkYSdzIGNvbW1lbnQuCgp2My0+djQ6CiAqIE1vdmUgdGhlIHJlbGV2YW50IGR0LWJpbmRp bmdzIHRvIGEgc2VwYXJhdGUgcGF0Y2ggdG8gYWRkcmVzcyBTdGVmYW4KICAgV2FocmVuJ3MgY29t bWVudC4KCnYyLT52MzoKICogTmV3bHkgaW50cm9kdWNlZCBpbiB2MyB0byBhZGRyZXNzIEFuZHkg WWFuJ3MgY29tbWVudC4gIFRoaXMgaXMgYmFzZWQgb24KICAgdGhlIGkuTVggTUlQSSBEU0kgZHJp dmVyIGluIHYyLiAgVG8gbWFrZSB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNSVBJIERTSQogICBo b3N0IGNvbnRyb2xsZXIgZHJpdmVyIGxlc3MgcGxhdGZvcm0tZGVwZW5kYW50LCB0aGlzIHBhdGNo IHBsYWNlcyBpdCBhdAogICB0aGUgZHJtL2JyaWRnZSBkaXJlY3RvcnkgYXMgYSBEUk0gYnJpZGdl IGRyaXZlci4KCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgICAgfCAgIDUgKwog ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYyB8IDk5NiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmggICAgIHwgIDI3ICsK IDQgZmlsZXMgY2hhbmdlZCwgMTAyOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKaW5k ZXggODg0OTIzZi4uODE4MDQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9L Y29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMSwzICsxLDgg QEAKK2NvbmZpZyBEUk1fRFdfTUlQSV9EU0kKKwlib29sICJTeW5vcHN5cyBEZXNpZ25XYXJlIE1J UEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UiCisJZGVwZW5kcyBvbiBEUk0KKwlzZWxlY3Qg RFJNX0tNU19IRUxQRVIKKwogY29uZmlnIERSTV9QVE4zNDYwCiAJdHJpc3RhdGUgIlBUTjM0NjAg RFAvTFZEUyBicmlkZ2UiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCmlu ZGV4IGI0NzMzZTEuLmIzMjZhZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAtMSwzICsx LDQgQEAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKK29iai0kKENPTkZJR19EUk1fRFdf TUlQSV9EU0kpICs9IGR3X21pcGlfZHNpLm8KIG9iai0kKENPTkZJR19EUk1fUFROMzQ2MCkgKz0g cHRuMzQ2MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X21pcGlfZHNp LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1NGQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYwpAQCAtMCwwICsxLDk5NiBAQAorLyoKKyAqIFN5 bm9wc3lzIERlc2lnbldhcmUoRFcpIE1JUEkgRFNJIEhvc3QgQ29udHJvbGxlcgorICoKKyAqIENv cHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxkcm0vYnJpZGdlL2R3X21pcGlfZHNp Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f bWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8dmlkZW8v bWlwaV9kaXNwbGF5Lmg+CisKKyNkZWZpbmUgRFNJX1ZFUlNJT04JCQkweDAwCisKKyNkZWZpbmUg RFNJX1BXUl9VUAkJCTB4MDQKKyNkZWZpbmUgUkVTRVQJCQkJMAorI2RlZmluZSBQT1dFUlVQCQkJ CUJJVCgwKQorCisjZGVmaW5lIERTSV9DTEtNR1JfQ0ZHCQkJMHgwOAorI2RlZmluZSBUT19DTEtf RElWSURTSU9OKGRpdikJCSgoKGRpdikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBUWF9FU0NfQ0xL X0RJVklEU0lPTihkaXYpCSgoKGRpdikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9EUElf Q0ZHCQkJMHgwYworI2RlZmluZSBFTjE4X0xPT1NFTFkJCQlCSVQoMTApCisjZGVmaW5lIENPTE9S TV9BQ1RJVkVfTE9XCQlCSVQoOSkKKyNkZWZpbmUgU0hVVERfQUNUSVZFX0xPVwkJQklUKDgpCisj ZGVmaW5lIEhTWU5DX0FDVElWRV9MT1cJCUJJVCg3KQorI2RlZmluZSBWU1lOQ19BQ1RJVkVfTE9X CQlCSVQoNikKKyNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJCUJJVCg1KQorI2RlZmluZSBEUElf Q09MT1JfQ09ESU5HXzE2QklUXzEJKDB4MCA8PCAyKQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5H XzE2QklUXzIJKDB4MSA8PCAyKQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzMJKDB4 MiA8PCAyKQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzEJKDB4MyA8PCAyKQorI2Rl ZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIJKDB4NCA8PCAyKQorI2RlZmluZSBEUElfQ09M T1JfQ09ESU5HXzI0QklUCQkoMHg1IDw8IDIpCisjZGVmaW5lIERQSV9WSUQodmlkKQkJCSgoKHZp ZCkgJiAweDMpIDw8IDApCisKKyNkZWZpbmUgRFNJX0RCSV9DRkcJCQkweDEwCisjZGVmaW5lIERT SV9EQklTX0NNRFNJWkUJCTB4MTQKKworI2RlZmluZSBEU0lfUENLSERMX0NGRwkJCTB4MTgKKyNk ZWZpbmUgR0VOX1ZJRF9SWCh2aWQpCQkJKCgodmlkKSAmIDB4MykgPDwgNSkKKyNkZWZpbmUgRU5f Q1JDX1JYCQkJQklUKDQpCisjZGVmaW5lIEVOX0VDQ19SWAkJCUJJVCgzKQorI2RlZmluZSBFTl9C VEEJCQkJQklUKDIpCisjZGVmaW5lIEVOX0VPVE5fUlgJCQlCSVQoMSkKKyNkZWZpbmUgRU5fRU9U UF9UWAkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURfTU9ERV9DRkcJCTB4MWMKKyNkZWZpbmUg RlJBTUVfQlRBX0FDSwkJCUJJVCgxMSkKKyNkZWZpbmUgRU5fTlVMTF9QS1QJCQlCSVQoMTApCisj ZGVmaW5lIEVOX05VTExfUEtUX01BU0sJCUJJVCgxMCkKKyNkZWZpbmUgRU5fTVVMVElfUEtUCQkJ QklUKDkpCisjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVIJCSgweDNmIDw8IDMpCisjZGVmaW5lIEVO QUJMRV9MT1dfUE9XRVJfTUFTSwkJKDB4M2YgPDwgMykKKyNkZWZpbmUgVklEX01PREVfVFlQRV9O T05CVVJTVF9TWU5DX1BVTFNFUwkoMHgwIDw8IDEpCisjZGVmaW5lIFZJRF9NT0RFX1RZUEVfTk9O QlVSU1RfU1lOQ19FVkVOVFMJKDB4MSA8PCAxKQorI2RlZmluZSBWSURfTU9ERV9UWVBFX0JVUlNU X1NZTkNfUFVMU0VTCQkoMHgzIDw8IDEpCisjZGVmaW5lIFZJRF9NT0RFX1RZUEVfTUFTSwkJCSgw eDMgPDwgMSkKKyNkZWZpbmUgRU5BQkxFX1ZJREVPX01PREUJCQlCSVQoMCkKKyNkZWZpbmUgRElT QUJMRV9WSURFT19NT0RFCQkJMAorI2RlZmluZSBFTkFCTEVfVklERU9fTU9ERV9NQVNLCQkJQklU KDApCisKKyNkZWZpbmUgRFNJX1ZJRF9QS1RfQ0ZHCQkJMHgyMAorI2RlZmluZSBOVUxMX1BLVF9T SVpFKGIpCQkoKChiKSAmIDB4M2YpIDw8IDIxKQorI2RlZmluZSBOVU1fQ0hVTktTKG4pCQkJKCgo bikgJiAweDNmKSA8PCAxMSkKKyNkZWZpbmUgVklEX1BLVF9TSVpFKHApCQkJKCgocCkgJiAweDdm ZikgPDwgMCkKKyNkZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHg3ZmYKKworI2RlZmluZSBEU0lf Q01EX01PREVfQ0ZHCQkweDI0CisjZGVmaW5lIEVOX1RFQVJfRlgJCQlCSVQoMTQpCisjZGVmaW5l IEVOX0FDS19SUVNUCQkJQklUKDEzKQorI2RlZmluZSBEQ1NfTFdfVFhfTFAJCQlCSVQoMTIpCisj ZGVmaW5lIEdFTl9MV19UWF9MUAkJCUJJVCgxMSkKKyNkZWZpbmUgTUFYX1JEX1BLVF9TSVpFX0xQ CQlCSVQoMTApCisjZGVmaW5lIERDU19TV18yUF9UWF9MUAkJCUJJVCg5KQorI2RlZmluZSBEQ1Nf U1dfMVBfVFhfTFAJCQlCSVQoOCkKKyNkZWZpbmUgRENTX1NXXzBQX1RYX0xQCQkJQklUKDcpCisj ZGVmaW5lIEdFTl9TUl8yUF9UWF9MUAkJCUJJVCg2KQorI2RlZmluZSBHRU5fU1JfMVBfVFhfTFAJ CQlCSVQoNSkKKyNkZWZpbmUgR0VOX1NSXzBQX1RYX0xQCQkJQklUKDQpCisjZGVmaW5lIEdFTl9T V18yUF9UWF9MUAkJCUJJVCgzKQorI2RlZmluZSBHRU5fU1dfMVBfVFhfTFAJCQlCSVQoMikKKyNk ZWZpbmUgR0VOX1NXXzBQX1RYX0xQCQkJQklUKDEpCisjZGVmaW5lIEVOQUJMRV9DTURfTU9ERQkJ CUJJVCgwKQorI2RlZmluZSBESVNBQkxFX0NNRF9NT0RFCQkwCisjZGVmaW5lIEVOQUJMRV9DTURf TU9ERV9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgQ01EX01PREVfQUxMX0xQCQkJKERDU19MV19UWF9M UCB8IFwKKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKKwkJCQkJIE1BWF9SRF9QS1RfU0laRV9MUCB8 IFwKKwkJCQkJIERDU19TV18yUF9UWF9MUCB8IFwKKwkJCQkJIERDU19TV18xUF9UWF9MUCB8IFwK KwkJCQkJIERDU19TV18wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8yUF9UWF9MUCB8IFwKKwkJ CQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8wUF9UWF9MUCB8IFwKKwkJCQkJ IEdFTl9TV18yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18xUF9UWF9MUCB8IFwKKwkJCQkJIEdF Tl9TV18wUF9UWF9MUCkKKworI2RlZmluZSBEU0lfVE1SX0xJTkVfQ0ZHCQkweDI4CisjZGVmaW5l IEhMSU5FX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHgzZmZmKSA8PCAxOCkKKyNkZWZpbmUgSEJQ X1RJTUUobGJjYykJCQkoKChsYmNjKSAmIDB4MWZmKSA8PCA5KQorI2RlZmluZSBIU0FfVElNRShs YmNjKQkJCSgoKGxiY2MpICYgMHgxZmYpIDw8IDApCisKKyNkZWZpbmUgRFNJX1ZUSU1JTkdfQ0ZH CQkJMHgyYworI2RlZmluZSBWX0FDVElWRV9MSU5FUyhsaW5lKQkJKCgobGluZSkgJiAweDdmZikg PDwgMTYpCisjZGVmaW5lIFZGUF9MSU5FUyhsaW5lKQkJCSgoKGxpbmUpICYgMHgzZikgPDwgMTAp CisjZGVmaW5lIFZCUF9MSU5FUyhsaW5lKQkJCSgoKGxpbmUpICYgMHgzZikgPDwgNCkKKyNkZWZp bmUgVlNBX0xJTkVTKGxpbmUpCQkJKCgobGluZSkgJiAweGYpIDw8IDApCisKKyNkZWZpbmUgRFNJ X1BIWV9UTVJfQ0ZHCQkJMHgzMAorI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJKCgobGJj YykgJiAweGZmKSA8PCAyMCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2Mp ICYgMHhmZikgPDwgMTIpCisjZGVmaW5lIEJUQV9USU1FKGxiY2MpCQkJKCgobGJjYykgJiAweGZm ZikgPDwgMCkKKworI2RlZmluZSBEU0lfR0VOX0hEUgkJCTB4MzQKKyNkZWZpbmUgR0VOX0hEQVRB KGRhdGEpCQkJKCgoZGF0YSkgJiAweGZmZmYpIDw8IDgpCisjZGVmaW5lIEdFTl9IREFUQV9NQVNL CQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBHRU5fSFRZUEUodHlwZSkJCQkoKCh0eXBlKSAmIDB4 ZmYpIDw8IDApCisjZGVmaW5lIEdFTl9IVFlQRV9NQVNLCQkJMHhmZgorCisjZGVmaW5lIERTSV9H RU5fUExEX0RBVEEJCTB4MzgKKworI2RlZmluZSBEU0lfQ01EX1BLVF9TVEFUVVMJCTB4M2MKKyNk ZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJVCgwKQorI2RlZmluZSBHRU5fQ01EX0ZVTEwJCQlCSVQo MSkKKyNkZWZpbmUgR0VOX1BMRF9XX0VNUFRZCQkJQklUKDIpCisjZGVmaW5lIEdFTl9QTERfV19G VUxMCQkJQklUKDMpCisjZGVmaW5lIEdFTl9QTERfUl9FTVBUWQkJCUJJVCg0KQorI2RlZmluZSBH RU5fUkRfQ01EX0JVU1kJCQlCSVQoNikKKworI2RlZmluZSBEU0lfVE9fQ05UX0NGRwkJCTB4NDAK KyNkZWZpbmUgRFNJX0VSUk9SX1NUMAkJCTB4NDQKKyNkZWZpbmUgRFNJX0VSUk9SX1NUMQkJCTB4 NDgKKyNkZWZpbmUgRFNJX0VSUk9SX01TSzAJCQkweDRjCisjZGVmaW5lIERTSV9FUlJPUl9NU0sx CQkJMHg1MAorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4NTQKKyNkZWZpbmUgUEhZX0RJU0FC TEVDTEsJCQkwCisjZGVmaW5lIFBIWV9FTkFCTEVDTEsJCQlCSVQoMikKKyNkZWZpbmUgUEhZX1JT VFoJCQkwCisjZGVmaW5lIFBIWV9VTlJTVFoJCQlCSVQoMSkKKyNkZWZpbmUgUEhZX1NIVVRET1dO WgkJCTAKKyNkZWZpbmUgUEhZX1VOU0hVVERPV05aCQkJQklUKDApCisKKyNkZWZpbmUgRFNJX1BI WV9JRl9DRkcJCQkweDU4CisjZGVmaW5lIE5fTEFORVMobikJCQkoKCgobikgLSAxKSAmIDB4Mykg PDwgMCkKKyNkZWZpbmUgUEhZX1NUT1BfV0FJVF9USU1FKGN5Y2xlKQkoKChjeWNsZSkgJiAweDNm ZikgPDwgMikKKworI2RlZmluZSBEU0lfUEhZX0lGX0NUUkwJCQkweDVjCisjZGVmaW5lIFBIWV9J Rl9DVFJMX1JFU0VUCQkweDAKKyNkZWZpbmUgVFhfUkVRX0NMS19IUwkJCUJJVCgwKQorCisjZGVm aW5lIERTSV9QSFlfU1RBVFVTCQkJMHg2MAorI2RlZmluZSBMT0NLCQkJCUJJVCgwKQorI2RlZmlu ZSBTVE9QX1NUQVRFX0NMS19MQU5FCQlCSVQoMikKKworI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJM MAkJMHg2NAorI2RlZmluZSBQSFlfVEVTVENMSwkJCUJJVCgxKQorI2RlZmluZSBQSFlfVU5URVNU Q0xLCQkJMAorI2RlZmluZSBQSFlfVEVTVENMUgkJCUJJVCgwKQorI2RlZmluZSBQSFlfVU5URVNU Q0xSCQkJMAorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwxCQkweDY4CisjZGVmaW5lIFBIWV9U RVNURU4JCQlCSVQoMTYpCisjZGVmaW5lIFBIWV9VTlRFU1RFTgkJCTAKKyNkZWZpbmUgUEhZX1RF U1RET1VUKG4pCQkJKCgobikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBQSFlfVEVTVERJTihuKQkJ CSgoKG4pICYgMHhmZikgPDwgMCkKKworI2RlZmluZSBQSFlfU1RBVFVTX1RJTUVPVVQJCTEwCisj ZGVmaW5lIENNRF9QS1RfU1RBVFVTX1RJTUVPVVQJCTIwCisKK3N0cnVjdCBkd19taXBpX2RzaSB7 CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7CisJc3RydWN0IGRybV9jb25uZWN0b3Ig Y29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkZXZpY2Ug KmRldjsKKworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXN0cnVjdCBjbGsgKnBsbHJlZl9jbGs7 CisJc3RydWN0IGNsayAqY2ZnX2NsazsKKworCXVuc2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBl ciBsYW5lICovCisJdTMyIGNoYW5uZWw7CisJdTMyIGxhbmVzOworCXUzMiBmb3JtYXQ7CisJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwljb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lf cGxhdF9kYXRhICpwZGF0YTsKKworCWJvb2wgZW5hYmxlZDsKK307CisKK2VudW0geworCVNUQVRV U19UT19DTEVBUiwKKwlTVEFUVVNfVE9fU0VULAorfTsKKworZW51bSBkd19taXBpX2RzaV9tb2Rl IHsKKwlEV19NSVBJX0RTSV9DTURfTU9ERSwKKwlEV19NSVBJX0RTSV9WSURfTU9ERSwKK307CisK K3N0cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCB7CisJdW5zaWduZWQgaW50IG1heF9tYnBzOwor CXU4IHRlc3RkaW47Cit9OworCisvKiBUaGUgdGFibGUgaXMgYmFzZWQgb24gMjdNSHogRFBIWSBw bGwgcmVmZXJlbmNlIGNsb2NrLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGh5X3BsbF90ZXN0 ZGluX21hcCBkcHRkaW5fbWFwW10gPSB7CisJezE2MCwgMHgwNH0sIHsxODAsIDB4MjR9LCB7MjAw LCAweDQ0fSwgezIxMCwgMHgwNn0sCisJezI0MCwgMHgyNn0sIHsyNTAsIDB4NDZ9LCB7MjcwLCAw eDA4fSwgezMwMCwgMHgyOH0sCisJezMzMCwgMHg0OH0sIHszNjAsIDB4MmF9LCB7NDAwLCAweDRh fSwgezQ1MCwgMHgwY30sCisJezUwMCwgMHgyY30sIHs1NTAsIDB4MGV9LCB7NjAwLCAweDJlfSwg ezY1MCwgMHgxMH0sCisJezcwMCwgMHgzMH0sIHs3NTAsIDB4MTJ9LCB7ODAwLCAweDMyfSwgezg1 MCwgMHgxNH0sCisJezkwMCwgMHgzNH0sIHs5NTAsIDB4NTR9LCB7MTAwMCwgMHg3NH0KK307CisK K3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpob3N0X3RvX2RzaShzdHJ1Y3QgbWlw aV9kc2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhvc3QsIHN0cnVjdCBk d19taXBpX2RzaSwgZHNpX2hvc3QpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBp X2RzaSAqY29uX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uKQoreworCXJldHVybiBj b250YWluZXJfb2YoY29uLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGNvbm5lY3Rvcik7Cit9CisKK2lu dCBkd19taXBpX2RzaV9nZXRfZW5jb2Rlcl9waXhlbF9mb3JtYXQoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rlci0+YnJpZGdl LT5kcml2ZXJfcHJpdmF0ZTsKKworCXJldHVybiBkc2ktPmZvcm1hdDsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKGR3X21pcGlfZHNpX2dldF9lbmNvZGVyX3BpeGVsX2Zvcm1hdCk7CisKK3N0YXRpYyBp bnQgbWF4X21icHNfdG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4X21icHMpCit7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKQorCQlpZiAo ZHB0ZGluX21hcFtpXS5tYXhfbWJwcyA9PSBtYXhfbWJwcykKKwkJCXJldHVybiBkcHRkaW5fbWFw W2ldLnRlc3RkaW47CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lk IGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKK3sK Kwl3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBk c2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVh ZGwoZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzaV9tb2RpZnko c3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcsCisJCQkgICAgICB1MzIgbWFzaywgdTMy IHZhbCkKK3sKKwl1MzIgdjsKKworCXYgPSByZWFkbChkc2ktPmJhc2UgKyByZWcpOworCXYgJj0g fm1hc2s7CisJdiB8PSB2YWw7CisJd3JpdGVsKHYsIGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0 YXRpYyBpbnQgY2hlY2tfc3RhdHVzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLCB1 MzIgc3RhdHVzLAorCQkJdW5zaWduZWQgaW50IHRpbWVvdXQsIGJvb2wgdG9fc2V0KQoreworCXVu c2lnbmVkIGxvbmcgZXhwaXJlOworCWJvb2wgb3V0OworCXUzMiB2YWw7CisKKwlleHBpcmUgPSBq aWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwlmb3IgKDs7KSB7CisJCXZhbCA9 IGRzaV9yZWFkKGRzaSwgcmVnKTsKKwkJb3V0ID0gdG9fc2V0ID8gKCh2YWwgJiBzdGF0dXMpID09 IHN0YXR1cykgOiAhKHZhbCAmIHN0YXR1cyk7CisJCWlmIChvdXQpCisJCQlicmVhazsKKworCQlp ZiAodGltZV9hZnRlcihqaWZmaWVzLCBleHBpcmUpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisK KwkJY3B1X3JlbGF4KCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgY29udHJv bGxlciBzaG91bGQgZ2VuZXJhdGUgMiBmcmFtZXMgYmVmb3JlCisgKiBwcmVwYXJpbmcgdGhlIHBl cmlwaGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFt ZXMoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdW5zaWduZWQgbG9uZyBleHBpcmU7CisJ aW50IHJlZnJlc2gsIHR3b19mcmFtZXM7CisKKwlyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2go ZHNpLT5tb2RlKTsKKwl0d29fZnJhbWVzID0gRElWX1JPVU5EX1VQKE1TRUNfUEVSX1NFQywgcmVm cmVzaCkgKiAyOworCisJZXhwaXJlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModHdvX2Zy YW1lcyk7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGV4cGlyZSkpCisJCWNwdV9yZWxh eCgpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2NvbmZpZ190ZXN0ZGluKHN0cnVjdCBk d19taXBpX2RzaSAqZHNpKQoreworCWludCByZXQsIHRlc3RkaW47CisKKwl0ZXN0ZGluID0gbWF4 X21icHNfdG9fdGVzdGRpbihkc2ktPmxhbmVfbWJwcyk7CisJaWYgKHRlc3RkaW4gPCAwKSB7CisJ CWRldl9lcnIoZHNpLT5kZXYsCisJCQkiZmFpbGVkIHRvIGdldCB0ZXN0ZGluIGZvciAlZG1icHMg bGFuZSBjbG9ja1xuIiwKKwkJCWRzaS0+bGFuZV9tYnBzKTsKKwkJcmV0dXJuIHRlc3RkaW47CisJ fQorCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DVFJMLCBQSFlfSUZfQ1RSTF9SRVNFVCk7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7CisKKwlkc2lfd3JpdGUoZHNp LCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCWRz aV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVEVTVEVOIHwgUEhZX1RFU1RET1VU KDApIHwKKwkJCQkJICBQSFlfVEVTVERJTigweDQ0KSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dyaXRlKGRz aSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKwlk c2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1VOVEVTVEVOIHwgUEhZX1RFU1RE T1VUKDApIHwKKwkJCQkJICBQSFlfVEVTVERJTih0ZXN0ZGluKSk7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dy aXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNUQ0xS KTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosICAgICAgUEhZX0VOQUJMRUNMSyB8IFBI WV9VTlJTVFogfAorCQkJCQkgIFBIWV9VTlNIVVRET1dOWik7CisJcmV0ID0gY2hlY2tfc3RhdHVz KGRzaSwgRFNJX1BIWV9TVEFUVVMsIExPQ0ssCisJCQkgICBQSFlfU1RBVFVTX1RJTUVPVVQsIFNU QVRVU19UT19TRVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWls ZWQgdG8gd2FpdCBmb3IgcGh5IGxvY2sgc3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwly ZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfUEhZX1NUQVRVUywgU1RPUF9TVEFURV9DTEtfTEFO RSwKKwkJCSAgIFBIWV9TVEFUVVNfVElNRU9VVCwgU1RBVFVTX1RPX1NFVCk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwKKwkJCSJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5IGNs ayBsYW5lIHN0b3Agc3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKHN0cnVjdCBkd19taXBp X2RzaSAqZHNpLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmZpbmFsX21icHMpCit7CisJaW50IGJw cCwgaTsKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0X21icHMsIG1wY2xrOworCXVuc2lnbmVkIGxvbmcg cGxscmVmOworCisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1h dCk7CisJaWYgKGJwcCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQg YnBwIGZvciBwaXhlbCBmb3JtYXQgJWRcbiIsCisJCQlkc2ktPmZvcm1hdCk7CisJCXJldHVybiBi cHA7CisJfQorCisJcGxscmVmID0gY2xrX2dldF9yYXRlKGRzaS0+cGxscmVmX2Nsayk7CisJaWYg KHBsbHJlZiAhPSAyNzAwMDAwMCkKKwkJZGV2X3dhcm4oZHNpLT5kZXYsICJleHBlY3QgMjdNSHog RFBIWSBwbGwgcmVmZXJlbmNlIGNsb2NrXG4iKTsKKworCW1wY2xrID0gRElWX1JPVU5EX1VQKGRz aS0+bW9kZS0+Y2xvY2ssIE1TRUNfUEVSX1NFQyk7CisJaWYgKG1wY2xrKSB7CisJCS8qIHRha2Ug MS8wLjcgYmxhbmtpbmcgb3ZlcmhlYWQgaW50byBjb25zaWRlcmF0aW9uICovCisJCXRhcmdldF9t YnBzID0gKG1wY2xrICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTApIC8gNzsKKwl9IGVsc2Ugewor CQlkZXZfZGJnKGRzaS0+ZGV2LCAidXNlIGRlZmF1bHQgMUdicHMgRFBIWSBwbGwgY2xvY2tcbiIp OworCQl0YXJnZXRfbWJwcyA9IDEwMDA7CisJfQorCisJZGV2X2RiZyhkc2ktPmRldiwgInRhcmdl dCBEUEhZIHBsbCBjbG9jayBmcmVxdWVuY3kgaXMgJXVNYnBzXG4iLAorCQl0YXJnZXRfbWJwcyk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKSB7CisJCWlm ICh0YXJnZXRfbWJwcyA8IGRwdGRpbl9tYXBbaV0ubWF4X21icHMpIHsKKwkJCSpmaW5hbF9tYnBz ID0gZHB0ZGluX21hcFtpXS5tYXhfbWJwczsKKwkJCWRldl9kYmcoZHNpLT5kZXYsCisJCQkJInJl YWwgRFBIWSBwbGwgY2xvY2sgZnJlcXVlbmN5IGlzICV1TWJwc1xuIiwKKwkJCQkqZmluYWxfbWJw cyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRldl9lcnIoZHNpLT5kZXYsICJEUEhZIGNs b2NrIGZyZXF1ZW5jeSAldU1icHMgaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCQkJdGFyZ2V0X21i cHMpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9z dF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJICAgc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90 b19kc2koaG9zdCk7CisKKwlpZiAoZGV2aWNlLT5sYW5lcyA+IGRzaS0+cGRhdGEtPm1heF9kYXRh X2xhbmVzKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0aGUgbnVtYmVyIG9mIGRhdGEgbGFuZXMo JWQpIGlzIHRvbyBtYW55XG4iLAorCQkJCWRldmljZS0+bGFuZXMpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlpZiAoIShkZXZpY2UtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVP X0JVUlNUKSB8fAorCSAgICAhKGRldmljZS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklE RU9fU1lOQ19QVUxTRSkpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImRldmljZSBtb2RlIGlzIHVu c3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRldmljZS0+Zm9y bWF0ICE9IE1JUElfRFNJX0ZNVF9SR0I4ODggJiYKKwkgICAgZGV2aWNlLT5mb3JtYXQgIT0gTUlQ SV9EU0lfRk1UX1JHQjU2NSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZGV2aWNlIHBpeGVsIGZv cm1hdCBpcyB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRzaS0+ bGFuZXMgPSBkZXZpY2UtPmxhbmVzOworCWRzaS0+Y2hhbm5lbCA9IGRldmljZS0+Y2hhbm5lbDsK Kwlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OworCWRzaS0+cGFuZWwgPSBvZl9kcm1fZmlu ZF9wYW5lbChkZXZpY2UtPmRldi5vZl9ub2RlKTsKKwlkcm1fcGFuZWxfYXR0YWNoKGRzaS0+cGFu ZWwsICZkc2ktPmNvbm5lY3Rvcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19t aXBpX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICBz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpk c2kgPSBob3N0X3RvX2RzaShob3N0KTsKKworCWRybV9wYW5lbF9kZXRhY2goZHNpLT5wYW5lbCk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93 cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHZhbCkKK3sKKwlpbnQgcmV0OworCisJ cmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX0NNRF9QS1RfU1RBVFVTLCBHRU5fQ01EX0ZVTEws CisJCQkgICBDTURfUEtUX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9fQ0xFQVIpOworCWlmIChy ZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSBj b21tYW5kIEZJRk9cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaV93cml0ZShkc2ksIERT SV9HRU5fSERSLCB2YWwpOworCisJcmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX0NNRF9QS1Rf U1RBVFVTLAorCQkJICAgR0VOX0NNRF9FTVBUWSB8IEdFTl9QTERfV19FTVBUWSwKKwkJCSAgIENN RF9QS1RfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19TRVQpOworCWlmIChyZXQgPCAwKSB7CisJ CWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBGSUZPXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19taXBpX2Rz aV9kY3Nfc2hvcnRfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJICAgICAgIGNv bnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwljb25zdCB1MTYgKnR4X2J1ZiA9IG1z Zy0+dHhfYnVmOworCXUzMiB2YWwgPSBHRU5fSERBVEEoKnR4X2J1ZikgfCBHRU5fSFRZUEUobXNn LT50eXBlKTsKKworCWlmIChtc2ctPnR4X2xlbiA+IDIpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwg InRvbyBsb25nIHR4IGJ1ZiBsZW5ndGggJWQgZm9yIHNob3J0IHdyaXRlXG4iLAorCQkJbXNnLT50 eF9sZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZHdfbWlwaV9kc2lfZ2Vu X3BrdF9oZHJfd3JpdGUoZHNpLCB2YWwpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rj c19sb25nX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgICAgIGNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwljb25zdCB1MzIgKnR4X2J1ZiA9IG1zZy0+dHhf YnVmOworCWludCBsZW4gPSBtc2ctPnR4X2xlbiwgcGxkX2RhdGFfYnl0ZXMgPSBzaXplb2YoKnR4 X2J1ZiksIHJldDsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKG1zZy0+dHhfbGVuKSB8IEdFTl9IVFlQ RShtc2ctPnR5cGUpOworCXUzMiByZW1haW5kZXIgPSAwOworCisJaWYgKG1zZy0+dHhfbGVuIDwg MykgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAid3JvbmcgdHggYnVmIGxlbmd0aCAlZCBmb3IgbG9u ZyB3cml0ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ d2hpbGUgKERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkgeworCQlpZiAobGVuIDwg cGxkX2RhdGFfYnl0ZXMpIHsKKwkJCW1lbWNweSgmcmVtYWluZGVyLCB0eF9idWYsIGxlbik7CisJ CQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1haW5kZXIpOworCQkJbGVuID0g MDsKKwkJfSBlbHNlIHsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsICp0eF9i dWYpOworCQkJdHhfYnVmKys7CisJCQlsZW4gLT0gcGxkX2RhdGFfYnl0ZXM7CisJCX0KKwkJcmV0 ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX0NNRF9QS1RfU1RBVFVTLCBHRU5fUExEX1dfRlVMTCwK KwkJCQkgICBDTURfUEtUX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9fQ0xFQVIpOworCQlpZiAo cmV0IDwgMCkgeworCQkJZGV2X2Vycihkc2ktPmRldiwKKwkJCQkiZmFpbGVkIHRvIGdldCBhdmFp bGFibGUgd3JpdGUgcGF5bG9hZCBGSUZPXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisK KwlyZXR1cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCB2YWwpOworfQorCitz dGF0aWMgc3NpemVfdCBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9o b3N0ICpob3N0LAorCQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCXN0 cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisJaW50IHJldDsKKwor CXN3aXRjaCAobXNnLT50eXBlKSB7CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEU6CisJ Y2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06CisJY2FzZSBNSVBJX0RTSV9TRVRf TUFYSU1VTV9SRVRVUk5fUEFDS0VUX1NJWkU6CisJCXJldCA9IGR3X21pcGlfZHNpX2Rjc19zaG9y dF93cml0ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRENTX0xPTkdfV1JJ VEU6CisJCXJldCA9IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKGRzaSwgbXNnKTsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihkc2ktPmRldiwgInVuc3VwcG9ydGVkIG1lc3NhZ2Ug dHlwZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBpX2RzaV9ob3N0X29wcyA9 IHsKKwkuYXR0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9IGR3X21p cGlfZHNpX2hvc3RfZGV0YWNoLAorCS50cmFuc2ZlciA9IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNm ZXIsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworZHdfbWlwaV9kc2lf ZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJ cmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29u bmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVj dG9yX2Z1bmNzIGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9o ZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Np bmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IGR3X21pcGlfZHNpX2RldGVjdCwKKwku ZGVzdHJveSA9IGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveSwKK307CisKK3N0YXRp YyBpbnQgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3RvX2RzaShj b25uZWN0b3IpOworCisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7Cit9 CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBkd19taXBpX2RzaV9tb2RlX3ZhbGlkKAor CQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19k c2koY29ubmVjdG9yKTsKKworCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfc3RhdHVzID0gTU9E RV9PSzsKKworCWlmIChkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKQorCQltb2RlX3N0YXR1cyA9IGRz aS0+cGRhdGEtPm1vZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiBtb2RlX3N0 YXR1czsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqZHdfbWlwaV9kc2lfY29ubmVj dG9yX2Jlc3RfZW5jb2RlcigKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK K3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKwor CXJldHVybiBkc2ktPmVuY29kZXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0 X21vZGVzID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9 IGR3X21pcGlfZHNpX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IGR3X21pcGlfZHNpX2Nv bm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRl b19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsOworCisJ dmFsID0gVklEX01PREVfVFlQRV9CVVJTVF9TWU5DX1BVTFNFUyB8IEVOQUJMRV9MT1dfUE9XRVI7 CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX01PREVfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9zZXRfbW9kZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkg ZW51bSBkd19taXBpX2RzaV9tb2RlIG1vZGUpCit7CisJaWYgKG1vZGUgPT0gRFdfTUlQSV9EU0lf Q01EX01PREUpIHsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCQlkc2lf bW9kaWZ5KGRzaSwgRFNJX0NNRF9NT0RFX0NGRywKKwkJCSAgIEVOQUJMRV9DTURfTU9ERV9NQVNL LCBFTkFCTEVfQ01EX01PREUpOworCQlkc2lfbW9kaWZ5KGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywK KwkJCSAgIEVOQUJMRV9WSURFT19NT0RFX01BU0ssIERJU0FCTEVfVklERU9fTU9ERSk7CisJCWRz aV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCX0gZWxzZSB7CisJCWRzaV93cml0 ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwkJZHNpX21vZGlmeShkc2ksIERTSV9DTURfTU9E RV9DRkcsCisJCQkgICBFTkFCTEVfQ01EX01PREVfTUFTSywgRElTQUJMRV9DTURfTU9ERSk7CisK KwkJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKworCQlkc2lfbW9kaWZ5KGRz aSwgRFNJX1ZJRF9NT0RFX0NGRywKKwkJCSAgIEVOQUJMRV9WSURFT19NT0RFX01BU0ssIEVOQUJM RV9WSURFT19NT0RFKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7CisJ CWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwgVFhfUkVRX0NMS19IUyk7CisJfQorfQor CitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kaXNhYmxlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp KQoreworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwgUEhZX0lGX0NUUkxfUkVTRVQp OworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBE U0lfUEhZX1JTVFosIFBIWV9SU1RaKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfYnJp ZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBkd19taXBp X2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKworCWlmIChkc2ktPmVuYWJsZWQp CisJCXJldHVybjsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNmZ19jbGspOworCWR3X21p cGlfZHNpX2NvbmZpZ190ZXN0ZGluKGRzaSk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBE V19NSVBJX0RTSV9WSURfTU9ERSk7CisJZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhk c2kpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOwor CWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRz aSwgRFdfTUlQSV9EU0lfVklEX01PREUpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNm Z19jbGspOworCisJZHJtX3BhbmVsX2VuYWJsZShkc2ktPnBhbmVsKTsKKworCWRzaS0+ZW5hYmxl ZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9kaXNhYmxlKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBi cmlkZ2UtPmRyaXZlcl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlOworCisJaWYgKCFk c2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwp OworCisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Y2ZnX2Nsayk7CisJZHdfbWlwaV9kc2lfc2V0 X21vZGUoZHNpLCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHJtX3BhbmVsX3VucHJlcGFyZShk c2ktPnBhbmVsKTsKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX1ZJRF9N T0RFKTsKKworCS8qCisJICogVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHRoZSBwZXJp cGhlcmFsCisJICogd2lsbCBiZSBkcml2ZW4gbm9ybWFsbHkgd2hlbiB0aGUgZGlzcGxheSBpcwor CSAqIGVuYWJsZWQgYWdhaW4gbGF0ZXIuCisJICovCisJZXhwaXJlID0gamlmZmllcyArIG1zZWNz X3RvX2ppZmZpZXMoMTIwKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlKSkK KwkJY3B1X3JlbGF4KCk7CisKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJ X0NNRF9NT0RFKTsKKwlkd19taXBpX2RzaV9kaXNhYmxlKGRzaSk7CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRzaS0+Y2ZnX2Nsayk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3Rh dGljIHZvaWQgZHdfbWlwaV9kc2lfYnJpZGdlX25vcGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKK3sKKwkvKiBkbyBub3RoaW5nICovCit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2lu aXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9V UCwgUkVTRVQpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX0RJU0FCTEVDTEsg fCBQSFlfUlNUWiB8IFBIWV9TSFVURE9XTlopOworCWRzaV93cml0ZShkc2ksIERTSV9DTEtNR1Jf Q0ZHLCBUT19DTEtfRElWSURTSU9OKDEpIHwKKwkJCQkJVFhfRVNDX0NMS19ESVZJRFNJT04oNykp OworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGlfY29uZmlnKHN0cnVjdCBkd19taXBp X2RzaSAqZHNpLAorCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXUz MiB2YWwgPSAwOworCisJaWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykp CisJCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOworCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19QSFNZTkMpKQorCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKKworCXN3aXRjaCAo ZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCXZhbCB8PSBEUElf Q09MT1JfQ09ESU5HXzI0QklUOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6 CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzI7CisJCXZhbCB8PSBFTjE4X0xPT1NF TFk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXZhbCB8 PSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzE7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1U X1JHQjU2NToKKwkJdmFsIHw9IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMTsKKwkJYnJlYWs7CisJ fQorCisJdmFsIHw9IERQSV9WSUQoZHNpLT5jaGFubmVsKTsKKworCWRzaV93cml0ZShkc2ksIERT SV9EUElfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9wYWNrZXRfaGFu ZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1BDS0hETF9DRkcsIEVOX0NSQ19SWCB8IEVOX0VDQ19SWCB8IEVOX0JUQSk7Cit9CisKK3N0 YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoc3RydWN0IGR3X21pcGlf ZHNpICpkc2ksCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlk c2lfd3JpdGUoZHNpLCBEU0lfVklEX1BLVF9DRkcsIFZJRF9QS1RfU0laRShtb2RlLT5oZGlzcGxh eSkpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9DTURfTU9ERV9D RkcsIENNRF9NT0RFX0FMTF9MUCB8IEVOQUJMRV9DTURfTU9ERSk7Cit9CisKKy8qIEdldCBsYW5l IGJ5dGUgY2xvY2sgY3ljbGVzLiAqLworc3RhdGljIHU2NCBkd19taXBpX2RzaV9nZXRfaGNvbXBv bmVudF9sYmNjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCQkgICB1NjQgaGNvbXBvbmVu dCkKK3sKKwl1NjQgZnJhYywgbGJjYzsKKworCWxiY2MgPSBoY29tcG9uZW50ICogZHNpLT5sYW5l X21icHMgKiBVU0VDX1BFUl9TRUMgLyA4OworCWZyYWMgPSBkb19kaXYobGJjYywgZHNpLT5tb2Rl LT5jbG9jayAqIE1TRUNfUEVSX1NFQyk7CisJaWYgKGZyYWMpCisJCWxiY2MrKzsKKworCXJldHVy biBsYmNjOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZpZyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsID0gMCwgaHRvdGFsLCBoc2EsIGhi cCwgbGJjYzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKwor CWh0b3RhbCA9IG1vZGUtPmh0b3RhbDsKKwloc2EgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5o c3luY19zdGFydDsKKwloYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisKKwls YmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGh0b3RhbCk7CisJdmFs IHw9IEhMSU5FX1RJTUUobGJjYyk7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25l bnRfbGJjYyhkc2ksIGhzYSk7CisJdmFsIHw9IEhTQV9USU1FKGxiY2MpOworCisJbGJjYyA9IGR3 X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBoYnApOworCXZhbCB8PSBIQlBfVElN RShsYmNjKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9UTVJfTElORV9DRkcsIHZhbCk7Cit9CisK K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoc3RydWN0IGR3 X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZhbCwgdmFjdGl2ZSwgdnNhLCB2ZnAsIHZicDsKKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKworCXZhY3RpdmUgPSBt b2RlLT52ZGlzcGxheTsKKwl2c2EgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFy dDsKKwl2ZnAgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5OworCXZicCA9IG1v ZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKworCXZhbCA9IFZfQUNUSVZFX0xJTkVTKHZh Y3RpdmUpIHwgVlNBX0xJTkVTKHZzYSkgfAorCSAgICAgIFZGUF9MSU5FUyh2ZnApIHwgVkJQX0xJ TkVTKHZicCk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVlRJTUlOR19DRkcsIHZhbCk7Cit9CisK K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gUEhZX0hTMkxQX1RJTUUoMHg0MCkg fCBQSFlfTFAySFNfVElNRSgweDQwKSB8CisJICAgICAgQlRBX1RJTUUoMHhkMDApOworCisJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9QX1dBSVRfVElNRSgweDIw KSB8CisJCQkJCQlOX0xBTkVTKGRzaS0+bGFuZXMpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfY2xlYXJfZXJyKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV9yZWFkKGRz aSwgRFNJX0VSUk9SX1NUMCk7CisJZHNpX3JlYWQoZHNpLCBEU0lfRVJST1JfU1QxKTsKKwlkc2lf d3JpdGUoZHNpLCBEU0lfRVJST1JfTVNLMCwgMCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0VSUk9S X01TSzEsIDApOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9zZXQo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQorewor CXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQg cmV0OworCisJZHNpLT5tb2RlID0gbW9kZTsKKworCXJldCA9IGR3X21pcGlfZHNpX2dldF9sYW5l X2Jwcyhkc2ksICZkc2ktPmxhbmVfbWJwcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybjsKKwor CWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNmZ19jbGspOworCWR3X21pcGlfZHNpX2luaXQoZHNp KTsKKwlkd19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfcGFj a2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWco ZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdf bWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2xpbmVfdGlt ZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhkc2kp OworCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2Rw aHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2NsZWFyX2Vycihkc2kpOwor CWR3X21pcGlfZHNpX2NvbmZpZ190ZXN0ZGluKGRzaSk7CisJZHdfbWlwaV9kc2lfd2FpdF9mb3Jf dHdvX2ZyYW1lcyhkc2kpOworCWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpOworCWNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPmNmZ19jbGspOworfQorCitzdGF0aWMgYm9vbCBkd19taXBp X2RzaV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCQlj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9kZXN0cm95KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up Cit7CisJZHJtX2JyaWRnZV9jbGVhbnVwKGJyaWRnZSk7CisJa2ZyZWUoYnJpZGdlKTsKK30KKwor c3RhdGljIHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGR3X21pcGlfZHNpX2JyaWRnZV9mdW5jcyA9 IHsKKwkuZW5hYmxlID0gZHdfbWlwaV9kc2lfYnJpZGdlX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGR3 X21pcGlfZHNpX2JyaWRnZV9kaXNhYmxlLAorCS5wcmVfZW5hYmxlID0gZHdfbWlwaV9kc2lfYnJp ZGdlX25vcGUsCisJLnBvc3RfZGlzYWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9ub3BlLAorCS5t b2RlX3NldCA9IGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX3NldCwKKwkubW9kZV9maXh1cCA9IGR3 X21pcGlfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLAorCS5kZXN0cm95ID0gZHdfbWlwaV9kc2lfYnJp ZGdlX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlZ2lzdGVyKHN0cnVj dCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlciA9IGRzaS0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlOworCWludCByZXQ7CisKKwlicmlkZ2UgPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNp emVvZigqYnJpZGdlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFicmlkZ2UpCisJCXJldHVybiAtRU5P TUVNOworCisJZHNpLT5icmlkZ2UgPSBicmlkZ2U7CisJYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZSA9 IGRzaTsKKworCXJldCA9IGRybV9icmlkZ2VfaW5pdChkcm0sIGJyaWRnZSwgJmR3X21pcGlfZHNp X2JyaWRnZV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVk IHRvIGluaXRpYWxpemUgYnJpZGdlIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwllbmNvZGVyLT5icmlkZ2UgPSBicmlkZ2U7CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQo JmRzaS0+Y29ubmVjdG9yLAorCQkJJmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mp OworCWRybV9jb25uZWN0b3JfaW5pdChkcm0sICZkc2ktPmNvbm5lY3RvciwgJmR3X21pcGlfZHNp X2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCisJZHJt X21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPmNvbm5lY3RvciwgZHNpLT5lbmNv ZGVyKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHdfbWlwaV9kc2lfYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSwKKwkJICAgICBzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkgICAgIGNv bnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpOworCXUzMiB2YWw7 CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNpLT5wZGF0YSA9 IHBkYXRhOworCWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+ZHNpX2hvc3Qub3BzID0gJmR3X21pcGlf ZHNpX2hvc3Rfb3BzOworCWRzaS0+ZHNpX2hvc3QuZGV2ID0gZGV2OworCWRzaS0+ZW5jb2RlciA9 IGVuY29kZXI7CisKKwlkc2ktPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMp OworCWlmIChJU19FUlIoZHNpLT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5iYXNlKTsK KworCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwbGxyZWYiKTsKKwlpZiAo SVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBsbHJlZl9j bGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgcGxsIHJlZmVyZW5jZSBjbG9jazog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWNsa19wcmVwYXJlX2VuYWJsZShkc2kt PnBsbHJlZl9jbGspOworCisJZHNpLT5jZmdfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImNvcmVf Y2ZnIik7CisJaWYgKElTX0VSUihkc2ktPmNmZ19jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHNp LT5jZmdfY2xrKTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IGNvbmZpZ3VyYXRpb24g Y2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbGxyZWY7CisJfQorCisJY2xrX3ByZXBh cmVfZW5hYmxlKGRzaS0+Y2ZnX2Nsayk7CisJdmFsID0gZHNpX3JlYWQoZHNpLCBEU0lfVkVSU0lP Tik7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Y2ZnX2Nsayk7CisKKwlkZXZfaW5mbyhk ZXYsICJ2ZXJzaW9uIG51bWJlciBpcyAweCUwOHhcbiIsIHZhbCk7CisKKwlyZXQgPSBkd19taXBp X2RzaV9yZWdpc3Rlcihkcm0sIGRzaSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcGxscmVmOwor CisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHNpKTsKKworCXJldHVybiBtaXBpX2RzaV9ob3N0X3Jl Z2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKworZXJyX3BsbHJlZjoKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9H UEwoZHdfbWlwaV9kc2lfYmluZCk7CisKK3ZvaWQgZHdfbWlwaV9kc2lfdW5iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVj dCBkd19taXBpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltaXBpX2RzaV9o b3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShk c2ktPnBsbHJlZl9jbGspOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHdfbWlwaV9kc2lfdW5iaW5k KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5vcHN5cyBEZXNpZ25XYXJlIE1JUEkgRFNJIGhv c3QgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkxpdSBZaW5nIDxZaW5nLkxp dUBmcmVlc2NhbGUuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmggYi9pbmNsdWRlL2RybS9icmlkZ2UvZHdf bWlwaV9kc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRlMzU1Ci0t LSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKQEAgLTAs MCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRl ZiBfX0RXX01JUElfRFNJX18KKyNkZWZpbmUgX19EV19NSVBJX0RTSV9fCisKKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorCitzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHsKKwl1bnNpZ25lZCBp bnQgbWF4X2RhdGFfbGFuZXM7CisJZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSk7Cit9OworCitpbnQgZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJfcGl4ZWxf Zm9ybWF0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKK2ludCBkd19taXBpX2RzaV9i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRh LAorCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IHJlc291cmNlICpy ZXMsCisJCSAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGEpOwor dm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsIHZvaWQgKmRhdGEpOworI2VuZGlmCS8qIF9fRFdfTUlQSV9EU0lfXyAqLwotLSAK Mi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==