From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 03F256E386 for ; Thu, 7 Feb 2019 09:21:39 +0000 (UTC) From: Maarten Lankhorst Date: Thu, 7 Feb 2019 10:21:36 +0100 Message-Id: <20190207092136.10659-4-maarten.lankhorst@linux.intel.com> In-Reply-To: <20190207092136.10659-1-maarten.lankhorst@linux.intel.com> References: <20190207092136.10659-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH v2 4/4] lib/igt_fb: Add support for Y410/Y416 formats, v2. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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: WTQxMCBpcyBwYWNrZWQgd2l0aCBjb21wcmVzc2VkIGEgY2hhbm5lbCBhbmQgb25seSAzMiBicHAs IGxpa2UKMTAgYml0cyBSR0IgZm9ybWF0cy4gWTQxNiBpcyBhIHBhY2tlZCAxNiBiaXRzIHBlciBj b21wb25lbnQgZm9ybWF0LgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBSZWJhc2Ugb24gdG9wIG9mIHVw c3RyZWFtIFlVViBjaGFuZ2VzLgoKU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1h YXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KLS0tCiBpbmNsdWRlL2RybS11YXBpL2Ry bV9mb3VyY2MuaCB8ICAgMyArCiBsaWIvaWd0X2NvbG9yX2VuY29kaW5nLmMgICAgICB8ICAgMiAr CiBsaWIvaWd0X2ZiLmMgICAgICAgICAgICAgICAgICB8IDIwNCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDE4NSBpbnNlcnRpb25zKCspLCAyNCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS11YXBpL2RybV9mb3VyY2MuaCBi L2luY2x1ZGUvZHJtLXVhcGkvZHJtX2ZvdXJjYy5oCmluZGV4IGZmOWVhMDI3NjZlZS4uNjJiNGJh MDIzYTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS11YXBpL2RybV9mb3VyY2MuaAorKysgYi9p bmNsdWRlL2RybS11YXBpL2RybV9mb3VyY2MuaApAQCAtMTU3LDYgKzE1Nyw5IEBAIGV4dGVybiAi QyIgewogI2RlZmluZSBEUk1fRk9STUFUX1kyMTIJCWZvdXJjY19jb2RlKCdZJywgJzInLCAnMScs ICcyJykKICNkZWZpbmUgRFJNX0ZPUk1BVF9ZMjE2CQlmb3VyY2NfY29kZSgnWScsICcyJywgJzEn LCAnNicpCiAKKyNkZWZpbmUgRFJNX0ZPUk1BVF9ZNDEwCQlmb3VyY2NfY29kZSgnWScsICc0Jywg JzEnLCAnMCcpIC8qIFszMTowXSBBOlY6WTpVIDI6MTA6MTA6MTAgbGl0dGxlIGVuZGlhbiAqLwor I2RlZmluZSBEUk1fRk9STUFUX1k0MTYJCWZvdXJjY19jb2RlKCdZJywgJzQnLCAnMScsICc2Jykg LyogWzEyNzowXSBBOlY6WTpVIDE2OjE2OjE2OjE2IGxpdHRsZSBlbmRpYW4gKi8KKwogLyoKICAq IHBhY2tlZCBZQ2JDcjQyMCAyeDIgdGlsZWQgZm9ybWF0cwogICogZmlyc3QgNjQgYml0cyB3aWxs IGNvbnRhaW4gWSxDYixDciBjb21wb25lbnRzIGZvciBhIDJ4MiB0aWxlCmRpZmYgLS1naXQgYS9s aWIvaWd0X2NvbG9yX2VuY29kaW5nLmMgYi9saWIvaWd0X2NvbG9yX2VuY29kaW5nLmMKaW5kZXgg NmY4MmZjZWM2MmU0Li5iYzk1NzVmY2ExYjQgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfY29sb3JfZW5j b2RpbmcuYworKysgYi9saWIvaWd0X2NvbG9yX2VuY29kaW5nLmMKQEAgLTE0Nyw2ICsxNDcsOCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2VuY29kaW5nX2Zvcm1hdCB7CiAJeyBEUk1fRk9S TUFUX1kyMTAsIDY1NDcyLmYsIDQwOTYuZiwgNjAxNjAuZiwgNDA5Ni5mLCAzMjc2OC5mLCA2MTQ0 MC5mIH0sCiAJeyBEUk1fRk9STUFUX1kyMTIsIDY1NTIwLmYsIDQwOTYuZiwgNjAxNjAuZiwgNDA5 Ni5mLCAzMjc2OC5mLCA2MTQ0MC5mIH0sCiAJeyBEUk1fRk9STUFUX1kyMTYsIDY1NTM1LmYsIDQw OTYuZiwgNjAxNjAuZiwgNDA5Ni5mLCAzMjc2OC5mLCA2MTQ0MC5mIH0sCisJeyBEUk1fRk9STUFU X1k0MTAsIDEwMjMuZiwgNjQuZiwgOTQwLmYsIDY0LmYsIDUxMi5mLCA5NjAuZiB9LAorCXsgRFJN X0ZPUk1BVF9ZNDE2LCA2NTUzNS5mLCA0MDk2LmYsIDYwMTYwLmYsIDQwOTYuZiwgMzI3NjguZiwg NjE0NDAuZiB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9lbmNvZGluZ19mb3Jt YXQgKmxvb2t1cF9mb3VyY2ModWludDMyX3QgZm91cmNjKQpkaWZmIC0tZ2l0IGEvbGliL2lndF9m Yi5jIGIvbGliL2lndF9mYi5jCmluZGV4IGNjY2Q2YmI5ODM5NS4uYjhjODJiOTg1ZmQzIDEwMDY0 NAotLS0gYS9saWIvaWd0X2ZiLmMKKysrIGIvbGliL2lndF9mYi5jCkBAIC0xOTksNiArMTk5LDE2 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0IHsKIAkgIC5udW1fcGxh bmVzID0gMSwgLnBsYW5lX2JwcCA9IHsgMzIsIH0sCiAJICAuaHN1YiA9IDIsIC52c3ViID0gMSwK IAl9LAorCXsgLm5hbWUgPSAiWTQxMCIsIC5kZXB0aCA9IC0xLCAuZHJtX2lkID0gRFJNX0ZPUk1B VF9ZNDEwLAorCSAgLmNhaXJvX2lkID0gQ0FJUk9fRk9STUFUX1JHQkExMjhGLAorCSAgLm51bV9w bGFuZXMgPSAxLCAucGxhbmVfYnBwID0geyAzMiwgfSwKKwkgIC5oc3ViID0gMSwgLnZzdWIgPSAx LAorCX0sCisJeyAubmFtZSA9ICJZNDE2IiwgLmRlcHRoID0gLTEsIC5kcm1faWQgPSBEUk1fRk9S TUFUX1k0MTYsCisJICAuY2Fpcm9faWQgPSBDQUlST19GT1JNQVRfUkdCQTEyOEYsCisJICAubnVt X3BsYW5lcyA9IDEsIC5wbGFuZV9icHAgPSB7IDY0LCB9LAorCSAgLmhzdWIgPSAxLCAudnN1YiA9 IDEsCisJfSwKIAl7IC5uYW1lID0gIlAwMTAiLCAuZGVwdGggPSAtMSwgLmRybV9pZCA9IERSTV9G T1JNQVRfUDAxMCwKIAkgIC5jYWlyb19pZCA9IENBSVJPX0ZPUk1BVF9SR0I5NkYsCiAJICAubnVt X3BsYW5lcyA9IDIsIC5wbGFuZV9icHAgPSB7IDE2LCAzMiB9LApAQCAtNTg0LDYgKzU5NCwyOCBA QCBzdGF0aWMgdm9pZCBjbGVhcl95dXZfYnVmZmVyKHN0cnVjdCBpZ3RfZmIgKmZiKQogCQkJZmIt PnN0cmlkZXNbMF0gKiBmYi0+cGxhbmVfaGVpZ2h0WzBdIC8gc2l6ZW9mKHdjaGFyX3QpKTsKIAkJ YnJlYWs7CiAKKwljYXNlIERSTV9GT1JNQVRfWTQxMDoKKwkJd21lbXNldChwdHIgKyBmYi0+b2Zm c2V0c1swXSwKKwkJCWZ1bGxfcmFuZ2UgPyAweGUwMDAwMjAwIDogMHhlMDAxMDIwMCwKKwkJZmIt PnN0cmlkZXNbMF0gKiBmYi0+cGxhbmVfaGVpZ2h0WzBdIC8gc2l6ZW9mKHdjaGFyX3QpKTsKKwkJ YnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1k0MTY6IHsKKwkJc3RydWN0IGF5dXYxNiB7IHVpbnQx Nl90IHUsIHksIHYsIGE7IH07CisJCWNvbnN0IHN0cnVjdCBheXV2MTYgcGl4ZWwgPSB7CisJCQku YSA9IDB4ZmZmZiwKKwkJCS52ID0gZnVsbF9yYW5nZSA/IDAgOiAweDEwMDAsCisJCQkueSA9IDB4 ODAwMCwKKwkJCS51ID0gZnVsbF9yYW5nZSA/IDAgOiAweDEwMDAKKwkJfTsKKworCQlmb3IgKGlu dCBpID0gMDsgaSA8IGZiLT5wbGFuZV9oZWlnaHRbMF07IGkrKykgeworCQkJc3RydWN0IGF5dXYx NiAqY3VyID0gcHRyICsgZmItPm9mZnNldHNbMF0gKyBmYi0+c3RyaWRlc1swXSAqIGk7CisKKwkJ CWZvciAoaW50IGogPSAwOyBpIDwgZmItPnBsYW5lX3dpZHRoWzBdOyBqKyspCisJCQkJKmN1cisr ID0gcGl4ZWw7CisJCX0KKwkJYnJlYWs7CisJCX0KIAl9CiAKIAlpZ3RfZmJfdW5tYXBfYnVmZmVy KGZiLCBwdHIpOwpAQCAtMTY0OSwxMCArMTY4MSwxMSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3Ny Y19wdXQoY29uc3Qgc3RydWN0IGZiX2NvbnZlcnQgKmN2dCwKIH0KIAogc3RydWN0IHl1dl9wYXJh bWV0ZXJzIHsKLQl1bnNpZ25lZAl5X2luYzsKKwl1bnNpZ25lZAlheV9pbmM7CiAJdW5zaWduZWQJ dXZfaW5jOwotCXVuc2lnbmVkCXlfc3RyaWRlOworCXVuc2lnbmVkCWF5X3N0cmlkZTsKIAl1bnNp Z25lZAl1dl9zdHJpZGU7CisJdW5zaWduZWQJYV9vZmZzZXQ7CiAJdW5zaWduZWQJeV9vZmZzZXQ7 CiAJdW5zaWduZWQJdV9vZmZzZXQ7CiAJdW5zaWduZWQJdl9vZmZzZXQ7CkBAIC0xNjY3LDcgKzE3 MDAsNyBAQCBzdGF0aWMgdm9pZCBnZXRfeXV2X3BhcmFtZXRlcnMoc3RydWN0IGlndF9mYiAqZmIs IHN0cnVjdCB5dXZfcGFyYW1ldGVycyAqcGFyYW1zKQogCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgog CWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgogCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgotCQlwYXJhbXMt PnlfaW5jID0gMTsKKwkJcGFyYW1zLT5heV9pbmMgPSAxOwogCQlwYXJhbXMtPnV2X2luYyA9IDI7 CiAJCWJyZWFrOwogCkBAIC0xNjc4LDEyICsxNzExLDEzIEBAIHN0YXRpYyB2b2lkIGdldF95dXZf cGFyYW1ldGVycyhzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IHl1dl9wYXJhbWV0ZXJzICpwYXJh bXMpCiAJY2FzZSBEUk1fRk9STUFUX1kyMTA6CiAJY2FzZSBEUk1fRk9STUFUX1kyMTI6CiAJY2Fz ZSBEUk1fRk9STUFUX1kyMTY6Ci0JCXBhcmFtcy0+eV9pbmMgPSAyOworCQlwYXJhbXMtPmF5X2lu YyA9IDI7CiAJCXBhcmFtcy0+dXZfaW5jID0gNDsKIAkJYnJlYWs7CiAKKwljYXNlIERSTV9GT1JN QVRfWTQxNjoKIAljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JCXBhcmFtcy0+eV9pbmMgPSA0 OworCQlwYXJhbXMtPmF5X2luYyA9IDQ7CiAJCXBhcmFtcy0+dXZfaW5jID0gNDsKIAkJYnJlYWs7 CiAJfQpAQCAtMTY5Myw3ICsxNzI3LDcgQEAgc3RhdGljIHZvaWQgZ2V0X3l1dl9wYXJhbWV0ZXJz KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgeXV2X3BhcmFtZXRlcnMgKnBhcmFtcykKIAljYXNl IERSTV9GT1JNQVRfUDAxMDoKIAljYXNlIERSTV9GT1JNQVRfUDAxMjoKIAljYXNlIERSTV9GT1JN QVRfUDAxNjoKLQkJcGFyYW1zLT55X3N0cmlkZSA9IGZiLT5zdHJpZGVzWzBdOworCQlwYXJhbXMt PmF5X3N0cmlkZSA9IGZiLT5zdHJpZGVzWzBdOwogCQlwYXJhbXMtPnV2X3N0cmlkZSA9IGZiLT5z dHJpZGVzWzFdOwogCQlicmVhazsKIApAQCAtMTcwNSw3ICsxNzM5LDggQEAgc3RhdGljIHZvaWQg Z2V0X3l1dl9wYXJhbWV0ZXJzKHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgeXV2X3BhcmFtZXRl cnMgKnBhcmFtcykKIAljYXNlIERSTV9GT1JNQVRfWTIxMjoKIAljYXNlIERSTV9GT1JNQVRfWTIx NjoKIAljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JCXBhcmFtcy0+eV9zdHJpZGUgPSBmYi0+ c3RyaWRlc1swXTsKKwljYXNlIERSTV9GT1JNQVRfWTQxNjoKKwkJcGFyYW1zLT5heV9zdHJpZGUg PSBmYi0+c3RyaWRlc1swXTsKIAkJcGFyYW1zLT51dl9zdHJpZGUgPSBmYi0+c3RyaWRlc1swXTsK IAkJYnJlYWs7CiAJfQpAQCAtMTc1Nyw2ICsxNzkyLDEzIEBAIHN0YXRpYyB2b2lkIGdldF95dXZf cGFyYW1ldGVycyhzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IHl1dl9wYXJhbWV0ZXJzICpwYXJh bXMpCiAJCXBhcmFtcy0+dl9vZmZzZXQgPSBmYi0+b2Zmc2V0c1swXSArIDY7CiAJCWJyZWFrOwog CisJY2FzZSBEUk1fRk9STUFUX1k0MTY6CisJCXBhcmFtcy0+YV9vZmZzZXQgPSBmYi0+b2Zmc2V0 c1swXSArIDY7CisJCXBhcmFtcy0+eV9vZmZzZXQgPSBmYi0+b2Zmc2V0c1swXSArIDI7CisJCXBh cmFtcy0+dV9vZmZzZXQgPSBmYi0+b2Zmc2V0c1swXTsKKwkJcGFyYW1zLT52X29mZnNldCA9IGZi LT5vZmZzZXRzWzBdICsgNDsKKwkJYnJlYWs7CisKIAljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6 CiAJCXBhcmFtcy0+eV9vZmZzZXQgPSBmYi0+b2Zmc2V0c1swXSArIDE7CiAJCXBhcmFtcy0+dV9v ZmZzZXQgPSBmYi0+b2Zmc2V0c1swXSArIDI7CkBAIC0xODA4LDcgKzE4NTAsNyBAQCBzdGF0aWMg dm9pZCBjb252ZXJ0X3l1dl90b19yZ2IyNChzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQogCQkJd3Jp dGVfcmdiKHJnYl90bXAsICZyZ2IpOwogCiAJCQlyZ2JfdG1wICs9IGJwcDsKLQkJCXlfdG1wICs9 IHBhcmFtcy55X2luYzsKKwkJCXlfdG1wICs9IHBhcmFtcy5heV9pbmM7CiAKIAkJCWlmICgoc3Jj X2ZtdC0+aHN1YiA9PSAxKSB8fCAoaiAlIHNyY19mbXQtPmhzdWIpKSB7CiAJCQkJdV90bXAgKz0g cGFyYW1zLnV2X2luYzsKQEAgLTE4MTcsNyArMTg1OSw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRf eXV2X3RvX3JnYjI0KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCiAJCX0KIAogCQlyZ2IyNCArPSBy Z2IyNF9zdHJpZGU7Ci0JCXkgKz0gcGFyYW1zLnlfc3RyaWRlOworCQl5ICs9IHBhcmFtcy5heV9z dHJpZGU7CiAKIAkJaWYgKChzcmNfZm10LT52c3ViID09IDEpIHx8IChpICUgc3JjX2ZtdC0+dnN1 YikpIHsKIAkJCXUgKz0gcGFyYW1zLnV2X3N0cmlkZTsKQEAgLTE4NjgsNyArMTkxMCw3IEBAIHN0 YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9feXV2KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCiAJ CQlyZ2JfdG1wICs9IGJwcDsKIAogCQkJKnlfdG1wID0geXV2LmRbMF07Ci0JCQl5X3RtcCArPSBw YXJhbXMueV9pbmM7CisJCQl5X3RtcCArPSBwYXJhbXMuYXlfaW5jOwogCiAJCQlpZiAoKGkgJSBk c3RfZm10LT52c3ViKSB8fCAoaiAlIGRzdF9mbXQtPmhzdWIpKQogCQkJCWNvbnRpbnVlOwpAQCAt MTkwNSw3ICsxOTQ3LDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b195dXYoc3RydWN0 IGZiX2NvbnZlcnQgKmN2dCkKIAkJfQogCiAJCXJnYjI0ICs9IHJnYjI0X3N0cmlkZTsKLQkJeSAr PSBwYXJhbXMueV9zdHJpZGU7CisJCXkgKz0gcGFyYW1zLmF5X3N0cmlkZTsKIAogCQlpZiAoKGkg JSBkc3RfZm10LT52c3ViKSA9PSAoZHN0X2ZtdC0+dnN1YiAtIDEpKSB7CiAJCQl1ICs9IHBhcmFt cy51dl9zdHJpZGU7CkBAIC0xOTI5LDEzICsxOTcxLDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlX3Jn YmYoZmxvYXQgKnJnYjI0LCBjb25zdCBzdHJ1Y3QgaWd0X3ZlYzQgKnJnYikKIAlyZ2IyNFsyXSA9 IHJnYi0+ZFsyXTsKIH0KIAotc3RhdGljIHZvaWQgY29udmVydF95dXYxNl90b19mbG9hdChzdHJ1 Y3QgZmJfY29udmVydCAqY3Z0KQorc3RhdGljIHZvaWQgY29udmVydF95dXYxNl90b19mbG9hdChz dHJ1Y3QgZmJfY29udmVydCAqY3Z0LCBib29sIGFscGhhKQogewogCWNvbnN0IHN0cnVjdCBmb3Jt YXRfZGVzY19zdHJ1Y3QgKnNyY19mbXQgPQogCQlsb29rdXBfZHJtX2Zvcm1hdChjdnQtPnNyYy5m Yi0+ZHJtX2Zvcm1hdCk7CiAJaW50IGksIGo7Ci0JdWludDhfdCBmcHAgPSAzOwotCXVpbnQxNl90 ICp5LCAqdSwgKnY7CisJdWludDhfdCBmcHAgPSBhbHBoYSA/IDQgOiAzOworCXVpbnQxNl90ICph LCAqeSwgKnUsICp2OwogCWZsb2F0ICpwdHIgPSBjdnQtPmRzdC5wdHI7CiAJdW5zaWduZWQgaW50 IGZsb2F0X3N0cmlkZSA9IGN2dC0+ZHN0LmZiLT5zdHJpZGVzWzBdIC8gc2l6ZW9mKCpwdHIpOwog CXN0cnVjdCBpZ3RfbWF0NCBtID0gaWd0X3ljYmNyX3RvX3JnYl9tYXRyaXgoY3Z0LT5zcmMuZmIt PmRybV9mb3JtYXQsCkBAIC0xOTU0LDExICsxOTk2LDEzIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRf eXV2MTZfdG9fZmxvYXQoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKIAkJICAgIShwYXJhbXMudV9v ZmZzZXQgJSBzaXplb2YoKmJ1ZikpICYmCiAJCSAgICEocGFyYW1zLnZfb2Zmc2V0ICUgc2l6ZW9m KCpidWYpKSk7CiAKKwlhID0gYnVmICsgcGFyYW1zLmFfb2Zmc2V0IC8gc2l6ZW9mKCpidWYpOwog CXkgPSBidWYgKyBwYXJhbXMueV9vZmZzZXQgLyBzaXplb2YoKmJ1Zik7CiAJdSA9IGJ1ZiArIHBh cmFtcy51X29mZnNldCAvIHNpemVvZigqYnVmKTsKIAl2ID0gYnVmICsgcGFyYW1zLnZfb2Zmc2V0 IC8gc2l6ZW9mKCpidWYpOwogCiAJZm9yIChpID0gMDsgaSA8IGN2dC0+ZHN0LmZiLT5oZWlnaHQ7 IGkrKykgeworCQljb25zdCB1aW50MTZfdCAqYV90bXAgPSBhOwogCQljb25zdCB1aW50MTZfdCAq eV90bXAgPSB5OwogCQljb25zdCB1aW50MTZfdCAqdV90bXAgPSB1OwogCQljb25zdCB1aW50MTZf dCAqdl90bXAgPSB2OwpAQCAtMTk3NSw4ICsyMDE5LDEzIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRf eXV2MTZfdG9fZmxvYXQoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKIAkJCXJnYiA9IGlndF9tYXRy aXhfdHJhbnNmb3JtKCZtLCAmeXV2KTsKIAkJCXdyaXRlX3JnYmYocmdiX3RtcCwgJnJnYik7CiAK KwkJCWlmIChhbHBoYSkgeworCQkJCXJnYl90bXBbM10gPSAoKGZsb2F0KSphX3RtcCkgLyA2NTUz NS5mOworCQkJCWFfdG1wICs9IHBhcmFtcy5heV9pbmM7CisJCQl9CisKIAkJCXJnYl90bXAgKz0g ZnBwOwotCQkJeV90bXAgKz0gcGFyYW1zLnlfaW5jOworCQkJeV90bXAgKz0gcGFyYW1zLmF5X2lu YzsKIAogCQkJaWYgKChzcmNfZm10LT5oc3ViID09IDEpIHx8IChqICUgc3JjX2ZtdC0+aHN1Yikp IHsKIAkJCQl1X3RtcCArPSBwYXJhbXMudXZfaW5jOwpAQCAtMTk4NSw3ICsyMDM0LDkgQEAgc3Rh dGljIHZvaWQgY29udmVydF95dXYxNl90b19mbG9hdChzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQog CQl9CiAKIAkJcHRyICs9IGZsb2F0X3N0cmlkZTsKLQkJeSArPSBwYXJhbXMueV9zdHJpZGUgLyBz aXplb2YoKnkpOworCisJCWEgKz0gcGFyYW1zLmF5X3N0cmlkZSAvIHNpemVvZigqYSk7CisJCXkg Kz0gcGFyYW1zLmF5X3N0cmlkZSAvIHNpemVvZigqeSk7CiAKIAkJaWYgKChzcmNfZm10LT52c3Vi ID09IDEpIHx8IChpICUgc3JjX2ZtdC0+dnN1YikpIHsKIAkJCXUgKz0gcGFyYW1zLnV2X3N0cmlk ZSAvIHNpemVvZigqdSk7CkBAIC0xOTk2LDE0ICsyMDQ3LDE0IEBAIHN0YXRpYyB2b2lkIGNvbnZl cnRfeXV2MTZfdG9fZmxvYXQoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKIAljb252ZXJ0X3NyY19w dXQoY3Z0LCBidWYpOwogfQogCi1zdGF0aWMgdm9pZCBjb252ZXJ0X2Zsb2F0X3RvX3l1djE2KHN0 cnVjdCBmYl9jb252ZXJ0ICpjdnQpCitzdGF0aWMgdm9pZCBjb252ZXJ0X2Zsb2F0X3RvX3l1djE2 KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQsIGJvb2wgYWxwaGEpCiB7CiAJY29uc3Qgc3RydWN0IGZv cm1hdF9kZXNjX3N0cnVjdCAqZHN0X2ZtdCA9CiAJCWxvb2t1cF9kcm1fZm9ybWF0KGN2dC0+ZHN0 LmZiLT5kcm1fZm9ybWF0KTsKIAlpbnQgaSwgajsKLQl1aW50MTZfdCAqeSwgKnUsICp2OworCXVp bnQxNl90ICphLCAqeSwgKnUsICp2OwogCWNvbnN0IGZsb2F0ICpwdHIgPSBjdnQtPnNyYy5wdHI7 Ci0JdWludDhfdCBmcHAgPSAzOworCXVpbnQ4X3QgZnBwID0gYWxwaGEgPyA0IDogMzsKIAl1bnNp Z25lZCBmbG9hdF9zdHJpZGUgPSBjdnQtPnNyYy5mYi0+c3RyaWRlc1swXSAvIHNpemVvZigqcHRy KTsKIAlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF9yZ2JfdG9feWNiY3JfbWF0cml4KGN2dC0+c3Jj LmZiLT5kcm1fZm9ybWF0LAogCQkJCQkJICAgIGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0LApAQCAt MjAxNSwxNiArMjA2NiwxOSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X2Zsb2F0X3RvX3l1djE2KHN0 cnVjdCBmYl9jb252ZXJ0ICpjdnQpCiAJCSAgIGlndF9mb3JtYXRfaXNfeXV2KGN2dC0+ZHN0LmZi LT5kcm1fZm9ybWF0KSk7CiAKIAlnZXRfeXV2X3BhcmFtZXRlcnMoY3Z0LT5kc3QuZmIsICZwYXJh bXMpOwotCWlndF9hc3NlcnQoIShwYXJhbXMueV9vZmZzZXQgJSBzaXplb2YoKnkpKSAmJgorCWln dF9hc3NlcnQoIShwYXJhbXMuYV9vZmZzZXQgJSBzaXplb2YoKmEpKSAmJgorCQkgICAhKHBhcmFt cy55X29mZnNldCAlIHNpemVvZigqeSkpICYmCiAJCSAgICEocGFyYW1zLnVfb2Zmc2V0ICUgc2l6 ZW9mKCp1KSkgJiYKIAkJICAgIShwYXJhbXMudl9vZmZzZXQgJSBzaXplb2YoKnYpKSk7CiAKKwlh ID0gY3Z0LT5kc3QucHRyICsgcGFyYW1zLmFfb2Zmc2V0OwogCXkgPSBjdnQtPmRzdC5wdHIgKyBw YXJhbXMueV9vZmZzZXQ7CiAJdSA9IGN2dC0+ZHN0LnB0ciArIHBhcmFtcy51X29mZnNldDsKIAl2 ID0gY3Z0LT5kc3QucHRyICsgcGFyYW1zLnZfb2Zmc2V0OwogCiAJZm9yIChpID0gMDsgaSA8IGN2 dC0+ZHN0LmZiLT5oZWlnaHQ7IGkrKykgewogCQljb25zdCBmbG9hdCAqcmdiX3RtcCA9IHB0cjsK KwkJdWludDE2X3QgKmFfdG1wID0gYTsKIAkJdWludDE2X3QgKnlfdG1wID0geTsKIAkJdWludDE2 X3QgKnVfdG1wID0gdTsKIAkJdWludDE2X3QgKnZfdG1wID0gdjsKQEAgLTIwMzcsMTAgKzIwOTEs MTUgQEAgc3RhdGljIHZvaWQgY29udmVydF9mbG9hdF90b195dXYxNihzdHJ1Y3QgZmJfY29udmVy dCAqY3Z0KQogCQkJcmVhZF9yZ2JmKCZyZ2IsIHJnYl90bXApOwogCQkJeXV2ID0gaWd0X21hdHJp eF90cmFuc2Zvcm0oJm0sICZyZ2IpOwogCisJCQlpZiAoYWxwaGEpIHsKKwkJCQkqYV90bXAgPSBy Z2JfdG1wWzNdICogNjU1MzUuZiArIC41ZjsKKwkJCQlhX3RtcCArPSBwYXJhbXMuYXlfaW5jOwor CQkJfQorCiAJCQlyZ2JfdG1wICs9IGZwcDsKIAogCQkJKnlfdG1wID0geXV2LmRbMF07Ci0JCQl5 X3RtcCArPSBwYXJhbXMueV9pbmM7CisJCQl5X3RtcCArPSBwYXJhbXMuYXlfaW5jOwogCiAJCQlp ZiAoKGkgJSBkc3RfZm10LT52c3ViKSB8fCAoaiAlIGRzdF9mbXQtPmhzdWIpKQogCQkJCWNvbnRp bnVlOwpAQCAtMjA3Nyw3ICsyMTM2LDggQEAgc3RhdGljIHZvaWQgY29udmVydF9mbG9hdF90b195 dXYxNihzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQogCQl9CiAKIAkJcHRyICs9IGZsb2F0X3N0cmlk ZTsKLQkJeSArPSBwYXJhbXMueV9zdHJpZGUgLyBzaXplb2YoKnkpOworCQlhICs9IHBhcmFtcy5h eV9zdHJpZGUgLyBzaXplb2YoKmEpOworCQl5ICs9IHBhcmFtcy5heV9zdHJpZGUgLyBzaXplb2Yo KnkpOwogCiAJCWlmICgoaSAlIGRzdF9mbXQtPnZzdWIpID09IChkc3RfZm10LT52c3ViIC0gMSkp IHsKIAkJCXUgKz0gcGFyYW1zLnV2X3N0cmlkZSAvIHNpemVvZigqdSk7CkBAIC0yMDg2LDYgKzIx NDYsODggQEAgc3RhdGljIHZvaWQgY29udmVydF9mbG9hdF90b195dXYxNihzdHJ1Y3QgZmJfY29u dmVydCAqY3Z0KQogCX0KIH0KIAorc3RhdGljIHZvaWQgY29udmVydF9ZNDEwX3RvX2Zsb2F0KHN0 cnVjdCBmYl9jb252ZXJ0ICpjdnQpCit7CisJaW50IGksIGo7CisJY29uc3QgdWludDMyX3QgKnl1 eXY7CisJdWludDMyX3QgKmJ1ZjsKKwlmbG9hdCAqcHRyID0gY3Z0LT5kc3QucHRyOworCXVuc2ln bmVkIGludCBmbG9hdF9zdHJpZGUgPSBjdnQtPmRzdC5mYi0+c3RyaWRlc1swXSAvIHNpemVvZigq cHRyKTsKKwl1bnNpZ25lZCBpbnQgeXV5dl9zdHJpZGUgPSBjdnQtPnNyYy5mYi0+c3RyaWRlc1sw XSAvIHNpemVvZigqeXV5dik7CisJc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9fcmdi X21hdHJpeChjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCwKKwkJCQkJCSAgICBjdnQtPmRzdC5mYi0+ ZHJtX2Zvcm1hdCwKKwkJCQkJCSAgICBjdnQtPnNyYy5mYi0+Y29sb3JfZW5jb2RpbmcsCisJCQkJ CQkgICAgY3Z0LT5zcmMuZmItPmNvbG9yX3JhbmdlKTsKKworCWlndF9hc3NlcnQoY3Z0LT5zcmMu ZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9ZNDEwICYmCisJCSAgIGN2dC0+ZHN0LmZiLT5k cm1fZm9ybWF0ID09IElHVF9GT1JNQVRfRkxPQVQpOworCisJeXV5diA9IGJ1ZiA9IGNvbnZlcnRf c3JjX2dldChjdnQpOworCisJZm9yIChpID0gMDsgaSA8IGN2dC0+ZHN0LmZiLT5oZWlnaHQ7IGkr KykgeworCQlmb3IgKGogPSAwOyBqIDwgY3Z0LT5kc3QuZmItPndpZHRoOyBqKyspIHsKKwkJCS8q IENvbnZlcnQgMngxIHBpeGVsIGJsb2NrcyAqLworCQkJc3RydWN0IGlndF92ZWM0IHl1djsKKwkJ CXN0cnVjdCBpZ3RfdmVjNCByZ2I7CisKKwkJCXl1di5kWzBdID0geXV5dltqXSAmIDB4M2ZmOwor CQkJeXV2LmRbMV0gPSAoeXV5dltqXSA+PiAxMCkgJiAweDNmZjsKKwkJCXl1di5kWzJdID0gKHl1 eXZbal0gPj4gMjApICYgMHgzZmY7CisJCQl5dXYuZFszXSA9IDEuZjsKKworCQkJcmdiID0gaWd0 X21hdHJpeF90cmFuc2Zvcm0oJm0sICZ5dXYpOworCisJCQl3cml0ZV9yZ2JmKCZwdHJbaiAqIDQg KyAwXSwgJnJnYik7CisJCQlwdHJbaiAqIDQgKyAzXSA9IChmbG9hdCkoeXV5dltqXSA+PiAzMCkg LyAzOworCQl9CisKKwkJcHRyICs9IGZsb2F0X3N0cmlkZTsKKwkJeXV5diArPSB5dXl2X3N0cmlk ZTsKKwl9CisKKwljb252ZXJ0X3NyY19wdXQoY3Z0LCBidWYpOworfQorCitzdGF0aWMgdm9pZCBj b252ZXJ0X2Zsb2F0X3RvX1k0MTAoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKK3sKKwlpbnQgaSwg ajsKKwl1aW50MzJfdCAqeXV5diA9IGN2dC0+ZHN0LnB0cjsKKwljb25zdCBmbG9hdCAqcHRyID0g Y3Z0LT5zcmMucHRyOworCXVuc2lnbmVkIGZsb2F0X3N0cmlkZSA9IGN2dC0+c3JjLmZiLT5zdHJp ZGVzWzBdIC8gc2l6ZW9mKCpwdHIpOworCXVuc2lnbmVkIHl1eXZfc3RyaWRlID0gY3Z0LT5kc3Qu ZmItPnN0cmlkZXNbMF0gLyBzaXplb2YoKnl1eXYpOworCXN0cnVjdCBpZ3RfbWF0NCBtID0gaWd0 X3JnYl90b195Y2Jjcl9tYXRyaXgoY3Z0LT5zcmMuZmItPmRybV9mb3JtYXQsCisJCQkJCQkgICAg Y3Z0LT5kc3QuZmItPmRybV9mb3JtYXQsCisJCQkJCQkgICAgY3Z0LT5kc3QuZmItPmNvbG9yX2Vu Y29kaW5nLAorCQkJCQkJICAgIGN2dC0+ZHN0LmZiLT5jb2xvcl9yYW5nZSk7CisKKwlpZ3RfYXNz ZXJ0KGN2dC0+c3JjLmZiLT5kcm1fZm9ybWF0ID09IElHVF9GT1JNQVRfRkxPQVQgJiYKKwkJICAg Y3Z0LT5kc3QuZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9ZNDEwKTsKKworCWZvciAoaSA9 IDA7IGkgPCBjdnQtPmRzdC5mYi0+aGVpZ2h0OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGN2 dC0+ZHN0LmZiLT53aWR0aDsgaisrKSB7CisJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiOworCQkJc3Ry dWN0IGlndF92ZWM0IHl1djsKKwkJCXVpbnQ4X3QgYWxwaGEgPSBwdHJbaiAqIDQgKyAzXSAqIDMu ZiArIC41ZjsKKwkJCXVpbnQxNl90IHksIGNiLCBjcjsKKworCQkJcmVhZF9yZ2JmKCZyZ2IsICZw dHJbaiAqIDQgKyAwXSk7CisKKwkJCXl1diA9IGlndF9tYXRyaXhfdHJhbnNmb3JtKCZtLCAmcmdi KTsKKwkJCWNyID0geXV2LmRbMF07CisJCQl5ID0geXV2LmRbMV07CisJCQljYiA9IHl1di5kWzJd OworCisJCQl5dXl2W2pdID0gKChjciAmIDB4M2ZmKSA8PCAwKSB8CisJCQkJICAoKHkgJiAweDNm ZikgPDwgMTApIHwKKwkJCQkgICgoY2IgJiAweDNmZikgPDwgMjApIHwKKwkJCQkgIChhbHBoYSA8 PCAzMCk7CisJCX0KKworCQlwdHIgKz0gZmxvYXRfc3RyaWRlOworCQl5dXl2ICs9IHl1eXZfc3Ry aWRlOworCX0KK30KKwogc3RhdGljIHZvaWQgY29udmVydF9waXhtYW4oc3RydWN0IGZiX2NvbnZl cnQgKmN2dCkKIHsKIAlwaXhtYW5fZm9ybWF0X2NvZGVfdCBzcmNfcGl4bWFuID0gZHJtX2Zvcm1h dF90b19waXhtYW4oY3Z0LT5zcmMuZmItPmRybV9mb3JtYXQpOwpAQCAtMjE2MSw3ICsyMzAzLDEz IEBAIHN0YXRpYyB2b2lkIGZiX2NvbnZlcnQoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKIAkJY2Fz ZSBEUk1fRk9STUFUX1kyMTA6CiAJCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgogCQljYXNlIERSTV9G T1JNQVRfWTIxNjoKLQkJCWNvbnZlcnRfeXV2MTZfdG9fZmxvYXQoY3Z0KTsKKwkJCWNvbnZlcnRf eXV2MTZfdG9fZmxvYXQoY3Z0LCBmYWxzZSk7CisJCQlyZXR1cm47CisJCWNhc2UgRFJNX0ZPUk1B VF9ZNDEwOgorCQkJY29udmVydF9ZNDEwX3RvX2Zsb2F0KGN2dCk7CisJCQlyZXR1cm47CisJCWNh c2UgRFJNX0ZPUk1BVF9ZNDE2OgorCQkJY29udmVydF95dXYxNl90b19mbG9hdChjdnQsIHRydWUp OwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIGlmIChjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCA9 PSBJR1RfRk9STUFUX0ZMT0FUKSB7CkBAIC0yMTcyLDcgKzIzMjAsMTMgQEAgc3RhdGljIHZvaWQg ZmJfY29udmVydChzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQogCQljYXNlIERSTV9GT1JNQVRfWTIx MDoKIAkJY2FzZSBEUk1fRk9STUFUX1kyMTI6CiAJCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgotCQkJ Y29udmVydF9mbG9hdF90b195dXYxNihjdnQpOworCQkJY29udmVydF9mbG9hdF90b195dXYxNihj dnQsIGZhbHNlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEUk1fRk9STUFUX1k0MTA6CisJCQljb252 ZXJ0X2Zsb2F0X3RvX1k0MTAoY3Z0KTsKKwkJCXJldHVybjsKKwkJY2FzZSBEUk1fRk9STUFUX1k0 MTY6CisJCQljb252ZXJ0X2Zsb2F0X3RvX3l1djE2KGN2dCwgdHJ1ZSk7CiAJCQlyZXR1cm47CiAJ CX0KIAl9CkBAIC0yNTY0LDYgKzI3MTgsOCBAQCBib29sIGlndF9mb3JtYXRfaXNfeXV2KHVpbnQz Ml90IGRybV9mb3JtYXQpCiAJY2FzZSBEUk1fRk9STUFUX1kyMTA6CiAJY2FzZSBEUk1fRk9STUFU X1kyMTI6CiAJY2FzZSBEUk1fRk9STUFUX1kyMTY6CisJY2FzZSBEUk1fRk9STUFUX1k0MTA6CisJ Y2FzZSBEUk1fRk9STUFUX1k0MTY6CiAJY2FzZSBEUk1fRk9STUFUX1lVWVY6CiAJY2FzZSBEUk1f Rk9STUFUX1lWWVU6CiAJY2FzZSBEUk1fRk9STUFUX1VZVlk6Ci0tIAoyLjIwLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBs aXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=