From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v4 3/5] drm: add SimpleDRM driver Date: Mon, 22 Aug 2016 22:25:23 +0200 Message-ID: <1471897525-31118-4-git-send-email-noralf@tronnes.org> References: <1471897525-31118-1-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1471897525-31118-1-git-send-email-noralf@tronnes.org> 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 Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org VGhlIFNpbXBsZURSTSBkcml2ZXIgYmluZHMgdG8gc2ltcGxlLWZyYW1lYnVmZmVyIGRldmljZXMg YW5kIHByb3ZpZGVzIGEKRFJNL0tNUyBBUEkuIEl0IHByb3ZpZGVzIG9ubHkgYSBzaW5nbGUgQ1JU QytlbmNvZGVyK2Nvbm5lY3RvciBjb21iaW5hdGlvbgpwbHVzIG9uZSBpbml0aWFsIG1vZGUuCgpV c2Vyc3BhY2UgY2FuIGNyZWF0ZSBkdW1iLWJ1ZmZlcnMgd2hpY2ggY2FuIGJlIGJsaXQgaW50byB0 aGUgcmVhbApmcmFtZWJ1ZmZlciBzaW1pbGFyIHRvIFVETC4gTm8gYWNjZXNzIHRvIHRoZSByZWFs IGZyYW1lYnVmZmVyIGlzIGFsbG93ZWQKKGNvbXBhcmVkIHRvIGVhcmxpZXIgdmVyc2lvbiBvZiB0 aGlzIGRyaXZlcikgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzLgpGdXJ0aGVybW9yZSwgdGhpcyB3 YXkgd2UgY2FuIHN1cHBvcnQgYXJiaXRyYXJ5IG1vZGVzIGFzIGxvbmcgYXMgd2UgaGF2ZSBhCmNv bnZlcnNpb24taGVscGVyLgoKVGhlIGRyaXZlciB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IERh dmlkIEhlcnJtYW5uIGluIDIwMTQuCk15IG1haW4gY29udHJpYnV0aW9uIGlzIHRvIG1ha2UgdXNl IG9mIGRybV9zaW1wbGVfa21zX2hlbHBlciBhbmQKcmV3b3JrIHRoZSBwcm9iZSBwYXRoIHRvIGF2 b2lkIHVzZSBvZiB0aGUgZGVwcmVjYXRlZCBkcm1fcGxhdGZvcm1faW5pdCgpCmFuZCBkcm1fZHJp dmVyLntsb2FkLHVubG9hZH0oKS4KQWRkaXRpb25zIGhhdmUgYWxzbyBiZWVuIG1hZGUgZm9yIGxh dGVyIGNoYW5nZXMgdG8gdGhlIERldmljZSBUcmVlIGJpbmRpbmcKZG9jdW1lbnQsIGxpa2Ugc3Vw cG9ydCBmb3IgY2xvY2tzLCByZWd1bGF0b3JzIGFuZCBoYXZpbmcgdGhlIG5vZGUgdW5kZXIKL2No b3Nlbi4gVGhpcyBjb2RlIHdhcyBsaWZ0ZWQgdmVyYmF0aW0gZnJvbSBzaW1wbGVmYi5jLgoKQ2M6 IGRoLmhlcnJtYW5uQGdtYWlsLmNvbQpDYzogbGlidkBza3luZXQuYmUKU2lnbmVkLW9mZi1ieTog Tm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Ci0tLQoKQ2hhbmdlcyBmcm9tIHZl cnNpb24gMzoKLSBSZXdvcmtlZCBnZW0gY29kZSB0byBtYXRjaCB1ZGwKLSBEcm9wcGVkIFBSSU1F IHN1cHBvcnQKLSBEcm9wcGVkIGRpcnR5X2luZm9fcHJvcGVydHksIGl0J3MgZ29uZQotIERvbid0 IHVzZSBkcm1fZGV2aWNlLnBsYXRmb3JtZGV2IGl0J3MgZGVwcmVjYXRlZAotIFJlbW92ZSBzdHJ1 Y3Qgc2RybV9kZXZpY2UgI2lmZGVmJ3MKLSBTcGxpdCBvdXQgc2RybV9mYl9pbml0KCkgZnJvbSBz ZHJtX2ZiX2NyZWF0ZSgpLCBuZWVkZWQgYnkgZmJkZXYgY29kZQotIFNpbXBsaWZ5IGRybV9jbGlw IHZhbGlkYXRpb24gYnkgZXh0ZW5kaW5nIHRoZSBjaGVjayBpbgogIHNkcm1fZGlydHkoKSBhbmQg ZHJvcCB0aGUgb25lIGluIHNkcm1fYmxpdCgpCi0gUmVtb3ZlZCBzZHJtX2RpcnR5X2FsbF91bmxv Y2tlZCgpIHdoaWNoIHdhcyB1bnVzZWQuCgpDaGFuZ2VzIGZyb20gdmVyc2lvbiAyOgotIFJlbW92 ZSBzdXBlcmZsdW9zIG1vZHVsZS5oIGluY2x1ZGVzCi0gTW92ZSBpbmNsdWRlcyBmcm9tIGhlYWRl ciB0byBzb3VyY2UgZmlsZXMKLSBTZXQgcGxhbmUuZmIgYmVmb3JlIGZsdXNoaW5nIGluIHBpcGUg dXBkYXRlLCBvciBlbHNlIHRoZSBwcmV2aW91cyBvbmUKICBnZXRzIGZsdXNoZWQKLSBBZGRlZCBj aGVjayBmb3IgdmJsYW5rIGV2ZW50IGluIHNkcm1fZGlzcGxheV9waXBlX3VwZGF0ZSgpCgpDaGFu Z2VzIGZyb20gdmVyc2lvbiAxOgotIE1vdmUgcGxhdGZvcm1fc2V0X2RydmRhdGEoKSBiZWZvcmUg ZHJtX2Rldl9yZWdpc3RlcigpCi0gUmVtb3ZlIGRybV9sZWdhY3lfbW1hcCgpIGNhbGwuCi0gU2V0 IG1vZGVfY29uZmlnLnttaW4sbWF4fV97d2lkdGgsaGVpZ2h0fSB0byB0aGUgYWN0dWFsIGRpbWVu c2lvbnMKICBvZiB0aGUgbmF0aXZlIGZyYW1lYnVmZmVyCi0gUmVtb3ZlIHBsYW5lIHBvc2l0aW9u aW5nIHNpbmNlIGl0IHdvbid0IHdvcmsgd2l0aCB0aGUgc2ltcGxlIGRpc3BsYXkgcGlwZSwKICBt ZWFuaW5nIHNkcm1fZGlzcGxheV9waXBlX2NoZWNrKCkgaXNuJ3QgbmVjZXNzYXJ5IGVpdGhlcgot IFN1cHBvcnQgdGhlIGFkZGl0aW9ucyB0byB0aGUgRGV2aWNlIFRyZWUgYmluZGluZyBkb2N1bWVu dCwgaW5jbHVkaW5nCiAgY2xvY2tzLCByZWd1bGF0b3JzIGFuZCBoYXZpbmcgdGhlIG5vZGUgdW5k ZXIgL2Nob3NlbgoKQ2hhbmdlcyBmcm9tIHByZXZpb3VzIHZlcnNpb246Ci0gUmVtb3ZlIEZCX1NJ TVBMRT1uIGRlcGVuZGVuY3kgdG8gYXZvaWQga2NvbmZpZyByZWN1cnNpdmUgZXJyb3IKLSBDaGFu Z2VkIG1vZHVsZSBuYW1lIHRvIG1hdGNoIGtjb25maWcgaGVscCB0ZXh0OiBzZHJtIC0+IHNpbXBs ZWRybQotIFVzZSBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZQotIFJlcGxhY2UgZGVwcmVjYXRlZCBk cm1fcGxhdGZvcm1faW5pdCgpCi0gc2RybV9kdW1iX2NyZWF0ZSgpOiBkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZSgpIC0+ICpfdW5sb2NrZWQoKQotIHNkcm1fZHVtYl9tYXBfb2Zmc2V0KCk6IGRy bV9nZW1fb2JqZWN0X2xvb2t1cCgpIHJlbW92ZSBkcm1fZGV2aWNlIHBhcmFtZXRlcgotIHNkcm1f ZHJtX21tYXAoKSBjaGFuZ2VzOgogIFJlbW92ZSBzdHJ1Y3RfbXV0ZXggbG9ja2luZwogIEFkZCBk cm1fdm1hX29mZnNldF97bG9jayx1bmxvY2t9X2xvb2t1cCgpCiAgZHJtX21tYXAoKSAtPiBkcm1f bGVnYWN5X21tYXAoKQotIGRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcygpIGRvZXNuJ3QgcmVxdWly ZSBzdGFydCBhbmQgbGVuZ3RoIGFueW1vcmUKLSBVc2UgZHJtX2N2dF9tb2RlKCkgaW5zdGVhZCBv ZiBvcGVuIGNvZGluZyBhIG1vZGUKLSBGaXggZm9ybWF0IGNvbnZlcnNpb24uIEluIHRoZSBpbnRl cm1lZGlhdGUgc3RlcCwgc3RvcmUgdGhlIDgvNi81IGJpdCBjb2xvcgogIHZhbHVlIGluIHRoZSB1 cHBlciBwYXJ0IG9mIHRoZSAxNi1iaXQgY29sb3IgdmFyaWFibGUsIG5vdCB0aGUgbG93ZXIuCi0g U3VwcG9ydCBjbGlwcyA9PSBOVUxMIGluIHNkcm1fZGlydHkoKQotIFNldCBtb2RlX2NvbmZpZy5w cmVmZXJyZWRfZGVwdGgKLSBBdHRhY2ggbW9kZV9jb25maWcuZGlydHlfaW5mb19wcm9wZXJ0eSB0 byBjb25uZWN0b3IKCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAg ICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWcgICAgICAgICAgICB8ICAx OSArCiBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL01ha2VmaWxlICAgICAgICAgICB8ICAgNCAr CiBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybS5oICAgICAgICB8ICA4NiArKysr KwogZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZGFtYWdlLmMgfCAyMzUgKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9kcnYuYyAgICB8 IDU0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9zaW1wbGVk cm0vc2ltcGxlZHJtX2dlbS5jICAgIHwgMjAyICsrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9z aW1wbGVkcm0vc2ltcGxlZHJtX2ttcy5jICAgIHwgMjM0ICsrKysrKysrKysrKwogOSBmaWxlcyBj aGFuZ2VkLCAxMzI2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vc2ltcGxlZHJtL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vc2ltcGxlZHJtL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3NpbXBsZWRybS9zaW1wbGVkcm0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9zaW1wbGVkcm0vc2ltcGxlZHJtX2RhbWFnZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9nZW0uYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2ttcy5jCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRl eCBmYzM1NzMxLi5hNTRjYzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwor KysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjkwLDMgKzI5MCw1IEBAIHNvdXJjZSAi ZHJpdmVycy9ncHUvZHJtL2FyYy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaGlz aWxpY29uL0tjb25maWciCgogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZp ZyIKKworc291cmNlICJkcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWciCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUK aW5kZXggZTNkYmE2Zi4uZWJhMzJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtODMsMyArODMsNCBAQCBvYmot JChDT05GSUdfRFJNX0ZTTF9EQ1UpICs9IGZzbC1kY3UvCiBvYmotJChDT05GSUdfRFJNX0VUTkFW SVYpICs9IGV0bmF2aXYvCiBvYmotJChDT05GSUdfRFJNX0FSQ1BHVSkrPSBhcmMvCiBvYmoteQkJ CSs9IGhpc2lsaWNvbi8KK29iai0kKENPTkZJR19EUk1fU0lNUExFRFJNKSArPSBzaW1wbGVkcm0v CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vc2ltcGxlZHJtL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZjQ1YjI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVk cm0vS2NvbmZpZwpAQCAtMCwwICsxLDE5IEBACitjb25maWcgRFJNX1NJTVBMRURSTQorCXRyaXN0 YXRlICJTaW1wbGUgZmlybXdhcmUgZnJhbWVidWZmZXIgRFJNIGRyaXZlciIKKwlkZXBlbmRzIG9u IERSTQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCWhlbHAKKwkgIFNpbXBsZURSTSBjYW4gcnVu IG9uIGFsbCBzeXN0ZW1zIHdpdGggcHJlLWluaXRpYWxpemVkIGdyYXBoaWNzCisJICBoYXJkd2Fy ZS4gSXQgdXNlcyBhIGZyYW1lYnVmZmVyIHRoYXQgd2FzIGluaXRpYWxpemVkIGR1cmluZworCSAg ZmlybXdhcmUgYm9vdC4gTm8gcGFnZS1mbGlwcGluZywgbW9kZXNldHRpbmcgb3Igb3RoZXIgYWR2 YW5jZWQKKwkgIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuIEhvd2V2ZXIsIG90aGVyIERSTSBkcml2 ZXJzIGNhbiBiZSBsb2FkZWQKKwkgIGxhdGVyIGFuZCB0YWtlIG92ZXIgZnJvbSBTaW1wbGVEUk0g aWYgdGhleSBwcm92aWRlIHJlYWwgaGFyZHdhcmUKKwkgIHN1cHBvcnQuCisKKwkgIFNpbXBsZURS TSBzdXBwb3J0cyAic2ltcGxlLWZyYW1lYnVmZmVyIiBEZXZpY2VUcmVlIG9iamVjdHMgYW5kCisJ ICBjb21wYXRpYmxlIHBsYXRmb3JtIGZyYW1lYnVmZmVycy4KKworCSAgSWYgdW5zdXJlLCBzYXkg WS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVy ZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2ltcGxlZHJtLgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9zaW1w bGVkcm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhNjJk YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vTWFrZWZpbGUK QEAgLTAsMCArMSw0IEBACitzaW1wbGVkcm0teSA6PQlzaW1wbGVkcm1fZHJ2Lm8gc2ltcGxlZHJt X2ttcy5vIHNpbXBsZWRybV9nZW0ubyBcCisJCXNpbXBsZWRybV9kYW1hZ2UubworCitvYmotJChD T05GSUdfRFJNX1NJTVBMRURSTSkgOj0gc2ltcGxlZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtLmggYi9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJt L3NpbXBsZWRybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3Mzk1ODEK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybS5o CkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBTaW1wbGVEUk0gZmlybXdhcmUgZnJhbWVidWZmZXIg ZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBEYXZpZCBIZXJybWFubiA8ZGguaGVy cm1hbm5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKwor I2lmbmRlZiBTRFJNX0RSVl9ICisjZGVmaW5lIFNEUk1fRFJWX0gKKworI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9z aW1wbGVfa21zX2hlbHBlci5oPgorCitzdHJ1Y3Qgc2ltcGxlZmJfZm9ybWF0Oworc3RydWN0IHJl Z3VsYXRvcjsKK3N0cnVjdCBjbGs7CisKK3N0cnVjdCBzZHJtX2RldmljZSB7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRkZXY7CisJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlIHBpcGU7CisJ c3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsKKworCS8qIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9u ICovCisJY29uc3Qgc3RydWN0IHNpbXBsZWZiX2Zvcm1hdCAqZmJfc2Zvcm1hdDsKKwl1MzIgZmJf Zm9ybWF0OworCXUzMiBmYl93aWR0aDsKKwl1MzIgZmJfaGVpZ2h0OworCXUzMiBmYl9zdHJpZGU7 CisJdTMyIGZiX2JwcDsKKwl1bnNpZ25lZCBsb25nIGZiX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBm Yl9zaXplOworCXZvaWQgKmZiX21hcDsKKworCXVuc2lnbmVkIGludCBjbGtfY291bnQ7CisJc3Ry dWN0IGNsayAqKmNsa3M7CisKKwl1MzIgcmVndWxhdG9yX2NvdW50OworCXN0cnVjdCByZWd1bGF0 b3IgKipyZWd1bGF0b3JzOworfTsKKworaW50IHNkcm1fZHJtX21vZGVzZXRfaW5pdChzdHJ1Y3Qg c2RybV9kZXZpY2UgKnNkcm0pOworCitpbnQgc2RybV9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKKwkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCSAgICAgICB1bnNpZ25l ZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBjb2xvciwKKwkgICAgICAgc3RydWN0IGRybV9jbGlw X3JlY3QgKmNsaXBzLAorCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2NsaXBzKTsKK2ludCBzZHJt X2RpcnR5X2FsbF9sb2NrZWQoc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKTsKKworc3RydWN0IHNk cm1fZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7CisJc3RydWN0IHBh Z2UgKipwYWdlczsKKwl2b2lkICp2bWFwcGluZzsKK307CisKKyNkZWZpbmUgdG9fc2RybV9ibyh4 KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHNkcm1fZ2VtX29iamVjdCwgYmFzZSkKKworaW50IHNk cm1fZHJtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KTsKK2ludCBzZHJtX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0 IHZtX2ZhdWx0ICp2bWYpOworaW50IHNkcm1fZ2VtX3ZtYXAoc3RydWN0IHNkcm1fZ2VtX29iamVj dCAqc29iaik7CisKK3N0cnVjdCBzZHJtX2dlbV9vYmplY3QgKnNkcm1fZ2VtX2FsbG9jX29iamVj dChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKKwkJCQkJICAgICAgc2l6ZV90IHNpemUpOwordm9p ZCBzZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisKK2lu dCBzZHJtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJt X2RldmljZSAqZGRldiwKKwkJICAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZyk7 CitpbnQgc2RybV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0 cnVjdCBkcm1fZGV2aWNlICpkZGV2LAorCQkJIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9m ZnNldCk7CisKK3N0cnVjdCBzZHJtX2ZyYW1lYnVmZmVyIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyIGJhc2U7CisJc3RydWN0IHNkcm1fZ2VtX29iamVjdCAqb2JqOworfTsKKworI2RlZmluZSB0 b19zZHJtX2ZiKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgc2RybV9mcmFtZWJ1ZmZlciwgYmFz ZSkKKworaW50IHNkcm1fZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgc3RydWN0IHNk cm1fZnJhbWVidWZmZXIgKmZiLAorCQkgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1v ZGVfY21kLAorCQkgc3RydWN0IHNkcm1fZ2VtX29iamVjdCAqb2JqKTsKKworI2VuZGlmIC8qIFNE Uk1fRFJWX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxl ZHJtX2RhbWFnZS5jIGIvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZGFtYWdl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjODQ1ZgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2RhbWFnZS5jCkBA IC0wLDAgKzEsMjM1IEBACisvKgorICogU2ltcGxlRFJNIGZpcm13YXJlIGZyYW1lYnVmZmVyIGRy aXZlcgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgRGF2aWQgSGVycm1hbm4gPGRoLmhlcnJt YW5uQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNp bmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlICJz aW1wbGVkcm0uaCIKKworc3RhdGljIGlubGluZSB2b2lkIHNkcm1fcHV0KHU4ICpkc3QsIHUzMiBm b3VyX2NjLCB1MTYgciwgdTE2IGcsIHUxNiBiKQoreworCXN3aXRjaCAoZm91cl9jYykgeworCWNh c2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXIgPj49IDExOworCQlnID4+PSAxMDsKKwkJYiA+Pj0g MTE7CisJCXB1dF91bmFsaWduZWQoKHUxNikoKHIgPDwgMTEpIHwgKGcgPDwgNSkgfCBiKSwgKHUx NiAqKWRzdCk7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwljYXNlIERS TV9GT1JNQVRfQVJHQjE1NTU6CisJCXIgPj49IDExOworCQlnID4+PSAxMTsKKwkJYiA+Pj0gMTE7 CisJCXB1dF91bmFsaWduZWQoKHUxNikoKHIgPDwgMTApIHwgKGcgPDwgNSkgfCBiKSwgKHUxNiAq KWRzdCk7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCXIgPj49IDg7CisJ CWcgPj49IDg7CisJCWIgPj49IDg7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisJCWRzdFsyXSA9 IHI7CisJCWRzdFsxXSA9IGc7CisJCWRzdFswXSA9IGI7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VO RElBTikKKwkJZHN0WzBdID0gcjsKKwkJZHN0WzFdID0gZzsKKwkJZHN0WzJdID0gYjsKKyNlbmRp ZgorCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFU X0FSR0I4ODg4OgorCQlyID4+PSA4OworCQlnID4+PSA4OworCQliID4+PSA4OworCQlwdXRfdW5h bGlnbmVkKCh1MzIpKChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYiksICh1MzIgKilkc3QpOworCQli cmVhazsKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCXIgPj49IDg7CisJCWcgPj49IDg7 CisJCWIgPj49IDg7CisJCXB1dF91bmFsaWduZWQoKHUzMikoKGIgPDwgMTYpIHwgKGcgPDwgOCkg fCByKSwgKHUzMiAqKWRzdCk7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAx MDoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJCXIgPj49IDQ7CisJCWcgPj49IDQ7 CisJCWIgPj49IDQ7CisJCXB1dF91bmFsaWduZWQoKHUzMikoKHIgPDwgMjApIHwgKGcgPDwgMTAp IHwgYiksICh1MzIgKilkc3QpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1f YmxpdF9mcm9tX3hyZ2I4ODg4KGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfc3RyaWRlLCB1MzIgc3Jj X2JwcCwKKwkJCQkgICAgdTggKmRzdCwgdTMyIGRzdF9zdHJpZGUsIHUzMiBkc3RfYnBwLAorCQkJ CSAgICB1MzIgZHN0X2ZvdXJfY2MsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sKKwl1MzIgdmFs LCBpOworCisJd2hpbGUgKGhlaWdodC0tKSB7CisJCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgKytp KSB7CisJCQl2YWwgPSBnZXRfdW5hbGlnbmVkKChjb25zdCB1MzIgKikmc3JjW2kgKiBzcmNfYnBw XSk7CisJCQlzZHJtX3B1dCgmZHN0W2kgKiBkc3RfYnBwXSwgZHN0X2ZvdXJfY2MsCisJCQkJICh2 YWwgJiAweDAwZmYwMDAwVSkgPj4gOCwKKwkJCQkgKHZhbCAmIDB4MDAwMGZmMDBVKSwKKwkJCQkg KHZhbCAmIDB4MDAwMDAwZmZVKSA8PCA4KTsKKwkJfQorCisJCXNyYyArPSBzcmNfc3RyaWRlOwor CQlkc3QgKz0gZHN0X3N0cmlkZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fYmxpdF9mcm9t X3JnYjU2NShjb25zdCB1OCAqc3JjLCB1MzIgc3JjX3N0cmlkZSwgdTMyIHNyY19icHAsCisJCQkJ ICB1OCAqZHN0LCB1MzIgZHN0X3N0cmlkZSwgdTMyIGRzdF9icHAsCisJCQkJICB1MzIgZHN0X2Zv dXJfY2MsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sKKwl1MzIgdmFsLCBpOworCisJd2hpbGUg KGhlaWdodC0tKSB7CisJCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgKytpKSB7CisJCQl2YWwgPSBn ZXRfdW5hbGlnbmVkKChjb25zdCB1MTYgKikmc3JjW2kgKiBzcmNfYnBwXSk7CisJCQlzZHJtX3B1 dCgmZHN0W2kgKiBkc3RfYnBwXSwgZHN0X2ZvdXJfY2MsCisJCQkJICh2YWwgJiAweGY4MDApLAor CQkJCSAodmFsICYgMHgwN2UwKSA8PCA1LAorCQkJCSAodmFsICYgMHgwMDFmKSA8PCAxMSk7CisJ CX0KKworCQlzcmMgKz0gc3JjX3N0cmlkZTsKKwkJZHN0ICs9IGRzdF9zdHJpZGU7CisJfQorfQor CitzdGF0aWMgdm9pZCBzZHJtX2JsaXRfbGluZXMoY29uc3QgdTggKnNyYywgdTMyIHNyY19zdHJp ZGUsCisJCQkgICAgdTggKmRzdCwgdTMyIGRzdF9zdHJpZGUsCisJCQkgICAgdTMyIGJwcCwgdTMy IHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCXUzMiBsZW47CisKKwlsZW4gPSB3aWR0aCAqIGJwcDsK KworCXdoaWxlIChoZWlnaHQtLSkgeworCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CisJCXNyYyAr PSBzcmNfc3RyaWRlOworCQlkc3QgKz0gZHN0X3N0cmlkZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk IHNkcm1fYmxpdChzdHJ1Y3Qgc2RybV9mcmFtZWJ1ZmZlciAqc2ZiLCB1MzIgeCwgdTMyIHksCisJ CSAgICAgIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9ICZzZmItPmJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBmYi0+ZGV2Owor CXN0cnVjdCBzZHJtX2RldmljZSAqc2RybSA9IGRkZXYtPmRldl9wcml2YXRlOworCXUzMiBzcmNf YnBwLCBkc3RfYnBwOworCXU4ICpzcmMsICpkc3Q7CisKKwkvKiBhbHJlYWR5IHVubWFwcGVkOyBv bmdvaW5nIGhhbmRvdmVyPyAqLworCWlmICghc2RybS0+ZmJfbWFwKQorCQlyZXR1cm47CisKKwkv KiBnZXQgYnVmZmVyIG9mZnNldHMgKi8KKwlzcmMgPSBzZmItPm9iai0+dm1hcHBpbmc7CisJZHN0 ID0gc2RybS0+ZmJfbWFwOworCisJLyogYm8gaXMgZ3VhcmFudGVlZCB0byBiZSBiaWcgZW5vdWdo OyBzaXplIGNoZWNrcyBub3QgbmVlZGVkICovCisJc3JjX2JwcCA9IChmYi0+Yml0c19wZXJfcGl4 ZWwgKyA3KSAvIDg7CisJc3JjICs9IGZiLT5vZmZzZXRzWzBdICsgeSAqIGZiLT5waXRjaGVzWzBd ICsgeCAqIHNyY19icHA7CisKKwlkc3RfYnBwID0gKHNkcm0tPmZiX2JwcCArIDcpIC8gODsKKwlk c3QgKz0geSAqIHNkcm0tPmZiX3N0cmlkZSArIHggKiBkc3RfYnBwOworCisJLyogaWYgZm9ybWF0 cyBhcmUgaWRlbnRpY2FsLCBkbyBhIGxpbmUtYnktbGluZSBjb3B5Li4gKi8KKwlpZiAoZmItPnBp eGVsX2Zvcm1hdCA9PSBzZHJtLT5mYl9mb3JtYXQpIHsKKwkJc2RybV9ibGl0X2xpbmVzKHNyYywg ZmItPnBpdGNoZXNbMF0sCisJCQkJZHN0LCBzZHJtLT5mYl9zdHJpZGUsCisJCQkJc3JjX2JwcCwg d2lkdGgsIGhlaWdodCk7CisJCXJldHVybjsKKwl9CisKKwkvKiAuLm90aGVyd2lzZSBjYWxsIHNs b3cgYmxpdC1mdW5jdGlvbiAqLworCXN3aXRjaCAoZmItPnBpeGVsX2Zvcm1hdCkgeworCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIERSTV9GT1JN QVRfWFJHQjg4ODg6CisJCXNkcm1fYmxpdF9mcm9tX3hyZ2I4ODg4KHNyYywgZmItPnBpdGNoZXNb MF0sIHNyY19icHAsCisJCQkJCWRzdCwgc2RybS0+ZmJfc3RyaWRlLCBkc3RfYnBwLAorCQkJCQlz ZHJtLT5mYl9mb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCQlicmVhazsKKwljYXNlIERSTV9GT1JN QVRfUkdCNTY1OgorCQlzZHJtX2JsaXRfZnJvbV9yZ2I1NjUoc3JjLCBmYi0+cGl0Y2hlc1swXSwg c3JjX2JwcCwKKwkJCQkgICAgICBkc3QsIHNkcm0tPmZiX3N0cmlkZSwgZHN0X2JwcCwKKwkJCQkg ICAgICBzZHJtLT5mYl9mb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCQlicmVhazsKKwl9Cit9CisK K2ludCBzZHJtX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCSAgICAgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUsCisJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQg aW50IGNvbG9yLAorCSAgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCisJICAgICAg IHVuc2lnbmVkIGludCBudW1fY2xpcHMpCit7CisJc3RydWN0IHNkcm1fZnJhbWVidWZmZXIgKnNm YiA9IHRvX3Nkcm1fZmIoZmIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gZmItPmRldjsK KwlzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0gPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg ZHJtX2NsaXBfcmVjdCBmdWxsX2NsaXA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHI7CisKKwlp ZiAoIWNsaXBzIHx8ICFudW1fY2xpcHMpIHsKKwkJZnVsbF9jbGlwLngxID0gMDsKKwkJZnVsbF9j bGlwLngyID0gZmItPndpZHRoOworCQlmdWxsX2NsaXAueTEgPSAwOworCQlmdWxsX2NsaXAueTIg PSBmYi0+aGVpZ2h0OworCQljbGlwcyA9ICZmdWxsX2NsaXA7CisJCW51bV9jbGlwcyA9IDE7CisJ fQorCisJZHJtX21vZGVzZXRfbG9ja19hbGwoZGRldik7CisKKwlpZiAoc2RybS0+cGlwZS5wbGFu ZS5mYiAhPSBmYikgeworCQlyID0gMDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJZm9yIChpID0g MDsgaSA8IG51bV9jbGlwczsgaSsrKSB7CisJCWlmIChjbGlwc1tpXS54MSA+IGNsaXBzW2ldLngy IHx8IGNsaXBzW2ldLngyID4gZmItPndpZHRoIHx8CisJCSAgICBjbGlwc1tpXS55MSA+IGNsaXBz W2ldLnkyIHx8IGNsaXBzW2ldLnkyID4gZmItPmhlaWdodCkKKwkJCWNvbnRpbnVlOworCisJCXNk cm1fYmxpdChzZmIsIGNsaXBzW2ldLngxLCBjbGlwc1tpXS55MSwKKwkJCSAgY2xpcHNbaV0ueDIg LSBjbGlwc1tpXS54MSwKKwkJCSAgY2xpcHNbaV0ueTIgLSBjbGlwc1tpXS55MSk7CisJfQorCit1 bmxvY2s6CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZGV2KTsKKwlyZXR1cm4gMDsKK30KKwor aW50IHNkcm1fZGlydHlfYWxsX2xvY2tlZChzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0pCit7CisJ c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IHNkcm1fZnJhbWVidWZmZXIgKnNm YjsKKworCWZiID0gc2RybS0+cGlwZS5wbGFuZS5mYjsKKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsK KworCXNmYiA9IHRvX3Nkcm1fZmIoZmIpOworCisJc2RybV9ibGl0KHNmYiwgMCwgMCwgZmItPndp ZHRoLCBmYi0+aGVpZ2h0KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vc2ltcGxl ZHJtL3NpbXBsZWRybV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x N2MxYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1w bGVkcm1fZHJ2LmMKQEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiBTaW1wbGVEUk0gZmlybXdhcmUg ZnJhbWVidWZmZXIgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBEYXZpZCBIZXJy bWFubiA8ZGguaGVycm1hbm5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNp b24uCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+ CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8u aD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2lu Y2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RhdGEvc2ltcGxlZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Iv Y29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgInNpbXBs ZWRybS5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZHJtX2RybV9m b3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLm1t YXAgPSBzZHJtX2RybV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1fcmVh ZCwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJLnJlbGVhc2UgPSBkcm1fcmVsZWFz ZSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9j dGwsCisjZW5kaWYKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNkcm1fZ2VtX3ZtX29wcyA9IHsKKwkuZmF1bHQg PSBzZHJtX2dlbV9mYXVsdCwKKwkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKKwkuY2xvc2UgPSBk cm1fZ2VtX3ZtX2Nsb3NlLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHNkcm1fZHJt X2RyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX0dFTSB8IERSSVZFUl9NT0RF U0VUIHwgRFJJVkVSX0FUT01JQywKKwkuZm9wcyA9ICZzZHJtX2RybV9mb3BzLAorCisJLmdlbV9m cmVlX29iamVjdCA9IHNkcm1fZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJnNkcm1f Z2VtX3ZtX29wcywKKworCS5kdW1iX2NyZWF0ZSA9IHNkcm1fZHVtYl9jcmVhdGUsCisJLmR1bWJf bWFwX29mZnNldCA9IHNkcm1fZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1f Z2VtX2R1bWJfZGVzdHJveSwKKworCS5uYW1lID0gInNpbXBsZWRybSIsCisJLmRlc2MgPSAiU2lt cGxlIGZpcm13YXJlIGZyYW1lYnVmZmVyIERSTSBkcml2ZXIiLAorCS5kYXRlID0gIjIwMTMwNjAx IiwKKwkubWFqb3IgPSAwLAorCS5taW5vciA9IDAsCisJLnBhdGNobGV2ZWwgPSAxLAorfTsKKwor I2lmIGRlZmluZWQgQ09ORklHX09GICYmIGRlZmluZWQgQ09ORklHX0NPTU1PTl9DTEsKKy8qCisg KiBDbG9jayBoYW5kbGluZyBjb2RlLgorICoKKyAqIEhlcmUgd2UgaGFuZGxlIHRoZSBjbG9ja3Mg cHJvcGVydHkgb2Ygb3VyICJzaW1wbGUtZnJhbWVidWZmZXIiIGR0IG5vZGUuCisgKiBUaGlzIGlz IG5lY2Vzc2FyeSBzbyB0aGF0IHdlIGNhbiBtYWtlIHN1cmUgdGhhdCBhbnkgY2xvY2tzIG5lZWRl ZCBieQorICogdGhlIGRpc3BsYXkgZW5naW5lIHRoYXQgdGhlIGJvb3Rsb2FkZXIgc2V0IHVwIGZv ciB1cyAoYW5kIGZvciB3aGljaCBpdAorICogcHJvdmlkZWQgYSBzaW1wbGVmYiBkdCBub2RlKSwg c3RheSB1cCwgZm9yIHRoZSBsaWZlIG9mIHRoZSBzaW1wbGVmYgorICogZHJpdmVyLgorICoKKyAq IFdoZW4gdGhlIGRyaXZlciB1bmxvYWRzLCB3ZSBjbGVhbmx5IGRpc2FibGUsIGFuZCB0aGVuIHJl bGVhc2UgdGhlIGNsb2Nrcy4KKyAqCisgKiBXZSBvbmx5IGNvbXBsYWluIGFib3V0IGVycm9ycyBo ZXJlLCBubyBhY3Rpb24gaXMgdGFrZW4gYXMgdGhlIG1vc3QgbGlrZWx5CisgKiBlcnJvciBjYW4g b25seSBoYXBwZW4gZHVlIHRvIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgYm9vdGxvYWRlciB3aGlj aCBzZXQKKyAqIHVwIHNpbXBsZWZiLCBhbmQgdGhlIGNsb2NrIGRlZmluaXRpb25zIGluIHRoZSBk ZXZpY2UgdHJlZS4gQ2hhbmNlcyBhcmUKKyAqIHRoYXQgdGhlcmUgYXJlIG5vIGFkdmVyc2UgZWZm ZWN0cywgYW5kIGlmIHRoZXJlIGFyZSwgYSBjbGVhbiB0ZWFyZG93biBvZgorICogdGhlIGZiIHBy b2JlIHdpbGwgbm90IGhlbHAgdXMgbXVjaCBlaXRoZXIuIFNvIGp1c3QgY29tcGxhaW4gYW5kIGNh cnJ5IG9uLAorICogYW5kIGhvcGUgdGhhdCB0aGUgdXNlciBhY3R1YWxseSBnZXRzIGEgd29ya2lu ZyBmYiBhdCB0aGUgZW5kIG9mIHRoaW5ncy4KKyAqLworc3RhdGljIGludCBzZHJtX2Nsb2Nrc19p bml0KHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSwKKwkJCSAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9k ZTsKKwlzdHJ1Y3QgY2xrICpjbG9jazsKKwlpbnQgaSwgcmV0OworCisJaWYgKGRldl9nZXRfcGxh dGRhdGEoJnBkZXYtPmRldikgfHwgIW5wKQorCQlyZXR1cm4gMDsKKworCXNkcm0tPmNsa19jb3Vu dCA9IG9mX2Nsa19nZXRfcGFyZW50X2NvdW50KG5wKTsKKwlpZiAoIXNkcm0tPmNsa19jb3VudCkK KwkJcmV0dXJuIDA7CisKKwlzZHJtLT5jbGtzID0ga2NhbGxvYyhzZHJtLT5jbGtfY291bnQsIHNp emVvZihzdHJ1Y3QgY2xrICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkcm0tPmNsa3MpCisJCXJl dHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHNkcm0tPmNsa19jb3VudDsgaSsrKSB7 CisJCWNsb2NrID0gb2ZfY2xrX2dldChucCwgaSk7CisJCWlmIChJU19FUlIoY2xvY2spKSB7CisJ CQlpZiAoUFRSX0VSUihjbG9jaykgPT0gLUVQUk9CRV9ERUZFUikgeworCQkJCXdoaWxlICgtLWkg Pj0gMCkgeworCQkJCQlpZiAoc2RybS0+Y2xrc1tpXSkKKwkJCQkJCWNsa19wdXQoc2RybS0+Y2xr c1tpXSk7CisJCQkJfQorCQkJCWtmcmVlKHNkcm0tPmNsa3MpOworCQkJCXJldHVybiAtRVBST0JF X0RFRkVSOworCQkJfQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGNsb2NrICVkIG5vdCBm b3VuZDogJWxkXG4iLAorCQkJCV9fZnVuY19fLCBpLCBQVFJfRVJSKGNsb2NrKSk7CisJCQljb250 aW51ZTsKKwkJfQorCQlzZHJtLT5jbGtzW2ldID0gY2xvY2s7CisJfQorCisJZm9yIChpID0gMDsg aSA8IHNkcm0tPmNsa19jb3VudDsgaSsrKSB7CisJCWlmIChzZHJtLT5jbGtzW2ldKSB7CisJCQly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc2RybS0+Y2xrc1tpXSk7CisJCQlpZiAocmV0KSB7CisJ CQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkiJXM6IGZhaWxlZCB0byBlbmFibGUgY2xvY2sg JWQ6ICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaSwgcmV0KTsKKwkJCQljbGtfcHV0KHNkcm0tPmNs a3NbaV0pOworCQkJCXNkcm0tPmNsa3NbaV0gPSBOVUxMOworCQkJfQorCQl9CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fY2xvY2tzX2Rlc3Ryb3koc3RydWN0IHNkcm1f ZGV2aWNlICpzZHJtKQoreworCWludCBpOworCisJaWYgKCFzZHJtLT5jbGtzKQorCQlyZXR1cm47 CisKKwlmb3IgKGkgPSAwOyBpIDwgc2RybS0+Y2xrX2NvdW50OyBpKyspIHsKKwkJaWYgKHNkcm0t PmNsa3NbaV0pIHsKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShzZHJtLT5jbGtzW2ldKTsKKwkJ CWNsa19wdXQoc2RybS0+Y2xrc1tpXSk7CisJCX0KKwl9CisKKwlrZnJlZShzZHJtLT5jbGtzKTsK K30KKyNlbHNlCitzdGF0aWMgaW50IHNkcm1fY2xvY2tzX2luaXQoc3RydWN0IHNkcm1fZGV2aWNl ICpzZHJtLAorCQkJICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fY2xvY2tzX2Rlc3Ryb3koc3RydWN0IHNkcm1fZGV2 aWNlICpzZHJtKQoreworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIENPTkZJR19PRiAmJiBkZWZp bmVkIENPTkZJR19SRUdVTEFUT1IKKworI2RlZmluZSBTVVBQTFlfU1VGRklYICItc3VwcGx5Igor CisvKgorICogUmVndWxhdG9yIGhhbmRsaW5nIGNvZGUuCisgKgorICogSGVyZSB3ZSBoYW5kbGUg dGhlIG51bS1zdXBwbGllcyBhbmQgdmluKi1zdXBwbHkgcHJvcGVydGllcyBvZiBvdXIKKyAqICJz aW1wbGUtZnJhbWVidWZmZXIiIGR0IG5vZGUuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHRoYXQgd2Ug Y2FuIG1ha2Ugc3VyZQorICogdGhhdCBhbnkgcmVndWxhdG9ycyBuZWVkZWQgYnkgdGhlIGRpc3Bs YXkgaGFyZHdhcmUgdGhhdCB0aGUgYm9vdGxvYWRlcgorICogc2V0IHVwIGZvciB1cyAoYW5kIGZv ciB3aGljaCBpdCBwcm92aWRlZCBhIHNpbXBsZWZiIGR0IG5vZGUpLCBzdGF5IHVwLAorICogZm9y IHRoZSBsaWZlIG9mIHRoZSBzaW1wbGVmYiBkcml2ZXIuCisgKgorICogV2hlbiB0aGUgZHJpdmVy IHVubG9hZHMsIHdlIGNsZWFubHkgZGlzYWJsZSwgYW5kIHRoZW4gcmVsZWFzZSB0aGUKKyAqIHJl Z3VsYXRvcnMuCisgKgorICogV2Ugb25seSBjb21wbGFpbiBhYm91dCBlcnJvcnMgaGVyZSwgbm8g YWN0aW9uIGlzIHRha2VuIGFzIHRoZSBtb3N0IGxpa2VseQorICogZXJyb3IgY2FuIG9ubHkgaGFw cGVuIGR1ZSB0byBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGJvb3Rsb2FkZXIgd2hpY2ggc2V0Cisg KiB1cCBzaW1wbGVmYiwgYW5kIHRoZSByZWd1bGF0b3IgZGVmaW5pdGlvbnMgaW4gdGhlIGRldmlj ZSB0cmVlLiBDaGFuY2VzIGFyZQorICogdGhhdCB0aGVyZSBhcmUgbm8gYWR2ZXJzZSBlZmZlY3Rz LCBhbmQgaWYgdGhlcmUgYXJlLCBhIGNsZWFuIHRlYXJkb3duIG9mCisgKiB0aGUgZmIgcHJvYmUg d2lsbCBub3QgaGVscCB1cyBtdWNoIGVpdGhlci4gU28ganVzdCBjb21wbGFpbiBhbmQgY2Fycnkg b24sCisgKiBhbmQgaG9wZSB0aGF0IHRoZSB1c2VyIGFjdHVhbGx5IGdldHMgYSB3b3JraW5nIGZi IGF0IHRoZSBlbmQgb2YgdGhpbmdzLgorICovCitzdGF0aWMgaW50IHNkcm1fcmVndWxhdG9yc19p bml0KHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSwKKwkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsK KwlzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3I7CisJaW50IGNvdW50ID0gMCwgaSA9IDAsIHJl dDsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJY29uc3QgY2hhciAqcDsKKworCWlmIChkZXZf Z2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpIHx8ICFucCkKKwkJcmV0dXJuIDA7CisKKwkvKiBDb3Vu dCB0aGUgbnVtYmVyIG9mIHJlZ3VsYXRvciBzdXBwbGllcyAqLworCWZvcl9lYWNoX3Byb3BlcnR5 X29mX25vZGUobnAsIHByb3ApIHsKKwkJcCA9IHN0cnN0cihwcm9wLT5uYW1lLCBTVVBQTFlfU1VG RklYKTsKKwkJaWYgKHAgJiYgcCAhPSBwcm9wLT5uYW1lKQorCQkJY291bnQrKzsKKwl9CisKKwlp ZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCXNkcm0tPnJlZ3VsYXRvcnMgPSBkZXZtX2tjYWxs b2MoJnBkZXYtPmRldiwgY291bnQsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmVndWxhdG9yICopLAor CQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXNkcm0tPnJlZ3VsYXRvcnMpCisJCXJldHVybiAtRU5P TUVNOworCisJLyogR2V0IGFsbCB0aGUgcmVndWxhdG9ycyAqLworCWZvcl9lYWNoX3Byb3BlcnR5 X29mX25vZGUobnAsIHByb3ApIHsKKwkJY2hhciBuYW1lWzMyXTsgLyogMzIgaXMgbWF4IHNpemUg b2YgcHJvcGVydHkgbmFtZSAqLworCisJCXAgPSBzdHJzdHIocHJvcC0+bmFtZSwgU1VQUExZX1NV RkZJWCk7CisJCWlmICghcCB8fCBwID09IHByb3AtPm5hbWUpCisJCQljb250aW51ZTsKKworCQlz dHJsY3B5KG5hbWUsIHByb3AtPm5hbWUsCisJCQlzdHJsZW4ocHJvcC0+bmFtZSkgLSBzdHJsZW4o U1VQUExZX1NVRkZJWCkgKyAxKTsKKwkJcmVndWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29w dGlvbmFsKCZwZGV2LT5kZXYsIG5hbWUpOworCQlpZiAoSVNfRVJSKHJlZ3VsYXRvcikpIHsKKwkJ CWlmIChQVFJfRVJSKHJlZ3VsYXRvcikgPT0gLUVQUk9CRV9ERUZFUikKKwkJCQlyZXR1cm4gLUVQ Uk9CRV9ERUZFUjsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ3VsYXRvciAlcyBub3QgZm91 bmQ6ICVsZFxuIiwKKwkJCQluYW1lLCBQVFJfRVJSKHJlZ3VsYXRvcikpOworCQkJY29udGludWU7 CisJCX0KKwkJc2RybS0+cmVndWxhdG9yc1tpKytdID0gcmVndWxhdG9yOworCX0KKwlzZHJtLT5y ZWd1bGF0b3JfY291bnQgPSBpOworCisJLyogRW5hYmxlIGFsbCB0aGUgcmVndWxhdG9ycyAqLwor CWZvciAoaSA9IDA7IGkgPCBzZHJtLT5yZWd1bGF0b3JfY291bnQ7IGkrKykgeworCQlyZXQgPSBy ZWd1bGF0b3JfZW5hYmxlKHNkcm0tPnJlZ3VsYXRvcnNbaV0pOworCQlpZiAocmV0KSB7CisJCQlk ZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yICVkOiAl ZFxuIiwKKwkJCQlpLCByZXQpOworCQkJZGV2bV9yZWd1bGF0b3JfcHV0KHNkcm0tPnJlZ3VsYXRv cnNbaV0pOworCQkJc2RybS0+cmVndWxhdG9yc1tpXSA9IE5VTEw7CisJCX0KKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RybV9yZWd1bGF0b3JzX2Rlc3Ryb3koc3RydWN0IHNk cm1fZGV2aWNlICpzZHJtKQoreworCWludCBpOworCisJaWYgKCFzZHJtLT5yZWd1bGF0b3JzKQor CQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2RybS0+cmVndWxhdG9yX2NvdW50OyBpKysp CisJCWlmIChzZHJtLT5yZWd1bGF0b3JzW2ldKQorCQkJcmVndWxhdG9yX2Rpc2FibGUoc2RybS0+ cmVndWxhdG9yc1tpXSk7Cit9CisjZWxzZQorc3RhdGljIGludCBzZHJtX3JlZ3VsYXRvcnNfaW5p dChzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0sCisJCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RybV9yZWd1bGF0b3JzX2Rl c3Ryb3koc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBp bnQgcGFyc2VfZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJICAgIHN0cnVjdCBz aW1wbGVmYl9wbGF0Zm9ybV9kYXRhICptb2RlKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBwZGV2LT5kZXYub2Zfbm9kZTsKKwljb25zdCBjaGFyICpmb3JtYXQ7CisJaW50IHJldDsKKwor CWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIobnAsICJ3aWR0aCIsICZtb2RlLT53aWR0aCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJDYW4ndCBwYXJzZSB3aWR0aCBwcm9wZXJ0eVxuIik7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJoZWlnaHQiLCAmbW9kZS0+ aGVpZ2h0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IHBhcnNl IGhlaWdodCBwcm9wZXJ0eVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91MzIobnAsICJzdHJpZGUiLCAmbW9kZS0+c3RyaWRlKTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IHBhcnNlIHN0cmlkZSBwcm9wZXJ0eVxuIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAs ICJmb3JtYXQiLCAmZm9ybWF0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwg IkNhbid0IHBhcnNlIGZvcm1hdCBwcm9wZXJ0eVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCW1v ZGUtPmZvcm1hdCA9IGZvcm1hdDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNp bXBsZWZiX2Zvcm1hdCBzaW1wbGVmYl9mb3JtYXRzW10gPSBTSU1QTEVGQl9GT1JNQVRTOworCitz dGF0aWMgaW50IHNkcm1fcGRldl9pbml0KHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSwKKwkJCSAg c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2ltcGxlZmJfcGxhdGZv cm1fZGF0YSAqbW9kZSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzaW1wbGVm Yl9wbGF0Zm9ybV9kYXRhIHBtb2RlOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXVuc2lnbmVk IGludCBkZXB0aDsKKwlpbnQgcmV0LCBpLCBicHA7CisKKwlpZiAoIW1vZGUpIHsKKwkJbW9kZSA9 ICZwbW9kZTsKKwkJcmV0ID0gcGFyc2VfZHQocGRldiwgbW9kZSk7CisJCWlmIChyZXQpCisJCQly ZXR1cm4gcmV0OworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF U09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycihzZHJtLT5kZGV2LT5kZXYs ICJObyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaW1wbGVmYl9mb3JtYXRzKTsgKytpKSB7CisJCWlmIChz dHJjbXAobW9kZS0+Zm9ybWF0LCBzaW1wbGVmYl9mb3JtYXRzW2ldLm5hbWUpKQorCQkJY29udGlu dWU7CisKKwkJc2RybS0+ZmJfc2Zvcm1hdCA9ICZzaW1wbGVmYl9mb3JtYXRzW2ldOworCQlzZHJt LT5mYl9mb3JtYXQgPSBzaW1wbGVmYl9mb3JtYXRzW2ldLmZvdXJjYzsKKwkJc2RybS0+ZmJfd2lk dGggPSBtb2RlLT53aWR0aDsKKwkJc2RybS0+ZmJfaGVpZ2h0ID0gbW9kZS0+aGVpZ2h0OworCQlz ZHJtLT5mYl9zdHJpZGUgPSBtb2RlLT5zdHJpZGU7CisJCXNkcm0tPmZiX2Jhc2UgPSBtZW0tPnN0 YXJ0OworCQlzZHJtLT5mYl9zaXplID0gcmVzb3VyY2Vfc2l6ZShtZW0pOworCQlicmVhazsKKwl9 CisKKwlpZiAoaSA+PSBBUlJBWV9TSVpFKHNpbXBsZWZiX2Zvcm1hdHMpKSB7CisJCWRldl9lcnIo c2RybS0+ZGRldi0+ZGV2LCAiVW5rbm93biBmb3JtYXQgJXNcbiIsIG1vZGUtPmZvcm1hdCk7CisJ CXJldHVybiAtRU5PREVWOworCX0KKworCXN3aXRjaCAoc2RybS0+ZmJfZm9ybWF0KSB7CisJY2Fz ZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6CisJY2FzZSBE Uk1fRk9STUFUX0FSR0IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJY2FzZSBEUk1f Rk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9G T1JNQVRfQUJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJN X0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwkJLyoKKwkJICogWW91IG11c3QgYWRqdXN0IHNkcm1fcHV0 KCkgd2hlbmV2ZXIgeW91IGFkZCBhIG5ldyBmb3JtYXQKKwkJICogaGVyZSwgb3RoZXJ3aXNlLCBi bGl0dGluZyBvcGVyYXRpb25zIHdpbGwgbm90IHdvcmsuCisJCSAqIEZ1cnRoZXJtb3JlLCBpbmNs dWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvc2ltcGxlZmIuaCBuZWVkcworCQkgKiB0byBiZSBhZGp1 c3RlZCBzbyB0aGUgcGxhdGZvcm0tZGV2aWNlIGFjdHVhbGx5IGFsbG93cyB0aGlzCisJCSAqIGZv cm1hdC4KKwkJICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoc2RybS0+ZGRldi0+ ZGV2LCAiVW5zdXBwb3J0ZWQgZm9ybWF0ICVzXG4iLAorCQkJbW9kZS0+Zm9ybWF0KTsKKwkJcmV0 dXJuIC1FTk9ERVY7CisJfQorCisJZHJtX2ZiX2dldF9icHBfZGVwdGgoc2RybS0+ZmJfZm9ybWF0 LCAmZGVwdGgsICZicHApOworCWlmICghYnBwKSB7CisJCWRldl9lcnIoc2RybS0+ZGRldi0+ZGV2 LCAiVW5rbm93biBmb3JtYXQgJXNcbiIsIG1vZGUtPmZvcm1hdCk7CisJCXJldHVybiAtRU5PREVW OworCX0KKworCWlmIChzZHJtLT5mYl9zaXplIDwgc2RybS0+ZmJfc3RyaWRlICogc2RybS0+ZmJf aGVpZ2h0KSB7CisJCWRldl9lcnIoc2RybS0+ZGRldi0+ZGV2LCAiRkIgdG9vIHNtYWxsXG4iKTsK KwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIGlmICgoYnBwICsgNykgLyA4ICogc2RybS0+ZmJf d2lkdGggPiBzZHJtLT5mYl9zdHJpZGUpIHsKKwkJZGV2X2VycihzZHJtLT5kZGV2LT5kZXYsICJJ bnZhbGlkIHN0cmlkZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNkcm0tPmZiX2Jw cCA9IGJwcDsKKworCXNkcm0tPmZiX21hcCA9IGlvcmVtYXBfd2Moc2RybS0+ZmJfYmFzZSwgc2Ry bS0+ZmJfc2l6ZSk7CisJaWYgKCFzZHJtLT5mYl9tYXApIHsKKwkJZGV2X2VycihzZHJtLT5kZGV2 LT5kZXYsICJjYW5ub3QgcmVtYXAgVk1FTVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCURS TV9ERUJVR19LTVMoImZvcm1hdDogJXNcbiIsIGRybV9nZXRfZm9ybWF0X25hbWUoc2RybS0+ZmJf Zm9ybWF0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RybV9wZGV2X2Rlc3Ry b3koc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtKQoreworCWlmIChzZHJtLT5mYl9tYXApIHsKKwkJ aW91bm1hcChzZHJtLT5mYl9tYXApOworCQlzZHJtLT5mYl9tYXAgPSBOVUxMOworCX0KK30KKwor c3RhdGljIGludCBzZHJtX3NpbXBsZWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IHNkcm1fZGV2aWNlICpzZHJtOworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2OworCWludCByZXQ7CisKKwlkZGV2ID0gZHJtX2Rldl9hbGxvYygmc2RybV9kcm1fZHJpdmVy LCAmcGRldi0+ZGV2KTsKKwlpZiAoIWRkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2RybSA9 IGt6YWxsb2Moc2l6ZW9mKCpzZHJtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZHJtKQorCQlnb3Rv IGVycl9mcmVlOworCisJZGRldi0+ZGV2X3ByaXZhdGUgPSBzZHJtOworCXNkcm0tPmRkZXYgPSBk ZGV2OworCisJcmV0ID0gc2RybV9wZGV2X2luaXQoc2RybSwgcGRldik7CisJaWYgKHJldCkKKwkJ Z290byBlcnJfZnJlZTsKKworCXJldCA9IHNkcm1fZHJtX21vZGVzZXRfaW5pdChzZHJtKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl9kZXN0cm95OworCisJcmV0ID0gc2RybV9jbG9ja3NfaW5pdChz ZHJtLCBwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY2xlYW51cDsKKworCXJldCA9 IHNkcm1fcmVndWxhdG9yc19pbml0KHNkcm0sIHBkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3Rv IGVycl9jbG9ja3M7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZGV2KTsKKwlyZXQg PSBkcm1fZGV2X3JlZ2lzdGVyKGRkZXYsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlZ3Vs YXRvcnM7CisKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgb24gbWlub3IgJWRcbiIsIGRkZXYt PmRyaXZlci0+bmFtZSwKKwkJIGRkZXYtPnByaW1hcnktPmluZGV4KTsKKworCXJldHVybiAwOwor CitlcnJfcmVndWxhdG9yczoKKwlzZHJtX3JlZ3VsYXRvcnNfZGVzdHJveShzZHJtKTsKK2Vycl9j bG9ja3M6CisJc2RybV9jbG9ja3NfZGVzdHJveShzZHJtKTsKK2Vycl9jbGVhbnVwOgorCWRybV9t b2RlX2NvbmZpZ19jbGVhbnVwKGRkZXYpOworZXJyX2Rlc3Ryb3k6CisJc2RybV9wZGV2X2Rlc3Ry b3koc2RybSk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVmKGRkZXYpOworCWtmcmVlKHNkcm0p OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZHJtX3NpbXBsZWZiX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2 ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNkcm1fZGV2aWNlICpzZHJt ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZGRldik7CisJZHJt X21vZGVfY29uZmlnX2NsZWFudXAoZGRldik7CisKKwkvKiBwcm90ZWN0IGZiX21hcCByZW1vdmFs IGFnYWluc3Qgc2RybV9ibGl0KCkgKi8KKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkZGV2KTsKKwlz ZHJtX3BkZXZfZGVzdHJveShzZHJtKTsKKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRkZXYpOwor CisJc2RybV9yZWd1bGF0b3JzX2Rlc3Ryb3koc2RybSk7CisJc2RybV9jbG9ja3NfZGVzdHJveShz ZHJtKTsKKworCWRybV9kZXZfdW5yZWYoZGRldik7CisJa2ZyZWUoc2RybSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2ltcGxlZmJfb2ZfbWF0 Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1mcmFtZWJ1ZmZlciIsIH0sCisJeyB9 LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNpbXBsZWZiX29mX21hdGNoKTsKKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2RybV9zaW1wbGVmYl9kcml2ZXIgPSB7CisJLnBy b2JlID0gc2RybV9zaW1wbGVmYl9wcm9iZSwKKwkucmVtb3ZlID0gc2RybV9zaW1wbGVmYl9yZW1v dmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic2ltcGxlLWZyYW1lYnVmZmVyIiwKKwkJLm1v ZF9uYW1lID0gS0JVSUxEX01PRE5BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBzaW1wbGVmYl9vZl9tYXRjaCwKKwl9LAorfTsKKworc3RhdGljIGludCBf X2luaXQgc2RybV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2Ry aXZlcl9yZWdpc3Rlcigmc2RybV9zaW1wbGVmYl9kcml2ZXIpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0ZfQUREUkVTUykgJiYgb2ZfY2hvc2Vu KSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwkJZm9yX2VhY2hfY2hpbGRfb2Zfbm9k ZShvZl9jaG9zZW4sIG5wKSB7CisJCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJz aW1wbGUtZnJhbWVidWZmZXIiKSkKKwkJCQlvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wLCBO VUxMLCBOVUxMKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoc2RybV9p bml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNkcm1fZXhpdCh2b2lkKQoreworCXBsYXRmb3Jt X2RyaXZlcl91bnJlZ2lzdGVyKCZzZHJtX3NpbXBsZWZiX2RyaXZlcik7Cit9Cittb2R1bGVfZXhp dChzZHJtX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJE YXZpZCBIZXJybWFubiA8ZGguaGVycm1hbm5AZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBU SU9OKCJTaW1wbGUgZmlybXdhcmUgZnJhbWVidWZmZXIgRFJNIGRyaXZlciIpOworTU9EVUxFX0FM SUFTKCJwbGF0Zm9ybTpzaW1wbGUtZnJhbWVidWZmZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3NpbXBs ZWRybS9zaW1wbGVkcm1fZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OGNjZWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2lt cGxlZHJtX2dlbS5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogU2ltcGxlRFJNIGZpcm13YXJl IGZyYW1lYnVmZmVyIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgRGF2aWQgSGVy cm1hbm4gPGRoLmhlcnJtYW5uQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICog dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJz aW9uLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5v Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAic2ltcGxlZHJtLmgiCisKK3N0cnVj dCBzZHJtX2dlbV9vYmplY3QgKnNkcm1fZ2VtX2FsbG9jX29iamVjdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGRldiwKKwkJCQkJICAgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHNkcm1fZ2VtX29i amVjdCAqb2JqOworCisJV0FSTl9PTighc2l6ZSB8fCAoc2l6ZSAmIH5QQUdFX01BU0spICE9IDAp OworCisJb2JqID0ga3phbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOworCWlmICghb2Jq KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChkcm1fZ2VtX29iamVjdF9pbml0KGRkZXYsICZvYmot PmJhc2UsIHNpemUpKSB7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJl dHVybiBvYmo7Cit9CisKK2ludCBzZHJtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZGZp bGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LAorCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVh dGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHI7 CisKKwkvKiBvdmVyZmxvdyBjaGVja3MgYXJlIGRvbmUgYnkgRFJNIGNvcmUgKi8KKwlhcmdzLT5w aXRjaCA9IChhcmdzLT5icHAgKyA3KSAvIDggKiBhcmdzLT53aWR0aDsKKwlhcmdzLT5zaXplID0g UEFHRV9BTElHTihhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodCk7CisKKwlvYmogPSBzZHJtX2dl bV9hbGxvY19vYmplY3QoZGRldiwgYXJncy0+c2l6ZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAt RU5PTUVNOworCisJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShkZmlsZSwgJm9iai0+YmFzZSwg JmFyZ3MtPmhhbmRsZSk7CisJaWYgKHIpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoJm9iai0+YmFzZSk7CisJCXJldHVybiByOworCX0KKworCS8qIGhhbmRsZSBvd25z IGEgcmVmZXJlbmNlICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9i ai0+YmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNkcm1fZHJtX21tYXAoc3RydWN0IGZp bGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWludCByZXQ7CisKKwly ZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlY RURNQVA7CisJdm1hLT52bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxh Z3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzZHJtX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IGRybV9nZW1f b2JqZWN0ICpnb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IHNkcm1fZ2VtX29i amVjdCAqb2JqID0gdG9fc2RybV9ibyhnb2JqKTsKKwlwZ29mZl90IG9mZnNldDsKKwlpbnQgcmV0 OworCisJaWYgKCFvYmotPnBhZ2VzKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJb2Zm c2V0ID0gKCh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzIC0gdm1hLT52bV9zdGFy dCkgPj4KKwkJIFBBR0VfU0hJRlQ7CisKKwlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsICh1bnNp Z25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzLAorCQkJICAgICBvYmotPnBhZ2VzW29mZnNl dF0pOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAtRUFHQUlOOgorCWNhc2UgMDoKKwljYXNlIC1F UkVTVEFSVFNZUzoKKwljYXNlIC1FSU5UUjoKKwljYXNlIC1FQlVTWToKKwkJcmV0dXJuIFZNX0ZB VUxUX05PUEFHRTsKKworCWNhc2UgLUVOT01FTToKKwkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKKwl9 CisKKwlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworfQorCitpbnQgc2RybV9nZW1fZ2V0X3BhZ2Vz KHN0cnVjdCBzZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwor CisJaWYgKG9iai0+cGFnZXMpCisJCXJldHVybiAwOworCisJcGFnZXMgPSBkcm1fZ2VtX2dldF9w YWdlcygmb2JqLT5iYXNlKTsKKwlpZiAoSVNfRVJSKHBhZ2VzKSkKKwkJcmV0dXJuIFBUUl9FUlIo cGFnZXMpOworCisJb2JqLT5wYWdlcyA9IHBhZ2VzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIHNkcm1fZ2VtX3B1dF9wYWdlcyhzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmopCit7 CisJaWYgKCFvYmotPnBhZ2VzKQorCQlyZXR1cm47CisKKwlkcm1fZ2VtX3B1dF9wYWdlcygmb2Jq LT5iYXNlLCBvYmotPnBhZ2VzLCBmYWxzZSwgZmFsc2UpOworCW9iai0+cGFnZXMgPSBOVUxMOwor fQorCitpbnQgc2RybV9nZW1fdm1hcChzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmopCit7CisJ aW50IHBhZ2VfY291bnQgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKKwlpbnQgcmV0Owor CisJaWYgKG9iai0+dm1hcHBpbmcpCisJCXJldHVybiAwOworCisJcmV0ID0gc2RybV9nZW1fZ2V0 X3BhZ2VzKG9iaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iai0+dm1hcHBpbmcg PSB2bWFwKG9iai0+cGFnZXMsIHBhZ2VfY291bnQsIDAsIFBBR0VfS0VSTkVMKTsKKwlpZiAoIW9i ai0+dm1hcHBpbmcpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIHNkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmopCit7CisJ dnVubWFwKG9iai0+dm1hcHBpbmcpOworCW9iai0+dm1hcHBpbmcgPSBOVUxMOworCisJc2RybV9n ZW1fcHV0X3BhZ2VzKG9iaik7Cit9CisKK3ZvaWQgc2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnb2JqKQoreworCXN0cnVjdCBzZHJtX2dlbV9vYmplY3QgKm9iaiA9 IHRvX3Nkcm1fYm8oZ29iaik7CisKKwlpZiAob2JqLT52bWFwcGluZykKKwkJc2RybV9nZW1fdnVu bWFwKG9iaik7CisKKwlpZiAob2JqLT5wYWdlcykKKwkJc2RybV9nZW1fcHV0X3BhZ2VzKG9iaik7 CisKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKGdvYmopOworCWtmcmVlKG9iaik7Cit9CisKK2lu dCBzZHJtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLCBzdHJ1Y3QgZHJt X2RldmljZSAqZGRldiwKKwkJCSB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQpCit7 CisJc3RydWN0IHNkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z29iajsKKwlpbnQgcmV0OworCisJZ29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZmlsZSwg aGFuZGxlKTsKKwlpZiAoIWdvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJb2JqID0gdG9fc2Ry bV9ibyhnb2JqKTsKKworCXJldCA9IHNkcm1fZ2VtX2dldF9wYWdlcyhvYmopOworCWlmIChyZXQp CisJCWdvdG8gb3V0X3VucmVmOworCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQo Z29iaik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5yZWY7CisKKwkqb2Zmc2V0ID0gZHJtX3Zt YV9ub2RlX29mZnNldF9hZGRyKCZnb2JqLT52bWFfbm9kZSk7CisKK291dF91bnJlZjoKKwlkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKKworCXJldHVybiByZXQ7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9rbXMuYyBi L2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2ttcy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZGMzZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9rbXMuYwpAQCAtMCwwICsxLDIzNCBAQAorLyoK KyAqIFNpbXBsZURSTSBmaXJtd2FyZSBmcmFtZWJ1ZmZlciBkcml2ZXIKKyAqIENvcHlyaWdodCAo YykgMjAxMi0yMDE0IERhdmlkIEhlcnJtYW5uIDxkaC5oZXJybWFubkBnbWFpbC5jb20+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+CisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAic2ltcGxlZHJtLmgiCisKK3N0YXRpYyBjb25z dCB1aW50MzJfdCBzZHJtX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1f Rk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCit9OworCitzdGF0aWMgaW50 IHNkcm1fY29ubl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4pCit7CisJc3Ry dWN0IHNkcm1fZGV2aWNlICpzZHJtID0gY29ubi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKworCW1vZGUgPSBkcm1fY3Z0X21vZGUoc2RybS0+ZGRl diwgc2RybS0+ZmJfd2lkdGgsIHNkcm0tPmZiX2hlaWdodCwKKwkJCSAgICA2MCwgZmFsc2UsIGZh bHNlLCBmYWxzZSk7CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKworCW1vZGUtPnR5cGUgPSBE Uk1fTU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2Rl X3NldF9uYW1lKG1vZGUpOworCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubiwgbW9kZSk7CisKKwly ZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9m dW5jcyBzZHJtX2Nvbm5faGZ1bmNzID0geworCS5nZXRfbW9kZXMgPSBzZHJtX2Nvbm5fZ2V0X21v ZGVzLAorCS5iZXN0X2VuY29kZXIgPSBkcm1fYXRvbWljX2hlbHBlcl9iZXN0X2VuY29kZXIsCit9 OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzZHJtX2Nvbm5fZGV0ZWN0KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCS8qCisJ ICogV2Ugc2ltdWxhdGUgYW4gYWx3YXlzIGNvbm5lY3RlZCBtb25pdG9yLiBzaW1wbGUtZmIgZG9l c24ndAorCSAqIHByb3ZpZGUgYW55IHdheSB0byBkZXRlY3Qgd2hldGhlciB0aGUgY29ubmVjdG9y IGlzIGFjdGl2ZS4gSGVuY2UsCisJICogc2lnbmFsIERSTSBjb3JlIHRoYXQgaXQgaXMgYWx3YXlz IGNvbm5lY3RlZC4KKwkgKi8KKworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHNkcm1fY29ubl9v cHMgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkucmVz ZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmRldGVjdCA9IHNkcm1f Y29ubl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25u ZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCisJLmF0b21p Y19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRl X3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2RybV9kZXZp Y2UgKgorcGlwZV90b19zZHJtKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBpcGUsIHN0cnVjdCBzZHJtX2RldmljZSwgcGlwZSk7 Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJaWYgKGNydGMtPnN0YXRlICYmIGNydGMtPnN0YXRlLT5ldmVudCkg eworCQlzcGluX2xvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCQlkcm1fY3J0Y19z ZW5kX3ZibGFua19ldmVudChjcnRjLCBjcnRjLT5zdGF0ZS0+ZXZlbnQpOworCQlzcGluX3VubG9j a19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5V TEw7CisJfQorfQorCit2b2lkIHNkcm1fZGlzcGxheV9waXBlX3VwZGF0ZShzdHJ1Y3QgZHJtX3Np bXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBpcGUtPnBs YW5lLnN0YXRlLT5mYjsKKwlzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0gPSBwaXBlX3RvX3Nkcm0o cGlwZSk7CisKKwlzZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoJnBpcGUtPmNydGMpOworCisJ aWYgKGZiKSB7CisJCXBpcGUtPnBsYW5lLmZiID0gZmI7CisJCXNkcm1fZGlydHlfYWxsX2xvY2tl ZChzZHJtKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fZGlzcGxheV9waXBlX2VuYWJsZShz dHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkJICAgICBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc2RybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50 KCZwaXBlLT5jcnRjKTsKK30KKworc3RhdGljIHZvaWQgc2RybV9kaXNwbGF5X3BpcGVfZGlzYWJs ZShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUpCit7CisJc2RybV9jcnRjX3Nl bmRfdmJsYW5rX2V2ZW50KCZwaXBlLT5jcnRjKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBzZHJtX3BpcGVfZnVuY3MgPSB7CisJLnVwZGF0 ZSA9IHNkcm1fZGlzcGxheV9waXBlX3VwZGF0ZSwKKwkuZW5hYmxlID0gc2RybV9kaXNwbGF5X3Bp cGVfZW5hYmxlLAorCS5kaXNhYmxlID0gc2RybV9kaXNwbGF5X3BpcGVfZGlzYWJsZSwKK307CisK K3N0YXRpYyBpbnQgc2RybV9mYl9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLAorCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLAorCQkJCSB1bnNpZ25lZCBpbnQgKmhh bmRsZSkKK3sKKwlzdHJ1Y3Qgc2RybV9mcmFtZWJ1ZmZlciAqc2ZiID0gdG9fc2RybV9mYihmYik7 CisKKwlyZXR1cm4gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGRmaWxlLCAmc2ZiLT5vYmotPmJhc2Us IGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qgc2RybV9mcmFtZWJ1ZmZlciAqc2ZiID0gdG9fc2Ry bV9mYihmYik7CisKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7CisJZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnNmYi0+b2JqLT5iYXNlKTsKKwlrZnJlZShzZmIpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBzZHJtX2ZiX29w cyA9IHsKKwkuY3JlYXRlX2hhbmRsZSA9IHNkcm1fZmJfY3JlYXRlX2hhbmRsZSwKKwkuZGlydHkg PSBzZHJtX2RpcnR5LAorCS5kZXN0cm95ID0gc2RybV9mYl9kZXN0cm95LAorfTsKKworaW50IHNk cm1fZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgc3RydWN0IHNkcm1fZnJhbWVidWZm ZXIgKmZiLAorCQkgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAorCQkg c3RydWN0IHNkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWZiLT5vYmogPSBvYmo7CisJZHJtX2hl bHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZmYi0+YmFzZSwgbW9kZV9jbWQpOworCisJcmV0dXJu IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRkZXYsICZmYi0+YmFzZSwgJnNkcm1fZmJfb3BzKTsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKnNkcm1fZmJfY3JlYXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLAorCQkJ CQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqY21kKQoreworCXN0cnVjdCBz ZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmo7CisJaW50 IHJldDsKKworCWlmIChjbWQtPmZsYWdzKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwor CWdvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJ aWYgKCFnb2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWZiID0ga3phbGxvYyhz aXplb2YoKmZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYikgeworCQlyZXQgPSAtRU5PTUVNOwor CQlnb3RvIGVycl91bnJlZjsKKwl9CisKKwlyZXQgPSBzZHJtX2ZiX2luaXQoZGRldiwgZmIsIGNt ZCwgdG9fc2RybV9ibyhnb2JqKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCXJl dCA9IHNkcm1fZ2VtX3ZtYXAoZmItPm9iaik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsK KworCURSTV9ERUJVR19LTVMoIltGQjolZF0gcGl4ZWxfZm9ybWF0OiAlc1xuIiwgZmItPmJhc2Uu YmFzZS5pZCwKKwkJICAgICAgZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+YmFzZS5waXhlbF9mb3Jt YXQpKTsKKworCXJldHVybiAmZmItPmJhc2U7CisKK2Vycl9mcmVlOgorCWtmcmVlKGZiKTsKK2Vy cl91bnJlZjoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKKwor CXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnX2Z1bmNzIHNkcm1fbW9kZV9jb25maWdfb3BzID0geworCS5mYl9jcmVhdGUgPSBzZHJt X2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJ LmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCit9OworCitpbnQgc2Ry bV9kcm1fbW9kZXNldF9pbml0KHN0cnVjdCBzZHJtX2RldmljZSAqc2RybSkKK3sKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubiA9ICZzZHJtLT5jb25uOworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2ID0gc2RybS0+ZGRldjsKKwlpbnQgcmV0OworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZGRl dik7CisJZGRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gc2RybS0+ZmJfd2lkdGg7CisJZGRl di0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gc2RybS0+ZmJfd2lkdGg7CisJZGRldi0+bW9kZV9j b25maWcubWluX2hlaWdodCA9IHNkcm0tPmZiX2hlaWdodDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5t YXhfaGVpZ2h0ID0gc2RybS0+ZmJfaGVpZ2h0OworCWRkZXYtPm1vZGVfY29uZmlnLnByZWZlcnJl ZF9kZXB0aCA9IHNkcm0tPmZiX2JwcDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZzZHJt X21vZGVfY29uZmlnX29wczsKKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uLCAmc2Ry bV9jb25uX2hmdW5jcyk7CisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRkZXYsIGNvbm4sICZz ZHJtX2Nvbm5fb3BzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCk7CisJaWYgKHJl dCkKKwkJZ290byBlcnJfY2xlYW51cDsKKworCXJldCA9IGRybV9zaW1wbGVfZGlzcGxheV9waXBl X2luaXQoZGRldiwgJnNkcm0tPnBpcGUsICZzZHJtX3BpcGVfZnVuY3MsCisJCQkJCSAgIHNkcm1f Zm9ybWF0cywKKwkJCQkJICAgQVJSQVlfU0laRShzZHJtX2Zvcm1hdHMpLCBjb25uKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9jbGVhbnVwOworCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRkZXYp OworCisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVwOgorCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVw KGRkZXYpOworCisJcmV0dXJuIHJldDsKK30KLS0KMi44LjIKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=