From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966152Ab0CPKe5 (ORCPT ); Tue, 16 Mar 2010 06:34:57 -0400 Received: from inca-roads.misterjones.org ([213.251.177.50]:51120 "EHLO inca-roads.misterjones.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966133Ab0CPKey (ORCPT ); Tue, 16 Mar 2010 06:34:54 -0400 To: Eric Miao Subject: [PATCH] gpio: add interrupt handling capability to max732x MIME-Version: 1.0 Date: Tue, 16 Mar 2010 11:34:52 +0100 From: Marc Zyngier Cc: LKML , Jebediah Huang Organization: Metropolis Message-ID: <4ed0c90d27185c38ccb15d6d4442cfd4@localhost> User-Agent: RoundCube Webmail/0.3.1 Content-Type: multipart/mixed; boundary="=_7263cdb3b8bb28836279f78a3a9da7ad" X-SA-Exim-Connect-IP: X-SA-Exim-Rcpt-To: eric.y.miao@gmail.com, linux-kernel@vger.kernel.org, jebediah.huang@gmail.com X-SA-Exim-Mail-From: maz@misterjones.org X-SA-Exim-Scanned: No (on inca-roads.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=_7263cdb3b8bb28836279f78a3a9da7ad Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="UTF-8" Eric, Following on Jebediah's remark last month that max732x didn't support interrupt handling, I gave it a shot and hacked something that is similar to what pca953x does. It would be nice if someone (Jebediah?) could give it a shot, as it's been only compile-tested (need to find some time this WE to solder the chips to a board...). Thanks, M. -- Who you jivin' with that Cosmik Debris? --=_7263cdb3b8bb28836279f78a3a9da7ad Content-Transfer-Encoding: base64 Content-Type: text/plain; name*0*="UTF-8''0001-gpio-add-interrupt-handling-capability-to-max732x.p" name*1*="atch"; Content-Disposition: attachment; filename*0*="UTF-8''0001-gpio-add-interrupt-handling-capability-to-max73" filename*1*="2x.patch"; RnJvbSBlMTY3N2Q0YWM4YWE3MzY1YTRjN2VhMjczNDhmOWU4YTE0YmFhZjQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJjIFp5bmdpZXIgPG1hekBtaXN0ZXJqb25lcy5vcmc+CkRh dGU6IE1vbiwgMTUgTWFyIDIwMTAgMTI6MjQ6MzYgKzAwMDAKU3ViamVjdDogW1BBVENIXSBncGlv OiBhZGQgaW50ZXJydXB0IGhhbmRsaW5nIGNhcGFiaWxpdHkgdG8gbWF4NzMyeAoKTW9zdCB0aGUg R1BJTyBleHBhbmRlciBzdXBwb3J0ZWQgYnkgdGhlIG1heDczMnggZHJpdmVyIGhhdmUgaW50ZXJy dXB0CmdlbmVyYXRpb24gY2FwYWJpbGl0eSBieSByZXBvcnRpbmcgY2hhbmdlcyBvbiBpbnB1dCBw aW5zIHRocm91Z2ggYW4KSU5UIyBwaW4uIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgaXJxX2No aXAgZnVuY3Rpb25uYWxpdHkgKGVkZ2UKZGV0ZWN0aW9uIG9ubHkpLgoKU2lnbmVkLW9mZi1ieTog TWFyYyBaeW5naWVyIDxtYXpAbWlzdGVyam9uZXMub3JnPgotLS0KIGRyaXZlcnMvZ3Bpby9LY29u ZmlnICAgICAgICB8ICAgIDcgKwogZHJpdmVycy9ncGlvL21heDczMnguYyAgICAgIHwgIDM1NSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBpbmNsdWRlL2xpbnV4 L2kyYy9tYXg3MzJ4LmggfCAgICAzICsKIDMgZmlsZXMgY2hhbmdlZCwgMzQ2IGluc2VydGlvbnMo KyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIv ZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggZmVlNjc4Zi4uMWFhNjNhMiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTEzOSw2 ICsxMzksMTMgQEAgY29uZmlnIEdQSU9fTUFYNzMyWAogCSAgQm9hcmQgc2V0dXAgY29kZSBtdXN0 IHNwZWNpZnkgdGhlIG1vZGVsIHRvIHVzZSwgYW5kIHRoZSBzdGFydAogCSAgbnVtYmVyIGZvciB0 aGVzZSBHUElPcy4KIAorY29uZmlnIEdQSU9fTUFYNzMyWF9JUlEKKwlib29sICJJbnRlcnJ1cHQg Y29udHJvbGxlciBzdXBwb3J0IGZvciBNQVg3MzJ4IgorCWRlcGVuZHMgb24gR1BJT19NQVg3MzJY PXkgJiYgR0VORVJJQ19IQVJESVJRUworCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBlbmFibGUg dGhlIG1heDczMnggdG8gYmUgdXNlZCBhcyBhbiBpbnRlcnJ1cHQKKwkgIGNvbnRyb2xsZXIuIEl0 IHJlcXVpcmVzIHRoZSBkcml2ZXIgdG8gYmUgYnVpbHQgaW4gdGhlIGtlcm5lbC4KKwogY29uZmln IEdQSU9fUENBOTUzWAogCXRyaXN0YXRlICJQQ0E5NTN4LCBQQ0E5NTV4LCBUQ0E2NHh4LCBhbmQg TUFYNzMxMCBJL08gcG9ydHMiCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3Bpby9tYXg3MzJ4LmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMyeC5jCmluZGV4IDM2MThmZWIuLjY0 N2FlNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMKKysrIGIvZHJpdmVycy9n cGlvL21heDczMnguYwpAQCAtMTcsNyArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K ICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNs dWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvbWF4NzMyeC5oPgogCkBAIC0z MSw3ICszMiw4IEBACiAgKiAgIC0gT3BlbiBEcmFpbiBJL08KICAqCiAgKiBkZXNpZ25hdGVkIGJ5 ICdPJywgJ0knIGFuZCAnUCcgaW5kaXZpZHVhbGx5IGFjY29yZGluZyB0byBNQVhJTSdzCi0gKiBk YXRhc2hlZXRzLgorICogZGF0YXNoZWV0cy4gJ0knIGFuZCAnUCcgcG9ydHMgYXJlIGludGVycnVw dCBjYXBhYmxlcywgc29tZSB3aXRoCisgKiBhIGRlZGljYXRlZCBpbnRlcnJ1cHQgbWFzay4KICAq CiAgKiBUaGVyZSBhcmUgdHdvIGdyb3VwcyBvZiBJL08gcG9ydHMsIGVhY2ggZ3JvdXAgdXN1YWxs eSBpbmNsdWRlcwogICogdXAgdG8gOCBJL08gcG9ydHMsIGFuZCBpcyBhY2Nlc3NlZCBieSBhIHNw ZWNpZmljIEkyQyBhZGRyZXNzOgpAQCAtNDQsNyArNDYsOCBAQAogICoKICAqIFdpdGhpbiBlYWNo IGdyb3VwIG9mIHBvcnRzLCB0aGVyZSBhcmUgZml2ZSBrbm93biBjb21iaW5hdGlvbnMgb2YKICAq IEkvTyBwb3J0czogNEk0TywgNFA0TywgOEksIDhQLCA4Tywgc2VlIHRoZSBkZWZpbml0aW9ucyBi ZWxvdyBmb3IKLSAqIHRoZSBkZXRhaWxlZCBvcmdhbml6YXRpb24gb2YgdGhlc2UgcG9ydHMuCisg KiB0aGUgZGV0YWlsZWQgb3JnYW5pemF0aW9uIG9mIHRoZXNlIHBvcnRzLiBPbmx5IEdvdXAgQSBp cyBpbnRlcnJ1cHQKKyAqIGNhcGFibGUuCiAgKgogICogR1BJTyBudW1iZXJzIHN0YXJ0IGZyb20g J2dwaW9fYmFzZSArIDAnIHRvICdncGlvX2Jhc2UgKyA4LzE2JywKICAqIGFuZCBHUElPcyBmcm9t IEdST1VQX0EgYXJlIG51bWJlcmVkIGJlZm9yZSB0aG9zZSBmcm9tIEdST1VQX0IKQEAgLTY4LDE2 ICs3MSw0NyBAQAogI2RlZmluZSBHUk9VUF9BKHgpCSgoeCkgJiAweGZmZmYpCS8qIEkyQyBBZGRy OiAwYicxMTB4eHh4ICovCiAjZGVmaW5lIEdST1VQX0IoeCkJKCh4KSA8PCAxNikJLyogSTJDIEFk ZHI6IDBiJzEwMXh4eHggKi8KIAorI2RlZmluZSBJTlRfTk9ORQkweDAJLyogTm8gaW50ZXJydXB0 IGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgSU5UX05PX01BU0sJMHgxCS8qIEhhcyBpbnRlcnJ1cHRz LCBubyBtYXNrICovCisjZGVmaW5lIElOVF9JTkRFUF9NQVNLCTB4MgkvKiBIYXMgaW50ZXJydXB0 cywgaW5kZXBlbmRlbnQgbWFzayAqLworI2RlZmluZSBJTlRfTUVSR0VEX01BU0sgMHgzCS8qIEhh cyBpbnRlcnJ1cHRzLCBtZXJnZWQgbWFzayAqLworCisjZGVmaW5lIElOVF9DQVBTKHgpCSgoKHVp bnQ2NF90KSh4KSkgPDwgMzIpCisKK2VudW0geworCU1BWDczMTksCisJTUFYNzMyMCwKKwlNQVg3 MzIxLAorCU1BWDczMjIsCisJTUFYNzMyMywKKwlNQVg3MzI0LAorCU1BWDczMjUsCisJTUFYNzMy NiwKKwlNQVg3MzI3LAorfTsKKworc3RhdGljIHVpbnQ2NF90IG1heDczMnhfZmVhdHVyZXNbXSA9 IHsKKwlbTUFYNzMxOV0gPSBHUk9VUF9BKElPXzhJKSB8IElOVF9DQVBTKElOVF9NRVJHRURfTUFT SyksCisJW01BWDczMjBdID0gR1JPVVBfQihJT184TyksCisJW01BWDczMjFdID0gR1JPVVBfQShJ T184UCkgfCBJTlRfQ0FQUyhJTlRfTk9fTUFTSyksCisJW01BWDczMjJdID0gR1JPVVBfQShJT180 STRPKSB8IElOVF9DQVBTKElOVF9NRVJHRURfTUFTSyksCisJW01BWDczMjNdID0gR1JPVVBfQShJ T180UDRPKSB8IElOVF9DQVBTKElOVF9JTkRFUF9NQVNLKSwKKwlbTUFYNzMyNF0gPSBHUk9VUF9B KElPXzhJKSB8IEdST1VQX0IoSU9fOE8pIHwgSU5UX0NBUFMoSU5UX01FUkdFRF9NQVNLKSwKKwlb TUFYNzMyNV0gPSBHUk9VUF9BKElPXzhQKSB8IEdST1VQX0IoSU9fOE8pIHwgSU5UX0NBUFMoSU5U X05PX01BU0spLAorCVtNQVg3MzI2XSA9IEdST1VQX0EoSU9fNEk0TykgfCBHUk9VUF9CKElPXzhP KSB8IElOVF9DQVBTKElOVF9NRVJHRURfTUFTSyksCisJW01BWDczMjddID0gR1JPVVBfQShJT180 UDRPKSB8IEdST1VQX0IoSU9fOE8pIHwgSU5UX0NBUFMoSU5UX05PX01BU0spLAorfTsKKwogc3Rh dGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDczMnhfaWRbXSA9IHsKLQl7ICJtYXg3 MzE5IiwgR1JPVVBfQShJT184SSkgfSwKLQl7ICJtYXg3MzIwIiwgR1JPVVBfQihJT184TykgfSwK LQl7ICJtYXg3MzIxIiwgR1JPVVBfQShJT184UCkgfSwKLQl7ICJtYXg3MzIyIiwgR1JPVVBfQShJ T180STRPKSB9LAotCXsgIm1heDczMjMiLCBHUk9VUF9BKElPXzRQNE8pIH0sCi0JeyAibWF4NzMy NCIsIEdST1VQX0EoSU9fOEkpIHwgR1JPVVBfQihJT184TykgfSwKLQl7ICJtYXg3MzI1IiwgR1JP VVBfQShJT184UCkgfCBHUk9VUF9CKElPXzhPKSB9LAotCXsgIm1heDczMjYiLCBHUk9VUF9BKElP XzRJNE8pIHwgR1JPVVBfQihJT184TykgfSwKLQl7ICJtYXg3MzI3IiwgR1JPVVBfQShJT180UDRP KSB8IEdST1VQX0IoSU9fOE8pIH0sCisJeyAibWF4NzMxOSIsIE1BWDczMTkgfSwKKwl7ICJtYXg3 MzIwIiwgTUFYNzMyMCB9LAorCXsgIm1heDczMjEiLCBNQVg3MzIxIH0sCisJeyAibWF4NzMyMiIs IE1BWDczMjIgfSwKKwl7ICJtYXg3MzIzIiwgTUFYNzMyMyB9LAorCXsgIm1heDczMjQiLCBNQVg3 MzI0IH0sCisJeyAibWF4NzMyNSIsIE1BWDczMjUgfSwKKwl7ICJtYXg3MzI2IiwgTUFYNzMyNiB9 LAorCXsgIm1heDczMjciLCBNQVg3MzI3IH0sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFC TEUoaTJjLCBtYXg3MzJ4X2lkKTsKQEAgLTk2LDkgKzEzMCwxOSBAQCBzdHJ1Y3QgbWF4NzMyeF9j aGlwIHsKIAogCXN0cnVjdCBtdXRleAlsb2NrOwogCXVpbnQ4X3QJCXJlZ19vdXRbMl07CisKKyNp ZmRlZiBDT05GSUdfR1BJT19NQVg3MzJYX0lSUQorCXN0cnVjdCBtdXRleAlpcnFfbG9jazsKKwlp bnQJCWlycV9iYXNlOworCXVpbnQ4X3QJCWlycV9tYXNrOworCXVpbnQ4X3QJCWlycV9tYXNrX2N1 cjsKKwl1aW50OF90CQlpcnFfdHJpZ19yYWlzZTsKKwl1aW50OF90CQlpcnFfdHJpZ19mYWxsOwor CXVpbnQ4X3QJCWlycV9mZWF0dXJlczsKKyNlbmRpZgogfTsKIAotc3RhdGljIGludCBtYXg3MzJ4 X3dyaXRlKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAsIGludCBncm91cF9hLCB1aW50OF90IHZh bCkKK3N0YXRpYyBpbnQgbWF4NzMyeF93cml0ZWIoc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCwg aW50IGdyb3VwX2EsIHVpbnQ4X3QgdmFsKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7 CiAJaW50IHJldDsKQEAgLTExMyw3ICsxNTcsNyBAQCBzdGF0aWMgaW50IG1heDczMnhfd3JpdGUo c3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCwgaW50IGdyb3VwX2EsIHVpbnQ4X3QgdmFsKQogCXJl dHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1heDczMnhfcmVhZChzdHJ1Y3QgbWF4NzMyeF9jaGlw ICpjaGlwLCBpbnQgZ3JvdXBfYSwgdWludDhfdCAqdmFsKQorc3RhdGljIGludCBtYXg3MzJ4X3Jl YWRiKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAsIGludCBncm91cF9hLCB1aW50OF90ICp2YWwp CiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlpbnQgcmV0OwpAQCAtMTQyLDcgKzE4 Niw3IEBAIHN0YXRpYyBpbnQgbWF4NzMyeF9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlw ICpnYywgdW5zaWduZWQgb2ZmKQogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG1h eDczMnhfY2hpcCwgZ3Bpb19jaGlwKTsKIAotCXJldCA9IG1heDczMnhfcmVhZChjaGlwLCBpc19n cm91cF9hKGNoaXAsIG9mZiksICZyZWdfdmFsKTsKKwlyZXQgPSBtYXg3MzJ4X3JlYWRiKGNoaXAs IGlzX2dyb3VwX2EoY2hpcCwgb2ZmKSwgJnJlZ192YWwpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1 cm4gMDsKIApAQCAtMTYyLDcgKzIwNiw3IEBAIHN0YXRpYyB2b2lkIG1heDczMnhfZ3Bpb19zZXRf dmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZiwgaW50IHZhbCkKIAlyZWdf b3V0ID0gKG9mZiA+IDcpID8gY2hpcC0+cmVnX291dFsxXSA6IGNoaXAtPnJlZ19vdXRbMF07CiAJ cmVnX291dCA9ICh2YWwpID8gcmVnX291dCB8IG1hc2sgOiByZWdfb3V0ICYgfm1hc2s7CiAKLQly ZXQgPSBtYXg3MzJ4X3dyaXRlKGNoaXAsIGlzX2dyb3VwX2EoY2hpcCwgb2ZmKSwgcmVnX291dCk7 CisJcmV0ID0gbWF4NzMyeF93cml0ZWIoY2hpcCwgaXNfZ3JvdXBfYShjaGlwLCBvZmYpLCByZWdf b3V0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTIxOSwxMiArMjYzLDI3OCBA QCBzdGF0aWMgaW50IG1heDczMnhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2No aXAgKmdjLAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0dQSU9fTUFYNzMyWF9JUlEK K3N0YXRpYyBpbnQgbWF4NzMyeF93cml0ZXcoc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCwgdWlu dDE2X3QgdmFsKQoreworCWludCByZXQ7CisKKwl2YWwgPSBjcHVfdG9fbGUxNih2YWwpOworCisJ cmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNoaXAtPmNsaWVudF9ncm91cF9hLCAoY2hhciAqKSZ2YWws IDIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNoaXAtPmNsaWVudF9ncm91cF9hLT5k ZXYsICJmYWlsZWQgd3JpdGluZ1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbWF4NzMyeF9yZWFkdyhzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlw LCB1aW50MTZfdCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3Yo Y2hpcC0+Y2xpZW50X2dyb3VwX2EsIChjaGFyICopdmFsLCAyKTsKKwlpZiAocmV0IDwgMCkgewor CQlkZXZfZXJyKCZjaGlwLT5jbGllbnRfZ3JvdXBfYS0+ZGV2LCAiZmFpbGVkIHJlYWRpbmdcbiIp OworCQlyZXR1cm4gcmV0OworCX0KKworCSp2YWwgPSBsZTE2X3RvX2NwdSgqdmFsKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfdXBkYXRlX21hc2soc3RydWN0IG1h eDczMnhfY2hpcCAqY2hpcCkKK3sKKwl1aW50MTZfdCBtc2c7CisKKwlpZiAoY2hpcC0+aXJxX21h c2sgPT0gY2hpcC0+aXJxX21hc2tfY3VyKQorCQlyZXR1cm47CisKKwljaGlwLT5pcnFfbWFzayA9 IGNoaXAtPmlycV9tYXNrX2N1cjsKKworCWlmIChjaGlwLT5pcnFfZmVhdHVyZXMgPT0gSU5UX05P X01BU0spCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCisJc3dpdGNo IChjaGlwLT5pcnFfZmVhdHVyZXMpIHsKKwljYXNlIElOVF9JTkRFUF9NQVNLOgorCQltc2cgPSAo Y2hpcC0+aXJxX21hc2sgPDwgOCkgfCBjaGlwLT5yZWdfb3V0WzBdOworCQltYXg3MzJ4X3dyaXRl dyhjaGlwLCBtc2cpOworCQlicmVhazsKKworCWNhc2UgSU5UX01FUkdFRF9NQVNLOgorCQltc2cg PSBjaGlwLT5pcnFfbWFzayB8IGNoaXAtPnJlZ19vdXRbMF07CisJCW1heDczMnhfd3JpdGViKGNo aXAsIDEsICh1aW50OF90KW1zZyk7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmY2hp cC0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgbWF4NzMyeF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bp b19jaGlwICpnYywgdW5zaWduZWQgb2ZmKQoreworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXA7 CisKKwljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgbWF4NzMyeF9jaGlwLCBncGlvX2No aXApOworCXJldHVybiBjaGlwLT5pcnFfYmFzZSArIG9mZjsKK30KKworc3RhdGljIHZvaWQgbWF4 NzMyeF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg3MzJ4X2NoaXAg KmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJY2hpcC0+aXJxX21hc2tfY3VyICY9 IH4oMSA8PCAoaXJxIC0gY2hpcC0+aXJxX2Jhc2UpKTsKK30KKworc3RhdGljIHZvaWQgbWF4NzMy eF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IG1heDczMnhfY2hpcCAq Y2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisKKwljaGlwLT5pcnFfbWFza19jdXIgfD0g MSA8PCAoaXJxIC0gY2hpcC0+aXJxX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBtYXg3MzJ4X2ly cV9idXNfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNo aXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJbXV0ZXhfbG9jaygmY2hpcC0+aXJxX2xv Y2spOworCWNoaXAtPmlycV9tYXNrX2N1ciA9IGNoaXAtPmlycV9tYXNrOworfQorCitzdGF0aWMg dm9pZCBtYXg3MzJ4X2lycV9idXNfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlz dHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKworCW1h eDczMnhfaXJxX3VwZGF0ZV9tYXNrKGNoaXApOworCW11dGV4X3VubG9jaygmY2hpcC0+aXJxX2xv Y2spOworfQorCitzdGF0aWMgaW50IG1heDczMnhfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBp cnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSBn ZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXVpbnQxNl90IG9mZiA9IGlycSAtIGNoaXAtPmlycV9i YXNlOworCXVpbnQxNl90IG1hc2sgPSAxIDw8IG9mZjsKKworCWlmICghKG1hc2sgJiBjaGlwLT5k aXJfaW5wdXQpKSB7CisJCWRldl9kYmcoJmNoaXAtPmNsaWVudC0+ZGV2LCAiJXMgcG9ydCAlZCBp cyBvdXRwdXQgb25seVxuIiwKKwkJCWNoaXAtPmNsaWVudC0+bmFtZSwgb2ZmKTsKKwkJcmV0dXJu IC1FQUNDRVM7CisJfQorCisJaWYgKCEodHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkpIHsKKwkJ ZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsICJpcnEgJWQ6IHVuc3VwcG9ydGVkIHR5cGUgJWRc biIsCisJCQlpcnEsIHR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodHlwZSAm IElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJY2hpcC0+aXJxX3RyaWdfZmFsbCB8PSBtYXNrOwor CWVsc2UKKwkJY2hpcC0+aXJxX3RyaWdfZmFsbCAmPSB+bWFzazsKKworCWlmICh0eXBlICYgSVJR X1RZUEVfRURHRV9SSVNJTkcpCisJCWNoaXAtPmlycV90cmlnX3JhaXNlIHw9IG1hc2s7CisJZWxz ZQorCQljaGlwLT5pcnFfdHJpZ19yYWlzZSAmPSB+bWFzazsKKworCXJldHVybiBtYXg3MzJ4X2dw aW9fZGlyZWN0aW9uX2lucHV0KCZjaGlwLT5ncGlvX2NoaXAsIG9mZik7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgaXJxX2NoaXAgbWF4NzMyeF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJCT0gIm1heDczMngi LAorCS5tYXNrCQkJPSBtYXg3MzJ4X2lycV9tYXNrLAorCS51bm1hc2sJCQk9IG1heDczMnhfaXJx X3VubWFzaywKKwkuYnVzX2xvY2sJCT0gbWF4NzMyeF9pcnFfYnVzX2xvY2ssCisJLmJ1c19zeW5j X3VubG9jawk9IG1heDczMnhfaXJxX2J1c19zeW5jX3VubG9jaywKKwkuc2V0X3R5cGUJCT0gbWF4 NzMyeF9pcnFfc2V0X3R5cGUsCit9OworCitzdGF0aWMgdWludDhfdCBtYXg3MzJ4X2lycV9wZW5k aW5nKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXApCit7CisJdWludDhfdCBjdXJfc3RhdDsKKwl1 aW50OF90IG9sZF9zdGF0OworCXVpbnQ4X3QgdHJpZ2dlcjsKKwl1aW50OF90IHBlbmRpbmc7CisJ dWludDE2X3Qgc3RhdHVzOworCWludCByZXQ7CisKKwlyZXQgPSBtYXg3MzJ4X3JlYWR3KGNoaXAs ICZzdGF0dXMpOworCWlmIChyZXQpCisJCXJldHVybiAwOworCisJdHJpZ2dlciA9IHN0YXR1cyA+ PiA4OworCXRyaWdnZXIgJj0gY2hpcC0+aXJxX21hc2s7CisKKwlpZiAoIXRyaWdnZXIpCisJCXJl dHVybiAwOworCisJY3VyX3N0YXQgPSBzdGF0dXMgJiAweEZGOworCWN1cl9zdGF0ICY9IGNoaXAt PmlycV9tYXNrOworCisJb2xkX3N0YXQgPSBjdXJfc3RhdCBeIHRyaWdnZXI7CisKKwlwZW5kaW5n ID0gKG9sZF9zdGF0ICYgY2hpcC0+aXJxX3RyaWdfZmFsbCkgfAorCQkgIChjdXJfc3RhdCAmIGNo aXAtPmlycV90cmlnX3JhaXNlKTsKKwlwZW5kaW5nICY9IHRyaWdnZXI7CisKKwlyZXR1cm4gcGVu ZGluZzsKK30KKworc3RhdGljIGlycXJldHVybl90IG1heDczMnhfaXJxX2hhbmRsZXIoaW50IGly cSwgdm9pZCAqZGV2aWQpCit7CisJc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCA9IGRldmlkOwor CXVpbnQ4X3QgcGVuZGluZzsKKwl1aW50OF90IGxldmVsOworCisJcGVuZGluZyA9IG1heDczMnhf aXJxX3BlbmRpbmcoY2hpcCk7CisKKwlpZiAoIXBlbmRpbmcpCisJCXJldHVybiBJUlFfSEFORExF RDsKKworCWRvIHsKKwkJbGV2ZWwgPSBfX2ZmcyhwZW5kaW5nKTsKKwkJaGFuZGxlX25lc3RlZF9p cnEobGV2ZWwgKyBjaGlwLT5pcnFfYmFzZSk7CisKKwkJcGVuZGluZyAmPSB+KDEgPDwgbGV2ZWwp OworCX0gd2hpbGUgKHBlbmRpbmcpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0 aWMgaW50IG1heDczMnhfaXJxX3NldHVwKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAsCisJCQkg ICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50ID0gY2hpcC0+Y2xpZW50OworCXN0cnVjdCBtYXg3MzJ4X3BsYXRmb3JtX2RhdGEg KnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgaGFzX2lycSA9IG1heDcz MnhfZmVhdHVyZXNbaWQtPmRyaXZlcl9kYXRhXSA+PiAzMjsKKwlpbnQgcmV0OworCisJaWYgKHBk YXRhLT5pcnFfYmFzZSAmJiBoYXNfaXJxICE9IElOVF9OT05FKSB7CisJCWludCBsdmw7CisKKwkJ Y2hpcC0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CisJCWNoaXAtPmlycV9mZWF0dXJlcyA9 IGhhc19pcnE7CisJCW11dGV4X2luaXQoJmNoaXAtPmlycV9sb2NrKTsKKworCQlmb3IgKGx2bCA9 IDA7IGx2bCA8IGNoaXAtPmdwaW9fY2hpcC5uZ3BpbzsgbHZsKyspIHsKKwkJCWludCBpcnEgPSBs dmwgKyBjaGlwLT5pcnFfYmFzZTsKKworCQkJaWYgKCEoY2hpcC0+ZGlyX2lucHV0ICYgKDEgPDwg bHZsKSkpCisJCQkJY29udGludWU7CisKKwkJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgY2hpcCk7 CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmbWF4NzMyeF9pcnFfY2hpcCwKKwkJ CQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCQkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKGlycSwgMSk7 CisjaWZkZWYgQ09ORklHX0FSTQorCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOwor I2Vsc2UKKwkJCXNldF9pcnFfbm9wcm9iZShpcnEpOworI2VuZGlmCisJCX0KKworCQlyZXQgPSBy ZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAg bWF4NzMyeF9pcnFfaGFuZGxlciwKKwkJCQkJICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFG X09ORVNIT1QsCisJCQkJCSAgIGRldl9uYW1lKCZjbGllbnQtPmRldiksIGNoaXApOworCQlpZiAo cmV0KSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlycSAl ZFxuIiwKKwkJCQljbGllbnQtPmlycSk7CisJCQlnb3RvIG91dF9mYWlsZWQ7CisJCX0KKworCQlj aGlwLT5ncGlvX2NoaXAudG9faXJxID0gbWF4NzMyeF9ncGlvX3RvX2lycTsKKwl9CisKKwlyZXR1 cm4gMDsKKworb3V0X2ZhaWxlZDoKKwljaGlwLT5pcnFfYmFzZSA9IDA7CisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfdGVhcmRvd24oc3RydWN0IG1heDczMnhfY2hp cCAqY2hpcCkKK3sKKwlpZiAoY2hpcC0+aXJxX2Jhc2UpCisJCWZyZWVfaXJxKGNoaXAtPmNsaWVu dC0+aXJxLCBjaGlwKTsKK30KKyNlbHNlIC8qIENPTkZJR19HUElPX01BWDczMlhfSVJRICovCitz dGF0aWMgaW50IG1heDczMnhfaXJxX3NldHVwKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAsCisJ CQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50ID0gY2hpcC0+Y2xpZW50OworCXN0cnVjdCBtYXg3MzJ4X3BsYXRmb3JtX2Rh dGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgaGFzX2lycSA9IG1h eDczMnhfZmVhdHVyZXNbaWQtPmRyaXZlcl9kYXRhXSA+PiAzMjsKKworCWlmIChwZGF0YS0+aXJx X2Jhc2UgJiYgaGFzX2lycSAhPSBJTlRfTk9ORSkKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAi aW50ZXJydXB0IHN1cHBvcnQgbm90IGNvbXBpbGVkIGluXG4iKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBtYXg3MzJ4X2lycV90ZWFyZG93bihzdHJ1Y3QgbWF4NzMyeF9jaGlwICpj aGlwKQoreworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1heDczMnhfc2V0dXBf Z3BpbyhzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwLAogCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2Rl dmljZV9pZCAqaWQsCiAJCQkJCXVuc2lnbmVkIGdwaW9fc3RhcnQpCiB7CiAJc3RydWN0IGdwaW9f Y2hpcCAqZ2MgPSAmY2hpcC0+Z3Bpb19jaGlwOwotCXVpbnQzMl90IGlkX2RhdGEgPSBpZC0+ZHJp dmVyX2RhdGE7CisJdWludDMyX3QgaWRfZGF0YSA9ICh1aW50MzJfdCltYXg3MzJ4X2ZlYXR1cmVz W2lkLT5kcml2ZXJfZGF0YV07CiAJaW50IGksIHBvcnQgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8 IDE2OyBpKyssIGlkX2RhdGEgPj49IDIpIHsKQEAgLTMxNiw5ICs2MjYsMTMgQEAgc3RhdGljIGlu dCBfX2RldmluaXQgbWF4NzMyeF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCiAJ bXV0ZXhfaW5pdCgmY2hpcC0+bG9jayk7CiAKLQltYXg3MzJ4X3JlYWQoY2hpcCwgaXNfZ3JvdXBf YShjaGlwLCAwKSwgJmNoaXAtPnJlZ19vdXRbMF0pOworCW1heDczMnhfcmVhZGIoY2hpcCwgaXNf Z3JvdXBfYShjaGlwLCAwKSwgJmNoaXAtPnJlZ19vdXRbMF0pOwogCWlmIChucl9wb3J0ID4gNykK LQkJbWF4NzMyeF9yZWFkKGNoaXAsIGlzX2dyb3VwX2EoY2hpcCwgOCksICZjaGlwLT5yZWdfb3V0 WzFdKTsKKwkJbWF4NzMyeF9yZWFkYihjaGlwLCBpc19ncm91cF9hKGNoaXAsIDgpLCAmY2hpcC0+ cmVnX291dFsxXSk7CisKKwlyZXQgPSBtYXg3MzJ4X2lycV9zZXR1cChjaGlwLCBpZCk7CisJaWYg KHJldCkKKwkJZ290byBvdXRfZmFpbGVkOwogCiAJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZjaGlwLT5n cGlvX2NoaXApOwogCWlmIChyZXQpCkBAIC0zMzUsNiArNjQ5LDcgQEAgc3RhdGljIGludCBfX2Rl dmluaXQgbWF4NzMyeF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCXJldHVybiAw OwogCiBvdXRfZmFpbGVkOgorCW1heDczMnhfaXJxX3RlYXJkb3duKGNoaXApOwogCWtmcmVlKGNo aXApOwogCXJldHVybiByZXQ7CiB9CkBAIC0zNjIsNiArNjc3LDggQEAgc3RhdGljIGludCBfX2Rl dmV4aXQgbWF4NzMyeF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIAkJcmV0dXJu IHJldDsKIAl9CiAKKwltYXg3MzJ4X2lycV90ZWFyZG93bihjaGlwKTsKKwogCS8qIHVucmVnaXN0 ZXIgYW55IGR1bW15IGkyY19jbGllbnQgKi8KIAlpZiAoY2hpcC0+Y2xpZW50X2R1bW15KQogCQlp MmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2hpcC0+Y2xpZW50X2R1bW15KTsKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvaTJjL21heDczMnguaCBiL2luY2x1ZGUvbGludXgvaTJjL21heDczMnguaApp bmRleCBlMTAzMzY2Li5jMDRiYWM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy9tYXg3 MzJ4LmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvbWF4NzMyeC5oCkBAIC03LDYgKzcsOSBAQCBz dHJ1Y3QgbWF4NzMyeF9wbGF0Zm9ybV9kYXRhIHsKIAkvKiBudW1iZXIgb2YgdGhlIGZpcnN0IEdQ SU8gKi8KIAl1bnNpZ25lZAlncGlvX2Jhc2U7CiAKKwkvKiBpbnRlcnJ1cHQgYmFzZSAqLworCWlu dAkJaXJxX2Jhc2U7CisKIAl2b2lkCQkqY29udGV4dDsJLyogcGFyYW0gdG8gc2V0dXAvdGVhcmRv d24gKi8KIAogCWludAkJKCpzZXR1cCkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLS0gCjEu Ny4wLjIKCg== --=_7263cdb3b8bb28836279f78a3a9da7ad--