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 17EC6C433EF for ; Wed, 30 Mar 2022 16:46:56 +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=3DBQ17UFuZt0kP/9qj864x3QoVQUSqeRZX/REOSQBNU=; b=nmpcdwTSP4cWQm cpjyaLBqp/lJYWZI/hLIyFOaAX7HqCDzPYgnAqP8yysv6Ms0+54e4GQ5OdN9XOyeBUtQj4b4ftDL1 //JyBrm8McSBJDMd+8LsZo7lFwGnyi1UmheUzdUKP7D5ohOSO+IP/eDcJG5ANaBfY7BGcZdwGTVmy tYdFEhKvswROUT/x4ZWP/VrMs466t4SQbMRgyIMAQOwOJzl4/AZ1KV3ckvWAZsTS3eAygSku2dg9P YYnSf/BlDEHToYNEj+kXrRHyZN6IUxetaoLGjZ8UpsbU5jchPpCG6bVzsi2AIDScQK4uiCUYYBGx/ n9DOwwKpeZDk6t4aGh6Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nZbS1-00Grqs-Q3; Wed, 30 Mar 2022 16:45:41 +0000 Received: from hutie.ust.cz ([185.8.165.127]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nZbRe-00Grl9-Gx for linux-arm-kernel@lists.infradead.org; Wed, 30 Mar 2022 16:45:22 +0000 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cutebit.org; s=mail; t=1648658716; bh=NmppNrMLK45qogHTSU7xLfTr2hjkNxVKbkHtWd69NIM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JtFs1Ns5Gl7njBF9q1xinSW7khmJT5pyuDP19ab4bpTdLfW4cc/n12i9Y/TfFZPpq Ie/80rMPV13HH3h/yMqvp90Vcbtd8hd4H6qrzi7T6iJ3+7GKiyhSKJ7EKLgU6ldUiD UF6SwcenCx9hAj9W/euUI8fQXFue2s/YO/vGt+fY= To: Hector Martin , Sven Peter , Vinod Koul , Rob Herring , Krzysztof Kozlowski Cc: Alyssa Rosenzweig , linux-arm-kernel@lists.infradead.org, dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Mark Kettenis , =?UTF-8?q?Martin=20Povi=C5=A1er?= Subject: [PATCH 2/2] dmaengine: apple-admac: Add Apple ADMAC driver Date: Wed, 30 Mar 2022 18:44:58 +0200 Message-Id: <20220330164458.93055-3-povik+lin@cutebit.org> In-Reply-To: <20220330164458.93055-1-povik+lin@cutebit.org> References: <20220330164458.93055-1-povik+lin@cutebit.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220330_094519_257867_B3DEA157 X-CRM114-Status: GOOD ( 24.42 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org QWRkIGRyaXZlciBmb3IgQXVkaW8gRE1BIENvbnRyb2xsZXIgcHJlc2VudCBvbiBBcHBsZSBTb0Nz IGZyb20gdGhlCiJBcHBsZSBTaWxpY29uIiBmYW1pbHkuCgpTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4g UG92acWhZXIgPHBvdmlrK2xpbkBjdXRlYml0Lm9yZz4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAg ICAgICAgIHwgICAyICsKIGRyaXZlcnMvZG1hL0tjb25maWcgICAgICAgfCAgIDggKwogZHJpdmVy cy9kbWEvTWFrZWZpbGUgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS9hcHBsZS1hZG1hYy5jIHwg Nzk5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5n ZWQsIDgxMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvYXBw bGUtYWRtYWMuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXgg ZDk4MTJiNzBjMzIyLi5jNjMxMWE5MjExOTAgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBi L01BSU5UQUlORVJTCkBAIC0xODM3LDYgKzE4MzcsNyBAQCBUOglnaXQgaHR0cHM6Ly9naXRodWIu Y29tL0FzYWhpTGludXgvbGludXguZ2l0CiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3MvYXJtL2FwcGxlLnlhbWwKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy9hcm0vYXBwbGUvKgogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2Nr L2FwcGxlLG5jby55YW1sCitGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1h L2FwcGxlLGFkbWFjLnlhbWwKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9p MmMvYXBwbGUsaTJjLnlhbWwKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9p bnRlcnJ1cHQtY29udHJvbGxlci9hcHBsZSwqCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3MvbWFpbGJveC9hcHBsZSxtYWlsYm94LnlhbWwKQEAgLTE4NDYsNiArMTg0Nyw3IEBA IEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9hcHBsZSoKIEY6CURv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy93YXRjaGRvZy9hcHBsZSx3ZHQueWFtbAog RjoJYXJjaC9hcm02NC9ib290L2R0cy9hcHBsZS8KIEY6CWRyaXZlcnMvY2xrL2Nsay1hcHBsZS1u Y28uYworRjoJZHJpdmVycy9kbWEvYXBwbGUtYWRtYWMuYwogRjoJZHJpdmVycy9pMmMvYnVzc2Vz L2kyYy1wYXNlbWktY29yZS5jCiBGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhc2VtaS1wbGF0 Zm9ybS5jCiBGOglkcml2ZXJzL2lycWNoaXAvaXJxLWFwcGxlLWFpYy5jCmRpZmYgLS1naXQgYS9k cml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCBkNWRlM2Y3N2Qz YWEuLmRkMTNiYzQ3ZWIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9k cml2ZXJzL2RtYS9LY29uZmlnCkBAIC04NSw2ICs4NSwxNCBAQCBjb25maWcgQU1DQ19QUEM0NDBT UEVfQURNQQogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQU1DQyBQUEM0NDBTUGUg UkFJRCBlbmdpbmVzLgogCitjb25maWcgQVBQTEVfQURNQUMKKwl0cmlzdGF0ZSAiQXBwbGUgQURN QUMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUCisJc2Vs ZWN0IERNQV9FTkdJTkUKKwlkZWZhdWx0IEFSQ0hfQVBQTEUKKwloZWxwCisJICBFbmFibGUgc3Vw cG9ydCBmb3IgQXVkaW8gRE1BIENvbnRyb2xsZXIgZm91bmQgb24gQXBwbGUgU2lsaWNvbiBTb0Nz LgorCiBjb25maWcgQVRfSERNQUMKIAl0cmlzdGF0ZSAiQXRtZWwgQUhCIERNQSBzdXBwb3J0Igog CWRlcGVuZHMgb24gQVJDSF9BVDkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBi L2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IDYxNmQ5MjZjZjJhNS4uMjhlNzQzYzdkODZmIDEw MDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmls ZQpAQCAtMTcsNiArMTcsNyBAQCBvYmotJChDT05GSUdfQUxURVJBX01TR0RNQSkgKz0gYWx0ZXJh LW1zZ2RtYS5vCiBvYmotJChDT05GSUdfQU1CQV9QTDA4WCkgKz0gYW1iYS1wbDA4eC5vCiBvYmot JChDT05GSUdfQU1DQ19QUEM0NDBTUEVfQURNQSkgKz0gcHBjNHh4Lwogb2JqLSQoQ09ORklHX0FN RF9QVERNQSkgKz0gcHRkbWEvCitvYmotJChDT05GSUdfQVBQTEVfQURNQUMpICs9IGFwcGxlLWFk bWFjLm8KIG9iai0kKENPTkZJR19BVF9IRE1BQykgKz0gYXRfaGRtYWMubwogb2JqLSQoQ09ORklH X0FUX1hETUFDKSArPSBhdF94ZG1hYy5vCiBvYmotJChDT05GSUdfQVhJX0RNQUMpICs9IGRtYS1h eGktZG1hYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hcHBsZS1hZG1hYy5jIGIvZHJpdmVy cy9kbWEvYXBwbGUtYWRtYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmU3ZmQ5ODU2NDc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2FwcGxlLWFk bWFjLmMKQEAgLTAsMCArMSw3OTkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkKKy8qCisgKiBEcml2ZXIgZm9yIEF1ZGlvIERNQSBDb250cm9sbGVyIChBRE1BQykg b24gdDgxMDMgKE0xKSBhbmQgb3RoZXIgQXBwbGUgY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMp IFRoZSBBc2FoaSBMaW51eCBDb250cmlidXRvcnMKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0 cy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgor I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ CisKKyNpbmNsdWRlICJkbWFlbmdpbmUuaCIKKworI2RlZmluZSBOQ0hBTk5FTFNfTUFYCTY0Cisj ZGVmaW5lIElSUV9OSU5ESUNFUwk0CisKKyNkZWZpbmUgUklOR19XUklURV9TTE9UCQlHRU5NQVNL KDEsIDApCisjZGVmaW5lIFJJTkdfUkVBRF9TTE9UCQlHRU5NQVNLKDUsIDQpCisjZGVmaW5lIFJJ TkdfRlVMTAkJQklUKDkpCisjZGVmaW5lIFJJTkdfRU1QVFkJCUJJVCg4KQorI2RlZmluZSBSSU5H X0VSUgkJQklUKDEwKQorCisjZGVmaW5lIFNUQVRVU19ERVNDX0RPTkUJQklUKDApCisjZGVmaW5l IFNUQVRVU19FUlIJCUJJVCg2KQorCisjZGVmaW5lIEZMQUdfREVTQ19OT1RJRlkJQklUKDE2KQor CisjZGVmaW5lIFJFR19UWF9TVEFSVAkJMHgwMDAwCisjZGVmaW5lIFJFR19UWF9TVE9QCQkweDAw MDQKKyNkZWZpbmUgUkVHX1JYX1NUQVJUCQkweDAwMDgKKyNkZWZpbmUgUkVHX1JYX1NUT1AJCTB4 MDAwYworCisjZGVmaW5lIFJFR19DSEFOX0NUTChjaCkJKDB4ODAwMCArIChjaCkgKiAweDIwMCkK KyNkZWZpbmUgUkVHX0NIQU5fQ1RMX1JTVF9SSU5HUwlCSVQoMCkKKworI2RlZmluZSBSRUdfREVT Q19SSU5HKGNoKQkoMHg4MDcwICsgKGNoKSAqIDB4MjAwKQorI2RlZmluZSBSRUdfUkVQT1JUX1JJ TkcoY2gpCSgweDgwNzQgKyAoY2gpICogMHgyMDApCisKKyNkZWZpbmUgUkVHX1JFU0lEVUUoY2gp CQkoMHg4MDY0ICsgKGNoKSAqIDB4MjAwKQorCisjZGVmaW5lIFJFR19CVVNfV0lEVEgoY2gpCSgw eDgwNDAgKyAoY2gpICogMHgyMDApCisKKyNkZWZpbmUgQlVTX1dJRFRIXzhCSVQJCTB4MDAKKyNk ZWZpbmUgQlVTX1dJRFRIXzE2QklUCQkweDAxCisjZGVmaW5lIEJVU19XSURUSF8zMkJJVAkJMHgw MgorI2RlZmluZSBCVVNfV0lEVEhfRlJBTUVfMl9XT1JEUwkweDEwCisjZGVmaW5lIEJVU19XSURU SF9GUkFNRV80X1dPUkRTCTB4MjAKKworI2RlZmluZSBDSEFOX0JVRlNJWkUJCTB4ODAwMAorCisj ZGVmaW5lIFJFR19DSEFOX0ZJRk9DVEwoY2gpCSgweDgwNTQgKyAoY2gpICogMHgyMDApCisjZGVm aW5lIENIQU5fRklGT0NUTF9MSU1JVAlHRU5NQVNLKDMxLCAxNikKKyNkZWZpbmUgQ0hBTl9GSUZP Q1RMX1RIUkVTSE9MRAlHRU5NQVNLKDE1LCAwKQorCisjZGVmaW5lIFJFR19ERVNDX1dSSVRFKGNo KQkoMHgxMDAwMCArICgoY2gpIC8gMikgKiAweDQgKyAoKGNoKSAmIDEpICogMHg0MDAwKQorI2Rl ZmluZSBSRUdfUkVQT1JUX1JFQUQoY2gpCSgweDEwMTAwICsgKChjaCkgLyAyKSAqIDB4NCArICgo Y2gpICYgMSkgKiAweDQwMDApCisKKyNkZWZpbmUgUkVHX1RYX0lOVFNUQVRFKGlkeCkJCSgweDAw MzAgKyAoaWR4KSAqIDQpCisjZGVmaW5lIFJFR19SWF9JTlRTVEFURShpZHgpCQkoMHgwMDQwICsg KGlkeCkgKiA0KQorI2RlZmluZSBSRUdfQ0hBTl9JTlRTVEFUVVMoY2gsIGlkeCkJKDB4ODAxMCAr IChjaCkgKiAweDIwMCArIChpZHgpICogNCkKKyNkZWZpbmUgUkVHX0NIQU5fSU5UTUFTSyhjaCwg aWR4KQkoMHg4MDIwICsgKGNoKSAqIDB4MjAwICsgKGlkeCkgKiA0KQorCitzdHJ1Y3QgYWRtYWNf ZGF0YTsKK3N0cnVjdCBhZG1hY190eDsKKworc3RydWN0IGFkbWFjX2NoYW4geworCWludCBubzsK KwlzdHJ1Y3QgYWRtYWNfZGF0YSAqaG9zdDsKKwlzdHJ1Y3QgZG1hX2NoYW4gY2hhbjsKKwlzdHJ1 Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKKworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qg YWRtYWNfdHggKmN1cnJlbnRfdHg7CisJaW50IG5wZXJpb2RfYWNrczsKKworCXN0cnVjdCBsaXN0 X2hlYWQgc3VibWl0dGVkOworCXN0cnVjdCBsaXN0X2hlYWQgaXNzdWVkOworfTsKKworc3RydWN0 IGFkbWFjX2RhdGEgeworCXN0cnVjdCBkbWFfZGV2aWNlIGRtYTsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7CisJX19pb21lbSB2b2lkICpiYXNlOworCisJaW50IGlycV9pbmRleDsKKwlpbnQgbmNoYW5u ZWxzOworCXN0cnVjdCBhZG1hY19jaGFuIGNoYW5uZWxzW107Cit9OworCitzdHJ1Y3QgYWRtYWNf dHggeworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciB0eDsKKwlib29sIGN5Y2xpYzsK KwlkbWFfYWRkcl90IGJ1Zl9hZGRyOworCWRtYV9hZGRyX3QgYnVmX2VuZDsKKwlzaXplX3QgYnVm X2xlbjsKKwlzaXplX3QgcGVyaW9kX2xlbjsKKworCXNpemVfdCBzdWJtaXR0ZWRfcG9zOworCXNp emVfdCByZWNsYWltZWRfcG9zOworCisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworc3Rh dGljIHZvaWQgYWRtYWNfcG9rZShzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQsIGludCByZWcsIHUzMiB2 YWwpCit7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBhZC0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRp YyB1MzIgYWRtYWNfcGVlayhzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQsIGludCByZWcpCit7CisJcmV0 dXJuIHJlYWRsX3JlbGF4ZWQoYWQtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBhZG1h Y19tb2RpZnkoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZh bCkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBhZC0+YmFzZSArIHJlZzsKKwl1MzIgY3VyciA9 IHJlYWRsX3JlbGF4ZWQoYWRkcik7CisKKwl3cml0ZWxfcmVsYXhlZCgoY3VyciAmIH5tYXNrKSB8 ICh2YWwgJiBtYXNrKSwgYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRtYWNfY2hhbiAqdG9f YWRtYWNfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v ZihjaGFuLCBzdHJ1Y3QgYWRtYWNfY2hhbiwgY2hhbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRt YWNfdHggKnRvX2FkbWFjX3R4KHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCit7 CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGFkbWFjX3R4LCB0eCk7Cit9CisKK3N0 YXRpYyBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gYWRtYWNfY2hhbl9kaXJlY3Rpb24oaW50 IGNoYW5ubykKK3sKKwlyZXR1cm4gKGNoYW5ubyAmIDEpID8gRE1BX0RFVl9UT19NRU0gOiBETUFf TUVNX1RPX0RFVjsKK30KKworc3RhdGljIGRtYV9jb29raWVfdCBhZG1hY190eF9zdWJtaXQoc3Ry dWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKK3sKKwlzdHJ1Y3QgYWRtYWNfdHggKmFk dHggPSB0b19hZG1hY190eCh0eCk7CisJc3RydWN0IGFkbWFjX2NoYW4gKmFkY2hhbiA9IHRvX2Fk bWFjX2NoYW4odHgtPmNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZG1hX2Nvb2tpZV90 IGNvb2tpZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGNoYW4tPmxvY2ssIGZsYWdzKTsKKwlj b29raWUgPSBkbWFfY29va2llX2Fzc2lnbih0eCk7CisJbGlzdF9hZGRfdGFpbCgmYWR0eC0+bm9k ZSwgJmFkY2hhbi0+c3VibWl0dGVkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGNoYW4t PmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb29raWU7Cit9CisKK3N0YXRpYyBpbnQgYWRtYWNf ZGVzY19mcmVlKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCit7CisJc3RydWN0 IGFkbWFjX3R4ICphZHR4ID0gdG9fYWRtYWNfdHgodHgpOworCisJZGV2bV9rZnJlZSh0b19hZG1h Y19jaGFuKHR4LT5jaGFuKS0+aG9zdC0+ZGV2LCBhZHR4KTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqYWRtYWNfcHJlcF9kbWFfY3ljbGlj KAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgYnVmX2FkZHIsIHNpemVfdCBi dWZfbGVuLAorCQlzaXplX3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgYWRtYWNfY2hh biAqYWRjaGFuID0gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBhZG1hY19jaGFuLCBjaGFuKTsK KwlzdHJ1Y3QgYWRtYWNfdHggKmFkdHg7CisKKwlpZiAoZGlyZWN0aW9uICE9IGFkbWFjX2NoYW5f ZGlyZWN0aW9uKGFkY2hhbi0+bm8pKQorCQlyZXR1cm4gTlVMTDsKKworCWFkdHggPSBkZXZtX2t6 YWxsb2MoYWRjaGFuLT5ob3N0LT5kZXYsIHNpemVvZigqYWR0eCksIEdGUF9OT1dBSVQpOworCWlm ICghYWR0eCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhZHR4LT5jeWNsaWMgPSB0cnVlOworCisJYWR0 eC0+YnVmX2FkZHIgPSBidWZfYWRkcjsKKwlhZHR4LT5idWZfbGVuID0gYnVmX2xlbjsKKwlhZHR4 LT5idWZfZW5kID0gYnVmX2FkZHIgKyBidWZfbGVuOworCWFkdHgtPnBlcmlvZF9sZW4gPSBwZXJp b2RfbGVuOworCisJYWR0eC0+c3VibWl0dGVkX3BvcyA9IDA7CisJYWR0eC0+cmVjbGFpbWVkX3Bv cyA9IDA7CisKKwlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZhZHR4LT50eCwgY2hhbik7 CisJYWR0eC0+dHgudHhfc3VibWl0ID0gYWRtYWNfdHhfc3VibWl0OworCWFkdHgtPnR4LmRlc2Nf ZnJlZSA9IGFkbWFjX2Rlc2NfZnJlZTsKKworCXJldHVybiAmYWR0eC0+dHg7Cit9CisKKy8qCisg KiBXcml0ZSBvbmUgaGFyZHdhcmUgZGVzY3JpcHRvciBmb3IgYSBkbWFlbmdpbmUgY3ljbGljIHRy YW5zYWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBhZG1hY19jeWNsaWNfd3JpdGVfb25lX2Rlc2Mo c3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgY2hhbm5vLAorCQkJCQlzdHJ1Y3QgYWRtYWNfdHgg KnR4KQoreworCWRtYV9hZGRyX3QgYWRkcjsKKworCWlmIChXQVJOX09OKCF0eC0+Y3ljbGljKSkK KwkJcmV0dXJuOworCisJYWRkciA9IHR4LT5idWZfYWRkciArICh0eC0+c3VibWl0dGVkX3BvcyAl IHR4LT5idWZfbGVuKTsKKwlXQVJOX09OKGFkZHIgKyB0eC0+cGVyaW9kX2xlbiA+IHR4LT5idWZf ZW5kKTsKKworCWRldl9kYmcoYWQtPmRldiwgImNoJWQgZGVzY3JpcHRvcjogYWRkcj0weCVwYWQg bGVuPTB4JXp4IGZsYWdzPTB4JXhcbiIsCisJCWNoYW5ubywgYWRkciwgdHgtPnBlcmlvZF9sZW4s IEZMQUdfREVTQ19OT1RJRlkpOworCisJYWRtYWNfcG9rZShhZCwgUkVHX0RFU0NfV1JJVEUoY2hh bm5vKSwgYWRkcik7CisJYWRtYWNfcG9rZShhZCwgUkVHX0RFU0NfV1JJVEUoY2hhbm5vKSwgYWRk ciA+PiAzMik7CisJYWRtYWNfcG9rZShhZCwgUkVHX0RFU0NfV1JJVEUoY2hhbm5vKSwgdHgtPnBl cmlvZF9sZW4pOworCWFkbWFjX3Bva2UoYWQsIFJFR19ERVNDX1dSSVRFKGNoYW5ubyksIEZMQUdf REVTQ19OT1RJRlkpOworCisJdHgtPnN1Ym1pdHRlZF9wb3MgKz0gdHgtPnBlcmlvZF9sZW47CisJ dHgtPnN1Ym1pdHRlZF9wb3MgJT0gMiAqIHR4LT5idWZfbGVuOworfQorCisvKgorICogV3JpdGUg YWxsIHRoZSBoYXJkd2FyZSBkZXNjcmlwdG9ycyBmb3IgYSBjeWNsaWMgdHJhbnNhY3Rpb24KKyAq IHRoZXJlIGlzIHNwYWNlIGZvci4KKyAqLworc3RhdGljIHZvaWQgYWRtYWNfY3ljbGljX3dyaXRl X2Rlc2Moc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgY2hhbm5vLAorCQkJCQlzdHJ1Y3QgYWRt YWNfdHggKnR4KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlp ZiAoYWRtYWNfcGVlayhhZCwgUkVHX0RFU0NfUklORyhjaGFubm8pKSAmIFJJTkdfRlVMTCkKKwkJ CWJyZWFrOworCQlhZG1hY19jeWNsaWNfd3JpdGVfb25lX2Rlc2MoYWQsIGNoYW5ubywgdHgpOwor CX0KK30KKworc3RhdGljIGludCBhZG1hY19yaW5nX25vY2N1cGllZF9zbG90cyhpbnQgcmluZ3Zh bCkKK3sKKwlpbnQgd3JzbG90ID0gRklFTERfR0VUKFJJTkdfV1JJVEVfU0xPVCwgcmluZ3ZhbCk7 CisJaW50IHJkc2xvdCA9IEZJRUxEX0dFVChSSU5HX1JFQURfU0xPVCwgcmluZ3ZhbCk7CisKKwlp ZiAod3JzbG90ICE9IHJkc2xvdCkgeworCQlyZXR1cm4gKHdyc2xvdCArIDQgLSByZHNsb3QpICUg NDsKKwl9IGVsc2UgeworCQlXQVJOX09OKChyaW5ndmFsICYgKFJJTkdfRlVMTCB8IFJJTkdfRU1Q VFkpKSA9PSAwKTsKKworCQlpZiAocmluZ3ZhbCAmIFJJTkdfRlVMTCkKKwkJCXJldHVybiA0Owor CQllbHNlCisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBSZWFkIGZyb20gaGFyZHdhcmUg dGhlIHJlc2lkdWUgb2YgYSBjeWNsaWMgZG1hZW5naW5lIHRyYW5zYWN0aW9uLgorICovCitzdGF0 aWMgdTMyIGFkbWFjX2N5Y2xpY19yZWFkX3Jlc2lkdWUoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBp bnQgY2hhbm5vLAorCQkJCQlzdHJ1Y3QgYWRtYWNfdHggKmFkdHgpCit7CisJdTMyIHJpbmcxLCBy aW5nMjsKKwl1MzIgcmVzaWR1ZTEsIHJlc2lkdWUyOworCWludCBucmVwb3J0czsKKwlzaXplX3Qg cG9zOworCisJcmluZzEgPSAgICBhZG1hY19wZWVrKGFkLCBSRUdfUkVQT1JUX1JJTkcoY2hhbm5v KSk7CisJcmVzaWR1ZTEgPSBhZG1hY19wZWVrKGFkLCBSRUdfUkVTSURVRShjaGFubm8pKTsKKwly aW5nMiA9ICAgIGFkbWFjX3BlZWsoYWQsIFJFR19SRVBPUlRfUklORyhjaGFubm8pKTsKKwlyZXNp ZHVlMiA9IGFkbWFjX3BlZWsoYWQsIFJFR19SRVNJRFVFKGNoYW5ubykpOworCisJaWYgKHJlc2lk dWUyID4gcmVzaWR1ZTEpIHsKKwkJLyoKKwkJICogQ29udHJvbGxlciBtdXN0IGhhdmUgbG9hZGVk IG5leHQgZGVzY3JpcHRvciBiZXR3ZWVuCisJCSAqIHRoZSB0d28gcmVzaWR1ZSByZWFkcworCQkg Ki8KKwkJbnJlcG9ydHMgPSBhZG1hY19yaW5nX25vY2N1cGllZF9zbG90cyhyaW5nMSkgKyAxOwor CX0gZWxzZSB7CisJCS8qIE5vIGRlc2NyaXB0b3IgbG9hZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMs IHJpbmcyIGlzIHNhZmUgdG8gdXNlICovCisJCW5yZXBvcnRzID0gYWRtYWNfcmluZ19ub2NjdXBp ZWRfc2xvdHMocmluZzIpOworCX0KKworCXBvcyA9IGFkdHgtPnJlY2xhaW1lZF9wb3MgKyBhZHR4 LT5wZXJpb2RfbGVuICogKG5yZXBvcnRzICsgMSkgLSByZXNpZHVlMjsKKworCXJldHVybiBhZHR4 LT5idWZfbGVuIC0gcG9zICUgYWR0eC0+YnVmX2xlbjsKK30KKworc3RhdGljIGVudW0gZG1hX3N0 YXR1cyBhZG1hY190eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfY29va2llX3Qg Y29va2llLAorCQkJCXN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUpCit7CisJc3RydWN0IGFk bWFjX2NoYW4gKmFkY2hhbiA9IHRvX2FkbWFjX2NoYW4oY2hhbik7CisJc3RydWN0IGFkbWFjX2Rh dGEgKmFkID0gYWRjaGFuLT5ob3N0OworCXN0cnVjdCBhZG1hY190eCAqYWR0eDsKKworCWVudW0g ZG1hX3N0YXR1cyByZXQ7CisJc2l6ZV90IHJlc2lkdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KworCXJldCA9IGRtYV9jb29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhzdGF0ZSk7CisJaWYg KHJldCA9PSBETUFfQ09NUExFVEUgfHwgIXR4c3RhdGUpCisJCXJldHVybiByZXQ7CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmYWRjaGFuLT5sb2NrLCBmbGFncyk7CisJYWR0eCA9IGFkY2hhbi0+Y3Vy cmVudF90eDsKKworCWlmIChhZHR4ICYmIGFkdHgtPnR4LmNvb2tpZSA9PSBjb29raWUpIHsKKwkJ cmV0ID0gRE1BX0lOX1BST0dSRVNTOworCQlyZXNpZHVlID0gYWRtYWNfY3ljbGljX3JlYWRfcmVz aWR1ZShhZCwgYWRjaGFuLT5ubywgYWR0eCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gRE1BX0lOX1BS T0dSRVNTOworCQlyZXNpZHVlID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShhZHR4LCAmYWRj aGFuLT5pc3N1ZWQsIG5vZGUpIHsKKwkJCWlmIChhZHR4LT50eC5jb29raWUgPT0gY29va2llKSB7 CisJCQkJcmVzaWR1ZSA9IGFkdHgtPmJ1Zl9sZW47CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRjaGFuLT5sb2NrLCBmbGFncyk7CisKKwlkbWFf c2V0X3Jlc2lkdWUodHhzdGF0ZSwgcmVzaWR1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgYWRtYWNfc3RhcnRfY2hhbihzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuKQoreworCXUz MiBzdGFydGJpdCA9IDEgPDwgKGFkY2hhbi0+bm8gLyAyKTsKKworCXN3aXRjaCAoYWRtYWNfY2hh bl9kaXJlY3Rpb24oYWRjaGFuLT5ubykpIHsKKwljYXNlIERNQV9NRU1fVE9fREVWOgorCQlhZG1h Y19wb2tlKGFkY2hhbi0+aG9zdCwgUkVHX1RYX1NUQVJULCBzdGFydGJpdCk7CisJCWJyZWFrOwor CWNhc2UgRE1BX0RFVl9UT19NRU06CisJCWFkbWFjX3Bva2UoYWRjaGFuLT5ob3N0LCBSRUdfUlhf U1RBUlQsIHN0YXJ0Yml0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWRl dl9kYmcoYWRjaGFuLT5ob3N0LT5kZXYsICJjaCVkIHN0YXJ0XG4iLCBhZGNoYW4tPm5vKTsKK30K Kworc3RhdGljIHZvaWQgYWRtYWNfc3RvcF9jaGFuKHN0cnVjdCBhZG1hY19jaGFuICphZGNoYW4p Cit7CisJdTMyIHN0b3BiaXQgPSAxIDw8IChhZGNoYW4tPm5vIC8gMik7CisKKwlzd2l0Y2ggKGFk bWFjX2NoYW5fZGlyZWN0aW9uKGFkY2hhbi0+bm8pKSB7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoK KwkJYWRtYWNfcG9rZShhZGNoYW4tPmhvc3QsIFJFR19UWF9TVE9QLCBzdG9wYml0KTsKKwkJYnJl YWs7CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJYWRtYWNfcG9rZShhZGNoYW4tPmhvc3QsIFJF R19SWF9TVE9QLCBzdG9wYml0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQor CWRldl9kYmcoYWRjaGFuLT5ob3N0LT5kZXYsICJjaCVkIHN0b3BcbiIsIGFkY2hhbi0+bm8pOwor fQorCitzdGF0aWMgdm9pZCBhZG1hY19zdGFydF9jdXJyZW50X3R4KHN0cnVjdCBhZG1hY19jaGFu ICphZGNoYW4pCit7CisJc3RydWN0IGFkbWFjX2RhdGEgKmFkID0gYWRjaGFuLT5ob3N0OworCWlu dCBjaCA9IGFkY2hhbi0+bm87CisKKwlhZG1hY19wb2tlKGFkLCBSRUdfQ0hBTl9JTlRTVEFUVVMo Y2gsIGFkLT5pcnFfaW5kZXgpLAorCQkJU1RBVFVTX0RFU0NfRE9ORSB8IFNUQVRVU19FUlIpOwor CWFkbWFjX3Bva2UoYWQsIFJFR19DSEFOX0NUTChjaCksIFJFR19DSEFOX0NUTF9SU1RfUklOR1Mp OworCWFkbWFjX3Bva2UoYWQsIFJFR19DSEFOX0NUTChjaCksIDApOworCisJYWRtYWNfY3ljbGlj X3dyaXRlX29uZV9kZXNjKGFkLCBjaCwgYWRjaGFuLT5jdXJyZW50X3R4KTsKKwlhZG1hY19zdGFy dF9jaGFuKGFkY2hhbik7CisJYWRtYWNfY3ljbGljX3dyaXRlX2Rlc2MoYWQsIGNoLCBhZGNoYW4t PmN1cnJlbnRfdHgpOworfQorCitzdGF0aWMgdm9pZCBhZG1hY19pc3N1ZV9wZW5kaW5nKHN0cnVj dCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gdG9fYWRt YWNfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgYWRtYWNfdHggKnR4OworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRjaGFuLT5sb2NrLCBmbGFncyk7CisJbGlzdF9z cGxpY2VfdGFpbF9pbml0KCZhZGNoYW4tPnN1Ym1pdHRlZCwgJmFkY2hhbi0+aXNzdWVkKTsKKwlp ZiAoIWxpc3RfZW1wdHkoJmFkY2hhbi0+aXNzdWVkKSAmJiAhYWRjaGFuLT5jdXJyZW50X3R4KSB7 CisJCXR4ID0gbGlzdF9maXJzdF9lbnRyeSgmYWRjaGFuLT5pc3N1ZWQsIHN0cnVjdCBhZG1hY190 eCwgbm9kZSk7CisJCWxpc3RfZGVsKCZ0eC0+bm9kZSk7CisKKwkJYWRjaGFuLT5jdXJyZW50X3R4 ID0gdHg7CisJCWFkY2hhbi0+bnBlcmlvZF9hY2tzID0gMDsKKwkJYWRtYWNfc3RhcnRfY3VycmVu dF90eChhZGNoYW4pOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGNoYW4tPmxvY2ss IGZsYWdzKTsKK30KKworc3RhdGljIGludCBhZG1hY19wYXVzZShzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4pCit7CisJc3RydWN0IGFkbWFjX2NoYW4gKmFkY2hhbiA9IHRvX2FkbWFjX2NoYW4oY2hhbik7 CisKKwlhZG1hY19zdG9wX2NoYW4oYWRjaGFuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGFkbWFjX3Jlc3VtZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGFkbWFj X2NoYW4gKmFkY2hhbiA9IHRvX2FkbWFjX2NoYW4oY2hhbik7CisKKwlhZG1hY19zdGFydF9jaGFu KGFkY2hhbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZG1hY190ZXJtaW5hdGVf YWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFu ID0gdG9fYWRtYWNfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgYWRtYWNfdHggKmFkdHgsICpfYWR0eDsK Kwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChoZWFkKTsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZhZGNoYW4tPmxvY2ssIGZsYWdzKTsKKwlhZG1hY19zdG9wX2NoYW4oYWRjaGFuKTsK KwlhZGNoYW4tPmN1cnJlbnRfdHggPSBOVUxMOworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYWRj aGFuLT5zdWJtaXR0ZWQsICZoZWFkKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFkY2hhbi0+ aXNzdWVkLCAmaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRjaGFuLT5sb2NrLCBm bGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWR0eCwgX2FkdHgsICZoZWFkLCBu b2RlKSB7CisJCWxpc3RfZGVsKCZhZHR4LT5ub2RlKTsKKwkJYWRtYWNfZGVzY19mcmVlKCZhZHR4 LT50eCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRtYWNfYWxsb2NfY2hh bl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBhZG1hY19jaGFu ICphZGNoYW4gPSB0b19hZG1hY19jaGFuKGNoYW4pOworCXN0cnVjdCBhZG1hY19kYXRhICphZCA9 IGFkY2hhbi0+aG9zdDsKKworCWRtYV9jb29raWVfaW5pdCgmYWRjaGFuLT5jaGFuKTsKKwlhZG1h Y19wb2tlKGFkLCBSRUdfQ0hBTl9JTlRTVEFUVVMoYWRjaGFuLT5ubywgYWQtPmlycV9pbmRleCks CisJCQlTVEFUVVNfREVTQ19ET05FIHwgU1RBVFVTX0VSUik7CisJYWRtYWNfcG9rZShhZCwgUkVH X0NIQU5fSU5UTUFTSyhhZGNoYW4tPm5vLCBhZC0+aXJxX2luZGV4KSwKKwkJCVNUQVRVU19ERVND X0RPTkUgfCBTVEFUVVNfRVJSKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRtYWNf ZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGFk bWFjX2NoYW4gKmFkY2hhbiA9IHRvX2FkbWFjX2NoYW4oY2hhbik7CisKKwlhZG1hY190ZXJtaW5h dGVfYWxsKGNoYW4pOworCXRhc2tsZXRfa2lsbCgmYWRjaGFuLT50YXNrbGV0KTsKK30KKworc3Rh dGljIHN0cnVjdCBkbWFfY2hhbiAqYWRtYWNfZG1hX29mX3hsYXRlKHN0cnVjdCBvZl9waGFuZGxl X2FyZ3MgKmRtYV9zcGVjLAorCQkJCQkJc3RydWN0IG9mX2RtYSAqb2ZkbWEpCit7CisJc3RydWN0 IGFkbWFjX2RhdGEgKmFkID0gKHN0cnVjdCBhZG1hY19kYXRhICopIG9mZG1hLT5vZl9kbWFfZGF0 YTsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwlpZiAoZG1hX3NwZWMtPmFyZ3NfY291bnQgIT0g MSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpbmRleCA9IGRtYV9zcGVjLT5hcmdzWzBdOworCisJaWYg KGluZGV4ID49IGFkLT5uY2hhbm5lbHMpIHsKKwkJZGV2X2VycihhZC0+ZGV2LCAiY2hhbm5lbCBp bmRleCAldSBvdXQgb2YgYm91bmRzXG4iLCBpbmRleCk7CisJCXJldHVybiBOVUxMOworCX0KKwor CXJldHVybiAmYWQtPmNoYW5uZWxzW2luZGV4XS5jaGFuOworfQorCitzdGF0aWMgaW50IGFkbWFj X2RyYWluX3JlcG9ydHMoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgY2hhbm5vKQoreworCWlu dCBjb3VudDsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDQ7IGNvdW50KyspIHsKKwkJdTMy IGNvdW50dmFsX2hpLCBjb3VudHZhbF9sbywgdW5rMSwgZmxhZ3M7CisKKwkJaWYgKGFkbWFjX3Bl ZWsoYWQsIFJFR19SRVBPUlRfUklORyhjaGFubm8pKSAmIFJJTkdfRU1QVFkpCisJCQlicmVhazsK KworCQljb3VudHZhbF9sbyA9IGFkbWFjX3BlZWsoYWQsIFJFR19SRVBPUlRfUkVBRChjaGFubm8p KTsKKwkJY291bnR2YWxfaGkgPSBhZG1hY19wZWVrKGFkLCBSRUdfUkVQT1JUX1JFQUQoY2hhbm5v KSk7CisJCXVuazEgPSAgICAgICAgYWRtYWNfcGVlayhhZCwgUkVHX1JFUE9SVF9SRUFEKGNoYW5u bykpOworCQlmbGFncyA9ICAgICAgIGFkbWFjX3BlZWsoYWQsIFJFR19SRVBPUlRfUkVBRChjaGFu bm8pKTsKKworCQlkZXZfZGJnKGFkLT5kZXYsICJjaCVkIHJlcG9ydDogY291bnR2YWw9MHglbGx4 IHVuazE9MHgleCBmbGFncz0weCV4XG4iLAorCQkJY2hhbm5vLCAoKHU2NCkgY291bnR2YWxfaGkp IDw8IDMyIHwgY291bnR2YWxfbG8sIHVuazEsIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7 Cit9CisKK3N0YXRpYyB2b2lkIGFkbWFjX2hhbmRsZV9zdGF0dXNfZXJyKHN0cnVjdCBhZG1hY19k YXRhICphZCwgaW50IGNoYW5ubykKK3sKKwlib29sIGhhbmRsZWQgPSBmYWxzZTsKKworCWlmIChh ZG1hY19wZWVrKGFkLCBSRUdfREVTQ19SSU5HKGNoYW5ubykgJiBSSU5HX0VSUikpIHsKKwkJYWRt YWNfcG9rZShhZCwgUkVHX0RFU0NfUklORyhjaGFubm8pLCBSSU5HX0VSUik7CisJCWRldl9lcnIo YWQtPmRldiwgImNoJWQgZGVzY3JpcHRvciByaW5nIGVycm9yXG4iLCBjaGFubm8pOworCQloYW5k bGVkID0gdHJ1ZTsKKwl9CisKKwlpZiAoYWRtYWNfcGVlayhhZCwgUkVHX1JFUE9SVF9SSU5HKGNo YW5ubykpICYgUklOR19FUlIpIHsKKwkJYWRtYWNfcG9rZShhZCwgUkVHX1JFUE9SVF9SSU5HKGNo YW5ubyksIFJJTkdfRVJSKTsKKwkJZGV2X2VycihhZC0+ZGV2LCAiY2glZCByZXBvcnQgcmluZyBl cnJvclxuIiwgY2hhbm5vKTsKKwkJaGFuZGxlZCA9IHRydWU7CisJfQorCisJaWYgKHVubGlrZWx5 KCFoYW5kbGVkKSkgeworCQlkZXZfZXJyKGFkLT5kZXYsICJjaCVkIHVua25vd24gZXJyb3IsIG1h c2tpbmcgZXJyb3JzIGFzIGNhdXNlIG9mIElSUXNcbiIsIGNoYW5ubyk7CisJCWFkbWFjX21vZGlm eShhZCwgUkVHX0NIQU5fSU5UTUFTSyhjaGFubm8sIGFkLT5pcnFfaW5kZXgpLAorCQkJCVNUQVRV U19FUlIsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgYWRtYWNfaGFuZGxlX3N0YXR1c19kZXNj X2RvbmUoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgY2hhbm5vKQoreworCXN0cnVjdCBhZG1h Y19jaGFuICphZGNoYW4gPSAmYWQtPmNoYW5uZWxzW2NoYW5ub107CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKwlpbnQgbnJlcG9ydHM7CisKKwlhZG1hY19wb2tlKGFkLCBSRUdfQ0hBTl9JTlRTVEFU VVMoY2hhbm5vLCBhZC0+aXJxX2luZGV4KSwKKwkJCQlTVEFUVVNfREVTQ19ET05FKTsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZhZGNoYW4tPmxvY2ssIGZsYWdzKTsKKwlucmVwb3J0cyA9IGFkbWFj X2RyYWluX3JlcG9ydHMoYWQsIGNoYW5ubyk7CisKKwlpZiAoYWRjaGFuLT5jdXJyZW50X3R4KSB7 CisJCXN0cnVjdCBhZG1hY190eCAqdHggPSBhZGNoYW4tPmN1cnJlbnRfdHg7CisKKwkJYWRjaGFu LT5ucGVyaW9kX2Fja3MgKz0gbnJlcG9ydHM7CisJCXR4LT5yZWNsYWltZWRfcG9zICs9IG5yZXBv cnRzICogdHgtPnBlcmlvZF9sZW47CisJCXR4LT5yZWNsYWltZWRfcG9zICU9IDIgKiB0eC0+YnVm X2xlbjsKKworCQlhZG1hY19jeWNsaWNfd3JpdGVfZGVzYyhhZCwgY2hhbm5vLCB0eCk7CisJCXRh c2tsZXRfc2NoZWR1bGUoJmFkY2hhbi0+dGFza2xldCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmFkY2hhbi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhZG1hY19oYW5k bGVfY2hhbl9pbnQoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgbm8pCit7CisJdTMyIGNhdXNl ID0gYWRtYWNfcGVlayhhZCwgUkVHX0NIQU5fSU5UU1RBVFVTKG5vLCBhZC0+aXJxX2luZGV4KSk7 CisKKwlpZiAoY2F1c2UgJiBTVEFUVVNfRVJSKQorCQlhZG1hY19oYW5kbGVfc3RhdHVzX2Vycihh ZCwgbm8pOworCisJaWYgKGNhdXNlICYgU1RBVFVTX0RFU0NfRE9ORSkKKwkJYWRtYWNfaGFuZGxl X3N0YXR1c19kZXNjX2RvbmUoYWQsIG5vKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFkbWFj X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgYWRtYWNfZGF0YSAq YWQgPSBkZXZpZDsKKwl1MzIgcnhfaW50c3RhdGUsIHR4X2ludHN0YXRlOworCWludCBpOworCisJ cnhfaW50c3RhdGUgPSBhZG1hY19wZWVrKGFkLCBSRUdfUlhfSU5UU1RBVEUoYWQtPmlycV9pbmRl eCkpOworCXR4X2ludHN0YXRlID0gYWRtYWNfcGVlayhhZCwgUkVHX1RYX0lOVFNUQVRFKGFkLT5p cnFfaW5kZXgpKTsKKworCWlmICghdHhfaW50c3RhdGUgJiYgIXJ4X2ludHN0YXRlKQorCQlyZXR1 cm4gSVJRX05PTkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWQtPm5jaGFubmVsczsgaSArPSAyKSB7 CisJCWlmICh0eF9pbnRzdGF0ZSAmIDEpCisJCQlhZG1hY19oYW5kbGVfY2hhbl9pbnQoYWQsIGkp OworCQl0eF9pbnRzdGF0ZSA+Pj0gMTsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgYWQtPm5jaGFu bmVsczsgaSArPSAyKSB7CisJCWlmIChyeF9pbnRzdGF0ZSAmIDEpCisJCQlhZG1hY19oYW5kbGVf Y2hhbl9pbnQoYWQsIGkpOworCQlyeF9pbnRzdGF0ZSA+Pj0gMTsKKwl9CisKKwlyZXR1cm4gSVJR X0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkbWFjX2NoYW5fdGFza2xldChzdHJ1Y3QgdGFz a2xldF9zdHJ1Y3QgKnQpCit7CisJc3RydWN0IGFkbWFjX2NoYW4gKmFkY2hhbiA9IGZyb21fdGFz a2xldChhZGNoYW4sIHQsIHRhc2tsZXQpOworCXN0cnVjdCBhZG1hY190eCAqYWR0eDsKKwlzdHJ1 Y3QgZG1hZW5naW5lX2Rlc2NfY2FsbGJhY2sgY2I7CisJc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQg dHhfcmVzdWx0OworCWludCBuYWNrczsKKworCXNwaW5fbG9ja19pcnEoJmFkY2hhbi0+bG9jayk7 CisJYWR0eCA9IGFkY2hhbi0+Y3VycmVudF90eDsKKwluYWNrcyA9IGFkY2hhbi0+bnBlcmlvZF9h Y2tzOworCWFkY2hhbi0+bnBlcmlvZF9hY2tzID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmFkY2hh bi0+bG9jayk7CisKKwlpZiAoIWFkdHggfHwgIW5hY2tzKQorCQlyZXR1cm47CisKKwl0eF9yZXN1 bHQucmVzdWx0ID0gRE1BX1RSQU5TX05PRVJST1I7CisJdHhfcmVzdWx0LnJlc2lkdWUgPSAwOwor CisJZG1hZW5naW5lX2Rlc2NfZ2V0X2NhbGxiYWNrKCZhZHR4LT50eCwgJmNiKTsKKwl3aGlsZSAo bmFja3MtLSkKKwkJZG1hZW5naW5lX2Rlc2NfY2FsbGJhY2tfaW52b2tlKCZjYiwgJnR4X3Jlc3Vs dCk7Cit9CisKK3N0YXRpYyBpbnQgYWRtYWNfZGV2aWNlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4sCisJCQkJIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjb25maWcpCit7CisJc3RydWN0 IGFkbWFjX2NoYW4gKmFkY2hhbiA9IHRvX2FkbWFjX2NoYW4oY2hhbik7CisJc3RydWN0IGFkbWFj X2RhdGEgKmFkID0gYWRjaGFuLT5ob3N0OworCWJvb2wgaXNfdHggPSBhZG1hY19jaGFuX2RpcmVj dGlvbihhZGNoYW4tPm5vKSA9PSBETUFfTUVNX1RPX0RFVjsKKwlpbnQgd29yZHNpemUgPSAwOwor CXUzMiBidXNfd2lkdGggPSAwOworCisJc3dpdGNoIChpc190eCA/IGNvbmZpZy0+ZHN0X2FkZHJf d2lkdGggOiBjb25maWctPnNyY19hZGRyX3dpZHRoKSB7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lE VEhfMV9CWVRFOgorCQl3b3Jkc2l6ZSA9IDE7CisJCWJ1c193aWR0aCB8PSBCVVNfV0lEVEhfOEJJ VDsKKwkJYnJlYWs7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKKwkJd29yZHNp emUgPSAyOworCQlidXNfd2lkdGggfD0gQlVTX1dJRFRIXzE2QklUOworCQlicmVhazsKKwljYXNl IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOgorCQl3b3Jkc2l6ZSA9IDQ7CisJCWJ1c193aWR0 aCB8PSBCVVNfV0lEVEhfMzJCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCS8qCisJICogV2UgdGFrZSBwb3J0X3dpbmRvd19zaXplIHRvIGJlIHRoZSBu dW1iZXIgb2Ygd29yZHMgaW4gYSBmcmFtZS4KKwkgKgorCSAqIFRoZSBjb250cm9sbGVyIGhhcyBz b21lIG1lYW5zIG9mIG91dC1vZi1iYW5kIHNpZ25hbGxpbmcsIHRvIHRoZSBwZXJpcGhlcmFsLAor CSAqIG9mIHdvcmRzIHBvc2l0aW9uIGluIGEgZnJhbWUuIFRoYXQncyB3aGVyZSB0aGUgaW1wb3J0 YW5jZSBvZiB0aGlzIGNvbnRyb2wKKwkgKiBjb21lcyBmcm9tLgorCSAqLworCXN3aXRjaCAoaXNf dHggPyBjb25maWctPmRzdF9wb3J0X3dpbmRvd19zaXplIDogY29uZmlnLT5zcmNfcG9ydF93aW5k b3dfc2l6ZSkgeworCWNhc2UgMCAuLi4gMToKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlidXNfd2lk dGggfD0gQlVTX1dJRFRIX0ZSQU1FXzJfV09SRFM7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJYnVz X3dpZHRoIHw9IEJVU19XSURUSF9GUkFNRV80X1dPUkRTOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZG1hY19wb2tlKGFkLCBSRUdfQlVTX1dJRFRIKGFk Y2hhbi0+bm8pLCBidXNfd2lkdGgpOworCisJLyoKKwkgKiBCeSBGSUZPQ1RMX0xJTUlUIHdlIHNl ZW0gdG8gc2V0IHRoZSBtYXhpbWFsIG51bWJlciBvZiBieXRlcyBhbGxvd2VkIHRvIGJlCisJICog aGVsZCBpbiBjb250cm9sbGVyJ3MgcGVyLWNoYW5uZWwgRklGTy4gVHJhbnNmZXJzIHNlZW0gdG8g YmUgdHJpZ2dlcmVkCisJICogYXJvdW5kIHRoZSB0aW1lIEZJRk8gb2NjdXBhbmN5IHRvdWNoZXMg RklGT0NUTF9USFJFU0hPTEQuCisJICoKKwkgKiBUaGUgbnVtYmVycyB3ZSBzZXQgYXJlIG1vcmUg b3IgbGVzcyBhcmJpdHJhcnkuCisJICovCisJYWRtYWNfcG9rZShhZCwgUkVHX0NIQU5fRklGT0NU TChhZGNoYW4tPm5vKSwKKwkJCUZJRUxEX1BSRVAoQ0hBTl9GSUZPQ1RMX0xJTUlULCAweDMwICog d29yZHNpemUpCisJCQl8IEZJRUxEX1BSRVAoQ0hBTl9GSUZPQ1RMX1RIUkVTSE9MRCwgMHgxOCAq IHdvcmRzaXplKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZG1hY19wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQ7CisJc3RydWN0IGRt YV9kZXZpY2UgKmRtYTsKKwlpbnQgbmNoYW5uZWxzOworCWludCBlcnIsIGlycSwgaTsKKworCWVy ciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZG1hLWNoYW5uZWxzIiwgJm5jaGFubmVscyk7 CisJaWYgKGVyciB8fCBuY2hhbm5lbHMgPiBOQ0hBTk5FTFNfTUFYKSB7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwgIm1pc3Npbmcgb3IgaW52YWxpZCBkbWEtY2hhbm5lbHMgcHJvcGVydHlcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBz dHJ1Y3Rfc2l6ZShhZCwgY2hhbm5lbHMsIG5jaGFubmVscyksIEdGUF9LRVJORUwpOworCWlmICgh YWQpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWQp OworCWFkLT5kZXYgPSAmcGRldi0+ZGV2OworCWFkLT5uY2hhbm5lbHMgPSBuY2hhbm5lbHM7CisK KwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFwcGxlLGludGVybmFsLWlycS1kZXN0 aW5hdGlvbiIsCisJCQkJCSZhZC0+aXJxX2luZGV4KTsKKwlpZiAoZXJyIHx8IGFkLT5pcnFfaW5k ZXggPj0gSVJRX05JTkRJQ0VTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3Npbmcgb3Ig aW52YWxpZCBhcHBsZSxpbnRlcm5hbC1pcnEtZGVzdGluYXRpb24gcHJvcGVydHlcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwor CWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBvYnRhaW4g aW50ZXJydXB0IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwllcnIgPSBkZXZt X3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgYWRtYWNfaW50ZXJydXB0LAorCQkJCQkwLCBk ZXZfbmFtZSgmcGRldi0+ZGV2KSwgYWQpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGludGVycnVwdDogJWRcbiIsIGVycik7CisJCXJldHVy biBlcnI7CisJfQorCisJYWQtPmJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2Uo cGRldiwgMCk7CisJaWYgKElTX0VSUihhZC0+YmFzZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAidW5hYmxlIHRvIG9idGFpbiBNTUlPIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIo YWQtPmJhc2UpOworCX0KKworCWRtYSA9ICZhZC0+ZG1hOworCisJZG1hX2NhcF9zZXQoRE1BX1BS SVZBVEUsIGRtYS0+Y2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGRtYS0+Y2Fw X21hc2spOworCisJZG1hLT5kZXYgPSAmcGRldi0+ZGV2OworCWRtYS0+ZGV2aWNlX2FsbG9jX2No YW5fcmVzb3VyY2VzID0gYWRtYWNfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZG1hLT5kZXZpY2Vf ZnJlZV9jaGFuX3Jlc291cmNlcyA9IGFkbWFjX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJZG1hLT5k ZXZpY2VfdHhfc3RhdHVzID0gYWRtYWNfdHhfc3RhdHVzOworCWRtYS0+ZGV2aWNlX2lzc3VlX3Bl bmRpbmcgPSBhZG1hY19pc3N1ZV9wZW5kaW5nOworCWRtYS0+ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwg PSBhZG1hY190ZXJtaW5hdGVfYWxsOworCWRtYS0+ZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYyA9IGFk bWFjX3ByZXBfZG1hX2N5Y2xpYzsKKwlkbWEtPmRldmljZV9jb25maWcgPSBhZG1hY19kZXZpY2Vf Y29uZmlnOworCWRtYS0+ZGV2aWNlX3BhdXNlID0gYWRtYWNfcGF1c2U7CisJZG1hLT5kZXZpY2Vf cmVzdW1lID0gYWRtYWNfcmVzdW1lOworCisJZG1hLT5kaXJlY3Rpb25zID0gQklUKERNQV9NRU1f VE9fREVWKSB8IEJJVChETUFfREVWX1RPX01FTSk7CisJZG1hLT5yZXNpZHVlX2dyYW51bGFyaXR5 ID0gRE1BX1JFU0lEVUVfR1JBTlVMQVJJVFlfQlVSU1Q7CisJZG1hLT5kc3RfYWRkcl93aWR0aHMg PSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSkgfAorCQkJQklUKERNQV9TTEFWRV9CVVNX SURUSF8yX0JZVEVTKSB8CisJCQlCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpOworCisJ SU5JVF9MSVNUX0hFQUQoJmRtYS0+Y2hhbm5lbHMpOworCWZvciAoaSA9IDA7IGkgPCBuY2hhbm5l bHM7IGkrKykgeworCQlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gJmFkLT5jaGFubmVsc1tp XTsKKworCQlhZGNoYW4tPmhvc3QgPSBhZDsKKwkJYWRjaGFuLT5ubyA9IGk7CisJCWFkY2hhbi0+ Y2hhbi5kZXZpY2UgPSAmYWQtPmRtYTsKKwkJc3Bpbl9sb2NrX2luaXQoJmFkY2hhbi0+bG9jayk7 CisJCUlOSVRfTElTVF9IRUFEKCZhZGNoYW4tPnN1Ym1pdHRlZCk7CisJCUlOSVRfTElTVF9IRUFE KCZhZGNoYW4tPmlzc3VlZCk7CisJCWxpc3RfYWRkX3RhaWwoJmFkY2hhbi0+Y2hhbi5kZXZpY2Vf bm9kZSwgJmRtYS0+Y2hhbm5lbHMpOworCQl0YXNrbGV0X3NldHVwKCZhZGNoYW4tPnRhc2tsZXQs IGFkbWFjX2NoYW5fdGFza2xldCk7CisJfQorCisJZXJyID0gZG1hX2FzeW5jX2RldmljZV9yZWdp c3RlcigmYWQtPmRtYSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWls ZWQgdG8gcmVnaXN0ZXIgRE1BIGRldmljZTogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJ fQorCisJZXJyID0gb2ZfZG1hX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGRldi0+ZGV2Lm9mX25vZGUs IGFkbWFjX2RtYV9vZl94bGF0ZSwgYWQpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggT0Y6ICVkXG4iLCBlcnIpOworCQlkbWFfYXN5 bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmFkLT5kbWEpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRl dl9kYmcoJnBkZXYtPmRldiwgImFsbCBnb29kLCByZWFkeSB0byBnbyFcbiIpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgYWRtYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGFkbWFjX2RhdGEgKmFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7CisKKwlvZl9kbWFfY29udHJvbGxlcl9mcmVlKHBkZXYtPmRldi5vZl9ub2RlKTsKKwlk bWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmFkLT5kbWEpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFkbWFjX29mX21hdGNoW10gPSB7CisJ eyAuY29tcGF0aWJsZSA9ICJhcHBsZSxhZG1hYyIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgYWRtYWNfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBhcHBsZV9hZG1hY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXBw bGUtYWRtYWMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBhZG1hY19vZl9tYXRjaCwKKwl9LAorCS5w cm9iZSA9IGFkbWFjX3Byb2JlLAorCS5yZW1vdmUgPSBhZG1hY19yZW1vdmUsCit9OworbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihhcHBsZV9hZG1hY19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJN YXJ0aW4gUG92acWhZXIgPHBvdmlrK2xpbkBjdXRlYml0Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQ VElPTigiRHJpdmVyIGZvciBBdWRpbyBETUEgQ29udHJvbGxlciAoQURNQUMpIG9uIEFwcGxlIFNv Q3MiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS0gCjIuMzMuMAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK