From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shashank Sharma Subject: [PATCH v3 04/14] drm/edid: parse YCBCR 420 videomodes from EDID Date: Wed, 14 Jun 2017 23:17:35 +0530 Message-ID: <1497462465-14066-5-git-send-email-shashank.sharma@intel.com> References: <1497462465-14066-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: <1497462465-14066-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: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, ville.syrjala@linux.intel.com Cc: ander.conselvan.de.oliveira@intel.com, Jose Abreu , Emil Velikov 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 YWxjdWxhdGluZwogICAgICBiaXQgcG9zaXRpb25zIG1hbnVhbGx5LgoKU2lnbmVkLW9mZi1ieTog U2hhc2hhbmsgU2hhcm1hIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9kcm1fZWRpZC5jICB8IDE5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLQogaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oIHwgIDIzICsrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCAyMTEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZWRpZC5jCmluZGV4IDZmZDhhOTguLjQ5NTNmODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCkBAIC0yNzgxLDcg KzI3ODEsOSBAQCBhZGRfZGV0YWlsZWRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3Rvciwgc3RydWN0IGVkaWQgKmVkaWQsCiAjZGVmaW5lIFZJREVPX0JMT0NLICAgICAweDAyCiAj ZGVmaW5lIFZFTkRPUl9CTE9DSyAgICAweDAzCiAjZGVmaW5lIFNQRUFLRVJfQkxPQ0sJMHgwNAot I2RlZmluZSBWSURFT19DQVBBQklMSVRZX0JMT0NLCTB4MDcKKyNkZWZpbmUgVklERU9fQ0FQQUJJ TElUWV9CTE9DSyAweDA3CisjZGVmaW5lIFZJREVPX0RBVEFfQkxPQ0tfNDIwCTB4MEUKKyNkZWZp bmUgVklERU9fQ0FQX0JMT0NLX1k0MjBDTURCIDB4MEYKICNkZWZpbmUgRURJRF9CQVNJQ19BVURJ TwkoMSA8PCA2KQogI2RlZmluZSBFRElEX0NFQV9ZQ1JDQjQ0NAkoMSA8PCA1KQogI2RlZmluZSBF RElEX0NFQV9ZQ1JDQjQyMgkoMSA8PCA0KQpAQCAtMzE0MywxNSArMzE0NSwxMDMgQEAgZHJtX2Rp c3BsYXlfbW9kZV9mcm9tX3ZpY19pbmRleChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAogCXJldHVybiBuZXdtb2RlOwogfQogCisvKgorICogZG9feWNiY3JfNDIwX3ZkYl9tb2RlcyAt IFBhcnNlIFlDQkNSIDQyMCBvbmx5IG1vZGVzCisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgY29y cmVzcG9uZGluZyB0byB0aGUgSERNSSBzaW5rCisgKiBAc3Zkczogc3RhcnQgb2YgdGhlIGRhdGEg YmxvY2sgb2YgQ0VBIFlDQkNSIDQyMCBWREIKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgQ0VBIFlD QkNSIDQyMCBWREIKKyAqCisgKiBDRUEtODYxLUYgaGFzIGFkZGVkIGEgbmV3IHZpZGVvIGJsb2Nr IGNhbGxlZCBZQ0JDUiA0MjAgVmlkZW8KKyAqIERhdGEgQmxvY2sgKHljYmNyIDQyMCB2ZGIpLiBU aGlzIGJsb2NrIGNvbnRhaW5zIG1vZGVzIHdoaWNoCisgKiBzdXBwb3J0IFlDQkNSIDQyMCBIRE1J IG91dHB1dCAob25seSBZQ0JDUiA0MjApLiBUaGlzIGZ1bmN0aW9uCisgKiBwYXJzZXMgdGhlIGJs b2NrIGFuZCBhZGRzIHRoZXNlIG1vZGVzIGludG8gY29ubmVjdG9yJ3MgbW9kZSBsaXN0LgorICov CitzdGF0aWMgaW50IGRvX3ljYmNyXzQyMF92ZGJfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKKwkJCQkgICBjb25zdCB1OCAqc3ZkcywgdTggc3Zkc19sZW4pCit7CisJaW50 IG1vZGVzID0gMCwgaTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7 CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5 X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87CisJc3RydWN0IGRybV9oZG1p X2luZm8gKmhkbWkgPSAmaW5mby0+aGRtaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdmRzX2xlbjsg aSsrKSB7CisJCXU4IHZpYyA9IHN2ZHNbaV0gJiAweDdmOworCisJCW5ld21vZGUgPSBkcm1fbW9k ZV9kdXBsaWNhdGUoZGV2LCAmZWRpZF9jZWFfbW9kZXNbdmljXSk7CisJCWlmICghbmV3bW9kZSkK KwkJCWJyZWFrOworCQkvKgorCQkgKiB5Y2JjcjQyMF92ZGJfbW9kZXMgaXMgYSBmaXggcG9zaXRp b24gMTI4IGJpdCBiaXRtYXAuCisJCSAqIEV2ZXJ5IGJpdCBoZXJlIHJlcHJlc2VudHMgYSBWSUMs IGZyb20gQ0VBLTg2MS1GIGxpc3QuCisJCSAqIFNvIGlmIGJpdFtuXSBpcyBzZXQsIGl0IGluZGlj YXRlcyB2aWNbbisxXSBzdXBwb3J0cworCQkgKiBZQ0JDUjQyMCBvdXRwdXQuIEJpdCAwIGlzIGR1 bW15LCBhcyBWSUNzIHN0YXJ0IGF0IDEuCisJCSAqIHljYmNyNDIwX3ZjYl9tb2Rlc1swXSA9IHxW SUM9NjQgfFZJQz02MyB8Li4uLi58VklDPTIgfFZJQz0xIHwKKwkJICogeWNiY3I0MjBfdmNiX21v ZGVzWzFdID0gfFZJQz0xMjh8VklDPTEyN3wuLi4uLnxWSUM9NjZ8VklDPTY1fAorCQkgKi8KKwkJ Yml0bWFwX3NldChoZG1pLT55Y2JjcjQyMF92ZGJfbW9kZXMsIHZpYywgMSk7CisJCWRybV9tb2Rl X3Byb2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKKwkJbW9kZXMrKzsKKwl9CisKKwlpZiAo bW9kZXMgPiAwKQorCQlpbmZvLT5jb2xvcl9mb3JtYXRzIHw9IERSTV9DT0xPUl9GT1JNQVRfWUNS Q0I0MjA7CisJcmV0dXJuIG1vZGVzOworfQorCisvKgorICogZHJtX2FkZF92Y2JfbW9kZXMgLSBB ZGQgYSBZQ0JDUiA0MjAgbW9kZSBpbnRvIGJpdG1hcAorICogQGNvbm5lY3RvcjogY29ubmVjdG9y IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEhETUkgc2luaworICogQHZpYzogQ0VBIHZpYyBmb3IgdGhl IHZpZGVvIG1vZGUgdG8gYmUgYWRkZWQgaW4gdGhlIG1hcAorICoKKyAqIE1ha2VzIGFuIGVudHJ5 IGZvciBhIHZpZGVvbW9kZSBpbiB0aGUgWUNCQ1IgNDIwIGJpdG1hcAorICovCitzdGF0aWMgdm9p ZAorZHJtX2FkZF92Y2JfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTgg dmljKQoreworCXN0cnVjdCBkcm1faGRtaV9pbmZvICpoZG1pID0gJmNvbm5lY3Rvci0+ZGlzcGxh eV9pbmZvLmhkbWk7CisKKwkvKiBWSUNzIGFyZSAxIHRvIDEyNygxMDcgZGVmaW5lZCB0aWxsIENF QS04NjEtRikgKi8KKwl2aWMgJj0gMTI3OworCisJLyoKKwkgKiB5Y2JjcjQyMF92Y2JfbW9kZXMg aXMgYSBmaXggcG9zaXRpb24gMTI4IGJpdCBiaXRtYXAuCisJICogRXZlcnkgYml0IGhlcmUgcmVw cmVzZW50cyBhIFZJQywgZnJvbSBDRUEtODYxLUYgbGlzdC4KKwkgKiBTbyBpZiBiaXRbbl0gaXMg c2V0LCBpdCBpbmRpY2F0ZXMgdmljW24rMV0gc3VwcG9ydHMKKwkgKiBZQ0JDUjQyMCBvdXRwdXQu IEJpdCAwIGlzIGR1bW15LCBhcyBWSUNzIHN0YXJ0IGF0IDEuCisJICogeWNiY3I0MjBfdmNiX21v ZGVzWzBdID0gfFZJQz02NCB8VklDPTYzIHwuLi4uLnxWSUM9MiB8VklDPTEgfAorCSAqIHljYmNy NDIwX3ZjYl9tb2Rlc1sxXSA9IHxWSUM9MTI4fFZJQz0xMjd8Li4uLi58VklDPTY2fFZJQz02NXwK KwkgKiBEaWZmZXJlbmNlIGJldHdlZW4gYSB2Y2JfbW9kZSBhbmQgdmRiX21vZGUgaXMgdGhhdCBh IHZjYl9tb2RlCisJICogY2FuIHN1cHBvcnQgb3RoZXIgSERNSSBvdXRwdXRzIGxpa2UgUkdCL1lD QkNSNDQ0LzQyMiBhbHNvCisJICogYWxvbmcgd2l0aCBZQ0JDUiAyNDAsIHdoZXJlYXMgYSB2ZGJf bW9kZSBjYW4gb25seSBzdXBwb3J0IFlDQkNSCisJICogNDIwIEhETUkgb3V0cHV0LgorCSAqLwor CWJpdG1hcF9zZXQoaGRtaS0+eWNiY3I0MjBfdmNiX21vZGVzLCB2aWMsIDEpOworfQorCiBzdGF0 aWMgaW50CiBkb19jZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgY29u c3QgdTggKmRiLCB1OCBsZW4pCiB7CiAJaW50IGksIG1vZGVzID0gMDsKKwlzdHJ1Y3QgZHJtX2hk bWlfaW5mbyAqaGRtaSA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pOwogCiAJZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwog CQltb2RlID0gZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpY19pbmRleChjb25uZWN0b3IsIGRiLCBs ZW4sIGkpOwogCQlpZiAobW9kZSkgeworCQkJLyoKKwkJCSAqIFlDQkNSNDIwIGNhcGFiaWxpdHkg YmxvY2sgY29udGFpbnMgYSBiaXRtYXAgd2hpY2gKKwkJCSAqIGdpdmVzIHRoZSBpbmRleCBvZiBD RUEgbW9kZXMgZnJvbSBDRUEgVkRCLCB3aGljaAorCQkJICogY2FuIHN1cHBvcnQgWUNCQ1IgNDIw IHNhbXBsaW5nIG91dHB1dCBhbHNvIChhcGFydAorCQkJICogZnJvbSBSR0IvWUNCQ1I0NDQgZXRj KS4KKwkJCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgYml0IDAgaW4gYml0bWFwIGlzIHNldCwKKwkJ CSAqIGZpcnN0IG1vZGUgaW4gVkRCIGNhbiBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0b28uCisJ CQkgKiBBZGQgWUNCQ1I0MjAgbW9kZXMgb25seSBpZiBzaW5rIGlzIEhETUkgMi4wIGNhcGFibGUu CisJCQkgKi8KKwkJCWlmIChjb25uZWN0b3ItPmlzX2hkbWkyX3NyYyAmJgorCQkJCXRlc3RfYml0 KGksICZoZG1pLT55Y2JjcjQyMF92Y2JfbWFwKSkKKwkJCQlkcm1fYWRkX3ZjYl9tb2Rlcyhjb25u ZWN0b3IsIGRiW2ldKTsKKwogCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUp OwogCQkJbW9kZXMrKzsKIAkJfQpAQCAtMzQyNyw2ICszNTE3LDEyIEBAIGRvX2hkbWlfdnNkYl9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBjb25zdCB1OCAqZGIsIHU4IGxl biwKIH0KIAogc3RhdGljIGludAorY2VhX2RiX2V4dGVuZGVkX3RhZyhjb25zdCB1OCAqZGIpCit7 CisJcmV0dXJuIGRiWzFdOworfQorCitzdGF0aWMgaW50CiBjZWFfZGJfcGF5bG9hZF9sZW4oY29u c3QgdTggKmRiKQogewogCXJldHVybiBkYlswXSAmIDB4MWY7CkBAIC0zNDg3LDkgKzM1ODMsODEg QEAgc3RhdGljIGJvb2wgY2VhX2RiX2lzX2hkbWlfZm9ydW1fdnNkYihjb25zdCB1OCAqZGIpCiAJ cmV0dXJuIG91aSA9PSBIRE1JX0ZPUlVNX0lFRUVfT1VJOwogfQogCitzdGF0aWMgYm9vbCBjZWFf ZGJfaXNfeWNiY3JfNDIwX2NtZGIoY29uc3QgdTggKmRiKQoreworCXU4IGxlbiA9IGNlYV9kYl9w YXlsb2FkX2xlbihkYik7CisKKwlpZiAoY2VhX2RiX3RhZyhkYikgIT0gVklERU9fQ0FQQUJJTElU WV9CTE9DSykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFsZW4pCisJCXJldHVybiBmYWxzZTsK KworCWlmIChjZWFfZGJfZXh0ZW5kZWRfdGFnKGRiKSAhPSBWSURFT19DQVBfQkxPQ0tfWTQyMENN REIpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBj ZWFfZGJfaXNfeWNiY3JfNDIwX3ZkYihjb25zdCB1OCAqZGIpCit7CisJaWYgKGNlYV9kYl90YWco ZGIpICE9IFZJREVPX0NBUEFCSUxJVFlfQkxPQ0spCisJCXJldHVybiBmYWxzZTsKKworCWlmIChj ZWFfZGJfZXh0ZW5kZWRfdGFnKGRiKSAhPSBWSURFT19EQVRBX0JMT0NLXzQyMCkKKwkJcmV0dXJu IGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKICNkZWZpbmUgZm9yX2VhY2hfY2VhX2RiKGNl YSwgaSwgc3RhcnQsIGVuZCkgXAogCWZvciAoKGkpID0gKHN0YXJ0KTsgKGkpIDwgKGVuZCkgJiYg KGkpICsgY2VhX2RiX3BheWxvYWRfbGVuKCYoY2VhKVsoaSldKSA8IChlbmQpOyAoaSkgKz0gY2Vh X2RiX3BheWxvYWRfbGVuKCYoY2VhKVsoaSldKSArIDEpCiAKK3N0YXRpYyB2b2lkIGRybV9wYXJz ZV95NDIwY21kYl9iaXRtYXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkg ICAgIGNvbnN0IHU4ICpkYikKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbyA9ICZj b25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKKwlzdHJ1Y3QgZHJtX2hkbWlfaW5mbyAqaGRtaSA9ICZp bmZvLT5oZG1pOworCXU4IG1hcF9sZW4gPSBjZWFfZGJfcGF5bG9hZF9sZW4oZGIpIC0gMTsKKwl1 OCBjb3VudDsKKwl1NjQgbWFwID0gMDsKKworCWlmICghZGIpCisJCXJldHVybjsKKworCWlmICht YXBfbGVuID09IDApIHsKKwkJLyogQWxsIENFQSBtb2RlcyBzdXBwb3J0IHljYmNyNDIwIHNhbXBs aW5nIGFsc28uKi8KKwkJaGRtaS0+eWNiY3I0MjBfdmNiX21hcCA9IFU2NF9NQVg7CisJCWluZm8t PmNvbG9yX2Zvcm1hdHMgfD0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMDsKKwkJcmV0dXJuOwor CX0KKworCS8qCisJICogVGhpcyBtYXAgaW5kaWNhdGVzIHdoaWNoIG9mIHRoZSBleGlzdGluZyBD RUEgYmxvY2sgbW9kZXMKKwkgKiBmcm9tIFZEQiBjYW4gc3VwcG9ydCBZQ0JDUjQyMCBvdXRwdXQg dG9vLiBTbyBpZiBiaXQ9MCBpcworCSAqIHNldCwgZmlyc3QgbW9kZSBmcm9tIFZEQiBjYW4gc3Vw cG9ydCBZQ0JDUjQyMCBvdXRwdXQgdG9vLgorCSAqIFdlIHdpbGwgcGFyc2UgYW5kIGtlZXAgdGhp cyBtYXAsIGJlZm9yZSBwYXJzaW5nIFZEQiBpdHNlbGYKKwkgKiB0byBhdm9pZCBnb2luZyB0aHJv dWdoIHRoZSBzYW1lIGJsb2NrIGFnYWluIGFuZCBhZ2Fpbi4KKwkgKgorCSAqIFNwZWMgaXMgbm90 IGNsZWFyIGFib3V0IG1heCBwb3NzaWJsZSBzaXplIG9mIHRoaXMgYmxvY2suCisJICogQ2xhbXBp bmcgbWF4IGJpdG1hcCBibG9jayBzaXplIGF0IDggYnl0ZXMuIEV2ZXJ5IGJ5dGUgY2FuCisJICog YWRkcmVzcyA4IENFQSBtb2RlcywgaW4gdGhpcyB3YXkgdGhpcyBtYXAgY2FuIGFkZHJlc3MKKwkg KiA4KjggPSBmaXJzdCA2NCBTVkRzLgorCSAqLworCWlmIChXQVJOX09OX09OQ0UobWFwX2xlbiA+ IDgpKQorCQltYXBfbGVuID0gODsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG1hcF9sZW47 IGNvdW50KyspCisJCW1hcCB8PSAodTY0KWRiWzIgKyBjb3VudF0gPDwgKDggKiBjb3VudCk7CisK KwlpZiAobWFwKSB7CisJCURSTV9ERUJVR19LTVMoIlNpbmsgc3VwcG9ydHMgeWNiY3IgNDIwXG4i KTsKKwkJaW5mby0+Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOwor CX0KKworCWhkbWktPnljYmNyNDIwX3ZjYl9tYXAgPSBtYXA7Cit9CisKIHN0YXRpYyBpbnQKIGFk ZF9jZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQg KmVkaWQpCiB7CkBAIC0zNTEyLDEwICszNjgwLDE3IEBAIGFkZF9jZWFfbW9kZXMoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQpCiAJCQkJdmlkZW8gPSBk YiArIDE7CiAJCQkJdmlkZW9fbGVuID0gZGJsOwogCQkJCW1vZGVzICs9IGRvX2NlYV9tb2Rlcyhj b25uZWN0b3IsIHZpZGVvLCBkYmwpOwotCQkJfQotCQkJZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlf dnNkYihkYikpIHsKKwkJCX0gZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlfdnNkYihkYikpIHsKIAkJ CQloZG1pID0gZGI7CiAJCQkJaGRtaV9sZW4gPSBkYmw7CisJCQl9IGVsc2UgaWYgKGNlYV9kYl9p c195Y2Jjcl80MjBfdmRiKGRiKSAmJgorCQkJCQljb25uZWN0b3ItPmlzX2hkbWkyX3NyYykgewor CQkJCWNvbnN0IHU4ICp2ZGI0MjAgPSAmZGJbMl07CisKKwkJCQkvKiBBZGQgNDoyOjAob25seSkg bW9kZXMgcHJlc2VudCBpbiBFRElEICovCisJCQkJbW9kZXMgKz0gZG9feWNiY3JfNDIwX3ZkYl9t b2Rlcyhjb25uZWN0b3IsCisJCQkJCQkJCXZkYjQyMCwKKwkJCQkJCQkJZGJsIC0gMSk7CiAJCQl9 CiAJCX0KIAl9CkBAIC00MTk2LDYgKzQzNzEsOCBAQCBzdGF0aWMgdm9pZCBkcm1fcGFyc2VfY2Vh X2V4dChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJZHJtX3BhcnNlX2hkbWlf dnNkYl92aWRlbyhjb25uZWN0b3IsIGRiKTsKIAkJaWYgKGNlYV9kYl9pc19oZG1pX2ZvcnVtX3Zz ZGIoZGIpKQogCQkJZHJtX3BhcnNlX2hkbWlfZm9ydW1fdnNkYihjb25uZWN0b3IsIGRiKTsKKwkJ aWYgKGNlYV9kYl9pc195Y2Jjcl80MjBfY21kYihkYikpCisJCQlkcm1fcGFyc2VfeTQyMGNtZGJf Yml0bWFwKGNvbm5lY3RvciwgZGIpOwogCX0KIH0KIApAQCAtNDQzMCw2ICs0NjA3LDEzIEBAIGlu dCBkcm1fYWRkX2VkaWRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3Ry dWN0IGVkaWQgKmVkaWQpCiAJcXVpcmtzID0gZWRpZF9nZXRfcXVpcmtzKGVkaWQpOwogCiAJLyoK KwkgKiBDRUEtODYxLUYgYWRkcyB5Y2JjciBjYXBhYmlsaXR5IG1hcCBibG9jaywgZm9yIEhETUkg Mi4wIHNpbmtzLgorCSAqIFRvIGF2b2lkIG11bHRpcGxlIHBhcnNpbmcgb2Ygc2FtZSBibG9jaywg bGV0cyBnZXQgdGhlIHNpbmsgaW5mbworCSAqIGJlZm9yZSBwYXJzaW5nIENFQSBtb2Rlcy4KKwkg Ki8KKwlkcm1fYWRkX2Rpc3BsYXlfaW5mbyhjb25uZWN0b3IsIGVkaWQpOworCisJLyoKIAkgKiBF RElEIHNwZWMgc2F5cyBtb2RlcyBzaG91bGQgYmUgcHJlZmVycmVkIGluIHRoaXMgb3JkZXI6CiAJ ICogLSBwcmVmZXJyZWQgZGV0YWlsZWQgbW9kZQogCSAqIC0gb3RoZXIgZGV0YWlsZWQgbW9kZXMg ZnJvbSBiYXNlIGJsb2NrCkBAIC00NDUwLDE0ICs0NjM0LDEzIEBAIGludCBkcm1fYWRkX2VkaWRf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQp CiAJbnVtX21vZGVzICs9IGFkZF9jZWFfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKIAludW1fbW9k ZXMgKz0gYWRkX2FsdGVybmF0ZV9jZWFfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKIAludW1fbW9k ZXMgKz0gYWRkX2Rpc3BsYXlpZF9kZXRhaWxlZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCiAJ aWYgKGVkaWQtPmZlYXR1cmVzICYgRFJNX0VESURfRkVBVFVSRV9ERUZBVUxUX0dURikKIAkJbnVt X21vZGVzICs9IGFkZF9pbmZlcnJlZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwogCiAJaWYgKHF1 aXJrcyAmIChFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV82MCB8IEVESURfUVVJUktfUFJFRkVSX0xB UkdFXzc1KSkKIAkJZWRpZF9maXh1cF9wcmVmZXJyZWQoY29ubmVjdG9yLCBxdWlya3MpOwogCi0J ZHJtX2FkZF9kaXNwbGF5X2luZm8oY29ubmVjdG9yLCBlZGlkKTsKLQogCWlmIChxdWlya3MgJiBF RElEX1FVSVJLX0ZPUkNFXzZCUEMpCiAJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA9IDY7 CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCBiL2luY2x1ZGUvZHJt L2RybV9jb25uZWN0b3IuaAppbmRleCAzOTAzMTljLi41YTQ3YzMzIDEwMDY0NAotLS0gYS9pbmNs dWRlL2RybS9kcm1fY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5o CkBAIC0xMzcsNiArMTM3LDI4IEBAIHN0cnVjdCBkcm1fc2NkYyB7CiBzdHJ1Y3QgZHJtX2hkbWlf aW5mbyB7CiAJLyoqIEBzY2RjOiBzaW5rJ3Mgc2NkYyBzdXBwb3J0IGFuZCBjYXBhYmlsaXRpZXMg Ki8KIAlzdHJ1Y3QgZHJtX3NjZGMgc2NkYzsKKworCS8qKgorCSAqIEB5Y2JjcjQyMF92ZGJfbW9k ZXM6IGJpdG1hcCBvZiBtb2RlcyB3aGljaCBjYW4gc3VwcG9ydCB5Y2JjcjQyMAorCSAqIG91dHB1 dCBvbmx5IChub3Qgbm9ybWFsIFJHQi9ZQ0JDUjQ0NC80MjIgb3V0cHV0cykuIFRoZXJlIGFyZSB0 b3RhbAorCSAqIDEwNyBWSUNzIGRlZmluZWQgYnkgQ0VBLTg2MS1GIHNwZWMsIHNvIHRoZSBzaXpl IGlzIDEyOCBiaXRzIHRvIG1hcAorCSAqIHVwdG8gMTI4IFZJQ3M7CisJICovCisJdW5zaWduZWQg bG9uZyB5Y2JjcjQyMF92ZGJfbW9kZXNbQklUU19UT19MT05HUygxMjgpXTsKKworCS8qKgorCSAq IEB5Y2JjcjQyMF92Y2JfbW9kZXM6IGJpdG1hcCBvZiBtb2RlcyB3aGljaCBjYW4gc3VwcG9ydCB5 Y2JjcjQyMAorCSAqIG91dHB1dCBhbHNvLCBhbG9uZyB3aXRoIG5vcm1hbCBIRE1JIG91dHB1dHMu IFRoZXJlIGFyZSB0b3RhbCAxMDcKKwkgKiBWSUNzIGRlZmluZWQgYnkgQ0VBLTg2MS1GIHNwZWMs IHNvIHRoZSBzaXplIGlzIDEyOCBiaXRzIHRvIG1hcCB1cHRvCisJICogMTI4IFZJQ3M7CisJICov CisJdW5zaWduZWQgbG9uZyB5Y2JjcjQyMF92Y2JfbW9kZXNbQklUU19UT19MT05HUygxMjgpXTsK KworCS8qKiBAeWNiY3I0MjBfdmNiX21hcDogYml0bWFwIG9mIFNWRCBpbmRleCwgdG8gZXh0cmF4 dCB2Y2IgbW9kZXMgKi8KKwl1bnNpZ25lZCBsb25nIHljYmNyNDIwX3ZjYl9tYXA7CisKKwkvKiog QHljYmNyNDIwX2RjX21vZGVzOiBiaXRtYXAgb2YgZGVlcCBjb2xvciBzdXBwb3J0IGluZGV4ICov CisJdTggeWNiY3I0MjBfZGNfbW9kZXM7CiB9OwogCiAvKioKQEAgLTIwMCw2ICsyMjIsNyBAQCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyB7CiAjZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0 CQkoMTw8MCkKICNkZWZpbmUgRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQ0NAkoMTw8MSkKICNkZWZp bmUgRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMgkoMTw8MikKKyNkZWZpbmUgRFJNX0NPTE9SX0ZP Uk1BVF9ZQ1JDQjQyMAkoMTw8MykKIAogCS8qKgogCSAqIEBjb2xvcl9mb3JtYXRzOiBIRE1JIENv bG9yIGZvcm1hdHMsIHNlbGVjdHMgYmV0d2VlbiBSR0IgYW5kIFlDckNiCi0tIAoyLjcuNAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==