From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 931E9C388F7 for ; Tue, 3 Nov 2020 19:35:09 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 32C3D2080D for ; Tue, 3 Nov 2020 19:35:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 32C3D2080D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E7F316E8EE; Tue, 3 Nov 2020 19:35:00 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id AB8096E8E3 for ; Tue, 3 Nov 2020 19:34:56 +0000 (UTC) IronPort-SDR: Gb5RmV2BvdhZZbEPpNSCnz+U+r9lrOKDUTDEx5pr0XoPkg8VStfG2v5UaO19DgQtzf+cBXRaED X7tWbbYoRvtA== X-IronPort-AV: E=McAfee;i="6000,8403,9794"; a="156102016" X-IronPort-AV: E=Sophos;i="5.77,448,1596524400"; d="scan'208";a="156102016" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Nov 2020 11:34:56 -0800 IronPort-SDR: 4WZWh41BP596L/3KEXVjIc/u5cS6W6y+K4UYQ9j2+MRrNwvuzV+fAqJxoo5HxU0WtCD5LI/UPs 8QVYC9GFc1jw== X-IronPort-AV: E=Sophos;i="5.77,448,1596524400"; d="scan'208";a="538611004" Received: from adamreyx-mobl.amr.corp.intel.com (HELO achrisan-DESK2.amr.corp.intel.com) ([10.254.36.83]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-SHA; 03 Nov 2020 11:34:55 -0800 From: Anitha Chrisanthus To: dri-devel@lists.freedesktop.org, anitha.chrisanthus@intel.com Subject: [PATCH v11 5/7] drm/kmb: Add support for KeemBay Display Date: Tue, 3 Nov 2020 11:34:31 -0800 Message-Id: <1604432073-15933-6-git-send-email-anitha.chrisanthus@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1604432073-15933-1-git-send-email-anitha.chrisanthus@intel.com> References: <1604432073-15933-1-git-send-email-anitha.chrisanthus@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: edmund.j.dea@intel.com, sam@ravnborg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhpcyBpcyBhIGJhc2ljIEtNUyBhdG9taWMgbW9kZXNldHRpbmcgZGlzcGxheSBkcml2ZXIgZm9y IEtlZW1CYXkgZmFtaWx5IG9mClNPQ3MuIERyaXZlciBoYXMgbm8gMkQgb3IgM0QgZ3JhcGhpY3Mu IEl0IGNhbGxzIGludG8gdGhlIEFEViBicmlkZ2UKZHJpdmVyIGF0IHRoZSBjb25uZWN0b3IgbGV2 ZWwuCgpTaW5nbGUgQ1JUQyB3aXRoIExDRCBjb250cm9sbGVyLT5taXBpIERTSS0+QURWIGJyaWRn ZQoKT25seSAxMDgwcCByZXNvbHV0aW9uIGFuZCBzaW5nbGUgcGxhbmUgaXMgc3VwcG9ydGVkIGF0 IHRoaXMgdGltZS4KCnYyOiBtb3ZlZCBleHRlcm4gdG8gLmgsIHJlbW92ZWQgbGljZW5zZSB0ZXh0 CiAgICB1c2UgZHJtX2Rldl9pbml0LCB1cGNsYXNzZWQgZGV2X3ByaXZhdGUsIHJlbW92ZWQgSEFW RV9JUlEuKFNhbSkKCnYzOiBTcXVhc2hlZCBhbGwgNTkgY29tbWl0cyB0byBvbmUKCnY0OiByZXZp ZXcgY2hhbmdlcyBmcm9tIFNhbSBSYXZuYm9yZwoJcmVuYW1lZCBkZXZfcCB0byBrbWIKCW1vdmVk IGNsb2NrcyB1bmRlciBrbWJfY2xvY2ssIGNvbnNvbGlkYXRlZCBjbGsgaW5pdGlhbGl6YXRpb25z Cgl1c2UgZHJtbSBmdW5jdGlvbnMKCXVzZSBEUk1fR0VNX0NNQV9EUklWRVJfT1BTX1ZNQVAKCnY1 OiBjb3JyZWN0ZWQgc3BlbGxpbmdzCnY2OiBjb3JyZWN0ZWQgY2hlY2twYXRjaCB3YXJuaW5ncwp2 NzogcmV2aWV3IGNoYW5nZXMgU2FtIFJhdm5ib3JnIGFuZCBUaG9tYXMgWmltbWVybWFuCglyZW1v dmVkIGttYl9jcnRjLmgga21iX2NydGNfY2xlYW51cCAoVGhvbWFzKQoJcmVuYW1lZCBtb2RlX3Nl dCwga21iX2xvYWQsIGlubGluZWQgdW5sb2FkIChUaG9tYXMpCgltb3ZlZCByZW1haW5pbmcgbG9n Z2luZyB0byBkcm1fKihUaG9tYXMpCglyZS1vcmdlZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gKFRo b21hcykKCW1vdmVkIHBsYW5lX3N0YXR1cyB0byBkcm1fcHJpdmF0ZSAoU2FtKQoJcmVtb3ZlZCB1 bm5lY2Vzc2FyeSBsb2dzIGFuZCBkZWZpbmVzIGFuZCBpZmRlZiBjb2RlcyAoU2FtKQoJY2FsbCBo ZWxwZXJfY2hlY2sgaW4gcGxhbmVfYXRvbWljX2NoZWNrIChTYW0pCglyZW5hbWVkIHNldCB0byBn ZXQgZm9yIGJwcCBhbmQgZm9ybWF0IGZ1bmN0aW9ucyhTYW0pCgl1c2UgZHJtIGhlbHBlciBmdW5j dGlvbnMgZm9yIHJlc2V0LCBkdXBsaWNhdGUvZGVzdHJveSBzdGF0ZSBpbnN0ZWFkCglvZiBrbWIg ZnVuY3Rpb25zIChTYW0pCglyZW1vdmVkIGttYl9wcml2IGZyb20ga21iX3BsYW5lIGFuZCByZW1v dmVkIGttYl9wbGFuZV9zdGF0ZSAoU2FtKQp2ODogZ2V0IGNsa19wbGwwIGZyb20gZGlzcGxheSBu b2RlIGluIGR0CnY5OiBtb3ZlZCBjc2NfY29lZl9sY2QgdG8gcGxhbmUuYyAoRGFuaWVsIFZldHRl cikKICAgIGNhbGwgZHJtX2F0b21pY19oZWxwZXJfc2h1dGRvd24gaW4gcmVtb3ZlIChEYW5pZWwg VikKICAgIHVzZSBkcm1fY3J0Y19oYW5kbGVfdmJsYW5rIChEYW5pZWwgVikKICAgIHJlbmFtZWQg a21iX2RzaV9od19pbml0IHRvIGttYl9kc2lfbW9kZV9zZXQgKERhbmllbCBWKQogICAgY29tcGxp bWVudGFyeSBjaGFuZ2VzIHRvIGRldmljZSB0cmVlIGNoYW5nZXMgKFJvYikKdjEwOiBjYWxsIGRy bV9jcnRjX2FybV92YmxhbmtfZXZlbnQgaW4gYXRvbWljX2ZsdXNoIChEYW5pZWwgVikKICAgICBt b3ZlZCBnbG9iYWwgdmFycyB0byBrbWJfcHJpdmF0ZSBhbmQgYWRkZWQgbG9ja3MgKERhbmllbCBW KQogICAgIGNoYW5nZXMgaW4gZHJpdmVyIHRvIGFjY29tbW9kYXRlIGNoYW5nZXMgaW4gRFQgdG8g c2VwYXJhdGUgRFNJCiAgICAgZW50cmllcyAoU2FtIFIpCiAgICAgcmV2aWV3IGNoYW5nZXMgdG8g c2VwYXJhdGUgbWlwaSBEU0kgKFNhbSBSKQp2MTE6IHJldmlldyBjaGFuZ2VzIHRvIHNlcGFyYXRl IG1zc2NhbSAoTmVpbCBBLFNhbSBSKQoKU2lnbmVkLW9mZi1ieTogQW5pdGhhIENocmlzYW50aHVz IDxhbml0aGEuY2hyaXNhbnRodXNAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogU2FtIFJhdm5ib3Jn IDxzYW1AcmF2bmJvcmcub3JnPgpDYzogU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3JnPgpD YzogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+CkNjOiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWxAZmZ3bGwuY2g+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfY3J0Yy5j ICB8IDIxOSArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5jICAg fCA2MDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2ttYi9rbWJfZHJ2LmggICB8ICA4OCArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9rbWIv a21iX3BsYW5lLmMgfCA0OTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmggfCAgOTkgKysrKysrKwogNSBmaWxlcyBjaGFuZ2Vk LCAxNDk4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v a21iL2ttYl9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2tt Yl9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmgKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0va21i L2ttYl9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3YjZkNwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2NydGMuYwpAQCAtMCww ICsxLDIxOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoK KyAqIENvcHlyaWdodCDCqSAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgor I2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50 Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV92YmxhbmsuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVz ZXRfaGVscGVyX3Z0YWJsZXMuaD4KKworI2luY2x1ZGUgImttYl9kcnYuaCIKKyNpbmNsdWRlICJr bWJfZHNpLmgiCisjaW5jbHVkZSAia21iX3BsYW5lLmgiCisjaW5jbHVkZSAia21iX3JlZ3MuaCIK Kworc3RydWN0IGttYl9jcnRjX3RpbWluZyB7CisJdTMyIHZmcm9udF9wb3JjaDsKKwl1MzIgdmJh Y2tfcG9yY2g7CisJdTMyIHZzeW5jX2xlbjsKKwl1MzIgaGZyb250X3BvcmNoOworCXUzMiBoYmFj a19wb3JjaDsKKwl1MzIgaHN5bmNfbGVuOworfTsKKworc3RhdGljIGludCBrbWJfY3J0Y19lbmFi bGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihk ZXYpOworCisJLyogQ2xlYXIgaW50ZXJydXB0ICovCisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9J TlRfQ0xFQVIsIExDRF9JTlRfVkVSVF9DT01QKTsKKwkvKiBTZXQgd2hpY2ggaW50ZXJ2YWwgdG8g Z2VuZXJhdGUgdmVydGljYWwgaW50ZXJydXB0ICovCisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9W U1RBVFVTX0NPTVBBUkUsCisJCSAgICAgIExDRF9WU1RBVFVTX0NPTVBBUkVfVlNZTkMpOworCS8q IEVuYWJsZSB2ZXJ0aWNhbCBpbnRlcnJ1cHQgKi8KKwlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwg TENEX0lOVF9FTkFCTEUsCisJCQkgICAgTENEX0lOVF9WRVJUX0NPTVApOworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBrbWJfY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qg a21iX2RybV9wcml2YXRlICprbWIgPSB0b19rbWIoZGV2KTsKKworCS8qIENsZWFyIGludGVycnVw dCAqLworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCBMQ0RfSU5UX1ZFUlRfQ09N UCk7CisJLyogRGlzYWJsZSB2ZXJ0aWNhbCBpbnRlcnJ1cHQgKi8KKwlrbWJfY2xyX2JpdG1hc2tf bGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJCQkgICAgTENEX0lOVF9WRVJUX0NPTVApOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGttYl9jcnRjX2Z1bmNzID0gewor CS5kZXN0cm95ID0gZHJtX2NydGNfY2xlYW51cCwKKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNf aGVscGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNfaGVscGVyX3BhZ2Vf ZmxpcCwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlLAorCS5lbmFibGVfdmJsYW5rID0ga21iX2NydGNfZW5hYmxlX3ZibGFuaywKKwkuZGlz YWJsZV92YmxhbmsgPSBrbWJfY3J0Y19kaXNhYmxlX3ZibGFuaywKK307CisKK3N0YXRpYyB2b2lk IGttYl9jcnRjX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptID0g JmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCXN0cnVjdCBrbWJfY3J0Y190aW1pbmcgdm07 CisJaW50IHZzeW5jX3N0YXJ0X29mZnNldDsKKwlpbnQgdnN5bmNfZW5kX29mZnNldDsKKwlzdHJ1 Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19rbWIoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFs ID0gMDsKKworCS8qIEluaXRpYWxpemUgbWlwaSAqLworCWttYl9kc2lfbW9kZV9zZXQoa21iLT5r bWJfZHNpLCBtLCBrbWItPnN5c19jbGtfbWh6KTsKKwlkcm1faW5mbyhkZXYsCisJCSAidmZwPSAl ZCB2YnA9ICVkIHZzeWNfbGVuPSVkIGhmcD0lZCBoYnA9JWQgaHN5bmNfbGVuPSVkXG4iLAorCQkg bS0+Y3J0Y192c3luY19zdGFydCAtIG0tPmNydGNfdmRpc3BsYXksCisJCSBtLT5jcnRjX3Z0b3Rh bCAtIG0tPmNydGNfdnN5bmNfZW5kLAorCQkgbS0+Y3J0Y192c3luY19lbmQgLSBtLT5jcnRjX3Zz eW5jX3N0YXJ0LAorCQkgbS0+Y3J0Y19oc3luY19zdGFydCAtIG0tPmNydGNfaGRpc3BsYXksCisJ CSBtLT5jcnRjX2h0b3RhbCAtIG0tPmNydGNfaHN5bmNfZW5kLAorCQkgbS0+Y3J0Y19oc3luY19l bmQgLSBtLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwl2YWwgPSBrbWJfcmVhZF9sY2Qoa21iLCBMQ0Rf SU5UX0VOQUJMRSk7CisJa21iX2Nscl9iaXRtYXNrX2xjZChrbWIsIExDRF9JTlRfRU5BQkxFLCB2 YWwpOworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCB+MHgwKTsKKwl2 bS52ZnJvbnRfcG9yY2ggPSAyOworCXZtLnZiYWNrX3BvcmNoID0gMjsKKwl2bS52c3luY19sZW4g PSA4OworCXZtLmhmcm9udF9wb3JjaCA9IDA7CisJdm0uaGJhY2tfcG9yY2ggPSAwOworCXZtLmhz eW5jX2xlbiA9IDI4OworCisJdnN5bmNfc3RhcnRfb2Zmc2V0ID0gIG0tPmNydGNfdnN5bmNfc3Rh cnQgLSAgbS0+Y3J0Y19oc3luY19zdGFydDsKKwl2c3luY19lbmRfb2Zmc2V0ID0gIG0tPmNydGNf dnN5bmNfZW5kIC0gbS0+Y3J0Y19oc3luY19lbmQ7CisKKwlkcm1fZGJnKGRldiwgIiVzIDogJWRh Y3RpdmUgaGVpZ2h0PSAlZCB2YnA9JWQgdmZwPSVkIHZzeW5jLXc9JWQgaC1hY3RpdmU9JWQgaC1i cD0lZCBoLWZwPSVkIGh5c25jLWw9JWQiLAorCQlfX2Z1bmNfXywgX19MSU5FX18sCisJCQltLT5j cnRjX3ZkaXNwbGF5LCB2bS52YmFja19wb3JjaCwgdm0udmZyb250X3BvcmNoLAorCQkJdm0udnN5 bmNfbGVuLCBtLT5jcnRjX2hkaXNwbGF5LCB2bS5oYmFja19wb3JjaCwKKwkJCXZtLmhmcm9udF9w b3JjaCwgdm0uaHN5bmNfbGVuKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZfQUNUSVZFSEVJ R0hULAorCQkgICAgICBtLT5jcnRjX3ZkaXNwbGF5IC0gMSk7CisJa21iX3dyaXRlX2xjZChrbWIs IExDRF9WX0JBQ0tQT1JDSCwgdm0udmJhY2tfcG9yY2gpOworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfVl9GUk9OVFBPUkNILCB2bS52ZnJvbnRfcG9yY2gpOworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfVlNZTkNfV0lEVEgsIHZtLnZzeW5jX2xlbiAtIDEpOworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfSF9BQ1RJVkVXSURUSCwKKwkJICAgICAgbS0+Y3J0Y19oZGlzcGxheSAtIDEpOworCWttYl93 cml0ZV9sY2Qoa21iLCBMQ0RfSF9CQUNLUE9SQ0gsIHZtLmhiYWNrX3BvcmNoKTsKKwlrbWJfd3Jp dGVfbGNkKGttYiwgTENEX0hfRlJPTlRQT1JDSCwgdm0uaGZyb250X3BvcmNoKTsKKwlrbWJfd3Jp dGVfbGNkKGttYiwgTENEX0hTWU5DX1dJRFRILCB2bS5oc3luY19sZW4gLSAxKTsKKwkvKiBUaGlz IGlzIGhhcmRjb2RlZCBhcyAwIGluIHRoZSBNeXJpYWR4IGNvZGUgKi8KKwlrbWJfd3JpdGVfbGNk KGttYiwgTENEX1ZTWU5DX1NUQVJULCAwKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZTWU5D X0VORCwgMCk7CisJLyogQmFjayBncm91bmQgY29sb3IgKi8KKwlrbWJfd3JpdGVfbGNkKGttYiwg TENEX0JHX0NPTE9VUl9MUywgMHg0KTsKKwlpZiAobS0+ZmxhZ3MgPT0gRFJNX01PREVfRkxBR19J TlRFUkxBQ0UpIHsKKwkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkgICAgICBMQ0RfVlNZTkNfV0lE VEhfRVZFTiwgdm0udnN5bmNfbGVuIC0gMSk7CisJCWttYl93cml0ZV9sY2Qoa21iLAorCQkJICAg ICAgTENEX1ZfQkFDS1BPUkNIX0VWRU4sIHZtLnZiYWNrX3BvcmNoKTsKKwkJa21iX3dyaXRlX2xj ZChrbWIsCisJCQkgICAgICBMQ0RfVl9GUk9OVFBPUkNIX0VWRU4sIHZtLnZmcm9udF9wb3JjaCk7 CisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfVl9BQ1RJVkVIRUlHSFRfRVZFTiwKKwkJCSAgICAg IG0tPmNydGNfdmRpc3BsYXkgLSAxKTsKKwkJLyogVGhpcyBpcyBoYXJkY29kZWQgYXMgMTAgaW4g dGhlIE15cmlhZHggY29kZSAqLworCQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZTWU5DX1NUQVJU X0VWRU4sIDEwKTsKKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WU1lOQ19FTkRfRVZFTiwgMTAp OworCX0KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1RJTUlOR19HRU5fVFJJRywgMSk7CisJa21i X3NldF9iaXRtYXNrX2xjZChrbWIsIExDRF9DT05UUk9MLCBMQ0RfQ1RSTF9FTkFCTEUpOworCWtt Yl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwgdmFsKTsKK30KKworc3RhdGlj IHZvaWQga21iX2NydGNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJ ICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBrbWJfZHJtX3By aXZhdGUgKmttYiA9IGNydGNfdG9fa21iX3ByaXYoY3J0Yyk7CisKKwljbGtfcHJlcGFyZV9lbmFi bGUoa21iLT5rbWJfY2xrLmNsa19sY2QpOworCWttYl9jcnRjX3NldF9tb2RlKGNydGMpOworCWRy bV9jcnRjX3ZibGFua19vbihjcnRjKTsKK30KKworc3RhdGljIHZvaWQga21iX2NydGNfYXRvbWlj X2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gY3J0Y190 b19rbWJfcHJpdihjcnRjKTsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKKworCS8qIGR1ZSB0byBo dyBsaW1pdGF0aW9ucywgcGxhbmVzIG5lZWQgdG8gYmUgb2ZmIHdoZW4gY3J0YyBpcyBvZmYgKi8K Kwlkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lc19vbl9jcnRjKG9sZF9zdGF0ZSwgZmFs c2UpOworCisJZHJtX2NydGNfdmJsYW5rX29mZihjcnRjKTsKKwljbGtfZGlzYWJsZV91bnByZXBh cmUoa21iLT5rbWJfY2xrLmNsa19sY2QpOworfQorCitzdGF0aWMgdm9pZCBrbWJfY3J0Y19hdG9t aWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJ c3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRldik7CisKKwlrbWJfY2xyX2Jp dG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJCQkgICAgTENEX0lOVF9WRVJUX0NPTVAp OworfQorCitzdGF0aWMgdm9pZCBrbWJfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRj ICpjcnRjLAorCQkJCSAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAq a21iID0gdG9fa21iKGRldik7CisKKwlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9F TkFCTEUsCisJCQkgICAgTENEX0lOVF9WRVJUX0NPTVApOworCisJc3Bpbl9sb2NrX2lycSgmY3J0 Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJCWlmIChk cm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApCisJCQlkcm1fY3J0Y19hcm1fdmJsYW5rX2V2 ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7CisJCWVsc2UKKwkJCWRybV9jcnRjX3NlbmRf dmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7CisJfQorCWNydGMtPnN0YXRl LT5ldmVudCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2sp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBrbWJfY3J0 Y19oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19iZWdpbiA9IGttYl9jcnRjX2F0b21pY19iZWdp biwKKwkuYXRvbWljX2VuYWJsZSA9IGttYl9jcnRjX2F0b21pY19lbmFibGUsCisJLmF0b21pY19k aXNhYmxlID0ga21iX2NydGNfYXRvbWljX2Rpc2FibGUsCisJLmF0b21pY19mbHVzaCA9IGttYl9j cnRjX2F0b21pY19mbHVzaCwKK307CisKK2ludCBrbWJfc2V0dXBfY3J0YyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQoreworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkcm0p OworCXN0cnVjdCBrbWJfcGxhbmUgKnByaW1hcnk7CisJaW50IHJldDsKKworCXByaW1hcnkgPSBr bWJfcGxhbmVfaW5pdChkcm0pOworCWlmIChJU19FUlIocHJpbWFyeSkpCisJCXJldHVybiBQVFJf RVJSKHByaW1hcnkpOworCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZr bWItPmNydGMsICZwcmltYXJ5LT5iYXNlX3BsYW5lLAorCQkJCQlOVUxMLCAma21iX2NydGNfZnVu Y3MsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJa21iX3BsYW5lX2Rlc3Ryb3koJnByaW1hcnktPmJh c2VfcGxhbmUpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJmtt Yi0+Y3J0YywgJmttYl9jcnRjX2hlbHBlcl9mdW5jcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIv a21iX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhN2FmNzYKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuYwpAQCAtMCwwICsx LDYwMiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUg PGxpbnV4L29mX3Jlc2VydmVkX21lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4K KyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZl cl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2lycS5oPgorI2luY2x1ZGUgPGRybS9kcm1f cHJvYmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV92YmxhbmsuaD4KKworI2luY2x1ZGUg ImttYl9kcnYuaCIKKyNpbmNsdWRlICJrbWJfZHNpLmgiCisjaW5jbHVkZSAia21iX3JlZ3MuaCIK KworaW50IGttYl9kaXNwbGF5X2Nsa19lbmFibGUoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21i KQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGttYi0+a21i X2Nsay5jbGtfbGNkKTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiRmFpbGVk IHRvIGVuYWJsZSBMQ0QgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlE Uk1fSU5GTygiU1VDQ0VTUyA6IGVuYWJsZWQgTENEIGNsb2Nrc1xuIik7CisJcmV0dXJuIDA7Cit9 CisKK2ludCBrbWJfaW5pdGlhbGl6ZV9jbG9ja3Moc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21i LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHJlZ21hcCAq bXNzY2FtOworCisJa21iLT5rbWJfY2xrLmNsa19sY2QgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY2xr X2xjZCIpOworCWlmIChJU19FUlIoa21iLT5rbWJfY2xrLmNsa19sY2QpKSB7CisJCWRybV9lcnIo JmttYi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfbGNkXG4iKTsKKwkJcmV0dXJuIFBUUl9F UlIoa21iLT5rbWJfY2xrLmNsa19sY2QpOworCX0KKworCWttYi0+a21iX2Nsay5jbGtfcGxsMCA9 IGRldm1fY2xrX2dldChkZXYsICJjbGtfcGxsMCIpOworCWlmIChJU19FUlIoa21iLT5rbWJfY2xr LmNsa19wbGwwKSkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgImNsa19nZXQoKSBmYWlsZWQgY2xr X3BsbDAgIik7CisJCXJldHVybiBQVFJfRVJSKGttYi0+a21iX2Nsay5jbGtfcGxsMCk7CisJfQor CWttYi0+c3lzX2Nsa19taHogPSBjbGtfZ2V0X3JhdGUoa21iLT5rbWJfY2xrLmNsa19wbGwwKSAv IDEwMDAwMDA7CisJZHJtX2luZm8oJmttYi0+ZHJtLCAic3lzdGVtIGNsayA9ICVkIE1oeiIsIGtt Yi0+c3lzX2Nsa19taHopOworCisJcmV0ID0gIGttYl9kc2lfY2xrX2luaXQoa21iLT5rbWJfZHNp KTsKKworCS8qIFNldCBMQ0QgY2xvY2sgdG8gMjAwIE1oeiAqLworCWNsa19zZXRfcmF0ZShrbWIt PmttYl9jbGsuY2xrX2xjZCwgS01CX0xDRF9ERUZBVUxUX0NMSyk7CisJaWYgKGNsa19nZXRfcmF0 ZShrbWItPmttYl9jbGsuY2xrX2xjZCkgIT0gS01CX0xDRF9ERUZBVUxUX0NMSykgeworCQlkcm1f ZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBzZXQgdG8gY2xrX2xjZCB0byAlZFxuIiwKKwkJCUtN Ql9MQ0RfREVGQVVMVF9DTEspOworCQlyZXR1cm4gLTE7CisJfQorCWRybV9kYmcoJmttYi0+ZHJt LCAiY2xrX2xjZCA9ICVsZFxuIiwgY2xrX2dldF9yYXRlKGttYi0+a21iX2Nsay5jbGtfbGNkKSk7 CisKKwlyZXQgPSBrbWJfZGlzcGxheV9jbGtfZW5hYmxlKGttYik7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCW1zc2NhbSA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUo ImludGVsLGtlZW1iYXktbXNzY2FtIik7CisJaWYgKElTX0VSUihtc3NjYW0pKSB7CisJCWRybV9l cnIoJmttYi0+ZHJtLCAiZmFpbGVkIHRvIGdldCBtc3NjYW0gc3lzY29uIik7CisJCXJldHVybiAt MTsKKwl9CisKKwkvKiBFbmFibGUgTVNTX0NBTV9DTEtfQ1RSTCBmb3IgTUlQSSBUWCBhbmQgTENE ICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKG1zc2NhbSwgTVNTX0NBTV9DTEtfQ1RSTCwgMHgxZmZm LCAweDFmZmYpOworCXJlZ21hcF91cGRhdGVfYml0cyhtc3NjYW0sIE1TU19DQU1fUlNUTl9DVFJM LCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg a21iX2Rpc3BsYXlfY2xrX2Rpc2FibGUoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iKQorewor CWNsa19kaXNhYmxlX3VucHJlcGFyZShrbWItPmttYl9jbGsuY2xrX2xjZCk7Cit9CisKK3N0YXRp YyB2b2lkIF9faW9tZW0gKmttYl9tYXBfbW1pbyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJ CSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgIGNoYXIgKm5hbWUpCit7CisJ c3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICptZW07CisKKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKKwlp ZiAoIXJlcykgeworCQlkcm1fZXJyKGRybSwgImZhaWxlZCB0byBnZXQgcmVzb3VyY2UgZm9yICVz IiwgbmFtZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwltZW0gPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZHJtLT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihtZW0pKQorCQlkcm1f ZXJyKGRybSwgImZhaWxlZCB0byBpb3JlbWFwICVzIHJlZ2lzdGVycyIsIG5hbWUpOworCXJldHVy biBtZW07Cit9CisKK3N0YXRpYyBpbnQga21iX2h3X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIg PSB0b19rbWIoZHJtKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZv cm1fZGV2aWNlKGRybS0+ZGV2KTsKKwlpbnQgaXJxX2xjZDsKKwlpbnQgcmV0ID0gMDsKKworCS8q IE1hcCBMQ0QgTU1JTyByZWdpc3RlcnMgKi8KKwlrbWItPmxjZF9tbWlvID0ga21iX21hcF9tbWlv KGRybSwgcGRldiwgImxjZCIpOworCWlmIChJU19FUlIoa21iLT5sY2RfbW1pbykpIHsKKwkJZHJt X2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gbWFwIExDRCByZWdpc3RlcnNcbiIpOworCQlyZXR1 cm4gLUVOT01FTTsKKwl9CisKKwkvKiBNYXAgTUlQSSBNTUlPIHJlZ2lzdGVycyAqLworCXJldCA9 IGttYl9kc2lfbWFwX21taW8oa21iLT5rbWJfZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJLyogRW5hYmxlIGRpc3BsYXkgY2xvY2tzICovCisJa21iX2luaXRpYWxpemVfY2xvY2tz KGttYiwgJnBkZXYtPmRldik7CisKKwkvKiBSZWdpc3RlciBpcnFzIGhlcmUgLSBzZWN0aW9uIDE3 LjMgaW4gZGF0YWJvb2sKKwkgKiBsaXN0cyBMQ0QgYXQgNzkgYW5kIDgyIGZvciBNSVBJIHVuZGVy IE1TUyBDUFUgLQorCSAqIGZpcm13YXJlIGhhcyByZWRpcmVjdGVkIDc5IHRvIEE1MyBJUlEgMzMK KwkgKi8KKworCS8qIEFsbG9jYXRlIExDRCBpbnRlcnJ1cHQgcmVzb3VyY2VzICovCisJaXJxX2xj ZCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycV9sY2QgPCAwKSB7CisJCWRy bV9lcnIoJmttYi0+ZHJtLCAiaXJxX2xjZCBub3QgZm91bmQiKTsKKwkJZ290byBzZXR1cF9mYWls OworCX0KKworCS8qIEdldCB0aGUgb3B0aW9uYWwgZnJhbWVidWZmZXIgbWVtb3J5IHJlc291cmNl ICovCisJcmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9pbml0KGRybS0+ZGV2KTsKKwlpZiAo cmV0ICYmIHJldCAhPSAtRU5PREVWKQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2luaXQo JmttYi0+aXJxX2xvY2spOworCisJa21iLT5pcnFfbGNkID0gaXJxX2xjZDsKKworCXJldHVybiAw OworCisgc2V0dXBfZmFpbDoKKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZHJtLT5k ZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9j b25maWdfZnVuY3Mga21iX21vZGVfY29uZmlnX2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBkcm1f Z2VtX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ss CisJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCit9OworCitzdGF0 aWMgaW50IGttYl9zZXR1cF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQorewor CWludCByZXQ7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRybSk7CisK KwlyZXQgPSBkcm1tX21vZGVfY29uZmlnX2luaXQoZHJtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gS01CX01JTl9XSURUSDsKKwlkcm0t Pm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSBLTUJfTUlOX0hFSUdIVDsKKwlkcm0tPm1vZGVfY29u ZmlnLm1heF93aWR0aCA9IEtNQl9NQVhfV0lEVEg7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVp Z2h0ID0gS01CX01BWF9IRUlHSFQ7CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZrbWJfbW9k ZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBrbWJfc2V0dXBfY3J0Yyhkcm0pOworCWlmIChyZXQg PCAwKSB7CisJCWRybV9lcnIoZHJtLCAiZmFpbGVkIHRvIGNyZWF0ZSBjcnRjXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisJcmV0ID0ga21iX2RzaV9lbmNvZGVyX2luaXQoZHJtLCBrbWItPmttYl9k c2kpOworCS8qIFNldCB0aGUgQ1JUQydzIHBvcnQgc28gdGhhdCB0aGUgZW5jb2RlciBjb21wb25l bnQgY2FuIGZpbmQgaXQgKi8KKwlrbWItPmNydGMucG9ydCA9IG9mX2dyYXBoX2dldF9wb3J0X2J5 X2lkKGRybS0+ZGV2LT5vZl9ub2RlLCAwKTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBk cm0tPm1vZGVfY29uZmlnLm51bV9jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcm1fZXJyKGRy bSwgImZhaWxlZCB0byBpbml0aWFsaXplIHZibGFua1xuIik7CisJCXBtX3J1bnRpbWVfZGlzYWJs ZShkcm0tPmRldik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0 KGRybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfbGNkX2ly cShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgc3RhdHVzLCB2YWws IHZhbDE7CisJaW50IHBsYW5lX2lkLCBkbWEwX3N0YXRlLCBkbWExX3N0YXRlOworCXN0cnVjdCBr bWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkZXYpOworCisJc3RhdHVzID0ga21iX3JlYWRf bGNkKGttYiwgTENEX0lOVF9TVEFUVVMpOworCisJc3Bpbl9sb2NrKCZrbWItPmlycV9sb2NrKTsK KwlpZiAoc3RhdHVzICYgTENEX0lOVF9FT0YpIHsKKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9J TlRfQ0xFQVIsIExDRF9JTlRfRU9GKTsKKworCQkvKiBXaGVuIGRpc2FibGluZy9lbmFibGluZyBM Q0QgbGF5ZXJzLCB0aGUgY2hhbmdlIHRha2VzIGVmZmVjdAorCQkgKiBpbW1lZGlhdGVseSBhbmQg ZG9lcyBub3Qgd2FpdCBmb3IgRU9GIChlbmQgb2YgZnJhbWUpLgorCQkgKiBXaGVuIGttYl9wbGFu ZV9hdG9taWNfZGlzYWJsZSBpcyBjYWxsZWQsIG1hcmsgdGhlIHBsYW5lIGFzCisJCSAqIGRpc2Fi bGVkIGJ1dCBhY3R1YWxseSBkaXNhYmxlIHRoZSBwbGFuZSB3aGVuIEVPRiBpcnEgaXMKKwkJICog YmVpbmcgaGFuZGxlZC4KKwkJICovCisJCWZvciAocGxhbmVfaWQgPSBMQVlFUl8wOworCQkJCXBs YW5lX2lkIDwgS01CX01BWF9QTEFORVM7IHBsYW5lX2lkKyspIHsKKwkJCWlmIChrbWItPnBsYW5l X3N0YXR1c1twbGFuZV9pZF0uZGlzYWJsZSkgeworCQkJCWttYl9jbHJfYml0bWFza19sY2Qoa21i LAorCQkJCQkJICAgIExDRF9MQVlFUm5fRE1BX0NGRworCQkJCQkJICAgIChwbGFuZV9pZCksCisJ CQkJCQkgICAgTENEX0RNQV9MQVlFUl9FTkFCTEUpOworCisJCQkJa21iX2Nscl9iaXRtYXNrX2xj ZChrbWIsIExDRF9DT05UUk9MLAorCQkJCQkJICAgIGttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lk XS5jdHJsKTsKKworCQkJCWttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5kaXNhYmxlID0gZmFs c2U7CisJCQl9CisJCX0KKwkJaWYgKGttYi0+a21iX3VuZGVyX2Zsb3cpIHsKKwkJCS8qIERNQSBS ZWNvdmVyeSBhZnRlciB1bmRlcmZsb3cgKi8KKwkJCWRtYTBfc3RhdGUgPSAoa21iLT5sYXllcl9u byA9PSAwKSA/CisJCQkgICAgTENEX1ZJREVPMF9ETUEwX1NUQVRFIDogTENEX1ZJREVPMV9ETUEw X1NUQVRFOworCQkJZG1hMV9zdGF0ZSA9IChrbWItPmxheWVyX25vID09IDApID8KKwkJCSAgICBM Q0RfVklERU8wX0RNQTFfU1RBVEUgOiBMQ0RfVklERU8xX0RNQTFfU1RBVEU7CisKKwkJCWRvIHsK KwkJCQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0ZJRk9fRkxVU0gsIDEpOworCQkJCXZhbCA9IGtt Yl9yZWFkX2xjZChrbWIsIGRtYTBfc3RhdGUpCisJCQkJICAgICYgTENEX0RNQV9TVEFURV9BQ1RJ VkU7CisJCQkJdmFsMSA9IGttYl9yZWFkX2xjZChrbWIsIGRtYTFfc3RhdGUpCisJCQkJICAgICYg TENEX0RNQV9TVEFURV9BQ1RJVkU7CisJCQl9IHdoaWxlICgodmFsIHx8IHZhbDEpKTsKKwkJCS8q IGRpc2FibGUgZG1hICovCisJCQlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwKKwkJCQkJICAgIExD RF9MQVlFUm5fRE1BX0NGRyhrbWItPmxheWVyX25vKSwKKwkJCQkJICAgIExDRF9ETUFfTEFZRVJf RU5BQkxFKTsKKwkJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfRklGT19GTFVTSCwgMSk7CisJCQlr bWItPmttYl9mbHVzaF9kb25lID0gMTsKKwkJCWttYi0+a21iX3VuZGVyX2Zsb3cgPSAwOworCQl9 CisJfQorCisJaWYgKHN0YXR1cyAmIExDRF9JTlRfTElORV9DTVApIHsKKwkJLyogY2xlYXIgbGlu ZSBjb21wYXJlIGludGVycnVwdCAqLworCQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0lOVF9DTEVB UiwgTENEX0lOVF9MSU5FX0NNUCk7CisJfQorCisJaWYgKHN0YXR1cyAmIExDRF9JTlRfVkVSVF9D T01QKSB7CisJCS8qIFJlYWQgVlNUQVRVUyAqLworCQl2YWwgPSBrbWJfcmVhZF9sY2Qoa21iLCBM Q0RfVlNUQVRVUyk7CisJCXZhbCA9ICh2YWwgJiBMQ0RfVlNUQVRVU19WRVJUSUNBTF9TVEFUVVNf TUFTSyk7CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2UgTENEX1ZTVEFUVVNfQ09NUEFSRV9WU1lO QzoKKwkJCS8qIENsZWFyIHZlcnRpY2FsIGNvbXBhcmUgaW50ZXJydXB0ICovCisJCQlrbWJfd3Jp dGVfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9WRVJUX0NPTVApOworCQkJaWYgKGtt Yi0+a21iX2ZsdXNoX2RvbmUpIHsKKwkJCQlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwKKwkJCQkJ CSAgICBMQ0RfTEFZRVJuX0RNQV9DRkcKKwkJCQkJCSAgICAoa21iLT5sYXllcl9ubyksCisJCQkJ CQkgICAgTENEX0RNQV9MQVlFUl9FTkFCTEUpOworCQkJCWttYi0+a21iX2ZsdXNoX2RvbmUgPSAw OworCQkJfQorCQkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygma21iLT5jcnRjKTsKKwkJCWJyZWFr OworCQljYXNlIExDRF9WU1RBVFVTX0NPTVBBUkVfQkFDS1BPUkNIOgorCQljYXNlIExDRF9WU1RB VFVTX0NPTVBBUkVfQUNUSVZFOgorCQljYXNlIExDRF9WU1RBVFVTX0NPTVBBUkVfRlJPTlRfUE9S Q0g6CisJCQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9WRVJUX0NP TVApOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHN0YXR1cyAmIExDRF9JTlRfRE1BX0VSUikg eworCQl2YWwgPQorCQkgICAgKHN0YXR1cyAmIExDRF9JTlRfRE1BX0VSUiAmCisJCSAgICAga21i X3JlYWRfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUpKTsKKwkJLyogTEFZRVIwIC0gVkwwICovCisJ CWlmICh2YWwgJiAoTEFZRVIwX0RNQV9GSUZPX1VOREVSRkxPVyB8CisJCQkgICBMQVlFUjBfRE1B X0NCX0ZJRk9fVU5ERVJGTE9XIHwKKwkJCSAgIExBWUVSMF9ETUFfQ1JfRklGT19VTkRFUkZMT1cp KSB7CisJCQlrbWItPmttYl91bmRlcl9mbG93Kys7CisJCQlkcm1faW5mbygma21iLT5kcm0sCisJ CQkJICIhTEFZRVIwOlZMMCBETUEgVU5ERVJGTE9XIHZhbCA9IDB4JWx4LHVuZGVyX2Zsb3c9JWQi LAorCQkJICAgICB2YWwsIGttYi0+a21iX3VuZGVyX2Zsb3cpOworCQkJLyogZGlzYWJsZSB1bmRl cmZsb3cgaW50ZXJydXB0ICovCisJCQlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9F TkFCTEUsCisJCQkJCSAgICBMQVlFUjBfRE1BX0ZJRk9fVU5ERVJGTE9XIHwKKwkJCQkJICAgIExB WUVSMF9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAorCQkJCQkgICAgTEFZRVIwX0RNQV9DUl9GSUZP X1VOREVSRkxPVyk7CisJCQlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwK KwkJCQkJICAgIExBWUVSMF9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAorCQkJCQkgICAgTEFZRVIw X0RNQV9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBMQVlFUjBfRE1BX0NSX0ZJRk9fVU5ERVJG TE9XKTsKKwkJCS8qIGRpc2FibGUgYXV0byByZXN0YXJ0IG1vZGUgKi8KKwkJCWttYl9jbHJfYml0 bWFza19sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DRkcoMCksCisJCQkJCSAgICBMQ0RfRE1BX0xB WUVSX0NPTlRfUElOR19QT05HX1VQREFURSk7CisKKwkJCWttYi0+bGF5ZXJfbm8gPSAwOworCQl9 CisKKwkJaWYgKHZhbCAmIExBWUVSMF9ETUFfRklGT19PVkVSRkxPVykKKwkJCWRybV9kYmcoJmtt Yi0+ZHJtLAorCQkJCSJMQVlFUjA6VkwwIERNQSBPVkVSRkxPVyB2YWwgPSAweCVseCIsIHZhbCk7 CisJCWlmICh2YWwgJiBMQVlFUjBfRE1BX0NCX0ZJRk9fT1ZFUkZMT1cpCisJCQlkcm1fZGJnKCZr bWItPmRybSwKKwkJCQkiTEFZRVIwOlZMMCBETUEgQ0IgT1ZFUkZMT1cgdmFsID0gMHglbHgiLCB2 YWwpOworCQlpZiAodmFsICYgTEFZRVIwX0RNQV9DUl9GSUZPX09WRVJGTE9XKQorCQkJZHJtX2Ri Zygma21iLT5kcm0sCisJCQkJIkxBWUVSMDpWTDAgRE1BIENSIE9WRVJGTE9XIHZhbCA9IDB4JWx4 IiwgdmFsKTsKKworCQkvKiBMQVlFUjEgLSBWTDEgKi8KKwkJaWYgKHZhbCAmIChMQVlFUjFfRE1B X0ZJRk9fVU5ERVJGTE9XIHwKKwkJCSAgIExBWUVSMV9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAor CQkJICAgTEFZRVIxX0RNQV9DUl9GSUZPX1VOREVSRkxPVykpIHsKKwkJCWttYi0+a21iX3VuZGVy X2Zsb3crKzsKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQkgIiFMQVlFUjE6VkwxIERNQSBV TkRFUkZMT1cgdmFsID0gMHglbHgsIHVuZGVyX2Zsb3c9JWQiLAorCQkJICAgICB2YWwsIGttYi0+ a21iX3VuZGVyX2Zsb3cpOworCQkJLyogZGlzYWJsZSB1bmRlcmZsb3cgaW50ZXJydXB0ICovCisJ CQlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJCQkJCSAgICBMQVlF UjFfRE1BX0ZJRk9fVU5ERVJGTE9XIHwKKwkJCQkJICAgIExBWUVSMV9ETUFfQ0JfRklGT19VTkRF UkZMT1cgfAorCQkJCQkgICAgTEFZRVIxX0RNQV9DUl9GSUZPX1VOREVSRkxPVyk7CisJCQlrbWJf c2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwKKwkJCQkJICAgIExBWUVSMV9ETUFf Q0JfRklGT19VTkRFUkZMT1cgfAorCQkJCQkgICAgTEFZRVIxX0RNQV9GSUZPX1VOREVSRkxPVyB8 CisJCQkJCSAgICBMQVlFUjFfRE1BX0NSX0ZJRk9fVU5ERVJGTE9XKTsKKwkJCS8qIGRpc2FibGUg YXV0byByZXN0YXJ0IG1vZGUgKi8KKwkJCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0RfTEFZ RVJuX0RNQV9DRkcoMSksCisJCQkJCSAgICBMQ0RfRE1BX0xBWUVSX0NPTlRfUElOR19QT05HX1VQ REFURSk7CisJCQlrbWItPmxheWVyX25vID0gMTsKKwkJfQorCisJCS8qIExBWUVSMSAtIFZMMSAq LworCQlpZiAodmFsICYgTEFZRVIxX0RNQV9GSUZPX09WRVJGTE9XKQorCQkJZHJtX2RiZygma21i LT5kcm0sCisJCQkJIkxBWUVSMTpWTDEgRE1BIE9WRVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsK KwkJaWYgKHZhbCAmIExBWUVSMV9ETUFfQ0JfRklGT19PVkVSRkxPVykKKwkJCWRybV9kYmcoJmtt Yi0+ZHJtLAorCQkJCSJMQVlFUjE6VkwxIERNQSBDQiBPVkVSRkxPVyB2YWwgPSAweCVseCIsIHZh bCk7CisJCWlmICh2YWwgJiBMQVlFUjFfRE1BX0NSX0ZJRk9fT1ZFUkZMT1cpCisJCQlkcm1fZGJn KCZrbWItPmRybSwKKwkJCQkiTEFZRVIxOlZMMSBETUEgQ1IgT1ZFUkZMT1cgdmFsID0gMHglbHgi LCB2YWwpOworCisJCS8qIExBWUVSMiAtIEdMMCAqLworCQlpZiAodmFsICYgTEFZRVIyX0RNQV9G SUZPX1VOREVSRkxPVykKKwkJCWRybV9kYmcoJmttYi0+ZHJtLAorCQkJCSJMQVlFUjI6R0wwIERN QSBVTkRFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOworCQlpZiAodmFsICYgTEFZRVIyX0RNQV9G SUZPX09WRVJGTE9XKQorCQkJZHJtX2RiZygma21iLT5kcm0sCisJCQkJIkxBWUVSMjpHTDAgRE1B IE9WRVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKworCQkvKiBMQVlFUjMgLSBHTDEgKi8KKwkJ aWYgKHZhbCAmIExBWUVSM19ETUFfRklGT19VTkRFUkZMT1cpCisJCQlkcm1fZGJnKCZrbWItPmRy bSwKKwkJCQkiTEFZRVIzOkdMMSBETUEgVU5ERVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKwkJ aWYgKHZhbCAmIExBWUVSM19ETUFfRklGT19VTkRFUkZMT1cpCisJCQlkcm1fZGJnKCZrbWItPmRy bSwKKwkJCQkiTEFZRVIzOkdMMSBETUEgT1ZFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOworCX0K KworCXNwaW5fdW5sb2NrKCZrbWItPmlycV9sb2NrKTsKKworCWlmIChzdGF0dXMgJiBMQ0RfSU5U X0xBWUVSKSB7CisJCS8qIENsZWFyIGxheWVyIGludGVycnVwdHMgKi8KKwkJa21iX3dyaXRlX2xj ZChrbWIsIExDRF9JTlRfQ0xFQVIsIExDRF9JTlRfTEFZRVIpOworCX0KKworCS8qIENsZWFyIGFs bCBpbnRlcnJ1cHRzICovCisJa21iX3NldF9iaXRtYXNrX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIs IDEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogSVJRIGhhbmRsZXIgKi8KK3N0YXRp YyBpcnFyZXR1cm5fdCBrbWJfaXNyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopYXJnOworCisJaGFuZGxlX2xjZF9p cnEoZGV2KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGttYl9pcnFf cmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlrbWJfd3JpdGVfbGNkKHRvX2ttYihk cm0pLCBMQ0RfSU5UX0NMRUFSLCAweEZGRkYpOworCWttYl93cml0ZV9sY2QodG9fa21iKGRybSks IExDRF9JTlRfRU5BQkxFLCAwKTsKK30KKworREVGSU5FX0RSTV9HRU1fQ01BX0ZPUFMoZm9wcyk7 CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBrbWJfZHJpdmVyID0geworCS5kcml2ZXJfZmVh dHVyZXMgPSBEUklWRVJfR0VNIHwKKwkgICAgRFJJVkVSX01PREVTRVQgfCBEUklWRVJfQVRPTUlD LAorCS5pcnFfaGFuZGxlciA9IGttYl9pc3IsCisJLmlycV9wcmVpbnN0YWxsID0ga21iX2lycV9y ZXNldCwKKwkuaXJxX3VuaW5zdGFsbCA9IGttYl9pcnFfcmVzZXQsCisJLyogR0VNIE9wZXJhdGlv bnMgKi8KKwkuZm9wcyA9ICZmb3BzLAorCURSTV9HRU1fQ01BX0RSSVZFUl9PUFNfVk1BUCwKKwku bmFtZSA9ICJrbWItZHJtIiwKKwkuZGVzYyA9ICJLRUVNQkFZIERJU1BMQVkgRFJJVkVSICIsCisJ LmRhdGUgPSAiMjAyMDEwMDgiLAorCS5tYWpvciA9IDEsCisJLm1pbm9yID0gMCwKK307CisKK3N0 YXRpYyBpbnQga21iX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRv X2ttYihkcm0pOworCisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CisJZHJtX2ttc19oZWxwZXJf cG9sbF9maW5pKGRybSk7CisJb2Zfbm9kZV9wdXQoa21iLT5jcnRjLnBvcnQpOworCWttYi0+Y3J0 Yy5wb3J0ID0gTlVMTDsKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2KTsKKwlkcm1faXJx X3VuaW5zdGFsbChkcm0pOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5kZXYpOworCXBtX3J1 bnRpbWVfZGlzYWJsZShkcm0tPmRldik7CisKKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVh c2UoZHJtLT5kZXYpOworCisJLyogUmVsZWFzZSBjbGtzICovCisJa21iX2Rpc3BsYXlfY2xrX2Rp c2FibGUoa21iKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJLyogVW5yZWdp c3RlciBEU0kgaG9zdCAqLworCWttYl9kc2lfaG9zdF91bnJlZ2lzdGVyKGttYi0+a21iX2RzaSk7 CisJZHJtX2F0b21pY19oZWxwZXJfc2h1dGRvd24oZHJtKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBrbWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBnZXRfZGV2aWNlKCZwZGV2LT5kZXYpOworCXN0cnVjdCBrbWJfZHJt X3ByaXZhdGUgKmttYjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRzaV9p bjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRzaV9ub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKmRzaV9wZGV2OworCisJLyogVGhlIGJyaWRnZSAoQURWIDc1MzUpIHdpbGwgcmV0dXJuIC1F UFJPQkVfREVGRVIgdW50aWwgaXQKKwkgKiBoYXMgYSBtaXBpX2RzaV9ob3N0IHRvIHJlZ2lzdGVy IGl0cyBkZXZpY2UgdG8uIFNvLCB3ZQorCSAqIGZpcnN0IHJlZ2lzdGVyIHRoZSBEU0kgaG9zdCBk dXJpbmcgcHJvYmUgdGltZSwgYW5kIHRoZW4gcmV0dXJuCisJICogLUVQUk9CRV9ERUZFUiB1bnRp bCB0aGUgYnJpZGdlIGlzIGxvYWRlZC4gUHJvYmUgd2lsbCBiZSBjYWxsZWQgYWdhaW4KKwkgKiAg YW5kIHRoZW4gdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBjYW4gcHJvY2Vl ZAorCSAqICBhZnRlcndhcmRzIGFuZCB0aGUgYnJpZGdlIGNhbiBiZSBzdWNjZXNzZnVsbHkgYXR0 YWNoZWQuCisJICovCisJZHNpX2luID0gb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MoZGV2 LT5vZl9ub2RlLCAwLCAwKTsKKwlpZiAoIWRzaV9pbikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0 byBnZXQgZHNpX2luIG5vZGUgaW5mbyBmcm9tIERUIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K Kwlkc2lfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZHNpX2luKTsKKwlp ZiAoIWRzaV9ub2RlKSB7CisJCW9mX25vZGVfcHV0KGRzaV9pbik7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIGdldCBkc2kgbm9kZSBmcm9tIERUXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJZHNpX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGRzaV9ub2RlKTsKKwlpZiAoIWRz aV9wZGV2KSB7CisJCW9mX25vZGVfcHV0KGRzaV9pbik7CisJCW9mX25vZGVfcHV0KGRzaV9ub2Rl KTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGRzaSBwbGF0Zm9ybSBkZXZpY2VcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvZl9ub2RlX3B1dChkc2lfaW4pOworCW9mX25vZGVf cHV0KGRzaV9ub2RlKTsKKwlyZXQgPSBrbWJfZHNpX2hvc3RfYnJpZGdlX2luaXQoZ2V0X2Rldmlj ZSgmZHNpX3BkZXYtPmRldikpOworCisJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7CisJCXJl dHVybiAtRVBST0JFX0RFRkVSOworCX0gZWxzZSBpZiAocmV0KSB7CisJCURSTV9FUlJPUigicHJv YmUgZmFpbGVkIHRvIGluaXRpYWxpemUgRFNJIGhvc3QgYnJpZGdlXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwkvKiBDcmVhdGUgRFJNIGRldmljZSAqLworCWttYiA9IGRldm1fZHJtX2Rldl9h bGxvYyhkZXYsICZrbWJfZHJpdmVyLAorCQkJCSBzdHJ1Y3Qga21iX2RybV9wcml2YXRlLCBkcm0p OworCWlmIChJU19FUlIoa21iKSkKKwkJcmV0dXJuIFBUUl9FUlIoa21iKTsKKworCWRldl9zZXRf ZHJ2ZGF0YShkZXYsICZrbWItPmRybSk7CisKKwkvKiBJbml0aWFsaXplIE1JUEkgRFNJICovCisJ a21iLT5rbWJfZHNpID0ga21iX2RzaV9pbml0KGRzaV9wZGV2KTsKKwlpZiAoSVNfRVJSKGttYi0+ a21iX2RzaSkpIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBE U0lcbiIpOworCQlyZXQgPSBQVFJfRVJSKGttYi0+a21iX2RzaSk7CisJCWdvdG8gZXJyX2ZyZWUx OworCX0KKworCWttYi0+a21iX2RzaS0+ZGV2ID0gJmRzaV9wZGV2LT5kZXY7CisJa21iLT5rbWJf ZHNpLT5wZGV2ID0gZHNpX3BkZXY7CisJcmV0ID0ga21iX2h3X2luaXQoJmttYi0+ZHJtLCAwKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlMTsKKworCXJldCA9IGttYl9zZXR1cF9tb2RlX2Nv bmZpZygma21iLT5kcm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlyZXQgPSBk cm1faXJxX2luc3RhbGwoJmttYi0+ZHJtLCBrbWItPmlycV9sY2QpOworCWlmIChyZXQgPCAwKSB7 CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiZmFpbGVkIHRvIGluc3RhbGwgSVJRIGhhbmRsZXJcbiIp OworCQlnb3RvIGVycl9pcnE7CisJfQorCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KCZrbWIt PmRybSk7CisKKwkvKiBSZWdpc3RlciBncmFwaGljcyBkZXZpY2Ugd2l0aCB0aGUga2VybmVsICov CisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcigma21iLT5kcm0sIDApOworCWlmIChyZXQpCisJCWdv dG8gZXJyX3JlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKKyBlcnJfcmVnaXN0ZXI6CisJZHJtX2tt c19oZWxwZXJfcG9sbF9maW5pKCZrbWItPmRybSk7CisgZXJyX2lycToKKwlwbV9ydW50aW1lX2Rp c2FibGUoa21iLT5kcm0uZGV2KTsKKyBlcnJfZnJlZToKKwlkcm1fY3J0Y19jbGVhbnVwKCZrbWIt PmNydGMpOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKCZrbWItPmRybSk7CisgZXJyX2ZyZWUx OgorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWttYl9kc2lfaG9zdF91bnJlZ2lzdGVy KGttYi0+a21iX2RzaSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBrbWJfb2ZfbWF0Y2hbXSA9IHsKKwl7LmNvbXBhdGlibGUgPSAiaW50ZWws a2VlbWJheS1kaXNwbGF5In0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBr bWJfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGttYl9wbV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dl dF9kcnZkYXRhKGRldik7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gZHJtID8gdG9f a21iKGRybSkgOiBOVUxMOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7CisK KwlrbWItPnN0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZChkcm0pOworCWlmIChJU19F UlIoa21iLT5zdGF0ZSkpIHsKKwkJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKKwkJ cmV0dXJuIFBUUl9FUlIoa21iLT5zdGF0ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgX19tYXliZV91bnVzZWQga21iX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVj dCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IGRybSA/IHRvX2ttYihkcm0pIDogTlVMTDsKKworCWlm ICgha21iKQorCQlyZXR1cm4gMDsKKworCWRybV9hdG9taWNfaGVscGVyX3Jlc3VtZShkcm0sIGtt Yi0+c3RhdGUpOworCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRybSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGttYl9wbV9vcHMsIGttYl9wbV9zdXNw ZW5kLCBrbWJfcG1fcmVzdW1lKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIga21i X3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgPSBrbWJfcHJvYmUsCisJLnJlbW92ZSA9IGtt Yl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAia21iLWRybSIsCisJCS5wbSA9ICZr bWJfcG1fb3BzLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBrbWJfb2ZfbWF0Y2gsCisJfSwKK307CisK K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoa21iX3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9B VVRIT1IoIkludGVsIENvcnBvcmF0aW9uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIktlZW1iYXkg RGlzcGxheSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJf ZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlODA2NwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5oCkBAIC0wLDAgKzEsODgg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyAqCisgKiBDb3B5 cmlnaHQgwqkgMjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0tN Ql9EUlZfSF9fCisjZGVmaW5lIF9fS01CX0RSVl9IX18KKworI2luY2x1ZGUgPGRybS9kcm1fZGV2 aWNlLmg+CisKKyNpbmNsdWRlICJrbWJfcGxhbmUuaCIKKyNpbmNsdWRlICJrbWJfcmVncy5oIgor CisjZGVmaW5lIEtNQl9NQVhfV0lEVEgJCQkxOTIwIC8qTWF4IHdpZHRoIGluIHBpeGVscyAqLwor I2RlZmluZSBLTUJfTUFYX0hFSUdIVAkJCTEwODAgLypNYXggaGVpZ2h0IGluIHBpeGVscyAqLwor I2RlZmluZSBLTUJfTUlOX1dJRFRIICAgICAgICAgICAgICAgICAgIDE5MjAgLypNYXggd2lkdGgg aW4gcGl4ZWxzICovCisjZGVmaW5lIEtNQl9NSU5fSEVJR0hUICAgICAgICAgICAgICAgICAgMTA4 MCAvKk1heCBoZWlnaHQgaW4gcGl4ZWxzICovCisjZGVmaW5lIEtNQl9MQ0RfREVGQVVMVF9DTEsJ CTIwMDAwMDAwMAorI2RlZmluZSBLTUJfU1lTX0NMS19NSFoJCQk1MDAKKworI2RlZmluZSBJQ0FN X01NSU8JCTB4M2IxMDAwMDAKKyNkZWZpbmUgSUNBTV9MQ0RfT0ZGU0VUCQkweDEwODAKKyNkZWZp bmUgSUNBTV9NTUlPX1NJWkUJCTB4MjAwMAorCitzdHJ1Y3Qga21iX2RzaTsKKworc3RydWN0IGtt Yl9jbG9jayB7CisJc3RydWN0IGNsayAqY2xrX2xjZDsKKwlzdHJ1Y3QgY2xrICpjbGtfcGxsMDsK K307CisKK3N0cnVjdCBrbWJfZHJtX3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZGV2aWNlCQlkcm07 CisJc3RydWN0IGttYl9kc2kJCQkqa21iX2RzaTsKKwl2b2lkIF9faW9tZW0JCQkqbGNkX21taW87 CisJc3RydWN0IGttYl9jbG9jawkJa21iX2NsazsKKwlzdHJ1Y3QgZHJtX2NydGMJCQljcnRjOwor CXN0cnVjdCBrbWJfcGxhbmUJCSpwbGFuZTsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQkJKnN0 YXRlOworCXNwaW5sb2NrX3QJCQlpcnFfbG9jazsKKwlpbnQJCQkJaXJxX2xjZDsKKwlpbnQJCQkJ c3lzX2Nsa19taHo7CisJc3RydWN0IGxheWVyX3N0YXR1cwkJcGxhbmVfc3RhdHVzW0tNQl9NQVhf UExBTkVTXTsKKwlpbnQJCQkJa21iX3VuZGVyX2Zsb3c7CisJaW50CQkJCWttYl9mbHVzaF9kb25l OworCWludAkJCQlsYXllcl9ubzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGttYl9kcm1f cHJpdmF0ZSAqdG9fa21iKGNvbnN0IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJu IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUsIGRybSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqY3J0Y190b19rbWJfcHJpdihjb25z dCBzdHJ1Y3QgZHJtX2NydGMgKngpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qg a21iX2RybV9wcml2YXRlLCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl93cml0 ZV9sY2Qoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJIHVuc2lnbmVkIGludCBy ZWcsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIChkZXZfcC0+bGNkX21taW8gKyByZWcp KTsKK30KKworc3RhdGljIGlubGluZSB1MzIga21iX3JlYWRfbGNkKHN0cnVjdCBrbWJfZHJtX3By aXZhdGUgKmRldl9wLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiByZWFkbChkZXZfcC0+ bGNkX21taW8gKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX3NldF9iaXRtYXNr X2xjZChzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZfcCwKKwkJCQkgICAgICAgdW5zaWduZWQg aW50IHJlZywgdTMyIG1hc2spCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9sY2QoZGV2X3As IHJlZyk7CisKKwlrbWJfd3JpdGVfbGNkKGRldl9wLCByZWcsIChyZWdfdmFsIHwgbWFzaykpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX2Nscl9iaXRtYXNrX2xjZChzdHJ1Y3Qga21iX2Ry bV9wcml2YXRlICpkZXZfcCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdTMyIG1hc2sp Cit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9sY2QoZGV2X3AsIHJlZyk7CisKKwlrbWJfd3Jp dGVfbGNkKGRldl9wLCByZWcsIChyZWdfdmFsICYgKH5tYXNrKSkpOworfQorCitpbnQga21iX3Nl dHVwX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGttYl9zZXRfc2Nhbm91dChz dHJ1Y3Qga21iX2RybV9wcml2YXRlICpsY2QpOworI2VuZGlmIC8qIF9fS01CX0RSVl9IX18gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmMgYi9kcml2ZXJzL2dw dS9kcm0va21iL2ttYl9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmRkN2Q5YjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9wbGFu ZS5jCkBAIC0wLDAgKzEsNDkwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTgtMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f bWFuYWdlZC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisKKyNpbmNsdWRl ICJrbWJfZHJ2LmgiCisjaW5jbHVkZSAia21iX3BsYW5lLmgiCisjaW5jbHVkZSAia21iX3JlZ3Mu aCIKKworY29uc3QgdTMyIGxheWVyX2lycXNbXSA9IHsKKwlMQ0RfSU5UX1ZMMCwKKwlMQ0RfSU5U X1ZMMSwKKwlMQ0RfSU5UX0dMMCwKKwlMQ0RfSU5UX0dMMQorfTsKKworLyogQ29udmVyc2lvbiAo eXV2LT5yZ2IpIG1hdHJpeCBmcm9tIG15cmlhZHggKi8KK3N0YXRpYyBjb25zdCB1MzIgY3NjX2Nv ZWZfbGNkW10gPSB7CisJMTAyNCwgMCwgMTQzNiwKKwkxMDI0LCAtMzUyLCAtNzMxLAorCTEwMjQs IDE4MTQsIDAsCisJLTE3OSwgMTI1LCAtMjI2Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGNo ZWNrX3BpeGVsX2Zvcm1hdChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgdTMyIGZvcm1hdCkKK3sK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+Zm9ybWF0X2NvdW50OyBpKyspIHsK KwkJaWYgKHBsYW5lLT5mb3JtYXRfdHlwZXNbaV0gPT0gZm9ybWF0KQorCQkJcmV0dXJuIDA7CisJ fQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGttYl9wbGFuZV9hdG9taWNfY2hl Y2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgcmV0OworCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlib29sIGNhbl9wb3NpdGlvbjsKKwor CWZiID0gc3RhdGUtPmZiOworCWlmICghZmIgfHwgIXN0YXRlLT5jcnRjKQorCQlyZXR1cm4gMDsK KworCXJldCA9IGNoZWNrX3BpeGVsX2Zvcm1hdChwbGFuZSwgZmItPmZvcm1hdC0+Zm9ybWF0KTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHN0YXRlLT5jcnRjX3cgPiBLTUJfTUFY X1dJRFRIIHx8IHN0YXRlLT5jcnRjX2ggPiBLTUJfTUFYX0hFSUdIVCkKKwkJcmV0dXJuIC1FSU5W QUw7CisJaWYgKHN0YXRlLT5jcnRjX3cgPCBLTUJfTUlOX1dJRFRIIHx8IHN0YXRlLT5jcnRjX2gg PCBLTUJfTUlOX0hFSUdIVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FuX3Bvc2l0aW9uID0gKHBs YW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX09WRVJMQVkpOworCWNydGNfc3RhdGUgPQorCQlk cm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNy dGMpOworCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZShzdGF0ZSwg Y3J0Y19zdGF0ZSwKKwkJCQkJCSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCQkg RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkJIGNhbl9wb3NpdGlvbiwgdHJ1ZSk7 Cit9CisKK3N0YXRpYyB2b2lkIGttYl9wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQorewor CXN0cnVjdCBrbWJfcGxhbmUgKmttYl9wbGFuZSA9IHRvX2ttYl9wbGFuZShwbGFuZSk7CisJaW50 IHBsYW5lX2lkID0ga21iX3BsYW5lLT5pZDsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWI7 CisKKwlrbWIgPSB0b19rbWIocGxhbmUtPmRldik7CisKKwlzd2l0Y2ggKHBsYW5lX2lkKSB7CisJ Y2FzZSBMQVlFUl8wOgorCQlrbWItPnBsYW5lX3N0YXR1c1twbGFuZV9pZF0uY3RybCA9IExDRF9D VFJMX1ZMMV9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZRVJfMToKKwkJa21iLT5wbGFuZV9z dGF0dXNbcGxhbmVfaWRdLmN0cmwgPSBMQ0RfQ1RSTF9WTDJfRU5BQkxFOworCQlicmVhazsKKwlj YXNlIExBWUVSXzI6CisJCWttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5jdHJsID0gTENEX0NU UkxfR0wxX0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBMQVlFUl8zOgorCQlrbWItPnBsYW5lX3N0 YXR1c1twbGFuZV9pZF0uY3RybCA9IExDRF9DVFJMX0dMMl9FTkFCTEU7CisJCWJyZWFrOworCX0K KworCWttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5kaXNhYmxlID0gdHJ1ZTsKK30KKwordW5z aWduZWQgaW50IGdldF9waXhlbF9mb3JtYXQodTMyIGZvcm1hdCkKK3sKKwl1bnNpZ25lZCBpbnQg dmFsID0gMDsKKworCXN3aXRjaCAoZm9ybWF0KSB7CisJCS8qIHBsYW5hciBmb3JtYXRzICovCisJ Y2FzZSBEUk1fRk9STUFUX1lVVjQ0NDoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQ0 NFBMQU4gfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0U7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZP Uk1BVF9ZVlU0NDQ6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfWUNCQ1I0NDRQTEFOIHwgTENE X0xBWUVSX1BMQU5BUl9TVE9SQUdFCisJCSAgICB8IExDRF9MQVlFUl9DUkNCX09SREVSOworCQli cmVhazsKKwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFU X1lDQkNSNDIyUExBTiB8IExDRF9MQVlFUl9QTEFOQVJfU1RPUkFHRTsKKwkJYnJlYWs7CisJY2Fz ZSBEUk1fRk9STUFUX1lWVTQyMjoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQyMlBM QU4gfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0UKKwkJICAgIHwgTENEX0xBWUVSX0NSQ0JfT1JE RVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6CisJCXZhbCA9IExDRF9MQVlF Ul9GT1JNQVRfWUNCQ1I0MjBQTEFOIHwgTENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFOworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1lD QkNSNDIwUExBTiB8IExDRF9MQVlFUl9QTEFOQVJfU1RPUkFHRQorCQkgICAgfCBMQ0RfTEFZRVJf Q1JDQl9PUkRFUjsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX05WMTI6CisJCXZhbCA9IExD RF9MQVlFUl9GT1JNQVRfTlYxMiB8IExDRF9MQVlFUl9QTEFOQVJfU1RPUkFHRTsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX05WMjE6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfTlYxMiB8 IExDRF9MQVlFUl9QTEFOQVJfU1RPUkFHRQorCQkgICAgfCBMQ0RfTEFZRVJfQ1JDQl9PUkRFUjsK KwkJYnJlYWs7CisJCS8qIHBhY2tlZCBmb3JtYXRzICovCisJCS8qIGxvb2tzIGh3IHJlcXVpcmVz IEIgJiBHIHRvIGJlIHN3YXBwZWQgd2hlbiBSR0IgKi8KKwljYXNlIERSTV9GT1JNQVRfUkdCMzMy OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQjMzMiB8IExDRF9MQVlFUl9CR1JfT1JERVI7 CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSNDQ0NDoKKwkJdmFsID0gTENEX0xBWUVS X0ZPUk1BVF9SR0JYNDQ0NDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0Ogor CQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQkE0NDQ0IHwgTENEX0xBWUVSX0JHUl9PUkRFUjsK KwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FCR1I0NDQ0OgorCQl2YWwgPSBMQ0RfTEFZRVJf Rk9STUFUX1JHQkE0NDQ0OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6CisJ CXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfWFJHQjE1NTUgfCBMQ0RfTEFZRVJfQkdSX09SREVSOwor CQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjE1NTU6CisJCXZhbCA9IExDRF9MQVlFUl9G T1JNQVRfWFJHQjE1NTU7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKKwkJ dmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0JBMTU1NSB8IExDRF9MQVlFUl9CR1JfT1JERVI7CisJ CWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKKwkJdmFsID0gTENEX0xBWUVSX0ZP Uk1BVF9SR0JBMTU1NTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJdmFs ID0gTENEX0xBWUVSX0ZPUk1BVF9SR0I1NjUgfCBMQ0RfTEFZRVJfQkdSX09SREVSOworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JH QjU2NTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJdmFsID0gTENEX0xB WUVSX0ZPUk1BVF9SR0I4ODggfCBMQ0RfTEFZRVJfQkdSX09SREVSOworCQlicmVhazsKKwljYXNl IERSTV9GT1JNQVRfQkdSODg4OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQjg4ODsKKwkJ YnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9S TUFUX1JHQlg4ODg4IHwgTENEX0xBWUVSX0JHUl9PUkRFUjsKKwkJYnJlYWs7CisJY2FzZSBEUk1f Rk9STUFUX1hCR1I4ODg4OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQlg4ODg4OworCQli cmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JN QVRfUkdCQTg4ODggfCBMQ0RfTEFZRVJfQkdSX09SREVSOworCQlicmVhazsKKwljYXNlIERSTV9G T1JNQVRfQUJHUjg4ODg6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCQTg4ODg7CisJCWJy ZWFrOworCX0KKwlEUk1fSU5GT19PTkNFKCIlcyA6ICVkIGZvcm1hdD0weCV4IHZhbD0weCV4XG4i LAorCQkgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIGZvcm1hdCwgdmFsKTsKKwlyZXR1cm4gdmFs OworfQorCit1bnNpZ25lZCBpbnQgZ2V0X2JpdHNfcGVyX3BpeGVsKGNvbnN0IHN0cnVjdCBkcm1f Zm9ybWF0X2luZm8gKmZvcm1hdCkKK3sKKwl1MzIgYnBwID0gMDsKKwl1bnNpZ25lZCBpbnQgdmFs ID0gMDsKKworCWlmIChmb3JtYXQtPm51bV9wbGFuZXMgPiAxKSB7CisJCXZhbCA9IExDRF9MQVlF Ul84QlBQOworCQlyZXR1cm4gdmFsOworCX0KKworCWJwcCArPSA4ICogZm9ybWF0LT5jcHBbMF07 CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgODoKKwkJdmFsID0gTENEX0xBWUVSXzhCUFA7CisJ CWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCA9IExDRF9MQVlFUl8xNkJQUDsKKwkJYnJlYWs7CisJ Y2FzZSAyNDoKKwkJdmFsID0gTENEX0xBWUVSXzI0QlBQOworCQlicmVhazsKKwljYXNlIDMyOgor CQl2YWwgPSBMQ0RfTEFZRVJfMzJCUFA7CisJCWJyZWFrOworCX0KKworCURSTV9ERUJVRygiYnBw PSVkIHZhbD0weCV4XG4iLCBicHAsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZv aWQgY29uZmlnX2NzYyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIGludCBwbGFuZV9pZCkK K3sKKwkvKiBZVVYgdG8gUkdCIGNvbnZlcnNpb24gdXNpbmcgdGhlIGZpeGVkIG1hdHJpeCBjc2Nf Y29lZl9sY2QgKi8KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYxMShw bGFuZV9pZCksIGNzY19jb2VmX2xjZFswXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlF Um5fQ1NDX0NPRUZGMTIocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbMV0pOworCWttYl93cml0ZV9s Y2Qoa21iLCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjEzKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzJd KTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYyMShwbGFuZV9pZCks IGNzY19jb2VmX2xjZFszXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1NDX0NP RUZGMjIocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbNF0pOworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfTEFZRVJuX0NTQ19DT0VGRjIzKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzVdKTsKKwlrbWJf d3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYzMShwbGFuZV9pZCksIGNzY19jb2Vm X2xjZFs2XSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1NDX0NPRUZGMzIocGxh bmVfaWQpLCBjc2NfY29lZl9sY2RbN10pOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJu X0NTQ19DT0VGRjMzKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzhdKTsKKwlrbWJfd3JpdGVfbGNk KGttYiwgTENEX0xBWUVSbl9DU0NfT0ZGMShwbGFuZV9pZCksIGNzY19jb2VmX2xjZFs5XSk7CisJ a21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1NDX09GRjIocGxhbmVfaWQpLCBjc2NfY29l Zl9sY2RbMTBdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfT0ZGMyhwbGFu ZV9pZCksIGNzY19jb2VmX2xjZFsxMV0pOworfQorCitzdGF0aWMgdm9pZCBrbWJfcGxhbmVfYXRv bWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iOworCXVuc2lnbmVkIGludCB3aWR0aDsKKwl1bnNpZ25l ZCBpbnQgaGVpZ2h0OworCXVuc2lnbmVkIGludCBkbWFfbGVuOworCXN0cnVjdCBrbWJfcGxhbmUg KmttYl9wbGFuZTsKKwl1bnNpZ25lZCBpbnQgZG1hX2NmZzsKKwl1bnNpZ25lZCBpbnQgY3RybCA9 IDAsIHZhbCA9IDAsIG91dF9mb3JtYXQgPSAwOworCXVuc2lnbmVkIGludCBzcmNfdywgc3JjX2gs IGNydGNfeCwgY3J0Y195OworCXVuc2lnbmVkIGNoYXIgcGxhbmVfaWQ7CisJaW50IG51bV9wbGFu ZXM7CisJc3RhdGljIGRtYV9hZGRyX3QgYWRkcltNQVhfU1VCX1BMQU5FU107CisKKwlpZiAoIXBs YW5lIHx8ICFwbGFuZS0+c3RhdGUgfHwgIXN0YXRlKQorCQlyZXR1cm47CisKKwlmYiA9IHBsYW5l LT5zdGF0ZS0+ZmI7CisJaWYgKCFmYikKKwkJcmV0dXJuOworCW51bV9wbGFuZXMgPSBmYi0+Zm9y bWF0LT5udW1fcGxhbmVzOworCWttYl9wbGFuZSA9IHRvX2ttYl9wbGFuZShwbGFuZSk7CisJcGxh bmVfaWQgPSBrbWJfcGxhbmUtPmlkOworCisJa21iID0gdG9fa21iKHBsYW5lLT5kZXYpOworCisJ c3Bpbl9sb2NrX2lycSgma21iLT5pcnFfbG9jayk7CisJaWYgKGttYi0+a21iX3VuZGVyX2Zsb3cg fHwga21iLT5rbWJfZmx1c2hfZG9uZSkgeworCQlzcGluX3VubG9ja19pcnEoJmttYi0+aXJxX2xv Y2spOworCQlkcm1fZGJnKCZrbWItPmRybSwgInBsYW5lX3VwZGF0ZTp1bmRlcmZsb3chISEhIHJl dHVybmluZyIpOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycSgma21iLT5pcnFfbG9j ayk7CisKKwlzcmNfdyA9IChwbGFuZS0+c3RhdGUtPnNyY193ID4+IDE2KTsKKwlzcmNfaCA9IHBs YW5lLT5zdGF0ZS0+c3JjX2ggPj4gMTY7CisJY3J0Y194ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7 CisJY3J0Y195ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlkcm1fZGJnKCZrbWItPmRybSwK KwkJInNyY193PSVkIHNyY19oPSVkLCBmYi0+Zm9ybWF0LT5mb3JtYXQ9MHgleCBmYi0+ZmxhZ3M9 MHgleFxuIiwKKwkJICBzcmNfdywgc3JjX2gsIGZiLT5mb3JtYXQtPmZvcm1hdCwgZmItPmZsYWdz KTsKKworCXdpZHRoID0gZmItPndpZHRoOworCWhlaWdodCA9IGZiLT5oZWlnaHQ7CisJZG1hX2xl biA9ICh3aWR0aCAqIGhlaWdodCAqIGZiLT5mb3JtYXQtPmNwcFswXSk7CisJZHJtX2RiZygma21i LT5kcm0sICJkbWFfbGVuPSVkICIsIGRtYV9sZW4pOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0Rf TEFZRVJuX0RNQV9MRU4ocGxhbmVfaWQpLCBkbWFfbGVuKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwg TENEX0xBWUVSbl9ETUFfTEVOX1NIQURPVyhwbGFuZV9pZCksIGRtYV9sZW4pOworCWttYl93cml0 ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9MSU5FX1ZTVFJJREUocGxhbmVfaWQpLAorCQkgICAg ICBmYi0+cGl0Y2hlc1swXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX0xJ TkVfV0lEVEgocGxhbmVfaWQpLAorCQkgICAgICAod2lkdGggKiBmYi0+Zm9ybWF0LT5jcHBbMF0p KTsKKworCWFkZHJbWV9QTEFORV0gPSBkcm1fZmJfY21hX2dldF9nZW1fYWRkcihmYiwgcGxhbmUt PnN0YXRlLCAwKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9ETUFfU1RBUlRfQURE UihwbGFuZV9pZCksCisJCSAgICAgIGFkZHJbWV9QTEFORV0gKyBmYi0+b2Zmc2V0c1swXSk7CisJ dmFsID0gZ2V0X3BpeGVsX2Zvcm1hdChmYi0+Zm9ybWF0LT5mb3JtYXQpOworCXZhbCB8PSBnZXRf Yml0c19wZXJfcGl4ZWwoZmItPmZvcm1hdCk7CisJLyogUHJvZ3JhbSBDYi9DciBmb3IgcGxhbmFy IGZvcm1hdHMgKi8KKwlpZiAobnVtX3BsYW5lcyA+IDEpIHsKKwkJa21iX3dyaXRlX2xjZChrbWIs IExDRF9MQVlFUm5fRE1BX0NCX0xJTkVfVlNUUklERShwbGFuZV9pZCksCisJCQkgICAgICB3aWR0 aCAqIGZiLT5mb3JtYXQtPmNwcFswXSk7CisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJu X0RNQV9DQl9MSU5FX1dJRFRIKHBsYW5lX2lkKSwKKwkJCSAgICAgICh3aWR0aCAqIGZiLT5mb3Jt YXQtPmNwcFswXSkpOworCisJCWFkZHJbVV9QTEFORV0gPSBkcm1fZmJfY21hX2dldF9nZW1fYWRk cihmYiwgcGxhbmUtPnN0YXRlLAorCQkJCQkJCVVfUExBTkUpOworCQkvKiBjaGVjayBpZiBDYi9D ciBpcyBzd2FwcGVkKi8KKwkJaWYgKG51bV9wbGFuZXMgPT0gMyAmJiAodmFsICYgTENEX0xBWUVS X0NSQ0JfT1JERVIpKQorCQkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJICAgICAgTENEX0xBWUVS bl9ETUFfU1RBUlRfQ1JfQURSKHBsYW5lX2lkKSwKKwkJCQkJYWRkcltVX1BMQU5FXSk7CisJCWVs c2UKKwkJCWttYl93cml0ZV9sY2Qoa21iLAorCQkJCSAgICAgIExDRF9MQVlFUm5fRE1BX1NUQVJU X0NCX0FEUihwbGFuZV9pZCksCisJCQkJCWFkZHJbVV9QTEFORV0pOworCisJCWlmIChudW1fcGxh bmVzID09IDMpIHsKKwkJCWttYl93cml0ZV9sY2Qoa21iLAorCQkJCSAgICAgIExDRF9MQVlFUm5f RE1BX0NSX0xJTkVfVlNUUklERShwbGFuZV9pZCksCisJCQkJICAgICAgKCh3aWR0aCkgKiBmYi0+ Zm9ybWF0LT5jcHBbMF0pKTsKKworCQkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJICAgICAgTENE X0xBWUVSbl9ETUFfQ1JfTElORV9XSURUSChwbGFuZV9pZCksCisJCQkJICAgICAgKCh3aWR0aCkg KiBmYi0+Zm9ybWF0LT5jcHBbMF0pKTsKKworCQkJYWRkcltWX1BMQU5FXSA9IGRybV9mYl9jbWFf Z2V0X2dlbV9hZGRyKGZiLAorCQkJCQkJCQlwbGFuZS0+c3RhdGUsCisJCQkJCQkJCVZfUExBTkUp OworCisJCQkvKiBjaGVjayBpZiBDYi9DciBpcyBzd2FwcGVkKi8KKwkJCWlmICh2YWwgJiBMQ0Rf TEFZRVJfQ1JDQl9PUkRFUikKKwkJCQlrbWJfd3JpdGVfbGNkKGttYiwKKwkJCQkJICAgICAgTENE X0xBWUVSbl9ETUFfU1RBUlRfQ0JfQURSKHBsYW5lX2lkKSwKKwkJCQkJICAgICAgYWRkcltWX1BM QU5FXSk7CisJCQllbHNlCisJCQkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJCSAgICAgIExDRF9M QVlFUm5fRE1BX1NUQVJUX0NSX0FEUihwbGFuZV9pZCksCisJCQkJCSAgICAgIGFkZHJbVl9QTEFO RV0pOworCQl9CisJfQorCisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fV0lEVEgocGxh bmVfaWQpLCBzcmNfdyAtIDEpOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0hFSUdI VChwbGFuZV9pZCksIHNyY19oIC0gMSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5f Q09MX1NUQVJUKHBsYW5lX2lkKSwgY3J0Y194KTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xB WUVSbl9ST1dfU1RBUlQocGxhbmVfaWQpLCBjcnRjX3kpOworCisJdmFsIHw9IExDRF9MQVlFUl9G SUZPXzEwMDsKKworCWlmICh2YWwgJiBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0UpIHsKKwkJdmFs IHw9IExDRF9MQVlFUl9DU0NfRU47CisKKwkJLyogRW5hYmxlIENTQyBpZiBpbnB1dCBpcyBwbGFu YXIgYW5kIG91dHB1dCBpcyBSR0IgKi8KKwkJY29uZmlnX2NzYyhrbWIsIHBsYW5lX2lkKTsKKwl9 CisKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DRkcocGxhbmVfaWQpLCB2YWwpOwor CisJc3dpdGNoIChwbGFuZV9pZCkgeworCWNhc2UgTEFZRVJfMDoKKwkJY3RybCA9IExDRF9DVFJM X1ZMMV9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZRVJfMToKKwkJY3RybCA9IExDRF9DVFJM X1ZMMl9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZRVJfMjoKKwkJY3RybCA9IExDRF9DVFJM X0dMMV9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZRVJfMzoKKwkJY3RybCA9IExDRF9DVFJM X0dMMl9FTkFCTEU7CisJCWJyZWFrOworCX0KKworCWN0cmwgfD0gTENEX0NUUkxfUFJPR1JFU1NJ VkUgfCBMQ0RfQ1RSTF9USU1fR0VOX0VOQUJMRQorCSAgICB8IExDRF9DVFJMX0NPTlRJTlVPVVMg fCBMQ0RfQ1RSTF9PVVRQVVRfRU5BQkxFRDsKKworCS8qIExDRCBpcyBjb25uZWN0ZWQgdG8gTUlQ SSBvbiBrbWIKKwkgKiBUaGVyZWZvcmUgdGhpcyBiaXQgaXMgcmVxdWlyZWQgZm9yIERTSSBUeAor CSAqLworCWN0cmwgfD0gTENEX0NUUkxfVkhTWU5DX0lETEVfTFZMOworCisJa21iX3NldF9iaXRt YXNrX2xjZChrbWIsIExDRF9DT05UUk9MLCBjdHJsKTsKKworCS8qIEZJWE1FIG5vIGRvYyBvbiBo b3cgdG8gc2V0IG91dHB1dCBmb3JtYXQsdGhlc2UgdmFsdWVzIGFyZQorCSAqIHRha2VuIGZyb20g dGhlIE15cmlhZHggdGVzdHMKKwkgKi8KKwlvdXRfZm9ybWF0IHw9IExDRF9PVVRGX0ZPUk1BVF9S R0I4ODg7CisKKwkvKiBMZWF2ZSBSR0Igb3JkZXIsY29udmVyc2lvbiBtb2RlIGFuZCBjbGlwIG1v ZGUgdG8gZGVmYXVsdCAqLworCS8qIGRvIG5vdCBpbnRlcmxlYXZlIFJHQiBjaGFubmVscyBmb3Ig bWlwaSBUeCBjb21wYXRpYmlsaXR5ICovCisJb3V0X2Zvcm1hdCB8PSBMQ0RfT1VURl9NSVBJX1JH Ql9NT0RFOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfT1VUX0ZPUk1BVF9DRkcsIG91dF9mb3Jt YXQpOworCisJZG1hX2NmZyA9IExDRF9ETUFfTEFZRVJfRU5BQkxFIHwgTENEX0RNQV9MQVlFUl9W U1RSSURFX0VOIHwKKwkgICAgTENEX0RNQV9MQVlFUl9DT05UX1VQREFURSB8IExDRF9ETUFfTEFZ RVJfQVhJX0JVUlNUXzE2OworCisJLyogRW5hYmxlIERNQSAqLworCWttYl93cml0ZV9sY2Qoa21i LCBMQ0RfTEFZRVJuX0RNQV9DRkcocGxhbmVfaWQpLCBkbWFfY2ZnKTsKKwlkcm1fZGJnKCZrbWIt PmRybSwgImRtYV9jZmc9MHgleCBMQ0RfRE1BX0NGRz0weCV4XG4iLCBkbWFfY2ZnLAorCQlrbWJf cmVhZF9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DRkcocGxhbmVfaWQpKSk7CisKKwlrbWJfc2V0 X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9FT0YgfAorCQkJTENEX0lO VF9ETUFfRVJSKTsKKwlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsIExD RF9JTlRfRU9GIHwKKwkJCUxDRF9JTlRfRE1BX0VSUik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBrbWJfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5h dG9taWNfY2hlY2sgPSBrbWJfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRlID0g a21iX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0ga21iX3BsYW5lX2F0 b21pY19kaXNhYmxlCit9OworCit2b2lkIGttYl9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKQoreworCXN0cnVjdCBrbWJfcGxhbmUgKmttYl9wbGFuZSA9IHRvX2ttYl9wbGFu ZShwbGFuZSk7CisKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJa2ZyZWUoa21iX3BsYW5l KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mga21iX3BsYW5lX2Z1 bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUs CisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5k ZXN0cm95ID0ga21iX3BsYW5lX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBl cl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0cnVjdCBrbWJfcGxhbmUg KmttYl9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IGttYl9k cm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRybSk7CisJc3RydWN0IGttYl9wbGFuZSAqcGxhbmUg PSBOVUxMOworCXN0cnVjdCBrbWJfcGxhbmUgKnByaW1hcnkgPSBOVUxMOworCWludCBpID0gMDsK KwlpbnQgcmV0ID0gMDsKKwllbnVtIGRybV9wbGFuZV90eXBlIHBsYW5lX3R5cGU7CisJY29uc3Qg dTMyICpwbGFuZV9mb3JtYXRzOworCWludCBudW1fcGxhbmVfZm9ybWF0czsKKworCWZvciAoaSA9 IDA7IGkgPCBLTUJfTUFYX1BMQU5FUzsgaSsrKSB7CisJCXBsYW5lID0gZHJtbV9remFsbG9jKGRy bSwgc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOworCisJCWlmICghcGxhbmUpIHsKKwkJCWRy bV9lcnIoZHJtLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBsYW5lXG4iKTsKKwkJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCQl9CisKKwkJcGxhbmVfdHlwZSA9IChpID09IDApID8gRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSA6CisJCSAgICBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOworCQlpZiAoaSA8 IDIpIHsKKwkJCXBsYW5lX2Zvcm1hdHMgPSBrbWJfZm9ybWF0c192OworCQkJbnVtX3BsYW5lX2Zv cm1hdHMgPSBBUlJBWV9TSVpFKGttYl9mb3JtYXRzX3YpOworCQl9IGVsc2UgeworCQkJcGxhbmVf Zm9ybWF0cyA9IGttYl9mb3JtYXRzX2c7CisJCQludW1fcGxhbmVfZm9ybWF0cyA9IEFSUkFZX1NJ WkUoa21iX2Zvcm1hdHNfZyk7CisJCX0KKworCQlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2lu aXQoZHJtLCAmcGxhbmUtPmJhc2VfcGxhbmUsCisJCQkJCSAgICAgICBQT1NTSUJMRV9DUlRDUywg JmttYl9wbGFuZV9mdW5jcywKKwkJCQkJICAgICAgIHBsYW5lX2Zvcm1hdHMsIG51bV9wbGFuZV9m b3JtYXRzLAorCQkJCQkgICAgICAgTlVMTCwgcGxhbmVfdHlwZSwgInBsYW5lICVkIiwgaSk7CisJ CWlmIChyZXQgPCAwKSB7CisJCQlkcm1fZXJyKGRybSwgImRybV91bml2ZXJzYWxfcGxhbmVfaW5p dCBmYWlsZWQgKHJldD0lZCkiLAorCQkJCXJldCk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJ ZHJtX2RiZyhkcm0sICIlcyA6ICVkIGk9JWQgdHlwZT0lZCIsCisJCQlfX2Z1bmNfXywgX19MSU5F X18sCisJCQkgIGksIHBsYW5lX3R5cGUpOworCQlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUt PmJhc2VfcGxhbmUsCisJCQkJICAgICAma21iX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJCWlmIChw bGFuZV90eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpIHsKKwkJCXByaW1hcnkgPSBwbGFu ZTsKKwkJCWttYi0+cGxhbmUgPSBwbGFuZTsKKwkJfQorCQlkcm1fZGJnKGRybSwgIiVzIDogJWQg cHJpbWFyeT0lcFxuIiwgX19mdW5jX18sIF9fTElORV9fLAorCQkJJnByaW1hcnktPmJhc2VfcGxh bmUpOworCQlwbGFuZS0+aWQgPSBpOworCX0KKworCXJldHVybiBwcmltYXJ5OworY2xlYW51cDoK Kwlkcm1tX2tmcmVlKGRybSwgcGxhbmUpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJt L2ttYi9rbWJfcGxhbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzUw MTEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuaApA QCAtMCwwICsxLDk5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 CisgKgorICogQ29weXJpZ2h0IMKpIDIwMTgtMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisK KyNpZm5kZWYgX19LTUJfUExBTkVfSF9fCisjZGVmaW5lIF9fS01CX1BMQU5FX0hfXworCisjaW5j bHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+CisKKyNk ZWZpbmUgTENEX0lOVF9WTDBfRVJSICgoTEFZRVIwX0RNQV9GSUZPX1VOREVSRkxPVykgfCBcCisJ CQkoTEFZRVIwX0RNQV9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShMQVlFUjBfRE1BX0NCX0ZJRk9f T1ZFUkZMT1cpIHwgXAorCQkJKExBWUVSMF9ETUFfQ0JfRklGT19VTkRFUkZMT1cpIHwgXAorCQkJ KExBWUVSMF9ETUFfQ1JfRklGT19PVkVSRkxPVykgfCBcCisJCQkoTEFZRVIwX0RNQV9DUl9GSUZP X1VOREVSRkxPVykpCisKKyNkZWZpbmUgTENEX0lOVF9WTDFfRVJSICgoTEFZRVIxX0RNQV9GSUZP X1VOREVSRkxPVykgfCBcCisJCQkoTEFZRVIxX0RNQV9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShM QVlFUjFfRE1BX0NCX0ZJRk9fT1ZFUkZMT1cpIHwgXAorCQkJKExBWUVSMV9ETUFfQ0JfRklGT19V TkRFUkZMT1cpIHwgXAorCQkJKExBWUVSMV9ETUFfQ1JfRklGT19PVkVSRkxPVykgfCBcCisJCQko TEFZRVIxX0RNQV9DUl9GSUZPX1VOREVSRkxPVykpCisKKyNkZWZpbmUgTENEX0lOVF9HTDBfRVJS IChMQVlFUjJfRE1BX0ZJRk9fT1ZFUkZMT1cgfCBMQVlFUjJfRE1BX0ZJRk9fVU5ERVJGTE9XKQor I2RlZmluZSBMQ0RfSU5UX0dMMV9FUlIgKExBWUVSM19ETUFfRklGT19PVkVSRkxPVyB8IExBWUVS M19ETUFfRklGT19VTkRFUkZMT1cpCisjZGVmaW5lIExDRF9JTlRfVkwwIChMQVlFUjBfRE1BX0RP TkUgfCBMQVlFUjBfRE1BX0lETEUgfCBMQ0RfSU5UX1ZMMF9FUlIpCisjZGVmaW5lIExDRF9JTlRf VkwxIChMQVlFUjFfRE1BX0RPTkUgfCBMQVlFUjFfRE1BX0lETEUgfCBMQ0RfSU5UX1ZMMV9FUlIp CisjZGVmaW5lIExDRF9JTlRfR0wwIChMQVlFUjJfRE1BX0RPTkUgfCBMQVlFUjJfRE1BX0lETEUg fCBMQ0RfSU5UX0dMMF9FUlIpCisjZGVmaW5lIExDRF9JTlRfR0wxIChMQVlFUjNfRE1BX0RPTkUg fCBMQVlFUjNfRE1BX0lETEUgfCBMQ0RfSU5UX0dMMV9FUlIpCisjZGVmaW5lIExDRF9JTlRfRE1B X0VSUiAoTENEX0lOVF9WTDBfRVJSIHwgTENEX0lOVF9WTDFfRVJSIFwKKwkJfCBMQ0RfSU5UX0dM MF9FUlIgfCBMQ0RfSU5UX0dMMV9FUlIpCisKKyNkZWZpbmUgUE9TU0lCTEVfQ1JUQ1MgMQorI2Rl ZmluZSB0b19rbWJfcGxhbmUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBrbWJfcGxhbmUsIGJh c2VfcGxhbmUpCisKK2VudW0gbGF5ZXJfaWQgeworCUxBWUVSXzAsCisJTEFZRVJfMSwKKwlMQVlF Ul8yLAorCUxBWUVSXzMsCisJLyogS01CX01BWF9QTEFORVMgKi8KK307CisKKyNkZWZpbmUgS01C X01BWF9QTEFORVMgMQorCitlbnVtIHN1Yl9wbGFuZV9pZCB7CisJWV9QTEFORSwKKwlVX1BMQU5F LAorCVZfUExBTkUsCisJTUFYX1NVQl9QTEFORVMsCit9OworCitzdHJ1Y3Qga21iX3BsYW5lIHsK KwlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2VfcGxhbmU7CisJdW5zaWduZWQgY2hhciBpZDsKK307CisK Ky8qIEdyYXBoaWNzIGxheWVyIChsYXllcnMgMiAmIDMpIGZvcm1hdHMsIG9ubHkgcGFja2VkIGZv cm1hdHMgIGFyZSBzdXBwb3J0ZWQgKi8KK3N0YXRpYyBjb25zdCB1MzIga21iX2Zvcm1hdHNfZ1td ID0geworCURSTV9GT1JNQVRfUkdCMzMyLAorCURSTV9GT1JNQVRfWFJHQjQ0NDQsIERSTV9GT1JN QVRfWEJHUjQ0NDQsCisJRFJNX0ZPUk1BVF9BUkdCNDQ0NCwgRFJNX0ZPUk1BVF9BQkdSNDQ0NCwK KwlEUk1fRk9STUFUX1hSR0IxNTU1LCBEUk1fRk9STUFUX1hCR1IxNTU1LAorCURSTV9GT1JNQVRf QVJHQjE1NTUsIERSTV9GT1JNQVRfQUJHUjE1NTUsCisJRFJNX0ZPUk1BVF9SR0I1NjUsIERSTV9G T1JNQVRfQkdSNTY1LAorCURSTV9GT1JNQVRfUkdCODg4LCBEUk1fRk9STUFUX0JHUjg4OCwKKwlE Uk1fRk9STUFUX1hSR0I4ODg4LCBEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfQVJH Qjg4ODgsIERSTV9GT1JNQVRfQUJHUjg4ODgsCit9OworCisvKiBWaWRlbyBsYXllciAoIDAgJiAx KSBmb3JtYXRzLCBwYWNrZWQgYW5kIHBsYW5hciBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8KK3N0 YXRpYyBjb25zdCB1MzIga21iX2Zvcm1hdHNfdltdID0geworCS8qIHBhY2tlZCBmb3JtYXRzICov CisJRFJNX0ZPUk1BVF9SR0IzMzIsCisJRFJNX0ZPUk1BVF9YUkdCNDQ0NCwgRFJNX0ZPUk1BVF9Y QkdSNDQ0NCwKKwlEUk1fRk9STUFUX0FSR0I0NDQ0LCBEUk1fRk9STUFUX0FCR1I0NDQ0LAorCURS TV9GT1JNQVRfWFJHQjE1NTUsIERSTV9GT1JNQVRfWEJHUjE1NTUsCisJRFJNX0ZPUk1BVF9BUkdC MTU1NSwgRFJNX0ZPUk1BVF9BQkdSMTU1NSwKKwlEUk1fRk9STUFUX1JHQjU2NSwgRFJNX0ZPUk1B VF9CR1I1NjUsCisJRFJNX0ZPUk1BVF9SR0I4ODgsIERSTV9GT1JNQVRfQkdSODg4LAorCURSTV9G T1JNQVRfWFJHQjg4ODgsIERSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4 OCwgRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwkvKnBsYW5hciBmb3JtYXRzICovCisJRFJNX0ZPUk1B VF9ZVVY0MjAsIERSTV9GT1JNQVRfWVZVNDIwLAorCURSTV9GT1JNQVRfWVVWNDIyLCBEUk1fRk9S TUFUX1lWVTQyMiwKKwlEUk1fRk9STUFUX1lVVjQ0NCwgRFJNX0ZPUk1BVF9ZVlU0NDQsCisJRFJN X0ZPUk1BVF9OVjEyLCBEUk1fRk9STUFUX05WMjEsCit9OworCitzdHJ1Y3QgbGF5ZXJfc3RhdHVz IHsKKwlib29sIGRpc2FibGU7CisJdTMyIGN0cmw7Cit9OworCitzdHJ1Y3Qga21iX3BsYW5lICpr bWJfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKK3ZvaWQga21iX3BsYW5lX2Rl c3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOworI2VuZGlmIC8qIF9fS01CX1BMQU5FX0hf XyAqLwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=