From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shashank Sharma Subject: [PATCH 05/20] drm/edid: parse YCBCR420 videomodes from EDID Date: Mon, 10 Jul 2017 16:48:33 +0530 Message-ID: <1499685528-6926-6-git-send-email-shashank.sharma@intel.com> References: <1499685528-6926-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: <1499685528-6926-1-git-send-email-shashank.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org 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 bHkgZW50cnkgaW4gdGhlIHZjYl9iaXRtYXAuCgpWMjogQWRkcmVzc2VkCiAgICBSZXZpZXcgY29t bWVudHMgZnJvbSBFbWlsOgogICAgLSBVc2UgMVVMTDw8aSBpbnN0ZWFkIG9mIDE8PGkgdG8gbWFr ZSBzdXJlIHRoZSBvdXRwdXQgaXMgNjRiaXQuCiAgICAtIFVzZSB0aGUgc3VnZ2VzdGVkIG1ldGhv ZCBmb3IgdXBkYXRpbmcgZGJtYXAuCiAgICAtIEFkZCBkb2N1bWVudGF0aW9uIGZvciBZQ0JDUjQy MF92Y2JfbWFwIHRvIGZpeCBrYnVpbGQgd2FybmluZy4KCiAgICBSZXZpZXcgY29tbWVudHMgZnJv bSBWaWxsZToKICAgIC0gRG8gbm90IGV4cG9zZSB0aGUgWUNCQ1I0MjAgZmxhZ3MgaW4gdWFiaSBs YXllciwga2VlcCBpdCBpbnRlcm5hbC4KICAgIC0gU2F2ZSBhIG1hcCBvZiBZQ0JDUjQyMCBtb2Rl cyBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KICAgIC0gQ2hlY2sgZGIgbGVuZ3RoIGJlZm9yZSB0cnlp bmcgdG8gcGFyc2UgZXh0ZW5kZWQgdGFnLgogICAgLSBBZGQgYSB3YXJuaW5nIGlmIHRoZXJlIGFy ZSA+IDY0IG1vZGVzIGluIGNhcGFiaWxpdHkgbWFwIGJsb2NrLgogICAgLSBVc2UgeTQyMGNtZGIg aW4gZnVuY3Rpb24gbmFtZXMgYW5kIG1hY3JvcyB3aGlsZSBkZWFsaW5nIHdpdGggdmNiCiAgICAg IHRvIGJlIGFsaWduZWQgd2l0aCBzcGVjLgogICAgLSBNb3ZlIHRoZSBkaXNwbGF5IGluZm9ybWF0 aW9uIHBhcnNpbmcgYmxvY2sgYWhlYWQgb2YgbW9kZSBwYXJzaW5nCiAgICAgIGJsb2Nrcy4KClYz OiBBZGRyZXNzZWQgZGVzaWduL3JldmlldyBjb21tZW50cyBmcm9tIFZpbGxlCiAgICAtIERvIG5v dCBhZGQgZmxhZ3MgaW4gdmlkZW8gbW9kZXMsIGVsc2Ugd2UgaGF2ZSB0byBleHBvc2UgdGhlbSB0 byB1c2VyCiAgICAtIFRoZXJlIHNob3VsZCBub3QgYmUgYSBVQUJJIGNoYW5nZSwgYW5kIGtlcm5l bCBzaG91bGQgZGV0ZWN0IHRoZQogICAgICBjaG9pY2Ugb2YgdGhlIG91dHB1dCBiYXNlZCBvbiB0 eXBlIG9mIG1vZGUsIGFuZCB0aGUgYml0bWFwcy4KICAgIC0gVXNlIHN0YW5kYXJkIGJpdG9wcyBm cm9tIGtlcm5lbCBiaXRtYXAgaGVhZGVyLCBpbnN0ZWFkIG9mIGNhbGN1bGF0aW5nCiAgICAgIGJp dCBwb3NpdGlvbnMgbWFudWFsbHkuCgpWNDogQWRkcmVzc2VkIHJldmlldyBjb21tZW50cyBmcm9t IFZpbGxlOgogICAgLSBzL3ljYmNyXzQyMF92ZGIveTQyMHZkYgogICAgLSBzL3ljYmNyXzQyMF92 Y2IveTQyMGNtZGIKICAgIC0gQmUgbGVzcyB2ZXJib3NlIG9uIGRlc2NyaXB0aW9uIG9mIGRvX3k0 MjB2ZGJfbW9kZXMKICAgIC0gTW92ZSBuZXdtb2RlIHZhcmlhYmxlIGluIHRoZSBsb29wIHNjb3Bl LgogICAgLSBVc2Ugc3ZkX3RvX3ZpYygpIHRvIGdldCBhIFZJQywgaW5zdGVhZCBvZiAweDdmCiAg ICAtIFJlbW92ZSBiaXRtYXAgZGVzY3JpcHRpb24gZm9yIENNREIgbW9kZXMgJiBWREIgbW9kZXMK ICAgIC0gRG9udCBhZGQgY29ubmVjdG9yLT55Y2Jjcl80MjBfYWxsb3dlZCBjaGVjayBmb3IgY21k YiBtb2RlcwogICAgLSBSZW1vdmUgJ2xlbicgdmFyaWFibGUsIGluIGlzX3k0MjBjbWRiIGZ1bmN0 aW9uLCB3aGljaCBpcyB1c2VkCiAgICAgIG9ubHkgb25jZQogICAgLSBBZGQgbGVuZ3RoIGNoZWNr IGluIGlzX3k0MjB2ZGIgZnVuY3Rpb24KICAgIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IGlmICghZGIp IGNoZWNrIGluIGZ1bmN0aW9uIHBhcnNlX3k0MjBjbWRiX2JpdG1hcAogICAgLSBEbyBub3QgYWRk IHByaW50IGFib3V0IFlDQkNSIDQyMCBtb2RlcwogICAgLSBGaXggaW5kZW50YXRpb24gaW4gZmV3 IHBsYWNlcwogICAgLSBNb3ZlIHljYmNyNDIwX2RjX21vZGVzIGluIG5leHQgcGF0Y2gsIHdoZXJl IGl0cyB1c2VkCiAgICAtIEFkZCBhIHNlcGFyYXRlIHBhdGNoIGZvciBtb3ZlbWVudCBvZiBkcm1f YWRkX2Rpc3BsYXlfaW5mbygpCgpWNTogQWRkcmVzc2VkIHJldmlldyBjb21tZW50cyBmcm9tIFZp bGxlOgogICAgLSBBZGQgdGhlIHBhdGNoIHdoaWNoIGNsZWFucyB1cCB0aGUgY3VycmVudCBFWFRF TkRFRF9UQUcgdXNhZ2UKICAgIC0gTWFrZSB5NDIwX2NtZGJfbWFwIHU2NAogICAgLSBEbyBub3Qg YmxvY2sgeWNiY3I0MjAgbW9kZXMgd2hpbGUgcGFyc2luZyB0aGUgRURJRCwgcmF0aGVyCiAgICAg IGFkZCBhIHNlcGFyYXRlIGhlbHBlciBmdW5jdGlvbiB0byBwcnVuZSB5Y2JjcjQyMC1vbmx5IG1v ZGVzIGZyb20KICAgICAgY29ubmVjdG9yJ3MgcHJvYmVkIG1vZGVzLgoKVjY6IFJlYmFzZQoKU2ln bmVkLW9mZi1ieTogU2hhc2hhbmsgU2hhcm1hIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jICB8IDE0OCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLQogaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oIHwg IDIwICsrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNjYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZWRpZC5jCmluZGV4IDlhMDdmNDIuLjEwZGFiNjIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5j CkBAIC0yNzgzLDYgKzI3ODMsOCBAQCBhZGRfZGV0YWlsZWRfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQsCiAjZGVmaW5lIFNQRUFLRVJfQkxP Q0sJMHgwNAogI2RlZmluZSBVU0VfRVhURU5ERURfVEFHIDB4MDcKICNkZWZpbmUgRVhUX1ZJREVP X0NBUEFCSUxJVFlfQkxPQ0sgMHgwMAorI2RlZmluZSBFWFRfVklERU9fREFUQV9CTE9DS180MjAJ MHgwRQorI2RlZmluZSBFWFRfVklERU9fQ0FQX0JMT0NLX1k0MjBDTURCIDB4MEYKICNkZWZpbmUg RURJRF9CQVNJQ19BVURJTwkoMSA8PCA2KQogI2RlZmluZSBFRElEX0NFQV9ZQ1JDQjQ0NAkoMSA8 PCA1KQogI2RlZmluZSBFRElEX0NFQV9ZQ1JDQjQyMgkoMSA8PCA0KQpAQCAtMzE1NCwxNSArMzE1 Niw3OSBAQCBkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmljX2luZGV4KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCiAJcmV0dXJuIG5ld21vZGU7CiB9CiAKKy8qCisgKiBkb195NDIwdmRi X21vZGVzIC0gUGFyc2UgWUNCQ1IgNDIwIG9ubHkgbW9kZXMKKyAqIEBjb25uZWN0b3I6IGNvbm5l Y3RvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBIRE1JIHNpbmsKKyAqIEBzdmRzOiBzdGFydCBvZiB0 aGUgZGF0YSBibG9jayBvZiBDRUEgWUNCQ1IgNDIwIFZEQgorICogQGxlbjogbGVuZ3RoIG9mIHRo ZSBDRUEgWUNCQ1IgNDIwIFZEQgorICoKKyAqIFBhcnNlIHRoZSBDRUEtODYxLUYgWUNCQ1IgNDIw IFZpZGVvIERhdGEgQmxvY2sgKFk0MjBWREIpCisgKiB3aGljaCBjb250YWlucyBtb2RlcyB3aGlj aCBjYW4gYmUgc3VwcG9ydGVkIGluIFlDQkNSIDQyMAorICogb3V0cHV0IGZvcm1hdCBvbmx5Lgor ICovCitzdGF0aWMgaW50IGRvX3k0MjB2ZGJfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCQkgICBjb25zdCB1OCAqc3ZkcywgdTggc3Zkc19sZW4pCit7CisJaW50IG1v ZGVzID0gMCwgaTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJ c3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87 CisJc3RydWN0IGRybV9oZG1pX2luZm8gKmhkbWkgPSAmaW5mby0+aGRtaTsKKworCWZvciAoaSA9 IDA7IGkgPCBzdmRzX2xlbjsgaSsrKSB7CisJCXU4IHZpYyA9IHN2ZF90b192aWMoc3Zkc1tpXSk7 CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOworCisJCW5ld21vZGUgPSBkcm1f bW9kZV9kdXBsaWNhdGUoZGV2LCAmZWRpZF9jZWFfbW9kZXNbdmljXSk7CisJCWlmICghbmV3bW9k ZSkKKwkJCWJyZWFrOworCQliaXRtYXBfc2V0KGhkbWktPnk0MjBfdmRiX21vZGVzLCB2aWMsIDEp OworCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CisJCW1vZGVzKys7 CisJfQorCisJaWYgKG1vZGVzID4gMCkKKwkJaW5mby0+Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09M T1JfRk9STUFUX1lDUkNCNDIwOworCXJldHVybiBtb2RlczsKK30KKworLyoKKyAqIGRybV9hZGRf Y21kYl9tb2RlcyAtIEFkZCBhIFlDQkNSIDQyMCBtb2RlIGludG8gYml0bWFwCisgKiBAY29ubmVj dG9yOiBjb25uZWN0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgSERNSSBzaW5rCisgKiBAdmljOiBD RUEgdmljIGZvciB0aGUgdmlkZW8gbW9kZSB0byBiZSBhZGRlZCBpbiB0aGUgbWFwCisgKgorICog TWFrZXMgYW4gZW50cnkgZm9yIGEgdmlkZW9tb2RlIGluIHRoZSBZQ0JDUiA0MjAgYml0bWFwCisg Ki8KK3N0YXRpYyB2b2lkCitkcm1fYWRkX2NtZGJfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwgdTggc3ZkKQoreworCXU4IHZpYyA9IHN2ZF90b192aWMoc3ZkKTsKKwlzdHJ1 Y3QgZHJtX2hkbWlfaW5mbyAqaGRtaSA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pOwor CisJYml0bWFwX3NldChoZG1pLT55NDIwX2NtZGJfbW9kZXMsIHZpYywgMSk7Cit9CisKIHN0YXRp YyBpbnQKIGRvX2NlYV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBjb25z dCB1OCAqZGIsIHU4IGxlbikKIHsKIAlpbnQgaSwgbW9kZXMgPSAwOworCXN0cnVjdCBkcm1faGRt aV9pbmZvICpoZG1pID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhkbWk7CiAKIAlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CiAJ CW1vZGUgPSBkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmljX2luZGV4KGNvbm5lY3RvciwgZGIsIGxl biwgaSk7CiAJCWlmIChtb2RlKSB7CisJCQkvKgorCQkJICogWUNCQ1I0MjAgY2FwYWJpbGl0eSBi bG9jayBjb250YWlucyBhIGJpdG1hcCB3aGljaAorCQkJICogZ2l2ZXMgdGhlIGluZGV4IG9mIENF QSBtb2RlcyBmcm9tIENFQSBWREIsIHdoaWNoCisJCQkgKiBjYW4gc3VwcG9ydCBZQ0JDUiA0MjAg c2FtcGxpbmcgb3V0cHV0IGFsc28gKGFwYXJ0CisJCQkgKiBmcm9tIFJHQi9ZQ0JDUjQ0NCBldGMp LgorCQkJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBiaXQgMCBpbiBiaXRtYXAgaXMgc2V0LAorCQkJ ICogZmlyc3QgbW9kZSBpbiBWREIgY2FuIHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0IHRvby4KKwkJ CSAqIEFkZCBZQ0JDUjQyMCBtb2RlcyBvbmx5IGlmIHNpbmsgaXMgSERNSSAyLjAgY2FwYWJsZS4K KwkJCSAqLworCQkJaWYgKGhkbWktPnk0MjBfY21kYl9tYXAgJiAoMSA8PCBpKSkKKwkJCQlkcm1f YWRkX2NtZGJfbW9kZXMoY29ubmVjdG9yLCBkYltpXSk7CisKIAkJCWRybV9tb2RlX3Byb2JlZF9h ZGQoY29ubmVjdG9yLCBtb2RlKTsKIAkJCW1vZGVzKys7CiAJCX0KQEAgLTM1MDQsOSArMzU3MCw3 OCBAQCBzdGF0aWMgYm9vbCBjZWFfZGJfaXNfaGRtaV9mb3J1bV92c2RiKGNvbnN0IHU4ICpkYikK IAlyZXR1cm4gb3VpID09IEhETUlfRk9SVU1fSUVFRV9PVUk7CiB9CiAKK3N0YXRpYyBib29sIGNl YV9kYl9pc195NDIwY21kYihjb25zdCB1OCAqZGIpCit7CisKKwlpZiAoY2VhX2RiX3RhZyhkYikg IT0gVVNFX0VYVEVOREVEX1RBRykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFjZWFfZGJfcGF5 bG9hZF9sZW4oZGIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoY2VhX2RiX2V4dGVuZGVkX3Rh ZyhkYikgIT0gRVhUX1ZJREVPX0NBUF9CTE9DS19ZNDIwQ01EQikKKwkJcmV0dXJuIGZhbHNlOwor CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNlYV9kYl9pc195NDIwdmRiKGNvbnN0 IHU4ICpkYikKK3sKKwlpZiAoY2VhX2RiX3RhZyhkYikgIT0gVVNFX0VYVEVOREVEX1RBRykKKwkJ cmV0dXJuIGZhbHNlOworCisJaWYgKCFjZWFfZGJfcGF5bG9hZF9sZW4oZGIpKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlpZiAoY2VhX2RiX2V4dGVuZGVkX3RhZyhkYikgIT0gRVhUX1ZJREVPX0RBVEFf QkxPQ0tfNDIwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogI2RlZmlu ZSBmb3JfZWFjaF9jZWFfZGIoY2VhLCBpLCBzdGFydCwgZW5kKSBcCiAJZm9yICgoaSkgPSAoc3Rh cnQpOyAoaSkgPCAoZW5kKSAmJiAoaSkgKyBjZWFfZGJfcGF5bG9hZF9sZW4oJihjZWEpWyhpKV0p IDwgKGVuZCk7IChpKSArPSBjZWFfZGJfcGF5bG9hZF9sZW4oJihjZWEpWyhpKV0pICsgMSkKIAor c3RhdGljIHZvaWQgZHJtX3BhcnNlX3k0MjBjbWRiX2JpdG1hcChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAorCQkJCSAgICAgY29uc3QgdTggKmRiKQoreworCXN0cnVjdCBkcm1fZGlz cGxheV9pbmZvICppbmZvID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOworCXN0cnVjdCBkcm1f aGRtaV9pbmZvICpoZG1pID0gJmluZm8tPmhkbWk7CisJdTggbWFwX2xlbiA9IGNlYV9kYl9wYXls b2FkX2xlbihkYikgLSAxOworCXU4IGNvdW50OworCXU2NCBtYXAgPSAwOworCisJaWYgKG1hcF9s ZW4gPT0gMCkgeworCQkvKiBBbGwgQ0VBIG1vZGVzIHN1cHBvcnQgeWNiY3I0MjAgc2FtcGxpbmcg YWxzby4qLworCQloZG1pLT55NDIwX2NtZGJfbWFwID0gVTY0X01BWDsKKwkJaW5mby0+Y29sb3Jf Zm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOworCQlyZXR1cm47CisJfQorCisJ LyoKKwkgKiBUaGlzIG1hcCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIGV4aXN0aW5nIENFQSBibG9j ayBtb2RlcworCSAqIGZyb20gVkRCIGNhbiBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0b28uIFNv IGlmIGJpdD0wIGlzCisJICogc2V0LCBmaXJzdCBtb2RlIGZyb20gVkRCIGNhbiBzdXBwb3J0IFlD QkNSNDIwIG91dHB1dCB0b28uCisJICogV2Ugd2lsbCBwYXJzZSBhbmQga2VlcCB0aGlzIG1hcCwg YmVmb3JlIHBhcnNpbmcgVkRCIGl0c2VsZgorCSAqIHRvIGF2b2lkIGdvaW5nIHRocm91Z2ggdGhl IHNhbWUgYmxvY2sgYWdhaW4gYW5kIGFnYWluLgorCSAqCisJICogU3BlYyBpcyBub3QgY2xlYXIg YWJvdXQgbWF4IHBvc3NpYmxlIHNpemUgb2YgdGhpcyBibG9jay4KKwkgKiBDbGFtcGluZyBtYXgg Yml0bWFwIGJsb2NrIHNpemUgYXQgOCBieXRlcy4gRXZlcnkgYnl0ZSBjYW4KKwkgKiBhZGRyZXNz IDggQ0VBIG1vZGVzLCBpbiB0aGlzIHdheSB0aGlzIG1hcCBjYW4gYWRkcmVzcworCSAqIDgqOCA9 IGZpcnN0IDY0IFNWRHMuCisJICovCisJaWYgKFdBUk5fT05fT05DRShtYXBfbGVuID4gOCkpCisJ CW1hcF9sZW4gPSA4OworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbWFwX2xlbjsgY291bnQr KykKKwkJbWFwIHw9ICh1NjQpZGJbMiArIGNvdW50XSA8PCAoOCAqIGNvdW50KTsKKworCWlmICht YXApCisJCWluZm8tPmNvbG9yX2Zvcm1hdHMgfD0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMDsK KworCWhkbWktPnk0MjBfY21kYl9tYXAgPSBtYXA7Cit9CisKIHN0YXRpYyBpbnQKIGFkZF9jZWFf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQp CiB7CkBAIC0zNTI5LDEwICszNjY0LDE2IEBAIGFkZF9jZWFfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQpCiAJCQkJdmlkZW8gPSBkYiArIDE7 CiAJCQkJdmlkZW9fbGVuID0gZGJsOwogCQkJCW1vZGVzICs9IGRvX2NlYV9tb2Rlcyhjb25uZWN0 b3IsIHZpZGVvLCBkYmwpOwotCQkJfQotCQkJZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlfdnNkYihk YikpIHsKKwkJCX0gZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlfdnNkYihkYikpIHsKIAkJCQloZG1p ID0gZGI7CiAJCQkJaGRtaV9sZW4gPSBkYmw7CisJCQl9IGVsc2UgaWYgKGNlYV9kYl9pc195NDIw dmRiKGRiKSkgeworCQkJCWNvbnN0IHU4ICp2ZGI0MjAgPSAmZGJbMl07CisKKwkJCQkvKiBBZGQg NDoyOjAob25seSkgbW9kZXMgcHJlc2VudCBpbiBFRElEICovCisJCQkJbW9kZXMgKz0gZG9feTQy MHZkYl9tb2Rlcyhjb25uZWN0b3IsCisJCQkJCQkJICB2ZGI0MjAsCisJCQkJCQkJICBkYmwgLSAx KTsKIAkJCX0KIAkJfQogCX0KQEAgLTQyMTUsNiArNDM1Niw4IEBAIHN0YXRpYyB2b2lkIGRybV9w YXJzZV9jZWFfZXh0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQlkcm1fcGFy c2VfaGRtaV92c2RiX3ZpZGVvKGNvbm5lY3RvciwgZGIpOwogCQlpZiAoY2VhX2RiX2lzX2hkbWlf Zm9ydW1fdnNkYihkYikpCiAJCQlkcm1fcGFyc2VfaGRtaV9mb3J1bV92c2RiKGNvbm5lY3Rvciwg ZGIpOworCQlpZiAoY2VhX2RiX2lzX3k0MjBjbWRiKGRiKSkKKwkJCWRybV9wYXJzZV95NDIwY21k Yl9iaXRtYXAoY29ubmVjdG9yLCBkYik7CiAJfQogfQogCkBAIC00NDc2LDYgKzQ2MTksNyBAQCBp bnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0 cnVjdCBlZGlkICplZGlkKQogCW51bV9tb2RlcyArPSBhZGRfY2VhX21vZGVzKGNvbm5lY3Rvciwg ZWRpZCk7CiAJbnVtX21vZGVzICs9IGFkZF9hbHRlcm5hdGVfY2VhX21vZGVzKGNvbm5lY3Rvciwg ZWRpZCk7CiAJbnVtX21vZGVzICs9IGFkZF9kaXNwbGF5aWRfZGV0YWlsZWRfbW9kZXMoY29ubmVj dG9yLCBlZGlkKTsKKwogCWlmIChlZGlkLT5mZWF0dXJlcyAmIERSTV9FRElEX0ZFQVRVUkVfREVG QVVMVF9HVEYpCiAJCW51bV9tb2RlcyArPSBhZGRfaW5mZXJyZWRfbW9kZXMoY29ubmVjdG9yLCBl ZGlkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oIGIvaW5jbHVk ZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCmluZGV4IGFlNWI3ZGMuLmIzYWY4ZTMgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY29ubmVj dG9yLmgKQEAgLTEzNSw2ICsxMzUsMjUgQEAgc3RydWN0IGRybV9zY2RjIHsKIHN0cnVjdCBkcm1f aGRtaV9pbmZvIHsKIAkvKiogQHNjZGM6IHNpbmsncyBzY2RjIHN1cHBvcnQgYW5kIGNhcGFiaWxp dGllcyAqLwogCXN0cnVjdCBkcm1fc2NkYyBzY2RjOworCisJLyoqCisJICogQHk0MjBfdmRiX21v ZGVzOiBiaXRtYXAgb2YgbW9kZXMgd2hpY2ggY2FuIHN1cHBvcnQgeWNiY3I0MjAKKwkgKiBvdXRw dXQgb25seSAobm90IG5vcm1hbCBSR0IvWUNCQ1I0NDQvNDIyIG91dHB1dHMpLiBUaGVyZSBhcmUg dG90YWwKKwkgKiAxMDcgVklDcyBkZWZpbmVkIGJ5IENFQS04NjEtRiBzcGVjLCBzbyB0aGUgc2l6 ZSBpcyAxMjggYml0cyB0byBtYXAKKwkgKiB1cHRvIDEyOCBWSUNzOworCSAqLworCXVuc2lnbmVk IGxvbmcgeTQyMF92ZGJfbW9kZXNbQklUU19UT19MT05HUygxMjgpXTsKKworCS8qKgorCSAqIEB5 NDIwX2NtZGJfbW9kZXM6IGJpdG1hcCBvZiBtb2RlcyB3aGljaCBjYW4gc3VwcG9ydCB5Y2JjcjQy MAorCSAqIG91dHB1dCBhbHNvLCBhbG9uZyB3aXRoIG5vcm1hbCBIRE1JIG91dHB1dHMuIFRoZXJl IGFyZSB0b3RhbCAxMDcKKwkgKiBWSUNzIGRlZmluZWQgYnkgQ0VBLTg2MS1GIHNwZWMsIHNvIHRo ZSBzaXplIGlzIDEyOCBiaXRzIHRvIG1hcCB1cHRvCisJICogMTI4IFZJQ3M7CisJICovCisJdW5z aWduZWQgbG9uZyB5NDIwX2NtZGJfbW9kZXNbQklUU19UT19MT05HUygxMjgpXTsKKworCS8qKiBA eTQyMF9jbWRiX21hcDogYml0bWFwIG9mIFNWRCBpbmRleCwgdG8gZXh0cmF4dCB2Y2IgbW9kZXMg Ki8KKwl1NjQgeTQyMF9jbWRiX21hcDsKIH07CiAKIC8qKgpAQCAtMTk4LDYgKzIxNyw3IEBAIHN0 cnVjdCBkcm1fZGlzcGxheV9pbmZvIHsKICNkZWZpbmUgRFJNX0NPTE9SX0ZPUk1BVF9SR0I0NDQJ CSgxPDwwKQogI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDQ0CSgxPDwxKQogI2RlZmlu ZSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIyCSgxPDwyKQorI2RlZmluZSBEUk1fQ09MT1JfRk9S TUFUX1lDUkNCNDIwCSgxPDwzKQogCiAJLyoqCiAJICogQGNvbG9yX2Zvcm1hdHM6IEhETUkgQ29s b3IgZm9ybWF0cywgc2VsZWN0cyBiZXR3ZWVuIFJHQiBhbmQgWUNyQ2IKLS0gCjIuNy40CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK