Return-Path: MIME-Version: 1.0 In-Reply-To: References: Date: Wed, 13 Jan 2010 21:39:45 -0200 Message-ID: Subject: Re: [RFC] HFP support into oFono and BlueZ From: "Gustavo F. Padovan" To: linux-bluetooth , ofono@ofono.org, zhenhua.zhang@intel.com Content-Type: multipart/mixed; boundary=0016e6d27bb2138e65047d1449ce Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --0016e6d27bb2138e65047d1449ce Content-Type: text/plain; charset=UTF-8 Hi, On Mon, Jan 11, 2010 at 5:05 PM, Gustavo F. Padovan wrote: > On Mon, Jan 11, 2010 at 3:08 PM, Gustavo F. Padovan > wrote: >> Hi, >> >> These patches implement the new API for the Audio Gateway in BlueZ. It >> follows the last version of the HandsfreeGateway and HandsfreeAgent >> Intefaces API. >> The first two patches is for BlueZ and the other for oFono. You can >> test it with using enable-modem and test-voicecall scripts into the >> test dir of oFono. >> Feel free to test it and send me your comments. We have some bugs yet. > > New version of the patches: now we do not handle tty stuff on the BlueZ side. New version of the patches. Known issues: "'org.bluez.HandsfreeAgent.Release' part not implemented" and it's not working with more than one bluetooth devices in some cases. Comments are welcome. > >> >> The audio part is not working yet. We are going to work on pulseaudio >> this week to get this done soon. >> >> Regards, >> >> -- >> Gustavo F. Padovan >> ProFUSION embedded systems - http://profusion.mobi >> > > > > -- > Gustavo F. Padovan > ProFUSION embedded systems - http://profusion.mobi > -- Gustavo F. Padovan ProFUSION embedded systems - http://profusion.mobi --0016e6d27bb2138e65047d1449ce Content-Type: application/octet-stream; name="0001-clean-up-audio-gateway.c.patch" Content-Disposition: attachment; filename="0001-clean-up-audio-gateway.c.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4er2vhw3 RnJvbSA3ZWVhMjU3YTdiNGEwY2JjMDI2YWFiNmE2MGRmOWJiNTgwMDY1ODMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgNiBOb3YgMjAwOSAxODowODo1OCAtMDIwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBjbGVhbiB1cCBhdWRpby9nYXRld2F5LmMKCnJlbW92ZSBhbGwgY29kZSByZWxhdGVk IHRvIHRoZSBBVCBlbmdpbmUKLS0tCiBhdWRpby9nYXRld2F5LmMgfCAgNzYwICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZXMgY2hh bmdlZCwgMSBpbnNlcnRpb25zKCspLCA3NTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXVk aW8vZ2F0ZXdheS5jIGIvYXVkaW8vZ2F0ZXdheS5jCmluZGV4IGExYzFlYTIuLjNkYzA5ZmYgMTAw NjQ0Ci0tLSBhL2F1ZGlvL2dhdGV3YXkuYworKysgYi9hdWRpby9nYXRld2F5LmMKQEAgLTUzLDUy ICs1Myw2IEBACiAjaW5jbHVkZSAiZGJ1cy1jb21tb24uaCIKIAogI2RlZmluZSBSRkNPTU1fQlVG X1NJWkUgMjU2Ci0vKiBub3QtbW9yZS10aGVuLTE2IGRlZmluZWQgYnkgR1NNICsgMSBmb3IgTlVM TCArIHBhZGRpbmcgKi8KLSNkZWZpbmUgQUdfSU5ESUNBVE9SX0RFU0NSX1NJWkUgMjAKLSNkZWZp bmUgQUdfQ0FMTEVSX05VTV9TSVpFIDY0CS8qIHNpemUgb2YgbnVtYmVyICsgdHlwZSAqLwotCi0v KiBjb21tYW5kcyAqLwotI2RlZmluZSBBR19GRUFUVVJFUyAiQVQrQlJTRj0yNlxyIiAgICAgLyog PSAweDdGID0gQWxsIGZlYXR1cmVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBBR19JTkRJQ0FUT1JT X1NVUFAgIkFUK0NJTkQ9P1xyIgotI2RlZmluZSBBR19JTkRJQ0FUT1JTX1ZBTCAiQVQrQ0lORD9c ciIKLSNkZWZpbmUgQUdfSU5ESUNBVE9SU19FTkFCTEUgIkFUK0NNRVI9MywwLDAsMVxyIgotI2Rl ZmluZSBBR19IT0xEX01QVFlfU1VQUCAiQVQrQ0hMRD0/XHIiCi0jZGVmaW5lIEFHX0NBTExFUl9J REVOVF9FTkFCTEUgIkFUK0NMSVA9MVxyIgotI2RlZmluZSBBR19DQVJSSUVSX0ZPUk1BVCAiQVQr Q09QUz0zLDBcciIKLSNkZWZpbmUgQUdfRVhURU5ERURfUkVTVUxUX0NPREUgIkFUK0NNRUU9MVxy IgotCi0jZGVmaW5lIEFHX0ZFQVRVUkVfM1dBWSAweDEKLSNkZWZpbmUgQUdfRkVBVFVSRV9FWFRF TkRFRF9SRVNfQ09ERSAweDEwMAotLyogSG9sZCBhbmQgbXVsdGlwYXJ5IEFHIGZlYXR1cmVzLgot ICogQ29tbWVudHMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIGhhbmRzLWZyZWUgc3BlYyBmb3IgcmVm ZXJlbmNlICovCi0vKiBSZWxlYXNlcyBhbGwgaGVsZCBjYWxscyBvciBzZXRzIFVzZXIgRGV0ZXJt aW5lZCBVc2VyIEJ1c3kgKFVEVUIpCi0gKiBmb3IgYSB3YWl0aW5nIGNhbGwgKi8KLSNkZWZpbmUg QUdfQ0hMRF8wIDB4MDEKLS8qIFJlbGVhc2VzIGFsbCBhY3RpdmUgY2FsbHMgKGlmIGFueSBleGlz dCkgYW5kIGFjY2VwdHMgdGhlIG90aGVyCi0gKiAoaGVsZCBvciB3YWl0aW5nKSBjYWxsICovCi0j ZGVmaW5lIEFHX0NITERfMSAweDAyCi0vKiBSZWxlYXNlcyBzcGVjaWZpZWQgYWN0aXZlIGNhbGwg b25seSA8eD4gKi8KLSNkZWZpbmUgQUdfQ0hMRF8xeCAweDA0Ci0vKiBQbGFjZXMgYWxsIGFjdGl2 ZSBjYWxscyAoaWYgYW55IGV4aXN0KSBvbiBob2xkIGFuZCBhY2NlcHRzIHRoZSBvdGhlcgotICog KGhlbGQgb3Igd2FpdGluZykgY2FsbCAqLwotI2RlZmluZSBBR19DSExEXzIgMHgwOAotLyogUmVx dWVzdCBwcml2YXRlIGNvbnN1bHRhdGlvbiBtb2RlIHdpdGggc3BlY2lmaWVkIGNhbGwgPHg+IChQ bGFjZSBhbGwKLSAqIGNhbGxzIG9uIGhvbGQgRVhDRVBUIHRoZSBjYWxsIDx4PikgKi8KLSNkZWZp bmUgQUdfQ0hMRF8yeCAweDEwCi0vKiBBZGRzIGEgaGVsZCBjYWxsIHRvIHRoZSBjb252ZXJzYXRp b24gKi8KLSNkZWZpbmUgQUdfQ0hMRF8zIDB4MjAKLS8qIENvbm5lY3RzIHRoZSB0d28gY2FsbHMg YW5kIGRpc2Nvbm5lY3RzIHRoZSBzdWJzY3JpYmVyIGZyb20gYm90aCBjYWxscwotICogKEV4cGxp Y2l0IENhbGwgVHJhbnNmZXIpLiBTdXBwb3J0IGZvciB0aGlzIHZhbHVlIGFuZCBpdHMgYXNzb2Np YXRlZAotICogZnVuY3Rpb25hbGl0eSBpcyBvcHRpb25hbCBmb3IgdGhlIEhGLiAqLwotI2RlZmlu ZSBBR19DSExEXzQgMHg0MAotCi0jZGVmaW5lIE9LX1JFU1BPTlNFICJcclxuT0tcclxuIgotI2Rl ZmluZSBFUlJPUl9SRVNQT05TRSAiXHJcbkVSUk9SXHJcbiIKLQotc3RydWN0IGluZGljYXRvciB7 Ci0JZ2NoYXIgZGVzY3JbQUdfSU5ESUNBVE9SX0RFU0NSX1NJWkVdOwotCWdpbnQgdmFsdWU7Ci19 OwogCiBzdHJ1Y3QgZ2F0ZXdheSB7CiAJZ2F0ZXdheV9zdGF0ZV90IHN0YXRlOwpAQCAtMTA4LDM4 NyArNjIsMTAgQEAgc3RydWN0IGdhdGV3YXkgewogCWdhdGV3YXlfc3RyZWFtX2NiX3Qgc2NvX3N0 YXJ0X2NiOwogCXZvaWQgKnNjb19zdGFydF9jYl9kYXRhOwogCURCdXNNZXNzYWdlICpjb25uZWN0 X21lc3NhZ2U7Ci0JZ3VpbnQgYWdfZmVhdHVyZXM7Ci0JZ3VpbnQgaG9sZF9tdWx0aXBhcnR5X2Zl YXR1cmVzOwotCUdTTGlzdCAqaW5kaWVzOwotCWdib29sZWFuIGlzX2RpYWxpbmc7Ci0JZ2Jvb2xl YW4gY2FsbF9hY3RpdmU7Ci0KLQlpbnQgc3BfZ2FpbjsKLQlpbnQgbWljX2dhaW47CiB9OwogCi1z dGF0aWMgZ2Jvb2xlYW4gcmZjb21tX2FnX2RhdGFfY2IoR0lPQ2hhbm5lbCAqY2hhbiwgR0lPQ29u ZGl0aW9uIGNvbmQsCi0JCQkJCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7Ci0KIGludCBn YXRld2F5X2Nsb3NlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7CiAKLXN0YXRpYyB2b2lk IHJmY29tbV9zdGFydF93YXRjaChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRld2F5OwotCi0JZ3ctPnJmY29tbV93YXRjaF9pZCA9IGdf aW9fYWRkX3dhdGNoKGd3LT5yZmNvbW0sCi0JCQlHX0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hV UCB8IEdfSU9fTlZBTCwKLQkJCShHSU9GdW5jKSByZmNvbW1fYWdfZGF0YV9jYiwgZGV2KTsKLX0K LQotc3RhdGljIHZvaWQgcmZjb21tX3N0b3Bfd2F0Y2goc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2 KQotewotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKLQotCWdfc291cmNlX3Jl bW92ZShndy0+cmZjb21tX3dhdGNoX2lkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGlvX2NoYW5u ZWxfd3JpdGVfYWxsKEdJT0NoYW5uZWwgKmlvLCBnY2hhciAqZGF0YSwKLQkJCQkJZ3NpemUgY291 bnQpCi17Ci0JZ3NpemUgd3JpdHRlbiA9IDA7Ci0JR0lPU3RhdHVzIHN0YXR1czsKLQotCXdoaWxl IChjb3VudCA+IDApIHsKLQkJc3RhdHVzID0gZ19pb19jaGFubmVsX3dyaXRlX2NoYXJzKGlvLCBk YXRhLCBjb3VudCwgJndyaXR0ZW4sCi0JCQkJCQlOVUxMKTsKLQkJaWYgKHN0YXR1cyAhPSBHX0lP X1NUQVRVU19OT1JNQUwpCi0JCQlyZXR1cm4gRkFMU0U7Ci0KLQkJZGF0YSArPSB3cml0dGVuOwot CQljb3VudCAtPSB3cml0dGVuOwotCX0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyogaXQncyB3b3J0 aCB0byBtZW50aW9uIHRoYXQgZGF0YSBhbmQgcmVzcG9uc2UgY291bGQgYmUgdGhlIHNhbWUgcG9p bnRlcnMgKi8KLXN0YXRpYyBnYm9vbGVhbiByZmNvbW1fc2VuZF9hbmRfcmVhZChzdHJ1Y3QgZ2F0 ZXdheSAqZ3csIGdjaGFyICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2NoYXIgKnJlc3BvbnNlLCBnc2l6ZSBjb3VudCkKLXsKLQlHSU9DaGFubmVsICpyZmNvbW0g PSBndy0+cmZjb21tOwotCWdzaXplIHJlYWQgPSAwOwotCWdib29sZWFuIGdvdF9vayA9IEZBTFNF OwotCWdib29sZWFuIGdvdF9lcnJvciA9IEZBTFNFOwotCWdjaGFyICpyZXNwX2J1ZiA9IHJlc3Bv bnNlOwotCWdzaXplIHRvcmVhZCA9IFJGQ09NTV9CVUZfU0laRSAtIDE7Ci0JR0lPU3RhdHVzIHN0 YXR1czsKLQotCWlmICghaW9fY2hhbm5lbF93cml0ZV9hbGwocmZjb21tLCBkYXRhLCBjb3VudCkp Ci0JCXJldHVybiBGQUxTRTsKLQotCXdoaWxlICghKGdvdF9vayB8fCBnb3RfZXJyb3IpKSB7Ci0J CXN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKHJmY29tbSwgcmVzcF9idWYsIHRvcmVh ZCwKLQkJCQkJCSZyZWFkLCBOVUxMKTsKLQkJaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19OT1JN QUwpCi0JCQlyZXNwX2J1ZltyZWFkXSA9ICdcMCc7Ci0JCWVsc2UgewotCQkJZGVidWcoInJmY29t bV9zZW5kX2FuZF9yZWFkKCk6ICVtIik7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJZ290X29r ID0gTlVMTCAhPSBzdHJzdHIocmVzcF9idWYsIE9LX1JFU1BPTlNFKTsKLQkJZ290X2Vycm9yID0g TlVMTCAhPSBzdHJzdHIocmVzcF9idWYsIEVSUk9SX1JFU1BPTlNFKTsKLQkJcmVzcF9idWYgKz0g cmVhZDsKLQkJdG9yZWFkIC09IHJlYWQ7Ci0JfQotCXJldHVybiBUUlVFOwotfQotCi0vKiBnZXQg PGRlc2NyPiBmcm9tIHRoZSBuYW1lczogKDxkZXNjcj4sICg8dmFsdWVzPikpLCAoPGRlc2NyPiwg KDx2YWx1ZXM+KSkKLSAqIC4uLiAqLwotc3RhdGljIEdTTGlzdCAqcGFyc2VfaW5kaWNhdG9yX25h bWVzKGdjaGFyICpuYW1lcywgR1NMaXN0ICppbmRpZXMpCi17Ci0JZ2NoYXIgKmN1cnJlbnQgPSBu YW1lcyAtIDE7Ci0JR1NMaXN0ICpyZXN1bHQgPSBpbmRpZXM7Ci0JZ2NoYXIgKm5leHQ7Ci0Jc3Ry dWN0IGluZGljYXRvciAqaW5kOwotCi0Jd2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkgewotCQljdXJy ZW50ICs9IDI7Ci0JCW5leHQgPSBzdHJzdHIoY3VycmVudCwgIiwoIik7Ci0JCWluZCA9IGdfc2xp Y2VfbmV3KHN0cnVjdCBpbmRpY2F0b3IpOwotCQlzdHJuY3B5KGluZC0+ZGVzY3IsIGN1cnJlbnQs IDIwKTsKLQkJaW5kLT5kZXNjclsoaW50cHRyX3QpIG5leHQgLSAoaW50cHRyX3QpIGN1cnJlbnRd ID0gJ1wwJzsKLQkJcmVzdWx0ID0gZ19zbGlzdF9hcHBlbmQocmVzdWx0LCAoZ3BvaW50ZXIpIGlu ZCk7Ci0JCWN1cnJlbnQgPSBzdHJzdHIobmV4dCArIDEsICIsKCIpOwotCX0KLQlyZXR1cm4gcmVz dWx0OwotfQotCi0vKiBnZXQgdmFsdWVzIGZyb20gPHZhbDA+LDx2YWwxPiwuLi4gKi8KLXN0YXRp YyBHU0xpc3QgKnBhcnNlX2luZGljYXRvcl92YWx1ZXMoZ2NoYXIgKnZhbHVlcywgR1NMaXN0ICpp bmRpZXMpCi17Ci0JZ2ludCB2YWw7Ci0JZ2NoYXIgKmN1cnJlbnQgPSB2YWx1ZXMgLSAxOwotCUdT TGlzdCAqcnVubmVyID0gaW5kaWVzOwotCXN0cnVjdCBpbmRpY2F0b3IgKmluZDsKLQotCXdoaWxl IChjdXJyZW50ICE9IE5VTEwpIHsKLQkJY3VycmVudCArPSAxOwotCQlzc2NhbmYoY3VycmVudCwg IiVkIiwgJnZhbCk7Ci0JCWN1cnJlbnQgPSBzdHJjaHIoY3VycmVudCwgJywnKTsKLQkJaW5kID0g Z19zbGlzdF9udGhfZGF0YShydW5uZXIsIDApOwotCQlpbmQtPnZhbHVlID0gdmFsOwotCQlydW5u ZXIgPSBnX3NsaXN0X25leHQocnVubmVyKTsKLQl9Ci0JcmV0dXJuIGluZGllczsKLX0KLQotLyog Z2V0IHZhbHVlcyBmcm9tIDx2YWwwPiw8dmFsMT4sLi4uICovCi1zdGF0aWMgZ3VpbnQgZ2V0X2hv bGRfbXB0eV9mZWF0dXJlcyhnY2hhciAqZmVhdHVyZXMpCi17Ci0JZ3VpbnQgcmVzdWx0ID0gMDsK LQotCWlmIChzdHJzdHIoZmVhdHVyZXMsICIwIikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzA7Ci0K LQlpZiAoc3Ryc3RyKGZlYXR1cmVzLCAiMSIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF8xOwotCi0J aWYgKHN0cnN0cihmZWF0dXJlcywgIjF4IikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzF4OwotCi0J aWYgKHN0cnN0cihmZWF0dXJlcywgIjIiKSkKLQkJcmVzdWx0IHw9IEFHX0NITERfMjsKLQotCWlm IChzdHJzdHIoZmVhdHVyZXMsICIyeCIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF8yeDsKLQotCWlm IChzdHJzdHIoZmVhdHVyZXMsICIzIikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzM7Ci0KLQlpZiAo c3Ryc3RyKGZlYXR1cmVzLCAiNCIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF80OwotCi0JcmV0dXJu IHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuIGVzdGFibGlzaF9zZXJ2aWNlX2xldmVsX2Nv bm4oc3RydWN0IGdhdGV3YXkgKmd3KQotewotCWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOwot CWdib29sZWFuIHJlczsKLQotCWRlYnVnKCJhdCB0aGUgYmVnaW4gb2YgZXN0YWJsaXNoX3NlcnZp Y2VfbGV2ZWxfY29ubigpIik7Ci0JcmVzID0gcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0ZF QVRVUkVTLCBidWYsCi0JCQkJc2l6ZW9mKEFHX0ZFQVRVUkVTKSAtIDEpOwotCWlmICghcmVzIHx8 IHNzY2FuZihidWYsICJcclxuK0JSU0Y6JWQiLCAmZ3ctPmFnX2ZlYXR1cmVzKSAhPSAxKQotCQly ZXR1cm4gRkFMU0U7Ci0KLQlkZWJ1ZygiZmVhdHVyZXMgYXJlIDB4JVgiLCBndy0+YWdfZmVhdHVy ZXMpOwotCXJlcyA9IHJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19JTkRJQ0FUT1JTX1NVUFAs IGJ1ZiwKLQkJCQlzaXplb2YoQUdfSU5ESUNBVE9SU19TVVBQKSAtIDEpOwotCWlmICghcmVzIHx8 ICFzdHJzdHIoYnVmLCAiK0NJTkQ6IikpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3LT5pbmRpZXMg PSBwYXJzZV9pbmRpY2F0b3JfbmFtZXMoc3RyY2hyKGJ1ZiwgJygnKSwgTlVMTCk7Ci0KLQlyZXMg PSByZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfSU5ESUNBVE9SU19WQUwsIGJ1ZiwKLQkJc2l6 ZW9mKEFHX0lORElDQVRPUlNfVkFMKSAtIDEpOwotCWlmICghcmVzIHx8ICFzdHJzdHIoYnVmLCAi K0NJTkQ6IikpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3LT5pbmRpZXMgPSBwYXJzZV9pbmRpY2F0 b3JfdmFsdWVzKHN0cmNocihidWYsICc6JykgKyAxLCBndy0+aW5kaWVzKTsKLQotCXJlcyA9IHJm Y29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19JTkRJQ0FUT1JTX0VOQUJMRSwgYnVmLAotCQkJCXNp emVvZihBR19JTkRJQ0FUT1JTX0VOQUJMRSkgLSAxKTsKLQlpZiAoIXJlcyB8fCAhc3Ryc3RyKGJ1 ZiwgIk9LIikpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICgoZ3ctPmFnX2ZlYXR1cmVzICYgQUdf RkVBVFVSRV8zV0FZKSAhPSAwKSB7Ci0JCXJlcyA9IHJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBB R19IT0xEX01QVFlfU1VQUCwgYnVmLAotCQkJCXNpemVvZihBR19IT0xEX01QVFlfU1VQUCkgLSAx KTsKLQkJaWYgKCFyZXMgfHwgIXN0cnN0cihidWYsICIrQ0hMRDoiKSkgewotCQkJZ19zbGljZV9m cmVlMShSRkNPTU1fQlVGX1NJWkUsIGJ1Zik7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJZ3ct PmhvbGRfbXVsdGlwYXJ0eV9mZWF0dXJlcyA9IGdldF9ob2xkX21wdHlfZmVhdHVyZXMoCi0JCQkJ CQkJc3RyY2hyKGJ1ZiwgJygnKSk7Ci0KLQl9IGVsc2UKLQkJZ3ctPmhvbGRfbXVsdGlwYXJ0eV9m ZWF0dXJlcyA9IDA7Ci0KLQlkZWJ1ZygiU2VydmljZSBsYXllciBjb25uZWN0aW9uIHN1Y2Nlc3Nm dWxseSBlc3RhYmxpc2hlZCEiKTsKLQlyZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfQ0FMTEVS X0lERU5UX0VOQUJMRSwgYnVmLAotCQkJc2l6ZW9mKEFHX0NBTExFUl9JREVOVF9FTkFCTEUpIC0g MSk7Ci0JcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0NBUlJJRVJfRk9STUFULCBidWYsCi0J CQlzaXplb2YoQUdfQ0FSUklFUl9GT1JNQVQpIC0gMSk7Ci0JaWYgKChndy0+YWdfZmVhdHVyZXMg JiBBR19GRUFUVVJFX0VYVEVOREVEX1JFU19DT0RFKSAhPSAwKQotCQlyZmNvbW1fc2VuZF9hbmRf cmVhZChndywgQUdfRVhURU5ERURfUkVTVUxUX0NPREUsIGJ1ZiwKLQkJCXNpemVvZihBR19FWFRF TkRFRF9SRVNVTFRfQ09ERSkgLSAxKTsKLQotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9p ZCBwcm9jZXNzX2luZF9jaGFuZ2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBndWludCBpbmRl eCwKLQkJCQkJCQlnaW50IHZhbHVlKQotewotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0 ZXdheTsKLQlzdHJ1Y3QgaW5kaWNhdG9yICppbmQgPSBnX3NsaXN0X250aF9kYXRhKGd3LT5pbmRp ZXMsIGluZGV4IC0gMSk7Ci0JZ2NoYXIgKm5hbWUgPSBpbmQtPmRlc2NyOwotCi0JaW5kLT52YWx1 ZSA9IHZhbHVlOwotCi0JZGVidWcoImF0IHRoZSBiZWdpbiBvZiBwcm9jZXNzX2luZF9jaGFuZ2Us IG5hbWUgaXMgJXMiLCBuYW1lKTsKLQlpZiAoIXN0cmNtcChuYW1lLCAiXCJjYWxsXCIiKSkgewot CQlpZiAodmFsdWUgPiAwKSB7Ci0JCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYt PnBhdGgsCi0JCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNFLAotCQkJCQkiQ2FsbFN0YXJ0ZWQi LCBEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCQlndy0+aXNfZGlhbGluZyA9IEZBTFNFOwotCQkJZ3ct PmNhbGxfYWN0aXZlID0gVFJVRTsKLQkJfSBlbHNlIHsKLQkJCWdfZGJ1c19lbWl0X3NpZ25hbChk ZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsCi0JCQkJ CSJDYWxsRW5kZWQiLCBEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCQlndy0+Y2FsbF9hY3RpdmUgPSBG QUxTRTsKLQkJfQotCi0JfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJcImNhbGxzZXR1cFwiIikp IHsKLQkJaWYgKHZhbHVlID09IDAgJiYgZ3ctPmlzX2RpYWxpbmcpIHsKLQkJCWdfZGJ1c19lbWl0 X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9JTlRFUkZB Q0UsCi0JCQkJCSJDYWxsVGVybWluYXRlZCIsCi0JCQkJCURCVVNfVFlQRV9JTlZBTElEKTsKLQkJ CWd3LT5pc19kaWFsaW5nID0gRkFMU0U7Ci0JCX0gZWxzZSBpZiAoIWd3LT5pc19kaWFsaW5nICYm IHZhbHVlID4gMCkKLQkJCWd3LT5pc19kaWFsaW5nID0gVFJVRTsKLQotCX0gZWxzZSBpZiAoIXN0 cmNtcChuYW1lLCAiXCJjYWxsaGVsZFwiIikpIHsKLQkJLyogRklYTUU6IFRoZSBmb2xsb3dpbmcg Y29kZSBpcyBiYXNlZCBvbiBhc3N1bXB0aW9ucyBvbmx5LgotCQkgKiBIYXMgdG8gYmUgdGVzdGVk IGZvciBpbnRlcm9wZXJhYmlsaXR5Ci0JCSAqIEkgYXNzdW1lIHRoYXQgY2FsbGhlbGQ9MiB3b3Vs ZCBiZSBzZW50IHdoZW4gZGlhbCBmcm9tIEhGCi0JCSAqIGZhaWxlZCBpbiBjYXNlIG9mIDMtd2F5 IGNhbGwKLQkJICogVW5mb3J0dW5hdGVseSB0aGlzIHBhdGggaXMgbm90IGNvdmVyZWQgYnkgdGhl IEhGIHNwZWMgc28KLQkJICogdGhlIGNvZGUgaGFzIHRvIGJlIHRlc3RlZCBmb3IgaW50ZXJvcAot CQkqLwotCQkvKiAnMicgbWVhbnM6IGFsbCBjYWxscyBoZWxkLCBubyBhY3RpdmUgY2FsbHMgKi8K LQkJaWYgKHZhbHVlID09IDIpIHsKLQkJCWlmIChndy0+aXNfZGlhbGluZykgewotCQkJCWdfZGJ1 c19lbWl0X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9J TlRFUkZBQ0UsCi0JCQkJCSJDYWxsVGVybWluYXRlZCIsCi0JCQkJCURCVVNfVFlQRV9JTlZBTElE KTsKLQkJCQlndy0+aXNfZGlhbGluZyA9IEZBTFNFOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmICgh c3RyY21wKG5hbWUsICJcInNlcnZpY2VcIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2 LT5jb25uLCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJSZWdpc3Ry YXRpb25TdGF0dXMiLAotCQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2YWx1ZSk7Ci0JZWxzZSBpZiAo IXN0cmNtcChuYW1lLCAiXCJzaWduYWxcIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2 LT5jb25uLCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJTaWduYWxT dHJlbmd0aCIsCi0JCQkJREJVU19UWVBFX1VJTlQxNiwgJnZhbHVlKTsKLQllbHNlIGlmICghc3Ry Y21wKG5hbWUsICJcInJvYW1cIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2LT5jb25u LCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJSb2FtaW5nU3RhdHVz IiwKLQkJCQlEQlVTX1RZUEVfVUlOVDE2LCAmdmFsdWUpOwotCWVsc2UgaWYgKCFzdHJjbXAobmFt ZSwgIlwiYmF0dGNoZ1wiIikpCi0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXYtPmNvbm4sIGRl di0+cGF0aCwKLQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIkJhdHRlcnlDaGFyZ2UiLAot CQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3Nf cmluZyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UsIEdJT0NoYW5uZWwgKmNoYW4sCi0JCQln Y2hhciAqYnVmKQotewotCWdjaGFyIG51bWJlcltBR19DQUxMRVJfTlVNX1NJWkVdOwotCWdjaGFy ICpjbGk7Ci0JZ2NoYXIgKnNlcDsKLQlnc2l6ZSByZWFkOwotCUdJT1N0YXR1cyBzdGF0dXM7Ci0K LQlyZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOwotCXN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFk X2NoYXJzKGNoYW4sIGJ1ZiwgUkZDT01NX0JVRl9TSVpFIC0gMSwgJnJlYWQsIE5VTEwpOwotCWlm IChzdGF0dXMgIT0gR19JT19TVEFUVVNfTk9STUFMKQotCQlyZXR1cm47Ci0KLQlkZWJ1ZygiYXQg dGhlIGJlZ2luIG9mIHByb2Nlc3NfcmluZyIpOwotCWlmIChzdHJsZW4oYnVmKSA+IEFHX0NBTExF Ul9OVU1fU0laRSArIDEwKQotCQllcnJvcigicHJvY2Vzc19yaW5nKCk6IGJ1ZiBpcyB0b28gbG9u ZyAnJXMnIiwgYnVmKTsKLQllbHNlIGlmICgoY2xpID0gc3Ryc3RyKGJ1ZiwgIlxyXG4rQ0xJUCIp KSkgewotCQlpZiAoc3NjYW5mKGNsaSwgIlxyXG4rQ0xJUDogXCIlcyIsIG51bWJlcikgPT0gMSkg ewotCQkJc2VwID0gc3RyY2hyKG51bWJlciwgJyInKTsKLQkJCXNlcFswXSA9ICdcMCc7Ci0KLQkJ CS8qIEZJWE1FOnNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgb24gZWFjaCBSSU5HK0NMSVAuCi0JCQkg KiBUaGF0J3MgYmFkICovCi0JCQljbGkgPSBudW1iZXI7Ci0JCQlnX2RidXNfZW1pdF9zaWduYWwo ZGV2aWNlLT5jb25uLCBkZXZpY2UtPnBhdGgsCi0JCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNF LCAiUmluZyIsCi0JCQkJCURCVVNfVFlQRV9TVFJJTkcsICZjbGksCi0JCQkJCURCVVNfVFlQRV9J TlZBTElEKTsKLQkJCWRldmljZS0+Z2F0ZXdheS0+aXNfZGlhbGluZyA9IFRSVUU7Ci0JCX0gZWxz ZQotCQkJZXJyb3IoInByb2Nlc3NfcmluZygpOiAnJXMnIGluIHBsYWNlIG9mICtDTElQIGFmdGVy IFJJTkciLCBidWYpOwotCi0JfQotCi0JcmZjb21tX3N0YXJ0X3dhdGNoKGRldmljZSk7Ci19Ci0K LXN0YXRpYyBnYm9vbGVhbiByZmNvbW1fYWdfZGF0YV9jYihHSU9DaGFubmVsICpjaGFuLCBHSU9D b25kaXRpb24gY29uZCwKLQkJCQkJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQotewotCWdj aGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOwotCXN0cnVjdCBnYXRld2F5ICpndzsKLQlnc2l6ZSBy ZWFkOwotCS8qIHNvbWUgc3BhY2UgZm9yIHZhbHVlICovCi0JZ2NoYXIgaW5kaWNhdG9yW0FHX0lO RElDQVRPUl9ERVNDUl9TSVpFICsgNF07Ci0JZ2ludCB2YWx1ZTsKLQlndWludCBpbmRleDsKLQln Y2hhciAqc2VwOwotCi0JZGVidWcoImF0IHRoZSBiZWdpbiBvZiByZmNvbW1fYWdfZGF0YV9jYigp Iik7Ci0JaWYgKGNvbmQgJiBHX0lPX05WQUwpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3ID0gZGV2 aWNlLT5nYXRld2F5OwotCi0JaWYgKGNvbmQgJiAoR19JT19FUlIgfCBHX0lPX0hVUCkpIHsKLQkJ ZGVidWcoImNvbm5lY3Rpb24gd2l0aCByZW1vdGUgQlQgaXMgY2xvc2VkIik7Ci0JCWdhdGV3YXlf Y2xvc2UoZGV2aWNlKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmIChnX2lvX2NoYW5uZWxf cmVhZF9jaGFycyhjaGFuLCBidWYsIHNpemVvZihidWYpIC0gMSwgJnJlYWQsIE5VTEwpCi0JCQkh PSBHX0lPX1NUQVRVU19OT1JNQUwpCi0JCXJldHVybiBUUlVFOwotCWJ1ZltyZWFkXSA9ICdcMCc7 Ci0KLQlpZiAoc3RybGVuKGJ1ZikgPiBBR19JTkRJQ0FUT1JfREVTQ1JfU0laRSArIDE0KQotCQll cnJvcigicmZjb21tX2FnX2RhdGFfY2IoKTogYnVmIGlzIHRvbyBsb25nICclcyciLCBidWYpOwot CWVsc2UgaWYgKHNzY2FuZihidWYsICJcclxuK0NJRVY6JXNcclxuIiwgaW5kaWNhdG9yKSA9PSAx KSB7Ci0JCXNlcCA9IHN0cmNocihpbmRpY2F0b3IsICcsJyk7Ci0JCXNlcFswXSA9ICdcMCc7Ci0J CXNlcCArPSAxOwotCQlpbmRleCA9IGF0b2koaW5kaWNhdG9yKTsKLQkJdmFsdWUgPSBhdG9pKHNl cCk7Ci0JCXByb2Nlc3NfaW5kX2NoYW5nZShkZXZpY2UsIGluZGV4LCB2YWx1ZSk7Ci0JfSBlbHNl IGlmIChzdHJzdHIoYnVmLCAiUklORyIpKQotCQlwcm9jZXNzX3JpbmcoZGV2aWNlLCBjaGFuLCBi dWYpOwotCWVsc2UgaWYgKHNzY2FuZihidWYsICJcclxuK0JWUkE6JWRcclxuIiwgJnZhbHVlKSA9 PSAxKSB7Ci0JCWlmICh2YWx1ZSA9PSAwKQotCQkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldmljZS0+ Y29ubiwgZGV2aWNlLT5wYXRoLAotCQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKLQkJCQkJ IlZvaWNlUmVjb2duaXRpb25BY3RpdmUiLAotCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCWVs c2UKLQkJCWdfZGJ1c19lbWl0X3NpZ25hbChkZXZpY2UtPmNvbm4sIGRldmljZS0+cGF0aCwKLQkJ CQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsCi0JCQkJCSJWb2ljZVJlY29nbml0aW9uSW5hY3Rp dmUiLAotCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAi XHJcbitWR1M6JWRcclxuIiwgJnZhbHVlKSA9PSAxKSB7Ci0JCWd3LT5zcF9nYWluID0gdmFsdWU7 Ci0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXZpY2UtPmNvbm4sIGRldmljZS0+cGF0aCwKLQkJ CQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIlNwZWFrZXJHYWluIiwKLQkJCQlEQlVTX1RZUEVf VUlOVDE2LCAmdmFsdWUpOwotCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgIlxyXG4rVkdNOiVkXHJc biIsICZ2YWx1ZSkgPT0gMSkgewotCQlndy0+bWljX2dhaW4gPSB2YWx1ZTsKLQkJZW1pdF9wcm9w ZXJ0eV9jaGFuZ2VkKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLAotCQkJCUFVRElPX0dBVEVX QVlfSU5URVJGQUNFLCAiTWljcm9waG9uZUdhaW4iLAotCQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2 YWx1ZSk7Ci0JfSBlbHNlCi0JCWVycm9yKCJyZmNvbW1fYWdfZGF0YV9jYigpOiByZWFkIHdyb25n IGRhdGEgJyVzJyIsIGJ1Zik7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQogc3RhdGljIGdib29sZWFu IHNjb19pb19jYihHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZCwKIAkJCXN0cnVj dCBhdWRpb19kZXZpY2UgKmRldikKIHsKQEAgLTU0MSw3ICsxMTgsNiBAQCBzdGF0aWMgdm9pZCBy ZmNvbW1fY29ubmVjdF9jYihHSU9DaGFubmVsICpjaGFuLCBHRXJyb3IgKmVyciwKIHsKIAlzdHJ1 Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSB1c2VyX2RhdGE7CiAJc3RydWN0IGdhdGV3YXkgKmd3ID0g ZGV2LT5nYXRld2F5OwotCURCdXNNZXNzYWdlICpjb25uX21lcyA9IGd3LT5jb25uZWN0X21lc3Nh Z2U7CiAJZ2NoYXIgZ3dfYWRkclsxOF07CiAJR0lPRmxhZ3MgZmxhZ3M7CiAKQEAgLTU2MywyOSAr MTM5LDYgQEAgc3RhdGljIHZvaWQgcmZjb21tX2Nvbm5lY3RfY2IoR0lPQ2hhbm5lbCAqY2hhbiwg R0Vycm9yICplcnIsCiAJaWYgKCFndy0+cmZjb21tKQogCQlndy0+cmZjb21tID0gZ19pb19jaGFu bmVsX3JlZihjaGFuKTsKIAotCWlmIChlc3RhYmxpc2hfc2VydmljZV9sZXZlbF9jb25uKGRldi0+ Z2F0ZXdheSkpIHsKLQkJZ2Jvb2xlYW4gdmFsdWUgPSBUUlVFOwotCi0JCWRlYnVnKCIlczogQ29u bmVjdGVkIHRvICVzIiwgZGV2LT5wYXRoLCBnd19hZGRyKTsKLQkJcmZjb21tX3N0YXJ0X3dhdGNo KGRldik7Ci0JCWlmIChjb25uX21lcykgewotCQkJREJ1c01lc3NhZ2UgKnJlcGx5ID0KLQkJCQlk YnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4oY29ubl9tZXMpOwotCQkJZGJ1c19jb25uZWN0 aW9uX3NlbmQoZGV2LT5jb25uLCByZXBseSwgTlVMTCk7Ci0JCQlkYnVzX21lc3NhZ2VfdW5yZWYo cmVwbHkpOwotCQkJZGJ1c19tZXNzYWdlX3VucmVmKGNvbm5fbWVzKTsKLQkJCWd3LT5jb25uZWN0 X21lc3NhZ2UgPSBOVUxMOwotCQl9Ci0KLQkJZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9DT05O RUNURUQ7Ci0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJ CQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKLQkJCQkiQ29ubmVjdGVkIiwgREJVU19UWVBFX0JP T0xFQU4sCSZ2YWx1ZSk7Ci0JCXJldHVybjsKLQl9IGVsc2UKLQkJZXJyb3IoIiVzOiBGYWlsZWQg dG8gZXN0YWJsaXNoIHNlcnZpY2UgbGF5ZXIgY29ubmVjdGlvbiB0byAlcyIsCi0JCQlkZXYtPnBh dGgsIGd3X2FkZHIpOwotCiAJaWYgKE5VTEwgIT0gZ3ctPnNjb19zdGFydF9jYikKIAkJZ3ctPnNj b19zdGFydF9jYihOVUxMLCBndy0+c2NvX3N0YXJ0X2NiX2RhdGEpOwogCkBAIC03MzIsMzIxICsy ODUsMjAgQEAgc3RhdGljIERCdXNNZXNzYWdlICphZ19kaXNjb25uZWN0KERCdXNDb25uZWN0aW9u ICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAogCXJldHVybiByZXBseTsKIH0KIAotc3RhdGljIERC dXNNZXNzYWdlICpwcm9jZXNzX2FnX3JlcG9uc2UoREJ1c01lc3NhZ2UgKm1zZywgZ2NoYXIgKnJl c3BvbnNlKQotewotCURCdXNNZXNzYWdlICpyZXBseTsKLQotCi0JZGVidWcoImluIHByb2Nlc3Nf YWdfcmVwb25zZSwgcmVzcG9uc2UgaXMgJXMiLCByZXNwb25zZSk7Ci0JaWYgKHN0cnN0cihyZXNw b25zZSwgT0tfUkVTUE9OU0UpKQotCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3Jl dHVybihtc2cpOwotCWVsc2UgewotCQkvKiBGSVhNRTogc29tZSBjb2RlIHNob3VsZCBiZSBoZXJl IHRvIHByb2Nlc3NlcyBlcnJvcnMKLQkJICogIGluIGJldHRlciBmYXNpb24gKi8KLQkJZGVidWco IkFHIHJlc3BvbmRlZCB3aXRoICclcycgdG8gJXMgbWV0aG9kIGNhbGwiLCByZXNwb25zZSwKLQkJ CQlkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtc2cpKTsKLQkJcmVwbHkgPSBkYnVzX21lc3NhZ2Vf bmV3X2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFCi0JCQkJCSIuT3BlcmF0aW9uRmFpbGVkIiwK LQkJCQkJIk9wZXJhdGlvbiBmYWlsZWQuU2VlIGxvZyBmb3IgZGV0YWlscyIpOwotCX0KLQlyZXR1 cm4gcmVwbHk7Ci19Ci0KLXN0YXRpYyBEQnVzTWVzc2FnZSAqcHJvY2Vzc19zaW1wbGUoREJ1c01l c3NhZ2UgKm1zZywgc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LAotCQkJCQlnY2hhciAqZGF0YSkK LXsKLQlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7Ci0JZ2NoYXIgYnVmW1JGQ09N TV9CVUZfU0laRV07Ci0KLQlyZmNvbW1fc3RvcF93YXRjaChkZXYpOwotCXJmY29tbV9zZW5kX2Fu ZF9yZWFkKGd3LCBkYXRhLCBidWYsIHN0cmxlbihkYXRhKSk7Ci0JcmZjb21tX3N0YXJ0X3dhdGNo KGRldik7Ci0JcmV0dXJuIHByb2Nlc3NfYWdfcmVwb25zZShtc2csIGJ1Zik7Ci19Ci0KLSNkZWZp bmUgQUdfQU5TV0VSICJBVEFcciIKLQotc3RhdGljIERCdXNNZXNzYWdlICphZ19hbnN3ZXIoREJ1 c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9 IGRldi0+Z2F0ZXdheTsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVh dGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJ CQkiTm90IENvbm5lY3RlZCIpOwotCi0JaWYgKGd3LT5jYWxsX2FjdGl2ZSkKLQkJcmV0dXJuIGdf ZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5DYWxsQWxyZWFk eUFuc3dlcmVkIiwKLQkJCQkJIkNhbGwgQWxyZWFkeUFuc3dlcmVkIik7Ci0KLQlyZXR1cm4gcHJv Y2Vzc19zaW1wbGUobXNnLCBkZXYsIEFHX0FOU1dFUik7Ci19Ci0KLSNkZWZpbmUgQUdfSEFOR1VQ ICJBVCtDSFVQXHIiCi0KLXN0YXRpYyBEQnVzTWVzc2FnZSAqYWdfdGVybWluYXRlX2NhbGwoREJ1 c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9 IGRldi0+Z2F0ZXdheTsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVh dGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJ CQkiTm90IENvbm5lY3RlZCIpOwotCi0JcmV0dXJuIHByb2Nlc3Nfc2ltcGxlKG1zZywgZGV2LCBB R19IQU5HVVApOwotfQotCi0vKiBhY2NvcmRpbmcgdG8gR1NNIHNwZWMgKi8KLSNkZWZpbmUgQUxM T1dFRF9OVU1CRVJfU1lNQk9MUyAiMTIzNDU2Nzg5MCojQUJDRCIKLSNkZWZpbmUgQUdfUExBQ0Vf Q0FMTCAiQVREJXM7XHIiCi0vKiBkaWFsaW5nIGZyb20gbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQg YXMgaGVhZHNldCBzcGVjIGRvZXNuJ3QgZGVmaW5lIGEgd2F5Ci0gKiB0byByZXRyZWl2ZSBwaG9u ZSBtZW1vcnkgZW50cmllcy4KLSAqLwotc3RhdGljIERCdXNNZXNzYWdlICphZ19jYWxsKERCdXND b25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAotCQkJCXZvaWQgKmRhdGEpCi17Ci0J c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0YTsKLQlzdHJ1Y3QgZ2F0ZXdheSAqZ3cg PSBkZXZpY2UtPmdhdGV3YXk7Ci0JZ2NoYXIgYnVmW1JGQ09NTV9CVUZfU0laRV07Ci0JZ2NoYXIg Km51bWJlcjsKLQlnaW50IGF0ZF9sZW47Ci0JREJ1c01lc3NhZ2UgKnJlc3VsdDsKLQotCWRlYnVn KCJhdCB0aGUgYmVnaW4gb2YgYWdfY2FsbCgpIik7Ci0JaWYgKCFndy0+cmZjb21tKQotCQlyZXR1 cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJCQkiLk5vdENv bm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVkIik7Ci0KLQlkYnVzX21lc3NhZ2VfZ2V0X2Fy Z3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfU1RSSU5HLCAmbnVtYmVyLAotCQkJCURCVVNfVFlQRV9J TlZBTElEKTsKLQlpZiAoc3RybGVuKG51bWJlcikgIT0gc3Ryc3BuKG51bWJlciwgQUxMT1dFRF9O VU1CRVJfU1lNQk9MUykpCi0JCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywKLQkJ CUVSUk9SX0lOVEVSRkFDRSAiLkJhZE51bWJlciIsCi0JCQkiTnVtYmVyIGNvbnRhaW5zIGNoYXJh Y3RlcnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIik7Ci0KLQlhdGRfbGVuID0gc3ByaW50ZihidWYs IEFHX1BMQUNFX0NBTEwsIG51bWJlcik7Ci0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKLQly ZmNvbW1fc2VuZF9hbmRfcmVhZChndywgYnVmLCBidWYsIGF0ZF9sZW4pOwotCXJmY29tbV9zdGFy dF93YXRjaChkZXZpY2UpOwotCi0JcmVzdWx0ID0gcHJvY2Vzc19hZ19yZXBvbnNlKG1zZywgYnVm KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0jZGVmaW5lIEFHX0dFVF9DQVJSSUVSICJBVCtDT1BT P1xyIgotCi1zdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2dldF9vcGVyYXRvcihEQnVzQ29ubmVjdGlv biAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKLQkJCQkJdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qg YXVkaW9fZGV2aWNlICpkZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhOwotCXN0cnVj dCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKLQlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpF XTsKLQlHSU9DaGFubmVsICpyZmNvbW0gPSBndy0+cmZjb21tOwotCWdzaXplIHJlYWQ7Ci0JZ2No YXIgKnJlc3VsdCwgKnNlcDsKLQlEQnVzTWVzc2FnZSAqcmVwbHk7Ci0JR0lPU3RhdHVzIHN0YXR1 czsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNn LCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJCQkiTm90IENvbm5l Y3RlZCIpOwotCi0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2KTsKLQlpb19jaGFubmVsX3dyaXRlX2Fs bChyZmNvbW0sIEFHX0dFVF9DQVJSSUVSLCBzdHJsZW4oQUdfR0VUX0NBUlJJRVIpKTsKLQotCXN0 YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKHJmY29tbSwgYnVmLCBSRkNPTU1fQlVGX1NJ WkUgLSAxLAotCQkJCQkJJnJlYWQsIE5VTEwpOwotCXJmY29tbV9zdGFydF93YXRjaChkZXYpOwot CWlmIChHX0lPX1NUQVRVU19OT1JNQUwgPT0gc3RhdHVzKSB7Ci0JCWJ1ZltyZWFkXSA9ICdcMCc7 Ci0JCWlmIChzdHJzdHIoYnVmLCAiK0NPUFMiKSkgewotCQkJaWYgKCFzdHJyY2hyKGJ1ZiwgJywn KSkKLQkJCQlyZXN1bHQgPSAiMCI7Ci0JCQllbHNlIHsKLQkJCQlyZXN1bHQgPSBzdHJjaHIoYnVm LCAnXCInKSArIDE7Ci0JCQkJc2VwID0gc3RyY2hyKHJlc3VsdCwgJ1wiJyk7Ci0JCQkJc2VwWzBd ID0gJ1wwJzsKLQkJCX0KLQotCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1 cm4obXNnKTsKLQkJCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1NU UklORywKLQkJCQkJCSZyZXN1bHQsIERCVVNfVFlQRV9JTlZBTElEKTsKLQkJfSBlbHNlIHsKLQkJ CWluZm8oImFnX2dldF9vcGVyYXRvcigpOiAnK0NPUFMnIGV4cGVjdGVkIGJ1dCIKLQkJCQkiICcl cycgcmVjZWl2ZWQiLCBidWYpOwotCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1z ZywgRVJST1JfSU5URVJGQUNFCi0JCQkJCQkiLkZhaWxlZCIsCi0JCQkJCQkiVW5leHBlY3RlZCBy ZXNwb25zZSBmcm9tIEFHIik7Ci0JCX0KLQl9IGVsc2UgewotCQllcnJvcigiYWdfZ2V0X29wZXJh dG9yKCk6ICVtIik7Ci0JCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2csIEVSUk9S X0lOVEVSRkFDRQotCQkJCQkiLkNvbm5lY3Rpb25GYWlsZWQiLAotCQkJCQkiRmFpbGVkIHRvIHJl Y2VpdmUgcmVzcG9uc2UgZnJvbSBBRyIpOwotCX0KLQotCXJldHVybiByZXBseTsKLX0KLQotI2Rl ZmluZSBBR19TRU5EX0RUTUYgIkFUK1ZUUz0lY1xyIgotc3RhdGljIERCdXNNZXNzYWdlICphZ19z ZW5kX2R0bWYoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9p ZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOwotCXN0cnVj dCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKLQlnY2hhciBidWZbUkZDT01NX0JVRl9T SVpFXTsKLQlnY2hhciAqbnVtYmVyOwotCWdpbnQgY29tX2xlbjsKLQlnYm9vbGVhbiBnb3Rfb2sg PSBUUlVFOwotCWdpbnQgbnVtX2xlbjsKLQlnaW50IGkgPSAwOwotCi0JaWYgKCFndy0+cmZjb21t KQotCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJ CQkiLk5vdENvbm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVkIik7Ci0KLQlkYnVzX21lc3Nh Z2VfZ2V0X2FyZ3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfU1RSSU5HLCAmbnVtYmVyLAotCQkJCURC VVNfVFlQRV9JTlZBTElEKTsKLQlpZiAoc3RybGVuKG51bWJlcikgIT0gc3Ryc3BuKG51bWJlciwg QUxMT1dFRF9OVU1CRVJfU1lNQk9MUykpCi0JCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9y KG1zZywKLQkJCUVSUk9SX0lOVEVSRkFDRSAiLkJhZE51bWJlciIsCi0JCQkiTnVtYmVyIGNvbnRh aW5zIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIik7Ci0KLQludW1fbGVuID0gc3Ry bGVuKG51bWJlcik7Ci0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKLQl3aGlsZSAoaSA8IG51 bV9sZW4gJiYgZ290X29rKSB7Ci0JCWNvbV9sZW4gPSBzcHJpbnRmKGJ1ZiwgQUdfU0VORF9EVE1G LCBudW1iZXJbaV0pOwotCQlyZmNvbW1fc2VuZF9hbmRfcmVhZChndywgYnVmLCBidWYsIGNvbV9s ZW4pOwotCQlnb3Rfb2sgPSBOVUxMICE9IHN0cnN0cihidWYsIE9LX1JFU1BPTlNFKTsKLQkJaSAr PSAxOwotCX0KLQlyZmNvbW1fc3RhcnRfd2F0Y2goZGV2aWNlKTsKLQlyZXR1cm4gcHJvY2Vzc19h Z19yZXBvbnNlKG1zZywgYnVmKTsKLX0KLQotI2RlZmluZSBBR19HRVRfU1VCU0NSSUJFUl9OVU1T ICJBVCtDTlVNXHIiCi0jZGVmaW5lIENOVU1fTEVOIDUgICAgICAgICAgICAgLyogbGVuZ3RoIG9m ICIrQ05VTSIgc3RyaW5nICovCi0jZGVmaW5lIE1BWF9OVU1CRVJfQ05UIDE2Ci1zdGF0aWMgREJ1 c01lc3NhZ2UgKmFnX2dldF9zdWJzY3JpYmVyX251bShEQnVzQ29ubmVjdGlvbiAqY29ubiwKLQkJ CQkJREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNl ICpkZXZpY2UgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsK LQlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKLQlnY2hhciAqbnVtYmVyLCAqZW5kOwotCURC dXNNZXNzYWdlICpyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOwot Ci0JaWYgKCFndy0+cmZjb21tKQotCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVS Uk9SX0lOVEVSRkFDRQotCQkJCQkiLk5vdENvbm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVk Iik7Ci0KLQlyZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOwotCXJmY29tbV9zZW5kX2FuZF9yZWFk KGd3LCBBR19HRVRfU1VCU0NSSUJFUl9OVU1TLCBidWYsCi0JCQlzdHJsZW4oQUdfR0VUX1NVQlND UklCRVJfTlVNUykpOwotCXJmY29tbV9zdGFydF93YXRjaChkZXZpY2UpOwotCi0JaWYgKHN0cmxl bihidWYpID4gQUdfQ0FMTEVSX05VTV9TSVpFICsgMjEpCi0JCWVycm9yKCJhZ19nZXRfc3Vic2Ny aWJlcl9udW0oKTogYnVmIGlzIHRvbyBsb25nICclcyciLCBidWYpOwotCWVsc2UgaWYgKHN0cnN0 cihidWYsICIrQ05VTSIpKSB7Ci0JCW51bWJlciA9IHN0cmNocihidWYsICcsJyk7Ci0JCW51bWJl cisrOwotCQllbmQgPSBzdHJjaHIobnVtYmVyLCAnLCcpOwotCQlpZiAoZW5kKSB7Ci0JCQkqZW5k ID0gJ1wwJzsKLQkJCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1NU UklORywKLQkJCQkJCSZudW1iZXIsIERCVVNfVFlQRV9JTlZBTElEKTsKLQkJfQotCX0gZWxzZQot CQllcnJvcigiYWdfZ2V0X3N1YnNjcmliZXJfbnVtKCk6IHJlYWQgd3JvbmcgZGF0YSAnJXMnIiwg YnVmKTsKLQotCXJldHVybiByZXBseTsKLX0KLQogc3RhdGljIERCdXNNZXNzYWdlICphZ19nZXRf cHJvcGVydGllcyhEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKIAkJCQkJ dm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOwotCXN0 cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKLQlEQnVzTWVzc2FnZSAqcmVwbHk7 Ci0JREJ1c01lc3NhZ2VJdGVyIGl0ZXI7Ci0JREJ1c01lc3NhZ2VJdGVyIGRpY3Q7Ci0JZ2Jvb2xl YW4gdmFsdWU7Ci0JZ3VpbnQgaW5kZXggPSAwOwotCXN0cnVjdCBpbmRpY2F0b3IgKmluZDsKLQot CXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7Ci0JaWYgKCFyZXBs eSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBs eSwgJml0ZXIpOwotCi0JZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoJml0ZXIsIERC VVNfVFlQRV9BUlJBWSwKLQkJCURCVVNfRElDVF9FTlRSWV9CRUdJTl9DSEFSX0FTX1NUUklORwot CQkJREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcgREJVU19UWVBFX1ZBUklBTlRfQVNfU1RSSU5H Ci0JCQlEQlVTX0RJQ1RfRU5UUllfRU5EX0NIQVJfQVNfU1RSSU5HLCAmZGljdCk7Ci0KLQkvKiBD b25uZWN0ZWQgKi8KLQl2YWx1ZSA9IGdhdGV3YXlfaXNfY29ubmVjdGVkKGRldmljZSk7Ci0JZGlj dF9hcHBlbmRfZW50cnkoJmRpY3QsICJDb25uZWN0ZWQiLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZh bHVlKTsKLQotCWlmICghdmFsdWUpCi0JCWdvdG8gZG9uZTsKLQotCXdoaWxlICgoaW5kID0gZ19z bGlzdF9udGhfZGF0YShndy0+aW5kaWVzLCBpbmRleCkpKSB7Ci0JCWlmKCFzdHJjbXAoaW5kLT5k ZXNjciwgIlwic2VydmljZVwiIikpCi0JCQlkaWN0X2FwcGVuZF9lbnRyeSgmZGljdCwgIlJlZ2lz dHJhdGlvblN0YXR1cyIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJ ZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRlc2NyLCAiXCJzaWduYWxcIiIpKQotCQkJZGljdF9hcHBl bmRfZW50cnkoJmRpY3QsICJTaWduYWxTdHJlbmd0aCIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYs ICZpbmQtPnZhbHVlKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRlc2NyLCAiXCJyb2FtXCIi KSkKLQkJCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiUm9hbWluZ1N0YXR1cyIsCi0JCQkJCURC VVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRl c2NyLCAiXCJiYXR0Y2hnXCIiKSkKLQkJCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiQmF0dGVy eUNoYXJnZSIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJaW5kZXgr KzsKLQl9Ci0KLQkvKiBTcGVha2VyR2FpbiAqLwotCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAi U3BlYWtlckdhaW4iLCBEQlVTX1RZUEVfVUlOVDE2LAotCQkJCSZkZXZpY2UtPmdhdGV3YXktPnNw X2dhaW4pOwotCi0JLyogTWljcm9waG9uZUdhaW4gKi8KLQlkaWN0X2FwcGVuZF9lbnRyeSgmZGlj dCwgIk1pY3JvcGhvbmVHYWluIiwgREJVU19UWVBFX1VJTlQxNiwKLQkJCQkmZGV2aWNlLT5nYXRl d2F5LT5taWNfZ2Fpbik7Ci1kb25lOgotCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5l cigmaXRlciwgJmRpY3QpOwotCXJldHVybiByZXBseTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3Rh dGljIEdEQnVzTWV0aG9kVGFibGUgZ2F0ZXdheV9tZXRob2RzW10gPSB7CiAJeyAiQ29ubmVjdCIs ICIiLCAiIiwgYWdfY29ubmVjdCwgR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DIH0sCiAJeyAiRGlz Y29ubmVjdCIsICIiLCAiIiwgYWdfZGlzY29ubmVjdCB9LAotCXsgIkFuc3dlckNhbGwiLCAiIiwg IiIsIGFnX2Fuc3dlciB9LAotCXsgIlRlcm1pbmF0ZUNhbGwiLCAiIiwgIiIsIGFnX3Rlcm1pbmF0 ZV9jYWxsIH0sCi0JeyAiQ2FsbCIsICJzIiwgIiIsIGFnX2NhbGwgfSwKLQl7ICJHZXRPcGVyYXRv ck5hbWUiLCAiIiwgInMiLCBhZ19nZXRfb3BlcmF0b3IgfSwKLQl7ICJTZW5kRFRNRiIsICJzIiwg IiIsIGFnX3NlbmRfZHRtZiB9LAotCXsgIkdldFN1YnNjcmliZXJOdW1iZXIiLCAiIiwgInMiLCBh Z19nZXRfc3Vic2NyaWJlcl9udW0gfSwKIAl7ICJHZXRQcm9wZXJ0aWVzIiwgIiIsICJhe3N2fSIs IGFnX2dldF9wcm9wZXJ0aWVzIH0sCiAJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAK IHN0YXRpYyBHREJ1c1NpZ25hbFRhYmxlIGdhdGV3YXlfc2lnbmFsc1tdID0gewotCXsgIlJpbmci LCAicyIgfSwKLQl7ICJDYWxsVGVybWluYXRlZCIsICIiIH0sCi0JeyAiQ2FsbFN0YXJ0ZWQiLCAi IiB9LAotCXsgIkNhbGxFbmRlZCIsICIiIH0sCiAJeyAiUHJvcGVydHlDaGFuZ2VkIiwgInN2IiB9 LAogCXsgTlVMTCwgTlVMTCB9CiB9OwpAQCAtMTA2Myw5ICszMTUsNiBAQCBzdHJ1Y3QgZ2F0ZXdh eSAqZ2F0ZXdheV9pbml0KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKIAogCWRlYnVnKCJpbiBn YXRld2F5X2luaXQsIGRldiBpcyAlcCIsIGRldik7CiAJZ3cgPSBnX25ldzAoc3RydWN0IGdhdGV3 YXksIDEpOwotCWd3LT5pbmRpZXMgPSBOVUxMOwotCWd3LT5pc19kaWFsaW5nID0gRkFMU0U7Ci0J Z3ctPmNhbGxfYWN0aXZlID0gRkFMU0U7CiAJZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9ESVND T05ORUNURUQ7CiAJcmV0dXJuIGd3OwogCkBAIC0xMTA3LDExICszNTYsNiBAQCB2b2lkIGdhdGV3 YXlfc3RhcnRfc2VydmljZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCiAJcmZjb21tX2Nv bm5lY3RfY2IoZGV2aWNlLT5nYXRld2F5LT5yZmNvbW0sIE5VTEwsIGRldmljZSk7CiB9CiAKLXN0 YXRpYyB2b2lkIGluZGljYXRvcl9zbGljZV9mcmVlKGdwb2ludGVyIG1lbSkKLXsKLQlnX3NsaWNl X2ZyZWUoc3RydWN0IGluZGljYXRvciwgbWVtKTsKLX0KLQogaW50IGdhdGV3YXlfY2xvc2Uoc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmlj ZS0+Z2F0ZXdheTsKQEAgLTExMTksOCArMzYzLDYgQEAgaW50IGdhdGV3YXlfY2xvc2Uoc3RydWN0 IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogCUdJT0NoYW5uZWwgKnNjbyA9IGd3LT5zY287CiAJZ2Jv b2xlYW4gdmFsdWUgPSBGQUxTRTsKIAotCWdfc2xpc3RfZm9yZWFjaChndy0+aW5kaWVzLCAoR0Z1 bmMpIGluZGljYXRvcl9zbGljZV9mcmVlLCBOVUxMKTsKLQlnX3NsaXN0X2ZyZWUoZ3ctPmluZGll cyk7CiAJaWYgKHJmY29tbSkgewogCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24ocmZjb21tLCBUUlVF LCBOVUxMKTsKIAkJZ19pb19jaGFubmVsX3VucmVmKHJmY29tbSk7Ci0tIAoxLjYuNC40Cgo= --0016e6d27bb2138e65047d1449ce Content-Type: application/octet-stream; name="0002-Implement-HandsfreeGateway-Interface.patch" Content-Disposition: attachment; filename="0002-Implement-HandsfreeGateway-Interface.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4er2was4 RnJvbSA0OGYzYjMzM2E4MmJkYmIwZTNiZTQ2ZDIzYjI0MDEyYTFiNGZkNDQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgOCBKYW4gMjAxMCAxNzozODoyMSAtMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBJbXBsZW1lbnQgSGFuZHNmcmVlR2F0ZXdheSBJbnRlcmZhY2UKCkNyZWF0ZSBhIGlu dGVyZmFjZSB3aGVyZSBhIEhhbmRzZnJlZSBhZ2VudCBjYW4gcmVnaXN0ZXIgYW5kIHVzZSBCbHVl WiB0bwpoYW5kbGUgdGhlIHJmY29tbSBhbmQgc2NvIGxpbmtzLgoKTWFueSB0aGFua3MgdG8gWmhl bmh1YSBaaGFuZyA8emhlbmh1YS56aGFuZ0BpbnRlbC5jb20+IGZvciBoaXMKcHJvdG90eXBlIG9u IHRoaXMgY29kZS4KLS0tCiBhdWRpby9nYXRld2F5LmMgfCAgNDQzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogYXVkaW8vZ2F0ZXdheS5oIHwg ICAxMiArLQogYXVkaW8vbWFuYWdlci5jIHwgICAyMCArLS0KIGF1ZGlvL3VuaXguYyAgICB8ICAg IDggKwogZG9jL2hmcC1hcGkudHh0IHwgICA4MSArKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQs IDQ1NiBpbnNlcnRpb25zKCspLCAxMDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZG9jL2hmcC1hcGkudHh0CgpkaWZmIC0tZ2l0IGEvYXVkaW8vZ2F0ZXdheS5jIGIvYXVkaW8vZ2F0 ZXdheS5jCmluZGV4IDNkYzA5ZmYuLmQzNjRmZGMgMTAwNjQ0Ci0tLSBhL2F1ZGlvL2dhdGV3YXku YworKysgYi9hdWRpby9nYXRld2F5LmMKQEAgLTUsNiArNSw4IEBACiAgKiAgQ29weXJpZ2h0IChD KSAyMDA2LTIwMTAgIE5va2lhIENvcnBvcmF0aW9uCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIw MTAgIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KICAqICBDb3B5cmlnaHQg KEMpIDIwMDgtMjAwOSAgTGVvbmlkIE1vdnNob3ZpY2ggPGV2ZW50LnJpZ2FAZ21haWwub3JnPgor ICogIENvcHlyaWdodCAoQykgMjAwOS0yMDA5ICBaaGVuaHVhIFpoYW5nIDx6aGVuaHVhLnpoYW5n QGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgIEd1c3Rhdm8gRi4gUGFkb3ZhbiA8 cGFkb3ZhbkBwcm9mdXNpb24ubW9iaT4KICAqCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMiwx MiArMzQsMTUgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2lu Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8dW5pc3Rk Lmg+CiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CiAjaW5jbHVk ZSA8Z2RidXMuaD4KIAogI2luY2x1ZGUgPGJsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRl IDxibHVldG9vdGgvcmZjb21tLmg+CiAjaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaS5oPgogI2luY2x1 ZGUgPGJsdWV0b290aC9oY2lfbGliLmg+CiAjaW5jbHVkZSA8Ymx1ZXRvb3RoL3Njby5oPgpAQCAt NTIsMTkgKzU3LDEwMSBAQAogI2luY2x1ZGUgImJ0aW8uaCIKICNpbmNsdWRlICJkYnVzLWNvbW1v bi5oIgogCi0jZGVmaW5lIFJGQ09NTV9CVUZfU0laRSAyNTYKKyNkZWZpbmUgTUFYX09QRU5fVFJJ RVMgNQorI2RlZmluZSBPUEVOX1dBSVQgMzAwCisKK3N0cnVjdCBhZ2VudCB7CisJY2hhciAqbmFt ZTsJLyogQnVzIGlkICovCisJY2hhciAqcGF0aDsJLyogRC1CdXMgcGF0aCAqLworCWd1aW50IHdh dGNoOwkvKiBEaXNjb25uZWN0IHdhdGNoICovCit9OwogCiBzdHJ1Y3QgZ2F0ZXdheSB7CiAJZ2F0 ZXdheV9zdGF0ZV90IHN0YXRlOwotCUdJT0NoYW5uZWwgKnJmY29tbTsKLQlndWludCByZmNvbW1f d2F0Y2hfaWQ7CisJaW50IGNoYW5uZWw7CisJR0lPQ2hhbm5lbCAqcmZjb21tOwkvKiByZW1vdGUg QUcgcmVxdWVzdGVkIHJmY29tbSBjb25uZWN0aW9uICovCiAJR0lPQ2hhbm5lbCAqc2NvOwogCWdh dGV3YXlfc3RyZWFtX2NiX3Qgc2NvX3N0YXJ0X2NiOwogCXZvaWQgKnNjb19zdGFydF9jYl9kYXRh OwotCURCdXNNZXNzYWdlICpjb25uZWN0X21lc3NhZ2U7CisJc3RydWN0IGFnZW50ICphZ2VudDsK KwlEQnVzTWVzc2FnZSAqbXNnOwogfTsKIAotaW50IGdhdGV3YXlfY2xvc2Uoc3RydWN0IGF1ZGlv X2RldmljZSAqZGV2aWNlKTsKK3N0YXRpYyBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKKwor aW50IGdhdGV3YXlfY2xvc2UoZ3BvaW50ZXIgZGF0YSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpj b25uZWN0ZWQyc3RyKGludCBpKQoreworCXN3aXRjaCAoaSkgeworCQljYXNlIEdBVEVXQVlfU1RB VEVfRElTQ09OTkVDVEVEOgorCQkJcmV0dXJuICJkaXNjb25uZWN0ZWQiOworCQljYXNlIEdBVEVX QVlfU1RBVEVfQ09OTkVDVElORzoKKwkJCXJldHVybiAiY29ubmVjdGluZyI7CisJCWNhc2UgR0FU RVdBWV9TVEFURV9DT05ORUNURUQ6CisJCQlyZXR1cm4gImNvbm5lY3RlZCI7CisJCWNhc2UgR0FU RVdBWV9TVEFURV9QTEFZSU5HOgorCQkJcmV0dXJuICJwbGF5aW5nIjsKKwkJZGVmYXVsdDoKKwkJ CXJldHVybiAiIjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFnZW50X2ZyZWUoc3RydWN0IGFnZW50 ICphZ2VudCkKK3sKKwlpZiAoIWFnZW50KQorCQlyZXR1cm47CisKKwlnX2ZyZWUoYWdlbnQtPm5h bWUpOworCWdfZnJlZShhZ2VudC0+cGF0aCk7CisJZ19mcmVlKGFnZW50KTsKK30KKworc3RhdGlj IHZvaWQgYWdlbnRfZGlzY29ubmVjdChzdHJ1Y3QgYWdlbnQgKmFnZW50KQoreworCURCdXNNZXNz YWdlICptc2c7CisKKwltc2cgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKGFnZW50LT5u YW1lLCBhZ2VudC0+cGF0aCwKKwkJCSJvcmcuYmx1ZXouSGFuZHNmcmVlQWdlbnQiLCAiUmVsZWFz ZSIpOworCisJZGJ1c19tZXNzYWdlX3NldF9ub19yZXBseShtc2csIFRSVUUpOworCWdfZGJ1c19z ZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgbXNnKTsKKworCWdfZGJ1c19yZW1vdmVfd2F0Y2goY29u bmVjdGlvbiwgYWdlbnQtPndhdGNoKTsKK30KKworc3RhdGljIGdib29sZWFuIGFnZW50X3NlbmRm ZChzdHJ1Y3QgYWdlbnQgKmFnZW50LCBpbnQgZmQsCisJCURCdXNQZW5kaW5nQ2FsbE5vdGlmeUZ1 bmN0aW9uIG5vdGlmeSwgdm9pZCAqZGF0YSkKK3sKKwlEQnVzTWVzc2FnZSAqbXNnOworCURCdXNQ ZW5kaW5nQ2FsbCAqY2FsbDsKKworCW1zZyA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwo YWdlbnQtPm5hbWUsIGFnZW50LT5wYXRoLAorCQkJIm9yZy5ibHVlei5IYW5kc2ZyZWVBZ2VudCIs ICJOZXdDb25uZWN0aW9uIik7CisKKwlkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MobXNnLCBEQlVT X1RZUEVfVU5JWF9GRCwgJmZkLAorCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7CisKKwlpZiAoZGJ1 c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseShjb25uZWN0aW9uLCBtc2csICZjYWxsLCAtMSkg PT0gRkFMU0UpCisJCXJldHVybiBGQUxTRTsKKworCWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3Rp ZnkoY2FsbCwgbm90aWZ5LCBkYXRhLCBOVUxMKTsKKwlkYnVzX3BlbmRpbmdfY2FsbF91bnJlZihj YWxsKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBjaGFuZ2Vfc3RhdGUoc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2LCBpbnQgbmV3X3N0YXRlKQoreworCXN0cnVjdCBnYXRld2F5 ICpndyA9IGRldi0+Z2F0ZXdheTsKKwljb25zdCBjaGFyICp2YWwgPSBjb25uZWN0ZWQyc3RyKG5l d19zdGF0ZSk7CisKKwlndy0+c3RhdGUgPSBuZXdfc3RhdGU7CisKKwllbWl0X3Byb3BlcnR5X2No YW5nZWQoY29ubmVjdGlvbixkZXYtPnBhdGgsCisJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwg IlN0YXRlIiwKKwkJCURCVVNfVFlQRV9TVFJJTkcsICZ2YWwpOworfQogCiBzdGF0aWMgZ2Jvb2xl YW4gc2NvX2lvX2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdJT0NvbmRpdGlvbiBjb25kLAogCQkJc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2KQpAQCAtNzksNiArMTY2LDcgQEAgc3RhdGljIGdib29sZWFu IHNjb19pb19jYihHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZCwKIAkJZ19pb19j aGFubmVsX3NodXRkb3duKGd3LT5zY28sIFRSVUUsIE5VTEwpOwogCQlnX2lvX2NoYW5uZWxfdW5y ZWYoZ3ctPnNjbyk7CiAJCWd3LT5zY28gPSBOVUxMOworCQljaGFuZ2Vfc3RhdGUoZGV2LCBHQVRF V0FZX1NUQVRFX0NPTk5FQ1RFRCk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAKQEAgLTkyLDYzICsx ODAsMTAxIEBAIHN0YXRpYyB2b2lkIHNjb19jb25uZWN0X2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdF cnJvciAqZXJyLCBncG9pbnRlciB1c2VyX2RhdGEpCiAKIAlkZWJ1ZygiYXQgdGhlIGJlZ2luIG9m IHNjb19jb25uZWN0X2NiKCkgaW4gZ2F0ZXdheS5jIik7CiAKKwlndy0+c2NvID0gY2hhbjsKKwln X2lvX2NoYW5uZWxfcmVmKGNoYW4pOworCiAJaWYgKGVycikgewogCQllcnJvcigic2NvX2Nvbm5l Y3RfY2IoKTogJXMiLCBlcnItPm1lc3NhZ2UpOwotCQkvKiBub3Qgc3VyZSwgYnV0IGZyb20gb3Ro ZXIgcG9pbnQgb2YgdmlldywKLQkJICogd2hhdCBpcyB0aGUgcmVhc29uIHRvIGhhdmUgaGVhZHNl dCB3aGljaAotCQkgKiBjYW5ub3QgcGxheSBhdWRpbz8gKi8KLQkJaWYgKGd3LT5zY29fc3RhcnRf Y2IpCi0JCQlndy0+c2NvX3N0YXJ0X2NiKE5VTEwsIGd3LT5zY29fc3RhcnRfY2JfZGF0YSk7CiAJ CWdhdGV3YXlfY2xvc2UoZGV2KTsKIAkJcmV0dXJuOwogCX0KIAotCWd3LT5zY28gPSBnX2lvX2No YW5uZWxfcmVmKGNoYW4pOwogCWlmIChndy0+c2NvX3N0YXJ0X2NiKQogCQlndy0+c2NvX3N0YXJ0 X2NiKGRldiwgZ3ctPnNjb19zdGFydF9jYl9kYXRhKTsKIAotCS8qIHdoeSBpcyB0aGlzIGhlcmU/ ICovCiAJZmNudGwoZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkKGNoYW4pLCBGX1NFVEZMLCAwKTsK IAlnX2lvX2FkZF93YXRjaChndy0+c2NvLCBHX0lPX0VSUiB8IEdfSU9fSFVQIHwgR19JT19OVkFM LAogCQkJCShHSU9GdW5jKSBzY29faW9fY2IsIGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIG5ld2Nv bm5lY3Rpb25fcmVwbHkoREJ1c1BlbmRpbmdDYWxsICpjYWxsLCB2b2lkICpkYXRhKQoreworCXN0 cnVjdCBnYXRld2F5ICpndyA9IGRhdGE7CisJREJ1c01lc3NhZ2UgKnJlcGx5ID0gZGJ1c19wZW5k aW5nX2NhbGxfc3RlYWxfcmVwbHkoY2FsbCk7CisJREJ1c0Vycm9yIGRlcnI7CisKKwlpZiAoIWd3 LT5yZmNvbW0pIHsKKwkJZGVidWcoIlJGQ09NTSBkaXNjb25uZWN0ZWQgZnJvbSBzZXJ2ZXIgYmVm b3JlIGFnZW50IHJlcGx5Iik7CisJCXJldHVybjsKKwl9CisKKwlkYnVzX2Vycm9yX2luaXQoJmRl cnIpOworCWlmICghZGJ1c19zZXRfZXJyb3JfZnJvbV9tZXNzYWdlKCZkZXJyLCByZXBseSkpIHsK KwkJaW5mbygiQWdlbnQgcmVwbHk6IGZpbGUgZGVzY3JpcHRvciBwYXNzZWQgc3VjY2Vzc2Z1bHki KTsKKwkJcmV0dXJuOworCX0KKworCWRlYnVnKCJBZ2VudCByZXBseTogJXMiLCBkZXJyLm1lc3Nh Z2UpOworCisJZGJ1c19lcnJvcl9mcmVlKCZkZXJyKTsKKwlnX2lkbGVfYWRkKGdhdGV3YXlfY2xv c2UsIGd3KTsKK30KKwogc3RhdGljIHZvaWQgcmZjb21tX2Nvbm5lY3RfY2IoR0lPQ2hhbm5lbCAq Y2hhbiwgR0Vycm9yICplcnIsCiAJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKQogewogCXN0cnVjdCBh dWRpb19kZXZpY2UgKmRldiA9IHVzZXJfZGF0YTsKIAlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYt PmdhdGV3YXk7Ci0JZ2NoYXIgZ3dfYWRkclsxOF07Ci0JR0lPRmxhZ3MgZmxhZ3M7CisJc3RydWN0 IHJmY29tbV9kZXZfcmVxIHJlcTsKKwlEQnVzTWVzc2FnZSAqcmVwbHk7CisJaW50IHNrOworCWNo YXIgc3JjWzE4XSwgZHN0WzE4XTsKIAogCWlmIChlcnIpIHsKIAkJZXJyb3IoImNvbm5lY3QoKTog JXMiLCBlcnItPm1lc3NhZ2UpOwogCQlpZiAoZ3ctPnNjb19zdGFydF9jYikKIAkJCWd3LT5zY29f c3RhcnRfY2IoTlVMTCwgZ3ctPnNjb19zdGFydF9jYl9kYXRhKTsKLQkJcmV0dXJuOworCQlnb3Rv IGZhaWw7CiAJfQogCi0JYmEyc3RyKCZkZXYtPmRzdCwgZ3dfYWRkcik7Ci0JLyogQmxvY2tpbmcg bW9kZSBzaG91bGQgYmUgZGVmYXVsdCwgYnV0IGp1c3QgaW4gY2FzZTogKi8KLQlmbGFncyA9IGdf aW9fY2hhbm5lbF9nZXRfZmxhZ3MoY2hhbik7Ci0JZmxhZ3MgJj0gfkdfSU9fRkxBR19OT05CTE9D SzsKLQlmbGFncyAmPSBHX0lPX0ZMQUdfTUFTSzsKLQlnX2lvX2NoYW5uZWxfc2V0X2ZsYWdzKGNo YW4sIGZsYWdzLCBOVUxMKTsKLQlnX2lvX2NoYW5uZWxfc2V0X2VuY29kaW5nKGNoYW4sIE5VTEws IE5VTEwpOwotCWdfaW9fY2hhbm5lbF9zZXRfYnVmZmVyZWQoY2hhbiwgRkFMU0UpOwotCWlmICgh Z3ctPnJmY29tbSkKLQkJZ3ctPnJmY29tbSA9IGdfaW9fY2hhbm5lbF9yZWYoY2hhbik7CisJYmEy c3RyKCZkZXYtPnNyYywgc3JjKTsKKwliYTJzdHIoJmRldi0+ZHN0LCBkc3QpOwogCi0JaWYgKE5V TEwgIT0gZ3ctPnNjb19zdGFydF9jYikKLQkJZ3ctPnNjb19zdGFydF9jYihOVUxMLCBndy0+c2Nv X3N0YXJ0X2NiX2RhdGEpOworCS8qIG1ha2UgL2Rldi9yZmNvbW0gc2VyaWFsIHBvcnQgZnJvbSBj aGFuICovCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEuZGV2X2lkID0gLTE7 CisJcmVxLmZsYWdzID0gKDEgPDwgUkZDT01NX1JFVVNFX0RMQyk7CisJYmFjcHkoJnJlcS5zcmMs ICZkZXYtPnNyYyk7CisJYmFjcHkoJnJlcS5kc3QsICZkZXYtPmRzdCk7CisJcmVxLmNoYW5uZWwg PSBndy0+Y2hhbm5lbDsKIAotCWdhdGV3YXlfY2xvc2UoZGV2KTsKKwlzayA9IGdfaW9fY2hhbm5l bF91bml4X2dldF9mZChjaGFuKTsKKworCWNoYW5nZV9zdGF0ZShkZXYsIEdBVEVXQVlfU1RBVEVf Q09OTkVDVEVEKTsKKworCWlmICghYWdlbnRfc2VuZGZkKGd3LT5hZ2VudCwgc2ssIG5ld2Nvbm5l Y3Rpb25fcmVwbHksIGd3KSkgeworCQlyZXBseSA9IGdfZGJ1c19jcmVhdGVfZXJyb3IoZ3ctPm1z ZywgRVJST1JfSU5URVJGQUNFICIuRmFpbGVkIiwKKwkJCQkiQ2FuIG5vdCBwYXNzIGZpbGUgZGVz Y3JpcHRvciIpOworCX0gZWxzZQorCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3Jl dHVybihndy0+bXNnKTsKKworCXJldHVybjsKKworZmFpbDoKKwlpZiAoZ3ctPm1zZykgeworCQll cnJvcl9jb21tb25fcmVwbHkoZGV2LT5jb25uLCBndy0+bXNnLCBFUlJPUl9JTlRFUkZBQ0UKKwkJ CQkiLkZhaWxlZCIsICIuQ29ubmVjdGlvbiBhdHRlbXB0IGZhaWxlZCIpOworCQlkYnVzX21lc3Nh Z2VfdW5yZWYoZ3ctPm1zZyk7CisJCWd3LT5tc2cgPSBOVUxMOworCX0KKwljaGFuZ2Vfc3RhdGUo ZGV2LCBHQVRFV0FZX1NUQVRFX0RJU0NPTk5FQ1RFRCk7CisJcmV0dXJuOwogfQogCiBzdGF0aWMg dm9pZCBnZXRfcmVjb3JkX2NiKHNkcF9saXN0X3QgKnJlY3MsIGludCBwZXJyLCBncG9pbnRlciB1 c2VyX2RhdGEpCiB7CiAJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2ID0gdXNlcl9kYXRhOwotCURC dXNNZXNzYWdlICptc2cgPSBkZXYtPmdhdGV3YXktPmNvbm5lY3RfbWVzc2FnZTsKKwlzdHJ1Y3Qg Z2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7CiAJaW50IGNoID0gLTE7CiAJc2RwX2xpc3RfdCAq cHJvdG9zLCAqY2xhc3NlczsKIAl1dWlkX3QgdXVpZDsKQEAgLTE4Miw4ICszMDgsNiBAQCBzdGF0 aWMgdm9pZCBnZXRfcmVjb3JkX2NiKHNkcF9saXN0X3QgKnJlY3MsIGludCBwZXJyLCBncG9pbnRl ciB1c2VyX2RhdGEpCiAKIAlpZiAoIXNkcF91dWlkMTI4X3RvX3V1aWQoJnV1aWQpIHx8IHV1aWQu dHlwZSAhPSBTRFBfVVVJRDE2IHx8CiAJCQl1dWlkLnZhbHVlLnV1aWQxNiAhPSBIQU5EU0ZSRUVf QUdXX1NWQ0xBU1NfSUQpIHsKLQkJc2RwX2xpc3RfZm9yZWFjaChwcm90b3MsIChzZHBfbGlzdF9m dW5jX3QpIHNkcF9saXN0X2ZyZWUsCi0JCQkJCQkJCQlOVUxMKTsKIAkJc2RwX2xpc3RfZnJlZShw cm90b3MsIE5VTEwpOwogCQllcnJvcigiSW52YWxpZCBzZXJ2aWNlIHJlY29yZCBvciBub3QgSEZQ Iik7CiAJCWdvdG8gZmFpbDsKQEAgLTE5Nyw2ICszMjEsOCBAQCBzdGF0aWMgdm9pZCBnZXRfcmVj b3JkX2NiKHNkcF9saXN0X3QgKnJlY3MsIGludCBwZXJyLCBncG9pbnRlciB1c2VyX2RhdGEpCiAJ CWdvdG8gZmFpbDsKIAl9CiAKKwlndy0+Y2hhbm5lbCA9IGNoOworCiAJaW8gPSBidF9pb19jb25u ZWN0KEJUX0lPX1JGQ09NTSwgcmZjb21tX2Nvbm5lY3RfY2IsIGRldiwgTlVMTCwgJmVyciwKIAkJ CQlCVF9JT19PUFRfU09VUkNFX0JEQUREUiwgJmRldi0+c3JjLAogCQkJCUJUX0lPX09QVF9ERVNU X0JEQUREUiwgJmRldi0+ZHN0LApAQCAtMjA0LDI1ICszMzAsMjYgQEAgc3RhdGljIHZvaWQgZ2V0 X3JlY29yZF9jYihzZHBfbGlzdF90ICpyZWNzLCBpbnQgcGVyciwgZ3BvaW50ZXIgdXNlcl9kYXRh KQogCQkJCUJUX0lPX09QVF9JTlZBTElEKTsKIAlpZiAoIWlvKSB7CiAJCWVycm9yKCJVbmFibGUg dG8gY29ubmVjdDogJXMiLCBlcnItPm1lc3NhZ2UpOwotCQlpZiAobXNnKSB7Ci0JCQllcnJvcl9j b21tb25fcmVwbHkoZGV2LT5jb25uLCBtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJCQkJIi5Db25u ZWN0aW9uQXR0ZW1wdEZhaWxlZCIsCi0JCQkJCQllcnItPm1lc3NhZ2UpOwotCQkJbXNnID0gTlVM TDsKLQkJfQotCQlnX2Vycm9yX2ZyZWUoZXJyKTsKKwkJaWYgKGVycikKKwkJCWdfZXJyb3JfZnJl ZShlcnIpOwogCQlnYXRld2F5X2Nsb3NlKGRldik7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAlnX2lv X2NoYW5uZWxfdW5yZWYoaW8pOworCisJY2hhbmdlX3N0YXRlKGRldiwgR0FURVdBWV9TVEFURV9D T05ORUNUSU5HKTsKIAlyZXR1cm47CiAKIGZhaWw6Ci0JaWYgKG1zZykKLQkJZXJyb3JfY29tbW9u X3JlcGx5KGRldi0+Y29ubiwgbXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RTdXBwb3J0 ZWQiLCAiTm90IHN1cHBvcnRlZCIpOworCWlmIChndy0+bXNnKSB7CisJCWVycm9yX2NvbW1vbl9y ZXBseShkZXYtPmNvbm4sIGd3LT5tc2csIEVSUk9SX0lOVEVSRkFDRQorCQkJCSIuTm90U3VwcG9y dGVkIiwgIk5vdCBzdXBwb3J0ZWQiKTsKKwkJZGJ1c19tZXNzYWdlX3VucmVmKGd3LT5tc2cpOwor CQlndy0+bXNnID0gTlVMTDsKKwl9CiAKLQlkZXYtPmdhdGV3YXktPmNvbm5lY3RfbWVzc2FnZSA9 IE5VTEw7CisJY2hhbmdlX3N0YXRlKGRldiwgR0FURVdBWV9TVEFURV9ESVNDT05ORUNURUQpOwog CiAJc2NvX2NiID0gZGV2LT5nYXRld2F5LT5zY29fc3RhcnRfY2I7CiAJaWYgKHNjb19jYikKQEAg LTI0MywyMiArMzcwLDU3IEBAIHN0YXRpYyBEQnVzTWVzc2FnZSAqYWdfY29ubmVjdChEQnVzQ29u bmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKIHsKIAlzdHJ1Y3QgYXVkaW9fZGV2aWNl ICphdV9kZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBnYXRld2F5 ICpndyA9IGF1X2Rldi0+Z2F0ZXdheTsKKwlEQnVzTWVzc2FnZSAqcmVwbHk7CiAKIAlkZWJ1Zygi YXQgdGhlIGJlZ2luIG9mIGFnX2Nvbm5lY3QoKSIpOwotCWlmIChndy0+cmZjb21tKQorCisJaWYg KCFndy0+YWdlbnQpCiAJCXJldHVybiBnX2RidXNfY3JlYXRlX2Vycm9yKG1zZywgRVJST1JfSU5U RVJGQUNFCi0JCQkJCSIuQWxyZWFkeUNvbm5lY3RlZCIsCi0JCQkJCSJBbHJlYWR5IENvbm5lY3Rl ZCIpOworCQkJCSIuRmFpbGVkIiwgIkFnZW50IG5vdCBhc3NpbmVkIik7CiAKLQlndy0+Y29ubmVj dF9tZXNzYWdlID0gZGJ1c19tZXNzYWdlX3JlZihtc2cpOworCWd3LT5tc2cgPSBkYnVzX21lc3Nh Z2VfcmVmKG1zZyk7CiAJaWYgKGdldF9yZWNvcmRzKGF1X2RldikgPCAwKSB7Ci0JCWRidXNfbWVz c2FnZV91bnJlZihndy0+Y29ubmVjdF9tZXNzYWdlKTsKKwkJZGJ1c19tZXNzYWdlX3VucmVmKGd3 LT5tc2cpOwogCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFD RQogCQkJCQkiLkNvbm5lY3RBdHRlbXB0RmFpbGVkIiwKIAkJCQkJIkNvbm5lY3QgQXR0ZW1wdCBG YWlsZWQiKTsKIAl9CisKKwlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybiht c2cpOworCWlmICghcmVwbHkpCisJCXJldHVybiBOVUxMOworCiAJZGVidWcoImF0IHRoZSBlbmQg b2YgYWdfY29ubmVjdCgpIik7Ci0JcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcmVwbHk7Cit9CisK K2ludCBnYXRld2F5X2Nsb3NlKGdwb2ludGVyIGRhdGEpCit7CisJc3RydWN0IGF1ZGlvX2Rldmlj ZSAqZGV2aWNlID0gZGF0YTsKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXZpY2UtPmdhdGV3YXk7 CisJZ2Jvb2xlYW4gdmFsdWUgPSBGQUxTRTsKKworCWlmIChndy0+cmZjb21tKSB7CisJCWdfaW9f Y2hhbm5lbF9zaHV0ZG93bihndy0+cmZjb21tLCBUUlVFLCBOVUxMKTsKKwkJZ19pb19jaGFubmVs X3VucmVmKGd3LT5yZmNvbW0pOworCQlndy0+cmZjb21tID0gTlVMTDsKKwl9CisKKwlpZiAoZ3ct PnNjbykgeworCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24oZ3ctPnNjbywgVFJVRSwgTlVMTCk7CisJ CWdfaW9fY2hhbm5lbF91bnJlZihndy0+c2NvKTsKKwkJZ3ctPnNjbyA9IE5VTEw7CisJCWd3LT5z Y29fc3RhcnRfY2IgPSBOVUxMOworCQlndy0+c2NvX3N0YXJ0X2NiX2RhdGEgPSBOVUxMOworCX0K KworCWd3LT5zdGF0ZSA9IEdBVEVXQVlfU1RBVEVfRElTQ09OTkVDVEVEOworCisJZW1pdF9wcm9w ZXJ0eV9jaGFuZ2VkKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLAorCQkJCUFVRElPX0dBVEVX QVlfSU5URVJGQUNFLAorCQkJCSJDb25uZWN0ZWQiLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZhbHVl KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIERCdXNNZXNzYWdlICphZ19kaXNjb25uZWN0KERC dXNDb25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLApAQCAtMjY5LDYgKzQzMSw5IEBA IHN0YXRpYyBEQnVzTWVzc2FnZSAqYWdfZGlzY29ubmVjdChEQnVzQ29ubmVjdGlvbiAqY29ubiwg REJ1c01lc3NhZ2UgKm1zZywKIAlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOwogCWNoYXIgZ3df YWRkclsxOF07CiAKKwlpZiAoIWNvbm5lY3Rpb24pCisJCXJldHVybiBOVUxMOworCiAJcmVwbHkg PSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKIAlpZiAoIXJlcGx5KQogCQly ZXR1cm4gTlVMTDsKQEAgLTI4NSwxNiArNDUwLDExNyBAQCBzdGF0aWMgREJ1c01lc3NhZ2UgKmFn X2Rpc2Nvbm5lY3QoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCiAJcmV0 dXJuIHJlcGx5OwogfQogCitzdGF0aWMgdm9pZCBhZ2VudF9leGl0ZWQoREJ1c0Nvbm5lY3Rpb24g KmNvbm4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGdhdGV3YXkgKmdhdGV3YXkgPSBkYXRhOwor CXN0cnVjdCBhZ2VudCAqYWdlbnQgPSBnYXRld2F5LT5hZ2VudDsKKworCWRlYnVnKCJBZ2VudCAl cyBleGl0ZWQiLCBhZ2VudC0+bmFtZSk7CisKKwlhZ2VudF9mcmVlKGFnZW50KTsKKwlnYXRld2F5 LT5hZ2VudCA9IE5VTEw7Cit9CisKIHN0YXRpYyBEQnVzTWVzc2FnZSAqYWdfZ2V0X3Byb3BlcnRp ZXMoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCiAJCQkJCXZvaWQgKmRh dGEpCiB7Ci0JcmV0dXJuIE5VTEw7CisJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0 YTsKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXZpY2UtPmdhdGV3YXk7CisJREJ1c01lc3NhZ2Ug KnJlcGx5OworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNzYWdlSXRlciBkaWN0Owor CWNvbnN0IGNoYXIgKnZhbHVlOworCisKKwlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9k X3JldHVybihtc2cpOworCWlmICghcmVwbHkpCisJCXJldHVybiBOVUxMOworCisJZGJ1c19tZXNz YWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsKKworCWRidXNfbWVzc2FnZV9pdGVy X29wZW5fY29udGFpbmVyKCZpdGVyLCBEQlVTX1RZUEVfQVJSQVksCisJCQlEQlVTX0RJQ1RfRU5U UllfQkVHSU5fQ0hBUl9BU19TVFJJTkcKKwkJCURCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HIERC VVNfVFlQRV9WQVJJQU5UX0FTX1NUUklORworCQkJREJVU19ESUNUX0VOVFJZX0VORF9DSEFSX0FT X1NUUklORywgJmRpY3QpOworCisJdmFsdWUgPSBjb25uZWN0ZWQyc3RyKGd3LT5zdGF0ZSk7CisJ ZGljdF9hcHBlbmRfZW50cnkoJmRpY3QsICJDb25uZWN0ZWQiLAorCQkJREJVU19UWVBFX1NUUklO RywgJnZhbHVlKTsKKworCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigmaXRlciwg JmRpY3QpOworCisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UgKnJlZ2lz dGVyX2FnZW50KERCdXNDb25uZWN0aW9uICpjb25uLAorCQkJCQlEQnVzTWVzc2FnZSAqbXNnLCB2 b2lkICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3Ry dWN0IGdhdGV3YXkgKmd3ID0gZGV2aWNlLT5nYXRld2F5OworCXN0cnVjdCBhZ2VudCAqYWdlbnQ7 CisJY29uc3QgY2hhciAqcGF0aCwgKm5hbWU7CisKKworCWlmIChndy0+YWdlbnQpCisJCXJldHVy biBnX2RidXNfY3JlYXRlX2Vycm9yKG1zZywKKwkJCQlFUlJPUl9JTlRFUkZBQ0UgIi5BbHJlYWR5 RXhpc3RzIiwKKwkJCQkiQWdlbnQgYWxyZWFkeSBleGlzdHMiKTsKKworCWlmICghZGJ1c19tZXNz YWdlX2dldF9hcmdzKG1zZywgTlVMTCwgREJVU19UWVBFX09CSkVDVF9QQVRILCAmcGF0aCwKKwkJ CURCVVNfVFlQRV9JTlZBTElEKSkKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBF UlJPUl9JTlRFUkZBQ0UKKwkJCQkiLkludmFsaWRBcmd1bWVudHMiLCAiSW52YWxpZCBhcmd1bWVu dCIpOworCisJbmFtZSA9IGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG1zZyk7CisJYWdlbnQgPSBn X25ldzAoc3RydWN0IGFnZW50LCAxKTsKKwlpZiAoIWFnZW50KQorCQlyZXR1cm4gZ19kYnVzX2Ny ZWF0ZV9lcnJvcihtc2csCisJCQkJRVJST1JfSU5URVJGQUNFICIuRmFpbGVkIiwKKwkJCQkiRmFp bGVkIHRvIGNyZWF0ZSBhIG5ldyBhZ2VudCIpOworCisJYWdlbnQtPm5hbWUgPSBzdHJkdXAobmFt ZSk7CisJYWdlbnQtPnBhdGggPSBzdHJkdXAocGF0aCk7CisKKwlhZ2VudC0+d2F0Y2ggPSBnX2Ri dXNfYWRkX2Rpc2Nvbm5lY3Rfd2F0Y2goY29ubiwgbmFtZSwKKwkJCWFnZW50X2V4aXRlZCwgZ3cs IE5VTEwpOworCisJZ3ctPmFnZW50ID0gYWdlbnQ7CisKKwlyZXR1cm4gZGJ1c19tZXNzYWdlX25l d19tZXRob2RfcmV0dXJuKG1zZyk7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSAqdW5yZWdpc3Rl cl9hZ2VudChEQnVzQ29ubmVjdGlvbiAqY29ubiwKKwkJCQlEQnVzTWVzc2FnZSAqbXNnLCB2b2lk ICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3RydWN0 IGdhdGV3YXkgKmd3ID0gZGV2aWNlLT5nYXRld2F5OworCXN0cnVjdCBhZ2VudCAqYWdlbnQ7CisK KwlpZiAoIWd3LT5hZ2VudCkKKwkJZ290byBkb25lOworCisJYWdlbnQgPSBndy0+YWdlbnQ7CisJ aWYgKHN0cmNtcChhZ2VudC0+bmFtZSwgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIobXNnKSkgIT0g MCkKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLAorCQkJCUVSUk9SX0lOVEVSRkFD RSAiLkZhaWxlZCIsICJQZXJtaXNzaW9uIGRlbmllZCIpOworCisJYWdlbnRfZGlzY29ubmVjdChn dy0+YWdlbnQpOworCisJZ19kYnVzX3JlbW92ZV93YXRjaChjb25uLCBhZ2VudC0+d2F0Y2gpOwor CisJYWdlbnRfZnJlZShhZ2VudCk7CisJZ3ctPmFnZW50ID0gTlVMTDsKKworZG9uZToKKwlyZXR1 cm4gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7CiB9CiAKIHN0YXRpYyBHREJ1 c01ldGhvZFRhYmxlIGdhdGV3YXlfbWV0aG9kc1tdID0gewogCXsgIkNvbm5lY3QiLCAiIiwgIiIs IGFnX2Nvbm5lY3QsIEdfREJVU19NRVRIT0RfRkxBR19BU1lOQyB9LAotCXsgIkRpc2Nvbm5lY3Qi LCAiIiwgIiIsIGFnX2Rpc2Nvbm5lY3QgfSwKKwl7ICJEaXNjb25uZWN0IiwgIiIsICIiLCBhZ19k aXNjb25uZWN0LCBHX0RCVVNfTUVUSE9EX0ZMQUdfQVNZTkMgfSwKIAl7ICJHZXRQcm9wZXJ0aWVz IiwgIiIsICJhe3N2fSIsIGFnX2dldF9wcm9wZXJ0aWVzIH0sCisJeyAiUmVnaXN0ZXJBZ2VudCIs ICJvIiwgIiIsIHJlZ2lzdGVyX2FnZW50IH0sCisJeyAiVW5yZWdpc3RlckFnZW50IiwgIm8iLCAi IiwgdW5yZWdpc3Rlcl9hZ2VudCB9LAogCXsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9CiB9Owog CkBAIC0zMDcsMTcgKzU3MywyMyBAQCBzdHJ1Y3QgZ2F0ZXdheSAqZ2F0ZXdheV9pbml0KHN0cnVj dCBhdWRpb19kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZ2F0ZXdheSAqZ3c7CiAKKwlndyA9IGdf bmV3MChzdHJ1Y3QgZ2F0ZXdheSwgMSk7CisKKwljb25uZWN0aW9uID0gZGJ1c19jb25uZWN0aW9u X3JlZihkZXYtPmNvbm4pOworCiAJaWYgKCFnX2RidXNfcmVnaXN0ZXJfaW50ZXJmYWNlKGRldi0+ Y29ubiwgZGV2LT5wYXRoLAogCQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKIAkJCQkJZ2F0 ZXdheV9tZXRob2RzLCBnYXRld2F5X3NpZ25hbHMsCiAJCQkJCU5VTEwsIGRldiwgTlVMTCkpCiAJ CXJldHVybiBOVUxMOwogCi0JZGVidWcoImluIGdhdGV3YXlfaW5pdCwgZGV2IGlzICVwIiwgZGV2 KTsKLQlndyA9IGdfbmV3MChzdHJ1Y3QgZ2F0ZXdheSwgMSk7Ci0JZ3ctPnN0YXRlID0gR0FURVdB WV9TVEFURV9ESVNDT05ORUNURUQ7CiAJcmV0dXJuIGd3OworfQogCit2b2lkIGdhdGV3YXlfZXhp dCgpCit7CisJZGJ1c19jb25uZWN0aW9uX3VucmVmKGNvbm5lY3Rpb24pOworCWNvbm5lY3Rpb24g PSBOVUxMOwogfQogCiBnYm9vbGVhbiBnYXRld2F5X2lzX2Nvbm5lY3RlZChzdHJ1Y3QgYXVkaW9f ZGV2aWNlICpkZXYpCkBAIC0zMjYsMTcgKzU5OCw2IEBAIGdib29sZWFuIGdhdGV3YXlfaXNfY29u bmVjdGVkKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKIAkJCWRldi0+Z2F0ZXdheS0+c3RhdGUg PT0gR0FURVdBWV9TVEFURV9DT05ORUNURUQpOwogfQogCi1pbnQgZ2F0ZXdheV9jb25uZWN0X3Jm Y29tbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIEdJT0NoYW5uZWwgKmlvKQotewotCWlmICgh aW8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZ19pb19jaGFubmVsX3JlZihpbyk7Ci0JZGV2LT5n YXRld2F5LT5yZmNvbW0gPSBpbzsKLQotCXJldHVybiAwOwotfQotCiBpbnQgZ2F0ZXdheV9jb25u ZWN0X3NjbyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIEdJT0NoYW5uZWwgKmlvKQogewogCXN0 cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKQEAgLTM0Nyw0MiArNjA4LDM5IEBAIGlu dCBnYXRld2F5X2Nvbm5lY3Rfc2NvKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgR0lPQ2hhbm5l bCAqaW8pCiAJZ3ctPnNjbyA9IGdfaW9fY2hhbm5lbF9yZWYoaW8pOwogCiAJZ19pb19hZGRfd2F0 Y2goZ3ctPnNjbywgR19JT19FUlIgfCBHX0lPX0hVUCB8IEdfSU9fTlZBTCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKEdJT0Z1bmMpIHNjb19pb19jYiwgZGV2KTsKKwkJCQkgKEdJ T0Z1bmMpIHNjb19pb19jYiwgZGV2KTsKKworCWNoYW5nZV9zdGF0ZShkZXYsIEdBVEVXQVlfU1RB VEVfUExBWUlORyk7CisKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBnYXRld2F5X3N0YXJ0X3NlcnZp Y2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQoraW50IGdhdGV3YXlfY29ubmVjdF9yZmNv bW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LAorCQlHSU9DaGFubmVsICpjaGFuLCBpbnQgY2gp CiB7Ci0JcmZjb21tX2Nvbm5lY3RfY2IoZGV2aWNlLT5nYXRld2F5LT5yZmNvbW0sIE5VTEwsIGRl dmljZSk7CisJaWYgKCFjaGFuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdfaW9fY2hhbm5lbF9y ZWYoY2hhbik7CisJZGV2LT5nYXRld2F5LT5yZmNvbW0gPSBjaGFuOworCWRldi0+Z2F0ZXdheS0+ Y2hhbm5lbCA9IGNoOworCisJcmV0dXJuIDA7CiB9CiAKLWludCBnYXRld2F5X2Nsb3NlKHN0cnVj dCBhdWRpb19kZXZpY2UgKmRldmljZSkKK3ZvaWQgZ2F0ZXdheV9zdGFydF9zZXJ2aWNlKHN0cnVj dCBhdWRpb19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXZpY2UtPmdh dGV3YXk7Ci0JR0lPQ2hhbm5lbCAqcmZjb21tID0gZ3ctPnJmY29tbTsKLQlHSU9DaGFubmVsICpz Y28gPSBndy0+c2NvOwotCWdib29sZWFuIHZhbHVlID0gRkFMU0U7CisJc3RydWN0IGdhdGV3YXkg Kmd3ID0gZGV2LT5nYXRld2F5OworCUdFcnJvciAqZXJyID0gTlVMTDsKIAotCWlmIChyZmNvbW0p IHsKLQkJZ19pb19jaGFubmVsX3NodXRkb3duKHJmY29tbSwgVFJVRSwgTlVMTCk7Ci0JCWdfaW9f Y2hhbm5lbF91bnJlZihyZmNvbW0pOwotCQlndy0+cmZjb21tID0gTlVMTDsKLQl9CisJaWYgKGd3 LT5yZmNvbW0gPT0gTlVMTCkKKwkJcmV0dXJuOwogCi0JaWYgKHNjbykgewotCQlnX2lvX2NoYW5u ZWxfc2h1dGRvd24oc2NvLCBUUlVFLCBOVUxMKTsKLQkJZ19pb19jaGFubmVsX3VucmVmKHNjbyk7 Ci0JCWd3LT5zY28gPSBOVUxMOwotCQlndy0+c2NvX3N0YXJ0X2NiID0gTlVMTDsKLQkJZ3ctPnNj b19zdGFydF9jYl9kYXRhID0gTlVMTDsKKwlpZiAoIWJ0X2lvX2FjY2VwdChndy0+cmZjb21tLCBy ZmNvbW1fY29ubmVjdF9jYiwgZGV2LCBOVUxMLAorCQkJCQkJCSZlcnIpKSB7CisJCWVycm9yKCJi dF9pb19hY2NlcHQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKKwkJZ19lcnJvcl9mcmVlKGVycik7CiAJ fQotCi0JZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9ESVNDT05ORUNURUQ7Ci0KLQllbWl0X3By b3BlcnR5X2NoYW5nZWQoZGV2aWNlLT5jb25uLCBkZXZpY2UtPnBhdGgsCi0JCQkJQVVESU9fR0FU RVdBWV9JTlRFUkZBQ0UsCi0JCQkJIkNvbm5lY3RlZCIsIERCVVNfVFlQRV9CT09MRUFOLCAmdmFs dWUpOwotCXJldHVybiAwOwogfQogCiAvKiBUaGVzZSBhcmUgZnVuY3Rpb25zIHRvIGJlIGNhbGxl ZCBmcm9tIHVuaXguYyBmb3IgYXVkaW8gc3lzdGVtCkBAIC0zOTksOCArNjU3LDEyIEBAIGdib29s ZWFuIGdhdGV3YXlfcmVxdWVzdF9zdHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LAogCQln dy0+c2NvX3N0YXJ0X2NiX2RhdGEgPSB1c2VyX2RhdGE7CiAJCWdldF9yZWNvcmRzKGRldik7CiAJ fSBlbHNlIGlmICghZ3ctPnNjbykgeworCQljaGFyIHNvdXJjZVsxMjhdLCBkZXN0aW5hdGlvblsx MjhdOworCiAJCWd3LT5zY29fc3RhcnRfY2IgPSBjYjsKIAkJZ3ctPnNjb19zdGFydF9jYl9kYXRh ID0gdXNlcl9kYXRhOworCQliYTJzdHIoJmRldi0+c3JjLCBzb3VyY2UpOworCQliYTJzdHIoJmRl di0+ZHN0LCBkZXN0aW5hdGlvbik7CiAJCWlvID0gYnRfaW9fY29ubmVjdChCVF9JT19TQ08sIHNj b19jb25uZWN0X2NiLCBkZXYsIE5VTEwsICZlcnIsCiAJCQkJQlRfSU9fT1BUX1NPVVJDRV9CREFE RFIsICZkZXYtPnNyYywKIAkJCQlCVF9JT19PUFRfREVTVF9CREFERFIsICZkZXYtPmRzdCwKQEAg LTQ2NCw0ICs3MjYsMyBAQCB2b2lkIGdhdGV3YXlfc3VzcGVuZF9zdHJlYW0oc3RydWN0IGF1ZGlv X2RldmljZSAqZGV2KQogCWd3LT5zY29fc3RhcnRfY2IgPSBOVUxMOwogCWd3LT5zY29fc3RhcnRf Y2JfZGF0YSA9IE5VTEw7CiB9Ci0KZGlmZiAtLWdpdCBhL2F1ZGlvL2dhdGV3YXkuaCBiL2F1ZGlv L2dhdGV3YXkuaAppbmRleCAzYjA0NTdmLi5lYWY2ODAxIDEwMDY0NAotLS0gYS9hdWRpby9nYXRl d2F5LmgKKysrIGIvYXVkaW8vZ2F0ZXdheS5oCkBAIC00LDYgKzQsNyBAQAogICoKICAqICBDb3B5 cmlnaHQgKEMpIDIwMDYtMjAxMCAgTm9raWEgQ29ycG9yYXRpb24KICAqICBDb3B5cmlnaHQgKEMp IDIwMDQtMjAxMCAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgorICogIENv cHlyaWdodCAoQykgMjAwOS0yMDA5ICBaaGVuaHVhIFpoYW5nIDx6aGVuaHVhLnpoYW5nQGludGVs LmNvbT4KICAqCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yMiwyMCArMjMsMjUgQEAKICAqCiAg Ki8KIAotI2RlZmluZSBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSAib3JnLmJsdWV6LkhlYWRzZXRH YXRld2F5IgorI2RlZmluZSBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSAib3JnLmJsdWV6LkhhbmRz ZnJlZUdhdGV3YXkiCiAKICNkZWZpbmUgREVGQVVMVF9IU1BfSFNfQ0hBTk5FTCA2CiAjZGVmaW5l IERFRkFVTFRfSEZQX0hTX0NIQU5ORUwgNwogCiB0eXBlZGVmIGVudW0gewogCUdBVEVXQVlfU1RB VEVfRElTQ09OTkVDVEVELAotCUdBVEVXQVlfU1RBVEVfQ09OTkVDVEVECisJR0FURVdBWV9TVEFU RV9DT05ORUNURUQsCisJR0FURVdBWV9TVEFURV9DT05ORUNUSU5HLAorCUdBVEVXQVlfU1RBVEVf UExBWUlORywKIH0gZ2F0ZXdheV9zdGF0ZV90OwogCiB0eXBlZGVmIHZvaWQgKCpnYXRld2F5X3N0 cmVhbV9jYl90KSAoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB2b2lkICp1c2VyX2RhdGEpOwor CiBzdHJ1Y3QgZ2F0ZXdheSAqZ2F0ZXdheV9pbml0KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmlj ZSk7Cit2b2lkIGdhdGV3YXlfZXhpdCgpOwogZ2Jvb2xlYW4gZ2F0ZXdheV9pc19jb25uZWN0ZWQo c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KTsKLWludCBnYXRld2F5X2Nvbm5lY3RfcmZjb21tKHN0 cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgR0lPQ2hhbm5lbCAqY2hhbik7CitpbnQgZ2F0ZXdheV9j b25uZWN0X3JmY29tbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsCisJCQlHSU9DaGFubmVsICpj aGFuLCBpbnQgY2gpOwogaW50IGdhdGV3YXlfY29ubmVjdF9zY28oc3RydWN0IGF1ZGlvX2Rldmlj ZSAqZGV2LCBHSU9DaGFubmVsICpjaGFuKTsKIHZvaWQgZ2F0ZXdheV9zdGFydF9zZXJ2aWNlKHN0 cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7CiBnYm9vbGVhbiBnYXRld2F5X3JlcXVlc3Rfc3Ry ZWFtKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2F1ZGlvL21hbmFnZXIu YyBiL2F1ZGlvL21hbmFnZXIuYwppbmRleCA0MTNjMWYzLi5lNzY4MDE0IDEwMDY0NAotLS0gYS9h dWRpby9tYW5hZ2VyLmMKKysrIGIvYXVkaW8vbWFuYWdlci5jCkBAIC0xOTgsNyArMTk4LDcgQEAg c3RhdGljIHZvaWQgaGFuZGxlX3V1aWQoY29uc3QgY2hhciAqdXVpZHN0ciwgc3RydWN0IGF1ZGlv X2RldmljZSAqZGV2aWNlKQogCQlicmVhazsKIAljYXNlIEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19J RDoKIAkJZGVidWcoIkZvdW5kIEhhbmRzZnJlZSBBRyByZWNvcmQiKTsKLQkJaWYgKGRldmljZS0+ Z2F0ZXdheSA9PSBOVUxMKQorCQlpZiAoZW5hYmxlZC5nYXRld2F5ICYmIChkZXZpY2UtPmdhdGV3 YXkgPT0gTlVMTCkpCiAJCQlkZXZpY2UtPmdhdGV3YXkgPSBnYXRld2F5X2luaXQoZGV2aWNlKTsK IAkJYnJlYWs7CiAJY2FzZSBBVURJT19TSU5LX1NWQ0xBU1NfSUQ6CkBAIC01ODYsNyArNTg2LDcg QEAgc3RhdGljIHZvaWQgaGZfaW9fY2IoR0lPQ2hhbm5lbCAqY2hhbiwgZ3BvaW50ZXIgZGF0YSkK IAkJZ290byBkcm9wOwogCX0KIAotCWlmIChnYXRld2F5X2Nvbm5lY3RfcmZjb21tKGRldmljZSwg Y2hhbikgPCAwKSB7CisJaWYgKGdhdGV3YXlfY29ubmVjdF9yZmNvbW0oZGV2aWNlLCBjaGFuLCBj aCkgPCAwKSB7CiAJCWVycm9yKCJBbGxvY2F0aW5nIG5ldyBHSU9DaGFubmVsIGZhaWxlZCEiKTsK IAkJZ290byBkcm9wOwogCX0KQEAgLTkwNSwyMiArOTA1LDEyIEBAIHN0YXRpYyB2b2lkIGhlYWRz ZXRfc2VydmVyX3JlbW92ZShzdHJ1Y3QgYnRkX2FkYXB0ZXIgKmFkYXB0ZXIpCiBzdGF0aWMgaW50 IGdhdGV3YXlfc2VydmVyX3Byb2JlKHN0cnVjdCBidGRfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlz dHJ1Y3QgYXVkaW9fYWRhcHRlciAqYWRwOwotCWNvbnN0IGdjaGFyICpwYXRoID0gYWRhcHRlcl9n ZXRfcGF0aChhZGFwdGVyKTsKLQlpbnQgcmV0OwotCi0JREJHKCJwYXRoICVzIiwgcGF0aCk7CiAK IAlhZHAgPSBhdWRpb19hZGFwdGVyX2dldChhZGFwdGVyKTsKIAlpZiAoIWFkcCkKIAkJcmV0dXJu IC1FSU5WQUw7CiAKLQlyZXQgPSBnYXRld2F5X3NlcnZlcl9pbml0KGFkcCk7Ci0JaWYgKHJldCA8 IDApIHsKLQkJYXVkaW9fYWRhcHRlcl9yZWYoYWRwKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQly ZXR1cm4gMDsKKwlyZXR1cm4gZ2F0ZXdheV9zZXJ2ZXJfaW5pdChhZHApOwogfQogCiBzdGF0aWMg dm9pZCBnYXRld2F5X3NlcnZlcl9yZW1vdmUoc3RydWN0IGJ0ZF9hZGFwdGVyICphZGFwdGVyKQpA QCAtMTE2Niw4ICsxMTU2LDEwIEBAIHZvaWQgYXVkaW9fbWFuYWdlcl9leGl0KHZvaWQpCiAJCXRl bGVwaG9ueV9leGl0KCk7CiAJfQogCi0JaWYgKGVuYWJsZWQuZ2F0ZXdheSkKKwlpZiAoZW5hYmxl ZC5nYXRld2F5KSB7CiAJCWJ0ZF91bnJlZ2lzdGVyX2FkYXB0ZXJfZHJpdmVyKCZnYXRld2F5X3Nl cnZlcl9kcml2ZXIpOworCQlnYXRld2F5X2V4aXQoKTsKKwl9CiAKIAlpZiAoZW5hYmxlZC5zb3Vy Y2UgfHwgZW5hYmxlZC5zaW5rKQogCQlidGRfdW5yZWdpc3Rlcl9hZGFwdGVyX2RyaXZlcigmYTJk cF9zZXJ2ZXJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2F1ZGlvL3VuaXguYyBiL2F1ZGlvL3VuaXgu YwppbmRleCA1Y2Y0Zjk0Li5iZDFhNDE1IDEwMDY0NAotLS0gYS9hdWRpby91bml4LmMKKysrIGIv YXVkaW8vdW5peC5jCkBAIC0zOTUsNiArMzk1LDkgQEAgc3RhdGljIHZvaWQgZ2F0ZXdheV9yZXN1 bWVfY29tcGxldGUoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB2b2lkICp1c2VyX2RhdGEpCiAJ c3RydWN0IGJ0X3N0YXJ0X3N0cmVhbV9yc3AgKnJzcCA9ICh2b2lkICopIGJ1ZjsKIAlzdHJ1Y3Qg YnRfbmV3X3N0cmVhbV9pbmQgKmluZCA9ICh2b2lkICopIGJ1ZjsKIAorCWlmICghZGV2KQorCQln b3RvIGZhaWxlZDsKKwogCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKIAlyc3AtPmgudHlw ZSA9IEJUX1JFU1BPTlNFOwogCXJzcC0+aC5uYW1lID0gQlRfU1RBUlRfU1RSRUFNOwpAQCAtNDE2 LDYgKzQxOSwxMSBAQCBzdGF0aWMgdm9pZCBnYXRld2F5X3Jlc3VtZV9jb21wbGV0ZShzdHJ1Y3Qg YXVkaW9fZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkKIAl9CiAKIAljbGllbnQtPnJlcV9p ZCA9IDA7CisJcmV0dXJuOworCitmYWlsZWQ6CisJZXJyb3IoImdhdGV3YXlfcmVzdW1lX2NvbXBs ZXRlOiByZXN1bWUgZmFpbGVkIik7CisJdW5peF9pcGNfZXJyb3IoY2xpZW50LCBCVF9TVEFSVF9T VFJFQU0sIEVJTyk7CiB9CiAKIHN0YXRpYyB2b2lkIGhlYWRzZXRfc3VzcGVuZF9jb21wbGV0ZShz dHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkKZGlmZiAtLWdpdCBhL2Rv Yy9oZnAtYXBpLnR4dCBiL2RvYy9oZnAtYXBpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lZDUyYmUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2hmcC1hcGkudHh0CkBA IC0wLDAgKzEsODEgQEAKK0dhdGV3YXkgaGllcmFyY2h5Cis9PT09PT09PT09PT09PT09PT09PT09 PT0KKworU2VydmljZQkJb3JnLmJsdWV6CitJbnRlcmZhY2UJb3JnLmJsdWV6LkhhbmRzZnJlZUdh dGV3YXkKK09iamVjdCBwYXRoCVt2YXJpYWJsZSBwcmVmaXhdL3toY2kwLGhjaTEsLi4ufS9kZXZf WFhfWFhfWFhfWFhfWFhfWFgKKworVGhpcyBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlIGZvciByZW1v dGUgZGV2aWNlcyB3aGljaCBjYW4gZnVuY3Rpb24gaW4gdGhlIEF1ZGlvCitHYXRld2F5IHJvbGUg b2YgdGhlIEhGUCBwcm9maWxlcy4gIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBleHRl cm5hbAordGVsZXBob255IHN0YWNrcyAvIGhhbmRsZXJzIG9mIHRoZSBIRlAgcHJvdG9jb2wuCisK K01ldGhvZHMJCXZvaWQgQ29ubmVjdCgpCisKKwkJCUNvbm5lY3QgdG8gdGhlIEFHIHNlcnZpY2Ug b24gdGhlIHJlbW90ZSBkZXZpY2UuCisKKwkJdm9pZCBEaXNjb25uZWN0KCkKKworCQkJRGlzY29u bmVjdCBmcm9tIHRoZSBBRyBzZXJ2aWNlIG9uIHRoZSByZW1vdGUgZGV2aWNlCisKKwkJZGljdCBH ZXRQcm9wZXJ0aWVzKCkKKworCQkJUmV0dXJucyBhbGwgcHJvcGVydGllcyBmb3IgdGhlIGludGVy ZmFjZS4gU2VlIHRoZQorCQkJcHJvcGVydGllcyBzZWN0aW9uIGZvciBhdmFpbGFibGUgcHJvcGVy dGllcy4KKworCQl2b2lkIFJlZ2lzdGVyQWdlbnQob2JqZWN0IHBhdGgpCisKKwkJCVRoZSBvYmpl Y3QgcGF0aCBkZWZpbmVzIHRoZSBwYXRoIHRoZSBvZiB0aGUgYWdlbnQKKwkJCXRoYXQgd2lsbCBi ZSBjYWxsZWQgd2hlbiBhIG5ldyBIYW5kc2ZyZWUgY29ubmVjdGlvbgorCQkJaXMgZXN0YWJsaXNo ZWQuCisJCQkKKwkJCUlmIGFuIGFwcGxpY2F0aW9uIGRpc2Nvbm5lY3RzIGZyb20gdGhlIGJ1cyBh bGwgb2YgaXRzCisJCQlyZWdpc3RlcmVkIGFnZW50cyB3aWxsIGJlIHJlbW92ZWQuCisKKwkJdm9p ZCBVbnJlZ2lzdGVyQWdlbnQob2JqZWN0IHBhdGgpCisKKwkJCVRoaXMgdW5yZWdpc3RlcnMgdGhl IGFnZW50IHRoYXQgaGFzIGJlZW4gcHJldmlvdXNseQorCQkJcmVnaXN0ZXJlZC4gVGhlIG9iamVj dCBwYXRoIHBhcmFtZXRlciBtdXN0IG1hdGNoIHRoZQorCQkJc2FtZSB2YWx1ZSB0aGF0IGhhcyBi ZWVuIHVzZWQgb24gcmVnaXN0cmF0aW9uLgorCitTaWduYWxzCQlQcm9wZXJ0eUNoYW5nZWQoc3Ry aW5nIG5hbWUsIHZhcmlhbnQgdmFsdWUpCisKKwkJCVRoaXMgc2lnbmFsIGluZGljYXRlcyBhIGNo YW5nZWQgdmFsdWUgb2YgdGhlIGdpdmVuCisJCQlwcm9wZXJ0eS4KKworUHJvcGVydGllcwlzdHJp bmcgU3RhdGUgW3JlYWRvbmx5XQorCisJCQlJbmRpY2F0ZXMgdGhlIHN0YXRlIG9mIHRoZSBjb25u ZWN0aW9uLiAgUG9zc2libGUKKwkJCXZhbHVlcyBhcmU6CisJCQkJImRpc2Nvbm5lY3RlZCIKKwkJ CQkiY29ubmVjdGluZyIKKwkJCQkiY29ubmVjdGVkIgorCQkJCSJwbGF5aW5nIgorCitIYW5kc2Zy ZWVBZ2VudCBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PQorCitTZXJ2aWNlICAgICAgICAgdW5p cXVlIG5hbWUKK0ludGVyZmFjZSAgICAgICBvcmcuYmx1ZXouSGFuZHNmcmVlQWdlbnQKK09iamVj dCBwYXRoICAgICBmcmVlbHkgZGVmaW5hYmxlCisKK01ldGhvZHMJCXZvaWQgTmV3Q29ubmVjdGlv bihmaWxlZGVzY3JpcHRvciBmZCkKKworCQkJVGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQgd2hlbmV2 ZXIgYSBuZXcgaGFuZHNmcmVlCisJCQljb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLiAg VGhlIG9iamVjdHBhdGgKKwkJCWNvbnRhaW5zIHRoZSBvYmplY3QgcGF0aCBvZiB0aGUgcmVtb3Rl IGRldmljZS4gIFRoaXMKKwkJCW1ldGhvZCBhc3N1bWVzIHRoYXQgREJ1cyBkYWVtb24gd2l0aCBm aWxlIGRlc2NyaXB0b3IKKwkJCXBhc3NpbmcgY2FwYWJpbGl0eSBpcyBiZWluZyB1c2VkLgorCisJ CQlUaGUgYWdlbnQgc2hvdWxkIG9ubHkgcmV0dXJuIHN1Y2Nlc3NmdWxseSBvbmNlIHRoZQorCQkJ ZXN0YWJsaXNobWVudCBvZiB0aGUgc2VydmljZSBsZXZlbCBjb25uZWN0aW9uIChTTEMpCisJCQlo YXMgYmVlbiBjb21wbGV0ZWQuICBJbiB0aGUgY2FzZSBvZiBIYW5kc2ZyZWUgdGhpcworCQkJbWVh bnMgdGhhdCBCUlNGIGV4Y2hhbmdlIGhhcyBiZWVuIHBlcmZvcm1lZCBhbmQKKwkJCW5lY2Vzc2Fy eSBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBkb25lLgorCisJCQlQb3NzaWJsZSBFcnJvcnM6IG9y Zy5ibHVlei5FcnJvci5JbnZhbGlkQXJndW1lbnRzCisJCQkJCSBvcmcuYmx1ZXouRXJyb3IuRmFp bGVkCisKKwkJdm9pZCBSZWxlYXNlKCkKKworCQkJVGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQgd2hl bmV2ZXIgdGhlIHNlcnZpY2UgZGFlbW9uCisJCQl1bnJlZ2lzdGVycyB0aGUgYWdlbnQuCi0tIAox LjYuNC40Cgo= --0016e6d27bb2138e65047d1449ce Content-Type: application/octet-stream; name="0001-Add-HFP-support-in-oFono.patch" Content-Disposition: attachment; filename="0001-Add-HFP-support-in-oFono.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4er2wpg5 RnJvbSAxZDM0OWRlZDhjMzg4MzFiMzY2MDBmNTNhOGRkOWI3ODFkOWUxM2ViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgOCBKYW4gMjAxMCAxNzoyNTo0MyAtMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEFkZCBIRlAgc3VwcG9ydCBpbiBvRm9ubwoKSXQgdXNlcyBCbHVlWiB0aHJvdWdoIHRvIGdl dCBIRlAgd29ya2luZyBmb2xsb3dpbmcgdGhlCm9yZy5ibHVlei5IYW5kc2ZyZWVHYXRld2F5IGFu ZCBvcmcuYmx1ZXouSGFuZHNmcmVlQWdlbnQgZnJvbSB0aGUgQmx1ZVoKRC1CdXMgQVBJLgoKWW91 IG5lZWQgdGhlIEhGUCBwYXRjaCBpbnRvIEJsdWVaIHRvby4KCk1hbnkgdGhhbmtzIHRvIFpoZW5o dWEgWmhhbmcgPHpoZW5odWEuemhhbmdAaW50ZWwuY29tPiBmb3IgaXRzIHByb3RvdHlwZQpvbiB0 aGlzIGNvZGUuCi0tLQogZHJpdmVycy9oZnBtb2RlbS9oZnBtb2RlbS5oIHwgICAgMiArCiBnYXRj aGF0L2dhdHR0eS5jICAgICAgICAgICAgfCAgIDIzICsrKysKIGdhdGNoYXQvZ2F0dHR5LmggICAg ICAgICAgICB8ICAgIDEgKwogaW5jbHVkZS9tb2RlbS5oICAgICAgICAgICAgIHwgICAgMiArCiBw bHVnaW5zL2hmcC5jICAgICAgICAgICAgICAgfCAgMjg0ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KIHBsdWdpbnMvbW9kZW1jb25mLmMgICAgICAgICB8ICAgIDMg Ky0KIHNyYy9tb2RlbS5jICAgICAgICAgICAgICAgICB8ICAgMTUgKysrCiA3IGZpbGVzIGNoYW5n ZWQsIDMxOCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2hmcG1vZGVtL2hmcG1vZGVtLmggYi9kcml2ZXJzL2hmcG1vZGVtL2hmcG1vZGVtLmgKaW5k ZXggNTA5ODQ2Yi4uNWZlZTY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oZnBtb2RlbS9oZnBtb2Rl bS5oCisrKyBiL2RyaXZlcnMvaGZwbW9kZW0vaGZwbW9kZW0uaApAQCAtNjMsMTEgKzYzLDEzIEBA IGVudW0gaGZwX2luZGljYXRvciB7CiAKIHN0cnVjdCBoZnBfZGF0YSB7CiAJR0F0Q2hhdCAqY2hh dDsKKwljaGFyICpoYW5kc2ZyZWVfcGF0aDsKIAl1bnNpZ25lZCBpbnQgYWdfZmVhdHVyZXM7CiAJ dW5zaWduZWQgaW50IGFnX21wdHlfZmVhdHVyZXM7CiAJdW5zaWduZWQgaW50IGhmX2ZlYXR1cmVz OwogCXVuc2lnbmVkIGNoYXIgY2luZF9wb3NbSEZQX0lORElDQVRPUl9MQVNUXTsKIAl1bnNpZ25l ZCBpbnQgY2luZF92YWxbSEZQX0lORElDQVRPUl9MQVNUXTsKKwl1bnNpZ25lZCBpbnQgYXRfdGlt ZW91dDsKIH07CiAKIGV4dGVybiB2b2lkIGhmcF9uZXRyZWdfaW5pdCgpOwpkaWZmIC0tZ2l0IGEv Z2F0Y2hhdC9nYXR0dHkuYyBiL2dhdGNoYXQvZ2F0dHR5LmMKaW5kZXggMDJjYTM4OS4uYWUxMjY2 MiAxMDA2NDQKLS0tIGEvZ2F0Y2hhdC9nYXR0dHkuYworKysgYi9nYXRjaGF0L2dhdHR0eS5jCkBA IC0yNjAsMyArMjYwLDI2IEBAIEdJT0NoYW5uZWwgKmdfYXRfdHR5X29wZW4oY29uc3QgY2hhciAq dHR5LCBHSGFzaFRhYmxlICpvcHRpb25zKQogCiAJcmV0dXJuIGNoYW5uZWw7CiB9CisKK0dJT0No YW5uZWwgKmdfYXRfZ2V0X2NoYW5uZWxfZnJvbV9mZChpbnQgZmQpCit7CisJR0lPQ2hhbm5lbCAq Y2hhbm5lbDsKKwlzdHJ1Y3QgdGVybWlvcyB0aTsKKworCS8qIFN3aXRjaCBUVFkgdG8gcmF3IG1v ZGUgKi8KKwltZW1zZXQoJnRpLCAwLCBzaXplb2YodGkpKTsKKwljZm1ha2VyYXcoJnRpKTsKKwl0 Y2ZsdXNoKGZkLCBUQ0lPRkxVU0gpOworCXRjc2V0YXR0cihmZCwgVENTQU5PVywgJnRpKTsKKwor CWNoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoZmQpOworCisJaWYgKGNoYW5uZWwgPT0g TlVMTCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWdfaW9fY2hhbm5l bF9zZXRfY2xvc2Vfb25fdW5yZWYoY2hhbm5lbCwgVFJVRSk7CisKKwlyZXR1cm4gY2hhbm5lbDsK K30KZGlmZiAtLWdpdCBhL2dhdGNoYXQvZ2F0dHR5LmggYi9nYXRjaGF0L2dhdHR0eS5oCmluZGV4 IGRjM2ZlMTYuLjczMGYxZGMgMTAwNjQ0Ci0tLSBhL2dhdGNoYXQvZ2F0dHR5LmgKKysrIGIvZ2F0 Y2hhdC9nYXR0dHkuaApAQCAtNDMsNiArNDMsNyBAQCBleHRlcm4gIkMiIHsKICAqLwogR0lPQ2hh bm5lbCAqZ19hdF90dHlfb3Blbihjb25zdCBjaGFyICp0dHksIEdIYXNoVGFibGUgKm9wdGlvbnMp OwogCitHSU9DaGFubmVsICpnX2F0X2dldF9jaGFubmVsX2Zyb21fZmQoaW50IGZkKTsKICNpZmRl ZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21vZGVtLmggYi9p bmNsdWRlL21vZGVtLmgKaW5kZXggYjJhYTYwNy4uYmYyODUxNSAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9tb2RlbS5oCisrKyBiL2luY2x1ZGUvbW9kZW0uaApAQCAtNDcsNiArNDcsOCBAQCBzdHJ1Y3Qg b2Zvbm9fbW9kZW0gKm9mb25vX21vZGVtX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj aGFyICp0eXBlKTsKIGludCBvZm9ub19tb2RlbV9yZWdpc3RlcihzdHJ1Y3Qgb2Zvbm9fbW9kZW0g Km1vZGVtKTsKIHZvaWQgb2Zvbm9fbW9kZW1fcmVtb3ZlKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9k ZW0pOwogCitzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm9mb25vX21vZGVtX2dldF9ieV9wYXRoKGNvbnN0 IGNoYXIgKnBhdGgpOworCiB2b2lkIG9mb25vX21vZGVtX3NldF9wb3dlcmVkKHN0cnVjdCBvZm9u b19tb2RlbSAqbW9kZW0sIG9mb25vX2Jvb2xfdCBwb3dlcmVkKTsKIG9mb25vX2Jvb2xfdCBvZm9u b19tb2RlbV9nZXRfcG93ZXJlZChzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtKTsKIApkaWZmIC0t Z2l0IGEvcGx1Z2lucy9oZnAuYyBiL3BsdWdpbnMvaGZwLmMKaW5kZXggM2JiZDkyMi4uMWU0ZWVi MyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9oZnAuYworKysgYi9wbHVnaW5zL2hmcC5jCkBAIC0zMCw2 ICszMCw4IEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdhdGNoYXQuaD4KICNpbmNs dWRlIDxnYXR0dHkuaD4KKyNpbmNsdWRlIDxnZGJ1cy5oPgorI2luY2x1ZGUgPG9mb25vLmg+CiAK ICNkZWZpbmUgT0ZPTk9fQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFCiAjaW5jbHVkZSA8b2Zvbm8vcGx1 Z2luLmg+CkBAIC01MiwxMSArNTQsMjQgQEAKIAogI2luY2x1ZGUgPGRyaXZlcnMvaGZwbW9kZW0v aGZwbW9kZW0uaD4KIAorI2luY2x1ZGUgPG9mb25vL2RidXMuaD4KKworI2RlZmluZSBCTFVFWl9T RVJWSUNFICJvcmcuYmx1ZXoiCisjZGVmaW5lIEJMVUVaX1BBVEggIi8iCisjZGVmaW5lIEJMVUVa X01BTkFHRVJfSU5URVJGQUNFICJvcmcuYmx1ZXouTWFuYWdlciIKKyNkZWZpbmUgQkxVRVpfQURB UFRFUl9JTlRFUkZBQ0UgIm9yZy5ibHVlei5BZGFwdGVyIgorI2RlZmluZSBCTFVFWl9ERVZJQ0Vf SU5URVJGQUNFICJvcmcuYmx1ZXouRGV2aWNlIgorI2RlZmluZSBCTFVFWl9HQVRFV0FZX0lOVEVS RkFDRSAib3JnLmJsdWV6LkhhbmRzZnJlZUdhdGV3YXkiCisKKyNkZWZpbmUgSEZQX0FHRU5UX0lO VEVSRkFDRSAib3JnLmJsdWV6LkhhbmRzZnJlZUFnZW50IgorCiBzdGF0aWMgY29uc3QgY2hhciAq YnJzZl9wcmVmaXhbXSA9IHsgIitCUlNGOiIsIE5VTEwgfTsKIHN0YXRpYyBjb25zdCBjaGFyICpj aW5kX3ByZWZpeFtdID0geyAiK0NJTkQ6IiwgTlVMTCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmNt ZXJfcHJlZml4W10gPSB7ICIrQ01FUjoiLCBOVUxMIH07CiBzdGF0aWMgY29uc3QgY2hhciAqY2hs ZF9wcmVmaXhbXSA9IHsgIitDSExEOiIsIE5VTEwgfTsKIAorc3RhdGljIERCdXNDb25uZWN0aW9u ICpjb25uZWN0aW9uOworCiBzdGF0aWMgaW50IGhmcF9kaXNhYmxlKHN0cnVjdCBvZm9ub19tb2Rl bSAqbW9kZW0pOwogCiBzdGF0aWMgdm9pZCBoZnBfZGVidWcoY29uc3QgY2hhciAqc3RyLCB2b2lk ICp1c2VyX2RhdGEpCkBAIC0xMzUsNiArMTUwLDYwIEBAIHN0YXRpYyB2b2lkIGNtZXJfY2IoZ2Jv b2xlYW4gb2ssIEdBdFJlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyX2RhdGEpCiAJCXNldmlj ZV9sZXZlbF9jb25uX2VzdGFibGlzaGVkKG1vZGVtKTsKIH0KIAorc3RhdGljIGludCBzZW5kX21l dGhvZF9jYWxsKGNvbnN0IGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJY29uc3Qg Y2hhciAqaW50ZXJmYWNlLCBjb25zdCBjaGFyICptZXRob2QsCisJCQkJREJ1c1BlbmRpbmdDYWxs Tm90aWZ5RnVuY3Rpb24gY2IsCisJCQkJdm9pZCAqdXNlcl9kYXRhLCBpbnQgdHlwZSwgLi4uKQor eworCURCdXNNZXNzYWdlICptc2c7CisJREJ1c1BlbmRpbmdDYWxsICpjYWxsOworCXZhX2xpc3Qg YXJnczsKKworCW1zZyA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoZGVzdCwgcGF0aCwg aW50ZXJmYWNlLCBtZXRob2QpOworCWlmICghbXNnKSB7CisJCW9mb25vX2Vycm9yKCJVbmFibGUg dG8gYWxsb2NhdGUgbmV3IEQtQnVzICVzIG1lc3NhZ2UiLCBtZXRob2QpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwl2YV9zdGFydChhcmdzLCB0eXBlKTsKKworCWlmICghZGJ1c19tZXNzYWdl X2FwcGVuZF9hcmdzX3ZhbGlzdChtc2csIHR5cGUsIGFyZ3MpKSB7CisJCWRidXNfbWVzc2FnZV91 bnJlZihtc2cpOworCQl2YV9lbmQoYXJncyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXZhX2Vu ZChhcmdzKTsKKworCWlmICghY2IpIHsKKwkJZ19kYnVzX3NlbmRfbWVzc2FnZShjb25uZWN0aW9u LCBtc2cpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWRidXNfY29ubmVjdGlvbl9zZW5kX3dp dGhfcmVwbHkoY29ubmVjdGlvbiwgbXNnLCAmY2FsbCwgLTEpKSB7CisJCW9mb25vX2Vycm9yKCJT ZW5kaW5nICVzIGZhaWxlZCIsIG1ldGhvZCk7CisJCWRidXNfbWVzc2FnZV91bnJlZihtc2cpOwor CQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkYnVzX3BlbmRpbmdfY2FsbF9zZXRfbm90aWZ5KGNhbGws IGNiLCB1c2VyX2RhdGEsIE5VTEwpOworCWRidXNfcGVuZGluZ19jYWxsX3VucmVmKGNhbGwpOwor CWRidXNfbWVzc2FnZV91bnJlZihtc2cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnYm9v bGVhbiBoZnBfZW5hYmxlX3RpbWVvdXQoZ3BvaW50ZXIgdXNlcikKK3sKKwlzdHJ1Y3Qgb2Zvbm9f bW9kZW0gKm1vZGVtID0gdXNlcjsKKworCWlmIChvZm9ub19tb2RlbV9nZXRfcG93ZXJlZChtb2Rl bSkpCisJCXJldHVybiBGQUxTRTsKKworCWhmcF9kaXNhYmxlKG1vZGVtKTsKKwlyZXR1cm4gRkFM U0U7Cit9CisKIHN0YXRpYyB2b2lkIGNpbmRfc3RhdHVzX2NiKGdib29sZWFuIG9rLCBHQXRSZXN1 bHQgKnJlc3VsdCwKIAkJCQlncG9pbnRlciB1c2VyX2RhdGEpCiB7CkBAIC0yNjAsOCArMzI5LDcg QEAgZXJyb3I6CiB9CiAKIC8qIGVpdGhlciBvRm9ubyBvciBQaG9uZSBjb3VsZCByZXF1ZXN0IFNM QyBjb25uZWN0aW9uICovCi1zdGF0aWMgaW50IHNlcnZpY2VfbGV2ZWxfY29ubmVjdGlvbihzdHJ1 Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtLAotCQkJCWNvbnN0IGNoYXIgKnR0eSkKK3N0YXRpYyBpbnQg c2VydmljZV9sZXZlbF9jb25uZWN0aW9uKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0sIGludCBm ZCkKIHsKIAlzdHJ1Y3QgaGZwX2RhdGEgKmRhdGEgPSBvZm9ub19tb2RlbV9nZXRfZGF0YShtb2Rl bSk7CiAJR0lPQ2hhbm5lbCAqaW87CkBAIC0yNjksNyArMzM3LDcgQEAgc3RhdGljIGludCBzZXJ2 aWNlX2xldmVsX2Nvbm5lY3Rpb24oc3RydWN0IG9mb25vX21vZGVtICptb2RlbSwKIAlHQXRDaGF0 ICpjaGF0OwogCWNoYXIgYnVmWzY0XTsKIAotCWlvID0gZ19hdF90dHlfb3Blbih0dHksIE5VTEwp OworCWlvID0gZ19hdF9nZXRfY2hhbm5lbF9mcm9tX2ZkKGZkKTsKIAlpZiAoIWlvKSB7CiAJCW9m b25vX2Vycm9yKCJTZXJ2aWNlIGxldmVsIGNvbm5lY3Rpb24gZmFpbGVkOiAlcyAoJWQpIiwKIAkJ CXN0cmVycm9yKGVycm5vKSwgZXJybm8pOwpAQCAtMjk2LDkgKzM2NCwxNTggQEAgc3RhdGljIGlu dCBzZXJ2aWNlX2xldmVsX2Nvbm5lY3Rpb24oc3RydWN0IG9mb25vX21vZGVtICptb2RlbSwKIAly ZXR1cm4gLUVJTlBST0dSRVNTOwogfQogCitzdGF0aWMgREJ1c01lc3NhZ2UgKmhmcF9hZ2VudF9u ZXdfY29ubmVjdGlvbihEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9p ZCAqZGF0YSkKK3sKKwlpbnQgZmQ7CisJY29uc3QgY2hhciAqcGF0aDsKKwlzdHJ1Y3Qgb2Zvbm9f bW9kZW0gKm1vZGVtID0gTlVMTDsKKworCXBhdGggPSBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobXNn KTsKKwltb2RlbSA9IG9mb25vX21vZGVtX2dldF9ieV9wYXRoKHBhdGgpOworCisJaWYgKCFtb2Rl bSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5V TEwsIERCVVNfVFlQRV9VTklYX0ZELCAmZmQsCisJCQkJREJVU19UWVBFX0lOVkFMSUQpKQorCQly ZXR1cm4gX19vZm9ub19lcnJvcl9pbnZhbGlkX2FyZ3MobXNnKTsKKworCXNlcnZpY2VfbGV2ZWxf Y29ubmVjdGlvbihtb2RlbSwgZmQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBEQnVz TWVzc2FnZSAqaGZwX2FnZW50X3JlbGVhc2UoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNz YWdlICptc2csIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBHREJ1 c01ldGhvZFRhYmxlIGFnZW50X21ldGhvZHNbXSA9IHsKKyAgICAgICAgeyAiTmV3Q29ubmVjdGlv biIsICJoIiwgIiIsIGhmcF9hZ2VudF9uZXdfY29ubmVjdGlvbiwKKwkJR19EQlVTX01FVEhPRF9G TEFHX0FTWU5DIH0sCisJeyAiUmVsZWFzZSIsICIiLCAiIiwgaGZwX2FnZW50X3JlbGVhc2UgfSwK Kwl7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyB2b2lkIGZpbmRfZGV2aWNl X2NiKERCdXNQZW5kaW5nQ2FsbCAqY2FsbCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCURCdXNF cnJvciBlcnI7CisJREJ1c01lc3NhZ2UgKnJlcGx5OworCXN0cnVjdCBvZm9ub19tb2RlbSAqbW9k ZW0gPSB1c2VyX2RhdGE7CisJc3RydWN0IGhmcF9kYXRhICpkYXRhID0gb2Zvbm9fbW9kZW1fZ2V0 X2RhdGEobW9kZW0pOworCWNvbnN0IGNoYXIgKmRldmljZSwgKm9ial9wYXRoOworCWludCByZXQ7 CisKKwlyZXBseSA9IGRidXNfcGVuZGluZ19jYWxsX3N0ZWFsX3JlcGx5KGNhbGwpOworCisJZGJ1 c19lcnJvcl9pbml0KCZlcnIpOworCisJaWYgKGRidXNfbWVzc2FnZV9nZXRfYXJncyhyZXBseSwg JmVyciwgREJVU19UWVBFX09CSkVDVF9QQVRILAorCQkJCSZkZXZpY2UsIERCVVNfVFlQRV9JTlZB TElEKSA9PSBGQUxTRSkgeworCQlpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycikgPT0gVFJVRSkg eworCQkJb2Zvbm9fZXJyb3IoIiVzIiwgZXJyLm1lc3NhZ2UpOworCQkJZGJ1c19lcnJvcl9mcmVl KCZlcnIpOworCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwlvZm9ub19kZWJ1ZygiVXNpbmcgZGV2 aWNlICVzIiwgZGV2aWNlKTsKKwlkYXRhLT5oYW5kc2ZyZWVfcGF0aCA9IGdfc3RyZHVwKGRldmlj ZSk7CisKKwlvYmpfcGF0aCA9IG9mb25vX21vZGVtX2dldF9wYXRoKG1vZGVtKTsKKworCXJldCA9 IHNlbmRfbWV0aG9kX2NhbGwoQkxVRVpfU0VSVklDRSwgZGV2aWNlLAorCQkJCUJMVUVaX0dBVEVX QVlfSU5URVJGQUNFLCAiUmVnaXN0ZXJBZ2VudCIsCisJCQkJTlVMTCwgTlVMTCwgREJVU19UWVBF X09CSkVDVF9QQVRILAorCQkJCSZvYmpfcGF0aCwgREJVU19UWVBFX0lOVkFMSUQpOworCisJaWYg KHJldCA8IDApCisJCW9mb25vX2Vycm9yKCJhZ2VudF9yZWdpc3RlciBmYWlsZWQoJWQpIiwgcmV0 KTsKKworZG9uZToKKwlkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworfQorCitzdGF0aWMgdm9p ZCBnZXRfYWRhcHRlcl9jYihEQnVzUGVuZGluZ0NhbGwgKmNhbGwsIGdwb2ludGVyIHVzZXJfZGF0 YSkKK3sKKwlEQnVzRXJyb3IgZXJyOworCURCdXNNZXNzYWdlICpyZXBseTsKKwlzdHJ1Y3Qgb2Zv bm9fbW9kZW0gKm1vZGVtID0gdXNlcl9kYXRhOworCWNvbnN0IGNoYXIgKmFkYXB0ZXIgPSBOVUxM OworCWNvbnN0IGNoYXIgKmFkZHJlc3M7CisJaW50IHJldDsKKworCXJlcGx5ID0gZGJ1c19wZW5k aW5nX2NhbGxfc3RlYWxfcmVwbHkoY2FsbCk7CisKKwlkYnVzX2Vycm9yX2luaXQoJmVycik7CisJ aWYgKGRidXNfbWVzc2FnZV9nZXRfYXJncyhyZXBseSwgJmVyciwKKwkJCQlEQlVTX1RZUEVfT0JK RUNUX1BBVEgsCisJCQkJJmFkYXB0ZXIsIERCVVNfVFlQRV9JTlZBTElEKSA9PSBGQUxTRSkgewor CQlpZiAoYWRhcHRlciA9PSBOVUxMKSB7CisJCQlvZm9ub19lcnJvcigiYmx1ZXRvb3RoIGFkYXB0 ZXIgaXMgbm90IGVuYWJsZWQiKTsKKwkJCWRidXNfZXJyb3JfZnJlZSgmZXJyKTsKKwkJCWdvdG8g ZG9uZTsKKwkJfQorCisJCWlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyKSA9PSBUUlVFKSB7CisJ CQlvZm9ub19lcnJvcigiJXMgJXMiLCBhZGFwdGVyLCBlcnIubWVzc2FnZSk7CisJCQlkYnVzX2Vy cm9yX2ZyZWUoJmVycik7CisJCX0KKwkJZ290byBkb25lOworCX0KKworCWFkZHJlc3MgPSBvZm9u b19tb2RlbV9nZXRfc3RyaW5nKG1vZGVtLCAiQWRkcmVzcyIpOworCisJREJHKCJhZGRyZXNzICVz IiwgYWRkcmVzcyk7CisKKwlpZiAoYWRkcmVzcyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlyZXQg PSBzZW5kX21ldGhvZF9jYWxsKEJMVUVaX1NFUlZJQ0UsIGFkYXB0ZXIsCisJCQkJQkxVRVpfQURB UFRFUl9JTlRFUkZBQ0UsICJGaW5kRGV2aWNlIiwKKwkJCQlmaW5kX2RldmljZV9jYiwgbW9kZW0s CisJCQkJREJVU19UWVBFX1NUUklORywgJmFkZHJlc3MsCisJCQkJREJVU19UWVBFX0lOVkFMSUQp OworCisJaWYgKHJldCA8IDApCisJCW9mb25vX2Vycm9yKCJmaW5kX2RldmljZSBmYWlsZWQoJWQp IiwgcmV0KTsKKworZG9uZToKKwlkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCit9CisKK3N0 YXRpYyBpbnQgaGZwX3JlZ2lzdGVyX29mb25vX2hhbmRzZnJlZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0g Km1vZGVtKQoreworCW9mb25vX2RlYnVnKCJSZWdpc3RlciBvRm9ubyBBZ2VudCB0byBibHVldG9v dGggZGFlbW9uIik7CisKKwlyZXR1cm4gc2VuZF9tZXRob2RfY2FsbChCTFVFWl9TRVJWSUNFLCBC TFVFWl9QQVRILAorCQkJCUJMVUVaX01BTkFHRVJfSU5URVJGQUNFLCAiRGVmYXVsdEFkYXB0ZXIi LAorCQkJCWdldF9hZGFwdGVyX2NiLCBtb2RlbSwKKwkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Cit9 CisKK3N0YXRpYyBpbnQgaGZwX3VucmVnaXN0ZXJfb2Zvbm9faGFuZHNmcmVlKHN0cnVjdCBvZm9u b19tb2RlbSAqbW9kZW0pCit7CisJY29uc3QgY2hhciAqb2JqX3BhdGggPSBvZm9ub19tb2RlbV9n ZXRfcGF0aChtb2RlbSk7CisJc3RydWN0IGhmcF9kYXRhICpkYXRhID0gb2Zvbm9fbW9kZW1fZ2V0 X2RhdGEobW9kZW0pOworCisJb2Zvbm9fZGVidWcoIlVucmVnaXN0ZXIgb0Zvbm8gQWdlbnQgdG8g Ymx1ZXRvb3RoIGRhZW1vbiIpOworCisJaWYgKCFkYXRhLT5oYW5kc2ZyZWVfcGF0aCkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc2VuZF9tZXRob2RfY2FsbChCTFVFWl9TRVJWSUNFLCBk YXRhLT5oYW5kc2ZyZWVfcGF0aCwKKwkJCQlCTFVFWl9HQVRFV0FZX0lOVEVSRkFDRSwgIlVucmVn aXN0ZXJBZ2VudCIsCisJCQkJTlVMTCwgTlVMTCwgREJVU19UWVBFX09CSkVDVF9QQVRILAorCQkJ CSZvYmpfcGF0aCwgREJVU19UWVBFX0lOVkFMSUQpOworfQorCiBzdGF0aWMgaW50IGhmcF9wcm9i ZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtKQogewogCXN0cnVjdCBoZnBfZGF0YSAqZGF0YTsK Kwljb25zdCBjaGFyICpvYmpfcGF0aDsKKwlEQnVzQ29ubmVjdGlvbiAqY29ubiA9IG9mb25vX2Ri dXNfZ2V0X2Nvbm5lY3Rpb24oKTsKIAogCWRhdGEgPSBnX3RyeV9uZXcwKHN0cnVjdCBoZnBfZGF0 YSwgMSk7CiAJaWYgKCFkYXRhKQpAQCAtMzEyLDM5ICs1MjksODEgQEAgc3RhdGljIGludCBoZnBf cHJvYmUoc3RydWN0IG9mb25vX21vZGVtICptb2RlbSkKIAogCW9mb25vX21vZGVtX3NldF9kYXRh KG1vZGVtLCBkYXRhKTsKIAorCWNvbm5lY3Rpb24gPSBkYnVzX2Nvbm5lY3Rpb25fcmVmKGNvbm4p OworCisJb2JqX3BhdGggPSBvZm9ub19tb2RlbV9nZXRfcGF0aChtb2RlbSk7CisJZ19kYnVzX3Jl Z2lzdGVyX2ludGVyZmFjZShjb25uLCBvYmpfcGF0aCwgSEZQX0FHRU5UX0lOVEVSRkFDRSwKKwkJ CWFnZW50X21ldGhvZHMsIE5VTEwsIE5VTEwsIGRhdGEsIE5VTEwpOworCisJaWYgKGhmcF9yZWdp c3Rlcl9vZm9ub19oYW5kc2ZyZWUobW9kZW0pICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJ cmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGhmcF9yZW1vdmUoc3RydWN0IG9mb25vX21vZGVt ICptb2RlbSkKIHsKLQlncG9pbnRlciBkYXRhID0gb2Zvbm9fbW9kZW1fZ2V0X2RhdGEobW9kZW0p OworCXN0cnVjdCBoZnBfZGF0YSAqZGF0YSA9IG9mb25vX21vZGVtX2dldF9kYXRhKG1vZGVtKTsK KworCWhmcF91bnJlZ2lzdGVyX29mb25vX2hhbmRzZnJlZShtb2RlbSk7CisKKwlpZiAoZGF0YS0+ aGFuZHNmcmVlX3BhdGgpCisJCWdfZnJlZShkYXRhLT5oYW5kc2ZyZWVfcGF0aCk7CiAKIAlpZiAo ZGF0YSkKIAkJZ19mcmVlKGRhdGEpOwogCisJZGJ1c19jb25uZWN0aW9uX3VucmVmKGNvbm5lY3Rp b24pOworCiAJb2Zvbm9fbW9kZW1fc2V0X2RhdGEobW9kZW0sIE5VTEwpOwogfQogCitzdGF0aWMg aW50IGhmcF9jb25uZWN0X29mb25vX2hhbmRzZnJlZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVt KQoreworCXN0cnVjdCBoZnBfZGF0YSAqZGF0YSA9IG9mb25vX21vZGVtX2dldF9kYXRhKG1vZGVt KTsKKworCW9mb25vX2RlYnVnKCJDb25uZWN0IHRvIGJsdWV0b290aCBkYWVtb24iKTsKKworCWlm ICghZGF0YS0+aGFuZHNmcmVlX3BhdGggfHwgIWNvbm5lY3Rpb24pCisJCXJldHVybiAtRUlOVkFM OworCisJcmV0dXJuIHNlbmRfbWV0aG9kX2NhbGwoQkxVRVpfU0VSVklDRSwgZGF0YS0+aGFuZHNm cmVlX3BhdGgsCisJCQkJQkxVRVpfR0FURVdBWV9JTlRFUkZBQ0UsICJDb25uZWN0IiwKKwkJCQlO VUxMLCBOVUxMLCBEQlVTX1RZUEVfSU5WQUxJRCk7Cit9CisKIC8qIHBvd2VyIHVwIGhhcmR3YXJl ICovCiBzdGF0aWMgaW50IGhmcF9lbmFibGUoc3RydWN0IG9mb25vX21vZGVtICptb2RlbSkKIHsK LQljb25zdCBjaGFyICp0dHk7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgaGZwX2RhdGEgKmRhdGEgPSBv Zm9ub19tb2RlbV9nZXRfZGF0YShtb2RlbSk7CiAKIAlEQkcoIiVwIiwgbW9kZW0pOwogCi0JdHR5 ID0gb2Zvbm9fbW9kZW1fZ2V0X3N0cmluZyhtb2RlbSwgIkRldmljZSIpOwotCWlmICh0dHkgPT0g TlVMTCkKKwlkYXRhLT5hdF90aW1lb3V0ID0KKwkJZ190aW1lb3V0X2FkZF9zZWNvbmRzKDEwLCBo ZnBfZW5hYmxlX3RpbWVvdXQsIG1vZGVtKTsKKworCWlmIChoZnBfY29ubmVjdF9vZm9ub19oYW5k c2ZyZWUobW9kZW0pIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBzZXJ2aWNlX2xl dmVsX2Nvbm5lY3Rpb24obW9kZW0sIHR0eSk7CisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKwor c3RhdGljIGludCBoZnBfZGlzY29ubmVjdF9vZm9ub19oYW5kc2ZyZWUoc3RydWN0IG9mb25vX21v ZGVtICptb2RlbSkKK3sKKwlzdHJ1Y3QgaGZwX2RhdGEgKmRhdGEgPSBvZm9ub19tb2RlbV9nZXRf ZGF0YShtb2RlbSk7CiAKLQlyZXR1cm4gcmV0OworCWlmICghZGF0YS0+aGFuZHNmcmVlX3BhdGgg fHwgIWNvbm5lY3Rpb24pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNlbmRfbWV0aG9k X2NhbGwoQkxVRVpfU0VSVklDRSwgZGF0YS0+aGFuZHNmcmVlX3BhdGgsCisJCQkJQkxVRVpfR0FU RVdBWV9JTlRFUkZBQ0UsICJEaXNjb25uZWN0IiwKKwkJCQlOVUxMLCBOVUxMLCBEQlVTX1RZUEVf SU5WQUxJRCk7CiB9CiAKIHN0YXRpYyBpbnQgaGZwX2Rpc2FibGUoc3RydWN0IG9mb25vX21vZGVt ICptb2RlbSkKIHsKIAlzdHJ1Y3QgaGZwX2RhdGEgKmRhdGEgPSBvZm9ub19tb2RlbV9nZXRfZGF0 YShtb2RlbSk7CisJR1NvdXJjZSAqc291cmNlOwogCiAJREJHKCIlcCIsIG1vZGVtKTsKIApAQCAt MzU5LDYgKzYxOCwxMSBAQCBzdGF0aWMgaW50IGhmcF9kaXNhYmxlKHN0cnVjdCBvZm9ub19tb2Rl bSAqbW9kZW0pCiAKIAlvZm9ub19tb2RlbV9zZXRfcG93ZXJlZChtb2RlbSwgRkFMU0UpOwogCisJ c291cmNlID0gZ19tYWluX2NvbnRleHRfZmluZF9zb3VyY2VfYnlfaWQoTlVMTCwgZGF0YS0+YXRf dGltZW91dCk7CisJaWYgKHNvdXJjZSkKKwkJZ19zb3VyY2VfZGVzdHJveShzb3VyY2UpOworCisJ aGZwX2Rpc2Nvbm5lY3Rfb2Zvbm9faGFuZHNmcmVlKG1vZGVtKTsKIAlyZXR1cm4gMDsKIH0KIApk aWZmIC0tZ2l0IGEvcGx1Z2lucy9tb2RlbWNvbmYuYyBiL3BsdWdpbnMvbW9kZW1jb25mLmMKaW5k ZXggYzhjMjYxZi4uYjRjMTYwMCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9tb2RlbWNvbmYuYworKysg Yi9wbHVnaW5zL21vZGVtY29uZi5jCkBAIC0xMjQsMTIgKzEyNCwxMSBAQCBzdGF0aWMgc3RydWN0 IG9mb25vX21vZGVtICpjcmVhdGVfbW9kZW0oR0tleUZpbGUgKmtleWZpbGUsIGNvbnN0IGNoYXIg Kmdyb3VwKQogCiAJbW9kZW0gPSBvZm9ub19tb2RlbV9jcmVhdGUoZ3JvdXAsIGRyaXZlcik7CiAK LQlpZiAoIWdfc3RyY21wMChkcml2ZXIsICJwaG9uZXNpbSIpKQorCWlmICghZ19zdHJjbXAwKGRy aXZlciwgInBob25lc2ltIikgfHwgIWdfc3RyY21wMChkcml2ZXIsICJoZnAiKSkKIAkJc2V0X2Fk ZHJlc3MobW9kZW0sIGtleWZpbGUsIGdyb3VwKTsKIAogCWlmICghZ19zdHJjbXAwKGRyaXZlciwg ImF0Z2VuIikgfHwgIWdfc3RyY21wMChkcml2ZXIsICJnMSIpIHx8CiAJCQkJCQkhZ19zdHJjbXAw KGRyaXZlciwgImNhbHlwc28iKSB8fAotCQkJCQkJIWdfc3RyY21wMChkcml2ZXIsICJoZnAiKSB8 fAogCQkJCQkJIWdfc3RyY21wMChkcml2ZXIsICJwYWxtcHJlIikpCiAJCXNldF9kZXZpY2UobW9k ZW0sIGtleWZpbGUsIGdyb3VwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL21vZGVtLmMgYi9zcmMvbW9k ZW0uYwppbmRleCBiYmM5OTA1Li45ZmFiNzIyIDEwMDY0NAotLS0gYS9zcmMvbW9kZW0uYworKysg Yi9zcmMvbW9kZW0uYwpAQCAtMTA3NCw2ICsxMDc0LDIxIEBAIHN0cnVjdCBvZm9ub19tb2RlbSAq b2Zvbm9fbW9kZW1fY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUpCiAJ cmV0dXJuIG1vZGVtOwogfQogCitzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm9mb25vX21vZGVtX2dldF9i eV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJR1NMaXN0ICpsOworCXN0cnVjdCBvZm9ub19t b2RlbSAqbW9kZW07CisKKwlmb3IgKGwgPSBnX21vZGVtX2xpc3Q7IGw7IGwgPSBsLT5uZXh0KSB7 CisJCW1vZGVtID0gbC0+ZGF0YTsKKworCQlpZiAoIWdfc3RyY21wMChtb2RlbS0+cGF0aCwgcGF0 aCkpCisJCQlyZXR1cm4gbW9kZW07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2 b2lkIGVtaXRfbW9kZW1zKCkKIHsKIAlEQnVzQ29ubmVjdGlvbiAqY29ubiA9IG9mb25vX2RidXNf Z2V0X2Nvbm5lY3Rpb24oKTsKLS0gCjEuNi40LjQKCg== --0016e6d27bb2138e65047d1449ce--