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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8DFEC77B73 for ; Mon, 22 May 2023 20:02:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233793AbjEVUCy (ORCPT ); Mon, 22 May 2023 16:02:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231439AbjEVUCu (ORCPT ); Mon, 22 May 2023 16:02:50 -0400 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A39B1A5; Mon, 22 May 2023 13:02:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=s31663417; t=1684785727; i=ps.report@gmx.net; bh=nao6uyuQHto+LCIE2B02jIMUT45rOiW4em4xC7+uKEs=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date; b=ZSaBQb2o12JD3v35LWI4uyxet8GjrrIxAcKbwxEVEKz8+lVSKewMx5XfP208cEFFz mzaRThn6FtfPAHNbK1vOSvF2D3c1AG5DyoaK33WUIfrlaJP7wltSH4ymP2UZ+t42nb 8K66/mx1iZNCklQKGiU1PKKYWaj31vweMzEYkckV2dvUPwhtaTSgoO9Ab4xaaCTXRG YtPpgV7dTKV/N9tq6Cp1bPV0d5rIevhSs2IAa7oBRrhj+lK/8GIITBCzqCgjatkmKZ plg1VRIf+tB5KXKt5oCsTXDhmgGsoLphgVXVAVQdeiBJMdJis/TInWEAr7+tVlKEkl kHjYHPBLckTjw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([62.216.209.74]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MjS5A-1qOito2p3q-00kzfp; Mon, 22 May 2023 22:02:06 +0200 From: Peter Seiderer To: linux-can@vger.kernel.org Cc: Florian Ferg , Marc Kleine-Budde , Vincent Mailhol , Wolfgang Grandegger , socketcan@hms-networks.de, linux-kernel@vger.kernel.org, Peter Seiderer Subject: [PATCH v9] can: usb: IXXAT USB-to-CAN adapters drivers Date: Mon, 22 May 2023 22:01:44 +0200 Message-Id: <20230522200144.15949-1-ps.report@gmx.net> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:uS37nkfLUX+QlQdlPd7/9Sg4Bzqhr1B/EbrstN6HnfTREyuyS9P qOOJ9wISlT3P3YH4jTOJOCWbMUvpOovl2RDaHHXtEKzGsPHNSHCmbmO9o/QxMpuJVcTEg/Z G9gBv3udAM/QvEW5gSqm7ELwGNWtVL8W8R/99AkEeSmYtMT6GM+xKql4N2rPjLM1J/oBNce N8aPIwNmSplAi6IYS8wKQ== UI-OutboundReport: notjunk:1;M01:P0:3d6P4lPNEBg=;4zUB54WTAcjSAm4U8R413HGmmme wMj6xQwketQOI4XfRCclSyEBSsh5DXbc6o+PiXJj2hyVzDErg9KIb1f01AHgY3ZqNjVQYugCz VXn570C+7d01nhS6Jl1xRo/GFwkZhtyJ1KGL/R+9x69omuxZPdBaBf8PAPW1rhCgGNSG229XW f4NzOvs8pJnkq51T1kbnAflUEZQ2zMN8j0k4sXpsdOaXQ+CDsYaN5lge2HgsLF8ApWtfRgdan CQ4PGDCqOUJIqglwphFkCtrVr7QKZCVUw4OcvtSxrwIV6R1qH1AMp25KkjEh6oSKYyEpIdXdf pfEnEl6rllJr/hfgvBkry2YyRovP2uDl0iJgcWwHml0CMyRFQMwCSSXtmbPg2cyHfqktvg5fB OEGg6IXhZyaKg7IdufYgj67nJDWKL1PHxot7MqaQih7WJQMM3UeI0gug+MaqGhnld1l25W+Eo Mb8QytXQT9pgt5o5K8EB746aNGkFW/xzy9aDhQd5+COf5+r3BiMTFFHosYBAJ1N1a4FyhJ+iG HQ1ipXkTAIiHvzVJYQqVKscQXAtt4lY7Z4pqyk3Eqd109bfl8bUPpwEx1seBh7u/FJrUA20q+ wsx3PJ72AgZWaAkPc7DjqqC+5UO6x5Fj8PErS0gbRk541KTgVMksjSk2tGOnFljUJBafwoak0 GFgGzUJtimXtH6CD6dhaZ2FHl6HErT6NcKQHFqBT+tqcL1Njy6XypV8dVmO7sAVKa5DJhiGlG DKxPPR8m0+9lvGrihAKcAwu3hqIqA+i1BJdkj9OFDlC3lYovQ6hCrmnJqsl4mxGz5XLFoMhal kpZD93h51wQJyeT0hGbNjhl0DHkhUA9Ic+XYJSOLuQ+XznyyEL9zBl+0UmWUBd9WIBHol8bA8 XrE4b/VjMC2UIIpPms4PC2lAPB62+4OO8+bCxg6FkG+79+zS1JQDo/LE+m7RIhsmpD/VHHqA7 RRnfhnWKwBb6zGYGLPphNBiZ4pE= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogRmxvcmlhbiBGZXJnIDxmbGZlQGhtcy1uZXR3b3Jrcy5kZT4KClRoaXMgcGF0Y2ggYWRk cyB0aGUgZHJpdmVyIGZvciB0aGUgSVhYQVQgVVNCLXRvLUNBTiBpbnRlcmZhY2VzLiBUaGVyZQpp cyBhbiBhZGFwdGVyIGZvciB0aGUgb2xkZXIgY29tbXVuaWNhdGlvbiBsYXllciBjbDEgYW5kIGFu b3RoZXIKYWRhcHRlciBmb3IgdGhlIG5ld2VyIGNvbW11bmljYXRpb24gbGF5ZXIgY2wyLgoKU2ln bmVkLW9mZi1ieTogRmxvcmlhbiBGZXJnIDxmbGZlQGhtcy1uZXR3b3Jrcy5kZT4KU2lnbmVkLW9m Zi1ieTogTWFyYyBLbGVpbmUtQnVkZGUgPG1rbEBwZW5ndXRyb25peC5kZT4KU2lnbmVkLW9mZi1i eTogUGV0ZXIgU2VpZGVyZXIgPHBzLnJlcG9ydEBnbXgubmV0PgotLS0KQ2hhbmdlcyB2MSAtPiB2 NyAoRmxvcmlhbiBGZXJnIDxmbGZlQGhtcy1uZXR3b3Jrcy5kZT4pOgogIC0gZm9yIGRldGFpbGVk IGhpc3Rvcnkgc2VlCiAgICBodHRwczovL2NvZGViZXJnLm9yZy9wc3JlcG9ydC9zb2NrZXRjYW4t bGludXgtaXgtdXNiLWNhbgoKQ2hhbmdlcyB2NyAtPiB2OCAoTWFyYyBLbGVpbmUtQnVkZGUgPG1r bEBwZW5ndXRyb25peC5kZT4pCiAgLSBwb3J0IHRvIHJlY2VudCBuZXQtbmV4dAoKQ2hhbmdlcyB2 OCAtPiB2OSAoUGV0ZXIgU2VpZGVyZXIgPHBzLnJlcG9ydEBnbXgubmV0PikKICBBZGRyZXNzZWQg cmV2aWV3IGNvbW1lbnRzIGJ5IFZpbmNlbnQgTWFpbGhvbDoKICAtIHVwZGF0ZSBjb3B5cmlnaHQg aGVhZGVycyAodXNlIFNQRFggaWRlbnRpZmllciAnR1BMLTIuMC1vbmx5JwogICAgaW5zdGVhZCBv ZiAnR1BMLTIuMCcsIHJlbW92ZSBmdWxsIEdQTCBib2lsZXJwbGF0ZSkKICAtIHJlb3JkZXIgaW5j bHVkZXMgKGxleGljb2dyYXBoaWMgb3JkZXIpCiAgLSByZW1vdmUgSVhYQVRfVVNCX01PREVTIGRl ZmluZXMgKG1vdmUgbW9kZXMgZGlyZWN0bHkgaW4gdGhlCiAgICBkZWNsYXJhdGlvbiBvZiBzdHJ1 Y3RzKQogIC0gcmVtb3ZlIGJpdHRpbWluZyBkZWZpbmVzIChtb3ZlIGRpcmVjdGx5IGluIGRlY2xh cmF0aW9uIG9mIHN0cnVjdHMpCiAgLSByZW1vdmUgX0VQMV9JTi9fRVAxX09VVCBkZWZpbmVzICht b3ZlIGRpcmVjdGx5IGluIGRlY2xhcmF0aW9uIG9mIHN0cnVjdHMpCiAgLSByZW1vdmUgcmN2X3Np emUvc25kX3NpemUgdmFycyAodXNlIHNpemVvZigqY21kKSBhbmQgc2l6ZW9mKGNtZC0+cmVzKSBk aXJlY3RseSkKICAtIHVzZSBHRU5NQVNLL0ZJRUxEX1BSRVAgKElYWEFUX1VTQl9DQU5fQlRSMV9U SU1FX1NFRzFfTUFTSy9JWFhBVF9VU0JfQ0FOX0JUUjFfVElNRV9TRUcyX01BU0spCiAgLSB1cGRh dGUgZGV2X2Vyci9uZXRkZXZfZXJyICh1c2UgJXBlLCByZW1vdmUgJ0Vycm9yOicgcHJlZml4KQog IC0gdXNlIFUzMl9NQVggaW5zdGVhZCBvZiAweDAwMDAwMDAwRkZGRkZGRkYKICAtIGRvIG5vdCBp bmNyZWFzZSB0aGUgcnhfYnl0ZXMgY291bnQgd2hlbiByZWNlaXZpbmcgYSByZW1vdmUgZnJhbWUK ICAtIGl4eGF0X2Nhbl9tc2dfY2wxL2l4eGF0X2Nhbl9tc2dfY2wyIHVzZSB1bmlvbiBfX2xlMzIg c3RhdHVzCiAgLSBkbyBub3QgaW5jcmVhc2UgdGhlIHN0YXRpc3RpY3MgZm9yIGVycm9yIGZyYW1l cwogIC0gZG8gbm90IHVzZSBwYXJlbnRoZXNpcyBpbiBsb2cgbWVzc2FnZXMKICAtIHJlbW92ZSBk b3VibGUgYnJhY2tldHMgKHNwYXJzZSB3b3JrYXJvdW5kIGZvciBzdHJ1Y3QgaW5pdCkKICAtIGZp bGwgbmV0ZGV2LT5ldGh0b29sX29wcyB3aXRoIGRlZmF1bHQKICAtIGZpbGwgbmV0ZGV2LT5kZXZf cG9ydAogIC0gdXNlIEZJRUxEX0dFVC9GSUVMRF9QUkVQIGluc3RlYWQgb2YgSVhYQVRfVVNCX0RF Q09ERV9ETEMvSVhYQVRfVVNCX0VOQ09ERV9ETEMKICAtIHVzZSBkcml2ZXJfaW5mbyBpbnRlYWQg b2Ygb3BlbiBjb2RlZCBpeHhhdF91c2JfZ2V0X2FkYXB0ZXIKIEFkZHJlc3NlZCBjaGVja3BhdGNo LnBsIHdhcm5pbmdzOgogIC0gY2hhbmdlIE1PRFVMRV9MSUNFTlNFIHRvICdHUEwnIC0gY2hlY2tw YXRjaC5wbCBXQVJOSU5HOiBQcmVmZXIgIkdQTCIgb3ZlciAiR1BMIHYyIgotLS0KIGRyaXZlcnMv bmV0L2Nhbi91c2IvS2NvbmZpZyAgICAgICAgICAgICAgICAgICB8ICAgMTcgKwogZHJpdmVycy9u ZXQvY2FuL3VzYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL25l dC9jYW4vdXNiL2l4eGF0X3VzYi9NYWtlZmlsZSAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvbmV0 L2Nhbi91c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9jbDEuYyB8ICAxMDAgKysKIGRyaXZlcnMvbmV0 L2Nhbi91c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9jbDIuYyB8ICAxNzYgKysrCiAuLi4vbmV0L2Nh bi91c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9jb3JlLmMgICAgfCAxMjc3ICsrKysrKysrKysrKysr KysrCiAuLi4vbmV0L2Nhbi91c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9jb3JlLmggICAgfCAgNTEx ICsrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMjA4NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvY2FuL3VzYi9peHhhdF91c2IvTWFrZWZpbGUKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL25ldC9jYW4vdXNiL2l4eGF0X3VzYi9peHhhdF91c2JfY2wxLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9jYW4vdXNiL2l4eGF0X3VzYi9peHhhdF91 c2JfY2wyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9jYW4vdXNiL2l4eGF0X3Vz Yi9peHhhdF91c2JfY29yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvY2FuL3Vz Yi9peHhhdF91c2IvaXh4YXRfdXNiX2NvcmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nh bi91c2IvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZwppbmRleCA1OGZjZDJi MzQ4MjAuLmI1MDcwNmYyYTVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29u ZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZwpAQCAtNjIsNiArNjIsMjMgQEAg Y29uZmlnIENBTl9HU19VU0IKIAkgIGNob29zZSBZIGZvciBidWlsdCBpbiBzdXBwb3J0LAogCSAg TSB0byBjb21waWxlIGFzIG1vZHVsZSAobW9kdWxlIHdpbGwgYmUgbmFtZWQ6IGdzX3VzYikuCiAK K2NvbmZpZyBDQU5fSVhYQVRfVVNCCisJdHJpc3RhdGUgIklYWEFUIFVTQi10by1DQU4gaW50ZXJm YWNlcyIKKwloZWxwCisJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIElYWEFUIFVTQi10 by1DQU4gZGV2aWNlcy4KKworCSAgVGhlIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUg Zm9sbG93aW5nIGRldmljZXM6CisJICAgIC0gSVhYQVQgVVNCLXRvLUNBTiBjb21wYWN0CisJICAg IC0gSVhYQVQgVVNCLXRvLUNBTiBlbWJlZGRlZAorCSAgICAtIElYWEFUIFVTQi10by1DQU4gcHJv ZmVzc2lvbmFsCisJICAgIC0gSVhYQVQgVVNCLXRvLUNBTiBhdXRvbW90aXZlCisJICAgIC0gSVhY QVQgVVNCLXRvLUNBTiBGRCBjb21wYWN0CisJICAgIC0gSVhYQVQgVVNCLXRvLUNBTiBGRCBwcm9m ZXNzaW9uYWwKKwkgICAgLSBJWFhBVCBVU0ItdG8tQ0FOIEZEIGF1dG9tb3RpdmUKKwkgICAgLSBJ WFhBVCBVU0ItdG8tQ0FOIEZEIE1pbmlQQ0llCisJICAgIC0gSVhYQVQgVVNCLXRvLUNBUgorCSAg ICAtIElYWEFUIENBTi1JRE0xMDEKKwogY29uZmlnIENBTl9LVkFTRVJfVVNCCiAJdHJpc3RhdGUg Ikt2YXNlciBDQU4vVVNCIGludGVyZmFjZSIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9jYW4vdXNiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9NYWtlZmlsZQppbmRleCA4 YjExMDg4ZTlhNTkuLjUyYjRjYzY2ZmYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3Vz Yi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL01ha2VmaWxlCkBAIC05LDYgKzks NyBAQCBvYmotJChDT05GSUdfQ0FOX0VTRF9VU0IpICs9IGVzZF91c2Iubwogb2JqLSQoQ09ORklH X0NBTl9FVEFTX0VTNThYKSArPSBldGFzX2VzNTh4Lwogb2JqLSQoQ09ORklHX0NBTl9GODE2MDQp ICs9IGY4MTYwNC5vCiBvYmotJChDT05GSUdfQ0FOX0dTX1VTQikgKz0gZ3NfdXNiLm8KK29iai0k KENPTkZJR19DQU5fSVhYQVRfVVNCKSArPSBpeHhhdF91c2IvCiBvYmotJChDT05GSUdfQ0FOX0tW QVNFUl9VU0IpICs9IGt2YXNlcl91c2IvCiBvYmotJChDT05GSUdfQ0FOX01DQkFfVVNCKSArPSBt Y2JhX3VzYi5vCiBvYmotJChDT05GSUdfQ0FOX1BFQUtfVVNCKSArPSBwZWFrX3VzYi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvaXh4YXRfdXNiL01ha2VmaWxlIGIvZHJpdmVycy9u ZXQvY2FuL3VzYi9peHhhdF91c2IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi4xMjVkMjcwNTk3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25l dC9jYW4vdXNiL2l4eGF0X3VzYi9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai0kKENPTkZJ R19DQU5fSVhYQVRfVVNCKSArPSBpeHhhdF91c2IyY2FuLm8KK2l4eGF0X3VzYjJjYW4teSA9IGl4 eGF0X3VzYl9jbDEubyBpeHhhdF91c2JfY2wyLm8gaXh4YXRfdXNiX2NvcmUubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9peHhhdF91c2IvaXh4YXRfdXNiX2NsMS5jIGIvZHJpdmVy cy9uZXQvY2FuL3VzYi9peHhhdF91c2IvaXh4YXRfdXNiX2NsMS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2ZkOTVmZjcyMmNkCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9uZXQvY2FuL3VzYi9peHhhdF91c2IvaXh4YXRfdXNiX2NsMS5jCkBAIC0wLDAgKzEs MTAwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICog Q29weXJpZ2h0IChDKSAyMDE4IEhNUyBJbmR1c3RyaWFsIE5ldHdvcmtzIDxzb2NrZXRjYW5AaG1z LW5ldHdvcmtzLmRlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJp eHhhdF91c2JfY29yZS5oIgorCisjZGVmaW5lIElYWEFUX1VTQl9DTE9DSyA4MDAwMDAwCisKKyNk ZWZpbmUgSVhYQVRfVVNCX0JVRkZFUl9TSVpFX1JYIDUxMgorI2RlZmluZSBJWFhBVF9VU0JfQlVG RkVSX1NJWkVfVFggMjU2CisKKyNkZWZpbmUgSVhYQVRfVVNCX0JUTU9ERV9UU01fQ0wxIDB4ODAK KworI2RlZmluZSBJWFhBVF9VU0JfQ0FOX0NNRF9JTklUIDB4MzI1CisKKyNkZWZpbmUgSVhYQVRf VVNCX0NBTl9CVFIwX0JSUF9NQVNLIEdFTk1BU0soNSwgMCkKKyNkZWZpbmUgSVhYQVRfVVNCX0NB Tl9CVFIwX1NKV19NQVNLIEdFTk1BU0soNywgNikKKworI2RlZmluZSBJWFhBVF9VU0JfQ0FOX0JU UjFfVElNRV9TRUcxX01BU0sgR0VOTUFTSygzLCAwKQorI2RlZmluZSBJWFhBVF9VU0JfQ0FOX0JU UjFfVElNRV9TRUcyX01BU0sgR0VOTUFTSyg2LCA0KQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNh bl9iaXR0aW1pbmdfY29uc3QgdXNiMmNhbl9idCA9IHsKKwkubmFtZSA9IElYWEFUX1VTQl9DVFJM X05BTUUsCisJLnRzZWcxX21pbiA9IDEsCisJLnRzZWcxX21heCA9IDE2LAorCS50c2VnMl9taW4g PSAxLAorCS50c2VnMl9tYXggPSA4LAorCS5zandfbWF4ID0gNCwKKwkuYnJwX21pbiA9IDEsCisJ LmJycF9tYXggPSA2NCwKKwkuYnJwX2luYyA9IDEsCit9OworCitzdGF0aWMgaW50IGl4eGF0X3Vz Yl9pbml0X2N0cmwoc3RydWN0IGl4eGF0X3VzYl9kZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1 Y3QgY2FuX2JpdHRpbWluZyAqYnQgPSAmZGV2LT5jYW4uYml0dGltaW5nOworCWNvbnN0IHUxNiBw b3J0ID0gZGV2LT5jdHJsX2luZGV4OworCWludCBlcnI7CisJc3RydWN0IGl4eGF0X3VzYl9pbml0 X2NsMV9jbWQgKmNtZDsKKwl1OCBvcG1vZGUgPSBJWFhBVF9VU0JfT1BNT0RFX0VYVEVOREVEIHwg SVhYQVRfVVNCX09QTU9ERV9TVEFOREFSRDsKKwl1OCBidHIwID0gRklFTERfUFJFUChJWFhBVF9V U0JfQ0FOX0JUUjBfQlJQX01BU0ssIGJ0LT5icnAgLSAxKSB8CisJCUZJRUxEX1BSRVAoSVhYQVRf VVNCX0NBTl9CVFIwX1NKV19NQVNLLCBidC0+c2p3IC0gMSk7CisJdTggYnRyMSA9IEZJRUxEX1BS RVAoSVhYQVRfVVNCX0NBTl9CVFIxX1RJTUVfU0VHMV9NQVNLLCBidC0+cHJvcF9zZWcgKyBidC0+ cGhhc2Vfc2VnMSAtIDEpIHwKKwkJRklFTERfUFJFUChJWFhBVF9VU0JfQ0FOX0JUUjFfVElNRV9T RUcyX01BU0ssIGJ0LT5waGFzZV9zZWcyIC0gMSk7CisKKwljbWQgPSBrbWFsbG9jKHNpemVvZigq Y21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYg KGRldi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUykKKwkJYnRyMSB8PSBJ WFhBVF9VU0JfQlRNT0RFX1RTTV9DTDE7CisJaWYgKGRldi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NU UkxNT0RFX0JFUlJfUkVQT1JUSU5HKQorCQlvcG1vZGUgfD0gSVhYQVRfVVNCX09QTU9ERV9FUlJG UkFNRTsKKwlpZiAoZGV2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfTElTVEVOT05MWSkK KwkJb3Btb2RlIHw9IElYWEFUX1VTQl9PUE1PREVfTElTVE9OTFk7CisKKwlpeHhhdF91c2Jfc2V0 dXBfY21kKCZjbWQtPnJlcSwgJmNtZC0+cmVzKTsKKwljbWQtPnJlcS5zaXplID0gY3B1X3RvX2xl MzIoc2l6ZW9mKCpjbWQpIC0gc2l6ZW9mKGNtZC0+cmVzKSk7CisJY21kLT5yZXEuY29kZSA9IGNw dV90b19sZTMyKElYWEFUX1VTQl9DQU5fQ01EX0lOSVQpOworCWNtZC0+cmVxLnBvcnQgPSBjcHVf dG9fbGUxNihwb3J0KTsKKwljbWQtPm1vZGUgPSBvcG1vZGU7CisJY21kLT5idHIwID0gYnRyMDsK KwljbWQtPmJ0cjEgPSBidHIxOworCisJZXJyID0gaXh4YXRfdXNiX3NlbmRfY21kKGRldi0+dWRl diwgcG9ydCwgY21kLCBzaXplb2YoKmNtZCksICZjbWQtPnJlcywKKwkJCQkgc2l6ZW9mKGNtZC0+ cmVzKSk7CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gZXJyOworfQorCitjb25zdCBzdHJ1Y3QgaXh4 YXRfdXNiX2FkYXB0ZXIgdXNiMmNhbl9jbDEgPSB7CisJLmNsb2NrID0gSVhYQVRfVVNCX0NMT0NL LAorCS5idCA9ICZ1c2IyY2FuX2J0LAorCS5idGQgPSBOVUxMLAorCS5tb2RlcyA9IENBTl9DVFJM TU9ERV8zX1NBTVBMRVMgfCBDQU5fQ1RSTE1PREVfQkVSUl9SRVBPUlRJTkcgfAorCQlDQU5fQ1RS TE1PREVfTElTVEVOT05MWSwKKwkuYnVmZmVyX3NpemVfcnggPSBJWFhBVF9VU0JfQlVGRkVSX1NJ WkVfUlgsCisJLmJ1ZmZlcl9zaXplX3R4ID0gSVhYQVRfVVNCX0JVRkZFUl9TSVpFX1RYLAorCS5l cF9tc2dfaW4gPSB7CisJCTEgfCBVU0JfRElSX0lOLAorCQkyIHwgVVNCX0RJUl9JTiwKKwkJMyB8 IFVTQl9ESVJfSU4sCisJCTQgfCBVU0JfRElSX0lOLAorCQk1IHwgVVNCX0RJUl9JTiwKKwl9LAor CS5lcF9tc2dfb3V0ID0geworCQkxIHwgVVNCX0RJUl9PVVQsCisJCTIgfCBVU0JfRElSX09VVCwK KwkJMyB8IFVTQl9ESVJfT1VULAorCQk0IHwgVVNCX0RJUl9PVVQsCisJCTUgfCBVU0JfRElSX09V VCwKKwl9LAorCS5lcF9vZmZzID0gMCwKKwkuaW5pdF9jdHJsID0gaXh4YXRfdXNiX2luaXRfY3Ry bAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvaXh4YXRfdXNiL2l4eGF0X3Vz Yl9jbDIuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9jbDIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI2ODU0NGY1MmYxZQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9j bDIuYwpAQCAtMCwwICsxLDE3NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBITVMgSW5kdXN0cmlhbCBOZXR3b3Jr cyA8c29ja2V0Y2FuQGhtcy1uZXR3b3Jrcy5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2Fu L2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5o PgorCisjaW5jbHVkZSAiaXh4YXRfdXNiX2NvcmUuaCIKKworI2RlZmluZSBJWFhBVF9VU0JfQ0xP Q0sgODAwMDAwMDAKKworI2RlZmluZSBJWFhBVF9VU0JfQlVGRkVSX1NJWkVfUlggNTEyCisjZGVm aW5lIElYWEFUX1VTQl9CVUZGRVJfU0laRV9UWCA1MTIKKworI2RlZmluZSBJWFhBVF9VU0JfQ0FO X0NNRF9JTklUIDB4MzM3CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25z dCB1c2IyY2FuX2J0ID0geworCS5uYW1lID0gSVhYQVRfVVNCX0NUUkxfTkFNRSwKKwkudHNlZzFf bWluID0gMSwKKwkudHNlZzFfbWF4ID0gMjU2LAorCS50c2VnMl9taW4gPSAxLAorCS50c2VnMl9t YXggPSAyNTYsCisJLnNqd19tYXggPSAxMjgsCisJLmJycF9taW4gPSAyLAorCS5icnBfbWF4ID0g NTEzLAorCS5icnBfaW5jID0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX2JpdHRp bWluZ19jb25zdCB1c2IyY2FuX2J0ZCA9IHsKKwkubmFtZSA9IElYWEFUX1VTQl9DVFJMX05BTUUs CisJLnRzZWcxX21pbiA9IDEsCisJLnRzZWcxX21heCA9IDI1NiwKKwkudHNlZzJfbWluID0gMSwK KwkudHNlZzJfbWF4ID0gMjU2LAorCS5zandfbWF4ID0gMTI4LAorCS5icnBfbWluID0gMiwKKwku YnJwX21heCA9IDUxMywKKwkuYnJwX2luYyA9IDEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGNhbl9iaXR0aW1pbmdfY29uc3QgY2FuaWRtX2J0ID0geworCS5uYW1lID0gSVhYQVRfVVNCX0NU UkxfTkFNRSwKKwkudHNlZzFfbWluID0gMSwKKwkudHNlZzFfbWF4ID0gMjU2LAorCS50c2VnMl9t aW4gPSAxLAorCS50c2VnMl9tYXggPSAxMjgsCisJLnNqd19tYXggPSAxMjgsCisJLmJycF9taW4g PSAxLAorCS5icnBfbWF4ID0gNTEyLAorCS5icnBfaW5jID0gMQorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IGNhbmlkbV9idGQgPSB7CisJLm5hbWUgPSBJWFhB VF9VU0JfQ1RSTF9OQU1FLAorCS50c2VnMV9taW4gPSAxLAorCS50c2VnMV9tYXggPSAzMiwKKwku dHNlZzJfbWluID0gMSwKKwkudHNlZzJfbWF4ID0gMTYsCisJLnNqd19tYXggPSA4LAorCS5icnBf bWluID0gMSwKKwkuYnJwX21heCA9IDMyLAorCS5icnBfaW5jID0gMQorfTsKKworc3RhdGljIGlu dCBpeHhhdF91c2JfaW5pdF9jdHJsKHN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYpCit7CisJ Y29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0ID0gJmRldi0+Y2FuLmJpdHRpbWluZzsKKwlj b25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnRkID0gJmRldi0+Y2FuLmRhdGFfYml0dGltaW5n OworCWNvbnN0IHUxNiBwb3J0ID0gZGV2LT5jdHJsX2luZGV4OworCWludCBlcnI7CisJc3RydWN0 IGl4eGF0X3VzYl9pbml0X2NsMl9jbWQgKmNtZDsKKwl1MzIgYnRtb2RlID0gSVhYQVRfVVNCX0JU TU9ERV9OQVQ7CisJdTggZXhtb2RlID0gMDsKKwl1OCBvcG1vZGUgPSBJWFhBVF9VU0JfT1BNT0RF X0VYVEVOREVEIHwgSVhYQVRfVVNCX09QTU9ERV9TVEFOREFSRDsKKworCWNtZCA9IGttYWxsb2Mo c2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlpZiAoZGV2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfM19TQU1QTEVTKQorCQli dG1vZGUgPSBJWFhBVF9VU0JfQlRNT0RFX1RTTTsKKwlpZiAoZGV2LT5jYW4uY3RybG1vZGUgJiBD QU5fQ1RSTE1PREVfQkVSUl9SRVBPUlRJTkcpCisJCW9wbW9kZSB8PSBJWFhBVF9VU0JfT1BNT0RF X0VSUkZSQU1FOworCWlmIChkZXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9MSVNURU5P TkxZKQorCQlvcG1vZGUgfD0gSVhYQVRfVVNCX09QTU9ERV9MSVNUT05MWTsKKwlpZiAoZGV2LT5j YW4uY3RybG1vZGUgJiAoQ0FOX0NUUkxNT0RFX0ZEIHwgQ0FOX0NUUkxNT0RFX0ZEX05PTl9JU08p KSB7CisJCWV4bW9kZSB8PSBJWFhBVF9VU0JfRVhNT0RFX0VYVERBVEEgfCBJWFhBVF9VU0JfRVhN T0RFX0ZBU1REQVRBOworCisJCWlmICghKGRldi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RF X0ZEX05PTl9JU08pKQorCQkJZXhtb2RlIHw9IElYWEFUX1VTQl9FWE1PREVfSVNPRkQ7CisJfQor CisJaXh4YXRfdXNiX3NldHVwX2NtZCgmY21kLT5yZXEsICZjbWQtPnJlcyk7CisJY21kLT5yZXEu c2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZigqY21kKSAtIHNpemVvZihjbWQtPnJlcykpOworCWNt ZC0+cmVxLmNvZGUgPSBjcHVfdG9fbGUzMihJWFhBVF9VU0JfQ0FOX0NNRF9JTklUKTsKKwljbWQt PnJlcS5wb3J0ID0gY3B1X3RvX2xlMTYocG9ydCk7CisJY21kLT5vcG1vZGUgPSBvcG1vZGU7CisJ Y21kLT5leG1vZGUgPSBleG1vZGU7CisJY21kLT5zZHIubW9kZSA9IGNwdV90b19sZTMyKGJ0bW9k ZSk7CisJY21kLT5zZHIuYnBzID0gY3B1X3RvX2xlMzIoYnQtPmJycCk7CisJY21kLT5zZHIudHMx ID0gY3B1X3RvX2xlMTYoYnQtPnByb3Bfc2VnICsgYnQtPnBoYXNlX3NlZzEpOworCWNtZC0+c2Ry LnRzMiA9IGNwdV90b19sZTE2KGJ0LT5waGFzZV9zZWcyKTsKKwljbWQtPnNkci5zancgPSBjcHVf dG9fbGUxNihidC0+c2p3KTsKKwljbWQtPnNkci50ZG8gPSAwOworCisJaWYgKGV4bW9kZSkgewor CQljbWQtPmZkci5tb2RlID0gY3B1X3RvX2xlMzIoYnRtb2RlKTsKKwkJY21kLT5mZHIuYnBzID0g Y3B1X3RvX2xlMzIoYnRkLT5icnApOworCQljbWQtPmZkci50czEgPSBjcHVfdG9fbGUxNihidGQt PnByb3Bfc2VnICsgYnRkLT5waGFzZV9zZWcxKTsKKwkJY21kLT5mZHIudHMyID0gY3B1X3RvX2xl MTYoYnRkLT5waGFzZV9zZWcyKTsKKwkJY21kLT5mZHIuc2p3ID0gY3B1X3RvX2xlMTYoYnRkLT5z ancpOworCQljbWQtPmZkci50ZG8gPSBjcHVfdG9fbGUxNihidGQtPmJycCAqIChidGQtPnBoYXNl X3NlZzEgKyAxICsKKwkJCQkJCSAgICAgICBidGQtPnByb3Bfc2VnKSk7CisJfQorCisJZXJyID0g aXh4YXRfdXNiX3NlbmRfY21kKGRldi0+dWRldiwgcG9ydCwgY21kLCBzaXplb2YoKmNtZCksICZj bWQtPnJlcywKKwkJCQkgc2l6ZW9mKGNtZC0+cmVzKSk7CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4g ZXJyOworfQorCitjb25zdCBzdHJ1Y3QgaXh4YXRfdXNiX2FkYXB0ZXIgdXNiMmNhbl9jbDIgPSB7 CisJLmNsb2NrID0gSVhYQVRfVVNCX0NMT0NLLAorCS5idCA9ICZ1c2IyY2FuX2J0LAorCS5idGQg PSAmdXNiMmNhbl9idGQsCisJLm1vZGVzID0gQ0FOX0NUUkxNT0RFXzNfU0FNUExFUyB8IENBTl9D VFJMTU9ERV9MSVNURU5PTkxZIHwKKwkJQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HIHwgQ0FO X0NUUkxNT0RFX0ZEIHwKKwkJQ0FOX0NUUkxNT0RFX0ZEX05PTl9JU08sCisJLmJ1ZmZlcl9zaXpl X3J4ID0gSVhYQVRfVVNCX0JVRkZFUl9TSVpFX1JYLAorCS5idWZmZXJfc2l6ZV90eCA9IElYWEFU X1VTQl9CVUZGRVJfU0laRV9UWCwKKwkuZXBfbXNnX2luID0geworCQkxIHwgVVNCX0RJUl9JTiwK KwkJMiB8IFVTQl9ESVJfSU4sCisJCTMgfCBVU0JfRElSX0lOLAorCQk0IHwgVVNCX0RJUl9JTiwK KwkJNSB8IFVTQl9ESVJfSU4KKwl9LAorCS5lcF9tc2dfb3V0ID0geworCQkxIHwgVVNCX0RJUl9P VVQsCisJCTIgfCBVU0JfRElSX09VVCwKKwkJMyB8IFVTQl9ESVJfT1VULAorCQk0IHwgVVNCX0RJ Ul9PVVQsCisJCTUgfCBVU0JfRElSX09VVCwKKwl9LAorCS5lcF9vZmZzID0gMSwKKwkuaW5pdF9j dHJsID0gaXh4YXRfdXNiX2luaXRfY3RybAorfTsKKworY29uc3Qgc3RydWN0IGl4eGF0X3VzYl9h ZGFwdGVyIGNhbl9pZG0gPSB7CisJLmNsb2NrID0gSVhYQVRfVVNCX0NMT0NLLAorCS5idCA9ICZj YW5pZG1fYnQsCisJLmJ0ZCA9ICZjYW5pZG1fYnRkLAorCS5tb2RlcyA9IENBTl9DVFJMTU9ERV8z X1NBTVBMRVMgfCBDQU5fQ1RSTE1PREVfTElTVEVOT05MWSB8CisJCUNBTl9DVFJMTU9ERV9CRVJS X1JFUE9SVElORyB8IENBTl9DVFJMTU9ERV9GRCB8CisJCUNBTl9DVFJMTU9ERV9GRF9OT05fSVNP LAorCS5idWZmZXJfc2l6ZV9yeCA9IElYWEFUX1VTQl9CVUZGRVJfU0laRV9SWCwKKwkuYnVmZmVy X3NpemVfdHggPSBJWFhBVF9VU0JfQlVGRkVSX1NJWkVfVFgsCisJLmVwX21zZ19pbiA9IHsKKwkJ MiB8IFVTQl9ESVJfSU4sCisJCTQgfCBVU0JfRElSX0lOLAorCQk2IHwgVVNCX0RJUl9JTiwKKwkJ OCB8IFVTQl9ESVJfSU4sCisJCTEwIHwgVVNCX0RJUl9JTiwKKwl9LAorCS5lcF9tc2dfb3V0ID0g eworCQkxIHwgVVNCX0RJUl9PVVQsCisJCTMgfCBVU0JfRElSX09VVCwKKwkJNSB8IFVTQl9ESVJf T1VULAorCQk3IHwgVVNCX0RJUl9PVVQsCisJCTkgfCBVU0JfRElSX09VVCwKKwl9LAorCS5lcF9v ZmZzID0gMCwKKwkuaW5pdF9jdHJsID0gaXh4YXRfdXNiX2luaXRfY3RybAorfTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9jb3JlLmMgYi9kcml2 ZXJzL25ldC9jYW4vdXNiL2l4eGF0X3VzYi9peHhhdF91c2JfY29yZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODc4N2QyN2EzODg2Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9uZXQvY2FuL3VzYi9peHhhdF91c2IvaXh4YXRfdXNiX2NvcmUuYwpAQCAtMCww ICsxLDEyNzcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSE1TIEluZHVzdHJpYWwgTmV0d29ya3MgPHNvY2tldGNh bkBobXMtbmV0d29ya3MuZGU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nhbi9kZXYuaD4KKyNp bmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiaXh4YXRfdXNiX2NvcmUuaCIKKworTU9EVUxF X0FVVEhPUigiTWFyY2VsIFNjaG1pZHQgPHNvY2tldGNhbkBobXMtbmV0d29ya3MuZGU+Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIkNBTiBkcml2ZXIgZm9yIElYWEFUIFVTQi10by1DQU4gLyBDQU4g RkQgYWRhcHRlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogVGFibGUgb2YgZGV2 aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1 c2JfZGV2aWNlX2lkIGl4eGF0X3VzYl90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShJWFhBVF9V U0JfVkVORE9SX0lELCBVU0IyQ0FOX0NPTVBBQ1RfUFJPRFVDVF9JRCksCisJICAuZHJpdmVyX2lu Zm8gPSAoa2VybmVsX3Vsb25nX3QpJnVzYjJjYW5fY2wxLCB9LAorCXsgVVNCX0RFVklDRShJWFhB VF9VU0JfVkVORE9SX0lELCBVU0IyQ0FOX0VNQkVEREVEX1BST0RVQ1RfSUQpLAorCSAgLmRyaXZl cl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ1c2IyY2FuX2NsMSwgfSwKKwl7IFVTQl9ERVZJQ0Uo SVhYQVRfVVNCX1ZFTkRPUl9JRCwgVVNCMkNBTl9QUk9GRVNTSU9OQUxfUFJPRFVDVF9JRCksCisJ ICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnVzYjJjYW5fY2wxLCB9LAorCXsgVVNC X0RFVklDRShJWFhBVF9VU0JfVkVORE9SX0lELCBVU0IyQ0FOX0FVVE9NT1RJVkVfUFJPRFVDVF9J RCksCisJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnVzYjJjYW5fY2wxLCB9LAor CXsgVVNCX0RFVklDRShJWFhBVF9VU0JfVkVORE9SX0lELCBVU0IyQ0FOX0ZEX0NPTVBBQ1RfUFJP RFVDVF9JRCksCisJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnVzYjJjYW5fY2wy LCB9LAorCXsgVVNCX0RFVklDRShJWFhBVF9VU0JfVkVORE9SX0lELCBVU0IyQ0FOX0ZEX1BST0ZF U1NJT05BTF9QUk9EVUNUX0lEKSwKKwkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkm dXNiMmNhbl9jbDIsIH0sCisJeyBVU0JfREVWSUNFKElYWEFUX1VTQl9WRU5ET1JfSUQsIFVTQjJD QU5fRkRfQVVUT01PVElWRV9QUk9EVUNUX0lEKSwKKwkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxf dWxvbmdfdCkmdXNiMmNhbl9jbDIsIH0sCisJeyBVU0JfREVWSUNFKElYWEFUX1VTQl9WRU5ET1Jf SUQsIFVTQjJDQU5fRkRfUENJRV9NSU5JX1BST0RVQ1RfSUQpLAorCSAgLmRyaXZlcl9pbmZvID0g KGtlcm5lbF91bG9uZ190KSZ1c2IyY2FuX2NsMiwgfSwKKwl7IFVTQl9ERVZJQ0UoSVhYQVRfVVNC X1ZFTkRPUl9JRCwgVVNCMkNBUl9QUk9EVUNUX0lEKSwKKwkgIC5kcml2ZXJfaW5mbyA9IChrZXJu ZWxfdWxvbmdfdCkmdXNiMmNhbl9jbDIsIH0sCisJeyBVU0JfREVWSUNFKElYWEFUX1VTQl9WRU5E T1JfSUQsIENBTl9JRE0xMDFfUFJPRFVDVF9JRCksCisJICAuZHJpdmVyX2luZm8gPSAoa2VybmVs X3Vsb25nX3QpJmNhbl9pZG0sIH0sCisJeyBVU0JfREVWSUNFKElYWEFUX1VTQl9WRU5ET1JfSUQs IENBTl9JRE0yMDBfUFJPRFVDVF9JRCksCisJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25n X3QpJmNhbl9pZG0sIH0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RV TEVfREVWSUNFX1RBQkxFKHVzYiwgaXh4YXRfdXNiX3RhYmxlKTsKKwordm9pZCBpeHhhdF91c2Jf c2V0dXBfY21kKHN0cnVjdCBpeHhhdF91c2JfZGFsX3JlcSAqcmVxLAorCQkJIHN0cnVjdCBpeHhh dF91c2JfZGFsX3JlcyAqcmVzKQoreworCXJlcS0+c2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZigq cmVxKSk7CisJcmVxLT5wb3J0ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKKwlyZXEtPnNvY2tldCA9 IGNwdV90b19sZTE2KDB4ZmZmZik7CisJcmVxLT5jb2RlID0gY3B1X3RvX2xlMzIoMCk7CisKKwly ZXMtPnJlc19zaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpyZXMpKTsKKwlyZXMtPnJldF9zaXpl ID0gY3B1X3RvX2xlMzIoMCk7CisJcmVzLT5jb2RlID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZik7 Cit9CisKK2ludCBpeHhhdF91c2Jfc2VuZF9jbWQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgY29u c3QgdTE2IHBvcnQsIHZvaWQgKnJlcSwKKwkJICAgICAgIGNvbnN0IHUxNiByZXFfc2l6ZSwgdm9p ZCAqcmVzLCBjb25zdCB1MTYgcmVzX3NpemUpCit7CisJY29uc3QgaW50IHRvID0gbXNlY3NfdG9f amlmZmllcyhJWFhBVF9VU0JfTVNHX1RJTUVPVVQpOworCWNvbnN0IHU4IHJxID0gMHhmZjsKKwlj b25zdCB1OCBydGkgPSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOOworCWNvbnN0IHU4IHJ0 byA9IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUOworCWludCBpOworCWludCBwb3MgPSAw OworCWludCByY3AgPSB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKTsKKwlpbnQgc2NwID0gdXNiX3Nu ZGN0cmxwaXBlKGRldiwgMCk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGl4eGF0X3VzYl9kYWxf cmVzICpkYWxfcmVzID0gcmVzOworCisJZm9yIChpID0gMDsgaSA8IElYWEFUX1VTQl9NQVhfQ09N X1JFUTsgKytpKSB7CisJCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHNjcCwgcnEsIHJ0bywg cG9ydCwgMCwgcmVxLCByZXFfc2l6ZSwKKwkJCQkgICAgICB0byk7CisJCWlmIChyZXQgPCAwKQor CQkJbXNsZWVwKElYWEFUX1VTQl9NU0dfQ1lDTEUpOworCQllbHNlCisJCQlicmVhazsKKwl9CisK KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRYIGNvbW1hbmQgZmFpbHVy ZTogJXBlXG4iLCBFUlJfUFRSKHJldCkpOworCQlnb3RvIGZhaWw7CisJfQorCisJZm9yIChpID0g MDsgaSA8IElYWEFUX1VTQl9NQVhfQ09NX1JFUTsgKytpKSB7CisJCWNvbnN0IGludCBycyA9IHJl c19zaXplIC0gcG9zOworCQl2b2lkICpyYiA9IHJlcyArIHBvczsKKworCQlyZXQgPSB1c2JfY29u dHJvbF9tc2coZGV2LCByY3AsIHJxLCBydGksIHBvcnQsIDAsIHJiLCBycywgdG8pOworCQlpZiAo cmV0IDwgMCkgeworCQkJbXNsZWVwKElYWEFUX1VTQl9NU0dfQ1lDTEUpOworCQkJY29udGludWU7 CisJCX0KKworCQlwb3MgKz0gcmV0OworCQlpZiAocG9zIDwgcmVzX3NpemUpCisJCQltc2xlZXAo SVhYQVRfVVNCX01TR19DWUNMRSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmIChwb3Mg IT0gcmVzX3NpemUpCisJCXJldCA9IC1FQkFETVNHOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2 X2VycigmZGV2LT5kZXYsICJSWCBjb21tYW5kIGZhaWx1cmU6ICVwZVxuIiwgRVJSX1BUUihyZXQp KTsKKwkJZ290byBmYWlsOworCX0KKworCXJldCA9IGxlMzJfdG9fY3B1KGRhbF9yZXMtPmNvZGUp OworCitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl4eGF0X3VzYl91cGRh dGVfdHNfbm93KHN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYsIHUzMiB0c19ub3cpCit7CisJ dTMyICp0c19kZXYgPSAmZGV2LT50aW1lX3JlZi50c19kZXZfMDsKKwlrdGltZV90ICprdF9ob3N0 ID0gJmRldi0+dGltZV9yZWYua3RfaG9zdF8wOworCXU2NCB0aW1lYmFzZSA9ICh1NjQpVTMyX01B WCAtICh1NjQpKCp0c19kZXYpICsgKHU2NCl0c19ub3c7CisKKwkqa3RfaG9zdCA9IGt0aW1lX2Fk ZF91cygqa3RfaG9zdCwgdGltZWJhc2UpOworCSp0c19kZXYgPSB0c19ub3c7Cit9CisKK3N0YXRp YyB2b2lkIGl4eGF0X3VzYl9nZXRfdHNfdHYoc3RydWN0IGl4eGF0X3VzYl9kZXZpY2UgKmRldiwg dTMyIHRzLAorCQkJCWt0aW1lX3QgKmtfdGltZSkKK3sKKwlrdGltZV90IHRtcF90aW1lID0gZGV2 LT50aW1lX3JlZi5rdF9ob3N0XzA7CisKKwlpZiAodHMgPCBkZXYtPnRpbWVfcmVmLnRzX2Rldl9s YXN0KQorCQlpeHhhdF91c2JfdXBkYXRlX3RzX25vdyhkZXYsIHRzKTsKKworCWRldi0+dGltZV9y ZWYudHNfZGV2X2xhc3QgPSB0czsKKwl0bXBfdGltZSA9IGt0aW1lX2FkZF91cyh0bXBfdGltZSwg dHMgLSBkZXYtPnRpbWVfcmVmLnRzX2Rldl8wKTsKKworCWlmIChrX3RpbWUpCisJCSprX3RpbWUg PSB0bXBfdGltZTsKK30KKworc3RhdGljIHZvaWQgaXh4YXRfdXNiX3NldF90c19ub3coc3RydWN0 IGl4eGF0X3VzYl9kZXZpY2UgKmRldiwgdTMyIHRzX25vdykKK3sKKwlkZXYtPnRpbWVfcmVmLnRz X2Rldl8wID0gdHNfbm93OworCWRldi0+dGltZV9yZWYua3RfaG9zdF8wID0ga3RpbWVfZ2V0X3Jl YWwoKTsKKwlkZXYtPnRpbWVfcmVmLnRzX2Rldl9sYXN0ID0gdHNfbm93OworfQorCitzdGF0aWMg aW50IGl4eGF0X3VzYl9nZXRfZGV2X2NhcHMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQkg IHN0cnVjdCBpeHhhdF9kZXZfY2FwcyAqZGV2X2NhcHMpCit7CisJaW50IGk7CisJaW50IGVycjsK KwlzdHJ1Y3QgaXh4YXRfdXNiX2NhcHNfY21kICpjbWQ7CisJY29uc3QgdTMyIGNtZF9zaXplID0g c2l6ZW9mKCpjbWQpOworCWNvbnN0IHUzMiByZXFfc2l6ZSA9IHNpemVvZihjbWQtPnJlcSk7CisJ Y29uc3QgdTMyIHJjdl9zaXplID0gY21kX3NpemUgLSByZXFfc2l6ZTsKKwljb25zdCB1MzIgc25k X3NpemUgPSByZXFfc2l6ZSArIHNpemVvZihjbWQtPnJlcyk7CisJdTE2IG51bV9jdHJsOworCisJ Y21kID0ga21hbGxvYyhjbWRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVy biAtRU5PTUVNOworCisJaXh4YXRfdXNiX3NldHVwX2NtZCgmY21kLT5yZXEsICZjbWQtPnJlcyk7 CisJY21kLT5yZXEuY29kZSA9IGNwdV90b19sZTMyKElYWEFUX1VTQl9CUkRfQ01EX0dFVF9ERVZD QVBTKTsKKwljbWQtPnJlcy5yZXNfc2l6ZSA9IGNwdV90b19sZTMyKHJjdl9zaXplKTsKKworCWVy ciA9IGl4eGF0X3VzYl9zZW5kX2NtZChkZXYsIGxlMTZfdG9fY3B1KGNtZC0+cmVxLnBvcnQpLCBj bWQsIHNuZF9zaXplLAorCQkJCSAmY21kLT5yZXMsIHJjdl9zaXplKTsKKwlpZiAoZXJyKQorCQln b3RvIGZhaWw7CisKKwlkZXZfY2Fwcy0+YnVzX2N0cmxfY291bnQgPSBjbWQtPmNhcHMuYnVzX2N0 cmxfY291bnQ7CisJbnVtX2N0cmwgPSBsZTE2X3RvX2NwdShkZXZfY2Fwcy0+YnVzX2N0cmxfY291 bnQpOworCWlmIChudW1fY3RybCA+IEFSUkFZX1NJWkUoZGV2X2NhcHMtPmJ1c19jdHJsX3R5cGVz KSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCisJZm9yIChpID0gMDsg aSA8IG51bV9jdHJsOyBpKyspCisJCWRldl9jYXBzLT5idXNfY3RybF90eXBlc1tpXSA9IGNtZC0+ Y2Fwcy5idXNfY3RybF90eXBlc1tpXTsKKworZmFpbDoKKwlrZnJlZShjbWQpOworCXJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBpbnQgaXh4YXRfdXNiX2dldF9kZXZfaW5mbyhzdHJ1Y3QgdXNiX2Rl dmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl4eGF0X2Rldl9pbmZvICpkZXZfaW5mbykKK3sKKwlp bnQgZXJyOworCXN0cnVjdCBpeHhhdF91c2JfaW5mb19jbWQgKmNtZDsKKwljb25zdCB1MzIgY21k X3NpemUgPSBzaXplb2YoKmNtZCk7CisJY29uc3QgdTMyIHJlcV9zaXplID0gc2l6ZW9mKGNtZC0+ cmVxKTsKKwljb25zdCB1MzIgcmN2X3NpemUgPSBjbWRfc2l6ZSAtIHJlcV9zaXplOworCWNvbnN0 IHUzMiBzbmRfc2l6ZSA9IHJlcV9zaXplICsgc2l6ZW9mKGNtZC0+cmVzKTsKKworCWNtZCA9IGtt YWxsb2MoY21kX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWl4eGF0X3VzYl9zZXR1cF9jbWQoJmNtZC0+cmVxLCAmY21kLT5yZXMpOworCWNtZC0+ cmVxLmNvZGUgPSBjcHVfdG9fbGUzMihJWFhBVF9VU0JfQlJEX0NNRF9HRVRfREVWSU5GTyk7CisJ Y21kLT5yZXMucmVzX3NpemUgPSBjcHVfdG9fbGUzMihyY3Zfc2l6ZSk7CisKKwllcnIgPSBpeHhh dF91c2Jfc2VuZF9jbWQoZGV2LCBsZTE2X3RvX2NwdShjbWQtPnJlcS5wb3J0KSwgY21kLCBzbmRf c2l6ZSwKKwkJCQkgJmNtZC0+cmVzLCByY3Zfc2l6ZSk7CisJaWYgKGVycikKKwkJZ290byBmYWls OworCisJaWYgKGRldl9pbmZvKSB7CisJCW1lbWNweShkZXZfaW5mby0+ZGV2aWNlX2lkLCAmY21k LT5pbmZvLmRldmljZV9pZCwKKwkJICAgICAgIHNpemVvZihjbWQtPmluZm8uZGV2aWNlX2lkKSk7 CisJCW1lbWNweShkZXZfaW5mby0+ZGV2aWNlX25hbWUsICZjbWQtPmluZm8uZGV2aWNlX25hbWUs CisJCSAgICAgICBzaXplb2YoY21kLT5pbmZvLmRldmljZV9uYW1lKSk7CisJCWRldl9pbmZvLT5k ZXZpY2VfZnBnYV92ZXJzaW9uID0gY21kLT5pbmZvLmRldmljZV9mcGdhX3ZlcnNpb247CisJCWRl dl9pbmZvLT5kZXZpY2VfdmVyc2lvbiA9IGNtZC0+aW5mby5kZXZpY2VfdmVyc2lvbjsKKwl9CisK K2ZhaWw6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGl4eGF0 X3VzYl9zdGFydF9jdHJsKHN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYsIHUzMiAqdGltZV9y ZWYpCit7CisJY29uc3QgdTE2IHBvcnQgPSBkZXYtPmN0cmxfaW5kZXg7CisJaW50IGVycjsKKwlz dHJ1Y3QgaXh4YXRfdXNiX3N0YXJ0X2NtZCAqY21kOworCWNvbnN0IHUzMiBjbWRfc2l6ZSA9IHNp emVvZigqY21kKTsKKwljb25zdCB1MzIgcmVxX3NpemUgPSBzaXplb2YoY21kLT5yZXEpOworCWNv bnN0IHUzMiByY3Zfc2l6ZSA9IGNtZF9zaXplIC0gcmVxX3NpemU7CisJY29uc3QgdTMyIHNuZF9z aXplID0gcmVxX3NpemUgKyBzaXplb2YoY21kLT5yZXMpOworCisJY21kID0ga21hbGxvYyhjbWRf c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJaXh4 YXRfdXNiX3NldHVwX2NtZCgmY21kLT5yZXEsICZjbWQtPnJlcyk7CisJY21kLT5yZXEuY29kZSA9 IGNwdV90b19sZTMyKElYWEFUX1VTQl9DQU5fQ01EX1NUQVJUKTsKKwljbWQtPnJlcS5wb3J0ID0g Y3B1X3RvX2xlMTYocG9ydCk7CisJY21kLT5yZXMucmVzX3NpemUgPSBjcHVfdG9fbGUzMihyY3Zf c2l6ZSk7CisJY21kLT50aW1lID0gMDsKKworCWVyciA9IGl4eGF0X3VzYl9zZW5kX2NtZChkZXYt PnVkZXYsIHBvcnQsIGNtZCwgc25kX3NpemUsICZjbWQtPnJlcywKKwkJCQkgcmN2X3NpemUpOwor CWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCWlmICh0aW1lX3JlZikKKwkJKnRpbWVfcmVmID0g bGUzMl90b19jcHUoY21kLT50aW1lKTsKKworZmFpbDoKKwlrZnJlZShjbWQpOworCXJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBpbnQgaXh4YXRfdXNiX3N0b3BfY3RybChzdHJ1Y3QgaXh4YXRfdXNi X2RldmljZSAqZGV2KQoreworCWNvbnN0IHUxNiBwb3J0ID0gZGV2LT5jdHJsX2luZGV4OworCWlu dCBlcnI7CisJc3RydWN0IGl4eGF0X3VzYl9zdG9wX2NtZCAqY21kOworCWNvbnN0IHUzMiByY3Zf c2l6ZSA9IHNpemVvZihjbWQtPnJlcyk7CisJY29uc3QgdTMyIHNuZF9zaXplID0gc2l6ZW9mKCpj bWQpOworCisJY21kID0ga21hbGxvYyhzbmRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQp CisJCXJldHVybiAtRU5PTUVNOworCisJaXh4YXRfdXNiX3NldHVwX2NtZCgmY21kLT5yZXEsICZj bWQtPnJlcyk7CisJY21kLT5yZXEuc2l6ZSA9IGNwdV90b19sZTMyKHNuZF9zaXplIC0gcmN2X3Np emUpOworCWNtZC0+cmVxLmNvZGUgPSBjcHVfdG9fbGUzMihJWFhBVF9VU0JfQ0FOX0NNRF9TVE9Q KTsKKwljbWQtPnJlcS5wb3J0ID0gY3B1X3RvX2xlMTYocG9ydCk7CisJY21kLT5hY3Rpb24gPSBj cHVfdG9fbGUzMihJWFhBVF9VU0JfU1RPUF9BQ1RJT05fQ0xFQVJBTEwpOworCisJZXJyID0gaXh4 YXRfdXNiX3NlbmRfY21kKGRldi0+dWRldiwgcG9ydCwgY21kLCBzbmRfc2l6ZSwgJmNtZC0+cmVz LAorCQkJCSByY3Zfc2l6ZSk7CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IGl4eGF0X3VzYl9wb3dlcl9jdHJsKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4IG1v ZGUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaXh4YXRfdXNiX3Bvd2VyX2NtZCAqY21kOworCWNv bnN0IHUzMiByY3Zfc2l6ZSA9IHNpemVvZihjbWQtPnJlcyk7CisJY29uc3QgdTMyIHNuZF9zaXpl ID0gc2l6ZW9mKCpjbWQpOworCisJY21kID0ga21hbGxvYyhzbmRfc2l6ZSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJaXh4YXRfdXNiX3NldHVwX2NtZCgm Y21kLT5yZXEsICZjbWQtPnJlcyk7CisJY21kLT5yZXEuc2l6ZSA9IGNwdV90b19sZTMyKHNuZF9z aXplIC0gcmN2X3NpemUpOworCWNtZC0+cmVxLmNvZGUgPSBjcHVfdG9fbGUzMihJWFhBVF9VU0Jf QlJEX0NNRF9QT1dFUik7CisJY21kLT5tb2RlID0gbW9kZTsKKworCWVyciA9IGl4eGF0X3VzYl9z ZW5kX2NtZChkZXYsIGxlMTZfdG9fY3B1KGNtZC0+cmVxLnBvcnQpLCBjbWQsIHNuZF9zaXplLAor CQkJCSAmY21kLT5yZXMsIHJjdl9zaXplKTsKKwlrZnJlZShjbWQpOworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBpbnQgaXh4YXRfdXNiX3Jlc2V0X2N0cmwoc3RydWN0IGl4eGF0X3VzYl9kZXZp Y2UgKmRldikKK3sKKwljb25zdCB1MTYgcG9ydCA9IGRldi0+Y3RybF9pbmRleDsKKwlpbnQgZXJy OworCXN0cnVjdCBpeHhhdF91c2JfZGFsX2NtZCAqY21kOworCWNvbnN0IHUzMiBzbmRfc2l6ZSA9 IHNpemVvZigqY21kKTsKKwljb25zdCB1MzIgcmN2X3NpemUgPSBzaXplb2YoY21kLT5yZXMpOwor CisJY21kID0ga21hbGxvYyhzbmRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJl dHVybiAtRU5PTUVNOworCisJaXh4YXRfdXNiX3NldHVwX2NtZCgmY21kLT5yZXEsICZjbWQtPnJl cyk7CisJY21kLT5yZXEuY29kZSA9IGNwdV90b19sZTMyKElYWEFUX1VTQl9DQU5fQ01EX1JFU0VU KTsKKwljbWQtPnJlcS5wb3J0ID0gY3B1X3RvX2xlMTYocG9ydCk7CisKKwllcnIgPSBpeHhhdF91 c2Jfc2VuZF9jbWQoZGV2LT51ZGV2LCBwb3J0LCBjbWQsIHNuZF9zaXplLCAmY21kLT5yZXMsCisJ CQkJIHJjdl9zaXplKTsKKwlrZnJlZShjbWQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2 b2lkIGl4eGF0X3VzYl9zdG9wX3F1ZXVlKHN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+bmV0ZGV2OworCXUzMiBpOworCisJ bmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRldi0+ cnhfc3VibWl0dGVkKTsKKwl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkZXYtPnR4X3N1Ym1pdHRl ZCk7CisJYXRvbWljX3NldCgmZGV2LT5hY3RpdmVfdHhfdXJicywgMCk7CisJZm9yIChpID0gMDsg aSA8IElYWEFUX1VTQl9NQVhfVFhfVVJCUzsgaSsrKSB7CisJCWlmIChkZXYtPnR4X2NvbnRleHRz W2ldLmVjaG9faW5kZXggIT0gSVhYQVRfVVNCX01BWF9UWF9VUkJTKSB7CisJCQljYW5fZnJlZV9l Y2hvX3NrYihuZXRkZXYsIGksIE5VTEwpOworCQkJZGV2LT50eF9jb250ZXh0c1tpXS5lY2hvX2lu ZGV4ID0gSVhYQVRfVVNCX01BWF9UWF9VUkJTOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGl4 eGF0X3VzYl9yZXN0YXJ0KHN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGVy cjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5uZXRkZXY7CisJdTMyIHQ7CisK KwlpeHhhdF91c2Jfc3RvcF9xdWV1ZShkZXYpOworCWVyciA9IGl4eGF0X3VzYl9zdG9wX2N0cmwo ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwllcnIgPSBpeHhhdF91c2Jfc3RhcnRf Y3RybChkZXYsICZ0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwlkZXYtPmNhbi5zdGF0 ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwor CitmYWlsOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXh4YXRfdXNiX3NldF9tb2Rl KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gY2FuX21vZGUgbW9kZSkKK3sKKwlzdHJ1 Y3QgaXh4YXRfdXNiX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICht b2RlICE9IENBTl9NT0RFX1NUQVJUKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4g aXh4YXRfdXNiX3Jlc3RhcnQoZGV2KTsKK30KKworc3RhdGljIGludCBpeHhhdF91c2JfZ2V0X2Jl cnJfY291bnRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0 cnVjdCBjYW5fYmVycl9jb3VudGVyICpiZWMpCit7CisJc3RydWN0IGl4eGF0X3VzYl9kZXZpY2Ug KmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkqYmVjID0gZGV2LT5iZWM7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaXh4YXRfdXNiX2hhbmRsZV9jYW5tc2coc3RydWN0IGl4eGF0 X3VzYl9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXh4YXRfY2FuX21zZyAqcngpCit7CisJ Y29uc3QgdTMyIGl4eF9mbGFncyA9IGxlMzJfdG9fY3B1KHJ4LT5iYXNlLmZsYWdzKTsKKwljb25z dCB1OCBkbGMgPSBGSUVMRF9HRVQoSVhYQVRfVVNCX01TR19GTEFHU19ETEMsIGl4eF9mbGFncyk7 CisJc3RydWN0IGNhbmZkX2ZyYW1lICpjZjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0g ZGV2LT5uZXRkZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1OCBmbGFncyA9IDA7CisJdTgg bGVuOworCXU4IG1pbl9zaXplOworCisJaWYgKGl4eF9mbGFncyAmIElYWEFUX1VTQl9GRE1TR19G TEFHU19FREwpIHsKKwkJaWYgKGl4eF9mbGFncyAmIElYWEFUX1VTQl9GRE1TR19GTEFHU19GRFIp CisJCQlmbGFncyB8PSBDQU5GRF9CUlM7CisKKwkJaWYgKGl4eF9mbGFncyAmIElYWEFUX1VTQl9G RE1TR19GTEFHU19FU0kpCisJCQlmbGFncyB8PSBDQU5GRF9FU0k7CisKKwkJbGVuID0gY2FuX2Zk X2RsYzJsZW4oZGxjKTsKKwl9IGVsc2UgeworCQlsZW4gPSBjYW5fY2NfZGxjMmxlbihkbGMpOwor CX0KKworCW1pbl9zaXplID0gc2l6ZW9mKHJ4LT5iYXNlKSArIGxlbjsKKworCWlmIChkZXYtPmFk YXB0ZXIgPT0gJnVzYjJjYW5fY2wxKQorCQltaW5fc2l6ZSArPSBzaXplb2YocngtPmNsMSkgLSBz aXplb2YocngtPmNsMS5kYXRhKTsKKwllbHNlCisJCW1pbl9zaXplICs9IHNpemVvZihyeC0+Y2wy KSAtIHNpemVvZihyeC0+Y2wyLmRhdGEpOworCisJaWYgKHJ4LT5iYXNlLnNpemUgPCAobWluX3Np emUgLSAxKSkgeworCQluZXRkZXZfZXJyKG5ldGRldiwgIkludmFsaWQgY2FuIGRhdGEgbWVzc2Fn ZSBzaXplXG4iKTsKKwkJcmV0dXJuIC1FQkFETVNHOworCX0KKworCWlmIChpeHhfZmxhZ3MgJiBJ WFhBVF9VU0JfTVNHX0ZMQUdTX09WUikgeworCQluZXRkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3Jz Kys7CisJCW5ldGRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCW5ldGRldl9lcnIobmV0ZGV2LCAi TWVzc2FnZSBvdmVyZmxvd1xuIik7CisJfQorCisJaWYgKGl4eF9mbGFncyAmIElYWEFUX1VTQl9G RE1TR19GTEFHU19FREwpCisJCXNrYiA9IGFsbG9jX2NhbmZkX3NrYihuZXRkZXYsICZjZik7CisJ ZWxzZQorCQlza2IgPSBhbGxvY19jYW5fc2tiKG5ldGRldiwgKHN0cnVjdCBjYW5fZnJhbWUgKiop JmNmKTsKKworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNmLT5jYW5faWQgPSBs ZTMyX3RvX2NwdShyeC0+YmFzZS5tc2dfaWQpOworCWNmLT5sZW4gPSBsZW47CisJY2YtPmZsYWdz IHw9IGZsYWdzOworCisJaWYgKGl4eF9mbGFncyAmIElYWEFUX1VTQl9NU0dfRkxBR1NfRVhUKQor CQljZi0+Y2FuX2lkIHw9IENBTl9FRkZfRkxBRzsKKworCWlmIChpeHhfZmxhZ3MgJiBJWFhBVF9V U0JfTVNHX0ZMQUdTX1JUUikgeworCQljZi0+Y2FuX2lkIHw9IENBTl9SVFJfRkxBRzsKKwl9IGVs c2UgeworCQlpZiAoZGV2LT5hZGFwdGVyID09ICZ1c2IyY2FuX2NsMSkKKwkJCW1lbWNweShjZi0+ ZGF0YSwgcngtPmNsMS5kYXRhLCBsZW4pOworCQllbHNlCisJCQltZW1jcHkoY2YtPmRhdGEsIHJ4 LT5jbDIuZGF0YSwgbGVuKTsKKworCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNmLT5sZW47 CisJfQorCisJaXh4YXRfdXNiX2dldF90c190dihkZXYsIGxlMzJfdG9fY3B1KHJ4LT5iYXNlLnRp bWUpLCAmc2tiLT50c3RhbXApOworCisJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisKKwlu ZXRpZl9yeChza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXh4YXRfdXNiX2hh bmRsZV9zdGF0dXMoc3RydWN0IGl4eGF0X3VzYl9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3Qg aXh4YXRfY2FuX21zZyAqcngpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+ bmV0ZGV2OworCXN0cnVjdCBjYW5fZnJhbWUgKmNhbl9mcmFtZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOworCWVudW0gY2FuX3N0YXRlIG5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7 CisJdTMyIHJhd19zdGF0dXM7CisJdTggbWluX3NpemUgPSBzaXplb2YocngtPmJhc2UpICsgc2l6 ZW9mKHJhd19zdGF0dXMpOworCisJaWYgKGRldi0+YWRhcHRlciA9PSAmdXNiMmNhbl9jbDEpCisJ CW1pbl9zaXplICs9IHNpemVvZihyeC0+Y2wxKSAtIHNpemVvZihyeC0+Y2wxLmRhdGEpOworCWVs c2UKKwkJbWluX3NpemUgKz0gc2l6ZW9mKHJ4LT5jbDIpIC0gc2l6ZW9mKHJ4LT5jbDIuZGF0YSk7 CisKKwlpZiAocngtPmJhc2Uuc2l6ZSA8IChtaW5fc2l6ZSAtIDEpKSB7CisJCW5ldGRldl9lcnIo bmV0ZGV2LCAiSW52YWxpZCBjYW4gc3RhdHVzIG1lc3NhZ2Ugc2l6ZVxuIik7CisJCXJldHVybiAt RUJBRE1TRzsKKwl9CisKKwlpZiAoZGV2LT5hZGFwdGVyID09ICZ1c2IyY2FuX2NsMSkKKwkJcmF3 X3N0YXR1cyA9IGxlMzJfdG9fY3B1KHJ4LT5jbDEuc3RhdHVzKTsKKwllbHNlCisJCXJhd19zdGF0 dXMgPSBsZTMyX3RvX2NwdShyeC0+Y2wyLnN0YXR1cyk7CisKKwlpZiAocmF3X3N0YXR1cyAhPSBJ WFhBVF9VU0JfQ0FOX1NUQVRVU19PSykgeworCQlpZiAocmF3X3N0YXR1cyAmIElYWEFUX1VTQl9D QU5fU1RBVFVTX0JVU09GRikgeworCQkJZGV2LT5jYW4uY2FuX3N0YXRzLmJ1c19vZmYrKzsKKwkJ CW5ld19zdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOworCQkJY2FuX2J1c19vZmYobmV0ZGV2KTsK KwkJfSBlbHNlIHsKKwkJCWlmIChyYXdfc3RhdHVzICYgSVhYQVRfVVNCX0NBTl9TVEFUVVNfRVJS TElNKSB7CisJCQkJZGV2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3dhcm5pbmcrKzsKKwkJCQluZXdf c3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfV0FSTklORzsKKwkJCX0KKworCQkJaWYgKHJhd19zdGF0 dXMgJiBJWFhBVF9VU0JfQ0FOX1NUQVRVU19FUlJfUEFTKSB7CisJCQkJZGV2LT5jYW4uY2FuX3N0 YXRzLmVycm9yX3Bhc3NpdmUrKzsKKwkJCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfUEFT U0lWRTsKKwkJCX0KKworCQkJaWYgKHJhd19zdGF0dXMgJiBJWFhBVF9VU0JfQ0FOX1NUQVRVU19P VkVSUlVOKQorCQkJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9NQVg7CisJCX0KKwl9CisKKwlpZiAo bmV3X3N0YXRlID09IENBTl9TVEFURV9FUlJPUl9BQ1RJVkUpIHsKKwkJZGV2LT5iZWMudHhlcnIg PSAwOworCQlkZXYtPmJlYy5yeGVyciA9IDA7CisJfQorCisJaWYgKG5ld19zdGF0ZSAhPSBDQU5f U1RBVEVfTUFYKQorCQlkZXYtPmNhbi5zdGF0ZSA9IG5ld19zdGF0ZTsKKworCXNrYiA9IGFsbG9j X2Nhbl9lcnJfc2tiKG5ldGRldiwgJmNhbl9mcmFtZSk7CisJaWYgKCFza2IpCisJCXJldHVybiAt RU5PTUVNOworCisJc3dpdGNoIChuZXdfc3RhdGUpIHsKKwljYXNlIENBTl9TVEFURV9FUlJPUl9B Q1RJVkU6CisJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJY2FuX2ZyYW1l LT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2UgQ0FOX1NU QVRFX0VSUk9SX1dBUk5JTkc6CisJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsK KwkJY2FuX2ZyYW1lLT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9UWF9XQVJOSU5HOworCQljYW5f ZnJhbWUtPmRhdGFbMV0gfD0gQ0FOX0VSUl9DUlRMX1JYX1dBUk5JTkc7CisJCWJyZWFrOworCWNh c2UgQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkU6CisJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9IENBTl9F UlJfQ1JUTDsKKwkJY2FuX2ZyYW1lLT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9UWF9QQVNTSVZF OworCQljYW5fZnJhbWUtPmRhdGFbMV0gfD0gQ0FOX0VSUl9DUlRMX1JYX1BBU1NJVkU7CisJCWJy ZWFrOworCWNhc2UgQ0FOX1NUQVRFX0JVU19PRkY6CisJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9IENB Tl9FUlJfQlVTT0ZGOworCQlicmVhazsKKwljYXNlIENBTl9TVEFURV9NQVg6CisJCWNhbl9mcmFt ZS0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJY2FuX2ZyYW1lLT5kYXRhWzFdIHw9IENBTl9F UlJfQ1JUTF9SWF9PVkVSRkxPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmV0ZGV2X2Vycihu ZXRkZXYsICJVbmhhbmRsZWQgY2FuIHN0YXR1cyAlZFxuIiwKKwkJCSAgIG5ld19zdGF0ZSk7CisJ CWJyZWFrOworCX0KKworCW5ldGlmX3J4KHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBpeHhhdF91c2JfaGFuZGxlX2Vycm9yKHN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYs CisJCQkJICBzdHJ1Y3QgaXh4YXRfY2FuX21zZyAqcngpCit7CisJc3RydWN0IG5ldF9kZXZpY2Ug Km5ldGRldiA9IGRldi0+bmV0ZGV2OworCXN0cnVjdCBjYW5fZnJhbWUgKmNhbl9mcmFtZTsKKwlz dHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IHJhd19lcnJvcjsKKwl1OCBtaW5fc2l6ZSA9IHNpemVv ZihyeC0+YmFzZSkgKyBJWFhBVF9VU0JfQ0FOX0VSUk9SX0xFTjsKKworCWlmIChkZXYtPmFkYXB0 ZXIgPT0gJnVzYjJjYW5fY2wxKQorCQltaW5fc2l6ZSArPSBzaXplb2YocngtPmNsMSkgLSBzaXpl b2YocngtPmNsMS5kYXRhKTsKKwllbHNlCisJCW1pbl9zaXplICs9IHNpemVvZihyeC0+Y2wyKSAt IHNpemVvZihyeC0+Y2wyLmRhdGEpOworCisJaWYgKHJ4LT5iYXNlLnNpemUgPCAobWluX3NpemUg LSAxKSkgeworCQluZXRkZXZfZXJyKG5ldGRldiwgIkludmFsaWQgY2FuIGVycm9yIG1lc3NhZ2Ug c2l6ZVxuIik7CisJCXJldHVybiAtRUJBRE1TRzsKKwl9CisKKwlpZiAoZGV2LT5jYW4uc3RhdGUg PT0gQ0FOX1NUQVRFX0JVU19PRkYpCisJCXJldHVybiAwOworCisJaWYgKGRldi0+YWRhcHRlciA9 PSAmdXNiMmNhbl9jbDEpIHsKKwkJcmF3X2Vycm9yID0gcngtPmNsMS5kYXRhW0lYWEFUX1VTQl9D QU5fRVJST1JfQ09ERV07CisJCWRldi0+YmVjLnJ4ZXJyID0gcngtPmNsMS5kYXRhW0lYWEFUX1VT Ql9DQU5fRVJST1JfQ09VTlRFUl9SWF07CisJCWRldi0+YmVjLnR4ZXJyID0gcngtPmNsMS5kYXRh W0lYWEFUX1VTQl9DQU5fRVJST1JfQ09VTlRFUl9UWF07CisJfSBlbHNlIHsKKwkJcmF3X2Vycm9y ID0gcngtPmNsMi5kYXRhW0lYWEFUX1VTQl9DQU5fRVJST1JfQ09ERV07CisJCWRldi0+YmVjLnJ4 ZXJyID0gcngtPmNsMi5kYXRhW0lYWEFUX1VTQl9DQU5fRVJST1JfQ09VTlRFUl9SWF07CisJCWRl di0+YmVjLnR4ZXJyID0gcngtPmNsMi5kYXRhW0lYWEFUX1VTQl9DQU5fRVJST1JfQ09VTlRFUl9U WF07CisJfQorCisJaWYgKHJhd19lcnJvciA9PSBJWFhBVF9VU0JfQ0FOX0VSUk9SX0FDSykKKwkJ bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwllbHNlCisJCW5ldGRldi0+c3RhdHMucnhfZXJy b3JzKys7CisKKwlza2IgPSBhbGxvY19jYW5fZXJyX3NrYihuZXRkZXYsICZjYW5fZnJhbWUpOwor CWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN3aXRjaCAocmF3X2Vycm9yKSB7CisJ Y2FzZSBJWFhBVF9VU0JfQ0FOX0VSUk9SX0FDSzoKKwkJY2FuX2ZyYW1lLT5jYW5faWQgfD0gQ0FO X0VSUl9BQ0s7CisJCWJyZWFrOworCWNhc2UgSVhYQVRfVVNCX0NBTl9FUlJPUl9CSVQ6CisJCWNh bl9mcmFtZS0+Y2FuX2lkIHw9IENBTl9FUlJfUFJPVDsKKwkJY2FuX2ZyYW1lLT5kYXRhWzJdIHw9 IENBTl9FUlJfUFJPVF9CSVQ7CisJCWJyZWFrOworCWNhc2UgSVhYQVRfVVNCX0NBTl9FUlJPUl9D UkM6CisJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9IENBTl9FUlJfUFJPVDsKKwkJY2FuX2ZyYW1lLT5k YXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUTsKKwkJYnJlYWs7CisJY2FzZSBJWFhB VF9VU0JfQ0FOX0VSUk9SX0ZPUk06CisJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9IENBTl9FUlJfUFJP VDsKKwkJY2FuX2ZyYW1lLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9GT1JNOworCQlicmVhazsK KwljYXNlIElYWEFUX1VTQl9DQU5fRVJST1JfU1RVRkY6CisJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9 IENBTl9FUlJfUFJPVDsKKwkJY2FuX2ZyYW1lLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9TVFVG RjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2FuX2ZyYW1lLT5jYW5faWQgfD0gQ0FOX0VSUl9Q Uk9UOworCQljYW5fZnJhbWUtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1VOU1BFQzsKKwkJYnJl YWs7CisJfQorCisJbmV0aWZfcngoc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBpeHhhdF91c2JfZGVjb2RlX2J1ZihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGl4eGF0 X3VzYl9kZXZpY2UgKmRldiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0 ZGV2ID0gZGV2LT5uZXRkZXY7CisJc3RydWN0IGl4eGF0X2Nhbl9tc2cgKmNhbl9tc2c7CisJaW50 IGVyciA9IDA7CisJdTMyIHBvcyA9IDA7CisJdTggKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZl cjsKKworCXdoaWxlIChwb3MgPCB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJdTMyIHRpbWU7CisJ CXU4IHNpemU7CisJCXU4IHR5cGU7CisKKwkJY2FuX21zZyA9IChzdHJ1Y3QgaXh4YXRfY2FuX21z ZyAqKSZkYXRhW3Bvc107CisJCWlmICghY2FuX21zZyB8fCAhY2FuX21zZy0+YmFzZS5zaXplKSB7 CisJCQllcnIgPSAtRU5PVFNVUFA7CisJCQluZXRkZXZfZXJyKG5ldGRldiwgIlVuc3VwcG9ydGVk IHVzYiBtc2c6ICVwZVxuIiwKKwkJCQkgICBFUlJfUFRSKGVycikpOworCQkJYnJlYWs7CisJCX0K KworCQlzaXplID0gY2FuX21zZy0+YmFzZS5zaXplICsgMTsKKwkJaWYgKHNpemUgPCBzaXplb2Yo Y2FuX21zZy0+YmFzZSkgfHwKKwkJICAgIChwb3MgKyBzaXplKSA+IHVyYi0+YWN0dWFsX2xlbmd0 aCkgeworCQkJZXJyID0gLUVCQURNU0c7CisJCQluZXRkZXZfZXJyKG5ldGRldiwKKwkJCQkgICAi SW52YWxpZCB1c2IgbWVzc2FnZSBzaXplOiAlcGVcbiIsCisJCQkJICAgRVJSX1BUUihlcnIpKTsK KwkJCWJyZWFrOworCQl9CisKKwkJdHlwZSA9IGxlMzJfdG9fY3B1KGNhbl9tc2ctPmJhc2UuZmxh Z3MpOworCQl0eXBlICY9IElYWEFUX1VTQl9NU0dfRkxBR1NfVFlQRTsKKwkJdGltZSA9IGxlMzJf dG9fY3B1KGNhbl9tc2ctPmJhc2UudGltZSk7CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2Ug SVhYQVRfVVNCX0NBTl9EQVRBOgorCQkJZXJyID0gaXh4YXRfdXNiX2hhbmRsZV9jYW5tc2coZGV2 LCBjYW5fbXNnKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBmYWlsOworCQkJYnJlYWs7CisJCWNh c2UgSVhYQVRfVVNCX0NBTl9TVEFUVVM6CisJCQllcnIgPSBpeHhhdF91c2JfaGFuZGxlX3N0YXR1 cyhkZXYsIGNhbl9tc2cpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVhazsK KwkJY2FzZSBJWFhBVF9VU0JfQ0FOX0VSUk9SOgorCQkJZXJyID0gaXh4YXRfdXNiX2hhbmRsZV9l cnJvcihkZXYsIGNhbl9tc2cpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVh azsKKwkJY2FzZSBJWFhBVF9VU0JfQ0FOX1RJTUVPVlI6CisJCQlpeHhhdF91c2JfZ2V0X3RzX3R2 KGRldiwgdGltZSwgTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBJWFhBVF9VU0JfQ0FOX0lORk86 CisJCWNhc2UgSVhYQVRfVVNCX0NBTl9XQUtFVVA6CisJCWNhc2UgSVhYQVRfVVNCX0NBTl9USU1F UlNUOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluZXRkZXZfZXJyKG5ldGRldiwKKwkJCQkg ICAiVW5oYW5kbGVkIHJlYyB0eXBlIDB4JTAyeCA6IGlnbm9yZWRcbiIsCisJCQkJICAgdHlwZSk7 CisJCQlicmVhazsKKwkJfQorCisJCXBvcyArPSBzaXplOworCX0KKworZmFpbDoKKwlpZiAoZXJy KQorCQluZXRkZXZfZXJyKG5ldGRldiwgIkJ1ZmZlciBkZWNvZGluZyBmYWlsZWQ6ICVwZVxuIiwg RVJSX1BUUihlcnIpKTsKK30KKworc3RhdGljIGludCBpeHhhdF91c2JfZW5jb2RlX21zZyhzdHJ1 Y3QgaXh4YXRfdXNiX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBza19idWZmICpza2IsIHU4ICpv YnVmKQoreworCWludCBzaXplOworCXN0cnVjdCBjYW5mZF9mcmFtZSAqY2YgPSAoc3RydWN0IGNh bmZkX2ZyYW1lICopc2tiLT5kYXRhOworCXN0cnVjdCBpeHhhdF9jYW5fbXNnIGNhbl9tc2cgPSB7 IDAgfTsKKwlzdHJ1Y3QgaXh4YXRfY2FuX21zZ19iYXNlICptc2dfYmFzZSA9ICZjYW5fbXNnLmJh c2U7CisJdTMyIGZsYWdzID0gMDsKKwl1MzIgbXNnX2lkID0gMDsKKworCWlmIChjZi0+Y2FuX2lk ICYgQ0FOX1JUUl9GTEFHKQorCQlmbGFncyB8PSBJWFhBVF9VU0JfTVNHX0ZMQUdTX1JUUjsKKwor CWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKSB7CisJCWZsYWdzIHw9IElYWEFUX1VTQl9N U0dfRkxBR1NfRVhUOworCQltc2dfaWQgPSBjZi0+Y2FuX2lkICYgQ0FOX0VGRl9NQVNLOworCX0g ZWxzZSB7CisJCW1zZ19pZCA9IGNmLT5jYW5faWQgJiBDQU5fU0ZGX01BU0s7CisJfQorCisJaWYg KGNhbl9pc19jYW5mZF9za2Ioc2tiKSkgeworCQlmbGFncyB8PSBJWFhBVF9VU0JfRkRNU0dfRkxB R1NfRURMOworCisJCWlmICghKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpICYmIChjZi0+Zmxh Z3MgJiBDQU5GRF9CUlMpKQorCQkJZmxhZ3MgfD0gSVhYQVRfVVNCX0ZETVNHX0ZMQUdTX0ZEUjsK KworCQlmbGFncyB8PSBGSUVMRF9QUkVQKElYWEFUX1VTQl9NU0dfRkxBR1NfRExDLCBjYW5fZmRf bGVuMmRsYyhjZi0+bGVuKSk7CisJfSBlbHNlIHsKKwkJZmxhZ3MgfD0gRklFTERfUFJFUChJWFhB VF9VU0JfTVNHX0ZMQUdTX0RMQywgY2YtPmxlbik7CisJfQorCisJbXNnX2Jhc2UtPmZsYWdzID0g Y3B1X3RvX2xlMzIoZmxhZ3MpOworCW1zZ19iYXNlLT5tc2dfaWQgPSBjcHVfdG9fbGUzMihtc2df aWQpOworCW1zZ19iYXNlLT5zaXplID0gc2l6ZW9mKCptc2dfYmFzZSkgKyBjZi0+bGVuIC0gMTsK KwlpZiAoZGV2LT5hZGFwdGVyID09ICZ1c2IyY2FuX2NsMSkgeworCQltc2dfYmFzZS0+c2l6ZSAr PSBzaXplb2YoY2FuX21zZy5jbDEpOworCQltc2dfYmFzZS0+c2l6ZSAtPSBzaXplb2YoY2FuX21z Zy5jbDEuZGF0YSk7CisJCW1lbWNweShjYW5fbXNnLmNsMS5kYXRhLCBjZi0+ZGF0YSwgY2YtPmxl bik7CisJfSBlbHNlIHsKKwkJbXNnX2Jhc2UtPnNpemUgKz0gc2l6ZW9mKGNhbl9tc2cuY2wyKTsK KwkJbXNnX2Jhc2UtPnNpemUgLT0gc2l6ZW9mKGNhbl9tc2cuY2wyLmRhdGEpOworCQltZW1jcHko Y2FuX21zZy5jbDIuZGF0YSwgY2YtPmRhdGEsIGNmLT5sZW4pOworCX0KKworCXNpemUgPSBtc2df YmFzZS0+c2l6ZSArIDE7CisJbWVtY3B5KG9idWYsICZjYW5fbXNnLCBzaXplKTsKKwlyZXR1cm4g c2l6ZTsKK30KKworc3RhdGljIHZvaWQgaXh4YXRfdXNiX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1 Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGl4eGF0X3VzYl9kZXZpY2UgKmRldiA9IHVyYi0+Y29u dGV4dDsKKwljb25zdCBzdHJ1Y3QgaXh4YXRfdXNiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPmFk YXB0ZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+bmV0ZGV2OworCXN0cnVj dCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LT51ZGV2OworCWludCBlcnI7CisKKwlpZiAoIW5ldGlm X2RldmljZV9wcmVzZW50KG5ldGRldikpCisJCXJldHVybjsKKworCXN3aXRjaCAodXJiLT5zdGF0 dXMpIHsKKwljYXNlIDA6IC8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRVBST1RPOgor CWNhc2UgLUVJTFNFUToKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNl IC1FU0hVVERPV046CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQluZXRkZXZfZXJyKG5ldGRldiwg IlJ4IHVyYiBhYm9ydGVkICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gcmVzdWJtaXRfdXJi OworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKQorCQlpZiAoZGV2LT5zdGF0ZSAm IElYWEFUX1VTQl9TVEFURV9TVEFSVEVEKQorCQkJaXh4YXRfdXNiX2RlY29kZV9idWYodXJiKTsK KworcmVzdWJtaXRfdXJiOgorCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdWRldiwgdXNiX3JjdmJ1 bGtwaXBlKHVkZXYsIGRldi0+ZXBfbXNnX2luKSwKKwkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXIs IGFkYXB0ZXItPmJ1ZmZlcl9zaXplX3J4LAorCQkJICBpeHhhdF91c2JfcmVhZF9idWxrX2NhbGxi YWNrLCBkZXYpOworCisJdXNiX2FuY2hvcl91cmIodXJiLCAmZGV2LT5yeF9zdWJtaXR0ZWQpOwor CWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFlcnIpCisJCXJl dHVybjsKKworCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKworCWlmIChlcnIgPT0gLUVOT0RFVikK KwkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCWVsc2UKKwkJbmV0ZGV2X2VycihuZXRk ZXYsCisJCQkgICAiRmFpbGVkIHRvIHJlc3VibWl0IHJlYWQgYnVsayB1cmI6ICVwZVxuIiwgRVJS X1BUUihlcnIpKTsKK30KKworc3RhdGljIHZvaWQgaXh4YXRfdXNiX3dyaXRlX2J1bGtfY2FsbGJh Y2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBpeHhhdF90eF91cmJfY29udGV4dCAqY29u dGV4dCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaXh4YXRfdXNiX2RldmljZSAqZGV2OworCXN0 cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwlpZiAoV0FSTl9PTighY29udGV4dCkpCisJCXJl dHVybjsKKworCWRldiA9IGNvbnRleHQtPmRldjsKKwluZXRkZXYgPSBkZXYtPm5ldGRldjsKKwor CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKCF1 cmItPnN0YXR1cykgeworCQluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJbmV0ZGV2LT5z dGF0cy50eF9ieXRlcyArPSBjYW5fZ2V0X2VjaG9fc2tiKG5ldGRldiwgY29udGV4dC0+ZWNob19p bmRleCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJbmV0ZGV2X2VycihuZXRkZXYsICJUeCB1cmIgYWJv cnRlZDogJXBlXG4iLCBFUlJfUFRSKHVyYi0+c3RhdHVzKSk7CisJCWNhbl9mcmVlX2VjaG9fc2ti KG5ldGRldiwgY29udGV4dC0+ZWNob19pbmRleCwgTlVMTCk7CisJfQorCisJY29udGV4dC0+ZWNo b19pbmRleCA9IElYWEFUX1VTQl9NQVhfVFhfVVJCUzsKKwlhdG9taWNfZGVjKCZkZXYtPmFjdGl2 ZV90eF91cmJzKTsKKworCWlmICghdXJiLT5zdGF0dXMpCisJCW5ldGlmX3dha2VfcXVldWUobmV0 ZGV2KTsKK30KKworc3RhdGljIG5ldGRldl90eF90IGl4eGF0X3VzYl9zdGFydF94bWl0KHN0cnVj dCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50 IGVycjsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3QgaXh4YXRfdXNiX2RldmljZSAqZGV2ID0gbmV0ZGV2 X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXh4YXRfdHhfdXJiX2NvbnRleHQgKmNvbnRleHQgPSBO VUxMOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZuZXRkZXYtPnN0YXRzOwor CXN0cnVjdCB1cmIgKnVyYjsKKwl1OCAqb2J1ZjsKKwl1MzIgaTsKKworCWlmIChjYW5fZHJvcHBl ZF9pbnZhbGlkX3NrYihuZXRkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKKwlm b3IgKGkgPSAwOyBpIDwgSVhYQVRfVVNCX01BWF9UWF9VUkJTOyBpKyspIHsKKwkJaWYgKGRldi0+ dHhfY29udGV4dHNbaV0uZWNob19pbmRleCA9PSBJWFhBVF9VU0JfTUFYX1RYX1VSQlMpIHsKKwkJ CWNvbnRleHQgPSBkZXYtPnR4X2NvbnRleHRzICsgaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ aWYgKFdBUk5fT05fT05DRSghY29udGV4dCkpCisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwor CXVyYiA9IGNvbnRleHQtPnVyYjsKKwlvYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlz aXplID0gaXh4YXRfdXNiX2VuY29kZV9tc2coZGV2LCBza2IsIG9idWYpOworCisJY29udGV4dC0+ ZWNob19pbmRleCA9IGk7CisKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplOwor CXVzYl9hbmNob3JfdXJiKHVyYiwgJmRldi0+dHhfc3VibWl0dGVkKTsKKwljYW5fcHV0X2VjaG9f c2tiKHNrYiwgbmV0ZGV2LCBpLCAwKTsKKwlhdG9taWNfaW5jKCZkZXYtPmFjdGl2ZV90eF91cmJz KTsKKworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVycikg eworCQljYW5fZnJlZV9lY2hvX3NrYihuZXRkZXYsIGksIE5VTEwpOworCQl1c2JfdW5hbmNob3Jf dXJiKHVyYik7CisJCWF0b21pY19kZWMoJmRldi0+YWN0aXZlX3R4X3VyYnMpOworCisJCWNvbnRl eHQtPmVjaG9faW5kZXggPSBJWFhBVF9VU0JfTUFYX1RYX1VSQlM7CisKKwkJaWYgKGVyciA9PSAt RU5PREVWKSB7CisJCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisJCX0gZWxzZSB7CisJ CQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQkJbmV0ZGV2X2VycihuZXRkZXYsCisJCQkJICAgIlN1 Ym1pdHRpbmcgdHgtdXJiIGZhaWxlZDogJXBlXG4iLCBFUlJfUFRSKGVycikpOworCQl9CisJfSBl bHNlIHsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmFjdGl2ZV90eF91cmJzKSA+PSBJWFhBVF9V U0JfTUFYX1RYX1VSQlMpCisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJfQorCisJcmV0 dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCBpeHhhdF91c2Jfc2V0dXBfcnhfdXJi cyhzdHJ1Y3QgaXh4YXRfdXNiX2RldmljZSAqZGV2KQoreworCWludCBpOworCWludCBlcnIgPSAw OworCWNvbnN0IHN0cnVjdCBpeHhhdF91c2JfYWRhcHRlciAqYWRhcHRlciA9IGRldi0+YWRhcHRl cjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5uZXRkZXY7CisJc3RydWN0IHVz Yl9kZXZpY2UgKnVkZXYgPSBkZXYtPnVkZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgSVhYQVRfVVNC X01BWF9SWF9VUkJTOyBpKyspIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCQl1OCAqYnVmOworCisJ CXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQll cnIgPSAtRU5PTUVNOworCQkJbmV0ZGV2X2VycihuZXRkZXYsICJObyBtZW1vcnkgZm9yIFVSQnM6 ICVwZVxuIiwKKwkJCQkgICBFUlJfUFRSKGVycikpOworCQkJYnJlYWs7CisJCX0KKworCQlidWYg PSBrbWFsbG9jKGFkYXB0ZXItPmJ1ZmZlcl9zaXplX3J4LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFi dWYpIHsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCW5ldGRl dl9lcnIobmV0ZGV2LAorCQkJCSAgICJObyBtZW1vcnkgZm9yIFVTQi1idWZmZXI6ICVwZVxuIiwg RVJSX1BUUihlcnIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJi LCB1ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIGRldi0+ZXBfbXNnX2luKSwgYnVm LAorCQkJCSAgYWRhcHRlci0+YnVmZmVyX3NpemVfcngsCisJCQkJICBpeHhhdF91c2JfcmVhZF9i dWxrX2NhbGxiYWNrLCBkZXYpOworCisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0ZSRUVf QlVGRkVSOworCQl1c2JfYW5jaG9yX3VyYih1cmIsICZkZXYtPnJ4X3N1Ym1pdHRlZCk7CisKKwkJ ZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJ dXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQkJa2ZyZWUoYnVmKTsKKwkJCXVzYl9mcmVlX3VyYih1 cmIpOworCisJCQlpZiAoZXJyID09IC1FTk9ERVYpCisJCQkJbmV0aWZfZGV2aWNlX2RldGFjaChu ZXRkZXYpOworCisJCQlicmVhazsKKwkJfQorCisJCXVzYl9mcmVlX3VyYih1cmIpOworCX0KKwor CWlmIChpID09IDApCisJCW5ldGRldl9lcnIobmV0ZGV2LCAiQ291bGRuJ3Qgc2V0dXAgYW55IHJ4 LVVSQnNcbiIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpeHhhdF91c2Jfc2V0 dXBfdHhfdXJicyhzdHJ1Y3QgaXh4YXRfdXNiX2RldmljZSAqZGV2KQoreworCWludCBpOworCWlu dCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBpeHhhdF91c2JfYWRhcHRlciAqYWRhcHRlciA9IGRl di0+YWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5uZXRkZXY7CisJ c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBkZXYtPnVkZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwg SVhYQVRfVVNCX01BWF9UWF9VUkJTOyBpKyspIHsKKwkJc3RydWN0IGl4eGF0X3R4X3VyYl9jb250 ZXh0ICpjb250ZXh0OworCQlzdHJ1Y3QgdXJiICp1cmI7CisJCXU4ICpidWY7CisKKwkJdXJiID0g dXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXJldCA9IC1F Tk9NRU07CisJCQluZXRkZXZfZXJyKG5ldGRldiwgIk5vIG1lbW9yeSBmb3IgVVJCczogJXBlXG4i LAorCQkJCSAgIEVSUl9QVFIocmV0KSk7CisJCQlicmVhazsKKwkJfQorCisJCWJ1ZiA9IGttYWxs b2MoYWRhcHRlci0+YnVmZmVyX3NpemVfdHgsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1Zikgewor CQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJbmV0ZGV2X2Vycihu ZXRkZXYsCisJCQkJICAgIk5vIG1lbW9yeSBmb3IgVVNCLWJ1ZmZlcjogJXBlXG4iLCBFUlJfUFRS KHJldCkpOworCQkJYnJlYWs7CisJCX0KKworCQljb250ZXh0ID0gZGV2LT50eF9jb250ZXh0cyAr IGk7CisJCWNvbnRleHQtPmRldiA9IGRldjsKKwkJY29udGV4dC0+dXJiID0gdXJiOworCisJCXVz Yl9maWxsX2J1bGtfdXJiKHVyYiwgdWRldiwKKwkJCQkgIHVzYl9zbmRidWxrcGlwZSh1ZGV2LCBk ZXYtPmVwX21zZ19vdXQpLCBidWYsCisJCQkJICBhZGFwdGVyLT5idWZmZXJfc2l6ZV90eCwKKwkJ CQkgIGl4eGF0X3VzYl93cml0ZV9idWxrX2NhbGxiYWNrLCBjb250ZXh0KTsKKworCQl1cmItPnRy YW5zZmVyX2ZsYWdzIHw9IFVSQl9GUkVFX0JVRkZFUjsKKwl9CisKKwlpZiAoaSA9PSAwKSB7CisJ CW5ldGRldl9lcnIobmV0ZGV2LCAiQ291bGRuJ3Qgc2V0dXAgYW55IHR4LVVSQnNcbiIpOworCQl1 c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkZXYtPnJ4X3N1Ym1pdHRlZCk7CisJfQorCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgaXh4YXRfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9p bnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGl4eGF0X3VzYl9kZXZpY2UgKmRldjsKKwlzdHJ1 Y3QgaXh4YXRfdXNiX2RldmljZSAqcHJldl9kZXY7CisKKwkvKiB1bnJlZ2lzdGVyIHRoZSBnaXZl biBkZXZpY2UgYW5kIGFsbCBwcmV2aW91cyBkZXZpY2VzICovCisJZm9yIChkZXYgPSB1c2JfZ2V0 X2ludGZkYXRhKGludGYpOyBkZXY7IGRldiA9IHByZXZfZGV2KSB7CisJCXByZXZfZGV2ID0gZGV2 LT5wcmV2X2RldjsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LT5uZXRkZXYpOworCQlmcmVlX2Nh bmRldihkZXYtPm5ldGRldik7CisJfQorCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsK K30KKworc3RhdGljIGludCBpeHhhdF91c2Jfc3RhcnQoc3RydWN0IGl4eGF0X3VzYl9kZXZpY2Ug KmRldikKK3sKKwlpbnQgZXJyOworCWludCBpOworCXUzMiB0aW1lX3JlZiA9IDA7CisJY29uc3Qg c3RydWN0IGl4eGF0X3VzYl9hZGFwdGVyICphZGFwdGVyID0gZGV2LT5hZGFwdGVyOworCisJZXJy ID0gaXh4YXRfdXNiX3NldHVwX3J4X3VyYnMoZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJy OworCisJZXJyID0gaXh4YXRfdXNiX3NldHVwX3R4X3VyYnMoZGV2KTsKKwlpZiAoZXJyKQorCQly ZXR1cm4gZXJyOworCisJLyogVHJ5IHRvIHJlc2V0IHRoZSBjb250cm9sbGVyLCBpbiBjYXNlIGl0 IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQKKwkgKiBmcm9tIGEgcHJldmlvdXMgdW5jbGVhbiBzaHV0 ZG93bgorCSAqLworCWl4eGF0X3VzYl9yZXNldF9jdHJsKGRldik7CisKKwlpZiAoYWRhcHRlci0+ aW5pdF9jdHJsKSB7CisJCWVyciA9IGFkYXB0ZXItPmluaXRfY3RybChkZXYpOworCQlpZiAoZXJy KQorCQkJZ290byBmYWlsOworCX0KKworCWlmICghKGRldi0+c3RhdGUgJiBJWFhBVF9VU0JfU1RB VEVfU1RBUlRFRCkpIHsKKwkJZXJyID0gaXh4YXRfdXNiX3N0YXJ0X2N0cmwoZGV2LCAmdGltZV9y ZWYpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCisJCWl4eGF0X3VzYl9zZXRfdHNfbm93 KGRldiwgdGltZV9yZWYpOworCX0KKworCWRldi0+YmVjLnR4ZXJyID0gMDsKKwlkZXYtPmJlYy5y eGVyciA9IDA7CisKKwlkZXYtPnN0YXRlIHw9IElYWEFUX1VTQl9TVEFURV9TVEFSVEVEOworCWRl di0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKKwlyZXR1cm4gMDsKKworZmFp bDoKKwlpZiAoZXJyID09IC1FTk9ERVYpCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRk ZXYpOworCisJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIkNvdWxkbid0IHN1Ym1pdCBjb250cm9s OiAlcGVcbiIsIEVSUl9QVFIoZXJyKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSVhYQVRfVVNCX01B WF9UWF9VUkJTOyBpKyspIHsKKwkJdXNiX2ZyZWVfdXJiKGRldi0+dHhfY29udGV4dHNbaV0udXJi KTsKKwkJZGV2LT50eF9jb250ZXh0c1tpXS51cmIgPSBOVUxMOworCX0KKworCXJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBpbnQgaXh4YXRfdXNiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRl dikKK3sKKwlzdHJ1Y3QgaXh4YXRfdXNiX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2 KTsKKwlpbnQgZXJyOworCisJLyogY29tbW9uIG9wZW4gKi8KKwllcnIgPSBvcGVuX2NhbmRldihu ZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCS8qIGZpbmFsbHkgc3RhcnQgZGV2 aWNlICovCisJZXJyID0gaXh4YXRfdXNiX3N0YXJ0KGRldik7CisJaWYgKGVycikgeworCQluZXRk ZXZfZXJyKG5ldGRldiwgIkNvdWxkbid0IHN0YXJ0IGRldmljZTogJXBlXG4iLCBFUlJfUFRSKGVy cikpOworCQljbG9zZV9jYW5kZXYobmV0ZGV2KTsKKwkJZ290byBmYWlsOworCX0KKworCW5ldGlm X3N0YXJ0X3F1ZXVlKG5ldGRldik7CisKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGlj IGludCBpeHhhdF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCBl cnIgPSAwOworCXN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXRk ZXYpOworCisJaXh4YXRfdXNiX3N0b3BfcXVldWUoZGV2KTsKKwlpZiAoZGV2LT5zdGF0ZSAmIElY WEFUX1VTQl9TVEFURV9TVEFSVEVEKSB7CisJCWVyciA9IGl4eGF0X3VzYl9zdG9wX2N0cmwoZGV2 KTsKKwkJaWYgKGVycikKKwkJCW5ldGRldl93YXJuKG5ldGRldiwgIkVycm9yICVkOiBDYW5ub3Qg c3RvcCBkZXZpY2VcbiIsCisJCQkJICAgIGVycik7CisJfQorCisJZGV2LT5zdGF0ZSAmPSB+SVhY QVRfVVNCX1NUQVRFX1NUQVJURUQ7CisJY2xvc2VfY2FuZGV2KG5ldGRldik7CisJZGV2LT5jYW4u c3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGl4eGF0X3VzYl9uZXRkZXZfb3BzID0geworCS5uZG9f b3BlbiA9IGl4eGF0X3VzYl9vcGVuLAorCS5uZG9fc3RvcCA9IGl4eGF0X3VzYl9zdG9wLAorCS5u ZG9fc3RhcnRfeG1pdCA9IGl4eGF0X3VzYl9zdGFydF94bWl0Cit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IGV0aHRvb2xfb3BzIGl4eGF0X3VzYl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3RzX2lu Zm8gPSBldGh0b29sX29wX2dldF90c19pbmZvLAorfTsKKworc3RhdGljIGludCBpeHhhdF91c2Jf Y3JlYXRlX2RldihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQljb25zdCBzdHJ1Y3Qg aXh4YXRfdXNiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJdTE2IGN0cmxfaW5kZXgpCit7CisJc3Ry dWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVj dCBpeHhhdF91c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlp bnQgZXJyOworCWludCBpOworCisJbmV0ZGV2ID0gYWxsb2NfY2FuZGV2KHNpemVvZigqZGV2KSwg SVhYQVRfVVNCX01BWF9UWF9VUkJTKTsKKwlpZiAoIW5ldGRldikgeworCQlkZXZfZXJyKCZpbnRm LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgY2FuZGV2XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJ fQorCisJZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlkZXYtPnVkZXYgPSB1ZGV2OworCWRl di0+bmV0ZGV2ID0gbmV0ZGV2OworCWRldi0+YWRhcHRlciA9IGFkYXB0ZXI7CisJZGV2LT5jdHJs X2luZGV4ID0gY3RybF9pbmRleDsKKwlkZXYtPnN0YXRlID0gSVhYQVRfVVNCX1NUQVRFX0NPTk5F Q1RFRDsKKworCWkgPSBjdHJsX2luZGV4ICsgYWRhcHRlci0+ZXBfb2ZmczsKKwlkZXYtPmVwX21z Z19pbiA9IGFkYXB0ZXItPmVwX21zZ19pbltpXTsKKwlkZXYtPmVwX21zZ19vdXQgPSBhZGFwdGVy LT5lcF9tc2dfb3V0W2ldOworCisJZGV2LT5jYW4uY2xvY2suZnJlcSA9IGFkYXB0ZXItPmNsb2Nr OworCWRldi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9IGFkYXB0ZXItPmJ0OworCWRldi0+Y2FuLmRh dGFfYml0dGltaW5nX2NvbnN0ID0gYWRhcHRlci0+YnRkOworCisJZGV2LT5jYW4uZG9fc2V0X21v ZGUgPSBpeHhhdF91c2Jfc2V0X21vZGU7CisJZGV2LT5jYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9 IGl4eGF0X3VzYl9nZXRfYmVycl9jb3VudGVyOworCisJZGV2LT5jYW4uY3RybG1vZGVfc3VwcG9y dGVkID0gYWRhcHRlci0+bW9kZXM7CisKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmaXh4YXRfdXNi X25ldGRldl9vcHM7CisJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZpeHhhdF91c2JfZXRodG9vbF9v cHM7CisKKwluZXRkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOworCW5ldGRldi0+ZGV2X3BvcnQgPSBj dHJsX2luZGV4OworCisJaW5pdF91c2JfYW5jaG9yKCZkZXYtPnJ4X3N1Ym1pdHRlZCk7CisJaW5p dF91c2JfYW5jaG9yKCZkZXYtPnR4X3N1Ym1pdHRlZCk7CisKKwlhdG9taWNfc2V0KCZkZXYtPmFj dGl2ZV90eF91cmJzLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBJWFhBVF9VU0JfTUFYX1RYX1VS QlM7IGkrKykKKwkJZGV2LT50eF9jb250ZXh0c1tpXS5lY2hvX2luZGV4ID0gSVhYQVRfVVNCX01B WF9UWF9VUkJTOworCisJZGV2LT5wcmV2X2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJ dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOworCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAm aW50Zi0+ZGV2KTsKKwllcnIgPSByZWdpc3Rlcl9jYW5kZXYobmV0ZGV2KTsKKwlpZiAoZXJyKSB7 CisJCWRldl9lcnIoJmludGYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjYW4gZGV2aWNlOiAl cGVcbiIsCisJCQlFUlJfUFRSKGVycikpOworCQlnb3RvIGZyZWVfY2FuZGV2OworCX0KKworCWlm IChkZXYtPnByZXZfZGV2KQorCQkoZGV2LT5wcmV2X2RldiktPm5leHRfZGV2ID0gZGV2OworCisJ ZXJyID0gaXh4YXRfdXNiX2dldF9kZXZfaW5mbyh1ZGV2LCAmZGV2LT5kZXZfaW5mbyk7CisJaWYg KGVycikgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCBkZXZpY2Ug aW5mb3JtYXRpb246ICVwZVxuIiwgRVJSX1BUUihlcnIpKTsKKwkJZ290byB1bnJlZ19jYW5kZXY7 CisJfQorCisJbmV0ZGV2X2luZm8obmV0ZGV2LCAiJXM6IENvbm5lY3RlZCBDaGFubmVsICV1IChk ZXZpY2UgJXMpXG4iLAorCQkgICAgZGV2LT5kZXZfaW5mby5kZXZpY2VfbmFtZSwgY3RybF9pbmRl eCwKKwkJICAgIGRldi0+ZGV2X2luZm8uZGV2aWNlX2lkKTsKKworCXJldHVybiAwOworCit1bnJl Z19jYW5kZXY6CisJdW5yZWdpc3Rlcl9jYW5kZXYobmV0ZGV2KTsKK2ZyZWVfY2FuZGV2OgorCXVz Yl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2LT5wcmV2X2Rldik7CisJZnJlZV9jYW5kZXYobmV0ZGV2 KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGl4eGF0X3VzYl9wcm9iZShzdHJ1Y3Qg dXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpp ZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50 Zik7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdF9pbnRmID0gaW50Zi0+YWx0c2V0 dGluZzsKKwljb25zdCBzdHJ1Y3QgaXh4YXRfdXNiX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0 IGl4eGF0X2Rldl9jYXBzIGRldl9jYXBzOworCXUxNiBpOworCWludCBlcnI7CisKKwl1c2JfcmVz ZXRfY29uZmlndXJhdGlvbih1ZGV2KTsKKworCWFkYXB0ZXIgPSAoY29uc3Qgc3RydWN0IGl4eGF0 X3VzYl9hZGFwdGVyICopaWQtPmRyaXZlcl9pbmZvOworCisJZm9yIChpID0gMDsgaSA8IGhvc3Rf aW50Zi0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJY29uc3QgdTggZXBhZGRyID0gaG9z dF9pbnRmLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWludCBtYXRjaDsK KwkJdTggajsKKworCQkvKiBDaGVjayBpZiB1c2ItZW5kcG9pbnQgYWRkcmVzcyBtYXRjaGVzIGtu b3duIHVzYi1lbmRwb2ludHMgKi8KKwkJZm9yIChqID0gMDsgaiA8IElYWEFUX1VTQl9NQVhfQ0hB Tk5FTDsgaisrKSB7CisJCQl1OCBlcF9tc2dfaW4gPSBhZGFwdGVyLT5lcF9tc2dfaW5bal07CisJ CQl1OCBlcF9tc2dfb3V0ID0gYWRhcHRlci0+ZXBfbXNnX2luW2pdOworCisJCQlpZiAoZXBhZGRy ID09IGVwX21zZ19pbiB8fCBlcGFkZHIgPT0gZXBfbXNnX291dCkgeworCQkJCW1hdGNoID0gMTsK KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghbWF0Y2gpCisJCQlyZXR1cm4gLUVOT0RF VjsKKwl9CisKKwllcnIgPSBpeHhhdF91c2JfcG93ZXJfY3RybCh1ZGV2LCBJWFhBVF9VU0JfUE9X RVJfV0FLRVVQKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbXNsZWVwKElYWEFUX1VT Ql9QT1dFUl9XQUtFVVBfVElNRSk7CisKKwllcnIgPSBpeHhhdF91c2JfZ2V0X2Rldl9jYXBzKHVk ZXYsICZkZXZfY2Fwcyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQki RmFpbGVkIHRvIGdldCBkZXZpY2UgY2FwYWJpbGl0aWVzOiAlcGVcbiIsIEVSUl9QVFIoZXJyKSk7 CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gLUVOT0RFVjsKKwlmb3IgKGkgPSAwOyBpIDwg bGUxNl90b19jcHUoZGV2X2NhcHMuYnVzX2N0cmxfY291bnQpOyBpKyspIHsKKwkJdTE2IGRldl9i dXN0eXBlID0gbGUxNl90b19jcHUoZGV2X2NhcHMuYnVzX2N0cmxfdHlwZXNbaV0pOworCQl1OCBi dXN0eXBlID0gSVhYQVRfVVNCX0JVU19UWVBFKGRldl9idXN0eXBlKTsKKworCQlpZiAoYnVzdHlw ZSA9PSBJWFhBVF9VU0JfQlVTX0NBTikKKwkJCWVyciA9IGl4eGF0X3VzYl9jcmVhdGVfZGV2KGlu dGYsIGFkYXB0ZXIsIGkpOworCisJCWlmIChlcnIpIHsKKwkJCS8qIGRlcmVnaXN0ZXIgYWxyZWFk eSBjcmVhdGVkIGRldmljZXMgKi8KKwkJCWl4eGF0X3VzYl9kaXNjb25uZWN0KGludGYpOworCQkJ cmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg dXNiX2RyaXZlciBpeHhhdF91c2JfZHJpdmVyID0geworCS5uYW1lID0gSVhYQVRfVVNCX0RSSVZF Ul9OQU1FLAorCS5wcm9iZSA9IGl4eGF0X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGl4eGF0 X3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGl4eGF0X3VzYl90YWJsZSwKK307CisKK21v ZHVsZV91c2JfZHJpdmVyKGl4eGF0X3VzYl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvY2FuL3VzYi9peHhhdF91c2IvaXh4YXRfdXNiX2NvcmUuaCBiL2RyaXZlcnMvbmV0L2Nhbi91 c2IvaXh4YXRfdXNiL2l4eGF0X3VzYl9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi41NmM2ZjNiOTM4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25l dC9jYW4vdXNiL2l4eGF0X3VzYi9peHhhdF91c2JfY29yZS5oCkBAIC0wLDAgKzEsNTExIEBACisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogQ29weXJp Z2h0IChDKSAyMDE4IEhNUyBJbmR1c3RyaWFsIE5ldHdvcmtzIDxzb2NrZXRjYW5AaG1zLW5ldHdv cmtzLmRlPgorICovCisKKyNpZm5kZWYgSVhYQVRfVVNCX0NPUkVfSAorI2RlZmluZSBJWFhBVF9V U0JfQ09SRV9ICisKKyNkZWZpbmUgSVhYQVRfVVNCX0RSSVZFUl9OQU1FICJpeHhhdF91c2IyY2Fu IgorI2RlZmluZSBJWFhBVF9VU0JfQ1RSTF9OQU1FICJpeHhhdF91c2IiCisKKyNkZWZpbmUgSVhY QVRfVVNCX1ZFTkRPUl9JRCAweDA4ZDgKKworLyogc3VwcG9ydGVkIGRldmljZSBpZHM6IENMMSAq LworI2RlZmluZSBVU0IyQ0FOX0NPTVBBQ1RfUFJPRFVDVF9JRCAweDAwMDgKKyNkZWZpbmUgVVNC MkNBTl9FTUJFRERFRF9QUk9EVUNUX0lEIDB4MDAwOQorI2RlZmluZSBVU0IyQ0FOX1BST0ZFU1NJ T05BTF9QUk9EVUNUX0lEIDB4MDAwQQorI2RlZmluZSBVU0IyQ0FOX0FVVE9NT1RJVkVfUFJPRFVD VF9JRCAweDAwMEIKKworLyogc3VwcG9ydGVkIGRldmljZSBpZHM6IENMMiAqLworI2RlZmluZSBV U0IyQ0FOX0ZEX0NPTVBBQ1RfUFJPRFVDVF9JRCAweDAwMTQKKyNkZWZpbmUgVVNCMkNBTl9GRF9Q Uk9GRVNTSU9OQUxfUFJPRFVDVF9JRCAweDAwMTYKKyNkZWZpbmUgVVNCMkNBTl9GRF9BVVRPTU9U SVZFX1BST0RVQ1RfSUQgMHgwMDE3CisjZGVmaW5lIFVTQjJDQU5fRkRfUENJRV9NSU5JX1BST0RV Q1RfSUQgMHgwMDFCCisjZGVmaW5lIFVTQjJDQVJfUFJPRFVDVF9JRCAweDAwMUMKKyNkZWZpbmUg Q0FOX0lETTEwMV9QUk9EVUNUX0lEIDB4RkYxMgorI2RlZmluZSBDQU5fSURNMjAwX1BST0RVQ1Rf SUQgMHhGRjEzCisKKyNkZWZpbmUgSVhYQVRfVVNCX0JVU19DQU4gMQorCisjZGVmaW5lIElYWEFU X1VTQl9CVVNfVFlQRSh0eXBlKSAoKHU4KSgoKHR5cGUpID4+IDgpICYgMHgwMEZGKSkKKworI2Rl ZmluZSBJWFhBVF9VU0JfU1RBVEVfQ09OTkVDVEVEIEJJVCgwKQorI2RlZmluZSBJWFhBVF9VU0Jf U1RBVEVfU1RBUlRFRCBCSVQoMSkKKworI2RlZmluZSBJWFhBVF9VU0JfTUFYX0NIQU5ORUwgNQor I2RlZmluZSBJWFhBVF9VU0JfTUFYX1RZUEVTIDMyCisjZGVmaW5lIElYWEFUX1VTQl9NQVhfUlhf VVJCUyA0CisjZGVmaW5lIElYWEFUX1VTQl9NQVhfVFhfVVJCUyAxMAorI2RlZmluZSBJWFhBVF9V U0JfTUFYX0NPTV9SRVEgMTAKKworI2RlZmluZSBJWFhBVF9VU0JfTVNHX1RJTUVPVVQgNTAKKyNk ZWZpbmUgSVhYQVRfVVNCX01TR19DWUNMRSAyMAorCisjZGVmaW5lIElYWEFUX1VTQl9QT1dFUl9X QUtFVVAgMAorI2RlZmluZSBJWFhBVF9VU0JfUE9XRVJfV0FLRVVQX1RJTUUgNTAwCisKKyNkZWZp bmUgSVhYQVRfVVNCX09QTU9ERV9TVEFOREFSRCBCSVQoMCkKKyNkZWZpbmUgSVhYQVRfVVNCX09Q TU9ERV9FWFRFTkRFRCBCSVQoMSkKKyNkZWZpbmUgSVhYQVRfVVNCX09QTU9ERV9FUlJGUkFNRSBC SVQoMikKKyNkZWZpbmUgSVhYQVRfVVNCX09QTU9ERV9MSVNUT05MWSBCSVQoMykKKworI2RlZmlu ZSBJWFhBVF9VU0JfRVhNT0RFX0VYVERBVEEgQklUKDApCisjZGVmaW5lIElYWEFUX1VTQl9FWE1P REVfRkFTVERBVEEgQklUKDEpCisjZGVmaW5lIElYWEFUX1VTQl9FWE1PREVfSVNPRkQgQklUKDIp CisKKyNkZWZpbmUgSVhYQVRfVVNCX0JUTU9ERV9OQVQgQklUKDApCisjZGVmaW5lIElYWEFUX1VT Ql9CVE1PREVfVFNNIEJJVCgxKQorCisjZGVmaW5lIElYWEFUX1VTQl9TVE9QX0FDVElPTl9DTEVB UkFMTCAzCisKKyNkZWZpbmUgSVhYQVRfUkVTVEFSVF9UQVNLX0NZQ0xFX1RJTUUgMjAKKworI2Rl ZmluZSBJWFhBVF9VU0JfQ0FOX0RBVEEgMHgwMAorI2RlZmluZSBJWFhBVF9VU0JfQ0FOX0lORk8g MHgwMQorI2RlZmluZSBJWFhBVF9VU0JfQ0FOX0VSUk9SIDB4MDIKKyNkZWZpbmUgSVhYQVRfVVNC X0NBTl9TVEFUVVMgMHgwMworI2RlZmluZSBJWFhBVF9VU0JfQ0FOX1dBS0VVUCAweDA0CisjZGVm aW5lIElYWEFUX1VTQl9DQU5fVElNRU9WUiAweDA1CisjZGVmaW5lIElYWEFUX1VTQl9DQU5fVElN RVJTVCAweDA2CisKKyNkZWZpbmUgSVhYQVRfVVNCX0NBTl9TVEFUVVNfT0sgMHgwMDAwMDAwMAor I2RlZmluZSBJWFhBVF9VU0JfQ0FOX1NUQVRVU19PVkVSUlVOIDB4MDAwMDAwMDIKKyNkZWZpbmUg SVhYQVRfVVNCX0NBTl9TVEFUVVNfRVJSTElNIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhYQVRfVVNC X0NBTl9TVEFUVVNfQlVTT0ZGIDB4MDAwMDAwMDgKKyNkZWZpbmUgSVhYQVRfVVNCX0NBTl9TVEFU VVNfRVJSX1BBUyAweDAwMDAyMDAwCisKKyNkZWZpbmUgSVhYQVRfVVNCX0NBTl9FUlJPUl9MRU4g NQorCisjZGVmaW5lIElYWEFUX1VTQl9DQU5fRVJST1JfQ09ERSAwCisjZGVmaW5lIElYWEFUX1VT Ql9DQU5fRVJST1JfQ09VTlRFUl9SWCAzCisjZGVmaW5lIElYWEFUX1VTQl9DQU5fRVJST1JfQ09V TlRFUl9UWCA0CisKKyNkZWZpbmUgSVhYQVRfVVNCX0NBTl9FUlJPUl9TVFVGRiAxCisjZGVmaW5l IElYWEFUX1VTQl9DQU5fRVJST1JfRk9STSAyCisjZGVmaW5lIElYWEFUX1VTQl9DQU5fRVJST1Jf QUNLIDMKKyNkZWZpbmUgSVhYQVRfVVNCX0NBTl9FUlJPUl9CSVQgNAorI2RlZmluZSBJWFhBVF9V U0JfQ0FOX0VSUk9SX0NSQyA2CisKKyNkZWZpbmUgSVhYQVRfVVNCX01TR19GTEFHU19UWVBFIDB4 MDAwMDAwRkYKKyNkZWZpbmUgSVhYQVRfVVNCX01TR19GTEFHU19ETEMgMHgwMDBGMDAwMAorI2Rl ZmluZSBJWFhBVF9VU0JfTVNHX0ZMQUdTX09WUiAweDAwMTAwMDAwCisjZGVmaW5lIElYWEFUX1VT Ql9NU0dfRkxBR1NfUlRSIDB4MDA0MDAwMDAKKyNkZWZpbmUgSVhYQVRfVVNCX01TR19GTEFHU19F WFQgMHgwMDgwMDAwMAorCisjZGVmaW5lIElYWEFUX1VTQl9GRE1TR19GTEFHU19FREwgMHgwMDAw MDQwMAorI2RlZmluZSBJWFhBVF9VU0JfRkRNU0dfRkxBR1NfRkRSIDB4MDAwMDA4MDAKKyNkZWZp bmUgSVhYQVRfVVNCX0ZETVNHX0ZMQUdTX0VTSSAweDAwMDAxMDAwCisKKyNkZWZpbmUgSVhYQVRf VVNCX0NBTl9DTURfU1RBUlQgMHgzMjYKKyNkZWZpbmUgSVhYQVRfVVNCX0NBTl9DTURfU1RPUCAw eDMyNworI2RlZmluZSBJWFhBVF9VU0JfQ0FOX0NNRF9SRVNFVCAweDMyOAorCisjZGVmaW5lIElY WEFUX1VTQl9CUkRfQ01EX0dFVF9ERVZDQVBTIDB4NDAxCisjZGVmaW5lIElYWEFUX1VTQl9CUkRf Q01EX0dFVF9ERVZJTkZPIDB4NDAyCisjZGVmaW5lIElYWEFUX1VTQl9CUkRfQ01EX1BPV0VSIDB4 NDIxCisKKy8qKgorICogc3RydWN0IGl4eGF0X2Nhbl9tc2dfYmFzZSAtIElYWEFUIENBTiBtZXNz YWdlIGJhc2UgKENMMS9DTDIpCisgKiBAc2l6ZTogTWVzc2FnZSBzaXplICh0aGlzIGZpZWxkIGV4 Y2x1ZGVkKQorICogQHRpbWU6IE1lc3NhZ2UgdGltZXN0YW1wCisgKiBAbXNnX2lkOiBNZXNzYWdl IElECisgKiBAZmxhZ3M6IE1lc3NhZ2UgZmxhZ3MKKyAqCisgKiBDb250YWlucyB0aGUgY29tbW9u IGZpZWxkcyBvZiBhbiBJWFhBVCBDQU4gbWVzc2FnZSBvbiBib3RoIENMMSBhbmQgQ0wyCisgKiBk ZXZpY2VzCisgKi8KK3N0cnVjdCBpeHhhdF9jYW5fbXNnX2Jhc2UgeworCXU4IHNpemU7CisJX19s ZTMyIHRpbWU7CisJX19sZTMyIG1zZ19pZDsKKwlfX2xlMzIgZmxhZ3M7Cit9IF9fcGFja2VkOwor CisvKioKKyAqIHN0cnVjdCBpeHhhdF9jYW5fbXNnX2NsMSAtIElYWEFUIENBTiBtZXNzYWdlIChD TDEpCisgKiBAZGF0YTogTWVzc2FnZSBkYXRhIChzdGFuZGFyZCBDQU4gZnJhbWUpCisgKgorICog Q29udGFpbnMgdGhlIGZpZWxkcyBvZiBhbiBJWFhBVCBDQU4gbWVzc2FnZSBvbiBDTDEgZGV2aWNl cworICovCitzdHJ1Y3QgaXh4YXRfY2FuX21zZ19jbDEgeworCXVuaW9uIHsKKwkJdTggZGF0YVtD QU5fTUFYX0RMRU5dOworCQlfX2xlMzIgc3RhdHVzOworCX0gX19wYWNrZWQ7Cit9IF9fcGFja2Vk OworCisvKioKKyAqIHN0cnVjdCBpeHhhdF9jYW5fbXNnX2NsMiAtIElYWEFUIENBTiBtZXNzYWdl IChDTDIpCisgKiBAY2xpZW50X2lkOiBDbGllbnQgSUQKKyAqIEBkYXRhOiBNZXNzYWdlIGRhdGEg KENBTiBGRCBmcmFtZSkKKyAqCisgKiBDb250YWlucyB0aGUgZmllbGRzIG9mIGFuIElYWEFUIENB TiBtZXNzYWdlIG9uIENMMiBkZXZpY2VzCisgKi8KK3N0cnVjdCBpeHhhdF9jYW5fbXNnX2NsMiB7 CisJX19sZTMyIGNsaWVudF9pZDsKKwl1bmlvbiB7CisJCXU4IGRhdGFbQ0FORkRfTUFYX0RMRU5d OworCQlfX2xlMzIgc3RhdHVzOworCX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkOworCisvKioKKyAq IHN0cnVjdCBpeHhhdF9jYW5fbXNnIC0gSVhYQVQgQ0FOIG1lc3NhZ2UKKyAqIEBiYXNlOiBCYXNl IG1lc3NhZ2UKKyAqIEBjbDE6IENsMSBtZXNzYWdlCisgKiBAY2wyOiBDbDIgbWVzc2FnZQorICoK KyAqIENvbnRhaW5zIGFuIElYWEFUIENBTiBtZXNzYWdlCisgKi8KK3N0cnVjdCBpeHhhdF9jYW5f bXNnIHsKKwlzdHJ1Y3QgaXh4YXRfY2FuX21zZ19iYXNlIGJhc2U7CisJdW5pb24geworCQlzdHJ1 Y3QgaXh4YXRfY2FuX21zZ19jbDEgY2wxOworCQlzdHJ1Y3QgaXh4YXRfY2FuX21zZ19jbDIgY2wy OworCX07Cit9IF9fcGFja2VkOworCisvKioKKyAqIHN0cnVjdCBpeHhhdF9kZXZfY2FwcyAtIERl dmljZSBjYXBhYmlsaXRpZXMKKyAqIEBidXNfY3RybF9jb3VudDogU3RvcmVzIHRoZSBidXMgY29u dHJvbGxlciBjb3VudGVyCisgKiBAYnVzX2N0cmxfdHlwZXM6IFN0b3JlcyB0aGUgYnVzIGNvbnRy b2xsZXIgdHlwZXMKKyAqCisgKiBDb250YWlucyB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcworICov CitzdHJ1Y3QgaXh4YXRfZGV2X2NhcHMgeworCV9fbGUxNiBidXNfY3RybF9jb3VudDsKKwlfX2xl MTYgYnVzX2N0cmxfdHlwZXNbSVhYQVRfVVNCX01BWF9UWVBFU107Cit9IF9fcGFja2VkOworCisv KioKKyAqIHN0cnVjdCBpeHhhdF9jYW5idHAgQml0dGltaW5nIHBhcmFtZXRlcnMgKENMMikKKyAq IEBtb2RlOiBPcGVyYXRpb24gbW9kZQorICogQGJwczogQml0cyBwZXIgc2Vjb25kCisgKiBAdHMx OiBGaXJzdCB0aW1lIHNlZ21lbnQKKyAqIEB0czI6IFNlY29uZCB0aW1lIHNlZ21lbnQKKyAqIEBz anc6IFN5bmNocm9uaXphdGlvbiBqdW1wIHdpZHRoCisgKiBAdGRvOiBUcmFuc21pdHRlciBkZWxh eSBvZmZzZXQKKyAqCisgKiBCaXR0aW1pbmcgcGFyYW1ldGVycyBvZiBhIENMMiBpbml0aWFsaXph dGlvbiByZXF1ZXN0CisgKi8KK3N0cnVjdCBpeHhhdF9jYW5idHAgeworCV9fbGUzMiBtb2RlOwor CV9fbGUzMiBicHM7CisJX19sZTE2IHRzMTsKKwlfX2xlMTYgdHMyOworCV9fbGUxNiBzanc7CisJ X19sZTE2IHRkbzsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IGl4eGF0X2Rldl9pbmZv IElYWEFUIHVzYiBkZXZpY2UgaW5mb3JtYXRpb24KKyAqIEBkZXZpY2VfbmFtZTogTmFtZSBvZiB0 aGUgZGV2aWNlCisgKiBAZGV2aWNlX2lkOiBEZXZpY2UgaWRlbnRpZmljYXRpb24gKCB1bmlxdWUg ZGV2aWNlIGlkKQorICogQGRldmljZV92ZXJzaW9uOiBEZXZpY2UgdmVyc2lvbiAoIDAsIDEsIC4u LikKKyAqIEBkZXZpY2VfZnBnYV92ZXJzaW9uOiBWZXJzaW9uIG9mIEZQR0EgZGVzaWduCisgKgor ICogQ29udGFpbnMgZGV2aWNlIGluZm9ybWF0aW9uIG9mIElYWEFUIFVTQiBkZXZpY2VzCisgKi8K K3N0cnVjdCBpeHhhdF9kZXZfaW5mbyB7CisJY2hhciBkZXZpY2VfbmFtZVsxNl07CisJY2hhciBk ZXZpY2VfaWRbMTZdOworCV9fbGUxNiBkZXZpY2VfdmVyc2lvbjsKKwlfX2xlMzIgZGV2aWNlX2Zw Z2FfdmVyc2lvbjsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IGl4eGF0X3RpbWVfcmVm IFRpbWUgcmVmZXJlbmNlCisgKiBAa3RfaG9zdF8wOiBMYXRlc3QgdGltZSBvbiB0aGUgaG9zdAor ICogQHRzX2Rldl8wOiBMYXRlc3QgdGltZSBzdGFtcCBvbiB0aGUgZGV2aWNlCisgKiBAdHNfZGV2 X2xhc3Q6IExhc3QgZGV2aWNlIHRpbWUgc3RhbXAKKyAqCisgKiBDb250YWlucyB0aW1lIHJlZmVy ZW5jZXMgb2YgdGhlIGRldmljZSBhbmQgdGhlIGhvc3QKKyAqLworc3RydWN0IGl4eGF0X3RpbWVf cmVmIHsKKwlrdGltZV90IGt0X2hvc3RfMDsKKwl1MzIgdHNfZGV2XzA7CisJdTMyIHRzX2Rldl9s YXN0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgaXh4YXRfdHhfdXJiX2NvbnRleHQgVVJCIGNvbnRl bnQgZm9yIHRyYW5zbWlzc2lvbgorICogQGRldjogSVhYQVQgVVNCIGRldmljZQorICogQHVyYjog VVNCIHJlcXVlc3QgYmxvY2sKKyAqIEBlY2hvX2luZGV4OiBFY2hvIGluZGV4CisgKiBAZGxjOiBE YXRhIGxlbmd0aCBjb2RlCisgKiBAY291bnQ6IENvdW50ZXIKKyAqCisgKiBDb250YWlucyBjb250 ZW50IGZvciBVU0IgcmVxdWVzdCBibG9jayB0cmFuc21pc3Npb25zCisgKi8KK3N0cnVjdCBpeHhh dF90eF91cmJfY29udGV4dCB7CisJc3RydWN0IGl4eGF0X3VzYl9kZXZpY2UgKmRldjsKKwlzdHJ1 Y3QgdXJiICp1cmI7CisJdTMyIGVjaG9faW5kZXg7Cit9OworCisvKioKKyAqIHN0cnVjdCBpeHhh dF91c2JfZGV2aWNlIElYWEFUIFVTQiBkZXZpY2UKKyAqIEBjYW46IENBTiBjb21tb24gcHJpdmF0 ZSBkYXRhCisgKiBAYWRhcHRlcjogVVNCIG5ldHdvcmsgZGVzY3JpcHRvcgorICogQHVkZXY6IFVT QiBkZXZpY2UKKyAqIEBuZXRkZXY6IE5ldF9kZXZpY2UKKyAqIEBhY3RpdmVfdHhfdXJiczogQWN0 aXZlIHR4IHVyYnMKKyAqIEB0eF9zdWJtaXR0ZWQ6IFN1Ym1pdHRlZCB0eCB1c2IgYW5jaG9yCisg KiBAdHhfY29udGV4dHM6IEJ1ZmZlciBmb3IgdHggY29udGV4dHMKKyAqIEByeF9zdWJtaXR0ZWQ6 IFN1Ym1pdHRlZCByeCB1c2IgYW5jaG9yCisgKiBAc3RhdGU6IERldmljZSBzdGF0ZQorICogQGN0 cmxfaW5kZXg6IENvbnRyb2xsZXIgaW5kZXgKKyAqIEBlcF9tc2dfaW46IFVTQiBlbmRwb2ludCBm b3IgaW5jb21pbmcgbWVzc2FnZXMKKyAqIEBlcF9tc2dfb3V0OiBVU0IgZW5kcG9pbnQgZm9yIG91 dGdvaW5nIG1lc3NhZ2VzCisgKiBAcHJldl9kZXY6IFByZXZpb3VzIG9wZW5lZCBkZXZpY2UKKyAq IEBuZXh0X2RldjogTmV4dCBvcGVuZWQgZGV2aWNlIGluIGxpc3QKKyAqIEB0aW1lX3JlZjogVGlt ZSByZWZlcmVuY2UKKyAqIEBkZXZfaW5mbzogRGV2aWNlIGluZm9ybWF0aW9uCisgKiBAYmVjOiBD QU4gZXJyb3IgY291bnRlcgorICoKKyAqIElYWEFUIFVTQi10by1DQU4gZGV2aWNlCisgKi8KK3N0 cnVjdCBpeHhhdF91c2JfZGV2aWNlIHsKKwlzdHJ1Y3QgY2FuX3ByaXYgY2FuOworCWNvbnN0IHN0 cnVjdCBpeHhhdF91c2JfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRl djsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJYXRvbWljX3QgYWN0aXZlX3R4X3Vy YnM7CisJc3RydWN0IHVzYl9hbmNob3IgdHhfc3VibWl0dGVkOworCXN0cnVjdCBpeHhhdF90eF91 cmJfY29udGV4dCB0eF9jb250ZXh0c1tJWFhBVF9VU0JfTUFYX1RYX1VSQlNdOworCXN0cnVjdCB1 c2JfYW5jaG9yIHJ4X3N1Ym1pdHRlZDsKKworCXUzMiBzdGF0ZTsKKwl1MTYgY3RybF9pbmRleDsK KworCXU4IGVwX21zZ19pbjsKKwl1OCBlcF9tc2dfb3V0OworCisJc3RydWN0IGl4eGF0X3VzYl9k ZXZpY2UgKnByZXZfZGV2OworCXN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpuZXh0X2RldjsKKwor CXN0cnVjdCBpeHhhdF90aW1lX3JlZiB0aW1lX3JlZjsKKwlzdHJ1Y3QgaXh4YXRfZGV2X2luZm8g ZGV2X2luZm87CisKKwlzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciBiZWM7Cit9OworCisvKioKKyAq IHN0cnVjdCBpeHhhdF91c2JfZGFsX3JlcSBJWFhBVCBkZXZpY2UgcmVxdWVzdCBibG9jaworICog QHNpemU6IFJlcXVlc3Qgc2l6ZQorICogQHBvcnQ6IFJlcXVlc3QgcG9ydAorICogQHNvY2tldDog UmVxdWVzdCBzb2NrZXQKKyAqIEBjb2RlOiBSZXF1ZXN0IGNvZGUKKyAqCisgKiBJWFhBVCBkZXZp Y2UgcmVxdWVzdCBibG9jaworICovCitzdHJ1Y3QgaXh4YXRfdXNiX2RhbF9yZXEgeworCV9fbGUz MiBzaXplOworCV9fbGUxNiBwb3J0OworCV9fbGUxNiBzb2NrZXQ7CisJX19sZTMyIGNvZGU7Cit9 IF9fcGFja2VkOworCisvKioKKyAqIHN0cnVjdCBpeHhhdF91c2JfZGFsX3JlcyBJWFhBVCBkZXZp Y2UgcmVzcG9uc2UgYmxvY2sKKyAqIEByZXNfc2l6ZTogRXhwZWN0ZWQgcmVzcG9uc2Ugc2l6ZQor ICogQHJldF9zaXplOiBBY3R1YWwgcmVzcG9uc2Ugc2l6ZQorICogQGNvZGU6IFJldHVybiBjb2Rl CisgKgorICogSVhYQVQgZGV2aWNlIHJlc3BvbnNlIGJsb2NrCisgKi8KK3N0cnVjdCBpeHhhdF91 c2JfZGFsX3JlcyB7CisJX19sZTMyIHJlc19zaXplOworCV9fbGUzMiByZXRfc2l6ZTsKKwlfX2xl MzIgY29kZTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IGl4eGF0X3VzYl9kYWxfY21k IElYWEFUIGRldmljZSBjb21tYW5kCisgKiBAcmVxOiBSZXF1ZXN0IGJsb2NrCisgKiBAcmVxOiBS ZXNwb25zZSBibG9jaworICoKKyAqIElYWEFUIGRldmljZSBjb21tYW5kCisgKi8KK3N0cnVjdCBp eHhhdF91c2JfZGFsX2NtZCB7CisJc3RydWN0IGl4eGF0X3VzYl9kYWxfcmVxIHJlcTsKKwlzdHJ1 Y3QgaXh4YXRfdXNiX2RhbF9yZXMgcmVzOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBzdHJ1Y3Qg aXh4YXRfdXNiX2NhcHNfY21kIERldmljZSBjYXBhYmlsaXRpZXMgY29tbWFuZAorICogQHJlcTog UmVxdWVzdCBibG9jaworICogQHJlczogUmVzcG9uc2UgYmxvY2sKKyAqIEBjYXBzOiBEZXZpY2Ug Y2FwYWJpbGl0aWVzCisgKgorICogQ2FuIGJlIHNlbnQgdG8gYSBkZXZpY2UgdG8gcmVxdWVzdCBp dHMgY2FwYWJpbGl0aWVzCisgKi8KK3N0cnVjdCBpeHhhdF91c2JfY2Fwc19jbWQgeworCXN0cnVj dCBpeHhhdF91c2JfZGFsX3JlcSByZXE7CisJc3RydWN0IGl4eGF0X3VzYl9kYWxfcmVzIHJlczsK KwlzdHJ1Y3QgaXh4YXRfZGV2X2NhcHMgY2FwczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3Ry dWN0IGl4eGF0X3VzYl9pbml0X2NsMV9jbWQgSW5pdGlhbGl6YXRpb24gY29tbWFuZCAoQ0wxKQor ICogQHJlcTogUmVxdWVzdCBibG9jaworICogQG1vZGU6IE9wZXJhdGlvbiBtb2RlCisgKiBAYnRy MDogQml0dGltaW5nIHJlZ2lzdGVyIDAKKyAqIEBidHIxOiBCaXR0aW1pbmcgcmVnaXN0ZXIgMQor ICogQHBhZGRpbmc6IDEgYnl0ZSBwYWRkaW5nCisgKiBAcmVzOiBSZXNwb25zZSBibG9jaworICoK KyAqIENhbiBiZSBzZW50IHRvIGEgQ0wxIGRldmljZSB0byBpbml0aWFsaXplIGl0CisgKi8KK3N0 cnVjdCBpeHhhdF91c2JfaW5pdF9jbDFfY21kIHsKKwlzdHJ1Y3QgaXh4YXRfdXNiX2RhbF9yZXEg cmVxOworCXU4IG1vZGU7CisJdTggYnRyMDsKKwl1OCBidHIxOworCXU4IHBhZGRpbmc7CisJc3Ry dWN0IGl4eGF0X3VzYl9kYWxfcmVzIHJlczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0 IGl4eGF0X3VzYl9pbml0X2NsMl9jbWQgSW5pdGlhbGl6YXRpb24gY29tbWFuZCAoQ0wyKQorICog QHJlcTogUmVxdWVzdCBibG9jaworICogQG9wbW9kZTogT3BlcmF0aW9uIG1vZGUKKyAqIEBleG1v ZGU6IEV4dGVuZGVkIG1vZGUKKyAqIEBzZHI6IFN0YWRhcmQgYml0dGltaW5nIHBhcmFtZXRlcnMK KyAqIEBmZHI6IEZhc3QgZGF0YSBiaXR0aW1pbmcgcGFyYW1ldGVycworICogQF9wYWRkaW5nOiAy IGJ5dGVzIHBhZGRpbmcKKyAqIEByZXM6IFJlc3BvbnNlIGJsb2NrCisgKgorICogQ2FuIGJlIHNl bnQgdG8gYSBDTDIgZGV2aWNlIHRvIGluaXRpYWxpemUgaXQKKyAqLworc3RydWN0IGl4eGF0X3Vz Yl9pbml0X2NsMl9jbWQgeworCXN0cnVjdCBpeHhhdF91c2JfZGFsX3JlcSByZXE7CisJdTggb3Bt b2RlOworCXU4IGV4bW9kZTsKKwlzdHJ1Y3QgaXh4YXRfY2FuYnRwIHNkcjsKKwlzdHJ1Y3QgaXh4 YXRfY2FuYnRwIGZkcjsKKwlfX2xlMTYgX3BhZGRpbmc7CisJc3RydWN0IGl4eGF0X3VzYl9kYWxf cmVzIHJlczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IGl4eGF0X3VzYl9zdGFydF9j bWQgQ29udHJvbGxlciBzdGFydCBjb21tYW5kCisgKiBAcmVxOiBSZXF1ZXN0IGJsb2NrCisgKiBA cmVzOiBSZXNwb25zZSBibG9jaworICogQHRpbWU6IFRpbWVzdGFtcAorICoKKyAqIENhbiBiZSBz ZW50IHRvIGEgZGV2aWNlIHRvIHN0YXJ0IGl0cyBjb250cm9sbGVyCisgKi8KK3N0cnVjdCBpeHhh dF91c2Jfc3RhcnRfY21kIHsKKwlzdHJ1Y3QgaXh4YXRfdXNiX2RhbF9yZXEgcmVxOworCXN0cnVj dCBpeHhhdF91c2JfZGFsX3JlcyByZXM7CisJX19sZTMyIHRpbWU7Cit9IF9fcGFja2VkOworCisv KioKKyAqIHN0cnVjdCBpeHhhdF91c2Jfc3RvcF9jbWQgQ29udHJvbGxlciBzdG9wIGNvbW1hbmQK KyAqIEByZXE6IFJlcXVlc3QgYmxvY2sKKyAqIEBhY3Rpb246IFN0b3AgYWN0aW9uCisgKiBAcmVz OiBSZXNwb25zZSBibG9jaworICoKKyAqIENhbiBiZSBzZW50IHRvIGEgZGV2aWNlIHRvIHN0YXJ0 IGl0cyBjb250cm9sbGVyCisgKi8KK3N0cnVjdCBpeHhhdF91c2Jfc3RvcF9jbWQgeworCXN0cnVj dCBpeHhhdF91c2JfZGFsX3JlcSByZXE7CisJX19sZTMyIGFjdGlvbjsKKwlzdHJ1Y3QgaXh4YXRf dXNiX2RhbF9yZXMgcmVzOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBzdHJ1Y3QgaXh4YXRfdXNi X3Bvd2VyX2NtZCBQb3dlciBjb21tYW5kCisgKiBAcmVxOiBSZXF1ZXN0IGJsb2NrCisgKiBAbW9k ZTogUG93ZXIgbW9kZQorICogQF9wYWRkaW5nMTogMSBieXRlIHBhZGRpbmcKKyAqIEBfcGFkZGlu ZzI6IDIgYnl0ZSBwYWRkaW5nCisgKiBAcmVzOiBSZXNwb25zZSBibG9jaworICoKKyAqIENhbiBi ZSBzZW50IHRvIGEgZGV2aWNlIHRvIHNldCBpdHMgcG93ZXIgbW9kZQorICovCitzdHJ1Y3QgaXh4 YXRfdXNiX3Bvd2VyX2NtZCB7CisJc3RydWN0IGl4eGF0X3VzYl9kYWxfcmVxIHJlcTsKKwl1OCBt b2RlOworCXU4IF9wYWRkaW5nMTsKKwlfX2xlMTYgX3BhZGRpbmcyOworCXN0cnVjdCBpeHhhdF91 c2JfZGFsX3JlcyByZXM7Cit9IF9fcGFja2VkOworCisvKioKKyAqIHN0cnVjdCBpeHhhdF91c2Jf aW5mb19jbWQgRGV2aWNlIGluZm9ybWF0aW9uIGNvbW1hbmQKKyAqIEByZXE6IFJlcXVlc3QgYmxv Y2sKKyAqIEByZXM6IFJlc3BvbnNlIGJsb2NrCisgKiBAaW5mbzogRGV2aWNlIGluZm9ybWF0aW9u CisgKgorICogQ2FuIGJlIHNlbnQgdG8gYSBkZXZpY2UgdG8gcmVxdWVzdCBpdHMgZGV2aWNlIGlu Zm9ybWF0aW9uCisgKi8KK3N0cnVjdCBpeHhhdF91c2JfaW5mb19jbWQgeworCXN0cnVjdCBpeHhh dF91c2JfZGFsX3JlcSByZXE7CisJc3RydWN0IGl4eGF0X3VzYl9kYWxfcmVzIHJlczsKKwlzdHJ1 Y3QgaXh4YXRfZGV2X2luZm8gaW5mbzsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IGl4 eGF0X3VzYl9hZGFwdGVyIElYWEFUIFVTQiBkZXZpY2UgYWRhcHRlcgorICogQGNsb2NrOiBDbG9j ayBmcmVxdWVuY3kKKyAqIEBidDogQml0dGltaW5nIGNvbnN0YW50cworICogQGJ0ZDogRGF0YSBi aXR0aW1pbmcgY29uc3RhbnRzCisgKiBAbW9kZXM6IFN1cHBvcnRlZCBtb2RlcworICogQGJ1ZmZl cl9zaXplX3J4OiBCdWZmZXIgc2l6ZSBmb3IgcmVjZWl2aW5nCisgKiBAYnVmZmVyX3NpemVfdHg6 IEJ1ZmZlciBzaXplIGZvciB0cmFuc2ZlcgorICogQGVwX21zZ19pbjogVVNCIGVuZHBvaW50IGJ1 ZmZlciBmb3IgaW5jb21pbmcgbWVzc2FnZXMKKyAqIEBlcF9tc2dfb3V0OiBVU0IgZW5kcG9pbnQg YnVmZmVyIGZvciBvdXRnb2luZyBtZXNzYWdlcworICogQGVwX29mZnM6IEVuZHBvaW50IG9mZnNl dCAoZGV2aWNlIGRlcGVuZGVkKQorICoKKyAqIERldmljZSBBZGFwdGVyIGZvciBJWFhBVCBVU0Ig ZGV2aWNlcworICovCitzdHJ1Y3QgaXh4YXRfdXNiX2FkYXB0ZXIgeworCWNvbnN0IHUzMiBjbG9j azsKKwljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCAqYnQ7CisJY29uc3Qgc3RydWN0 IGNhbl9iaXR0aW1pbmdfY29uc3QgKmJ0ZDsKKwljb25zdCB1MzIgbW9kZXM7CisJY29uc3QgdTE2 IGJ1ZmZlcl9zaXplX3J4OworCWNvbnN0IHUxNiBidWZmZXJfc2l6ZV90eDsKKwljb25zdCB1OCBl cF9tc2dfaW5bSVhYQVRfVVNCX01BWF9DSEFOTkVMXTsKKwljb25zdCB1OCBlcF9tc2dfb3V0W0lY WEFUX1VTQl9NQVhfQ0hBTk5FTF07CisJY29uc3QgdTggZXBfb2ZmczsKKwlpbnQgKCppbml0X2N0 cmwpKHN0cnVjdCBpeHhhdF91c2JfZGV2aWNlICpkZXYpOworfTsKKworZXh0ZXJuIGNvbnN0IHN0 cnVjdCBpeHhhdF91c2JfYWRhcHRlciB1c2IyY2FuX2NsMTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qg aXh4YXRfdXNiX2FkYXB0ZXIgdXNiMmNhbl9jbDI7CitleHRlcm4gY29uc3Qgc3RydWN0IGl4eGF0 X3VzYl9hZGFwdGVyIGNhbl9pZG07CisKKy8qKgorICogaXh4YXRfdXNiX3NldHVwX2NtZCgpIC0g U2V0dXAgYSBkZXZpY2UgY29tbWFuZAorICogQHJlcTogUmVxdWVzdCBibG9jaworICogQHJlczog UmVzcG9uc2UgYmxvY2sKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlZmF1bHQgdmFs dWVzIGluIHRoZSByZXF1ZXN0IGFuZCB0aGUgcmVzcG9uc2UgYmxvY2sKKyAqIG9mIGEgZGV2aWNl IGNvbW1hbmQKKyAqLwordm9pZCBpeHhhdF91c2Jfc2V0dXBfY21kKHN0cnVjdCBpeHhhdF91c2Jf ZGFsX3JlcSAqcmVxLAorCQkJIHN0cnVjdCBpeHhhdF91c2JfZGFsX3JlcyAqcmVzKTsKKworLyoq CisgKiBpeHhhdF91c2Jfc2VuZF9jbWQoKSAtIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBkZXZpY2UK KyAqIEBkZXY6IFVTQiBkZXZpY2UKKyAqIEBwb3J0OiBDb21tYW5kIHBvcnQKKyAqIEByZXE6IENv bW1hbmQgcmVxdWVzdCBidWZmZXIKKyAqIEByZXFfc2l6ZTogQ29tbWFuZCByZXF1ZXN0IHNpemUK KyAqIEByZXM6IENvbW1hbmQgcmVzcG9uc2UgYnVmZmVyCisgKiBAcmVzX3NpemU6IENvbW1hbmQg cmVzcG9uc2Ugc2l6ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzcGVjaWZpYyBjb21t YW5kIHRvIHRoZSBkZXZpY2UKKyAqCisgKiBSZXR1cm46IE5lZ2F0aXZlIGVycm9yIGNvZGUgb3Ig emVybyBvbiBzdWNjZXNzCisgKi8KK2ludCBpeHhhdF91c2Jfc2VuZF9jbWQoc3RydWN0IHVzYl9k ZXZpY2UgKmRldiwgY29uc3QgdTE2IHBvcnQsIHZvaWQgKnJlcSwKKwkJICAgICAgIGNvbnN0IHUx NiByZXFfc2l6ZSwgdm9pZCAqcmVzLCBjb25zdCB1MTYgcmVzX3NpemUpOworCisjZW5kaWYgLyog SVhYQVRfVVNCX0NPUkVfSCAqLwotLSAKMi40MC4xCgo=