From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Stach Subject: [PATCH 10/12] drm/etnaviv: add master driver and hook up in Kconfig and Makefile Date: Fri, 4 Dec 2015 15:00:02 +0100 Message-ID: <1449237604-19064-11-git-send-email-l.stach@pengutronix.de> References: <1449237604-19064-1-git-send-email-l.stach@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449237604-19064-1-git-send-email-l.stach@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Rob Herring , Shawn Guo Cc: devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, patchwork-lst@pengutronix.de, kernel@pengutronix.de, Russell King List-Id: devicetree@vger.kernel.org RnJvbTogVGhlIGV0bmF2aXYgYXV0aG9ycyA8ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zz4KClRoaXMgYWRkcyB0aGUgZXRuYXZpdiBEUk0gY29yZSBkcml2ZXIgYW5kIGhvb2tzIGl0IHVw IGluIHRoZSBLY29uZmlnCmFuZCBNYWtlZmlsZS4KClNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBH bWVpbmVyIDxjaHJpc3RpYW4uZ21laW5lckBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IFJ1c3Nl bGwgS2luZyA8cm1rK2tlcm5lbEBhcm0ubGludXgub3JnLnVrPgpTaWduZWQtb2ZmLWJ5OiBMdWNh cyBTdGFjaCA8bC5zdGFjaEBwZW5ndXRyb25peC5kZT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZyAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAg ICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvS2NvbmZpZyAgICAgICB8 ICAyMCArCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9NYWtlZmlsZSAgICAgIHwgIDE0ICsKIGRy aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMgfCA3MDcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYu aCB8IDE2MSArKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA5MDUgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L0tjb25maWcKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRl eCBjNGJmOWExY2Y0YTYuLmIwMmFjNjJmNTg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI2NiwzICsyNjYsNSBA QCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWciCiBzb3VyY2UgImRy aXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0 L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvS2NvbmZpZyIKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQppbmRleCAxZTlmZjRjM2UzZGIuLmY4NThhYTI1ZmJiMiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNzUs MyArNzUsNCBAQCBvYmoteQkJCSs9IGkyYy8KIG9iai15CQkJKz0gcGFuZWwvCiBvYmoteQkJCSs9 IGJyaWRnZS8KIG9iai0kKENPTkZJR19EUk1fRlNMX0RDVSkgKz0gZnNsLWRjdS8KK29iai0kKENP TkZJR19EUk1fRVROQVZJVikgKz0gZXRuYXZpdi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9ldG5hdml2L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9LY29uZmlnCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmNkZTdhNTQ0MmZiCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvS2NvbmZpZwpAQCAtMCwwICsxLDIw IEBACisKK2NvbmZpZyBEUk1fRVROQVZJVgorCXRyaXN0YXRlICJFVE5BVklWIChEUk0gc3VwcG9y dCBmb3IgVml2YW50ZSBHUFUgSVAgY29yZXMpIgorCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBv biBBUkNIX01YQyB8fCBBUkNIX0RPVkUKKwlzZWxlY3QgU0hNRU0KKwlzZWxlY3QgVE1QRlMKKwlz ZWxlY3QgSU9NTVVfQVBJCisJc2VsZWN0IElPTU1VX1NVUFBPUlQKKwlzZWxlY3QgV0FOVF9ERVZf Q09SRURVTVAKKwloZWxwCisJICBEUk0gZHJpdmVyIGZvciBWaXZhbnRlIEdQVXMuCisKK2NvbmZp ZyBEUk1fRVROQVZJVl9SRUdJU1RFUl9MT0dHSU5HCisJYm9vbCAiZW5hYmxlIEVUTkFWSVYgcmVn aXN0ZXIgbG9nZ2luZyIKKwlkZXBlbmRzIG9uIERSTV9FVE5BVklWCisJaGVscAorCSAgQ29tcGls ZSBpbiBzdXBwb3J0IGZvciBsb2dnaW5nIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyBpbiBhIGZvcm1h dAorCSAgdGhhdCBjYW4gYmUgcGFyc2VkIGJ5IGVudnl0b29scyBkZW1zbSB0b29sLiAgSWYgZW5h YmxlZCwgcmVnaXN0ZXIKKwkgIGxvZ2dpbmcgY2FuIGJlIHN3aXRjaGVkIG9uIHZpYSBldG5hdml2 LnJlZ2xvZz15IG1vZHVsZSBwYXJhbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5h dml2L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvTWFrZWZpbGUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMDg2ZTk4NzZmOTEKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBA CitldG5hdml2LXkgOj0gXAorCWV0bmF2aXZfYnVmZmVyLm8gXAorCWV0bmF2aXZfY21kX3BhcnNl ci5vIFwKKwlldG5hdml2X2Rydi5vIFwKKwlldG5hdml2X2R1bXAubyBcCisJZXRuYXZpdl9nZW1f cHJpbWUubyBcCisJZXRuYXZpdl9nZW1fc3VibWl0Lm8gXAorCWV0bmF2aXZfZ2VtLm8gXAorCWV0 bmF2aXZfZ3B1Lm8gXAorCWV0bmF2aXZfaW9tbXVfdjIubyBcCisJZXRuYXZpdl9pb21tdS5vIFwK KwlldG5hdml2X21tdS5vCisKK29iai0kKENPTkZJR19EUk1fRVROQVZJVikJKz0gZXRuYXZpdi5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5jIGIvZHJp dmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmY5Y2I4MTI3NTBmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMKQEAgLTAsMCArMSw3MDcgQEAKKy8qCisg KiBDb3B5cmlnaHQgKEMpIDIwMTUgRXRuYXZpdiBQcm9qZWN0CisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgK KyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgImV0bmF2aXZfZHJ2LmgiCisjaW5jbHVkZSAi ZXRuYXZpdl9ncHUuaCIKKyNpbmNsdWRlICJldG5hdml2X2dlbS5oIgorI2luY2x1ZGUgImV0bmF2 aXZfbW11LmgiCisjaW5jbHVkZSAiZXRuYXZpdl9nZW0uaCIKKworI2lmZGVmIENPTkZJR19EUk1f RVROQVZJVl9SRUdJU1RFUl9MT0dHSU5HCitzdGF0aWMgYm9vbCByZWdsb2c7CitNT0RVTEVfUEFS TV9ERVNDKHJlZ2xvZywgIkVuYWJsZSByZWdpc3RlciByZWFkL3dyaXRlIGxvZ2dpbmciKTsKK21v ZHVsZV9wYXJhbShyZWdsb2csIGJvb2wsIDA2MDApOworI2Vsc2UKKyNkZWZpbmUgcmVnbG9nIDAK KyNlbmRpZgorCit2b2lkIF9faW9tZW0gKmV0bmF2aXZfaW9yZW1hcChzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCBjaGFyICpkYmduYW1lKQor eworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqcHRyOworCisJaWYgKG5h bWUpCisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJD RV9NRU0sIG5hbWUpOworCWVsc2UKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCXB0ciA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRl di0+ZGV2LCByZXMpOworCWlmIChJU19FUlIocHRyKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYs ICJmYWlsZWQgdG8gaW9yZW1hcCAlczogJWxkXG4iLCBuYW1lLAorCQkJUFRSX0VSUihwdHIpKTsK KwkJcmV0dXJuIHB0cjsKKwl9CisKKwlpZiAocmVnbG9nKQorCQlkZXZfcHJpbnRrKEtFUk5fREVC VUcsICZwZGV2LT5kZXYsICJJTzpyZWdpb24gJXMgMHglcCAlMDh6eFxuIiwKKwkJCSAgIGRiZ25h bWUsIHB0ciwgKHNpemVfdClyZXNvdXJjZV9zaXplKHJlcykpOworCisJcmV0dXJuIHB0cjsKK30K Kwordm9pZCBldG5hdml2X3dyaXRlbCh1MzIgZGF0YSwgdm9pZCBfX2lvbWVtICphZGRyKQorewor CWlmIChyZWdsb2cpCisJCXByaW50ayhLRVJOX0RFQlVHICJJTzpXICVwICUwOHhcbiIsIGFkZHIs IGRhdGEpOworCisJd3JpdGVsKGRhdGEsIGFkZHIpOworfQorCit1MzIgZXRuYXZpdl9yZWFkbChj b25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTMyIHZhbCA9IHJlYWRsKGFkZHIpOworCisJ aWYgKHJlZ2xvZykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklPOlIgJXAgJTA4eFxuIiwgYWRkciwg dmFsKTsKKworCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiBEUk0gb3BlcmF0aW9uczoKKyAqLwor CisKK3N0YXRpYyB2b2lkIGxvYWRfZ3B1KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2ln bmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEVUTkFfTUFYX1BJUEVTOyBpKyspIHsKKwkJ c3RydWN0IGV0bmF2aXZfZ3B1ICpnID0gcHJpdi0+Z3B1W2ldOworCisJCWlmIChnKSB7CisJCQlp bnQgcmV0OworCisJCQlyZXQgPSBldG5hdml2X2dwdV9pbml0KGcpOworCQkJaWYgKHJldCkgewor CQkJCWRldl9lcnIoZy0+ZGV2LCAiaHcgaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQkJCXBy aXYtPmdwdVtpXSA9IE5VTEw7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZXRuYXZp dl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sK KwlzdHJ1Y3QgZXRuYXZpdl9maWxlX3ByaXZhdGUgKmN0eDsKKworCWN0eCA9IGt6YWxsb2Moc2l6 ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlmaWxlLT5kcml2ZXJfcHJpdiA9IGN0eDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBldG5hdml2X3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZXRuYXZpdl9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IGV0bmF2aXZfZmlsZV9wcml2YXRlICpjdHggPSBmaWxlLT5kcml2 ZXJfcHJpdjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFVE5BX01BWF9Q SVBFUzsgaSsrKSB7CisJCXN0cnVjdCBldG5hdml2X2dwdSAqZ3B1ID0gcHJpdi0+Z3B1W2ldOwor CisJCWlmIChncHUpIHsKKwkJCW11dGV4X2xvY2soJmdwdS0+bG9jayk7CisJCQlpZiAoZ3B1LT5s YXN0Y3R4ID09IGN0eCkKKwkJCQlncHUtPmxhc3RjdHggPSBOVUxMOworCQkJbXV0ZXhfdW5sb2Nr KCZncHUtPmxvY2spOworCQl9CisJfQorCisJa2ZyZWUoY3R4KTsKK30KKworLyoKKyAqIERSTSBk ZWJ1Z2ZzOgorICovCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBpbnQgZXRuYXZp dl9nZW1fc2hvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7 CisJc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CisJZXRuYXZpdl9nZW1fZGVzY3JpYmVfb2JqZWN0cyhwcml2LCBtKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGV0bmF2aXZfbW1fc2hvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJaW50IHJldDsKKworCXJlYWRfbG9jaygmZGV2LT52bWFf b2Zmc2V0X21hbmFnZXItPnZtX2xvY2spOworCXJldCA9IGRybV9tbV9kdW1wX3RhYmxlKG0sICZk ZXYtPnZtYV9vZmZzZXRfbWFuYWdlci0+dm1fYWRkcl9zcGFjZV9tbSk7CisJcmVhZF91bmxvY2so JmRldi0+dm1hX29mZnNldF9tYW5hZ2VyLT52bV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgZXRuYXZpdl9tbXVfc2hvdyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwgc3Ry dWN0IHNlcV9maWxlICptKQoreworCXNlcV9wcmludGYobSwgIkFjdGl2ZSBPYmplY3RzICglcyk6 XG4iLCBkZXZfbmFtZShncHUtPmRldikpOworCisJbXV0ZXhfbG9jaygmZ3B1LT5tbXUtPmxvY2sp OworCWRybV9tbV9kdW1wX3RhYmxlKG0sICZncHUtPm1tdS0+bW0pOworCW11dGV4X3VubG9jaygm Z3B1LT5tbXUtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0bmF2aXZf YnVmZmVyX2R1bXAoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUsIHN0cnVjdCBzZXFfZmlsZSAqbSkK K3sKKwlzdHJ1Y3QgZXRuYXZpdl9jbWRidWYgKmJ1ZiA9IGdwdS0+YnVmZmVyOworCXUzMiBzaXpl ID0gYnVmLT5zaXplOworCXUzMiAqcHRyID0gYnVmLT52YWRkcjsKKwl1MzIgaTsKKworCXNlcV9w cmludGYobSwgInZpcnQgJXAgLSBwaHlzIDB4JWxseCAtIGZyZWUgMHglMDh4XG4iLAorCQkJYnVm LT52YWRkciwgKHU2NClidWYtPnBhZGRyLCBzaXplIC0gYnVmLT51c2VyX3NpemUpOworCisJZm9y IChpID0gMDsgaSA8IHNpemUgLyA0OyBpKyspIHsKKwkJaWYgKGkgJiYgIShpICUgNCkpCisJCQlz ZXFfcHV0cyhtLCAiXG4iKTsKKwkJaWYgKGkgJSA0ID09IDApCisJCQlzZXFfcHJpbnRmKG0sICJc dDB4JXA6ICIsIHB0ciArIGkpOworCQlzZXFfcHJpbnRmKG0sICIlMDh4ICIsICoocHRyICsgaSkp OworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKK30KKworc3RhdGljIGludCBldG5hdml2X3Jpbmdf c2hvdyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwgc3RydWN0IHNlcV9maWxlICptKQoreworCXNl cV9wcmludGYobSwgIlJpbmcgQnVmZmVyICglcyk6ICIsIGRldl9uYW1lKGdwdS0+ZGV2KSk7CisK KwltdXRleF9sb2NrKCZncHUtPmxvY2spOworCWV0bmF2aXZfYnVmZmVyX2R1bXAoZ3B1LCBtKTsK KwltdXRleF91bmxvY2soJmdwdS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzaG93X3VubG9ja2VkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQoreworCXN0cnVj dCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZh dGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJaW50ICgq c2hvdykoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICptKSA9CisJCQlu b2RlLT5pbmZvX2VudC0+ZGF0YTsKKworCXJldHVybiBzaG93KGRldiwgbSk7Cit9CisKK3N0YXRp YyBpbnQgc2hvd19lYWNoX2dwdShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykKK3sKKwlz dHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5w cml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0 cnVjdCBldG5hdml2X2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3QgZXRuYXZpdl9ncHUgKmdwdTsKKwlpbnQgKCpzaG93KShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdw dSwgc3RydWN0IHNlcV9maWxlICptKSA9CisJCQlub2RlLT5pbmZvX2VudC0+ZGF0YTsKKwl1bnNp Z25lZCBpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBFVE5BX01BWF9Q SVBFUzsgaSsrKSB7CisJCWdwdSA9IHByaXYtPmdwdVtpXTsKKwkJaWYgKCFncHUpCisJCQljb250 aW51ZTsKKworCQlyZXQgPSBzaG93KGdwdSwgbSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7 CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGV0 bmF2aXZfZGVidWdmc19saXN0W10gPSB7CisJCXsiZ3B1Iiwgc2hvd19lYWNoX2dwdSwgMCwgZXRu YXZpdl9ncHVfZGVidWdmc30sCisJCXsiZ2VtIiwgc2hvd191bmxvY2tlZCwgMCwgZXRuYXZpdl9n ZW1fc2hvd30sCisJCXsgIm1tIiwgc2hvd191bmxvY2tlZCwgMCwgZXRuYXZpdl9tbV9zaG93IH0s CisJCXsibW11Iiwgc2hvd19lYWNoX2dwdSwgMCwgZXRuYXZpdl9tbXVfc2hvd30sCisJCXsicmlu ZyIsIHNob3dfZWFjaF9ncHUsIDAsIGV0bmF2aXZfcmluZ19zaG93fSwKK307CisKK3N0YXRpYyBp bnQgZXRuYXZpdl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IGRy bV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyhldG5hdml2X2RlYnVnZnNfbGlzdCwKKwkJCUFSUkFZX1NJ WkUoZXRuYXZpdl9kZWJ1Z2ZzX2xpc3QpLAorCQkJbWlub3ItPmRlYnVnZnNfcm9vdCwgbWlub3Ip OworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiY291bGQgbm90IGluc3RhbGwg ZXRuYXZpdl9kZWJ1Z2ZzX2xpc3RcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0bmF2aXZfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1f bWlub3IgKm1pbm9yKQoreworCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhldG5hdml2X2RlYnVn ZnNfbGlzdCwKKwkJCUFSUkFZX1NJWkUoZXRuYXZpdl9kZWJ1Z2ZzX2xpc3QpLCBtaW5vcik7Cit9 CisjZW5kaWYKKworLyoKKyAqIERSTSBpb2N0bHM6CisgKi8KKworc3RhdGljIGludCBldG5hdml2 X2lvY3RsX2dldF9wYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQlz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgKnBy aXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZXRuYXZpdl9wYXJhbSAqYXJncyA9 IGRhdGE7CisJc3RydWN0IGV0bmF2aXZfZ3B1ICpncHU7CisKKwlpZiAoYXJncy0+cGlwZSA+PSBF VE5BX01BWF9QSVBFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlncHUgPSBwcml2LT5ncHVbYXJn cy0+cGlwZV07CisJaWYgKCFncHUpCisJCXJldHVybiAtRU5YSU87CisKKwlyZXR1cm4gZXRuYXZp dl9ncHVfZ2V0X3BhcmFtKGdwdSwgYXJncy0+cGFyYW0sICZhcmdzLT52YWx1ZSk7Cit9CisKK3N0 YXRpYyBpbnQgZXRuYXZpdl9pb2N0bF9nZW1fbmV3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCisJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2V0bmF2 aXZfZ2VtX25ldyAqYXJncyA9IGRhdGE7CisKKwlpZiAoYXJncy0+ZmxhZ3MgJiB+KEVUTkFfQk9f Q0FDSEVEIHwgRVROQV9CT19XQyB8IEVUTkFfQk9fVU5DQUNIRUQgfAorCQkJICAgIEVUTkFfQk9f Rk9SQ0VfTU1VKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZXRuYXZpdl9nZW1fbmV3 X2hhbmRsZShkZXYsIGZpbGUsIGFyZ3MtPnNpemUsCisJCQlhcmdzLT5mbGFncywgJmFyZ3MtPmhh bmRsZSk7Cit9CisKKyNkZWZpbmUgVFModCkgKChzdHJ1Y3QgdGltZXNwZWMpeyBcCisJLnR2X3Nl YyA9ICh0KS50dl9zZWMsIFwKKwkudHZfbnNlYyA9ICh0KS50dl9uc2VjIFwKK30pCisKK3N0YXRp YyBpbnQgZXRuYXZpdl9pb2N0bF9nZW1fY3B1X3ByZXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKKwkJc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fZXRu YXZpdl9nZW1fY3B1X3ByZXAgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqOworCWludCByZXQ7CisKKwlpZiAoYXJncy0+b3AgJiB+KEVUTkFfUFJFUF9SRUFEIHwgRVRO QV9QUkVQX1dSSVRFIHwgRVROQV9QUkVQX05PU1lOQykpCisJCXJldHVybiAtRUlOVkFMOworCisJ b2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKTsKKwlp ZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXQgPSBldG5hdml2X2dlbV9jcHVfcHJl cChvYmosIGFyZ3MtPm9wLCAmVFMoYXJncy0+dGltZW91dCkpOworCisJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgZXRuYXZpdl9pb2N0bF9nZW1fY3B1X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKKwkJc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fZXRuYXZp dl9nZW1fY3B1X2ZpbmkgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq OworCWludCByZXQ7CisKKwlpZiAoYXJncy0+ZmxhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJ b2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKTsKKwlp ZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXQgPSBldG5hdml2X2dlbV9jcHVfZmlu aShvYmopOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXRuYXZpdl9pb2N0bF9nZW1faW5mbyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUp Cit7CisJc3RydWN0IGRybV9ldG5hdml2X2dlbV9pbmZvICphcmdzID0gZGF0YTsKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKGFyZ3MtPnBhZCkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlLCBh cmdzLT5oYW5kbGUpOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldCA9IGV0 bmF2aXZfZ2VtX21tYXBfb2Zmc2V0KG9iaiwgJmFyZ3MtPm9mZnNldCk7CisJZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgZXRuYXZpdl9pb2N0bF93YWl0X2ZlbmNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCisJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2V0bmF2 aXZfd2FpdF9mZW5jZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUg KnByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCA9ICZU UyhhcmdzLT50aW1lb3V0KTsKKwlzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdTsKKworCWlmIChhcmdz LT5mbGFncyAmIH4oRVROQV9XQUlUX05PTkJMT0NLKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAoYXJncy0+cGlwZSA+PSBFVE5BX01BWF9QSVBFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwln cHUgPSBwcml2LT5ncHVbYXJncy0+cGlwZV07CisJaWYgKCFncHUpCisJCXJldHVybiAtRU5YSU87 CisKKwlpZiAoYXJncy0+ZmxhZ3MgJiBFVE5BX1dBSVRfTk9OQkxPQ0spCisJCXRpbWVvdXQgPSBO VUxMOworCisJcmV0dXJuIGV0bmF2aXZfZ3B1X3dhaXRfZmVuY2VfaW50ZXJydXB0aWJsZShncHUs IGFyZ3MtPmZlbmNlLAorCQkJCQkJICAgIHRpbWVvdXQpOworfQorCitzdGF0aWMgaW50IGV0bmF2 aXZfaW9jdGxfZ2VtX3VzZXJwdHIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK KwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9ldG5hdml2X2dlbV91c2Vy cHRyICphcmdzID0gZGF0YTsKKwlpbnQgYWNjZXNzOworCisJaWYgKGFyZ3MtPmZsYWdzICYgfihF VE5BX1VTRVJQVFJfUkVBRHxFVE5BX1VTRVJQVFJfV1JJVEUpIHx8CisJICAgIGFyZ3MtPmZsYWdz ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9mZnNldF9pbl9wYWdlKGFyZ3MtPnVz ZXJfcHRyIHwgYXJncy0+dXNlcl9zaXplKSB8fAorCSAgICAodWludHB0cl90KWFyZ3MtPnVzZXJf cHRyICE9IGFyZ3MtPnVzZXJfcHRyIHx8CisJICAgICh1MzIpYXJncy0+dXNlcl9zaXplICE9IGFy Z3MtPnVzZXJfc2l6ZSB8fAorCSAgICBhcmdzLT51c2VyX3B0ciAmIH5QQUdFX01BU0spCisJCXJl dHVybiAtRUlOVkFMOworCisJaWYgKGFyZ3MtPmZsYWdzICYgRVROQV9VU0VSUFRSX1dSSVRFKQor CQlhY2Nlc3MgPSBWRVJJRllfV1JJVEU7CisJZWxzZQorCQlhY2Nlc3MgPSBWRVJJRllfUkVBRDsK KworCWlmICghYWNjZXNzX29rKGFjY2VzcywgKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcp YXJncy0+dXNlcl9wdHIsCisJCSAgICAgICBhcmdzLT51c2VyX3NpemUpKQorCQlyZXR1cm4gLUVG QVVMVDsKKworCXJldHVybiBldG5hdml2X2dlbV9uZXdfdXNlcnB0cihkZXYsIGZpbGUsIGFyZ3Mt PnVzZXJfcHRyLAorCQkJCSAgICAgICBhcmdzLT51c2VyX3NpemUsIGFyZ3MtPmZsYWdzLAorCQkJ CSAgICAgICAmYXJncy0+aGFuZGxlKTsKK30KKworc3RhdGljIGludCBldG5hdml2X2lvY3RsX2dl bV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJc3RydWN0IGRybV9m aWxlICpmaWxlKQoreworCXN0cnVjdCBldG5hdml2X2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX3dhaXQgKmFyZ3MgPSBkYXRhOwor CXN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCA9ICZUUyhhcmdzLT50aW1lb3V0KTsKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdTsKKwlpbnQgcmV0 OworCisJaWYgKGFyZ3MtPmZsYWdzICYgfihFVE5BX1dBSVRfTk9OQkxPQ0spKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmIChhcmdzLT5waXBlID49IEVUTkFfTUFYX1BJUEVTKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWdwdSA9IHByaXYtPmdwdVthcmdzLT5waXBlXTsKKwlpZiAoIWdwdSkKKwkJ cmV0dXJuIC1FTlhJTzsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUs IGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJaWYgKGFy Z3MtPmZsYWdzICYgRVROQV9XQUlUX05PTkJMT0NLKQorCQl0aW1lb3V0ID0gTlVMTDsKKworCXJl dCA9IGV0bmF2aXZfZ2VtX3dhaXRfYm8oZ3B1LCBvYmosIHRpbWVvdXQpOworCisJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgZXRuYXZpdl9pb2N0bHNbXSA9IHsKKyNk ZWZpbmUgRVROQV9JT0NUTChuLCBmdW5jLCBmbGFncykgXAorCURSTV9JT0NUTF9ERUZfRFJWKEVU TkFWSVZfIyNuLCBldG5hdml2X2lvY3RsXyMjZnVuYywgZmxhZ3MpCisJRVROQV9JT0NUTChHRVRf UEFSQU0sICAgIGdldF9wYXJhbSwgICAgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRVRO QV9JT0NUTChHRU1fTkVXLCAgICAgIGdlbV9uZXcsICAgICAgRFJNX0FVVEh8RFJNX1JFTkRFUl9B TExPVyksCisJRVROQV9JT0NUTChHRU1fSU5GTywgICAgIGdlbV9pbmZvLCAgICAgRFJNX0FVVEh8 RFJNX1JFTkRFUl9BTExPVyksCisJRVROQV9JT0NUTChHRU1fQ1BVX1BSRVAsIGdlbV9jcHVfcHJl cCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRVROQV9JT0NUTChHRU1fQ1BVX0ZJTkks IGdlbV9jcHVfZmluaSwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRVROQV9JT0NUTChH RU1fU1VCTUlULCAgIGdlbV9zdWJtaXQsICAgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJ RVROQV9JT0NUTChXQUlUX0ZFTkNFLCAgIHdhaXRfZmVuY2UsICAgRFJNX0FVVEh8RFJNX1JFTkRF Ul9BTExPVyksCisJRVROQV9JT0NUTChHRU1fVVNFUlBUUiwgIGdlbV91c2VycHRyLCAgRFJNX0FV VEh8RFJNX1JFTkRFUl9BTExPVyksCisJRVROQV9JT0NUTChHRU1fV0FJVCwgICAgIGdlbV93YWl0 LCAgICAgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtX29wcyA9IHsKKwkuZmF1bHQgPSBldG5hdml2X2dl bV9mYXVsdCwKKwkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKKwkuY2xvc2UgPSBkcm1fZ2VtX3Zt X2Nsb3NlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9 IHsKKwkub3duZXIgICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAg ICAgICA9IGRybV9vcGVuLAorCS5yZWxlYXNlICAgICAgICAgICAgPSBkcm1fcmVsZWFzZSwKKwku dW5sb2NrZWRfaW9jdGwgICAgID0gZHJtX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwku Y29tcGF0X2lvY3RsICAgICAgID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5wb2xsICAg ICAgICAgICAgICAgPSBkcm1fcG9sbCwKKwkucmVhZCAgICAgICAgICAgICAgID0gZHJtX3JlYWQs CisJLmxsc2VlayAgICAgICAgICAgICA9IG5vX2xsc2VlaywKKwkubW1hcCAgICAgICAgICAgICAg ID0gZXRuYXZpdl9nZW1fbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBldG5h dml2X2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyAgICA9IERSSVZFUl9IQVZFX0lS USB8CisJCQkJRFJJVkVSX0dFTSB8CisJCQkJRFJJVkVSX1BSSU1FIHwKKwkJCQlEUklWRVJfUkVO REVSLAorCS5vcGVuICAgICAgICAgICAgICAgPSBldG5hdml2X29wZW4sCisJLnByZWNsb3NlICAg ICAgICAgICA9IGV0bmF2aXZfcHJlY2xvc2UsCisJLnNldF9idXNpZCAgICAgICAgICA9IGRybV9w bGF0Zm9ybV9zZXRfYnVzaWQsCisJLmdlbV9mcmVlX29iamVjdCAgICA9IGV0bmF2aXZfZ2VtX2Zy ZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzICAgICAgICAgPSAmdm1fb3BzLAorCS5wcmltZV9oYW5k bGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFu ZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgICA9 IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfaW1wb3J0ICAgPSBkcm1fZ2VtX3By aW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX3BpbiAgICAgID0gZXRuYXZpdl9nZW1fcHJpbWVfcGlu LAorCS5nZW1fcHJpbWVfdW5waW4gICAgPSBldG5hdml2X2dlbV9wcmltZV91bnBpbiwKKwkuZ2Vt X3ByaW1lX2dldF9zZ190YWJsZSA9IGV0bmF2aXZfZ2VtX3ByaW1lX2dldF9zZ190YWJsZSwKKwku Z2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGV0bmF2aXZfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSwKKwkuZ2VtX3ByaW1lX3ZtYXAgICAgID0gZXRuYXZpdl9nZW1fcHJpbWVfdm1hcCwKKwku Z2VtX3ByaW1lX3Z1bm1hcCAgID0gZXRuYXZpdl9nZW1fcHJpbWVfdnVubWFwLAorI2lmZGVmIENP TkZJR19ERUJVR19GUworCS5kZWJ1Z2ZzX2luaXQgICAgICAgPSBldG5hdml2X2RlYnVnZnNfaW5p dCwKKwkuZGVidWdmc19jbGVhbnVwICAgID0gZXRuYXZpdl9kZWJ1Z2ZzX2NsZWFudXAsCisjZW5k aWYKKwkuaW9jdGxzICAgICAgICAgICAgID0gZXRuYXZpdl9pb2N0bHMsCisJLm51bV9pb2N0bHMg ICAgICAgICA9IERSTV9FVE5BVklWX05VTV9JT0NUTFMsCisJLmZvcHMgICAgICAgICAgICAgICA9 ICZmb3BzLAorCS5uYW1lICAgICAgICAgICAgICAgPSAiZXRuYXZpdiIsCisJLmRlc2MgICAgICAg ICAgICAgICA9ICJldG5hdml2IERSTSIsCisJLmRhdGUgICAgICAgICAgICAgICA9ICIyMDE1MTEy NiIsCisJLm1ham9yICAgICAgICAgICAgICA9IDEsCisJLm1pbm9yICAgICAgICAgICAgICA9IDAs Cit9OworCisvKgorICogUGxhdGZvcm0gZHJpdmVyOgorICovCitzdGF0aWMgaW50IGV0bmF2aXZf YmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUg KnByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJZHJtID0gZHJt X2Rldl9hbGxvYygmZXRuYXZpdl9kcm1fZHJpdmVyLCBkZXYpOworCWlmICghZHJtKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWRybS0+cGxhdGZvcm1kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2 KTsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICgh cHJpdikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFc biIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisJZHJtLT5kZXZf cHJpdmF0ZSA9IHByaXY7CisKKwlwcml2LT53cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJl dG5hdml2IiwgMCk7CisJaWYgKCFwcml2LT53cSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3Rv IG91dF93cTsKKwl9CisKKwltdXRleF9pbml0KCZwcml2LT5nZW1fbG9jayk7CisJSU5JVF9MSVNU X0hFQUQoJnByaXYtPmdlbV9saXN0KTsKKwlwcml2LT5udW1fZ3B1cyA9IDA7CisKKwlkZXZfc2V0 X2RydmRhdGEoZGV2LCBkcm0pOworCisJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgZHJt KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfYmluZDsKKworCWxvYWRfZ3B1KGRybSk7CisK KwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRf cmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworb3V0X3JlZ2lzdGVyOgorCWNvbXBvbmVudF91bmJp bmRfYWxsKGRldiwgZHJtKTsKK291dF9iaW5kOgorCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53cSk7 CisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d3EpOworb3V0X3dxOgorCWtmcmVlKHByaXYpOwor b3V0X3VucmVmOgorCWRybV9kZXZfdW5yZWYoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIGV0bmF2aXZfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGV0bmF2aXZf ZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCisJZHJtX2Rldl91bnJlZ2lz dGVyKGRybSk7CisKKwlmbHVzaF93b3JrcXVldWUocHJpdi0+d3EpOworCWRlc3Ryb3lfd29ya3F1 ZXVlKHByaXYtPndxKTsKKworCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwgZHJtKTsKKworCWRy bS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCWtmcmVlKHByaXYpOworCisJZHJtX3B1dF9kZXYoZHJt KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBldG5hdml2 X21hc3Rlcl9vcHMgPSB7CisJLmJpbmQgPSBldG5hdml2X2JpbmQsCisJLnVuYmluZCA9IGV0bmF2 aXZfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRl diwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGF0YTsKKworCXJl dHVybiBkZXYtPm9mX25vZGUgPT0gbnA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9zdHIoc3Ry dWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXJldHVybiAhc3RyY21wKGRldl9uYW1l KGRldiksIGRhdGEpOworfQorCitzdGF0aWMgaW50IGV0bmF2aXZfcGRldl9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBj b21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKworCWRtYV9zZXRfY29oZXJlbnRfbWFzaygm cGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKKworCWlmIChub2RlKSB7CisJCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqY29yZV9ub2RlOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyA7IGkrKykg eworCQkJY29yZV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAiY29yZXMiLCBpKTsKKwkJ CWlmICghY29yZV9ub2RlKQorCQkJCWJyZWFrOworCisJCQljb21wb25lbnRfbWF0Y2hfYWRkKCZw ZGV2LT5kZXYsICZtYXRjaCwgY29tcGFyZV9vZiwKKwkJCQkJICAgIGNvcmVfbm9kZSk7CisJCQlv Zl9ub2RlX3B1dChjb3JlX25vZGUpOworCQl9CisJfSBlbHNlIGlmIChkZXYtPnBsYXRmb3JtX2Rh dGEpIHsKKwkJY2hhciAqKm5hbWVzID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCQl1bnNpZ25lZCBp OworCisJCWZvciAoaSA9IDA7IG5hbWVzW2ldOyBpKyspCisJCQljb21wb25lbnRfbWF0Y2hfYWRk KGRldiwgJm1hdGNoLCBjb21wYXJlX3N0ciwgbmFtZXNbaV0pOworCX0KKworCXJldHVybiBjb21w b25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKGRldiwgJmV0bmF2aXZfbWFzdGVyX29wcywgbWF0 Y2gpOworfQorCitzdGF0aWMgaW50IGV0bmF2aXZfcGRldl9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmZXRu YXZpdl9tYXN0ZXJfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBkdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteC1n cHUtc3Vic3lzdGVtIiB9LAorCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxkb3ZlLWdwdS1zdWJz eXN0ZW0iIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkdF9tYXRjaCk7CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGV0bmF2aXZfcGxhdGZvcm1fZHJpdmVyID0g eworCS5wcm9iZSAgICAgID0gZXRuYXZpdl9wZGV2X3Byb2JlLAorCS5yZW1vdmUgICAgID0gZXRu YXZpdl9wZGV2X3JlbW92ZSwKKwkuZHJpdmVyICAgICA9IHsKKwkJLm93bmVyICA9IFRISVNfTU9E VUxFLAorCQkubmFtZSAgID0gImV0bmF2aXYiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBkdF9tYXRj aCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZXRuYXZpdl9pbml0KHZvaWQpCit7CisJ aW50IHJldDsKKworCWV0bmF2aXZfdmFsaWRhdGVfaW5pdCgpOworCisJcmV0ID0gcGxhdGZvcm1f ZHJpdmVyX3JlZ2lzdGVyKCZldG5hdml2X2dwdV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXRuYXZpdl9w bGF0Zm9ybV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVn aXN0ZXIoJmV0bmF2aXZfZ3B1X2RyaXZlcik7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2lu aXQoZXRuYXZpdl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGV0bmF2aXZfZXhpdCh2b2lk KQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZldG5hdml2X2dwdV9kcml2ZXIpOwor CXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZldG5hdml2X3BsYXRmb3JtX2RyaXZlcik7Cit9 Cittb2R1bGVfZXhpdChldG5hdml2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4g R21laW5lciA8Y2hyaXN0aWFuLmdtZWluZXJAZ21haWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigi UnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybS5saW51eC5vcmcudWs+Iik7CitNT0RVTEVfQVVU SE9SKCJMdWNhcyBTdGFjaCA8bC5zdGFjaEBwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9ERVND UklQVElPTigiZXRuYXZpdiBEUk0gRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmV0bmF2aXYiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9l dG5hdml2X2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDZi ZDQzOGJkNWJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRu YXZpdl9kcnYuaApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBF dG5hdml2IFByb2plY3QKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRl dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYg X19FVE5BVklWX0RSVl9IX18KKyNkZWZpbmUgX19FVE5BVklWX0RSVl9IX18KKworI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgv bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KKyNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGRybS9ldG5hdml2X2Ry bS5oPgorCitzdHJ1Y3QgZXRuYXZpdl9jbWRidWY7CitzdHJ1Y3QgZXRuYXZpdl9ncHU7CitzdHJ1 Y3QgZXRuYXZpdl9tbXU7CitzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0Oworc3RydWN0IGV0bmF2 aXZfZ2VtX3N1Ym1pdDsKKworc3RydWN0IGV0bmF2aXZfZmlsZV9wcml2YXRlIHsKKwkvKiBjdXJy ZW50bHkgd2UgZG9uJ3QgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhpcy4uIGJ1dCB3aGVuCisJ ICogcGVyLWNvbnRleHQgYWRkcmVzcyBzcGFjZXMgYXJlIHN1cHBvcnRlZCB3ZSdkIGtlZXAgdHJh Y2sgb2YKKwkgKiB0aGUgY29udGV4dCdzIHBhZ2UtdGFibGVzIGhlcmUuCisJICovCisJaW50IGR1 bW15OworfTsKKworc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgeworCWludCBudW1fZ3B1czsK KwlzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdVtFVE5BX01BWF9QSVBFU107CisKKwkvKiBsaXN0IG9m IEdFTSBvYmplY3RzOiAqLworCXN0cnVjdCBtdXRleCBnZW1fbG9jazsKKwlzdHJ1Y3QgbGlzdF9o ZWFkIGdlbV9saXN0OworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworfTsKKworc3Rh dGljIGlubGluZSB2b2lkIGV0bmF2aXZfcXVldWVfd29yayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCXN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgZXRuYXZpdl9kcm1fcHJpdmF0 ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlxdWV1ZV93b3JrKHByaXYtPndxLCB3KTsK K30KKworaW50IGV0bmF2aXZfaW9jdGxfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAorCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOworCitpbnQgZXRuYXZpdl9n ZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwor aW50IGV0bmF2aXZfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qg dm1fZmF1bHQgKnZtZik7CitpbnQgZXRuYXZpdl9nZW1fbW1hcF9vZmZzZXQoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHU2NCAqb2Zmc2V0KTsKK2ludCBldG5hdml2X2dlbV9nZXRfaW92YShz dHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdTMy ICppb3ZhKTsKK3ZvaWQgZXRuYXZpdl9nZW1fcHV0X2lvdmEoc3RydWN0IGV0bmF2aXZfZ3B1ICpn cHUsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0cnVjdCBzZ190YWJsZSAqZXRuYXZp dl9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3Zv aWQgKmV0bmF2aXZfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwor dm9pZCBldG5hdml2X2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos IHZvaWQgKnZhZGRyKTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqZXRuYXZpdl9nZW1fcHJpbWVf aW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKK2ludCBldG5hdml2X2dl bV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBldG5hdml2X2dl bV9wcmltZV91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkICpldG5hdml2 X2dlbV92YWRkcihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitpbnQgZXRuYXZpdl9nZW1f Y3B1X3ByZXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHUzMiBvcCwKKwkJc3RydWN0IHRp bWVzcGVjICp0aW1lb3V0KTsKK2ludCBldG5hdml2X2dlbV9jcHVfZmluaShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaik7Cit2b2lkIGV0bmF2aXZfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqKTsKK2ludCBldG5hdml2X2dlbV9uZXdfaGFuZGxlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJdTMyIHNpemUsIHUzMiBmbGFn cywgdTMyICpoYW5kbGUpOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpldG5hdml2X2dlbV9uZXdf bG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCXUzMiBzaXplLCB1MzIgZmxhZ3MpOwor c3RydWN0IGRybV9nZW1fb2JqZWN0ICpldG5hdml2X2dlbV9uZXcoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkJdTMyIHNpemUsIHUzMiBmbGFncyk7CitpbnQgZXRuYXZpdl9nZW1fbmV3X3VzZXJw dHIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAorCXVpbnRw dHJfdCBwdHIsIHUzMiBzaXplLCB1MzIgZmxhZ3MsIHUzMiAqaGFuZGxlKTsKK3UxNiBldG5hdml2 X2J1ZmZlcl9pbml0KHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KTsKK3ZvaWQgZXRuYXZpdl9idWZm ZXJfZW5kKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KTsKK3ZvaWQgZXRuYXZpdl9idWZmZXJfcXVl dWUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUsIHVuc2lnbmVkIGludCBldmVudCwKKwlzdHJ1Y3Qg ZXRuYXZpdl9jbWRidWYgKmNtZGJ1Zik7Cit2b2lkIGV0bmF2aXZfdmFsaWRhdGVfaW5pdCh2b2lk KTsKK2Jvb2wgZXRuYXZpdl9jbWRfdmFsaWRhdGVfb25lKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1 LAorCXUzMiAqc3RyZWFtLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwlzdHJ1Y3QgZHJtX2V0bmF2aXZf Z2VtX3N1Ym1pdF9yZWxvYyAqcmVsb2NzLCB1bnNpZ25lZCBpbnQgcmVsb2Nfc2l6ZSk7CisKKyNp ZmRlZiBDT05GSUdfREVCVUdfRlMKK3ZvaWQgZXRuYXZpdl9nZW1fZGVzY3JpYmVfb2JqZWN0cyhz dHJ1Y3QgZXRuYXZpdl9kcm1fcHJpdmF0ZSAqcHJpdiwKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwor I2VuZGlmCisKK3ZvaWQgX19pb21lbSAqZXRuYXZpdl9pb3JlbWFwKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCWNvbnN0IGNoYXIgKmRiZ25hbWUpOwor dm9pZCBldG5hdml2X3dyaXRlbCh1MzIgZGF0YSwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3UzMiBl dG5hdml2X3JlYWRsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcik7CisKKyNkZWZpbmUgREJHKGZt dCwgLi4uKSBEUk1fREVCVUcoZm10IlxuIiwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgVkVSQihm bXQsIC4uLikgaWYgKDApIERSTV9ERUJVRyhmbXQiXG4iLCAjI19fVkFfQVJHU19fKQorCisvKgor ICogUmV0dXJuIHRoZSBzdG9yYWdlIHNpemUgb2YgYSBzdHJ1Y3R1cmUgd2l0aCBhIHZhcmlhYmxl IGxlbmd0aCBhcnJheS4KKyAqIFRoZSBhcnJheSBpcyBuZWxlbSBlbGVtZW50cyBvZiBlbGVtX3Np emUsIHdoZXJlIHRoZSBiYXNlIHN0cnVjdHVyZQorICogaXMgZGVmaW5lZCBieSBiYXNlLiAgSWYg dGhlIHNpemUgb3ZlcmZsb3dzIHNpemVfdCwgcmV0dXJuIHplcm8uCisgKi8KK3N0YXRpYyBpbmxp bmUgc2l6ZV90IHNpemVfdnN0cnVjdChzaXplX3QgbmVsZW0sIHNpemVfdCBlbGVtX3NpemUsIHNp emVfdCBiYXNlKQoreworCWlmIChlbGVtX3NpemUgJiYgbmVsZW0gPiAoU0laRV9NQVggLSBiYXNl KSAvIGVsZW1fc2l6ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGJhc2UgKyBuZWxlbSAqIGVsZW1f c2l6ZTsKK30KKworLyogcmV0dXJucyB0cnVlIGlmIGZlbmNlIGEgY29tZXMgYWZ0ZXIgZmVuY2Ug YiAqLworc3RhdGljIGlubGluZSBib29sIGZlbmNlX2FmdGVyKHUzMiBhLCB1MzIgYikKK3sKKwly ZXR1cm4gKHMzMikoYSAtIGIpID4gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIGZlbmNlX2Fm dGVyX2VxKHUzMiBhLCB1MzIgYikKK3sKKwlyZXR1cm4gKHMzMikoYSAtIGIpID49IDA7Cit9CisK K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBldG5hdml2X3RpbWVvdXRfdG9famlmZmllcygK Kwljb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpCit7CisJdW5zaWduZWQgbG9uZyB0aW1l b3V0X2ppZmZpZXMgPSB0aW1lc3BlY190b19qaWZmaWVzKHRpbWVvdXQpOworCXVuc2lnbmVkIGxv bmcgc3RhcnRfamlmZmllcyA9IGppZmZpZXM7CisJdW5zaWduZWQgbG9uZyByZW1haW5pbmdfamlm ZmllczsKKworCWlmICh0aW1lX2FmdGVyKHN0YXJ0X2ppZmZpZXMsIHRpbWVvdXRfamlmZmllcykp CisJCXJlbWFpbmluZ19qaWZmaWVzID0gMDsKKwllbHNlCisJCXJlbWFpbmluZ19qaWZmaWVzID0g dGltZW91dF9qaWZmaWVzIC0gc3RhcnRfamlmZmllczsKKworCXJldHVybiByZW1haW5pbmdfamlm ZmllczsKK30KKworI2VuZGlmIC8qIF9fRVROQVZJVl9EUlZfSF9fICovCi0tIAoyLjYuMgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK