From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff Garzik Subject: [Fwd: [Patch] sata_via.c: add support for VT8251, fix the internal chips issue and] Date: Fri, 22 Aug 2008 02:39:38 -0400 Message-ID: <48AE5F2A.5060803@garzik.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080807090506040204080609" Return-path: Received: from srv5.dvmed.net ([207.36.208.214]:44237 "EHLO mail.dvmed.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753478AbYHVGjn (ORCPT ); Fri, 22 Aug 2008 02:39:43 -0400 Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: Linux IDE mailing list Cc: LKML This is a multi-part message in MIME format. --------------080807090506040204080609 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This was signed-off-by and meant for the public kernel, so I am forwarding this to the lists. Jeff --------------080807090506040204080609 Content-Type: message/rfc822; name="[Patch] sata_via.c: add support for VT8251, fix the internal chips issue and.eml" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename*0="[Patch] sata_via.c: add support for VT8251, fix the internal"; filename*1=" chips issue and.eml" X-Account-Key: account2 X-Mozilla-Keys: Return-path: Envelope-to: jeff@garzik.org Delivery-date: Mon, 21 Jul 2008 07:39:14 +0000 Received: from srv1.dvmed.net ([207.234.209.181]) by mail.dvmed.net with esmtps (Exim 4.69 #1 (Red Hat Linux)) id 1KKpzG-00056I-QC for jeff@garzik.org; Mon, 21 Jul 2008 07:39:14 +0000 Received: from mailtp.via.com.tw ([61.66.243.2]) by srv1.dvmed.net with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1KKpyi-0005pc-Up for jeff@garzik.org; Mon, 21 Jul 2008 07:39:14 +0000 Received: from exchtp03.taipei.via.com.tw ([192.168.254.205]) by mailtp.via.com.tw with Microsoft SMTPSVC(6.0.3790.3959); Mon, 21 Jul 2008 15:38:39 +0800 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: [Patch] sata_via.c: add support for VT8251, fix the internal chips issue and Date: Mon, 21 Jul 2008 15:38:38 +0800 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [Patch] sata_via.c: add support for VT8251, fix the internal chips issue and Thread-Index: Acjq/me+2XEcJN2RQFy+LFahhNUPnwAAEesA From: To: Cc: , X-OriginalArrivalTime: 21 Jul 2008 07:38:39.0188 (UTC) FILETIME=[CA9F1940:01C8EB04] X-Spam-Score: -4.0 (----) X-Spam-Report: SpamAssassin version 3.2.5 on srv1.dvmed.net summary: Content analysis details: (-4.0 points, 5.0 required) RGVhciBKZWZmLA0KDQpUaGVyZSBhcmUgc29tZSBiaWcgY2hhbmdlcyBmb3Igc2F0YV92aWEuYywg cGxlYXNlIHJlZmVyIHRvIFtTdW1tYXJ5XSBmb3IgbW9yZSBkZXRhaWwuIA0KQW55IHF1ZXN0aW9u LCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgbWUuIFRoYW5rcy4NCg0KQlJzLA0KSm9zZXBo IENoYW4gDQoNCj09PT09PT09PT09PT09PT09PT09DQpTdW1tYXJ5OiANCmEuIEFkZCBib2FyZCBJ RCBmb3IgVlQ4MjUxLiANCiAgICAtVGhhdCBpcyB0aGUgVlQ4MjUxIGhhcyAyIFNBVEEgY2hhbm5l bHMgYW5kIGVhY2ggY2hhbm5lbCBzdXBwb3J0cyBNYXN0ZXIvU2xhdmUgc2xvdCwgDQogICAgIHRo ZSBzdGFuZGFyZCBTQVRBIG9wZXJhdGlvbnMgaW4gbGliYXRhIHN1cHBvdHMgb25seSBNYXN0ZXIg c2xvdC4gDQpiLiBQYXRjaCA8c3ZpYV9zY3JfcmVhZD4gYW5kIDxzdmlhX3Njcl93cml0ZT4gZnVu Y3Rpb25zIGZvciBWVDgyNTENCiAgICAtIFRoZSBsb2NhdGlvbiBvZiBTQVRBIHJlZ2lzdGVyIG9u IFZUODI1MSBpcyBpbiBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgbm90IGluIFBDSSBCQVIuIA0K Yy4gQWRkIGZ1bmN0aW9uIDx2aWFfYXRhX3RmX2xvYWQ+IA0KICAgIC0gRml4IHRoZSBpbnRlcm5h bCBidWcgb2YgdmlhIGNoaXBzZXRzLCB3aGljaCB3aWxsIHJlc2V0IHRoZSBkZXZpY2UgcmVnaXN0 ZXIgYWZ0ZXIgY2hhbmdpbmcgdGhlIElFTiBiaXQgaW4gQ1RMIHJlZ2lzdGVyDQpkLiBBZGQgZnVu Y3Rpb24gPHZpYV9zdGRfc2V0X3Bpb19tb2RlPiwgPHZpYV9zdGRfc2V0X2RtYV9tb2RlPiBhbmQg PHZpYV9zdGRfY2FibGVfZGV0ZWN0PiANCiAgICAtIFZJQSdzIHNvbWUgUEFUQV9TQVRBIGNvbnRy b2xsZXJzIChzdWN1IGFzIFZUNjQyMSwgQ1g3MDAgYW5kIFZYODAwKSwgYW5kIHRoZSBjb25maWd1 cmUgc3BhY2VzIGFyZSBkaWZmZXJlbnQgDQogICAgICBmb3IgdGhvc2UgY29udHJvbGxlcnMuIFRv IGF2b2lkIHdyaXRpbmcgc2V2ZXJhbCBzaW1pbGFyIGZ1bmN0aW9ucyBmb3IgdGhlc2UgY2hpcHMs IHRoZXNlIDMgZnVuY3Rpb25zIGFyZSB1c2VkLg0KZS4gQWRkIGZ1bmN0aW9uIDx2aWFfc3RkX3Nh dGFfcHJlcmVzZXQ+IGFuZCA8dmlhX3N0ZF9zYXRhX2NvbXJlc2V0Pg0KICAgIC0gU2luY2Ugc29t ZSBWSUEgU0FUQSBjb250cm9sbGVycyBzdXBwb3J0IE1hc3Rlci9TbGF2ZSBtb2RlLCBidXQgdGhl IHN0YW5kYXJkIGhhcmRyZXNldCBpbiBsaWJhdGEgZG9lcyBub3QNCiAgICAgIHN1cHBvcnQgc2xh dmUgc2xvdCwgc28gd2UgaW1wbGVtZW50IHRoZSBoYXJkcmVzZXQgZHVyaW5nIHByZXJlc2V0IHBy b2Nlc3MgYW5kIHRoZW4gZG8gc29mdHJlc2V0LiANCmYuIFJlZGVmaW5lIHNhdGFfb3BzDQogICAg LSBMaWJhdGEgZG9lcyBub3QgZG8gc29mdHJlc2V0IGZvciBTQVRBIGNvbnRyb2xsZXIgaWYgaGFy ZHJlc2V0IGlzIGF2YWlsYWJsZSwgdG8gZW5zdXJlIHRoZSBzbGF2ZSBzbG90IGNvdWxkIGJlIGRl dGVjdGVkLA0KICAgICAgd2Ugc2tpcCBzdGFuZGFyZCBoYXJkcmVzdCBpbiBsaWJhdGEuIEFzIGEg cmVzdWx0LCB3ZSBjb3VsZCBub3QgaW5oZXJpdCB0aGUgb3BzIGZyb20gYXRhX2JtZG1hX3BvcnRf b3BzLCB3aGljaA0KICAgICAgaGFzIGEgZGVmYXVsdCBoYXJkcmVzZXQuDQoNClNpZ25lZC1vZmYt Ynk6IEpvc2VwY2ggQ2hhbiA8am9zZXBoY2hhbkB2aWEuY29tLnR3Pg0KDQotLS0gbGludXgtMi42 LjI2L2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMJMjAwOC0wNy0xNCAxNTo0NjoyMi4wMDAwMDAwMDAg KzA4MDANCisrKyBsaW51eC0yLjYuMjYvZHJpdmVycy9hdGEvc2F0YV92aWEuYwkyMDA4LTA3LTE5 IDAzOjE5OjI5LjAwMDAwMDAwMCArMDgwMA0KQEAgLTQ2LDkgKzQ2LDE1IEBADQogI2RlZmluZSBE UlZfTkFNRQkic2F0YV92aWEiDQogI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4zIg0KIA0KKy8qDQor ICogdnQ4MjUxIGlzIGRpZmZlcmVudCBmcm9tIG90aGVyIHNhdGEgY29udHJvbGxlcnMgb2YgVklB Lg0KKyAqIEl0IGhhcyB0d28gY2hhbm5lbHMsIGVhY2ggY2hhbm5lbCBoYXMgYm90aCBNYXN0ZXIg YW5kDQorICogU2xhdmUgc2xvdA0KKyAqLw0KIGVudW0gYm9hcmRfaWRzX2VudW0gew0KIAl2dDY0 MjAsDQogCXZ0NjQyMSwNCisJdnQ4MjUxLA0KIH07DQogDQogZW51bSB7DQpAQCAtNzEsMTkgKzc3 LDI1IEBADQogc3RhdGljIGludCBzdmlhX3Njcl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVu c2lnbmVkIGludCBzY19yZWcsIHUzMiAqdmFsKTsNCiBzdGF0aWMgaW50IHN2aWFfc2NyX3dyaXRl KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOw0KIHN0 YXRpYyB2b2lkIHN2aWFfbm9vcF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7DQotc3RhdGlj IGludCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25n IGRlYWRsaW5lKTsNCi1zdGF0aWMgaW50IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVjdChzdHJ1Y3Qg YXRhX3BvcnQgKmFwKTsNCi1zdGF0aWMgdm9pZCB2dDY0MjFfc2V0X3Bpb19tb2RlKHN0cnVjdCBh dGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsNCi1zdGF0aWMgdm9pZCB2dDY0 MjFfc2V0X2RtYV9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICph ZGV2KTsNCisNCitzdGF0aWMgdm9pZCB2aWFfYXRhX3RmX2xvYWQoc3RydWN0IGF0YV9wb3J0ICph cCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOw0KKw0KK3N0YXRpYyB2b2lkIHZpYV9z dGRfc2V0X3Bpb19tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICph ZGV2KTsNCitzdGF0aWMgdm9pZCB2aWFfc3RkX3NldF9kbWFfbW9kZShzdHJ1Y3QgYXRhX3BvcnQg KmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7DQorc3RhdGljIGludCB2aWFfc3RkX2NhYmxl X2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsNCisNCitzdGF0aWMgaW50IHZpYV9zdGRfc2F0 YV9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssDQorCQkJdW5zaWduZWQgbG9uZyBkZWFk bGluZSk7DQorc3RhdGljIGludCB2aWFfc3RkX3NhdGFfY29tcmVzZXQoc3RydWN0IGF0YV9wb3J0 ICphcCwgaW50IGlzTWFzdGVyKTsNCiANCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2Vf aWQgc3ZpYV9wY2lfdGJsW10gPSB7DQorCXsgUENJX1ZERVZJQ0UoVklBLCAweDMxNDkpLCB2dDY0 MjAgfSwgLyogVHdvIHNhdGEgY2hhbm5lbHMoTWFzdGVyKSAqLw0KIAl7IFBDSV9WREVWSUNFKFZJ QSwgMHg1MzM3KSwgdnQ2NDIwIH0sDQotCXsgUENJX1ZERVZJQ0UoVklBLCAweDA1OTEpLCB2dDY0 MjAgfSwNCi0JeyBQQ0lfVkRFVklDRShWSUEsIDB4MzE0OSksIHZ0NjQyMCB9LA0KLQl7IFBDSV9W REVWSUNFKFZJQSwgMHgzMjQ5KSwgdnQ2NDIxIH0sDQotCXsgUENJX1ZERVZJQ0UoVklBLCAweDUy ODcpLCB2dDY0MjAgfSwNCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NTM3MiksIHZ0NjQyMCB9LA0K Kwl7IFBDSV9WREVWSUNFKFZJQSwgMHgwNTkxKSwgdnQ2NDIwIH0sIC8qIFR3byBzYXRhIGNoYW5u ZWxzKE1hc3RlcikgKi8NCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NzM3MiksIHZ0NjQyMCB9LA0K Kwl7IFBDSV9WREVWSUNFKFZJQSwgMHgzMjQ5KSwgdnQ2NDIxIH0sIC8qIDIgc2F0YSBjaG5scywg MSBwYXRhIGNobmwqLw0KKwl7IFBDSV9WREVWSUNFKFZJQSwgMHg1Mjg3KSwgdnQ4MjUxIH0sIC8q IDIgc2F0YSBjaG5scyhNYXN0ZXIvU2xhdmUpICovDQogDQogCXsgfQkvKiB0ZXJtaW5hdGUgbGlz dCAqLw0KIH07DQpAQCAtMTAzLDMxICsxMTUsNzMgQEANCiAJQVRBX0JNRE1BX1NIVChEUlZfTkFN RSksDQogfTsNCiANCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnQ2NDIwX3Nh dGFfb3BzID0gew0KLQkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywNCisvKg0KKyAq IFRoZSBvcGVydGlvbiByZWRlZmluZWQgYnkgVklBIHRvIGltcGxlbWVudCBzYXRhIGZ1bmN0aW9u cy4NCisgKiBTaW5jZSBzb21lIHZpYSBzYXRhIGNvbnRyb2xsZXJzIHN1cHBvcnQgTWFzdGVyL1Ns YXZlIG1vZGUsDQorICogYnV0IHRoZSBzdGFuZGFyZCBoYXJkcmVzZXQgaW4gbGliYXRhIGNvdWxk IG5vdCB3b3JrIHdlbGwNCisgKiBmb3Igc2xhdmUgc2xvdCwgc28gd2UgaW1wbGVtZW50IHRoZSBo YXJkcmVzZXQgZHVyaW5nDQorICogcHJlcmVzZXQsIGFuZCB0aGVuIGRvIHNvZnRyZXNldC4gSXQg c2hvdWxkIGJlIG1lbnRpb25lZA0KKyAqIHRoYXQgbGliYXRhIGRvZXMgbm90IGRvIHNvZnRyZXNl dCBmb3Igc2F0YSBjb250cm9sbGVyIGlmDQorICogaGFyZHJlc2V0IGlzIGF2YWlsdWFibGUsIHRv IGVuc3VyZSB0aGUgc2xhdmUgc2xvdCBjb3VsZA0KKyAqIGJlIGRldGVjdGVkLCB3ZSBza2lwIHN0 YW5kYXJkIGhhcmRyZXN0IGluIGxpYmF0YS4gVGhhdCBpcw0KKyAqIHdoeSB3ZSBoYXZlIHRvIHJl ZGVmaW5lIHRoZSBzYXRhIG9wZXJhdGlvbnMgb2Ygc2F0YQ0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3Qg YXRhX3BvcnRfb3BlcmF0aW9ucyB2aWFfc3RkX3NhdGFfb3BzID0gew0KKwkuaW5oZXJpdHMJCT0g JmF0YV9iYXNlX3BvcnRfb3BzLA0KKw0KKwkucWNfcHJlcAkJPSBhdGFfc2ZmX3FjX3ByZXAsDQor CS5xY19pc3N1ZQkJPSBhdGFfc2ZmX3FjX2lzc3VlLA0KKwkucWNfZmlsbF9ydGYJCT0gYXRhX3Nm Zl9xY19maWxsX3J0ZiwNCisNCisJLnRoYXcJCQk9IGF0YV9zZmZfdGhhdywNCisJLnNvZnRyZXNl dAkJPSBhdGFfc2ZmX3NvZnRyZXNldCwNCisJLnBvc3RyZXNldAkJPSBhdGFfc2ZmX3Bvc3RyZXNl dCwNCisJLmVycm9yX2hhbmRsZXIJCT0gYXRhX3NmZl9lcnJvcl9oYW5kbGVyLA0KKwkucG9zdF9p bnRlcm5hbF9jbWQJPSBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kLA0KKw0KKwkuc2ZmX2Rldl9z ZWxlY3QJCT0gYXRhX3NmZl9kZXZfc2VsZWN0LA0KKwkuc2ZmX2NoZWNrX3N0YXR1cwk9IGF0YV9z ZmZfY2hlY2tfc3RhdHVzLA0KKwkuc2ZmX3RmX3JlYWQJCT0gYXRhX3NmZl90Zl9yZWFkLA0KKwku c2ZmX2V4ZWNfY29tbWFuZAk9IGF0YV9zZmZfZXhlY19jb21tYW5kLA0KKwkuc2ZmX2RhdGFfeGZl cgkJPSBhdGFfc2ZmX2RhdGFfeGZlciwNCisJLnNmZl9pcnFfb24JCQk9IGF0YV9zZmZfaXJxX29u LA0KKwkuc2ZmX2lycV9jbGVhcgkJPSBhdGFfc2ZmX2lycV9jbGVhciwNCisNCisJLnBvcnRfc3Rh cnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LA0KKw0KKwkubW9kZV9maWx0ZXIJCT0gYXRhX2JtZG1h X21vZGVfZmlsdGVyLA0KKw0KKwkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLA0KKwku Ym1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LA0KKwkuYm1kbWFfc3RvcAkJCT0gYXRhX2Jt ZG1hX3N0b3AsDQorCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywNCisNCisJLnNm Zl90Zl9sb2FkCQk9IHZpYV9hdGFfdGZfbG9hZCwNCisNCisJLnByZXJlc2V0CQk9IHZpYV9zdGRf c2F0YV9wcmVyZXNldCwNCiAJLmZyZWV6ZQkJCT0gc3ZpYV9ub29wX2ZyZWV6ZSwNCi0JLnByZXJl c2V0CQk9IHZ0NjQyMF9wcmVyZXNldCwNCi19Ow0KIA0KLXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRf b3BlcmF0aW9ucyB2dDY0MjFfcGF0YV9vcHMgPSB7DQotCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1h X3BvcnRfb3BzLA0KLQkuY2FibGVfZGV0ZWN0CQk9IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVjdCwN Ci0JLnNldF9waW9tb2RlCQk9IHZ0NjQyMV9zZXRfcGlvX21vZGUsDQotCS5zZXRfZG1hbW9kZQkJ PSB2dDY0MjFfc2V0X2RtYV9tb2RlLA0KKwkuc2NyX3JlYWQJCT0gc3ZpYV9zY3JfcmVhZCwNCisJ LnNjcl93cml0ZQkJPSBzdmlhX3Njcl93cml0ZSwNCiB9Ow0KIA0KLXN0YXRpYyBzdHJ1Y3QgYXRh X3BvcnRfb3BlcmF0aW9ucyB2dDY0MjFfc2F0YV9vcHMgPSB7DQorc3RhdGljIHN0cnVjdCBhdGFf cG9ydF9vcGVyYXRpb25zIHZpYV9zdGRfcGF0YV9vcHMgPSB7DQogCS5pbmhlcml0cwkJPSAmYXRh X2JtZG1hX3BvcnRfb3BzLA0KLQkuc2NyX3JlYWQJCT0gc3ZpYV9zY3JfcmVhZCwNCi0JLnNjcl93 cml0ZQkJPSBzdmlhX3Njcl93cml0ZSwNCisNCisJLmNhYmxlX2RldGVjdAk9IHZpYV9zdGRfY2Fi bGVfZGV0ZWN0LA0KKwkuc2V0X3Bpb21vZGUJPSB2aWFfc3RkX3NldF9waW9fbW9kZSwNCisJLnNl dF9kbWFtb2RlCT0gdmlhX3N0ZF9zZXRfZG1hX21vZGUsDQorDQorCS5zZmZfdGZfbG9hZAk9IHZp YV9hdGFfdGZfbG9hZCwNCiB9Ow0KIA0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5m byB2dDY0MjBfcG9ydF9pbmZvID0gew0KKw0KK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2 dDY0MjBfcG9ydF9pbmZvID0gew0KIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFH X05PX0xFR0FDWSwNCiAJLnBpb19tYXNrCT0gMHgxZiwNCiAJLm13ZG1hX21hc2sJPSAweDA3LA0K IAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LA0KLQkucG9ydF9vcHMJPSAmdnQ2NDIwX3NhdGFfb3Bz LA0KKwkucG9ydF9vcHMJPSAmdmlhX3N0ZF9zYXRhX29wcywNCiB9Ow0KIA0KIHN0YXRpYyBzdHJ1 Y3QgYXRhX3BvcnRfaW5mbyB2dDY0MjFfc3BvcnRfaW5mbyA9IHsNCkBAIC0xMzUsNyArMTg5LDcg QEANCiAJLnBpb19tYXNrCT0gMHgxZiwNCiAJLm13ZG1hX21hc2sJPSAweDA3LA0KIAkudWRtYV9t YXNrCT0gQVRBX1VETUE2LA0KLQkucG9ydF9vcHMJPSAmdnQ2NDIxX3NhdGFfb3BzLA0KKwkucG9y dF9vcHMJPSAmdmlhX3N0ZF9zYXRhX29wcywNCiB9Ow0KIA0KIHN0YXRpYyBzdHJ1Y3QgYXRhX3Bv cnRfaW5mbyB2dDY0MjFfcHBvcnRfaW5mbyA9IHsNCkBAIC0xNDMsNyArMTk3LDIwIEBADQogCS5w aW9fbWFzawk9IDB4MWYsDQogCS5td2RtYV9tYXNrCT0gMCwNCiAJLnVkbWFfbWFzawk9IEFUQV9V RE1BNiwNCi0JLnBvcnRfb3BzCT0gJnZ0NjQyMV9wYXRhX29wcywNCisJLnBvcnRfb3BzCT0gJnZp YV9zdGRfcGF0YV9vcHMsDQorfTsNCisNCisvKioNCisgKiBWVDgyNTEgaGFzIHR3byBzYXRhIGNo YW5uZWxzLCB3aGljaCBhcmUgYm90aCBNYXN0ZXIvU2xhdmUgbW9kZS4gVGhpcyBpcyBkaWZmZXJl bnQNCisgKiBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBsaWJhdGEsIHdoaWNoIHN1cHBvcnRz IG9ubHkgbWFzdGVyIG1vZGUNCisgKi8NCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ4 MjUxX3BvcnRfaW5mbyA9IHsNCisJLmZsYWdzCQk9ICBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdf U0xBVkVfUE9TUyB8DQorCQkJCQlBVEFfRkxBR19OT19MRUdBQ1ksDQorCS5waW9fbWFzawk9IDB4 MWYsDQorCS5td2RtYV9tYXNrCT0gMHgwNywNCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwNCisJ LnBvcnRfb3BzCT0gJnZpYV9zdGRfc2F0YV9vcHMsDQogfTsNCiANCiBNT0RVTEVfQVVUSE9SKCJK ZWZmIEdhcnppayIpOw0KQEAgLTE1MiwyMiArMjE5LDIzNSBAQA0KIE1PRFVMRV9ERVZJQ0VfVEFC TEUocGNpLCBzdmlhX3BjaV90YmwpOw0KIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsNCiAN CisvKioNCisgKiBGb3IgY29udHJvbGxlciAweDgyNTEgYW5kIG94MDU4MS8weDUzMjQsIHRoZSBz YXRhIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGRvIG5vdA0KKyAqIGxvY2F0ZSBpbiB0aGUgUENJIEJB UnMsIGluc3RlYWQsIHRoZXkgYXJlIGluIHRoZSBQQ0kgY29uZmlndXJlIHNwYWNlLg0KKyAqLw0K IHN0YXRpYyBpbnQgc3ZpYV9zY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBp bnQgc2NfcmVnLCB1MzIgKnZhbCkNCiB7DQotCWlmIChzY19yZWcgPiBTQ1JfQ09OVFJPTCkNCisJ c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOw0KKwl1OCAg Y29uZmlnX3NwYWNlX3ZhbHVlOw0KKyAgICB1OCAgYnl0ZV90ZW1wOw0KKwl1MzIgc2NyX3ZhbHVl Ow0KKyAgICB1MzIgZHdvcmRfdGVtcDsNCisgICAgczggIHNoaWZ0Ow0KKyAgICB1OCAgc2xvdDsN CisNCisgICAgdW5zaWduZWQgaW50IHNjcl9yZWcgPSBzY19yZWc7DQorDQorICAgIGlmIChzY3Jf cmVnID4gU0NSX0NPTlRST0wpIHsNCisJCVZQUklOVEsoImludmFsaWQgc2NyWyVkXSBhZGRyZXNz IVxuIiwgc2NyX3JlZyk7DQogCQlyZXR1cm4gLUVJTlZBTDsNCi0JKnZhbCA9IGlvcmVhZDMyKGFw LT5pb2FkZHIuc2NyX2FkZHIgKyAoNCAqIHNjX3JlZykpOw0KLQlyZXR1cm4gMDsNCisgICAgfQ0K Kw0KKw0KKyAgICBpZiAoIShwZGV2LT5kZXZpY2UgPT0gMHg1Mjg3IHx8IHBkZXYtPmRldmljZSA9 PSAweDA1ODEgfHwNCisJCXBkZXYtPmRldmljZSA9PSAweDUzMjQpKQ0KKwkJKnZhbCA9IGlvcmVh ZDMyKGFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoNCAqIHNjcl9yZWcpKTsNCisgICAgZWxzZSB7DQor CQljb25maWdfc3BhY2VfdmFsdWUgPSAwOw0KKwkJc2NyX3ZhbHVlID0gMDsNCisJCXNoaWZ0ICAg ICA9IDA7DQorDQorCQkvKioNCisJCSAqIFNpbmNlIHRoZXNlIGNoaXBzIGRvIG5vdCB1c2UgaW9t YXAgdG8gZ2V0IHRoZSBhZGRyZXNzIG9mIHNjciwNCisJCSAqIHdlIHVzZSB0aGVzZSByZWdpc3Rl ciB0byBzdG9yZSB0aGUgc2xvdCBpbmRleA0KKwkJICovDQorCQlzbG90ID0gKHUzMilhcC0+aW9h ZGRyLnNjcl9hZGRyICYgMHgwMzsNCisNCisJCWlmIChzY3JfcmVnID09IFNDUl9TVEFUVVMpIHsN CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAoMHhBMCArIChzbG90ICYgMHgwMykpLA0K KwkJCQkmY29uZmlnX3NwYWNlX3ZhbHVlKTsNCisNCisJCQkvKiBTZXQgdGhlIERFVCBmaWVsZCwg Yml0MCBhbmQgMSBvZiB0aGUgY29uZmlnIGJ5dGUgKi8NCisJCQlzY3JfdmFsdWUgfD0gKGNvbmZp Z19zcGFjZV92YWx1ZSAmIDB4MDMpOw0KKw0KKwkJCS8qIFNldCB0aGUgU1BEIGZpZWxkLCBiaXQ0 IG9mIHRoZSBjb25maWd1cmUgYnl0ZSAqLw0KKwkJCWlmIChjb25maWdfc3BhY2VfdmFsdWUgJiAo MTw8NCkpDQorCQkJCXNjcl92YWx1ZSB8PSAodTgpKDB4MDIgPDwgNCk7DQorCQkJZWxzZQ0KKwkJ CQlzY3JfdmFsdWUgfD0gKHU4KSgweDAxIDw8IDQpOw0KKw0KKwkJCS8qIFNldCB0aGUgSVBNIGZp ZWxkLCBiaXQyIGFuZCAzIG9mIHRoZSBjb25maWcgYnl0ZSAqLw0KKwkJCWJ5dGVfdGVtcCA9IChj b25maWdfc3BhY2VfdmFsdWUgPj4gMikgJiAweDAzOw0KKwkJCXNoaWZ0ID0gYnl0ZV90ZW1wIC0g MTsNCisJCQlpZiAoc2hpZnQgPCAwKQ0KKwkJCQlzaGlmdCA9IDA7DQorDQorCQkJZHdvcmRfdGVt cCA9IChieXRlX3RlbXAgKyAweDAxKSA8PCBzaGlmdDsNCisJCQlzY3JfdmFsdWUgIHw9ICgoZHdv cmRfdGVtcCAmIDB4MGYpIDw8IDgpOw0KKwkJfSBlbHNlIGlmIChzY3JfcmVnID09IFNDUl9FUlJP Uikgew0KKwkJCWlmIChwZGV2LT5kZXZpY2UgPT0gMHg1Mjg3KQ0KKwkJCQlwY2lfcmVhZF9jb25m aWdfZHdvcmQocGRldiwNCisJCQkJKDB4QjAgKyAoc2xvdCAmIDB4MDMpICogNCksICZzY3JfdmFs dWUpOw0KKwkJCWVsc2UNCisJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsDQorCQkJCSgw eEE4ICsgKHNsb3QgJiAweDAzKSAqIDQpLCAmc2NyX3ZhbHVlKTsNCisJCX0gZWxzZSBpZiAoc2Ny X3JlZyA9PSBTQ1JfQ09OVFJPTCkgew0KKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsDQor CQkJCSgweEE0ICsgKHNsb3QgJiAweDAzKSksICZjb25maWdfc3BhY2VfdmFsdWUpOw0KKw0KKwkJ CSAvKiBSZWFkIHRoZSBERVQgZmllbGQsIGJpdDAgYW5kIGJpdDEgKi8NCisJCQkgYnl0ZV90ZW1w ID0gY29uZmlnX3NwYWNlX3ZhbHVlICYgMHgwMzsNCisJCQkgc2NyX3ZhbHVlIHw9ICgoKGJ5dGVf dGVtcCAmIDB4MDIpIDw8IDEpIHwNCisJCQkJIChieXRlX3RlbXAgJiAweDAxKSk7DQorDQorCQkJ LyogUmVhZCB0aGUgU1BEIGZpZWxkLCBiaXQ0ICovDQorCQkJc2NyX3ZhbHVlICY9IH4odTMyKTB4 RjA7DQorDQorCQkJLyogUmVhZCB0aGUgSVBNIGZpZWxkLCBiaXQyIGFuZCBiaXQzICovDQorCQkJ ZHdvcmRfdGVtcCA9IChjb25maWdfc3BhY2VfdmFsdWUgPj4gMikgJiAweDAzOw0KKwkJCXNjcl92 YWx1ZSAgfD0gKGR3b3JkX3RlbXAgPDwgOCk7DQorCQl9DQorDQorCQkqdmFsID0gc2NyX3ZhbHVl Ow0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KIH0NCiANCisNCisNCiBzdGF0aWMgaW50IHN2 aWFfc2NyX3dyaXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUz MiB2YWwpDQogew0KLQlpZiAoc2NfcmVnID4gU0NSX0NPTlRST0wpDQorCXN0cnVjdCBwY2lfZGV2 ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsNCisJdTggIGNvbmZpZ19zcGFjZV92 YWx1ZTsNCisgICAgdTggIGJ5dGVfdGVtcDsNCisgICAgdTggIHNsb3Q7DQorDQorCXVuc2lnbmVk IGludCBzY3JfcmVnID0gc2NfcmVnOw0KKw0KKyAgICBpZiAoc2NyX3JlZyA+IFNDUl9DT05UUk9M KSB7DQorCQlWUFJJTlRLKCJpbnZhbGlkIHNjclslZF0gYWRkcmVzcyFcbiIsIHNjcl9yZWcpOw0K IAkJcmV0dXJuIC1FSU5WQUw7DQotCWlvd3JpdGUzMih2YWwsIGFwLT5pb2FkZHIuc2NyX2FkZHIg KyAoNCAqIHNjX3JlZykpOw0KKyAgICB9DQorDQorICAgIGlmIChzY3JfcmVnID09IFNDUl9TVEFU VVMpIHsNCisJCVZQUklOVEsoInNjcl9zdGF0dXMgY2FuIG5vdCBiZSB3cml0ZSFcbiIpOw0KKwkJ cmV0dXJuIC1FSU5WQUw7DQorICAgIH0NCisNCisgICAgaWYgKCEocGRldi0+ZGV2aWNlID09IDB4 NTI4NyB8fCBwZGV2LT5kZXZpY2UgPT0gMHgwNTgxIHx8DQorCQlwZGV2LT5kZXZpY2UgPT0gMHg1 MzI0KSkNCisJCWlvd3JpdGUzMih2YWwsIGFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoNCAqIHNjcl9y ZWcpKTsNCisgICAgZWxzZSB7DQorCQlieXRlX3RlbXAgID0gMDsNCisJCWNvbmZpZ19zcGFjZV92 YWx1ZSA9IDA7DQorDQorCQkvKiBUbyBnZXQgdGhlIHNsb3QgaW5kZXggKi8NCisJICAgIHNsb3Qg PSAodTMyKSBhcC0+aW9hZGRyLnNjcl9hZGRyICYgMHgwMzsNCisNCisJCWlmIChzY3JfcmVnID09 IFNDUl9FUlJPUikgew0KKwkJCWlmIChwZGV2LT5kZXZpY2UgPT0gMHg1Mjg3KQ0KKwkJCQlwY2lf d3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsDQorCQkJCSgweEIwICsgKHNsb3QgJiAweDAzKSAqIDQp LCB2YWwpOw0KKwkJCWVsc2UNCisJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LA0KKwkJ CQkoMHhBOCArIChzbG90ICYgMHgwMykgKiA0KSwgdmFsKTsNCisJCX0gZWxzZSBpZiAoc2NyX3Jl ZyA9PSBTQ1JfQ09OVFJPTCkgew0KKwkJCS8qIFNldCB0aGUgREVUIGZpZWxkICovDQorCQkJYnl0 ZV90ZW1wID0gKCgodTgpKHZhbCAmIDB4MDQpKSA+PiAxKSB8DQorCQkJCSgodTgpKHZhbCAmIDB4 MDEpKTsNCisJCQljb25maWdfc3BhY2VfdmFsdWUgfD0gKGJ5dGVfdGVtcCAmIDB4MEYpOw0KKw0K KwkJCS8qIFNldCB0aGUgSVBNIGZpZWxkICovDQorCQkJYnl0ZV90ZW1wID0gKHZhbCA+PiA4KSAm IDB4MDM7DQorCQkJY29uZmlnX3NwYWNlX3ZhbHVlIHw9IChieXRlX3RlbXAgPDwgMik7DQorCQkJ cGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsICgweEE0ICsgKHNsb3QgJiAweDAzKSksDQorCQkJ CWNvbmZpZ19zcGFjZV92YWx1ZSk7DQorCQl9DQorICAgIH0NCisNCiAJcmV0dXJuIDA7DQogfQ0K IA0KKy8qKg0KKyAqCXZpYV9hdGFfc2ZmX3RmX2xvYWQgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVy cyB0byBob3N0IGNvbnRyb2xsZXINCisgKglAYXA6IFBvcnQgdG8gd2hpY2ggb3V0cHV0IGlzIHNl bnQNCisgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQNCisgKg0KKyAqCU91dHB1dHMg QVRBIHRhc2tmaWxlIHRvIHN0YW5kYXJkIEFUQSBob3N0IGNvbnRyb2xsZXIuDQorICoNCisgKglO b3RlOiBUaGlzIGlzIHRvIGZpeCB0aGUgaW50ZXJuYWwgYnVnIG9mIHZpYSBjaGlwc2V0cywNCisg KiAgd2hpY2ggd2lsbCByZXNldCB0aGUgZGV2aWNlIHJlZ2lzdGVyIGFmdGVyIGNoYW5naW5nIHRo ZSBJRU4gYml0DQorICogIG9uIGN0bCByZWdpc3Rlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIHZpYV9h dGFfdGZfbG9hZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxl ICp0ZikNCit7DQorCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7DQor CXVuc2lnbmVkIGludCBpc19hZGRyID0gdGYtPmZsYWdzICYgQVRBX1RGTEFHX0lTQUREUjsNCisN CisJaWYgKHRmLT5jdGwgIT0gYXAtPmxhc3RfY3RsKSB7DQorCQlpb3dyaXRlOCh0Zi0+Y3RsLCBp b2FkZHItPmN0bF9hZGRyKTsNCisJCWlvd3JpdGU4KHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNl X2FkZHIpOw0KKwkJYXAtPmxhc3RfY3RsID0gdGYtPmN0bDsNCisJCWF0YV93YWl0X2lkbGUoYXAp Ow0KKwl9DQorDQorCWlmIChpc19hZGRyICYmICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfTEJBNDgp KSB7DQorCQlpb3dyaXRlOCh0Zi0+aG9iX2ZlYXR1cmUsIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsN CisJCWlvd3JpdGU4KHRmLT5ob2JfbnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7DQorCQlpb3dy aXRlOCh0Zi0+aG9iX2xiYWwsIGlvYWRkci0+bGJhbF9hZGRyKTsNCisJCWlvd3JpdGU4KHRmLT5o b2JfbGJhbSwgaW9hZGRyLT5sYmFtX2FkZHIpOw0KKwkJaW93cml0ZTgodGYtPmhvYl9sYmFoLCBp b2FkZHItPmxiYWhfYWRkcik7DQorCQlWUFJJTlRLKCJob2I6IGZlYXQgMHglWCBuc2VjdCAweCVY LCBsYmEgMHglWCAweCVYIDB4JVhcbiIsDQorCQkJdGYtPmhvYl9mZWF0dXJlLA0KKwkJCXRmLT5o b2JfbnNlY3QsDQorCQkJdGYtPmhvYl9sYmFsLA0KKwkJCXRmLT5ob2JfbGJhbSwNCisJCQl0Zi0+ aG9iX2xiYWgpOw0KKwl9DQorDQorCWlmIChpc19hZGRyKSB7DQorCQlpb3dyaXRlOCh0Zi0+ZmVh dHVyZSwgaW9hZGRyLT5mZWF0dXJlX2FkZHIpOw0KKwkJaW93cml0ZTgodGYtPm5zZWN0LCBpb2Fk ZHItPm5zZWN0X2FkZHIpOw0KKwkJaW93cml0ZTgodGYtPmxiYWwsIGlvYWRkci0+bGJhbF9hZGRy KTsNCisJCWlvd3JpdGU4KHRmLT5sYmFtLCBpb2FkZHItPmxiYW1fYWRkcik7DQorCQlpb3dyaXRl OCh0Zi0+bGJhaCwgaW9hZGRyLT5sYmFoX2FkZHIpOw0KKwkJVlBSSU5USygiZmVhdCAweCVYIG5z ZWN0IDB4JVggbGJhIDB4JVggMHglWCAweCVYXG4iLA0KKwkJCXRmLT5mZWF0dXJlLA0KKwkJCXRm LT5uc2VjdCwNCisJCQl0Zi0+bGJhbCwNCisJCQl0Zi0+bGJhbSwNCisJCQl0Zi0+bGJhaCk7DQor CX0NCisNCisJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19ERVZJQ0UpIHsNCisJCWlvd3JpdGU4 KHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNlX2FkZHIpOw0KKwkJVlBSSU5USygiZGV2aWNlIDB4 JVhcbiIsIHRmLT5kZXZpY2UpOw0KKwl9DQorDQorCWF0YV93YWl0X2lkbGUoYXApOw0KK30NCisN CitzdGF0aWMgaW50IHZpYV9zdGRfY2FibGVfZGV0ZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXApDQor ew0KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7DQor CXU4IHRtcDsNCisJaW50IGNmZ19hZGRyOw0KKw0KKwlpZiAoYXAtPnBvcnRfbm8gPT0gMikgew0K KwkJaWYgKHBkZXYtPmRldmljZSA9PSAweDMyNDkpIHsNCisJCQljZmdfYWRkciA9IDB4QjM7DQor CQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgY2ZnX2FkZHIsICZ0bXApOw0KKwkJCWlmICh0 bXAgJiAweDEwKQ0KKwkJCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDA7DQorCQkJcmV0dXJuIEFUQV9D QkxfUEFUQTgwOw0KKwkJfQ0KKwl9IGVsc2UgaWYgKGFwLT5wb3J0X25vID09IDEpIHsNCisJCWlm ICgocGRldi0+ZGV2aWNlID09IDB4MDU4MSkgfHwgKHBkZXYtPmRldmljZSA9PSAweDUzMjQpKSB7 DQorCQkJY2ZnX2FkZHIgPSAweDUwOw0KKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGNm Z19hZGRyLCAmdG1wKTsNCisJCQlpZiAodG1wICYgMHgxMCkgLyogNDBwaW4gY2FibGUgKi8NCisJ CQkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwOw0KKwkJCWVsc2UgLyogODBwaW4gY2FibGUgKi8NCisJ CQkJcmV0dXJuIEFUQV9DQkxfUEFUQTgwOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiBBVEFfQ0JM X1NBVEE7DQorfQ0KKw0KIHN0YXRpYyB2b2lkIHN2aWFfbm9vcF9mcmVlemUoc3RydWN0IGF0YV9w b3J0ICphcCkNCiB7DQogCS8qIFNvbWUgVklBIGNvbnRyb2xsZXJzIGNob2tlIGlmIEFUQV9OSUVO IGlzIG1hbmlwdWxhdGVkIGluDQpAQCAtMTc3LDE5ICs0NTcsMTE4IEBADQogCWF0YV9zZmZfaXJx X2NsZWFyKGFwKTsNCiB9DQogDQorIC8qKg0KKyAqCXZpYV9zdGRfc2F0YV9jb21yZXNldCAtIGNv bXJlc2V0IGZvciB2aWEgc2F0YSBjb250cm9sbGVyDQorICoJQGFwOiB0YXJnZXQgQVRBIHBvcnQN CisgKglAaXNNYXN0ZXI6IHdoZXRoZXIgdGhlIGlucHV0IHBvcnQgaXMgbWFzdGVyIHNsb3QNCisg Kg0KKyAqCVNvbWUgVklBIGNvbnRyb2xsZXJzIGRvZXMgbm90IHVzZSBQQ0kgQkFSIHRvIG1hcCB0 aGUgc2F0YQ0KKyAqICBjb250cm9sbGVyIHJlZ2lzdGVycywgYmVzaWRlcywgc29tZSB2aWEgZGF0 YSBjb250cm9sbGVycw0KKyAqICBoYXZlIGJvdGggbWFzdGVyIGFuZCBzbGF2ZSBzbG90cy4gQXMg YSByZXN1bHQsIHN0YW5kYXJkDQorICogIG9wZXJhdGlvbnMgaW4gbGliYXRhIGNvdWxkIG5vdCB3 b3JrIHdlbGwNCisgKg0KKyAqCUxPQ0tJTkc6DQorICoJS2VybmVsIHRocmVhZCBjb250ZXh0ICht YXkgc2xlZXApDQorICoNCisgKglSRVRVUk5TOg0KKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90 aGVyd2lzZS4NCisgKi8NCitzdGF0aWMgaW50IHZpYV9zdGRfc2F0YV9jb21yZXNldChzdHJ1Y3Qg YXRhX3BvcnQgKmFwLCBpbnQgaXNNYXN0ZXIpDQorew0KKyAgICBzdHJ1Y3QgcGNpX2RldiAqcGRl diA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7DQorCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9 IGppZmZpZXMgKyAoSFogKiA1KTsNCisJdTMyIHNzdGF0dXMsIHNjb250cm9sLCBzZXJyb3I7DQor CWludCBvbmxpbmUgPSAwOw0KKw0KKwlpbnQgc2xvdDsNCisgICAgaW50IHNsb3Rfc3RhcnQgPSBh cC0+cG9ydF9ubzsNCisJdW5zaWduZWQgaW50IGRldiA9IDA7DQorDQorCXVuc2lnbmVkIGludCBj YmxfdG1wID0gdmlhX3N0ZF9jYWJsZV9kZXRlY3QoYXApOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdf dG1wID0gYXAtPmZsYWdzOw0KKw0KKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9T UykNCisJCXNsb3Rfc3RhcnQgPSBzbG90X3N0YXJ0IDw8IDE7DQorDQorCWFwLT5jYmwgPSBBVEFf Q0JMX1NBVEE7DQorCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TQVRBOw0KKw0KKwl7DQorCQlzbG90 ID0gKGlzTWFzdGVyID8gMCA6IDEpICsgc2xvdF9zdGFydDsNCisJCWlmIChwZGV2LT5kZXZpY2Ug PT0gMHg1Mjg3IHx8IHBkZXYtPmRldmljZSA9PSAweDA1ODEgfHwNCisJCQlwZGV2LT5kZXZpY2Ug PT0gMHg1MzI0KQ0KKwkJCWFwLT5pb2FkZHIuc2NyX2FkZHIgPSAodm9pZCBfX2lvbWVtICopc2xv dDsNCisNCisJCWRldiA9ICAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9TUykgPyAoc2xv dCYweDAxKSA6IDA7DQorCQlhcC0+b3BzLT5zZmZfZGV2X3NlbGVjdChhcCwgZGV2KTsNCisNCisJ CURQUklOVEsoIkNvbXJlc2V0IFNBVEEgRGV2aWNlICVYIFBPUlQgOiAlZCwgU0xPVCA6ICVzXG4i LCBcDQorCQkJICAgIHBkZXYtPmRldmljZSwgYXAtPnBvcnRfbm8sIFwNCisJCQkJKGRldiA9PSAw KSA/ICI8TWFzdGVyPiIgOiAiPFNsYXZlPiIpOw0KKw0KKwkJYXAtPm9wcy0+c2NyX3JlYWQoYXAs IFNDUl9DT05UUk9MLCAmc2NvbnRyb2wpOw0KKwkJc2NvbnRyb2wgPSAoc2NvbnRyb2wgJiAweDBm MCkgfCAweDMwMTsNCisJCWFwLT5vcHMtPnNjcl93cml0ZShhcCwgU0NSX0NPTlRST0wsIHNjb250 cm9sKTsNCisJCWFwLT5vcHMtPnNjcl9yZWFkKGFwLCBTQ1JfQ09OVFJPTCwgJnNjb250cm9sKTsN CisNCisJCW1zbGVlcCgyKTsNCisJCXNjb250cm9sID0gKHNjb250cm9sICYgMHgwZjApIHwgMHgz MDA7DQorCQlhcC0+b3BzLT5zY3Jfd3JpdGUoYXAsIFNDUl9DT05UUk9MLCBzY29udHJvbCk7DQor CQlhcC0+b3BzLT5zY3JfcmVhZChhcCwgU0NSX0NPTlRST0wsICZzY29udHJvbCk7IC8qIGZsdXNo ICovDQorDQorCQkvKiB3YWl0IGZvciBwaHkgdG8gYmVjb21lIHJlYWR5LCBpZiBuZWNlc3Nhcnkg Ki8NCisJCWRvIHsNCisJCQltc2xlZXAoMjAwKTsNCisJCQlhcC0+b3BzLT5zY3JfcmVhZChhcCwg U0NSX1NUQVRVUywgJnNzdGF0dXMpOw0KKwkJCWlmICgoc3N0YXR1cyAmIDB4ZikgIT0gMSkNCisJ CQkJYnJlYWs7DQorCQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7DQor DQorCQkvKiBvcGVuIGNvZGUgc2F0YV9wcmludF9saW5rX3N0YXR1cygpICovDQorCQlhcC0+b3Bz LT5zY3JfcmVhZChhcCwgU0NSX1NUQVRVUywgJnNzdGF0dXMpOw0KKwkJYXAtPm9wcy0+c2NyX3Jl YWQoYXAsIFNDUl9DT05UUk9MLCAmc2NvbnRyb2wpOw0KKwkJYXAtPm9wcy0+c2NyX3JlYWQoYXAs IFNDUl9FUlJPUiwgJnNlcnJvcik7DQorCQlhcC0+b3BzLT5zY3Jfd3JpdGUoYXAsIFNDUl9FUlJP Uiwgc2Vycm9yKTsNCisNCisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLA0KKwkJCQki U0FUQSBsaW5rICVzIChTU3RhdHVzICVYIFNDb250cm9sICVYKVxuIiwNCisJCQkJb25saW5lID8g InVwIiA6ICJkb3duIiwgc3N0YXR1cywgc2NvbnRyb2wpOw0KKw0KKwkJLyogU1N0YXR1cyBpcyBy ZWFkIG9uZSBtb3JlIHRpbWUgKi8NCisJCWFwLT5vcHMtPnNjcl9yZWFkKGFwLCBTQ1JfU1RBVFVT LCAmc3N0YXR1cyk7DQorDQorCQlvbmxpbmUgPSAoc3N0YXR1cyAmIDB4ZikgPT0gMHgzOw0KKwkJ aWYgKCFvbmxpbmUpIHsNCisJCQkvKiB0ZWxsIEVIIHRvIGJhaWwgKi8NCisJCQlEUFJJTlRLKCJD b21yZXNldCAlWCBQT1JUIDogJWQsIFNMT1QgOiAlcyAgZmFpbGVkXG4iLCBcDQorCQkJCSAgIHBk ZXYtPmRldmljZSwgYXAtPnBvcnRfbm8sIFwNCisJCQkJCShkZXYgPT0gMCkgPyAiPE1hc3Rlcj4i IDogIjxTbGF2ZT4iKTsNCisNCisJCQlhcC0+Y2JsID0gY2JsX3RtcDsNCisJCQlhcC0+ZmxhZ3Mg PSBmbGFnX3RtcDsNCisJCQlyZXR1cm4gLUVOT0RFVjsNCisJCX0NCisJCURQUklOVEsoIkNvbXJl c2V0ICVYIFBPUlQgOiAlZCwgU0xPVCA6ICVzIHN1Y2NlZWRlZC5cbiIsIFwNCisJCQkgICAgIHBk ZXYtPmRldmljZSwgYXAtPnBvcnRfbm8sIFwNCisJCQkJKGRldiA9PSAwKSA/ICI8TWFzdGVyPiIg OiAiPFNsYXZlPiIpOw0KKw0KKwl9DQorDQorCWFwLT5jYmwgPSBjYmxfdG1wOw0KKwlhcC0+Zmxh Z3MgPSBmbGFnX3RtcDsNCisNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKw0KIC8qKg0KLSAqCXZ0 NjQyMF9wcmVyZXNldCAtIHByZXJlc2V0IGZvciB2dDY0MjANCisgKgl2aWFfc3RkX3NhdGFfcHJl cmVzZXQgLSBwcmVyZXNldCBmb3IgdmlhIHNhdGEgY29udHJvbGxlcnMNCiAgKglAbGluazogdGFy Z2V0IEFUQSBsaW5rDQogICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3Bl cmF0aW9uDQogICoNCi0gKglTQ1IgcmVnaXN0ZXJzIG9uIHZ0NjQyMCBhcmUgcGllY2VzIG9mIHNo aXQgYW5kIG1heSBoYW5nIHRoZQ0KLSAqCXdob2xlIG1hY2hpbmUgY29tcGxldGVseSBpZiBhY2Nl c3NlZCB3aXRoIHRoZSB3cm9uZyB0aW1pbmcuDQotICoJVG8gYXZvaWQgc3VjaCBjYXRhc3Ryb3Bo ZSwgdnQ2NDIwIGRvZXNuJ3QgcHJvdmlkZSBnZW5lcmljIFNDUg0KLSAqCWFjY2VzcyBvcGVyYXRp b25zLCBidXQgdXNlcyBTU3RhdHVzIGFuZCBTQ29udHJvbCBvbmx5IGR1cmluZw0KLSAqCWJvb3Qg cHJvYmluZyBpbiBjb250cm9sbGVkIHdheS4NCi0gKg0KLSAqCUFzIHRoZSBvbGQgKHByZSBFSCB1 cGRhdGUpIHByb2JpbmcgY29kZSBpcyBwcm92ZW4gdG8gd29yaywgd2UNCi0gKglzdHJpY3RseSBm b2xsb3cgdGhlIGFjY2VzcyBwYXR0ZXJuLg0KKyAqCVN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIHdp bGwgcmV0cnkgc2V2ZXJhbCB0aW1lcyBpZiByZXNldA0KKyAqICBmYWlscywgdGhpcyBtYWtlcyB1 c2VycyBjYW5ub3QgYmVhciBpdC4NCiAgKg0KICAqCUxPQ0tJTkc6DQogICoJS2VybmVsIHRocmVh ZCBjb250ZXh0IChtYXkgc2xlZXApDQpAQCAtMTk3LDc5ICs1NzYsMTQ2IEBADQogICoJUkVUVVJO UzoNCiAgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuDQogICovDQotc3RhdGljIGlu dCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRl YWRsaW5lKQ0KK3N0YXRpYyBpbnQgdmlhX3N0ZF9zYXRhX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGlu ayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkNCiB7DQogCXN0cnVjdCBhdGFfcG9ydCAq YXAgPSBsaW5rLT5hcDsNCi0Jc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmYXAtPmxpbmsu ZWhfY29udGV4dDsNCi0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIChIWiAqIDUp Ow0KLQl1MzIgc3N0YXR1cywgc2NvbnRyb2w7DQotCWludCBvbmxpbmU7DQorICAgIHN0cnVjdCBw Y2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsNCisJaW50IGRldm1hc2sg PSAwOw0KKwlpbnQgc2xvdF9jbnQgPSAwOw0KKwlpbnQgc2xvdDsNCisJaW50IHJjOw0KKwl1OCBz dGF0dXM7DQogDQogCS8qIGRvbid0IGRvIGFueSBTQ1Igc3R1ZmYgaWYgd2UncmUgbm90IGxvYWRp bmcgKi8NCiAJaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19MT0FESU5HKSkNCiAJCWdvdG8g c2tpcF9zY3I7DQogDQotCS8qIFJlc3VtZSBwaHkuICBUaGlzIGlzIHRoZSBvbGQgU0FUQSByZXN1 bWUgc2VxdWVuY2UgKi8NCi0Jc3ZpYV9zY3Jfd3JpdGUoYXAsIFNDUl9DT05UUk9MLCAweDMwMCk7 DQotCXN2aWFfc2NyX3JlYWQoYXAsIFNDUl9DT05UUk9MLCAmc2NvbnRyb2wpOyAvKiBmbHVzaCAq Lw0KLQ0KLQkvKiB3YWl0IGZvciBwaHkgdG8gYmVjb21lIHJlYWR5LCBpZiBuZWNlc3NhcnkgKi8N Ci0JZG8gew0KLQkJbXNsZWVwKDIwMCk7DQotCQlzdmlhX3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVT LCAmc3N0YXR1cyk7DQotCQlpZiAoKHNzdGF0dXMgJiAweGYpICE9IDEpDQotCQkJYnJlYWs7DQot CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsNCi0NCi0JLyogb3BlbiBj b2RlIHNhdGFfcHJpbnRfbGlua19zdGF0dXMoKSAqLw0KLQlzdmlhX3Njcl9yZWFkKGFwLCBTQ1Jf U1RBVFVTLCAmc3N0YXR1cyk7DQotCXN2aWFfc2NyX3JlYWQoYXAsIFNDUl9DT05UUk9MLCAmc2Nv bnRyb2wpOw0KLQ0KLQlvbmxpbmUgPSAoc3N0YXR1cyAmIDB4ZikgPT0gMHgzOw0KLQ0KLQlhdGFf cG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywNCi0JCQkiU0FUQSBsaW5rICVzIDEuNSBHYnBzIChT U3RhdHVzICVYIFNDb250cm9sICVYKVxuIiwNCi0JCQlvbmxpbmUgPyAidXAiIDogImRvd24iLCBz c3RhdHVzLCBzY29udHJvbCk7DQotDQotCS8qIFNTdGF0dXMgaXMgcmVhZCBvbmUgbW9yZSB0aW1l ICovDQotCXN2aWFfc2NyX3JlYWQoYXAsIFNDUl9TVEFUVVMsICZzc3RhdHVzKTsNCi0NCi0JaWYg KCFvbmxpbmUpIHsNCi0JCS8qIHRlbGwgRUggdG8gYmFpbCAqLw0KLQkJZWhjLT5pLmFjdGlvbiAm PSB+QVRBX0VIX1JFU0VUOw0KLQkJcmV0dXJuIDA7DQorCXNsb3RfY250ID0gKGFwLT5mbGFncyAm IEFUQV9GTEFHX1NMQVZFX1BPU1MpID8gMiA6IDE7DQorCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBz bG90X2NudDsgKytzbG90KSB7DQorCQlyYyA9IHZpYV9zdGRfc2F0YV9jb21yZXNldChhcCwgKHNs b3QlMiA9PSAwKSA/IDEgOiAwKTsNCisJCWlmICghcmMpDQorCQkJZGV2bWFzayB8PSAoMTw8c2xv dCk7DQorDQorCQlyYyA9IGF0YV9zZmZfd2FpdF9yZWFkeShsaW5rLCBkZWFkbGluZSk7DQorCQlz dGF0dXMgPSBsaW5rLT5hcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGxpbmstPmFwKTsNCisJCURQ UklOVEsoIlByZXJlc2V0ICVYIGZvciBQT1JUJWQgc3RhdHVzICV4OiBcbiIsIFwNCisJCQkJcGRl di0+ZGV2aWNlLCBhcC0+cG9ydF9ubywgc3RhdHVzKTsNCisJCWlmIChyYyAhPSAwKSB7DQorCQkJ RFBSSU5USygiUHJlcmVzZXQgJVggZm9yIFBPUlQlZCBmYWlsZWRcbiIsIFwNCisJCQkJCQlwZGV2 LT5kZXZpY2UsIGFwLT5wb3J0X25vKTsNCisJCQlkZXZtYXNrICY9IH4oMTw8c2xvdCk7DQorCQl9 DQorCX0NCisNCisJLyoNCisJICogVG8gZml4IHRoZSBvbmxpbmUgY2hlY2sgaW4gbGliYXRhLiBU aGUgc29mdHJlc2V0IGluIGxpYmF0YSB3aWxsIGNoZWNrDQorCSAqIHdoZXRoZXIgdGhlIE1hc3Rl ciBzbG90IHdpbGwgYmUgb25saW5lIGZvciBhbiBhdGEgbGluaywgc28gd2Ugc2hvdWxkDQorCSAq IHJlc2V0IHRoZSBtYXN0ZXIgcG9ydCBhZ2FpbiBpZiB0aGUgc2xhdmUgc2xvdCBkb2VzIG5vdCBo YXZlIGEgZGV2aWNlDQorCSAqIGF0dGFjaGVkDQorCSAqLw0KKwlpZiAoKHNsb3RfY250ID09IDIp ICYmIChkZXZtYXNrID09IDB4MDEpKQ0KKwkJdmlhX3N0ZF9zYXRhX2NvbXJlc2V0KGFwLCAxKTsN CisJZWxzZSBpZiAoZGV2bWFzayA9PSAwKSB7DQorCQkJRFBSSU5USygiUHJlcmVzZXQlWCBmb3Ig UE9SVCVkIGZhaWxlZDogKE5vIGRldmljZSlcbiIsIFwNCisJCQkJCXBkZXYtPmRldmljZSwgYXAt PnBvcnRfbm8pOw0KKwkJCXJldHVybiAtRU5PREVWOw0KIAl9DQogDQotIHNraXBfc2NyOg0KK3Nr aXBfc2NyOg0KIAkvKiB3YWl0IGZvciAhQlNZICovDQotCWF0YV9zZmZfd2FpdF9yZWFkeShsaW5r LCBkZWFkbGluZSk7DQorCXJjID0gYXRhX3NmZl93YWl0X3JlYWR5KGxpbmssIGRlYWRsaW5lKTsN CisJaWYgKHJjKQ0KKwkJRFBSSU5USygiUHJlcmVzZXQgJVggZm9yIFBPUlQlZCBmYWlsZWRcbiIs IFwNCisJCQkJICAgIHBkZXYtPmRldmljZSwgYXAtPnBvcnRfbm8pOw0KIA0KLQlyZXR1cm4gMDsN CisJcmV0dXJuIHJjOw0KIH0NCiANCi1zdGF0aWMgaW50IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVj dChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQ0KKw0KK3N0YXRpYyB2b2lkIHZpYV9zdGRfc2V0X3Bpb19t b2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQ0KIHsNCiAJ c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOw0KLQl1OCB0 bXA7DQogDQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBBVEFfVURNQV9USU1JTkcsICZ0 bXApOw0KLQlpZiAodG1wICYgMHgxMCkNCi0JCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsNCi0JcmV0 dXJuIEFUQV9DQkxfUEFUQTgwOw0KLX0NCisJdTggY2ZnX2J5dGU7DQorCWludCBjZmdfYWRkcjsN CisJdTE2IHRtcDE2Ow0KKw0KKwl0bXAxNiA9IHBkZXYtPmRldmljZTsNCisNCisJaWYgKCh0bXAx NiA9PSAweDMyNDkpICYmIChhcC0+cG9ydF9ubyA9PSAyKSkvKiBQQVRBIGNoYW5uZWwgaW4gVlQ2 NDIxICovDQorCQljZmdfYWRkciA9IDB4QUI7DQorCWVsc2UgaWYgKCh0bXAxNiA9PSAweDA1ODEg fHwgdG1wMTYgPT0gMHg1MzI0KSAmJg0KKwkJKGFwLT5wb3J0X25vID09IDEpKS8qIFBBVEEgY2hh bm5lbCBpbiBWVDgzNTMgKi8NCisJCWNmZ19hZGRyID0gMHg0OTsNCisJZWxzZQ0KKwkJcmV0dXJu Ow0KIA0KLXN0YXRpYyB2b2lkIHZ0NjQyMV9zZXRfcGlvX21vZGUoc3RydWN0IGF0YV9wb3J0ICph cCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpDQotew0KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9 IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7DQotCXN0YXRpYyBjb25zdCB1OCBwaW9fYml0c1td ID0geyAweEE4LCAweDY1LCAweDY1LCAweDMxLCAweDIwIH07DQotCXBjaV93cml0ZV9jb25maWdf Ynl0ZShwZGV2LCBQQVRBX1BJT19USU1JTkcsIHBpb19iaXRzW2FkZXYtPnBpb19tb2RlIC0gWEZF Ul9QSU9fMF0pOw0KKwlzd2l0Y2ggKGFkZXYtPnBpb19tb2RlICYgMHgwNykgew0KKwljYXNlIDA6 DQorCQljZmdfYnl0ZSA9IDB4YTg7DQorCQlicmVhazsNCisJY2FzZSAxOg0KKwkJY2ZnX2J5dGUg PSAweDY1Ow0KKwkJYnJlYWs7DQorCWNhc2UgMjoNCisJCWNmZ19ieXRlID0gMHg2NTsNCisJCWJy ZWFrOw0KKwljYXNlIDM6DQorCQljZmdfYnl0ZSA9IDB4MzE7DQorCQlicmVhazsNCisJY2FzZSA0 Og0KKwkJY2ZnX2J5dGUgPSAweDIwOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQljZmdfYnl0 ZSA9IDB4MjA7DQorCX0NCisNCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGNmZ19hZGRy LCBjZmdfYnl0ZSk7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIHZ0NjQyMV9zZXRfZG1hX21vZGUoc3Ry dWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpDQorc3RhdGljIHZvaWQg dmlhX3N0ZF9zZXRfZG1hX21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZp Y2UgKmFkZXYpDQogew0KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhv c3QtPmRldik7DQotCXN0YXRpYyBjb25zdCB1OCB1ZG1hX2JpdHNbXSA9IHsgMHhFRSwgMHhFOCwg MHhFNiwgMHhFNCwgMHhFMiwgMHhFMSwgMHhFMCwgMHhFMCB9Ow0KLQlwY2lfd3JpdGVfY29uZmln X2J5dGUocGRldiwgUEFUQV9VRE1BX1RJTUlORywgdWRtYV9iaXRzW2FkZXYtPmRtYV9tb2RlIC0g WEZFUl9VRE1BXzBdKTsNCisJdTggY2ZnX2J5dGU7DQorCWludCBjZmdfYWRkcjsNCisJdTE2IHRt cDE2Ow0KKw0KKwl0bXAxNiA9IHBkZXYtPmRldmljZTsNCisNCisJaWYgKCh0bXAxNiA9PSAweDMy NDkpICYmIChhcC0+cG9ydF9ubyA9PSAyKSkNCisJCWNmZ19hZGRyID0gMHhCMzsgLyogUEFUQSBj aGFubmVsIGluIFZUNjQyMSAqLw0KKwllbHNlIGlmICgodG1wMTYgPT0gMHgwNTgxKSAmJiAoYXAt PnBvcnRfbm8gPT0gMSkpDQorCQljZmdfYWRkciA9IDB4NTA7IC8qIFBBVEEgY2hhbm5lbCBpbiBW VDgzNTMgKi8NCisJZWxzZQ0KKwkJcmV0dXJuOw0KKw0KKwlzd2l0Y2ggKGFkZXYtPmRtYV9tb2Rl ICYgMHgwNykgew0KKwljYXNlIDA6DQorCQljZmdfYnl0ZSA9IDB4ZWU7DQorCQlicmVhazsNCisJ Y2FzZSAxOg0KKwkJY2ZnX2J5dGUgPSAweGU4Ow0KKwkJYnJlYWs7DQorCWNhc2UgMjoNCisJCWNm Z19ieXRlID0gMHhlNjsNCisJCWJyZWFrOw0KKwljYXNlIDM6DQorCQljZmdfYnl0ZSA9IDB4ZTQ7 DQorCQlicmVhazsNCisJY2FzZSA0Og0KKwkJY2ZnX2J5dGUgPSAweGUyOw0KKwkJYnJlYWs7DQor CWNhc2UgNToNCisJCWNmZ19ieXRlID0gMHhlMTsNCisJCWJyZWFrOw0KKwljYXNlIDY6DQorCQlj ZmdfYnl0ZSA9IDB4ZTA7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWNmZ19ieXRlID0gMHhl MDsNCisJfQ0KKw0KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgY2ZnX2FkZHIsIGNmZ19i eXRlKTsNCiB9DQogDQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdmlhX2Jhcl9zaXplc1td ID0gew0KQEAgLTI5Miw3ICs3MzgsNyBAQA0KIA0KIHN0YXRpYyB2b2lkIHZ0NjQyMV9pbml0X2Fk ZHJzKHN0cnVjdCBhdGFfcG9ydCAqYXApDQogew0KLQl2b2lkIF9faW9tZW0gKiBjb25zdCAqIGlv bWFwID0gYXAtPmhvc3QtPmlvbWFwOw0KKwl2b2lkIF9faW9tZW0gKiBjb25zdCAqaW9tYXAgPSBh cC0+aG9zdC0+aW9tYXA7DQogCXZvaWQgX19pb21lbSAqcmVnX2FkZHIgPSBpb21hcFthcC0+cG9y dF9ub107DQogCXZvaWQgX19pb21lbSAqYm1kbWFfYWRkciA9IGlvbWFwWzRdICsgKGFwLT5wb3J0 X25vICogOCk7DQogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7DQpA QCAtMzY3LDYgKzgxMywyNiBAQA0KIAlyZXR1cm4gMDsNCiB9DQogDQorc3RhdGljIGludCB2dDgy NTFfcHJlcGFyZV9ob3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYXRhX2hvc3QgKipy X2hvc3QpDQorew0KKyAgICBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7JnZ0 ODI1MV9wb3J0X2luZm8sIE5VTEx9Ow0KKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7DQorCWludCBy YzsNCisNCisJcmMgPSBhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7 DQorCWlmIChyYykNCisJCXJldHVybiByYzsNCisJKnJfaG9zdCA9IGhvc3Q7DQorDQorCXJjID0g cGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIDEgPDwgNSwgRFJWX05BTUUpOw0KKwlpZiAocmMpIHsN CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9tYXAgUENJ IEJBUiA1XG4iKTsNCisJCXJldHVybiByYzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQog c3RhdGljIHZvaWQgc3ZpYV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQogew0KIAl1 OCB0bXA4Ow0KQEAgLTQyNCw4ICs4OTAsMTEgQEANCiANCiAJaWYgKGJvYXJkX2lkID09IHZ0NjQy MCkNCiAJCWJhcl9zaXplcyA9ICZzdmlhX2Jhcl9zaXplc1swXTsNCi0JZWxzZQ0KKwllbHNlIGlm IChib2FyZF9pZCA9PSB2dDY0MjEpDQogCQliYXJfc2l6ZXMgPSAmdnQ2NDIxX2Jhcl9zaXplc1sw XTsNCisJZWxzZQ0KKwkJYmFyX3NpemVzID0gJnN2aWFfYmFyX3NpemVzWzBdOw0KKw0KIA0KIAlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdmlhX2Jhcl9zaXplcyk7IGkrKykNCiAJCWlmICgo cGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpID09IDApIHx8DQpAQCAtNDQwLDggKzkwOSwxMSBA QA0KIA0KIAlpZiAoYm9hcmRfaWQgPT0gdnQ2NDIwKQ0KIAkJcmMgPSB2dDY0MjBfcHJlcGFyZV9o b3N0KHBkZXYsICZob3N0KTsNCi0JZWxzZQ0KKwllbHNlIGlmIChib2FyZF9pZCA9PSB2dDY0MjEp DQogCQlyYyA9IHZ0NjQyMV9wcmVwYXJlX2hvc3QocGRldiwgJmhvc3QpOw0KKwllbHNlDQorCQly YyA9IHZ0ODI1MV9wcmVwYXJlX2hvc3QocGRldiwgJmhvc3QpOw0KKw0KIAlpZiAocmMpDQogCQly ZXR1cm4gcmM7DQogDQo= --------------080807090506040204080609--