From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH 1/1] cameraif: add ABI for para-virtual camera Date: Tue, 31 Jul 2018 12:31:42 +0300 Message-ID: <20180731093142.3828-2-andr2000@gmail.com> References: <20180731093142.3828-1-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fkR0W-0002Xv-PO for xen-devel@lists.xenproject.org; Tue, 31 Jul 2018 09:31:56 +0000 Received: by mail-lj1-x242.google.com with SMTP id j19-v6so13081535ljc.7 for ; Tue, 31 Jul 2018 02:31:53 -0700 (PDT) In-Reply-To: <20180731093142.3828-1-andr2000@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, konrad.wilk@oracle.com, jgross@suse.com, boris.ostrovsky@oracle.com, mchehab@kernel.org, linux-media@vger.kernel.org, sakari.ailus@linux.intel.com, koji.matsuoka.xm@renesas.com Cc: Oleksandr Andrushchenko List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKVGhpcyBpcyB0aGUgQUJJIGZvciB0aGUgdHdvIGhhbHZlcyBvZiBhIHBhcmEtdmly dHVhbGl6ZWQKY2FtZXJhIGRyaXZlciB3aGljaCBleHRlbmRzIFhlbidzIHJlYWNoIG11bHRpbWVk aWEgY2FwYWJpbGl0aWVzIGV2ZW4KZmFydGhlciBlbmFibGluZyBpdCBmb3IgdmlkZW8gY29uZmVy ZW5jaW5nLCBJbi1WZWhpY2xlIEluZm90YWlubWVudCwKaGlnaCBkZWZpbml0aW9uIG1hcHMgZXRj LgoKVGhlIGluaXRpYWwgZ29hbCBpcyB0byBzdXBwb3J0IG1vc3QgbmVlZGVkIGZ1bmN0aW9uYWxp dHkgd2l0aCB0aGUKZmluYWwgaWRlYSB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGV4dGVuZCB0aGUg cHJvdG9jb2wgaWYgbmVlZCBiZToKCjEuIFByb3ZpZGUgbWVhbnMgZm9yIGJhc2UgdmlydHVhbCBk ZXZpY2UgY29uZmlndXJhdGlvbjoKIC0gcGl4ZWwgZm9ybWF0cwogLSByZXNvbHV0aW9ucwogLSBm cmFtZSByYXRlcwoyLiBTdXBwb3J0IGJhc2ljIGNhbWVyYSBjb250cm9sczoKIC0gY29udHJhc3QK IC0gYnJpZ2h0bmVzcwogLSBodWUKIC0gc2F0dXJhdGlvbgozLiBTdXBwb3J0IHN0cmVhbWluZyBj b250cm9sCjQuIFN1cHBvcnQgemVyby1jb3B5aW5nIHVzZS1jYXNlcwoKU2lnbmVkLW9mZi1ieTog T2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29t PgotLS0KIHhlbi9pbmNsdWRlL3B1YmxpYy9pby9jYW1lcmFpZi5oIHwgOTgxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA5ODEgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3B1YmxpYy9pby9jYW1lcmFpZi5oCgpkaWZm IC0tZ2l0IGEveGVuL2luY2x1ZGUvcHVibGljL2lvL2NhbWVyYWlmLmggYi94ZW4vaW5jbHVkZS9w dWJsaWMvaW8vY2FtZXJhaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmJkYzZhMTI2MmZjZgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9p by9jYW1lcmFpZi5oCkBAIC0wLDAgKzEsOTgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg KiBjYW1lcmFpZi5oCisgKgorICogVW5pZmllZCBjYW1lcmEgZGV2aWNlIEkvTyBpbnRlcmZhY2Ug Zm9yIFhlbiBndWVzdCBPU2VzLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgor ICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxM IFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIK KyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg RVBBTSBTeXN0ZW1zIEluYy4KKyAqCisgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtv IDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KKyAqLworCisjaWZuZGVmIF9fWEVO X1BVQkxJQ19JT19DQU1FUkFJRl9IX18KKyNkZWZpbmUgX19YRU5fUFVCTElDX0lPX0NBTUVSQUlG X0hfXworCisjaW5jbHVkZSAicmluZy5oIgorI2luY2x1ZGUgIi4uL2dyYW50X3RhYmxlLmgiCisK Ky8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg IFByb3RvY29sIHZlcnNpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2RlZmluZSBY RU5DQU1FUkFfUFJPVE9DT0xfVkVSU0lPTiAgICAgIjEiCisKKy8qCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKiAgICAgICAgICAgICAgICAgIEZlYXR1cmUgYW5kIFBhcmFtZXRlciBOZWdvdGlh dGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZyb250LT5iYWNrIG5vdGlmaWNh dGlvbnM6IHdoZW4gZW5xdWV1aW5nIGEgbmV3IHJlcXVlc3QsIHNlbmRpbmcgYQorICogbm90aWZp Y2F0aW9uIGNhbiBiZSBtYWRlIGNvbmRpdGlvbmFsIG9uIHhlbmNhbWVyYV9yZXEgKGkuZS4sIHRo ZSBnZW5lcmljCisgKiBob2xkLW9mZiBtZWNoYW5pc20gcHJvdmlkZWQgYnkgdGhlIHJpbmcgbWFj cm9zKS4gQmFja2VuZHMgbXVzdCBzZXQKKyAqIHhlbmNhbWVyYV9yZXEgYXBwcm9wcmlhdGVseSAo ZS5nLiwgdXNpbmcgUklOR19GSU5BTF9DSEVDS19GT1JfUkVRVUVTVFMoKSkuCisgKgorICogQmFj ay0+ZnJvbnQgbm90aWZpY2F0aW9uczogd2hlbiBlbnF1ZXVpbmcgYSBuZXcgcmVzcG9uc2UsIHNl bmRpbmcgYQorICogbm90aWZpY2F0aW9uIGNhbiBiZSBtYWRlIGNvbmRpdGlvbmFsIG9uIHhlbmNh bWVyYV9yZXNwIChpLmUuLCB0aGUgZ2VuZXJpYworICogaG9sZC1vZmYgbWVjaGFuaXNtIHByb3Zp ZGVkIGJ5IHRoZSByaW5nIG1hY3JvcykuIEZyb250ZW5kcyBtdXN0IHNldAorICogeGVuY2FtZXJh X3Jlc3AgYXBwcm9wcmlhdGVseSAoZS5nLiwgdXNpbmcgUklOR19GSU5BTF9DSEVDS19GT1JfUkVT UE9OU0VTKCkpLgorICoKKyAqIFRoZSB0d28gaGFsdmVzIG9mIGEgcGFyYS12aXJ0dWFsIGNhbWVy YSBkcml2ZXIgdXRpbGl6ZSBub2RlcyB3aXRoaW4KKyAqIFhlblN0b3JlIHRvIGNvbW11bmljYXRl IGNhcGFiaWxpdGllcyBhbmQgdG8gbmVnb3RpYXRlIG9wZXJhdGluZyBwYXJhbWV0ZXJzLgorICog VGhpcyBzZWN0aW9uIGVudW1lcmF0ZXMgdGhlc2Ugbm9kZXMgd2hpY2ggcmVzaWRlIGluIHRoZSBy ZXNwZWN0aXZlIGZyb250IGFuZAorICogYmFja2VuZCBwb3J0aW9ucyBvZiBYZW5TdG9yZSwgZm9s bG93aW5nIHRoZSBYZW5CdXMgY29udmVudGlvbi4KKyAqCisgKiBBbGwgZGF0YSBpbiBYZW5TdG9y ZSBpcyBzdG9yZWQgYXMgc3RyaW5ncy4gTm9kZXMgc3BlY2lmeWluZyBudW1lcmljCisgKiB2YWx1 ZXMgYXJlIGVuY29kZWQgaW4gZGVjaW1hbC4gSW50ZWdlciB2YWx1ZSByYW5nZXMgbGlzdGVkIGJl bG93IGFyZQorICogZXhwcmVzc2VkIGFzIGZpeGVkIHNpemVkIGludGVnZXIgdHlwZXMgY2FwYWJs ZSBvZiBzdG9yaW5nIHRoZSBjb252ZXJzaW9uCisgKiBvZiBhIHByb3Blcmx5IGZvcm1hdHRlZCBu b2RlIHN0cmluZywgd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLgorICoKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZSBjb25maWd1cmF0 aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9m IGJhY2tlbmQgYW5kIGZyb250ZW5kIGNvbmZpZ3VyYXRpb246CisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gQmFja2VuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIC9sb2NhbC9kb21haW4vMC9iYWNrZW5kL3ZjYW1lcmEvMS8wL2Zyb250 ZW5kLWlkID0gIjEiCisgKiAvbG9jYWwvZG9tYWluLzAvYmFja2VuZC92Y2FtZXJhLzEvMC9mcm9u dGVuZCA9ICIvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZjYW1lcmEvMCIKKyAqIC9sb2NhbC9kb21h aW4vMC9iYWNrZW5kL3ZjYW1lcmEvMS8wL3N0YXRlID0gIjQiCisgKiAvbG9jYWwvZG9tYWluLzAv YmFja2VuZC92Y2FtZXJhLzEvMC92ZXJzaW9ucyA9ICIxLDIiCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnJvbnRlbmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmNhbWVyYS8wL2JhY2tlbmQt aWQgPSAiMCIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmNhbWVyYS8wL2JhY2tlbmQgPSAi L2xvY2FsL2RvbWFpbi8wL2JhY2tlbmQvdmNhbWVyYS8xIgorICogL2xvY2FsL2RvbWFpbi8xL2Rl dmljZS92Y2FtZXJhLzAvc3RhdGUgPSAiNCIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmNh bWVyYS8wL3ZlcnNpb24gPSAiMSIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmNhbWVyYS8w L2JlLWFsbG9jID0gIjEiCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERldmlj ZSAwIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC9sb2Nh bC9kb21haW4vMS9kZXZpY2UvdmNhbWVyYS8wL2NvbnRyb2xzID0gImNvbnRyYXN0LGh1ZSIKKyAq IC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmNhbWVyYS8wL2Zvcm1hdHMvWVVZVi82NDB4NDgwID0g IjMwLzEsMTUvMSwxNS8yIgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92Y2FtZXJhLzAvZm9y bWF0cy9ZVVlWLzE5MjB4MTA4MCA9ICIxNS8yIgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92 Y2FtZXJhLzAvZm9ybWF0cy9CR1JBLzY0MHg0ODAgPSAiMTUvMSwxNS8yIgorICogL2xvY2FsL2Rv bWFpbi8xL2RldmljZS92Y2FtZXJhLzAvZm9ybWF0cy9CR1JBLzEyMDB4NzIwID0gIjE1LzIiCisg KiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZjYW1lcmEvMC91bmlxdWUtaWQgPSAiMCIKKyAqIC9s b2NhbC9kb21haW4vMS9kZXZpY2UvdmNhbWVyYS8wL3JlcS1yaW5nLXJlZiA9ICIyODMyIgorICog L2xvY2FsL2RvbWFpbi8xL2RldmljZS92Y2FtZXJhLzAvcmVxLWV2ZW50LWNoYW5uZWwgPSAiMTUi CisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZjYW1lcmEvMC9ldnQtcmluZy1yZWYgPSAiMzg3 IgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92Y2FtZXJhLzAvZXZ0LWV2ZW50LWNoYW5uZWwg PSAiMTYiCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERldmljZSAxIGNvbmZp Z3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC9sb2NhbC9kb21haW4v MS9kZXZpY2UvdmNhbWVyYS8xL2NvbnRyb2xzID0gImJyaWdodG5lc3Msc2F0dXJhdGlvbixodWUi CisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZjYW1lcmEvMS9mb3JtYXRzL1lVWVYvNjQweDQ4 MCA9ICIzMC8xLDE1LzEsMTUvMiIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmNhbWVyYS8x L2Zvcm1hdHMvWVVZVi8xOTIweDEwODAgPSAiMTUvMiIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZp Y2UvdmNhbWVyYS8xL3VuaXF1ZS1pZCA9ICIxIgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92 Y2FtZXJhLzEvcmVxLXJpbmctcmVmID0gIjI4MzMiCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNl L3ZjYW1lcmEvMS9yZXEtZXZlbnQtY2hhbm5lbCA9ICIxNyIKKyAqIC9sb2NhbC9kb21haW4vMS9k ZXZpY2UvdmNhbWVyYS8xL2V2dC1yaW5nLXJlZiA9ICIzODgiCisgKiAvbG9jYWwvZG9tYWluLzEv ZGV2aWNlL3ZjYW1lcmEvMS9ldnQtZXZlbnQtY2hhbm5lbCA9ICIxOCIKKyAqCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrZW5kIFhlbkJ1 cyBOb2RlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gUHJvdG9jb2wgdmVyc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiB2ZXJzaW9ucworICogICAgICBWYWx1ZXM6ICAgICAgICAgPHN0cmluZz4KKyAq CisgKiAgICAgIExpc3Qgb2YgWEVOQ0FNRVJBX0xJU1RfU0VQQVJBVE9SIHNlcGFyYXRlZCBwcm90 b2NvbCB2ZXJzaW9ucyBzdXBwb3J0ZWQKKyAqICAgICAgYnkgdGhlIGJhY2tlbmQuIEZvciBleGFt cGxlICIxLDIsMyIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgRnJvbnRlbmQgWGVuQnVzIE5vZGVzCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBZGRyZXNzaW5nIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRvbS1pZAorICogICAgICBW YWx1ZXM6ICAgICAgICAgPHVpbnQxNl90PgorICoKKyAqICAgICAgRG9tYWluIGlkZW50aWZpZXIu CisgKgorICogZGV2LWlkCisgKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDE2X3Q+CisgKgor ICogICAgICBEZXZpY2UgaWRlbnRpZmllci4KKyAqCisgKiAgICAgIC9sb2NhbC9kb21haW4vPGRv bS1pZD4vZGV2aWNlL3ZjYW1lcmEvPGRldi1pZD4vLi4uCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSBQcm90b2NvbCB2ZXJzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHZlcnNpb24KKyAqICAgICAgVmFsdWVzOiAgICAgICAgIDxzdHJpbmc+Cisg KgorICogICAgICBQcm90b2NvbCB2ZXJzaW9uLCBjaG9zZW4gYW1vbmcgdGhlIG9uZXMgc3VwcG9y dGVkIGJ5IHRoZSBiYWNrZW5kLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCYWNr ZW5kIGJ1ZmZlciBhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBi ZS1hbGxvYworICogICAgICBWYWx1ZXM6ICAgICAgICAgIjAiLCAiMSIKKyAqCisgKiAgICAgIElm IHZhbHVlIGlzIHNldCB0byAiMSIsIHRoZW4gYmFja2VuZCB3aWxsIGJlIHRoZSBidWZmZXIKKyAq ICAgICAgcHJvdmlkZXIvYWxsb2NhdG9yIGZvciB0aGlzIGRvbWFpbiBkdXJpbmcgWEVOQ0FNRVJB X09QX0JVRl9DUkVBVEUKKyAqICAgICAgb3BlcmF0aW9uLgorICogICAgICBJZiB2YWx1ZSBpcyBu b3QgIjEiIG9yIG9taXR0ZWQgZnJvbnRlbmQgbXVzdCBhbGxvY2F0ZSBidWZmZXJzIGl0c2VsZi4K KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2FtZXJhIHNldHRpbmdzIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdW5pcXVlLWlkCisgKiAgICAgIFZh bHVlczogICAgICAgICA8c3RyaW5nPgorICoKKyAqICAgICAgQWZ0ZXIgZGV2aWNlIGluc3RhbmNl IGluaXRpYWxpemF0aW9uIGVhY2ggY2FtZXJhIGlzIGFzc2lnbmVkIGEKKyAqICAgICAgdW5pcXVl IElELCBzbyBpdCBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgYmFja2VuZCBieSB0aGlzIElELgor ICogICAgICBUaGlzIGNhbiBiZSBVVUlEIG9yIHN1Y2guCisgKgorICogY29udHJvbHMKKyAqICAg ICAgVmFsdWVzOiAgICAgICAgIDxsaXN0IG9mIHN0cmluZz4KKyAqCisgKiAgICAgIExpc3Qgb2Yg c3VwcG9ydGVkIGNhbWVyYSBjb250cm9scyBzZXBhcmF0ZWQgYnkgWEVOQ0FNRVJBX0xJU1RfU0VQ QVJBVE9SLgorICogICAgICBDYW1lcmEgY29udHJvbHMgYXJlIGV4cHJlc3NlZCBhcyBhIGxpc3Qg b2Ygc3RyaW5nIHZhbHVlcyB3L28gYW55CisgKiAgICAgIG9yZGVyaW5nIHJlcXVpcmVtZW50Lgor ICoKKyAqIGZvcm1hdHMKKyAqICAgICAgVmFsdWVzOiAgICAgICAgIDxmb3JtYXQsIGNoYXJbNF0+ CisgKgorICogICAgICBGb3JtYXRzIGFyZSBvcmdhbml6ZWQgYXMgYSBzZXQgb2YgZGlyZWN0b3Jp ZXMgb25lIHBlciBlYWNoCisgKiAgICAgIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIFRoZSBuYW1l IG9mIHRoZSBkaXJlY3RvcnkgaXMgYW4gdXBwZXIgY2FzZQorICogICAgICBzdHJpbmcgb2YgdGhl IGNvcnJlc3BvbmRpbmcgRk9VUkNDIHN0cmluZyBsYWJlbC4gVGhlIG5leHQgbGV2ZWwgb2YKKyAq ICAgICAgdGhlIGRpcmVjdG9yeSB1bmRlciA8Zm9ybWF0cz4gcmVwcmVzZW50cyBzdXBwb3J0ZWQg cmVzb2x1dGlvbnMuCisgKgorICogcmVzb2x1dGlvbgorICogICAgICBWYWx1ZXM6ICAgICAgICAg PHdpZHRoLCB1aW50MzJfdD54PGhlaWdodCwgdWludDMyX3Q+CisgKgorICogICAgICBSZXNvbHV0 aW9ucyBhcmUgb3JnYW5pemVkIGFzIGEgc2V0IG9mIGRpcmVjdG9yaWVzIG9uZSBwZXIgZWFjaAor ICogICAgICBzdXBwb3J0ZWQgcmVzb2x1dGlvbiB1bmRlciBjb3JyZXNwb25kaW5nIDxmb3JtYXRz PiBkaXJlY3RvcnkuCisgKiAgICAgIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaXMgdGhlIHN1 cHBvcnRlZCB3aWR0aCBhbmQgaGVpZ2h0CisgKiAgICAgIG9mIHRoZSBjYW1lcmEgcmVzb2x1dGlv biBpbiBwaXhlbHMuCisgKgorICogZnJhbWUtcmF0ZXMKKyAqICAgICAgVmFsdWVzOiAgICAgICAg IDxudW1lcmF0b3IsIHVpbnQzMl90Pi88ZGVub21pbmF0b3IsIHVpbnQzMl90PgorICoKKyAqICAg ICAgTGlzdCBvZiBYRU5DQU1FUkFfRlJBTUVfUkFURV9TRVBBUkFUT1Igc2VwYXJhdGVkIHN1cHBv cnRlZCBmcmFtZSByYXRlcworICogICAgICBvZiB0aGUgY2FtZXJhIGV4cHJlc3NlZCBhcyBudW1l cmF0b3IgYW5kIGRlbm9taW5hdG9yIG9mIHRoZQorICogICAgICBjb3JyZXNwb25kaW5nIGZyYW1l IHJhdGUuCisgKgorICogVGhlIGZvcm1hdCBvZiB0aGUgPGZvcm1hdHM+IGRpcmVjdG9yeSB0cmVl IHdpdGggcmVzb2x1dGlvbnMgYW5kIGZyYW1lIHJhdGVzCisgKiBtdXN0IGJlIHN0cnVjdHVyZWQg aW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgKgorICogLi4uL3ZjYW1lcmEvPGRldi1pZD4vPGZv cm1hdFtpXT4vPHJlc29sdXRpb25bal0+LzxmcmFtZS1yYXRlc1trXT4KKyAqCisgKiB3aGVyZQor ICogIGkgLSBpLXRoIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXQKKyAqICBqIC0gai10aCBzdXBwb3J0 ZWQgcmVzb2x1dGlvbiBmb3IgaS10aCBwaXhlbCBmb3JtYXQKKyAqICBrIC0gay10aCBzdXBwb3J0 ZWQgZnJhbWUgcmF0ZSBmb3IgaS10aCBwaXhlbCBmb3JtYXQgYW5kIGotdGgKKyAqICAgICAgcmVz b2x1dGlvbgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLSBDYW1lcmEgUmVxdWVzdCBUcmFuc3Bv cnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIGNvbW11bmlj YXRpb24gcGF0aCBpcyB1c2VkIHRvIGRlbGl2ZXIgcmVxdWVzdHMgZnJvbSBmcm9udGVuZCB0byBi YWNrZW5kCisgKiBhbmQgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlcyBmcm9tIGJhY2tl bmQgdG8gZnJvbnRlbmQsCisgKiBzZXQgdXAgcGVyIHZpcnR1YWwgY2FtZXJhIGRldmljZS4KKyAq CisgKiByZXEtZXZlbnQtY2hhbm5lbAorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90 PgorICoKKyAqICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIFhlbiBjYW1lcmEncyBjb250cm9s IGV2ZW50IGNoYW5uZWwKKyAqICAgICAgdXNlZCB0byBzaWduYWwgYWN0aXZpdHkgaW4gdGhlIHJp bmcgYnVmZmVyLgorICoKKyAqIHJlcS1yaW5nLXJlZgorICogICAgICBWYWx1ZXM6ICAgICAgICAg PHVpbnQzMl90PgorICoKKyAqICAgICAgVGhlIFhlbiBncmFudCByZWZlcmVuY2UgZ3JhbnRpbmcg cGVybWlzc2lvbiBmb3IgdGhlIGJhY2tlbmQgdG8gbWFwCisgKiAgICAgIGEgc29sZSBwYWdlIG9m IGNhbWVyYSdzIGNvbnRyb2wgcmluZyBidWZmZXIuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LSBDYW1lcmEgRXZlbnQgVHJhbnNwb3J0IFBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIFRoaXMgY29tbXVuaWNhdGlvbiBwYXRoIGlzIHVzZWQgdG8gZGVsaXZlciBhc3lu Y2hyb25vdXMgZXZlbnRzIGZyb20gYmFja2VuZAorICogdG8gZnJvbnRlbmQsIHNldCB1cCBwZXIg dmlydHVhbCBjYW1lcmEgZGV2aWNlLgorICoKKyAqIGV2dC1ldmVudC1jaGFubmVsCisgKiAgICAg IFZhbHVlczogICAgICAgICA8dWludDMyX3Q+CisgKgorICogICAgICBUaGUgaWRlbnRpZmllciBv ZiB0aGUgWGVuIGNhbWVyYSdzIGV2ZW50IGNoYW5uZWwKKyAqICAgICAgdXNlZCB0byBzaWduYWwg YWN0aXZpdHkgaW4gdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqIGV2dC1yaW5nLXJlZgorICogICAg ICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorICoKKyAqICAgICAgVGhlIFhlbiBncmFudCBy ZWZlcmVuY2UgZ3JhbnRpbmcgcGVybWlzc2lvbiBmb3IgdGhlIGJhY2tlbmQgdG8gbWFwCisgKiAg ICAgIGEgc29sZSBwYWdlIG9mIGNhbWVyYSdzIGV2ZW50IHJpbmcgYnVmZmVyLgorICovCisKKy8q CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTVEFURSBESUFHUkFNUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRvb2wgc3Rh Y2sgY3JlYXRlcyBmcm9udCBhbmQgYmFjayBzdGF0ZSBub2RlcyB3aXRoIGluaXRpYWwgc3RhdGUK KyAqIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nLgorICogVG9vbCBzdGFjayBjcmVhdGVzIGFuZCBz ZXRzIHVwIGZyb250ZW5kIGNhbWVyYSBjb25maWd1cmF0aW9uCisgKiBub2RlcyBwZXIgZG9tYWlu LgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTm9ybWFsIGZsb3cgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBGcm9udCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQmFjaworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFhlbmJ1c1N0 YXRlSW5pdGlhbGlzaW5nICAgICAgICAgICAgICBYZW5idXNTdGF0ZUluaXRpYWxpc2luZworICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIFF1ZXJ5IGJhY2tlbmQgZGV2 aWNlIGlkZW50aWZpY2F0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBP cGVuIGFuZCB2YWxpZGF0ZSBiYWNrZW5kIGRldmljZS4KKyAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBYZW5idXNTdGF0ZUluaXRXYWl0CisgKgorICogbyBRdWVyeSBmcm9udGVuZCBjb25maWd1 cmF0aW9uCisgKiBvIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplCisgKiAgIGV2ZW50IGNoYW5uZWxz IHBlciBjb25maWd1cmVkCisgKiAgIGNhbWVyYS4KKyAqIG8gUHVibGlzaCB0cmFuc3BvcnQgcGFy YW1ldGVycworICogICB0aGF0IHdpbGwgYmUgaW4gZWZmZWN0IGR1cmluZworICogICB0aGlzIGNv bm5lY3Rpb24uCisgKiAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgIHwKKyAqICAgICAg ICAgICAgICBWCisgKiBYZW5idXNTdGF0ZUluaXRpYWxpc2VkCisgKgorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvIFF1ZXJ5IGZyb250ZW5kIHRyYW5zcG9ydCBwYXJh bWV0ZXJzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIENvbm5l Y3QgdG8gdGhlIGV2ZW50IGNoYW5uZWxzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhl bmJ1c1N0YXRlQ29ubmVjdGVkCisgKgorICogIG8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIE9TCisg KiAgICB2aXJ0dWFsIGNhbWVyYSBhcyBwZXIKKyAqICAgIGNvbmZpZ3VyYXRpb24uCisgKiAgICAg ICAgICAgICAgfAorICogICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICBWCisgKiBYZW5i dXNTdGF0ZUNvbm5lY3RlZAorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBYZW5idXNTdGF0ZVVua25vd24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYZW5idXNTdGF0ZUNsb3NlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFhlbmJ1c1N0YXRlQ2xvc2luZworICogbyBSZW1vdmUgdmlydHVhbCBjYW1lcmEg ZGV2aWNlCisgKiBvIFJlbW92ZSBldmVudCBjaGFubmVscworICogICAgICAgICAgICAgIHwKKyAq ICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgVgorICogWGVuYnVzU3RhdGVDbG9zZWQK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVjb3ZlcnkgZmxvdyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogSW4gY2FzZSBvZiBmcm9udGVuZCB1 bnJlY292ZXJhYmxlIGVycm9ycyBiYWNrZW5kIGhhbmRsZXMgdGhhdCBhcworICogaWYgZnJvbnRl bmQgZ29lcyBpbnRvIHRoZSBYZW5idXNTdGF0ZUNsb3NlZCBzdGF0ZS4KKyAqCisgKiBJbiBjYXNl IG9mIGJhY2tlbmQgdW5yZWNvdmVyYWJsZSBlcnJvcnMgZnJvbnRlbmQgdHJpZXMgcmVtb3ZpbmcK KyAqIHRoZSB2aXJ0dWFsaXplZCBkZXZpY2UuIElmIHRoaXMgaXMgcG9zc2libGUgYXQgdGhlIG1v bWVudCBvZiBlcnJvciwKKyAqIHRoZW4gZnJvbnRlbmQgZ29lcyBpbnRvIHRoZSBYZW5idXNTdGF0 ZUluaXRpYWxpc2luZyBzdGF0ZSBhbmQgaXMgcmVhZHkgZm9yCisgKiBuZXcgY29ubmVjdGlvbiB3 aXRoIGJhY2tlbmQuIElmIHRoZSB2aXJ0dWFsaXplZCBkZXZpY2UgaXMgc3RpbGwgaW4gdXNlIGFu ZAorICogY2Fubm90IGJlIHJlbW92ZWQsIHRoZW4gZnJvbnRlbmQgZ29lcyBpbnRvIHRoZSBYZW5i dXNTdGF0ZVJlY29uZmlndXJpbmcgc3RhdGUKKyAqIHVudGlsIGVpdGhlciB0aGUgdmlydHVhbGl6 ZWQgZGV2aWNlIGlzIHJlbW92ZWQgb3IgYmFja2VuZCBpbml0aWF0ZXMgYSBuZXcKKyAqIGNvbm5l Y3Rpb24uIE9uIHRoZSB2aXJ0dWFsaXplZCBkZXZpY2UgcmVtb3ZhbCBmcm9udGVuZCBnb2VzIGlu dG8gdGhlCisgKiBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyBzdGF0ZS4KKyAqCisgKiBOb3RlIG9u IFhlbmJ1c1N0YXRlUmVjb25maWd1cmluZyBzdGF0ZSBvZiB0aGUgZnJvbnRlbmQ6IGlmIGJhY2tl bmQgaGFzCisgKiB1bnJlY292ZXJhYmxlIGVycm9ycyB0aGVuIGZyb250ZW5kIGNhbm5vdCBzZW5k IHJlcXVlc3RzIHRvIHRoZSBiYWNrZW5kCisgKiBhbmQgdGh1cyBjYW5ub3QgcHJvdmlkZSBmdW5j dGlvbmFsaXR5IG9mIHRoZSB2aXJ0dWFsaXplZCBkZXZpY2UgYW55bW9yZS4KKyAqIEFmdGVyIGJh Y2tlbmQgaXMgYmFjayB0byBub3JtYWwgdGhlIHZpcnR1YWxpemVkIGRldmljZSBtYXkgc3RpbGwg aG9sZCBzb21lCisgKiBzdGF0ZTogY29uZmlndXJhdGlvbiBpbiB1c2UsIGFsbG9jYXRlZCBidWZm ZXJzLCBjbGllbnQgYXBwbGljYXRpb24gc3RhdGUgZXRjLgorICogSW4gbW9zdCBjYXNlcywgdGhp cyB3aWxsIHJlcXVpcmUgZnJvbnRlbmQgdG8gaW1wbGVtZW50IGNvbXBsZXggcmVjb3ZlcnkKKyAq IHJlY29ubmVjdCBsb2dpYy4gSW5zdGVhZCwgYnkgZ29pbmcgaW50byBYZW5idXNTdGF0ZVJlY29u ZmlndXJpbmcgc3RhdGUsCisgKiBmcm9udGVuZCB3aWxsIG1ha2Ugc3VyZSBubyBuZXcgY2xpZW50 cyBvZiB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlIGFyZQorICogYWNjZXB0ZWQsIGFsbG93IGV4aXN0 aW5nIGNsaWVudChzKSB0byBleGl0IGdyYWNlZnVsbHkgYnkgc2lnbmFsaW5nIGVycm9yCisgKiBz dGF0ZSBldGMuCisgKiBPbmNlIGFsbCB0aGUgY2xpZW50cyBhcmUgZ29uZSBmcm9udGVuZCBjYW4g cmVpbml0aWFsaXplIHRoZSB2aXJ0dWFsaXplZAorICogZGV2aWNlIGFuZCBnZXQgaW50byBYZW5i dXNTdGF0ZUluaXRpYWxpc2luZyBzdGF0ZSBhZ2FpbiBzaWduYWxpbmcgdGhlCisgKiBiYWNrZW5k IHRoYXQgYSBuZXcgY29ubmVjdGlvbiBjYW4gYmUgbWFkZS4KKyAqCisgKiBUaGVyZSBhcmUgbXVs dGlwbGUgY29uZGl0aW9ucyBwb3NzaWJsZSB1bmRlciB3aGljaCBmcm9udGVuZCB3aWxsIGdvIGZy b20KKyAqIFhlbmJ1c1N0YXRlUmVjb25maWd1cmluZyBpbnRvIFhlbmJ1c1N0YXRlSW5pdGlhbGlz aW5nLCBzb21lIG9mIHRoZW0gYXJlIE9TCisgKiBzcGVjaWZpYy4gRm9yIGV4YW1wbGU6CisgKiAx LiBUaGUgdW5kZXJseWluZyBPUyBmcmFtZXdvcmsgbWF5IHByb3ZpZGUgY2FsbGJhY2tzIHRvIHNp Z25hbCB0aGF0IHRoZSBsYXN0CisgKiAgICBjbGllbnQgb2YgdGhlIHZpcnR1YWxpemVkIGRldmlj ZSBoYXMgZ29uZSBhbmQgdGhlIGRldmljZSBjYW4gYmUgcmVtb3ZlZAorICogMi4gRnJvbnRlbmQg Y2FuIHNjaGVkdWxlIGEgZGVmZXJyZWQgd29yayAodGltZXIvdGFza2xldC93b3JrcXVldWUpCisg KiAgICB0byBwZXJpb2RpY2FsbHkgY2hlY2sgaWYgdGhpcyBpcyB0aGUgcmlnaHQgdGltZSB0byBy ZS10cnkgcmVtb3ZhbCBvZgorICogICAgdGhlIHZpcnR1YWxpemVkIGRldmljZS4KKyAqIDMuIEJ5 IGFueSBvdGhlciBtZWFucy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVCBDT0RFUworICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICovCisjZGVmaW5lIFhFTkNBTUVSQV9PUF9TRVRfQ09ORklHICAgICAgICAweDAwCisjZGVm aW5lIFhFTkNBTUVSQV9PUF9HRVRfQlVGX0RFVEFJTFMgICAweDAxCisjZGVmaW5lIFhFTkNBTUVS QV9PUF9CVUZfQ1JFQVRFICAgICAgICAweDAyCisjZGVmaW5lIFhFTkNBTUVSQV9PUF9CVUZfREVT VFJPWSAgICAgICAweDAzCisjZGVmaW5lIFhFTkNBTUVSQV9PUF9TVFJFQU1fU1RBUlQgICAgICAw eDA0CisjZGVmaW5lIFhFTkNBTUVSQV9PUF9TVFJFQU1fU1RPUCAgICAgICAweDA1CisjZGVmaW5l IFhFTkNBTUVSQV9PUF9HRVRfQ1RSTF9ERVRBSUxTICAweDA2CisjZGVmaW5lIFhFTkNBTUVSQV9P UF9TRVRfQ1RSTCAgICAgICAgICAweDA3CisKKyNkZWZpbmUgWEVOQ0FNRVJBX0NUUkxfQlJJR0hU TkVTUyAgICAgIDB4MDAKKyNkZWZpbmUgWEVOQ0FNRVJBX0NUUkxfQ09OVFJBU1QgICAgICAgIDB4 MDEKKyNkZWZpbmUgWEVOQ0FNRVJBX0NUUkxfU0FUVVJBVElPTiAgICAgIDB4MDIKKyNkZWZpbmUg WEVOQ0FNRVJBX0NUUkxfSFVFICAgICAgICAgICAgIDB4MDMKKworLyoKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQgQ09ERVMK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2RlZmluZSBYRU5DQU1FUkFfRVZUX0ZSQU1F X0FWQUlMICAgICAgMHgwMAorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAg ICAgICAgICBYRU5TVE9SRSBGSUVMRCBBTkQgUEFUSCBOQU1FIFNUUklOR1MsIEhFTFBFUlMKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqLworI2RlZmluZSBYRU5DQU1FUkFfRFJJVkVSX05BTUUg ICAgICAgICAgInZjYW1lcmEiCisKKyNkZWZpbmUgWEVOQ0FNRVJBX0xJU1RfU0VQQVJBVE9SICAg ICAgICIsIgorI2RlZmluZSBYRU5DQU1FUkFfUkVTT0xVVElPTl9TRVBBUkFUT1IgIngiCisjZGVm aW5lIFhFTkNBTUVSQV9GUkFNRV9SQVRFX1NFUEFSQVRPUiAiLyIKKworI2RlZmluZSBYRU5DQU1F UkFfRklFTERfQkVfVkVSU0lPTlMgICAgInZlcnNpb25zIgorI2RlZmluZSBYRU5DQU1FUkFfRklF TERfRkVfVkVSU0lPTiAgICAgInZlcnNpb24iCisjZGVmaW5lIFhFTkNBTUVSQV9GSUVMRF9SRVFf UklOR19SRUYgICAicmVxLXJpbmctcmVmIgorI2RlZmluZSBYRU5DQU1FUkFfRklFTERfUkVRX0NI QU5ORUwgICAgInJlcS1ldmVudC1jaGFubmVsIgorI2RlZmluZSBYRU5DQU1FUkFfRklFTERfRVZU X1JJTkdfUkVGICAgImV2dC1yaW5nLXJlZiIKKyNkZWZpbmUgWEVOQ0FNRVJBX0ZJRUxEX0VWVF9D SEFOTkVMICAgICJldnQtZXZlbnQtY2hhbm5lbCIKKyNkZWZpbmUgWEVOQ0FNRVJBX0ZJRUxEX0NP TlRST0xTICAgICAgICJjb250cm9scyIKKyNkZWZpbmUgWEVOQ0FNRVJBX0ZJRUxEX0ZPUk1BVFMg ICAgICAgICJmb3JtYXRzIgorI2RlZmluZSBYRU5DQU1FUkFfRklFTERfQkVfQUxMT0MgICAgICAg ImJlLWFsbG9jIgorI2RlZmluZSBYRU5DQU1FUkFfRklFTERfVU5JUVVFX0lEICAgICAgInVuaXF1 ZS1pZCIKKworI2RlZmluZSBYRU5DQU1FUkFfQ1RSTF9CUklHSFRORVNTX1NUUiAgImJyaWdodG5l c3MiCisjZGVmaW5lIFhFTkNBTUVSQV9DVFJMX0NPTlRSQVNUX1NUUiAgICAiY29udHJhc3QiCisj ZGVmaW5lIFhFTkNBTUVSQV9DVFJMX1NBVFVSQVRJT05fU1RSICAic2F0dXJhdGlvbiIKKyNkZWZp bmUgWEVOQ0FNRVJBX0NUUkxfSFVFX1NUUiAgICAgICAgICJodWUiCisKKy8qIE1heGltdW0gbnVt YmVyIG9mIGJ1ZmZlciBwbGFuZXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBYRU5DQU1FUkFfTUFY X1BMQU5FICAgICAgICAgICAgNAorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAg ICAgICAgICAgICAgICAgICAgICAgIFNUQVRVUyBSRVRVUk4gQ09ERVMKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqCisgKiBTdGF0dXMgcmV0dXJuIGNvZGUgaXMgemVybyBvbiBzdWNjZXNzIGFu ZCAtWEVOX0VYWCBvbiBmYWlsdXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzdW1wdGlvbnMKKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqCisgKiAtIHVzYWdlIG9mIGdyYW50IHJlZmVyZW5jZSAwIGFzIGludmFsaWQgZ3Jh bnQgcmVmZXJlbmNlOgorICogICBncmFudCByZWZlcmVuY2UgMCBpcyB2YWxpZCwgYnV0IG5ldmVy IGV4cG9zZWQgdG8gYSBQViBkcml2ZXIsCisgKiAgIGJlY2F1c2Ugb2YgdGhlIGZhY3QgaXQgaXMg YWxyZWFkeSBpbiB1c2UvcmVzZXJ2ZWQgYnkgdGhlIFBWIGNvbnNvbGUuCisgKiAtIGFsbCByZWZl cmVuY2VzIGluIHRoaXMgZG9jdW1lbnQgdG8gcGFnZSBzaXplcyBtdXN0IGJlIHRyZWF0ZWQKKyAq ICAgYXMgcGFnZXMgb2Ygc2l6ZSBYRU5fUEFHRV9TSVpFIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQu CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgRGVzY3JpcHRpb24gb2YgdGhl IHByb3RvY29sIGJldHdlZW4gZnJvbnRlbmQgYW5kIGJhY2tlbmQgZHJpdmVyCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKgorICogVGhlIHR3byBoYWx2ZXMgb2YgYSBQYXJhLXZpcnR1YWwgY2Ft ZXJhIGRyaXZlciBjb21tdW5pY2F0ZSB3aXRoCisgKiBlYWNoIG90aGVyIHVzaW5nIHNoYXJlZCBw YWdlcyBhbmQgZXZlbnQgY2hhbm5lbHMuCisgKiBTaGFyZWQgcGFnZSBjb250YWlucyBhIHJpbmcg d2l0aCByZXF1ZXN0L3Jlc3BvbnNlIHBhY2tldHMuCisgKgorICogQWxsIHJlc2VydmVkIGZpZWxk cyBpbiB0aGUgc3RydWN0dXJlcyBiZWxvdyBtdXN0IGJlIDAuCisgKgorICogRm9yIGFsbCByZXF1 ZXN0L3Jlc3BvbnNlL2V2ZW50IHBhY2tldHM6CisgKiAgIC0gZnJhbWUgcmF0ZSBwYXJhbWV0ZXIg aXMgcmVwcmVzZW50ZWQgYXMgYSBwYWlyIG9mIDQgb2N0ZXQgbG9uZworICogICAgIG51bWVyYXRv ciBhbmQgZGVub21pbmF0b3I6CisgKiAgICAgICAtIGZyYW1lX3JhdGVfbnVtZXIgLSB1aW50MzJf dCwgbnVtZXJhdG9yIG9mIHRoZSBmcmFtZSByYXRlCisgKiAgICAgICAtIGZyYW1lX3JhdGVfZGVu b20gLSB1aW50MzJfdCwgZGVub21pbmF0b3Igb2YgdGhlIGZyYW1lIHJhdGUKKyAqICAgICBUaGUg Y29ycmVzcG9uZGluZyBmcmFtZSByYXRlIChIeikgaXMgY2FsY3VsYXRlZCBhczoKKyAqICAgICAg IGZyYW1lX3JhdGUgPSBmcmFtZV9yYXRlX251bWVyIC8gZnJhbWVfcmF0ZV9kZW5vbQorICogICAt IGJ1ZmZlciBpbmRleCBpcyBhIHplcm8gYmFzZWQgaW5kZXggb2YgdGhlIGJ1ZmZlci4gTXVzdCBi ZSBsZXNzIHRoYW4KKyAqICAgICB0aGUgdmFsdWUgb2YgWEVOQ0FNRVJBX09QX1NFVF9DT05GSUcu bnVtX2J1ZnMgcmVzcG9uc2U6CisgKiAgICAgICAtIGluZGV4IC0gdWludDhfdCwgaW5kZXggb2Yg dGhlIGJ1ZmZlci4KKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IFJlcXVlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFsbCBy ZXF1ZXN0IHBhY2tldHMgaGF2ZSB0aGUgc2FtZSBsZW5ndGggKDY0IG9jdGV0cykuCisgKiBBbGwg cmVxdWVzdCBwYWNrZXRzIGhhdmUgY29tbW9uIGhlYWRlcjoKKyAqICAgICAgICAgMCAgICAgICAg ICAgICAgICAxICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgMyAgICAgICAgb2N0ZXQK KyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgIHwg ICAgb3BlcmF0aW9uICAgfCAgIHJlc2VydmVkICAgICB8IDQKKyAqICstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICog fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogICBpZCAtIHVpbnQxNl90LCBwcml2 YXRlIGd1ZXN0IHZhbHVlLCBlY2hvZWQgaW4gcmVzcG9uc2UuCisgKiAgIG9wZXJhdGlvbiAtIHVp bnQ4X3QsIG9wZXJhdGlvbiBjb2RlLCBYRU5DQU1FUkFfT1BfWFhYLgorICoKKyAqCisgKiBSZXF1 ZXN0IGNvbmZpZ3VyYXRpb24gc2V0L3Jlc2V0IC0gcmVxdWVzdCB0byBzZXQgb3IgcmVzZXQuCisg KiB0aGUgY29uZmlndXJhdGlvbi9tb2RlIG9mIHRoZSBjYW1lcmE6CisgKiAgICAgICAgIDAgICAg ICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9j dGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAg ICB8IF9PUF9TRVRfQ09ORklHIHwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGl4ZWwgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgor ICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKyAqICstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICog fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDIwCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyYW1lX3JhdGVfbnVtZXIgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNAorICog Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9yYXRlX2Rl bm9tICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAg ICBudW1fYnVmcyAgICB8ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAg ICAgICAgICB8IDMyCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzNgorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL3wKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDY0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBQYXNzIGFsbCB6ZXJvcyB0byByZXNldCwg b3RoZXJ3aXNlIGNvbW1hbmQgaXMgdHJlYXRlZCBhcyBjb25maWd1cmF0aW9uIHNldC4KKyAqCisg KiBwaXhlbF9mb3JtYXQgLSB1aW50MzJfdCwgcGl4ZWwgZm9ybWF0IHRvIGJlIHVzZWQsIEZPVVJD QyBjb2RlLgorICogd2lkdGggLSB1aW50MzJfdCwgd2lkdGggaW4gcGl4ZWxzLgorICogaGVpZ2h0 IC0gdWludDMyX3QsIGhlaWdodCBpbiBwaXhlbHMuCisgKiBmcmFtZV9yYXRlX251bWVyIC0gdWlu dDMyX3QsIG51bWVyYXRvciBvZiB0aGUgZnJhbWUgcmF0ZS4KKyAqIGZyYW1lX3JhdGVfZGVub20g LSB1aW50MzJfdCwgZGVub21pbmF0b3Igb2YgdGhlIGZyYW1lIHJhdGUuCisgKiBudW1fYnVmcyAt IHVpbnQ4X3QsIGRlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYmUgdXNlZC4KKyAqCisgKiBT ZWUgcmVzcG9uc2UgZm9ybWF0IGZvciB0aGlzIHJlcXVlc3QuCisgKgorICogTm90ZXM6CisgKiAg LSBmcm9udGVuZCBtdXN0IGNoZWNrIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlIGluIG9yZGVy IHRvIHNlZQorICogICAgaWYgdGhlIHZhbHVlcyByZXBvcnRlZCBiYWNrIGJ5IHRoZSBiYWNrZW5k IGRvIG1hdGNoIHRoZSBkZXNpcmVkIG9uZXMKKyAqICAgIGFuZCBjYW4gYmUgYWNjZXB0ZWQuCisg KiAgLSBmcm9udGVuZCBtYXkgc2VuZCBtdWx0aXBsZSBYRU5DQU1FUkFfT1BfU0VUX0NPTkZJRyBy ZXF1ZXN0cyBiZWZvcmUKKyAqICAgIHNlbmRpbmcgWEVOQ0FNRVJBX09QX1NUUkVBTV9TVEFSVCBy ZXF1ZXN0IHRvIHVwZGF0ZSBvciB0dW5lIHRoZQorICogICAgY29uZmlndXJhdGlvbi4KKyAqLwor c3RydWN0IHhlbmNhbWVyYV9jb25maWcgeworICAgIHVpbnQzMl90IHBpeGVsX2Zvcm1hdDsKKyAg ICB1aW50MzJfdCB3aWR0aDsKKyAgICB1aW50MzJfdCBoZWlnaHQ7CisgICAgdWludDMyX3QgZnJh bWVfcmF0ZV9ub207CisgICAgdWludDMyX3QgZnJhbWVfcmF0ZV9kZW5vbTsKKyAgICB1aW50OF90 IG51bV9idWZzOworfTsKKworLyoKKyAqIFJlcXVlc3QgYnVmZmVyIGRldGFpbHMgLSByZXF1ZXN0 IGNhbWVyYSBidWZmZXIncyBtZW1vcnkgbGF5b3V0LgorICogZGV0YWlsZWQgZGVzY3JpcHRpb246 CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAgICAgICAg ICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAg ICBpZCAgICAgICAgICAgICAgICB8X0dFVF9CVUZfREVUQUlMU3wgICByZXNlcnZlZCAgICAgfCA0 CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNl cnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAq IHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQKKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKworICoKKyAqIFNlZSByZXNwb25zZSBmb3JtYXQgZm9yIHRoaXMgcmVxdWVzdC4K KyAqCisgKgorICogUmVxdWVzdCBjYW1lcmEgYnVmZmVyIGNyZWF0aW9uOgorICogICAgICAgICAw ICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAg ICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAg ICAgICAgfCBfT1BfQlVGX0NSRUFURSB8ICAgcmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgaW5kZXgg ICAgIHwgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIHwg MTIKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWZf ZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAyMAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8L1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL3wKKyAq ICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDY0CisgKiArLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisg KiBBbiBhdHRlbXB0IHRvIGNyZWF0ZSBtdWx0aXBsZSBidWZmZXJzIHdpdGggdGhlIHNhbWUgaW5k ZXggaXMgYW4gZXJyb3IuCisgKiBpbmRleCBjYW4gYmUgcmUtdXNlZCBhZnRlciBkZXN0cm95aW5n IHRoZSBjb3JyZXNwb25kaW5nIGNhbWVyYSBidWZmZXIuCisgKgorICogaW5kZXggLSB1aW50OF90 LCBpbmRleCBvZiB0aGUgYnVmZmVyIHRvIGJlIGNyZWF0ZWQuCisgKiBncmVmX2RpcmVjdG9yeSAt IGdyYW50X3JlZl90LCBhIHJlZmVyZW5jZSB0byB0aGUgZmlyc3Qgc2hhcmVkIHBhZ2UKKyAqICAg ZGVzY3JpYmluZyBzaGFyZWQgYnVmZmVyIHJlZmVyZW5jZXMuIFRoZSBzaXplIG9mIHRoZSBidWZm ZXIgaXMgZXF1YWwgdG8KKyAqICAgWEVOQ0FNRVJBX09QX0dFVF9CVUZfREVUQUlMUy5zaXplIHJl c3BvbnNlLiBBdCBsZWFzdCBvbmUgcGFnZSBleGlzdHMuIElmCisgKiAgIHNoYXJlZCBidWZmZXIg c2l6ZSBleGNlZWRzIHdoYXQgY2FuIGJlIGFkZHJlc3NlZCBieSB0aGlzIHNpbmdsZSBwYWdlLAor ICogICB0aGVuIHJlZmVyZW5jZSB0byB0aGUgbmV4dCBzaGFyZWQgcGFnZSBtdXN0IGJlIHN1cHBs aWVkIChzZWUKKyAqICAgZ3JlZl9kaXJfbmV4dF9wYWdlIGJlbG93KS4KKyAqCisgKiBJZiBYRU5D QU1FUkFfRklFTERfQkVfQUxMT0MgY29uZmlndXJhdGlvbiBlbnRyeSBpcyBzZXQsIHRoZW4gYmFj a2VuZCB3aWxsCisgKiBhbGxvY2F0ZSB0aGUgYnVmZmVyIHdpdGggdGhlIHBhcmFtZXRlcnMgcHJv dmlkZWQgaW4gdGhpcyByZXF1ZXN0IGFuZCBwYWdlCisgKiBkaXJlY3RvcnkgaXMgaGFuZGxlZCBh cyBmb2xsb3dzOgorICogICBGcm9udGVuZCBvbiByZXF1ZXN0OgorICogICAgIC0gYWxsb2NhdGVz IHBhZ2VzIGZvciB0aGUgZGlyZWN0b3J5IChncmVmX2RpcmVjdG9yeSwKKyAqICAgICAgIGdyZWZf ZGlyX25leHRfcGFnZShzKQorICogICAgIC0gZ3JhbnRzIHBlcm1pc3Npb25zIGZvciB0aGUgcGFn ZXMgb2YgdGhlIGRpcmVjdG9yeSB0byB0aGUgYmFja2VuZAorICogICAgIC0gc2V0cyBncmVmX2Rp cl9uZXh0X3BhZ2UgZmllbGRzCisgKiAgIEJhY2tlbmQgb24gcmVzcG9uc2U6CisgKiAgICAgLSBn cmFudHMgcGVybWlzc2lvbnMgZm9yIHRoZSBwYWdlcyBvZiB0aGUgYnVmZmVyIGFsbG9jYXRlZCB0 bworICogICAgICAgdGhlIGZyb250ZW5kCisgKiAgICAgLSBmaWxscyBpbiBwYWdlIGRpcmVjdG9y eSB3aXRoIGdyYW50IHJlZmVyZW5jZXMKKyAqICAgICAgIChncmVmW10gaW4gc3RydWN0IHhlbmNh bWVyYV9wYWdlX2RpcmVjdG9yeSkKKyAqLworc3RydWN0IHhlbmNhbWVyYV9idWZfY3JlYXRlX3Jl cSB7CisgICAgdWludDhfdCBpbmRleDsKKyAgICB1aW50OF90IHJlc2VydmVkWzNdOworICAgIGdy YW50X3JlZl90IGdyZWZfZGlyZWN0b3J5OworfTsKKworLyoKKyAqIFNoYXJlZCBwYWdlIGZvciBY RU5DQU1FUkFfT1BfQlVGX0NSRUFURSBidWZmZXIgZGVzY3JpcHRvciAoZ3JlZl9kaXJlY3Rvcnkg aW4KKyAqIHRoZSByZXF1ZXN0KSBlbXBsb3lzIGEgbGlzdCBvZiBwYWdlcywgZGVzY3JpYmluZyBh bGwgcGFnZXMgb2YgdGhlIHNoYXJlZAorICogZGF0YSBidWZmZXI6CisgKiAgICAgICAgIDAgICAg ICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9j dGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICBncmVmX2Rp cl9uZXh0X3BhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVmWzBdICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICog Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZltpXSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaSo0KzgKKyAqICstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICog fC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC98CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdyZWZbTiAtIDFdICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOKjQrOAorICog Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rCisgKgorICogZ3JlZl9kaXJfbmV4dF9wYWdlIC0gZ3JhbnRfcmVmX3QsIHJl ZmVyZW5jZSB0byB0aGUgbmV4dCBwYWdlIGRlc2NyaWJpbmcKKyAqICAgcGFnZSBkaXJlY3Rvcnku IE11c3QgYmUgMCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBwYWdlcyBpbiB0aGUgbGlzdC4KKyAqIGdy ZWZbaV0gLSBncmFudF9yZWZfdCwgcmVmZXJlbmNlIHRvIGEgc2hhcmVkIHBhZ2Ugb2YgdGhlIGJ1 ZmZlcgorICogICBhbGxvY2F0ZWQgYXQgWEVOQ0FNRVJBX09QX0JVRl9DUkVBVEUuCisgKgorICog TnVtYmVyIG9mIGdyYW50X3JlZl90IGVudHJpZXMgaW4gdGhlIHdob2xlIHBhZ2UgZGlyZWN0b3J5 IGlzIG5vdAorICogcGFzc2VkLCBidXQgaW5zdGVhZCBjYW4gYmUgY2FsY3VsYXRlZCBhczoKKyAq ICAgbnVtX2dyZWZzX3RvdGFsID0gKFhFTkNBTUVSQV9PUF9HRVRfQlVGX0RFVEFJTFMuc2l6ZSAr IFhFTl9QQUdFX1NJWkUgLSAxKSAvCisgKiAgICAgICBYRU5fUEFHRV9TSVpFCisgKi8KK3N0cnVj dCB4ZW5jYW1lcmFfcGFnZV9kaXJlY3RvcnkgeworICAgIGdyYW50X3JlZl90IGdyZWZfZGlyX25l eHRfcGFnZTsKKyAgICBncmFudF9yZWZfdCBncmVmWzFdOyAvKiBWYXJpYWJsZSBsZW5ndGggKi8K K307CisKKy8qCisgKiBSZXF1ZXN0IGJ1ZmZlciBkZXN0cnVjdGlvbiAtIGRlc3Ryb3kgYSBwcmV2 aW91c2x5IGFsbG9jYXRlZCBjYW1lcmEgYnVmZmVyOgorICogICAgICAgICAwICAgICAgICAgICAg ICAgIDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBvY3RldAorICog Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgfCBfT1Bf QlVGX0RFU1RST1l8ICAgcmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgaW5kZXggICAgIHwgICAgICAg ICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t KworICoKKyAqIGluZGV4IC0gdWludDhfdCwgaW5kZXggb2YgdGhlIGJ1ZmZlciB0byBiZSBkZXN0 cm95ZWQuCisgKi8KKworc3RydWN0IHhlbmNhbWVyYV9idWZfZGVzdHJveV9yZXEgeworICAgIHVp bnQ4X3QgaW5kZXg7Cit9OworCisvKgorICogUmVxdWVzdCBjYW1lcmEgY2FwdHVyZSBzdHJlYW0g c3RhcnQ6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAg ICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAg ICAgICAgICBpZCAgICAgICAgICAgICAgICB8X09QX1NUUkVBTV9TVEFSVHwgICByZXNlcnZlZCAg ICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQK KyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKworICoKKyAqCisgKiBSZXF1ZXN0IGNhbWVyYSBjYXB0dXJlIHN0cmVh bSBzdG9wOgorICogICAgICAgICAwICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgIDIg ICAgICAgICAgICAgICAzICAgICAgICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAg ICAgICAgICAgaWQgICAgICAgICAgICAgICAgfF9PUF9TVFJFQU1fU1RPUCB8ICAgcmVzZXJ2ZWQg ICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOAorICogKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rCisgKiB8L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL3wKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDY0 CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKgorICogUmVxdWVzdCBjYW1lcmEgY29udHJvbCBkZXRh aWxzOgorICogICAgICAgICAwICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgIDIgICAg ICAgICAgICAgICAzICAgICAgICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAg ICAgICAgaWQgICAgICAgICAgICAgICAgfEdFVF9DVFJMX0RFVEFJTFN8ICAgcmVzZXJ2ZWQgICAg IHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgaW5kZXggICAgIHwgICAgICAgICAgICAg ICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t KworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAor ICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZl ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICoK KyAqIFNlZSByZXNwb25zZSBmb3JtYXQgZm9yIHRoaXMgcmVxdWVzdC4KKyAqCisgKiBpbmRleCAt IHVpbnQ4X3QsIGluZGV4IG9mIHRoZSBjb250cm9sIHRvIGJlIHF1ZXJpZWQuCisgKi8KK3N0cnVj dCB4ZW5jYW1lcmFfZ2V0X2N0cmxfZGV0YWlsc19yZXEgeworICAgIHVpbnQ4X3QgaW5kZXg7Cit9 OworCisvKgorICoKKyAqIFJlcXVlc3QgY2FtZXJhIGNvbnRyb2wgY2hhbmdlOgorICogICAgICAg ICAwICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAg ICAgICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAg ICAgICAgICAgfCAgX09QX1NFVF9DVFJMICB8ICAgcmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rCisgKiB8ICAgICAgaW5kZXggICAgIHwgICAgICAgICAgICAgICAgICAgICByZXNlcnZl ZCAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDE2CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorICogKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rCisgKiB8L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL3wKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDY0 CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBTZWUgcmVzcG9uc2UgZm9ybWF0IGZvciB0aGlzIHJl cXVlc3QuCisgKgorICogaW5kZXggLSB1aW50OF90LCBpbmRleCBvZiB0aGUgY29udHJvbC4KKyAq IHZhbHVlIC0gaW50MzJfdCwgbmV3IHZhbHVlIG9mIHRoZSBjb250cm9sLgorICovCitzdHJ1Y3Qg eGVuY2FtZXJhX3NldF9jdHJsX3JlcSB7CisgICAgdWludDhfdCBpbmRleDsKKyAgICB1aW50OF90 IHJlc2VydmVkWzNdOworICAgIGludDMyX3QgdmFsdWU7Cit9OworCisvKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc3BvbnNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIEFsbCByZXNwb25zZSBwYWNrZXRzIGhhdmUgdGhlIHNhbWUgbGVu Z3RoICg2NCBvY3RldHMpLgorICoKKyAqIEFsbCByZXNwb25zZSBwYWNrZXRzIGhhdmUgY29tbW9u IGhlYWRlcjoKKyAqICAgICAgICAgMCAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAy ICAgICAgICAgICAgICAgMyAgICAgICAgb2N0ZXQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAg ICAgICAgICAgIGlkICAgICAgICAgICAgICAgIHwgICAgb3BlcmF0aW9uICAgfCAgICByZXNlcnZl ZCAgICB8IDQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgKKyAqICstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKworICoKKyAqIGlkIC0gdWludDE2X3QsIGNvcGllZCBmcm9tIHRoZSByZXF1ZXN0LgorICog b3BlcmF0aW9uIC0gdWludDhfdCwgWEVOQ0FNRVJBX09QXyogLSBjb3BpZWQgZnJvbSByZXF1ZXN0 LgorICogc3RhdHVzIC0gaW50MzJfdCwgcmVzcG9uc2Ugc3RhdHVzLCB6ZXJvIG9uIHN1Y2Nlc3Mg YW5kIC1YRU5fRVhYIG9uIGZhaWx1cmUuCisgKgorICoKKyAqIFNldCBjb25maWd1cmF0aW9uIHJl c3BvbnNlIC0gcmVzcG9uc2UgZm9yIFhFTkNBTUVSQV9PUF9TRVRfQ09ORklHOgorICogICAgICAg ICAwICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAg ICAgICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAg ICAgICAgICAgfCBfT1BfU0VUX0NPTkZJRyB8ICAgIHJlc2VydmVkICAgIHwgNAorICogKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBpeGVsIGZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgMTIKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAyMAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAg ICAgICAgICAgICAgICBmcmFtZV9yYXRlX251bWVyICAgICAgICAgICAgICAgICAgICAgICAgIHwg MjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVf cmF0ZV9kZW5vbSAgICAgICAgICAgICAgICAgICAgICAgICB8IDI4CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgbnVtX2J1ZnMgICAgfCAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAg ICAgICAgICAgICAgICAgfCAzMgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzYK KyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKworICogfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC98CisgKiArLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCA2NAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogTWVhbmluZyBvZiB0aGUgY29y cmVzcG9uZGluZyB2YWx1ZXMgaW4gdGhpcyByZXNwb25zZSBpcyB0aGUgc2FtZSBhcyBmb3IKKyAq IFhFTkNBTUVSQV9PUF9TRVRfQ09ORklHIHJlcXVlc3QuCisgKgorICoKKyAqIFJlcXVlc3QgYnVm ZmVyIGRldGFpbHMgcmVzcG9uc2UgLSByZXNwb25zZSBmb3IgWEVOQ0FNRVJBX09QX0dFVF9CVUZf REVUQUlMUworICogcmVxdWVzdDoKKyAqICAgICAgICAgMCAgICAgICAgICAgICAgICAxICAgICAg ICAgICAgICAgICAyICAgICAgICAgICAgICAgMyAgICAgICAgb2N0ZXQKKyAqICstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t KworICogfCAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgIHxfR0VUX0JVRl9ERVRBSUxT fCAgICByZXNlcnZlZCAgICB8IDQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgK KyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgKiArLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAq IHwgICBudW1fcGxhbmVzICAgfCAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAg ICAgICAgICAgICAgfCAxNgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAg ICAgICAgICBwbGFuZV9vZmZzZXRbMF0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKyAq ICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmVfb2Zmc2V0 WzFdICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI0CisgKiArLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwg ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lX29mZnNldFsyXSAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAyOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAg ICAgICBwbGFuZV9vZmZzZXRbM10gICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzIKKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lX3NpemVbMF0g ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDM2CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICBwbGFuZV9zaXplWzFdICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCA0MAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGxhbmVfc2l6ZVsyXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDQKKyAqICstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lX3NpemVbM10gICAg ICAgICAgICAgICAgICAgICAgICAgICB8IDQ4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAg ICBwbGFuZV9zdHJpZGVbMF0gICAgICAgICB8ICAgICAgICAgcGxhbmVfc3RyaWRlWzFdICAgICAg ICAgfCA1MgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgcGxhbmVfc3RyaWRlWzJdICAg ICAgICAgfCAgICAgICAgIHBsYW5lX3N0cmlkZVszXSAgICAgICAgIHwgNTYKKyAqICstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDYwCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCA2NAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogc2l6ZSAtIHVpbnQzMl90LCBvdmVyYWxsIHNp emUgb2YgdGhlIGJ1ZmZlciBpbmNsdWRpbmcgc2l6ZXMgb2YgdGhlCisgKiAgIGluZGl2aWR1YWwg cGxhbmVzIGFuZCBwYWRkaW5nIGlmIGFwcGxpY2FibGUuCisgKiBudW1fcGxhbmVzIC0gdWludDhf dCwgbnVtYmVyIG9mIHBsYW5lcyBmb3IgdGhpcyBidWZmZXIuCisgKiBwbGFuZV9vZmZzZXQgLSBh cnJheSBvZiB1aW50MzJfdCwgb2Zmc2V0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHBsYW5lCisgKiAg IGluIG9jdGV0cyBmcm9tIHRoZSBidWZmZXIgc3RhcnQuCisgKiBwbGFuZV9zaXplIC0gYXJyYXkg b2YgdWludDMyX3QsIHNpemUgaW4gb2N0ZXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBsYW5lCisg KiAgIGluY2x1ZGluZyBwYWRkaW5nLgorICogcGxhbmVfc3RyaWRlIC0gYXJyYXkgb2YgdWludDMy X3QsIHNpemUgaW4gb2N0ZXRzIG9jY3VwaWVkIGJ5IHRoZQorICogICBjb3JyZXNwb25kaW5nIHNp bmdsZSBpbWFnZSBsaW5lIGluY2x1ZGluZyBwYWRkaW5nIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0 cnVjdCB4ZW5jYW1lcmFfYnVmX2RldGFpbHNfcmVzcCB7CisgICAgdWludDMyX3Qgc2l6ZTsKKyAg ICB1aW50OF90IG51bV9wbGFuZXM7CisgICAgdWludDhfdCByZXNlcnZlZFszXTsKKyAgICB1aW50 MzJfdCBwbGFuZV9vZmZzZXRbWEVOQ0FNRVJBX01BWF9QTEFORV07CisgICAgdWludDMyX3QgcGxh bmVfc2l6ZVtYRU5DQU1FUkFfTUFYX1BMQU5FXTsKKyAgICB1aW50MTZfdCBwbGFuZV9zdHJpZGVb WEVOQ0FNRVJBX01BWF9QTEFORV07Cit9OworCisvKgorICogR2V0IGNvbnRyb2wgZGV0YWlscyBy ZXNwb25zZSAtIHJlc3BvbnNlIGZvciBYRU5DQU1FUkFfT1BfR0VUX0NUUkxfREVUQUlMUzoKKyAq ICAgICAgICAgMCAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAyICAgICAgICAgICAg ICAgMyAgICAgICAgb2N0ZXQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgIGlk ICAgICAgICAgICAgICAgIHxHRVRfQ1RSTF9ERVRBSUxTfCAgICByZXNlcnZlZCAgICB8IDQKKyAq ICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAg ICAgaW5kZXggICAgICB8ICAgICAgdHlwZSAgICAgIHwgICAgICAgICAgICAgcmVzZXJ2ZWQgICAg ICAgICAgICB8IDEyCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDI0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZWZfdmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyOAorICogKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgMzYKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC98CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2NAorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKgorICogaW5kZXggLSB1aW50OF90LCBpbmRleCBvZiB0aGUgY2FtZXJhIGNvbnRyb2wgaW4g cmVzcG9uc2UuCisgKiB0eXBlIC0gdWludDhfdCwgdHlwZSBvZiB0aGUgY29udHJvbCwgb25lIG9m IHRoZSBYRU5DQU1FUkFfQ1RSTF9YWFguCisgKiBtaW4gLSBpbnQzMl90LCBtaW5pbXVtIHZhbHVl IG9mIHRoZSBjb250cm9sLgorICogbWF4IC0gaW50MzJfdCwgbWF4aW11bSB2YWx1ZSBvZiB0aGUg Y29udHJvbC4KKyAqIHN0ZXAgLSBpbnQzMl90LCBtaW5pbXVtIHNpemUgaW4gd2hpY2ggY29udHJv bCB2YWx1ZSBjYW4gYmUgY2hhbmdlZC4KKyAqIGRlZl92YWwgLSBpbnQzMl90LCBkZWZhdWx0IHZh bHVlIG9mIHRoZSBjb250cm9sLgorICovCitzdHJ1Y3QgeGVuY2FtZXJhX2dldF9jdHJsX2RldGFp bHNfcmVzcCB7CisgICAgdWludDhfdCBpbmRleDsKKyAgICB1aW50OF90IHR5cGU7CisgICAgdWlu dDhfdCByZXNlcnZlZFsyXTsKKyAgICBpbnQzMl90IG1pbjsKKyAgICBpbnQzMl90IG1heDsKKyAg ICBpbnQzMl90IHN0ZXA7CisgICAgaW50MzJfdCBkZWZfdmFsOworfTsKKworLyoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZlbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBFdmVudHMgYXJlIHNlbnQgdmlhIGEgc2hhcmVkIHBhZ2Ug YWxsb2NhdGVkIGJ5IHRoZSBmcm9udCBhbmQgcHJvcGFnYXRlZCBieQorICogICBldnQtZXZlbnQt Y2hhbm5lbC9ldnQtcmluZy1yZWYgWGVuU3RvcmUgZW50cmllcy4KKyAqCisgKiBBbGwgZXZlbnQg cGFja2V0cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCAoNjQgb2N0ZXRzKS4KKyAqIEFsbCBldmVudCBw YWNrZXRzIGhhdmUgY29tbW9uIGhlYWRlcjoKKyAqICAgICAgICAgMCAgICAgICAgICAgICAgICAx ICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgMyAgICAgICAgb2N0ZXQKKyAqICstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKworICogfCAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgIHwgICAgICB0eXBl ICAgICAgfCAgIHJlc2VydmVkICAgICB8IDQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIGlkIC0gdWludDE2X3QsIGV2ZW50IGlkLCBt YXkgYmUgdXNlZCBieSBmcm9udC4KKyAqIHR5cGUgLSB1aW50OF90LCB0eXBlIG9mIHRoZSBldmVu dC4KKyAqCisgKgorICogRnJhbWUgY2FwdHVyZWQgZXZlbnQgLSBldmVudCBmcm9tIGJhY2sgdG8g ZnJvbnQgd2hlbiBhIG5ldyBjYXB0dXJlZAorICogZnJhbWUgaXMgYXZhaWxhYmxlOgorICogICAg ICAgICAwICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAz ICAgICAgICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAg ICAgICAgICAgICAgfF9FVlRfRlJBTUVfQVZBSUx8ICAgcmVzZXJ2ZWQgICAgIHwgNAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAg aW5kZXggICAgIHwgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAg ICAgIHwgMTIKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVzZWRfc3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgKiArLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAyMAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8L1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L3wKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl c2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDY0CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqCisgKiBpbmRleCAtIHVpbnQ4X3QsIGluZGV4IG9mIHRoZSBidWZmZXIgdGhhdCBjb250YWlu cyBuZXcgY2FwdHVyZWQgZnJhbWUuCisgKiB1c2VkX3N6IC0gdWludDMyX3QsIG51bWJlciBvZiBv Y3RldHMgdGhpcyBmcmFtZSBoYXMuIFRoaXMgY2FuIGJlIGxlc3MKKyAqIHRoYW4gdGhlIFhFTkNB TUVSQV9PUF9HRVRfQlVGX0RFVEFJTFMuc2l6ZSBmb3IgY29tcHJlc3NlZCBmb3JtYXRzLgorICov CitzdHJ1Y3QgeGVuY2FtZXJhX2ZyYW1lX2F2YWlsX2V2dCB7CisgICAgdWludDhfdCBpbmRleDsK KyAgICB1aW50OF90IHJlc2VydmVkWzNdOworICAgIHVpbnQzMl90IHVzZWRfc3o7Cit9OworCitz dHJ1Y3QgeGVuY2FtZXJhX3JlcSB7CisgICAgdWludDE2X3QgaWQ7CisgICAgdWludDhfdCBvcGVy YXRpb247CisgICAgdWludDhfdCByZXNlcnZlZFs1XTsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0 cnVjdCB4ZW5jYW1lcmFfY29uZmlnIGNvbmZpZzsKKyAgICAgICAgc3RydWN0IHhlbmNhbWVyYV9i dWZfY3JlYXRlX3JlcSBidWZfY3JlYXRlOworCXN0cnVjdCB4ZW5jYW1lcmFfYnVmX2Rlc3Ryb3lf cmVxIGJ1Zl9kZXN0cm95OworCXN0cnVjdCB4ZW5jYW1lcmFfc2V0X2N0cmxfcmVxIHNldF9jdHJs OworICAgICAgICB1aW50OF90IHJlc2VydmVkWzU2XTsKKyAgICB9IHJlcTsKK307CisKK3N0cnVj dCB4ZW5jYW1lcmFfcmVzcCB7CisgICAgdWludDE2X3QgaWQ7CisgICAgdWludDhfdCBvcGVyYXRp b247CisgICAgdWludDhfdCByZXNlcnZlZDsKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICB1bmlv biB7CisgICAgICAgIHN0cnVjdCB4ZW5jYW1lcmFfY29uZmlnIGNvbmZpZzsKKyAgICAgICAgc3Ry dWN0IHhlbmNhbWVyYV9idWZfZGV0YWlsc19yZXNwIGJ1Zl9kZXRhaWxzOworCXN0cnVjdCB4ZW5j YW1lcmFfZ2V0X2N0cmxfZGV0YWlsc19yZXNwIGN0cmxfZGV0YWlsczsKKyAgICAgICAgdWludDhf dCByZXNlcnZlZDFbNTZdOworICAgIH0gcmVzcDsKK307CisKK3N0cnVjdCB4ZW5jYW1lcmFfZXZ0 IHsKKyAgICB1aW50MTZfdCBpZDsKKyAgICB1aW50OF90IHR5cGU7CisgICAgdWludDhfdCByZXNl cnZlZFs1XTsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB4ZW5jYW1lcmFfZnJhbWVfYXZh aWxfZXZ0IGZyYW1lX2F2YWlsOworICAgICAgICB1aW50OF90IHJlc2VydmVkWzU2XTsKKyAgICB9 IGV2dDsKK307CisKK0RFRklORV9SSU5HX1RZUEVTKHhlbl9jYW1lcmFpZiwgc3RydWN0IHhlbmNh bWVyYV9yZXEsIHN0cnVjdCB4ZW5jYW1lcmFfcmVzcCk7CisKKy8qCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgdG8gZnJvbnQgZXZlbnRzIGRl bGl2ZXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbiBvcmRlciB0byBkZWxpdmVyIGFz eW5jaHJvbm91cyBldmVudHMgZnJvbSBiYWNrIHRvIGZyb250IGEgc2hhcmVkIHBhZ2UgaXMKKyAq IGFsbG9jYXRlZCBieSBmcm9udCBhbmQgaXRzIGdyYW50ZWQgcmVmZXJlbmNlIHByb3BhZ2F0ZWQg dG8gYmFjayB2aWEKKyAqIFhlblN0b3JlIGVudHJpZXMgKGV2dC1yaW5nLXJlZi9ldnQtZXZlbnQt Y2hhbm5lbCkuCisgKiBUaGlzIHBhZ2UgaGFzIGEgY29tbW9uIGhlYWRlciB1c2VkIGJ5IGJvdGgg ZnJvbnQgYW5kIGJhY2sgdG8gc3luY2hyb25pemUKKyAqIGFjY2VzcyBhbmQgY29udHJvbCBldmVu dCdzIHJpbmcgYnVmZmVyLCB3aGlsZSBiYWNrIGJlaW5nIGEgcHJvZHVjZXIgb2YgdGhlCisgKiBl dmVudHMgYW5kIGZyb250IGJlaW5nIGEgY29uc3VtZXIuIFRoZSByZXN0IG9mIHRoZSBwYWdlIGFm dGVyIHRoZSBoZWFkZXIKKyAqIGlzIHVzZWQgZm9yIGV2ZW50IHBhY2tldHMuCisgKgorICogVXBv biByZWNlcHRpb24gb2YgYW4gZXZlbnQocykgZnJvbnQgbWF5IGNvbmZpcm0gaXRzIHJlY2VwdGlv bgorICogZm9yIGVpdGhlciBlYWNoIGV2ZW50LCBncm91cCBvZiBldmVudHMgb3Igbm9uZS4KKyAq LworCitzdHJ1Y3QgeGVuY2FtZXJhX2V2ZW50X3BhZ2UgeworICAgIHVpbnQzMl90IGluX2NvbnM7 CisgICAgdWludDMyX3QgaW5fcHJvZDsKKyAgICB1aW50OF90IHJlc2VydmVkWzU2XTsKK307CisK KyNkZWZpbmUgWEVOQ0FNRVJBX0VWRU5UX1BBR0VfU0laRSA0MDk2CisjZGVmaW5lIFhFTkNBTUVS QV9JTl9SSU5HX09GRlMgKHNpemVvZihzdHJ1Y3QgeGVuY2FtZXJhX2V2ZW50X3BhZ2UpKQorI2Rl ZmluZSBYRU5DQU1FUkFfSU5fUklOR19TSVpFIChYRU5DQU1FUkFfRVZFTlRfUEFHRV9TSVpFIC0g WEVOQ0FNRVJBX0lOX1JJTkdfT0ZGUykKKyNkZWZpbmUgWEVOQ0FNRVJBX0lOX1JJTkdfTEVOIChY RU5DQU1FUkFfSU5fUklOR19TSVpFIC8gc2l6ZW9mKHN0cnVjdCB4ZW5jYW1lcmFfZXZ0KSkKKyNk ZWZpbmUgWEVOQ0FNRVJBX0lOX1JJTkcocGFnZSkgXAorCSgoc3RydWN0IHhlbmNhbWVyYV9ldnQg KikoKGNoYXIgKikocGFnZSkgKyBYRU5DQU1FUkFfSU5fUklOR19PRkZTKSkKKyNkZWZpbmUgWEVO Q0FNRVJBX0lOX1JJTkdfUkVGKHBhZ2UsIGlkeCkgXAorCShYRU5DQU1FUkFfSU5fUklORygocGFn ZSkpWyhpZHgpICUgWEVOQ0FNRVJBX0lOX1JJTkdfTEVOXSkKKworI2VuZGlmIC8qIF9fWEVOX1BV QkxJQ19JT19DQU1FUkFJRl9IX18gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1v ZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0 YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoy LjE4LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-lj1-f196.google.com ([209.85.208.196]:40813 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729875AbeGaLLW (ORCPT ); Tue, 31 Jul 2018 07:11:22 -0400 Received: by mail-lj1-f196.google.com with SMTP id j19-v6so13081521ljc.7 for ; Tue, 31 Jul 2018 02:31:52 -0700 (PDT) From: Oleksandr Andrushchenko To: xen-devel@lists.xenproject.org, konrad.wilk@oracle.com, jgross@suse.com, boris.ostrovsky@oracle.com, mchehab@kernel.org, linux-media@vger.kernel.org, sakari.ailus@linux.intel.com, koji.matsuoka.xm@renesas.com Cc: Oleksandr Andrushchenko Subject: [Xen-devel][PATCH 1/1] cameraif: add ABI for para-virtual camera Date: Tue, 31 Jul 2018 12:31:42 +0300 Message-Id: <20180731093142.3828-2-andr2000@gmail.com> In-Reply-To: <20180731093142.3828-1-andr2000@gmail.com> References: <20180731093142.3828-1-andr2000@gmail.com> Sender: linux-media-owner@vger.kernel.org List-ID: From: Oleksandr Andrushchenko This is the ABI for the two halves of a para-virtualized camera driver which extends Xen's reach multimedia capabilities even farther enabling it for video conferencing, In-Vehicle Infotainment, high definition maps etc. The initial goal is to support most needed functionality with the final idea to make it possible to extend the protocol if need be: 1. Provide means for base virtual device configuration: - pixel formats - resolutions - frame rates 2. Support basic camera controls: - contrast - brightness - hue - saturation 3. Support streaming control 4. Support zero-copying use-cases Signed-off-by: Oleksandr Andrushchenko --- xen/include/public/io/cameraif.h | 981 +++++++++++++++++++++++++++++++ 1 file changed, 981 insertions(+) create mode 100644 xen/include/public/io/cameraif.h diff --git a/xen/include/public/io/cameraif.h b/xen/include/public/io/cameraif.h new file mode 100644 index 000000000000..bdc6a1262fcf --- /dev/null +++ b/xen/include/public/io/cameraif.h @@ -0,0 +1,981 @@ +/****************************************************************************** + * cameraif.h + * + * Unified camera 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) 2018 EPAM Systems Inc. + * + * Author: Oleksandr Andrushchenko + */ + +#ifndef __XEN_PUBLIC_IO_CAMERAIF_H__ +#define __XEN_PUBLIC_IO_CAMERAIF_H__ + +#include "ring.h" +#include "../grant_table.h" + +/* + ****************************************************************************** + * Protocol version + ****************************************************************************** + */ +#define XENCAMERA_PROTOCOL_VERSION "1" + +/* + ****************************************************************************** + * Feature and Parameter Negotiation + ****************************************************************************** + * + * Front->back notifications: when enqueuing a new request, sending a + * notification can be made conditional on xencamera_req (i.e., the generic + * hold-off mechanism provided by the ring macros). Backends must set + * xencamera_req 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 xencamera_resp (i.e., the generic + * hold-off mechanism provided by the ring macros). Frontends must set + * xencamera_resp appropriately (e.g., using RING_FINAL_CHECK_FOR_RESPONSES()). + * + * The two halves of a para-virtual camera driver utilize nodes within + * XenStore to communicate capabilities and to negotiate operating parameters. + * This section enumerates these nodes which reside in the respective front and + * backend portions of XenStore, following the XenBus convention. + * + * All data in 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 formatted node string, without loss of information. + * + ****************************************************************************** + * Example configuration + ****************************************************************************** + * + * This is an example of backend and frontend configuration: + * + *--------------------------------- Backend ----------------------------------- + * + * /local/domain/0/backend/vcamera/1/0/frontend-id = "1" + * /local/domain/0/backend/vcamera/1/0/frontend = "/local/domain/1/device/vcamera/0" + * /local/domain/0/backend/vcamera/1/0/state = "4" + * /local/domain/0/backend/vcamera/1/0/versions = "1,2" + * + *--------------------------------- Frontend ---------------------------------- + * + * /local/domain/1/device/vcamera/0/backend-id = "0" + * /local/domain/1/device/vcamera/0/backend = "/local/domain/0/backend/vcamera/1" + * /local/domain/1/device/vcamera/0/state = "4" + * /local/domain/1/device/vcamera/0/version = "1" + * /local/domain/1/device/vcamera/0/be-alloc = "1" + * + *---------------------------- Device 0 configuration ------------------------- + * + * /local/domain/1/device/vcamera/0/controls = "contrast,hue" + * /local/domain/1/device/vcamera/0/formats/YUYV/640x480 = "30/1,15/1,15/2" + * /local/domain/1/device/vcamera/0/formats/YUYV/1920x1080 = "15/2" + * /local/domain/1/device/vcamera/0/formats/BGRA/640x480 = "15/1,15/2" + * /local/domain/1/device/vcamera/0/formats/BGRA/1200x720 = "15/2" + * /local/domain/1/device/vcamera/0/unique-id = "0" + * /local/domain/1/device/vcamera/0/req-ring-ref = "2832" + * /local/domain/1/device/vcamera/0/req-event-channel = "15" + * /local/domain/1/device/vcamera/0/evt-ring-ref = "387" + * /local/domain/1/device/vcamera/0/evt-event-channel = "16" + * + *---------------------------- Device 1 configuration ------------------------- + * + * /local/domain/1/device/vcamera/1/controls = "brightness,saturation,hue" + * /local/domain/1/device/vcamera/1/formats/YUYV/640x480 = "30/1,15/1,15/2" + * /local/domain/1/device/vcamera/1/formats/YUYV/1920x1080 = "15/2" + * /local/domain/1/device/vcamera/1/unique-id = "1" + * /local/domain/1/device/vcamera/1/req-ring-ref = "2833" + * /local/domain/1/device/vcamera/1/req-event-channel = "17" + * /local/domain/1/device/vcamera/1/evt-ring-ref = "388" + * /local/domain/1/device/vcamera/1/evt-event-channel = "18" + * + ****************************************************************************** + * Backend XenBus Nodes + ****************************************************************************** + * + *----------------------------- Protocol version ------------------------------ + * + * versions + * Values: + * + * List of XENCAMERA_LIST_SEPARATOR separated protocol versions supported + * by the backend. For example "1,2,3". + * + ****************************************************************************** + * Frontend XenBus Nodes + ****************************************************************************** + * + *-------------------------------- Addressing --------------------------------- + * + * dom-id + * Values: + * + * Domain identifier. + * + * dev-id + * Values: + * + * Device identifier. + * + * /local/domain//device/vcamera//... + * + *----------------------------- Protocol version ------------------------------ + * + * version + * Values: + * + * Protocol version, chosen among the ones supported by the backend. + * + *------------------------- Backend buffer allocation ------------------------- + * + * be-alloc + * Values: "0", "1" + * + * If value is set to "1", then backend will be the buffer + * provider/allocator for this domain during XENCAMERA_OP_BUF_CREATE + * operation. + * If value is not "1" or omitted frontend must allocate buffers itself. + * + *------------------------------- Camera settings ----------------------------- + * + * unique-id + * Values: + * + * After device instance initialization each camera is assigned a + * unique ID, so it can be identified by the backend by this ID. + * This can be UUID or such. + * + * controls + * Values: + * + * List of supported camera controls separated by XENCAMERA_LIST_SEPARATOR. + * Camera controls are expressed as a list of string values w/o any + * ordering requirement. + * + * formats + * Values: + * + * Formats are organized as a set of directories one per each + * supported pixel format. The name of the directory is an upper case + * string of the corresponding FOURCC string label. The next level of + * the directory under represents supported resolutions. + * + * resolution + * Values: x + * + * Resolutions are organized as a set of directories one per each + * supported resolution under corresponding directory. + * The name of the directory is the supported width and height + * of the camera resolution in pixels. + * + * frame-rates + * Values: / + * + * List of XENCAMERA_FRAME_RATE_SEPARATOR separated supported frame rates + * of the camera expressed as numerator and denominator of the + * corresponding frame rate. + * + * The format of the directory tree with resolutions and frame rates + * must be structured in the following format: + * + * .../vcamera//// + * + * where + * i - i-th supported pixel format + * j - j-th supported resolution for i-th pixel format + * k - k-th supported frame rate for i-th pixel format and j-th + * resolution + * + *------------------- Camera Request Transport Parameters --------------------- + * + * This communication path is used to deliver requests from frontend to backend + * and get the corresponding responses from backend to frontend, + * set up per virtual camera device. + * + * req-event-channel + * Values: + * + * The identifier of the Xen camera's control event channel + * used to signal activity in the ring buffer. + * + * req-ring-ref + * Values: + * + * The Xen grant reference granting permission for the backend to map + * a sole page of camera's control ring buffer. + * + *-------------------- Camera Event Transport Parameters ---------------------- + * + * This communication path is used to deliver asynchronous events from backend + * to frontend, set up per virtual camera device. + * + * evt-event-channel + * Values: + * + * The identifier of the Xen camera's event channel + * used to signal activity in the ring buffer. + * + * evt-ring-ref + * Values: + * + * The Xen grant reference granting permission for the backend to map + * a sole page of camera's event ring buffer. + */ + +/* + ****************************************************************************** + * STATE DIAGRAMS + ****************************************************************************** + * + * Tool stack creates front and back state nodes with initial state + * XenbusStateInitialising. + * Tool stack creates and sets up frontend camera configuration + * nodes per domain. + * + *-------------------------------- Normal flow -------------------------------- + * + * Front Back + * ================================= ===================================== + * XenbusStateInitialising XenbusStateInitialising + * o Query backend device identification + * data. + * o Open and validate backend device. + * | + * | + * V + * XenbusStateInitWait + * + * o Query frontend configuration + * o Allocate and initialize + * event channels per configured + * camera. + * o Publish transport parameters + * that will be in effect during + * this connection. + * | + * | + * V + * XenbusStateInitialised + * + * o Query frontend transport parameters. + * o Connect to the event channels. + * | + * | + * V + * XenbusStateConnected + * + * o Create and initialize OS + * virtual camera as per + * configuration. + * | + * | + * V + * XenbusStateConnected + * + * XenbusStateUnknown + * XenbusStateClosed + * XenbusStateClosing + * o Remove virtual camera device + * o Remove event channels + * | + * | + * V + * XenbusStateClosed + * + *------------------------------- Recovery flow ------------------------------- + * + * In case of frontend unrecoverable errors backend handles that as + * if frontend goes into the XenbusStateClosed state. + * + * In case of backend unrecoverable errors frontend tries removing + * the virtualized device. If this is possible at the moment of error, + * then frontend goes into the XenbusStateInitialising state and is ready for + * new connection with backend. If the virtualized device is still in use and + * cannot be removed, then frontend goes into the XenbusStateReconfiguring state + * until either the virtualized device is removed or backend initiates a new + * connection. On the virtualized device removal frontend goes into the + * XenbusStateInitialising state. + * + * Note on XenbusStateReconfiguring state of the frontend: if backend has + * unrecoverable errors then frontend cannot send requests to the backend + * and thus cannot provide functionality of the virtualized device anymore. + * After backend is back to normal the virtualized device may still hold some + * state: configuration in use, allocated buffers, client application state etc. + * In most cases, this will require frontend to implement complex recovery + * reconnect logic. Instead, by going into XenbusStateReconfiguring state, + * frontend will make sure no new clients of the virtualized device are + * accepted, allow existing client(s) to exit gracefully by signaling error + * state etc. + * Once all the clients are gone frontend can reinitialize the virtualized + * device and get into XenbusStateInitialising state again signaling the + * backend that a new connection can be made. + * + * There are multiple conditions possible under which frontend will go from + * XenbusStateReconfiguring into XenbusStateInitialising, some of them are OS + * specific. For example: + * 1. The underlying OS framework may provide callbacks to signal that the last + * client of the virtualized device has gone and the device can be removed + * 2. Frontend can schedule a deferred work (timer/tasklet/workqueue) + * to periodically check if this is the right time to re-try removal of + * the virtualized device. + * 3. By any other means. + * + ****************************************************************************** + * REQUEST CODES + ****************************************************************************** + */ +#define XENCAMERA_OP_SET_CONFIG 0x00 +#define XENCAMERA_OP_GET_BUF_DETAILS 0x01 +#define XENCAMERA_OP_BUF_CREATE 0x02 +#define XENCAMERA_OP_BUF_DESTROY 0x03 +#define XENCAMERA_OP_STREAM_START 0x04 +#define XENCAMERA_OP_STREAM_STOP 0x05 +#define XENCAMERA_OP_GET_CTRL_DETAILS 0x06 +#define XENCAMERA_OP_SET_CTRL 0x07 + +#define XENCAMERA_CTRL_BRIGHTNESS 0x00 +#define XENCAMERA_CTRL_CONTRAST 0x01 +#define XENCAMERA_CTRL_SATURATION 0x02 +#define XENCAMERA_CTRL_HUE 0x03 + +/* + ****************************************************************************** + * EVENT CODES + ****************************************************************************** + */ +#define XENCAMERA_EVT_FRAME_AVAIL 0x00 + +/* + ****************************************************************************** + * XENSTORE FIELD AND PATH NAME STRINGS, HELPERS + ****************************************************************************** + */ +#define XENCAMERA_DRIVER_NAME "vcamera" + +#define XENCAMERA_LIST_SEPARATOR "," +#define XENCAMERA_RESOLUTION_SEPARATOR "x" +#define XENCAMERA_FRAME_RATE_SEPARATOR "/" + +#define XENCAMERA_FIELD_BE_VERSIONS "versions" +#define XENCAMERA_FIELD_FE_VERSION "version" +#define XENCAMERA_FIELD_REQ_RING_REF "req-ring-ref" +#define XENCAMERA_FIELD_REQ_CHANNEL "req-event-channel" +#define XENCAMERA_FIELD_EVT_RING_REF "evt-ring-ref" +#define XENCAMERA_FIELD_EVT_CHANNEL "evt-event-channel" +#define XENCAMERA_FIELD_CONTROLS "controls" +#define XENCAMERA_FIELD_FORMATS "formats" +#define XENCAMERA_FIELD_BE_ALLOC "be-alloc" +#define XENCAMERA_FIELD_UNIQUE_ID "unique-id" + +#define XENCAMERA_CTRL_BRIGHTNESS_STR "brightness" +#define XENCAMERA_CTRL_CONTRAST_STR "contrast" +#define XENCAMERA_CTRL_SATURATION_STR "saturation" +#define XENCAMERA_CTRL_HUE_STR "hue" + +/* Maximum number of buffer planes supported. */ +#define XENCAMERA_MAX_PLANE 4 + +/* + ****************************************************************************** + * STATUS RETURN CODES + ****************************************************************************** + * + * Status return code is zero on success and -XEN_EXX on failure. + * + ****************************************************************************** + * Assumptions + ****************************************************************************** + * + * - usage of grant reference 0 as invalid grant reference: + * grant reference 0 is valid, but never exposed to a PV driver, + * because of the fact it is already in use/reserved by the PV console. + * - all references in this document to page sizes must be treated + * as pages of size XEN_PAGE_SIZE unless otherwise noted. + * + ****************************************************************************** + * Description of the protocol between frontend and backend driver + ****************************************************************************** + * + * The two halves of a Para-virtual camera driver communicate with + * each other using shared pages and event channels. + * Shared page contains a ring with request/response packets. + * + * All reserved fields in the structures below must be 0. + * + * For all request/response/event packets: + * - frame rate parameter is represented as a pair of 4 octet long + * numerator and denominator: + * - frame_rate_numer - uint32_t, numerator of the frame rate + * - frame_rate_denom - uint32_t, denominator of the frame rate + * The corresponding frame rate (Hz) is calculated as: + * frame_rate = frame_rate_numer / frame_rate_denom + * - buffer index is a zero based index of the buffer. Must be less than + * the value of XENCAMERA_OP_SET_CONFIG.num_bufs response: + * - index - uint8_t, index of the buffer. + * + * + *---------------------------------- Requests --------------------------------- + * + * All request packets have the same length (64 octets). + * All request packets have common header: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | operation | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * id - uint16_t, private guest value, echoed in response. + * operation - uint8_t, operation code, XENCAMERA_OP_XXX. + * + * + * Request configuration set/reset - request to set or reset. + * the configuration/mode of the camera: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | _OP_SET_CONFIG | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * | pixel format | 12 + * +----------------+----------------+----------------+----------------+ + * | width | 16 + * +----------------+----------------+----------------+----------------+ + * | height | 20 + * +----------------+----------------+----------------+----------------+ + * | frame_rate_numer | 24 + * +----------------+----------------+----------------+----------------+ + * | frame_rate_denom | 28 + * +----------------+----------------+----------------+----------------+ + * | num_bufs | reserved | 32 + * +----------------+----------------+----------------+----------------+ + * | reserved | 36 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * Pass all zeros to reset, otherwise command is treated as configuration set. + * + * pixel_format - uint32_t, pixel format to be used, FOURCC code. + * width - uint32_t, width in pixels. + * height - uint32_t, height in pixels. + * frame_rate_numer - uint32_t, numerator of the frame rate. + * frame_rate_denom - uint32_t, denominator of the frame rate. + * num_bufs - uint8_t, desired number of buffers to be used. + * + * See response format for this request. + * + * Notes: + * - frontend must check the corresponding response in order to see + * if the values reported back by the backend do match the desired ones + * and can be accepted. + * - frontend may send multiple XENCAMERA_OP_SET_CONFIG requests before + * sending XENCAMERA_OP_STREAM_START request to update or tune the + * configuration. + */ +struct xencamera_config { + uint32_t pixel_format; + uint32_t width; + uint32_t height; + uint32_t frame_rate_nom; + uint32_t frame_rate_denom; + uint8_t num_bufs; +}; + +/* + * Request buffer details - request camera buffer's memory layout. + * detailed description: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id |_GET_BUF_DETAILS| reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * See response format for this request. + * + * + * Request camera buffer creation: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | _OP_BUF_CREATE | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * | index | reserved | 12 + * +----------------+----------------+----------------+----------------+ + * | gref_directory | 16 + * +----------------+----------------+----------------+----------------+ + * | reserved | 20 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * An attempt to create multiple buffers with the same index is an error. + * index can be re-used after destroying the corresponding camera buffer. + * + * index - uint8_t, index of the buffer to be created. + * gref_directory - grant_ref_t, a reference to the first shared page + * describing shared buffer references. The size of the buffer is equal to + * XENCAMERA_OP_GET_BUF_DETAILS.size response. At least one page exists. If + * shared buffer size exceeds what can be addressed by this single page, + * then reference to the next shared page must be supplied (see + * gref_dir_next_page below). + * + * If XENCAMERA_FIELD_BE_ALLOC configuration entry is set, then backend will + * allocate the buffer with the parameters provided in this request and page + * directory is handled as follows: + * Frontend on request: + * - allocates pages for the directory (gref_directory, + * gref_dir_next_page(s) + * - grants permissions for the pages of the directory to the backend + * - sets gref_dir_next_page fields + * Backend on response: + * - grants permissions for the pages of the buffer allocated to + * the frontend + * - fills in page directory with grant references + * (gref[] in struct xencamera_page_directory) + */ +struct xencamera_buf_create_req { + uint8_t index; + uint8_t reserved[3]; + grant_ref_t gref_directory; +}; + +/* + * Shared page for XENCAMERA_OP_BUF_CREATE buffer descriptor (gref_directory in + * the request) employs a list of pages, describing all pages of the shared + * data buffer: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | gref_dir_next_page | 4 + * +----------------+----------------+----------------+----------------+ + * | gref[0] | 8 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | gref[i] | i*4+8 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | gref[N - 1] | N*4+8 + * +----------------+----------------+----------------+----------------+ + * + * gref_dir_next_page - grant_ref_t, reference to the next page describing + * page directory. Must be 0 if there are no more pages in the list. + * gref[i] - grant_ref_t, reference to a shared page of the buffer + * allocated at XENCAMERA_OP_BUF_CREATE. + * + * Number of grant_ref_t entries in the whole page directory is not + * passed, but instead can be calculated as: + * num_grefs_total = (XENCAMERA_OP_GET_BUF_DETAILS.size + XEN_PAGE_SIZE - 1) / + * XEN_PAGE_SIZE + */ +struct xencamera_page_directory { + grant_ref_t gref_dir_next_page; + grant_ref_t gref[1]; /* Variable length */ +}; + +/* + * Request buffer destruction - destroy a previously allocated camera buffer: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | _OP_BUF_DESTROY| reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * | index | reserved | 12 + * +----------------+----------------+----------------+----------------+ + * | reserved | 16 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * index - uint8_t, index of the buffer to be destroyed. + */ + +struct xencamera_buf_destroy_req { + uint8_t index; +}; + +/* + * Request camera capture stream start: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id |_OP_STREAM_START| reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * + * Request camera capture stream stop: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id |_OP_STREAM_STOP | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * + * Request camera control details: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id |GET_CTRL_DETAILS| reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | index | reserved | 12 + * +----------------+----------------+----------------+----------------+ + * | reserved | 16 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * See response format for this request. + * + * index - uint8_t, index of the control to be queried. + */ +struct xencamera_get_ctrl_details_req { + uint8_t index; +}; + +/* + * + * Request camera control change: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | _OP_SET_CTRL | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | index | reserved | 12 + * +----------------+----------------+----------------+----------------+ + * | value | 16 + * +----------------+----------------+----------------+----------------+ + * | reserved | 20 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * See response format for this request. + * + * index - uint8_t, index of the control. + * value - int32_t, new value of the control. + */ +struct xencamera_set_ctrl_req { + uint8_t index; + uint8_t reserved[3]; + int32_t value; +}; + +/* + *---------------------------------- Responses -------------------------------- + * + * All response packets have the same length (64 octets). + * + * All response packets have common header: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | operation | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | status | 8 + * +----------------+----------------+----------------+----------------+ + * + * id - uint16_t, copied from the request. + * operation - uint8_t, XENCAMERA_OP_* - copied from request. + * status - int32_t, response status, zero on success and -XEN_EXX on failure. + * + * + * Set configuration response - response for XENCAMERA_OP_SET_CONFIG: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | _OP_SET_CONFIG | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | status | 8 + * +----------------+----------------+----------------+----------------+ + * | pixel format | 12 + * +----------------+----------------+----------------+----------------+ + * | width | 16 + * +----------------+----------------+----------------+----------------+ + * | height | 20 + * +----------------+----------------+----------------+----------------+ + * | frame_rate_numer | 24 + * +----------------+----------------+----------------+----------------+ + * | frame_rate_denom | 28 + * +----------------+----------------+----------------+----------------+ + * | num_bufs | reserved | 32 + * +----------------+----------------+----------------+----------------+ + * | reserved | 36 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * Meaning of the corresponding values in this response is the same as for + * XENCAMERA_OP_SET_CONFIG request. + * + * + * Request buffer details response - response for XENCAMERA_OP_GET_BUF_DETAILS + * request: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id |_GET_BUF_DETAILS| reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | status | 8 + * +----------------+----------------+----------------+----------------+ + * | size | 12 + * +----------------+----------------+----------------+----------------+ + * | num_planes | reserved | 16 + * +----------------+----------------+----------------+----------------+ + * | plane_offset[0] | 20 + * +----------------+----------------+----------------+----------------+ + * | plane_offset[1] | 24 + * +----------------+----------------+----------------+----------------+ + * | plane_offset[2] | 28 + * +----------------+----------------+----------------+----------------+ + * | plane_offset[3] | 32 + * +----------------+----------------+----------------+----------------+ + * | plane_size[0] | 36 + * +----------------+----------------+----------------+----------------+ + * | plane_size[1] | 40 + * +----------------+----------------+----------------+----------------+ + * | plane_size[2] | 44 + * +----------------+----------------+----------------+----------------+ + * | plane_size[3] | 48 + * +----------------+----------------+----------------+----------------+ + * | plane_stride[0] | plane_stride[1] | 52 + * +----------------+----------------+----------------+----------------+ + * | plane_stride[2] | plane_stride[3] | 56 + * +----------------+----------------+----------------+----------------+ + * | reserved | 60 + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * size - uint32_t, overall size of the buffer including sizes of the + * individual planes and padding if applicable. + * num_planes - uint8_t, number of planes for this buffer. + * plane_offset - array of uint32_t, offset of the corresponding plane + * in octets from the buffer start. + * plane_size - array of uint32_t, size in octets of the corresponding plane + * including padding. + * plane_stride - array of uint32_t, size in octets occupied by the + * corresponding single image line including padding if applicable. + */ +struct xencamera_buf_details_resp { + uint32_t size; + uint8_t num_planes; + uint8_t reserved[3]; + uint32_t plane_offset[XENCAMERA_MAX_PLANE]; + uint32_t plane_size[XENCAMERA_MAX_PLANE]; + uint16_t plane_stride[XENCAMERA_MAX_PLANE]; +}; + +/* + * Get control details response - response for XENCAMERA_OP_GET_CTRL_DETAILS: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id |GET_CTRL_DETAILS| reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | status | 8 + * +----------------+----------------+----------------+----------------+ + * | index | type | reserved | 12 + * +----------------+----------------+----------------+----------------+ + * | min | 16 + * +----------------+----------------+----------------+----------------+ + * | max | 20 + * +----------------+----------------+----------------+----------------+ + * | step | 24 + * +----------------+----------------+----------------+----------------+ + * | def_val | 28 + * +----------------+----------------+----------------+----------------+ + * | reserved | 36 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * index - uint8_t, index of the camera control in response. + * type - uint8_t, type of the control, one of the XENCAMERA_CTRL_XXX. + * min - int32_t, minimum value of the control. + * max - int32_t, maximum value of the control. + * step - int32_t, minimum size in which control value can be changed. + * def_val - int32_t, default value of the control. + */ +struct xencamera_get_ctrl_details_resp { + uint8_t index; + uint8_t type; + uint8_t reserved[2]; + int32_t min; + int32_t max; + int32_t step; + int32_t def_val; +}; + +/* + *----------------------------------- Events ---------------------------------- + * + * Events are sent via a shared page allocated by the front and propagated by + * evt-event-channel/evt-ring-ref XenStore entries. + * + * All event packets have the same length (64 octets). + * All event packets have common header: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id | type | reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * + * id - uint16_t, event id, may be used by front. + * type - uint8_t, type of the event. + * + * + * Frame captured event - event from back to front when a new captured + * frame is available: + * 0 1 2 3 octet + * +----------------+----------------+----------------+----------------+ + * | id |_EVT_FRAME_AVAIL| reserved | 4 + * +----------------+----------------+----------------+----------------+ + * | reserved | 8 + * +----------------+----------------+----------------+----------------+ + * | index | reserved | 12 + * +----------------+----------------+----------------+----------------+ + * | used_sz | 16 + * +----------------+----------------+----------------+----------------+ + * | reserved | 20 + * +----------------+----------------+----------------+----------------+ + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| + * +----------------+----------------+----------------+----------------+ + * | reserved | 64 + * +----------------+----------------+----------------+----------------+ + * + * index - uint8_t, index of the buffer that contains new captured frame. + * used_sz - uint32_t, number of octets this frame has. This can be less + * than the XENCAMERA_OP_GET_BUF_DETAILS.size for compressed formats. + */ +struct xencamera_frame_avail_evt { + uint8_t index; + uint8_t reserved[3]; + uint32_t used_sz; +}; + +struct xencamera_req { + uint16_t id; + uint8_t operation; + uint8_t reserved[5]; + union { + struct xencamera_config config; + struct xencamera_buf_create_req buf_create; + struct xencamera_buf_destroy_req buf_destroy; + struct xencamera_set_ctrl_req set_ctrl; + uint8_t reserved[56]; + } req; +}; + +struct xencamera_resp { + uint16_t id; + uint8_t operation; + uint8_t reserved; + int32_t status; + union { + struct xencamera_config config; + struct xencamera_buf_details_resp buf_details; + struct xencamera_get_ctrl_details_resp ctrl_details; + uint8_t reserved1[56]; + } resp; +}; + +struct xencamera_evt { + uint16_t id; + uint8_t type; + uint8_t reserved[5]; + union { + struct xencamera_frame_avail_evt frame_avail; + uint8_t reserved[56]; + } evt; +}; + +DEFINE_RING_TYPES(xen_cameraif, struct xencamera_req, struct xencamera_resp); + +/* + ****************************************************************************** + * Back to front events delivery + ****************************************************************************** + * In order to deliver asynchronous events from back to front a shared page is + * allocated by front and its granted reference propagated to back via + * XenStore entries (evt-ring-ref/evt-event-channel). + * This page has a common header used by both front and back to synchronize + * access and control event's ring buffer, while back being a producer of the + * events and front being a consumer. The rest of the page after the header + * is used for event packets. + * + * Upon reception of an event(s) front may confirm its reception + * for either each event, group of events or none. + */ + +struct xencamera_event_page { + uint32_t in_cons; + uint32_t in_prod; + uint8_t reserved[56]; +}; + +#define XENCAMERA_EVENT_PAGE_SIZE 4096 +#define XENCAMERA_IN_RING_OFFS (sizeof(struct xencamera_event_page)) +#define XENCAMERA_IN_RING_SIZE (XENCAMERA_EVENT_PAGE_SIZE - XENCAMERA_IN_RING_OFFS) +#define XENCAMERA_IN_RING_LEN (XENCAMERA_IN_RING_SIZE / sizeof(struct xencamera_evt)) +#define XENCAMERA_IN_RING(page) \ + ((struct xencamera_evt *)((char *)(page) + XENCAMERA_IN_RING_OFFS)) +#define XENCAMERA_IN_RING_REF(page, idx) \ + (XENCAMERA_IN_RING((page))[(idx) % XENCAMERA_IN_RING_LEN]) + +#endif /* __XEN_PUBLIC_IO_CAMERAIF_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.18.0