From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shashank Sharma Subject: [PATCH v3 08/14] drm: add helper functions for YCBCR output handling Date: Wed, 14 Jun 2017 23:17:39 +0530 Message-ID: <1497462465-14066-9-git-send-email-shashank.sharma@intel.com> References: <1497462465-14066-1-git-send-email-shashank.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1497462465-14066-1-git-send-email-shashank.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, ville.syrjala@linux.intel.com Cc: Jose Abreu , ander.conselvan.de.oliveira@intel.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciBZQ0JDUiBIRE1JIG91 dHB1dApoYW5kbGluZy4gVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSBsaWtl OgotIGNoZWNrIGlmIGEgZ2l2ZW4gdmlkZW8gbW9kZSBpcyBZQ0JDUiA0MjAgb25seSBtb2RlLgot IGNoZWNrIGlmIGEgZ2l2ZW4gdmlkZW8gbW9kZSBpcyBZQ0JDUiA0MjAgbW9kZS4KLSBnZXQgdGhl IGhpZ2hlc3Qgc3Vic2FtbGVkIHljYmNyIG91dHB1dC4KLSBnZXQgdGhlIGxvd2VzdCBzdWJzYW1s ZWQgeWNiY3Igb3V0cHV0LgotIGNoZWNrIGlmIGEgZ2l2ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJp bmF0aW9uIGNhbiBzdXBwb3J0IGFueQogIFlDQkNSIEhETUkgb3V0cHV0LgotIGNoZWNrIGlmIGEg Z2l2ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJpbmF0aW9uIGNhbiBzdXBwb3J0IGEgcGFydGljdWxh cgogIFlDQkNSIEhETUkgb3V0cHV0LgoKQ3VycmVudGx5IGFsbCB0aGVzZSBoZWxwZXJzIGFyZSBr ZXB0IHN0YXRpYywgYW5kIG9ubHkgb25lIHdyYXBwZXIgZnVuY3Rpb24KaXMgZXhwb3NlZCB0byBj YWxsZXJzLCB3aGljaCBpcyAiZHJtX2ZpbmRfaGRtaV9vdXRwdXRfdHlwZSIuIFRoaXMgZnVuY3Rp b24KdGFrZXMgaW5wdXRzIGFzIGN1cnJlbnQgbW9kZSwgdXNlciBwcmVmZXJlbmNlIGFuZCBzcmMg KyBzaW5rIGNhcGFiaWxpdGllcywKYW5kIHByb3ZpZGVzIHRoZSBtb3N0IHN1aXRhYmxlIEhETUkg b3V0cHV0IGZvcm1hdCB0byBtYXRjaCBhbGwgb2YgdGhlc2UKaW5wdXRzLgoKVGhpcyB3cmFwcGVy IGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBpbiBuZXh0IGZldyBwYXRjaGVzIGluIHRoaXMKc2VyaWVz IGZyb20gSTkxNSBkcml2ZXIuCgpWMjogQWRkZWQgWUNCQ1IgZnVuY3Rpb25zIGFzIGhlbHBlcnMg aW4gRFJNIGxheWVyLCBpbnN0ZWFkIG9mCiAgICBrZWVwaW5nIGl0IGluIEk5MTUgbGF5ZXIuClYz OiBBZGRlZCBoYW5kbGluZyBmb3IgWUNCQ1ItNDIwIG9ubHkgbW9kZXMgdG9vLgoKQ2M6IFZpbGxl IFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpDYzogSm9zZSBBYnJldSA8 Sm9zZS5BYnJldUBzeW5vcHN5cy5jb20+ClNpZ25lZC1vZmYtYnk6IFNoYXNoYW5rIFNoYXJtYSA8 c2hhc2hhbmsuc2hhcm1hQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQu YyAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYyB8IDMwNiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX2VkaWQu aCAgICAgIHwgICAxICsKIGluY2x1ZGUvZHJtL2RybV9tb2Rlcy5oICAgICB8ICAgNSArCiA0IGZp bGVzIGNoYW5nZWQsIDMxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQu YwppbmRleCBmZTFiM2JmLi4zYmUwYWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtMjk0OSw3ICsyOTQ5 LDcgQEAgdTggZHJtX21hdGNoX2NlYV9tb2RlKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICp0b19tYXRjaCkKIH0KIEVYUE9SVF9TWU1CT0woZHJtX21hdGNoX2NlYV9tb2RlKTsKIAotc3Rh dGljIGJvb2wgZHJtX3ZhbGlkX2NlYV92aWModTggdmljKQorYm9vbCBkcm1fdmFsaWRfY2VhX3Zp Yyh1OCB2aWMpCiB7CiAJcmV0dXJuIHZpYyA+IDAgJiYgdmljIDwgQVJSQVlfU0laRShlZGlkX2Nl YV9tb2Rlcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKaW5kZXggZjI0OTNiOS4uOWMzNTQyYyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fbW9kZXMuYwpAQCAtMTU3NiwzICsxNTc2LDMwOSBAQCBpbnQgZHJtX21vZGVfY29udmVydF91 bW9kZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqb3V0LAogb3V0OgogCXJldHVybiByZXQ7CiB9 CisKKy8qKgorICogZHJtX21vZGVfaXNfNDIwX29ubHkgLSBpZiBhIGdpdmVuIHZpZGVvbW9kZSBj YW4gYmUgb25seSBzdXBwb3J0ZWQgaW4gWUNCQ1I0MjAKKyAqIG91dHB1dCBmb3JtYXQKKyAqCisg KiBAY29ubmVjdG9yOiBkcm0gY29ubmVjdG9yIHVuZGVyIGFjdGlvbi4KKyAqIEBtb2RlOiB2aWRl byBtb2RlIHRvIGJlIHRlc3RlZC4KKyAqCisgKiBSZXR1cm5zOgorICogdHJ1ZSBpZiB0aGUgbW9k ZSBjYW4gc3VwcG9ydCBZQ0JDUjQyMCBvdXRwdXQKKyAqIGZhbHNlIGlmIG5vdC4KKyAqLworc3Rh dGljIGJvb2wgZHJtX21vZGVfaXNfNDIwX29ubHkoc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRp c3BsYXksCisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1OCB2aWMgPSBk cm1fbWF0Y2hfY2VhX21vZGUobW9kZSk7CisKKwkvKgorCSAqIFJlcXVpcmVtZW50cyBvZiBhIDQy MF9vbmx5IG1vZGU6CisJICogbXVzdCBiZSBhIHZhbGlkIGNlYSBtb2RlCisJICogZW50cnkgaW4g NDIwX29ubHkgYml0bWFwCisJICovCisJaWYgKCFkcm1fdmFsaWRfY2VhX3ZpYyh2aWMpKQorCQly ZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdGVzdF9iaXQodmljLCBkaXNwbGF5LT5oZG1pLnljYmNy NDIwX3ZkYl9tb2Rlcyk7Cit9CisKKy8qKgorICogZHJtX21vZGVfaXNfNDIwX2Fsc28gLSBpZiBh IGdpdmVuIHZpZGVvbW9kZSBjYW4gYmUgc3VwcG9ydGVkIGluIFlDQkNSNDIwCisgKiBvdXRwdXQg Zm9ybWF0IGFsc28gKGFsb25nIHdpdGggUkdCL1lDQkNSNDQ0LzQyMikKKyAqCisgKiBAZGlzcGxh eTogZGlzcGxheSB1bmRlciBhY3Rpb24uCisgKiBAbW9kZTogdmlkZW8gbW9kZSB0byBiZSB0ZXN0 ZWQuCisgKgorICogUmV0dXJuczoKKyAqIHRydWUgaWYgdGhlIG1vZGUgY2FuIHN1cHBvcnQgWUNC Q1I0MjAgb3V0cHV0CisgKiBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBib29sIGRybV9tb2Rl X2lzXzQyMF9hbHNvKHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5LAorCQkJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdTggdmljID0gZHJtX21hdGNoX2NlYV9tb2Rl KG1vZGUpOworCisJLyoKKwkgKiBSZXF1aXJlbWVudHMgb2YgYSA0MjBfYWxzbyBtb2RlOgorCSAq IG11c3QgYmUgYSB2YWxpZCBjZWEgbW9kZQorCSAqIGVudHJ5IGluIDQyMF9hbHNvIGJpdG1hcAor CSAqLworCWlmICghZHJtX3ZhbGlkX2NlYV92aWModmljKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ cmV0dXJuIHRlc3RfYml0KHZpYywgZGlzcGxheS0+aGRtaS55Y2JjcjQyMF92Y2JfbW9kZXMpOwor fQorCisKK3N0YXRpYyBib29sIGRybV9tb2RlX2lzXzQyMChzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5m byAqZGlzcGxheSwKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXJldHVy biBkcm1fbW9kZV9pc180MjBfb25seShkaXNwbGF5LCBtb2RlKSB8fAorCQkJZHJtX21vZGVfaXNf NDIwX2Fsc28oZGlzcGxheSwgbW9kZSk7Cit9CisKKy8qKgorICogZHJtX2Nhbl9zdXBwb3J0X3Ro aXNfeWNiY3Jfb3V0cHV0IC0gY2FuIGEgZ2l2ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJpbmF0aW9u CisgKiBzdXBwb3J0IGEgcGFydGljdWxhciBZQ0JDUiBvdXRwdXQgdHlwZS4KKyAqCisgKiBAZGlz cGxheTogc2luayBpbmZvcm1hdGlvbi4KKyAqIEBtb2RlOiB2aWRlbyBtb2RlIGZyb20gbW9kZXNl dAorICogQHR5cGU6IGVudW0gaW5kaWNhdGluZyBZQ0JDUiBvdXRwdXQgdHlwZQorICogQHNvdXJj ZV9vdXRwdXRzOiBiaXRtYXAgb2Ygc291cmNlIHN1cHBvcnRlZCBIRE1JIG91dHB1dCBmb3JtYXRz LgorICoKKyAqIFJldHVybnM6CisgKiB0cnVlIG9uIHN1Y2Nlc3MuCisgKiBmYWxzZSBvbiBmYWls dXJlLgorICovCitzdGF0aWMgYm9vbCBkcm1fY2FuX3N1cHBvcnRfdGhpc195Y2Jjcl9vdXRwdXQo c3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRpc3BsYXksCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlLAorCQkJCQllbnVtIGRybV9oZG1pX291dHB1dF90eXBlIHR5cGUsCisJCQkJ CXUzMiBzb3VyY2Vfb3V0cHV0cykKK3sKKwkvKiBZQ0JDUjQyMCBvdXRwdXQgc3VwcG9ydCBjYW4g YmUgcGVyIG1vZGUgYmFzaXMgKi8KKwlpZiAodHlwZSA9PSBEUk1fSERNSV9PVVRQVVRfWUNCQ1I0 MjAgJiYKKwkJIWRybV9tb2RlX2lzXzQyMChkaXNwbGF5LCBtb2RlKSkKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0dXJuIGRpc3BsYXktPmNvbG9yX2Zvcm1hdHMgJiBzb3VyY2Vfb3V0cHV0cyAmIHR5 cGU7Cit9CisKKy8qKgorICogZHJtX2Nhbl9zdXBwb3J0X3ljYmNyX291dHB1dCAtIGNhbiBhIGdp dmVuIHNvdXJjZSBhbmQgc2luayBjb21iaW5hdGlvbgorICogc3VwcG9ydCBhbnkgWUNCQ1Igb3V0 cHV0cyA/CisgKgorICogQGRpc3BsYXk6IHNpbmsgaW5mb3JtYXRpb24uCisgKiBAc291cmNlX291 dHB1dHM6IGJpdG1hcCBvZiBzb3VyY2Ugc3VwcG9ydGVkIEhETUkgb3V0cHV0IGZvcm1hdHMuCisg KgorICogUmV0dXJuczoKKyAqIHRydWUgb24gc3VjY2Vzcy4KKyAqIGZhbHNlIG9uIGZhaWx1cmUu CisgKi8KK3N0YXRpYyBib29sIGRybV9jYW5fc3VwcG9ydF95Y2Jjcl9vdXRwdXQoc3RydWN0IGRy bV9kaXNwbGF5X2luZm8gKmRpc3BsYXksCisJCQkJCXUzMiBzb3VyY2Vfb3V0cHV0cykKK3sKKwl1 MzIgc3VwcG9ydGVkX2Zvcm1hdHM7CisKKwlpZiAoIXNvdXJjZV9vdXRwdXRzIHx8ICFkaXNwbGF5 LT5jb2xvcl9mb3JtYXRzKSB7CisJCURSTV9ERUJVR19LTVMoIlNvdXJjZS9TaW5rIGRvZXNuJ3Qg c3VwcG9ydCBhbnkgb3V0cHV0ID9cbiIpOworCQlyZXR1cm4gRFJNX0hETUlfT1VUUFVUX0lOVkFM SUQ7CisJfQorCisJLyogR2V0IHRoZSBjb21tb24gc3VwcG9ydGVkIGZyb21hdHMgYmV0d2VlbiBz b3VyY2UgYW5kIHNpbmsgKi8KKwlzdXBwb3J0ZWRfZm9ybWF0cyA9IGRpc3BsYXktPmNvbG9yX2Zv cm1hdHMgJiBzb3VyY2Vfb3V0cHV0czsKKwlpZiAoIXN1cHBvcnRlZF9mb3JtYXRzIHx8IChzdXBw b3J0ZWRfZm9ybWF0cyA9PQorCQlEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NCkpIHsKKwkJRFJNX0VS Uk9SKCJObyBjb21tb24gWUNCQ1IgZm9ybWF0cyBiZXR3ZWVuIHNvdXJjZSBhbmQgc2lua1xuIik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlEUk1fREVCVUdfS01TKCJTcmMgYW5kIFNpbmsgY29t YmluYXRpb24gY2FuIHN1cHBvcnQgWUNCQ1Igb3V0cHV0XG4iKTsKKwlyZXR1cm4gdHJ1ZTsKK30K KworLyoqCisgKiBkcm1fZ2V0X2hpZ2hlc3RfcXVhbGl0eV95Y2Jjcl9zdXBwb3J0ZWQgLSBnZXQg dGhlIHljYmNyIG91dHB1dCBtb2RlCisgKiB3aXRoIGhpZ2hlc3Qgc3Vic2FtcGxpbmcgcmF0ZQor ICogQGRpc3BsYXk6IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvIGZyb20gY3VycmVudCBjb25uZWN0 b3IKKyAqIEBtb2RlOiB2aWRlbyBtb2RlIGZyb20gbW9kZXNldAorICogQHNvdXJjZV9vdXRwdXRf bWFwOiBiaXRtYXAgb2Ygc3VwcG9ydGVkIEhETUkgb3V0cHV0IG1vZGVzIGZyb20gc291cmNlCisg KgorICogRmluZHMgdGhlIGJlc3QgcG9zc2libGUgeWNiY3Igb3V0cHV0IG1vZGUgKGJhc2VkIG9u IHN1YnNhbXBsaW5nKSwgZm9yIHRoZQorICogZ2l2ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJpbmF0 aW9uLgorICoKKyAqIFJldHVybnM6CisgKiBlbnVtIGNvcnJlc3BvbmRpbmcgdG8gYmVzdCBvdXRw dXQgbW9kZSBvbiBzdWNjZXNzLgorICogRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQgb24gZmFpbHVy ZS4KKyAqLworc3RhdGljIGVudW0gZHJtX2hkbWlfb3V0cHV0X3R5cGUKK2RybV9nZXRfaGlnaGVz dF9xdWFsaXR5X3ljYmNyX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcGxh eSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXUzMiBzb3VyY2Vf b3V0cHV0X21hcCkKK3sKKwllbnVtIGRybV9oZG1pX291dHB1dF90eXBlIG91dHB1dCA9IERSTV9I RE1JX09VVFBVVF9JTlZBTElEOworCXUzMiBzdXBwb3J0ZWRfZm9ybWF0cyA9IHNvdXJjZV9vdXRw dXRfbWFwICYgZGlzcGxheS0+Y29sb3JfZm9ybWF0czsKKworCS8qCisJICogR2V0IHRoZSB5Y2Jj ciBvdXRwdXQgd2l0aCB0aGUgaGlnaGVzdCBwb3NzaWJsZSBzdWJzYW1wbGluZyByYXRlLgorCSAq IFByZWZlcmVuY2Ugc2hvdWxkIGdvIGFzOgorCSAqIHljYmNyIDQ0NAorCSAqIHljYmNyIDQyMgor CSAqIHljYmNyIDQyMAorCSAqLworCWlmIChzdXBwb3J0ZWRfZm9ybWF0cyAmIERSTV9DT0xPUl9G T1JNQVRfWUNSQ0I0NDQpCisJCW91dHB1dCA9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQ7CisJ ZWxzZSBpZiAoc3VwcG9ydGVkX2Zvcm1hdHMgJiBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIyKQor CQlvdXRwdXQgPSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIyOworCWVsc2UgaWYgKHN1cHBvcnRl ZF9mb3JtYXRzICYgRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMCAmJgorCQkJZHJtX21vZGVfaXNf NDIwKGRpc3BsYXksIG1vZGUpKQorCQlvdXRwdXQgPSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIw OworCisJRFJNX0RFQlVHX0tNUygiSGlnaGVzdCBzdWJzYW1wbGVkIFlDQkNSIG1vZGUgc3VwcG9y dGVkIGlzICVzXG4iLAorCQkJZHJtX2dldF9oZG1pX291dHB1dF9uYW1lKHN1cHBvcnRlZF9mb3Jt YXRzKSk7CisJcmV0dXJuIG91dHB1dDsKK30KKworLyoqCisgKiBkcm1fZ2V0X2xvd2VzdF9xdWFs aXR5X3ljYmNyX3N1cHBvcnRlZCAtIGdldCB0aGUgeWNiY3Igb3V0cHV0IG1vZGUKKyAqIHdpdGgg bG93ZXN0IHN1YnNhbXBsaW5nIHJhdGUKKyAqIEBkaXNwbGF5OiBzdHJ1Y3QgZHJtX2Rpc3BsYXlf aW5mbyBmcm9tIGN1cnJlbnQgY29ubmVjdG9yCisgKiBAbW9kZTogdmlkZW8gbW9kZSBmcm9tIG1v ZGVzZXQKKyAqIEBzb3VyY2Vfb3V0cHV0X21hcDogYml0bWFwIG9mIHN1cHBvcnRlZCBIRE1JIG91 dHB1dCBtb2RlcyBmcm9tIHNvdXJjZQorICoKKyAqIEZpbmRzIHRoZSBsb3dlc3QgcG9zc2libGUg eWNiY3Igb3V0cHV0IG1vZGUgKGJhc2VkIG9uIHN1YnNhbXBsaW5nKSwgZm9yIHRoZQorICogZ2l2 ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJpbmF0aW9uLgorICoKKyAqIFJldHVybnM6CisgKiBlbnVt IGNvcnJlc3BvbmRpbmcgdG8gYmVzdCBvdXRwdXQgbW9kZSBvbiBzdWNjZXNzLgorICogRFJNX0hE TUlfT1VUUFVUX0lOVkFMSUQgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGVudW0gZHJtX2hkbWlf b3V0cHV0X3R5cGUKK2RybV9nZXRfbG93ZXN0X3F1YWxpdHlfeWNiY3Jfc3VwcG9ydGVkKHN0cnVj dCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5LAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkJdTMyIHNvdXJjZV9vdXRwdXRfbWFwKQoreworCWVudW0gZHJtX2hkbWlf b3V0cHV0X3R5cGUgb3V0cHV0ID0gRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQ7CisJdTMyIHN1cHBv cnRlZF9mb3JtYXRzID0gc291cmNlX291dHB1dF9tYXAgJiBkaXNwbGF5LT5jb2xvcl9mb3JtYXRz OworCisJLyoKKwkgKiBHZXQgdGhlIHljYmNyIG91dHB1dCB3aXRoIHRoZSBsb3dlc3QgcG9zc2li bGUgc3Vic2FtcGxpbmcgcmF0ZS4KKwkgKiBQcmVmZXJlbmNlIHNob3VsZCBnbyBhczoKKwkgKiB5 Y2JjciA0MjAKKwkgKiB5Y2JjciA0MjIKKwkgKiB5Y2JjciA0NDQKKwkgKi8KKwlpZiAoc3VwcG9y dGVkX2Zvcm1hdHMgJiBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwICYmCisJCWRybV9tb2RlX2lz XzQyMChkaXNwbGF5LCBtb2RlKSkKKwkJb3V0cHV0ID0gRFJNX0hETUlfT1VUUFVUX1lDQkNSNDIw OworCWVsc2UgaWYgKGRpc3BsYXktPmNvbG9yX2Zvcm1hdHMgJiBEUk1fQ09MT1JfRk9STUFUX1lD UkNCNDIyKQorCQlvdXRwdXQgPSBEUk1fSERNSV9PVVRQVVRfWUNCQ1I0MjI7CisJZWxzZSBpZiAo ZGlzcGxheS0+Y29sb3JfZm9ybWF0cyAmIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQpCisJCW91 dHB1dCA9IERSTV9IRE1JX09VVFBVVF9ZQ0JDUjQyMDsKKworCURSTV9ERUJVR19LTVMoIkxvd2Vz dCBzdWJzYW1wbGVkIFlDQkNSIG1vZGUgc3VwcG9ydGVkIGlzICVzXG4iLAorCQkJZHJtX2dldF9o ZG1pX291dHB1dF9uYW1lKHN1cHBvcnRlZF9mb3JtYXRzKSk7CisJcmV0dXJuIG91dHB1dDsKK30K KworLyoqCisgKiBkcm1fZmluZF9oZG1pX291dHB1dF90eXBlIC0gZ2V0IHRoZSBtb3N0IHN1aXRh YmxlIG91dHB1dAorICogRmluZCB0aGUgYmVzdCBzdWl0YWJsZSBIRE1JIG91dHB1dCBjb25zaWRl cmluZyBzb3VyY2UgY2FwYWJpbGl0eSwKKyAqIHNpbmsgY2FwYWJpbGl0eSBhbmQgdXNlcidzIGNo b2ljZSAoZXhwcmVzc2VkIGluIGZvcm0gb2YgZHJtIHByb3BlcnR5KQorICoKKyAqIEBjb25uZWN0 b3I6IGRybSBjb25uZWN0b3IgaW4gYWN0aW9uCisgKiBAbW9kZTogdmlkZW8gbW9kZSB1bmRlciBt b2Rlc2V0CisgKiBAdHlwZTogdXNlcidzIGNob2ljZSBmb3IgcHJlZmVycmVkIG1vZGUsIHNldCB2 aWEgZHJtIHByb3BlcnR5CisgKgkiaGRtaV9vdXRwdXRfZm9ybWF0IgorICogQHNyY19vdXRwdXRf Y2FwOiBiaXRtYXAgb2Ygc291cmNlJ3Mgc3VwcG9ydGVkIG91dHB1dHMgZm9ybWF0cworICoJc3Jj X291dHB1dF9jYXAgPSAoMSA8PCBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NCkgbWVhbnMgc291cmNl CisgKglzdXBwb3J0cyBSR0I0NDQKKyAqCXNyY19vdXRwdXRfY2FwID0gKDEgPDwgRFJNX0NPTE9S X0ZPUk1BVF9ZQ1JDQjQ0NCkgbWVhbnMgc291cmNlCisgKglzdXBwb3J0cyBZVVY0NDQsIGFuZCBz byBvbi4KKyAqCisgKiBSZXR1cm5zOgorICogZW51bSBjb3JyZXNwb25kaW5nIHRvIGJlc3Qgc3Vp dGFibGUgb3V0cHV0IHR5cGUgb24gc3VjY2Vzcy4KKyAqIERSTV9IRE1JX09VVFBVVF9JTlZBTElE IG9uIGZhaWx1cmUuCisgKi8KK2VudW0gZHJtX2hkbWlfb3V0cHV0X3R5cGUKK2RybV9maW5kX2hk bWlfb3V0cHV0X3R5cGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQllbnVtIGRybV9oZG1pX291dHB1dF90eXBl IHR5cGUsCisJCQkJdTMyIHNyY19vdXRwdXRfY2FwKQoreworCWJvb2wgcmV0OworCXN0cnVjdCBk cm1fZGlzcGxheV9pbmZvICppbmZvID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOworCWJvb2wg bW9kZV9pc180MjBfb25seSA9IGRybV9tb2RlX2lzXzQyMF9vbmx5KGluZm8sIG1vZGUpOworCisJ LyoKKwkgKiBJZiB0aGUgcHJlZmVycmVkIG91dHB1dCBpcyBub3Qgc2V0IHRvIFlDQkNSIGJ5IHVz ZXIsIGFuZCB0aGUgbW9kZQorCSAqIGRvZXNuJ3QgZm9yY2UgdXMgdG8gZHJpdmUgWUNCQ1I0MjAg b3V0cHV0LCByZXNwZWN0IHRoZSB1c2VyCisJICogcHJlZmVyZW5jZSBmb3IgdGhlIG91dHB1dCB0 eXBlLiBCdXQgaWYgdGhlIG1vZGUgaXMgNDIwX29ubHksIHdlIHdpbGwKKwkgKiBiZSBmb3JjZSB0 byBkcml2ZSBZQ0JDUjQyMCBvdXRwdXQuCisJICovCisJaWYgKCFtb2RlX2lzXzQyMF9vbmx5KSB7 CisJCWlmICh0eXBlID09IERSTV9IRE1JX09VVFBVVF9ERUZBVUxUX1JHQikKKwkJCXJldHVybiBE Uk1fSERNSV9PVVRQVVRfREVGQVVMVF9SR0I7CisJfSBlbHNlIHsKKwkJdHlwZSA9IERSTV9IRE1J X09VVFBVVF9ZQ0JDUjQyMDsKKwkJRFJNX0RFQlVHX0tNUygiR290IGEgNDIwIG9ubHkgbW9kZSgl cylcbiIsIG1vZGUtPm5hbWUpOworCX0KKworCS8qIElmICB0aGlzIHNyYyArIHNpbmsgY29tYmlu YXRpb24gY2FuIHN1cHBvcnQgYW55IFlDQkNSIG91dHB1dCAqLworCXJldCA9IGRybV9jYW5fc3Vw cG9ydF95Y2Jjcl9vdXRwdXQoaW5mbywgc3JjX291dHB1dF9jYXApOworCWlmICghcmV0KSB7CisJ CURSTV9FUlJPUigiTm8gc3VwcG9ydGVkIFlDQkNSIG91dHB1dFxuIik7CisJCXJldHVybiBEUk1f SERNSV9PVVRQVVRfSU5WQUxJRDsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIERSTV9I RE1JX09VVFBVVF9ZQ0JDUl9IUToKKwkJdHlwZSA9IGRybV9nZXRfaGlnaGVzdF9xdWFsaXR5X3lj YmNyX3N1cHBvcnRlZChpbmZvLCBtb2RlLAorCQkJCQkJCQlzcmNfb3V0cHV0X2NhcCk7CisJCWJy ZWFrOworCisJY2FzZSBEUk1fSERNSV9PVVRQVVRfWUNCQ1JfTFE6CisJCXR5cGUgPSBkcm1fZ2V0 X2xvd2VzdF9xdWFsaXR5X3ljYmNyX3N1cHBvcnRlZChpbmZvLCBtb2RlLAorCQkJCQkJCQlzcmNf b3V0cHV0X2NhcCk7CisJCWJyZWFrOworCisJY2FzZSBEUk1fSERNSV9PVVRQVVRfWUNCQ1I0MjA6 CisJCXJldCA9IGRybV9tb2RlX2lzXzQyMChpbmZvLCBtb2RlKTsKKwkJaWYgKCFyZXQpIHsKKwkJ CURSTV9FUlJPUigiTW9kZSAlcyBkb2Vzbid0IHN1cHBvcnQgNDIwIG91dHB1dFxuIiwKKwkJCQkg ICBtb2RlLT5uYW1lKTsKKwkJCXR5cGUgPSBEUk1fSERNSV9PVVRQVVRfSU5WQUxJRDsKKwkJfQor CisJCWJyZWFrOworCisJLyogQmVsb3cgY2FzZXMgYXJlIGp1c3QgdG8gc2F0aXNmeSBjaGVja3Bh dGNoJ3MgQUkgKi8KKwljYXNlIERSTV9IRE1JX09VVFBVVF9ERUZBVUxUX1JHQjoKKwljYXNlIERS TV9IRE1JX09VVFBVVF9ZQ0JDUjQ0NDoKKwljYXNlIERSTV9IRE1JX09VVFBVVF9ZQ0JDUjQyMjoK KwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl0eXBlID0gRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQ7 CisJfQorCisJaWYgKHR5cGUgPT0gRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQpIHsKKwkJRFJNX0VS Uk9SKCJDYW4ndCBzdXBwb3J0IG1vZGUgJXMgaW4gWUNCQ1IgZm9ybWF0XG4iLAorCQkJCW1vZGUt Pm5hbWUpOworCQlyZXR1cm4gRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQ7CisJfQorCisJLyogVGVz dCBpZiB0aGlzIHNyYy9zaW5rL21vZGUgY29tYmluYXRpb24gY2FuIHN1cHBvcnQgc2VsZWN0ZWQg b3V0cHV0ICovCisJcmV0ID0gZHJtX2Nhbl9zdXBwb3J0X3RoaXNfeWNiY3Jfb3V0cHV0KGluZm8s IG1vZGUsIHR5cGUsCisJCQkJCQlzcmNfb3V0cHV0X2NhcCk7CisJaWYgKCFyZXQpIHsKKwkJRFJN X0VSUk9SKCJPdXRwdXQgJXMgY2FuJ3QgYmUgc3VwcG9ydGVkXG4iLAorCQkJCQlkcm1fZ2V0X2hk bWlfb3V0cHV0X25hbWUodHlwZSkpOworCQlyZXR1cm4gRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQ7 CisJfQorCisJRFJNX0RFQlVHX0tNUygiQmVzdCBzdXBwb3J0ZWQgb3V0cHV0IGlzOiAlc1xuIiwK KwkJCWRybV9nZXRfaGRtaV9vdXRwdXRfbmFtZSh0eXBlKSk7CisJcmV0dXJuIHR5cGU7Cit9CmRp ZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZWRpZC5oIGIvaW5jbHVkZS9kcm0vZHJtX2VkaWQu aAppbmRleCAzZWE4MzNmLi40ODNmNjY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZWRp ZC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9lZGlkLmgKQEAgLTQ2OCw2ICs0NjgsNyBAQCBpbnQg ZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVj dCBlZGlkICplZGlkKTsKIAogdTggZHJtX21hdGNoX2NlYV9tb2RlKGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICp0b19tYXRjaCk7CiBlbnVtIGhkbWlfcGljdHVyZV9hc3BlY3QgZHJtX2dl dF9jZWFfYXNwZWN0X3JhdGlvKGNvbnN0IHU4IHZpZGVvX2NvZGUpOworYm9vbCBkcm1fdmFsaWRf Y2VhX3ZpYyh1OCB2aWMpOwogYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRp ZCAqZWRpZCk7CiBib29sIGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhzdHJ1Y3QgZWRpZCAqZWRp ZCk7CiBib29sIGRybV9yZ2JfcXVhbnRfcmFuZ2Vfc2VsZWN0YWJsZShzdHJ1Y3QgZWRpZCAqZWRp ZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZXMuaCBiL2luY2x1ZGUvZHJtL2Ry bV9tb2Rlcy5oCmluZGV4IDk0YWM3NzEuLjNjMjM3ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJt L2RybV9tb2Rlcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2Rlcy5oCkBAIC00NTEsNiArNDUx LDExIEBAIGludCBkcm1fbW9kZV9jb252ZXJ0X3Vtb2RlKHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICpvdXQsCiB2b2lkIGRybV9tb2RlX3Byb2JlZF9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3Rvciwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogdm9pZCBkcm1fbW9kZV9k ZWJ1Z19wcmludG1vZGVsaW5lKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsK IAorZW51bSBkcm1faGRtaV9vdXRwdXRfdHlwZQorZHJtX2ZpbmRfaGRtaV9vdXRwdXRfdHlwZShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKKwkJCSAgZW51bSBkcm1faGRtaV9vdXRwdXRfdHlwZSB0eXBlLAorCQkJICB1 MzIgc3JjX291dHB1dF9jYXApOwogc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9k ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICAgIGludCBoZGlzcGxheSwgaW50IHZk aXNwbGF5LCBpbnQgdnJlZnJlc2gsCiAJCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVy bGFjZWQsCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==