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 smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 F0FB8C77B73 for ; Thu, 27 Apr 2023 10:44:56 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 97FB0615DD; Thu, 27 Apr 2023 10:44:56 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 97FB0615DD Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=igel-co-jp.20221208.gappssmtp.com header.i=@igel-co-jp.20221208.gappssmtp.com header.a=rsa-sha256 header.s=20221208 header.b=OrS5RfBR X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SI0Y86xCs15o; Thu, 27 Apr 2023 10:44:55 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 94472606C0; Thu, 27 Apr 2023 10:44:54 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 94472606C0 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 71F2EC0037; Thu, 27 Apr 2023 10:44:54 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5EE8DC002A for ; Thu, 27 Apr 2023 10:44:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 3A26841DB1 for ; Thu, 27 Apr 2023 10:44:53 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 3A26841DB1 Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key) header.d=igel-co-jp.20221208.gappssmtp.com header.i=@igel-co-jp.20221208.gappssmtp.com header.a=rsa-sha256 header.s=20221208 header.b=OrS5RfBR X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NJmOCocz0yTo for ; Thu, 27 Apr 2023 10:44:51 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 3BA8F40569 Received: from mail-pf1-x436.google.com (mail-pf1-x436.google.com [IPv6:2607:f8b0:4864:20::436]) by smtp2.osuosl.org (Postfix) with ESMTPS id 3BA8F40569 for ; Thu, 27 Apr 2023 10:44:51 +0000 (UTC) Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-63b5c4c769aso10402759b3a.3 for ; Thu, 27 Apr 2023 03:44:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=igel-co-jp.20221208.gappssmtp.com; s=20221208; t=1682592290; x=1685184290; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jlK6/FmkNNZlMZq+BvSUnyB2WIdcX0Lfwqu93Kq+c+Y=; b=OrS5RfBRVwwxPdst8pbet162L6RgP+a63G4agFWciWPpHYfQQLCTqWQc2UZ9nzmzQY ny2LjUZgudcJl0GE3+ZC+fjbOQxrCkVfSLzct8Z+xt955Q3xYWon44H9djBOctPd24eA BZvB0qnZKdbOQ/oWQr3n/Jr3VgVdO+LvYbv/dbYo3fLLglLBnXzn4Cl8n4+uVdAMmuEK 41gnbmVIlY4pKTj+ZATFuZZYEBLYLiQBIf4ZanrV7RAe1CaE5VzEf6Ef0H+rA3fqTfMz h3TixyCTpDRkKvgz9RGxaIvroMdbvekw5Zq37we+giD28JQ30lk7ZHGaJNO91BuVCuTH iynw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682592290; x=1685184290; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jlK6/FmkNNZlMZq+BvSUnyB2WIdcX0Lfwqu93Kq+c+Y=; b=Y/9li9h0vwLXhLNeFhYLtjwi4zMe8vZR8eWuD4A5mevIXdUsXtZIQ3mVOXWw/7otvM BAl5iPCno86omAVr4jcRqfKrNq+8at77I+QsbgrS3Dz994d5lDQKM0lfaUKsbW3XiLQV uQCaujP+x0aTtNluqzgOx/oAypI7//z/adVRrAY/AYYyakKnLK/hHeKkptQlI9ojWVQ/ nkGpakP3P/X1pKAPNwKbrz3MbLKi8fFGM83msznsw5j9fOxTuS6GlkGcHLZx9BpFQ2T1 MaNp/Tu7WjDCz56tA/oUncQ6Ja9BpLgMDb24qSXggN25HzAJcHV7JAAX4jGCo2z0bLld ivCg== X-Gm-Message-State: AC+VfDwwz3MUnDd7/jqm6aWW4Q/vxE6xEn9QGFtgVNfIuAGbdHzaSxdY KY6x4DdSCZn60QgbOAaCM4EHjoctqoJDKyNk7UWhVA== X-Google-Smtp-Source: ACHHUZ49zgh+JgUZMFaClUTOZqVqjCpn44VsqiGE6SAhDGrQfjGogOhEGaP4Tm8G+0k/GA4cSbBHjw== X-Received: by 2002:a05:6a20:8f08:b0:f0:ec64:f3de with SMTP id b8-20020a056a208f0800b000f0ec64f3demr1491263pzk.25.1682592290547; Thu, 27 Apr 2023 03:44:50 -0700 (PDT) Received: from tyrell.hq.igel.co.jp (napt.igel.co.jp. [219.106.231.132]) by smtp.gmail.com with ESMTPSA id b3-20020a631b03000000b0050f93a3586fsm11029042pgb.37.2023.04.27.03.44.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 03:44:50 -0700 (PDT) From: Shunsuke Mie To: Lorenzo Pieralisi Subject: [RFC PATCH v2 3/3] PCI: endpoint: Add EP function driver to provide virtio-console functionality Date: Thu, 27 Apr 2023 19:44:28 +0900 Message-Id: <20230427104428.862643-4-mie@igel.co.jp> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230427104428.862643-1-mie@igel.co.jp> References: <20230427104428.862643-1-mie@igel.co.jp> MIME-Version: 1.0 Cc: Kishon Vijay Abraham I , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Randy Dunlap , "Michael S. Tsirkin" , linux-pci@vger.kernel.org, Manivannan Sadhasivam , Frank Li , linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, Ren Zhijie , Shunsuke Mie , Jon Mason , Bjorn Helgaas X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" QWRkIGEgbmV3IFBDSWUgZW5kcG9pbnQgZnVuY3Rpb24gZHJpdmVyIHRoYXQgd29ya3MgYXMgYSBw Y2kgdmlydGlvLWNvbnNvbGUKZGV2aWNlLiBUaGUgY29uc29sZSBjb25uZWN0IHRvIGVuZHBvaW50 IHNpZGUgY29uc29sZS4gSXQgZW5hYmxlcyB0bwpjb21tdW5pY2F0ZSBQQ0llIGhvc3QgYW5kIGVu ZHBvaW50LgoKQXJjaGl0ZWN0dXJlIGlzIGZvbGxvd2luZzoKCiDilIzilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKIOKUgnZpcnRpb2UgICAgIOKUgiAgICAgICAg IOKUgiAgICAgICAgICAgICAgICAgICAgICDilIJ2aXJ0aW8gICAgICDilIIKIOKUgmNvbnNvbGUg ZHJ2IOKUgiAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUkCAgICAgIOKUgmNvbnNvbGUgZHJ2IOKUggog4pSc4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSkICAgICAgICAg4pSCKHZpcnRpbyBjb25zb2xl4pSCICAgICAg 4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkCiDilIIgdmlydGlvIGJ1 cyDilIIgICAgICAgICDilIIgZGV2aWNlKSAgICAgICDilILil4TilIDilIDilIDilIDilrrilIIg dmlydGlvIGJ1cyDilIIKIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU pCAgICAgICAgIOKUnC0tLS0tLS0tLS0tLS0tLeKUpCAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUpAog4pSCICAgICAgICAgICAg4pSCICAgICAgICAg4pSCIHBj aSBlcCB2aXJ0aW8g4pSCICAgICAgICAgICAgICAgICAgIOKUggog4pSCICBwY2kgYnVzICAg4pSC ICAgICAgICAg4pSCICBjb25zb2xlIGRydiAg4pSCICAgICAgICAgICAgICAgICAgIOKUggog4pSC ICAgICAgICAgICAg4pSCICBwY2llICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSkICAgICAgICAgICAgICAgICAgIOKUggog4pSCICAgICAgICAgICAg 4pSCIOKXhOKUgOKUgOKUgOKUgOKUgOKWuiDilIIgIHBjaSBlcCBCdXMgICDilIIgICAgICAgICAg ICAgICAgICAg4pSCCiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgg ICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilJgKICAgUENJZSBSb290ICAgICAgICAgICAgICBQQ0llIEVuZHBvaW50CgpUaGlzIGRyaXZl ciBoYXMgdHdvIHJvbGVzLiBUaGUgZmlyc3QgaXMgYXMgYSBQQ0llIGVuZHBvaW50IHZpcnRpbyBj b25zb2xlCmZ1bmN0aW9uLCB3aGljaCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgUENJZSBlbmRw b2ludCBmcmFtZXdvcmsgYW5kIFBDSWUKRVAgdmlydGlvIGhlbHBlcnMuIFRoZSBzZWNvbmQgaXMg YXMgYSB2aXJ0dWFsIHZpcnRpbyBjb25zb2xlIGRldmljZQpjb25uZWN0ZWQgdG8gdGhlIHZpcnRp byBidXMgb24gUENJZSBlbmRwb2ludCBMaW51eC4KCkNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUg dHdvIGlzIGFjaGlldmVkIGJ5IGNvcHlpbmcgdGhlIHZpcnRxdWV1ZSBkYXRhCmJldHdlZW4gUENJ ZSByb290IGFuZCBlbmRwb2ludCwgcmVzcGVjdGl2ZWx5LgoKVGhpcyBpcyBhIHNpbXBsZSBpbXBs ZW1lbnRhdGlvbiBhbmQgZG9lcyBub3QgaW5jbHVkZSBmZWF0dXJlcyBvZgp2aXJ0aW8tY29uc29s ZSBzdWNoIGFzIE1VTFRJUE9SVCwgRU1FUkdfV1JJVEUsIGV0Yy4gQXMgYSByZXN1bHQsIGVhY2gK dmlydGlvIGNvbnNvbGUgZHJpdmVyIG9ubHkgZGlzcGxheXMgL2Rldi9odmMwLgoKQXMgYW4gZXhh bXBsZSBvZiB1c2FnZSwgYnkgc2V0dGluZyBnZXR0eSB0byAvZGV2L2h2YzAsIGl0IGlzIHBvc3Np YmxlIHRvCmxvZ2luIHRvIGFub3RoZXIgaG9zdC4KClNpZ25lZC1vZmYtYnk6IFNodW5zdWtlIE1p ZSA8bWllQGlnZWwuY28uanA+Ci0tLQpDaGFuZ2VzIGZyb20gdjI6Ci0gQ2hhbmdlIHRvIHVzZSBj b3B5IGZ1bmN0aW9ucyBiZXR3ZWVuIGtpb3ZzIG9mIHBjaS1lcGYtdmlydGlvLgoKIGRyaXZlcnMv cGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9LY29uZmlnICAgICAgICB8ICAxMiArCiBkcml2ZXJzL3Bj aS9lbmRwb2ludC9mdW5jdGlvbnMvTWFrZWZpbGUgICAgICAgfCAgIDEgKwogZHJpdmVycy9wY2kv ZW5kcG9pbnQvZnVuY3Rpb25zL3BjaS1lcGYtdmNvbi5jIHwgNTk2ICsrKysrKysrKysrKysrKysr KwogMyBmaWxlcyBjaGFuZ2VkLCA2MDkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9wY2ktZXBmLXZjb24uYwoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9LY29uZmlnIGIvZHJpdmVycy9wY2kv ZW5kcG9pbnQvZnVuY3Rpb25zL0tjb25maWcKaW5kZXggZmExYTZhNTY5YThmLi45Y2UyNjk4YjY3 ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9LY29uZmlnCisr KyBiL2RyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9LY29uZmlnCkBAIC00NCwzICs0NCwx NSBAQCBjb25maWcgUENJX0VQRl9WSVJUSU8KIAlzZWxlY3QgVkhPU1RfUklOR19JT01FTQogCWhl bHAKIAkgIEhlbHBlcnMgdG8gaW1wbGVtZW50IFBDSSB2aXJ0aW8gRW5kcG9pbnQgZnVuY3Rpb24K KworY29uZmlnIFBDSV9FUEZfVkNPTgorCXRyaXN0YXRlICJQQ0kgRW5kcG9pbnQgdmlyaXRvLWNv bnNvbGUgZHJpdmVyIgorCWRlcGVuZHMgb24gUENJX0VORFBPSU5UCisJc2VsZWN0IFZIT1NUX1JJ TkcKKwlzZWxlY3QgUENJX0VQRl9WSVJUSU8KKwloZWxwCisJICBQQ0llIEVuZHBvaW50IHZpcnRp by1jb25zb2xlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW5vLiBUaGlzIG1vZHVsZQorCSAgZW5hYmxl cyB0byBzaG93IHRoZSB2aXJ0aW8tY29uc29sZSBhcyBwY2kgZGV2aWNlIHRvIFBDSWUgaG9zdCBz aWRlLCBhbmQKKwkgIGFub3RoZXIgdmlydHVhbCB2aXJ0aW8tY29uc29sZSBkZXZpY2UgcmVnaXN0 ZXJzIHRvIGVuZHBvaW50IHN5c3RlbS4KKwkgIFRob3NlIGRldmljZXMgYXJlIGNvbm5lY3RlZCB2 aXJ0dWFsbHkgYW5kIGNhbiBjb21tdW5pY2F0ZSBlYWNoIG90aGVyLgorCmRpZmYgLS1naXQgYS9k cml2ZXJzL3BjaS9lbmRwb2ludC9mdW5jdGlvbnMvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9lbmRw b2ludC9mdW5jdGlvbnMvTWFrZWZpbGUKaW5kZXggYTk2ZjEyN2NlOTAwLi5iNDA1NjY4OWNlMzMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL3BjaS9lbmRwb2ludC9mdW5jdGlvbnMvTWFrZWZpbGUKQEAgLTcsMyArNyw0IEBA IG9iai0kKENPTkZJR19QQ0lfRVBGX1RFU1QpCQkrPSBwY2ktZXBmLXRlc3Qubwogb2JqLSQoQ09O RklHX1BDSV9FUEZfTlRCKQkJKz0gcGNpLWVwZi1udGIubwogb2JqLSQoQ09ORklHX1BDSV9FUEZf Vk5UQikgCQkrPSBwY2ktZXBmLXZudGIubwogb2JqLSQoQ09ORklHX1BDSV9FUEZfVklSVElPKQkJ Kz0gcGNpLWVwZi12aXJ0aW8ubworb2JqLSQoQ09ORklHX1BDSV9FUEZfVkNPTikJCSs9IHBjaS1l cGYtdmNvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9lbmRwb2ludC9mdW5jdGlvbnMvcGNp LWVwZi12Y29uLmMgYi9kcml2ZXJzL3BjaS9lbmRwb2ludC9mdW5jdGlvbnMvcGNpLWVwZi12Y29u LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMWY0MjQ3Y2QxMGYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9lbmRwb2ludC9mdW5jdGlvbnMvcGNpLWVw Zi12Y29uLmMKQEAgLTAsMCArMSw1OTYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wCisvKgorICogUENJIEVuZHBvaW50IGZ1bmN0aW9uIGRyaXZlciB0byBpbXBsaW1lbnQg dmlydGlvLWNvbnNvbGUgZGV2aWNlCisgKiBmdW5jdGlvbmFsaXR5LgorICovCisjaW5jbHVkZSA8 bGludXgvcGNpLWVwZi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KKyNpbmNsdWRl IDxsaW51eC92aXJ0aW9fcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4K KyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgorCisjaW5jbHVkZSAicGNpLWVwZi12aXJ0 aW8uaCIKKworc3RhdGljIGludCB2aXJ0aW9fcXVldWVfc2l6ZSA9IDB4MTAwOworbW9kdWxlX3Bh cmFtKHZpcnRpb19xdWV1ZV9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aXJ0 aW9fcXVldWVfc2l6ZSwgIkEgbGVuZ3RoIG9mIHZpcnRxdWV1ZSIpOworCitzdHJ1Y3QgZXBmX3Zj b24geworCS8qIFRvIGFjY2VzcyB2aXJ0cXVldWVzIG9uIHJlbW90ZSBob3N0ICovCisJc3RydWN0 IGVwZl92aXJ0aW8gZXZpbzsKKwlzdHJ1Y3QgdnJpbmdoX2tpb3YgKnJkZXZfaW92czsKKworCS8q IFRvIHJlZ2lzdGVyIGEgbG9jYWwgdmlydGlvIGJ1cyAqLworCXN0cnVjdCB2aXJ0aW9fZGV2aWNl IHZkZXY7CisKKwkvKiBUbyBhY2Nlc3MgdmlydHF1ZXVzIG9mIGxvY2FsIGhvc3QgZHJpdmVyICov CisJc3RydWN0IHZyaW5naCAqdmRldl92cmhzOworCXN0cnVjdCB2cmluZ2hfa2lvdiAqdmRldl9p b3ZzOworCXN0cnVjdCB2aXJ0cXVldWUgKip2ZGV2X3ZxczsKKworCS8qIEZvciB0cmFuc3BvcnRh dGlvbiBhbmQgbm90aWZpY2F0aW9uICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnRhc2tf d3E7CisJc3RydWN0IHdvcmtfc3RydWN0IHJhaXNlX2lycV93b3JrLCByeF93b3JrLCB0eF93b3Jr OworCisJLyogVG8gcmV0YWluIHZpcnRpbyBmZWF0dXJlcy4gSXQgaXMgY29tbW9ubHkgdXNlZCBs b2NhbCBhbmQgcmVtb3RlLiAqLworCXU2NCBmZWF0dXJlczsKKworCS8qIFRvIHNob3cgYSBzdGF0 dXMgd2hldGhlciB0aGlzIGRyaXZlciBpcyByZWFkeSBhbmQgdGhlIHJlbW90ZSBpcyBjb25uZWN0 ZWQgKi8KKwlib29sIGNvbm5lY3RlZDsKK307CisKK2VudW0geworCVZDT05fVklSVFFVRVVFX1JY LAorCVZDT05fVklSVFFVRVVFX1RYLAorCS8vIFNob3VsZCBiZSBlbmQgb2YgZW51bQorCVZDT05f VklSVFFVRVVFX05VTQorfTsKKworc3RhdGljIHN0cnVjdCBlcGZfdmNvbiAqdmRldl90b192Y29u KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodmRl diwgc3RydWN0IGVwZl92Y29uLCB2ZGV2KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlcGZf dmNvbl9nZXRfbnZxKHN0cnVjdCBlcGZfdmNvbiAqdmNvbikKK3sKKwkvKiBUaGlzIGlzIGEgbWlu aW11bSBpbXBsZW1lbnRhdGlvbi4gRG9lc24ndCBzdXBwb3J0IGFueSBmZWF0dXJlcyBvZgorCSAq IHZpcnRpbyBjb25zb2xlLiBJdCBtZWFucyBkcml2ZXIgYW5kIGRldmljZSB1c2UganVzdCAyIHZp cnR1cXVlIGZvciB0eAorCSAqIGFuZCByeC4KKwkgKi8KKwlyZXR1cm4gVkNPTl9WSVJUUVVFVUVf TlVNOworfQorCitzdGF0aWMgdm9pZCBlcGZfdmNvbl9yeF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZXBmX3Zjb24gKnZjb24gPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0IGVwZl92Y29uLCByeF93b3JrKTsKKwlzdHJ1Y3QgZXBmX3ZpcnRpbyAqZXZpbyA9 ICZ2Y29uLT5ldmlvOworCXN0cnVjdCB2cmluZ2ggKmR2cmg7CisJc3RydWN0IHZyaW5naF9raW92 ICpzaW92LCAqZGlvdjsKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KCF2Y29uLT5jb25uZWN0 ZWQpKQorCQlyZXR1cm47CisKKwlkdnJoID0gJnZjb24tPnZkZXZfdnJoc1tWQ09OX1ZJUlRRVUVV RV9SWF07CisJc2lvdiA9ICZ2Y29uLT5yZGV2X2lvdnNbVkNPTl9WSVJUUVVFVUVfVFhdOworCWRp b3YgPSAmdmNvbi0+dmRldl9pb3ZzW1ZDT05fVklSVFFVRVVFX1JYXTsKKworCWRvIHsKKwkJdTE2 IHNoZWFkLCBkaGVhZDsKKwkJc2l6ZV90IHRvdGFsX2xlbjsKKworCQlyZXQgPSBlcGZfdmlydGlv X2dldGRlc2MoZXZpbywgVkNPTl9WSVJUUVVFVUVfVFgsIHNpb3YsIE5VTEwsCisJCQkJCSAmc2hl YWQpOworCQlpZiAocmV0IDw9IDApCisJCQljb250aW51ZTsKKworCQlyZXQgPSB2cmluZ2hfZ2V0 ZGVzY19rZXJuKGR2cmgsIE5VTEwsIGRpb3YsICZkaGVhZCwgR0ZQX0tFUk5FTCk7CisJCWlmIChy ZXQgPD0gMCkgeworCQkJZXBmX3ZpcnRpb19hYmFuZG9uKGV2aW8sIFZDT05fVklSVFFVRVVFX1RY LCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdG90YWxfbGVuID0gdnJpbmdoX2tpb3ZfbGVu Z3RoKHNpb3YpOworCisJCXJldCA9IGVwZl92aXJ0aW9fbWVtY3B5X2tpb3Yya2lvdihldmlvLCBz aW92LCBkaW92LAorCQkJCQkJICBETUFfREVWX1RPX01FTSk7CisJCWlmIChyZXQgPCAwKQorCQkJ Y29udGludWU7CisKKwkJZXBmX3ZpcnRpb19pb3ZfY29tcGxldGUoZXZpbywgVkNPTl9WSVJUUVVF VUVfVFgsIHNoZWFkLAorCQkJCQl0b3RhbF9sZW4pOworCQl2cmluZ2hfY29tcGxldGVfa2Vybihk dnJoLCBkaGVhZCwgdG90YWxfbGVuKTsKKworCX0gd2hpbGUgKHJldCA+IDApOworCisJdnJpbmdf aW50ZXJydXB0KDAsIHZjb24tPnZkZXZfdnFzW1ZDT05fVklSVFFVRVVFX1JYXSk7Cit9CisKK3N0 YXRpYyB2b2lkIGVwZl92Y29uX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQor eworCXN0cnVjdCBlcGZfdmNvbiAqdmNvbiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZXBm X3Zjb24sIHR4X3dvcmspOworCXN0cnVjdCBlcGZfdmlydGlvICpldmlvID0gJnZjb24tPmV2aW87 CisJc3RydWN0IHZyaW5naCAqc3ZyaDsKKwlzdHJ1Y3QgdnJpbmdoX2tpb3YgKnNpb3YsICpkaW92 OworCWludCByZXQ7CisKKwlpZiAodW5saWtlbHkoIXZjb24tPmNvbm5lY3RlZCkpCisJCXJldHVy bjsKKworCXN2cmggPSAmdmNvbi0+dmRldl92cmhzW1ZDT05fVklSVFFVRVVFX1RYXTsKKwlzaW92 ID0gJnZjb24tPnZkZXZfaW92c1tWQ09OX1ZJUlRRVUVVRV9UWF07CisJZGlvdiA9ICZ2Y29uLT5y ZGV2X2lvdnNbVkNPTl9WSVJUUVVFVUVfUlhdOworCisJZG8geworCQl1MTYgc2hlYWQsIGRoZWFk OworCQlzaXplX3QgdG90YWxfbGVuOworCisJCXJldCA9IHZyaW5naF9nZXRkZXNjX2tlcm4oc3Zy aCwgc2lvdiwgTlVMTCwgJnNoZWFkLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJ Y29udGludWU7CisKKwkJcmV0ID0gZXBmX3ZpcnRpb19nZXRkZXNjKGV2aW8sIFZDT05fVklSVFFV RVVFX1JYLCBOVUxMLCBkaW92LAorCQkJCQkgJmRoZWFkKTsKKwkJaWYgKHJldCA8PSAwKSB7CisJ CQl2cmluZ2hfYWJhbmRvbl9rZXJuKHN2cmgsIDEpOworCQkJY29udGludWU7CisJCX0KKworCQl0 b3RhbF9sZW4gPSB2cmluZ2hfa2lvdl9sZW5ndGgoc2lvdik7CisKKwkJcmV0ID0gZXBmX3ZpcnRp b19tZW1jcHlfa2lvdjJraW92KGV2aW8sIHNpb3YsIGRpb3YsCisJCQkJCQkgIERNQV9NRU1fVE9f REVWKTsKKwkJaWYgKHJldCA8IDApCisJCQljb250aW51ZTsKKworCQl2cmluZ2hfY29tcGxldGVf a2VybihzdnJoLCBzaGVhZCwgdG90YWxfbGVuKTsKKwkJZXBmX3ZpcnRpb19pb3ZfY29tcGxldGUo ZXZpbywgVkNPTl9WSVJUUVVFVUVfUlgsIGRoZWFkLAorCQkJCQl0b3RhbF9sZW4pOworCisJfSB3 aGlsZSAocmV0ID4gMCk7CisKKwlxdWV1ZV93b3JrKHZjb24tPnRhc2tfd3EsICZ2Y29uLT5yYWlz ZV9pcnFfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGVwZl92Y29uX3JhaXNlX2lycV9oYW5kbGVy KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZXBmX3Zjb24gKnZjb24gPQor CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGVwZl92Y29uLCByYWlzZV9pcnFfd29yayk7CisJ c3RydWN0IHBjaV9lcGYgKmVwZiA9IHZjb24tPmV2aW8uZXBmOworCisJcGNpX2VwY19yYWlzZV9p cnEoZXBmLT5lcGMsIGVwZi0+ZnVuY19ubywgZXBmLT52ZnVuY19ubywKKwkJCSAgUENJX0VQQ19J UlFfSU5UWCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZXBmX3Zjb25fc2V0dXBfY29tbW9uKHN0cnVj dCBlcGZfdmNvbiAqdmNvbikKK3sKKwl2Y29uLT5mZWF0dXJlcyA9IDA7CisJdmNvbi0+Y29ubmVj dGVkID0gZmFsc2U7CisKKwl2Y29uLT50YXNrX3dxID0KKwkJYWxsb2Nfd29ya3F1ZXVlKCJwY2kt ZXBmLXZjb24vdGFzay13cSIsCisJCQkJV1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1Ff VU5CT1VORCwgMCk7CisJaWYgKCF2Y29uLT50YXNrX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CUlOSVRfV09SSygmdmNvbi0+cnhfd29yaywgZXBmX3Zjb25fcnhfaGFuZGxlcik7CisJSU5JVF9X T1JLKCZ2Y29uLT50eF93b3JrLCBlcGZfdmNvbl90eF9oYW5kbGVyKTsKKwlJTklUX1dPUksoJnZj b24tPnJhaXNlX2lycV93b3JrLCBlcGZfdmNvbl9yYWlzZV9pcnFfaGFuZGxlcik7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXBmX3Zjb25fY2xlYW51cF9jb21tb24oc3RydWN0IGVw Zl92Y29uICp2Y29uKQoreworCS8qIFNob3VsZCBkbyBmaXJzdCB0byBzdG9wIHBvbGxpbmcgaW4g b3RoZXIga2VybmVsIHRocmVhZCAqLworCXZjb24tPmNvbm5lY3RlZCA9IGZhbHNlOworCisJZmx1 c2hfd29yaygmdmNvbi0+cmFpc2VfaXJxX3dvcmspOworCWZsdXNoX3dvcmsoJnZjb24tPnR4X3dv cmspOworCWZsdXNoX3dvcmsoJnZjb24tPnJ4X3dvcmspOworCisJZGVzdHJveV93b3JrcXVldWUo dmNvbi0+dGFza193cSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwZl92Y29uX3Fub3RpZnlfY2FsbGJh Y2sodm9pZCAqcGFyYW0pCit7CisJc3RydWN0IGVwZl92Y29uICp2Y29uID0gcGFyYW07CisKKwlx dWV1ZV93b3JrKHZjb24tPnRhc2tfd3EsICZ2Y29uLT5yeF93b3JrKTsKK30KKworc3RhdGljIHZv aWQgZXBmX3Zjb25faW5pdGlhbGl6ZV9jb21wbGV0ZSh2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3Qg ZXBmX3Zjb24gKnZjb24gPSBwYXJhbTsKKworCXByX2RlYnVnKCJSZW1vdGUgaG9zdCBoYXMgY29u bmVjdGVkXG4iKTsKKworCXZjb24tPmNvbm5lY3RlZCA9IHRydWU7CisKKwkvKiBzZW5kIGZpbGxl ZCBidWZmZXIgKi8KKwlxdWV1ZV93b3JrKHZjb24tPnRhc2tfd3EsICZ2Y29uLT50eF93b3JrKTsK K30KKworc3RhdGljIHN0cnVjdCBwY2lfZXBmX2hlYWRlciBlcGZfdmNvbl9wY2lfaGVhZGVyID0g eworCS52ZW5kb3JpZCA9IFBDSV9WRU5ET1JfSURfUkVESEFUX1FVTVJBTkVULAorCS5kZXZpY2Vp ZCA9IFZJUlRJT19UUkFOU19JRF9DT05TT0xFLAorCS5zdWJzeXNfdmVuZG9yX2lkID0gUENJX1ZF TkRPUl9JRF9SRURIQVRfUVVNUkFORVQsCisJLnN1YnN5c19pZCA9IFZJUlRJT19JRF9DT05TT0xF LAorCS5yZXZpZCA9IDAsCisJLmJhc2VjbGFzc19jb2RlID0gUENJX0JBU0VfQ0xBU1NfQ09NTVVO SUNBVElPTiwKKwkuaW50ZXJydXB0X3BpbiA9IFBDSV9JTlRFUlJVUFRfUElOLAorfTsKKworc3Rh dGljIGludCBlcGZfdmNvbl9zZXR1cF9lcF9mdW5jKHN0cnVjdCBlcGZfdmNvbiAqdmNvbiwgc3Ry dWN0IHBjaV9lcGYgKmVwZikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBlcGZfdmlydGlvICpldmlv ID0gJnZjb24tPmV2aW87CisJdW5zaWduZWQgaW50IG52cSA9IGVwZl92Y29uX2dldF9udnEodmNv bik7CisKKwl2Y29uLT5yZGV2X2lvdnMgPQorCQlrbWFsbG9jX2FycmF5KG52cSwgc2l6ZW9mKHZj b24tPnJkZXZfaW92c1swXSksIEdGUF9LRVJORUwpOworCWlmICghdmNvbi0+cmRldl9pb3ZzKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnZxOyBpKyspCisJCXZy aW5naF9raW92X2luaXQoJnZjb24tPnJkZXZfaW92c1tpXSwgTlVMTCwgMCk7CisKKwlldmlvLT5l cGYgPSBlcGY7CisJZXZpby0+ZmVhdHVyZXMgPSB2Y29uLT5mZWF0dXJlczsKKwlldmlvLT5udnEg PSBudnE7CisJZXZpby0+dnFsZW4gPSB2aXJ0aW9fcXVldWVfc2l6ZTsKKworCWV2aW8tPnFuX2Nh bGxiYWNrID0gZXBmX3Zjb25fcW5vdGlmeV9jYWxsYmFjazsKKwlldmlvLT5xbl9wYXJhbSA9IHZj b247CisKKwlldmlvLT5pY19jYWxsYmFjayA9IGVwZl92Y29uX2luaXRpYWxpemVfY29tcGxldGU7 CisJZXZpby0+aWNfcGFyYW0gPSB2Y29uOworCisJZXJyID0gZXBmX3ZpcnRpb19pbml0KGV2aW8s ICZlcGZfdmNvbl9wY2lfaGVhZGVyLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jbGVhbnVw X2tpb3Y7CisKKwllcnIgPSBlcGZfdmlydGlvX2xhdW5jaF9iZ3Rhc2soZXZpbyk7CisJaWYgKGVy cikKKwkJZ290byBlcnJfdmlydGlvX2ZpbmFsOworCisJcmV0dXJuIDA7CisKK2Vycl92aXJ0aW9f ZmluYWw6CisJZXBmX3ZpcnRpb19maW5hbChldmlvKTsKKworZXJyX2NsZWFudXBfa2lvdjoKKwlm b3IgKGludCBpID0gMDsgaSA8IG52cTsgaSsrKQorCQl2cmluZ2hfa2lvdl9jbGVhbnVwKCZ2Y29u LT5yZGV2X2lvdnNbaV0pOworCisJa2ZyZWUodmNvbi0+cmRldl9pb3ZzKTsKKworCXJldHVybiBl cnI7Cit9CisKK3N0YXRpYyB2b2lkIGVwZl92Y29uX2NsZWFudXBfZXBfZnVuYyhzdHJ1Y3QgZXBm X3Zjb24gKnZjb24pCit7CisJZXBmX3ZpcnRpb190ZXJtaW5hdGVfYmd0YXNrKCZ2Y29uLT5ldmlv KTsKKworCWVwZl92aXJ0aW9fZmluYWwoJnZjb24tPmV2aW8pOworCisJa2ZyZWUodmNvbi0+cmRl dl9pb3ZzKTsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgbG9jYWwgdmlydGlvIGRldmljZSBv cGVyYXRpb24KKyAqLworc3RhdGljIHU2NCBlcGZfdmNvbl92ZGV2X2dldF9mZWF0dXJlcyhzdHJ1 Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgZXBmX3Zjb24gKnZjb24gPSB2ZGV2 X3RvX3Zjb24odmRldik7CisKKwlyZXR1cm4gdmNvbi0+ZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBp bnQgZXBmX3Zjb25fdmRldl9maW5hbGl6ZV9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAq dmRldikKK3sKKwlzdHJ1Y3QgZXBmX3Zjb24gKnZjb24gPSB2ZGV2X3RvX3Zjb24odmRldik7CisK KwlyZXR1cm4gdmRldi0+ZmVhdHVyZXMgIT0gdmNvbi0+ZmVhdHVyZXM7Cit9CisKK3N0YXRpYyB2 b2lkIGVwZl92Y29uX3ZkZXZfZ2V0X2NvbmZpZyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwK KwkJCQkgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHZvaWQgKmJ1ZiwKKwkJCQkgICAgIHVuc2ln bmVkIGludCBsZW4pCit7CisJLyogVGhlcmUgaXMgbm8gY29uZmlnIGZvciB2aXJ0aW8gY29uc29s ZSBiZWNhdXNlIHRoaXMgY29uc29sZSBkZXZpY2UKKwkgKiBkb2Vzbid0IGFueSBzdXBwb3J0IGZl YXR1cmVzCisJICovCisJbWVtc2V0KGJ1ZiwgMHgwMCwgbGVuKTsKK30KKworc3RhdGljIHZvaWQg ZXBmX3Zjb25fdmRldl9zZXRfY29uZmlnKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAorCQkJ CSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgICAgdW5z aWduZWQgaW50IGxlbikKK3sKKwkvKiBEbyBub3RoaW5nIGJlY2F1c2UgdGhpcyBjb25zb2xlIGRl dmljZSBkb2Vzbid0IGFueSBzdXBwb3J0IGZlYXR1cmVzICovCit9CisKK3N0YXRpYyB1OCBlcGZf dmNvbl92ZGV2X2dldF9zdGF0dXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVwZl92Y29uX3ZkZXZfc2V0X3N0YXR1cyhzdHJ1Y3Qg dmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKQoreworCWlmIChzdGF0dXMgJiBWSVJUSU9f Q09ORklHX1NfRkFJTEVEKQorCQlwcl9kZWJ1ZygiZHJpdmVyIGZhaWxlZCB0byBzZXR1cCB0aGlz IGRldmljZVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGVwZl92Y29uX3ZkZXZfcmVzZXQoc3RydWN0 IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IGVwZl92Y29uICp2Y29uID0gdmRldl90 b192Y29uKHZkZXYpOworCisJZXBmX3ZpcnRpb19yZXNldCgmdmNvbi0+ZXZpbyk7Cit9CisKK3N0 YXRpYyBib29sIGVwZl92Y29uX3ZkZXZfdnFfbm90aWZ5KHN0cnVjdCB2aXJ0cXVldWUgKnZxKQor eworCXN0cnVjdCBlcGZfdmNvbiAqdmNvbiA9IHZkZXZfdG9fdmNvbih2cS0+dmRldik7CisKKwlz d2l0Y2ggKHZxLT5pbmRleCkgeworCWNhc2UgVkNPTl9WSVJUUVVFVUVfUlg6CisJY2FzZSBWQ09O X1ZJUlRRVUVVRV9UWDoKKwkJcXVldWVfd29yayh2Y29uLT50YXNrX3dxLCAmdmNvbi0+dHhfd29y ayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIGludCBlcGZfdmNvbl92ZGV2X2ZpbmRfdnFzKHN0cnVjdCB2aXJ0 aW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgbnZxcywKKwkJCQkgIHN0cnVjdCB2aXJ0cXVl dWUgKnZxc1tdLAorCQkJCSAgdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tbXSwKKwkJCQkgIGNvbnN0 IGNoYXIgKmNvbnN0IG5hbWVzW10sIGNvbnN0IGJvb2wgKmN0eCwKKwkJCQkgIHN0cnVjdCBpcnFf YWZmaW5pdHkgKmRlc2MpCit7CisJc3RydWN0IGVwZl92Y29uICp2Y29uID0gdmRldl90b192Y29u KHZkZXYpOworCWludCBlcnI7CisJaW50IHFpZHgsIGk7CisKKwlpZiAobnZxcyA+IGVwZl92Y29u X2dldF9udnEodmNvbikpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChxaWR4ID0gMCwgaSA9 IDA7IGkgPCBudnFzOyBpKyspIHsKKwkJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJCWNvbnN0IHN0 cnVjdCB2cmluZyAqdnJpbmc7CisKKwkJaWYgKCFuYW1lc1tpXSkgeworCQkJdnFzW2ldID0gTlVM TDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdnEgPSB2cmluZ19jcmVhdGVfdmlydHF1ZXVlKHFp ZHgrKywgdmlydGlvX3F1ZXVlX3NpemUsCisJCQkJCSAgICBWSVJUSU9fUENJX1ZSSU5HX0FMSUdO LCB2ZGV2LCB0cnVlLAorCQkJCQkgICAgZmFsc2UsIGN0eCA/IGN0eFtpXSA6IGZhbHNlLAorCQkJ CQkgICAgZXBmX3Zjb25fdmRldl92cV9ub3RpZnksCisJCQkJCSAgICBjYWxsYmFja1tpXSwgbmFt ZXNbaV0pOworCQlpZiAoIXZxKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZGVs X3ZxczsKKwkJfQorCisJCXZxc1tpXSA9IHZxOworCQl2Y29uLT52ZGV2X3Zxc1tpXSA9IHZxOwor CisJCXZyaW5nID0gdmlydHF1ZXVlX2dldF92cmluZyh2cSk7CisJCWVyciA9IHZyaW5naF9pbml0 X2tlcm4oJnZjb24tPnZkZXZfdnJoc1tpXSwgdmNvbi0+ZmVhdHVyZXMsCisJCQkJICAgICAgIHZp cnRpb19xdWV1ZV9zaXplLCBmYWxzZSwgdnJpbmctPmRlc2MsCisJCQkJICAgICAgIHZyaW5nLT5h dmFpbCwgdnJpbmctPnVzZWQpOworCQlpZiAoZXJyKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBp bml0IHZyaW5naCBmb3IgdnJpbmcgJWRcbiIsIGkpOworCQkJZ290byBlcnJfZGVsX3ZxczsKKwkJ fQorCX0KKworCXJldHVybiAwOworCitlcnJfZGVsX3ZxczoKKwlmb3IgKDsgaSA+PSAwOyBpLS0p IHsKKwkJaWYgKCFuYW1lc1tpXSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghdnFzW2ldKQorCQkJ Y29udGludWU7CisKKwkJdnJpbmdfZGVsX3ZpcnRxdWV1ZSh2cXNbaV0pOworCX0KKwlyZXR1cm4g ZXJyOworfQorCitzdGF0aWMgdm9pZCBlcGZfdmNvbl92ZGV2X2RlbF92cXMoc3RydWN0IHZpcnRp b19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IGVwZl92Y29uICp2Y29uID0gdmRldl90b192Y29u KHZkZXYpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBlcGZfdmNvbl9nZXRfbnZxKHZjb24pOyBp KyspIHsKKwkJaWYgKCF2Y29uLT52ZGV2X3Zxc1tpXSkKKwkJCWNvbnRpbnVlOworCisJCXZyaW5n X2RlbF92aXJ0cXVldWUodmNvbi0+dmRldl92cXNbaV0pOworCX0KK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBlcGZfdmNvbl92ZGV2X2NvbmZpZ19vcHMgPSB7CisJ LmdldF9mZWF0dXJlcyA9IGVwZl92Y29uX3ZkZXZfZ2V0X2ZlYXR1cmVzLAorCS5maW5hbGl6ZV9m ZWF0dXJlcyA9IGVwZl92Y29uX3ZkZXZfZmluYWxpemVfZmVhdHVyZXMsCisJLmdldCA9IGVwZl92 Y29uX3ZkZXZfZ2V0X2NvbmZpZywKKwkuc2V0ID0gZXBmX3Zjb25fdmRldl9zZXRfY29uZmlnLAor CS5nZXRfc3RhdHVzID0gZXBmX3Zjb25fdmRldl9nZXRfc3RhdHVzLAorCS5zZXRfc3RhdHVzID0g ZXBmX3Zjb25fdmRldl9zZXRfc3RhdHVzLAorCS5yZXNldCA9IGVwZl92Y29uX3ZkZXZfcmVzZXQs CisJLmZpbmRfdnFzID0gZXBmX3Zjb25fdmRldl9maW5kX3ZxcywKKwkuZGVsX3ZxcyA9IGVwZl92 Y29uX3ZkZXZfZGVsX3ZxcywKK307CisKK3N0YXRpYyB2b2lkIGVwZl92Y29uX3ZkZXZfcmVsZWFz ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJLyogRG8gbm90aGluZywgYmVjYXVzZSB0aGUgc3Ry dWN0IHZpcnRpb19kZXZpY2Ugd2lsbCBiZSByZXVzZWQuICovCit9CisKK3N0YXRpYyBpbnQgZXBm X3Zjb25fc2V0dXBfdmRldihzdHJ1Y3QgZXBmX3Zjb24gKnZjb24sIHN0cnVjdCBkZXZpY2UgKnBh cmVudCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2ID0gJnZjb24t PnZkZXY7CisJY29uc3QgdW5zaWduZWQgaW50IG52cSA9IGVwZl92Y29uX2dldF9udnEodmNvbik7 CisKKwl2Y29uLT52ZGV2X3ZyaHMgPQorCQlrbWFsbG9jX2FycmF5KG52cSwgc2l6ZW9mKHZjb24t PnZkZXZfdnJoc1swXSksIEdGUF9LRVJORUwpOworCWlmICghdmNvbi0+dmRldl92cmhzKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXZjb24tPnZkZXZfaW92cyA9CisJCWttYWxsb2NfYXJyYXkobnZx LCBzaXplb2YodmNvbi0+dmRldl9pb3ZzWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2Y29uLT52 ZGV2X2lvdnMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV92cmhzOworCX0K KworCWZvciAoaW50IGkgPSAwOyBpIDwgbnZxOyBpKyspCisJCXZyaW5naF9raW92X2luaXQoJnZj b24tPnZkZXZfaW92c1tpXSwgTlVMTCwgMCk7CisKKwl2Y29uLT52ZGV2X3ZxcyA9CisJCWttYWxs b2NfYXJyYXkobnZxLCBzaXplb2YodmNvbi0+dmRldl92cmhzWzBdKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCF2Y29uLT52ZGV2X3ZxcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9jbGVh bnVwX2tpb3Y7CisJfQorCisJdmRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKKwl2ZGV2LT5kZXYu cmVsZWFzZSA9IGVwZl92Y29uX3ZkZXZfcmVsZWFzZTsKKwl2ZGV2LT5jb25maWcgPSAmZXBmX3Zj b25fdmRldl9jb25maWdfb3BzOworCXZkZXYtPmlkLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfUkVE SEFUX1FVTVJBTkVUOworCXZkZXYtPmlkLmRldmljZSA9IFZJUlRJT19JRF9DT05TT0xFOworCisJ ZXJyID0gcmVnaXN0ZXJfdmlydGlvX2RldmljZSh2ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVy cl9mcmVlX3ZkZXZfdnFzOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX3ZkZXZfdnFzOgorCWtm cmVlKHZjb24tPnZkZXZfdnFzKTsKKworZXJyX2NsZWFudXBfa2lvdjoKKwlmb3IgKGludCBpID0g MDsgaSA8IG52cTsgaSsrKQorCQl2cmluZ2hfa2lvdl9jbGVhbnVwKCZ2Y29uLT52ZGV2X2lvdnNb aV0pOworCisJa2ZyZWUodmNvbi0+dmRldl9pb3ZzKTsKKworZXJyX2ZyZWVfdnJoczoKKwlrZnJl ZSh2Y29uLT52ZGV2X3ZyaHMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZXBm X3Zjb25fY2xlYW51cF92ZGV2KHN0cnVjdCBlcGZfdmNvbiAqdmNvbikKK3sKKwl1bnJlZ2lzdGVy X3ZpcnRpb19kZXZpY2UoJnZjb24tPnZkZXYpOworCS8qIENsZWFudXAgc3RydWN0IHZpcnRpb19k ZXZpY2UgdGhhdCBoYXMga29iamVjdCwgb3RoZXJ3aXNlIGVycm9yIG9jY3VyZXMgd2hlbgorCSAq IHJlcmVnaXN0ZXIgdGhlIHZpcnRpbyBkZXZpY2UuCisJICovCisJbWVtc2V0KCZ2Y29uLT52ZGV2 LCAweDAwLCBzaXplb2YodmNvbi0+dmRldikpOworCisJa2ZyZWUodmNvbi0+dmRldl92cXMpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBlcGZfdmNvbl9nZXRfbnZxKHZjb24pOyBpKyspCisJCXZy aW5naF9raW92X2NsZWFudXAoJnZjb24tPnZkZXZfaW92c1tpXSk7CisKKwlrZnJlZSh2Y29uLT52 ZGV2X2lvdnMpOworCWtmcmVlKHZjb24tPnZkZXZfdnJocyk7Cit9CisKK3N0YXRpYyBpbnQgZXBm X3Zjb25fYmluZChzdHJ1Y3QgcGNpX2VwZiAqZXBmKQoreworCXN0cnVjdCBlcGZfdmNvbiAqdmNv biA9IGVwZl9nZXRfZHJ2ZGF0YShlcGYpOworCWludCBlcnI7CisKKwllcnIgPSBlcGZfdmNvbl9z ZXR1cF9jb21tb24odmNvbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGVw Zl92Y29uX3NldHVwX2VwX2Z1bmModmNvbiwgZXBmKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9j bGVhbnVwX2NvbW1vbjsKKworCWVyciA9IGVwZl92Y29uX3NldHVwX3ZkZXYodmNvbiwgZXBmLT5l cGMtPmRldi5wYXJlbnQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2NsZWFudXBfZXBfZnVuYzsK KworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9jb21tb246CisJZXBmX3Zjb25fY2xlYW51cF9j b21tb24odmNvbik7CisKK2Vycl9jbGVhbnVwX2VwX2Z1bmM6CisJZXBmX3Zjb25fY2xlYW51cF9l cF9mdW5jKHZjb24pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZXBmX3Zjb25f dW5iaW5kKHN0cnVjdCBwY2lfZXBmICplcGYpCit7CisJc3RydWN0IGVwZl92Y29uICp2Y29uID0g ZXBmX2dldF9kcnZkYXRhKGVwZik7CisKKwllcGZfdmNvbl9jbGVhbnVwX2NvbW1vbih2Y29uKTsK KwllcGZfdmNvbl9jbGVhbnVwX2VwX2Z1bmModmNvbik7CisJZXBmX3Zjb25fY2xlYW51cF92ZGV2 KHZjb24pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcGZfb3BzIGVwZl92Y29uX29wcyA9IHsK KwkuYmluZCA9IGVwZl92Y29uX2JpbmQsCisJLnVuYmluZCA9IGVwZl92Y29uX3VuYmluZCwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2VwZl9kZXZpY2VfaWQgZXBmX3Zjb25faWRzW10g PSB7CisJeyAubmFtZSA9ICJwY2lfZXBmX3Zjb24iIH0sCisJe30KK307CisKK3N0YXRpYyBpbnQg ZXBmX3Zjb25fcHJvYmUoc3RydWN0IHBjaV9lcGYgKmVwZikKK3sKKwlzdHJ1Y3QgZXBmX3Zjb24g KnZjb247CisKKwl2Y29uID0gZGV2bV9remFsbG9jKCZlcGYtPmRldiwgc2l6ZW9mKCp2Y29uKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCF2Y29uKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVwZl9zZXRf ZHJ2ZGF0YShlcGYsIHZjb24pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNp X2VwZl9kcml2ZXIgZXBmX3Zjb25fZHJ2ID0geworCS5kcml2ZXIubmFtZSA9ICJwY2lfZXBmX3Zj b24iLAorCS5vcHMgPSAmZXBmX3Zjb25fb3BzLAorCS5pZF90YWJsZSA9IGVwZl92Y29uX2lkcywK KwkucHJvYmUgPSBlcGZfdmNvbl9wcm9iZSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisK K3N0YXRpYyBpbnQgX19pbml0IGVwZl92Y29uX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJ ZXJyID0gcGNpX2VwZl9yZWdpc3Rlcl9kcml2ZXIoJmVwZl92Y29uX2Rydik7CisJaWYgKGVycikK KwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENJIEVQIHZpcnRpby1jb25zb2xlIGZ1bmN0 aW9uXG4iKTsKKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZXBmX3Zjb25faW5pdCk7CisK K3N0YXRpYyB2b2lkIGVwZl92Y29uX2V4aXQodm9pZCkKK3sKKwlwY2lfZXBmX3VucmVnaXN0ZXJf ZHJpdmVyKCZlcGZfdmNvbl9kcnYpOworfQorbW9kdWxlX2V4aXQoZXBmX3Zjb25fZXhpdCk7CisK K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlNodW5zdWtlIE1pZSA8bWll QGlnZWwuY28uanA+Iik7Ci0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXph dGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRh dGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==