From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <51371B89.4020103@hilscher.com> Date: Wed, 06 Mar 2013 11:33:45 +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> In-Reply-To: <5136FC1E.6060608@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 , "xenomai@xenomai.org" SGVsbG8gR2lsbGVzLAoKSSB0cmllZCB0byBpbnRlZ3JhdGUgYWxsIG9mIHJlbWFya3MuIEkgZ2l2 ZSB5b3UgbXkgbmV3IHBhdGNoLgoKSWYgeW91IGhhdmUgb3RoZXJzIHJlbWFya3MgZG9uJ3QgaGVz aXRhdGUgOy0pLgoKVGhhbmsgeW91IGZvciB5b3VyIGhlbHAsCgpIaWxzY2hlciBGcmFuY2UKMTIs IHJ1ZSBkdSAzNcOobWUgUsOpZ2ltZW50IGQnQXZpYXRpb24KTWluaXBhcmMgZHUgQ2jDqm5lCjY5 NTAwIEJST04KRnJhbmNlClTDqWwuIDogKzMzICgwKSA0IDcyIDM3IDk4IDQwCkZheCAgOiArMzMg KDApIDQgNzggMjYgODMgMjcKaHR0cDovL3d3dy5oaWxzY2hlci5mcgpISUxTQ0hFUiBGUkFOQ0Ug CUrDqXLDtG1lIFBvbmNpbgpqcG9uY2luQGhpbHNjaGVyLmNvbQpJbmfDqW5pZXVyIETDqXZlbG9w cGVtZW50IExvZ2ljaWVsClTDqWwuIDogKzMzICgwKSA0IDcyIDM3IDk4IDQ0CgoKCgoKTGUgMDYv MDMvMjAxMyAwOToxOSwgR2lsbGVzIENoYW50ZXBlcmRyaXggYSDDqWNyaXQgOgo+IE9uIDAzLzA2 LzIwMTMgMDk6MTAgQU0sIEplcm9tZSBQb25jaW4gd3JvdGU6Cj4KPj4gSGVsbG8gR2lsbGVzLAo+ Pgo+PiBJIGRvbid0IHVuZGVyc3RhbmQsIGJlY2F1c2UgSSB0aGluayBJIGRpZCBhIG1heGltdW0g b2YgbW9kaWZpY2F0aW9ucwo+PiB0aGF0IHlvdSBzYWlkIG1lLi4uCj4gTm90IHJlYWxseSwgYm90 aCBKYW4gYW5kIEkgZ2F2ZSB5b3UgKGRpZmZlcmVudCkgcmVhc29ucyB3aHkgdGhpcyBpcyB3cm9u ZzoKPgo+ICtzdGF0aWMgc3NpemVfdCBjaWZ4X3BjaV93cml0ZShzdHJ1Y3QgcnRkbV9kZXZfY29u dGV4dCAqY29udGV4dCwKPiArCQkJICAgICAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvLCBj b25zdCB2b2lkICpidWYsCj4gKwkJCSAgICAgIHNpemVfdCBuYnl0ZSkKPiArewo+ICsJc3RydWN0 IGlvX21hcF9tZW0gbWFwX21lbTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKG5ieXRlID4gc2l6 ZW9mKHN0cnVjdCBpb19tYXBfbWVtKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAobmJ5dGUg PT0gc2l6ZW9mKHN0cnVjdCBpb19tYXBfbWVtKSkgewo+ICsJCS8qIENvcHkgZGF0YSBpbmZvcm1h dGlvbiBmb3IgS2VybmVsICovCj4gKwkJaWYgKHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlcih1c2Vy X2luZm8sICZtYXBfbWVtLCBidWYsIG5ieXRlKSkgewo+ICsJCQluYnl0ZSA9IDA7Cj4gKwkJfSBl bHNlIHsKPiArCQkJaWYgKCptYXBfbWVtLnZpcnRfYWRkciA9PSBOVUxMKSB7Cj4gKwkJCQkvKiBN YXAgcGh5c2ljYWwgb24gdmlydHVhbCBtZW1vcnkgKi8KPiArCQkJCXJldCA9IHJ0ZG1faW9tYXBf dG9fdXNlcih1c2VyX2luZm8sCj4gKwkJCQkJCQkgKHBoeXNfYWRkcl90KSBtYXBfbWVtLgo+ICsJ CQkJCQkJIHBoeXNfYWRkciwKPiArCQkJCQkJCSAoc2l6ZV90KSBtYXBfbWVtLgo+ICsJCQkJCQkJ IGxlbmd0aCwKPiArCQkJCQkJCSAoUFJPVF9SRUFEIHwKPiArCQkJCQkJCSAgUFJPVF9XUklURSks Cj4gKwkJCQkJCQkgbWFwX21lbS52aXJ0X2FkZHIsCj4gKwkJCQkJCQkgTlVMTCwgTlVMTCk7Cj4g Kwo+ICsJCQkJaWYgKHJldCAhPSAwKQo+ICsJCQkJCW5ieXRlID0gMDsKPiArCQkJfSBlbHNlIHsK PiArCQkJCS8qIFVuYXAgdmlydHVhbCBtZW1vcnkgKi8KPiArCQkJCXJldCA9IHJ0ZG1fbXVubWFw KHVzZXJfaW5mbywgKm1hcF9tZW0udmlydF9hZGRyLAo+ICsJCQkJCQkgIChzaXplX3QpIG1hcF9t ZW0ubGVuZ3RoKTsKPiArCj4gKwkJCQlpZiAocmV0ICE9IDApCj4gKwkJCQkJbmJ5dGUgPSAwOwo+ ICsJCQl9Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQkvKiBFcnJvciBub3RoaW5nIHRvIGRvICov Cj4gKwkJbmJ5dGUgPSAwOwo+ICsJfQo+ICsKPiArCXJldHVybiBuYnl0ZTsKPiArfQo+Cj4gWWV0 IHlvdSBrZXB0IHRoaXMgaW4gdGhlICJmaW5hbCIgcGF0Y2guCj4KPgo+PiBJJ20gYWdyZWUgdG8g dGVzdCB0aGUgY29kZSBpZiB5b3UgZml4ZWQgdGhlIGNvZGUsIG5vIHByb2JsZW0uIFBlcmhhcHMg SQo+PiBkb24ndCB1bmRlcnN0YW5kIHdoYXQgeW91IHJlYWxseSB3YW50Lgo+Pgo+PiBGb3IgbW9k aWZpY2F0aW9uIGluIDgwIGxpbmUsIGhvdyB0byBjaGFuZ2UgdGhpcyA/IDoKPj4KPj4gc3RydWN0 IHB4YV9kZXZfaW5mbyAqcHhhX2luZm8gPQo+PiAgICAgICAgICAoc3RydWN0IHB4YV9kZXZfaW5m byAqKSgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPnByaXY7Cj4+ICAgICAg dWludDMyX3QgX19pb21lbSAqcGx4X3RpbWluZzsKPj4KPj4gSSBjYW4ndCBkbyBhIGZ1bmN0aW9u Li4uCj4KPiBXZWxsLCBmaXJzdCBvZiBhbGwgeW91IHNob3VsZCBub3QgdXNlICJweGEiIGFzIGEg c3VmZml4LCBhcyB5b3UgbWF5IGtub3csCj4gdGhlcmUgYXJlIHByb2Nlc3NvcnMgbmFtZWQgInB4 YSIsIHNvLCB0aGlzIG1heSBjb25mbGljdC4gU29tZSBuYW1lIHJlbGF0ZWQKPiB0byB0aGUgYm9h cmQgd291bGQgYmUgYmV0dGVyLCBzdWNoIGFzICJjaWZ4Ii4KPgo+IFNlY29uZCwgdGhlcmUgYXJl IHVzdWFsbHkgYWNlc3Nzb3JzIHRvIHRoaW5ncyBsaWtlICJkZXZpY2VfZGF0YSIgYW5kICJwcml2 Igo+IG1lbWJlcnMuCj4KPiBUaGlyZGx5LCBpbiBDLCB5b3UgZG8gbm90IG5lZWQgYW4gZXhwbGlj aXQgY2FzdCB3aGVuIGNhc3RpbmcgZnJvbSB2b2lkICosCj4gdG8gYW55IHBvaW50ZXIgdHlwZSwg dGhpcyBpcyB3aGF0IG1ha2VzIHVzaW5nIG1hbGxvYyBjb252ZW5pZW50IGZvciBpbnN0YW5jZS4K PiBTbywgd2hhdCB5b3Ugc2hvdWxkIHJlYWxseSBkbyBpczoKPgo+IHN0cnVjdCBpb19pbmZvICpp b19pbmZvID0gdGhlX2RldmljZV9kYXRhX2FjY2Vzc29yKGluZm8pOwo+IHN0cnVjdCBjaWZ4X2Rl dl9pbmZvICpkZXZfaW5mbyA9IHRoZV9wcml2X2FjY2Vzc29yKGlvX2luZm8pOwo+CgotLS0tLS0t LS0tLS0tLSBuZXh0IHBhcnQgLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNt LWdlbmVyaWMvcGNpX2lkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wY2lfaWRzLmgKaW5kZXgg ZDI5OGJmNC4uM2Y4ZDdjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wY2lfaWRz LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wY2lfaWRzLmgKQEAgLTQwLDQgKzQwLDQ1IEBA CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYXzkwNTYgMHg5MDU2CiAjZW5kaWYKIAorLyogY2lm eCAqLworI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSCisjZGVmaW5lIFBDSV9WRU5ET1Jf SURfSElMU0NIRVIgMHgxNUNGCisjZW5kaWYKKworI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0hJTFND SEVSX05FVFgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYIDB4MDAwMAorI2Vu ZGlmCisKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMKKyNkZWZpbmUgUENJ X0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMgMHgwMDEwCisjZW5kaWYKKworI2lmbmRlZiBQQ0lf REVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0sKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ISUxTQ0hF Ul9ORVRKQUNLIDB4MDAyMAorI2VuZGlmCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9OWFNC X1BDQQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBIDB4MzIzNQorI2VuZGlmCisK KyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9OWFBDQQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lE X05YUENBIDB4MzMzNQorI2VuZGlmCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9ORVRQTENf UkFNCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX1JBTSAweDAwMDAKKyNlbmRpZgor CisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX0ZMQVNICisjZGVmaW5lIFBDSV9TVUJE RVZJQ0VfSURfTkVUUExDX0ZMQVNIIDB4MDAwMQorI2VuZGlmCisKKyNpZm5kZWYgUENJX1NVQkRF VklDRV9JRF9ORVRKQUNLX1JBTQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfUkFN IDB4MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9ORVRKQUNLX0ZMQVNI CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfTkVUSkFDS19GTEFTSCAweDAwMDEKKyNlbmRpZgor CiAjZW5kaWYgLyogX1hFTk9fQVNNX0dFTkVSSUNfUENJX0lEU19IICovCmRpZmYgLS1naXQgYS9r c3JjL2RyaXZlcnMvY2lmeC9LY29uZmlnIGIva3NyYy9kcml2ZXJzL2NpZngvS2NvbmZpZwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTVhNDVlCi0tLSAvZGV2L251bGwKKysr IGIva3NyYy9kcml2ZXJzL2NpZngvS2NvbmZpZwpAQCAtMCwwICsxLDExIEBACittZW51ICJIaWxz Y2hlciBjaWZYIGRyaXZlciIKKworY29uZmlnIFhFTk9fRFJJVkVSU19DSUZYCisJZGVwZW5kcyBv biBYRU5PX1NLSU5fUlRETQorCXRyaXN0YXRlICJIaWxzY2hlciBjaWZYIgorCWhlbHAKKworCVRo aXMgZHJpdmVyIHByb3ZpZGVzIEhpbHNjaGVyIGNpZlggCisJb3ZlciBSVERNLgorCitlbmRtZW51 CmRpZmYgLS1naXQgYS9rc3JjL2RyaXZlcnMvY2lmeC9NYWtlZmlsZSBiL2tzcmMvZHJpdmVycy9j aWZ4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTUwYmQK LS0tIC9kZXYvbnVsbAorKysgYi9rc3JjL2RyaXZlcnMvY2lmeC9NYWtlZmlsZQpAQCAtMCwwICsx LDEzIEBACitpZm5lcSAoJChWRVJTSU9OKS4kKFBBVENITEVWRUwpLDIuNCkKKworIyBNYWtlZmls ZSBmcmFnIGZvciBMaW51eCB2Mi42IGFuZCB2My54CisKK0VYVFJBX0NGTEFHUyArPSAtRF9fSU5f WEVOT01BSV9fIC1JaW5jbHVkZS94ZW5vbWFpIC1JZHJpdmVycy94ZW5vbWFpL2NpZngKKworb2Jq LSQoQ09ORklHX1hFTk9fRFJJVkVSU19DSUZYKSArPSB4ZW5vX2NpZnhfcGNpLm8KKworeGVub19j aWZ4X3BjaS15IDo9IGNpZnhfcGNpLm8KKworeGVub19jaWZ4X3BjaS0kKENPTkZJR19YRU5PX0RS SVZFUlNfUlRJUENfQ0lGWCkgKz0gY2lmeF9wY2kubworCitlbmRpZgpkaWZmIC0tZ2l0IGEva3Ny Yy9kcml2ZXJzL2NpZngvY2lmeF9wY2kuYyBiL2tzcmMvZHJpdmVycy9jaWZ4L2NpZnhfcGNpLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3ZDc2NQotLS0gL2Rldi9udWxs CisrKyBiL2tzcmMvZHJpdmVycy9jaWZ4L2NpZnhfcGNpLmMKQEAgLTAsMCArMSw2MzYgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSGlsc2NoZXIgRnJhbmNlIChKUCkgPHd3dy5oaWxzY2hl ci5mcj4KKyAqCisgKiBYZW5vbWFpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBYZW5vbWFpIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBYZW5vbWFpOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4K KworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hlbm9tYWkvcGNpX2lkcy5oPgorCisjaW5jbHVkZSA8 cnRkbS9ydGRtX2RyaXZlci5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVT Q1JJUFRJT04oIlJURE0gYm9hcmQgZHJpdmVyIGZvciBDaWZYIGNhcmRzIik7CitNT0RVTEVfQVVU SE9SKCJIaWxzY2hlciBGcmFuY2UgKEpQKSA8d3d3LmhpbHNjaGVyLmZyPiIpOworCisjZGVmaW5l IERQTV9IT1NUX0lOVF9FTjAgICAgICAgICAgICAgICAgMHhmZmYwCisjZGVmaW5lIERQTV9IT1NU X0lOVF9TVEFUMCAgICAgICAgICAgICAgMHhmZmUwCisjZGVmaW5lIFBMWF9HUElPX09GRlNFVCAg ICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBQTFhfVElNSU5HX09GRlNFVCAgICAgICAgICAg ICAgIDB4MGEKKworI2RlZmluZSBEUE1fSE9TVF9JTlRfTUFTSyAgICAgICAgICAgICAgIDB4ZTYw MGZmZmYKKyNkZWZpbmUgRFBNX0hPU1RfSU5UX0dMT0JBTF9FTiAgICAgICAgICAweDgwMDAwMDAw CisjZGVmaW5lIFBMWF9HUElPX0RBVEEwX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2Rl ZmluZSBQTFhfR1BJT19EQVRBMV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworI2RlZmlu ZSBOWF9QQ0FfUENJXzhfQklUX0RQTV9NT0RFICAgICAgIDB4NTQzMUY5NjIKKyNkZWZpbmUgTlhf UENBX1BDSV8xNl9CSVRfRFBNX01PREUgICAgICAweDQwNzNGOEUyCisjZGVmaW5lIE5YX1BDQV9Q Q0lfMzJfQklUX0RQTV9NT0RFICAgICAgMHg0MDgyNDEyMgorCisvKiBOdW1iZXIgb2YgYmFyICov CisvKiBwb2ludHMgdG8gdGhlIERQTSAtPiBuZXRYLCBuZXRQTEMsIG5ldEpBQ0sgKi8KKyNkZWZp bmUgRFBNX0JBUiAgICAgICAgICAgICAgICAgICAgICAgICAwCisvKiBwb2ludHMgdG8gdGhlIG9w dGlvbmFsIGV4dGVuZGVkIG1lbW9yeSAgICAgKi8KKyNkZWZpbmUgRVhUX01FTV9CQVIgICAgICAg ICAgICAgICAgICAgICAxCisvKiBwb2ludHMgdG8gdGhlIERQTSAtPiBuZXRYUExYICAgICAgICAg ICAgICAgKi8KKyNkZWZpbmUgUExYX0RQTV9CQVIgICAgICAgICAgICAgICAgICAgICAyCisvKiB0 aW1pbmcgY29uZmlnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFhB X1BMWF9CQVIgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEluZGV4IG9mIGlvX2luZm8gc3Ry dWN0dXJlJ3MgbWVtb3J5IGFycmF5ICovCisvKiBmaXJzdCBtYXBwaW5nIGRlc2NyaWJlcyBEUE0g ICAgICAgICAgICAgICovCisjZGVmaW5lIERQTV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAg MAorLyogc2Vjb25kIG1hcHBpbmcgZGVzY3JpYmVzIGV4dGVuZGVkIG1lbW9yeSAqLworI2RlZmlu ZSBFWFRfTUVNX0lOREVYICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBNQVhfTUFQUyAg ICAgICAgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBNRU1fUEhZUyAgICAgICAgICAgICAg ICAgICAgICAgIDEKKworI2RlZmluZSBEUklWRVJfTkFNRSAgICAgICAgICAgICAgICAgICAgICJy dGRtX2NpZngiCisjZGVmaW5lIFBFUklQSEVSQUxfTkFNRSAgICAgICAgICAgICAgICAgImNpZngi CisjZGVmaW5lIFBST1ZJREVSX05BTUUgICAgICAgICAgICAgICAgICAgIkhpbHNjaGVyIgorCisv KiBuYW1lIG9mIGEgTlhTQi1QQ0Egb3IgTlhQQ0EtUENJIGNhcmQgKi8KKyNkZWZpbmUgQ0lGWF9S VERNX1BMWF9DQVJEX05BTUUgICAgICAgICAibmV0eF9wbHgiCisvKiBuYW1lIG9mIGEgY2lmWCBQ Q0kgY2FyZCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0lGWF9SVERNX0NBUkRfTkFNRSAgICAg ICAgICAgICAibmV0eCIKKy8qIG5hbWUgb2YgYSBuZXRQTEMgUENJIGNhcmQgICAgICAgICAgICAq LworI2RlZmluZSBDSUZYX1JURE1fTkVUUExDX0NBUkRfTkFNRSAgICAgICJuZXRwbGMiCisvKiBu YW1lIG9mIGEgbmV0SkFDSyBQQ0kgY2FyZCAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0lGWF9SVERN X05FVEpBQ0tfQ0FSRF9OQU1FICAgICAibmV0amFjayIKKworc3RydWN0IGV4dF9pb19pbmZvIHsK Kwl1aW50MzJfdCBfX2lvbWVtICpwbHg7CisJdWludDhfdCBkcG1fbW9kZTsKKwl1aW50MzJfdCBw bHhfdGltaW5nOworfTsKKworc3RydWN0IGlvX21lbSB7CisJdWludDMyX3QgYWRkcjsKKwl1aW50 MzJfdCBzaXplOworCWludDMyX3QgbWVtdHlwZTsKKwl2b2lkIF9faW9tZW0gKmludGVybmFsX2Fk ZHI7Cit9OworCitzdHJ1Y3QgaW9faW5mbyB7CisJc3RydWN0IGlvX21lbSBtZW1bTUFYX01BUFNd OworCWludDMyX3QgaXJxOworCWJvb2wgaXJxX2VuYWJsZTsKKwlib29sIGlycV9yZWdpc3RlcmVk OworCXJ0ZG1faXJxX3QgaXJxX2hhbmRsZTsKKwlzdHJ1Y3QgZXh0X2lvX2luZm8gKnByaXY7Cit9 OworCitzdHJ1Y3QgaW9fbWFwX21lbSB7CisJdWludDMyX3QgcGh5c19hZGRyOworCXZvaWQgKip2 aXJ0X2FkZHI7CisJdWludDMyX3QgbGVuZ3RoOworfTsKKworc3RhdGljIHN0cnVjdCBpb19pbmZv ICpjaWZ4X2dldF9kZXZpY2VfZGF0YShzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pOworc3RhdGlj IHN0cnVjdCBleHRfaW9faW5mbyAqY2lmeF9nZXRfcHJpdmF0ZShzdHJ1Y3QgcnRkbV9kZXZpY2Ug KmluZm8pOworCitzdGF0aWMgaW50IGNpZnhfc2V0X3BseF90aW1pbmcoc3RydWN0IHJ0ZG1fZGV2 aWNlICppbmZvKTsKK3N0YXRpYyBpbnQgY2lmeF9nZXRfcGx4X3RpbWluZyhzdHJ1Y3QgcnRkbV9k ZXZpY2UgKmluZm8pOworc3RhdGljIGludCBjaWZ4X2dldF9kcG1fbW9kZShzdHJ1Y3QgcnRkbV9k ZXZpY2UgKmluZm8pOworCitzdGF0aWMgaW50IGNpZnhfcGNpX29wZW4oc3RydWN0IHJ0ZG1fZGV2 X2NvbnRleHQgKmNvbnRleHQsCisJCQkgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvLCBpbnQg b2ZsYWdzKTsKK3N0YXRpYyBpbnQgY2lmeF9wY2lfY2xvc2Uoc3RydWN0IHJ0ZG1fZGV2X2NvbnRl eHQgKmNvbnRleHQsCisJCQkgIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbyk7CitzdGF0aWMg c3NpemVfdCBjaWZ4X3BjaV9yZWFkKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAor CQkJICAgICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIHZvaWQgKmJ1ZiwKKwkJCSAgICAg c2l6ZV90IG5ieXRlKTsKK3N0YXRpYyBzc2l6ZV90IGNpZnhfcGNpX3dyaXRlKHN0cnVjdCBydGRt X2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgICAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9p bmZvLCBjb25zdCB2b2lkICpidWYsCisJCQkgICAgICBzaXplX3QgbmJ5dGUpOworCitzdGF0aWMg aW50IGNpZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lf ZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBjaWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9k ZXYgKmRldik7CisKKy8qIE51bWJlciBvciBjaWZ4IGZvdW5kIGFuZCBvcGVuICovCitzdGF0aWMg aW50MzJfdCBjaWZ4X251bTsKKworLyogUlRETSBEZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0dXJl ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0ZG1fZGV2aWNlIF9faW5pdGRhdGEgY2lmeF9kZXZp Y2VfdG1wbCA9IHsKKwkuc3RydWN0X3ZlcnNpb24gPSBSVERNX0RFVklDRV9TVFJVQ1RfVkVSLAor CisJLmRldmljZV9mbGFncyA9IFJURE1fTkFNRURfREVWSUNFLAorCS5jb250ZXh0X3NpemUgPSAw LAorCS5kZXZpY2VfbmFtZSA9ICIiLAorCisJLm9wZW5fbnJ0ID0gY2lmeF9wY2lfb3BlbiwKKwor CS5vcHMgPSB7CisJCS5jbG9zZV9ucnQgPSBjaWZ4X3BjaV9jbG9zZSwKKworCQkucmVhZF9ucnQg PSBjaWZ4X3BjaV9yZWFkLAorCQkud3JpdGVfbnJ0ID0gY2lmeF9wY2lfd3JpdGUsCisKKwkJLmlv Y3RsX3J0ID0gTlVMTCwKKwkJLmlvY3RsX25ydCA9IE5VTEwsCisKKwkJLnJlYWRfcnQgPSBOVUxM LAorCQkud3JpdGVfcnQgPSBOVUxMLAorCQl9LAorCisJLmRldmljZV9jbGFzcyA9IFJURE1fQ0xB U1NfRVhQRVJJTUVOVEFMLAorCS5kZXZpY2Vfc3ViX2NsYXNzID0gUlRETV9TVUJDTEFTU19HRU5F UklDLAorCS5wcm9maWxlX3ZlcnNpb24gPSAxLAorCS5kcml2ZXJfbmFtZSA9IERSSVZFUl9OQU1F LAorCS5kcml2ZXJfdmVyc2lvbiA9IFJURE1fRFJJVkVSX1ZFUigxLCAwLCAwKSwKKwkucHJvdmlk ZXJfbmFtZSA9IFBST1ZJREVSX05BTUUsCit9OworCisvKiBEZXZpY2UgdGFibGUgKi8KK3N0YXRp YyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjaWZ4X3BjaV90YmwpID0geworCXtQQ0lfVkVORE9S X0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgsCisJMCwgMH0sCisJe1BD SV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDMwLAorCVBDSV9WRU5ET1JfSURf UExYLCBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBfSwKKwl7UENJX1ZFTkRPUl9JRF9QTFgsIFBD SV9ERVZJQ0VfSURfUExYXzkwMzAsCisJUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9TVUJERVZJQ0Vf SURfTlhQQ0F9LAorCXtQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lEX0hJTFND SEVSX05FVFBMQywKKwlQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfU1VCREVWSUNFX0lEX05F VFBMQ19SQU19LAorCXtQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lEX0hJTFND SEVSX05FVFBMQywKKwlQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfU1VCREVWSUNFX0lEX05F VFBMQ19GTEFTSH0sCisJe1BDSV9WRU5ET1JfSURfSElMU0NIRVIsIFBDSV9ERVZJQ0VfSURfSElM U0NIRVJfTkVUSkFDSywKKwlQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfU1VCREVWSUNFX0lE X05FVEpBQ0tfUkFNfSwKKwl7UENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwgUENJX0RFVklDRV9JRF9I SUxTQ0hFUl9ORVRKQUNLLAorCVBDSV9WRU5ET1JfSURfSElMU0NIRVIsIFBDSV9TVUJERVZJQ0Vf SURfTkVUSkFDS19GTEFTSH0sCisJeyAwLH0KK307CisKKy8qIFJURE0gY2lmWCBEcml2ZXIgKi8K K3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjaWZ4X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAi Y2lmeCIsCisJLmlkX3RhYmxlID0gY2lmeF9wY2lfdGJsLAorCS5wcm9iZSA9IGNpZnhfcGNpX3By b2JlLAorCS5yZW1vdmUgPSBjaWZ4X3BjaV9yZW1vdmUsCit9OworCisvKgorICoJY2lmeF9ydGRt X2RldmljZV90b19kZXZpY2VfZGF0YQorICoJR2V0IGRldmljZV9kYXRhIHN0cnVjdHVyZQorICov CitzdGF0aWMgc3RydWN0IGlvX2luZm8gKmNpZnhfZ2V0X2RldmljZV9kYXRhKHN0cnVjdCBydGRt X2RldmljZSAqaW5mbykKK3sKKwlyZXR1cm4gaW5mby0+ZGV2aWNlX2RhdGE7Cit9CisKKy8qCisg KgljaWZ4X3J0ZG1fZGV2aWNlX3RvX3ByaXZhdGUKKyAqCUdldCBleHRfaW9faW5mbyBzdHJ1Y3R1 cmUKKyAqLworc3RhdGljIHN0cnVjdCBleHRfaW9faW5mbyAqY2lmeF9nZXRfcHJpdmF0ZShzdHJ1 Y3QgcnRkbV9kZXZpY2UgKmluZm8pCit7CisJcmV0dXJuICgoc3RydWN0IGlvX2luZm8gKilpbmZv LT5kZXZpY2VfZGF0YSktPnByaXY7Cit9CisKKy8qCisgKgljaWZ4X3NldF9wbHhfdGltaW5nCisg KglTZXQgcGx4IHRpbWluZworICovCitzdGF0aWMgaW50IGNpZnhfc2V0X3BseF90aW1pbmcoc3Ry dWN0IHJ0ZG1fZGV2aWNlICppbmZvKQoreworCXN0cnVjdCBleHRfaW9faW5mbyAqZXh0X2luZm8g PSBjaWZ4X2dldF9wcml2YXRlKGluZm8pOworCXVpbnQzMl90IF9faW9tZW0gKnBseF90aW1pbmc7 CisKKwlpZiAoZXh0X2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbHhfdGlt aW5nID0gZXh0X2luZm8tPnBseCArIFBMWF9USU1JTkdfT0ZGU0VUOworCSpwbHhfdGltaW5nID0g ZXh0X2luZm8tPnBseF90aW1pbmc7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNpZnhfZ2V0 X3BseF90aW1pbmcKKyAqIEdldCBwbHggdGltaW5nCisgKi8KK3N0YXRpYyBpbnQgY2lmeF9nZXRf cGx4X3RpbWluZyhzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pCit7CisJc3RydWN0IGV4dF9pb19p bmZvICpleHRfaW5mbyA9IGNpZnhfZ2V0X3ByaXZhdGUoaW5mbyk7CisKKwlpZiAoZXh0X2luZm8g PT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGV4dF9pbmZvLT5kcG1fbW9k ZSkgeworCWNhc2UgODoKKwkJZXh0X2luZm8tPnBseF90aW1pbmcgPSBOWF9QQ0FfUENJXzhfQklU X0RQTV9NT0RFOworCQlicmVhazsKKwljYXNlIDE2OgorCQlleHRfaW5mby0+cGx4X3RpbWluZyA9 IE5YX1BDQV9QQ0lfMTZfQklUX0RQTV9NT0RFOworCQlicmVhazsKKwljYXNlIDMyOgorCQlleHRf aW5mby0+cGx4X3RpbWluZyA9IE5YX1BDQV9QQ0lfMzJfQklUX0RQTV9NT0RFOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoK KyAqIGNpZnhfZ2V0X2RwbV9tb2RlCisgKiBHZXQgZHBtIG1vZGUKKyAqLworc3RhdGljIGludCBj aWZ4X2dldF9kcG1fbW9kZShzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pCit7CisJc3RydWN0IGV4 dF9pb19pbmZvICpleHRfaW5mbyA9IGNpZnhfZ2V0X3ByaXZhdGUoaW5mbyk7CisJdWludDMyX3Qg X19pb21lbSAqcGx4X2dwaW87CisKKwlpZiAoZXh0X2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1F Tk9ERVY7CisKKwlwbHhfZ3BpbyA9IGV4dF9pbmZvLT5wbHggKyBQTFhfR1BJT19PRkZTRVQ7CisK KwlpZiAoKCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEEwX01BU0spCisJICAgICYmIH4oKnBseF9n cGlvICYgUExYX0dQSU9fREFUQTFfTUFTSykpCisJCWV4dF9pbmZvLT5kcG1fbW9kZSA9IDg7CisJ ZWxzZSBpZiAofigqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMF9NQVNLKQorCQkgJiYgKCpwbHhf Z3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQorCQlleHRfaW5mby0+ZHBtX21vZGUgPSAzMjsK KwllbHNlIGlmICh+KCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEEwX01BU0spCisJCSAmJiB+KCpw bHhfZ3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQorCQlleHRfaW5mby0+ZHBtX21vZGUgPSAx NjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBj aWZ4X3BjaV9vcGVuCisgKiBPcGVuIFJURE0gY2lmeCBwY2kgZHJpdmVyCisgKi8KK3N0YXRpYyBp bnQgY2lmeF9wY2lfb3BlbihzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSBy dGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIGludCBvZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9 CisKKy8qCisgKiBjaWZ4X3BjaV9jbG9zZQorICogQ2xvc2UgUlRETSBjaWZ4IHBjaSBkcml2ZXIK KyAqLworc3RhdGljIGludCBjaWZ4X3BjaV9jbG9zZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAq Y29udGV4dCwKKwkJCSAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvKQoreworCXJldHVybiAw OworfQorCisvKgorICogY2lmeF9wY2lfcmVhZAorICogUmVhZAorICovCitzdGF0aWMgc3NpemVf dCBjaWZ4X3BjaV9yZWFkKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICAg ICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIHZvaWQgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90 IG5ieXRlKQoreworCXN0cnVjdCBydGRtX2RldmljZSAqaW5mbyA9IChzdHJ1Y3QgcnRkbV9kZXZp Y2UgKiljb250ZXh0LT5kZXZpY2U7CisKKwlpZiAobmJ5dGUgPiBzaXplb2Yoc3RydWN0IGlvX2lu Zm8pKQorCQlyZXR1cm4gMDsKKworCS8qIENvcHkgZGF0YSBpbmZvcm1hdGlvbiBmb3IgdXNlcmxh bmQgKi8KKwlpZiAocnRkbV9zYWZlX2NvcHlfdG9fdXNlcih1c2VyX2luZm8sIGJ1ZiwKKwkJCQkg ICAoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLAorCQkJCSAgIG5ieXRlKSkK KwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbmJ5dGU7Cit9CisKKy8qCisgKiBjaWZ4X3BjaV93cml0 ZQorICogd3JpdGUKKyAqLworc3RhdGljIHNzaXplX3QgY2lmeF9wY2lfd3JpdGUoc3RydWN0IHJ0 ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgICAgICBydGRtX3VzZXJfaW5mb190ICp1c2Vy X2luZm8sIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBuYnl0ZSkKK3sKKwlzdHJ1 Y3QgaW9fbWFwX21lbSBtYXBfbWVtOworCWludCByZXQ7CisKKwlzd2l0Y2ggKG5ieXRlKSB7CisJ Y2FzZSBzaXplb2YobWFwX21lbSk6CisJCS8qIENvcHkgZGF0YSBpbmZvcm1hdGlvbiBmb3IgS2Vy bmVsICovCisJCWlmIChydGRtX3NhZmVfY29weV9mcm9tX3VzZXIodXNlcl9pbmZvLCAmbWFwX21l bSwgYnVmLCBuYnl0ZSkpIHsKKwkJCW5ieXRlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICgqbWFw X21lbS52aXJ0X2FkZHIgPT0gTlVMTCkgeworCQkJCS8qIE1hcCBwaHlzaWNhbCBvbiB2aXJ0dWFs IG1lbW9yeSAqLworCQkJCXJldCA9IHJ0ZG1faW9tYXBfdG9fdXNlcih1c2VyX2luZm8sCisJCQkJ CQkJIChwaHlzX2FkZHJfdCkgbWFwX21lbS4KKwkJCQkJCQkgcGh5c19hZGRyLAorCQkJCQkJCSAo c2l6ZV90KSBtYXBfbWVtLgorCQkJCQkJCSBsZW5ndGgsCisJCQkJCQkJIChQUk9UX1JFQUQgfAor CQkJCQkJCSAgUFJPVF9XUklURSksCisJCQkJCQkJIG1hcF9tZW0udmlydF9hZGRyLAorCQkJCQkJ CSBOVUxMLCBOVUxMKTsKKworCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJbmJ5dGUgPSAwOworCQkJ fSBlbHNlIHsKKwkJCQkvKiBVbmFwIHZpcnR1YWwgbWVtb3J5ICovCisJCQkJcmV0ID0gcnRkbV9t dW5tYXAodXNlcl9pbmZvLCAqbWFwX21lbS52aXJ0X2FkZHIsCisJCQkJCQkgIChzaXplX3QpIG1h cF9tZW0ubGVuZ3RoKTsKKworCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJbmJ5dGUgPSAwOworCQkJ fQorCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogRXJyb3IgKi8KKwkJcmV0dXJuIDA7 CisJfQorCisJcmV0dXJuIG5ieXRlOworfQorCitzdGF0aWMgaW50IGNpZnhfcGNpX3Byb2JlKHN0 cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlz dHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSBOVUxMOworCXN0cnVjdCBpb19pbmZvICpkZXZpY2Vf ZGF0YSA9IE5VTEw7CisJaW50MzJfdCBiYXI7CisJaW50MzJfdCByZXQ7CisKKwkvKiBBbGxvY2F0 ZSBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZSAqLworCWluZm8gPSBydGRtX21hbGxvYyhzaXplb2Yo c3RydWN0IHJ0ZG1fZGV2aWNlKSk7CisKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVO T01FTTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldCAhPSAwKQor CQlnb3RvIG91dF9mcmVlOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIERSSVZF Ul9OQU1FKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0X2Rpc2FibGU7CisKKwkvKiBJbml0 aWFsaXplIHN0cnVjdHVyZSB3aXRoIGRlZmF1bHQgdmFsdWVzICovCisJbWVtY3B5KGluZm8sICZj aWZ4X2RldmljZV90bXBsLCBzaXplb2YoKmluZm8pKTsKKworCWluZm8tPmRldmljZV9pZCA9IGlk LT5kZXZpY2U7CisJc25wcmludGYoKGNoYXIgKilpbmZvLT5kZXZpY2VfbmFtZSwgUlRETV9NQVhf REVWTkFNRV9MRU4sICJjaWZ4JWkiLAorCQkgY2lmeF9udW0pOworCWluZm8tPnByb2NfbmFtZSA9 IGluZm8tPmRldmljZV9uYW1lOworCisJc3dpdGNoIChpZC0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lf REVWSUNFX0lEX0hJTFNDSEVSX05FVFg6CisJCWJhciA9IERQTV9CQVI7CisJCWluZm8tPnBlcmlw aGVyYWxfbmFtZSA9IENJRlhfUlRETV9DQVJEX05BTUU7CisJCWJyZWFrOworCWNhc2UgUENJX0RF VklDRV9JRF9ISUxTQ0hFUl9ORVRQTEM6CisJCWJhciA9IERQTV9CQVI7CisJCWluZm8tPnBlcmlw aGVyYWxfbmFtZSA9IENJRlhfUlRETV9ORVRQTENfQ0FSRF9OQU1FOworCQlicmVhazsKKwljYXNl IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSzoKKwkJYmFyID0gRFBNX0JBUjsKKwkJaW5m by0+cGVyaXBoZXJhbF9uYW1lID0gQ0lGWF9SVERNX05FVEpBQ0tfQ0FSRF9OQU1FOworCQlicmVh azsKKwlkZWZhdWx0OgorCQliYXIgPSBQTFhfRFBNX0JBUjsKKwkJaW5mby0+cGVyaXBoZXJhbF9u YW1lID0gQ0lGWF9SVERNX1BMWF9DQVJEX05BTUU7CisJCWJyZWFrOworCX0KKworCWluZm8tPmRl dmljZV9kYXRhID0gTlVMTDsKKworCS8qIEFsbG9jYXRlIHNwZWNpZmljIGRhdGEgc3RyY3V0dXJl IGZvciBkZXZpY2UgKi8KKwlkZXZpY2VfZGF0YSA9IHJ0ZG1fbWFsbG9jKHNpemVvZihzdHJ1Y3Qg aW9faW5mbykpOworCisJaWYgKGRldmljZV9kYXRhID09IE5VTEwpCisJCWdvdG8gb3V0X3JlbGVh c2U7CisKKwltZW1zZXQoZGV2aWNlX2RhdGEsIDAsIHNpemVvZigqZGV2aWNlX2RhdGEpKTsKKwor CS8qIEJBUiAwIG9yIDIgcG9pbnRzIHRvIHRoZSBjYXJkJ3MgZHVhbCBwb3J0IG1lbW9yeSAqLwor CWRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRl diwgYmFyKTsKKworCWlmIChkZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0uYWRkciA9PSAwKQor CQlnb3RvIG91dF9yZWxlYXNlOworCisJZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVy bmFsX2FkZHIgPQorCSAgICBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwg YmFyKSwKKwkJCQkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpKTsKKworCWlmIChkZXZpY2Vf ZGF0YS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkciA9PSAwKQorCQlnb3RvIG91dF9yZWxl YXNlOworCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiRFBNIGF0ICUwOGxYXG4iLAorCQkJKGxvbmcg dW5zaWduZWQgaW50KWRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5hZGRyKTsKKwlkZXZpY2Vf ZGF0YS0+bWVtW0RQTV9JTkRFWF0uc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpOwor CWRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5tZW10eXBlID0gTUVNX1BIWVM7CisKKwkvKiBt YXAgZXh0ZW5kZWQgbWVtIChCQVIgMSBwb2ludHMgdG8gdGhlIGV4dGVuZGVkIG1lbW9yeSkgKi8K KwlkZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmFkZHIgPQorCQkJCQlwY2lfcmVzb3Vy Y2Vfc3RhcnQoZGV2LCBFWFRfTUVNX0JBUik7CisKKwkvKiBleHRlbmRlZCBtZW1vcnkgaXMgb3B0 aW9uYWwsIHNvIGRvbid0IGNhcmUgaWYgaXQgaXMgbm90IHByZXNlbnQgKi8KKwlpZiAoZGV2aWNl X2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5hZGRyICE9IDApIHsKKwkJZGV2aWNlX2RhdGEtPm1l bVtFWFRfTUVNX0lOREVYXS5pbnRlcm5hbF9hZGRyID0KKwkJCWlvcmVtYXBfbm9jYWNoZShwY2lf cmVzb3VyY2Vfc3RhcnQoZGV2LCBFWFRfTUVNX0JBUiksCisJCQkJCXBjaV9yZXNvdXJjZV9sZW4o ZGV2LCBFWFRfTUVNX0JBUikpOworCisJCWlmIChkZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5E RVhdLmludGVybmFsX2FkZHIgPT0gMCkKKwkJCWdvdG8gb3V0X3VubWFwOworCisJCWRldl9pbmZv KCZkZXYtPmRldiwgImV4dGVuZGVkIG1lbW9yeSBhdCAlMDhsWFxuIiwKKwkJKGxvbmcgdW5zaWdu ZWQgaW50KWRldmljZV9kYXRhLT5tZW1bRVhUX01FTV9JTkRFWF0uYWRkcik7CisJCWRldmljZV9k YXRhLT5tZW1bRVhUX01FTV9JTkRFWF0uc2l6ZSA9CisJCQkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2 LCBFWFRfTUVNX0JBUik7CisJCWRldmljZV9kYXRhLT5tZW1bRVhUX01FTV9JTkRFWF0ubWVtdHlw ZSA9IE1FTV9QSFlTOworCX0KKworCWlmICgoaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJ TFNDSEVSX05FVFgpCisJICAgIHx8IChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NI RVJfTkVUUExDKQorCSAgICB8fCAoaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVS X05FVEpBQ0spKSB7CisJCS8qIG1ha2Ugc3VyZSBhbGwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQg Ki8KKwkJaW93cml0ZTMyKDAsIGRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9h ZGRyCisJCQkJCQkJKyBEUE1fSE9TVF9JTlRfRU4wKTsKKwkJZGV2aWNlX2RhdGEtPnByaXYgPSBO VUxMOworCX0gZWxzZSBpZiAoaWQtPnN1YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX05YUENB KSB7CisJCS8qIG1hcCBQTFggcmVnaXN0ZXJzICovCisJCXN0cnVjdCBleHRfaW9faW5mbyAqZXh0 X2luZm8gPQorCQkJCXJ0ZG1fbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXh0X2lvX2luZm8pKTsKKwor CQlpZiAoZXh0X2luZm8gPT0gTlVMTCkKKwkJCWdvdG8gb3V0X3VubWFwOworCisJCWRldmljZV9k YXRhLT5wcml2ID0gZXh0X2luZm87CisKKwkJLyogc2V0IFBYQSBQTFggVGltaW5ncyAqLworCQll eHRfaW5mby0+cGx4ID0gaW9yZW1hcF9ub2NhY2hlKAorCQkJCQlwY2lfcmVzb3VyY2Vfc3RhcnQo ZGV2LCBQWEFfUExYX0JBUiksCisJCQkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LCBQWEFfUExYX0JB UikpOworCisJCWlmIChleHRfaW5mby0+cGx4ID09IE5VTEwpCisJCQlnb3RvIG91dF91bm1hcDsK KwkJaWYgKGNpZnhfZ2V0X2RwbV9tb2RlKGluZm8pKQorCQkJZ290byBvdXRfdW5tYXBfcGx4Owor CQlpZiAoY2lmeF9nZXRfcGx4X3RpbWluZyhpbmZvKSkKKwkJCWdvdG8gb3V0X3VubWFwX3BseDsK KwkJaWYgKGNpZnhfc2V0X3BseF90aW1pbmcoaW5mbykpCisJCQlnb3RvIG91dF91bm1hcF9wbHg7 CisJfSBlbHNlIHsKKwkJc3RydWN0IGV4dF9pb19pbmZvICpleHRfaW5mbyA9CisJCQkJcnRkbV9t YWxsb2Moc2l6ZW9mKHN0cnVjdCBleHRfaW9faW5mbykpOworCisJCWlmIChleHRfaW5mbyA9PSBO VUxMKQorCQkJZ290byBvdXRfZnJlZV9weGE7CisKKwkJZXh0X2luZm8tPnBseCA9IE5VTEw7CisJ CWV4dF9pbmZvLT5wbHhfdGltaW5nID0gMDsKKwkJZXh0X2luZm8tPmRwbV9tb2RlID0gMDsKKwkJ ZGV2aWNlX2RhdGEtPnByaXYgPSBleHRfaW5mbzsKKwl9CisKKwkvKiBJbml0aWFsaXplIGlycSBk YXRhICovCisJZGV2aWNlX2RhdGEtPmlycSA9IGRldi0+aXJxOworCWRldmljZV9kYXRhLT5pcnFf ZW5hYmxlID0gMDsKKwlkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPSAwOworCisJaW5mby0+ ZGV2aWNlX2RhdGEgPSBkZXZpY2VfZGF0YTsKKworCS8qIFJlZ2lzdGVyIFJURE0gZGV2aWNlIGRy aXZlciAqLworCXJldCA9IHJ0ZG1fZGV2X3JlZ2lzdGVyKGluZm8pOworCWlmIChyZXQgIT0gMCkg eworCQlpZiAoaWQtPnN1YmRldmljZSAhPSBQQ0lfU1VCREVWSUNFX0lEX05YUENBKQorCQkJZ290 byBvdXRfdW5tYXA7CisJCWVsc2UKKwkJCWdvdG8gb3V0X3VubWFwX3BseDsKKwl9CisKKwlwY2lf c2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKworCWlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0Vf SURfSElMU0NIRVJfTkVUWCkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBDaWZY IGNhcmRcbiIpOworCWVsc2UgaWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hF Ul9ORVRQTEMpCisJCWRldl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgbmV0UExDIGNhcmRc biIpOworCWVsc2UgaWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRK QUNLKQorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIG5ldEpBQ0sgY2FyZFxuIik7 CisJZWxzZSBpZiAoaWQtPnN1YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBKQor CQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIE5YU0ItUENBIGFkYXB0ZXIgY2FyZFxu Iik7CisJZWxzZSB7CisJCXN0cnVjdCBleHRfaW9faW5mbyAqZXh0X2luZm8gPSBkZXZpY2VfZGF0 YS0+cHJpdjsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJInJlZ2lzdGVyZWQgTlhQQ0EtUENJ IGFkYXB0ZXIgY2FyZCBpbiAlZCBiaXQgbW9kZVxuIiwKKwkJCSgoc3RydWN0IGV4dF9pb19pbmZv ICopZXh0X2luZm8pLT5kcG1fbW9kZSk7CisJfQorCisJY2lmeF9udW0rKzsKKworCXJldHVybiAw OworCisgb3V0X3VubWFwX3BseDoKKwlpb3VubWFwKChkZXZpY2VfZGF0YS0+cHJpdiktPnBseCk7 CisKKyBvdXRfZnJlZV9weGE6CisJcnRkbV9mcmVlKGRldmljZV9kYXRhLT5wcml2KTsKKworIG91 dF91bm1hcDoKKwlpb3VubWFwKGRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9h ZGRyKTsKKwlpZiAoZGV2aWNlX2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5pbnRlcm5hbF9hZGRy ICE9IDApCisJCWlvdW5tYXAoZGV2aWNlX2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5pbnRlcm5h bF9hZGRyKTsKKworIG91dF9yZWxlYXNlOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwor IG91dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCisgb3V0X2ZyZWU6CisJ aWYgKGluZm8tPmRldmljZV9kYXRhICE9IE5VTEwpCisJCXJ0ZG1fZnJlZShpbmZvLT5kZXZpY2Vf ZGF0YSk7CisKKwlydGRtX2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3Rh dGljIHZvaWQgY2lmeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0 IHJ0ZG1fZGV2aWNlICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlvX2lu Zm8gKmRldmljZV9kYXRhID0gY2lmeF9nZXRfZGV2aWNlX2RhdGEoaW5mbyk7CisJc3RydWN0IGV4 dF9pb19pbmZvICpleHRfaW5mbyA9IGNpZnhfZ2V0X3ByaXZhdGUoaW5mbyk7CisJaW50MzJfdCBy ZXQ7CisKKwlpZiAoaW5mby0+ZGV2aWNlX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYg KGV4dF9pbmZvICE9IE5VTEwpIHsKKwkJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCQlp b3dyaXRlMzIoMCwgZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIKKwkJ CQkJCQkrIERQTV9IT1NUX0lOVF9FTjApOworCisJCWlmIChleHRfaW5mby0+cGx4ICE9IE5VTEwp CisJCQlpb3VubWFwKCh2b2lkICopZXh0X2luZm8tPnBseCk7CisKKwkJcnRkbV9mcmVlKCh2b2lk ICopZXh0X2luZm8pOworCX0KKworCS8qIFVucmVnaXN0ZXIgUlRETSBkZXZpY2UgZHJpdmVyICov CisJcmV0ID0gcnRkbV9kZXZfdW5yZWdpc3RlcihpbmZvLCAxMDAwKTsKKwlpZiAocmV0ICE9IDAp CisJCXJldHVybjsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlwY2lfZGlzYWJsZV9k ZXZpY2UoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCS8qIFVubWFwIG1l bW9yeSAqLworCWlvdW5tYXAoZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2Fk ZHIpOworCWlmIChkZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmludGVybmFsX2FkZHIg IT0gMCkKKwkJaW91bm1hcChkZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmludGVybmFs X2FkZHIpOworCisJLyogUmVsZWFzZSBzdHJ1Y3R1cmUgbWVtb3J5IGFsbG9jYXRpb24gKi8KKwly dGRtX2ZyZWUoaW5mby0+ZGV2aWNlX2RhdGEpOworCXJ0ZG1fZnJlZShpbmZvKTsKKworCWlmIChj aWZ4X251bSA+IDApCisJCWNpZnhfbnVtLS07Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNpZnhf cGNpX2luaXQodm9pZCkKK3sKKwljaWZ4X251bSA9IDA7CisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVy X2RyaXZlcigmY2lmeF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNpZnhf cGNpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNpZnhfcGNpX2RyaXZl cik7Cit9CisKK21vZHVsZV9pbml0KGNpZnhfcGNpX2luaXQpOworbW9kdWxlX2V4aXQoY2lmeF9w Y2lfZXhpdCk7CisKKy8qIEVuZCBvZiBmaWxlIDogY2lmeF9wY2kuYyAqLworCg==