From owner-freebsd-arm@FreeBSD.ORG Thu Jan 15 13:51:19 2015 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id F235B2BF for ; Thu, 15 Jan 2015 13:51:18 +0000 (UTC) Received: from mail-qa0-x22a.google.com (mail-qa0-x22a.google.com [IPv6:2607:f8b0:400d:c00::22a]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 90D49648 for ; Thu, 15 Jan 2015 13:51:18 +0000 (UTC) Received: by mail-qa0-f42.google.com with SMTP id dc16so11057078qab.1 for ; Thu, 15 Jan 2015 05:51:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=3PBA24Z1pDIZyQlMmqOjzMd75vya31dVmaP2xwgq+Aw=; b=Xy62c99FrD53D/EekFBXaNHitOt2YMxUQngZhNyNpto03cPJym2+p1RtRSTSvN2eDZ N79SEuL+FhWfKUM3n/RtcX0O+Tq5ZDnCoj8eb+TcR/MIHQfCF+20hScUy4T1SPqhAYxF WfsyU9vVYRJvspDmjFuxDTw0GhaXzBm5SK9Q30lzZhNCg+1Qd03kzatFO+BwxG0Yafca Pwob9K+/zzvNFuoUbTfTp4WqZqxRzedbXn11LZKyXxp2eIsFv32dZN8uE86pw4pYoRjp shfZM8SSlIrSAmWJrBv9Vs2FgXLw4BvnbFYAwRXjOeI9ATQhGY7nsVAyM0cAi3F6Orzv Kzsw== MIME-Version: 1.0 X-Received: by 10.140.109.68 with SMTP id k62mr987995qgf.99.1421329877560; Thu, 15 Jan 2015 05:51:17 -0800 (PST) Received: by 10.140.82.180 with HTTP; Thu, 15 Jan 2015 05:51:17 -0800 (PST) Date: Thu, 15 Jan 2015 14:51:17 +0100 Message-ID: Subject: interrupt framework From: Svatopluk Kraus To: freebsd-arm@freebsd.org Content-Type: multipart/mixed; boundary=001a113ad13c76bebd050cb126db X-Content-Filtered-By: Mailman/MimeDel 2.1.18-1 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Jan 2015 13:51:19 -0000 --001a113ad13c76bebd050cb126db Content-Type: text/plain; charset=UTF-8 Hi community, I and Michal Meloun have done some work on ARM interrupt framework and this is the result. We've started with intrng project with Ian's WIP changes, have looked at Andrew's ARM64 git repository, and this is how we think an interrupt framework should look like. We've implemented it with removable interrupt controllers in mind (PCI world). It's not finished from this point of view, however some functions are more complex because of it. It's tested on pandaboard and only GIC is implemented now. There is no problem to implement it to other controllers. We are open to questions and can finish our work considering any comments. Whoever is waiting for ARM interrupt framework as we were, you are welcome to test it. Whoever is welcome. The patches are done against FreeBSD-11-current revision 277210. There are two new files. ARM_INTRNG option must be added to board configuration file for new framework. There are still some things not implemented and some things which should be discussed like PPI support. For example, how to enable PPI interrupt on other CPUs when they are already running? We keep in mind that an interrupt framework should be helpfull but general enough to not dictate interrupt controlles too much. Thus we try to keep some things as much separated as possible. Each interrupt is represented by an interrupt source (ISRC) in the framework. An ISRC is described by an interrupt number which is much more an unique resource handle - totally independent on internal representation of interrupts in any interrupt controller. An interrupt is described by cells in FDT world. The cells can be decoded only by associated interrupt controller and as such, they are transparent for interrupt framework. The framework provides arm_fdt_map_irq() function which maps this transparent cells to an interrupt number. It creates an ISRC, saves cells on it, and once when associated interrupt controller is registered, it provides the ISRC with cells into the controller. It's a controller responsibility to save an ISRC associated with cells. An ISRC is transparent for any controller. However, an controller can set/get its data to/from an ISRC. Further, an controller should set a name to an ISRC according to internal representation of associated interrupt. An controller interrupt dispatch function can call framework only if it has associated ISRC to received interrupt. For legacy reason, there is arm_namespace_map_irq() function. An interrupt is described by namespace type and a number from the namespace. It's intented for use with no FDT drivers. Now, it's used for mapping an IPI on a controller. We think that it's better to call chained controllers (with filter only) without MI interrupt framework overhead, so we implemented shortcut. It could be utilized by INTR_SOLO flag during bus_setup_intr(). Only an interrupt controller can really know its position in interrupt controller's tree. So root controller must claim itself as a root. In FDT world, according to ePAPR approved version 1.1 from 08 April 2011, page 30: "The root of the interrupt tree is determined when traversal of the interrupt tree reaches an interrupt controller node without an interrupts property and thus no explicit interrupt parent." Thus there are no need for any non-standard things in DTS files. Svata --001a113ad13c76bebd050cb126db Content-Type: text/plain; charset=US-ASCII; name="intrng_onwahe1.diff" Content-Disposition: attachment; filename="intrng_onwahe1.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i4y6trgc0 SW5kZXg6IHN5cy9hcm0vYXJtL2dpYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL2dpYy5j CShyZXZpc2lvbiAyNzcyMTApCisrKyBzeXMvYXJtL2FybS9naWMuYwkod29ya2luZyBjb3B5KQpA QCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVl QlNEJCIpOwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCisKICNpbmNsdWRlIDxzeXMvcGFy YW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxzeXMvYnVzLmg+CkBAIC00 MCw2ICs0Miw3IEBACiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9rdHIu aD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2lu Y2x1ZGUgPHN5cy9ybWFuLmg+CiAjaW5jbHVkZSA8c3lzL3BjcHUuaD4KICNpbmNsdWRlIDxzeXMv cHJvYy5oPgpAQCAtNTUsNiArNTgsMTEgQEAKICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4K ICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgogCisjaWZkZWYgQVJNX0lOVFJORwor I2luY2x1ZGUgPHN5cy9zY2hlZC5oPgorI2luY2x1ZGUgInBpY19pZi5oIgorI2VuZGlmCisKIC8q IFdlIGFyZSB1c2luZyBHSUN2MiByZWdpc3RlciBuYW1pbmcgKi8KIAogLyogRGlzdHJpYnV0b3Ig UmVnaXN0ZXJzICovCkBAIC04Myw4ICs5MSw4IEBACiAjZGVmaW5lIEdJQ0NfQUJQUgkJMHgwMDFD CQkJLyogdjEgSUNDQUJQUiAqLwogI2RlZmluZSBHSUNDX0lJRFIJCTB4MDBGQwkJCS8qIHYxIElD Q0lJRFIqLwogCi0jZGVmaW5lCUdJQ19GSVJTVF9JUEkJCSAwCS8qIElycXMgMC0xNSBhcmUgU0dJ cy9JUElzLiAqLwotI2RlZmluZQlHSUNfTEFTVF9JUEkJCTE1CisjZGVmaW5lCUdJQ19GSVJTVF9T R0kJCSAwCS8qIElycXMgMC0xNSBhcmUgU0dJcy9JUElzLiAqLworI2RlZmluZQlHSUNfTEFTVF9T R0kJCTE1CiAjZGVmaW5lCUdJQ19GSVJTVF9QUEkJCTE2CS8qIElycXMgMTYtMzEgYXJlIHByaXZh dGUgKHBlciAqLwogI2RlZmluZQlHSUNfTEFTVF9QUEkJCTMxCS8qIGNvcmUpIHBlcmlwaGVyYWwg aW50ZXJydXB0cy4gKi8KICNkZWZpbmUJR0lDX0ZJUlNUX1NQSQkJMzIJLyogSXJxcyAzMisgYXJl IHNoYXJlZCBwZXJpcGhlcmFscy4gKi8KQEAgLTk4LDggKzEwNiwyMyBAQAogI2RlZmluZSBHSUNE X0lDRkdSX1RSSUdfRURHRQkoMSA8PCAxKQogI2RlZmluZSBHSUNEX0lDRkdSX1RSSUdfTUFTSwkw eDIKIAorI2lmZGVmIEFSTV9JTlRSTkcKKyNkZWZpbmUgR0lDX0lOVFJOQU1FX0xFTgkzMgorCitz dHJ1Y3QgYXJtX2dpY19pcnEgeworCXN0cnVjdCBhcm1faXJxc3JjICoJZ2lfaXNyYzsKKwljaGFy CQkJZ2lfbmFtZVtHSUNfSU5UUk5BTUVfTEVOXTsKK307CisKK3N0YXRpYyBpbnQgYXJtX2dpY19p bnRyKHZvaWQgKiwgc3RydWN0IHRyYXBmcmFtZSAqKTsKKyNlbmRpZgorCiBzdHJ1Y3QgYXJtX2dp Y19zb2Z0YyB7CiAJZGV2aWNlX3QJCWdpY19kZXY7CisjaWZkZWYgQVJNX0lOVFJORworCXZvaWQg KgkJCWdpY19pbnRyaGFuZDsKKwlzdHJ1Y3QgYXJtX2dpY19pcnEgKglnaWNfaXJxczsKKyNlbmRp ZgogCXN0cnVjdCByZXNvdXJjZSAqCWdpY19yZXNbM107CiAJYnVzX3NwYWNlX3RhZ190CQlnaWNf Y19ic3Q7CiAJYnVzX3NwYWNlX3RhZ190CQlnaWNfZF9ic3Q7CkBAIC0xMTMsMTAgKzEzNiwxMyBA QAogc3RhdGljIHN0cnVjdCByZXNvdXJjZV9zcGVjIGFybV9naWNfc3BlY1tdID0gewogCXsgU1lT X1JFU19NRU1PUlksCTAsCVJGX0FDVElWRSB9LAkvKiBEaXN0cmlidXRvciByZWdpc3RlcnMgKi8K IAl7IFNZU19SRVNfTUVNT1JZLAkxLAlSRl9BQ1RJVkUgfSwJLyogQ1BVIEludGVycnVwdCBJbnRm LiByZWdpc3RlcnMgKi8KKyNpZmRlZiBBUk1fSU5UUk5HCisJeyBTWVNfUkVTX0lSUSwJICAwLCBS Rl9BQ1RJVkUgfCBSRl9PUFRJT05BTCB9LCAvKiBQYXJlbnQgaW50ZXJydXB0ICovCisjZW5kaWYK IAl7IC0xLCAwIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqYXJtX2dpY19z YyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGFybV9naWNfc29mdGMgKmdpY19zYyA9IE5VTEw7CiAK ICNkZWZpbmUJZ2ljX2NfcmVhZF80KF9zYywgX3JlZykJCVwKICAgICBidXNfc3BhY2VfcmVhZF80 KChfc2MpLT5naWNfY19ic3QsIChfc2MpLT5naWNfY19ic2gsIChfcmVnKSkKQEAgLTEyNyw5ICsx NTMsMTEgQEAKICNkZWZpbmUJZ2ljX2Rfd3JpdGVfNChfc2MsIF9yZWcsIF92YWwpCQlcCiAgICAg YnVzX3NwYWNlX3dyaXRlXzQoKF9zYyktPmdpY19kX2JzdCwgKF9zYyktPmdpY19kX2JzaCwgKF9y ZWcpLCAoX3ZhbCkpCiAKKyNpZm5kZWYgQVJNX0lOVFJORwogc3RhdGljIGludCBnaWNfY29uZmln X2lycShpbnQgaXJxLCBlbnVtIGludHJfdHJpZ2dlciB0cmlnLAogICAgIGVudW0gaW50cl9wb2xh cml0eSBwb2wpOwogc3RhdGljIHZvaWQgZ2ljX3Bvc3RfZmlsdGVyKHZvaWQgKik7CisjZW5kaWYK IAogc3RhdGljIHN0cnVjdCBvZndfY29tcGF0X2RhdGEgY29tcGF0X2RhdGFbXSA9IHsKIAl7ImFy bSxnaWMiLAkJdHJ1ZX0sCS8qIE5vbi1zdGFuZGFyZCwgdXNlZCBpbiBGcmVlQlNEIGR0cy4gKi8K QEAgLTE1NSwxMCArMTgzLDU4IEBACiAJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7CiB9CiAK KyNpZmRlZiBBUk1fSU5UUk5HCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpY19pcnFfdW5tYXNrKHN0 cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgdV9pbnQgaXJxKQoreworCisJZ2ljX2Rfd3JpdGVfNChz YywgR0lDRF9JU0VOQUJMRVIoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEgJiAweDFGKSkpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2dpY19pcnFfbWFzayhzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAq c2MsIHVfaW50IGlycSkKK3sKKworCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSUNFTkFCTEVSKGly cSA+PiA1KSwgKDFVTCA8PCAoaXJxICYgMHgxRikpKTsKK30KKyNlbmRpZgorCisjaWZkZWYgU01Q CisjaWZkZWYgQVJNX0lOVFJORwogc3RhdGljIHZvaWQKIGFybV9naWNfaW5pdF9zZWNvbmRhcnko ZGV2aWNlX3QgZGV2KQogewogCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRf c29mdGMoZGV2KTsKKwl1X2ludCBpcnE7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IHNjLT5uaXJx czsgaXJxICs9IDQpCisJCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSVBSSU9SSVRZUihpcnEgPj4g MiksIDApOworCisJLyogU2V0IGFsbCB0aGUgaW50ZXJydXB0cyB0byBiZSBpbiBHcm91cCAwIChz ZWN1cmUpICovCisJZm9yIChpcnEgPSAwOyBpcnEgPCBzYy0+bmlycXM7IGlycSArPSAzMikgewor CQlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0lHUk9VUFIoaXJxID4+IDUpLCAwKTsKKwl9CisKKwkv KiBFbmFibGUgQ1BVIGludGVyZmFjZSAqLworCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfQ1RMUiwg MSk7CisKKwkvKiBTZXQgcHJpb3JpdHkgbWFzayByZWdpc3Rlci4gKi8KKwlnaWNfY193cml0ZV80 KHNjLCBHSUNDX1BNUiwgMHhmZik7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0IGRpc3RyaWJ1dGlv biAqLworCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfQ1RMUiwgMHgwMSk7CisKKwkvKiBVbm1hc2sg YXR0YWNoZWQgUFBJIGludGVycnVwdHMuICovCisJZm9yIChpcnEgPSBHSUNfRklSU1RfUFBJOyBp cnEgPD0gR0lDX0xBU1RfUFBJOyBpcnErKykgeworCQlpZiAoc2MtPmdpY19pcnFzW2lycV0uZ2lf aXNyYyAhPSBOVUxMKQorCQkJZ2ljX2lycV91bm1hc2soc2MsIGlycSk7CisJfQorfQorI2Vsc2UK K3N0YXRpYyB2b2lkCithcm1fZ2ljX2luaXRfc2Vjb25kYXJ5KGRldmljZV90IGRldikKK3sKKwlz dHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAJaW50IGk7 CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2MtPm5pcnFzOyBpICs9IDQpCkBAIC0xODUsNyArMjYxLDEw IEBACiAJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JU0VOQUJMRVIoMjkgPj4gNSksICgxVUwgPDwg KDI5ICYgMHgxRikpKTsKIAlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0lTRU5BQkxFUigzMCA+PiA1 KSwgKDFVTCA8PCAoMzAgJiAweDFGKSkpOwogfQorI2VuZGlmIC8qIEFSTV9JTlRSTkcgKi8KKyNl bmRpZiAvKiBTTVAgKi8KIAorI2lmbmRlZiBBUk1fSU5UUk5HCiBpbnQKIGdpY19kZWNvZGVfZmR0 KHVpbnQzMl90IGlwYXJlbnQsIHVpbnQzMl90ICppbnRyLCBpbnQgKmludGVycnVwdCwKICAgICBp bnQgKnRyaWcsIGludCAqcG9sKQpAQCAtMjMwLDYgKzMwOSw3IEBACiAJfQogCXJldHVybiAoMCk7 CiB9CisjZW5kaWYKIAogc3RhdGljIGludAogYXJtX2dpY19hdHRhY2goZGV2aWNlX3QgZGV2KQpA QCAtMjM4LDcgKzMxOCw3IEBACiAJaW50CQlpOwogCXVpbnQzMl90CWljY2lpZHI7CiAKLQlpZiAo YXJtX2dpY19zYykKKwlpZiAoZ2ljX3NjKQogCQlyZXR1cm4gKEVOWElPKTsKIAogCXNjID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOwpAQCAtMjQ5LDcgKzMyOSw3IEBACiAJfQogCiAJc2MtPmdpY19k ZXYgPSBkZXY7Ci0JYXJtX2dpY19zYyA9IHNjOworCWdpY19zYyA9IHNjOwogCiAJLyogSW5pdGlh bGl6ZSBtdXRleCAqLwogCW10eF9pbml0KCZzYy0+bXV0ZXgsICJHSUMgbG9jayIsICIiLCBNVFhf U1BJTik7CkBAIC0yNjksOSArMzQ5LDE0IEBACiAJc2MtPm5pcnFzID0gZ2ljX2RfcmVhZF80KHNj LCBHSUNEX1RZUEVSKTsKIAlzYy0+bmlycXMgPSAzMiAqICgoc2MtPm5pcnFzICYgMHgxZikgKyAx KTsKIAorI2lmZGVmIEFSTV9JTlRSTkcKKwlzYy0+Z2ljX2lycXMgPSBtYWxsb2Moc2MtPm5pcnFz ICogc2l6ZW9mICgqc2MtPmdpY19pcnFzKSwgTV9ERVZCVUYsCisJICAgIE1fV0FJVE9LIHwgTV9a RVJPKTsKKyNlbHNlCiAJLyogU2V0IHVwIGZ1bmN0aW9uIHBvaW50ZXJzICovCiAJYXJtX3Bvc3Rf ZmlsdGVyID0gZ2ljX3Bvc3RfZmlsdGVyOwogCWFybV9jb25maWdfaXJxID0gZ2ljX2NvbmZpZ19p cnE7CisjZW5kaWYKIAogCWljY2lpZHIgPSBnaWNfY19yZWFkXzQoc2MsIEdJQ0NfSUlEUik7CiAJ ZGV2aWNlX3ByaW50ZihkZXYsInBuIDB4JXgsIGFyY2ggMHgleCwgcmV2IDB4JXgsIGltcGxlbWVu dGVyIDB4JXggaXJxcyAldVxuIiwKQEAgLTMwNywxMSArMzkyLDQyOSBAQAogCiAJLyogRW5hYmxl IGludGVycnVwdCBkaXN0cmlidXRpb24gKi8KIAlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0NUTFIs IDB4MDEpOworI2lmbmRlZiBBUk1fSU5UUk5HCisJcmV0dXJuICgwKTsKKyNlbHNlCisJLyoKKwkg KiBOb3csIHdoZW4gZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgaXQncyByaWdodCB0aW1lIHRv CisJICogcmVnaXN0ZXIgaW50ZXJydXB0IGNvbnRyb2xsZXIgdG8gaW50ZXJydXB0IGZyYW1lZm9y ay4KKwkgKi8KKwlpZiAoYXJtX3JlZ2lzdGVyX3BpYyhkZXYpICE9IDApIHsKKwkJZGV2aWNlX3By aW50ZihkZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgSUNcbiIpOworCQlnb3RvIGNsZWFudXA7CisJ fQogCisJaWYgKHNjLT5naWNfcmVzWzJdID09IE5VTEwpIHsKKwkJaWYgKGFybV9pcnFfc2V0X3Jv b3QoZGV2LCBhcm1fZ2ljX2ludHIsIHNjLAorCQkgICAgR0lDX0xBU1RfU0dJIC0gR0lDX0ZJUlNU X1NHSSArIDEpICE9IDApIHsKKwkJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IHNldCBQ SUMgYXMgYSByb290XG4iKTsKKwkJCWFybV91bnJlZ2lzdGVyX3BpYyhkZXYpOworCQkJZ290byBj bGVhbnVwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPmdp Y19yZXNbMl0sIElOVFJfVFlQRV9NSVNDIHwKKwkJICAgIElOVFJfU09MTywgKHZvaWQqKWFybV9n aWNfaW50ciwgTlVMTCwgc2MsCisJCSAgICAmc2MtPmdpY19pbnRyaGFuZCkpIHsKKwkJCWRldmlj ZV9wcmludGYoZGV2LCAiY291bGQgbm90IHNldHVwIGlycSBoYW5kbGVyXG4iKTsKKwkJCWFybV91 bnJlZ2lzdGVyX3BpYyhkZXYpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCiAJcmV0dXJu ICgwKTsKKworY2xlYW51cDoKKwkvKgorCSAqIFhYWCAtIG5vdCBpbXBsZW1lbnRlZCBhcm1fZ2lj X2RldGFjaCgpIHNob3VsZCBiZSBjYWxsZWQgIQorCSAqLworCWlmIChzYy0+Z2ljX2lycXMgIT0g TlVMTCkKKwkJZnJlZShzYy0+Z2ljX2lycXMsIE1fREVWQlVGKTsKKwlidXNfcmVsZWFzZV9yZXNv dXJjZXMoZGV2LCBhcm1fZ2ljX3NwZWMsIHNjLT5naWNfcmVzKTsKKwlyZXR1cm4oRU5YSU8pOwor I2VuZGlmCiB9CiAKKyNpZmRlZiBBUk1fSU5UUk5HCiBzdGF0aWMgaW50Cithcm1fZ2ljX2ludHIo dm9pZCAqYXJnLCBzdHJ1Y3QgdHJhcGZyYW1lICp0ZikKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0 YyAqc2MgPSAoc3RydWN0IGFybV9naWNfc29mdGMgKilhcmc7CisJc3RydWN0IGFybV9naWNfaXJx ICpnaTsKKwl1aW50MzJfdCBpcnFfYWN0aXZlX3JlZywgaXJxOworCisJaXJxX2FjdGl2ZV9yZWcg PSBnaWNfY19yZWFkXzQoc2MsIEdJQ0NfSUFSKTsKKwlpcnEgPSBpcnFfYWN0aXZlX3JlZyAmIDB4 M0ZGOworCisJLyoKKwkgKiAxLiBFT0kgbXVzdCBiZSBkb25lIGhlcmUgYXMgdGhlIG90aGVyIGJp dHMgKGkuZS4gQ1BVIG51bWJlciksIG5vdAorCSAqICAgIGp1c3QgdGhlIElSUSBudW1iZXIgYXJl IHJlcXVpcmVkLCBhbmQgd2UgZG8gbm90IGhhdmUgYSBtZXRob2QKKwkgKiAgICBob3cgdG8gcGFz cyB0aGlzIGluZm9ybWF0aW9uIHRvIGRpc3BhdGNoIGZ1bmN0aW9uLgorCSAqIDIuIEVPSSBtdXN0 IGJlIGRvbmUgb24gc2FtZSBDUFUsIHdoZXJlIGludGVycnVwdCBoYXMgZmlyZWQuIFRodXMKKwkg KiAgICB3ZSBtdXN0IGVuc3VyZSB0aGF0IGludGVycnVwdGVkIHRocmVhZCBkb2VzIG5vdCBtaWdy YXRlIHRvCisJICogICAgYW5vdGhlciBDUFUuCisJICogMy4gRU9JIGNhbm5vdCBiZSBkZWxheWVk IGJ5IGFueSBwcmVlbXB0aW9uLCB3aGljaCBjb3VsZCBoYXBwZW4gb24KKwkgKiAgICBjcml0aWNh bF9leGl0KCkgdXNlZCBpbiBNSSBpbnRyIGNvZGUsIHdoZW4gaW50ZXJydXB0IHRocmVhZCBpcwor CSAqICAgIHNjaGVkdWxlZC4gU2VlIG5leHQgcG9pbnQuCisJICogNC4gSVBJX1JFTkRFWlZPVVMg YXNzdW1lcyB0aGF0IG5vIHByZWVtcHRpb24gaXMgcGVybWl0dGVkIGR1cmluZworCSAqICAgIGFu IGFjdGlvbiBhbmQgYW55IHVzZSBvZiBjcml0aWNhbF9leGl0KCkgY291bGQgYnJlYWsgdGhpcwor CSAqICAgIGFzc3VtcHRpb24uIFNlZSBjb21tZW50cyB3aXRoaW4gc21wX3JlbmRlenZvdXNfYWN0 aW9uKCkuCisJICovCisKKwlpZiAoaXJxID49IHNjLT5uaXJxcykgeworCQlkZXZpY2VfcHJpbnRm KHNjLT5naWNfZGV2LCAiU3B1cmlvdXMgaW50ZXJydXB0IGRldGVjdGVkXG4iKTsKKwkJZ2ljX2Nf d3JpdGVfNChzYywgR0lDQ19FT0lSLCBpcnFfYWN0aXZlX3JlZyk7CisJCXJldHVybiAoMCk7CisJ fQorCisJZ2kgPSAmc2MtPmdpY19pcnFzW2lycV07CisJaWYgKGdpLT5naV9pc3JjID09IE5VTEwp IHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+Z2ljX2RldiwgIlN0cmF5IGludGVycnVwdCAldSBkZXRl Y3RlZFxuIiwgaXJxKTsKKwkJZ2ljX2lycV9tYXNrKHNjLCBpcnEpOworCQlnaWNfY193cml0ZV80 KHNjLCBHSUNDX0VPSVIsIGlycV9hY3RpdmVfcmVnKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkv KgorCSAqIE5vdGUgdGhhdCBHSUNfRklSU1RfU0dJIGlzIHplcm8gYW5kIGlzIG5vdCB1c2VkIGlu ICdpZicgc3RhdGVtZW50CisJICogYXMgY29tcGlsZXIgY29tcGxhaW5zIHRoYXQgY29tcGFyaW5n IHVfaW50ID49IDAgaXMgYWx3YXlzIHRydWUuCisJICovCisJaWYgKGlycSA8PSBHSUNfTEFTVF9T R0kpIHsKKyNpZmRlZiBTTVAKKwkJLyogQ2FsbCBFT0kgZm9yIGFsbCBJUEkgYmVmb3JlIGRpc3Bh dGNoLiAqLworCQlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3RpdmVfcmVnKTsK KwkJYXJtX2Rpc3BhdGNoX3NnaShnaS0+Z2lfaXNyYywgdGYpOworCQlyZXR1cm4gKEZJTFRFUl9I QU5ETEVEKTsKKyNlbHNlCisJCXByaW50ZigiU0dJICV1IG9uIFVQIHN5c3RlbSBkZXRlY3RlZFxu IiwgaXJxIC0gR0lDX0ZJUlNUX1NHSSk7CisJCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwg aXJxX2FjdGl2ZV9yZWcpOworCQlyZXR1cm4gKDApOworI2VuZGlmCisJfQorCisJY3JpdGljYWxf ZW50ZXIoKTsKKwlpZiAoaXJxIDw9IEdJQ19MQVNUX1BQSSkKKwkJYXJtX2Rpc3BhdGNoX3BwaShn aS0+Z2lfaXNyYywgdGYpOworCWVsc2UKKwkJYXJtX2Rpc3BhdGNoX3NwaShnaS0+Z2lfaXNyYywg dGYpOworCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxX2FjdGl2ZV9yZWcpOworCWNy aXRpY2FsX2V4aXQoKTsKKwlhcm1faXJxX21lbW9yeV9iYXJyaWVyKGlycSk7CisJcmV0dXJuIChG SUxURVJfSEFORExFRCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY19uYW1lc3BhY2VfdG9faXJxKHN0 cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgdV9pbnQgdHlwZSwgdV9pbnQgbnVtLAorICAgIHVfaW50 ICppcnFwKQoreworCXVfaW50IGlycTsKKworCWlmICh0eXBlID09IElTUkNUX1NHSSkKKwkJaXJx ID0gR0lDX0ZJUlNUX1NHSSArIG51bTsKKwllbHNlIGlmICh0eXBlID09IElTUkNUX1BQSSkKKwkJ aXJxID0gR0lDX0ZJUlNUX1BQSSArIG51bTsKKwllbHNlIGlmICh0eXBlID09IElTUkNUX1NQSSkK KwkJaXJxID0gR0lDX0ZJUlNUX1NQSSArIG51bTsKKwllbHNlCisJCXJldHVybiAoRUlOVkFMKTsK KworCWlmIChpcnEgPj0gc2MtPm5pcnFzKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkqaXJxcCA9 IGlycTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitnaWNfaXJxX3RvX25hbWVzcGFj ZShzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHVfaW50IGlycSwgdV9pbnQgKnR5cGVwLAordV9p bnQgKm51bXApCit7CisKKwlpZiAoaXJxIDw9IEdJQ19MQVNUX1NHSSkgeworCQkqdHlwZXAgPSBJ U1JDVF9TR0k7CisJCSpudW1wID0gaXJxIC0gR0lDX0ZJUlNUX1NHSTsKKwl9IGVsc2UgaWYgKGly cSA8PSBHSUNfTEFTVF9QUEkpIHsKKwkJKnR5cGVwID0gSVNSQ1RfUFBJOworCQkqbnVtcCA9IGly cSAtIEdJQ19GSVJTVF9QUEk7CisJfSBlbHNlIGlmIChpcnEgPCBzYy0+bmlycXMpIHsKKwkJKnR5 cGVwID0gSVNSQ1RfU1BJOworCQkqbnVtcCA9IGlycSAtIEdJQ19GSVJTVF9TUEk7CisJfSBlbHNl CisJCXJldHVybiAoRUlOVkFMKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dp Y19hdHRhY2hfaXNyYyhzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHN0cnVjdCBhcm1faXJxc3Jj ICppc3JjLCB1X2ludCBpcnEpCit7CisJc3RydWN0IGFybV9naWNfaXJxICpnaSA9ICZzYy0+Z2lj X2lycXNbaXJxXTsKKworCWlmIChnaS0+Z2lfaXNyYyA9PSBpc3JjKQorCQlyZXR1cm4gKDApOwor CisJaWYgKGdpLT5naV9pc3JjICE9IE5VTEwpCisJCXJldHVybiAoRUVYSVNUKTsKKworCWlmIChp cnEgPD0gR0lDX0xBU1RfU0dJKQorCQlzbnByaW50ZihnaS0+Z2lfbmFtZSwgR0lDX0lOVFJOQU1F X0xFTiwgIiVzKHNnaSV1KSIsCisJCSAgICBkZXZpY2VfZ2V0X25hbWV1bml0KHNjLT5naWNfZGV2 KSwgaXJxIC0gR0lDX0ZJUlNUX1NHSSk7CisJZWxzZSBpZiAoaXJxIDw9IEdJQ19MQVNUX1BQSSkK KwkJc25wcmludGYoZ2ktPmdpX25hbWUsIEdJQ19JTlRSTkFNRV9MRU4sICIlcyhwcGkldSkiLAor CQkgICAgZGV2aWNlX2dldF9uYW1ldW5pdChzYy0+Z2ljX2RldiksIGlycSAtIEdJQ19GSVJTVF9Q UEkpOworCWVsc2UKKwkJc25wcmludGYoZ2ktPmdpX25hbWUsIEdJQ19JTlRSTkFNRV9MRU4sICIl cyhzcGkldSkiLAorCQkgICAgZGV2aWNlX2dldF9uYW1ldW5pdChzYy0+Z2ljX2RldiksIGlycSAt IEdJQ19GSVJTVF9TUEkpOworCisJYXJtX2lycV9zZXRfZGF0YShpc3JjLCAodm9pZCAqKWlycSk7 CisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCBnaS0+Z2lfbmFtZSk7CisKKwlnaS0+Z2lfaXNyYyA9 IGlzcmM7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX2RldGFjaF9pc3JjKHN0 cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsIHVfaW50IGly cSkKK3sKKwlzdHJ1Y3QgYXJtX2dpY19pcnEgKmdpID0gJnNjLT5naWNfaXJxc1tpcnFdOworCisJ aWYgKGlycSA+PSBzYy0+bmlycXMgfHwgZ2ktPmdpX2lzcmMgIT0gaXNyYykKKwkJcmV0dXJuIChF SU5WQUwpOworCisJYXJtX2lycV9zZXRfZGF0YShpc3JjLCBOVUxMKTsKKwlhcm1faXJxX3NldF9u YW1lKGlzcmMsIE5VTEwpOworCisJZ2ktPmdpX2lzcmMgPSBOVUxMOworCXJldHVybiAoMCk7Cit9 CisKK3N0YXRpYyBpbnQKK2FybV9naWNfbWFwKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFz cmMgKmlzcmMsIHVfaW50IHR5cGUsIHVfaW50IG51bSkKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0 YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxOworCWludCBlcnJvcjsK KworCWVycm9yID0gZ2ljX25hbWVzcGFjZV90b19pcnEoc2MsIHR5cGUsIG51bSwgJmlycSk7CisJ aWYgKGVycm9yICE9IDApCisJCXJldHVybiAoZXJyb3IpOworCisJcmV0dXJuIChnaWNfYXR0YWNo X2lzcmMoc2MsIGlzcmMsIGlycSkpOworfQorCitzdGF0aWMgdm9pZAorZ2ljX2NvbmZpZyhzdHJ1 Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHVfaW50IGlycSwgZW51bSBpbnRyX3RyaWdnZXIgdHJpZywK KyAgICBlbnVtIGludHJfcG9sYXJpdHkgcG9sKQoreworCXVpbnQzMl90IHJlZzsKKwl1aW50MzJf dCBtYXNrOworCisJaWYgKGlycSA8IEdJQ19GSVJTVF9TUEkpCisJCXJldHVybjsKKworCW10eF9s b2NrX3NwaW4oJnNjLT5tdXRleCk7CisKKwlyZWcgPSBnaWNfZF9yZWFkXzQoc2MsIEdJQ0RfSUNG R1IoaXJxID4+IDQpKTsKKwltYXNrID0gKHJlZyA+PiAyKihpcnEgJSAxNikpICYgMHgzOworCisJ aWYgKHBvbCA9PSBJTlRSX1BPTEFSSVRZX0xPVykgeworCQltYXNrICY9IH5HSUNEX0lDRkdSX1BP TF9NQVNLOworCQltYXNrIHw9IEdJQ0RfSUNGR1JfUE9MX0xPVzsKKwl9IGVsc2UgaWYgKHBvbCA9 PSBJTlRSX1BPTEFSSVRZX0hJR0gpIHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9QT0xfTUFTSzsK KwkJbWFzayB8PSBHSUNEX0lDRkdSX1BPTF9ISUdIOworCX0KKworCWlmICh0cmlnID09IElOVFJf VFJJR0dFUl9MRVZFTCkgeworCQltYXNrICY9IH5HSUNEX0lDRkdSX1RSSUdfTUFTSzsKKwkJbWFz ayB8PSBHSUNEX0lDRkdSX1RSSUdfTFZMOworCX0gZWxzZSBpZiAodHJpZyA9PSBJTlRSX1RSSUdH RVJfRURHRSkgeworCQltYXNrICY9IH5HSUNEX0lDRkdSX1RSSUdfTUFTSzsKKwkJbWFzayB8PSBH SUNEX0lDRkdSX1RSSUdfRURHRTsKKwl9CisKKwkvKiBTZXQgbWFzayAqLworCXJlZyA9IHJlZyAm IH4oMHgzIDw8IDIqKGlycSAlIDE2KSk7CisJcmVnID0gcmVnIHwgKG1hc2sgPDwgMiooaXJxICUg MTYpKTsKKwlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0lDRkdSKGlycSA+PiA0KSwgcmVnKTsKKwor CW10eF91bmxvY2tfc3Bpbigmc2MtPm11dGV4KTsKK30KKworI2lmZGVmIEZEVAorc3RhdGljIGlu dAorYXJtX2dpY19tYXBfZmR0KGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMs IHBjZWxsX3QgKmNlbGxzLAorICAgIHVfaW50IG5jZWxscykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19z b2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxLCB0eXBlLCBudW0s IHRyaXBvbDsKKwllbnVtIGludHJfdHJpZ2dlciB0cmlnOworCWVudW0gaW50cl9wb2xhcml0eSBw b2w7CisJaW50IGVycm9yOworCisJaWYgKG5jZWxscyA9PSAxKSB7CisJCWlycSA9IGNlbGxzWzBd OworCisJCWVycm9yID0gZ2ljX2lycV90b19uYW1lc3BhY2Uoc2MsIGlycSwgJnR5cGUsICZudW0p OworCQlpZiAoZXJyb3IgIT0gMCkKKwkJCXJldHVybiAoZXJyb3IpOworCisJCXBvbCA9IElOVFJf UE9MQVJJVFlfQ09ORk9STTsKKwkJdHJpZyA9IElOVFJfVFJJR0dFUl9DT05GT1JNOworCX0gZWxz ZSB7CisKKwkJdHlwZSA9IGNlbGxzWzBdID09IDAgPyBJU1JDVF9TUEkgOiBJU1JDVF9QUEk7CisJ CW51bSA9IGNlbGxzWzFdOworCisJCWVycm9yID0gZ2ljX25hbWVzcGFjZV90b19pcnEoc2MsIHR5 cGUsIG51bSwgJmlycSk7CisJCWlmIChlcnJvciAhPSAwKQorCQkJcmV0dXJuIChlcnJvcik7CisK KwkJLyoKKwkJICogSW4gaW50clsyXSwgYml0c1szOjBdIGFyZSB0cmlnZ2VyIHR5cGUgYW5kIGxl dmVsIGZsYWdzLgorCQkgKiAgIDEgPSBsb3ctdG8taGlnaCBlZGdlIHRyaWdnZXJlZAorCQkgKiAg IDIgPSBoaWdoLXRvLWxvdyBlZGdlIHRyaWdnZXJlZAorCQkgKiAgIDQgPSBhY3RpdmUgaGlnaCBs ZXZlbC1zZW5zaXRpdmUKKwkJICogICA4ID0gYWN0aXZlIGxvdyBsZXZlbC1zZW5zaXRpdmUKKwkJ ICogVGhlIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMgYWN0aXZlLWhpZ2gtbGV2ZWwgb3IgcmlzaW5n LWVkZ2UuCisJCSAqLworCQl0cmlwb2wgPSBjZWxsc1syXTsKKwkJaWYgKHRyaXBvbCAmIDB4MGEp IHsKKwkJCXByaW50ZigidW5zdXBwb3J0ZWQgdHJpZ2dlci9wb2xhcml0eSBjb25maWd1cmF0aW9u ICIKKwkJCSAgICAiMHglMnhcbiIsIHRyaXBvbCAmIDB4MGYpOworCQkJcmV0dXJuIChFTk9UU1VQ KTsKKwkJfQorCQlwb2wgID0gSU5UUl9QT0xBUklUWV9DT05GT1JNOworCQlpZiAodHJpcG9sICYg MHgwMSkKKwkJCXRyaWcgPSBJTlRSX1RSSUdHRVJfRURHRTsKKwkJZWxzZQorCQkJdHJpZyA9IElO VFJfVFJJR0dFUl9MRVZFTDsKKwl9CisKKwllcnJvciA9IGdpY19hdHRhY2hfaXNyYyhzYywgaXNy YywgaXJxKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlhcm1faXJx X3NldF9uYW1lc3BhY2UoaXNyYywgdHlwZSwgbnVtKTsKKworCWdpY19jb25maWcoc2MsIGlycSwg dHJpZywgcG9sKTsKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2FybV9n aWNfdW5tYXAoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1 Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJx OworCisJaXJxID0gKHVfaW50KWFybV9pcnFfZ2V0X2RhdGEoaXNyYyk7CisJcmV0dXJuIChnaWNf ZGV0YWNoX2lzcmMoc2MsIGlzcmMsIGlycSkpOworfQorCitzdGF0aWMgaW50Cithcm1fZ2ljX2Jp bmQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY3B1c2V0X3QgY3B1bWFz aykKK3sKKworCXJldHVybiAoRU9QTk9UU1VQUCk7IC8qIGZvciBub3cgKi8KK30KKworc3RhdGlj IGludAorYXJtX2dpY19jb25maWcoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNy YywgZW51bSBpbnRyX3RyaWdnZXIgdHJpZywKKyAgICBlbnVtIGludHJfcG9sYXJpdHkgcG9sKQor eworCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1 X2ludCBpcnE7CisKKwkvKiBYWFggbW92ZSB0aGVzZSBjaGVja3MgdG8gZnJhbWV3b3JrICovCisJ aWYgKCh0cmlnICE9IElOVFJfVFJJR0dFUl9FREdFKSAmJiAodHJpZyAhPSBJTlRSX1RSSUdHRVJf TEVWRUwpICYmCisJICAgICh0cmlnICE9IElOVFJfVFJJR0dFUl9DT05GT1JNKSkKKwkJcmV0dXJu IChFSU5WQUwpOworCWlmICgocG9sICE9IElOVFJfUE9MQVJJVFlfSElHSCkgJiYgKHBvbCAhPSBJ TlRSX1BPTEFSSVRZX0xPVykgJiYKKwkgICAgKHBvbCAhPSBJTlRSX1BPTEFSSVRZX0NPTkZPUk0p KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpcnEgPSAodV9pbnQpYXJtX2lycV9nZXRfZGF0YShp c3JjKTsKKwlpZiAoaXJxID49IHNjLT5uaXJxcyB8fCBzYy0+Z2ljX2lycXNbaXJxXS5naV9pc3Jj ICE9IGlzcmMpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWdpY19jb25maWcoc2MsIGlycSwgdHJp ZywgcG9sKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorYXJtX2dpY19lbmFibGUo ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJtX2dp Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxOworCisJaXJx ID0gKHVfaW50KWFybV9pcnFfZ2V0X2RhdGEoaXNyYyk7CisJaWYgKGlycSA+PSBzYy0+bmlycXMg fHwgc2MtPmdpY19pcnFzW2lycV0uZ2lfaXNyYyAhPSBpc3JjKQorCQlyZXR1cm47CisKKwlpZiAo aXJxIDw9IEdJQ19MQVNUX1NHSSkKKwkJcmV0dXJuOyAvKiB2MiBJTVBMRU1FTlRBVElPTiBERUZJ TkVEICovCisKKwlhcm1faXJxX21lbW9yeV9iYXJyaWVyKGlycSk7CisJZ2ljX2lycV91bm1hc2so c2MsIGlycSk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1fZ2ljX2Rpc2FibGUoZGV2aWNlX3QgZGV2 LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2Mg PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxOworCisJaXJxID0gKHVfaW50KWFy bV9pcnFfZ2V0X2RhdGEoaXNyYyk7CisJaWYgKGlycSA+PSBzYy0+bmlycXMgfHwgc2MtPmdpY19p cnFzW2lycV0uZ2lfaXNyYyAhPSBpc3JjKQorCQlyZXR1cm47CisKKwlpZiAoaXJxIDw9IEdJQ19M QVNUX1NHSSkKKwkJcmV0dXJuOyAvKiB2MiBJTVBMRU1FTlRBVElPTiBERUZJTkVEICovCisKKwln aWNfaXJxX21hc2soc2MsIGlycSk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1fZ2ljX3ByZV9pdGhy ZWFkKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisKKwlhcm1fZ2lj X2Rpc2FibGUoZGV2LCBpc3JjKTsKK30KKworc3RhdGljIHZvaWQKK2FybV9naWNfcG9zdF9pdGhy ZWFkKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisKKwlhcm1fZ2lj X2VuYWJsZShkZXYsIGlzcmMpOworfQorCitzdGF0aWMgdm9pZAorYXJtX2dpY19wb3N0X2ZpbHRl cihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCisJLyogRU9JIG11 c3QgYmUgZG9uZSBpbiBjb250cm9sbGVyJ3MgaW50ZXJydXB0IHJvdXRpbmUuICovCit9CisKKyNp ZmRlZiBTTVAKK3N0YXRpYyB2b2lkCithcm1fZ2ljX2lwaV9zZW5kKGRldmljZV90IGRldiwgc3Ry dWN0IGFybV9pcnFzcmMgKmlzcmMsIGNwdXNldF90IGNwdXMpCit7CisJc3RydWN0IGFybV9naWNf c29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVpbnQzMl90IGlycSwgdmFsID0g MCwgaTsKKworCWlycSA9ICh1X2ludClhcm1faXJxX2dldF9kYXRhKGlzcmMpOworCWlmIChpcnEg Pj0gc2MtPm5pcnFzIHx8IHNjLT5naWNfaXJxc1tpcnFdLmdpX2lzcmMgIT0gaXNyYykKKwkJcmV0 dXJuOworCisJZm9yIChpID0gMDsgaSA8IE1BWENQVTsgaSsrKQorCQlpZiAoQ1BVX0lTU0VUKGks ICZjcHVzKSkKKwkJCXZhbCB8PSAxIDw8ICgxNiArIGkpOworCisJZ2ljX2Rfd3JpdGVfNChzYywg R0lDRF9TR0lSKDApLCB2YWwgfCBpcnEpOworfQorI2VuZGlmCisjZWxzZQorc3RhdGljIGludAog YXJtX2dpY19uZXh0X2lycShzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIGludCBsYXN0X2lycSkK IHsKIAl1aW50MzJfdCBhY3RpdmVfaXJxOwpAQCAtMzIzLDcgKzgyNiw3IEBACiAJICogYml0cyAo aWUgQ1BVIG51bWJlciksIG5vdCBqdXN0IHRoZSBJUlEgbnVtYmVyLCBhbmQgd2UgZG8gbm90CiAJ ICogaGF2ZSB0aGlzIGluZm9ybWF0aW9uIGxhdGVyLgogCSAqLwotCWlmICgoYWN0aXZlX2lycSAm IDB4M2ZmKSA8PSBHSUNfTEFTVF9JUEkpCisJaWYgKChhY3RpdmVfaXJxICYgMHgzZmYpIDw9IEdJ Q19MQVNUX1NHSSkKIAkJZ2ljX2Nfd3JpdGVfNChzYywgR0lDQ19FT0lSLCBhY3RpdmVfaXJxKTsK IAlhY3RpdmVfaXJxICY9IDB4M0ZGOwogCkBAIC0zOTYsNyArODk5LDcgQEAKIAlzdHJ1Y3QgYXJt X2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKIAlnaWNfZF93cml0ZV80 KHNjLCBHSUNEX0lDRU5BQkxFUihpcnEgPj4gNSksICgxVUwgPDwgKGlycSAmIDB4MUYpKSk7Ci0J Z2ljX2Nfd3JpdGVfNChzYywgR0lDQ19FT0lSLCBpcnEpOworCWdpY19jX3dyaXRlXzQoc2MsIEdJ Q0NfRU9JUiwgaXJxKTsgLyogWFhYIC0gbm90IGFsbG93ZWQgKi8KIH0KIAogc3RhdGljIHZvaWQK QEAgLTQwNCw3ICs5MDcsNyBAQAogewogCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKIAotCWlmIChpcnEgPiBHSUNfTEFTVF9JUEkpCisJaWYgKGlycSA+ IEdJQ19MQVNUX1NHSSkKIAkJYXJtX2lycV9tZW1vcnlfYmFycmllcihpcnEpOwogCiAJZ2ljX2Rf d3JpdGVfNChzYywgR0lDRF9JU0VOQUJMRVIoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEgJiAweDFG KSkpOwpAQCAtNDUxLDEwICs5NTQsMTAgQEAKIHN0YXRpYyB2b2lkCiBnaWNfcG9zdF9maWx0ZXIo dm9pZCAqYXJnKQogewotCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGFybV9naWNfc2M7CisJ c3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZ2ljX3NjOwogCXVpbnRwdHJfdCBpcnEgPSAodWlu dHB0cl90KSBhcmc7CiAKLQlpZiAoaXJxID4gR0lDX0xBU1RfSVBJKQorCWlmIChpcnEgPiBHSUNf TEFTVF9TR0kpCiAJCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIoaXJxKTsKIAlnaWNfY193cml0ZV80 KHNjLCBHSUNDX0VPSVIsIGlycSk7CiB9CkBAIC00NjMsNyArOTY2LDcgQEAKIGdpY19jb25maWdf aXJxKGludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsIGVudW0gaW50cl9wb2xhcml0eSBw b2wpCiB7CiAKLQlyZXR1cm4gKGFybV9naWNfY29uZmlnKGFybV9naWNfc2MtPmdpY19kZXYsIGly cSwgdHJpZywgcG9sKSk7CisJcmV0dXJuIChhcm1fZ2ljX2NvbmZpZyhnaWNfc2MtPmdpY19kZXYs IGlycSwgdHJpZywgcG9sKSk7CiB9CiAKIHZvaWQKQEAgLTQ3MCw3ICs5NzMsNyBAQAogYXJtX21h c2tfaXJxKHVpbnRwdHJfdCBuYikKIHsKIAotCWFybV9naWNfbWFzayhhcm1fZ2ljX3NjLT5naWNf ZGV2LCBuYik7CisJYXJtX2dpY19tYXNrKGdpY19zYy0+Z2ljX2RldiwgbmIpOwogfQogCiB2b2lk CkBAIC00NzcsNyArOTgwLDcgQEAKIGFybV91bm1hc2tfaXJxKHVpbnRwdHJfdCBuYikKIHsKIAot CWFybV9naWNfdW5tYXNrKGFybV9naWNfc2MtPmdpY19kZXYsIG5iKTsKKwlhcm1fZ2ljX3VubWFz ayhnaWNfc2MtPmdpY19kZXYsIG5iKTsKIH0KIAogaW50CkBAIC00ODQsNyArOTg3LDcgQEAKIGFy bV9nZXRfbmV4dF9pcnEoaW50IGxhc3RfaXJxKQogewogCi0JcmV0dXJuIChhcm1fZ2ljX25leHRf aXJxKGFybV9naWNfc2MsIGxhc3RfaXJxKSk7CisJcmV0dXJuIChhcm1fZ2ljX25leHRfaXJxKGdp Y19zYywgbGFzdF9pcnEpKTsKIH0KIAogdm9pZApAQCAtNDkxLDcgKzk5NCw3IEBACiBhcm1faW5p dF9zZWNvbmRhcnlfaWModm9pZCkKIHsKIAotCWFybV9naWNfaW5pdF9zZWNvbmRhcnkoYXJtX2dp Y19zYy0+Z2ljX2Rldik7CisJYXJtX2dpY19pbml0X3NlY29uZGFyeShnaWNfc2MtPmdpY19kZXYp OwogfQogCiAjaWZkZWYgU01QCkBAIC00OTksNyArMTAwMiw3IEBACiBwaWNfaXBpX3NlbmQoY3B1 c2V0X3QgY3B1cywgdV9pbnQgaXBpKQogewogCi0JYXJtX2dpY19pcGlfc2VuZChhcm1fZ2ljX3Nj LT5naWNfZGV2LCBjcHVzLCBpcGkpOworCWFybV9naWNfaXBpX3NlbmQoZ2ljX3NjLT5naWNfZGV2 LCBjcHVzLCBpcGkpOwogfQogCiBpbnQKQEAgLTUwNiw3ICsxMDA5LDcgQEAKIHBpY19pcGlfcmVh ZChpbnQgaSkKIHsKIAotCXJldHVybiAoYXJtX2dpY19pcGlfcmVhZChhcm1fZ2ljX3NjLT5naWNf ZGV2LCBpKSk7CisJcmV0dXJuIChhcm1fZ2ljX2lwaV9yZWFkKGdpY19zYy0+Z2ljX2RldiwgaSkp OwogfQogCiB2b2lkCkBAIC01MTMsMTQgKzEwMTYsMzQgQEAKIHBpY19pcGlfY2xlYXIoaW50IGlw aSkKIHsKIAotCWFybV9naWNfaXBpX2NsZWFyKGFybV9naWNfc2MtPmdpY19kZXYsIGlwaSk7CisJ YXJtX2dpY19pcGlfY2xlYXIoZ2ljX3NjLT5naWNfZGV2LCBpcGkpOwogfQogI2VuZGlmCisjZW5k aWYgLyogQVJNX0lOVFJORyAqLwogCiBzdGF0aWMgZGV2aWNlX21ldGhvZF90IGFybV9naWNfbWV0 aG9kc1tdID0gewogCS8qIERldmljZSBpbnRlcmZhY2UgKi8KIAlERVZNRVRIT0QoZGV2aWNlX3By b2JlLAkJYXJtX2dpY19wcm9iZSksCiAJREVWTUVUSE9EKGRldmljZV9hdHRhY2gsCWFybV9naWNf YXR0YWNoKSwKKyNpZmRlZiBBUk1fSU5UUk5HCisJLyogSW50ZXJydXB0IGNvbnRyb2xsZXIgaW50 ZXJmYWNlICovCisJREVWTUVUSE9EKHBpY19tYXAsCQlhcm1fZ2ljX21hcCksCisjaWZkZWYgRkRU CisJREVWTUVUSE9EKHBpY19tYXBfZmR0LAkJYXJtX2dpY19tYXBfZmR0KSwKKyNlbmRpZgorCURF Vk1FVEhPRChwaWNfdW5tYXAsCQlhcm1fZ2ljX3VubWFwKSwKKwlERVZNRVRIT0QocGljX2JpbmQs CQlhcm1fZ2ljX2JpbmQpLAorCURFVk1FVEhPRChwaWNfY29uZmlnLAkJYXJtX2dpY19jb25maWcp LAorCURFVk1FVEhPRChwaWNfZGlzYWJsZSwJCWFybV9naWNfZGlzYWJsZSksCisJREVWTUVUSE9E KHBpY19lbmFibGUsCQlhcm1fZ2ljX2VuYWJsZSksCisJREVWTUVUSE9EKHBpY19wcmVfaXRocmVh ZCwJYXJtX2dpY19wcmVfaXRocmVhZCksCisJREVWTUVUSE9EKHBpY19wb3N0X2l0aHJlYWQsCWFy bV9naWNfcG9zdF9pdGhyZWFkKSwKKwlERVZNRVRIT0QocGljX3Bvc3RfZmlsdGVyLAlhcm1fZ2lj X3Bvc3RfZmlsdGVyKSwKKyNpZmRlZiBTTVAKKwlERVZNRVRIT0QocGljX2luaXRfc2Vjb25kYXJ5 LAlhcm1fZ2ljX2luaXRfc2Vjb25kYXJ5KSwKKwlERVZNRVRIT0QocGljX2lwaV9zZW5kLAkJYXJt X2dpY19pcGlfc2VuZCksCisjZW5kaWYKKyNlbmRpZgogCXsgMCwgMCB9CiB9OwogCkluZGV4OiBz eXMvYXJtL2FybS9tcF9tYWNoZGVwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9hcm0vbXBfbWFj aGRlcC5jCShyZXZpc2lvbiAyNzcyMTApCisrKyBzeXMvYXJtL2FybS9tcF9tYWNoZGVwLmMJKHdv cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDkgQEAKIC8qIFNldCB0byAxIG9uY2Ugd2UncmUgcmVh ZHkgdG8gbGV0IHRoZSBBUHMgb3V0IG9mIHRoZSBwZW4uICovCiB2b2xhdGlsZSBpbnQgYXBzX3Jl YWR5ID0gMDsKIAorI2lmbmRlZiBBUk1fSU5UUk5HCiBzdGF0aWMgaW50IGlwaV9oYW5kbGVyKHZv aWQgKmFyZyk7CisjZW5kaWYKIHZvaWQgc2V0X3N0YWNrcHRycyhpbnQgY3B1KTsKIAogLyogVGVt cG9yYXJ5IHZhcmlhYmxlcyBmb3IgaW5pdF9zZWNvbmRhcnkoKSAgKi8KQEAgLTE0OSw3ICsxNTEs NiBAQAogewogCXN0cnVjdCBwY3B1ICpwYzsKIAl1aW50MzJfdCBsb29wX2NvdW50ZXI7Ci0JaW50 IHN0YXJ0ID0gMCwgZW5kID0gMDsKIAogCWNwdV9zZXR1cChOVUxMKTsKIAlzZXR0dGIocG1hcF9w YSk7CkBAIC0xOTksMTggKzIwMCw2IEBACiAKIAltdHhfdW5sb2NrX3NwaW4oJmFwX2Jvb3RfbXR4 KTsKIAotCS8qIEVuYWJsZSBpcGkgKi8KLSNpZmRlZiBJUElfSVJRX1NUQVJUCi0Jc3RhcnQgPSBJ UElfSVJRX1NUQVJUOwotI2lmZGVmIElQSV9JUlFfRU5ECi0gIAllbmQgPSBJUElfSVJRX0VORDsK LSNlbHNlCi0JZW5kID0gSVBJX0lSUV9TVEFSVDsKLSNlbmRpZgotI2VuZGlmCi0JCQkJCi0JZm9y IChpbnQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKQotCQlhcm1fdW5tYXNrX2lycShpKTsKIAll bmFibGVfaW50ZXJydXB0cyhQU1JfSSk7CiAKIAlsb29wX2NvdW50ZXIgPSAwOwpAQCAtMjMzLDYg KzIyMiwxMDggQEAKIAkvKiBOT1RSRUFDSEVEICovCiB9CiAKKyNpZmRlZiBBUk1fSU5UUk5HCitz dGF0aWMgdm9pZAoraXBpX3JlbmRlenZvdXModm9pZCAqZHVtbXkgX191bnVzZWQpCit7CisKKwlD VFIwKEtUUl9TTVAsICJJUElfUkVOREVaVk9VUyIpOworCXNtcF9yZW5kZXp2b3VzX2FjdGlvbigp OworfQorCitzdGF0aWMgdm9pZAoraXBpX2FzdCh2b2lkICpkdW1teSBfX3VudXNlZCkKK3sKKwor CUNUUjAoS1RSX1NNUCwgIklQSV9BU1QiKTsKK30KKworc3RhdGljIHZvaWQKK2lwaV9zdG9wKHZv aWQgKmR1bW15IF9fdW51c2VkKQoreworCXVfaW50IGNwdTsKKworCS8qCisJICogSVBJX1NUT1Bf SEFSRCBpcyBtYXBwZWQgdG8gSVBJX1NUT1AuCisJICovCisJQ1RSMChLVFJfU01QLCAiSVBJX1NU T1Agb3IgSVBJX1NUT1BfSEFSRCIpOworCisJY3B1ID0gUENQVV9HRVQoY3B1aWQpOworCXNhdmVj dHgoJnN0b3BwY2JzW2NwdV0pOworCisJLyoKKwkgKiBDUFVzIGFyZSBzdG9wcGVkIHdoZW4gZW50 ZXJpbmcgdGhlIGRlYnVnZ2VyIGFuZCBhdAorCSAqIHN5c3RlbSBzaHV0ZG93biwgYm90aCBldmVu dHMgd2hpY2ggY2FuIHByZWNlZGUgYQorCSAqIHBhbmljIGR1bXAuICBGb3IgdGhlIGR1bXAgdG8g YmUgY29ycmVjdCwgYWxsIGNhY2hlcworCSAqIG11c3QgYmUgZmx1c2hlZCBhbmQgaW52YWxpZGF0 ZWQsIGJ1dCBvbiBBUk0gdGhlcmUncworCSAqIG5vIHdheSB0byBicm9hZGNhc3QgYSB3Ymludl9h bGwgdG8gb3RoZXIgY29yZXMuCisJICogSW5zdGVhZCwgd2UgaGF2ZSBlYWNoIGNvcmUgZG8gdGhl IGxvY2FsIHdiaW52X2FsbCBhcworCSAqIHBhcnQgb2Ygc3RvcHBpbmcgdGhlIGNvcmUuICBUaGUg Y29yZSByZXF1ZXN0aW5nIHRoZQorCSAqIHN0b3Agd2lsbCBkbyB0aGUgbDIgY2FjaGUgZmx1c2gg YWZ0ZXIgYWxsIG90aGVyIGNvcmVzCisJICogaGF2ZSBkb25lIHRoZWlyIGwxIGZsdXNoZXMgYW5k IHN0b3BwZWQuCisJICovCisJY3B1X2lkY2FjaGVfd2JpbnZfYWxsKCk7CisKKwkvKiBJbmRpY2F0 ZSB3ZSBhcmUgc3RvcHBlZCAqLworCUNQVV9TRVRfQVRPTUlDKGNwdSwgJnN0b3BwZWRfY3B1cyk7 CisKKwkvKiBXYWl0IGZvciByZXN0YXJ0ICovCisJd2hpbGUgKCFDUFVfSVNTRVQoY3B1LCAmc3Rh cnRlZF9jcHVzKSkKKwkJY3B1X3NwaW53YWl0KCk7CisKKwlDUFVfQ0xSX0FUT01JQyhjcHUsICZz dGFydGVkX2NwdXMpOworCUNQVV9DTFJfQVRPTUlDKGNwdSwgJnN0b3BwZWRfY3B1cyk7CisJQ1RS MChLVFJfU01QLCAiSVBJX1NUT1AgKHJlc3RhcnQpIik7Cit9CisKK3N0YXRpYyB2b2lkCitpcGlf cHJlZW1wdCh2b2lkICphcmcpCit7CisJc3RydWN0IHRyYXBmcmFtZSAqb2xkZnJhbWU7CisJc3Ry dWN0IHRocmVhZCAqdGQ7CisKKwljcml0aWNhbF9lbnRlcigpOworCXRkID0gY3VydGhyZWFkOwor CXRkLT50ZF9pbnRyX25lc3RpbmdfbGV2ZWwrKzsKKwlvbGRmcmFtZSA9IHRkLT50ZF9pbnRyX2Zy YW1lOworCXRkLT50ZF9pbnRyX2ZyYW1lID0gKHN0cnVjdCB0cmFwZnJhbWUgKilhcmc7CisKKwlD VFIxKEtUUl9TTVAsICIlczogSVBJX1BSRUVNUFQiLCBfX2Z1bmNfXyk7CisJc2NoZWRfcHJlZW1w dCh0ZCk7CisKKwl0ZC0+dGRfaW50cl9mcmFtZSA9IG9sZGZyYW1lOworCXRkLT50ZF9pbnRyX25l c3RpbmdfbGV2ZWwtLTsKKwljcml0aWNhbF9leGl0KCk7Cit9CisKK3N0YXRpYyB2b2lkCitpcGlf aGFyZGNsb2NrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdHJhcGZyYW1lICpvbGRmcmFtZTsKKwlz dHJ1Y3QgdGhyZWFkICp0ZDsKKworCWNyaXRpY2FsX2VudGVyKCk7CisJdGQgPSBjdXJ0aHJlYWQ7 CisJdGQtPnRkX2ludHJfbmVzdGluZ19sZXZlbCsrOworCW9sZGZyYW1lID0gdGQtPnRkX2ludHJf ZnJhbWU7CisJdGQtPnRkX2ludHJfZnJhbWUgPSAoc3RydWN0IHRyYXBmcmFtZSAqKWFyZzsKKwor CUNUUjEoS1RSX1NNUCwgIiVzOiBJUElfSEFSRENMT0NLIiwgX19mdW5jX18pOworCWhhcmRjbG9j a2ludHIoKTsKKworCXRkLT50ZF9pbnRyX2ZyYW1lID0gb2xkZnJhbWU7CisJdGQtPnRkX2ludHJf bmVzdGluZ19sZXZlbC0tOworCWNyaXRpY2FsX2V4aXQoKTsKK30KKworc3RhdGljIHZvaWQKK2lw aV90bGIodm9pZCAqZHVtbXkgX191bnVzZWQpCit7CisKKwlDVFIxKEtUUl9TTVAsICIlczogSVBJ X1RMQiIsIF9fZnVuY19fKTsKKwljcHVmdW5jcy5jZl90bGJfZmx1c2hJRCgpOworfQorI2Vsc2UK IHN0YXRpYyBpbnQKIGlwaV9oYW5kbGVyKHZvaWQgKmFyZykKIHsKQEAgLTMwOCwxNSArMzk5LDI4 IEBACiAKIAlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9p ZAogcmVsZWFzZV9hcHModm9pZCAqZHVtbXkgX191bnVzZWQpCiB7CiAJdWludDMyX3QgbG9vcF9j b3VudGVyOworI2lmbmRlZiBBUk1fSU5UUk5HCiAJaW50IHN0YXJ0ID0gMCwgZW5kID0gMDsKKyNl bmRpZgogCiAJaWYgKG1wX25jcHVzID09IDEpCiAJCXJldHVybjsKKworI2lmZGVmIEFSTV9JTlRS TkcKKwlhcm1fc2V0dXBfaXBpaGFuZGxlcihJUElfUkVOREVaVk9VUywgTlVMTCwgaXBpX3JlbmRl enZvdXMsIE5VTEwsIDApOworCWFybV9zZXR1cF9pcGloYW5kbGVyKElQSV9BU1QsIE5VTEwsIGlw aV9hc3QsIE5VTEwsIDApOworCWFybV9zZXR1cF9pcGloYW5kbGVyKElQSV9TVE9QLCBOVUxMLCBp cGlfc3RvcCwgTlVMTCwgMCk7CisJYXJtX3NldHVwX2lwaWhhbmRsZXIoSVBJX1BSRUVNUFQsIE5V TEwsIGlwaV9wcmVlbXB0LCBOVUxMLCAwKTsKKwlhcm1fc2V0dXBfaXBpaGFuZGxlcihJUElfSEFS RENMT0NLLCBOVUxMLCBpcGlfaGFyZGNsb2NrLCBOVUxMLCAwKTsKKwlhcm1fc2V0dXBfaXBpaGFu ZGxlcihJUElfVExCLCBOVUxMLCBpcGlfdGxiLCBOVUxMLCAwKTsKKworI2Vsc2UKICNpZmRlZiBJ UElfSVJRX1NUQVJUCiAJc3RhcnQgPSBJUElfSVJRX1NUQVJUOwogI2lmZGVmIElQSV9JUlFfRU5E CkBAIC0zNDEsNiArNDQ1LDcgQEAKIAkJLyogRW5hYmxlIGlwaSAqLwogCQlhcm1fdW5tYXNrX2ly cShpKTsKIAl9CisjZW5kaWYKIAlhdG9taWNfc3RvcmVfcmVsX2ludCgmYXBzX3JlYWR5LCAxKTsK IAogCXByaW50ZigiUmVsZWFzZSBBUHNcbiIpOwpJbmRleDogc3lzL2FybS9hcm0vbmV4dXMuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBzeXMvYXJtL2FybS9uZXh1cy5jCShyZXZpc2lvbiAyNzcyMTApCisrKyBz eXMvYXJtL2FybS9uZXh1cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsOSArMjUxLDEyIEBACiB7 CiAJaW50IHJldCA9IEVOT0RFVjsKIAorI2lmZGVmIEFSTV9JTlRSTkcKKwlyZXQgPSBhcm1faW50 cm5nX2NvbmZpZ19pcnEoaXJxLCB0cmlnLCBwb2wpOworI2Vsc2UKIAlpZiAoYXJtX2NvbmZpZ19p cnEpCiAJCXJldCA9ICgqYXJtX2NvbmZpZ19pcnEpKGlycSwgdHJpZywgcG9sKTsKLQorI2VuZGlm CiAJcmV0dXJuIChyZXQpOwogfQogCkBAIC0yNjcsOSArMjcwLDE0IEBACiAJCWZsYWdzIHw9IElO VFJfRVhDTDsKIAogCWZvciAoaXJxID0gcm1hbl9nZXRfc3RhcnQocmVzKTsgaXJxIDw9IHJtYW5f Z2V0X2VuZChyZXMpOyBpcnErKykgeworI2lmIGRlZmluZWQoQVJNX0lOVFJORykKKwkJYXJtX3Nl dHVwX2lycWhhbmRsZXIoY2hpbGQsIGZpbHQsIGludHIsIGFyZywgaXJxLCBmbGFncywKKwkJICAg IGNvb2tpZXApOworI2Vsc2UKIAkJYXJtX3NldHVwX2lycWhhbmRsZXIoZGV2aWNlX2dldF9uYW1l dW5pdChjaGlsZCksCiAJCSAgICBmaWx0LCBpbnRyLCBhcmcsIGlycSwgZmxhZ3MsIGNvb2tpZXAp OwogCQlhcm1fdW5tYXNrX2lycShpcnEpOworI2VuZGlmCiAJfQogCXJldHVybiAoMCk7CiB9CkBA IC0yNzgsNyArMjg2LDExIEBACiBuZXh1c190ZWFyZG93bl9pbnRyKGRldmljZV90IGRldiwgZGV2 aWNlX3QgY2hpbGQsIHN0cnVjdCByZXNvdXJjZSAqciwgdm9pZCAqaWgpCiB7CiAKKyNpZiBkZWZp bmVkKEFSTV9JTlRSTkcpCisJcmV0dXJuIChhcm1fcmVtb3ZlX2lycWhhbmRsZXIoY2hpbGQsIHJt YW5fZ2V0X3N0YXJ0KHIpLCBpaCkpOworI2Vsc2UKIAlyZXR1cm4gKGFybV9yZW1vdmVfaXJxaGFu ZGxlcihybWFuX2dldF9zdGFydChyKSwgaWgpKTsKKyNlbmRpZgogfQogCiAKSW5kZXg6IHN5cy9h cm0vaW5jbHVkZS9mZHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2luY2x1ZGUvZmR0LmgJKHJl dmlzaW9uIDI3NzIxMCkKKysrIHN5cy9hcm0vaW5jbHVkZS9mZHQuaAkod29ya2luZyBjb3B5KQpA QCAtMzIsNiArMzIsNyBAQAogI2lmbmRlZiBfTUFDSElORV9GRFRfSF8KICNkZWZpbmUgX01BQ0hJ TkVfRkRUX0hfCiAKKyNpbmNsdWRlICJvcHRfcGxhdGZvcm0uaCIKICNpbmNsdWRlIDxkZXYvb2Z3 L29wZW5maXJtLmg+CiAKICNpbmNsdWRlIDx2bS92bS5oPgpAQCAtNDAsMTIgKzQxLDI1IEBACiAj aW5jbHVkZSA8bWFjaGluZS9idXMuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KIAorI2lm ZGVmIEFSTV9JTlRSTkcKKwogLyogTWF4IGludGVycnVwdCBudW1iZXIgKi8KKyNkZWZpbmUJRkRU X0lOVFJfTUFYCSgweGZmZmYpCisKKy8qIE1hcCBwaGFuZGxlL2ludHBpbiBwYWlyIHRvIGdsb2Jh bCBJUlEgbnVtYmVyICovCisjZGVmaW5lCUZEVF9NQVBfSVJRKG5vZGUsIHBpbikJKGFybV9mZHRf bWFwX2lycShub2RlLCBwaW4pKQorI2RlZmluZQlGRFRfREVTQ1JJQkVfSVJRKGlycSkJKGFybV9k ZXNjcmliZV9pcnEoaXJxKSkKKworI2Vsc2UKKworLyogTWF4IGludGVycnVwdCBudW1iZXIgKi8K ICNkZWZpbmUgRkRUX0lOVFJfTUFYCU5JUlEKIAogLyogTWFwIHBoYW5kbGUvaW50cGluIHBhaXIg dG8gZ2xvYmFsIElSUSBudW1iZXIgKi8KICNkZWZpbmUJRkRUX01BUF9JUlEobm9kZSwgcGluKQko cGluKQogCisjZW5kaWYgLyogQVJNX0lOVFJORyAqLworCiAvKgogICogQnVzIHNwYWNlIHRhZy4g WFhYIGVuZGlhbmVzcyBpbmZvIG5lZWRzIHRvIGJlIGRlcml2ZWQgZnJvbSB0aGUgYmxvYi4KICAq LwpJbmRleDogc3lzL2FybS9pbmNsdWRlL2ludHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2lu Y2x1ZGUvaW50ci5oCShyZXZpc2lvbiAyNzcyMTApCisrKyBzeXMvYXJtL2luY2x1ZGUvaW50ci5o CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw2OCBAQAogI2luY2x1ZGUgPGRldi9vZncvb3Bl bmZpcm0uaD4KICNlbmRpZgogCisjaWZkZWYgQVJNX0lOVFJORworCisjaWZuZGVmIE5JUlEKKyNk ZWZpbmUJTklSUQkJMTAyNAkvKiBYWFggLSBJdCBzaG91bGQgYmUgYW4gb3B0aW9uLiAqLworI2Vu ZGlmCisKKyNkZWZpbmUJSU5UUl9TT0xPCUlOVFJfTUQxCisKK3N0cnVjdCBhcm1faXJxc3JjOwor dHlwZWRlZiBpbnQgYXJtX2lycV9maWx0ZXJfdCh2b2lkICphcmcsIHN0cnVjdCB0cmFwZnJhbWUg KnRmKTsKKworI2RlZmluZSBJU1JDVF9OT05FCTAKKyNkZWZpbmUgSVNSQ1RfU1BJCTEKKyNkZWZp bmUgSVNSQ1RfUFBJCTIKKyNkZWZpbmUgSVNSQ1RfU0dJCTMKKworI2RlZmluZSBJU1JDRl9OQU1F U1BBQ0UJMHgwMDAxCisjZGVmaW5lIElTUkNGX0ZEVAkweDAwMDIKKyNkZWZpbmUgSVNSQ0ZfTUFQ UEVECTB4MDAwNAorCit2b2lkIGFybV9kaXNwYXRjaF9zcGkoc3RydWN0IGFybV9pcnFzcmMgKmlz cmMsIHN0cnVjdCB0cmFwZnJhbWUgKnRmKTsKKyNkZWZpbmUgYXJtX2Rpc3BhdGNoX3BwaQlhcm1f ZGlzcGF0Y2hfc3BpCisKK3VfaW50IGFybV9uYW1lc3BhY2VfbWFwX2lycShkZXZpY2VfdCBkZXYs IHVpbnQ4X3QgdHlwZSwgdWludDE2X3QgbnVtKTsKKwordm9pZCogYXJtX2lycV9nZXRfZGF0YShz dHJ1Y3QgYXJtX2lycXNyYyAqaXNyYyk7Cit2b2lkIGFybV9pcnFfc2V0X2RhdGEoc3RydWN0IGFy bV9pcnFzcmMgKmlzcmMsIHZvaWQgKmRhdGEpOwordm9pZCBhcm1faXJxX3NldF9uYW1lKHN0cnVj dCBhcm1faXJxc3JjICppc3JjLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgYXJtX2lycV9zZXRf bmFtZXNwYWNlKHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1aW50OF90IHR5cGUsIHVpbnQxNl90 IG51bSk7CisKK2ludCBhcm1faXJxX3NldF9yb290KGRldmljZV90IGRldiwgYXJtX2lycV9maWx0 ZXJfdCAqZmlsdGVyLCB2b2lkICphcmcsCisgICAgdV9pbnQgaXBpY291bnQpOworCitpbnQgYXJt X3JlZ2lzdGVyX3BpYyhkZXZpY2VfdCBkZXYpOworaW50IGFybV91bnJlZ2lzdGVyX3BpYyhkZXZp Y2VfdCBkZXYpOworCitpbnQgYXJtX3NldHVwX2lycWhhbmRsZXIoZGV2aWNlX3QgZGV2LCBkcml2 ZXJfZmlsdGVyX3QsIGRyaXZlcl9pbnRyX3QsIHZvaWQgKiwKKyAgICB1X2ludCwgaW50LCB2b2lk ICoqKTsKK2ludCBhcm1fcmVtb3ZlX2lycWhhbmRsZXIoZGV2aWNlX3QgZGV2LCB1X2ludCwgdm9p ZCAqKTsKK2ludCBhcm1faW50cm5nX2NvbmZpZ19pcnEodV9pbnQsIGVudW0gaW50cl90cmlnZ2Vy LCBlbnVtIGludHJfcG9sYXJpdHkpOworCitjb25zdCBjaGFyICphcm1fZGVzY3JpYmVfaXJxKHVf aW50IGlycSk7CisKKyNpZmRlZiBGRFQKK3VfaW50IGFybV9mZHRfbWFwX2lycShwaGFuZGxlX3Qs IHBjZWxsX3QgKiwgdV9pbnQpOworI2VuZGlmCisKKyNpZmRlZiBTTVAKK3R5cGVkZWYgdm9pZCBh cm1faXBpX2ZpbHRlcl90KHZvaWQgKik7CisKK3ZvaWQgYXJtX2Rpc3BhdGNoX3NnaShzdHJ1Y3Qg YXJtX2lycXNyYyAqaXNyYywgc3RydWN0IHRyYXBmcmFtZSAqdGYpOworCisjZGVmaW5lIEFTSUZf Tk9BTExPQwkweDAwMDEKKworaW50IGFybV9zZXR1cF9pcGloYW5kbGVyKHVfaW50IGlwaSwgY2hh ciAqbmFtZSwgYXJtX2lwaV9maWx0ZXJfdCAqZmlsdGVyLAorICAgIHZvaWQgKmFyZywgdV9pbnQg ZmxhZ3MpOworCit2b2lkIGFybV9pbml0X3NlY29uZGFyeV9waWModm9pZCk7CisjZW5kaWYKKwor I2Vsc2UgLyogQVJNX0lOVFJORyAqLworCiAvKiBYWFggbW92ZSB0byBzdGQuKiBmaWxlcz8gKi8K ICNpZmRlZiBDUFVfWFNDQUxFXzgxMzQyCiAjZGVmaW5lIE5JUlEJCTEyOApAQCAtNzEsNyArMTMz LDYgQEAKICNkZWZpbmUgTklSUQkJMzIKICNlbmRpZgogCi0KIGludCBhcm1fZ2V0X25leHRfaXJx KGludCk7CiB2b2lkIGFybV9tYXNrX2lycSh1aW50cHRyX3QpOwogdm9pZCBhcm1fdW5tYXNrX2ly cSh1aW50cHRyX3QpOwpAQCAtODMsOCArMTQ0LDYgQEAKIGV4dGVybiBpbnQgKCphcm1fY29uZmln X2lycSkoaW50IGlycSwgZW51bSBpbnRyX3RyaWdnZXIgdHJpZywKICAgICBlbnVtIGludHJfcG9s YXJpdHkgcG9sKTsKIAotdm9pZCBhcm1faXJxX21lbW9yeV9iYXJyaWVyKHVpbnRwdHJfdCk7Ci0K IHZvaWQgYXJtX2luaXRfc2Vjb25kYXJ5X2ljKHZvaWQpOwogaW50ICBnaWNfZGVjb2RlX2ZkdCh1 aW50MzJfdCBpcGFyZW50bm9kZSwgdWludDMyX3QgKmludHJjZWxscywgaW50ICppbnRlcnJ1cHQs CiAgICAgaW50ICp0cmlnLCBpbnQgKnBvbCk7CkBAIC05Myw0ICsxNTIsOCBAQAogaW50IGFybV9m ZHRfbWFwX2lycShwaGFuZGxlX3QsIHBjZWxsX3QgKiwgaW50KTsKICNlbmRpZgogCisjZW5kaWYg LyogQVJNX0lOVFJORyAqLworCit2b2lkIGFybV9pcnFfbWVtb3J5X2JhcnJpZXIodWludHB0cl90 KTsKKwogI2VuZGlmCS8qIF9NQUNISU5FX0lOVFJfSCAqLwpJbmRleDogc3lzL2FybS9pbmNsdWRl L3NtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vaW5jbHVkZS9zbXAuaAkocmV2aXNpb24gMjc3 MjEwKQorKysgc3lzL2FybS9pbmNsdWRlL3NtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYs MTggQEAKICNpbmNsdWRlIDxzeXMvX2NwdXNldC5oPgogI2luY2x1ZGUgPG1hY2hpbmUvcGNiLmg+ CiAKKyNpZmRlZiBBUk1fSU5UUk5HCitlbnVtIHsKKwlJUElfQVNULAorCUlQSV9QUkVFTVBULAor CUlQSV9SRU5ERVpWT1VTLAorCUlQSV9TVE9QLAorCUlQSV9TVE9QX0hBUkQgPSBJUElfU1RPUCwg LyogVGhlc2UgYXJlIHN5bm9ueW1zIG9uIGFybS4gKi8KKwlJUElfSEFSRENMT0NLLAorCUlQSV9U TEIsCisJQVJNX0lQSV9DT1VOVAorfTsKKyNlbHNlCiAjZGVmaW5lIElQSV9BU1QJCTAKICNkZWZp bmUgSVBJX1BSRUVNUFQJMgogI2RlZmluZSBJUElfUkVOREVaVk9VUwkzCkBAIC0xMyw2ICsyNSw3 IEBACiAjZGVmaW5lIElQSV9TVE9QX0hBUkQJNAogI2RlZmluZSBJUElfSEFSRENMT0NLCTYKICNk ZWZpbmUgSVBJX1RMQgkJNworI2VuZGlmCiAKIHZvaWQJaW5pdF9zZWNvbmRhcnkoaW50IGNwdSk7 CiB2b2lkCW1wZW50cnkodm9pZCk7CkBAIC0yMyw4ICszNiwxMCBAQAogCiAvKiBQSUMgaW50ZXJm YWNlICovCiB2b2lkCXBpY19pcGlfc2VuZChjcHVzZXRfdCBjcHVzLCB1X2ludCBpcGkpOworI2lm bmRlZiBBUk1fSU5UUk5HCiB2b2lkCXBpY19pcGlfY2xlYXIoaW50IGlwaSk7CiBpbnQJcGljX2lw aV9yZWFkKGludCBhcmcpOworI2VuZGlmCiAKIC8qIFBsYXRmb3JtIGludGVyZmFjZSAqLwogdm9p ZAlwbGF0Zm9ybV9tcF9zZXRtYXhpZCh2b2lkKTsKSW5kZXg6IHN5cy9hcm0vdGkvb21hcDQvb21h cDRfbXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL3RpL29tYXA0L29tYXA0X21wLmMJKHJldmlz aW9uIDI3NzIxMCkKKysrIHN5cy9hcm0vdGkvb21hcDQvb21hcDRfbXAuYwkod29ya2luZyBjb3B5 KQpAQCAtNDEsNyArNDEsMTIgQEAKIHZvaWQKIHBsYXRmb3JtX21wX2luaXRfc2Vjb25kYXJ5KHZv aWQpCiB7CisKKyNpZmRlZiBBUk1fSU5UUk5HCisJYXJtX2luaXRfc2Vjb25kYXJ5X3BpYygpOwor I2Vsc2UKIAlhcm1faW5pdF9zZWNvbmRhcnlfaWMoKTsKKyNlbmRpZgogfQogCiB2b2lkCkluZGV4 OiBzeXMvY29uZi9maWxlcy5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbmYvZmlsZXMuYXJtCShy ZXZpc2lvbiAyNzcyMTApCisrKyBzeXMvY29uZi9maWxlcy5hcm0JKHdvcmtpbmcgY29weSkKQEAg LTI5LDcgKzI5LDggQEAKIGFybS9hcm0vaWRlbnRjcHUuYwkJc3RhbmRhcmQKIGFybS9hcm0vaW5f Y2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CiBhcm0vYXJtL2luX2Nrc3VtX2FybS5TCQlv cHRpb25hbAlpbmV0IHwgaW5ldDYKLWFybS9hcm0vaW50ci5jCQkJc3RhbmRhcmQKK2FybS9hcm0v aW50ci5jCQkJb3B0aW9uYWwJIWFybV9pbnRybmcKK2FybS9hcm0vaW50cm5nLmMJCW9wdGlvbmFs CWFybV9pbnRybmcKIGFybS9hcm0vbG9jb3JlLlMJCXN0YW5kYXJkCW5vLW9iagogYXJtL2FybS9t YWNoZGVwLmMJCXN0YW5kYXJkCiBhcm0vYXJtL21lbS5jCQkJb3B0aW9uYWwJbWVtCkBAIC0zNyw2 ICszOCw3IEBACiBhcm0vYXJtL21wX21hY2hkZXAuYwkJb3B0aW9uYWwJc21wCiBhcm0vYXJtL25l eHVzLmMJCQlzdGFuZGFyZAogYXJtL2FybS9waHlzbWVtLmMJCXN0YW5kYXJkCithcm0vYXJtL3Bp Y19pZi5tCQlvcHRpb25hbAlhcm1faW50cm5nCiBhcm0vYXJtL3BsMTkwLmMJCQlvcHRpb25hbAlw bDE5MAogYXJtL2FybS9wbDMxMC5jCQkJb3B0aW9uYWwJcGwzMTAKIGFybS9hcm0vcGxhdGZvcm0u YwkJb3B0aW9uYWwJcGxhdGZvcm0KSW5kZXg6IHN5cy9jb25mL29wdGlvbnMuYXJtCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy9jb25mL29wdGlvbnMuYXJtCShyZXZpc2lvbiAyNzcyMTApCisrKyBzeXMvY29u Zi9vcHRpb25zLmFybQkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKIEFSTTlfQ0FDSEVf V1JJVEVfVEhST1VHSAlvcHRfZ2xvYmFsLmgKIEFSTVY2CQkJb3B0X2dsb2JhbC5oCiBBUk1fQ0FD SEVfTE9DS19FTkFCTEUJb3B0X2dsb2JhbC5oCitBUk1fSU5UUk5HCQlvcHRfZ2xvYmFsLmgKIEFS TV9LRVJOX0RJUkVDVE1BUAlvcHRfdm0uaAogQVJNX0wyX1BJUFQJCW9wdF9nbG9iYWwuaAogQVJN X01BTllfQk9BUkQJCW9wdF9nbG9iYWwuaApJbmRleDogc3lzL2Rldi9mZHQvc2ltcGxlYnVzLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gc3lzL2Rldi9mZHQvc2ltcGxlYnVzLmMJKHJldmlzaW9uIDI3NzIxMCkK KysrIHN5cy9kZXYvZmR0L3NpbXBsZWJ1cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4 IEBACiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndf YnVzX3N1YnIuaD4KIAorI2luY2x1ZGUgPG1hY2hpbmUvZmR0Lmg+CisKIHN0cnVjdCBzaW1wbGVi dXNfcmFuZ2UgewogCXVpbnQ2NF90IGJ1czsKIAl1aW50NjRfdCBob3N0OwpAQCAtNjgsNiArNzAs OSBAQAogICAgIGludCAqLCB1X2xvbmcsIHVfbG9uZywgdV9sb25nLCB1X2ludCk7CiBzdGF0aWMg dm9pZAkJc2ltcGxlYnVzX3Byb2JlX25vbWF0Y2goZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGls ZCk7CiBzdGF0aWMgaW50CQlzaW1wbGVidXNfcHJpbnRfY2hpbGQoZGV2aWNlX3QgYnVzLCBkZXZp Y2VfdCBjaGlsZCk7CisjaWZkZWYgQVJNX0lOVFJORworc3RhdGljIGludAkJc2ltcGxlYnVzX3By aW50X2lycXMoc3RydWN0IHJlc291cmNlX2xpc3QgKnJsKTsKKyNlbmRpZgogCiAvKgogICogb2Z3 X2J1cyBpbnRlcmZhY2UKQEAgLTM0NCw3ICszNDksMTEgQEAKIAogCXJ2ID0gMDsKIAlydiArPSBy ZXNvdXJjZV9saXN0X3ByaW50X3R5cGUoJmRpLT5ybCwgIm1lbSIsIFNZU19SRVNfTUVNT1JZLCAi JSNseCIpOworI2lmZGVmIEFSTV9JTlRSTkcKKwlydiArPSBzaW1wbGVidXNfcHJpbnRfaXJxcygm ZGktPnJsKTsKKyNlbHNlCiAJcnYgKz0gcmVzb3VyY2VfbGlzdF9wcmludF90eXBlKCZkaS0+cmws ICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVsZCIpOworI2VuZGlmCiAJcmV0dXJuIChydik7CiB9CiAK QEAgLTM4MywzICszOTIsMjYgQEAKIAlydiArPSBidXNfcHJpbnRfY2hpbGRfZm9vdGVyKGJ1cywg Y2hpbGQpOwogCXJldHVybiAocnYpOwogfQorCisjaWZkZWYgQVJNX0lOVFJORworc3RhdGljIGlu dAorc2ltcGxlYnVzX3ByaW50X2lycXMoc3RydWN0IHJlc291cmNlX2xpc3QgKnJsKQoreworCXN0 cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5ICpybGU7CisJaW50IHByaW50ZWQsIHJldHZhbDsKKwor CXByaW50ZWQgPSAwOworCXJldHZhbCA9IDA7CisKKwlTVEFJTFFfRk9SRUFDSChybGUsIHJsLCBs aW5rKSB7CisJCWlmIChybGUtPnR5cGUgIT0gU1lTX1JFU19JUlEpCisJCQljb250aW51ZTsKKwor CQlyZXR2YWwgKz0gcHJpbnRmKCIlcyIsIHByaW50ZWQgPyAiLCIgOiAiIGlycSAiKTsKKwkJcmV0 dmFsICs9IHByaW50ZigiJXMiLCBGRFRfREVTQ1JJQkVfSVJRKHJsZS0+c3RhcnQpKTsKKwkJcHJp bnRlZCsrOworCX0KKworCXJldHVybiAocmV0dmFsKTsKK30KKyNlbmRpZgo= --001a113ad13c76bebd050cb126db Content-Type: application/octet-stream; name="pic_if.m" Content-Disposition: attachment; filename="pic_if.m" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i4y6ugkb1 Iy0KIyBDb3B5cmlnaHQgKGMpIDIwMTIgSmFrdWIgV29qY2llY2ggS2xhbWEgPGpjZWVsQEZyZWVC U0Qub3JnPgojIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIyBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK IyBhcmUgbWV0OgojIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgojIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu IHRoZQojICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCiMKIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiMgQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiMg SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UKIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQojIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCiMg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMKIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAojIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkKIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiMgU1VDSCBEQU1BR0UuCiMKIyAkRnJlZUJTRCQK IwoKI2luY2x1ZGUgIm9wdF9wbGF0Zm9ybS5oIgoKI2luY2x1ZGUgPHN5cy9idXMuaD4KI2luY2x1 ZGUgPHN5cy9jcHVzZXQuaD4KI2luY2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KI2luY2x1ZGUg PG1hY2hpbmUvZnJhbWUuaD4KI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgoKSU5URVJGQUNFIHBp YzsKCkNPREUgewoJc3RhdGljIGludCBudWxsX3BpY19iaW5kKGRldmljZV90IGRldiwgc3RydWN0 IGFybV9pcnFzcmMgKmlzcmMsCgkgICAgY3B1c2V0X3QgY3B1bWFzaykKCXsKCQlyZXR1cm4gKEVP UE5PVFNVUFApOwoJfQoKCXN0YXRpYyB2b2lkIG51bGxfcGljX2luaXRfc2Vjb25kYXJ5KGRldmlj ZV90IGRldikKCXsKCQlyZXR1cm47Cgl9CgoJc3RhdGljIHZvaWQgbnVsbF9waWNfaXBpX3NlbmQo ZGV2aWNlX3QgZGV2LCBjcHVzZXRfdCBjcHVzLCB1X2ludCBpcGkpCgl7CgkJcmV0dXJuOwoJfQp9 OwoKTUVUSE9EIGludCBiaW5kIHsKCWRldmljZV90CQlkZXY7CglzdHJ1Y3QgYXJtX2lycXNyYwkq aXNyYzsKCWNwdXNldF90CQljcHVtYXNrOwp9IERFRkFVTFQgbnVsbF9waWNfYmluZDsKCk1FVEhP RCBpbnQgY29uZmlnIHsKCWRldmljZV90CQlkZXY7CglzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsK CWVudW0gaW50cl90cmlnZ2VyCXRyaWc7CgllbnVtIGludHJfcG9sYXJpdHkJcG9sOwp9OwoKTUVU SE9EIGludCBtYXAgewoJZGV2aWNlX3QJCWRldjsKCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOwoJ dV9pbnQJCQl0eXBlOwoJdV9pbnQJCQludW07Cn07CgojaWZkZXQgRkRUCk1FVEhPRCBpbnQgbWFw X2ZkdCB7CglkZXZpY2VfdAkJZGV2OwoJc3RydWN0IGFybV9pcnFzcmMJKmlzcmM7CglwY2VsbF90 CQkJKmNlbGxzOwoJdV9pbnQJCQluY2VsbHM7Cn07CiNlbmRpZgoKTUVUSE9EIGludCB1bm1hcCB7 CglkZXZpY2VfdAkJZGV2OwoJc3RydWN0IGFybV9pcnFzcmMJKmlzcmM7Cn07CgpNRVRIT0Qgdm9p ZCBkaXNhYmxlIHsKCWRldmljZV90CQlkZXY7CglzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsKfTsK Ck1FVEhPRCB2b2lkIGVuYWJsZSB7CglkZXZpY2VfdAkJZGV2OwoJc3RydWN0IGFybV9pcnFzcmMJ KmlzcmM7Cn07CgpNRVRIT0Qgdm9pZCBwcmVfaXRocmVhZCB7CglkZXZpY2VfdAkJZGV2OwoJc3Ry dWN0IGFybV9pcnFzcmMJKmlzcmM7Cn07CgpNRVRIT0Qgdm9pZCBwb3N0X2l0aHJlYWQgewoJZGV2 aWNlX3QJCWRldjsKCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOwp9OwoKTUVUSE9EIHZvaWQgcG9z dF9maWx0ZXIgewoJZGV2aWNlX3QJCWRldjsKCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOwp9OwoK TUVUSE9EIHZvaWQgaW5pdF9zZWNvbmRhcnkgewoJZGV2aWNlX3QJZGV2Owp9IERFRkFVTFQgbnVs bF9waWNfaW5pdF9zZWNvbmRhcnk7CgpNRVRIT0Qgdm9pZCBpcGlfc2VuZCB7CglkZXZpY2VfdAkJ ZGV2OwoJc3RydWN0IGFybV9pcnFzcmMJKmlzcmM7CgljcHVzZXRfdAkJY3B1czsKfSBERUZBVUxU IG51bGxfcGljX2lwaV9zZW5kOwoK --001a113ad13c76bebd050cb126db--