From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <5138B33C.1060506@hilscher.com> Date: Thu, 07 Mar 2013 16:33:16 +0100 From: Jerome Poncin MIME-Version: 1.0 References: <512C806F.2020209@hilscher.com> <512C9E78.1060208@siemens.com> <512CC5C6.8050204@hilscher.com> <512CC6A3.1010005@siemens.com> <512F120A.5060109@hilscher.com> <512F4005.60000@siemens.com> <512F48AA.8020601@hilscher.com> <5130B39C.70300@hilscher.com> <513465CF.4030807@hilscher.com> <51350D5B.6060309@xenomai.org> <5135CCDE.5090401@hilscher.com> <5135D667.8060309@siemens.com> <51361281.20307@hilscher.com> <51364A61.3090002@xenomai.org> <5136F9E9.9030604@hilscher.com> <5136FC1E.6060608@xenomai.org> <51371B89.4020103@hilscher.com> <513730CE.2070102@xenomai.org> <51374B98.7030103@hilscher.com> <51376093.7060701@siemens.com> <5137AF89.1020009@xenomai.org> In-Reply-To: <5137AF89.1020009@xenomai.org> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Subject: Re: [Xenomai] Hilscher driver for cifX boards List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gilles Chanteperdrix Cc: Jan Kiszka , "xenomai@xenomai.org" TGUgMDYvMDMvMjAxMyAyMjowNSwgR2lsbGVzIENoYW50ZXBlcmRyaXggYSDDqWNyaXQgOgo+IE9u IDAzLzA2LzIwMTMgMDQ6MjggUE0sIEphbiBLaXN6a2Egd3JvdGU6Cj4KPj4gQWxzbyBoZXJlOiBE byBub3QgbWlzdXNlIHdyaXRlKCksIGRlZmluZSBhbiBJT0NUTCB0aGF0IGNvbnRhaW5zCj4+IHNv bWV0aGluZyBsaWtlICJNTUFQIiBhbmQgYW5vdGhlciBvbmUgd2l0aCBNVU5NQVAgaW4gaXRzIG5h bWUgLSB0aGF0J3MKPj4gdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZXJ2aWNlLCBubz8KPgo+IEEgbG90 IG9mIGRyaXZlcnMgcHJvYmFibHkgaGF2ZSB0byByZWludmVudCBhIHdheSB0byBwYXNzIGFsbCB0 aGUKPiBwYXJhbWV0ZXJzIGZvciBhbiBtbWFwLCB3aHkgbm90IGFkZGluZyBhbiAibW1hcCIgbWV0 aG9kIHRvIFJURE0gZHJpdmVycz8KPgo+CkhlbGxvLAoKSSAgcmUgZmFjdG9yZWQgbXkgY29kZSB3 aXRoIGFsbCB5b3VyIHJlbWFya3MgKEkgdGhpbmsgYW5kIEkgaG9wZSkuCgpDb3VsZCB5b3Ugc2F5 IG1lIGlmIGl0J3MgY29ycmVjdCBub3cgPwoKSmFuLCB5b3UncmUgcmlnaHQsIEl0J3MgcG9zc2li bGUgdG8gdXNlIFhlbm9tYWkgd2l0aCBVSU8gZHJpdmVyLCBidXQgSSAKd291bGQgbGlrZSB0byB1 c2UgbW9yZSByZWFsIHRpbWUgcG9zc2liaWxpdGllcyBvZiBYZW5vbWFpIGluIGZ1dHVyZSAKKGxp a2UgSVJRKS4KTXkgZmlyc3QgZ29hbCBpcyB0byBoYXZlIGEgY29kZSBjb21wbGlhbnQuCkkgYWRk ZWQgSVJRLCBhbmQgbXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGtl cm5lbCBjcmFzaCAKYWZ0ZXIgSVJRIHJlZ2lzdHJhdGlvbi4KClRoYW5rIHlvdSBmb3IgeW91ciBo ZWxwLAoKSmVyb21lCgoKCi0tLS0tLS0tLS0tLS0tIG5leHQgcGFydCAtLS0tLS0tLS0tLS0tLQov KgogKiBDb3B5cmlnaHQgKEMpIDIwMTMgSGlsc2NoZXIgRnJhbmNlIChKUCkgPHd3dy5oaWxzY2hl ci5mcj4KICoKICogWGVub21haSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAqIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFhlbm9tYWkgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK ICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQogKiBhbG9uZyB3aXRoIFhlbm9tYWk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwKICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0 b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICovCgojaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgojaW5jbHVkZSA8 bGludXgvaW8uaD4KI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KCiNpbmNsdWRlIDxhc20tZ2VuZXJp Yy94ZW5vbWFpL3BjaV9pZHMuaD4KCiNpbmNsdWRlIDxydGRtL3J0ZG1fZHJpdmVyLmg+CgpNT0RV TEVfTElDRU5TRSgiR1BMIik7Ck1PRFVMRV9ERVNDUklQVElPTigiUlRETSBib2FyZCBkcml2ZXIg Zm9yIENpZlggY2FyZHMiKTsKTU9EVUxFX0FVVEhPUigiSGlsc2NoZXIgRnJhbmNlIChKUCkgPHd3 dy5oaWxzY2hlci5mcj4iKTsKCiNkZWZpbmUgUlRDSUZYX0dFVF9NRU1fSU5GTwkJCQkweDAwCiNk ZWZpbmUgUlRDSUZYX01NQVAJCQkJCTB4MDEKI2RlZmluZSBSVENJRlhfTVVOTUFQCQkJCQkweDAy CiNkZWZpbmUgUlRDSUZYX1JFUVVFU1RfSVJRCQkJCTB4MDMKI2RlZmluZSBSVENJRlhfRlJFRV9J UlEJCQkJCTB4MDQKI2RlZmluZSBSVENJRlhfRU5BQkxFX0lSUQkJCQkweDA1CiNkZWZpbmUgUlRD SUZYX0RJU0FCTEVfSVJRCQkJCTB4MDYKCiNkZWZpbmUgRFBNX0hPU1RfSU5UX0VOMCAgICAgICAg ICAgICAgICAweGZmZjAKI2RlZmluZSBEUE1fSE9TVF9JTlRfU1RBVDAgICAgICAgICAgICAgIDB4 ZmZlMAojZGVmaW5lIFBMWF9HUElPX09GRlNFVCAgICAgICAgICAgICAgICAgMHgxNQojZGVmaW5l IFBMWF9USU1JTkdfT0ZGU0VUICAgICAgICAgICAgICAgMHgwYQoKI2RlZmluZSBEUE1fSE9TVF9J TlRfTUFTSyAgICAgICAgICAgICAgIDB4ZTYwMGZmZmYKI2RlZmluZSBEUE1fSE9TVF9JTlRfR0xP QkFMX0VOICAgICAgICAgIDB4ODAwMDAwMDAKI2RlZmluZSBQTFhfR1BJT19EQVRBMF9NQVNLICAg ICAgICAgICAgIDB4MDAwMDAwMDQKI2RlZmluZSBQTFhfR1BJT19EQVRBMV9NQVNLICAgICAgICAg ICAgIDB4MDAwMDAwMjAKCiNkZWZpbmUgTlhfUENBX1BDSV84X0JJVF9EUE1fTU9ERSAgICAgICAw eDU0MzFGOTYyCiNkZWZpbmUgTlhfUENBX1BDSV8xNl9CSVRfRFBNX01PREUgICAgICAweDQwNzNG OEUyCiNkZWZpbmUgTlhfUENBX1BDSV8zMl9CSVRfRFBNX01PREUgICAgICAweDQwODI0MTIyCgov KiBOdW1iZXIgb2YgYmFyICovCi8qIHBvaW50cyB0byB0aGUgRFBNIC0+IG5ldFgsIG5ldFBMQywg bmV0SkFDSyAqLwojZGVmaW5lIERQTV9CQVIgICAgICAgICAgICAgICAgICAgICAgICAgMAovKiBw b2ludHMgdG8gdGhlIG9wdGlvbmFsIGV4dGVuZGVkIG1lbW9yeSAgICAgKi8KI2RlZmluZSBFWFRf TUVNX0JBUiAgICAgICAgICAgICAgICAgICAgIDEKLyogcG9pbnRzIHRvIHRoZSBEUE0gLT4gbmV0 WFBMWCAgICAgICAgICAgICAgICovCiNkZWZpbmUgUExYX0RQTV9CQVIgICAgICAgICAgICAgICAg ICAgICAyCi8qIHRpbWluZyBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwoj ZGVmaW5lIFBYQV9QTFhfQkFSICAgICAgICAgICAgICAgICAgICAgMAoKLyogSW5kZXggb2YgaW9f aW5mbyBzdHJ1Y3R1cmUncyBtZW1vcnkgYXJyYXkgKi8KLyogZmlyc3QgbWFwcGluZyBkZXNjcmli ZXMgRFBNICAgICAgICAgICAgICAqLwojZGVmaW5lIERQTV9JTkRFWCAgICAgICAgICAgICAgICAg ICAgICAgMAovKiBzZWNvbmQgbWFwcGluZyBkZXNjcmliZXMgZXh0ZW5kZWQgbWVtb3J5ICovCiNk ZWZpbmUgRVhUX01FTV9JTkRFWCAgICAgICAgICAgICAgICAgICAxCgojZGVmaW5lIE1BWF9NQVBT ICAgICAgICAgICAgICAgICAgICAgICAgMgoKI2RlZmluZSBNRU1fUEhZUyAgICAgICAgICAgICAg ICAgICAgICAgIDEKCiNkZWZpbmUgRFJJVkVSX05BTUUgICAgICAgICAgICAgICAgICAgICAicnRk bV9jaWZ4IgojZGVmaW5lIFBFUklQSEVSQUxfTkFNRSAgICAgICAgICAgICAgICAgImNpZngiCiNk ZWZpbmUgUFJPVklERVJfTkFNRSAgICAgICAgICAgICAgICAgICAiSGlsc2NoZXIiCgovKiBuYW1l IG9mIGEgTlhTQi1QQ0Egb3IgTlhQQ0EtUENJIGNhcmQgKi8KI2RlZmluZSBDSUZYX1JURE1fUExY X0NBUkRfTkFNRSAgICAgICAgICJuZXR4X3BseCIKLyogbmFtZSBvZiBhIGNpZlggUENJIGNhcmQg ICAgICAgICAgICAgICovCiNkZWZpbmUgQ0lGWF9SVERNX0NBUkRfTkFNRSAgICAgICAgICAgICAi bmV0eCIKLyogbmFtZSBvZiBhIG5ldFBMQyBQQ0kgY2FyZCAgICAgICAgICAgICovCiNkZWZpbmUg Q0lGWF9SVERNX05FVFBMQ19DQVJEX05BTUUgICAgICAibmV0cGxjIgovKiBuYW1lIG9mIGEgbmV0 SkFDSyBQQ0kgY2FyZCAgICAgICAgICAgKi8KI2RlZmluZSBDSUZYX1JURE1fTkVUSkFDS19DQVJE X05BTUUgICAgICJuZXRqYWNrIgoKc3RydWN0IGlvX21lbSB7Cgl1aW50MzJfdCBhZGRyOwoJdWlu dDMyX3Qgc2l6ZTsKCWludDMyX3QgbWVtdHlwZTsKCXZvaWQgX19pb21lbSAqaW50ZXJuYWxfYWRk cjsKfTsKCnN0cnVjdCBpb19pbmZvIHsKCXN0cnVjdCBpb19tZW0gbWVtW01BWF9NQVBTXTsKCWlu dDMyX3QgaXJxOwoJYm9vbCBpcnFfZW5hYmxlOwoJYm9vbCBpcnFfcmVnaXN0ZXJlZDsKCXJ0ZG1f aXJxX3QgaXJxX2hhbmRsZTsKCXN0cnVjdCBleHRfaW9faW5mbyAqcHJpdjsKfTsKCnN0cnVjdCBl eHRfaW9faW5mbyB7Cgl1aW50MzJfdCBfX2lvbWVtICpwbHg7Cgl1aW50OF90IGRwbV9tb2RlOwoJ dWludDMyX3QgcGx4X3RpbWluZzsKfTsKCnN0cnVjdCBpb19tYXBfbWVtIHsKCXVpbnQzMl90IHBo eXNfYWRkcjsKCXVpbnQzMl90IHZpcnRfYWRkcjsKCXVpbnQzMl90IGxlbmd0aDsKfTsKCnN0YXRp YyBzdHJ1Y3QgaW9faW5mbyAqY2lmeF9nZXRfZGV2aWNlX2RhdGEoc3RydWN0IHJ0ZG1fZGV2aWNl ICppbmZvKTsKc3RhdGljIHN0cnVjdCBleHRfaW9faW5mbyAqY2lmeF9nZXRfcHJpdmF0ZShzdHJ1 Y3QgcnRkbV9kZXZpY2UgKmluZm8pOwoKc3RhdGljIGludCBjaWZ4X3NldF9wbHhfdGltaW5nKHN0 cnVjdCBleHRfaW9faW5mbyAqZXh0X2luZm8pOwpzdGF0aWMgaW50IGNpZnhfZ2V0X3BseF90aW1p bmcoc3RydWN0IGV4dF9pb19pbmZvICpleHRfaW5mbyk7CnN0YXRpYyBpbnQgY2lmeF9nZXRfZHBt X21vZGUoc3RydWN0IGV4dF9pb19pbmZvICpleHRfaW5mbyk7CgpzdGF0aWMgaW50IGNpZnhfcGNp X29wZW4oc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCgkJCSBydGRtX3VzZXJfaW5m b190ICp1c2VyX2luZm8sIGludCBvZmxhZ3MpOwpzdGF0aWMgaW50IGNpZnhfcGNpX2Nsb3NlKHN0 cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAoJCQkgIHJ0ZG1fdXNlcl9pbmZvX3QgKnVz ZXJfaW5mbyk7CnN0YXRpYyBpbnQgY2lmeF9wY2lfaW9jdGwoc3RydWN0IHJ0ZG1fZGV2X2NvbnRl eHQgKmNvbnRleHQsCgkJCSAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvLAoJCQkgIHVuc2ln bmVkIGludCByZXF1ZXN0LCB2b2lkICphcmcpOwoKc3RhdGljIGludCBjaWZ4X3BjaV9wcm9iZShz dHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwpzdGF0 aWMgdm9pZCBjaWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldik7CgpzdGF0aWMgaW5s aW5lIGludCBjaWZ4X2hhbmRsZXIocnRkbV9pcnFfdCAqaXJxKTsKCi8qIE51bWJlciBvciBjaWZ4 IGZvdW5kIGFuZCBvcGVuICovCnN0YXRpYyBpbnQzMl90IGNpZnhfbnVtOwoKLyogUlRETSBEZXZp Y2UgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCnN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRkbV9kZXZp Y2UgX19pbml0ZGF0YSBjaWZ4X2RldmljZV90bXBsID0gewoJLnN0cnVjdF92ZXJzaW9uID0gUlRE TV9ERVZJQ0VfU1RSVUNUX1ZFUiwKCgkuZGV2aWNlX2ZsYWdzID0gUlRETV9OQU1FRF9ERVZJQ0Us CgkuY29udGV4dF9zaXplID0gMCwKCS5kZXZpY2VfbmFtZSA9ICIiLAoKCS5vcGVuX25ydCA9IGNp ZnhfcGNpX29wZW4sCgoJLm9wcyA9IHsKCQkuY2xvc2VfbnJ0ID0gY2lmeF9wY2lfY2xvc2UsCgoJ CS5yZWFkX25ydCA9IE5VTEwsCgkJLndyaXRlX25ydCA9IE5VTEwsCgoJCS5pb2N0bF9ydCA9IE5V TEwsCgkJLmlvY3RsX25ydCA9IGNpZnhfcGNpX2lvY3RsLAoKCQkucmVhZF9ydCA9IE5VTEwsCgkJ LndyaXRlX3J0ID0gTlVMTCwKCQl9LAoKCS5kZXZpY2VfY2xhc3MgPSBSVERNX0NMQVNTX0VYUEVS SU1FTlRBTCwKCS5kZXZpY2Vfc3ViX2NsYXNzID0gUlRETV9TVUJDTEFTU19HRU5FUklDLAoJLnBy b2ZpbGVfdmVyc2lvbiA9IDEsCgkuZHJpdmVyX25hbWUgPSBEUklWRVJfTkFNRSwKCS5kcml2ZXJf dmVyc2lvbiA9IFJURE1fRFJJVkVSX1ZFUigxLCAwLCAwKSwKCS5wcm92aWRlcl9uYW1lID0gUFJP VklERVJfTkFNRSwKfTsKCi8qIERldmljZSB0YWJsZSAqLwpzdGF0aWMgREVGSU5FX1BDSV9ERVZJ Q0VfVEFCTEUoY2lmeF9wY2lfdGJsKSA9IHsKCXsKCVBDSV9WRU5ET1JfSURfSElMU0NIRVIsIFBD SV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWCwgMCwgMH0sIHsKCVBDSV9WRU5ET1JfSURfUExYLCBQ Q0lfREVWSUNFX0lEX1BMWF85MDMwLAoJCSAgICBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX1NVQkRF VklDRV9JRF9OWFNCX1BDQX0sIHsKCVBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BM WF85MDMwLAoJCSAgICBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX1NVQkRFVklDRV9JRF9OWFBDQX0s IHsKCVBDSV9WRU5ET1JfSURfSElMU0NIRVIsIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExD LAoJCSAgICBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19S QU19LCB7CglQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05F VFBMQywKCQkgICAgUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwgUENJX1NVQkRFVklDRV9JRF9ORVRQ TENfRkxBU0h9LCB7CglQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lEX0hJTFND SEVSX05FVEpBQ0ssCgkJICAgIFBDSV9WRU5ET1JfSURfSElMU0NIRVIsIFBDSV9TVUJERVZJQ0Vf SURfTkVUSkFDS19SQU19LCB7CglQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lE X0hJTFNDSEVSX05FVEpBQ0ssCgkJICAgIFBDSV9WRU5ET1JfSURfSElMU0NIRVIsIFBDSV9TVUJE RVZJQ0VfSURfTkVUSkFDS19GTEFTSH0sIHsKCTAsfQp9OwoKLyogY2lmWCBEcml2ZXIgKi8Kc3Rh dGljIHN0cnVjdCBwY2lfZHJpdmVyIGNpZnhfcGNpX2RyaXZlciA9IHsKCS5uYW1lID0gImNpZngi LAoJLmlkX3RhYmxlID0gY2lmeF9wY2lfdGJsLAoJLnByb2JlID0gY2lmeF9wY2lfcHJvYmUsCgku cmVtb3ZlID0gY2lmeF9wY2lfcmVtb3ZlLAp9OwoKLyoKICoJY2lmeF9ydGRtX2RldmljZV90b19k ZXZpY2VfZGF0YQogKglHZXQgZGV2aWNlX2RhdGEgc3RydWN0dXJlCiAqLwpzdGF0aWMgc3RydWN0 IGlvX2luZm8gKmNpZnhfZ2V0X2RldmljZV9kYXRhKHN0cnVjdCBydGRtX2RldmljZSAqaW5mbykK ewoJcmV0dXJuIGluZm8tPmRldmljZV9kYXRhOwp9CgovKgogKgljaWZ4X3J0ZG1fZGV2aWNlX3Rv X3ByaXZhdGUKICoJR2V0IGV4dF9pb19pbmZvIHN0cnVjdHVyZQogKi8Kc3RhdGljIHN0cnVjdCBl eHRfaW9faW5mbyAqY2lmeF9nZXRfcHJpdmF0ZShzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pCnsK CXJldHVybiAoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLT5wcml2Owp9Cgov KgogKiBjaWZ4X2hhbmRsZXIKICogY2lmeCBpbnRlcnJ1cHQgaGFuZGxlcgogKi8Kc3RhdGljIGlu bGluZSBpbnQgY2lmeF9oYW5kbGVyKHJ0ZG1faXJxX3QgKmlycSkKewoJc3RydWN0IHJ0ZG1fZGV2 aWNlICppbmZvID0gcnRkbV9pcnFfZ2V0X2FyZyhpcnEsIHZvaWQpOwoJc3RydWN0IGlvX2luZm8g KmRldmljZV9kYXRhID0gaW5mby0+ZGV2aWNlX2RhdGE7CgoJLyogVGVzdCBpZiByZXF1ZXN0IGlz IGZvciB0aGlzIGRyaXZlciAqLwoJaWYgKChkZXZpY2VfZGF0YS0+cHJpdiAhPSBOVUxMKQoJICAg IHx8IChkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPT0gMCkKCSAgICB8fCAoZGV2aWNlX2Rh dGEtPmlycV9lbmFibGUgPT0gMCkpIHsKCQkvKiBUaGlzIGlzIGEgUExYIGRldmljZSBhbmQgY2Fu bm90IHByb2R1Y2UgYW4gSVJRLAoJCSAgIElSUSBub3QgcmVnaXN0cmVkIG9yIG5vdCBlbmFibGUg KGNhbm5vdCBwcm9kdWNlIGFuIElSUSkgKi8KCQlyZXR1cm4gUlRETV9JUlFfTk9ORTsKCX0gZWxz ZSB7CgkJdm9pZCBfX2lvbWVtICppbnRfZW5hYmxlX3JlZyA9CgkJICAgIGRldmljZV9kYXRhLT5t ZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyICsKCQkgICAgRFBNX0hPU1RfSU5UX0VOMDsKCQl2 b2lkIF9faW9tZW0gKmludF9zdGF0dXNfcmVnID0KCQkgICAgZGV2aWNlX2RhdGEtPm1lbVtEUE1f SU5ERVhdLmludGVybmFsX2FkZHIgKwoJCSAgICBEUE1fSE9TVF9JTlRfU1RBVDA7CgoJCS8qIElz IG9uZSBvZiBvdXIgaW50ZXJydXB0cyBlbmFibGVkIGFuZCBhY3RpdmUgPyAqLwoJCWlmICghKGlv cmVhZDMyKGludF9lbmFibGVfcmVnKSAmIGlvcmVhZDMyKGludF9zdGF0dXNfcmVnKQoJCSAgICAg ICYgRFBNX0hPU1RfSU5UX01BU0spKQoJCQlyZXR1cm4gUlRETV9JUlFfTk9ORTsKCgkJLyogRGlz YWJsZSBpbnRlcnJ1cHQgKi8KCQlpb3dyaXRlMzIoaW9yZWFkMzIoaW50X2VuYWJsZV9yZWcpCgkJ CSAgJiB+RFBNX0hPU1RfSU5UX0dMT0JBTF9FTiwgaW50X2VuYWJsZV9yZWcpOwoKCQlyZXR1cm4g UlRETV9JUlFfSEFORExFRDsKCX0KfQoKLyoKICoJY2lmeF9zZXRfcGx4X3RpbWluZwogKglTZXQg cGx4IHRpbWluZwogKi8Kc3RhdGljIGludCBjaWZ4X3NldF9wbHhfdGltaW5nKHN0cnVjdCBleHRf aW9faW5mbyAqZXh0X2luZm8pCnsKCXVpbnQzMl90IF9faW9tZW0gKnBseF90aW1pbmc7CgoJaWYg KGV4dF9pbmZvID09IE5VTEwpCgkJcmV0dXJuIC1FTk9ERVY7CgoJcGx4X3RpbWluZyA9IGV4dF9p bmZvLT5wbHggKyBQTFhfVElNSU5HX09GRlNFVDsKCSpwbHhfdGltaW5nID0gZXh0X2luZm8tPnBs eF90aW1pbmc7CgoJcmV0dXJuIDA7Cn0KCi8qCiAqIGNpZnhfZ2V0X3BseF90aW1pbmcKICogR2V0 IHBseCB0aW1pbmcKICovCnN0YXRpYyBpbnQgY2lmeF9nZXRfcGx4X3RpbWluZyhzdHJ1Y3QgZXh0 X2lvX2luZm8gKmV4dF9pbmZvKQp7CglpZiAoZXh0X2luZm8gPT0gTlVMTCkKCQlyZXR1cm4gLUVO T0RFVjsKCglzd2l0Y2ggKGV4dF9pbmZvLT5kcG1fbW9kZSkgewoJY2FzZSA4OgoJCWV4dF9pbmZv LT5wbHhfdGltaW5nID0gTlhfUENBX1BDSV84X0JJVF9EUE1fTU9ERTsKCQlicmVhazsKCWNhc2Ug MTY6CgkJZXh0X2luZm8tPnBseF90aW1pbmcgPSBOWF9QQ0FfUENJXzE2X0JJVF9EUE1fTU9ERTsK CQlicmVhazsKCWNhc2UgMzI6CgkJZXh0X2luZm8tPnBseF90aW1pbmcgPSBOWF9QQ0FfUENJXzMy X0JJVF9EUE1fTU9ERTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJcmV0dXJuIC1FSU5WQUw7Cgl9CgoJ cmV0dXJuIDA7Cn0KCi8qCiAqIGNpZnhfZ2V0X2RwbV9tb2RlCiAqIEdldCBkcG0gbW9kZQogKi8K c3RhdGljIGludCBjaWZ4X2dldF9kcG1fbW9kZShzdHJ1Y3QgZXh0X2lvX2luZm8gKmV4dF9pbmZv KQp7Cgl1aW50MzJfdCBfX2lvbWVtICpwbHhfZ3BpbzsKCglpZiAoZXh0X2luZm8gPT0gTlVMTCkK CQlyZXR1cm4gLUVOT0RFVjsKCglwbHhfZ3BpbyA9IGV4dF9pbmZvLT5wbHggKyBQTFhfR1BJT19P RkZTRVQ7CgoJaWYgKCgqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMF9NQVNLKQoJICAgICYmIH4o KnBseF9ncGlvICYgUExYX0dQSU9fREFUQTFfTUFTSykpCgkJZXh0X2luZm8tPmRwbV9tb2RlID0g ODsKCWVsc2UgaWYgKH4oKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTBfTUFTSykKCQkgJiYgKCpw bHhfZ3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQoJCWV4dF9pbmZvLT5kcG1fbW9kZSA9IDMy OwoJZWxzZSBpZiAofigqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMF9NQVNLKQoJCSAmJiB+KCpw bHhfZ3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQoJCWV4dF9pbmZvLT5kcG1fbW9kZSA9IDE2 OwoJZWxzZQoJCXJldHVybiAtRUlOVkFMOwoKCXJldHVybiAwOwp9CgovKgogKiBjaWZ4X3BjaV9v cGVuCiAqIE9wZW4gY2lmeCBwY2kgZHJpdmVyCiAqLwpzdGF0aWMgaW50IGNpZnhfcGNpX29wZW4o c3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCgkJCSBydGRtX3VzZXJfaW5mb190ICp1 c2VyX2luZm8sIGludCBvZmxhZ3MpCnsKCXJldHVybiAwOwp9CgovKgogKiBjaWZ4X3BjaV9jbG9z ZQogKiBDbG9zZSBjaWZ4IHBjaSBkcml2ZXIKICovCnN0YXRpYyBpbnQgY2lmeF9wY2lfY2xvc2Uo c3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCgkJCSAgcnRkbV91c2VyX2luZm9fdCAq dXNlcl9pbmZvKQp7CglyZXR1cm4gMDsKfQoKLyoKICogY2lmeF9wY2lfaW9jdGwKICogaW9jdGwK ICovCnN0YXRpYyBpbnQgY2lmeF9wY2lfaW9jdGwoc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNv bnRleHQsCgkJCSAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvLAoJCQkgIHVuc2lnbmVkIGlu dCByZXF1ZXN0LCB2b2lkICphcmcpCnsKCWludCByZXQgPSAwOwoJc3RydWN0IHJ0ZG1fZGV2aWNl ICppbmZvID0gKHN0cnVjdCBydGRtX2RldmljZSAqKWNvbnRleHQtPmRldmljZTsKCXN0cnVjdCBp b19pbmZvICpkZXZpY2VfZGF0YSA9IGNpZnhfZ2V0X2RldmljZV9kYXRhKGluZm8pOwoJc3RydWN0 IGlvX21hcF9tZW0gbWFwX21lbTsKCglzd2l0Y2ggKHJlcXVlc3QpIHsKCWNhc2UgUlRDSUZYX0dF VF9NRU1fSU5GTzoKCQlpZiAoYXJnID09IE5VTEwpCgkJCXJldHVybiAtRUlOVkFMOwoKCQlyZXQg PSBydGRtX3NhZmVfY29weV90b191c2VyKHVzZXJfaW5mbywKCQkJCQkgICAgIGFyZywKCQkJCQkg ICAgIGRldmljZV9kYXRhLT5tZW0sCgkJCQkJICAgICAoMiAqIHNpemVvZih1aW50MzJfdCkpKTsK CQlicmVhazsKCgljYXNlIFJUQ0lGWF9NTUFQOgoJCWlmIChhcmcgPT0gTlVMTCkKCQkJcmV0dXJu IC1FSU5WQUw7CgoJCXJldCA9IHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlcih1c2VyX2luZm8sCgkJ CQkJICAgICAgICZtYXBfbWVtLCBhcmcsIHNpemVvZihtYXBfbWVtKSk7CgkJaWYgKHJldCAhPSAw KQoJCQlicmVhazsKCgkJLyogTWFwIHBoeXNpY2FsIG9uIHZpcnR1YWwgbWVtb3J5ICovCgkJcmV0 ID0gcnRkbV9pb21hcF90b191c2VyKHVzZXJfaW5mbywKCQkJCQkgbWFwX21lbS5waHlzX2FkZHIs CgkJCQkJIG1hcF9tZW0ubGVuZ3RoLAoJCQkJCSAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSksCgkJ CQkJICh2b2lkICoqKSZtYXBfbWVtLnZpcnRfYWRkciwKCQkJCQlOVUxMLAoJCQkJCU5VTEwpOwoJ CWlmIChyZXQgIT0gMCkKCQkJYnJlYWs7CgoJCXJldCA9IHJ0ZG1fc2FmZV9jb3B5X3RvX3VzZXIo dXNlcl9pbmZvLAoJCQkJCQlhcmcsCgkJCQkJCSZtYXBfbWVtLAoJCQkJCQlzaXplb2YobWFwX21l bSkpOwoJCWJyZWFrOwoKCWNhc2UgUlRDSUZYX01VTk1BUDoKCQlpZiAoYXJnID09IE5VTEwpCgkJ CXJldHVybiAtRUlOVkFMOwoKCQlyZXQgPSBydGRtX3NhZmVfY29weV9mcm9tX3VzZXIodXNlcl9p bmZvLAoJCQkJCSAgICAgICAmbWFwX21lbSwgYXJnLCBzaXplb2YobWFwX21lbSkpOwoJCWlmIChy ZXQgIT0gMCkKCQkJYnJlYWs7CgoJCS8qIFVuYXAgdmlydHVhbCBtZW1vcnkgKi8KCQlyZXQgPSBy dGRtX211bm1hcCh1c2VyX2luZm8sCgkJCQkgICh2b2lkICopbWFwX21lbS52aXJ0X2FkZHIsIG1h cF9tZW0ubGVuZ3RoKTsKCQlicmVhazsKCgljYXNlIFJUQ0lGWF9SRVFVRVNUX0lSUToKCQlpZiAo ZGV2aWNlX2RhdGEtPmlycV9yZWdpc3RlcmVkID09IDApIHsKCQkJcmV0ID0gcnRkbV9pcnFfcmVx dWVzdCgmZGV2aWNlX2RhdGEtPmlycV9oYW5kbGUsCgkJCQkJICAgICAgIGRldmljZV9kYXRhLT5p cnEsCgkJCQkJICAgICAgIGNpZnhfaGFuZGxlciwKCQkJCQkgICAgICAgUlRETV9JUlFUWVBFX1NI QVJFRCwKCQkJCQkgICAgICAgaW5mby0+ZGV2aWNlX25hbWUsICh2b2lkICopaW5mbyk7CgoJCQlp ZiAocmV0ID09IDApCgkJCQlkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPSAxOwoJCX0KCQli cmVhazsKCgljYXNlIFJUQ0lGWF9GUkVFX0lSUToKCQlpZiAoZGV2aWNlX2RhdGEtPmlycV9yZWdp c3RlcmVkID09IDEpIHsKCQkJcmV0ID0gcnRkbV9pcnFfZnJlZSgmZGV2aWNlX2RhdGEtPmlycV9o YW5kbGUpOwoKCQkJaWYgKHJldCA9PSAwKQoJCQkJZGV2aWNlX2RhdGEtPmlycV9yZWdpc3RlcmVk ID0gMDsKCQl9CgkJYnJlYWs7CgoJY2FzZSBSVENJRlhfRU5BQkxFX0lSUToKCQlpZiAoZGV2aWNl X2RhdGEtPmlycV9yZWdpc3RlcmVkID09IDEpIHsKCQkJcmV0ID0gcnRkbV9pcnFfZW5hYmxlKCZk ZXZpY2VfZGF0YS0+aXJxX2hhbmRsZSk7CgoJCQlpZiAocmV0ID09IDApCgkJCQlkZXZpY2VfZGF0 YS0+aXJxX2VuYWJsZSA9IDE7CgkJfQoJCWJyZWFrOwoKCWNhc2UgUlRDSUZYX0RJU0FCTEVfSVJR OgoJCWlmIChkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPT0gMSkgewoJCQlyZXQgPSBydGRt X2lycV9kaXNhYmxlKCZkZXZpY2VfZGF0YS0+aXJxX2hhbmRsZSk7CgoJCQlpZiAocmV0ID09IDAp CgkJCQlkZXZpY2VfZGF0YS0+aXJxX2VuYWJsZSA9IDA7CgkJfQoJCWJyZWFrOwoKCWRlZmF1bHQ6 CgkJcmV0ID0gLUVJTlZBTDsKCQlicmVhazsKCX0KCglyZXR1cm4gcmV0Owp9CgpzdGF0aWMgaW50 IGNpZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkICppZCkKewoJc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvID0gTlVMTDsKCXN0cnVjdCBp b19pbmZvICpkZXZpY2VfZGF0YSA9IE5VTEw7CglpbnQzMl90IGJhcjsKCWludDMyX3QgcmV0ID0g LUVOT0RFVjsKCgkvKiBBbGxvY2F0ZSBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZSAqLwoJaW5mbyA9 IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CgoJaWYgKGluZm8gPT0gTlVMTCkK CQlyZXR1cm4gLUVOT01FTTsKCglyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwoJaWYgKHJl dCAhPSAwKQoJCWdvdG8gb3V0X2ZyZWU7CgoJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYs IERSSVZFUl9OQU1FKTsKCWlmIChyZXQgIT0gMCkKCQlnb3RvIG91dF9kaXNhYmxlOwoKCS8qIElu aXRpYWxpemUgc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMgKi8KCW1lbWNweShpbmZvLCAm Y2lmeF9kZXZpY2VfdG1wbCwgc2l6ZW9mKCppbmZvKSk7CgoJaW5mby0+ZGV2aWNlX2lkID0gaWQt PmRldmljZTsKCXNucHJpbnRmKGluZm8tPmRldmljZV9uYW1lLCBSVERNX01BWF9ERVZOQU1FX0xF TiwgImNpZnglaSIsIGNpZnhfbnVtKTsKCWluZm8tPnByb2NfbmFtZSA9IGluZm8tPmRldmljZV9u YW1lOwoKCXN3aXRjaCAoaWQtPmRldmljZSkgewoJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVS X05FVFg6CgkJYmFyID0gRFBNX0JBUjsKCQlpbmZvLT5wZXJpcGhlcmFsX25hbWUgPSBDSUZYX1JU RE1fQ0FSRF9OQU1FOwoJCWJyZWFrOwoJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBM QzoKCQliYXIgPSBEUE1fQkFSOwoJCWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9O RVRQTENfQ0FSRF9OQU1FOwoJCWJyZWFrOwoJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05F VEpBQ0s6CgkJYmFyID0gRFBNX0JBUjsKCQlpbmZvLT5wZXJpcGhlcmFsX25hbWUgPSBDSUZYX1JU RE1fTkVUSkFDS19DQVJEX05BTUU7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWJhciA9IFBMWF9EUE1f QkFSOwoJCWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9QTFhfQ0FSRF9OQU1FOwoJ CWJyZWFrOwoJfQoKCWluZm8tPmRldmljZV9kYXRhID0gTlVMTDsKCgkvKiBBbGxvY2F0ZSBzcGVj aWZpYyBkYXRhIHN0cmN1dHVyZSBmb3IgZGV2aWNlICovCglkZXZpY2VfZGF0YSA9IGttYWxsb2Mo c2l6ZW9mKCpkZXZpY2VfZGF0YSksIEdGUF9LRVJORUwpOwoKCWlmIChkZXZpY2VfZGF0YSA9PSBO VUxMKSB7CgkJcmV0ID0gLUVOT01FTTsKCQlnb3RvIG91dF9yZWxlYXNlOwoJfQoKCW1lbXNldChk ZXZpY2VfZGF0YSwgMCwgc2l6ZW9mKCpkZXZpY2VfZGF0YSkpOwoKCS8qIEJBUiAwIG9yIDIgcG9p bnRzIHRvIHRoZSBjYXJkJ3MgZHVhbCBwb3J0IG1lbW9yeSAqLwoJZGV2aWNlX2RhdGEtPm1lbVtE UE1fSU5ERVhdLmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXIpOwoKCWlmIChkZXZp Y2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0uYWRkciA9PSAwKQoJCWdvdG8gb3V0X3JlbGVhc2U7CgoJ ZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIgPQoJICAgIGlvcmVtYXBf bm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXIpLAoJCQkgICAgcGNpX3Jlc291cmNl X2xlbihkZXYsIGJhcikpOwoKCWlmIChkZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJu YWxfYWRkciA9PSAwKQoJCWdvdG8gb3V0X3JlbGVhc2U7CgoJZGV2X2luZm8oJmRldi0+ZGV2LCAi RFBNIGF0ICUwOFhcbiIsIGRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5hZGRyKTsKCWRldmlj ZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIGJhcik7 CglkZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0ubWVtdHlwZSA9IE1FTV9QSFlTOwoKCS8qIG1h cCBleHRlbmRlZCBtZW0gKEJBUiAxIHBvaW50cyB0byB0aGUgZXh0ZW5kZWQgbWVtb3J5KSAqLwoJ ZGV2aWNlX2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5hZGRyID0KCSAgICBwY2lfcmVzb3VyY2Vf c3RhcnQoZGV2LCBFWFRfTUVNX0JBUik7CgoJLyogZXh0ZW5kZWQgbWVtb3J5IGlzIG9wdGlvbmFs LCBzbyBkb24ndCBjYXJlIGlmIGl0IGlzIG5vdCBwcmVzZW50ICovCglpZiAoZGV2aWNlX2RhdGEt Pm1lbVtFWFRfTUVNX0lOREVYXS5hZGRyICE9IDApIHsKCQlkZXZpY2VfZGF0YS0+bWVtW0VYVF9N RU1fSU5ERVhdLmludGVybmFsX2FkZHIgPQoJCSAgICBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291 cmNlX3N0YXJ0KGRldiwgRVhUX01FTV9CQVIpLAoJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2 LCBFWFRfTUVNX0JBUikpOwoKCQlpZiAoZGV2aWNlX2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5p bnRlcm5hbF9hZGRyID09IDApCgkJCWdvdG8gb3V0X3VubWFwOwoKCQlkZXZfaW5mbygmZGV2LT5k ZXYsCgkJCSAiZXh0ZW5kZWQgbWVtb3J5IGF0ICUwOFhcbiIsCgkJCSBkZXZpY2VfZGF0YS0+bWVt W0VYVF9NRU1fSU5ERVhdLmFkZHIpOwoJCWRldmljZV9kYXRhLT5tZW1bRVhUX01FTV9JTkRFWF0u c2l6ZSA9CgkJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBFWFRfTUVNX0JBUik7CgkJZGV2aWNl X2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5tZW10eXBlID0gTUVNX1BIWVM7Cgl9CgoJaWYgKChp ZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWCkKCSAgICB8fCAoaWQtPmRl dmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQykKCSAgICB8fCAoaWQtPmRldmlj ZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0spKSB7CgkJLyogbWFrZSBzdXJlIGFs bCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAqLwoJCWlvd3JpdGUzMigwLCBkZXZpY2VfZGF0YS0+ bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkcgoJCQkgICsgRFBNX0hPU1RfSU5UX0VOMCk7CgkJ ZGV2aWNlX2RhdGEtPnByaXYgPSBOVUxMOwoJfSBlbHNlIGlmIChpZC0+c3ViZGV2aWNlID09IFBD SV9TVUJERVZJQ0VfSURfTlhQQ0EpIHsKCQkvKiBtYXAgUExYIHJlZ2lzdGVycyAqLwoJCXN0cnVj dCBleHRfaW9faW5mbyAqZXh0X2luZm87CgoJCWV4dF9pbmZvID0ga21hbGxvYyhzaXplb2YoKmV4 dF9pbmZvKSwgR0ZQX0tFUk5FTCk7CgoJCWlmIChleHRfaW5mbyA9PSBOVUxMKSB7CgkJCXJldCA9 IC1FTk9NRU07CgkJCWdvdG8gb3V0X3VubWFwOwoJCX0KCgkJZGV2aWNlX2RhdGEtPnByaXYgPSBl eHRfaW5mbzsKCgkJLyogc2V0IFBYQSBQTFggVGltaW5ncyAqLwoJCWV4dF9pbmZvLT5wbHggPQoJ CSAgICBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgUFhBX1BMWF9CQVIp LAoJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBQWEFfUExYX0JBUikpOwoKCQlpZiAoZXh0 X2luZm8tPnBseCA9PSBOVUxMKQoJCQlnb3RvIG91dF91bm1hcDsKCQlpZiAoY2lmeF9nZXRfZHBt X21vZGUoZXh0X2luZm8pKQoJCQlnb3RvIG91dF91bm1hcF9wbHg7CgkJaWYgKGNpZnhfZ2V0X3Bs eF90aW1pbmcoZXh0X2luZm8pKQoJCQlnb3RvIG91dF91bm1hcF9wbHg7CgkJaWYgKGNpZnhfc2V0 X3BseF90aW1pbmcoZXh0X2luZm8pKQoJCQlnb3RvIG91dF91bm1hcF9wbHg7Cgl9IGVsc2UgewoJ CXN0cnVjdCBleHRfaW9faW5mbyAqZXh0X2luZm87CgoJCWV4dF9pbmZvID0ga21hbGxvYyhzaXpl b2YoKmV4dF9pbmZvKSwgR0ZQX0tFUk5FTCk7CgoJCWlmIChleHRfaW5mbyA9PSBOVUxMKSB7CgkJ CXJldCA9IC1FTk9NRU07CgkJCWdvdG8gb3V0X2ZyZWVfcHhhOwoJCX0KCgkJZXh0X2luZm8tPnBs eCA9IE5VTEw7CgkJZXh0X2luZm8tPnBseF90aW1pbmcgPSAwOwoJCWV4dF9pbmZvLT5kcG1fbW9k ZSA9IDA7CgkJZGV2aWNlX2RhdGEtPnByaXYgPSBleHRfaW5mbzsKCX0KCgkvKiBJbml0aWFsaXpl IGlycSBkYXRhICovCglkZXZpY2VfZGF0YS0+aXJxID0gZGV2LT5pcnE7CglkZXZpY2VfZGF0YS0+ aXJxX2VuYWJsZSA9IDA7CglkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPSAwOwoKCWluZm8t PmRldmljZV9kYXRhID0gZGV2aWNlX2RhdGE7CgoJLyogUmVnaXN0ZXIgUlRETSBkZXZpY2UgZHJp dmVyICovCglyZXQgPSBydGRtX2Rldl9yZWdpc3RlcihpbmZvKTsKCWlmIChyZXQgIT0gMCkgewoJ CWlmIChpZC0+c3ViZGV2aWNlICE9IFBDSV9TVUJERVZJQ0VfSURfTlhQQ0EpCgkJCWdvdG8gb3V0 X3VubWFwOwoJCWVsc2UKCQkJZ290byBvdXRfdW5tYXBfcGx4OwoJfQoKCXBjaV9zZXRfZHJ2ZGF0 YShkZXYsIGluZm8pOwoKCWlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJf TkVUWCkKCQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIENpZlggY2FyZFxuIik7Cgll bHNlIGlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDKQoJCWRl dl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgbmV0UExDIGNhcmRcbiIpOwoJZWxzZSBpZiAo aWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0spCgkJZGV2X2luZm8o JmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXRKQUNLIGNhcmRcbiIpOwoJZWxzZSBpZiAoaWQtPnN1 YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBKQoJCWRldl9pbmZvKCZkZXYtPmRl diwgInJlZ2lzdGVyZWQgTlhTQi1QQ0EgYWRhcHRlciBjYXJkXG4iKTsKCWVsc2UgewoJCXN0cnVj dCBleHRfaW9faW5mbyAqZXh0X2luZm8gPSBkZXZpY2VfZGF0YS0+cHJpdjsKCQlkZXZfaW5mbygm ZGV2LT5kZXYsCgkJCSAicmVnaXN0ZXJlZCBOWFBDQS1QQ0kgYWRhcHRlciBjYXJkIGluICVkIGJp dCBtb2RlXG4iLAoJCQkgKChzdHJ1Y3QgZXh0X2lvX2luZm8gKilleHRfaW5mbyktPmRwbV9tb2Rl KTsKCX0KCgljaWZ4X251bSsrOwoKCXJldHVybiAwOwoKb3V0X3VubWFwX3BseDoKCWlvdW5tYXAo KGRldmljZV9kYXRhLT5wcml2KS0+cGx4KTsKCm91dF9mcmVlX3B4YToKCWtmcmVlKGRldmljZV9k YXRhLT5wcml2KTsKCm91dF91bm1hcDoKCWlvdW5tYXAoZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5E RVhdLmludGVybmFsX2FkZHIpOwoJaWYgKGRldmljZV9kYXRhLT5tZW1bRVhUX01FTV9JTkRFWF0u aW50ZXJuYWxfYWRkciAhPSAwKQoJCWlvdW5tYXAoZGV2aWNlX2RhdGEtPm1lbVtFWFRfTUVNX0lO REVYXS5pbnRlcm5hbF9hZGRyKTsKCm91dF9yZWxlYXNlOgoJcGNpX3JlbGVhc2VfcmVnaW9ucyhk ZXYpOwoKb3V0X2Rpc2FibGU6CglwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKCm91dF9mcmVlOgoJ aWYgKGluZm8tPmRldmljZV9kYXRhICE9IE5VTEwpCgkJa2ZyZWUoaW5mby0+ZGV2aWNlX2RhdGEp OwoKCWtmcmVlKGluZm8pOwoKCXJldHVybiByZXQ7Cn0KCnN0YXRpYyB2b2lkIGNpZnhfcGNpX3Jl bW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQp7CglzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSBw Y2lfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBpb19pbmZvICpkZXZpY2VfZGF0YSA9IGNpZnhf Z2V0X2RldmljZV9kYXRhKGluZm8pOwoJc3RydWN0IGV4dF9pb19pbmZvICpleHRfaW5mbyA9IGNp ZnhfZ2V0X3ByaXZhdGUoaW5mbyk7CgoJaWYgKGNpZnhfbnVtID4gMCkgewoJCWlmIChpbmZvLT5k ZXZpY2VfZGF0YSA9PSBOVUxMKQoJCQlyZXR1cm47CgoJCWlmIChleHRfaW5mbyAhPSBOVUxMKSB7 CgkJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KCQkJaW93cml0ZTMyKDAsIGRldmljZV9k YXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyCgkJCQkgICsgRFBNX0hPU1RfSU5UX0VO MCk7CgoJCQlpZiAoZXh0X2luZm8tPnBseCAhPSBOVUxMKQoJCQkJaW91bm1hcCgodm9pZCAqKWV4 dF9pbmZvLT5wbHgpOwoKCQkJa2ZyZWUoKHZvaWQgKilleHRfaW5mbyk7CgkJfQoKCQkvKiBVbnJl Z2lzdGVyIGRldmljZSBkcml2ZXIgKi8KCQlydGRtX2Rldl91bnJlZ2lzdGVyKGluZm8sIDEwMDAp OwoKCQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CgkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7 CgkJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CgoJCS8qIFVubWFwIG1lbW9yeSAqLwoJCWlv dW5tYXAoZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIpOwoJCWlmIChk ZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmludGVybmFsX2FkZHIgIT0gMCkKCQkJaW91 bm1hcChkZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmludGVybmFsX2FkZHIpOwoKCQkv KiBSZWxlYXNlIHN0cnVjdHVyZSBtZW1vcnkgYWxsb2NhdGlvbiAqLwoJCWtmcmVlKGluZm8tPmRl dmljZV9kYXRhKTsKCQlrZnJlZShpbmZvKTsKCgkJY2lmeF9udW0tLTsKCX0KfQoKc3RhdGljIGlu dCBfX2luaXQgY2lmeF9wY2lfaW5pdCh2b2lkKQp7CglyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZl cigmY2lmeF9wY2lfZHJpdmVyKTsKfQoKc3RhdGljIHZvaWQgX19leGl0IGNpZnhfcGNpX2V4aXQo dm9pZCkKewoJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjaWZ4X3BjaV9kcml2ZXIpOwp9Cgptb2R1 bGVfaW5pdChjaWZ4X3BjaV9pbml0KTsKbW9kdWxlX2V4aXQoY2lmeF9wY2lfZXhpdCk7Cg==