From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: [PATCH v2 38/42] drm/i915: Implement gmbus burst read Date: Thu, 8 Mar 2018 17:29:05 +0530 Message-ID: <1520510349-8385-39-git-send-email-ramalingam.c@intel.com> References: <1520510349-8385-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: <1520510349-8385-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, chris@chris-wilson.co.uk, tomas.winkler@intel.com, jani.nikula@linux.intel.com Cc: rodrigo.vivi@intel.com List-Id: dri-devel@lists.freedesktop.org SW1wbGVtZW50cyBhIGludGVyZmFjZSBmb3Igc2luZ2xlIGJ1cnN0IHJlYWQgb2YgZGF0YSB0aGF0 IGlzIGxhcmdlcgp0aGFuIDUxMiBCeXRlcyB0aHJvdWdoIGdtYnVzLgoKSERDUDIuMiBzcGVjIGV4 cGVjdHMgSERDUDIuMiB0cmFuc21pdHRlciB0byByZWFkIDUyMkJ5dGVzIG9mIEhEQ1AKcmVjZWl2 ZXIgY2VydGlmaWNhdGVzIGluIHNpbmdsZSBidXJzdCByZWFkLiBPbiBnbWJ1cywgdG8gcmVhZCBt b3JlCnRoYW4gNTExQnl0ZXMsIEhXIHByb3ZpZGVzIGEgd29ya2Fyb3VuZCBmb3IgYnVyc3QgcmVh ZC4KClRoaXMgcGF0Y2ggcGFzc2VzIHRoZSBidXJzdCByZWFkIHJlcXVlc3QgdGhyb3VnaCBnbWJ1 cyByZWFkIGZ1bmN0aW9ucy4KQW5kIGltcGxlbWVudHMgdGhlIHNlcXVlbmNlIG9mIGVuYWJsaW5n IGFuZCBkaXNhYmxpbmcgdGhlIGJ1cnN0IHJlYWQuCgp2MjoKICBObyBDaGFuZ2UuCgpTaWduZWQt b2ZmLWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaCAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMgfCAx MjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiAzIGZpbGVzIGNoYW5n ZWQsIDExMiBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAppbmRleCAwZTM1ZTI0OTQ4YTMuLjY5OTFiYTcyYjE4YiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCkBAIC0zNjg4LDYgKzM2ODgsOCBAQCBleHRlcm4gdm9pZCBpbnRlbF90ZWFyZG93bl9n bWJ1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIGJvb2wgaW50 ZWxfZ21idXNfaXNfdmFsaWRfcGluKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK IAkJCQkgICAgIHVuc2lnbmVkIGludCBwaW4pOwogZXh0ZXJuIGludCBpbnRlbF9nbWJ1c19vdXRw dXRfYWtzdihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBpbnRlbF9n bWJ1c19idXJzdF9yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHVuc2ln bmVkIGludCBvZmZzZXQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOwogCiBleHRlcm4gc3RydWN0 IGkyY19hZGFwdGVyICoKIGludGVsX2dtYnVzX2dldF9hZGFwdGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgaW50IHBpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aAppbmRleCAwOGRhZmQ3ZTkyNzguLmJjNWFlY2QxY2JjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCkBAIC0zMTE0LDYgKzMxMTQsNyBAQCBlbnVtIGk5MTVfcG93ZXJfd2VsbF9pZCB7CiAjZGVm aW5lICAgR01CVVNfUkFURV80MDBLSFoJKDI8PDgpIC8qIHJlc2VydmVkIG9uIFBpbmV2aWV3ICov CiAjZGVmaW5lICAgR01CVVNfUkFURV8xTUhaCSgzPDw4KSAvKiByZXNlcnZlZCBvbiBQaW5ldmll dyAqLwogI2RlZmluZSAgIEdNQlVTX0hPTERfRVhUCSgxPDw3KSAvKiAzMDBucyBob2xkIHRpbWUs IHJzdmQgb24gUGluZXZpZXcgKi8KKyNkZWZpbmUgICBHTUJVU19CWVRFX0NOVF9PVkVSUklERSAo MTw8NikKICNkZWZpbmUgICBHTUJVU19QSU5fRElTQUJMRUQJMAogI2RlZmluZSAgIEdNQlVTX1BJ Tl9TU0MJCTEKICNkZWZpbmUgICBHTUJVU19QSU5fVkdBRERDCTIKQEAgLTMxNDEsOCArMzE0Miwx MCBAQCBlbnVtIGk5MTVfcG93ZXJfd2VsbF9pZCB7CiAjZGVmaW5lICAgR01CVVNfQ1lDTEVfV0FJ VAkoMTw8MjUpCiAjZGVmaW5lICAgR01CVVNfQ1lDTEVfSU5ERVgJKDI8PDI1KQogI2RlZmluZSAg IEdNQlVTX0NZQ0xFX1NUT1AJKDQ8PDI1KQorI2RlZmluZSAgIEdNQlVTX0NZQ0xFX01BU0sJKDc8 PDI1KQogI2RlZmluZSAgIEdNQlVTX0JZVEVfQ09VTlRfU0hJRlQgMTYKICNkZWZpbmUgICBHTUJV U19CWVRFX0NPVU5UX01BWCAgIDI1NlUKKyNkZWZpbmUgICBHTUJVU19CWVRFX0NPVU5UX0hXX01B WCA1MTFVCiAjZGVmaW5lICAgR01CVVNfU0xBVkVfSU5ERVhfU0hJRlQgOAogI2RlZmluZSAgIEdN QlVTX1NMQVZFX0FERFJfU0hJRlQgMQogI2RlZmluZSAgIEdNQlVTX1NMQVZFX1JFQUQJKDE8PDAp CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCmluZGV4IGU2ODc1NTA5YmNkOS4uZGNiMmJlMGQ1NGVl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYwpAQCAtMzY0LDIxICszNjQsMzAgQEAgZ21idXNf d2FpdF9pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHN0YXRpYyBpbnQK IGdtYnVzX3hmZXJfcmVhZF9jaHVuayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGFkZHIsIHU4ICpidWYsIHVuc2lnbmVkIGludCBsZW4s Ci0JCSAgICAgIHUzMiBnbWJ1czFfaW5kZXgpCisJCSAgICAgIHUzMiBnbWJ1czFfaW5kZXgsIGJv b2wgYnVyc3RfcmVhZCkKIHsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGxlbjsKKwlpbnQgcmV0Owor CisJaWYgKGJ1cnN0X3JlYWQpIHsKKwkJLyogU2VxIHRvIGVuYWJsZSBCdXJzdCBSZWFkICovCisJ CUk5MTVfV1JJVEVfRlcoR01CVVMwLCAoSTkxNV9SRUFEX0ZXKEdNQlVTMCkgfAorCQkJICAgICAg R01CVVNfQllURV9DTlRfT1ZFUlJJREUpKTsKKwkJc2l6ZSA9IEdNQlVTX0JZVEVfQ09VTlRfSFdf TUFYOworCX0KKwogCUk5MTVfV1JJVEVfRlcoR01CVVMxLAogCQkgICAgICBnbWJ1czFfaW5kZXgg fAogCQkgICAgICBHTUJVU19DWUNMRV9XQUlUIHwKLQkJICAgICAgKGxlbiA8PCBHTUJVU19CWVRF X0NPVU5UX1NISUZUKSB8CisJCSAgICAgIChzaXplIDw8IEdNQlVTX0JZVEVfQ09VTlRfU0hJRlQp IHwKIAkJICAgICAgKGFkZHIgPDwgR01CVVNfU0xBVkVfQUREUl9TSElGVCkgfAogCQkgICAgICBH TUJVU19TTEFWRV9SRUFEIHwgR01CVVNfU1dfUkRZKTsKIAl3aGlsZSAobGVuKSB7Ci0JCWludCBy ZXQ7CiAJCXUzMiB2YWwsIGxvb3AgPSAwOwogCiAJCXJldCA9IGdtYnVzX3dhaXQoZGV2X3ByaXYs IEdNQlVTX0hXX1JEWSwgR01CVVNfSFdfUkRZX0VOKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiBy ZXQ7CisJCQlnb3RvIGV4aXQ7CiAKIAkJdmFsID0gSTkxNV9SRUFEX0ZXKEdNQlVTMyk7CiAJCWRv IHsKQEAgLTM4NywxMiArMzk2LDI5IEBAIGdtYnVzX3hmZXJfcmVhZF9jaHVuayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCX0gd2hpbGUgKC0tbGVuICYmICsrbG9vcCA8IDQp OwogCX0KIAotCXJldHVybiAwOworZXhpdDoKKwlpZiAoYnVyc3RfcmVhZCkgeworCisJCS8qIFNl cSB0byBkaXNhYmxlIHRoZSBCdXJzdCBSZWFkICovCisJCUk5MTVfV1JJVEVfRlcoR01CVVMwLCAo STkxNV9SRUFEX0ZXKEdNQlVTMCkgJgorCQkJICAgICAgfkdNQlVTX0JZVEVfQ05UX09WRVJSSURF KSk7CisJCUk5MTVfV1JJVEVfRlcoR01CVVMxLCAoSTkxNV9SRUFEX0ZXKEdNQlVTMSkgJgorCQkJ ICAgICAgfkdNQlVTX0NZQ0xFX01BU0spIHwgR01CVVNfQ1lDTEVfU1RPUCk7CisKKwkJLyoKKwkJ ICogT24gQnVyc3QgcmVhZCBkaXNhYmxlLCBHTUJVUyBuZWVkIG1vcmUgdGltZSB0byBzZXR0bGUK KwkJICogZG93biB0byBJZGxlIFN0YXRlLgorCQkgKi8KKwkJcmV0ID0gaW50ZWxfd2FpdF9mb3Jf cmVnaXN0ZXJfZncoZGV2X3ByaXYsIEdNQlVTMiwKKwkJCQkJCSBHTUJVU19BQ1RJVkUsIDAsIDUw KTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBnbWJ1c194ZmVyX3JlYWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAot CQl1MzIgZ21idXMxX2luZGV4KQorCQl1MzIgZ21idXMxX2luZGV4LCBib29sIGJ1cnN0X3JlYWQp CiB7CiAJdTggKmJ1ZiA9IG1zZy0+YnVmOwogCXVuc2lnbmVkIGludCByeF9zaXplID0gbXNnLT5s ZW47CkBAIC00MDAsMTAgKzQyNiwxMyBAQCBnbWJ1c194ZmVyX3JlYWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAogCWludCByZXQ7CiAKIAlk byB7Ci0JCWxlbiA9IG1pbihyeF9zaXplLCBHTUJVU19CWVRFX0NPVU5UX01BWCk7CisJCWlmIChi dXJzdF9yZWFkKQorCQkJbGVuID0gcnhfc2l6ZTsKKwkJZWxzZQorCQkJbGVuID0gbWluKHJ4X3Np emUsIEdNQlVTX0JZVEVfQ09VTlRfTUFYKTsKIAotCQlyZXQgPSBnbWJ1c194ZmVyX3JlYWRfY2h1 bmsoZGV2X3ByaXYsIG1zZy0+YWRkciwKLQkJCQkJICAgIGJ1ZiwgbGVuLCBnbWJ1czFfaW5kZXgp OworCQlyZXQgPSBnbWJ1c194ZmVyX3JlYWRfY2h1bmsoZGV2X3ByaXYsIG1zZy0+YWRkciwgYnVm LCBsZW4sCisJCQkJCSAgICBnbWJ1czFfaW5kZXgsIGJ1cnN0X3JlYWQpOwogCQlpZiAocmV0KQog CQkJcmV0dXJuIHJldDsKIApAQCAtNDkxLDcgKzUyMCw4IEBAIGdtYnVzX2lzX2luZGV4X3hmZXIo c3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBpLCBpbnQgbnVtKQogfQogCiBzdGF0aWMgaW50Ci1n bWJ1c19pbmRleF94ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0 IGkyY19tc2cgKm1zZ3MpCitnbWJ1c19pbmRleF94ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgc3RydWN0IGkyY19tc2cgKm1zZ3MsCisJCSBib29sIGJ1cnN0X3JlYWQpCiB7 CiAJdTMyIGdtYnVzMV9pbmRleCA9IDA7CiAJdTMyIGdtYnVzNSA9IDA7CkBAIC01MDksNyArNTM5 LDggQEAgZ21idXNfaW5kZXhfeGZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHN0cnVjdCBpMmNfbXNnICptc2dzKQogCQlJOTE1X1dSSVRFX0ZXKEdNQlVTNSwgZ21idXM1KTsK IAogCWlmIChtc2dzWzFdLmZsYWdzICYgSTJDX01fUkQpCi0JCXJldCA9IGdtYnVzX3hmZXJfcmVh ZChkZXZfcHJpdiwgJm1zZ3NbMV0sIGdtYnVzMV9pbmRleCk7CisJCXJldCA9IGdtYnVzX3hmZXJf cmVhZChkZXZfcHJpdiwgJm1zZ3NbMV0sCisJCQkJICAgICAgZ21idXMxX2luZGV4LCBidXJzdF9y ZWFkKTsKIAllbHNlCiAJCXJldCA9IGdtYnVzX3hmZXJfd3JpdGUoZGV2X3ByaXYsICZtc2dzWzFd LCBnbWJ1czFfaW5kZXgpOwogCkBAIC01MjIsNyArNTUzLDcgQEAgZ21idXNfaW5kZXhfeGZlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBpMmNfbXNnICptc2dzKQog CiBzdGF0aWMgaW50CiBkb19nbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwg c3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0sCi0JICAgICAgdTMyIGdtYnVzMF9zb3VyY2Up CisJICAgICAgdTMyIGdtYnVzMF9zb3VyY2UsIGJvb2wgYnVyc3RfcmVhZCkKIHsKIAlzdHJ1Y3Qg aW50ZWxfZ21idXMgKmJ1cyA9IGNvbnRhaW5lcl9vZihhZGFwdGVyLAogCQkJCQkgICAgICAgc3Ry dWN0IGludGVsX2dtYnVzLApAQCAtNTQ0LDE1ICs1NzUsMjAgQEAgZG9fZ21idXNfeGZlcihzdHJ1 Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtLAog CWZvciAoOyBpIDwgbnVtOyBpICs9IGluYykgewogCQlpbmMgPSAxOwogCQlpZiAoZ21idXNfaXNf aW5kZXhfeGZlcihtc2dzLCBpLCBudW0pKSB7Ci0JCQlyZXQgPSBnbWJ1c19pbmRleF94ZmVyKGRl dl9wcml2LCAmbXNnc1tpXSk7CisJCQlyZXQgPSBnbWJ1c19pbmRleF94ZmVyKGRldl9wcml2LCAm bXNnc1tpXSwgYnVyc3RfcmVhZCk7CiAJCQlpbmMgPSAyOyAvKiBhbiBpbmRleCB0cmFuc21pc3Np b24gaXMgdHdvIG1zZ3MgKi8KIAkJfSBlbHNlIGlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQp IHsKLQkJCXJldCA9IGdtYnVzX3hmZXJfcmVhZChkZXZfcHJpdiwgJm1zZ3NbaV0sIDApOworCQkJ cmV0ID0gZ21idXNfeGZlcl9yZWFkKGRldl9wcml2LCAmbXNnc1tpXSwKKwkJCQkJICAgICAgMCwg YnVyc3RfcmVhZCk7CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSBnbWJ1c194ZmVyX3dyaXRlKGRldl9w cml2LCAmbXNnc1tpXSwgMCk7CiAJCX0KIAotCQlpZiAoIXJldCkKKwkJLyoKKwkJICogQnVyc3Qg cmVhZCBTZXF1ZW5jZSBlbmRzIHdpdGggU1RPUC4gU28gRG9udCBleHBlY3QKKwkJICogSFcgd2Fp dCBwaGFzZS4KKwkJICovCisJCWlmICghcmV0ICYmICFidXJzdF9yZWFkKQogCQkJcmV0ID0gZ21i dXNfd2FpdChkZXZfcHJpdiwKIAkJCQkJIEdNQlVTX0hXX1dBSVRfUEhBU0UsIEdNQlVTX0hXX1dB SVRfRU4pOwogCQlpZiAocmV0ID09IC1FVElNRURPVVQpCkBAIC02NjQsNyArNzAwLDcgQEAgZ21i dXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dz LCBpbnQgbnVtKQogCQlpZiAocmV0IDwgMCkKIAkJCWJ1cy0+Zm9yY2VfYml0ICY9IH5HTUJVU19G T1JDRV9CSVRfUkVUUlk7CiAJfSBlbHNlIHsKLQkJcmV0ID0gZG9fZ21idXNfeGZlcihhZGFwdGVy LCBtc2dzLCBudW0sIDApOworCQlyZXQgPSBkb19nbWJ1c194ZmVyKGFkYXB0ZXIsIG1zZ3MsIG51 bSwgMCwgZmFsc2UpOwogCQlpZiAocmV0ID09IC1FQUdBSU4pCiAJCQlidXMtPmZvcmNlX2JpdCB8 PSBHTUJVU19GT1JDRV9CSVRfUkVUUlk7CiAJfQpAQCAtNzA1LDcgKzc0MSw4IEBAIGludCBpbnRl bF9nbWJ1c19vdXRwdXRfYWtzdihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiAJICogcGFz cyB0aGUgaTJjIGNvbW1hbmQsIGFuZCB0ZWxsIEdNQlVTIHRvIHVzZSB0aGUgSFctcHJvdmlkZWQg dmFsdWUKIAkgKiBpbnN0ZWFkIG9mIHNvdXJjaW5nIEdNQlVTMyBmb3IgdGhlIGRhdGEuCiAJICov Ci0JcmV0ID0gZG9fZ21idXNfeGZlcihhZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpLCBH TUJVU19BS1NWX1NFTEVDVCk7CisJcmV0ID0gZG9fZ21idXNfeGZlcihhZGFwdGVyLCBtc2dzLCBB UlJBWV9TSVpFKG1zZ3MpLAorCQkJICAgIEdNQlVTX0FLU1ZfU0VMRUNULCBmYWxzZSk7CiAKIAlt dXRleF91bmxvY2soJmRldl9wcml2LT5nbWJ1c19tdXRleCk7CiAJaW50ZWxfZGlzcGxheV9wb3dl cl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9HTUJVUyk7CkBAIC03MTMsNiArNzUwLDU5IEBA IGludCBpbnRlbF9nbWJ1c19vdXRwdXRfYWtzdihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIp CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZQorYm9vbCBpbnRlbF9nbWJ1c19idXJz dF9yZWFkX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPiAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSB8 fAorCSAgICBJU19LQUJZTEFLRShkZXZfcHJpdikpCisJCXJldHVybiB0cnVlOworCXJldHVybiBm YWxzZTsKK30KKworaW50IGludGVsX2dtYnVzX2J1cnN0X3JlYWQoc3RydWN0IGkyY19hZGFwdGVy ICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgdm9pZCAqYnVmLCBzaXplX3Qg c2l6ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZ21idXMgKmJ1cyA9IGNvbnRhaW5lcl9vZihhZGFwdGVy LCBzdHJ1Y3QgaW50ZWxfZ21idXMsCisJCQkJCSAgICAgICBhZGFwdGVyKTsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBidXMtPmRldl9wcml2OworCWludCByZXQ7CisJdTgg c3RhcnQgPSBvZmZzZXQgJiAweGZmOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJewor CQkJLmFkZHIgPSBEUk1fSERDUF9ERENfQUREUiwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0g MSwKKwkJCS5idWYgPSAmc3RhcnQsCisJCX0sCisJCXsKKwkJCS5hZGRyID0gRFJNX0hEQ1BfRERD X0FERFIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSBzaXplLAorCQkJLmJ1ZiA9 IGJ1ZiwKKwkJfQorCX07CisKKwlpZiAoIWludGVsX2dtYnVzX2J1cnN0X3JlYWRfc3VwcG9ydGVk KGRldl9wcml2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dl dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0dNQlVTKTsKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ Z21idXNfbXV0ZXgpOworCisJLyoKKwkgKiBJbiBvcmRlciB0byByZWFkIHRoZSBjb21wbGV0ZSBs ZW5ndGgoTW9yZSB0aGFuIEdNQnVzIExpbWl0KSBvZiBkYXRhLAorCSAqIGluIGJ1cnN0IG1vZGUs IGltcGxlbWVudCB0aGUgV29ya2Fyb3VuZCBzdXBwb3J0ZWQgaW4gSFcuCisJICovCisJcmV0ID0g ZG9fZ21idXNfeGZlcihhZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpLCAwLCB0cnVlKTsK KworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmdtYnVzX211dGV4KTsKKwlpbnRlbF9kaXNwbGF5 X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0dNQlVTKTsKKworCWlmIChyZXQgPT0g QVJSQVlfU0laRShtc2dzKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0ID49IDAgPyAtRUlP IDogcmV0OworfQorCiBzdGF0aWMgdTMyIGdtYnVzX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICph ZGFwdGVyKQogewogCXJldHVybiBpMmNfYml0X2FsZ28uZnVuY3Rpb25hbGl0eShhZGFwdGVyKSAm Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==