From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shashank Sharma Subject: [RESEND-CI v4 04/15] drm/edid: parse YCBCR 420 videomodes from EDID Date: Wed, 21 Jun 2017 16:04:02 +0530 Message-ID: <1498041253-16426-5-git-send-email-shashank.sharma@intel.com> References: <1498041253-16426-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: <1498041253-16426-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, ville.syrjala@linux.intel.com Cc: Jose Abreu List-Id: dri-devel@lists.freedesktop.org SERNSSAyLjAgc3BlYyBhZGRzIHN1cHBvcnQgZm9yIFlDQkNSNDIwIHN1Yi1zYW1wbGVkIG91dHB1 dC4KQ0VBLTg2MS1GIGFkZHMgdHdvIG5ldyBibG9ja3MgaW4gRURJRCdzIENFQSBleHRlbnNpb24g YmxvY2tzLAp0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHNpbmsncyBZQ0JDUjQyMCBvdXRw dXQgY2FwYWJpbGl0aWVzLgoKVGhlc2UgYmxvY2tzIGFyZToKCi0gWUNCQ1I0MjB2ZGIoWUNCQ1Ig NDIwIHZpZGVvIGRhdGEgYmxvY2spOgpUaGlzIGJsb2NrIGNvbnRhaW5zIFZJQ3Mgb2YgdmlkZW8g bW9kZXMsIHdoaWNoIGNhbiBiZSBzb3Bwb3J0ZWQgb25seQppbiBZQ0JDUjQyMCBvdXRwdXQgbW9k ZSAoTm90IGluIFJHQi9ZQ0JDUjQ0NC80MjIuIEl0cyBsaWtlIGEgbm9ybWFsClNWRCBibG9jaywg dmFsaWQgZm9yIFlDQkNSNDIwIG1vZGVzIG9ubHkuCgotIFlDQkNSNDIwY21kYihZQ0JDUiA0MjAg Y2FwYWJpbGl0eSBtYXAgZGF0YSBibG9jayk6ClRoaXMgYmxvY2sgZ2l2ZXMgaW5mb3JtYXRpb24g YWJvdXQgdmlkZW8gbW9kZXMgd2hpY2ggY2FuIHN1cHBvcnQKWUNCQ1I0MjAgb3V0cHV0IG1vZGUg YWxzbyAoYWxvbmcgd2l0aCBSR0IsWUNCQ1I0NDQvNDIyIGV0YykgVGhpcwpibG9jayBjb250YWlu cyBhIGJpdG1hcCBpbmRleCBvZiBub3JtYWwgc3ZkIHZpZGVvbW9kZXMsIHdoaWNoIGNhbgpzdXBw b3J0IFlDQkNSNDIwIG91dHB1dCB0b28uClNvIGlmIGJpdCAwIGZyb20gZmlyc3QgdmNiIGJ5dGUg aXMgc2V0LCBmaXJzdCB2aWRlbyBtb2RlIGluIHRoZSBzdmQKbGlzdCBjYW4gc3VwcG9ydCBZQ0JD UjQyMCBvdXRwdXQgdG9vLiBCaXQgMSBtZWFucyBzZWNvbmQgdmlkZW8gbW9kZQpmcm9tIHN2ZCBs aXN0IGNhbiBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0b28sIGFuZCBzbyBvbi4KClRoaXMgcGF0 Y2ggYWRkcyB0d28gYml0bWFwcyBpbiBkaXNwbGF5J3MgaGRtaV9pbmZvIHN0cnVjdHVyZSwgb25l IGVhY2gKZm9yIFZDQiBhbmQgVkRCIG1vZGVzLiBJZiB0aGUgc291cmNlIGlzIEhETUkgMi4wIGNh cGFibGUsIHRoaXMgcGF0Y2gKYWRkczoKLSBWREIgbW9kZXMgKFlDQkNSIDQyMCBvbmx5IG1vZGVz KSBpbiBjb25uZWN0b3IncyBtb2RlIGxpc3QsIGFsc28gbWFrZXMKICBhbiBlbnRyeSBpbiB0aGUg dmRiX2JpdG1hcCBwZXIgdmljLgotIFZDQiBtb2RlcyAoWUNCQ1IgNDIwIGFsc28gbW9kZXMpIG9u bHkgZW50cnkgaW4gdGhlIHZjYl9iaXRtYXAuCgpDYzogVmlsbGUgU3lyamFsYSA8dmlsbGUuc3ly amFsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBKb3NlIEFicmV1IDxqb2FicmV1QHN5bm9wc3lzLmNv bT4KQ2M6IEVtaWwgVmVsaWtvdiA8ZW1pbC5sLnZlbGlrb3ZAZ21haWwuY29tPgoKVjI6IEFkZHJl c3NlZAogICAgUmV2aWV3IGNvbW1lbnRzIGZyb20gRW1pbDoKICAgIC0gVXNlIDFVTEw8PGkgaW5z dGVhZCBvZiAxPDxpIHRvIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IGlzIDY0Yml0LgogICAgLSBVc2Ug dGhlIHN1Z2dlc3RlZCBtZXRob2QgZm9yIHVwZGF0aW5nIGRibWFwLgogICAgLSBBZGQgZG9jdW1l bnRhdGlvbiBmb3IgWUNCQ1I0MjBfdmNiX21hcCB0byBmaXgga2J1aWxkIHdhcm5pbmcuCgogICAg UmV2aWV3IGNvbW1lbnRzIGZyb20gVmlsbGU6CiAgICAtIERvIG5vdCBleHBvc2UgdGhlIFlDQkNS NDIwIGZsYWdzIGluIHVhYmkgbGF5ZXIsIGtlZXAgaXQgaW50ZXJuYWwuCiAgICAtIFNhdmUgYSBt YXAgb2YgWUNCQ1I0MjAgbW9kZXMgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCiAgICAtIENoZWNrIGRi IGxlbmd0aCBiZWZvcmUgdHJ5aW5nIHRvIHBhcnNlIGV4dGVuZGVkIHRhZy4KICAgIC0gQWRkIGEg d2FybmluZyBpZiB0aGVyZSBhcmUgPiA2NCBtb2RlcyBpbiBjYXBhYmlsaXR5IG1hcCBibG9jay4K ICAgIC0gVXNlIHk0MjBjbWRiIGluIGZ1bmN0aW9uIG5hbWVzIGFuZCBtYWNyb3Mgd2hpbGUgZGVh bGluZyB3aXRoIHZjYgogICAgICB0byBiZSBhbGlnbmVkIHdpdGggc3BlYy4KICAgIC0gTW92ZSB0 aGUgZGlzcGxheSBpbmZvcm1hdGlvbiBwYXJzaW5nIGJsb2NrIGFoZWFkIG9mIG1vZGUgcGFyc2lu ZwogICAgICBibG9ja3MuCgpWMzogQWRkcmVzc2VkIGRlc2lnbi9yZXZpZXcgY29tbWVudHMgZnJv bSBWaWxsZQogICAgLSBEbyBub3QgYWRkIGZsYWdzIGluIHZpZGVvIG1vZGVzLCBlbHNlIHdlIGhh dmUgdG8gZXhwb3NlIHRoZW0gdG8gdXNlcgogICAgLSBUaGVyZSBzaG91bGQgbm90IGJlIGEgVUFC SSBjaGFuZ2UsIGFuZCBrZXJuZWwgc2hvdWxkIGRldGVjdCB0aGUKICAgICAgY2hvaWNlIG9mIHRo ZSBvdXRwdXQgYmFzZWQgb24gdHlwZSBvZiBtb2RlLCBhbmQgdGhlIGJpdG1hcHMuCiAgICAtIFVz ZSBzdGFuZGFyZCBiaXRvcHMgZnJvbSBrZXJuZWwgYml0bWFwIGhlYWRlciwgaW5zdGVhZCBvZiBj YWxjdWxhdGluZwogICAgICBiaXQgcG9zaXRpb25zIG1hbnVhbGx5LgoKVjQ6IEFkZHJlc3NlZCBy ZXZpZXcgY29tbWVudHMgZnJvbSBWaWxsZToKICAgIC0gcy95Y2Jjcl80MjBfdmRiL3k0MjB2ZGIK ICAgIC0gcy95Y2Jjcl80MjBfdmNiL3k0MjBjbWRiCiAgICAtIEJlIGxlc3MgdmVyYm9zZSBvbiBk ZXNjcmlwdGlvbiBvZiBkb195NDIwdmRiX21vZGVzCiAgICAtIE1vdmUgbmV3bW9kZSB2YXJpYWJs ZSBpbiB0aGUgbG9vcCBzY29wZS4KICAgIC0gVXNlIHN2ZF90b192aWMoKSB0byBnZXQgYSBWSUMs IGluc3RlYWQgb2YgMHg3ZgogICAgLSBSZW1vdmUgYml0bWFwIGRlc2NyaXB0aW9uIGZvciBDTURC IG1vZGVzICYgVkRCIG1vZGVzCiAgICAtIERvbnQgYWRkIGNvbm5lY3Rvci0+eWNiY3JfNDIwX2Fs bG93ZWQgY2hlY2sgZm9yIGNtZGIgbW9kZXMKICAgIC0gUmVtb3ZlICdsZW4nIHZhcmlhYmxlLCBp biBpc195NDIwY21kYiBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZAogICAgICBvbmx5IG9uY2UKICAg IC0gQWRkIGxlbmd0aCBjaGVjayBpbiBpc195NDIwdmRiIGZ1bmN0aW9uCiAgICAtIFJlbW92ZSB1 bm5lY2Vzc2FyeSBpZiAoIWRiKSBjaGVjayBpbiBmdW5jdGlvbiBwYXJzZV95NDIwY21kYl9iaXRt YXAKICAgIC0gRG8gbm90IGFkZCBwcmludCBhYm91dCBZQ0JDUiA0MjAgbW9kZXMKICAgIC0gRml4 IGluZGVudGF0aW9uIGluIGZldyBwbGFjZXMKICAgIC0gTW92ZSB5Y2JjcjQyMF9kY19tb2RlcyBp biBuZXh0IHBhdGNoLCB3aGVyZSBpdHMgdXNlZAogICAgLSBBZGQgYSBzZXBhcmF0ZSBwYXRjaCBm b3IgbW92ZW1lbnQgb2YgZHJtX2FkZF9kaXNwbGF5X2luZm8oKQoKU2lnbmVkLW9mZi1ieTogU2hh c2hhbmsgU2hhcm1hIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9kcm1fZWRpZC5jICB8IDE1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLQogaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oIHwgIDIwICsrKysrKwogMiBm aWxlcyBjaGFuZ2VkLCAxNzQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRp ZC5jCmluZGV4IGUyZDFiMzAuLjhjN2U3M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCkBAIC0yNzgxLDcgKzI3 ODEsOSBAQCBhZGRfZGV0YWlsZWRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgc3RydWN0IGVkaWQgKmVkaWQsCiAjZGVmaW5lIFZJREVPX0JMT0NLICAgICAweDAyCiAjZGVm aW5lIFZFTkRPUl9CTE9DSyAgICAweDAzCiAjZGVmaW5lIFNQRUFLRVJfQkxPQ0sJMHgwNAotI2Rl ZmluZSBWSURFT19DQVBBQklMSVRZX0JMT0NLCTB4MDcKKyNkZWZpbmUgVklERU9fQ0FQQUJJTElU WV9CTE9DSyAweDA3CisjZGVmaW5lIFZJREVPX0RBVEFfQkxPQ0tfNDIwCTB4MEUKKyNkZWZpbmUg VklERU9fQ0FQX0JMT0NLX1k0MjBDTURCIDB4MEYKICNkZWZpbmUgRURJRF9CQVNJQ19BVURJTwko MSA8PCA2KQogI2RlZmluZSBFRElEX0NFQV9ZQ1JDQjQ0NAkoMSA8PCA1KQogI2RlZmluZSBFRElE X0NFQV9ZQ1JDQjQyMgkoMSA8PCA0KQpAQCAtMzE1MywxNSArMzE1NSw3OSBAQCBkcm1fZGlzcGxh eV9tb2RlX2Zyb21fdmljX2luZGV4KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJ cmV0dXJuIG5ld21vZGU7CiB9CiAKKy8qCisgKiBkb195NDIwdmRiX21vZGVzIC0gUGFyc2UgWUNC Q1IgNDIwIG9ubHkgbW9kZXMKKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciBjb3JyZXNwb25kaW5n IHRvIHRoZSBIRE1JIHNpbmsKKyAqIEBzdmRzOiBzdGFydCBvZiB0aGUgZGF0YSBibG9jayBvZiBD RUEgWUNCQ1IgNDIwIFZEQgorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBDRUEgWUNCQ1IgNDIwIFZE QgorICoKKyAqIFBhcnNlIHRoZSBDRUEtODYxLUYgWUNCQ1IgNDIwIFZpZGVvIERhdGEgQmxvY2sg KFk0MjBWREIpCisgKiB3aGljaCBjb250YWlucyBtb2RlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVk IGluIFlDQkNSIDQyMAorICogb3V0cHV0IGZvcm1hdCBvbmx5LgorICovCitzdGF0aWMgaW50IGRv X3k0MjB2ZGJfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICBj b25zdCB1OCAqc3ZkcywgdTggc3Zkc19sZW4pCit7CisJaW50IG1vZGVzID0gMCwgaTsKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9kaXNwbGF5 X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87CisJc3RydWN0IGRybV9oZG1p X2luZm8gKmhkbWkgPSAmaW5mby0+aGRtaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdmRzX2xlbjsg aSsrKSB7CisJCXU4IHZpYyA9IHN2ZF90b192aWMoc3Zkc1tpXSk7CisJCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICpuZXdtb2RlOworCisJCW5ld21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2 LCAmZWRpZF9jZWFfbW9kZXNbdmljXSk7CisJCWlmICghbmV3bW9kZSkKKwkJCWJyZWFrOworCQli aXRtYXBfc2V0KGhkbWktPnk0MjBfdmRiX21vZGVzLCB2aWMsIDEpOworCQlkcm1fbW9kZV9wcm9i ZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CisJCW1vZGVzKys7CisJfQorCisJaWYgKG1vZGVz ID4gMCkKKwkJaW5mby0+Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIw OworCXJldHVybiBtb2RlczsKK30KKworLyoKKyAqIGRybV9hZGRfY21kYl9tb2RlcyAtIEFkZCBh IFlDQkNSIDQyMCBtb2RlIGludG8gYml0bWFwCisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgY29y cmVzcG9uZGluZyB0byB0aGUgSERNSSBzaW5rCisgKiBAdmljOiBDRUEgdmljIGZvciB0aGUgdmlk ZW8gbW9kZSB0byBiZSBhZGRlZCBpbiB0aGUgbWFwCisgKgorICogTWFrZXMgYW4gZW50cnkgZm9y IGEgdmlkZW9tb2RlIGluIHRoZSBZQ0JDUiA0MjAgYml0bWFwCisgKi8KK3N0YXRpYyB2b2lkCitk cm1fYWRkX2NtZGJfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTggc3Zk KQoreworCXU4IHZpYyA9IHN2ZF90b192aWMoc3ZkKTsKKwlzdHJ1Y3QgZHJtX2hkbWlfaW5mbyAq aGRtaSA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pOworCisJYml0bWFwX3NldChoZG1p LT55NDIwX2NtZGJfbW9kZXMsIHZpYywgMSk7Cit9CisKIHN0YXRpYyBpbnQKIGRvX2NlYV9tb2Rl cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBjb25zdCB1OCAqZGIsIHU4IGxlbikK IHsKIAlpbnQgaSwgbW9kZXMgPSAwOworCXN0cnVjdCBkcm1faGRtaV9pbmZvICpoZG1pID0gJmNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhkbWk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp IHsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CiAJCW1vZGUgPSBkcm1fZGlzcGxh eV9tb2RlX2Zyb21fdmljX2luZGV4KGNvbm5lY3RvciwgZGIsIGxlbiwgaSk7CiAJCWlmIChtb2Rl KSB7CisJCQkvKgorCQkJICogWUNCQ1I0MjAgY2FwYWJpbGl0eSBibG9jayBjb250YWlucyBhIGJp dG1hcCB3aGljaAorCQkJICogZ2l2ZXMgdGhlIGluZGV4IG9mIENFQSBtb2RlcyBmcm9tIENFQSBW REIsIHdoaWNoCisJCQkgKiBjYW4gc3VwcG9ydCBZQ0JDUiA0MjAgc2FtcGxpbmcgb3V0cHV0IGFs c28gKGFwYXJ0CisJCQkgKiBmcm9tIFJHQi9ZQ0JDUjQ0NCBldGMpLgorCQkJICogRm9yIGV4YW1w bGUsIGlmIHRoZSBiaXQgMCBpbiBiaXRtYXAgaXMgc2V0LAorCQkJICogZmlyc3QgbW9kZSBpbiBW REIgY2FuIHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0IHRvby4KKwkJCSAqIEFkZCBZQ0JDUjQyMCBt b2RlcyBvbmx5IGlmIHNpbmsgaXMgSERNSSAyLjAgY2FwYWJsZS4KKwkJCSAqLworCQkJaWYgKHRl c3RfYml0KGksICZoZG1pLT55NDIwX2NtZGJfbWFwKSkKKwkJCQlkcm1fYWRkX2NtZGJfbW9kZXMo Y29ubmVjdG9yLCBkYltpXSk7CisKIAkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBt b2RlKTsKIAkJCW1vZGVzKys7CiAJCX0KQEAgLTM0MzcsNiArMzUwMywxMiBAQCBkb19oZG1pX3Zz ZGJfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgY29uc3QgdTggKmRiLCB1 OCBsZW4sCiB9CiAKIHN0YXRpYyBpbnQKK2NlYV9kYl9leHRlbmRlZF90YWcoY29uc3QgdTggKmRi KQoreworCXJldHVybiBkYlsxXTsKK30KKworc3RhdGljIGludAogY2VhX2RiX3BheWxvYWRfbGVu KGNvbnN0IHU4ICpkYikKIHsKIAlyZXR1cm4gZGJbMF0gJiAweDFmOwpAQCAtMzQ5Nyw5ICszNTY5 LDc4IEBAIHN0YXRpYyBib29sIGNlYV9kYl9pc19oZG1pX2ZvcnVtX3ZzZGIoY29uc3QgdTggKmRi KQogCXJldHVybiBvdWkgPT0gSERNSV9GT1JVTV9JRUVFX09VSTsKIH0KIAorc3RhdGljIGJvb2wg Y2VhX2RiX2lzX3k0MjBjbWRiKGNvbnN0IHU4ICpkYikKK3sKKworCWlmIChjZWFfZGJfdGFnKGRi KSAhPSBWSURFT19DQVBBQklMSVRZX0JMT0NLKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWNl YV9kYl9wYXlsb2FkX2xlbihkYikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjZWFfZGJfZXh0 ZW5kZWRfdGFnKGRiKSAhPSBWSURFT19DQVBfQkxPQ0tfWTQyMENNREIpCisJCXJldHVybiBmYWxz ZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjZWFfZGJfaXNfeTQyMHZkYihj b25zdCB1OCAqZGIpCit7CisJaWYgKGNlYV9kYl90YWcoZGIpICE9IFZJREVPX0NBUEFCSUxJVFlf QkxPQ0spCisJCXJldHVybiBmYWxzZTsKKworCWlmICghY2VhX2RiX3BheWxvYWRfbGVuKGRiKSkK KwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGNlYV9kYl9leHRlbmRlZF90YWcoZGIpICE9IFZJREVP X0RBVEFfQkxPQ0tfNDIwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwog I2RlZmluZSBmb3JfZWFjaF9jZWFfZGIoY2VhLCBpLCBzdGFydCwgZW5kKSBcCiAJZm9yICgoaSkg PSAoc3RhcnQpOyAoaSkgPCAoZW5kKSAmJiAoaSkgKyBjZWFfZGJfcGF5bG9hZF9sZW4oJihjZWEp WyhpKV0pIDwgKGVuZCk7IChpKSArPSBjZWFfZGJfcGF5bG9hZF9sZW4oJihjZWEpWyhpKV0pICsg MSkKIAorc3RhdGljIHZvaWQgZHJtX3BhcnNlX3k0MjBjbWRiX2JpdG1hcChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAgY29uc3QgdTggKmRiKQoreworCXN0cnVjdCBk cm1fZGlzcGxheV9pbmZvICppbmZvID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOworCXN0cnVj dCBkcm1faGRtaV9pbmZvICpoZG1pID0gJmluZm8tPmhkbWk7CisJdTggbWFwX2xlbiA9IGNlYV9k Yl9wYXlsb2FkX2xlbihkYikgLSAxOworCXU4IGNvdW50OworCXU2NCBtYXAgPSAwOworCisJaWYg KG1hcF9sZW4gPT0gMCkgeworCQkvKiBBbGwgQ0VBIG1vZGVzIHN1cHBvcnQgeWNiY3I0MjAgc2Ft cGxpbmcgYWxzby4qLworCQloZG1pLT55NDIwX2NtZGJfbWFwID0gVTY0X01BWDsKKwkJaW5mby0+ Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBUaGlzIG1hcCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIGV4aXN0aW5nIENF QSBibG9jayBtb2RlcworCSAqIGZyb20gVkRCIGNhbiBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0 b28uIFNvIGlmIGJpdD0wIGlzCisJICogc2V0LCBmaXJzdCBtb2RlIGZyb20gVkRCIGNhbiBzdXBw b3J0IFlDQkNSNDIwIG91dHB1dCB0b28uCisJICogV2Ugd2lsbCBwYXJzZSBhbmQga2VlcCB0aGlz IG1hcCwgYmVmb3JlIHBhcnNpbmcgVkRCIGl0c2VsZgorCSAqIHRvIGF2b2lkIGdvaW5nIHRocm91 Z2ggdGhlIHNhbWUgYmxvY2sgYWdhaW4gYW5kIGFnYWluLgorCSAqCisJICogU3BlYyBpcyBub3Qg Y2xlYXIgYWJvdXQgbWF4IHBvc3NpYmxlIHNpemUgb2YgdGhpcyBibG9jay4KKwkgKiBDbGFtcGlu ZyBtYXggYml0bWFwIGJsb2NrIHNpemUgYXQgOCBieXRlcy4gRXZlcnkgYnl0ZSBjYW4KKwkgKiBh ZGRyZXNzIDggQ0VBIG1vZGVzLCBpbiB0aGlzIHdheSB0aGlzIG1hcCBjYW4gYWRkcmVzcworCSAq IDgqOCA9IGZpcnN0IDY0IFNWRHMuCisJICovCisJaWYgKFdBUk5fT05fT05DRShtYXBfbGVuID4g OCkpCisJCW1hcF9sZW4gPSA4OworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbWFwX2xlbjsg Y291bnQrKykKKwkJbWFwIHw9ICh1NjQpZGJbMiArIGNvdW50XSA8PCAoOCAqIGNvdW50KTsKKwor CWlmIChtYXApCisJCWluZm8tPmNvbG9yX2Zvcm1hdHMgfD0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JD QjQyMDsKKworCWhkbWktPnk0MjBfY21kYl9tYXAgPSBtYXA7Cit9CisKIHN0YXRpYyBpbnQKIGFk ZF9jZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQg KmVkaWQpCiB7CkBAIC0zNTIyLDEwICszNjYzLDE3IEBAIGFkZF9jZWFfbW9kZXMoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQpCiAJCQkJdmlkZW8gPSBk YiArIDE7CiAJCQkJdmlkZW9fbGVuID0gZGJsOwogCQkJCW1vZGVzICs9IGRvX2NlYV9tb2Rlcyhj b25uZWN0b3IsIHZpZGVvLCBkYmwpOwotCQkJfQotCQkJZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlf dnNkYihkYikpIHsKKwkJCX0gZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlfdnNkYihkYikpIHsKIAkJ CQloZG1pID0gZGI7CiAJCQkJaGRtaV9sZW4gPSBkYmw7CisJCQl9IGVsc2UgaWYgKGNlYV9kYl9p c195NDIwdmRiKGRiKSAmJgorCQkJCSAgIGNvbm5lY3Rvci0+eWNiY3JfNDIwX2FsbG93ZWQpIHsK KwkJCQljb25zdCB1OCAqdmRiNDIwID0gJmRiWzJdOworCisJCQkJLyogQWRkIDQ6MjowKG9ubHkp IG1vZGVzIHByZXNlbnQgaW4gRURJRCAqLworCQkJCW1vZGVzICs9IGRvX3k0MjB2ZGJfbW9kZXMo Y29ubmVjdG9yLAorCQkJCQkJCSAgdmRiNDIwLAorCQkJCQkJCSAgZGJsIC0gMSk7CiAJCQl9CiAJ CX0KIAl9CkBAIC00MjA2LDYgKzQzNTQsOCBAQCBzdGF0aWMgdm9pZCBkcm1fcGFyc2VfY2VhX2V4 dChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJZHJtX3BhcnNlX2hkbWlfdnNk Yl92aWRlbyhjb25uZWN0b3IsIGRiKTsKIAkJaWYgKGNlYV9kYl9pc19oZG1pX2ZvcnVtX3ZzZGIo ZGIpKQogCQkJZHJtX3BhcnNlX2hkbWlfZm9ydW1fdnNkYihjb25uZWN0b3IsIGRiKTsKKwkJaWYg KGNlYV9kYl9pc195NDIwY21kYihkYikpCisJCQlkcm1fcGFyc2VfeTQyMGNtZGJfYml0bWFwKGNv bm5lY3RvciwgZGIpOwogCX0KIH0KIApAQCAtNDQ2MCw2ICs0NjEwLDcgQEAgaW50IGRybV9hZGRf ZWRpZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAq ZWRpZCkKIAludW1fbW9kZXMgKz0gYWRkX2NlYV9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwogCW51 bV9tb2RlcyArPSBhZGRfYWx0ZXJuYXRlX2NlYV9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwogCW51 bV9tb2RlcyArPSBhZGRfZGlzcGxheWlkX2RldGFpbGVkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7 CisKIAlpZiAoZWRpZC0+ZmVhdHVyZXMgJiBEUk1fRURJRF9GRUFUVVJFX0RFRkFVTFRfR1RGKQog CQludW1fbW9kZXMgKz0gYWRkX2luZmVycmVkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CiAKZGlm ZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCBiL2luY2x1ZGUvZHJtL2RybV9j b25uZWN0b3IuaAppbmRleCA3NDkzZmQzLi5jZTIyMTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Ry bS9kcm1fY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCkBAIC0x MzcsNiArMTM3LDI1IEBAIHN0cnVjdCBkcm1fc2NkYyB7CiBzdHJ1Y3QgZHJtX2hkbWlfaW5mbyB7 CiAJLyoqIEBzY2RjOiBzaW5rJ3Mgc2NkYyBzdXBwb3J0IGFuZCBjYXBhYmlsaXRpZXMgKi8KIAlz dHJ1Y3QgZHJtX3NjZGMgc2NkYzsKKworCS8qKgorCSAqIEB5NDIwX3ZkYl9tb2RlczogYml0bWFw IG9mIG1vZGVzIHdoaWNoIGNhbiBzdXBwb3J0IHljYmNyNDIwCisJICogb3V0cHV0IG9ubHkgKG5v dCBub3JtYWwgUkdCL1lDQkNSNDQ0LzQyMiBvdXRwdXRzKS4gVGhlcmUgYXJlIHRvdGFsCisJICog MTA3IFZJQ3MgZGVmaW5lZCBieSBDRUEtODYxLUYgc3BlYywgc28gdGhlIHNpemUgaXMgMTI4IGJp dHMgdG8gbWFwCisJICogdXB0byAxMjggVklDczsKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHk0MjBf dmRiX21vZGVzW0JJVFNfVE9fTE9OR1MoMTI4KV07CisKKwkvKioKKwkgKiBAeTQyMF9jbWRiX21v ZGVzOiBiaXRtYXAgb2YgbW9kZXMgd2hpY2ggY2FuIHN1cHBvcnQgeWNiY3I0MjAKKwkgKiBvdXRw dXQgYWxzbywgYWxvbmcgd2l0aCBub3JtYWwgSERNSSBvdXRwdXRzLiBUaGVyZSBhcmUgdG90YWwg MTA3CisJICogVklDcyBkZWZpbmVkIGJ5IENFQS04NjEtRiBzcGVjLCBzbyB0aGUgc2l6ZSBpcyAx MjggYml0cyB0byBtYXAgdXB0bworCSAqIDEyOCBWSUNzOworCSAqLworCXVuc2lnbmVkIGxvbmcg eTQyMF9jbWRiX21vZGVzW0JJVFNfVE9fTE9OR1MoMTI4KV07CisKKwkvKiogQHk0MjBfY21kYl9t YXA6IGJpdG1hcCBvZiBTVkQgaW5kZXgsIHRvIGV4dHJheHQgdmNiIG1vZGVzICovCisJdW5zaWdu ZWQgbG9uZyB5NDIwX2NtZGJfbWFwOwogfTsKIAogLyoqCkBAIC0yMDAsNiArMjE5LDcgQEAgc3Ry dWN0IGRybV9kaXNwbGF5X2luZm8gewogI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NAkJ KDE8PDApCiAjZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQJKDE8PDEpCiAjZGVmaW5l IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjIJKDE8PDIpCisjZGVmaW5lIERSTV9DT0xPUl9GT1JN QVRfWUNSQ0I0MjAJKDE8PDMpCiAKIAkvKioKIAkgKiBAY29sb3JfZm9ybWF0czogSERNSSBDb2xv ciBmb3JtYXRzLCBzZWxlY3RzIGJldHdlZW4gUkdCIGFuZCBZQ3JDYgotLSAKMi43LjQKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=