Re: [PROBLEM] sundance on d-link dfe-580tx

Ben Greear (greearb@candelatech.com)
Thu, 13 Jun 2002 08:34:48 -0700


This is a multi-part message in MIME format.
--------------020103070307090102090206
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Dlink has driver source on their web page (somewhere) that
evidently works. I'll attach a copy, but I have not had
a chance to test it yet.

Matthew Hall wrote:

> Thanks for your reply Donald,
> I have tried and tested the sundance.c file as you indicated, and the
> netdrivers packages with a recompiled kernel, yet we still cannot get
> this (damn) card working :)

-- 
Ben Greear <greearb@candelatech.com>       <Ben_Greear AT excite.com>
President of Candela Technologies Inc      http://www.candelatech.com
ScryMUD:  http://scry.wanfear.com     http://scry.wanfear.com/~greear

--------------020103070307090102090206 Content-Type: application/vnd.sun.xml.calc; name="sundance.c" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="sundance.c"

Lyogc3VuZGFuY2UuYzogQSBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciB0aGUgU3VuZGFuY2Ug U1QyMDEgIkFsdGEiLiAqLwovKgkKCU1vZGlmaWVkIGJ5IEVkd2FyZCBQZW5nLiA8ZWR3YXJk X3BlbmdAZGxpbmsuY29tLnR3PgoJVmVyCURhdGUJCURlc2NyaXB0aW9uCgktLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCTEuMDJhIAkwNy8wMi8wMQlTdXBwb3J0IERGRS01NTBGWCAoZmliZXItb3B0aWNz KQoJCQkJQWRkIG1hbnVhbCBzcGVlZCBmdW5jdGlvbi4KCTEuMDJiCTA3LzEwLzAxCUZpeGVk IE5lZ290aWF0aW9uIGJ1ZyBvZiBSZXYgQzEuCgkxLjAyYwkwOC8yOS8wMQlBZGQgREZFLTUz MFRYUyBzdWJzeXN0ZW0gSUQuCgkxLjAyZAkwMS8xOC8wMglGaXhlZCB0aGUgbXVsdGljYXN0 IGJ1Zy4KCQkJCQoqLwovKgoJV3JpdHRlbiAxOTk5LTIwMDAgYnkgRG9uYWxkIEJlY2tlci4K CglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcg dG8gdGhlIHRlcm1zIG9mCgl0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCks IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgoJRHJpdmVycyBiYXNlZCBvbiBv ciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAoJ cmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAg VGhpcyBmaWxlIGlzIG5vdAoJYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1 c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKCXN5c3RlbSBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgR1BMLgoKCVRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgYXMgYmVja2VyQHNjeWxk LmNvbSwgb3IgQy9PCglTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24KCTQxMCBTZXZlcm4g QXZlLiwgU3VpdGUgMjEwCglBbm5hcG9saXMgTUQgMjE0WzZ+MDMKCglTdXBwb3J0IGFuZCB1 cGRhdGVzIGF2YWlsYWJsZSBhdAoJaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9zdW5k YW5jZS5odG1sCiovCgovKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lv biBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwpzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9u MVtdID0KICAgICJzdW5kYW5jZS5jOnYxLjAyZCAwMS8xOC8wMiAgV3JpdHRlbiBieSBEb25h bGQgQmVja2VyXG4iOwpzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uMltdID0gIiAgaHR0cDov L3d3dy5zY3lsZC5jb20vbmV0d29yay9zdW5kYW5jZS5odG1sXG4iOwoKLyogVGhlIHVzZXIt Y29uZmlndXJhYmxlIHZhbHVlcy4KICAgVGhlc2UgbWF5IGJlIG1vZGlmaWVkIHdoZW4gYSBk cml2ZXIgbW9kdWxlIGlzIGxvYWRlZC4qLwoKc3RhdGljIGludCBkZWJ1ZyA9IDA7CQkvKiAx IG5vcm1hbCBtZXNzYWdlcywgMCBxdWlldCAuLiA3IHZlcmJvc2UuICovCi8qIE1heGltdW0g ZXZlbnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQu ICovCnN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gMjU7CnN0YXRpYyBpbnQgbXR1 ID0gMDsKLyogTWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBmaWx0 ZXIgKHZzLiByeC1hbGwtbXVsdGljYXN0KS4KICAgVHlwaWNhbCBpcyBhIDY0IGVsZW1lbnQg aGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgRXRoZXJuZXQgQ1JDLiAgKi8Kc3RhdGljIGludCBt dWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMzI7CgovKiBTZXQgdGhlIGNvcHkgYnJlYWtwb2lu dCBmb3IgdGhlIGNvcHktb25seS10aW55LWZyYW1lcyBzY2hlbWUuCiAgIFNldHRpbmcgdG8g PiAxNTE4IGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4KICAgVGhpcyBjaGlw IGNhbiByZWNlaXZlIGludG8gb2Zmc2V0IGJ1ZmZlcnMsIHNvIHRoZSBBbHBoYSBkb2VzIG5v dAogICBuZWVkIGEgY29weS1hbGlnbi4gKi8Kc3RhdGljIGludCByeF9jb3B5YnJlYWsgPSAw OwoKI2RlZmluZSBNQVhfVU5JVFMgOAkKc3RhdGljIGNoYXIgKm1lZGlhW01BWF9VTklUU107 CgovKiBPcGVyYXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgYXJlIHNldCBhdCBjb21waWxlIHRp bWUuICovCgovKiBLZWVwIHRoZSByaW5nIHNpemVzIGEgcG93ZXIgb2YgdHdvIGZvciBjb21w aWxlIGVmZmljaWVuY3kuCiAgIFRoZSBjb21waWxlciB3aWxsIGNvbnZlcnQgPHVuc2lnbmVk PiclJzwyXk4+IGludG8gYSBiaXQgbWFzay4KICAgTWFraW5nIHRoZSBUeCByaW5nIHRvbyBs YXJnZSBkZWNyZWFzZXMgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgY2hhbm5lbAogICBib25kaW5n IGFuZCBwYWNrZXQgcHJpb3JpdHksIGFuZCBtb3JlIHRoYW4gMTI4IHJlcXVpcmVzIG1vZGlm eWluZyB0aGUKICAgVHggZXJyb3IgcmVjb3ZlcnkuCiAgIExhcmdlIHJlY2VpdmUgcmluZ3Mg bWVyZWx5IHdhc3RlIG1lbW9yeS4gKi8KI2RlZmluZSBUWF9SSU5HX1NJWkUJMTYKI2RlZmlu ZSBUWF9RVUVVRV9MRU4JMTAJLyogTGltaXQgcmluZyBlbnRyaWVzIGFjdHVhbGx5IHVzZWQu ICAqLwojZGVmaW5lIFJYX1JJTkdfU0laRQkzMgoKLyogT3BlcmF0aW9uYWwgcGFyYW1ldGVy cyB0aGF0IHVzdWFsbHkgYXJlIG5vdCBjaGFuZ2VkLiAqLwovKiBUaW1lIGluIGppZmZpZXMg YmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiNkZWZpbmUg VFhfVElNRU9VVCAgKDQqSFopCgojZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzYJLyogU2l6ZSBv ZiBlYWNoIHRlbXBvcmFyeSBSeCBidWZmZXIuICovCgojaWZuZGVmIF9fS0VSTkVMX18KI2Rl ZmluZSBfX0tFUk5FTF9fCiNlbmRpZgojaWYgIWRlZmluZWQoX19PUFRJTUlaRV9fKQojd2Fy bmluZyAgWW91IG11c3QgY29tcGlsZSB0aGlzIGZpbGUgd2l0aCB0aGUgY29ycmVjdCBvcHRp b25zIQojd2FybmluZyAgU2VlIHRoZSBsYXN0IGxpbmVzIG9mIHRoZSBzb3VyY2UgZmlsZS4K I2Vycm9yIFlvdSBtdXN0IGNvbXBpbGUgdGhpcyBkcml2ZXIgd2l0aCAiLU8iLgojZW5kaWYK Ci8qIEluY2x1ZGUgZmlsZXMsIGRlc2lnbmVkIHRvIHN1cHBvcnQgbW9zdCBrZXJuZWwgdmVy c2lvbnMgMi4wLjAgYW5kIGxhdGVyLiAqLwojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgojaW5j bHVkZSA8bGludXgvdGltZXIuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRl IDxsaW51eC9pb3BvcnQuaD4KI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPgojaW5jbHVkZSA8bGludXgvcGNpLmg+CiNpbmNsdWRlIDxsaW51 eC9uZXRkZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiNpbmNsdWRl IDxsaW51eC9za2J1ZmYuaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGFz bS9wcm9jZXNzb3IuaD4JLyogUHJvY2Vzc29yIHR5cGUgZm9yIGNhY2hlIGFsaWdubWVudC4g Ki8KI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KI2luY2x1ZGUgPGFzbS9pby5oPgojaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KCiNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgoKLyogQ29u ZGVuc2VkIG9wZXJhdGlvbnMgZm9yIHJlYWRhYmlsaXR5LiAqLwojZGVmaW5lIHZpcnRfdG9f bGUzMmRlc2MoYWRkcikgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKGFkZHIpKQojZGVmaW5l IGxlMzJkZXNjX3RvX3ZpcnQoYWRkcikgIGJ1c190b192aXJ0KGxlMzJfdG9fY3B1KGFkZHIp KQoKTU9EVUxFX0FVVEhPUiAoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7 Ck1PRFVMRV9ERVNDUklQVElPTiAoIlN1bmRhbmNlIEFsdGEgRXRoZXJuZXQgZHJpdmVyIik7 Ck1PRFVMRV9QQVJNIChtYXhfaW50ZXJydXB0X3dvcmssICJpIik7Ck1PRFVMRV9QQVJNICht dHUsICJpIik7Ck1PRFVMRV9QQVJNIChkZWJ1ZywgImkiKTsKTU9EVUxFX1BBUk0gKHJ4X2Nv cHlicmVhaywgImkiKTsKTU9EVUxFX1BBUk0gKG1lZGlhLCAiMS0iIF9fTU9EVUxFX1NUUklO RyAoTUFYX1VOSVRTKSAicyIpOwoKLyoKCQkJCVRoZW9yeSBvZiBPcGVyYXRpb24KCkkuIEJv YXJkIENvbXBhdGliaWxpdHkKClRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB0aGUgU3Vu ZGFuY2UgVGVjaG5vbG9naWVzICJBbHRhIiBTVDIwMSBjaGlwLgoKSUkuIEJvYXJkLXNwZWNp ZmljIHNldHRpbmdzCgpJSUkuIERyaXZlciBvcGVyYXRpb24KCklJSWEuIFJpbmcgYnVmZmVy cwoKVGhpcyBkcml2ZXIgdXNlcyB0d28gc3RhdGljYWxseSBhbGxvY2F0ZWQgZml4ZWQtc2l6 ZSBkZXNjcmlwdG9yIGxpc3RzCmZvcm1lZCBpbnRvIHJpbmdzIGJ5IGEgYnJhbmNoIGZyb20g dGhlIGZpbmFsIGRlc2NyaXB0b3IgdG8gdGhlIGJlZ2lubmluZyBvZgp0aGUgbGlzdC4gIFRo ZSByaW5nIHNpemVzIGFyZSBzZXQgYXQgY29tcGlsZSB0aW1lIGJ5IFJYL1RYX1JJTkdfU0la RS4KU29tZSBjaGlwcyBleHBsaWNpdGx5IHVzZSBvbmx5IDJeTiBzaXplZCByaW5ncywgd2hp bGUgb3RoZXJzIHVzZSBhCiduZXh0IGRlc2NyaXB0b3InIHBvaW50ZXIgdGhhdCB0aGUgZHJp dmVyIGZvcm1zIGludG8gcmluZ3MuCgpJSUliL2MuIFRyYW5zbWl0L1JlY2VpdmUgU3RydWN0 dXJlCgpUaGlzIGRyaXZlciB1c2VzIGEgemVyby1jb3B5IHJlY2VpdmUgYW5kIHRyYW5zbWl0 IHNjaGVtZS4KVGhlIGRyaXZlciBhbGxvY2F0ZXMgZnVsbCBmcmFtZSBzaXplIHNrYnVmZnMg Zm9yIHRoZSBSeCByaW5nIGJ1ZmZlcnMgYXQKb3BlbigpIHRpbWUgYW5kIHBhc3NlcyB0aGUg c2tiLT5kYXRhIGZpZWxkIHRvIHRoZSBjaGlwIGFzIHJlY2VpdmUgZGF0YQpidWZmZXJzLiAg V2hlbiBhbiBpbmNvbWluZyBmcmFtZSBpcyBsZXNzIHRoYW4gUlhfQ09QWUJSRUFLIGJ5dGVz IGxvbmcsCmEgZnJlc2ggc2tidWZmIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGZyYW1lIGlzIGNv cGllZCB0byB0aGUgbmV3IHNrYnVmZi4KV2hlbiB0aGUgaW5jb21pbmcgZnJhbWUgaXMgbGFy Z2VyLCB0aGUgc2tidWZmIGlzIHBhc3NlZCBkaXJlY3RseSB1cCB0aGUKcHJvdG9jb2wgc3Rh Y2suICBCdWZmZXJzIGNvbnN1bWVkIHRoaXMgd2F5IGFyZSByZXBsYWNlZCBieSBuZXdseSBh bGxvY2F0ZWQKc2tidWZmcyBpbiBhIGxhdGVyIHBoYXNlIG9mIHJlY2VpdmVzLgogICAgClRo ZSBSWF9DT1BZQlJFQUsgdmFsdWUgaXMgY2hvc2VuIHRvIHRyYWRlLW9mZiB0aGUgbWVtb3J5 IHdhc3RlZCBieQp1c2luZyBhIGZ1bGwtc2l6ZWQgc2tidWZmIGZvciBzbWFsbCBmcmFtZXMg dnMuIHRoZSBjb3B5aW5nIGNvc3RzIG9mIGxhcmdlcgpmcmFtZXMuICBOZXcgYm9hcmRzIGFy ZSB0eXBpY2FsbHkgdXNlZCBpbiBnZW5lcm91c2x5IGNvbmZpZ3VyZWQgbWFjaGluZXMKYW5k IHRoZSB1bmRlcmZpbGxlZCBidWZmZXJzIGhhdmUgbmVnbGlnaWJsZSBpbXBhY3QgY29tcGFy ZWQgdG8gdGhlIGJlbmVmaXQgb2YKYSBzaW5nbGUgYWxsb2NhdGlvbiBzaXplLCBzbyB0aGUg ZGVmYXVsdCB2YWx1ZSBvZiB6ZXJvIHJlc3VsdHMgaW4gbmV2ZXIKY29weWluZyBwYWNrZXRz LiAgV2hlbiBjb3B5aW5nIGlzIGRvbmUsIHRoZSBjb3N0IGlzIHVzdWFsbHkgbWl0aWdhdGVk IGJ5IHVzaW5nCmEgY29tYmluZWQgY29weS9jaGVja3N1bSByb3V0aW5lLiAgQ29weWluZyBh bHNvIHByZWxvYWRzIHRoZSBjYWNoZSwgd2hpY2ggaXMKbW9zdCB1c2VmdWwgd2l0aCBzbWFs bCBmcmFtZXMuCgpBIHN1YnRsZSBhc3BlY3Qgb2YgdGhlIG9wZXJhdGlvbiBpcyB0aGF0IHRo ZSBJUCBoZWFkZXIgYXQgb2Zmc2V0IDE0IGluIGFuCmV0aGVybmV0IGZyYW1lIGlzbid0IGxv bmd3b3JkIGFsaWduZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KVW5hbGlnbmVkIGJ1ZmZl cnMgYXJlIHBlcm1pdHRlZCBieSB0aGUgU3VuZGFuY2UgaGFyZHdhcmUsIHNvCmZyYW1lcyBh cmUgcmVjZWl2ZWQgaW50byB0aGUgc2tidWZmIGF0IGFuIG9mZnNldCBvZiAiKzIiLCAxNi1i eXRlIGFsaWduaW5nCnRoZSBJUCBoZWFkZXIuCgpJSUlkLiBTeW5jaHJvbml6YXRpb24KClRo ZSBkcml2ZXIgcnVucyBhcyB0d28gaW5kZXBlbmRlbnQsIHNpbmdsZS10aHJlYWRlZCBmbG93 cyBvZiBjb250cm9sLiAgT25lCmlzIHRoZSBzZW5kLXBhY2tldCByb3V0aW5lLCB3aGljaCBl bmZvcmNlcyBzaW5nbGUtdGhyZWFkZWQgdXNlIGJ5IHRoZQpkZXYtPnRidXN5IGZsYWcuICBU aGUgb3RoZXIgdGhyZWFkIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2hpY2ggaXMgc2lu Z2xlCnRocmVhZGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHNv ZnR3YXJlLgoKVGhlIHNlbmQgcGFja2V0IHRocmVhZCBoYXMgcGFydGlhbCBjb250cm9sIG92 ZXIgdGhlIFR4IHJpbmcgYW5kICdkZXYtPnRidXN5JwpmbGFnLiAgSXQgc2V0cyB0aGUgdGJ1 c3kgZmxhZyB3aGVuZXZlciBpdCdzIHF1ZXVpbmcgYSBUeCBwYWNrZXQuIElmIHRoZSBuZXh0 CnF1ZXVlIHNsb3QgaXMgZW1wdHksIGl0IGNsZWFycyB0aGUgdGJ1c3kgZmxhZyB3aGVuIGZp bmlzaGVkIG90aGVyd2lzZSBpdCBzZXRzCnRoZSAnbHAtPnR4X2Z1bGwnIGZsYWcuCgpUaGUg aW50ZXJydXB0IGhhbmRsZXIgaGFzIGV4Y2x1c2l2ZSBjb250cm9sIG92ZXIgdGhlIFJ4IHJp bmcgYW5kIHJlY29yZHMgc3RhdHMKZnJvbSB0aGUgVHggcmluZy4gIEFmdGVyIHJlYXBpbmcg dGhlIHN0YXRzLCBpdCBtYXJrcyB0aGUgVHggcXVldWUgZW50cnkgYXMKZW1wdHkgYnkgaW5j cmVtZW50aW5nIHRoZSBkaXJ0eV90eCBtYXJrLiBJZmYgdGhlICdscC0+dHhfZnVsbCcgZmxh ZyBpcyBzZXQsIGl0CmNsZWFycyBib3RoIHRoZSB0eF9mdWxsIGFuZCB0YnVzeSBmbGFncy4K CklWLiBOb3RlcwoKSVZiLiBSZWZlcmVuY2VzCgpUaGUgU3VuZGFuY2UgU1QyMDEgZGF0YXNo ZWV0LCBwcmVsaW1pbmFyeSB2ZXJzaW9uLgpodHRwOi8vY2VzZGlzLmdzZmMubmFzYS5nb3Yv bGludXgvbWlzYy8xMDBtYnBzLmh0bWwKaHR0cDovL2Nlc2Rpcy5nc2ZjLm5hc2EuZ292L2xp bnV4L21pc2MvTldheS5odG1sCgpJVmMuIEVycmF0YQoKKi8KCmVudW0gcGNpX2lkX2ZsYWdz X2JpdHMgewoJLyogU2V0IFBDSSBjb21tYW5kIHJlZ2lzdGVyIGJpdHMgYmVmb3JlIGNhbGxp bmcgcHJvYmUxKCkuICovCglQQ0lfVVNFU19JTyA9IDEsIFBDSV9VU0VTX01FTSA9IDIsIFBD SV9VU0VTX01BU1RFUiA9IDQsCgkvKiBSZWFkIGFuZCBtYXAgdGhlIHNpbmdsZSBmb2xsb3dp bmcgUENJIEJBUi4gKi8KCVBDSV9BRERSMCA9IDAgPDwgNCwgUENJX0FERFIxID0gMSA8PCA0 LCBQQ0lfQUREUjIgPSAyIDw8IDQsIFBDSV9BRERSMyA9CgkgICAgMyA8PCA0LAoJUENJX0FE RFJfNjRCSVRTID0gMHgxMDAsIFBDSV9OT19BQ1BJX1dBS0UgPSAweDIwMCwgUENJX05PX01J Tl9MQVRFTkNZID0KCSAgICAweDQwMCwKfTsKZW51bSBjaGlwX2NhcGFiaWxpdHlfZmxhZ3Mg eyBDYW5IYXZlTUlJID0gMSwgfTsKI2lmZGVmIFVTRV9JT19PUFMKI2RlZmluZSBQQ0lfSU9U WVBFIChQQ0lfVVNFU19NQVNURVIgfCBQQ0lfVVNFU19JTyAgfCBQQ0lfQUREUjApCiNlbHNl CiNkZWZpbmUgUENJX0lPVFlQRSAoUENJX1VTRVNfTUFTVEVSIHwgUENJX1VTRVNfTUVNIHwg UENJX0FERFIxKQojZW5kaWYKCnN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdW5kYW5j ZV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKCXsweDExODYsIDB4MTAwMiwgMHgxMTg2 LCAweDEwMDIsIDAsIDAsIDB9LAoJezB4MTE4NiwgMHgxMDAyLCAweDExODYsIDB4MTAwMywg MCwgMCwgMX0sCgl7MHgxMTg2LCAweDEwMDIsIDB4MTE4NiwgMHgxMDEyLCAwLCAwLCAyfSwK CXsweDExODYsIDB4MTAwMiwgMHgxMTg2LCAweDEwNDAsIDAsIDAsIDN9LAoJezB4MTE4Niwg MHgxMDAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA0fSwKCXsweDEzRjAsIDB4 MDIwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgNX0sCgl7MCx9Cn07Ck1PRFVM RV9ERVZJQ0VfVEFCTEUgKHBjaSwgc3VuZGFuY2VfcGNpX3RibCk7CgpzdHJ1Y3QgcGNpX2lk X2luZm8gewoJY29uc3QgY2hhciAqbmFtZTsKCXN0cnVjdCBtYXRjaF9pbmZvIHsKCQlpbnQg cGNpLCBwY2lfbWFzaywgc3Vic3lzdGVtLCBzdWJzeXN0ZW1fbWFzazsKCQlpbnQgcmV2aXNp b24sIHJldmlzaW9uX21hc2s7CS8qIE9ubHkgOCBiaXRzLiAqLwoJfSBpZDsKCWVudW0gcGNp X2lkX2ZsYWdzX2JpdHMgcGNpX2ZsYWdzOwoJaW50IGlvX3NpemU7CQkvKiBOZWVkZWQgZm9y IEkvTyByZWdpb24gY2hlY2sgb3IgaW9yZW1hcCgpLiAqLwoJaW50IGRydl9mbGFnczsJCS8q IERyaXZlciB1c2UsIGludGVuZGVkIGFzIGNhcGFiaWxpdHkgZmxhZ3MuICovCn07CnN0YXRp YyBzdHJ1Y3QgcGNpX2lkX2luZm8gcGNpX2lkX3RibFtdID0gewoJeyJELUxpbmsgREZFLTU1 MFRYIEZBU1QgRXRoZXJuZXQgQWRhcHRlciIsIHsweDEwMDIxMTg2LCAweGZmZmZmZmZmLH0s CgkgUENJX0lPVFlQRSwgMTI4LCBDYW5IYXZlTUlJfSwKCXsiRC1MaW5rIERGRS01NTBGWCAx MDBNYnBzIEZpYmVyLW9wdGljcyBBZGFwdGVyIiwKCSB7MHgxMDAzMTE4NiwgMHhmZmZmZmZm Zix9LAoJIFBDSV9JT1RZUEUsIDEyOCwgQ2FuSGF2ZU1JSX0sCgl7IkQtTGluayBERkUtNTgw VFggNCBwb3J0IFNlcnZlciBBZGFwdGVyIiwgezB4MTAxMjExODYsIDB4ZmZmZmZmZmYsfSwK CSBQQ0lfSU9UWVBFLCAxMjgsIENhbkhhdmVNSUl9LAoJeyJELUxpbmsgREZFLTUzMFRYUyBG QVNUIEV0aGVybmV0IEFkYXB0ZXIiLCB7MHgxMDAyMTE4NiwgMHhmZmZmZmZmZix9LAoJIFBD SV9JT1RZUEUsIDEyOCwgQ2FuSGF2ZU1JSX0sCgl7IkQtTGluayBETDEwMDUwLWJhc2VkIEZB U1QgRXRoZXJuZXQgQWRhcHRlciIsCgkgezB4MTAwMjExODYsIDB4ZmZmZmZmZmYsfSwKCSBQ Q0lfSU9UWVBFLCAxMjgsIENhbkhhdmVNSUl9LAoJeyJTdW5kYW5jZSBUZWNobm9sb2d5IEFs dGEiLCB7MHgwMjAxMTNGMCwgMHhmZmZmZmZmZix9LAoJIFBDSV9JT1RZUEUsIDEyOCwgQ2Fu SGF2ZU1JSX0sCgl7MCx9LAkJCS8qIDAgdGVybWluYXRlZCBsaXN0LiAqLwp9OwoKLyogVGhp cyBkcml2ZXIgd2FzIHdyaXR0ZW4gdG8gdXNlIFBDSSBtZW1vcnkgc3BhY2UsIGhvd2V2ZXIg eDg2LW9yaWVudGVkCiAgIGhhcmR3YXJlIG9mdGVuIHVzZXMgSS9PIHNwYWNlIGFjY2Vzc2Vz LiAqLwojaWZkZWYgVVNFX0lPX09QUwojdW5kZWYgcmVhZGIKI3VuZGVmIHJlYWR3CiN1bmRl ZiByZWFkbAojdW5kZWYgd3JpdGViCiN1bmRlZiB3cml0ZXcKI3VuZGVmIHdyaXRlbAojZGVm aW5lIHJlYWRiIGluYgojZGVmaW5lIHJlYWR3IGludwojZGVmaW5lIHJlYWRsIGlubAojZGVm aW5lIHdyaXRlYiBvdXRiCiNkZWZpbmUgd3JpdGV3IG91dHcKI2RlZmluZSB3cml0ZWwgb3V0 bAojZW5kaWYKCi8qIE9mZnNldHMgdG8gdGhlIGRldmljZSByZWdpc3RlcnMuCiAgIFVubGlr ZSBzb2Z0d2FyZS1vbmx5IHN5c3RlbXMsIGRldmljZSBkcml2ZXJzIGludGVyYWN0IHdpdGgg Y29tcGxleCBoYXJkd2FyZS4KICAgSXQncyBub3QgdXNlZnVsIHRvIGRlZmluZSBzeW1ib2xp YyBuYW1lcyBmb3IgZXZlcnkgcmVnaXN0ZXIgYml0IGluIHRoZQogICBkZXZpY2UuICBUaGUg bmFtZSBjYW4gb25seSBwYXJ0aWFsbHkgZG9jdW1lbnQgdGhlIHNlbWFudGljcyBhbmQgbWFr ZQogICB0aGUgZHJpdmVyIGxvbmdlciBhbmQgbW9yZSBkaWZmaWN1bHQgdG8gcmVhZC4KICAg SW4gZ2VuZXJhbCwgb25seSB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gdmFsdWVzIG9y IGJpdHMgY2hhbmdlZAogICBtdWx0aXBsZSB0aW1lcyBzaG91bGQgYmUgZGVmaW5lZCBzeW1i b2xpY2FsbHkuCiovCmVudW0gYWx0YV9vZmZzZXRzIHsKCURNQUN0cmwgPSAweDAwLCBUeExp c3RQdHIgPSAweDA0LCBUeERNQUN0cmwgPSAweDA4LCBUeERlc2NQb2xsID0gMHgwYSwKCVJ4 RE1BU3RhdHVzID0gMHgwYywgUnhMaXN0UHRyID0gMHgxMCwgUnhETUFDdHJsID0gMHgxNCwg UnhEZXNjUG9sbCA9CgkgICAgMHgxNiwKCUxFREN0cmwgPSAweDFhLCBBU0lDQ3RybCA9IDB4 MzAsCglFRURhdGEgPSAweDM0LCBFRUN0cmwgPSAweDM2LCBUeFRocmVzaG9sZCA9IDB4M2Ms CglGbGFzaEFkZHIgPSAweDQwLCBGbGFzaERhdGEgPSAweDQ0LCBUeFN0YXR1cyA9IDB4NDYs IERvd25Db3VudGVyID0gMHgxOCwKCUludHJDbGVhciA9IDB4NGEsIEludHJFbmFibGUgPSAw eDRjLCBJbnRyU3RhdHVzID0gMHg0ZSwKCU1BQ0N0cmwwID0gMHg1MCwgTUFDQ3RybDEgPSAw eDUyLCBTdGF0aW9uQWRkciA9IDB4NTQsCglNYXhUeFNpemUgPSAweDVBLCBSeE1vZGUgPSAw eDVjLCBNSUlDdHJsID0gMHg1ZSwKCU11bHRpY2FzdEZpbHRlcjAgPSAweDYwLCBNdWx0aWNh c3RGaWx0ZXIxID0gMHg2NCwKCVJ4T2N0ZXRzTG93ID0gMHg2OCwgUnhPY3RldHNIaWdoID0g MHg2YSwgVHhPY3RldHNMb3cgPQoJICAgIDB4NmMsIFR4T2N0ZXRzSGlnaCA9IDB4NmUsCglU eEZyYW1lc09LID0gMHg3MCwgUnhGcmFtZXNPSyA9IDB4NzIsIFN0YXRzQ2FycmllckVycm9y ID0gMHg3NCwKCVN0YXRzTGF0ZUNvbGwgPSAweDc1LCBTdGF0c011bHRpQ29sbCA9IDB4NzYs IFN0YXRzT25lQ29sbCA9IDB4NzcsCglTdGF0c1R4RGVmZXIgPSAweDc4LCBSeE1pc3NlZCA9 IDB4NzksIFN0YXRzVHhYU0RlZmVyID0KCSAgICAweDdhLCBTdGF0c1R4QWJvcnQgPSAweDdi LAoJU3RhdHNCY2FzdFR4ID0gMHg3YywgU3RhdHNCY2FzdFJ4ID0gMHg3ZCwgU3RhdHNNY2Fz dFR4ID0KCSAgICAweDdlLCBTdGF0c01jYXN0UnggPSAweDdmLAoJLyogQWxpYXNlZCBhbmQg Ym9ndXMgdmFsdWVzISAqLwoJUnhTdGF0dXMgPSAweDBjLAp9OwoKLyogQml0cyBpbiB0aGUg aW50ZXJydXB0IHN0YXR1cy9tYXNrIHJlZ2lzdGVycy4gKi8KZW51bSBpbnRyX3N0YXR1c19i aXRzIHsKCUludHJTdW1tYXJ5ID0gMHgwMDAxLCBJbnRyUENJRXJyID0gMHgwMDAyLCBJbnRy TUFDQ3RybCA9IDB4MDAwOCwKCUludHJUeERvbmUgPSAweDAwMDQsIEludHJSeERvbmUgPSAw eDAwMTAsIEludHJSeFN0YXJ0ID0gMHgwMDIwLAoJSW50ckRydlJxc3QgPSAweDAwNDAsCglT dGF0c01heCA9IDB4MDA4MCwgTGlua0NoYW5nZSA9IDB4MDEwMCwKCUludHJUeERNQURvbmUg PSAweDAyMDAsIEludHJSeERNQURvbmUgPSAweDA0MDAsCn07CgovKiBCaXRzIGluIHRoZSBS eE1vZGUgcmVnaXN0ZXIuICovCmVudW0gcnhfbW9kZV9iaXRzIHsKCUFjY2VwdEFsbElQTXVs dGkgPSAweDIwLCBBY2NlcHRNdWx0aUhhc2ggPSAweDEwLCBBY2NlcHRBbGwgPSAweDA4LAoJ QWNjZXB0QnJvYWRjYXN0ID0gMHgwNCwgQWNjZXB0TXVsdGljYXN0ID0gMHgwMiwgQWNjZXB0 TXlQaHlzID0gMHgwMSwKfTsKLyogQml0cyBpbiBNQUNDdHJsLiAqLwplbnVtIG1hY19jdHJs MF9iaXRzIHsKCUVuYkZ1bGxEdXBsZXggPSAweDIwLCBFbmJSY3ZMYXJnZUZyYW1lID0gMHg0 MCwKCUVuYkZsb3dDdHJsID0gMHgxMDAsIEVuYlBhc3NSeENSQyA9IDB4MjAwLAp9OwplbnVt IG1hY19jdHJsMV9iaXRzIHsKCVN0YXRzRW5hYmxlID0gMHgwMDIwLCBTdGF0c0Rpc2FibGUg PSAweDAwNDAsIFN0YXRzRW5hYmxlZCA9IDB4MDA4MCwKCVR4RW5hYmxlID0gMHgwMTAwLCBU eERpc2FibGUgPSAweDAyMDAsIFR4RW5hYmxlZCA9IDB4MDQwMCwKCVJ4RW5hYmxlID0gMHgw ODAwLCBSeERpc2FibGUgPSAweDEwMDAsIFJ4RW5hYmxlZCA9IDB4MjAwMCwKfTsKCi8qIFRo ZSBSeCBhbmQgVHggYnVmZmVyIGRlc2NyaXB0b3JzLiAqLwovKiBOb3RlIHRoYXQgdXNpbmcg b25seSAzMiBiaXQgZmllbGRzIHNpbXBsaWZpZXMgY29udmVyc2lvbiB0byBiaWctZW5kaWFu CiAgIGFyY2hpdGVjdHVyZXMuICovCnN0cnVjdCBuZXRkZXZfZGVzYyB7Cgl1MzIgbmV4dF9k ZXNjOwoJdTMyIHN0YXR1czsKCXN0cnVjdCBkZXNjX2ZyYWcgewoJCXUzMiBhZGRyLCBsZW5n dGg7Cgl9IGZyYWdbMV07Cn07CgovKiBCaXRzIGluIG5ldGRldl9kZXNjLnN0YXR1cyAqLwpl bnVtIGRlc2Nfc3RhdHVzX2JpdHMgewoJRGVzY093biA9IDB4ODAwMCwgRGVzY0VuZFBhY2tl dCA9IDB4NDAwMCwgRGVzY0VuZFJpbmcgPSAweDIwMDAsCglMYXN0RnJhZyA9IDB4ODAwMDAw MDAsIERlc2NJbnRyT25UeCA9IDB4ODAwMCwgRGVzY0ludHJPbkRNQURvbmUgPQoJICAgIDB4 ODAwMDAwMDAsCn07CgojZGVmaW5lIFBSSVZfQUxJR04JMTUJLyogUmVxdWlyZWQgYWxpZ25t ZW50IG1hc2sgKi8KLyogVXNlICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkIChMMV9DQUNIRV9C WVRFUykpKSAgdG8gbWFpbnRhaW4gYWxpZ25tZW50CiAgIHdpdGhpbiB0aGUgc3RydWN0dXJl LiAqLwpzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgewoJLyogRGVzY3JpcHRvciByaW5ncyBmaXJz dCBmb3IgYWxpZ25tZW50LiAqLwoJc3RydWN0IG5ldGRldl9kZXNjIHJ4X3JpbmdbUlhfUklO R19TSVpFXTsKCXN0cnVjdCBuZXRkZXZfZGVzYyB0eF9yaW5nW1RYX1JJTkdfU0laRV07Cgkv KiBUaGUgYWRkcmVzc2VzIG9mIHJlY2VpdmUtaW4tcGxhY2Ugc2tidWZmcy4gKi8KCXN0cnVj dCBza19idWZmICpyeF9za2J1ZmZbUlhfUklOR19TSVpFXTsKCS8qIFRoZSBzYXZlZCBhZGRy ZXNzIG9mIGEgc2VudC1pbi1wbGFjZSBwYWNrZXQvYnVmZmVyLCBmb3IgbGF0ZXIgZnJlZSgp LiAqLwoJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYnVmZltUWF9SSU5HX1NJWkVdOwoJc3RydWN0 IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CglzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsJLyog TWVkaWEgbW9uaXRvcmluZyB0aW1lci4gKi8KCS8qIEZyZXF1ZW50bHkgdXNlZCB2YWx1ZXM6 IGtlZXAgc29tZSBhZGphY2VudCBmb3IgY2FjaGUgZWZmZWN0LiAqLwoJc3BpbmxvY2tfdCBs b2NrOwoJaW50IGNoaXBfaWQsIGRydl9mbGFnczsKCS8qIE5vdGU6IENhY2hlIHBhcmFncmFw aCBncm91cGVkIHZhcmlhYmxlcy4gKi8KCXN0cnVjdCBuZXRkZXZfZGVzYyAqcnhfaGVhZF9k ZXNjOwoJdW5zaWduZWQgaW50IGN1cl9yeCwgZGlydHlfcng7CS8qIFByb2R1Y2VyL2NvbnN1 bWVyIHJpbmcgaW5kaWNlcyAqLwoJdW5zaWduZWQgaW50IHJ4X2J1Zl9zejsJLyogQmFzZWQg b24gTVRVK3NsYWNrLiAqLwoJc3BpbmxvY2tfdCB0eGxvY2s7CS8qIEdyb3VwIHdpdGggVHgg Y29udHJvbCBjYWNoZSBsaW5lLiAqLwoJc3RydWN0IG5ldGRldl9kZXNjICpsYXN0X3R4Owkv KiBMYXN0IFR4IGRlc2NyaXB0b3IgdXNlZC4gKi8KCXVuc2lnbmVkIGludCBjdXJfdHgsIGRp cnR5X3R4OwoJdW5zaWduZWQgaW50IHR4X2Z1bGw6MTsJLyogVGhlIFR4IHF1ZXVlIGlzIGZ1 bGwuICovCgkvKiBUaGVzZSB2YWx1ZXMgYXJlIGtlZXAgdHJhY2sgb2YgdGhlIHRyYW5zY2Vp dmVyL21lZGlhIGluIHVzZS4gKi8KCXVuc2lnbmVkIGludCBmdWxsX2R1cGxleDoxOwkvKiBG dWxsLWR1cGxleCBvcGVyYXRpb24gcmVxdWVzdGVkLiAqLwoJdW5zaWduZWQgaW50IGR1cGxl eF9sb2NrOjE7Cgl1bnNpZ25lZCBpbnQgbWVkaWFsb2NrOjE7CS8qIERvIG5vdCBzZW5zZSBt ZWRpYS4gKi8KCXVuc2lnbmVkIGludCBkZWZhdWx0X3BvcnQ6NDsJLyogTGFzdCBkZXYtPmlm X3BvcnQgdmFsdWUuICovCgl1bnNpZ25lZCBpbnQgYW5fZW5hYmxlOjE7CS8qIGF1dG9uZWdv dGlhdGlvbiBlbmFibGUgKi8KCXVuc2lnbmVkIGludCBzcGVlZDsJLyogQ29ubmVjdCBzcGVl ZCAqLwoJLyogTXVsdGljYXN0IGFuZCByZWNlaXZlIG1vZGUuICovCglzcGlubG9ja190IG1j YXN0bG9jazsJLyogU01QIGxvY2sgbXVsdGljYXN0IHVwZGF0ZXMuICovCgl1MTYgbWNhc3Rf ZmlsdGVyWzRdOwoJLyogTUlJIHRyYW5zY2VpdmVyIHNlY3Rpb24uICovCglpbnQgbWlpX2Nu dDsJCS8qIE1JSSBkZXZpY2UgYWRkcmVzc2VzLiAqLwoJdTE2IGFkdmVydGlzaW5nOwkvKiBO V2F5IG1lZGlhIGFkdmVydGlzZW1lbnQgKi8KCXVuc2lnbmVkIGNoYXIgcGh5c1syXTsJLyog TUlJIGRldmljZSBhZGRyZXNzZXMuICovCn07CgovKiBUaGUgc3RhdGlvbiBhZGRyZXNzIGxv Y2F0aW9uIGluIHRoZSBFRVBST00uICovCiNkZWZpbmUgRUVQUk9NX1NBX09GRlNFVAkweDEw CgpzdGF0aWMgaW50IGVlcHJvbV9yZWFkIChsb25nIGlvYWRkciwgaW50IGxvY2F0aW9uKTsK c3RhdGljIGludCBtZGlvX3JlYWQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlf aWQsIGludCBsb2NhdGlvbik7CnN0YXRpYyB2b2lkIG1kaW9fd3JpdGUgKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwKCQkJaW50IHZhbHVlKTsK c3RhdGljIGludCBuZXRkZXZfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRp YyB2b2lkIGNoZWNrX2R1cGxleCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyB2 b2lkIG5ldGRldl90aW1lciAodW5zaWduZWQgbG9uZyBkYXRhKTsKc3RhdGljIHZvaWQgdHhf dGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyB2b2lkIGluaXRfcmlu ZyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyBpbnQgc3RhcnRfdHggKHN0cnVj dCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgdm9pZCBp bnRyX2hhbmRsZXIgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3Jl Z3MgKnJlZ3MpOwpzdGF0aWMgdm9pZCBuZXRkZXZfZXJyb3IgKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYsIGludCBpbnRyX3N0YXR1cyk7CnN0YXRpYyBpbnQgbmV0ZGV2X3J4IChzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KTsKc3RhdGljIHZvaWQgbmV0ZGV2X2Vycm9yIChzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBpbnQgaW50cl9zdGF0dXMpOwpzdGF0aWMgdm9pZCBzZXRfcnhfbW9k ZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9z dGF0cyAqZ2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIGludCBt aWlfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGlu dCBjbWQpOwpzdGF0aWMgaW50IG5ldGRldl9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRl dik7CgpzdGF0aWMgaW50IF9fZGV2aW5pdApzdW5kYW5jZV9wcm9iZTEgKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQp7CglzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2OwoJc3RydWN0IG5ldGRldl9wcml2YXRlICpucDsKCXN0YXRpYyBp bnQgY2FyZF9pZHg7CglpbnQgY2hpcF9pZHggPSBlbnQtPmRyaXZlcl9kYXRhOwoJaW50IGly cSA9IHBkZXYtPmlycTsKCWludCBpOwoJbG9uZyBpb2FkZHI7Cgl1MTYgYm1jcjsKCglpZiAo cGNpX2VuYWJsZV9kZXZpY2UgKHBkZXYpKQoJCXJldHVybiAtRUlPOwoJcGNpX3NldF9tYXN0 ZXIgKHBkZXYpOwoKCWRldiA9IGluaXRfZXRoZXJkZXYgKE5VTEwsIHNpemVvZiAoKm5wKSk7 CglpZiAoIWRldikKCQlyZXR1cm4gLUVOT01FTTsKCVNFVF9NT0RVTEVfT1dORVIgKGRldik7 CgojaWZkZWYgVVNFX0lPX09QUwoJaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2 LCAwKTsKCWlmICghcmVxdWVzdF9yZWdpb24gKGlvYWRkciwgcGNpX2lkX3RibFtjaGlwX2lk eF0uaW9fc2l6ZSwgZGV2LT5uYW1lKSkKCQlnb3RvIGVycl9vdXRfbmV0ZGV2OwojZWxzZQoJ aW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAxKTsKCWlmICghcmVxdWVzdF9t ZW1fcmVnaW9uCgkgICAgKGlvYWRkciwgcGNpX2lkX3RibFtjaGlwX2lkeF0uaW9fc2l6ZSwg ZGV2LT5uYW1lKSkKCQlnb3RvIGVycl9vdXRfbmV0ZGV2OwoJaW9hZGRyID0gKGxvbmcpIGlv cmVtYXAgKGlvYWRkciwgcGNpX2lkX3RibFtjaGlwX2lkeF0uaW9fc2l6ZSk7CglpZiAoIWlv YWRkcikKCQlnb3RvIGVycl9vdXRfaW9tZW07CiNlbmRpZgoJcHJpbnRrIChLRVJOX0lORk8g IiVzOiAlcyBhdCAweCVseCwgIiwKCQlkZXYtPm5hbWUsIHBjaV9pZF90YmxbY2hpcF9pZHhd Lm5hbWUsIGlvYWRkcik7CgoJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKCQkoKHUxNiAqKSBk ZXYtPmRldl9hZGRyKVtpXSA9CgkJICAgIGxlMTZfdG9fY3B1IChlZXByb21fcmVhZCAoaW9h ZGRyLCBpICsgRUVQUk9NX1NBX09GRlNFVCkpOwoJZm9yIChpID0gMDsgaSA8IDU7IGkrKykK CQlwcmludGsgKCIlMi4yeDoiLCBkZXYtPmRldl9hZGRyW2ldKTsKCXByaW50ayAoIiUyLjJ4 LCBJUlEgJWQuXG4iLCBkZXYtPmRldl9hZGRyW2ldLCBpcnEpOwoKCWRldi0+YmFzZV9hZGRy ID0gaW9hZGRyOwoJZGV2LT5pcnEgPSBpcnE7CgoJbnAgPSBkZXYtPnByaXY7CglucC0+Y2hp cF9pZCA9IGNoaXBfaWR4OwoJbnAtPmRydl9mbGFncyA9IHBjaV9pZF90YmxbY2hpcF9pZHhd LmRydl9mbGFnczsKCXNwaW5fbG9ja19pbml0ICgmbnAtPmxvY2spOwoKCS8qIFRoZSBjaGlw LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCglkZXYtPm9w ZW4gPSAmbmV0ZGV2X29wZW47CglkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZzdGFydF90eDsK CWRldi0+c3RvcCA9ICZuZXRkZXZfY2xvc2U7CglkZXYtPmdldF9zdGF0cyA9ICZnZXRfc3Rh dHM7CglkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKCWRldi0+ZG9f aW9jdGwgPSAmbWlpX2lvY3RsOwoJZGV2LT50eF90aW1lb3V0ID0gJnR4X3RpbWVvdXQ7Cglk ZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKCXBjaV9zZXRfZHJ2ZGF0YSAocGRl diwgZGV2KTsKCglpZiAobXR1KQoJCWRldi0+bXR1ID0gbXR1OwoKCWlmICgxKSB7CgkJaW50 IHBoeSwgcGh5X2lkeCA9IDA7CgkJbnAtPnBoeXNbMF0gPSAxOwkvKiBEZWZhdWx0IHNldHRp bmcgKi8KCQlmb3IgKHBoeSA9IDA7IHBoeSA8IDMyICYmIHBoeV9pZHggPCA0OyBwaHkrKykg ewoJCQlpbnQgbWlpX3N0YXR1cyA9IG1kaW9fcmVhZCAoZGV2LCBwaHksIDEpOwoJCQlpZiAo bWlpX3N0YXR1cyAhPSAweGZmZmYgJiYgbWlpX3N0YXR1cyAhPSAweDAwMDApIHsKCQkJCW5w LT5waHlzW3BoeV9pZHgrK10gPSBwaHk7CgkJCQlucC0+YWR2ZXJ0aXNpbmcgPSBtZGlvX3Jl YWQgKGRldiwgcGh5LCA0KTsKCQkJCWlmIChkZWJ1ZykKCQkJCQlwcmludGsgKEtFUk5fSU5G TwoJCQkJCQkiJXM6IE1JSSBQSFkgZm91bmQgYXQgYWRkcmVzcyAlZCwgc3RhdHVzICIKCQkJ CQkJIjB4JTQuNHggYWR2ZXJ0aXNpbmcgJTQuNHguXG4iLAoJCQkJCQlkZXYtPm5hbWUsIHBo eSwgbWlpX3N0YXR1cywKCQkJCQkJbnAtPmFkdmVydGlzaW5nKTsKCQkJfQoJCX0KCQlucC0+ bWlpX2NudCA9IHBoeV9pZHg7CgkJaWYgKHBoeV9pZHggPT0gMCkKCQkJaWYgKGRlYnVnKQoJ CQkJcHJpbnRrIChLRVJOX0lORk8KCQkJCQkiJXM6IE5vIE1JSSB0cmFuc2NlaXZlciBmb3Vu ZCEsIEFTSUMgc3RhdHVzICV4XG4iLAoJCQkJCWRldi0+bmFtZSwgcmVhZGwgKGlvYWRkciAr IEFTSUNDdHJsKSk7Cgl9CgkvKiBQYXJzZSBvdmVycmlkZSBjb25maWd1cmF0aW9uICovCglu cC0+YW5fZW5hYmxlID0gMTsKCWlmIChjYXJkX2lkeCA8IE1BWF9VTklUUykgewoJCWlmICht ZWRpYVtjYXJkX2lkeF0gIT0gTlVMTCkgewoJCQlucC0+YW5fZW5hYmxlID0gMDsKCQkJaWYg KHN0cmNtcCAobWVkaWFbY2FyZF9pZHhdLCAiMTAwbWJwc19mZCIpID09IDAgfHwKCQkJICAg IHN0cmNtcCAobWVkaWFbY2FyZF9pZHhdLCAiNCIpID09IDApIHsKCQkJCW5wLT5zcGVlZCA9 IDEwMDsKCQkJCW5wLT5mdWxsX2R1cGxleCA9IDE7CgkJCX0gZWxzZSBpZiAoc3RyY21wICht ZWRpYVtjYXJkX2lkeF0sICIxMDBtYnBzX2hkIikgPT0gMAoJCQkJICAgfHwgc3RyY21wICht ZWRpYVtjYXJkX2lkeF0sICIzIikgPT0gMCkgewoJCQkJbnAtPnNwZWVkID0gMTAwOwoJCQkJ bnAtPmZ1bGxfZHVwbGV4ID0gMDsKCQkJfSBlbHNlIGlmIChzdHJjbXAgKG1lZGlhW2NhcmRf aWR4XSwgIjEwbWJwc19mZCIpID09IDAgfHwKCQkJCSAgIHN0cmNtcCAobWVkaWFbY2FyZF9p ZHhdLCAiMiIpID09IDApIHsKCQkJCW5wLT5zcGVlZCA9IDEwOwoJCQkJbnAtPmZ1bGxfZHVw bGV4ID0gMTsKCQkJfSBlbHNlIGlmIChzdHJjbXAgKG1lZGlhW2NhcmRfaWR4XSwgIjEwbWJw c19oZCIpID09IDAgfHwKCQkJCSAgIHN0cmNtcCAobWVkaWFbY2FyZF9pZHhdLCAiMSIpID09 IDApIHsKCQkJCW5wLT5zcGVlZCA9IDEwOwoJCQkJbnAtPmZ1bGxfZHVwbGV4ID0gMDsKCQkJ fSBlbHNlIHsKCQkJCW5wLT5hbl9lbmFibGUgPSAxOwoJCQl9CgkJfQoJfQoKCS8qIEZpYnJl IFBIWT8gKi8KCWlmIChyZWFkbCAoaW9hZGRyICsgQVNJQ0N0cmwpICYgMHg4MCkgewoJCS8q IERlZmF1bHQgMTAwTWJwcyBGdWxsICovCgkJaWYgKG5wLT5hbl9lbmFibGUpIHsKCQkJbnAt PnNwZWVkID0gMTAwOwoJCQlucC0+ZnVsbF9kdXBsZXggPSAxOwoJCQlucC0+YW5fZW5hYmxl ID0gMDsKCQl9Cgl9CgkvKiBSZXNldCBQSFkgKi8KCW1kaW9fd3JpdGUgKGRldiwgbnAtPnBo eXNbMF0sIDAsIDB4ODAwMCk7CgltZGVsYXkgKDMwMCk7CgltZGlvX3dyaXRlKGRldiwgbnAt PnBoeXNbMF0sIDAsIDB4MTIwMCk7CgkvKiBGb3JjZSBtZWRpYSB0eXBlICovCglpZiAoIW5w LT5hbl9lbmFibGUpIHsKCQlibWNyID0gMDsKCQlibWNyIHw9IChucC0+c3BlZWQgPT0gMTAw KSA/IDB4MjAwMCA6IDA7CgkJYm1jciB8PSAobnAtPmZ1bGxfZHVwbGV4KSA/IDB4MDEwMCA6 IDA7CgkJbWRpb193cml0ZSAoZGV2LCBucC0+cGh5c1swXSwgMCwgYm1jcik7CgkJcHJpbnRr IChLRVJOX0lORk8gIk92ZXJyaWRlIHNwZWVkPSVkLCAlcyBkdXBsZXhcbiIsCgkJCW5wLT5z cGVlZCwgbnAtPmZ1bGxfZHVwbGV4ID8gIkZ1bGwiIDogIkhhbGYiKTsKCgl9CgkvKiBQZXJo YXBzIG1vdmUgdGhlIHJlc2V0IGhlcmU/ICovCgkvKiBSZXNldCB0aGUgY2hpcCB0byBlcmFz ZSBwcmV2aW91cyBtaXNjb25maWd1cmF0aW9uLiAqLwoJaWYgKGRlYnVnID4gMSkKCQlwcmlu dGsgKCJBU0lDIENvbnRyb2wgaXMgJXguXG4iLCByZWFkbCAoaW9hZGRyICsgQVNJQ0N0cmwp KTsKCXdyaXRldyAoMHgwMDdmLCBpb2FkZHIgKyBBU0lDQ3RybCArIDIpOwoJaWYgKGRlYnVn ID4gMSkKCQlwcmludGsgKCJBU0lDIENvbnRyb2wgaXMgbm93ICV4LlxuIiwgcmVhZGwgKGlv YWRkciArIEFTSUNDdHJsKSk7CgoJY2FyZF9pZHgrKzsKCXJldHVybiAwOwoKI2lmbmRlZiBV U0VfSU9fT1BTCiAgICAgIGVycl9vdXRfaW9tZW06CglyZWxlYXNlX21lbV9yZWdpb24gKHBj aV9yZXNvdXJjZV9zdGFydCAocGRldiwgMSksCgkJCSAgICBwY2lfaWRfdGJsW2NoaXBfaWR4 XS5pb19zaXplKTsKI2VuZGlmCiAgICAgIGVycl9vdXRfbmV0ZGV2OgoJdW5yZWdpc3Rlcl9u ZXRkZXYgKGRldik7CglrZnJlZSAoZGV2KTsKCXJldHVybiAtRU5PREVWOwp9CgovKiBSZWFk IHRoZSBFRVBST00gYW5kIE1JSSBNYW5hZ2VtZW50IERhdGEgSS9PIChNRElPKSBpbnRlcmZh Y2VzLiAqLwpzdGF0aWMgaW50CmVlcHJvbV9yZWFkIChsb25nIGlvYWRkciwgaW50IGxvY2F0 aW9uKQp7CglpbnQgYm9ndXNjbnQgPSAxMDAwOwkvKiBUeXBpY2FsIDE5MCB0aWNrcy4gKi8K CXdyaXRldyAoMHgwMjAwIHwgKGxvY2F0aW9uICYgMHhmZiksIGlvYWRkciArIEVFQ3RybCk7 CglkbyB7CgkJaWYgKCEocmVhZHcgKGlvYWRkciArIEVFQ3RybCkgJiAweDgwMDApKSB7CgkJ CXJldHVybiByZWFkdyAoaW9hZGRyICsgRUVEYXRhKTsKCQl9Cgl9IHdoaWxlICgtLWJvZ3Vz Y250ID4gMCk7CglyZXR1cm4gMDsKfQoKLyogIE1JSSB0cmFuc2NlaXZlciBjb250cm9sIHNl Y3Rpb24uCglSZWFkIGFuZCB3cml0ZSB0aGUgTUlJIHJlZ2lzdGVycyB1c2luZyBzb2Z0d2Fy ZS1nZW5lcmF0ZWQgc2VyaWFsCglNRElPIHByb3RvY29sLiAgU2VlIHRoZSBNSUkgc3BlY2lm aWNhdGlvbnMgb3IgRFA4Mzg0MEEgZGF0YSBzaGVldAoJZm9yIGRldGFpbHMuCgoJVGhlIG1h eGltdW0gZGF0YSBjbG9jayByYXRlIGlzIDIuNSBNaHouICBUaGUgbWluaW11bSB0aW1pbmcg aXMgdXN1YWxseQoJbWV0IGJ5IGJhY2stdG8tYmFjayAzM01oeiBQQ0kgY3ljbGVzLiAqLwoj ZGVmaW5lIG1kaW9fZGVsYXkoKSByZWFkYihtZGlvX2FkZHIpCgovKiBTZXQgaWZmIGEgTUlJ IHRyYW5zY2VpdmVyIG9uIGFueSBpbnRlcmZhY2UgcmVxdWlyZXMgbWRpbyBwcmVhbWJsZS4K ICAgVGhpcyBvbmx5IHNldCB3aXRoIG9sZGVyIHRyYW5jZWl2ZXJzLCBzbyB0aGUgZXh0cmEK ICAgY29kZSBzaXplIG9mIGEgcGVyLWludGVyZmFjZSBmbGFnIGlzIG5vdCB3b3J0aHdoaWxl LiAqLwpzdGF0aWMgY2hhciBtaWlfcHJlYW1ibGVfcmVxdWlyZWQgPSAxOwoKZW51bSBtaWlf cmVnX2JpdHMgewoJTURJT19TaGlmdENsayA9IDB4MDAwMSwgTURJT19EYXRhID0gMHgwMDAy LCBNRElPX0VuYk91dHB1dCA9IDB4MDAwNCwKfTsKI2RlZmluZSBNRElPX0VuYkluICAoMCkK I2RlZmluZSBNRElPX1dSSVRFMCAoTURJT19FbmJPdXRwdXQpCiNkZWZpbmUgTURJT19XUklU RTEgKE1ESU9fRGF0YSB8IE1ESU9fRW5iT3V0cHV0KQoKLyogR2VuZXJhdGUgdGhlIHByZWFt YmxlIHJlcXVpcmVkIGZvciBpbml0aWFsIHN5bmNocm9uaXphdGlvbiBhbmQKICAgYSBmZXcg b2xkZXIgdHJhbnNjZWl2ZXJzLiAqLwpzdGF0aWMgdm9pZAptZGlvX3N5bmMgKGxvbmcgbWRp b19hZGRyKQp7CglpbnQgYml0cyA9IDMyOwoKCS8qIEVzdGFibGlzaCBzeW5jIGJ5IHNlbmRp bmcgYXQgbGVhc3QgMzIgbG9naWMgb25lcy4gKi8KCXdoaWxlICgtLWJpdHMgPj0gMCkgewoJ CXdyaXRlYiAoTURJT19XUklURTEsIG1kaW9fYWRkcik7CgkJbWRpb19kZWxheSAoKTsKCQl3 cml0ZWIgKE1ESU9fV1JJVEUxIHwgTURJT19TaGlmdENsaywgbWRpb19hZGRyKTsKCQltZGlv X2RlbGF5ICgpOwoJfQp9CgpzdGF0aWMgaW50Cm1kaW9fcmVhZCAoc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQp7Cglsb25nIG1kaW9fYWRkciA9 IGRldi0+YmFzZV9hZGRyICsgTUlJQ3RybDsKCWludCBtaWlfY21kID0gKDB4ZjYgPDwgMTAp IHwgKHBoeV9pZCA8PCA1KSB8IGxvY2F0aW9uOwoJaW50IGksIHJldHZhbCA9IDA7CgoJaWYg KG1paV9wcmVhbWJsZV9yZXF1aXJlZCkKCQltZGlvX3N5bmMgKG1kaW9fYWRkcik7CgoJLyog U2hpZnQgdGhlIHJlYWQgY29tbWFuZCBiaXRzIG91dC4gKi8KCWZvciAoaSA9IDE1OyBpID49 IDA7IGktLSkgewoJCWludCBkYXRhdmFsID0gKG1paV9jbWQgJiAoMSA8PCBpKSkgPyBNRElP X1dSSVRFMSA6IE1ESU9fV1JJVEUwOwoKCQl3cml0ZWIgKGRhdGF2YWwsIG1kaW9fYWRkcik7 CgkJbWRpb19kZWxheSAoKTsKCQl3cml0ZWIgKGRhdGF2YWwgfCBNRElPX1NoaWZ0Q2xrLCBt ZGlvX2FkZHIpOwoJCW1kaW9fZGVsYXkgKCk7Cgl9CgkvKiBSZWFkIHRoZSB0d28gdHJhbnNp dGlvbiwgMTYgZGF0YSwgYW5kIHdpcmUtaWRsZSBiaXRzLiAqLwoJZm9yIChpID0gMTk7IGkg PiAwOyBpLS0pIHsKCQl3cml0ZWIgKE1ESU9fRW5iSW4sIG1kaW9fYWRkcik7CgkJbWRpb19k ZWxheSAoKTsKCQlyZXR2YWwgPQoJCSAgICAocmV0dmFsIDw8IDEpIHwgKChyZWFkYiAobWRp b19hZGRyKSAmIE1ESU9fRGF0YSkgPyAxIDogMCk7CgkJd3JpdGViIChNRElPX0VuYkluIHwg TURJT19TaGlmdENsaywgbWRpb19hZGRyKTsKCQltZGlvX2RlbGF5ICgpOwoJfQoJcmV0dXJu IChyZXR2YWwgPj4gMSkgJiAweGZmZmY7Cn0KCnN0YXRpYyB2b2lkCm1kaW9fd3JpdGUgKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZh bHVlKQp7Cglsb25nIG1kaW9fYWRkciA9IGRldi0+YmFzZV9hZGRyICsgTUlJQ3RybDsKCWlu dCBtaWlfY21kID0KCSAgICAoMHg1MDAyIDw8IDE2KSB8IChwaHlfaWQgPDwgMjMpIHwgKGxv Y2F0aW9uIDw8IDE4KSB8IHZhbHVlOwoJaW50IGk7CgoJaWYgKG1paV9wcmVhbWJsZV9yZXF1 aXJlZCkKCQltZGlvX3N5bmMgKG1kaW9fYWRkcik7CgoJLyogU2hpZnQgdGhlIGNvbW1hbmQg Yml0cyBvdXQuICovCglmb3IgKGkgPSAzMTsgaSA+PSAwOyBpLS0pIHsKCQlpbnQgZGF0YXZh bCA9IChtaWlfY21kICYgKDEgPDwgaSkpID8gTURJT19XUklURTEgOiBNRElPX1dSSVRFMDsK CgkJd3JpdGViIChkYXRhdmFsLCBtZGlvX2FkZHIpOwoJCW1kaW9fZGVsYXkgKCk7CgkJd3Jp dGViIChkYXRhdmFsIHwgTURJT19TaGlmdENsaywgbWRpb19hZGRyKTsKCQltZGlvX2RlbGF5 ICgpOwoJfQoJLyogQ2xlYXIgb3V0IGV4dHJhIGJpdHMuICovCglmb3IgKGkgPSAyOyBpID4g MDsgaS0tKSB7CgkJd3JpdGViIChNRElPX0VuYkluLCBtZGlvX2FkZHIpOwoJCW1kaW9fZGVs YXkgKCk7CgkJd3JpdGViIChNRElPX0VuYkluIHwgTURJT19TaGlmdENsaywgbWRpb19hZGRy KTsKCQltZGlvX2RlbGF5ICgpOwoJfQoJcmV0dXJuOwp9CgpzdGF0aWMgaW50Cm5ldGRldl9v cGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CglzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUg Km5wID0gKHN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Cglsb25nIGlvYWRk ciA9IGRldi0+YmFzZV9hZGRyOwoJaW50IGk7CgoJLyogRG8gd2UgbmVlZCB0byByZXNldCB0 aGUgY2hpcD8/PyAqLwoJaSA9IHJlcXVlc3RfaXJxIChkZXYtPmlycSwgJmludHJfaGFuZGxl ciwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKCWlmIChpKQoJCXJldHVybiBpOwoKCWlm IChkZWJ1ZyA+IDEpCgkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogbmV0ZGV2X29wZW4oKSBp cnEgJWQuXG4iLAoJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKCglpbml0X3JpbmcgKGRldik7 CgoJd3JpdGVsICh2aXJ0X3RvX2J1cyAobnAtPnJ4X3JpbmcpLCBpb2FkZHIgKyBSeExpc3RQ dHIpOwoJLyogVGhlIFR4IGxpc3QgcG9pbnRlciBpcyB3cml0dGVuIGFzIHBhY2tldHMgYXJl IHF1ZXVlZC4gKi8KCglmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQoJCXdyaXRlYiAoZGV2LT5k ZXZfYWRkcltpXSwgaW9hZGRyICsgU3RhdGlvbkFkZHIgKyBpKTsKCgkvKiBJbml0aWFsaXpl IG90aGVyIHJlZ2lzdGVycy4gKi8KCS8qIENvbmZpZ3VyZSB0aGUgUENJIGJ1cyBidXJzdHMg YW5kIEZJRk8gdGhyZXNob2xkcy4gKi8KCglpZiAoZGV2LT5pZl9wb3J0ID09IDApCgkJZGV2 LT5pZl9wb3J0ID0gbnAtPmRlZmF1bHRfcG9ydDsKCglucC0+bWNhc3Rsb2NrID0gKHNwaW5s b2NrX3QpIFNQSU5fTE9DS19VTkxPQ0tFRDsKCglzZXRfcnhfbW9kZSAoZGV2KTsKCXdyaXRl dyAoMCwgaW9hZGRyICsgRG93bkNvdW50ZXIpOwoJLyogU2V0IHRoZSBjaGlwIHRvIHBvbGwg ZXZlcnkgTiozMjBuc2VjLiAqLwoJd3JpdGViICgxMDAsIGlvYWRkciArIFJ4RGVzY1BvbGwp OwoJd3JpdGViICgxMjcsIGlvYWRkciArIFR4RGVzY1BvbGwpOwoJbmV0aWZfc3RhcnRfcXVl dWUgKGRldik7CgoJLyogRW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJy dXB0IG1hc2suICovCgl3cml0ZXcgKEludHJSeERvbmUgfCBJbnRyUnhETUFEb25lIHwgSW50 clBDSUVyciB8IEludHJEcnZScXN0IHwKCQlJbnRyVHhEb25lIHwgU3RhdHNNYXggfCBMaW5r Q2hhbmdlLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKCgl3cml0ZXcgKFN0YXRzRW5hYmxlIHwg UnhFbmFibGUgfCBUeEVuYWJsZSwgaW9hZGRyICsgTUFDQ3RybDEpOwoKCWlmIChkZWJ1ZyA+ IDIpCgkJcHJpbnRrIChLRVJOX0RFQlVHCgkJCSIlczogRG9uZSBuZXRkZXZfb3BlbigpLCBz dGF0dXM6IFJ4ICV4IFR4ICV4ICIKCQkJIk1BQyBDb250cm9sICV4LCAlNC40eCAlNC40eC5c biIsIGRldi0+bmFtZSwKCQkJcmVhZGwgKGlvYWRkciArIFJ4U3RhdHVzKSwgcmVhZGIgKGlv YWRkciArIFR4U3RhdHVzKSwKCQkJcmVhZGwgKGlvYWRkciArIE1BQ0N0cmwwKSwgcmVhZHcg KGlvYWRkciArIE1BQ0N0cmwxKSwKCQkJcmVhZHcgKGlvYWRkciArIE1BQ0N0cmwwKSk7CgoJ LyogU2V0IHRoZSB0aW1lciB0byBjaGVjayBmb3IgbGluayBiZWF0LiAqLwoJaW5pdF90aW1l ciAoJm5wLT50aW1lcik7CglucC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAzICogSFo7 CglucC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CglucC0+dGltZXIuZnVu Y3Rpb24gPSAmbmV0ZGV2X3RpbWVyOwkvKiB0aW1lciBoYW5kbGVyICovCglhZGRfdGltZXIg KCZucC0+dGltZXIpOwoKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZApjaGVja19kdXBsZXgg KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAg PSAoc3RydWN0IG5ldGRldl9wcml2YXRlICopIGRldi0+cHJpdjsKCWxvbmcgaW9hZGRyID0g ZGV2LT5iYXNlX2FkZHI7CglpbnQgbWlpX3JlZzUgPSBtZGlvX3JlYWQgKGRldiwgbnAtPnBo eXNbMF0sIDUpOwoJaW50IG5lZ290aWF0ZWQgPSBtaWlfcmVnNSAmIG5wLT5hZHZlcnRpc2lu ZzsKCWludCBkdXBsZXg7CgoJLyogRm9yY2UgbWVkaWEgKi8KCWlmICghbnAtPmFuX2VuYWJs ZSB8fCBtaWlfcmVnNSA9PSAweGZmZmYpIHsKCQlpZiAobnAtPmZ1bGxfZHVwbGV4KQoJCQl3 cml0ZXcgKHJlYWR3IChpb2FkZHIgKyBNQUNDdHJsMCkgfCBFbmJGdWxsRHVwbGV4LAoJCQkJ aW9hZGRyICsgTUFDQ3RybDApOwoJCXJldHVybjsKCX0KCgkvKiBBdXRvbmVnb3RpYXRpb24g Ki8KCWR1cGxleCA9IChuZWdvdGlhdGVkICYgMHgwMTAwKSB8fCAobmVnb3RpYXRlZCAmIDB4 MDFDMCkgPT0gMHgwMDQwOwoJaWYgKG5wLT5mdWxsX2R1cGxleCAhPSBkdXBsZXgpIHsKCQlu cC0+ZnVsbF9kdXBsZXggPSBkdXBsZXg7CgkJaWYgKGRlYnVnKQoJCQlwcmludGsgKEtFUk5f SU5GTwoJCQkJIiVzOiBTZXR0aW5nICVzLWR1cGxleCBiYXNlZCBvbiBNSUkgIyVkICIKCQkJ CSJuZWdvdGlhdGVkIGNhcGFiaWxpdHkgJTQuNHguXG4iLCBkZXYtPm5hbWUsCgkJCQlkdXBs ZXggPyAiZnVsbCIgOiAiaGFsZiIsIG5wLT5waHlzWzBdLAoJCQkJbmVnb3RpYXRlZCk7CgkJ d3JpdGV3IChkdXBsZXggPyAweDIwIDogMCwgaW9hZGRyICsgTUFDQ3RybDApOwoJfQp9Cgpz dGF0aWMgdm9pZApuZXRkZXZfdGltZXIgKHVuc2lnbmVkIGxvbmcgZGF0YSkKewoJc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwoJc3RydWN0 IG5ldGRldl9wcml2YXRlICpucCA9IChzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKikgZGV2LT5w cml2OwoJbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKCWludCBuZXh0X3RpY2sgPSAx MCAqIEhaOwoKCWlmIChkZWJ1ZyA+IDMpIHsKCQlwcmludGsgKEtFUk5fREVCVUcKCQkJIiVz OiBNZWRpYSBzZWxlY3Rpb24gdGltZXIgdGljaywgaW50ciBzdGF0dXMgJTQuNHgsICIKCQkJ IlR4ICV4IFJ4ICV4LlxuIiwgZGV2LT5uYW1lLAoJCQlyZWFkdyAoaW9hZGRyICsgSW50ckVu YWJsZSksIHJlYWRiIChpb2FkZHIgKyBUeFN0YXR1cyksCgkJCXJlYWRsIChpb2FkZHIgKyBS eFN0YXR1cykpOwoJfQoJY2hlY2tfZHVwbGV4IChkZXYpOwoJbnAtPnRpbWVyLmV4cGlyZXMg PSBqaWZmaWVzICsgbmV4dF90aWNrOwoJYWRkX3RpbWVyICgmbnAtPnRpbWVyKTsKfQoKc3Rh dGljIHZvaWQKdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJc3RydWN0 IG5ldGRldl9wcml2YXRlICpucCA9IChzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKikgZGV2LT5w cml2OwoJbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKCglwcmludGsgKEtFUk5fV0FS TklORyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICUyLjJ4LCIKCQkiIHJlc2V0 dGluZy4uLlxuIiwgZGV2LT5uYW1lLCByZWFkYiAoaW9hZGRyICsgVHhTdGF0dXMpKTsKCiNp Zm5kZWYgX19hbHBoYV9fCgl7CgkJaW50IGk7CgkJcHJpbnRrIChLRVJOX0RFQlVHICIgIFJ4 IHJpbmcgJTguOHg6ICIsIChpbnQpIG5wLT5yeF9yaW5nKTsKCQlmb3IgKGkgPSAwOyBpIDwg UlhfUklOR19TSVpFOyBpKyspCgkJCXByaW50ayAoIiAlOC44eCIsICh1bnNpZ25lZCBpbnQp IG5wLT5yeF9yaW5nW2ldLnN0YXR1cyk7CgkJcHJpbnRrICgiXG4iIEtFUk5fREVCVUcgIiAg VHggcmluZyAlOC44eDogIiwgKGludCkgbnAtPnR4X3JpbmcpOwoJCWZvciAoaSA9IDA7IGkg PCBUWF9SSU5HX1NJWkU7IGkrKykKCQkJcHJpbnRrICgiICU0LjR4IiwgbnAtPnR4X3Jpbmdb aV0uc3RhdHVzKTsKCQlwcmludGsgKCJcbiIpOwoJfQojZW5kaWYKCgkvKiBQZXJoYXBzIHdl IHNob3VsZCByZWluaXRpYWxpemUgdGhlIGhhcmR3YXJlIGhlcmUuICovCglkZXYtPmlmX3Bv cnQgPSAwOwoJLyogU3RvcCBhbmQgcmVzdGFydCB0aGUgY2hpcCdzIFR4IHByb2Nlc3NlcyAu ICovCgoJLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUgdHJhbnNtaXQgZGVtYW5kLiAqLwoJd3Jp dGV3IChJbnRyUnhEb25lIHwgSW50clJ4RE1BRG9uZSB8IEludHJQQ0lFcnIgfCBJbnRyRHJ2 UnFzdCB8CgkJSW50clR4RG9uZSB8IFN0YXRzTWF4IHwgTGlua0NoYW5nZSwgaW9hZGRyICsg SW50ckVuYWJsZSk7CglkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKCW5wLT5zdGF0cy50 eF9lcnJvcnMrKzsKCW5ldGlmX3dha2VfcXVldWUgKGRldik7CglyZXR1cm47Cn0KCi8qIElu aXRpYWxpemUgdGhlIFJ4IGFuZCBUeCByaW5ncywgYWxvbmcgd2l0aCB2YXJpb3VzICdkZXYn IGJpdHMuICovCnN0YXRpYyB2b2lkCmluaXRfcmluZyAoc3RydWN0IG5ldF9kZXZpY2UgKmRl dikKewoJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IChzdHJ1Y3QgbmV0ZGV2X3ByaXZh dGUgKikgZGV2LT5wcml2OwoJaW50IGk7CgoJbnAtPnR4X2Z1bGwgPSAwOwoJbnAtPmN1cl9y eCA9IG5wLT5jdXJfdHggPSAwOwoJbnAtPmRpcnR5X3J4ID0gbnAtPmRpcnR5X3R4ID0gMDsK CglucC0+cnhfYnVmX3N6ID0gKGRldi0+bXR1IDw9IDE1MDAgPyBQS1RfQlVGX1NaIDogZGV2 LT5tdHUgKyAzMik7CglucC0+cnhfaGVhZF9kZXNjID0gJm5wLT5yeF9yaW5nWzBdOwoKCS8q IEluaXRpYWxpemUgYWxsIFJ4IGRlc2NyaXB0b3JzLiAqLwoJZm9yIChpID0gMDsgaSA8IFJY X1JJTkdfU0laRTsgaSsrKSB7CgkJbnAtPnJ4X3JpbmdbaV0ubmV4dF9kZXNjID0KCQkgICAg dmlydF90b19sZTMyZGVzYyAoJm5wLT5yeF9yaW5nW2kgKyAxXSk7CgkJbnAtPnJ4X3Jpbmdb aV0uc3RhdHVzID0gMDsKCQlucC0+cnhfcmluZ1tpXS5mcmFnWzBdLmxlbmd0aCA9IDA7CgkJ bnAtPnJ4X3NrYnVmZltpXSA9IDA7Cgl9CgkvKiBXcmFwIHRoZSByaW5nLiAqLwoJbnAtPnJ4 X3JpbmdbaSAtIDFdLm5leHRfZGVzYyA9IHZpcnRfdG9fbGUzMmRlc2MgKCZucC0+cnhfcmlu Z1swXSk7CgoJLyogRmlsbCBpbiB0aGUgUnggYnVmZmVycy4gIEhhbmRsZSBhbGxvY2F0aW9u IGZhaWx1cmUgZ3JhY2VmdWxseS4gKi8KCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7 IGkrKykgewoJCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiIChucC0+cnhf YnVmX3N6KTsKCQlucC0+cnhfc2tidWZmW2ldID0gc2tiOwoJCWlmIChza2IgPT0gTlVMTCkK CQkJYnJlYWs7CgkJc2tiLT5kZXYgPSBkZXY7CS8qIE1hcmsgYXMgYmVpbmcgdXNlZCBieSB0 aGlzIGRldmljZS4gKi8KCQlza2JfcmVzZXJ2ZSAoc2tiLCAyKTsJLyogMTYgYnl0ZSBhbGln biB0aGUgSVAgaGVhZGVyLiAqLwoJCW5wLT5yeF9yaW5nW2ldLmZyYWdbMF0uYWRkciA9IHZp cnRfdG9fbGUzMmRlc2MgKHNrYi0+dGFpbCk7CgkJbnAtPnJ4X3JpbmdbaV0uZnJhZ1swXS5s ZW5ndGggPQoJCSAgICBjcHVfdG9fbGUzMiAobnAtPnJ4X2J1Zl9zeiB8IExhc3RGcmFnKTsK CX0KCW5wLT5kaXJ0eV9yeCA9ICh1bnNpZ25lZCBpbnQpIChpIC0gUlhfUklOR19TSVpFKTsK Cglmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKCQlucC0+dHhfc2tidWZm W2ldID0gMDsKCQlucC0+dHhfcmluZ1tpXS5zdGF0dXMgPSAwOwoJfQoJcmV0dXJuOwp9Cgpz dGF0aWMgaW50CnN0YXJ0X3R4IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQp7CglzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gKHN0cnVjdCBuZXRk ZXZfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CglzdHJ1Y3QgbmV0ZGV2X2Rlc2MgKnR4ZGVzYzsK CXVuc2lnbmVkIGVudHJ5OwoKCS8qIE5vdGU6IE9yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJl LCBzZXQgdGhlIGZpZWxkIHdpdGggdGhlCgkgICAib3duZXJzaGlwIiBiaXQgbGFzdCwgYW5k IG9ubHkgdGhlbiBpbmNyZW1lbnQgY3VyX3R4LiAqLwoKCS8qIENhbGN1bGF0ZSB0aGUgbmV4 dCBUeCBkZXNjcmlwdG9yIGVudHJ5LiAqLwoJZW50cnkgPSBucC0+Y3VyX3R4ICUgVFhfUklO R19TSVpFOwoJbnAtPnR4X3NrYnVmZltlbnRyeV0gPSBza2I7Cgl0eGRlc2MgPSAmbnAtPnR4 X3JpbmdbZW50cnldOwoKCXR4ZGVzYy0+bmV4dF9kZXNjID0gMDsKCS8qIE5vdGU6IGRpc2Fi bGUgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGhlcmUgYmVmb3JlIHJlbGVhc2luZy4gKi8K CXR4ZGVzYy0+c3RhdHVzID0KCSAgICBjcHVfdG9fbGUzMiAoKGVudHJ5IDw8IDIpIHwgRGVz Y0ludHJPbkRNQURvbmUgfCBEZXNjSW50ck9uVHggfAoJCQkgMHgwMSk7Cgl0eGRlc2MtPmZy YWdbMF0uYWRkciA9IHZpcnRfdG9fbGUzMmRlc2MgKHNrYi0+ZGF0YSk7Cgl0eGRlc2MtPmZy YWdbMF0ubGVuZ3RoID0gY3B1X3RvX2xlMzIgKHNrYi0+bGVuIHwgTGFzdEZyYWcpOwoJaWYg KG5wLT5sYXN0X3R4KQoJCW5wLT5sYXN0X3R4LT5uZXh0X2Rlc2MgPSB2aXJ0X3RvX2xlMzJk ZXNjICh0eGRlc2MpOwoJbnAtPmxhc3RfdHggPSB0eGRlc2M7CglucC0+Y3VyX3R4Kys7CgoJ LyogT24gc29tZSBhcmNoaXRlY3R1cmVzOiBleHBsaWNpdGx5IGZsdXNoIGNhY2hlIGxpbmVz IGhlcmUuICovCgoJaWYgKG5wLT5jdXJfdHggLSBucC0+ZGlydHlfdHggPCBUWF9RVUVVRV9M RU4gLSAxKSB7CgkJLyogZG8gbm90aGluZyAqLwoJfSBlbHNlIHsKCQlucC0+dHhfZnVsbCA9 IDE7CgkJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKCX0KCS8qIFNpZGUgZWZmZWN0OiBUaGUg cmVhZCB3YWtlcyB0aGUgcG90ZW50aWFsbHktaWRsZSB0cmFuc21pdCBjaGFubmVsLiAqLwoJ aWYgKHJlYWRsIChkZXYtPmJhc2VfYWRkciArIFR4TGlzdFB0cikgPT0gMCkKCQl3cml0ZWwg KHZpcnRfdG9fYnVzICgmbnAtPnR4X3JpbmdbZW50cnldKSwKCQkJZGV2LT5iYXNlX2FkZHIg KyBUeExpc3RQdHIpOwoKCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwoKCWlmIChkZWJ1 ZyA+IDQpIHsKCQlwcmludGsgKEtFUk5fREVCVUcKCQkJIiVzOiBUcmFuc21pdCBmcmFtZSAj JWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAoJCQlkZXYtPm5hbWUsIG5wLT5jdXJfdHgsIGVu dHJ5KTsKCX0KCXJldHVybiAwOwp9CgovKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBh bGwgb2YgdGhlIFJ4IHRocmVhZCB3b3JrIGFuZCBjbGVhbnMgdXAKICAgYWZ0ZXIgdGhlIFR4 IHRocmVhZC4gKi8Kc3RhdGljIHZvaWQKaW50cl9oYW5kbGVyIChpbnQgaXJxLCB2b2lkICpk ZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZ3MpCnsKCXN0cnVjdCBuZXRfZGV2aWNl ICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2luc3RhbmNlOwoJc3RydWN0IG5l dGRldl9wcml2YXRlICpucDsKCWxvbmcgaW9hZGRyOwoJaW50IGJvZ3VzY250ID0gbWF4X2lu dGVycnVwdF93b3JrOwoKCWlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwoJbnAgPSAoc3RydWN0 IG5ldGRldl9wcml2YXRlICopIGRldi0+cHJpdjsKCXNwaW5fbG9jayAoJm5wLT5sb2NrKTsK CglkbyB7CgkJaW50IGludHJfc3RhdHVzID0gcmVhZHcgKGlvYWRkciArIEludHJTdGF0dXMp OwoJCXdyaXRldyAoaW50cl9zdGF0dXMgJiAoSW50clJ4RG9uZSB8IEludHJSeERNQURvbmUg fCBJbnRyUENJRXJyIHwKCQkJCSAgICAgICBJbnRyRHJ2UnFzdCB8IEludHJUeERvbmUgfCBJ bnRyVHhETUFEb25lCgkJCQkgICAgICAgfCBTdGF0c01heCB8IExpbmtDaGFuZ2UpLAoJCQlp b2FkZHIgKyBJbnRyU3RhdHVzKTsKCgkJaWYgKGRlYnVnID4gNCkKCQkJcHJpbnRrIChLRVJO X0RFQlVHICIlczogSW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAoJCQkJZGV2LT5uYW1l LCBpbnRyX3N0YXR1cyk7CgoJCWlmIChpbnRyX3N0YXR1cyA9PSAwKQoJCQlicmVhazsKCgkJ aWYgKGludHJfc3RhdHVzICYgKEludHJSeERvbmUgfCBJbnRyUnhETUFEb25lKSkKCQkJbmV0 ZGV2X3J4IChkZXYpOwoKCQlpZiAoaW50cl9zdGF0dXMgJiBJbnRyVHhEb25lKSB7CgkJCWlu dCBib2d1c2NudCA9IDMyOwoJCQlpbnQgdHhfc3RhdHVzID0gcmVhZHcgKGlvYWRkciArIFR4 U3RhdHVzKTsKCQkJd2hpbGUgKHR4X3N0YXR1cyAmIDB4ODApIHsKCQkJCWlmIChkZWJ1ZyA+ IDQpCgkJCQkJcHJpbnRrCgkJCQkJICAgICgiJXM6IFRyYW5zbWl0IHN0YXR1cyBpcyAlMi4y eC5cbiIsCgkJCQkJICAgICBkZXYtPm5hbWUsIHR4X3N0YXR1cyk7CgkJCQlpZiAodHhfc3Rh dHVzICYgMHgxZSkgewoJCQkJCW5wLT5zdGF0cy50eF9lcnJvcnMrKzsKCQkJCQlpZiAodHhf c3RhdHVzICYgMHgxMCkKCQkJCQkJbnAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiNpZmRl ZiBFVEhFUl9TVEFUUwoJCQkJCWlmICh0eF9zdGF0dXMgJiAweDA4KQoJCQkJCQlucC0+c3Rh dHMuY29sbGlzaW9uczE2Kys7CiNlbHNlCgkJCQkJaWYgKHR4X3N0YXR1cyAmIDB4MDgpCgkJ CQkJCW5wLT5zdGF0cy5jb2xsaXNpb25zKys7CiNlbmRpZgoJCQkJCWlmICh0eF9zdGF0dXMg JiAweDA0KQoJCQkJCQlucC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKCQkJCQlpZiAodHhf c3RhdHVzICYgMHgwMikKCQkJCQkJbnAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKCQkJ CQkvKiBUaGlzIHJlc2V0IGhhcyBub3QgYmVlbiB2ZXJpZmllZCEuICovCgkJCQkJaWYgKHR4 X3N0YXR1cyAmIDB4MTApIHsJLyogUmVzZXQgdGhlIFR4LiAqLwoJCQkJCQl3cml0ZXcgKDB4 MDAxYywKCQkJCQkJCWlvYWRkciArIEFTSUNDdHJsICsgMik7CiNpZiAwCQkJCS8qIERvIHdl IG5lZWQgdG8gcmVzZXQgdGhlIFR4IHBvaW50ZXIgaGVyZT8gKi8KCQkJCQkJd3JpdGVsICh2 aXJ0X3RvX2J1cwoJCQkJCQkJKCZucC0+CgkJCQkJCQkgdHhfcmluZ1tucC0+ZGlydHlfdHhd KSwKCQkJCQkJCWRldi0+YmFzZV9hZGRyICsKCQkJCQkJCVR4TGlzdFB0cik7CiNlbmRpZgoJ CQkJCX0KCQkJCQlpZiAodHhfc3RhdHVzICYgMHgxZSkJLyogUmVzdGFydCB0aGUgVHguICov CgkJCQkJCXdyaXRldyAoVHhFbmFibGUsCgkJCQkJCQlpb2FkZHIgKyBNQUNDdHJsMSk7CgkJ CQl9CgkJCQkvKiBZdXAsIHRoaXMgaXMgYSBkb2N1bWVudGF0aW9uIGJ1Zy4gIEl0IGNvc3Qg bWUgKmhvdXJzKi4gKi8KCQkJCXdyaXRldyAoMCwgaW9hZGRyICsgVHhTdGF0dXMpOwoJCQkJ dHhfc3RhdHVzID0gcmVhZHcgKGlvYWRkciArIFR4U3RhdHVzKTsKCQkJCWlmICgtLWJvZ3Vz Y250IDwgMCkKCQkJCQlicmVhazsKCQkJfQoJCX0KCQlmb3IgKDsgbnAtPmN1cl90eCAtIG5w LT5kaXJ0eV90eCA+IDA7IG5wLT5kaXJ0eV90eCsrKSB7CgkJCWludCBlbnRyeSA9IG5wLT5k aXJ0eV90eCAlIFRYX1JJTkdfU0laRTsKCQkJaWYgKCEobnAtPnR4X3JpbmdbZW50cnldLnN0 YXR1cyAmIDB4MDAwMTAwMDApKQoJCQkJYnJlYWs7CgkJCS8qIEZyZWUgdGhlIG9yaWdpbmFs IHNrYi4gKi8KCQkJZGV2X2tmcmVlX3NrYl9pcnEgKG5wLT50eF9za2J1ZmZbZW50cnldKTsK CQkJbnAtPnR4X3NrYnVmZltlbnRyeV0gPSAwOwoJCX0KCQlpZiAobnAtPnR4X2Z1bGwgJiYg bnAtPmN1cl90eCAtIG5wLT5kaXJ0eV90eCA8IFRYX1FVRVVFX0xFTiAtIDQpIHsKCQkJLyog VGhlIHJpbmcgaXMgbm8gbG9uZ2VyIGZ1bGwsIGNsZWFyIHRidXN5LiAqLwoJCQlucC0+dHhf ZnVsbCA9IDA7CgkJCW5ldGlmX3dha2VfcXVldWUgKGRldik7CgkJfQoKCQkvKiBBYm5vcm1h bCBlcnJvciBzdW1tYXJ5L3VuY29tbW9uIGV2ZW50cyBoYW5kbGVycy4gKi8KCQlpZiAoaW50 cl9zdGF0dXMgJgoJCSAgICAoSW50ckRydlJxc3QgfCBJbnRyUENJRXJyIHwgTGlua0NoYW5n ZSB8IFN0YXRzTWF4KSkKCQkJbmV0ZGV2X2Vycm9yIChkZXYsIGludHJfc3RhdHVzKTsKCgkJ aWYgKC0tYm9ndXNjbnQgPCAwKSB7CgkJCWdldF9zdGF0cyAoZGV2KTsKCQkJaWYgKGRlYnVn KQoJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKCQkJCQkiJXM6IFRvbyBtdWNoIHdvcmsgYXQg aW50ZXJydXB0LCAiCgkJCQkJInN0YXR1cz0weCU0LjR4IC8gMHglNC40eC5cbiIsCgkJCQkJ ZGV2LT5uYW1lLCBpbnRyX3N0YXR1cywKCQkJCQlyZWFkdyAoaW9hZGRyICsgSW50ckNsZWFy KSk7CgkJCS8qIFJlLWVuYWJsZSB1cyBpbiAzLjJtc2VjLiAqLwoJCQl3cml0ZXcgKDEwMDAs IGlvYWRkciArIERvd25Db3VudGVyKTsKCQkJd3JpdGV3IChJbnRyRHJ2UnFzdCwgaW9hZGRy ICsgSW50ckVuYWJsZSk7CgkJCWJyZWFrOwoJCX0KCX0gd2hpbGUgKDEpOwoKCWlmIChkZWJ1 ZyA+IDMpCgkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQsIHN0 YXR1cz0lIzQuNHguXG4iLAoJCQlkZXYtPm5hbWUsIHJlYWR3IChpb2FkZHIgKyBJbnRyU3Rh dHVzKSk7CgoJc3Bpbl91bmxvY2sgKCZucC0+bG9jayk7Cn0KCi8qIFRoaXMgcm91dGluZSBp cyBsb2dpY2FsbHkgcGFydCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGJ1dCBzZXBhcmF0 ZWQKICAgZm9yIGNsYXJpdHkgYW5kIGJldHRlciByZWdpc3RlciBhbGxvY2F0aW9uLiAqLwpz dGF0aWMgaW50Cm5ldGRldl9yeCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJc3RydWN0 IG5ldGRldl9wcml2YXRlICpucCA9IChzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKikgZGV2LT5w cml2OwoJaW50IGVudHJ5ID0gbnAtPmN1cl9yeCAlIFJYX1JJTkdfU0laRTsKCWludCBib2d1 c2NudCA9IG5wLT5kaXJ0eV9yeCArIFJYX1JJTkdfU0laRSAtIG5wLT5jdXJfcng7CgoJaWYg KGRlYnVnID4gNCkgewoJCXByaW50ayAoS0VSTl9ERUJVRyAiIEluIG5ldGRldl9yeCgpLCBl bnRyeSAlZCBzdGF0dXMgJTQuNHguXG4iLAoJCQllbnRyeSwgbnAtPnJ4X3JpbmdbZW50cnld LnN0YXR1cyk7Cgl9CgoJLyogSWYgRU9QIGlzIHNldCBvbiB0aGUgbmV4dCBlbnRyeSwgaXQn cyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCgl3aGlsZSAobnAtPnJ4X2hlYWRfZGVz Yy0+c3RhdHVzICYgRGVzY093bikgewoJCXN0cnVjdCBuZXRkZXZfZGVzYyAqZGVzYyA9IG5w LT5yeF9oZWFkX2Rlc2M7CgkJdTMyIGZyYW1lX3N0YXR1cyA9IGxlMzJfdG9fY3B1IChkZXNj LT5zdGF0dXMpOwoJCWludCBwa3RfbGVuID0gZnJhbWVfc3RhdHVzICYgMHgxZmZmOwkvKiBD aGlwIG9taXRzIHRoZSBDUkMuICovCgoJCWlmIChkZWJ1ZyA+IDQpCgkJCXByaW50ayAoS0VS Tl9ERUJVRyAiICBuZXRkZXZfcngoKSBzdGF0dXMgd2FzICU4Ljh4LlxuIiwKCQkJCWZyYW1l X3N0YXR1cyk7CgkJaWYgKC0tYm9ndXNjbnQgPCAwKQoJCQlicmVhazsKCQlpZiAoZnJhbWVf c3RhdHVzICYgMHgwMDFmNDAwMCkgewoJCQkvKiBUaGVyZSB3YXMgYSBlcnJvci4gKi8KCQkJ aWYgKGRlYnVnID4gMikKCQkJCXByaW50ayAoS0VSTl9ERUJVRwoJCQkJCSIgIG5ldGRldl9y eCgpIFJ4IGVycm9yIHdhcyAlOC44eC5cbiIsCgkJCQkJZnJhbWVfc3RhdHVzKTsKCQkJbnAt PnN0YXRzLnJ4X2Vycm9ycysrOwoJCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDEwMDAwMCkK CQkJCW5wLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CgkJCWlmIChmcmFtZV9zdGF0dXMg JiAweDAwMDEwMDAwKQoJCQkJbnAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CgkJCWlmIChm cmFtZV9zdGF0dXMgJiAweDAwMDYwMDAwKQoJCQkJbnAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9y cysrOwoJCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDA4MDAwMCkKCQkJCW5wLT5zdGF0cy5y eF9jcmNfZXJyb3JzKys7CgkJCWlmIChmcmFtZV9zdGF0dXMgJiAweDAwMTAwMDAwKSB7CgkJ CQlpZiAoZGVidWcpCgkJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKCQkJCQkJIiVzOiBPdmVy c2l6ZWQgRXRoZXJuZXQgZnJhbWUsIgoJCQkJCQkiIHN0YXR1cyAlOC44eC5cbiIsIGRldi0+ bmFtZSwKCQkJCQkJZnJhbWVfc3RhdHVzKTsKCQkJfQoJCX0gZWxzZSB7CgkJCXN0cnVjdCBz a19idWZmICpza2I7CgojaWZuZGVmIGZpbmFsX3ZlcnNpb24KCQkJaWYgKGRlYnVnID4gNCkK CQkJCXByaW50ayAoS0VSTl9ERUJVRwoJCQkJCSIgIG5ldGRldl9yeCgpIG5vcm1hbCBSeCBw a3QgbGVuZ3RoICVkIgoJCQkJCSIsIGJvZ3VzX2NudCAlZC5cbiIsIHBrdF9sZW4sIGJvZ3Vz Y250KTsKI2VuZGlmCgkJCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9uZyBlbm91Z2gg dG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwoJCQkgICB0byBhIG1pbmltYWxseS1zaXplZCBz a2J1ZmYuICovCgkJCWlmIChwa3RfbGVuIDwgcnhfY29weWJyZWFrCgkJCSAgICAmJiAoc2ti ID0gZGV2X2FsbG9jX3NrYiAocGt0X2xlbiArIDIpKSAhPSBOVUxMKSB7CgkJCQlza2ItPmRl diA9IGRldjsKCQkJCXNrYl9yZXNlcnZlIChza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduIHRo ZSBJUCBoZWFkZXIgKi8KCQkJCWV0aF9jb3B5X2FuZF9zdW0gKHNrYiwKCQkJCQkJICBucC0+ cnhfc2tidWZmW2VudHJ5XS0+dGFpbCwKCQkJCQkJICBwa3RfbGVuLCAwKTsKCQkJCXNrYl9w dXQgKHNrYiwgcGt0X2xlbik7CgkJCX0gZWxzZSB7CgkJCQlza2JfcHV0IChza2IgPSBucC0+ cnhfc2tidWZmW2VudHJ5XSwgcGt0X2xlbik7CgkJCQlucC0+cnhfc2tidWZmW2VudHJ5XSA9 IE5VTEw7CgkJCX0KCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zIChza2IsIGRl dik7CgkJCS8qIE5vdGU6IGNoZWNrc3VtIC0+IHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1f VU5ORUNFU1NBUlk7ICovCgkJCW5ldGlmX3J4IChza2IpOwoJCQlkZXYtPmxhc3RfcnggPSBq aWZmaWVzOwoJCX0KCQllbnRyeSA9ICgrK25wLT5jdXJfcngpICUgUlhfUklOR19TSVpFOwoJ CW5wLT5yeF9oZWFkX2Rlc2MgPSAmbnAtPnJ4X3JpbmdbZW50cnldOwoJfQoKCS8qIFJlZmls bCB0aGUgUnggcmluZyBidWZmZXJzLiAqLwoJZm9yICg7IG5wLT5jdXJfcnggLSBucC0+ZGly dHlfcnggPiAwOyBucC0+ZGlydHlfcngrKykgewoJCXN0cnVjdCBza19idWZmICpza2I7CgkJ ZW50cnkgPSBucC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkU7CgkJaWYgKG5wLT5yeF9za2J1 ZmZbZW50cnldID09IE5VTEwpIHsKCQkJc2tiID0gZGV2X2FsbG9jX3NrYiAobnAtPnJ4X2J1 Zl9zeik7CgkJCW5wLT5yeF9za2J1ZmZbZW50cnldID0gc2tiOwoJCQlpZiAoc2tiID09IE5V TEwpCgkJCQlicmVhazsJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZC4gKi8KCQkJc2tiLT5k ZXYgPSBkZXY7CS8qIE1hcmsgYXMgYmVpbmcgdXNlZCBieSB0aGlzIGRldmljZS4gKi8KCQkJ c2tiX3Jlc2VydmUgKHNrYiwgMik7CS8qIEFsaWduIElQIG9uIDE2IGJ5dGUgYm91bmRhcmll cyAqLwoJCQlucC0+cnhfcmluZ1tlbnRyeV0uZnJhZ1swXS5hZGRyID0KCQkJICAgIHZpcnRf dG9fbGUzMmRlc2MgKHNrYi0+dGFpbCk7CgkJfQoJCS8qIFBlcmhhcHMgd2UgbmVlZCBub3Qg cmVzZXQgdGhpcyBmaWVsZC4gKi8KCQlucC0+cnhfcmluZ1tlbnRyeV0uZnJhZ1swXS5sZW5n dGggPQoJCSAgICBjcHVfdG9fbGUzMiAobnAtPnJ4X2J1Zl9zeiB8IExhc3RGcmFnKTsKCQlu cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzID0gMDsKCX0KCgkvKiBObyBuZWVkIHRvIHJlc3Rh cnQgUnggZW5naW5lLCBpdCB3aWxsIHBvbGwuICovCglyZXR1cm4gMDsKfQoKc3RhdGljIHZv aWQKbmV0ZGV2X2Vycm9yIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW50cl9zdGF0 dXMpCnsKCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CglzdHJ1Y3QgbmV0ZGV2X3By aXZhdGUgKm5wID0gKHN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Cgl1MTYg Ym1jciwgYW5hciwgYW5scGFyOwoJaW50IHNwZWVkOwoKCWlmIChpbnRyX3N0YXR1cyAmIElu dHJEcnZScXN0KSB7CgkJLyogU3RvcCB0aGUgZG93biBjb3VudGVyIGFuZCB0dXJuIGludGVy cnVwdHMgYmFjayBvbi4gKi8KCQlpZiAoZGVidWcpCgkJCXByaW50ayAoIiVzOiBUdXJuaW5n IGludGVycnVwdHMgYmFjayBvbi5cbiIsIGRldi0+bmFtZSk7CgkJLyogQWNrbm93bGVkZ2Ug dHdpY2UgZm9yIGJ1ZyAqLwoJCXdyaXRldyAoMCwgaW9hZGRyICsgSW50ckVuYWJsZSk7CgkJ d3JpdGV3ICgwLCBpb2FkZHIgKyBEb3duQ291bnRlcik7CgkJd3JpdGV3IChJbnRyUnhEb25l IHwgSW50clJ4RE1BRG9uZSB8IEludHJQQ0lFcnIgfCBJbnRyRHJ2UnFzdCB8CgkJCUludHJU eERvbmUgfCBTdGF0c01heCB8IExpbmtDaGFuZ2UsCgkJCWlvYWRkciArIEludHJFbmFibGUp OwoJCS8qIEFjayBidWdneSBJblJlcXVlc3QgKi8KCQl3cml0ZXcgKEludHJEcnZScXN0LCBp b2FkZHIgKyBJbnRyU3RhdHVzKTsKCX0KCWlmIChpbnRyX3N0YXR1cyAmIExpbmtDaGFuZ2Up IHsKCQlpZiAobnAtPmFuX2VuYWJsZSkgewoJCQlhbmFyID0gbWRpb19yZWFkIChkZXYsIG5w LT5waHlzWzBdLCA0KTsKCQkJYW5scGFyID0gbWRpb19yZWFkIChkZXYsIG5wLT5waHlzWzBd LCA1KTsKCQkJYW5hciAmPSBhbmxwYXI7CgkJCXByaW50ayAoS0VSTl9JTkZPICIlczogTGlu ayBjaGFuZ2VkOiAiLCBkZXYtPm5hbWUpOwoJCQlpZiAoYW5hciAmIDB4MDEwMCkKCQkJCXBy aW50ayAoIjEwME1icHMsIGZ1bGwgZHVwbGV4XG4iKTsKCQkJZWxzZSBpZiAoYW5hciAmIDB4 MDA4MCkKCQkJCXByaW50ayAoIjEwME1icHMsIGhhbGYgZHVwbGV4XG4iKTsKCQkJZWxzZSBp ZiAoYW5hciAmIDB4MDA0MCkKCQkJCXByaW50ayAoIjEwTWJwcywgZnVsbCBkdXBsZXhcbiIp OwoJCQllbHNlIGlmIChhbmFyICYgMHgwMDIwKQoJCQkJcHJpbnRrICgiMTBNYnBzLCBoYWxm IGR1cGxleFxuIik7CgkJCWVsc2UKCQkJCXByaW50ayAoIlxuIik7CgoJCX0gZWxzZSB7CgkJ CWJtY3IgPSBtZGlvX3JlYWQgKGRldiwgbnAtPnBoeXNbMF0sIDApOwoJCQlzcGVlZCA9IChi bWNyICYgMHgyMDAwKSA/IDEwMCA6IDEwOwoJCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IExp bmsgY2hhbmdlZDogJWRNYnBzICwiLAoJCQkJZGV2LT5uYW1lLCBzcGVlZCk7CgkJCXByaW50 ayAoIiVzIGR1cGxleC5cbiIsIChibWNyICYgMHgwMTAwKSA/CgkJCQkiZnVsbCIgOiAiaGFs ZiIpOwoJCX0KCQljaGVja19kdXBsZXggKGRldik7CgoJfQoJaWYgKGludHJfc3RhdHVzICYg U3RhdHNNYXgpIHsKCQlnZXRfc3RhdHMgKGRldik7Cgl9CglpZiAoaW50cl9zdGF0dXMgJiBJ bnRyUENJRXJyKSB7CgkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IFNvbWV0aGluZyBXaWNrZWQg aGFwcGVuZWQhICU0LjR4LlxuIiwKCQkJZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CgkJLyog V2UgbXVzdCBkbyBhIGdsb2JhbCByZXNldCBvZiBETUEgdG8gY29udGludWUuICovCgl9Cn0K CnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCmdldF9zdGF0cyAoc3RydWN0IG5l dF9kZXZpY2UgKmRldikKewoJbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKCXN0cnVj dCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSAoc3RydWN0IG5ldGRldl9wcml2YXRlICopIGRldi0+ cHJpdjsKCWludCBpOwoKCS8qIFdlIHNob3VsZCBsb2NrIHRoaXMgc2VnbWVudCBvZiBjb2Rl IGZvciBTTVAgZXZlbnR1YWxseSwgYWx0aG91Z2gKCSAgIHRoZSB2dWxuZXJhYmlsaXR5IHdp bmRvdyBpcyB2ZXJ5IHNtYWxsIGFuZCBzdGF0aXN0aWNzIGFyZQoJICAgbm9uLWNyaXRpY2Fs LiAqLwoJLyogVGhlIGNoaXAgb25seSBuZWVkIHJlcG9ydCBmcmFtZSBzaWxlbnRseSBkcm9w cGVkLiAqLwoJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gcmVhZGIgKGlvYWRkciAr IFJ4TWlzc2VkKTsKCW5wLT5zdGF0cy50eF9wYWNrZXRzICs9IHJlYWR3IChpb2FkZHIgKyBU eEZyYW1lc09LKTsKCW5wLT5zdGF0cy5yeF9wYWNrZXRzICs9IHJlYWR3IChpb2FkZHIgKyBS eEZyYW1lc09LKTsKCW5wLT5zdGF0cy5jb2xsaXNpb25zICs9IHJlYWRiIChpb2FkZHIgKyBT dGF0c0xhdGVDb2xsKTsKCW5wLT5zdGF0cy5jb2xsaXNpb25zICs9IHJlYWRiIChpb2FkZHIg KyBTdGF0c011bHRpQ29sbCk7CglucC0+c3RhdHMuY29sbGlzaW9ucyArPSByZWFkYiAoaW9h ZGRyICsgU3RhdHNPbmVDb2xsKTsKCXJlYWRiIChpb2FkZHIgKyBTdGF0c0NhcnJpZXJFcnJv cik7CglyZWFkYiAoaW9hZGRyICsgU3RhdHNUeERlZmVyKTsKCWZvciAoaSA9IFN0YXRzVHhE ZWZlcjsgaSA8PSBTdGF0c01jYXN0Ung7IGkrKykKCQlyZWFkYiAoaW9hZGRyICsgaSk7Cglu cC0+c3RhdHMudHhfYnl0ZXMgKz0gcmVhZHcgKGlvYWRkciArIFR4T2N0ZXRzTG93KTsKCW5w LT5zdGF0cy50eF9ieXRlcyArPSByZWFkdyAoaW9hZGRyICsgVHhPY3RldHNIaWdoKSA8PCAx NjsKCW5wLT5zdGF0cy5yeF9ieXRlcyArPSByZWFkdyAoaW9hZGRyICsgUnhPY3RldHNMb3cp OwoJbnAtPnN0YXRzLnJ4X2J5dGVzICs9IHJlYWR3IChpb2FkZHIgKyBSeE9jdGV0c0hpZ2gp IDw8IDE2OwoKCXJldHVybiAmbnAtPnN0YXRzOwp9CgovKiBUaGUgbGl0dGxlLWVuZGlhbiBB VVRPRElOIElJIGV0aGVybmV0IENSQyBjYWxjdWxhdGlvbnMuCiAgIEEgYmlnLWVuZGlhbiB2 ZXJzaW9uIGlzIGFsc28gYXZhaWxhYmxlLgogICBUaGlzIGlzIHNsb3cgYnV0IGNvbXBhY3Qg Y29kZS4gIERvIG5vdCB1c2UgdGhpcyByb3V0aW5lIGZvciBidWxrIGRhdGEsCiAgIHVzZSBh IHRhYmxlLWJhc2VkIHJvdXRpbmUgaW5zdGVhZC4KICAgVGhpcyBpcyBjb21tb24gY29kZSBh bmQgc2hvdWxkIGJlIG1vdmVkIHRvIG5ldC9jb3JlL2NyYy5jLgogICBDaGlwcyBtYXkgdXNl IHRoZSB1cHBlciBvciBsb3dlciBDUkMgYml0cywgYW5kIG1heSByZXZlcnNlIGFuZC9vciBp bnZlcnQKICAgdGhlbS4gIFNlbGVjdCB0aGUgZW5kaWFuLW5lc3MgdGhhdCByZXN1bHRzIGlu IG1pbmltYWwgY2FsY3VsYXRpb25zLgoqLwpzdGF0aWMgdW5zaWduZWQgY29uc3QgZXRoZXJu ZXRfcG9seW5vbWlhbF9sZSA9IDB4ZWRiODgzMjBVOwpzdGF0aWMgaW5saW5lIHVuc2lnbmVk CmV0aGVyX2NyY19sZSAoaW50IGxlbmd0aCwgdW5zaWduZWQgY2hhciAqZGF0YSkKewoJdW5z aWduZWQgaW50IGNyYyA9IDB4ZmZmZmZmZmY7CS8qIEluaXRpYWwgdmFsdWUuICovCgl3aGls ZSAoLS1sZW5ndGggPj0gMCkgewoJCXVuc2lnbmVkIGNoYXIgY3VycmVudF9vY3RldCA9ICpk YXRhKys7CgkJaW50IGJpdDsKCQlmb3IgKGJpdCA9IDg7IC0tYml0ID49IDA7IGN1cnJlbnRf b2N0ZXQgPj49IDEpIHsKCQkJaWYgKChjcmMgXiBjdXJyZW50X29jdGV0KSAmIDEpIHsKCQkJ CWNyYyA+Pj0gMTsKCQkJCWNyYyBePSBldGhlcm5ldF9wb2x5bm9taWFsX2xlOwoJCQl9IGVs c2UKCQkJCWNyYyA+Pj0gMTsKCQl9Cgl9CglyZXR1cm4gY3JjOwp9CgpzdGF0aWMgdm9pZApz ZXRfcnhfbW9kZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJbG9uZyBpb2FkZHIgPSBk ZXYtPmJhc2VfYWRkcjsKCXUxNiBtY19maWx0ZXJbNF07CS8qIE11bHRpY2FzdCBoYXNoIGZp bHRlciAqLwoJdTMyIHJ4X21vZGU7CglpbnQgaTsKCglpZiAoZGV2LT5mbGFncyAmIElGRl9Q Uk9NSVNDKSB7CS8qIFNldCBwcm9taXNjdW91cy4gKi8KCQkvKiBVbmNvbmRpdGlvbmFsbHkg bG9nIG5ldCB0YXBzLiAqLwoJCXByaW50ayAoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91 cyBtb2RlIGVuYWJsZWQuXG4iLAoJCQlkZXYtPm5hbWUpOwoJCW1lbXNldCAobWNfZmlsdGVy LCAweGZmLCBzaXplb2YgKG1jX2ZpbHRlcikpOwoJCXJ4X21vZGUgPQoJCSAgICBBY2NlcHRC cm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRBbGwgfAoJCSAgICBBY2NlcHRN eVBoeXM7Cgl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9s aW1pdCkKCQkgICB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKCQkvKiBUb28g bWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwoJCW1lbXNldCAo bWNfZmlsdGVyLCAweGZmLCBzaXplb2YgKG1jX2ZpbHRlcikpOwoJCXJ4X21vZGUgPSBBY2Nl cHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7Cgl9IGVsc2Ug aWYgKGRldi0+bWNfY291bnQpIHsKCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKCQlp bnQgYml0OwoJCWludCBpbmRleDsKCQlpbnQgY3JjOwoJCW1lbXNldCAobWNfZmlsdGVyLCAw LCBzaXplb2YgKG1jX2ZpbHRlcikpOwoJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNf bGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwoJCSAgICAgaSsrLCBtY2xpc3Qg PSBtY2xpc3QtPm5leHQpIHsKCQkJY3JjID0gZXRoZXJfY3JjX2xlIChFVEhfQUxFTiwgbWNs aXN0LT5kbWlfYWRkcik7CgkJCWZvciAoaW5kZXg9MCwgYml0PTA7IGJpdCA8IDY7IGJpdCsr LCBjcmMgPDw9IDEpCgkJCQlpZiAoY3JjICYgMHg4MDAwMDAwMCkgaW5kZXggfD0gMSA8PCBi aXQ7CgkJCW1jX2ZpbHRlcltpbmRleC8xNl0gfD0gKDEgPDwgKGluZGV4ICUgMTYpKTsKCQl9 CgkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpSGFzaCB8IEFjY2Vw dE15UGh5czsKCX0gZWxzZSB7CgkJd3JpdGViIChBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRN eVBoeXMsIGlvYWRkciArIFJ4TW9kZSk7CgkJcmV0dXJuOwoJfQoJZm9yIChpID0gMDsgaSA8 IDQ7IGkrKykKCQl3cml0ZXcgKG1jX2ZpbHRlcltpXSwgaW9hZGRyICsgTXVsdGljYXN0Rmls dGVyMCArIGkgKiAyKTsKCXdyaXRlYiAocnhfbW9kZSwgaW9hZGRyICsgUnhNb2RlKTsKfQoK c3RhdGljIGludAptaWlfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBp ZnJlcSAqcnEsIGludCBjbWQpCnsKCXUxNiAqZGF0YSA9ICh1MTYgKikgJiBycS0+aWZyX2Rh dGE7CgoJc3dpdGNoIChjbWQpIHsKCWNhc2UgU0lPQ0RFVlBSSVZBVEU6CS8qIEdldCB0aGUg YWRkcmVzcyBvZiB0aGUgUEhZIGluIHVzZS4gKi8KCQlkYXRhWzBdID0gKChzdHJ1Y3QgbmV0 ZGV2X3ByaXZhdGUgKikgZGV2LT5wcml2KS0+cGh5c1swXSAmIDB4MWY7CgkJLyogRmFsbCBU aHJvdWdoICovCgljYXNlIFNJT0NERVZQUklWQVRFICsgMToJLyogUmVhZCB0aGUgc3BlY2lm aWVkIE1JSSByZWdpc3Rlci4gKi8KCQlkYXRhWzNdID0gbWRpb19yZWFkIChkZXYsIGRhdGFb MF0gJiAweDFmLCBkYXRhWzFdICYgMHgxZik7CgkJcmV0dXJuIDA7CgljYXNlIFNJT0NERVZQ UklWQVRFICsgMjoJLyogV3JpdGUgdGhlIHNwZWNpZmllZCBNSUkgcmVnaXN0ZXIgKi8KCQlp ZiAoIWNhcGFibGUgKENBUF9ORVRfQURNSU4pKQoJCQlyZXR1cm4gLUVQRVJNOwoJCW1kaW9f d3JpdGUgKGRldiwgZGF0YVswXSAmIDB4MWYsIGRhdGFbMV0gJiAweDFmLCBkYXRhWzJdKTsK CQlyZXR1cm4gMDsKCWRlZmF1bHQ6CgkJcmV0dXJuIC1FT1BOT1RTVVBQOwoJfQp9CgpzdGF0 aWMgaW50Cm5ldGRldl9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJbG9uZyBp b2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSAo c3RydWN0IG5ldGRldl9wcml2YXRlICopIGRldi0+cHJpdjsKCWludCBpOwoKCW5ldGlmX3N0 b3BfcXVldWUgKGRldik7CgoJaWYgKGRlYnVnID4gMSkgewoJCXByaW50ayAoS0VSTl9ERUJV RwoJCQkiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzIFR4ICUyLjJ4 ICIKCQkJIlJ4ICU0LjR4IEludCAlMi4yeC5cbiIsIGRldi0+bmFtZSwKCQkJcmVhZGIgKGlv YWRkciArIFR4U3RhdHVzKSwgcmVhZGwgKGlvYWRkciArIFJ4U3RhdHVzKSwKCQkJcmVhZHcg KGlvYWRkciArIEludHJTdGF0dXMpKTsKCQlwcmludGsgKEtFUk5fREVCVUcKCQkJIiVzOiBR dWV1ZSBwb2ludGVycyB3ZXJlIFR4ICVkIC8gJWQsICBSeCAlZCAvICVkLlxuIiwKCQkJZGV2 LT5uYW1lLCBucC0+Y3VyX3R4LCBucC0+ZGlydHlfdHgsIG5wLT5jdXJfcngsCgkJCW5wLT5k aXJ0eV9yeCk7Cgl9CgoJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBp bnRlcnJ1cHQgbWFzay4gKi8KCXdyaXRldyAoMHgwMDAwLCBpb2FkZHIgKyBJbnRyRW5hYmxl KTsKCgkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IHByb2Nlc3Nlcy4gKi8KCXdyaXRl dyAoVHhEaXNhYmxlIHwgUnhEaXNhYmxlIHwgU3RhdHNEaXNhYmxlLCBpb2FkZHIgKyBNQUND dHJsMSk7CgojaWZkZWYgX19pMzg2X18KCWlmIChkZWJ1ZyA+IDIpIHsKCQlwcmludGsgKCJc biIgS0VSTl9ERUJVRyAiICBUeCByaW5nIGF0ICU4Ljh4OlxuIiwKCQkJKGludCkgdmlydF90 b19idXMgKG5wLT50eF9yaW5nKSk7CgkJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsg aSsrKQoJCQlwcmludGsgKCIgIyVkIGRlc2MuICU0LjR4ICU4Ljh4ICU4Ljh4LlxuIiwKCQkJ CWksIG5wLT50eF9yaW5nW2ldLnN0YXR1cywKCQkJCW5wLT50eF9yaW5nW2ldLmZyYWdbMF0u YWRkciwKCQkJCW5wLT50eF9yaW5nW2ldLmZyYWdbMF0ubGVuZ3RoKTsKCQlwcmludGsgKCJc biIgS0VSTl9ERUJVRyAiICBSeCByaW5nICU4Ljh4OlxuIiwKCQkJKGludCkgdmlydF90b19i dXMgKG5wLT5yeF9yaW5nKSk7CgkJZm9yIChpID0gMDsgaSA8IC8qUlhfUklOR19TSVpFICov IDQ7IGkrKykgewoJCQlwcmludGsgKEtFUk5fREVCVUcgIiAjJWQgZGVzYy4gJTQuNHggJTQu NHggJTguOHhcbiIsCgkJCQlpLCBucC0+cnhfcmluZ1tpXS5zdGF0dXMsCgkJCQlucC0+cnhf cmluZ1tpXS5mcmFnWzBdLmFkZHIsCgkJCQlucC0+cnhfcmluZ1tpXS5mcmFnWzBdLmxlbmd0 aCk7CgkJfQoJfQojZW5kaWYJCQkJLyogX19pMzg2X18gZGVidWdnaW5nIG9ubHkgKi8KCglm cmVlX2lycSAoZGV2LT5pcnEsIGRldik7CgoJZGVsX3RpbWVyX3N5bmMgKCZucC0+dGltZXIp OwoKCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KCWZvciAo aSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewoJCW5wLT5yeF9yaW5nW2ldLnN0YXR1 cyA9IDA7CgkJbnAtPnJ4X3JpbmdbaV0uZnJhZ1swXS5hZGRyID0gMHhCQURGMDBEMDsJLyog QW4gaW52YWxpZCBhZGRyZXNzLiAqLwoJCWlmIChucC0+cnhfc2tidWZmW2ldKSB7CgkJCWRl dl9rZnJlZV9za2IgKG5wLT5yeF9za2J1ZmZbaV0pOwoJCX0KCQlucC0+cnhfc2tidWZmW2ld ID0gMDsKCX0KCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewoJCWlmIChu cC0+dHhfc2tidWZmW2ldKQoJCQlkZXZfa2ZyZWVfc2tiIChucC0+dHhfc2tidWZmW2ldKTsK CQlucC0+dHhfc2tidWZmW2ldID0gMDsKCX0KCglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQg X19kZXZleGl0CnN1bmRhbmNlX3JlbW92ZTEgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQp7Cglz dHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGRldi0+ZHJpdmVyX2RhdGE7CgoJLyogTm8gbmVl ZCB0byBjaGVjayBNT0RfSU5fVVNFLCBhcyBzeXNfZGVsZXRlX21vZHVsZSgpIGNoZWNrcy4g Ki8KCWlmIChkZXYpIHsKCQlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gKHZvaWQgKikg KGRldi0+cHJpdik7CgkJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldik7CiNpZmRlZiBVU0VfSU9f T1BTCgkJcmVsZWFzZV9yZWdpb24gKGRldi0+YmFzZV9hZGRyLAoJCQkJcGNpX2lkX3RibFtu cC0+Y2hpcF9pZF0uaW9fc2l6ZSk7CiNlbHNlCgkJcmVsZWFzZV9tZW1fcmVnaW9uIChwY2lf cmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDEpLAoJCQkJICAgIHBjaV9pZF90YmxbbnAtPmNoaXBf aWRdLmlvX3NpemUpOwoJCWlvdW5tYXAgKChjaGFyICopIChkZXYtPmJhc2VfYWRkcikpOwoj ZW5kaWYKCQlrZnJlZSAoZGV2KTsKCX0KCglwZGV2LT5kcml2ZXJfZGF0YSA9IE5VTEw7Cn0K CnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdW5kYW5jZV9kcml2ZXIgPSB7CgluYW1lOiJz dW5kYW5jZSIsCglpZF90YWJsZTpzdW5kYW5jZV9wY2lfdGJsLAoJcHJvYmU6c3VuZGFuY2Vf cHJvYmUxLAoJcmVtb3ZlOnN1bmRhbmNlX3JlbW92ZTEsCn07CgpzdGF0aWMgaW50IF9faW5p dApzdW5kYW5jZV9pbml0ICh2b2lkKQp7CglyZXR1cm4gcGNpX21vZHVsZV9pbml0ICgmc3Vu ZGFuY2VfZHJpdmVyKTsKfQoKc3RhdGljIHZvaWQgX19leGl0CnN1bmRhbmNlX2V4aXQgKHZv aWQpCnsKCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJnN1bmRhbmNlX2RyaXZlcik7Cn0KCm1v ZHVsZV9pbml0IChzdW5kYW5jZV9pbml0KTsKbW9kdWxlX2V4aXQgKHN1bmRhbmNlX2V4aXQp Owo= --------------020103070307090102090206--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/