From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v2 05/15] drm/fbconv: Add DRM <-> fbdev pixel-format conversion Date: Mon, 14 Oct 2019 16:04:06 +0200 Message-ID: <20191014140416.28517-6-tzimmermann@suse.de> References: <20191014140416.28517-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1A3D46E499 for ; Mon, 14 Oct 2019 14:04:24 +0000 (UTC) In-Reply-To: <20191014140416.28517-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, sean@poorly.run, b.zolnierkie@samsung.com, ajax@redhat.com, ville.syrjala@linux.intel.com, malat@debian.org, michel@daenzer.net Cc: gregkh@linuxfoundation.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org, corbet@lwn.net List-Id: dri-devel@lists.freedesktop.org RFJNIHVzZXMgRk9VUkNDIGNvbnN0YW50cyB0byBkZXNjcmliZSBwaXhlbCBmb3JtYXRzLCBmYmRl diB1c2VzIGEKcGVyLWNvbXBvbmVudCBiaXRmaWVsZCBzdHJ1Y3R1cmUuIFRoZSBmdW5jdGlvbnMg aW4gdGhpcyBwYXRjaCBjb252ZXJ0CmJldHdlZW4gdGhlIHR3by4KClNpZ25lZC1vZmYtYnk6IFRo b21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9kcm1fZmJjb252X2hlbHBlci5jIHwgNDM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGluY2x1ZGUvZHJtL2RybV9mYmNvbnZfaGVscGVyLmggICAgIHwgIDIzICsrCiAyIGZpbGVzIGNo YW5nZWQsIDQ1OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0v ZHJtX2ZiY29udl9oZWxwZXIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJj b252X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYmNvbnZfaGVscGVyLmMKaW5kZXgg MGNiNDZkMmM5OGMzLi5hZjQ1MzU4YTE1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZmJjb252X2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJjb252X2hlbHBl ci5jCkBAIC0xICsxLDQzNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4 L2ZiLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2ZiY29udl9oZWxwZXIuaD4KKworLyoKKyAqIEZv cm1hdCBjb252ZXJzaW9uIGhlbHBlcnMKKyAqLworCitzdGF0aWMgYm9vbCBpc19jOChjb25zdCBz dHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZiX3ZhcikKK3sKKwlyZXR1cm4gZmJfdmFyLT5iaXRz X3Blcl9waXhlbCA9PSA4OworfQorCitzdGF0aWMgYm9vbCBpc19yZ2I1NjUoY29uc3Qgc3RydWN0 IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJcmV0dXJuIChmYl92YXItPmJpdHNfcGVy X3BpeGVsID09IDE2KSAmJgorCSAgICAgICAoZmJfdmFyLT5yZWQub2Zmc2V0ID09IDExKSAmJgor CSAgICAgICAoZmJfdmFyLT5yZWQubGVuZ3RoID09IDUpICYmCisJICAgICAgIChmYl92YXItPmdy ZWVuLm9mZnNldCA9PSA1KSAmJgorCSAgICAgICAoZmJfdmFyLT5ncmVlbi5sZW5ndGggPT0gNikg JiYKKwkgICAgICAgKGZiX3Zhci0+Ymx1ZS5vZmZzZXQgPT0gMCkgJiYKKwkgICAgICAgKGZiX3Zh ci0+Ymx1ZS5sZW5ndGggPT0gNSk7Cit9CisKK3N0YXRpYyBib29sIGlzX2JncjU2NShjb25zdCBz dHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZiX3ZhcikKK3sKKwlyZXR1cm4gKGZiX3Zhci0+Yml0 c19wZXJfcGl4ZWwgPT0gMTYpICYmCisJICAgICAgIChmYl92YXItPnJlZC5vZmZzZXQgPT0gMCkg JiYKKwkgICAgICAgKGZiX3Zhci0+cmVkLmxlbmd0aCA9PSA1KSAmJgorCSAgICAgICAoZmJfdmFy LT5ncmVlbi5vZmZzZXQgPT0gNSkgJiYKKwkgICAgICAgKGZiX3Zhci0+Z3JlZW4ubGVuZ3RoID09 IDYpICYmCisJICAgICAgIChmYl92YXItPmJsdWUub2Zmc2V0ID09IDExKSAmJgorCSAgICAgICAo ZmJfdmFyLT5ibHVlLmxlbmd0aCA9PSA1KTsKK30KKworc3RhdGljIGJvb2wgaXNfcmdiODg4KGNv bnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCXJldHVybiAoZmJfdmFy LT5iaXRzX3Blcl9waXhlbCA9PSAyNCkgJiYKKwkgICAgICAgKGZiX3Zhci0+cmVkLm9mZnNldCA9 PSAxNikgJiYKKwkgICAgICAgKGZiX3Zhci0+cmVkLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAo ZmJfdmFyLT5ncmVlbi5vZmZzZXQgPT0gOCkgJiYKKwkgICAgICAgKGZiX3Zhci0+Z3JlZW4ubGVu Z3RoID09IDgpICYmCisJICAgICAgIChmYl92YXItPmJsdWUub2Zmc2V0ID09IDApICYmCisJICAg ICAgIChmYl92YXItPmJsdWUubGVuZ3RoID09IDgpOworfQorCitzdGF0aWMgYm9vbCBpc19iZ3I4 ODgoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJcmV0dXJuIChm Yl92YXItPmJpdHNfcGVyX3BpeGVsID09IDI0KSAmJgorCSAgICAgICAoZmJfdmFyLT5yZWQub2Zm c2V0ID09IDApICYmCisJICAgICAgIChmYl92YXItPnJlZC5sZW5ndGggPT0gOCkgJiYKKwkgICAg ICAgKGZiX3Zhci0+Z3JlZW4ub2Zmc2V0ID09IDgpICYmCisJICAgICAgIChmYl92YXItPmdyZWVu Lmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfdmFyLT5ibHVlLm9mZnNldCA9PSAxNikgJiYK KwkgICAgICAgKGZiX3Zhci0+Ymx1ZS5sZW5ndGggPT0gOCk7Cit9CisKK3N0YXRpYyBib29sIGlz X3hyZ2I4ODg4KGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCXJl dHVybiAoZmJfdmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikgJiYKKwkgICAgICAgKGZiX3Zhci0+ cmVkLm9mZnNldCA9PSAxNikgJiYKKwkgICAgICAgKGZiX3Zhci0+cmVkLmxlbmd0aCA9PSA4KSAm JgorCSAgICAgICAoZmJfdmFyLT5ncmVlbi5vZmZzZXQgPT0gOCkgJiYKKwkgICAgICAgKGZiX3Zh ci0+Z3JlZW4ubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl92YXItPmJsdWUub2Zmc2V0ID09 IDApICYmCisJICAgICAgIChmYl92YXItPmJsdWUubGVuZ3RoID09IDgpICYmCisJICAgICAgIChm Yl92YXItPnRyYW5zcC5sZW5ndGggPT0gMCk7Cit9CisKK3N0YXRpYyBib29sIGlzX3hiZ3I4ODg4 KGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCXJldHVybiAoZmJf dmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikgJiYKKwkgICAgICAgKGZiX3Zhci0+cmVkLm9mZnNl dCA9PSAwKSAmJgorCSAgICAgICAoZmJfdmFyLT5yZWQubGVuZ3RoID09IDgpICYmCisJICAgICAg IChmYl92YXItPmdyZWVuLm9mZnNldCA9PSA4KSAmJgorCSAgICAgICAoZmJfdmFyLT5ncmVlbi5s ZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZiX3Zhci0+Ymx1ZS5vZmZzZXQgPT0gMTYpICYmCisJ ICAgICAgIChmYl92YXItPmJsdWUubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl92YXItPnRy YW5zcC5sZW5ndGggPT0gMCk7Cit9CisKK3N0YXRpYyBib29sIGlzX3JnYng4ODg4KGNvbnN0IHN0 cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCXJldHVybiAoZmJfdmFyLT5iaXRz X3Blcl9waXhlbCA9PSAzMikgJiYKKwkgICAgICAgKGZiX3Zhci0+cmVkLm9mZnNldCA9PSAyNCkg JiYKKwkgICAgICAgKGZiX3Zhci0+cmVkLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfdmFy LT5ncmVlbi5vZmZzZXQgPT0gMTYpICYmCisJICAgICAgIChmYl92YXItPmdyZWVuLmxlbmd0aCA9 PSA4KSAmJgorCSAgICAgICAoZmJfdmFyLT5ibHVlLm9mZnNldCA9PSA4KSAmJgorCSAgICAgICAo ZmJfdmFyLT5ibHVlLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfdmFyLT50cmFuc3AubGVu Z3RoID09IDApOworfQorCitzdGF0aWMgYm9vbCBpc19iZ3J4ODg4OChjb25zdCBzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gKmZiX3ZhcikKK3sKKwlyZXR1cm4gKGZiX3Zhci0+Yml0c19wZXJfcGl4 ZWwgPT0gMzIpICYmCisJICAgICAgIChmYl92YXItPnJlZC5vZmZzZXQgPT0gOCkgJiYKKwkgICAg ICAgKGZiX3Zhci0+cmVkLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfdmFyLT5ncmVlbi5v ZmZzZXQgPT0gMTYpICYmCisJICAgICAgIChmYl92YXItPmdyZWVuLmxlbmd0aCA9PSA4KSAmJgor CSAgICAgICAoZmJfdmFyLT5ibHVlLm9mZnNldCA9PSAyNCkgJiYKKwkgICAgICAgKGZiX3Zhci0+ Ymx1ZS5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZiX3Zhci0+dHJhbnNwLmxlbmd0aCA9PSAw KTsKK30KKworc3RhdGljIGJvb2wgaXNfYXJnYjg4ODgoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3Jl ZW5pbmZvICpmYl92YXIpCit7CisJcmV0dXJuIChmYl92YXItPmJpdHNfcGVyX3BpeGVsID09IDMy KSAmJgorCSAgICAgICAoZmJfdmFyLT5yZWQub2Zmc2V0ID09IDE2KSAmJgorCSAgICAgICAoZmJf dmFyLT5yZWQubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl92YXItPmdyZWVuLm9mZnNldCA9 PSA4KSAmJgorCSAgICAgICAoZmJfdmFyLT5ncmVlbi5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAg KGZiX3Zhci0+Ymx1ZS5vZmZzZXQgPT0gMCkgJiYKKwkgICAgICAgKGZiX3Zhci0+Ymx1ZS5sZW5n dGggPT0gOCkgJiYKKwkgICAgICAgKGZiX3Zhci0+dHJhbnNwLm9mZnNldCA9PSAyNCkgJiYKKwkg ICAgICAgKGZiX3Zhci0+dHJhbnNwLmxlbmd0aCA9PSA4KTsKK30KKworc3RhdGljIGJvb2wgaXNf YWJncjg4ODgoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJcmV0 dXJuIChmYl92YXItPmJpdHNfcGVyX3BpeGVsID09IDMyKSAmJgorCSAgICAgICAoZmJfdmFyLT5y ZWQub2Zmc2V0ID09IDApICYmCisJICAgICAgIChmYl92YXItPnJlZC5sZW5ndGggPT0gOCkgJiYK KwkgICAgICAgKGZiX3Zhci0+Z3JlZW4ub2Zmc2V0ID09IDgpICYmCisJICAgICAgIChmYl92YXIt PmdyZWVuLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfdmFyLT5ibHVlLm9mZnNldCA9PSAx NikgJiYKKwkgICAgICAgKGZiX3Zhci0+Ymx1ZS5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZi X3Zhci0+dHJhbnNwLm9mZnNldCA9PSAyNCkgJiYKKwkgICAgICAgKGZiX3Zhci0+dHJhbnNwLmxl bmd0aCA9PSA4KTsKK30KKworc3RhdGljIGJvb2wgaXNfcmdiYTg4ODgoY29uc3Qgc3RydWN0IGZi X3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJcmV0dXJuIChmYl92YXItPmJpdHNfcGVyX3Bp eGVsID09IDMyKSAmJgorCSAgICAgICAoZmJfdmFyLT5yZWQub2Zmc2V0ID09IDI0KSAmJgorCSAg ICAgICAoZmJfdmFyLT5yZWQubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl92YXItPmdyZWVu Lm9mZnNldCA9PSAxNikgJiYKKwkgICAgICAgKGZiX3Zhci0+Z3JlZW4ubGVuZ3RoID09IDgpICYm CisJICAgICAgIChmYl92YXItPmJsdWUub2Zmc2V0ID09IDgpICYmCisJICAgICAgIChmYl92YXIt PmJsdWUubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl92YXItPnRyYW5zcC5vZmZzZXQgPT0g MCkgJiYKKwkgICAgICAgKGZiX3Zhci0+dHJhbnNwLmxlbmd0aCA9PSA4KTsKK30KKworc3RhdGlj IGJvb2wgaXNfYmdyYTg4ODgoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIp Cit7CisJcmV0dXJuIChmYl92YXItPmJpdHNfcGVyX3BpeGVsID09IDMyKSAmJgorCSAgICAgICAo ZmJfdmFyLT5yZWQub2Zmc2V0ID09IDgpICYmCisJICAgICAgIChmYl92YXItPnJlZC5sZW5ndGgg PT0gOCkgJiYKKwkgICAgICAgKGZiX3Zhci0+Z3JlZW4ub2Zmc2V0ID09IDE2KSAmJgorCSAgICAg ICAoZmJfdmFyLT5ncmVlbi5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZiX3Zhci0+Ymx1ZS5v ZmZzZXQgPT0gMjQpICYmCisJICAgICAgIChmYl92YXItPmJsdWUubGVuZ3RoID09IDgpICYmCisJ ICAgICAgIChmYl92YXItPnRyYW5zcC5vZmZzZXQgPT0gMCkgJiYKKwkgICAgICAgKGZiX3Zhci0+ dHJhbnNwLmxlbmd0aCA9PSA4KTsKK30KKworc3RydWN0IGZvcm1hdF9tYXAgeworCWJvb2wgKCpp c19mb3JtYXQpKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKTsKKwl1aW50 MzJfdCBmb3JtYXQ7Cit9OworCisvKioKKyAqIGRybV9mYmNvbnZfZm9ybWF0X29mX2ZiX3Zhcl9z Y3JlZW5pbmZvIC0gUmV0dXJucyBhIERSTV9GT1JNQVQgY29uc3RhbnQKKyAqCWZyb20gYW4gZmJf dmFyX3NjcmVlbmluZm8gc3RydWN0dXJlCisgKiBAZmJfaW5mbzoJdGhlIGZiX3Zhcl9zY3JlZW5p bmZvIHN0cnVjdHVyZQorICogUmV0dXJuczoKKyAqCUEgRFJNX0ZPUk1BVCBjb25zdGFudCBvbiBz dWNjZXNzLCBvcgorICoJRFJNX0ZPUk1BVF9JTlZBTElEIG90aGVyd2lzZS4KKyAqLwordWludDMy X3QKK2RybV9mYmNvbnZfZm9ybWF0X29mX2ZiX3Zhcl9zY3JlZW5pbmZvKGNvbnN0IHN0cnVjdCBm Yl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZm9ybWF0 X21hcCBtYXBbXSA9IHsKKwkJeyBpc19jOCwgICAgICAgRFJNX0ZPUk1BVF9DOCB9LCAvKiAyNTYt Y29sb3IgcGFsZXR0ZSAqLworCQl7IGlzX3JnYjU2NSwgICBEUk1fRk9STUFUX1JHQjU2NSB9LAor CQl7IGlzX2JncjU2NSwgICBEUk1fRk9STUFUX0JHUjU2NSB9LAorCQl7IGlzX3JnYjg4OCwgICBE Uk1fRk9STUFUX1JHQjg4OCB9LAorCQl7IGlzX2Jncjg4OCwgICBEUk1fRk9STUFUX0JHUjg4OCB9 LAorCQl7IGlzX3hyZ2I4ODg4LCBEUk1fRk9STUFUX1hSR0I4ODg4IH0sCisJCXsgaXNfeGJncjg4 ODgsIERSTV9GT1JNQVRfWEJHUjg4ODggfSwKKwkJeyBpc19yZ2J4ODg4OCwgRFJNX0ZPUk1BVF9S R0JYODg4OCB9LAorCQl7IGlzX2Jncng4ODg4LCBEUk1fRk9STUFUX0JHUlg4ODg4IH0sCisJCXsg aXNfYXJnYjg4ODgsIERSTV9GT1JNQVRfQVJHQjg4ODggfSwKKwkJeyBpc19hYmdyODg4OCwgRFJN X0ZPUk1BVF9BQkdSODg4OCB9LAorCQl7IGlzX3JnYmE4ODg4LCBEUk1fRk9STUFUX1JHQkE4ODg4 IH0sCisJCXsgaXNfYmdyYTg4ODgsIERSTV9GT1JNQVRfQkdSQTg4ODggfQorCX07CisKKwlzaXpl X3QgaTsKKworCWlmIChmYl92YXItPmJpdHNfcGVyX3BpeGVsIDwgOCkKKwkJZ290byBlcnI7IC8q IGF0IGxlYXN0IDgtYml0IGNvbG9yIHJlcXVpcmVkICovCisJaWYgKGZiX3Zhci0+Z3JheXNjYWxl ID09IDEpCisJCWdvdG8gZXJyOyAvKiBncmF5c2NhbGUgb3V0cHV0IGlzIG5vdCBzdXBwb3J0ZWQg Ki8KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1hcCk7ICsraSkgeworCQlpZiAobWFw W2ldLmlzX2Zvcm1hdChmYl92YXIpKQorCQkJcmV0dXJuIG1hcFtpXS5mb3JtYXQ7CisJfQorCitl cnI6CisJcmV0dXJuIERSTV9GT1JNQVRfSU5WQUxJRDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2Zi Y29udl9mb3JtYXRfb2ZfZmJfdmFyX3NjcmVlbmluZm8pOworCisvKioKKyAqIGRybV9mYmNvbnZf Zm9ybWF0X29mX2ZiX2luZm8gLSBSZXR1cm5zIGEgRFJNX0ZPUk1BVCBjb25zdGFudCBmcm9tCisg KglhbiBmYl9pbmZvIHN0cnVjdHVyZQorICogQGZiX2luZm86CXRoZSBmYl9pbmZvIHN0cnVjdHVy ZQorICogUmV0dXJuczoKKyAqCUEgRFJNX0ZPUk1BVCBjb25zdGFudCBvbiBzdWNjZXNzLCBvcgor ICoJRFJNX0ZPUk1BVF9JTlZBTElEIG90aGVyd2lzZS4KKyAqLwordWludDMyX3QgZHJtX2ZiY29u dl9mb3JtYXRfb2ZfZmJfaW5mbyhjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwlp ZiAoZmJfaW5mby0+Zml4LnR5cGUgIT0gRkJfVFlQRV9QQUNLRURfUElYRUxTKQorCQlyZXR1cm4g RFJNX0ZPUk1BVF9JTlZBTElEOyAvKiBubyBtdWx0aS1wbGFuZSBmb3JtYXRzICovCisKKwlyZXR1 cm4gZHJtX2ZiY29udl9mb3JtYXRfb2ZfZmJfdmFyX3NjcmVlbmluZm8oJmZiX2luZm8tPnZhcik7 Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYmNvbnZfZm9ybWF0X29mX2ZiX2luZm8pOworCitzdGF0 aWMgdm9pZCBzZXRfZmJfYml0ZmllbGQoc3RydWN0IGZiX2JpdGZpZWxkICpiaXRzLCBfX3UzMiBv ZmZzZXQsCisJCQkgICAgX191MzIgbGVuZ3RoKQoreworCWJpdHMtPm9mZnNldCA9IG9mZnNldDsK KwliaXRzLT5sZW5ndGggPSBsZW5ndGg7CisJYml0cy0+bXNiX3JpZ2h0ID0gMDsKK30KKworc3Rh dGljIHZvaWQgc2V0X2M4KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCWZi X3Zhci0+Yml0c19wZXJfcGl4ZWwgPSA4OworCWZiX3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRf ZmJfYml0ZmllbGQoJmZiX3Zhci0+cmVkLCAgICAwLCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZi X3Zhci0+Z3JlZW4sICAwLCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgICAw LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+dHJhbnNwLCAwLCAwKTsKKwlmYl92YXIt Pm5vbnN0ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yZ2I1NjUoc3RydWN0IGZiX3Zhcl9z Y3JlZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE2OworCWZi X3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+cmVkLCAgIDEx LCA1KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Z3JlZW4sICA1LCA2KTsKKwlzZXRfZmJf Yml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgICAwLCA1KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zh ci0+dHJhbnNwLCAwLCAwKTsKKwlmYl92YXItPm5vbnN0ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lk IHNldF9iZ3I1NjUoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFy LT5iaXRzX3Blcl9waXhlbCA9IDE2OworCWZiX3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJf Yml0ZmllbGQoJmZiX3Zhci0+cmVkLCAgICAwLCA1KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zh ci0+Z3JlZW4sICA1LCA2KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgIDExLCA1 KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+dHJhbnNwLCAwLCAwKTsKKwlmYl92YXItPm5v bnN0ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yZ2I4ODgoc3RydWN0IGZiX3Zhcl9zY3Jl ZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFyLT5iaXRzX3Blcl9waXhlbCA9IDI0OworCWZiX3Zh ci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+cmVkLCAgIDE2LCA4 KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Z3JlZW4sICA4LCA4KTsKKwlzZXRfZmJfYml0 ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgICAwLCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+ dHJhbnNwLCAwLCAwKTsKKwlmYl92YXItPm5vbnN0ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNl dF9iZ3I4ODgoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFyLT5i aXRzX3Blcl9waXhlbCA9IDI0OworCWZiX3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJfYml0 ZmllbGQoJmZiX3Zhci0+cmVkLCAgICAwLCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+ Z3JlZW4sICA4LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgIDE2LCA4KTsK KwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+dHJhbnNwLCAwLCAwKTsKKwlmYl92YXItPm5vbnN0 ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF94cmdiODg4OChzdHJ1Y3QgZmJfdmFyX3NjcmVl bmluZm8gKmZiX3ZhcikKK3sKKwlmYl92YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisJZmJfdmFy LT5ncmF5c2NhbGUgPSAwOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5yZWQsICAgIDE2LCA4 KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Z3JlZW4sICAgOCwgOCk7CisJc2V0X2ZiX2Jp dGZpZWxkKCZmYl92YXItPmJsdWUsICAgIDAsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFy LT50cmFuc3AsIDI0LCAwKTsKKwlmYl92YXItPm5vbnN0ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lk IHNldF94YmdyODg4OChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZiX3ZhcikKK3sKKwlmYl92 YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisJZmJfdmFyLT5ncmF5c2NhbGUgPSAwOworCXNldF9m Yl9iaXRmaWVsZCgmZmJfdmFyLT5yZWQsICAgICAwLCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZi X3Zhci0+Z3JlZW4sICAgOCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmJsdWUsICAg MTYsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT50cmFuc3AsIDI0LCAwKTsKKwlmYl92 YXItPm5vbnN0ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yZ2J4ODg4OChzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gKmZiX3ZhcikKK3sKKwlmYl92YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7 CisJZmJfdmFyLT5ncmF5c2NhbGUgPSAwOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5yZWQs ICAgMjQsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5ncmVlbiwgMTYsIDgpOworCXNl dF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5ibHVlLCAgIDgsIDgpOworCXNldF9mYl9iaXRmaWVsZCgm ZmJfdmFyLT50cmFuc3AsIDAsIDApOworCWZiX3Zhci0+bm9uc3RkID0gMDsKK30KKworc3RhdGlj IHZvaWQgc2V0X2Jncng4ODg4KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQorewor CWZiX3Zhci0+Yml0c19wZXJfcGl4ZWwgPSAzMjsKKwlmYl92YXItPmdyYXlzY2FsZSA9IDA7CisJ c2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnJlZCwgICAgOCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxk KCZmYl92YXItPmdyZWVuLCAxNiwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmJsdWUs ICAyNCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnRyYW5zcCwgMCwgMCk7CisJZmJf dmFyLT5ub25zdGQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfYXJnYjg4ODgoc3RydWN0IGZi X3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMy OworCWZiX3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+cmVk LCAgICAxNiwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmdyZWVuLCAgIDgsIDgpOwor CXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5ibHVlLCAgICAwLCA4KTsKKwlzZXRfZmJfYml0Zmll bGQoJmZiX3Zhci0+dHJhbnNwLCAyNCwgOCk7CisJZmJfdmFyLT5ub25zdGQgPSAwOworfQorCitz dGF0aWMgdm9pZCBzZXRfYWJncjg4ODgoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIp Cit7CisJZmJfdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMyOworCWZiX3Zhci0+Z3JheXNjYWxlID0g MDsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+cmVkLCAgICAgMCwgOCk7CisJc2V0X2ZiX2Jp dGZpZWxkKCZmYl92YXItPmdyZWVuLCAgIDgsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFy LT5ibHVlLCAgIDE2LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+dHJhbnNwLCAyNCwg OCk7CisJZmJfdmFyLT5ub25zdGQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmdiYTg4ODgo c3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFyLT5iaXRzX3Blcl9w aXhlbCA9IDMyOworCWZiX3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJfYml0ZmllbGQoJmZi X3Zhci0+cmVkLCAgIDI0LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Z3JlZW4sIDE2 LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgICA4LCA4KTsKKwlzZXRfZmJf Yml0ZmllbGQoJmZiX3Zhci0+dHJhbnNwLCAwLCA4KTsKKwlmYl92YXItPm5vbnN0ZCA9IDA7Cit9 CisKK3N0YXRpYyB2b2lkIHNldF9iZ3JhODg4OChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZi X3ZhcikKK3sKKwlmYl92YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisJZmJfdmFyLT5ncmF5c2Nh bGUgPSAwOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5yZWQsICAgIDgsIDgpOworCXNldF9m Yl9iaXRmaWVsZCgmZmJfdmFyLT5ncmVlbiwgMTYsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJf dmFyLT5ibHVlLCAgMjQsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT50cmFuc3AsIDAs IDgpOworCWZiX3Zhci0+bm9uc3RkID0gMDsKK30KKworLyoqCisgKiBkcm1fZmJjb252X3VwZGF0 ZV9mYl92YXJfc2NyZWVuX2luZm9fZnJvbV9mb3JtYXQgLSBzZXRzIHRoZSBwaXhlbCBmb3JtYXQK KyAqCW9mIGEgZmJfdmFyX3NjcmVlbmluZm8gc3RydWN0dXJlIGZyb20gYSBEUk1fRk9STUFUIGNv bnN0YW50CisgKiBAZmJfdmFyOgl0aGUgZmJfdmFyX3NjcmVlbmluZm8gc3RydWN0dXJlIHRvIHVw ZGF0ZQorICogQGZvcm1hdDoJYSBEUk1fRk9STUFUIGNvbnN0YW50CisgKiBSZXR1cm5zOgorICoJ MCBvbiBzdWNjZXNzLCBvcgorICoJYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAq LworaW50IGRybV9mYmNvbnZfdXBkYXRlX2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fZm9ybWF0KAor CXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyLCB1aW50MzJfdCBmb3JtYXQpCit7CisJ c3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXNldF9jOChmYl92YXIp OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlzZXRfcmdiNTY1KGZiX3Zh cik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJCXNldF9iZ3I1NjUoZmJf dmFyKTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJc2V0X3JnYjg4OChm Yl92YXIpOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQkdSODg4OgorCQlzZXRfYmdyODg4 KGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJc2V0X3hy Z2I4ODg4KGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwkJ c2V0X3hiZ3I4ODg4KGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4 ODoKKwkJc2V0X3JnYng4ODg4KGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9C R1JYODg4ODoKKwkJc2V0X2Jncng4ODg4KGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCODg4ODoKKwkJc2V0X2FyZ2I4ODg4KGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJc2V0X2FiZ3I4ODg4KGZiX3Zhcik7CisJCWJyZWFrOwor CWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwkJc2V0X3JnYmE4ODg4KGZiX3Zhcik7CisJCWJy ZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJc2V0X2JncmE4ODg4KGZiX3Zhcik7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsK K30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiY29udl91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJv bV9mb3JtYXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiY29udl9oZWxwZXIuaCBi L2luY2x1ZGUvZHJtL2RybV9mYmNvbnZfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi42YjJlZDEyYjU3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRl L2RybS9kcm1fZmJjb252X2hlbHBlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCisKKyNpZm5kZWYgRFJNX0ZCQ09OVl9I RUxQRVJfSAorI2RlZmluZSBEUk1fRkJDT05WX0hFTFBFUl9ICisKKyNpbmNsdWRlIDxkcm0vZHJt X2ZvdXJjYy5oPgorCitzdHJ1Y3QgZmJfaW5mbzsKK3N0cnVjdCBmYl92YXJfc2NyZWVuaW5mbzsK KworLyoKKyAqIEZvcm1hdCBjb252ZXJzaW9uIGhlbHBlcnMKKyAqLworCit1aW50MzJfdAorZHJt X2ZiY29udl9mb3JtYXRfb2ZfZmJfdmFyX3NjcmVlbmluZm8oY29uc3Qgc3RydWN0IGZiX3Zhcl9z Y3JlZW5pbmZvICpmYl92YXIpOworCit1aW50MzJfdCBkcm1fZmJjb252X2Zvcm1hdF9vZl9mYl9p bmZvKGNvbnN0IHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKKworaW50IGRybV9mYmNvbnZfdXBk YXRlX2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fZm9ybWF0KAorCXN0cnVjdCBmYl92YXJfc2NyZWVu aW5mbyAqZmJfdmFyLCB1aW50MzJfdCBmb3JtYXQpOworCisjZW5kaWYKLS0gCjIuMjMuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs