From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v3 8/9] drm/vc4: Add support for the transposer block Date: Mon, 2 Jul 2018 14:20:19 +0200 Message-ID: <20180702122020.5921-9-boris.brezillon@bootlin.com> References: <20180702122020.5921-1-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A26E6E428 for ; Mon, 2 Jul 2018 12:20:51 +0000 (UTC) In-Reply-To: <20180702122020.5921-1-boris.brezillon@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org Cc: Liviu Dudau , Dan Carpenter , Boris Brezillon List-Id: dri-devel@lists.freedesktop.org RnJvbTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29t PgoKVGhlIHRyYW5zcG9zZXIgYmxvY2sgaXMgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIG1lbS10by1t ZW0gY29tcG9zaXRpb24sCndoaWNoIGlzIGV4cG9zZWQgYXMgYSBkcm1fd3JpdGViYWNrIGNvbm5l Y3RvciBpbiBEUk0uCgpBZGQgYSBkcml2ZXIgdG8gc3VwcG9ydCB0aGlzIGZlYXR1cmUuCgpTaWdu ZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9u cy5jb20+Ci0tLQpDaGFuZ2VzIGluIHYzOgotIEFkZCBFcmljJ3MgUi1iCi0gRml4IHRoZSBjb2Rl IHVwZGF0aW5nIC0+bm9fYmxhbmsgc28gdGhhdCBpdCBkb2VzIG5vdCByZXNldCBpdCB0bwogIGZh bHNlIHdoZW4gdGhlIENSVEMgaXMgYmVpbmcgZGlzYWJsZWQKLSBVc2UgYSB0YWJsZSBvZiB0eHAg Zm9ybWF0cyBpbnN0ZWFkIG9mIGhhdmluZyBhIGJpZyBzd2l0Y2gtY2FzZSBibG9jawotIEZpeCB0 eXBvcyBpbiBzb21lIGNvbW1lbnRzCi0gVW5jb25kaXRpb25hbGx5IHVwZGF0ZSB0aGUgRFNQMyBt dXggdmFsCi0gTWFrZSBzdXJlIHdlIGRvbid0IGhhbmcgdGhlIHN5c3RlbSB3aGVuIFRYUF9CVVNZ IGlzIG5vdCBjbGVhcmVkCgpDaGFuZ2VzIGluIHYyOgotIFJlYmFzZWQgb24gdG9wIG9mIGRybS1t aXNjLW5leHQKLS0tCiAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2JyY20sYmNtLXZj NC50eHQgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMgICAgICAg ICAgICAgICAgICAgICB8IDEzOCArKysrLS0KIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVn ZnMuYyAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ry di5jICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0 X2Rydi5oICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKIGRyaXZlcnMvZ3B1L2RybS92YzQv dmM0X3R4cC5jICAgICAgICAgICAgICAgICAgICAgIHwgNDc3ICsrKysrKysrKysrKysrKysrKysr KwogNyBmaWxlcyBjaGFuZ2VkLCA2MDcgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdHhwLmMKCmRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9icmNtLGJjbS12 YzQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJjbSxi Y20tdmM0LnR4dAppbmRleCAyODRlMmIxNGNmYmUuLjI2NjQ5YjRjNGRkOCAxMDA2NDQKLS0tIGEv RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJjbSxiY20tdmM0LnR4 dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9icmNtLGJj bS12YzQudHh0CkBAIC03NCw2ICs3NCwxMiBAQCBSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBEU0k6 CiAJCVRoZSAzIGNsb2NrcyBvdXRwdXQgZnJvbSB0aGUgRFNJIGFuYWxvZyBQSFk6IGRzaVswMV1f Ynl0ZSwKIAkJZHNpWzAxXV9kZHIyLCBhbmQgZHNpWzAxXV9kZHIKIAorUmVxdWlyZWQgcHJvcGVy dGllcyBmb3IgdGhlIFRYUCAod3JpdGViYWNrKSBibG9jazoKKy0gY29tcGF0aWJsZToJU2hvdWxk IGJlICJicmNtLGJjbTI4MzUtdHhwIgorLSByZWc6CQlQaHlzaWNhbCBiYXNlIGFkZHJlc3MgYW5k IGxlbmd0aCBvZiB0aGUgVFhQIGJsb2NrJ3MgcmVnaXN0ZXJzCistIGludGVycnVwdHM6CVRoZSBp bnRlcnJ1cHQgbnVtYmVyCisJCSAgU2VlIGJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2Jy Y20sYmNtMjgzNS1hcm1jdHJsLWljLnR4dAorCiBbMV0gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL21lZGlhL3ZpZGVvLWludGVyZmFjZXMudHh0CiAKIEV4YW1wbGU6CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9N YWtlZmlsZQppbmRleCA0YTNhODY4MjM1ZjguLmIzMDM3MDNiYzdmMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2Vm aWxlCkBAIC0xOSw2ICsxOSw3IEBAIHZjNC15IDo9IFwKIAl2YzRfcGxhbmUubyBcCiAJdmM0X3Jl bmRlcl9jbC5vIFwKIAl2YzRfdHJhY2VfcG9pbnRzLm8gXAorCXZjNF90eHAubyBcCiAJdmM0X3Yz ZC5vIFwKIAl2YzRfdmFsaWRhdGUubyBcCiAJdmM0X3ZhbGlkYXRlX3NoYWRlcnMubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfY3J0Yy5jCmluZGV4IGRjYWRmNzkzZWU4MC4uOTY5MTFhODY5Y2NhIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfY3J0Yy5jCkBAIC00Niw2ICs0Niw4IEBAIHN0cnVjdCB2YzRfY3J0Y19zdGF0ZSB7CiAJ c3RydWN0IGRybV9jcnRjX3N0YXRlIGJhc2U7CiAJLyogRGxpc3QgYXJlYSBmb3IgdGhpcyBDUlRD IGNvbmZpZ3VyYXRpb24uICovCiAJc3RydWN0IGRybV9tbV9ub2RlIG1tOworCWJvb2wgZmVlZF90 eHA7CisJYm9vbCB0eHBfYXJtZWQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfY3J0 Y19zdGF0ZSAqCkBAIC0zMjQsMTAgKzMyNiw4IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIg KnZjNF9nZXRfY3J0Y19lbmNvZGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlyZXR1cm4gTlVM TDsKIH0KIAotc3RhdGljIHZvaWQgdmM0X2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCitzdGF0aWMgdm9pZCB2YzRfY3J0Y19jb25maWdfcHYoc3RydWN0IGRybV9jcnRj ICpjcnRjKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0 IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIgPSB2YzRfZ2V0X2NydGNfZW5jb2RlcihjcnRjKTsKIAlzdHJ1Y3QgdmM0X2VuY29kZXIg KnZjNF9lbmNvZGVyID0gdG9fdmM0X2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IHZjNF9jcnRj ICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOwpAQCAtMzM4LDEyICszMzgsNiBAQCBzdGF0 aWMgdm9pZCB2YzRfY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAli b29sIGlzX2RzaSA9ICh2YzRfZW5jb2Rlci0+dHlwZSA9PSBWQzRfRU5DT0RFUl9UWVBFX0RTSTAg fHwKIAkJICAgICAgIHZjNF9lbmNvZGVyLT50eXBlID09IFZDNF9FTkNPREVSX1RZUEVfRFNJMSk7 CiAJdTMyIGZvcm1hdCA9IGlzX2RzaSA/IFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMjQgOiBQVl9D T05UUk9MX0ZPUk1BVF8yNDsKLQlib29sIGRlYnVnX2R1bXBfcmVncyA9IGZhbHNlOwotCi0JaWYg KGRlYnVnX2R1bXBfcmVncykgewotCQlEUk1fSU5GTygiQ1JUQyAlZCByZWdzIGJlZm9yZTpcbiIs IGRybV9jcnRjX2luZGV4KGNydGMpKTsKLQkJdmM0X2NydGNfZHVtcF9yZWdzKHZjNF9jcnRjKTsK LQl9CiAKIAkvKiBSZXNldCB0aGUgUFYgZmlmby4gKi8KIAlDUlRDX1dSSVRFKFBWX0NPTlRST0ws IDApOwpAQCAtNDE5LDYgKzQxMyw0OSBAQCBzdGF0aWMgdm9pZCB2YzRfY3J0Y19tb2RlX3NldF9u b2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJCQkgUFZfQ09OVFJPTF9DTEtfU0VMRUNUKSB8 CiAJCSAgIFBWX0NPTlRST0xfRklGT19DTFIgfAogCQkgICBQVl9DT05UUk9MX0VOKTsKK30KKwor c3RhdGljIHZvaWQgdmM0X2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgdmM0X2Rl diAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0 b192YzRfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgdmM0X2NydGNfc3RhdGUgKnZjNF9zdGF0ZSA9IHRv X3ZjNF9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSA9ICZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwlib29sIGludGVybGFjZSA9IG1v ZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0U7CisJYm9vbCBkZWJ1Z19kdW1wX3Jl Z3MgPSBmYWxzZTsKKworCWlmIChkZWJ1Z19kdW1wX3JlZ3MpIHsKKwkJRFJNX0lORk8oIkNSVEMg JWQgcmVncyBiZWZvcmU6XG4iLCBkcm1fY3J0Y19pbmRleChjcnRjKSk7CisJCXZjNF9jcnRjX2R1 bXBfcmVncyh2YzRfY3J0Yyk7CisJfQorCisJaWYgKHZjNF9jcnRjLT5jaGFubmVsID09IDIpIHsK KwkJdTMyIGRpc3BjdHJsOworCQl1MzIgZHNwM19tdXg7CisKKwkJLyoKKwkJICogU0NBTEVSX0RJ U1BDVFJMX0RTUDMgPSBYLCB3aGVyZSBYIDwgMiBtZWFucyAnY29ubmVjdCBEU1AzIHRvCisJCSAq IEZJRk8gWCcuCisJCSAqIFNDQUxFUl9ESVNQQ1RSTF9EU1AzID0gMyBtZWFucyAnZGlzYWJsZSBE U1AgMycuCisJCSAqCisJCSAqIERTUDMgaXMgY29ubmVjdGVkIHRvIEZJRk8yIHVubGVzcyB0aGUg dHJhbnNwb3NlciBpcworCQkgKiBlbmFibGVkLiBJbiB0aGlzIGNhc2UsIEZJRk8gMiBpcyBkaXJl Y3RseSBhY2Nlc3NlZCBieSB0aGUKKwkJICogVFhQIElQLCBhbmQgd2UgbmVlZCB0byBkaXNhYmxl IHRoZSBGSUZPMiAtPiBwaXhlbHZhbHZlMQorCQkgKiByb3V0ZS4KKwkJICovCisJCWlmICh2YzRf c3RhdGUtPmZlZWRfdHhwKQorCQkJZHNwM19tdXggPSBWQzRfU0VUX0ZJRUxEKDMsIFNDQUxFUl9E SVNQQ1RSTF9EU1AzX01VWCk7CisJCWVsc2UKKwkJCWRzcDNfbXV4ID0gVkM0X1NFVF9GSUVMRCgy LCBTQ0FMRVJfRElTUENUUkxfRFNQM19NVVgpOworCisJCWRpc3BjdHJsID0gSFZTX1JFQUQoU0NB TEVSX0RJU1BDVFJMKSAmCisJCQkgICB+U0NBTEVSX0RJU1BDVFJMX0RTUDNfTVVYX01BU0s7CisJ CUhWU19XUklURShTQ0FMRVJfRElTUENUUkwsIGRpc3BjdHJsIHwgZHNwM19tdXgpOworCX0KKwor CWlmICghdmM0X3N0YXRlLT5mZWVkX3R4cCkKKwkJdmM0X2NydGNfY29uZmlnX3B2KGNydGMpOwog CiAJSFZTX1dSSVRFKFNDQUxFUl9ESVNQQktHTkRYKHZjNF9jcnRjLT5jaGFubmVsKSwKIAkJICBT Q0FMRVJfRElTUEJLR05EX0FVVE9IUyB8CkBAIC00OTksNiArNTM2LDEzIEBAIHN0YXRpYyB2b2lk IHZjNF9jcnRjX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAl9CiB9CiAK K3ZvaWQgdmM0X2NydGNfdHhwX2FybWVkKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7 CisJc3RydWN0IHZjNF9jcnRjX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfY3J0Y19zdGF0ZShz dGF0ZSk7CisKKwl2YzRfc3RhdGUtPnR4cF9hcm1lZCA9IHRydWU7Cit9CisKIHN0YXRpYyB2b2lk IHZjNF9jcnRjX3VwZGF0ZV9kbGlzdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTUxNCw4ICs1NTgsMTEgQEAgc3RhdGlj IHZvaWQgdmM0X2NydGNfdXBkYXRlX2RsaXN0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJV0FS Tl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOwogCiAJCXNwaW5fbG9ja19pcnFz YXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQkJdmM0X2NydGMtPmV2ZW50ID0gY3J0Yy0+ c3RhdGUtPmV2ZW50OwotCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCisJCWlmICghdmM0 X3N0YXRlLT5mZWVkX3R4cCB8fCB2YzRfc3RhdGUtPnR4cF9hcm1lZCkgeworCQkJdmM0X2NydGMt PmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50OworCQkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVM TDsKKwkJfQogCiAJCUhWU19XUklURShTQ0FMRVJfRElTUExJU1RYKHZjNF9jcnRjLT5jaGFubmVs KSwKIAkJCSAgdmM0X3N0YXRlLT5tbS5zdGFydCk7CkBAIC01MzMsOCArNTgwLDggQEAgc3RhdGlj IHZvaWQgdmM0X2NydGNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0g dG9fdmM0X2RldihkZXYpOwogCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0b192YzRfY3J0 YyhjcnRjKTsKLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+c3RhdGU7Ci0J c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7CisJ c3RydWN0IHZjNF9jcnRjX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfY3J0Y19zdGF0ZShjcnRj LT5zdGF0ZSk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Yy0+c3RhdGUt PmFkanVzdGVkX21vZGU7CiAKIAlyZXF1aXJlX2h2c19lbmFibGVkKGRldik7CiAKQEAgLTU0Niwx NSArNTkzLDIxIEBAIHN0YXRpYyB2b2lkIHZjNF9jcnRjX2F0b21pY19lbmFibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjLAogCiAJLyogVHVybiBvbiB0aGUgc2NhbGVyLCB3aGljaCB3aWxsIHdhaXQg Zm9yIHZzdGFydCB0byBzdGFydAogCSAqIGNvbXBvc2l0aW5nLgorCSAqIFdoZW4gZmVlZGluZyB0 aGUgdHJhbnNwb3Nlciwgd2Ugc2hvdWxkIG9wZXJhdGUgaW4gb25lc2hvdAorCSAqIG1vZGUuCiAJ ICovCiAJSFZTX1dSSVRFKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwpLAogCQkg IFZDNF9TRVRfRklFTEQobW9kZS0+aGRpc3BsYXksIFNDQUxFUl9ESVNQQ1RSTFhfV0lEVEgpIHwK IAkJICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZkaXNwbGF5LCBTQ0FMRVJfRElTUENUUkxYX0hFSUdI VCkgfAotCQkgIFNDQUxFUl9ESVNQQ1RSTFhfRU5BQkxFKTsKKwkJICBTQ0FMRVJfRElTUENUUkxY X0VOQUJMRSB8CisJCSAgKHZjNF9zdGF0ZS0+ZmVlZF90eHAgPyBTQ0FMRVJfRElTUENUUkxYX09O RVNIT1QgOiAwKSk7CiAKLQkvKiBUdXJuIG9uIHRoZSBwaXhlbCB2YWx2ZSwgd2hpY2ggd2lsbCBl bWl0IHRoZSB2c3RhcnQgc2lnbmFsLiAqLwotCUNSVENfV1JJVEUoUFZfVl9DT05UUk9MLAotCQkg ICBDUlRDX1JFQUQoUFZfVl9DT05UUk9MKSB8IFBWX1ZDT05UUk9MX1ZJREVOKTsKKwkvKiBXaGVu IGZlZWRpbmcgdGhlIHRyYW5zcG9zZXIgYmxvY2sgdGhlIHBpeGVsdmFsdmUgaXMgdW5uZWVkZWQg YW5kCisJICogc2hvdWxkIG5vdCBiZSBlbmFibGVkLgorCSAqLworCWlmICghdmM0X3N0YXRlLT5m ZWVkX3R4cCkKKwkJQ1JUQ19XUklURShQVl9WX0NPTlRST0wsCisJCQkgICBDUlRDX1JFQUQoUFZf Vl9DT05UUk9MKSB8IFBWX1ZDT05UUk9MX1ZJREVOKTsKIH0KIAogc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzIHZjNF9jcnRjX21vZGVfdmFsaWQoc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAt NTc5LDggKzYzMiwxMCBAQCBzdGF0aWMgaW50IHZjNF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CiAJdW5zaWduZWQgbG9u ZyBmbGFnczsKIAljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKwlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq Y29ubl9zdGF0ZTsKIAl1MzIgZGxpc3RfY291bnQgPSAwOwotCWludCByZXQ7CisJaW50IHJldCwg aTsKIAogCS8qIFRoZSBwaXhlbHZhbHZlIGNhbiBvbmx5IGZlZWQgb25lIGVuY29kZXIgKGFuZCBl bmNvZGVycyBhcmUKIAkgKiAxOjEgd2l0aCBjb25uZWN0b3JzLikKQEAgLTYwMCw2ICs2NTUsMjQg QEAgc3RhdGljIGludCB2YzRfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRj LAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2lu X3N0YXRlKHN0YXRlLT5zdGF0ZSwgY29ubiwgY29ubl9zdGF0ZSwgaSkgeworCQlpZiAoY29ubl9z dGF0ZS0+Y3J0YyAhPSBjcnRjKQorCQkJY29udGludWU7CisKKwkJLyogVGhlIHdyaXRlYmFjayBj b25uZWN0b3IgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHRyYW5zcG9zZXIKKwkJICogYmxvY2sg d2hpY2ggaXMgZGlyZWN0bHkgdGFraW5nIGl0cyBkYXRhIGZyb20gdGhlIEhWUyBGSUZPLgorCQkg Ki8KKwkJaWYgKGNvbm4tPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9XUklU RUJBQ0spIHsKKwkJCXN0YXRlLT5ub192YmxhbmsgPSB0cnVlOworCQkJdmM0X3N0YXRlLT5mZWVk X3R4cCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlzdGF0ZS0+bm9fdmJsYW5rID0gZmFsc2U7CisJ CQl2YzRfc3RhdGUtPmZlZWRfdHhwID0gZmFsc2U7CisJCX0KKworCQlicmVhazsKKwl9CisKIAly ZXR1cm4gMDsKIH0KIApAQCAtNzEzLDcgKzc4Niw4IEBAIHN0YXRpYyB2b2lkIHZjNF9jcnRjX2hh bmRsZV9wYWdlX2ZsaXAoc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YykKIAogCXNwaW5fbG9ja19p cnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlpZiAodmM0X2NydGMtPmV2ZW50ICYm Ci0JICAgICh2YzRfc3RhdGUtPm1tLnN0YXJ0ID09IEhWU19SRUFEKFNDQUxFUl9ESVNQTEFDVFgo Y2hhbikpKSkgeworCSAgICAodmM0X3N0YXRlLT5tbS5zdGFydCA9PSBIVlNfUkVBRChTQ0FMRVJf RElTUExBQ1RYKGNoYW4pKSB8fAorCSAgICAgdmM0X3N0YXRlLT5mZWVkX3R4cCkpIHsKIAkJZHJt X2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgdmM0X2NydGMtPmV2ZW50KTsKIAkJdmM0X2Ny dGMtPmV2ZW50ID0gTlVMTDsKIAkJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKQEAgLTcyMSw2 ICs3OTUsMTMgQEAgc3RhdGljIHZvaWQgdmM0X2NydGNfaGFuZGxlX3BhZ2VfZmxpcChzdHJ1Y3Qg dmM0X2NydGMgKnZjNF9jcnRjKQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRf bG9jaywgZmxhZ3MpOwogfQogCit2b2lkIHZjNF9jcnRjX2hhbmRsZV92Ymxhbmsoc3RydWN0IHZj NF9jcnRjICpjcnRjKQoreworCWNydGMtPnRfdmJsYW5rID0ga3RpbWVfZ2V0KCk7CisJZHJtX2Ny dGNfaGFuZGxlX3ZibGFuaygmY3J0Yy0+YmFzZSk7CisJdmM0X2NydGNfaGFuZGxlX3BhZ2VfZmxp cChjcnRjKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IHZjNF9jcnRjX2lycV9oYW5kbGVyKGlu dCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YyA9IGRhdGE7 CkBAIC03MjgsMTAgKzgwOSw4IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2YzRfY3J0Y19pcnFfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwog CiAJaWYgKHN0YXQgJiBQVl9JTlRfVkZQX1NUQVJUKSB7Ci0JCXZjNF9jcnRjLT50X3ZibGFuayA9 IGt0aW1lX2dldCgpOwogCQlDUlRDX1dSSVRFKFBWX0lOVFNUQVQsIFBWX0lOVF9WRlBfU1RBUlQp OwotCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZ2YzRfY3J0Yy0+YmFzZSk7Ci0JCXZjNF9jcnRj X2hhbmRsZV9wYWdlX2ZsaXAodmM0X2NydGMpOworCQl2YzRfY3J0Y19oYW5kbGVfdmJsYW5rKHZj NF9jcnRjKTsKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC04ODQsMTIgKzk2MywxNSBA QCBzdGF0aWMgaW50IHZjNF9wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiBzdGF0 aWMgc3RydWN0IGRybV9jcnRjX3N0YXRlICp2YzRfY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0 IGRybV9jcnRjICpjcnRjKQogewotCXN0cnVjdCB2YzRfY3J0Y19zdGF0ZSAqdmM0X3N0YXRlOwor CXN0cnVjdCB2YzRfY3J0Y19zdGF0ZSAqdmM0X3N0YXRlLCAqb2xkX3ZjNF9zdGF0ZTsKIAogCXZj NF9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCp2YzRfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAo IXZjNF9zdGF0ZSkKIAkJcmV0dXJuIE5VTEw7CiAKKwlvbGRfdmM0X3N0YXRlID0gdG9fdmM0X2Ny dGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCXZjNF9zdGF0ZS0+ZmVlZF90eHAgPSBvbGRfdmM0X3N0 YXRlLT5mZWVkX3R4cDsKKwogCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3Rh dGUoY3J0YywgJnZjNF9zdGF0ZS0+YmFzZSk7CiAJcmV0dXJuICZ2YzRfc3RhdGUtPmJhc2U7CiB9 CkBAIC05ODcsOSArMTA2OSwxNyBAQCBzdGF0aWMgdm9pZCB2YzRfc2V0X2NydGNfcG9zc2libGVf bWFza3Moc3RydWN0IGRybV9kZXZpY2UgKmRybSwKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7CiAKIAlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBkcm0pIHsKLQkJc3RydWN0IHZj NF9lbmNvZGVyICp2YzRfZW5jb2RlciA9IHRvX3ZjNF9lbmNvZGVyKGVuY29kZXIpOworCQlzdHJ1 Y3QgdmM0X2VuY29kZXIgKnZjNF9lbmNvZGVyOwogCQlpbnQgaTsKIAorCQkvKiBIVlMgRklGTzIg Y2FuIGZlZWQgdGhlIFRYUCBJUC4gKi8KKwkJaWYgKGNydGNfZGF0YS0+aHZzX2NoYW5uZWwgPT0g MiAmJgorCQkgICAgZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09IERSTV9NT0RFX0VOQ09ERVJfVklS VFVBTCkgeworCQkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgfD0gZHJtX2NydGNfbWFzayhjcnRj KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmM0X2VuY29kZXIgPSB0b192YzRfZW5jb2Rlcihl bmNvZGVyKTsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3J0Y19kYXRhLT5lbmNvZGVy X3R5cGVzKTsgaSsrKSB7CiAJCQlpZiAodmM0X2VuY29kZXItPnR5cGUgPT0gZW5jb2Rlcl90eXBl c1tpXSkgewogCQkJCXZjNF9lbmNvZGVyLT5jbG9ja19zZWxlY3QgPSBpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfZGVidWdmcy5jCmluZGV4IDVkYjA2YmRiNWYyNy4uN2EwMDAzZGU3MWFiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZGVidWdmcy5jCkBAIC0yMSw2ICsyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2luZm9fbGlzdCB2YzRfZGVidWdmc19saXN0W10gPSB7CiAJeyJkc2kxX3JlZ3MiLCB2YzRf ZHNpX2RlYnVnZnNfcmVncywgMCwgKHZvaWQgKikodWludHB0cl90KTF9LAogCXsiaGRtaV9yZWdz IiwgdmM0X2hkbWlfZGVidWdmc19yZWdzLCAwfSwKIAl7InZlY19yZWdzIiwgdmM0X3ZlY19kZWJ1 Z2ZzX3JlZ3MsIDB9LAorCXsidHhwX3JlZ3MiLCB2YzRfdHhwX2RlYnVnZnNfcmVncywgMH0sCiAJ eyJodnNfcmVncyIsIHZjNF9odnNfZGVidWdmc19yZWdzLCAwfSwKIAl7ImNydGMwX3JlZ3MiLCB2 YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVpbnRwdHJfdCkwfSwKIAl7ImNydGMx X3JlZ3MiLCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVpbnRwdHJfdCkxfSwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZHJ2LmMKaW5kZXggNDY2ZDBhMjdiNDE1Li5lNDJmZDVlYzQxY2MgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X2Rydi5jCkBAIC0zNDQsNiArMzQ0LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgKmNvbnN0IGNvbXBvbmVudF9kcml2ZXJzW10gPSB7CiAJJnZjNF92ZWNfZHJpdmVy LAogCSZ2YzRfZHBpX2RyaXZlciwKIAkmdmM0X2RzaV9kcml2ZXIsCisJJnZjNF90eHBfZHJpdmVy LAogCSZ2YzRfaHZzX2RyaXZlciwKIAkmdmM0X2NydGNfZHJpdmVyLAogCSZ2YzRfdjNkX2RyaXZl ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHJ2LmgKaW5kZXggZWFjZTc2YzYyMWExLi5iZDZlZjFmMzE4MjIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X2Rydi5oCkBAIC03Myw2ICs3Myw3IEBAIHN0cnVjdCB2YzRfZGV2IHsKIAlz dHJ1Y3QgdmM0X2RwaSAqZHBpOwogCXN0cnVjdCB2YzRfZHNpICpkc2kxOwogCXN0cnVjdCB2YzRf dmVjICp2ZWM7CisJc3RydWN0IHZjNF90eHAgKnR4cDsKIAogCXN0cnVjdCB2YzRfaGFuZ19zdGF0 ZSAqaGFuZ19zdGF0ZTsKIApAQCAtNjk4LDYgKzY5OSw4IEBAIGJvb2wgdmM0X2NydGNfZ2V0X3Nj YW5vdXRwb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNydGNfaWQsCiAJ CQkgICAgIGJvb2wgaW5fdmJsYW5rX2lycSwgaW50ICp2cG9zLCBpbnQgKmhwb3MsCiAJCQkgICAg IGt0aW1lX3QgKnN0aW1lLCBrdGltZV90ICpldGltZSwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpOwordm9pZCB2YzRfY3J0Y19oYW5kbGVfdmJsYW5rKHN0cnVj dCB2YzRfY3J0YyAqY3J0Yyk7Cit2b2lkIHZjNF9jcnRjX3R4cF9hcm1lZChzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKnN0YXRlKTsKIAogLyogdmM0X2RlYnVnZnMuYyAqLwogaW50IHZjNF9kZWJ1Z2Zz X2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwpAQCAtNzQ1LDYgKzc0OCwxMCBAQCBpbnQg dmM0X2hkbWlfZGVidWdmc19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKTsK IGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF92ZWNfZHJpdmVyOwogaW50IHZjNF92 ZWNfZGVidWdmc19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKTsKIAorLyog dmM0X3R4cC5jICovCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfdHhwX2RyaXZl cjsKK2ludCB2YzRfdHhwX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVu dXNlZCk7CisKIC8qIHZjNF9pcnEuYyAqLwogaXJxcmV0dXJuX3QgdmM0X2lycShpbnQgaXJxLCB2 b2lkICphcmcpOwogdm9pZCB2YzRfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF90eHAuYyBiL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X3R4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNmUyM2M1MDE2OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfdHhwLmMKQEAgLTAsMCArMSw0NzcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggQnJvYWRjb20KKyAqCisgKiBBdXRo b3JzOgorICoJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCUJvcmlzIEJyZXppbGxv biA8Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fd3JpdGViYWNr Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y bS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgInZjNF9kcnYu aCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCisvKiBCYXNlIGFkZHJlc3Mgb2YgdGhlIG91dHB1 dC4gIFJhc3RlciBmb3JtYXRzIG11c3QgYmUgNC1ieXRlIGFsaWduZWQsCisgKiBUIGFuZCBMVCBt dXN0IGJlIDE2LWJ5dGUgYWxpZ25lZCBvciBtYXliZSB1dGlsZS1hbGlnbmVkIChkb2NzIGFyZQor ICogaW5jb25zaXN0ZW50LCBidXQgcHJvYmFibHkgdXRpbGUpLgorICovCisjZGVmaW5lIFRYUF9E U1RfUFRSCQkweDAwCisKKy8qIFBpdGNoIGluIGJ5dGVzIGZvciByYXN0ZXIgaW1hZ2VzLCAxNi1i eXRlIGFsaWduZWQuICBGb3IgdGlsZWQsIGl0J3MKKyAqIHRoZSB3aWR0aCBpbiB0aWxlcy4KKyAq LworI2RlZmluZSBUWFBfRFNUX1BJVENICQkweDA0CisvKiBGb3IgVC10aWxlZCBpbWdhZXMsIERT VF9QSVRDSCBzaG91bGQgYmUgdGhlIG51bWJlciBvZiB0aWxlcyB3aWRlLAorICogc2hpZnRlZCB1 cC4KKyAqLworIyBkZWZpbmUgVFhQX1RfVElMRV9XSURUSF9TSElGVAkJNworLyogRm9yIExULXRp bGVkIGltYWdlcywgRFNUX1BJVENIIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIHV0aWxlcyB3aWRl LAorICogc2hpZnRlZCB1cC4KKyAqLworIyBkZWZpbmUgVFhQX0xUX1RJTEVfV0lEVEhfU0hJRlQJ NAorCisvKiBQcmUtcm90YXRpb24gd2lkdGgvaGVpZ2h0IG9mIHRoZSBpbWFnZS4gIE11c3QgbWF0 Y2ggSFZTIGNvbmZpZy4KKyAqCisgKiBJZiBURk9STUFUIGFuZCAzMi1iaXQsIGxpbWl0IGlzIDE5 MjAgZm9yIDMyLWJpdCBhbmQgMzg0MCB0byAxNi1iaXQKKyAqIGFuZCB3aWR0aC9oZWlnaHQgbXVz dCBiZSB0aWxlIG9yIHV0aWxlLWFsaWduZWQgYXMgYXBwcm9wcmlhdGUuICBJZgorICogdHJhbnNw b3NpbmcgKHJvdGF0aW5nKSwgd2lkdGggaXMgbGltaXRlZCB0byAxOTIwLgorICoKKyAqIEhlaWdo dCBpcyBsaW1pdGVkIHRvIHZhcmlvdXMgbnVtYmVycyBiZXR3ZWVuIDQwODggYW5kIDQwOTUuICBJ J2QKKyAqIGp1c3QgdXNlIDQwODggdG8gYmUgc2FmZS4KKyAqLworI2RlZmluZSBUWFBfRElNCQkJ MHgwOAorIyBkZWZpbmUgVFhQX0hFSUdIVF9TSElGVAkJMTYKKyMgZGVmaW5lIFRYUF9IRUlHSFRf TUFTSwkJR0VOTUFTSygzMSwgMTYpCisjIGRlZmluZSBUWFBfV0lEVEhfU0hJRlQJCTAKKyMgZGVm aW5lIFRYUF9XSURUSF9NQVNLCQkJR0VOTUFTSygxNSwgMCkKKworI2RlZmluZSBUWFBfRFNUX0NU UkwJCTB4MGMKKy8qIFRoZXNlIGJpdHMgYXJlIHNldCB0byAweDU0ICovCisjZGVmaW5lIFRYUF9Q SUxPVF9TSElGVAkJCTI0CisjZGVmaW5lIFRYUF9QSUxPVF9NQVNLCQkJR0VOTUFTSygzMSwgMjQp CisvKiBCaXRzIDIyLTIzIGFyZSBzZXQgdG8gMHgwMSAqLworI2RlZmluZSBUWFBfVkVSU0lPTl9T SElGVAkJMjIKKyNkZWZpbmUgVFhQX1ZFUlNJT05fTUFTSwkJR0VOTUFTSygyMywgMjIpCisKKy8q IFBvd2VycyBkb3duIHRoZSBpbnRlcm5hbCBtZW1vcnkuICovCisjIGRlZmluZSBUWFBfUE9XRVJE T1dOCQkJQklUKDIxKQorCisvKiBFbmFibGVzIHN0b3JpbmcgdGhlIGFscGhhIGNvbXBvbmVudCBp biA4ODg4LzQ0NDQsIGluc3RlYWQgb2YKKyAqIGZpbGxpbmcgd2l0aCB+QUxQSEFfSU5WRVJULgor ICovCisjIGRlZmluZSBUWFBfQUxQSEFfRU5BQkxFCQlCSVQoMjApCisKKy8qIDQgYml0cywgZWFj aCBlbmFibGVzIHN0b3JlcyBmb3IgYSBjaGFubmVsIGluIGVhY2ggc2V0IG9mIDQgYnl0ZXMuCisg KiBTZXQgdG8gMHhmIGZvciBub3JtYWwgb3BlcmF0aW9uLgorICovCisjIGRlZmluZSBUWFBfQllU RV9FTkFCTEVfU0hJRlQJCTE2CisjIGRlZmluZSBUWFBfQllURV9FTkFCTEVfTUFTSwkJR0VOTUFT SygxOSwgMTYpCisKKy8qIERlYnVnOiBHZW5lcmF0ZSBWU1RBUlQgYWdhaW4gYXQgRU9GLiAqLwor IyBkZWZpbmUgVFhQX1ZTVEFSVF9BVF9FT0YJCUJJVCgxNSkKKworLyogRGVidWc6IFRlcm1pbmF0 ZSB0aGUgY3VycmVudCBmcmFtZSBpbW1lZGlhdGVseS4gIFN0b3BzIEFYSQorICogd3JpdGVzLgor ICovCisjIGRlZmluZSBUWFBfQUJPUlQJCQlCSVQoMTQpCisKKyMgZGVmaW5lIFRYUF9ESVRIRVIJ CQlCSVQoMTMpCisKKy8qIEludmVydHMgYWxwaGEgaWYgVFhQX0FMUEhBX0VOQUJMRSwgY2hvb3Nl cyBmaWxsIHZhbHVlIGZvcgorICogIVRYUF9BTFBIQV9FTkFCTEUuCisgKi8KKyMgZGVmaW5lIFRY UF9BTFBIQV9JTlZFUlQJCUJJVCgxMikKKworLyogTm90ZTogSSd2ZSBsaXN0ZWQgdGhlIGNoYW5u ZWxzIGhlcmUgaW4gaGlnaCBiaXQgKGluIGJ5dGUgMy8yLzEpIHRvCisgKiBsb3cgYml0IChpbiBi eXRlIDApIG9yZGVyLgorICovCisjIGRlZmluZSBUWFBfRk9STUFUX1NISUZUCQk4CisjIGRlZmlu ZSBUWFBfRk9STUFUX01BU0sJCUdFTk1BU0soMTEsIDgpCisjIGRlZmluZSBUWFBfRk9STUFUX0FC R1I0NDQ0CQkwCisjIGRlZmluZSBUWFBfRk9STUFUX0FSR0I0NDQ0CQkxCisjIGRlZmluZSBUWFBf Rk9STUFUX0JHUkE0NDQ0CQkyCisjIGRlZmluZSBUWFBfRk9STUFUX1JHQkE0NDQ0CQkzCisjIGRl ZmluZSBUWFBfRk9STUFUX0JHUjU2NQkJNgorIyBkZWZpbmUgVFhQX0ZPUk1BVF9SR0I1NjUJCTcK Ky8qIDg4OHMgYXJlIG5vbi1yb3RhdGVkLCByYXN0ZXItb25seSAqLworIyBkZWZpbmUgVFhQX0ZP Uk1BVF9CR1I4ODgJCTgKKyMgZGVmaW5lIFRYUF9GT1JNQVRfUkdCODg4CQk5CisjIGRlZmluZSBU WFBfRk9STUFUX0FCR1I4ODg4CQkxMgorIyBkZWZpbmUgVFhQX0ZPUk1BVF9BUkdCODg4OAkJMTMK KyMgZGVmaW5lIFRYUF9GT1JNQVRfQkdSQTg4ODgJCTE0CisjIGRlZmluZSBUWFBfRk9STUFUX1JH QkE4ODg4CQkxNQorCisvKiBJZiBURk9STUFUIGlzIHNldCwgZ2VuZXJhdGVzIExUIGluc3RlYWQg b2YgVCBmb3JtYXQuICovCisjIGRlZmluZSBUWFBfTElORUFSX1VUSUxFCQlCSVQoNykKKworLyog Um90YXRlIG91dHB1dCBieSA5MCBkZWdyZWVzLiAqLworIyBkZWZpbmUgVFhQX1RSQU5TUE9TRQkJ CUJJVCg2KQorCisvKiBHZW5lcmF0ZSBhIHRpbGVkIGZvcm1hdCBmb3IgVjNELiAqLworIyBkZWZp bmUgVFhQX1RGT1JNQVQJCQlCSVQoNSkKKworLyogR2VuZXJhdGVzIHNvbWUgdW5kZWZpbmVkIHRl c3QgbW9kZSBvdXRwdXQuICovCisjIGRlZmluZSBUWFBfVEVTVF9NT0RFCQkJQklUKDQpCisKKy8q IFJlcXVlc3Qgb2RkIGZpZWxkIGZyb20gSFZTLiAqLworIyBkZWZpbmUgVFhQX0ZJRUxECQkJQklU KDMpCisKKy8qIFJhaXNlIGludGVycnVwdCB3aGVuIGlkbGUuICovCisjIGRlZmluZSBUWFBfRUkJ CQkJQklUKDIpCisKKy8qIFNldCB3aGVuIGdlbmVyYXRpbmcgYSBmcmFtZSwgY2xlYXJzIHdoZW4g aWRsZS4gKi8KKyMgZGVmaW5lIFRYUF9CVVNZCQkJQklUKDEpCisKKy8qIFN0YXJ0cyBhIGZyYW1l LiAgU2VsZi1jbGVhcmluZy4gKi8KKyMgZGVmaW5lIFRYUF9HTwkJCQlCSVQoMCkKKworLyogTnVt YmVyIG9mIGxpbmVzIHJlY2VpdmVkIGFuZCBjb21taXR0ZWQgdG8gbWVtb3J5LiAqLworI2RlZmlu ZSBUWFBfUFJPR1JFU1MJCTB4MTAKKworI2RlZmluZSBUWFBfUkVBRChvZmZzZXQpIHJlYWRsKHR4 cC0+cmVncyArIChvZmZzZXQpKQorI2RlZmluZSBUWFBfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRl bCh2YWwsIHR4cC0+cmVncyArIChvZmZzZXQpKQorCitzdHJ1Y3QgdmM0X3R4cCB7CisJc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXN0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rv ciBjb25uZWN0b3I7CisKKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cit9OworCitzdGF0aWMgaW5saW5l IHN0cnVjdCB2YzRfdHhwICplbmNvZGVyX3RvX3ZjNF90eHAoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQoreworCXJldHVybiBjb250YWluZXJfb2YoZW5jb2Rlciwgc3RydWN0IHZjNF90eHAs IGNvbm5lY3Rvci5lbmNvZGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X3R4cCAq Y29ubmVjdG9yX3RvX3ZjNF90eHAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4pCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3QgdmM0X3R4cCwgY29ubmVjdG9yLmJhc2UpOwor fQorCisjZGVmaW5lIFRYUF9SRUcocmVnKSB7IHJlZywgI3JlZyB9CitzdGF0aWMgY29uc3Qgc3Ry dWN0IHsKKwl1MzIgcmVnOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IHR4cF9yZWdzW10gPSB7CisJ VFhQX1JFRyhUWFBfRFNUX1BUUiksCisJVFhQX1JFRyhUWFBfRFNUX1BJVENIKSwKKwlUWFBfUkVH KFRYUF9ESU0pLAorCVRYUF9SRUcoVFhQX0RTVF9DVFJMKSwKKwlUWFBfUkVHKFRYUF9QUk9HUkVT UyksCit9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitpbnQgdmM0X3R4cF9kZWJ1Z2ZzX3Jl Z3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZv X25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRlOworCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCB2YzRfZGV2ICp2 YzQgPSB0b192YzRfZGV2KGRldik7CisJc3RydWN0IHZjNF90eHAgKnR4cCA9IHZjNC0+dHhwOwor CWludCBpOworCisJaWYgKCF0eHApCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUodHhwX3JlZ3MpOyBpKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiJXMgKDB4JTA0eCk6 IDB4JTA4eFxuIiwKKwkJCSAgIHR4cF9yZWdzW2ldLm5hbWUsIHR4cF9yZWdzW2ldLnJlZywKKwkJ CSAgIFRYUF9SRUFEKHR4cF9yZWdzW2ldLnJlZykpOworCX0KKworCXJldHVybiAwOworfQorI2Vu ZGlmCisKK3N0YXRpYyBpbnQgdmM0X3R4cF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5l Y3Rvci0+ZGV2OworCisJcmV0dXJuIGRybV9hZGRfbW9kZXNfbm9lZGlkKGNvbm5lY3RvciwgZGV2 LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgsCisJCQkJICAgIGRldi0+bW9kZV9jb25maWcubWF4X2hl aWdodCk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwordmM0X3R4cF9jb25uZWN0 b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9kZV9jb25maWcg PSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlpbnQgdyA9IG1vZGUtPmhkaXNwbGF5LCBoID0gbW9kZS0+ dmRpc3BsYXk7CisKKwlpZiAodyA8IG1vZGVfY29uZmlnLT5taW5fd2lkdGggfHwgdyA+IG1vZGVf Y29uZmlnLT5tYXhfd2lkdGgpCisJCXJldHVybiBNT0RFX0JBRF9IVkFMVUU7CisKKwlpZiAoaCA8 IG1vZGVfY29uZmlnLT5taW5faGVpZ2h0IHx8IGggPiBtb2RlX2NvbmZpZy0+bWF4X2hlaWdodCkK KwkJcmV0dXJuIE1PREVfQkFEX1ZWQUxVRTsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0 aWMgY29uc3QgdTMyIGRybV9mbXRzW10gPSB7CisJRFJNX0ZPUk1BVF9SR0I4ODgsCisJRFJNX0ZP Uk1BVF9CR1I4ODgsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4 LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9S TUFUX1JHQlg4ODg4LAorCURSTV9GT1JNQVRfQkdSWDg4ODgsCisJRFJNX0ZPUk1BVF9SR0JBODg4 OCwKKwlEUk1fRk9STUFUX0JHUkE4ODg4LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiB0eHBfZm10 c1tdID0geworCVRYUF9GT1JNQVRfUkdCODg4LAorCVRYUF9GT1JNQVRfQkdSODg4LAorCVRYUF9G T1JNQVRfQVJHQjg4ODgsCisJVFhQX0ZPUk1BVF9BQkdSODg4OCwKKwlUWFBfRk9STUFUX0FSR0I4 ODg4LAorCVRYUF9GT1JNQVRfQUJHUjg4ODgsCisJVFhQX0ZPUk1BVF9SR0JBODg4OCwKKwlUWFBf Rk9STUFUX0JHUkE4ODg4LAorCVRYUF9GT1JNQVRfUkdCQTg4ODgsCisJVFhQX0ZPUk1BVF9CR1JB ODg4OCwKK307CisKK3N0YXRpYyBpbnQgdmM0X3R4cF9jb25uZWN0b3JfYXRvbWljX2NoZWNrKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJ c3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqZ2VtOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiOworCWludCBpOworCisJaWYgKCFjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iIHx8ICFjb25u X3N0YXRlLT53cml0ZWJhY2tfam9iLT5mYikKKwkJcmV0dXJuIDA7CisKKwljcnRjX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsCisJCQkJCQkg ICBjb25uX3N0YXRlLT5jcnRjKTsKKworCWZiID0gY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYi0+ ZmI7CisJaWYgKGZiLT53aWR0aCAhPSBjcnRjX3N0YXRlLT5tb2RlLmhkaXNwbGF5IHx8CisJICAg IGZiLT5oZWlnaHQgIT0gY3J0Y19zdGF0ZS0+bW9kZS52ZGlzcGxheSkgeworCQlEUk1fREVCVUdf S01TKCJJbnZhbGlkIGZyYW1lYnVmZmVyIHNpemUgJXV4JXVcbiIsCisJCQkgICAgICBmYi0+d2lk dGgsIGZiLT5oZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShkcm1fZm10cyk7IGkrKykgeworCQlpZiAoZmItPmZvcm1hdC0+Zm9ybWF0 ID09IGRybV9mbXRzW2ldKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gQVJSQVlfU0laRShk cm1fZm10cykpCisJCXJldHVybiAtRUlOVkFMOworCisJZ2VtID0gZHJtX2ZiX2NtYV9nZXRfZ2Vt X29iaihmYiwgMCk7CisKKwkvKiBQaXRjaCBtdXN0IGJlIGFsaWduZWQgb24gMTYgYnl0ZXMuICov CisJaWYgKGZiLT5waXRjaGVzWzBdICYgR0VOTUFTSygzLCAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwl2YzRfY3J0Y190eHBfYXJtZWQoY3J0Y19zdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgdmM0X3R4cF9jb25uZWN0b3JfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubiwKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGUpCit7CisJc3RydWN0IHZjNF90eHAgKnR4cCA9IGNvbm5lY3Rvcl90b192YzRfdHhwKGNvbm4p OworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmdlbTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwl1MzIgY3RybDsKKwlp bnQgaTsKKworCWlmIChXQVJOX09OKCFjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iIHx8CisJCSAg ICAhY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYi0+ZmIpKQorCQlyZXR1cm47CisKKwltb2RlID0g JmNvbm5fc3RhdGUtPmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCWZiID0gY29ubl9zdGF0 ZS0+d3JpdGViYWNrX2pvYi0+ZmI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcm1f Zm10cyk7IGkrKykgeworCQlpZiAoZmItPmZvcm1hdC0+Zm9ybWF0ID09IGRybV9mbXRzW2ldKQor CQkJYnJlYWs7CisJfQorCisJaWYgKFdBUk5fT04oaSA9PSBBUlJBWV9TSVpFKGRybV9mbXRzKSkp CisJCXJldHVybjsKKworCWN0cmwgPSBUWFBfR08gfCBUWFBfVlNUQVJUX0FUX0VPRiB8IFRYUF9F SSB8CisJICAgICAgIFZDNF9TRVRfRklFTEQoMHhmLCBUWFBfQllURV9FTkFCTEUpIHwKKwkgICAg ICAgVkM0X1NFVF9GSUVMRCh0eHBfZm10c1tpXSwgVFhQX0ZPUk1BVCk7CisKKwlpZiAoZmItPmZv cm1hdC0+aGFzX2FscGhhKQorCQljdHJsIHw9IFRYUF9BTFBIQV9FTkFCTEU7CisKKwlnZW0gPSBk cm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKKwlUWFBfV1JJVEUoVFhQX0RTVF9QVFIsIGdl bS0+cGFkZHIgKyBmYi0+b2Zmc2V0c1swXSk7CisJVFhQX1dSSVRFKFRYUF9EU1RfUElUQ0gsIGZi LT5waXRjaGVzWzBdKTsKKwlUWFBfV1JJVEUoVFhQX0RJTSwKKwkJICBWQzRfU0VUX0ZJRUxEKG1v ZGUtPmhkaXNwbGF5LCBUWFBfV0lEVEgpIHwKKwkJICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZkaXNw bGF5LCBUWFBfSEVJR0hUKSk7CisKKwlUWFBfV1JJVEUoVFhQX0RTVF9DVFJMLCBjdHJsKTsKKwor CWRybV93cml0ZWJhY2tfcXVldWVfam9iKCZ0eHAtPmNvbm5lY3RvciwgY29ubl9zdGF0ZS0+d3Jp dGViYWNrX2pvYik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgdmM0X3R4cF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMg PSB2YzRfdHhwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSB2YzRfdHhwX2Nv bm5lY3Rvcl9tb2RlX3ZhbGlkLAorCS5hdG9taWNfY2hlY2sgPSB2YzRfdHhwX2Nvbm5lY3Rvcl9h dG9taWNfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSB2YzRfdHhwX2Nvbm5lY3Rvcl9hdG9taWNf Y29tbWl0LAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3ZjNF90eHBf Y29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZv cmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGlj IHZvaWQgdmM0X3R4cF9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9j b25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfZnVuY3MgdmM0X3R4cF9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRldGVjdCA9 IHZjNF90eHBfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJv YmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IHZjNF90eHBfY29ubmVjdG9y X2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAor CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1 cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIHZjNF90eHBfZW5j b2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgdmM0 X3R4cCAqdHhwID0gZW5jb2Rlcl90b192YzRfdHhwKGVuY29kZXIpOworCisJaWYgKFRYUF9SRUFE KFRYUF9EU1RfQ1RSTCkgJiBUWFBfQlVTWSkgeworCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBq aWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKworCQlUWFBfV1JJVEUoVFhQX0RTVF9D VFJMLCBUWFBfQUJPUlQpOworCisJCXdoaWxlIChUWFBfUkVBRChUWFBfRFNUX0NUUkwpICYgVFhQ X0JVU1kgJiYKKwkJICAgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJOwor CisJCVdBUk5fT04oVFhQX1JFQUQoVFhQX0RTVF9DVFJMKSAmIFRYUF9CVVNZKTsKKwl9CisKKwlU WFBfV1JJVEUoVFhQX0RTVF9DVFJMLCBUWFBfUE9XRVJET1dOKTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgdmM0X3R4cF9lbmNvZGVyX2hlbHBlcl9m dW5jcyA9IHsKKwkuZGlzYWJsZSA9IHZjNF90eHBfZW5jb2Rlcl9kaXNhYmxlLAorfTsKKworc3Rh dGljIGlycXJldHVybl90IHZjNF90eHBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCit7 CisJc3RydWN0IHZjNF90eHAgKnR4cCA9IGRhdGE7CisKKwlUWFBfV1JJVEUoVFhQX0RTVF9DVFJM LCBUWFBfUkVBRChUWFBfRFNUX0NUUkwpICYgflRYUF9FSSk7CisJdmM0X2NydGNfaGFuZGxlX3Zi bGFuayh0b192YzRfY3J0Yyh0eHAtPmNvbm5lY3Rvci5iYXNlLnN0YXRlLT5jcnRjKSk7CisJZHJt X3dyaXRlYmFja19zaWduYWxfY29tcGxldGlvbigmdHhwLT5jb25uZWN0b3IsIDApOworCisJcmV0 dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHZjNF90eHBfYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRf ZGV2ICp2YzQgPSB0b192YzRfZGV2KGRybSk7CisJc3RydWN0IHZjNF90eHAgKnR4cDsKKwlpbnQg cmV0LCBpcnE7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEg PCAwKQorCQlyZXR1cm4gaXJxOworCisJdHhwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp0 eHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXR4cCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0eHAt PnBkZXYgPSBwZGV2OworCisJdHhwLT5yZWdzID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2LCAwKTsK KwlpZiAoSVNfRVJSKHR4cC0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKHR4cC0+cmVncyk7CisK Kwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnR4cC0+Y29ubmVjdG9yLmJhc2UsCisJCQkJICZ2 YzRfdHhwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCXJldCA9IGRybV93cml0ZWJhY2tfY29u bmVjdG9yX2luaXQoZHJtLCAmdHhwLT5jb25uZWN0b3IsCisJCQkJCSAgICZ2YzRfdHhwX2Nvbm5l Y3Rvcl9mdW5jcywKKwkJCQkJICAgJnZjNF90eHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3MsCisJCQkJ CSAgIGRybV9mbXRzLCBBUlJBWV9TSVpFKGRybV9mbXRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHZjNF90eHBfaW50ZXJy dXB0LCAwLAorCQkJICAgICAgIGRldl9uYW1lKGRldiksIHR4cCk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHR4cCk7CisJdmM0LT50eHAgPSB0eHA7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmM0X3R4cF91bmJpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQorewor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKKwlzdHJ1 Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2Rldihkcm0pOworCXN0cnVjdCB2YzRfdHhwICp0eHAg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXZjNF90eHBfY29ubmVjdG9yX2Rlc3Ryb3koJnR4 cC0+Y29ubmVjdG9yLmJhc2UpOworCisJdmM0LT50eHAgPSBOVUxMOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgdmM0X3R4cF9vcHMgPSB7CisJLmJpbmQgICA9IHZjNF90 eHBfYmluZCwKKwkudW5iaW5kID0gdmM0X3R4cF91bmJpbmQsCit9OworCitzdGF0aWMgaW50IHZj NF90eHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gY29t cG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmdmM0X3R4cF9vcHMpOworfQorCitzdGF0aWMgaW50IHZj NF90eHBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50 X2RlbCgmcGRldi0+ZGV2LCAmdmM0X3R4cF9vcHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2YzRfdHhwX2R0X21hdGNoW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJicmNtLGJjbTI4MzUtdHhwIiB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307 CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X3R4cF9kcml2ZXIgPSB7CisJLnByb2JlID0g dmM0X3R4cF9wcm9iZSwKKwkucmVtb3ZlID0gdmM0X3R4cF9yZW1vdmUsCisJLmRyaXZlciA9IHsK KwkJLm5hbWUgPSAidmM0X3R4cCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF90eHBfZHRfbWF0 Y2gsCisJfSwKK307Ci0tIAoyLjE0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=