From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v7 12/21] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Date: Tue, 30 Dec 2014 11:34:02 +0800 Message-ID: <1419910451-15268-13-git-send-email-Ying.Liu@freescale.com> References: <1419910451-15268-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: <1419910451-15268-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+Ci0tLQp2Ni0+djc6CiAqIE5vbmUuCgp2NS0+djY6CiAq IE1ha2UgdGhlIGNoZWNrcGF0Y2gucGwgc2NyaXB0IGJlIGhhcHBpZXIuCgp2NC0+djU6CiAqIFJl bW92ZSAnZHNpLT5wYW5lbCA9IE5VTEw7JyBpbiBkd19taXBpX2RzaV9ob3N0X2RldGFjaCgpIHRv IGFkZHJlc3MKICAgQW5kcnplaiBIYWpkYSdzIGNvbW1lbnQuCgp2My0+djQ6CiAqIE1vdmUgdGhl IHJlbGV2YW50IGR0LWJpbmRpbmdzIHRvIGEgc2VwYXJhdGUgcGF0Y2ggdG8gYWRkcmVzcyBTdGVm YW4KICAgV2FocmVuJ3MgY29tbWVudC4KCnYyLT52MzoKICogTmV3bHkgaW50cm9kdWNlZCBpbiB2 MyB0byBhZGRyZXNzIEFuZHkgWWFuJ3MgY29tbWVudC4gIFRoaXMgaXMgYmFzZWQgb24KICAgdGhl IGkuTVggTUlQSSBEU0kgZHJpdmVyIGluIHYyLiAgVG8gbWFrZSB0aGUgU3lub3BzeXMgRGVzaWdu V2FyZSBNSVBJIERTSQogICBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGxlc3MgcGxhdGZvcm0tZGVw ZW5kYW50LCB0aGlzIHBhdGNoIHBsYWNlcyBpdCBhdAogICB0aGUgZHJtL2JyaWRnZSBkaXJlY3Rv cnkgYXMgYSBEUk0gYnJpZGdlIGRyaXZlci4KCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcgICAgICAgfCAgIDUgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYyB8IDk5NiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlf ZHNpLmggICAgIHwgIDI3ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTAyOSBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL0tjb25maWcKaW5kZXggODg0OTIzZi4uODE4MDQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2Nv bmZpZwpAQCAtMSwzICsxLDggQEAKK2NvbmZpZyBEUk1fRFdfTUlQSV9EU0kKKwlib29sICJTeW5v cHN5cyBEZXNpZ25XYXJlIE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UiCisJZGVwZW5k cyBvbiBEUk0KKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwogY29uZmlnIERSTV9QVE4zNDYwCiAJ dHJpc3RhdGUgIlBUTjM0NjAgRFAvTFZEUyBicmlkZ2UiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlCmluZGV4IGI0NzMzZTEuLmIzMjZhZDUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9N YWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKK29i ai0kKENPTkZJR19EUk1fRFdfTUlQSV9EU0kpICs9IGR3X21pcGlfZHNpLm8KIG9iai0kKENPTkZJ R19EUk1fUFROMzQ2MCkgKz0gcHRuMzQ2MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL2R3X21pcGlfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X21pcGlfZHNp LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1NGQ0NAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYwpAQCAtMCwwICsx LDk5NiBAQAorLyoKKyAqIFN5bm9wc3lzIERlc2lnbldhcmUoRFcpIE1JUEkgRFNJIEhvc3QgQ29u dHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWVzY2FsZSBTZW1pY29u ZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs aW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxkcm0v YnJpZGdlL2R3X21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+ CisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNkZWZpbmUgRFNJX1ZFUlNJT04J CQkweDAwCisKKyNkZWZpbmUgRFNJX1BXUl9VUAkJCTB4MDQKKyNkZWZpbmUgUkVTRVQJCQkJMAor I2RlZmluZSBQT1dFUlVQCQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9DTEtNR1JfQ0ZHCQkJMHgw OAorI2RlZmluZSBUT19DTEtfRElWSURTSU9OKGRpdikJCSgoKGRpdikgJiAweGZmKSA8PCA4KQor I2RlZmluZSBUWF9FU0NfQ0xLX0RJVklEU0lPTihkaXYpCSgoKGRpdikgJiAweGZmKSA8PCAwKQor CisjZGVmaW5lIERTSV9EUElfQ0ZHCQkJMHgwYworI2RlZmluZSBFTjE4X0xPT1NFTFkJCQlCSVQo MTApCisjZGVmaW5lIENPTE9STV9BQ1RJVkVfTE9XCQlCSVQoOSkKKyNkZWZpbmUgU0hVVERfQUNU SVZFX0xPVwkJQklUKDgpCisjZGVmaW5lIEhTWU5DX0FDVElWRV9MT1cJCUJJVCg3KQorI2RlZmlu ZSBWU1lOQ19BQ1RJVkVfTE9XCQlCSVQoNikKKyNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJCUJJ VCg1KQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzEJKDB4MCA8PCAyKQorI2RlZmlu ZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzIJKDB4MSA8PCAyKQorI2RlZmluZSBEUElfQ09MT1Jf Q09ESU5HXzE2QklUXzMJKDB4MiA8PCAyKQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklU XzEJKDB4MyA8PCAyKQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIJKDB4NCA8PCAy KQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzI0QklUCQkoMHg1IDw8IDIpCisjZGVmaW5lIERQ SV9WSUQodmlkKQkJCSgoKHZpZCkgJiAweDMpIDw8IDApCisKKyNkZWZpbmUgRFNJX0RCSV9DRkcJ CQkweDEwCisjZGVmaW5lIERTSV9EQklTX0NNRFNJWkUJCTB4MTQKKworI2RlZmluZSBEU0lfUENL SERMX0NGRwkJCTB4MTgKKyNkZWZpbmUgR0VOX1ZJRF9SWCh2aWQpCQkJKCgodmlkKSAmIDB4Mykg PDwgNSkKKyNkZWZpbmUgRU5fQ1JDX1JYCQkJQklUKDQpCisjZGVmaW5lIEVOX0VDQ19SWAkJCUJJ VCgzKQorI2RlZmluZSBFTl9CVEEJCQkJQklUKDIpCisjZGVmaW5lIEVOX0VPVE5fUlgJCQlCSVQo MSkKKyNkZWZpbmUgRU5fRU9UUF9UWAkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURfTU9ERV9D RkcJCTB4MWMKKyNkZWZpbmUgRlJBTUVfQlRBX0FDSwkJCUJJVCgxMSkKKyNkZWZpbmUgRU5fTlVM TF9QS1QJCQlCSVQoMTApCisjZGVmaW5lIEVOX05VTExfUEtUX01BU0sJCUJJVCgxMCkKKyNkZWZp bmUgRU5fTVVMVElfUEtUCQkJQklUKDkpCisjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVIJCSgweDNm IDw8IDMpCisjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVJfTUFTSwkJKDB4M2YgPDwgMykKKyNkZWZp bmUgVklEX01PREVfVFlQRV9OT05CVVJTVF9TWU5DX1BVTFNFUwkoMHgwIDw8IDEpCisjZGVmaW5l IFZJRF9NT0RFX1RZUEVfTk9OQlVSU1RfU1lOQ19FVkVOVFMJKDB4MSA8PCAxKQorI2RlZmluZSBW SURfTU9ERV9UWVBFX0JVUlNUX1NZTkNfUFVMU0VTCQkoMHgzIDw8IDEpCisjZGVmaW5lIFZJRF9N T0RFX1RZUEVfTUFTSwkJCSgweDMgPDwgMSkKKyNkZWZpbmUgRU5BQkxFX1ZJREVPX01PREUJCQlC SVQoMCkKKyNkZWZpbmUgRElTQUJMRV9WSURFT19NT0RFCQkJMAorI2RlZmluZSBFTkFCTEVfVklE RU9fTU9ERV9NQVNLCQkJQklUKDApCisKKyNkZWZpbmUgRFNJX1ZJRF9QS1RfQ0ZHCQkJMHgyMAor I2RlZmluZSBOVUxMX1BLVF9TSVpFKGIpCQkoKChiKSAmIDB4M2YpIDw8IDIxKQorI2RlZmluZSBO VU1fQ0hVTktTKG4pCQkJKCgobikgJiAweDNmKSA8PCAxMSkKKyNkZWZpbmUgVklEX1BLVF9TSVpF KHApCQkJKCgocCkgJiAweDdmZikgPDwgMCkKKyNkZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHg3 ZmYKKworI2RlZmluZSBEU0lfQ01EX01PREVfQ0ZHCQkweDI0CisjZGVmaW5lIEVOX1RFQVJfRlgJ CQlCSVQoMTQpCisjZGVmaW5lIEVOX0FDS19SUVNUCQkJQklUKDEzKQorI2RlZmluZSBEQ1NfTFdf VFhfTFAJCQlCSVQoMTIpCisjZGVmaW5lIEdFTl9MV19UWF9MUAkJCUJJVCgxMSkKKyNkZWZpbmUg TUFYX1JEX1BLVF9TSVpFX0xQCQlCSVQoMTApCisjZGVmaW5lIERDU19TV18yUF9UWF9MUAkJCUJJ VCg5KQorI2RlZmluZSBEQ1NfU1dfMVBfVFhfTFAJCQlCSVQoOCkKKyNkZWZpbmUgRENTX1NXXzBQ X1RYX0xQCQkJQklUKDcpCisjZGVmaW5lIEdFTl9TUl8yUF9UWF9MUAkJCUJJVCg2KQorI2RlZmlu ZSBHRU5fU1JfMVBfVFhfTFAJCQlCSVQoNSkKKyNkZWZpbmUgR0VOX1NSXzBQX1RYX0xQCQkJQklU KDQpCisjZGVmaW5lIEdFTl9TV18yUF9UWF9MUAkJCUJJVCgzKQorI2RlZmluZSBHRU5fU1dfMVBf VFhfTFAJCQlCSVQoMikKKyNkZWZpbmUgR0VOX1NXXzBQX1RYX0xQCQkJQklUKDEpCisjZGVmaW5l IEVOQUJMRV9DTURfTU9ERQkJCUJJVCgwKQorI2RlZmluZSBESVNBQkxFX0NNRF9NT0RFCQkwCisj ZGVmaW5lIEVOQUJMRV9DTURfTU9ERV9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgQ01EX01PREVfQUxM X0xQCQkJKERDU19MV19UWF9MUCB8IFwKKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKKwkJCQkJIE1B WF9SRF9QS1RfU0laRV9MUCB8IFwKKwkJCQkJIERDU19TV18yUF9UWF9MUCB8IFwKKwkJCQkJIERD U19TV18xUF9UWF9MUCB8IFwKKwkJCQkJIERDU19TV18wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9T Ul8yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8w UF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18xUF9U WF9MUCB8IFwKKwkJCQkJIEdFTl9TV18wUF9UWF9MUCkKKworI2RlZmluZSBEU0lfVE1SX0xJTkVf Q0ZHCQkweDI4CisjZGVmaW5lIEhMSU5FX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHgzZmZmKSA8 PCAxOCkKKyNkZWZpbmUgSEJQX1RJTUUobGJjYykJCQkoKChsYmNjKSAmIDB4MWZmKSA8PCA5KQor I2RlZmluZSBIU0FfVElNRShsYmNjKQkJCSgoKGxiY2MpICYgMHgxZmYpIDw8IDApCisKKyNkZWZp bmUgRFNJX1ZUSU1JTkdfQ0ZHCQkJMHgyYworI2RlZmluZSBWX0FDVElWRV9MSU5FUyhsaW5lKQkJ KCgobGluZSkgJiAweDdmZikgPDwgMTYpCisjZGVmaW5lIFZGUF9MSU5FUyhsaW5lKQkJCSgoKGxp bmUpICYgMHgzZikgPDwgMTApCisjZGVmaW5lIFZCUF9MSU5FUyhsaW5lKQkJCSgoKGxpbmUpICYg MHgzZikgPDwgNCkKKyNkZWZpbmUgVlNBX0xJTkVTKGxpbmUpCQkJKCgobGluZSkgJiAweGYpIDw8 IDApCisKKyNkZWZpbmUgRFNJX1BIWV9UTVJfQ0ZHCQkJMHgzMAorI2RlZmluZSBQSFlfSFMyTFBf VElNRShsYmNjKQkJKCgobGJjYykgJiAweGZmKSA8PCAyMCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJ TUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwgMTIpCisjZGVmaW5lIEJUQV9USU1FKGxiY2Mp CQkJKCgobGJjYykgJiAweGZmZikgPDwgMCkKKworI2RlZmluZSBEU0lfR0VOX0hEUgkJCTB4MzQK KyNkZWZpbmUgR0VOX0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkgJiAweGZmZmYpIDw8IDgpCisjZGVm aW5lIEdFTl9IREFUQV9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBHRU5fSFRZUEUodHlw ZSkJCQkoKCh0eXBlKSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEdFTl9IVFlQRV9NQVNLCQkJMHhm ZgorCisjZGVmaW5lIERTSV9HRU5fUExEX0RBVEEJCTB4MzgKKworI2RlZmluZSBEU0lfQ01EX1BL VF9TVEFUVVMJCTB4M2MKKyNkZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJVCgwKQorI2RlZmluZSBH RU5fQ01EX0ZVTEwJCQlCSVQoMSkKKyNkZWZpbmUgR0VOX1BMRF9XX0VNUFRZCQkJQklUKDIpCisj ZGVmaW5lIEdFTl9QTERfV19GVUxMCQkJQklUKDMpCisjZGVmaW5lIEdFTl9QTERfUl9FTVBUWQkJ CUJJVCg0KQorI2RlZmluZSBHRU5fUkRfQ01EX0JVU1kJCQlCSVQoNikKKworI2RlZmluZSBEU0lf VE9fQ05UX0NGRwkJCTB4NDAKKyNkZWZpbmUgRFNJX0VSUk9SX1NUMAkJCTB4NDQKKyNkZWZpbmUg RFNJX0VSUk9SX1NUMQkJCTB4NDgKKyNkZWZpbmUgRFNJX0VSUk9SX01TSzAJCQkweDRjCisjZGVm aW5lIERTSV9FUlJPUl9NU0sxCQkJMHg1MAorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4NTQK KyNkZWZpbmUgUEhZX0RJU0FCTEVDTEsJCQkwCisjZGVmaW5lIFBIWV9FTkFCTEVDTEsJCQlCSVQo MikKKyNkZWZpbmUgUEhZX1JTVFoJCQkwCisjZGVmaW5lIFBIWV9VTlJTVFoJCQlCSVQoMSkKKyNk ZWZpbmUgUEhZX1NIVVRET1dOWgkJCTAKKyNkZWZpbmUgUEhZX1VOU0hVVERPV05aCQkJQklUKDAp CisKKyNkZWZpbmUgRFNJX1BIWV9JRl9DRkcJCQkweDU4CisjZGVmaW5lIE5fTEFORVMobikJCQko KCgobikgLSAxKSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgUEhZX1NUT1BfV0FJVF9USU1FKGN5Y2xl KQkoKChjeWNsZSkgJiAweDNmZikgPDwgMikKKworI2RlZmluZSBEU0lfUEhZX0lGX0NUUkwJCQkw eDVjCisjZGVmaW5lIFBIWV9JRl9DVFJMX1JFU0VUCQkweDAKKyNkZWZpbmUgVFhfUkVRX0NMS19I UwkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9QSFlfU1RBVFVTCQkJMHg2MAorI2RlZmluZSBMT0NL CQkJCUJJVCgwKQorI2RlZmluZSBTVE9QX1NUQVRFX0NMS19MQU5FCQlCSVQoMikKKworI2RlZmlu ZSBEU0lfUEhZX1RTVF9DVFJMMAkJMHg2NAorI2RlZmluZSBQSFlfVEVTVENMSwkJCUJJVCgxKQor I2RlZmluZSBQSFlfVU5URVNUQ0xLCQkJMAorI2RlZmluZSBQSFlfVEVTVENMUgkJCUJJVCgwKQor I2RlZmluZSBQSFlfVU5URVNUQ0xSCQkJMAorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwxCQkw eDY4CisjZGVmaW5lIFBIWV9URVNURU4JCQlCSVQoMTYpCisjZGVmaW5lIFBIWV9VTlRFU1RFTgkJ CTAKKyNkZWZpbmUgUEhZX1RFU1RET1VUKG4pCQkJKCgobikgJiAweGZmKSA8PCA4KQorI2RlZmlu ZSBQSFlfVEVTVERJTihuKQkJCSgoKG4pICYgMHhmZikgPDwgMCkKKworI2RlZmluZSBQSFlfU1RB VFVTX1RJTUVPVVQJCTEwCisjZGVmaW5lIENNRF9QS1RfU1RBVFVTX1RJTUVPVVQJCTIwCisKK3N0 cnVjdCBkd19taXBpX2RzaSB7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cjsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXN0cnVj dCBjbGsgKnBsbHJlZl9jbGs7CisJc3RydWN0IGNsayAqY2ZnX2NsazsKKworCXVuc2lnbmVkIGlu dCBsYW5lX21icHM7IC8qIHBlciBsYW5lICovCisJdTMyIGNoYW5uZWw7CisJdTMyIGxhbmVzOwor CXUzMiBmb3JtYXQ7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwljb25zdCBz dHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YTsKKworCWJvb2wgZW5hYmxlZDsKK307 CisKK2VudW0geworCVNUQVRVU19UT19DTEVBUiwKKwlTVEFUVVNfVE9fU0VULAorfTsKKworZW51 bSBkd19taXBpX2RzaV9tb2RlIHsKKwlEV19NSVBJX0RTSV9DTURfTU9ERSwKKwlEV19NSVBJX0RT SV9WSURfTU9ERSwKK307CisKK3N0cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCB7CisJdW5zaWdu ZWQgaW50IG1heF9tYnBzOworCXU4IHRlc3RkaW47Cit9OworCisvKiBUaGUgdGFibGUgaXMgYmFz ZWQgb24gMjdNSHogRFBIWSBwbGwgcmVmZXJlbmNlIGNsb2NrLiAqLworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCBkcHRkaW5fbWFwW10gPSB7CisJezE2MCwgMHgwNH0s IHsxODAsIDB4MjR9LCB7MjAwLCAweDQ0fSwgezIxMCwgMHgwNn0sCisJezI0MCwgMHgyNn0sIHsy NTAsIDB4NDZ9LCB7MjcwLCAweDA4fSwgezMwMCwgMHgyOH0sCisJezMzMCwgMHg0OH0sIHszNjAs IDB4MmF9LCB7NDAwLCAweDRhfSwgezQ1MCwgMHgwY30sCisJezUwMCwgMHgyY30sIHs1NTAsIDB4 MGV9LCB7NjAwLCAweDJlfSwgezY1MCwgMHgxMH0sCisJezcwMCwgMHgzMH0sIHs3NTAsIDB4MTJ9 LCB7ODAwLCAweDMyfSwgezg1MCwgMHgxNH0sCisJezkwMCwgMHgzNH0sIHs5NTAsIDB4NTR9LCB7 MTAwMCwgMHg3NH0KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpob3N0 X3RvX2RzaShzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGhvc3QsIHN0cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOworfQorCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBkd19taXBpX2RzaSAqY29uX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29uKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29uLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGNv bm5lY3Rvcik7Cit9CisKK2ludCBkd19taXBpX2RzaV9nZXRfZW5jb2Rlcl9waXhlbF9mb3JtYXQo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNp ID0gZW5jb2Rlci0+YnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKworCXJldHVybiBkc2ktPmZvcm1h dDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGR3X21pcGlfZHNpX2dldF9lbmNvZGVyX3BpeGVsX2Zv cm1hdCk7CisKK3N0YXRpYyBpbnQgbWF4X21icHNfdG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4 X21icHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5f bWFwKTsgaSsrKQorCQlpZiAoZHB0ZGluX21hcFtpXS5tYXhfbWJwcyA9PSBtYXhfbWJwcykKKwkJ CXJldHVybiBkcHRkaW5fbWFwW2ldLnRlc3RkaW47CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMy IHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOworfQorCitz dGF0aWMgaW5saW5lIHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJl ZykKK3sKKwlyZXR1cm4gcmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGRzaV9tb2RpZnkoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcsCisJCQkg ICAgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwl1MzIgdjsKKworCXYgPSByZWFkbChkc2ktPmJh c2UgKyByZWcpOworCXYgJj0gfm1hc2s7CisJdiB8PSB2YWw7CisJd3JpdGVsKHYsIGRzaS0+YmFz ZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc3RhdHVzKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpLCB1MzIgcmVnLCB1MzIgc3RhdHVzLAorCQkJdW5zaWduZWQgaW50IHRpbWVvdXQsIGJv b2wgdG9fc2V0KQoreworCXVuc2lnbmVkIGxvbmcgZXhwaXJlOworCWJvb2wgb3V0OworCXUzMiB2 YWw7CisKKwlleHBpcmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwlm b3IgKDs7KSB7CisJCXZhbCA9IGRzaV9yZWFkKGRzaSwgcmVnKTsKKwkJb3V0ID0gdG9fc2V0ID8g KCh2YWwgJiBzdGF0dXMpID09IHN0YXR1cykgOiAhKHZhbCAmIHN0YXR1cyk7CisJCWlmIChvdXQp CisJCQlicmVhazsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBleHBpcmUpKQorCQkJcmV0 dXJuIC1FVElNRURPVVQ7CisKKwkJY3B1X3JlbGF4KCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisK Ky8qCisgKiBUaGUgY29udHJvbGxlciBzaG91bGQgZ2VuZXJhdGUgMiBmcmFtZXMgYmVmb3JlCisg KiBwcmVwYXJpbmcgdGhlIHBlcmlwaGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNp X3dhaXRfZm9yX3R3b19mcmFtZXMoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdW5zaWdu ZWQgbG9uZyBleHBpcmU7CisJaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7CisKKwlyZWZyZXNoID0g ZHJtX21vZGVfdnJlZnJlc2goZHNpLT5tb2RlKTsKKwl0d29fZnJhbWVzID0gRElWX1JPVU5EX1VQ KE1TRUNfUEVSX1NFQywgcmVmcmVzaCkgKiAyOworCisJZXhwaXJlID0gamlmZmllcyArIG1zZWNz X3RvX2ppZmZpZXModHdvX2ZyYW1lcyk7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGV4 cGlyZSkpCisJCWNwdV9yZWxheCgpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2NvbmZp Z190ZXN0ZGluKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWludCByZXQsIHRlc3RkaW47 CisKKwl0ZXN0ZGluID0gbWF4X21icHNfdG9fdGVzdGRpbihkc2ktPmxhbmVfbWJwcyk7CisJaWYg KHRlc3RkaW4gPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsCisJCQkiZmFpbGVkIHRvIGdldCB0 ZXN0ZGluIGZvciAlZG1icHMgbGFuZSBjbG9ja1xuIiwKKwkJCWRzaS0+bGFuZV9tYnBzKTsKKwkJ cmV0dXJuIHRlc3RkaW47CisJfQorCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DVFJMLCBQ SFlfSUZfQ1RSTF9SRVNFVCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7 CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMSyB8IFBI WV9VTlRFU1RDTFIpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVEVT VEVOIHwgUEhZX1RFU1RET1VUKDApIHwKKwkJCQkJICBQSFlfVEVTVERJTigweDQ0KSk7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENM Uik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQ SFlfVU5URVNUQ0xSKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1VO VEVTVEVOIHwgUEhZX1RFU1RET1VUKDApIHwKKwkJCQkJICBQSFlfVEVTVERJTih0ZXN0ZGluKSk7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VO VEVTVENMUik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RD TEsgfCBQSFlfVU5URVNUQ0xSKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosICAgICAg UEhZX0VOQUJMRUNMSyB8IFBIWV9VTlJTVFogfAorCQkJCQkgIFBIWV9VTlNIVVRET1dOWik7CisJ cmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX1BIWV9TVEFUVVMsIExPQ0ssCisJCQkgICBQSFlf U1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19TRVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l cnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5IGxvY2sgc3RhdGVcbiIpOworCQly ZXR1cm4gcmV0OworCX0KKwlyZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfUEhZX1NUQVRVUywg U1RPUF9TVEFURV9DTEtfTEFORSwKKwkJCSAgIFBIWV9TVEFUVVNfVElNRU9VVCwgU1RBVFVTX1RP X1NFVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwKKwkJCSJmYWlsZWQg dG8gd2FpdCBmb3IgcGh5IGNsayBsYW5lIHN0b3Agc3RhdGVcbiIpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVf YnBzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmZpbmFs X21icHMpCit7CisJaW50IGJwcCwgaTsKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0X21icHMsIG1wY2xr OworCXVuc2lnbmVkIGxvbmcgcGxscmVmOworCisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0 X3RvX2JwcChkc2ktPmZvcm1hdCk7CisJaWYgKGJwcCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRl diwgImZhaWxlZCB0byBnZXQgYnBwIGZvciBwaXhlbCBmb3JtYXQgJWRcbiIsCisJCQlkc2ktPmZv cm1hdCk7CisJCXJldHVybiBicHA7CisJfQorCisJcGxscmVmID0gY2xrX2dldF9yYXRlKGRzaS0+ cGxscmVmX2Nsayk7CisJaWYgKHBsbHJlZiAhPSAyNzAwMDAwMCkKKwkJZGV2X3dhcm4oZHNpLT5k ZXYsICJleHBlY3QgMjdNSHogRFBIWSBwbGwgcmVmZXJlbmNlIGNsb2NrXG4iKTsKKworCW1wY2xr ID0gRElWX1JPVU5EX1VQKGRzaS0+bW9kZS0+Y2xvY2ssIE1TRUNfUEVSX1NFQyk7CisJaWYgKG1w Y2xrKSB7CisJCS8qIHRha2UgMS8wLjcgYmxhbmtpbmcgb3ZlcmhlYWQgaW50byBjb25zaWRlcmF0 aW9uICovCisJCXRhcmdldF9tYnBzID0gKG1wY2xrICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTAp IC8gNzsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGRzaS0+ZGV2LCAidXNlIGRlZmF1bHQgMUdicHMg RFBIWSBwbGwgY2xvY2tcbiIpOworCQl0YXJnZXRfbWJwcyA9IDEwMDA7CisJfQorCisJZGV2X2Ri Zyhkc2ktPmRldiwgInRhcmdldCBEUEhZIHBsbCBjbG9jayBmcmVxdWVuY3kgaXMgJXVNYnBzXG4i LAorCQl0YXJnZXRfbWJwcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5f bWFwKTsgaSsrKSB7CisJCWlmICh0YXJnZXRfbWJwcyA8IGRwdGRpbl9tYXBbaV0ubWF4X21icHMp IHsKKwkJCSpmaW5hbF9tYnBzID0gZHB0ZGluX21hcFtpXS5tYXhfbWJwczsKKwkJCWRldl9kYmco ZHNpLT5kZXYsCisJCQkJInJlYWwgRFBIWSBwbGwgY2xvY2sgZnJlcXVlbmN5IGlzICV1TWJwc1xu IiwKKwkJCQkqZmluYWxfbWJwcyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRldl9lcnIo ZHNpLT5kZXYsICJEUEhZIGNsb2NrIGZyZXF1ZW5jeSAldU1icHMgaXMgb3V0IG9mIHJhbmdlXG4i LAorCQkJCQkJdGFyZ2V0X21icHMpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBp bnQgZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJ CQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkd19taXBp X2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisKKwlpZiAoZGV2aWNlLT5sYW5lcyA+IGRz aS0+cGRhdGEtPm1heF9kYXRhX2xhbmVzKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0aGUgbnVt YmVyIG9mIGRhdGEgbGFuZXMoJWQpIGlzIHRvbyBtYW55XG4iLAorCQkJCWRldmljZS0+bGFuZXMp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIShkZXZpY2UtPm1vZGVfZmxhZ3MgJiBN SVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSB8fAorCSAgICAhKGRldmljZS0+bW9kZV9mbGFncyAm IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwg ImRldmljZSBtb2RlIGlzIHVuc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJaWYgKGRldmljZS0+Zm9ybWF0ICE9IE1JUElfRFNJX0ZNVF9SR0I4ODggJiYKKwkgICAgZGV2 aWNlLT5mb3JtYXQgIT0gTUlQSV9EU0lfRk1UX1JHQjU2NSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2 LCAiZGV2aWNlIHBpeGVsIGZvcm1hdCBpcyB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOworCWRzaS0+Y2hhbm5lbCA9 IGRldmljZS0+Y2hhbm5lbDsKKwlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OworCWRzaS0+ cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChkZXZpY2UtPmRldi5vZl9ub2RlKTsKKwlkcm1fcGFu ZWxfYXR0YWNoKGRzaS0+cGFuZWwsICZkc2ktPmNvbm5lY3Rvcik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqaG9zdCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3Ry dWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKKworCWRybV9wYW5lbF9k ZXRhY2goZHNpLT5wYW5lbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19taXBp X2RzaV9nZW5fcGt0X2hkcl93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHZhbCkK K3sKKwlpbnQgcmV0OworCisJcmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX0NNRF9QS1RfU1RB VFVTLCBHRU5fQ01EX0ZVTEwsCisJCQkgICBDTURfUEtUX1NUQVRVU19USU1FT1VULCBTVEFUVVNf VE9fQ0xFQVIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQg dG8gZ2V0IGF2YWlsYWJsZSBjb21tYW5kIEZJRk9cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CWRzaV93cml0ZShkc2ksIERTSV9HRU5fSERSLCB2YWwpOworCisJcmV0ID0gY2hlY2tfc3RhdHVz KGRzaSwgRFNJX0NNRF9QS1RfU1RBVFVTLAorCQkJICAgR0VOX0NNRF9FTVBUWSB8IEdFTl9QTERf V19FTVBUWSwKKwkJCSAgIENNRF9QS1RfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19TRVQpOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgY29t bWFuZCBGSUZPXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpk c2ksCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwljb25z dCB1MTYgKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOworCXUzMiB2YWwgPSBHRU5fSERBVEEoKnR4X2J1 ZikgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsKKworCWlmIChtc2ctPnR4X2xlbiA+IDIpIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgInRvbyBsb25nIHR4IGJ1ZiBsZW5ndGggJWQgZm9yIHNob3J0IHdy aXRlXG4iLAorCQkJbXNnLT50eF9sZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1 cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCB2YWwpOworfQorCitzdGF0aWMg aW50IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAor CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwljb25zdCB1MzIg KnR4X2J1ZiA9IG1zZy0+dHhfYnVmOworCWludCBsZW4gPSBtc2ctPnR4X2xlbiwgcGxkX2RhdGFf Ynl0ZXMgPSBzaXplb2YoKnR4X2J1ZiksIHJldDsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKG1zZy0+ dHhfbGVuKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOworCXUzMiByZW1haW5kZXIgPSAwOworCisJ aWYgKG1zZy0+dHhfbGVuIDwgMykgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAid3JvbmcgdHggYnVm IGxlbmd0aCAlZCBmb3IgbG9uZyB3cml0ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJd2hpbGUgKERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVz KSkgeworCQlpZiAobGVuIDwgcGxkX2RhdGFfYnl0ZXMpIHsKKwkJCW1lbWNweSgmcmVtYWluZGVy LCB0eF9idWYsIGxlbik7CisJCQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1h aW5kZXIpOworCQkJbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9H RU5fUExEX0RBVEEsICp0eF9idWYpOworCQkJdHhfYnVmKys7CisJCQlsZW4gLT0gcGxkX2RhdGFf Ynl0ZXM7CisJCX0KKwkJcmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX0NNRF9QS1RfU1RBVFVT LCBHRU5fUExEX1dfRlVMTCwKKwkJCQkgICBDTURfUEtUX1NUQVRVU19USU1FT1VULCBTVEFUVVNf VE9fQ0xFQVIpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycihkc2ktPmRldiwKKwkJCQki ZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgd3JpdGUgcGF5bG9hZCBGSUZPXG4iKTsKKwkJCXJldHVy 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 ZShkc2ksIERTSV9DTEtNR1JfQ0ZHLCBUT19DTEtfRElWSURTSU9OKDEpIHwKKwkJCQkJVFhfRVND X0NMS19ESVZJRFNJT04oNykpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGlfY29u ZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX1BWU1lOQykpCisJCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOworCWlmICghKG1v ZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpKQorCQl2YWwgfD0gSFNZTkNfQUNUSVZF X0xPVzsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4 ODg6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzI0QklUOworCQlicmVhazsKKwljYXNlIE1J UElfRFNJX0ZNVF9SR0I2NjY6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzI7CisJ CXZhbCB8PSBFTjE4X0xPT1NFTFk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2 Nl9QQUNLRUQ6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzE7CisJCWJyZWFrOwor CWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJdmFsIHw9IERQSV9DT0xPUl9DT0RJTkdfMTZC SVRfMTsKKwkJYnJlYWs7CisJfQorCisJdmFsIHw9IERQSV9WSUQoZHNpLT5jaGFubmVsKTsKKwor CWRzaV93cml0ZShkc2ksIERTSV9EUElfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BDS0hETF9DRkcsIEVOX0NSQ19SWCB8IEVOX0VDQ19SWCB8 IEVOX0JUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25m aWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1BLVF9DRkcsIFZJRF9QS1Rf U0laRShtb2RlLT5oZGlzcGxheSkpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9jb21t YW5kX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShk c2ksIERTSV9DTURfTU9ERV9DRkcsIENNRF9NT0RFX0FMTF9MUCB8IEVOQUJMRV9DTURfTU9ERSk7 Cit9CisKKy8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3ljbGVzLiAqLworc3RhdGljIHU2NCBkd19t aXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJ CQkgICB1NjQgaGNvbXBvbmVudCkKK3sKKwl1NjQgZnJhYywgbGJjYzsKKworCWxiY2MgPSBoY29t cG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBVU0VDX1BFUl9TRUMgLyA4OworCWZyYWMgPSBkb19k aXYobGJjYywgZHNpLT5tb2RlLT5jbG9jayAqIE1TRUNfUEVSX1NFQyk7CisJaWYgKGZyYWMpCisJ CWxiY2MrKzsKKworCXJldHVybiBsYmNjOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9s aW5lX3RpbWVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsID0g MCwgaHRvdGFsLCBoc2EsIGhicCwgbGJjYzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSA9IGRzaS0+bW9kZTsKKworCWh0b3RhbCA9IG1vZGUtPmh0b3RhbDsKKwloc2EgPSBtb2RlLT5o c3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwloYnAgPSBtb2RlLT5odG90YWwgLSBtb2Rl LT5oc3luY19lbmQ7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhk c2ksIGh0b3RhbCk7CisJdmFsIHw9IEhMSU5FX1RJTUUobGJjYyk7CisKKwlsYmNjID0gZHdfbWlw aV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGhzYSk7CisJdmFsIHw9IEhTQV9USU1FKGxi Y2MpOworCisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBoYnAp OworCXZhbCB8PSBIQlBfVElNRShsYmNjKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9UTVJfTElO RV9DRkcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWlu Z19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZhbCwgdmFjdGl2ZSwg dnNhLCB2ZnAsIHZicDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9k ZTsKKworCXZhY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsKKwl2c2EgPSBtb2RlLT52c3luY19lbmQg LSBtb2RlLT52c3luY19zdGFydDsKKwl2ZnAgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZk aXNwbGF5OworCXZicCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKworCXZhbCA9 IFZfQUNUSVZFX0xJTkVTKHZhY3RpdmUpIHwgVlNBX0xJTkVTKHZzYSkgfAorCSAgICAgIFZGUF9M SU5FUyh2ZnApIHwgVkJQX0xJTkVTKHZicCk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVlRJTUlO R19DRkcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2Nv bmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gUEhZ X0hTMkxQX1RJTUUoMHg0MCkgfCBQSFlfTFAySFNfVElNRSgweDQwKSB8CisJICAgICAgQlRBX1RJ TUUoMHhkMDApOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCB2YWwpOworfQor CitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoc3RydWN0IGR3 X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9T VE9QX1dBSVRfVElNRSgweDIwKSB8CisJCQkJCQlOX0xBTkVTKGRzaS0+bGFuZXMpKTsKK30KKwor c3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY2xlYXJfZXJyKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp KQoreworCWRzaV9yZWFkKGRzaSwgRFNJX0VSUk9SX1NUMCk7CisJZHNpX3JlYWQoZHNpLCBEU0lf RVJST1JfU1QxKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRVJST1JfTVNLMCwgMCk7CisJZHNpX3dy aXRlKGRzaSwgRFNJX0VSUk9SX01TSzEsIDApOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2Rz aV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlLT5kcml2 ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJZHNpLT5tb2RlID0gbW9kZTsKKworCXJldCA9IGR3 X21pcGlfZHNpX2dldF9sYW5lX2Jwcyhkc2ksICZkc2ktPmxhbmVfbWJwcyk7CisJaWYgKHJldCA8 IDApCisJCXJldHVybjsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNmZ19jbGspOworCWR3 X21pcGlfZHNpX2luaXQoZHNpKTsKKwlkd19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7 CisJZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lf dmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmln KGRzaSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOworCWR3 X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmVydGljYWxf dGltaW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhkc2kp OworCWR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNp X2NsZWFyX2Vycihkc2kpOworCWR3X21pcGlfZHNpX2NvbmZpZ190ZXN0ZGluKGRzaSk7CisJZHdf bWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhkc2kpOworCWRybV9wYW5lbF9wcmVwYXJlKGRz aS0+cGFuZWwpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNmZ19jbGspOworfQorCitz dGF0aWMgYm9vbCBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlLAorCQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJ CQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRy dWU7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9kZXN0cm95KHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCit7CisJZHJtX2JyaWRnZV9jbGVhbnVwKGJyaWRnZSk7CisJa2Zy ZWUoYnJpZGdlKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGR3X21pcGlf ZHNpX2JyaWRnZV9mdW5jcyA9IHsKKwkuZW5hYmxlID0gZHdfbWlwaV9kc2lfYnJpZGdlX2VuYWJs ZSwKKwkuZGlzYWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9kaXNhYmxlLAorCS5wcmVfZW5hYmxl ID0gZHdfbWlwaV9kc2lfYnJpZGdlX25vcGUsCisJLnBvc3RfZGlzYWJsZSA9IGR3X21pcGlfZHNp X2JyaWRnZV9ub3BlLAorCS5tb2RlX3NldCA9IGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX3NldCwK KwkubW9kZV9maXh1cCA9IGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLAorCS5kZXN0cm95 ID0gZHdfbWlwaV9kc2lfYnJpZGdlX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IGR3X21pcGlf ZHNpX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpKQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IGRzaS0+ZW5jb2RlcjsKKwlz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCWludCByZXQ7CisKKwlicmlkZ2UgPSBkZXZtX2t6 YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqYnJpZGdlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFicmlk Z2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNpLT5icmlkZ2UgPSBicmlkZ2U7CisJYnJpZGdl LT5kcml2ZXJfcHJpdmF0ZSA9IGRzaTsKKworCXJldCA9IGRybV9icmlkZ2VfaW5pdChkcm0sIGJy aWRnZSwgJmR3X21pcGlfZHNpX2JyaWRnZV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGRybS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgYnJpZGdlIHdpdGggZHJtXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwllbmNvZGVyLT5icmlkZ2UgPSBicmlkZ2U7CisKKwlkcm1fY29u bmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+Y29ubmVjdG9yLAorCQkJJmR3X21pcGlfZHNpX2Nvbm5l Y3Rvcl9oZWxwZXJfZnVuY3MpOworCWRybV9jb25uZWN0b3JfaW5pdChkcm0sICZkc2ktPmNvbm5l Y3RvciwgJmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5F Q1RPUl9EU0kpOworCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPmNv bm5lY3RvciwgZHNpLT5lbmNvZGVyKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHdfbWlwaV9k c2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAq ZGF0YSwKKwkJICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCByZXNvdXJj ZSAqcmVzLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRh KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBkd19taXBpX2Rz aSAqZHNpOworCXUzMiB2YWw7CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVN OworCisJZHNpLT5wZGF0YSA9IHBkYXRhOworCWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+ZHNpX2hv c3Qub3BzID0gJmR3X21pcGlfZHNpX2hvc3Rfb3BzOworCWRzaS0+ZHNpX2hvc3QuZGV2ID0gZGV2 OworCWRzaS0+ZW5jb2RlciA9IGVuY29kZXI7CisKKwlkc2ktPmJhc2UgPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoZHNpLT5iYXNlKSkKKwkJcmV0dXJuIFBU Ul9FUlIoZHNpLT5iYXNlKTsKKworCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYs ICJwbGxyZWYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJcmV0ID0gUFRS X0VSUihkc2ktPnBsbHJlZl9jbGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgcGxs IHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWNsa19w cmVwYXJlX2VuYWJsZShkc2ktPnBsbHJlZl9jbGspOworCisJZHNpLT5jZmdfY2xrID0gZGV2bV9j bGtfZ2V0KGRldiwgImNvcmVfY2ZnIik7CisJaWYgKElTX0VSUihkc2ktPmNmZ19jbGspKSB7CisJ CXJldCA9IFBUUl9FUlIoZHNpLT5jZmdfY2xrKTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8g Z2V0IGNvbmZpZ3VyYXRpb24gY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbGxyZWY7 CisJfQorCisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Y2ZnX2Nsayk7CisJdmFsID0gZHNpX3Jl YWQoZHNpLCBEU0lfVkVSU0lPTik7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Y2ZnX2Ns ayk7CisKKwlkZXZfaW5mbyhkZXYsICJ2ZXJzaW9uIG51bWJlciBpcyAweCUwOHhcbiIsIHZhbCk7 CisKKwlyZXQgPSBkd19taXBpX2RzaV9yZWdpc3Rlcihkcm0sIGRzaSk7CisJaWYgKHJldCkKKwkJ Z290byBlcnJfcGxscmVmOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHNpKTsKKworCXJldHVy biBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKworZXJyX3BsbHJlZjoK KwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKKwlyZXR1cm4gcmV0Owor fQorRVhQT1JUX1NZTUJPTF9HUEwoZHdfbWlwaV9kc2lfYmluZCk7CisKK3ZvaWQgZHdfbWlwaV9k c2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lk ICpkYXRhKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCWNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworfQorRVhQT1JUX1NZTUJPTF9HUEwo ZHdfbWlwaV9kc2lfdW5iaW5kKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5vcHN5cyBEZXNp Z25XYXJlIE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1Io IkxpdSBZaW5nIDxZaW5nLkxpdUBmcmVlc2NhbGUuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmggYi9pbmNs dWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5lODRlMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vYnJpZGdlL2R3 X21pcGlfZHNpLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBG cmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKi8KKworI2lmbmRlZiBfX0RXX01JUElfRFNJX18KKyNkZWZpbmUgX19EV19NSVBJX0RT SV9fCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCitzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9k YXRhIHsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFuZXM7CisJZW51bSBkcm1fbW9kZV9zdGF0 dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit9OworCitpbnQgZHdfbWlwaV9kc2lf Z2V0X2VuY29kZXJfcGl4ZWxfZm9ybWF0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisK K2ludCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLCB2b2lkICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwg c3RydWN0IHJlc291cmNlICpyZXMsCisJCSAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3Bs YXRfZGF0YSAqcGRhdGEpOwordm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpOworI2VuZGlmCS8qIF9fRFdf TUlQSV9EU0lfXyAqLwotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==