From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from aseit003.allgon.net (mail.lgpallgon.com [193.235.198.4]) by ozlabs.org (Postfix) with ESMTP id CC5D567A65 for ; Thu, 17 Mar 2005 21:17:41 +1100 (EST) From: Hans Schillstrom To: srinivas.surabhi@wipro.com In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-yeO7sfKHcDE1vOPQNwja" Message-Id: <1111052805.13233.42.camel@hawk.allgon.net> Mime-Version: 1.0 Date: Thu, 17 Mar 2005 10:46:45 +0100 Cc: linuxppc-embedded@ozlabs.org Subject: Re: FW: LED driver List-Id: Linux on Embedded PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , --=-yeO7sfKHcDE1vOPQNwja Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, I have made a driver for our mpc8270 board It is based upon Denx led_driver and made for 2.6 kernel (See atached file) To control the leds you have to perfom some ioctl's first create your devices mknod led0 c 151 0 ... Example howto use it: void led_off( int file ) { if (ioctl(file,STATUSLED_SET,0) < 0) perror("led off: "); } void led_blink( int file ) { if (ioctl(file,STATUSLED_SET,1) < 0) perror("led blink: "); } void led_on( int file ) { if (ioctl(file,STATUSLED_SET,2) < 0) perror("led on: "); } void led_per( int file, int period ) { if (ioctl(file,STATUSLED_PERIOD,period) < 0) perror("led on: "); } ... int led0 = open("/dev/led0",O_RDWR) ... led_blink(led0); /* turn on green LED */ .. /Hans On Thu, 2005-03-17 at 06:15, srinivas.surabhi@wipro.com wrote: > > -----Original Message----- > From: Srinivas Surabhi (WT01 - TELECOM SOLUTIONS) > Sent: Thursday, March 17, 2005 7:53 AM > To: linuxppc-embedded@ozlabs.org > Subject: LED driver > > Hi, > > I am working on the MPC8270 board having connected GPIO 3 lines > connected to 3 LEDs. So can any one help me in finding out the best > solution of controlling the LEDs from MVlinux (kernel and user space) or > any pointers who has done it before. > > Thanks & Rgds > SS > > > > > Confidentiality Notice > > The information contained in this electronic message and any attachments to this message are intended > for the exclusive use of the addressee(s) and may contain confidential or privileged information. If > you are not the intended recipient, please notify the sender at Wipro or Mailadmin@wipro.com immediately > and destroy all copies of this message and any attachments. > _______________________________________________ > Linuxppc-embedded mailing list > Linuxppc-embedded@ozlabs.org > https://ozlabs.org/mailman/listinfo/linuxppc-embedded > --=-yeO7sfKHcDE1vOPQNwja Content-Disposition: attachment; filename=rcb8270_led.c Content-Type: text/x-c; name=rcb8270_led.c; charset=iso-8859-1 Content-Transfer-Encoding: base64 DQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogKEMpIENvcHlyaWdodCAyMDA0DQogKiBM R1AgQWxsZ29uIEFCDQogKiBIYW5zIFNjaGlsbHN0cm9tLCBoYW5zLnNjaGlsbHN0cm9tQGxncGFs bGdvbi5jb20NCiAqDQogKiBCYXNlZCB1cG9uIERFTlggc3RhdHVzX2xlZC5jDQogKg0KICogVGhp cyBEZXZpY2UgZHJpdmVyIGhhbmRsZXMgTEVEIGJsaW5rcyBldGMuLCBSZWxheSBvdXRwdXRzIGFu ZCBBbGFybSBpbnB1dHMNCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovKg0KICogU3Rh bmRhcmQgaW4ga2VybmVsIG1vZHVsZXMNCiAqLw0KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5l bC5oPg0KI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ DQojaW5jbHVkZSA8bGludXgvcG9sbC5oPg0KI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQoj aW5jbHVkZSA8YXNtL3R5cGVzLmg+DQojaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCg0KI2luY2x1 ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KI2luY2x1ZGUgPGFzbS9pbW1hcF9jcG0yLmg+DQojaW5j bHVkZSA8YXNtL2NwbTIuaD4NCiNpbmNsdWRlIDxhc20vbXBjODI2MC5oPg0KDQojdW5kZWYJREVC VUcNCg0KI2lmZGVmCURFQlVHDQojIGRlZmluZSBkZWJ1Z2soZm10LGFyZ3MuLi4pCXByaW50ayhm bXQgLCMjYXJncykNCiNlbHNlDQojIGRlZmluZSBkZWJ1Z2soZm10LGFyZ3MuLi4pDQojZW5kaWYN Cg0KLyoNCiAqIERlYWwgd2l0aCBDT05GSUdfTU9EVkVSU0lPTlMNCiAqLw0KI2lmIENPTkZJR19N T0RWRVJTSU9OUz09MQ0KLyogIyBkZWZpbmUgTU9EVkVSU0lPTlMgKi8NCiMgaW5jbHVkZSA8bGlu dXgvbW9kdmVyc2lvbnMuaD4NCiNlbmRpZg0KDQovKg0KICogRm9yIGNoYXJhY3RlciBkZXZpY2Vz DQogKi8NCiNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogY2hhcmFjdGVyIGRldmljZSBkZWZpbml0 aW9ucwkqLw0KDQovKiBpb2N0bCdzICovDQojZGVmaW5lIFNUQVRVU0xFRF9HRVQJCV9JT1IoJ0wn LCAxLCB1bnNpZ25lZCBsb25nKQ0KI2RlZmluZSBTVEFUVVNMRURfU0VUCQlfSU9XKCdMJywgMiwg dW5zaWduZWQgbG9uZykNCiNkZWZpbmUgU1RBVFVTTEVEX1BFUklPRAlfSU9XKCdMJywgMywgdW5z aWduZWQgbG9uZykNCiNkZWZpbmUJU1RBVFVTX1NXSVRDSF9HRVQJX0lPUignTCcsIDQsIHVuc2ln bmVkIGxvbmcpDQojZGVmaW5lIFNUQVRVU19SRVNFVF9HRVQJX0lPUignTCcsIDUsIHVuc2lnbmVk IGxvbmcpDQojZGVmaW5lIFNUQVRVU19SRVNFVF9TRVQJX0lPVygnTCcsIDYsIHVuc2lnbmVkIGxv bmcpDQoNCiNkZWZpbmUgU1RBVFVTX0xFRF9QQVIJCWltX2lvcG9ydC5pb3BfcHBhcmMNCiNkZWZp bmUgU1RBVFVTX0xFRF9ESVIJCWltX2lvcG9ydC5pb3BfcGRpcmMNCiNkZWZpbmUgU1RBVFVTX0xF RF9EQVQJCWltX2lvcG9ydC5pb3BfcGRhdGMNCg0KI2RlZmluZQlTVEFUVVNfTEVEX09GRgkJMA0K I2RlZmluZSBTVEFUVVNfTEVEX0JMSU5LSU5HCTENCiNkZWZpbmUgU1RBVFVTX0xFRF9PTgkJMg0K DQojZGVmaW5lIFNUQVRVU19SRUxBWV9CSVQwCTB4MDAwMDAwMDgJLyogUkVMQVkgMSBiaXQgMjgg Ki8NCiNkZWZpbmUgU1RBVFVTX1JFTEFZX1BFUklPRDAJKEhaKQ0KI2RlZmluZSBTVEFUVVNfUkVM QVlfU1RBVEUwCVNUQVRVU19MRURfT0ZGDQoNCiNkZWZpbmUgU1RBVFVTX1JFTEFZX0JJVDEJMHgx MDAwMDA0MAkvKiBSRUxBWSAyIGJpdCAyNSAqLw0KI2RlZmluZSBTVEFUVVNfUkVMQVlfUEVSSU9E MQkoSFopDQojZGVmaW5lIFNUQVRVU19SRUxBWV9TVEFURTEJU1RBVFVTX0xFRF9PRkYNCg0KI2Rl ZmluZSBTVEFUVVNfTEVEX0JJVAkJMHgyMDAwMDAwMAkvKiBMRUQgMCBpcyBvbiBQQy4yCU9QRVJB VEVfTEVEICovDQojZGVmaW5lIFNUQVRVU19MRURfUEVSSU9ECShIWikNCiNkZWZpbmUgU1RBVFVT X0xFRF9TVEFURQlTVEFUVVNfTEVEX0JMSU5LSU5HDQoNCiNkZWZpbmUgU1RBVFVTX0xFRF9CSVQx CTB4MTAwMDAwMDAJICAgICAgICAvKiBMRUQgMSBpcyBvbiBQQy4zCUFMQVJNX0xFRCAgICovDQoj ZGVmaW5lIFNUQVRVU19MRURfUEVSSU9EMQkoSFopDQojZGVmaW5lIFNUQVRVU19MRURfU1RBVEUx CVNUQVRVU19MRURfT04NCg0KI2RlZmluZSBTVEFUVVNfTEVEX0JJVDIJMHgwODAwMDAwMAkgICAg ICAgIC8qIExFRCAyIGlzIG9uIFBDLjQJQk9PVF9MRUQgICAgKi8NCiNkZWZpbmUgU1RBVFVTX0xF RF9QRVJJT0QyCShIWikNCiNkZWZpbmUgU1RBVFVTX0xFRF9TVEFURTIJU1RBVFVTX0xFRF9PRkYN Cg0KI2RlZmluZSBTVEFUVVNfTEVEX0FDVElWRQkwCQkvKiBMRUQgb24gZm9yIGJpdCA9PSAxCSov DQojZGVmaW5lIFNUQVRVU19MRURfQk9PVAkyCQkvKiBMRUQgMCB1c2VkIGZvciBib290IHN0YXR1 cyAqLw0KDQojZGVmaW5lIFBDTUNJQV9MRUQJCTANCiNkZWZpbmUgU1RBVFVTX0xFRAkJMQ0KI2Rl ZmluZSBGUk9OVF9MRUQJCTINCg0KDQojZGVmaW5lCUxFRF9NQUpPUgkxNTEJLyogUmVzZXJ2ZXJk IGZvciAiRnJvbnQgcGFuZWwgTEVEcyIgKi8NCg0KI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiJFJl dmlzaW9uOiAxLjAgJCINCg0Kc3RhdGljIHZvaWQgc3RhdHVzbGVkX2JsaW5rICh1bnNpZ25lZCBs b25nIG1pbm9yKTsNCg0KLyoNCiAqIERldmljZSBEZWNsYXJhdGlvbnMNCiAqIFBCMjUgJiBQQjI4 DQogKi8NCnR5cGVkZWYgc3RydWN0IHsNCiAgdWludAlpb3BfcGRpcng7DQogIHVpbnQJaW9wX3Bw YXJ4Ow0KICB1aW50CWlvcF9wc29yeDsNCiAgdWludAlpb3BfcG9kcng7DQogIHVpbnQJaW9wX3Bk YXR4Ow0KICBjaGFyCXJlczFbMTJdOw0KfSBpb3AgOw0KDQp0eXBlZGVmIHN0cnVjdCB7DQoJdW5z aWduZWQgbG9uZwkJbWFzazsNCglpbnQJCQlzdGF0ZTsNCglpbnQJCQlwZXJpb2Q7DQoJaW50CQkJ ZmxhZ3M7DQogICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIHBvbDsgICAgICAvLyBQb2xh cml0eQ0KICAgICAgICBpb3AgICAgICAgICAgICAgICAgICAgICAqaXB0cjsNCglzdHJ1Y3QgdGlt ZXJfbGlzdAl0aW1lcjsNCn0gbGVkX2Rldl90Ow0KDQojZGVmaW5lCVNMX0ZMQUdfT1BFTgkxDQoN CmxlZF9kZXZfdCBsZWRfZGV2W10gPSB7DQogICAgewlTVEFUVVNfTEVEX0JJVCwNCglTVEFUVVNf TEVEX1NUQVRFLA0KCVNUQVRVU19MRURfUEVSSU9ELA0KCTAsDQogICAgICAgIFNUQVRVU19MRURf QUNUSVZFLA0KICAgICAgICAoaW9wKikmKChjcG0yX21hcF90ICopSU1BUF9BRERSKS0+U1RBVFVT X0xFRF9ESVIsDQoJeyBmdW5jdGlvbjogc3RhdHVzbGVkX2JsaW5rLCBkYXRhOiAwVUwgLyogbWlu b3IgMCAqLyB9LA0KICAgIH0sDQojaWYgZGVmaW5lZChTVEFUVVNfTEVEX0JJVDEpDQogICAgewlT VEFUVVNfTEVEX0JJVDEsDQoJU1RBVFVTX0xFRF9TVEFURTEsDQoJU1RBVFVTX0xFRF9QRVJJT0Qx LA0KCTAsDQogICAgICAgIFNUQVRVU19MRURfQUNUSVZFLA0KICAgICAgICAoaW9wKikmKChjcG0y X21hcF90ICopSU1BUF9BRERSKS0+aW1faW9wb3J0LmlvcF9wZGlyYywNCgl7IGZ1bmN0aW9uOiBz dGF0dXNsZWRfYmxpbmssIGRhdGE6IDFVTCAvKiBtaW5vciAxICovIH0sDQogICAgfSwNCiNlbmRp ZgkvKiBTVEFUVVNfTEVEX0JJVDEgKi8NCiNpZiBkZWZpbmVkKFNUQVRVU19MRURfQklUMikNCiAg ICB7CVNUQVRVU19MRURfQklUMiwNCglTVEFUVVNfTEVEX1NUQVRFMiwNCglTVEFUVVNfTEVEX1BF UklPRDIsDQoJMCwNCiAgICAgICAgU1RBVFVTX0xFRF9BQ1RJVkUsDQogICAgICAgIChpb3AqKSYo KGNwbTJfbWFwX3QgKilJTUFQX0FERFIpLT5pbV9pb3BvcnQuaW9wX3BkaXJjLA0KCXsgZnVuY3Rp b246IHN0YXR1c2xlZF9ibGluaywgZGF0YTogMlVMIC8qIG1pbm9yIDIgKi8gfSwNCiAgICB9LA0K I2VuZGlmCS8qIFNUQVRVU19SRUxBWV8wICovDQogICAgewlTVEFUVVNfUkVMQVlfQklUMCwNCiAg ICAgICAgU1RBVFVTX1JFTEFZX1NUQVRFMCwNCiAgICAgICAgU1RBVFVTX1JFTEFZX1BFUklPRDAs DQogICAgICAgIDAsDQogICAgICAgIDEsDQogICAgICAgIChpb3AqKSYoKGNwbTJfbWFwX3QgKilJ TUFQX0FERFIpLT5pbV9pb3BvcnQuaW9wX3BkaXJiLA0KICAgICAgICB7IGZ1bmN0aW9uOiBzdGF0 dXNsZWRfYmxpbmssIGRhdGE6IDJVTCAvKiBtaW5vciAyICovIH0sDQogICAgfSwNCiAgICB7CVNU QVRVU19SRUxBWV9CSVQxLA0KICAgICAgICBTVEFUVVNfUkVMQVlfU1RBVEUxLA0KICAgICAgICBT VEFUVVNfUkVMQVlfUEVSSU9EMSwNCiAgICAgICAgMCwNCiAgICAgICAgMSwNCiAgICAgICAgKGlv cCopJigoY3BtMl9tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGRpcmIsDQogICAg ICAgIHsgZnVuY3Rpb246IHN0YXR1c2xlZF9ibGluaywgZGF0YTogMlVMIC8qIG1pbm9yIDIgKi8g fSwNCiAgICB9LA0KfTsNCg0KI2RlZmluZQlNQVhfTEVEX0RFVgkoc2l6ZW9mKGxlZF9kZXYpL3Np emVvZihsZWRfZGV2X3QpKQ0KDQovKg0KICogT24gdGhlIElWTSogd2UgaGFuZGxlIDIgYWRkaXRp b25hbCBkZXZpY2VzIHdpdGggdGhpcyBkcml2ZXI6DQogKiBNQVhfTEVEX0RFViswID0+ICJJbnRl cmxvY2sgU3dpdGNoIiBhbmQgIkRldmljZSBSZXNldCBNb25pdG9yIjoNCiAqCQkJQm90aCBhcmUg aW5wdXQgcGlucywgd2hpY2ggYXJlIHBvbGxlZCBwZXJpb2RpY2FsbHksDQogKgkJCWFuZCB0aGUg dXNlciBjYW4gd2FpdCB3aXRoIHNlbGVjdCgpIGZvciBhIHN0YXR1cyBjaGFuZ2UuDQogKiBNQVhf TEVEX0RFVisxID0+ICJEZXZpY2UgUmVzZXQgRW5hYmxlIiwgYW4gb3V0cHV0IGRldmljZSB3ZSBj YW4gc2V0IG9yIHJlc2V0Lg0KICovDQojaWYgZGVmaW5lZChDT05GSUdfSVZNUzgpIHx8IGRlZmlu ZWQoQ09ORklHX0lWTUwyNCkNCiMgZGVmaW5lIE1BWF9JT19ERVYJMg0Kc3RhdGljIGludCBpb19k ZXZfZmxhZ3NbTUFYX0lPX0RFVl0gPSB7IDAsIH07CS8qIGFkZGl0aW9uYWwgSS9PIGRldmljZXMg Ki8NCiNlbHNlDQojIGRlZmluZSBNQVhfSU9fREVWCTANCiNlbmRpZgkvKiBDT05GSUdfSVZNUzgs IENPTkZJR19JVk1MMjQgKi8NCg0Kc3RhdGljIHZvbGF0aWxlIGNwbTJfbWFwX3QgKmxpbW1yID0g MDsNCi8qDQogKiBUaGUgbmFtZSBmb3Igb3VyIGRldmljZSwgYXMgaXQgd2lsbCBhcHBlYXIgaW4g L3Byb2MvZGV2aWNlcw0KICovDQojZGVmaW5lIERFVklDRV9OQU1FICJzdGF0dXNfbGVkIg0KDQov Kg0KICogUHJvdG90eXBlcw0KICovDQpzdGF0aWMgaW50IHN0YXR1c2xlZF9pbml0ICh2b2lkKSBf X2luaXQ7DQpzdGF0aWMgaW50IHN0YXR1c2xlZF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qg ZmlsZSAqKTsNCnN0YXRpYyBpbnQgc3RhdHVzbGVkX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0 cnVjdCBmaWxlICopOw0KIyBpZiBkZWZpbmVkKENPTkZJR19JVk1TOCkgfHwgZGVmaW5lZChDT05G SUdfSVZNTDI0KQ0Kc3RhdGljIHNzaXplX3Qgc3RhdHVzbGVkX3JlYWQoc3RydWN0IGZpbGUgKiwg Y2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsNCnN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhdHVzbGVk X3BvbGwgKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7DQojIGVuZGlmCS8qIENPTkZJR19J Vk1TOCwgQ09ORklHX0lWTUwyNCAqLw0KaW50IGluaXRfbW9kdWxlKHZvaWQpOw0Kdm9pZCBjbGVh bnVwX21vZHVsZSh2b2lkKTsNCg0Kc3RhdGljIHNzaXplX3Qgc3RhdHVzbGVkX2lvY3RsKHN0cnVj dCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLA0KCQkJICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQg bG9uZyk7DQoNCnN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YXR1c2xlZF9mb3BzID0g ew0KCW93bmVyOgkJVEhJU19NT0RVTEUsDQoJb3BlbjoJCXN0YXR1c2xlZF9vcGVuLA0KCXJlbGVh c2U6CXN0YXR1c2xlZF9yZWxlYXNlLA0KCWlvY3RsOiAJCXN0YXR1c2xlZF9pb2N0bCwNCiMgaWYg ZGVmaW5lZChDT05GSUdfSVZNUzgpIHx8IGRlZmluZWQoQ09ORklHX0lWTUwyNCkNCglyZWFkOgkJ c3RhdHVzbGVkX3JlYWQsDQoJcG9sbDoJCXN0YXR1c2xlZF9wb2xsLA0KIyBlbmRpZgkvKiBDT05G SUdfSVZNUzgsIENPTkZJR19JVk1MMjQgKi8NCn07DQoNCnN0YXRpYyBpbnQgTWFqb3I7DQoNCi8q DQogKiBJbml0aWFsaXplIHRoZSBkcml2ZXIgLSBSZWdpc3RlciB0aGUgY2hhcmFjdGVyIGRldmlj ZQ0KICovDQpzdGF0aWMgaW50IF9faW5pdCBzdGF0dXNsZWRfaW5pdCAodm9pZCkNCnsNCglpbnQg aTsNCg0KCWlmICghbGltbXIpIHsJCS8qIGluaXQgQ1BNIHB0ciAqLw0KICAgICAgICBsaW1tciA9 ICh2b2xhdGlsZSBjcG0yX21hcF90ICopSU1BUF9BRERSOw0KCX0NCg0KCS8qDQoJICogUmVnaXN0 ZXIgdGhlIGNoYXJhY3RlciBkZXZpY2UNCgkgKi8NCglpZiAoKGkgPSByZWdpc3Rlcl9jaHJkZXYo TEVEX01BSk9SLCBERVZJQ0VfTkFNRSwgJnN0YXR1c2xlZF9mb3BzKSkgPCAwKSB7DQoJCWxpbW1y ID0gTlVMTDsNCgkJcHJpbnRrKCJVbmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBzdGF0dXMgTEVE IGRyaXZlcjogcmM9JWRcbiIsDQoJCQlMRURfTUFKT1IsIGkpOw0KCQlyZXR1cm4gKGkpOw0KCX0N Cg0KCU1ham9yID0gTEVEX01BSk9SOw0KDQoJcHJpbnRrIChLRVJOX0lORk8NCgkJIlN0YXR1cyBM RUQgZHJpdmVyICIgRFJJVkVSX1ZFUlNJT04gIiBpbml0aWFsaXplZFxuIik7DQoNCglmb3IgKGk9 MDsgaTxNQVhfTEVEX0RFVjsgKytpKSB7DQoJCWxlZF9kZXZbaV0uaXB0ci0+aW9wX3BwYXJ4ICY9 IH4obGVkX2RldltpXS5tYXNrKTsNCiNpZmRlZiBTVEFUVVNfTEVEX09EUg0KCQlsZWRfZGV2W2ld LmlwdHItPmlvcF9wb2RyeCAmPSB+KGxlZF9kZXZbaV0ubWFzayk7DQojZW5kaWYNCgkJaWYgKGxl ZF9kZXZbaV0uc3RhdGUgPT0gU1RBVFVTX0xFRF9PTikgew0KICAgICAgICAgICAgICAgICAgICBp ZiggbGVkX2RldltpXS5wb2wgPT0gMCApCS8qIHN0YXJ0IHdpdGggTEVEIG9uICovDQoJCQlsZWRf ZGV2W2ldLmlwdHItPmlvcF9wZGF0eCAmPSB+KGxlZF9kZXZbaV0ubWFzayk7DQogICAgICAgICAg ICAgICAgICAgIGVsc2UNCgkJCWxlZF9kZXZbaV0uaXB0ci0+aW9wX3BkYXR4IHw9ICAgbGVkX2Rl dltpXS5tYXNrIDsNCgkJfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoIGxlZF9kZXZb aV0ucG9sID09IDAgKQkvKiBzdGFydCB3aXRoIExFRCBvZmYgKi8NCgkJCWxlZF9kZXZbaV0uaXB0 ci0+aW9wX3BkYXR4IHw9ICAgbGVkX2RldltpXS5tYXNrIDsNCgkJICAgIGVsc2UNCgkJCWxlZF9k ZXZbaV0uaXB0ci0+aW9wX3BkYXR4ICY9IH4obGVkX2RldltpXS5tYXNrKTsNCgkJfQ0KCQlsZWRf ZGV2W2ldLmlwdHItPmlvcF9wZGlyeCB8PSBsZWRfZGV2W2ldLm1hc2s7DQoNCgkJc3RhdHVzbGVk X2JsaW5rKGkpOw0KCX0NCg0KI2lmIGRlZmluZWQoQ09ORklHX0lWTVM4KSB8fCBkZWZpbmVkKENP TkZJR19JVk1MMjQpDQoJLyoNCgkgKiBXZSB1c2UgdGhlIHNhbWUgZnVuY3Rpb24gKG9yaWdpbmFs bHkgZm9yIHRoZSBJTE9DSyBkZXZpY2Ugb25seSkNCgkgKiB0byBwb2xsIGJvdGggdGhlIElMT0NL IGFuZCBSRVNFVF9NT04gcG9ydHMNCgkgKi8NCglpb190aW1lci5mdW5jdGlvbiA9IHN0YXR1c19p b19wb2xsOw0KCWlvX3RpbWVyLmRhdGEgICAgID0gU1RBVFVTX0lMT0NLX1BFUklPRDsNCg0KCWxh c3RfaW9fc3RhdGUgPSAoY2hhcilzdGF0dXNfaW9fdGVzdCgpOw0KCWNoYW5nZWRfaW9fc3RhdGUg PSAwOw0KDQoJaW5pdF90aW1lcigmaW9fdGltZXIpOw0KCWlvX3RpbWVyLmV4cGlyZXMgPSBqaWZm aWVzICsgaW9fdGltZXIuZGF0YTsNCglhZGRfdGltZXIoJmlvX3RpbWVyKTsNCiNlbmRpZgkvKiBD T05GSUdfSVZNUzgsIENPTkZJR19JVk1MMjQgKi8NCg0KCXJldHVybiAoMCk7DQp9DQoNCi8qDQog KiBjYWxsZWQgd2hlbmV2ZXIgYSBwcm9jZXNzIGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRldmljZQ0K ICovDQpzdGF0aWMgaW50IHN0YXR1c2xlZF9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkNCnsNCglpbnQgbWlub3IgID0gTUlOT1IoaW5vZGUtPmlfcmRldik7DQoN CglkZWJ1Z2sgKCJzdGF0dXNsZWRfb3BlbiglcCwlcCk6IG1pbm9yICVkXG4iLCBpbm9kZSwgZmls ZSwgbWlub3IpOw0KDQoJLyoNCgkgKiBBbGxvdyBmb3IgTUFYX0xFRF9ERVYgc3RhdHVzIExFRHMN CgkgKiBPbiBJVk1TOCBhbmQgSVZNTDI0OiBhbGxvdyBmb3IgYWRkaXRpb25hbCBJL08gZGV2aWNl cw0KCSAqLw0KCWlmIChtaW5vciA+PSBNQVhfTEVEX0RFViArIE1BWF9JT19ERVYpDQoJCXJldHVy biAoLUVOWElPKTsNCg0KCWlmICghbGltbXIpDQoJCXJldHVybiAoLUVOT0RFVik7DQoNCgkvKg0K CSAqIGV4Y2x1c2l2ZSBvcGVuIG9ubHkNCgkgKi8NCglpZiAobWlub3IgPCBNQVhfTEVEX0RFVikg ew0KCQlpZiAobGVkX2RldlttaW5vcl0uZmxhZ3MgJiBTTF9GTEFHX09QRU4pDQoJCQlyZXR1cm4g LUVCVVNZOw0KCQlsZWRfZGV2W21pbm9yXS5mbGFncyB8PSBTTF9GTEFHX09QRU47DQoJfQ0KDQoJ LyoNCgkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbW9kdWxlIGlzbid0IHJlbW92ZWQgd2hpbGUNCgkg KiB0aGUgZmlsZSBpcyBvcGVuIGJ5IGluY3JlbWVudGluZyB0aGUgdXNhZ2UgY291bnQNCgkgKi8N Cg0KCWRlYnVnayAoIkxFRF9PUEVOOiBtaW5vciAlZCAgZGlyPTB4JXggIHBhcj0weCV4ICBkYXQ9 MHgleFxuIiwNCgkJbWlub3IsDQoJCWxpbW1yLT5TVEFUVVNfTEVEX0RJUiwgbGltbXItPlNUQVRV U19MRURfUEFSLCBsaW1tci0+U1RBVFVTX0xFRF9EQVQpOw0KDQoJcmV0dXJuIDA7DQp9DQoNCg0K LyoNCiAqIENhbGxlZCB3aGVuIGEgcHJvY2VzcyBjbG9zZXMgdGhlIGRldmljZS4NCiAqIERvZXNu J3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBpbiB2ZXJzaW9uIDIuMC54IGJlY2F1c2UgaXQgY2FuJ3Qg ZmFpbCwNCiAqIGJ1dCBpbiB2ZXJzaW9uIDIuMi54IGl0IGlzIGFsbG93ZWQgdG8gZmFpbA0KICov DQpzdGF0aWMgaW50IHN0YXR1c2xlZF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkNCnsNCglpbnQgbWlub3IgID0gTUlOT1IoaW5vZGUtPmlfcmRldik7DQoN CglkZWJ1Z2sgKCJzdGF0dXNsZWRfcmVsZWFzZSglcCwlcClcbiIsIGlub2RlLCBmaWxlKTsNCg0K CWlmICghbGltbXIpDQoJCXJldHVybiAoLUVOT0RFVik7DQoNCgkvKiBXZSdyZSBub3cgcmVhZHkg Zm9yIG91ciBuZXh0IGNhbGxlciAqLw0KCWlmIChtaW5vciA8IE1BWF9MRURfREVWKSB7DQoJCWxl ZF9kZXZbbWlub3JdLmZsYWdzICY9IH5TTF9GTEFHX09QRU47DQoJfQ0KDQoJZGVidWdrICgiTEVE X0NMT1NFOiBkaXI9MHgleCBwYXI9MHgleCBkYXQ9MHgleFxuIiwNCgkJbGltbXItPlNUQVRVU19M RURfRElSLCBsaW1tci0+U1RBVFVTX0xFRF9QQVIsIGxpbW1yLT5TVEFUVVNfTEVEX0RBVCk7DQoN CglyZXR1cm4gMDsNCn0NCg0KI2lmIGRlZmluZWQoQ09ORklHX0lWTVM4KSB8fCBkZWZpbmVkKENP TkZJR19JVk1MMjQpDQovKg0KICogcmVhZCBlbnRyeSBwb2ludDoNCiAqIE9ubHkgc3VwcG9ydGVk IGZvciBpbnRlcmxvY2sgc3dpdGNoIChyZXR1cm4gRU5YSU8gZm9yIExFRCBkZXZpY2VzKS4NCiAq IEZvciB0aGUgaWxvY2sgc3dpdGNoLCBibG9jayB1bnRpbCB0aGUgbmV4dCBzdGF0dXMgY2hhbmdl IGhhcHBlbnM7DQogKiB0aGVuIHJldHVybiBleGFjdGx5IG9uZSBieXRlIGNvbnRhaW5pbmcgdGhl IGN1cnJlbnQgc3RhdGUNCiAqICgweDAwIHN3aXRjaCBvcGVuLCAweDAxIHN3aXRjaCBjbG9zZWQp Lg0KICovDQpzdGF0aWMgc3NpemVfdCBzdGF0dXNsZWRfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUs DQoJCQkgICAgICAgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykNCnsNCglE RUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsNCglpbnQgbWlub3IgPSBNSU5PUihmaWxl LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsNCglpbnQgcmMgPSAwOw0KCWNoYXIgYzsNCg0K CWlmIChtaW5vciAhPSBNQVhfTEVEX0RFVikNCgkJcmV0dXJuICgtRU5YSU8pOw0KDQoJYWRkX3dh aXRfcXVldWUoJnN0YXR1c2xlZF93YWl0LCAmd2FpdCk7DQoNCgljdXJyZW50LT5zdGF0ZSA9IFRB U0tfSU5URVJSVVBUSUJMRTsNCg0KCWZvciAoOzspIHsNCgkJaWYgKGNoYW5nZWRfaW9fc3RhdGUp DQoJCQlicmVhazsNCg0KCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsNCgkJCXJj ID0gLUVBR0FJTjsNCgkJCWdvdG8gT1VUOw0KCQl9DQoNCgkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1 cnJlbnQpKSB7DQoJCQlyYyA9IC1FUkVTVEFSVFNZUzsNCgkJCWdvdG8gT1VUOw0KCQl9DQoNCgkJ c2NoZWR1bGUgKCk7DQoJfQ0KDQoJc3Bpbl9sb2NrICgmc3RhdHVzbGVkX2xvY2spOw0KCWMgPSAo Y2hhcilzdGF0dXNfaW9fdGVzdCAoKTsNCgljaGFuZ2VkX2lvX3N0YXRlID0gMDsNCglzcGluX3Vu bG9jayAoJnN0YXR1c2xlZF9sb2NrKTsNCg0KCS8qIENvcHkgb3V0ICovDQoJaWYgKChyYyA9IHZl cmlmeV9hcmVhKFZFUklGWV9XUklURSwgYnVmLCAxKSkgIT0gMCkgew0KCQlnb3RvIE9VVDsNCgl9 DQoNCiAgICAgICAgcmMgPSAxOyBjb3B5X3RvX3VzZXIoKHZvaWQgKilidWYsICh2b2lkKikoJmMp LCByYyk7DQoNCk9VVDoNCiAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7DQog ICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZzdGF0dXNsZWRfd2FpdCwgJndhaXQpOw0KDQoJcmV0 dXJuIChyYyk7DQp9DQoNCnN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhdHVzbGVkX3BvbGwgKHN0cnVj dCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQ0Kew0KCXBvbGxfd2FpdChmaWxlLCAmc3Rh dHVzbGVkX3dhaXQsIHdhaXQpOw0KDQoJaWYgKGNoYW5nZWRfaW9fc3RhdGUpDQoJCXJldHVybiBQ T0xMSU4gfCBQT0xMUkROT1JNOw0KDQoJcmV0dXJuIDA7DQp9DQoNCiNlbmRpZgkvKiBDT05GSUdf SVZNUzgsIENPTkZJR19JVk1MMjQgKi8NCg0KLyoNCiAqIGlvY3RsIGVudHJ5IHBvaW50Og0KICov DQoNCnN0YXRpYyBzc2l6ZV90IHN0YXR1c2xlZF9pb2N0bCAoDQoJc3RydWN0IGlub2RlICppbm9k ZSwNCglzdHJ1Y3QgZmlsZSAqZmlsZSwNCgl1bnNpZ25lZCBpbnQgY21kLA0KCXVuc2lnbmVkIGxv bmcgYXJnKQ0Kew0KCWludCBtaW5vciAgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsNCglpbnQgbjsN Cg0KCWlmICghbGltbXIpDQoJCXJldHVybiAoLUVOT0RFVik7DQoNCglkZWJ1Z2sgKCJJT0NUTDog bWlub3I9JWQsIGNtZD0lcywgYXJnPSVsZFxuIiwNCgkJbWlub3IsDQoJCShjbWQgPT0gU1RBVFVT TEVEX0dFVCAgICkgPyAiU1RBVFVTTEVEX0dFVCIgICAgOg0KCQkoY21kID09IFNUQVRVU0xFRF9T RVQgICApID8gIlNUQVRVU0xFRF9TRVQiICAgIDoNCgkJKGNtZCA9PSBTVEFUVVNMRURfUEVSSU9E KSA/ICJTVEFUVVNMRURfUEVSSU9EIiA6DQoJCSI8dW5rbm93bj4iLA0KCQlhcmcpOw0KDQoJaWYg KG1pbm9yIDwgTUFYX0xFRF9ERVYpIHsNCgkJc3dpdGNoIChjbWQpIHsNCgkJY2FzZSBTVEFUVVNM RURfR0VUOg0KCQkJc3dpdGNoIChsZWRfZGV2W21pbm9yXS5zdGF0ZSkgew0KCQkJY2FzZSBTVEFU VVNfTEVEX09GRjoJbiA9ICAwOw0KCQkJCQkJYnJlYWs7DQoJCQljYXNlIFNUQVRVU19MRURfT046 CW4gPSAtMTsNCgkJCQkJCWJyZWFrOw0KCQkJZGVmYXVsdDoJCW4gPSBsZWRfZGV2W21pbm9yXS5w ZXJpb2Q7DQoJCQkJCQlicmVhazsNCgkJCX0NCgkJCXJldHVybiAoY29weV90b191c2VyKChpbnQg KilhcmcsICZuLCBzaXplb2YgKGludCkpKTsNCgkJY2FzZSBTVEFUVVNMRURfU0VUOg0KCQkJc3dp dGNoIChhcmcpIHsNCgkJCWNhc2UgU1RBVFVTX0xFRF9PRkY6DQoJCQkJZGVidWdrICgiSU9DVEw6 IHdhcyAlZCwgc2V0ICVsZD1PRkZcbiIsDQoJCQkJCWxlZF9kZXZbbWlub3JdLnN0YXRlLCBhcmcp Ow0KCQkJCWlmIChsZWRfZGV2W21pbm9yXS5zdGF0ZSA9PSBTVEFUVVNfTEVEX0JMSU5LSU5HKQ0K CQkJCQlkZWxfdGltZXIoJmxlZF9kZXZbbWlub3JdLnRpbWVyKTsNCgkJCQlsZWRfZGV2W21pbm9y XS5zdGF0ZSA9IGFyZzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGxlZF9k ZXZbbWlub3JdLnBvbCA9PSAwICkNCgkJCQkgIGxlZF9kZXZbbWlub3JdLmlwdHItPmlvcF9wZGF0 eCB8PSAgIGxlZF9kZXZbbWlub3JdLm1hc2sgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlDQoJCQkJICBsZWRfZGV2W21pbm9yXS5pcHRyLT5pb3BfcGRhdHggJj0gfihsZWRf ZGV2W21pbm9yXS5tYXNrKTsNCg0KCQkJCXJldHVybiAoMCk7DQoJCQljYXNlIFNUQVRVU19MRURf T046DQoJCQkJZGVidWdrICgiSU9DVEw6IHdhcyAlZCwgc2V0ICVsZD1PTlxuIiwNCgkJCQkJbGVk X2RldlttaW5vcl0uc3RhdGUsIGFyZyk7DQoJCQkJaWYgKGxlZF9kZXZbbWlub3JdLnN0YXRlID09 IFNUQVRVU19MRURfQkxJTktJTkcpDQoJCQkJCWRlbF90aW1lcigmbGVkX2RldlttaW5vcl0udGlt ZXIpOw0KCQkJCWxlZF9kZXZbbWlub3JdLnN0YXRlID0gYXJnOw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiggbGVkX2RldlttaW5vcl0ucG9sID09IDAgKQ0KCQkJCSAgbGVkX2Rl dlttaW5vcl0uaXB0ci0+aW9wX3BkYXR4ICY9IH4obGVkX2RldlttaW5vcl0ubWFzayk7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCgkJCQkgIGxlZF9kZXZbbWlub3JdLmlw dHItPmlvcF9wZGF0eCB8PSAgIGxlZF9kZXZbbWlub3JdLm1hc2sgOw0KDQoJCQkJcmV0dXJuICgw KTsNCgkJCWNhc2UgU1RBVFVTX0xFRF9CTElOS0lORzoNCgkJCQlkZWJ1Z2sgKCJJT0NUTDogd2Fz ICVkLCBzZXQgJWxkPUJMSU5LSU5HXG4iLA0KCQkJCQlsZWRfZGV2W21pbm9yXS5zdGF0ZSwgYXJn KTsNCgkJCQlpZiAobGVkX2RldlttaW5vcl0uc3RhdGUgPT0gU1RBVFVTX0xFRF9CTElOS0lORykN CgkJCQkJcmV0dXJuICgwKTsNCgkJCQlsZWRfZGV2W21pbm9yXS5zdGF0ZSA9IGFyZzsgLyogbXVz dCBjb21lIGZpcnN0ISAqLw0KCQkJCS8qIHN0YXJ0IGJsaW5raW5nICovDQoJCQkJc3RhdHVzbGVk X2JsaW5rIChtaW5vcik7DQoJCQkJcmV0dXJuICgwKTsNCgkJCX0NCgkJCXJldHVybiAoLUVJTlZB TCk7DQoJCWNhc2UgU1RBVFVTTEVEX1BFUklPRDoNCgkJCWxlZF9kZXZbbWlub3JdLnBlcmlvZCA9 IGFyZzsNCgkJCWRlYnVnayAoIklPQ1RMOiBzZXQgUEVSSU9EPSVkXG4iLCBhcmcpOw0KCQkJcmV0 dXJuICgwKTsNCgkJfQ0KCX0NCiNpZiBkZWZpbmVkKENPTkZJR19JVk1TOCkgfHwgZGVmaW5lZChD T05GSUdfSVZNTDI0KQ0KCWVsc2Ugew0KCQlpbnQgbSA9IG1pbm9yIC0gTUFYX0xFRF9ERVY7DQoN CgkJc3dpdGNoIChtKSB7DQoJCWNhc2UgMDoJCS8qIEludGVybG9jayBzd2l0Y2ggYW5kIGRldmlj ZSByZXNldCBtb25pdG9yICovDQoJCSAgICBpZiAoY21kID09IFNUQVRVU19TV0lUQ0hfR0VUKSB7 DQoJCQluID0gc3RhdHVzX2lvX3Rlc3QgKCk7DQoJCQlyZXR1cm4gKGNvcHlfdG9fdXNlcigoaW50 ICopYXJnLCAmbiwgc2l6ZW9mIChpbnQpKSk7DQoJCSAgICB9DQoJCSAgICBicmVhazsNCgkJY2Fz ZSAxOgkJLyogRGV2aWNlIHJlc2V0IGVuYWJsZSBvdXRwdXQgKi8NCgkJICAgIGlmIChjbWQgPT0g U1RBVFVTX1JFU0VUX0dFVCkgew0KCQkJaWYgKGxpbW1yLT5pbV9pb3BvcnQuaW9wX3BjZGF0ICYg U1RBVFVTX1JFU0VUX0VOQSkgew0KCQkJCW4gPSAxOw0KCQkJfSBlbHNlIHsNCgkJCQluID0gMDsN CgkJCX0NCgkJCXJldHVybiAoY29weV90b191c2VyKChpbnQgKilhcmcsICZuLCBzaXplb2YgKGlu dCkpKTsNCgkJICAgIH0NCgkJICAgIGlmIChjbWQgPT0gU1RBVFVTX1JFU0VUX1NFVCkgew0KCQkJ aWYgKGFyZyA9PSAwKSB7DQoJCQkJbGltbXItPmltX2lvcG9ydC5pb3BfcGNkYXQgJj0gflNUQVRV U19SRVNFVF9FTkE7DQoJCQl9IGVsc2Ugew0KCQkJCWxpbW1yLT5pbV9pb3BvcnQuaW9wX3BjZGF0 IHw9ICBTVEFUVVNfUkVTRVRfRU5BOw0KCQkJfQ0KCQkJcmV0dXJuICgwKTsNCgkJICAgIH0NCgkJ ICAgIGJyZWFrOw0KCQlkZWZhdWx0Og0KCQkgICAgYnJlYWs7DQoJCX0NCgl9DQojZW5kaWYNCgly ZXR1cm4gKC1FSU5WQUwpOw0KfQ0KDQojaWYgZGVmaW5lZChDT05GSUdfSVZNUzgpIHx8IGRlZmlu ZWQoQ09ORklHX0lWTUwyNCkNCi8qDQogKiBUZXN0IHN0YXR1cyBvZiBpbnRlcmxvY2sgc3dpdGNo DQogKi8NCnN0YXRpYyBpbnQgIHN0YXR1c19pb190ZXN0ICh2b2lkKQ0Kew0KCWludCBuID0gMDsN Cg0KI2lmIGRlZmluZWQoQ09ORklHX0lWTVM4KQ0KCXNwaW5fbG9jayAoJnN0YXR1c2xlZF9sb2Nr KTsNCglpZiAoKGxpbW1yLT5pbV9zaXVfY29uZi5zY19zaXBlbmQgJiBTVEFUVVNfSUxPQ0tfU1dJ VENIKSAhPSAwKQ0KCQluIHw9IFNUQVRVU19JTE9DS19CSVQ7DQoJbGltbXItPmltX3NpdV9jb25m LnNjX3NpcGVuZCA9IFNUQVRVU19JTE9DS19TV0lUQ0g7DQoJc3Bpbl91bmxvY2sgKCZzdGF0dXNs ZWRfbG9jayk7DQojZWxpZiBkZWZpbmVkKENPTkZJR19JVk1MMjQpDQoJaWYgKChsaW1tci0+aW1f Y3BtLmNwX3BiZGF0ICYgU1RBVFVTX0lMT0NLX1NXSVRDSCkgIT0gMCkNCgkJbiB8PSBTVEFUVVNf SUxPQ0tfQklUOw0KI2VuZGlmDQoJaWYgKChsaW1tci0+aW1faW9wb3J0LmlvcF9wY2RhdCAmIFNU QVRVU19SRVNFVF9NT04pICE9IDApDQoJCW4gfD0gU1RBVFVTX1JFU0VUX01PTl9CSVQ7DQoJcmV0 dXJuIChuKTsNCn0NCg0Kc3RhdGljIHZvaWQgc3RhdHVzX2lvX3BvbGwgKHVuc2lnbmVkIGxvbmcg cGVyaW9kKQ0Kew0KCWNoYXIgYzsNCg0KCXNwaW5fbG9jayAoJnN0YXR1c2xlZF9sb2NrKTsNCglj ID0gKGNoYXIpc3RhdHVzX2lvX3Rlc3QgKCk7DQoJaWYgKGMgIT0gbGFzdF9pb19zdGF0ZSkgew0K CQlsYXN0X2lvX3N0YXRlID0gYzsNCgkJY2hhbmdlZF9pb19zdGF0ZSA9IDE7DQoJfQ0KCXNwaW5f dW5sb2NrICgmc3RhdHVzbGVkX2xvY2spOw0KDQoJaWYgKGNoYW5nZWRfaW9fc3RhdGUpDQoJCXdh a2VfdXBfaW50ZXJydXB0aWJsZSgmc3RhdHVzbGVkX3dhaXQpOw0KDQoJaW5pdF90aW1lcigmaW9f dGltZXIpOw0KCWlvX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgaW9fdGltZXIuZGF0YTsNCglh ZGRfdGltZXIoJmlvX3RpbWVyKTsNCn0NCiNlbmRpZgkvKiBDT05GSUdfSVZNUzgsIENPTkZJR19J Vk1MMjQgKi8NCg0KDQovKg0KICogVGltZXIgY29udHJvbGxlZCBibGluayBlbnRyeSBwb2ludC4N CiAqDQogKiBXZSBkZWxldGUgdGhlIHRpbWVyIHdoZW4gdGhlIHN0YXR1cyBpcyBjaGFuZ2VkIHRv IG5vbi1ibGlua2luZw0KICogb3Igd2hlbiB0aGUgbW9kdWxlIGlzIHVubG9hZGVkLg0KICovDQpz dGF0aWMgdm9pZCBzdGF0dXNsZWRfYmxpbmsgKHVuc2lnbmVkIGxvbmcgbWlub3IpDQp7DQoJdW5z aWduZWQgbG9uZyBmbGFnczsNCg0KCWlmICghbGltbXIpDQoJCXJldHVybjsNCg0KICAgICAgICBp ZiAobGVkX2RldlttaW5vcl0uc3RhdGUgIT0gU1RBVFVTX0xFRF9CTElOS0lORykgew0KCQkvKiBk b24ndCBjaGFuZ2UgYW55IG1vcmUgKi8NCgkJcmV0dXJuOw0KCX0NCg0KCWxpbW1yLT5TVEFUVVNf TEVEX0RBVCBePSBsZWRfZGV2W21pbm9yXS5tYXNrOw0KDQoJc2F2ZV9mbGFncyhmbGFncyk7DQoJ Y2xpKCk7DQoNCglpbml0X3RpbWVyKCZsZWRfZGV2W21pbm9yXS50aW1lcik7DQoJbGVkX2Rldltt aW5vcl0udGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBsZWRfZGV2W21pbm9yXS5wZXJpb2Q7DQoJ YWRkX3RpbWVyKCZsZWRfZGV2W21pbm9yXS50aW1lcik7DQoNCglyZXN0b3JlX2ZsYWdzKGZsYWdz KTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKioqKiBNb2R1bGUg RGVjbGFyYXRpb25zICoqKioqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQpt b2R1bGVfaW5pdCAoc3RhdHVzbGVkX2luaXQpOw0KDQojaWZkZWYgTU9EVUxFDQovKg0KICogQ2xl YW51cCAtIHVucmVnaXN0ZXIgdGhlIGRyaXZlcg0KICovDQp2b2lkIHN0YXR1c2xlZF9jbGVhbnVw ICh2b2lkKQ0Kew0KCWludCBtaW5vciwgcmV0Ow0KDQoJLyoNCgkgKiBDbGVhbnVwIHRpbWVyDQoJ ICovDQoJZm9yIChtaW5vcj0wOyBtaW5vcjxNQVhfTEVEX0RFVjsgKyttaW5vcikgew0KCQlpZiAo bGVkX2RldlttaW5vcl0uc3RhdGUgPT0gU1RBVFVTX0xFRF9CTElOS0lORykNCgkJCWRlbF90aW1l cigmbGVkX2RldlttaW5vcl0udGltZXIpOw0KICAgICAgICAgICAgICAgIGlmKCBsZWRfZGV2W21p bm9yXS5wb2wgPT0gMCApDQogIAkJICBsZWRfZGV2W21pbm9yXS5pcHRyLT5pb3BfcGRhdHggfD0g ICBsZWRfZGV2W21pbm9yXS5tYXNrIDsNCiAgICAgICAgICAgICAgICBlbHNlDQoJCSAgbGVkX2Rl dlttaW5vcl0uaXB0ci0+aW9wX3BkYXR4ICY9IH4obGVkX2RldlttaW5vcl0ubWFzayk7DQoNCgkJ bGVkX2RldlttaW5vcl0uc3RhdGUgPSBTVEFUVVNfTEVEX09GRjsNCgl9DQojaWYgZGVmaW5lZChD T05GSUdfSVZNUzgpIHx8IGRlZmluZWQoQ09ORklHX0lWTUwyNCkNCglkZWxfdGltZXIoJmlvX3Rp bWVyKTsNCiNlbmRpZgkvKiBDT05GSUdfSVZNUzgsIENPTkZJR19JVk1MMjQgKi8NCg0KCS8qDQoJ ICogVW5yZWdpc3RlciB0aGUgZGV2aWNlDQoJICovDQoJcmV0ID0gdW5yZWdpc3Rlcl9jaHJkZXYg KE1ham9yLCBERVZJQ0VfTkFNRSk7DQoNCgkvKg0KCSAqIElmIHRoZXJlJ3MgYW4gZXJyb3IsIHJl cG9ydCBpdA0KCSAqLw0KCWlmIChyZXQgPCAwKSB7DQoJCXByaW50ayAoInVucmVnaXN0ZXJfY2hy ZGV2OiBlcnJvciAlZFxuIiwgcmV0KTsNCgl9DQp9DQoNCm1vZHVsZV9leGl0IChzdGF0dXNsZWRf Y2xlYW51cCk7DQoNCk1PRFVMRV9ERVNDUklQVElPTigiUkNCODI3MCBsZWQgJiByZWxheSBkcml2 ZXIiKTsNCk1PRFVMRV9BVVRIT1IoIkhhbnMgU2NoaWxsc3Ryb20gTFBHIEFsbGdvbiBBQiA8aGFu cy5zY2hpbGxzdHJvbUBwd2F2LmNvbT4iKTsNCk1PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCg0KI2Vu ZGlmCS8qIE1PRFVMRSAqLw0K --=-yeO7sfKHcDE1vOPQNwja--