From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shashank Sharma Subject: [PATCH v5 11/17] drm: add helper functions for YCBCR output handling Date: Tue, 4 Jul 2017 19:41:58 +0530 Message-ID: <1499177524-26292-12-git-send-email-shashank.sharma@intel.com> References: <1499177524-26292-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: <1499177524-26292-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 Cc: Jose Abreu , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciBZQ0JDUiBIRE1JIG91 dHB1dApoYW5kbGluZy4gVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSBsaWtl OgotIGNoZWNrIGlmIGEgZ2l2ZW4gdmlkZW8gbW9kZSBpcyBZQ0JDUiA0MjAgb25seSBtb2RlLgot IGNoZWNrIGlmIGEgZ2l2ZW4gdmlkZW8gbW9kZSBpcyBZQ0JDUiA0MjAgbW9kZS4KLSBnZXQgdGhl IGhpZ2hlc3Qgc3Vic2FtbGVkIHljYmNyIG91dHB1dC4KLSBnZXQgdGhlIGxvd2VzdCBzdWJzYW1s ZWQgeWNiY3Igb3V0cHV0LgotIGNoZWNrIGlmIGEgZ2l2ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJp bmF0aW9uIGNhbiBzdXBwb3J0IGFueQogIFlDQkNSIEhETUkgb3V0cHV0LgotIGNoZWNrIGlmIGEg Z2l2ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJpbmF0aW9uIGNhbiBzdXBwb3J0IGEgcGFydGljdWxh cgogIFlDQkNSIEhETUkgb3V0cHV0LgoKQ3VycmVudGx5IGFsbCB0aGVzZSBoZWxwZXJzIGFyZSBr ZXB0IHN0YXRpYywgYW5kIG9ubHkgb25lIHdyYXBwZXIgZnVuY3Rpb24KaXMgZXhwb3NlZCB0byBj YWxsZXJzLCB3aGljaCBpcyAiZHJtX2ZpbmRfaGRtaV9vdXRwdXRfdHlwZSIuIFRoaXMgZnVuY3Rp b24KdGFrZXMgaW5wdXRzIGFzIGN1cnJlbnQgbW9kZSwgdXNlciBwcmVmZXJlbmNlIGFuZCBzcmMg KyBzaW5rIGNhcGFiaWxpdGllcywKYW5kIHByb3ZpZGVzIHRoZSBtb3N0IHN1aXRhYmxlIEhETUkg b3V0cHV0IGZvcm1hdCB0byBtYXRjaCBhbGwgb2YgdGhlc2UKaW5wdXRzLgoKVGhpcyB3cmFwcGVy IGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBpbiBuZXh0IGZldyBwYXRjaGVzIGluIHRoaXMKc2VyaWVz IGZyb20gSTkxNSBkcml2ZXIuCgpWMjogQWRkZWQgWUNCQ1IgZnVuY3Rpb25zIGFzIGhlbHBlcnMg aW4gRFJNIGxheWVyLCBpbnN0ZWFkIG9mCiAgICBrZWVwaW5nIGl0IGluIEk5MTUgbGF5ZXIuClYz OiBBZGRlZCBoYW5kbGluZyBmb3IgWUNCQ1ItNDIwIG9ubHkgbW9kZXMgdG9vLgpWNDogRVhQT1JU X1NZTUJPTChkcm1fZmluZF9oZG1pX291dHB1dF90eXBlKQpWNTogQWRkcmVzc2VkIHJldmlldyBj b21tZW50cyBmcm9tIERhbnZldDoKICAgIC0gJXMvZHJtX2ZpbmRfaGRtaV9vdXRwdXRfdHlwZS9k cm1fZGlzcGxheV9pbmZvX2hkbWlfb3V0cHV0X3R5cGUKICAgIC0gJXMvZHJtX2Nhbl9zdXBwb3J0 X3ljYmNyX291dHB1dC9kcm1fZGlzcGxheV9zdXBwb3J0c195Y2Jjcl9vdXRwdXQKICAgIC0gJXMv ZHJtX2Nhbl9zdXBwb3J0X3RoaXNfeWNiY3Jfb3V0cHV0LwoJCWRybV9kaXNwbGF5X3N1cHBvcnRz X3RoaXNfeWNiY3Jfb3V0cHV0CiAgICAtIHBhc3MgZHJtX2Rpc3BsYXlfaW5mbyBpbnN0ZWFkIG9m IGRybV9jb25uZWN0b3IgZm9yIGNvbnNpc3RlbmN5CiAgICAtIEZvciBkcm1fZ2V0X2hpZ2hlc3Rf cXVhbGl0eV95Y2Jjcl9zdXBwb3J0ZWQgZG9jLCBtb3ZlIHRoZSB2YXJpYWJsZQogICAgICBkZXNj cmlwdGlvbiBhYm92ZSwgYW5kIHRoZW4gdGhlIGZ1bmN0aW9uIGRlc2NyaXB0aW9uLgoKQ2M6IFZp bGxlIFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpDYzogSm9zZSBBYnJl dSA8Sm9zZS5BYnJldUBzeW5vcHN5cy5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogU2hhc2hhbmsgU2hhcm1hIDxzaGFzaGFuay5z aGFybWFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYyB8IDMwNyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0v ZHJtX21vZGVzLmggICAgIHwgICA1ICsKIDIgZmlsZXMgY2hhbmdlZCwgMzEyIGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX21vZGVzLmMKaW5kZXggM2I1M2M4ZTMuLjBjNDJiYmIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVz LmMKQEAgLTE2MDQsMyArMTYwNCwzMTAgQEAgaW50IGRybV9tb2RlX2NvbnZlcnRfdW1vZGUoc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm91dCwKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorCisvKioK KyAqIGRybV9tb2RlX2lzXzQyMF9vbmx5IC0gaWYgYSBnaXZlbiB2aWRlb21vZGUgY2FuIGJlIG9u bHkgc3VwcG9ydGVkIGluIFlDQkNSNDIwCisgKiBvdXRwdXQgZm9ybWF0CisgKgorICogQGNvbm5l Y3RvcjogZHJtIGNvbm5lY3RvciB1bmRlciBhY3Rpb24uCisgKiBAbW9kZTogdmlkZW8gbW9kZSB0 byBiZSB0ZXN0ZWQuCisgKgorICogUmV0dXJuczoKKyAqIHRydWUgaWYgdGhlIG1vZGUgY2FuIHN1 cHBvcnQgWUNCQ1I0MjAgb3V0cHV0CisgKiBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBib29s IGRybV9tb2RlX2lzXzQyMF9vbmx5KHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5LAor CQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdTggdmljID0gZHJtX21hdGNo X2NlYV9tb2RlKG1vZGUpOworCisJLyoKKwkgKiBSZXF1aXJlbWVudHMgb2YgYSA0MjBfb25seSBt b2RlOgorCSAqIG11c3QgYmUgYSB2YWxpZCBjZWEgbW9kZQorCSAqIGVudHJ5IGluIDQyMF9vbmx5 IGJpdG1hcAorCSAqLworCWlmICghZHJtX3ZhbGlkX2NlYV92aWModmljKSkKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHRlc3RfYml0KHZpYywgZGlzcGxheS0+aGRtaS55NDIwX3ZkYl9tb2Rl cyk7Cit9CisKKy8qKgorICogZHJtX21vZGVfaXNfNDIwX2Fsc28gLSBpZiBhIGdpdmVuIHZpZGVv bW9kZSBjYW4gYmUgc3VwcG9ydGVkIGluIFlDQkNSNDIwCisgKiBvdXRwdXQgZm9ybWF0IGFsc28g KGFsb25nIHdpdGggUkdCL1lDQkNSNDQ0LzQyMikKKyAqCisgKiBAZGlzcGxheTogZGlzcGxheSB1 bmRlciBhY3Rpb24uCisgKiBAbW9kZTogdmlkZW8gbW9kZSB0byBiZSB0ZXN0ZWQuCisgKgorICog UmV0dXJuczoKKyAqIHRydWUgaWYgdGhlIG1vZGUgY2FuIHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0 CisgKiBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBib29sIGRybV9tb2RlX2lzXzQyMF9hbHNv KHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5LAorCQkJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUpCit7CisJdTggdmljID0gZHJtX21hdGNoX2NlYV9tb2RlKG1vZGUpOworCisJ LyoKKwkgKiBSZXF1aXJlbWVudHMgb2YgYSA0MjBfYWxzbyBtb2RlOgorCSAqIG11c3QgYmUgYSB2 YWxpZCBjZWEgbW9kZQorCSAqIGVudHJ5IGluIDQyMF9hbHNvIGJpdG1hcAorCSAqLworCWlmICgh ZHJtX3ZhbGlkX2NlYV92aWModmljKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRlc3Rf Yml0KHZpYywgZGlzcGxheS0+aGRtaS55NDIwX2NtZGJfbW9kZXMpOworfQorCisKK3N0YXRpYyBi b29sIGRybV9tb2RlX2lzXzQyMChzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcGxheSwKKwkJ CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXJldHVybiBkcm1fbW9kZV9pc180 MjBfb25seShkaXNwbGF5LCBtb2RlKSB8fAorCQkJZHJtX21vZGVfaXNfNDIwX2Fsc28oZGlzcGxh eSwgbW9kZSk7Cit9CisKKy8qKgorICogZHJtX2Rpc3BsYXlfc3VwcG9ydHNfdGhpc195Y2Jjcl9v dXRwdXQgLSBjYW4gYSBnaXZlbiBzb3VyY2UgYW5kIHNpbmsKKyAqIGNvbWJpbmF0aW9uIHN1cHBv cnQgYSBwYXJ0aWN1bGFyIFlDQkNSIG91dHB1dCB0eXBlLgorICoKKyAqIEBkaXNwbGF5OiBzaW5r IGluZm9ybWF0aW9uLgorICogQG1vZGU6IHZpZGVvIG1vZGUgZnJvbSBtb2Rlc2V0CisgKiBAdHlw ZTogZW51bSBpbmRpY2F0aW5nIFlDQkNSIG91dHB1dCB0eXBlCisgKiBAc291cmNlX291dHB1dHM6 IGJpdG1hcCBvZiBzb3VyY2Ugc3VwcG9ydGVkIEhETUkgb3V0cHV0IGZvcm1hdHMuCisgKgorICog UmV0dXJuczoKKyAqIHRydWUgb24gc3VjY2Vzcy4KKyAqIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8K K3N0YXRpYyBib29sCitkcm1fZGlzcGxheV9zdXBwb3J0c190aGlzX3ljYmNyX291dHB1dChzdHJ1 Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcGxheSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCisJCQkJCWVudW0gZHJtX2hkbWlfb3V0cHV0X3R5cGUgdHlwZSwKKwkJCQkJdTMy IHNvdXJjZV9vdXRwdXRzKQoreworCS8qIFlDQkNSNDIwIG91dHB1dCBzdXBwb3J0IGNhbiBiZSBw ZXIgbW9kZSBiYXNpcyAqLworCWlmICh0eXBlID09IERSTV9IRE1JX09VVFBVVF9ZQ0JDUjQyMCAm JgorCQkhZHJtX21vZGVfaXNfNDIwKGRpc3BsYXksIG1vZGUpKQorCQlyZXR1cm4gZmFsc2U7CisK KwlyZXR1cm4gZGlzcGxheS0+Y29sb3JfZm9ybWF0cyAmIHNvdXJjZV9vdXRwdXRzICYgdHlwZTsK K30KKworLyoqCisgKiBkcm1fZGlzcGxheV9zdXBwb3J0c195Y2Jjcl9vdXRwdXQgLSBjYW4gYSBn aXZlbiBzb3VyY2UgYW5kIHNpbmsgY29tYmluYXRpb24KKyAqIHN1cHBvcnQgYW55IFlDQkNSIG91 dHB1dHMgPworICoKKyAqIEBkaXNwbGF5OiBzaW5rIGluZm9ybWF0aW9uLgorICogQHNvdXJjZV9v dXRwdXRzOiBiaXRtYXAgb2Ygc291cmNlIHN1cHBvcnRlZCBIRE1JIG91dHB1dCBmb3JtYXRzLgor ICoKKyAqIFJldHVybnM6CisgKiB0cnVlIG9uIHN1Y2Nlc3MuCisgKiBmYWxzZSBvbiBmYWlsdXJl LgorICovCitzdGF0aWMgYm9vbCBkcm1fZGlzcGxheV9zdXBwb3J0c195Y2Jjcl9vdXRwdXQoc3Ry dWN0IGRybV9kaXNwbGF5X2luZm8gKmRpc3BsYXksCisJCQkJCXUzMiBzb3VyY2Vfb3V0cHV0cykK K3sKKwl1MzIgc3VwcG9ydGVkX2Zvcm1hdHM7CisKKwlpZiAoIXNvdXJjZV9vdXRwdXRzIHx8ICFk aXNwbGF5LT5jb2xvcl9mb3JtYXRzKSB7CisJCURSTV9ERUJVR19LTVMoIlNvdXJjZS9TaW5rIGRv ZXNuJ3Qgc3VwcG9ydCBhbnkgb3V0cHV0ID9cbiIpOworCQlyZXR1cm4gRFJNX0hETUlfT1VUUFVU X0lOVkFMSUQ7CisJfQorCisJLyogR2V0IHRoZSBjb21tb24gc3VwcG9ydGVkIGZyb21hdHMgYmV0 d2VlbiBzb3VyY2UgYW5kIHNpbmsgKi8KKwlzdXBwb3J0ZWRfZm9ybWF0cyA9IGRpc3BsYXktPmNv bG9yX2Zvcm1hdHMgJiBzb3VyY2Vfb3V0cHV0czsKKwlpZiAoIXN1cHBvcnRlZF9mb3JtYXRzIHx8 IChzdXBwb3J0ZWRfZm9ybWF0cyA9PQorCQlEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NCkpIHsKKwkJ RFJNX0VSUk9SKCJObyBjb21tb24gWUNCQ1IgZm9ybWF0cyBiZXR3ZWVuIHNvdXJjZSBhbmQgc2lu a1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlEUk1fREVCVUdfS01TKCJTcmMgYW5kIFNp bmsgY29tYmluYXRpb24gY2FuIHN1cHBvcnQgWUNCQ1Igb3V0cHV0XG4iKTsKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoqCisgKiBkcm1fZ2V0X2hpZ2hlc3RfcXVhbGl0eV95Y2Jjcl9zdXBwb3J0ZWQg LSBnZXQgdGhlIHljYmNyIG91dHB1dCBtb2RlCisgKiB3aXRoIGhpZ2hlc3Qgc3Vic2FtcGxpbmcg cmF0ZQorICogQGRpc3BsYXk6IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvIGZyb20gY3VycmVudCBj b25uZWN0b3IKKyAqIEBtb2RlOiB2aWRlbyBtb2RlIGZyb20gbW9kZXNldAorICogQHNvdXJjZV9v dXRwdXRfbWFwOiBiaXRtYXAgb2Ygc3VwcG9ydGVkIEhETUkgb3V0cHV0IG1vZGVzIGZyb20gc291 cmNlCisgKgorICogRmluZHMgdGhlIGJlc3QgcG9zc2libGUgeWNiY3Igb3V0cHV0IG1vZGUgKGJh c2VkIG9uIHN1YnNhbXBsaW5nKSwgZm9yIHRoZQorICogZ2l2ZW4gc291cmNlIGFuZCBzaW5rIGNv bWJpbmF0aW9uLgorICoKKyAqIFJldHVybnM6CisgKiBlbnVtIGNvcnJlc3BvbmRpbmcgdG8gYmVz dCBvdXRwdXQgbW9kZSBvbiBzdWNjZXNzLgorICogRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQgb24g ZmFpbHVyZS4KKyAqLworc3RhdGljIGVudW0gZHJtX2hkbWlfb3V0cHV0X3R5cGUKK2RybV9nZXRf aGlnaGVzdF9xdWFsaXR5X3ljYmNyX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAq ZGlzcGxheSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXUzMiBz b3VyY2Vfb3V0cHV0X21hcCkKK3sKKwllbnVtIGRybV9oZG1pX291dHB1dF90eXBlIG91dHB1dCA9 IERSTV9IRE1JX09VVFBVVF9JTlZBTElEOworCXUzMiBzdXBwb3J0ZWRfZm9ybWF0cyA9IHNvdXJj ZV9vdXRwdXRfbWFwICYgZGlzcGxheS0+Y29sb3JfZm9ybWF0czsKKworCS8qCisJICogR2V0IHRo ZSB5Y2JjciBvdXRwdXQgd2l0aCB0aGUgaGlnaGVzdCBwb3NzaWJsZSBzdWJzYW1wbGluZyByYXRl LgorCSAqIFByZWZlcmVuY2Ugc2hvdWxkIGdvIGFzOgorCSAqIHljYmNyIDQ0NAorCSAqIHljYmNy IDQyMgorCSAqIHljYmNyIDQyMAorCSAqLworCWlmIChzdXBwb3J0ZWRfZm9ybWF0cyAmIERSTV9D T0xPUl9GT1JNQVRfWUNSQ0I0NDQpCisJCW91dHB1dCA9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0 NDQ7CisJZWxzZSBpZiAoc3VwcG9ydGVkX2Zvcm1hdHMgJiBEUk1fQ09MT1JfRk9STUFUX1lDUkNC NDIyKQorCQlvdXRwdXQgPSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIyOworCWVsc2UgaWYgKHN1 cHBvcnRlZF9mb3JtYXRzICYgRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMCAmJgorCQkJZHJtX21v ZGVfaXNfNDIwKGRpc3BsYXksIG1vZGUpKQorCQlvdXRwdXQgPSBEUk1fQ09MT1JfRk9STUFUX1lD UkNCNDIwOworCisJRFJNX0RFQlVHX0tNUygiSGlnaGVzdCBzdWJzYW1wbGVkIFlDQkNSIG1vZGUg c3VwcG9ydGVkIGlzICVzXG4iLAorCQkJZHJtX2dldF9oZG1pX291dHB1dF9uYW1lKHN1cHBvcnRl ZF9mb3JtYXRzKSk7CisJcmV0dXJuIG91dHB1dDsKK30KKworLyoqCisgKiBkcm1fZ2V0X2xvd2Vz dF9xdWFsaXR5X3ljYmNyX3N1cHBvcnRlZCAtIGdldCB0aGUgeWNiY3Igb3V0cHV0IG1vZGUKKyAq IHdpdGggbG93ZXN0IHN1YnNhbXBsaW5nIHJhdGUKKyAqIEBkaXNwbGF5OiBzdHJ1Y3QgZHJtX2Rp c3BsYXlfaW5mbyBmcm9tIGN1cnJlbnQgY29ubmVjdG9yCisgKiBAbW9kZTogdmlkZW8gbW9kZSBm cm9tIG1vZGVzZXQKKyAqIEBzb3VyY2Vfb3V0cHV0X21hcDogYml0bWFwIG9mIHN1cHBvcnRlZCBI RE1JIG91dHB1dCBtb2RlcyBmcm9tIHNvdXJjZQorICoKKyAqIEZpbmRzIHRoZSBsb3dlc3QgcG9z c2libGUgeWNiY3Igb3V0cHV0IG1vZGUgKGJhc2VkIG9uIHN1YnNhbXBsaW5nKSwgZm9yIHRoZQor ICogZ2l2ZW4gc291cmNlIGFuZCBzaW5rIGNvbWJpbmF0aW9uLgorICoKKyAqIFJldHVybnM6Cisg KiBlbnVtIGNvcnJlc3BvbmRpbmcgdG8gYmVzdCBvdXRwdXQgbW9kZSBvbiBzdWNjZXNzLgorICog RFJNX0hETUlfT1VUUFVUX0lOVkFMSUQgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGVudW0gZHJt X2hkbWlfb3V0cHV0X3R5cGUKK2RybV9nZXRfbG93ZXN0X3F1YWxpdHlfeWNiY3Jfc3VwcG9ydGVk KHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5LAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKKwkJCQkJdTMyIHNvdXJjZV9vdXRwdXRfbWFwKQoreworCWVudW0gZHJt X2hkbWlfb3V0cHV0X3R5cGUgb3V0cHV0ID0gRFJNX0hETUlfT1VUUFVUX0lOVkFMSUQ7CisJdTMy IHN1cHBvcnRlZF9mb3JtYXRzID0gc291cmNlX291dHB1dF9tYXAgJiBkaXNwbGF5LT5jb2xvcl9m b3JtYXRzOworCisJLyoKKwkgKiBHZXQgdGhlIHljYmNyIG91dHB1dCB3aXRoIHRoZSBsb3dlc3Qg cG9zc2libGUgc3Vic2FtcGxpbmcgcmF0ZS4KKwkgKiBQcmVmZXJlbmNlIHNob3VsZCBnbyBhczoK KwkgKiB5Y2JjciA0MjAKKwkgKiB5Y2JjciA0MjIKKwkgKiB5Y2JjciA0NDQKKwkgKi8KKwlpZiAo c3VwcG9ydGVkX2Zvcm1hdHMgJiBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwICYmCisJCWRybV9t b2RlX2lzXzQyMChkaXNwbGF5LCBtb2RlKSkKKwkJb3V0cHV0ID0gRFJNX0hETUlfT1VUUFVUX1lD QkNSNDIwOworCWVsc2UgaWYgKGRpc3BsYXktPmNvbG9yX2Zvcm1hdHMgJiBEUk1fQ09MT1JfRk9S TUFUX1lDUkNCNDIyKQorCQlvdXRwdXQgPSBEUk1fSERNSV9PVVRQVVRfWUNCQ1I0MjI7CisJZWxz ZSBpZiAoZGlzcGxheS0+Y29sb3JfZm9ybWF0cyAmIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQp CisJCW91dHB1dCA9IERSTV9IRE1JX09VVFBVVF9ZQ0JDUjQyMDsKKworCURSTV9ERUJVR19LTVMo Ikxvd2VzdCBzdWJzYW1wbGVkIFlDQkNSIG1vZGUgc3VwcG9ydGVkIGlzICVzXG4iLAorCQkJZHJt X2dldF9oZG1pX291dHB1dF9uYW1lKHN1cHBvcnRlZF9mb3JtYXRzKSk7CisJcmV0dXJuIG91dHB1 dDsKK30KKworLyoqCisgKiBkcm1fZmluZF9oZG1pX291dHB1dF90eXBlIC0gZ2V0IHRoZSBtb3N0 IHN1aXRhYmxlIG91dHB1dAorICogQGluZm86IGNvbm5lY3RlZCBkaXNwbGF5J3MgaW5mb3JtYXRp b24gZnJvbSBjb25uZWN0b3IKKyAqIEBtb2RlOiB2aWRlbyBtb2RlIHVuZGVyIG1vZGVzZXQKKyAq IEB0eXBlOiB1c2VyJ3MgY2hvaWNlIGZvciBwcmVmZXJyZWQgbW9kZSwgc2V0IHZpYSBkcm0gcHJv cGVydHkKKyAqCSJoZG1pX291dHB1dF9mb3JtYXQiCisgKiBAc3JjX291dHB1dF9jYXA6IGJpdG1h cCBvZiBzb3VyY2UncyBzdXBwb3J0ZWQgb3V0cHV0cyBmb3JtYXRzCisgKglzcmNfb3V0cHV0X2Nh cCA9ICgxIDw8IERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0KSBtZWFucyBzb3VyY2UKKyAqCXN1cHBv cnRzIFJHQjQ0NAorICoJc3JjX291dHB1dF9jYXAgPSAoMSA8PCBEUk1fQ09MT1JfRk9STUFUX1lD UkNCNDQ0KSBtZWFucyBzb3VyY2UKKyAqCXN1cHBvcnRzIFlVVjQ0NCwgYW5kIHNvIG9uLgorICoK KyAqIEZpbmQgdGhlIGJlc3Qgc3VpdGFibGUgSERNSSBvdXRwdXQgY29uc2lkZXJpbmcgbW9kZSwg c291cmNlIGNhcGFiaWxpdHksCisgKiBzaW5rIGNhcGFiaWxpdHkgYW5kIHVzZXIncyBjaG9pY2Ug KGV4cHJlc3NlZCBpbiBmb3JtIG9mIGRybSBwcm9wZXJ0eSkKKyAqCisgKiBSZXR1cm5zOgorICog ZW51bSBjb3JyZXNwb25kaW5nIHRvIGJlc3Qgc3VpdGFibGUgb3V0cHV0IHR5cGUgb24gc3VjY2Vz cy4KKyAqIERSTV9IRE1JX09VVFBVVF9JTlZBTElEIG9uIGZhaWx1cmUuCisgKi8KK2VudW0gZHJt X2hkbWlfb3V0cHV0X3R5cGUKK2RybV9kaXNwbGF5X2luZm9faGRtaV9vdXRwdXRfdHlwZShzdHJ1 Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKKwkJCQllbnVtIGRybV9oZG1pX291dHB1dF90eXBlIHR5cGUsCisJCQkJdTMyIHNyY19v dXRwdXRfY2FwKQoreworCWJvb2wgcmV0OworCWJvb2wgbW9kZV9pc180MjBfb25seSA9IGRybV9t b2RlX2lzXzQyMF9vbmx5KGluZm8sIG1vZGUpOworCisJLyoKKwkgKiBJZiB0aGUgcHJlZmVycmVk IG91dHB1dCBpcyBub3Qgc2V0IHRvIFlDQkNSIGJ5IHVzZXIsIGFuZCB0aGUgbW9kZQorCSAqIGRv ZXNuJ3QgZm9yY2UgdXMgdG8gZHJpdmUgWUNCQ1I0MjAgb3V0cHV0LCByZXNwZWN0IHRoZSB1c2Vy CisJICogcHJlZmVyZW5jZSBmb3IgdGhlIG91dHB1dCB0eXBlLiBCdXQgaWYgdGhlIG1vZGUgaXMg NDIwX29ubHksIHdlIHdpbGwKKwkgKiBiZSBmb3JjZSB0byBkcml2ZSBZQ0JDUjQyMCBvdXRwdXQu CisJICovCisJaWYgKCFtb2RlX2lzXzQyMF9vbmx5KSB7CisJCWlmICh0eXBlID09IERSTV9IRE1J X09VVFBVVF9ERUZBVUxUX1JHQikKKwkJCXJldHVybiBEUk1fSERNSV9PVVRQVVRfREVGQVVMVF9S R0I7CisJfSBlbHNlIHsKKwkJdHlwZSA9IERSTV9IRE1JX09VVFBVVF9ZQ0JDUjQyMDsKKwkJRFJN X0RFQlVHX0tNUygiR290IGEgNDIwIG9ubHkgbW9kZSglcylcbiIsIG1vZGUtPm5hbWUpOworCX0K KworCS8qIElmICB0aGlzIHNyYyArIHNpbmsgY29tYmluYXRpb24gY2FuIHN1cHBvcnQgYW55IFlD QkNSIG91dHB1dCAqLworCXJldCA9IGRybV9kaXNwbGF5X3N1cHBvcnRzX3ljYmNyX291dHB1dChp bmZvLCBzcmNfb3V0cHV0X2NhcCk7CisJaWYgKCFyZXQpIHsKKwkJRFJNX0VSUk9SKCJObyBzdXBw b3J0ZWQgWUNCQ1Igb3V0cHV0XG4iKTsKKwkJcmV0dXJuIERSTV9IRE1JX09VVFBVVF9JTlZBTElE OworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRFJNX0hETUlfT1VUUFVUX1lDQkNSX0hR OgorCQl0eXBlID0gZHJtX2dldF9oaWdoZXN0X3F1YWxpdHlfeWNiY3Jfc3VwcG9ydGVkKGluZm8s IG1vZGUsCisJCQkJCQkJCXNyY19vdXRwdXRfY2FwKTsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9I RE1JX09VVFBVVF9ZQ0JDUl9MUToKKwkJdHlwZSA9IGRybV9nZXRfbG93ZXN0X3F1YWxpdHlfeWNi Y3Jfc3VwcG9ydGVkKGluZm8sIG1vZGUsCisJCQkJCQkJCXNyY19vdXRwdXRfY2FwKTsKKwkJYnJl YWs7CisKKwljYXNlIERSTV9IRE1JX09VVFBVVF9ZQ0JDUjQyMDoKKwkJcmV0ID0gZHJtX21vZGVf aXNfNDIwKGluZm8sIG1vZGUpOworCQlpZiAoIXJldCkgeworCQkJRFJNX0VSUk9SKCJNb2RlICVz IGRvZXNuJ3Qgc3VwcG9ydCA0MjAgb3V0cHV0XG4iLAorCQkJCSAgIG1vZGUtPm5hbWUpOworCQkJ dHlwZSA9IERSTV9IRE1JX09VVFBVVF9JTlZBTElEOworCQl9CisKKwkJYnJlYWs7CisKKwkvKiBC ZWxvdyBjYXNlcyBhcmUganVzdCB0byBzYXRpc2Z5IGNoZWNrcGF0Y2gncyBBSSAqLworCWNhc2Ug RFJNX0hETUlfT1VUUFVUX0RFRkFVTFRfUkdCOgorCWNhc2UgRFJNX0hETUlfT1VUUFVUX1lDQkNS NDQ0OgorCWNhc2UgRFJNX0hETUlfT1VUUFVUX1lDQkNSNDIyOgorCQlicmVhazsKKworCWRlZmF1 bHQ6CisJCXR5cGUgPSBEUk1fSERNSV9PVVRQVVRfSU5WQUxJRDsKKwl9CisKKwlpZiAodHlwZSA9 PSBEUk1fSERNSV9PVVRQVVRfSU5WQUxJRCkgeworCQlEUk1fRVJST1IoIkNhbid0IHN1cHBvcnQg bW9kZSAlcyBpbiBZQ0JDUiBmb3JtYXRcbiIsCisJCQkJbW9kZS0+bmFtZSk7CisJCXJldHVybiBE Uk1fSERNSV9PVVRQVVRfSU5WQUxJRDsKKwl9CisKKwkvKiBUZXN0IGlmIHRoaXMgc3JjL3Npbmsv bW9kZSBjb21iaW5hdGlvbiBjYW4gc3VwcG9ydCBzZWxlY3RlZCBvdXRwdXQgKi8KKwlyZXQgPSBk cm1fZGlzcGxheV9zdXBwb3J0c190aGlzX3ljYmNyX291dHB1dChpbmZvLCBtb2RlLCB0eXBlLAor CQkJCQkJc3JjX291dHB1dF9jYXApOworCWlmICghcmV0KSB7CisJCURSTV9FUlJPUigiT3V0cHV0 ICVzIGNhbid0IGJlIHN1cHBvcnRlZFxuIiwKKwkJCQkJZHJtX2dldF9oZG1pX291dHB1dF9uYW1l KHR5cGUpKTsKKwkJcmV0dXJuIERSTV9IRE1JX09VVFBVVF9JTlZBTElEOworCX0KKworCURSTV9E RUJVR19LTVMoIkJlc3Qgc3VwcG9ydGVkIG91dHB1dCBpczogJXNcbiIsCisJCQlkcm1fZ2V0X2hk bWlfb3V0cHV0X25hbWUodHlwZSkpOworCXJldHVybiB0eXBlOworfQorRVhQT1JUX1NZTUJPTChk cm1fZGlzcGxheV9pbmZvX2hkbWlfb3V0cHV0X3R5cGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZHJtX21vZGVzLmggYi9pbmNsdWRlL2RybS9kcm1fbW9kZXMuaAppbmRleCBmOGExMjY4Li5j NTgyNGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZXMuaAorKysgYi9pbmNsdWRl L2RybS9kcm1fbW9kZXMuaApAQCAtNDUzLDYgKzQ1MywxMSBAQCBpbnQgZHJtX21vZGVfY29udmVy dF91bW9kZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqb3V0LAogdm9pZCBkcm1fbW9kZV9wcm9i ZWRfYWRkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKTsKIHZvaWQgZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiAKK2VudW0gZHJtX2hkbWlfb3V0cHV0X3R5 cGUKK2RybV9kaXNwbGF5X2luZm9faGRtaV9vdXRwdXRfdHlwZShzdHJ1Y3QgZHJtX2Rpc3BsYXlf aW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgIGVu dW0gZHJtX2hkbWlfb3V0cHV0X3R5cGUgdHlwZSwKKwkJCSAgdTMyIHNyY19vdXRwdXRfY2FwKTsK IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fY3Z0X21vZGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkJCQkgICAgICBpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSwgaW50IHZyZWZyZXNo LAogCQkJCSAgICAgIGJvb2wgcmVkdWNlZCwgYm9vbCBpbnRlcmxhY2VkLAotLSAKMi43LjQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=