From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyungwon Hwang Subject: [PATCH v5 03/12] drm/exynos: mic: add MIC driver Date: Fri, 10 Apr 2015 14:55:21 +0900 Message-ID: <1428645330-1043-4-git-send-email-human.hwang@samsung.com> References: <1428645330-1043-1-git-send-email-human.hwang@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1428645330-1043-1-git-send-email-human.hwang@samsung.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, devicetree@vger.kernel.org, inki.dae@samsung.com, daniel@fooishbar.org Cc: dh09.lee@samsung.com, sw0312.kim@samsung.com, Hyungwon Hwang , cw00.choi@samsung.com List-Id: devicetree@vger.kernel.org TUlDKE1vYmlsZSBpbWFnZSBjb21wcmVzc29yKSBpcyBuZXdseSBhZGRlZCBJUCBpbiBFeHlub3M1 NDMzLiBNSUMKcmVzaWRlcyBiZXR3ZWVuIGRlY29uIGFuZCBtaXBpIGRzaW0sIGFuZCBjb21wcmVz c2VzIGZyYW1lIGRhdGEgYnkgNTAlLgpXaXRoIGRzaSwgbm90IGRpc3BsYXkgcG9ydCwgdG8gc2Vu ZCBmcmFtZSBkYXRhIHRvIHRoZSBwYW5lbCwgdGhlCmJhbmR3aWR0aCBpcyBub3QgZW5vdWdoLiBU aGF0IGlzIHdoeSB0aGlzIGNvbXByZXNzb3IgaXMgaW50cm9kdWNlZC4KClNpZ25lZC1vZmYtYnk6 IEh5dW5nd29uIEh3YW5nIDxodW1hbi5od2FuZ0BzYW1zdW5nLmNvbT4KLS0tCkNoYW5nZXMgZm9y IHYyOgotIG1ha2UgbWljIGRyaXZlciB0byBiZSByZWdpc3RlcmVkIGJ5IGV4eW5vcyBkcm0gZHJp dmVyIGluc3RlYWQgYXMgYSBtb2R1bGUKZHJpdmVyCi0gY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiBv ZiBtaWMgZHJpdmVyIGluIGRvY3VtZW50YXRpb24KLSBhZGQgbW9kdWxlIGF1dGhvciBhdCB0aGUg dG9wIG9mIHRoZSBzb3VyY2UgZmlsZSByZW1vdmluZyBNT0RVTEVfT1dORVIsCk1PRFVMRV9ERVND UklQVElPTiwgTU9EVUxFX0xJQ0VOU0UKCkNoYW5nZXMgZm9yIHYzOgotIG1vdmUgaWYgc3RhdGVt ZW50IG91dCBvZiBmdW5jdGlvbiwgc28gdGhhdCB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZAp1 bm5lY2Vzc2FyaWx5Ci0gTWFrZSBpdCB1c2Ugc3lzY29uIGZyYW1ld29yayBmb3IgY29udHJvbGxp bmcgc3lzdGVtIHJlZ2lzdGVyCgpDaGFuZ2VzIGZvciB2NDoKLSBOb25lCgpDaGFuZ2VzIGZvciB2 NToKLSBOb25lCiAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby9leHlub3MtbWljLnR4dCAg ICAgICB8ICA1MSArKysKIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyAgICAgICAgICAg ICAgICAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9k cnYuYyAgICAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2Ry bV9kcnYuaCAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9z X2RybV9taWMuYyAgICAgICAgICAgIHwgNDkwICsrKysrKysrKysrKysrKysrKysrKwogNiBmaWxl cyBjaGFuZ2VkLCA1NTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby9leHlub3MtbWljLnR4dAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9taWMuYwoKZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby9leHlub3MtbWlj LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby9leHlub3MtbWlj LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmJhMmVlCi0tLSAvZGV2 L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZpZGVvL2V4eW5v cy1taWMudHh0CkBAIC0wLDAgKzEsNTEgQEAKK0RldmljZS1UcmVlIGJpbmRpbmdzIGZvciBTYW1z dW5nIEV4eW5vcyBTb0MgbW9iaWxlIGltYWdlIGNvbXByZXNzb3IgKE1JQykKKworTUlDIChtb2Jp bGUgaW1hZ2UgY29tcHJlc3NvcikgcmVzaWRlcyBiZXR3ZWVuIGRlY29uIGFuZCBtaXBpIGRzaS4g TWlwaSBkc2kgaXMKK25vdCBjYXBhYmxlIHRvIHRyYW5zZmVyIGhpZ2ggcmVzb2x0dWlvbiBmcmFt ZSBkYXRhIGFzIGRlY29uIGNhbiBzZW5kLiBNSUMKK3NvbHZlcyB0aGlzIHByb2JsZW0gYnkgY29t cHJlc3NpbmcgdGhlIGZyYW1lIGRhdGEgYnkgMS8yIGJlZm9yZSBpdCBpcwordHJhbnNmZXJyZWQg dGhyb3VnaCBtaXBpIGRzaS4gVGhlIGNvbXByZXNzZWQgZnJhbWUgZGF0YSBtdXN0IGJlIHVuY29t cHJlc3NlZCBpbgordGhlIHBhbmVsIFBDQi4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29t cGF0aWJsZTogdmFsdWUgc2hvdWxkIGJlICJzYW1zdW5nLGV4eW5vczU0MzMtbWljIi4KKy0gcmVn OiBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgTUlDIHJlZ2lzdGVycyBz ZXQgYW5kIHN5c3RlbQorICAgICAgIHJlZ2lzdGVyIG9mIG1pYy4KKy0gY2xvY2tzOiBtdXN0IGlu Y2x1ZGUgY2xvY2sgc3BlY2lmaWVycyBjb3JyZXNwb25kaW5nIHRvIGVudHJpZXMgaW4gdGhlCisJ ICBjbG9jay1uYW1lcyBwcm9wZXJ0eS4KKy0gY2xvY2stbmFtZXM6IGxpc3Qgb2YgY2xvY2sgbmFt ZXMgc29ydGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBjbG9ja3MKKwkgICAgICAgcHJvcGVy dHkuIE11c3QgY29udGFpbiAicGNsa19taWMwIiwgInNjbGtfcmdiX3ZjbGtfdG9fbWljMCIuCist IHNhbXN1bmcsZGlzcC1zeXNjb246IHRoZSByZWZlcmVuY2Ugbm9kZSBmb3Igc3lzY29uIGZvciBE SVNQIGJsb2NrLgorLSBwb3J0czogY29udGFpbnMgYSBwb3J0IHdoaWNoIGlzIGNvbm5lY3RlZCB0 byBkZWNvbiBub2RlIGFuZCBkc2kgbm9kZS4KKwkgYWRkcmVzcy1jZWxscyBhbmQgc2l6ZS1jZWxs cyBtdXN0IDEgYW5kIDAsIHJlc3BlY3RpdmVseS4KKy0gcG9ydDogY29udGFpbnMgYW4gZW5kcG9p bnQgbm9kZSB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIGVuZHBvaW50IGluIHRoZQorCWRlY29u IG5vZGUgb3IgZHNpIG5vZGUuIFRoZSByZWcgdmFsdWUgbXVzdCBiZSAwIGFuZCAxIHJlc3BlY3Rp dmVseS4KKworRXhhbXBsZToKK1NvQyBzcGVjaWZpYyBEVCBlbnRyeToKK21pYzogbWljQDEzOTMw MDAwIHsKKwljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQzMy1taWMiOworCXJlZyA9IDww eDEzOTMwMDAwIDB4NDg+OworCWNsb2NrcyA9IDwmY211X2Rpc3AgQ0xLX1BDTEtfTUlDMD4sCisJ ICAgICAgIDwmY211X2Rpc3AgQ0xLX1NDTEtfUkdCX1ZDTEtfVE9fTUlDMD47CisJY2xvY2stbmFt ZXMgPSAicGNsa19taWMwIiwgInNjbGtfcmdiX3ZjbGtfdG9fbWljMCI7CisJc2Ftc3VuZyxkaXNw LXN5c2NvbiA9IDwmc3lzY29uX2Rpc3A+OworCisJcG9ydHMgeworCQkjYWRkcmVzcy1jZWxscyA9 IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcG9ydEAwIHsKKwkJCXJlZyA9IDwwPjsK KwkJCW1pY190b19kZWNvbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmZGVj b25fdG9fbWljPjsKKwkJCX07CisJCX07CisKKwkJcG9ydEAxIHsKKwkJCXJlZyA9IDwxPjsKKwkJ CW1pY190b19kc2k6IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRzaV90b19t aWM+OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9l eHlub3MvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwppbmRleCBkZDZh ZTIxLi4zZjY0OWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL0tjb25maWcK KysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnCkBAIC0xMDMsMyArMTAzLDkgQEAg Y29uZmlnIERSTV9FWFlOT1NfR1NDCiAJZGVwZW5kcyBvbiBEUk1fRVhZTk9TX0lQUCAmJiBBUkNI X0VYWU5PUzUgJiYgIUFSQ0hfTVVMVElQTEFURk9STQogCWhlbHAKIAkgIENob29zZSB0aGlzIG9w dGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgRXh5bm9zIEdTQyBmb3IgRFJNLgorCitjb25maWcgRFJN X0VYWU5PU19NSUMKKwlib29sICJFeHlub3MgRFJNIE1JQyIKKwlkZXBlbmRzIG9uIChEUk1fRVhZ Tk9TICYmIERSTV9FWFlOT1M1NDMzX0RFQ09OKQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlv biBpZiB5b3Ugd2FudCB0byB1c2UgRXh5bm9zIE1JQyBmb3IgRFJNLgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2V4eW5vcy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvTWFr ZWZpbGUKaW5kZXggZmJkMDg0ZC4uN2RlMGIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2V4eW5vcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL01ha2VmaWxlCkBA IC0yMiw1ICsyMiw2IEBAIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9TX0lQUCkJKz0gZXh5 bm9zX2RybV9pcHAubwogZXh5bm9zZHJtLSQoQ09ORklHX0RSTV9FWFlOT1NfRklNQykJKz0gZXh5 bm9zX2RybV9maW1jLm8KIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9TX1JPVEFUT1IpCSs9 IGV4eW5vc19kcm1fcm90YXRvci5vCiBleHlub3Nkcm0tJChDT05GSUdfRFJNX0VYWU5PU19HU0Mp CSs9IGV4eW5vc19kcm1fZ3NjLm8KK2V4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9TX01JQykg ICAgICs9IGV4eW5vc19kcm1fbWljLm8KIAogb2JqLSQoQ09ORklHX0RSTV9FWFlOT1MpCQkrPSBl eHlub3Nkcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJt X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCmluZGV4IDc4 ZWY0OTcuLjEwNWZjMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9z X2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMK QEAgLTUzNSw2ICs1MzUsOSBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqY29uc3Qg ZXh5bm9zX2RybV9rbXNfZHJpdmVyc1tdID0gewogI2lmZGVmIENPTkZJR19EUk1fRVhZTk9TN19E RUNPTgogCSZkZWNvbl9kcml2ZXIsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfRFJNX0VYWU5PU19N SUMKKwkmbWljX2RyaXZlciwKKyNlbmRpZgogI2lmZGVmIENPTkZJR19EUk1fRVhZTk9TX0RQCiAJ JmRwX2RyaXZlciwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9l eHlub3NfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5o CmluZGV4IDE0NzczN2EuLjQ1Njk4NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlu b3MvZXh5bm9zX2RybV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19k cm1fZHJ2LmgKQEAgLTM1NSw0ICszNTUsNSBAQCBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBmaW1jX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvdGF0b3JfZHJp dmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ3NjX2RyaXZlcjsKIGV4dGVybiBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwcF9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBtaWNfZHJpdmVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19k cm1fbWljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5NGVhYgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9taWMuYwpA QCAtMCwwICsxLDQ5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBTYW1zdW5nIEVsZWN0 cm9uaWNzIENvLkx0ZAorICogQXV0aG9yczoKKyAqCUh5dW5nd29uIEh3YW5nIDxodW1hbi5od2Fu Z0BzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9ucgorICovCisKKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx2aWRlby9vZl92aWRlb21vZGUuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2Rl Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K KyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVk ZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51 eC9yZWdtYXAuaD4KKworLyogU3lzcmVnIHJlZ2lzdGVycyBmb3IgTUlDICovCisjZGVmaW5lIERT RF9DRkdfTVVYCTB4MTAwNAorI2RlZmluZSBNSUMwX1JHQl9NVVgJKDEgPDwgMCkKKyNkZWZpbmUg TUlDMF9JODBfTVVYCSgxIDw8IDEpCisjZGVmaW5lIE1JQzBfT05fTVVYCSgxIDw8IDUpCisKKy8q IE1JQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUlDX09QCQkJCTB4MAorI2RlZmluZSBNSUNfSVBf VkVSCQkJMHgwMDA0CisjZGVmaW5lIE1JQ19WX1RJTUlOR18wCQkJMHgwMDA4CisjZGVmaW5lIE1J Q19WX1RJTUlOR18xCQkJMHgwMDBDCisjZGVmaW5lIE1JQ19JTUdfU0laRQkJCTB4MDAxMAorI2Rl ZmluZSBNSUNfSU5QVVRfVElNSU5HXzAJCTB4MDAxNAorI2RlZmluZSBNSUNfSU5QVVRfVElNSU5H XzEJCTB4MDAxOAorI2RlZmluZSBNSUNfMkRfT1VUUFVUX1RJTUlOR18wCQkweDAwMUMKKyNkZWZp bmUgTUlDXzJEX09VVFBVVF9USU1JTkdfMQkJMHgwMDIwCisjZGVmaW5lIE1JQ18yRF9PVVRQVVRf VElNSU5HXzIJCTB4MDAyNAorI2RlZmluZSBNSUNfM0RfT1VUUFVUX1RJTUlOR18wCQkweDAwMjgK KyNkZWZpbmUgTUlDXzNEX09VVFBVVF9USU1JTkdfMQkJMHgwMDJDCisjZGVmaW5lIE1JQ18zRF9P VVRQVVRfVElNSU5HXzIJCTB4MDAzMAorI2RlZmluZSBNSUNfQ09SRV9QQVJBXzAJCQkweDAwMzQK KyNkZWZpbmUgTUlDX0NPUkVfUEFSQV8xCQkJMHgwMDM4CisjZGVmaW5lIE1JQ19DVENfQ1RSTAkJ CTB4MDA0MAorI2RlZmluZSBNSUNfUkRfREFUQQkJCTB4MDA0NAorCisjZGVmaW5lIE1JQ19VUERf UkVHCQkJKDEgPDwgMzEpCisjZGVmaW5lIE1JQ19PTl9SRUcJCQkoMSA8PCAzMCkKKyNkZWZpbmUg TUlDX1REX09OX1JFRwkJCSgxIDw8IDI5KQorI2RlZmluZSBNSUNfQlNfQ0hHX09VVAkJCSgxIDw8 IDE2KQorI2RlZmluZSBNSUNfVklERU9fVFlQRSh4KQkJKCgoeCkgJiAweGYpIDw8IDEyKQorI2Rl ZmluZSBNSUNfUFNSX0VOCQkJKDEgPDwgNSkKKyNkZWZpbmUgTUlDX1NXX1JTVAkJCSgxIDw8IDQp CisjZGVmaW5lIE1JQ19BTExfUlNUCQkJKDEgPDwgMykKKyNkZWZpbmUgTUlDX0NPUkVfVkVSX0NP TlRST0wJCSgxIDw8IDIpCisjZGVmaW5lIE1JQ19NT0RFX1NFTF9DT01NQU5EX01PREUJKDEgPDwg MSkKKyNkZWZpbmUgTUlDX01PREVfU0VMX01BU0sJCSgxIDw8IDEpCisjZGVmaW5lIE1JQ19DT1JF X0VOCQkJKDEgPDwgMCkKKworI2RlZmluZSBNSUNfVl9QVUxTRV9XSURUSCh4KQkJKCgoeCkgJiAw eDNmZmYpIDw8IDE2KQorI2RlZmluZSBNSUNfVl9QRVJJT0RfTElORSh4KQkJKCh4KSAmIDB4M2Zm ZikKKworI2RlZmluZSBNSUNfVkJQX1NJWkUoeCkJCQkoKCh4KSAmIDB4M2ZmZikgPDwgMTYpCisj ZGVmaW5lIE1JQ19WRlBfU0laRSh4KQkJCSgoeCkgJiAweDNmZmYpCisKKyNkZWZpbmUgTUlDX0lN R19WX1NJWkUoeCkJCSgoKHgpICYgMHgzZmZmKSA8PCAxNikKKyNkZWZpbmUgTUlDX0lNR19IX1NJ WkUoeCkJCSgoeCkgJiAweDNmZmYpCisKKyNkZWZpbmUgTUlDX0hfUFVMU0VfV0lEVEhfSU4oeCkJ CSgoKHgpICYgMHgzZmZmKSA8PCAxNikKKyNkZWZpbmUgTUlDX0hfUEVSSU9EX1BJWEVMX0lOKHgp CSgoeCkgJiAweDNmZmYpCisKKyNkZWZpbmUgTUlDX0hCUF9TSVpFX0lOKHgpCQkoKCh4KSAmIDB4 M2ZmZikgPDwgMTYpCisjZGVmaW5lIE1JQ19IRlBfU0laRV9JTih4KQkJKCh4KSAmIDB4M2ZmZikK KworI2RlZmluZSBNSUNfSF9QVUxTRV9XSURUSF8yRCh4KQkJKCgoeCkgJiAweDNmZmYpIDw8IDE2 KQorI2RlZmluZSBNSUNfSF9QRVJJT0RfUElYRUxfMkQoeCkJKCh4KSAmIDB4M2ZmZikKKworI2Rl ZmluZSBNSUNfSEJQX1NJWkVfMkQoeCkJCSgoKHgpICYgMHgzZmZmKSA8PCAxNikKKyNkZWZpbmUg TUlDX0hGUF9TSVpFXzJEKHgpCQkoKHgpICYgMHgzZmZmKQorCisjZGVmaW5lIE1JQ19CU19TSVpF XzJEKHgpCSgoeCkgJiAweDNmZmYpCisKK2VudW0geworCUVORFBPSU5UX0RFQ09OX05PREUsCisJ RU5EUE9JTlRfRFNJX05PREUsCisJTlVNX0VORFBPSU5UUworfTsKKworc3RhdGljIGNoYXIgKmNs a19uYW1lc1tdID0geyAicGNsa19taWMwIiwgInNjbGtfcmdiX3ZjbGtfdG9fbWljMCIgfTsKKyNk ZWZpbmUgTlVNX0NMS1MJCUFSUkFZX1NJWkUoY2xrX25hbWVzKQorc3RhdGljIERFRklORV9NVVRF WChtaWNfbXV0ZXgpOworCitzdHJ1Y3QgZXh5bm9zX21pYyB7CisJc3RydWN0IGRldmljZSAqZGV2 OworCXZvaWQgX19pb21lbSAqcmVnOworCXN0cnVjdCByZWdtYXAgKnN5c3JlZzsKKwlzdHJ1Y3Qg Y2xrICpjbGtzW05VTV9DTEtTXTsKKworCWJvb2wgaTgwX21vZGU7CisJc3RydWN0IHZpZGVvbW9k ZSB2bTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9icmlkZ2Ug YnJpZGdlOworCisJYm9vbCBlbmFibGVkOworfTsKKworc3RhdGljIHZvaWQgbWljX3NldF9wYXRo KHN0cnVjdCBleHlub3NfbWljICptaWMsIGJvb2wgZW5hYmxlKQoreworCWludCByZXQ7CisJdW5z aWduZWQgaW50IHZhbDsKKworCXJldCA9IHJlZ21hcF9yZWFkKG1pYy0+c3lzcmVnLCBEU0RfQ0ZH X01VWCwgJnZhbCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIm1pYzogRmFpbGVkIHRvIHJl YWQgc3lzdGVtIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlbmFibGUpIHsK KwkJaWYgKG1pYy0+aTgwX21vZGUpCisJCQl2YWwgfD0gTUlDMF9JODBfTVVYOworCQllbHNlCisJ CQl2YWwgfD0gTUlDMF9SR0JfTVVYOworCisJCXZhbCB8PSAgTUlDMF9PTl9NVVg7CisJfSBlbHNl CisJCXZhbCAmPSB+KE1JQzBfUkdCX01VWCB8IE1JQzBfSTgwX01VWCB8IE1JQzBfT05fTVVYKTsK KworCXJlZ21hcF93cml0ZShtaWMtPnN5c3JlZywgRFNEX0NGR19NVVgsIHZhbCk7CisJaWYgKHJl dCkKKwkJRFJNX0VSUk9SKCJtaWM6IEZhaWxlZCB0byByZWFkIHN5c3RlbSByZWdpc3RlclxuIik7 Cit9CisKK3N0YXRpYyBpbnQgbWljX3N3X3Jlc2V0KHN0cnVjdCBleHlub3NfbWljICptaWMpCit7 CisJdW5zaWduZWQgaW50IHJldHJ5ID0gMTAwOworCWludCByZXQ7CisKKwl3cml0ZWwoTUlDX1NX X1JTVCwgbWljLT5yZWcgKyBNSUNfT1ApOworCisJd2hpbGUgKHJldHJ5LS0gPiAwKSB7CisJCXJl dCA9IHJlYWRsKG1pYy0+cmVnICsgTUlDX09QKTsKKwkJaWYgKCEocmV0ICYgTUlDX1NXX1JTVCkp CisJCQlyZXR1cm4gMDsKKworCQl1ZGVsYXkoMTApOworCX0KKworCXJldHVybiAtRVRJTUVET1VU OworfQorCitzdGF0aWMgdm9pZCBtaWNfc2V0X3BvcmNoX3RpbWluZyhzdHJ1Y3QgZXh5bm9zX21p YyAqbWljKQoreworCXN0cnVjdCB2aWRlb21vZGUgdm0gPSBtaWMtPnZtOworCXUzMiByZWc7CisK KwlyZWcgPSBNSUNfVl9QVUxTRV9XSURUSCh2bS52c3luY19sZW4pICsKKwkJTUlDX1ZfUEVSSU9E X0xJTkUodm0udnN5bmNfbGVuICsgdm0udmFjdGl2ZSArCisJCQkJdm0udmJhY2tfcG9yY2ggKyB2 bS52ZnJvbnRfcG9yY2gpOworCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDX1ZfVElNSU5HXzAp OworCisJcmVnID0gTUlDX1ZCUF9TSVpFKHZtLnZiYWNrX3BvcmNoKSArCisJCU1JQ19WRlBfU0la RSh2bS52ZnJvbnRfcG9yY2gpOworCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDX1ZfVElNSU5H XzEpOworCisJcmVnID0gTUlDX1ZfUFVMU0VfV0lEVEgodm0uaHN5bmNfbGVuKSArCisJCU1JQ19W X1BFUklPRF9MSU5FKHZtLmhzeW5jX2xlbiArIHZtLmhhY3RpdmUgKworCQkJCXZtLmhiYWNrX3Bv cmNoICsgdm0uaGZyb250X3BvcmNoKTsKKwl3cml0ZWwocmVnLCBtaWMtPnJlZyArIE1JQ19JTlBV VF9USU1JTkdfMCk7CisKKwlyZWcgPSBNSUNfVkJQX1NJWkUodm0uaGJhY2tfcG9yY2gpICsKKwkJ TUlDX1ZGUF9TSVpFKHZtLmhmcm9udF9wb3JjaCk7CisJd3JpdGVsKHJlZywgbWljLT5yZWcgKyBN SUNfSU5QVVRfVElNSU5HXzEpOworfQorCitzdGF0aWMgdm9pZCBtaWNfc2V0X2ltZ19zaXplKHN0 cnVjdCBleHlub3NfbWljICptaWMpCit7CisJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmbWljLT52 bTsKKwl1MzIgcmVnOworCisJcmVnID0gTUlDX0lNR19IX1NJWkUodm0tPmhhY3RpdmUpICsKKwkJ TUlDX0lNR19WX1NJWkUodm0tPnZhY3RpdmUpOworCisJd3JpdGVsKHJlZywgbWljLT5yZWcgKyBN SUNfSU1HX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBtaWNfc2V0X291dHB1dF90aW1pbmcoc3Ry dWN0IGV4eW5vc19taWMgKm1pYykKK3sKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtID0gbWljLT52bTsK Kwl1MzIgcmVnLCBic19zaXplXzJkOworCisJRFJNX0RFQlVHKCJ3OiAldSwgaDogJXVcbiIsIHZt LmhhY3RpdmUsIHZtLnZhY3RpdmUpOworCWJzX3NpemVfMmQgPSAoKHZtLmhhY3RpdmUgPj4gMikg PDwgMSkgKyAodm0udmFjdGl2ZSAlIDQpOworCXJlZyA9IE1JQ19CU19TSVpFXzJEKGJzX3NpemVf MmQpOworCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDXzJEX09VVFBVVF9USU1JTkdfMik7CisK KwlpZiAoIW1pYy0+aTgwX21vZGUpIHsKKwkJcmVnID0gTUlDX0hfUFVMU0VfV0lEVEhfMkQodm0u aHN5bmNfbGVuKSArCisJCQlNSUNfSF9QRVJJT0RfUElYRUxfMkQodm0uaHN5bmNfbGVuICsgYnNf c2l6ZV8yZCArCisJCQkJCXZtLmhiYWNrX3BvcmNoICsgdm0uaGZyb250X3BvcmNoKTsKKwkJd3Jp dGVsKHJlZywgbWljLT5yZWcgKyBNSUNfMkRfT1VUUFVUX1RJTUlOR18wKTsKKworCQlyZWcgPSBN SUNfSEJQX1NJWkVfMkQodm0uaGJhY2tfcG9yY2gpICsKKwkJCU1JQ19IX1BFUklPRF9QSVhFTF8y RCh2bS5oZnJvbnRfcG9yY2gpOworCQl3cml0ZWwocmVnLCBtaWMtPnJlZyArIE1JQ18yRF9PVVRQ VVRfVElNSU5HXzEpOworCX0KK30KKworc3RhdGljIHZvaWQgbWljX3NldF9yZWdfb24oc3RydWN0 IGV4eW5vc19taWMgKm1pYywgYm9vbCBlbmFibGUpCit7CisJdTMyIHJlZyA9IHJlYWRsKG1pYy0+ cmVnICsgTUlDX09QKTsKKworCWlmIChlbmFibGUpIHsKKwkJcmVnICY9IH4oTUlDX01PREVfU0VM X01BU0sgfCBNSUNfQ09SRV9WRVJfQ09OVFJPTCB8IE1JQ19QU1JfRU4pOworCQlyZWcgfD0gKE1J Q19DT1JFX0VOIHwgTUlDX0JTX0NIR19PVVQgfCBNSUNfT05fUkVHKTsKKworCQlyZWcgICY9IH5N SUNfTU9ERV9TRUxfQ09NTUFORF9NT0RFOworCQlpZiAobWljLT5pODBfbW9kZSkKKwkJCXJlZyB8 PSBNSUNfTU9ERV9TRUxfQ09NTUFORF9NT0RFOworCX0gZWxzZSB7CisJCXJlZyAmPSB+TUlDX0NP UkVfRU47CisJfQorCisJcmVnIHw9IE1JQ19VUERfUkVHOworCXdyaXRlbChyZWcsIG1pYy0+cmVn ICsgTUlDX09QKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZ2V0X3JlbW90ZV9u b2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZnJvbSwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKmVuZHBvaW50ID0gTlVMTCwgKnJlbW90ZV9ub2RlID0gTlVMTDsKKworCWVuZHBvaW50 ID0gb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MoZnJvbSwgcmVnLCAtMSk7CisJaWYgKCFl bmRwb2ludCkgeworCQlEUk1fRVJST1IoIm1pYzogRmFpbGVkIHRvIGZpbmQgcmVtb3RlIHBvcnQg ZnJvbSAlcyIsCisJCQkJZnJvbS0+ZnVsbF9uYW1lKTsKKwkJZ290byBleGl0OworCX0KKworCXJl bW90ZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7CisJ aWYgKCFyZW1vdGVfbm9kZSkgeworCQlEUk1fRVJST1IoIm1pYzogRmFpbGVkIHRvIGZpbmQgcmVt b3RlIHBvcnQgcGFyZW50IGZyb20gJXMiLAorCQkJCQkJCWZyb20tPmZ1bGxfbmFtZSk7CisJCWdv dG8gZXhpdDsKKwl9CisKK2V4aXQ6CisJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOworCXJldHVybiBy ZW1vdGVfbm9kZTsKK30KKworc3RhdGljIGludCBwYXJzZV9kdChzdHJ1Y3QgZXh5bm9zX21pYyAq bWljKQoreworCWludCByZXQgPSAwLCBpLCBqOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVtb3Rl X25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpub2Rlc1szXTsKKworCS8qCisJICogVGhlIG9y ZGVyIG9mIGVuZHBvaW50cyBkb2VzIG1hdHRlci4KKwkgKiBUaGUgZmlyc3Qgbm9kZSBtdXN0IGJl IGZvciBkZWNvbiBhbmQgdGhlIHNlY29uZCBvbmUgbXVzdCBiZSBmb3IgZHNpLgorCSAqLworCWZv ciAoaSA9IDAsIGogPSAwOyBpIDwgTlVNX0VORFBPSU5UUzsgaSsrKSB7CisJCXJlbW90ZV9ub2Rl ID0gZ2V0X3JlbW90ZV9ub2RlKG1pYy0+ZGV2LT5vZl9ub2RlLCBpKTsKKwkJaWYgKCFyZW1vdGVf bm9kZSkgeworCQkJcmV0ID0gLUVQSVBFOworCQkJZ290byBleGl0OworCQl9CisJCW5vZGVzW2or K10gPSByZW1vdGVfbm9kZTsKKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSBFTkRQT0lOVF9ERUNP Tl9OT0RFOgorCQkJLyogZGVjb24gbm9kZSAqLworCQkJaWYgKG9mX2dldF9jaGlsZF9ieV9uYW1l KHJlbW90ZV9ub2RlLAorCQkJCQkJImk4MC1pZi10aW1pbmdzIikpCisJCQkJbWljLT5pODBfbW9k ZSA9IDE7CisKKwkJCWJyZWFrOworCQljYXNlIEVORFBPSU5UX0RTSV9OT0RFOgorCQkJLyogcGFu ZWwgbm9kZSAqLworCQkJcmVtb3RlX25vZGUgPSBnZXRfcmVtb3RlX25vZGUocmVtb3RlX25vZGUs IDEpOworCQkJaWYgKCFyZW1vdGVfbm9kZSkgeworCQkJCXJldCA9IC1FUElQRTsKKwkJCQlnb3Rv IGV4aXQ7CisJCQl9CisJCQlub2Rlc1tqKytdID0gcmVtb3RlX25vZGU7CisKKwkJCXJldCA9IG9m X2dldF92aWRlb21vZGUocmVtb3RlX25vZGUsCisJCQkJCQkJJm1pYy0+dm0sIDApOworCQkJaWYg KHJldCkgeworCQkJCURSTV9FUlJPUigibWljOiBmYWlsZWQgdG8gZ2V0IHZpZGVvbW9kZSIpOwor CQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJS T1IoIm1pYzogVW5rbm93biBlbmRwb2ludCBmcm9tIE1JQyIpOworCQkJYnJlYWs7CisJCX0KKwl9 CisKK2V4aXQ6CisJd2hpbGUgKC0taiA+IC0xKQorCQlvZl9ub2RlX3B1dChub2Rlc1tqXSk7CisK KwlyZXR1cm4gcmV0OworfQorCit2b2lkIG1pY19kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpIHsgfQorCit2b2lkIG1pY19wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSkKK3sKKwlzdHJ1Y3QgZXh5bm9zX21pYyAqbWljID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0 ZTsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJm1pY19tdXRleCk7CisJaWYgKCFtaWMtPmVuYWJs ZWQpCisJCWdvdG8gYWxyZWFkeV9kaXNhYmxlZDsKKworCW1pY19zZXRfcGF0aChtaWMsIDApOwor CisJZm9yIChpID0gTlVNX0NMS1MgLSAxOyBpID4gLTE7IGktLSkKKwkJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKG1pYy0+Y2xrc1tpXSk7CisKKwltaWMtPmVuYWJsZWQgPSAwOworCithbHJlYWR5X2Rp c2FibGVkOgorCW11dGV4X3VubG9jaygmbWljX211dGV4KTsKK30KKwordm9pZCBtaWNfcHJlX2Vu YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBleHlub3NfbWljICpt aWMgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOworCWludCByZXQsIGk7CisKKwltdXRleF9sb2Nr KCZtaWNfbXV0ZXgpOworCWlmIChtaWMtPmVuYWJsZWQpCisJCWdvdG8gYWxyZWFkeV9lbmFibGVk OworCisJZm9yIChpID0gMDsgaSA8IE5VTV9DTEtTOyBpKyspIHsKKwkJcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKG1pYy0+Y2xrc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlEUk1fRVJST1Io IkZhaWxlZCB0byBlbmFibGUgY2xvY2sgKCVzKVxuIiwKKwkJCQkJCQljbGtfbmFtZXNbaV0pOwor CQkJZ290byB0dXJuX29mZl9jbGtzOworCQl9CisJfQorCisJbWljX3NldF9wYXRoKG1pYywgMSk7 CisKKwlyZXQgPSBtaWNfc3dfcmVzZXQobWljKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigi RmFpbGVkIHRvIHJlc2V0XG4iKTsKKwkJZ290byB0dXJuX29mZl9jbGtzOworCX0KKworCWlmICgh bWljLT5pODBfbW9kZSkKKwkJbWljX3NldF9wb3JjaF90aW1pbmcobWljKTsKKwltaWNfc2V0X2lt Z19zaXplKG1pYyk7CisJbWljX3NldF9vdXRwdXRfdGltaW5nKG1pYyk7CisJbWljX3NldF9yZWdf b24obWljLCAxKTsKKwltaWMtPmVuYWJsZWQgPSAxOworCW11dGV4X3VubG9jaygmbWljX211dGV4 KTsKKworCXJldHVybjsKKwordHVybl9vZmZfY2xrczoKKwl3aGlsZSAoLS1pID4gLTEpCisJCWNs a19kaXNhYmxlX3VucHJlcGFyZShtaWMtPmNsa3NbaV0pOworYWxyZWFkeV9lbmFibGVkOgorCW11 dGV4X3VubG9jaygmbWljX211dGV4KTsKK30KKwordm9pZCBtaWNfZW5hYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpIHsgfQorCit2b2lkIG1pY19kZXN0cm95KHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpCit7CisJc3RydWN0IGV4eW5vc19taWMgKm1pYyA9IGJyaWRnZS0+ZHJpdmVyX3By aXZhdGU7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZtaWNfbXV0ZXgpOworCWlmICghbWljLT5l bmFibGVkKQorCQlnb3RvIGFscmVhZHlfZGlzYWJsZWQ7CisKKwlmb3IgKGkgPSBOVU1fQ0xLUyAt IDE7IGkgPiAtMTsgaS0tKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUobWljLT5jbGtzW2ldKTsK KworYWxyZWFkeV9kaXNhYmxlZDoKKwltdXRleF91bmxvY2soJm1pY19tdXRleCk7Cit9CisKK3N0 cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG1pY19icmlkZ2VfZnVuY3MgPSB7CisJLmRpc2FibGUgPSBt aWNfZGlzYWJsZSwKKwkucG9zdF9kaXNhYmxlID0gbWljX3Bvc3RfZGlzYWJsZSwKKwkucHJlX2Vu YWJsZSA9IG1pY19wcmVfZW5hYmxlLAorCS5lbmFibGUgPSBtaWNfZW5hYmxlLAorfTsKKworaW50 IGV4eW5vc19taWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBleHlub3NfbWljICptaWM7CisJ c3RydWN0IHJlc291cmNlIHJlczsKKwlpbnQgcmV0LCBpOworCisJbWljID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCptaWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1pYykgeworCQlEUk1fRVJS T1IoIm1pYzogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgTUlDIG9iamVjdFxuIik7CisJ CXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCW1pYy0+ZGV2ID0gZGV2OworCisJ cmV0ID0gcGFyc2VfZHQobWljKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IG9m X2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LT5vZl9ub2RlLCAwLCAmcmVzKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigibWljOiBGYWlsZWQgdG8gZ2V0IG1lbSByZWdpb24gZm9yIE1JQ1xuIik7 CisJCWdvdG8gZXJyOworCX0KKwltaWMtPnJlZyA9IGRldm1faW9yZW1hcChkZXYsIHJlcy5zdGFy dCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSk7CisJaWYgKCFtaWMtPnJlZykgeworCQlEUk1fRVJST1Io Im1pYzogRmFpbGVkIHRvIHJlbWFwIGZvciBNSUNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQln b3RvIGVycjsKKwl9CisKKwltaWMtPnN5c3JlZyA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3Bo YW5kbGUoZGV2LT5vZl9ub2RlLAorCQkJCQkJCSJzYW1zdW5nLGRpc3Atc3lzY29uIik7CisJaWYg KElTX0VSUihtaWMtPnN5c3JlZykpIHsKKwkJRFJNX0VSUk9SKCJtaWM6IEZhaWxlZCB0byBnZXQg c3lzdGVtIHJlZ2lzdGVyLlxuIik7CisJCWdvdG8gZXJyOworCX0KKworCW1pYy0+YnJpZGdlLmZ1 bmNzID0gJm1pY19icmlkZ2VfZnVuY3M7CisJbWljLT5icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zf bm9kZTsKKwltaWMtPmJyaWRnZS5kcml2ZXJfcHJpdmF0ZSA9IG1pYzsKKwlyZXQgPSBkcm1fYnJp ZGdlX2FkZCgmbWljLT5icmlkZ2UpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJtaWM6IEZh aWxlZCB0byBhZGQgTUlDIHRvIHRoZSBnbG9iYWwgYnJpZGdlIGxpc3RcbiIpOworCQlnb3RvIGVy cjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NMS1M7IGkrKykgeworCQltaWMtPmNsa3Nb aV0gPSBvZl9jbGtfZ2V0X2J5X25hbWUoZGV2LT5vZl9ub2RlLCBjbGtfbmFtZXNbaV0pOworCQlp ZiAoSVNfRVJSKG1pYy0+Y2xrc1tpXSkpIHsKKwkJCURSTV9FUlJPUigibWljOiBGYWlsZWQgdG8g Z2V0IGNsb2NrICglcylcbiIsCisJCQkJCQkJCWNsa19uYW1lc1tpXSk7CisJCQlyZXQgPSBQVFJf RVJSKG1pYy0+Y2xrc1tpXSk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCURSTV9ERUJVR19L TVMoIk1JQyBoYXMgYmVlbiBwcm9iZWRcbiIpOworCitlcnI6CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBleHlub3NfbWljX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCXN0cnVjdCBleHlub3NfbWljICptaWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKKwlpbnQgaTsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZtaWMtPmJyaWRnZSk7CisKKwlmb3Ig KGkgPSBOVU1fQ0xLUyAtIDE7IGkgPiAtMTsgaS0tKQorCQljbGtfcHV0KG1pYy0+Y2xrc1tpXSk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZXh5 bm9zX21pY19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1 NDMzLW1pYyIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBleHlub3NfbWlj X29mX21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtaWNfZHJpdmVyID0geworCS5w cm9iZQkJPSBleHlub3NfbWljX3Byb2JlLAorCS5yZW1vdmUJCT0gZXh5bm9zX21pY19yZW1vdmUs CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImV4eW5vcy1taWMiLAorCQkub3duZXIJPSBUSElT X01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gZXh5bm9zX21pY19vZl9tYXRjaCwKKwl9LAor fTsKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=