RE: [PATCH RESEND v2]IIO driver for Analog Devices Digital Output Gyroscope ADXRS450
flat view
From: Cai, Cliff <hidden>
Date: 2011-03-22 07:25:22
Also in:
lkml
DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEpvbmF0aGFuIENhbWVyb24g W21haWx0bzpqaWMyM0BjYW0uYWMudWtdDQo+U2VudDogMjAxMcTqM9TCMjLI1SAxOjQwDQo+VG86 IENhaSwgQ2xpZmYNCj5DYzogbGludXgtaWlvQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZzsNCj5Ecml2ZXJzOyBkZXZpY2UtZHJpdmVycy1kZXZlbEBibGFja2Zp bi51Y2xpbnV4Lm9yZzsgQ2xpZmYgQ2FpDQo+U3ViamVjdDogUmU6IFtQQVRDSCBSRVNFTkQgdjJd SUlPIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMNCj5EaWdpdGFsIE91dHB1dCBHeXJvc2NvcGUg QURYUlM0NTANCj4NCj5PbiAwMy8xOS8xMSAwOToyNywgY2xpZmYuY2FpQGFuYWxvZy5jb20gd3Jv dGU6DQo+PiBGcm9tOiBDbGlmZiBDYWkgPGNsaWZmLmNhaUBhbmFsb2cuY29tPg0KPj4NCj4+IENo YW5nZSB2Mjp2MToNCj4+DQo+PiBNYWtlIG1vZGlmaWNhdGlvbiBhY2NvcmRpbmcgdG8gTWljaGFl bCBIZW5uZXJpY2gncyBjb21tZW50cywgY29ycmVjdA0KPj4gdGhlIHNwaSB0cmFuc2ZlciB3YXks dXNlIGV4aXN0aW5nIHN5c2ZzIGludGVyZmFjZXMuDQo+SGkgQ2xpZmYsDQo+DQo+QXMgeW91IGFy ZSBwcm9wb3NpbmcgYSBjb3VwbGUgb2YgbmV3IGludGVyZmFjZXMgd2UgbmVlZCB0bw0KPmhhdmUg ZG9jdW1lbnRhdGlvbiBmb3IgdGhlbS4gVGhleSBhcmUgcXVhZCBhbmQgZHluYW1pY19udWxsX2Nv cnJlY3Rpb24uDQo+V2UgbmVlZCB0byBmaXJzdCBlc3RhYmxpc2ggd2hldGhlciB0aGV5IGFyZSBv ZiBnZW5lcmFsIHV0aWxpdHkNCj5hbmQgaGVuY2Ugc2hvdWxkIGJlIGluIHRoZSBtYWluIGFiaSBk b2MuIFRoZSBxdWFkcmF0dXJlIG9uZQ0KPmlzbid0IHNvbWV0aGluZyBJJ3ZlIHNlZW4gYmVmb3Jl LiBJcyBpdCBjb21tb24gaW4gZ3lyb3M/DQoNCkknbSBub3Qgc3VyZSBhYm91dCB0aGlzLg0KTWlj aGFlbCxkbyB5b3UgaGF2ZSBhbnkgaWRlYXM/DQoNCj5EeW5hbWljIG51bGwgY29ycmVjdGlvbiBs b29rcyBsaWtlIGl0IHNob3VsZCBiZQ0KPmd5cm9fel9jYWxpYmJpYXMgdG8gbWUgYnV0IEkgY291 bGQgYmUgd3JvbmcuICBUaGUgZG9jIHNheXMgIg0KPlRoZSB1c2VyIGNhbiBtYWtlIHNtYWxsIGFk anVzdG1lbnRzIHRvIHRoZSByYXRlb3V0IG9mIHRoZQ0KPmRldmljZSBieSBhc3NlcnRpbmcgdGhl c2UgYml0cy4gVGhpcyAxMC1iaXQgcmVnaXN0ZXIgYWxsb3dzDQo+dGhlIHVzZXIgdG8gYWRqdXN0 IHRoZSBzdGF0aWMgcmF0ZW91dCBvZiB0aGUgZGV2aWNlIGJ5IHVwIHRvIKHANi40oeMvc2VjLg0K PiINCj4NCj53aGljaCBtYWtlcyBtZSB0aGluayBpdCBpcyBhbiBpbnRlcm5hbGx5IGFwcGxpZWQg b2Zmc2V0IG9uIHRoZQ0KPm91dHB1dCBzaWduYWwgYW5kIGhlbmNlIGNhbGliYmlhcyBpbiBvdXIg YWJpLg0KDQpUaGFua3MNCg0KPk90aGVyIHRoYW4gdGhhdCwgdmFyaW91cyBtaW5vciBuaXRwaWNr cyBpbmxpbmUuDQo+DQo+Sm9uYXRoYW4NCj4NCj4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBDbGlm ZiBDYWk8Y2xpZmZAYW5hbG9nLmNvbT4NCj4+IC0tLQ0KPj4gIGRyaXZlcnMvc3RhZ2luZy9paW8v Z3lyby9LY29uZmlnICAgICAgICAgfCAgIDEwICsNCj4+ICBkcml2ZXJzL3N0YWdpbmcvaWlvL2d5 cm8vTWFrZWZpbGUgICAgICAgIHwgICAgMyArDQo+PiAgZHJpdmVycy9zdGFnaW5nL2lpby9neXJv L2FkeHJzNDUwLmggICAgICB8ICAgNTkgKysrKw0KPj4gIGRyaXZlcnMvc3RhZ2luZy9paW8vZ3ly by9hZHhyczQ1MF9jb3JlLmMgfCAgNDcxDQo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysNCj4+ICA0IGZpbGVzIGNoYW5nZWQsIDU0MyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygt KSAgY3JlYXRlIG1vZGUNCj4+IDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWR4cnM0 NTAuaA0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWR4 cnM0NTBfY29yZS5jDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3ly by9LY29uZmlnDQo+PiBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9LY29uZmlnDQo+PiBpbmRl eCAyMzZmMTVmLi4zNDMyOTY3IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9n eXJvL0tjb25maWcNCj4+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9LY29uZmlnDQo+ PiBAQCAtNDUsMyArNDUsMTMgQEAgY29uZmlnIEFESVMxNjI1MQ0KPj4NCj4+ICAgICAgICBUaGlz IGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxl DQo+PiAgICAgICAgd2lsbCBiZSBjYWxsZWQgYWRpczE2MjUxLg0KPj4gKw0KPj4gK2NvbmZpZyBB RFhSUzQ1MA0KPj4gKyAgICB0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURYUlM0NTAgRGlnaXRh bCBPdXRwdXQNCj5HeXJvc2NvcGUgU1BJIGRyaXZlciINCj4+ICsgICAgZGVwZW5kcyBvbiBTUEkN Cj4+ICsgICAgaGVscA0KPj4gKyAgICAgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZv ciBBbmFsb2cgRGV2aWNlcw0KPkFEWFJTNDUwIHByb2dyYW1tYWJsZQ0KPj4gKyAgICAgIGRpZ2l0 YWwgb3V0cHV0IGd5cm9zY29wZS4NCj4+ICsNCj4+ICsgICAgICBUaGlzIGRyaXZlciBjYW4gYWxz byBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlDQo+PiArICAgICAgd2ls bCBiZSBjYWxsZWQgYWR4cnM0NTAuDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lp by9neXJvL01ha2VmaWxlDQo+PiBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9NYWtlZmlsZQ0K Pj4gaW5kZXggMjc2NGMxNS4uMjIxMjI0MCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy9paW8vZ3lyby9NYWtlZmlsZQ0KPj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL01h a2VmaWxlDQo+PiBAQCAtMTcsMyArMTcsNiBAQCBvYmotJChDT05GSUdfQURJUzE2MjYwKSArPSBh ZGlzMTYyNjAubw0KPj4NCj4+ICBhZGlzMTYyNTEteSAgICAgICAgICAgICA6PSBhZGlzMTYyNTFf Y29yZS5vDQo+PiAgb2JqLSQoQ09ORklHX0FESVMxNjI1MSkgKz0gYWRpczE2MjUxLm8NCj4+ICsN Cj4+ICthZHhyczQ1MC15ICAgICAgICAgICAgIDo9IGFkeHJzNDUwX2NvcmUubw0KPj4gK29iai0k KENPTkZJR19BRFhSUzQ1MCkgKz0gYWR4cnM0NTAubw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy9paW8vZ3lyby9hZHhyczQ1MC5oDQo+PiBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3ly by9hZHhyczQ1MC5oDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMC4u NDYzM2VmOQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9n eXJvL2FkeHJzNDUwLmgNCj4+IEBAIC0wLDAgKzEsNTkgQEANCj4+ICsjaWZuZGVmIFNQSV9BRFhS UzQ1MF9IXw0KPj4gKyNkZWZpbmUgU1BJX0FEWFJTNDUwX0hfDQo+PiArDQo+PiArI2RlZmluZSBB RFhSUzQ1MF9TVEFSVFVQX0RFTEFZICAgICAgNTAgLyogbXMgKi8NCj4+ICsNCj4+ICsvKiBUaGUg TVNCIGZvciB0aGUgc3BpIGNvbW1hbmRzICovDQo+PiArI2RlZmluZSBBRFhSUzQ1MF9TRU5TT1Jf REFUQSAgICAweDIwDQo+PiArI2RlZmluZSBBRFhSUzQ1MF9XUklURV9EQVRBIDB4NDANCj4+ICsj ZGVmaW5lIEFEWFJTNDUwX1JFQURfREFUQSAgMHg4MA0KPj4gKw0KPj4gKyNkZWZpbmUgQURYUlM0 NTBfUkFURTEgICAgICAweDAwICAgIC8qIFJhdGUgUmVnaXN0ZXJzICovDQo+PiArI2RlZmluZSBB RFhSUzQ1MF9URU1QMSAgICAgIDB4MDIgICAgLyogVGVtcGVyYXR1cmUgUmVnaXN0ZXJzICovDQo+ PiArI2RlZmluZSBBRFhSUzQ1MF9MT0NTVDEgICAgIDB4MDQgICAgLyogTG93IENTVCBNZW1vcnkg UmVnaXN0ZXJzICovDQo+PiArI2RlZmluZSBBRFhSUzQ1MF9ISUNTVDEgICAgIDB4MDYgICAgLyog SGlnaCBDU1QgTWVtb3J5IFJlZ2lzdGVycyAqLw0KPj4gKyNkZWZpbmUgQURYUlM0NTBfUVVBRDEg ICAgICAweDA4ICAgIC8qIFF1YWQgTWVtb3J5IFJlZ2lzdGVycyAqLw0KPj4gKyNkZWZpbmUgQURY UlM0NTBfRkFVTFQxICAgICAweDBBICAgIC8qIEZhdWx0IFJlZ2lzdGVycyAqLw0KPj4gKyNkZWZp bmUgQURYUlM0NTBfUElEMSAgICAgICAweDBDICAgIC8qIFBhcnQgSUQgUmVnaXN0ZXIgMSAqLw0K Pj4gKyNkZWZpbmUgQURYUlM0NTBfUElEMCAgICAgICAweDBEICAgIC8qIFBhcnQgSUQgUmVnaXN0 ZXIgMCAqLw0KPj4gKyNkZWZpbmUgQURYUlM0NTBfU05IICAgICAgICAweDBFICAgIC8qIFNlcmlh bCBOdW1iZXINCj5SZWdpc3RlcnMsIDQgYnl0ZXMgKi8NCj4+ICsjZGVmaW5lIEFEWFJTNDUwX1NO TCAgICAgICAgMHgxMA0KPj4gKyNkZWZpbmUgQURYUlM0NTBfRE5DMSAgICAgICAweDEyICAgIC8q IER5bmFtaWMgTnVsbA0KPkNvcnJlY3Rpb24gUmVnaXN0ZXJzICovDQo+PiArLyogQ2hlY2sgYml0 cyAqLw0KPj4gKyNkZWZpbmUgQURYUlM0NTBfUCAgMHgwMQ0KPj4gKyNkZWZpbmUgQURYUlM0NTBf Q0hLICAgICAgICAweDAyDQo+PiArI2RlZmluZSBBRFhSUzQ1MF9DU1QgICAgICAgIDB4MDQNCj4+ ICsjZGVmaW5lIEFEWFJTNDUwX1BXUiAgICAgICAgMHgwOA0KPj4gKyNkZWZpbmUgQURYUlM0NTBf UE9SICAgICAgICAweDEwDQo+PiArI2RlZmluZSBBRFhSUzQ1MF9OVk0gICAgICAgIDB4MjANCj4+ ICsjZGVmaW5lIEFEWFJTNDUwX1EgIDB4NDANCj4+ICsjZGVmaW5lIEFEWFJTNDUwX1BMTCAgICAg ICAgMHg4MA0KPj4gKyNkZWZpbmUgQURYUlM0NTBfVVYgMHgxMDANCj4+ICsjZGVmaW5lIEFEWFJT NDUwX09WIDB4MjAwDQo+PiArI2RlZmluZSBBRFhSUzQ1MF9BTVAgICAgICAgIDB4NDAwDQo+PiAr I2RlZmluZSBBRFhSUzQ1MF9GQUlMICAgICAgIDB4ODAwDQo+PiArDQo+PiArI2RlZmluZSBBRFhS UzQ1MF9XUkVSUl9NQVNLICgweDcgPDwgMjkpDQo+PiArDQo+PiArI2RlZmluZSBBRFhSUzQ1MF9N QVhfUlggOA0KPj4gKyNkZWZpbmUgQURYUlM0NTBfTUFYX1RYIDgNCj4+ICsNCj4+ICsjZGVmaW5l IEFEWFJTNDUwX0dFVF9TVChhKSAgKChhID4+IDI2KSAmIDB4MykNCj4+ICsNCj4+ICsvKioNCj4+ ICsgKiBzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0 YQ0KPj4gKyAqIEB1czogICAgICAgICAgICAgICAgICAgICBhY3R1YWwgc3BpX2RldmljZQ0KPj4g KyAqIEBpbmRpb19kZXY6ICAgICAgICAgICAgICBpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0 dXJlDQo+PiArICogQHR4OiAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0IGJ1ZmZlcg0KPj4g KyAqIEByeDogICAgICAgICAgICAgICAgICAgICByZWNpZXZlIGJ1ZmZlcg0KPj4gKyAqIEBidWZf bG9jazogICAgICAgICAgICAgICBtdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeA0KPj4gKyAqKi8N Cj4+ICtzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgew0KPj4gKyAgICBzdHJ1Y3Qgc3BpX2RldmljZSAg ICAgICAgICAgICAgICp1czsNCj4+ICsgICAgc3RydWN0IGlpb19kZXYgICAgICAgICAgICAgICAg ICAqaW5kaW9fZGV2Ow0KPj4gKyAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0 eDsNCj4+ICsgICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcng7DQo+PiArICAg IHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgYnVmX2xvY2s7DQo+PiArfTsNCj4+ICsN Cj4+ICsjZW5kaWYgLyogU1BJX0FEWFJTNDUwX0hfICovDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL2lpby9neXJvL2FkeHJzNDUwX2NvcmUuYw0KPj4gYi9kcml2ZXJzL3N0YWdpbmcv aWlvL2d5cm8vYWR4cnM0NTBfY29yZS5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5k ZXggMDAwMDAwMC4uZjRmOWQ0OQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy9z dGFnaW5nL2lpby9neXJvL2FkeHJzNDUwX2NvcmUuYw0KPj4gQEAgLTAsMCArMSw0NzEgQEANCj4+ ICsvKg0KPj4gKyAqIEFEWFJTNDUwIERpZ2l0YWwgT3V0cHV0IEd5cm9zY29wZSBEcml2ZXINCj4+ ICsgKg0KPj4gKyAqIENvcHlyaWdodCAyMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4NCj4+ICsgKg0K Pj4gKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4NCj4+ICsgKi8NCj4+ICsN Cj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2ly cS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4+ICsjaW5jbHVkZSA8 bGludXgvc3BpL3NwaS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+PiArI2luY2x1 ZGUgPGxpbnV4L3N5c2ZzLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCj4+ICsNCj4+ ICsjaW5jbHVkZSAiLi4vaWlvLmgiDQo+PiArI2luY2x1ZGUgIi4uL3N5c2ZzLmgiDQo+PiArI2lu Y2x1ZGUgImd5cm8uaCINCj4+ICsjaW5jbHVkZSAiLi4vYWRjL2FkYy5oIg0KPj4gKw0KPj4gKyNp bmNsdWRlICJhZHhyczQ1MC5oIg0KPj4gKw0KPlRoaXMgaXMgb25seSB1c2VkIGluIG9uZSBwbGFj ZSwgSSdkIGhhcmQgY29kZSBpdCB0aGVyZS4NCj4+ICsjZGVmaW5lIERSSVZFUl9OQU1FICAgICAg ICAgIkFEWFJTNDUwIg0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIGFkeHJzNDUwX3NwaV9yZWFkX3Jl Z18xNigpIC0gcmVhZCAyIGJ5dGVzIGZyb20gYSByZWdpc3RlciBwYWlyDQo+PiArICogQGRldjog ZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9y DQo+PiAraWlvX3RyaWcpDQo+PiArICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUg bG93ZXIgb2YgdGhlIHR3bw0KPnJlZ2lzdGVycyx3aGljaA0KPj4gK3Nob3VsZCBiZSBhbiBldmVu IGFkZHJlc3MsDQo+PiArICogU2Vjb25kIHJlZ2lzdGVyJ3MgYWRkcmVzcyBpcyByZWdfYWRkcmVz cyArIDEuDQo+PiArICogQHZhbDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVh ZCAgKiovIHN0YXRpYyBpbnQNCj4+ICthZHhyczQ1MF9zcGlfcmVhZF9yZWdfMTYoc3RydWN0IGRl dmljZSAqZGV2LA0KPj4gKyAgICAgICAgICAgIHU4IHJlZ19hZGRyZXNzLA0KPj4gKyAgICAgICAg ICAgIHUxNiAqdmFsKQ0KPj4gK3sNCj4+ICsgICAgc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsNCj4+ ICsgICAgc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K Pj4gKyAgICBzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShp bmRpb19kZXYpOw0KPj4gKyAgICBpbnQgcmV0Ow0KPiAgVGhlIGFycmF5IG9ubHkgaGFzIG9uZSBl bGVtZW50LiBQbGVhc2UgbWFrZSBpdCBub3QgYmUgYW4gYXJyYXkuDQo+PiArICAgIHN0cnVjdCBz cGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsNCj4+ICsgICAgICAgICAgICB7DQo+PiArICAgICAgICAg ICAgICAgICAgICAudHhfYnVmID0gc3QtPnR4LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgLnJ4 X2J1ZiA9IHN0LT5yeCwNCj4+ICsgICAgICAgICAgICAgICAgICAgIC5iaXRzX3Blcl93b3JkID0g OCwNCj4+ICsgICAgICAgICAgICAgICAgICAgIC5sZW4gPSA0LA0KPj4gKyAgICAgICAgICAgIH0s DQo+PiArICAgIH07DQo+PiArICAgIC8qIE5lZWRzIHRvIHNlbmQgdGhlIGNvbW1hbmQgdHdpY2Ug dG8gZ2V0IHRoZSB3YW50ZWQgdmFsdWUgKi8NCj4+ICsgICAgbXV0ZXhfbG9jaygmc3QtPmJ1Zl9s b2NrKTsNCj4+ICsgICAgc3QtPnR4WzBdID0gQURYUlM0NTBfUkVBRF9EQVRBIHwgcmVnX2FkZHJl c3MgPj4gNzsNCj4+ICsgICAgc3QtPnR4WzFdID0gcmVnX2FkZHJlc3MgPDwgMTsNCj4+ICsgICAg c3QtPnR4WzJdID0gMDsNCj4+ICsgICAgc3QtPnR4WzNdID0gMDsNCj4+ICsgICAgc3BpX21lc3Nh Z2VfaW5pdCgmbXNnKTsNCj4+ICsgICAgc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAm bXNnKTsNCj4+ICsgICAgcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsNCj4+ICsgICAgaWYg KHJldCkgew0KPj4gKyAgICAgICAgICAgIGRldl9lcnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3 aGlsZSByZWFkaW5nIDE2DQo+Yml0IHJlZ2lzdGVyIDB4JTAyeFxuIiwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVnX2FkZHJlc3MpOw0KPj4gKyAgICAgICAgICAgIGdvdG8gZXJy b3JfcmV0Ow0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHNwaV9tZXNzYWdlX2luaXQoJm1zZyk7 DQo+PiArICAgIHNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1swXSwgJm1zZyk7DQo+PiArICAg IHJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7DQo+PiArICAgIGlmIChyZXQpIHsNCj4+ICsg ICAgICAgICAgICBkZXZfZXJyKCZzdC0+dXMtPmRldiwgInByb2JsZW0gd2hpbGUgcmVhZGluZyAx Ng0KPmJpdCByZWdpc3RlciAweCUwMnhcbiIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZ19hZGRyZXNzKTsNCj4+ICsgICAgICAgICAgICBnb3RvIGVycm9yX3JldDsNCj4+ICsg ICAgfQ0KPj4gKw0KPj4gKyAgICAqdmFsID0gKHN0LT5yeFsxXSAmIDB4MWYpIDw8IDExIHwgc3Qt PnJ4WzJdIDw8IDMgfCAoc3QtPnJ4WzNdICYNCj4+ICsweGUwKSA+PiA1Ow0KPj4gKw0KPj4gK2Vy cm9yX3JldDoNCj4+ICsgICAgbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOw0KPj4gKyAgICBy ZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBhZHhyczQ1MF9zcGlfd3Jp dGVfcmVnXzE2KCkgLSB3cml0ZSAyIGJ5dGVzIGRhdGEgdG8gYSByZWdpc3Rlcg0KPj4gK3BhaXIN Cj4+ICsgKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZp Y2UgKGlpb19kZXYgb3INCj4+ICtpaW9fdHJpZykNCj5JZiBpdCdzIGFuIGlpb190cmlnLCBjYXN0 aW5nIGl0IHRvIGFuIGlpb19kZXYgd2lsbCBnaXZlIHlvdQ0KPnNvbWV3aGF0IGludGVycmVzdGlu ZyByZXN1bHRzIQ0KPj4gKyAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2Vy IG9mIHRoZSB0d28NCj5yZWdpc3RlcnMsd2hpY2gNCj4+ICtzaG91bGQgYmUgYW4gZXZlbiBhZGRy ZXNzLA0KPj4gKyAqIFNlY29uZCByZWdpc3RlcidzIGFkZHJlc3MgaXMgcmVnX2FkZHJlc3MgKyAx Lg0KPj4gKyAqIEB2YWw6IHZhbHVlIHRvIGJlIHdyaXR0ZW4uDQo+PiArICoqLw0KPj4gK3N0YXRp YyBpbnQgYWR4cnM0NTBfc3BpX3dyaXRlX3JlZ18xNihzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+PiAr ICAgICAgICAgICAgdTggcmVnX2FkZHJlc3MsDQo+PiArICAgICAgICAgICAgdTE2ICp2YWwpDQo+ PiArew0KPj4gKyAgICBzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOw0KPj4gKyAgICBzdHJ1Y3QgaWlv X2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+PiArICAgIHN0cnVjdCBh ZHhyczQ1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7DQo+PiAr ICAgIGludCByZXQ7DQo+QWdhaW4sIHNob3VsZG4ndCBiZSBhbiBhcnJheS4NCj4+ICsgICAgc3Ry dWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0gew0KPj4gKyAgICAgICAgICAgIHsNCj4+ICsgICAg ICAgICAgICAgICAgICAgIC50eF9idWYgPSBzdC0+dHgsDQo+PiArICAgICAgICAgICAgICAgICAg ICAucnhfYnVmID0gc3QtPnJ4LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgLmJpdHNfcGVyX3dv cmQgPSA4LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgLmxlbiA9IDQsDQo+PiArICAgICAgICAg ICAgfSwNCj4+ICsgICAgfTsNCj4+ICsNCj4+ICsgICAgbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2Nr KTsNCj4+ICsgICAgc3QtPnR4WzBdID0gQURYUlM0NTBfV1JJVEVfREFUQSB8IHJlZ19hZGRyZXNz ID4+IDc7DQo+PiArICAgIHN0LT50eFsxXSA9IHJlZ19hZGRyZXNzIDw8IDEgfCAqdmFsID4+IDE1 Ow0KPj4gKyAgICBzdC0+dHhbMl0gPSAqdmFsID4+IDc7DQo+PiArICAgIHN0LT50eFszXSA9ICp2 YWwgPDwgMTsNCj4+ICsgICAgc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsNCj4+ICsgICAgc3BpX21l c3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsNCj4+ICsgICAgcmV0ID0gc3BpX3N5bmMo c3QtPnVzLCAmbXNnKTsNCj4+ICsgICAgaWYgKHJldCkgew0KPj4gKyAgICAgICAgICAgIGRldl9l cnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3aGlsZSB3cml0aW5nIDE2DQo+Yml0IHJlZ2lzdGVy IDB4JTAyeFxuIiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2FkZHJlc3Mp Ow0KPj4gKyAgICAgICAgICAgIGdvdG8gZXJyb3JfcmV0Ow0KPm9ubHkgZ29pbmcgdG8gbmV4dCBs aW5lIHNvIGRvbid0IG5lZWQgdGhlIGdvdG8gYW5kIGFzIGEgcmVzdWx0DQo+bm8gbmVlZCBmb3Ig dGhlIGJyYWNrZXRzIGVpdGhlci4NCj4+ICsgICAgfQ0KPj4gKw0KPj4gK2Vycm9yX3JldDoNCj4+ ICsgICAgbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOw0KPj4gKyAgICByZXR1cm4gcmV0Ow0K Pj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBhZHhyczQ1MF9zcGlfc2Vuc29yX2RhdGEoKSAt IHJlYWQgMiBieXRlcyBzZW5zb3IgZGF0YQ0KPj4gKyAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVk IHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvcg0KPj4gK2lpb190cmlnKQ0K Pj4gKyAqIEB2YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQgICoqLyBz dGF0aWMgaW50DQo+PiArYWR4cnM0NTBfc3BpX3NlbnNvcl9kYXRhKHN0cnVjdCBkZXZpY2UgKmRl diwgdTE2ICp2YWwpIHsNCj4+ICsgICAgc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsNCj4+ICsgICAg c3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPj4gKyAg ICBzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19k ZXYpOw0KPj4gKyAgICBpbnQgcmV0Ow0KPlNhbWUgYXJyYXkgY29tbWVudC4NCj4+ICsgICAgc3Ry dWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0gew0KPj4gKyAgICAgICAgICAgIHsNCj4+ICsgICAg ICAgICAgICAgICAgICAgIC50eF9idWYgPSBzdC0+dHgsDQo+PiArICAgICAgICAgICAgICAgICAg ICAucnhfYnVmID0gc3QtPnJ4LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgLmJpdHNfcGVyX3dv cmQgPSA4LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgLmxlbiA9IDQsDQo+PiArICAgICAgICAg ICAgfQ0KPj4gKyAgICB9Ow0KPj4gKw0KPj4gKyAgICBtdXRleF9sb2NrKCZzdC0+YnVmX2xvY2sp Ow0KPj4gKyAgICBzdC0+dHhbMF0gPSBBRFhSUzQ1MF9TRU5TT1JfREFUQTsNCj4+ICsgICAgc3Qt PnR4WzFdID0gMDsNCj4+ICsgICAgc3QtPnR4WzJdID0gMDsNCj4+ICsgICAgc3QtPnR4WzNdID0g MDsNCj4+ICsNCj4+ICsgICAgc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsNCj4+ICsgICAgc3BpX21l c3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsNCj4+ICsgICAgcmV0ID0gc3BpX3N5bmMo c3QtPnVzLCAmbXNnKTsNCj4+ICsgICAgaWYgKHJldCkgew0KPj4gKyAgICAgICAgICAgIGRldl9l cnIoJnN0LT51cy0+ZGV2LCAiUHJvYmxlbSB3aGlsZSByZWFkaW5nDQo+c2Vuc29yIGRhdGFcbiIp Ow0KPj4gKyAgICAgICAgICAgIGdvdG8gZXJyb3JfcmV0Ow0KPj4gKyAgICB9DQo+PiArDQo+PiAr ICAgIHNwaV9tZXNzYWdlX2luaXQoJm1zZyk7DQo+PiArICAgIHNwaV9tZXNzYWdlX2FkZF90YWls KCZ4ZmVyc1swXSwgJm1zZyk7DQo+PiArICAgIHJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7 DQo+PiArICAgIGlmIChyZXQpIHsNCj4+ICsgICAgICAgICAgICBkZXZfZXJyKCZzdC0+dXMtPmRl diwgIlByb2JsZW0gd2hpbGUgcmVhZGluZw0KPnNlbnNvciBkYXRhXG4iKTsNCj4+ICsgICAgICAg ICAgICBnb3RvIGVycm9yX3JldDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICAqdmFsID0gKHN0 LT5yeFswXSAmIDB4MDMpIDw8IDE0IHwgc3QtPnJ4WzFdIDw8IDYgfCAoc3QtPnJ4WzJdICYNCj4+ ICsweGZjKSA+PiAyOw0KPj4gK2Vycm9yX3JldDoNCj4+ICsgICAgbXV0ZXhfdW5sb2NrKCZzdC0+ YnVmX2xvY2spOw0KPj4gKyAgICByZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4NCj5UaGlzIGxv b2tzIHRvIG9ubHkgYmUgY2FsbGVkIGZyb20gaW5pdGlhbCBzZXR1cC4gTWlnaHQgYXMgd2VsbA0K Pmp1c3QgbWFrZSBpdCB0YWtlIGFuIGFkeHJzNDUwX3N0YXRlIGRpcmVjdGx5IGFuZCBzYXZlIHRo ZQ0KPmNhcmVmdWwgaW5kaXJlY3Rpb24gdGhhdCBpcyBjdXJyZW50bHkgZ29pbmcgb24gdG8gZW5z dXJlIGl0DQo+Z2V0cyB0aGUgc2FtZSBkZXYgYXMgdGhlIG90aGVyIHdyaXRlIGZ1bmN0aW9ucy4N Cj4+ICsvKioNCj4+ICsgKiBhZHhyczQ1MF9zcGlfaW5pdGlhbCgpIC0gdXNlIGZvciBpbml0aWFs aXppbmcgcHJvY2VkdXJlLg0KPj4gKyAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hp bGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvcg0KPj4gK2lpb190cmlnKQ0KPj4gKyAqIEB2 YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQgICoqLyBzdGF0aWMgaW50 DQo+PiArYWR4cnM0NTBfc3BpX2luaXRpYWwoc3RydWN0IGRldmljZSAqZGV2LA0KPj4gKyAgICAg ICAgICAgIHUzMiAqdmFsLCBjaGFyIGNoaykNCj4+ICt7DQo+PiArICAgIHN0cnVjdCBzcGlfbWVz c2FnZSBtc2c7DQo+PiArICAgIHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsNCj4+ICsgICAgc3RydWN0IGFkeHJzNDUwX3N0YXRlICpzdCA9IGlpb19kZXZf Z2V0X2RldmRhdGEoaW5kaW9fZGV2KTsNCj4+ICsgICAgaW50IHJldDsNCj5Bbm90aGVyIHVubmVl ZGVkIGFycmF5Lg0KPj4gKyAgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7DQo+PiAr ICAgICAgICAgICAgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgLnR4X2J1ZiA9IHN0LT50eCwN Cj4+ICsgICAgICAgICAgICAgICAgICAgIC5yeF9idWYgPSBzdC0+cngsDQo+PiArICAgICAgICAg ICAgICAgICAgICAuYml0c19wZXJfd29yZCA9IDgsDQo+PiArICAgICAgICAgICAgICAgICAgICAu bGVuID0gNCwNCj4+ICsgICAgICAgICAgICB9LA0KPj4gKyAgICB9Ow0KPj4gKw0KPj4gKyAgICBt dXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOw0KPj4gKyAgICBzdC0+dHhbMF0gPSBBRFhSUzQ1MF9T RU5TT1JfREFUQTsNCj4+ICsgICAgc3QtPnR4WzFdID0gMDsNCj4+ICsgICAgc3QtPnR4WzJdID0g MDsNCj4+ICsgICAgc3QtPnR4WzNdID0gMDsNCj4+ICsgICAgaWYgKGNoaykNCj4+ICsgICAgICAg ICAgICBzdC0+dHhbM10gfD0gKEFEWFJTNDUwX0NISyB8IEFEWFJTNDUwX1ApOw0KPj4gKyAgICBz cGlfbWVzc2FnZV9pbml0KCZtc2cpOw0KPj4gKyAgICBzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZl cnNbMF0sICZtc2cpOw0KPj4gKyAgICByZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOw0KPj4g KyAgICBpZiAocmV0KSB7DQo+PiArICAgICAgICAgICAgZGV2X2Vycigmc3QtPnVzLT5kZXYsICJQ cm9ibGVtIHdoaWxlIHJlYWRpbmcNCj5pbml0aWFsaXppbmcgZGF0YVxuIik7DQo+PiArICAgICAg ICAgICAgZ290byBlcnJvcl9yZXQ7DQo+PiArICAgIH0NCj4+ICsNCj5Mb29rcyBsaWtlIGFuIGVu ZGluYW5lc3MgY29udmVyc2lvbiB0byBtZS4gYmUzMnRvY3B1Lg0KPg0KPj4gKyAgICAqdmFsID0g c3QtPnJ4WzBdIDw8IDI0IHwgc3QtPnJ4WzFdIDw8IDE2IHwgc3QtPnJ4WzJdIDw8IDggfA0KPj4g K3N0LT5yeFszXTsNCj4+ICsNCj4+ICtlcnJvcl9yZXQ6DQo+PiArICAgIG11dGV4X3VubG9jaygm c3QtPmJ1Zl9sb2NrKTsNCj4+ICsgICAgcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIHNzaXplX3QgYWR4cnM0NTBfcmVhZF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4+ICsg ICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4+ICsgICAgICAgICAg ICBjaGFyICpidWYpDQo+PiArew0KPj4gKyAgICBpbnQgcmV0LCBsZW4gPSAwOw0KPk5vIG5lZWQg dG8gaW5pdGlhbGl6ZSBsZW4uDQo+PiArICAgIHUxNiB0Ow0KPj4gKyAgICByZXQgPSBhZHhyczQ1 MF9zcGlfcmVhZF9yZWdfMTYoZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgQURYUlM0NTBf VEVNUDEsDQo+PiArICAgICAgICAgICAgICAgICAgICAmdCk7DQo+PiArICAgIGlmIChyZXQpDQo+ PiArICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4+ICsgICAgbGVuID0gc3ByaW50ZihidWYsICIl ZFxuIiwgdCk7DQo+PiArICAgIHJldHVybiBsZW47DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBz c2l6ZV90IGFkeHJzNDUwX3JlYWRfcXVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+PiArICAgICAg ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+PiArICAgICAgICAgICAgY2hh ciAqYnVmKQ0KPj4gK3sNCj4+ICsgICAgaW50IHJldCwgbGVuID0gMDsNCj5TYW1lIGZvciB0aGlz IGxlbg0KPj4gKyAgICB1MTYgdDsNCj4+ICsgICAgcmV0ID0gYWR4cnM0NTBfc3BpX3JlYWRfcmVn XzE2KGRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgIEFEWFJTNDUwX1FVQUQxLA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgJnQpOw0KPj4gKyAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAgICAg IHJldHVybiByZXQ7DQo+PiArICAgIGxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHQpOw0KPj4g KyAgICByZXR1cm4gbGVuOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3NpemVfdCBhZHhyczQ1 MF93cml0ZV9kbmMoc3RydWN0IGRldmljZSAqZGV2LA0KPj4gKyAgICAgICAgICAgIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPj4gKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwN Cj4+ICsgICAgICAgICAgICBzaXplX3QgbGVuKQ0KPj4gK3sNCj4+ICsgICAgaW50IHJldDsNCj4+ ICsgICAgdTE2IHZhbDsNCj4+ICsNCj4+ICsgICAgaWYgKGxlbiA9PSAwIHx8IGxlbiA+IDIpDQo+ PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArICAgIG1lbWNweSgmdmFsLCBidWYs IGxlbik7DQo+PiArICAgIHJldCA9IGFkeHJzNDUwX3NwaV93cml0ZV9yZWdfMTYoZGV2LA0KPj4g KyAgICAgICAgICAgICAgICAgICAgQURYUlM0NTBfRE5DMSwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICZ2YWwpOw0KPkVyciwgc28gd2hhdCBpcyBtZWFudCB0byBiZSB3cml0dGVuIHRvIHRoaXM/ ICBMb29rcyBsaWtlDQo+eW91J2xsIGJlIGR1bXBpbmcgYSByYW5kb20gc2luZ2xlIGNoYXJhY3Rl ciBpbiB0byB0aGUgcmVnaXN0ZXIuLi4NCj5Eb2N1bWVudGF0aW9uIHdvdWxkIGNsZWFyIHRoaXMg dXAuDQo+DQo+PiArICAgIHJldHVybiByZXQgPyByZXQgOiBsZW47DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBzc2l6ZV90IGFkeHJzNDUwX3JlYWRfc2Vuc29yX2RhdGEoc3RydWN0IGRldmljZSAq ZGV2LA0KPj4gKyAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPj4g KyAgICAgICAgICAgIGNoYXIgKmJ1ZikNCj4+ICt7DQo+PiArICAgIGludCByZXQsIGxlbiA9IDA7 DQo+YW5vdGhlciB1bm5lZWRlZCBpbml0IG9mIGxlbg0KPj4gKyAgICB1MTYgdDsNCj4+ICsNCj4+ ICsgICAgcmV0ID0gYWR4cnM0NTBfc3BpX3NlbnNvcl9kYXRhKGRldiwgJnQpOw0KPj4gKyAgICBp ZiAocmV0KQ0KPj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7DQo+PiArDQo+PiArICAgIGxlbiA9 IHNwcmludGYoYnVmLCAiJWRcbiIsIHQpOw0KPj4gKyAgICByZXR1cm4gbGVuOw0KPj4gK30NCj4+ ICsNCj4+ICsvKiBSZWNvbW1lbmRlZCBTdGFydHVwIFNlcXVlbmNlIGJ5IHNwZWMgKi8gc3RhdGlj IGludA0KPj4gK2FkeHJzNDUwX2luaXRpYWxfc2V0dXAoc3RydWN0IGFkeHJzNDUwX3N0YXRlICpz dCkgew0KPj4gKyAgICB1MzIgdDsNCj4+ICsgICAgdTE2IGRhdGE7DQo+PiArICAgIGludCByZXQ7 DQo+PiArICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+aW5kaW9fZGV2LT5kZXY7DQo+PiAr DQo+PiArICAgIG1zbGVlcChBRFhSUzQ1MF9TVEFSVFVQX0RFTEFZKjIpOw0KPj4gKyAgICByZXQg PSBhZHhyczQ1MF9zcGlfaW5pdGlhbChkZXYsICZ0LCAxKTsNCj4+ICsgICAgaWYgKHJldCkNCj4+ ICsgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKyAgICBpZiAodCAhPSAweDAxKSB7DQo+PiAr ICAgICAgICAgICAgZGV2X2Vycigmc3QtPnVzLT5kZXYsICJUaGUgaW5pdGlhbCByZXNwb25zZSBp cw0KPm5vdCBjb3JyZWN0IVxuIik7DQo+PiArICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+ PiArDQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgbXNsZWVwKEFEWFJTNDUwX1NUQVJUVVBfREVM QVkpOw0KPj4gKyAgICByZXQgPSBhZHhyczQ1MF9zcGlfaW5pdGlhbChkZXYsICZ0LCAwKTsNCj4+ ICsgICAgaWYgKHJldCkNCj4+ICsgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKyAg ICBtc2xlZXAoQURYUlM0NTBfU1RBUlRVUF9ERUxBWSk7DQo+PiArICAgIHJldCA9IGFkeHJzNDUw X3NwaV9pbml0aWFsKGRldiwgJnQsIDApOw0KPj4gKyAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAg ICAgIHJldHVybiByZXQ7DQo+PiArICAgIGlmICgoKHQgJiAweGZmKSB8IDB4MDEpICE9IDB4ZmYg fHwgQURYUlM0NTBfR0VUX1NUKHQpICE9IDIpIHsNCj4+ICsgICAgICAgICAgICBkZXZfZXJyKCZz dC0+dXMtPmRldiwgIlRoZSBzZWNvbmQgcmVzcG9uc2UgaXMNCj5ub3QgY29ycmVjdCFcbiIpOw0K Pj4gKyAgICAgICAgICAgIHJldHVybiAtRUlPOw0KPj4gKw0KPj4gKyAgICB9DQo+PiArICAgIHJl dCA9IGFkeHJzNDUwX3NwaV9pbml0aWFsKGRldiwgJnQsIDApOw0KPj4gKyAgICBpZiAocmV0KQ0K Pj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7DQo+PiArICAgIGlmICgoKHQgJiAweGZmKSB8IDB4 MDEpICE9IDB4ZmYgfHwgQURYUlM0NTBfR0VUX1NUKHQpICE9IDIpIHsNCj4+ICsgICAgICAgICAg ICBkZXZfZXJyKCZzdC0+dXMtPmRldiwgIlRoZSB0aGlyZCByZXNwb25zZSBpcw0KPm5vdCBjb3Jy ZWN0IVxuIik7DQo+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU87DQo+PiArDQo+PiArICAgIH0N Cj4+ICsgICAgcmV0ID0gYWR4cnM0NTBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURYUlM0NTBfRkFV TFQxLCAmZGF0YSk7DQo+PiArICAgIGlmIChyZXQpDQo+PiArICAgICAgICAgICAgcmV0dXJuIHJl dDsNCj4+ICsgICAgaWYgKGRhdGEgJiAweDBmZmYpIHsNCj4+ICsgICAgICAgICAgICBkZXZfZXJy KCZzdC0+dXMtPmRldiwgIlRoZSBkZXZpY2UgaXMgbm90IGluDQo+bm9ybWFsIHN0YXR1cyFcbiIp Ow0KPj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPj4gKyAgICB9DQo+PiArICAgIHJl dCA9IGFkeHJzNDUwX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFEWFJTNDUwX1BJRDEsICZkYXRhKTsN Cj4+ICsgICAgaWYgKHJldCkNCj4+ICsgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKyAgICBk ZXZfaW5mbygmc3QtPnVzLT5kZXYsICJUaGUgUGFydCBJRCBpcyAweCV4XG4iLCBkYXRhKTsNCj4+ ICsNCj4+ICsgICAgcmV0ID0gYWR4cnM0NTBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURYUlM0NTBf U05MLCAmZGF0YSk7DQo+PiArICAgIGlmIChyZXQpDQo+PiArICAgICAgICAgICAgcmV0dXJuIHJl dDsNCj4+ICsgICAgdCA9IGRhdGE7DQo+PiArICAgIHJldCA9IGFkeHJzNDUwX3NwaV9yZWFkX3Jl Z18xNihkZXYsIEFEWFJTNDUwX1NOSCwgJmRhdGEpOw0KPj4gKyAgICBpZiAocmV0KQ0KPj4gKyAg ICAgICAgICAgIHJldHVybiByZXQ7DQo+PiArICAgIHQgfD0gZGF0YSA8PCAxNjsNCj4+ICsgICAg ZGV2X2luZm8oJnN0LT51cy0+ZGV2LCAiVGhlIFNlcmlhbCBOdW1iZXIgaXMgMHgleFxuIiwgdCk7 DQo+PiArDQo+PiArICAgIGRldl9pbmZvKCZzdC0+dXMtPmRldiwgIiVzIGF0IENTJWRcbiIsIERS SVZFUl9OQU1FLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgc3QtPnVzLT5jaGlwX3NlbGVjdCk7 DQo+Tm90IHJlYWxseSB1c2VmdWwgaW5mbyB0byB0aGUgYXZlcmFnZSByZWFkZXIgb2YgdGhlIGxv Zy4NCj5QbGVhc2UgY2xlYW4gdGhpcyBvbmUgb3V0Lg0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsN Cj4+ICt9DQo+PiArDQo+SSBub3RlIHRoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgdGhpcyBjaGlw IChmcm9tIGRhdGFzaGVldCkuDQo+V2Ugc2hvdWxkIHByb2JhYmx5IHN1cHBvcnQgY2hhbmdpbmcg dGhpcyBheGlzIGFjY29yZGluZyB0bw0KPndoaWNoIG9uZSB3ZSBoYXZlLiAgWiBpcyBvdXQgb2Yg Y2hpcCBwbGFuZS4gVGhlIG90aGVyIHR3byBhcmUNCj5hcmJpdHJhcnkgaWYgd2Ugb25seSBoYXZl IDEgYXhpcyBvbiB0aGUgY2hpcC4NCj4+ICtzdGF0aWMgSUlPX0RFVl9BVFRSX0dZUk9fWihhZHhy czQ1MF9yZWFkX3NlbnNvcl9kYXRhLCAwKTsgc3RhdGljDQo+PiArSUlPX0RFVl9BVFRSX1RFTVBf UkFXKGFkeHJzNDUwX3JlYWRfdGVtcCk7DQo+PiArc3RhdGljIElJT19ERVZJQ0VfQVRUUihxdWFk LCBTX0lSVUdPLA0KPj4gKyAgICAgICAgICAgIGFkeHJzNDUwX3JlYWRfcXVhZCwgTlVMTCwgMCk7 DQo+PiArc3RhdGljIElJT19ERVZJQ0VfQVRUUihkeW5hbWljX251bGxfY29ycmVjdGlvbiwgU19J V1VHTywNCj5JV1VTUiBwbGVhc2UuIFBlb3BsZSBnZXQgbmVydm91cyBmb3IgYW55IGdyZWF0ZXIg cGVybWlzc2lvbnMgdGhhbiB0aGF0Lg0KPj4gKyAgICAgICAgICAgIE5VTEwsIGFkeHJzNDUwX3dy aXRlX2RuYywgMCk7DQo+PiArc3RhdGljIElJT19DT05TVF9BVFRSKG5hbWUsICJhZHhyczQ1MCIp Ow0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHhyczQ1MF9hdHRyaWJ1dGVz W10gPSB7DQo+Ym9udXMgYmxhbmsgbGluZSBoZXJlLiBQbGVhc2UgcmVtb3ZlLg0KPj4gKw0KPj4g KyAgICAmaWlvX2Rldl9hdHRyX2d5cm9fel9yYXcuZGV2X2F0dHIuYXR0ciwNCj4+ICsgICAgJmlp b19kZXZfYXR0cl90ZW1wX3Jhdy5kZXZfYXR0ci5hdHRyLA0KPj4gKyAgICAmaWlvX2Rldl9hdHRy X3F1YWQuZGV2X2F0dHIuYXR0ciwNCj4+ICsgICAgJmlpb19kZXZfYXR0cl9keW5hbWljX251bGxf Y29ycmVjdGlvbi5kZXZfYXR0ci5hdHRyLA0KPj4gKyAgICAmaWlvX2NvbnN0X2F0dHJfbmFtZS5k ZXZfYXR0ci5hdHRyLA0KPj4gKyAgICBOVUxMDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHhyczQ1MF9hdHRyaWJ1dGVfZ3JvdXAgPSB7DQo+ PiArICAgIC5hdHRycyA9IGFkeHJzNDUwX2F0dHJpYnV0ZXMsDQo+PiArfTsNCj4+ICsNCj4+ICtz dGF0aWMgaW50IF9fZGV2aW5pdCBhZHhyczQ1MF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3Bp KSB7DQo+PiArICAgIGludCByZXQsIHJlZ2RvbmUgPSAwOw0KPj4gKyAgICBzdHJ1Y3QgYWR4cnM0 NTBfc3RhdGUgKnN0ID0ga3phbGxvYyhzaXplb2YgKnN0LCBHRlBfS0VSTkVMKTsNCj4+ICsgICAg aWYgKCFzdCkgew0KPj4gKyAgICAgICAgICAgIHJldCA9ICAtRU5PTUVNOw0KPj4gKyAgICAgICAg ICAgIGdvdG8gZXJyb3JfcmV0Ow0KPj4gKyAgICB9DQo+PiArICAgIC8qIFRoaXMgaXMgb25seSB1 c2VkIGZvciByZW1vdmFsIHB1cnBvc2VzICovDQo+PiArICAgIHNwaV9zZXRfZHJ2ZGF0YShzcGks IHN0KTsNCj4+ICsNCj4+ICsgICAgLyogQWxsb2NhdGUgdGhlIGNvbW1zIGJ1ZmZlcnMgKi8NCj4+ ICsgICAgc3QtPnJ4ID0ga3phbGxvYyhzaXplb2YoKnN0LT5yeCkqQURYUlM0NTBfTUFYX1JYLCBH RlBfS0VSTkVMKTsNCj4+ICsgICAgaWYgKHN0LT5yeCA9PSBOVUxMKSB7DQo+PiArICAgICAgICAg ICAgcmV0ID0gLUVOT01FTTsNCj4+ICsgICAgICAgICAgICBnb3RvIGVycm9yX2ZyZWVfc3Q7DQo+ PiArICAgIH0NCj4+ICsgICAgc3QtPnR4ID0ga3phbGxvYyhzaXplb2YoKnN0LT50eCkqQURYUlM0 NTBfTUFYX1RYLCBHRlBfS0VSTkVMKTsNCj4+ICsgICAgaWYgKHN0LT50eCA9PSBOVUxMKSB7DQo+ PiArICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsNCj4+ICsgICAgICAgICAgICBnb3RvIGVycm9y X2ZyZWVfcng7DQo+PiArICAgIH0NCj4+ICsgICAgc3QtPnVzID0gc3BpOw0KPj4gKyAgICBtdXRl eF9pbml0KCZzdC0+YnVmX2xvY2spOw0KPj4gKyAgICAvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlv IGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8NCj4+ICsgICAgc3QtPmluZGlvX2RldiA9IGlp b19hbGxvY2F0ZV9kZXZpY2UoKTsNCj4+ICsgICAgaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkg ew0KPj4gKyAgICAgICAgICAgIHJldCA9IC1FTk9NRU07DQo+PiArICAgICAgICAgICAgZ290byBl cnJvcl9mcmVlX3R4Ow0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHN0LT5pbmRpb19kZXYtPmRl di5wYXJlbnQgPSAmc3BpLT5kZXY7DQo+PiArICAgIHN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFk eHJzNDUwX2F0dHJpYnV0ZV9ncm91cDsNCj4+ICsgICAgc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEg PSAodm9pZCAqKShzdCk7DQo+PiArICAgIHN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBU SElTX01PRFVMRTsNCj4+ICsgICAgc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1Rf TU9ERTsNCj4+ICsNCj4+ICsgICAgcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9f ZGV2KTsNCj4+ICsgICAgaWYgKHJldCkNCj4+ICsgICAgICAgICAgICBnb3RvIGVycm9yX2ZyZWVf ZGV2Ow0KPj4gKyAgICByZWdkb25lID0gMTsNCj4+ICsNCj4+ICsgICAgLyogR2V0IHRoZSBkZXZp Y2UgaW50byBhIHNhbmUgaW5pdGlhbCBzdGF0ZSAqLw0KPj4gKyAgICByZXQgPSBhZHhyczQ1MF9p bml0aWFsX3NldHVwKHN0KTsNCj4+ICsgICAgaWYgKHJldCkNCj4+ICsgICAgICAgICAgICBnb3Rv IGVycm9yX2luaXRpYWw7DQo+PiArICAgIHJldHVybiAwOw0KPj4gKw0KPj4gK2Vycm9yX2luaXRp YWw6DQo+PiArZXJyb3JfZnJlZV9kZXY6DQo+PiArICAgIGlmIChyZWdkb25lKQ0KPj4gKyAgICAg ICAgICAgIGlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsNCj4+ICsgICAgZWxz ZQ0KPj4gKyAgICAgICAgICAgIGlpb19mcmVlX2RldmljZShzdC0+aW5kaW9fZGV2KTsNCj4+ICtl cnJvcl9mcmVlX3R4Og0KPj4gKyAgICBrZnJlZShzdC0+dHgpOw0KPj4gK2Vycm9yX2ZyZWVfcng6 DQo+PiArICAgIGtmcmVlKHN0LT5yeCk7DQo+PiArZXJyb3JfZnJlZV9zdDoNCj4+ICsgICAga2Zy ZWUoc3QpOw0KPj4gK2Vycm9yX3JldDoNCj4+ICsgICAgcmV0dXJuIHJldDsNCj4+ICt9DQo+PiAr DQo+PiArLyogZml4bWUsIGNvbmZpcm0gb3JkZXJpbmcgaW4gdGhpcyBmdW5jdGlvbiAqLyBzdGF0 aWMgaW50DQo+PiArYWR4cnM0NTBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpIHsNCj4+ ICsgICAgc3RydWN0IGFkeHJzNDUwX3N0YXRlICpzdCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOw0K Pg0KPk1pZ2h0IGFzIHdlbGwganVzdCBnbyB3aXRoDQo+DQo+aWlvX2RldmljZV91bnJlZ2lzdGVy KHN0LT5pbmRpb19kZXYpOw0KPj4gKyAgICBzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3Qt PmluZGlvX2RldjsNCj4+ICsNCj4+ICsgICAgaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rl dik7DQo+PiArICAgIGtmcmVlKHN0LT50eCk7DQo+PiArICAgIGtmcmVlKHN0LT5yeCk7DQo+PiAr ICAgIGtmcmVlKHN0KTsNCj4+ICsNCj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZHhyczQ1MF9kcml2ZXIgPSB7DQo+PiArICAgIC5k cml2ZXIgPSB7DQo+PiArICAgICAgICAgICAgLm5hbWUgPSAiYWR4cnM0NTAiLA0KPj4gKyAgICAg ICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLA0KPj4gKyAgICB9LA0KPj4gKyAgICAucHJvYmUg PSBhZHhyczQ1MF9wcm9iZSwNCj4+ICsgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFkeHJzNDUw X3JlbW92ZSksIH07DQo+PiArDQo+PiArc3RhdGljIF9faW5pdCBpbnQgYWR4cnM0NTBfaW5pdCh2 b2lkKSB7DQo+PiArICAgIHJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZHhyczQ1MF9kcml2 ZXIpOw0KPj4gK30NCj4+ICttb2R1bGVfaW5pdChhZHhyczQ1MF9pbml0KTsNCj4+ICsNCj4+ICtz dGF0aWMgX19leGl0IHZvaWQgYWR4cnM0NTBfZXhpdCh2b2lkKSB7DQo+PiArICAgIHNwaV91bnJl Z2lzdGVyX2RyaXZlcigmYWR4cnM0NTBfZHJpdmVyKTsNCj4+ICt9DQo+PiArbW9kdWxlX2V4aXQo YWR4cnM0NTBfZXhpdCk7DQo+PiArDQo+PiArTU9EVUxFX0FVVEhPUigiQ2xpZmYgQ2FpIDxjbGlm Zi5jYWlAYW5hbG9nLmNvbT4iKTsNCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZp Y2VzIEFEWFJTNDUwIEd5cm9zY29wZSBTUEkgZHJpdmVyIik7DQo+PiArTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOw0KPg0KPg0K