From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 16/36] drm/tegra: dsi: Demidlayer Date: Tue, 20 Jan 2015 11:48:35 +0100 Message-ID: <1421750935-4023-17-git-send-email-thierry.reding@gmail.com> References: <1421750935-4023-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1421750935-4023-1-git-send-email-thierry.reding@gmail.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: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-tegra@vger.kernel.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkltcGxlbWVudCBlbmNv ZGVyIGFuZCBjb25uZWN0b3Igd2l0aGluIHRoZSBEU0kgZHJpdmVyIGl0c2VsZiB1c2luZyB0aGUK VGVncmEgb3V0cHV0IGhlbHBlcnMgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIFRlZ3JhIG91dHB1dCBh cyBtaWRsYXllci4gQnkKZG9pbmcgc28gb25lIGxldmVsIG9mIGluZGlyZWN0aW9uIGlzIHJlbW92 ZWQgYW5kIG91dHB1dCBkcml2ZXJzIGJlY29tZQptb3JlIGZsZXhpYmxlIHdoaWxlIGtlZXBpbmcg dGhlIG1ham9yaXR5IG9mIHRoZSBhZHZhbnRhZ2VzIHByb3ZpZGVkIGJ5CnRoZSBjb21tb24gb3V0 cHV0IGhlbHBlcnMuCgpTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0Budmlk aWEuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uaCAgICB8ICAgMSAtCiBkcml2 ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMgICAgfCAzNTggKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYyB8ICAgNSAt CiAzIGZpbGVzIGNoYW5nZWQsIDE5NSBpbnNlcnRpb25zKCspLCAxNjkgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5oIGIvZHJpdmVycy9ncHUvZHJt L3RlZ3JhL2RybS5oCmluZGV4IDk1YjZhZWJmYWYwMC4uYWUzZGFhNDM2ZWU2IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2RybS5oCkBAIC0xOTMsNyArMTkzLDYgQEAgc3RydWN0IHRlZ3JhX291dHB1dF9vcHMgewogfTsK IAogZW51bSB0ZWdyYV9vdXRwdXRfdHlwZSB7Ci0JVEVHUkFfT1VUUFVUX0RTSSwKIAlURUdSQV9P VVRQVVRfRURQLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RzaS5j IGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RzaS5jCmluZGV4IGE4YzIwOGRhYjY5OC4uODE3MTE0 Y2U0MmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL3RlZ3JhL2RzaS5jCkBAIC01MSw3ICs1MSw2IEBAIHN0cnVjdCB0ZWdyYV9k c2kgewogCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGhvc3Q7CiAKIAlzdHJ1Y3QgcmVndWxhdG9yICp2 ZGQ7Ci0JYm9vbCBlbmFibGVkOwogCiAJdW5zaWduZWQgaW50IHZpZGVvX2ZpZm9fZGVwdGg7CiAJ dW5zaWduZWQgaW50IGhvc3RfZmlmb19kZXB0aDsKQEAgLTYyOCw0NiArNjI3LDYgQEAgc3RhdGlj IGludCB0ZWdyYV9kc2lfY29uZmlndXJlKHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSwgdW5zaWduZWQg aW50IHBpcGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfb3V0cHV0X2RzaV9l bmFibGUoc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0KQotewotCXN0cnVjdCB0ZWdyYV9kYyAq ZGMgPSB0b190ZWdyYV9kYyhvdXRwdXQtPmVuY29kZXIuY3J0Yyk7Ci0JY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmZGMtPmJhc2UubW9kZTsKLQlzdHJ1Y3QgdGVncmFfZHNp ICpkc2kgPSB0b19kc2kob3V0cHV0KTsKLQl1MzIgdmFsdWU7Ci0JaW50IGVycjsKLQotCWlmIChk c2ktPmVuYWJsZWQpCi0JCXJldHVybiAwOwotCi0JZXJyID0gdGVncmFfZHNpX2NvbmZpZ3VyZShk c2ksIGRjLT5waXBlLCBtb2RlKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8q IGVuYWJsZSBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KLQl2YWx1ZSA9IHRlZ3JhX2RjX3JlYWRsKGRj LCBEQ19ESVNQX0RJU1BfV0lOX09QVElPTlMpOwotCXZhbHVlIHw9IERTSV9FTkFCTEU7Ci0JdGVn cmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfRElTUF9ESVNQX1dJTl9PUFRJT05TKTsKLQotCXZh bHVlID0gdGVncmFfZGNfcmVhZGwoZGMsIERDX0NNRF9ESVNQTEFZX0NPTU1BTkQpOwotCXZhbHVl ICY9IH5ESVNQX0NUUkxfTU9ERV9NQVNLOwotCXZhbHVlIHw9IERJU1BfQ1RSTF9NT0RFX0NfRElT UExBWTsKLQl0ZWdyYV9kY193cml0ZWwoZGMsIHZhbHVlLCBEQ19DTURfRElTUExBWV9DT01NQU5E KTsKLQotCXZhbHVlID0gdGVncmFfZGNfcmVhZGwoZGMsIERDX0NNRF9ESVNQTEFZX1BPV0VSX0NP TlRST0wpOwotCXZhbHVlIHw9IFBXMF9FTkFCTEUgfCBQVzFfRU5BQkxFIHwgUFcyX0VOQUJMRSB8 IFBXM19FTkFCTEUgfAotCQkgUFc0X0VOQUJMRSB8IFBNMF9FTkFCTEUgfCBQTTFfRU5BQkxFOwot CXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0NNRF9ESVNQTEFZX1BPV0VSX0NPTlRST0wp OwotCi0JdGVncmFfZGNfY29tbWl0KGRjKTsKLQotCS8qIGVuYWJsZSBEU0kgY29udHJvbGxlciAq LwotCXRlZ3JhX2RzaV9lbmFibGUoZHNpKTsKLQotCWRzaS0+ZW5hYmxlZCA9IHRydWU7Ci0KLQly ZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB0ZWdyYV9kc2lfd2FpdF9pZGxlKHN0cnVjdCB0ZWdy YV9kc2kgKmRzaSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewogCXUzMiB2YWx1ZTsKQEAgLTcw NCw2ICs2NjMsMjkgQEAgc3RhdGljIHZvaWQgdGVncmFfZHNpX2dhbmdlZF9kaXNhYmxlKHN0cnVj dCB0ZWdyYV9kc2kgKmRzaSkKIAl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwgMCwgRFNJX0dBTkdFRF9N T0RFX0NPTlRST0wpOwogfQogCitzdGF0aWMgdm9pZCB0ZWdyYV9kc2lfc2V0X3RpbWVvdXQoc3Ry dWN0IHRlZ3JhX2RzaSAqZHNpLCB1bnNpZ25lZCBsb25nIGJjbGssCisJCQkJICB1bnNpZ25lZCBp bnQgdnJlZnJlc2gpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisJdTMyIHZhbHVlOworCisJ Lyogb25lIGZyYW1lIGhpZ2gtc3BlZWQgdHJhbnNtaXNzaW9uIHRpbWVvdXQgKi8KKwl0aW1lb3V0 ID0gKGJjbGsgLyB2cmVmcmVzaCkgLyA1MTI7CisJdmFsdWUgPSBEU0lfVElNRU9VVF9MUlgoMHgy MDAwKSB8IERTSV9USU1FT1VUX0hUWCh0aW1lb3V0KTsKKwl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwg dmFsdWUsIERTSV9USU1FT1VUXzApOworCisJLyogMiBtcyBwZXJpcGhlcmFsIHRpbWVvdXQgZm9y IHBhbmVsICovCisJdGltZW91dCA9IDIgKiBiY2xrIC8gNTEyICogMTAwMDsKKwl2YWx1ZSA9IERT SV9USU1FT1VUX1BSKHRpbWVvdXQpIHwgRFNJX1RJTUVPVVRfVEEoMHgyMDAwKTsKKwl0ZWdyYV9k c2lfd3JpdGVsKGRzaSwgdmFsdWUsIERTSV9USU1FT1VUXzEpOworCisJdmFsdWUgPSBEU0lfVEFM TFlfVEEoMCkgfCBEU0lfVEFMTFlfTFJYKDApIHwgRFNJX1RBTExZX0hUWCgwKTsKKwl0ZWdyYV9k c2lfd3JpdGVsKGRzaSwgdmFsdWUsIERTSV9UT19UQUxMWSk7CisKKwlpZiAoZHNpLT5zbGF2ZSkK KwkJdGVncmFfZHNpX3NldF90aW1lb3V0KGRzaS0+c2xhdmUsIGJjbGssIHZyZWZyZXNoKTsKK30K Kwogc3RhdGljIHZvaWQgdGVncmFfZHNpX2Rpc2FibGUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpKQog ewogCXUzMiB2YWx1ZTsKQEAgLTc0Nyw4MiArNzI5LDUxIEBAIHN0YXRpYyB2b2lkIHRlZ3JhX2Rz aV9zb2Z0X3Jlc2V0KHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSkKIAkJdGVncmFfZHNpX3NvZnRfcmVz ZXQoZHNpLT5zbGF2ZSk7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfb3V0cHV0X2RzaV9kaXNhYmxl KHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV9jb25u ZWN0b3JfZHBtcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgbW9kZSkKIHsK LQlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gdG9fdGVncmFfZGMob3V0cHV0LT5lbmNvZGVyLmNydGMp OwotCXN0cnVjdCB0ZWdyYV9kc2kgKmRzaSA9IHRvX2RzaShvdXRwdXQpOwotCXUzMiB2YWx1ZTsK LQlpbnQgZXJyOwotCi0JaWYgKCFkc2ktPmVuYWJsZWQpCi0JCXJldHVybiAwOwotCi0JdGVncmFf ZHNpX3ZpZGVvX2Rpc2FibGUoZHNpKTsKLQotCS8qCi0JICogVGhlIGZvbGxvd2luZyBhY2Nlc3Nl cyByZWdpc3RlcnMgb2YgdGhlIGRpc3BsYXkgY29udHJvbGxlciwgc28gbWFrZQotCSAqIHN1cmUg aXQncyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIG91dHB1dCBpcyBhdHRhY2hlZCB0byBvbmUuCi0J ICovCi0JaWYgKGRjKSB7Ci0JCXZhbHVlID0gdGVncmFfZGNfcmVhZGwoZGMsIERDX0NNRF9ESVNQ TEFZX1BPV0VSX0NPTlRST0wpOwotCQl2YWx1ZSAmPSB+KFBXMF9FTkFCTEUgfCBQVzFfRU5BQkxF IHwgUFcyX0VOQUJMRSB8IFBXM19FTkFCTEUgfAotCQkJICAgUFc0X0VOQUJMRSB8IFBNMF9FTkFC TEUgfCBQTTFfRU5BQkxFKTsKLQkJdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfQ01EX0RJ U1BMQVlfUE9XRVJfQ09OVFJPTCk7Ci0KLQkJdmFsdWUgPSB0ZWdyYV9kY19yZWFkbChkYywgRENf RElTUF9ESVNQX1dJTl9PUFRJT05TKTsKLQkJdmFsdWUgJj0gfkRTSV9FTkFCTEU7Ci0JCXRlZ3Jh X2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7Ci0KLQkJdGVn cmFfZGNfY29tbWl0KGRjKTsKLQl9Ci0KLQllcnIgPSB0ZWdyYV9kc2lfd2FpdF9pZGxlKGRzaSwg MTAwKTsKLQlpZiAoZXJyIDwgMCkKLQkJZGV2X2RiZyhkc2ktPmRldiwgImZhaWxlZCB0byBpZGxl IERTSTogJWRcbiIsIGVycik7Ci0KLQl0ZWdyYV9kc2lfc29mdF9yZXNldChkc2kpOwotCXRlZ3Jh X2RzaV9kaXNhYmxlKGRzaSk7Ci0KLQlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKLQotCXJldHVybiAw OwogfQogCi1zdGF0aWMgdm9pZCB0ZWdyYV9kc2lfc2V0X3RpbWVvdXQoc3RydWN0IHRlZ3JhX2Rz aSAqZHNpLCB1bnNpZ25lZCBsb25nIGJjbGssCi0JCQkJICB1bnNpZ25lZCBpbnQgdnJlZnJlc2gp Ci17Ci0JdW5zaWduZWQgaW50IHRpbWVvdXQ7Ci0JdTMyIHZhbHVlOworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRlZ3JhX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJ LmRwbXMgPSB0ZWdyYV9kc2lfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IHRlZ3JhX291dHB1 dF9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5n bGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gdGVncmFfb3V0cHV0X2Nvbm5lY3Rvcl9k ZXN0cm95LAorfTsKIAotCS8qIG9uZSBmcmFtZSBoaWdoLXNwZWVkIHRyYW5zbWlzc2lvbiB0aW1l b3V0ICovCi0JdGltZW91dCA9IChiY2xrIC8gdnJlZnJlc2gpIC8gNTEyOwotCXZhbHVlID0gRFNJ X1RJTUVPVVRfTFJYKDB4MjAwMCkgfCBEU0lfVElNRU9VVF9IVFgodGltZW91dCk7Ci0JdGVncmFf ZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfVElNRU9VVF8wKTsKK3N0YXRpYyBlbnVtIGRybV9t b2RlX3N0YXR1cwordGVncmFfZHNpX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCit7CisJcmV0dXJuIE1PREVfT0s7Cit9CiAKLQkvKiAyIG1zIHBlcmlwaGVyYWwgdGltZW91 dCBmb3IgcGFuZWwgKi8KLQl0aW1lb3V0ID0gMiAqIGJjbGsgLyA1MTIgKiAxMDAwOwotCXZhbHVl ID0gRFNJX1RJTUVPVVRfUFIodGltZW91dCkgfCBEU0lfVElNRU9VVF9UQSgweDIwMDApOwotCXRl Z3JhX2RzaV93cml0ZWwoZHNpLCB2YWx1ZSwgRFNJX1RJTUVPVVRfMSk7CitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHRlZ3JhX2RzaV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSB0ZWdyYV9vdXRwdXRfY29ubmVjdG9yX2dldF9t b2RlcywKKwkubW9kZV92YWxpZCA9IHRlZ3JhX2RzaV9jb25uZWN0b3JfbW9kZV92YWxpZCwKKwku YmVzdF9lbmNvZGVyID0gdGVncmFfb3V0cHV0X2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9Owog Ci0JdmFsdWUgPSBEU0lfVEFMTFlfVEEoMCkgfCBEU0lfVEFMTFlfTFJYKDApIHwgRFNJX1RBTExZ X0hUWCgwKTsKLQl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwgdmFsdWUsIERTSV9UT19UQUxMWSk7Citz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHRlZ3JhX2RzaV9lbmNvZGVyX2Z1 bmNzID0geworCS5kZXN0cm95ID0gdGVncmFfb3V0cHV0X2VuY29kZXJfZGVzdHJveSwKK307CiAK LQlpZiAoZHNpLT5zbGF2ZSkKLQkJdGVncmFfZHNpX3NldF90aW1lb3V0KGRzaS0+c2xhdmUsIGJj bGssIHZyZWZyZXNoKTsKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV9lbmNvZGVyX2RwbXMoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKK3sKIH0KIAotc3RhdGljIGludCB0ZWdy YV9vdXRwdXRfZHNpX3NldHVwX2Nsb2NrKHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCwKLQkJ CQkJc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHBjbGssCi0JCQkJCXVuc2lnbmVkIGlu dCAqZGl2cCkKK3N0YXRpYyBib29sIHRlZ3JhX2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCisJCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWQpCiB7Ci0J c3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKG91dHB1dC0+ZW5jb2Rlci5jcnRjKTsK LQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkYy0+YmFzZS5tb2RlOworCXN0cnVj dCB0ZWdyYV9vdXRwdXQgKm91dHB1dCA9IGVuY29kZXJfdG9fb3V0cHV0KGVuY29kZXIpOworCXN0 cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9kYyhlbmNvZGVyLT5jcnRjKTsKKwl1bnNpZ25l ZCBpbnQgbXVsLCBkaXYsIHNjZGl2LCB2cmVmcmVzaCwgbGFuZXM7CiAJc3RydWN0IHRlZ3JhX2Rz aSAqZHNpID0gdG9fZHNpKG91dHB1dCk7Ci0JdW5zaWduZWQgaW50IG11bCwgZGl2LCB2cmVmcmVz aCwgbGFuZXM7Ci0JdW5zaWduZWQgbG9uZyBiY2xrLCBwbGxkOworCXVuc2lnbmVkIGxvbmcgcGNs aywgYmNsaywgcGxsZDsKIAlpbnQgZXJyOwogCiAJbGFuZXMgPSB0ZWdyYV9kc2lfZ2V0X2xhbmVz KGRzaSk7CisJcGNsayA9IG1vZGUtPmNsb2NrICogMTAwMDsKIAogCWVyciA9IHRlZ3JhX2RzaV9n ZXRfbXVsZGl2KGRzaS0+Zm9ybWF0LCAmbXVsLCAmZGl2KTsKIAlpZiAoZXJyIDwgMCkKQEAgLTg0 NywxOSArNzk4LDYgQEAgc3RhdGljIGludCB0ZWdyYV9vdXRwdXRfZHNpX3NldHVwX2Nsb2NrKHN0 cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCwKIAkgKi8KIAlwbGxkIC89IDI7CiAKLQllcnIgPSBj bGtfc2V0X3BhcmVudChjbGssIGRzaS0+Y2xrX3BhcmVudCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJ ZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBzZXQgcGFyZW50IGNsb2NrOiAlZFxuIiwgZXJy KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQllcnIgPSBjbGtfc2V0X3JhdGUoZHNpLT5jbGtfcGFy ZW50LCBwbGxkKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVk IHRvIHNldCBiYXNlIGNsb2NrIHJhdGUgdG8gJWx1IEh6XG4iLAotCQkJcGxsZCk7Ci0JCXJldHVy biBlcnI7Ci0JfQotCiAJLyoKIAkgKiBEZXJpdmUgcGl4ZWwgY2xvY2sgZnJvbSBiaXQgY2xvY2sg dXNpbmcgdGhlIHNoaWZ0IGNsb2NrIGRpdmlkZXIuCiAJICogTm90ZSB0aGF0IHRoaXMgaXMgb25s eSBoYWxmIG9mIHdoYXQgd2Ugd291bGQgZXhwZWN0LCBidXQgd2UgbmVlZApAQCAtODcwLDM5ICs4 MDgsMTMyIEBAIHN0YXRpYyBpbnQgdGVncmFfb3V0cHV0X2RzaV9zZXR1cF9jbG9jayhzdHJ1Y3Qg dGVncmFfb3V0cHV0ICpvdXRwdXQsCiAJICogbm90IHdvcmtpbmcgcHJvcGVybHkgb3RoZXJ3aXNl LiBQZXJoYXBzIHRoZSBQTExzIGNhbm5vdCBnZW5lcmF0ZQogCSAqIGZyZXF1ZW5jaWVzIHN1ZmZp Y2llbnRseSBoaWdoLgogCSAqLwotCSpkaXZwID0gKCg4ICogbXVsKSAvIChkaXYgKiBsYW5lcykp IC0gMjsKKwlzY2RpdiA9ICgoOCAqIG11bCkgLyAoZGl2ICogbGFuZXMpKSAtIDI7CisKKwllcnIg PSB0ZWdyYV9kY19zZXR1cF9jbG9jayhkYywgZHNpLT5jbGtfcGFyZW50LCBwbGxkLCBzY2Rpdik7 CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihvdXRwdXQtPmRldiwgImZhaWxlZCB0byBzZXR1 cCBEQyBjbG9jazogJWRcbiIsIGVycik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwllcnIgPSBj bGtfc2V0X3JhdGUoZHNpLT5jbGtfcGFyZW50LCBwbGxkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjbG9jayByYXRlIHRvICVsdSBIelxuIiwK KwkJCXBsbGQpOworCQlyZXR1cm4gZmFsc2U7CisJfQogCi0JLyoKLQkgKiBYWFg6IE1vdmUgdGhl IGJlbG93IHNvbWV3aGVyZSBlbHNlIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBoYXZlCi0JICog YWNjZXNzIHRvIHRoZSB2cmVmcmVzaCBpbiB0aGlzIGZ1bmN0aW9uPwotCSAqLwogCXRlZ3JhX2Rz aV9zZXRfdGltZW91dChkc2ksIGJjbGssIHZyZWZyZXNoKTsKIAogCWVyciA9IHRlZ3JhX2RzaV9z ZXRfcGh5X3RpbWluZyhkc2kpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWlmIChl cnIgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgRC1QSFkgdGlt aW5nOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotCXJldHVybiAwOworCXJl dHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9kc2lfZW5jb2Rlcl9wcmVwYXJlKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKK30KKworc3RhdGljIHZvaWQgdGVncmFfZHNp X2VuY29kZXJfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKIH0KIAotc3Rh dGljIGludCB0ZWdyYV9vdXRwdXRfZHNpX2NoZWNrX21vZGUoc3RydWN0IHRlZ3JhX291dHB1dCAq b3V0cHV0LAorc3RhdGljIHZvaWQgdGVncmFfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKLQkJCQkgICAgICAgZW51bSBkcm1fbW9kZV9zdGF0dXMgKnN0YXR1cykKKwkJCQkgICAg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0cnVjdCB0ZWdyYV9v dXRwdXQgKm91dHB1dCA9IGVuY29kZXJfdG9fb3V0cHV0KGVuY29kZXIpOworCXN0cnVjdCB0ZWdy YV9kYyAqZGMgPSB0b190ZWdyYV9kYyhlbmNvZGVyLT5jcnRjKTsKKwlzdHJ1Y3QgdGVncmFfZHNp ICpkc2kgPSB0b19kc2kob3V0cHV0KTsKKwl1MzIgdmFsdWU7CisJaW50IGVycjsKKworCisJZXJy ID0gdGVncmFfZHNpX2NvbmZpZ3VyZShkc2ksIGRjLT5waXBlLCBtb2RlKTsKKwlpZiAoZXJyIDwg MCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIGNvbmZpZ3VyZSBEU0k6ICVkXG4i LCBlcnIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG91dHB1dC0+cGFuZWwpCisJCWRybV9wYW5l bF9wcmVwYXJlKG91dHB1dC0+cGFuZWwpOworCisJLyogZW5hYmxlIGRpc3BsYXkgY29udHJvbGxl ciAqLworCXZhbHVlID0gdGVncmFfZGNfcmVhZGwoZGMsIERDX0RJU1BfRElTUF9XSU5fT1BUSU9O Uyk7CisJdmFsdWUgfD0gRFNJX0VOQUJMRTsKKwl0ZWdyYV9kY193cml0ZWwoZGMsIHZhbHVlLCBE Q19ESVNQX0RJU1BfV0lOX09QVElPTlMpOworCisJdmFsdWUgPSB0ZWdyYV9kY19yZWFkbChkYywg RENfQ01EX0RJU1BMQVlfQ09NTUFORCk7CisJdmFsdWUgJj0gfkRJU1BfQ1RSTF9NT0RFX01BU0s7 CisJdmFsdWUgfD0gRElTUF9DVFJMX01PREVfQ19ESVNQTEFZOworCXRlZ3JhX2RjX3dyaXRlbChk YywgdmFsdWUsIERDX0NNRF9ESVNQTEFZX0NPTU1BTkQpOworCisJdmFsdWUgPSB0ZWdyYV9kY19y ZWFkbChkYywgRENfQ01EX0RJU1BMQVlfUE9XRVJfQ09OVFJPTCk7CisJdmFsdWUgfD0gUFcwX0VO QUJMRSB8IFBXMV9FTkFCTEUgfCBQVzJfRU5BQkxFIHwgUFczX0VOQUJMRSB8CisJCSBQVzRfRU5B QkxFIHwgUE0wX0VOQUJMRSB8IFBNMV9FTkFCTEU7CisJdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1 ZSwgRENfQ01EX0RJU1BMQVlfUE9XRVJfQ09OVFJPTCk7CisKKwl0ZWdyYV9kY19jb21taXQoZGMp OworCisJLyogZW5hYmxlIERTSSBjb250cm9sbGVyICovCisJdGVncmFfZHNpX2VuYWJsZShkc2kp OworCisJaWYgKG91dHB1dC0+cGFuZWwpCisJCWRybV9wYW5lbF9lbmFibGUob3V0cHV0LT5wYW5l bCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV9lbmNvZGVyX2Rpc2Fi bGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogeworCXN0cnVjdCB0ZWdyYV9vdXRwdXQg Km91dHB1dCA9IGVuY29kZXJfdG9fb3V0cHV0KGVuY29kZXIpOworCXN0cnVjdCB0ZWdyYV9kYyAq ZGMgPSB0b190ZWdyYV9kYyhlbmNvZGVyLT5jcnRjKTsKKwlzdHJ1Y3QgdGVncmFfZHNpICpkc2kg PSB0b19kc2kob3V0cHV0KTsKKwl1MzIgdmFsdWU7CisJaW50IGVycjsKKworCWlmIChvdXRwdXQt PnBhbmVsKQorCQlkcm1fcGFuZWxfZGlzYWJsZShvdXRwdXQtPnBhbmVsKTsKKworCXRlZ3JhX2Rz aV92aWRlb19kaXNhYmxlKGRzaSk7CisKIAkvKgotCSAqIEZJWE1FOiBGb3Igbm93LCBhbHdheXMg YXNzdW1lIHRoYXQgdGhlIG1vZGUgaXMgb2theS4KKwkgKiBUaGUgZm9sbG93aW5nIGFjY2Vzc2Vz IHJlZ2lzdGVycyBvZiB0aGUgZGlzcGxheSBjb250cm9sbGVyLCBzbyBtYWtlCisJICogc3VyZSBp dCdzIG9ubHkgZXhlY3V0ZWQgd2hlbiB0aGUgb3V0cHV0IGlzIGF0dGFjaGVkIHRvIG9uZS4KIAkg Ki8KKwlpZiAoZGMpIHsKKwkJdmFsdWUgPSB0ZWdyYV9kY19yZWFkbChkYywgRENfRElTUF9ESVNQ X1dJTl9PUFRJT05TKTsKKwkJdmFsdWUgJj0gfkRTSV9FTkFCTEU7CisJCXRlZ3JhX2RjX3dyaXRl bChkYywgdmFsdWUsIERDX0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7CiAKLQkqc3RhdHVzID0gTU9E RV9PSzsKKwkJdGVncmFfZGNfY29tbWl0KGRjKTsKKwl9CiAKLQlyZXR1cm4gMDsKKwllcnIgPSB0 ZWdyYV9kc2lfd2FpdF9pZGxlKGRzaSwgMTAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2RiZyhk c2ktPmRldiwgImZhaWxlZCB0byBpZGxlIERTSTogJWRcbiIsIGVycik7CisKKwl0ZWdyYV9kc2lf c29mdF9yZXNldChkc2kpOworCisJaWYgKG91dHB1dC0+cGFuZWwpCisJCWRybV9wYW5lbF91bnBy ZXBhcmUob3V0cHV0LT5wYW5lbCk7CisKKwl0ZWdyYV9kc2lfZGlzYWJsZShkc2kpOworCisJcmV0 dXJuOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX291dHB1dF9vcHMgZHNpX29wcyA9 IHsKLQkuZW5hYmxlID0gdGVncmFfb3V0cHV0X2RzaV9lbmFibGUsCi0JLmRpc2FibGUgPSB0ZWdy YV9vdXRwdXRfZHNpX2Rpc2FibGUsCi0JLnNldHVwX2Nsb2NrID0gdGVncmFfb3V0cHV0X2RzaV9z ZXR1cF9jbG9jaywKLQkuY2hlY2tfbW9kZSA9IHRlZ3JhX291dHB1dF9kc2lfY2hlY2tfbW9kZSwK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHRlZ3JhX2RzaV9l bmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkuZHBtcyA9IHRlZ3JhX2RzaV9lbmNvZGVyX2RwbXMs CisJLm1vZGVfZml4dXAgPSB0ZWdyYV9kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5wcmVwYXJl ID0gdGVncmFfZHNpX2VuY29kZXJfcHJlcGFyZSwKKwkuY29tbWl0ID0gdGVncmFfZHNpX2VuY29k ZXJfY29tbWl0LAorCS5tb2RlX3NldCA9IHRlZ3JhX2RzaV9lbmNvZGVyX21vZGVfc2V0LAorCS5k aXNhYmxlID0gdGVncmFfZHNpX2VuY29kZXJfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgdGVn cmFfZHNpX3BhZF9lbmFibGUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpKQpAQCAtOTUyLDE1ICs5ODMs MzAgQEAgc3RhdGljIGludCB0ZWdyYV9kc2lfaW5pdChzdHJ1Y3QgaG9zdDF4X2NsaWVudCAqY2xp ZW50KQogCiAJLyogR2FuZ3N0ZXJzIG11c3Qgbm90IHJlZ2lzdGVyIHRoZWlyIG93biBvdXRwdXRz LiAqLwogCWlmICghZHNpLT5tYXN0ZXIpIHsKLQkJZHNpLT5vdXRwdXQudHlwZSA9IFRFR1JBX09V VFBVVF9EU0k7CiAJCWRzaS0+b3V0cHV0LmRldiA9IGNsaWVudC0+ZGV2OwotCQlkc2ktPm91dHB1 dC5vcHMgPSAmZHNpX29wczsKIAotCQllcnIgPSB0ZWdyYV9vdXRwdXRfaW5pdChkcm0sICZkc2kt Pm91dHB1dCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlkZXZfZXJyKGNsaWVudC0+ZGV2LCAib3V0 cHV0IHNldHVwIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWRy bV9jb25uZWN0b3JfaW5pdChkcm0sICZkc2ktPm91dHB1dC5jb25uZWN0b3IsCisJCQkJICAgJnRl Z3JhX2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7 CisJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmZHNpLT5vdXRwdXQuY29ubmVjdG9yLAorCQkJ CQkgJnRlZ3JhX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJZHNpLT5vdXRwdXQuY29u bmVjdG9yLmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKworCQlpZiAoZHNpLT5vdXRwdXQucGFu ZWwpCisJCQlkcm1fcGFuZWxfYXR0YWNoKGRzaS0+b3V0cHV0LnBhbmVsLAorCQkJCQkgJmRzaS0+ b3V0cHV0LmNvbm5lY3Rvcik7CisKKwkJZHJtX2VuY29kZXJfaW5pdChkcm0sICZkc2ktPm91dHB1 dC5lbmNvZGVyLAorCQkJCSAmdGVncmFfZHNpX2VuY29kZXJfZnVuY3MsCisJCQkJIERSTV9NT0RF X0VOQ09ERVJfRFNJKTsKKwkJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHNpLT5vdXRwdXQuZW5j b2RlciwKKwkJCQkgICAgICAgJnRlZ3JhX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwkJ ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPm91dHB1dC5jb25uZWN0b3Is CisJCQkJCQkgICZkc2ktPm91dHB1dC5lbmNvZGVyKTsKKwkJZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rl cigmZHNpLT5vdXRwdXQuY29ubmVjdG9yKTsKKworCQlkc2ktPm91dHB1dC5lbmNvZGVyLnBvc3Np YmxlX2NydGNzID0gMHgzOwogCX0KIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19GUykp IHsKQEAgLTk4MSwyOCArMTAyNywxNCBAQCBzdGF0aWMgaW50IHRlZ3JhX2RzaV9leGl0KHN0cnVj dCBob3N0MXhfY2xpZW50ICpjbGllbnQpCiAJc3RydWN0IHRlZ3JhX2RzaSAqZHNpID0gaG9zdDF4 X2NsaWVudF90b19kc2koY2xpZW50KTsKIAlpbnQgZXJyOwogCisJdGVncmFfb3V0cHV0X2V4aXQo JmRzaS0+b3V0cHV0KTsKKwogCWlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19GUykpIHsKIAkJ ZXJyID0gdGVncmFfZHNpX2RlYnVnZnNfZXhpdChkc2kpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWRl dl9lcnIoZHNpLT5kZXYsICJkZWJ1Z2ZzIGNsZWFudXAgZmFpbGVkOiAlZFxuIiwgZXJyKTsKIAl9 CiAKLQlpZiAoIWRzaS0+bWFzdGVyKSB7Ci0JCWVyciA9IHRlZ3JhX291dHB1dF9kaXNhYmxlKCZk c2ktPm91dHB1dCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlkZXZfZXJyKGNsaWVudC0+ZGV2LCAi b3V0cHV0IGZhaWxlZCB0byBkaXNhYmxlOiAlZFxuIiwKLQkJCQllcnIpOwotCQkJcmV0dXJuIGVy cjsKLQkJfQotCi0JCWVyciA9IHRlZ3JhX291dHB1dF9leGl0KCZkc2ktPm91dHB1dCk7Ci0JCWlm IChlcnIgPCAwKSB7Ci0JCQlkZXZfZXJyKGNsaWVudC0+ZGV2LCAib3V0cHV0IGNsZWFudXAgZmFp bGVkOiAlZFxuIiwKLQkJCQllcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQogCXJlc2V0 X2NvbnRyb2xfYXNzZXJ0KGRzaS0+cnN0KTsKIAogCXJldHVybiAwOwpAQCAtMTU0OCw2ICsxNTgw LDEyIEBAIHN0YXRpYyBpbnQgdGVncmFfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQogCQlyZXR1cm4gZXJyOwogCX0KIAorCWVyciA9IHRlZ3JhX291dHB1dF9yZW1vdmUo JmRzaS0+b3V0cHV0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJm YWlsZWQgdG8gcmVtb3ZlIG91dHB1dDogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQor CiAJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmhvc3QpOwogCXRlZ3JhX21pcGlfZnJl ZShkc2ktPm1pcGkpOwogCkBAIC0xNTU2LDEyICsxNTk0LDYgQEAgc3RhdGljIGludCB0ZWdyYV9k c2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRzaS0+Y2xrKTsKIAlyZXNldF9jb250cm9sX2Fzc2VydChkc2ktPnJzdCk7CiAKLQll cnIgPSB0ZWdyYV9vdXRwdXRfcmVtb3ZlKCZkc2ktPm91dHB1dCk7Ci0JaWYgKGVyciA8IDApIHsK LQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbW92ZSBvdXRwdXQ6ICVkXG4iLCBl cnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0cHV0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0 cHV0LmMKaW5kZXggOWNmODUxYmY0MTRiLi5iYzUzOTNmZDAzYzcgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0 cHV0LmMKQEAgLTI3NiwxMSArMjc2LDYgQEAgaW50IHRlZ3JhX291dHB1dF9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkKIAlpbnQgY29ubmVj dG9yLCBlbmNvZGVyOwogCiAJc3dpdGNoIChvdXRwdXQtPnR5cGUpIHsKLQljYXNlIFRFR1JBX09V VFBVVF9EU0k6Ci0JCWNvbm5lY3RvciA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k7Ci0JCWVuY29k ZXIgPSBEUk1fTU9ERV9FTkNPREVSX0RTSTsKLQkJYnJlYWs7Ci0KIAljYXNlIFRFR1JBX09VVFBV VF9FRFA6CiAJCWNvbm5lY3RvciA9IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA7CiAJCWVuY29kZXIg PSBEUk1fTU9ERV9FTkNPREVSX1RNRFM7Ci0tIAoyLjEuMwoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK