From mboxrd@z Thu Jan 1 00:00:00 1970 From: Linus Walleij Subject: [PATCH 2/4 v3] PCI: add driver for Faraday Technology Host Bridge Date: Mon, 27 Feb 2017 20:07:18 +0100 Message-ID: <20170227190720.31409-2-linus.walleij@linaro.org> References: <20170227190720.31409-1-linus.walleij@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170227190720.31409-1-linus.walleij@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" To: Hans Ulli Kroll , Florian Fainelli , Rob Herring , devicetree@vger.kernel.org, Bjorn Helgaas Cc: openwrt-devel@openwrt.org, Feng-Hsin Chiang , Paulius Zaleckas , linux-pci@vger.kernel.org, Greentime Hu , Janos Laube , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBhZGRzIGEgaG9zdCBicmlkZ2UgZHJpdmVyIGZvciB0aGUgRmFyYWRheSBUZWNobm9sb2d5 CkZQUENJMTAwIGhvc3QgYnJpZGdlLCB1c2VkIGZvciBDb3J0aW5hIFN5c3RlbXMgR2VtaW5pIFNv QwooU0wzNTE2KSBQQ0kgSG9zdCBCcmlkZ2UuCgpUaGlzIGNvZGUgaXMgaW5zcGlyZWQgYnkgdGhl IG91dC1vZi10cmVlIE9wZW5XUlQgcGF0Y2ggYW5kCnRoZW4gZXh0ZW5zaXZlbHkgcmV3cml0dGVu IGZvciBkZXZpY2UgdHJlZSBhbmQgdXNpbmcgdGhlIG1vZGVybgpoZWxwZXJzIHRvIGN1dCBkb3du IGFuZCBtb2Rlcm5pemUgdGhlIGNvZGUgdG8gYWxsIG5ldyBQQ0kKZnJhbWV3b3Jrcy4gQSBkcml2 ZXIgZXhpc3RzIGluIFUtQm9vdCBhcyB3ZWxsLgoKVGVzdGVkIG9uIHRoZSBJVGlhbiBTcXVhcmUg T25lIFNRMjAxIE5BUyB3aXRoIHRoZSBmb2xsb3dpbmcKcmVzdWx0IGluIHRoZSBib290IGxvZyAo dHJpbW1lZCB0byByZWxldmFudCBwYXJ0cyk6CgpPRjogUENJOiBob3N0IGJyaWRnZSAvc29jL3Bj aUA1MDAwMDAwMCByYW5nZXM6Ck9GOiBQQ0k6ICAgIElPIDB4NTAwMDAwMDAuLjB4NTAwZmZmZmYg LT4gMHgwMDAwMDAwMApPRjogUENJOiAgIE1FTSAweDU4MDAwMDAwLi4weDVmZmZmZmZmIC0+IDB4 NTgwMDAwMDAKZnRwY2kxMDAgNTAwMDAwMDAucGNpOiBQQ0kgaG9zdCBicmlkZ2UgdG8gYnVzIDAw MDA6MDAKcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNvdXJjZSBbYnVzIDAwLWZmXQpwY2lf YnVzIDAwMDA6MDA6IHJvb3QgYnVzIHJlc291cmNlIFtpbyAgMHgwMDAwLTB4ZmZmZmZdCnBjaV9i dXMgMDAwMDowMDogcm9vdCBidXMgcmVzb3VyY2UgW21lbSAweDU4MDAwMDAwLTB4NWZmZmZmZmZd CmZ0cGNpMTAwIDUwMDAwMDAwLnBjaToKICBETUEgTUVNMSBCQVNFOiAweDAwMDAwMDAwMDAwMDAw MDAgLT4gMHgwMDAwMDAwMDA3ZmZmZmZmIGNvbmZpZyAwMDA3MDAwMApmdHBjaTEwMCA1MDAwMDAw MC5wY2k6CiAgRE1BIE1FTTIgQkFTRTogMHgwMDAwMDAwMDAwMDAwMDAwIC0+IDB4MDAwMDAwMDAw M2ZmZmZmZiBjb25maWcgMDAwNjAwMDAKZnRwY2kxMDAgNTAwMDAwMDAucGNpOgogIERNQSBNRU0z IEJBU0U6IDB4MDAwMDAwMDAwMDAwMDAwMCAtPiAweDAwMDAwMDAwMDNmZmZmZmYgY29uZmlnIDAw MDYwMDAwClBDSTogYnVzMDogRmFzdCBiYWNrIHRvIGJhY2sgdHJhbnNmZXJzIGRpc2FibGVkCnBj aSAwMDAwOjAwOjAwLjA6IG9mX2lycV9wYXJzZV9wY2koKSBmYWlsZWQgd2l0aCByYz0tMjIKcGNp IDAwMDA6MDA6MGMuMDogQkFSIDA6IGFzc2lnbmVkIFttZW0gMHg1ODAwMDAwMC0weDU4MDA3ZmZm XQpwY2kgMDAwMDowMDowOS4yOiBCQVIgMDogYXNzaWduZWQgW21lbSAweDU4MDA4MDAwLTB4NTgw MDgwZmZdCnBjaSAwMDAwOjAwOjA5LjA6IEJBUiA0OiBhc3NpZ25lZCBbaW8gIDB4MTAwMC0weDEw MWZdCnBjaSAwMDAwOjAwOjA5LjE6IEJBUiA0OiBhc3NpZ25lZCBbaW8gIDB4MTAyMC0weDEwM2Zd CnBjaSAwMDAwOjAwOjA5LjA6IGVuYWJsaW5nIGRldmljZSAoMDE0MCAtPiAwMTQxKQpwY2kgMDAw MDowMDowOS4wOiBIQ1JFU0VUIG5vdCBjb21wbGV0ZWQgeWV0IQpwY2kgMDAwMDowMDowOS4xOiBl bmFibGluZyBkZXZpY2UgKDAxNDAgLT4gMDE0MSkKcGNpIDAwMDA6MDA6MDkuMTogSENSRVNFVCBu b3QgY29tcGxldGVkIHlldCEKcGNpIDAwMDA6MDA6MDkuMjogZW5hYmxpbmcgZGV2aWNlICgwMTQw IC0+IDAxNDIpCnJ0NjFwY2kgMDAwMDowMDowYy4wOiBlbmFibGluZyBkZXZpY2UgKDAxNDAgLT4g MDE0MikKaWVlZTgwMjExIHBoeTA6IHJ0MngwMF9zZXRfY2hpcDogSW5mbyAtIENoaXBzZXQgZGV0 ZWN0ZWQgLQogICBydDogMjU2MSwgcmY6IDAwMDMsIHJldjogMDAwYwplaGNpX2hjZDogVVNCIDIu MCAnRW5oYW5jZWQnIEhvc3QgQ29udHJvbGxlciAoRUhDSSkgRHJpdmVyCmVoY2ktcGNpOiBFSENJ IFBDSSBwbGF0Zm9ybSBkcml2ZXIKZWhjaS1wY2kgMDAwMDowMDowOS4yOiBFSENJIEhvc3QgQ29u dHJvbGxlcgplaGNpLXBjaSAwMDAwOjAwOjA5LjI6IG5ldyBVU0IgYnVzIHJlZ2lzdGVyZWQsIGFz c2lnbmVkIGJ1cyBudW1iZXIgMQplaGNpLXBjaSAwMDAwOjAwOjA5LjI6IGlycSAxMjUsIGlvIG1l bSAweDU4MDA4MDAwCmVoY2ktcGNpIDAwMDA6MDA6MDkuMjogVVNCIDIuMCBzdGFydGVkLCBFSENJ IDEuMDAKaHViIDEtMDoxLjA6IFVTQiBodWIgZm91bmQKaHViIDEtMDoxLjA6IDQgcG9ydHMgZGV0 ZWN0ZWQKdWhjaV9oY2Q6IFVTQiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBk cml2ZXIKdWhjaV9oY2QgMDAwMDowMDowOS4wOiBVSENJIEhvc3QgQ29udHJvbGxlcgp1aGNpX2hj ZCAwMDAwOjAwOjA5LjA6IG5ldyBVU0IgYnVzIHJlZ2lzdGVyZWQsIGFzc2lnbmVkIGJ1cyBudW1i ZXIgMgp1aGNpX2hjZCAwMDAwOjAwOjA5LjA6IEhDUkVTRVQgbm90IGNvbXBsZXRlZCB5ZXQhCnVo Y2lfaGNkIDAwMDA6MDA6MDkuMDogaXJxIDEyMywgaW8gYmFzZSAweDAwMDAxMDAwCmh1YiAyLTA6 MS4wOiBVU0IgaHViIGZvdW5kCmh1YiAyLTA6MS4wOiBjb25maWcgZmFpbGVkLCBodWIgZG9lc24n dCBoYXZlIGFueSBwb3J0cyEgKGVyciAtMTkpCnVoY2lfaGNkIDAwMDA6MDA6MDkuMTogVUhDSSBI b3N0IENvbnRyb2xsZXIKdWhjaV9oY2QgMDAwMDowMDowOS4xOiBuZXcgVVNCIGJ1cyByZWdpc3Rl cmVkLCBhc3NpZ25lZCBidXMgbnVtYmVyIDMKdWhjaV9oY2QgMDAwMDowMDowOS4xOiBIQ1JFU0VU IG5vdCBjb21wbGV0ZWQgeWV0IQp1aGNpX2hjZCAwMDAwOjAwOjA5LjE6IGlycSAxMjQsIGlvIGJh c2UgMHgwMDAwMTAyMApodWIgMy0wOjEuMDogVVNCIGh1YiBmb3VuZApodWIgMy0wOjEuMDogY29u ZmlnIGZhaWxlZCwgaHViIGRvZXNuJ3QgaGF2ZSBhbnkgcG9ydHMhIChlcnIgLTE5KQpzY3NpIDA6 MDowOjA6IERpcmVjdC1BY2Nlc3MgICAgIFVTQiAgICAgIEZsYXNoIERpc2sgICAgICAgMS4wMCBQ UTogMCBBTlNJOiAyCnNkIDA6MDowOjA6IFtzZGFdIDc5MDAzMzYgNTEyLWJ5dGUgbG9naWNhbCBi bG9ja3M6ICg0LjA0IEdCLzMuNzcgR2lCKQpzZCAwOjA6MDowOiBbc2RhXSBXcml0ZSBQcm90ZWN0 IGlzIG9mZgpzZCAwOjA6MDowOiBbc2RhXSBObyBDYWNoaW5nIG1vZGUgcGFnZSBmb3VuZApzZCAw OjA6MDowOiBbc2RhXSBBc3N1bWluZyBkcml2ZSBjYWNoZTogd3JpdGUgdGhyb3VnaAogc2RhOiBz ZGExIHNkYTIgc2RhMwpzZCAwOjA6MDowOiBbc2RhXSBBdHRhY2hlZCBTQ1NJIHJlbW92YWJsZSBk aXNrCmllZWU4MDIxMSBwaHkwOiBydDJ4MDBsaWJfcmVxdWVzdF9maXJtd2FyZTogSW5mbyAtCiAg IExvYWRpbmcgZmlybXdhcmUgZmlsZSAncnQyNTYxcy5iaW4nCmllZWU4MDIxMSBwaHkwOiBydDJ4 MDBsaWJfcmVxdWVzdF9maXJtd2FyZTogSW5mbyAtCiAgIEZpcm13YXJlIGRldGVjdGVkIC0gdmVy c2lvbjogMC44CklQdjY6IEFERFJDT05GKE5FVERFVl9VUCk6IHdsYW4wOiBsaW5rIGlzIG5vdCBy ZWFkeQoKJCBsc3BjaQowMDowMC4wIENsYXNzIDA2MDA6IDE1OWI6NDMyMQowMDowOS4yIENsYXNz IDBjMDM6IDExMDY6MzEwNAowMDowOS4wIENsYXNzIDBjMDM6IDExMDY6MzAzOAowMDowOS4xIENs YXNzIDBjMDM6IDExMDY6MzAzOAowMDowYy4wIENsYXNzIDAyODA6IDE4MTQ6MDMwMQoKY2F0IC9w cm9jL2ludGVycnVwdHMKICAgICAgICAgICBDUFUwCjEyMzogICAgICAgICAgMCAgICAgICBQQ0kg ICAwIEVkZ2UgICAgICB1aGNpX2hjZDp1c2IyCjEyNDogICAgICAgICAgMCAgICAgICBQQ0kgICAx IEVkZ2UgICAgICB1aGNpX2hjZDp1c2IzCjEyNTogICAgICAgIDE1OSAgICAgICBQQ0kgICAyIEVk Z2UgICAgICBlaGNpX2hjZDp1c2IxCjEyNjogICAgICAgMTA4MiAgICAgICBQQ0kgICAzIEVkZ2Ug ICAgICBydDYxcGNpCgpjYXQgL3Byb2MvaW9tZW0KNTAwMDAwMDAtNTAwMDAwZmYgOiAvc29jL3Bj aUA1MDAwMDAwMAo1ODAwMDAwMC01ZmZmZmZmZiA6IEdlbWluaSBQQ0kgTUVNCiAgNTgwMDAwMDAt NTgwMDdmZmYgOiAwMDAwOjAwOjBjLjAKICAgIDU4MDAwMDAwLTU4MDA3ZmZmIDogMDAwMDowMDow Yy4wCiAgNTgwMDgwMDAtNTgwMDgwZmYgOiAwMDAwOjAwOjA5LjIKICAgIDU4MDA4MDAwLTU4MDA4 MGZmIDogZWhjaV9oY2QKClRoZSBFSENJIFVTQiBodWIgd29ya3MgZmluZSwgSSBjYW4gbW91bnQg YW5kIG1hbmFnZQpmaWxlcyBhbmQgdGhlIElSUXMganVzdCBrZWVwIHRpY2tpbmcgdXAuIEkgY2Fu IGlzc3VlCml3bGlzdCB3bGFuMCBzY2FubmluZyBhbmQgc2VlIGFsbCB0aGUgV0xBTnMgaGVyZSwg SSBkb24ndCBoYXZlCndwYV9zdXBwbGljYW50IHNvIGhhdmUgbm90IHRyaWVkIGNvbm5lY3Rpbmcg dG8gdGhlbS4KCkNjOiBKYW5vcyBMYXViZSA8amFub3MuZGV2QGdtYWlsLmNvbT4KQ2M6IFBhdWxp dXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAZ21haWwuY29tPgpDYzogSGFucyBVbGxpIEty b2xsIDx1bGxpLmtyb2xsQGdvb2dsZW1haWwuY29tPgpDYzogRmxvcmlhbiBGYWluZWxsaSA8Zi5m YWluZWxsaUBnbWFpbC5jb20+CkNjOiBGZW5nLUhzaW4gQ2hpYW5nIDxqb2huNDUzQGZhcmFkYXkt dGVjaC5jb20+CkNjOiBHcmVlbnRpbWUgSHUgPGdyZWVuLmh1QGdtYWlsLmNvbT4KU2lnbmVkLW9m Zi1ieTogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgotLS0KQ2hhbmdl TG9nIHYyLT52MzoKLSBSZXdyaXRlIHRvIHVzZSBwY2lfYWxsb2NfaG9zdF9icmlkZ2UoKSBhbmQK ICBwY2lfcmVnaXN0ZXJfaG9zdF9icmlkZ2UoKQotIENoYW5nZSBjb21wYXRpYmxlIHN0cmluZ3Mg dG8gImZhcmFkYXksZnRwY2kxMDAiIGFuZAogICJmYXJhZGF5LGZ0cGNpMTAwLWR1YWwiCi0gUmVu YW1lIGRyaXZlciBmaWxlIHRvIHBjaS1mdHBjaTEwMC5jIHRvIHJlZmxlY3QgdGhlIG5hbWUKICBv ZiB0aGUgYWN0dWFsIEZhcmFkYXkgSVAgY29yZS4KLSBNYWtlIHRoZSBkcml2ZXIgZGVwZW5kIG9u IEFSTSBhZ2FpbiBhcyBub3QgYWxsIGFyY2hzIHVzZQogIHNldHVwLWlycS5jIHdoaWNoIGNvbnRh aW5zIHBjaV9maXh1cF9pcnFzKCkgdGhhdCB0aGUgZHJpdmVyCiAgaXMgdXNpbmcuCi0gQWRkICJk bWEtcmFuZ2VzIiBwcm9wZXJ0eSwgYWZ0ZXIgZGVjaXBoZXJpbmcgdGhhdCBzb21lIGhhcmRjb2Rl ZAogIGNvbnN0YW50cyBpbiB0aGUgZHJpdmVyIGlzIHJlYWxseSBhYm91dCB0aGlzLgpDaGFuZ2VM b2cgdjEtPnYyOgotIFJlbmFtZSB0aGUgYnJpZGdlIGFuZCBzeW1ib2xzIHRvIHJlZmxlY3QgRmFy YWRheSB0ZWNobm9sb2d5CiAgYXMgdGhpcyBJUCBibG9jayBpcyBjbGVhcmx5IGEgRmFyYWRheSBi bG9jayBhbmQgbm90IGZyb20KICBTdG9ybGluay9TdG9ybS9Db3J0aW5hIGF0IGFsbC4KLSBTdXBw b3J0IGJvdGggdGhlIHJlZ3VsYXIgYW5kICJkdWFsIiB2ZXJzaW9ucyBvZiB0aGUgYnJpZGdlLAog IHdoZXJlIHRoZSByZWd1bGFyIGhhcyBhIGNhc2NhZGVkIElSUSBjb250cm9sbGVyIGFuZCB0aGUg ZHVhbAogIGRvZXMgbm90LgotIEVuY29kZSBwZXItdmFyaWFudCBjaGFyYWN0ZXJpc3RpY3MgaW4g YSB2YXJpYW50IHN0cnVjdCBpbgogIHRoZSAuZGF0YSBmaWVsZCBvZiB0aGUgT0YgbWF0Y2guCi0g RHJvcCB0aGUgcG9pbnRsZXNzIHNwaW5sb2NrIGluIHRoZSBjb25maWcgc3BhY2UgYWNjZXNzb3Jz LgotIERyb3AgbWFuaXB1bGF0aW9uIG9mIHBjaWJpb3NfbWluX2lvIGFuZCBwY2liaW9zX21pbl9t ZW0KLSBHZXQgdGhlIElPIHJhbmdlIHNpemUgZnJvbSB0aGUgZGV2aWNlIHRyZWUsIGFuZCBzZXQg dXAgdGhlCiAgYnJpZGdlIHByb3Blcmx5IGFjY29yZGluZyB0byB0aGlzLiBDdXJyZW50bHkgd2Ug b25seSBzdXBwb3J0CiAgYSAxTWlCIHNpemUgSU8gcmFuZ2UsIGJ1dCBoZXksIGl0J3MgYXQgbGVh c3QgZHluYW1pYyBhbmQKICBsb2dpY2FsLgoKVGhpcyBjYW4gYmUgbWVyZ2VkIHRvIHRoZSBQQ0kg dHJlZSB3aGVuZXZlciBpdCBpcyBjb25zaWRlcmVkCmZpbmUgZm9yIGluY2x1c2lvbi4KCkFuZGVz dGVjaCBhbmQgRmFyYWRheSBndXlzOiB5b3UgYXJlIG1vcmUgbGlrZWx5IHRoYW4gbWUgdG8KYWN0 dWFsbHkgaGF2ZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGJyaWRnZS4gUGxlYXNlIHNoYXJlIHdp dGgKbWUgaWYgeW91IGNhbiwgZXNwZWNpYWxseSB0aGUgcmVnaXN0ZXIgZGVmaW50aW9ucywgYmVj YXVzZSBJCndhbnQgdG8gc2V0IHVwIElPIGFuZCBNRU0gd2luZG93cyBwcm9wZXJseSBmcm9tIHRo ZSBkZXZpY2UgdHJlZSwKbm90IGp1c3QgcmVseSBvbiBkZWZhdWx0cy4gVGhlcmUgYXJlIGRlZmlu ZXMgZm9yIHRoZXNlIHJlZ2lzdGVycwpidXQgbm8gdXNlIG9yIGRvY3VtZW50YXRpb24uCi0tLQog ZHJpdmVycy9wY2kvaG9zdC9LY29uZmlnICAgICAgICB8ICAgNiArCiBkcml2ZXJzL3BjaS9ob3N0 L01ha2VmaWxlICAgICAgIHwgICAxICsKIGRyaXZlcnMvcGNpL2hvc3QvcGNpLWZ0cGNpMTAwLmMg fCA1NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBj aGFuZ2VkLCA1NzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNp L2hvc3QvcGNpLWZ0cGNpMTAwLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L0tjb25m aWcgYi9kcml2ZXJzL3BjaS9ob3N0L0tjb25maWcKaW5kZXggODk4ZDJjNDgyMzljLi5hMjU1NWUz NWEzOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJz L3BjaS9ob3N0L0tjb25maWcKQEAgLTYwLDYgKzYwLDEyIEBAIGNvbmZpZyBQQ0lfRVhZTk9TCiAJ c2VsZWN0IFBDSUVQT1JUQlVTCiAJc2VsZWN0IFBDSUVfRFcKIAorY29uZmlnIFBDSV9GVFBDSTEw MAorCWJvb2wgIkZhcmFkYXkgVGVjaG5vbG9neSBGVFBDSTEwMCBQQ0kgY29udHJvbGxlciIKKwlk ZXBlbmRzIG9uIE9GCisJZGVwZW5kcyBvbiBBUk0KKwlkZWZhdWx0IEFSQ0hfR0VNSU5JCisKIGNv bmZpZyBQQ0lfSU1YNgogCWJvb2wgIkZyZWVzY2FsZSBpLk1YNiBQQ0llIGNvbnRyb2xsZXIiCiAJ ZGVwZW5kcyBvbiBTT0NfSU1YNlEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvTWFrZWZp bGUgYi9kcml2ZXJzL3BjaS9ob3N0L01ha2VmaWxlCmluZGV4IGJmZTMxNzlhZTc0Yy4uMzlmMjBi NDM0MTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZl cnMvcGNpL2hvc3QvTWFrZWZpbGUKQEAgLTIsNiArMiw3IEBAIG9iai0kKENPTkZJR19QQ0lFX0RX KSArPSBwY2llLWRlc2lnbndhcmUubwogb2JqLSQoQ09ORklHX1BDSUVfRFdfUExBVCkgKz0gcGNp ZS1kZXNpZ253YXJlLXBsYXQubwogb2JqLSQoQ09ORklHX1BDSV9EUkE3WFgpICs9IHBjaS1kcmE3 eHgubwogb2JqLSQoQ09ORklHX1BDSV9FWFlOT1MpICs9IHBjaS1leHlub3Mubworb2JqLSQoQ09O RklHX1BDSV9GVFBDSTEwMCkgKz0gcGNpLWZ0cGNpMTAwLm8KIG9iai0kKENPTkZJR19QQ0lfSU1Y NikgKz0gcGNpLWlteDYubwogb2JqLSQoQ09ORklHX1BDSV9IWVBFUlYpICs9IHBjaS1oeXBlcnYu bwogb2JqLSQoQ09ORklHX1BDSV9NVkVCVSkgKz0gcGNpLW12ZWJ1Lm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcGNpL2hvc3QvcGNpLWZ0cGNpMTAwLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1mdHBj aTEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGY5MjU3ZGQ1 N2IwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktZnRwY2kxMDAuYwpA QCAtMCwwICsxLDU2NiBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIEZhcmFkYXkgVGVjaG5vbG9neSBG VFBDMTAwIFBDSSBDb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3IExpbnVzIFdh bGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KKyAqCisgKiBCYXNlZCBvbiB0aGUgb3V0 LW9mLXRyZWUgT3BlbldSVCBwYXRjaCBmb3IgQ29ydGluYSBHZW1pbmk6CisgKiBDb3B5cmlnaHQg KEMpIDIwMDkgSmFub3MgTGF1YmUgPGphbm9zLmRldkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQg KEMpIDIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+ CisgKiBCYXNlZCBvbiBTTDIzMTIgUENJIGNvbnRyb2xsZXIgY29kZQorICogU3RvcmxpbmsgKEMp IDIwMDMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3Bj aS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21h aW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CisjaW5jbHVkZSA8 bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKy8qCisgKiBTcGVjaWFs IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGRpcmVjdGx5IGluIHRoZSBmaXJzdCBmZXcgd29yZHMK KyAqIGluIGhlIEkvTyBzcGFjZS4KKyAqLworI2RlZmluZSBQQ0lfSU9TSVpFCTB4MDAKKyNkZWZp bmUgUENJX1BST1QJMHgwNCAvKiBBSEIgcHJvdGVjdGlvbiAqLworI2RlZmluZSBQQ0lfQ1RSTAkw eDA4IC8qIFBDSSBjb250cm9sIHNpZ25hbCAqLworI2RlZmluZSBQQ0lfU09GVFJTVAkweDEwIC8q IFNvZnQgcmVzZXQgY291bnRlciBhbmQgcmVzcG9uc2UgZXJyb3IgZW5hYmxlICovCisjZGVmaW5l IFBDSV9DT05GSUcJMHgyOCAvKiBQQ0kgY29uZmlndXJhdGlvbiBjb21tYW5kIHJlZ2lzdGVyICov CisjZGVmaW5lIFBDSV9EQVRBCTB4MkMKKworI2RlZmluZSBGQVJBREFZX1BDSV9QTUMJCQkweDQw IC8qIFBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCAqLworI2RlZmluZSBGQVJBREFZX1BDSV9QTUNT UgkJMHg0NCAvKiBQb3dlciBtYW5hZ2VtZW50IHN0YXR1cyAqLworI2RlZmluZSBGQVJBREFZX1BD SV9DVFJMMQkJMHg0OCAvKiBDb250cm9sIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgRkFSQURBWV9Q Q0lfQ1RSTDIJCTB4NEMgLyogQ29udHJvbCByZWdpc3RlciAyICovCisjZGVmaW5lIEZBUkFEQVlf UENJX01FTTFfQkFTRV9TSVpFCTB4NTAgLyogTWVtb3J5IGJhc2UgYW5kIHNpemUgIzEgKi8KKyNk ZWZpbmUgRkFSQURBWV9QQ0lfTUVNMl9CQVNFX1NJWkUJMHg1NCAvKiBNZW1vcnkgYmFzZSBhbmQg c2l6ZSAjMiAqLworI2RlZmluZSBGQVJBREFZX1BDSV9NRU0zX0JBU0VfU0laRQkweDU4IC8qIE1l bW9yeSBiYXNlIGFuZCBzaXplICMzICovCisKKy8qIEJpdHMgMzEuLjI4IGdpdmVzIElOVEQuLklO VEEgc3RhdHVzICovCisjZGVmaW5lIFBDSV9DVFJMMl9JTlRTVFNfU0hJRlQJCTI4CisjZGVmaW5l IFBDSV9DVFJMMl9JTlRNQVNLX0NNREVSUglCSVQoMjcpCisjZGVmaW5lIFBDSV9DVFJMMl9JTlRN QVNLX1BBUkVSUglCSVQoMjYpCisvKiBCaXRzIDI1Li4yMiBtYXNrcyBJTlRELi5JTlRBICovCisj ZGVmaW5lIFBDSV9DVFJMMl9JTlRNQVNLX1NISUZUCQkyMgorI2RlZmluZSBQQ0lfQ1RSTDJfSU5U TUFTS19NQUJSVF9SWAlCSVQoMjEpCisjZGVmaW5lIFBDSV9DVFJMMl9JTlRNQVNLX1RBQlJUX1JY CUJJVCgyMCkKKyNkZWZpbmUgUENJX0NUUkwyX0lOVE1BU0tfVEFCUlRfVFgJQklUKDE5KQorI2Rl ZmluZSBQQ0lfQ1RSTDJfSU5UTUFTS19SRVRSWTQJQklUKDE4KQorI2RlZmluZSBQQ0lfQ1RSTDJf SU5UTUFTS19TRVJSX1JYCUJJVCgxNykKKyNkZWZpbmUgUENJX0NUUkwyX0lOVE1BU0tfUEVSUl9S WAlCSVQoMTYpCisvKiBCaXQgMTUgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUENJX0NUUkwyX01TVFBS SV9SRVE2CQlCSVQoMTQpCisjZGVmaW5lIFBDSV9DVFJMMl9NU1RQUklfUkVRNQkJQklUKDEzKQor I2RlZmluZSBQQ0lfQ1RSTDJfTVNUUFJJX1JFUTQJCUJJVCgxMikKKyNkZWZpbmUgUENJX0NUUkwy X01TVFBSSV9SRVEzCQlCSVQoMTEpCisjZGVmaW5lIFBDSV9DVFJMMl9NU1RQUklfUkVRMgkJQklU KDEwKQorI2RlZmluZSBQQ0lfQ1RSTDJfTVNUUFJJX1JFUTEJCUJJVCg5KQorI2RlZmluZSBQQ0lf Q1RSTDJfTVNUUFJJX1JFUTAJCUJJVCg4KQorLyogQml0cyA3Li40IHJlc2VydmVkICovCisvKiBC aXRzIDMuLjAgVFJEWVcgKi8KKworLyoKKyAqIE1lbW9yeSBjb25maWdzOgorICogQml0IDMxLi4y MCBkZWZpbmVzIHRoZSBQQ0kgc2lkZSBtZW1vcnkgYmFzZQorICogQml0IDE5Li4xNiAoNCBiaXRz KSBkZWZpbmVzIHRoZSBzaXplIHBlciBiZWxvdworICovCisjZGVmaW5lIEZBUkFEQVlfUENJX01F TUJBU0VfTUFTSwkweGZmZjAwMDAwCisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVfMU1CCQkw eDAKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV8yTUIJCTB4MQorI2RlZmluZSBGQVJBREFZ X1BDSV9NRU1TSVpFXzRNQgkJMHgyCisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVfOE1CCQkw eDMKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV8xNk1CCTB4NAorI2RlZmluZSBGQVJBREFZ X1BDSV9NRU1TSVpFXzMyTUIJMHg1CisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVfNjRNQgkw eDYKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV8xMjhNQgkweDcKKyNkZWZpbmUgRkFSQURB WV9QQ0lfTUVNU0laRV8yNTZNQgkweDgKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV81MTJN QgkweDkKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV8xR0IJCTB4YQorI2RlZmluZSBGQVJB REFZX1BDSV9NRU1TSVpFXzJHQgkJMHhiCisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVfU0hJ RlQJMTYKKworLyoKKyAqIFRoZSBETUEgYmFzZSBpcyBzZXQgdG8gMHgwIGZvciBhbGwgbWVtb3J5 IHNlZ21lbnRzLCBpdCByZWZsZWN0cyB0aGUKKyAqIGZhY3QgdGhhdCB0aGUgbWVtb3J5IG9mIHRo ZSBob3N0IHN5c3RlbSBzdGFydHMgYXQgMHgwLgorICovCisjZGVmaW5lIEZBUkFEQVlfUENJX0RN QV9NRU0xX0JBU0UJMHgwMDAwMDAwMAorI2RlZmluZSBGQVJBREFZX1BDSV9ETUFfTUVNMl9CQVNF CTB4MDAwMDAwMDAKKyNkZWZpbmUgRkFSQURBWV9QQ0lfRE1BX01FTTNfQkFTRQkweDAwMDAwMDAw CisKKy8qIERlZmluZXMgZm9yIFBDSSBjb25maWd1cmF0aW9uIGNvbW1hbmQgcmVnaXN0ZXIgKi8K KyNkZWZpbmUgUENJX0NPTkZfRU5BQkxFCQlCSVQoMzEpCisjZGVmaW5lIFBDSV9DT05GX1dIRVJF KHIpCSgocikgJiAweEZDKQorI2RlZmluZSBQQ0lfQ09ORl9CVVMoYikJCSgoKGIpICYgMHhGRikg PDwgMTYpCisjZGVmaW5lIFBDSV9DT05GX0RFVklDRShkKQkoKChkKSAmIDB4MUYpIDw8IDExKQor I2RlZmluZSBQQ0lfQ09ORl9GVU5DVElPTihmKQkoKChmKSAmIDB4MDcpIDw8IDgpCisKKy8qKgor ICogc3RydWN0IGZhcmFkYXlfcGNpX3ZhcmlhbnQgLSBlbmNvZGVzIElQIGJsb2NrIGRpZmZlcmVu Y2VzCisgKiBAY2FzY2FkZWRfaXJxOiB0aGlzIGhvc3QgaGFzIGNhc2NhZGVkIElSUXMgZnJvbSBh biBpbnRlcnJ1cHQgY29udHJvbGxlcgorICoJZW1iZWRkZWQgaW4gdGhlIGhvc3QgYnJpZGdlLgor ICovCitzdHJ1Y3QgZmFyYWRheV9wY2lfdmFyaWFudCB7CisJYm9vbCBjYXNjYWRlZF9pcnE7Cit9 OworCitzdHJ1Y3QgZmFyYWRheV9wY2kgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9f aW9tZW0gKmJhc2U7CisJc3RydWN0IGlycV9kb21haW4gKmlycWRvbWFpbjsKKwlzdHJ1Y3QgcGNp X2J1cyAqYnVzOworfTsKKworc3RhdGljIGludCBmYXJhZGF5X3Jlc190b19tZW1jZmcocmVzb3Vy Y2Vfc2l6ZV90IG1lbV9iYXNlLAorCQkJCSByZXNvdXJjZV9zaXplX3QgbWVtX3NpemUsCisJCQkJ IHUzMiAqdmFsKQoreworCXUzMiBvdXR2YWw7CisKKwlzd2l0Y2ggKG1lbV9zaXplKSB7CisJY2Fz ZSBTWl8xTToKKwkJb3V0dmFsID0gRkFSQURBWV9QQ0lfTUVNU0laRV8xTUI7CisJCWJyZWFrOwor CWNhc2UgU1pfMk06CisJCW91dHZhbCA9IEZBUkFEQVlfUENJX01FTVNJWkVfMk1COworCQlicmVh azsKKwljYXNlIFNaXzRNOgorCQlvdXR2YWwgPSBGQVJBREFZX1BDSV9NRU1TSVpFXzRNQjsKKwkJ YnJlYWs7CisJY2FzZSBTWl84TToKKwkJb3V0dmFsID0gRkFSQURBWV9QQ0lfTUVNU0laRV84TUI7 CisJCWJyZWFrOworCWNhc2UgU1pfMTZNOgorCQlvdXR2YWwgPSBGQVJBREFZX1BDSV9NRU1TSVpF XzE2TUI7CisJCWJyZWFrOworCWNhc2UgU1pfMzJNOgorCQlvdXR2YWwgPSBGQVJBREFZX1BDSV9N RU1TSVpFXzMyTUI7CisJCWJyZWFrOworCWNhc2UgU1pfNjRNOgorCQlvdXR2YWwgPSBGQVJBREFZ X1BDSV9NRU1TSVpFXzY0TUI7CisJCWJyZWFrOworCWNhc2UgU1pfMTI4TToKKwkJb3V0dmFsID0g RkFSQURBWV9QQ0lfTUVNU0laRV8xMjhNQjsKKwkJYnJlYWs7CisJY2FzZSBTWl8yNTZNOgorCQlv dXR2YWwgPSBGQVJBREFZX1BDSV9NRU1TSVpFXzI1Nk1COworCQlicmVhazsKKwljYXNlIFNaXzUx Mk06CisJCW91dHZhbCA9IEZBUkFEQVlfUENJX01FTVNJWkVfNTEyTUI7CisJCWJyZWFrOworCWNh c2UgU1pfMUc6CisJCW91dHZhbCA9IEZBUkFEQVlfUENJX01FTVNJWkVfMUdCOworCQlicmVhazsK KwljYXNlIFNaXzJHOgorCQlvdXR2YWwgPSBGQVJBREFZX1BDSV9NRU1TSVpFXzJHQjsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW91dHZhbCA8PD0gRkFSQURB WV9QQ0lfTUVNU0laRV9TSElGVDsKKworCS8qIFRoaXMgaXMgcHJvYmFibHkgbm90IGdvb2QgKi8K KwlpZiAobWVtX2Jhc2UgJiB+KEZBUkFEQVlfUENJX01FTUJBU0VfTUFTSykpCisJCXByX3dhcm4o InRydW5jYXRlZCBQQ0kgbWVtb3J5IGJhc2VcbiIpOworCS8qIFRyYW5zbGF0ZSB0byBicmlkZ2Ug c2lkZSBhZGRyZXNzIHNwYWNlICovCisJb3V0dmFsIHw9IChtZW1fYmFzZSAmIEZBUkFEQVlfUENJ X01FTUJBU0VfTUFTSyk7CisJcHJfZGJnKCJUcmFuc2xhdGVkIHBjaSBiYXNlIEAlMDh4LCBzaXpl ICUwOHggdG8gY29uZmlnICUwOHhcbiIsCisJICAgICAgIG1lbV9iYXNlLCBtZW1fc2l6ZSwgb3V0 dmFsKTsKKworCSp2YWwgPSBvdXR2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmFy YWRheV9wY2lfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGZu LAorCQkJCSAgaW50IGNvbmZpZywgaW50IHNpemUsIHUzMiAqdmFsdWUpCit7CisJc3RydWN0IGZh cmFkYXlfcGNpICpwID0gYnVzLT5zeXNkYXRhOworCisJd3JpdGVsKFBDSV9DT05GX0JVUyhidXMt Pm51bWJlcikgfAorCQkJUENJX0NPTkZfREVWSUNFKFBDSV9TTE9UKGZuKSkgfAorCQkJUENJX0NP TkZfRlVOQ1RJT04oUENJX0ZVTkMoZm4pKSB8CisJCQlQQ0lfQ09ORl9XSEVSRShjb25maWcpIHwK KwkJCVBDSV9DT05GX0VOQUJMRSwKKwkJCXAtPmJhc2UgKyBQQ0lfQ09ORklHKTsKKworCSp2YWx1 ZSA9IHJlYWRsKHAtPmJhc2UgKyBQQ0lfREFUQSk7CisKKwlpZiAoc2l6ZSA9PSAxKQorCQkqdmFs dWUgPSAoKnZhbHVlID4+ICg4ICogKGNvbmZpZyAmIDMpKSkgJiAweEZGOworCWVsc2UgaWYgKHNp emUgPT0gMikKKwkJKnZhbHVlID0gKCp2YWx1ZSA+PiAoOCAqIChjb25maWcgJiAzKSkpICYgMHhG RkZGOworCisJZGV2X2RiZygmYnVzLT5kZXYsCisJCSJbcmVhZF0gIHNsdDogJS4yZCwgZm5jOiAl ZCwgY25mOiAweCUuMlgsIHZhbCAoJWQgYnl0ZXMpOiAweCUuOFhcbiIsCisJCVBDSV9TTE9UKGZu KSwgUENJX0ZVTkMoZm4pLCBjb25maWcsIHNpemUsICp2YWx1ZSk7CisKKwlyZXR1cm4gUENJQklP U19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IGZhcmFkYXlfcGNpX3dyaXRlX2NvbmZpZyhz dHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZm4sCisJCQkJICAgaW50IGNvbmZpZywg aW50IHNpemUsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZmFyYWRheV9wY2kgKnAgPSBidXMtPnN5 c2RhdGE7CisJaW50IHJldCA9IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworCWRldl9kYmcoJmJ1cy0+ ZGV2LAorCQkiW3dyaXRlXSBzbHQ6ICUuMmQsIGZuYzogJWQsIGNuZjogMHglLjJYLCB2YWwgKCVk IGJ5dGVzKTogMHglLjhYXG4iLAorCQlQQ0lfU0xPVChmbiksIFBDSV9GVU5DKGZuKSwgY29uZmln LCBzaXplLCB2YWx1ZSk7CisKKwl3cml0ZWwoUENJX0NPTkZfQlVTKGJ1cy0+bnVtYmVyKSB8CisJ CQlQQ0lfQ09ORl9ERVZJQ0UoUENJX1NMT1QoZm4pKSB8CisJCQlQQ0lfQ09ORl9GVU5DVElPTihQ Q0lfRlVOQyhmbikpIHwKKwkJCVBDSV9DT05GX1dIRVJFKGNvbmZpZykgfAorCQkJUENJX0NPTkZf RU5BQkxFLAorCQkJcC0+YmFzZSArIFBDSV9DT05GSUcpOworCisJc3dpdGNoIChzaXplKSB7CisJ Y2FzZSA0OgorCQl3cml0ZWwodmFsdWUsIHAtPmJhc2UgKyBQQ0lfREFUQSk7CisJCWJyZWFrOwor CWNhc2UgMjoKKwkJd3JpdGV3KHZhbHVlLCBwLT5iYXNlICsgUENJX0RBVEEgKyAoY29uZmlnICYg MykpOworCQlicmVhazsKKwljYXNlIDE6CisJCXdyaXRlYih2YWx1ZSwgcC0+YmFzZSArIFBDSV9E QVRBICsgKGNvbmZpZyAmIDMpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gUENJQklP U19CQURfUkVHSVNURVJfTlVNQkVSOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgcGNpX29wcyBmYXJhZGF5X3BjaV9vcHMgPSB7CisJLnJlYWQJPSBmYXJhZGF5X3BjaV9y ZWFkX2NvbmZpZywKKwkud3JpdGUJPSBmYXJhZGF5X3BjaV93cml0ZV9jb25maWcsCit9OworCitz dGF0aWMgdm9pZCBmYXJhZGF5X3BjaV9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlz dHJ1Y3QgZmFyYWRheV9wY2kgKnAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1 bnNpZ25lZCBpbnQgcmVnOworCisJZmFyYWRheV9wY2lfcmVhZF9jb25maWcocC0+YnVzLCAwLCBG QVJBREFZX1BDSV9DVFJMMiwgNCwgJnJlZyk7CisJcmVnICY9IH4oMHhGIDw8IFBDSV9DVFJMMl9J TlRTVFNfU0hJRlQpOworCXJlZyB8PSBCSVQoaXJxZF90b19od2lycShkKSArIFBDSV9DVFJMMl9J TlRTVFNfU0hJRlQpOworCWZhcmFkYXlfcGNpX3dyaXRlX2NvbmZpZyhwLT5idXMsIDAsIEZBUkFE QVlfUENJX0NUUkwyLCA0LCByZWcpOworfQorCitzdGF0aWMgdm9pZCBmYXJhZGF5X3BjaV9tYXNr X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGZhcmFkYXlfcGNpICpwID0gaXJx X2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCWZhcmFk YXlfcGNpX3JlYWRfY29uZmlnKHAtPmJ1cywgMCwgRkFSQURBWV9QQ0lfQ1RSTDIsIDQsICZyZWcp OworCXJlZyAmPSB+KCgweEYgPDwgUENJX0NUUkwyX0lOVFNUU19TSElGVCkKKwkJIHwgQklUKGly cWRfdG9faHdpcnEoZCkgKyBQQ0lfQ1RSTDJfSU5UTUFTS19TSElGVCkpOworCWZhcmFkYXlfcGNp X3dyaXRlX2NvbmZpZyhwLT5idXMsIDAsIEZBUkFEQVlfUENJX0NUUkwyLCA0LCByZWcpOworfQor CitzdGF0aWMgdm9pZCBmYXJhZGF5X3BjaV91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkK K3sKKwlzdHJ1Y3QgZmFyYWRheV9wY2kgKnAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShk KTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJZmFyYWRheV9wY2lfcmVhZF9jb25maWcocC0+YnVz LCAwLCBGQVJBREFZX1BDSV9DVFJMMiwgNCwgJnJlZyk7CisJcmVnICY9IH4oMHhGIDw8IFBDSV9D VFJMMl9JTlRTVFNfU0hJRlQpOworCXJlZyB8PSBCSVQoaXJxZF90b19od2lycShkKSArIFBDSV9D VFJMMl9JTlRNQVNLX1NISUZUKTsKKwlmYXJhZGF5X3BjaV93cml0ZV9jb25maWcocC0+YnVzLCAw LCBGQVJBREFZX1BDSV9DVFJMMiwgNCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZmFyYWRheV9w Y2lfaXJxX2hhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBmYXJhZGF5 X3BjaSAqcCA9IGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7CisJc3RydWN0IGlycV9j aGlwICppcnFjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7CisJdW5zaWduZWQgaW50IGly cV9zdGF0LCByZWcsIGk7CisKKwlmYXJhZGF5X3BjaV9yZWFkX2NvbmZpZyhwLT5idXMsIDAsIEZB UkFEQVlfUENJX0NUUkwyLCA0LCAmcmVnKTsKKwlpcnFfc3RhdCA9IHJlZyA+PiBQQ0lfQ1RSTDJf SU5UU1RTX1NISUZUOworCisJY2hhaW5lZF9pcnFfZW50ZXIoaXJxY2hpcCwgZGVzYyk7CisKKwlm b3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmICgoaXJxX3N0YXQgJiBCSVQoaSkpID09IDAp CisJCQljb250aW51ZTsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcocC0+ aXJxZG9tYWluLCBpKSk7CisJfQorCisJY2hhaW5lZF9pcnFfZXhpdChpcnFjaGlwLCBkZXNjKTsK K30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBmYXJhZGF5X3BjaV9pcnFfY2hpcCA9IHsKKwku bmFtZSA9ICJQQ0kiLAorCS5pcnFfYWNrID0gZmFyYWRheV9wY2lfYWNrX2lycSwKKwkuaXJxX21h c2sgPSBmYXJhZGF5X3BjaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IGZhcmFkYXlfcGNpX3Vu bWFza19pcnEsCit9OworCitzdGF0aWMgaW50IGZhcmFkYXlfcGNpX2lycV9tYXAoc3RydWN0IGly cV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwKKwkJCSAgICAgIGlycV9od19udW1i ZXJfdCBod2lycSkKK3sKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmZmFyYWRheV9w Y2lfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworCWlycV9zZXRfY2hpcF9kYXRhKGlycSwg ZG9tYWluLT5ob3N0X2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaXJxX2RvbWFpbl9vcHMgZmFyYWRheV9wY2lfaXJxZG9tYWluX29wcyA9IHsKKwkubWFwID0g ZmFyYWRheV9wY2lfaXJxX21hcCwKK307CisKK3N0YXRpYyBpbnQgZmFyYWRheV9wY2lfc2V0dXBf Y2FzY2FkZWRfaXJxKHN0cnVjdCBmYXJhZGF5X3BjaSAqcCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKmludGMgPSBvZl9nZXRfbmV4dF9jaGlsZChwLT5kZXYtPm9mX25vZGUsIE5VTEwpOworCWlu dCBpcnE7CisJaW50IGk7CisKKwlpZiAoIWludGMpIHsKKwkJZGV2X2VycihwLT5kZXYsICJtaXNz aW5nIGNoaWxkIGludGVycnVwdC1jb250cm9sbGVyIG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwkvKiBBbGwgUENJIElSUXMgY2FzY2FkZSBvZmYgdGhpcyBvbmUgKi8KKwlpcnEg PSBvZl9pcnFfZ2V0KGludGMsIDApOworCWlmICghaXJxKSB7CisJCWRldl9lcnIocC0+ZGV2LCAi ZmFpbGVkIHRvIGdldCBwYXJlbnQgSVJRXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ cC0+aXJxZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKGludGMsIDQsCisJCQkJCSAgICAg JmZhcmFkYXlfcGNpX2lycWRvbWFpbl9vcHMsCisJCQkJCSAgICAgcCk7CisJaWYgKCFwLT5pcnFk b21haW4pIHsKKwkJZGV2X2VycihwLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIEdlbWluaSBQQ0kg SVJRIGRvbWFpblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlycV9zZXRfY2hhaW5l ZF9oYW5kbGVyX2FuZF9kYXRhKGlycSwgZmFyYWRheV9wY2lfaXJxX2hhbmRsZXIsIHApOworCisJ Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJaXJxX2NyZWF0ZV9tYXBwaW5nKHAtPmlycWRvbWFp biwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfZG1hX3JhbmdlX3BhcnNl cl9pbml0KHN0cnVjdCBvZl9wY2lfcmFuZ2VfcGFyc2VyICpwYXJzZXIsCisJCQkJICAgICBzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJY29uc3QgaW50IG5hID0gMywgbnMgPSAyOworCWlu dCBybGVuOworCisJcGFyc2VyLT5ub2RlID0gbm9kZTsKKwlwYXJzZXItPnBuYSA9IG9mX25fYWRk cl9jZWxscyhub2RlKTsKKwlwYXJzZXItPm5wID0gcGFyc2VyLT5wbmEgKyBuYSArIG5zOworCisJ cGFyc2VyLT5yYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiZG1hLXJhbmdlcyIsICZybGVu KTsKKwlpZiAoIXBhcnNlci0+cmFuZ2UpCisJCXJldHVybiAtRU5PRU5UOworCXBhcnNlci0+ZW5k ID0gcGFyc2VyLT5yYW5nZSArIHJsZW4gLyBzaXplb2YoX19iZTMyKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGZhcmFkYXlfcGNpX3BhcnNlX21hcF9kbWFfcmFuZ2VzKHN0cnVjdCBm YXJhZGF5X3BjaSAqcCwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3Ry dWN0IG9mX3BjaV9yYW5nZSByYW5nZTsKKwlzdHJ1Y3Qgb2ZfcGNpX3JhbmdlX3BhcnNlciBwYXJz ZXI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcC0+ZGV2OworCXUzMiBjb25mcmVnWzNdID0gewor CQlGQVJBREFZX1BDSV9NRU0xX0JBU0VfU0laRSwKKwkJRkFSQURBWV9QQ0lfTUVNMl9CQVNFX1NJ WkUsCisJCUZBUkFEQVlfUENJX01FTTNfQkFTRV9TSVpFLAorCX07CisJaW50IGkgPSAwOworCXUz MiB2YWw7CisKKwlpZiAocGNpX2RtYV9yYW5nZV9wYXJzZXJfaW5pdCgmcGFyc2VyLCBucCkpIHsK KwkJZGV2X2VycihkZXYsICJtaXNzaW5nIGRtYS1yYW5nZXMgcHJvcGVydHlcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEdldCB0aGUgZG1hLXJhbmdlcyBmcm9tIHRoZSBk ZXZpY2UgdHJlZQorCSAqLworCWZvcl9lYWNoX29mX3BjaV9yYW5nZSgmcGFyc2VyLCAmcmFuZ2Up IHsKKwkJdTY0IGVuZCA9IHJhbmdlLnBjaV9hZGRyICsgcmFuZ2Uuc2l6ZSAtIDE7CisJCWludCBy ZXQ7CisKKwkJcmV0ID0gZmFyYWRheV9yZXNfdG9fbWVtY2ZnKHJhbmdlLnBjaV9hZGRyLCByYW5n ZS5zaXplLCAmdmFsKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIkRNQSBy YW5nZSAlZDogaWxsZWdhbCBNRU0gcmVzb3VyY2Ugc2l6ZVxuIiwgaSk7CisJCQlyZXR1cm4gLUVJ TlZBTDsKKwkJfQorCisJCWRldl9pbmZvKGRldiwgIkRNQSBNRU0lZCBCQVNFOiAweCUwMTZsbHgg LT4gMHglMDE2bGx4IGNvbmZpZyAlMDh4XG4iLAorCQkJIGkgKyAxLCByYW5nZS5wY2lfYWRkciwg ZW5kLCB2YWwpOworCQlpZiAoaSA8PSAyKSB7CisJCQlmYXJhZGF5X3BjaV93cml0ZV9jb25maWco cC0+YnVzLCAwLCBjb25mcmVnW2ldLAorCQkJCQkJIDQsIHZhbCk7CisJCX0gZWxzZSB7CisJCQlk ZXZfZXJyKGRldiwgImlnbm9yZSBleHRyYW5lb3VzIGRtYS1yYW5nZSAlZFxuIiwgaSk7CisJCQli cmVhazsKKwkJfQorCisJCWkrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBm YXJhZGF5X3BjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJY29uc3Qgc3RydWN0IGZhcmFkYXlfcGNpX3Zh cmlhbnQgKnZhcmlhbnQgPQorCQlvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlZ3M7CisJcmVzb3VyY2Vfc2l6ZV90IGlvX2Jhc2U7CisJc3RydWN0IHJl c291cmNlX2VudHJ5ICp3aW47CisJc3RydWN0IGZhcmFkYXlfcGNpICpwOworCXN0cnVjdCByZXNv dXJjZSAqbWVtOworCXN0cnVjdCByZXNvdXJjZSAqaW87CisJc3RydWN0IHBjaV9ob3N0X2JyaWRn ZSAqaG9zdDsKKwlpbnQgcmV0OworCXUzMiB2YWw7CisJTElTVF9IRUFEKHJlcyk7CisKKwlob3N0 ID0gcGNpX2FsbG9jX2hvc3RfYnJpZGdlKHNpemVvZigqcCkpOworCWlmICghaG9zdCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlob3N0LT5kZXYucGFyZW50ID0gZGV2OworCWhvc3QtPm9wcyA9ICZm YXJhZGF5X3BjaV9vcHM7CisJaG9zdC0+YnVzbnIgPSAwOworCWhvc3QtPm1zaSA9IE5VTEw7CisJ cCA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGhvc3QpOworCWhvc3QtPnN5c2RhdGEgPSBwOworCXAt PmRldiA9IGRldjsKKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOworCXAtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZWdz KTsKKwlpZiAoSVNfRVJSKHAtPmJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihwLT5iYXNlKTsKKwor CXJldCA9IG9mX3BjaV9nZXRfaG9zdF9icmlkZ2VfcmVzb3VyY2VzKGRldi0+b2Zfbm9kZSwgMCwg MHhmZiwKKwkJCQkJICAgICAgICZyZXMsICZpb19iYXNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3BjaV9idXNfcmVzb3VyY2VzKGRldiwgJnJlcyk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEdldCB0aGUgSS9PIGFuZCBtZW1vcnkg cmFuZ2VzIGZyb20gRFQgKi8KKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KHdpbiwgJnJl cykgeworCQlzd2l0Y2ggKHJlc291cmNlX3R5cGUod2luLT5yZXMpKSB7CisJCWNhc2UgSU9SRVNP VVJDRV9JTzoKKwkJCWlvID0gd2luLT5yZXM7CisJCQlpby0+bmFtZSA9ICJHZW1pbmkgUENJIEkv TyI7CisJCQlpZiAoIWZhcmFkYXlfcmVzX3RvX21lbWNmZyhpby0+c3RhcnQgLSB3aW4tPm9mZnNl dCwKKwkJCQkJCSAgIHJlc291cmNlX3NpemUoaW8pLAorCQkJCQkJICAgJnZhbCkpIHsKKwkJCQkv KiBzZXR1cCBJL08gc3BhY2Ugc2l6ZSAqLworCQkJCXdyaXRlbCh2YWwsIHAtPmJhc2UgKyBQQ0lf SU9TSVpFKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJpbGxlZ2FsIElP IG1lbSBzaXplXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXJldCA9IHBjaV9y ZW1hcF9pb3NwYWNlKGlvLCBpb19iYXNlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfd2Fybihk ZXYsICJlcnJvciAlZDogZmFpbGVkIHRvIG1hcCByZXNvdXJjZSAlcFJcbiIsCisJCQkJCSByZXQs IGlvKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIElPUkVTT1VSQ0Vf TUVNOgorCQkJbWVtID0gd2luLT5yZXM7CisJCQltZW0tPm5hbWUgPSAiR2VtaW5pIFBDSSBNRU0i OworCQkJYnJlYWs7CisJCWNhc2UgSU9SRVNPVVJDRV9CVVM6CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogU2V0dXAgaG9zdGJyaWRnZSAqLworCXZhbCA9 IHJlYWRsKHAtPmJhc2UgKyBQQ0lfQ1RSTCk7CisJdmFsIHw9IFBDSV9DT01NQU5EX0lPOworCXZh bCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7CisJdmFsIHw9IFBDSV9DT01NQU5EX01BU1RFUjsKKwl3 cml0ZWwodmFsLCBwLT5iYXNlICsgUENJX0NUUkwpOworCisJbGlzdF9zcGxpY2VfaW5pdCgmcmVz LCAmaG9zdC0+d2luZG93cyk7CisJcmV0ID0gcGNpX3JlZ2lzdGVyX2hvc3RfYnJpZGdlKGhvc3Qp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaG9zdDog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXAtPmJ1cyA9IGhvc3QtPmJ1czsKKwor CS8qIE1hc2sgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJZmFyYWRheV9wY2lfd3JpdGVf Y29uZmlnKHAtPmJ1cywgMCwgRkFSQURBWV9QQ0lfQ1RSTDIgKyAyLCAyLCAweEYwMDApOworCWlm ICh2YXJpYW50LT5jYXNjYWRlZF9pcnEpIHsKKwkJcmV0ID0gZmFyYWRheV9wY2lfc2V0dXBfY2Fz Y2FkZWRfaXJxKHApOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBz ZXR1cCBjYXNjYWRlZCBJUlFcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9 IGZhcmFkYXlfcGNpX3BhcnNlX21hcF9kbWFfcmFuZ2VzKHAsIGRldi0+b2Zfbm9kZSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBjaV9zY2FuX2NoaWxkX2J1cyhwLT5idXMpOworCXBj aV9maXh1cF9pcnFzKHBjaV9jb21tb25fc3dpenpsZSwgb2ZfaXJxX3BhcnNlX2FuZF9tYXBfcGNp KTsKKwlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMocC0+YnVzKTsKKwlwY2lfYnVzX2FkZF9kZXZp Y2VzKHAtPmJ1cyk7CisJcGNpX2ZyZWVfcmVzb3VyY2VfbGlzdCgmcmVzKTsKKworCXJldHVybiAw OworfQorCisvKgorICogV2UgZW5jb2RlIGJyaWRnZSB2YXJpYW50cyBoZXJlLCB3ZSBoYXZlIGF0 IGxlYXN0IHR3byBzbyBpdCBkb2Vzbid0CisgKiBodXJ0IHRvIGhhdmUgaW5mcmFzdHJ1Y3R1cmUg dG8gZW5jb21wYXNzIGZ1dHVyZSB2YXJpYW50cyBhcyB3ZWxsLgorICovCitjb25zdCBzdHJ1Y3Qg ZmFyYWRheV9wY2lfdmFyaWFudCBmYXJhZGF5X3JlZ3VsYXIgPSB7CisJLmNhc2NhZGVkX2lycSA9 IHRydWUsCit9OworCitjb25zdCBzdHJ1Y3QgZmFyYWRheV9wY2lfdmFyaWFudCBmYXJhZGF5X2R1 YWwgPSB7CisJLmNhc2NhZGVkX2lycSA9IGZhbHNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgZmFyYWRheV9wY2lfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRp YmxlID0gImZhcmFkYXksZnRwY2kxMDAiLAorCQkuZGF0YSA9ICZmYXJhZGF5X3JlZ3VsYXIsCisJ fSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZhcmFkYXksZnRwY2kxMDAtZHVhbCIsCisJCS5kYXRh ID0gJmZhcmFkYXlfZHVhbCwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgZmFyYWRheV9wY2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0g ImZ0cGNpMTAwIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGZhcmFkYXlfcGNp X29mX21hdGNoKSwKKwl9LAorCS5wcm9iZSAgPSBmYXJhZGF5X3BjaV9wcm9iZSwKK307CitidWls dGluX3BsYXRmb3JtX2RyaXZlcihmYXJhZGF5X3BjaV9kcml2ZXIpOwotLSAKMi45LjMKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kb3BlbndydC1kZXZlbCBt YWlsaW5nIGxpc3QKb3BlbndydC1kZXZlbEBsaXN0cy5vcGVud3J0Lm9yZwpodHRwczovL2xpc3Rz Lm9wZW53cnQub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9vcGVud3J0LWRldmVsCg==