From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mblankhorst.nl (mblankhorst.nl [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 838776E2C2 for ; Tue, 23 Jan 2018 12:56:56 +0000 (UTC) From: Maarten Lankhorst Date: Tue, 23 Jan 2018 13:56:42 +0100 Message-Id: <20180123125642.58698-9-maarten.lankhorst@linux.intel.com> In-Reply-To: <20180123125642.58698-1-maarten.lankhorst@linux.intel.com> References: <20180123125642.58698-1-maarten.lankhorst@linux.intel.com> Subject: [igt-dev] [PATCH i-g-t 8/8] lib/igt_fb: Add support for NV12 format through conversion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: Rm9yIE5WMTIgYSBmb3JtYXQgY29udmVyc2lvbiBpcyBuZWVkZWQuIEJlY2F1c2UgWVVWIGZvcm1h dHMgYXJlIG5vdApmdWxseSBkZWZpbmVkIHdpdGgganVzdCBhIGZvdXJjYywgSSd2ZSBjaG9zZW4g QlQuNzA5IGxpbWl0ZWQgcmFuZ2UuClRoaXMgcHV0cyB0aGUgcGl4ZWwgY2VudGVyIG9mIHRoZSBD YkNyIGNvbXBvbmVudHMgYmV0d2VlbiB0aGUgdG9wCmxlZnQgWSBhbmQgYm90dG9tIGxlZnQgWToK ClkgICBZICAgWSAgIFkKVVYgICAgICBVVgpZICAgWSAgIFkgICBZCgpTb21lIHdvcmsgaXMgcHV0 IGludG8gb3B0aW1pc2luZyB0aGUgY29udmVyc2lvbiByb3V0aW5lcyBpbiBvcmRlciB0bwptYWtl IGl0IGZhc3QgZW5vdWdoLiBCZWZvcmUgY29udmVydGluZyBudjEyIHRvIHJnYjI0LCBpdCBpcyBj b3BpZWQgdG8KYSB0ZW1wb3JhcnkgYnVmZmVyIHRvIHRha2UgYWR2YW50YWdlIG9mIG1lbW9yeSBj YWNoaW5nLiBUaGlzIGlzCmFwcHJveGltYXRlbHkgMjB4IGZhc3RlciB0aGFuIGRpcmVjdGx5IHJl YWRpbmcgdGhlIEJPLgoKV2hlbiB0ZXN0aW5nIG9uIG15IEtCTCB3aXRoIGEgMTA4MHAgYnVmZmVy LCBpdCB0YWtlcyBhcHByb3hpbWF0ZWx5Ci4xcyB0byBjb252ZXJ0IGVpdGhlciB3YXksIHRoaXMg aXMgZmFzdCBlbm91Z2ggbm90IHRvIGJvdGhlciBvcHRpbWlzaW5nCmV2ZW4gZnVydGhlciBmb3Ig bWUuCgpTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RA bGludXguaW50ZWwuY29tPgotLS0KIGxpYi9pZ3RfZmIuYyB8IDM5MCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDMxOCBpbnNlcnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIv aWd0X2ZiLmMgYi9saWIvaWd0X2ZiLmMKaW5kZXggNGQ2YjYyYTY0ZGVkLi40M2I3MWU2NDM1ODYg MTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfZmIuYworKysgYi9saWIvaWd0X2ZiLmMKQEAgLTcwLDYgKzcw LDcgQEAgc3RhdGljIHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QgewogCURGKFhSR0I4ODg4LAlS R0IyNCwJCTMyLCAyNCksCiAJREYoWFJHQjIxMDEwMTAsCVJHQjMwLAkJMzIsIDMwKSwKIAlERihB UkdCODg4OCwJQVJHQjMyLAkJMzIsIDMyKSwKKwlERihOVjEyLAlSR0IyNCwJCTMyLCAtMSwgMiwg ezgsIDE2fSksCiB9OwogI3VuZGVmIERGCiAKQEAgLTM2MywxNCArMzY0LDIwIEBAIHN0YXRpYyBp bnQgY3JlYXRlX2JvX2Zvcl9mYihpbnQgZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKIAkJCSpp c19kdW1iID0gZmFsc2U7CiAKIAkJaWYgKGlzX2k5MTVfZGV2aWNlKGZkKSkgewotCQkJdWludDMy X3QgKnB0cjsKKwkJCXVpbnQ4X3QgKnB0cjsKIAogCQkJYm8gPSBnZW1fY3JlYXRlKGZkLCBzaXpl KTsKIAkJCWdlbV9zZXRfdGlsaW5nKGZkLCBibywgaWd0X2ZiX21vZF90b190aWxpbmcodGlsaW5n KSwgc3RyaWRlKTsKIAogCQkJLyogRW5zdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBwcmVhbGxvY2F0 ZWQgKi8KLQkJCXB0ciA9IGdlbV9tbWFwX19ndHQoZmQsIGJvLCBzaXplLCBQUk9UX1JFQUQpOwot CQkJaWd0X2Fzc2VydCgqcHRyID09IDApOworCQkJcHRyID0gZ2VtX21tYXBfX2d0dChmZCwgYm8s IHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCQkJaWd0X2Fzc2VydCgqKHVpbnQzMl90 ICopcHRyID09IDApOworCisJCQlpZiAoZm9ybWF0LT5kcm1faWQgPT0gRFJNX0ZPUk1BVF9OVjEy KSB7CisJCQkJLyogY29tcG9uZW50IGZvcm1hdHMgaGF2ZSBhIGRpZmZlcmVudCB6ZXJvIHBvaW50 ICovCisJCQkJbWVtc2V0KHB0ciwgMTYsIG9mZnNldHNbMV0pOworCQkJCW1lbXNldChwdHIgKyBv ZmZzZXRzWzFdLCAweDgwLCAoaGVpZ2h0ICsgMSkvMiAqIHN0cmlkZSk7CisJCQl9CiAJCQlnZW1f bXVubWFwKHB0ciwgc2l6ZSk7CiAKIAkJCWlmIChzaXplX3JldCkKQEAgLTExMjYsMTAzICsxMTMz LDExNyBAQCBzdGF0aWMgY2Fpcm9fZm9ybWF0X3QgZHJtX2Zvcm1hdF90b19jYWlybyh1aW50MzJf dCBkcm1fZm9ybWF0KQogCQkgICAgIGRybV9mb3JtYXQsIGlndF9mb3JtYXRfc3RyKGRybV9mb3Jt YXQpKTsKIH0KIAorc3RydWN0IGZiX2JsaXRfbGluZWFyIHsKKwl1aW50MzJfdCBoYW5kbGU7CisJ dW5zaWduZWQgc2l6ZSwgc3RyaWRlOworCXVpbnQ4X3QgKm1hcDsKKwlib29sIGlzX2R1bWI7CisJ dWludDMyX3Qgb2Zmc2V0c1s0XTsKK307CisKIHN0cnVjdCBmYl9ibGl0X3VwbG9hZCB7CiAJaW50 IGZkOwogCXN0cnVjdCBpZ3RfZmIgKmZiOwotCXN0cnVjdCB7Ci0JCXVpbnQzMl90IGhhbmRsZTsK LQkJdW5zaWduZWQgc2l6ZSwgc3RyaWRlOwotCQl1aW50OF90ICptYXA7Ci0JCWJvb2wgaXNfZHVt YjsKLQl9IGxpbmVhcjsKKwlzdHJ1Y3QgZmJfYmxpdF9saW5lYXIgbGluZWFyOwogfTsKIAotc3Rh dGljIHZvaWQgZGVzdHJveV9jYWlyb19zdXJmYWNlX19ibGl0KHZvaWQgKmFyZykKK3N0YXRpYyB2 b2lkIGZyZWVfbGluZWFyX21hcHBpbmcoaW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0 IGZiX2JsaXRfbGluZWFyICpsaW5lYXIpCiB7Ci0Jc3RydWN0IGZiX2JsaXRfdXBsb2FkICpibGl0 ID0gYXJnOwotCXN0cnVjdCBpZ3RfZmIgKmZiID0gYmxpdC0+ZmI7CiAJdW5zaWduZWQgaW50IG9i al90aWxpbmcgPSBpZ3RfZmJfbW9kX3RvX3RpbGluZyhmYi0+dGlsaW5nKTsKKwlpbnQgaTsKIAot CWdlbV9tdW5tYXAoYmxpdC0+bGluZWFyLm1hcCwgYmxpdC0+bGluZWFyLnNpemUpOwotCWZiLT5j YWlyb19zdXJmYWNlID0gTlVMTDsKKwlnZW1fbXVubWFwKGxpbmVhci0+bWFwLCBsaW5lYXItPnNp emUpOworCWdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXItPmhhbmRsZSwKKwkJICAgICAgIEk5MTVf R0VNX0RPTUFJTl9HVFQsIDApOworCisJZm9yIChpID0gMDsgaSA8IGZiLT5udW1fcGxhbmVzOyBp KyspCisJCWlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGZkLAorCQkJCQkgICBsaW5lYXItPmhh bmRsZSwKKwkJCQkJICAgbGluZWFyLT5vZmZzZXRzW2ldLAorCQkJCQkgICBsaW5lYXItPnN0cmlk ZSwKKwkJCQkJICAgSTkxNV9USUxJTkdfTk9ORSwKKwkJCQkJICAgMCwgMCwgLyogc3JjX3gsIHNy Y195ICovCisJCQkJCSAgIGZiLT5wbGFuZV93aWR0aFtpXSwgZmItPnBsYW5lX2hlaWdodFtpXSwK KwkJCQkJICAgZmItPnBsYW5lX2JwcFtpXSwKKwkJCQkJICAgZmItPmdlbV9oYW5kbGUsCisJCQkJ CSAgIGZiLT5vZmZzZXRzW2ldLAorCQkJCQkgICBmYi0+c3RyaWRlLAorCQkJCQkgICBvYmpfdGls aW5nLAorCQkJCQkgICAwLCAwIC8qIGRzdF94LCBkc3RfeSAqLyk7CisKKwlnZW1fc3luYyhmZCwg bGluZWFyLT5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgbGluZWFyLT5oYW5kbGUpOworfQogCi0J Z2VtX3NldF9kb21haW4oYmxpdC0+ZmQsIGJsaXQtPmxpbmVhci5oYW5kbGUsCi0JCQlJOTE1X0dF TV9ET01BSU5fR1RULCAwKTsKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfY2Fpcm9fc3VyZmFjZV9fYmxp dCh2b2lkICphcmcpCit7CisJc3RydWN0IGZiX2JsaXRfdXBsb2FkICpibGl0ID0gYXJnOwogCi0J aWd0X2JsaXR0ZXJfZmFzdF9jb3B5X19yYXcoYmxpdC0+ZmQsCi0JCQkJICAgYmxpdC0+bGluZWFy LmhhbmRsZSwgMCwKLQkJCQkgICBibGl0LT5saW5lYXIuc3RyaWRlLAotCQkJCSAgIEk5MTVfVElM SU5HX05PTkUsCi0JCQkJICAgMCwgMCwgLyogc3JjX3gsIHNyY195ICovCi0JCQkJICAgZmItPndp ZHRoLCBmYi0+aGVpZ2h0LAotCQkJCSAgIGlndF9kcm1fZm9ybWF0X3RvX2JwcChmYi0+ZHJtX2Zv cm1hdCksCi0JCQkJICAgZmItPmdlbV9oYW5kbGUsCi0JCQkJICAgZmItPm9mZnNldHNbMF0sCi0J CQkJICAgZmItPnN0cmlkZSwKLQkJCQkgICBvYmpfdGlsaW5nLAotCQkJCSAgIDAsIDAgLyogZHN0 X3gsIGRzdF95ICovKTsKLQotCWdlbV9zeW5jKGJsaXQtPmZkLCBibGl0LT5saW5lYXIuaGFuZGxl KTsKLQlnZW1fY2xvc2UoYmxpdC0+ZmQsIGJsaXQtPmxpbmVhci5oYW5kbGUpOworCWJsaXQtPmZi LT5jYWlyb19zdXJmYWNlID0gTlVMTDsKKworCWZyZWVfbGluZWFyX21hcHBpbmcoYmxpdC0+ZmQs IGJsaXQtPmZiLCAmYmxpdC0+bGluZWFyKTsKIAogCWZyZWUoYmxpdCk7CiB9CiAKLXN0YXRpYyB2 b2lkIGNyZWF0ZV9jYWlyb19zdXJmYWNlX19ibGl0KGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIp CitzdGF0aWMgdm9pZCBzZXR1cF9saW5lYXJfbWFwcGluZyhpbnQgZmQsIHN0cnVjdCBpZ3RfZmIg KmZiLCBzdHJ1Y3QgZmJfYmxpdF9saW5lYXIgKmxpbmVhcikKIHsKLQlzdHJ1Y3QgZmJfYmxpdF91 cGxvYWQgKmJsaXQ7Ci0JY2Fpcm9fZm9ybWF0X3QgY2Fpcm9fZm9ybWF0OwogCXVuc2lnbmVkIGlu dCBvYmpfdGlsaW5nID0gaWd0X2ZiX21vZF90b190aWxpbmcoZmItPnRpbGluZyk7Ci0JdWludDMy X3Qgb2Zmc2V0c1s0XTsKLQotCWJsaXQgPSBtYWxsb2Moc2l6ZW9mKCpibGl0KSk7Ci0JaWd0X2Fz c2VydChibGl0KTsKKwlpbnQgaTsKIAogCS8qCiAJICogV2UgY3JlYXRlIGEgbGluZWFyIEJPIHRo YXQgd2UnbGwgbWFwIGZvciB0aGUgQ1BVIHRvIHdyaXRlIHRvICh1c2luZwogCSAqIGNhaXJvKS4g VGhpcyBsaW5lYXIgYm8gd2lsbCBiZSB0aGVuIGJsaXR0ZWQgdG8gaXRzIGZpbmFsCiAJICogZGVz dGluYXRpb24sIHRpbGluZyBpdCBhdCB0aGUgc2FtZSB0aW1lLgogCSAqLwotCWJsaXQtPmxpbmVh ci5oYW5kbGUgPSBjcmVhdGVfYm9fZm9yX2ZiKGZkLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCisJ bGluZWFyLT5oYW5kbGUgPSBjcmVhdGVfYm9fZm9yX2ZiKGZkLCBmYi0+d2lkdGgsIGZiLT5oZWln aHQsCiAJCQkJCSAgICAgICBsb29rdXBfZHJtX2Zvcm1hdChmYi0+ZHJtX2Zvcm1hdCksCiAJCQkJ CSAgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCAwLAotCQkJCQkgICAgICAgMCwgJmJs aXQtPmxpbmVhci5zaXplLAotCQkJCQkgICAgICAgJmJsaXQtPmxpbmVhci5zdHJpZGUsCi0JCQkJ CSAgICAgICBvZmZzZXRzLCAmYmxpdC0+bGluZWFyLmlzX2R1bWIpOwotCi0JaWd0X2Fzc2VydChi bGl0LT5saW5lYXIuaGFuZGxlID4gMCk7CisJCQkJCSAgICAgICAwLCAmbGluZWFyLT5zaXplLAor CQkJCQkgICAgICAgJmxpbmVhci0+c3RyaWRlLAorCQkJCQkgICAgICAgbGluZWFyLT5vZmZzZXRz LCAmbGluZWFyLT5pc19kdW1iKTsKIAotCWJsaXQtPmZkID0gZmQ7Ci0JYmxpdC0+ZmIgPSBmYjsK KwlpZ3RfYXNzZXJ0KGxpbmVhci0+aGFuZGxlID4gMCk7CiAKIAkvKiBDb3B5IGZiIGNvbnRlbnQg dG8gbGluZWFyIEJPICovCi0JZ2VtX3NldF9kb21haW4oZmQsIGJsaXQtPmxpbmVhci5oYW5kbGUs CisJZ2VtX3NldF9kb21haW4oZmQsIGxpbmVhci0+aGFuZGxlLAogCQkJSTkxNV9HRU1fRE9NQUlO X0dUVCwgMCk7CiAKLQlpZ3RfYmxpdHRlcl9mYXN0X2NvcHlfX3JhdyhmZCwKLQkJCQkgICBmYi0+ Z2VtX2hhbmRsZSwKLQkJCQkgICBmYi0+b2Zmc2V0c1swXSwKLQkJCQkgICBmYi0+c3RyaWRlLAot CQkJCSAgIG9ial90aWxpbmcsCi0JCQkJICAgMCwgMCwgLyogc3JjX3gsIHNyY195ICovCi0JCQkJ ICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAotCQkJCSAgIGlndF9kcm1fZm9ybWF0X3RvX2JwcChm Yi0+ZHJtX2Zvcm1hdCksCi0JCQkJICAgYmxpdC0+bGluZWFyLmhhbmRsZSwgMCwKLQkJCQkgICBi bGl0LT5saW5lYXIuc3RyaWRlLAotCQkJCSAgIEk5MTVfVElMSU5HX05PTkUsCi0JCQkJICAgMCwg MCAvKiBkc3RfeCwgZHN0X3kgKi8pOwotCi0JZ2VtX3N5bmMoZmQsIGJsaXQtPmxpbmVhci5oYW5k bGUpOwotCi0JZ2VtX3NldF9kb21haW4oZmQsIGJsaXQtPmxpbmVhci5oYW5kbGUsCisJZm9yIChp ID0gMDsgaSA8IGZiLT5udW1fcGxhbmVzOyBpKyspCisJCWlndF9ibGl0dGVyX2Zhc3RfY29weV9f cmF3KGZkLAorCQkJCQkgIGZiLT5nZW1faGFuZGxlLAorCQkJCQkgIGZiLT5vZmZzZXRzW2ldLAor CQkJCQkgIGZiLT5zdHJpZGUsCisJCQkJCSAgb2JqX3RpbGluZywKKwkJCQkJICAwLCAwLCAvKiBz cmNfeCwgc3JjX3kgKi8KKwkJCQkJICBmYi0+cGxhbmVfd2lkdGhbaV0sIGZiLT5wbGFuZV9oZWln aHRbaV0sCisJCQkJCSAgZmItPnBsYW5lX2JwcFtpXSwKKwkJCQkJICBsaW5lYXItPmhhbmRsZSwg bGluZWFyLT5vZmZzZXRzW2ldLAorCQkJCQkgIGxpbmVhci0+c3RyaWRlLAorCQkJCQkgIEk5MTVf VElMSU5HX05PTkUsCisJCQkJCSAgMCwgMCAvKiBkc3RfeCwgZHN0X3kgKi8pOworCisJZ2VtX3N5 bmMoZmQsIGxpbmVhci0+aGFuZGxlKTsKKworCWdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXItPmhh bmRsZSwKIAkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9DUFUp OwogCiAJLyogU2V0dXAgY2Fpcm8gY29udGV4dCAqLwotCWJsaXQtPmxpbmVhci5tYXAgPSBnZW1f bW1hcF9fY3B1KGZkLAotCQkJCQkgYmxpdC0+bGluZWFyLmhhbmRsZSwKLQkJCQkJIDAsCi0JCQkJ CSBibGl0LT5saW5lYXIuc2l6ZSwKLQkJCQkJIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCWxp bmVhci0+bWFwID0gZ2VtX21tYXBfX2NwdShmZCwgbGluZWFyLT5oYW5kbGUsCisJCQkJICAgIDAs IGxpbmVhci0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cit9CisKK3N0YXRpYyB2b2lk IGNyZWF0ZV9jYWlyb19zdXJmYWNlX19ibGl0KGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIpCit7 CisJc3RydWN0IGZiX2JsaXRfdXBsb2FkICpibGl0OworCWNhaXJvX2Zvcm1hdF90IGNhaXJvX2Zv cm1hdDsKKworCWJsaXQgPSBtYWxsb2Moc2l6ZW9mKCpibGl0KSk7CisJaWd0X2Fzc2VydChibGl0 KTsKKworCWJsaXQtPmZkID0gZmQ7CisJYmxpdC0+ZmIgPSBmYjsKKwlzZXR1cF9saW5lYXJfbWFw cGluZyhmZCwgZmIsICZibGl0LT5saW5lYXIpOwogCiAJY2Fpcm9fZm9ybWF0ID0gZHJtX2Zvcm1h dF90b19jYWlybyhmYi0+ZHJtX2Zvcm1hdCk7CiAJZmItPmNhaXJvX3N1cmZhY2UgPQpAQCAtMTI4 NCw2ICsxMzA1LDIzMiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGlu dCBmZCwgc3RydWN0IGlndF9mYiAqZmIpCiAJCQkJICAgIGZiLCBkZXN0cm95X2NhaXJvX3N1cmZh Y2VfX2d0dCk7CiB9CiAKK3N0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkIHsKKwlpbnQgZmQ7 CisJc3RydWN0IGlndF9mYiAqZmI7CisKKwlzdHJ1Y3QgeworCQl1aW50OF90ICptYXA7CisJCXVu c2lnbmVkIHN0cmlkZSwgc2l6ZTsKKwl9IHJnYjI0OworCisJc3RydWN0IGZiX2JsaXRfbGluZWFy IGxpbmVhcjsKK307CisKK3N0YXRpYyB1aW50OF90IGNsYW1wcmdiKGZsb2F0IHZhbCkgeworCWlm ICh2YWwgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAodmFsID4gMjU1KQorCQlyZXR1cm4gMjU1Owor CisJcmV0dXJuICh1aW50OF90KXZhbDsKK30KKworc3RhdGljIHZvaWQgY29udmVydF9udjEyX3Rv X3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAq YmxpdCkKK3sKKwlpbnQgaSwgajsKKwljb25zdCB1aW50OF90ICp5LCAqdXY7CisJdWludDhfdCAq cmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7CisJdW5zaWduZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+ cmdiMjQuc3RyaWRlLCBwbGFuYXJfc3RyaWRlID0gYmxpdC0+bGluZWFyLnN0cmlkZTsKKwl1aW50 OF90ICpidWYgPSBtYWxsb2MoYmxpdC0+bGluZWFyLnNpemUpOworCisJLyoKKwkgKiBSZWFkaW5n IGZyb20gdGhlIEJPIGlzIGF3ZnVsbHkgc2xvdyBiZWNhdXNlIG9mIGxhY2sgb2YgcmVhZCBjYWNo aW5nLAorCSAqIGl0J3MgZmFzdGVyIHRvIGNvcHkgdGhlIHdob2xlIEJPIHRvIGEgdGVtcG9yYXJ5 IGJ1ZmZlciBhbmQgY29udmVydAorCSAqIGZyb20gdGhlcmUuCisJICovCisJbWVtY3B5KGJ1Ziwg YmxpdC0+bGluZWFyLm1hcCwgYmxpdC0+bGluZWFyLnNpemUpOworCXkgPSAmYnVmW2JsaXQtPmxp bmVhci5vZmZzZXRzWzBdXTsKKwl1diA9ICZidWZbYmxpdC0+bGluZWFyLm9mZnNldHNbMV1dOwor CisJZm9yIChpID0gMDsgaSA8IGZiLT5oZWlnaHQgLyAyOyBpKyspIHsKKwkJZm9yIChqID0gMDsg aiA8IGZiLT53aWR0aDsgaisrKSB7CisJCQlmbG9hdCByXywgZ18sIGJfLCB5MCwgeTEsIGNiLCBj cjsKKwkJCS8qIENvbnZlcnQgMXgyIHBpeGVsIGJsb2NrcyAqLworCisJCQl5MCA9IDEuMTY0ZiAq ICh5W2pdIC0gMTYuZik7CisJCQl5MSA9IDEuMTY0ZiAqICh5W2ogKyBwbGFuYXJfc3RyaWRlXSAt IDE2LmYpOworCisJCQljYiA9IHV2W2ogJiB+MV0gLSAxMjguZjsKKwkJCWNyID0gdXZbaiB8IDFd IC0gMTI4LmY7CisKKwkJCXJfID0gMC4wMDBmICogY2IgKyAgMS43OTNmICogY3I7CisJCQlnXyA9 IC0wLjIxM2YgKiBjYiArIC0wLjUzM2YgKiBjcjsKKwkJCWJfID0gMi4xMTJmICogY2IgKyAgMC4w MDBmICogY3I7CisKKwkJCXJnYjI0W2ogKiA0ICsgMl0gPSBjbGFtcHJnYih5MCArIHJfKTsKKwkJ CXJnYjI0W2ogKiA0ICsgMiArIHJnYjI0X3N0cmlkZV0gPSBjbGFtcHJnYih5MSArIHJfKTsKKwor CQkJcmdiMjRbaiAqIDQgKyAxXSA9IGNsYW1wcmdiKHkwICsgZ18pOworCQkJcmdiMjRbaiAqIDQg KyAxICsgcmdiMjRfc3RyaWRlXSA9IGNsYW1wcmdiKHkxICsgZ18pOworCisJCQlyZ2IyNFtqICog NF0gPSBjbGFtcHJnYih5MCArIGJfKTsKKwkJCXJnYjI0W2ogKiA0ICsgcmdiMjRfc3RyaWRlXSA9 IGNsYW1wcmdiKHkxICsgYl8pOworCQl9CisKKwkJcmdiMjQgKz0gMiAqIHJnYjI0X3N0cmlkZTsK KwkJeSArPSAyICogcGxhbmFyX3N0cmlkZTsKKwkJdXYgKz0gcGxhbmFyX3N0cmlkZTsKKwl9CisK KwlpZiAoZmItPmhlaWdodCAmIDEpIHsKKwkJLyogQ29udmVydCBsYXN0IHJvdyAqLworCQlmb3Ig KGogPSAwOyBqIDwgZmItPndpZHRoOyBqKyspIHsKKwkJCWZsb2F0IHJfLCBnXywgYl8sIHkwLCBj YiwgY3I7CisJCQkvKiBDb252ZXJ0IHNpbmdsZSBwaXhlbCAqLworCisJCQljYiA9IHV2W2ogJiB+ MV0gLSAxMjguZjsKKwkJCWNyID0gdXZbaiB8IDFdIC0gMTI4LmY7CisKKwkJCXkwID0gMS4xNjRm ICogKHlbal0gLSAxNi5mKTsKKwkJCXJfID0gIDAuMDAwZiAqIGNiICsgIDEuNzkzZiAqIGNyOwor CQkJZ18gPSAtMC4yMTNmICogY2IgKyAtMC41MzNmICogY3I7CisJCQliXyA9ICAyLjExMmYgKiBj YiArICAwLjAwMGYgKiBjcjsKKworCQkJcmdiMjRbaiAqIDQgKyAyXSA9IGNsYW1wcmdiKHkwICsg cl8pOworCQkJcmdiMjRbaiAqIDQgKyAxXSA9IGNsYW1wcmdiKHkwICsgZ18pOworCQkJcmdiMjRb aiAqIDRdID0gY2xhbXByZ2IoeTAgKyBiXyk7CisJCX0KKwl9CisKKwlmcmVlKGJ1Zik7Cit9CisK K3N0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9fbnYxMihzdHJ1Y3QgaWd0X2ZiICpmYiwgc3Ry dWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgKmJsaXQpCit7CisJaW50IGksIGo7CisJdWludDhf dCAqeSA9ICZibGl0LT5saW5lYXIubWFwW2JsaXQtPmxpbmVhci5vZmZzZXRzWzBdXTsKKwl1aW50 OF90ICp1diA9ICZibGl0LT5saW5lYXIubWFwW2JsaXQtPmxpbmVhci5vZmZzZXRzWzFdXTsKKwlj b25zdCB1aW50OF90ICpyZ2IyNCA9IGJsaXQtPnJnYjI0Lm1hcDsKKwl1bnNpZ25lZCByZ2IyNF9z dHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGU7CisJdW5zaWduZWQgcGxhbmFyX3N0cmlkZSA9IGJs aXQtPmxpbmVhci5zdHJpZGU7CisKKwlpZ3RfYXNzZXJ0X2YoZmItPmRybV9mb3JtYXQgPT0gRFJN X0ZPUk1BVF9OVjEyLAorCQkgICAgICJDb252ZXJzaW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgIU5W MTIgcGxhbmFyIGZvcm1hdHNcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGZiLT5wbGFuZV9oZWln aHRbMF07IGkrKykgeworCQkvKiBVc2UgbGltaXRlZCBjb2xvciByYW5nZSBCVC43MDkgKi8KKwor CQlmb3IgKGogPSAwOyBqIDwgZmItPnBsYW5lX3dpZHRoWzBdOyBqKyspIHsKKwkJCWZsb2F0IHlm ID0gMC4xODNmICogcmdiMjRbaiAqIDQgKyAyXSArCisJCQkJICAgMC42MTRmICogcmdiMjRbaiAq IDQgKyAxXSArCisJCQkJICAgMC4wNjJmICogcmdiMjRbaiAqIDRdICsgMTY7CisKKwkJCXlbal0g PSAodWludDhfdCl5ZjsKKwkJfQorCisJCXJnYjI0ICs9IHJnYjI0X3N0cmlkZTsKKwkJeSArPSBw bGFuYXJfc3RyaWRlOworCX0KKworCXJnYjI0ID0gYmxpdC0+cmdiMjQubWFwOworCisJZm9yIChp ID0gMDsgaSA8IGZiLT5oZWlnaHQgLyAyOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGZiLT5w bGFuZV93aWR0aFsxXTsgaisrKSB7CisJCQkvKgorCQkJICogUGl4ZWwgY2VudGVyIGZvciBDYidD cicgaXMgYmV0d2VlbiB0aGUgbGVmdCB0b3AgYW5kCisJCQkgKiBib3R0b20gcGl4ZWwgaW4gYSAy eDIgYmxvY2ssIHNvIHRha2UgdGhlIGF2ZXJhZ2UuCisJCQkgKi8KKwkJCWZsb2F0IHVmID0gLTAu MTAxZi8yICogcmdiMjRbaiAqIDggKyAyXSArCisJCQkJICAgLTAuMTAxZi8yICogcmdiMjRbaiAq IDggKyAyICsgcmdiMjRfc3RyaWRlXSArCisJCQkJICAgLTAuMzM5Zi8yICogcmdiMjRbaiAqIDgg KyAxXSArCisJCQkJICAgLTAuMzM5Zi8yICogcmdiMjRbaiAqIDggKyAxICsgcmdiMjRfc3RyaWRl XSArCisJCQkJICAgIDAuNDM5Zi8yICogcmdiMjRbaiAqIDhdICsKKwkJCQkgICAgMC40MzlmLzIg KiByZ2IyNFtqICogOCArIHJnYjI0X3N0cmlkZV0gKyAxMjg7CisJCQlmbG9hdCB2ZiA9ICAwLjQz OWYvMiAqIHJnYjI0W2ogKiA4ICsgMl0gKworCQkJCSAgICAwLjQzOWYvMiAqIHJnYjI0W2ogKiA4 ICsgMiArIHJnYjI0X3N0cmlkZV0gKworCQkJCSAgIC0wLjMzOWYvMiAqIHJnYjI0W2ogKiA4ICsg MV0gKworCQkJCSAgIC0wLjMzOWYvMiAqIHJnYjI0W2ogKiA4ICsgMSArIHJnYjI0X3N0cmlkZV0g KworCQkJCSAgIC0wLjA0MGYvMiAqIHJnYjI0W2ogKiA4XSArCisJCQkJICAgLTAuMDQwZi8yICog cmdiMjRbaiAqIDggKyByZ2IyNF9zdHJpZGVdICsgMTI4OworCQkJdXZbaiAqIDJdID0gKHVpbnQ4 X3QpdWY7CisJCQl1dltqICogMiArIDFdID0gKHVpbnQ4X3QpdmY7CisJCX0KKworCQlyZ2IyNCAr PSAyICogcmdiMjRfc3RyaWRlOworCQl1diArPSBwbGFuYXJfc3RyaWRlOworCX0KKworCS8qIExh c3Qgcm93IGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQgYmV0d2VlbiAyIHBpeGVscywgdGFrZSB0aGUg c2luZ2xlIHZhbHVlICovCisJaWYgKGkgPCBmYi0+cGxhbmVfaGVpZ2h0WzFdKSB7CisJCWZvciAo aiA9IDA7IGogPCBmYi0+cGxhbmVfd2lkdGhbMV07IGorKykgeworCQkJZmxvYXQgdWYgPSAtMC4x MDFmICogcmdiMjRbaiAqIDggKyAyXSArCisJCQkJICAgLTAuMzM5ZiAqIHJnYjI0W2ogKiA4ICsg MV0gKworCQkJCSAgICAwLjQzOWYgKiByZ2IyNFtqICogOF0gKyAxMjg7CisJCQlmbG9hdCB2ZiA9 ICAwLjQzOWYgKiByZ2IyNFtqICogOCArIDJdICsKKwkJCQkgICAtMC4zMzlmICogcmdiMjRbaiAq IDggKyAxXSArCisJCQkJICAgLTAuMDQwZiAqIHJnYjI0W2ogKiA4XSArIDEyODsKKworCQkJdXZb aiAqIDJdID0gKHVpbnQ4X3QpdWY7CisJCQl1dltqICogMiArIDFdID0gKHVpbnQ4X3QpdmY7CisJ CX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfY2Fpcm9fc3VyZmFjZV9fY29udmVydCh2 b2lkICphcmcpCit7CisJc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgKmJsaXQgPSBhcmc7 CisJc3RydWN0IGlndF9mYiAqZmIgPSBibGl0LT5mYjsKKworCS8qIENvbnZlcnQgYmFjayB0byBw bGFuYXIhICovCisJaWd0X2Fzc2VydF9mKGZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfTlYx MiwKKwkJICAgICAiQ29udmVyc2lvbiBub3QgaW1wbGVtZW50ZWQgZm9yICFOVjEyIHBsYW5hciBm b3JtYXRzXG4iKTsKKworCWNvbnZlcnRfcmdiMjRfdG9fbnYxMihmYiwgYmxpdCk7CisKKwltdW5t YXAoYmxpdC0+cmdiMjQubWFwLCBibGl0LT5yZ2IyNC5zaXplKTsKKworCWlmIChibGl0LT5saW5l YXIuaGFuZGxlKQorCQlmcmVlX2xpbmVhcl9tYXBwaW5nKGJsaXQtPmZkLCBibGl0LT5mYiwgJmJs aXQtPmxpbmVhcik7CisJZWxzZQorCQlnZW1fbXVubWFwKGJsaXQtPmxpbmVhci5tYXAsIGZiLT5z aXplKTsKKworCWZyZWUoYmxpdCk7CisKKwlmYi0+Y2Fpcm9fc3VyZmFjZSA9IE5VTEw7Cit9CisK K3N0YXRpYyB2b2lkIGNyZWF0ZV9jYWlyb19zdXJmYWNlX19jb252ZXJ0KGludCBmZCwgc3RydWN0 IGlndF9mYiAqZmIpCit7CisJc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgKmJsaXQgPSBt YWxsb2Moc2l6ZW9mKCpibGl0KSk7CisJaWd0X2Fzc2VydChibGl0KTsKKworCWJsaXQtPmZkID0g ZmQ7CisJYmxpdC0+ZmIgPSBmYjsKKwlibGl0LT5yZ2IyNC5zdHJpZGUgPSBBTElHTihmYi0+d2lk dGggKiA0LCAxNik7CisJYmxpdC0+cmdiMjQuc2l6ZSA9IEFMSUdOKGJsaXQtPnJnYjI0LnN0cmlk ZSAqIGZiLT5oZWlnaHQsIHN5c2NvbmYoX1NDX1BBR0VTSVpFKSk7CisJYmxpdC0+cmdiMjQubWFw ID0gbW1hcChOVUxMLCBibGl0LT5yZ2IyNC5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBN QVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KGJsaXQtPnJn YjI0Lm1hcCAhPSBNQVBfRkFJTEVEKTsKKworCWlmIChmYi0+dGlsaW5nID09IExPQ0FMX0k5MTVf Rk9STUFUX01PRF9ZX1RJTEVEIHx8CisJICAgIGZiLT50aWxpbmcgPT0gTE9DQUxfSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEKSB7CisJCXNldHVwX2xpbmVhcl9tYXBwaW5nKGZkLCBmYiwgJmJsaXQt PmxpbmVhcik7CisJfSBlbHNlIHsKKwkJYmxpdC0+bGluZWFyLmhhbmRsZSA9IDA7CisJCWJsaXQt PmxpbmVhci5tYXAgPSBnZW1fbW1hcF9fZ3R0KGZkLCBmYi0+Z2VtX2hhbmRsZSwgZmItPnNpemUs CisJCQkJCSAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCQlpZ3RfYXNzZXJ0KGJsaXQt PmxpbmVhci5tYXApOworCQlibGl0LT5saW5lYXIuc3RyaWRlID0gZmItPnN0cmlkZTsKKwkJYmxp dC0+bGluZWFyLnNpemUgPSBmYi0+c2l6ZTsKKwkJbWVtY3B5KGJsaXQtPmxpbmVhci5vZmZzZXRz LCBmYi0+b2Zmc2V0cywgc2l6ZW9mKGZiLT5vZmZzZXRzKSk7CisJfQorCisJLyogQ29udmVydCB0 byBsaW5lYXIhICovCisJaWd0X2Fzc2VydF9mKGZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRf TlYxMiwKKwkJICAgICAiQ29udmVyc2lvbiBub3QgaW1wbGVtZW50ZWQgZm9yICFOVjEyIHBsYW5h ciBmb3JtYXRzXG4iKTsKKwljb252ZXJ0X252MTJfdG9fcmdiMjQoZmIsIGJsaXQpOworCisJZmIt PmNhaXJvX3N1cmZhY2UgPQorCQljYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShi bGl0LT5yZ2IyNC5tYXAsCisJCQkJCQkgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorCQkJCQkJICAg IGZiLT53aWR0aCwgZmItPmhlaWdodCwKKwkJCQkJCSAgICBibGl0LT5yZ2IyNC5zdHJpZGUpOwor CisJY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKGZiLT5jYWlyb19zdXJmYWNlLAorCQkJCSAg ICAoY2Fpcm9fdXNlcl9kYXRhX2tleV90ICopY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZlcnQs CisJCQkJICAgIGJsaXQsIGRlc3Ryb3lfY2Fpcm9fc3VyZmFjZV9fY29udmVydCk7Cit9CisKIC8q KgogICogaWd0X2dldF9jYWlyb19zdXJmYWNlOgogICogQGZkOiBvcGVuIGRybSBmaWxlIGRlc2Ny aXB0b3IKQEAgLTEyOTcsMTEgKzE1NDQsMTAgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1 cmZhY2VfX2d0dChpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQogICovCiBjYWlyb19zdXJmYWNl X3QgKmlndF9nZXRfY2Fpcm9fc3VyZmFjZShpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQogewot CS8qIFRoaXMgZG9lc24ndCB3b3JrIGZvciBwbGFuYXIgZm9ybWF0cyBmb3Igbm93LCBidXQgd2Ug d2lsbCBjb252ZXJ0IHRoZW0gdG8gUkdCMjQgaW4gdGhlIGZ1dHVyZS4gKi8KLQlpZ3RfYXNzZXJ0 KGZiLT5udW1fcGxhbmVzIDwgMik7Ci0KIAlpZiAoZmItPmNhaXJvX3N1cmZhY2UgPT0gTlVMTCkg ewotCQlpZiAoZmItPnRpbGluZyA9PSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAor CQlpZiAoZmItPm51bV9wbGFuZXMgPiAxKQorCQkJY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZl cnQoZmQsIGZiKTsKKwkJZWxzZSBpZiAoZmItPnRpbGluZyA9PSBMT0NBTF9JOTE1X0ZPUk1BVF9N T0RfWV9USUxFRCB8fAogCQkgICAgZmItPnRpbGluZyA9PSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRUQpCiAJCQljcmVhdGVfY2Fpcm9fc3VyZmFjZV9fYmxpdChmZCwgZmIpOwogCQllbHNl Ci0tIAoyLjE1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=