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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BC268C77B6D for ; Fri, 31 Mar 2023 07:19:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vK53rhhvfdI6G7Ym+kyORGnZcatEOCUQGXfOOwDwbbg=; b=KXiX9EALOtPh0m kM38AX/dzWRkYZ1yTpN9dYzCQNTrpfBurlU+Qjbxi7vlO+L3EYoRCjEHLL00WCL9W0xzKg7RNiopl 1yV24OvAf2NhA/h3GTlNCT28X2AB/hlyy+c3PFC2Uv+qshWmVvflHbc4ST4zBV4j13Oh1ybNjdCOd EqpWKcjrWl1KMzWtmqsZSiEom7vBVKVCiJZDIlq+0DNR71xHzGm6x/kPfK5GJUUDGSN5Y6kgy+qdk bzd61WoiNPfvxj/CUG/sPLqfmihKScl6MAuxkGo6J4cgkFJAPKIohuEq3a8V24UqNTf6L3/u76utr Lbw8dwPFbhuWtNNzMa3w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pi92Q-00686J-2S; Fri, 31 Mar 2023 07:19:06 +0000 Received: from esa.microchip.iphmx.com ([68.232.154.123]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pi92L-00681K-0H for linux-riscv@lists.infradead.org; Fri, 31 Mar 2023 07:19:03 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1680247141; x=1711783141; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=rqsv7idTC/49WihFfW/y4x+Ev8rxS2Q5n4iNB5ovm4w=; b=1pj8UMpqttRLQBtsiy21urAhucMPyTHzBmmW11nrZ3BN0iQ1nNOyADmT 7fAAF9/CEU0aeEg9CHk/9BNx2M7XE6+osQ1/kplaooy3TP27nTSxalsmo J453a8mAp2I94EDMkmPWu41L6AJf6vYHMxH32Iv7PbG0O6wDbec9iz00Z AnzgKh9udU0J4dwq09PNMPOOIWtQ3AZbkhSFMazWib6gW59SoYq/cTzwB inCxGM8QvNVZFOUV5me0Tzl+c7HUjsPOSPmCtW/xaBvdUKiSOPuezfoDf Wx8mpvgSvvTVjXFslMCA4EnMxjG/Dc5xaSW33N05ZpzvEeDt0BwDQUWR5 Q==; X-IronPort-AV: E=Sophos;i="5.98,307,1673938800"; d="scan'208";a="204349788" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 31 Mar 2023 00:19:00 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Fri, 31 Mar 2023 00:18:58 -0700 Received: from wendy.microchip.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.21 via Frontend Transport; Fri, 31 Mar 2023 00:18:56 -0700 From: Conor Dooley To: CC: , , Daire McNamara , Rob Herring , "Krzysztof Kozlowski" , Moritz Fischer , Wu Hao , Xu Yilun , Tom Rix , , , Subject: [PATCH v2 6/7] fpga: add PolarFire SoC Auto Update support Date: Fri, 31 Mar 2023 08:18:22 +0100 Message-ID: <20230331071823.956087-7-conor.dooley@microchip.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331071823.956087-1-conor.dooley@microchip.com> References: <20230331071823.956087-1-conor.dooley@microchip.com> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=19171; i=conor.dooley@microchip.com; h=from:subject; bh=rqsv7idTC/49WihFfW/y4x+Ev8rxS2Q5n4iNB5ovm4w=; b=owGbwMvMwCFWscWwfUFT0iXG02pJDClqnVain2LPnrnDfulgvk5pfddiNtkZ5/fKT3+m2MH5qHOi etWSjlIWBjEOBlkxRZbE230tUuv/uOxw7nkLM4eVCWQIAxenAEzkdBMjw90Ksc2PzQ4axe384O21+L vwV+PNj061n75sqybotuNbshwjw3L5y8dex0zVebnnwiFNpfqns5Y1s6U4bTrEwvQwj31hIRcA X-Developer-Key: i=conor.dooley@microchip.com; a=openpgp; fpr=F9ECA03CF54F12CD01F1655722E2C55B37CF380C X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230331_001901_252893_8BB936EB X-CRM114-Status: GOOD ( 34.84 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org QWRkIHN1cHBvcnQgZm9yIEF1dG8gVXBkYXRlIHJlcHJvZ3JhbW1pbmcgb2YgdGhlIEZQR0EgZmFi cmljIG9uClBvbGFyRmlyZSBTb0MsIHVzaW5nIHRoZSBmd191cGxvYWQgbWVjaGFuaXNtIGEgbGEg dGhlCmludGVsLW0xMC1ibWMtc2VjLXVwZGF0ZSBkcml2ZXIuCgpUaGlzIGRyaXZlciBvbmx5IHdy aXRlcyB0aGUgaW1hZ2UgdG8gdGhlIHNwaSBmbGFzaCAmIHBlcmZvcm1zCnZhbGlkYXRpb24gb24g aXQsIGFzIHRoZSBlbnRpcmUgRlBHQSBiZWNvbWVzIHVudXNhYmxlIGR1cmluZyB0aGUgYWN0dWFs CnJlcHJvZ3JhbW1pbmcgb2YgYSBiaXRzdHJlYW0uIFRvIGluaXRpYXRlIHRoZSByZXByb2dyYW1t aW5nIGl0c2VsZiwgYQpkZXZpY2UgcmVzZXQgaXMgcmVxdWlyZWQuClRoZSBTQkkgU1JTVCBleHRl bnNpb24ncyAiY29sZCByZWJvb3QiIGNhbiB0cmlnZ2VyIHN1Y2ggYSBkZXZpY2UgcmVzZXQsCmJ5 IG1lYW5zIG9mIGEgIlRhbXBlciBNYWNybyIgaW4gdGhlIEZQR0EgZmFicmljLCBwcm92aWRlZCBj b3JyZXNwb25kaW5nCnN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZCBpbiB0aGUgSFNTIChIYXJ0IFNv ZnR3YXJlIFNlcnZpY2VzKS4KClNpZ25lZC1vZmYtYnk6IENvbm9yIERvb2xleSA8Y29ub3IuZG9v bGV5QG1pY3JvY2hpcC5jb20+Ci0tLQogZHJpdmVycy9mcGdhL0tjb25maWcgICAgICAgICAgICAg ICAgIHwgIDExICsKIGRyaXZlcnMvZnBnYS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMyAr LQogZHJpdmVycy9mcGdhL21pY3JvY2hpcC1hdXRvLXVwZGF0ZS5jIHwgNDk0ICsrKysrKysrKysr KysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MDcgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZnBnYS9taWNyb2NoaXAtYXV0 by11cGRhdGUuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZnBnYS9LY29uZmlnIGIvZHJpdmVycy9m cGdhL0tjb25maWcKaW5kZXggMGEwMDc2M2I5ZjI4Li4yODM4Y2U3ZGRhZmUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZnBnYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZnBnYS9LY29uZmlnCkBAIC0yNTcs NiArMjU3LDE3IEBAIGNvbmZpZyBGUEdBX00xMF9CTUNfU0VDX1VQREFURQogCSAgKEJNQykgYW5k IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHNlY3VyZSB1cGRhdGVzIGZvciB0aGUgQk1DIGltYWdlLAog CSAgdGhlIEZQR0EgaW1hZ2UsIHRoZSBSb290IEVudHJ5IEhhc2hlcywgZXRjLgogCitjb25maWcg RlBHQV9NSUNST0NISVBfQVVUT19VUERBVEUKKwl0cmlzdGF0ZSAiTWljcm9jaGlwIFBvbGFyRmly ZSBTb0MgQVVUTyBVUERBVEUiCisJZGVwZW5kcyBvbiBQT0xBUkZJUkVfU09DX1NZU19DVFJMCisJ c2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBGV19VUExPQUQKKwloZWxwCisJICBGUEdBIG1hbmFn ZXIgZHJpdmVyIHN1cHBvcnQgZm9yIHJlcHJvZ3JhbW1pbmcgUG9sYXJGaXJlIFNvQyBmcm9tCisJ ICB3aXRoaW4gTGludXgsIHVzaW5nIHRoZSBBdXRvIFVwZ3JhZGUgZmVhdHVyZSBvZiB0aGUgc3lz dGVtIGNvbnRyb2xsZXIuCisKKwkgIElmIGJ1aWx0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNh bGxlZCBtaWNyb2NoaXAtYXV0by11cGRhdGUuCisKIGNvbmZpZyBGUEdBX01HUl9NSUNST0NISVBf U1BJCiAJdHJpc3RhdGUgIk1pY3JvY2hpcCBQb2xhcmZpcmUgU1BJIEZQR0EgbWFuYWdlciIKIAlk ZXBlbmRzIG9uIFNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9mcGdhL01ha2VmaWxlIGIvZHJpdmVy cy9mcGdhL01ha2VmaWxlCmluZGV4IDcyZTU1NGI0ZDJmNy4uMGIxYmE2ZGI4NjBkIDEwMDY0NAot LS0gYS9kcml2ZXJzL2ZwZ2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9mcGdhL01ha2VmaWxlCkBA IC0yNSw4ICsyNSw5IEBAIG9iai0kKENPTkZJR19GUEdBX01HUl9MQVRUSUNFX1NZU0NPTkZJR19T UEkpCSs9IGxhdHRpY2Utc3lzY29uZmlnLXNwaS5vCiBvYmotJChDT05GSUdfQUxURVJBX1BSX0lQ X0NPUkUpCQkrPSBhbHRlcmEtcHItaXAtY29yZS5vCiBvYmotJChDT05GSUdfQUxURVJBX1BSX0lQ X0NPUkVfUExBVCkJKz0gYWx0ZXJhLXByLWlwLWNvcmUtcGxhdC5vCiAKLSMgRlBHQSBTZWN1cmUg VXBkYXRlIERyaXZlcnMKKyMgRlBHQSBGaXJtd2FyZSBVcGxvYWQgRHJpdmVycwogb2JqLSQoQ09O RklHX0ZQR0FfTTEwX0JNQ19TRUNfVVBEQVRFKQkrPSBpbnRlbC1tMTAtYm1jLXNlYy11cGRhdGUu bworb2JqLSQoQ09ORklHX0ZQR0FfTUlDUk9DSElQX0FVVE9fVVBEQVRFKQkrPSBtaWNyb2NoaXAt YXV0by11cGRhdGUubwogCiAjIEZQR0EgQnJpZGdlIERyaXZlcnMKIG9iai0kKENPTkZJR19GUEdB X0JSSURHRSkJCSs9IGZwZ2EtYnJpZGdlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZnBnYS9taWNy b2NoaXAtYXV0by11cGRhdGUuYyBiL2RyaXZlcnMvZnBnYS9taWNyb2NoaXAtYXV0by11cGRhdGUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVmYTkyMGI2NTljNgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZnBnYS9taWNyb2NoaXAtYXV0by11cGRhdGUuYwpA QCAtMCwwICsxLDQ5NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8q CisgKiBNaWNyb2NoaXAgUG9sYXJmaXJlIFNvQyAiQXV0byBVcGRhdGUiIEZQR0EgcmVwcm9ncmFt bWluZy4KKyAqCisgKiBEb2N1bWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhdmFp bGFibGUgaW4gdGhlICJQb2xhckZpcmXCriBGUEdBIGFuZAorICogUG9sYXJGaXJlIFNvQyBGUEdB IFByb2dyYW1taW5nIiBVc2VyIEd1aWRlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDIz IE1pY3JvY2hpcCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRo b3I6IENvbm9yIERvb2xleSA8Y29ub3IuZG9vbGV5QG1pY3JvY2hpcC5jb20+CisgKi8KKyNpbmNs dWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNs dWRlIDxsaW51eC9tYXRoLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3NpemVzLmg+CisKKyNpbmNsdWRlIDxzb2MvbWljcm9jaGlwL21wZnMuaD4KKworI2Rl ZmluZSBBVVRPX1VQREFURV9ERUZBVUxUX01CT1hfT0ZGU0VUCQkwdQorI2RlZmluZSBBVVRPX1VQ REFURV9ERUZBVUxUX1JFU1BfT0ZGU0VUCQkwdQorCisjZGVmaW5lIEFVVE9fVVBEQVRFX0ZFQVRV UkVfQ01EX09QQ09ERQkJMHgwNXUKKyNkZWZpbmUgQVVUT19VUERBVEVfRkVBVFVSRV9DTURfREFU QV9TSVpFCTB1CisjZGVmaW5lIEFVVE9fVVBEQVRFX0ZFQVRVUkVfUkVTUF9TSVpFCQkzM3UKKyNk ZWZpbmUgQVVUT19VUERBVEVfRkVBVFVSRV9DTURfREFUQQkJTlVMTAorI2RlZmluZSBBVVRPX1VQ REFURV9GRUFUVVJFX0VOQUJMRUQJCUJJVCg1KQorCisjZGVmaW5lIEFVVE9fVVBEQVRFX0FVVEhF TlRJQ0FURV9DTURfT1BDT0RFCTB4MjJ1CisjZGVmaW5lIEFVVE9fVVBEQVRFX0FVVEhFTlRJQ0FU RV9DTURfREFUQV9TSVpFCTB1CisjZGVmaW5lIEFVVE9fVVBEQVRFX0FVVEhFTlRJQ0FURV9SRVNQ X1NJWkUJMXUKKyNkZWZpbmUgQVVUT19VUERBVEVfQVVUSEVOVElDQVRFX0NNRF9EQVRBCU5VTEwK KworI2RlZmluZSBBVVRPX1VQREFURV9QUk9HUkFNX0NNRF9PUENPREUJCTB4NDZ1CisjZGVmaW5l IEFVVE9fVVBEQVRFX1BST0dSQU1fQ01EX0RBVEFfU0laRQkwdQorI2RlZmluZSBBVVRPX1VQREFU RV9QUk9HUkFNX1JFU1BfU0laRQkJMXUKKyNkZWZpbmUgQVVUT19VUERBVEVfUFJPR1JBTV9DTURf REFUQQkJTlVMTAorCisvKgorICogU1BJIEZsYXNoIGxheW91dCBleGFtcGxlOgorICogfC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgMHgwMDAwMDAwCisgKiB8IDEgS2lCICAgICAgICAg ICAgICAgICAgICAgICAgfAorICogfCBTUEkgImRpcmVjdG9yaWVzIiAgICAgICAgICAgIHwKKyAq IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IDB4MDAwMDQwMAorICogfCAxIE1pQiAg ICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgUmVzZXJ2ZWQgYXJlYSAgICAgICAgICAgICAg ICB8CisgKiB8IFVzZWQgZm9yIGJpdHN0cmVhbSBpbmZvICAgICAgfAorICogfC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLXwgMHgwMTAwNDAwCisgKiB8IDIwIE1pQiAgICAgICAgICAgICAg ICAgICAgICAgfAorICogfCBHb2xkZW4gSW1hZ2UgICAgICAgICAgICAgICAgIHwKKyAqIHwtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IDB4MTUwMDQwMAorICogfCAyMCBNaUIgICAgICAg ICAgICAgICAgICAgICAgIHwKKyAqIHwgQXV0byBVcGdyYWRlIEltYWdlICAgICAgICAgICB8Cisg KiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAweDI5MDA0MDAKKyAqIHwgMjAgTWlC ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8IFJlc2VydmVkIGZvciBtdWx0aS1pbWFnZSBJ QVAgfAorICogfCBVbnVzZWQgZm9yIEF1dG8gVXBncmFkZSAgICAgIHwKKyAqIHwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS18IDB4M0QwMDQwMAorICogfCA/IEIgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKKyAqIHwgVW51c2VkICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8LS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAweD8KKyAqLworI2RlZmluZSBBVVRPX1VQREFU RV9ESVJFQ1RPUllfQkFTRQkwdQorI2RlZmluZSBBVVRPX1VQREFURV9ESVJFQ1RPUllfV0lEVEgJ NHUKKyNkZWZpbmUgQVVUT19VUERBVEVfR09MREVOX0lOREVYCTB1CisjZGVmaW5lIEFVVE9fVVBE QVRFX1VQR1JBREVfSU5ERVgJMXUKKyNkZWZpbmUgQVVUT19VUERBVEVfQkxBTktfSU5ERVgJCTJ1 CisjZGVmaW5lIEFVVE9fVVBEQVRFX0dPTERFTl9ESVJFQ1RPUlkJKEFVVE9fVVBEQVRFX0RJUkVD VE9SWV9XSURUSCAqIEFVVE9fVVBEQVRFX0dPTERFTl9JTkRFWCkKKyNkZWZpbmUgQVVUT19VUERB VEVfVVBHUkFERV9ESVJFQ1RPUlkJKEFVVE9fVVBEQVRFX0RJUkVDVE9SWV9XSURUSCAqIEFVVE9f VVBEQVRFX1VQR1JBREVfSU5ERVgpCisjZGVmaW5lIEFVVE9fVVBEQVRFX0JMQU5LX0RJUkVDVE9S WQkoQVVUT19VUERBVEVfRElSRUNUT1JZX1dJRFRIICogQVVUT19VUERBVEVfQkxBTktfSU5ERVgp CisjZGVmaW5lIEFVVE9fVVBEQVRFX0RJUkVDVE9SWV9TSVpFCVNaXzFLCisjZGVmaW5lIEFVVE9f VVBEQVRFX1JFU0VSVkVEX1NJWkUJU1pfMU0KKyNkZWZpbmUgQVVUT19VUERBVEVfQklUU1RSRUFN X0JBU0UJKEFVVE9fVVBEQVRFX0RJUkVDVE9SWV9TSVpFICsgQVVUT19VUERBVEVfUkVTRVJWRURf U0laRSkKKworI2RlZmluZSBBVVRPX1VQREFURV9USU1FT1VUX01TCQk2MDAwMAorCitzdHJ1Y3Qg bXBmc19hdXRvX3VwZGF0ZV9wcml2IHsKKwlzdHJ1Y3QgbXBmc19zeXNfY29udHJvbGxlciAqc3lz X2NvbnRyb2xsZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBtdGRfaW5mbyAqZmxh c2g7CisJc3RydWN0IGZ3X3VwbG9hZCAqZndfdXBsb2FkZXI7CisJc3RydWN0IGNvbXBsZXRpb24g cHJvZ3JhbW1pbmdfY29tcGxldGU7CisJc2l6ZV90IHNpemVfcGVyX2JpdHN0cmVhbTsKKwlib29s IGNhbmNlbF9yZXF1ZXN0OworfTsKKworc3RhdGljIGVudW0gZndfdXBsb2FkX2VyciBtcGZzX2F1 dG9fdXBkYXRlX3ByZXBhcmUoc3RydWN0IGZ3X3VwbG9hZCAqZndfdXBsb2FkZXIsIGNvbnN0IHU4 ICpkYXRhLAorCQkJCQkJICAgdTMyIHNpemUpCit7CisJc3RydWN0IG1wZnNfYXV0b191cGRhdGVf cHJpdiAqcHJpdiA9IGZ3X3VwbG9hZGVyLT5kZF9oYW5kbGU7CisJc2l6ZV90IGVyYXNlX3NpemUg PSBBVVRPX1VQREFURV9ESVJFQ1RPUllfU0laRTsKKworCS8qCisJICogVmVyaWZ5aW5nIHRoZSBH b2xkZW4gSW1hZ2UgaXMgaWRlYWxpc3RpYy4gSXQgd2lsbCBiZSBldmFsdWF0ZWQKKwkgKiBhZ2Fp bnN0IHRoZSBjdXJyZW50bHkgcHJvZ3JhbW1lZCBpbWFnZSBhbmQgdGh1cyBtYXkgZmFpbCAtIGR1 ZSB0bworCSAqIGVpdGhlciByb2xsYmFjayBwcm90ZWN0aW9uIChpZiBpdHMgYW4gb2xkZXIgdmVy c2lvbiB0aGFuIHRoYXQgaW4gdXNlKQorCSAqIG9yIGlmIHRoZSB2ZXJzaW9uIGlzIHRoZSBzYW1l IGFzIHRoYXQgb2YgdGhlIGluLXVzZSBpbWFnZS4KKwkgKiBFeHRyYWN0aW5nIHRoZSBpbmZvcm1h dGlvbiBhcyB0byB3aHkgYSBmYWlsdXJlIG9jY3VycmVkIGlzIG5vdAorCSAqIGN1cnJlbnRseSBw b3NzaWJsZSBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIHN5c3RlbSBjb250cm9sbGVyCisJICog ZHJpdmVyLiBJZiB0aG9zZSBhcmUgZml4ZWQsIHZlcmlmaWNhdGlvbiBvZiB0aGUgR29sZGVuIElt YWdlIHNob3VsZAorCSAqIGJlIGFkZGVkIGhlcmUuCisJICovCisKKwlwcml2LT5mbGFzaCA9IG1w ZnNfc3lzX2NvbnRyb2xsZXJfZ2V0X2ZsYXNoKHByaXYtPnN5c19jb250cm9sbGVyKTsKKwlpZiAo IXByaXYtPmZsYXNoKQorCQlyZXR1cm4gRldfVVBMT0FEX0VSUl9IV19FUlJPUjsKKworCWVyYXNl X3NpemUgPSByb3VuZF91cChlcmFzZV9zaXplLCAodTY0KXByaXYtPmZsYXNoLT5lcmFzZXNpemUp OworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNhbGN1bGF0ZSBpZiB3ZSBoYXZlIGVub3VnaCBzcGFj ZSBpbiB0aGUgZmxhc2ggZm9yIHRoZQorCSAqIG5ldyBpbWFnZS4KKwkgKiBGaXJzdCwgY2hvcCBv ZmYgdGhlIGZpcnN0IDEgS2lCIGFzIGl0J3MgcmVzZXJ2ZWQgZm9yIHRoZSBkaXJlY3RvcnkuCisJ ICogVGhlIDEgTWlCIHJlc2VydmVkIGZvciBkZXNpZ24gaW5mbyBuZWVkcyB0byBiZSBpZ25vcmVk IGFsc28uCisJICogQWxsIHRoYXQgcmVtYWlucyBpcyBjYXJ2ZWQgaW50byAzICYgcm91bmRlZCBk b3duIHRvIHRoZSBlcmFzZXNpemUuCisJICogSWYgdGhpcyBpcyBzbWFsbGVyIHRoYW4gdGhlIGlt YWdlIHNpemUsIHdlIGFib3J0LgorCSAqIFRoZXJlJ3MgYWxzbyBubyBuZWVkIHRvIGNvbnN1bWUg bW9yZSB0aGFuIDIwIE1pQiBwZXIgaW1hZ2UuCisJICovCisJcHJpdi0+c2l6ZV9wZXJfYml0c3Ry ZWFtID0gcHJpdi0+Zmxhc2gtPnNpemUgLSBTWl8xSyAtIFNaXzFNOworCXByaXYtPnNpemVfcGVy X2JpdHN0cmVhbSA9IHJvdW5kX2Rvd24ocHJpdi0+c2l6ZV9wZXJfYml0c3RyZWFtIC8gMywgZXJh c2Vfc2l6ZSk7CisJaWYgKHByaXYtPnNpemVfcGVyX2JpdHN0cmVhbSA+IDIwICogU1pfMU0pCisJ CXByaXYtPnNpemVfcGVyX2JpdHN0cmVhbSA9IDIwICogU1pfMU07CisKKwlpZiAocHJpdi0+c2l6 ZV9wZXJfYml0c3RyZWFtIDwgc2l6ZSkgeworCQlkZXZfZXJyKHByaXYtPmRldiwKKwkJCSJmbGFz aCBkZXZpY2UgaGFzIGluc3VmZmljaWVudCBjYXBhY2l0eSB0byBzdG9yZSB0aGlzIGJpdHN0cmVh bVxuIik7CisJCXJldHVybiBGV19VUExPQURfRVJSX0lOVkFMSURfU0laRTsKKwl9CisKKwlwcml2 LT5jYW5jZWxfcmVxdWVzdCA9IGZhbHNlOworCisJcmV0dXJuIEZXX1VQTE9BRF9FUlJfTk9ORTsK K30KKworc3RhdGljIHZvaWQgbXBmc19hdXRvX3VwZGF0ZV9jYW5jZWwoc3RydWN0IGZ3X3VwbG9h ZCAqZndfdXBsb2FkZXIpCit7CisJc3RydWN0IG1wZnNfYXV0b191cGRhdGVfcHJpdiAqcHJpdiA9 IGZ3X3VwbG9hZGVyLT5kZF9oYW5kbGU7CisKKwlwcml2LT5jYW5jZWxfcmVxdWVzdCA9IHRydWU7 Cit9CisKK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnIgbXBmc19hdXRvX3VwZGF0ZV9wb2xsX2Nv bXBsZXRlKHN0cnVjdCBmd191cGxvYWQgKmZ3X3VwbG9hZGVyKQoreworCXN0cnVjdCBtcGZzX2F1 dG9fdXBkYXRlX3ByaXYgKnByaXYgPSBmd191cGxvYWRlci0+ZGRfaGFuZGxlOworCWludCByZXQ7 CisKKwkvKgorCSAqIFRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgd2F5IHRvIGdldCB0aGUgc3RhdHVz IG9mIHRoZSBwcm9ncmFtbWluZyB3aGlsZQorCSAqIGl0IGlzIGluIHByb2dyZXNzLCBzbyBhdHRl bXB0aW5nIGFueXRoaW5nIG90aGVyIHRoYW4gd2FpdGluZyBmb3IgaXQKKwkgKiB0byBjb21wbGV0 ZSB3b3VsZCBiZSBtaXNwbGFjZWQuCisJICovCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KCZwcml2LT5wcm9ncmFtbWluZ19jb21wbGV0ZSwKKwkJCQkJICBtc2Vjc190b19qaWZm aWVzKEFVVE9fVVBEQVRFX1RJTUVPVVRfTVMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRldfVVBM T0FEX0VSUl9USU1FT1VUOworCisJcmV0dXJuIEZXX1VQTE9BRF9FUlJfTk9ORTsKK30KKworc3Rh dGljIGludCBtcGZzX2F1dG9fdXBkYXRlX3ZlcmlmeV9pbWFnZShzdHJ1Y3QgZndfdXBsb2FkICpm d191cGxvYWRlcikKK3sKKwlzdHJ1Y3QgbXBmc19hdXRvX3VwZGF0ZV9wcml2ICpwcml2ID0gZndf dXBsb2FkZXItPmRkX2hhbmRsZTsKKwlzdHJ1Y3QgbXBmc19tc3NfcmVzcG9uc2UgKnJlc3BvbnNl OworCXN0cnVjdCBtcGZzX21zc19tc2cgKm1lc3NhZ2U7CisJdTMyICpyZXNwb25zZV9tc2c7CisJ aW50IHJldDsKKworCXJlc3BvbnNlX21zZyA9IGRldm1fa3phbGxvYyhwcml2LT5kZXYsIEFVVE9f VVBEQVRFX0ZFQVRVUkVfUkVTUF9TSVpFICogc2l6ZW9mKHJlc3BvbnNlX21zZyksCisJCQkJICAg IEdGUF9LRVJORUwpOworCWlmICghcmVzcG9uc2VfbXNnKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXJlc3BvbnNlID0gZGV2bV9remFsbG9jKHByaXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBtcGZzX21z c19yZXNwb25zZSksIEdGUF9LRVJORUwpOworCWlmICghcmVzcG9uc2UpIHsKKwkJcmV0ID0gLUVO T01FTTsKKwkJZ290byBmcmVlX3Jlc3BvbnNlX21zZzsKKwl9CisKKwltZXNzYWdlID0gZGV2bV9r emFsbG9jKHByaXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBtcGZzX21zc19tc2cpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIW1lc3NhZ2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3Jlc3Bv bnNlOworCX0KKworCS8qCisJICogVGhlIHN5c3RlbSBjb250cm9sbGVyIGNhbiB2ZXJpZnkgdGhh dCBhbiBpbWFnZSBpbiB0aGUgZmxhc2ggaXMgdmFsaWQuCisJICogUmF0aGVyIHRoYW4gZHVwbGlj YXRlIHRoZSBjaGVjayBpbiB0aGlzIGRyaXZlciwgY2FsbCB0aGUgcmVsZXZhbnQKKwkgKiBzZXJ2 aWNlIGZyb20gdGhlIHN5c3RlbSBjb250cm9sbGVyIGluc3RlYWQuCisJICogVGhpcyBzZXJ2aWNl IGhhcyBubyBjb21tYW5kIGRhdGEgYW5kIG5vIHJlc3BvbnNlIGRhdGEuIEl0IG92ZXJsb2Fkcwor CSAqIG1ib3hfb2Zmc2V0IHdpdGggdGhlIGltYWdlIGluZGV4IGluIHRoZSBmbGFzaCdzIFNQSSBk aXJlY3Rvcnkgd2hlcmUKKwkgKiB0aGUgYml0c3RyZWFtIGlzIGxvY2F0ZWQuCisJICovCisJcmVz cG9uc2UtPnJlc3BfbXNnID0gcmVzcG9uc2VfbXNnOworCXJlc3BvbnNlLT5yZXNwX3NpemUgPSBB VVRPX1VQREFURV9BVVRIRU5USUNBVEVfUkVTUF9TSVpFOworCW1lc3NhZ2UtPmNtZF9vcGNvZGUg PSBBVVRPX1VQREFURV9BVVRIRU5USUNBVEVfQ01EX09QQ09ERTsKKwltZXNzYWdlLT5jbWRfZGF0 YV9zaXplID0gQVVUT19VUERBVEVfQVVUSEVOVElDQVRFX0NNRF9EQVRBX1NJWkU7CisJbWVzc2Fn ZS0+cmVzcG9uc2UgPSByZXNwb25zZTsKKwltZXNzYWdlLT5jbWRfZGF0YSA9IEFVVE9fVVBEQVRF X0FVVEhFTlRJQ0FURV9DTURfREFUQTsKKwltZXNzYWdlLT5tYm94X29mZnNldCA9IEFVVE9fVVBE QVRFX1VQR1JBREVfSU5ERVg7CisJbWVzc2FnZS0+cmVzcF9vZmZzZXQgPSBBVVRPX1VQREFURV9E RUZBVUxUX1JFU1BfT0ZGU0VUOworCisJZGV2X2luZm8ocHJpdi0+ZGV2LCAiUnVubmluZyB2ZXJp ZmljYXRpb24gb2YgVXBncmFkZSBJbWFnZVxuIik7CisJcmV0ID0gbXBmc19ibG9ja2luZ190cmFu c2FjdGlvbihwcml2LT5zeXNfY29udHJvbGxlciwgbWVzc2FnZSk7CisJaWYgKHJldCB8IHJlc3Bv bnNlLT5yZXNwX3N0YXR1cykgeworCQlkZXZfd2Fybihwcml2LT5kZXYsICJWZXJpZmljYXRpb24g b2YgVXBncmFkZSBJbWFnZSBmYWlsZWQhXG4iKTsKKwkJcmV0ID0gcmV0ID8gcmV0IDogLUVCQURN U0c7CisJfQorCisJZGV2X2luZm8ocHJpdi0+ZGV2LCAiVmVyaWZpY2F0aW9uIG9mIFVwZ3JhZGUg SW1hZ2UgcGFzc2VkIVxuIik7CisKKwlkZXZtX2tmcmVlKHByaXYtPmRldiwgbWVzc2FnZSk7Citm cmVlX3Jlc3BvbnNlOgorCWRldm1fa2ZyZWUocHJpdi0+ZGV2LCByZXNwb25zZSk7CitmcmVlX3Jl c3BvbnNlX21zZzoKKwlkZXZtX2tmcmVlKHByaXYtPmRldiwgcmVzcG9uc2VfbXNnKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXBmc19hdXRvX3VwZGF0ZV9zZXRfaW1hZ2VfYWRk cmVzcyhzdHJ1Y3QgbXBmc19hdXRvX3VwZGF0ZV9wcml2ICpwcml2LCBjaGFyICpidWZmZXIsCisJ CQkJCSAgICAgIHUzMiBpbWFnZV9hZGRyZXNzLCBsb2ZmX3QgZGlyZWN0b3J5X2FkZHJlc3MpCit7 CisJc3RydWN0IGVyYXNlX2luZm8gZXJhc2U7CisJc2l6ZV90IGVyYXNlX3NpemUgPSBBVVRPX1VQ REFURV9ESVJFQ1RPUllfU0laRTsKKwlzaXplX3QgYnl0ZXNfd3JpdHRlbiA9IDAsIGJ5dGVzX3Jl YWQgPSAwOworCWludCByZXQ7CisKKwllcmFzZV9zaXplID0gcm91bmRfdXAoZXJhc2Vfc2l6ZSwg KHU2NClwcml2LT5mbGFzaC0+ZXJhc2VzaXplKTsKKworCWVyYXNlLmFkZHIgPSBBVVRPX1VQREFU RV9ESVJFQ1RPUllfQkFTRTsKKwllcmFzZS5sZW4gPSBlcmFzZV9zaXplOworCisJLyoKKwkgKiBX ZSBuZWVkIHRvIHdyaXRlIHRoZSAiU1BJIERJUkVDVE9SWSIgdG8gdGhlIGZpcnN0IDEgS2lCLCB0 ZWxsaW5nCisJICogdGhlIHN5c3RlbSBjb250cm9sbGVyIHdoZXJlIHRvIGZpbmQgdGhlIGFjdHVh bCBiaXRzdHJlYW0uIFNpbmNlCisJICogdGhpcyBpcyBzcGktbm9yLCB3ZSBoYXZlIHRvIHJlYWQg dGhlIGZpcnN0IGVyYXNlYmxvY2ssIGVyYXNlIHRoYXQKKwkgKiBwb3J0aW9uIG9mIHRoZSBmbGFz aCwgbW9kaWZ5IHRoZSBkYXRhIGFuZCB0aGVuIHdyaXRlIGl0IGJhY2suCisJICogVGhlcmUncyBu byBuZWVkIHRvIGRvIHRoaXMgdGhvdWdoIGlmIHRoaW5ncyBhcmUgYWxyZWFkeSB0aGUgd2F5IHRo ZXkKKwkgKiBzaG91bGQgYmUsIHNvIGNoZWNrIGFuZCBzYXZlIHRoZSB3cml0ZSBpbiB0aGF0IGNh c2UuCisJICovCisJcmV0ID0gbXRkX3JlYWQocHJpdi0+Zmxhc2gsIEFVVE9fVVBEQVRFX0RJUkVD VE9SWV9CQVNFLCBlcmFzZV9zaXplLCAmYnl0ZXNfcmVhZCwKKwkJICAgICAgICh1X2NoYXIgKili dWZmZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoYnl0ZXNfcmVhZCAhPSBl cmFzZV9zaXplKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICgoKih1MzIgKikoYnVmZmVyICsgQVVU T19VUERBVEVfVVBHUkFERV9ESVJFQ1RPUlkpID09IGltYWdlX2FkZHJlc3MpICYmCisJICAgICEo Kih1MzIgKikoYnVmZmVyICsgQVVUT19VUERBVEVfQkxBTktfRElSRUNUT1JZKSkpCisJCXJldHVy biAwOworCisJcmV0ID0gbXRkX2VyYXNlKHByaXYtPmZsYXNoLCAmZXJhc2UpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFBvcHVsYXRlIHRoZSBpbWFnZSBhZGRyZXNzIGFu ZCB0aGVuIHplcm8gb3V0IHRoZSBuZXh0IGRpcmVjdG9yeSBzbworCSAqIHRoYXQgdGhlIHN5c3Rl bSBjb250cm9sbGVyIGRvZXNuJ3QgY29tcGxhaW4gaWYgaW4gIlNpbmdsZSBJbWFnZSIKKwkgKiBt b2RlLgorCSAqLworCW1lbWNweShidWZmZXIgKyBBVVRPX1VQREFURV9VUEdSQURFX0RJUkVDVE9S WSwgJmltYWdlX2FkZHJlc3MsCisJICAgICAgIEFVVE9fVVBEQVRFX0RJUkVDVE9SWV9XSURUSCk7 CisJbWVtc2V0KGJ1ZmZlciArIEFVVE9fVVBEQVRFX0JMQU5LX0RJUkVDVE9SWSwgMHgwLCBBVVRP X1VQREFURV9ESVJFQ1RPUllfV0lEVEgpOworCisJZGV2X2luZm8ocHJpdi0+ZGV2LCAiV3JpdGlu ZyB0aGUgaW1hZ2UgYWRkcmVzcyAoJXgpIHRvIHRoZSBmbGFzaCBkaXJlY3RvcnkgKCVsbHgpXG4i LAorCQkgaW1hZ2VfYWRkcmVzcywgZGlyZWN0b3J5X2FkZHJlc3MpOworCisJcmV0ID0gbXRkX3dy aXRlKHByaXYtPmZsYXNoLCAweDAsIGVyYXNlX3NpemUsICZieXRlc193cml0dGVuLCAodV9jaGFy ICopYnVmZmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJ5dGVzX3dyaXR0 ZW4gIT0gZXJhc2Vfc2l6ZSkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IG1wZnNfYXV0b191cGRhdGVfd3JpdGVfYml0c3RyZWFtKHN0cnVjdCBmd191cGxvYWQg KmZ3X3VwbG9hZGVyLCBjb25zdCB1OCAqZGF0YSwKKwkJCQkJICAgIHUzMiBvZmZzZXQsIHUzMiBz aXplLCB1MzIgKndyaXR0ZW4pCit7CisJc3RydWN0IG1wZnNfYXV0b191cGRhdGVfcHJpdiAqcHJp diA9IGZ3X3VwbG9hZGVyLT5kZF9oYW5kbGU7CisJc3RydWN0IGVyYXNlX2luZm8gZXJhc2U7CisJ Y2hhciAqYnVmZmVyOworCWxvZmZfdCBkaXJlY3RvcnlfYWRkcmVzcyA9IEFVVE9fVVBEQVRFX1VQ R1JBREVfRElSRUNUT1JZOworCXNpemVfdCBlcmFzZV9zaXplID0gQVVUT19VUERBVEVfRElSRUNU T1JZX1NJWkU7CisJc2l6ZV90IGJ5dGVzX3dyaXR0ZW4gPSAwOworCXUzMiBpbWFnZV9hZGRyZXNz OworCWludCByZXQ7CisKKwllcmFzZV9zaXplID0gcm91bmRfdXAoZXJhc2Vfc2l6ZSwgKHU2NClw cml2LT5mbGFzaC0+ZXJhc2VzaXplKTsKKworCWltYWdlX2FkZHJlc3MgPSBBVVRPX1VQREFURV9C SVRTVFJFQU1fQkFTRSArCisJCUFVVE9fVVBEQVRFX1VQR1JBREVfSU5ERVggKiBwcml2LT5zaXpl X3Blcl9iaXRzdHJlYW07CisKKwlidWZmZXIgPSBkZXZtX2t6YWxsb2MocHJpdi0+ZGV2LCBlcmFz ZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlyZXQgPSBtcGZzX2F1dG9fdXBkYXRlX3NldF9pbWFnZV9hZGRyZXNzKHByaXYsIGJ1ZmZlciwg aW1hZ2VfYWRkcmVzcywgZGlyZWN0b3J5X2FkZHJlc3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihwcml2LT5kZXYsICJmYWlsZWQgdG8gc2V0IGltYWdlIGFkZHJlc3MgaW4gdGhlIFNQSSBkaXJl Y3Rvcnk6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGUg LnNwaSBpbWFnZSBpdHNlbGYgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIGZsYXNoLiBQcmVzZXJ2YXRp b24KKwkgKiBvZiBjb250ZW50cyBoZXJlIGlzIG5vdCBpbXBvcnRhbnQgaGVyZSwgdW5saWtlIHRo ZSBzcGkgImRpcmVjdG9yeSIKKwkgKiB3aGljaCBtdXN0IGJlIFJNV2VkLgorCSAqLworCWVyYXNl LmxlbiA9IHJvdW5kX3VwKHNpemUsIChzaXplX3QpcHJpdi0+Zmxhc2gtPmVyYXNlc2l6ZSk7CisJ ZXJhc2UuYWRkciA9IGltYWdlX2FkZHJlc3M7CisKKwlkZXZfaW5mbyhwcml2LT5kZXYsICJFcmFz aW5nIHRoZSBmbGFzaCBhdCBhZGRyZXNzICgleClcbiIsIGltYWdlX2FkZHJlc3MpOworCXJldCA9 IG10ZF9lcmFzZShwcml2LT5mbGFzaCwgJmVyYXNlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsK KworCS8qCisJICogTm8gcGFyc2luZyBldGMgb2YgdGhlIGJpdHN0cmVhbSBpcyByZXF1aXJlZC4g VGhlIHN5c3RlbSBjb250cm9sbGVyCisJICogd2lsbCBkbyBhbGwgb2YgdGhhdCBpdHNlbGYgLSBp bmNsdWRpbmcgdmVyaWZ5aW5nIHRoYXQgdGhlIGJpdHN0cmVhbQorCSAqIGlzIHZhbGlkLgorCSAq LworCWRldl9pbmZvKHByaXYtPmRldiwgIldyaXRpbmcgdGhlIGltYWdlIHRvIHRoZSBmbGFzaCBh dCBhZGRyZXNzICgleClcbiIsIGltYWdlX2FkZHJlc3MpOworCXJldCA9IG10ZF93cml0ZShwcml2 LT5mbGFzaCwgKGxvZmZfdClpbWFnZV9hZGRyZXNzLCBzaXplLCAmYnl0ZXNfd3JpdHRlbiwgZGF0 YSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXpl KSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCSp3cml0dGVuID0gYnl0ZXNf d3JpdHRlbjsKKworb3V0OgorCWRldm1fa2ZyZWUocHJpdi0+ZGV2LCBidWZmZXIpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnIgbXBmc19hdXRvX3VwZGF0ZV93 cml0ZShzdHJ1Y3QgZndfdXBsb2FkICpmd191cGxvYWRlciwgY29uc3QgdTggKmRhdGEsCisJCQkJ CQkgdTMyIG9mZnNldCwgdTMyIHNpemUsIHUzMiAqd3JpdHRlbikKK3sKKwlzdHJ1Y3QgbXBmc19h dXRvX3VwZGF0ZV9wcml2ICpwcml2ID0gZndfdXBsb2FkZXItPmRkX2hhbmRsZTsKKwllbnVtIGZ3 X3VwbG9hZF9lcnIgZXJyID0gRldfVVBMT0FEX0VSUl9OT05FOworCWludCByZXQ7CisKKwlyZWlu aXRfY29tcGxldGlvbigmcHJpdi0+cHJvZ3JhbW1pbmdfY29tcGxldGUpOworCisJcmV0ID0gbXBm c19hdXRvX3VwZGF0ZV93cml0ZV9iaXRzdHJlYW0oZndfdXBsb2FkZXIsIGRhdGEsIG9mZnNldCwg c2l6ZSwgd3JpdHRlbik7CisJaWYgKHJldCkgeworCQllcnIgPSBGV19VUExPQURfRVJSX1JXX0VS Uk9SOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocHJpdi0+Y2FuY2VsX3JlcXVlc3QpIHsKKwkJ ZXJyID0gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0g bXBmc19hdXRvX3VwZGF0ZV92ZXJpZnlfaW1hZ2UoZndfdXBsb2FkZXIpOworCWlmIChyZXQpCisJ CWVyciA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7CisKK291dDoKKwljb21wbGV0ZSgmcHJpdi0+ cHJvZ3JhbW1pbmdfY29tcGxldGUpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBmd191cGxvYWRfb3BzIG1wZnNfYXV0b191cGRhdGVfb3BzID0geworCS5wcmVwYXJl ID0gbXBmc19hdXRvX3VwZGF0ZV9wcmVwYXJlLAorCS53cml0ZSA9IG1wZnNfYXV0b191cGRhdGVf d3JpdGUsCisJLnBvbGxfY29tcGxldGUgPSBtcGZzX2F1dG9fdXBkYXRlX3BvbGxfY29tcGxldGUs CisJLmNhbmNlbCA9IG1wZnNfYXV0b191cGRhdGVfY2FuY2VsLAorfTsKKworc3RhdGljIGludCBt cGZzX2F1dG9fdXBkYXRlX2F2YWlsYWJsZShzdHJ1Y3QgbXBmc19hdXRvX3VwZGF0ZV9wcml2ICpw cml2KQoreworCXN0cnVjdCBtcGZzX21zc19yZXNwb25zZSAqcmVzcG9uc2U7CisJc3RydWN0IG1w ZnNfbXNzX21zZyAqbWVzc2FnZTsKKwl1MzIgKnJlc3BvbnNlX21zZzsKKwlpbnQgcmV0OworCisJ cmVzcG9uc2VfbXNnID0gZGV2bV9remFsbG9jKHByaXYtPmRldiwgQVVUT19VUERBVEVfRkVBVFVS RV9SRVNQX1NJWkUgKiBzaXplb2YocmVzcG9uc2VfbXNnKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7 CisJaWYgKCFyZXNwb25zZV9tc2cpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzcG9uc2UgPSBk ZXZtX2t6YWxsb2MocHJpdi0+ZGV2LCBzaXplb2Yoc3RydWN0IG1wZnNfbXNzX3Jlc3BvbnNlKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNwb25zZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZXNz YWdlID0gZGV2bV9remFsbG9jKHByaXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBtcGZzX21zc19tc2cp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lc3NhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoK KwkgKiBUbyB2ZXJpZnkgdGhhdCBBdXRvIFVwZGF0ZSBpcyBwb3NzaWJsZSwgdGhlICJRdWVyeSBT ZWN1cml0eSBTZXJ2aWNlCisJICogUmVxdWVzdCIgaXMgcGVyZm9ybWVkLgorCSAqIFRoaXMgc2Vy dmljZSBoYXMgbm8gY29tbWFuZCBkYXRhICYgZG9lcyBub3Qgb3ZlcmxvYWQgbWJveF9vZmZzZXQu CisJICovCisJcmVzcG9uc2UtPnJlc3BfbXNnID0gcmVzcG9uc2VfbXNnOworCXJlc3BvbnNlLT5y ZXNwX3NpemUgPSBBVVRPX1VQREFURV9GRUFUVVJFX1JFU1BfU0laRTsKKwltZXNzYWdlLT5jbWRf b3Bjb2RlID0gQVVUT19VUERBVEVfRkVBVFVSRV9DTURfT1BDT0RFOworCW1lc3NhZ2UtPmNtZF9k YXRhX3NpemUgPSBBVVRPX1VQREFURV9GRUFUVVJFX0NNRF9EQVRBX1NJWkU7CisJbWVzc2FnZS0+ cmVzcG9uc2UgPSByZXNwb25zZTsKKwltZXNzYWdlLT5jbWRfZGF0YSA9IEFVVE9fVVBEQVRFX0ZF QVRVUkVfQ01EX0RBVEE7CisJbWVzc2FnZS0+bWJveF9vZmZzZXQgPSBBVVRPX1VQREFURV9ERUZB VUxUX01CT1hfT0ZGU0VUOworCW1lc3NhZ2UtPnJlc3Bfb2Zmc2V0ID0gQVVUT19VUERBVEVfREVG QVVMVF9SRVNQX09GRlNFVDsKKworCXJldCA9IG1wZnNfYmxvY2tpbmdfdHJhbnNhY3Rpb24ocHJp di0+c3lzX2NvbnRyb2xsZXIsIG1lc3NhZ2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwkvKgorCSAqIEN1cnJlbnRseSwgdGhlIHN5c3RlbSBjb250cm9sbGVyJ3MgZmlybXdhcmUgZG9l cyBub3QgZ2VuZXJhdGUgYW55CisJICogaW50ZXJydXB0cyBmb3IgZmFpbGVkIHNlcnZpY2VzLCBz byBtcGZzX2Jsb2NraW5nX3RyYW5zYWN0aW9uKCkgc2hvdWxkCisJICogdGltZSBvdXQgJiB0aGVy ZWZvcmUgcmV0dXJuIGFuIGVycm9yLgorCSAqIEhpdHRpbmcgdGhpcyBjaGVjayBpcyBoaWdobHkg dW5saWtlbHkgYXQgcHJlc2VudCwgYnV0IGlmIHRoZSBzeXN0ZW0KKwkgKiBjb250cm9sbGVyJ3Mg YmVoYXZpb3VyIGNoYW5nZXMgc28gdGhhdCBpdCBkb2VzIGdlbmVyYXRlIGludGVycnVwdHMKKwkg KiBmb3IgZmFpbGVkIHNlcnZpY2VzLCBpdCB3aWxsIGJlIHJlcXVpcmVkLgorCSAqLworCWlmIChy ZXNwb25zZS0+cmVzcF9zdGF0dXMpCisJCXJldHVybiAtRUlPOworCisJLyoKKwkgKiBCaXQgNSBv ZiBieXRlIDEgaXMgIlVMX0F1dG8gVXBkYXRlIiAmIGlmIGl0IGlzIHNldCwgQXV0byBVcGRhdGUg aXMKKwkgKiBub3QgcG9zc2libGUuCisJICovCisJaWYgKHJlc3BvbnNlX21zZ1sxXSAmIEFVVE9f VVBEQVRFX0ZFQVRVUkVfRU5BQkxFRCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IG1wZnNfYXV0b191cGRhdGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVj dCBtcGZzX2F1dG9fdXBkYXRlX3ByaXYgKnByaXY7CisJc3RydWN0IGZ3X3VwbG9hZCAqZndfdXBs b2FkZXI7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBy aXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJp di0+c3lzX2NvbnRyb2xsZXIgPSBtcGZzX3N5c19jb250cm9sbGVyX2dldChkZXYpOworCWlmIChJ U19FUlIocHJpdi0+c3lzX2NvbnRyb2xsZXIpKQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYs IFBUUl9FUlIocHJpdi0+c3lzX2NvbnRyb2xsZXIpLAorCQkJCSAgICAgIkNvdWxkIG5vdCByZWdp c3RlciBhcyBhIHN1YiBkZXZpY2Ugb2YgdGhlIHN5c3RlbSBjb250cm9sbGVyXG4iKTsKKworCXBy aXYtPmRldiA9IGRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJl dCA9IG1wZnNfYXV0b191cGRhdGVfYXZhaWxhYmxlKHByaXYpOworCWlmIChyZXQpCisJCXJldHVy biBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAorCQkJCSAgICAgIlRoZSBjdXJyZW50IGJpdHN0cmVh bSBkb2VzIG5vdCBzdXBwb3J0IGF1dG8tdXBkYXRlXG4iKTsKKworCWluaXRfY29tcGxldGlvbigm cHJpdi0+cHJvZ3JhbW1pbmdfY29tcGxldGUpOworCisJZndfdXBsb2FkZXIgPSBmaXJtd2FyZV91 cGxvYWRfcmVnaXN0ZXIoVEhJU19NT0RVTEUsIGRldiwgIm1wZnNfYml0c3RyZWFtIiwKKwkJCQkJ ICAgICAgICZtcGZzX2F1dG9fdXBkYXRlX29wcywgcHJpdik7CisJaWYgKElTX0VSUihmd191cGxv YWRlcikpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihmd191cGxvYWRlciks CisJCQkJICAgICAiRmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBiaXRzdHJlYW0gdXBsb2FkZXJcbiIp OworCisJcHJpdi0+ZndfdXBsb2FkZXIgPSBmd191cGxvYWRlcjsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBtcGZzX2F1dG9fdXBkYXRlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBtcGZzX2F1dG9fdXBkYXRlX3ByaXYgKnByaXYgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZpcm13YXJlX3VwbG9hZF91bnJlZ2lzdGVyKHBy aXYtPmZ3X3VwbG9hZGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBm c19hdXRvX3VwZGF0ZV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXBmcy1h dXRvLXVwZGF0ZSIsCisJfSwKKwkucHJvYmUgPSBtcGZzX2F1dG9fdXBkYXRlX3Byb2JlLAorCS5y ZW1vdmVfbmV3ID0gbXBmc19hdXRvX3VwZGF0ZV9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3Jt X2RyaXZlcihtcGZzX2F1dG9fdXBkYXRlX2RyaXZlcik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwi KTsKK01PRFVMRV9BVVRIT1IoIkNvbm9yIERvb2xleSA8Y29ub3IuZG9vbGV5QG1pY3JvY2hpcC5j b20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBvbGFyRmlyZSBTb0MgQXV0byBVcGRhdGUgRlBH QSByZXByb2dyYW1taW5nIik7Ci0tIAoyLjM5LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlz Y3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==