From mboxrd@z Thu Jan 1 00:00:00 1970 Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 01 May 2006 20:09:52 +0100 (BST) Received: from h081217049130.dyn.cm.kabsi.at ([81.217.49.130]:59064 "EHLO phobos.hvrlab.org") by ftp.linux-mips.org with ESMTP id S8133466AbWEATJe (ORCPT ); Mon, 1 May 2006 20:09:34 +0100 Received: from mini.intra (dhcp-1432-30.blizz.at [213.143.126.4]) (authenticated bits=0) by phobos.hvrlab.org (8.13.4/8.13.4/Debian-3sarge1) with ESMTP id k41J9D8P000542 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NOT); Mon, 1 May 2006 21:09:18 +0200 Subject: RFC: au1000_etc.c phylib rewrite From: Herbert Valerio Riedel To: Pete Popov Cc: sshtylyov@ru.mvista.com, linux-mips@linux-mips.org, jgarzik@pobox.com Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-CRavCE66iNmA7KvOUpw4" Organization: Free Software Foundation Date: Mon, 01 May 2006 21:09:02 +0200 Message-Id: <1146510542.16643.10.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.6.1 X-Virus-Scanned: ClamAV 0.88.1/1433/Mon May 1 10:10:05 2006 on phobos.hvrlab.org X-Virus-Status: Clean Return-Path: X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0) X-Orcpt: rfc822;linux-mips@linux-mips.org Original-Recipient: rfc822;linux-mips@linux-mips.org X-archive-position: 11251 X-ecartis-version: Ecartis v1.0.0 Sender: linux-mips-bounce@linux-mips.org Errors-to: linux-mips-bounce@linux-mips.org X-original-sender: hvr@gnu.org Precedence: bulk X-list: linux-mips --=-CRavCE66iNmA7KvOUpw4 Content-Type: multipart/mixed; boundary="=-ASCzkIEkSfwkp9HUWIX1" --=-ASCzkIEkSfwkp9HUWIX1 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable hello *, I've started to rewrite the au1000_eth.c driver to make use of the new PHY framework in 2.6.x; see the attached patch for the current work in progress state; I'm a bit unsure what to do about those workarounds/hacks that are in the original au1000_eth.c driver (e.g. for the broadcom dual PHY); any comments/ideas? shall I continue work on this au1xxx-eth phylib-rewrite, or is it of no use? regards, hvr --=-ASCzkIEkSfwkp9HUWIX1 Content-Disposition: attachment; filename=au1000_eth_rewrite.patch Content-Type: text/x-patch; name=au1000_eth_rewrite.patch; charset=UTF-8 Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnDQpp bmRleCAxZWRjYzBjLi45M2Y2ZWYwIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZw0K KysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZw0KQEAgLTQ1NSw2ICs0NTUsNyBAQCBjb25maWcgTUlQ U19HVDk2MTAwRVRIDQogY29uZmlnIE1JUFNfQVUxWDAwX0VORVQNCiAJYm9vbCAiTUlQUyBBVTEw MDAgRXRoZXJuZXQgc3VwcG9ydCINCiAJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgU09DX0FV MVgwMA0KKwlzZWxlY3QgUEhZTElCDQogCXNlbGVjdCBDUkMzMg0KIAloZWxwDQogCSAgSWYgeW91 IGhhdmUgYW4gQWxjaGVteSBTZW1pIEFVMVgwMCBiYXNlZCBzeXN0ZW0NCmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMNCmluZGV4 IDA4MjNjYjguLmE4NmIxOTAgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMN CisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYw0KQEAgLTUzLDYgKzUzLDcgQEANCiAjaW5j bHVkZSA8bGludXgvc2tidWZmLmg+DQogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQogI2luY2x1 ZGUgPGxpbnV4L2NyYzMyLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPg0KICNpbmNsdWRlIDxh c20vbWlwc3JlZ3MuaD4NCiAjaW5jbHVkZSA8YXNtL2lycS5oPg0KICNpbmNsdWRlIDxhc20vaW8u aD4NCkBAIC04OCwxNCArODksMTIgQEAgc3RhdGljIGludCBhdTEwMDBfdHgoc3RydWN0IHNrX2J1 ZmYgKiwgcw0KIHN0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICopOw0KIHN0 YXRpYyBpcnFyZXR1cm5fdCBhdTEwMDBfaW50ZXJydXB0KGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRf cmVncyAqKTsNCiBzdGF0aWMgdm9pZCBhdTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2Rldmlj ZSAqKTsNCi1zdGF0aWMgaW50IGF1MTAwMF9zZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTsNCiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3Qg bmV0X2RldmljZSAqKTsNCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF1MTAwMF9n ZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7DQotc3RhdGljIHZvaWQgYXUxMDAwX3RpbWVy KHVuc2lnbmVkIGxvbmcpOw0KIHN0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2 aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOw0KIHN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVj dCBuZXRfZGV2aWNlICosIGludCwgaW50KTsNCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVj dCBuZXRfZGV2aWNlICosIGludCwgaW50LCB1MTYpOw0KLXN0YXRpYyB2b2lkIGR1bXBfbWlpKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQpOw0KK3N0YXRpYyB2b2lkIGF1MTAwMF9h ZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCiANCiAvLyBleHRlcm5zDQogZXh0 ZXJuICB2b2lkIGFja19yaXNlX2VkZ2VfaXJxKHVuc2lnbmVkIGludCk7DQpAQCAtMTM1LDY1OCAr MTM0LDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGF1MTAwMF9tYWNfYWRkcls2XSANCiANCiBz dHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1X21hY3NbTlVNX0VUSF9JTlRFUkZBQ0VTXTsNCiANCi0v KiBGSVhNRSANCi0gKiBBbGwgb2YgdGhlIFBIWSBjb2RlIHJlYWxseSBzaG91bGQgYmUgZGV0YWNo ZWQgZnJvbSB0aGUgTUFDIA0KLSAqIGNvZGUuDQotICovDQotDQotLyogRGVmYXVsdCBhZHZlcnRp c2UgKi8NCi0jZGVmaW5lIEdFTk1JSV9ERUZBVUxUX0FEVkVSVElTRSBcDQotCUFEVkVSVElTRURf MTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfCBcDQotCUFEVkVSVElTRURf MTAwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8IFwNCi0JQURWRVJUSVNF RF9BdXRvbmVnDQotDQotI2RlZmluZSBHRU5NSUlfREVGQVVMVF9GRUFUVVJFUyBcDQotCVNVUFBP UlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwgXA0KLQlTVVBQT1JU RURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgXA0KLQlTVVBQT1JU RURfQXV0b25lZw0KLQ0KLWludCBiY21fNTIwMV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs IGludCBwaHlfYWRkcikNCi17DQotCXMxNiBkYXRhOw0KLQkNCi0JLyogU3RvcCBhdXRvLW5lZ290 aWF0aW9uICovDQotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wp Ow0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBkYXRhICYgfk1JSV9D TlRMX0FVVE8pOw0KLQ0KLQkvKiBTZXQgYWR2ZXJ0aXNlbWVudCB0byAxMC8xMDAgYW5kIEhhbGYv RnVsbCBkdXBsZXgNCi0JICogKGZ1bGwgY2FwYWJpbGl0aWVzKSAqLw0KLQlkYXRhID0gbWRpb19y ZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9BTkFEVik7DQotCWRhdGEgfD0gTUlJX05XQVlfVFggfCBN SUlfTldBWV9UWF9GRFggfCBNSUlfTldBWV9UX0ZEWCB8IE1JSV9OV0FZX1Q7DQotCW1kaW9fd3Jp dGUoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWLCBkYXRhKTsNCi0JDQotCS8qIFJlc3RhcnQgYXV0 by1uZWdvdGlhdGlvbiAqLw0KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9D T05UUk9MKTsNCi0JZGF0YSB8PSBNSUlfQ05UTF9SU1RfQVVUTyB8IE1JSV9DTlRMX0FVVE87DQot CW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEpOw0KLQ0KLQlpZiAo YXUxMDAwX2RlYnVnID4gNCkgDQotCQlkdW1wX21paShkZXYsIHBoeV9hZGRyKTsNCi0JcmV0dXJu IDA7DQotfQ0KLQ0KLWludCBiY21fNTIwMV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBp bnQgcGh5X2FkZHIpDQotew0KLQlzMTYgbWlpX2NvbnRyb2wsIHRpbWVvdXQ7DQotCQ0KLQltaWlf Y29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCW1kaW9f d3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIG1paV9jb250cm9sIHwgTUlJX0NOVExf UkVTRVQpOw0KLQltZGVsYXkoMSk7DQotCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7 IC0tdGltZW91dCkgew0KLQkJbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwg TUlJX0NPTlRST0wpOw0KLQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAw KQ0KLQkJCWJyZWFrOw0KLQkJbWRlbGF5KDEpOw0KLQl9DQotCWlmIChtaWlfY29udHJvbCAmIE1J SV9DTlRMX1JFU0VUKSB7DQotCQlwcmludGsoS0VSTl9FUlIgIiVzIFBIWSByZXNldCB0aW1lb3V0 ICFcbiIsIGRldi0+bmFtZSk7DQotCQlyZXR1cm4gLTE7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0K LQ0KLWludCANCi1iY21fNTIwMV9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBo eV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpDQotew0KLQl1MTYgbWlpX2RhdGE7DQotCXN0 cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOw0KLQ0KLQlpZiAoIWRldikgew0KLQkJcHJpbnRrKEtF Uk5fRVJSICJiY21fNTIwMV9zdGF0dXMgZXJyb3I6IE5VTEwgZGV2XG4iKTsNCi0JCXJldHVybiAt MTsNCi0JfQ0KLQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsNCi0N Ci0JbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfU1RBVFVTKTsN Ci0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElOSykgew0KLQkJKmxpbmsgPSAxOw0KLQkJbWlp X2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQVVYX0NOVFJMKTsNCi0J CWlmIChtaWlfZGF0YSAmIE1JSV9BVVhfMTAwKSB7DQotCQkJaWYgKG1paV9kYXRhICYgTUlJX0FV WF9GRFgpIHsNCi0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7DQotCQkJCWRldi0+aWZf cG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQkJCX0NCi0JCQllbHNlIHsNCi0JCQkJKnNwZWVk ID0gSUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFT RVRYOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UgIHsNCi0JCQkqc3BlZWQgPSBJRl9QT1JUXzEwQkFT RVQ7DQotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOw0KLQkJfQ0KLQ0KLQl9DQot CWVsc2Ugew0KLQkJKmxpbmsgPSAwOw0KLQkJKnNwZWVkID0gMDsNCi0JCWRldi0+aWZfcG9ydCA9 IElGX1BPUlRfVU5LTk9XTjsNCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50IGxzaV84MDIy N19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikNCi17DQotCWlmIChh dTEwMDBfZGVidWcgPiA0KQ0KLQkJcHJpbnRrKCJsc2lfODAyMjdfaW5pdFxuIik7DQotDQotCS8q IHJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLw0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIs IE1JSV9DT05UUk9MLA0KLQkJICAgTUlJX0NOVExfRjEwMCB8IE1JSV9DTlRMX0FVVE8gfCBNSUlf Q05UTF9SU1RfQVVUTyk7IC8vIHwgTUlJX0NOVExfRkRYKTsNCi0JbWRlbGF5KDEpOw0KLQ0KLQkv KiBzZXQgdXAgTEVEcyB0byBjb3JyZWN0IGRpc3BsYXkgKi8NCi0jaWZkZWYgQ09ORklHX01JUFNf TVRYMQ0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIDE3LCAweGZmODApOw0KLSNlbHNlDQot CW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgMTcsIDB4ZmZjMCk7DQotI2VuZGlmDQotDQotCWlm IChhdTEwMDBfZGVidWcgPiA0KQ0KLQkJZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7DQotCXJldHVy biAwOw0KLX0NCi0NCi1pbnQgbHNpXzgwMjI3X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs IGludCBwaHlfYWRkcikNCi17DQotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsNCi0JDQotCWlm IChhdTEwMDBfZGVidWcgPiA0KSB7DQotCQlwcmludGsoImxzaV84MDIyN19yZXNldFxuIik7DQot CQlkdW1wX21paShkZXYsIHBoeV9hZGRyKTsNCi0JfQ0KLQ0KLQltaWlfY29udHJvbCA9IG1kaW9f cmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlf YWRkciwgTUlJX0NPTlRST0wsIG1paV9jb250cm9sIHwgTUlJX0NOVExfUkVTRVQpOw0KLQltZGVs YXkoMSk7DQotCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgew0K LQkJbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0K LQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQ0KLQkJCWJyZWFrOw0K LQkJbWRlbGF5KDEpOw0KLQl9DQotCWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7 DQotCQlwcmludGsoS0VSTl9FUlIgIiVzIFBIWSByZXNldCB0aW1lb3V0ICFcbiIsIGRldi0+bmFt ZSk7DQotCQlyZXR1cm4gLTE7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludA0KLWxzaV84 MDIyN19zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxp bmssIHUxNiAqc3BlZWQpDQotew0KLQl1MTYgbWlpX2RhdGE7DQotCXN0cnVjdCBhdTEwMDBfcHJp dmF0ZSAqYXVwOw0KLQ0KLQlpZiAoIWRldikgew0KLQkJcHJpbnRrKEtFUk5fRVJSICJsc2lfODAy Mjdfc3RhdHVzIGVycm9yOiBOVUxMIGRldlxuIik7DQotCQlyZXR1cm4gLTE7DQotCX0NCi0JYXVw ID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7DQotDQotCW1paV9kYXRhID0g bWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX1NUQVRVUyk7DQotCWlmIChtaWlfZGF0 YSAmIE1JSV9TVEFUX0xJTkspIHsNCi0JCSpsaW5rID0gMTsNCi0JCW1paV9kYXRhID0gbWRpb19y ZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0xTSV9QSFlfU1RBVCk7DQotCQlpZiAobWlpX2Rh dGEgJiBNSUlfTFNJX1BIWV9TVEFUX1NQRCkgew0KLQkJCWlmIChtaWlfZGF0YSAmIE1JSV9MU0lf UEhZX1NUQVRfRkRYKSB7DQotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQkJCQlk ZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsNCi0JCQl9DQotCQkJZWxzZSB7DQotCQkJ CSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRVRYOw0KLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JU XzEwMEJBU0VUWDsNCi0JCQl9DQotCQl9DQotCQllbHNlICB7DQotCQkJKnNwZWVkID0gSUZfUE9S VF8xMEJBU0VUOw0KLQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsNCi0JCX0NCi0N Ci0JfQ0KLQllbHNlIHsNCi0JCSpsaW5rID0gMDsNCi0JCSpzcGVlZCA9IDA7DQotCQlkZXYtPmlm X3BvcnQgPSBJRl9QT1JUX1VOS05PV047DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBh bTc5YzkwMV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikNCi17DQot CXByaW50aygiYW03OWM5MDFfaW5pdFxuIik7DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgYW03 OWM5MDFfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0J cHJpbnRrKCJhbTc5YzkwMV9yZXNldFxuIik7DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgDQot YW03OWM5MDFfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2 ICpsaW5rLCB1MTYgKnNwZWVkKQ0KLXsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBhbTc5Yzg3 NF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikNCi17DQotCXMxNiBk YXRhOw0KLQ0KLQkvKiA3OWM4NzQgaGFzIHF1aXQgcmVzZW1ibGVkIGJpdCBhc3NpZ25tZW50cyB0 byBCQ001MjAxICovDQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQ0KLQkJcHJpbnRrKCJhbTc5Yzg0 N19pbml0XG4iKTsNCi0NCi0JLyogU3RvcCBhdXRvLW5lZ290aWF0aW9uICovDQotCWRhdGEgPSBt ZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQltZGlvX3dyaXRlKGRldiwg cGh5X2FkZHIsIE1JSV9DT05UUk9MLCBkYXRhICYgfk1JSV9DTlRMX0FVVE8pOw0KLQ0KLQkvKiBT ZXQgYWR2ZXJ0aXNlbWVudCB0byAxMC8xMDAgYW5kIEhhbGYvRnVsbCBkdXBsZXgNCi0JICogKGZ1 bGwgY2FwYWJpbGl0aWVzKSAqLw0KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1J SV9BTkFEVik7DQotCWRhdGEgfD0gTUlJX05XQVlfVFggfCBNSUlfTldBWV9UWF9GRFggfCBNSUlf TldBWV9UX0ZEWCB8IE1JSV9OV0FZX1Q7DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJ X0FOQURWLCBkYXRhKTsNCi0JDQotCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLw0KLQlk YXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsNCi0JZGF0YSB8PSBN SUlfQ05UTF9SU1RfQVVUTyB8IE1JSV9DTlRMX0FVVE87DQotDQotCW1kaW9fd3JpdGUoZGV2LCBw aHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEpOw0KLQ0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkg ZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgYW03OWM4 NzRfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0JczE2 IG1paV9jb250cm9sLCB0aW1lb3V0Ow0KLQkNCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpDQotCQlw cmludGsoImFtNzljODc0X3Jlc2V0XG4iKTsNCi0NCi0JbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQo ZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIs IE1JSV9DT05UUk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsNCi0JbWRlbGF5KDEp Ow0KLQlmb3IgKHRpbWVvdXQgPSAxMDA7IHRpbWVvdXQgPiAwOyAtLXRpbWVvdXQpIHsNCi0JCW1p aV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsNCi0JCWlm ICgobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgPT0gMCkNCi0JCQlicmVhazsNCi0JCW1k ZWxheSgxKTsNCi0JfQ0KLQlpZiAobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgew0KLQkJ cHJpbnRrKEtFUk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOw0K LQkJcmV0dXJuIC0xOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgDQotYW03OWM4NzRf c3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1 MTYgKnNwZWVkKQ0KLXsNCi0JdTE2IG1paV9kYXRhOw0KLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUg KmF1cDsNCi0NCi0JLy8gcHJpbnRrKCJhbTc5Yzg3NF9zdGF0dXNcbiIpOw0KLQlpZiAoIWRldikg ew0KLQkJcHJpbnRrKEtFUk5fRVJSICJhbTc5Yzg3NF9zdGF0dXMgZXJyb3I6IE5VTEwgZGV2XG4i KTsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQ0KLQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRl ICopIGRldi0+cHJpdjsNCi0JbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRy LCBNSUlfU1RBVFVTKTsNCi0NCi0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElOSykgew0KLQkJ KmxpbmsgPSAxOw0KLQkJbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBN SUlfQU1EX1BIWV9TVEFUKTsNCi0JCWlmIChtaWlfZGF0YSAmIE1JSV9BTURfUEhZX1NUQVRfU1BE KSB7DQotCQkJaWYgKG1paV9kYXRhICYgTUlJX0FNRF9QSFlfU1RBVF9GRFgpIHsNCi0JCQkJKnNw ZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7DQotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAw QkFTRUZYOw0KLQkJCX0NCi0JCQllbHNlIHsNCi0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNF VFg7DQotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRYOw0KLQkJCX0NCi0JCX0N Ci0JCWVsc2Ugew0KLQkJCSpzcGVlZCA9IElGX1BPUlRfMTBCQVNFVDsNCi0JCQlkZXYtPmlmX3Bv cnQgPSBJRl9QT1JUXzEwQkFTRVQ7DQotCQl9DQotDQotCX0NCi0JZWxzZSB7DQotCQkqbGluayA9 IDA7DQotCQkqc3BlZWQgPSAwOw0KLQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOw0K LQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgbHh0OTcxYV9pbml0KHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsIGludCBwaHlfYWRkcikNCi17DQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQ0KLQkJ cHJpbnRrKCJseHQ5NzFhX2luaXRcbiIpOw0KLQ0KLQkvKiByZXN0YXJ0IGF1dG8tbmVnb3RpYXRp b24gKi8NCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwNCi0JCSAgIE1J SV9DTlRMX0YxMDAgfCBNSUlfQ05UTF9BVVRPIHwgTUlJX0NOVExfUlNUX0FVVE8gfCBNSUlfQ05U TF9GRFgpOw0KLQ0KLQkvKiBzZXQgdXAgTEVEcyB0byBjb3JyZWN0IGRpc3BsYXkgKi8NCi0JbWRp b193cml0ZShkZXYsIHBoeV9hZGRyLCAyMCwgMHgwNDIyKTsNCi0NCi0JaWYgKGF1MTAwMF9kZWJ1 ZyA+IDQpDQotCQlkdW1wX21paShkZXYsIHBoeV9hZGRyKTsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0K LWludCBseHQ5NzFhX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikN Ci17DQotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsNCi0JDQotCWlmIChhdTEwMDBfZGVidWcg PiA0KSB7DQotCQlwcmludGsoImx4dDk3MWFfcmVzZXRcbiIpOw0KLQkJZHVtcF9taWkoZGV2LCBw aHlfYWRkcik7DQotCX0NCi0NCi0JbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRk ciwgTUlJX0NPTlRST0wpOw0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9M LCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsNCi0JbWRlbGF5KDEpOw0KLQlmb3IgKHRp bWVvdXQgPSAxMDA7IHRpbWVvdXQgPiAwOyAtLXRpbWVvdXQpIHsNCi0JCW1paV9jb250cm9sID0g bWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsNCi0JCWlmICgobWlpX2NvbnRy b2wgJiBNSUlfQ05UTF9SRVNFVCkgPT0gMCkNCi0JCQlicmVhazsNCi0JCW1kZWxheSgxKTsNCi0J fQ0KLQlpZiAobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgew0KLQkJcHJpbnRrKEtFUk5f RVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOw0KLQkJcmV0dXJuIC0x Ow0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQNCi1seHQ5NzFhX3N0YXR1cyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIHUxNiAqbGluaywgdTE2ICpzcGVlZCkNCi17 DQotCXUxNiBtaWlfZGF0YTsNCi0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXA7DQotDQotCWlm ICghZGV2KSB7DQotCQlwcmludGsoS0VSTl9FUlIgImx4dDk3MWFfc3RhdHVzIGVycm9yOiBOVUxM IGRldlxuIik7DQotCQlyZXR1cm4gLTE7DQotCX0NCi0JYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJp dmF0ZSAqKSBkZXYtPnByaXY7DQotDQotCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5w aHlfYWRkciwgTUlJX1NUQVRVUyk7DQotCWlmIChtaWlfZGF0YSAmIE1JSV9TVEFUX0xJTkspIHsN Ci0JCSpsaW5rID0gMTsNCi0JCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRk ciwgTUlJX0lOVEVMX1BIWV9TVEFUKTsNCi0JCWlmIChtaWlfZGF0YSAmIE1JSV9JTlRFTF9QSFlf U1RBVF9TUEQpIHsNCi0JCQlpZiAobWlpX2RhdGEgJiBNSUlfSU5URUxfUEhZX1NUQVRfRkRYKSB7 DQotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQkJCQlkZXYtPmlmX3BvcnQgPSBJ Rl9QT1JUXzEwMEJBU0VGWDsNCi0JCQl9DQotCQkJZWxzZSB7DQotCQkJCSpzcGVlZCA9IElGX1BP UlRfMTAwQkFTRVRYOw0KLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VUWDsNCi0J CQl9DQotCQl9DQotCQllbHNlICB7DQotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOw0KLQkJ CWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsNCi0JCX0NCi0NCi0JfQ0KLQllbHNlIHsN Ci0JCSpsaW5rID0gMDsNCi0JCSpzcGVlZCA9IDA7DQotCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JU X1VOS05PV047DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBrczg5OTVtX2luaXQoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0JczE2IGRhdGE7DQotCQ0K LS8vCXByaW50aygia3M4OTk1bV9pbml0XG4iKTsNCi0JLyogU3RvcCBhdXRvLW5lZ290aWF0aW9u ICovDQotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQlt ZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBkYXRhICYgfk1JSV9DTlRMX0FV VE8pOw0KLQ0KLQkvKiBTZXQgYWR2ZXJ0aXNlbWVudCB0byAxMC8xMDAgYW5kIEhhbGYvRnVsbCBk dXBsZXgNCi0JICogKGZ1bGwgY2FwYWJpbGl0aWVzKSAqLw0KLQlkYXRhID0gbWRpb19yZWFkKGRl diwgcGh5X2FkZHIsIE1JSV9BTkFEVik7DQotCWRhdGEgfD0gTUlJX05XQVlfVFggfCBNSUlfTldB WV9UWF9GRFggfCBNSUlfTldBWV9UX0ZEWCB8IE1JSV9OV0FZX1Q7DQotCW1kaW9fd3JpdGUoZGV2 LCBwaHlfYWRkciwgTUlJX0FOQURWLCBkYXRhKTsNCi0JDQotCS8qIFJlc3RhcnQgYXV0by1uZWdv dGlhdGlvbiAqLw0KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9M KTsNCi0JZGF0YSB8PSBNSUlfQ05UTF9SU1RfQVVUTyB8IE1JSV9DTlRMX0FVVE87DQotCW1kaW9f d3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEpOw0KLQ0KLQlpZiAoYXUxMDAw X2RlYnVnID4gNCkgZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7DQotDQotCXJldHVybiAwOw0KLX0N Ci0NCi1pbnQga3M4OTk1bV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2Fk ZHIpDQotew0KLQlzMTYgbWlpX2NvbnRyb2wsIHRpbWVvdXQ7DQotCQ0KLS8vCXByaW50aygia3M4 OTk1bV9yZXNldFxuIik7DQotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIs IE1JSV9DT05UUk9MKTsNCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwg bWlpX2NvbnRyb2wgfCBNSUlfQ05UTF9SRVNFVCk7DQotCW1kZWxheSgxKTsNCi0JZm9yICh0aW1l b3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7DQotCQltaWlfY29udHJvbCA9IG1k aW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCQlpZiAoKG1paV9jb250cm9s ICYgTUlJX0NOVExfUkVTRVQpID09IDApDQotCQkJYnJlYWs7DQotCQltZGVsYXkoMSk7DQotCX0N Ci0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsNCi0JCXByaW50ayhLRVJOX0VS UiAiJXMgUEhZIHJlc2V0IHRpbWVvdXQgIVxuIiwgZGV2LT5uYW1lKTsNCi0JCXJldHVybiAtMTsN Ci0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50IGtzODk5NW1fc3RhdHVzKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQ0KLXsNCi0J dTE2IG1paV9kYXRhOw0KLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsNCi0NCi0JaWYgKCFk ZXYpIHsNCi0JCXByaW50ayhLRVJOX0VSUiAia3M4OTk1bV9zdGF0dXMgZXJyb3I6IE5VTEwgZGV2 XG4iKTsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRl ICopIGRldi0+cHJpdjsNCi0NCi0JbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9h ZGRyLCBNSUlfU1RBVFVTKTsNCi0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElOSykgew0KLQkJ KmxpbmsgPSAxOw0KLQkJbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBN SUlfQVVYX0NOVFJMKTsNCi0JCWlmIChtaWlfZGF0YSAmIE1JSV9BVVhfMTAwKSB7DQotCQkJaWYg KG1paV9kYXRhICYgTUlJX0FVWF9GRFgpIHsNCi0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNF Rlg7DQotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQkJCX0NCi0JCQll bHNlIHsNCi0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJCWRldi0+aWZfcG9y dCA9IElGX1BPUlRfMTAwQkFTRVRYOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UgIHsJCQkJCQkJCQkJ CQ0KLQkJCSpzcGVlZCA9IElGX1BPUlRfMTBCQVNFVDsNCi0JCQlkZXYtPmlmX3BvcnQgPSBJRl9Q T1JUXzEwQkFTRVQ7DQotCQl9DQotDQotCX0NCi0JZWxzZSB7DQotCQkqbGluayA9IDA7DQotCQkq c3BlZWQgPSAwOw0KLQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOw0KLQl9DQotCXJl dHVybiAwOw0KLX0NCi0NCi1pbnQNCi1zbXNjXzgzQzE4NV9pbml0IChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LCBpbnQgcGh5X2FkZHIpDQotew0KLQlzMTYgZGF0YTsNCi0NCi0JaWYgKGF1MTAwMF9k ZWJ1ZyA+IDQpDQotCQlwcmludGsoInNtc2NfODNDMTg1X2luaXRcbiIpOw0KLQ0KLQkvKiBTdG9w IGF1dG8tbmVnb3RpYXRpb24gKi8NCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBN SUlfQ09OVFJPTCk7DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRh dGEgJiB+TUlJX0NOVExfQVVUTyk7DQotDQotCS8qIFNldCBhZHZlcnRpc2VtZW50IHRvIDEwLzEw MCBhbmQgSGFsZi9GdWxsIGR1cGxleA0KLQkgKiAoZnVsbCBjYXBhYmlsaXRpZXMpICovDQotCWRh dGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWKTsNCi0JZGF0YSB8PSBNSUlf TldBWV9UWCB8IE1JSV9OV0FZX1RYX0ZEWCB8IE1JSV9OV0FZX1RfRkRYIHwgTUlJX05XQVlfVDsN Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYsIGRhdGEpOw0KLQkNCi0JLyog UmVzdGFydCBhdXRvLW5lZ290aWF0aW9uICovDQotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlf YWRkciwgTUlJX0NPTlRST0wpOw0KLQlkYXRhIHw9IE1JSV9DTlRMX1JTVF9BVVRPIHwgTUlJX0NO VExfQVVUTzsNCi0NCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0 YSk7DQotDQotCWlmIChhdTEwMDBfZGVidWcgPiA0KSBkdW1wX21paShkZXYsIHBoeV9hZGRyKTsN Ci0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludA0KLXNtc2NfODNDMTg1X3Jlc2V0IChzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpDQotew0KLQlzMTYgbWlpX2NvbnRyb2wsIHRpbWVv dXQ7DQotCQ0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkNCi0JCXByaW50aygic21zY184M0MxODVf cmVzZXRcbiIpOw0KLQ0KLQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBN SUlfQ09OVFJPTCk7DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIG1p aV9jb250cm9sIHwgTUlJX0NOVExfUkVTRVQpOw0KLQltZGVsYXkoMSk7DQotCWZvciAodGltZW91 dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgew0KLQkJbWlpX2NvbnRyb2wgPSBtZGlv X3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQkJaWYgKChtaWlfY29udHJvbCAm IE1JSV9DTlRMX1JFU0VUKSA9PSAwKQ0KLQkJCWJyZWFrOw0KLQkJbWRlbGF5KDEpOw0KLQl9DQot CWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7DQotCQlwcmludGsoS0VSTl9FUlIg IiVzIFBIWSByZXNldCB0aW1lb3V0ICFcbiIsIGRldi0+bmFtZSk7DQotCQlyZXR1cm4gLTE7DQot CX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCANCi1zbXNjXzgzQzE4NV9zdGF0dXMgKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQ0K LXsNCi0JdTE2IG1paV9kYXRhOw0KLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsNCi0NCi0J aWYgKCFkZXYpIHsNCi0JCXByaW50ayhLRVJOX0VSUiAic21zY184M0MxODVfc3RhdHVzIGVycm9y OiBOVUxMIGRldlxuIik7DQotCQlyZXR1cm4gLTE7DQotCX0NCi0NCi0JYXVwID0gKHN0cnVjdCBh dTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7DQotCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwg YXVwLT5waHlfYWRkciwgTUlJX1NUQVRVUyk7DQotDQotCWlmIChtaWlfZGF0YSAmIE1JSV9TVEFU X0xJTkspIHsNCi0JCSpsaW5rID0gMTsNCi0JCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVw LT5waHlfYWRkciwgMHgxZik7DQotCQlpZiAobWlpX2RhdGEgJiAoMTw8MykpIHsNCi0JCQlpZiAo bWlpX2RhdGEgJiAoMTw8NCkpIHsNCi0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7DQot CQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQkJCX0NCi0JCQllbHNlIHsN Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJCWRldi0+aWZfcG9ydCA9IElG X1BPUlRfMTAwQkFTRVRYOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2Ugew0KLQkJCSpzcGVlZCA9IElG X1BPUlRfMTBCQVNFVDsNCi0JCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwQkFTRVQ7DQotCQl9 DQotCX0NCi0JZWxzZSB7DQotCQkqbGluayA9IDA7DQotCQkqc3BlZWQgPSAwOw0KLQkJZGV2LT5p Zl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi0NCi0j aWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMNCi1pbnQgc3R1Yl9pbml0KHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsIGludCBwaHlfYWRkcikNCi17DQotCS8vcHJpbnRrKCJQSFkgc3R1Yl9pbml0XG4i KTsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBzdHViX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYsIGludCBwaHlfYWRkcikNCi17DQotCS8vcHJpbnRrKCJQSFkgc3R1Yl9yZXNldFxuIik7 DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgDQotc3R1Yl9zdGF0dXMoc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpDQotew0KLQkvL3By aW50aygiUEhZIHN0dWJfc3RhdHVzXG4iKTsNCi0JKmxpbmsgPSAxOw0KLQkvKiBobW1tLCByZXZp c2l0ICovDQotCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQlkZXYtPmlmX3BvcnQgPSBJ Rl9QT1JUXzEwMEJBU0VGWDsNCi0JcmV0dXJuIDA7DQotfQ0KLSNlbmRpZg0KLQ0KLXN0cnVjdCBw aHlfb3BzIGJjbV81MjAxX29wcyA9IHsNCi0JYmNtXzUyMDFfaW5pdCwNCi0JYmNtXzUyMDFfcmVz ZXQsDQotCWJjbV81MjAxX3N0YXR1cywNCi19Ow0KLQ0KLXN0cnVjdCBwaHlfb3BzIGFtNzljODc0 X29wcyA9IHsNCi0JYW03OWM4NzRfaW5pdCwNCi0JYW03OWM4NzRfcmVzZXQsDQotCWFtNzljODc0 X3N0YXR1cywNCi19Ow0KLQ0KLXN0cnVjdCBwaHlfb3BzIGFtNzljOTAxX29wcyA9IHsNCi0JYW03 OWM5MDFfaW5pdCwNCi0JYW03OWM5MDFfcmVzZXQsDQotCWFtNzljOTAxX3N0YXR1cywNCi19Ow0K LQ0KLXN0cnVjdCBwaHlfb3BzIGxzaV84MDIyN19vcHMgPSB7IA0KLQlsc2lfODAyMjdfaW5pdCwN Ci0JbHNpXzgwMjI3X3Jlc2V0LA0KLQlsc2lfODAyMjdfc3RhdHVzLA0KLX07DQotDQotc3RydWN0 IHBoeV9vcHMgbHh0OTcxYV9vcHMgPSB7IA0KLQlseHQ5NzFhX2luaXQsDQotCWx4dDk3MWFfcmVz ZXQsDQotCWx4dDk3MWFfc3RhdHVzLA0KLX07DQotDQotc3RydWN0IHBoeV9vcHMga3M4OTk1bV9v cHMgPSB7DQotCWtzODk5NW1faW5pdCwNCi0Ja3M4OTk1bV9yZXNldCwNCi0Ja3M4OTk1bV9zdGF0 dXMsDQotfTsNCi0NCi1zdHJ1Y3QgcGh5X29wcyBzbXNjXzgzQzE4NV9vcHMgPSB7DQotCXNtc2Nf ODNDMTg1X2luaXQsDQotCXNtc2NfODNDMTg1X3Jlc2V0LA0KLQlzbXNjXzgzQzE4NV9zdGF0dXMs DQotfTsNCi0NCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMNCi1zdHJ1Y3QgcGh5X29wcyBz dHViX29wcyA9IHsNCi0Jc3R1Yl9pbml0LA0KLQlzdHViX3Jlc2V0LA0KLQlzdHViX3N0YXR1cywN Ci19Ow0KLSNlbmRpZg0KKy8vIGxlZnQtb3ZlciBmcm9tIHBoeWxpYiByZXdyaXRlLCBuZWVkcyB0 byBnZXQgcmVtb3ZlZCBhcyB3ZWxsLi4uIEZJWE1FDQogDQogc3RhdGljIHN0cnVjdCBtaWlfY2hp cF9pbmZvIHsNCiAJY29uc3QgY2hhciAqIG5hbWU7DQogCXUxNiBwaHlfaWQwOw0KIAl1MTYgcGh5 X2lkMTsNCi0Jc3RydWN0IHBoeV9vcHMgKnBoeV9vcHM7CQ0KKwlzdHJ1Y3QgcGh5X29wcyAqcGh5 X29wc19vYnNvbGV0ZTsJDQogCWludCBkdWFsX3BoeTsNCiB9IG1paV9jaGlwX3RhYmxlW10gPSB7 DQotCXsiQnJvYWRjb20gQkNNNTIwMSAxMC8xMDAgQmFzZVQgUEhZIiwweDAwNDAsMHg2MjEyLCAm YmNtXzUyMDFfb3BzLDB9LA0KLQl7IkJyb2FkY29tIEJDTTUyMjEgMTAvMTAwIEJhc2VUIFBIWSIs MHgwMDQwLDB4NjFlNCwgJmJjbV81MjAxX29wcywwfSwNCi0JeyJCcm9hZGNvbSBCQ001MjIyIDEw LzEwMCBCYXNlVCBQSFkiLDB4MDA0MCwweDYzMjIsICZiY21fNTIwMV9vcHMsMX0sDQotCXsiTlMg RFA4Mzg0NyBQSFkiLCAweDIwMDAsIDB4NWMzMCwgJmJjbV81MjAxX29wcyAsMH0sDQotCXsiQU1E IDc5QzkwMSBIb21lUE5BIFBIWSIsMHgwMDAwLDB4MzVjOCwgJmFtNzljOTAxX29wcywwfSwNCi0J eyJBTUQgNzlDODc0IDEwLzEwMCBCYXNlVCBQSFkiLDB4MDAyMiwweDU2MWIsICZhbTc5Yzg3NF9v cHMsMH0sDQotCXsiTFNJIDgwMjI3IDEwLzEwMCBCYXNlVCBQSFkiLDB4MDAxNiwweGY4NDAsICZs c2lfODAyMjdfb3BzLDB9LA0KLQl7IkludGVsIExYVDk3MUEgRHVhbCBTcGVlZCBQSFkiLDB4MDAx MywweDc4ZTIsICZseHQ5NzFhX29wcywwfSwNCi0JeyJLZW5kaW4gS1M4OTk1TSAxMC8xMDAgQmFz ZVQgUEhZIiwweDAwMjIsMHgxNDUwLCAma3M4OTk1bV9vcHMsMH0sDQotCXsiU01TQyBMQU44M0Mx ODUgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDA3LDB4YzBhMywgJnNtc2NfODNDMTg1X29wcywwfSwN CisJeyJCcm9hZGNvbSBCQ001MjAxIDEwLzEwMCBCYXNlVCBQSFkiLDB4MDA0MCwweDYyMTIsIDAg LDB9LA0KKwl7IkJyb2FkY29tIEJDTTUyMjEgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDQwLDB4NjFl NCwgMCAsMH0sDQorCXsiQnJvYWRjb20gQkNNNTIyMiAxMC8xMDAgQmFzZVQgUEhZIiwweDAwNDAs MHg2MzIyLCAwICwxfSwNCisJeyJOUyBEUDgzODQ3IFBIWSIsIDB4MjAwMCwgMHg1YzMwLCAwICww fSwNCisJeyJBTUQgNzlDOTAxIEhvbWVQTkEgUEhZIiwweDAwMDAsMHgzNWM4LCAwLDB9LA0KKwl7 IkFNRCA3OUM4NzQgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDIyLDB4NTYxYiwgMCwwfSwNCisJeyJM U0kgODAyMjcgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDE2LDB4Zjg0MCwgMCwwfSwNCisJeyJJbnRl bCBMWFQ5NzFBIER1YWwgU3BlZWQgUEhZIiwweDAwMTMsMHg3OGUyLCAwLDB9LA0KKwl7IktlbmRp biBLUzg5OTVNIDEwLzEwMCBCYXNlVCBQSFkiLDB4MDAyMiwweDE0NTAsIDAsMH0sDQorCXsiU01T QyBMQU44M0MxODUgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDA3LDB4YzBhMywgMCwwfSwNCiAjaWZk ZWYgQ09ORklHX01JUFNfQk9TUE9SVVMNCi0JeyJTdHViIiwgMHgxMjM0LCAweDU2NzgsICZzdHVi X29wcyB9LA0KKwl7IlN0dWIiLCAweDEyMzQsIDB4NTY3OCwgMCwgMCB9LA0KICNlbmRpZg0KIAl7 MCx9LA0KIH07DQpAQCAtODkzLDE5ICsyNjEsMjkgQEAgc3RhdGljIHZvaWQgbWRpb193cml0ZShz dHJ1Y3QgbmV0X2RldmljZQ0KIAkqbWlpX2NvbnRyb2xfcmVnID0gbWlpX2NvbnRyb2w7DQogfQ0K IA0KK3N0YXRpYyBpbnQNCittZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1p aV9pZCwgaW50IHJlZ251bSkNCit7DQorICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnVzLT5w cml2Ow0KKyAgcmV0dXJuIG1kaW9fcmVhZChkZXYsIG1paV9pZCwgcmVnbnVtKTsNCit9DQogDQot c3RhdGljIHZvaWQgZHVtcF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCkN CitzdGF0aWMgaW50DQorbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlp X2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpDQogew0KLQlpbnQgaSwgdmFsOw0KKyAgc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IGJ1cy0+cHJpdjsNCisgIG1kaW9fd3JpdGUoZGV2LCBtaWlfaWQs IHJlZ251bSwgdmFsdWUpOw0KKyAgcmV0dXJuIDA7DQorfQ0KIA0KLQlmb3IgKGkgPSAwOyBpIDwg NzsgaSsrKSB7DQotCQlpZiAoKHZhbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9pZCwgaSkpID49IDAp DQotCQkJcHJpbnRrKCIlczogTUlJIFJlZyAlZD0leFxuIiwgZGV2LT5uYW1lLCBpLCB2YWwpOw0K LQl9DQotCWZvciAoaSA9IDE2OyBpIDwgMjU7IGkrKykgew0KLQkJaWYgKCh2YWwgPSBtZGlvX3Jl YWQoZGV2LCBwaHlfaWQsIGkpKSA+PSAwKQ0KLQkJCXByaW50aygiJXM6IE1JSSBSZWcgJWQ9JXhc biIsIGRldi0+bmFtZSwgaSwgdmFsKTsNCi0JfQ0KK3N0YXRpYyBpbnQNCittZGlvYnVzX3Jlc2V0 KHN0cnVjdCBtaWlfYnVzICpidXMpDQorew0KKyAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJ1 cy0+cHJpdjsNCisNCisgIHByaW50ayAoS0VSTl9XQVJOSU5HICIlczogbWRpb2J1c19yZXNldCgp IG5vdCBpbXBsZW1lbnRlZFxuIiwgZGV2LT5uYW1lKTsNCisgIC8vIEZJWE1FLCBUT0RPDQorICBy ZXR1cm4gMDsNCiB9DQogDQogc3RhdGljIGludCBtaWlfcHJvYmUgKHN0cnVjdCBuZXRfZGV2aWNl ICogZGV2KQ0KQEAgLTkzMCwxMyArMzA4LDEzIEBAIHN0YXRpYyBpbnQgbWlpX3Byb2JlIChzdHJ1 Y3QgbmV0X2RldmljZSANCiAJCX0NCiAJCSNlbmRpZg0KIA0KLQkJbWlpX3N0YXR1cyA9IG1kaW9f cmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfU1RBVFVTKTsNCisJCW1paV9zdGF0dXMgPSBtZGlvX3Jl YWQoZGV2LCBwaHlfYWRkciwgTUlJX0JNU1IpOw0KIAkJaWYgKG1paV9zdGF0dXMgPT0gMHhmZmZm IHx8IG1paV9zdGF0dXMgPT0gMHgwMDAwKQ0KIAkJCS8qIHRoZSBtaWkgaXMgbm90IGFjY2Vzc2Fi bGUsIHRyeSBuZXh0IG9uZSAqLw0KIAkJCWNvbnRpbnVlOw0KIA0KLQkJcGh5X2lkMCA9IG1kaW9f cmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfUEhZX0lEMCk7DQotCQlwaHlfaWQxID0gbWRpb19yZWFk KGRldiwgcGh5X2FkZHIsIE1JSV9QSFlfSUQxKTsNCisJCXBoeV9pZDAgPSBtZGlvX3JlYWQoZGV2 LCBwaHlfYWRkciwgTUlJX1BIWVNJRDEpOw0KKwkJcGh5X2lkMSA9IG1kaW9fcmVhZChkZXYsIHBo eV9hZGRyLCBNSUlfUEhZU0lEMik7DQogDQogCQkvKiBzZWFyY2ggb3VyIG1paSB0YWJsZSBmb3Ig dGhlIGN1cnJlbnQgbWlpICovIA0KIAkJZm9yIChpID0gMDsgbWlpX2NoaXBfdGFibGVbaV0ucGh5 X2lkMTsgaSsrKSB7DQpAQCAtOTUyLDkgKzMzMCw2IEBAIHN0YXRpYyBpbnQgbWlpX3Byb2JlIChz dHJ1Y3QgbmV0X2RldmljZSANCiAjZW5kaWYNCiAJCQkJbWlpX3BoeS0+Y2hpcF9pbmZvID0gbWlp X2NoaXBfdGFibGUraTsNCiAJCQkJYXVwLT5waHlfYWRkciA9IHBoeV9hZGRyOw0KLQkJCQlhdXAt PndhbnRfYXV0b25lZyA9IDE7DQotCQkJCWF1cC0+cGh5X29wcyA9IG1paV9jaGlwX3RhYmxlW2ld LnBoeV9vcHM7DQotCQkJCWF1cC0+cGh5X29wcy0+cGh5X2luaXQoZGV2LHBoeV9hZGRyKTsNCiAN CiAJCQkJLy8gQ2hlY2sgZm9yIGR1YWwtcGh5IGFuZCB0aGVuIHN0b3JlIHJlcXVpcmVkIA0KIAkJ CQkvLyB2YWx1ZXMgYW5kIHNldCBpbmRpY2F0b3JzLiBXZSBuZWVkIHRvIGRvIA0KQEAgLTEwMTMs MTAgKzM4OCw3IEBAIGZvdW5kOg0KIAkJCQkJbWlpX3BoeS0+Y2hpcF9pbmZvID0gbWlpX2NoaXBf dGFibGUraTsNCiAJCQkJCWF1cC0+cGh5X2FkZHIgPSBwaHlfYWRkcjsNCiAJCQkJCW1paV9waHkt Pm5leHQgPSBhdXAtPm1paTsNCi0JCQkJCWF1cC0+cGh5X29wcyA9IA0KLQkJCQkJCW1paV9jaGlw X3RhYmxlW2ldLnBoeV9vcHM7DQogCQkJCQlhdXAtPm1paSA9IG1paV9waHk7DQotCQkJCQlhdXAt PnBoeV9vcHMtPnBoeV9pbml0KGRldixwaHlfYWRkcik7DQogCQkJCX0gZWxzZSB7DQogCQkJCQlw cmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCANCiAJCQkJCQkJZGV2LT5uYW1l KTsNCkBAIC0xMDI0LDggKzM5Niw2IEBAIGZvdW5kOg0KIAkJCQl9DQogCQkJCW1paV9waHktPmNo aXBfaW5mbyA9IG1paV9jaGlwX3RhYmxlK2k7DQogCQkJCWF1cC0+cGh5X2FkZHIgPSBwaHlfYWRk cjsNCi0JCQkJYXVwLT5waHlfb3BzID0gbWlpX2NoaXBfdGFibGVbaV0ucGh5X29wczsNCi0JCQkJ YXVwLT5waHlfb3BzLT5waHlfaW5pdChkZXYscGh5X2FkZHIpOw0KIAkJCQlicmVhazsNCiAJCQl9 DQogCQl9DQpAQCAtMTAzOCw2ICs0MDgsMzYgQEAgZm91bmQ6DQogCX0NCiAjZW5kaWYNCiANCisJ ew0KKwkJY2hhciBwaHlfaWRbQlVTX0lEX1NJWkVdOw0KKwkJc3RydWN0IHBoeV9kZXZpY2UgKnBo eWRldjsNCisJCQ0KKwkJc25wcmludGYocGh5X2lkLCBCVVNfSURfU0laRSwgUEhZX0lEX0ZNVCwg YXVwLT5tYWNfaWQsIGF1cC0+cGh5X2FkZHIpOw0KKwkJDQorCQlwaHlkZXYgPSBwaHlfY29ubmVj dChkZXYsIHBoeV9pZCwgJmF1MTAwMF9hZGp1c3RfbGluaywgMCk7DQorCQkNCisJCWlmIChJU19F UlIocGh5ZGV2KSkgew0KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhdHRhY2gg dG8gUEhZXG4iLCBkZXYtPm5hbWUpOw0KKwkJCXJldHVybiBQVFJfRVJSKHBoeWRldik7DQorCQl9 DQorCQkNCisJCS8vIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzDQorCQlwaHlkZXYt PnN1cHBvcnRlZCAmPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiANCisJCQkJICAgICAgfCBTVVBQ T1JURURfMTBiYXNlVF9GdWxsIA0KKwkJCQkgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxm IA0KKwkJCQkgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIA0KKwkJCQkgICAgICB8IFNV UFBPUlRFRF9BdXRvbmVnIA0KKwkJCQkgICAgICB8IFNVUFBPUlRFRF9NSUkgDQorCQkJCSAgICAg IHwgU1VQUE9SVEVEX1RQKTsNCisJCQ0KKwkJcGh5ZGV2LT5hZHZlcnRpc2luZyA9IHBoeWRldi0+ c3VwcG9ydGVkOw0KKw0KKwkJYXVwLT5vbGRfbGluayA9IDA7DQorCQlhdXAtPm9sZF9zcGVlZCA9 IDA7DQorCQlhdXAtPm9sZF9kdXBsZXggPSAtMTsNCisJCWF1cC0+cGh5X2RldiA9IHBoeWRldjsN CisJfQ0KKw0KIAlpZiAoYXVwLT5taWktPmNoaXBfaW5mbyA9PSBOVUxMKSB7DQogCQlwcmludGso S0VSTl9FUlIgIiVzOiBBdTF4IE5vIGtub3duIE1JSSB0cmFuc2NlaXZlcnMgZm91bmQhXG4iLA0K IAkJCQlkZXYtPm5hbWUpOw0KQEAgLTExMDksOSArNTA5LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRf bWFjKHN0cnVjdCBuZXRfZGV2aWNlIA0KIAkJCQlkZXYtPm5hbWUsICh1bnNpZ25lZClhdXApOw0K IA0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7DQotCWlmIChhdXAtPnRp bWVyLmZ1bmN0aW9uID09ICZhdTEwMDBfdGltZXIpIHsvKiBjaGVjayBpZiB0aW1lciBpbml0dGVk ICovDQotCQlkZWxfdGltZXIoJmF1cC0+dGltZXIpOw0KLQl9DQorCS8vIGZpeG1lLCBsb2NrIG1p aWJ1cw0KIA0KIAloYXJkX3N0b3AoZGV2KTsNCiAJI2lmZGVmIENPTkZJR19CQ001MjIyX0RVQUxf UEhZDQpAQCAtMTIzNywxNzggKzYzNSwyMiBAQCBzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5p dF9tb2R1bGUodm9pDQogCXJldHVybiAwOw0KIH0NCiANCi1zdGF0aWMgaW50IGF1MTAwMF9zZXR1 cF9hbmVnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZHZlcnRpc2UpDQotew0KLQlzdHJ1 Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnBy aXY7DQotCXUxNiBjdGwsIGFkdjsNCi0NCi0JLyogU2V0dXAgc3RhbmRhcmQgYWR2ZXJ0aXNlICov DQotCWFkdiA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOw0K LQlhZHYgJj0gfihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFXzEwMEJBU0U0KTsNCi0JaWYgKGFk dmVydGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQ0KLQkJYWR2IHw9IEFEVkVSVElTRV8x MEhBTEY7DQotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkNCi0JCWFk diB8PSBBRFZFUlRJU0VfMTBGVUxMOw0KLQlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDBi YXNlVF9IYWxmKQ0KLQkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOw0KLQlpZiAoYWR2ZXJ0aXNl ICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQ0KLQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxM Ow0KLQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSwgYWR2KTsN Ci0NCi0JLyogU3RhcnQvUmVzdGFydCBhbmVnICovDQotCWN0bCA9IG1kaW9fcmVhZChkZXYsIGF1 cC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsNCi0JY3RsIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9B TlJFU1RBUlQpOw0KLQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IsIGN0 bCk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGF1MTAwMF9zZXR1cF9mb3Jj ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNwZWVkLCBpbnQgZmQpDQotew0KLQlzdHJ1 Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnBy aXY7DQotCXUxNiBjdGw7DQotDQotCWN0bCA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIs IE1JSV9CTUNSKTsNCi0JY3RsICY9IH4oQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDAgfCBC TUNSX0FORU5BQkxFKTsNCi0NCi0JLyogRmlyc3QgcmVzZXQgdGhlIFBIWSAqLw0KLQltZGlvX3dy aXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IsIGN0bCB8IEJNQ1JfUkVTRVQpOw0KLQ0K LQkvKiBTZWxlY3Qgc3BlZWQgJiBkdXBsZXggKi8NCi0Jc3dpdGNoIChzcGVlZCkgew0KLQkJY2Fz ZSBTUEVFRF8xMDoNCi0JCQlicmVhazsNCi0JCWNhc2UgU1BFRURfMTAwOg0KLQkJCWN0bCB8PSBC TUNSX1NQRUVEMTAwOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBTUEVFRF8xMDAwOg0KLQkJZGVmYXVs dDoNCi0JCQlyZXR1cm4gLUVJTlZBTDsNCi0JfQ0KLQlpZiAoZmQgPT0gRFVQTEVYX0ZVTEwpDQot CQljdGwgfD0gQk1DUl9GVUxMRFBMWDsNCi0JbWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIs IE1JSV9CTUNSLCBjdGwpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotDQotc3RhdGljIHZvaWQN Ci1hdTEwMDBfc3RhcnRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9v bF9jbWQgKmNtZCkNCi17DQotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBh dTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsNCi0JdTMyIGFkdmVydGlzZTsNCi0JaW50IGF1dG9u ZWc7DQotCWludCBmb3JjZWRfc3BlZWQ7DQotCWludCBmb3JjZWRfZHVwbGV4Ow0KLQ0KLQkvKiBE ZWZhdWx0IGFkdmVydGlzZSAqLw0KLQlhZHZlcnRpc2UgPSBHRU5NSUlfREVGQVVMVF9BRFZFUlRJ U0U7DQotCWF1dG9uZWcgPSBhdXAtPndhbnRfYXV0b25lZzsNCi0JZm9yY2VkX3NwZWVkID0gU1BF RURfMTAwOw0KLQlmb3JjZWRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7DQotDQotCS8qIFNldHVwIGxp bmsgcGFyYW1ldGVycyAqLw0KLQlpZiAoY21kKSB7DQotCQlpZiAoY21kLT5hdXRvbmVnID09IEFV VE9ORUdfRU5BQkxFKSB7DQotCQkJYWR2ZXJ0aXNlID0gY21kLT5hZHZlcnRpc2luZzsNCi0JCQlh dXRvbmVnID0gMTsNCi0JCX0gZWxzZSB7DQotCQkJYXV0b25lZyA9IDA7DQotDQotCQkJZm9yY2Vk X3NwZWVkID0gY21kLT5zcGVlZDsNCi0JCQlmb3JjZWRfZHVwbGV4ID0gY21kLT5kdXBsZXg7DQot CQl9DQotCX0NCi0NCi0JLyogQ29uZmlndXJlIFBIWSAmIHN0YXJ0IGFuZWcgKi8NCi0JYXVwLT53 YW50X2F1dG9uZWcgPSBhdXRvbmVnOw0KLQlpZiAoYXV0b25lZykNCi0JCWF1MTAwMF9zZXR1cF9h bmVnKGRldiwgYWR2ZXJ0aXNlKTsNCi0JZWxzZQ0KLQkJYXUxMDAwX3NldHVwX2ZvcmNlZChkZXYs IGZvcmNlZF9zcGVlZCwgZm9yY2VkX2R1cGxleCk7DQotCW1vZF90aW1lcigmYXVwLT50aW1lciwg amlmZmllcyArIEhaKTsNCi19DQotDQogc3RhdGljIGludCBhdTEwMDBfZ2V0X3NldHRpbmdzKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQ0KIHsNCiAJc3Ry dWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5w cml2Ow0KLQl1MTYgbGluaywgc3BlZWQ7DQogDQotCWNtZC0+c3VwcG9ydGVkID0gR0VOTUlJX0RF RkFVTFRfRkVBVFVSRVM7DQotCWNtZC0+YWR2ZXJ0aXNpbmcgPSBHRU5NSUlfREVGQVVMVF9BRFZF UlRJU0U7DQotCWNtZC0+cG9ydCA9IFBPUlRfTUlJOw0KLQljbWQtPnRyYW5zY2VpdmVyID0gWENW Ul9FWFRFUk5BTDsNCi0JY21kLT5waHlfYWRkcmVzcyA9IGF1cC0+cGh5X2FkZHI7DQotCXNwaW5f bG9ja19pcnEoJmF1cC0+bG9jayk7DQotCWNtZC0+YXV0b25lZyA9IGF1cC0+d2FudF9hdXRvbmVn Ow0KLQlhdXAtPnBoeV9vcHMtPnBoeV9zdGF0dXMoZGV2LCBhdXAtPnBoeV9hZGRyLCAmbGluaywg JnNwZWVkKTsNCi0JaWYgKChzcGVlZCA9PSBJRl9QT1JUXzEwMEJBU0VUWCkgfHwgKHNwZWVkID09 IElGX1BPUlRfMTAwQkFTRUZYKSkNCi0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7DQotCWVsc2Ug aWYgKHNwZWVkID09IElGX1BPUlRfMTBCQVNFVCkNCi0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsN Ci0JaWYgKGxpbmsgJiYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkpDQotCQlj bWQtPmR1cGxleCA9IERVUExFWF9GVUxMOw0KLQllbHNlDQotCQljbWQtPmR1cGxleCA9IERVUExF WF9IQUxGOw0KLQlzcGluX3VubG9ja19pcnEoJmF1cC0+bG9jayk7DQotCXJldHVybiAwOw0KKwly ZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChhdXAtPnBoeV9kZXYsIGNtZCk7DQogfQ0KIA0KIHN0YXRp YyBpbnQgYXUxMDAwX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qg ZXRodG9vbF9jbWQgKmNtZCkNCiB7DQogCSBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChz dHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnByaXY7DQotCSAgdW5zaWduZWQgbG9uZyBmZWF0 dXJlcyA9IEdFTk1JSV9ERUZBVUxUX0ZFQVRVUkVTOw0KIA0KIAkgaWYgKCFjYXBhYmxlKENBUF9O RVRfQURNSU4pKQ0KIAkJIHJldHVybiAtRVBFUk07DQogDQotCSBpZiAoY21kLT5hdXRvbmVnICE9 IEFVVE9ORUdfRU5BQkxFICYmIGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpDQotCQkg cmV0dXJuIC1FSU5WQUw7DQotCSBpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYm IGNtZC0+YWR2ZXJ0aXNpbmcgPT0gMCkNCi0JCSByZXR1cm4gLUVJTlZBTDsNCi0JIGlmIChjbWQt PmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJiBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkNCi0J CSByZXR1cm4gLUVJTlZBTDsNCi0JIGlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxF KQ0KLQkJIHN3aXRjaCAoY21kLT5zcGVlZCkgew0KLQkJIGNhc2UgU1BFRURfMTA6DQotCQkJIGlm IChjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRiAmJg0KLQkJCQkgKGZlYXR1cmVzICYgU1VQUE9S VEVEXzEwYmFzZVRfSGFsZikgPT0gMCkNCi0JCQkJIHJldHVybiAtRUlOVkFMOw0KLQkJCSBpZiAo Y21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgJiYNCi0JCQkJIChmZWF0dXJlcyAmIFNVUFBPUlRF RF8xMGJhc2VUX0Z1bGwpID09IDApDQotCQkJCSByZXR1cm4gLUVJTlZBTDsNCi0JCQkgYnJlYWs7 DQotCQkgY2FzZSBTUEVFRF8xMDA6DQotCQkJIGlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFM RiAmJg0KLQkJCQkgKGZlYXR1cmVzICYgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpID09IDApDQot CQkJCSByZXR1cm4gLUVJTlZBTDsNCi0JCQkgaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxM ICYmDQotCQkJCSAoZmVhdHVyZXMgJiBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkgPT0gMCkNCi0J CQkJIHJldHVybiAtRUlOVkFMOw0KLQkJCSBicmVhazsNCi0JCSBkZWZhdWx0Og0KLQkJCSByZXR1 cm4gLUVJTlZBTDsNCi0JCSB9DQotCSBlbHNlIGlmICgoZmVhdHVyZXMgJiBTVVBQT1JURURfQXV0 b25lZykgPT0gMCkNCi0JCSByZXR1cm4gLUVJTlZBTDsNCi0NCi0JIHNwaW5fbG9ja19pcnEoJmF1 cC0+bG9jayk7DQotCSBhdTEwMDBfc3RhcnRfbGluayhkZXYsIGNtZCk7DQotCSBzcGluX3VubG9j a19pcnEoJmF1cC0+bG9jayk7DQotCSByZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBhdTEw MDBfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KLXsNCi0Jc3RydWN0IGF1MTAw MF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5wcml2Ow0KLQ0K LQlpZiAoIWF1cC0+d2FudF9hdXRvbmVnKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotCXNwaW5fbG9j a19pcnEoJmF1cC0+bG9jayk7DQotCWF1MTAwMF9zdGFydF9saW5rKGRldiwgTlVMTCk7DQotCXNw aW5fdW5sb2NrX2lycSgmYXVwLT5sb2NrKTsNCi0JcmV0dXJuIDA7DQorCSAvL3NwaW5fbG9ja19p cnEoJmF1cC0+bG9jayk7IG5lZWQgdGhpcz8NCisJIHJldHVybiBwaHlfZXRodG9vbF9zc2V0KGF1 cC0+cGh5X2RldiwgY21kKTsNCiB9DQogDQogc3RhdGljIHZvaWQNCkBAIC0xNDIzLDE3ICs2NjUs MTEgQEAgYXUxMDAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZQ0KIAlpbmZvLT5y ZWdkdW1wX2xlbiA9IDA7DQogfQ0KIA0KLXN0YXRpYyB1MzIgYXUxMDAwX2dldF9saW5rKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpDQotew0KLQlyZXR1cm4gbmV0aWZfY2Fycmllcl9vayhkZXYpOw0K LX0NCi0NCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF1MTAwMF9ldGh0b29sX29wcyA9IHsN CiAJLmdldF9zZXR0aW5ncyA9IGF1MTAwMF9nZXRfc2V0dGluZ3MsDQogCS5zZXRfc2V0dGluZ3Mg PSBhdTEwMDBfc2V0X3NldHRpbmdzLA0KIAkuZ2V0X2RydmluZm8gPSBhdTEwMDBfZ2V0X2Rydmlu Zm8sDQotCS5ud2F5X3Jlc2V0ID0gYXUxMDAwX253YXlfcmVzZXQsDQotCS5nZXRfbGluayA9IGF1 MTAwMF9nZXRfbGluaw0KKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLA0KIH07DQog DQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoNCkBAIC0xNTQ2LDYgKzc4MiwxOCBAQCBhdTEw MDBfcHJvYmUodTMyIGlvYWRkciwgaW50IGlycSwgaW50IHBvDQogCWF1cC0+bWlpLT5taWlfY29u dHJvbF9yZWcgPSAwOw0KIAlhdXAtPm1paS0+bWlpX2RhdGFfcmVnID0gMDsNCiANCisJYXVwLT5t aWlfYnVzLnByaXYgPSBkZXY7DQorCWF1cC0+bWlpX2J1cy5yZWFkID0gbWRpb2J1c19yZWFkOw0K KwlhdXAtPm1paV9idXMud3JpdGUgPSBtZGlvYnVzX3dyaXRlOw0KKwlhdXAtPm1paV9idXMucmVz ZXQgPSBtZGlvYnVzX3Jlc2V0Ow0KKwlhdXAtPm1paV9idXMubmFtZSA9ICJhdTEwMDBfZXRoX21p aSI7DQorCWF1cC0+bWlpX2J1cy5pZCA9IGF1cC0+bWFjX2lkOw0KKwlhdXAtPm1paV9idXMuaXJx ID0ga21hbGxvYyhzaXplb2YoaW50KSpQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOw0KKwlmb3Io aSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7ICsraSkNCisJCWF1cC0+bWlpX2J1cy5pcnFbaV0gPSBQ SFlfUE9MTDsNCisNCisJbWRpb2J1c19yZWdpc3RlcigmYXVwLT5taWlfYnVzKTsNCisNCiAJaWYg KG1paV9wcm9iZShkZXYpICE9IDApIHsNCiAJCWdvdG8gZXJyX291dDsNCiAJfQ0KQEAgLTE1OTAs NyArODM4LDYgQEAgYXUxMDAwX3Byb2JlKHUzMiBpb2FkZHIsIGludCBpcnEsIGludCBwbw0KIAlk ZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsNCiAJZGV2LT5kb19pb2N0bCA9 ICZhdTEwMDBfaW9jdGw7DQogCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9v cHMpOw0KLQlkZXYtPnNldF9jb25maWcgPSAmYXUxMDAwX3NldF9jb25maWc7DQogCWRldi0+dHhf dGltZW91dCA9IGF1MTAwMF90eF90aW1lb3V0Ow0KIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gRVRI X1RYX1RJTUVPVVQ7DQogDQpAQCAtMTY0MCw3ICs4ODcsNiBAQCBzdGF0aWMgaW50IGF1MTAwMF9p bml0KHN0cnVjdCBuZXRfZGV2aWNlDQogCXUzMiBmbGFnczsNCiAJaW50IGk7DQogCXUzMiBjb250 cm9sOw0KLQl1MTYgbGluaywgc3BlZWQ7DQogDQogCWlmIChhdTEwMDBfZGVidWcgPiA0KSANCiAJ CXByaW50aygiJXM6IGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOw0KQEAgLTE2NjgsMTQgKzkx NCwxMiBAQCBzdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlDQogCX0NCiAJ YXVfc3luYygpOw0KIA0KLQlhdXAtPnBoeV9vcHMtPnBoeV9zdGF0dXMoZGV2LCBhdXAtPnBoeV9h ZGRyLCAmbGluaywgJnNwZWVkKTsNCiAJY29udHJvbCA9IE1BQ19ESVNBQkxFX1JYX09XTiB8IE1B Q19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFOw0KICNpZm5kZWYgQ09ORklHX0NQVV9MSVRUTEVf RU5ESUFODQogCWNvbnRyb2wgfD0gTUFDX0JJR19FTkRJQU47DQogI2VuZGlmDQotCWlmIChsaW5r ICYmIChkZXYtPmlmX3BvcnQgPT0gSUZfUE9SVF8xMDBCQVNFRlgpKSB7DQotCQljb250cm9sIHw9 IE1BQ19GVUxMX0RVUExFWDsNCi0JfQ0KKwlpZiAoYXVwLT5waHlfZGV2LT5saW5rICYmIGF1cC0+ cGh5X2Rldi0+ZHVwbGV4KSANCisJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOyANCiANCiAJ YXVwLT5tYWMtPmNvbnRyb2wgPSBjb250cm9sOw0KIAlhdXAtPm1hYy0+dmxhbjFfdGFnID0gMHg4 MTAwOyAvKiBhY3RpdmF0ZSB2bGFuIHN1cHBvcnQgKi8NCkBAIC0xNjg1LDU3ICs5MjksNzIgQEAg c3RhdGljIGludCBhdTEwMDBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZQ0KIAlyZXR1cm4gMDsNCiB9 DQogDQotc3RhdGljIHZvaWQgYXUxMDAwX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkNCitzdGF0 aWMgdm9pZA0KK2F1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KIHsN Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7DQog CXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBk ZXYtPnByaXY7DQotCXVuc2lnbmVkIGNoYXIgaWZfcG9ydDsNCi0JdTE2IGxpbmssIHNwZWVkOw0K KwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYXVwLT5waHlfZGV2Ow0KKwl1bnNpZ25lZCBs b25nIGZsYWdzOw0KIA0KLQlpZiAoIWRldikgew0KLQkJLyogZmF0YWwgZXJyb3IsIGRvbid0IHJl c3RhcnQgdGhlIHRpbWVyICovDQotCQlwcmludGsoS0VSTl9FUlIgImF1MTAwMF90aW1lciBlcnJv cjogTlVMTCBkZXZcbiIpOw0KLQkJcmV0dXJuOw0KLQl9DQorCWludCBzdGF0dXNfY2hhbmdlID0g MDsNCiANCi0JaWZfcG9ydCA9IGRldi0+aWZfcG9ydDsNCi0JaWYgKGF1cC0+cGh5X29wcy0+cGh5 X3N0YXR1cyhkZXYsIGF1cC0+cGh5X2FkZHIsICZsaW5rLCAmc3BlZWQpID09IDApIHsNCi0JCWlm IChsaW5rKSB7DQotCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsNCi0JCQkJbmV0aWZf Y2Fycmllcl9vbihkZXYpOw0KLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cFxuIiwg ZGV2LT5uYW1lKTsNCi0JCQl9DQotCQl9DQotCQllbHNlIHsNCi0JCQlpZiAobmV0aWZfY2Fycmll cl9vayhkZXYpKSB7DQotCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7DQotCQkJCWRldi0+aWZf cG9ydCA9IDA7DQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+ bmFtZSk7DQotCQkJfQ0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7DQor DQorCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX3NwZWVkICE9IHBoeWRldi0+c3BlZWQp KSB7DQorCQkvLyBzcGVlZCBjaGFuZ2VkIA0KKw0KKwkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsN CisJCWNhc2UgMTA6DQorCQljYXNlIDEwMDoNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQorCQkJ cHJpbnRrKEtFUk5fV0FSTklORw0KKwkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEw LzEwMC8xMDAwID8/XG4iLA0KKwkJCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQpOw0K KwkJCWJyZWFrOw0KIAkJfQ0KKw0KKwkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOw0K Kw0KKwkJc3RhdHVzX2NoYW5nZSA9IDE7DQogCX0NCiANCi0JaWYgKGxpbmsgJiYgKGRldi0+aWZf cG9ydCAhPSBpZl9wb3J0KSAmJiANCi0JCQkoZGV2LT5pZl9wb3J0ICE9IElGX1BPUlRfVU5LTk9X TikpIHsNCi0JCWhhcmRfc3RvcChkZXYpOw0KLQkJaWYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JU XzEwMEJBU0VGWCkgew0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBnb2luZyB0byBmdWxsIGR1 cGxleFxuIiwgDQotCQkJCQlkZXYtPm5hbWUpOw0KKwlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAt Pm9sZF9kdXBsZXggIT0gcGh5ZGV2LT5kdXBsZXgpKSB7DQorCQkvLyBkdXBsZXggbW9kZSBjaGFu Z2VkDQorCQkNCisJCS8vaGFyZF9zdG9wKGRldik7DQorDQorCQlpZiAocGh5ZGV2LT5kdXBsZXgp DQogCQkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOw0KLQkJCWF1X3N5bmNf ZGVsYXkoMSk7DQotCQl9DQotCQllbHNlIHsNCisJCWVsc2UNCiAJCQlhdXAtPm1hYy0+Y29udHJv bCAmPSB+TUFDX0ZVTExfRFVQTEVYOw0KLQkJCWF1X3N5bmNfZGVsYXkoMSk7DQorCQlhdV9zeW5j X2RlbGF5KDEpOw0KKw0KKwkJLy9lbmFibGVfcnhfdHgoZGV2KTsNCisJCWF1cC0+b2xkX2R1cGxl eCA9IHBoeWRldi0+ZHVwbGV4Ow0KKw0KKwkJc3RhdHVzX2NoYW5nZSA9IDE7DQorCX0NCisNCisJ aWYocGh5ZGV2LT5saW5rICE9IGF1cC0+b2xkX2xpbmspIHsNCisJCS8vIGxpbmsgc3RhdGUgY2hh bmdlZA0KKw0KKwkJaWYgKHBoeWRldi0+bGluaykgeyAvLyBsaW5rIHdlbnQgdXANCisJCQluZXRp Zl9zY2hlZHVsZShkZXYpOw0KKwkJfSBlbHNlIHsgLy8gbGluayB3ZW50IGRvd24NCisJCQlhdXAt Pm9sZF9zcGVlZCA9IDA7DQorCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7DQogCQl9DQotCQllbmFi bGVfcnhfdHgoZGV2KTsNCisNCisJCWF1cC0+b2xkX2xpbmsgPSBwaHlkZXYtPmxpbms7DQorCQlz dGF0dXNfY2hhbmdlID0gMTsNCiAJfQ0KIA0KLQlhdXAtPnRpbWVyLmV4cGlyZXMgPSBSVU5fQVQo KDEqSFopKTsgDQotCWF1cC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsNCi0JYXVw LT50aW1lci5mdW5jdGlvbiA9ICZhdTEwMDBfdGltZXI7IC8qIHRpbWVyIGhhbmRsZXIgKi8NCi0J YWRkX3RpbWVyKCZhdXAtPnRpbWVyKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5s b2NrLCBmbGFncyk7DQogDQorCWlmIChzdGF0dXNfY2hhbmdlKSB7DQorCQlwaHlfcHJpbnRfc3Rh dHVzKHBoeWRldik7DQorCX0NCiB9DQogDQogc3RhdGljIGludCBhdTEwMDBfb3BlbihzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQ0KQEAgLTE3NDYsMTMgKzEwMDUsNiBAQCBzdGF0aWMgaW50IGF1MTAw MF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlDQogCWlmIChhdTEwMDBfZGVidWcgPiA0KQ0KIAkJcHJp bnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7DQogDQotCWlmICgocmV0 dmFsID0gYXUxMDAwX2luaXQoZGV2KSkpIHsNCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9y IGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOw0KLQkJZnJlZV9pcnEoZGV2LT5pcnEsIGRl dik7DQotCQlyZXR1cm4gcmV0dmFsOw0KLQl9DQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7DQot DQogCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZhdTEwMDBfaW50ZXJydXB0 LCAwLCANCiAJCQkJCWRldi0+bmFtZSwgZGV2KSkpIHsNCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6 IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLCANCkBAIC0xNzYwLDExICsxMDEyLDE1IEBAIHN0YXRp YyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UNCiAJCXJldHVybiByZXR2YWw7DQog CX0NCiANCi0JaW5pdF90aW1lcigmYXVwLT50aW1lcik7IC8qIHVzZWQgaW4gaW9jdGwoKSAqLw0K LQlhdXAtPnRpbWVyLmV4cGlyZXMgPSBSVU5fQVQoKDMqSFopKTsgDQotCWF1cC0+dGltZXIuZGF0 YSA9ICh1bnNpZ25lZCBsb25nKWRldjsNCi0JYXVwLT50aW1lci5mdW5jdGlvbiA9ICZhdTEwMDBf dGltZXI7IC8qIHRpbWVyIGhhbmRsZXIgKi8NCi0JYWRkX3RpbWVyKCZhdXAtPnRpbWVyKTsNCisJ aWYgKChyZXR2YWwgPSBhdTEwMDBfaW5pdChkZXYpKSkgew0KKwkJcHJpbnRrKEtFUk5fRVJSICIl czogZXJyb3IgaW4gYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7DQorCQlmcmVlX2lycShkZXYt PmlycSwgZGV2KTsNCisJCXJldHVybiByZXR2YWw7DQorCX0NCisNCisJcGh5X3N0YXJ0KGF1cC0+ cGh5X2Rldik7DQorDQorCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7DQogDQogCWlmIChhdTEwMDBf ZGVidWcgPiA0KQ0KIAkJcHJpbnRrKCIlczogb3BlbjogSW5pdGlhbGl6YXRpb24gZG9uZS5cbiIs IGRldi0+bmFtZSk7DQpAQCAtMTc4Nyw2ICsxMDQzLDggQEAgc3RhdGljIGludCBhdTEwMDBfY2xv c2Uoc3RydWN0IG5ldF9kZXZpYw0KIAkvKiBzdG9wIHRoZSBkZXZpY2UgKi8NCiAJbmV0aWZfc3Rv cF9xdWV1ZShkZXYpOw0KIA0KKwlwaHlfc3RvcChhdXAtPnBoeV9kZXYpOw0KKw0KIAkvKiBkaXNh YmxlIHRoZSBpbnRlcnJ1cHQgKi8NCiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7DQogCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOw0KQEAgLTE4MzAsNyArMTA4OCw3 IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgbmV0X2QNCiAJc3RydWN0IG5l dF9kZXZpY2Vfc3RhdHMgKnBzID0gJmF1cC0+c3RhdHM7DQogDQogCWlmIChzdGF0dXMgJiBUWF9G UkFNRV9BQk9SVEVEKSB7DQotCQlpZiAoZGV2LT5pZl9wb3J0ID09IElGX1BPUlRfMTAwQkFTRUZY KSB7DQorCQlpZiAoYXVwLT5waHlfZGV2LT5kdXBsZXgpIHsNCiAJCQlpZiAoc3RhdHVzICYgKFRY X0pBQl9USU1FT1VUIHwgVFhfVU5ERVJSVU4pKSB7DQogCQkJCS8qIGFueSBvdGhlciB0eCBlcnJv cnMgYXJlIG9ubHkgdmFsaWQNCiAJCQkJICogaW4gaGFsZiBkdXBsZXggbW9kZSAqLw0KQEAgLTIx MDQsMTI2ICsxMzYyLDEzIEBAIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2 aWMNCiAJfQ0KIH0NCiANCi0NCiBzdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQ0KIHsNCiAJc3RydWN0IGF1MTAw MF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5wcml2Ow0KLQl1 MTYgKmRhdGEgPSAodTE2ICopJnJxLT5pZnJfaWZydTsNCi0NCi0Jc3dpdGNoKGNtZCkgeyANCi0J CWNhc2UgU0lPQ0RFVlBSSVZBVEU6CS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgUEhZIGluIHVz ZS4gKi8NCi0JCWNhc2UgU0lPQ0dNSUlQSFk6DQotCQkgICAgICAgIGlmICghbmV0aWZfcnVubmlu ZyhkZXYpKSByZXR1cm4gLUVJTlZBTDsNCi0JCQlkYXRhWzBdID0gYXVwLT5waHlfYWRkcjsNCi0J CWNhc2UgU0lPQ0RFVlBSSVZBVEUrMToJLyogUmVhZCB0aGUgc3BlY2lmaWVkIE1JSSByZWdpc3Rl ci4gKi8NCi0JCWNhc2UgU0lPQ0dNSUlSRUc6DQotCQkJZGF0YVszXSA9ICBtZGlvX3JlYWQoZGV2 LCBkYXRhWzBdLCBkYXRhWzFdKTsgDQotCQkJcmV0dXJuIDA7DQotCQljYXNlIFNJT0NERVZQUklW QVRFKzI6CS8qIFdyaXRlIHRoZSBzcGVjaWZpZWQgTUlJIHJlZ2lzdGVyICovDQotCQljYXNlIFNJ T0NTTUlJUkVHOiANCi0JCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpDQotCQkJCXJldHVy biAtRVBFUk07DQotCQkJbWRpb193cml0ZShkZXYsIGRhdGFbMF0sIGRhdGFbMV0sZGF0YVsyXSk7 DQotCQkJcmV0dXJuIDA7DQotCQlkZWZhdWx0Og0KLQkJCXJldHVybiAtRU9QTk9UU1VQUDsNCi0J fQ0KLQ0KLX0NCi0NCi0NCi1zdGF0aWMgaW50IGF1MTAwMF9zZXRfY29uZmlnKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKQ0KLXsNCi0Jc3RydWN0IGF1MTAwMF9wcml2 YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsNCi0JdTE2IGNv bnRyb2w7DQogDQotCWlmIChhdTEwMDBfZGVidWcgPiA0KSAgew0KLQkJcHJpbnRrKCIlczogc2V0 X2NvbmZpZyBjYWxsZWQ6IGRldi0+aWZfcG9ydCAlZCBtYXAtPnBvcnQgJXhcbiIsIA0KLQkJCQlk ZXYtPm5hbWUsIGRldi0+aWZfcG9ydCwgbWFwLT5wb3J0KTsNCi0JfQ0KKwlpZiAoIW5ldGlmX3J1 bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7DQogDQotCXN3aXRjaChtYXAtPnBvcnQpew0KLQkJ Y2FzZSBJRl9QT1JUX1VOS05PV046IC8qIHVzZSBhdXRvIGhlcmUgKi8gICANCi0JCQlwcmludGso S0VSTl9JTkZPICIlczogY29uZmlnIHBoeSBmb3IgYW5lZ1xuIiwgDQotCQkJCQlkZXYtPm5hbWUp Ow0KLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsNCi0JCQkvKiBMaW5rIERvd246IHRoZSB0 aW1lciB3aWxsIGJyaW5nIGl0IHVwICovDQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsNCi0J DQotCQkJLyogcmVhZCBjdXJyZW50IGNvbnRyb2wgKi8NCi0JCQljb250cm9sID0gbWRpb19yZWFk KGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQkJCWNvbnRyb2wgJj0gfihNSUlf Q05UTF9GRFggfCBNSUlfQ05UTF9GMTAwKTsNCi0NCi0JCQkvKiBlbmFibGUgYXV0byBuZWdvdGlh dGlvbiBhbmQgcmVzZXQgdGhlIG5lZ290aWF0aW9uICovDQotCQkJbWRpb193cml0ZShkZXYsIGF1 cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MLCANCi0JCQkJCWNvbnRyb2wgfCBNSUlfQ05UTF9BVVRP IHwgDQotCQkJCQlNSUlfQ05UTF9SU1RfQVVUTyk7DQotDQotCQkJYnJlYWs7DQotICAgIA0KLQkJ Y2FzZSBJRl9QT1JUXzEwQkFTRVQ6IC8qIDEwQmFzZVQgKi8gICAgICAgICANCi0JCQlwcmludGso S0VSTl9JTkZPICIlczogY29uZmlnIHBoeSBmb3IgMTBCYXNlVFxuIiwgDQotCQkJCQlkZXYtPm5h bWUpOw0KLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsNCi0JDQotCQkJLyogTGluayBEb3du OiB0aGUgdGltZXIgd2lsbCBicmluZyBpdCB1cCAqLw0KLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRl dik7DQotDQotCQkJLyogc2V0IFNwZWVkIHRvIDEwTWJwcywgSGFsZiBEdXBsZXggKi8NCi0JCQlj b250cm9sID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQkJ CWNvbnRyb2wgJj0gfihNSUlfQ05UTF9GMTAwIHwgTUlJX0NOVExfQVVUTyB8IA0KLQkJCQkJTUlJ X0NOVExfRkRYKTsNCi0JDQotCQkJLyogZGlzYWJsZSBhdXRvIG5lZ290aWF0aW9uIGFuZCBmb3Jj ZSAxME0vSEQgbW9kZSovDQotCQkJbWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9D T05UUk9MLCBjb250cm9sKTsNCi0JCQlicmVhazsNCi0gICAgDQotCQljYXNlIElGX1BPUlRfMTAw QkFTRVQ6IC8qIDEwMEJhc2VUICovDQotCQljYXNlIElGX1BPUlRfMTAwQkFTRVRYOiAvKiAxMDBC YXNlVHggKi8gDQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbmZpZyBwaHkgZm9yIDEwMEJh c2VUWFxuIiwgDQotCQkJCQlkZXYtPm5hbWUpOw0KLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9y dDsNCi0JDQotCQkJLyogTGluayBEb3duOiB0aGUgdGltZXIgd2lsbCBicmluZyBpdCB1cCAqLw0K LQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7DQotCQ0KLQkJCS8qIHNldCBTcGVlZCB0byAxMDBN YnBzLCBIYWxmIER1cGxleCAqLw0KLQkJCS8qIGRpc2FibGUgYXV0byBuZWdvdGlhdGlvbiBhbmQg ZW5hYmxlIDEwME1CaXQgTW9kZSAqLw0KLQkJCWNvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBhdXAt PnBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCQkJY29udHJvbCAmPSB+KE1JSV9DTlRMX0FVVE8g fCBNSUlfQ05UTF9GRFgpOw0KLQkJCWNvbnRyb2wgfD0gTUlJX0NOVExfRjEwMDsNCi0JCQltZGlv X3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wsIGNvbnRyb2wpOw0KLQkJCWJy ZWFrOw0KLSAgICANCi0JCWNhc2UgSUZfUE9SVF8xMDBCQVNFRlg6IC8qIDEwMEJhc2VGeCAqLw0K LQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb25maWcgcGh5IGZvciAxMDBCYXNlRlhcbiIsIA0K LQkJCQkJZGV2LT5uYW1lKTsNCi0JCQlkZXYtPmlmX3BvcnQgPSBtYXAtPnBvcnQ7DQotCQ0KLQkJ CS8qIExpbmsgRG93bjogdGhlIHRpbWVyIHdpbGwgYnJpbmcgaXQgdXAgKi8NCi0JCQluZXRpZl9j YXJyaWVyX29mZihkZXYpOw0KLQkNCi0JCQkvKiBzZXQgU3BlZWQgdG8gMTAwTWJwcywgRnVsbCBE dXBsZXggKi8NCi0JCQkvKiBkaXNhYmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIGVuYWJsZSAxMDBN Qml0IE1vZGUgKi8NCi0JCQljb250cm9sID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwg TUlJX0NPTlRST0wpOw0KLQkJCWNvbnRyb2wgJj0gfk1JSV9DTlRMX0FVVE87DQotCQkJY29udHJv bCB8PSAgTUlJX0NOVExfRjEwMCB8IE1JSV9DTlRMX0ZEWDsNCi0JCQltZGlvX3dyaXRlKGRldiwg YXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wsIGNvbnRyb2wpOw0KLQkJCWJyZWFrOw0KLQkJY2Fz ZSBJRl9QT1JUXzEwQkFTRTI6IC8qIDEwQmFzZTIgKi8NCi0JCWNhc2UgSUZfUE9SVF9BVUk6IC8q IEFVSSAqLw0KLQkJLyogVGhlc2UgTW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWQgKGFyZSB0aGV5Pykq Lw0KLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IDEwQmFzZTIvQVVJIG5vdCBzdXBwb3J0ZWQiLCAN Ci0JCQkJCWRldi0+bmFtZSk7DQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KLQkJCWJyZWFrOw0K LSAgICANCi0JCWRlZmF1bHQ6DQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBtZWRp YSBzZWxlY3RlZCIsIA0KLQkJCQkJZGV2LT5uYW1lKTsNCi0JCQlyZXR1cm4gLUVJTlZBTDsNCi0J fQ0KLQlyZXR1cm4gMDsNCisJcmV0dXJuIHBoeV9taWlfaW9jdGwoYXVwLT5waHlfZGV2LCBpZl9t aWkocnEpLCBjbWQpOw0KIH0NCiANCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF1 MTAwMF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCmRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9hdTEwMDBfZXRoLmggYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgNCmluZGV4IGNj YjM1ZmEuLjkzYjMyZjEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgNCisr KyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaA0KQEAgLTQwLDEwNiArNDAsNiBAQA0KIA0KICNk ZWZpbmUgTVVMVElDQVNUX0ZJTFRFUl9MSU1JVCA2NA0KIA0KLS8qIEZJWE1FIA0KLSAqIFRoZSBQ SFkgZGVmaW5lcyBzaG91bGQgYmUgaW4gYSBzZXBhcmF0ZSBmaWxlLg0KLSAqLw0KLQ0KLS8qIE1J SSByZWdpc3RlciBvZmZzZXRzICovDQotI2RlZmluZQlNSUlfQ09OVFJPTCAweDAwMDANCi0jZGVm aW5lIE1JSV9TVEFUVVMgIDB4MDAwMQ0KLSNkZWZpbmUgTUlJX1BIWV9JRDAgMHgwMDAyDQotI2Rl ZmluZQlNSUlfUEhZX0lEMSAweDAwMDMNCi0jZGVmaW5lIE1JSV9BTkFEViAgIDB4MDAwNA0KLSNk ZWZpbmUgTUlJX0FOTFBBUiAgMHgwMDA1DQotI2RlZmluZSBNSUlfQUVYUCAgICAweDAwMDYNCi0j ZGVmaW5lIE1JSV9BTkVYVCAgIDB4MDAwNw0KLSNkZWZpbmUgTUlJX0xTSV9QSFlfQ09ORklHIDB4 MDAxMQ0KLS8qIFN0YXR1cyByZWdpc3RlciAqLw0KLSNkZWZpbmUgTUlJX0xTSV9QSFlfU1RBVCAg IDB4MDAxMg0KLSNkZWZpbmUgTUlJX0FNRF9QSFlfU1RBVCAgIE1JSV9MU0lfUEhZX1NUQVQNCi0j ZGVmaW5lIE1JSV9JTlRFTF9QSFlfU1RBVCAweDAwMTENCi0NCi0jZGVmaW5lIE1JSV9BVVhfQ05U UkwgIDB4MDAxOA0KLS8qIG1paSByZWdpc3RlcnMgc3BlY2lmaWMgdG8gQU1EIDc5QzkwMSAqLw0K LSNkZWZpbmUJTUlJX1NUQVRVU19TVU1NQVJZID0gMHgwMDE4DQotDQotLyogTUlJIENvbnRyb2wg cmVnaXN0ZXIgYml0IGRlZmluaXRpb25zLiAqLw0KLSNkZWZpbmUJTUlJX0NOVExfRkRYICAgICAg MHgwMTAwDQotI2RlZmluZSBNSUlfQ05UTF9SU1RfQVVUTyAweDAyMDANCi0jZGVmaW5lCU1JSV9D TlRMX0lTT0xBVEUgIDB4MDQwMA0KLSNkZWZpbmUgTUlJX0NOVExfUFdSRFdOICAgMHgwODAwDQot I2RlZmluZQlNSUlfQ05UTF9BVVRPICAgICAweDEwMDANCi0jZGVmaW5lIE1JSV9DTlRMX0YxMDAg ICAgIDB4MjAwMA0KLSNkZWZpbmUJTUlJX0NOVExfTFBCSyAgICAgMHg0MDAwDQotI2RlZmluZSBN SUlfQ05UTF9SRVNFVCAgICAweDgwMDANCi0NCi0vKiBNSUkgU3RhdHVzIHJlZ2lzdGVyIGJpdCAg Ki8NCi0jZGVmaW5lCU1JSV9TVEFUX0VYVCAgICAgICAgMHgwMDAxIA0KLSNkZWZpbmUgTUlJX1NU QVRfSkFCICAgICAgICAweDAwMDINCi0jZGVmaW5lCU1JSV9TVEFUX0xJTksgICAgICAgMHgwMDA0 DQotI2RlZmluZSBNSUlfU1RBVF9DQU5fQVVUTyAgIDB4MDAwOA0KLSNkZWZpbmUJTUlJX1NUQVRf RkFVTFQgICAgICAweDAwMTAgDQotI2RlZmluZSBNSUlfU1RBVF9BVVRPX0RPTkUgIDB4MDAyMA0K LSNkZWZpbmUJTUlJX1NUQVRfQ0FOX1QgICAgICAweDA4MDANCi0jZGVmaW5lIE1JSV9TVEFUX0NB Tl9UX0ZEWCAgMHgxMDAwDQotI2RlZmluZQlNSUlfU1RBVF9DQU5fVFggICAgIDB4MjAwMCANCi0j ZGVmaW5lIE1JSV9TVEFUX0NBTl9UWF9GRFggMHg0MDAwDQotI2RlZmluZQlNSUlfU1RBVF9DQU5f VDQgICAgIDB4ODAwMA0KLQ0KLQ0KLSNkZWZpbmUJCU1JSV9JRDFfT1VJX0xPCQkweEZDMDAJLyog bG93IGJpdHMgb2YgT1VJIG1hc2sgKi8NCi0jZGVmaW5lCQlNSUlfSUQxX01PREVMCQkweDAzRjAJ LyogbW9kZWwgbnVtYmVyICovDQotI2RlZmluZQkJTUlJX0lEMV9SRVYJCTB4MDAwRgkvKiBtb2Rl bCBudW1iZXIgKi8NCi0NCi0vKiBNSUkgTldBWSBSZWdpc3RlciBCaXRzIC4uLg0KLSAgIHZhbGlk IGZvciB0aGUgQU5BUiAoQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50KSBhbmQNCi0gICBB TkxQQVIgKEF1dG8tTmVnb3RpYXRpb24gTGluayBQYXJ0bmVyKSByZWdpc3RlcnMgKi8NCi0jZGVm aW5lCU1JSV9OV0FZX05PREVfU0VMIDB4MDAxZg0KLSNkZWZpbmUgTUlJX05XQVlfQ1NNQV9DRCAg MHgwMDAxDQotI2RlZmluZQlNSUlfTldBWV9UCSAgMHgwMDIwDQotI2RlZmluZSBNSUlfTldBWV9U X0ZEWCAgICAweDAwNDANCi0jZGVmaW5lCU1JSV9OV0FZX1RYICAgICAgIDB4MDA4MA0KLSNkZWZp bmUgTUlJX05XQVlfVFhfRkRYICAgMHgwMTAwDQotI2RlZmluZQlNSUlfTldBWV9UNCAgICAgICAw eDAyMDAgDQotI2RlZmluZSBNSUlfTldBWV9QQVVTRSAgICAweDA0MDAgDQotI2RlZmluZQlNSUlf TldBWV9SRiAgICAgICAweDIwMDAgLyogUmVtb3RlIEZhdWx0ICovDQotI2RlZmluZSBNSUlfTldB WV9BQ0sgICAgICAweDQwMDAgLyogUmVtb3RlIEFja25vd2xlZGdlICovDQotI2RlZmluZQlNSUlf TldBWV9OUCAgICAgICAweDgwMDAgLyogTmV4dCBQYWdlIChFbmFibGUpICovDQotDQotLyogbWlp IHN0c291dCByZWdpc3RlciBiaXRzICovDQotI2RlZmluZQlNSUlfU1RTT1VUX0xJTktfRkFJTCAw eDQwMDANCi0jZGVmaW5lCU1JSV9TVFNPVVRfU1BEICAgICAgIDB4MDA4MA0KLSNkZWZpbmUgTUlJ X1NUU09VVF9EUExYICAgICAgMHgwMDQwDQotDQotLyogbWlpIHN0c2ljcyByZWdpc3RlciBiaXRz ICovDQotI2RlZmluZQlNSUlfU1RTSUNTX1NQRCAgICAgICAweDgwMDANCi0jZGVmaW5lIE1JSV9T VFNJQ1NfRFBMWCAgICAgIDB4NDAwMA0KLSNkZWZpbmUJTUlJX1NUU0lDU19MSU5LU1RTICAgMHgw MDAxDQotDQotLyogbWlpIHN0c3N1bSByZWdpc3RlciBiaXRzICovDQotI2RlZmluZQlNSUlfU1RT U1VNX0xJTksgIDB4MDAwOA0KLSNkZWZpbmUgTUlJX1NUU1NVTV9EUExYICAweDAwMDQNCi0jZGVm aW5lCU1JSV9TVFNTVU1fQVVUTyAgMHgwMDAyDQotI2RlZmluZSBNSUlfU1RTU1VNX1NQRCAgIDB4 MDAwMQ0KLQ0KLS8qIGxzaSBwaHkgc3RhdHVzIHJlZ2lzdGVyICovDQotI2RlZmluZSBNSUlfTFNJ X1BIWV9TVEFUX0ZEWAkweDAwNDANCi0jZGVmaW5lIE1JSV9MU0lfUEhZX1NUQVRfU1BECTB4MDA4 MA0KLQ0KLS8qIGFtZCBwaHkgc3RhdHVzIHJlZ2lzdGVyICovDQotI2RlZmluZSBNSUlfQU1EX1BI WV9TVEFUX0ZEWAkweDA4MDANCi0jZGVmaW5lIE1JSV9BTURfUEhZX1NUQVRfU1BECTB4MDQwMA0K LQ0KLS8qIGludGVsIHBoeSBzdGF0dXMgcmVnaXN0ZXIgKi8NCi0jZGVmaW5lIE1JSV9JTlRFTF9Q SFlfU1RBVF9GRFgJMHgwMjAwDQotI2RlZmluZSBNSUlfSU5URUxfUEhZX1NUQVRfU1BECTB4NDAw MA0KLQ0KLS8qIEF1eGlsbGlhcnkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5l IE1JSV9BVVhfRkRYICAgICAgMHgwMDAxDQotI2RlZmluZSBNSUlfQVVYXzEwMCAgICAgIDB4MDAw Mg0KLSNkZWZpbmUgTUlJX0FVWF9GMTAwICAgICAweDAwMDQNCi0jZGVmaW5lIE1JSV9BVVhfQU5F RyAgICAgMHgwMDA4DQotDQogdHlwZWRlZiBzdHJ1Y3QgbWlpX3BoeSB7DQogCXN0cnVjdCBtaWlf cGh5ICogbmV4dDsNCiAJc3RydWN0IG1paV9jaGlwX2luZm8gKiBjaGlwX2luZm87DQpAQCAtMTQ4 LDEyICs0OCw2IEBAIHR5cGVkZWYgc3RydWN0IG1paV9waHkgew0KIAl1MzIgKm1paV9kYXRhX3Jl ZzsNCiB9IG1paV9waHlfdDsNCiANCi1zdHJ1Y3QgcGh5X29wcyB7DQotCWludCAoKnBoeV9pbml0 KSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsNCi0JaW50ICgqcGh5X3Jlc2V0KSAoc3RydWN0 IG5ldF9kZXZpY2UgKiwgaW50KTsNCi0JaW50ICgqcGh5X3N0YXR1cykgKHN0cnVjdCBuZXRfZGV2 aWNlICosIGludCwgdTE2ICosIHUxNiAqKTsNCi19Ow0KLQ0KIC8qIA0KICAqIERhdGEgQnVmZmVy IERlc2NyaXB0b3IuIERhdGEgYnVmZmVycyBtdXN0IGJlIGFsaWduZWQgb24gMzIgYnl0ZSANCiAg KiBib3VuZGFyeSBmb3IgYm90aCwgcmVjZWl2ZSBhbmQgdHJhbnNtaXQuDQpAQCAtMjAwLDcgKzk0 LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgbWFjX3JlZyB7DQogDQogDQogc3RydWN0IGF1MTAwMF9wcml2 YXRlIHsNCi0JDQogCWRiX2Rlc3RfdCAqcERCZnJlZTsNCiAJZGJfZGVzdF90IGRiW05VTV9SWF9C VUZGUytOVU1fVFhfQlVGRlNdOw0KIAl2b2xhdGlsZSByeF9kbWFfdCAqcnhfZG1hX3JpbmdbTlVN X1JYX0RNQV07DQpAQCAtMjE0LDggKzEwNywxNCBAQCBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgew0K IA0KIAlpbnQgbWFjX2lkOw0KIAltaWlfcGh5X3QgKm1paTsNCi0Jc3RydWN0IG1paV9pZl9pbmZv IG1paV9pZjsNCi0Jc3RydWN0IHBoeV9vcHMgKnBoeV9vcHM7DQorDQorCWludCBvbGRfbGluazsg ICAgICAgICAgLyogdXNlZCBieSBhdTEwMDBfYWRqdXN0X2xpbmsgKi8NCisJaW50IG9sZF9zcGVl ZDsgDQorCWludCBvbGRfZHVwbGV4Ow0KKw0KKwlpbnQgcGh5X2FkZHI7ICAgICAgICAgIC8qIHBo eSBhZGRyZXNzICovDQorCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2Ow0KKwlzdHJ1Y3QgbWlp X2J1cyBtaWlfYnVzOw0KIAkNCiAJLyogVGhlc2UgdmFyaWFibGVzIGFyZSBqdXN0IGZvciBxdWlj ayBhY2Nlc3MgdG8gY2VydGFpbiByZWdzIGFkZHJlc3Nlcy4gKi8NCiAJdm9sYXRpbGUgbWFjX3Jl Z190ICptYWM7ICAvKiBtYWMgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICovICAgDQpA QCAtMjI3LDExICsxMjYsOSBAQCBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgew0KIAl1OCAqaGFzaF90 YWJsZTsNCiAJdTMyIGhhc2hfbW9kZTsNCiAJdTMyIGludHJfd29ya19kb25lOyAvKiBudW1iZXIg b2YgUnggYW5kIFR4IHBrdHMgcHJvY2Vzc2VkIGluIHRoZSBpc3IgKi8NCi0JaW50IHBoeV9hZGRy OyAgICAgICAgICAvKiBwaHkgYWRkcmVzcyAqLw0KIAl1MzIgb3B0aW9uczsgICAgICAgICAgIC8q IFVzZXItc2V0dGFibGUgbWlzYy4gZHJpdmVyIG9wdGlvbnMuICovDQogCXUzMiBkcnZfZmxhZ3M7 DQotCWludCB3YW50X2F1dG9uZWc7DQorDQogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRz Ow0KLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsNCiAJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAv KiBTZXJpYWxpc2UgYWNjZXNzIHRvIGRldmljZSAqLw0KIH07DQo= --=-ASCzkIEkSfwkp9HUWIX1-- --=-CRavCE66iNmA7KvOUpw4 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) iD8DBQBEVlzOSYHgZIg/QUIRAqzpAJwIfhxT+T7rF1zkiABdBD6X+XaiigCdGHtO 5Y/pL2CDIX8ncxClDn23Qt8= =YWDr -----END PGP SIGNATURE----- --=-CRavCE66iNmA7KvOUpw4--