From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: [PATCH v3 36/40] drm/i915: Implement gmbus burst read Date: Tue, 3 Apr 2018 19:27:49 +0530 Message-ID: <1522763873-23041-37-git-send-email-ramalingam.c@intel.com> References: <1522763873-23041-1-git-send-email-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1522763873-23041-1-git-send-email-ramalingam.c@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, seanpaul@chromium.org, daniel@ffwll.ch, chris@chris-wilson.co.uk, jani.nikula@linux.intel.com, tomas.winkler@intel.com, alexander.usyskin@intel.com Cc: rodrigo.vivi@intel.com List-Id: dri-devel@lists.freedesktop.org SW1wbGVtZW50cyBhIGludGVyZmFjZSBmb3Igc2luZ2xlIGJ1cnN0IHJlYWQgb2YgZGF0YSB0aGF0 IGlzIGxhcmdlcgp0aGFuIDUxMiBCeXRlcyB0aHJvdWdoIGdtYnVzLgoKSERDUDIuMiBzcGVjIGV4 cGVjdHMgSERDUDIuMiB0cmFuc21pdHRlciB0byByZWFkIDUyMkJ5dGVzIG9mIEhEQ1AKcmVjZWl2 ZXIgY2VydGlmaWNhdGVzIGluIHNpbmdsZSBidXJzdCByZWFkLiBPbiBnbWJ1cywgdG8gcmVhZCBt b3JlCnRoYW4gNTExQnl0ZXMsIEhXIHByb3ZpZGVzIGEgd29ya2Fyb3VuZCBmb3IgYnVyc3QgcmVh ZC4KClRoaXMgcGF0Y2ggcGFzc2VzIHRoZSBidXJzdCByZWFkIHJlcXVlc3QgdGhyb3VnaCBnbWJ1 cyByZWFkIGZ1bmN0aW9ucy4KQW5kIGltcGxlbWVudHMgdGhlIHNlcXVlbmNlIG9mIGVuYWJsaW5n IGFuZCBkaXNhYmxpbmcgdGhlIGJ1cnN0IHJlYWQuCgp2MjoKICBObyBDaGFuZ2VzLgp2MzoKICBO byBDaGFuZ2VzLgoKU2lnbmVkLW9mZi1ieTogUmFtYWxpbmdhbSBDIDxyYW1hbGluZ2FtLmNAaW50 ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggIHwgICAyICsKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2kyYy5jIHwgMTI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMTIgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNmU3NDBmNmZlMzNmLi43MjUzNGExZTU0NGIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMzY4OCw2ICszNjg4LDggQEAgZXh0ZXJuIHZv aWQgaW50ZWxfdGVhcmRvd25fZ21idXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKIGV4dGVybiBib29sIGludGVsX2dtYnVzX2lzX3ZhbGlkX3BpbihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgcGluKTsKIGV4dGVybiBp bnQgaW50ZWxfZ21idXNfb3V0cHV0X2Frc3Yoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsK K2V4dGVybiBpbnQgaW50ZWxfZ21idXNfYnVyc3RfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXB0ZXIsCisJCQkJICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2b2lkICpidWYsIHNpemVfdCBzaXpl KTsKIAogZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqCiBpbnRlbF9nbWJ1c19nZXRfYWRhcHRl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHVuc2lnbmVkIGludCBwaW4pOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggZjA0YWQzYzE1YWJkLi41Njk3OWJjNGU5ZDggMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMzEyMyw2ICszMTIzLDcgQEAgZW51bSBpOTE1X3Bv d2VyX3dlbGxfaWQgewogI2RlZmluZSAgIEdNQlVTX1JBVEVfNDAwS0haCSgyPDw4KSAvKiByZXNl cnZlZCBvbiBQaW5ldmlldyAqLwogI2RlZmluZSAgIEdNQlVTX1JBVEVfMU1IWgkoMzw8OCkgLyog cmVzZXJ2ZWQgb24gUGluZXZpZXcgKi8KICNkZWZpbmUgICBHTUJVU19IT0xEX0VYVAkoMTw8Nykg LyogMzAwbnMgaG9sZCB0aW1lLCByc3ZkIG9uIFBpbmV2aWV3ICovCisjZGVmaW5lICAgR01CVVNf QllURV9DTlRfT1ZFUlJJREUgKDE8PDYpCiAjZGVmaW5lICAgR01CVVNfUElOX0RJU0FCTEVECTAK ICNkZWZpbmUgICBHTUJVU19QSU5fU1NDCQkxCiAjZGVmaW5lICAgR01CVVNfUElOX1ZHQUREQwky CkBAIC0zMTUwLDggKzMxNTEsMTAgQEAgZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgewogI2RlZmlu ZSAgIEdNQlVTX0NZQ0xFX1dBSVQJKDE8PDI1KQogI2RlZmluZSAgIEdNQlVTX0NZQ0xFX0lOREVY CSgyPDwyNSkKICNkZWZpbmUgICBHTUJVU19DWUNMRV9TVE9QCSg0PDwyNSkKKyNkZWZpbmUgICBH TUJVU19DWUNMRV9NQVNLCSg3PDwyNSkKICNkZWZpbmUgICBHTUJVU19CWVRFX0NPVU5UX1NISUZU IDE2CiAjZGVmaW5lICAgR01CVVNfQllURV9DT1VOVF9NQVggICAyNTZVCisjZGVmaW5lICAgR01C VVNfQllURV9DT1VOVF9IV19NQVggNTExVQogI2RlZmluZSAgIEdNQlVTX1NMQVZFX0lOREVYX1NI SUZUIDgKICNkZWZpbmUgICBHTUJVU19TTEFWRV9BRERSX1NISUZUIDEKICNkZWZpbmUgICBHTUJV U19TTEFWRV9SRUFECSgxPDwwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaTJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYwppbmRleCBlNjg3NTUw OWJjZDkuLmRjYjJiZTBkNTRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKQEAgLTM2NCwy MSArMzY0LDMwIEBAIGdtYnVzX3dhaXRfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiBzdGF0aWMgaW50CiBnbWJ1c194ZmVyX3JlYWRfY2h1bmsoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBhZGRyLCB1OCAqYnVm LCB1bnNpZ25lZCBpbnQgbGVuLAotCQkgICAgICB1MzIgZ21idXMxX2luZGV4KQorCQkgICAgICB1 MzIgZ21idXMxX2luZGV4LCBib29sIGJ1cnN0X3JlYWQpCiB7CisJdW5zaWduZWQgaW50IHNpemUg PSBsZW47CisJaW50IHJldDsKKworCWlmIChidXJzdF9yZWFkKSB7CisJCS8qIFNlcSB0byBlbmFi bGUgQnVyc3QgUmVhZCAqLworCQlJOTE1X1dSSVRFX0ZXKEdNQlVTMCwgKEk5MTVfUkVBRF9GVyhH TUJVUzApIHwKKwkJCSAgICAgIEdNQlVTX0JZVEVfQ05UX09WRVJSSURFKSk7CisJCXNpemUgPSBH TUJVU19CWVRFX0NPVU5UX0hXX01BWDsKKwl9CisKIAlJOTE1X1dSSVRFX0ZXKEdNQlVTMSwKIAkJ ICAgICAgZ21idXMxX2luZGV4IHwKIAkJICAgICAgR01CVVNfQ1lDTEVfV0FJVCB8Ci0JCSAgICAg IChsZW4gPDwgR01CVVNfQllURV9DT1VOVF9TSElGVCkgfAorCQkgICAgICAoc2l6ZSA8PCBHTUJV U19CWVRFX0NPVU5UX1NISUZUKSB8CiAJCSAgICAgIChhZGRyIDw8IEdNQlVTX1NMQVZFX0FERFJf U0hJRlQpIHwKIAkJICAgICAgR01CVVNfU0xBVkVfUkVBRCB8IEdNQlVTX1NXX1JEWSk7CiAJd2hp bGUgKGxlbikgewotCQlpbnQgcmV0OwogCQl1MzIgdmFsLCBsb29wID0gMDsKIAogCQlyZXQgPSBn bWJ1c193YWl0KGRldl9wcml2LCBHTUJVU19IV19SRFksIEdNQlVTX0hXX1JEWV9FTik7CiAJCWlm IChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBleGl0OwogCiAJCXZhbCA9IEk5MTVfUkVB RF9GVyhHTUJVUzMpOwogCQlkbyB7CkBAIC0zODcsMTIgKzM5NiwyOSBAQCBnbWJ1c194ZmVyX3Jl YWRfY2h1bmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQl9IHdoaWxlICgt LWxlbiAmJiArK2xvb3AgPCA0KTsKIAl9CiAKLQlyZXR1cm4gMDsKK2V4aXQ6CisJaWYgKGJ1cnN0 X3JlYWQpIHsKKworCQkvKiBTZXEgdG8gZGlzYWJsZSB0aGUgQnVyc3QgUmVhZCAqLworCQlJOTE1 X1dSSVRFX0ZXKEdNQlVTMCwgKEk5MTVfUkVBRF9GVyhHTUJVUzApICYKKwkJCSAgICAgIH5HTUJV U19CWVRFX0NOVF9PVkVSUklERSkpOworCQlJOTE1X1dSSVRFX0ZXKEdNQlVTMSwgKEk5MTVfUkVB RF9GVyhHTUJVUzEpICYKKwkJCSAgICAgIH5HTUJVU19DWUNMRV9NQVNLKSB8IEdNQlVTX0NZQ0xF X1NUT1ApOworCisJCS8qCisJCSAqIE9uIEJ1cnN0IHJlYWQgZGlzYWJsZSwgR01CVVMgbmVlZCBt b3JlIHRpbWUgdG8gc2V0dGxlCisJCSAqIGRvd24gdG8gSWRsZSBTdGF0ZS4KKwkJICovCisJCXJl dCA9IGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyX2Z3KGRldl9wcml2LCBHTUJVUzIsCisJCQkJCQkg R01CVVNfQUNUSVZFLCAwLCA1MCk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlu dAogZ21idXNfeGZlcl9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgc3Ry dWN0IGkyY19tc2cgKm1zZywKLQkJdTMyIGdtYnVzMV9pbmRleCkKKwkJdTMyIGdtYnVzMV9pbmRl eCwgYm9vbCBidXJzdF9yZWFkKQogewogCXU4ICpidWYgPSBtc2ctPmJ1ZjsKIAl1bnNpZ25lZCBp bnQgcnhfc2l6ZSA9IG1zZy0+bGVuOwpAQCAtNDAwLDEwICs0MjYsMTMgQEAgZ21idXNfeGZlcl9y ZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IGkyY19tc2cgKm1z ZywKIAlpbnQgcmV0OwogCiAJZG8gewotCQlsZW4gPSBtaW4ocnhfc2l6ZSwgR01CVVNfQllURV9D T1VOVF9NQVgpOworCQlpZiAoYnVyc3RfcmVhZCkKKwkJCWxlbiA9IHJ4X3NpemU7CisJCWVsc2UK KwkJCWxlbiA9IG1pbihyeF9zaXplLCBHTUJVU19CWVRFX0NPVU5UX01BWCk7CiAKLQkJcmV0ID0g Z21idXNfeGZlcl9yZWFkX2NodW5rKGRldl9wcml2LCBtc2ctPmFkZHIsCi0JCQkJCSAgICBidWYs IGxlbiwgZ21idXMxX2luZGV4KTsKKwkJcmV0ID0gZ21idXNfeGZlcl9yZWFkX2NodW5rKGRldl9w cml2LCBtc2ctPmFkZHIsIGJ1ZiwgbGVuLAorCQkJCQkgICAgZ21idXMxX2luZGV4LCBidXJzdF9y ZWFkKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTQ5MSw3ICs1MjAsOCBAQCBn bWJ1c19pc19pbmRleF94ZmVyKHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgaSwgaW50IG51bSkK IH0KIAogc3RhdGljIGludAotZ21idXNfaW5kZXhfeGZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIHN0cnVjdCBpMmNfbXNnICptc2dzKQorZ21idXNfaW5kZXhfeGZlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkg Ym9vbCBidXJzdF9yZWFkKQogewogCXUzMiBnbWJ1czFfaW5kZXggPSAwOwogCXUzMiBnbWJ1czUg PSAwOwpAQCAtNTA5LDcgKzUzOSw4IEBAIGdtYnVzX2luZGV4X3hmZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgaTJjX21zZyAqbXNncykKIAkJSTkxNV9XUklURV9G VyhHTUJVUzUsIGdtYnVzNSk7CiAKIAlpZiAobXNnc1sxXS5mbGFncyAmIEkyQ19NX1JEKQotCQly ZXQgPSBnbWJ1c194ZmVyX3JlYWQoZGV2X3ByaXYsICZtc2dzWzFdLCBnbWJ1czFfaW5kZXgpOwor CQlyZXQgPSBnbWJ1c194ZmVyX3JlYWQoZGV2X3ByaXYsICZtc2dzWzFdLAorCQkJCSAgICAgIGdt YnVzMV9pbmRleCwgYnVyc3RfcmVhZCk7CiAJZWxzZQogCQlyZXQgPSBnbWJ1c194ZmVyX3dyaXRl KGRldl9wcml2LCAmbXNnc1sxXSwgZ21idXMxX2luZGV4KTsKIApAQCAtNTIyLDcgKzU1Myw3IEBA IGdtYnVzX2luZGV4X3hmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1 Y3QgaTJjX21zZyAqbXNncykKIAogc3RhdGljIGludAogZG9fZ21idXNfeGZlcihzdHJ1Y3QgaTJj X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtLAotCSAgICAg IHUzMiBnbWJ1czBfc291cmNlKQorCSAgICAgIHUzMiBnbWJ1czBfc291cmNlLCBib29sIGJ1cnN0 X3JlYWQpCiB7CiAJc3RydWN0IGludGVsX2dtYnVzICpidXMgPSBjb250YWluZXJfb2YoYWRhcHRl ciwKIAkJCQkJICAgICAgIHN0cnVjdCBpbnRlbF9nbWJ1cywKQEAgLTU0NCwxNSArNTc1LDIwIEBA IGRvX2dtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgaTJjX21z ZyAqbXNncywgaW50IG51bSwKIAlmb3IgKDsgaSA8IG51bTsgaSArPSBpbmMpIHsKIAkJaW5jID0g MTsKIAkJaWYgKGdtYnVzX2lzX2luZGV4X3hmZXIobXNncywgaSwgbnVtKSkgewotCQkJcmV0ID0g Z21idXNfaW5kZXhfeGZlcihkZXZfcHJpdiwgJm1zZ3NbaV0pOworCQkJcmV0ID0gZ21idXNfaW5k ZXhfeGZlcihkZXZfcHJpdiwgJm1zZ3NbaV0sIGJ1cnN0X3JlYWQpOwogCQkJaW5jID0gMjsgLyog YW4gaW5kZXggdHJhbnNtaXNzaW9uIGlzIHR3byBtc2dzICovCiAJCX0gZWxzZSBpZiAobXNnc1tp XS5mbGFncyAmIEkyQ19NX1JEKSB7Ci0JCQlyZXQgPSBnbWJ1c194ZmVyX3JlYWQoZGV2X3ByaXYs ICZtc2dzW2ldLCAwKTsKKwkJCXJldCA9IGdtYnVzX3hmZXJfcmVhZChkZXZfcHJpdiwgJm1zZ3Nb aV0sCisJCQkJCSAgICAgIDAsIGJ1cnN0X3JlYWQpOwogCQl9IGVsc2UgewogCQkJcmV0ID0gZ21i dXNfeGZlcl93cml0ZShkZXZfcHJpdiwgJm1zZ3NbaV0sIDApOwogCQl9CiAKLQkJaWYgKCFyZXQp CisJCS8qCisJCSAqIEJ1cnN0IHJlYWQgU2VxdWVuY2UgZW5kcyB3aXRoIFNUT1AuIFNvIERvbnQg ZXhwZWN0CisJCSAqIEhXIHdhaXQgcGhhc2UuCisJCSAqLworCQlpZiAoIXJldCAmJiAhYnVyc3Rf cmVhZCkKIAkJCXJldCA9IGdtYnVzX3dhaXQoZGV2X3ByaXYsCiAJCQkJCSBHTUJVU19IV19XQUlU X1BIQVNFLCBHTUJVU19IV19XQUlUX0VOKTsKIAkJaWYgKHJldCA9PSAtRVRJTUVET1VUKQpAQCAt NjY0LDcgKzcwMCw3IEBAIGdtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBz dHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIAkJaWYgKHJldCA8IDApCiAJCQlidXMtPmZv cmNlX2JpdCAmPSB+R01CVVNfRk9SQ0VfQklUX1JFVFJZOwogCX0gZWxzZSB7Ci0JCXJldCA9IGRv X2dtYnVzX3hmZXIoYWRhcHRlciwgbXNncywgbnVtLCAwKTsKKwkJcmV0ID0gZG9fZ21idXNfeGZl cihhZGFwdGVyLCBtc2dzLCBudW0sIDAsIGZhbHNlKTsKIAkJaWYgKHJldCA9PSAtRUFHQUlOKQog CQkJYnVzLT5mb3JjZV9iaXQgfD0gR01CVVNfRk9SQ0VfQklUX1JFVFJZOwogCX0KQEAgLTcwNSw3 ICs3NDEsOCBAQCBpbnQgaW50ZWxfZ21idXNfb3V0cHV0X2Frc3Yoc3RydWN0IGkyY19hZGFwdGVy ICphZGFwdGVyKQogCSAqIHBhc3MgdGhlIGkyYyBjb21tYW5kLCBhbmQgdGVsbCBHTUJVUyB0byB1 c2UgdGhlIEhXLXByb3ZpZGVkIHZhbHVlCiAJICogaW5zdGVhZCBvZiBzb3VyY2luZyBHTUJVUzMg Zm9yIHRoZSBkYXRhLgogCSAqLwotCXJldCA9IGRvX2dtYnVzX3hmZXIoYWRhcHRlciwgbXNncywg QVJSQVlfU0laRShtc2dzKSwgR01CVVNfQUtTVl9TRUxFQ1QpOworCXJldCA9IGRvX2dtYnVzX3hm ZXIoYWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSwKKwkJCSAgICBHTUJVU19BS1NWX1NF TEVDVCwgZmFsc2UpOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z21idXNfbXV0ZXgpOwog CWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fR01CVVMpOwpA QCAtNzEzLDYgKzc1MCw1OSBAQCBpbnQgaW50ZWxfZ21idXNfb3V0cHV0X2Frc3Yoc3RydWN0IGky Y19hZGFwdGVyICphZGFwdGVyKQogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUKK2Jv b2wgaW50ZWxfZ21idXNfYnVyc3RfcmVhZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQoreworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID4gMTAgfHwgSVNfR0VN SU5JTEFLRShkZXZfcHJpdikgfHwKKwkgICAgSVNfS0FCWUxBS0UoZGV2X3ByaXYpKQorCQlyZXR1 cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCBpbnRlbF9nbWJ1c19idXJzdF9yZWFk KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAg IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGludGVsX2dtYnVzICpidXMgPSBj b250YWluZXJfb2YoYWRhcHRlciwgc3RydWN0IGludGVsX2dtYnVzLAorCQkJCQkgICAgICAgYWRh cHRlcik7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gYnVzLT5kZXZfcHJp djsKKwlpbnQgcmV0OworCXU4IHN0YXJ0ID0gb2Zmc2V0ICYgMHhmZjsKKwlzdHJ1Y3QgaTJjX21z ZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRyID0gRFJNX0hEQ1BfRERDX0FERFIsCisJCQkuZmxh Z3MgPSAwLAorCQkJLmxlbiA9IDEsCisJCQkuYnVmID0gJnN0YXJ0LAorCQl9LAorCQl7CisJCQku YWRkciA9IERSTV9IRENQX0REQ19BRERSLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkubGVu ID0gc2l6ZSwKKwkJCS5idWYgPSBidWYsCisJCX0KKwl9OworCisJaWYgKCFpbnRlbF9nbWJ1c19i dXJzdF9yZWFkX3N1cHBvcnRlZChkZXZfcHJpdikpCisJCXJldHVybiAtRUlOVkFMOworCisJaW50 ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9HTUJVUyk7CisJbXV0 ZXhfbG9jaygmZGV2X3ByaXYtPmdtYnVzX211dGV4KTsKKworCS8qCisJICogSW4gb3JkZXIgdG8g cmVhZCB0aGUgY29tcGxldGUgbGVuZ3RoKE1vcmUgdGhhbiBHTUJ1cyBMaW1pdCkgb2YgZGF0YSwK KwkgKiBpbiBidXJzdCBtb2RlLCBpbXBsZW1lbnQgdGhlIFdvcmthcm91bmQgc3VwcG9ydGVkIGlu IEhXLgorCSAqLworCXJldCA9IGRvX2dtYnVzX3hmZXIoYWRhcHRlciwgbXNncywgQVJSQVlfU0la RShtc2dzKSwgMCwgdHJ1ZSk7CisKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5nbWJ1c19tdXRl eCk7CisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9HTUJV Uyk7CisKKwlpZiAocmV0ID09IEFSUkFZX1NJWkUobXNncykpCisJCXJldHVybiAwOworCisJcmV0 dXJuIHJldCA+PSAwID8gLUVJTyA6IHJldDsKK30KKwogc3RhdGljIHUzMiBnbWJ1c19mdW5jKHN0 cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlyZXR1cm4gaTJjX2JpdF9hbGdvLmZ1bmN0 aW9uYWxpdHkoYWRhcHRlcikgJgotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=