From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v9 11/20] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Date: Thu, 12 Feb 2015 14:01:34 +0800 Message-ID: <1423720903-24806-12-git-send-email-Ying.Liu@freescale.com> References: <1423720903-24806-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: <1423720903-24806-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, sboyd@codeaurora.org, linux-kernel@vger.kernel.org, a.hajda@samsung.com, andy.yan@rock-chips.com, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9zdCBjb250cm9s bGVyIGRyaXZlciBzdXBwb3J0LgpDdXJyZW50bHksIHRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGJ1 cnN0IHdpdGggc3luYyBwdWxzZXMgbW9kZSBvbmx5LgoKU2lnbmVkLW9mZi1ieTogTGl1IFlpbmcg PFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Ci0tLQp2OC0+djk6CiAqIFJlYmFzZSBvbnRvIHRoZSBp bXgtZHJtL25leHQgYnJhbmNoIG9mIFBoaWxpcHAgWmFiZWwncyBvcGVuIGdpdCByZXBvc2l0b3J5 CiAgIGFuZCBhZGFwdCB0byBicmlkZ2UgQVBJIGNoYW5nZSBhcyB0aGUgZHctaGRtaSBkcml2ZXIg ZGlkLgogKiBUbyBhZGRyZXNzIFBoaWxpcHAncyBjb21tZW50LCBhZGQgYSBuZXcgcmVxdWlyZWQg Y2xvY2sgcGNsayBhbmQgY2xlYW4gdXAKICAgY2xvY2stbmFtZXMuCiAqIEFkZCBkcml2ZXIgY29w eXJpZ2h0IGZvciAyMDE1LgoKdjctPnY4OgogKiBGaXggdGhlIGRyaXZlcidzIEtjb25maWcgc28g dGhhdCB3ZSBtYXkgcGFzcyB0aGUgYWxsbW9kY29uZmlnIGZvciBBUk0uCgp2Ni0+djc6CiAqIE5v bmUuCgp2NS0+djY6CiAqIE1ha2UgdGhlIGNoZWNrcGF0Y2gucGwgc2NyaXB0IGJlIGhhcHBpZXIu Cgp2NC0+djU6CiAqIFJlbW92ZSAnZHNpLT5wYW5lbCA9IE5VTEw7JyBpbiBkd19taXBpX2RzaV9o b3N0X2RldGFjaCgpIHRvIGFkZHJlc3MKICAgQW5kcnplaiBIYWpkYSdzIGNvbW1lbnQuCgp2My0+ djQ6CiAqIE1vdmUgdGhlIHJlbGV2YW50IGR0LWJpbmRpbmdzIHRvIGEgc2VwYXJhdGUgcGF0Y2gg dG8gYWRkcmVzcyBTdGVmYW4KICAgV2FocmVuJ3MgY29tbWVudC4KCnYyLT52MzoKICogTmV3bHkg aW50cm9kdWNlZCBpbiB2MyB0byBhZGRyZXNzIEFuZHkgWWFuJ3MgY29tbWVudC4gIFRoaXMgaXMg YmFzZWQgb24KICAgdGhlIGkuTVggTUlQSSBEU0kgZHJpdmVyIGluIHYyLiAgVG8gbWFrZSB0aGUg U3lub3BzeXMgRGVzaWduV2FyZSBNSVBJIERTSQogICBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGxl c3MgcGxhdGZvcm0tZGVwZW5kYW50LCB0aGlzIHBhdGNoIHBsYWNlcyBpdCBhdAogICB0aGUgZHJt L2JyaWRnZSBkaXJlY3RvcnkgYXMgYSBEUk0gYnJpZGdlIGRyaXZlci4KCiBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcgICAgICAgfCAgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2Rz aS5jIHwgMTAwNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2Ry bS9icmlkZ2UvZHdfbWlwaV9kc2kuaCAgICAgfCAgIDI3ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTA0 NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9kd19taXBpX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vYnJpZGdlL2R3 X21pcGlfZHNpLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKaW5kZXggZjM4YmJjZC4uZGUxNTFmMiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMyw2ICszLDE2IEBAIGNvbmZpZyBEUk1fRFdfSERN SQogCWRlcGVuZHMgb24gRFJNCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAKK2NvbmZpZyBEUk1f RFdfTUlQSV9EU0kKKwl0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNSVBJIERTSSBob3N0 IGNvbnRyb2xsZXIgYnJpZGdlIgorCWRlcGVuZHMgb24gRFJNCisJc2VsZWN0IERSTV9LTVNfSEVM UEVSCisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUwKKwloZWxwCisJICBD aG9vc2UgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQ SSBEU0kgaG9zdAorCSAgY29udHJvbGxlciBicmlkZ2UuCisKIGNvbmZpZyBEUk1fUFROMzQ2MAog CXRyaXN0YXRlICJQVE4zNDYwIERQL0xWRFMgYnJpZGdlIgogCWRlcGVuZHMgb24gRFJNCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9NYWtlZmlsZQppbmRleCBkOGE4Y2ZkLi41ZjhlOWIzIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUKQEAgLTIsMyArMiw0IEBAIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKIG9i ai0kKENPTkZJR19EUk1fUFROMzQ2MCkgKz0gcHRuMzQ2MC5vCiBvYmotJChDT05GSUdfRFJNX0RX X0hETUkpICs9IGR3X2hkbWkubworb2JqLSQoQ09ORklHX0RSTV9EV19NSVBJX0RTSSkgKz0gZHdf bWlwaV9kc2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2Rz aS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjI0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmMKQEAgLTAsMCArMSwxMDA2IEBACisvKgorICog U3lub3BzeXMgRGVzaWduV2FyZShEVykgTUlQSSBEU0kgSG9zdCBDb250cm9sbGVyCisgKgorICog Q29weXJpZ2h0IChDKSAyMDExLTIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGRybS9icmlkZ2UvZHdfbWlwaV9k c2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDx2aWRl by9taXBpX2Rpc3BsYXkuaD4KKworI2RlZmluZSBEU0lfVkVSU0lPTgkJCTB4MDAKKworI2RlZmlu ZSBEU0lfUFdSX1VQCQkJMHgwNAorI2RlZmluZSBSRVNFVAkJCQkwCisjZGVmaW5lIFBPV0VSVVAJ CQkJQklUKDApCisKKyNkZWZpbmUgRFNJX0NMS01HUl9DRkcJCQkweDA4CisjZGVmaW5lIFRPX0NM S19ESVZJRFNJT04oZGl2KQkJKCgoZGl2KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFRYX0VTQ19D TEtfRElWSURTSU9OKGRpdikJKCgoZGl2KSAmIDB4ZmYpIDw8IDApCisKKyNkZWZpbmUgRFNJX0RQ SV9DRkcJCQkweDBjCisjZGVmaW5lIEVOMThfTE9PU0VMWQkJCUJJVCgxMCkKKyNkZWZpbmUgQ09M T1JNX0FDVElWRV9MT1cJCUJJVCg5KQorI2RlZmluZSBTSFVURF9BQ1RJVkVfTE9XCQlCSVQoOCkK KyNkZWZpbmUgSFNZTkNfQUNUSVZFX0xPVwkJQklUKDcpCisjZGVmaW5lIFZTWU5DX0FDVElWRV9M T1cJCUJJVCg2KQorI2RlZmluZSBEQVRBRU5fQUNUSVZFX0xPVwkJQklUKDUpCisjZGVmaW5lIERQ SV9DT0xPUl9DT0RJTkdfMTZCSVRfMQkoMHgwIDw8IDIpCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJ TkdfMTZCSVRfMgkoMHgxIDw8IDIpCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMwko MHgyIDw8IDIpCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMQkoMHgzIDw8IDIpCisj ZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMgkoMHg0IDw8IDIpCisjZGVmaW5lIERQSV9D T0xPUl9DT0RJTkdfMjRCSVQJCSgweDUgPDwgMikKKyNkZWZpbmUgRFBJX1ZJRCh2aWQpCQkJKCgo dmlkKSAmIDB4MykgPDwgMCkKKworI2RlZmluZSBEU0lfREJJX0NGRwkJCTB4MTAKKyNkZWZpbmUg RFNJX0RCSVNfQ01EU0laRQkJMHgxNAorCisjZGVmaW5lIERTSV9QQ0tIRExfQ0ZHCQkJMHgxOAor I2RlZmluZSBHRU5fVklEX1JYKHZpZCkJCQkoKCh2aWQpICYgMHgzKSA8PCA1KQorI2RlZmluZSBF Tl9DUkNfUlgJCQlCSVQoNCkKKyNkZWZpbmUgRU5fRUNDX1JYCQkJQklUKDMpCisjZGVmaW5lIEVO X0JUQQkJCQlCSVQoMikKKyNkZWZpbmUgRU5fRU9UTl9SWAkJCUJJVCgxKQorI2RlZmluZSBFTl9F T1RQX1RYCQkJQklUKDApCisKKyNkZWZpbmUgRFNJX1ZJRF9NT0RFX0NGRwkJMHgxYworI2RlZmlu ZSBGUkFNRV9CVEFfQUNLCQkJQklUKDExKQorI2RlZmluZSBFTl9OVUxMX1BLVAkJCUJJVCgxMCkK KyNkZWZpbmUgRU5fTlVMTF9QS1RfTUFTSwkJQklUKDEwKQorI2RlZmluZSBFTl9NVUxUSV9QS1QJ CQlCSVQoOSkKKyNkZWZpbmUgRU5BQkxFX0xPV19QT1dFUgkJKDB4M2YgPDwgMykKKyNkZWZpbmUg RU5BQkxFX0xPV19QT1dFUl9NQVNLCQkoMHgzZiA8PCAzKQorI2RlZmluZSBWSURfTU9ERV9UWVBF X05PTkJVUlNUX1NZTkNfUFVMU0VTCSgweDAgPDwgMSkKKyNkZWZpbmUgVklEX01PREVfVFlQRV9O T05CVVJTVF9TWU5DX0VWRU5UUwkoMHgxIDw8IDEpCisjZGVmaW5lIFZJRF9NT0RFX1RZUEVfQlVS U1RfU1lOQ19QVUxTRVMJCSgweDMgPDwgMSkKKyNkZWZpbmUgVklEX01PREVfVFlQRV9NQVNLCQkJ KDB4MyA8PCAxKQorI2RlZmluZSBFTkFCTEVfVklERU9fTU9ERQkJCUJJVCgwKQorI2RlZmluZSBE SVNBQkxFX1ZJREVPX01PREUJCQkwCisjZGVmaW5lIEVOQUJMRV9WSURFT19NT0RFX01BU0sJCQlC SVQoMCkKKworI2RlZmluZSBEU0lfVklEX1BLVF9DRkcJCQkweDIwCisjZGVmaW5lIE5VTExfUEtU X1NJWkUoYikJCSgoKGIpICYgMHgzZikgPDwgMjEpCisjZGVmaW5lIE5VTV9DSFVOS1MobikJCQko KChuKSAmIDB4M2YpIDw8IDExKQorI2RlZmluZSBWSURfUEtUX1NJWkUocCkJCQkoKChwKSAmIDB4 N2ZmKSA8PCAwKQorI2RlZmluZSBWSURfUEtUX01BWF9TSVpFCQkweDdmZgorCisjZGVmaW5lIERT SV9DTURfTU9ERV9DRkcJCTB4MjQKKyNkZWZpbmUgRU5fVEVBUl9GWAkJCUJJVCgxNCkKKyNkZWZp bmUgRU5fQUNLX1JRU1QJCQlCSVQoMTMpCisjZGVmaW5lIERDU19MV19UWF9MUAkJCUJJVCgxMikK KyNkZWZpbmUgR0VOX0xXX1RYX0xQCQkJQklUKDExKQorI2RlZmluZSBNQVhfUkRfUEtUX1NJWkVf TFAJCUJJVCgxMCkKKyNkZWZpbmUgRENTX1NXXzJQX1RYX0xQCQkJQklUKDkpCisjZGVmaW5lIERD U19TV18xUF9UWF9MUAkJCUJJVCg4KQorI2RlZmluZSBEQ1NfU1dfMFBfVFhfTFAJCQlCSVQoNykK KyNkZWZpbmUgR0VOX1NSXzJQX1RYX0xQCQkJQklUKDYpCisjZGVmaW5lIEdFTl9TUl8xUF9UWF9M UAkJCUJJVCg1KQorI2RlZmluZSBHRU5fU1JfMFBfVFhfTFAJCQlCSVQoNCkKKyNkZWZpbmUgR0VO X1NXXzJQX1RYX0xQCQkJQklUKDMpCisjZGVmaW5lIEdFTl9TV18xUF9UWF9MUAkJCUJJVCgyKQor I2RlZmluZSBHRU5fU1dfMFBfVFhfTFAJCQlCSVQoMSkKKyNkZWZpbmUgRU5BQkxFX0NNRF9NT0RF CQkJQklUKDApCisjZGVmaW5lIERJU0FCTEVfQ01EX01PREUJCTAKKyNkZWZpbmUgRU5BQkxFX0NN RF9NT0RFX01BU0sJCUJJVCgwKQorI2RlZmluZSBDTURfTU9ERV9BTExfTFAJCQkoRENTX0xXX1RY X0xQIHwgXAorCQkJCQkgR0VOX0xXX1RYX0xQIHwgXAorCQkJCQkgTUFYX1JEX1BLVF9TSVpFX0xQ IHwgXAorCQkJCQkgRENTX1NXXzJQX1RYX0xQIHwgXAorCQkJCQkgRENTX1NXXzFQX1RYX0xQIHwg XAorCQkJCQkgRENTX1NXXzBQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NSXzJQX1RYX0xQIHwgXAor CQkJCQkgR0VOX1NSXzFQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NSXzBQX1RYX0xQIHwgXAorCQkJ CQkgR0VOX1NXXzJQX1RYX0xQIHwgXAorCQkJCQkgR0VOX1NXXzFQX1RYX0xQIHwgXAorCQkJCQkg R0VOX1NXXzBQX1RYX0xQKQorCisjZGVmaW5lIERTSV9UTVJfTElORV9DRkcJCTB4MjgKKyNkZWZp bmUgSExJTkVfVElNRShsYmNjKQkJKCgobGJjYykgJiAweDNmZmYpIDw8IDE4KQorI2RlZmluZSBI QlBfVElNRShsYmNjKQkJCSgoKGxiY2MpICYgMHgxZmYpIDw8IDkpCisjZGVmaW5lIEhTQV9USU1F KGxiY2MpCQkJKCgobGJjYykgJiAweDFmZikgPDwgMCkKKworI2RlZmluZSBEU0lfVlRJTUlOR19D RkcJCQkweDJjCisjZGVmaW5lIFZfQUNUSVZFX0xJTkVTKGxpbmUpCQkoKChsaW5lKSAmIDB4N2Zm KSA8PCAxNikKKyNkZWZpbmUgVkZQX0xJTkVTKGxpbmUpCQkJKCgobGluZSkgJiAweDNmKSA8PCAx MCkKKyNkZWZpbmUgVkJQX0xJTkVTKGxpbmUpCQkJKCgobGluZSkgJiAweDNmKSA8PCA0KQorI2Rl ZmluZSBWU0FfTElORVMobGluZSkJCQkoKChsaW5lKSAmIDB4ZikgPDwgMCkKKworI2RlZmluZSBE U0lfUEhZX1RNUl9DRkcJCQkweDMwCisjZGVmaW5lIFBIWV9IUzJMUF9USU1FKGxiY2MpCQkoKChs YmNjKSAmIDB4ZmYpIDw8IDIwKQorI2RlZmluZSBQSFlfTFAySFNfVElNRShsYmNjKQkJKCgobGJj YykgJiAweGZmKSA8PCAxMikKKyNkZWZpbmUgQlRBX1RJTUUobGJjYykJCQkoKChsYmNjKSAmIDB4 ZmZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9HRU5fSERSCQkJMHgzNAorI2RlZmluZSBHRU5fSERB VEEoZGF0YSkJCQkoKChkYXRhKSAmIDB4ZmZmZikgPDwgOCkKKyNkZWZpbmUgR0VOX0hEQVRBX01B U0sJCQkoMHhmZmZmIDw8IDgpCisjZGVmaW5lIEdFTl9IVFlQRSh0eXBlKQkJCSgoKHR5cGUpICYg MHhmZikgPDwgMCkKKyNkZWZpbmUgR0VOX0hUWVBFX01BU0sJCQkweGZmCisKKyNkZWZpbmUgRFNJ X0dFTl9QTERfREFUQQkJMHgzOAorCisjZGVmaW5lIERTSV9DTURfUEtUX1NUQVRVUwkJMHgzYwor I2RlZmluZSBHRU5fQ01EX0VNUFRZCQkJQklUKDApCisjZGVmaW5lIEdFTl9DTURfRlVMTAkJCUJJ VCgxKQorI2RlZmluZSBHRU5fUExEX1dfRU1QVFkJCQlCSVQoMikKKyNkZWZpbmUgR0VOX1BMRF9X X0ZVTEwJCQlCSVQoMykKKyNkZWZpbmUgR0VOX1BMRF9SX0VNUFRZCQkJQklUKDQpCisjZGVmaW5l IEdFTl9SRF9DTURfQlVTWQkJCUJJVCg2KQorCisjZGVmaW5lIERTSV9UT19DTlRfQ0ZHCQkJMHg0 MAorI2RlZmluZSBEU0lfRVJST1JfU1QwCQkJMHg0NAorI2RlZmluZSBEU0lfRVJST1JfU1QxCQkJ MHg0OAorI2RlZmluZSBEU0lfRVJST1JfTVNLMAkJCTB4NGMKKyNkZWZpbmUgRFNJX0VSUk9SX01T SzEJCQkweDUwCisKKyNkZWZpbmUgRFNJX1BIWV9SU1RaCQkJMHg1NAorI2RlZmluZSBQSFlfRElT QUJMRUNMSwkJCTAKKyNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQorI2RlZmluZSBQSFlf UlNUWgkJCTAKKyNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2RlZmluZSBQSFlfU0hVVERP V05aCQkJMAorI2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKKworI2RlZmluZSBEU0lf UEhZX0lGX0NGRwkJCTB4NTgKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgz KSA8PCAwKQorI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4 M2ZmKSA8PCAyKQorCisjZGVmaW5lIERTSV9QSFlfSUZfQ1RSTAkJCTB4NWMKKyNkZWZpbmUgUEhZ X0lGX0NUUkxfUkVTRVQJCTB4MAorI2RlZmluZSBUWF9SRVFfQ0xLX0hTCQkJQklUKDApCisKKyNk ZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweDYwCisjZGVmaW5lIExPQ0sJCQkJQklUKDApCisjZGVm aW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NU UkwwCQkweDY0CisjZGVmaW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCisjZGVmaW5lIFBIWV9VTlRF U1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCisjZGVmaW5lIFBIWV9VTlRF U1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4NjgKKyNkZWZpbmUgUEhZ X1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAorI2RlZmluZSBQSFlf VEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFBIWV9URVNURElOKG4p CQkJKCgobikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIFBIWV9TVEFUVVNfVElNRU9VVAkJMTAK KyNkZWZpbmUgQ01EX1BLVF9TVEFUVVNfVElNRU9VVAkJMjAKKworc3RydWN0IGR3X21pcGlfZHNp IHsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBkc2lfaG9zdDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciBjb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2U7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJc3RydWN0IGRldmlj ZSAqZGV2OworCisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJc3RydWN0IGNsayAqcGxscmVmX2Ns azsKKwlzdHJ1Y3QgY2xrICpjZmdfY2xrOworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwl1bnNpZ25l ZCBpbnQgbGFuZV9tYnBzOyAvKiBwZXIgbGFuZSAqLworCXUzMiBjaGFubmVsOworCXUzMiBsYW5l czsKKwl1MzIgZm9ybWF0OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJY29u c3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGE7CisKKwlib29sIGVuYWJsZWQ7 Cit9OworCitlbnVtIHsKKwlTVEFUVVNfVE9fQ0xFQVIsCisJU1RBVFVTX1RPX1NFVCwKK307CisK K2VudW0gZHdfbWlwaV9kc2lfbW9kZSB7CisJRFdfTUlQSV9EU0lfQ01EX01PREUsCisJRFdfTUlQ SV9EU0lfVklEX01PREUsCit9OworCitzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgeworCXVu c2lnbmVkIGludCBtYXhfbWJwczsKKwl1OCB0ZXN0ZGluOworfTsKKworLyogVGhlIHRhYmxlIGlz IGJhc2VkIG9uIDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgZHB0ZGluX21hcFtdID0geworCXsxNjAsIDB4 MDR9LCB7MTgwLCAweDI0fSwgezIwMCwgMHg0NH0sIHsyMTAsIDB4MDZ9LAorCXsyNDAsIDB4MjZ9 LCB7MjUwLCAweDQ2fSwgezI3MCwgMHgwOH0sIHszMDAsIDB4Mjh9LAorCXszMzAsIDB4NDh9LCB7 MzYwLCAweDJhfSwgezQwMCwgMHg0YX0sIHs0NTAsIDB4MGN9LAorCXs1MDAsIDB4MmN9LCB7NTUw LCAweDBlfSwgezYwMCwgMHgyZX0sIHs2NTAsIDB4MTB9LAorCXs3MDAsIDB4MzB9LCB7NzUwLCAw eDEyfSwgezgwMCwgMHgzMn0sIHs4NTAsIDB4MTR9LAorCXs5MDAsIDB4MzR9LCB7OTUwLCAweDU0 fSwgezEwMDAsIDB4NzR9Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAq aG9zdF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihob3N0LCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGRzaV9ob3N0KTsKK30KKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmNvbl90b19kc2koc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbiwgc3RydWN0IGR3X21pcGlfZHNp LCBjb25uZWN0b3IpOworfQorCitpbnQgZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJfcGl4ZWxfZm9y bWF0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSA9IGVuY29kZXItPmJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXR1cm4gZHNpLT5m b3JtYXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV9nZXRfZW5jb2Rlcl9waXhl bF9mb3JtYXQpOworCitzdGF0aWMgaW50IG1heF9tYnBzX3RvX3Rlc3RkaW4odW5zaWduZWQgaW50 IG1heF9tYnBzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB0 ZGluX21hcCk7IGkrKykKKwkJaWYgKGRwdGRpbl9tYXBbaV0ubWF4X21icHMgPT0gbWF4X21icHMp CisJCQlyZXR1cm4gZHB0ZGluX21hcFtpXS50ZXN0ZGluOworCisJcmV0dXJuIC1FSU5WQUw7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ks IHUzMiByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgZHNpLT5iYXNlICsgcmVnKTsKK30K Kworc3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUz MiByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBkc2lfbW9kaWZ5KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLAor CQkJICAgICAgdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJdTMyIHY7CisKKwl2ID0gcmVhZGwoZHNp LT5iYXNlICsgcmVnKTsKKwl2ICY9IH5tYXNrOworCXYgfD0gdmFsOworCXdyaXRlbCh2LCBkc2kt PmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N0YXR1cyhzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHN0YXR1cywKKwkJCXVuc2lnbmVkIGludCB0aW1lb3V0 LCBib29sIHRvX3NldCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlib29sIG91dDsKKwl1 MzIgdmFsOworCisJZXhwaXJlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7 CisJZm9yICg7OykgeworCQl2YWwgPSBkc2lfcmVhZChkc2ksIHJlZyk7CisJCW91dCA9IHRvX3Nl dCA/ICgodmFsICYgc3RhdHVzKSA9PSBzdGF0dXMpIDogISh2YWwgJiBzdGF0dXMpOworCQlpZiAo b3V0KQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZXhwaXJlKSkKKwkJ CXJldHVybiAtRVRJTUVET1VUOworCisJCWNwdV9yZWxheCgpOworCX0KKworCXJldHVybiAwOwor fQorCisvKgorICogVGhlIGNvbnRyb2xsZXIgc2hvdWxkIGdlbmVyYXRlIDIgZnJhbWVzIGJlZm9y ZQorICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFsLgorICovCitzdGF0aWMgdm9pZCBkd19taXBp X2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXVu c2lnbmVkIGxvbmcgZXhwaXJlOworCWludCByZWZyZXNoLCB0d29fZnJhbWVzOworCisJcmVmcmVz aCA9IGRybV9tb2RlX3ZyZWZyZXNoKGRzaS0+bW9kZSk7CisJdHdvX2ZyYW1lcyA9IERJVl9ST1VO RF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKKworCWV4cGlyZSA9IGppZmZpZXMgKyBt c2Vjc190b19qaWZmaWVzKHR3b19mcmFtZXMpOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVz LCBleHBpcmUpKQorCQljcHVfcmVsYXgoKTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9j b25maWdfdGVzdGRpbihzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlpbnQgcmV0LCB0ZXN0 ZGluOworCisJdGVzdGRpbiA9IG1heF9tYnBzX3RvX3Rlc3RkaW4oZHNpLT5sYW5lX21icHMpOwor CWlmICh0ZXN0ZGluIDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJImZhaWxlZCB0byBn ZXQgdGVzdGRpbiBmb3IgJWRtYnBzIGxhbmUgY2xvY2tcbiIsCisJCQlkc2ktPmxhbmVfbWJwcyk7 CisJCXJldHVybiB0ZXN0ZGluOworCX0KKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ1RS TCwgUEhZX0lGX0NUUkxfUkVTRVQpOworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VS VVApOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsg fCBQSFlfVU5URVNUQ0xSKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZ X1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4oMHg0NCkpOwor CWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRF U1RDTFIpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xL IHwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBI WV9VTlRFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdGRp bikpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBI WV9VTlRFU1RDTFIpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5U RVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCAg ICAgIFBIWV9FTkFCTEVDTEsgfCBQSFlfVU5SU1RaIHwKKwkJCQkJICBQSFlfVU5TSFVURE9XTlop OworCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERTSV9QSFlfU1RBVFVTLCBMT0NLLAorCQkJICAg UEhZX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9fU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdhaXQgZm9yIHBoeSBsb2NrIHN0YXRlXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX1BIWV9TVEFU VVMsIFNUT1BfU1RBVEVfQ0xLX0xBTkUsCisJCQkgICBQSFlfU1RBVFVTX1RJTUVPVVQsIFNUQVRV U19UT19TRVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsCisJCQkiZmFp bGVkIHRvIHdhaXQgZm9yIHBoeSBjbGsgbGFuZSBzdG9wIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dldF9s YW5lX2JwcyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpm aW5hbF9tYnBzKQoreworCWludCBicHAsIGk7CisJdW5zaWduZWQgaW50IHRhcmdldF9tYnBzLCBt cGNsazsKKwl1bnNpZ25lZCBsb25nIHBsbHJlZjsKKworCWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zv cm1hdF90b19icHAoZHNpLT5mb3JtYXQpOworCWlmIChicHAgPCAwKSB7CisJCWRldl9lcnIoZHNp LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGJwcCBmb3IgcGl4ZWwgZm9ybWF0ICVkXG4iLAorCQkJZHNp LT5mb3JtYXQpOworCQlyZXR1cm4gYnBwOworCX0KKworCXBsbHJlZiA9IGNsa19nZXRfcmF0ZShk c2ktPnBsbHJlZl9jbGspOworCWlmIChwbGxyZWYgIT0gMjcwMDAwMDApCisJCWRldl93YXJuKGRz aS0+ZGV2LCAiZXhwZWN0IDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9ja1xuIik7CisKKwlt cGNsayA9IERJVl9ST1VORF9VUChkc2ktPm1vZGUtPmNsb2NrLCBNU0VDX1BFUl9TRUMpOworCWlm IChtcGNsaykgeworCQkvKiB0YWtlIDEvMC43IGJsYW5raW5nIG92ZXJoZWFkIGludG8gY29uc2lk ZXJhdGlvbiAqLworCQl0YXJnZXRfbWJwcyA9IChtcGNsayAqIChicHAgLyBkc2ktPmxhbmVzKSAq IDEwKSAvIDc7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhkc2ktPmRldiwgInVzZSBkZWZhdWx0IDFH YnBzIERQSFkgcGxsIGNsb2NrXG4iKTsKKwkJdGFyZ2V0X21icHMgPSAxMDAwOworCX0KKworCWRl dl9kYmcoZHNpLT5kZXYsICJ0YXJnZXQgRFBIWSBwbGwgY2xvY2sgZnJlcXVlbmN5IGlzICV1TWJw c1xuIiwKKwkJdGFyZ2V0X21icHMpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB0 ZGluX21hcCk7IGkrKykgeworCQlpZiAodGFyZ2V0X21icHMgPCBkcHRkaW5fbWFwW2ldLm1heF9t YnBzKSB7CisJCQkqZmluYWxfbWJwcyA9IGRwdGRpbl9tYXBbaV0ubWF4X21icHM7CisJCQlkZXZf ZGJnKGRzaS0+ZGV2LAorCQkJCSJyZWFsIERQSFkgcGxsIGNsb2NrIGZyZXF1ZW5jeSBpcyAldU1i cHNcbiIsCisJCQkJKmZpbmFsX21icHMpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlkZXZf ZXJyKGRzaS0+ZGV2LCAiRFBIWSBjbG9jayBmcmVxdWVuY3kgJXVNYnBzIGlzIG91dCBvZiByYW5n ZVxuIiwKKwkJCQkJCXRhcmdldF9tYnBzKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0 aWMgaW50IGR3X21pcGlfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAorCQkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJaWYgKGRldmljZS0+bGFuZXMg PiBkc2ktPnBkYXRhLT5tYXhfZGF0YV9sYW5lcykgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAidGhl IG51bWJlciBvZiBkYXRhIGxhbmVzKCVkKSBpcyB0b28gbWFueVxuIiwKKwkJCQlkZXZpY2UtPmxh bmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCEoZGV2aWNlLT5tb2RlX2ZsYWdz ICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgfHwKKwkgICAgIShkZXZpY2UtPm1vZGVfZmxh Z3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKSB7CisJCWRldl9lcnIoZHNpLT5k ZXYsICJkZXZpY2UgbW9kZSBpcyB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWlmIChkZXZpY2UtPmZvcm1hdCAhPSBNSVBJX0RTSV9GTVRfUkdCODg4ICYmCisJICAg IGRldmljZS0+Zm9ybWF0ICE9IE1JUElfRFNJX0ZNVF9SR0I1NjUpIHsKKwkJZGV2X2Vycihkc2kt PmRldiwgImRldmljZSBwaXhlbCBmb3JtYXQgaXMgdW5zdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmNoYW5u ZWwgPSBkZXZpY2UtPmNoYW5uZWw7CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKKwlk c2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zfbm9kZSk7CisJZHJt X3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3IpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNp X2hvc3QgKmhvc3QsCisJCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQorewor CXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisKKwlkcm1fcGFu ZWxfZGV0YWNoKGRzaS0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdf bWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiB2 YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERTSV9DTURfUEtU X1NUQVRVUywgR0VOX0NNRF9GVUxMLAorCQkJICAgQ01EX1BLVF9TVEFUVVNfVElNRU9VVCwgU1RB VFVTX1RPX0NMRUFSKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFp bGVkIHRvIGdldCBhdmFpbGFibGUgY29tbWFuZCBGSUZPXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgdmFsKTsKKworCXJldCA9IGNoZWNrX3N0 YXR1cyhkc2ksIERTSV9DTURfUEtUX1NUQVRVUywKKwkJCSAgIEdFTl9DTURfRU1QVFkgfCBHRU5f UExEX1dfRU1QVFksCisJCQkgICBDTURfUEtUX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9fU0VU KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRl IGNvbW1hbmQgRklGT1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJ Y29uc3QgdTE2ICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKCp0 eF9idWYpIHwgR0VOX0hUWVBFKG1zZy0+dHlwZSk7CisKKwlpZiAobXNnLT50eF9sZW4gPiAyKSB7 CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0b28gbG9uZyB0eCBidWYgbGVuZ3RoICVkIGZvciBzaG9y dCB3cml0ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ cmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsKK30KKworc3Rh dGljIGludCBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJY29uc3Qg dTMyICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsKKwlpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9k YXRhX2J5dGVzID0gc2l6ZW9mKCp0eF9idWYpLCByZXQ7CisJdTMyIHZhbCA9IEdFTl9IREFUQSht c2ctPnR4X2xlbikgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsKKwl1MzIgcmVtYWluZGVyID0gMDsK KworCWlmIChtc2ctPnR4X2xlbiA8IDMpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIndyb25nIHR4 IGJ1ZiBsZW5ndGggJWQgZm9yIGxvbmcgd3JpdGVcbiIsCisJCQltc2ctPnR4X2xlbik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXdoaWxlIChESVZfUk9VTkRfVVAobGVuLCBwbGRfZGF0YV9i eXRlcykpIHsKKwkJaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7CisJCQltZW1jcHkoJnJlbWFp bmRlciwgdHhfYnVmLCBsZW4pOworCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwg cmVtYWluZGVyKTsKKwkJCWxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlkc2lfd3JpdGUoZHNpLCBE U0lfR0VOX1BMRF9EQVRBLCAqdHhfYnVmKTsKKwkJCXR4X2J1ZisrOworCQkJbGVuIC09IHBsZF9k YXRhX2J5dGVzOworCQl9CisJCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERTSV9DTURfUEtUX1NU QVRVUywgR0VOX1BMRF9XX0ZVTEwsCisJCQkJICAgQ01EX1BLVF9TVEFUVVNfVElNRU9VVCwgU1RB VFVTX1RPX0NMRUFSKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZHNpLT5kZXYsCisJ CQkJImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIHdyaXRlIHBheWxvYWQgRklGT1xuIik7CisJCQly ZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dy aXRlKGRzaSwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgZHdfbWlwaV9kc2lfaG9zdF90cmFu c2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkJIGNvbnN0IHN0cnVjdCBtaXBp X2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNp KGhvc3QpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1zZy0+dHlwZSkgeworCWNhc2UgTUlQSV9E U0lfRENTX1NIT1JUX1dSSVRFOgorCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BBUkFN OgorCWNhc2UgTUlQSV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9TSVpFOgorCQlyZXQg PSBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOworCQlicmVhazsKKwljYXNl IE1JUElfRFNJX0RDU19MT05HX1dSSVRFOgorCQlyZXQgPSBkd19taXBpX2RzaV9kY3NfbG9uZ193 cml0ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZHNpLT5kZXYs ICJ1bnN1cHBvcnRlZCBtZXNzYWdlIHR5cGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMg ZHdfbWlwaV9kc2lfaG9zdF9vcHMgPSB7CisJLmF0dGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfYXR0 YWNoLAorCS5kZXRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNmZXIgPSBk d19taXBpX2RzaV9ob3N0X3RyYW5zZmVyLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMKK2R3X21pcGlfZHNpX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBib29sIGZvcmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK K30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVy KGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkd19taXBpX2RzaV9jb25uZWN0b3JfZnVu Y3MgPSB7CisJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVz ID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSBk d19taXBpX2RzaV9kZXRlY3QsCisJLmRlc3Ryb3kgPSBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9y X2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9k ZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0 X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgZHdf bWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGR3X21p cGlfZHNpICpkc2kgPSBjb25fdG9fZHNpKGNvbm5lY3Rvcik7CisKKwllbnVtIGRybV9tb2RlX3N0 YXR1cyBtb2RlX3N0YXR1cyA9IE1PREVfT0s7CisKKwlpZiAoZHNpLT5wZGF0YS0+bW9kZV92YWxp ZCkKKwkJbW9kZV9zdGF0dXMgPSBkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKGNvbm5lY3RvciwgbW9k ZSk7CisKKwlyZXR1cm4gbW9kZV9zdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29k ZXIgKmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCQkJCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBjb25f dG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHNpLT5lbmNvZGVyOworfQorCitzdGF0aWMg c3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9nZXRf bW9kZXMsCisJLm1vZGVfdmFsaWQgPSBkd19taXBpX2RzaV9tb2RlX3ZhbGlkLAorCS5iZXN0X2Vu Y29kZXIgPSBkd19taXBpX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IFZJRF9NT0RFX1RZUEVfQlVSU1RfU1lOQ19QVUxT RVMgfCBFTkFCTEVfTE9XX1BPV0VSOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9NT0RFX0NG RywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfc2V0X21vZGUoc3RydWN0IGR3 X21pcGlfZHNpICpkc2ksCisJCQkJIGVudW0gZHdfbWlwaV9kc2lfbW9kZSBtb2RlKQoreworCWlm IChtb2RlID09IERXX01JUElfRFNJX0NNRF9NT0RFKSB7CisJCWRzaV93cml0ZShkc2ksIERTSV9Q V1JfVVAsIFJFU0VUKTsKKwkJZHNpX21vZGlmeShkc2ksIERTSV9DTURfTU9ERV9DRkcsCisJCQkg ICBFTkFCTEVfQ01EX01PREVfTUFTSywgRU5BQkxFX0NNRF9NT0RFKTsKKwkJZHNpX21vZGlmeShk c2ksIERTSV9WSURfTU9ERV9DRkcsCisJCQkgICBFTkFCTEVfVklERU9fTU9ERV9NQVNLLCBESVNB QkxFX1ZJREVPX01PREUpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsK Kwl9IGVsc2UgeworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJCWRzaV9t b2RpZnkoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLAorCQkJICAgRU5BQkxFX0NNRF9NT0RFX01BU0ss IERJU0FCTEVfQ01EX01PREUpOworCisJCWR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRz aSk7CisKKwkJZHNpX21vZGlmeShkc2ksIERTSV9WSURfTU9ERV9DRkcsCisJCQkgICBFTkFCTEVf VklERU9fTU9ERV9NQVNLLCBFTkFCTEVfVklERU9fTU9ERSk7CisJCWRzaV93cml0ZShkc2ksIERT SV9QV1JfVVAsIFBPV0VSVVApOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX0lGX0NUUkwsIFRY X1JFUV9DTEtfSFMpOworCX0KK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJsZShz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX0lGX0NU UkwsIFBIWV9JRl9DVFJMX1JFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNF VCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfUlNUWik7Cit9CisKK3N0YXRp YyB2b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7 CisKKwlpZiAoZHNpLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljbGtfcHJlcGFyZV9lbmFibGUo ZHNpLT5jZmdfY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKTsKKwlkd19taXBp X2RzaV9jb25maWdfdGVzdGRpbihkc2kpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdf TUlQSV9EU0lfVklEX01PREUpOworCWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoZHNp KTsKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKKwlk cm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKTsKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ks IERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xr KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5jZmdfY2xrKTsKKworCWRybV9wYW5lbF9l bmFibGUoZHNpLT5wYW5lbCk7CisKKwlkc2ktPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsK Kwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKworCWlmICghZHNpLT5lbmFibGVkKQorCQlyZXR1cm47 CisKKwlkcm1fcGFuZWxfZGlzYWJsZShkc2ktPnBhbmVsKTsKKworCWNsa19wcmVwYXJlX2VuYWJs ZShkc2ktPmNmZ19jbGspOworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGspOworCWR3X21p cGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOworCWRybV9wYW5lbF91 bnByZXBhcmUoZHNpLT5wYW5lbCk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJ X0RTSV9WSURfTU9ERSk7CisKKwkvKgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3Vy ZSB0aGUgcGVyaXBoZXJhbAorCSAqIHdpbGwgYmUgZHJpdmVuIG5vcm1hbGx5IHdoZW4gdGhlIGRp c3BsYXkgaXMKKwkgKiBlbmFibGVkIGFnYWluIGxhdGVyLgorCSAqLworCWV4cGlyZSA9IGppZmZp ZXMgKyBtc2Vjc190b19qaWZmaWVzKDEyMCk7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMs IGV4cGlyZSkpCisJCWNwdV9yZWxheCgpOworCisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBE V19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHdfbWlwaV9kc2lfZGlzYWJsZShkc2kpOworCWNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2kt PmNmZ19jbGspOworCisJZHNpLT5lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGR3 X21pcGlfZHNpX2JyaWRnZV9ub3BlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJLyog ZG8gbm90aGluZyAqLworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9pbml0KHN0cnVjdCBk d19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9ESVNBQkxFQ0xLIHwgUEhZX1JTVFog fCBQSFlfU0hVVERPV05aKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xL X0RJVklEU0lPTigxKSB8CisJCQkJCVRYX0VTQ19DTEtfRElWSURTSU9OKDcpKTsKK30KKworc3Rh dGljIHZvaWQgZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwK KwkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gMDsK KworCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpKQorCQl2YWwgfD0g VlNZTkNfQUNUSVZFX0xPVzsKKwlpZiAoIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhT WU5DKSkKKwkJdmFsIHw9IEhTWU5DX0FDVElWRV9MT1c7CisKKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0 KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl2YWwgfD0gRFBJX0NPTE9SX0NPRElO R18yNEJJVDsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl2YWwgfD0g RFBJX0NPTE9SX0NPRElOR18xOEJJVF8yOworCQl2YWwgfD0gRU4xOF9MT09TRUxZOworCQlicmVh azsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQl2YWwgfD0gRFBJX0NPTE9S X0NPRElOR18xOEJJVF8xOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJ CXZhbCB8PSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzE7CisJCWJyZWFrOworCX0KKworCXZhbCB8 PSBEUElfVklEKGRzaS0+Y2hhbm5lbCk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0NGRywg dmFsKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmln KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QQ0tIRExf Q0ZHLCBFTl9DUkNfUlggfCBFTl9FQ0NfUlggfCBFTl9CVEEpOworfQorCitzdGF0aWMgdm9pZCBk d19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAor CQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJZHNpX3dyaXRlKGRz aSwgRFNJX1ZJRF9QS1RfQ0ZHLCBWSURfUEtUX1NJWkUobW9kZS0+aGRpc3BsYXkpKTsKK30KKwor c3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLCBDTURfTU9E RV9BTExfTFAgfCBFTkFCTEVfQ01EX01PREUpOworfQorCisvKiBHZXQgbGFuZSBieXRlIGNsb2Nr IGN5Y2xlcy4gKi8KK3N0YXRpYyB1NjQgZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkJICAgdTY0IGhjb21wb25lbnQpCit7CisJdTY0 IGZyYWMsIGxiY2M7CisKKwlsYmNjID0gaGNvbXBvbmVudCAqIGRzaS0+bGFuZV9tYnBzICogVVNF Q19QRVJfU0VDIC8gODsKKwlmcmFjID0gZG9fZGl2KGxiY2MsIGRzaS0+bW9kZS0+Y2xvY2sgKiBN U0VDX1BFUl9TRUMpOworCWlmIChmcmFjKQorCQlsYmNjKys7CisKKwlyZXR1cm4gbGJjYzsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJdTMyIHZhbCA9IDAsIGh0b3RhbCwgaHNhLCBoYnAsIGxiY2M7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2ktPm1vZGU7CisKKwlodG90YWwgPSBt b2RlLT5odG90YWw7CisJaHNhID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7 CisJaGJwID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCisJbGJjYyA9IGR3X21p cGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBodG90YWwpOworCXZhbCB8PSBITElORV9U SU1FKGxiY2MpOworCisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNp LCBoc2EpOworCXZhbCB8PSBIU0FfVElNRShsYmNjKTsKKworCWxiY2MgPSBkd19taXBpX2RzaV9n ZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgaGJwKTsKKwl2YWwgfD0gSEJQX1RJTUUobGJjYyk7CisK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfVE1SX0xJTkVfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV92ZXJ0aWNhbF90aW1pbmdfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpKQoreworCXUzMiB2YWwsIHZhY3RpdmUsIHZzYSwgdmZwLCB2YnA7CisJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUgPSBkc2ktPm1vZGU7CisKKwl2YWN0aXZlID0gbW9kZS0+dmRpc3Bs YXk7CisJdnNhID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmZwID0g bW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2YnAgPSBtb2RlLT52dG90YWwg LSBtb2RlLT52c3luY19lbmQ7CisKKwl2YWwgPSBWX0FDVElWRV9MSU5FUyh2YWN0aXZlKSB8IFZT QV9MSU5FUyh2c2EpIHwKKwkgICAgICBWRlBfTElORVModmZwKSB8IFZCUF9MSU5FUyh2YnApOwor CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZUSU1JTkdfQ0ZHLCB2YWwpOworfQorCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cit7CisJdTMyIHZhbDsKKworCXZhbCA9IFBIWV9IUzJMUF9USU1FKDB4NDApIHwgUEhZX0xQMkhT X1RJTUUoMHg0MCkgfAorCSAgICAgIEJUQV9USU1FKDB4ZDAwKTsKKworCWRzaV93cml0ZShkc2ks IERTSV9QSFlfVE1SX0NGRywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBo eV9pbnRlcmZhY2VfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfSUZfQ0ZHLCBQSFlfU1RPUF9XQUlUX1RJTUUoMHgyMCkgfAorCQkJCQkJ Tl9MQU5FUyhkc2ktPmxhbmVzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NsZWFy X2VycihzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfcmVhZChkc2ksIERTSV9FUlJP Ul9TVDApOworCWRzaV9yZWFkKGRzaSwgRFNJX0VSUk9SX1NUMSk7CisJZHNpX3dyaXRlKGRzaSwg RFNJX0VSUk9SX01TSzAsIDApOworCWRzaV93cml0ZShkc2ksIERTSV9FUlJPUl9NU0sxLCAwKTsK K30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCWRz aS0+bW9kZSA9IG1vZGU7CisKKwlyZXQgPSBkd19taXBpX2RzaV9nZXRfbGFuZV9icHMoZHNpLCAm ZHNpLT5sYW5lX21icHMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisKKwljbGtfcHJlcGFy ZV9lbmFibGUoZHNpLT5jZmdfY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKTsK Kwlkd19taXBpX2RzaV9pbml0KGRzaSk7CisJZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhkc2ksIG1v ZGUpOworCWR3X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhkc2kpOworCWR3X21pcGlf ZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlkZW9fcGFja2V0X2Nv bmZpZyhkc2ksIG1vZGUpOworCWR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoZHNpKTsK Kwlkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX3ZlcnRp Y2FsX3RpbWluZ19jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWco ZHNpKTsKKwlkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoZHNpKTsKKwlkd19taXBp X2RzaV9jbGVhcl9lcnIoZHNpKTsKKwlkd19taXBpX2RzaV9jb25maWdfdGVzdGRpbihkc2kpOwor CWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoZHNpKTsKKwlkcm1fcGFuZWxfcHJlcGFy ZShkc2ktPnBhbmVsKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xrKTsKKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoZHNpLT5jZmdfY2xrKTsKK30KKworc3RhdGljIGJvb2wgZHdfbWlw aV9kc2lfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkJ Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg c3RydWN0IGRybV9icmlkZ2VfZnVuY3MgZHdfbWlwaV9kc2lfYnJpZGdlX2Z1bmNzID0geworCS5l bmFibGUgPSBkd19taXBpX2RzaV9icmlkZ2VfZW5hYmxlLAorCS5kaXNhYmxlID0gZHdfbWlwaV9k c2lfYnJpZGdlX2Rpc2FibGUsCisJLnByZV9lbmFibGUgPSBkd19taXBpX2RzaV9icmlkZ2Vfbm9w ZSwKKwkucG9zdF9kaXNhYmxlID0gZHdfbWlwaV9kc2lfYnJpZGdlX25vcGUsCisJLm1vZGVfc2V0 ID0gZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfc2V0LAorCS5tb2RlX2ZpeHVwID0gZHdfbWlwaV9k c2lfYnJpZGdlX21vZGVfZml4dXAsCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlZ2lz dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQorewor CXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IGRzaS0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlOworCWludCByZXQ7CisKKwlicmlkZ2UgPSBkZXZtX2t6YWxsb2MoZHJt LT5kZXYsIHNpemVvZigqYnJpZGdlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFicmlkZ2UpCisJCXJl dHVybiAtRU5PTUVNOworCisJZHNpLT5icmlkZ2UgPSBicmlkZ2U7CisJYnJpZGdlLT5kcml2ZXJf cHJpdmF0ZSA9IGRzaTsKKworCWJyaWRnZS0+ZnVuY3MgPSAmZHdfbWlwaV9kc2lfYnJpZGdlX2Z1 bmNzOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGRybSwgYnJpZGdlKTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoZHJtLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBicmlkZ2Ugd2l0aCBk cm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWVuY29kZXItPmJyaWRnZSA9IGJyaWRnZTsK KworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmZHNpLT5jb25uZWN0b3IsCisJCQkmZHdfbWlw aV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwg JmRzaS0+Y29ubmVjdG9yLCAmZHdfbWlwaV9kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJN X01PREVfQ09OTkVDVE9SX0RTSSk7CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29k ZXIoJmRzaS0+Y29ubmVjdG9yLCBkc2ktPmVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2lu dCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLCB2b2lkICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3Ry dWN0IHJlc291cmNlICpyZXMsCisJCSAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRf ZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0 IGR3X21pcGlfZHNpICpkc2k7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJZHNpID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlkc2ktPnBkYXRhID0gcGRhdGE7CisJZHNpLT5kZXYgPSBkZXY7CisJ ZHNpLT5kc2lfaG9zdC5vcHMgPSAmZHdfbWlwaV9kc2lfaG9zdF9vcHM7CisJZHNpLT5kc2lfaG9z dC5kZXYgPSBkZXY7CisJZHNpLT5lbmNvZGVyID0gZW5jb2RlcjsKKworCWRzaS0+YmFzZSA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihkc2ktPmJhc2UpKQor CQlyZXR1cm4gUFRSX0VSUihkc2ktPmJhc2UpOworCisJZHNpLT5wbGxyZWZfY2xrID0gZGV2bV9j bGtfZ2V0KGRldiwgInJlZiIpOworCWlmIChJU19FUlIoZHNpLT5wbGxyZWZfY2xrKSkgeworCQly ZXQgPSBQVFJfRVJSKGRzaS0+cGxscmVmX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRv IGdldCBwbGwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7CisKKwlkc2ktPmNmZ19jbGsg PSBkZXZtX2Nsa19nZXQoZGV2LCAiY2ZnIik7CisJaWYgKElTX0VSUihkc2ktPmNmZ19jbGspKSB7 CisJCXJldCA9IFBUUl9FUlIoZHNpLT5jZmdfY2xrKTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUg dG8gZ2V0IGNvbmZpZ3VyYXRpb24gY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbGxy ZWY7CisJfQorCisJZHNpLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAo SVNfRVJSKGRzaS0+Y2ZnX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmNmZ19jbGspOwor CQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgY29uZmlndXJhdGlvbiBjbG9jazogJWRcbiIs IHJldCk7CisJCWdvdG8gZXJyX3BsbHJlZjsKKwl9CisKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNp LT5jZmdfY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKTsKKwl2YWwgPSBkc2lf cmVhZChkc2ksIERTSV9WRVJTSU9OKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xr KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5jZmdfY2xrKTsKKworCWRldl9pbmZvKGRl diwgInZlcnNpb24gbnVtYmVyIGlzIDB4JTA4eFxuIiwgdmFsKTsKKworCXJldCA9IGR3X21pcGlf ZHNpX3JlZ2lzdGVyKGRybSwgZHNpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wbGxyZWY7CisK KwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOworCisJcmV0dXJuIG1pcGlfZHNpX2hvc3RfcmVn aXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCitlcnJfcGxscmVmOgorCWNsa19kaXNhYmxlX3VucHJl cGFyZShkc2ktPnBsbHJlZl9jbGspOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChkd19taXBpX2RzaV9iaW5kKTsKKwordm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IGR3X21pcGlfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1pcGlfZHNpX2hv c3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRz aS0+cGxscmVmX2Nsayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV91bmJpbmQp OworCitNT0RVTEVfREVTQ1JJUFRJT04oIlN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9z dCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTGl1IFlpbmcgPFlpbmcuTGl1 QGZyZWVzY2FsZS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaCBiL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19t aXBpX2RzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjMwYWEKLS0t IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaApAQCAtMCww ICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgRnJlZXNjYWxlIFNlbWlj b25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNp Zm5kZWYgX19EV19NSVBJX0RTSV9fCisjZGVmaW5lIF9fRFdfTUlQSV9EU0lfXworCisjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KKworc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSB7CisJdW5zaWdu ZWQgaW50IG1heF9kYXRhX2xhbmVzOworCWVudW0gZHJtX21vZGVfc3RhdHVzICgqbW9kZV92YWxp ZCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpOworfTsKKworaW50IGR3X21pcGlfZHNpX2dldF9lbmNvZGVyX3Bp eGVsX2Zvcm1hdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCitpbnQgZHdfbWlwaV9k c2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAq ZGF0YSwKKwkJICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCByZXNvdXJj ZSAqcmVzLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRh KTsKK3ZvaWQgZHdfbWlwaV9kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKTsKKyNlbmRpZgkvKiBfX0RXX01JUElfRFNJX18gKi8K LS0gCjIuMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=