From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <51486B46.1000901@hilscher.com> Date: Tue, 19 Mar 2013 14:42:30 +0100 From: Jerome Poncin MIME-Version: 1.0 References: <512C806F.2020209@hilscher.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> <5138B33C.1060506@hilscher.com> <5139BABA.8010602@hilscher.com> <5139D7F5.2090904@xenomai.org> <513EF0F0.4070705@hilscher.com> <513F1DBD.5090603@xenomai.org> <513F4944.9010202@hilscher.com> <513F8434.6070405@xenomai.org> <51405E4A.9010607@hilscher.com> <5142E55E.4090705@hilscher.com> <51430107.3060600@siemens.com> <51431C55.8050304@hilscher.com> <51432110.3090900@siemens.com> <5146E61E.4080606@hilscher.com> In-Reply-To: <5146E61E.4080606@hilscher.com> 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: "xenomai@xenomai.org" TGUgMTgvMDMvMjAxMyAxMTowMiwgSmVyb21lIFBvbmNpbiBhIMOpY3JpdCA6Cj4gTGUgMTUvMDMv MjAxMyAxNDoyNCwgSmFuIEtpc3prYSBhIMOpY3JpdCA6Cj4+IE9uIDIwMTMtMDMtMTUgMTQ6MDQs IEplcm9tZSBQb25jaW4gd3JvdGU6Cj4+PiBIZWxsbyBKYW4sCj4+Pgo+Pj4gWWVzIHlvdSdyZSBy aWdodC4gSSBoYXZlIDEgdGhyZWFkIGZvciB0ZXN0IChtYWluKSBhcHBsaWNhdGlvbiBhbmQgdGhl Cj4+PiBkcml2ZXIgY3JlYXRlIG9uZSBvciB0d28gdGhyZWFkIGlmIElSUSBvciBwb2xsaW5nIGlz IGVuYWJsZS4KPj4+IFRoZSBkcml2ZXIgdGhyZWFkIGFyZSBsb29wIHdhaXRpbmcgZXZlbnQgd2l0 aCBkZWxheS4KPj4+IEF0IERyaXZlciBzdGFydCBpdCB0YWtlIGZldyBzZWNvbmQgdG8gZG93bmxv YWQgZmlybXdhcmUgYW5kIAo+Pj4gY29uZmlndXJhdGlvbi4KPj4+IE15IHF1ZXN0aW9uIGlzIHdo eSBpdCdzIGEgcHJvYmxlbSB0byBoYXZlIGEgcmVhbCB0aW1lIHRoYXQgdGhhdCBydW4gZmV3Cj4+ PiBzZWNvbmQuCj4+PiBJZiB0aGlzIHRhc2sgaGF2ZSB0aGUgYmlnZ2VyIHByaW9yaXR5LCBpdCdz IG5vcm1hbCB0byBub3QgcmVsZWFzZSBoYW5kCj4+PiBhbmQgdG8gbm90IHNsZWVwLCBJJ20gcmln aHQgb3Igbm90ID8KPj4gTGludXggaXMgbm90IGNhcGFibGUgKHlldCkgb2YgaGFuZGxpbmcgdGhl IGNhc2UgdGhhdCBhbiBvbmxpbmUgQ1BVIGlzCj4+IDEwMCUgb2NjdXBpZWQuIFNvb25lciBvciBs YXRlciwgdGhlIHdob2xlIChMaW51eCkgc3lzdGVtIHdpbGwgbG9jayB1cCwKPj4gYWxzbyB0aGUg dGltZWtlZXBpbmcgY2FuIGJlIG5lZ2F0aXZlbHkgYWZmZWN0ZWQuIFRoYXQncyBub3RoaW5nIFhl bm9tYWkKPj4gY2FuIGNoYW5nZS4KPj4KPj4gVGhlcmVmb3JlLCBldmVyeSByZWFsLXRpbWUgdGFz ayBoYXMgdG8gYmVoYXZlIHByb3Blcmx5LCBzbGVlcCBvbgo+PiBhc3luY2hyb25vdXMgZXh0ZXJu YWwgZXZlbnRzIG9yIHN1c3BlbmQgaXRzZWxmIGZvciBhIGNlcnRhaW4gd2hpbGUgd2hlbgo+PiB0 aGVyZSBpcyBub3RoaW5nIHRvIGRvLiBJbiBnb29kIHJlYWwtdGltZSBkZXNpZ25zLCB0aGF0IGlz IHVzdWFsbHkgbm8KPj4gcHJvYmxlbSwgc3BlY2lmaWNhbGx5IGlmIHRoZSBudW1iZXIgb2YgdGFz a3MgaXMgbW9kZXJhdGUgYW5kIHRoZQo+PiB3b3JrbG9hZCBpcyBjbGVhci4gSSd2ZSBzZWVuIGxl c3Mgb2J2aW91cyBwcm9ibGVtcyBpbiBsYXJnZQo+PiBhcHBsaWNhdGlvbnMsIGJ1dCB0aG9zZSB3 ZXJlIHR5cGljYWxseSBidWdzIGFzIHdlbGwuCj4+Cj4+IEphbgo+Pgo+IEhlbGxvIEphbiwKPgo+ IEkgaW52ZXN0aWdhdGVkIG15IHByb2JsZW0gYW5kIHRoZSBwcm9ibGVtIGNvbWUgZnJvbSBzb21l IGxvY2sgb24gdGhyZWFkLgo+IEkgdGhpbmsgbXkgdGhyZWFkIG1hbmFnZW1lbnQgaXMgbm90IGNv cnJlY3QuLi4gSQo+IElzIHRoZXJlIGFuIGV4YW1wbGUgaW4gcG9zaXggd2l0aCBtdWx0aXBsZSB0 aHJlYWQgbWFuYWdlbWVudCA/Cj4KPiBUaGFuayB5b3UgZm9yIHlvdXIgaGVscCwKPgo+IEplcm9t ZQpIZWxsbywKCkkgY29ycmVjdGVkIG15IHByb2JsZW0gd2l0aCB0aHJlYWQgbWFuYWdlbWVudCBy dW5uaW5nIHdpdGggcG9zaXggc2tpbi4gCk5vdyBJIGhhdmUgYWxsIHRocmVhZCB0aGF0IHJ1biBp biBSZWFsIFRpbWUgd2l0aCBJUlEuCkkgc2VuZCB5b3UgbXkgbGFzdCB2ZXJzaW9uIG9mIHBhdGNo IHRvIHNlZSBpZiBrZXJuZWwgZHJpdmVyIGlzIGNvcnJlY3QgCmZvciB5b3UsIGFuZCBjYW4gYmUg aW50ZWdyYXRlZCB0byB0aGUgbWFpbiBsaW5lLgoKVGhhbmsgeW91IGZvciB5b3VyIGhlbHAsCgpK ZXJvbWUKLS0tLS0tLS0tLS0tLS0gbmV4dCBwYXJ0IC0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQg YS9pbmNsdWRlL2FzbS1nZW5lcmljL3BjaV9pZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGNp X2lkcy5oCmluZGV4IGQyOThiZjQuLjNmOGQ3Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdl bmVyaWMvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGNpX2lkcy5oCkBAIC00 MCw0ICs0MCw0NSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDU2IDB4OTA1NgogI2Vu ZGlmCiAKKy8qIGNpZnggKi8KKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUgorI2RlZmlu ZSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSIDB4MTVDRgorI2VuZGlmCisKKyNpZm5kZWYgUENJX0RF VklDRV9JRF9ISUxTQ0hFUl9ORVRYCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVU WCAweDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExD CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDIDB4MDAxMAorI2VuZGlmCisK KyNpZm5kZWYgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLCisjZGVmaW5lIFBDSV9ERVZJ Q0VfSURfSElMU0NIRVJfTkVUSkFDSyAweDAwMjAKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9TVUJE RVZJQ0VfSURfTlhTQl9QQ0EKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9OWFNCX1BDQSAweDMy MzUKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURfTlhQQ0EKKyNkZWZpbmUgUENJ X1NVQkRFVklDRV9JRF9OWFBDQSAweDMzMzUKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9TVUJERVZJ Q0VfSURfTkVUUExDX1JBTQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19SQU0gMHgw MDAwCisjZW5kaWYKKworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19GTEFTSAorI2Rl ZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19GTEFTSCAweDAwMDEKKyNlbmRpZgorCisjaWZu ZGVmIFBDSV9TVUJERVZJQ0VfSURfTkVUSkFDS19SQU0KKyNkZWZpbmUgUENJX1NVQkRFVklDRV9J RF9ORVRKQUNLX1JBTSAweDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURf TkVUSkFDS19GTEFTSAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfRkxBU0ggMHgw MDAxCisjZW5kaWYKKwogI2VuZGlmIC8qIF9YRU5PX0FTTV9HRU5FUklDX1BDSV9JRFNfSCAqLwpk aWZmIC0tZ2l0IGEva3NyYy9kcml2ZXJzL2NpZngvS2NvbmZpZyBiL2tzcmMvZHJpdmVycy9jaWZ4 L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1YTQ1ZQotLS0g L2Rldi9udWxsCisrKyBiL2tzcmMvZHJpdmVycy9jaWZ4L0tjb25maWcKQEAgLTAsMCArMSwxMSBA QAorbWVudSAiSGlsc2NoZXIgY2lmWCBkcml2ZXIiCisKK2NvbmZpZyBYRU5PX0RSSVZFUlNfQ0lG WAorCWRlcGVuZHMgb24gWEVOT19TS0lOX1JURE0KKwl0cmlzdGF0ZSAiSGlsc2NoZXIgY2lmWCIK KwloZWxwCisKKwlUaGlzIGRyaXZlciBwcm92aWRlcyBIaWxzY2hlciBjaWZYIAorCW92ZXIgUlRE TS4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEva3NyYy9kcml2ZXJzL2NpZngvTWFrZWZpbGUgYi9r c3JjL2RyaXZlcnMvY2lmeC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi40MjU1MGJkCi0tLSAvZGV2L251bGwKKysrIGIva3NyYy9kcml2ZXJzL2NpZngvTWFrZWZp bGUKQEAgLTAsMCArMSwxMyBAQAoraWZuZXEgKCQoVkVSU0lPTikuJChQQVRDSExFVkVMKSwyLjQp CisKKyMgTWFrZWZpbGUgZnJhZyBmb3IgTGludXggdjIuNiBhbmQgdjMueAorCitFWFRSQV9DRkxB R1MgKz0gLURfX0lOX1hFTk9NQUlfXyAtSWluY2x1ZGUveGVub21haSAtSWRyaXZlcnMveGVub21h aS9jaWZ4CisKK29iai0kKENPTkZJR19YRU5PX0RSSVZFUlNfQ0lGWCkgKz0geGVub19jaWZ4X3Bj aS5vCisKK3hlbm9fY2lmeF9wY2kteSA6PSBjaWZ4X3BjaS5vCisKK3hlbm9fY2lmeF9wY2ktJChD T05GSUdfWEVOT19EUklWRVJTX1JUSVBDX0NJRlgpICs9IGNpZnhfcGNpLm8KKworZW5kaWYKZGlm ZiAtLWdpdCBhL2tzcmMvZHJpdmVycy9jaWZ4L2NpZnhfcGNpLmMgYi9rc3JjL2RyaXZlcnMvY2lm eC9jaWZ4X3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZTA0YWEK LS0tIC9kZXYvbnVsbAorKysgYi9rc3JjL2RyaXZlcnMvY2lmeC9jaWZ4X3BjaS5jCkBAIC0wLDAg KzEsODU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEhpbHNjaGVyIEZyYW5jZSAoSlAp IDx3d3cuaGlsc2NoZXIuZnI+CisgKgorICogWGVub21haSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogWGVu b21haSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBi dXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggWGVub21haTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVt cGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLwor CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxs aW51eC9tbWFuLmg+CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94ZW5vbWFpL3BjaV9pZHMuaD4K KworI2luY2x1ZGUgPHJ0ZG0vcnRkbV9kcml2ZXIuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIp OworTU9EVUxFX0RFU0NSSVBUSU9OKCJSVERNIGJvYXJkIGRyaXZlciBmb3IgQ2lmWCBjYXJkcyIp OworTU9EVUxFX0FVVEhPUigiSGlsc2NoZXIgRnJhbmNlIChKUCkgPHd3dy5oaWxzY2hlci5mcj4i KTsKKworI2RlZmluZSBSVENJRlhfR0VUX01FTV9JTkZPCQkJCTB4MDAKKyNkZWZpbmUgUlRDSUZY X01NQVAJCQkJCQkweDAxCisjZGVmaW5lIFJUQ0lGWF9NVU5NQVAJCQkJCTB4MDIKKyNkZWZpbmUg UlRDSUZYX1JFUVVFU1RfSVJRCQkJCTB4MDMKKyNkZWZpbmUgUlRDSUZYX0ZSRUVfSVJRCQkJCQkw eDA0CisjZGVmaW5lIFJUQ0lGWF9FTkFCTEVfSVJRCQkJCTB4MDUKKyNkZWZpbmUgUlRDSUZYX0RJ U0FCTEVfSVJRCQkJCTB4MDYKKyNkZWZpbmUgUlRDSUZYX1dBSVRfSVJRCQkJCQkweDA3CisKKyNk ZWZpbmUgRFBNX0hPU1RfSU5UX0VOMCAgICAgICAgICAgICAgICAweGZmZjAKKyNkZWZpbmUgRFBN X0hPU1RfSU5UX1NUQVQwICAgICAgICAgICAgICAweGZmZTAKKyNkZWZpbmUgUExYX0dQSU9fT0ZG U0VUICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIFBMWF9USU1JTkdfT0ZGU0VUICAgICAg ICAgICAgICAgMHgwYQorCisjZGVmaW5lIERQTV9IT1NUX0lOVF9NQVNLICAgICAgICAgICAgICAg MHhlNjAwZmZmZgorI2RlZmluZSBEUE1fSE9TVF9JTlRfR0xPQkFMX0VOICAgICAgICAgIDB4ODAw MDAwMDAKKyNkZWZpbmUgUExYX0dQSU9fREFUQTBfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDA0 CisjZGVmaW5lIFBMWF9HUElPX0RBVEExX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisj ZGVmaW5lIE5YX1BDQV9QQ0lfOF9CSVRfRFBNX01PREUgICAgICAgMHg1NDMxRjk2MgorI2RlZmlu ZSBOWF9QQ0FfUENJXzE2X0JJVF9EUE1fTU9ERSAgICAgIDB4NDA3M0Y4RTIKKyNkZWZpbmUgTlhf UENBX1BDSV8zMl9CSVRfRFBNX01PREUgICAgICAweDQwODI0MTIyCisKKy8qIE51bWJlciBvZiBi YXIgKi8KKy8qIHBvaW50cyB0byB0aGUgRFBNIC0+IG5ldFgsIG5ldFBMQywgbmV0SkFDSyAqLwor I2RlZmluZSBEUE1fQkFSICAgICAgICAgICAgICAgICAgICAgICAgIDAKKy8qIHBvaW50cyB0byB0 aGUgb3B0aW9uYWwgZXh0ZW5kZWQgbWVtb3J5ICAgICAqLworI2RlZmluZSBFWFRfTUVNX0JBUiAg ICAgICAgICAgICAgICAgICAgIDEKKy8qIHBvaW50cyB0byB0aGUgRFBNIC0+IG5ldFhQTFggICAg ICAgICAgICAgICAqLworI2RlZmluZSBQTFhfRFBNX0JBUiAgICAgICAgICAgICAgICAgICAgIDIK Ky8qIHRpbWluZyBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmlu ZSBQWEFfUExYX0JBUiAgICAgICAgICAgICAgICAgICAgIDAKKworLyogSW5kZXggb2YgaW9faW5m byBzdHJ1Y3R1cmUncyBtZW1vcnkgYXJyYXkgKi8KKy8qIGZpcnN0IG1hcHBpbmcgZGVzY3JpYmVz IERQTSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFBNX0lOREVYICAgICAgICAgICAgICAgICAg ICAgICAwCisvKiBzZWNvbmQgbWFwcGluZyBkZXNjcmliZXMgZXh0ZW5kZWQgbWVtb3J5ICovCisj ZGVmaW5lIEVYVF9NRU1fSU5ERVggICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIE1BWF9N QVBTICAgICAgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIE1FTV9QSFlTICAgICAgICAg ICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIERSSVZFUl9OQU1FICAgICAgICAgICAgICAgICAg ICAgInJ0ZG1fY2lmeCIKKyNkZWZpbmUgUEVSSVBIRVJBTF9OQU1FICAgICAgICAgICAgICAgICAi Y2lmeCIKKyNkZWZpbmUgUFJPVklERVJfTkFNRSAgICAgICAgICAgICAgICAgICAiSGlsc2NoZXIi CisKKy8qIG5hbWUgb2YgYSBOWFNCLVBDQSBvciBOWFBDQS1QQ0kgY2FyZCAqLworI2RlZmluZSBD SUZYX1JURE1fUExYX0NBUkRfTkFNRSAgICAgICAgICJuZXR4X3BseCIKKy8qIG5hbWUgb2YgYSBj aWZYIFBDSSBjYXJkICAgICAgICAgICAgICAqLworI2RlZmluZSBDSUZYX1JURE1fQ0FSRF9OQU1F ICAgICAgICAgICAgICJuZXR4IgorLyogbmFtZSBvZiBhIG5ldFBMQyBQQ0kgY2FyZCAgICAgICAg ICAgICovCisjZGVmaW5lIENJRlhfUlRETV9ORVRQTENfQ0FSRF9OQU1FICAgICAgIm5ldHBsYyIK Ky8qIG5hbWUgb2YgYSBuZXRKQUNLIFBDSSBjYXJkICAgICAgICAgICAqLworI2RlZmluZSBDSUZY X1JURE1fTkVUSkFDS19DQVJEX05BTUUgICAgICJuZXRqYWNrIgorCitzdHJ1Y3QgaW9fbWVtIHsK Kwl1aW50MzJfdCBhZGRyOworCXVpbnQzMl90IHNpemU7CisJaW50MzJfdCBtZW10eXBlOworCXZv aWQgX19pb21lbSAqaW50ZXJuYWxfYWRkcjsKK307CisKK3N0cnVjdCBpb19pbmZvIHsKKwlzdHJ1 Y3QgaW9fbWVtIG1lbVtNQVhfTUFQU107CisJaW50MzJfdCBpcnE7CisJYm9vbCBpcnFfZW5hYmxl OworCWJvb2wgaXJxX3JlZ2lzdGVyZWQ7CisJcnRkbV9pcnFfdCBpcnFfaGFuZGxlOworCXJ0ZG1f ZXZlbnRfdCBpcnFfZXZlbnQ7CisJcnRkbV9ucnRzaWdfdCBpcnFfbnJ0c2lnOworCWJvb2wgaXJx X3NpZzsKKwlzdHJ1Y3QgZXh0X2lvX2luZm8gKnByaXY7Cit9OworCitzdHJ1Y3QgZXh0X2lvX2lu Zm8geworCXVpbnQzMl90IF9faW9tZW0gKnBseDsKKwl1aW50OF90IGRwbV9tb2RlOworCXVpbnQz Ml90IHBseF90aW1pbmc7Cit9OworCitzdHJ1Y3QgaW9fbWFwX21lbSB7CisJdWludDMyX3QgcGh5 c19hZGRyOworCXVpbnQzMl90IHZpcnRfYWRkcjsKKwl1aW50MzJfdCBsZW5ndGg7Cit9OworCitz dGF0aWMgc3RydWN0IGlvX2luZm8gKmNpZnhfZ2V0X2RldmljZV9kYXRhKHN0cnVjdCBydGRtX2Rl dmljZSAqaW5mbyk7CitzdGF0aWMgc3RydWN0IGV4dF9pb19pbmZvICpjaWZ4X2dldF9wcml2YXRl KHN0cnVjdCBydGRtX2RldmljZSAqaW5mbyk7CisKK3N0YXRpYyBpbnQgY2lmeF9zZXRfcGx4X3Rp bWluZyhzdHJ1Y3QgZXh0X2lvX2luZm8gKmV4dF9pbmZvKTsKK3N0YXRpYyBpbnQgY2lmeF9nZXRf cGx4X3RpbWluZyhzdHJ1Y3QgZXh0X2lvX2luZm8gKmV4dF9pbmZvKTsKK3N0YXRpYyBpbnQgY2lm eF9nZXRfZHBtX21vZGUoc3RydWN0IGV4dF9pb19pbmZvICpleHRfaW5mbyk7CisKK3N0YXRpYyBp bnQgY2lmeF9wY2lfb3BlbihzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSBy dGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIGludCBvZmxhZ3MpOworc3RhdGljIGludCBjaWZ4 X3BjaV9jbG9zZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSAgcnRkbV91 c2VyX2luZm9fdCAqdXNlcl9pbmZvKTsKK3N0YXRpYyBpbnQgY2lmeF9wY2lfaW9jdGxfbnJ0KHN0 cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgICAgcnRkbV91c2VyX2luZm9f dCAqdXNlcl9pbmZvLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJlcXVlc3QsIHZvaWQgKmFyZyk7 CitzdGF0aWMgaW50IGNpZnhfcGNpX2lvY3RsX3J0KHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpj b250ZXh0LAorCQkJICAgICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sCisJCQkgICAgIHVu c2lnbmVkIGludCByZXF1ZXN0LCB2b2lkICphcmcpOworc3RhdGljIGludCBjaWZ4X3BjaV9wcm9i ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwor c3RhdGljIHZvaWQgY2lmeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCitzdGF0 aWMgaW5saW5lIGludCBjaWZ4X2hhbmRsZXIocnRkbV9pcnFfdCAqaXJxKTsKKworLyogTnVtYmVy IG9yIGNpZnggZm91bmQgYW5kIG9wZW4gKi8KK3N0YXRpYyBpbnQzMl90IGNpZnhfbnVtOworCisv KiBSVERNIERldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcnRkbV9kZXZpY2UgX19pbml0ZGF0YSBjaWZ4X2RldmljZV90bXBsID0geworCS5zdHJ1Y3Rf dmVyc2lvbiA9IFJURE1fREVWSUNFX1NUUlVDVF9WRVIsCisKKwkuZGV2aWNlX2ZsYWdzID0gUlRE TV9OQU1FRF9ERVZJQ0UsCisJLmNvbnRleHRfc2l6ZSA9IDAsCisJLmRldmljZV9uYW1lID0gIiIs CisKKwkub3Blbl9ucnQgPSBjaWZ4X3BjaV9vcGVuLAorCisJLm9wcyA9IHsKKwkJLmNsb3NlX25y dCA9IGNpZnhfcGNpX2Nsb3NlLAorCisJCS5pb2N0bF9ydCA9IGNpZnhfcGNpX2lvY3RsX3J0LAor CQkuaW9jdGxfbnJ0ID0gY2lmeF9wY2lfaW9jdGxfbnJ0LAorCQl9LAorCisJLmRldmljZV9jbGFz cyA9IFJURE1fQ0xBU1NfRVhQRVJJTUVOVEFMLAorCS5kZXZpY2Vfc3ViX2NsYXNzID0gUlRETV9T VUJDTEFTU19HRU5FUklDLAorCS5wcm9maWxlX3ZlcnNpb24gPSAxLAorCS5kcml2ZXJfbmFtZSA9 IERSSVZFUl9OQU1FLAorCS5kcml2ZXJfdmVyc2lvbiA9IFJURE1fRFJJVkVSX1ZFUigxLCAwLCAw KSwKKwkucHJvdmlkZXJfbmFtZSA9IFBST1ZJREVSX05BTUUsCit9OworCisvKiBEZXZpY2UgdGFi bGUgKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjaWZ4X3BjaV90YmwpID0gewor CXsKKwlQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgs IDAsIDB9LCB7CisJUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJ CSAgICBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX1NVQkRFVklDRV9JRF9OWFNCX1BDQX0sIHsKKwlQ Q0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTAzMCwKKwkJICAgIFBDSV9WRU5E T1JfSURfUExYLCBQQ0lfU1VCREVWSUNFX0lEX05YUENBfSwgeworCVBDSV9WRU5ET1JfSURfSElM U0NIRVIsIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDLAorCQkgICAgUENJX1ZFTkRPUl9J RF9ISUxTQ0hFUiwgUENJX1NVQkRFVklDRV9JRF9ORVRQTENfUkFNfSwgeworCVBDSV9WRU5ET1Jf SURfSElMU0NIRVIsIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDLAorCQkgICAgUENJX1ZF TkRPUl9JRF9ISUxTQ0hFUiwgUENJX1NVQkRFVklDRV9JRF9ORVRQTENfRkxBU0h9LCB7CisJUENJ X1ZFTkRPUl9JRF9ISUxTQ0hFUiwgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLLAorCQkg ICAgUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwgUENJX1NVQkRFVklDRV9JRF9ORVRKQUNLX1JBTX0s IHsKKwlQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpB Q0ssCisJCSAgICBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLCBQQ0lfU1VCREVWSUNFX0lEX05FVEpB Q0tfRkxBU0h9LCB7CisJMCx9Cit9OworCisvKiBjaWZYIERyaXZlciAqLworc3RhdGljIHN0cnVj dCBwY2lfZHJpdmVyIGNpZnhfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjaWZ4IiwKKwkuaWRf dGFibGUgPSBjaWZ4X3BjaV90YmwsCisJLnByb2JlID0gY2lmeF9wY2lfcHJvYmUsCisJLnJlbW92 ZSA9IGNpZnhfcGNpX3JlbW92ZSwKK307CisKKy8qCisgKgljaWZ4X3J0ZG1fZGV2aWNlX3RvX2Rl dmljZV9kYXRhCisgKglHZXQgZGV2aWNlX2RhdGEgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBzdHJ1 Y3QgaW9faW5mbyAqY2lmeF9nZXRfZGV2aWNlX2RhdGEoc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZv KQoreworCXJldHVybiBpbmZvLT5kZXZpY2VfZGF0YTsKK30KKworLyoKKyAqCWNpZnhfcnRkbV9k ZXZpY2VfdG9fcHJpdmF0ZQorICoJR2V0IGV4dF9pb19pbmZvIHN0cnVjdHVyZQorICovCitzdGF0 aWMgc3RydWN0IGV4dF9pb19pbmZvICpjaWZ4X2dldF9wcml2YXRlKHN0cnVjdCBydGRtX2Rldmlj ZSAqaW5mbykKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRh KS0+cHJpdjsKK30KKworLyoKKyAqIGNpZnhfaGFuZGxlcgorICogY2lmeCBpbnRlcnJ1cHQgaGFu ZGxlcgorICovCitzdGF0aWMgaW5saW5lIGludCBjaWZ4X2hhbmRsZXIocnRkbV9pcnFfdCAqaXJx KQoreworCXN0cnVjdCBydGRtX2RldmljZSAqaW5mbyA9IHJ0ZG1faXJxX2dldF9hcmcoaXJxLCB2 b2lkKTsKKwlzdHJ1Y3QgaW9faW5mbyAqZGV2aWNlX2RhdGEgPSBpbmZvLT5kZXZpY2VfZGF0YTsK KworCS8qIFRlc3QgaWYgcmVxdWVzdCBpcyBmb3IgdGhpcyBkcml2ZXIgKi8KKwlpZiAoKGRldmlj ZV9kYXRhLT5wcml2ICE9IE5VTEwpCisJICAgIHx8IChkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVy ZWQgPT0gMCkKKwkgICAgfHwgKGRldmljZV9kYXRhLT5pcnFfZW5hYmxlID09IDApKSB7CisJCS8q IFRoaXMgaXMgYSBQTFggZGV2aWNlIGFuZCBjYW5ub3QgcHJvZHVjZSBhbiBJUlEsCisJCSAgIElS USBub3QgcmVnaXN0cmVkIG9yIG5vdCBlbmFibGUgKGNhbm5vdCBwcm9kdWNlIGFuIElSUSkgKi8K KwkJcmV0dXJuIFJURE1fSVJRX05PTkU7CisJfSBlbHNlIHsKKwkJdm9pZCBfX2lvbWVtICppbnRf ZW5hYmxlX3JlZyA9CisJCSAgICBkZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxf YWRkciArCisJCSAgICBEUE1fSE9TVF9JTlRfRU4wOworCQl2b2lkIF9faW9tZW0gKmludF9zdGF0 dXNfcmVnID0KKwkJICAgIGRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRy ICsKKwkJICAgIERQTV9IT1NUX0lOVF9TVEFUMDsKKworCQkvKiBJcyBvbmUgb2Ygb3VyIGludGVy cnVwdHMgZW5hYmxlZCBhbmQgYWN0aXZlID8gKi8KKwkJaWYgKCEoaW9yZWFkMzIoaW50X2VuYWJs ZV9yZWcpICYgaW9yZWFkMzIoaW50X3N0YXR1c19yZWcpCisJCSAgICAgICYgRFBNX0hPU1RfSU5U X01BU0spKQorCQkJcmV0dXJuIFJURE1fSVJRX05PTkU7CisKKwkJLyogRGlzYWJsZSBpbnRlcnJ1 cHQgKi8KKwkJaW93cml0ZTMyKGlvcmVhZDMyKGludF9lbmFibGVfcmVnKQorCQkJICAmIH5EUE1f SE9TVF9JTlRfR0xPQkFMX0VOLCBpbnRfZW5hYmxlX3JlZyk7CisKKwkJaWYgKGRldmljZV9kYXRh LT5pcnFfcmVnaXN0ZXJlZCA9PSAxKQorCQkJcnRkbV9ldmVudF9zaWduYWwoJmRldmljZV9kYXRh LT5pcnFfZXZlbnQpOworCisJCXJldHVybiBSVERNX0lSUV9IQU5ETEVEOworCX0KK30KKworLyoK KyAqCWNpZnhfc2V0X3BseF90aW1pbmcKKyAqCVNldCBwbHggdGltaW5nCisgKi8KK3N0YXRpYyBp bnQgY2lmeF9zZXRfcGx4X3RpbWluZyhzdHJ1Y3QgZXh0X2lvX2luZm8gKmV4dF9pbmZvKQorewor CXVpbnQzMl90IF9faW9tZW0gKnBseF90aW1pbmc7CisKKwlpZiAoZXh0X2luZm8gPT0gTlVMTCkK KwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbHhfdGltaW5nID0gZXh0X2luZm8tPnBseCArIFBMWF9U SU1JTkdfT0ZGU0VUOworCSpwbHhfdGltaW5nID0gZXh0X2luZm8tPnBseF90aW1pbmc7CisKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIGNpZnhfZ2V0X3BseF90aW1pbmcKKyAqIEdldCBwbHggdGlt aW5nCisgKi8KK3N0YXRpYyBpbnQgY2lmeF9nZXRfcGx4X3RpbWluZyhzdHJ1Y3QgZXh0X2lvX2lu Zm8gKmV4dF9pbmZvKQoreworCWlmIChleHRfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RF VjsKKworCXN3aXRjaCAoZXh0X2luZm8tPmRwbV9tb2RlKSB7CisJY2FzZSA4OgorCQlleHRfaW5m by0+cGx4X3RpbWluZyA9IE5YX1BDQV9QQ0lfOF9CSVRfRFBNX01PREU7CisJCWJyZWFrOworCWNh c2UgMTY6CisJCWV4dF9pbmZvLT5wbHhfdGltaW5nID0gTlhfUENBX1BDSV8xNl9CSVRfRFBNX01P REU7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWV4dF9pbmZvLT5wbHhfdGltaW5nID0gTlhfUENB X1BDSV8zMl9CSVRfRFBNX01PREU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogY2lmeF9nZXRfZHBtX21vZGUKKyAq IEdldCBkcG0gbW9kZQorICovCitzdGF0aWMgaW50IGNpZnhfZ2V0X2RwbV9tb2RlKHN0cnVjdCBl eHRfaW9faW5mbyAqZXh0X2luZm8pCit7CisJdWludDMyX3QgX19pb21lbSAqcGx4X2dwaW87CisK KwlpZiAoZXh0X2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbHhfZ3BpbyA9 IGV4dF9pbmZvLT5wbHggKyBQTFhfR1BJT19PRkZTRVQ7CisKKwlpZiAoKCpwbHhfZ3BpbyAmIFBM WF9HUElPX0RBVEEwX01BU0spCisJICAgICYmIH4oKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTFf TUFTSykpCisJCWV4dF9pbmZvLT5kcG1fbW9kZSA9IDg7CisJZWxzZSBpZiAofigqcGx4X2dwaW8g JiBQTFhfR1BJT19EQVRBMF9NQVNLKQorCQkgJiYgKCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEEx X01BU0spKQorCQlleHRfaW5mby0+ZHBtX21vZGUgPSAzMjsKKwllbHNlIGlmICh+KCpwbHhfZ3Bp byAmIFBMWF9HUElPX0RBVEEwX01BU0spCisJCSAmJiB+KCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RB VEExX01BU0spKQorCQlleHRfaW5mby0+ZHBtX21vZGUgPSAxNjsKKwllbHNlCisJCXJldHVybiAt RUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjaWZ4X3BjaV9vcGVuCisgKiBPcGVu IGNpZnggcGNpIGRyaXZlcgorICovCitzdGF0aWMgaW50IGNpZnhfcGNpX29wZW4oc3RydWN0IHJ0 ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZv LCBpbnQgb2ZsYWdzKQoreworCXJldHVybiAwOworfQorCisvKgorICogY2lmeF9wY2lfY2xvc2UK KyAqIENsb3NlIGNpZnggcGNpIGRyaXZlcgorICovCitzdGF0aWMgaW50IGNpZnhfcGNpX2Nsb3Nl KHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICBydGRtX3VzZXJfaW5mb190 ICp1c2VyX2luZm8pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjaWZ4X3BjaV9pb2N0bF9u cnQKKyAqIGlvY3RsCisgKi8KK3N0YXRpYyBpbnQgY2lmeF9wY2lfaW9jdGxfbnJ0KHN0cnVjdCBy dGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgICAgcnRkbV91c2VyX2luZm9fdCAqdXNl cl9pbmZvLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJlcXVlc3QsIHZvaWQgKmFyZykKK3sKKwlp bnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSAoc3RydWN0IHJ0ZG1fZGV2 aWNlICopY29udGV4dC0+ZGV2aWNlOworCXN0cnVjdCBpb19pbmZvICpkZXZpY2VfZGF0YSA9IGNp ZnhfZ2V0X2RldmljZV9kYXRhKGluZm8pOworCXN0cnVjdCBpb19tYXBfbWVtIG1hcF9tZW07CisK Kwlzd2l0Y2ggKHJlcXVlc3QpIHsKKwljYXNlIFJUQ0lGWF9HRVRfTUVNX0lORk86CisJCWlmIChh cmcgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldCA9IHJ0ZG1fc2FmZV9jb3B5 X3RvX3VzZXIodXNlcl9pbmZvLAorCQkJCQkgICAgIGFyZywKKwkJCQkJICAgICBkZXZpY2VfZGF0 YS0+bWVtLAorCQkJCQkgICAgICgyICogc2l6ZW9mKHVpbnQzMl90KSkpOworCQlicmVhazsKKwor CWNhc2UgUlRDSUZYX01NQVA6CisJCWlmIChhcmcgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFM OworCisJCXJldCA9IHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlcih1c2VyX2luZm8sCisJCQkJCSAg ICAgICAmbWFwX21lbSwgYXJnLCBzaXplb2YobWFwX21lbSkpOworCQlpZiAocmV0ICE9IDApCisJ CQlicmVhazsKKworCQkvKiBNYXAgcGh5c2ljYWwgb24gdmlydHVhbCBtZW1vcnkgKi8KKwkJcmV0 ID0gcnRkbV9pb21hcF90b191c2VyKHVzZXJfaW5mbywKKwkJCQkJIG1hcF9tZW0ucGh5c19hZGRy LAorCQkJCQkgbWFwX21lbS5sZW5ndGgsCisJCQkJCSAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSks CisJCQkJCSAodm9pZCAqKikmbWFwX21lbS52aXJ0X2FkZHIsCisJCQkJCSBOVUxMLCBOVUxMKTsK KwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisKKwkJcmV0ID0gcnRkbV9zYWZlX2NvcHlfdG9f dXNlcih1c2VyX2luZm8sCisJCQkJCSAgICAgYXJnLCAmbWFwX21lbSwgc2l6ZW9mKG1hcF9tZW0p KTsKKwkJYnJlYWs7CisKKwljYXNlIFJUQ0lGWF9NVU5NQVA6CisJCWlmIChhcmcgPT0gTlVMTCkK KwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldCA9IHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlcih1 c2VyX2luZm8sCisJCQkJCSAgICAgICAmbWFwX21lbSwgYXJnLCBzaXplb2YobWFwX21lbSkpOwor CQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKworCQkvKiBVbmFwIHZpcnR1YWwgbWVtb3J5ICov CisJCXJldCA9IHJ0ZG1fbXVubWFwKHVzZXJfaW5mbywKKwkJCQkgICh2b2lkICopbWFwX21lbS52 aXJ0X2FkZHIsIG1hcF9tZW0ubGVuZ3RoKTsKKwkJYnJlYWs7CisKKwljYXNlIFJUQ0lGWF9SRVFV RVNUX0lSUToKKwkJaWYgKGRldmljZV9kYXRhLT5pcnFfcmVnaXN0ZXJlZCA9PSAwKSB7CisJCQly ZXQgPSBydGRtX2lycV9yZXF1ZXN0KCZkZXZpY2VfZGF0YS0+aXJxX2hhbmRsZSwKKwkJCQkJICAg ICAgIGRldmljZV9kYXRhLT5pcnEsCisJCQkJCSAgICAgICBjaWZ4X2hhbmRsZXIsCisJCQkJCSAg ICAgICBSVERNX0lSUVRZUEVfU0hBUkVELAorCQkJCQkgICAgICAgaW5mby0+ZGV2aWNlX25hbWUs ICh2b2lkICopaW5mbyk7CisKKwkJCWlmIChyZXQgPT0gMCkgeworCQkJCXJ0ZG1fZXZlbnRfaW5p dCgmZGV2aWNlX2RhdGEtPmlycV9ldmVudCwgMCk7CisKKwkJCQlkZXZpY2VfZGF0YS0+aXJxX3Jl Z2lzdGVyZWQgPSAxOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBSVENJRlhfRlJFRV9J UlE6CisJCWlmIChkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPT0gMSkgeworCQkJcmV0ID0g cnRkbV9pcnFfZnJlZSgmZGV2aWNlX2RhdGEtPmlycV9oYW5kbGUpOworCisJCQlpZiAocmV0ID09 IDApIHsKKwkJCQlkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPSAwOworCisJCQkJcnRkbV9l dmVudF9kZXN0cm95KCZkZXZpY2VfZGF0YS0+aXJxX2V2ZW50KTsKKwkJCX0KKwkJfQorCQlicmVh azsKKworCWNhc2UgUlRDSUZYX0VOQUJMRV9JUlE6CisJCWlmIChkZXZpY2VfZGF0YS0+aXJxX3Jl Z2lzdGVyZWQgPT0gMSkgeworCQkJcmV0ID0gcnRkbV9pcnFfZW5hYmxlKCZkZXZpY2VfZGF0YS0+ aXJxX2hhbmRsZSk7CisKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlkZXZpY2VfZGF0YS0+aXJxX2Vu YWJsZSA9IDE7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJUQ0lGWF9ESVNBQkxFX0lSUToKKwkJ aWYgKGRldmljZV9kYXRhLT5pcnFfcmVnaXN0ZXJlZCA9PSAxKSB7CisJCQlyZXQgPSBydGRtX2ly cV9kaXNhYmxlKCZkZXZpY2VfZGF0YS0+aXJxX2hhbmRsZSk7CisKKwkJCWlmIChyZXQgPT0gMCkK KwkJCQlkZXZpY2VfZGF0YS0+aXJxX2VuYWJsZSA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNl IFJUQ0lGWF9XQUlUX0lSUToKKwkJaWYgKGRldmljZV9kYXRhLT5pcnFfZW5hYmxlID09IDEpCisJ CQlyZXQgPSAtRVBFUk07CisJCWVsc2UKKwkJCXJldCA9IC1FQUdBSU47CisJCWJyZWFrOworCisJ ZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIGNpZnhfcGNpX2lvY3RsX3J0CisgKiBpb2N0bAorICovCitzdGF0aWMgaW50 IGNpZnhfcGNpX2lvY3RsX3J0KHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJ ICAgICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sCisJCQkgICAgIHVuc2lnbmVkIGludCBy ZXF1ZXN0LCB2b2lkICphcmcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHJ0ZG1fZGV2aWNl ICppbmZvID0gKHN0cnVjdCBydGRtX2RldmljZSAqKWNvbnRleHQtPmRldmljZTsKKwlzdHJ1Y3Qg aW9faW5mbyAqZGV2aWNlX2RhdGEgPSBjaWZ4X2dldF9kZXZpY2VfZGF0YShpbmZvKTsKKwlzdHJ1 Y3QgaW9fbWFwX21lbSBtYXBfbWVtOworCisJc3dpdGNoIChyZXF1ZXN0KSB7CisJY2FzZSBSVENJ RlhfR0VUX01FTV9JTkZPOgorCQlpZiAoYXJnID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsK KworCQlyZXQgPSBydGRtX3NhZmVfY29weV90b191c2VyKHVzZXJfaW5mbywKKwkJCQkJICAgICBh cmcsCisJCQkJCSAgICAgZGV2aWNlX2RhdGEtPm1lbSwKKwkJCQkJICAgICAoMiAqIHNpemVvZih1 aW50MzJfdCkpKTsKKwkJYnJlYWs7CisKKwljYXNlIFJUQ0lGWF9NTUFQOgorCQlpZiAoYXJnID09 IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSBydGRtX3NhZmVfY29weV9mcm9t X3VzZXIodXNlcl9pbmZvLAorCQkJCQkgICAgICAgJm1hcF9tZW0sIGFyZywgc2l6ZW9mKG1hcF9t ZW0pKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisKKwkJLyogTWFwIHBoeXNpY2FsIG9u IHZpcnR1YWwgbWVtb3J5ICovCisJCXJldCA9IHJ0ZG1faW9tYXBfdG9fdXNlcih1c2VyX2luZm8s CisJCQkJCSBtYXBfbWVtLnBoeXNfYWRkciwKKwkJCQkJIG1hcF9tZW0ubGVuZ3RoLAorCQkJCQkg KFBST1RfUkVBRCB8IFBST1RfV1JJVEUpLAorCQkJCQkgKHZvaWQgKiopJm1hcF9tZW0udmlydF9h ZGRyLAorCQkJCQkgTlVMTCwgTlVMTCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCisJ CXJldCA9IHJ0ZG1fc2FmZV9jb3B5X3RvX3VzZXIodXNlcl9pbmZvLAorCQkJCQkgICAgIGFyZywg Jm1hcF9tZW0sIHNpemVvZihtYXBfbWVtKSk7CisJCWJyZWFrOworCisJY2FzZSBSVENJRlhfTVVO TUFQOgorCQlpZiAoYXJnID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSBy dGRtX3NhZmVfY29weV9mcm9tX3VzZXIodXNlcl9pbmZvLAorCQkJCQkgICAgICAgJm1hcF9tZW0s IGFyZywgc2l6ZW9mKG1hcF9tZW0pKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisKKwkJ LyogVW5hcCB2aXJ0dWFsIG1lbW9yeSAqLworCQlyZXQgPSBydGRtX211bm1hcCh1c2VyX2luZm8s CisJCQkJICAodm9pZCAqKW1hcF9tZW0udmlydF9hZGRyLCBtYXBfbWVtLmxlbmd0aCk7CisJCWJy ZWFrOworCisJY2FzZSBSVENJRlhfUkVRVUVTVF9JUlE6CisJCWlmIChkZXZpY2VfZGF0YS0+aXJx X3JlZ2lzdGVyZWQgPT0gMCkgeworCQkJcmV0ID0gcnRkbV9pcnFfcmVxdWVzdCgmZGV2aWNlX2Rh dGEtPmlycV9oYW5kbGUsCisJCQkJCSAgICAgICBkZXZpY2VfZGF0YS0+aXJxLAorCQkJCQkgICAg ICAgY2lmeF9oYW5kbGVyLAorCQkJCQkgICAgICAgUlRETV9JUlFUWVBFX1NIQVJFRCwKKwkJCQkJ ICAgICAgIGluZm8tPmRldmljZV9uYW1lLCAodm9pZCAqKWluZm8pOworCisJCQlpZiAocmV0ID09 IDApIHsKKwkJCQlydGRtX2V2ZW50X2luaXQoJmRldmljZV9kYXRhLT5pcnFfZXZlbnQsIDApOwor CisJCQkJZGV2aWNlX2RhdGEtPmlycV9yZWdpc3RlcmVkID0gMTsKKwkJCX0KKwkJfQorCQlicmVh azsKKworCWNhc2UgUlRDSUZYX0ZSRUVfSVJROgorCQlpZiAoZGV2aWNlX2RhdGEtPmlycV9yZWdp c3RlcmVkID09IDEpIHsKKwkJCXJldCA9IHJ0ZG1faXJxX2ZyZWUoJmRldmljZV9kYXRhLT5pcnFf aGFuZGxlKTsKKworCQkJaWYgKHJldCA9PSAwKSB7CisJCQkJZGV2aWNlX2RhdGEtPmlycV9yZWdp c3RlcmVkID0gMDsKKworCQkJCXJ0ZG1fZXZlbnRfZGVzdHJveSgmZGV2aWNlX2RhdGEtPmlycV9l dmVudCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJUQ0lGWF9FTkFCTEVfSVJROgor CQlpZiAoZGV2aWNlX2RhdGEtPmlycV9yZWdpc3RlcmVkID09IDEpIHsKKwkJCXJldCA9IHJ0ZG1f aXJxX2VuYWJsZSgmZGV2aWNlX2RhdGEtPmlycV9oYW5kbGUpOworCisJCQlpZiAocmV0ID09IDAp CisJCQkJZGV2aWNlX2RhdGEtPmlycV9lbmFibGUgPSAxOworCQl9CisJCWJyZWFrOworCisJY2Fz ZSBSVENJRlhfRElTQUJMRV9JUlE6CisJCWlmIChkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQg PT0gMSkgeworCQkJcmV0ID0gcnRkbV9pcnFfZGlzYWJsZSgmZGV2aWNlX2RhdGEtPmlycV9oYW5k bGUpOworCisJCQlpZiAocmV0ID09IDApCisJCQkJZGV2aWNlX2RhdGEtPmlycV9lbmFibGUgPSAw OworCQl9CisJCWJyZWFrOworCisJY2FzZSBSVENJRlhfV0FJVF9JUlE6CisJCWlmIChkZXZpY2Vf ZGF0YS0+aXJxX2VuYWJsZSA9PSAxKSB7CisJCQkvKiBkZWZhdWx0IFRpbWVvdXQgNTAwIG1zICov CisJCQlyZXQgPSBydGRtX2V2ZW50X3RpbWVkd2FpdCgmZGV2aWNlX2RhdGEtPmlycV9ldmVudCwK KwkJCQkJCSAgICg1MDAgKiAxMDAwICogMTAwMCksIE5VTEwpOworCQl9IGVsc2UgeworCQkJcmV0 ID0gLUVBR0FJTjsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7 CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2lmeF9wY2lf cHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlk KQoreworCXN0cnVjdCBydGRtX2RldmljZSAqaW5mbyA9IE5VTEw7CisJc3RydWN0IGlvX2luZm8g KmRldmljZV9kYXRhID0gTlVMTDsKKwlpbnQzMl90IGJhcjsKKwlpbnQzMl90IHJldCA9IC1FTk9E RVY7CisKKwkvKiBBbGxvY2F0ZSBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZSAqLworCWluZm8gPSBr bWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCisJaWYgKGluZm8gPT0gTlVMTCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlm IChyZXQgIT0gMCkKKwkJZ290byBvdXRfZnJlZTsKKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lv bnMoZGV2LCBEUklWRVJfTkFNRSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dF9kaXNhYmxl OworCisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyAqLworCW1l bWNweShpbmZvLCAmY2lmeF9kZXZpY2VfdG1wbCwgc2l6ZW9mKCppbmZvKSk7CisKKwlpbmZvLT5k ZXZpY2VfaWQgPSBpZC0+ZGV2aWNlOworCXNucHJpbnRmKGluZm8tPmRldmljZV9uYW1lLCBSVERN X01BWF9ERVZOQU1FX0xFTiwgImNpZnglaSIsIGNpZnhfbnVtKTsKKwlpbmZvLT5wcm9jX25hbWUg PSBpbmZvLT5kZXZpY2VfbmFtZTsKKworCXN3aXRjaCAoaWQtPmRldmljZSkgeworCWNhc2UgUENJ X0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYOgorCQliYXIgPSBEUE1fQkFSOworCQlpbmZvLT5wZXJp cGhlcmFsX25hbWUgPSBDSUZYX1JURE1fQ0FSRF9OQU1FOworCQlicmVhazsKKwljYXNlIFBDSV9E RVZJQ0VfSURfSElMU0NIRVJfTkVUUExDOgorCQliYXIgPSBEUE1fQkFSOworCQlpbmZvLT5wZXJp cGhlcmFsX25hbWUgPSBDSUZYX1JURE1fTkVUUExDX0NBUkRfTkFNRTsKKwkJYnJlYWs7CisJY2Fz ZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0s6CisJCWJhciA9IERQTV9CQVI7CisJCWlu Zm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9ORVRKQUNLX0NBUkRfTkFNRTsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJYmFyID0gUExYX0RQTV9CQVI7CisJCWluZm8tPnBlcmlwaGVyYWxf bmFtZSA9IENJRlhfUlRETV9QTFhfQ0FSRF9OQU1FOworCQlicmVhazsKKwl9CisKKwlpbmZvLT5k ZXZpY2VfZGF0YSA9IE5VTEw7CisKKwkvKiBBbGxvY2F0ZSBzcGVjaWZpYyBkYXRhIHN0cmN1dHVy ZSBmb3IgZGV2aWNlICovCisJZGV2aWNlX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqZGV2aWNlX2Rh dGEpLCBHRlBfS0VSTkVMKTsKKworCWlmIChkZXZpY2VfZGF0YSA9PSBOVUxMKSB7CisJCXJldCA9 IC1FTk9NRU07CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCisJbWVtc2V0KGRldmljZV9kYXRh LCAwLCBzaXplb2YoKmRldmljZV9kYXRhKSk7CisKKwkvKiBCQVIgMCBvciAyIHBvaW50cyB0byB0 aGUgY2FyZCdzIGR1YWwgcG9ydCBtZW1vcnkgKi8KKwlkZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRF WF0uYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CisKKwlpZiAoZGV2aWNlX2Rh dGEtPm1lbVtEUE1fSU5ERVhdLmFkZHIgPT0gMCkKKwkJZ290byBvdXRfcmVsZWFzZTsKKworCWRl dmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyID0KKwkgICAgaW9yZW1hcF9u b2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhciksCisJCQkgICAgcGNpX3Jlc291cmNl X2xlbihkZXYsIGJhcikpOworCisJaWYgKGRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRl cm5hbF9hZGRyID09IDApCisJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwlkZXZfaW5mbygmZGV2LT5k ZXYsICJEUE0gYXQgJTA4WFxuIiwgZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmFkZHIpOwor CWRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYs IGJhcik7CisJZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLm1lbXR5cGUgPSBNRU1fUEhZUzsK KworCS8qIG1hcCBleHRlbmRlZCBtZW0gKEJBUiAxIHBvaW50cyB0byB0aGUgZXh0ZW5kZWQgbWVt b3J5KSAqLworCWRldmljZV9kYXRhLT5tZW1bRVhUX01FTV9JTkRFWF0uYWRkciA9CisJICAgIHBj aV9yZXNvdXJjZV9zdGFydChkZXYsIEVYVF9NRU1fQkFSKTsKKworCS8qIGV4dGVuZGVkIG1lbW9y eSBpcyBvcHRpb25hbCwgc28gZG9uJ3QgY2FyZSBpZiBpdCBpcyBub3QgcHJlc2VudCAqLworCWlm IChkZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmFkZHIgIT0gMCkgeworCQlkZXZpY2Vf ZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmludGVybmFsX2FkZHIgPQorCQkgICAgaW9yZW1hcF9u b2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIEVYVF9NRU1fQkFSKSwKKwkJCQkgICAgcGNp X3Jlc291cmNlX2xlbihkZXYsIEVYVF9NRU1fQkFSKSk7CisKKwkJaWYgKGRldmljZV9kYXRhLT5t ZW1bRVhUX01FTV9JTkRFWF0uaW50ZXJuYWxfYWRkciA9PSAwKQorCQkJZ290byBvdXRfdW5tYXA7 CisKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJleHRlbmRlZCBtZW1vcnkgYXQgJTA4WFxu IiwKKwkJCSBkZXZpY2VfZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLmFkZHIpOworCQlkZXZpY2Vf ZGF0YS0+bWVtW0VYVF9NRU1fSU5ERVhdLnNpemUgPQorCQkgICAgcGNpX3Jlc291cmNlX2xlbihk ZXYsIEVYVF9NRU1fQkFSKTsKKwkJZGV2aWNlX2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5tZW10 eXBlID0gTUVNX1BIWVM7CisJfQorCisJaWYgKChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURf SElMU0NIRVJfTkVUWCkKKwkgICAgfHwgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxT Q0hFUl9ORVRQTEMpCisJICAgIHx8IChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NI RVJfTkVUSkFDSykpIHsKKwkJLyogbWFrZSBzdXJlIGFsbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxl ZCAqLworCQlpb3dyaXRlMzIoMCwgZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFs X2FkZHIKKwkJCSAgKyBEUE1fSE9TVF9JTlRfRU4wKTsKKwkJZGV2aWNlX2RhdGEtPnByaXYgPSBO VUxMOworCX0gZWxzZSBpZiAoaWQtPnN1YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX05YUENB KSB7CisJCS8qIG1hcCBQTFggcmVnaXN0ZXJzICovCisJCXN0cnVjdCBleHRfaW9faW5mbyAqZXh0 X2luZm87CisKKwkJZXh0X2luZm8gPSBrbWFsbG9jKHNpemVvZigqZXh0X2luZm8pLCBHRlBfS0VS TkVMKTsKKworCQlpZiAoZXh0X2luZm8gPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJ CWdvdG8gb3V0X3VubWFwOworCQl9CisKKwkJZGV2aWNlX2RhdGEtPnByaXYgPSBleHRfaW5mbzsK KworCQkvKiBzZXQgUFhBIFBMWCBUaW1pbmdzICovCisJCWV4dF9pbmZvLT5wbHggPQorCQkgICAg aW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIFBYQV9QTFhfQkFSKSwKKwkJ CQkgICAgcGNpX3Jlc291cmNlX2xlbihkZXYsIFBYQV9QTFhfQkFSKSk7CisKKwkJaWYgKGV4dF9p bmZvLT5wbHggPT0gTlVMTCkKKwkJCWdvdG8gb3V0X3VubWFwOworCQlpZiAoY2lmeF9nZXRfZHBt X21vZGUoZXh0X2luZm8pKQorCQkJZ290byBvdXRfdW5tYXBfcGx4OworCQlpZiAoY2lmeF9nZXRf cGx4X3RpbWluZyhleHRfaW5mbykpCisJCQlnb3RvIG91dF91bm1hcF9wbHg7CisJCWlmIChjaWZ4 X3NldF9wbHhfdGltaW5nKGV4dF9pbmZvKSkKKwkJCWdvdG8gb3V0X3VubWFwX3BseDsKKwl9IGVs c2UgeworCQlzdHJ1Y3QgZXh0X2lvX2luZm8gKmV4dF9pbmZvOworCisJCWV4dF9pbmZvID0ga21h bGxvYyhzaXplb2YoKmV4dF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGV4dF9pbmZvID09 IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9mcmVlX3B4YTsKKwkJfQor CisJCWV4dF9pbmZvLT5wbHggPSBOVUxMOworCQlleHRfaW5mby0+cGx4X3RpbWluZyA9IDA7CisJ CWV4dF9pbmZvLT5kcG1fbW9kZSA9IDA7CisJCWRldmljZV9kYXRhLT5wcml2ID0gZXh0X2luZm87 CisJfQorCisJLyogSW5pdGlhbGl6ZSBpcnEgZGF0YSAqLworCWRldmljZV9kYXRhLT5pcnEgPSBk ZXYtPmlycTsKKwlkZXZpY2VfZGF0YS0+aXJxX2VuYWJsZSA9IDA7CisJZGV2aWNlX2RhdGEtPmly cV9yZWdpc3RlcmVkID0gMDsKKworCWluZm8tPmRldmljZV9kYXRhID0gZGV2aWNlX2RhdGE7CisK KwkvKiBSZWdpc3RlciBSVERNIGRldmljZSBkcml2ZXIgKi8KKwlyZXQgPSBydGRtX2Rldl9yZWdp c3RlcihpbmZvKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJaWYgKGlkLT5zdWJkZXZpY2UgIT0gUENJ X1NVQkRFVklDRV9JRF9OWFBDQSkKKwkJCWdvdG8gb3V0X3VubWFwOworCQllbHNlCisJCQlnb3Rv IG91dF91bm1hcF9wbHg7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlp ZiAoaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgpCisJCWRldl9pbmZv KCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgQ2lmWCBjYXJkXG4iKTsKKwllbHNlIGlmIChpZC0+ZGV2 aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDKQorCQlkZXZfaW5mbygmZGV2LT5k ZXYsICJyZWdpc3RlcmVkIG5ldFBMQyBjYXJkXG4iKTsKKwllbHNlIGlmIChpZC0+ZGV2aWNlID09 IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSykKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAi cmVnaXN0ZXJlZCBuZXRKQUNLIGNhcmRcbiIpOworCWVsc2UgaWYgKGlkLT5zdWJkZXZpY2UgPT0g UENJX1NVQkRFVklDRV9JRF9OWFNCX1BDQSkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnaXN0 ZXJlZCBOWFNCLVBDQSBhZGFwdGVyIGNhcmRcbiIpOworCWVsc2UgeworCQlzdHJ1Y3QgZXh0X2lv X2luZm8gKmV4dF9pbmZvID0gZGV2aWNlX2RhdGEtPnByaXY7CisJCWRldl9pbmZvKCZkZXYtPmRl diwKKwkJCSAicmVnaXN0ZXJlZCBOWFBDQS1QQ0kgYWRhcHRlciBjYXJkIGluICVkIGJpdCBtb2Rl XG4iLAorCQkJICgoc3RydWN0IGV4dF9pb19pbmZvICopZXh0X2luZm8pLT5kcG1fbW9kZSk7CisJ fQorCisJY2lmeF9udW0rKzsKKworCXJldHVybiAwOworCitvdXRfdW5tYXBfcGx4OgorCWlvdW5t YXAoKGRldmljZV9kYXRhLT5wcml2KS0+cGx4KTsKKworb3V0X2ZyZWVfcHhhOgorCWtmcmVlKGRl dmljZV9kYXRhLT5wcml2KTsKKworb3V0X3VubWFwOgorCWlvdW5tYXAoZGV2aWNlX2RhdGEtPm1l bVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIpOworCWlmIChkZXZpY2VfZGF0YS0+bWVtW0VYVF9N RU1fSU5ERVhdLmludGVybmFsX2FkZHIgIT0gMCkKKwkJaW91bm1hcChkZXZpY2VfZGF0YS0+bWVt W0VYVF9NRU1fSU5ERVhdLmludGVybmFsX2FkZHIpOworCitvdXRfcmVsZWFzZToKKwlwY2lfcmVs ZWFzZV9yZWdpb25zKGRldik7CisKK291dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShk ZXYpOworCitvdXRfZnJlZToKKwlpZiAoaW5mby0+ZGV2aWNlX2RhdGEgIT0gTlVMTCkKKwkJa2Zy ZWUoaW5mby0+ZGV2aWNlX2RhdGEpOworCisJa2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCBjaWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sK KwlzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1 Y3QgaW9faW5mbyAqZGV2aWNlX2RhdGEgPSBjaWZ4X2dldF9kZXZpY2VfZGF0YShpbmZvKTsKKwlz dHJ1Y3QgZXh0X2lvX2luZm8gKmV4dF9pbmZvID0gY2lmeF9nZXRfcHJpdmF0ZShpbmZvKTsKKwor CWlmIChjaWZ4X251bSA+IDApIHsKKwkJaWYgKGluZm8tPmRldmljZV9kYXRhID09IE5VTEwpCisJ CQlyZXR1cm47CisKKwkJaWYgKGV4dF9pbmZvICE9IE5VTEwpIHsKKwkJCS8qIERpc2FibGUgYWxs IGludGVycnVwdHMgKi8KKwkJCWlvd3JpdGUzMigwLCBkZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRF WF0uaW50ZXJuYWxfYWRkcgorCQkJCSAgKyBEUE1fSE9TVF9JTlRfRU4wKTsKKworCQkJaWYgKGV4 dF9pbmZvLT5wbHggIT0gTlVMTCkKKwkJCQlpb3VubWFwKCh2b2lkICopZXh0X2luZm8tPnBseCk7 CisKKwkJCWtmcmVlKCh2b2lkICopZXh0X2luZm8pOworCQl9CisKKwkJLyogVW5yZWdpc3RlciBk ZXZpY2UgZHJpdmVyICovCisJCXJ0ZG1fZGV2X3VucmVnaXN0ZXIoaW5mbywgMTAwMCk7CisKKwkJ cGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwkJ cGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwkJLyogVW5tYXAgbWVtb3J5ICovCisJCWlv dW5tYXAoZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIpOworCQlpZiAo ZGV2aWNlX2RhdGEtPm1lbVtFWFRfTUVNX0lOREVYXS5pbnRlcm5hbF9hZGRyICE9IDApCisJCQlp b3VubWFwKGRldmljZV9kYXRhLT5tZW1bRVhUX01FTV9JTkRFWF0uaW50ZXJuYWxfYWRkcik7CisK KwkJLyogUmVsZWFzZSBzdHJ1Y3R1cmUgbWVtb3J5IGFsbG9jYXRpb24gKi8KKwkJa2ZyZWUoaW5m by0+ZGV2aWNlX2RhdGEpOworCQlrZnJlZShpbmZvKTsKKworCQljaWZ4X251bS0tOworCX0KK30K Kworc3RhdGljIGludCBfX2luaXQgY2lmeF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lf cmVnaXN0ZXJfZHJpdmVyKCZjaWZ4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4 aXQgY2lmeF9wY2lfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY2lmeF9w Y2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2lmeF9wY2lfaW5pdCk7Cittb2R1bGVfZXhp dChjaWZ4X3BjaV9leGl0KTsK