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 X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92664C31E5E for ; Tue, 18 Jun 2019 11:24:16 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5E3BB2082C for ; Tue, 18 Jun 2019 11:24:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5E3BB2082C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hdCDO-0001VF-3H; Tue, 18 Jun 2019 11:23:50 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hdCDM-0001V8-MK for xen-devel@lists.xenproject.org; Tue, 18 Jun 2019 11:23:48 +0000 X-Inumbo-ID: 892b2db6-91bb-11e9-8980-bc764e045a96 Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 892b2db6-91bb-11e9-8980-bc764e045a96; Tue, 18 Jun 2019 11:23:45 +0000 (UTC) Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=anthony.perard@citrix.com; spf=Pass smtp.mailfrom=anthony.perard@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of anthony.perard@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of anthony.perard@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: ohF2UlmLgQZFxqabhQhsv6ZcS4dI63jGNEqfS+6N/TFt6UNPn3KKWRGf97aqP5glpWwMFfdyVJ JmmTyhPBRoHJhaHyNhhprT9/5/zRlkbuXT9JuIS4TH4RhKh7OPEqRwbE1ev4f6AyoiVB37+gMX 3i7Vd3Dyotmb64sNt/LEAgBoq8X8bK8fG5e+xDW+WRUGeKakIsFfxEWQ+sDfJ0v6u0hrkZ9mk+ pFTIEJ4fufUq8kkQ5AZes3w6rHvfjNGkRh9kqPS36YKYsbjmkFjmTlD7Ff2+Zi9jGmeTP1Xbfy R1Q= X-SBRS: 2.7 X-MesageID: 1889400 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.63,389,1557201600"; d="scan'208";a="1889400" From: Anthony PERARD To: Date: Tue, 18 Jun 2019 12:23:38 +0100 Message-ID: <20190618112341.513-2-anthony.perard@citrix.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190618112341.513-1-anthony.perard@citrix.com> References: <20190618112341.513-1-anthony.perard@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 1/4] xen: Fix build with public headers X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Anthony PERARD , xen-devel@lists.xenproject.org, Paul Durrant , Stefano Stabellini Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Rm9sbG93aW5nIDM3Njc3ZDdkYjMgIkNsZWFuIHVwIGEgZmV3IGhlYWRlciBndWFyZCBzeW1ib2xz IiwgUUVNVSBzdGFydAp0byBmYWlsIHRvIGJ1aWxkOgoKSW4gZmlsZSBpbmNsdWRlZCBmcm9tIH4v eGVuL3Rvb2xzLy4uL3Rvb2xzL2luY2x1ZGUveGVuL2lvL2Jsa2lmLmg6MzE6MCwKICAgICAgICAg ICAgICAgICBmcm9tIH4veGVuL3Rvb2xzL3FlbXUteGVuLWRpci9ody9ibG9jay94ZW5fYmxraWYu aDo1LAogICAgICAgICAgICAgICAgIGZyb20gfi94ZW4vdG9vbHMvcWVtdS14ZW4tZGlyL2h3L2Js b2NrL3hlbi1ibG9jay5jOjIyOgp+L3hlbi90b29scy8uLi90b29scy9pbmNsdWRlL3hlbi9pby9y aW5nLmg6Njg6MDogZXJyb3I6ICJfX0NPTlNUX1JJTkdfU0laRSIgcmVkZWZpbmVkIFstV2Vycm9y XQogI2RlZmluZSBfX0NPTlNUX1JJTkdfU0laRShfcywgX3N6KSBcCgpJbiBmaWxlIGluY2x1ZGVk IGZyb20gfi94ZW4vdG9vbHMvcWVtdS14ZW4tZGlyL2h3L2Jsb2NrL3hlbl9ibGtpZi5oOjQ6MCwK ICAgICAgICAgICAgICAgICBmcm9tIH4veGVuL3Rvb2xzL3FlbXUteGVuLWRpci9ody9ibG9jay94 ZW4tYmxvY2suYzoyMjoKfi94ZW4vdG9vbHMvcWVtdS14ZW4tZGlyL2luY2x1ZGUvaHcveGVuL2lv L3JpbmcuaDo2NjowOiBub3RlOiB0aGlzIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJldmlvdXMg ZGVmaW5pdGlvbgogI2RlZmluZSBfX0NPTlNUX1JJTkdfU0laRShfcywgX3N6KSBcCgpUaGUgaXNz dWUgaXMgdGhhdCBzb21lIHB1YmxpYyB4ZW4gaGVhZGVycyBoYXZlIGJlZW4gaW1wb3J0ZWQgKGJ5 CmY2NWVhZGI2MzkgInhlbjogaW1wb3J0IHJpbmcuaCBmcm9tIHhlbiIpIGJ1dCBub3QgYWxsLiBX aXRoIHRoZSBjaGFuZ2UKaW4gdGhlIGd1YXJkcyBzeW1ib2xlLCB0aGUgcmluZy5oIGhlYWRlciBz dGFydCB0byBiZSBpbXBvcnRlZCB0d2ljZS4KCkZpeCB0aGUgYnVpbGQgYnkgaW1wb3J0aW5nIGJs a2lmLmggYW5kIHVzYmlmLmggYW5kIHRoZXJlIGRlcGVuZGVuY2llcy4KU29tZSBjbGVhbnVwIGhh dmUgYmVlbiBkb25lIG9uIHRob3NlIGZpbGVzLgoKU3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgaW1w b3J0IG90aGVyIFhlbiBwdWJsaWMgaGVhZGVycy4KCnJpbmcuaCBoYXZlIGJlZW4gbW92ZWQgdG8g Imh3L3hlbi9pbnRlcmZhY2UvIiBhbG9uZyB3aXRoIGJsa2lmLmggYW5kCnVzYmlmLmggYXMgdGhv c2UgZGVzY3JpYmUgaW50ZXJmYWNlIChhbmQgd291bGQgYWxsb3cgdG8gYWxzbyBpbXBvcnQgYQp4 ZW4uaCBoZWFkZXIgaWYgdGhhdCB3YXMgbmVjZXNzYXJ5KS4KCnhlbi1tYXBjYWNoZS5jIGRvZXNu J3QgbmVlZHMgZ3JhbnRfdGFibGUuaC4KClNpZ25lZC1vZmYtYnk6IEFudGhvbnkgUEVSQVJEIDxh bnRob255LnBlcmFyZEBjaXRyaXguY29tPgpSZXZpZXdlZC1ieTogUGF1bCBEdXJyYW50IDxwYXVs LmR1cnJhbnRAY2l0cml4LmNvbT4KLS0tCiBody85cGZzL3hlbi05cGZzLmggICAgICAgICAgICAg ICAgICAgICAgIHwgICAyICstCiBody9ibG9jay94ZW5fYmxraWYuaCAgICAgICAgICAgICAgICAg ICAgIHwgICAzICstCiBody91c2IveGVuLXVzYi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAzICstCiBody94ZW4veGVuLWxlZ2FjeS1iYWNrZW5kLmMgICAgICAgICAgICAgIHwgICAyIC0K IGluY2x1ZGUvaHcveGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oICAgfCAgMzYgKysKIGluY2x1 ZGUvaHcveGVuL2ludGVyZmFjZS9pby9ibGtpZi5oICAgICAgfCA3MTIgKysrKysrKysrKysrKysr KysrKysrKysKIGluY2x1ZGUvaHcveGVuL3sgPT4gaW50ZXJmYWNlfS9pby9yaW5nLmggfCAgIDAK IGluY2x1ZGUvaHcveGVuL2ludGVyZmFjZS9pby91c2JpZi5oICAgICAgfCAyNTQgKysrKysrKysK IDggZmlsZXMgY2hhbmdlZCwgMTAwNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvaHcveGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9ody94ZW4vaW50ZXJmYWNlL2lvL2Jsa2lmLmgKIHJl bmFtZSBpbmNsdWRlL2h3L3hlbi97ID0+IGludGVyZmFjZX0vaW8vcmluZy5oICgxMDAlKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvaHcveGVuL2ludGVyZmFjZS9pby91c2JpZi5oCgpkaWZm IC0tZ2l0IGEvaHcvOXBmcy94ZW4tOXBmcy5oIGIvaHcvOXBmcy94ZW4tOXBmcy5oCmluZGV4IGZi ZGVlM2Q4NDMuLjkyZGM4N2U5ZTAgMTAwNjQ0Ci0tLSBhL2h3LzlwZnMveGVuLTlwZnMuaAorKysg Yi9ody85cGZzL3hlbi05cGZzLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgSFdfOVBGU19Y RU5fOVBGU19ICiAKICNpbmNsdWRlIDx4ZW4vaW8vcHJvdG9jb2xzLmg+Ci0jaW5jbHVkZSAiaHcv eGVuL2lvL3JpbmcuaCIKKyNpbmNsdWRlICJody94ZW4vaW50ZXJmYWNlL2lvL3JpbmcuaCIKIAog LyoKICAqIERvIG5vdCBtZXJnZSBpbnRvIHhlbi05cC1iYWNrZW5kLmM6IGNsYW5nIGRvZXNuJ3Qg YWxsb3cgdW51c2VkIHN0YXRpYwpkaWZmIC0tZ2l0IGEvaHcvYmxvY2sveGVuX2Jsa2lmLmggYi9o dy9ibG9jay94ZW5fYmxraWYuaAppbmRleCBhMzUzNjkzZWEwLi41YTEwOTRkNzkzIDEwMDY0NAot LS0gYS9ody9ibG9jay94ZW5fYmxraWYuaAorKysgYi9ody9ibG9jay94ZW5fYmxraWYuaApAQCAt MSw4ICsxLDcgQEAKICNpZm5kZWYgWEVOX0JMS0lGX0gKICNkZWZpbmUgWEVOX0JMS0lGX0gKIAot I2luY2x1ZGUgImh3L3hlbi9pby9yaW5nLmgiCi0jaW5jbHVkZSA8eGVuL2lvL2Jsa2lmLmg+Cisj aW5jbHVkZSAiaHcveGVuL2ludGVyZmFjZS9pby9ibGtpZi5oIgogI2luY2x1ZGUgPHhlbi9pby9w cm90b2NvbHMuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2h3L3VzYi94ZW4tdXNiLmMgYi9ody91c2Iv eGVuLXVzYi5jCmluZGV4IGIyMGQwY2ZhZGYuLmRmYmI0MThlNzcgMTAwNjQ0Ci0tLSBhL2h3L3Vz Yi94ZW4tdXNiLmMKKysrIGIvaHcvdXNiL3hlbi11c2IuYwpAQCAtMzIsOCArMzIsNyBAQAogI2lu Y2x1ZGUgInFhcGkvcW1wL3FkaWN0LmgiCiAjaW5jbHVkZSAicWFwaS9xbXAvcXN0cmluZy5oIgog Ci0jaW5jbHVkZSAiaHcveGVuL2lvL3JpbmcuaCIKLSNpbmNsdWRlIDx4ZW4vaW8vdXNiaWYuaD4K KyNpbmNsdWRlICJody94ZW4vaW50ZXJmYWNlL2lvL3VzYmlmLmgiCiAKIC8qCiAgKiBDaGVjayBm b3IgcmVxdWlyZWQgc3VwcG9ydCBvZiB1c2JpZi5oOiBVU0JJRl9TSE9SVF9OT1RfT0sgd2FzIHRo ZSBsYXN0CmRpZmYgLS1naXQgYS9ody94ZW4veGVuLWxlZ2FjeS1iYWNrZW5kLmMgYi9ody94ZW4v eGVuLWxlZ2FjeS1iYWNrZW5kLmMKaW5kZXggMzZmZDFlOWIwOS4uMzcxNWM5NGZhNiAxMDA2NDQK LS0tIGEvaHcveGVuL3hlbi1sZWdhY3ktYmFja2VuZC5jCisrKyBiL2h3L3hlbi94ZW4tbGVnYWN5 LWJhY2tlbmQuYwpAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUgImh3L3hlbi94ZW5fcHZkZXYu aCIKICNpbmNsdWRlICJtb25pdG9yL3FkZXYuaCIKIAotI2luY2x1ZGUgPHhlbi9ncmFudF90YWJs ZS5oPgotCiBEZXZpY2VTdGF0ZSAqeGVuX3N5c2RldjsKIEJ1c1N0YXRlICp4ZW5fc3lzYnVzOwog CmRpZmYgLS1naXQgYS9pbmNsdWRlL2h3L3hlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaCBiL2lu Y2x1ZGUvaHcveGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjMwMmU0MDQ4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRl L2h3L3hlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBncmFudF90YWJsZS5oCisgKgorICogSW50ZXJmYWNlIGZvciBn cmFudGluZyBmb3JlaWduIGFjY2VzcyB0byBwYWdlIGZyYW1lcywgYW5kIHJlY2VpdmluZworICog cGFnZS1vd25lcnNoaXAgdHJhbnNmZXJzLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAq IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu ZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4K KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U IFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMDQsIEsgQSBGcmFzZXIKKyAqLworCisjaWZuZGVmIFhFTl9QVUJMSUNfR1JBTlRfVEFCTEVf SAorI2RlZmluZSBYRU5fUFVCTElDX0dSQU5UX1RBQkxFX0gKKworLyoKKyAqIFJlZmVyZW5jZSB0 byBhIGdyYW50IGVudHJ5IGluIGEgc3BlY2lmaWVkIGRvbWFpbidzIGdyYW50IHRhYmxlLgorICov Cit0eXBlZGVmIHVpbnQzMl90IGdyYW50X3JlZl90OworCisjZW5kaWYgLyogWEVOX1BVQkxJQ19H UkFOVF9UQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2h3L3hlbi9pbnRlcmZhY2UvaW8v YmxraWYuaCBiL2luY2x1ZGUvaHcveGVuL2ludGVyZmFjZS9pby9ibGtpZi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJmZTc3MjcxYzkKLS0tIC9kZXYvbnVsbAorKysg Yi9pbmNsdWRlL2h3L3hlbi9pbnRlcmZhY2UvaW8vYmxraWYuaApAQCAtMCwwICsxLDcxMiBAQAor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICogYmxraWYuaAorICoKKyAqIFVuaWZpZWQgYmxvY2st ZGV2aWNlIEkvTyBpbnRlcmZhY2UgZm9yIFhlbiBndWVzdCBPU2VzLgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAq IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCwgS2VpciBGcmFzZXIKKyAqIENvcHlyaWdodCAoYykg MjAxMiwgU3BlY3RyYSBMb2dpYyBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgWEVOX1BVQkxJ Q19JT19CTEtJRl9ICisjZGVmaW5lIFhFTl9QVUJMSUNfSU9fQkxLSUZfSAorCisjaW5jbHVkZSAi cmluZy5oIgorI2luY2x1ZGUgIi4uL2dyYW50X3RhYmxlLmgiCisKKy8qCisgKiBGcm9udC0+YmFj ayBub3RpZmljYXRpb25zOiBXaGVuIGVucXVldWluZyBhIG5ldyByZXF1ZXN0LCBzZW5kaW5nIGEK KyAqIG5vdGlmaWNhdGlvbiBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiByZXFfZXZlbnQgKGku ZS4sIHRoZSBnZW5lcmljCisgKiBob2xkLW9mZiBtZWNoYW5pc20gcHJvdmlkZWQgYnkgdGhlIHJp bmcgbWFjcm9zKS4gQmFja2VuZHMgbXVzdCBzZXQKKyAqIHJlcV9ldmVudCBhcHByb3ByaWF0ZWx5 IChlLmcuLCB1c2luZyBSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVFVRVNUUygpKS4KKyAqCisgKiBC YWNrLT5mcm9udCBub3RpZmljYXRpb25zOiBXaGVuIGVucXVldWluZyBhIG5ldyByZXNwb25zZSwg c2VuZGluZyBhCisgKiBub3RpZmljYXRpb24gY2FuIGJlIG1hZGUgY29uZGl0aW9uYWwgb24gcnNw X2V2ZW50IChpLmUuLCB0aGUgZ2VuZXJpYworICogaG9sZC1vZmYgbWVjaGFuaXNtIHByb3ZpZGVk IGJ5IHRoZSByaW5nIG1hY3JvcykuIEZyb250ZW5kcyBtdXN0IHNldAorICogcnNwX2V2ZW50IGFw cHJvcHJpYXRlbHkgKGUuZy4sIHVzaW5nIFJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFU1BPTlNFUygp KS4KKyAqLworCisjaWZuZGVmIGJsa2lmX3ZkZXZfdAorI2RlZmluZSBibGtpZl92ZGV2X3QgICB1 aW50MTZfdAorI2VuZGlmCisjZGVmaW5lIGJsa2lmX3NlY3Rvcl90IHVpbnQ2NF90CisKKy8qCisg KiBGZWF0dXJlIGFuZCBQYXJhbWV0ZXIgTmVnb3RpYXRpb24KKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorICogVGhlIHR3byBoYWx2ZXMgb2YgYSBYZW4gYmxvY2sgZHJpdmVy IHV0aWxpemUgbm9kZXMgd2l0aGluIHRoZSBYZW5TdG9yZSB0bworICogY29tbXVuaWNhdGUgY2Fw YWJpbGl0aWVzIGFuZCB0byBuZWdvdGlhdGUgb3BlcmF0aW5nIHBhcmFtZXRlcnMuICBUaGlzCisg KiBzZWN0aW9uIGVudW1lcmF0ZXMgdGhlc2Ugbm9kZXMgd2hpY2ggcmVzaWRlIGluIHRoZSByZXNw ZWN0aXZlIGZyb250IGFuZAorICogYmFja2VuZCBwb3J0aW9ucyBvZiB0aGUgWGVuU3RvcmUsIGZv bGxvd2luZyB0aGUgWGVuQnVzIGNvbnZlbnRpb24uCisgKgorICogQWxsIGRhdGEgaW4gdGhlIFhl blN0b3JlIGlzIHN0b3JlZCBhcyBzdHJpbmdzLiAgTm9kZXMgc3BlY2lmeWluZyBudW1lcmljCisg KiB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gZGVjaW1hbC4gIEludGVnZXIgdmFsdWUgcmFuZ2VzIGxp c3RlZCBiZWxvdyBhcmUKKyAqIGV4cHJlc3NlZCBhcyBmaXhlZCBzaXplZCBpbnRlZ2VyIHR5cGVz IGNhcGFibGUgb2Ygc3RvcmluZyB0aGUgY29udmVyc2lvbgorICogb2YgYSBwcm9wZXJseSBmb3Jt YXRlZCBub2RlIHN0cmluZywgd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLgorICoKKyAqIEFu eSBzcGVjaWZpZWQgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgaWYgdGhlIGNvcnJlc3BvbmRp bmcgWGVuQnVzIG5vZGUKKyAqIGlzIG5vdCBwcmVzZW50IGluIHRoZSBYZW5TdG9yZS4KKyAqCisg KiBYZW5TdG9yZSBub2RlcyBpbiBzZWN0aW9ucyBtYXJrZWQgIlBSSVZBVEUiIGFyZSBzb2xlbHkg Zm9yIHVzZSBieSB0aGUKKyAqIGRyaXZlciBzaWRlIHdob3NlIFhlbkJ1cyB0cmVlIGNvbnRhaW5z IHRoZW0uCisgKgorICogWGVuU3RvcmUgbm9kZXMgbWFya2VkICJERVBSRUNBVEVEIiBpbiB0aGVp ciBub3RlcyBzZWN0aW9uIHNob3VsZCBvbmx5IGJlCisgKiB1c2VkIHRvIHByb3ZpZGUgaW50ZXJv cGVyYWJpbGl0eSB3aXRoIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogU2VlIHRoZSBY ZW5CdXMgc3RhdGUgdHJhbnNpdGlvbiBkaWFncmFtIGJlbG93IGZvciBkZXRhaWxzIG9uIHdoZW4g WGVuQnVzCisgKiBub2RlcyBtdXN0IGJlIHB1Ymxpc2hlZCBhbmQgd2hlbiB0aGV5IGNhbiBiZSBx dWVyaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgQmFja2VuZCBYZW5CdXMgTm9kZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tIEJhY2tlbmQgRGV2aWNlIElkZW50aWZpY2F0aW9uIChQUklW QVRFKSAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBtb2RlCisgKiAgICAgIFZhbHVlczogICAg ICAgICAiciIgKHJlYWQgb25seSksICJ3IiAod3JpdGFibGUpCisgKgorICogICAgICBUaGUgcmVh ZCBvciB3cml0ZSBhY2Nlc3MgcGVybWlzc2lvbnMgdG8gdGhlIGJhY2tpbmcgc3RvcmUgdG8gYmUK KyAqICAgICAgZ3JhbnRlZCB0byB0aGUgZnJvbnRlbmQuCisgKgorICogcGFyYW1zCisgKiAgICAg IFZhbHVlczogICAgICAgICBzdHJpbmcKKyAqCisgKiAgICAgIEEgZnJlZSBmb3JtYXR0ZWQgc3Ry aW5nIHByb3ZpZGluZyBzdWZmaWNpZW50IGluZm9ybWF0aW9uIGZvciB0aGUKKyAqICAgICAgaG90 cGx1ZyBzY3JpcHQgdG8gYXR0YWNoIHRoZSBkZXZpY2UgYW5kIHByb3ZpZGUgYSBzdWl0YWJsZQor ICogICAgICBoYW5kbGVyIChpZTogYSBibG9jayBkZXZpY2UpIGZvciBibGtiYWNrIHRvIHVzZS4K KyAqCisgKiBwaHlzaWNhbC1kZXZpY2UKKyAqICAgICAgVmFsdWVzOiAgICAgICAgICJNQUpPUjpN SU5PUiIKKyAqICAgICAgTm90ZXM6IDExCisgKgorICogICAgICBNQUpPUiBhbmQgTUlOT1IgYXJl IHRoZSBtYWpvciBudW1iZXIgYW5kIG1pbm9yIG51bWJlciBvZiB0aGUKKyAqICAgICAgYmFja2lu ZyBkZXZpY2UgcmVzcGVjdGl2ZWx5LgorICoKKyAqIHBoeXNpY2FsLWRldmljZS1wYXRoCisgKiAg ICAgIFZhbHVlczogICAgICAgICBwYXRoIHN0cmluZworICoKKyAqICAgICAgQSBzdHJpbmcgdGhh dCBjb250YWlucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlzayBpbWFnZS4gT24KKyAqICAg ICAgTmV0QlNEIGFuZCBMaW51eCB0aGlzIGlzIGFsd2F5cyBhIGJsb2NrIGRldmljZSwgd2hpbGUg b24gRnJlZUJTRAorICogICAgICBpdCBjYW4gYmUgZWl0aGVyIGEgYmxvY2sgZGV2aWNlIG9yIGEg cmVndWxhciBmaWxlLgorICoKKyAqIHR5cGUKKyAqICAgICAgVmFsdWVzOiAgICAgICAgICJmaWxl IiwgInBoeSIsICJ0YXAiCisgKgorICogICAgICBUaGUgdHlwZSBvZiB0aGUgYmFja2luZyBkZXZp Y2Uvb2JqZWN0LgorICoKKyAqCisgKiBkaXJlY3QtaW8tc2FmZQorICogICAgICBWYWx1ZXM6ICAg ICAgICAgMC8xIChib29sZWFuKQorICogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorICoKKyAqICAg ICAgVGhlIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIGRpcmVjdCBJ TyBtZW1vcnkKKyAqICAgICAgbGlmZXRpbWUgYnVnLiAgU2VlOgorICogICAgICAgIGh0dHA6Ly9s aXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTItMTIvbXNnMDExNTQuaHRt bAorICoKKyAqICAgICAgVGhlcmVmb3JlIHRoaXMgb3B0aW9uIGdpdmVzIHRoZSBiYWNrZW5kIHBl cm1pc3Npb24gdG8gdXNlCisgKiAgICAgIE9fRElSRUNULCBub3R3aXRoc3RhbmRpbmcgdGhhdCBi dWcuCisgKgorICogICAgICBUaGF0IGlzLCBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB1c2Ug b2YgT19ESVJFQ1QgaXMgc2FmZSwKKyAqICAgICAgaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB3ZSB3 b3VsZCBub3JtYWxseSBoYXZlIGF2b2lkZWQgaXQgYXMgYQorICogICAgICB3b3JrYXJvdW5kIGZv ciB0aGF0IGJ1Zy4gIFRoaXMgb3B0aW9uIGlzIG5vdCByZWxldmFudCBmb3IgYWxsCisgKiAgICAg IGJhY2tlbmRzLCBhbmQgZXZlbiBub3QgbmVjZXNzYXJpbHkgc3VwcG9ydGVkIGZvciB0aG9zZSBm b3IKKyAqICAgICAgd2hpY2ggaXQgaXMgcmVsZXZhbnQuICBBIGJhY2tlbmQgd2hpY2gga25vd3Mg dGhhdCBpdCBpcyBub3QKKyAqICAgICAgYWZmZWN0ZWQgYnkgdGhlIGJ1ZyBjYW4gaWdub3JlIHRo aXMgb3B0aW9uLgorICoKKyAqICAgICAgVGhpcyBvcHRpb24gZG9lc24ndCByZXF1aXJlIGEgYmFj a2VuZCB0byB1c2UgT19ESVJFQ1QsIHNvIGl0CisgKiAgICAgIHNob3VsZCBub3QgYmUgdXNlZCB0 byB0cnkgdG8gY29udHJvbCB0aGUgY2FjaGluZyBiZWhhdmlvdXIuCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRmVhdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogZmVhdHVyZS1iYXJyaWVyCisgKiAgICAgIFZhbHVlczogICAgICAg ICAwLzEgKGJvb2xlYW4pCisgKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCisgKgorICogICAgICBB IHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMgdGhhdCB0aGUgYmFja2VuZCBjYW4gcHJvY2VzcyByZXF1 ZXN0cworICogICAgICBjb250YWluaW5nIHRoZSBCTEtJRl9PUF9XUklURV9CQVJSSUVSIHJlcXVl c3Qgb3Bjb2RlLiAgUmVxdWVzdHMKKyAqICAgICAgb2YgdGhpcyB0eXBlIG1heSBzdGlsbCBiZSBy ZXR1cm5lZCBhdCBhbnkgdGltZSB3aXRoIHRoZQorICogICAgICBCTEtJRl9SU1BfRU9QTk9UU1VQ UCByZXN1bHQgY29kZS4KKyAqCisgKiBmZWF0dXJlLWZsdXNoLWNhY2hlCisgKiAgICAgIFZhbHVl czogICAgICAgICAwLzEgKGJvb2xlYW4pCisgKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCisgKgor ICogICAgICBBIHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMgdGhhdCB0aGUgYmFja2VuZCBjYW4gcHJv Y2VzcyByZXF1ZXN0cworICogICAgICBjb250YWluaW5nIHRoZSBCTEtJRl9PUF9GTFVTSF9ESVNL Q0FDSEUgcmVxdWVzdCBvcGNvZGUuICBSZXF1ZXN0cworICogICAgICBvZiB0aGlzIHR5cGUgbWF5 IHN0aWxsIGJlIHJldHVybmVkIGF0IGFueSB0aW1lIHdpdGggdGhlCisgKiAgICAgIEJMS0lGX1JT UF9FT1BOT1RTVVBQIHJlc3VsdCBjb2RlLgorICoKKyAqIGZlYXR1cmUtZGlzY2FyZAorICogICAg ICBWYWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQorICogICAgICBEZWZhdWx0IFZhbHVlOiAg MAorICoKKyAqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQg Y2FuIHByb2Nlc3MgcmVxdWVzdHMKKyAqICAgICAgY29udGFpbmluZyB0aGUgQkxLSUZfT1BfRElT Q0FSRCByZXF1ZXN0IG9wY29kZS4gIFJlcXVlc3RzCisgKiAgICAgIG9mIHRoaXMgdHlwZSBtYXkg c3RpbGwgYmUgcmV0dXJuZWQgYXQgYW55IHRpbWUgd2l0aCB0aGUKKyAqICAgICAgQkxLSUZfUlNQ X0VPUE5PVFNVUFAgcmVzdWx0IGNvZGUuCisgKgorICogZmVhdHVyZS1wZXJzaXN0ZW50CisgKiAg ICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4pCisgKiAgICAgIERlZmF1bHQgVmFsdWU6 ICAwCisgKiAgICAgIE5vdGVzOiA3CisgKgorICogICAgICBBIHZhbHVlIG9mICIxIiBpbmRpY2F0 ZXMgdGhhdCB0aGUgYmFja2VuZCBjYW4ga2VlcCB0aGUgZ3JhbnRzIHVzZWQKKyAqICAgICAgYnkg dGhlIGZyb250ZW5kIGRyaXZlciBtYXBwZWQsIHNvIHRoZSBzYW1lIHNldCBvZiBncmFudHMgc2hv dWxkIGJlCisgKiAgICAgIHVzZWQgaW4gYWxsIHRyYW5zYWN0aW9ucy4gVGhlIG1heGltdW0gbnVt YmVyIG9mIGdyYW50cyB0aGUgYmFja2VuZAorICogICAgICBjYW4gbWFwIHBlcnNpc3RlbnRseSBk ZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGlkZWFsbHkgaXQKKyAqICAgICAgc2hv dWxkIGJlIFJJTkdfU0laRSAqIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVC4gVXNpbmcg dGhpcworICogICAgICBmZWF0dXJlIHRoZSBiYWNrZW5kIGRvZXNuJ3QgbmVlZCB0byB1bm1hcCBl YWNoIGdyYW50LCBwcmV2ZW50aW5nCisgKiAgICAgIGNvc3RseSBUTEIgZmx1c2hlcy4gVGhlIGJh Y2tlbmQgZHJpdmVyIHNob3VsZCBvbmx5IG1hcCBncmFudHMKKyAqICAgICAgcGVyc2lzdGVudGx5 IGlmIHRoZSBmcm9udGVuZCBzdXBwb3J0cyBpdC4gSWYgYSBiYWNrZW5kIGRyaXZlciBjaG9vc2Vz CisgKiAgICAgIHRvIHVzZSB0aGUgcGVyc2lzdGVudCBwcm90b2NvbCB3aGVuIHRoZSBmcm9udGVu ZCBkb2Vzbid0IHN1cHBvcnQgaXQsCisgKiAgICAgIGl0IHdpbGwgcHJvYmFibHkgaGl0IHRoZSBt YXhpbXVtIG51bWJlciBvZiBwZXJzaXN0ZW50bHkgbWFwcGVkIGdyYW50cworICogICAgICAoZHVl IHRvIHRoZSBmYWN0IHRoYXQgdGhlIGZyb250ZW5kIHdvbid0IGJlIHJldXNpbmcgdGhlIHNhbWUg Z3JhbnRzKSwKKyAqICAgICAgYW5kIGZhbGwgYmFjayB0byBub24tcGVyc2lzdGVudCBtb2RlLiBC YWNrZW5kIGltcGxlbWVudGF0aW9ucyBtYXkKKyAqICAgICAgc2hyaW5rIG9yIGV4cGFuZCB0aGUg bnVtYmVyIG9mIHBlcnNpc3RlbnRseSBtYXBwZWQgZ3JhbnRzIHdpdGhvdXQKKyAqICAgICAgbm90 aWZ5aW5nIHRoZSBmcm9udGVuZCBkZXBlbmRpbmcgb24gbWVtb3J5IGNvbnN0cmFpbnRzICh0aGlz IG1pZ2h0CisgKiAgICAgIGNhdXNlIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24pLgorICoKKyAq ICAgICAgSWYgYSBiYWNrZW5kIGRyaXZlciB3YW50cyB0byBsaW1pdCB0aGUgbWF4aW11bSBudW1i ZXIgb2YgcGVyc2lzdGVudGx5CisgKiAgICAgIG1hcHBlZCBncmFudHMgdG8gYSB2YWx1ZSBsZXNz IHRoYW4gUklOR19TSVpFICoKKyAqICAgICAgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNU IGEgTFJVIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIHRvCisgKiAgICAgIGRpc2NhcmQgdGhlIGdy YW50cyB0aGF0IGFyZSBsZXNzIGNvbW1vbmx5IHVzZWQuIFVzaW5nIGEgTFJVIGluIHRoZQorICog ICAgICBiYWNrZW5kIGRyaXZlciBwYWlyZWQgd2l0aCBhIExJRk8gcXVldWUgaW4gdGhlIGZyb250 ZW5kIHdpbGwKKyAqICAgICAgYWxsb3cgdXMgdG8gaGF2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4g dGhpcyBzY2VuYXJpby4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlcXVlc3QgVHJh bnNwb3J0IFBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbWF4LXJp bmctcGFnZS1vcmRlcgorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorICogICAg ICBEZWZhdWx0IFZhbHVlOiAgMAorICogICAgICBOb3RlczogICAgICAgICAgMSwgMworICoKKyAq ICAgICAgVGhlIG1heGltdW0gc3VwcG9ydGVkIHNpemUgb2YgdGhlIHJlcXVlc3QgcmluZyBidWZm ZXIgaW4gdW5pdHMgb2YKKyAqICAgICAgbGIobWFjaGluZSBwYWdlcykuIChlLmcuIDAgPT0gMSBw YWdlLCAgMSA9IDIgcGFnZXMsIDIgPT0gNCBwYWdlcywKKyAqICAgICAgZXRjLikuCisgKgorICog bWF4LXJpbmctcGFnZXMKKyAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyAqICAg ICAgRGVmYXVsdCBWYWx1ZTogIDEKKyAqICAgICAgTm90ZXM6ICAgICAgICAgIERFUFJFQ0FURUQs IDIsIDMKKyAqCisgKiAgICAgIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCBzaXplIG9mIHRoZSByZXF1 ZXN0IHJpbmcgYnVmZmVyIGluIHVuaXRzIG9mCisgKiAgICAgIG1hY2hpbmUgcGFnZXMuICBUaGUg dmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mIDIuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIEJhY2tlbmQgRGV2aWNlIFByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIGRpc2NhcmQtZW5hYmxlCisgKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xl YW4pCisgKiAgICAgIERlZmF1bHQgVmFsdWU6ICAxCisgKgorICogICAgICBUaGlzIG9wdGlvbmFs IHByb3BlcnR5LCBzZXQgYnkgdGhlIHRvb2xzdGFjaywgaW5zdHJ1Y3RzIHRoZSBiYWNrZW5kCisg KiAgICAgIHRvIG9mZmVyIChvciBub3QgdG8gb2ZmZXIpIGRpc2NhcmQgdG8gdGhlIGZyb250ZW5k LiBJZiB0aGUgcHJvcGVydHkKKyAqICAgICAgaXMgbWlzc2luZyB0aGUgYmFja2VuZCBzaG91bGQg b2ZmZXIgZGlzY2FyZCBpZiB0aGUgYmFja2luZyBzdG9yYWdlCisgKiAgICAgIGFjdHVhbGx5IHN1 cHBvcnRzIGl0LgorICoKKyAqIGRpc2NhcmQtYWxpZ25tZW50CisgKiAgICAgIFZhbHVlczogICAg ICAgICA8dWludDMyX3Q+CisgKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCisgKiAgICAgIE5vdGVz OiAgICAgICAgICA0LCA1CisgKgorICogICAgICBUaGUgb2Zmc2V0LCBpbiBieXRlcyBmcm9tIHRo ZSBiZWdpbm5pbmcgb2YgdGhlIHZpcnR1YWwgYmxvY2sgZGV2aWNlLAorICogICAgICB0byB0aGUg Zmlyc3QsIGFkZHJlc3NhYmxlLCBkaXNjYXJkIGV4dGVudCBvbiB0aGUgdW5kZXJseWluZyBkZXZp Y2UuCisgKgorICogZGlzY2FyZC1ncmFudWxhcml0eQorICogICAgICBWYWx1ZXM6ICAgICAgICAg PHVpbnQzMl90PgorICogICAgICBEZWZhdWx0IFZhbHVlOiAgPCJzZWN0b3Itc2l6ZSI+CisgKiAg ICAgIE5vdGVzOiAgICAgICAgICA0CisgKgorICogICAgICBUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9m IHRoZSBpbmRpdmlkdWFsbHkgYWRkcmVzc2FibGUgZGlzY2FyZCBleHRlbnRzCisgKiAgICAgIG9m IHRoZSB1bmRlcmx5aW5nIGRldmljZS4KKyAqCisgKiBkaXNjYXJkLXNlY3VyZQorICogICAgICBW YWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQorICogICAgICBEZWZhdWx0IFZhbHVlOiAgMAor ICogICAgICBOb3RlczogICAgICAgICAgMTAKKyAqCisgKiAgICAgIEEgdmFsdWUgb2YgIjEiIGlu ZGljYXRlcyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBwcm9jZXNzIEJMS0lGX09QX0RJU0NBUkQKKyAq ICAgICAgcmVxdWVzdHMgd2l0aCB0aGUgQkxLSUZfRElTQ0FSRF9TRUNVUkUgZmxhZyBzZXQuCisg KgorICogaW5mbworICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PiAoYml0bWFwKQor ICoKKyAqICAgICAgQSBjb2xsZWN0aW9uIG9mIGJpdCBmbGFncyBkZXNjcmliaW5nIGF0dHJpYnV0 ZXMgb2YgdGhlIGJhY2tpbmcKKyAqICAgICAgZGV2aWNlLiAgVGhlIFZESVNLXyogbWFjcm9zIGRl ZmluZSB0aGUgbWVhbmluZyBvZiBlYWNoIGJpdAorICogICAgICBsb2NhdGlvbi4KKyAqCisgKiBz ZWN0b3Itc2l6ZQorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorICoKKyAqICAg ICAgVGhlIGxvZ2ljYWwgYmxvY2sgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSB1bmRlcmx5aW5nIHN0 b3JhZ2UuIFRoaXMKKyAqICAgICAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byB3aXRoIGEgbWluaW11 bSB2YWx1ZSBvZiA1MTIuCisgKgorICogICAgICBOT1RFOiBCZWNhdXNlIG9mIGltcGxlbWVudGF0 aW9uIGJ1Z3MgaW4gc29tZSBmcm9udGVuZHMgdGhpcyBtdXN0IGJlCisgKiAgICAgICAgICAgIHNl dCB0byA1MTIsIHVubGVzcyB0aGUgZnJvbnRlbmQgYWR2ZXJ0aXplcyBhIG5vbi16ZXJvIHZhbHVl CisgKiAgICAgICAgICAgIGluIGl0cyAiZmVhdHVyZS1sYXJnZS1zZWN0b3Itc2l6ZSIgeGVuYnVz IG5vZGUuIChTZWUgYmVsb3cpLgorICoKKyAqIHBoeXNpY2FsLXNlY3Rvci1zaXplCisgKiAgICAg IFZhbHVlczogICAgICAgICA8dWludDMyX3Q+CisgKiAgICAgIERlZmF1bHQgVmFsdWU6ICA8InNl Y3Rvci1zaXplIj4KKyAqCisgKiAgICAgIFRoZSBwaHlzaWNhbCBibG9jayBzaXplLCBpbiBieXRl cywgb2YgdGhlIGJhY2tlbmQgc3RvcmFnZS4gVGhpcworICogICAgICBtdXN0IGJlIGFuIGludGVn ZXIgbXVsdGlwbGUgb2YgInNlY3Rvci1zaXplIi4KKyAqCisgKiBzZWN0b3JzCisgKiAgICAgIFZh bHVlczogICAgICAgICA8dWludDY0X3Q+CisgKgorICogICAgICBUaGUgc2l6ZSBvZiB0aGUgYmFj a2VuZCBkZXZpY2UsIGV4cHJlc3NlZCBpbiB1bml0cyBvZiAic2VjdG9yLXNpemUiLgorICogICAg ICBUaGUgcHJvZHVjdCBvZiAic2VjdG9yLXNpemUiIGFuZCAic2VjdG9ycyIgbXVzdCBhbHNvIGJl IGFuIGludGVnZXIKKyAqICAgICAgbXVsdGlwbGUgb2YgInBoeXNpY2FsLXNlY3Rvci1zaXplIiwg aWYgdGhhdCBub2RlIGlzIHByZXNlbnQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZCBYZW5CdXMgTm9kZXMKKyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVxdWVzdCBUcmFu c3BvcnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV2ZW50LWNo YW5uZWwKKyAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyAqCisgKiAgICAgIFRo ZSBpZGVudGlmaWVyIG9mIHRoZSBYZW4gZXZlbnQgY2hhbm5lbCB1c2VkIHRvIHNpZ25hbCBhY3Rp dml0eQorICogICAgICBpbiB0aGUgcmluZyBidWZmZXIuCisgKgorICogcmluZy1yZWYKKyAqICAg ICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyAqICAgICAgTm90ZXM6ICAgICAgICAgIDYK KyAqCisgKiAgICAgIFRoZSBYZW4gZ3JhbnQgcmVmZXJlbmNlIGdyYW50aW5nIHBlcm1pc3Npb24g Zm9yIHRoZSBiYWNrZW5kIHRvIG1hcAorICogICAgICB0aGUgc29sZSBwYWdlIGluIGEgc2luZ2xl IHBhZ2Ugc2l6ZWQgcmluZyBidWZmZXIuCisgKgorICogcmluZy1yZWYldQorICogICAgICBWYWx1 ZXM6ICAgICAgICAgPHVpbnQzMl90PgorICogICAgICBOb3RlczogICAgICAgICAgNgorICoKKyAq ICAgICAgRm9yIGEgZnJvbnRlbmQgcHJvdmlkaW5nIGEgbXVsdGktcGFnZSByaW5nLCBhICJudW1i ZXIgb2YgcmluZyBwYWdlcyIKKyAqICAgICAgc2l6ZWQgbGlzdCBvZiBub2RlcywgZWFjaCBjb250 YWluaW5nIGEgWGVuIGdyYW50IHJlZmVyZW5jZSBncmFudGluZworICogICAgICBwZXJtaXNzaW9u IGZvciB0aGUgYmFja2VuZCB0byBtYXAgdGhlIHBhZ2Ugb2YgdGhlIHJpbmcgbG9jYXRlZAorICog ICAgICBhdCBwYWdlIGluZGV4ICIldSIuICBQYWdlIGluZGV4ZXMgYXJlIHplcm8gYmFzZWQuCisg KgorICogcHJvdG9jb2wKKyAqICAgICAgVmFsdWVzOiAgICAgICAgIHN0cmluZyAoWEVOX0lPX1BS T1RPX0FCSV8qKQorICogICAgICBEZWZhdWx0IFZhbHVlOiAgWEVOX0lPX1BST1RPX0FCSV9OQVRJ VkUKKyAqCisgKiAgICAgIFRoZSBtYWNoaW5lIEFCSSBydWxlcyBnb3Zlcm5pbmcgdGhlIGZvcm1h dCBvZiBhbGwgcmluZyByZXF1ZXN0IGFuZAorICogICAgICByZXNwb25zZSBzdHJ1Y3R1cmVzLgor ICoKKyAqIHJpbmctcGFnZS1vcmRlcgorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90 PgorICogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorICogICAgICBNYXhpbXVtIFZhbHVlOiAgTUFY KGZmcyhtYXgtcmluZy1wYWdlcykgLSAxLCBtYXgtcmluZy1wYWdlLW9yZGVyKQorICogICAgICBO b3RlczogICAgICAgICAgMSwgMworICoKKyAqICAgICAgVGhlIHNpemUgb2YgdGhlIGZyb250ZW5k IGFsbG9jYXRlZCByZXF1ZXN0IHJpbmcgYnVmZmVyIGluIHVuaXRzCisgKiAgICAgIG9mIGxiKG1h Y2hpbmUgcGFnZXMpLiAoZS5nLiAwID09IDEgcGFnZSwgMSA9IDIgcGFnZXMsIDIgPT0gNCBwYWdl cywKKyAqICAgICAgZXRjLikuCisgKgorICogbnVtLXJpbmctcGFnZXMKKyAqICAgICAgVmFsdWVz OiAgICAgICAgIDx1aW50MzJfdD4KKyAqICAgICAgRGVmYXVsdCBWYWx1ZTogIDEKKyAqICAgICAg TWF4aW11bSBWYWx1ZTogIE1BWChtYXgtcmluZy1wYWdlcywoMHgxIDw8IG1heC1yaW5nLXBhZ2Ut b3JkZXIpKQorICogICAgICBOb3RlczogICAgICAgICAgREVQUkVDQVRFRCwgMiwgMworICoKKyAq ICAgICAgVGhlIHNpemUgb2YgdGhlIGZyb250ZW5kIGFsbG9jYXRlZCByZXF1ZXN0IHJpbmcgYnVm ZmVyIGluIHVuaXRzIG9mCisgKiAgICAgIG1hY2hpbmUgcGFnZXMuICBUaGUgdmFsdWUgbXVzdCBi ZSBhIHBvd2VyIG9mIDIuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g RmVhdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZmVhdHVy ZS1wZXJzaXN0ZW50CisgKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4pCisgKiAg ICAgIERlZmF1bHQgVmFsdWU6ICAwCisgKiAgICAgIE5vdGVzOiA3LCA4LCA5CisgKgorICogICAg ICBBIHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMgdGhhdCB0aGUgZnJvbnRlbmQgd2lsbCByZXVzZSB0 aGUgc2FtZSBncmFudHMKKyAqICAgICAgZm9yIGFsbCB0cmFuc2FjdGlvbnMsIGFsbG93aW5nIHRo ZSBiYWNrZW5kIHRvIG1hcCB0aGVtIHdpdGggd3JpdGUKKyAqICAgICAgYWNjZXNzIChldmVuIHdo ZW4gaXQgc2hvdWxkIGJlIHJlYWQtb25seSkuIElmIHRoZSBmcm9udGVuZCBoaXRzIHRoZQorICog ICAgICBtYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIHBlcnNpc3RlbnRseSBtYXBwZWQgZ3JhbnRz LCBpdCBjYW4gZmFsbGJhY2sKKyAqICAgICAgdG8gbm9uIHBlcnNpc3RlbnQgbW9kZS4gVGhpcyB3 aWxsIGNhdXNlIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sCisgKiAgICAgIHNpbmNlIHRoZSB0 aGUgYmFja2VuZCBkcml2ZXIgd2lsbCBzdGlsbCB0cnkgdG8gbWFwIHRob3NlIGdyYW50cworICog ICAgICBwZXJzaXN0ZW50bHkuIFNpbmNlIHRoZSBwZXJzaXN0ZW50IGdyYW50cyBwcm90b2NvbCBp cyBjb21wYXRpYmxlIHdpdGgKKyAqICAgICAgdGhlIHByZXZpb3VzIHByb3RvY29sLCBhIGZyb250 ZW5kIGRyaXZlciBjYW4gY2hvb3NlIHRvIHdvcmsgaW4KKyAqICAgICAgcGVyc2lzdGVudCBtb2Rl IGV2ZW4gd2hlbiB0aGUgYmFja2VuZCBkb2Vzbid0IHN1cHBvcnQgaXQuCisgKgorICogICAgICBJ dCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBmcm9udGVuZCBkcml2ZXIgc3RvcmVzIHRoZSBwZXJz aXN0ZW50bHkKKyAqICAgICAgbWFwcGVkIGdyYW50cyBpbiBhIExJRk8gcXVldWUsIHNvIGEgc3Vi c2V0IG9mIGFsbCBwZXJzaXN0ZW50bHkgbWFwcGVkCisgKiAgICAgIGdyYW50cyBnZXRzIHVzZWQg Y29tbW9ubHkuIFRoaXMgaXMgZG9uZSBpbiBjYXNlIHRoZSBiYWNrZW5kIGRyaXZlcgorICogICAg ICBkZWNpZGVzIHRvIGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwZXJzaXN0ZW50bHkgbWFw cGVkIGdyYW50cworICogICAgICB0byBhIHZhbHVlIGxlc3MgdGhhbiBSSU5HX1NJWkUgKiBCTEtJ Rl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QuCisgKgorICogZmVhdHVyZS1sYXJnZS1zZWN0b3It c2l6ZQorICogICAgICBWYWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQorICogICAgICBEZWZh dWx0IFZhbHVlOiAgMAorICoKKyAqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQg dGhlIGZyb250ZW5kIHdpbGwgY29ycmVjdGx5IHN1cHBseSBhbmQKKyAqICAgICAgaW50ZXJwcmV0 IGFsbCBzZWN0b3ItYmFzZWQgcXVhbnRpdGllcyBpbiB0ZXJtcyBvZiB0aGUgInNlY3Rvci1zaXpl IgorICogICAgICB2YWx1ZSBzdXBwbGllZCBpbiB0aGUgYmFja2VuZCBpbmZvLCB3aGF0ZXZlciB0 aGF0IG1heSBiZSBzZXQgdG8uCisgKiAgICAgIElmIHRoaXMgbm9kZSBpcyBub3QgcHJlc2VudCBv ciBpdHMgdmFsdWUgaXMgIjAiIHRoZW4gaXQgaXMgYXNzdW1lZAorICogICAgICB0aGF0IHRoZSBm cm9udGVuZCByZXF1aXJlcyB0aGF0IHRoZSBsb2dpY2FsIGJsb2NrIHNpemUgaXMgNTEyIGFzIGl0 CisgKiAgICAgIGlzIGhhcmRjb2RlZCAod2hpY2ggaXMgdGhlIGNhc2UgaW4gc29tZSBmcm9udGVu ZCBpbXBsZW1lbnRhdGlvbnMpLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWaXJ0 dWFsIERldmljZSBQcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBk ZXZpY2UtdHlwZQorICogICAgICBWYWx1ZXM6ICAgICAgICAgImRpc2siLCAiY2Ryb20iLCAiZmxv cHB5IiwgZXRjLgorICoKKyAqIHZpcnR1YWwtZGV2aWNlCisgKiAgICAgIFZhbHVlczogICAgICAg ICA8dWludDMyX3Q+CisgKgorICogICAgICBBIHZhbHVlIGluZGljYXRpbmcgdGhlIHBoeXNpY2Fs IGRldmljZSB0byB2aXJ0dWFsaXplIHdpdGhpbiB0aGUKKyAqICAgICAgZnJvbnRlbmQncyBkb21h aW4uICAoZS5nLiAiVGhlIGZpcnN0IEFUQSBkaXNrIiwgIlRoZSB0aGlyZCBTQ1NJCisgKiAgICAg IGRpc2siLCBldGMuKQorICoKKyAqICAgICAgU2VlIGRvY3MvbWlzYy92YmQtaW50ZXJmYWNlLnR4 dCBmb3IgZGV0YWlscyBvbiB0aGUgZm9ybWF0IG9mIHRoaXMKKyAqICAgICAgdmFsdWUuCisgKgor ICogTm90ZXMKKyAqIC0tLS0tCisgKiAoMSkgTXVsdGktcGFnZSByaW5nIGJ1ZmZlciBzY2hlbWUg Zmlyc3QgZGV2ZWxvcGVkIGluIHRoZSBDaXRyaXggWGVuU2VydmVyCisgKiAgICAgUFYgZHJpdmVy cy4KKyAqICgyKSBNdWx0aS1wYWdlIHJpbmcgYnVmZmVyIHNjaGVtZSBmaXJzdCB1c2VkIGluIHNv bWUgUmVkSGF0IGRpc3RyaWJ1dGlvbnMKKyAqICAgICBpbmNsdWRpbmcgYSBkaXN0cmlidXRpb24g ZGVwbG95ZWQgb24gY2VydGFpbiBub2RlcyBvZiB0aGUgQW1hem9uCisgKiAgICAgRUMyIGNsdXN0 ZXIuCisgKiAoMykgU3VwcG9ydCBmb3IgbXVsdGktcGFnZSByaW5nIGJ1ZmZlcnMgd2FzIGltcGxl bWVudGVkIGluZGVwZW5kZW50bHksCisgKiAgICAgaW4gc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1z LCBieSBib3RoIENpdHJpeCBhbmQgUmVkSGF0L0FtYXpvbi4KKyAqICAgICBGb3IgZnVsbCBpbnRl cm9wZXJhYmlsaXR5LCBibG9jayBmcm9udCBhbmQgYmFja2VuZHMgc2hvdWxkIHB1Ymxpc2gKKyAq ICAgICBpZGVudGljYWwgcmluZyBwYXJhbWV0ZXJzLCBhZGp1c3RlZCBmb3IgdW5pdCBkaWZmZXJl bmNlcywgdG8gdGhlCisgKiAgICAgWGVuU3RvcmUgbm9kZXMgdXNlZCBpbiBib3RoIHNjaGVtZXMu CisgKiAoNCkgRGV2aWNlcyB0aGF0IHN1cHBvcnQgZGlzY2FyZCBmdW5jdGlvbmFsaXR5IG1heSBp bnRlcm5hbGx5IGFsbG9jYXRlIHNwYWNlCisgKiAgICAgKGRpc2NhcmRhYmxlIGV4dGVudHMpIGlu IHVuaXRzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBleHBvcnRlZCBsb2dpY2FsCisgKiAgICAg YmxvY2sgc2l6ZS4gSWYgdGhlIGJhY2tpbmcgZGV2aWNlIGhhcyBzdWNoIGRpc2NhcmRhYmxlIGV4 dGVudHMgdGhlCisgKiAgICAgYmFja2VuZCBzaG91bGQgcHJvdmlkZSBib3RoIGRpc2NhcmQtZ3Jh bnVsYXJpdHkgYW5kIGRpc2NhcmQtYWxpZ25tZW50LgorICogICAgIFByb3ZpZGluZyBqdXN0IG9u ZSBvZiB0aGUgdHdvIG1heSBiZSBjb25zaWRlcmVkIGFuIGVycm9yIGJ5IHRoZSBmcm9udGVuZC4K KyAqICAgICBCYWNrZW5kcyBzdXBwb3J0aW5nIGRpc2NhcmQgc2hvdWxkIGluY2x1ZGUgZGlzY2Fy ZC1ncmFudWxhcml0eSBhbmQKKyAqICAgICBkaXNjYXJkLWFsaWdubWVudCBldmVuIGlmIGl0IHN1 cHBvcnRzIGRpc2NhcmRpbmcgaW5kaXZpZHVhbCBzZWN0b3JzLgorICogICAgIEZyb250ZW5kcyBz aG91bGQgYXNzdW1lIGRpc2NhcmQtYWxpZ25tZW50ID09IDAgYW5kIGRpc2NhcmQtZ3JhbnVsYXJp dHkKKyAqICAgICA9PSBzZWN0b3Igc2l6ZSBpZiB0aGVzZSBrZXlzIGFyZSBtaXNzaW5nLgorICog KDUpIFRoZSBkaXNjYXJkLWFsaWdubWVudCBwYXJhbWV0ZXIgYWxsb3dzIGEgcGh5c2ljYWwgZGV2 aWNlIHRvIGJlCisgKiAgICAgcGFydGl0aW9uZWQgaW50byB2aXJ0dWFsIGRldmljZXMgdGhhdCBk byBub3QgbmVjZXNzYXJpbHkgYmVnaW4gb3IKKyAqICAgICBlbmQgb24gYSBkaXNjYXJkYWJsZSBl eHRlbnQgYm91bmRhcnkuCisgKiAoNikgV2hlbiB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHBhZ2Ug YWxsb2NhdGVkIHRvIHRoZSByZXF1ZXN0IHJpbmcsCisgKiAgICAgJ3JpbmctcmVmJyBpcyB1c2Vk IHRvIGNvbW11bmljYXRlIHRoZSBncmFudCByZWZlcmVuY2UgZm9yIHRoaXMKKyAqICAgICBwYWdl IHRvIHRoZSBiYWNrZW5kLiAgV2hlbiB1c2luZyBhIG11bHRpLXBhZ2UgcmluZywgdGhlICdyaW5n LXJlZicKKyAqICAgICBub2RlIGlzIG5vdCBjcmVhdGVkLiAgSW5zdGVhZCAncmluZy1yZWYwJyAt ICdyaW5nLXJlZk4nIGFyZSB1c2VkLgorICogKDcpIFdoZW4gdXNpbmcgcGVyc2lzdGVudCBncmFu dHMgZGF0YSBoYXMgdG8gYmUgY29waWVkIGZyb20vdG8gdGhlIHBhZ2UKKyAqICAgICB3aGVyZSB0 aGUgZ3JhbnQgaXMgY3VycmVudGx5IG1hcHBlZC4gVGhlIG92ZXJoZWFkIG9mIGRvaW5nIHRoaXMg Y29weQorICogICAgIGhvd2V2ZXIgZG9lc24ndCBzdXBwcmVzcyB0aGUgc3BlZWQgaW1wcm92ZW1l bnQgb2Ygbm90IGhhdmluZyB0byB1bm1hcAorICogICAgIHRoZSBncmFudHMuCisgKiAoOCkgVGhl IGZyb250ZW5kIGRyaXZlciBoYXMgdG8gYWxsb3cgdGhlIGJhY2tlbmQgZHJpdmVyIHRvIG1hcCBh bGwgZ3JhbnRzCisgKiAgICAgd2l0aCB3cml0ZSBhY2Nlc3MsIGV2ZW4gd2hlbiB0aGV5IHNob3Vs ZCBiZSBtYXBwZWQgcmVhZC1vbmx5LCBzaW5jZQorICogICAgIGZ1cnRoZXIgcmVxdWVzdHMgbWF5 IHJldXNlIHRoZXNlIGdyYW50cyBhbmQgcmVxdWlyZSB3cml0ZSBwZXJtaXNzaW9ucy4KKyAqICg5 KSBMaW51eCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGhhdmUgYSBsaW1pdCBvbiB0aGUgbWF4aW11 bSBudW1iZXIgb2YKKyAqICAgICBncmFudHMgdGhhdCBjYW4gYmUgcGVyc2lzdGVudGx5IG1hcHBl ZCBpbiB0aGUgZnJvbnRlbmQgZHJpdmVyLCBidXQKKyAqICAgICBkdWUgdG8gdGhlIGZyb250ZW50 IGRyaXZlciBpbXBsZW1lbnRhdGlvbiBpdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyCisgKiAgICAg dGhhbiBSSU5HX1NJWkUgKiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QuCisgKigxMCkg VGhlIGRpc2NhcmQtc2VjdXJlIHByb3BlcnR5IG1heSBiZSBwcmVzZW50IGFuZCB3aWxsIGJlIHNl dCB0byAxIGlmIHRoZQorICogICAgIGJhY2tpbmcgZGV2aWNlIHN1cHBvcnRzIHNlY3VyZSBkaXNj YXJkLgorICooMTEpIE9ubHkgdXNlZCBieSBMaW51eCBhbmQgTmV0QlNELgorICovCisKKy8qCisg KiBNdWx0aXBsZSBoYXJkd2FyZSBxdWV1ZXMvcmluZ3M6CisgKiBJZiBzdXBwb3J0ZWQsIHRoZSBi YWNrZW5kIHdpbGwgd3JpdGUgdGhlIGtleSAibXVsdGktcXVldWUtbWF4LXF1ZXVlcyIgdG8KKyAq IHRoZSBkaXJlY3RvcnkgZm9yIHRoYXQgdmJkLCBhbmQgc2V0IGl0cyB2YWx1ZSB0byB0aGUgbWF4 aW11bSBzdXBwb3J0ZWQKKyAqIG51bWJlciBvZiBxdWV1ZXMuCisgKiBGcm9udGVuZHMgdGhhdCBh cmUgYXdhcmUgb2YgdGhpcyBmZWF0dXJlIGFuZCB3aXNoIHRvIHVzZSBpdCBjYW4gd3JpdGUgdGhl CisgKiBrZXkgIm11bHRpLXF1ZXVlLW51bS1xdWV1ZXMiIHdpdGggdGhlIG51bWJlciB0aGV5IHdp c2ggdG8gdXNlLCB3aGljaCBtdXN0IGJlCisgKiBncmVhdGVyIHRoYW4gemVybywgYW5kIG5vIG1v cmUgdGhhbiB0aGUgdmFsdWUgcmVwb3J0ZWQgYnkgdGhlIGJhY2tlbmQgaW4KKyAqICJtdWx0aS1x dWV1ZS1tYXgtcXVldWVzIi4KKyAqCisgKiBGb3IgZnJvbnRlbmRzIHJlcXVlc3RpbmcganVzdCBv bmUgcXVldWUsIHRoZSB1c3VhbCBldmVudC1jaGFubmVsIGFuZAorICogcmluZy1yZWYga2V5cyBh cmUgd3JpdHRlbiBhcyBiZWZvcmUsIHNpbXBsaWZ5aW5nIHRoZSBiYWNrZW5kIHByb2Nlc3NpbmcK KyAqIHRvIGF2b2lkIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gYSBmcm9udGVuZCB0aGF0IGRvZXNu J3QgdW5kZXJzdGFuZCB0aGUKKyAqIG11bHRpLXF1ZXVlIGZlYXR1cmUsIGFuZCBvbmUgdGhhdCBk b2VzLCBidXQgcmVxdWVzdGVkIG9ubHkgb25lIHF1ZXVlLgorICoKKyAqIEZyb250ZW5kcyByZXF1 ZXN0aW5nIHR3byBvciBtb3JlIHF1ZXVlcyBtdXN0IG5vdCB3cml0ZSB0aGUgdG9wbGV2ZWwKKyAq IGV2ZW50LWNoYW5uZWwgYW5kIHJpbmctcmVmIGtleXMsIGluc3RlYWQgd3JpdGluZyB0aG9zZSBr ZXlzIHVuZGVyIHN1Yi1rZXlzCisgKiBoYXZpbmcgdGhlIG5hbWUgInF1ZXVlLU4iIHdoZXJlIE4g aXMgdGhlIGludGVnZXIgSUQgb2YgdGhlIHF1ZXVlL3JpbmcgZm9yCisgKiB3aGljaCB0aG9zZSBr ZXlzIGJlbG9uZy4gUXVldWVzIGFyZSBpbmRleGVkIGZyb20gemVyby4KKyAqIEZvciBleGFtcGxl LCBhIGZyb250ZW5kIHdpdGggdHdvIHF1ZXVlcyBtdXN0IHdyaXRlIHRoZSBmb2xsb3dpbmcgc2V0 IG9mCisgKiBxdWV1ZS1yZWxhdGVkIGtleXM6CisgKgorICogL2xvY2FsL2RvbWFpbi8xL2Rldmlj ZS92YmQvMC9tdWx0aS1xdWV1ZS1udW0tcXVldWVzID0gIjIiCisgKiAvbG9jYWwvZG9tYWluLzEv ZGV2aWNlL3ZiZC8wL3F1ZXVlLTAgPSAiIgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92YmQv MC9xdWV1ZS0wL3JpbmctcmVmID0gIjxyaW5nLXJlZiMwPiIKKyAqIC9sb2NhbC9kb21haW4vMS9k ZXZpY2UvdmJkLzAvcXVldWUtMC9ldmVudC1jaGFubmVsID0gIjxldnRjaG4jMD4iCisgKiAvbG9j YWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTEgPSAiIgorICogL2xvY2FsL2RvbWFpbi8x L2RldmljZS92YmQvMC9xdWV1ZS0xL3JpbmctcmVmID0gIjxyaW5nLXJlZiMxPiIKKyAqIC9sb2Nh bC9kb21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMS9ldmVudC1jaGFubmVsID0gIjxldnRjaG4j MT4iCisgKgorICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgbXVsdGlwbGUgcXVldWVzL3Jp bmdzIHRvZ2V0aGVyIHdpdGgKKyAqIGZlYXR1cmUgbXVsdGktcGFnZSByaW5nIGJ1ZmZlci4KKyAq IEZvciBleGFtcGxlLCBhIGZyb250ZW5kIHJlcXVlc3RzIHR3byBxdWV1ZXMvcmluZ3MgYW5kIHRo ZSBzaXplIG9mIGVhY2ggcmluZworICogYnVmZmVyIGlzIHR3byBwYWdlcyBtdXN0IHdyaXRlIHRo ZSBmb2xsb3dpbmcgc2V0IG9mIHJlbGF0ZWQga2V5czoKKyAqCisgKiAvbG9jYWwvZG9tYWluLzEv ZGV2aWNlL3ZiZC8wL211bHRpLXF1ZXVlLW51bS1xdWV1ZXMgPSAiMiIKKyAqIC9sb2NhbC9kb21h aW4vMS9kZXZpY2UvdmJkLzAvcmluZy1wYWdlLW9yZGVyID0gIjEiCisgKiAvbG9jYWwvZG9tYWlu LzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTAgPSAiIgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92 YmQvMC9xdWV1ZS0wL3JpbmctcmVmMCA9ICI8cmluZy1yZWYjMD4iCisgKiAvbG9jYWwvZG9tYWlu LzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTAvcmluZy1yZWYxID0gIjxyaW5nLXJlZiMxPiIKKyAqIC9s b2NhbC9kb21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMC9ldmVudC1jaGFubmVsID0gIjxldnRj aG4jMD4iCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTEgPSAiIgorICog L2xvY2FsL2RvbWFpbi8xL2RldmljZS92YmQvMC9xdWV1ZS0xL3JpbmctcmVmMCA9ICI8cmluZy1y ZWYjMj4iCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTEvcmluZy1yZWYx ID0gIjxyaW5nLXJlZiMzPiIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUt MS9ldmVudC1jaGFubmVsID0gIjxldnRjaG4jMT4iCisgKgorICovCisKKy8qCisgKiBTVEFURSBE SUFHUkFNUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFN0YXJ0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUb29sIHN0YWNrIGNyZWF0ZXMgZnJvbnQg YW5kIGJhY2sgbm9kZXMgd2l0aCBzdGF0ZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZy4KKyAqCisg KiBGcm9udCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjaworICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKyAqIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nICAgICAgICAgICAgICBYZW5idXNT dGF0ZUluaXRpYWxpc2luZworICogIG8gUXVlcnkgdmlydHVhbCBkZXZpY2UgICAgICAgICAgICAg ICBvIFF1ZXJ5IGJhY2tlbmQgZGV2aWNlIGlkZW50aWZpY2F0aW9uCisgKiAgICBwcm9wZXJ0aWVz LiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS4KKyAqICBvIFNldHVwIE9TIGRldmljZSBp bnN0YW5jZS4gICAgICAgICAgbyBPcGVuIGFuZCB2YWxpZGF0ZSBiYWNrZW5kIGRldmljZS4KKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBQdWJsaXNoIGJhY2tlbmQg ZmVhdHVyZXMgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHJhbnNwb3J0IHBhcmFtZXRlcnMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWGVuYnVzU3RhdGVJbml0V2FpdAorICoKKyAqIG8gUXVlcnkgYmFja2VuZCBm ZWF0dXJlcyBhbmQKKyAqICAgdHJhbnNwb3J0IHBhcmFtZXRlcnMuCisgKiBvIEFsbG9jYXRlIGFu ZCBpbml0aWFsaXplIHRoZQorICogICByZXF1ZXN0IHJpbmcuCisgKiBvIFB1Ymxpc2ggdHJhbnNw b3J0IHBhcmFtZXRlcnMKKyAqICAgdGhhdCB3aWxsIGJlIGluIGVmZmVjdCBkdXJpbmcKKyAqICAg dGhpcyBjb25uZWN0aW9uLgorICogICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICB8Cisg KiAgICAgICAgICAgICAgVgorICogWGVuYnVzU3RhdGVJbml0aWFsaXNlZAorICoKKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBRdWVyeSBmcm9udGVuZCB0cmFuc3Bv cnQgcGFyYW1ldGVycy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg byBDb25uZWN0IHRvIHRoZSByZXF1ZXN0IHJpbmcgYW5kCisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXZlbnQgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbyBQdWJsaXNoIGJhY2tlbmQgZGV2aWNlIHByb3BlcnRpZXMu CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWGVuYnVzU3Rh dGVDb25uZWN0ZWQKKyAqCisgKiAgbyBRdWVyeSBiYWNrZW5kIGRldmljZSBwcm9wZXJ0aWVzLgor ICogIG8gRmluYWxpemUgT1MgdmlydHVhbCBkZXZpY2UKKyAqICAgIGluc3RhbmNlLgorICogICAg ICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgVgorICogWGVu YnVzU3RhdGVDb25uZWN0ZWQKKyAqCisgKiBOb3RlOiBEcml2ZXJzIHRoYXQgZG8gbm90IHN1cHBv cnQgYW55IG9wdGlvbmFsIGZlYXR1cmVzLCBvciB0aGUgbmVnb3RpYXRpb24KKyAqICAgICAgIG9m IHRyYW5zcG9ydCBwYXJhbWV0ZXJzLCBjYW4gc2tpcCBjZXJ0YWluIHN0YXRlcyBpbiB0aGUgc3Rh dGUgbWFjaGluZToKKyAqCisgKiAgICAgICBvIEEgZnJvbnRlbmQgbWF5IHRyYW5zaXRpb24gdG8g WGVuYnVzU3RhdGVJbml0aWFsaXNlZCB3aXRob3V0CisgKiAgICAgICAgIHdhaXRpbmcgZm9yIHRo ZSBiYWNrZW5kIHRvIGVudGVyIFhlbmJ1c1N0YXRlSW5pdFdhaXQuICBJbiB0aGlzCisgKiAgICAg ICAgIGNhc2UsIGRlZmF1bHQgdHJhbnNwb3J0IHBhcmFtZXRlcnMgYXJlIGluIGVmZmVjdCBhbmQg YW55CisgKiAgICAgICAgIHRyYW5zcG9ydCBwYXJhbWV0ZXJzIHB1Ymxpc2hlZCBieSB0aGUgZnJv bnRlbmQgbXVzdCBjb250YWluCisgKiAgICAgICAgIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICoK KyAqICAgICAgIG8gQSBiYWNrZW5kIG1heSB0cmFuc2l0aW9uIHRvIFhlbmJ1c1N0YXRlSW5pdGlh bGlzZWQsIGJ5cGFzc2luZworICogICAgICAgICBYZW5idXNTdGF0ZUluaXRXYWl0LCB3aXRob3V0 IHdhaXRpbmcgZm9yIHRoZSBmcm9udGVuZCB0byBmaXJzdAorICogICAgICAgICBlbnRlciB0aGUg WGVuYnVzU3RhdGVJbml0aWFsaXNlZCBzdGF0ZS4gIEluIHRoaXMgY2FzZSwgZGVmYXVsdAorICog ICAgICAgICB0cmFuc3BvcnQgcGFyYW1ldGVycyBhcmUgaW4gZWZmZWN0IGFuZCBhbnkgdHJhbnNw b3J0IHBhcmFtZXRlcnMKKyAqICAgICAgICAgcHVibGlzaGVkIGJ5IHRoZSBiYWNrZW5kIG11c3Qg Y29udGFpbiB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAqCisgKiAgICAgICBEcml2ZXJzIHRoYXQg c3VwcG9ydCBvcHRpb25hbCBmZWF0dXJlcyBhbmQvb3IgdHJhbnNwb3J0IHBhcmFtZXRlcgorICog ICAgICAgbmVnb3RpYXRpb24gbXVzdCB0b2xlcmF0ZSB0aGVzZSBhZGRpdGlvbmFsIHN0YXRlIHRy YW5zaXRpb24gcGF0aHMuCisgKiAgICAgICBJbiBnZW5lcmFsIHRoaXMgbWVhbnMgcGVyZm9ybWlu ZyB0aGUgd29yayBvZiBhbnkgc2tpcHBlZCBzdGF0ZQorICogICAgICAgdHJhbnNpdGlvbiwgaWYg aXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkLCBpbiBhZGRpdGlvbiB0byB0aGUKKyAq ICAgICAgIHdvcmsgYXNzb2NpYXRlZCB3aXRoIGVudHJ5IGludG8gdGhlIGN1cnJlbnQgc3RhdGUu CisgKi8KKworLyoKKyAqIFJFUVVFU1QgQ09ERVMuCisgKi8KKyNkZWZpbmUgQkxLSUZfT1BfUkVB RCAgICAgICAgICAgICAgMAorI2RlZmluZSBCTEtJRl9PUF9XUklURSAgICAgICAgICAgICAxCisv KgorICogQWxsIHdyaXRlcyBpc3N1ZWQgcHJpb3IgdG8gYSByZXF1ZXN0IHdpdGggdGhlIEJMS0lG X09QX1dSSVRFX0JBUlJJRVIKKyAqIG9wZXJhdGlvbiBjb2RlICgiYmFycmllciByZXF1ZXN0Iikg bXVzdCBiZSBjb21wbGV0ZWQgcHJpb3IgdG8gdGhlCisgKiBleGVjdXRpb24gb2YgdGhlIGJhcnJp ZXIgcmVxdWVzdC4gIEFsbCB3cml0ZXMgaXNzdWVkIGFmdGVyIHRoZSBiYXJyaWVyCisgKiByZXF1 ZXN0IG11c3Qgbm90IGV4ZWN1dGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGJh cnJpZXIgcmVxdWVzdC4KKyAqCisgKiBPcHRpb25hbC4gIFNlZSAiZmVhdHVyZS1iYXJyaWVyIiBY ZW5CdXMgbm9kZSBkb2N1bWVudGF0aW9uIGFib3ZlLgorICovCisjZGVmaW5lIEJMS0lGX09QX1dS SVRFX0JBUlJJRVIgICAgIDIKKy8qCisgKiBDb21taXQgYW55IHVuY29tbWl0dGVkIGNvbnRlbnRz IG9mIHRoZSBiYWNraW5nIGRldmljZSdzIHZvbGF0aWxlIGNhY2hlCisgKiB0byBzdGFibGUgc3Rv cmFnZS4KKyAqCisgKiBPcHRpb25hbC4gIFNlZSAiZmVhdHVyZS1mbHVzaC1jYWNoZSIgWGVuQnVz IG5vZGUgZG9jdW1lbnRhdGlvbiBhYm92ZS4KKyAqLworI2RlZmluZSBCTEtJRl9PUF9GTFVTSF9E SVNLQ0FDSEUgICAzCisvKgorICogVXNlZCBpbiBTTEVTIHNvdXJjZXMgZm9yIGRldmljZSBzcGVj aWZpYyBjb21tYW5kIHBhY2tldAorICogY29udGFpbmVkIHdpdGhpbiB0aGUgcmVxdWVzdC4gUmVz ZXJ2ZWQgZm9yIHRoYXQgcHVycG9zZS4KKyAqLworI2RlZmluZSBCTEtJRl9PUF9SRVNFUlZFRF8x ICAgICAgICA0CisvKgorICogSW5kaWNhdGUgdG8gdGhlIGJhY2tlbmQgZGV2aWNlIHRoYXQgYSBy ZWdpb24gb2Ygc3RvcmFnZSBpcyBubyBsb25nZXIgaW4KKyAqIHVzZSwgYW5kIG1heSBiZSBkaXNj YXJkZWQgYXQgYW55IHRpbWUgd2l0aG91dCBpbXBhY3QgdG8gdGhlIGNsaWVudC4gIElmCisgKiB0 aGUgQkxLSUZfRElTQ0FSRF9TRUNVUkUgZmxhZyBpcyBzZXQgb24gdGhlIHJlcXVlc3QsIGFsbCBj b3BpZXMgb2YgdGhlCisgKiBkaXNjYXJkZWQgcmVnaW9uIG9uIHRoZSBkZXZpY2UgbXVzdCBiZSBy ZW5kZXJlZCB1bnJlY292ZXJhYmxlIGJlZm9yZSB0aGUKKyAqIGNvbW1hbmQgcmV0dXJucy4KKyAq CisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhbmFsb2dvdXMgdG8gcGVyZm9ybWluZyBhIHRyaW0gKEFU QSkgb3IgdW5hbXAgKFNDU0kpLAorICogY29tbWFuZCBvbiBhIG5hdGl2ZSBkZXZpY2UuCisgKgor ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0cmltL3VubWFwIG9wZXJhdGlvbnMgY2FuIGJlIGZv dW5kIGF0OgorICogaHR0cDovL3QxMy5vcmcvRG9jdW1lbnRzL1VwbG9hZGVkRG9jdW1lbnRzL2Rv Y3MyMDA4LworICogICAgIGUwNzE1NHI2LURhdGFfU2V0X01hbmFnZW1lbnRfUHJvcG9zYWxfZm9y X0FUQS1BQ1MyLmRvYworICogaHR0cDovL3d3dy5zZWFnYXRlLmNvbS9zdGF0aWNmaWxlcy9zdXBw b3J0L2Rpc2MvbWFudWFscy8KKyAqICAgICBJbnRlcmZhY2UlMjBtYW51YWxzLzEwMDI5MzA2OGMu cGRmCisgKgorICogT3B0aW9uYWwuICBTZWUgImZlYXR1cmUtZGlzY2FyZCIsICJkaXNjYXJkLWFs aWdubWVudCIsCisgKiAiZGlzY2FyZC1ncmFudWxhcml0eSIsIGFuZCAiZGlzY2FyZC1zZWN1cmUi IGluIHRoZSBYZW5CdXMgbm9kZQorICogZG9jdW1lbnRhdGlvbiBhYm92ZS4KKyAqLworI2RlZmlu ZSBCTEtJRl9PUF9ESVNDQVJEICAgICAgICAgICA1CisKKy8qCisgKiBSZWNvZ25pemVkIGlmICJm ZWF0dXJlLW1heC1pbmRpcmVjdC1zZWdtZW50cyIgaW4gcHJlc2VudCBpbiB0aGUgYmFja2VuZAor ICogeGVuYnVzIGluZm8uIFRoZSAiZmVhdHVyZS1tYXgtaW5kaXJlY3Qtc2VnbWVudHMiIG5vZGUg Y29udGFpbnMgdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiBzZWdtZW50cyBhbGxvd2VkIGJ5IHRo ZSBiYWNrZW5kIHBlciByZXF1ZXN0LiBJZiB0aGUgbm9kZSBpcworICogcHJlc2VudCwgdGhlIGZy b250ZW5kIG1pZ2h0IHVzZSBibGtpZl9yZXF1ZXN0X2luZGlyZWN0IHN0cnVjdHMgaW4gb3JkZXIg dG8KKyAqIGlzc3VlIHJlcXVlc3RzIHdpdGggbW9yZSB0aGFuIEJMS0lGX01BWF9TRUdNRU5UU19Q RVJfUkVRVUVTVCAoMTEpLiBUaGUKKyAqIG1heGltdW0gbnVtYmVyIG9mIGluZGlyZWN0IHNlZ21l bnRzIGlzIGZpeGVkIGJ5IHRoZSBiYWNrZW5kLCBidXQgdGhlCisgKiBmcm9udGVuZCBjYW4gaXNz dWUgcmVxdWVzdHMgd2l0aCBhbnkgbnVtYmVyIG9mIGluZGlyZWN0IHNlZ21lbnRzIGFzIGxvbmcg YXMKKyAqIGl0J3MgbGVzcyB0aGFuIHRoZSBudW1iZXIgcHJvdmlkZWQgYnkgdGhlIGJhY2tlbmQu IFRoZSBpbmRpcmVjdF9ncmVmcyBmaWVsZAorICogaW4gYmxraWZfcmVxdWVzdF9pbmRpcmVjdCBz aG91bGQgYmUgZmlsbGVkIGJ5IHRoZSBmcm9udGVuZCB3aXRoIHRoZQorICogZ3JhbnQgcmVmZXJl bmNlcyBvZiB0aGUgcGFnZXMgdGhhdCBhcmUgaG9sZGluZyB0aGUgaW5kaXJlY3Qgc2VnbWVudHMu CisgKiBUaGVzZSBwYWdlcyBhcmUgZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgYmxraWZfcmVxdWVz dF9zZWdtZW50IHRoYXQgaG9sZCB0aGUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWdtZW50 cy4gVGhlIG51bWJlciBvZiBpbmRpcmVjdCBwYWdlcyB0byB1c2UgaXMKKyAqIGRldGVybWluZWQg YnkgdGhlIG51bWJlciBvZiBzZWdtZW50cyBhbiBpbmRpcmVjdCByZXF1ZXN0IGNvbnRhaW5zLiBF dmVyeQorICogaW5kaXJlY3QgcGFnZSBjYW4gY29udGFpbiBhIG1heGltdW0gb2YKKyAqIChQQUdF X1NJWkUgLyBzaXplb2Yoc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCkpIHNlZ21lbnRzLCBz byB0bworICogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgaW5kaXJlY3QgcGFnZXMgdG8gdXNlIHdl IGhhdmUgdG8gZG8KKyAqIGNlaWwoaW5kaXJlY3Rfc2VnbWVudHMgLyAoUEFHRV9TSVpFIC8gc2l6 ZW9mKHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQpKSkuCisgKgorICogSWYgYSBiYWNrZW5k IGRvZXMgbm90IHJlY29nbml6ZSBCTEtJRl9PUF9JTkRJUkVDVCwgaXQgc2hvdWxkICpub3QqCisg KiBjcmVhdGUgdGhlICJmZWF0dXJlLW1heC1pbmRpcmVjdC1zZWdtZW50cyIgbm9kZSEKKyAqLwor I2RlZmluZSBCTEtJRl9PUF9JTkRJUkVDVCAgICAgICAgICA2CisKKy8qCisgKiBNYXhpbXVtIHNj YXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHBlciByZXF1ZXN0LgorICogVGhpcyBpcyBjYXJlZnVsbHkg Y2hvc2VuIHNvIHRoYXQgc2l6ZW9mKGJsa2lmX3JpbmdfdCkgPD0gUEFHRV9TSVpFLgorICogTkIu IFRoaXMgY291bGQgYmUgMTIgaWYgdGhlIHJpbmcgaW5kZXhlcyB3ZXJlbid0IHN0b3JlZCBpbiB0 aGUgc2FtZSBwYWdlLgorICovCisjZGVmaW5lIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVT VCAxMQorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgaW5kaXJlY3QgcGFnZXMgdG8gdXNlIHBl ciByZXF1ZXN0LgorICovCisjZGVmaW5lIEJMS0lGX01BWF9JTkRJUkVDVF9QQUdFU19QRVJfUkVR VUVTVCA4CisKKy8qCisgKiBOQi4gJ2ZpcnN0X3NlY3QnIGFuZCAnbGFzdF9zZWN0JyBpbiBibGtp Zl9yZXF1ZXN0X3NlZ21lbnQsIGFzIHdlbGwgYXMKKyAqICdzZWN0b3JfbnVtYmVyJyBpbiBibGtp Zl9yZXF1ZXN0LCBibGtpZl9yZXF1ZXN0X2Rpc2NhcmQgYW5kCisgKiBibGtpZl9yZXF1ZXN0X2lu ZGlyZWN0IGFyZSBzZWN0b3ItYmFzZWQgcXVhbnRpdGllcy4gU2VlIHRoZSBkZXNjcmlwdGlvbgor ICogb2YgdGhlICJmZWF0dXJlLWxhcmdlLXNlY3Rvci1zaXplIiBmcm9udGVuZCB4ZW5idXMgbm9k ZSBhYm92ZSBmb3IKKyAqIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBibGtpZl9yZXF1 ZXN0X3NlZ21lbnQgeworICAgIGdyYW50X3JlZl90IGdyZWY7ICAgICAgICAvKiByZWZlcmVuY2Ug dG8gSS9PIGJ1ZmZlciBmcmFtZSAgICAgICAgKi8KKyAgICAvKiBAZmlyc3Rfc2VjdDogZmlyc3Qg c2VjdG9yIGluIGZyYW1lIHRvIHRyYW5zZmVyIChpbmNsdXNpdmUpLiAgICovCisgICAgLyogQGxh c3Rfc2VjdDogbGFzdCBzZWN0b3IgaW4gZnJhbWUgdG8gdHJhbnNmZXIgKGluY2x1c2l2ZSkuICAg ICAqLworICAgIHVpbnQ4X3QgICAgIGZpcnN0X3NlY3QsIGxhc3Rfc2VjdDsKK307CisKKy8qCisg KiBTdGFydGluZyByaW5nIGVsZW1lbnQgZm9yIGFueSBJL08gcmVxdWVzdC4KKyAqLworc3RydWN0 IGJsa2lmX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgICAgICAgIG9wZXJhdGlvbjsgICAgLyogQkxL SUZfT1BfPz8/ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdWludDhfdCAgICAgICAg bnJfc2VnbWVudHM7ICAvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAgICAgICAgICAgICAgICAgKi8K KyAgICBibGtpZl92ZGV2X3QgICBoYW5kbGU7ICAgICAgIC8qIG9ubHkgZm9yIHJlYWQvd3JpdGUg cmVxdWVzdHMgICAgICAgICAqLworICAgIHVpbnQ2NF90ICAgICAgIGlkOyAgICAgICAgICAgLyog cHJpdmF0ZSBndWVzdCB2YWx1ZSwgZWNob2VkIGluIHJlc3AgICovCisgICAgYmxraWZfc2VjdG9y X3Qgc2VjdG9yX251bWJlcjsvKiBzdGFydCBzZWN0b3IgaWR4IG9uIGRpc2sgKHIvdyBvbmx5KSAg Ki8KKyAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50IHNlZ1tCTEtJRl9NQVhfU0VHTUVO VFNfUEVSX1JFUVVFU1RdOworfTsKK3R5cGVkZWYgc3RydWN0IGJsa2lmX3JlcXVlc3QgYmxraWZf cmVxdWVzdF90OworCisvKgorICogQ2FzdCB0byB0aGlzIHN0cnVjdHVyZSB3aGVuIGJsa2lmX3Jl cXVlc3Qub3BlcmF0aW9uID09IEJMS0lGX09QX0RJU0NBUkQKKyAqIHNpemVvZihzdHJ1Y3QgYmxr aWZfcmVxdWVzdF9kaXNjYXJkKSA8PSBzaXplb2Yoc3RydWN0IGJsa2lmX3JlcXVlc3QpCisgKi8K K3N0cnVjdCBibGtpZl9yZXF1ZXN0X2Rpc2NhcmQgeworICAgIHVpbnQ4X3QgICAgICAgIG9wZXJh dGlvbjsgICAgLyogQkxLSUZfT1BfRElTQ0FSRCAgICAgICAgICAgICAgICAgICAgICovCisgICAg dWludDhfdCAgICAgICAgZmxhZzsgICAgICAgICAvKiBCTEtJRl9ESVNDQVJEX1NFQ1VSRSBvciB6 ZXJvICAgICAgICAgKi8KKyNkZWZpbmUgQkxLSUZfRElTQ0FSRF9TRUNVUkUgKDE8PDApICAvKiBp Z25vcmVkIGlmIGRpc2NhcmQtc2VjdXJlPTAgICAgICAqLworICAgIGJsa2lmX3ZkZXZfdCAgIGhh bmRsZTsgICAgICAgLyogc2FtZSBhcyBmb3IgcmVhZC93cml0ZSByZXF1ZXN0cyAgICAgICovCisg ICAgdWludDY0X3QgICAgICAgaWQ7ICAgICAgICAgICAvKiBwcml2YXRlIGd1ZXN0IHZhbHVlLCBl Y2hvZWQgaW4gcmVzcCAgKi8KKyAgICBibGtpZl9zZWN0b3JfdCBzZWN0b3JfbnVtYmVyOy8qIHN0 YXJ0IHNlY3RvciBpZHggb24gZGlzayAgICAgICAgICAgICAqLworICAgIHVpbnQ2NF90ICAgICAg IG5yX3NlY3RvcnM7ICAgLyogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgc2VjdG9ycyB0byBkaXNjYXJk Ki8KK307Cit0eXBlZGVmIHN0cnVjdCBibGtpZl9yZXF1ZXN0X2Rpc2NhcmQgYmxraWZfcmVxdWVz dF9kaXNjYXJkX3Q7CisKK3N0cnVjdCBibGtpZl9yZXF1ZXN0X2luZGlyZWN0IHsKKyAgICB1aW50 OF90ICAgICAgICBvcGVyYXRpb247ICAgIC8qIEJMS0lGX09QX0lORElSRUNUICAgICAgICAgICAg ICAgICAgICAqLworICAgIHVpbnQ4X3QgICAgICAgIGluZGlyZWN0X29wOyAgLyogQkxLSUZfT1Bf e1JFQUQvV1JJVEV9ICAgICAgICAgICAgICAgICovCisgICAgdWludDE2X3QgICAgICAgbnJfc2Vn bWVudHM7ICAvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1 aW50NjRfdCAgICAgICBpZDsgICAgICAgICAgIC8qIHByaXZhdGUgZ3Vlc3QgdmFsdWUsIGVjaG9l ZCBpbiByZXNwICAqLworICAgIGJsa2lmX3NlY3Rvcl90IHNlY3Rvcl9udW1iZXI7Lyogc3RhcnQg c2VjdG9yIGlkeCBvbiBkaXNrIChyL3cgb25seSkgICovCisgICAgYmxraWZfdmRldl90ICAgaGFu ZGxlOyAgICAgICAvKiBzYW1lIGFzIGZvciByZWFkL3dyaXRlIHJlcXVlc3RzICAgICAgKi8KKyAg ICBncmFudF9yZWZfdCAgICBpbmRpcmVjdF9ncmVmc1tCTEtJRl9NQVhfSU5ESVJFQ1RfUEFHRVNf UEVSX1JFUVVFU1RdOworI2lmZGVmIF9faTM4Nl9fCisgICAgdWludDY0X3QgICAgICAgcGFkOyAg ICAgICAgICAvKiBNYWtlIGl0IDY0IGJ5dGUgYWxpZ25lZCBvbiBpMzg2ICAgICAgKi8KKyNlbmRp ZgorfTsKK3R5cGVkZWYgc3RydWN0IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3QgYmxraWZfcmVxdWVz dF9pbmRpcmVjdF90OworCitzdHJ1Y3QgYmxraWZfcmVzcG9uc2UgeworICAgIHVpbnQ2NF90ICAg ICAgICBpZDsgICAgICAgICAgICAgIC8qIGNvcGllZCBmcm9tIHJlcXVlc3QgKi8KKyAgICB1aW50 OF90ICAgICAgICAgb3BlcmF0aW9uOyAgICAgICAvKiBjb3BpZWQgZnJvbSByZXF1ZXN0ICovCisg ICAgaW50MTZfdCAgICAgICAgIHN0YXR1czsgICAgICAgICAgLyogQkxLSUZfUlNQXz8/PyAgICAg ICAqLworfTsKK3R5cGVkZWYgc3RydWN0IGJsa2lmX3Jlc3BvbnNlIGJsa2lmX3Jlc3BvbnNlX3Q7 CisKKy8qCisgKiBTVEFUVVMgUkVUVVJOIENPREVTLgorICovCisgLyogT3BlcmF0aW9uIG5vdCBz dXBwb3J0ZWQgKG9ubHkgaGFwcGVucyBvbiBiYXJyaWVyIHdyaXRlcykuICovCisjZGVmaW5lIEJM S0lGX1JTUF9FT1BOT1RTVVBQICAtMgorIC8qIE9wZXJhdGlvbiBmYWlsZWQgZm9yIHNvbWUgdW5z cGVjaWZpZWQgcmVhc29uICgtRUlPKS4gKi8KKyNkZWZpbmUgQkxLSUZfUlNQX0VSUk9SICAgICAg IC0xCisgLyogT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICovCisjZGVmaW5lIEJM S0lGX1JTUF9PS0FZICAgICAgICAgMAorCisvKgorICogR2VuZXJhdGUgYmxraWYgcmluZyBzdHJ1 Y3R1cmVzIGFuZCB0eXBlcy4KKyAqLworREVGSU5FX1JJTkdfVFlQRVMoYmxraWYsIHN0cnVjdCBi bGtpZl9yZXF1ZXN0LCBzdHJ1Y3QgYmxraWZfcmVzcG9uc2UpOworCisjZGVmaW5lIFZESVNLX0NE Uk9NICAgICAgICAweDEKKyNkZWZpbmUgVkRJU0tfUkVNT1ZBQkxFICAgIDB4MgorI2RlZmluZSBW RElTS19SRUFET05MWSAgICAgMHg0CisKKyNlbmRpZiAvKiBYRU5fUFVCTElDX0lPX0JMS0lGX0gg Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaHcveGVuL2lvL3JpbmcuaCBiL2luY2x1ZGUvaHcveGVu L2ludGVyZmFjZS9pby9yaW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGlu Y2x1ZGUvaHcveGVuL2lvL3JpbmcuaApyZW5hbWUgdG8gaW5jbHVkZS9ody94ZW4vaW50ZXJmYWNl L2lvL3JpbmcuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ody94ZW4vaW50ZXJmYWNlL2lvL3VzYmlm LmggYi9pbmNsdWRlL2h3L3hlbi9pbnRlcmZhY2UvaW8vdXNiaWYuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5hZTNkYzcyMGZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5j bHVkZS9ody94ZW4vaW50ZXJmYWNlL2lvL3VzYmlmLmgKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisg KiB1c2JpZi5oCisgKgorICogVVNCIEkvTyBpbnRlcmZhY2UgZm9yIFhlbiBndWVzdCBPU2VzLgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgRlVKSVRTVSBMQUJPUkFUT1JJRVMgTFRELgorICog QXV0aG9yOiBOb2JvcnUgSXdhbWF0c3UgPG5faXdhbWF0c3VAanAuZnVqaXRzdS5jb20+CisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICog ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgorICovCisKKyNpZm5kZWYgWEVOX1BVQkxJQ19JT19VU0JJRl9ICisjZGVmaW5lIFhFTl9Q VUJMSUNfSU9fVVNCSUZfSAorCisjaW5jbHVkZSAicmluZy5oIgorI2luY2x1ZGUgIi4uL2dyYW50 X3RhYmxlLmgiCisKKy8qCisgKiBGZWF0dXJlIGFuZCBQYXJhbWV0ZXIgTmVnb3RpYXRpb24KKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhlIHR3byBoYWx2ZXMgb2Yg YSBYZW4gcHZVU0IgZHJpdmVyIHV0aWxpemUgbm9kZXMgd2l0aGluIHRoZSBYZW5TdG9yZSB0bwor ICogY29tbXVuaWNhdGUgY2FwYWJpbGl0aWVzIGFuZCB0byBuZWdvdGlhdGUgb3BlcmF0aW5nIHBh cmFtZXRlcnMuIFRoaXMKKyAqIHNlY3Rpb24gZW51bWVyYXRlcyB0aGVzZSBub2RlcyB3aGljaCBy ZXNpZGUgaW4gdGhlIHJlc3BlY3RpdmUgZnJvbnQgYW5kCisgKiBiYWNrZW5kIHBvcnRpb25zIG9m IHRoZSBYZW5TdG9yZSwgZm9sbG93aW5nIHRoZSBYZW5CdXMgY29udmVudGlvbi4KKyAqCisgKiBB bnkgc3BlY2lmaWVkIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IGlmIHRoZSBjb3JyZXNwb25k aW5nIFhlbkJ1cyBub2RlCisgKiBpcyBub3QgcHJlc2VudCBpbiB0aGUgWGVuU3RvcmUuCisgKgor ICogWGVuU3RvcmUgbm9kZXMgaW4gc2VjdGlvbnMgbWFya2VkICJQUklWQVRFIiBhcmUgc29sZWx5 IGZvciB1c2UgYnkgdGhlCisgKiBkcml2ZXIgc2lkZSB3aG9zZSBYZW5CdXMgdHJlZSBjb250YWlu cyB0aGVtLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgQmFja2VuZCBYZW5CdXMgTm9kZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tIEJhY2tlbmQgRGV2aWNlIElkZW50aWZpY2F0aW9uIChQUklW QVRFKSAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBudW0tcG9ydHMKKyAqICAgICAgVmFsdWVz OiAgICAgICAgIHVuc2lnbmVkIFsxLi4uMzFdCisgKgorICogICAgICBOdW1iZXIgb2YgcG9ydHMg Zm9yIHRoaXMgKHZpcnR1YWwpIFVTQiBob3N0IGNvbm5lY3Rvci4KKyAqCisgKiB1c2ItdmVyCisg KiAgICAgIFZhbHVlczogICAgICAgICB1bnNpZ25lZCBbMS4uLjJdCisgKgorICogICAgICBVU0Ig dmVyc2lvbiBvZiB0aGlzIGhvc3QgY29ubmVjdG9yOiAxID0gVVNCIDEuMSwgMiA9IFVTQiAyLjAu CisgKgorICogcG9ydC9bMS4uLjMxXQorICogICAgICBWYWx1ZXM6ICAgICAgICAgc3RyaW5nCisg KgorICogICAgICBQaHlzaWNhbCBVU0IgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gcG9y dCwgZS5nLiAiMy0xLjUiLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgRnJvbnRlbmQgWGVuQnVzIE5vZGVzCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlcXVlc3QgVHJhbnNwb3J0IFBh cmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldmVudC1jaGFubmVsCisg KiAgICAgIFZhbHVlczogICAgICAgICB1bnNpZ25lZAorICoKKyAqICAgICAgVGhlIGlkZW50aWZp ZXIgb2YgdGhlIFhlbiBldmVudCBjaGFubmVsIHVzZWQgdG8gc2lnbmFsIGFjdGl2aXR5CisgKiAg ICAgIGluIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiB1cmItcmluZy1yZWYKKyAqICAgICAgVmFs dWVzOiAgICAgICAgIHVuc2lnbmVkCisgKgorICogICAgICBUaGUgWGVuIGdyYW50IHJlZmVyZW5j ZSBncmFudGluZyBwZXJtaXNzaW9uIGZvciB0aGUgYmFja2VuZCB0byBtYXAKKyAqICAgICAgdGhl IHNvbGUgcGFnZSBpbiBhIHNpbmdsZSBwYWdlIHNpemVkIHJpbmcgYnVmZmVyLiBUaGlzIGlzIHRo ZSByaW5nCisgKiAgICAgIGJ1ZmZlciBmb3IgdXJiIHJlcXVlc3RzLgorICoKKyAqIGNvbm4tcmlu Zy1yZWYKKyAqICAgICAgVmFsdWVzOiAgICAgICAgIHVuc2lnbmVkCisgKgorICogICAgICBUaGUg WGVuIGdyYW50IHJlZmVyZW5jZSBncmFudGluZyBwZXJtaXNzaW9uIGZvciB0aGUgYmFja2VuZCB0 byBtYXAKKyAqICAgICAgdGhlIHNvbGUgcGFnZSBpbiBhIHNpbmdsZSBwYWdlIHNpemVkIHJpbmcg YnVmZmVyLiBUaGlzIGlzIHRoZSByaW5nCisgKiAgICAgIGJ1ZmZlciBmb3IgY29ubmVjdGlvbi9k aXNjb25uZWN0aW9uIHJlcXVlc3RzLgorICoKKyAqIHByb3RvY29sCisgKiAgICAgIFZhbHVlczog ICAgICAgICBzdHJpbmcgKFhFTl9JT19QUk9UT19BQklfKikKKyAqICAgICAgRGVmYXVsdCBWYWx1 ZTogIFhFTl9JT19QUk9UT19BQklfTkFUSVZFCisgKgorICogICAgICBUaGUgbWFjaGluZSBBQkkg cnVsZXMgZ292ZXJuaW5nIHRoZSBmb3JtYXQgb2YgYWxsIHJpbmcgcmVxdWVzdCBhbmQKKyAqICAg ICAgcmVzcG9uc2Ugc3RydWN0dXJlcy4KKyAqCisgKi8KKworZW51bSB1c2Jfc3BlY192ZXJzaW9u IHsKKwlVU0JfVkVSX1VOS05PV04gPSAwLAorCVVTQl9WRVJfVVNCMTEsCisJVVNCX1ZFUl9VU0Iy MCwKKwlVU0JfVkVSX1VTQjMwLAkvKiBub3Qgc3VwcG9ydGVkIHlldCAqLworfTsKKworLyoKKyAq ICBVU0IgcGlwZSBpbiB1c2JpZl9yZXF1ZXN0CisgKgorICogIC0gcG9ydCBudW1iZXI6CWJpdHMg MC00CisgKgkJCQkoVVNCX01BWENISUxEUkVOIGlzIDMxKQorICoKKyAqICAtIG9wZXJhdGlvbiBm bGFnOgliaXQgNQorICoJCQkJKDAgPSBzdWJtaXQgdXJiLAorICoJCQkJIDEgPSB1bmxpbmsgdXJi KQorICoKKyAqICAtIGRpcmVjdGlvbjoJCWJpdCA3CisgKgkJCQkoMCA9IEhvc3QtdG8tRGV2aWNl IFtPdXRdCisgKgkJCQkgMSA9IERldmljZS10by1Ib3N0IFtJbl0pCisgKgorICogIC0gZGV2aWNl IGFkZHJlc3M6CWJpdHMgOC0xNAorICoKKyAqICAtIGVuZHBvaW50OgkJYml0cyAxNS0xOAorICoK KyAqICAtIHBpcGUgdHlwZToJYml0cyAzMC0zMQorICoJCQkJKDAwID0gaXNvY2hyb25vdXMsIDAx ID0gaW50ZXJydXB0LAorICoJCQkJIDEwID0gY29udHJvbCwgMTEgPSBidWxrKQorICovCisKKyNk ZWZpbmUgVVNCSUZfUElQRV9QT1JUX01BU0sJMHgwMDAwMDAxZgorI2RlZmluZSBVU0JJRl9QSVBF X1VOTElOSwkweDAwMDAwMDIwCisjZGVmaW5lIFVTQklGX1BJUEVfRElSCQkweDAwMDAwMDgwCisj ZGVmaW5lIFVTQklGX1BJUEVfREVWX01BU0sJMHgwMDAwMDA3ZgorI2RlZmluZSBVU0JJRl9QSVBF X0RFVl9TSElGVAk4CisjZGVmaW5lIFVTQklGX1BJUEVfRVBfTUFTSwkweDAwMDAwMDBmCisjZGVm aW5lIFVTQklGX1BJUEVfRVBfU0hJRlQJMTUKKyNkZWZpbmUgVVNCSUZfUElQRV9UWVBFX01BU0sJ MHgwMDAwMDAwMworI2RlZmluZSBVU0JJRl9QSVBFX1RZUEVfU0hJRlQJMzAKKyNkZWZpbmUgVVNC SUZfUElQRV9UWVBFX0lTT0MJMAorI2RlZmluZSBVU0JJRl9QSVBFX1RZUEVfSU5UCTEKKyNkZWZp bmUgVVNCSUZfUElQRV9UWVBFX0NUUkwJMgorI2RlZmluZSBVU0JJRl9QSVBFX1RZUEVfQlVMSwkz CisKKyNkZWZpbmUgdXNiaWZfcGlwZXBvcnRudW0ocGlwZSkJCQkoKHBpcGUpICYgVVNCSUZfUElQ RV9QT1JUX01BU0spCisjZGVmaW5lIHVzYmlmX3NldHBvcnRudW1fcGlwZShwaXBlLCBwb3J0bnVt KQkoKHBpcGUpIHwgKHBvcnRudW0pKQorCisjZGVmaW5lIHVzYmlmX3BpcGV1bmxpbmsocGlwZSkJ CQkoKHBpcGUpICYgVVNCSUZfUElQRV9VTkxJTkspCisjZGVmaW5lIHVzYmlmX3BpcGVzdWJtaXQo cGlwZSkJCQkoIXVzYmlmX3BpcGV1bmxpbmsocGlwZSkpCisjZGVmaW5lIHVzYmlmX3NldHVubGlu a19waXBlKHBpcGUpCQkoKHBpcGUpIHwgVVNCSUZfUElQRV9VTkxJTkspCisKKyNkZWZpbmUgdXNi aWZfcGlwZWluKHBpcGUpCQkJKChwaXBlKSAmIFVTQklGX1BJUEVfRElSKQorI2RlZmluZSB1c2Jp Zl9waXBlb3V0KHBpcGUpCQkJKCF1c2JpZl9waXBlaW4ocGlwZSkpCisKKyNkZWZpbmUgdXNiaWZf cGlwZWRldmljZShwaXBlKQkJCVwKKwkJKCgocGlwZSkgPj4gVVNCSUZfUElQRV9ERVZfU0hJRlQp ICYgVVNCSUZfUElQRV9ERVZfTUFTSykKKworI2RlZmluZSB1c2JpZl9waXBlZW5kcG9pbnQocGlw ZSkJCVwKKwkJKCgocGlwZSkgPj4gVVNCSUZfUElQRV9FUF9TSElGVCkgJiBVU0JJRl9QSVBFX0VQ X01BU0spCisKKyNkZWZpbmUgdXNiaWZfcGlwZXR5cGUocGlwZSkJCQlcCisJCSgoKHBpcGUpID4+ IFVTQklGX1BJUEVfVFlQRV9TSElGVCkgJiBVU0JJRl9QSVBFX1RZUEVfTUFTSykKKyNkZWZpbmUg dXNiaWZfcGlwZWlzb2MocGlwZSkJKHVzYmlmX3BpcGV0eXBlKHBpcGUpID09IFVTQklGX1BJUEVf VFlQRV9JU09DKQorI2RlZmluZSB1c2JpZl9waXBlaW50KHBpcGUpCSh1c2JpZl9waXBldHlwZShw aXBlKSA9PSBVU0JJRl9QSVBFX1RZUEVfSU5UKQorI2RlZmluZSB1c2JpZl9waXBlY3RybChwaXBl KQkodXNiaWZfcGlwZXR5cGUocGlwZSkgPT0gVVNCSUZfUElQRV9UWVBFX0NUUkwpCisjZGVmaW5l IHVzYmlmX3BpcGVidWxrKHBpcGUpCSh1c2JpZl9waXBldHlwZShwaXBlKSA9PSBVU0JJRl9QSVBF X1RZUEVfQlVMSykKKworI2RlZmluZSBVU0JJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgKDE2 KQorI2RlZmluZSBVU0JJRl9NQVhfUE9SVE5SCTMxCisjZGVmaW5lIFVTQklGX1JJTkdfU0laRQk0 MDk2CisKKy8qCisgKiBSSU5HIGZvciB0cmFuc2ZlcnJpbmcgdXJicy4KKyAqLworc3RydWN0IHVz YmlmX3JlcXVlc3Rfc2VnbWVudCB7CisJZ3JhbnRfcmVmX3QgZ3JlZjsKKwl1aW50MTZfdCBvZmZz ZXQ7CisJdWludDE2X3QgbGVuZ3RoOworfTsKKworc3RydWN0IHVzYmlmX3VyYl9yZXF1ZXN0IHsK Kwl1aW50MTZfdCBpZDsgLyogcmVxdWVzdCBpZCAqLworCXVpbnQxNl90IG5yX2J1ZmZlcl9zZWdz OyAvKiBudW1iZXIgb2YgdXJiLT50cmFuc2Zlcl9idWZmZXIgc2VnbWVudHMgKi8KKworCS8qIGJh c2ljIHVyYiBwYXJhbWV0ZXIgKi8KKwl1aW50MzJfdCBwaXBlOworCXVpbnQxNl90IHRyYW5zZmVy X2ZsYWdzOworI2RlZmluZSBVU0JJRl9TSE9SVF9OT1RfT0sJMHgwMDAxCisJdWludDE2X3QgYnVm ZmVyX2xlbmd0aDsKKwl1bmlvbiB7CisJCXVpbnQ4X3QgY3RybFs4XTsgLyogc2V0dXBfcGFja2V0 IChDdHJsKSAqLworCisJCXN0cnVjdCB7CisJCQl1aW50MTZfdCBpbnRlcnZhbDsgLyogbWF4aW11 bSAoMTAyNCo4KSBpbiB1c2IgY29yZSAqLworCQkJdWludDE2X3Qgc3RhcnRfZnJhbWU7IC8qIHN0 YXJ0IGZyYW1lICovCisJCQl1aW50MTZfdCBudW1iZXJfb2ZfcGFja2V0czsgLyogbnVtYmVyIG9m IElTTyBwYWNrZXQgKi8KKwkJCXVpbnQxNl90IG5yX2ZyYW1lX2Rlc2Nfc2VnczsgLyogbnVtYmVy IG9mIGlzb19mcmFtZV9kZXNjIHNlZ21lbnRzICovCisJCX0gaXNvYzsKKworCQlzdHJ1Y3Qgewor CQkJdWludDE2X3QgaW50ZXJ2YWw7IC8qIG1heGltdW0gKDEwMjQqOCkgaW4gdXNiIGNvcmUgKi8K KwkJCXVpbnQxNl90IHBhZFszXTsKKwkJfSBpbnRyOworCisJCXN0cnVjdCB7CisJCQl1aW50MTZf dCB1bmxpbmtfaWQ7IC8qIHVubGluayByZXF1ZXN0IGlkICovCisJCQl1aW50MTZfdCBwYWRbM107 CisJCX0gdW5saW5rOworCisJfSB1OworCisJLyogdXJiIGRhdGEgc2VnbWVudHMgKi8KKwlzdHJ1 Y3QgdXNiaWZfcmVxdWVzdF9zZWdtZW50IHNlZ1tVU0JJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVF U1RdOworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmlmX3VyYl9yZXF1ZXN0IHVzYmlmX3VyYl9yZXF1 ZXN0X3Q7CisKK3N0cnVjdCB1c2JpZl91cmJfcmVzcG9uc2UgeworCXVpbnQxNl90IGlkOyAvKiBy ZXF1ZXN0IGlkICovCisJdWludDE2X3Qgc3RhcnRfZnJhbWU7ICAvKiBzdGFydCBmcmFtZSAoSVNP KSAqLworCWludDMyX3Qgc3RhdHVzOyAvKiBzdGF0dXMgKG5vbi1JU08pICovCisJaW50MzJfdCBh Y3R1YWxfbGVuZ3RoOyAvKiBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoICovCisJaW50MzJfdCBlcnJv cl9jb3VudDsgLyogbnVtYmVyIG9mIElTTyBlcnJvcnMgKi8KK307Cit0eXBlZGVmIHN0cnVjdCB1 c2JpZl91cmJfcmVzcG9uc2UgdXNiaWZfdXJiX3Jlc3BvbnNlX3Q7CisKK0RFRklORV9SSU5HX1RZ UEVTKHVzYmlmX3VyYiwgc3RydWN0IHVzYmlmX3VyYl9yZXF1ZXN0LCBzdHJ1Y3QgdXNiaWZfdXJi X3Jlc3BvbnNlKTsKKyNkZWZpbmUgVVNCX1VSQl9SSU5HX1NJWkUgX19DT05TVF9SSU5HX1NJWkUo dXNiaWZfdXJiLCBVU0JJRl9SSU5HX1NJWkUpCisKKy8qCisgKiBSSU5HIGZvciBub3RpZnlpbmcg Y29ubmVjdC9kaXNjb25uZWN0IGV2ZW50cyB0byBmcm9udGVuZAorICovCitzdHJ1Y3QgdXNiaWZf Y29ubl9yZXF1ZXN0IHsKKwl1aW50MTZfdCBpZDsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JpZl9j b25uX3JlcXVlc3QgdXNiaWZfY29ubl9yZXF1ZXN0X3Q7CisKK3N0cnVjdCB1c2JpZl9jb25uX3Jl c3BvbnNlIHsKKwl1aW50MTZfdCBpZDsgLyogcmVxdWVzdCBpZCAqLworCXVpbnQ4X3QgcG9ydG51 bTsgLyogcG9ydCBudW1iZXIgKi8KKwl1aW50OF90IHNwZWVkOyAvKiB1c2JfZGV2aWNlX3NwZWVk ICovCisjZGVmaW5lIFVTQklGX1NQRUVEX05PTkUJMAorI2RlZmluZSBVU0JJRl9TUEVFRF9MT1cJ CTEKKyNkZWZpbmUgVVNCSUZfU1BFRURfRlVMTAkyCisjZGVmaW5lIFVTQklGX1NQRUVEX0hJR0gJ MworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmlmX2Nvbm5fcmVzcG9uc2UgdXNiaWZfY29ubl9yZXNw b25zZV90OworCitERUZJTkVfUklOR19UWVBFUyh1c2JpZl9jb25uLCBzdHJ1Y3QgdXNiaWZfY29u bl9yZXF1ZXN0LCBzdHJ1Y3QgdXNiaWZfY29ubl9yZXNwb25zZSk7CisjZGVmaW5lIFVTQl9DT05O X1JJTkdfU0laRSBfX0NPTlNUX1JJTkdfU0laRSh1c2JpZl9jb25uLCBVU0JJRl9SSU5HX1NJWkUp CisKKyNlbmRpZiAvKiBYRU5fUFVCTElDX0lPX1VTQklGX0ggKi8KLS0gCkFudGhvbnkgUEVSQVJE CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA== 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 X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 90BF4C31E51 for ; Tue, 18 Jun 2019 11:27:13 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 431EF2082C for ; Tue, 18 Jun 2019 11:27:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 431EF2082C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:55692 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdCGe-0003Zz-Ga for qemu-devel@archiver.kernel.org; Tue, 18 Jun 2019 07:27:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44064) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdCDZ-0001sh-Us for qemu-devel@nongnu.org; Tue, 18 Jun 2019 07:24:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdCDN-00071u-Ge for qemu-devel@nongnu.org; Tue, 18 Jun 2019 07:23:58 -0400 Received: from esa4.hc3370-68.iphmx.com ([216.71.155.144]:60646) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hdCDM-0006zD-Hj for qemu-devel@nongnu.org; Tue, 18 Jun 2019 07:23:49 -0400 Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=anthony.perard@citrix.com; spf=Pass smtp.mailfrom=anthony.perard@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of anthony.perard@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of anthony.perard@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: ohF2UlmLgQZFxqabhQhsv6ZcS4dI63jGNEqfS+6N/TFt6UNPn3KKWRGf97aqP5glpWwMFfdyVJ JmmTyhPBRoHJhaHyNhhprT9/5/zRlkbuXT9JuIS4TH4RhKh7OPEqRwbE1ev4f6AyoiVB37+gMX 3i7Vd3Dyotmb64sNt/LEAgBoq8X8bK8fG5e+xDW+WRUGeKakIsFfxEWQ+sDfJ0v6u0hrkZ9mk+ pFTIEJ4fufUq8kkQ5AZes3w6rHvfjNGkRh9kqPS36YKYsbjmkFjmTlD7Ff2+Zi9jGmeTP1Xbfy R1Q= X-SBRS: 2.7 X-MesageID: 1889400 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.63,389,1557201600"; d="scan'208";a="1889400" From: Anthony PERARD To: Date: Tue, 18 Jun 2019 12:23:38 +0100 Message-ID: <20190618112341.513-2-anthony.perard@citrix.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190618112341.513-1-anthony.perard@citrix.com> References: <20190618112341.513-1-anthony.perard@citrix.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.155.144 Subject: [Qemu-devel] [PATCH v2 1/4] xen: Fix build with public headers X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anthony PERARD , xen-devel@lists.xenproject.org, Paul Durrant , Stefano Stabellini Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Following 37677d7db3 "Clean up a few header guard symbols", QEMU start to fail to build: In file included from ~/xen/tools/../tools/include/xen/io/blkif.h:31:0, from ~/xen/tools/qemu-xen-dir/hw/block/xen_blkif.h:5, from ~/xen/tools/qemu-xen-dir/hw/block/xen-block.c:22: ~/xen/tools/../tools/include/xen/io/ring.h:68:0: error: "__CONST_RING_SIZE" redefined [-Werror] #define __CONST_RING_SIZE(_s, _sz) \ In file included from ~/xen/tools/qemu-xen-dir/hw/block/xen_blkif.h:4:0, from ~/xen/tools/qemu-xen-dir/hw/block/xen-block.c:22: ~/xen/tools/qemu-xen-dir/include/hw/xen/io/ring.h:66:0: note: this is the location of the previous definition #define __CONST_RING_SIZE(_s, _sz) \ The issue is that some public xen headers have been imported (by f65eadb639 "xen: import ring.h from xen") but not all. With the change in the guards symbole, the ring.h header start to be imported twice. Fix the build by importing blkif.h and usbif.h and there dependencies. Some cleanup have been done on those files. Subsequent patches will import other Xen public headers. ring.h have been moved to "hw/xen/interface/" along with blkif.h and usbif.h as those describe interface (and would allow to also import a xen.h header if that was necessary). xen-mapcache.c doesn't needs grant_table.h. Signed-off-by: Anthony PERARD Reviewed-by: Paul Durrant --- hw/9pfs/xen-9pfs.h | 2 +- hw/block/xen_blkif.h | 3 +- hw/usb/xen-usb.c | 3 +- hw/xen/xen-legacy-backend.c | 2 - include/hw/xen/interface/grant_table.h | 36 ++ include/hw/xen/interface/io/blkif.h | 712 +++++++++++++++++++++++ include/hw/xen/{ => interface}/io/ring.h | 0 include/hw/xen/interface/io/usbif.h | 254 ++++++++ 8 files changed, 1005 insertions(+), 7 deletions(-) create mode 100644 include/hw/xen/interface/grant_table.h create mode 100644 include/hw/xen/interface/io/blkif.h rename include/hw/xen/{ => interface}/io/ring.h (100%) create mode 100644 include/hw/xen/interface/io/usbif.h diff --git a/hw/9pfs/xen-9pfs.h b/hw/9pfs/xen-9pfs.h index fbdee3d843..92dc87e9e0 100644 --- a/hw/9pfs/xen-9pfs.h +++ b/hw/9pfs/xen-9pfs.h @@ -14,7 +14,7 @@ #define HW_9PFS_XEN_9PFS_H #include -#include "hw/xen/io/ring.h" +#include "hw/xen/interface/io/ring.h" /* * Do not merge into xen-9p-backend.c: clang doesn't allow unused static diff --git a/hw/block/xen_blkif.h b/hw/block/xen_blkif.h index a353693ea0..5a1094d793 100644 --- a/hw/block/xen_blkif.h +++ b/hw/block/xen_blkif.h @@ -1,8 +1,7 @@ #ifndef XEN_BLKIF_H #define XEN_BLKIF_H -#include "hw/xen/io/ring.h" -#include +#include "hw/xen/interface/io/blkif.h" #include /* diff --git a/hw/usb/xen-usb.c b/hw/usb/xen-usb.c index b20d0cfadf..dfbb418e77 100644 --- a/hw/usb/xen-usb.c +++ b/hw/usb/xen-usb.c @@ -32,8 +32,7 @@ #include "qapi/qmp/qdict.h" #include "qapi/qmp/qstring.h" -#include "hw/xen/io/ring.h" -#include +#include "hw/xen/interface/io/usbif.h" /* * Check for required support of usbif.h: USBIF_SHORT_NOT_OK was the last diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c index 36fd1e9b09..3715c94fa6 100644 --- a/hw/xen/xen-legacy-backend.c +++ b/hw/xen/xen-legacy-backend.c @@ -34,8 +34,6 @@ #include "hw/xen/xen_pvdev.h" #include "monitor/qdev.h" -#include - DeviceState *xen_sysdev; BusState *xen_sysbus; diff --git a/include/hw/xen/interface/grant_table.h b/include/hw/xen/interface/grant_table.h new file mode 100644 index 0000000000..302e404814 --- /dev/null +++ b/include/hw/xen/interface/grant_table.h @@ -0,0 +1,36 @@ +/****************************************************************************** + * grant_table.h + * + * Interface for granting foreign access to page frames, and receiving + * page-ownership transfers. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Copyright (c) 2004, K A Fraser + */ + +#ifndef XEN_PUBLIC_GRANT_TABLE_H +#define XEN_PUBLIC_GRANT_TABLE_H + +/* + * Reference to a grant entry in a specified domain's grant table. + */ +typedef uint32_t grant_ref_t; + +#endif /* XEN_PUBLIC_GRANT_TABLE_H */ diff --git a/include/hw/xen/interface/io/blkif.h b/include/hw/xen/interface/io/blkif.h new file mode 100644 index 0000000000..2fe77271c9 --- /dev/null +++ b/include/hw/xen/interface/io/blkif.h @@ -0,0 +1,712 @@ +/****************************************************************************** + * blkif.h + * + * Unified block-device I/O interface for Xen guest OSes. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Copyright (c) 2003-2004, Keir Fraser + * Copyright (c) 2012, Spectra Logic Corporation + */ + +#ifndef XEN_PUBLIC_IO_BLKIF_H +#define XEN_PUBLIC_IO_BLKIF_H + +#include "ring.h" +#include "../grant_table.h" + +/* + * Front->back notifications: When enqueuing a new request, sending a + * notification can be made conditional on req_event (i.e., the generic + * hold-off mechanism provided by the ring macros). Backends must set + * req_event appropriately (e.g., using RING_FINAL_CHECK_FOR_REQUESTS()). + * + * Back->front notifications: When enqueuing a new response, sending a + * notification can be made conditional on rsp_event (i.e., the generic + * hold-off mechanism provided by the ring macros). Frontends must set + * rsp_event appropriately (e.g., using RING_FINAL_CHECK_FOR_RESPONSES()). + */ + +#ifndef blkif_vdev_t +#define blkif_vdev_t uint16_t +#endif +#define blkif_sector_t uint64_t + +/* + * Feature and Parameter Negotiation + * ================================= + * The two halves of a Xen block driver utilize nodes within the XenStore to + * communicate capabilities and to negotiate operating parameters. This + * section enumerates these nodes which reside in the respective front and + * backend portions of the XenStore, following the XenBus convention. + * + * All data in the XenStore is stored as strings. Nodes specifying numeric + * values are encoded in decimal. Integer value ranges listed below are + * expressed as fixed sized integer types capable of storing the conversion + * of a properly formated node string, without loss of information. + * + * Any specified default value is in effect if the corresponding XenBus node + * is not present in the XenStore. + * + * XenStore nodes in sections marked "PRIVATE" are solely for use by the + * driver side whose XenBus tree contains them. + * + * XenStore nodes marked "DEPRECATED" in their notes section should only be + * used to provide interoperability with legacy implementations. + * + * See the XenBus state transition diagram below for details on when XenBus + * nodes must be published and when they can be queried. + * + ***************************************************************************** + * Backend XenBus Nodes + ***************************************************************************** + * + *------------------ Backend Device Identification (PRIVATE) ------------------ + * + * mode + * Values: "r" (read only), "w" (writable) + * + * The read or write access permissions to the backing store to be + * granted to the frontend. + * + * params + * Values: string + * + * A free formatted string providing sufficient information for the + * hotplug script to attach the device and provide a suitable + * handler (ie: a block device) for blkback to use. + * + * physical-device + * Values: "MAJOR:MINOR" + * Notes: 11 + * + * MAJOR and MINOR are the major number and minor number of the + * backing device respectively. + * + * physical-device-path + * Values: path string + * + * A string that contains the absolute path to the disk image. On + * NetBSD and Linux this is always a block device, while on FreeBSD + * it can be either a block device or a regular file. + * + * type + * Values: "file", "phy", "tap" + * + * The type of the backing device/object. + * + * + * direct-io-safe + * Values: 0/1 (boolean) + * Default Value: 0 + * + * The underlying storage is not affected by the direct IO memory + * lifetime bug. See: + * http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html + * + * Therefore this option gives the backend permission to use + * O_DIRECT, notwithstanding that bug. + * + * That is, if this option is enabled, use of O_DIRECT is safe, + * in circumstances where we would normally have avoided it as a + * workaround for that bug. This option is not relevant for all + * backends, and even not necessarily supported for those for + * which it is relevant. A backend which knows that it is not + * affected by the bug can ignore this option. + * + * This option doesn't require a backend to use O_DIRECT, so it + * should not be used to try to control the caching behaviour. + * + *--------------------------------- Features --------------------------------- + * + * feature-barrier + * Values: 0/1 (boolean) + * Default Value: 0 + * + * A value of "1" indicates that the backend can process requests + * containing the BLKIF_OP_WRITE_BARRIER request opcode. Requests + * of this type may still be returned at any time with the + * BLKIF_RSP_EOPNOTSUPP result code. + * + * feature-flush-cache + * Values: 0/1 (boolean) + * Default Value: 0 + * + * A value of "1" indicates that the backend can process requests + * containing the BLKIF_OP_FLUSH_DISKCACHE request opcode. Requests + * of this type may still be returned at any time with the + * BLKIF_RSP_EOPNOTSUPP result code. + * + * feature-discard + * Values: 0/1 (boolean) + * Default Value: 0 + * + * A value of "1" indicates that the backend can process requests + * containing the BLKIF_OP_DISCARD request opcode. Requests + * of this type may still be returned at any time with the + * BLKIF_RSP_EOPNOTSUPP result code. + * + * feature-persistent + * Values: 0/1 (boolean) + * Default Value: 0 + * Notes: 7 + * + * A value of "1" indicates that the backend can keep the grants used + * by the frontend driver mapped, so the same set of grants should be + * used in all transactions. The maximum number of grants the backend + * can map persistently depends on the implementation, but ideally it + * should be RING_SIZE * BLKIF_MAX_SEGMENTS_PER_REQUEST. Using this + * feature the backend doesn't need to unmap each grant, preventing + * costly TLB flushes. The backend driver should only map grants + * persistently if the frontend supports it. If a backend driver chooses + * to use the persistent protocol when the frontend doesn't support it, + * it will probably hit the maximum number of persistently mapped grants + * (due to the fact that the frontend won't be reusing the same grants), + * and fall back to non-persistent mode. Backend implementations may + * shrink or expand the number of persistently mapped grants without + * notifying the frontend depending on memory constraints (this might + * cause a performance degradation). + * + * If a backend driver wants to limit the maximum number of persistently + * mapped grants to a value less than RING_SIZE * + * BLKIF_MAX_SEGMENTS_PER_REQUEST a LRU strategy should be used to + * discard the grants that are less commonly used. Using a LRU in the + * backend driver paired with a LIFO queue in the frontend will + * allow us to have better performance in this scenario. + * + *----------------------- Request Transport Parameters ------------------------ + * + * max-ring-page-order + * Values: + * Default Value: 0 + * Notes: 1, 3 + * + * The maximum supported size of the request ring buffer in units of + * lb(machine pages). (e.g. 0 == 1 page, 1 = 2 pages, 2 == 4 pages, + * etc.). + * + * max-ring-pages + * Values: + * Default Value: 1 + * Notes: DEPRECATED, 2, 3 + * + * The maximum supported size of the request ring buffer in units of + * machine pages. The value must be a power of 2. + * + *------------------------- Backend Device Properties ------------------------- + * + * discard-enable + * Values: 0/1 (boolean) + * Default Value: 1 + * + * This optional property, set by the toolstack, instructs the backend + * to offer (or not to offer) discard to the frontend. If the property + * is missing the backend should offer discard if the backing storage + * actually supports it. + * + * discard-alignment + * Values: + * Default Value: 0 + * Notes: 4, 5 + * + * The offset, in bytes from the beginning of the virtual block device, + * to the first, addressable, discard extent on the underlying device. + * + * discard-granularity + * Values: + * Default Value: <"sector-size"> + * Notes: 4 + * + * The size, in bytes, of the individually addressable discard extents + * of the underlying device. + * + * discard-secure + * Values: 0/1 (boolean) + * Default Value: 0 + * Notes: 10 + * + * A value of "1" indicates that the backend can process BLKIF_OP_DISCARD + * requests with the BLKIF_DISCARD_SECURE flag set. + * + * info + * Values: (bitmap) + * + * A collection of bit flags describing attributes of the backing + * device. The VDISK_* macros define the meaning of each bit + * location. + * + * sector-size + * Values: + * + * The logical block size, in bytes, of the underlying storage. This + * must be a power of two with a minimum value of 512. + * + * NOTE: Because of implementation bugs in some frontends this must be + * set to 512, unless the frontend advertizes a non-zero value + * in its "feature-large-sector-size" xenbus node. (See below). + * + * physical-sector-size + * Values: + * Default Value: <"sector-size"> + * + * The physical block size, in bytes, of the backend storage. This + * must be an integer multiple of "sector-size". + * + * sectors + * Values: + * + * The size of the backend device, expressed in units of "sector-size". + * The product of "sector-size" and "sectors" must also be an integer + * multiple of "physical-sector-size", if that node is present. + * + ***************************************************************************** + * Frontend XenBus Nodes + ***************************************************************************** + * + *----------------------- Request Transport Parameters ----------------------- + * + * event-channel + * Values: + * + * The identifier of the Xen event channel used to signal activity + * in the ring buffer. + * + * ring-ref + * Values: + * Notes: 6 + * + * The Xen grant reference granting permission for the backend to map + * the sole page in a single page sized ring buffer. + * + * ring-ref%u + * Values: + * Notes: 6 + * + * For a frontend providing a multi-page ring, a "number of ring pages" + * sized list of nodes, each containing a Xen grant reference granting + * permission for the backend to map the page of the ring located + * at page index "%u". Page indexes are zero based. + * + * protocol + * Values: string (XEN_IO_PROTO_ABI_*) + * Default Value: XEN_IO_PROTO_ABI_NATIVE + * + * The machine ABI rules governing the format of all ring request and + * response structures. + * + * ring-page-order + * Values: + * Default Value: 0 + * Maximum Value: MAX(ffs(max-ring-pages) - 1, max-ring-page-order) + * Notes: 1, 3 + * + * The size of the frontend allocated request ring buffer in units + * of lb(machine pages). (e.g. 0 == 1 page, 1 = 2 pages, 2 == 4 pages, + * etc.). + * + * num-ring-pages + * Values: + * Default Value: 1 + * Maximum Value: MAX(max-ring-pages,(0x1 << max-ring-page-order)) + * Notes: DEPRECATED, 2, 3 + * + * The size of the frontend allocated request ring buffer in units of + * machine pages. The value must be a power of 2. + * + *--------------------------------- Features --------------------------------- + * + * feature-persistent + * Values: 0/1 (boolean) + * Default Value: 0 + * Notes: 7, 8, 9 + * + * A value of "1" indicates that the frontend will reuse the same grants + * for all transactions, allowing the backend to map them with write + * access (even when it should be read-only). If the frontend hits the + * maximum number of allowed persistently mapped grants, it can fallback + * to non persistent mode. This will cause a performance degradation, + * since the the backend driver will still try to map those grants + * persistently. Since the persistent grants protocol is compatible with + * the previous protocol, a frontend driver can choose to work in + * persistent mode even when the backend doesn't support it. + * + * It is recommended that the frontend driver stores the persistently + * mapped grants in a LIFO queue, so a subset of all persistently mapped + * grants gets used commonly. This is done in case the backend driver + * decides to limit the maximum number of persistently mapped grants + * to a value less than RING_SIZE * BLKIF_MAX_SEGMENTS_PER_REQUEST. + * + * feature-large-sector-size + * Values: 0/1 (boolean) + * Default Value: 0 + * + * A value of "1" indicates that the frontend will correctly supply and + * interpret all sector-based quantities in terms of the "sector-size" + * value supplied in the backend info, whatever that may be set to. + * If this node is not present or its value is "0" then it is assumed + * that the frontend requires that the logical block size is 512 as it + * is hardcoded (which is the case in some frontend implementations). + * + *------------------------- Virtual Device Properties ------------------------- + * + * device-type + * Values: "disk", "cdrom", "floppy", etc. + * + * virtual-device + * Values: + * + * A value indicating the physical device to virtualize within the + * frontend's domain. (e.g. "The first ATA disk", "The third SCSI + * disk", etc.) + * + * See docs/misc/vbd-interface.txt for details on the format of this + * value. + * + * Notes + * ----- + * (1) Multi-page ring buffer scheme first developed in the Citrix XenServer + * PV drivers. + * (2) Multi-page ring buffer scheme first used in some RedHat distributions + * including a distribution deployed on certain nodes of the Amazon + * EC2 cluster. + * (3) Support for multi-page ring buffers was implemented independently, + * in slightly different forms, by both Citrix and RedHat/Amazon. + * For full interoperability, block front and backends should publish + * identical ring parameters, adjusted for unit differences, to the + * XenStore nodes used in both schemes. + * (4) Devices that support discard functionality may internally allocate space + * (discardable extents) in units that are larger than the exported logical + * block size. If the backing device has such discardable extents the + * backend should provide both discard-granularity and discard-alignment. + * Providing just one of the two may be considered an error by the frontend. + * Backends supporting discard should include discard-granularity and + * discard-alignment even if it supports discarding individual sectors. + * Frontends should assume discard-alignment == 0 and discard-granularity + * == sector size if these keys are missing. + * (5) The discard-alignment parameter allows a physical device to be + * partitioned into virtual devices that do not necessarily begin or + * end on a discardable extent boundary. + * (6) When there is only a single page allocated to the request ring, + * 'ring-ref' is used to communicate the grant reference for this + * page to the backend. When using a multi-page ring, the 'ring-ref' + * node is not created. Instead 'ring-ref0' - 'ring-refN' are used. + * (7) When using persistent grants data has to be copied from/to the page + * where the grant is currently mapped. The overhead of doing this copy + * however doesn't suppress the speed improvement of not having to unmap + * the grants. + * (8) The frontend driver has to allow the backend driver to map all grants + * with write access, even when they should be mapped read-only, since + * further requests may reuse these grants and require write permissions. + * (9) Linux implementation doesn't have a limit on the maximum number of + * grants that can be persistently mapped in the frontend driver, but + * due to the frontent driver implementation it should never be bigger + * than RING_SIZE * BLKIF_MAX_SEGMENTS_PER_REQUEST. + *(10) The discard-secure property may be present and will be set to 1 if the + * backing device supports secure discard. + *(11) Only used by Linux and NetBSD. + */ + +/* + * Multiple hardware queues/rings: + * If supported, the backend will write the key "multi-queue-max-queues" to + * the directory for that vbd, and set its value to the maximum supported + * number of queues. + * Frontends that are aware of this feature and wish to use it can write the + * key "multi-queue-num-queues" with the number they wish to use, which must be + * greater than zero, and no more than the value reported by the backend in + * "multi-queue-max-queues". + * + * For frontends requesting just one queue, the usual event-channel and + * ring-ref keys are written as before, simplifying the backend processing + * to avoid distinguishing between a frontend that doesn't understand the + * multi-queue feature, and one that does, but requested only one queue. + * + * Frontends requesting two or more queues must not write the toplevel + * event-channel and ring-ref keys, instead writing those keys under sub-keys + * having the name "queue-N" where N is the integer ID of the queue/ring for + * which those keys belong. Queues are indexed from zero. + * For example, a frontend with two queues must write the following set of + * queue-related keys: + * + * /local/domain/1/device/vbd/0/multi-queue-num-queues = "2" + * /local/domain/1/device/vbd/0/queue-0 = "" + * /local/domain/1/device/vbd/0/queue-0/ring-ref = "" + * /local/domain/1/device/vbd/0/queue-0/event-channel = "" + * /local/domain/1/device/vbd/0/queue-1 = "" + * /local/domain/1/device/vbd/0/queue-1/ring-ref = "" + * /local/domain/1/device/vbd/0/queue-1/event-channel = "" + * + * It is also possible to use multiple queues/rings together with + * feature multi-page ring buffer. + * For example, a frontend requests two queues/rings and the size of each ring + * buffer is two pages must write the following set of related keys: + * + * /local/domain/1/device/vbd/0/multi-queue-num-queues = "2" + * /local/domain/1/device/vbd/0/ring-page-order = "1" + * /local/domain/1/device/vbd/0/queue-0 = "" + * /local/domain/1/device/vbd/0/queue-0/ring-ref0 = "" + * /local/domain/1/device/vbd/0/queue-0/ring-ref1 = "" + * /local/domain/1/device/vbd/0/queue-0/event-channel = "" + * /local/domain/1/device/vbd/0/queue-1 = "" + * /local/domain/1/device/vbd/0/queue-1/ring-ref0 = "" + * /local/domain/1/device/vbd/0/queue-1/ring-ref1 = "" + * /local/domain/1/device/vbd/0/queue-1/event-channel = "" + * + */ + +/* + * STATE DIAGRAMS + * + ***************************************************************************** + * Startup * + ***************************************************************************** + * + * Tool stack creates front and back nodes with state XenbusStateInitialising. + * + * Front Back + * ================================= ===================================== + * XenbusStateInitialising XenbusStateInitialising + * o Query virtual device o Query backend device identification + * properties. data. + * o Setup OS device instance. o Open and validate backend device. + * o Publish backend features and + * transport parameters. + * | + * | + * V + * XenbusStateInitWait + * + * o Query backend features and + * transport parameters. + * o Allocate and initialize the + * request ring. + * o Publish transport parameters + * that will be in effect during + * this connection. + * | + * | + * V + * XenbusStateInitialised + * + * o Query frontend transport parameters. + * o Connect to the request ring and + * event channel. + * o Publish backend device properties. + * | + * | + * V + * XenbusStateConnected + * + * o Query backend device properties. + * o Finalize OS virtual device + * instance. + * | + * | + * V + * XenbusStateConnected + * + * Note: Drivers that do not support any optional features, or the negotiation + * of transport parameters, can skip certain states in the state machine: + * + * o A frontend may transition to XenbusStateInitialised without + * waiting for the backend to enter XenbusStateInitWait. In this + * case, default transport parameters are in effect and any + * transport parameters published by the frontend must contain + * their default values. + * + * o A backend may transition to XenbusStateInitialised, bypassing + * XenbusStateInitWait, without waiting for the frontend to first + * enter the XenbusStateInitialised state. In this case, default + * transport parameters are in effect and any transport parameters + * published by the backend must contain their default values. + * + * Drivers that support optional features and/or transport parameter + * negotiation must tolerate these additional state transition paths. + * In general this means performing the work of any skipped state + * transition, if it has not already been performed, in addition to the + * work associated with entry into the current state. + */ + +/* + * REQUEST CODES. + */ +#define BLKIF_OP_READ 0 +#define BLKIF_OP_WRITE 1 +/* + * All writes issued prior to a request with the BLKIF_OP_WRITE_BARRIER + * operation code ("barrier request") must be completed prior to the + * execution of the barrier request. All writes issued after the barrier + * request must not execute until after the completion of the barrier request. + * + * Optional. See "feature-barrier" XenBus node documentation above. + */ +#define BLKIF_OP_WRITE_BARRIER 2 +/* + * Commit any uncommitted contents of the backing device's volatile cache + * to stable storage. + * + * Optional. See "feature-flush-cache" XenBus node documentation above. + */ +#define BLKIF_OP_FLUSH_DISKCACHE 3 +/* + * Used in SLES sources for device specific command packet + * contained within the request. Reserved for that purpose. + */ +#define BLKIF_OP_RESERVED_1 4 +/* + * Indicate to the backend device that a region of storage is no longer in + * use, and may be discarded at any time without impact to the client. If + * the BLKIF_DISCARD_SECURE flag is set on the request, all copies of the + * discarded region on the device must be rendered unrecoverable before the + * command returns. + * + * This operation is analogous to performing a trim (ATA) or unamp (SCSI), + * command on a native device. + * + * More information about trim/unmap operations can be found at: + * http://t13.org/Documents/UploadedDocuments/docs2008/ + * e07154r6-Data_Set_Management_Proposal_for_ATA-ACS2.doc + * http://www.seagate.com/staticfiles/support/disc/manuals/ + * Interface%20manuals/100293068c.pdf + * + * Optional. See "feature-discard", "discard-alignment", + * "discard-granularity", and "discard-secure" in the XenBus node + * documentation above. + */ +#define BLKIF_OP_DISCARD 5 + +/* + * Recognized if "feature-max-indirect-segments" in present in the backend + * xenbus info. The "feature-max-indirect-segments" node contains the maximum + * number of segments allowed by the backend per request. If the node is + * present, the frontend might use blkif_request_indirect structs in order to + * issue requests with more than BLKIF_MAX_SEGMENTS_PER_REQUEST (11). The + * maximum number of indirect segments is fixed by the backend, but the + * frontend can issue requests with any number of indirect segments as long as + * it's less than the number provided by the backend. The indirect_grefs field + * in blkif_request_indirect should be filled by the frontend with the + * grant references of the pages that are holding the indirect segments. + * These pages are filled with an array of blkif_request_segment that hold the + * information about the segments. The number of indirect pages to use is + * determined by the number of segments an indirect request contains. Every + * indirect page can contain a maximum of + * (PAGE_SIZE / sizeof(struct blkif_request_segment)) segments, so to + * calculate the number of indirect pages to use we have to do + * ceil(indirect_segments / (PAGE_SIZE / sizeof(struct blkif_request_segment))). + * + * If a backend does not recognize BLKIF_OP_INDIRECT, it should *not* + * create the "feature-max-indirect-segments" node! + */ +#define BLKIF_OP_INDIRECT 6 + +/* + * Maximum scatter/gather segments per request. + * This is carefully chosen so that sizeof(blkif_ring_t) <= PAGE_SIZE. + * NB. This could be 12 if the ring indexes weren't stored in the same page. + */ +#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11 + +/* + * Maximum number of indirect pages to use per request. + */ +#define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8 + +/* + * NB. 'first_sect' and 'last_sect' in blkif_request_segment, as well as + * 'sector_number' in blkif_request, blkif_request_discard and + * blkif_request_indirect are sector-based quantities. See the description + * of the "feature-large-sector-size" frontend xenbus node above for + * more information. + */ +struct blkif_request_segment { + grant_ref_t gref; /* reference to I/O buffer frame */ + /* @first_sect: first sector in frame to transfer (inclusive). */ + /* @last_sect: last sector in frame to transfer (inclusive). */ + uint8_t first_sect, last_sect; +}; + +/* + * Starting ring element for any I/O request. + */ +struct blkif_request { + uint8_t operation; /* BLKIF_OP_??? */ + uint8_t nr_segments; /* number of segments */ + blkif_vdev_t handle; /* only for read/write requests */ + uint64_t id; /* private guest value, echoed in resp */ + blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ + struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; +}; +typedef struct blkif_request blkif_request_t; + +/* + * Cast to this structure when blkif_request.operation == BLKIF_OP_DISCARD + * sizeof(struct blkif_request_discard) <= sizeof(struct blkif_request) + */ +struct blkif_request_discard { + uint8_t operation; /* BLKIF_OP_DISCARD */ + uint8_t flag; /* BLKIF_DISCARD_SECURE or zero */ +#define BLKIF_DISCARD_SECURE (1<<0) /* ignored if discard-secure=0 */ + blkif_vdev_t handle; /* same as for read/write requests */ + uint64_t id; /* private guest value, echoed in resp */ + blkif_sector_t sector_number;/* start sector idx on disk */ + uint64_t nr_sectors; /* number of contiguous sectors to discard*/ +}; +typedef struct blkif_request_discard blkif_request_discard_t; + +struct blkif_request_indirect { + uint8_t operation; /* BLKIF_OP_INDIRECT */ + uint8_t indirect_op; /* BLKIF_OP_{READ/WRITE} */ + uint16_t nr_segments; /* number of segments */ + uint64_t id; /* private guest value, echoed in resp */ + blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ + blkif_vdev_t handle; /* same as for read/write requests */ + grant_ref_t indirect_grefs[BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST]; +#ifdef __i386__ + uint64_t pad; /* Make it 64 byte aligned on i386 */ +#endif +}; +typedef struct blkif_request_indirect blkif_request_indirect_t; + +struct blkif_response { + uint64_t id; /* copied from request */ + uint8_t operation; /* copied from request */ + int16_t status; /* BLKIF_RSP_??? */ +}; +typedef struct blkif_response blkif_response_t; + +/* + * STATUS RETURN CODES. + */ + /* Operation not supported (only happens on barrier writes). */ +#define BLKIF_RSP_EOPNOTSUPP -2 + /* Operation failed for some unspecified reason (-EIO). */ +#define BLKIF_RSP_ERROR -1 + /* Operation completed successfully. */ +#define BLKIF_RSP_OKAY 0 + +/* + * Generate blkif ring structures and types. + */ +DEFINE_RING_TYPES(blkif, struct blkif_request, struct blkif_response); + +#define VDISK_CDROM 0x1 +#define VDISK_REMOVABLE 0x2 +#define VDISK_READONLY 0x4 + +#endif /* XEN_PUBLIC_IO_BLKIF_H */ diff --git a/include/hw/xen/io/ring.h b/include/hw/xen/interface/io/ring.h similarity index 100% rename from include/hw/xen/io/ring.h rename to include/hw/xen/interface/io/ring.h diff --git a/include/hw/xen/interface/io/usbif.h b/include/hw/xen/interface/io/usbif.h new file mode 100644 index 0000000000..ae3dc720fa --- /dev/null +++ b/include/hw/xen/interface/io/usbif.h @@ -0,0 +1,254 @@ +/* + * usbif.h + * + * USB I/O interface for Xen guest OSes. + * + * Copyright (C) 2009, FUJITSU LABORATORIES LTD. + * Author: Noboru Iwamatsu + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef XEN_PUBLIC_IO_USBIF_H +#define XEN_PUBLIC_IO_USBIF_H + +#include "ring.h" +#include "../grant_table.h" + +/* + * Feature and Parameter Negotiation + * ================================= + * The two halves of a Xen pvUSB driver utilize nodes within the XenStore to + * communicate capabilities and to negotiate operating parameters. This + * section enumerates these nodes which reside in the respective front and + * backend portions of the XenStore, following the XenBus convention. + * + * Any specified default value is in effect if the corresponding XenBus node + * is not present in the XenStore. + * + * XenStore nodes in sections marked "PRIVATE" are solely for use by the + * driver side whose XenBus tree contains them. + * + ***************************************************************************** + * Backend XenBus Nodes + ***************************************************************************** + * + *------------------ Backend Device Identification (PRIVATE) ------------------ + * + * num-ports + * Values: unsigned [1...31] + * + * Number of ports for this (virtual) USB host connector. + * + * usb-ver + * Values: unsigned [1...2] + * + * USB version of this host connector: 1 = USB 1.1, 2 = USB 2.0. + * + * port/[1...31] + * Values: string + * + * Physical USB device connected to the given port, e.g. "3-1.5". + * + ***************************************************************************** + * Frontend XenBus Nodes + ***************************************************************************** + * + *----------------------- Request Transport Parameters ----------------------- + * + * event-channel + * Values: unsigned + * + * The identifier of the Xen event channel used to signal activity + * in the ring buffer. + * + * urb-ring-ref + * Values: unsigned + * + * The Xen grant reference granting permission for the backend to map + * the sole page in a single page sized ring buffer. This is the ring + * buffer for urb requests. + * + * conn-ring-ref + * Values: unsigned + * + * The Xen grant reference granting permission for the backend to map + * the sole page in a single page sized ring buffer. This is the ring + * buffer for connection/disconnection requests. + * + * protocol + * Values: string (XEN_IO_PROTO_ABI_*) + * Default Value: XEN_IO_PROTO_ABI_NATIVE + * + * The machine ABI rules governing the format of all ring request and + * response structures. + * + */ + +enum usb_spec_version { + USB_VER_UNKNOWN = 0, + USB_VER_USB11, + USB_VER_USB20, + USB_VER_USB30, /* not supported yet */ +}; + +/* + * USB pipe in usbif_request + * + * - port number: bits 0-4 + * (USB_MAXCHILDREN is 31) + * + * - operation flag: bit 5 + * (0 = submit urb, + * 1 = unlink urb) + * + * - direction: bit 7 + * (0 = Host-to-Device [Out] + * 1 = Device-to-Host [In]) + * + * - device address: bits 8-14 + * + * - endpoint: bits 15-18 + * + * - pipe type: bits 30-31 + * (00 = isochronous, 01 = interrupt, + * 10 = control, 11 = bulk) + */ + +#define USBIF_PIPE_PORT_MASK 0x0000001f +#define USBIF_PIPE_UNLINK 0x00000020 +#define USBIF_PIPE_DIR 0x00000080 +#define USBIF_PIPE_DEV_MASK 0x0000007f +#define USBIF_PIPE_DEV_SHIFT 8 +#define USBIF_PIPE_EP_MASK 0x0000000f +#define USBIF_PIPE_EP_SHIFT 15 +#define USBIF_PIPE_TYPE_MASK 0x00000003 +#define USBIF_PIPE_TYPE_SHIFT 30 +#define USBIF_PIPE_TYPE_ISOC 0 +#define USBIF_PIPE_TYPE_INT 1 +#define USBIF_PIPE_TYPE_CTRL 2 +#define USBIF_PIPE_TYPE_BULK 3 + +#define usbif_pipeportnum(pipe) ((pipe) & USBIF_PIPE_PORT_MASK) +#define usbif_setportnum_pipe(pipe, portnum) ((pipe) | (portnum)) + +#define usbif_pipeunlink(pipe) ((pipe) & USBIF_PIPE_UNLINK) +#define usbif_pipesubmit(pipe) (!usbif_pipeunlink(pipe)) +#define usbif_setunlink_pipe(pipe) ((pipe) | USBIF_PIPE_UNLINK) + +#define usbif_pipein(pipe) ((pipe) & USBIF_PIPE_DIR) +#define usbif_pipeout(pipe) (!usbif_pipein(pipe)) + +#define usbif_pipedevice(pipe) \ + (((pipe) >> USBIF_PIPE_DEV_SHIFT) & USBIF_PIPE_DEV_MASK) + +#define usbif_pipeendpoint(pipe) \ + (((pipe) >> USBIF_PIPE_EP_SHIFT) & USBIF_PIPE_EP_MASK) + +#define usbif_pipetype(pipe) \ + (((pipe) >> USBIF_PIPE_TYPE_SHIFT) & USBIF_PIPE_TYPE_MASK) +#define usbif_pipeisoc(pipe) (usbif_pipetype(pipe) == USBIF_PIPE_TYPE_ISOC) +#define usbif_pipeint(pipe) (usbif_pipetype(pipe) == USBIF_PIPE_TYPE_INT) +#define usbif_pipectrl(pipe) (usbif_pipetype(pipe) == USBIF_PIPE_TYPE_CTRL) +#define usbif_pipebulk(pipe) (usbif_pipetype(pipe) == USBIF_PIPE_TYPE_BULK) + +#define USBIF_MAX_SEGMENTS_PER_REQUEST (16) +#define USBIF_MAX_PORTNR 31 +#define USBIF_RING_SIZE 4096 + +/* + * RING for transferring urbs. + */ +struct usbif_request_segment { + grant_ref_t gref; + uint16_t offset; + uint16_t length; +}; + +struct usbif_urb_request { + uint16_t id; /* request id */ + uint16_t nr_buffer_segs; /* number of urb->transfer_buffer segments */ + + /* basic urb parameter */ + uint32_t pipe; + uint16_t transfer_flags; +#define USBIF_SHORT_NOT_OK 0x0001 + uint16_t buffer_length; + union { + uint8_t ctrl[8]; /* setup_packet (Ctrl) */ + + struct { + uint16_t interval; /* maximum (1024*8) in usb core */ + uint16_t start_frame; /* start frame */ + uint16_t number_of_packets; /* number of ISO packet */ + uint16_t nr_frame_desc_segs; /* number of iso_frame_desc segments */ + } isoc; + + struct { + uint16_t interval; /* maximum (1024*8) in usb core */ + uint16_t pad[3]; + } intr; + + struct { + uint16_t unlink_id; /* unlink request id */ + uint16_t pad[3]; + } unlink; + + } u; + + /* urb data segments */ + struct usbif_request_segment seg[USBIF_MAX_SEGMENTS_PER_REQUEST]; +}; +typedef struct usbif_urb_request usbif_urb_request_t; + +struct usbif_urb_response { + uint16_t id; /* request id */ + uint16_t start_frame; /* start frame (ISO) */ + int32_t status; /* status (non-ISO) */ + int32_t actual_length; /* actual transfer length */ + int32_t error_count; /* number of ISO errors */ +}; +typedef struct usbif_urb_response usbif_urb_response_t; + +DEFINE_RING_TYPES(usbif_urb, struct usbif_urb_request, struct usbif_urb_response); +#define USB_URB_RING_SIZE __CONST_RING_SIZE(usbif_urb, USBIF_RING_SIZE) + +/* + * RING for notifying connect/disconnect events to frontend + */ +struct usbif_conn_request { + uint16_t id; +}; +typedef struct usbif_conn_request usbif_conn_request_t; + +struct usbif_conn_response { + uint16_t id; /* request id */ + uint8_t portnum; /* port number */ + uint8_t speed; /* usb_device_speed */ +#define USBIF_SPEED_NONE 0 +#define USBIF_SPEED_LOW 1 +#define USBIF_SPEED_FULL 2 +#define USBIF_SPEED_HIGH 3 +}; +typedef struct usbif_conn_response usbif_conn_response_t; + +DEFINE_RING_TYPES(usbif_conn, struct usbif_conn_request, struct usbif_conn_response); +#define USB_CONN_RING_SIZE __CONST_RING_SIZE(usbif_conn, USBIF_RING_SIZE) + +#endif /* XEN_PUBLIC_IO_USBIF_H */ -- Anthony PERARD