From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: [RFC PATCH 28/31] xen/arm: Introduce SCPI based CPUFreq driver Date: Thu, 9 Nov 2017 19:10:18 +0200 Message-ID: <1510247421-24094-29-git-send-email-olekstysh@gmail.com> References: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eCqM5-0004qQ-P7 for xen-devel@lists.xenproject.org; Thu, 09 Nov 2017 17:11:05 +0000 Received: by mail-lf0-f65.google.com with SMTP id e143so8035300lfg.12 for ; Thu, 09 Nov 2017 09:11:04 -0800 (PST) In-Reply-To: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Oleksandr Tyshchenko , Stefano Stabellini , Julien Grall List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29t PgoKVGhpcyBwYXRjaCBhZGRzIGEgQ1BVRnJlcSBkcml2ZXIgZm9yIGNvbnRyb2xsaW5nIENQVXMg RFZGUyBmZWF0dXJlCnByb3ZpZGVkIGJ5IFN5c3RlbSBDb250cm9sIFByb2Nlc3NvciAoU0NQKSB1 c2luZyBTQ1BJIHByb3RvY29sCmZvciBpbnRlci1wcm9jZXNzb3IgY29tbXVuaWNhdGlvbi4KClRo ZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB1bmxpa2UgTGludXggWGVuIGRvZXNuJ3QgaGF2ZQpj bG9jayBpbmZyYXN0cnVjdHVyZSBhbmQgY2xvY2tzIGZvciB0aGUgQ1BVcyAoRFZGUyBjbG9ja3Mp CnByb3ZpZGVkIGJ5IFNDUCBhcmUgbWFuYWdlZCBieSB0aGlzIGRyaXZlciBkaXJlY3RseSB1c2lu ZwpEVkZTIG9wZXJhdGlvbnMgb3ZlciBwb3dlciBkb21haW5zIHRoZSBjb250cm9sbGVkIENQVXMg YXJlIHBhcnQgb2YuCgpOb24tYXJjaCBzcGVjaWZpYyBkcml2ZXIgY29kZSBpcyBtb3N0bHkgYm9y cm93ZWQgZnJvbQp0aGUgeDg2IEFDUEkgQ1BVRnJlcS4KCk1vc3QgaW1wb3J0YW50IFRPRE9zIHJl Z2FyZGluZyB0aGUgd2hvbGUgcGF0Y2ggc2VyaWVzOgoxLiBIYW5kbGUgZGV2bSBpbiB0aGUgZGly ZWN0IHBvcnRlZCBjb2RlLiBDdXJyZW50bHksIGluIGNhc2Ugb2YgYW55CiAgIGVycm9ycyBwcmV2 aW91c2x5IGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIGxlZnQgdW5mcmVlZC4KMi4gVGhlcm1hbCBt YW5hZ2VtZW50IGludGVncmF0aW9uLgozLiBEb24ndCBwYXNzIENQVUZyZXEgcmVsYXRlZCBub2Rl cyB0byBkb20wLiBYZW4gb3ducyBTQ1BJIGNvbXBsZXRlbHkuCjQuIEhhbmRsZSBDUFVfVFVSQk8g ZnJlcXVlbmNpZXMuCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgVHlzaGNoZW5rbyA8b2xla3Nh bmRyX3R5c2hjaGVua29AZXBhbS5jb20+CkNDOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxs aW5pQGtlcm5lbC5vcmc+CkNDOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBsaW5hcm8ub3Jn PgotLS0KIHhlbi9hcmNoL2FybS9jcHVmcmVxL3NjcGlfY3B1ZnJlcS5jIHwgMzI4ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDMyOCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL2NwdWZyZXEvc2NwaV9jcHVm cmVxLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vY3B1ZnJlcS9zY3BpX2NwdWZyZXEuYyBi L3hlbi9hcmNoL2FybS9jcHVmcmVxL3NjcGlfY3B1ZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmJjZDg4ODkKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC9hcm0v Y3B1ZnJlcS9zY3BpX2NwdWZyZXEuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIHhlbi9hcmNo L2FybS9jcHVmcmVxL3NjcGlfY3B1ZnJlcS5jCisgKgorICogU0NQSSBiYXNlZCBDUFVGcmVxIGRy aXZlcgorICoKKyAqIEJhc2VkIG9uIFhlbiBhcmNoL3g4Ni9hY3BpL2NwdWZyZXEvY3B1ZnJlcS5j CisgKgorICogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0u Y29tPgorICogQ29weXJpZ2h0IChjKSAyMDE3IEVQQU0gU3lzdGVtcy4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi90eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9k ZWxheS5oPgorI2luY2x1ZGUgPHhlbi9jcHVtYXNrLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+ CisjaW5jbHVkZSA8eGVuL3htYWxsb2MuaD4KKyNpbmNsdWRlIDx4ZW4vZXJyLmg+CisjaW5jbHVk ZSA8eGVuL2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL3Bl cmNwdS5oPgorCisjaW5jbHVkZSAic2NwaV9wcm90b2NvbC5oIgorCitleHRlcm4gc3RydWN0IGRl dmljZSAqZ2V0X2NwdV9kZXZpY2UodW5zaWduZWQgaW50IGNwdSk7CisKK3N0cnVjdCBzY3BpX2Nw dWZyZXFfZGF0YQoreworICAgIHN0cnVjdCBwcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7Cisg ICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOworICAgIHN0cnVj dCBzY3BpX2R2ZnNfaW5mbyAqaW5mbzsgLyogRFZGUyBjYXBhYmlsaXRpZXMgb2YgdGhlIENQVSdz IHBvd2VyIGRvbWFpbiAqLworICAgIGludCBkb21haW47IC8qIHBvd2VyIGRvbWFpbiBpZCB0aGlz IENQVSBiZWxvbmdzIHRvICovCit9OworCitzdGF0aWMgc3RydWN0IHNjcGlfY3B1ZnJlcV9kYXRh ICpjcHVmcmVxX2RyaXZlcl9kYXRhW05SX0NQVVNdOworCitzdGF0aWMgc3RydWN0IGNwdWZyZXFf ZHJpdmVyIHNjcGlfY3B1ZnJlcV9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3Qgc2NwaV9vcHMgKnNj cGlfb3BzOworCitzdGF0aWMgdW5zaWduZWQgaW50IHNjcGlfY3B1ZnJlcV9nZXQodW5zaWduZWQg aW50IGNwdSkKK3sKKyAgICBzdHJ1Y3Qgc2NwaV9jcHVmcmVxX2RhdGEgKmRhdGE7CisgICAgc3Ry dWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisgICAgY29uc3Qgc3RydWN0IHNjcGlfb3BwICpv cHA7CisgICAgaW50IGlkeDsKKworICAgIGlmICggY3B1ID49IG5yX2NwdV9pZHMgfHwgIWNwdV9v bmxpbmUoY3B1KSApCisgICAgICAgIHJldHVybiAwOworCisgICAgcG9saWN5ID0gcGVyX2NwdShj cHVmcmVxX2NwdV9wb2xpY3ksIGNwdSk7CisgICAgaWYgKCAhcG9saWN5IHx8ICEoZGF0YSA9IGNw dWZyZXFfZHJpdmVyX2RhdGFbcG9saWN5LT5jcHVdKSB8fAorICAgICAgICAgIWRhdGEtPmluZm8g KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlkeCA9IHNjcGlfb3BzLT5kdmZzX2dldF9pZHgo ZGF0YS0+ZG9tYWluKTsKKyAgICBpZiAoIGlkeCA8IDAgKQorICAgICAgICByZXR1cm4gMDsKKwor ICAgIG9wcCA9IGRhdGEtPmluZm8tPm9wcHMgKyBpZHg7CisKKyAgICAvKiBDb252ZXJ0IEh6IC0+ IGtIeiAqLworICAgIHJldHVybiBvcHAtPmZyZXEgLyAxMDAwOworfQorCitzdGF0aWMgaW50IHNj cGlfY3B1ZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLCB1bnNpZ25l ZCBpbnQgcmVsYXRpb24pCit7CisgICAgc3RydWN0IHNjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0g Y3B1ZnJlcV9kcml2ZXJfZGF0YVtwb2xpY3ktPmNwdV07CisgICAgc3RydWN0IHByb2Nlc3Nvcl9w ZXJmb3JtYW5jZSAqcGVyZjsKKyAgICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKKyAgICBj cHVtYXNrX3Qgb25saW5lX3BvbGljeV9jcHVzOworICAgIHVuc2lnbmVkIGludCBuZXh0X3N0YXRl ID0gMDsgLyogSW5kZXggaW50byBmcmVxX3RhYmxlICovCisgICAgdW5zaWduZWQgaW50IG5leHRf cGVyZl9zdGF0ZSA9IDA7IC8qIEluZGV4IGludG8gcGVyZiB0YWJsZSAqLworICAgIHVuc2lnbmVk IGludCBqOworICAgIGludCByZXN1bHQ7CisgICAgY29uc3Qgc3RydWN0IHNjcGlfb3BwICpvcHA7 CisgICAgaW50IGlkeCwgbWF4X29wcDsKKworICAgIGlmICggdW5saWtlbHkoIWRhdGEpIHx8ICFk YXRhLT5wZXJmIHx8ICFkYXRhLT5mcmVxX3RhYmxlIHx8ICFkYXRhLT5pbmZvICkKKyAgICAgICAg cmV0dXJuIC1FTk9ERVY7CisKKyAgICBwZXJmID0gZGF0YS0+cGVyZjsKKyAgICByZXN1bHQgPSBj cHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5mcmVxX3RhYmxlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZnJlcSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb24sICZuZXh0X3N0YXRlKTsK KyAgICBpZiAoIHVubGlrZWx5KHJlc3VsdCkgKQorICAgICAgICByZXR1cm4gLUVOT0RFVjsKKwor ICAgIGNwdW1hc2tfYW5kKCZvbmxpbmVfcG9saWN5X2NwdXMsICZjcHVfb25saW5lX21hcCwgcG9s aWN5LT5jcHVzKTsKKworICAgIG5leHRfcGVyZl9zdGF0ZSA9IGRhdGEtPmZyZXFfdGFibGVbbmV4 dF9zdGF0ZV0uaW5kZXg7CisgICAgaWYgKCBwZXJmLT5zdGF0ZSA9PSBuZXh0X3BlcmZfc3RhdGUg KQorICAgIHsKKyAgICAgICAgaWYgKCB1bmxpa2VseShwb2xpY3ktPnJlc3VtZSkgKQorICAgICAg ICAgICAgcG9saWN5LT5yZXN1bWUgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1 cm4gMDsKKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IE1IeiAtPiBrSHogKi8KKyAgICBmcmVxcy5v bGQgPSBwZXJmLT5zdGF0ZXNbcGVyZi0+c3RhdGVdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKKyAg ICBmcmVxcy5uZXcgPSBkYXRhLT5mcmVxX3RhYmxlW25leHRfc3RhdGVdLmZyZXF1ZW5jeTsKKwor ICAgIC8qIEZpbmQgY29ycmVzcG9uZGluZyBpbmRleCAqLworICAgIG1heF9vcHAgPSBkYXRhLT5p bmZvLT5jb3VudDsKKyAgICBvcHAgPSBkYXRhLT5pbmZvLT5vcHBzOworICAgIGZvciAoIGlkeCA9 IDA7IGlkeCA8IG1heF9vcHA7IGlkeCsrLCBvcHArKyApCisgICAgeworICAgICAgICAvKiBDb21w YXJlIGluIGtIeiAqLworICAgICAgICBpZiAoIG9wcC0+ZnJlcSAvIDEwMDAgPT0gZnJlcXMubmV3 ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIGlkeCA9PSBtYXhfb3BwICkK KyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICByZXN1bHQgPSBzY3BpX29wcy0+ZHZmc19z ZXRfaWR4KGRhdGEtPmRvbWFpbiwgaWR4KTsKKyAgICBpZiAoIHJlc3VsdCA8IDAgKQorICAgICAg ICByZXR1cm4gcmVzdWx0OworCisgICAgZm9yX2VhY2hfY3B1KCBqLCAmb25saW5lX3BvbGljeV9j cHVzICkKKyAgICAgICAgY3B1ZnJlcV9zdGF0aXN0aWNfdXBkYXRlKGosIHBlcmYtPnN0YXRlLCBu ZXh0X3BlcmZfc3RhdGUpOworCisgICAgcGVyZi0+c3RhdGUgPSBuZXh0X3BlcmZfc3RhdGU7Cisg ICAgcG9saWN5LT5jdXIgPSBmcmVxcy5uZXc7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz dGF0aWMgaW50IHNjcGlfY3B1ZnJlcV92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xp Y3kpCit7CisgICAgc3RydWN0IHNjcGlfY3B1ZnJlcV9kYXRhICpkYXRhOworICAgIHN0cnVjdCBw cm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisKKyAgICBpZiAoICFwb2xpY3kgfHwgIShkYXRh ID0gY3B1ZnJlcV9kcml2ZXJfZGF0YVtwb2xpY3ktPmNwdV0pIHx8CisgICAgICAgICAhcHJvY2Vz c29yX3BtaW5mb1twb2xpY3ktPmNwdV0gKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAg IHBlcmYgPSAmcHJvY2Vzc29yX3BtaW5mb1twb2xpY3ktPmNwdV0tPnBlcmY7CisKKyAgICAvKiBD b252ZXJ0IE1IeiAtPiBrSHogKi8KKyAgICBjcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBv bGljeSwgMCwKKyAgICAgICAgcGVyZi0+c3RhdGVzW3BlcmYtPnBsYXRmb3JtX2xpbWl0XS5jb3Jl X2ZyZXF1ZW5jeSAqIDEwMDApOworCisgICAgcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxl X3ZlcmlmeShwb2xpY3ksIGRhdGEtPmZyZXFfdGFibGUpOworfQorCitzdGF0aWMgaW50IHNjcGlf Y3B1ZnJlcV9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKyAgICB1 bnNpZ25lZCBpbnQgaTsKKyAgICB1bnNpZ25lZCBpbnQgdmFsaWRfc3RhdGVzID0gMDsKKyAgICB1 bnNpZ25lZCBpbnQgY3Vycl9zdGF0ZSwgY3Vycl9mcmVxOworICAgIHN0cnVjdCBzY3BpX2NwdWZy ZXFfZGF0YSAqZGF0YTsKKyAgICBpbnQgcmVzdWx0OworICAgIHN0cnVjdCBwcm9jZXNzb3JfcGVy Zm9ybWFuY2UgKnBlcmY7CisgICAgc3RydWN0IGRldmljZSAqY3B1X2RldjsKKyAgICBzdHJ1Y3Qg c2NwaV9kdmZzX2luZm8gKmluZm87CisgICAgaW50IGRvbWFpbjsKKworICAgIGNwdV9kZXYgPSBn ZXRfY3B1X2RldmljZShwb2xpY3ktPmNwdSk7CisgICAgaWYgKCAhY3B1X2RldiApCisgICAgICAg IHJldHVybiAtRU5PREVWOworCisgICAgZGF0YSA9IHh6YWxsb2Moc3RydWN0IHNjcGlfY3B1ZnJl cV9kYXRhKTsKKyAgICBpZiAoICFkYXRhICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAg ICBjcHVmcmVxX2RyaXZlcl9kYXRhW3BvbGljeS0+Y3B1XSA9IGRhdGE7CisKKyAgICBkYXRhLT5w ZXJmID0gJnByb2Nlc3Nvcl9wbWluZm9bcG9saWN5LT5jcHVdLT5wZXJmOworCisgICAgcGVyZiA9 IGRhdGEtPnBlcmY7CisgICAgcG9saWN5LT5zaGFyZWRfdHlwZSA9IHBlcmYtPnNoYXJlZF90eXBl OworCisgICAgZGF0YS0+ZnJlcV90YWJsZSA9IHhtYWxsb2NfYXJyYXkoc3RydWN0IGNwdWZyZXFf ZnJlcXVlbmN5X3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBl cmYtPnN0YXRlX2NvdW50ICsgMSkpOworICAgIGlmICggIWRhdGEtPmZyZXFfdGFibGUgKQorICAg IHsKKyAgICAgICAgcmVzdWx0ID0gLUVOT01FTTsKKyAgICAgICAgZ290byBlcnJfdW5yZWc7Cisg ICAgfQorCisgICAgLyogRGV0ZWN0IHRyYW5zaXRpb24gbGF0ZW5jeSAqLworICAgIHBvbGljeS0+ Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAwOworICAgIGZvciAoIGkgPSAwOyBpIDwgcGVy Zi0+c3RhdGVfY291bnQ7IGkrKyApCisgICAgeworICAgICAgICAvKiBDb21wYXJlIGluIG5zICov CisgICAgICAgIGlmICggcGVyZi0+c3RhdGVzW2ldLnRyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDAg PgorICAgICAgICAgICAgIHBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgKQorICAg ICAgICAgICAgLyogQ29udmVydCB1cyAtPiBucyAqLworICAgICAgICAgICAgcG9saWN5LT5jcHVp bmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CisgICAgICAgICAgICAgICAgcGVyZi0+c3RhdGVzW2ld LnRyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDA7CisgICAgfQorCisgICAgcG9saWN5LT5nb3Zlcm5v ciA9IGNwdWZyZXFfb3B0X2dvdmVybm9yID8gOiBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisK KyAgICAvKiBJbml0aWFsaXplIGZyZXF1ZW5jeSB0YWJsZSAqLworICAgIGZvciAoIGkgPSAwOyBp IDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKyApCisgICAgeworICAgICAgICAvKiBDb21wYXJlIGlu IE1IeiAqLworICAgICAgICBpZiAoIGkgPiAwICYmIHBlcmYtPnN0YXRlc1tpXS5jb3JlX2ZyZXF1 ZW5jeSA+PQorICAgICAgICAgICAgIGRhdGEtPmZyZXFfdGFibGVbdmFsaWRfc3RhdGVzIC0gMV0u ZnJlcXVlbmN5IC8gMTAwMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkYXRh LT5mcmVxX3RhYmxlW3ZhbGlkX3N0YXRlc10uaW5kZXggPSBpOworICAgICAgICAvKiBDb252ZXJ0 IE1IeiAtPiBrSHogKi8KKyAgICAgICAgZGF0YS0+ZnJlcV90YWJsZVt2YWxpZF9zdGF0ZXNdLmZy ZXF1ZW5jeSA9CisgICAgICAgICAgICBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAx MDAwOworICAgICAgICB2YWxpZF9zdGF0ZXMrKzsKKyAgICB9CisgICAgZGF0YS0+ZnJlcV90YWJs ZVt2YWxpZF9zdGF0ZXNdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworICAgIHBlcmYt PnN0YXRlID0gMDsKKworICAgIHJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWlu Zm8ocG9saWN5LCBkYXRhLT5mcmVxX3RhYmxlKTsKKyAgICBpZiAoIHJlc3VsdCApCisgICAgICAg IGdvdG8gZXJyX2ZyZXFmcmVlOworCisgICAgLyogRmlsbCBpbiBmaWVsZHMgbmVlZGVkIGZvciBm cmVxdWVuY3kgY2hhbmdpbmcgKi8KKyAgICBkb21haW4gPSBzY3BpX29wcy0+ZGV2aWNlX2RvbWFp bl9pZChjcHVfZGV2KTsKKyAgICBpZiAoIGRvbWFpbiA8IDAgKQorICAgIHsKKyAgICAgICAgcmVz dWx0ID0gZG9tYWluOworICAgICAgICBnb3RvIGVycl9mcmVxZnJlZTsKKyAgICB9CisgICAgZGF0 YS0+ZG9tYWluID0gZG9tYWluOworCisgICAgaW5mbyA9IHNjcGlfb3BzLT5kdmZzX2dldF9pbmZv KGRvbWFpbik7CisgICAgaWYgKCBJU19FUlIoaW5mbykgKQorICAgIHsKKyAgICAgICAgcmVzdWx0 ID0gUFRSX0VSUihpbmZvKTsKKyAgICAgICAgZ290byBlcnJfZnJlcWZyZWU7CisgICAgfQorICAg IGRhdGEtPmluZm8gPSBpbmZvOworCisgICAgLyogUmV0cmlldmUgY3VycmVudCBmcmVxdWVuY3kg Ki8KKyAgICBjdXJyX2ZyZXEgPSBzY3BpX2NwdWZyZXFfZ2V0KHBvbGljeS0+Y3B1KTsKKworICAg IC8qIEZpbmQgY29ycmVzcG9uZGluZyBzdGF0ZSAqLworICAgIGN1cnJfc3RhdGUgPSAwOworICAg IGZvciAoIGkgPSAwOyBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RB QkxFX0VORDsgaSsrICkKKyAgICB7CisgICAgICAgIGlmICggY3Vycl9mcmVxID09IGRhdGEtPmZy ZXFfdGFibGVbaV0uZnJlcXVlbmN5ICkKKyAgICAgICAgeworICAgICAgICAgICAgY3Vycl9zdGF0 ZSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFVw ZGF0ZSBmaWVsZHMgd2l0aCBhY3R1YWwgdmFsdWVzICovCisgICAgcG9saWN5LT5jdXIgPSBjdXJy X2ZyZXE7CisgICAgcGVyZi0+c3RhdGUgPSBkYXRhLT5mcmVxX3RhYmxlW2N1cnJfc3RhdGVdLmlu ZGV4OworCisgICAgLyoKKyAgICAgKiB0aGUgZmlyc3QgY2FsbCB0byAtPnRhcmdldCgpIHNob3Vs ZCByZXN1bHQgaW4gdXMgYWN0dWFsbHkKKyAgICAgKiB3cml0aW5nIHNvbWV0aGluZyB0byB0aGUg YXBwcm9wcmlhdGUgcmVnaXN0ZXJzLgorICAgICAqLworICAgIHBvbGljeS0+cmVzdW1lID0gMTsK KworICAgIHJldHVybiByZXN1bHQ7CisKK2Vycl9mcmVxZnJlZToKKyAgICB4ZnJlZShkYXRhLT5m cmVxX3RhYmxlKTsKK2Vycl91bnJlZzoKKyAgICB4ZnJlZShkYXRhKTsKKyAgICBjcHVmcmVxX2Ry aXZlcl9kYXRhW3BvbGljeS0+Y3B1XSA9IE5VTEw7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor CitzdGF0aWMgaW50IHNjcGlfY3B1ZnJlcV9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kg KnBvbGljeSkKK3sKKyAgICBzdHJ1Y3Qgc2NwaV9jcHVmcmVxX2RhdGEgKmRhdGEgPSBjcHVmcmVx X2RyaXZlcl9kYXRhW3BvbGljeS0+Y3B1XTsKKworICAgIGlmICggZGF0YSApCisgICAgeworICAg ICAgICB4ZnJlZShkYXRhLT5mcmVxX3RhYmxlKTsKKyAgICAgICAgeGZyZWUoZGF0YSk7CisgICAg ICAgIGNwdWZyZXFfZHJpdmVyX2RhdGFbcG9saWN5LT5jcHVdID0gTlVMTDsKKyAgICB9CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBzY3BpX2NwdWZy ZXFfZHJpdmVyID0geworICAgIC5uYW1lICAgPSAic2NwaS1jcHVmcmVxIiwKKworICAgIC52ZXJp ZnkgPSBzY3BpX2NwdWZyZXFfdmVyaWZ5LAorICAgIC50YXJnZXQgPSBzY3BpX2NwdWZyZXFfdGFy Z2V0LAorICAgIC5nZXQgICAgPSBzY3BpX2NwdWZyZXFfZ2V0LAorICAgIC5pbml0ICAgPSBzY3Bp X2NwdWZyZXFfY3B1X2luaXQsCisgICAgLmV4aXQgICA9IHNjcGlfY3B1ZnJlcV9jcHVfZXhpdCwK K307CisKK2ludCBfX2luaXQgc2NwaV9jcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcih2b2lkKQorewor ICAgIHNjcGlfb3BzID0gZ2V0X3NjcGlfb3BzKCk7CisgICAgaWYgKCAhc2NwaV9vcHMgKQorICAg ICAgICByZXR1cm4gLUVOWElPOworCisgICAgcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVy KCZzY3BpX2NwdWZyZXFfZHJpdmVyKTsKK30KKworaW50IGNwdWZyZXFfY3B1X2luaXQodW5zaWdu ZWQgaW50IGNwdWlkKQoreworICAgIHJldHVybiBjcHVmcmVxX2FkZF9jcHUoY3B1aWQpOworfQor CisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAi QlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRh YnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==