From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <51370482.8070408@hilscher.com> Date: Wed, 06 Mar 2013 09:55:30 +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 Cc: "xenomai@xenomai.org" SGVsbG8gR2lsbGVzLAoKVGhhbmsgeW91IGZvciBhbGwgeW91ciBleHBsYW5hdGlvbi4KCkkgbXVz dCBnaXZlIHlvdSBzb21lIGV4cGxhbmF0aW9uIHRvby4gTXkgRHJpdmVyIGJhc2UgaXMgY29kZSBm cm9tIExpbnV4IApLZXJuZWwsIHVpb19uZXR4IHRoYXQgSSBhZGFwdGVkIGZvciBkb2luZyBhIFhl bm9tYWkgZHJpdmVyLgpJbiB0aGlzIGRyaXZlciAicHhhIiBhcyBhIHN1ZmZpeCBpcyB1c2VkLgoK SSB3aWxsIHRyeSB0byByZXZpZXcgY29kZSB0byBnaXZlIGEgbmV3IHZlcnNpb24uCgpUaGFuayB5 b3UgZm9yIHlvdXIgaGVscC4KCkhpbHNjaGVyIEZyYW5jZQoxMiwgcnVlIGR1IDM1w6htZSBSw6ln aW1lbnQgZCdBdmlhdGlvbgpNaW5pcGFyYyBkdSBDaMOqbmUKNjk1MDAgQlJPTgpGcmFuY2UKVMOp bC4gOiArMzMgKDApIDQgNzIgMzcgOTggNDAKRmF4ICA6ICszMyAoMCkgNCA3OCAyNiA4MyAyNwpo dHRwOi8vd3d3LmhpbHNjaGVyLmZyCkhJTFNDSEVSIEZSQU5DRSAJSsOpcsO0bWUgUG9uY2luCmpw b25jaW5AaGlsc2NoZXIuY29tCkluZ8OpbmlldXIgRMOpdmVsb3BwZW1lbnQgTG9naWNpZWwKVMOp bC4gOiArMzMgKDApIDQgNzIgMzcgOTggNDQKCgoKCgpMZSAwNi8wMy8yMDEzIDA5OjE5LCBHaWxs ZXMgQ2hhbnRlcGVyZHJpeCBhIMOpY3JpdCA6Cj4gT24gMDMvMDYvMjAxMyAwOToxMCBBTSwgSmVy b21lIFBvbmNpbiB3cm90ZToKPgo+PiBIZWxsbyBHaWxsZXMsCj4+Cj4+IEkgZG9uJ3QgdW5kZXJz dGFuZCwgYmVjYXVzZSBJIHRoaW5rIEkgZGlkIGEgbWF4aW11bSBvZiBtb2RpZmljYXRpb25zCj4+ IHRoYXQgeW91IHNhaWQgbWUuLi4KPiBOb3QgcmVhbGx5LCBib3RoIEphbiBhbmQgSSBnYXZlIHlv dSAoZGlmZmVyZW50KSByZWFzb25zIHdoeSB0aGlzIGlzIHdyb25nOgo+Cj4gK3N0YXRpYyBzc2l6 ZV90IGNpZnhfcGNpX3dyaXRlKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAo+ICsJ CQkgICAgICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIGNvbnN0IHZvaWQgKmJ1ZiwKPiAr CQkJICAgICAgc2l6ZV90IG5ieXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW9fbWFwX21lbSBtYXBfbWVt Owo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAobmJ5dGUgPiBzaXplb2Yoc3RydWN0IGlvX21hcF9t ZW0pKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChuYnl0ZSA9PSBzaXplb2Yoc3RydWN0IGlv X21hcF9tZW0pKSB7Cj4gKwkJLyogQ29weSBkYXRhIGluZm9ybWF0aW9uIGZvciBLZXJuZWwgKi8K PiArCQlpZiAocnRkbV9zYWZlX2NvcHlfZnJvbV91c2VyKHVzZXJfaW5mbywgJm1hcF9tZW0sIGJ1 ZiwgbmJ5dGUpKSB7Cj4gKwkJCW5ieXRlID0gMDsKPiArCQl9IGVsc2Ugewo+ICsJCQlpZiAoKm1h cF9tZW0udmlydF9hZGRyID09IE5VTEwpIHsKPiArCQkJCS8qIE1hcCBwaHlzaWNhbCBvbiB2aXJ0 dWFsIG1lbW9yeSAqLwo+ICsJCQkJcmV0ID0gcnRkbV9pb21hcF90b191c2VyKHVzZXJfaW5mbywK PiArCQkJCQkJCSAocGh5c19hZGRyX3QpIG1hcF9tZW0uCj4gKwkJCQkJCQkgcGh5c19hZGRyLAo+ ICsJCQkJCQkJIChzaXplX3QpIG1hcF9tZW0uCj4gKwkJCQkJCQkgbGVuZ3RoLAo+ICsJCQkJCQkJ IChQUk9UX1JFQUQgfAo+ICsJCQkJCQkJICBQUk9UX1dSSVRFKSwKPiArCQkJCQkJCSBtYXBfbWVt LnZpcnRfYWRkciwKPiArCQkJCQkJCSBOVUxMLCBOVUxMKTsKPiArCj4gKwkJCQlpZiAocmV0ICE9 IDApCj4gKwkJCQkJbmJ5dGUgPSAwOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJLyogVW5hcCB2aXJ0 dWFsIG1lbW9yeSAqLwo+ICsJCQkJcmV0ID0gcnRkbV9tdW5tYXAodXNlcl9pbmZvLCAqbWFwX21l bS52aXJ0X2FkZHIsCj4gKwkJCQkJCSAgKHNpemVfdCkgbWFwX21lbS5sZW5ndGgpOwo+ICsKPiAr CQkJCWlmIChyZXQgIT0gMCkKPiArCQkJCQluYnl0ZSA9IDA7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9 IGVsc2Ugewo+ICsJCS8qIEVycm9yIG5vdGhpbmcgdG8gZG8gKi8KPiArCQluYnl0ZSA9IDA7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIG5ieXRlOwo+ICt9Cj4KPiBZZXQgeW91IGtlcHQgdGhpcyBpbiB0 aGUgImZpbmFsIiBwYXRjaC4KPgo+Cj4+IEknbSBhZ3JlZSB0byB0ZXN0IHRoZSBjb2RlIGlmIHlv dSBmaXhlZCB0aGUgY29kZSwgbm8gcHJvYmxlbS4gUGVyaGFwcyBJCj4+IGRvbid0IHVuZGVyc3Rh bmQgd2hhdCB5b3UgcmVhbGx5IHdhbnQuCj4+Cj4+IEZvciBtb2RpZmljYXRpb24gaW4gODAgbGlu ZSwgaG93IHRvIGNoYW5nZSB0aGlzID8gOgo+Pgo+PiBzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFf aW5mbyA9Cj4+ICAgICAgICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopKChzdHJ1Y3QgaW9faW5m byAqKWluZm8tPmRldmljZV9kYXRhKS0+cHJpdjsKPj4gICAgICB1aW50MzJfdCBfX2lvbWVtICpw bHhfdGltaW5nOwo+Pgo+PiBJIGNhbid0IGRvIGEgZnVuY3Rpb24uLi4KPgo+IFdlbGwsIGZpcnN0 IG9mIGFsbCB5b3Ugc2hvdWxkIG5vdCB1c2UgInB4YSIgYXMgYSBzdWZmaXgsIGFzIHlvdSBtYXkg a25vdywKPiB0aGVyZSBhcmUgcHJvY2Vzc29ycyBuYW1lZCAicHhhIiwgc28sIHRoaXMgbWF5IGNv bmZsaWN0LiBTb21lIG5hbWUgcmVsYXRlZAo+IHRvIHRoZSBib2FyZCB3b3VsZCBiZSBiZXR0ZXIs IHN1Y2ggYXMgImNpZngiLgo+Cj4gU2Vjb25kLCB0aGVyZSBhcmUgdXN1YWxseSBhY2Vzc3NvcnMg dG8gdGhpbmdzIGxpa2UgImRldmljZV9kYXRhIiBhbmQgInByaXYiCj4gbWVtYmVycy4KPgo+IFRo aXJkbHksIGluIEMsIHlvdSBkbyBub3QgbmVlZCBhbiBleHBsaWNpdCBjYXN0IHdoZW4gY2FzdGlu ZyBmcm9tIHZvaWQgKiwKPiB0byBhbnkgcG9pbnRlciB0eXBlLCB0aGlzIGlzIHdoYXQgbWFrZXMg dXNpbmcgbWFsbG9jIGNvbnZlbmllbnQgZm9yIGluc3RhbmNlLgo+IFNvLCB3aGF0IHlvdSBzaG91 bGQgcmVhbGx5IGRvIGlzOgo+Cj4gc3RydWN0IGlvX2luZm8gKmlvX2luZm8gPSB0aGVfZGV2aWNl X2RhdGFfYWNjZXNzb3IoaW5mbyk7Cj4gc3RydWN0IGNpZnhfZGV2X2luZm8gKmRldl9pbmZvID0g dGhlX3ByaXZfYWNjZXNzb3IoaW9faW5mbyk7Cj4KCi0tLS0tLS0tLS0tLS0tIG5leHQgcGFydCAt LS0tLS0tLS0tLS0tLQovKgogKiBVSU8gSGlsc2NoZXIgTmV0WCBjYXJkIGRyaXZlcgogKgogKiAo QykgMjAwNyBIYW5zIEouIEtvY2ggPGhqa0BsaW51dHJvbml4LmRlPgogKgogKiBMaWNlbnNlZCB1 bmRlciBHUEwgdmVyc2lvbiAyIG9ubHkuCiAqCiAqLwoKI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o PgojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9wY2kuaD4KI2luY2x1 ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KCiNpbmNsdWRlIDxsaW51eC9pby5oPgoKI2lmbmRlZiBQ Q0lfVkVORE9SX0lEX0hJTFNDSEVSCiAgI2RlZmluZSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSICAg MHgxNUNGCiNlbmRpZgoKI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgKICAjZGVm aW5lIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWCAgMHgwMDAwCiNlbmRpZgoKI2lmbmRlZiBQ Q0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQwogICNkZWZpbmUgUENJX0RFVklDRV9JRF9ISUxT Q0hFUl9ORVRQTEMgIDB4MDAxMAojZW5kaWYKCiNpZm5kZWYgUENJX0RFVklDRV9JRF9ISUxTQ0hF Ul9ORVRKQUNLCiAgI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0sgIDB4MDAy MAojZW5kaWYKCiNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9OWFNCX1BDQQogICNkZWZpbmUgUENJ X1NVQkRFVklDRV9JRF9OWFNCX1BDQSAgMHgzMjM1CiNlbmRpZgoKI2lmbmRlZiBQQ0lfU1VCREVW SUNFX0lEX05YUENBCiAgI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05YUENBICAgMHgzMzM1CiNl bmRpZgoKI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19SQU0KICAjZGVmaW5lIFBDSV9T VUJERVZJQ0VfSURfTkVUUExDX1JBTSAgIDB4MDAwMAojZW5kaWYKCiNpZm5kZWYgUENJX1NVQkRF VklDRV9JRF9ORVRQTENfRkxBU0gKICAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX0ZM QVNIICAgMHgwMDAxCiNlbmRpZgoKI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfUkFN CiAgI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfUkFNICAgMHgwMDAwCiNlbmRpZgoK I2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfRkxBU0gKICAjZGVmaW5lIFBDSV9TVUJE RVZJQ0VfSURfTkVUSkFDS19GTEFTSCAgIDB4MDAwMQojZW5kaWYKCiNkZWZpbmUgRFBNX0hPU1Rf SU5UX0VOMAkweGZmZjAKI2RlZmluZSBEUE1fSE9TVF9JTlRfU1RBVDAJMHhmZmUwCiNkZWZpbmUg UExYX0dQSU9fT0ZGU0VUICAgICAgICAgMHgxNQojZGVmaW5lIFBMWF9USU1JTkdfT0ZGU0VUICAg ICAgIDB4MGEKCiNkZWZpbmUgRFBNX0hPU1RfSU5UX01BU0sJMHhlNjAwZmZmZgojZGVmaW5lIERQ TV9IT1NUX0lOVF9HTE9CQUxfRU4JMHg4MDAwMDAwMAojZGVmaW5lIFBMWF9HUElPX0RBVEEwX01B U0sgICAgIDB4MDAwMDAwMDQKI2RlZmluZSBQTFhfR1BJT19EQVRBMV9NQVNLICAgICAweDAwMDAw MDIwCgojZGVmaW5lIE5YX1BDQV9QQ0lfOF9CSVRfRFBNX01PREUgIDB4NTQzMUY5NjIKI2RlZmlu ZSBOWF9QQ0FfUENJXzE2X0JJVF9EUE1fTU9ERSAweDQwNzNGOEUyCiNkZWZpbmUgTlhfUENBX1BD SV8zMl9CSVRfRFBNX01PREUgMHg0MDgyNDEyMgoKLyogbnVtYmVyIG9mIGJhciAqLwojZGVmaW5l IERQTV9CQVIgICAgIDAgLyogcG9pbnRzIHRvIHRoZSBEUE0gLT4gbmV0WCwgbmV0UExDLCBuZXRK QUNLICovCiNkZWZpbmUgRVhUX01FTV9CQVIgMSAvKiBwb2ludHMgdG8gdGhlIG9wdGlvbmFsIGV4 dGVuZGVkIG1lbW9yeSAgICAgKi8KI2RlZmluZSBQTFhfRFBNX0JBUiAyIC8qIHBvaW50cyB0byB0 aGUgRFBNIC0+IG5ldFhQTFggICAgICAgICAgICAgICAqLyAKI2RlZmluZSBQWEFfUExYX0JBUiAw IC8qIHRpbWluZyBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwoKLyogaW5k ZXggb2YgdWlvX2luZm8gc3RydWN0dXJlJ3MgbWVtb3J5IGFycmF5ICovCiNkZWZpbmUgRFBNX0lO REVYICAgICAwIC8qIGZpcnN0IG1hcHBpbmcgZGVzY3JpYmVzIERQTSAgICAgICAgICAgICAgKi8K I2RlZmluZSBFWFRfTUVNX0lOREVYIDEgLyogc2Vjb25kIG1hcHBpbmcgZGVzY3JpYmVzIGV4dGVu ZGVkIG1lbW9yeSAqLwoKc3RydWN0IHB4YV9kZXZfaW5mbyB7Cgl1aW50MzJfdCBfX2lvbWVtICpw bHg7Cgl1aW50OF90IGRwbV9tb2RlOwoJdWludDMyX3QgcGx4X3RpbWluZzsKfTsKCnN0YXRpYyBp cnFyZXR1cm5fdCBuZXR4X2hhbmRsZXIoaW50IGlycSwgc3RydWN0IHVpb19pbmZvICpkZXZfaW5m bykKewoJaWYoZGV2X2luZm8tPnByaXYgIT0gTlVMTCkKCXsKCQkvKiBUaGlzIGlzIGEgUExYIGRl dmljZSBhbmQgY2Fubm90IHByb2R1Y2UgYW4gSVJRICovCgkJcmV0dXJuIElSUV9OT05FOwoJfSBl bHNlCgl7CQoJCXZvaWQgX19pb21lbSAqaW50X2VuYWJsZV9yZWcgPSBkZXZfaW5mby0+bWVtWzBd LmludGVybmFsX2FkZHIKCQkJCQkJKyBEUE1fSE9TVF9JTlRfRU4wOwoJCXZvaWQgX19pb21lbSAq aW50X3N0YXR1c19yZWcgPSBkZXZfaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIKCQkJCQkJKyBE UE1fSE9TVF9JTlRfU1RBVDA7CgkKCQkvKiBJcyBvbmUgb2Ygb3VyIGludGVycnVwdHMgZW5hYmxl ZCBhbmQgYWN0aXZlID8gKi8KCQlpZiAoIShpb3JlYWQzMihpbnRfZW5hYmxlX3JlZykgJiBpb3Jl YWQzMihpbnRfc3RhdHVzX3JlZykKCQkJJiBEUE1fSE9TVF9JTlRfTUFTSykpCgkJCXJldHVybiBJ UlFfTk9ORTsKCQoJCS8qIERpc2FibGUgaW50ZXJydXB0ICovCgkJaW93cml0ZTMyKGlvcmVhZDMy KGludF9lbmFibGVfcmVnKSAmIH5EUE1fSE9TVF9JTlRfR0xPQkFMX0VOLAoJCQlpbnRfZW5hYmxl X3JlZyk7CgkJcmV0dXJuIElSUV9IQU5ETEVEOwoJfQp9CgpzdGF0aWMgaW50IG5ldHhfcHhhX3Nl dF9wbHhfdGltaW5nKHN0cnVjdCB1aW9faW5mbyAqaW5mbykKewoJc3RydWN0IHB4YV9kZXZfaW5m byAqcHhhX2luZm8gPSAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKSBpbmZvLT5wcml2OwoJdWludDMy X3QgX19pb21lbSAqcGx4X3RpbWluZzsKCWlmICghcHhhX2luZm8pCgkJcmV0dXJuIC1FTk9ERVY7 CglwbHhfdGltaW5nID0gcHhhX2luZm8tPnBseCArIFBMWF9USU1JTkdfT0ZGU0VUOwoJKnBseF90 aW1pbmcgPSBweGFfaW5mby0+cGx4X3RpbWluZzsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IG5l dHhfcHhhX2dldF9wbHhfdGltaW5nKHN0cnVjdCB1aW9faW5mbyAqaW5mbykKewoJc3RydWN0IHB4 YV9kZXZfaW5mbyAqcHhhX2luZm8gPSAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKSBpbmZvLT5wcml2 OwoJaWYgKCFweGFfaW5mbykKCQlyZXR1cm4gLUVOT0RFVjsKCXN3aXRjaCAocHhhX2luZm8tPmRw bV9tb2RlKSB7CgljYXNlIDg6CgkJcHhhX2luZm8tPnBseF90aW1pbmcgPSBOWF9QQ0FfUENJXzhf QklUX0RQTV9NT0RFOwoJCWJyZWFrOwoJY2FzZSAxNjoKCQlweGFfaW5mby0+cGx4X3RpbWluZyA9 IE5YX1BDQV9QQ0lfMTZfQklUX0RQTV9NT0RFOwoJCWJyZWFrOwoJY2FzZSAzMjoKCQlweGFfaW5m by0+cGx4X3RpbWluZyA9IE5YX1BDQV9QQ0lfMzJfQklUX0RQTV9NT0RFOwoJCWJyZWFrOwoJZGVm YXVsdDoKCQlyZXR1cm4gLUVJTlZBTDsKCX0KCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IG5ldHhf cHhhX2dldF9kcG1fbW9kZShzdHJ1Y3QgdWlvX2luZm8gKmluZm8pCnsKCXN0cnVjdCBweGFfZGV2 X2luZm8gKnB4YV9pbmZvID0gKHN0cnVjdCBweGFfZGV2X2luZm8gKikgaW5mby0+cHJpdjsKCXVp bnQzMl90IF9faW9tZW0gKnBseF9ncGlvOwoJaWYgKCFweGFfaW5mbykKCQlyZXR1cm4gLUVOT0RF VjsKCXBseF9ncGlvID0gcHhhX2luZm8tPnBseCArIFBMWF9HUElPX09GRlNFVDsKCWlmICgoKnBs eF9ncGlvICYgUExYX0dQSU9fREFUQTBfTUFTSykgJiYKCSAgIH4oKnBseF9ncGlvICYgUExYX0dQ SU9fREFUQTFfTUFTSykpCgkJcHhhX2luZm8tPmRwbV9tb2RlID0gODsKCWVsc2UgaWYgKH4oKnBs eF9ncGlvICYgUExYX0dQSU9fREFUQTBfTUFTSykgJiYKCQkgKCpwbHhfZ3BpbyAmIFBMWF9HUElP X0RBVEExX01BU0spKQoJCXB4YV9pbmZvLT5kcG1fbW9kZSA9IDMyOwoJZWxzZSBpZiAofigqcGx4 X2dwaW8gJiBQTFhfR1BJT19EQVRBMF9NQVNLKSAmJgoJCX4oKnBseF9ncGlvICYgUExYX0dQSU9f REFUQTFfTUFTSykpCgkJcHhhX2luZm8tPmRwbV9tb2RlID0gMTY7CgllbHNlCgkJcmV0dXJuIC1F SU5WQUw7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBfX2RldmluaXQgbmV0eF9wY2lfcHJvYmUo c3RydWN0IHBjaV9kZXYgKmRldiwKCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQp CnsKCXN0cnVjdCB1aW9faW5mbyAqaW5mbzsKCWludCBiYXI7CglpbmZvID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IHVpb19pbmZvKSwgR0ZQX0tFUk5FTCk7CglpZiAoIWluZm8pCgkJcmV0dXJuIC1F Tk9NRU07CglpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkKCQlnb3RvIG91dF9mcmVlOwoJaWYg KHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAibmV0eCIpKQoJCWdvdG8gb3V0X2Rpc2FibGU7Cglz d2l0Y2ggKGlkLT5kZXZpY2UpIHsKCWNhc2UgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYOgoJ CWJhciA9IERQTV9CQVI7CgkJaW5mby0+bmFtZSA9ICJuZXR4IjsKCQlicmVhazsKICBjYXNlIFBD SV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDOgoJCWJhciA9IERQTV9CQVI7CgkJaW5mby0+bmFt ZSA9ICJuZXRwbGMiOwoJCWJyZWFrOwogIGNhc2UgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRK QUNLOgogICAgYmFyID0gRFBNX0JBUjsKICAgIGluZm8tPm5hbWUgPSAibmV0amFjayI7CiAgICBi cmVhazsKCWRlZmF1bHQ6CgkJYmFyID0gUExYX0RQTV9CQVI7CgkJaW5mby0+bmFtZSA9ICJuZXR4 X3BseCI7Cgl9CgkvKiBCQVIgMCBvciAyIHBvaW50cyB0byB0aGUgY2FyZCdzIGR1YWwgcG9ydCBt ZW1vcnkgKi8KCWluZm8tPm1lbVtEUE1fSU5ERVhdLmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQo ZGV2LCBiYXIpOwogIAogIGlmICghaW5mby0+bWVtW0RQTV9JTkRFWF0uYWRkcikKICAgIGdvdG8g b3V0X3JlbGVhc2U7CiAKICBpbmZvLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyID0gaW9y ZW1hcF9ub2NhY2hlKAogICAgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgYmFyKSwKICAgIHBjaV9y ZXNvdXJjZV9sZW4oZGV2LCBiYXIpKTsKICAgIAogIGlmICghaW5mby0+bWVtW0RQTV9JTkRFWF0u aW50ZXJuYWxfYWRkcikKICAgIGdvdG8gb3V0X3JlbGVhc2U7CiAgCiAgZGV2X2luZm8oJmRldi0+ ZGV2LCAiRFBNIGF0ICUwOGxYXG4iLCAobG9uZyB1bnNpZ25lZCBpbnQpaW5mby0+bWVtW0RQTV9J TkRFWF0uYWRkcik7CiAgaW5mby0+bWVtW0RQTV9JTkRFWF0uc2l6ZSA9IHBjaV9yZXNvdXJjZV9s ZW4oZGV2LCBiYXIpOwogIGluZm8tPm1lbVtEUE1fSU5ERVhdLm1lbXR5cGUgPSBVSU9fTUVNX1BI WVM7CiAgCiAgLyogbWFwIGV4dGVuZGVkIG1lbSAoQkFSIDEgcG9pbnRzIHRvIHRoZSBleHRlbmRl ZCBtZW1vcnkpICovCiAgaW5mby0+bWVtW0VYVF9NRU1fSU5ERVhdLmFkZHIgPSBwY2lfcmVzb3Vy Y2Vfc3RhcnQoZGV2LCBFWFRfTUVNX0JBUik7CiAKICAvKiBleHRlbmRlZCBtZW1vcnkgaXMgb3B0 aW9uYWwsIHNvIGRvbid0IGNhcmUgaWYgaXQgaXMgbm90IHByZXNlbnQgKi8KICBpZiAoaW5mby0+ bWVtW0VYVF9NRU1fSU5ERVhdLmFkZHIpCiAgewogICAgaW5mby0+bWVtW0VYVF9NRU1fSU5ERVhd LmludGVybmFsX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUoCiAgICBwY2lfcmVzb3VyY2Vfc3RhcnQo ZGV2LCBFWFRfTUVNX0JBUiksCiAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgRVhUX01FTV9CQVIp KTsgIAogICAgCiAgICBpZiAoIWluZm8tPm1lbVtFWFRfTUVNX0lOREVYXS5pbnRlcm5hbF9hZGRy KQogICAgICBnb3RvIG91dF91bm1hcDsKICAgIAogICAgZGV2X2luZm8oJmRldi0+ZGV2LCAiZXh0 ZW5kZWQgbWVtb3J5IGF0ICUwOGxYXG4iLCAobG9uZyB1bnNpZ25lZCBpbnQpaW5mby0+bWVtW0VY VF9NRU1fSU5ERVhdLmFkZHIpOwogICAgaW5mby0+bWVtW0VYVF9NRU1fSU5ERVhdLnNpemUgICAg PSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgRVhUX01FTV9CQVIpOwogICAgaW5mby0+bWVtW0VYVF9N RU1fSU5ERVhdLm1lbXR5cGUgPSBVSU9fTUVNX1BIWVM7CiAgfQogIAogIGluZm8tPmlycSA9IGRl di0+aXJxOwoJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEOwoJ aW5mby0+aGFuZGxlciA9IG5ldHhfaGFuZGxlcjsKCWluZm8tPnZlcnNpb24gPSAiMC4wLjEiOwpp ZiAoKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYKSB8fAoJCShpZC0+ ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDKSB8fAoJCShpZC0+ZGV2aWNl ID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSykpIHsKCQkvKiBtYWtlIHN1cmUgYWxs IGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCgkJaW93cml0ZTMyKDAsIGluZm8tPm1lbVtEUE1f SU5ERVhdLmludGVybmFsX2FkZHIgKyBEUE1fSE9TVF9JTlRfRU4wKTsKCQlpbmZvLT5wcml2ID0g TlVMTDsKCX0gZWxzZSBpZiAoaWQtPnN1YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX05YUENB KSB7CgkJLyogbWFwIFBMWCByZWdpc3RlcnMgKi8KCQlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFf aW5mbyA9IChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopCgkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBw eGFfZGV2X2luZm8pLCBHRlBfS0VSTkVMKTsKCQlpZiAoIXB4YV9pbmZvKQoJCQlnb3RvIG91dF91 bm1hcDsKCQlpbmZvLT5wcml2ID0gcHhhX2luZm87CgkJLyogc2V0IFBYQSBQTFggVGltaW5ncyAq LwoJCXB4YV9pbmZvLT5wbHggPSBpb3JlbWFwX25vY2FjaGUoCgkJCXBjaV9yZXNvdXJjZV9zdGFy dChkZXYsIFBYQV9QTFhfQkFSKSwKCQkJcGNpX3Jlc291cmNlX2xlbihkZXYsIFBYQV9QTFhfQkFS KSk7CgkJaWYgKCFweGFfaW5mby0+cGx4KQoJCQlnb3RvIG91dF91bm1hcDsKCQlpZiAobmV0eF9w eGFfZ2V0X2RwbV9tb2RlKGluZm8pKQoJCQlnb3RvIG91dF91bm1hcF9wbHg7CgkJaWYgKG5ldHhf cHhhX2dldF9wbHhfdGltaW5nKGluZm8pKQoJCQlnb3RvIG91dF91bm1hcF9wbHg7CgkJaWYgKG5l dHhfcHhhX3NldF9wbHhfdGltaW5nKGluZm8pKQoJCQlnb3RvIG91dF91bm1hcF9wbHg7Cgl9IGVs c2UgewoJCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZvID0gKHN0cnVjdCBweGFfZGV2X2lu Zm8gKikKCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHB4YV9kZXZfaW5mbyksIEdGUF9LRVJORUwp OwoJCWlmICghcHhhX2luZm8pCgkJCWdvdG8gb3V0X2ZyZWVfcHhhOwoJCXB4YV9pbmZvLT5wbHgg PSBOVUxMOwoJCXB4YV9pbmZvLT5wbHhfdGltaW5nID0gMDsKCQlweGFfaW5mby0+ZHBtX21vZGUg PSAwOwoJCWluZm8tPnByaXYgPSBweGFfaW5mbzsKCX0KCglpZiAodWlvX3JlZ2lzdGVyX2Rldmlj ZSgmZGV2LT5kZXYsIGluZm8pKSB7CgkJaWYgKGlkLT5zdWJkZXZpY2UgIT0gUENJX1NVQkRFVklD RV9JRF9OWFBDQSkKCQkJZ290byBvdXRfdW5tYXA7CgkJZWxzZQoJCQlnb3RvIG91dF91bm1hcF9w bHg7Cgl9CglwY2lfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKCWlmIChpZC0+ZGV2aWNlID09IFBD SV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWCkKCQlkZXZfaW5mbygmZGV2LT5kZXYsCgkJCSJyZWdp c3RlcmVkIENpZlggY2FyZFxuIik7CgllbHNlIGlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0Vf SURfSElMU0NIRVJfTkVUUExDKQoJCWRldl9pbmZvKCZkZXYtPmRldiwKCQkJInJlZ2lzdGVyZWQg bmV0UExDIGNhcmRcbiIpOwogIGVsc2UgaWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9I SUxTQ0hFUl9ORVRKQUNLKQogICAgZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXRK QUNLIGNhcmRcbiIpOwoJZWxzZSBpZiAoaWQtPnN1YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lE X05YU0JfUENBKQoJCWRldl9pbmZvKCZkZXYtPmRldiwKCQkJInJlZ2lzdGVyZWQgTlhTQi1QQ0Eg YWRhcHRlciBjYXJkXG4iKTsKCWVsc2UgewoJCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZv ID0gKHN0cnVjdCBweGFfZGV2X2luZm8gKikKCQkJaW5mby0+cHJpdjsKCQlkZXZfaW5mbygmZGV2 LT5kZXYsCgkJCSJyZWdpc3RlcmVkIE5YUENBLVBDSSBhZGFwdGVyIGNhcmQgaW4gJWQgYml0IG1v ZGVcbiIsCgkJCXB4YV9pbmZvLT5kcG1fbW9kZSk7Cgl9CglyZXR1cm4gMDsKb3V0X3VubWFwX3Bs eDoKCWlvdW5tYXAoKChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopKGluZm8tPnByaXYpKS0+cGx4KTsK b3V0X2ZyZWVfcHhhOgoJa2ZyZWUoaW5mby0+cHJpdik7Cm91dF91bm1hcDoKCWlvdW5tYXAoaW5m by0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkcik7CiAgaWYgKGluZm8tPm1lbVtFWFRfTUVN X0lOREVYXS5pbnRlcm5hbF9hZGRyKQogICAgaW91bm1hcChpbmZvLT5tZW1bRVhUX01FTV9JTkRF WF0uaW50ZXJuYWxfYWRkcik7Cm91dF9yZWxlYXNlOgoJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYp OwpvdXRfZGlzYWJsZToKCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwpvdXRfZnJlZToKCWtmcmVl KGluZm8pOwoJcmV0dXJuIC1FTk9ERVY7Cn0KCnN0YXRpYyB2b2lkIG5ldHhfcGNpX3JlbW92ZShz dHJ1Y3QgcGNpX2RldiAqZGV2KQp7CglzdHJ1Y3QgdWlvX2luZm8gKmluZm8gPSBwY2lfZ2V0X2Ry dmRhdGEoZGV2KTsKCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZvID0gKHN0cnVjdCBweGFf ZGV2X2luZm8gKikKCQlpbmZvLT5wcml2OwoJaWYgKCFweGFfaW5mbykgewoJCS8qIERpc2FibGUg YWxsIGludGVycnVwdHMgKi8KCQlpb3dyaXRlMzIoMCwgaW5mby0+bWVtW0RQTV9JTkRFWF0uaW50 ZXJuYWxfYWRkciArIERQTV9IT1NUX0lOVF9FTjApOwoJfSAKCWlmICggcHhhX2luZm8gJiYgcHhh X2luZm8tPnBseCkKCQlpb3VubWFwKHB4YV9pbmZvLT5wbHgpOwoJaWYgKHB4YV9pbmZvKQoJCWtm cmVlKHB4YV9pbmZvKTsKCXVpb191bnJlZ2lzdGVyX2RldmljZShpbmZvKTsKCXBjaV9yZWxlYXNl X3JlZ2lvbnMoZGV2KTsKCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwoJcGNpX3NldF9kcnZkYXRh KGRldiwgTlVMTCk7Cglpb3VubWFwKGluZm8tPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIp OwogIGlmIChpbmZvLT5tZW1bRVhUX01FTV9JTkRFWF0uaW50ZXJuYWxfYWRkcikKICAgIGlvdW5t YXAoaW5mby0+bWVtW0VYVF9NRU1fSU5ERVhdLmludGVybmFsX2FkZHIpOwoJa2ZyZWUoaW5mbyk7 Cn0KCnN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXR4X3BjaV9pZHNbXSA9IHsKCXsKCQku dmVuZG9yID0JUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKCQkuZGV2aWNlID0JUENJX0RFVklDRV9J RF9ISUxTQ0hFUl9ORVRYLAoJCS5zdWJ2ZW5kb3IgPQkwLAoJCS5zdWJkZXZpY2UgPQkwLAoJfSwK CXsKCQkudmVuZG9yID0JUENJX1ZFTkRPUl9JRF9QTFgsCgkJLmRldmljZSA9CVBDSV9ERVZJQ0Vf SURfUExYXzkwMzAsCgkJLnN1YnZlbmRvciA9CVBDSV9WRU5ET1JfSURfUExYLAoJCS5zdWJkZXZp Y2UgPQlQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBLAoJfSwKCXsKCQkudmVuZG9yID0JUENJX1ZF TkRPUl9JRF9QTFgsCgkJLmRldmljZSA9CVBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCgkJLnN1YnZl bmRvciA9CVBDSV9WRU5ET1JfSURfUExYLAoJCS5zdWJkZXZpY2UgPQlQQ0lfU1VCREVWSUNFX0lE X05YUENBLAoJfSwKCXsKCQkudmVuZG9yID0JUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKCQkuZGV2 aWNlID0JUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMsCgkJLnN1YnZlbmRvciA9CVBDSV9W RU5ET1JfSURfSElMU0NIRVIsCgkJLnN1YmRldmljZSA9CVBDSV9TVUJERVZJQ0VfSURfTkVUUExD X1JBTSwKCX0sCgl7CgkJLnZlbmRvciA9CVBDSV9WRU5ET1JfSURfSElMU0NIRVIsCgkJLmRldmlj ZSA9CVBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDLAoJCS5zdWJ2ZW5kb3IgPQlQQ0lfVkVO RE9SX0lEX0hJTFNDSEVSLAoJCS5zdWJkZXZpY2UgPQlQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19G TEFTSCwKCX0sCgl7CiAgICAudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKICAgIC5k ZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0ssCiAgICAuc3VidmVuZG9yID0g IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCiAgICAuc3ViZGV2aWNlID0gIFBDSV9TVUJERVZJQ0Vf SURfTkVUSkFDS19SQU0sCiAgfSwKICB7CiAgICAudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxT Q0hFUiwKICAgIC5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0ssCiAgICAu c3VidmVuZG9yID0gIFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCiAgICAuc3ViZGV2aWNlID0gIFBD SV9TVUJERVZJQ0VfSURfTkVUSkFDS19GTEFTSCwKICB9LAoJeyAwLCB9Cn07CgpzdGF0aWMgc3Ry dWN0IHBjaV9kcml2ZXIgbmV0eF9wY2lfZHJpdmVyID0gewoJLm5hbWUgPSAibmV0eCIsCgkuaWRf dGFibGUgPSBuZXR4X3BjaV9pZHMsCgkucHJvYmUgPSBuZXR4X3BjaV9wcm9iZSwKCS5yZW1vdmUg PSBuZXR4X3BjaV9yZW1vdmUsCn07CgpzdGF0aWMgaW50IF9faW5pdCBuZXR4X2luaXRfbW9kdWxl KHZvaWQpCnsKCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuZXR4X3BjaV9kcml2ZXIpOwp9 CgpzdGF0aWMgdm9pZCBfX2V4aXQgbmV0eF9leGl0X21vZHVsZSh2b2lkKQp7CglwY2lfdW5yZWdp c3Rlcl9kcml2ZXIoJm5ldHhfcGNpX2RyaXZlcik7Cn0KCm1vZHVsZV9pbml0KG5ldHhfaW5pdF9t b2R1bGUpOwptb2R1bGVfZXhpdChuZXR4X2V4aXRfbW9kdWxlKTsKCk1PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKTU9EVUxFX0FVVEhPUigiSGFucyBKLiBLb2NoLCBNYW51ZWwgVHJhdXQiKTsK