From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Herrmann Subject: [PATCH v5 6/7] drm: add SimpleDRM driver Date: Fri, 2 Sep 2016 10:22:44 +0200 Message-ID: <20160902082245.7119-7-dh.herrmann@gmail.com> References: <20160902082245.7119-1-dh.herrmann@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id B3E8C6EA38 for ; Fri, 2 Sep 2016 08:23:26 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id w207so1850399wmw.0 for ; Fri, 02 Sep 2016 01:23:26 -0700 (PDT) In-Reply-To: <20160902082245.7119-1-dh.herrmann@gmail.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 List-Id: dri-devel@lists.freedesktop.org VGhlIFNpbXBsZURSTSBkcml2ZXIgYmluZHMgdG8gc2ltcGxlLWZyYW1lYnVmZmVyIGRldmljZXMg YW5kIHByb3ZpZGVzIGEKRFJNL0tNUyBBUEkuIEl0IHByb3ZpZGVzIG9ubHkgYSBzaW5nbGUgQ1JU QytlbmNvZGVyK2Nvbm5lY3RvciBjb21iaW5hdGlvbgpwbHVzIG9uZSBpbml0aWFsIG1vZGUuCgpV c2Vyc3BhY2UgY2FuIGNyZWF0ZSBkdW1iLWJ1ZmZlcnMgd2hpY2ggY2FuIGJlIGJsaXQgaW50byB0 aGUgcmVhbApmcmFtZWJ1ZmZlciBzaW1pbGFyIHRvIFVETC4gTm8gYWNjZXNzIHRvIHRoZSByZWFs IGZyYW1lYnVmZmVyIGlzIGFsbG93ZWQKKGNvbXBhcmVkIHRvIGVhcmxpZXIgdmVyc2lvbiBvZiB0 aGlzIGRyaXZlcikgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzLgpGdXJ0aGVybW9yZSwgdGhpcyB3 YXkgd2UgY2FuIHN1cHBvcnQgYXJiaXRyYXJ5IG1vZGVzIGFzIGxvbmcgYXMgd2UgaGF2ZSBhCmNv bnZlcnNpb24taGVscGVyLgoKU2lnbmVkLW9mZi1ieTogRGF2aWQgSGVycm1hbm4gPGRoLmhlcnJt YW5uQGdtYWlsLmNvbT4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAg ICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWcgICAgICAgICAgICB8 ICAxOSArKwogZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9NYWtlZmlsZSAgICAgICAgICAgfCAg IDggKwogZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm0uaCAgICAgICAgfCAgODMg KysrKysKIGRyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2RhbWFnZS5jIHwgMTk0 ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9kcnYuYyAg ICB8IDQ2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9zaW1w bGVkcm0vc2ltcGxlZHJtX2dlbS5jICAgIHwgMTA5ICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9z aW1wbGVkcm0vc2ltcGxlZHJtX2ttcy5jICAgIHwgMjYzICsrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fb2YuYyAgICAgfCAyNjUgKysrKysrKysrKysr KysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxNDE0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2RhbWFnZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZHJ2LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9nZW0uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2tt cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVk cm1fb2YuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMGJi ZTRiMS4uNDA4ODYzZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMK QEAgLTQxNDAsNiArNDE0MCwxMiBAQCBTOglPcnBoYW4gLyBPYnNvbGV0ZQogRjoJZHJpdmVycy9n cHUvZHJtL3NhdmFnZS8KIEY6CWluY2x1ZGUvdWFwaS9kcm0vc2F2YWdlX2RybS5oCiAKK0RSTSBE UklWRVIgRk9SIFNJTVBMRSBGUkFNRUJVRkZFUiBERVZJQ0VTCitNOglEYXZpZCBIZXJybWFubiA8 ZGguaGVycm1hbm5AZ21haWwuY29tPgorTDoJZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS8KKwogRFJNIERS SVZFUiBGT1IgU0lTIFZJREVPIENBUkRTCiBTOglPcnBoYW4gLyBPYnNvbGV0ZQogRjoJZHJpdmVy cy9ncHUvZHJtL3Npcy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJp dmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggZjI3ZjliNS4uNjFjYmNkMSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAg LTI5MSwzICsyOTEsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hcmMvS2NvbmZpZyIKIHNv dXJjZSAiZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9z aW1wbGVkcm0vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAwMjM4YmY4Li4zZTZmZTk5IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCkBAIC04MywzICs4Myw0IEBAIG9iai0kKENPTkZJR19EUk1fRlNMX0RDVSkgKz0gZnNsLWRj dS8KIG9iai0kKENPTkZJR19EUk1fRVROQVZJVikgKz0gZXRuYXZpdi8KIG9iai0kKENPTkZJR19E Uk1fQVJDUEdVKSs9IGFyYy8KIG9iai15CQkJKz0gaGlzaWxpY29uLworb2JqLXkJCQkrPSBzaW1w bGVkcm0vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZjQ1YjI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9z aW1wbGVkcm0vS2NvbmZpZwpAQCAtMCwwICsxLDE5IEBACitjb25maWcgRFJNX1NJTVBMRURSTQor CXRyaXN0YXRlICJTaW1wbGUgZmlybXdhcmUgZnJhbWVidWZmZXIgRFJNIGRyaXZlciIKKwlkZXBl bmRzIG9uIERSTQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCWhlbHAKKwkgIFNpbXBsZURSTSBj YW4gcnVuIG9uIGFsbCBzeXN0ZW1zIHdpdGggcHJlLWluaXRpYWxpemVkIGdyYXBoaWNzCisJICBo YXJkd2FyZS4gSXQgdXNlcyBhIGZyYW1lYnVmZmVyIHRoYXQgd2FzIGluaXRpYWxpemVkIGR1cmlu ZworCSAgZmlybXdhcmUgYm9vdC4gTm8gcGFnZS1mbGlwcGluZywgbW9kZXNldHRpbmcgb3Igb3Ro ZXIgYWR2YW5jZWQKKwkgIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuIEhvd2V2ZXIsIG90aGVyIERS TSBkcml2ZXJzIGNhbiBiZSBsb2FkZWQKKwkgIGxhdGVyIGFuZCB0YWtlIG92ZXIgZnJvbSBTaW1w bGVEUk0gaWYgdGhleSBwcm92aWRlIHJlYWwgaGFyZHdhcmUKKwkgIHN1cHBvcnQuCisKKwkgIFNp bXBsZURSTSBzdXBwb3J0cyAic2ltcGxlLWZyYW1lYnVmZmVyIiBEZXZpY2VUcmVlIG9iamVjdHMg YW5kCisJICBjb21wYXRpYmxlIHBsYXRmb3JtIGZyYW1lYnVmZmVycy4KKworCSAgSWYgdW5zdXJl LCBzYXkgWS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2ltcGxlZHJtLgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9zaW1wbGVkcm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZDdiMTc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vTWFr ZWZpbGUKQEAgLTAsMCArMSw4IEBACitzaW1wbGVkcm0teSA6PSBcCisJc2ltcGxlZHJtX2RhbWFn ZS5vIFwKKwlzaW1wbGVkcm1fZHJ2Lm8gXAorCXNpbXBsZWRybV9nZW0ubyBcCisJc2ltcGxlZHJt X2ttcy5vIFwKKwlzaW1wbGVkcm1fb2YubworCitvYmotJChDT05GSUdfRFJNX1NJTVBMRURSTSkg Oj0gc2ltcGxlZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2lt cGxlZHJtLmggYi9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNmQ3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybS5oCkBAIC0wLDAgKzEsODMgQEAKKyNp Zm5kZWYgX19TRFJNX1NJTVBMRURSTV9ICisjZGVmaW5lIF9fU0RSTV9TSU1QTEVEUk1fSAorCisv KgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgUmVkIEhhdCwgSW5jLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAq IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNp bmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvYXRv bWljLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXgu aD4KKworc3RydWN0IGNsazsKK3N0cnVjdCByZWd1bGF0b3I7CitzdHJ1Y3Qgc2ltcGxlZmJfZm9y bWF0OworCitzdHJ1Y3Qgc2RybV9odyB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdTMyIHdpZHRo OworCXUzMiBoZWlnaHQ7CisJdTMyIHN0cmlkZTsKKwl1MzIgYnBwOworCXUzMiBmb3JtYXQ7CisJ dW5zaWduZWQgbG9uZyBiYXNlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICptYXA7Cit9 OworCitzdHJ1Y3Qgc2RybV9ibyB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7CisJc3Ry dWN0IHBhZ2UgKipwYWdlczsKKwl2b2lkICp2bWFwcGluZzsKK307CisKK3N0cnVjdCBzZHJtX2Zi IHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7CisJc3RydWN0IHNkcm1fYm8gKmJvOwor fTsKKworc3RydWN0IHNkcm1fZGV2aWNlIHsKKwlhdG9taWNfdCBuX3VzZWQ7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRkZXY7CisJc3RydWN0IHNkcm1faHcgKmh3OworCisJc2l6ZV90IG5fY2xrczsK KwlzaXplX3Qgbl9yZWd1bGF0b3JzOworCXN0cnVjdCBjbGsgKipjbGtzOworCXN0cnVjdCByZWd1 bGF0b3IgKipyZWd1bGF0b3JzOworCisJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlIHBp cGU7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsKK307CisKK3ZvaWQgc2RybV9vZl9ib290 c3RyYXAodm9pZCk7CitpbnQgc2RybV9vZl9iaW5kKHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSk7 Cit2b2lkIHNkcm1fb2ZfdW5iaW5kKHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSk7CisKK2ludCBz ZHJtX2ttc19iaW5kKHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSk7Cit2b2lkIHNkcm1fa21zX3Vu YmluZChzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0pOworCit2b2lkIHNkcm1fZGlydHkoc3RydWN0 IHNkcm1fZmIgKmZiLCB1MzIgeCwgdTMyIHksIHUzMiB3aWR0aCwgdTMyIGhlaWdodCk7CisKK3N0 cnVjdCBzZHJtX2JvICpzZHJtX2JvX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgc2l6ZV90 IHNpemUpOwordm9pZCBzZHJtX2JvX2ZyZWUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwor aW50IHNkcm1fYm9fdm1hcChzdHJ1Y3Qgc2RybV9ibyAqYm8pOworCitpbnQgc2RybV9kdW1iX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLAorCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2LAorCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJnKTsKK2ludCBzZHJt X2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLAorCQkJIHN0cnVjdCBkcm1f ZGV2aWNlICpkZGV2LAorCQkJIHVpbnQzMl90IGhhbmRsZSwKKwkJCSB1aW50NjRfdCAqb2Zmc2V0 KTsKKworI2VuZGlmIC8qIF9fU0RSTV9TSU1QTEVEUk1fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZGFtYWdlLmMgYi9kcml2ZXJzL2dwdS9kcm0v c2ltcGxlZHJtL3NpbXBsZWRybV9kYW1hZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40ZjdhZjVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3NpbXBs ZWRybS9zaW1wbGVkcm1fZGFtYWdlLmMKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMTItMjAxNiBSZWQgSGF0LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAq IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1F ICI6ICIgZm10CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGRybS9kcm1Q Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ CisjaW5jbHVkZSAic2ltcGxlZHJtLmgiCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZHJtX3B1dCh1 OCAqZHN0LCB1MzIgZm91cl9jYywgdTE2IHIsIHUxNiBnLCB1MTYgYikKK3sKKwlzd2l0Y2ggKGZv dXJfY2MpIHsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyID4+PSAxMTsKKwkJZyA+Pj0g MTA7CisJCWIgPj49IDExOworCQlwdXRfdW5hbGlnbmVkKCh1MTYpKChyIDw8IDExKSB8IChnIDw8 IDUpIHwgYiksICh1MTYgKilkc3QpOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1 NTU6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgorCQlyID4+PSAxMTsKKwkJZyA+Pj0gMTE7 CisJCWIgPj49IDExOworCQlwdXRfdW5hbGlnbmVkKCh1MTYpKChyIDw8IDEwKSB8IChnIDw8IDUp IHwgYiksICh1MTYgKilkc3QpOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogor CQlyID4+PSA4OworCQlnID4+PSA4OworCQliID4+PSA4OworI2lmZGVmIF9fTElUVExFX0VORElB TgorCQlkc3RbMl0gPSByOworCQlkc3RbMV0gPSBnOworCQlkc3RbMF0gPSBiOworI2VsaWYgZGVm aW5lZChfX0JJR19FTkRJQU4pCisJCWRzdFswXSA9IHI7CisJCWRzdFsxXSA9IGc7CisJCWRzdFsy XSA9IGI7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJciA+Pj0gODsKKwkJZyA+Pj0gODsKKwkJYiA+Pj0g ODsKKwkJcHV0X3VuYWxpZ25lZCgodTMyKSgociA8PCAxNikgfCAoZyA8PCA4KSB8IGIpLCAodTMy ICopZHN0KTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQlyID4+PSA4 OworCQlnID4+PSA4OworCQliID4+PSA4OworCQlwdXRfdW5hbGlnbmVkKCh1MzIpKChiIDw8IDE2 KSB8IChnIDw8IDgpIHwgciksICh1MzIgKilkc3QpOworCQlicmVhazsKKwljYXNlIERSTV9GT1JN QVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgorCQlyID4+PSA0 OworCQlnID4+PSA0OworCQliID4+PSA0OworCQlwdXRfdW5hbGlnbmVkKCh1MzIpKChyIDw8IDIw KSB8IChnIDw8IDEwKSB8IGIpLCAodTMyICopZHN0KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0 aWMgdm9pZCBzZHJtX2JsaXRfZnJvbV94cmdiODg4OChjb25zdCB1OCAqc3JjLAorCQkJCSAgICB1 MzIgc3JjX3N0cmlkZSwKKwkJCQkgICAgdTMyIHNyY19icHAsCisJCQkJICAgIHU4ICpkc3QsCisJ CQkJICAgIHUzMiBkc3Rfc3RyaWRlLAorCQkJCSAgICB1MzIgZHN0X2JwcCwKKwkJCQkgICAgdTMy IGRzdF9mb3VyX2NjLAorCQkJCSAgICB1MzIgd2lkdGgsCisJCQkJICAgIHUzMiBoZWlnaHQpCit7 CisJdTMyIHZhbCwgaTsKKworCXdoaWxlIChoZWlnaHQtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwg d2lkdGg7ICsraSkgeworCQkJdmFsID0gZ2V0X3VuYWxpZ25lZCgoY29uc3QgdTMyICopJnNyY1tp ICogc3JjX2JwcF0pOworCQkJc2RybV9wdXQoJmRzdFtpICogZHN0X2JwcF0sIGRzdF9mb3VyX2Nj LAorCQkJCSAodmFsICYgMHgwMGZmMDAwMFUpID4+IDgsCisJCQkJICh2YWwgJiAweDAwMDBmZjAw VSksCisJCQkJICh2YWwgJiAweDAwMDAwMGZmVSkgPDwgOCk7CisJCX0KKworCQlzcmMgKz0gc3Jj X3N0cmlkZTsKKwkJZHN0ICs9IGRzdF9zdHJpZGU7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZHJt X2JsaXRfZnJvbV9yZ2I1NjUoY29uc3QgdTggKnNyYywKKwkJCQkgIHUzMiBzcmNfc3RyaWRlLAor CQkJCSAgdTMyIHNyY19icHAsCisJCQkJICB1OCAqZHN0LAorCQkJCSAgdTMyIGRzdF9zdHJpZGUs CisJCQkJICB1MzIgZHN0X2JwcCwKKwkJCQkgIHUzMiBkc3RfZm91cl9jYywKKwkJCQkgIHUzMiB3 aWR0aCwKKwkJCQkgIHUzMiBoZWlnaHQpCit7CisJdTMyIHZhbCwgaTsKKworCXdoaWxlIChoZWln aHQtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgd2lkdGg7ICsraSkgeworCQkJdmFsID0gZ2V0X3Vu YWxpZ25lZCgoY29uc3QgdTE2ICopJnNyY1tpICogc3JjX2JwcF0pOworCQkJc2RybV9wdXQoJmRz dFtpICogZHN0X2JwcF0sIGRzdF9mb3VyX2NjLAorCQkJCSAodmFsICYgMHhmODAwKSwKKwkJCQkg KHZhbCAmIDB4MDdlMCkgPDwgNSwKKwkJCQkgKHZhbCAmIDB4MDAxZikgPDwgMTEpOworCQl9CisK KwkJc3JjICs9IHNyY19zdHJpZGU7CisJCWRzdCArPSBkc3Rfc3RyaWRlOworCX0KK30KKworc3Rh dGljIHZvaWQgc2RybV9ibGl0X2xpbmVzKGNvbnN0IHU4ICpzcmMsCisJCQkgICAgdTMyIHNyY19z dHJpZGUsCisJCQkgICAgdTggKmRzdCwKKwkJCSAgICB1MzIgZHN0X3N0cmlkZSwKKwkJCSAgICB1 MzIgYnBwLAorCQkJICAgIHUzMiB3aWR0aCwKKwkJCSAgICB1MzIgaGVpZ2h0KQoreworCXUzMiBs ZW47CisKKwlsZW4gPSB3aWR0aCAqIGJwcDsKKworCXdoaWxlIChoZWlnaHQtLSkgeworCQltZW1j cHkoZHN0LCBzcmMsIGxlbik7CisJCXNyYyArPSBzcmNfc3RyaWRlOworCQlkc3QgKz0gZHN0X3N0 cmlkZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fYmxpdChzdHJ1Y3Qgc2RybV9odyAqaHcs CisJCSAgICAgIHN0cnVjdCBzZHJtX2ZiICpmYiwKKwkJICAgICAgdTMyIHgsCisJCSAgICAgIHUz MiB5LAorCQkgICAgICB1MzIgd2lkdGgsCisJCSAgICAgIHUzMiBoZWlnaHQpCit7CisJdTMyIHNy Y19icHAsIGRzdF9icHA7CisJdTggKnNyYywgKmRzdDsKKworCXNyYyA9IGZiLT5iby0+dm1hcHBp bmc7CisJc3JjX2JwcCA9IERJVl9ST1VORF9VUChmYi0+YmFzZS5iaXRzX3Blcl9waXhlbCwgOCk7 CisJc3JjICs9IGZiLT5iYXNlLm9mZnNldHNbMF0gKyB5ICogZmItPmJhc2UucGl0Y2hlc1swXSAr IHggKiBzcmNfYnBwOworCisJZHN0ID0gaHctPm1hcDsKKwlkc3RfYnBwID0gRElWX1JPVU5EX1VQ KGh3LT5icHAsIDgpOworCWRzdCArPSB5ICogaHctPnN0cmlkZSArIHggKiBkc3RfYnBwOworCisJ aWYgKGZiLT5iYXNlLnBpeGVsX2Zvcm1hdCA9PSBody0+Zm9ybWF0KSB7CisJCS8qIGlmIGZvcm1h dHMgYXJlIGlkZW50aWNhbCwgZG8gYSBsaW5lLWJ5LWxpbmUgY29weS4uICovCisJCXNkcm1fYmxp dF9saW5lcyhzcmMsIGZiLT5iYXNlLnBpdGNoZXNbMF0sCisJCQkJZHN0LCBody0+c3RyaWRlLCBz cmNfYnBwLCB3aWR0aCwgaGVpZ2h0KTsKKwl9IGVsc2UgeworCQkvKiAuLm90aGVyd2lzZSBjYWxs IHNsb3cgYmxpdC1mdW5jdGlvbiAqLworCQlzd2l0Y2ggKGZiLT5iYXNlLnBpeGVsX2Zvcm1hdCkg eworCQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4 ODoKKwkJCXNkcm1fYmxpdF9mcm9tX3hyZ2I4ODg4KHNyYywgZmItPmJhc2UucGl0Y2hlc1swXSwK KwkJCQkJCXNyY19icHAsIGRzdCwgaHctPnN0cmlkZSwKKwkJCQkJCWRzdF9icHAsIGh3LT5mb3Jt YXQsCisJCQkJCQl3aWR0aCwgaGVpZ2h0KTsKKwkJCWJyZWFrOworCQljYXNlIERSTV9GT1JNQVRf UkdCNTY1OgorCQkJc2RybV9ibGl0X2Zyb21fcmdiNTY1KHNyYywgZmItPmJhc2UucGl0Y2hlc1sw XSwKKwkJCQkJICAgICAgc3JjX2JwcCwgZHN0LCBody0+c3RyaWRlLAorCQkJCQkgICAgICBkc3Rf YnBwLCBody0+Zm9ybWF0LAorCQkJCQkgICAgICB3aWR0aCwgaGVpZ2h0KTsKKwkJCWJyZWFrOwor CQl9CisJfQorfQorCit2b2lkIHNkcm1fZGlydHkoc3RydWN0IHNkcm1fZmIgKmZiLCB1MzIgeCwg dTMyIHksIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sKKwlzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNk cm0gPSBmYi0+YmFzZS5kZXYtPmRldl9wcml2YXRlOworCisJaWYgKFdBUk5fT04oIWZiLT5iby0+ dm1hcHBpbmcpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZzZHJtLT5ody0+bG9jayk7CisJ aWYgKHNkcm0tPmh3LT5tYXApCisJCXNkcm1fYmxpdChzZHJtLT5odywgZmIsIHgsIHksIHdpZHRo LCBoZWlnaHQpOworCW11dGV4X3VubG9jaygmc2RybS0+aHctPmxvY2spOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZHJ2LmMgYi9kcml2ZXJzL2dw dS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5kNTY5MTIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Np bXBsZWRybS9zaW1wbGVkcm1fZHJ2LmMKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMTItMjAxNiBSZWQgSGF0LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAq IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1F ICI6ICIgZm10CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG9taWMu aD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc2ltcGxlZmIuaD4K KyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlICJzaW1wbGVkcm0uaCIKKworc3Rh dGljIHN0cnVjdCBkcm1fZHJpdmVyIHNkcm1fZHJtX2RyaXZlcjsKK3N0YXRpYyBERUZJTkVfTVVU RVgoc2RybV9sb2NrKTsKKworc3RhdGljIGludCBzZHJtX2h3X2lkZW50aWZ5KHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgc3RydWN0IHNpbXBsZWZiX3BsYXRmb3JtX2RhdGEg Km1vZGVwLAorCQkJICAgIHN0cnVjdCBzaW1wbGVmYl9mb3JtYXQgKmZvcm1hdHAsCisJCQkgICAg c3RydWN0IHJlc291cmNlICoqbWVtcCwKKwkJCSAgICB1MzIgKmJwcHApCit7CisJc3RhdGljIGNv bnN0IHN0cnVjdCBzaW1wbGVmYl9mb3JtYXQgdmFsaWRfZm9ybWF0c1tdID0gU0lNUExFRkJfRk9S TUFUUzsKKwlzdHJ1Y3Qgc2ltcGxlZmJfcGxhdGZvcm1fZGF0YSBwbSA9IHt9LCAqbW9kZSA9IHBk ZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5k ZXYub2Zfbm9kZTsKKwljb25zdCBzdHJ1Y3Qgc2ltcGxlZmJfZm9ybWF0ICpmb3JtYXQgPSBOVUxM OworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXVuc2lnbmVkIGludCBkZXB0aDsKKwlpbnQgciwg YnBwOworCXNpemVfdCBpOworCisJaWYgKCFtb2RlKSB7CisJCWlmICghbnApCisJCQlyZXR1cm4g LUVOT0RFVjsKKworCQltb2RlID0gJnBtOworCisJCXIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihu cCwgIndpZHRoIiwgJm1vZGUtPndpZHRoKTsKKwkJaWYgKHIgPj0gMCkKKwkJCXIgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihucCwgImhlaWdodCIsICZtb2RlLT5oZWlnaHQpOworCQlpZiAociA+PSAw KQorCQkJciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic3RyaWRlIiwgJm1vZGUtPnN0cmlk ZSk7CisJCWlmIChyID49IDApCisJCQlyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJm b3JtYXQiLAorCQkJCQkJICAgICZtb2RlLT5mb3JtYXQpOworCQlpZiAociA8IDApCisJCQlyZXR1 cm4gcjsKKwl9CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOworCWlmICghbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHZhbGlkX2Zvcm1hdHMpOyArK2kpIHsKKwkJaWYgKCFzdHJjbXAobW9k ZS0+Zm9ybWF0LCB2YWxpZF9mb3JtYXRzW2ldLm5hbWUpKSB7CisJCQlmb3JtYXQgPSAmdmFsaWRf Zm9ybWF0c1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3JtYXQpCisJCXJldHVy biAtRU5PREVWOworCisJc3dpdGNoIChmb3JtYXQtPmZvdXJjYykgeworCWNhc2UgRFJNX0ZPUk1B VF9SR0I1NjU6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTU1NToKKwljYXNlIERSTV9GT1JNQVRfUkdCODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdC ODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4 ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQVJH QjIxMDEwMTA6CisJCS8qCisJCSAqIFlvdSBtdXN0IGFkanVzdCBzZHJtX3B1dCgpIHdoZW5ldmVy IHlvdSBhZGQgYSBuZXcgZm9ybWF0CisJCSAqIGhlcmUsIG90aGVyd2lzZSwgYmxpdHRpbmcgb3Bl cmF0aW9ucyB3aWxsIG5vdCB3b3JrLgorCQkgKiBGdXJ0aGVybW9yZSwgaW5jbHVkZS9saW51eC9w bGF0Zm9ybV9kYXRhL3NpbXBsZWZiLmggbmVlZHMKKwkJICogdG8gYmUgYWRqdXN0ZWQgc28gdGhl IHBsYXRmb3JtLWRldmljZSBhY3R1YWxseSBhbGxvd3MgdGhpcworCQkgKiBmb3JtYXQuCisJCSAq LworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkcm1fZmJf Z2V0X2JwcF9kZXB0aChmb3JtYXQtPmZvdXJjYywgJmRlcHRoLCAmYnBwKTsKKwlpZiAoIWJwcCkK KwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHJlc291cmNlX3NpemUobWVtKSA8IG1vZGUtPnN0cmlk ZSAqIG1vZGUtPmhlaWdodCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKChicHAgKyA3KSAvIDgg KiBtb2RlLT53aWR0aCA+IG1vZGUtPnN0cmlkZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkqbW9k ZXAgPSAqbW9kZTsKKwkqZm9ybWF0cCA9ICpmb3JtYXQ7CisJKm1lbXAgPSBtZW07CisJKmJwcHAg PSBicHA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2RybV9odyAqc2RybV9od19u ZXcoY29uc3Qgc3RydWN0IHNpbXBsZWZiX3BsYXRmb3JtX2RhdGEgKm1vZGUsCisJCQkJICAgY29u c3Qgc3RydWN0IHNpbXBsZWZiX2Zvcm1hdCAqZm9ybWF0LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBy ZXNvdXJjZSAqbWVtLAorCQkJCSAgIHUzMiBicHApCit7CisJc3RydWN0IHNkcm1faHcgKmh3Owor CisJaHcgPSBremFsbG9jKHNpemVvZigqaHcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh3KQorCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW11dGV4X2luaXQoJmh3LT5sb2NrKTsKKwlody0+ d2lkdGggPSBtb2RlLT53aWR0aDsKKwlody0+aGVpZ2h0ID0gbW9kZS0+aGVpZ2h0OworCWh3LT5z dHJpZGUgPSBtb2RlLT5zdHJpZGU7CisJaHctPmJwcCA9IGJwcDsKKwlody0+Zm9ybWF0ID0gZm9y bWF0LT5mb3VyY2M7CisJaHctPmJhc2UgPSBtZW0tPnN0YXJ0OworCWh3LT5zaXplID0gcmVzb3Vy Y2Vfc2l6ZShtZW0pOworCisJcmV0dXJuIGh3OworfQorCitzdGF0aWMgc3RydWN0IHNkcm1faHcg KnNkcm1faHdfZnJlZShzdHJ1Y3Qgc2RybV9odyAqaHcpCit7CisJaWYgKCFodykKKwkJcmV0dXJu IE5VTEw7CisKKwlXQVJOX09OKGh3LT5tYXApOworCW11dGV4X2Rlc3Ryb3koJmh3LT5sb2NrKTsK KwlrZnJlZShodyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzZHJtX2h3X2Jp bmQoc3RydWN0IHNkcm1faHcgKmh3KQoreworCW11dGV4X2xvY2soJmh3LT5sb2NrKTsKKwlpZiAo IWh3LT5tYXApCisJCWh3LT5tYXAgPSBpb3JlbWFwX3djKGh3LT5iYXNlLCBody0+c2l6ZSk7CisJ bXV0ZXhfdW5sb2NrKCZody0+bG9jayk7CisKKwlyZXR1cm4gaHctPm1hcCA/IDAgOiAtRUlPOwor fQorCitzdGF0aWMgdm9pZCBzZHJtX2h3X3VuYmluZChzdHJ1Y3Qgc2RybV9odyAqaHcpCit7CisJ aWYgKCFodykKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaHctPmxvY2spOworCWlmIChody0+ bWFwKSB7CisJCWlvdW5tYXAoaHctPm1hcCk7CisJCWh3LT5tYXAgPSBOVUxMOworCX0KKwltdXRl eF91bmxvY2soJmh3LT5sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBzZHJtX2RldmljZSAqc2Ry bV9kZXZpY2VfZnJlZShzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0pCit7CisJaWYgKCFzZHJtKQor CQlyZXR1cm4gTlVMTDsKKworCVdBUk5fT04oYXRvbWljX3JlYWQoJnNkcm0tPm5fdXNlZCkgIT0g SU5UX01JTik7CisJc2RybS0+aHcgPSBzZHJtX2h3X2ZyZWUoc2RybS0+aHcpOworCWRybV9kZXZf dW5yZWYoc2RybS0+ZGRldik7CisJa2ZyZWUoc2RybSk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIHN0cnVjdCBzZHJtX2RldmljZSAqc2RybV9kZXZpY2VfbmV3KHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCisJCQkJCSAgIHN0cnVjdCBzZHJtX2h3ICpodykKK3sKKwlzdHJ1Y3Qg c2RybV9kZXZpY2UgKnNkcm07CisJaW50IHI7CisKKwlzZHJtID0ga3phbGxvYyhzaXplb2YoKnNk cm0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkcm0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCisJYXRvbWljX3NldCgmc2RybS0+bl91c2VkLCBJTlRfTUlOKTsKKworCXNkcm0tPmRkZXYg PSBkcm1fZGV2X2FsbG9jKCZzZHJtX2RybV9kcml2ZXIsICZwZGV2LT5kZXYpOworCWlmICghc2Ry bS0+ZGRldikgeworCQlyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzZHJtLT5k ZGV2LT5kZXZfcHJpdmF0ZSA9IHNkcm07CisJc2RybS0+aHcgPSBodzsKKworCXJldHVybiBzZHJt OworCitlcnJvcjoKKwlzZHJtX2RldmljZV9mcmVlKHNkcm0pOworCXJldHVybiBFUlJfUFRSKHIp OworfQorCitzdGF0aWMgdm9pZCBzZHJtX2RldmljZV91bmJpbmQoc3RydWN0IHNkcm1fZGV2aWNl ICpzZHJtKQoreworCWlmIChzZHJtKSB7CisJCXNkcm1fa21zX3VuYmluZChzZHJtKTsKKwkJc2Ry bV9od191bmJpbmQoc2RybS0+aHcpOworCQlzZHJtX29mX3VuYmluZChzZHJtKTsKKwl9Cit9CisK K3N0YXRpYyBpbnQgc2RybV9kZXZpY2VfYmluZChzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0pCit7 CisJaW50IHI7CisKKwlyID0gc2RybV9vZl9iaW5kKHNkcm0pOworCWlmIChyIDwgMCkKKwkJZ290 byBlcnJvcjsKKworCXIgPSBzZHJtX2h3X2JpbmQoc2RybS0+aHcpOworCWlmIChyIDwgMCkKKwkJ Z290byBlcnJvcjsKKworCXIgPSBzZHJtX2ttc19iaW5kKHNkcm0pOworCWlmIChyIDwgMCkKKwkJ Z290byBlcnJvcjsKKworCXJldHVybiAwOworCitlcnJvcjoKKwlzZHJtX2RldmljZV91bmJpbmQo c2RybSk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgc2RybV9kZXZpY2VfYWNxdWlyZShz dHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0pCit7CisJcmV0dXJuIChzZHJtICYmIGF0b21pY19pbmNf dW5sZXNzX25lZ2F0aXZlKCZzZHJtLT5uX3VzZWQpKQorCQk/IDAgOiAtRU5PREVWOworfQorCitz dGF0aWMgdm9pZCBzZHJtX2RldmljZV9yZWxlYXNlKHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSkK K3sKKwlpZiAoc2RybSAmJiBhdG9taWNfZGVjX3JldHVybigmc2RybS0+bl91c2VkKSA9PSBJTlRf TUlOKSB7CisJCXNkcm1fZGV2aWNlX3VuYmluZChzZHJtKTsKKwkJc2RybV9kZXZpY2VfZnJlZShz ZHJtKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2RybV9mb3Bfb3BlbihzdHJ1Y3QgaW5vZGUgKmlu b2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlp bnQgcjsKKworCW11dGV4X2xvY2soJnNkcm1fbG9jayk7CisJciA9IGRybV9vcGVuKGlub2RlLCBm aWxlKTsKKwlpZiAociA+PSAwKSB7CisJCWRkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCXIg PSBzZHJtX2RldmljZV9hY3F1aXJlKGRkZXYtPmRldl9wcml2YXRlKTsKKwkJaWYgKHIgPCAwKQor CQkJZHJtX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCX0KKwltdXRleF91bmxvY2soJnNkcm1fbG9j ayk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBzZHJtX2ZvcF9yZWxlYXNlKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fZmlsZSAq ZGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBk ZmlsZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0gPSBkZGV2LT5kZXZf cHJpdmF0ZTsKKwlpbnQgcmVzOworCisJcmVzID0gZHJtX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwor CXNkcm1fZGV2aWNlX3JlbGVhc2Uoc2RybSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGlu dCBzZHJtX2ZvcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZmlsZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7CisJc3RydWN0IGRybV92bWFfb2Zmc2V0X25vZGUgKm5v ZGU7CisJaW50IHI7CisKKwlkcm1fdm1hX29mZnNldF9sb2NrX2xvb2t1cChkZXYtPnZtYV9vZmZz ZXRfbWFuYWdlcik7CisJbm9kZSA9IGRybV92bWFfb2Zmc2V0X2V4YWN0X2xvb2t1cF9sb2NrZWQo ZGV2LT52bWFfb2Zmc2V0X21hbmFnZXIsCisJCQkJCQkgIHZtYS0+dm1fcGdvZmYsCisJCQkJCQkg IHZtYV9wYWdlcyh2bWEpKTsKKwlpZiAobGlrZWx5KG5vZGUpKSB7CisJCW9iaiA9IGNvbnRhaW5l cl9vZihub2RlLCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QsIHZtYV9ub2RlKTsKKwkJaWYgKCFrcmVm X2dldF91bmxlc3NfemVybygmb2JqLT5yZWZjb3VudCkpCisJCQlvYmogPSBOVUxMOworCX0KKwlk cm1fdm1hX29mZnNldF91bmxvY2tfbG9va3VwKGRldi0+dm1hX29mZnNldF9tYW5hZ2VyKTsKKwor CWlmICghb2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZHJtX3ZtYV9ub2RlX2lzX2Fs bG93ZWQobm9kZSwgZGZpbGUpKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9j a2VkKG9iaik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCWlmICh2bWEtPnZtX2ZpbGUpCisJ CWZwdXQodm1hLT52bV9maWxlKTsKKwl2bWEtPnZtX2ZpbGUgPSBnZXRfZmlsZShvYmotPmZpbHAp OworCXZtYS0+dm1fcGdvZmYgPSAwOworCisJciA9IG9iai0+ZmlscC0+Zl9vcC0+bW1hcChvYmot PmZpbHAsIHZtYSk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsK KwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBzZHJtX3NpbXBsZWZiX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNpbXBsZWZiX3BsYXRmb3JtX2RhdGEg aHdfbW9kZTsKKwlzdHJ1Y3Qgc2ltcGxlZmJfZm9ybWF0IGh3X2Zvcm1hdDsKKwlzdHJ1Y3Qgc2Ry bV9kZXZpY2UgKnNkcm0gPSBOVUxMOworCXN0cnVjdCBzZHJtX2h3ICpodyA9IE5VTEw7CisJc3Ry dWN0IHJlc291cmNlICpod19tZW07CisJdTMyIGh3X2JwcDsKKwlpbnQgcjsKKworCXIgPSBzZHJt X2h3X2lkZW50aWZ5KHBkZXYsICZod19tb2RlLCAmaHdfZm9ybWF0LCAmaHdfbWVtLCAmaHdfYnBw KTsKKwlpZiAociA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlodyA9IHNkcm1faHdfbmV3KCZod19t b2RlLCAmaHdfZm9ybWF0LCBod19tZW0sIGh3X2JwcCk7CisJaWYgKElTX0VSUihodykpIHsKKwkJ ciA9IFBUUl9FUlIoaHcpOworCQlodyA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc2Ry bSA9IHNkcm1fZGV2aWNlX25ldyhwZGV2LCBodyk7CisJaWYgKElTX0VSUihzZHJtKSkgeworCQly ID0gUFRSX0VSUihzZHJtKTsKKwkJc2RybSA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCWh3 ID0gTlVMTDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzZHJtKTsKKworCXIgPSBzZHJt X2RldmljZV9iaW5kKHNkcm0pOworCWlmIChyIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIG1h cmsgZGV2aWNlIGFzIGVuYWJsZWQgYW5kIGFjcXVpcmUgYnVzIHJlZiAqLworCVdBUk5fT04oYXRv bWljX3JlYWQoJnNkcm0tPm5fdXNlZCkgIT0gSU5UX01JTik7CisJYXRvbWljX3NldCgmc2RybS0+ bl91c2VkLCAxKTsKKworCXIgPSBkcm1fZGV2X3JlZ2lzdGVyKHNkcm0tPmRkZXYsIDApOworCWlm IChyIDwgMCkgeworCQkvKiBtYXJrIGRldmljZSBhcyBkaXNhYmxlZCBhbmQgZHJvcCBidXMgcmVm ICovCisJCVdBUk5fT04oYXRvbWljX2FkZF9yZXR1cm4oSU5UX01JTiwgJnNkcm0tPm5fdXNlZCkg IT0gSU5UX01JTik7CisJCXNkcm1fZGV2aWNlX3JlbGVhc2Uoc2RybSk7CisJCXJldHVybiByOwor CX0KKworCWRldl9pbmZvKHNkcm0tPmRkZXYtPmRldiwgImluaXRpYWxpemVkICVzIG9uIG1pbm9y ICVkXG4iLAorCQkgc2RybS0+ZGRldi0+ZHJpdmVyLT5uYW1lLCBzZHJtLT5kZGV2LT5wcmltYXJ5 LT5pbmRleCk7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJc2RybV9kZXZpY2VfdW5iaW5kKHNk cm0pOworCXNkcm1fZGV2aWNlX2ZyZWUoc2RybSk7CisJc2RybV9od19mcmVlKGh3KTsKKwlyZXR1 cm4gcjsKK30KKworc3RhdGljIGludCBzZHJtX3NpbXBsZWZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzZHJtX2RldmljZSAqc2RybSA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogbWFyayBkZXZpY2UgYXMgZGlzYWJsZWQgKi8KKwlh dG9taWNfYWRkKElOVF9NSU4sICZzZHJtLT5uX3VzZWQpOworCXNkcm1faHdfdW5iaW5kKHNkcm0t Pmh3KTsKKworCW11dGV4X2xvY2soJnNkcm1fbG9jayk7CisJZHJtX2Rldl91bnJlZ2lzdGVyKHNk cm0tPmRkZXYpOworCXNkcm1fZGV2aWNlX3JlbGVhc2Uoc2RybSk7CisJbXV0ZXhfdW5sb2NrKCZz ZHJtX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIHNkcm1fZHJtX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9w ZW4gPSBzZHJtX2ZvcF9vcGVuLAorCS5yZWxlYXNlID0gc2RybV9mb3BfcmVsZWFzZSwKKwkubW1h cCA9IHNkcm1fZm9wX21tYXAsCisJLnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFk LAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJ LmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkubGxzZWVrID0gbm9v cF9sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgc2RybV9kcm1fZHJpdmVy ID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfCBE UklWRVJfQVRPTUlDLAorCS5mb3BzID0gJnNkcm1fZHJtX2ZvcHMsCisKKwkuZ2VtX2ZyZWVfb2Jq ZWN0ID0gc2RybV9ib19mcmVlLAorCisJLmR1bWJfY3JlYXRlID0gc2RybV9kdW1iX2NyZWF0ZSwK KwkuZHVtYl9tYXBfb2Zmc2V0ID0gc2RybV9kdW1iX21hcF9vZmZzZXQsCisJLmR1bWJfZGVzdHJv eSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCisJLm5hbWUgPSAic2ltcGxlZHJtIiwKKwkuZGVz YyA9ICJTaW1wbGUgZmlybXdhcmUgZnJhbWVidWZmZXIgRFJNIGRyaXZlciIsCisJLmRhdGUgPSAi MjAxNjA5MDEiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2RybV9z aW1wbGVmYl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWZyYW1lYnVm ZmVyIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzZHJtX3NpbXBsZWZi X29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2RybV9zaW1wbGVm Yl9kcml2ZXIgPSB7CisJLnByb2JlID0gc2RybV9zaW1wbGVmYl9wcm9iZSwKKwkucmVtb3ZlID0g c2RybV9zaW1wbGVmYl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic2ltcGxlLWZy YW1lYnVmZmVyIiwKKwkJLm1vZF9uYW1lID0gS0JVSUxEX01PRE5BTUUsCisJCS5vd25lciA9IFRI SVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBzZHJtX3NpbXBsZWZiX29mX21hdGNoLAor CX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZHJtX2luaXQodm9pZCkKK3sKKwlpbnQgcjsK KworCXIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNkcm1fc2ltcGxlZmJfZHJpdmVyKTsK KwlpZiAociA8IDApCisJCXJldHVybiByOworCisJc2RybV9vZl9ib290c3RyYXAoKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkcm1fZXhpdCh2b2lkKQoreworCXBsYXRm b3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZHJtX3NpbXBsZWZiX2RyaXZlcik7Cit9CisKK21vZHVs ZV9pbml0KHNkcm1faW5pdCk7Cittb2R1bGVfZXhpdChzZHJtX2V4aXQpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTaW1wbGUgZmlybXdhcmUgZnJhbWVidWZm ZXIgRFJNIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaW1wbGUtZnJhbWVidWZm ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZ2VtLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhYWU2ZQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2dlbS5jCkBAIC0wLDAgKzEsMTA5IEBA CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgUmVkIEhhdCwgSW5jLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIK KyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10 KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1h bGxvYy5oPgorI2luY2x1ZGUgInNpbXBsZWRybS5oIgorCitzdHJ1Y3Qgc2RybV9ibyAqc2RybV9i b19uZXcoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBz ZHJtX2JvICpibzsKKworCVdBUk5fT04oIXNpemUgfHwgKHNpemUgJiB+UEFHRV9NQVNLKSAhPSAw KTsKKworCWJvID0ga3phbGxvYyhzaXplb2YoKmJvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibykK KwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZHJtX2dlbV9vYmplY3RfaW5pdChkZGV2LCAmYm8tPmJh c2UsIHNpemUpKSB7CisJCWtmcmVlKGJvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJu IGJvOworfQorCit2b2lkIHNkcm1fYm9fZnJlZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRvYmop Cit7CisJc3RydWN0IHNkcm1fYm8gKmJvID0gY29udGFpbmVyX29mKGRvYmosIHN0cnVjdCBzZHJt X2JvLCBiYXNlKTsKKworCWlmIChiby0+dm1hcHBpbmcpCisJCXZ1bm1hcChiby0+dm1hcHBpbmcp OworCWlmIChiby0+cGFnZXMpCisJCWRybV9nZW1fcHV0X3BhZ2VzKGRvYmosIGJvLT5wYWdlcywg ZmFsc2UsIGZhbHNlKTsKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKGRvYmopOworCWtmcmVlKGJv KTsKK30KKworaW50IHNkcm1fYm9fdm1hcChzdHJ1Y3Qgc2RybV9ibyAqYm8pCit7CisJaW50IHI7 CisKKwlpZiAoIWJvLT5wYWdlcykgeworCQliby0+cGFnZXMgPSBkcm1fZ2VtX2dldF9wYWdlcygm Ym8tPmJhc2UpOworCQlpZiAoSVNfRVJSKGJvLT5wYWdlcykpIHsKKwkJCXIgPSBQVFJfRVJSKGJv LT5wYWdlcyk7CisJCQliby0+cGFnZXMgPSBOVUxMOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisK KwlpZiAoIWJvLT52bWFwcGluZykgeworCQliby0+dm1hcHBpbmcgPSB2bWFwKGJvLT5wYWdlcywg Ym8tPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRSwgMCwKKwkJCQkgICAgUEFHRV9LRVJORUwpOworCQlp ZiAoIWJvLT52bWFwcGluZykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOwor fQorCitpbnQgc2RybV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLAorCQkgICAg IHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LAorCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVf ZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3Qgc2RybV9ibyAqYm87CisJaW50IHI7CisKKwkvKiBvdmVy ZmxvdyBjaGVja3MgYXJlIGRvbmUgYnkgRFJNIGNvcmUgKi8KKwlhcmdzLT5waXRjaCA9IChhcmdz LT5icHAgKyA3KSAvIDggKiBhcmdzLT53aWR0aDsKKwlhcmdzLT5zaXplID0gUEFHRV9BTElHTihh cmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodCk7CisKKwlibyA9IHNkcm1fYm9fbmV3KGRkZXYsIGFy Z3MtPnNpemUpOworCWlmICghYm8pCisJCXJldHVybiAtRU5PTUVNOworCisJciA9IGRybV9nZW1f aGFuZGxlX2NyZWF0ZShkZmlsZSwgJmJvLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmYm8tPmJhc2UpOworCXJldHVybiByOworfQor CitpbnQgc2RybV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpkZmlsZSwKKwkJCSBz dHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKKwkJCSB1aW50MzJfdCBoYW5kbGUsCisJCQkgdWludDY0 X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRvYmo7CisJaW50IHI7CisK Kwlkb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRmaWxlLCBoYW5kbGUpOworCWlmICghZG9i aikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQo ZG9iaik7CisJaWYgKHIgPj0gMCkKKwkJKm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRk cigmZG9iai0+dm1hX25vZGUpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2Vk KGRvYmopOworCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NpbXBs ZWRybS9zaW1wbGVkcm1fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRy bV9rbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDEwMWM5Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fa21zLmMK QEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBSZWQgSGF0 LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgor ICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQp IEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4K KyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgv ZXJyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5o PgorI2luY2x1ZGUgInNpbXBsZWRybS5oIgorCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc2RybV9m b3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwK KwlEUk1fRk9STUFUX1hSR0I4ODg4LAorfTsKKworc3RhdGljIGludCBzZHJtX2Nvbm5fZ2V0X21v ZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBzZHJtX2RldmljZSAq c2RybSA9IGNvbm4tPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGU7CisKKwltb2RlID0gZHJtX2N2dF9tb2RlKHNkcm0tPmRkZXYsIHNkcm0tPmh3LT53aWR0 aCwgc2RybS0+aHctPmhlaWdodCwKKwkJCSAgICA2MCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJ aWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKworCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RS SVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2RlX3NldF9uYW1lKG1vZGUp OworCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubiwgbW9kZSk7CisKKwlyZXR1cm4gMTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBzZHJtX2Nvbm5f aGZ1bmNzID0geworCS5nZXRfbW9kZXMJPSBzZHJtX2Nvbm5fZ2V0X21vZGVzLAorCS5iZXN0X2Vu Y29kZXIJPSBkcm1fYXRvbWljX2hlbHBlcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgZW51 bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzZHJtX2Nvbm5fZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCS8qCisJICogV2Ugc2ltdWxhdGUg YW4gYWx3YXlzIGNvbm5lY3RlZCBtb25pdG9yLiBzaW1wbGUtZmIgZG9lc24ndAorCSAqIHByb3Zp ZGUgYW55IHdheSB0byBkZXRlY3Qgd2hldGhlciB0aGUgY29ubmVjdG9yIGlzIGFjdGl2ZS4gSGVu Y2UsCisJICogc2lnbmFsIERSTSBjb3JlIHRoYXQgaXQgaXMgYWx3YXlzIGNvbm5lY3RlZC4KKwkg Ki8KKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBzZHJtX2Nvbm5fb3BzID0geworCS5kcG1zCQkJ PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkucmVzZXQJCQk9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuZGV0ZWN0CQkJPSBzZHJtX2Nvbm5fZGV0ZWN0 LAorCS5maWxsX21vZGVzCQk9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2Rl cywKKwkuZGVzdHJveQkJPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCisJLmF0b21pY19kdXBsaWNh dGVfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAor CS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0 cm95X3N0YXRlLAorfTsKKworc3RhdGljIHZvaWQgc2RybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50 KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlpZiAoY3J0Yy0+c3RhdGUgJiYgY3J0Yy0+c3Rh dGUtPmV2ZW50KSB7CisJCXNwaW5fbG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJ CWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7CisJ CXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwkJY3J0Yy0+c3RhdGUt PmV2ZW50ID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgc2RybV9kaXNwbGF5X3BpcGVfdXBkYXRlKHN0 cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKKwkJCSAgICAgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmRm YiA9IHBpcGUtPnBsYW5lLnN0YXRlLT5mYjsKKwlzdHJ1Y3Qgc2RybV9mYiAqZmI7CisKKwlzZHJt X2NydGNfc2VuZF92YmxhbmtfZXZlbnQoJnBpcGUtPmNydGMpOworCisJaWYgKGRmYikgeworCQlm YiA9IGNvbnRhaW5lcl9vZihkZmIsIHN0cnVjdCBzZHJtX2ZiLCBiYXNlKTsKKwkJcGlwZS0+cGxh bmUuZmIgPSBkZmI7CisJCXNkcm1fZGlydHkoZmIsIDAsIDAsIGRmYi0+d2lkdGgsIGRmYi0+aGVp Z2h0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fZGlzcGxheV9waXBlX2VuYWJsZShzdHJ1 Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc2RybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCZw aXBlLT5jcnRjKTsKK30KKworc3RhdGljIHZvaWQgc2RybV9kaXNwbGF5X3BpcGVfZGlzYWJsZShz dHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUpCit7CisJc2RybV9jcnRjX3NlbmRf dmJsYW5rX2V2ZW50KCZwaXBlLT5jcnRjKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f c2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBzZHJtX3BpcGVfZnVuY3MgPSB7CisJLnVwZGF0ZQkJ PSBzZHJtX2Rpc3BsYXlfcGlwZV91cGRhdGUsCisJLmVuYWJsZQkJPSBzZHJtX2Rpc3BsYXlfcGlw ZV9lbmFibGUsCisJLmRpc2FibGUJPSBzZHJtX2Rpc3BsYXlfcGlwZV9kaXNhYmxlLAorfTsKKwor c3RhdGljIGludCBzZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZGZiLAorCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLAorCQkJCSB1bnNpZ25lZCBpbnQgKmhh bmRsZSkKK3sKKwlzdHJ1Y3Qgc2RybV9mYiAqZmIgPSBjb250YWluZXJfb2YoZGZiLCBzdHJ1Y3Qg c2RybV9mYiwgYmFzZSk7CisKKwlyZXR1cm4gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGRmaWxlLCAm ZmItPmJvLT5iYXNlLCBoYW5kbGUpOworfQorCitzdGF0aWMgaW50IHNkcm1fZmJfZGlydHkoc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZGZiLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZGZpbGUsCisJ CQkgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJIHVuc2lnbmVkIGludCBjb2xvciwKKwkJCSBzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCisJCQkgdW5zaWduZWQgaW50IG5fY2xpcHMpCit7CisJ c3RydWN0IHNkcm1fZmIgKmZiID0gY29udGFpbmVyX29mKGRmYiwgc3RydWN0IHNkcm1fZmIsIGJh c2UpOworCXN0cnVjdCBzZHJtX2RldmljZSAqc2RybSA9IGRmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsK Kwl1bnNpZ25lZCBpbnQgaTsKKworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKHNkcm0tPmRkZXYpOwor CWlmIChkZmIgPT0gc2RybS0+cGlwZS5wbGFuZS5mYikgeworCQlpZiAoIWNsaXBzIHx8ICFuX2Ns aXBzKSB7CisJCQlzZHJtX2RpcnR5KGZiLCAwLCAwLCBkZmItPndpZHRoLCBkZmItPmhlaWdodCk7 CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbl9jbGlwczsgaSsrKSB7CisJCQkJaWYg KGNsaXBzW2ldLngxID4gY2xpcHNbaV0ueDIgfHwKKwkJCQkgICAgY2xpcHNbaV0ueDIgPiBkZmIt PndpZHRoIHx8CisJCQkJICAgIGNsaXBzW2ldLnkxID4gY2xpcHNbaV0ueTIgfHwKKwkJCQkgICAg Y2xpcHNbaV0ueTIgPiBkZmItPmhlaWdodCkKKwkJCQkJY29udGludWU7CisKKwkJCQlzZHJtX2Rp cnR5KGZiLCBjbGlwc1tpXS54MSwgY2xpcHNbaV0ueTEsCisJCQkJCSAgIGNsaXBzW2ldLngyIC0g Y2xpcHNbaV0ueDEsCisJCQkJCSAgIGNsaXBzW2ldLnkyIC0gY2xpcHNbaV0ueTEpOworCQkJfQor CQl9CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoc2RybS0+ZGRldik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgc2RybV9mYl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmRmYikKK3sKKwlzdHJ1Y3Qgc2RybV9mYiAqZmIgPSBjb250YWluZXJfb2YoZGZiLCBzdHJ1 Y3Qgc2RybV9mYiwgYmFzZSk7CisKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChkZmIpOworCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZmYi0+Ym8tPmJhc2UpOworCWtmcmVl KGZiKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3Mgc2Ry bV9mYl9vcHMgPSB7CisJLmNyZWF0ZV9oYW5kbGUJCT0gc2RybV9mYl9jcmVhdGVfaGFuZGxlLAor CS5kaXJ0eQkJCT0gc2RybV9mYl9kaXJ0eSwKKwkuZGVzdHJveQkJPSBzZHJtX2ZiX2Rlc3Ryb3ks Cit9OworCitzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCitzZHJtX2ZiX2NyZWF0ZShz dHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKKwkgICAgICAgc3RydWN0IGRybV9maWxlICpkZmlsZSwK KwkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKK3sKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmRvYmo7CisJc3RydWN0IHNkcm1fZmIgKmZiID0gTlVMTDsKKwlzdHJ1 Y3Qgc2RybV9ibyAqYm87CisJaW50IHI7CisKKwlpZiAoY21kLT5mbGFncykKKwkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7CisKKwlkb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRmaWxlLCBj bWQtPmhhbmRsZXNbMF0pOworCWlmICghZG9iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 CisKKwlibyA9IGNvbnRhaW5lcl9vZihkb2JqLCBzdHJ1Y3Qgc2RybV9ibywgYmFzZSk7CisKKwly ID0gc2RybV9ib192bWFwKGJvKTsKKwlpZiAociA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlmYiA9 IGt6YWxsb2Moc2l6ZW9mKCpmYiksIEdGUF9LRVJORUwpOworCWlmICghZmIpIHsKKwkJciA9IC1F Tk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJZmItPmJvID0gYm87CisJZHJtX2hlbHBlcl9t b2RlX2ZpbGxfZmJfc3RydWN0KCZmYi0+YmFzZSwgY21kKTsKKworCXIgPSBkcm1fZnJhbWVidWZm ZXJfaW5pdChkZGV2LCAmZmItPmJhc2UsICZzZHJtX2ZiX29wcyk7CisJaWYgKHIgPCAwKQorCQln b3RvIGVycm9yOworCisJRFJNX0RFQlVHX0tNUygiW0ZCOiVkXSBwaXhlbF9mb3JtYXQ6ICVzXG4i LCBmYi0+YmFzZS5iYXNlLmlkLAorCQkgICAgICBkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5iYXNl LnBpeGVsX2Zvcm1hdCkpOworCisJcmV0dXJuICZmYi0+YmFzZTsKKworZXJyb3I6CisJa2ZyZWUo ZmIpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGRvYmopOworCXJldHVy biBFUlJfUFRSKHIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19m dW5jcyBzZHJtX21vZGVfY29uZmlnX29wcyA9IHsKKwkuZmJfY3JlYXRlCQk9IHNkcm1fZmJfY3Jl YXRlLAorCS5hdG9taWNfY2hlY2sJCT0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21p Y19jb21taXQJCT0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAorfTsKKworaW50IHNkcm1fa21z X2JpbmQoc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uID0gJnNkcm0tPmNvbm47CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBzZHJtLT5k ZGV2OworCWludCByOworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZGRldik7CisJZGRldi0+bW9k ZV9jb25maWcubWluX3dpZHRoID0gc2RybS0+aHctPndpZHRoOworCWRkZXYtPm1vZGVfY29uZmln Lm1heF93aWR0aCA9IHNkcm0tPmh3LT53aWR0aDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5taW5faGVp Z2h0ID0gc2RybS0+aHctPmhlaWdodDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0g c2RybS0+aHctPmhlaWdodDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGggPSBz ZHJtLT5ody0+YnBwOworCWRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJnNkcm1fbW9kZV9jb25m aWdfb3BzOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uLCAmc2RybV9jb25uX2hmdW5j cyk7CisKKwlyID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRkZXYsIGNvbm4sICZzZHJtX2Nvbm5fb3Bz LAorCQkJICAgICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKTsKKwlpZiAociA8IDApCisJ CWdvdG8gZXJyb3I7CisKKwlyID0gZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfaW5pdChkZGV2LCAm c2RybS0+cGlwZSwgJnNkcm1fcGlwZV9mdW5jcywKKwkJCQkJIHNkcm1fZm9ybWF0cywKKwkJCQkJ IEFSUkFZX1NJWkUoc2RybV9mb3JtYXRzKSwgY29ubik7CisJaWYgKHIgPCAwKQorCQlnb3RvIGVy cm9yOworCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRkZXYpOworCXJldHVybiAwOworCitlcnJv cjoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZGV2KTsKKwlyZXR1cm4gcjsKK30KKwordm9p ZCBzZHJtX2ttc191bmJpbmQoc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKQoreworCWlmIChzZHJt LT5kZGV2LT5tb2RlX2NvbmZpZy5mdW5jcykKKwkJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoc2Ry bS0+ZGRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBs ZWRybV9vZi5jIGIvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fb2YuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjIwMDAwCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fb2YuYwpAQCAtMCwwICsxLDI2 NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFJlZCBIYXQsIEluYy4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgcHJfZm10 KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUg PGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxs aW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSAic2ltcGxlZHJtLmgiCisKKyNpZmRlZiBDT05GSUdfQ09NTU9OX0NMSworCitzdGF0aWMg aW50IHNkcm1fb2ZfYmluZF9jbG9ja3Moc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtLAorCQkJICAg ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGNsayAqY2xvY2s7CisJc2l6 ZV90IGksIG47CisJaW50IHI7CisKKwluID0gb2ZfY2xrX2dldF9wYXJlbnRfY291bnQobnApOwor CWlmIChuIDwgMSkKKwkJcmV0dXJuIDA7CisKKwlzZHJtLT5jbGtzID0ga2NhbGxvYyhuLCBzaXpl b2YoKnNkcm0tPmNsa3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkcm0tPmNsa3MpCisJCXJldHVy biAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworCQljbG9jayA9IG9mX2Ns a19nZXQobnAsIGkpOworCQlpZiAoIUlTX0VSUihjbG9jaykpIHsKKwkJCXNkcm0tPmNsa3Nbc2Ry bS0+bl9jbGtzKytdID0gY2xvY2s7CisJCX0gZWxzZSBpZiAoUFRSX0VSUihjbG9jaykgPT0gLUVQ Uk9CRV9ERUZFUikgeworCQkJciA9IC1FUFJPQkVfREVGRVI7CisJCQlnb3RvIGVycm9yOworCQl9 IGVsc2UgeworCQkJZGV2X2VycihzZHJtLT5kZGV2LT5kZXYsICJjYW5ub3QgZmluZCBjbG9jayAl enU6ICVsZFxuIiwKKwkJCQlpLCBQVFJfRVJSKGNsb2NrKSk7CisJCX0KKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgc2RybS0+bl9jbGtzOyArK2kpIHsKKwkJaWYgKCFzZHJtLT5jbGtzW2ldKQorCQkJ Y29udGludWU7CisKKwkJciA9IGNsa19wcmVwYXJlX2VuYWJsZShzZHJtLT5jbGtzW2ldKTsKKwkJ aWYgKHIgPCAwKSB7CisJCQlkZXZfZXJyKHNkcm0tPmRkZXYtPmRldiwKKwkJCQkiY2Fubm90IGZp bmQgY2xvY2sgJXp1OiAlZFxuIiwgaSwgcik7CisJCQljbGtfcHV0KHNkcm0tPmNsa3NbaV0pOwor CQkJc2RybS0+Y2xrc1tpXSA9IE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3I6 CisJZm9yIChpID0gMDsgaSA8IHNkcm0tPm5fY2xrczsgKytpKQorCQljbGtfcHV0KHNkcm0tPmNs a3NbaV0pOworCWtmcmVlKHNkcm0tPmNsa3MpOworCXNkcm0tPmNsa3MgPSBOVUxMOworCXNkcm0t Pm5fY2xrcyA9IDA7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fb2ZfdW5iaW5k X2Nsb2NrcyhzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0pCit7CisJc2l6ZV90IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgc2RybS0+bl9jbGtzOyArK2kpIHsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KHNkcm0tPmNsa3NbaV0pOworCQljbGtfcHV0KHNkcm0tPmNsa3NbaV0pOworCX0KKworCWtmcmVl KHNkcm0tPmNsa3MpOworCXNkcm0tPmNsa3MgPSBOVUxMOworCXNkcm0tPm5fY2xrcyA9IDA7Cit9 CisKKyNlbHNlIC8qIENPTkZJR19DT01NT05fQ0xLICovCisKK3N0YXRpYyBpbnQgc2RybV9vZl9i aW5kX2Nsb2NrcyhzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0sCisJCQkgICAgICAgc3RydWN0IGRl dmljZV9ub2RlICpucCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RybV9vZl91 bmJpbmRfY2xvY2tzKHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSkKK3sKK30KKworI2VuZGlmIC8q IENPTkZJR19DT01NT05fQ0xLICovCisKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisKK3N0YXRp YyBpbnQgc2RybV9vZl9iaW5kX3JlZ3VsYXRvcnMoc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtLAor CQkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVn dWxhdG9yOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwljaGFyICpwLCAqbmFtZTsKKwlzaXpl X3QgaSwgbjsKKwlpbnQgcjsKKworCW4gPSAwOworCWZvcl9lYWNoX3Byb3BlcnR5X29mX25vZGUo bnAsIHByb3ApIHsKKwkJcCA9IHN0cnN0cihwcm9wLT5uYW1lLCAiLXN1cHBseSIpOworCQlpZiAo cCAmJiBwICE9IHByb3AtPm5hbWUpCisJCQkrK247CisJfQorCisJaWYgKG4gPCAxKQorCQlyZXR1 cm4gMDsKKworCXNkcm0tPnJlZ3VsYXRvcnMgPSBrY2FsbG9jKG4sIHNpemVvZigqc2RybS0+cmVn dWxhdG9ycyksIEdGUF9LRVJORUwpOworCWlmICghc2RybS0+cmVndWxhdG9ycykKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlmb3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKG5wLCBwcm9wKSB7CisJCXAg PSBzdHJzdHIocHJvcC0+bmFtZSwgIi1zdXBwbHkiKTsKKwkJaWYgKCFwIHx8IHAgPT0gcHJvcC0+ bmFtZSkKKwkJCWNvbnRpbnVlOworCisJCW5hbWUgPSBrc3RybmR1cChwcm9wLT5uYW1lLCBwIC0g cHJvcC0+bmFtZSwgR0ZQX1RFTVBPUkFSWSk7CisJCWlmICghbmFtZSkKKwkJCWNvbnRpbnVlOwor CisJCXJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoc2RybS0+ZGRldi0+ZGV2LCBu YW1lKTsKKwkJa2ZyZWUobmFtZSk7CisKKwkJaWYgKCFJU19FUlIocmVndWxhdG9yKSkgeworCQkJ c2RybS0+cmVndWxhdG9yc1tzZHJtLT5uX3JlZ3VsYXRvcnMrK10gPSByZWd1bGF0b3I7CisJCX0g ZWxzZSBpZiAoUFRSX0VSUihyZWd1bGF0b3IpID09IC1FUFJPQkVfREVGRVIpIHsKKwkJCXIgPSAt RVBST0JFX0RFRkVSOworCQkJZ290byBlcnJvcjsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKHNk cm0tPmRkZXYtPmRldiwKKwkJCQkgImNhbm5vdCBmaW5kIHJlZ3VsYXRvciAlczogJWxkXG4iLAor CQkJCSBwcm9wLT5uYW1lLCBQVFJfRVJSKHJlZ3VsYXRvcikpOworCQl9CisJfQorCisJZm9yIChp ID0gMDsgaSA8IHNkcm0tPm5fcmVndWxhdG9yczsgKytpKSB7CisJCWlmICghc2RybS0+cmVndWxh dG9yc1tpXSkKKwkJCWNvbnRpbnVlOworCisJCXIgPSByZWd1bGF0b3JfZW5hYmxlKHNkcm0tPnJl Z3VsYXRvcnNbaV0pOworCQlpZiAociA8IDApIHsKKwkJCWRldl93YXJuKHNkcm0tPmRkZXYtPmRl diwKKwkJCQkgImNhbm5vdCBlbmFibGUgcmVndWxhdG9yICV6dTogJWRcbiIsIGksIHIpOworCQkJ cmVndWxhdG9yX3B1dChzZHJtLT5yZWd1bGF0b3JzW2ldKTsKKwkJCXNkcm0tPnJlZ3VsYXRvcnNb aV0gPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWZvciAoaSA9IDA7 IGkgPCBzZHJtLT5uX3JlZ3VsYXRvcnM7ICsraSkKKwkJaWYgKHNkcm0tPnJlZ3VsYXRvcnNbaV0p CisJCQlyZWd1bGF0b3JfcHV0KHNkcm0tPnJlZ3VsYXRvcnNbaV0pOworCWtmcmVlKHNkcm0tPnJl Z3VsYXRvcnMpOworCXNkcm0tPnJlZ3VsYXRvcnMgPSBOVUxMOworCXNkcm0tPm5fcmVndWxhdG9y cyA9IDA7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fb2ZfdW5iaW5kX3JlZ3Vs YXRvcnMoc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKQoreworCXNpemVfdCBpOworCisJZm9yIChp ID0gMDsgaSA8IHNkcm0tPm5fcmVndWxhdG9yczsgKytpKSB7CisJCWlmIChzZHJtLT5yZWd1bGF0 b3JzW2ldKSB7CisJCQlyZWd1bGF0b3JfZGlzYWJsZShzZHJtLT5yZWd1bGF0b3JzW2ldKTsKKwkJ CXJlZ3VsYXRvcl9wdXQoc2RybS0+cmVndWxhdG9yc1tpXSk7CisJCX0KKwl9CisKKwlrZnJlZShz ZHJtLT5yZWd1bGF0b3JzKTsKKwlzZHJtLT5yZWd1bGF0b3JzID0gTlVMTDsKKwlzZHJtLT5uX3Jl Z3VsYXRvcnMgPSAwOworfQorCisjZWxzZSAvKiBDT05GSUdfUkVHVUxBVE9SUyAqLworCitzdGF0 aWMgaW50IHNkcm1fb2ZfYmluZF9yZWd1bGF0b3JzKHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSwK KwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBzZHJtX29mX3VuYmluZF9yZWd1bGF0b3JzKHN0cnVjdCBzZHJtX2RldmljZSAqc2Ry bSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19SRUdVTEFUT1JTICovCisKKyNpZmRlZiBDT05G SUdfT0YKKwordm9pZCBzZHJtX29mX2Jvb3RzdHJhcCh2b2lkKQoreworI2lmZGVmIENPTkZJR19P Rl9BRERSRVNTCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvcl9lYWNoX2NvbXBhdGli bGVfbm9kZShucCwgTlVMTCwgInNpbXBsZS1mcmFtZWJ1ZmZlciIpCisJCW9mX3BsYXRmb3JtX2Rl dmljZV9jcmVhdGUobnAsIE5VTEwsIE5VTEwpOworI2VuZGlmCit9CisKK2ludCBzZHJtX29mX2Jp bmQoc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKQoreworCWludCByOworCisJaWYgKFdBUk5fT04o c2RybS0+bl9jbGtzID4gMCB8fCBzZHJtLT5uX3JlZ3VsYXRvcnMgPiAwKSkKKwkJcmV0dXJuIDA7 CisJaWYgKCFzZHJtLT5kZGV2LT5kZXYtPm9mX25vZGUpCisJCXJldHVybiAwOworCisJciA9IHNk cm1fb2ZfYmluZF9jbG9ja3Moc2RybSwgc2RybS0+ZGRldi0+ZGV2LT5vZl9ub2RlKTsKKwlpZiAo ciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlyID0gc2RybV9vZl9iaW5kX3JlZ3VsYXRvcnMoc2Ry bSwgc2RybS0+ZGRldi0+ZGV2LT5vZl9ub2RlKTsKKwlpZiAociA8IDApCisJCWdvdG8gZXJyb3I7 CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJc2RybV9vZl91bmJpbmQoc2RybSk7CisJcmV0dXJu IHI7Cit9CisKK3ZvaWQgc2RybV9vZl91bmJpbmQoc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKQor eworCXNkcm1fb2ZfdW5iaW5kX3JlZ3VsYXRvcnMoc2RybSk7CisJc2RybV9vZl91bmJpbmRfY2xv Y2tzKHNkcm0pOworfQorCisjZWxzZSAvKiBDT05GSUdfT0YgKi8KKwordm9pZCBzZHJtX29mX2Jv b3RzdHJhcCh2b2lkKQoreworfQorCitpbnQgc2RybV9vZl9iaW5kKHN0cnVjdCBzZHJtX2Rldmlj ZSAqc2RybSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzZHJtX29mX3VuYmluZChzdHJ1Y3Qg c2RybV9kZXZpY2UgKnNkcm0pCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfT0YgKi8KLS0gCjIu OS4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK