From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrei Martynov Subject: Re[2]: porting IDE patches to PATA driver Date: Fri, 26 Jun 2009 15:24:40 +0200 Message-ID: <96179821.20090626152440@web.de> References: <323951117.20090625100956@web.de> <20090625092324.2dd4de5a@lxorguk.ukuu.org.uk> <14164712.20090625103834@web.de> <20090625100542.525dba02@lxorguk.ukuu.org.uk> <951976828.20090625123021@web.de> <20090625122958.510c28ad@lxorguk.ukuu.org.uk> Reply-To: Andrei Martynov Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----------2E7E4439E5E6FE" Return-path: Received: from fmmailgate01.web.de ([217.72.192.221]:60940 "EHLO fmmailgate01.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753357AbZFZNYo (ORCPT ); Fri, 26 Jun 2009 09:24:44 -0400 In-Reply-To: <20090625122958.510c28ad@lxorguk.ukuu.org.uk> Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: Alan Cox Cc: linux-ide@vger.kernel.org ------------2E7E4439E5E6FE Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi Alan, Thursday, June 25, 2009, 1:29:58 PM, you wrote: > It would be useful I think if you posted the current code, and also to > know if you see the same problem (lost IRQ etc) with ATAPI as well as ATA I've attached the current driver and reduced set of patches I'm trying to port. Truly speaking I have very little knowledge about IDE / ATAPI interfaces and simply try to reproduce the original logic using modern libata functions. As you can see the new pata driver redefines set_piomode / set_dmamode to tune chipset and bmdma_start to flush CPU cache. It works fine in UDMA mode on a newer chipset but I cannot get MW-DMA working on an older chipset. The complete patch for the EM85XX architecture can be found at http://mg35tools.svn.sourceforge.net/viewvc/mg35tools/trunk/sources/linux-2.6/ original 2.4.17 kernel for Sigma EM8500 is published at http://www.uclinux.org/pub/uClinux/ports/arm/EM8500/ -- Best regards, Andrei mailto:andrei.martynov@web.de ------------2E7E4439E5E6FE Content-Type: application/octet-stream; name="em85xx-ide.patch" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="em85xx-ide.patch" ZGlmZiAtciAxZTZmZjk5NWM0ZWYgaW5jbHVkZS9hc20tYXJtbm9tbXUvYXJjaC1qYXNwZXIv aWRlLmgKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysr IGIvaW5jbHVkZS9hc20tYXJtbm9tbXUvYXJjaC1qYXNwZXIvaWRlLmgJRnJpIEp1biAyNiAx MDo0Nzo0NSAyMDA5ICswMjAwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBsaW51eC9pbmNs dWRlL2FzbS1hcm1ub21tdS9hcmNoLWphc3Blci9pZGUuaAorICoKKyAqLworIAorI2luY2x1 ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxh c20vaGFyZHdhcmUuaD4KKworI2RlZmluZSBIQVZFX0FSQ0hfSU5fQllURQorI2RlZmluZSBI QVZFX0FSQ0hfT1VUX0JZVEUKKworI2RlZmluZSBPVVRfQllURShiLHApICAgICAgICAgICAg ICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBpbnQg X3RtcF87ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgb3V0YigoYiksKHApKTsgICAg ICAgICAgICAgICAgICAgIFwKKyAgIGZvcihfdG1wXz0wOyBfdG1wXzwxMDAwOyBfdG1wXysr KTsgIFwKK30gd2hpbGUoMCkgCisKK3N0YXRpYyBpbmxpbmUgYnl0ZSBqYXNwZXJfaWRlX2lu X2J5dGUoaW50IHApCit7CisJYnl0ZSBiOyBpbnQgX3RtcDsKKworCWIgPSAoYnl0ZSlpbmIo cCk7CisJZm9yKF90bXA9MDsgX3RtcDwxMDAwOyBfdG1wKyspOworCXJldHVybiBiOworfQor CisjZGVmaW5lIElOX0JZVEUocCkgamFzcGVyX2lkZV9pbl9ieXRlKHApCisKKworLyoKKyAq IFNldCB1cCBhIGh3IHN0cnVjdHVyZSBmb3IgYSBzcGVjaWZpZWQgZGF0YSBwb3J0LCBjb250 cm9sIHBvcnQgYW5kIElSUS4KKyAqIFRoaXMgc2hvdWxkIGZvbGxvdyB3aGF0ZXZlciB0aGUg ZGVmYXVsdCBpbnRlcmZhY2UgdXNlcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZAor aWRlX2luaXRfaHdpZl9wb3J0cyhod19yZWdzX3QgKmh3LCBpbnQgZGF0YV9wb3J0LCBpbnQg Y3RybF9wb3J0LCBpbnQgKmlycSkKK3sKKwlpZGVfaW9yZWdfdCByZWc7CisJaW50IGk7CisJ aW50IHJlZ2luY3IgPSAxOworCQorCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOworCisJ cmVnID0gKGlkZV9pb3JlZ190KWRhdGFfcG9ydDsKKworCWZvciAoaSA9IElERV9EQVRBX09G RlNFVDsgaSA8PSBJREVfU1RBVFVTX09GRlNFVDsgaSsrKSB7CisJCWh3LT5pb19wb3J0c1tp XSA9IHJlZzsKKwkJcmVnICs9IHJlZ2luY3I7CisJfQorCQorCWh3LT5pb19wb3J0c1tJREVf Q09OVFJPTF9PRkZTRVRdID0gKGlkZV9pb3JlZ190KSBjdHJsX3BvcnQ7CisJCisJaWYgKGly cSkKKwkJKmlycSA9IDA7Cit9CisKKworLyoKKyAqIFRoaXMgcmVnaXN0ZXJzIHRoZSBzdGFu ZGFyZCBwb3J0cyBmb3IgdGhpcyBhcmNoaXRlY3R1cmUgd2l0aCB0aGUgSURFCisgKiBkcml2 ZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK2lkZV9pbml0X2RlZmF1bHRfaHdp ZnModm9pZCkKK3sKKyAgICBod19yZWdzX3QgaHc7CisKKyAgICBpZGVfaW5pdF9od2lmX3Bv cnRzKCZodywgSkFTUEVSX0lERV9CQVNFICsgSURFX1BSSV9EQVRBLCBKQVNQRVJfSURFX0JB U0UgKyBJREVfUFJJX0RFVklDRV9DT05UUk9MLCBOVUxMKTsKKyAgICBody5pcnEgPSBJREVf SVJROworICAgIGlkZV9yZWdpc3Rlcl9odygmaHcsIE5VTEwpOworfQorCisKZGlmZiAtciAx ZTZmZjk5NWM0ZWYgZHJpdmVycy9pZGUvaWRlLWNkLmMKLS0tIGEvZHJpdmVycy9pZGUvaWRl LWNkLmMJRnJpIEp1biAyNiAxMDowMjowNSAyMDA5ICswMjAwCisrKyBiL2RyaXZlcnMvaWRl L2lkZS1jZC5jCUZyaSBKdW4gMjYgMTA6NDc6NDUgMjAwOSArMDIwMApAQCAtMTMxMiw3ICsx MzU4LDI1IEBAIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgY2Ryb21fcGNfaW50ciAoaWQKIAlp bnQgaXJlYXNvbiwgbGVuLCBzdGF0LCB0aGlzbGVuOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9 IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKnBjID0gKHN0 cnVjdCBwYWNrZXRfY29tbWFuZCAqKXJxLT5idWZmZXI7CisJc3RydWN0IGNkcm9tX2luZm8g KmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJaW50IGRtYSA9IGluZm8tPmRtYTsKKwlp bnQgZG1hX2Vycm9yOwogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CisKKwkvKiBDaGVj ayBmb3IgZXJyb3JzLiAqLworCWlmIChkbWEpIHsKKwkJaW5mby0+ZG1hID0gMDsKKwkJaWYg KChkbWFfZXJyb3IgPSBIV0lGKGRyaXZlKS0+ZG1hcHJvYyhpZGVfZG1hX2VuZCwgZHJpdmUp KSkgeworCQkJLyoKKwkJCSAqIFdlIGRvbid0IGRpc2FibGUgZHJpdmUgRE1BIGZvciBwYWNr ZXQgRE1BIGVycm9ycy4KKwkJCSAqIEl0J3MgaGFuZGxlZCBpbiBjZGRhX3JlYWRfYXVkaW8o KQorCQkJICovCisJCQkvKiBIV0lGKGRyaXZlKS0+ZG1hcHJvYyhpZGVfZG1hX29mZiwgZHJp dmUpOyAqLworCQkJcHJpbnRrICgiY2Ryb21fcGNfaW50cjogZG1hIGVycm9yXG4iKTsKKwkJ CXBjLT5zdGF0ID0gMjsJLyogMiAtPiBETUEgZXJyb3IgKi8KKwkJCXByaW50ayhLRVJOX0VS UiAiQ0RST00gcGFja2V0IERNQSBlcnJvciAoMHglMDJ4KVxuIiwgZG1hX2Vycm9yKTsKKwkJ fQorCX0KIAogCS8qIENoZWNrIGZvciBlcnJvcnMuICovCiAJaWYgKGNkcm9tX2RlY29kZV9z dGF0dXMgKCZzdGFydHN0b3AsIGRyaXZlLCAwLCAmc3RhdCkpCkBAIC0xMzIxLDYgKzEzODUs MTQgQEAgc3RhdGljIGlkZV9zdGFydHN0b3BfdCBjZHJvbV9wY19pbnRyIChpZAogCS8qIFJl YWQgdGhlIGludGVycnVwdCByZWFzb24gYW5kIHRoZSB0cmFuc2ZlciBsZW5ndGguICovCiAJ aXJlYXNvbiA9IElOX0JZVEUgKElERV9OU0VDVE9SX1JFRyk7CiAJbGVuID0gSU5fQllURSAo SURFX0xDWUxfUkVHKSArIDI1NiAqIElOX0JZVEUgKElERV9IQ1lMX1JFRyk7CisKKwlpZiAo ZG1hKSB7CisJCS8qCisJCSAqIElmIERNQSBzdWNjZWVkZWQsIHdlIGhhdmUgYWxsIHRoZSBk YXRhCisJCSAqLworCQlwYy0+YnVmZmVyICs9IHBjLT5idWZsZW47CisJCXBjLT5idWZsZW4g PSAwOworCX0KIAogCS8qIElmIERSUSBpcyBjbGVhciwgdGhlIGNvbW1hbmQgaGFzIGNvbXBs ZXRlZC4KIAkgICBDb21wbGFpbiBpZiB3ZSBzdGlsbCBoYXZlIGRhdGEgbGVmdCB0byB0cmFu c2Zlci4gKi8KQEAgLTEzNDYsNyArMTQxOCwxMCBAQCBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90 IGNkcm9tX3BjX2ludHIgKGlkCiAJCQlwcmludGsgKCIlczogY2Ryb21fcGNfaW50cjogZGF0 YSB1bmRlcnJ1biAlZFxuIiwKIAkJCQlkcml2ZS0+bmFtZSwgcGMtPmJ1Zmxlbik7CiAJCQkq LwotCQkJcGMtPnN0YXQgPSAxOworCQkJLy8gWFhYIHNpZ21hIC0gbGV0J3MgbWFrZSBpdCBv ayB0byBzZW5kIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkIGlmCisJCQkvLyB3ZSBhcmUg anVzdCByZWFkaW5nIHRoZSBUT0MKKwkJCWlmIChwYy0+Y1swXSAhPSAweDQzKQorCQkJCXBj LT5zdGF0ID0gMTsKIAkJCWNkcm9tX2VuZF9yZXF1ZXN0ICgxLCBkcml2ZSk7CiAJCX0KIAkJ cmV0dXJuIGlkZV9zdG9wcGVkOwpAQCAtMTM5Niw2ICsxNDcxLDggQEAgc3RhdGljIGlkZV9z dGFydHN0b3BfdCBjZHJvbV9wY19pbnRyIChpZAogCQkJImFwcGVhcnMgY29uZnVzZWQgKGly ZWFzb24gPSAweCUyeClcbiIsCiAJCQlkcml2ZS0+bmFtZSwgaXJlYXNvbik7CiAJCXBjLT5z dGF0ID0gMTsKKwkJY2Ryb21fZW5kX3JlcXVlc3QgKDEsIGRyaXZlKTsKKwkJcmV0dXJuIGlk ZV9zdG9wcGVkOwogCX0KIAogCS8qIE5vdyB3ZSB3YWl0IGZvciBhbm90aGVyIGludGVycnVw dC4gKi8KQEAgLTE0MjQsNyArMTUwMSwxMiBAQCBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGNk cm9tX2RvX3BhY2tldF9jCiAJc3RydWN0IHBhY2tldF9jb21tYW5kICpwYyA9IChzdHJ1Y3Qg cGFja2V0X2NvbW1hbmQgKilycS0+YnVmZmVyOwogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZv ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCi0JaW5mby0+ZG1hID0gMDsKKwlpZiAocnEtPmJo KSB7CisJCWluZm8tPmRtYSA9IDE7CisJfSBlbHNlIHsKKwkJaW5mby0+ZG1hID0gMDsKKwl9 CisKIAlpbmZvLT5jbWQgPSAwOwogCXBjLT5zdGF0ID0gMDsKIAlsZW4gPSBwYy0+YnVmbGVu OwpAQCAtMTQ0Nyw2ICsxNTI5LDEzIEBAIHZvaWQgY2Ryb21fc2xlZXAgKGludCB0aW1lKQog CX0gd2hpbGUgKHNsZWVwKTsKIH0KIAorLyoKKyAqIGVuZF9idWZmZXJfaW9fc3luYygpIGlz IG5vdCBleHBvcnRlZAorICovCitzdGF0aWMgdm9pZCBjZHJvbV9lbmRfYnVmZmVyX2lvX3N5 bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKQoreworfQorCiBzdGF0 aWMKIGludCBjZHJvbV9xdWV1ZV9wYWNrZXRfY29tbWFuZChpZGVfZHJpdmVfdCAqZHJpdmUs IHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqcGMpCiB7CkBAIC0xNDU5LDcgKzE1NDgsMjcgQEAg aW50IGNkcm9tX3F1ZXVlX3BhY2tldF9jb21tYW5kKGlkZV9kcml2ZQogCiAJLyogU3RhcnQg b2YgcmV0cnkgbG9vcC4gKi8KIAlkbyB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCBiaDsKKwog CQlpZGVfaW5pdF9kcml2ZV9jbWQgKCZyZXEpOworCisJCWlmIChwYy0+ZG9fZG1hKSB7CisJ CQkvKiBIYWNrIHVwIGEgYnVmZmVyX2hlYWQgZm9yIElERSBETUEncyB1c2UgKi8KKwkJCW1l bXNldCgmYmgsIDAsIHNpemVvZihiaCkpOworCQkJYmguYl9zaXplID0gcGMtPmJ1ZmxlbjsK KwkJCWJoLmJfZGF0YSA9IHBjLT5idWZmZXI7CisJCQliaC5iX3N0YXRlID0gKDEgPDwgQkhf TG9jaykgfCAoMSA8PCBCSF9NYXBwZWQpIHwKKwkJCQkJKDEgPDwgQkhfUmVxKTsKKwkJCWJo LmJfZW5kX2lvID0gY2Ryb21fZW5kX2J1ZmZlcl9pb19zeW5jOworI2lmIDAJCS8qIE5lZWRl ZCBieSBlbmRfYnVmZmVyX2lvX3N5bmMsIGJ1dCBub3QgY2Ryb21fZW5kX2J1ZmZlcl9pb19z eW5jICovCisJCQlhdG9taWNfc2V0KCZiaC5iX2NvdW50LCAxKTsKKwkJCWluaXRfd2FpdHF1 ZXVlX2hlYWQoJmJoLmJfd2FpdCk7CisjZW5kaWYKKwkJCXJlcS5iaCA9ICZiaDsKKwkJfQor CQllbHNlCisJCQlyZXEuYmggPSAwOworCiAJCXJlcS5jbWQgPSBQQUNLRVRfQ09NTUFORDsK IAkJcmVxLmJ1ZmZlciA9IChjaGFyICopcGM7CiAJCWlmIChpZGVfZG9fZHJpdmVfY21kIChk cml2ZSwgJnJlcSwgaWRlX3dhaXQpKSB7CkBAIC0yMjAyLDcgKzIzMTEsMTIgQEAgc3RhdGlj IGludCBpZGVfY2Ryb21fcGFja2V0KHN0cnVjdCBjZHJvbQogCXBjLnF1aWV0ID0gY2djLT5x dWlldDsKIAlwYy50aW1lb3V0ID0gY2djLT50aW1lb3V0OwogCXBjLnNlbnNlID0gY2djLT5z ZW5zZTsKLQlyZXR1cm4gY2djLT5zdGF0ID0gY2Ryb21fcXVldWVfcGFja2V0X2NvbW1hbmQo ZHJpdmUsICZwYyk7CisJaWYgKGNnYy0+ZG9fZG1hICYmIGRyaXZlLT51c2luZ19kbWEpCisJ CXBjLmRvX2RtYSA9IDE7CisJY2djLT5zdGF0ID0gY2Ryb21fcXVldWVfcGFja2V0X2NvbW1h bmQoZHJpdmUsICZwYyk7CisJaWYgKHBjLnN0YXQgPT0gMikJLyogRE1BIGVycm9yOiBmYWxs IGJhY2sgdG8gbG93ZXIgbW9kZSAqLworCQljZ2MtPmRtYV9lcnJvciA9IDE7CisJcmV0dXJu IGNnYy0+c3RhdDsKIH0KIAogc3RhdGljCmRpZmYgLXIgMWU2ZmY5OTVjNGVmIGRyaXZlcnMv aWRlL2lkZS1jZC5oCi0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5oCUZyaSBKdW4gMjYgMTA6 MDI6MDUgMjAwOSArMDIwMAorKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuaAlGcmkgSnVuIDI2 IDEwOjQ3OjQ1IDIwMDkgKzAyMDAKQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgcGFja2V0 X2NvbW1hbmQgewogCWludCBxdWlldDsKIAlpbnQgdGltZW91dDsKIAlzdHJ1Y3QgcmVxdWVz dF9zZW5zZSAqc2Vuc2U7CisJaW50IGRvX2RtYTsKIAl1bnNpZ25lZCBjaGFyIGNbMTJdOwog fTsKIApkaWZmIC1yIDFlNmZmOTk1YzRlZiBkcml2ZXJzL2lkZS9pZGUtZG1hLmMKLS0tIGEv ZHJpdmVycy9pZGUvaWRlLWRtYS5jCUZyaSBKdW4gMjYgMTA6MDI6MDUgMjAwOSArMDIwMAor KysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMJRnJpIEp1biAyNiAxMDo0Nzo0NSAyMDA5ICsw MjAwCkBAIC05MCwxMiArOTAsNTYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRl IDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9xdWFzYXIuaD4KKworLy8gWFhY IHNpZ21hCisjZGVmaW5lIEFTU0VSVChjb25kLG1zZykge2lmKCEoY29uZCkpIHByaW50ayht c2cpO30KK3N0cnVjdCBwYWNrZXRfY29tbWFuZCB7CisJY2hhciAqYnVmZmVyOworCWludCBi dWZsZW47CisJaW50IHN0YXQ7CisJaW50IHF1aWV0OworCWludCB0aW1lb3V0OworCXN0cnVj dCByZXF1ZXN0X3NlbnNlICpzZW5zZTsKKwlpbnQgZG9fZG1hOworCXVuc2lnbmVkIGNoYXIg Y1sxMl07Cit9OwordW5zaWduZWQgaW50IENQVV9SRF8zMkJJVF9SRUcgKGludCBCQVNFX0FE RFIsIGludCBSRUcpIAoreworCXJldHVybigqKHZvbGF0aWxlIGludCAqKShCQVNFX0FERFIg KyBSRUcpKTsKK30KK3ZvaWQgQ1BVX1dSUkRfMzJCSVRfUkVHIChpbnQgQkFTRV9BRERSICwg aW50IFJFRywgaW50IERBVEEpIAoreworCSoodm9sYXRpbGUgaW50ICopKEJBU0VfQUREUiAr IFJFRykgPSBEQVRBOworfQordm9pZCBFTTg1MDBfU0VUX1BMTF9TUEVFRCAoaW50IE1VTFQs IGludCBESVYsIGludCBESVZfU0VMKQoreworCWludCB0ZW1wOworCisJLy8gcmVhZCBhbmQg d3JpdGUgcGxsIGN0cmwgdmFsdWUKKwl0ZW1wID0gQ1BVX1JEXzMyQklUX1JFRyAoMHgwMDYw MDAwMCwgKCgweDFDMDQpIDw8IDIpKTsKKwl0ZW1wID0gdGVtcCAmIDB4RjAwMDsKKwlpZiAo RElWX1NFTCkKKwl7CQorCQl0ZW1wID0gdGVtcCB8IDB4MDI7CisJfQorCXRlbXAgPSB0ZW1w IHwgKERJViAgPDw4ICk7CisJdGVtcCA9IHRlbXAgfCAoTVVMVCA8PDIgKTsKKworCUNQVV9X UlJEXzMyQklUX1JFRyAoMHgwMDYwMDAwMCwgKCgweDFDMDQpIDw8IDIpLCAodGVtcCAmIDB4 N0ZGRikpOworCit9IC8vRU5EOiB2b2lkIEVNODUwMF9TRVRfUExMX1NQRUVEIChpbnQgTVVM VCwgaW50IERJViwgaW50IERJVl9TRUwpCisKICNpZmRlZiBDT05GSUdfUENJCiAjZGVmaW5l IFBDSURFVihod2lmKQkoKGh3aWYpLT5wY2lfZGV2KQogI2Vsc2UKICNkZWZpbmUgUENJREVW KGh3aWYpCU5VTEwKICNlbmRpZgogCisjZGVmaW5lIEJNSUNfT0ZGU0VUIDAKKyNkZWZpbmUg Qk1JU19PRkZTRVQgNCAKKyNkZWZpbmUgQk1JRFRQX09GRlNFVCA4CisjZGVmaW5lIERNQV9J T1JFR0lPTl9TSVpFIDE2CiAjdW5kZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1RJTUVPVVQK IC8qCiAgKiBMb25nIGxvc3QgZGF0YSBmcm9tIDIuMC4zNCB0aGF0IGlzIG5vdyBpbiAyLjAu MzkKQEAgLTI1Niw3ICszMDEsNyBAQCBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyIChp ZGVfZHJpdmVfCiAKIHN0YXRpYyBpbnQgaWRlX2J1aWxkX3NnbGlzdCAoaWRlX2h3aWZfdCAq aHdpZiwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7 CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc2JoOwogCXN0cnVjdCBzY2F0dGVybGlzdCAq c2cgPSBod2lmLT5zZ190YWJsZTsKIAlpbnQgbmVudHMgPSAwOwogCkBAIC0yNjgsNiArMzEz LDI0IEBAIHN0YXRpYyBpbnQgaWRlX2J1aWxkX3NnbGlzdCAoaWRlX2h3aWZfdCAKIAllbHNl CiAJCWh3aWYtPnNnX2RtYV9kaXJlY3Rpb24gPSBQQ0lfRE1BX1RPREVWSUNFOwogCWJoID0g cnEtPmJoOworCisJQVNTRVJUIChiaCwgImtlcm5lbCBidWc6IGJoPT1OVUxMIVxuIik7Cisv LyBYWFggc2lnbWEKKwlpZiAoYmggPT0gMCkKKwl7CisJCXN0cnVjdCBwYWNrZXRfY29tbWFu ZCAqcGMgPSAoc3RydWN0IHBhY2tldF9jb21tYW5kICopcnEtPmJ1ZmZlcjsKKwkJYmggPSAm c2JoOworCQlzYmguYl9kYXRhID0gcGMtPmJ1ZmZlcjsKKwkJc2JoLmJfc2l6ZSA9IHBjLT5i dWZsZW47CisJCXNiaC5iX3JlcW5leHQgPSBOVUxMOworCX0KKy8vCXByaW50ayAoIioqKioq KioqKioqKioqKlxuIik7CisvLwlwcmludGsgKCJiaCA9IDB4JTA4bHhcbiIsICh1bnNpZ25l ZCBsb25nKWJoKTsKKy8vCXByaW50ayAoImJoLT5iX2RhdGEgPSAweCUwOGx4XG4iLCAodW5z aWduZWQgbG9uZyliaC0+Yl9kYXRhKTsKKy8vCXByaW50ayAoImJoLT5iX3NpemUgPSAweCUw OGx4XG4iLCAodW5zaWduZWQgbG9uZyliaC0+Yl9zaXplKTsKKy8vCXByaW50ayAoImJoLT5i X3JlcW5leHQgPSAweCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZyliaC0+Yl9yZXFuZXh0KTsK Ky8vCXByaW50ayAoIioqKioqKioqKioqKioqKlxuIik7CisKIAlkbyB7CiAJCXVuc2lnbmVk IGNoYXIgKnZpcnRfYWRkciA9IGJoLT5iX2RhdGE7CiAJCXVuc2lnbmVkIGludCBzaXplID0g YmgtPmJfc2l6ZTsKQEAgLTI4MywxMCArMzQ2LDE4IEBAIHN0YXRpYyBpbnQgaWRlX2J1aWxk X3NnbGlzdCAoaWRlX2h3aWZfdCAKIAkJbWVtc2V0KCZzZ1tuZW50c10sIDAsIHNpemVvZigq c2cpKTsKIAkJc2dbbmVudHNdLmFkZHJlc3MgPSB2aXJ0X2FkZHI7CiAJCXNnW25lbnRzXS5s ZW5ndGggPSBzaXplOwotCQluZW50cysrOworCisJCW5lbnRzKys7CQkKIAl9IHdoaWxlIChi aCAhPSBOVUxMKTsKLQogCXJldHVybiBwY2lfbWFwX3NnKFBDSURFVihod2lmKSwgc2csIG5l bnRzLCBod2lmLT5zZ19kbWFfZGlyZWN0aW9uKTsKKy8qCXsKKwkJaW50IGk7CisJCWZvciAo aSA9IDA7IGkgPCBuZW50czsgaSsrLCBzZysrKSB7CisJCQljb25zaXN0ZW50X3N5bmMoc2ct PmFkZHJlc3MsIHNnLT5sZW5ndGgsIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOworCQkJc2ct PmRtYV9hZGRyZXNzID0gdmlydF90b19idXMoc2ctPmFkZHJlc3MpOworCQl9CisJfQorCXJl dHVybiBuZW50czsgKi8KIH0KIAogLyoKQEAgLTMzNiw2ICs0MDUsMTAgQEAgaW50IGlkZV9i dWlsZF9kbWF0YWJsZSAoaWRlX2RyaXZlX3QgKmRyaQogCQkJCQliY291bnQgPSBjdXJfbGVu OwogCQkJCSp0YWJsZSsrID0gY3B1X3RvX2xlMzIoY3VyX2FkZHIpOwogCQkJCXhjb3VudCA9 IGJjb3VudCAmIDB4ZmZmZjsKKyNpZiAxCisJCQkJLy8gYWRkZWQgYnkgSG8gTGVlIAorCQkJ CXF1YXNhcl9mbHVzaF9jYWNoZV9kYXRhX3JlZ2lvbihjdXJfYWRkciwgY3VyX2FkZHIgKyAo eGNvdW50ID09IDAgPyAweDEwMDAwIDogeGNvdW50KSk7CisjZW5kaWYKIAkJCQlpZiAoaXNf dHJtMjkwX2NoaXBzZXQpCiAJCQkJCXhjb3VudCA9ICgoeGNvdW50ID4+IDIpIC0gMSkgPDwg MTY7CiAJCQkJaWYgKHhjb3VudCA9PSAweDAwMDApIHsKQEAgLTQ2Nyw2ICs1NDAsNyBAQCBz dGF0aWMgaW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hIChpZGVfZHJpCiAJaWRlX2h3aWZfdCAq aHdpZiA9IEhXSUYoZHJpdmUpOwogCWludCBhdXRvZG1hID0gaHdpZi0+YXV0b2RtYTsKIAor I2lmbmRlZiBDT05GSUdfQVJDSF9KQVNQRVIgLy8gd2UgZG9udCBoYXZlIG5vIEJJT1MKIAlp ZiAoaHdpZi0+Y2hpcHNldCAhPSBpZGVfdHJtMjkwICYmIGh3aWYtPmNoaXBzZXQgIT0gaWRl X2Fjb3JuKSB7CiAJCS8qIHRha2Ugbm90ZSBvZiB3aGF0IHRoZSBiaW9zIGRpZCB3aGVuIHNl dHRpbmcgdXAKIAkJICogdGhlIGludGVyZmFjZS4gIElmIHRoZSBCSU9TIGRpZG4ndCBjb25m aWd1cmUKQEAgLTQ3NCw3ICs1NDgsNyBAQCBzdGF0aWMgaW50IGNvbmZpZ19kcml2ZV9mb3Jf ZG1hIChpZGVfZHJpCiAJCSAqIGl0IHVubGVzcyB3ZSBhcmUgcHJlcGFyZWQgdG8gY29uZmln dXJlIHRoZQogCQkgKiBkcml2ZSBhcyB3ZWxsLiAgLS0gcm1rCiAJCSAqLwotCQlieXRlIGRt YV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9iYXNlKzIpOworCQlieXRlIGRtYV9zdGF0ID0gaW5i KGh3aWYtPmRtYV9iYXNlK0JNSVNfT0ZGU0VUKTsKIAogCQlpZiAoZHJpdmUtPnNlbGVjdC5i LnVuaXQpIHsKIAkJCWlmICghKGRtYV9zdGF0ICYgMHg0MCkpCkBAIC00ODQsNyArNTU4LDE0 IEBAIHN0YXRpYyBpbnQgY29uZmlnX2RyaXZlX2Zvcl9kbWEgKGlkZV9kcmkKIAkJCQlhdXRv ZG1hID0gMDsKIAkJfQogCX0KKyNlbmRpZgogCisJcHJpbnRrICgiY29uZmlnX2RyaXZlX2Zv cl9kbWE6XG4iKTsKKwlwcmludGsgKCIgY2FwYWJpbGl0eSAgICA9IDB4JTA0eFxuIiwgaWQt PmNhcGFiaWxpdHkpOworCXByaW50ayAoIiBmaWVsZF92YWxpZCAgID0gMHglMDR4XG4iLCBp ZC0+ZmllbGRfdmFsaWQpOworCXByaW50ayAoIiBkbWFfbHdvcmQgKHMpID0gMHglMDR4XG4i LCBpZC0+ZG1hXzF3b3JkKTsKKwlwcmludGsgKCIgZG1hX213b3JkIChtKSA9IDB4JTA0eFxu IiwgaWQtPmRtYV9td29yZCk7CisJcHJpbnRrICgiIGF1dG9kbWEgICAgICAgPSAweCUwNHhc biIsIGF1dG9kbWEpOwogCWlmIChpZCAmJiAoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBhdXRv ZG1hKSB7CiAJCS8qIENvbnN1bHQgdGhlIGxpc3Qgb2Yga25vd24gImJhZCIgZHJpdmVzICov CiAJCWlmIChpZGVfZG1hcHJvYyhpZGVfZG1hX2JhZF9kcml2ZSwgZHJpdmUpKQpAQCAtNTAw LDEyICs1ODEsMjEgQEAgc3RhdGljIGludCBjb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2Ry aQogCQkJCXJldHVybiBod2lmLT5kbWFwcm9jKGlkZV9kbWFfb24sIGRyaXZlKTsKIAkJLyog RW5hYmxlIERNQSBvbiBhbnkgZHJpdmUgdGhhdCBoYXMgbW9kZTIgRE1BIChtdWx0aSBvciBz aW5nbGUpIGVuYWJsZWQgKi8KIAkJaWYgKGlkLT5maWVsZF92YWxpZCAmIDIpCS8qIHJlZ3Vs YXIgRE1BICovCisJCXsKKwkJCS8vIFhYWCBzaWdtYQogCQkJaWYgKChpZC0+ZG1hX213b3Jk ICYgMHg0MDQpID09IDB4NDA0IHx8IChpZC0+ZG1hXzF3b3JkICYgMHg0MDQpID09IDB4NDA0 KQogCQkJCXJldHVybiBod2lmLT5kbWFwcm9jKGlkZV9kbWFfb24sIGRyaXZlKTsKKwkJCS8v IGFsbG93IGFueSBtb2RlCisJCQlpZiAoaWQtPmRtYV9td29yZCAmIDB4ZmYwMCkJLy8gc2lu Z2xlIHdvcmQgZG1hCisJCQkJcmV0dXJuIGh3aWYtPmRtYXByb2MoaWRlX2RtYV9vbiwgZHJp dmUpOworCQkJaWYgKGlkLT5kbWFfMXdvcmQgJiAweGZmMDApCS8vIG11bHRpd29yZCBkbWEK KwkJCQlyZXR1cm4gaHdpZi0+ZG1hcHJvYyhpZGVfZG1hX29uLCBkcml2ZSk7CisJCX0KIAkJ LyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiZ29vZCIgZHJpdmVzICovCiAJCWlmIChp ZGVfZG1hcHJvYyhpZGVfZG1hX2dvb2RfZHJpdmUsIGRyaXZlKSkKIAkJCXJldHVybiBod2lm LT5kbWFwcm9jKGlkZV9kbWFfb24sIGRyaXZlKTsKIAl9CisJcHJpbnRrICgiRE1BIGRpc2Fi bGVkIHF1aXRlbHlcbiIpOwogCXJldHVybiBod2lmLT5kbWFwcm9jKGlkZV9kbWFfb2ZmX3F1 aWV0bHksIGRyaXZlKTsKIH0KIApAQCAtNTgyLDMxICs2NzIsMzkgQEAgaW50IGlkZV9kbWFw cm9jIChpZGVfZG1hX2FjdGlvbl90IGZ1bmMsIAogCWJ5dGUgdW5pdAkJCT0gKGRyaXZlLT5z ZWxlY3QuYi51bml0ICYgMHgwMSk7CiAJdW5zaWduZWQgaW50IGNvdW50LCByZWFkaW5nCT0g MDsKIAlieXRlIGRtYV9zdGF0OworCXVuc2lnbmVkIGxvbmcgaWRlX2ludF9zdGF0dXM7CiAK IAlzd2l0Y2ggKGZ1bmMpIHsKIAkJY2FzZSBpZGVfZG1hX29mZjoKIAkJCXByaW50aygiJXM6 IERNQSBkaXNhYmxlZFxuIiwgZHJpdmUtPm5hbWUpOwogCQljYXNlIGlkZV9kbWFfb2ZmX3F1 aWV0bHk6Ci0JCQlvdXRiKGluYihkbWFfYmFzZSsyKSAmIH4oMTw8KDUrdW5pdCkpLCBkbWFf YmFzZSsyKTsKKwkJCW91dGIoaW5iKGRtYV9iYXNlK0JNSVNfT0ZGU0VUKSAmIH4oMTw8KDUr dW5pdCkpLCBkbWFfYmFzZStCTUlTX09GRlNFVCk7CisJCQkvLyBYWFggc2lnbWE6IG5ldmVy IGRpc2FibGUgRE1BCisJCQlwcmludGsoIiVzOiBpZ25vcmUgRE1BIG9mZiBtZXNzYWdlLlxu IiwgZHJpdmUtPm5hbWUpOworCQkJcmV0dXJuIDA7CiAJCWNhc2UgaWRlX2RtYV9vbjoKIAkJ CWRyaXZlLT51c2luZ19kbWEgPSAoZnVuYyA9PSBpZGVfZG1hX29uKTsKIAkJCWlmIChkcml2 ZS0+dXNpbmdfZG1hKQotCQkJCW91dGIoaW5iKGRtYV9iYXNlKzIpfCgxPDwoNSt1bml0KSks IGRtYV9iYXNlKzIpOworCQkJCW91dGIoaW5iKGRtYV9iYXNlK0JNSVNfT0ZGU0VUKXwoMTw8 KDUrdW5pdCkpLCBkbWFfYmFzZStCTUlTX09GRlNFVCk7CiAJCQlyZXR1cm4gMDsKIAkJY2Fz ZSBpZGVfZG1hX2NoZWNrOgogCQkJcmV0dXJuIGNvbmZpZ19kcml2ZV9mb3JfZG1hIChkcml2 ZSk7CiAJCWNhc2UgaWRlX2RtYV9yZWFkOgogCQkJcmVhZGluZyA9IDEgPDwgMzsKLQkJY2Fz ZSBpZGVfZG1hX3dyaXRlOgorCQljYXNlIGlkZV9kbWFfd3JpdGU6CQkJCiAJCQlTRUxFQ1Rf UkVBRF9XUklURShod2lmLGRyaXZlLGZ1bmMpOwogCQkJaWYgKCEoY291bnQgPSBpZGVfYnVp bGRfZG1hdGFibGUoZHJpdmUsIGZ1bmMpKSkKKwkJCXsKIAkJCQlyZXR1cm4gMTsJLyogdHJ5 IFBJTyBpbnN0ZWFkIG9mIERNQSAqLwotCQkJb3V0bChod2lmLT5kbWF0YWJsZV9kbWEsIGRt YV9iYXNlICsgNCk7IC8qIFBSRCB0YWJsZSAqLworCQkJfQorCQkJb3V0bChod2lmLT5kbWF0 YWJsZV9kbWEsIGRtYV9iYXNlICsgQk1JRFRQX09GRlNFVCk7IC8qIFBSRCB0YWJsZSAqLwog CQkJb3V0YihyZWFkaW5nLCBkbWFfYmFzZSk7CQkJLyogc3BlY2lmeSByL3cgKi8KLQkJCW91 dGIoaW5iKGRtYV9iYXNlKzIpfDYsIGRtYV9iYXNlKzIpOwkJLyogY2xlYXIgSU5UUiAmIEVS Uk9SIGZsYWdzICovCisJCQlvdXRiKGluYihkbWFfYmFzZStCTUlTX09GRlNFVCl8NiwgZG1h X2Jhc2UrQk1JU19PRkZTRVQpOwkJLyogY2xlYXIgSU5UUiAmIEVSUk9SIGZsYWdzICovCiAJ CQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIAkJCWlmIChkcml2ZS0+bWVkaWEgIT0g aWRlX2Rpc2spCisJCQl7CiAJCQkJcmV0dXJuIDA7CisJCQl9CiAjaWZkZWYgQ09ORklHX0JM S19ERVZfSURFRE1BX1RJTUVPVVQKIAkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmlkZV9k bWFfaW50ciwgV0FJVF9DTUQsIE5VTEwpOwkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KICNl bHNlIC8qICFDT05GSUdfQkxLX0RFVl9JREVETUFfVElNRU9VVCAqLwpAQCAtNjI0LDE5ICs3 MjIsMjEgQEAgaW50IGlkZV9kbWFwcm9jIChpZGVfZG1hX2FjdGlvbl90IGZ1bmMsIAogCQlj YXNlIGlkZV9kbWFfZW5kOiAvKiByZXR1cm5zIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlICov CiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkJCW91dGIoaW5iKGRtYV9iYXNl KSZ+MSwgZG1hX2Jhc2UpOwkvKiBzdG9wIERNQSAqLwotCQkJZG1hX3N0YXQgPSBpbmIoZG1h X2Jhc2UrMik7CQkvKiBnZXQgRE1BIHN0YXR1cyAqLwotCQkJb3V0YihkbWFfc3RhdHw2LCBk bWFfYmFzZSsyKTsJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCisJCQlkbWFf c3RhdCA9IGluYihkbWFfYmFzZStCTUlTX09GRlNFVCk7CQkvKiBnZXQgRE1BIHN0YXR1cyAq LworCQkJb3V0YihkbWFfc3RhdHw2LCBkbWFfYmFzZStCTUlTX09GRlNFVCk7CS8qIGNsZWFy IHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwogCQkJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJp dmUpOwkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KIAkJCXJldHVybiAoZG1hX3N0YXQgJiA3 KSAhPSA0ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOwkvKiB2ZXJpZnkgZ29vZCBETUEgc3Rh dHVzICovCiAJCWNhc2UgaWRlX2RtYV90ZXN0X2lycTogLyogcmV0dXJucyAxIGlmIGRtYSBp cnEgaXNzdWVkLCAwIG90aGVyd2lzZSAqLwotCQkJZG1hX3N0YXQgPSBpbmIoZG1hX2Jhc2Ur Mik7CisJCQlkbWFfc3RhdCA9IGluYihkbWFfYmFzZStCTUlTX09GRlNFVCk7CiAjaWYgMAkv KiBkbyBub3Qgc2V0IHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgKi8KIAkJ CWlmIChkbWFfc3RhdCAmIDQpIHsKIAkJCQlieXRlIHN0YXQgPSBHRVRfU1RBVCgpOwotCQkJ CW91dGIoZG1hX2Jhc2UrMiwgZG1hX3N0YXQgJiAweEU0KTsKKwkJCQlvdXRiKGRtYV9iYXNl K0JNSVNfT0ZGU0VULCBkbWFfc3RhdCAmIDB4RTQpOwogCQkJfQogI2VuZGlmCi0JCQlyZXR1 cm4gKGRtYV9zdGF0ICYgNCkgPT0gNDsJLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAq LworCQkJLy8gWFhYIHNpZ21hIC0gY2hlY2sgdGhlIGludGVycnVwdCBzdGF0dXMgZnJvbSBq YXNwZXIgaW50IGNvbnRyb2xsZXIKKwkJCWlkZV9pbnRfc3RhdHVzID0gKigodm9sYXRpbGUg dW5zaWduZWQgbG9uZyAqKTB4NTAwMjIwKTsKKwkJCXJldHVybiAoKChkbWFfc3RhdCAmIDQp ID09IDQpIHx8IChpZGVfaW50X3N0YXR1cyAmIDB4ODAwKSk7CS8qIHJldHVybiAxIGlmIElO VFIgYXNzZXJ0ZWQgKi8KIAkJY2FzZSBpZGVfZG1hX2JhZF9kcml2ZToKIAkJY2FzZSBpZGVf ZG1hX2dvb2RfZHJpdmU6CiAJCQlyZXR1cm4gY2hlY2tfZHJpdmVfbGlzdHMoZHJpdmUsIChm dW5jID09IGlkZV9kbWFfZ29vZF9kcml2ZSkpOwpkaWZmIC1yIDFlNmZmOTk1YzRlZiBkcml2 ZXJzL2lkZS9pZGUtZmVhdHVyZXMuYwotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmVhdHVyZXMu YwlGcmkgSnVuIDI2IDEwOjAyOjA1IDIwMDkgKzAyMDAKKysrIGIvZHJpdmVycy9pZGUvaWRl LWZlYXR1cmVzLmMJRnJpIEp1biAyNiAxMDo0Nzo0NSAyMDA5ICswMjAwCkBAIC0yODUsMTAg KzI4NSwxMSBAQCBpbnQgaWRlX2NvbmZpZ19kcml2ZV9zcGVlZCAoaWRlX2RyaXZlX3QgCiAJ aW50CWksIGVycm9yID0gMTsKIAlieXRlIHN0YXQ7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19C TEtfREVWX0lERURNQSkgJiYgIWRlZmluZWQoQ09ORklHX0RNQV9OT05QQ0kpCisjaWYgMC8v ZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVETUEpICYmICFkZWZpbmVkKENPTkZJR19ETUFf Tk9OUENJKQogCWJ5dGUgdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwot CW91dGIoaW5iKGh3aWYtPmRtYV9iYXNlKzIpICYgfigxPDwoNSt1bml0KSksIGh3aWYtPmRt YV9iYXNlKzIpOworCW91dGIoaW5iKGh3aWYtPmRtYV9iYXNlKzQpICYgfigxPDwoNSt1bml0 KSksIGh3aWYtPmRtYV9iYXNlKzQpOwogI2VuZGlmIC8qIChDT05GSUdfQkxLX0RFVl9JREVE TUEpICYmICEoQ09ORklHX0RNQV9OT05QQ0kpICovCisKIAogCS8qCiAJICogRG9uJ3QgdXNl IGlkZV93YWl0X2NtZCBoZXJlIC0gaXQgd2lsbApAQCAtMzU1LDEzICszNTYsMTUgQEAgaW50 IGlkZV9jb25maWdfZHJpdmVfc3BlZWQgKGlkZV9kcml2ZV90IAogCWRyaXZlLT5pZC0+ZG1h X213b3JkICY9IH4weDBGMDA7CiAJZHJpdmUtPmlkLT5kbWFfMXdvcmQgJj0gfjB4MEYwMDsK IAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFRE1BKSAmJiAhZGVmaW5lZChDT05G SUdfRE1BX05PTlBDSSkKKworI2lmIDAgLy9kZWZpbmVkKENPTkZJR19CTEtfREVWX0lERURN QSkgJiYgIWRlZmluZWQoQ09ORklHX0RNQV9OT05QQ0kpCiAJaWYgKHNwZWVkID4gWEZFUl9Q SU9fNCkgewogCQlvdXRiKGluYihod2lmLT5kbWFfYmFzZSsyKXwoMTw8KDUrdW5pdCkpLCBo d2lmLT5kbWFfYmFzZSsyKTsKIAl9IGVsc2UgewogCQlvdXRiKGluYihod2lmLT5kbWFfYmFz ZSsyKSAmIH4oMTw8KDUrdW5pdCkpLCBod2lmLT5kbWFfYmFzZSsyKTsKIAl9CiAjZW5kaWYg LyogKENPTkZJR19CTEtfREVWX0lERURNQSkgJiYgIShDT05GSUdfRE1BX05PTlBDSSkgKi8K KwogCiAJc3dpdGNoKHNwZWVkKSB7CiAJCWNhc2UgWEZFUl9VRE1BXzc6ICAgZHJpdmUtPmlk LT5kbWFfdWx0cmEgfD0gMHg4MDgwOyBicmVhazsKZGlmZiAtciAxZTZmZjk5NWM0ZWYgZHJp dmVycy9pZGUvaWRlLWphc3Blci5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDow MCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1qYXNwZXIuYwlGcmkgSnVuIDI2 IDEwOjQ3OjQ1IDIwMDkgKzAyMDAKQEAgLTAsMCArMSwxOTcgQEAKKy8qIGlkZS1qYXNwZXIu YyAqLworCisvKiBqYXNwZXIgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gc3R1ZmYgZm9yIGlk ZSAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgor I2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2lu Y2x1ZGUgImlkZV9tb2Rlcy5oIgorCitleHRlcm4gaW50IHByaW50ayhjb25zdCBjaGFyICpm bXQsLi4uKTsKK2V4dGVybiB2b2lkIGlkZV9zZXR1cF9kbWEgKGlkZV9od2lmX3QgKmh3aWYs IHVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UsIHVuc2lnbmVkIGludCBudW1fcG9ydHMpOworCisv LyNkZWZpbmUgRU5BQkxFX0JNRE1BIAorI3VuZGVmIEVOQUJMRV9CTURNQQorI2RlZmluZSBF TkFCTEVfVURNQSAKKy8vI3VuZGVmIEVOQUJMRV9VRE1BCisKK2ludCBpZGVfY29uZmlnX2Ry aXZlX3NwZWVkIChpZGVfZHJpdmVfdCAqZHJpdmUsIGJ5dGUgc3BlZWQpOworCisvL1NldHVw IHJlZ2lzdGVyIDB4NTQgYW5kIDB4NThhIGZvciBVRE1BIHRpbWluZworLy9WYWx1ZXMgYXNz dW1lIDEwME1oeiBzeXN0ZW0gYnVzCitzdGF0aWMgaW50IGphc3Blcl90dW5lX2NoaXBzZXQo aWRlX2RyaXZlX3QgKmRyaXZlLCBieXRlIHNwZWVkKQoreworCWlkZV9od2lmX3QgKmh3aWYg PSBIV0lGKGRyaXZlKTsKKwljaGFyIGNoYW5uZWwgICAgID0gaHdpZi0+Y2hhbm5lbDsKKwl1 bnNpZ25lZCBzaG9ydCByZWc1NCwgcmVnNTg7CisJaW50IHNsYXZlID0gKCZIV0lGKGRyaXZl KS0+ZHJpdmVzWzFdID09IGRyaXZlKTsKKworCXByaW50aygiamFzcGVyX3R1bmVfY2hpcHNl dDogc3BlZWQgPSAlMDJ4XG4iLCBzcGVlZCk7CisJCisJcmVnNTQ9aW53KEpBU1BFUl9JREVf QkFTRSArIDB4NTQpOworCXJlZzU4PWludyhKQVNQRVJfSURFX0JBU0UgKyAweDU4KTsKKwor I2lmZGVmIEVOQUJMRV9VRE1BIAorCWlmKHNwZWVkPj1YRkVSX1VETUFfMCAmJiBzcGVlZDw9 WEZFUl9VRE1BXzUpeworCQkvLyAtLS0tIFRoaXMgYXNzdW1lIDEwME1oeiBzeXN0ZW0gYnVz IC0gZm9yIFVETUEKKwkJaWYoc2xhdmUpIHsKKwkJCXJlZzU0IHw9IDB4MjsKKwkJCXJlZzU4 IHw9IChzcGVlZC1YRkVSX1VETUFfMCk8PDQ7CisJCX1lbHNlIHsKKwkJCXJlZzU0IHw9IDB4 MTsKKwkJCXJlZzU4IHw9IChzcGVlZC1YRkVSX1VETUFfMCk7CisJCX0KKwkJLy8gLS0tLSAK Kwl9IGVsc2UKKyNlbmRpZiAvLyBFTkFCTEVfVURNQQkJCQorCXsKKwkJaWYoc2xhdmUpIHsK KwkJCXJlZzU0ICY9IH4weDI7CisJCX0gZWxzZSB7CisJCQlyZWc1NCAmPSB+MHgxOworCQl9 CisJfQorCQorCW91dHcocmVnNTQsIEpBU1BFUl9JREVfQkFTRSArIDB4NTQpOworCW91dHco cmVnNTgsIEpBU1BFUl9JREVfQkFTRSArIDB4NTgpOworCXJldHVybiBpZGVfY29uZmlnX2Ry aXZlX3NwZWVkKGRyaXZlLCBzcGVlZCk7Cit9CisKK3N0YXRpYyBpbnQgamFzcGVyX2NvbmZp Z19kcml2ZV9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJc3RydWN0IGhkX2Ry aXZlaWQgKmlkID0gZHJpdmUtPmlkOworCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZl KTsKKwlpbnQgYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7CisJaWRlX2RtYV9hY3Rpb25fdCBk bWFfZnVuYyA9IGlkZV9kbWFfb247CisJYnl0ZSBzcGVlZDsKKwlieXRlIHVkbWFfNjYgPSBl aWdodHlfbmludHlfdGhyZWUoZHJpdmUpOyAvLyA4MCBjIHJpYmJvbiA/CisKKwlwcmludGsg KCJtb2RlbCAgICAgICAgICAgID0gJS40MHNcbiIsIGlkLT5tb2RlbCk7CisJcHJpbnRrICgi ZmlybXdhcmUgdmVyc2lvbiA9ICUuOHNcbiIsIGlkLT5md19yZXYpOworCXByaW50ayAoImph c3Blcl9jb25maWdfZHJpdmVfZm9yX2RtYTpcbiIpOworCXByaW50ayAoIiBjYXBhYmlsaXR5 ICAgID0gMHglMDR4XG4iLCBpZC0+Y2FwYWJpbGl0eSk7CisJcHJpbnRrICgiIGZpZWxkX3Zh bGlkICAgPSAweCUwNHhcbiIsIGlkLT5maWVsZF92YWxpZCk7CisJcHJpbnRrICgiIGRtYV91 bHRyYSAgICAgPSAweCUwNHhcbiIsIGlkLT5kbWFfdWx0cmEpOworCXByaW50ayAoIiBkbWFf MXdvcmQgKHMpID0gMHglMDR4XG4iLCBpZC0+ZG1hXzF3b3JkKTsKKwlwcmludGsgKCIgZG1h X213b3JkIChtKSA9IDB4JTA0eFxuIiwgaWQtPmRtYV9td29yZCk7CisJcHJpbnRrICgiIGF1 dG9kbWEgICAgICAgPSAweCUwNHhcbiIsIGF1dG9kbWEpOworCWlmIChpZCAmJiAoaWQtPmNh cGFiaWxpdHkgJiAxKSAmJiBhdXRvZG1hKSB7CisJCWlmIChpZGVfZG1hcHJvYyhpZGVfZG1h X2JhZF9kcml2ZSwgZHJpdmUpKSB7CisJCQkvLyBjb25zdWx0IGxpc3Qgb2Yga25vd24gImJh ZCIgZHJpdmVzCisJCQlkbWFfZnVuYyA9IGlkZV9kbWFfb2ZmOworLy8gVWx0cmEgRE1BIHN1 cHBvcnQJCQkKKyNpZmRlZiBFTkFCTEVfVURNQQorCQl9IGVsc2UgaWYgKChpZC0+ZmllbGRf dmFsaWQgJiA0KSAmJiAoaWQtPmRtYV91bHRyYSAmIDB4M0YpKSB7CisJCQkvLyBFbmFibGUg RE1BIG9uIGFueSBkcml2ZSB0aGF0IGlzIFVsdHJhRE1BIChtb2RlIDAtNSkgY2FwYWJsZQor CQkJLy8gbW9kZTMvNC81IG5lZWRzIDgwYyByaWJib24KKwkJCWlmKChpZC0+ZG1hX3VsdHJh ICYgMHgyMCkgJiYgdWRtYV82NikKKwkJCQlzcGVlZCA9IFhGRVJfVURNQV81OyAKKwkJCWVs c2UgaWYoKGlkLT5kbWFfdWx0cmEgJiAweDEwKSAmJiB1ZG1hXzY2KQorCQkJCXNwZWVkID0g WEZFUl9VRE1BXzQ7CisJCQllbHNlIGlmKChpZC0+ZG1hX3VsdHJhICYgMHgwOCkgJiYgdWRt YV82NikKKwkJCQlzcGVlZCA9IFhGRVJfVURNQV8zOworCQkJZWxzZSBpZihpZC0+ZG1hX3Vs dHJhICYgMHgwNCkKKwkJCQlzcGVlZCA9IFhGRVJfVURNQV8yOworCQkJZWxzZSBpZihpZC0+ ZG1hX3VsdHJhICYgMHgwMikKKwkJCQlzcGVlZCA9IFhGRVJfVURNQV8xOworCQkJZWxzZSBp ZihpZC0+ZG1hX3VsdHJhICYgMHgwMSkKKwkJCQlzcGVlZCA9IFhGRVJfVURNQV8wOworI2Vu ZGlmCQkJCisvL0J1c21hc3RlciBETUEgc3VwcG9ydAorI2lmZGVmIEVOQUJMRV9CTURNQQor CQl9IGVsc2UgaWYoKGlkLT5maWVsZF92YWxpZCAmIDIpICYmCShpZC0+ZG1hX213b3JkICYg MHg3KSkgeworCQkJLy8gTXVsdGl3b3JkIERNQQorCQkJaWYoaWQtPmRtYV9td29yZCAmIDB4 NCkKKwkJCQlzcGVlZCA9IFhGRVJfTVdfRE1BXzI7CisJCQllbHNlIGlmIChpZC0+ZG1hX213 b3JkICYgMHgyKQorCQkJCXNwZWVkID0gWEZFUl9NV19ETUFfMTsKKwkJCWVsc2UKKwkJCQlz cGVlZCA9IFhGRVJfTVdfRE1BXzA7CisJCX0gZWxzZSBpZigoaWQtPmZpZWxkX3ZhbGlkICYg MikgJiYgKGlkLT5kbWFfMXdvcmQgJiAweDcpKSB7CisJCQkvLyBTaW5nbGUgd29yZCBETUEK KwkJCWlmKGlkLT5kbWFfMXdvcmQgJiAweDQpCisJCQkJc3BlZWQgPSBYRkVSX1NXX0RNQV8y OworCQkJZWxzZSBpZiAoaWQtPmRtYV8xd29yZCAmIDB4MikKKwkJCQlzcGVlZCA9IFhGRVJf U1dfRE1BXzE7CisJCQllbHNlIAorCQkJCXNwZWVkID0gWEZFUl9TV19ETUFfMDsKKyNlbmRp ZgkJCQorCQl9IGVsc2UgeworCQkJc3BlZWQgPSBYRkVSX1BJT18wICsgaWRlX2dldF9iZXN0 X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDUsIE5VTEwpOworCQkJZG1hX2Z1bmMgPSBpZGVfZG1h X29mZl9xdWlldGx5OworCQl9CisKKwkJaWYoamFzcGVyX3R1bmVfY2hpcHNldChkcml2ZSwg c3BlZWQpKSB7CisJCQlwcmludGsoIkVycm9yIGluIGphc3Blcl90dW5lX2NoaXBzZXQsIGRp c2JhbGUgRE1BXG4iKTsKKwkJCWRtYV9mdW5jID0gaWRlX2RtYV9vZmY7CisJCX0KKwkJCisJ CXJldHVybiBod2lmLT5kbWFwcm9jKGRtYV9mdW5jLCBkcml2ZSk7CisJfQorCQorCXByaW50 ayAoIkRNQSBkaXNhYmxlZCBxdWlldGx5XG4iKTsKKwlyZXR1cm4gaHdpZi0+ZG1hcHJvYyhp ZGVfZG1hX29mZl9xdWlldGx5LCBkcml2ZSk7Cit9CisKK3N0YXRpYyBpbnQgamFzcGVyX2Rt YXByb2MoaWRlX2RtYV9hY3Rpb25fdCBmdW5jLCBpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJ dW5zaWduZWQgY2hhciBkbWFfc3RhdDsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gSFdJ Rihkcml2ZSktPmRtYV9iYXNlOworCXVuc2lnbmVkIGxvbmcgZG1hX2NvdW50LCBkbWFfYWRk cmVzczsKKwlpbnQgaTsKKwkKKwlzd2l0Y2ggKGZ1bmMpIHsKKwkJY2FzZSBpZGVfZG1hX2No ZWNrOgorCQkJcmV0dXJuIGphc3Blcl9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSk7CisJ CWNhc2UgaWRlX2RtYV9lbmQ6CisJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hPTA7CisJCQlm b3IoaT0wOyBpPDEwMDsgaSsrKSB7CisJCQkJZG1hX3N0YXQgPSBpbmIoZG1hX2Jhc2UgKyAw eDQpOyAgLyogZ2V0IERNQSBzdGF0dXMgKi8KKwkJCQlpZigoZG1hX3N0YXQgJiAweDQpID09 NCkKKwkJCQkJYnJlYWs7CisJCQkJZG1hX2NvdW50ID0gaW5sKGRtYV9iYXNlICsgMHhlNCk7 CisJCQkJZG1hX2FkZHJlc3MgPSBpbmwoZG1hX2Jhc2UgKyAweGUwKTsKKwkJCQkvL3ByaW50 aygiSiAlMXggJTA4eCAlMDR4XG4iLCBkbWFfc3RhdCAmIDB4RiwgZG1hX2FkZHJlc3MsIGRt YV9jb3VudCk7CisJCQl9CisJCQlvdXRiKGluYihkbWFfYmFzZSkmfjEsIGRtYV9iYXNlKTsg Lyogc3RvcCBETUEgKi8KKwkJCW91dGIoZG1hX3N0YXR8NiwgZG1hX2Jhc2UgKyAweDQpOyAv KiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KKwkJCWlkZV9kZXN0cm95X2RtYXRh YmxlKGRyaXZlKTsgLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovCisJCQlyZXR1cm4gKGRtYV9z dGF0ICYgNCkgIT0gNCA/ICgweDEwIHwgZG1hX3N0YXQpIDogMDsKKwkJZGVmYXVsdCA6CisJ CQlicmVhazsKKwl9CisJLyogT3RoZXIgY2FzZXMgYXJlIGRvbmUgYnkgZ2VuZXJpYyBJREUt RE1BIGNvZGUuICovCisJcmV0dXJuIGlkZV9kbWFwcm9jKGZ1bmMsIGRyaXZlKTsKK30KKwor dm9pZCBfX2luaXQgamFzcGVyX2lkZV9pbml0KHZvaWQpCit7CisJaWRlX2h3aWZfdCAqaHdp ZjsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gSkFTUEVSX0lERV9ETUFfQkFTRTsKKwkv LyBlbmFibGUgaWRlIGludGVyZmFjZSAKKwkKKwkvL3NldCBwaW80IHRvIDEKKwkKKwlvdXRs KDB4MDAxMEZGRkYsIEpBU1BFUl9QSU8wX0JBU0UgKyBQSU9fRElSKTsKKwlvdXRsKDB4MDAx MEZGRkYsIEpBU1BFUl9QSU8wX0JBU0UgKyBQSU9fREFUQSk7CisKKwkvLwljaG9vc2UgaWRl IG92ZXIgZHZkIGxvYWRlciAoRFZEX0FWX0NPTlRST0wpCisJLy8Jd3JpdGUgMHg4MDAwIHRv IElERVRJTQorCW91dGwoMHgwMCwgSkFTUEVSX0RWRF9CQVNFICsgRFZEX0FWX0NUUkwpOwkJ CS8vMHgwMCBzZWxlY3QgSURFIG92ZXIgRFZELWxvYWRlcgorCW91dGwoMHg4MDAwLCBKQVNQ RVJfSURFX0JBU0UgKyBJREVfVElNKTsKKy8vCW91dGwoMHhiMzAxLCBKQVNQRVJfSURFX0JB U0UgKyBJREVfVElNKTsJCS8vMHg0MCBJREUgZGVjb2RlIGVuYWJsZQorCisJcHJpbnRrKCJK QVNQRVIgaWRlIGNvbnRyb2xsZXIgYWN0aXZhdGVkXG4iKTsKKwkKKwkvLyBncmFiIGh3aWYs CisJaHdpZiA9ICZpZGVfaHdpZnNbMF07CisJLy8gc2V0dXAgYnVzbWFzdGVyIGRtYQorCWlk ZV9zZXR1cF9kbWEoaHdpZiwgZG1hX2Jhc2UsIDE2KTsKKwkvLyBvdmVycmlkZSBkbWFwcm9j CisgCWh3aWYtPmRtYXByb2MgPSAmamFzcGVyX2RtYXByb2M7CisJLy8gYXV0b2RtYSBvbgor CWh3aWYtPmF1dG9kbWEgPSAxOworfQorCisKZGlmZiAtciAxZTZmZjk5NWM0ZWYgZHJpdmVy cy9pZGUvaWRlLXByb2JlLmMKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMJRnJpIEp1 biAyNiAxMDowMjowNSAyMDA5ICswMjAwCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5j CUZyaSBKdW4gMjYgMTA6NDc6NDUgMjAwOSArMDIwMApAQCAtMTkzLDYgKzE5Myw3IEBAIHN0 YXRpYyBpbnQgYWN0dWFsX3RyeV90b19pZGVudGlmeSAoaWRlX2QKIAlpZGVfaW9yZWdfdCBo ZF9zdGF0dXM7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWJ5dGUgcywgYTsKKy8vCWlu dCBpOwogCiAJaWYgKElERV9DT05UUk9MX1JFRykgewogCQkvKiB0YWtlIGEgZGVlcCBicmVh dGggKi8KQEAgLTIwOSwxMSArMjEwLDE0IEBAIHN0YXRpYyBpbnQgYWN0dWFsX3RyeV90b19p ZGVudGlmeSAoaWRlX2QKIAkJaWRlX2RlbGF5XzUwbXMoKTsKIAkJaGRfc3RhdHVzID0gSURF X1NUQVRVU19SRUc7CiAJfQorLyoJZm9yKGk9MDsgaTwxMDsgaSsrKSovCisJCWlkZV9kZWxh eV81MG1zKCk7CiAKIAkvKiBzZXQgZmVhdHVyZXMgcmVnaXN0ZXIgZm9yIGF0YXBpIGlkZW50 aWZ5IGNvbW1hbmQgdG8gYmUgc3VyZSBvZiByZXBseSAqLwogCWlmICgoY21kID09IFdJTl9Q SURFTlRJRlkpKQogCQlPVVRfQllURSgwLElERV9GRUFUVVJFX1JFRyk7CS8qIGRpc2FibGUg ZG1hICYgb3ZlcmxhcCAqLwotCisvKglmb3IoaT0wOyBpPDEwOyBpKyspKi8KKwkJaWRlX2Rl bGF5XzUwbXMoKTsKICNpZiBDT05GSUdfQkxLX0RFVl9QREM0MDMwCiAJaWYgKEhXSUYoZHJp dmUpLT5jaGlwc2V0ID09IGlkZV9wZGM0MDMwKSB7CiAJCS8qIERDNDAzMCBob3N0ZWQgZHJp dmVzIG5lZWQgdGhlaXIgb3duIGlkZW50aWZ5Li4uICovCkBAIC0yMjQsNiArMjI4LDggQEAg c3RhdGljIGludCBhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5IChpZGVfZAogCX0gZWxzZQogI2Vu ZGlmIC8qIENPTkZJR19CTEtfREVWX1BEQzQwMzAgKi8KIAkJT1VUX0JZVEUoY21kLElERV9D T01NQU5EX1JFRyk7CQkvKiBhc2sgZHJpdmUgZm9yIElEICovCisvLwlmb3IoaT0wOyBpPDEw OyBpKyspCisJCWlkZV9kZWxheV81MG1zKCk7CiAJdGltZW91dCA9ICgoY21kID09IFdJTl9J REVOVElGWSkgPyBXQUlUX1dPUlNUQ0FTRSA6IFdBSVRfUElERU5USUZZKSAvIDI7CiAJdGlt ZW91dCArPSBqaWZmaWVzOwogCWRvIHsKQEAgLTMxOSw2ICszMjUsMjUgQEAgc3RhdGljIGlu dCBkb19wcm9iZSAoaWRlX2RyaXZlX3QgKmRyaXZlLAogCWlkZV9kZWxheV81MG1zKCk7CS8q IG5lZWRlZCBmb3Igc29tZSBzeXN0ZW1zIChlLmcuIGNydzk2MjQgYXMgZHJpdmUwIHdpdGgg ZGlzayBhcyBzbGF2ZSkgKi8KIAlTRUxFQ1RfRFJJVkUoaHdpZixkcml2ZSk7CiAJaWRlX2Rl bGF5XzUwbXMoKTsKKworI2lmZGVmIENPTkZJR19DT0xERklSRQorCSAgICAvKgorCQkgKiAg Q29sZEZpcmUgcGxhdGZvcm1zIGJvb3QgdXAgc28gcXVpY2sgdGhhdCBtb3N0IGhhcmQgZHJp dmVzCisJCSAqICBoYXZlIG5vdCBjb21wbGV0ZWQgdGhlcmUgb3duIHNlbGYgdGVzdHMuIFBh dXNlIGhlcmUgZm9yCisJCSAqICBhIGNvdXBsZSBvZiBzZWNvbmRzIGlmIGl0IGxvb2tzIGxp a2UgdGhlcmUgaXMgYSBkcml2ZQorCQkgKiAgcHJlc2VudC4uLgorCQkgKi8KKwkgICAgaWYg KElOX0JZVEUoSURFX1NFTEVDVF9SRUcpICE9IGRyaXZlLT5zZWxlY3QuYWxsKSB7CisJCQlw cmludGsoIklERTogd2FpdGluZyBmb3IgZHJpdmVzIHRvIHNldHRsZS4uLlxuIik7CisJCQlm b3IgKHJjID0gMDsgKHJjIDwgNDAwKTsgcmMrKykgeworCQkJCVNFTEVDVF9EUklWRShod2lm LGRyaXZlKTsKKwkJCQlpZGVfZGVsYXlfNTBtcygpOworCQkJCWlmIChJTl9CWVRFKElERV9T RUxFQ1RfUkVHKSA9PSBkcml2ZS0+c2VsZWN0LmFsbCkKKwkJCQkJYnJlYWs7CisJCQl9CisJ CX0KKyNlbmRpZgorCiAJaWYgKElOX0JZVEUoSURFX1NFTEVDVF9SRUcpICE9IGRyaXZlLT5z ZWxlY3QuYWxsICYmICFkcml2ZS0+cHJlc2VudCkgewogCQlpZiAoZHJpdmUtPnNlbGVjdC5i LnVuaXQgIT0gMCkgewogCQkJU0VMRUNUX0RSSVZFKGh3aWYsJmh3aWYtPmRyaXZlc1swXSk7 CS8qIGV4aXQgd2l0aCBkcml2ZTAgc2VsZWN0ZWQgKi8KZGlmZiAtciAxZTZmZjk5NWM0ZWYg ZHJpdmVycy9pZGUvaWRlLXRhcGUuYwotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCUZy aSBKdW4gMjYgMTA6MDI6MDUgMjAwOSArMDIwMAorKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFw ZS5jCUZyaSBKdW4gMjYgMTA6NDc6NDUgMjAwOSArMDIwMApAQCAtMyw3ICszLDcgQEAKICAq CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUgLSAxOTk5IEdhZGkgT3htYW4gPGdhZGlvQG5ldHZp c2lvbi5uZXQuaWw+CiAgKgotICogJEhlYWRlciQKKyAqICRIZWFkZXI6IC9FTTg1eHgvdUNs aW51eC0yLjQvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyAxICAgICA2LzA3LzAyIDEyOjQzcCBG YWJyaWNlICQKICAqCiAgKiBUaGlzIGRyaXZlciB3YXMgY29uc3RydWN0ZWQgYXMgYSBzdHVk ZW50IHByb2plY3QgaW4gdGhlIHNvZnR3YXJlIGxhYm9yYXRvcnkKICAqIG9mIHRoZSBmYWN1 bHR5IG9mIGVsZWN0cmljYWwgZW5naW5lZXJpbmcgaW4gdGhlIFRlY2huaW9uIC0gSXNyYWVs J3MKZGlmZiAtciAxZTZmZjk5NWM0ZWYgZHJpdmVycy9pZGUvaWRlLmMKLS0tIGEvZHJpdmVy cy9pZGUvaWRlLmMJRnJpIEp1biAyNiAxMDowMjowNSAyMDA5ICswMjAwCisrKyBiL2RyaXZl cnMvaWRlL2lkZS5jCUZyaSBKdW4gMjYgMTA6NDc6NDUgMjAwOSArMDIwMApAQCAtNDMwLDEx ICs0MzEsMTggQEAgdm9pZCBpZGVfaW5wdXRfZGF0YSAoaWRlX2RyaXZlX3QgKmRyaXZlLAog CQkJaW5zbChJREVfREFUQV9SRUcsIGJ1ZmZlciwgd2NvdW50KTsKIAl9IGVsc2UgewogI2lm IFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCi0JCWlmIChkcml2ZS0+c2xvdykgewotCQkJdW5z aWduZWQgc2hvcnQgKnB0ciA9ICh1bnNpZ25lZCBzaG9ydCAqKSBidWZmZXI7CisJCWlmICgx KSB7IC8vIGRyaXZlLT5zbG93KSB7IC8vIHdlIGNhbnQgdXNlIGluc3cgd2l0aCBhbnkgYWxp Z25lbWVudCBhbHNvCisJCQl1bnNpZ25lZCBjaGFyICpwdHIgPSAodW5zaWduZWQgY2hhciAq KSBidWZmZXI7CisJCQl1bnNpZ25lZCBzaG9ydCB3OwogCQkJd2hpbGUgKHdjb3VudC0tKSB7 Ci0JCQkJKnB0cisrID0gaW53X3AoSURFX0RBVEFfUkVHKTsKLQkJCQkqcHRyKysgPSBpbndf cChJREVfREFUQV9SRUcpOworLy8JCQkJdG1wID0gMTAwOyB3aGlsZSh0bXAtLSk7CisJCQkJ dyA9IGlud19wKElERV9EQVRBX1JFRyk7CisJCQkJKnB0cisrID0gKHVuc2lnbmVkIGNoYXIp KHcgJiAweEZGKTsKKwkJCQkqcHRyKysgPSAodW5zaWduZWQgY2hhcikodyA+PiA4KTsKKy8v CQkJCXRtcCA9IDEwMDsgd2hpbGUodG1wLS0pOworCQkJCXcgPSBpbndfcChJREVfREFUQV9S RUcpOworCQkJCSpwdHIrKyA9IHcmMHhGRjsKKwkJCQkqcHRyKysgPSB3Pj44OwogCQkJfQog CQl9IGVsc2UKICNlbmRpZiAvKiBTVVBQT1JUX1NMT1dfREFUQV9QT1JUUyAqLwpAQCAtNDQ4 LDYgKzQ1Niw3IEBAIHZvaWQgaWRlX291dHB1dF9kYXRhIChpZGVfZHJpdmVfdCAqZHJpdmUK IHZvaWQgaWRlX291dHB1dF9kYXRhIChpZGVfZHJpdmVfdCAqZHJpdmUsIHZvaWQgKmJ1ZmZl ciwgdW5zaWduZWQgaW50IHdjb3VudCkKIHsKIAlieXRlIGlvXzMyYml0OworCWludCB0bXA7 CiAKIAlpZihIV0lGKGRyaXZlKS0+aWRlcHJvYykgewogCQlIV0lGKGRyaXZlKS0+aWRlcHJv YyhpZGVwcm9jX2lkZV9vdXRwdXRfZGF0YSwKQEAgLTQ3MSwxMCArNDgwLDEyIEBAIHZvaWQg aWRlX291dHB1dF9kYXRhIChpZGVfZHJpdmVfdCAqZHJpdmUKIAkJCW91dHNsKElERV9EQVRB X1JFRywgYnVmZmVyLCB3Y291bnQpOwogCX0gZWxzZSB7CiAjaWYgU1VQUE9SVF9TTE9XX0RB VEFfUE9SVFMKLQkJaWYgKGRyaXZlLT5zbG93KSB7CisJCWlmICgxKSB7IC8vICpoYWNrKiBk cml2ZS0+c2xvdykgeyAKIAkJCXVuc2lnbmVkIHNob3J0ICpwdHIgPSAodW5zaWduZWQgc2hv cnQgKikgYnVmZmVyOwogCQkJd2hpbGUgKHdjb3VudC0tKSB7CisJCQkJdG1wID0gMTA7IHdo aWxlKHRtcC0tKTsKIAkJCQlvdXR3X3AoKnB0cisrLCBJREVfREFUQV9SRUcpOworCQkJCXRt cCA9IDEwOyB3aGlsZSh0bXAtLSk7CiAJCQkJb3V0d19wKCpwdHIrKywgSURFX0RBVEFfUkVH KTsKIAkJCX0KIAkJfSBlbHNlCkBAIC0xNjAwLDcgKzE2MTEsOCBAQCB2b2lkIGlkZV90aW1l cl9leHBpcnkgKHVuc2lnbmVkIGxvbmcgZGF0CiAJCQl9IGVsc2UgewogCQkJCWlmIChkcml2 ZS0+d2FpdGluZ19mb3JfZG1hKSB7CiAJCQkJCXN0YXJ0c3RvcCA9IGlkZV9zdG9wcGVkOwot CQkJCQlpZGVfZG1hX3RpbWVvdXRfcmV0cnkoZHJpdmUpOworCQkJCQkvLyBYWFggc2lnbWEg ZG8gbm90IHJldHJ5CisJCQkJCS8vaWRlX2RtYV90aW1lb3V0X3JldHJ5KGRyaXZlKTsKIAkJ CQl9IGVsc2UKIAkJCQkJc3RhcnRzdG9wID0gaWRlX2Vycm9yKGRyaXZlLCAiaXJxIHRpbWVv dXQiLCBHRVRfU1RBVCgpKTsKIAkJCX0K ------------2E7E4439E5E6FE Content-Type: text/plain; name="pata_jasper.c" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="pata_jasper.c" LyogaWRlLWphc3Blci5jICovCgovKiBqYXNwZXIgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24g c3R1ZmYgZm9yIGlkZSAqLwoKI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9wY2kuaD4KI2luY2x1ZGUgPGxpbnV4 L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgojaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiNpbmNsdWRlIDxsaW51eC9saWJh dGEuaD4KI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgoKI2RlZmluZSBEUlZf TkFNRQkicGF0YV9qYXNwZXIiCiNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMSIKCiNpbmNsdWRl IDxhc20vaW8uaD4KI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgojaW5jbHVkZSA8YXNtL2Fy Y2gvcXVhc2FyLmg+CgovLyB1cGRhdGVkIHRvIG1hdGNoIHN0b2NrIGlkZSBkcml2ZXIgZmly bXdhcmUgMS41LjIKc3RhdGljIGludCBqYXNwZXJfdHVuZV9jaGlwc2V0KGludCBzbGF2ZSwg dTggc3BlZWQpCnsKCXVuc2lnbmVkIHNob3J0IHJlZzU0LCByZWc1ODsKCglzcGVlZCA9IHNw ZWVkICYgMHhGRjsKCglwcmludGsoImphc3Blcl90dW5lX2NoaXBzZXQ6IHNwZWVkID0gJTAy eFxuIiwgc3BlZWQpOwoKCS8qdW5zaWduZWQgaW50ICovcmVnNTQgPSBpbncoSkFTUEVSX0lE RV9CQVNFICsgSURFX1VETUFDVEwpOwoJLyp1bnNpZ25lZCBpbnQgKi9yZWc1OCA9IGludyhK QVNQRVJfSURFX0JBU0UgKyBJREVfVURNQVRJTSk7CgoJaWYgKHNwZWVkPj1YRkVSX1VETUFf MCAmJiBzcGVlZDw9WEZFUl9VRE1BXzUpIHsKCQlpZihzbGF2ZSAhPSAwKSB7CgkJCXJlZzU0 IHw9IDB4MjsKCQkJcmVnNTggfD0gKHNwZWVkLVhGRVJfVURNQV8wKTw8NDsKCQl9ZWxzZSB7 CgkJCXJlZzU0IHw9IDB4MTsKCQkJcmVnNTggfD0gKHNwZWVkLVhGRVJfVURNQV8wKTsKCQl9 CgoJCWlmIChzcGVlZCA9PSBYRkVSX1VETUFfMCkgewoJCQlvdXRsKDB4MTExMDAwMDkgKyAw eDEwQzAwLCBKQVNQRVJfSURFX0JBU0UgKyBJREVfVURNQVRJTSk7CgkJCW91dGwoNSwgSkFT UEVSX0lERV9CQVNFICsgMHg1Qyk7CgkJfSAKCQkJZWxzZSBpZiAoc3BlZWQgPT0gWEZFUl9V RE1BXzEpCgkJewoJCQlvdXRsKDB4MTExMTBBMDYsIEpBU1BFUl9JREVfQkFTRSArIElERV9V RE1BVElNKTsKCQkJb3V0bCgzLCBKQVNQRVJfSURFX0JBU0UgKyAweDVDKTsKCQl9CgkJCWVs c2UgCgkJewoJCQlvdXRsKDB4MTExMDAwMDQgKyAweDEwODAwLCBKQVNQRVJfSURFX0JBU0Ug KyBJREVfVURNQVRJTSk7CgkJCW91dGwoMiwgSkFTUEVSX0lERV9CQVNFICsgMHg1Qyk7CgkJ fQoJfQoJCWVsc2UKCXsKCQlpZiAoIShzcGVlZCA+PSBYRkVSX01XX0RNQV8wICYmIHNwZWVk IDw9IFhGRVJfTVdfRE1BXzIpKSB7CgkJCWlmIChzbGF2ZSAhPSAwKSB7CgkJCQlyZWc1NCAm PSB+MHgyOwoJCQl9IGVsc2UgewoJCQkJcmVnNTQgJj0gfjB4MTsKCQkJfQoJCX0KCX0KCW91 dGwoMHg4OTAwMDExMCwgSkFTUEVSX0lERV9CQVNFICsgMHg0NCk7CglvdXR3KHJlZzU0LCBK QVNQRVJfSURFX0JBU0UgKyBJREVfVURNQUNUTCk7CglvdXR3KHJlZzU4LCBKQVNQRVJfSURF X0JBU0UgKyBJREVfVURNQVRJTSk7CglyZXR1cm4gMDsgLy9pZGVfY29uZmlnX2RyaXZlX3Nw ZWVkKGRyaXZlLCBzcGVlZCk7Cn0KCnN0YXRpYyB2b2lkIGphc3Blcl9zZXRfZG1hbW9kZSAo c3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCnsKLy8JaW50 IHNsYXZlID0gYWRldi0+ZGV2bm87CglqYXNwZXJfdHVuZV9jaGlwc2V0KDAvKnNsYXZlKi8s IGFkZXYtPmRtYV9tb2RlKTsKfQoKc3RhdGljIHZvaWQgamFzcGVyX3NldF9waW9tb2RlKHN0 cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQp7Ci8vCWludCBz bGF2ZSA9IGFkZXYtPmRldm5vOwoJamFzcGVyX3R1bmVfY2hpcHNldCgwLypzbGF2ZSovLCBh ZGV2LT5waW9fbW9kZSk7Cn0KCi8vIHN0YW5kYXJkIGlzIDIgKCEpCiNkZWZpbmUgSkFTUEVS X0FUQV9ETUFfU1RBVFVTCQk0Ci8vIHN0YW5kYXJkIGlzIDQKI2RlZmluZSBKQVNQRVJfQVRB X0RNQV9UQUJMRV9PRlMJOAoKc3RhdGljIHZvaWQgamFzcGVyX2JtZG1hX3N0YXJ0KHN0cnVj dCBhdGFfcXVldWVkX2NtZCAqcWMpCnsKCV9fYXNtX18oCgkJIm1jcglwMTUsIDAsICUwLCBj NywgYzEwLCAwXG4iCQkvLyB3cml0ZS1iYWNrIGRhdGEgY2FjaGUKCQk6IDogInIiICgwKQoJ KTsKCWF0YV9ibWRtYV9zdGFydChxYyk7Cn0KCnN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3Rl bXBsYXRlIGphc3Blcl9zaHQgPSB7CgkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKCS5uYW1l CQkJPSBEUlZfTkFNRSwKCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCgkucXVldWVjb21t YW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAoJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVF LAoJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAoJLnNnX3RhYmxlc2l6ZQkJPSBMSUJB VEFfRFVNQl9NQVhfUFJELAoJLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4s CgkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKCS51c2VfY2x1c3RlcmluZwkJPSBB VEFfU0hUX1VTRV9DTFVTVEVSSU5HLAoJLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKCS5kbWFf Ym91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFf c2NzaV9zbGF2ZV9jb25maWcsCgkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9k ZXN0cm95LAoJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAp9OwoKc3RhdGlj IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGphc3Blcl9wb3J0X29wcyA9IHsKCS5zZXRf cGlvbW9kZQkJPSBqYXNwZXJfc2V0X3Bpb21vZGUsCgkuc2V0X2RtYW1vZGUJCT0gamFzcGVy X3NldF9kbWFtb2RlLAoKCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAoJLnRmX3JlYWQJCT0g YXRhX3RmX3JlYWQsCgkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCgkuZXhl Y19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCgkuZGV2X3NlbGVjdAkJPSBhdGFfc3Rk X2Rldl9zZWxlY3QsCgoJLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKCS50aGF3CQkJ PSBhdGFfYm1kbWFfdGhhdywKCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9o YW5kbGVyLAoJLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxf Y21kLAoJLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAoKCS5ibWRtYV9zZXR1 cAkJPSBhdGFfYm1kbWFfc2V0dXAsCgoJLmJtZG1hX3N0YXJ0CQk9IGphc3Blcl9ibWRtYV9z dGFydCwKCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAoJLmJtZG1hX3N0YXR1cwkJ PSBhdGFfYm1kbWFfc3RhdHVzLAoKCS5xY19wcmVwCQk9IGF0YV9kdW1iX3FjX3ByZXAsCgku cWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCgkuZGF0YV94ZmVyCQk9IGF0YV9kYXRh X3hmZXIsCgoJLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAoJLmlycV9vbgkJ CT0gYXRhX2lycV9vbiwKCgkucG9ydF9zdGFydAkJPSBhdGFfcG9ydF9zdGFydC8qYXRhX3Nm Zl9wb3J0X3N0YXJ0Ki8sCn07CgpzdGF0aWMgaW50IF9fZGV2aW5pdCBqYXNwZXJfYXRhcGlf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKewoJc3RydWN0IGF0YV9ob3N0 ICpob3N0OwoJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHI7CgoJc3RydWN0IGF0YV9wb3J0 X2luZm8gcGkgPSB7CgkJLnNodAkJPSAmamFzcGVyX3NodCwKCQkuZmxhZ3MJCT0gQVRBX0ZM QUdfU0xBVkVfUE9TUywKCQkucGlvX21hc2sJPSAweDFmLAoJCS5wb3J0X29wcwk9ICZqYXNw ZXJfcG9ydF9vcHMsCiNpZmRlZiBDT05GSUdfSkFTUEVSX0lERV9VRE1BCgkJLm13ZG1hX21h c2sgPSAweDA3LAoJCS51ZG1hX21hc2sgPSAweDA3LAojZW5kaWYKCX07Cgljb25zdCBzdHJ1 Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwaSwgTlVMTCB9OwoKCWludCBjYW5fdWRt YTsKCglpbnQgY2hpcHNldElEID0gX19yYXdfcmVhZGwoSkFTUEVSX1NZU0NUUkxfQkFTRSAr IFNZU0NUUkxfQ0hJUF9JRCk7CgljYW5fdWRtYSA9IGNoaXBzZXRJRCA+IDB4ODUwMDsKCXBy aW50aygiSkFTUEVSIFBBVEEgKElERSkgY2hpcHNldCAleDogVURNQSBpcyAlc3N1cHBvcnRl ZFxuIiwgY2hpcHNldElELCBjYW5fdWRtYSA/ICIiIDogIm5vdCAiKTsKCS8vCWNob29zZSBp ZGUgb3ZlciBkdmQgbG9hZGVyIChEVkRfQVZfQ09OVFJPTCkKCS8vCXdyaXRlIDB4ODAwMCB0 byBJREVUSU0KCglvdXRsKC8qUjEqLyAweGZmZmZmZiAtIDB4ZWYwMDAwLCAvKlIwKi8gSkFT UEVSX1BJTzBfQkFTRSArIFBJT19ESVIpOwoJb3V0bCgvKlIxKi8gMHhmZmZmZmYgLSAweGVm MDAwMCwgLyogUjMgKi8gSkFTUEVSX1BJTzBfQkFTRSArIFBJT19EQVRBKTsKCS8vCWNob29z ZSBpZGUgb3ZlciBkdmQgbG9hZGVyIChEVkRfQVZfQ09OVFJPTCkKCW91dGwoMHgwMCwgSkFT UEVSX0RWRF9CQVNFICsgRFZEX0FWX0NUUkwpOwkvLzB4MDAgc2VsZWN0IElERSBvdmVyIERW RC1sb2FkZXIKCW91dHcoMHgwMCwgSkFTUEVSX0lERV9CQVNFICsgMHgzNCk7CglvdXRsKDB4 ODQwMCsweEYsIEpBU1BFUl9JREVfQkFTRSArIElERV9USU0pOwoKLy8JcHBpWzBdID0gcHBp WzFdID0gJnBpOwoJaG9zdCA9IGF0YV9ob3N0X2FsbG9jX3BpbmZvKCZwZGV2LT5kZXYsIHBw aSwgMSk7CglpZiAoIWhvc3QpCgkJcmV0dXJuIC1FTk9NRU07Cglpb2FkZHIgPSAmaG9zdC0+ cG9ydHNbMF0tPmlvYWRkcjsKCglpb2FkZHItPmNtZF9hZGRyID0gX19pbyhKQVNQRVJfSURF X0JBU0UgKyBJREVfUFJJX0RBVEEpOwoJaW9hZGRyLT5jdGxfYWRkciA9IF9faW8oSkFTUEVS X0lERV9CQVNFICsgSURFX1BSSV9ERVZJQ0VfQ09OVFJPTCk7Cglpb2FkZHItPmFsdHN0YXR1 c19hZGRyID0gX19pbyhKQVNQRVJfSURFX0JBU0UgKyBJREVfUFJJX0RFVklDRV9DT05UUk9M KTsKCWlvYWRkci0+Ym1kbWFfYWRkciA9IF9faW8oSkFTUEVSX0lERV9ETUFfQkFTRSk7CgoJ YXRhX3N0ZF9wb3J0cyhpb2FkZHIpOyAvLyBzZXRzIG90aGVyIHJlZ3MgYmFzZWQgb24gY21k X2FkZHIKCglyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgSURFX0lSUSwgYXRhX2lu dGVycnVwdCwgSVJRRl9TSEFSRUQsCgkJCQkgJmphc3Blcl9zaHQpOwp9CgovKioKICoJamFz cGVyX2F0YXBpX3JlbW92ZQktCXVucGx1ZyBhIGphc3BlciBhdGFwaSBpbnRlcmZhY2UKICoJ QHBkZXY6IHBsYXRmb3JtIGRldmljZQogKgogKglBIGphc3BlciBhdGFwaSBkZXZpY2UgaGFz IGJlZW4gdW5wbHVnZ2VkLiBQZXJmb3JtIHRoZSBuZWVkZWQKICoJY2xlYW51cC4gQWxzbyBj YWxsZWQgb24gbW9kdWxlIHVubG9hZCBmb3IgYW55IGFjdGl2ZSBkZXZpY2VzLgogKi8Kc3Rh dGljIGludCBfX2RldmV4aXQgamFzcGVyX2F0YXBpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQp7CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwoJc3Ry dWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CgoJYXRhX2hvc3Rf ZGV0YWNoKGhvc3QpOwoKLy8JcGVyaXBoZXJhbF9mcmVlX2xpc3QoYXRhcGlfaW9fcG9ydCk7 CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGphc3Blcl9h dGFwaV9kcml2ZXIgPSB7CgkucHJvYmUJCQk9IGphc3Blcl9hdGFwaV9wcm9iZSwKCS5yZW1v dmUJCQk9IF9fZGV2ZXhpdF9wKGphc3Blcl9hdGFwaV9yZW1vdmUpLAoJLmRyaXZlciA9IHsK CQkubmFtZQkJPSBEUlZfTkFNRSwKCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiNpZmRlZiBD T05GSUdfUE0KCQkuc3VzcGVuZAk9IGphc3Blcl9hdGFwaV9zdXNwZW5kLAoJCS5yZXN1bWUJ CT0gamFzcGVyX2F0YXBpX3Jlc3VtZSwKI2VuZGlmCgl9LAp9OwoKc3RhdGljIGludCBfX2lu aXQgamFzcGVyX2F0YXBpX2luaXQodm9pZCkKewoJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9y ZWdpc3RlcigmamFzcGVyX2F0YXBpX2RyaXZlcik7Cn0KCnN0YXRpYyB2b2lkIF9fZXhpdCBq YXNwZXJfYXRhcGlfZXhpdCh2b2lkKQp7CglwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigm amFzcGVyX2F0YXBpX2RyaXZlcik7Cn0KCm1vZHVsZV9pbml0KGphc3Blcl9hdGFwaV9pbml0 KTsKbW9kdWxlX2V4aXQoamFzcGVyX2F0YXBpX2V4aXQpOwoKTU9EVUxFX0FVVEhPUigiQW5v bnltb3VzIik7Ck1PRFVMRV9ERVNDUklQVElPTigiSkFTUEVSIElERSBkcml2ZXIiKTsKTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOwo= ------------2E7E4439E5E6FE--