From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751574AbWGZMlq (ORCPT ); Wed, 26 Jul 2006 08:41:46 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751593AbWGZMlq (ORCPT ); Wed, 26 Jul 2006 08:41:46 -0400 Received: from out4.smtp.messagingengine.com ([66.111.4.28]:10680 "EHLO out4.smtp.messagingengine.com") by vger.kernel.org with ESMTP id S1751574AbWGZMlp (ORCPT ); Wed, 26 Jul 2006 08:41:45 -0400 Message-Id: <1153917707.16842.266908498@webmail.messagingengine.com> X-Sasl-Enc: kvsU4CPsvTBpDqnJKsClSai81j9gtcE+sR7LL5qHnuka 1153917707 From: "Komal Shah" To: khali@linux-fr.org, i2c@lm-sensors.org, gregkh@suse.de, tony@atomide.com Cc: juha.yrjola@solidboot.com, dbrownell@users.sourceforge.net, linux-kernel@vger.kernel.org, r-woodruff2@ti.com, imre.deak@nokia.com, akpm@osdl.org Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_1153917707168421"; charset="ISO-8859-1" MIME-Version: 1.0 X-Mailer: MessagingEngine.com Webmail Interface Subject: [PATCH] OMAP: I2C driver for TI OMAP boards. Date: Wed, 26 Jul 2006 05:41:47 -0700 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --_----------=_1153917707168421 Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="ISO-8859-1" MIME-Version: 1.0 X-Mailer: MessagingEngine.com Webmail Interface Date: Wed, 26 Jul 2006 12:41:47 UT Jean/Greg/Tony, This patch adds I2C bus driver for various Texas Instruments (TI) OMAP1/2 (http://www.ti.com/omap) series based boards like OMAP1510/1610/1710/242x. Please review it and give Ack if it is OK. ---Komal Shah http://komalshah.blogspot.com -- http://www.fastmail.fm - A fast, anti-spam email service. --_----------=_1153917707168421 Content-Disposition: attachment; filename="0001-OMAP-I2C-driver-for-TI-OMAP-boards.patch" Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name="0001-OMAP-I2C-driver-for-TI-OMAP-boards.patch" MIME-Version: 1.0 X-Mailer: MessagingEngine.com Webmail Interface Date: Wed, 26 Jul 2006 12:41:47 UT RnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEtv bWFsIFNoYWggPGtvbWFsX3NoYWg4MDIwMDNAeWFob28uY29tPgpEYXRlOiBX ZWQsIDI2IEp1bCAyMDA2IDIzOjM4OjEzICswNTMwClN1YmplY3Q6IFtQQVRD SF0gT01BUDogSTJDIGRyaXZlciBmb3IgVEkgT01BUCBib2FyZHMuCgpUaGlz IHBhdGNoIGFkZHMgSTJDIGJ1cyBkcml2ZXIgZm9yIHZhcmlvdXMgVGV4YXMK SW5zdHJ1bWVudHMgKFRJKSBPTUFQMS8yIChodHRwOi8vd3d3LnRpLmNvbS9v bWFwKSBzZXJpZXMKYmFzZWQgYm9hcmRzIGxpa2UgT01BUDE1MTAvMTYxMC8x NzEwLzI0MnguCgpTaWduZWQtb2ZmLWJ5OiBLb21hbCBTaGFoIDxrb21hbF9z aGFoODAyMDAzQHlhaG9vLmNvbT4KCi0tLQoKIGRyaXZlcnMvaTJjL2J1c3Nl cy9LY29uZmlnICAgIHwgICAgNyAKIGRyaXZlcnMvaTJjL2J1c3Nlcy9NYWtl ZmlsZSAgIHwgICAgMSAKIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5j IHwgIDcxNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCA3MjQgaW5zZXJ0aW9ucygrKSwgMCBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2kyYy9i dXNzZXMvaTJjLW9tYXAuYwoKZjcyOTYzNTNkZjdlNTc0YThhZTNiZjRjNjEx NTY4NTNiNDA2ZTZhMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2Vz L0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRleCA4 ODQzMjBlLi5iZjQ5Yzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNz ZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpA QCAtNTM3LDQgKzUzNywxMSBAQCBjb25maWcgSTJDX01WNjRYWFgKIAkgIFRo aXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYg c28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1tdjY0eHh4 LgogCitjb25maWcgSTJDX09NQVAKKwl0cmlzdGF0ZSAiT01BUCBJMkMgYWRh cHRlciIKKwlkZXBlbmRzIG9uIEkyQyAmJiBBUkNIX09NQVAKKwlkZWZhdWx0 IHkgaWYgTUFDSF9PTUFQX0gzIHx8IE1BQ0hfT01BUF9PU0sKKwloZWxwCisJ ICBTdXBwb3J0IGZvciBUSSBPTUFQIEkyQyBkcml2ZXIuIFNheSB5ZXMgaWYg eW91IHdhbnQgdG8gdXNlIHRoZSBPTUFQCisJICBJMkMgaW50ZXJmYWNlLgog ZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2Vm aWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IGFjNTZk ZjUuLjJmZDgyZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAg LTQzLDYgKzQzLDcgQEAgb2JqLSQoQ09ORklHX0kyQ19WSUFQUk8pCSs9IGky Yy12aWFwcm8ubwogb2JqLSQoQ09ORklHX0kyQ19WT09ET08zKQkrPSBpMmMt dm9vZG9vMy5vCiBvYmotJChDT05GSUdfU0N4MjAwX0FDQikJKz0gc2N4MjAw X2FjYi5vCiBvYmotJChDT05GSUdfU0N4MjAwX0kyQykJKz0gc2N4MjAwX2ky Yy5vCitvYmotJChDT05GSUdfSTJDX09NQVApCQkrPSBpMmMtb21hcC5vCiAK IGlmZXEgKCQoQ09ORklHX0kyQ19ERUJVR19CVVMpLHkpCiBFWFRSQV9DRkxB R1MgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2Vz L2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWExOGZmCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFw LmMKQEAgLTAsMCArMSw3MTYgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL2ky Yy9idXNzZXMvaTJjLW9tYXAuYworICoKKyAqIFRJIE9NQVAgSTJDIG1hc3Rl ciBtb2RlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBNb250 YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQg VGV4YXMgSW5zdHJ1bWVudHMuCisgKgorICogVXBkYXRlZCB0byB3b3JrIHdp dGggbXVsdGlwbGUgSTJDIGludGVyZmFjZXMgb24gMjR4eCBieQorICogVG9u eSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4gYW5kIEltcmUgRGVhayA8 aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBO b2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENsZWFuZWQgdXAgYnkgSnVoYSBZ cmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZpbGUgd2FzIGhp Z2hseSBsZXZlcmFnZWQgZnJvbSBpMmMtZWxla3Rvci5jOgorICoKKyAqIENv cHlyaWdodCAxOTk1LTk3IFNpbW9uIEcuIFZvZ2wKKyAqICAgICAgICAgICAx OTk4LTk5IEhhbnMgQmVyZ2x1bmQKKyAqCisgKiBXaXRoIHNvbWUgY2hhbmdl cyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQg ZXZlbgorICogRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1h c3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLy8g I2RlZmluZSBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMu aD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Cisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogLS0t LS0gZ2xvYmFsIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBjb25zdCBjaGFyIGRy aXZlcl9uYW1lW10gPSAiaTJjX29tYXAiOworCisjZGVmaW5lIE1PRFVMRV9O QU1FICJPTUFQIEkyQyIKKyNkZWZpbmUgT01BUF9JMkNfVElNRU9VVCAobXNl Y3NfdG9famlmZmllcygxMDAwKSkgLyogdGltZW91dCB3YWl0aW5nIGZvciB0 aGUgY29udHJvbGxlciB0byByZXNwb25kICovCisKKyNkZWZpbmUgREVGQVVM VF9PV04JCTEJLyogZGVmYXVsdCBvd24gSTJDIGFkZHJlc3MgKi8KKyNkZWZp bmUgTUFYX01FU1NBR0VTCQk2NTUzNgkvKiBtYXggbnVtYmVyIG9mIG1lc3Nh Z2VzICovCisKKyNkZWZpbmUgT01BUF9JMkNfUkVWX1JFRwkJMHgwMAorI2Rl ZmluZSBPTUFQX0kyQ19JRV9SRUcJCQkweDA0CisjZGVmaW5lIE9NQVBfSTJD X1NUQVRfUkVHCQkweDA4CisjZGVmaW5lIE9NQVBfSTJDX0lWX1JFRwkJCTB4 MGMKKyNkZWZpbmUgT01BUF9JMkNfU1lTU19SRUcJCTB4MTAKKyNkZWZpbmUg T01BUF9JMkNfQlVGX1JFRwkJMHgxNAorI2RlZmluZSBPTUFQX0kyQ19DTlRf UkVHCQkweDE4CisjZGVmaW5lIE9NQVBfSTJDX0RBVEFfUkVHCQkweDFjCisj ZGVmaW5lIE9NQVBfSTJDX1NZU0NfUkVHCQkweDIwCisjZGVmaW5lIE9NQVBf STJDX0NPTl9SRUcJCTB4MjQKKyNkZWZpbmUgT01BUF9JMkNfT0FfUkVHCQkJ MHgyOAorI2RlZmluZSBPTUFQX0kyQ19TQV9SRUcJCQkweDJjCisjZGVmaW5l IE9NQVBfSTJDX1BTQ19SRUcJCTB4MzAKKyNkZWZpbmUgT01BUF9JMkNfU0NM TF9SRUcJCTB4MzQKKyNkZWZpbmUgT01BUF9JMkNfU0NMSF9SRUcJCTB4MzgK KyNkZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9SRUcJCTB4M2MKKworLyogSTJD IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKE9NQVBfSTJDX0lFKTogKi8K KyNkZWZpbmUgT01BUF9JMkNfSUVfWFJEWQkoMSA8PCA0KQkvKiBUWCBkYXRh IHJlYWR5IGludCBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9JMkNfSUVfUlJE WQkoMSA8PCAzKQkvKiBSWCBkYXRhIHJlYWR5IGludCBlbmFibGUgKi8KKyNk ZWZpbmUgT01BUF9JMkNfSUVfQVJEWQkoMSA8PCAyKQkvKiBBY2Nlc3MgcmVh ZHkgaW50IGVuYWJsZSAqLworI2RlZmluZSBPTUFQX0kyQ19JRV9OQUNLCSgx IDw8IDEpCS8qIE5vIGFjayBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5l IE9NQVBfSTJDX0lFX0FMCQkoMSA8PCAwKQkvKiBBcmJpdHJhdGlvbiBsb3N0 IGludCBlbmEgKi8KKworLyogSTJDIFN0YXR1cyBSZWdpc3RlciAoT01BUF9J MkNfU1RBVCk6ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfU0JECSgxIDw8 IDE1KQkvKiBTaW5nbGUgYnl0ZSBkYXRhICovCisjZGVmaW5lIE9NQVBfSTJD X1NUQVRfQkIJKDEgPDwgMTIpCS8qIEJ1cyBidXN5ICovCisjZGVmaW5lIE9N QVBfSTJDX1NUQVRfUk9WUgkoMSA8PCAxMSkJLyogUmVjZWl2ZSBvdmVycnVu ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfWFVERgkoMSA8PCAxMCkJLyog VHJhbnNtaXQgdW5kZXJmbG93ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRf QUFTCSgxIDw8IDkpCS8qIEFkZHJlc3MgYXMgc2xhdmUgKi8KKyNkZWZpbmUg T01BUF9JMkNfU1RBVF9BRDAJKDEgPDwgOCkJLyogQWRkcmVzcyB6ZXJvICov CisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfWFJEWQkoMSA8PCA0KQkvKiBUcmFu c21pdCBkYXRhIHJlYWR5ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfUlJE WQkoMSA8PCAzKQkvKiBSZWNlaXZlIGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUg T01BUF9JMkNfU1RBVF9BUkRZCSgxIDw8IDIpCS8qIFJlZ2lzdGVyIGFjY2Vz cyByZWFkeSAqLworI2RlZmluZSBPTUFQX0kyQ19TVEFUX05BQ0sJKDEgPDwg MSkJLyogTm8gYWNrIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgT01B UF9JMkNfU1RBVF9BTAkoMSA8PCAwKQkvKiBBcmJpdHJhdGlvbiBsb3N0IGlu dCBlbmEgKi8KKworLyogSTJDIEJ1ZmZlciBDb25maWd1cmF0aW9uIFJlZ2lz dGVyIChPTUFQX0kyQ19CVUYpOiAqLworI2RlZmluZSBPTUFQX0kyQ19CVUZf UkRNQV9FTgkoMSA8PCAxNSkJLyogUlggRE1BIGNoYW5uZWwgZW5hYmxlICov CisjZGVmaW5lIE9NQVBfSTJDX0JVRl9YRE1BX0VOCSgxIDw8IDcpCS8qIFRY IERNQSBjaGFubmVsIGVuYWJsZSAqLworCisvKiBJMkMgQ29uZmlndXJhdGlv biBSZWdpc3RlciAoT01BUF9JMkNfQ09OKTogKi8KKyNkZWZpbmUgT01BUF9J MkNfQ09OX0VOCQkoMSA8PCAxNSkJLyogSTJDIG1vZHVsZSBlbmFibGUgKi8K KyNkZWZpbmUgT01BUF9JMkNfQ09OX0JFCQkoMSA8PCAxNCkJLyogQmlnIGVu ZGlhbiBtb2RlICovCisjZGVmaW5lIE9NQVBfSTJDX0NPTl9TVEIJKDEgPDwg MTEpCS8qIFN0YXJ0IGJ5dGUgbW9kZSAobWFzdGVyKSAqLworI2RlZmluZSBP TUFQX0kyQ19DT05fTVNUCSgxIDw8IDEwKQkvKiBNYXN0ZXIvc2xhdmUgbW9k ZSAqLworI2RlZmluZSBPTUFQX0kyQ19DT05fVFJYCSgxIDw8IDkpCS8qIFRY L1JYIG1vZGUgKG1hc3RlciBvbmx5KSAqLworI2RlZmluZSBPTUFQX0kyQ19D T05fWEEJCSgxIDw8IDgpCS8qIEV4cGFuZCBhZGRyZXNzICovCisjZGVmaW5l IE9NQVBfSTJDX0NPTl9STQkJKDEgPDwgMikJLyogUmVwZWF0IG1vZGUgKG1h c3RlciBvbmx5KSAqLworI2RlZmluZSBPTUFQX0kyQ19DT05fU1RQCSgxIDw8 IDEpCS8qIFN0b3AgY29uZCAobWFzdGVyIG9ubHkpICovCisjZGVmaW5lIE9N QVBfSTJDX0NPTl9TVFQJKDEgPDwgMCkJLyogU3RhcnQgY29uZGl0aW9uICht YXN0ZXIpICovCisKKy8qIEkyQyBTeXN0ZW0gVGVzdCBSZWdpc3RlciAoT01B UF9JMkNfU1lTVEVTVCk6ICovCisjZGVmaW5lIE9NQVBfSTJDX1NZU1RFU1Rf U1RfRU4JCSgxIDw8IDE1KQkvKiBTeXN0ZW0gdGVzdCBlbmFibGUgKi8KKyNk ZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9GUkVFCQkoMSA8PCAxNCkJLyogRnJl ZSBydW5uaW5nIG1vZGUgKi8KKyNkZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9U TU9ERV9NQVNLCSgzIDw8IDEyKQkvKiBUZXN0IG1vZGUgc2VsZWN0ICovCisj ZGVmaW5lIE9NQVBfSTJDX1NZU1RFU1RfVE1PREVfU0hJRlQJKDEyKQkJLyog VGVzdCBtb2RlIHNlbGVjdCAqLworI2RlZmluZSBPTUFQX0kyQ19TWVNURVNU X1NDTF9JCQkoMSA8PCAzKQkvKiBTQ0wgbGluZSBzZW5zZSBpbiAqLworI2Rl ZmluZSBPTUFQX0kyQ19TWVNURVNUX1NDTF9PCQkoMSA8PCAyKQkvKiBTQ0wg bGluZSBkcml2ZSBvdXQgKi8KKyNkZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9T REFfSQkJKDEgPDwgMSkJLyogU0RBIGxpbmUgc2Vuc2UgaW4gKi8KKyNkZWZp bmUgT01BUF9JMkNfU1lTVEVTVF9TREFfTwkJKDEgPDwgMCkJLyogU0RBIGxp bmUgZHJpdmUgb3V0ICovCisKKy8qIEkyQyBTeXN0ZW0gU3RhdHVzIHJlZ2lz dGVyIChPTUFQX0kyQ19TWVNTKTogKi8KKyNkZWZpbmUgT01BUF9JMkNfU1lT U19SRE9ORQkJMQkJLyogUmVzZXQgRG9uZSAqLworCisvKiBJMkMgU3lzdGVt IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKE9NQVBfSTJDX1NZU0MpOiAqLwor I2RlZmluZSBPTUFQX0kyQ19TWVNDX1NSU1QJCSgxIDw8IDEpCS8qIFNvZnQg UmVzZXQgKi8KKworLyogUkVWSVNJVDogVXNlIHBsYXRmb3JtX2RhdGEgaW5z dGVhZCBvZiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIGludCBjbG9j ayA9IDEwMDsJLyogRGVmYXVsdDogRmFzdCBNb2RlID0gNDAwIEtIeiwgU3Rh bmRhcmQgPSAxMDAgS0h6ICovCittb2R1bGVfcGFyYW0oY2xvY2ssIGludCwg MCk7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrLCAiU2V0IEkyQyBjbG9jayBp biBrSHo6IDEwMCBvciA0MDAgKEZhc3QgTW9kZSkiKTsKKworc3RhdGljIGlu dCBvd247Cittb2R1bGVfcGFyYW0ob3duLCBpbnQsIDApOworTU9EVUxFX1BB Uk1fREVTQyhvd24sICJBZGRyZXNzIG9mIE9NQVAgSTJDIG1hc3RlciAoMCBm b3IgZGVmYXVsdCA9PSAxKSIpOworCitzdHJ1Y3Qgb21hcF9pMmNfZGV2IHsK KwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXZvaWQgX19pb21lbQkJKmJhc2U7 CQkvKiB2aXJ0dWFsICovCisJaW50CQkJaXJxOworCXN0cnVjdCBjbGsJCSpp Y2xrOwkJLyogSW50ZXJmYWNlIGNsb2NrICovCisJc3RydWN0IGNsawkJKmZj bGs7CQkvKiBGdW5jdGlvbmFsIGNsb2NrICovCisJc3RydWN0IGNvbXBsZXRp b24JY21kX2NvbXBsZXRlOworCXUxNgkJCWNtZF9lcnI7CisJdTgJCQkqYnVm OworCXNpemVfdAkJCWJ1Zl9sZW47CisJc3RydWN0IGkyY19hZGFwdGVyCWFk YXB0ZXI7CisJdW5zaWduZWQJCXJldjE6MTsKKwl1OAkJCW93bl9hZGRyZXNz OworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaTJjX3dyaXRlX3Jl ZyhzdHJ1Y3Qgb21hcF9pMmNfZGV2ICppMmNfZGV2LAorCQkJCSAgICAgIGlu dCByZWcsIHUxNiB2YWwpCit7CisJX19yYXdfd3JpdGV3KHZhbCwgaTJjX2Rl di0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG9tYXBf aTJjX3JlYWRfcmVnKHN0cnVjdCBvbWFwX2kyY19kZXYgKmkyY19kZXYsIGlu dCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGkyY19kZXYtPmJhc2Ug KyByZWcpOworfQorCitzdGF0aWMgaW50IG9tYXBfaTJjX2dldF9jbG9ja3Mo c3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQoreworCWlmIChjcHVfaXNfb21h cDE2eHgoKSB8fCBjcHVfaXNfb21hcDI0eHgoKSkgeworCQlkZXYtPmljbGsg PSBjbGtfZ2V0KGRldi0+ZGV2LCAiaTJjX2ljayIpOworCQlpZiAoSVNfRVJS KGRldi0+aWNsaykpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXYt PmZjbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiaTJjX2ZjayIpOworCWlmIChJ U19FUlIoZGV2LT5mY2xrKSkgeworCQlpZiAoZGV2LT5pY2xrICE9IE5VTEwp CisJCQljbGtfcHV0KGRldi0+aWNsayk7CisJCXJldHVybiAtRU5PREVWOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2kyY19w dXRfY2xvY2tzKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKK3sKKwljbGtf cHV0KGRldi0+ZmNsayk7CisJZGV2LT5mY2xrID0gTlVMTDsKKwlpZiAoZGV2 LT5pY2xrICE9IE5VTEwpIHsKKwkJY2xrX3B1dChkZXYtPmljbGspOworCQlk ZXYtPmljbGsgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgb21hcF9p MmNfZW5hYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCit7 CisJaWYgKGRldi0+aWNsayAhPSBOVUxMKQorCQljbGtfZW5hYmxlKGRldi0+ aWNsayk7CisJY2xrX2VuYWJsZShkZXYtPmZjbGspOworfQorCitzdGF0aWMg dm9pZCBvbWFwX2kyY19kaXNhYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcF9pMmNf ZGV2ICpkZXYpCit7CisJaWYgKGRldi0+aWNsayAhPSBOVUxMKQorCQljbGtf ZGlzYWJsZShkZXYtPmljbGspOworCWNsa19kaXNhYmxlKGRldi0+ZmNsayk7 Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfaTJjX3Jlc2V0KHN0cnVjdCBvbWFw X2kyY19kZXYgKmRldikKK3sKKwl1MTYgcHNjOworCXVuc2lnbmVkIGxvbmcg ZmNsa19yYXRlOworCisJaWYgKCFkZXYtPnJldjEpIHsKKwkJb21hcF9pMmNf d3JpdGVfcmVnKGRldiwgT01BUF9JMkNfU1lTQ19SRUcsIE9NQVBfSTJDX1NZ U0NfU1JTVCk7CisJCS8qIEZvciBzb21lIHJlYXNvbiB3ZSBuZWVkIHRvIHNl dCB0aGUgRU4gYml0IGJlZm9yZSB0aGUKKwkJICogcmVzZXQgZG9uZSBiaXQg Z2V0cyBzZXQuICovCisJCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBf STJDX0NPTl9SRUcsIE9NQVBfSTJDX0NPTl9FTik7CisJCXdoaWxlICghKG9t YXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNfU1lTU19SRUcpICYgMHgw MSkpOworCX0KKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19D T05fUkVHLCAwKTsKKworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewor CQlzdHJ1Y3QgY2xrICphcm14b3JfY2s7CisJCXVuc2lnbmVkIGxvbmcgYXJt eG9yX3JhdGU7CisKKwkJYXJteG9yX2NrID0gY2xrX2dldChOVUxMLCAiYXJt eG9yX2NrIik7CisJCWlmIChJU19FUlIoYXJteG9yX2NrKSkgeworCQkJcHJp bnRrKEtFUk5fV0FSTklORyAiaTJjOiBDb3VsZCBub3QgZ2V0IGFybXhvcl9j a1xuIik7CisJCQlhcm14b3JfcmF0ZSA9IDEyMDAwMDAwOworCQl9IGVsc2Ug eworCQkJYXJteG9yX3JhdGUgPSBjbGtfZ2V0X3JhdGUoYXJteG9yX2NrKTsK KwkJCWNsa19wdXQoYXJteG9yX2NrKTsKKwkJfQorCisJCWlmIChhcm14b3Jf cmF0ZSA+IDE2MDAwMDAwKQorCQkJcHNjID0gKGFybXhvcl9yYXRlICsgODAw MDAwMCkgLyAxMjAwMDAwMDsKKwkJZWxzZQorCQkJcHNjID0gMDsKKworCQlm Y2xrX3JhdGUgPSBhcm14b3JfcmF0ZTsKKwl9IGVsc2UgaWYgKGNwdV9jbGFz c19pc19vbWFwMigpKSB7CisJCWZjbGtfcmF0ZSA9IDEyMDAwMDAwOworCQlw c2MgPSAwOworCX0KKworCS8qIFNldHVwIGNsb2NrIHByZXNjYWxlciB0byBv YnRhaW4gYXBwcm94IDEyTUh6IEkyQyBtb2R1bGUgY2xvY2s6ICovCisJb21h cF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfUFNDX1JFRywgcHNjKTsK KworCS8qIFByb2dyYW0gZGVzaXJlZCBvcGVyYXRpbmcgcmF0ZSAqLworCWZj bGtfcmF0ZSAvPSAocHNjICsgMSkgKiAxMDAwOworCWlmIChwc2MgPiAyKQor CQlwc2MgPSAyOworCisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9J MkNfU0NMTF9SRUcsCisJCQkgICBmY2xrX3JhdGUgLyAoY2xvY2sgKiAyKSAt IDcgKyBwc2MpOworCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJD X1NDTEhfUkVHLAorCQkJICAgZmNsa19yYXRlIC8gKGNsb2NrICogMikgLSA3 ICsgcHNjKTsKKworCS8qIFNldCBPd24gQWRkcmVzczogKi8KKwlvbWFwX2ky Y193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19PQV9SRUcsIGRldi0+b3duX2Fk ZHJlc3MpOworCisJLyogVGFrZSB0aGUgSTJDIG1vZHVsZSBvdXQgb2YgcmVz ZXQ6ICovCisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09O X1JFRywgT01BUF9JMkNfQ09OX0VOKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1 cHRzICovCisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfSUVf UkVHLAorCQkJICAgKE9NQVBfSTJDX0lFX1hSRFkgfCBPTUFQX0kyQ19JRV9S UkRZIHwKKwkJCSAgICBPTUFQX0kyQ19JRV9BUkRZIHwgT01BUF9JMkNfSUVf TkFDSyB8CisJCQkgICAgT01BUF9JMkNfSUVfQUwpKTsKK30KKworLyoKKyAq IFdhaXRpbmcgb24gQnVzIEJ1c3kKKyAqLworc3RhdGljIGludCBvbWFwX2ky Y193YWl0X2Zvcl9iYihzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCit7CisJ dW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJdGltZW91dCA9IGppZmZpZXMg KyBPTUFQX0kyQ19USU1FT1VUOworCXdoaWxlIChvbWFwX2kyY19yZWFkX3Jl ZyhkZXYsIE9NQVBfSTJDX1NUQVRfUkVHKSAmIE9NQVBfSTJDX1NUQVRfQkIp IHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJ CWRldl93YXJuKGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBidXMg cmVhZHlcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJbXNs ZWVwKDEpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogTG93IGxl dmVsIG1hc3RlciByZWFkL3dyaXRlIHRyYW5zYWN0aW9uLgorICovCitzdGF0 aWMgaW50IG9tYXBfaTJjX3hmZXJfbXNnKHN0cnVjdCBpMmNfYWRhcHRlciAq YWRhcCwKKwkJCSAgICAgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IHN0b3Ap Cit7CisJc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2ID0gaTJjX2dldF9hZGFw ZGF0YShhZGFwKTsKKwlpbnQgcjsKKwl1MTYgdzsKKwl1OCB6ZXJvX2J5dGUg PSAwOworCisJZGV2X2RiZyhkZXYtPmRldiwgImFkZHI6IDB4JTA0eCwgbGVu OiAlZCwgZmxhZ3M6IDB4JXgsIHN0b3A6ICVkXG4iLAorCQltc2ctPmFkZHIs IG1zZy0+bGVuLCBtc2ctPmZsYWdzLCBzdG9wKTsKKworCW9tYXBfaTJjX3dy aXRlX3JlZyhkZXYsIE9NQVBfSTJDX1NBX1JFRywgbXNnLT5hZGRyKTsKKwor CS8qIFNpZ2gsIHNlZW1zIHdlIGNhbid0IGRvIHplcm8gbGVuZ3RoIHRyYW5z YWN0aW9ucy4gVGh1cywgd2UKKwkgKiBjYW4ndCBwcm9iZSBmb3IgZGV2aWNl cyB3L28gYWN0dWFsbHkgc2VuZGluZy9yZWNlaXZpbmcgYXQgbGVhc3QKKwkg KiBhIHNpbmdsZSBieXRlLiBTbyB3ZSdsbCBzZXQgY291bnQgdG8gMSBmb3Ig dGhlIHplcm8gbGVuZ3RoCisJICogdHJhbnNhY3Rpb24gY2FzZSBhbmQgaG9w ZSB3ZSBkb24ndCBjYXVzZSBncmllZiBmb3Igc29tZQorCSAqIGFyYml0cmFy eSBkZXZpY2UgZHVlIHRvIHJhbmRvbSBieXRlIHdyaXRlL3JlYWQgZHVyaW5n CisJICogcHJvYmVzLgorCSAqLworCS8qIFJFVklTSVQ6IENvdWxkIHRoZSBT VEIgYml0IG9mIEkyQ19DT04gYmUgdXNlZCB3aXRoIHByb2Jpbmc/ICovCisJ aWYgKG1zZy0+bGVuID09IDApIHsKKwkJZGV2LT5idWYgPSAmemVyb19ieXRl OworCQlkZXYtPmJ1Zl9sZW4gPSAxOworCX0gZWxzZSB7CisJCWRldi0+YnVm ID0gbXNnLT5idWY7CisJCWRldi0+YnVmX2xlbiA9IG1zZy0+bGVuOworCX0K KwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DTlRfUkVHLCBk ZXYtPmJ1Zl9sZW4pOworCisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9j b21wbGV0ZSk7CisJZGV2LT5jbWRfZXJyID0gMDsKKworCXcgPSBPTUFQX0ky Q19DT05fRU4gfCBPTUFQX0kyQ19DT05fTVNUIHwgT01BUF9JMkNfQ09OX1NU VDsKKwlpZiAobXNnLT5mbGFncyAmIEkyQ19NX1RFTikKKwkJdyB8PSBPTUFQ X0kyQ19DT05fWEE7CisJaWYgKCEobXNnLT5mbGFncyAmIEkyQ19NX1JEKSkK KwkJdyB8PSBPTUFQX0kyQ19DT05fVFJYOworCWlmIChzdG9wKQorCQl3IHw9 IE9NQVBfSTJDX0NPTl9TVFA7CisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwg T01BUF9JMkNfQ09OX1JFRywgdyk7CisKKwlyID0gd2FpdF9mb3JfY29tcGxl dGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmRldi0+Y21kX2NvbXBsZXRl LAorCQkJCQkJICAgICAgT01BUF9JMkNfVElNRU9VVCk7CisJZGV2LT5idWZf bGVuID0gMDsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCWlmIChyID09 IDApIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImNvbnRyb2xsZXIgdGltZWQg b3V0XG4iKTsKKwkJb21hcF9pMmNfcmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1F VElNRURPVVQ7CisJfQorCisJaWYgKGxpa2VseSghZGV2LT5jbWRfZXJyKSkK KwkJcmV0dXJuIDA7CisKKwkvKiBXZSBoYXZlIGFuIGVycm9yICovCisJaWYg KGRldi0+Y21kX2VyciAmIE9NQVBfSTJDX1NUQVRfTkFDSykgeworCQlpZiAo bXNnLT5mbGFncyAmIEkyQ19NX0lHTk9SRV9OQUspCisJCQlyZXR1cm4gMDsK KwkJaWYgKHN0b3ApIHsKKwkJCXUxNiB3OworCisJCQl3ID0gb21hcF9pMmNf cmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHKTsKKwkJCXcgfD0gT01B UF9JMkNfQ09OX1NUUDsKKwkJCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9N QVBfSTJDX0NPTl9SRUcsIHcpOworCQl9CisJCXJldHVybiAtRVJFTU9URUlP OworCX0KKwlpZiAoZGV2LT5jbWRfZXJyICYgKE9NQVBfSTJDX1NUQVRfQUwg fCBPTUFQX0kyQ19TVEFUX1JPVlIgfAorCQkJICAgIE9NQVBfSTJDX1NUQVRf WFVERikpCisJCW9tYXBfaTJjX3Jlc2V0KGRldik7CisJcmV0dXJuIC1FSU87 Cit9CisKKworLyoKKyAqIFByZXBhcmUgY29udHJvbGxlciBmb3IgYSB0cmFu c2FjdGlvbiBhbmQgY2FsbCBvbWFwX2kyY194ZmVyX21zZworICogdG8gZG8g dGhlIHdvcmsgZHVyaW5nIElSUSBwcm9jZXNzaW5nLgorICovCitzdGF0aWMg aW50CitvbWFwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwg c3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBv bWFwX2kyY19kZXYgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJ aW50IGk7CisJaW50IHIgPSAwOworCisJaWYgKG51bSA8IDEgfHwgbnVtID4g TUFYX01FU1NBR0VTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENoZWNr IGZvciB2YWxpZCBwYXJhbWV0ZXJzIGluIG1lc3NhZ2VzICovCisJZm9yIChp ID0gMDsgaSA8IG51bTsgaSsrKQorCQlpZiAobXNnc1tpXS5idWYgPT0gTlVM TCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJb21hcF9pMmNfZW5hYmxlX2Ns b2NrcyhkZXYpOworCisJLyogUkVWSVNJVDogaW5pdGlhbGl6ZSBhbmQgdXNl IGFkYXAtPnJldHJpZXMgKi8KKwlpZiAoKHIgPSBvbWFwX2kyY193YWl0X2Zv cl9iYihkZXYpKSA8IDApCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsg aSA8IG51bTsgaSsrKSB7CisJCWRldl9kYmcoZGV2LT5kZXYsICJtc2c6ICVk LCBhZGRyOiAweCUwNHgsIGxlbjogJWQsIGZsYWdzOiAweCV4XG4iLAorCQkJ aSwgbXNnc1tpXS5hZGRyLCBtc2dzW2ldLmxlbiwgbXNnc1tpXS5mbGFncyk7 CisJCXIgPSBvbWFwX2kyY194ZmVyX21zZyhhZGFwLCAmbXNnc1tpXSwgKGkg PT0gKG51bSAtIDEpKSk7CisJCWlmIChyICE9IDApCisJCQlicmVhazsKKwl9 CisKKwlpZiAociA9PSAwKQorCQlyID0gbnVtOworb3V0OgorCW9tYXBfaTJj X2Rpc2FibGVfY2xvY2tzKGRldik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRp YyB1MzIKK29tYXBfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFw KQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19F TVVMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK29tYXBfaTJjX2NvbXBs ZXRlX2NtZChzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYsIHUxNiBlcnIpCit7 CisJZGV2LT5jbWRfZXJyIHw9IGVycjsKKwljb21wbGV0ZSgmZGV2LT5jbWRf Y29tcGxldGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK29tYXBfaTJj X2Fja19zdGF0KHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldiwgdTE2IHN0YXQp Cit7CisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfU1RBVF9S RUcsIHN0YXQpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgK K3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF9pMmNfcmV2MV9pc3IoaW50IHRo aXNfaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQor eworCXN0cnVjdCBvbWFwX2kyY19kZXYgKmRldiA9IGRldl9pZDsKKwl1MTYg aXYsIHc7CisKKwlpdiA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9J MkNfSVZfUkVHKTsKKwlzd2l0Y2ggKGl2KSB7CisJY2FzZSAweDAwOgkvKiBO b25lICovCisJCWJyZWFrOworCWNhc2UgMHgwMToJLyogQXJiaXRyYXRpb24g bG9zdCAqLworCQlkZXZfZXJyKGRldi0+ZGV2LCAiQXJiaXRyYXRpb24gbG9z dFxuIik7CisJCW9tYXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIE9NQVBfSTJD X1NUQVRfQUwpOworCQlicmVhazsKKwljYXNlIDB4MDI6CS8qIE5vIGFja25v d2xlZGdlbWVudCAqLworCQlvbWFwX2kyY19jb21wbGV0ZV9jbWQoZGV2LCBP TUFQX0kyQ19TVEFUX05BQ0spOworCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2 LCBPTUFQX0kyQ19DT05fUkVHLCBPTUFQX0kyQ19DT05fU1RQKTsKKwkJYnJl YWs7CisJY2FzZSAweDAzOgkvKiBSZWdpc3RlciBhY2Nlc3MgcmVhZHkgKi8K KwkJb21hcF9pMmNfY29tcGxldGVfY21kKGRldiwgMCk7CisJCWJyZWFrOwor CWNhc2UgMHgwNDoJLyogUmVjZWl2ZSBkYXRhIHJlYWR5ICovCisJCWlmIChk ZXYtPmJ1Zl9sZW4pIHsKKwkJCXcgPSBvbWFwX2kyY19yZWFkX3JlZyhkZXYs IE9NQVBfSTJDX0RBVEFfUkVHKTsKKwkJCSpkZXYtPmJ1ZisrID0gdzsKKwkJ CWRldi0+YnVmX2xlbi0tOworCQkJaWYgKGRldi0+YnVmX2xlbikgeworCQkJ CSpkZXYtPmJ1ZisrID0gdyA+PiA4OworCQkJCWRldi0+YnVmX2xlbi0tOwor CQkJfQorCQl9IGVsc2UKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJSUkRZIElS USB3aGlsZSBubyBkYXRhIHJlcXVlc3RlZFxuIik7CisJCWJyZWFrOworCWNh c2UgMHgwNToJLyogVHJhbnNtaXQgZGF0YSByZWFkeSAqLworCQlpZiAoZGV2 LT5idWZfbGVuKSB7CisJCQl3ID0gKmRldi0+YnVmKys7CisJCQlkZXYtPmJ1 Zl9sZW4tLTsKKwkJCWlmIChkZXYtPmJ1Zl9sZW4pIHsKKwkJCQl3IHw9ICpk ZXYtPmJ1ZisrIDw8IDg7CisJCQkJZGV2LT5idWZfbGVuLS07CisJCQl9CisJ CQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19EQVRBX1JFRywg dyk7CisJCX0gZWxzZQorCQkJZGV2X2VycihkZXYtPmRldiwgIlhSRFkgSVJR IHdoaWxlIG5vIGRhdGEgdG8gc2VuZFxuIik7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cit9CisjZW5kaWYKKworc3RhdGljIGlycXJldHVybl90CitvbWFw X2kyY19pc3IoaW50IHRoaXNfaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBw dF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBvbWFwX2kyY19kZXYgKmRldiA9 IGRldl9pZDsKKwl1MTYgYml0czsKKwl1MTYgc3RhdCwgdzsKKwlpbnQgY291 bnQgPSAwOworCisJYml0cyA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01B UF9JMkNfSUVfUkVHKTsKKwl3aGlsZSAoKHN0YXQgPSAob21hcF9pMmNfcmVh ZF9yZWcoZGV2LCBPTUFQX0kyQ19TVEFUX1JFRykpKSAmIGJpdHMpIHsKKwkJ ZGV2X2RiZyhkZXYtPmRldiwgIklSUSAoSVNSID0gMHglMDR4KVxuIiwgc3Rh dCk7CisJCWlmIChjb3VudCsrID09IDEwMCkgeworCQkJZGV2X3dhcm4oZGV2 LT5kZXYsICJUb28gbXVjaCB3b3JrIGluIG9uZSBJUlFcbiIpOworCQkJYnJl YWs7CisJCX0KKworCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0ky Q19TVEFUX1JFRywgc3RhdCk7CisKKwkJaWYgKHN0YXQgJiBPTUFQX0kyQ19T VEFUX0FSRFkpIHsKKwkJCW9tYXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIDAp OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0YXQgJiBPTUFQX0kyQ19T VEFUX1JSRFkpIHsKKwkJCXcgPSBvbWFwX2kyY19yZWFkX3JlZyhkZXYsIE9N QVBfSTJDX0RBVEFfUkVHKTsKKwkJCWlmIChkZXYtPmJ1Zl9sZW4pIHsKKwkJ CQkqZGV2LT5idWYrKyA9IHc7CisJCQkJZGV2LT5idWZfbGVuLS07CisJCQkJ aWYgKGRldi0+YnVmX2xlbikgeworCQkJCQkqZGV2LT5idWYrKyA9IHcgPj4g ODsKKwkJCQkJZGV2LT5idWZfbGVuLS07CisJCQkJfQorCQkJfSBlbHNlCisJ CQkJZGV2X2VycihkZXYtPmRldiwgIlJSRFkgSVJRIHdoaWxlIG5vIGRhdGEg cmVxdWVzdGVkXG4iKTsKKwkJCW9tYXBfaTJjX2Fja19zdGF0KGRldiwgT01B UF9JMkNfU1RBVF9SUkRZKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChz dGF0ICYgT01BUF9JMkNfU1RBVF9YUkRZKSB7CisJCQlpbnQgYmFpbF9vdXQg PSAwOworCisJCQl3ID0gMDsKKwkJCWlmIChkZXYtPmJ1Zl9sZW4pIHsKKwkJ CQl3ID0gKmRldi0+YnVmKys7CisJCQkJZGV2LT5idWZfbGVuLS07CisJCQkJ aWYgKGRldi0+YnVmX2xlbikgeworCQkJCQl3IHw9ICpkZXYtPmJ1ZisrIDw8 IDg7CisJCQkJCWRldi0+YnVmX2xlbi0tOworCQkJCX0KKwkJCX0gZWxzZQor CQkJCWRldl9lcnIoZGV2LT5kZXYsICJYUkRZIElSUSB3aGlsZSBubyBkYXRh IHRvIHNlbmRcbiIpOworI2lmIDAKKwkJCWlmICghKHN0YXQgJiBPTUFQX0ky Q19TVEFUX0JCKSkgeworCQkJCWRldl93YXJuKGRldi0+ZGV2LCAiWFJEWSB3 aGlsZSBidXMgbm90IGJ1c3lcbiIpOworCQkJCWJhaWxfb3V0ID0gMTsKKwkJ CX0KKyNlbmRpZgorCQkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9J MkNfREFUQV9SRUcsIHcpOworCQkJb21hcF9pMmNfYWNrX3N0YXQoZGV2LCBP TUFQX0kyQ19TVEFUX1hSRFkpOworCQkJaWYgKGJhaWxfb3V0KQorCQkJCW9t YXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIDEgPDwgMTUpOworCQkJY29udGlu dWU7CisJCX0KKwkJaWYgKHN0YXQgJiBPTUFQX0kyQ19TVEFUX1JPVlIpIHsK KwkJCWRldl9lcnIoZGV2LT5kZXYsICJSZWNlaXZlIG92ZXJydW5cbiIpOwor CQkJZGV2LT5jbWRfZXJyIHw9IE9NQVBfSTJDX1NUQVRfUk9WUjsKKwkJfQor CQlpZiAoc3RhdCAmIE9NQVBfSTJDX1NUQVRfWFVERikgeworCQkJZGV2X2Vy cihkZXYtPmRldiwgIlRyYW5zbWl0IG92ZXJmbG93XG4iKTsKKwkJCWRldi0+ Y21kX2VyciB8PSBPTUFQX0kyQ19TVEFUX1hVREY7CisJCX0KKwkJaWYgKHN0 YXQgJiBPTUFQX0kyQ19TVEFUX05BQ0spIHsKKwkJCW9tYXBfaTJjX2NvbXBs ZXRlX2NtZChkZXYsIE9NQVBfSTJDX1NUQVRfTkFDSyk7CisJCQlvbWFwX2ky Y193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCBPTUFQX0kyQ19D T05fU1RQKTsKKwkJfQorCQlpZiAoc3RhdCAmIE9NQVBfSTJDX1NUQVRfQUwp IHsKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJBcmJpdHJhdGlvbiBsb3N0XG4i KTsKKwkJCW9tYXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIE9NQVBfSTJDX1NU QVRfQUwpOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50ID8gSVJRX0hBTkRM RUQgOiBJUlFfTk9ORTsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3Jp dGhtIG9tYXBfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gb21hcF9p MmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IG9tYXBfaTJjX2Z1bmMsCit9 OworCitzdGF0aWMgaW50CitvbWFwX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX2kyY19kZXYJKmRl djsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmFkYXA7CisJc3RydWN0IHJlc291 cmNlCQkqbWVtLCAqaXJxOworCWludCByOworCisJLyogTk9URTogZHJpdmVy IHVzZXMgdGhlIHN0YXRpYyByZWdpc3RlciBtYXBwaW5nICovCisJbWVtID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBt ZW0gcmVzb3VyY2U/XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWly cSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lS USwgMCk7CisJaWYgKCFpcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi bm8gaXJxIHJlc291cmNlP1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0K KworCXIgPSAoaW50KSByZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwg KG1lbS0+ZW5kIC0gbWVtLT5zdGFydCkgKyAxLAorCQkJZHJpdmVyX25hbWUp OworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJMkMgcmVn aW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJ fQorCisJaWYgKGNsb2NrID4gMjAwKQorCQljbG9jayA9IDQwMDsJLyogRmFz dCBtb2RlICovCisJZWxzZQorCQljbG9jayA9IDEwMDsJLyogU3RhbmRhcmQg bW9kZSAqLworCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBf aTJjX2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCXIgPSAt RU5PTUVNOworCQlnb3RvIGRvX3JlbGVhc2VfcmVnaW9uOworCX0KKworCS8q IEZJWE1FOiBHZXQgb3duIGFkZHJlc3MgZnJvbSBwbGF0Zm9ybV9kYXRhICov CisJaWYgKG93biA+PSAxICYmIG93biA8IDB4N2YpCisJCWRldi0+b3duX2Fk ZHJlc3MgPSBvd247CisJZWxzZQorCQlvd24gPSBERUZBVUxUX09XTjsKKwor CWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKKwlkZXYtPmlycSA9IGlycS0+c3Rh cnQ7CisJZGV2LT5iYXNlID0gKHZvaWQgX19pb21lbSAqKSBJT19BRERSRVNT KG1lbS0+c3RhcnQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRl dik7CisKKwlpZiAoKHIgPSBvbWFwX2kyY19nZXRfY2xvY2tzKGRldikpICE9 IDApCisJCWdvdG8gZG9fZnJlZV9tZW07CisKKwlvbWFwX2kyY19lbmFibGVf Y2xvY2tzKGRldik7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAor CWRldi0+cmV2MSA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNf UkVWX1JFRykgPCAweDIwOworI2VuZGlmCisKKwkvKiByZXNldCBBU0FQLCBj bGVhcmluZyBhbnkgSVJRcyAqLworCW9tYXBfaTJjX3Jlc2V0KGRldik7CisK KyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAorCXIgPSByZXF1ZXN0X2ly cShkZXYtPmlycSwgZGV2LT5yZXYxID8gb21hcF9pMmNfcmV2MV9pc3IgOiBv bWFwX2kyY19pc3IsCisJCQkwLCBkcml2ZXJfbmFtZSwgZGV2KTsKKyNlbHNl CisJciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBvbWFwX2kyY19pc3IsIDAs IGRyaXZlcl9uYW1lLCBkZXYpOworI2VuZGlmCisJaWYgKHIpIHsKKwkJZGV2 X2VycihkZXYtPmRldiwgImZhaWx1cmUgcmVxdWVzdGluZyBpcnEgJWlcbiIs IGRldi0+aXJxKTsKKwkJZ290byBkb191bnVzZV9jbG9ja3M7CisJfQorCXIg PSBvbWFwX2kyY19yZWFkX3JlZyhkZXYsIE9NQVBfSTJDX1JFVl9SRUcpICYg MHhmZjsKKwlkZXZfaW5mbyhkZXYtPmRldiwgImJ1cyAlZCByZXYlZC4lZCBh dCAlZCBrSHpcbiIsCisJCSBwZGV2LT5pZCAtIDEsIHIgPj4gNCwgciAmIDB4 ZiwgY2xvY2spOworCisJYWRhcCA9ICZkZXYtPmFkYXB0ZXI7CisJaTJjX3Nl dF9hZGFwZGF0YShhZGFwLCBkZXYpOworCWFkYXAtPm93bmVyID0gVEhJU19N T0RVTEU7CisJYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfSFdNT047CisJc3Ry bmNweShhZGFwLT5uYW1lLCAiT01BUCBJMkMgYWRhcHRlciIsIHNpemVvZihh ZGFwLT5uYW1lKSk7CisJYWRhcC0+YWxnbyA9ICZvbWFwX2kyY19hbGdvOwor CWFkYXAtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJLyogaTJjIGRl dmljZSBkcml2ZXJzIG1heSBiZSBhY3RpdmUgb24gcmV0dXJuIGZyb20gYWRk X2FkYXB0ZXIoKSAqLworCXIgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7CisJ aWYgKHIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImZhaWx1cmUgYWRkaW5n IGFkYXB0ZXJcbiIpOworCQlnb3RvIGRvX2ZyZWVfaXJxOworCX0KKworCW9t YXBfaTJjX2Rpc2FibGVfY2xvY2tzKGRldik7CisKKwlyZXR1cm4gMDsKKwor ZG9fZnJlZV9pcnE6CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Citkb191 bnVzZV9jbG9ja3M6CisJb21hcF9pMmNfZGlzYWJsZV9jbG9ja3MoZGV2KTsK KwlvbWFwX2kyY19wdXRfY2xvY2tzKGRldik7Citkb19mcmVlX21lbToKKwlr ZnJlZShkZXYpOworZG9fcmVsZWFzZV9yZWdpb246CisJb21hcF9pMmNfd3Jp dGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgMCk7CisJcmVsZWFzZV9t ZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQp ICsgMSk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludAorb21hcF9p MmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IG9tYXBfaTJjX2RldgkqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRh dGEocGRldik7CisJc3RydWN0IHJlc291cmNlCQkqbWVtOworCisJZnJlZV9p cnEoZGV2LT5pcnEsIGRldik7CisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmFk YXB0ZXIpOworCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX0NP Tl9SRUcsIDApOworCW9tYXBfaTJjX3B1dF9jbG9ja3MoZGV2KTsKKwlrZnJl ZShkZXYpOworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+ c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBf aTJjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb21hcF9pMmNfcHJvYmUsCisJ LnJlbW92ZQkJPSBvbWFwX2kyY19yZW1vdmUsCisJLmRyaXZlciAJPSB7CisJ CS5uYW1lCT0gKGNoYXIgKilkcml2ZXJfbmFtZSwKKwl9LAorfTsKKworLyog STJDIG1heSBiZSBuZWVkZWQgdG8gYnJpbmcgdXAgb3RoZXIgZHJpdmVycyAq Lworc3RhdGljIGludCBfX2luaXQKK29tYXBfaTJjX2luaXRfZHJpdmVyKHZv aWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21h cF9pMmNfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChvbWFwX2kyY19p bml0X2RyaXZlcik7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2kyY19l eGl0X2RyaXZlcih2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz dGVyKCZvbWFwX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQob21hcF9p MmNfZXhpdF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJNb250YVZpc3Rh IFNvZnR3YXJlLCBJbmMuIChhbmQgb3RoZXJzKSIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJUSSBPTUFQIEkyQyBidXMgYWRhcHRlciIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOwotLSAKMS4zLjMKCg== --_----------=_1153917707168421--