From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steve Longerbeam Subject: [PATCH v5 5/7] gpu: ipu-v3: ipu-ic: Add support for limited range encoding Date: Tue, 19 Feb 2019 16:05:19 -0800 Message-ID: <20190220000521.31130-6-slongerbeam@gmail.com> References: <20190220000521.31130-1-slongerbeam@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6560289272 for ; Wed, 20 Feb 2019 00:05:40 +0000 (UTC) Received: by mail-pf1-x442.google.com with SMTP id n22so10988735pfa.3 for ; Tue, 19 Feb 2019 16:05:40 -0800 (PST) In-Reply-To: <20190220000521.31130-1-slongerbeam@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-media@vger.kernel.org Cc: open list , "open list:DRM DRIVERS FOR FREESCALE IMX" , Steve Longerbeam List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnM6CgotIFlVViBmdWxsLXJh bmdlIHRvIFlVViBsaW1pdGVkLXJhbmdlCi0gWVVWIGxpbWl0ZWQtcmFuZ2UgdG8gWVVWIGZ1bGwt cmFuZ2UKLSBZVVYgbGltaXRlZC1yYW5nZSB0byBSR0IgZnVsbC1yYW5nZQotIFJHQiBmdWxsLXJh bmdlIHRvIFlVViBsaW1pdGVkLXJhbmdlCgpUaGUgbGFzdCB0d28gY29udmVyc2lvbnMgcmVxdWly ZSBvcGVyYXRpbmcgb24gdGhlIFlVViBmdWxsLXJhbmdlCmVuY29kaW5nIGFuZCBpbnZlcnNlIGVu Y29kaW5nIGNvZWZmaWNpZW50cywgd2l0aCB0aGUgWVVWLXRvLVlVVgpsaW1pdGVkPC0+ZnVsbCBj b2VmZmljaWVudHMuIFRoZSBmb3JtdWxhIHRvIGNvbnZlcnQgaXMKCk1fYyA9IE1fYSAqIE1fYgpP X2MgPSBNX2EgKiBPX2IgKyBPX2EKCkZvciBjYWxjdWxhdGluZyB0aGUgUkdCIGZ1bGwtcmFuZ2Ug dG8gWVVWIGxpbWl0ZWQtcmFuZ2UgY29lZmZpY2llbnRzOgoKW01fYSwgT19hXSA9IFlVViBmdWxs LXJhbmdlIHRvIFlVViBsaW1pdGVkLXJhbmdlIGNvZWZmaWNpZW50cy4KW01fYiwgT19iXSA9IFJH QiBmdWxsLXJhbmdlIHRvIFlVViBmdWxsLXJhbmdlIGNvZWZmaWNpZW50cy4KCkZvciBjYWxjdWxh dGluZyB0aGUgWVVWIGxpbWl0ZWQtcmFuZ2UgdG8gUkdCIGZ1bGwtcmFuZ2UgY29lZmZpY2llbnRz OgoKW01fYSwgT19hXSA9IFlVViBmdWxsLXJhbmdlIHRvIFJHQiBmdWxsLXJhbmdlIGNvZWZmaWNp ZW50cy4KW01fYiwgT19iXSA9IFlVViBsaW1pdGVkLXJhbmdlIHRvIFlVViBmdWxsLXJhbmdlIGNv ZWZmaWNpZW50cy4KClRoZSBjYWxjdWxhdGlvbiBvZiBbTV9jLCBPX2NdIGlzIGNhcnJpZWQgb3V0 IGJ5IHRoZSBmdW5jdGlvbgp0cmFuc2Zvcm1fY29lZmZzKCkuCgpJbiB0aGUgZnV0dXJlIGlmIFJH QiBsaW1pdGVkIHJhbmdlIGVuY29kaW5nIGlzIHJlcXVpcmVkLCB0aGUgc2FtZQpmdW5jdGlvbiBj YW4gYmUgdXNlZC4gQW5kIGNhc2NhZGVkIHRvIGNyZWF0ZSBhbGwgY29tYmluYXRpb25zIG9mCmVu Y29kaW5nIGZvciBZVVYgbGltaXRlZC9mdWxsIHJhbmdlIDwtPiBSR0IgbGltaXRlZC9mdWxsIHJh bmdlLApwYXNzaW5nIHRoZSBvdXRwdXQgY29lZmZpY2llbnRzIGZyb20gb25lIGNhbGwgYXMgdGhl IGlucHV0IGZvciB0aGUKbmV4dC4KCkZvciBleGFtcGxlLCB0byBjcmVhdGUgWVVWIGZ1bGwtcmFu Z2UgdG8gUkdCIGxpbWl0ZWQtcmFuZ2UgY29lZmZpY2llbnRzOgoKW01fYSwgT19hXSA9IFJHQiBm dWxsLXJhbmdlIHRvIFJHQiBsaW1pdGVkLXJhbmdlIGNvZWZmaWNpZW50cy4KW01fYiwgT19iXSA9 IFlVViBmdWxsLXJhbmdlIHRvIFJHQiBmdWxsLXJhbmdlIGNvZWZmaWNpZW50cy4KCmFuZCB0aGF0 IG91dHB1dCBzZW50IGFzIGlucHV0IHRvIGNyZWF0ZSBZVVYgbGltaXRlZC1yYW5nZSB0byBSR0IK bGltaXRlZC1yYW5nZSBjb2VmZmljaWVudHM6CgpbTV9hLCBPX2FdID0gWVVWIGZ1bGwtcmFuZ2Ug dG8gUkdCIGxpbWl0ZWQtcmFuZ2UgY29lZmZpY2llbnRzLgpbTV9iLCBPX2JdID0gWVVWIGxpbWl0 ZWQtcmFuZ2UgdG8gWVVWIGZ1bGwtcmFuZ2UgY29lZmZpY2llbnRzLgoKU2lnbmVkLW9mZi1ieTog U3RldmUgTG9uZ2VyYmVhbSA8c2xvbmdlcmJlYW1AZ21haWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2lwdS12My9pcHUtaWMuYyB8IDI4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0KIDEgZmlsZSBjaGFuZ2VkLCAyNjMgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1pYy5jIGIvZHJpdmVycy9ncHUvaXB1 LXYzL2lwdS1pYy5jCmluZGV4IDAxMmVhMjIzOWU5Ny4uODYxZjQzNTU2ZGY0IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWljLmMKKysrIGIvZHJpdmVycy9ncHUvaXB1LXYzL2lw dS1pYy5jCkBAIC0xNzgsMTAgKzE3OCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXB1X2ljX3dy aXRlKHN0cnVjdCBpcHVfaWMgKmljLCB1MzIgdmFsdWUsIHVuc2lnbmVkIG9mZnNldCkKIH0KIAog c3RydWN0IGljX2VuY29kZV9jb2VmZiB7Ci0JczE2IGNvZWZmWzNdWzNdOwkvKiBzaWduZWQgOS1i aXQgaW50ZWdlciBjb2VmZmljaWVudHMgKi8KLQlzMTYgb2Zmc2V0WzNdOwkJLyogc2lnbmVkIDEx KzItYml0IGZpeGVkIHBvaW50IG9mZnNldCAqLwotCXU4IHNjYWxlOjI7CQkvKiBzY2FsZSBjb2Vm ZmljaWVudHMgKiAyXihzY2FsZS0xKSAqLwotCWJvb2wgc2F0OjE7CQkvKiBzYXR1cmF0ZSB0byAo MTYsIDIzNShZKSAvIDI0MChVLCBWKSkgKi8KKwlpbnQgY29lZmZbM11bM107CS8qIHNpZ25lZCA5 LWJpdCBpbnRlZ2VyIGNvZWZmaWNpZW50cyAqLworCWludCBvZmZzZXRbM107CQkvKiBzaWduZWQg MTMtYml0IGludGVnZXIgb2Zmc2V0ICovCisJaW50IHNjYWxlOwkJLyogc2NhbGUgY29lZmZpY2ll bnRzICogMl4oc2NhbGUtMSkgKi8KKwlib29sIHNhdDsJCS8qIHNhdHVyYXRlIHRvICgxNiwgMjM1 KFkpIC8gMjQwKFUsIFYpKSAqLwogfTsKIAogLyoKQEAgLTI3Nyw2ICsyNzcsMjMxIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgaWNfZW5jb2RlX2NvZWZmIGljX2VuY29kZV95Y2JjcjJyZ2JfNzA5ID0g ewogCS5zY2FsZSA9IDIsCiB9OwogCisvKgorICogWVVWIGZ1bGwgcmFuZ2UgdG8gWVVWIGxpbWl0 ZWQgcmFuZ2U6CisgKgorICogWV9saW0gID0gMC44NTg4ICogWV9mdWxsICsgMTYKKyAqIENiX2xp bSA9IDAuODc4NCAqIChDYl9mdWxsIC0gMTI4KSArIDEyOAorICogQ3JfbGltID0gMC44Nzg0ICog KENyX2Z1bGwgLSAxMjgpICsgMTI4CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNfZW5jb2Rl X2NvZWZmIGljX2VuY29kZV95Y2Jjcl9mdWxsMmxpbSA9IHsKKwkuY29lZmYgPSB7CisJCXsgMjE5 LCAwLCAwIH0sCisJCXsgMCwgMjI0LCAwIH0sCisJCXsgMCwgMCwgMjI0IH0sCisJfSwKKwkub2Zm c2V0ID0geyA2NCwgNjIsIDYyIH0sCisJLnNjYWxlID0gMSwKK307CisKKy8qCisgKiBZVVYgbGlt aXRlZCByYW5nZSB0byBZVVYgZnVsbCByYW5nZToKKyAqCisgKiBZX2Z1bGwgID0gMS4xNjQ0ICog KFlfbGltIC0gMTYpCisgKiBDYl9mdWxsID0gMS4xMzg0ICogKENiX2xpbSAtIDEyOCkgKyAxMjgK KyAqIENyX2Z1bGwgPSAxLjEzODQgKiAoQ3JfbGltIC0gMTI4KSArIDEyOAorICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGljX2VuY29kZV9jb2VmZiBpY19lbmNvZGVfeWNiY3JfbGltMmZ1bGwgPSB7 CisJLmNvZWZmID0geworCQl7IDE0OSwgMCwgMCB9LAorCQl7IDAsIDE0NSwgMCB9LAorCQl7IDAs IDAsIDE0NSB9LAorCX0sCisJLm9mZnNldCA9IHsgLTM3LCAtMzUsIC0zNSB9LAorCS5zY2FsZSA9 IDIsCit9OworCisvKgorICogUkdCIGZ1bGwgcmFuZ2UgdG8gUkdCIGxpbWl0ZWQgcmFuZ2U6Cisg KgorICogUl9saW0gPSAwLjg1ODggKiBSX2Z1bGwgKyAxNgorICogR19saW0gPSAwLjg1ODggKiBH X2Z1bGwgKyAxNgorICogQl9saW0gPSAwLjg1ODggKiBCX2Z1bGwgKyAxNgorICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGljX2VuY29kZV9jb2VmZgoraWNfZW5jb2RlX3JnYl9mdWxsMmxpbSBfX21h eWJlX3VudXNlZCA9IHsKKwkuY29lZmYgPSB7CisJCXsgMjE5LCAwLCAwIH0sCisJCXsgMCwgMjE5 LCAwIH0sCisJCXsgMCwgMCwgMjE5IH0sCisJfSwKKwkub2Zmc2V0ID0geyA2NCwgNjQsIDY0IH0s CisJLnNjYWxlID0gMSwKK307CisKKy8qCisgKiBSR0IgbGltaXRlZCByYW5nZSB0byBSR0IgZnVs bCByYW5nZToKKyAqCisgKiBSX2Z1bGwgPSAxLjE2NDQgKiAoUl9saW0gLSAxNikKKyAqIEdfZnVs bCA9IDEuMTY0NCAqIChHX2xpbSAtIDE2KQorICogQl9mdWxsID0gMS4xNjQ0ICogKEJfbGltIC0g MTYpCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNfZW5jb2RlX2NvZWZmCitpY19lbmNvZGVf cmdiX2xpbTJmdWxsIF9fbWF5YmVfdW51c2VkID0geworCS5jb2VmZiA9IHsKKwkJeyAxNDksIDAs IDAgfSwKKwkJeyAwLCAxNDksIDAgfSwKKwkJeyAwLCAwLCAxNDkgfSwKKwl9LAorCS5vZmZzZXQg PSB7IC0zNywgLTM3LCAtMzcgfSwKKwkuc2NhbGUgPSAyLAorfTsKKworLyoKKyAqIENvbnZlcnQg YSBjb2VmZmljaWVudCBhbmQgc2NhbGUgdmFsdWUgaW4gVFBNRU0gcmVnaXN0ZXIgZm9ybWF0Cisg KiB0byBhIHNpZ25lZCBpbnQgdGltZXMgMjU2IChmaXggdGhlIHJhZGl4IHBvaW50KS4gVGhlIFRQ TUVNIHJlZ2lzdGVyCisgKiBjb2VmZmljaWVudCBmb3JtYXQgaXMgYSBzaWduZWQgOS1iaXQgdmFs dWUgKHNpZ24gYml0IGF0IGJpdCA4LAorICogbWFudGlzc2EgPSBjb2VmZiAqIDIgXiAoOCAtIHNj YWxlIC0gMSkpLgorICovCitzdGF0aWMgaW50IGNvZWZmX2ZpeChpbnQgY29lZmYsIGludCBzY2Fs ZSkKK3sKKwlpZiAoY29lZmYgPj0gMjU2KQorCQljb2VmZiAtPSA1MTI7CisJaWYgKHNjYWxlID09 IDApCisJCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChjb2VmZiwgMik7CisJcmV0dXJuIGNvZWZm IDw8IChzY2FsZSAtIDEpOworfQorCisvKgorICogQ29udmVydCBhIHNpZ25lZCBpbnQgY29lZmZp Y2llbnQgdGltZXMgMjU2IHRvIFRQTUVNIHJlZ2lzdGVyCisgKiBmb3JtYXQsIGdpdmVuIGEgc2Nh bGUgdmFsdWUgPSBUUE1FTSBzY2FsZSAtIDEuCisgKi8KK3N0YXRpYyBpbnQgY29lZmZfbm9ybWFs aXplKGludCBjb2VmZiwgaW50IHNjYWxlKQoreworCWNvZWZmID0gRElWX1JPVU5EX0NMT1NFU1Qo Y29lZmYsIDEgPDwgc2NhbGUpOworCWlmIChjb2VmZiA8IDApCisJCWNvZWZmICs9IDUxMjsKKwly ZXR1cm4gY29lZmY7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIG9mZnNldCBhbmQgc2NhbGUgdmFs dWUgaW4gVFBNRU0gcmVnaXN0ZXIgZm9ybWF0IHRvIGEKKyAqIHNpZ25lZCBpbnQgdGltZXMgMjU2 IChmaXggdGhlIHJhZGl4IHBvaW50KS4gVGhlIFRQTUVNIHJlZ2lzdGVyCisgKiBvZmZzZXQgZm9y bWF0IGlzIGEgc2lnbmVkIDEzLWJpdCB2YWx1ZSAoc2lnbiBiaXQgYXQgYml0IDEyLAorICogbWFu dGlzc2EgPSBvZmZzZXQgKiAyIF4gKDIgLSAoc2NhbGUgLSAxKSkuCisgKi8KK3N0YXRpYyBpbnQg b2Zmc2V0X2ZpeChpbnQgb2Zmc2V0LCBpbnQgc2NhbGUpCit7CisJcmV0dXJuIG9mZnNldCA8PCAo OCAtICgyIC0gKHNjYWxlIC0gMSkpKTsKK30KKworLyoKKyAqIENvbnZlcnQgYSBzaWduZWQgaW50 IG9mZnNldCB0aW1lcyAyNTYgdG8gVFBNRU0gcmVnaXN0ZXIKKyAqIGZvcm1hdCwgZ2l2ZW4gYSBz Y2FsZSB2YWx1ZSA9IFRQTUVNIHNjYWxlIC0gMS4KKyAqLworc3RhdGljIGludCBvZmZzZXRfbm9y bWFsaXplKGludCBvZmYsIGludCBzY2FsZSkKK3sKKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1Qo b2ZmLCAxIDw8ICg4IC0gKDIgLSBzY2FsZSkpKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIHNjYWxl IHZhbHVlIHRoYXQgZml0cyB0aGUgZ2l2ZW4gY29lZmZpY2llbnQgd2l0aGluCisgKiB0aGUgOC1i aXQgVFBNRU0gbWFudGlzc2EuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2NvZWZmX3NjYWxlKGludCBj b2VmZikKK3sKKwlpbnQgc2NhbGUgPSAwOworCisJd2hpbGUgKGFicyhjb2VmZikgPj0gMjU2ICYm IHNjYWxlIDw9IDIpIHsKKwkJY29lZmYgPSBESVZfUk9VTkRfQ0xPU0VTVChjb2VmZiwgMik7CisJ CXNjYWxlKys7CisJfQorCisJcmV0dXJuIHNjYWxlOworfQorCisvKgorICogVGhlIGFib3ZlIGRl ZmluZWQgZW5jb2RpbmcgY29lZmZpY2llbnRzIGFsbCBlbmNvZGUgYmV0d2VlbgorICogZnVsbC1y YW5nZSBSR0IgYW5kIGZ1bGwtcmFuZ2UgWUNiQ3IuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxj dWxhdGVzIGEgbWF0cml4IE1fYyBhbmQgb2Zmc2V0IHZlY3RvciBPX2MsIGdpdmVuCisgKiBpbnB1 dCBtYXRyaWNlcyBNX2EsIE1fYiBhbmQgb2Zmc2V0IHZlY3RvcnMgT19hLCBPX2IsIHN1Y2ggdGhh dDoKKyAqCisgKiBNX2MgPSBNX2EgKiBNX2IKKyAqIE9fYyA9IE1fYSAqIE9fYiArIE9fYQorICoK KyAqIFRoaXMgb3BlcmF0aW9uIHdpbGwgdHJhbnNmb3JtIHRoZSBmdWxsLXJhbmdlIGNvZWZmaWNp ZW50cyB0bworICogY29lZmZpY2llbnRzIHRoYXQgZW5jb2RlIHRvIG9yIGZyb20gbGltaXRlZCBy YW5nZSBZQ2JDciBvciBSR0IuCisgKgorICogRm9yIGV4YW1wbGUsIHRvIHRyYW5zZm9ybSBpY19l bmNvZGVfcmdiMnljYmNyXzYwMSB0byBlbmNvZGUgdG8KKyAqIGxpbWl0ZWQtcmFuZ2UgWUNiQ3I6 CisgKgorICogW01fYSwgT19hXSA9IGljX2VuY29kZV95Y2Jjcl9mdWxsMmxpbQorICogW01fYiwg T19iXSA9IGljX2VuY29kZV9yZ2IyeWNiY3JfNjAxCisgKgorICogVG8gdHJhbnNmb3JtIHRoZSBp bnZlcnNlIGNvZWZmaWNpZW50cyBpY19lbmNvZGVfeWNiY3IycmdiXzYwMSB0bworICogZW5jb2Rl IGZyb20gbGltaXRlZC1yYW5nZSBZQ2JDcjoKKyAqCisgKiBbTV9hLCBPX2FdID0gaWNfZW5jb2Rl X3ljYmNyMnJnYl82MDEKKyAqIFtNX2IsIE9fYl0gPSBpY19lbmNvZGVfeWNiY3JfbGltMmZ1bGwK KyAqCisgKiBUaGUgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgUkdCIGxpbWl0 ZWQgcmFuZ2UKKyAqIGNvZWZmaWNpZW50cywgYW5kIGNhc2NhZGVkIHRvIGNyZWF0ZSBhbGwgY29t YmluYXRpb25zIG9mCisgKiBlbmNvZGluZ3MgYmV0d2VlbiBZQ2JDciBsaW1pdGVkL2Z1bGwgcmFu Z2UgPC0+IFJHQiBsaW1pdGVkL2Z1bGwKKyAqIHJhbmdlLgorICovCitzdGF0aWMgdm9pZCB0cmFu c2Zvcm1fY29lZmZzKHN0cnVjdCBpY19lbmNvZGVfY29lZmYgKm91dCwKKwkJCSAgICAgY29uc3Qg c3RydWN0IGljX2VuY29kZV9jb2VmZiAqYSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGljX2VuY29k ZV9jb2VmZiAqYikKK3sKKwlpbnQgY19hLCBjX2IsIGNfb3V0OworCWludCBvX2EsIG9fYiwgb19v dXQ7CisJaW50IG91dHNjYWxlID0gMDsKKwlpbnQgaSwgaiwgazsKKworCWZvciAoaSA9IDA7IGkg PCAzOyBpKyspIHsKKwkJb19vdXQgPSAwOworCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7CisJ CQlpbnQgc2NhbGU7CisKKwkJCS8qIE1fY1tpLGpdID0gTV9hW2ksa10gKiBNX2JbayxqXSAqLwor CQkJY19vdXQgPSAwOworCQkJZm9yIChrID0gMDsgayA8IDM7IGsrKykgeworCQkJCWNfYSA9IGNv ZWZmX2ZpeChhLT5jb2VmZltpXVtrXSwgYS0+c2NhbGUpOworCQkJCWNfYiA9IGNvZWZmX2ZpeChi LT5jb2VmZltrXVtqXSwgYi0+c2NhbGUpOworCQkJCWNfb3V0ICs9IGNfYSAqIGNfYjsKKwkJCX0K KworCQkJY19vdXQgPSBESVZfUk9VTkRfQ0xPU0VTVChjX291dCwgMSA8PCA4KTsKKwkJCW91dC0+ Y29lZmZbaV1bal0gPSBjX291dDsKKworCQkJLyoKKwkJCSAqIGdldCBzY2FsZSBmb3IgdGhpcyBj b2VmZmljaWVudCBhbmQgdXBkYXRlCisJCQkgKiBmaW5hbCBvdXRwdXQgc2NhbGUuCisJCQkgKi8K KwkJCXNjYWxlID0gZ2V0X2NvZWZmX3NjYWxlKGNfb3V0KTsKKwkJCW91dHNjYWxlID0gbWF4KG91 dHNjYWxlLCBzY2FsZSk7CisKKwkJCS8qIE1fYVtpLGpdICogT19iW2pdICovCisJCQljX2EgPSBj b2VmZl9maXgoYS0+Y29lZmZbaV1bal0sIGEtPnNjYWxlKTsKKwkJCW9fYiA9IG9mZnNldF9maXgo Yi0+b2Zmc2V0W2pdLCBiLT5zY2FsZSk7CisJCQlvX291dCArPSBESVZfUk9VTkRfQ0xPU0VTVChj X2EgKiBvX2IsIDEgPDwgOCk7CisJCX0KKworCQkvKiBPX2NbaV0gPSAoTV9hICogT19iKVtpXSAr IE9fYVtpXSAqLworCQlvX2EgPSBvZmZzZXRfZml4KGEtPm9mZnNldFtpXSwgYS0+c2NhbGUpOwor CQlvX291dCArPSBvX2E7CisKKwkJb3V0LT5vZmZzZXRbaV0gPSBvX291dDsKKwl9CisKKwkvKgor CSAqIG5vcm1hbGl6ZSBvdXRwdXQgY29lZmZpY2llbnRzIGFuZCBvZmZzZXRzIHRvIFRQTUVNCisJ ICogcmVnaXN0ZXIgZm9ybWF0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJ Zm9yIChqID0gMDsgaiA8IDM7IGorKykgeworCQkJY19vdXQgPSBvdXQtPmNvZWZmW2ldW2pdOwor CQkJb3V0LT5jb2VmZltpXVtqXSA9IGNvZWZmX25vcm1hbGl6ZShjX291dCwgb3V0c2NhbGUpOwor CQl9CisKKwkJb19vdXQgPSBvdXQtPm9mZnNldFtpXTsKKwkJb3V0LT5vZmZzZXRbaV0gPSBvZmZz ZXRfbm9ybWFsaXplKG9fb3V0LCBvdXRzY2FsZSk7CisJfQorCisJb3V0LT5zY2FsZSA9IG91dHNj YWxlICsgMTsKK30KKwogc3RhdGljIGludCBjYWxjX2NzY19jb2VmZnMoc3RydWN0IGlwdV9pY19w cml2ICpwcml2LAogCQkJICAgc3RydWN0IGljX2VuY29kZV9jb2VmZiAqY29lZmZfb3V0LAogCQkJ ICAgY29uc3Qgc3RydWN0IGlwdV9pY19jb2xvcnNwYWNlICppbiwKQEAgLTI5MCwxNCArNTE1LDYg QEAgc3RhdGljIGludCBjYWxjX2NzY19jb2VmZnMoc3RydWN0IGlwdV9pY19wcml2ICpwcml2LAog CQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIAotCWlmICgoaW4tPmNzID09IElQVVYzX0NPTE9SU1BB Q0VfWVVWICYmCi0JICAgICBpbi0+cXVhbnQgIT0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5H RSkgfHwKLQkgICAgKG91dC0+Y3MgPT0gSVBVVjNfQ09MT1JTUEFDRV9ZVVYgJiYKLQkgICAgIG91 dC0+cXVhbnQgIT0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRSkpIHsKLQkJZGV2X2Vycihw cml2LT5pcHUtPmRldiwgIkxpbWl0ZWQgcmFuZ2UgWVVWIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQly ZXR1cm4gLUVOT1RTVVBQOwotCX0KLQogCWlmICgoaW4tPmNzID09IElQVVYzX0NPTE9SU1BBQ0Vf UkdCICYmCiAJICAgICBpbi0+cXVhbnQgIT0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRSkg fHwKIAkgICAgKG91dC0+Y3MgPT0gSVBVVjNfQ09MT1JTUEFDRV9SR0IgJiYKQEAgLTMwNyw3ICs1 MjQsMTggQEAgc3RhdGljIGludCBjYWxjX2NzY19jb2VmZnMoc3RydWN0IGlwdV9pY19wcml2ICpw cml2LAogCX0KIAogCWlmIChpbi0+Y3MgPT0gb3V0LT5jcykgewotCQkqY29lZmZfb3V0ID0gaWNf ZW5jb2RlX2lkZW50aXR5OworCQlpZiAoaW4tPnF1YW50ID09IG91dC0+cXVhbnQpIHsKKwkJCSpj b2VmZl9vdXQgPSBpY19lbmNvZGVfaWRlbnRpdHk7CisJCX0gZWxzZSBpZiAoaW4tPnF1YW50ID09 IFY0TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0UpIHsKKwkJCS8qIFlVViBmdWxsLXJhbmdlIHRv IFlVViBsaW1pdGVkLXJhbmdlICovCisJCQkqY29lZmZfb3V0ID0gaWNfZW5jb2RlX3ljYmNyX2Z1 bGwybGltOworCisJCQkvKiBzZXQgc2F0dXJhdGlvbiBiaXQgZm9yIFlVViBsaW1pdGVkLXJhbmdl IG91dHB1dCAqLworCQkJY29lZmZfb3V0LT5zYXQgPSB0cnVlOworCQl9IGVsc2UgeworCQkJLyog WVVWIGxpbWl0ZWQtcmFuZ2UgdG8gWVVWIGZ1bGwtcmFuZ2UgKi8KKwkJCSpjb2VmZl9vdXQgPSBp Y19lbmNvZGVfeWNiY3JfbGltMmZ1bGw7CisJCX0KIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMjgs NyArNTU2LDI0IEBAIHN0YXRpYyBpbnQgY2FsY19jc2NfY29lZmZzKHN0cnVjdCBpcHVfaWNfcHJp diAqcHJpdiwKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiAKLQkqY29lZmZfb3V0ID0gKmVuY29k ZV9jb2VmZjsKKwlpZiAoaW4tPnF1YW50ID09IG91dC0+cXVhbnQpIHsKKwkJLyoKKwkJICogWVVW IGZ1bGwtcmFuZ2UgdG8gUkdCIGZ1bGwtcmFuZ2UsIG9yCisJCSAqIFJHQiBmdWxsLXJhbmdlIHRv IFlVViBmdWxsLXJhbmdlLgorCQkgKi8KKwkJKmNvZWZmX291dCA9ICplbmNvZGVfY29lZmY7CisJ fSBlbHNlIGlmIChpbnZlcnNlX2VuY29kZSkgeworCQkvKiBZVVYgbGltaXRlZC1yYW5nZSB0byBS R0IgZnVsbC1yYW5nZSAqLworCQl0cmFuc2Zvcm1fY29lZmZzKGNvZWZmX291dCwgZW5jb2RlX2Nv ZWZmLAorCQkJCSAmaWNfZW5jb2RlX3ljYmNyX2xpbTJmdWxsKTsKKwl9IGVsc2UgeworCQkvKiBS R0IgZnVsbC1yYW5nZSB0byBZVVYgbGltaXRlZC1yYW5nZSAqLworCQl0cmFuc2Zvcm1fY29lZmZz KGNvZWZmX291dCwgJmljX2VuY29kZV95Y2Jjcl9mdWxsMmxpbSwKKwkJCQkgZW5jb2RlX2NvZWZm KTsKKworCQkvKiBzZXQgc2F0dXJhdGlvbiBiaXQgZm9yIFlVViBsaW1pdGVkLXJhbmdlIG91dHB1 dCAqLworCQljb2VmZl9vdXQtPnNhdCA9IHRydWU7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0z NDAsOSArNTg1LDkgQEAgc3RhdGljIGludCBpbml0X2NzYyhzdHJ1Y3QgaXB1X2ljICppYywKIHsK IAlzdHJ1Y3QgaXB1X2ljX3ByaXYgKnByaXYgPSBpYy0+cHJpdjsKIAlzdHJ1Y3QgaWNfZW5jb2Rl X2NvZWZmIGNvZWZmOworCWNvbnN0IHVuc2lnbmVkIGludCAoKmMpWzNdOworCWNvbnN0IHVuc2ln bmVkIGludCAqYTsKIAl1MzIgX19pb21lbSAqYmFzZTsKLQljb25zdCB1MTYgKCpjKVszXTsKLQlj b25zdCB1MTYgKmE7CiAJdTMyIHBhcmFtOwogCWludCByZXQ7CiAKQEAgLTM1NCw4ICs1OTksOCBA QCBzdGF0aWMgaW50IGluaXRfY3NjKHN0cnVjdCBpcHVfaWMgKmljLAogCQkocHJpdi0+dHBtZW1f YmFzZSArIGljLT5yZWctPnRwbWVtX2NzY1tjc2NfaW5kZXhdKTsKIAogCS8qIENhc3QgdG8gdW5z aWduZWQgKi8KLQljID0gKGNvbnN0IHUxNiAoKilbM10pY29lZmYuY29lZmY7Ci0JYSA9IChjb25z dCB1MTYgKiljb2VmZi5vZmZzZXQ7CisJYyA9IChjb25zdCB1bnNpZ25lZCBpbnQgKCopWzNdKWNv ZWZmLmNvZWZmOworCWEgPSAoY29uc3QgdW5zaWduZWQgaW50ICopY29lZmYub2Zmc2V0OwogCiAJ cGFyYW0gPSAoKGFbMF0gJiAweDFmKSA8PCAyNykgfCAoKGNbMF1bMF0gJiAweDFmZikgPDwgMTgp IHwKIAkJKChjWzFdWzFdICYgMHgxZmYpIDw8IDkpIHwgKGNbMl1bMl0gJiAweDFmZik7Ci0tIAoy LjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==