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 lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 5121FC25B74 for ; Thu, 16 May 2024 18:50:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s7gAw-00043n-Sd; Thu, 16 May 2024 14:49:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s7gAv-00043W-Aw for grub-devel@gnu.org; Thu, 16 May 2024 14:49:57 -0400 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s7gAs-0005Qv-Ch for grub-devel@gnu.org; Thu, 16 May 2024 14:49:57 -0400 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-51f45104ef0so1438265e87.3 for ; Thu, 16 May 2024 11:49:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715885391; x=1716490191; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=dZSyeLWe4Vhc+LTGlEf+eT0CrhialWSAcUGIcGVBO2c=; b=XGrjyh7ahYiFMxK5po1qYRP62l6Nn+Lcvf90OxpLua/Y/OWkJlVkIM4lk0lt4Xa7IK NmdMawvNI5ZLcHzz8E2gXz7iLk1I2cUoKdfr/XRnxMl9oz2uf9Mr6LJAvyBZyqZ7BMES 4iUtYaImeJysWpvBRh9hvP89SxNskISNWJgWWwqalleY8ESJtfV6K3ksdA34y6qvqr+x LA6DBCycLMCdLKBQDq/yVUvF2BBCN1zlB9G/EkwEz5RFwl123XI42KH/+JeXWxgK8am+ xLwQPYcZpnNNSZNbqL03JiCEQRUtnOLWlAa0Q7bmeg8FlCLHN7STcTsf/uoGLmjw05UO rbmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715885391; x=1716490191; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dZSyeLWe4Vhc+LTGlEf+eT0CrhialWSAcUGIcGVBO2c=; b=RnUAaLHvpHxfjif/n15R9MHF2UAOpWhKNzumvuQGlXL2l4mWwIJHB9qfN/NdQe52xn vd3SeDcWjsuls7jashawK3jncw/SoPBCQTfOLOKsMkhhPXTclHS+G9Hy82iJZV0DAlqh wHPaus65sxGcViaveTXjuNXcKoh3iSeCKISi51EnlAIsY2pxLO1PzlhU436rMAmhSsia CA68BxQvyEfQHF9hRgAALDl/vZ/Sr+OwYV4zVHhLUW5vhp2UXL0qXJRGOx/q6cT5qBFZ zeK6d7RmcL0jxOXEsfO24MX+yFaX5oRGc2O2xLcV06hVzx/oARWmTD0lf+uGhJZUGCRJ 0lhQ== X-Gm-Message-State: AOJu0Ywl4N8aK7H1H+bFJ01RhY1baRN5nUAdvKBy4HVsOtHvQTKabs/0 pib6ZnWt695ke/1A3W+jccJfTcoNo+AF3XFOFW/k+CfSMBDAAzKp5u0yAKxV X-Google-Smtp-Source: AGHT+IEwkeukWH8NwD+DTygWW13Vmfb6tOqNmDfERlIbziqhhRo/Z+iBAuoDJ2JskhmaXj4RplHbyA== X-Received: by 2002:a05:6512:6ce:b0:523:6e01:a701 with SMTP id 2adb3069b0e04-5236e01ab0amr7605399e87.64.1715885390806; Thu, 16 May 2024 11:49:50 -0700 (PDT) Received: from localhost ([5.253.206.60]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5a1781d2dcsm1009432466b.44.2024.05.16.11.49.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 May 2024 11:49:50 -0700 (PDT) From: Vladimir Serbinenko To: grub-devel@gnu.org Cc: Vladimir Serbinenko Subject: [PATCH] Implement NVMe native disk support Date: Thu, 16 May 2024 21:49:44 +0300 Message-Id: <20240516184944.2823-1-phcoder@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::12c; envelope-from=phcoder@gmail.com; helo=mail-lf1-x12c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBpcyB1c2VmdWwgMi1mb2xkOgoxKSBPbiBjb3JlYm9vdCBwb3J0IGl0IGFsbG93cyB0byBi b290IGZyb20gTlZNZSBkZXZpY2VzCjIpIE9uIG9sZGVyIHN5c3RlbXMgeW91IGNhbiBpbnN0YWxs IE5WTWUgdmlhIFBDSWUgYWRhcHRlciBhbmQgYm9vdCBmcm9tCiAgIGl0CgpTaWduZWQtb2ZmLWJ5 OiBWbGFkaW1pciBTZXJiaW5lbmtvIDxwaGNvZGVyQGdtYWlsLmNvbT4KLS0tCiBncnViLWNvcmUv TWFrZWZpbGUuY29yZS5kZWYgICAgIHwgICA2ICsKIGdydWItY29yZS9jb21tYW5kcy9uYXRpdmVk aXNrLmMgfCAgIDMgKy0KIGdydWItY29yZS9kaXNrL252bWUuYyAgICAgICAgICAgfCA2NDIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvZ3J1Yi9kaXNrLmggICAgICAg ICAgICAgfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCA2NTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdydWItY29yZS9kaXNrL252bWUuYwoKZGlmZiAt LWdpdCBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZiBiL2dydWItY29yZS9NYWtlZmlsZS5j b3JlLmRlZgppbmRleCA4ZTFiMWQ5ZjMuLjQ3YWM4YmYzZiAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3Jl L01ha2VmaWxlLmNvcmUuZGVmCisrKyBiL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgpAQCAt MTMwNSw2ICsxMzA1LDEyIEBAIG1vZHVsZSA9IHsKICAgZW5hYmxlID0gcGNpOwogfTsKIAorbW9k dWxlID0geworICBuYW1lID0gbnZtZTsKKyAgY29tbW9uID0gZGlzay9udm1lLmM7CisgIGVuYWJs ZSA9IHBjaTsKK307CisKIG1vZHVsZSA9IHsKICAgbmFtZSA9IHBhdGE7CiAgIGNvbW1vbiA9IGRp c2svcGF0YS5jOwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL25hdGl2ZWRpc2suYyBi L2dydWItY29yZS9jb21tYW5kcy9uYXRpdmVkaXNrLmMKaW5kZXggNTgwYzhkM2IwLi5hNDMxYTA2 NmEgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9jb21tYW5kcy9uYXRpdmVkaXNrLmMKKysrIGIvZ3J1 Yi1jb3JlL2NvbW1hbmRzL25hdGl2ZWRpc2suYwpAQCAtMzQsNyArMzQsNyBAQCBHUlVCX01PRF9M SUNFTlNFICgiR1BMdjMrIik7CiBzdGF0aWMgY29uc3QgY2hhciAqbW9kbmFtZXNfZGVmW10gPSB7 CiAgIC8qIEZJWE1FOiBhdXRvZ2VuZXJhdGUgdGhpcy4gICovCiAjaWYgZGVmaW5lZCAoX19pMzg2 X18pIHx8IGRlZmluZWQgKF9feDg2XzY0X18pIHx8IGRlZmluZWQgKEdSVUJfTUFDSElORV9NSVBT X0xPT05HU09OKQotICAicGF0YSIsICJhaGNpIiwgInVzYm1zIiwgIm9oY2kiLCAidWhjaSIsICJl aGNpIgorICAicGF0YSIsICJhaGNpIiwgInVzYm1zIiwgIm9oY2kiLCAidWhjaSIsICJlaGNpIiwg Im52bWUiCiAjZWxpZiBkZWZpbmVkIChHUlVCX01BQ0hJTkVfTUlQU19RRU1VX01JUFMpCiAgICJw YXRhIgogI2Vsc2UKQEAgLTc3LDYgKzc3LDcgQEAgZ2V0X3V1aWQgKGNvbnN0IGNoYXIgKm5hbWUs IGNoYXIgKip1dWlkLCBpbnQgZ2V0bmF0aXZlKQogICAgICAgLyogTmF0aXZlIGRpc2tzLiAgKi8K ICAgICBjYXNlIEdSVUJfRElTS19ERVZJQ0VfQVRBX0lEOgogICAgIGNhc2UgR1JVQl9ESVNLX0RF VklDRV9TQ1NJX0lEOgorICAgIGNhc2UgR1JVQl9ESVNLX0RFVklDRV9OVk1FX0lEOgogICAgIGNh c2UgR1JVQl9ESVNLX0RFVklDRV9YRU46CiAgICAgICBpZiAoZ2V0bmF0aXZlKQogCWJyZWFrOwpk aWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2Rpc2svbnZtZS5jIGIvZ3J1Yi1jb3JlL2Rpc2svbnZtZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uYjI5NDkzMDhkCi0tLSAvZGV2 L251bGwKKysrIGIvZ3J1Yi1jb3JlL2Rpc2svbnZtZS5jCkBAIC0wLDAgKzEsNjQyIEBACisvKgor ICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqCisgKiAgQ29weXJpZ2h0 IChDKSAyMDE5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqICBDb3B5cmlnaHQgKEMp IDIwMjQgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZy ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiAgQWRkaXRpb25hbGx5IHRoaXMgZmlsZSBjYW4gYmUgZGlzdHJpYnV0 ZWQgdW5kZXIgMy1jbGF1c2UgQlNEIGxpY2Vuc2UuCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorI2lu Y2x1ZGUgPGdydWIvZGlzay5oPgorI2luY2x1ZGUgPGdydWIvbW0uaD4KKyNpbmNsdWRlIDxncnVi L3RpbWUuaD4KKyNpbmNsdWRlIDxncnViL3BjaS5oPgorI2luY2x1ZGUgPGdydWIvbWlzYy5oPgor I2luY2x1ZGUgPGdydWIvbGlzdC5oPgorI2luY2x1ZGUgPGdydWIvbG9hZGVyLmg+CisKK0dSVUJf TU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsKKworI2RlZmluZSBOVk1FX0NDX0VOCSgxIDw8ICAwKQor I2RlZmluZSBOVk1FX0NDX0NTUwkoMCA8PCAgNCkKKyNkZWZpbmUgTlZNRV9DQ19NUFMJKDAgPDwg IDcpCisjZGVmaW5lIE5WTUVfQ0NfQU1TCSgwIDw8IDExKQorI2RlZmluZSBOVk1FX0NDX1NITgko MCA8PCAxNCkKKyNkZWZpbmUgTlZNRV9DQ19JT1NRRVMJKDYgPDwgMTYpCisjZGVmaW5lIE5WTUVf Q0NfSU9DUUVTCSg0IDw8IDIwKQorCisjZGVmaW5lIE5WTUVfUVVFVUVfU0laRSAyCisjZGVmaW5l IE5WTUVfU1FfRU5UUllfU0laRSA2NAorI2RlZmluZSBOVk1FX0NRX0VOVFJZX1NJWkUgMTYKKwor c3RydWN0IGdydWJfbnZtZV9tbWlvX3JlZworeworICAvKiAgMCAqLyBncnViX3VpbnQ2NF90IGNh cDsKKyAgLyogIDggKi8gZ3J1Yl91aW50MzJfdCB2czsKKyAgLyogIGMgKi8gZ3J1Yl91aW50MzJf dCBpbnRtczsKKyAgLyogMTAgKi8gZ3J1Yl91aW50MzJfdCBpbnRtYzsKKyAgLyogMTQgKi8gZ3J1 Yl91aW50MzJfdCBjb250cm9sbGVyX2NvbmZpZzsKKyAgLyogMTggKi8gZ3J1Yl91aW50MzJfdCBy ZXNlcnZlZDE7CisgIC8qIDFjICovIGdydWJfdWludDMyX3QgY29udHJvbGxlcl9zdGF0dXM7Cisg IC8qIDIwICovIGdydWJfdWludDMyX3QgbnNzcjsKKyAgLyogMjQgKi8gZ3J1Yl91aW50MzJfdCBh cWE7CisgIC8qIDI4ICovIGdydWJfdWludDY0X3QgYXNxOworICAvKiAzMCAqLyBncnViX3VpbnQ2 NF90IGFjcTsKK307CisKK3N0cnVjdCBudm1lX2lkZW50X2Jsb2NrCit7CisgIC8qICAwICovIGdy dWJfdWludDY0X3QgbnN6ZTsKKyAgLyogIDggKi8gZ3J1Yl91aW50NjRfdCBuY2FwOworICAvKiAx MCAqLyBncnViX3VpbnQ2NF90IG51c2U7CisgIC8qIDE4ICovIGdydWJfdWludDhfdCBuc2ZlYXQ7 CisgIC8qIDE5ICovIGdydWJfdWludDhfdCBubGJhZjsKKyAgLyogMWEgKi8gZ3J1Yl91aW50OF90 IGZsYmFzOworICAvKiAxYiAqLyBncnViX3VpbnQ4X3QgbWM7CisgIC8qIDFjICovIGdydWJfdWlu dDMyX3QgZmlsbFsoMHg4MCAtIDB4MWMpIC8gNF07CisgIC8qIDgwICovIGdydWJfdWludDMyX3Qg bGJhZls2NF07Cit9OworCitzdHJ1Y3QgZ3J1Yl9udm1lX2RldmljZQoreworICBzdHJ1Y3QgZ3J1 Yl9udm1lX2RldmljZSAqbmV4dDsKKyAgc3RydWN0IGdydWJfbnZtZV9kZXZpY2UgKipwcmV2Owor ICB2b2xhdGlsZSBzdHJ1Y3QgZ3J1Yl9udm1lX21taW9fcmVnICpyZWdzOworICBzdHJ1Y3QgZ3J1 Yl9wY2lfZG1hX2NodW5rICpwcnBfbGlzdDsKKyAgc3RydWN0IGdydWJfcGNpX2RtYV9jaHVuayAq c3FfYnVmZmVyOworICBzdHJ1Y3QgZ3J1Yl9wY2lfZG1hX2NodW5rICpjcV9idWZmZXI7CisgIHN0 cnVjdCBncnViX3BjaV9kbWFfY2h1bmsgKmlvY19idWZmZXI7CisgIHN0cnVjdCBncnViX3BjaV9k bWFfY2h1bmsgKmlvc19idWZmZXI7CisgIHN0cnVjdCBncnViX3BjaV9kbWFfY2h1bmsgKmlkZW50 X2J1ZmZlcjsKKyAgaW50IG51bTsKKyAgZ3J1Yl91aW50NjRfdCB0b3RhbF9zZWN0b3JzOworICBp bnQgbG9nX3NlY3Rvcl9zaXplOworCisgIHN0cnVjdCB7CisgICAgdm9sYXRpbGUgdm9pZCAqYmFz ZTsKKyAgICB2b2xhdGlsZSBncnViX3VpbnQzMl90ICpiZWxsOworICAgIGdydWJfdWludDE2X3Qg aWR4OyAvLyBib29sIHBvcyAwIG9yIDEKKyAgICBncnViX3VpbnQxNl90IHJvdW5kOyAvLyBib29s IHJvdW5kIDAgb3IgMSsweGQKKyAgfSBxdWV1ZVs0XTsKK307CisKK3N0cnVjdCBudm1lX3NfcXVl dWVfZW50cnkgeworICBncnViX3VpbnQzMl90IGR3WzE2XTsKK307CisKK3N0cnVjdCBudm1lX2Nf cXVldWVfZW50cnkgeworICBncnViX3VpbnQzMl90IGR3WzRdOworfTsKKworc3RhdGljIHN0cnVj dCBncnViX252bWVfZGV2aWNlICpncnViX252bWVfZGV2aWNlczsKK3N0YXRpYyBpbnQgbnVtZGV2 czsKKworZW51bSBudm1lX3F1ZXVlIHsKKyAgTlZNRV9BRE1JTl9RVUVVRSA9IDAsCisgIGFkcyA9 IDAsCisgIGFkYyA9IDEsCisgIE5WTUVfSU9fUVVFVUUgPSAyLAorICBpb3MgPSAyLAorICBpb2Mg PSAzLAorfTsKKworc3RhdGljIGludAorbnZtZV9jbWQoc3RydWN0IGdydWJfbnZtZV9kZXZpY2Ug Km52bWUsIGVudW0gbnZtZV9xdWV1ZSBxLCBjb25zdCBzdHJ1Y3QgbnZtZV9zX3F1ZXVlX2VudHJ5 ICpjbWQpCit7CisgIGludCBzcSA9IHEsIGNxID0gcSsxOworCisgIHZvaWQgKnNfZW50cnkgPSAo Y2hhciAqKSBudm1lLT5xdWV1ZVtzcV0uYmFzZSArIChudm1lLT5xdWV1ZVtzcV0uaWR4ICogTlZN RV9TUV9FTlRSWV9TSVpFKTsKKyAgZ3J1Yl9tZW1jcHkoc19lbnRyeSwgY21kLCBOVk1FX1NRX0VO VFJZX1NJWkUpOworICBudm1lLT5xdWV1ZVtzcV0uaWR4ID0gKG52bWUtPnF1ZXVlW3NxXS5pZHgg KyAxKSAmIChOVk1FX1FVRVVFX1NJWkUgLSAxKTsKKyAgKm52bWUtPnF1ZXVlW3NxXS5iZWxsID0g bnZtZS0+cXVldWVbc3FdLmlkeDsKKworICBzdHJ1Y3QgbnZtZV9jX3F1ZXVlX2VudHJ5ICpjX2Vu dHJ5ID0gKHN0cnVjdCBudm1lX2NfcXVldWVfZW50cnkgKikKKyAgICAoKGNoYXIgKikgbnZtZS0+ cXVldWVbY3FdLmJhc2UgKyAobnZtZS0+cXVldWVbY3FdLmlkeCAqIE5WTUVfQ1FfRU5UUllfU0la RSkpOworICBncnViX3VpbnQ2NF90IGVuZHRpbWUgPSBncnViX2dldF90aW1lX21zICgpICsgMTAw OworICB3aGlsZSAoKCgqKHZvbGF0aWxlIGdydWJfdWludDMyX3QgKikoJmNfZW50cnktPmR3WzNd KSA+PiAxNikgJiAweDEpID09IG52bWUtPnF1ZXVlW2NxXS5yb3VuZCkKKyAgICB7CisgICAgICBp ZiAoZ3J1Yl9nZXRfdGltZV9tcyAoKSA+IGVuZHRpbWUpCisJeworCSAgZ3J1Yl9kcHJpbnRmKCJu dm1lIiwgImNvbW1hbmQgdGltZWQgb3V0Iik7CisJICByZXR1cm4gLTE7CisJfQorICAgIH0KKyAg bnZtZS0+cXVldWVbY3FdLmlkeCA9IChudm1lLT5xdWV1ZVtjcV0uaWR4ICsgMSkgJiAoTlZNRV9R VUVVRV9TSVpFIC0gMSk7CisgICpudm1lLT5xdWV1ZVtjcV0uYmVsbCA9IG52bWUtPnF1ZXVlW2Nx XS5pZHg7CisgIGlmIChudm1lLT5xdWV1ZVtjcV0uaWR4ID09IDApCisgICAgbnZtZS0+cXVldWVb Y3FdLnJvdW5kID0gKG52bWUtPnF1ZXVlW2NxXS5yb3VuZCArIDEpICYgMTsKKyAgcmV0dXJuIGNf ZW50cnktPmR3WzNdID4+IDE3OworfQorCitzdGF0aWMgaW50CitjcmVhdGVfYWRtaW5fcXVldWVz KHN0cnVjdCBncnViX252bWVfZGV2aWNlICpudm1lKQoreworICBncnViX3VpbnQ4X3QgY2FwX2Rz dHJkID0gKG52bWUtPnJlZ3MtPmNhcCA+PiAzMikgJiAweGY7CisgIG52bWUtPnJlZ3MtPmFxYSA9 IChOVk1FX1FVRVVFX1NJWkUgLSAxKSA8PCAxNiB8IChOVk1FX1FVRVVFX1NJWkUgLSAxKTsKKwor ICBudm1lLT5zcV9idWZmZXIgPSBncnViX21lbWFsaWduX2RtYTMyKDB4MTAwMCwgTlZNRV9TUV9F TlRSWV9TSVpFICogTlZNRV9RVUVVRV9TSVpFKTsKKyAgaWYgKCFudm1lLT5zcV9idWZmZXIpCisg ICAgeworICAgICAgZ3J1Yl9kcHJpbnRmKCJudm1lIiwgIk5WTWUgRVJST1I6IEZhaWxlZCB0byBh bGxvY2F0ZWQgbWVtb3J5IGZvciBhZG1pbiBzdWJtaXNzaW9uIHF1ZXVlXG4iKTsKKyAgICAgIHJl dHVybiAtMTsKKyAgICB9CisgIGdydWJfbWVtc2V0KCh2b2lkICopIGdydWJfZG1hX2dldF92aXJ0 KG52bWUtPnNxX2J1ZmZlciksIDAsIE5WTUVfU1FfRU5UUllfU0laRSAqIE5WTUVfUVVFVUVfU0la RSk7CisgIG52bWUtPnJlZ3MtPmFzcSA9IGdydWJfZG1hX2dldF9waHlzKG52bWUtPnNxX2J1ZmZl cik7CisKKyAgbnZtZS0+cXVldWVbYWRzXS5iYXNlID0gZ3J1Yl9kbWFfZ2V0X3ZpcnQobnZtZS0+ c3FfYnVmZmVyKTsKKyAgbnZtZS0+cXVldWVbYWRzXS5iZWxsID0gKHZvbGF0aWxlIGdydWJfdWlu dDMyX3QgKikgbnZtZS0+cmVncyArIDB4MTAwMCAvIDQgKyAoYWRzICogKDEgPDwgY2FwX2RzdHJk KSk7CisgIG52bWUtPnF1ZXVlW2Fkc10uaWR4ID0gMDsKKworICBudm1lLT5jcV9idWZmZXIgPSBn cnViX21lbWFsaWduX2RtYTMyKDB4MTAwMCwgTlZNRV9DUV9FTlRSWV9TSVpFICogTlZNRV9RVUVV RV9TSVpFKTsKKyAgaWYgKCFudm1lLT5jcV9idWZmZXIpCisgICAgeworICAgICAgZ3J1Yl9kcHJp bnRmKCJudm1lIiwgIk5WTWUgRVJST1I6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFk bWluIGNvbXBsZXRpb24gcXVldWVcbiIpOworICAgICAgZ3J1Yl9kbWFfZnJlZShudm1lLT5zcV9i dWZmZXIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgZ3J1Yl9tZW1zZXQoKHZvaWQgKikg Z3J1Yl9kbWFfZ2V0X3ZpcnQobnZtZS0+Y3FfYnVmZmVyKSwgMCwgTlZNRV9DUV9FTlRSWV9TSVpF ICogTlZNRV9RVUVVRV9TSVpFKTsKKyAgbnZtZS0+cmVncy0+YWNxID0gZ3J1Yl9kbWFfZ2V0X3Bo eXMobnZtZS0+Y3FfYnVmZmVyKTsKKworICBudm1lLT5xdWV1ZVthZGNdLmJhc2UgPSBudm1lLT5j cV9idWZmZXI7CisgIG52bWUtPnF1ZXVlW2FkY10uYmVsbCA9ICh2b2xhdGlsZSBncnViX3VpbnQz Ml90ICopIG52bWUtPnJlZ3MgKyAweDEwMDAgLyA0ICsgKGFkYyAqICgxIDw8IGNhcF9kc3RyZCkp OworICBudm1lLT5xdWV1ZVthZGNdLmlkeCA9IDA7CisgIG52bWUtPnF1ZXVlW2FkY10ucm91bmQg PSAwOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9pb19zdWJtaXNzaW9u X3F1ZXVlKHN0cnVjdCBncnViX252bWVfZGV2aWNlICpudm1lKQoreworICBudm1lLT5pb3NfYnVm ZmVyID0gZ3J1Yl9tZW1hbGlnbl9kbWEzMigweDEwMDAsIE5WTUVfU1FfRU5UUllfU0laRSAqIE5W TUVfUVVFVUVfU0laRSk7CisgIGlmICghbnZtZS0+aW9zX2J1ZmZlcikKKyAgICB7CisgICAgICBn cnViX2RwcmludGYoIm52bWUiLCAiTlZNZSBFUlJPUjogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9y eSBmb3IgaW8gc3VibWlzc2lvbiBxdWV1ZS5cbiIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0K KyAgZ3J1Yl9tZW1zZXQoKHZvaWQgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQobnZtZS0+aW9zX2J1ZmZl ciksIDAsIE5WTUVfU1FfRU5UUllfU0laRSAqIE5WTUVfUVVFVUVfU0laRSk7CisKKyAgc3RydWN0 IG52bWVfc19xdWV1ZV9lbnRyeSBlID0geworICAgIC5kd1swXSAgPSAweDAxLAorICAgIC5kd1s2 XSAgPSBncnViX2RtYV9nZXRfcGh5cyhudm1lLT5pb3NfYnVmZmVyKSwKKyAgICAuZHdbMTBdID0g KChOVk1FX1FVRVVFX1NJWkUgLSAxKSA8PCAxNikgfCBpb3MgPj4gMSwKKyAgICAuZHdbMTFdID0g KDEgPDwgMTYpIHwgMSwKKyAgfTsKKworICBpbnQgcmVzID0gbnZtZV9jbWQobnZtZSwgTlZNRV9B RE1JTl9RVUVVRSwgJmUpOworICBpZiAocmVzKSB7CisgICAgZ3J1Yl9kcHJpbnRmKCJudm1lIiwg Ik5WTWUgRVJST1I6IG52bWVfY21kIHJldHVybmVkIHdpdGggJWkuXG4iLCByZXMpOworICAgIGdy dWJfZG1hX2ZyZWUobnZtZS0+aW9zX2J1ZmZlcik7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisg IGdydWJfdWludDhfdCBjYXBfZHN0cmQgPSAobnZtZS0+cmVncy0+Y2FwID4+IDMyKSAmIDB4ZjsK KyAgbnZtZS0+cXVldWVbaW9zXS5iYXNlID0gbnZtZS0+aW9zX2J1ZmZlcjsKKyAgbnZtZS0+cXVl dWVbaW9zXS5iZWxsID0gKHZvbGF0aWxlIGdydWJfdWludDMyX3QgKikgbnZtZS0+cmVncyArIDB4 MTAwMCAvIDQgKyAoaW9zICogKDEgPDwgY2FwX2RzdHJkKSk7CisgIG52bWUtPnF1ZXVlW2lvc10u aWR4ID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2lvX2NvbXBsZXRp b25fcXVldWUoc3RydWN0IGdydWJfbnZtZV9kZXZpY2UgKm52bWUpCit7CisgIG52bWUtPmlvY19i dWZmZXIgPSBncnViX21lbWFsaWduX2RtYTMyKDB4MTAwMCwgTlZNRV9DUV9FTlRSWV9TSVpFICog TlZNRV9RVUVVRV9TSVpFKTsKKyAgaWYgKCFudm1lLT5pb2NfYnVmZmVyKSB7CisgICAgZ3J1Yl9k cHJpbnRmKCJudm1lIiwgIk5WTWUgRVJST1I6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9y IGlvIGNvbXBsZXRpb24gcXVldWUuXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZ3J1Yl9t ZW1zZXQoKHZvaWQgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQobnZtZS0+aW9jX2J1ZmZlciksIDAsIE5W TUVfQ1FfRU5UUllfU0laRSAqIE5WTUVfUVVFVUVfU0laRSk7CisKKyAgY29uc3Qgc3RydWN0IG52 bWVfc19xdWV1ZV9lbnRyeSBlID0geworICAgIC5kd1swXSAgPSAweDA1LAorICAgIC5kd1s2XSAg PSBncnViX2RtYV9nZXRfcGh5cyhudm1lLT5pb2NfYnVmZmVyKSwKKyAgICAuZHdbMTBdID0gKChO Vk1FX1FVRVVFX1NJWkUgLSAxKSA8PCAxNikgfCBpb2MgPj4gMSwKKyAgICAuZHdbMTFdID0gMSwK KyAgfTsKKworICBpbnQgcmVzID0gbnZtZV9jbWQobnZtZSwgTlZNRV9BRE1JTl9RVUVVRSwgJmUp OworICBpZiAocmVzKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZigibnZtZSIsICJOVk1lIEVS Uk9SOiBudm1lX2NtZCByZXR1cm5lZCB3aXRoICVpLlxuIiwgcmVzKTsKKyAgICAgIGdydWJfZG1h X2ZyZWUobnZtZS0+aW9jX2J1ZmZlcik7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICBn cnViX3VpbnQ4X3QgY2FwX2RzdHJkID0gKG52bWUtPnJlZ3MtPmNhcCA+PiAzMikgJiAweGY7Cisg IG52bWUtPnF1ZXVlW2lvY10uYmFzZSAgPSBudm1lLT5pb2NfYnVmZmVyOworICBudm1lLT5xdWV1 ZVtpb2NdLmJlbGwgID0gKHZvbGF0aWxlIGdydWJfdWludDMyX3QgKikgbnZtZS0+cmVncyArIDB4 MTAwMCAvIDQgKyAoaW9jICogKDEgPDwgY2FwX2RzdHJkKSk7CisgIG52bWUtPnF1ZXVlW2lvY10u aWR4ICAgPSAwOworICBudm1lLT5xdWV1ZVtpb2NdLnJvdW5kID0gMDsKKworICByZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpZGVudGlmeShzdHJ1Y3QgZ3J1Yl9udm1lX2RldmljZSAqbnZtZSkK K3sKKyAgbnZtZS0+aWRlbnRfYnVmZmVyID0gZ3J1Yl9tZW1hbGlnbl9kbWEzMigweDEwMDAsIDB4 MTAwMCk7CisgIGlmICghbnZtZS0+aWRlbnRfYnVmZmVyKSB7CisgICAgZ3J1Yl9kcHJpbnRmKCJu dm1lIiwgIk5WTWUgRVJST1I6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZGVudCBidWZmZXIuXG4iKTsK KyAgICByZXR1cm4gLTE7CisgIH0KKyAgZ3J1Yl9tZW1zZXQoKHZvaWQgKikgZ3J1Yl9kbWFfZ2V0 X3ZpcnQobnZtZS0+aWRlbnRfYnVmZmVyKSwgMCwgMHgxMDAwKTsKKworICBjb25zdCBzdHJ1Y3Qg bnZtZV9zX3F1ZXVlX2VudHJ5IGUgPSB7CisgICAgLmR3WzBdICA9IDB4MDYsCisgICAgLmR3WzFd ICA9IDB4MDEsCisgICAgLmR3WzJdICA9IDB4MDAsCisgICAgLmR3WzZdICA9IGdydWJfZG1hX2dl dF9waHlzKG52bWUtPmlkZW50X2J1ZmZlciksCisgICAgLmR3WzEwXSA9IDB4MDAsCisgIH07CisK KyAgaW50IHJlcyA9IG52bWVfY21kKG52bWUsIE5WTUVfQURNSU5fUVVFVUUsICZlKTsKKyAgaWYg KHJlcykKKyAgICB7CisgICAgICBncnViX2RwcmludGYoIm52bWUiLCAiTlZNZSBFUlJPUjogbnZt ZV9jbWQgcmV0dXJuZWQgd2l0aCAlaS5cbiIsIHJlcyk7CisgICAgICBncnViX21lbXNldCgodm9p ZCAqKSBncnViX2RtYV9nZXRfdmlydChudm1lLT5pZGVudF9idWZmZXIpLCAwLCAweDEwMDApOwor ICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgc3RydWN0IG52bWVfaWRlbnRfYmxvY2sgKm52 bWVfaWRlbnQgPSAodm9pZCAqKSBncnViX2RtYV9nZXRfdmlydChudm1lLT5pZGVudF9idWZmZXIp OworICBudm1lLT50b3RhbF9zZWN0b3JzID0gbnZtZV9pZGVudC0+bnN6ZTsKKyAgaW50IHNlbGVj dGVkX2xiYWYgPSBudm1lX2lkZW50LT5mbGJhcyAmIDB4ZjsKKyAgbnZtZS0+bG9nX3NlY3Rvcl9z aXplID0gKG52bWVfaWRlbnQtPmxiYWZbc2VsZWN0ZWRfbGJhZl0gPj4gMTYpICYgMHhmZjsKKwor ICBncnViX2RwcmludGYoIm52bWUiLCAiRGV0ZWN0ZWQgZGlzayB3aXRoICVsbGQgc2VjdG9ycyBv ZiAyXiVkIGJ5dGVzIGVhY2hcbiIsIChsb25nIGxvbmcpIG52bWUtPnRvdGFsX3NlY3RvcnMsIG52 bWUtPmxvZ19zZWN0b3Jfc2l6ZSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVs ZXRlX2lvX3N1Ym1pc3Npb25fcXVldWUoc3RydWN0IGdydWJfbnZtZV9kZXZpY2UgKm52bWUpCit7 CisJY29uc3Qgc3RydWN0IG52bWVfc19xdWV1ZV9lbnRyeSBlID0geworCQkuZHdbMF0gID0gMCwK KwkJLmR3WzEwXSA9IGlvcywKKwl9OworCisJaW50IHJlcyA9IG52bWVfY21kKG52bWUsIE5WTUVf QURNSU5fUVVFVUUsICZlKTsKKworCWdydWJfZG1hX2ZyZWUobnZtZS0+aW9zX2J1ZmZlcik7CisJ bnZtZS0+cXVldWVbaW9zXS5iYXNlID0gTlVMTDsKKwludm1lLT5xdWV1ZVtpb3NdLmJlbGwgPSBO VUxMOworCW52bWUtPnF1ZXVlW2lvc10uaWR4ICA9IDA7CisJcmV0dXJuIHJlczsKK30KKworc3Rh dGljIGludCBkZWxldGVfaW9fY29tcGxldGlvbl9xdWV1ZShzdHJ1Y3QgZ3J1Yl9udm1lX2Rldmlj ZSAqbnZtZSkKK3sKKwljb25zdCBzdHJ1Y3QgbnZtZV9zX3F1ZXVlX2VudHJ5IGUgPSB7CisJCS5k d1swXSAgPSAxLAorCQkuZHdbMTBdID0gaW9jLAorCX07CisKKwlpbnQgcmVzID0gbnZtZV9jbWQo bnZtZSwgTlZNRV9BRE1JTl9RVUVVRSwgJmUpOworCWdydWJfZG1hX2ZyZWUobnZtZS0+aW9jX2J1 ZmZlcik7CisKKwludm1lLT5xdWV1ZVtpb2NdLmJhc2UgID0gTlVMTDsKKwludm1lLT5xdWV1ZVtp b2NdLmJlbGwgID0gTlVMTDsKKwludm1lLT5xdWV1ZVtpb2NdLmlkeCAgID0gMDsKKwludm1lLT5x dWV1ZVtpb2NdLnJvdW5kID0gMDsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50CitncnVi X252bWVfcGNpaW5pdCAoZ3J1Yl9wY2lfZGV2aWNlX3QgZGV2LAorCQkgICBncnViX3BjaV9pZF90 IHBjaWlkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKwkJICAgdm9pZCAqZGF0YSBfX2F0dHJp YnV0ZV9fICgodW51c2VkKSkpCit7CisgIGdydWJfcGNpX2FkZHJlc3NfdCBhZGRyOworICBncnVi X3VpbnQzMl90IGNsYXNzOworICBncnViX3VpbnQ2NF90IGJhcjsKKyAgdm9sYXRpbGUgc3RydWN0 IGdydWJfbnZtZV9tbWlvX3JlZyAqbW1pb19yZWc7CisKKyAgLyogUmVhZCBjbGFzcy4gICovCisg IGFkZHIgPSBncnViX3BjaV9tYWtlX2FkZHJlc3MgKGRldiwgR1JVQl9QQ0lfUkVHX0NMQVNTKTsK KyAgY2xhc3MgPSBncnViX3BjaV9yZWFkIChhZGRyKTsKKworICAvKiBDaGVjayBpZiB0aGlzIGNs YXNzIElEIG1hdGNoZXMgdGhhdCBvZiBhIFBDSSBOVk1lIENvbnRyb2xsZXIuICAqLworICBpZiAo Y2xhc3MgPj4gOCAhPSAweDAxMDgwMikKKyAgICByZXR1cm4gMDsKKworICBhZGRyID0gZ3J1Yl9w Y2lfbWFrZV9hZGRyZXNzIChkZXYsIEdSVUJfUENJX1JFR19BRERSRVNTX1JFRzApOworCisgIGJh ciA9IGdydWJfcGNpX3JlYWQgKGFkZHIpOworCisgIGlmICgoYmFyICYgKEdSVUJfUENJX0FERFJf U1BBQ0VfTUFTSyB8IEdSVUJfUENJX0FERFJfTUVNX1RZUEVfTUFTSworCSAgICAgIHwgR1JVQl9Q Q0lfQUREUl9NRU1fUFJFRkVUQ0gpKQorICAgICAgIT0gKEdSVUJfUENJX0FERFJfU1BBQ0VfTUVN T1JZIHwgR1JVQl9QQ0lfQUREUl9NRU1fVFlQRV82NCkpCisgICAgcmV0dXJuIDA7CisKKyAgYWRk ciA9IGdydWJfcGNpX21ha2VfYWRkcmVzcyAoZGV2LCBHUlVCX1BDSV9SRUdfQUREUkVTU19SRUcx KTsKKworICBiYXIgfD0gKChncnViX3VpbnQ2NF90KSBncnViX3BjaV9yZWFkIChhZGRyKSkgPDwg MzI7CisKKyAgYWRkciA9IGdydWJfcGNpX21ha2VfYWRkcmVzcyAoZGV2LCBHUlVCX1BDSV9SRUdf Q09NTUFORCk7CisgIGdydWJfcGNpX3dyaXRlX3dvcmQgKGFkZHIsIGdydWJfcGNpX3JlYWRfd29y ZCAoYWRkcikKKwkJICAgIHwgR1JVQl9QQ0lfQ09NTUFORF9NRU1fRU5BQkxFRCk7CisKKyAgbW1p b19yZWcgPSBncnViX3BjaV9kZXZpY2VfbWFwX3JhbmdlIChkZXYsIGJhciAmIH4weGZVTEwsCisJ CQkJICAgc2l6ZW9mICgqbW1pb19yZWcpKTsKKyAgZ3J1Yl9kcHJpbnRmICgibnZtZSIsICJkZXY6 ICV4OiV4LiV4XG4iLCBkZXYuYnVzLCBkZXYuZGV2aWNlLCBkZXYuZnVuY3Rpb24pOworCisgIGlm ICghKG1taW9fcmVnLT5jYXAgJiAoMUxMIDw8IDM3KSkpIHsKKyAgICBncnViX2RwcmludGYgKCJu dm1lIiwgIm52bWUgY29tbWFuZCBzZXQgbm90IHN1cHBvcnRlZFxuIik7CisgICAgcmV0dXJuIDA7 CisgIH0KKworICBtbWlvX3JlZy0+Y29udHJvbGxlcl9jb25maWcgPSAwOworCisgIHN0cnVjdCBn cnViX252bWVfZGV2aWNlICpudm1lZGV2ID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoKm52bWVkZXYp KTsKKyAgaWYgKCFudm1lZGV2KQorICAgIHJldHVybiAwOworCisgIG52bWVkZXYtPnJlZ3MgPSBt bWlvX3JlZzsKKyAgbnZtZWRldi0+bnVtID0gbnVtZGV2cysrOworCisgIGdydWJfaW50MzJfdCBt YXhfdGltZW91dF9tcyA9ICgobW1pb19yZWctPmNhcCA+PiAyNCkgJiAweGZmKSAqIDUwMDsKKyAg Z3J1Yl9pbnQzMl90IHRpbWVvdXRfbXMgPSBtYXhfdGltZW91dF9tczsKKyAgd2hpbGUgKDEpCisg ICAgeworICAgICAgZ3J1Yl91aW50OF90IHN0YXR1cyA9IG1taW9fcmVnLT5jb250cm9sbGVyX3N0 YXR1cyAmIDB4MzsKKyAgICAgIGlmIChzdGF0dXMgPT0gMHgyKQorCXsKKwkgIGdydWJfZHByaW50 ZigibnZtZSIsICJOVk1lIEVSUk9SOiBGYWlsZWQgdG8gZGlzYWJsZSBjb250cm9sbGVyLiBGQVRB TCBFUlJPUlxuIik7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBpZiAoc3RhdHVzID09IDApCisJ YnJlYWs7CisgICAgICBpZiAodGltZW91dF9tcyA8IDApCisJeworCSAgZ3J1Yl9kcHJpbnRmKCJu dm1lIiwgIk5WTWUgRVJST1I6IEZhaWxlZCB0byBkaXNhYmxlIGNvbnRyb2xsZXIuIFRpbWVvdXQu XG4iKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIHRpbWVvdXRfbXMgLT0gMTA7CisgICAgICBn cnViX21pbGxpc2xlZXAoMTApOworICAgIH0KKworICB0aW1lb3V0X21zID0gbWF4X3RpbWVvdXRf bXM7CisgIGlmIChjcmVhdGVfYWRtaW5fcXVldWVzKG52bWVkZXYpKQorICAgIHsKKyAgICAgIGdy dWJfZHByaW50ZigibnZtZSIsICJOVk1lIEVSUk9SOiBGYWlsZWQgdG8gY3JlYXRlIGFkbWluIHF1 ZXVlcy4gRkFUQUwgRVJST1JcbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIG1taW9f cmVnLT5jb250cm9sbGVyX2NvbmZpZyA9IE5WTUVfQ0NfRU4gfCBOVk1FX0NDX0NTUyB8IE5WTUVf Q0NfTVBTIHwgTlZNRV9DQ19BTVMgfCBOVk1FX0NDX1NITgorICAgIHwgTlZNRV9DQ19JT1NRRVMg fCBOVk1FX0NDX0lPQ1FFUzsKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgZ3J1Yl91aW50OF90 IHN0YXR1cyA9IG1taW9fcmVnLT5jb250cm9sbGVyX3N0YXR1cyAmIDB4MzsKKyAgICAgIGlmIChz dGF0dXMgPT0gMHgyKSB7CisJZ3J1Yl9kcHJpbnRmKCJudm1lIiwgIk5WTWUgRVJST1I6IEZhaWxl ZCB0byBlbmFibGUgY29udHJvbGxlci4gRkFUQUwgRVJST1JcbiIpOworCW1taW9fcmVnLT5jb250 cm9sbGVyX2NvbmZpZyA9IDA7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgICBpZiAoc3RhdHVz ID09IDEpCisJYnJlYWs7CisgICAgICBpZiAodGltZW91dF9tcyA8IDApIHsKKwlncnViX2Rwcmlu dGYoIm52bWUiLCAiTlZNZSBFUlJPUjogRmFpbGVkIHRvIGVuYWJsZSBjb250cm9sbGVyLiBUaW1l b3V0LlxuIik7CisJbW1pb19yZWctPmNvbnRyb2xsZXJfY29uZmlnID0gMDsKKwlyZXR1cm4gMDsK KyAgICAgIH0KKyAgICAgIHRpbWVvdXRfbXMgLT0gMTA7CisgICAgICBncnViX21pbGxpc2xlZXAo MTApOworICAgIH0KKworICBudm1lZGV2LT5wcnBfbGlzdCA9IGdydWJfbWVtYWxpZ25fZG1hMzIo MHgxMDAwLCAweDEwMDApOworICBpZiAoIW52bWVkZXYtPnBycF9saXN0KSB7CisgICAgbW1pb19y ZWctPmNvbnRyb2xsZXJfY29uZmlnID0gMDsKKyAgICBncnViX2ZyZWUgKG52bWVkZXYpOworICAg IHJldHVybiAwOworICB9CisKKyAgYWRkciA9IGdydWJfcGNpX21ha2VfYWRkcmVzcyAoZGV2LCBH UlVCX1BDSV9SRUdfQ09NTUFORCk7CisgIGdydWJfcGNpX3dyaXRlX3dvcmQgKGFkZHIsIGdydWJf cGNpX3JlYWRfd29yZCAoYWRkcikgfCBHUlVCX1BDSV9DT01NQU5EX0JVU19NQVNURVIpOworCisg IGNyZWF0ZV9pb19jb21wbGV0aW9uX3F1ZXVlKG52bWVkZXYpOworICBjcmVhdGVfaW9fc3VibWlz c2lvbl9xdWV1ZShudm1lZGV2KTsKKworICBpZGVudGlmeShudm1lZGV2KTsKKyAgCisgIGdydWJf bGlzdF9wdXNoIChHUlVCX0FTX0xJU1RfUCAoJmdydWJfbnZtZV9kZXZpY2VzKSwKKwkJICBHUlVC X0FTX0xJU1QgKG52bWVkZXYpKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBncnViX2Vycl90 CitncnViX252bWVfaW5pdGlhbGl6ZSAodm9pZCkKK3sKKyAgZ3J1Yl9wY2lfaXRlcmF0ZSAoZ3J1 Yl9udm1lX3BjaWluaXQsIE5VTEwpOworICByZXR1cm4gZ3J1Yl9lcnJubzsKK30KKworc3RhdGlj IGdydWJfZXJyX3QKK2dydWJfbnZtZV9maW5pX2h3IChpbnQgbm9yZXR1cm4gX19hdHRyaWJ1dGVf XyAoKHVudXNlZCkpKQoreworICBzdHJ1Y3QgZ3J1Yl9udm1lX2RldmljZSAqZGV2OworCisgIGZv ciAoZGV2ID0gZ3J1Yl9udm1lX2RldmljZXM7IGRldjsgZGV2ID0gZGV2LT5uZXh0KQorICAgIHsK KyAgICAgIGRlbGV0ZV9pb19zdWJtaXNzaW9uX3F1ZXVlKGRldik7CisgICAgICBkZWxldGVfaW9f Y29tcGxldGlvbl9xdWV1ZShkZXYpOworICAgICAgZGV2LT5yZWdzLT5jb250cm9sbGVyX2NvbmZp ZyA9IDA7CisgICAgICAvKiBUT0RPOiB3YWl0IGZvciBjb21wbGV0aXRpb24uICAqLworICAgIH0K KyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJf bnZtZV9yZXN0b3JlX2h3ICh2b2lkKQoreworICBzdHJ1Y3QgZ3J1Yl9udm1lX2RldmljZSAqKnBk ZXY7CisKKyAgZm9yIChwZGV2ID0gJmdydWJfbnZtZV9kZXZpY2VzOyAqcGRldjsgcGRldiA9ICYo KCpwZGV2KS0+bmV4dCkpCisgICAgeworICAgICAgKCpwZGV2KS0+cmVncy0+Y29udHJvbGxlcl9j b25maWcgPSBOVk1FX0NDX0VOIHwgTlZNRV9DQ19DU1MgfCBOVk1FX0NDX01QUyB8IE5WTUVfQ0Nf QU1TIHwgTlZNRV9DQ19TSE4KKwl8IE5WTUVfQ0NfSU9TUUVTIHwgTlZNRV9DQ19JT0NRRVM7Cisg ICAgICBjcmVhdGVfaW9fY29tcGxldGlvbl9xdWV1ZSgqcGRldik7CisgICAgICBjcmVhdGVfaW9f c3VibWlzc2lvbl9xdWV1ZSgqcGRldik7CisgICAgICAvKiBUT0RPOiBFcnJvciBoYW5kbGluZy4g ICovCisgICAgfQorICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworCisMCisKK3N0YXRpYyBp bnQKK2dydWJfbnZtZV9pdGVyYXRlIChncnViX2Rpc2tfZGV2X2l0ZXJhdGVfaG9va190IGhvb2ss IHZvaWQgKmhvb2tfZGF0YSwKKwkJICBncnViX2Rpc2tfcHVsbF90IHB1bGwpCit7CisgIHN0cnVj dCBncnViX252bWVfZGV2aWNlICpkZXY7CisKKyAgaWYgKHB1bGwgIT0gR1JVQl9ESVNLX1BVTExf Tk9ORSkKKyAgICByZXR1cm4gMDsKKworICBGT1JfTElTVF9FTEVNRU5UUyhkZXYsIGdydWJfbnZt ZV9kZXZpY2VzKQorICAgIHsKKyAgICAgIGNoYXIgZGV2bmFtZVs0MF07CisgICAgICAvKiBUT0RP OiBPdGhlciBuYW1lc3BhY2VzLiAgKi8KKyAgICAgIGdydWJfc25wcmludGYgKGRldm5hbWUsIHNp emVvZiAoZGV2bmFtZSksCisJCSAgICAgIm52bWUlZG4lZCIsIGRldi0+bnVtLCAxKTsKKyAgICAg IGlmIChob29rIChkZXZuYW1lLCBob29rX2RhdGEpKQorCXJldHVybiAxOworICAgIH0KKworICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfbnZtZV9vcGVuIChjb25zdCBj aGFyICpuYW1lLCBncnViX2Rpc2tfdCBkaXNrKQoreworICBjb25zdCBjaGFyICpyZXN0OworICBp ZiAoZ3J1Yl9tZW1jbXAobmFtZSwgIm52bWUiLCA0KSAhPSAwIHx8ICFncnViX2lzZGlnaXQobmFt ZVs0XSkpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX1VOS05PV05fREVWSUNFLCAi bm90IGFuIE5WTWUgZGlzayIpOworICBpbnQgZGV2bnVtID0gZ3J1Yl9zdHJ0b3VsIChuYW1lICsg NCwgJnJlc3QsIDApOworICBpZiAoKnJlc3QgIT0gJ24nKQorICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9VTktOT1dOX0RFVklDRSwgIm5vdCBhbiBOVk1lIGRpc2siKTsKKyAgaW50IG5h bWVzcGFjZSA9IGdydWJfc3RydG91bCAocmVzdCArIDEsIDAsIDApOworCisgIHN0cnVjdCBncnVi X252bWVfZGV2aWNlICpkZXY7CisKKyAgRk9SX0xJU1RfRUxFTUVOVFMoZGV2LCBncnViX252bWVf ZGV2aWNlcykKKyAgICBpZiAoZGV2LT5udW0gPT0gZGV2bnVtKQorICAgICAgeworCWlmIChuYW1l c3BhY2UgIT0gMSkKKwkgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9VTktOT1dOX0RFVklD RSwgInVua25vd24gTlZNZSBuYW1lc3BhY2UiKTsKKworCWRpc2stPnRvdGFsX3NlY3RvcnMgPSBk ZXYtPnRvdGFsX3NlY3RvcnM7CisJZGlzay0+bWF4X2FnZ2xvbWVyYXRlID0gNTEyOworCisJZGlz ay0+bG9nX3NlY3Rvcl9zaXplID0gZGV2LT5sb2dfc2VjdG9yX3NpemU7CisJZGlzay0+aWQgPSAo ZGV2bnVtIDw8IDgpIHwgbmFtZXNwYWNlOworCWRpc2stPmRhdGEgPSBkZXY7CisJcmV0dXJuIDA7 CisgICAgICB9CisKKyAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX1VOS05PV05fREVWSUNF LCAidW5rbm93biBOVk1lIGRpc2siKTsKK30KKworc3RhdGljIHZvaWQKK2dydWJfbnZtZV9jbG9z ZSAoZ3J1Yl9kaXNrX3QgZGlzaykKK3sKKyAgKHZvaWQpIGRpc2s7Cit9CisKK3N0YXRpYyBncnVi X2Vycl90Citudm1lX3JlYWR3cml0ZSAoc3RydWN0IGdydWJfbnZtZV9kZXZpY2UgKmRldiwgaW50 IG5hbWVzcGFjZSwKKwkJZ3J1Yl9kaXNrX2FkZHJfdCBzZWN0b3IsIGdydWJfc2l6ZV90IHNpemUs IGNoYXIgKmJ1ZiwgaW50IGlzX3dyaXRlKQoreworICAodm9pZCkgbmFtZXNwYWNlOworCisgIGlm IChzaXplID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpemUgPiA1MTIpCisgICAgcmV0 dXJuIGdydWJfZXJyb3IoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAib3ZlcmxvbmcgbnZtZSByZWFk Iik7CisKKyAgLyogVGhpcyBhc3N1bWVzIHZpcnQgPT0gcGh5cyB3aGljaCBpcyB0cnVlIG9uIHBs YXRmb3JtcyB3aGVyZSB3ZSBzdXBwb3J0IG52bWUuICAqLworICBncnViX3VpbnQ2NF90IGJ1ZmZl cl9waHlzID0gKGdydWJfYWRkcl90KSBidWY7CisKKyAgc3RydWN0IG52bWVfc19xdWV1ZV9lbnRy eSBlID0geworICAgIC5kd1swXSA9IGlzX3dyaXRlID8gMHgwMSA6IDB4MDIsCisgICAgLmR3WzFd ID0gMHgxLAorICAgIC5kd1s2XSA9IChncnViX2FkZHJfdCkgYnVmZmVyX3BoeXMsCisgICAgLmR3 WzddID0gKGdydWJfYWRkcl90KSAoYnVmZmVyX3BoeXMgPj4gMzIpLAorICAgIC5kd1sxMF0gPSBz ZWN0b3IsCisgICAgLmR3WzExXSA9IHNlY3RvciA+PiAzMiwKKyAgICAuZHdbMTJdID0gc2l6ZSAt IDEsCisgIH07CisKKyAgY29uc3QgZ3J1Yl91aW50NjRfdCBzdGFydF9wYWdlID0gYnVmZmVyX3Bo eXMgPj4gMTI7CisgIGNvbnN0IGdydWJfdWludDY0X3QgZW5kX3BhZ2UgPSAoYnVmZmVyX3BoeXMg KyAoc2l6ZSA8PCBkZXYtPmxvZ19zZWN0b3Jfc2l6ZSkgLSAxKSA+PiAxMjsKKyAgaWYgKGVuZF9w YWdlID09IHN0YXJ0X3BhZ2UpIHsKKyAgICAvKiBObyBwYWdlIGNyb3NzaW5nLCBQUlAyIGlzIHJl c2VydmVkICovCisgIH0gZWxzZSBpZiAoZW5kX3BhZ2UgPT0gc3RhcnRfcGFnZSArIDEpIHsKKyAg ICAvKiBDcm9zc2luZyBleGFjdGx5IG9uZSBwYWdlIGJvdW5kYXJ5LCBQUlAyIGlzIHNlY29uZCBw YWdlICovCisgICAgZS5kd1s4XSA9IChidWZmZXJfcGh5cyArIDB4MTAwMCkgJiB+MHhmZmY7Cisg IH0gZWxzZSB7CisgICAgLyogVXNlIGEgc2luZ2xlIHBhZ2UgYXMgUFJQIGxpc3QsIFBSUDIgcG9p bnRzIHRvIHRoZSBsaXN0ICovCisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdm9sYXRpbGUgZ3J1 Yl91aW50NjRfdCAqcHJwX2xpc3QgPSBncnViX2RtYV9nZXRfdmlydChkZXYtPnBycF9saXN0KTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgZW5kX3BhZ2UgLSBzdGFydF9wYWdlOyArK2kpIHsKKyAgICAg IGJ1ZmZlcl9waHlzICs9IDB4MTAwMDsKKyAgICAgIHBycF9saXN0W2ldID0gYnVmZmVyX3BoeXMg JiB+MHhmZmY7CisgICAgfQorICAgIGUuZHdbOF0gPSBncnViX2RtYV9nZXRfcGh5cyhkZXYtPnBy cF9saXN0KTsKKyAgfQorCisgIGludCBpb19lcnIgPSBudm1lX2NtZChkZXYsIGlvcywgJmUpOwor ICBpZiAoaW9fZXJyKQorICAgIHJldHVybiBncnViX2Vycm9yKEdSVUJfRVJSX0lPLCAiTlZNZSBl cnJvciAlZCIsIGlvX2Vycik7CisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMg Z3J1Yl9lcnJfdAorZ3J1Yl9udm1lX3JlYWQgKGdydWJfZGlza190IGRpc2ssIGdydWJfZGlza19h ZGRyX3Qgc2VjdG9yLAorCQlncnViX3NpemVfdCBzaXplLCBjaGFyICpidWYpCit7CisgIHN0cnVj dCBncnViX252bWVfZGV2aWNlICpkZXYgPSBkaXNrLT5kYXRhOworICBpbnQgbmFtZXNwYWNlID0g ZGlzay0+aWQgJiAweGZmOworCisgIHJldHVybiBudm1lX3JlYWR3cml0ZShkZXYsIG5hbWVzcGFj ZSwgc2VjdG9yLCBzaXplLCBidWYsIDApOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9u dm1lX3dyaXRlIChncnViX2Rpc2tfdCBkaXNrLCBncnViX2Rpc2tfYWRkcl90IHNlY3RvciwKKwkJ IGdydWJfc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKyAgc3RydWN0IGdydWJfbnZt ZV9kZXZpY2UgKmRldiA9IGRpc2stPmRhdGE7CisgIGludCBuYW1lc3BhY2UgPSBkaXNrLT5pZCAm IDB4ZmY7CisKKyAgcmV0dXJuIG52bWVfcmVhZHdyaXRlKGRldiwgbmFtZXNwYWNlLCBzZWN0b3Is IHNpemUsIChjaGFyICopYnVmLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBncnViX2Rpc2tfZGV2 IGdydWJfbnZtZV9kZXYgPQorICB7CisgICAgLm5hbWUgPSAibnZtZSIsCisgICAgLmlkID0gR1JV Ql9ESVNLX0RFVklDRV9OVk1FX0lELAorICAgIC5kaXNrX2l0ZXJhdGUgPSBncnViX252bWVfaXRl cmF0ZSwKKyAgICAuZGlza19vcGVuID0gZ3J1Yl9udm1lX29wZW4sCisgICAgLmRpc2tfY2xvc2Ug PSBncnViX252bWVfY2xvc2UsCisgICAgLmRpc2tfcmVhZCA9IGdydWJfbnZtZV9yZWFkLAorICAg IC5kaXNrX3dyaXRlID0gZ3J1Yl9udm1lX3dyaXRlLAorICAgIC5uZXh0ID0gMAorICB9OworCisM CisKK3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9wcmVib290ICpmaW5pX2huZDsKKworR1JVQl9NT0RfSU5J VChudm1lKQoreworICBncnViX3N0b3BfZGlza19maXJtd2FyZSAoKTsKKworICAvKiBOVk1lIGlu aXRpYWxpemF0aW9uLiAgKi8KKyAgZ3J1Yl9udm1lX2luaXRpYWxpemUgKCk7CisKKyAgZ3J1Yl9k aXNrX2Rldl9yZWdpc3RlciAoJmdydWJfbnZtZV9kZXYpOworCisgIGZpbmlfaG5kID0gZ3J1Yl9s b2FkZXJfcmVnaXN0ZXJfcHJlYm9vdF9ob29rIChncnViX252bWVfZmluaV9odywKKwkJCQkJCWdy dWJfbnZtZV9yZXN0b3JlX2h3LAorCQkJCQkJR1JVQl9MT0FERVJfUFJFQk9PVF9IT09LX1BSSU9f RElTSyk7Cit9CisKK0dSVUJfTU9EX0ZJTkkobnZtZSkKK3sKKyAgZ3J1Yl9udm1lX2ZpbmlfaHcg KDApOworICBncnViX2xvYWRlcl91bnJlZ2lzdGVyX3ByZWJvb3RfaG9vayAoZmluaV9obmQpOwor CisgIGdydWJfZGlza19kZXZfdW5yZWdpc3RlciAoJmdydWJfbnZtZV9kZXYpOworfQpkaWZmIC0t Z2l0IGEvaW5jbHVkZS9ncnViL2Rpc2suaCBiL2luY2x1ZGUvZ3J1Yi9kaXNrLmgKaW5kZXggZmJm MjNkZjdmLi5mY2U1MmMyMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3J1Yi9kaXNrLmgKKysrIGIv aW5jbHVkZS9ncnViL2Rpc2suaApAQCAtNTIsNiArNTIsNyBAQCBlbnVtIGdydWJfZGlza19kZXZf aWQKICAgICBHUlVCX0RJU0tfREVWSUNFX1VCT09URElTS19JRCwKICAgICBHUlVCX0RJU0tfREVW SUNFX1hFTiwKICAgICBHUlVCX0RJU0tfREVWSUNFX09CRElTS19JRCwKKyAgICBHUlVCX0RJU0tf REVWSUNFX05WTUVfSUQsCiAgIH07CiAKIHN0cnVjdCBncnViX2Rpc2s7Ci0tIAoyLjM5LjIKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVs IG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21h aWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=