From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yannick Fertre Subject: [PATCH v1 2/7] drm/st: Add STM32 LTDC driver Date: Mon, 16 Jan 2017 14:28:59 +0100 Message-ID: <1484573344-11609-3-git-send-email-yannick.fertre@st.com> References: <1484573344-11609-1-git-send-email-yannick.fertre@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1484573344-11609-1-git-send-email-yannick.fertre@st.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandre TORGUE , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann Cc: devicetree@vger.kernel.org, kernel@stlinux.com, Philippe Cornu , dri-devel@lists.freedesktop.org, Mickael Reulier , Gabriel FERNANDEZ , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTVE0zMiBMQ0QtVEZUIGRpc3BsYXkgY29u dHJvbGxlci4KClNpZ25lZC1vZmYtYnk6IFlhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBz dC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgIHwgICAgMiArCiBkcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9zdC9LY29uZmln ICB8ICAgMTQgKwogZHJpdmVycy9ncHUvZHJtL3N0L01ha2VmaWxlIHwgICAgNyArCiBkcml2ZXJz L2dwdS9kcm0vc3QvZHJ2LmMgICAgfCAgMjc5ICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3N0 L2Rydi5oICAgIHwgICAyNSArCiBkcml2ZXJzL2dwdS9kcm0vc3QvbHRkYy5jICAgfCAxNDM4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9zdC9sdGRjLmggICB8ICAgMjAgKwogOCBmaWxlcyBjaGFuZ2VkLCAxNzg2IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc3QvS2NvbmZpZwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9zdC9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9zdC9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdC9s dGRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc3QvbHRkYy5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZwppbmRleCA2ZjNmOWU2Li5kOGU2ZjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjM3LDYgKzIzNyw4IEBAIHNv dXJjZSAiZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJz L2dwdS9kcm0vdGVncmEvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0vc3QvS2Nv bmZpZyIKKwogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyIKIAogc291cmNl ICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggOTJkZTM5OS4u NzQzNGMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtODEsNiArODEsNyBAQCBvYmotJChDT05GSUdfRFJNX0JP Q0hTKSArPSBib2Nocy8KIG9iai0kKENPTkZJR19EUk1fVklSVElPX0dQVSkgKz0gdmlydGlvLwog b2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9 IHRlZ3JhLworb2JqLSQoQ09ORklHX0RSTV9TVCkgKz0gc3QvCiBvYmotJChDT05GSUdfRFJNX1NU SSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KIG9iai0kKENPTkZJR19E Uk1fTUVESUFURUspICs9IG1lZGlhdGVrLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N0 L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vc3QvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5mYTBhYzBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3N0L0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorY29uZmlnIERSTV9TVAorCXRyaXN0YXRl ICJEUk0gU3VwcG9ydCBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIFNvQyBTZXJpZXMiCisJZGVwZW5k cyBvbiBEUk0gJiYgKEFSQ0hfU1RNMzIgfHwgQVJDSF9NVUxUSVBMQVRGT1JNKQorCXNlbGVjdCBE Uk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxlY3QgRFJNX0tN U19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9QQU5FTAorCXNlbGVjdCBWSURFT01PREVfSEVMUEVS UworCXNlbGVjdCBGQl9QUk9WSURFX0dFVF9GQl9VTk1BUFBFRF9BUkVBCisJaGVscAorCSAgQ2hv b3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIFNUIFNUTWljcm9lbGVjdHJvbmljcyBTb0Mu CisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6 IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHN0LWRybS4KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9zdC9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE5MDI1Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL3N0L01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorY2NmbGFncy15 IDo9IC1JaW5jbHVkZS9kcm0KKworc3QtZHJtLXkgOj0gXAorCWRydi5vIFwKKwlsdGRjLm8KKwor b2JqLSQoQ09ORklHX0RSTV9TVCkgKz0gc3QtZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9zdC9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdC9kcnYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5hMjc1MDE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3N0L2Rydi5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBT VE1pY3JvZWxlY3Ryb25pY3MgU0EgMjAxNworICoKKyAqIEF1dGhvcnM6IFBoaWxpcHBlIENvcm51 IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+CisgKiAgICAgICAgICBZYW5uaWNrIEZlcnRyZSA8eWFu bmljay5mZXJ0cmVAc3QuY29tPgorICogICAgICAgICAgRmFiaWVuIERlc3Nlbm5lIDxmYWJpZW4u ZGVzc2VubmVAc3QuY29tPgorICogICAgICAgICAgTWlja2FlbCBSZXVsaWVyIDxtaWNrYWVsLnJl dWxpZXJAc3QuY29tPgorICoKKyAqIExpY2Vuc2UgdGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVu dC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisKKyNpbmNsdWRlICJkcnYu aCIKKyNpbmNsdWRlICJsdGRjLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJInN0IgorI2RlZmlu ZSBEUklWRVJfREVTQwkiU1RNaWNyb2VsZWN0cm9uaWNzIFNvQyBEUk0iCisjZGVmaW5lIERSSVZF Ul9EQVRFCSIyMDE3MDExMCIKKyNkZWZpbmUgRFJJVkVSX01BSk9SCTEKKyNkZWZpbmUgRFJJVkVS X01JTk9SCTAKKworI2RlZmluZSBTVF9NQVhfRkJfV0lEVEgJCTIwNDgKKyNkZWZpbmUgU1RfTUFY X0ZCX0hFSUdIVAkyMDQ4IC8qIHNhbWUgYXMgd2lkdGggdG8gaGFuZGxlIG9yaWVudGF0aW9uICov CisKK3N0YXRpYyB2b2lkIHN0X291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2Ug KmRkZXYpCit7CisJc3RydWN0IHN0X3ByaXZhdGUgKnByaXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsK KworCWRybV9mYmRldl9jbWFfaG90cGx1Z19ldmVudChwcml2LT5mYmRldik7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHN0X21vZGVfY29uZmlnX2Z1bmNz ID0geworCS5mYl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKKwkub3V0cHV0X3BvbGxfY2hh bmdlZCA9IHN0X291dHB1dF9wb2xsX2NoYW5nZWQsCisJLmF0b21pY19jaGVjayA9IGRybV9hdG9t aWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29t bWl0LAorfTsKKworc3RhdGljIHZvaWQgc3RfbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldikKK3sKKwlkZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSAwOworCWRkZXYt Pm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAwOworCisJLyoKKwkgKiBzZXQgbWF4IHdpZHRoIGFu ZCBoZWlnaHQgYXMgZGVmYXVsdCB2YWx1ZS4KKwkgKiB0aGlzIHZhbHVlIHdvdWxkIGJlIHVzZWQg dG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJICogYXQgZHJtX21vZGVfYWRk ZmIoKS4KKwkgKi8KKwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSBTVF9NQVhfRkJfV0lE VEg7CisJZGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IFNUX01BWF9GQl9IRUlHSFQ7CisJ ZGRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAmc3RfbW9kZV9jb25maWdfZnVuY3M7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0X2RyaXZlcl9mb3BzID0geworCS5v d25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLmdldF91bm1hcHBlZF9h cmVhID0gZHJtX2dlbV9jbWFfZ2V0X3VubWFwcGVkX2FyZWEsCisJLm1tYXAgPSBkcm1fZ2VtX2Nt YV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1fcmVhZCwKKwkudW5sb2Nr ZWRfaW9jdGwgPSBkcm1faW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9j dGwgPSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwK K307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBzdF9kcml2ZXIgPSB7CisJLmRyaXZlcl9m ZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSB8CisJ CQkgICBEUklWRVJfQVRPTUlDLAorCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPSBkcm1fZ2Vt X2NtYV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCisJ LmR1bWJfY3JlYXRlID0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNl dCA9IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dl bV9kdW1iX2Rlc3Ryb3ksCisJLmZvcHMgPSAmc3RfZHJpdmVyX2ZvcHMsCisKKwkuZ2V0X3ZibGFu a19jb3VudGVyID0gZHJtX3ZibGFua19ub19od19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0g bHRkY19jcnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbHRkY19jcnRjX2Rp c2FibGVfdmJsYW5rLAorCisJLnByaW1lX2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFu ZGxlX3RvX2ZkLAorCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hh bmRsZSwKKwkuZ2VtX3ByaW1lX2V4cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1f cHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCisJLmdlbV9wcmltZV9nZXRfc2df dGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBv cnRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9w cmltZV92bWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcCwKKwkuZ2VtX3ByaW1lX3Z1bm1hcCA9 IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKKwkuZ2VtX3ByaW1lX21tYXAgPSBkcm1fZ2VtX2Nt YV9wcmltZV9tbWFwLAorCisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuZGVzYyA9IERSSVZFUl9E RVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9yID0gRFJJVkVSX01BSk9SLAorCS5t aW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vZihzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRh OworfQorCitzdGF0aWMgaW50IHN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJ c3RydWN0IHN0X3ByaXZhdGUgKnByaXY7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGRldi0+ ZGV2X3ByaXZhdGUgPSAodm9pZCAqKXByaXY7CisJZGV2X3NldF9kcnZkYXRhKGRkZXYtPmRldiwg ZGRldik7CisJcHJpdi0+ZGRldiA9IGRkZXY7CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkZGV2 KTsKKworCXN0X21vZGVfY29uZmlnX2luaXQoZGRldik7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xs X2luaXQoZGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RfY2xlYW51cChz dHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3Qgc3RfcHJpdmF0ZSAqcHJpdiA9IGRk ZXYtPmRldl9wcml2YXRlOworCisJaWYgKHByaXYtPmZiZGV2KSB7CisJCWRybV9mYmRldl9jbWFf ZmluaShwcml2LT5mYmRldik7CisJCXByaXYtPmZiZGV2ID0gTlVMTDsKKwl9CisKKwlkcm1fa21z X2hlbHBlcl9wb2xsX2ZpbmkoZGRldik7CisJZHJtX3ZibGFua19jbGVhbnVwKGRkZXYpOworCWtm cmVlKHByaXYpOworCWRkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKK30KKworc3RhdGljIGludCBz dF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsK KwlzdHJ1Y3Qgc3RfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXY7 CisJaW50IHJldDsKKworCWRkZXYgPSBkcm1fZGV2X2FsbG9jKCZzdF9kcml2ZXIsIGRldik7CisJ aWYgKElTX0VSUihkZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRldik7CisKKwlkZGV2LT5wbGF0 Zm9ybWRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJcmV0ID0gc3RfaW5pdChkZGV2 KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcm1fZGV2X3VucmVmOworCisJcmV0ID0gY29tcG9u ZW50X2JpbmRfYWxsKGRkZXYtPmRldiwgZGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xl YW51cDsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZGRldiwgMCk7CisJaWYgKHJldCkKKwkJ Z290byBlcnJfcmVnaXN0ZXI7CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGRldik7CisKKwlp ZiAoZGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvcikgeworCQlwcml2ID0gZGRldi0+ZGV2 X3ByaXZhdGU7CisJCWZiZGV2ID0gZHJtX2ZiZGV2X2NtYV9pbml0KGRkZXYsIDE2LAorCQkJCQkg ICBkZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YywKKwkJCQkJICAgZGRldi0+bW9kZV9jb25maWcu bnVtX2Nvbm5lY3Rvcik7CisJCWlmIChJU19FUlIoZmJkZXYpKSB7CisJCQlEUk1fREVCVUdfRFJJ VkVSKCJXYXJuaW5nOiBmYWlscyB0byBjcmVhdGUgZmJkZXZcbiIpOworCQkJZmJkZXYgPSBOVUxM OworCQl9CisJCXByaXYtPmZiZGV2ID0gZmJkZXY7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9y ZWdpc3RlcjoKKwljb21wb25lbnRfdW5iaW5kX2FsbChkZGV2LT5kZXYsIGRkZXYpOworZXJyX2Ns ZWFudXA6CisJc3RfY2xlYW51cChkZGV2KTsKK2Vycl9kcm1fZGV2X3VucmVmOgorCWRybV9kZXZf dW5yZWYoZGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCisJZHJtX2Rldl91bnJlZ2lzdGVyKGRkZXYpOworCXN0X2NsZWFudXAo ZGRldik7CisJZHJtX2Rldl91bnJlZihkZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBj b21wb25lbnRfbWFzdGVyX29wcyBzdF9vcHMgPSB7CisJLmJpbmQgPSBzdF9iaW5kLAorCS51bmJp bmQgPSBzdF91bmJpbmQsCit9OworCitzdGF0aWMgaW50IHN0X3BsYXRmb3JtX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0 IGRldmljZV9ub2RlICpjaGlsZF9ucDsKKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCA9 IE5VTEw7CisKKwlkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTsK KworCW9mX3BsYXRmb3JtX3BvcHVsYXRlKG5vZGUsIE5VTEwsIE5VTEwsIGRldik7CisKKwljaGls ZF9ucCA9IG9mX2dldF9uZXh0X2F2YWlsYWJsZV9jaGlsZChub2RlLCBOVUxMKTsKKworCXdoaWxl IChjaGlsZF9ucCkgeworCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgJm1hdGNoLCBjb21wYXJl X29mLCBjaGlsZF9ucCk7CisJCW9mX25vZGVfcHV0KGNoaWxkX25wKTsKKwkJY2hpbGRfbnAgPSBv Zl9nZXRfbmV4dF9hdmFpbGFibGVfY2hpbGQobm9kZSwgY2hpbGRfbnApOworCX0KKworCXJldHVy biBjb21wb25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKGRldiwgJnN0X29wcywgbWF0Y2gpOwor fQorCitzdGF0aWMgaW50IHN0X3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCWNvbXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2LT5kZXYsICZzdF9vcHMpOwor CW9mX3BsYXRmb3JtX2RlcG9wdWxhdGUoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3RfZHRfaWRzW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJzdCxkaXNwbGF5LXN1YnN5c3RlbSIsIH0sCisJeyAvKiBlbmQgbm9kZSAqLyB9 LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN0X2R0X2lkcyk7CisKK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIHN0X3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgPSBzdF9w bGF0Zm9ybV9wcm9iZSwKKwkucmVtb3ZlID0gc3RfcGxhdGZvcm1fcmVtb3ZlLAorCS5kcml2ZXIg PSB7CisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5vZl9tYXRjaF90YWJsZSA9IHN0X2R0X2lk cywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBkcml2 ZXJzW10gPSB7CisJJmx0ZGNfZHJpdmVyLAorCSZzdF9wbGF0Zm9ybV9kcml2ZXIsCit9OworCitz dGF0aWMgaW50IHN0X2RybV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX3JlZ2lzdGVy X2RyaXZlcnMoZHJpdmVycywgQVJSQVlfU0laRShkcml2ZXJzKSk7Cit9Cittb2R1bGVfaW5pdChz dF9kcm1faW5pdCk7CisKK3N0YXRpYyB2b2lkIHN0X2RybV9leGl0KHZvaWQpCit7CisJcGxhdGZv cm1fdW5yZWdpc3Rlcl9kcml2ZXJzKGRyaXZlcnMsIEFSUkFZX1NJWkUoZHJpdmVycykpOworfQor bW9kdWxlX2V4aXQoc3RfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJQaGlsaXBwZSBDb3Ju dSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPiIpOworTU9EVUxFX0FVVEhPUigiWWFubmljayBGZXJ0 cmUgPHlhbm5pY2suZmVydHJlQHN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkZhYmllbiBEZXNz ZW5uZSA8ZmFiaWVuLmRlc3Nlbm5lQHN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIk1pY2thZWwg UmV1bGllciA8bWlja2FlbC5yZXVsaWVyQHN0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigi U1RNaWNyb2VsZWN0cm9uaWNzIFNUIERSTSBMVERDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N0L2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL3N0L2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQz ZGExYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3QvZHJ2LmgKQEAgLTAs MCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1RNaWNyb2VsZWN0cm9uaWNzIFNBIDIw MTcKKyAqCisgKiBBdXRob3JzOiBQaGlsaXBwZSBDb3JudSA8cGhpbGlwcGUuY29ybnVAc3QuY29t PgorICogICAgICAgICAgWWFubmljayBGZXJ0cmUgPHlhbm5pY2suZmVydHJlQHN0LmNvbT4KKyAq ICAgICAgICAgIEZhYmllbiBEZXNzZW5uZSA8ZmFiaWVuLmRlc3Nlbm5lQHN0LmNvbT4KKyAqICAg ICAgICAgIE1pY2thZWwgUmV1bGllciA8bWlja2FlbC5yZXVsaWVyQHN0LmNvbT4KKyAqCisgKiBM aWNlbnNlIHRlcm1zOiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24g MgorICovCisKKyNpZm5kZWYgX0RSVl9IXworI2RlZmluZSBfRFJWX0hfCisKKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorCitzdHJ1Y3Qgc3RfcHJpdmF0ZSB7CisJc3RydWN0IGx0ZGMgKmx0ZGM7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRkZXY7CisJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2Owor fTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbHRkY19kcml2ZXI7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N0L2x0ZGMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9zdC9sdGRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhN2FiMgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdC9sdGRjLmMKQEAgLTAsMCArMSwx NDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVE1pY3JvZWxlY3Ryb25pY3MgU0EgMjAxNwor ICoKKyAqIEF1dGhvcnM6IFBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Cisg KiAgICAgICAgICBZYW5uaWNrIEZlcnRyZSA8eWFubmljay5mZXJ0cmVAc3QuY29tPgorICogICAg ICAgICAgRmFiaWVuIERlc3Nlbm5lIDxmYWJpZW4uZGVzc2VubmVAc3QuY29tPgorICogICAgICAg ICAgTWlja2FlbCBSZXVsaWVyIDxtaWNrYWVsLnJldWxpZXJAc3QuY29tPgorICoKKyAqIExpY2Vu c2UgdGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFw aC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+ CisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVf aGVscGVyLmg+CisKKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1ZGUgImRy di5oIgorI2luY2x1ZGUgImx0ZGMuaCIKKworI2RlZmluZSBOQl9DUlRDIDEKKyNkZWZpbmUgQ1JU Q19NQVNLIEdFTk1BU0soTkJfQ1JUQyAtIDEsIDApCisKKyNkZWZpbmUgTUFYX0lSUSA0CisKKyNk ZWZpbmUgSFdWRVJfMTAyMDAgMHgwMTAyMDAKKyNkZWZpbmUgSFdWRVJfMTAzMDAgMHgwMTAzMDAK KyNkZWZpbmUgSFdWRVJfMjAxMDEgMHgwMjAxMDEKKworLyoKKyAqIFRoZSBhZGRyZXNzIG9mIHNv bWUgcmVnaXN0ZXJzIGRlcGVuZHMgb24gdGhlIEhXIHZlcnNpb246IHN1Y2ggcmVnaXN0ZXJzIGhh dmUKKyAqIGFuIGV4dHJhIG9mZnNldCBzcGVjaWZpZWQgd2l0aCByZWdfb2ZzLgorICovCisjZGVm aW5lIFJFR19PRlNfTk9ORQkwCisjZGVmaW5lIFJFR19PRlNfNAk0IC8qIEluc2VydGlvbiBvZiAi TGF5ZXIgQ29uZmlndXJhdGlvbiAyIiByZWcgKi8KKyNkZWZpbmUgUkVHX09GUwkJKGx0ZGMtPmNh cHMucmVnX29mcykKKyNkZWZpbmUgTEFZX09GUwkJMHg4MAkvKiBSZWdpc3RlciBPZmZzZXQgYmV0 d2VlbiAyIGxheWVycyAqLworCisvKiBHbG9iYWwgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmlu ZSBMVERDX0lEUgkweDAwMDAgLyogSURlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgTFREQ19MQ1IJ MHgwMDA0IC8qIExheWVyIENvdW50ICovCisjZGVmaW5lIExURENfU1NDUgkweDAwMDggLyogU3lu Y2hyb25pemF0aW9uIFNpemUgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERDX0JQQ1IJMHgw MDBDIC8qIEJhY2sgUG9yY2ggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERDX0FXQ1IJMHgw MDEwIC8qIEFjdGl2ZSBXaWR0aCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfVFdDUgkw eDAwMTQgLyogVG90YWwgV2lkdGggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERDX0dDUgkw eDAwMTggLyogR2xvYmFsIENvbnRyb2wgKi8KKyNkZWZpbmUgTFREQ19HQzFSCTB4MDAxQyAvKiBH bG9iYWwgQ29uZmlndXJhdGlvbiAxICovCisjZGVmaW5lIExURENfR0MyUgkweDAwMjAgLyogR2xv YmFsIENvbmZpZ3VyYXRpb24gMiAqLworI2RlZmluZSBMVERDX1NSQ1IJMHgwMDI0IC8qIFNoYWRv dyBSZWxvYWQgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERDX0dBQ1IJMHgwMDI4IC8qIEdB bW1hIENvcnJlY3Rpb24gKi8KKyNkZWZpbmUgTFREQ19CQ0NSCTB4MDAyQyAvKiBCYWNrZ3JvdW5k IENvbG9yIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTFREQ19JRVIJMHgwMDM0IC8qIEludGVy cnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTFREQ19JU1IJMHgwMDM4IC8qIEludGVycnVwdCBTdGF0 dXMgKi8KKyNkZWZpbmUgTFREQ19JQ1IJMHgwMDNDIC8qIEludGVycnVwdCBDbGVhciAqLworI2Rl ZmluZSBMVERDX0xJUENSCTB4MDA0MCAvKiBMaW5lIEludGVycnVwdCBQb3NpdGlvbiBDb25maWd1 cmF0aW9uICovCisjZGVmaW5lIExURENfQ1BTUgkweDAwNDQgLyogQ3VycmVudCBQb3NpdGlvbiBT dGF0dXMgKi8KKyNkZWZpbmUgTFREQ19DRFNSCTB4MDA0OCAvKiBDdXJyZW50IERpc3BsYXkgU3Rh dHVzICovCisKKy8qIExheWVyIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgTFREQ19MMUxD MVIJKDB4MDA4MCkJICAgLyogTDEgTGF5ZXIgQ29uZmlndXJhdGlvbiAxICovCisjZGVmaW5lIExU RENfTDFMQzJSCSgweDAwODQpCSAgIC8qIEwxIExheWVyIENvbmZpZ3VyYXRpb24gMiAqLworI2Rl ZmluZSBMVERDX0wxQ1IJKDB4MDA4NCArIFJFR19PRlMpIC8qIEwxIENvbnRyb2wgKi8KKyNkZWZp bmUgTFREQ19MMVdIUENSCSgweDAwODggKyBSRUdfT0ZTKSAvKiBMMSBXaW5kb3cgSG9yIFBvc2l0 aW9uIENvbmZpZyAqLworI2RlZmluZSBMVERDX0wxV1ZQQ1IJKDB4MDA4QyArIFJFR19PRlMpIC8q IEwxIFdpbmRvdyBWZXJ0IFBvc2l0aW9uIENvbmZpZyAqLworI2RlZmluZSBMVERDX0wxQ0tDUgko MHgwMDkwICsgUkVHX09GUykgLyogTDEgQ29sb3IgS2V5aW5nIENvbmZpZ3VyYXRpb24gKi8KKyNk ZWZpbmUgTFREQ19MMVBGQ1IJKDB4MDA5NCArIFJFR19PRlMpIC8qIEwxIFBpeGVsIEZvcm1hdCBD b25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfTDFDQUNSCSgweDAwOTggKyBSRUdfT0ZTKSAv KiBMMSBDb25zdGFudCBBbHBoYSBDb25maWcgKi8KKyNkZWZpbmUgTFREQ19MMURDQ1IJKDB4MDA5 QyArIFJFR19PRlMpIC8qIEwxIERlZmF1bHQgQ29sb3IgQ29uZmlndXJhdGlvbiAqLworI2RlZmlu ZSBMVERDX0wxQkZDUgkoMHgwMEEwICsgUkVHX09GUykgLyogTDEgQmxlbmQgRmFjdG9ycyBDb25m aWd1cmF0aW9uICovCisjZGVmaW5lIExURENfTDFGQkJDUgkoMHgwMEE0ICsgUkVHX09GUykgLyog TDEgRnJhbWVCdWZmZXIgQnVzIENvbnRyb2wgKi8KKyNkZWZpbmUgTFREQ19MMUFGQkNSCSgweDAw QTggKyBSRUdfT0ZTKSAvKiBMMSBBdXhGQiBDb250cm9sICovCisjZGVmaW5lIExURENfTDFDRkJB UgkoMHgwMEFDICsgUkVHX09GUykgLyogTDEgQ29sb3IgRnJhbWVCdWZmZXIgQWRkcmVzcyAqLwor I2RlZmluZSBMVERDX0wxQ0ZCTFIJKDB4MDBCMCArIFJFR19PRlMpIC8qIEwxIENvbG9yIEZyYW1l QnVmZmVyIExlbmd0aCAqLworI2RlZmluZSBMVERDX0wxQ0ZCTE5SCSgweDAwQjQgKyBSRUdfT0ZT KSAvKiBMMSBDb2xvciBGcmFtZUJ1ZmZlciBMaW5lIE5iICovCisjZGVmaW5lIExURENfTDFBRkJB UgkoMHgwMEI4ICsgUkVHX09GUykgLyogTDEgQXV4RkIgQWRkcmVzcyAqLworI2RlZmluZSBMVERD X0wxQUZCTFIJKDB4MDBCQyArIFJFR19PRlMpIC8qIEwxIEF1eEZCIExlbmd0aCAqLworI2RlZmlu ZSBMVERDX0wxQUZCTE5SCSgweDAwQzAgKyBSRUdfT0ZTKSAvKiBMMSBBdXhGQiBMaW5lIE51bWJl ciAqLworI2RlZmluZSBMVERDX0wxQ0xVVFdSCSgweDAwQzQgKyBSRUdfT0ZTKSAvKiBMMSBDTFVU IFdyaXRlICovCisjZGVmaW5lIExURENfTDFZUzFSCSgweDAwRTAgKyBSRUdfT0ZTKSAvKiBMMSBZ Q2JDciBTY2FsZSAxICovCisjZGVmaW5lIExURENfTDFZUzJSCSgweDAwRTQgKyBSRUdfT0ZTKSAv KiBMMSBZQ2JDciBTY2FsZSAyICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBT U0NSX1ZTSAlHRU5NQVNLKDEwLCAwKQkvKiBWZXJ0aWNhbCBTeW5jaHJvbml6YXRpb24gSGVpZ2h0 ICovCisjZGVmaW5lIFNTQ1JfSFNXCUdFTk1BU0soMjcsIDE2KQkvKiBIb3Jpem9udGFsIFN5bmNo cm9uaXphdGlvbiBXaWR0aCAqLworCisjZGVmaW5lIEJQQ1JfQVZCUAlHRU5NQVNLKDEwLCAwKQkv KiBBY2N1bXVsYXRlZCBWZXJ0aWNhbCBCYWNrIFBvcmNoICovCisjZGVmaW5lIEJQQ1JfQUhCUAlH RU5NQVNLKDI3LCAxNikJLyogQWNjdW11bGF0ZWQgSG9yaXpvbnRhbCBCYWNrIFBvcmNoICovCisK KyNkZWZpbmUgQVdDUl9BQUgJR0VOTUFTSygxMCwgMCkJLyogQWNjdW11bGF0ZWQgQWN0aXZlIEhl aWdodCAqLworI2RlZmluZSBBV0NSX0FBVwlHRU5NQVNLKDI3LCAxNikJLyogQWNjdW11bGF0ZWQg QWN0aXZlIFdpZHRoICovCisKKyNkZWZpbmUgVFdDUl9UT1RBTEgJR0VOTUFTSygxMCwgMCkJLyog VE9UQUwgSGVpZ2h0ICovCisjZGVmaW5lIFRXQ1JfVE9UQUxXCUdFTk1BU0soMjcsIDE2KQkvKiBU T1RBTCBXaWR0aCAqLworCisjZGVmaW5lIEdDUl9MVERDRU4JQklUKDApCQkvKiBMVERDIEVOYWJs ZSAqLworI2RlZmluZSBHQ1JfREVOCQlCSVQoMTYpCQkvKiBEaXRoZXIgRU5hYmxlICovCisjZGVm aW5lIEdDUl9QQ1BPTAlCSVQoMjgpCQkvKiBQaXhlbCBDbG9jayBQT0xhcml0eSAqLworI2RlZmlu ZSBHQ1JfREVQT0wJQklUKDI5KQkJLyogRGF0YSBFbmFibGUgUE9MYXJpdHkgKi8KKyNkZWZpbmUg R0NSX1ZTUE9MCUJJVCgzMCkJCS8qIFZlcnRpY2FsIFN5bmNocm8gUE9MYXJpdHkgKi8KKyNkZWZp bmUgR0NSX0hTUE9MCUJJVCgzMSkJCS8qIEhvcml6b250YWwgU3luY2hybyBQT0xhcml0eSAqLwor CisjZGVmaW5lIEdDMVJfV0JDSAlHRU5NQVNLKDMsIDApCS8qIFdpZHRoIG9mIEJsdWUgQ0hhbm5l bCBvdXRwdXQgKi8KKyNkZWZpbmUgR0MxUl9XR0NICUdFTk1BU0soNywgNCkJLyogV2lkdGggb2Yg R3JlZW4gQ2hhbm5lbCBvdXRwdXQgKi8KKyNkZWZpbmUgR0MxUl9XUkNICUdFTk1BU0soMTEsIDgp CS8qIFdpZHRoIG9mIFJlZCBDaGFubmVsIG91dHB1dCAqLworI2RlZmluZSBHQzFSX1BCRU4JQklU KDEyKQkJLyogUHJlY2lzZSBCbGVuZGluZyBFTmFibGUgKi8KKyNkZWZpbmUgR0MxUl9EVAkJR0VO TUFTSygxNSwgMTQpCS8qIERpdGhlcmluZyBUZWNobmlxdWUgKi8KKyNkZWZpbmUgR0MxUl9HQ1QJ R0VOTUFTSygxOSwgMTcpCS8qIEdhbW1hIENvcnJlY3Rpb24gVGVjaG5pcXVlICovCisjZGVmaW5l IEdDMVJfU0hSRU4JQklUKDIxKQkJLyogU0hhZG93IFJlZ2lzdGVycyBFTmFibGVkICovCisjZGVm aW5lIEdDMVJfQkNQCUJJVCgyMikJCS8qIEJhY2tncm91bmQgQ29sb3VyIFByb2dyYW1tYWJsZSAq LworI2RlZmluZSBHQzFSX0JCRU4JQklUKDIzKQkJLyogQmFja2dyb3VuZCBCbGVuZGluZyBFTmFi bGVkICovCisjZGVmaW5lIEdDMVJfTE5JUAlCSVQoMjQpCQkvKiBMaW5lIE51bWJlciBJUlEgUG9z aXRpb24gKi8KKyNkZWZpbmUgR0MxUl9UUAkJQklUKDI1KQkJLyogVGltaW5nIFByb2dyYW1tYWJs ZSAqLworI2RlZmluZSBHQzFSX0lQUAlCSVQoMjYpCQkvKiBJUlEgUG9sYXJpdHkgUHJvZ3JhbW1h YmxlICovCisjZGVmaW5lIEdDMVJfU1BQCUJJVCgyNykJCS8qIFN5bmMgUG9sYXJpdHkgUHJvZ3Jh bW1hYmxlICovCisjZGVmaW5lIEdDMVJfRFdQCUJJVCgyOCkJCS8qIERpdGhlciBXaWR0aCBQcm9n cmFtbWFibGUgKi8KKyNkZWZpbmUgR0MxUl9TVFJFTglCSVQoMjkpCQkvKiBTVGF0dXMgUmVnaXN0 ZXJzIEVOYWJsZWQgKi8KKyNkZWZpbmUgR0MxUl9CTUVOCUJJVCgzMSkJCS8qIEJsaW5kIE1vZGUg RU5hYmxlZCAqLworCisjZGVmaW5lIEdDMlJfRURDQQlCSVQoMCkJCS8qIEV4dGVybmFsIERpc3Bs YXkgQ29udHJvbCBBYmlsaXR5ICAqLworI2RlZmluZSBHQzJSX1NUU0FFTglCSVQoMSkJCS8qIFNs YXZlIFRpbWluZyBTeW5jIEFiaWxpdHkgRU5hYmxlZCAqLworI2RlZmluZSBHQzJSX0RWQUVOCUJJ VCgyKQkJLyogRHVhbC1WaWV3IEFiaWxpdHkgRU5hYmxlZCAqLworI2RlZmluZSBHQzJSX0RQQUVO CUJJVCgzKQkJLyogRHVhbC1Qb3J0IEFiaWxpdHkgRU5hYmxlZCAqLworI2RlZmluZSBHQzJSX0JX CQlHRU5NQVNLKDYsIDQpCS8qIEJ1cyBXaWR0aCAobG9nMiBvZiBuYiBvZiBieXRlcykgKi8KKyNk ZWZpbmUgR0MyUl9FRENFTglCSVQoNykJCS8qIEV4dGVybmFsIERpc3BsYXkgQ29udHJvbCBFTmFi bGVkICovCisKKyNkZWZpbmUgU1JDUl9JTVIJQklUKDApCQkvKiBJTW1lZGlhdGUgUmVsb2FkICov CisjZGVmaW5lIFNSQ1JfVkJSCUJJVCgxKQkJLyogVmVydGljYWwgQmxhbmtpbmcgUmVsb2FkICov CisKKyNkZWZpbmUgQkNDUl9CQ0JMQUNLCTB4MDAJCS8qIEJhY2tncm91bmQgQ29sb3IgQkxBQ0sg Ki8KKyNkZWZpbmUgQkNDUl9CQ0JMVUUJR0VOTUFTSyg3LCAwKQkvKiBCYWNrZ3JvdW5kIENvbG9y IEJMVUUgKi8KKyNkZWZpbmUgQkNDUl9CQ0dSRUVOCUdFTk1BU0soMTUsIDgpCS8qIEJhY2tncm91 bmQgQ29sb3IgR1JFRU4gKi8KKyNkZWZpbmUgQkNDUl9CQ1JFRAlHRU5NQVNLKDIzLCAxNikJLyog QmFja2dyb3VuZCBDb2xvciBSRUQgKi8KKyNkZWZpbmUgQkNDUl9CQ1dISVRFCUdFTk1BU0soMjMs IDApCS8qIEJhY2tncm91bmQgQ29sb3IgV0hJVEUgKi8KKworI2RlZmluZSBJRVJfTElFCQlCSVQo MCkJCS8qIExpbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfRlVJRQlCSVQoMSkJ CS8qIEZpZm8gVW5kZXJydW4gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfVEVSUklF CUJJVCgyKQkJLyogVHJhbnNmZXIgRVJSb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJ RVJfUlJJRQlCSVQoMykJCS8qIFJlZ2lzdGVyIFJlbG9hZCBJbnRlcnJ1cHQgZW5hYmxlICovCisK KyNkZWZpbmUgSVNSX0xJRgkJQklUKDApCQkvKiBMaW5lIEludGVycnVwdCBGbGFnICovCisjZGVm aW5lIElTUl9GVUlGCUJJVCgxKQkJLyogRmlmbyBVbmRlcnJ1biBJbnRlcnJ1cHQgRmxhZyAqLwor I2RlZmluZSBJU1JfVEVSUklGCUJJVCgyKQkJLyogVHJhbnNmZXIgRVJSb3IgSW50ZXJydXB0IEZs YWcgKi8KKyNkZWZpbmUgSVNSX1JSSUYJQklUKDMpCQkvKiBSZWdpc3RlciBSZWxvYWQgSW50ZXJy dXB0IEZsYWcgKi8KKworI2RlZmluZSBMWENSX0xFTglCSVQoMCkJCS8qIExheWVyIEVOYWJsZSAq LworI2RlZmluZSBMWENSX0NPTEtFTglCSVQoMSkJCS8qIENvbG9yIEtleWluZyBFbmFibGUgKi8K KyNkZWZpbmUgTFhDUl9DTFVURU4JQklUKDQpCQkvKiBDb2xvciBMb29rLVVwIFRhYmxlIEVOYWJs ZSAqLworCisjZGVmaW5lIExYV0hQQ1JfV0hTVFBPUwlHRU5NQVNLKDExLCAwKQkvKiBXaW5kb3cg SG9yaXpvbnRhbCBTdGFyVCBQT1NpdGlvbiAqLworI2RlZmluZSBMWFdIUENSX1dIU1BQT1MJR0VO TUFTSygyNywgMTYpCS8qIFdpbmRvdyBIb3Jpem9udGFsIFN0b1AgUE9TaXRpb24gKi8KKworI2Rl ZmluZSBMWFdWUENSX1dWU1RQT1MJR0VOTUFTSygxMCwgMCkJLyogV2luZG93IFZlcnRpY2FsIFN0 YXJUIFBPU2l0aW9uICovCisjZGVmaW5lIExYV1ZQQ1JfV1ZTUFBPUwlHRU5NQVNLKDI2LCAxNikJ LyogV2luZG93IFZlcnRpY2FsIFN0b1AgUE9TaXRpb24gKi8KKworI2RlZmluZSBMWFBGQ1JfUEYJ R0VOTUFTSygyLCAwKQkvKiBQaXhlbCBGb3JtYXQgKi8KKworI2RlZmluZSBMWENBQ1JfQ09OU1RB CUdFTk1BU0soNywgMCkJLyogQ09OU1RhbnQgQWxwaGEgKi8KKworI2RlZmluZSBMWEJGQ1JfQkYy CUdFTk1BU0soMiwgMCkJLyogQmxlbmRpbmcgRmFjdG9yIDIgKi8KKyNkZWZpbmUgTFhCRkNSX0JG MQlHRU5NQVNLKDEwLCA4KQkvKiBCbGVuZGluZyBGYWN0b3IgMSAqLworCisjZGVmaW5lIExYQ0ZC TFJfQ0ZCTEwJR0VOTUFTSygxMiwgMCkJLyogQ29sb3IgRnJhbWUgQnVmZmVyIExpbmUgTGVuZ3Ro ICovCisjZGVmaW5lIExYQ0ZCTFJfQ0ZCUAlHRU5NQVNLKDI4LCAxNikJLyogQ29sb3IgRnJhbWUg QnVmZmVyIFBpdGNoIGluIGJ5dGVzICovCisKKyNkZWZpbmUgTFhDRkJMTlJfQ0ZCTE4JR0VOTUFT SygxMCwgMCkJIC8qIENvbG9yIEZyYW1lIEJ1ZmZlciBMaW5lIE51bWJlciAqLworCisjZGVmaW5l IEhTUE9MX0FMICAgMAkJLyogSG9yaXpvbnRhbCBTeW5jIFBPTGFyaXR5IEFjdGl2ZSBMb3cgKi8K KyNkZWZpbmUgVlNQT0xfQUwgICAwCQkvKiBWZXJ0aWNhbCBTeW5jIFBPTGFyaXR5IEFjdGl2ZSBM b3cgKi8KKyNkZWZpbmUgREVQT0xfQUwgICAwCQkvKiBEYXRhIEVuYWJsZSBQT0xhcml0eSBBY3Rp dmUgTG93ICovCisjZGVmaW5lIFBDUE9MX0lQQyAgMAkJLyogSW5wdXQgUGl4ZWwgQ2xvY2sgKi8K KyNkZWZpbmUgSFNQT0xfQUggICBHQ1JfSFNQT0wJLyogSG9yaXpvbnRhbCBTeW5jIFBPTGFyaXR5 IEFjdGl2ZSBIaWdoICovCisjZGVmaW5lIFZTUE9MX0FIICAgR0NSX1ZTUE9MCS8qIFZlcnRpY2Fs IFN5bmMgUE9MYXJpdHkgQWN0aXZlIEhpZ2ggKi8KKyNkZWZpbmUgREVQT0xfQUggICBHQ1JfREVQ T0wJLyogRGF0YSBFbmFibGUgUE9MYXJpdHkgQWN0aXZlIEhpZ2ggKi8KKyNkZWZpbmUgUENQT0xf SUlQQyBHQ1JfUENQT0wJLyogSW52ZXJ0ZWQgSW5wdXQgUGl4ZWwgQ2xvY2sgKi8KKyNkZWZpbmUg Q09OU1RBX01BWCAweEZGCQkvKiBDT05TVGFudCBBbHBoYSBNQVg9IDEuMCAqLworI2RlZmluZSBC RjFfUEFYQ0EgIDB4NjAwCS8qIFBpeGVsIEFscGhhIHggQ29uc3RhbnQgQWxwaGEgKi8KKyNkZWZp bmUgQkYxX0NBICAgICAweDQwMAkvKiBDb25zdGFudCBBbHBoYSAqLworI2RlZmluZSBCRjJfMVBB WENBIDB4MDA3CS8qIDEgLSAoUGl4ZWwgQWxwaGEgeCBDb25zdGFudCBBbHBoYSkgKi8KKyNkZWZp bmUgQkYyXzFDQQkgICAweDAwNQkvKiAxIC0gQ29uc3RhbnQgQWxwaGEgKi8KKworZW51bSBsdGRj X3BpeF9mbXQgeworCVBGX05PTkUsCisJLyogUkdCIGZvcm1hdHMgKi8KKwlQRl9BUkdCODg4OCwg ICAgLyogQVJHQiBbMzIgYml0c10gKi8KKwlQRl9SR0JBODg4OCwgICAgLyogUkdCQSBbMzIgYml0 c10gKi8KKwlQRl9SR0I4ODgsICAgICAgLyogUkdCIFsyNCBiaXRzXSAqLworCVBGX1JHQjU2NSwg ICAgICAvKiBSR0IgWzE2IGJpdHNdICovCisJUEZfQVJHQjE1NTUsICAgIC8qIEFSR0IgQToxIGJp dCBSR0I6MTUgYml0cyBbMTYgYml0c10gKi8KKwlQRl9BUkdCNDQ0NCwgICAgLyogQVJHQiBBOjQg Yml0cyBSL0cvQjogNCBiaXRzIGVhY2ggWzE2IGJpdHNdICovCisJLyogSW5kZXhlZCBmb3JtYXRz ICovCisJUEZfTDgsICAgICAgICAgIC8qIEluZGV4ZWQgOCBiaXRzIFs4IGJpdHNdICovCisJUEZf QUw0NCwgICAgICAgIC8qIEFscGhhOjQgYml0cyArIGluZGV4ZWQgNCBiaXRzIFs4IGJpdHNdICov CisJUEZfQUw4OCAgICAgICAgIC8qIEFscGhhOjggYml0cyArIGluZGV4ZWQgOCBiaXRzIFsxNiBi aXRzXSAqLworfTsKKworI2RlZmluZSBOQl9QRiAgICAgICAgICAgOCAgICAgICAvKiBNYXggbmIg b2YgSFcgcGl4ZWwgZm9ybWF0ICovCisKKy8qIFRoZSBpbmRleCBnaXZlcyB0aGUgZW5jb2Rpbmcg b2YgdGhlIHBpeGVsIGZvcm1hdCBmb3IgYW4gSFcgdmVyc2lvbiAqLworc3RhdGljIGNvbnN0IGVu dW0gbHRkY19waXhfZm10IGx0ZGNfcGl4X2ZtdF9hMFtOQl9QRl0gPSB7CisJUEZfQVJHQjg4ODgs CS8qIDB4MDAgKi8KKwlQRl9SR0I4ODgsCS8qIDB4MDEgKi8KKwlQRl9SR0I1NjUsCS8qIDB4MDIg Ki8KKwlQRl9BUkdCMTU1NSwJLyogMHgwMyAqLworCVBGX0FSR0I0NDQ0LAkvKiAweDA0ICovCisJ UEZfTDgsCQkvKiAweDA1ICovCisJUEZfQUw0NCwJLyogMHgwNiAqLworCVBGX0FMODgJCS8qIDB4 MDcgKi8KK307CisKK3N0YXRpYyBjb25zdCBlbnVtIGx0ZGNfcGl4X2ZtdCBsdGRjX3BpeF9mbXRf YTFbTkJfUEZdID0geworCVBGX0FSR0I4ODg4LAkvKiAweDAwICovCisJUEZfUkdCODg4LAkvKiAw eDAxICovCisJUEZfUkdCNTY1LAkvKiAweDAyICovCisJUEZfUkdCQTg4ODgsCS8qIDB4MDMgKi8K KwlQRl9BTDQ0LAkvKiAweDA0ICovCisJUEZfTDgsCQkvKiAweDA1ICovCisJUEZfQVJHQjE1NTUs CS8qIDB4MDYgKi8KKwlQRl9BUkdCNDQ0NAkvKiAweDA3ICovCit9OworCitzdHJ1Y3QgbHRkY19j YXBzIHsKKwl1MzIgaHdfdmVyc2lvbjsJCS8qIGhhcmR3YXJlIHZlcnNpb24gKi8KKwl1MzIgbmJf bGF5ZXJzOwkJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBsYXllcnMgKi8KKwl1MzIgcmVnX29mczsJ CS8qIHJlZ2lzdGVyIG9mZnNldCBmb3IgYXBwbGljYWJsZSByZWdzICovCisJdTMyIGJ1c193aWR0 aDsJCS8qIGJ1cyB3aWR0aCAoMzIgb3IgNjQgYml0cykgKi8KKwljb25zdCBlbnVtIGx0ZGNfcGl4 X2ZtdCAqcGl4X2ZtdF9odzsgLyogc3VwcG9ydGVkIHBpeGVsIGZvcm1hdHMgKi8KK307CisKK3N0 cnVjdCBsdGRjIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRk ZXY7CisJc3RydWN0IHJlZ21hcCAqbWFwOworCXN0cnVjdCBjbGsgKnBpeGVsX2NsazsJLyogbGNk IHBpeGVsIGNsb2NrICovCisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJc3RydWN0IGRybV9w ZW5kaW5nX3ZibGFua19ldmVudCAqcGVuZGluZ19ldmVudDsKKwl1MzIgaXJxX3N0YXR1czsKKwl1 MzIgZXJyb3Jfc3RhdHVzOworCXN0cnVjdCBtdXRleCBlcnJfbG9jazsJLyogcHJvdGVjdGluZyBl cnJvcl9zdGF0dXMgKi8KKwlzdHJ1Y3QgbHRkY19jYXBzIGNhcHM7CisJdTMyIGNsdXRbMjU2XTsJ CS8qIGNvbG9yIGxvb2sgdXAgdGFibGUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2Nv bmZpZyBsdGRjX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzCT0gMzIsCisJLnZhbF9iaXRz CT0gMzIsCisJLnJlZ19zdHJpZGUJPSA0LAorCS5tYXhfcmVnaXN0ZXIJPSAweDQwMCwKKwkuZmFz dF9pbwk9IHRydWUsCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsdGRjICpjcnRjX3RvX2x0 ZGMoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXJldHVybiAoKHN0cnVjdCBzdF9wcml2YXRl ICopY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZSktPmx0ZGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGx0ZGMgKnBsYW5lX3RvX2x0ZGMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJcmV0 dXJuICgoc3RydWN0IHN0X3ByaXZhdGUgKilwbGFuZS0+ZGV2LT5kZXZfcHJpdmF0ZSktPmx0ZGM7 Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGx0ZGMgKmVuY29kZXJfdG9fbHRkYyhzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJcmV0dXJuICgoc3RydWN0IHN0X3ByaXZhdGUgKill bmNvZGVyLT5kZXYtPmRldl9wcml2YXRlKS0+bHRkYzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgbHRkYyAqY29ubmVjdG9yX3RvX2x0ZGMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlyZXR1cm4gKChzdHJ1Y3Qgc3RfcHJpdmF0ZSAqKWNvbm5lY3Rvci0+ZGV2LT5kZXZf cHJpdmF0ZSktPmx0ZGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBsdGRjX3BpeF9mbXQgdG9f bHRkY19waXhlbGZvcm1hdCh1MzIgZHJtX2ZtdCkKK3sKKwllbnVtIGx0ZGNfcGl4X2ZtdCBwZjsK KworCXN3aXRjaCAoZHJtX2ZtdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNl IERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCXBmID0gUEZfQVJHQjg4ODg7CisJCWJyZWFrOworCWNh c2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6CisJCXBm ID0gUEZfUkdCQTg4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCXBm ID0gUEZfUkdCODg4OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlwZiA9 IFBGX1JHQjU2NTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgorCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMTU1NToKKwkJcGYgPSBQRl9BUkdCMTU1NTsKKwkJYnJlYWs7CisJY2Fz ZSBEUk1fRk9STUFUX0FSR0I0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCNDQ0NDoKKwkJcGYg PSBQRl9BUkdCNDQ0NDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCQlwZiA9IFBG X0w4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwZiA9IFBGX05PTkU7CisJCWJyZWFrOworCS8q IE5vdGU6IFRoZXJlIGFyZSBubyBEUk1fRk9STUFUIGZvciBBTDQ0IGFuZCBBTDg4ICovCisJfQor CisJcmV0dXJuIHBmOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB0b19kcm1fcGl4ZWxmb3JtYXQo ZW51bSBsdGRjX3BpeF9mbXQgcGYpCit7CisJc3dpdGNoIChwZikgeworCWNhc2UgUEZfQVJHQjg4 ODg6CisJCXJldHVybiBEUk1fRk9STUFUX0FSR0I4ODg4OworCWNhc2UgUEZfUkdCQTg4ODg6CisJ CXJldHVybiBEUk1fRk9STUFUX1JHQkE4ODg4OworCWNhc2UgUEZfUkdCODg4OgorCQlyZXR1cm4g RFJNX0ZPUk1BVF9SR0I4ODg7CisJY2FzZSBQRl9SR0I1NjU6CisJCXJldHVybiBEUk1fRk9STUFU X1JHQjU2NTsKKwljYXNlIFBGX0FSR0IxNTU1OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCMTU1 NTsKKwljYXNlIFBGX0FSR0I0NDQ0OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCNDQ0NDsKKwlj YXNlIFBGX0w4OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9DODsKKwljYXNlIFBGX0FMNDQ6IC8qIE5v IERSTSBzdXBwb3J0ICovCisJY2FzZSBQRl9BTDg4OiAvKiBObyBEUk0gc3VwcG9ydCAqLworCWNh c2UgUEZfTk9ORToKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2NydGMgKmNydGNfZnJvbV9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LAorCQkJ CSAgICAgICB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisK KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3Qs IGhlYWQpIHsKKwkJaWYgKHBpcGUgPT0gZHJtX2NydGNfaW5kZXgoY3J0YykpCisJCQlyZXR1cm4g Y3J0YzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbHRkY19zZW5kX3Zi bGFuayhzdHJ1Y3QgbHRkYyAqbHRkYykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGx0 ZGMtPmRkZXY7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3J0Y19mcm9tX3BpcGUoZGRldiwg MCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcobHRkYy0+ZGV2LCAiJXNcbiIs IF9fZnVuY19fKTsKKworCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoY3J0Yyk7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmZGRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCWlmIChsdGRjLT5wZW5kaW5n X2V2ZW50KSB7CisJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGx0ZGMtPnBlbmRp bmdfZXZlbnQpOworCQlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOworCQlsdGRjLT5wZW5kaW5n X2V2ZW50ID0gTlVMTDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZGV2LT5ldmVu dF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsdGRjX2lycV90aHJlYWQo aW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBsdGRjICpsdGRjID0gYXJnOworCisJLyog TGluZSBJUlEgOiB0cmlnZ2VyIHRoZSB2YmxhbmsgZXZlbnQgKi8KKwlpZiAobHRkYy0+aXJxX3N0 YXR1cyAmIElTUl9MSUYpCisJCWx0ZGNfc2VuZF92YmxhbmsobHRkYyk7CisKKwkvKiBTYXZlIEZJ Rk8gVW5kZXJydW4gJiBUcmFuc2ZlciBFcnJvciBzdGF0dXMgKi8KKwltdXRleF9sb2NrKCZsdGRj LT5lcnJfbG9jayk7CisJaWYgKGx0ZGMtPmlycV9zdGF0dXMgJiBJU1JfRlVJRikKKwkJbHRkYy0+ ZXJyb3Jfc3RhdHVzIHw9IElTUl9GVUlGOworCWlmIChsdGRjLT5pcnFfc3RhdHVzICYgSVNSX1RF UlJJRikKKwkJbHRkYy0+ZXJyb3Jfc3RhdHVzIHw9IElTUl9URVJSSUY7CisJbXV0ZXhfdW5sb2Nr KCZsdGRjLT5lcnJfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBp cnFyZXR1cm5fdCBsdGRjX2lycShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGx0ZGMg Kmx0ZGMgPSBhcmc7CisKKwkvKiBSZWFkICYgQ2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgKi8K KwlyZWdtYXBfcmVhZChsdGRjLT5tYXAsIExURENfSVNSLCAmbHRkYy0+aXJxX3N0YXR1cyk7CisJ cmVnbWFwX3dyaXRlKGx0ZGMtPm1hcCwgTFREQ19JQ1IsIGx0ZGMtPmlycV9zdGF0dXMpOworCisJ cmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKworLyoKKyAqIERSTV9DUlRDCisgKi8KKworc3Rh dGljIHZvaWQgbHRkY19jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlz dHJ1Y3QgbHRkYyAqbHRkYyA9IGNydGNfdG9fbHRkYyhjcnRjKTsKKwl1bnNpZ25lZCBpbnQgaSwg bGF5OworCisJZGV2X2RiZyhsdGRjLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJZm9yIChs YXkgPSAwOyBsYXkgPCBsdGRjLT5jYXBzLm5iX2xheWVyczsgbGF5KyspCisJCWZvciAoaSA9IDA7 IGkgPCAyNTY7IGkrKykKKwkJCXJlZ21hcF93cml0ZShsdGRjLT5tYXAsIExURENfTDFDTFVUV1Ig KyBsYXkgKiBMQVlfT0ZTLAorCQkJCSAgICAgbHRkYy0+Y2x1dFtpXSk7Cit9CisKK3N0YXRpYyB2 b2lkIGx0ZGNfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBs dGRjICpsdGRjID0gY3J0Y190b19sdGRjKGNydGMpOworCisJRFJNX0RFQlVHX0RSSVZFUigiXG4i KTsKKworCWlmIChjbGtfZW5hYmxlKGx0ZGMtPnBpeGVsX2NsaykpCisJCURSTV9FUlJPUigiZmFp bGVkIHRvIGVuYWJsZSBwaXhlbCBjbG9ja1xuIik7CisKKwkvKiBTZXRzIHRoZSBiYWNrZ3JvdW5k IGNvbG9yIHZhbHVlICovCisJcmVnbWFwX3dyaXRlKGx0ZGMtPm1hcCwgTFREQ19CQ0NSLCBCQ0NS X0JDQkxBQ0spOworCisJLyogRW5hYmxlIElSUSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhsdGRj LT5tYXAsIExURENfSUVSLAorCQkJICAgSUVSX1JSSUUgfCBJRVJfRlVJRSB8IElFUl9URVJSSUUs CisJCQkgICBJRVJfUlJJRSB8IElFUl9GVUlFIHwgSUVSX1RFUlJJRSk7CisKKwkvKiBJbW1lZGlh dGVseSBjb21taXQgdGhlIHBsYW5lcyAqLworCXJlZ21hcF91cGRhdGVfYml0cyhsdGRjLT5tYXAs IExURENfU1JDUiwgU1JDUl9JTVIsIFNSQ1JfSU1SKTsKKworCS8qIEVuYWJsZSBMVERDICovCisJ cmVnbWFwX3VwZGF0ZV9iaXRzKGx0ZGMtPm1hcCwgTFREQ19HQ1IsIEdDUl9MVERDRU4sIEdDUl9M VERDRU4pOworCisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBs dGRjX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGx0ZGMg Kmx0ZGMgPSBjcnRjX3RvX2x0ZGMoY3J0Yyk7CisJdW5zaWduZWQgaW50IGk7CisKKwlEUk1fREVC VUdfRFJJVkVSKCJcbiIpOworCisJaWYgKCFjcnRjLT5lbmFibGVkKSB7CisJCURSTV9ERUJVR19E UklWRVIoImFscmVhZHkgZGlzYWJsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHJtX2NydGNf dmJsYW5rX29mZihjcnRjKTsKKworCS8qIGRpc2FibGUgTFREQyAqLworCXJlZ21hcF91cGRhdGVf Yml0cyhsdGRjLT5tYXAsIExURENfR0NSLCBHQ1JfTFREQ0VOLCAwKTsKKworCS8qIGRpc2FibGUg SVJRICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGx0ZGMtPm1hcCwgTFREQ19JRVIsCisJCQkgICBJ RVJfUlJJRSB8IElFUl9GVUlFIHwgSUVSX1RFUlJJRSwgMCk7CisKKwkvKiBkaXNhYmxlIGxheWVy cyAqLworCWZvciAoaSA9IDA7IGkgPCBsdGRjLT5jYXBzLm5iX2xheWVyczsgaSsrKQorCQlyZWdt YXBfdXBkYXRlX2JpdHMobHRkYy0+bWFwLCBMVERDX0wxQ1IgKyBpICogTEFZX09GUywKKwkJCQkg ICBMWENSX0xFTiwgMCk7CisKKwkvKiBpbW1lZGlhdGVseSBjb21taXQgZGlzYWJsZSBvZiBsYXll cnMgYmVmb3JlIHN3aXRjaGluZyBvZmYgTFREQyAqLworCXJlZ21hcF93cml0ZShsdGRjLT5tYXAs IExURENfU1JDUiwgU1JDUl9JTVIpOworCisJY2xrX2Rpc2FibGUobHRkYy0+cGl4ZWxfY2xrKTsK KworCWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQgJiYgIWNydGMtPnN0YXRlLT5hY3RpdmUpIHsKKwkJ c3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwkJZHJtX2NydGNfc2VuZF92 YmxhbmtfZXZlbnQoY3J0YywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKKwkJc3Bpbl91bmxvY2tfaXJx KCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7 CisJfQorfQorCitzdGF0aWMgYm9vbCBsdGRjX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCisJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ CSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgbHRk YyAqbHRkYyA9IGNydGNfdG9fbHRkYyhjcnRjKTsKKworCWRldl9kYmcobHRkYy0+ZGV2LCAiJXNc biIsIF9fZnVuY19fKTsKKwkvKiBhY2NlcHQgdGhlIHByb3ZpZGVkIGRybV9kaXNwbGF5X21vZGUs IGRvIG5vdCBmaXggaXQgdXAgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHUzMiBsdGRj X2dldF9wYWRkcihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHgsIGludCB5KQorewor CXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7CisJdW5zaWduZWQgaW50IHBpeHNp emU7CisJdTMyIHBhZGRyOworCisJY21hX29iaiA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIs IDApOworCWlmIChJU19FUlIoY21hX29iaikpIHsKKwkJRFJNX0VSUk9SKCJDYW4ndCBnZXQgQ01B IEdFTSBvYmplY3QgZm9yIGZiXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGl4c2l6ZSA9IGRy bV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5mb3JtYXQtPmZvcm1hdCwgMCk7CisJcGFkZHIgPSAodTMy KWNtYV9vYmotPnBhZGRyICsgZmItPm9mZnNldHNbMF07CisJcGFkZHIgKz0gKHggKiBwaXhzaXpl KSArICh5ICogZmItPnBpdGNoZXNbMF0pOworCisJcmV0dXJuIHBhZGRyOworfQorCitzdGF0aWMg dm9pZCBsdGRjX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ c3RydWN0IGx0ZGMgKmx0ZGMgPSBjcnRjX3RvX2x0ZGMoY3J0Yyk7CisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUgPSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7CisJc3RydWN0IHZp ZGVvbW9kZSB2bTsKKwlpbnQgcmF0ZSA9IG1vZGUtPmNsb2NrICogMTAwMDsKKwl1MzIgaHN5bmMs IHZzeW5jLCBhY2N1bV9oYnAsIGFjY3VtX3ZicCwgYWNjdW1fYWN0X3csIGFjY3VtX2FjdF9oOwor CXUzMiB0b3RhbF93aWR0aCwgdG90YWxfaGVpZ2h0OworCXUzMiB2YWw7CisKKwlkcm1fZGlzcGxh eV9tb2RlX3RvX3ZpZGVvbW9kZShtb2RlLCAmdm0pOworCisJZGV2X2RiZyhsdGRjLT5kZXYsICJD UlRDOiVkIG1vZGU6JXNcbiIsIGNydGMtPmJhc2UuaWQsIG1vZGUtPm5hbWUpOworCWRldl9kYmco bHRkYy0+ZGV2LCAiVmlkZW8gbW9kZTogJWR4JWQiLCB2bS5oYWN0aXZlLCB2bS52YWN0aXZlKTsK KwlkZXZfZGJnKGx0ZGMtPmRldiwgIiBoZnAgJWQgaGJwICVkIGhzbCAlZCB2ZnAgJWQgdmJwICVk IHZzbCAlZFxuIiwKKwkJdm0uaGZyb250X3BvcmNoLCB2bS5oYmFja19wb3JjaCwgdm0uaHN5bmNf bGVuLAorCQl2bS52ZnJvbnRfcG9yY2gsIHZtLnZiYWNrX3BvcmNoLCB2bS52c3luY19sZW4pOwor CisJLyogQ29udmVydCB2aWRlbyB0aW1pbmdzIHRvIGx0ZGMgdGltaW5ncyAqLworCWhzeW5jID0g dm0uaHN5bmNfbGVuIC0gMTsKKwl2c3luYyA9IHZtLnZzeW5jX2xlbiAtIDE7CisJYWNjdW1faGJw ID0gaHN5bmMgKyB2bS5oYmFja19wb3JjaDsKKwlhY2N1bV92YnAgPSB2c3luYyArIHZtLnZiYWNr X3BvcmNoOworCWFjY3VtX2FjdF93ID0gYWNjdW1faGJwICsgdm0uaGFjdGl2ZTsKKwlhY2N1bV9h Y3RfaCA9IGFjY3VtX3ZicCArIHZtLnZhY3RpdmU7CisJdG90YWxfd2lkdGggPSBhY2N1bV9hY3Rf dyArIHZtLmhmcm9udF9wb3JjaDsKKwl0b3RhbF9oZWlnaHQgPSBhY2N1bV9hY3RfaCArIHZtLnZm cm9udF9wb3JjaDsKKworCWlmIChjbGtfc2V0X3JhdGUobHRkYy0+cGl4ZWxfY2xrLCByYXRlKSA8 IDApIHsKKwkJRFJNX0VSUk9SKCJDYW5ub3Qgc2V0IHJhdGUgKCVkSHopIGZvciBwaXhlbCBjbGtc biIsIHJhdGUpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBDb25maWd1cmVzIHRoZSBIUywg VlMsIERFIGFuZCBQQyBwb2xhcml0aWVzLgorCSAqIEl0IHdvdWxkIGJlIGJldHRlciB0byBnZXQg cG9sYXJpdGllcyBmcm9tIHBhbmVsLCBidXQgc2luY2UKKwkgKiB0aGVzZSB2YWx1ZXMgYXJlIHF1 aXRlIHN0YW5kYXJkLCB1c2UgaGFyZCBjb2RlZCB2YWx1ZXMgaGVyZQorCSAqLworCXZhbCA9IEhT UE9MX0FMIHwgVlNQT0xfQUwgfCBERVBPTF9BTCB8IFBDUE9MX0lQQzsKKwlyZWdtYXBfdXBkYXRl X2JpdHMobHRkYy0+bWFwLCBMVERDX0dDUiwgR0NSX0hTUE9MIHwgR0NSX1ZTUE9MIHwKKwkJCSAg IEdDUl9ERVBPTCB8IEdDUl9QQ1BPTCwgdmFsKTsKKworCS8qIFNldCBTeW5jaHJvbml6YXRpb24g c2l6ZSAqLworCXZhbCA9IChoc3luYyA8PCAxNikgfCB2c3luYzsKKwlyZWdtYXBfdXBkYXRlX2Jp dHMobHRkYy0+bWFwLCBMVERDX1NTQ1IsIFNTQ1JfVlNIIHwgU1NDUl9IU1csIHZhbCk7CisKKwkv KiBTZXQgQWNjdW11bGF0ZWQgQmFjayBwb3JjaCAqLworCXZhbCA9IChhY2N1bV9oYnAgPDwgMTYp IHwgYWNjdW1fdmJwOworCXJlZ21hcF91cGRhdGVfYml0cyhsdGRjLT5tYXAsIExURENfQlBDUiwg QlBDUl9BVkJQIHwgQlBDUl9BSEJQLCB2YWwpOworCisJLyogU2V0IEFjY3VtdWxhdGVkIEFjdGl2 ZSBXaWR0aCAqLworCXZhbCA9IChhY2N1bV9hY3RfdyA8PCAxNikgfCBhY2N1bV9hY3RfaDsKKwly ZWdtYXBfdXBkYXRlX2JpdHMobHRkYy0+bWFwLCBMVERDX0FXQ1IsIEFXQ1JfQUFXIHwgQVdDUl9B QUgsIHZhbCk7CisKKwkvKiBTZXQgdG90YWwgd2lkdGggJiBoZWlnaHQgKi8KKwl2YWwgPSAodG90 YWxfd2lkdGggPDwgMTYpIHwgdG90YWxfaGVpZ2h0OworCXJlZ21hcF91cGRhdGVfYml0cyhsdGRj LT5tYXAsIExURENfVFdDUiwgVFdDUl9UT1RBTEggfCBUV0NSX1RPVEFMVywKKwkJCSAgIHZhbCk7 Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRj ICpjcnRjLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCit7 CisJc3RydWN0IGx0ZGMgKmx0ZGMgPSBjcnRjX3RvX2x0ZGMoY3J0Yyk7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKworCURSTV9ERUJVR19BVE9NSUMoIlxuIik7CisKKwlpZiAoY3J0Yy0+c3RhdGUt PmV2ZW50KSB7CisJCWlmIChkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApCisJCQlEUk1f REVCVUdfQVRPTUlDKCJGYWlsZWQgZG8gZ2V0IHZibGFuayIpOworCisJCXNwaW5fbG9ja19pcnFz YXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJbHRkYy0+cGVuZGluZ19ldmVu dCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9j cnRjICpjcnRjLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUp Cit7CisJc3RydWN0IGx0ZGMgKmx0ZGMgPSBjcnRjX3RvX2x0ZGMoY3J0Yyk7CisJc3RydWN0IGRy bV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7CisKKwlE Uk1fREVCVUdfQVRPTUlDKCJcbiIpOworCisJLyogQ29tbWl0IHNoYWRvdyByZWdpc3RlcnMgPSB1 cGRhdGUgcGxhbmVzIGF0IG5leHQgdmJsYW5rICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGx0ZGMt Pm1hcCwgTFREQ19TUkNSLCBTUkNSX1ZCUiwgU1JDUl9WQlIpOworCisJaWYgKGV2ZW50KSB7CisJ CWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisKKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2 LT5ldmVudF9sb2NrKTsKKwkJaWYgKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgPT0gMCkKKwkJ CWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOworCQllbHNlCisJCQlkcm1f Y3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7CisJCXNwaW5fdW5sb2NrX2lycSgm Y3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNf aGVscGVyX2Z1bmNzIGx0ZGNfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLmxvYWRfbHV0ID0gbHRk Y19jcnRjX2xvYWRfbHV0LAorCS5lbmFibGUgPSBsdGRjX2NydGNfZW5hYmxlLAorCS5kaXNhYmxl ID0gbHRkY19jcnRjX2Rpc2FibGUsCisJLm1vZGVfZml4dXAgPSBsdGRjX2NydGNfbW9kZV9maXh1 cCwKKwkubW9kZV9zZXRfbm9mYiA9IGx0ZGNfY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5hdG9taWNf YmVnaW4gPSBsdGRjX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2ggPSBsdGRjX2Ny dGNfYXRvbWljX2ZsdXNoLAorfTsKKworaW50IGx0ZGNfY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVj dCBkcm1fZGV2aWNlICpkZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3Qgc3RfcHJp dmF0ZSAqcHJpdiA9IGRkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBsdGRjICpsdGRjID0gcHJp di0+bHRkYzsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisJcmVnbWFwX3VwZGF0ZV9iaXRz KGx0ZGMtPm1hcCwgTFREQ19JRVIsIElFUl9MSUUsIElFUl9MSUUpOworCisJcmV0dXJuIDA7Cit9 CisKK3ZvaWQgbHRkY19jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2 LCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBjcnRjX2Zy b21fcGlwZShkZGV2LCBwaXBlKTsKKwlzdHJ1Y3Qgc3RfcHJpdmF0ZSAqcHJpdiA9IGRkZXYtPmRl dl9wcml2YXRlOworCXN0cnVjdCBsdGRjICpsdGRjID0gcHJpdi0+bHRkYzsKKworCURSTV9ERUJV R19EUklWRVIoIlxuIik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGx0ZGMtPm1hcCwgTFREQ19JRVIs IElFUl9MSUUsIDApOworCisJaWYgKGx0ZGMtPnBlbmRpbmdfZXZlbnQpIHsKKwkJZHJtX2NydGNf dmJsYW5rX3B1dChjcnRjKTsKKwkJbHRkYy0+cGVuZGluZ19ldmVudCA9IE5VTEw7CisJfQorfQor CitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGx0ZGNfY3J0Y19mdW5jcyA9IHsKKwkuZGVz dHJveSA9IGRybV9jcnRjX2NsZWFudXAsCisJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBl cl9zZXRfY29uZmlnLAorCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAs CisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlLAorCS5h dG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0 ZSwKK307CisKKy8qCisgKiBEUk1fUExBTkUKKyAqLworCitzdGF0aWMgaW50IGx0ZGNfcGxhbmVf YXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBsdGRjICpsdGRjID0gcGxhbmVfdG9fbHRk YyhwbGFuZSk7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJdTMy IHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oOworCisJZGV2X2RiZyhsdGRjLT5kZXYsICIlc1xu IiwgX19mdW5jX18pOworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7CisKKwkvKiBjb252ZXJ0IHNy Y18gZnJvbSAxNjoxNiBmb3JtYXQgKi8KKwlzcmNfeCA9IHN0YXRlLT5zcmNfeCA+PiAxNjsKKwlz cmNfeSA9IHN0YXRlLT5zcmNfeSA+PiAxNjsKKwlzcmNfdyA9IHN0YXRlLT5zcmNfdyA+PiAxNjsK KwlzcmNfaCA9IHN0YXRlLT5zcmNfaCA+PiAxNjsKKworCS8qIFJlamVjdCBzY2FsaW5nICovCisJ aWYgKChzcmNfdyAhPSBzdGF0ZS0+Y3J0Y193KSB8fCAoc3JjX2ggIT0gc3RhdGUtPmNydGNfaCkp IHsKKwkJRFJNX0VSUk9SKCJTY2FsaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJaWYgKCFsdGRjX2dldF9wYWRkcihmYiwgc3JjX3gsIHNyY195KSkgewor CQlEUk1fRVJST1IoIkNhbm5vdCBnZXQgZmIgYWRkcmVzc1xuIik7CisJCXJldHVybiAtRUZBVUxU OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsdGRjX3BsYW5lX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpvbGRzdGF0ZSkKK3sKKwlzdHJ1Y3QgbHRkYyAqbHRkYyA9IHBsYW5lX3RvX2x0ZGMo cGxhbmUpOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlID0gcGxhbmUtPnN0YXRlOwor CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXUzMiBsb2ZzID0gcGxh bmUtPmluZGV4ICogTEFZX09GUzsKKwl1MzIgeDAgPSBzdGF0ZS0+Y3J0Y194OworCXUzMiB4MSA9 IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0Y193IC0gMTsKKwl1MzIgeTAgPSBzdGF0ZS0+Y3J0 Y195OworCXUzMiB5MSA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oIC0gMTsKKwl1MzIg c3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2g7CisJdTMyIHZhbCwgcGl0Y2hfaW5fYnl0ZXMsIGxp bmVfbGVuZ3RoLCBwYWRkciwgYWhicCwgYXZicCwgYnBjcjsKKwllbnVtIGx0ZGNfcGl4X2ZtdCBw ZjsKKworCWlmICghc3RhdGUtPmNydGMgfHwgIWZiKSB7CisJCURSTV9ERUJVR19EUklWRVIoImZi IG9yIGNydGMgTlVMTCIpOworCQlyZXR1cm47CisJfQorCisJLyogY29udmVydCBzcmNfIGZyb20g MTY6MTYgZm9ybWF0ICovCisJc3JjX3ggPSBzdGF0ZS0+c3JjX3ggPj4gMTY7CisJc3JjX3kgPSBz dGF0ZS0+c3JjX3kgPj4gMTY7CisJc3JjX3cgPSBzdGF0ZS0+c3JjX3cgPj4gMTY7CisJc3JjX2gg PSBzdGF0ZS0+c3JjX2ggPj4gMTY7CisKKwlEUk1fREVCVUdfRFJJVkVSKAorCQkicGxhbmU6JWQg ZmI6JWQgKCVkeCVkKUAoJWQsJWQpIC0+ICglZHglZClAKCVkLCVkKVxuIiwKKwkJcGxhbmUtPmJh c2UuaWQsIGZiLT5iYXNlLmlkLAorCQlzcmNfdywgc3JjX2gsIHNyY194LCBzcmNfeSwKKwkJc3Rh dGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCwgc3RhdGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSk7 CisKKwlyZWdtYXBfcmVhZChsdGRjLT5tYXAsIExURENfQlBDUiwgJmJwY3IpOworCWFoYnAgPSAo YnBjciAmIEJQQ1JfQUhCUCkgPj4gMTY7CisJYXZicCA9IGJwY3IgJiBCUENSX0FWQlA7CisKKwkv KiBDb25maWd1cmVzIHRoZSBob3Jpem9udGFsIHN0YXJ0IGFuZCBzdG9wIHBvc2l0aW9uICovCisJ dmFsID0gKCh4MSArIDEgKyBhaGJwKSA8PCAxNikgKyAoeDAgKyAxICsgYWhicCk7CisJcmVnbWFw X3VwZGF0ZV9iaXRzKGx0ZGMtPm1hcCwgTFREQ19MMVdIUENSICsgbG9mcywKKwkJCSAgIExYV0hQ Q1JfV0hTVFBPUyB8IExYV0hQQ1JfV0hTUFBPUywgdmFsKTsKKworCS8qIENvbmZpZ3VyZXMgdGhl IHZlcnRpY2FsIHN0YXJ0IGFuZCBzdG9wIHBvc2l0aW9uICovCisJdmFsID0gKCh5MSArIDEgKyBh dmJwKSA8PCAxNikgKyAoeTAgKyAxICsgYXZicCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGx0ZGMt Pm1hcCwgTFREQ19MMVdWUENSICsgbG9mcywKKwkJCSAgIExYV1ZQQ1JfV1ZTVFBPUyB8IExYV1ZQ Q1JfV1ZTUFBPUywgdmFsKTsKKworCS8qIFNwZWNpZmllcyB0aGUgcGl4ZWwgZm9ybWF0ICovCisJ cGYgPSB0b19sdGRjX3BpeGVsZm9ybWF0KGZiLT5mb3JtYXQtPmZvcm1hdCk7CisJZm9yICh2YWwg PSAwOyB2YWwgPCBOQl9QRjsgdmFsKyspCisJCWlmIChsdGRjLT5jYXBzLnBpeF9mbXRfaHdbdmFs XSA9PSBwZikKKwkJCWJyZWFrOworCisJaWYgKHZhbCA9PSBOQl9QRikgeworCQlEUk1fRVJST1Io IlBpeGVsIGZvcm1hdCAlLjRzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgIChjaGFyICopJmZiLT5m b3JtYXQtPmZvcm1hdCk7CisJCXZhbCA9IDA7IC8qIHNldCBieSBkZWZhdWx0IEFSR0IgMzIgYml0 cyAqLworCX0KKwlyZWdtYXBfdXBkYXRlX2JpdHMobHRkYy0+bWFwLCBMVERDX0wxUEZDUiArIGxv ZnMsCisJCQkgICBMWFBGQ1JfUEYsIHZhbCk7CisKKwkvKiBDb25maWd1cmVzIHRoZSBjb2xvciBm cmFtZSBidWZmZXIgcGl0Y2ggaW4gYnl0ZXMgJiBsaW5lIGxlbmd0aCAqLworCXBpdGNoX2luX2J5 dGVzID0gZmItPnBpdGNoZXNbMF07CisJbGluZV9sZW5ndGggPSBkcm1fZm9ybWF0X3BsYW5lX2Nw cChmYi0+Zm9ybWF0LT5mb3JtYXQsIDApICoKKwkJICAgICAgKHgxIC0geDAgKyAxKSArIChsdGRj LT5jYXBzLmJ1c193aWR0aCA+PiAzKSAtIDE7CisJdmFsID0gKChwaXRjaF9pbl9ieXRlcyA8PCAx NikgfCBsaW5lX2xlbmd0aCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGx0ZGMtPm1hcCwgTFREQ19M MUNGQkxSICsgbG9mcywKKwkJCSAgIExYQ0ZCTFJfQ0ZCTEwgfCBMWENGQkxSX0NGQlAsIHZhbCk7 CisKKwkvKiBTcGVjaWZpZXMgdGhlIGNvbnN0YW50IGFscGhhIHZhbHVlICovCisJdmFsID0gQ09O U1RBX01BWDsKKwlyZWdtYXBfdXBkYXRlX2JpdHMobHRkYy0+bWFwLCBMVERDX0wxQ0FDUiArIGxv ZnMsCisJCQkgICBMWENBQ1JfQ09OU1RBLCB2YWwpOworCisJLyogU3BlY2lmaWVzIHRoZSBibGVu ZGluZyBmYWN0b3JzICovCisJdmFsID0gQkYxX1BBWENBIHwgQkYyXzFQQVhDQTsKKwlyZWdtYXBf dXBkYXRlX2JpdHMobHRkYy0+bWFwLCBMVERDX0wxQkZDUiArIGxvZnMsCisJCQkgICBMWEJGQ1Jf QkYyIHwgTFhCRkNSX0JGMSwgdmFsKTsKKworCS8qIENvbmZpZ3VyZXMgdGhlIGZyYW1lIGJ1ZmZl ciBsaW5lIG51bWJlciAqLworCXZhbCA9IHkxIC0geTAgKyAxOworCXJlZ21hcF91cGRhdGVfYml0 cyhsdGRjLT5tYXAsIExURENfTDFDRkJMTlIgKyBsb2ZzLAorCQkJICAgTFhDRkJMTlJfQ0ZCTE4s IHZhbCk7CisKKwkvKiBTZXRzIHRoZSBGQiBhZGRyZXNzICovCisJcGFkZHIgPSBsdGRjX2dldF9w YWRkcihmYiwgc3JjX3gsIHNyY195KTsKKwlkZXZfZGJnKGx0ZGMtPmRldiwgImZiOiBwaHlzIDB4 JTA4eCIsIHBhZGRyKTsKKwlyZWdtYXBfd3JpdGUobHRkYy0+bWFwLCBMVERDX0wxQ0ZCQVIgKyBs b2ZzLCBwYWRkcik7CisKKwkvKiBFbmFibGUgbGF5ZXIgYW5kIENMVVQgaWYgbmVlZGVkICovCisJ dmFsID0gZmItPmZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JNQVRfQzggPyBMWENSX0NMVVRFTiA6 IDA7CisJdmFsIHw9IExYQ1JfTEVOOworCXJlZ21hcF91cGRhdGVfYml0cyhsdGRjLT5tYXAsIExU RENfTDFDUiArIGxvZnMsCisJCQkgICBMWENSX0xFTiB8IExYQ1JfQ0xVVEVOLCB2YWwpOworCisJ bXV0ZXhfbG9jaygmbHRkYy0+ZXJyX2xvY2spOworCWlmIChsdGRjLT5lcnJvcl9zdGF0dXMgJiBJ U1JfRlVJRikgeworCQlkZXZfZGJnKGx0ZGMtPmRldiwgIkZpZm8gdW5kZXJydW5cbiIpOworCQls dGRjLT5lcnJvcl9zdGF0dXMgJj0gfklTUl9GVUlGOworCX0KKwlpZiAobHRkYy0+ZXJyb3Jfc3Rh dHVzICYgSVNSX1RFUlJJRikgeworCQlkZXZfZGJnKGx0ZGMtPmRldiwgIlRyYW5zZmVyIGVycm9y XG4iKTsKKwkJbHRkYy0+ZXJyb3Jfc3RhdHVzICY9IH5JU1JfVEVSUklGOworCX0KKwltdXRleF91 bmxvY2soJmx0ZGMtPmVycl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbHRkY19wbGFuZV9hdG9t aWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpvbGRzdGF0ZSkKK3sKKwlzdHJ1Y3QgbHRkYyAqbHRkYyA9IHBsYW5lX3Rv X2x0ZGMocGxhbmUpOworCXUzMiBsb2ZzID0gcGxhbmUtPmluZGV4ICogTEFZX09GUzsKKworCWRl dl9kYmcobHRkYy0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICghb2xkc3RhdGUtPmNy dGMpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiZHJtIHBsYW5lOiVkIG5vdCBlbmFibGVkXG4iLCBw bGFuZS0+YmFzZS5pZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBkaXNhYmxlIGxheWVyICovCisJ cmVnbWFwX3VwZGF0ZV9iaXRzKGx0ZGMtPm1hcCwgTFREQ19MMUNSICsgbG9mcywgTFhDUl9MRU4s IDApOworCisJRFJNX0RFQlVHX0RSSVZFUigiQ1JUQzolZCBwbGFuZTolZFxuIiwKKwkJCSBvbGRz dGF0ZS0+Y3J0Yy0+YmFzZS5pZCwgcGxhbmUtPmJhc2UuaWQpOworfQorCitzdGF0aWMgdm9pZCBs dGRjX3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IGx0 ZGMgKmx0ZGMgPSBwbGFuZV90b19sdGRjKHBsYW5lKTsKKworCWRldl9kYmcobHRkYy0+ZGV2LCAi JXNcbiIsIF9fZnVuY19fKTsKKworCWRybV9wbGFuZV9oZWxwZXJfZGlzYWJsZShwbGFuZSk7CisJ ZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9m dW5jcyBsdGRjX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hl bHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9k aXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gbHRkY19wbGFuZV9kZXN0cm95LAorCS5zZXRfcHJv cGVydHkgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVydHksCisJLnJlc2V0ID0g ZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0 cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBsdGRjX3BsYW5lX2hl bHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrID0gbHRkY19wbGFuZV9hdG9taWNfY2hlY2ss CisJLmF0b21pY191cGRhdGUgPSBsdGRjX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19k aXNhYmxlID0gbHRkY19wbGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX3BsYW5lICpsdGRjX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKKwkJ CQkJICAgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKQoreworCXN0cnVjdCBzdF9wcml2YXRlICpw cml2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcyA9 IENSVENfTUFTSzsKKwlzdHJ1Y3QgbHRkYyAqbHRkYyA9IHByaXYtPmx0ZGM7CisJc3RydWN0IGRy bV9wbGFuZSAqcGxhbmU7CisJdW5zaWduZWQgaW50IGksIG5iX2ZtdCA9IDA7CisJdTMyIGZvcm1h dHNbTkJfUEZdOworCXUzMiBkcm1fZm10OworCWludCBlcnI7CisKKwlkZXZfZGJnKGx0ZGMtPmRl diwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBHZXQgc3VwcG9ydGVkIHBpeGVsIGZvcm1hdHMg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgTkJfUEY7IGkrKykgeworCQlkcm1fZm10ID0gdG9fZHJtX3Bp eGVsZm9ybWF0KGx0ZGMtPmNhcHMucGl4X2ZtdF9od1tpXSk7CisJCWlmICghZHJtX2ZtdCkKKwkJ CWNvbnRpbnVlOworCQlmb3JtYXRzW25iX2ZtdCsrXSA9IGRybV9mbXQ7CisJfQorCisJcGxhbmUg PSBkZXZtX2t6YWxsb2MobHRkYy0+ZGV2LCBzaXplb2YoKnBsYW5lKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFwbGFuZSkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2lu aXQoZGRldiwgcGxhbmUsIHBvc3NpYmxlX2NydGNzLAorCQkJCSAgICAgICAmbHRkY19wbGFuZV9m dW5jcywgZm9ybWF0cywgbmJfZm10LAorCQkJCSAgICAgICB0eXBlLCBOVUxMKTsKKwlpZiAoZXJy IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJmx0ZGNf cGxhbmVfaGVscGVyX2Z1bmNzKTsKKworCURSTV9ERUJVR19EUklWRVIoInBsYW5lOiVkIGNyZWF0 ZWRcbiIsIHBsYW5lLT5iYXNlLmlkKTsKKworCXJldHVybiBwbGFuZTsKK30KKworc3RhdGljIHZv aWQgbHRkY19wbGFuZV9kZXN0cm95X2FsbChzdHJ1Y3QgbHRkYyAqbHRkYykKK3sKKwlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwgKnBsYW5lX3RlbXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocGxhbmUsIHBsYW5lX3RlbXAsCisJCQkJICZsdGRjLT5kZGV2LT5tb2RlX2NvbmZpZy5wbGFu ZV9saXN0LCBoZWFkKQorCQlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7Cit9CisKK3N0YXRpYyBp bnQgbHRkY19jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsIHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKK3sKKwlzdHJ1Y3Qgc3RfcHJpdmF0ZSAqcHJpdiA9IGRkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCBsdGRjICpsdGRjID0gcHJpdi0+bHRkYzsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpw cmltYXJ5LCAqb3ZlcmxheTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmVzOworCisJZGV2X2Ri ZyhsdGRjLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJcHJpbWFyeSA9IGx0ZGNfcGxhbmVf Y3JlYXRlKGRkZXYsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCWlmICghcHJpbWFyeSkgewor CQlEUk1fRVJST1IoIkNhbiBub3QgY3JlYXRlIHByaW1hcnkgcGxhbmVcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXMgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRkZXYsIGNy dGMsIHByaW1hcnksIE5VTEwsCisJCQkJCSZsdGRjX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChy ZXMpIHsKKwkJRFJNX0VSUk9SKCJDYW4gbm90IGluaXRpYWxpemUgQ1JUQ1xuIik7CisJCWdvdG8g Y2xlYW51cDsKKwl9CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKGNydGMsICZsdGRjX2NydGNfaGVs cGVyX2Z1bmNzKTsKKworCURSTV9ERUJVR19EUklWRVIoIkNSVEM6JWQgY3JlYXRlZFxuIiwgY3J0 Yy0+YmFzZS5pZCk7CisKKwkvKiBBZGQgcGxhbmVzLiBOb3RlIDogdGhlIGZpcnN0IGxheWVyIGlz IHVzZWQgYnkgcHJpbWFyeSBwbGFuZSAqLworCWZvciAoaSA9IDE7IGkgPCBsdGRjLT5jYXBzLm5i X2xheWVyczsgaSsrKSB7CisJCW92ZXJsYXkgPSBsdGRjX3BsYW5lX2NyZWF0ZShkZGV2LCBEUk1f UExBTkVfVFlQRV9PVkVSTEFZKTsKKwkJaWYgKCFvdmVybGF5KSB7CisJCQlyZXMgPSAtRU5PTUVN OworCQkJRFJNX0VSUk9SKCJDYW4gbm90IGNyZWF0ZSBvdmVybGF5IHBsYW5lICVkXG4iLCBpKTsK KwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitjbGVhbnVwOgorCWx0 ZGNfcGxhbmVfZGVzdHJveV9hbGwobHRkYyk7CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIERS TV9FTkNPREVSCisgKi8KKworc3RhdGljIHZvaWQgbHRkY19yZ2JfZW5jb2Rlcl9lbmFibGUoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBsdGRjICpsdGRjID0gZW5jb2Rl cl90b19sdGRjKGVuY29kZXIpOworCisJRFJNX0RFQlVHX0RSSVZFUigiXG4iKTsKKwlkcm1fcGFu ZWxfcHJlcGFyZShsdGRjLT5wYW5lbCk7CisJZHJtX3BhbmVsX2VuYWJsZShsdGRjLT5wYW5lbCk7 Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfcmdiX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGx0ZGMgKmx0ZGMgPSBlbmNvZGVyX3RvX2x0ZGMo ZW5jb2Rlcik7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIpOworCisJZHJtX3BhbmVsX2Rpc2Fi bGUobHRkYy0+cGFuZWwpOworCWRybV9wYW5lbF91bnByZXBhcmUobHRkYy0+cGFuZWwpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBsdGRjX3JnYl9l bmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkuZW5hYmxlID0gbHRkY19yZ2JfZW5jb2Rlcl9lbmFi bGUsCisJLmRpc2FibGUgPSBsdGRjX3JnYl9lbmNvZGVyX2Rpc2FibGUsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGx0ZGNfcmdiX2VuY29kZXJfZnVuY3MgPSB7 CisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIHN0cnVjdCBk cm1fZW5jb2RlciAqbHRkY19yZ2JfZW5jb2Rlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRk ZXYpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCisJZW5jb2RlciA9IGRldm1f a3phbGxvYyhkZGV2LT5kZXYsIHNpemVvZigqZW5jb2RlciksIEdGUF9LRVJORUwpOworCWlmICgh ZW5jb2RlcikKKwkJcmV0dXJuIE5VTEw7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IENS VENfTUFTSzsKKwllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSAwOyAvKiBObyBjbG9uaW5nIHN1 cHBvcnQgKi8KKworCWRybV9lbmNvZGVyX2luaXQoZGRldiwgZW5jb2RlciwgJmx0ZGNfcmdiX2Vu Y29kZXJfZnVuY3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9MVkRTLCBOVUxMKTsKKworCWRybV9l bmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJmx0ZGNfcmdiX2VuY29kZXJfaGVscGVyX2Z1bmNz KTsKKworCURSTV9ERUJVR19EUklWRVIoIlJHQiBlbmNvZGVyOiVkIGNyZWF0ZWRcbiIsIGVuY29k ZXItPmJhc2UuaWQpOworCisJcmV0dXJuIGVuY29kZXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJt X2VuY29kZXIgKmx0ZGNfcmdiX2VuY29kZXJfZmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikK K3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGVuY29kZXIsICZkZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYg KGVuY29kZXItPmVuY29kZXJfdHlwZSA9PSBEUk1fTU9ERV9FTkNPREVSX0xWRFMpCisJCQlyZXR1 cm4gZW5jb2RlcjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBsdGRjX2Ny ZWF0ZV9lbmNvZGVycyhzdHJ1Y3QgbHRkYyAqbHRkYykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGRldiA9IGx0ZGMtPmRkZXY7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCisJZGV2 X2RiZyhsdGRjLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGx0ZGMtPnBhbmVsKSB7 CisJCWVuY29kZXIgPSBsdGRjX3JnYl9lbmNvZGVyX2NyZWF0ZShkZGV2KTsKKwkJaWYgKCFlbmNv ZGVyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGx0ZGNfZGVzdHJveV9lbmNvZGVycyhzdHJ1Y3QgbHRkYyAqbHRkYykKK3sKKwlzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsICplbmNvZGVyX3RlbXA7CisKKwlkZXZfZGJnKGx0ZGMtPmRl diwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW5jb2Rl ciwgZW5jb2Rlcl90ZW1wLAorCQkJCSAmbHRkYy0+ZGRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9s aXN0LCBoZWFkKQorCQlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCisvKgorICog RFJNX0NPTk5FQ1RPUgorICovCisKK3N0YXRpYyBpbnQgbHRkY19yZ2JfY29ubmVjdG9yX2dldF9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBsdGRjICps dGRjID0gY29ubmVjdG9yX3RvX2x0ZGMoY29ubmVjdG9yKTsKKwlpbnQgcmV0ID0gMDsKKworCWRl dl9kYmcobHRkYy0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChsdGRjLT5wYW5lbCkK KwkJcmV0ID0gZHJtX3BhbmVsX2dldF9tb2RlcyhsdGRjLT5wYW5lbCk7CisKKwlyZXR1cm4gcmV0 IDwgMCA/IDAgOiByZXQ7Cit9CisKKy8qIFNldCBhIHRvbGVyYW5jZSBvZiAxMCUgb24gcGl4ZWwg Y2xvY2sgKi8KKyNkZWZpbmUgQ0xLX1RPTEVSQU5DRV9QQ1QgMTAKKworc3RhdGljIGVudW0gZHJt X21vZGVfc3RhdHVzCitsdGRjX3JnYl9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCit7CisJc3RydWN0IGx0ZGMgKmx0ZGMgPSBjb25uZWN0b3JfdG9fbHRkYyhjb25uZWN0b3Ip OworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IG1vZGUtPmNsb2NrICogMTAwMDsKKwlsb25nIHJhdGVf bWluID0gcmF0ZSAtIChyYXRlICogQ0xLX1RPTEVSQU5DRV9QQ1QpIC8gMTAwOworCWxvbmcgcmF0 ZV9tYXggPSByYXRlOworCWxvbmcgcm91bmRlZF9yYXRlOworCisJcm91bmRlZF9yYXRlID0gY2xr X3JvdW5kX3JhdGUobHRkYy0+cGl4ZWxfY2xrLCByYXRlKTsKKworCURSTV9ERUJVR19EUklWRVIo IlRhcmdldCByYXRlID0gJWxkID0+IGF2YWlsYWJsZSByYXRlID0gJWxkXG4iLAorCQkJIHJhdGUs IHJvdW5kZWRfcmF0ZSk7CisKKwlpZiAocm91bmRlZF9yYXRlIDwgcmF0ZV9taW4pCisJCXJldHVy biBNT0RFX0NMT0NLX0xPVzsKKworCWlmIChyb3VuZGVkX3JhdGUgPiByYXRlX21heCkKKwkJcmV0 dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCWlmICghcmF0ZSkKKwkJcmV0dXJuIE1PREVfQkFEOwor CisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgbHRkY19yZ2JfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVz ID0gbHRkY19yZ2JfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGx0ZGNfcmdi X2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMKK2x0ZGNfcmdiX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgbHRkYyAqbHRkYyA9IGNvbm5lY3Rvcl90 b19sdGRjKGNvbm5lY3Rvcik7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKGx0ZGMtPmRldiwg IiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAobHRkYy0+cGFuZWwpIHsKKwkJcmV0ID0gZHJtX3Bh bmVsX2F0dGFjaChsdGRjLT5wYW5lbCwgY29ubmVjdG9yKTsKKworCQlpZiAoIXJldCB8fCByZXQg PT0gLUVCVVNZKSB7CisJCQlEUk1fREVCVUdfRFJJVkVSKCJjb25uZWN0b3Igc3RhdHVzIGNvbm5l Y3RlZCIpOworCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQl9CisJfQor CisJRFJNX0RFQlVHX0RSSVZFUigiY29ubmVjdG9yIHN0YXR1cyBkaXNjb25uZWN0ZWQiKTsKKwly ZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGx0 ZGNfcmdiX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cit7CisJc3RydWN0IGx0ZGMgKmx0ZGMgPSBjb25uZWN0b3JfdG9fbHRkYyhjb25uZWN0b3IpOwor CisJZGV2X2RiZyhsdGRjLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGx0ZGMtPnBh bmVsKQorCQlkcm1fcGFuZWxfZGV0YWNoKGx0ZGMtPnBhbmVsKTsKKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y X2Z1bmNzIGx0ZGNfcmdiX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9z aW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSBsdGRjX3JnYl9jb25uZWN0b3JfZGV0 ZWN0LAorCS5kZXN0cm95ID0gbHRkY19yZ2JfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0g ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRv bWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9z dGF0ZSwKK307CisKK3N0cnVjdCBkcm1fY29ubmVjdG9yICpsdGRjX3JnYl9jb25uZWN0b3JfY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3I7CisJaW50IGVycjsKKworCWNvbm5lY3RvciA9IGRldm1fa3phbGxvYyhkZGV2LT5k ZXYsIHNpemVvZigqY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25uZWN0b3IpIHsK KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgY29ubmVjdG9yXG4iKTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBE OworCisJZXJyID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRkZXYsIGNvbm5lY3RvciwgJmx0ZGNfcmdi X2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpOworCWlmIChl cnIpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3JcbiIpOwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9y LCAmbHRkY19yZ2JfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlEUk1fREVCVUdfRFJJVkVS KCJSR0IgY29ubmVjdG9yOiVkIGNyZWF0ZWRcbiIsIGNvbm5lY3Rvci0+YmFzZS5pZCk7CisKKwly ZXR1cm4gY29ubmVjdG9yOworfQorCisvKgorICogUFJPQkUgJiBCSU5ESU5HCisgKi8KKworc3Rh dGljIGludCBsdGRjX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0 ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGx0ZGMgKmx0ZGMgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGRhdGE7CisJc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOwor CXN0cnVjdCBzdF9wcml2YXRlICpwcml2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRy bV9jcnRjICpjcnRjOworCWludCBlcnI7CisKKwlkZXZfZGJnKGx0ZGMtPmRldiwgIiVzIGRybV9k ZXZpY2UgKmRldiAweCUwOHhcbiIsCisJCV9fZnVuY19fLCAodTMyKShkZGV2KSk7CisKKwlwcml2 LT5sdGRjID0gbHRkYzsKKwlsdGRjLT5kZGV2ID0gZGRldjsKKworCWlmIChsdGRjX2NyZWF0ZV9l bmNvZGVycyhsdGRjKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZW5jb2RlcnNc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobHRkYy0+cGFuZWwpIHsKKwkJZW5j b2RlciA9IGx0ZGNfcmdiX2VuY29kZXJfZmluZChkZGV2KTsKKwkJaWYgKCFlbmNvZGVyKSB7CisJ CQlEUk1fRVJST1IoIkZhaWxlZCB0byBmaW5kIFJHQiBlbmNvZGVyXG4iKTsKKwkJCWVyciA9IC1F SU5WQUw7CisJCQlnb3RvIGVycl9lbmNvZGVyOworCQl9CisKKwkJY29ubmVjdG9yID0gbHRkY19y Z2JfY29ubmVjdG9yX2NyZWF0ZShkZGV2KTsKKwkJaWYgKCFjb25uZWN0b3IpIHsKKwkJCURSTV9F UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBSR0IgY29ubmVjdG9yXG4iKTsKKwkJCWVyciA9IC1FSU5W QUw7CisJCQlnb3RvIGVycl9lbmNvZGVyOworCQl9CisKKwkJZXJyID0gZHJtX21vZGVfY29ubmVj dG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisJCWlmIChlcnIpIHsKKwkJ CURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBjb25uZWN0b3IgdG8gZW5jb2RlclxuIik7CisJ CQlnb3RvIGVycl9jb25uZWN0b3I7CisJCX0KKwl9CisKKwljcnRjID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpjcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcnRjKSB7CisJCURSTV9FUlJP UigiRmFpbGVkIHRvIGFsbG9jYXRlIGNydGNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3Rv IGVycl9jb25uZWN0b3I7CisJfQorCisJZXJyID0gbHRkY19jcnRjX2luaXQoZGRldiwgY3J0Yyk7 CisJaWYgKGVycikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0IGNydGNcbiIpOworCQln b3RvIGVycl9jb25uZWN0b3I7CisJfQorCisJZXJyID0gZHJtX3ZibGFua19pbml0KGRkZXYsIE5C X0NSVEMpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgY2FsbGluZyBkcm1fdmJs YW5rX2luaXQoKVxuIik7CisJCWdvdG8gZXJyX3ZibGFuazsKKwl9CisKKwkvKiBBbGxvdyB1c2Fn ZSBvZiB2Ymxhbmsgd2l0aG91dCBoYXZpbmcgdG8gY2FsbCBkcm1faXJxX2luc3RhbGwgKi8KKwlk ZGV2LT5pcnFfZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gMDsKKworZXJyX3ZibGFuazoKKwlsdGRj X3BsYW5lX2Rlc3Ryb3lfYWxsKGx0ZGMpOworZXJyX2Nvbm5lY3RvcjoKKwlsdGRjX3JnYl9jb25u ZWN0b3JfZGVzdHJveShjb25uZWN0b3IpOworZXJyX2VuY29kZXI6CisJbHRkY19kZXN0cm95X2Vu Y29kZXJzKGx0ZGMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbHRkY191bmJp bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IGx0ZGMgKmx0ZGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9k YmcobHRkYy0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRybV92YmxhbmtfY2xlYW51cChs dGRjLT5kZGV2KTsKKwlsdGRjX3BsYW5lX2Rlc3Ryb3lfYWxsKGx0ZGMpOworCWx0ZGNfZGVzdHJv eV9lbmNvZGVycyhsdGRjKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3Bz IGx0ZGNfb3BzID0geworCS5iaW5kID0gbHRkY19iaW5kLAorCS51bmJpbmQgPSBsdGRjX3VuYmlu ZCwKK307CisKK3N0YXRpYyBpbnQgbHRkY19nZXRfY2FwcyhzdHJ1Y3QgbHRkYyAqbHRkYykKK3sK Kwl1MzIgYnVzX3dpZHRoX2xvZzIsIGxjciwgZ2MycjsKKworCS8qIGF0IGxlYXN0IDEgbGF5ZXIg bXVzdCBiZSBtYW5hZ2VkICovCisJcmVnbWFwX3JlYWQobHRkYy0+bWFwLCBMVERDX0xDUiwgJmxj cik7CisKKwlsdGRjLT5jYXBzLm5iX2xheWVycyA9IG1heF90KGludCwgbGNyLCAxKTsKKworCS8q IHNldCBkYXRhIGJ1cyB3aWR0aCAqLworCXJlZ21hcF9yZWFkKGx0ZGMtPm1hcCwgTFREQ19HQzJS LCAmZ2Mycik7CisJYnVzX3dpZHRoX2xvZzIgPSAoZ2MyciAmIEdDMlJfQlcpID4+IDQ7CisJbHRk Yy0+Y2Fwcy5idXNfd2lkdGggPSA4IDw8IGJ1c193aWR0aF9sb2cyOworCXJlZ21hcF9yZWFkKGx0 ZGMtPm1hcCwgTFREQ19JRFIsICZsdGRjLT5jYXBzLmh3X3ZlcnNpb24pOworCisJc3dpdGNoIChs dGRjLT5jYXBzLmh3X3ZlcnNpb24pIHsKKwljYXNlIEhXVkVSXzEwMjAwOgorCWNhc2UgSFdWRVJf MTAzMDA6CisJCWx0ZGMtPmNhcHMucmVnX29mcyA9IFJFR19PRlNfTk9ORTsKKwkJbHRkYy0+Y2Fw cy5waXhfZm10X2h3ID0gbHRkY19waXhfZm10X2EwOworCQlicmVhazsKKwljYXNlIEhXVkVSXzIw MTAxOgorCQlsdGRjLT5jYXBzLnJlZ19vZnMgPSBSRUdfT0ZTXzQ7CisJCWx0ZGMtPmNhcHMucGl4 X2ZtdF9odyA9IGx0ZGNfcGl4X2ZtdF9hMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJu IC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHRkY19wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw ZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1 Y3QgcmVzZXRfY29udHJvbCAqcnN0YzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXN0cnVjdCBs dGRjICpsdGRjOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gTlVMTDsKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKmVudGl0eSwgKnJlbW90ZV9wdCA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICpyZWdz OworCWludCBpcnEsIHJldCwgaTsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisKKwkvKgor CSAqIFBhcnNlIGx0ZGMgbm9kZSB0byBnZXQgcmVtb3RlIHBvcnQgYW5kIGZpbmQgUkdCIHBhbmVs IC8gSERNSSBzbGF2ZQorCSAqIElmIGEgZHNpIG9yIGEgYnJpZGdlIChoZG1pLCBsdmRzLi4uKSBp cyBjb25uZWN0ZWQgdG8gbHRkYywKKwkgKiBhIHJlbW90ZSBwb3J0ICYgUkdCIHBhbmVsIHdpbGwg bm90IGJlIGZvdW5kLgorCSAqLworCWZvcl9lYWNoX2VuZHBvaW50X29mX25vZGUobnAsIGVudGl0 eSkgeworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoZW50aXR5KSkKKwkJCWNvbnRpbnVl OworCisJCXJlbW90ZV9wdCA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW50aXR5 KTsKKwkJaWYgKHJlbW90ZV9wdCkgeworCQkJaWYgKCFwYW5lbCkgeworCQkJCXBhbmVsID0gb2Zf ZHJtX2ZpbmRfcGFuZWwocmVtb3RlX3B0KTsKKwkJCQlvZl9ub2RlX3B1dChyZW1vdGVfcHQpOwor CQkJCWlmIChwYW5lbCkgeworCQkJCQlkZXZfZGJnKGRldiwgInJlbW90ZSBwYW5lbCAlc1xuIiwK KwkJCQkJCXJlbW90ZV9wdC0+ZnVsbF9uYW1lKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkZXZfZGJn KGRldiwgImRlZmVycmVkIChwYW5lbCBtaXNzaW5nKVxuIik7CisJCQkJCW9mX25vZGVfcHV0KGVu dGl0eSk7CisJCQkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQkJCX0KKwkJCX0KKwkJfQorCX0K KworCWx0ZGMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmx0ZGMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWx0ZGMpIHsKKwkJRFJNX0VSUk9SKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBs dGRjXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbHRkYy0+ZGV2ID0gZGV2OworCWx0 ZGMtPnBhbmVsID0gcGFuZWw7CisKKwlyc3RjID0gb2ZfcmVzZXRfY29udHJvbF9nZXQobnAsIE5V TEwpOworCisJbXV0ZXhfaW5pdCgmbHRkYy0+ZXJyX2xvY2spOworCisJbHRkYy0+cGl4ZWxfY2xr ID0gZGV2bV9jbGtfZ2V0KGRldiwgImNsay1sY2QiKTsKKwlpZiAoSVNfRVJSKGx0ZGMtPnBpeGVs X2NsaykpIHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZ2V0IGxjZCBjbG9ja1xuIik7CisJCXJl dHVybiAtRU5PREVWOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAm cmVzKSkgeworCQlEUk1fRVJST1IoIlVuYWJsZSB0byBnZXQgcmVzb3VyY2VcbiIpOworCQlyZXR1 cm4gLUVOT0RFVjsKKwl9CisKKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgJnJl cyk7CisJaWYgKElTX0VSUihyZWdzKSkgeworCQlEUk1fRVJST1IoIlVuYWJsZSB0byBnZXQgbHRk YyByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsKKwl9CisKKwlsdGRjLT5t YXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW9fY2xrKGRldiwgImNsay1sY2QiLCByZWdzLAorCQkJ CQkgICAgICAmbHRkY19yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKGx0ZGMtPm1hcCkpIHsK KwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBjcmVhdGUgbHRkYyByZWdpc3RlciBtYXBwaW5nXG4i KTsKKwkJcmV0dXJuIFBUUl9FUlIobHRkYy0+bWFwKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg TUFYX0lSUTsgaSsrKSB7CisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCWlm IChpcnEgPCAwKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVk X2lycShkZXYsIGlycSwgbHRkY19pcnEsCisJCQkJCQlsdGRjX2lycV90aHJlYWQsIElSUUZfT05F U0hPVCwKKwkJCQkJCWRldl9uYW1lKGRldiksIGx0ZGMpOworCQlpZiAocmV0KSB7CisJCQlEUk1f RVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBMVERDIGludGVycnVwdFxuIik7CisJCQlyZXR1cm4g cmV0OworCQl9CisJfQorCisJaWYgKCFJU19FUlIocnN0YykpCisJCXJlc2V0X2NvbnRyb2xfZGVh c3NlcnQocnN0Yyk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlyZWdtYXBfdXBkYXRl X2JpdHMobHRkYy0+bWFwLCBMVERDX0lFUiwKKwkJCSAgIElFUl9MSUUgfCBJRVJfUlJJRSB8IElF Ul9GVUlFIHwgSUVSX1RFUlJJRSwgMCk7CisKKwlyZXQgPSBsdGRjX2dldF9jYXBzKGx0ZGMpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJoYXJkd2FyZSBpZGVudGlmaWVyICgweCUwOHgpIG5v dCBzdXBwb3J0ZWQhXG4iLAorCQkJICBsdGRjLT5jYXBzLmh3X3ZlcnNpb24pOworCQlyZXR1cm4g cmV0OworCX0KKworCURSTV9JTkZPKCJsdGRjIGh3IHZlcnNpb24gMHglMDh4IC0gcmVhZHlcbiIs IGx0ZGMtPmNhcHMuaHdfdmVyc2lvbik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBs dGRjKTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmx0ZGNfb3BzKTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGFkZCBjb21wb25lbnRcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx0ZGNfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJRFJNX0RFQlVHX0RSSVZFUigiXG4iKTsK Kwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZsdGRjX29wcyk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbHRkY19vZl9tYXRjaFtdID0gewor CXsgLmNvbXBhdGlibGUgPSAic3QsbHRkYyIgfSwKKwl7IC8qIGVuZCBub2RlICovIH0KK307CitN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsdGRjX29mX21hdGNoKTsKKworc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBsdGRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzdC1sdGRj IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbHRkY19vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IGx0 ZGNfcHJvYmUsCisJLnJlbW92ZSA9IGx0ZGNfcmVtb3ZlLAorfTsKKworTU9EVUxFX0FVVEhPUigi UGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1Io Illhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+Iik7CitNT0RVTEVfQVVUSE9S KCJGYWJpZW4gRGVzc2VubmUgPGZhYmllbi5kZXNzZW5uZUBzdC5jb20+Iik7CitNT0RVTEVfQVVU SE9SKCJNaWNrYWVsIFJldWxpZXIgPG1pY2thZWwucmV1bGllckBzdC5jb20+Iik7CitNT0RVTEVf REVTQ1JJUFRJT04oIlNUTWljcm9lbGVjdHJvbmljcyBTVCBEUk0gTFREQyBkcml2ZXIiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdC9s dGRjLmggYi9kcml2ZXJzL2dwdS9kcm0vc3QvbHRkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmY5OTE0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v c3QvbHRkYy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9l bGVjdHJvbmljcyBTQSAyMDE3CisgKgorICogQXV0aG9yczogUGhpbGlwcGUgQ29ybnUgPHBoaWxp cHBlLmNvcm51QHN0LmNvbT4KKyAqICAgICAgICAgIFlhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZl cnRyZUBzdC5jb20+CisgKiAgICAgICAgICBGYWJpZW4gRGVzc2VubmUgPGZhYmllbi5kZXNzZW5u ZUBzdC5jb20+CisgKiAgICAgICAgICBNaWNrYWVsIFJldWxpZXIgPG1pY2thZWwucmV1bGllckBz dC5jb20+CisgKgorICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IChHUEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaWZuZGVmIF9MVERDX0hfCisjZGVmaW5lIF9MVERD X0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCitpbnQgbHRkY19jcnRjX2VuYWJsZV92Ymxh bmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBsdGRj X2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50 IHBpcGUpOworCisjZW5kaWYKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK