From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v5 12/21] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Date: Wed, 24 Dec 2014 16:39:34 +0800 Message-ID: <1419410383-6359-13-git-send-email-Ying.Liu@freescale.com> References: <1419410383-6359-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: <1419410383-6359-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+Ci0tLQp2NC0+djU6CiAqIFJlbW92ZSAnZHNpLT5wYW5l bCA9IE5VTEw7JyBpbiBkd19taXBpX2RzaV9ob3N0X2RldGFjaCgpIHRvIGFkZHJlc3MKICAgQW5k cnplaiBIYWpkYSdzIGNvbW1lbnQuCgp2My0+djQ6CiAqIE1vdmUgdGhlIHJlbGV2YW50IGR0LWJp bmRpbmdzIHRvIGEgc2VwYXJhdGUgcGF0Y2ggdG8gYWRkcmVzcyBTdGVmYW4KICAgV2FocmVuJ3Mg Y29tbWVudC4KCnYyLT52MzoKICogTmV3bHkgaW50cm9kdWNlZCBpbiB2MyB0byBhZGRyZXNzIEFu ZHkgWWFuJ3MgY29tbWVudC4gIFRoaXMgaXMgYmFzZWQgb24KICAgdGhlIGkuTVggTUlQSSBEU0kg ZHJpdmVyIGluIHYyLiAgVG8gbWFrZSB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNSVBJIERTSQog ICBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGxlc3MgcGxhdGZvcm0tZGVwZW5kYW50LCB0aGlzIHBh dGNoIHBsYWNlcyBpdCBhdAogICB0aGUgZHJtL2JyaWRnZSBkaXJlY3RvcnkgYXMgYSBEUk0gYnJp ZGdlIGRyaXZlci4KCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgICAgfCAgIDUg KwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgIHwgICAxICsKIGRyaXZlcnMv Z3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYyB8IDk5NyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmggICAgIHwgIDI3 ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTAzMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcK aW5kZXggODg0OTIzZi4uODE4MDQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMSwzICsx LDggQEAKK2NvbmZpZyBEUk1fRFdfTUlQSV9EU0kKKwlib29sICJTeW5vcHN5cyBEZXNpZ25XYXJl IE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UiCisJZGVwZW5kcyBvbiBEUk0KKwlzZWxl Y3QgRFJNX0tNU19IRUxQRVIKKwogY29uZmlnIERSTV9QVE4zNDYwCiAJdHJpc3RhdGUgIlBUTjM0 NjAgRFAvTFZEUyBicmlkZ2UiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxl CmluZGV4IGI0NzMzZTEuLmIzMjZhZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAtMSwz ICsxLDQgQEAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKK29iai0kKENPTkZJR19EUk1f RFdfTUlQSV9EU0kpICs9IGR3X21pcGlfZHNpLm8KIG9iai0kKENPTkZJR19EUk1fUFROMzQ2MCkg Kz0gcHRuMzQ2MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X21pcGlf ZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ODYzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYwpAQCAtMCwwICsxLDk5NyBAQAorLyoKKyAq IFN5bm9wc3lzIERlc2lnbldhcmUoRFcpIE1JUEkgRFNJIEhvc3QgQ29udHJvbGxlcgorICoKKyAq IENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICov 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 IHZhbCkKK3sKKwl1MzIgdiA9IHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7CisJdiAmPSB+bWFzazsK Kwl2IHw9IHZhbDsKKwl3cml0ZWwodiwgZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlu dCBjaGVja19zdGF0dXMoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcsIHUzMiBzdGF0 dXMsCisJCQl1bnNpZ25lZCBpbnQgdGltZW91dCwgYm9vbCB0b19zZXQpCit7CisJdW5zaWduZWQg bG9uZyBleHBpcmU7CisJYm9vbCBvdXQ7CisJdTMyIHZhbDsKKworCWV4cGlyZSA9IGppZmZpZXMg KyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCWZvciAoOzspIHsKKwkJdmFsID0gZHNpX3Jl YWQoZHNpLCByZWcpOworCQlvdXQgPSB0b19zZXQgPyAoKHZhbCAmIHN0YXR1cykgPT0gc3RhdHVz KSA6ICEodmFsICYgc3RhdHVzKTsKKwkJaWYgKG91dCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1l X2FmdGVyKGppZmZpZXMsIGV4cGlyZSkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCQljcHVf cmVsYXgoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBjb250cm9sbGVyIHNo b3VsZCBnZW5lcmF0ZSAyIGZyYW1lcyBiZWZvcmUKKyAqIHByZXBhcmluZyB0aGUgcGVyaXBoZXJh bC4KKyAqLworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlpbnQgcmVm cmVzaCwgdHdvX2ZyYW1lczsKKworCXJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChkc2ktPm1v ZGUpOworCXR3b19mcmFtZXMgPSBESVZfUk9VTkRfVVAoTVNFQ19QRVJfU0VDLCByZWZyZXNoKSAq IDI7CisKKwlleHBpcmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0d29fZnJhbWVzKTsK Kwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlKSkKKwkJY3B1X3JlbGF4KCk7Cit9 CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29uZmlnX3Rlc3RkaW4oc3RydWN0IGR3X21pcGlf ZHNpICpkc2kpCit7CisJaW50IHJldCwgdGVzdGRpbjsKKworCXRlc3RkaW4gPSBtYXhfbWJwc190 b190ZXN0ZGluKGRzaS0+bGFuZV9tYnBzKTsKKwlpZiAodGVzdGRpbiA8IDApIHsKKwkJZGV2X2Vy cihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgdGVzdGRpbiBmb3IgJWRtYnBzICIKKwkJCSJsYW5l IGNsb2NrXG4iLCBkc2ktPmxhbmVfbWJwcyk7CisJCXJldHVybiB0ZXN0ZGluOworCX0KKworCWRz aV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwgUEhZX0lGX0NUUkxfUkVTRVQpOworCWRzaV93 cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKwlkc2lfd3JpdGUo ZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8CisJ CQkJCSAgUEhZX1RFU1RESU4oMHg0NCkpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NU UkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCWRzaV93cml0ZShkc2ksIERTSV9Q SFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dyaXRl KGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9VTlRFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8 CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdGRpbikpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf VFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCWRzaV93cml0ZShkc2ks IERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCAgICAgIFBIWV9FTkFCTEVDTEsgfCBQSFlfVU5SU1Ra IHwKKwkJCQkJICBQSFlfVU5TSFVURE9XTlopOworCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERT SV9QSFlfU1RBVFVTLCBMT0NLLAorCQkJICAgUEhZX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9f U0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdh aXQgZm9yIHBoeSBsb2NrIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gY2hl Y2tfc3RhdHVzKGRzaSwgRFNJX1BIWV9TVEFUVVMsIFNUT1BfU1RBVEVfQ0xLX0xBTkUsCisJCQkg ICBQSFlfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19TRVQpOworCWlmIChyZXQgPCAwKSB7CisJ CWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5IGNsayBsYW5lIHN0b3Ag c3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAor CQkJCSAgICB1bnNpZ25lZCBpbnQgKmZpbmFsX21icHMpCit7CisJaW50IGJwcCwgaTsKKwl1bnNp Z25lZCBpbnQgdGFyZ2V0X21icHMsIG1wY2xrOworCXVuc2lnbmVkIGxvbmcgcGxscmVmOworCisJ YnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisJaWYgKGJw cCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgYnBwIGZvciBwaXhl bCBmb3JtYXQgJWRcbiIsCisJCQlkc2ktPmZvcm1hdCk7CisJCXJldHVybiBicHA7CisJfQorCisJ cGxscmVmID0gY2xrX2dldF9yYXRlKGRzaS0+cGxscmVmX2Nsayk7CisJaWYgKHBsbHJlZiAhPSAy NzAwMDAwMCkKKwkJZGV2X3dhcm4oZHNpLT5kZXYsICJleHBlY3QgMjdNSHogRFBIWSBwbGwgcmVm ZXJlbmNlIGNsb2NrXG4iKTsKKworCW1wY2xrID0gRElWX1JPVU5EX1VQKGRzaS0+bW9kZS0+Y2xv Y2ssIE1TRUNfUEVSX1NFQyk7CisJaWYgKG1wY2xrKSB7CisJCS8qIHRha2UgMS8wLjcgYmxhbmtp bmcgb3ZlcmhlYWQgaW50byBjb25zaWRlcmF0aW9uICovCisJCXRhcmdldF9tYnBzID0gKG1wY2xr ICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTApIC8gNzsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGRz aS0+ZGV2LCAidXNlIGRlZmF1bHQgMUdicHMgRFBIWSBwbGwgY2xvY2tcbiIpOworCQl0YXJnZXRf bWJwcyA9IDEwMDA7CisJfQorCisJZGV2X2RiZyhkc2ktPmRldiwgInRhcmdldCBEUEhZIHBsbCBj bG9jayBmcmVxdWVuY3kgaXMgJXVNYnBzXG4iLAorCQl0YXJnZXRfbWJwcyk7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKSB7CisJCWlmICh0YXJnZXRfbWJw cyA8IGRwdGRpbl9tYXBbaV0ubWF4X21icHMpIHsKKwkJCSpmaW5hbF9tYnBzID0gZHB0ZGluX21h cFtpXS5tYXhfbWJwczsKKwkJCWRldl9kYmcoZHNpLT5kZXYsICJyZWFsIERQSFkgcGxsIGNsb2Nr IGZyZXF1ZW5jeSAiCisJCQkJICJpcyAldU1icHNcbiIsICpmaW5hbF9tYnBzKTsKKwkJCXJldHVy biAwOworCQl9CisJfQorCisJZGV2X2Vycihkc2ktPmRldiwgIkRQSFkgY2xvY2sgZnJlcXVlbmN5 ICV1TWJwcyBpcyBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJCQl0YXJnZXRfbWJwcyk7CisKKwlyZXR1 cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2F0dGFjaChzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk ZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsK KworCWlmIChkZXZpY2UtPmxhbmVzID4gZHNpLT5wZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgInRoZSBudW1iZXIgb2YgZGF0YSBsYW5lcyglZCkgaXMgdG9vIG1h bnlcbiIsCisJCQkJZGV2aWNlLT5sYW5lcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlm ICghKGRldmljZS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1QpIHx8CisJ ICAgICEoZGV2aWNlLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNF KSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZGV2aWNlIG1vZGUgaXMgdW5zdXBwb3J0ZWRcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2aWNlLT5mb3JtYXQgIT0gTUlQSV9E U0lfRk1UX1JHQjg4OCAmJgorCSAgICBkZXZpY2UtPmZvcm1hdCAhPSBNSVBJX0RTSV9GTVRfUkdC NTY1KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJkZXZpY2UgcGl4ZWwgZm9ybWF0IGlzIHVuc3Vw cG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHNpLT5sYW5lcyA9IGRldmlj ZS0+bGFuZXM7CisJZHNpLT5jaGFubmVsID0gZGV2aWNlLT5jaGFubmVsOworCWRzaS0+Zm9ybWF0 ID0gZGV2aWNlLT5mb3JtYXQ7CisJZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmlj ZS0+ZGV2Lm9mX25vZGUpOworCWRybV9wYW5lbF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+Y29u bmVjdG9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2hvc3Rf ZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSAgIHN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9f ZHNpKGhvc3QpOworCisJZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVsKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKHN0cnVjdCBk d19taXBpX2RzaSAqZHNpLCB1MzIgdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjaGVja19z dGF0dXMoZHNpLCBEU0lfQ01EX1BLVF9TVEFUVVMsIEdFTl9DTURfRlVMTCwKKwkJCSAgIENNRF9Q S1RfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19DTEVBUik7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgYXZhbGlhYmxlIGNvbW1hbmQgRklGT1xu Iik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9IRFIsIHZh bCk7CisKKwlyZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfQ01EX1BLVF9TVEFUVVMsCisJCQkg ICBHRU5fQ01EX0VNUFRZIHwgR0VOX1BMRF9XX0VNUFRZLAorCQkJICAgQ01EX1BLVF9TVEFUVVNf VElNRU9VVCwgU1RBVFVTX1RPX1NFVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihkc2kt PmRldiwgImZhaWxlZCB0byB3cml0ZSBjb21tYW5kIEZJRk9cbiIpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93 cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG1p cGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUxNiAqdHhfYnVmID0gbXNnLT50eF9idWY7CisJ dTMyIHZhbCA9IEdFTl9IREFUQSgqdHhfYnVmKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOworCisJ aWYgKG1zZy0+dHhfbGVuID4gMikgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAidG9vIGxvbmcgdHgg YnVmIGxlbmd0aCAlZCBmb3Igc2hvcnQgd3JpdGVcbiIsCisJCQltc2ctPnR4X2xlbik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0 ZShkc2ksIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUo c3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNp X21zZyAqbXNnKQoreworCWNvbnN0IHUzMiAqdHhfYnVmID0gbXNnLT50eF9idWY7CisJaW50IGxl biA9IG1zZy0+dHhfbGVuLCBwbGRfZGF0YV9ieXRlcyA9IHNpemVvZigqdHhfYnVmKSwgcmV0Owor CXUzMiB2YWwgPSBHRU5fSERBVEEobXNnLT50eF9sZW4pIHwgR0VOX0hUWVBFKG1zZy0+dHlwZSk7 CisJdTMyIHJlbWFpbmRlciA9IDA7CisKKwlpZiAobXNnLT50eF9sZW4gPCAzKSB7CisJCWRldl9l cnIoZHNpLT5kZXYsICJ3cm9uZyB0eCBidWYgbGVuZ3RoICVkIGZvciBsb25nIHdyaXRlXG4iLAor CQkJbXNnLT50eF9sZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3aGlsZSAoRElWX1JP VU5EX1VQKGxlbiwgcGxkX2RhdGFfYnl0ZXMpKSB7CisJCWlmIChsZW4gPCBwbGRfZGF0YV9ieXRl cykgeworCQkJbWVtY3B5KCZyZW1haW5kZXIsIHR4X2J1ZiwgbGVuKTsKKwkJCWRzaV93cml0ZShk c2ksIERTSV9HRU5fUExEX0RBVEEsIHJlbWFpbmRlcik7CisJCQlsZW4gPSAwOworCQl9IGVsc2Ug eworCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwgKnR4X2J1Zik7CisJCQl0eF9i dWYrKzsKKwkJCWxlbiAtPSBwbGRfZGF0YV9ieXRlczsKKwkJfQorCQlyZXQgPSBjaGVja19zdGF0 dXMoZHNpLCBEU0lfQ01EX1BLVF9TVEFUVVMsIEdFTl9QTERfV19GVUxMLAorCQkJCSAgIENNRF9Q S1RfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19DTEVBUik7CisJCWlmIChyZXQgPCAwKSB7CisJ CQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBhdmFsaWFibGUgIgorCQkJCQkid3Jp dGUgcGF5bG9hZCBGSUZPXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4g ZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCB2YWwpOworfQorCitzdGF0aWMgc3Np emVfdCBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAorCQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisJaW50IHJldDsKKworCXN3aXRjaCAo bXNnLT50eXBlKSB7CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEU6CisJY2FzZSBNSVBJ X0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06CisJY2FzZSBNSVBJX0RTSV9TRVRfTUFYSU1VTV9S RVRVUk5fUEFDS0VUX1NJWkU6CisJCXJldCA9IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93cml0ZShk c2ksIG1zZyk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRENTX0xPTkdfV1JJVEU6CisJCXJl dCA9IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKGRzaSwgbXNnKTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJZGV2X2Vycihkc2ktPmRldiwgInVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZVxuIik7 CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBpX2RzaV9ob3N0X29wcyA9IHsKKwkuYXR0 YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9IGR3X21pcGlfZHNpX2hv c3RfZGV0YWNoLAorCS50cmFuc2ZlciA9IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIsCit9Owor CitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworZHdfbWlwaV9kc2lfZGV0ZWN0KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNv bm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9k cm1fY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sK Kwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNz IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9oZWxwZXJfY29u bmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25u ZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IGR3X21pcGlfZHNpX2RldGVjdCwKKwkuZGVzdHJveSA9 IGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveSwKK307CisKK3N0YXRpYyBpbnQgZHdf bWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3RvX2RzaShjb25uZWN0b3Ip OworCisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7Cit9CisKK3N0YXRp YyBlbnVtIGRybV9tb2RlX3N0YXR1cyBkd19taXBpX2RzaV9tb2RlX3ZhbGlkKAorCQkJCQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVj dG9yKTsKKworCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfc3RhdHVzID0gTU9ERV9PSzsKKwor CWlmIChkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKQorCQltb2RlX3N0YXR1cyA9IGRzaS0+cGRhdGEt Pm1vZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiBtb2RlX3N0YXR1czsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqZHdfbWlwaV9kc2lfY29ubmVjdG9yX2Jlc3Rf ZW5jb2RlcigKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBk c2ktPmVuY29kZXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0g ZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGR3X21pcGlf ZHNpX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9i ZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19tb2RlX2Nv bmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gVklE X01PREVfVFlQRV9CVVJTVF9TWU5DX1BVTFNFUyB8IEVOQUJMRV9MT1dfUE9XRVI7CisKKwlkc2lf d3JpdGUoZHNpLCBEU0lfVklEX01PREVfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV9zZXRfbW9kZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgZW51bSBkd19t aXBpX2RzaV9tb2RlIG1vZGUpCit7CisJaWYgKG1vZGUgPT0gRFdfTUlQSV9EU0lfQ01EX01PREUp IHsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCQlkc2lfbW9kaWZ5KGRz aSwgRFNJX0NNRF9NT0RFX0NGRywKKwkJCSAgIEVOQUJMRV9DTURfTU9ERV9NQVNLLCBFTkFCTEVf Q01EX01PREUpOworCQlkc2lfbW9kaWZ5KGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywKKwkJCSAgIEVO QUJMRV9WSURFT19NT0RFX01BU0ssIERJU0FCTEVfVklERU9fTU9ERSk7CisJCWRzaV93cml0ZShk c2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCX0gZWxzZSB7CisJCWRzaV93cml0ZShkc2ksIERT SV9QV1JfVVAsIFJFU0VUKTsKKwkJZHNpX21vZGlmeShkc2ksIERTSV9DTURfTU9ERV9DRkcsCisJ CQkgICBFTkFCTEVfQ01EX01PREVfTUFTSywgRElTQUJMRV9DTURfTU9ERSk7CisKKwkJZHdfbWlw aV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKworCQlkc2lfbW9kaWZ5KGRzaSwgRFNJX1ZJ RF9NT0RFX0NGRywKKwkJCSAgIEVOQUJMRV9WSURFT19NT0RFX01BU0ssIEVOQUJMRV9WSURFT19N T0RFKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7CisJCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwgVFhfUkVRX0NMS19IUyk7CisJfQorfQorCitzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9kaXNhYmxlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRz aV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RSTCwgUEhZX0lGX0NUUkxfUkVTRVQpOworCWRzaV93 cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JT VFosIFBIWV9SU1RaKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfYnJpZGdlX2VuYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNp ID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKworCWlmIChkc2ktPmVuYWJsZWQpCisJCXJldHVy bjsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNmZ19jbGspOworCWR3X21pcGlfZHNpX2Nv bmZpZ190ZXN0ZGluKGRzaSk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJX0RT SV9WSURfTU9ERSk7CisJZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhkc2kpOworCWR3 X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOworCWRybV9wYW5l bF9wcmVwYXJlKGRzaS0+cGFuZWwpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQ SV9EU0lfVklEX01PREUpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNmZ19jbGspOwor CisJZHJtX3BhbmVsX2VuYWJsZShkc2ktPnBhbmVsKTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7 Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBicmlkZ2UtPmRy aXZlcl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlOworCisJaWYgKCFkc2ktPmVuYWJs ZWQpCisJCXJldHVybjsKKworCWRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpOworCisJY2xr X3ByZXBhcmVfZW5hYmxlKGRzaS0+Y2ZnX2Nsayk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNp LCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBhbmVs KTsKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKwor CS8qCisJICogVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHRoZSBwZXJpcGhlcmFsCisJ ICogd2lsbCBiZSBkcml2ZW4gbm9ybWFsbHkgd2hlbiB0aGUgZGlzcGxheSBpcworCSAqIGVuYWJs ZWQgYWdhaW4gbGF0ZXIuCisJICovCisJZXhwaXJlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZp ZXMoMTIwKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlKSkKKwkJY3B1X3Jl bGF4KCk7CisKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RF KTsKKwlkd19taXBpX2RzaV9kaXNhYmxlKGRzaSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRz aS0+Y2ZnX2Nsayk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfYnJpZGdlX25vcGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwkv KiBkbyBub3RoaW5nICovCit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2luaXQoc3RydWN0 IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQp OworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX0RJU0FCTEVDTEsgfCBQSFlfUlNU WiB8IFBIWV9TSFVURE9XTlopOworCWRzaV93cml0ZShkc2ksIERTSV9DTEtNR1JfQ0ZHLCBUT19D TEtfRElWSURTSU9OKDEpIHwgVFhfRVNDX0NMS19ESVZJRFNJT04oNykpOworfQorCitzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9kcGlfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJ CSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXUzMiB2YWwgPSAwOworCisJ aWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykpCisJCXZhbCB8PSBWU1lO Q19BQ1RJVkVfTE9XOworCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMp KQorCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsK KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzI0 QklUOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCXZhbCB8PSBEUElf Q09MT1JfQ09ESU5HXzE4QklUXzI7CisJCXZhbCB8PSBFTjE4X0xPT1NFTFk7CisJCWJyZWFrOwor CWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXZhbCB8PSBEUElfQ09MT1JfQ09E SU5HXzE4QklUXzE7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJdmFs IHw9IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMTsKKwkJYnJlYWs7CisJfQorCisJdmFsIHw9IERQ SV9WSUQoZHNpLT5jaGFubmVsKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9EUElfQ0ZHLCB2YWwp OworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3Ry dWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BDS0hETF9DRkcs IEVOX0NSQ19SWCB8IEVOX0VDQ19SWCB8IEVOX0JUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21p cGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJ CSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBE U0lfVklEX1BLVF9DRkcsIFZJRF9QS1RfU0laRShtb2RlLT5oZGlzcGxheSkpOworfQorCitzdGF0 aWMgdm9pZCBkd19taXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9DTURfTU9ERV9DRkcsIENNRF9NT0RFX0FM TF9MUCB8IEVOQUJMRV9DTURfTU9ERSk7Cit9CisKKy8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3lj bGVzLiAqLworc3RhdGljIHU2NCBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKHN0cnVj dCBkd19taXBpX2RzaSAqZHNpLAorCQkJCQkgICB1NjQgaGNvbXBvbmVudCkKK3sKKwl1NjQgZnJh YywgbGJjYzsKKworCWxiY2MgPSBoY29tcG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBVU0VDX1BF Ul9TRUMgLyA4OworCWZyYWMgPSBkb19kaXYobGJjYywgZHNpLT5tb2RlLT5jbG9jayAqIE1TRUNf UEVSX1NFQyk7CisJaWYgKGZyYWMpCisJCWxiY2MrKzsKKworCXJldHVybiBsYmNjOworfQorCitz dGF0aWMgdm9pZCBkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSkKK3sKKwl1MzIgdmFsID0gMCwgaHRvdGFsLCBoc2EsIGhicCwgbGJjYzsKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKworCWh0b3RhbCA9IG1vZGUt Pmh0b3RhbDsKKwloc2EgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwlo YnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisKKwlsYmNjID0gZHdfbWlwaV9k c2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGh0b3RhbCk7CisJdmFsIHw9IEhMSU5FX1RJTUUo bGJjYyk7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGhz YSk7CisJdmFsIHw9IEhTQV9USU1FKGxiY2MpOworCisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9o Y29tcG9uZW50X2xiY2MoZHNpLCBoYnApOworCXZhbCB8PSBIQlBfVElNRShsYmNjKTsKKworCWRz aV93cml0ZShkc2ksIERTSV9UTVJfTElORV9DRkcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3 X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cit7CisJdTMyIHZhbCwgdmFjdGl2ZSwgdnNhLCB2ZnAsIHZicDsKKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKworCXZhY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsK Kwl2c2EgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKKwl2ZnAgPSBtb2Rl LT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5OworCXZicCA9IG1vZGUtPnZ0b3RhbCAtIG1v ZGUtPnZzeW5jX2VuZDsKKworCXZhbCA9IFZfQUNUSVZFX0xJTkVTKHZhY3RpdmUpIHwgVlNBX0xJ TkVTKHZzYSkgfAorCSAgICAgIFZGUF9MSU5FUyh2ZnApIHwgVkJQX0xJTkVTKHZicCk7CisKKwlk c2lfd3JpdGUoZHNpLCBEU0lfVlRJTUlOR19DRkcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3 X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sK Kwl1MzIgdmFsOworCisJdmFsID0gUEhZX0hTMkxQX1RJTUUoMHg0MCkgfCBQSFlfTFAySFNfVElN RSgweDQwKSB8CisJICAgICAgQlRBX1RJTUUoMHhkMDApOworCisJZHNpX3dyaXRlKGRzaSwgRFNJ X1BIWV9UTVJfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2lu dGVyZmFjZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRz aSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9QX1dBSVRfVElNRSgweDIwKSB8CisJCQkJCQlOX0xB TkVTKGRzaS0+bGFuZXMpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY2xlYXJfZXJy KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV9yZWFkKGRzaSwgRFNJX0VSUk9SX1NU MCk7CisJZHNpX3JlYWQoZHNpLCBEU0lfRVJST1JfU1QxKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lf RVJST1JfTVNLMCwgMCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0VSUk9SX01TSzEsIDApOworfQor CitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBkd19taXBp X2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJZHNpLT5t b2RlID0gbW9kZTsKKworCXJldCA9IGR3X21pcGlfZHNpX2dldF9sYW5lX2Jwcyhkc2ksICZkc2kt PmxhbmVfbWJwcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybjsKKworCWNsa19wcmVwYXJlX2Vu YWJsZShkc2ktPmNmZ19jbGspOworCWR3X21pcGlfZHNpX2luaXQoZHNpKTsKKwlkd19taXBpX2Rz aV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29u ZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKwlkd19taXBp X2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfY29tbWFu ZF9tb2RlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKGRzaSk7 CisJZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNp X2RwaHlfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2Nv bmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2NsZWFyX2Vycihkc2kpOworCWR3X21pcGlfZHNpX2Nv bmZpZ190ZXN0ZGluKGRzaSk7CisJZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhkc2kp OworCWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpOworCWNsa19kaXNhYmxlX3VucHJlcGFy ZShkc2ktPmNmZ19jbGspOworfQorCitzdGF0aWMgYm9vbCBkd19taXBpX2RzaV9icmlkZ2VfbW9k ZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkd19taXBp X2RzaV9icmlkZ2VfZGVzdHJveShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCWRybV9i cmlkZ2VfY2xlYW51cChicmlkZ2UpOworCWtmcmVlKGJyaWRnZSk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2JyaWRnZV9mdW5jcyBkd19taXBpX2RzaV9icmlkZ2VfZnVuY3MgPSB7CisJLmVuYWJs ZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9lbmFibGUsCisJLmRpc2FibGUgPSBkd19taXBpX2RzaV9i cmlkZ2VfZGlzYWJsZSwKKwkucHJlX2VuYWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9ub3BlLAor CS5wb3N0X2Rpc2FibGUgPSBkd19taXBpX2RzaV9icmlkZ2Vfbm9wZSwKKwkubW9kZV9zZXQgPSBk d19taXBpX2RzaV9icmlkZ2VfbW9kZV9zZXQsCisJLm1vZGVfZml4dXAgPSBkd19taXBpX2RzaV9i cmlkZ2VfbW9kZV9maXh1cCwKKwkuZGVzdHJveSA9IGR3X21pcGlfZHNpX2JyaWRnZV9kZXN0cm95 LAorfTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtLCBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIgPSBkc2ktPmVuY29kZXI7CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlp bnQgcmV0OworCisJYnJpZGdlID0gZGV2bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKmJyaWRn ZSksIEdGUF9LRVJORUwpOworCWlmICghYnJpZGdlKSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJm YWlsZWQgdG8gYWxsb2NhdGUgZHJtIGJyaWRnZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0K KworCWRzaS0+YnJpZGdlID0gYnJpZGdlOworCWJyaWRnZS0+ZHJpdmVyX3ByaXZhdGUgPSBkc2k7 CisKKwlyZXQgPSBkcm1fYnJpZGdlX2luaXQoZHJtLCBicmlkZ2UsICZkd19taXBpX2RzaV9icmlk Z2VfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihkcm0tPmRldiwgImZhaWxlZCB0byBp bml0aWFsaXplIGJyaWRnZSB3aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZW5j b2Rlci0+YnJpZGdlID0gYnJpZGdlOworCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZkc2kt PmNvbm5lY3RvciwKKwkJCSZkd19taXBpX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlk cm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5jb25uZWN0b3IsICZkd19taXBpX2RzaV9jb25u ZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKKworCWRybV9tb2Rl X2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmZHNpLT5jb25uZWN0b3IsIGRzaS0+ZW5jb2Rlcik7 CisKKwlyZXR1cm4gMDsKK30KKworaW50IGR3X21pcGlfZHNpX2JpbmQoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJICAgICBjb25zdCBz dHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaTsKKwl1MzIgdmFsOworCWlu dCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJO RUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzaS0+cGRhdGEgPSBwZGF0 YTsKKwlkc2ktPmRldiA9IGRldjsKKwlkc2ktPmRzaV9ob3N0Lm9wcyA9ICZkd19taXBpX2RzaV9o b3N0X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKKwlkc2ktPmVuY29kZXIgPSBlbmNv ZGVyOworCisJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlp ZiAoSVNfRVJSKGRzaS0+YmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGRzaS0+YmFzZSk7CisKKwlk c2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxscmVmIik7CisJaWYgKElTX0VS Uihkc2ktPnBsbHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5wbGxyZWZfY2xrKTsK KwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHBsbCByZWZlcmVuY2UgY2xvY2s6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wbGxy ZWZfY2xrKTsKKworCWRzaS0+Y2ZnX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJjb3JlX2NmZyIp OworCWlmIChJU19FUlIoZHNpLT5jZmdfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+Y2Zn X2Nsayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBjb25maWd1cmF0aW9uIGNsb2Nr OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcGxscmVmOworCX0KKworCWNsa19wcmVwYXJlX2Vu YWJsZShkc2ktPmNmZ19jbGspOworCXZhbCA9IGRzaV9yZWFkKGRzaSwgRFNJX1ZFUlNJT04pOwor CWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNmZ19jbGspOworCisJZGV2X2luZm8oZGV2LCAi dmVyc2lvbiBudW1iZXIgaXMgMHglMDh4XG4iLCB2YWwpOworCisJcmV0ID0gZHdfbWlwaV9kc2lf cmVnaXN0ZXIoZHJtLCBkc2kpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BsbHJlZjsKKworCWRl dl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7CisKKwlyZXR1cm4gbWlwaV9kc2lfaG9zdF9yZWdpc3Rl cigmZHNpLT5kc2lfaG9zdCk7CisKK2Vycl9wbGxyZWY6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGRzaS0+cGxscmVmX2Nsayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGR3 X21pcGlfZHNpX2JpbmQpOworCit2b2lkIGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbWlwaV9kc2lfaG9zdF91 bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5w bGxyZWZfY2xrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGR3X21pcGlfZHNpX3VuYmluZCk7CisK K01PRFVMRV9ERVNDUklQVElPTigiU3lub3BzeXMgRGVzaWduV2FyZSBNSVBJIERTSSBob3N0IGNv bnRyb2xsZXIgRFJNIGJyaWRnZSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkxpdSBZaW5nIDxZ aW5nLkxpdUBmcmVlc2NhbGUuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmggYi9pbmNsdWRlL2RybS9icmlk Z2UvZHdfbWlwaV9kc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRl MzU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgK QEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2Vt aWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKwor I2lmbmRlZiBfX0RXX01JUElfRFNJX18KKyNkZWZpbmUgX19EV19NSVBJX0RTSV9fCisKKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgorCitzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHsKKwl1bnNp Z25lZCBpbnQgbWF4X2RhdGFfbGFuZXM7CisJZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3Zh bGlkKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit9OworCitpbnQgZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJf cGl4ZWxfZm9ybWF0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKK2ludCBkd19taXBp X2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lk ICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IHJlc291 cmNlICpyZXMsCisJCSAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRh dGEpOwordm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpOworI2VuZGlmCS8qIF9fRFdfTUlQSV9EU0lfXyAq LwotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==