From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH 03/12] drm/msm/dsi: Add DSI PLL for 28nm 8960 PHY Date: Wed, 14 Oct 2015 18:28:55 +0530 Message-ID: <1444827544-25656-4-git-send-email-architt@codeaurora.org> References: <1444827544-25656-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1444827544-25656-1-git-send-email-architt@codeaurora.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, robdclark@gmail.com, hali@codeaurora.org Cc: linux-arm-msm@vger.kernel.org, Stephen Boyd List-Id: linux-arm-msm@vger.kernel.org QWRkIERTSSBQTEwgY29tbW9uIGNsb2NrIGZyYW1ld29yayBjbG9ja3MgZm9yIDg5NjAgUEhZLgoK VGhlIFBMTCBoZXJlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmVzIGZvdW5kIGluIEIgZmFtaWx5 IG1zbSBjaGlwcy4gQXMKYmVmb3JlLCB0aGUgRFNJIHByb3ZpZGVzIHR3byBjbG9ja3MgdG8gdGhl IG91dHNpZGUgd29ybGQuIGRzaXhwbGwgYW5kCmRzaXhwbGxieXRlICh4ID0gMSwgMikuIGRzaXhw bGwgaXMgYSByZWd1bGFyIGNsb2NrIGRpdmlkZXIsIGJ1dApkc2l4cGxsYnl0ZSBpcyBtb2RlbGxl ZCBhcyBhIGN1c3RvbSBjbG9jayBkaXZpZGVyLgoKZHNpeHBsbGJ5dGUgaXMgdGhlIHN0YXJ0aW5n IHBvaW50IG9mIHRoZSBQTEwgY29uZmlndXJhdGlvbi4gSXQgaXMgdGhlCm9uZSB0aGF0IHNldHMg dXAgdGhlIFZDTyBjbG9jayByYXRlLiBXZSBuZWVkIHRoZSBWQ08gY2xvY2sgcmF0ZSBpbiB0aGUK Zm9ybTogRiAqIGJ5dGVjbGssIHdoZXJlIEYgaXMgYSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgdGhh dCB2YXJpZXMgb24KdGhlIGJ5dGUgY2xvY2sgdGhlIERTSSBkcml2ZXIgaXMgdHJ5aW5nIHRvIHNl dC4gV2UgdXNlIHRoZSBjdXN0b20KY2xrX29wcyBmb3IgZHNpeHBsbGJ5dGUgdG8gZW5zdXJlIHRo YXQgdGhlIHBhcmVudCAoVkNPKSBpcyBzZXQgYXQgdGhpcwpyYXRlLgoKQW4gYWRkaXRpb25hbCBk aXZpZGVyIChQT1NURElWMSkgZ2VuZXJhdGVzIHRoZSBiaXRjbGsuIFNpbmNlIGJpdCBjbG9jawpj YW4gYmUgZGVyaXZlZCBmcm9tIGJ5dGVjbG9jaywgd2UgY2FsY3VsYXRlIGl0IGludGVybmFsbHks IGFuZCBkb24ndApleHBvc2UgaXQgYXMgYSBjbG9jay4KCkNjOiBTdGVwaGVuIEJveWQgPHNib3lk QGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNv ZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmMg ICAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmgg ICAgICAgICAgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsXzI4 bm1fODk2MC5jIHwgNTI5ICsrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCA1NDMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZHNpL3BsbC9kc2lfcGxsXzI4bm1fODk2MC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggOTZi Y2I2Ni4uOTNjYzA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC02Nyw2ICs2Nyw3IEBAIG1zbS0k KENPTkZJR19EUk1fTVNNX0RTSV8yOE5NXzg5NjBfUEhZKSArPSBkc2kvcGh5L2RzaV9waHlfMjhu bV84OTYwLm8KIGlmZXEgKCQoQ09ORklHX0RSTV9NU01fRFNJX1BMTCkseSkKIG1zbS15ICs9IGRz aS9wbGwvZHNpX3BsbC5vCiBtc20tJChDT05GSUdfRFJNX01TTV9EU0lfMjhOTV9QSFkpICs9IGRz aS9wbGwvZHNpX3BsbF8yOG5tLm8KK21zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8yOE5NXzg5NjBf UEhZKSArPSBkc2kvcGxsL2RzaV9wbGxfMjhubV84OTYwLm8KIGVuZGlmCiAKIG9iai0kKENPTkZJ R19EUk1fTVNNKQkrPSBtc20ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kv cGxsL2RzaV9wbGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmMKaW5k ZXggNTEwNGZjOS4uNWNkNDM4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kv cGxsL2RzaV9wbGwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNpX3BsbC5j CkBAIC0xNTEsNiArMTUxLDkgQEAgc3RydWN0IG1zbV9kc2lfcGxsICptc21fZHNpX3BsbF9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJY2FzZSBNU01fRFNJX1BIWV8yOE5NX0xQ OgogCQlwbGwgPSBtc21fZHNpX3BsbF8yOG5tX2luaXQocGRldiwgdHlwZSwgaWQpOwogCQlicmVh azsKKwljYXNlIE1TTV9EU0lfUEhZXzI4Tk1fODk2MDoKKwkJcGxsID0gbXNtX2RzaV9wbGxfMjhu bV84OTYwX2luaXQocGRldiwgaWQpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwbGwgPSBFUlJf UFRSKC1FTlhJTyk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2kvcGxsL2RzaV9wbGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmgK aW5kZXggMDYzY2FhMi4uODBiNjAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2kvcGxsL2RzaV9wbGwuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNpX3Bs bC5oCkBAIC05Myw2ICs5MywxNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtc21fZHNpX3BsbCAq bXNtX2RzaV9wbGxfMjhubV9pbml0KAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogI2Vu ZGlmCisjaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJXzI4Tk1fODk2MF9QSFkKK3N0cnVjdCBtc21f ZHNpX3BsbCAqbXNtX2RzaV9wbGxfMjhubV84OTYwX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKKwkJCQkJICAgICAgIGludCBpZCk7CisjZWxzZQorc3RydWN0IG1zbV9kc2lfcGxs ICptc21fZHNpX3BsbF8yOG5tXzg5NjBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 LAorCQkJCQkgICAgICAgaW50IGlkKQoreworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworfQor I2VuZGlmCiAKICNlbmRpZiAvKiBfX0RTSV9QTExfSF9fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsXzI4bm1fODk2MC5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kc2kvcGxsL2RzaV9wbGxfMjhubV84OTYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZTcxYjRlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpL3BsbC9kc2lfcGxsXzI4bm1fODk2MC5jCkBAIC0wLDAgKzEsNTI5IEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor I2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorCisjaW5jbHVkZSAiZHNpX3BsbC5oIgor I2luY2x1ZGUgImRzaS54bWwuaCIKKworLyoKKyAqIERTSSBQTEwgMjhubSAoODk2MC9BIGZhbWls eSkgLSBjbG9jayBkaWFncmFtIChlZzogRFNJMSk6CisgKgorICoKKyAqICAgICAgICAgICAgICAg ICAgICAgICAgKy0tLS0tLSsKKyAqICBkc2kxdmNvX2NsayAtLS0tby0tLS0tfCBESVYxIHwtLS1k c2kxcGxsYml0IChub3QgZXhwb3NlZCBhcyBjbG9jaykKKyAqICBGICogYnl0ZV9jbGsgICAgfCAg ICAgKy0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCBiaXQgY2xvY2sgZGl2aWRlciAoRiAv IDgpCisgKiAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgKy0t LS0tLSsKKyAqICAgICAgICAgICAgICAgICAgby0tLS0tfCBESVYyIHwtLS1kc2kwcGxsYnl0ZS0t LW8tLS0+IFRvIGJ5dGUgUkNHCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICstLS0tLS0rICAg ICAgICAgICAgICAgICB8IChzZXRzIHBhcmVudCByYXRlKQorICogICAgICAgICAgICAgICAgICB8 IGJ5dGUgY2xvY2sgZGl2aWRlciAoRikgICAgICAgfAorICogICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgby0tLT4gVG8gZXNjIFJDRworICogICAgICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9lc24ndCBzZXQgcGFyZW50 IHJhdGUpCisgKiAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgfCAgICAg Ky0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgby0tLS0tfCBESVYzIHwtLS0tZHNpMHBsbC0t LS0tLW8tLS0+IFRvIGRzaSBSQ0cKKyAqICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLSsg ICAgICAgICAgICAgICAgIHwgKHNldHMgcGFyZW50IHJhdGUpCisgKiAgICAgICAgICAgICAgICAg IGRzaSBjbG9jayBkaXZpZGVyIChGICogbWFnaWMpICB8CisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0tPiBUbyBwaXhlbCByY2cKKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9lc24ndCBzZXQgcGFy ZW50IHJhdGUpCisgKi8KKworI2RlZmluZSBQT0xMX01BWF9SRUFEUwkJODAwMAorI2RlZmluZSBQ T0xMX1RJTUVPVVRfVVMJCTEKKworI2RlZmluZSBOVU1fUFJPVklERURfQ0xLUwkyCisKKyNkZWZp bmUgVkNPX1JFRl9DTEtfUkFURQkyNzAwMDAwMAorI2RlZmluZSBWQ09fTUlOX1JBVEUJCTYwMDAw MDAwMAorI2RlZmluZSBWQ09fTUFYX1JBVEUJCTEyMDAwMDAwMDAKKworI2RlZmluZSBEU0lfQllU RV9QTExfQ0xLCTAKKyNkZWZpbmUgRFNJX1BJWEVMX1BMTF9DTEsJMQorCisjZGVmaW5lIFZDT19Q UkVGX0RJVl9SQVRJTwkyNworCitzdHJ1Y3QgcGxsXzI4bm1fY2FjaGVkX3N0YXRlIHsKKwl1bnNp Z25lZCBsb25nIHZjb19yYXRlOworCXU4IHBvc3RkaXYzOworCXU4IHBvc3RkaXYyOworCXU4IHBv c3RkaXYxOworfTsKKworc3RydWN0IGNsa19ieXRlZGl2IHsKKwlzdHJ1Y3QgY2xrX2h3IGh3Owor CXZvaWQgX19pb21lbSAqcmVnOworfTsKKworc3RydWN0IGRzaV9wbGxfMjhubSB7CisJc3RydWN0 IG1zbV9kc2lfcGxsIGJhc2U7CisKKwlpbnQgaWQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldjsKKwl2b2lkIF9faW9tZW0gKm1taW87CisKKwkvKiBjdXN0b20gYnl0ZSBjbG9jayBkaXZp ZGVyICovCisJc3RydWN0IGNsa19ieXRlZGl2ICpieXRlZGl2OworCisJLyogcHJpdmF0ZSBjbG9j a3M6ICovCisJc3RydWN0IGNsayAqY2xrc1tOVU1fRFNJX0NMT0NLU19NQVhdOworCXUzMiBudW1f Y2xrczsKKworCS8qIGNsb2NrLXByb3ZpZGVyOiAqLworCXN0cnVjdCBjbGsgKnByb3ZpZGVkX2Ns a3NbTlVNX1BST1ZJREVEX0NMS1NdOworCXN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRh OworCisJc3RydWN0IHBsbF8yOG5tX2NhY2hlZF9zdGF0ZSBjYWNoZWRfc3RhdGU7Cit9OworCisj ZGVmaW5lIHRvX3BsbF8yOG5tKHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHNpX3BsbF8yOG5t LCBiYXNlKQorCitzdGF0aWMgYm9vbCBwbGxfMjhubV9wb2xsX2Zvcl9yZWFkeShzdHJ1Y3QgZHNp X3BsbF8yOG5tICpwbGxfMjhubSwKKwkJCQkgICAgdTMyIG5iX3RyaWVzLCB1MzIgdGltZW91dF91 cykKK3sKKwlib29sIHBsbF9sb2NrZWQgPSBmYWxzZTsKKwl1MzIgdmFsOworCisJd2hpbGUgKG5i X3RyaWVzLS0pIHsKKwkJdmFsID0gcGxsX3JlYWQocGxsXzI4bm0tPm1taW8gKyBSRUdfRFNJXzI4 bm1fODk2MF9QSFlfUExMX1JEWSk7CisJCXBsbF9sb2NrZWQgPSAhISh2YWwgJiBEU0lfMjhubV84 OTYwX1BIWV9QTExfUkRZX1BMTF9SRFkpOworCisJCWlmIChwbGxfbG9ja2VkKQorCQkJYnJlYWs7 CisKKwkJdWRlbGF5KHRpbWVvdXRfdXMpOworCX0KKwlEQkcoIkRTSSBQTEwgaXMgJXNsb2NrZWQi LCBwbGxfbG9ja2VkID8gIiIgOiAiKm5vdCogIik7CisKKwlyZXR1cm4gcGxsX2xvY2tlZDsKK30K KworLyoKKyAqIENsb2NrIENhbGxiYWNrcworICovCitzdGF0aWMgaW50IGRzaV9wbGxfMjhubV9j bGtfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkg ICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG1zbV9kc2lfcGxsICpw bGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwlzdHJ1Y3QgZHNpX3BsbF8yOG5tICpwbGxfMjhubSA9 IHRvX3BsbF8yOG5tKHBsbCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcGxsXzI4bm0tPm1taW87 CisJdTMyIHZhbCwgdGVtcCwgZmJfZGl2aWRlcjsKKworCURCRygicmF0ZT0lbHUsIHBhcmVudCdz PSVsdSIsIHJhdGUsIHBhcmVudF9yYXRlKTsKKworCXRlbXAgPSByYXRlIC8gMTA7CisJdmFsID0g VkNPX1JFRl9DTEtfUkFURSAvIDEwOworCWZiX2RpdmlkZXIgPSAodGVtcCAqIFZDT19QUkVGX0RJ Vl9SQVRJTykgLyB2YWw7CisJZmJfZGl2aWRlciA9IGZiX2RpdmlkZXIgLyAyIC0gMTsKKwlwbGxf d3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF8xLAorCQkJZmJfZGl2 aWRlciAmIDB4ZmYpOworCisJdmFsID0gcGxsX3JlYWQoYmFzZSArIFJFR19EU0lfMjhubV84OTYw X1BIWV9QTExfQ1RSTF8yKTsKKworCXZhbCB8PSAoZmJfZGl2aWRlciA+PiA4KSAmIDB4MDc7CisK KwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF8yLAorCQkJ dmFsKTsKKworCXZhbCA9IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExM X0NUUkxfMyk7CisKKwl2YWwgfD0gKFZDT19QUkVGX0RJVl9SQVRJTyAtIDEpICYgMHgzZjsKKwor CXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzMsCisJCQl2 YWwpOworCisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxf NiwKKwkJCTB4Zik7CisKKwl2YWwgPSBwbGxfcmVhZChiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBf UEhZX1BMTF9DVFJMXzgpOworCXZhbCB8PSAweDcgPDwgNDsKKwlwbGxfd3JpdGUoYmFzZSArIFJF R19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF84LAorCQkJdmFsKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGRzaV9wbGxfMjhubV9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3 ICpodykKK3sKKwlzdHJ1Y3QgbXNtX2RzaV9wbGwgKnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOwor CXN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8yOG5tID0gdG9fcGxsXzI4bm0ocGxsKTsKKworCXJl dHVybiBwbGxfMjhubV9wb2xsX2Zvcl9yZWFkeShwbGxfMjhubSwgUE9MTF9NQVhfUkVBRFMsCisJ CQkJCVBPTExfVElNRU9VVF9VUyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRzaV9wbGxf MjhubV9jbGtfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCQkgIHVuc2lnbmVk IGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG1zbV9kc2lfcGxsICpwbGwgPSBod19jbGtf dG9fcGxsKGh3KTsKKwlzdHJ1Y3QgZHNpX3BsbF8yOG5tICpwbGxfMjhubSA9IHRvX3BsbF8yOG5t KHBsbCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcGxsXzI4bm0tPm1taW87CisJdW5zaWduZWQg bG9uZyB2Y29fcmF0ZTsKKwl1MzIgc3RhdHVzLCBmYl9kaXZpZGVyLCB0ZW1wLCByZWZfZGl2aWRl cjsKKworCVZFUkIoInBhcmVudF9yYXRlPSVsdSIsIHBhcmVudF9yYXRlKTsKKworCXN0YXR1cyA9 IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMCk7CisKKwlp ZiAoc3RhdHVzICYgRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMF9FTkFCTEUpIHsKKwkJZmJf ZGl2aWRlciA9IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxf MSk7CisJCWZiX2RpdmlkZXIgJj0gMHhmZjsKKwkJdGVtcCA9IHBsbF9yZWFkKGJhc2UgKyBSRUdf RFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMikgJiAweDA3OworCQlmYl9kaXZpZGVyID0gKHRl bXAgPDwgOCkgfCBmYl9kaXZpZGVyOworCQlmYl9kaXZpZGVyICs9IDE7CisKKwkJcmVmX2Rpdmlk ZXIgPSBwbGxfcmVhZChiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzMpOwor CQlyZWZfZGl2aWRlciAmPSAweDNmOworCQlyZWZfZGl2aWRlciArPSAxOworCisJCS8qIG11bHRp cGx5IGJ5IDIgKi8KKwkJdmNvX3JhdGUgPSAocGFyZW50X3JhdGUgLyByZWZfZGl2aWRlcikgKiBm Yl9kaXZpZGVyICogMjsKKwl9IGVsc2UgeworCQl2Y29fcmF0ZSA9IDA7CisJfQorCisJREJHKCJy ZXR1cm5pbmcgdmNvIHJhdGUgPSAlbHUiLCB2Y29fcmF0ZSk7CisKKwlyZXR1cm4gdmNvX3JhdGU7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfb3BzX2RzaV9wbGxfMjhubV92 Y28gPSB7CisJLnJvdW5kX3JhdGUgPSBtc21fZHNpX3BsbF9oZWxwZXJfY2xrX3JvdW5kX3JhdGUs CisJLnNldF9yYXRlID0gZHNpX3BsbF8yOG5tX2Nsa19zZXRfcmF0ZSwKKwkucmVjYWxjX3JhdGUg PSBkc2lfcGxsXzI4bm1fY2xrX3JlY2FsY19yYXRlLAorCS5wcmVwYXJlID0gbXNtX2RzaV9wbGxf aGVscGVyX2Nsa19wcmVwYXJlLAorCS51bnByZXBhcmUgPSBtc21fZHNpX3BsbF9oZWxwZXJfY2xr X3VucHJlcGFyZSwKKwkuaXNfZW5hYmxlZCA9IGRzaV9wbGxfMjhubV9jbGtfaXNfZW5hYmxlZCwK K307CisKKy8qCisgKiBDdXN0b20gYnl0ZSBjbG9jayBkaXZpZXIgY2xrX29wcworICoKKyAqIFRo aXMgY2xvY2sgaXMgdGhlIGVudHJ5IHBvaW50IHRvIGNvbmZpZ3VyaW5nIHRoZSBQTEwuIFRoZSB1 c2VyIChkc2kgaG9zdCkKKyAqIHdpbGwgc2V0IHRoaXMgY2xvY2sncyByYXRlIHRvIHRoZSBkZXNp cmVkIGJ5dGUgY2xvY2sgcmF0ZS4gVGhlIFZDTyBsb2NrCisgKiBmcmVxdWVuY3kgaXMgYSBtdWx0 aXBsZSBvZiB0aGUgYnl0ZSBjbG9jayByYXRlLiBUaGUgbXVsdGlwbGljYXRpb24gZmFjdG9yCisg KiAoc2hvd24gYXMgRiBpbiB0aGUgZGlhZ3JhbSBhYm92ZSkgaXMgYSBmdW5jdGlvbiBvZiB0aGUg Ynl0ZSBjbG9jayByYXRlLgorICoKKyAqIFRoaXMgY3VzdG9tIGRpdmlkZXIgY2xvY2sgZW5zdXJl cyB0aGF0IGl0cyBwYXJlbnQgKFZDTykgaXMgc2V0IHRvIHRoZQorICogZGVzaXJlZCByYXRlLCBh bmQgdGhhdCB0aGUgYnl0ZSBjbG9jayBwb3N0ZGl2aWRlciAoUE9TVERJVjIpIGlzIGNvbmZpZ3Vy ZWQKKyAqIGFjY29yZGluZ2x5CisgKi8KKyNkZWZpbmUgdG9fY2xrX2J5dGVkaXYoX2h3KSBjb250 YWluZXJfb2YoX2h3LCBzdHJ1Y3QgY2xrX2J5dGVkaXYsIGh3KQorCitzdGF0aWMgdW5zaWduZWQg bG9uZyBjbGtfYnl0ZWRpdl9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJdW5zaWdu ZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrX2J5dGVkaXYgKmJ5dGVkaXYgPSB0 b19jbGtfYnl0ZWRpdihodyk7CisJdW5zaWduZWQgaW50IGRpdjsKKworCWRpdiA9IHBsbF9yZWFk KGJ5dGVkaXYtPnJlZykgJiAweGZmOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEp OworfQorCisvKiBmaW5kIG11bHRpcGxpY2F0aW9uIGZhY3Rvcih3cnQgYnl0ZSBjbG9jaykgYXQg d2hpY2ggdGhlIFZDTyBzaG91bGQgYmUgc2V0ICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF92 Y29fbXVsX2ZhY3Rvcih1bnNpZ25lZCBsb25nIGJ5dGVfY2xrX3JhdGUpCit7CisJdW5zaWduZWQg bG9uZyBiaXRfbWh6OworCisJLyogY29udmVydCB0byBiaXQgY2xvY2sgaW4gTWh6ICovCisJYml0 X21oeiA9IChieXRlX2Nsa19yYXRlICogOCkgLyAxMDAwMDAwOworCisJaWYgKGJpdF9taHogPCAx MjUpCisJCXJldHVybiA2NDsKKwllbHNlIGlmIChiaXRfbWh6IDwgMjUwKQorCQlyZXR1cm4gMzI7 CisJZWxzZSBpZiAoYml0X21oeiA8IDYwMCkKKwkJcmV0dXJuIDE2OworCWVsc2UKKwkJcmV0dXJu IDg7Cit9CisKK3N0YXRpYyBsb25nIGNsa19ieXRlZGl2X3JvdW5kX3JhdGUoc3RydWN0IGNsa19o dyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpwcmF0ZSkK K3sKKwl1bnNpZ25lZCBsb25nIGJlc3RfcGFyZW50OworCXVuc2lnbmVkIGludCBmYWN0b3I7CisK KwlmYWN0b3IgPSBnZXRfdmNvX211bF9mYWN0b3IocmF0ZSk7CisKKwliZXN0X3BhcmVudCA9IHJh dGUgKiBmYWN0b3I7CisJKnByYXRlID0gY2xrX2h3X3JvdW5kX3JhdGUoY2xrX2h3X2dldF9wYXJl bnQoaHcpLCBiZXN0X3BhcmVudCk7CisKKwlyZXR1cm4gKnByYXRlIC8gZmFjdG9yOworfQorCitz dGF0aWMgaW50IGNsa19ieXRlZGl2X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCisJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3Qg Y2xrX2J5dGVkaXYgKmJ5dGVkaXYgPSB0b19jbGtfYnl0ZWRpdihodyk7CisJdTMyIHZhbDsKKwl1 bnNpZ25lZCBpbnQgZmFjdG9yOworCisJZmFjdG9yID0gZ2V0X3Zjb19tdWxfZmFjdG9yKHJhdGUp OworCisJdmFsID0gcGxsX3JlYWQoYnl0ZWRpdi0+cmVnKTsKKwl2YWwgfD0gKGZhY3RvciAtIDEp ICYgMHhmZjsKKwlwbGxfd3JpdGUoYnl0ZWRpdi0+cmVnLCB2YWwpOworCisJcmV0dXJuIDA7Cit9 CisKKy8qIE91ciBzcGVjaWFsIGJ5dGUgY2xvY2sgZGl2aWRlciBvcHMgKi8KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY2xrX29wcyBjbGtfYnl0ZWRpdl9vcHMgPSB7CisJLnJvdW5kX3JhdGUgPSBjbGtf Ynl0ZWRpdl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IGNsa19ieXRlZGl2X3NldF9yYXRlLAor CS5yZWNhbGNfcmF0ZSA9IGNsa19ieXRlZGl2X3JlY2FsY19yYXRlLAorfTsKKworLyoKKyAqIFBM TCBDYWxsYmFja3MKKyAqLworc3RhdGljIGludCBkc2lfcGxsXzI4bm1fZW5hYmxlX3NlcShzdHJ1 Y3QgbXNtX2RzaV9wbGwgKnBsbCkKK3sKKwlzdHJ1Y3QgZHNpX3BsbF8yOG5tICpwbGxfMjhubSA9 IHRvX3BsbF8yOG5tKHBsbCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBsbF8yOG5tLT5wZGV2 LT5kZXY7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcGxsXzI4bm0tPm1taW87CisJYm9vbCBsb2Nr ZWQ7CisJdW5zaWduZWQgaW50IGJpdF9kaXYsIGJ5dGVfZGl2OworCXUzMiBtYXhfcmVhZHMgPSAx MDAwLCB0aW1lb3V0X3VzID0gMTAwOworCXUzMiB2YWw7CisKKwlEQkcoImlkPSVkIiwgcGxsXzI4 bm0tPmlkKTsKKworCS8qCisJICogYmVmb3JlIGVuYWJsaW5nIHRoZSBQTEwsIGNvbmZpZ3VyZSB0 aGUgYml0IGNsb2NrIGRpdmlkZXIgc2luY2Ugd2UKKwkgKiBkb24ndCBleHBvc2UgaXQgYXMgYSBj bG9jayB0byB0aGUgb3V0c2lkZSB3b3JsZAorCSAqIDE6IHJlYWQgYmFjayB0aGUgYnl0ZSBjbG9j ayBkaXZpZGVyIHRoYXQgc2hvdWxkIGFyZWFkeSBiZSBzZXQKKwkgKiAyOiBkaXZpZGUgYnkgOCB0 byBnZXQgYml0IGNsb2NrIGRpdmlkZXIKKwkgKiAzOiB3cml0ZSBpdCB0byBQT1NURElWMQorCSAq LworCXZhbCA9IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxf OSk7CisJYnl0ZV9kaXYgPSB2YWwgKyAxOworCWJpdF9kaXYgPSBieXRlX2RpdiAvIDg7CisKKwl2 YWwgPSBwbGxfcmVhZChiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzgpOwor CXZhbCAmPSB+MHhmOworCXZhbCB8PSAoYml0X2RpdiAtIDEpOworCXBsbF93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzgsIHZhbCk7CisKKwkvKiBlbmFibGUgdGhl IFBMTCAqLworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJM XzAsCisJCQlEU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF8wX0VOQUJMRSk7CisKKwlsb2NrZWQg PSBwbGxfMjhubV9wb2xsX2Zvcl9yZWFkeShwbGxfMjhubSwgbWF4X3JlYWRzLCB0aW1lb3V0X3Vz KTsKKworCWlmICh1bmxpa2VseSghbG9ja2VkKSkKKwkJZGV2X2VycihkZXYsICJEU0kgUExMIGxv Y2sgZmFpbGVkXG4iKTsKKwllbHNlCisJCURCRygiRFNJIFBMTCBsb2NrIHN1Y2Nlc3MiKTsKKwor CXJldHVybiBsb2NrZWQgPyAwIDogLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgZHNpX3BsbF8y OG5tX2Rpc2FibGVfc2VxKHN0cnVjdCBtc21fZHNpX3BsbCAqcGxsKQoreworCXN0cnVjdCBkc2lf cGxsXzI4bm0gKnBsbF8yOG5tID0gdG9fcGxsXzI4bm0ocGxsKTsKKworCURCRygiaWQ9JWQiLCBw bGxfMjhubS0+aWQpOworCXBsbF93cml0ZShwbGxfMjhubS0+bW1pbyArIFJFR19EU0lfMjhubV84 OTYwX1BIWV9QTExfQ1RSTF8wLCAweDAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BsbF8yOG5t X3NhdmVfc3RhdGUoc3RydWN0IG1zbV9kc2lfcGxsICpwbGwpCit7CisJc3RydWN0IGRzaV9wbGxf MjhubSAqcGxsXzI4bm0gPSB0b19wbGxfMjhubShwbGwpOworCXN0cnVjdCBwbGxfMjhubV9jYWNo ZWRfc3RhdGUgKmNhY2hlZF9zdGF0ZSA9ICZwbGxfMjhubS0+Y2FjaGVkX3N0YXRlOworCXZvaWQg X19pb21lbSAqYmFzZSA9IHBsbF8yOG5tLT5tbWlvOworCisJY2FjaGVkX3N0YXRlLT5wb3N0ZGl2 MyA9CisJCQlwbGxfcmVhZChiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzEw KTsKKwljYWNoZWRfc3RhdGUtPnBvc3RkaXYyID0KKwkJCXBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJ XzI4bm1fODk2MF9QSFlfUExMX0NUUkxfOSk7CisJY2FjaGVkX3N0YXRlLT5wb3N0ZGl2MSA9CisJ CQlwbGxfcmVhZChiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzgpOworCisJ Y2FjaGVkX3N0YXRlLT52Y29fcmF0ZSA9IGNsa19od19nZXRfcmF0ZSgmcGxsLT5jbGtfaHcpOwor fQorCitzdGF0aWMgaW50IGRzaV9wbGxfMjhubV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBtc21fZHNp X3BsbCAqcGxsKQoreworCXN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8yOG5tID0gdG9fcGxsXzI4 bm0ocGxsKTsKKwlzdHJ1Y3QgcGxsXzI4bm1fY2FjaGVkX3N0YXRlICpjYWNoZWRfc3RhdGUgPSAm cGxsXzI4bm0tPmNhY2hlZF9zdGF0ZTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwbGxfMjhubS0+ bW1pbzsKKwlpbnQgcmV0OworCisJcmV0ID0gZHNpX3BsbF8yOG5tX2Nsa19zZXRfcmF0ZSgmcGxs LT5jbGtfaHcsCisJCQkJCWNhY2hlZF9zdGF0ZS0+dmNvX3JhdGUsIDApOworCWlmIChyZXQpIHsK KwkJZGV2X2VycigmcGxsXzI4bm0tPnBkZXYtPmRldiwKKwkJCSJyZXN0b3JlIHZjbyByYXRlIGZh aWxlZC4gcmV0PSVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsbF93cml0ZShi YXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzEwLAorCQkJY2FjaGVkX3N0YXRl LT5wb3N0ZGl2Myk7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExM X0NUUkxfOSwKKwkJCWNhY2hlZF9zdGF0ZS0+cG9zdGRpdjIpOworCXBsbF93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzgsCisJCQljYWNoZWRfc3RhdGUtPnBvc3Rk aXYxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzaV9wbGxfMjhubV9nZXRfcHJv dmlkZXIoc3RydWN0IG1zbV9kc2lfcGxsICpwbGwsCisJCQkJc3RydWN0IGNsayAqKmJ5dGVfY2xr X3Byb3ZpZGVyLAorCQkJCXN0cnVjdCBjbGsgKipwaXhlbF9jbGtfcHJvdmlkZXIpCit7CisJc3Ry dWN0IGRzaV9wbGxfMjhubSAqcGxsXzI4bm0gPSB0b19wbGxfMjhubShwbGwpOworCisJaWYgKGJ5 dGVfY2xrX3Byb3ZpZGVyKQorCQkqYnl0ZV9jbGtfcHJvdmlkZXIgPSBwbGxfMjhubS0+cHJvdmlk ZWRfY2xrc1tEU0lfQllURV9QTExfQ0xLXTsKKwlpZiAocGl4ZWxfY2xrX3Byb3ZpZGVyKQorCQkq cGl4ZWxfY2xrX3Byb3ZpZGVyID0KKwkJCQlwbGxfMjhubS0+cHJvdmlkZWRfY2xrc1tEU0lfUElY RUxfUExMX0NMS107CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHNpX3BsbF8yOG5t X2Rlc3Ryb3koc3RydWN0IG1zbV9kc2lfcGxsICpwbGwpCit7CisJc3RydWN0IGRzaV9wbGxfMjhu bSAqcGxsXzI4bm0gPSB0b19wbGxfMjhubShwbGwpOworCWludCBpOworCisJbXNtX2RzaV9wbGxf aGVscGVyX3VucmVnaXN0ZXJfY2xrcyhwbGxfMjhubS0+cGRldiwKKwkJCQkJcGxsXzI4bm0tPmNs a3MsIHBsbF8yOG5tLT5udW1fY2xrcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1BST1ZJREVE X0NMS1M7IGkrKykKKwkJcGxsXzI4bm0tPnByb3ZpZGVkX2Nsa3NbaV0gPSBOVUxMOworCisJcGxs XzI4bm0tPm51bV9jbGtzID0gMDsKKwlwbGxfMjhubS0+Y2xrX2RhdGEuY2xrcyA9IE5VTEw7CisJ cGxsXzI4bm0tPmNsa19kYXRhLmNsa19udW0gPSAwOworfQorCitzdGF0aWMgaW50IHBsbF8yOG5t X3JlZ2lzdGVyKHN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8yOG5tKQoreworCWNoYXIgY2xrX25h bWVbMzJdLCBwYXJlbnRbMzJdLCB2Y29fbmFtZVszMl07CisJc3RydWN0IGNsa19pbml0X2RhdGEg dmNvX2luaXQgPSB7CisJCS5wYXJlbnRfbmFtZXMgPSAoY29uc3QgY2hhciAqW10peyAicHhvIiB9 LAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkubmFtZSA9IHZjb19uYW1lLAorCQkub3BzID0gJmNs a19vcHNfZHNpX3BsbF8yOG5tX3ZjbywKKwl9OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwbGxf MjhubS0+cGRldi0+ZGV2OworCXN0cnVjdCBjbGsgKipjbGtzID0gcGxsXzI4bm0tPmNsa3M7CisJ c3RydWN0IGNsayAqKnByb3ZpZGVkX2Nsa3MgPSBwbGxfMjhubS0+cHJvdmlkZWRfY2xrczsKKwlz dHJ1Y3QgY2xrX2J5dGVkaXYgKmJ5dGVkaXY7CisJc3RydWN0IGNsa19pbml0X2RhdGEgYnl0ZWRp dl9pbml0OworCWludCByZXQsIG51bSA9IDA7CisKKwlEQkcoIiVkIiwgcGxsXzI4bm0tPmlkKTsK KworCWJ5dGVkaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmJ5dGVkaXYpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWJ5dGVkaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxsXzI4bm0tPmJ5 dGVkaXYgPSBieXRlZGl2OworCisJc25wcmludGYodmNvX25hbWUsIDMyLCAiZHNpJWR2Y29fY2xr IiwgcGxsXzI4bm0tPmlkKTsKKwlwbGxfMjhubS0+YmFzZS5jbGtfaHcuaW5pdCA9ICZ2Y29faW5p dDsKKworCWNsa3NbbnVtKytdID0gY2xrX3JlZ2lzdGVyKGRldiwgJnBsbF8yOG5tLT5iYXNlLmNs a19odyk7CisKKwkvKiBwcmVwYXJlIGFuZCByZWdpc3RlciBieXRlZGl2ICovCisJYnl0ZWRpdi0+ aHcuaW5pdCA9ICZieXRlZGl2X2luaXQ7CisJYnl0ZWRpdi0+cmVnID0gcGxsXzI4bm0tPm1taW8g KyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfOTsKKworCXNucHJpbnRmKHBhcmVudCwg MzIsICJkc2klZHZjb19jbGsiLCBwbGxfMjhubS0+aWQpOworCXNucHJpbnRmKGNsa19uYW1lLCAz MiwgImRzaSVkcGxsYnl0ZSIsIHBsbF8yOG5tLT5pZCk7CisKKwlieXRlZGl2X2luaXQubmFtZSA9 IGNsa19uYW1lOworCWJ5dGVkaXZfaW5pdC5vcHMgPSAmY2xrX2J5dGVkaXZfb3BzOworCWJ5dGVk aXZfaW5pdC5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQ7CisJYnl0ZWRpdl9pbml0LnBhcmVu dF9uYW1lcyA9IChjb25zdCBjaGFyICpbXSkgeyBwYXJlbnQgfTsKKwlieXRlZGl2X2luaXQubnVt X3BhcmVudHMgPSAxOworCisJLyogRElWMiAqLworCWNsa3NbbnVtKytdID0gcHJvdmlkZWRfY2xr c1tEU0lfQllURV9QTExfQ0xLXSA9CisJCQljbGtfcmVnaXN0ZXIoZGV2LCAmYnl0ZWRpdi0+aHcp OworCisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHNpJWRwbGwiLCBwbGxfMjhubS0+aWQpOwor CS8qIERJVjMgKi8KKwljbGtzW251bSsrXSA9IHByb3ZpZGVkX2Nsa3NbRFNJX1BJWEVMX1BMTF9D TEtdID0KKwkJCWNsa19yZWdpc3Rlcl9kaXZpZGVyKGRldiwgY2xrX25hbWUsCisJCQkJcGFyZW50 LCAwLCBwbGxfMjhubS0+bW1pbyArCisJCQkJUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJM XzEwLAorCQkJCTAsIDgsIDAsIE5VTEwpOworCisJcGxsXzI4bm0tPm51bV9jbGtzID0gbnVtOwor CisJcGxsXzI4bm0tPmNsa19kYXRhLmNsa19udW0gPSBOVU1fUFJPVklERURfQ0xLUzsKKwlwbGxf MjhubS0+Y2xrX2RhdGEuY2xrcyA9IHByb3ZpZGVkX2Nsa3M7CisKKwlyZXQgPSBvZl9jbGtfYWRk X3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwKKwkJCW9mX2Nsa19zcmNfb25lY2VsbF9nZXQsICZwbGxf MjhubS0+Y2xrX2RhdGEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g cmVnaXN0ZXIgY2xrIHByb3ZpZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RydWN0IG1zbV9kc2lfcGxsICptc21fZHNpX3BsbF8yOG5tXzg5 NjBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQkgICAgICAgaW50IGlk KQoreworCXN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8yOG5tOworCXN0cnVjdCBtc21fZHNpX3Bs bCAqcGxsOworCWludCByZXQ7CisKKwlpZiAoIXBkZXYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9E RVYpOworCisJcGxsXzI4bm0gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwbGxf MjhubSksIEdGUF9LRVJORUwpOworCWlmICghcGxsXzI4bm0pCisJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOworCisJcGxsXzI4bm0tPnBkZXYgPSBwZGV2OworCXBsbF8yOG5tLT5pZCA9IGlkICsg MTsKKworCXBsbF8yOG5tLT5tbWlvID0gbXNtX2lvcmVtYXAocGRldiwgImRzaV9wbGwiLCAiRFNJ X1BMTCIpOworCWlmIChJU19FUlJfT1JfTlVMTChwbGxfMjhubS0+bW1pbykpIHsKKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiJXM6IGZhaWxlZCB0byBtYXAgcGxsIGJhc2VcbiIsIF9fZnVuY19fKTsK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcGxsID0gJnBsbF8yOG5tLT5iYXNl OworCXBsbC0+bWluX3JhdGUgPSBWQ09fTUlOX1JBVEU7CisJcGxsLT5tYXhfcmF0ZSA9IFZDT19N QVhfUkFURTsKKwlwbGwtPmdldF9wcm92aWRlciA9IGRzaV9wbGxfMjhubV9nZXRfcHJvdmlkZXI7 CisJcGxsLT5kZXN0cm95ID0gZHNpX3BsbF8yOG5tX2Rlc3Ryb3k7CisJcGxsLT5kaXNhYmxlX3Nl cSA9IGRzaV9wbGxfMjhubV9kaXNhYmxlX3NlcTsKKwlwbGwtPnNhdmVfc3RhdGUgPSBkc2lfcGxs XzI4bm1fc2F2ZV9zdGF0ZTsKKwlwbGwtPnJlc3RvcmVfc3RhdGUgPSBkc2lfcGxsXzI4bm1fcmVz dG9yZV9zdGF0ZTsKKworCXBsbC0+ZW5fc2VxX2NudCA9IDE7CisJcGxsLT5lbmFibGVfc2Vxc1sw XSA9IGRzaV9wbGxfMjhubV9lbmFibGVfc2VxOworCisJcmV0ID0gcGxsXzI4bm1fcmVnaXN0ZXIo cGxsXzI4bm0pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRv IHJlZ2lzdGVyIFBMTDogJWRcbiIsIHJldCk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQor CisJcmV0dXJuIHBsbDsKK30KLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5j LiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmhvc3RlZCBieSBUaGUgTGlu dXggRm91bmRhdGlvbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK