From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262034AbTJ2MMj (ORCPT ); Wed, 29 Oct 2003 07:12:39 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262040AbTJ2MMj (ORCPT ); Wed, 29 Oct 2003 07:12:39 -0500 Received: from web20606.mail.yahoo.com ([216.136.226.164]:13955 "HELO web20606.mail.yahoo.com") by vger.kernel.org with SMTP id S262034AbTJ2MMT (ORCPT ); Wed, 29 Oct 2003 07:12:19 -0500 Message-ID: <20031029121218.56602.qmail@web20606.mail.yahoo.com> Date: Wed, 29 Oct 2003 04:12:18 -0800 (PST) From: Stefan Talpalaru Subject: PATCH: CMD640 IDE chipset To: Bartlomiej Zolnierkiewicz Cc: linux-kernel@vger.kernel.org In-Reply-To: <200310271535.35762.bzolnier@elka.pw.edu.pl> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1222084409-1067429538=:56457" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --0-1222084409-1067429538=:56457 Content-Type: text/plain; charset=us-ascii Content-Id: Content-Disposition: inline Hi Bartolomiej! --- Bartlomiej Zolnierkiewicz wrote: > > Hi, > > Can you please drop all code-style changes (such as foo() -> foo ()) sorry about that, I ran Lindent on it... > from your patch and describe what real changes you've done? > Also please fix your mailer, it breaks lines. > > BTW Andre is no longer maintaing IDE, cc: me instead, thanks. > > cheers, > --bartlomiej Please excuse me for sending this patch as an attachment, but as my mail account is Yahoo! and I'm too lazy to find a better sollution, I cannot get the patch through the web interface without breaking the lines. This patch integrates the CMD640 chipset support in the 2.4.22 kernel. I was using it succesfully in the 2.2.x kernel series, but got no result in the 2.4.x kernels. After comparing the 2 versions, I noticed errors in the new version (outb_p() instead of outl_p()) and also some useless code (the wrapers: __put_cmd640_reg() and __get_cmd640_reg() - which I removed and placed the locks where needed; the pci_conf1() and pci_conf2() functions). I also removed the CONFIG_BLK_DEV_CMD640_ENHANCED config option, as it makes little difference for the kernel size. The init_hwif_cmd640() function had to be rewritten because it is called once for each ide interface found, so the old way of addressing all the drives in one run was no longer working. Therefore, to not break all the code, came the need for a function that computes the index from the ide_drive_t* : calculate_index(). The code that handles PIO settings was rearanged in a new function: cmd640_tuneproc(). To end the description, I brought back to live a piece of dead code just because I needed to use both ide interfaces on my old 486 board. later. ===== Stefan Talpalaru __________________________________ Do you Yahoo!? Exclusive Video Premiere - Britney Spears http://launch.yahoo.com/promos/britneyspears/ --0-1222084409-1067429538=:56457 Content-Type: application/octet-stream; name="diff.cmd640" Content-Transfer-Encoding: base64 Content-Description: diff.cmd640 Content-Disposition: attachment; filename="diff.cmd640" ZGlmZiAtdXJOIGxpbnV4LTIuNC4yMi9Eb2N1bWVudGF0aW9uL0NvbmZpZ3Vy ZS5oZWxwIGxpbnV4LTIuNC4yMi1uZXcvRG9jdW1lbnRhdGlvbi9Db25maWd1 cmUuaGVscAotLS0gbGludXgtMi40LjIyL0RvY3VtZW50YXRpb24vQ29uZmln dXJlLmhlbHAJMjAwMy0wOS0xMCAxNzozOTo0MS4wMDAwMDAwMDAgKzAwMDAK KysrIGxpbnV4LTIuNC4yMi1uZXcvRG9jdW1lbnRhdGlvbi9Db25maWd1cmUu aGVscAkyMDAzLTEwLTI2IDE0OjE0OjEyLjAwMDAwMDAwMCArMDAwMApAQCAt OTE2LDE0ICs5MTYsNiBAQAogICB0aGUgIkNTQS02NDAwRSBQQ0kgdG8gSURF IGNvbnRyb2xsZXIiIHRoYXQgc29tZSBwZW9wbGUgaGF2ZS4gRm9yCiAgIGRl dGFpbHMsIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9pZGUudHh0Pi4KIAot Q01ENjQwIGVuaGFuY2VkIHN1cHBvcnQKLUNPTkZJR19CTEtfREVWX0NNRDY0 MF9FTkhBTkNFRAotICBUaGlzIG9wdGlvbiBpbmNsdWRlcyBzdXBwb3J0IGZv ciBzZXR0aW5nL2F1dG90dW5pbmcgUElPIG1vZGVzIGFuZAotICBwcmVmZXRj aCBvbiBDTUQ2NDAgSURFIGludGVyZmFjZXMuICBGb3IgZGV0YWlscywgcmVh ZAotICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS50eHQ+LiBJZiB5b3UgaGF2 ZSBhIENNRDY0MCBJREUgaW50ZXJmYWNlCi0gIGFuZCB5b3VyIEJJT1MgZG9l cyBub3QgYWxyZWFkeSBkbyB0aGlzIGZvciB5b3UsIHRoZW4gc2F5IFkgaGVy ZS4KLSAgT3RoZXJ3aXNlIHNheSBOLgotCiBSWjEwMDAgY2hpcHNldCBidWdm aXgvc3VwcG9ydAogQ09ORklHX0JMS19ERVZfUloxMDAwCiAgIFRoZSBQQy1U ZWNobm9sb2dpZXMgUloxMDAwIElERSBjaGlwIGlzIHVzZWQgb24gbWFueSBj b21tb24gNDg2IGFuZApkaWZmIC11ck4gbGludXgtMi40LjIyL2RyaXZlcnMv aWRlL0NvbmZpZy5pbiBsaW51eC0yLjQuMjItbmV3L2RyaXZlcnMvaWRlL0Nv bmZpZy5pbgotLS0gbGludXgtMi40LjIyL2RyaXZlcnMvaWRlL0NvbmZpZy5p bgkyMDAzLTA5LTEwIDE3OjQ5OjUwLjAwMDAwMDAwMCArMDAwMAorKysgbGlu dXgtMi40LjIyLW5ldy9kcml2ZXJzL2lkZS9Db25maWcuaW4JMjAwMy0xMC0x OCAyMTo0MzozNy4wMDAwMDAwMDAgKzAwMDAKQEAgLTI4LDcgKzI4LDYgQEAK ICAgIGNvbW1lbnQgJ0lERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMnCiAg ICBpZiBbICIkQ09ORklHX0JMS19ERVZfSURFIiAhPSAibiIgXTsgdGhlbgog ICAgICAgZGVwX2Jvb2wgJyAgQ01ENjQwIGNoaXBzZXQgYnVnZml4L3N1cHBv cnQnIENPTkZJR19CTEtfREVWX0NNRDY0MCAkQ09ORklHX1g4NgotICAgICAg ZGVwX2Jvb2wgJyAgICBDTUQ2NDAgZW5oYW5jZWQgc3VwcG9ydCcgQ09ORklH X0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VEICRDT05GSUdfQkxLX0RFVl9DTUQ2 NDAKICAgICAgIGRlcF9ib29sICcgIElTQS1QTlAgRUlERSBzdXBwb3J0JyBD T05GSUdfQkxLX0RFVl9JU0FQTlAgJENPTkZJR19JU0FQTlAKICAgICAgIGlm IFsgIiRDT05GSUdfUENJIiA9ICJ5IiBdOyB0aGVuCiAJIGJvb2wgJyAgUENJ IElERSBjaGlwc2V0IHN1cHBvcnQnIENPTkZJR19CTEtfREVWX0lERVBDSQpk aWZmIC11ck4gbGludXgtMi40LjIyL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAu YyBsaW51eC0yLjQuMjItbmV3L2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYwot LS0gbGludXgtMi40LjIyL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYwkyMDAz LTA5LTEwIDE3OjQ5OjU1LjAwMDAwMDAwMCArMDAwMAorKysgbGludXgtMi40 LjIyLW5ldy9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMJMjAwMy0xMC0yNyAy MzozMzo1My4wMDAwMDAwMDAgKzAwMDAKQEAgLTEsMTIgKzEsMTQgQEAKIC8q Ci0gKiAgbGludXgvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCQlWZXJzaW9u IDEuMDIgIFNlcCAwMSwgMTk5NgorICogIGxpbnV4L2RyaXZlcnMvaWRlL3Bj aS9jbWQ2NDAuYwkJVmVyc2lvbiAyLjAwICBPY3QgMjYsIDIwMDMKICAqCi0g KiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgIExpbnVzIFRvcnZhbGRzICYg YXV0aG9ycyAoc2VlIGJlbG93KQorICogIENvcHlyaWdodCAoQykgMTk5NS0y MDAzICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMgKHNlZSBiZWxvdykKICAq LwogCiAvKgogICogIE9yaWdpbmFsIGF1dGhvcnM6CWFicmFtb3ZAY2VjbW93 LmVuZXQuZGVjLmNvbSAoSWdvciBBYnJhbW92KQogICogIAkJCW1sb3JkQHBv Ym94LmNvbSAoTWFyayBMb3JkKQorICogIFRoZSBndXkgdGhhdCBtYWRlIGl0 IHdvcmsgaW4gdGhlIDIuNC54IGtlcm5lbDoKKyAqICAgICAgICAgICAgICAg ICAgICAgIHN0ZWZhbnRhbHBhbGFydUB5YWhvby5jb20gKFN0ZWZhbiBUYWxw YWxhcnUpCiAgKgogICogIFNlZSBsaW51eC9NQUlOVEFJTkVSUyBmb3IgYWRk cmVzcyBvZiBjdXJyZW50IG1haW50YWluZXIuCiAgKgpAQCAtOTYsNiArOTgs OCBAQAogICoJCQkgKCJmYXN0IiBpcyBuZWNlc3NhcnkgZm9yIDMyYml0IEkv TyBpbiBzb21lIHN5c3RlbXMpCiAgKiAgVmVyc2lvbiAxLjAyCWZpeCBidWcg dGhhdCByZXN1bHRlZCBpbiBzbG93ICJzZXR1cCB0aW1lcyIKICAqCQkJIChw YXRjaCBjb3VydGVzeSBvZiBab2x0YW4gSGlkdmVnaSkKKyAqICBWZXJzaW9u IDIuMDAgICAgICAgIGl0IHNlZW1zIHRoYXQgdGhpcyBkcml2ZXIgbmV2ZXIg d29ya2VkIGluIHRoZSAyLjQueAorICogICAgICAgICAgICAgICAgICAgICAg a2VybmVsIHNlcmllcy4gVGhpcyB2ZXJzaW9uIGZpeGVzIHRoaXMgcHJvYmxl bS4KICAqLwogCiAjdW5kZWYgUkVBTExZX1NMT1dfSU8JCS8qIG1vc3Qgc3lz dGVtcyBjYW4gc2FmZWx5IHVuZGVmIHRoaXMgKi8KQEAgLTExMywxMCArMTE3 LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxs aW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KICNpbmNs dWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgImlkZV9tb2Rlcy5oIgorI2lu Y2x1ZGUgImNtZDY0MC5oIgogCiAvKgogICogVGhpcyBmbGFnIGlzIHNldCBp biBpZGUuYyBieSB0aGUgcGFyYW1ldGVyOiAgaWRlMD1jbWQ2NDBfdmxiCkBA IC0xNzMsOSArMTc3LDYgQEAKICAqLwogc3RhdGljIHU4IHByZWZldGNoX3Jl Z3NbNF0gID0ge0NOVFJMLCBDTlRSTCwgQVJUVElNMjMsIEFSVFRJTTIzfTsK IHN0YXRpYyB1OCBwcmVmZXRjaF9tYXNrc1s0XSA9IHtDTlRSTF9ESVNfUkEw LCBDTlRSTF9ESVNfUkExLCBBUlRUSU0yM19ESVNfUkEyLCBBUlRUSU0yM19E SVNfUkEzfTsKLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0NNRDY0MF9FTkhB TkNFRAotCiBzdGF0aWMgdTggYXJ0dGltX3JlZ3NbNF0gPSB7QVJUVElNMCwg QVJUVElNMSwgQVJUVElNMjMsIEFSVFRJTTIzfTsKIHN0YXRpYyB1OCBkcnd0 aW1fcmVnc1s0XSA9IHtEUldUSU0wLCBEUldUSU0xLCBEUldUSU0yMywgRFJX VElNMjN9OwogCkBAIC0xODcsMjYgKzE4OCwyOCBAQAogc3RhdGljIHU4IGFj dGl2ZV9jb3VudHNbNF0gICA9IHsxNiwgMTYsIDE2LCAxNn07IC8qIEFjdGl2 ZSBjb3VudCAgIChlbmNvZGVkKSAqLwogc3RhdGljIHU4IHJlY292ZXJ5X2Nv dW50c1s0XSA9IHsxNiwgMTYsIDE2LCAxNn07IC8qIFJlY292ZXJ5IGNvdW50 IChlbmNvZGVkKSAqLwogCi0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfQ01E NjQwX0VOSEFOQ0VEICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgaW5pdGlhbGl6 ZWQgdG8gcG9pbnQgYXQgdGhlIGRldmljZXMgd2UgY29udHJvbAotICovCi1z dGF0aWMgaWRlX2h3aWZfdCAgKmNtZF9od2lmMCwgKmNtZF9od2lmMTsKLXN0 YXRpYyBpZGVfZHJpdmVfdCAqY21kX2RyaXZlc1s0XTsKLQogLyoKICAqIElu dGVyZmFjZSB0byBhY2Nlc3MgY21kNjQweCByZWdpc3RlcnMKICAqLwogc3Rh dGljIHVuc2lnbmVkIGludCBjbWQ2NDBfa2V5Owotc3RhdGljIHZvaWQgKCpf X3B1dF9jbWQ2NDBfcmVnKSh1MTYgcmVnLCB1OCB2YWwpOwotc3RhdGljIHU4 ICgqX19nZXRfY21kNjQwX3JlZykodTE2IHJlZyk7CitzdGF0aWMgdm9pZCAo KnB1dF9jbWQ2NDBfcmVnKSAodTE2IHJlZywgdTggdmFsKTsKK3N0YXRpYyB1 OCAoKmdldF9jbWQ2NDBfcmVnKSAodTE2IHJlZyk7CiAKIC8qCiAgKiBUaGlz IGlzIHJlYWQgZnJvbSB0aGUgQ0ZSIHJlZywgYW5kIGlzIHVzZWQgaW4gc2V2 ZXJhbCBwbGFjZXMuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY21kNjQw X2NoaXBfdmVyc2lvbjsKIAorc3RhdGljIGlubGluZSBpbnQKK2NhbGN1bGF0 ZV9pbmRleCAoaWRlX2RyaXZlX3QgKiBkcml2ZSkKK3sKKwlpZGVfaHdpZl90 ICpod2lmID0gSFdJRiAoZHJpdmUpOworCWludCBjaGFubmVsID0gKGludCkg aHdpZi0+Y2hhbm5lbDsKKwlpbnQgc2xhdmUgPSAoaHdpZi0+ZHJpdmVzICE9 IGRyaXZlKTsKKworCXJldHVybiAyICogY2hhbm5lbCArIHNsYXZlOworfQor CiAvKgogICogVGhlIENNRDY0MHggY2hpcCBkb2VzIG5vdCBzdXBwb3J0IERX T1JEIGNvbmZpZyB3cml0ZSBjeWNsZXMsIGJ1dCBzb21lCiAgKiBvZiB0aGUg QklPU2VzIHVzZSB0aGVtIHRvIGltcGxlbWVudCB0aGUgY29uZmlnIHNlcnZp Y2VzLgpAQCAtMjE3LDMyICsyMjAsNDkgQEAKIAogc3RhdGljIHZvaWQgcHV0 X2NtZDY0MF9yZWdfcGNpMSAodTE2IHJlZywgdTggdmFsKQogewotCW91dGJf cCgocmVnICYgMHhmYykgfCBjbWQ2NDBfa2V5LCAweGNmOCk7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaWRlX2xv Y2ssIGZsYWdzKTsKKwlvdXRsX3AoKHJlZyAmIDB4ZmMpIHwgY21kNjQwX2tl eSwgMHhjZjgpOwogCW91dGJfcCh2YWwsIChyZWcgJiAzKSB8IDB4Y2ZjKTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaWRlX2xvY2ssIGZsYWdzKTsK IH0KIAogc3RhdGljIHU4IGdldF9jbWQ2NDBfcmVnX3BjaTEgKHUxNiByZWcp CiB7Ci0Jb3V0Yl9wKChyZWcgJiAweGZjKSB8IGNtZDY0MF9rZXksIDB4Y2Y4 KTsKLQlyZXR1cm4gaW5iX3AoKHJlZyAmIDMpIHwgMHhjZmMpOworCXU4IGI7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZl ICgmaWRlX2xvY2ssIGZsYWdzKTsKKwlvdXRsX3AgKChyZWcgJiAweGZjKSB8 IGNtZDY0MF9rZXksIDB4Y2Y4KTsKKwliID0gaW5iX3AgKChyZWcgJiAzKSB8 IDB4Y2ZjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaWRlX2xvY2ss IGZsYWdzKTsKKwlyZXR1cm4gYjsKIH0KIAogLyogUENJIG1ldGhvZCAyIGFj Y2VzcyAoZnJvbSBDTUQgZGF0YXNoZWV0KSAqLwogCiBzdGF0aWMgdm9pZCBw dXRfY21kNjQwX3JlZ19wY2kyICh1MTYgcmVnLCB1OCB2YWwpCiB7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaWRl X2xvY2ssIGZsYWdzKTsKIAlvdXRiX3AoMHgxMCwgMHhjZjgpOwogCW91dGJf cCh2YWwsIGNtZDY0MF9rZXkgKyByZWcpOwogCW91dGJfcCgwLCAweGNmOCk7 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmlkZV9sb2NrLCBmbGFncyk7 CiB9CiAKIHN0YXRpYyB1OCBnZXRfY21kNjQwX3JlZ19wY2kyICh1MTYgcmVn KQogewogCXU4IGI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5f bG9ja19pcnFzYXZlICgmaWRlX2xvY2ssIGZsYWdzKTsKIAlvdXRiX3AoMHgx MCwgMHhjZjgpOwogCWIgPSBpbmJfcChjbWQ2NDBfa2V5ICsgcmVnKTsKIAlv dXRiX3AoMCwgMHhjZjgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZp ZGVfbG9jaywgZmxhZ3MpOwogCXJldHVybiBiOwogfQogCkBAIC0yNTAsMzYg KzI3MCwyNiBAQAogCiBzdGF0aWMgdm9pZCBwdXRfY21kNjQwX3JlZ192bGIg KHUxNiByZWcsIHU4IHZhbCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJb3V0 Yl9wKHJlZywgY21kNjQwX2tleSk7CiAJb3V0Yl9wKHZhbCwgY21kNjQwX2tl eSArIDQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBm bGFncyk7CiB9CiAKIHN0YXRpYyB1OCBnZXRfY21kNjQwX3JlZ192bGIgKHUx NiByZWcpCiB7Ci0Jb3V0Yl9wKHJlZywgY21kNjQwX2tleSk7Ci0JcmV0dXJu IGluYl9wKGNtZDY0MF9rZXkgKyA0KTsKLX0KLQotc3RhdGljIHU4IGdldF9j bWQ2NDBfcmVnKHUxNiByZWcpCi17CiAJdTggYjsKIAl1bnNpZ25lZCBsb25n IGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFn cyk7Ci0JYiA9IF9fZ2V0X2NtZDY0MF9yZWcocmVnKTsKKwlvdXRiX3AocmVn LCBjbWQ2NDBfa2V5KTsKKwliID0gaW5iX3AoY21kNjQwX2tleSArIDQpOwog CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJ cmV0dXJuIGI7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dF9jbWQ2NDBfcmVnKHUx NiByZWcsIHU4IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0J c3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JX19wdXRf Y21kNjQwX3JlZyhyZWcsdmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZpZGVfbG9jaywgZmxhZ3MpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBt YXRjaF9wY2lfY21kNjQwX2RldmljZSAodm9pZCkKIHsKIAljb25zdCB1OCB2 ZW5fZGV2WzRdID0gezB4OTUsIDB4MTAsIDB4NDAsIDB4MDZ9OwpAQCAtMzAy LDggKzMxMiw4IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHByb2JlX2Zv cl9jbWQ2NDBfcGNpMSAodm9pZCkKIHsKLQlfX2dldF9jbWQ2NDBfcmVnID0g Z2V0X2NtZDY0MF9yZWdfcGNpMTsKLQlfX3B1dF9jbWQ2NDBfcmVnID0gcHV0 X2NtZDY0MF9yZWdfcGNpMTsKKwlnZXRfY21kNjQwX3JlZyA9IGdldF9jbWQ2 NDBfcmVnX3BjaTE7CisJcHV0X2NtZDY0MF9yZWcgPSBwdXRfY21kNjQwX3Jl Z19wY2kxOwogCWZvciAoY21kNjQwX2tleSA9IDB4ODAwMDAwMDA7CiAJICAg ICBjbWQ2NDBfa2V5IDw9IDB4ODAwMGY4MDA7CiAJICAgICBjbWQ2NDBfa2V5 ICs9IDB4ODAwKSB7CkBAIC0zMTgsOCArMzI4LDggQEAKICAqLwogc3RhdGlj IGludCBfX2luaXQgcHJvYmVfZm9yX2NtZDY0MF9wY2kyICh2b2lkKQogewot CV9fZ2V0X2NtZDY0MF9yZWcgPSBnZXRfY21kNjQwX3JlZ19wY2kyOwotCV9f cHV0X2NtZDY0MF9yZWcgPSBwdXRfY21kNjQwX3JlZ19wY2kyOworCWdldF9j bWQ2NDBfcmVnID0gZ2V0X2NtZDY0MF9yZWdfcGNpMjsKKwlwdXRfY21kNjQw X3JlZyA9IHB1dF9jbWQ2NDBfcmVnX3BjaTI7CiAJZm9yIChjbWQ2NDBfa2V5 ID0gMHhjMDAwOyBjbWQ2NDBfa2V5IDw9IDB4Y2YwMDsgY21kNjQwX2tleSAr PSAweDEwMCkgewogCQlpZiAobWF0Y2hfcGNpX2NtZDY0MF9kZXZpY2UoKSkK IAkJCXJldHVybiAxOyAvKiBzdWNjZXNzICovCkBAIC0zMzQsOCArMzQ0LDgg QEAKIHsKIAl1OCBiOwogCi0JX19nZXRfY21kNjQwX3JlZyA9IGdldF9jbWQ2 NDBfcmVnX3ZsYjsKLQlfX3B1dF9jbWQ2NDBfcmVnID0gcHV0X2NtZDY0MF9y ZWdfdmxiOworCWdldF9jbWQ2NDBfcmVnID0gZ2V0X2NtZDY0MF9yZWdfdmxi OworCXB1dF9jbWQ2NDBfcmVnID0gcHV0X2NtZDY0MF9yZWdfdmxiOwogCWNt ZDY0MF9rZXkgPSAweDE3ODsKIAliID0gZ2V0X2NtZDY0MF9yZWcoQ0ZSKTsK IAlpZiAoYiA9PSAweGZmIHx8IGIgPT0gMHgwMCB8fCAoYiAmIENGUl9BVF9W RVNBXzA3OGgpKSB7CkBAIC0zNzUsNyArMzg1LDcgQEAKIC8qCiAgKiBEdW1w IG91dCBhbGwgY21kNjQwIHJlZ2lzdGVycy4gIE1heSBiZSBjYWxsZWQgZnJv bSBpZGUuYwogICovCi1zdGF0aWMgdm9pZCBjbWQ2NDBfZHVtcF9yZWdzICh2 b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGNtZDY0MF9kdW1wX3JlZ3MgKHZv aWQpCiB7CiAJdW5zaWduZWQgaW50IHJlZyA9IGNtZDY0MF92bGIgPyAweDUw IDogMHgwMDsKIApAQCAtMzk0LDkgKzQwNCw5IEBACiAgKiBDaGVjayB3aGV0 aGVyIHByZWZldGNoIGlzIG9uIGZvciBhIGRyaXZlLAogICogYW5kIGluaXRp YWxpemUgdGhlIHVubWFzayBmbGFncyBmb3Igc2FmZSBvcGVyYXRpb24uCiAg Ki8KLXN0YXRpYyB2b2lkIF9faW5pdCBjaGVja19wcmVmZXRjaCAodW5zaWdu ZWQgaW50IGluZGV4KQorc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3ByZWZl dGNoIChpZGVfZHJpdmVfdCAqIGRyaXZlKQogewotCWlkZV9kcml2ZV90ICpk cml2ZSA9IGNtZF9kcml2ZXNbaW5kZXhdOworCWludCBpbmRleCA9IGNhbGN1 bGF0ZV9pbmRleCAoZHJpdmUpOwogCXU4IGIgPSBnZXRfY21kNjQwX3JlZyhw cmVmZXRjaF9yZWdzW2luZGV4XSk7CiAKIAlpZiAoYiAmIHByZWZldGNoX21h c2tzW2luZGV4XSkgewkvKiBpcyBwcmVmZXRjaCBvZmY/ICovCkBAIC00MTMs NDMgKzQyMywxNyBAQAogfQogCiAvKgotICogRmlndXJlIG91dCB3aGljaCBk ZXZpY2VzIHdlIGNvbnRyb2wKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHNl dHVwX2RldmljZV9wdHJzICh2b2lkKQotewotCXVuc2lnbmVkIGludCBpOwot Ci0JY21kX2h3aWYwID0gJmlkZV9od2lmc1swXTsgLyogZGVmYXVsdCwgaWYg bm90IGZvdW5kIGJlbG93ICovCi0JY21kX2h3aWYxID0gJmlkZV9od2lmc1sx XTsgLyogZGVmYXVsdCwgaWYgbm90IGZvdW5kIGJlbG93ICovCi0JZm9yIChp ID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCWlkZV9od2lmX3QgKmh3 aWYgPSAmaWRlX2h3aWZzW2ldOwotCQlpZiAoaHdpZi0+Y2hpcHNldCA9PSBp ZGVfdW5rbm93biB8fCBod2lmLT5jaGlwc2V0ID09IGlkZV9nZW5lcmljKSB7 Ci0JCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSAw eDFmMCkKLQkJCQljbWRfaHdpZjAgPSBod2lmOwotCQkJZWxzZSBpZiAoaHdp Zi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSAweDE3MCkKLQkJCQlj bWRfaHdpZjEgPSBod2lmOwotCQl9Ci0JfQotCWNtZF9kcml2ZXNbMF0gPSAm Y21kX2h3aWYwLT5kcml2ZXNbMF07Ci0JY21kX2RyaXZlc1sxXSA9ICZjbWRf aHdpZjAtPmRyaXZlc1sxXTsKLQljbWRfZHJpdmVzWzJdID0gJmNtZF9od2lm MS0+ZHJpdmVzWzBdOwotCWNtZF9kcml2ZXNbM10gPSAmY21kX2h3aWYxLT5k cml2ZXNbMV07Ci19Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9DTUQ2NDBf RU5IQU5DRUQKLQotLyoKICAqIFNldHMgcHJlZmV0Y2ggbW9kZSBmb3IgYSBk cml2ZS4KICAqLwotc3RhdGljIHZvaWQgc2V0X3ByZWZldGNoX21vZGUgKHVu c2lnbmVkIGludCBpbmRleCwgaW50IG1vZGUpCitzdGF0aWMgdm9pZCBzZXRf cHJlZmV0Y2hfbW9kZSAoaWRlX2RyaXZlX3QgKiBkcml2ZSwgaW50IG1vZGUp CiB7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gY21kX2RyaXZlc1tpbmRleF07 CisJaW50IGluZGV4ID0gY2FsY3VsYXRlX2luZGV4IChkcml2ZSk7CiAJaW50 IHJlZyA9IHByZWZldGNoX3JlZ3NbaW5kZXhdOwogCXU4IGI7CiAJdW5zaWdu ZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9j aywgZmxhZ3MpOwotCWIgPSBfX2dldF9jbWQ2NDBfcmVnKHJlZyk7CisJYiA9 IGdldF9jbWQ2NDBfcmVnKHJlZyk7CiAJaWYgKG1vZGUpIHsJLyogd2FudCBw cmVmZXRjaCBvbj8gKi8KICNpZiBDTUQ2NDBfUFJFRkVUQ0hfTUFTS1MKIAkJ ZHJpdmUtPm5vX3VubWFzayA9IDE7CkBAIC00NjMsMTUgKzQ0NywxNiBAQAog CQlkcml2ZS0+aW9fMzJiaXQgPSAwOwogCQliIHw9IHByZWZldGNoX21hc2tz W2luZGV4XTsJLyogZGlzYWJsZSBwcmVmZXRjaCAqLwogCX0KLQlfX3B1dF9j bWQ2NDBfcmVnKHJlZywgYik7CisJcHV0X2NtZDY0MF9yZWcocmVnLCBiKTsK IAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwog fQogCiAvKgogICogRHVtcCBvdXQgY3VycmVudCBkcml2ZSBjbG9ja3Mgc2V0 dGluZ3MKICAqLwotc3RhdGljIHZvaWQgZGlzcGxheV9jbG9ja3MgKHVuc2ln bmVkIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIF9faW5pdCBkaXNwbGF5X2Ns b2NrcyAoaWRlX2RyaXZlX3QgKiBkcml2ZSkKIHsKKwlpbnQgaW5kZXggPSBj YWxjdWxhdGVfaW5kZXggKGRyaXZlKTsKIAl1OCBhY3RpdmVfY291bnQsIHJl Y292ZXJ5X2NvdW50OwogCiAJYWN0aXZlX2NvdW50ID0gYWN0aXZlX2NvdW50 c1tpbmRleF07CkBAIC00ODEsNyArNDY2LDcgQEAKIAlpZiAoYWN0aXZlX2Nv dW50ID4gMyAmJiByZWNvdmVyeV9jb3VudCA9PSAxKQogCQkrK3JlY292ZXJ5 X2NvdW50OwogCWlmIChjbWQ2NDBfY2hpcF92ZXJzaW9uID4gMSkKLQkJcmVj b3ZlcnlfY291bnQgKz0gMTsgIC8qIGNtZDY0MGIgdXNlcyAoY291bnQgKyAx KSovCisJCXJlY292ZXJ5X2NvdW50ICs9IDE7ICAvKiBjbWQ2NDBiIHVzZXMg KGNvdW50ICsgMSkgKi8KIAlwcmludGsoIiwgY2xvY2tzPSVkLyVkLyVkXG4i LCBzZXR1cF9jb3VudHNbaW5kZXhdLCBhY3RpdmVfY291bnQsIHJlY292ZXJ5 X2NvdW50KTsKIH0KIApAQCAtNDk3LDggKzQ4Miw5IEBACiAvKgogICogVGhp cyByb3V0aW5lIHJldHJpZXZlcyB0aGUgaW5pdGlhbCBkcml2ZSB0aW1pbmdz IGZyb20gdGhlIGNoaXBzZXQuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBy ZXRyaWV2ZV9kcml2ZV9jb3VudHMgKHVuc2lnbmVkIGludCBpbmRleCkKK3N0 YXRpYyB2b2lkIF9faW5pdCByZXRyaWV2ZV9kcml2ZV9jb3VudHMgKGlkZV9k cml2ZV90ICogZHJpdmUpCiB7CisJaW50IGluZGV4ID0gY2FsY3VsYXRlX2lu ZGV4IChkcml2ZSk7CiAJdTggYjsKIAogCS8qCkBAIC01MjEsMTcgKzUwNywx NiBAQAogCXJlY292ZXJ5X2NvdW50c1tpbmRleF0gPSAoYiAmIDB4MGYpID8g KGIgJiAweDBmKSA6IDB4MTA7CiB9CiAKLQogLyoKICAqIFRoaXMgcm91dGlu ZSB3cml0ZXMgdGhlIHByZXBhcmVkIHNldHVwL2FjdGl2ZS9yZWNvdmVyeSBj b3VudHMKICAqIGZvciBhIGRyaXZlIGludG8gdGhlIGNtZDY0MCBjaGlwc2V0 IHJlZ2lzdGVycyB0byBhY3RpdmUgdGhlbS4KICAqLwotc3RhdGljIHZvaWQg cHJvZ3JhbV9kcml2ZV9jb3VudHMgKHVuc2lnbmVkIGludCBpbmRleCkKK3N0 YXRpYyB2b2lkIHByb2dyYW1fZHJpdmVfY291bnRzIChpZGVfZHJpdmVfdCAq IGRyaXZlLCBpbnQgc2V0dXBfY291bnQsIGludCBhY3RpdmVfY291bnQsIGlu dCByZWNvdmVyeV9jb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwot CXU4IHNldHVwX2NvdW50ICAgID0gc2V0dXBfY291bnRzW2luZGV4XTsKLQl1 OCBhY3RpdmVfY291bnQgICA9IGFjdGl2ZV9jb3VudHNbaW5kZXhdOwotCXU4 IHJlY292ZXJ5X2NvdW50ID0gcmVjb3ZlcnlfY291bnRzW2luZGV4XTsKKwlp ZGVfZHJpdmVfdCAqZHJpdmVzID0gSFdJRiAoZHJpdmUpLT5kcml2ZXM7CisJ aW50IGNoYW5uZWwgPSAoaW50KSBIV0lGIChkcml2ZSktPmNoYW5uZWw7CisJ aW50IGluZGV4ID0gY2FsY3VsYXRlX2luZGV4IChkcml2ZSk7CiAKIAkvKgog CSAqIFNldCB1cCBhZGRyZXNzIHNldHVwIGNvdW50IGFuZCBkcml2ZSByZWFk L3dyaXRlIHRpbWluZyByZWdpc3RlcnMuCkBAIC01MzksMjAgKzUyNCwxNCBA QAogCSAqIGVhY2ggZHJpdmUuICBTZWNvbmRhcnkgaW50ZXJmYWNlIGhhcyBv bmUgY29tbW9uIHNldCBvZiByZWdpc3RlcnMsCiAJICogc28gd2UgbWVyZ2Ug dGhlIHRpbWluZ3MsIHVzaW5nIHRoZSBzbG93ZXN0IHZhbHVlIGZvciBlYWNo IHRpbWluZy4KIAkgKi8KLQlpZiAoaW5kZXggPiAxKSB7Ci0JCXVuc2lnbmVk IGludCBtYXRlOwotCQlpZiAoY21kX2RyaXZlc1ttYXRlID0gaW5kZXggXiAx XS0+cHJlc2VudCkgewotCQkJaWYgKHNldHVwX2NvdW50IDwgc2V0dXBfY291 bnRzW21hdGVdKQotCQkJCXNldHVwX2NvdW50ID0gc2V0dXBfY291bnRzW21h dGVdOwotCQkJaWYgKGFjdGl2ZV9jb3VudCA8IGFjdGl2ZV9jb3VudHNbbWF0 ZV0pCi0JCQkJYWN0aXZlX2NvdW50ID0gYWN0aXZlX2NvdW50c1ttYXRlXTsK LQkJCWlmIChyZWNvdmVyeV9jb3VudCA8IHJlY292ZXJ5X2NvdW50c1ttYXRl XSkKLQkJCQlyZWNvdmVyeV9jb3VudCA9IHJlY292ZXJ5X2NvdW50c1ttYXRl XTsKLQkJfQorCWlmIChjaGFubmVsKSB7CisJCWRyaXZlLT5kcml2ZV9kYXRh ID0gc2V0dXBfY291bnQ7CisJCXNldHVwX2NvdW50ID0gSURFX01BWCAoZHJp dmVzWzBdLmRyaXZlX2RhdGEsCisJCQkJICAgICAgIGRyaXZlc1sxXS5kcml2 ZV9kYXRhKTsKIAl9CiAKIAkvKgotCSAqIENvbnZlcnQgc2V0dXBfY291bnQg dG8gaW50ZXJuYWwgY2hpcHNldCByZXByZXNlbnRhdGlvbgorCSAqIENvbnZl cnQgdmFsdWVzIHRvIGludGVybmFsIGNoaXBzZXQgcmVwcmVzZW50YXRpb24K IAkgKi8KIAlzd2l0Y2ggKHNldHVwX2NvdW50KSB7CiAJCWNhc2UgNDoJIHNl dHVwX2NvdW50ID0gMHgwMDsgYnJlYWs7CkBAIC01NzEsMjQgKzU1MCw1MSBA QAogCSAqIGFuZCB0aGVuIHRoZSBhY3RpdmUvcmVjb3ZlcnkgY291bnRzIGlu dG8gdGhlIERSV1RJTSByZWcKIAkgKiAodGhpcyBjb252ZXJ0cyBjb3VudHMg b2YgMTYgaW50byBjb3VudHMgb2YgemVybyAtLSBva2F5KS4KIAkgKi8KLQlz ZXR1cF9jb3VudCB8PSBfX2dldF9jbWQ2NDBfcmVnKGFydHRpbV9yZWdzW2lu ZGV4XSkgJiAweDNmOwotCV9fcHV0X2NtZDY0MF9yZWcoYXJ0dGltX3JlZ3Nb aW5kZXhdLCBzZXR1cF9jb3VudCk7Ci0JX19wdXRfY21kNjQwX3JlZyhkcnd0 aW1fcmVnc1tpbmRleF0sIHBhY2tfbmliYmxlcyhhY3RpdmVfY291bnQsIHJl Y292ZXJ5X2NvdW50KSk7CisJc2V0dXBfY291bnQgfD0gZ2V0X2NtZDY0MF9y ZWcoYXJ0dGltX3JlZ3NbaW5kZXhdKSAmIDB4M2Y7CisJcHV0X2NtZDY0MF9y ZWcoYXJ0dGltX3JlZ3NbaW5kZXhdLCBzZXR1cF9jb3VudCk7CisJcHV0X2Nt ZDY0MF9yZWcoZHJ3dGltX3JlZ3NbaW5kZXhdLCBwYWNrX25pYmJsZXMoYWN0 aXZlX2NvdW50LCByZWNvdmVyeV9jb3VudCkpOwogCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCi0gKiBTZXQg YSBzcGVjaWZpYyBwaW9fbW9kZSBmb3IgYSBkcml2ZQorICogRHJpdmUgUElP IG1vZGUgc2VsZWN0aW9uOgogICovCi1zdGF0aWMgdm9pZCBjbWQ2NDBfc2V0 X21vZGUgKHVuc2lnbmVkIGludCBpbmRleCwgdTggcGlvX21vZGUsIHVuc2ln bmVkIGludCBjeWNsZV90aW1lKQorc3RhdGljIHZvaWQKK2NtZDY0MF90dW5l cHJvYyAoaWRlX2RyaXZlX3QgKiBkcml2ZSwgdTggbW9kZV93YW50ZWQpCiB7 Ci0JaW50IHNldHVwX3RpbWUsIGFjdGl2ZV90aW1lLCByZWNvdmVyeV90aW1l LCBjbG9ja190aW1lOwotCXU4IHNldHVwX2NvdW50LCBhY3RpdmVfY291bnQs IHJlY292ZXJ5X2NvdW50LCByZWNvdmVyeV9jb3VudDIsIGN5Y2xlX2NvdW50 OworCWludCBzZXR1cF90aW1lLCBhY3RpdmVfdGltZSwgcmVjb3ZlcnlfdGlt ZTsKKwlpbnQgY2xvY2tfdGltZSwgcGlvX21vZGUsIGN5Y2xlX3RpbWU7CisJ dTggcmVjb3ZlcnlfY291bnQyLCBjeWNsZV9jb3VudCwgYjsKKwlpbnQgc2V0 dXBfY291bnQsIGFjdGl2ZV9jb3VudCwgcmVjb3ZlcnlfY291bnQ7CiAJaW50 IGJ1c19zcGVlZCA9IHN5c3RlbV9idXNfY2xvY2soKTsKKwlpZGVfcGlvX2Rh dGFfdCBkOworCisJc3dpdGNoIChtb2RlX3dhbnRlZCkgeworCQljYXNlIDY6 CS8qIHNldCBmYXN0LWRldnNlbCBvZmYgKi8KKwkJY2FzZSA3OgkvKiBzZXQg ZmFzdC1kZXZzZWwgb24gKi8KKwkJCW1vZGVfd2FudGVkICY9IDE7CisJCQli ID0gZ2V0X2NtZDY0MF9yZWcoQ05UUkwpICYgfjB4Mjc7CisJCQlpZiAobW9k ZV93YW50ZWQpCisJCQkJYiB8PSAweDI3OworCQkJcHV0X2NtZDY0MF9yZWco Q05UUkwsIGIpOworCQkJcHJpbnRrKCIlczogJXNhYmxlZCBjbWQ2NDAgZmFz dCBob3N0IHRpbWluZyAoZGV2c2VsKVxuIiwgZHJpdmUtPm5hbWUsIG1vZGVf d2FudGVkID8gImVuIiA6ICJkaXMiKTsKKwkJCXJldHVybjsKKworCQljYXNl IDg6CS8qIHNldCBwcmVmZXRjaCBvZmYgKi8KKwkJY2FzZSA5OgkvKiBzZXQg cHJlZmV0Y2ggb24gKi8KKwkJCW1vZGVfd2FudGVkICY9IDE7CisJCQlzZXRf cHJlZmV0Y2hfbW9kZSAoZHJpdmUsIG1vZGVfd2FudGVkKTsKKwkJCXByaW50 ayAoIiVzOiAlc2FibGVkIGNtZDY0MCBwcmVmZXRjaFxuIiwgZHJpdmUtPm5h bWUsIG1vZGVfd2FudGVkID8gImVuIiA6ICJkaXMiKTsKKwkJCXJldHVybjsK Kwl9CisKKwltb2RlX3dhbnRlZCA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShk cml2ZSwgbW9kZV93YW50ZWQsIDUsICZkKTsKKwlwaW9fbW9kZSA9IGQucGlv X21vZGU7CisJY3ljbGVfdGltZSA9IGQuY3ljbGVfdGltZTsKIAogCWlmIChw aW9fbW9kZSA+IDUpCiAJCXBpb19tb2RlID0gNTsKLQlzZXR1cF90aW1lICA9 IGlkZV9waW9fdGltaW5nc1twaW9fbW9kZV0uc2V0dXBfdGltZTsKKwlzZXR1 cF90aW1lID0gaWRlX3Bpb190aW1pbmdzW3Bpb19tb2RlXS5zZXR1cF90aW1l OwogCWFjdGl2ZV90aW1lID0gaWRlX3Bpb190aW1pbmdzW3Bpb19tb2RlXS5h Y3RpdmVfdGltZTsKIAlyZWNvdmVyeV90aW1lID0gY3ljbGVfdGltZSAtIChz ZXR1cF90aW1lICsgYWN0aXZlX3RpbWUpOwogCWNsb2NrX3RpbWUgPSAxMDAw IC8gYnVzX3NwZWVkOwpAQCAtNjE3LDExNiArNjIzLDMyIEBACiAJaWYgKHJl Y292ZXJ5X2NvdW50ID4gMTYpCiAJCXJlY292ZXJ5X2NvdW50ID0gMTY7IC8q IG1heGltdW0gYWxsb3dlZCBieSBjbWQ2NDAgKi8KIAotCXNldHVwX2NvdW50 c1tpbmRleF0gICAgPSBzZXR1cF9jb3VudDsKLQlhY3RpdmVfY291bnRzW2lu ZGV4XSAgID0gYWN0aXZlX2NvdW50OwotCXJlY292ZXJ5X2NvdW50c1tpbmRl eF0gPSByZWNvdmVyeV9jb3VudDsKLQogCS8qCiAJICogSW4gYSBwZXJmZWN0 IHdvcmxkLCB3ZSBtaWdodCBzZXQgdGhlIGRyaXZlIHBpbyBtb2RlIGhlcmUK IAkgKiAodXNpbmcgV0lOX1NFVEZFQVRVUkUpIGJlZm9yZSBjb250aW51aW5n LgogCSAqCiAJICogQnV0IHdlIGRvIG5vdCwgYmVjYXVzZToKLQkgKgkxKSB0 aGlzIGlzIHRoZSB3cm9uZyBwbGFjZSB0byBkbyBpdCAocHJvcGVyIGlzIGRv X3NwZWNpYWwoKSBpbiBpZGUuYykKKwkgKiAJMSkgdGhpcyBpcyB0aGUgd3Jv bmcgcGxhY2UgdG8gZG8gaXQgKHByb3BlciBpcyBkb19zcGVjaWFsKCkgaW4g aWRlLmMpCiAJICogCTIpIGluIHByYWN0aWNlIHRoaXMgaXMgcmFyZWx5LCBp ZiBldmVyLCBuZWNlc3NhcnkKIAkgKi8KLQlwcm9ncmFtX2RyaXZlX2NvdW50 cyAoaW5kZXgpOwotfQotCi0vKgotICogRHJpdmUgUElPIG1vZGUgc2VsZWN0 aW9uOgotICovCi1zdGF0aWMgdm9pZCBjbWQ2NDBfdHVuZV9kcml2ZSAoaWRl X2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlX3dhbnRlZCkKLXsKLQl1OCBiOwot CWlkZV9waW9fZGF0YV90ICBkOwotCXVuc2lnbmVkIGludCBpbmRleCA9IDA7 CisJcHJvZ3JhbV9kcml2ZV9jb3VudHMgKGRyaXZlLCBzZXR1cF9jb3VudCwg YWN0aXZlX2NvdW50LCByZWNvdmVyeV9jb3VudCk7CiAKLQl3aGlsZSAoZHJp dmUgIT0gY21kX2RyaXZlc1tpbmRleF0pIHsKLQkJaWYgKCsraW5kZXggPiAz KSB7Ci0JCQlwcmludGsoIiVzOiBiYWQgbmV3cyBpbiBjbWQ2NDBfdHVuZV9k cml2ZVxuIiwgZHJpdmUtPm5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQot CXN3aXRjaCAobW9kZV93YW50ZWQpIHsKLQkJY2FzZSA2OiAvKiBzZXQgZmFz dC1kZXZzZWwgb2ZmICovCi0JCWNhc2UgNzogLyogc2V0IGZhc3QtZGV2c2Vs IG9uICovCi0JCQltb2RlX3dhbnRlZCAmPSAxOwotCQkJYiA9IGdldF9jbWQ2 NDBfcmVnKENOVFJMKSAmIH4weDI3OwotCQkJaWYgKG1vZGVfd2FudGVkKQot CQkJCWIgfD0gMHgyNzsKLQkJCXB1dF9jbWQ2NDBfcmVnKENOVFJMLCBiKTsK LQkJCXByaW50aygiJXM6ICVzYWJsZWQgY21kNjQwIGZhc3QgaG9zdCB0aW1p bmcgKGRldnNlbClcbiIsIGRyaXZlLT5uYW1lLCBtb2RlX3dhbnRlZCA/ICJl biIgOiAiZGlzIik7Ci0JCQlyZXR1cm47Ci0KLQkJY2FzZSA4OiAvKiBzZXQg cHJlZmV0Y2ggb2ZmICovCi0JCWNhc2UgOTogLyogc2V0IHByZWZldGNoIG9u ICovCi0JCQltb2RlX3dhbnRlZCAmPSAxOwotCQkJc2V0X3ByZWZldGNoX21v ZGUoaW5kZXgsIG1vZGVfd2FudGVkKTsKLQkJCXByaW50aygiJXM6ICVzYWJs ZWQgY21kNjQwIHByZWZldGNoXG4iLCBkcml2ZS0+bmFtZSwgbW9kZV93YW50 ZWQgPyAiZW4iIDogImRpcyIpOwotCQkJcmV0dXJuOwotCX0KLQotCSh2b2lk KSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUgKGRyaXZlLCBtb2RlX3dhbnRlZCwg NSwgJmQpOwotCWNtZDY0MF9zZXRfbW9kZSAoaW5kZXgsIGQucGlvX21vZGUs IGQuY3ljbGVfdGltZSk7Ci0KLQlwcmludGsgKCIlczogc2VsZWN0ZWQgY21k NjQwIFBJTyBtb2RlJWQgKCVkbnMpJXMiLAotCQlkcml2ZS0+bmFtZSwKLQkJ ZC5waW9fbW9kZSwKLQkJZC5jeWNsZV90aW1lLAotCQlkLm92ZXJyaWRkZW4g PyAiIChvdmVycmlkaW5nIHZlbmRvciBtb2RlKSIgOiAiIik7Ci0JZGlzcGxh eV9jbG9ja3MoaW5kZXgpOwotCXJldHVybjsKLX0KLQotI2VuZGlmIC8qIENP TkZJR19CTEtfREVWX0NNRDY0MF9FTkhBTkNFRCAqLwotCi1zdGF0aWMgaW50 IHBjaV9jb25mMSh2b2lkKQotewotCXUzMiB0bXA7Ci0JdW5zaWduZWQgbG9u ZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxh Z3MpOwotCW91dGIoMHgwMSwgMHhDRkIpOwotCXRtcCA9IGlubCgweENGOCk7 Ci0Jb3V0bCgweDgwMDAwMDAwLCAweENGOCk7Ci0JaWYgKGlubCgweENGOCkg PT0gMHg4MDAwMDAwMCkgewotCQlvdXRsKHRtcCwgMHhDRjgpOwotCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotCQlyZXR1 cm4gMTsKLQl9Ci0Jb3V0bCh0bXAsIDB4Q0Y4KTsKLQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXBy aW50aygiJXM6IHNlbGVjdGVkIGNtZDY0MCBQSU8gbW9kZSVkIDogJWQgKCVk bnMpJXMsICIKKwkgICAgICAgImNsb2Nrcz0lZC8lZC8lZFxuIiwKKwkJZHJp dmUtPm5hbWUsIHBpb19tb2RlLCBtb2RlX3dhbnRlZCwgY3ljbGVfdGltZSwK KwkJZC5vdmVycmlkZGVuID8gIiAob3ZlcnJpZGluZyB2ZW5kb3IgbW9kZSki IDogIiIsCisJCXNldHVwX2NvdW50LCBhY3RpdmVfY291bnQsIHJlY292ZXJ5 X2NvdW50KTsKIH0KIAotc3RhdGljIGludCBwY2lfY29uZjIodm9pZCkKK3N0 YXRpYyB2b2lkIF9faW5pdCBpbml0X2h3aWZfY21kNjQwIChpZGVfaHdpZl90 ICogaHdpZikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9s b2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0Jb3V0YigweDAwLCAw eENGQik7Ci0Jb3V0YigweDAwLCAweENGOCk7Ci0Jb3V0YigweDAwLCAweENG QSk7Ci0JaWYgKGluYigweENGOCkgPT0gMHgwMCAmJiBpbmIoMHhDRjgpID09 IDB4MDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ss IGZsYWdzKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8q Ci0gKiBQcm9iZSBmb3IgYSBjbWQ2NDAgY2hpcHNldCwgYW5kIGluaXRpYWxp emUgaXQgaWYgZm91bmQuICBDYWxsZWQgZnJvbSBpZGUuYwotICovCi1zdGF0 aWMgdm9pZCBfX2luaXQgaWRlX3Byb2JlX2Zvcl9jbWQ2NDB4ICh2b2lkKQot ewotI2lmZGVmIENPTkZJR19CTEtfREVWX0NNRDY0MF9FTkhBTkNFRAogCWlu dCBzZWNvbmRfcG9ydF90b2dnbGVkID0gMDsKLSNlbmRpZiAvKiBDT05GSUdf QkxLX0RFVl9DTUQ2NDBfRU5IQU5DRUQgKi8KIAlpbnQgc2Vjb25kX3BvcnRf Y21kNjQwID0gMDsKIAljb25zdCBjaGFyICpidXNfdHlwZSwgKnBvcnQyOwot CXVuc2lnbmVkIGludCBpbmRleDsKIAl1OCBiLCBjZnI7CisJaW50IGk7CisK Kwlod2lmLT50dW5lcHJvYyA9ICZjbWQ2NDBfdHVuZXByb2M7CiAKIAlpZiAo Y21kNjQwX3ZsYiAmJiBwcm9iZV9mb3JfY21kNjQwX3ZsYigpKSB7CiAJCWJ1 c190eXBlID0gIlZMQiI7CkBAIC03MzQsMTMgKzY1NiwxNSBAQAogCQljbWQ2 NDBfdmxiID0gMDsKIAkJLyogRmluZCBvdXQgd2hhdCBraW5kIG9mIFBDSSBw cm9iaW5nIGlzIHN1cHBvcnRlZCBvdGhlcndpc2UKIAkJICAgd2UgYnJlYWsg c29tZSBBZGFwdGVjIGNhcmRzLi4uICAqLwotCQlpZiAocGNpX2NvbmYxKCkg JiYgcHJvYmVfZm9yX2NtZDY0MF9wY2kxKCkpCisKKwkJaWYgKHByb2JlX2Zv cl9jbWQ2NDBfcGNpMSgpKQogCQkJYnVzX3R5cGUgPSAiUENJICh0eXBlMSki OwotCQllbHNlIGlmIChwY2lfY29uZjIoKSAmJiBwcm9iZV9mb3JfY21kNjQw X3BjaTIoKSkKKwkJZWxzZSBpZiAocHJvYmVfZm9yX2NtZDY0MF9wY2kyKCkp CiAJCQlidXNfdHlwZSA9ICJQQ0kgKHR5cGUyKSI7CiAJCWVsc2UKIAkJCXJl dHVybjsKIAl9CisKIAkvKgogCSAqIFVuZG9jdW1lbnRlZCBtYWdpYyAodGhl cmUgaXMgbm8gMHg1YiByZWcgaW4gc3BlY3MpCiAJICovCkBAIC03NjUsMTYg KzY4OSwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JLyoKLQkgKiBJbml0aWFs aXplIGRhdGEgZm9yIHByaW1hcnkgcG9ydAotCSAqLwotCXNldHVwX2Rldmlj ZV9wdHJzICgpOwogCXByaW50aygiJXM6IGJ1Z2d5IGNtZDY0MCVjIGludGVy ZmFjZSBvbiAlcywgY29uZmlnPTB4JTAyeFxuIiwKLQkgICAgICAgY21kX2h3 aWYwLT5uYW1lLCAnYScgKyBjbWQ2NDBfY2hpcF92ZXJzaW9uIC0gMSwgYnVz X3R5cGUsIGNmcik7Ci0JY21kX2h3aWYwLT5jaGlwc2V0ID0gaWRlX2NtZDY0 MDsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9DTUQ2NDBfRU5IQU5DRUQKLQlj bWRfaHdpZjAtPnR1bmVwcm9jID0gJmNtZDY0MF90dW5lX2RyaXZlOwotI2Vu ZGlmIC8qIENPTkZJR19CTEtfREVWX0NNRDY0MF9FTkhBTkNFRCAqLworCQlo d2lmLT5uYW1lLCAnYScgKyBjbWQ2NDBfY2hpcF92ZXJzaW9uIC0gMSwgYnVz X3R5cGUsIGNmcik7CisKKwlod2lmLT5zZXJpYWxpemVkID0gMTsKKwlod2lm LT5jaGlwc2V0ID0gaWRlX2NtZDY0MDsKIAogCS8qCiAJICogRW5zdXJlIGNv bXBhdGliaWxpdHkgYnkgYWx3YXlzIHVzaW5nIHRoZSBzbG93ZXN0IHRpbWlu Z3MKQEAgLTc4OSwxMTUgKzcwOCwxMjkgQEAKIAkvKgogCSAqIFRyeSB0byBl bmFibGUgdGhlIHNlY29uZGFyeSBpbnRlcmZhY2UsIGlmIG5vdCBhbHJlYWR5 IGVuYWJsZWQKIAkgKi8KLQlpZiAoY21kX2h3aWYxLT5ub3Byb2JlKSB7Ci0J CXBvcnQyID0gIm5vdCBwcm9iZWQiOwotCX0gZWxzZSB7Ci0JCWIgPSBnZXRf Y21kNjQwX3JlZyhDTlRSTCk7Ci0JCWlmIChzZWNvbmRhcnlfcG9ydF9yZXNw b25kaW5nKCkpIHsKLQkJCWlmICgoYiAmIENOVFJMX0VOQV8yTkQpKSB7Ci0J CQkJc2Vjb25kX3BvcnRfY21kNjQwID0gMTsKLQkJCQlwb3J0MiA9ICJva2F5 IjsKLQkJCX0gZWxzZSBpZiAoY21kNjQwX3ZsYikgewotCQkJCXNlY29uZF9w b3J0X2NtZDY0MCA9IDE7Ci0JCQkJcG9ydDIgPSAiYWxpdmUiOwotCQkJfSBl bHNlCi0JCQkJcG9ydDIgPSAibm90IGNtZDY0MCI7CisJaWYgKGh3aWYtPmNo YW5uZWwgPT0gMSkJLy9zZWNvbmRhcnkgaW50ZXJmYWNlCisJeworCQlpZiAo aHdpZi0+bm9wcm9iZSkgeworCQkJcG9ydDIgPSAibm90IHByb2JlZCI7CiAJ CX0gZWxzZSB7Ci0JCQlwdXRfY21kNjQwX3JlZyhDTlRSTCwgYiBeIENOVFJM X0VOQV8yTkQpOyAvKiB0b2dnbGUgdGhlIGJpdCAqLworCQkJYiA9IGdldF9j bWQ2NDBfcmVnKENOVFJMKTsKIAkJCWlmIChzZWNvbmRhcnlfcG9ydF9yZXNw b25kaW5nKCkpIHsKLQkJCQlzZWNvbmRfcG9ydF9jbWQ2NDAgPSAxOwotI2lm ZGVmIENPTkZJR19CTEtfREVWX0NNRDY0MF9FTkhBTkNFRAotCQkJCXNlY29u ZF9wb3J0X3RvZ2dsZWQgPSAxOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVW X0NNRDY0MF9FTkhBTkNFRCAqLwotCQkJCXBvcnQyID0gImVuYWJsZWQiOwor CQkJCWlmICgoYiAmIENOVFJMX0VOQV8yTkQpKSB7CisJCQkJCXNlY29uZF9w b3J0X2NtZDY0MCA9IDE7CisJCQkJCXBvcnQyID0gIm9rYXkiOworCQkJCX0g ZWxzZSBpZiAoY21kNjQwX3ZsYikgeworCQkJCQlzZWNvbmRfcG9ydF9jbWQ2 NDAgPSAxOworCQkJCQlwb3J0MiA9ICJhbGl2ZSI7CisJCQkJfSBlbHNlCisJ CQkJCXBvcnQyID0gIm5vdCBjbWQ2NDAiOwogCQkJfSBlbHNlIHsKLQkJCQlw dXRfY21kNjQwX3JlZyhDTlRSTCwgYik7IC8qIHJlc3RvcmUgb3JpZ2luYWwg c2V0dGluZyAqLwotCQkJCXBvcnQyID0gIm5vdCByZXNwb25kaW5nIjsKKwkJ CQlwdXRfY21kNjQwX3JlZyhDTlRSTCwgYiBeIENOVFJMX0VOQV8yTkQpOwkv KiB0b2dnbGUgdGhlIGJpdCAqLworCQkJCWlmIChzZWNvbmRhcnlfcG9ydF9y ZXNwb25kaW5nKCkpIHsKKwkJCQkJc2Vjb25kX3BvcnRfY21kNjQwID0gMTsK KwkJCQkJc2Vjb25kX3BvcnRfdG9nZ2xlZCA9IDE7CisJCQkJCXBvcnQyID0g ImVuYWJsZWQiOworCQkJCX0gZWxzZSB7CisJCQkJCXB1dF9jbWQ2NDBfcmVn KENOVFJMLCBiKTsJLyogcmVzdG9yZSBvcmlnaW5hbCBzZXR0aW5nICovCisJ CQkJCXBvcnQyID0gIm5vdCByZXNwb25kaW5nIjsKKwkJCQl9CiAJCQl9CiAJ CX0KLQl9CiAKLQkvKgotCSAqIEluaXRpYWxpemUgZGF0YSBmb3Igc2Vjb25k YXJ5IGNtZDY0MCBwb3J0LCBpZiBlbmFibGVkCi0JICovCi0JaWYgKHNlY29u ZF9wb3J0X2NtZDY0MCkgewotCQljbWRfaHdpZjAtPnNlcmlhbGl6ZWQgPSAx OwotCQljbWRfaHdpZjEtPnNlcmlhbGl6ZWQgPSAxOwotCQljbWRfaHdpZjEt PmNoaXBzZXQgPSBpZGVfY21kNjQwOwotCQljbWRfaHdpZjAtPm1hdGUgPSBj bWRfaHdpZjE7Ci0JCWNtZF9od2lmMS0+bWF0ZSA9IGNtZF9od2lmMDsKLQkJ Y21kX2h3aWYxLT5jaGFubmVsID0gMTsKLSNpZmRlZiBDT05GSUdfQkxLX0RF Vl9DTUQ2NDBfRU5IQU5DRUQKLQkJY21kX2h3aWYxLT50dW5lcHJvYyA9ICZj bWQ2NDBfdHVuZV9kcml2ZTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9D TUQ2NDBfRU5IQU5DRUQgKi8KKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBkYXRh IGZvciBzZWNvbmRhcnkgY21kNjQwIHBvcnQsIGlmIGVuYWJsZWQKKwkJICov CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc3NlcmlhbGl6ZWQsIHNlY29u ZGFyeSBpbnRlcmZhY2UgJXNcbiIsCisJCQlod2lmLT5uYW1lLCBod2lmLT5z ZXJpYWxpemVkID8gIiIgOiAibm90ICIsIHBvcnQyKTsKIAl9Ci0JcHJpbnRr KEtFUk5fSU5GTyAiJXM6ICVzc2VyaWFsaXplZCwgc2Vjb25kYXJ5IGludGVy ZmFjZSAlc1xuIiwgY21kX2h3aWYxLT5uYW1lLAotCQljbWRfaHdpZjAtPnNl cmlhbGl6ZWQgPyAiIiA6ICJub3QgIiwgcG9ydDIpOwogCiAJLyoKIAkgKiBF c3RhYmxpc2ggaW5pdGlhbCB0aW1pbmdzL3ByZWZldGNoIGZvciBhbGwgZHJp dmVzLgogCSAqIERvIG5vdCB1bm5lY2Vzc2FyaWx5IGRpc3R1cmIgYW55IHBy aW9yIEJJT1Mgc2V0dXAgb2YgdGhlc2UuCiAJICovCi0JZm9yIChpbmRleCA9 IDA7IGluZGV4IDwgKDIgKyAoc2Vjb25kX3BvcnRfY21kNjQwIDw8IDEpKTsg aW5kZXgrKykgewotCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBjbWRfZHJpdmVz W2luZGV4XTsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9DTUQ2NDBfRU5IQU5D RUQKLQkJaWYgKGRyaXZlLT5hdXRvdHVuZSB8fCAoKGluZGV4ID4gMSkgJiYg c2Vjb25kX3BvcnRfdG9nZ2xlZCkpIHsKLQkgCQkvKgotCSAJCSAqIFJlc2V0 IHRpbWluZyB0byB0aGUgc2xvd2VzdCBzcGVlZCBhbmQgdHVybiBvZmYgcHJl ZmV0Y2guCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAoaHdp Zi0+ZHJpdmVzW2ldLmF1dG90dW5lKSB7CisJCQkvKgorCQkJICogUmVzZXQg dGltaW5nIHRvIHRoZSBzbG93ZXN0IHNwZWVkIGFuZCB0dXJuIG9mZiBwcmVm ZXRjaC4KIAkJCSAqIFRoaXMgd2F5LCB0aGUgZHJpdmUgaWRlbnRpZnkgY29k ZSBoYXMgYSBiZXR0ZXIgY2hhbmNlLgogCQkJICovCi0JCQlzZXR1cF9jb3Vu dHMgICAgW2luZGV4XSA9IDQ7CS8qIG1heCBwb3NzaWJsZSAqLwotCQkJYWN0 aXZlX2NvdW50cyAgIFtpbmRleF0gPSAxNjsJLyogbWF4IHBvc3NpYmxlICov Ci0JCQlyZWNvdmVyeV9jb3VudHMgW2luZGV4XSA9IDE2OwkvKiBtYXggcG9z c2libGUgKi8KLQkJCXByb2dyYW1fZHJpdmVfY291bnRzIChpbmRleCk7Ci0J CQlzZXRfcHJlZmV0Y2hfbW9kZSAoaW5kZXgsIDApOwotCQkJcHJpbnRrKCJj bWQ2NDA6IGRyaXZlJWQgdGltaW5ncy9wcmVmZXRjaCBjbGVhcmVkXG4iLCBp bmRleCk7CisJCQlzZXR1cF9jb3VudHNbMiAqIGh3aWYtPmNoYW5uZWwgKyBp XSA9IDQ7CS8qIG1heCBwb3NzaWJsZSAqLworCQkJYWN0aXZlX2NvdW50c1sy ICogaHdpZi0+Y2hhbm5lbCArIGldID0gMTY7CS8qIG1heCBwb3NzaWJsZSAq LworCQkJcmVjb3ZlcnlfY291bnRzWzIgKiBod2lmLT5jaGFubmVsICsgaV0g PSAxNjsJLyogbWF4IHBvc3NpYmxlICovCisJCQlwcm9ncmFtX2RyaXZlX2Nv dW50cyAoJihod2lmLT5kcml2ZXNbaV0pLCA0LCAxNiwgMTYpOworCQkJc2V0 X3ByZWZldGNoX21vZGUgKCgmaHdpZi0+ZHJpdmVzW2ldKSwgMCk7CisJCQlw cmludGsoImNtZDY0MDogZHJpdmUlZCB0aW1pbmdzL3ByZWZldGNoIGNsZWFy ZWRcbiIsIDIgKiBod2lmLT5jaGFubmVsICsgaSk7CiAJCX0gZWxzZSB7CiAJ CQkvKgogCQkJICogUmVjb3JkIHRpbWluZ3MvcHJlZmV0Y2ggd2l0aG91dCBj aGFuZ2luZyB0aGVtLgogCQkJICogVGhpcyBwcmVzZXJ2ZXMgYW55IHByaW9y IEJJT1Mgc2V0dXAuCiAJCQkgKi8KLQkJCXJldHJpZXZlX2RyaXZlX2NvdW50 cyAoaW5kZXgpOwotCQkJY2hlY2tfcHJlZmV0Y2ggKGluZGV4KTsKKwkJCXJl dHJpZXZlX2RyaXZlX2NvdW50cyAoJmh3aWYtPmRyaXZlc1tpXSk7CisJCQlj aGVja19wcmVmZXRjaCAoJmh3aWYtPmRyaXZlc1tpXSk7CiAJCQlwcmludGso ImNtZDY0MDogZHJpdmUlZCB0aW1pbmdzL3ByZWZldGNoKCVzKSBwcmVzZXJ2 ZWQiLAotCQkJCWluZGV4LCBkcml2ZS0+bm9faW9fMzJiaXQgPyAib2ZmIiA6 ICJvbiIpOwotCQkJZGlzcGxheV9jbG9ja3MoaW5kZXgpOworCQkJICAgICAy ICogaHdpZi0+Y2hhbm5lbCArIGksCisJCQkgICAgIGh3aWYtPmRyaXZlc1tp XS5ub19pb18zMmJpdCA/ICJvZmYiIDogIm9uIik7CisJCQlkaXNwbGF5X2Ns b2NrcyAoJmh3aWYtPmRyaXZlc1tpXSk7CiAJCX0KLSNlbHNlCi0JCS8qCi0J CSAqIFNldCB0aGUgZHJpdmUgdW5tYXNrIGZsYWdzIHRvIG1hdGNoIHRoZSBw cmVmZXRjaCBzZXR0aW5nCi0JCSAqLwotCQljaGVja19wcmVmZXRjaCAoaW5k ZXgpOwotCQlwcmludGsoImNtZDY0MDogZHJpdmUlZCB0aW1pbmdzL3ByZWZl dGNoKCVzKSBwcmVzZXJ2ZWRcbiIsCi0JCQlpbmRleCwgZHJpdmUtPm5vX2lv XzMyYml0ID8gIm9mZiIgOiAib24iKTsKLSNlbmRpZiAvKiBDT05GSUdfQkxL X0RFVl9DTUQ2NDBfRU5IQU5DRUQgKi8KIAl9CiAKICNpZmRlZiBDTUQ2NDBf RFVNUF9SRUdTCiAJQ01ENjQwX0RVTVBfUkVHUzsKICNlbmRpZgotCXJldHVy bjsKLX0KLQotc3RhdGljIGludCBfX2luaXQgY21kNjQwX2luaXQodm9pZCkK LXsKLQlpZGVfcmVnaXN0ZXJfZHJpdmVyKGlkZV9wcm9iZV9mb3JfY21kNjQw eCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKglDYWxsZWQgYnkgdGhlIElE RSBjb3JlIHdoZW4gY29tcGlsZWQgaW4gYW5kIGNtZDY0MD12bGIgaXMKICAq CXNlbGVjdGVkLgogICovCi12b2lkIGluaXRfY21kNjQwX3ZsYih2b2lkKQor dm9pZCBfX2luaXQgaW5pdF9jbWQ2NDBfdmxiICh2b2lkKQogewogCWNtZDY0 MF92bGIgPSAxOwogfQogCi1tb2R1bGVfaW5pdChjbWQ2NDBfaW5pdCk7Citl eHRlcm4gdm9pZCBpZGVfc2V0dXBfcGNpX2RldmljZSAoc3RydWN0IHBjaV9k ZXYgKiwgaWRlX3BjaV9kZXZpY2VfdCAqKTsKKworc3RhdGljIGludCBfX2Rl dmluaXQKK2NtZDY0MF9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKmRldiwg Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWlkZV9wY2lf ZGV2aWNlX3QgKmQgPSAmY21kNjQwX2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0 YV07CisJaWYgKGRldi0+ZGV2aWNlICE9IGQtPmRldmljZSkKKwkJQlVHICgp OworCWlkZV9zZXR1cF9wY2lfZGV2aWNlIChkZXYsIGQpOworCU1PRF9JTkNf VVNFX0NPVU5UOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBj aV9kZXZpY2VfaWQgY21kNjQwX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0g eworCXtQQ0lfVkVORE9SX0lEX0NNRCwgUENJX0RFVklDRV9JRF9DTURfNjQw LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCSAwfSwKKwl7MCx9 LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsK KwkubmFtZSA9ICJDTUQ2NDAgSURFIiwKKwkuaWRfdGFibGUgPSBjbWQ2NDBf cGNpX3RibCwKKwkucHJvYmUgPSBjbWQ2NDBfaW5pdF9vbmUsCit9OwogCi1N T0RVTEVfQVVUSE9SKCJTZWUgU291cmNlIik7CitzdGF0aWMgaW50IF9faW5p dAorY21kNjQwX2lkZV9pbml0ICh2b2lkKQoreworCXJldHVybiBpZGVfcGNp X3JlZ2lzdGVyX2RyaXZlciAoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lk IF9fZXhpdAorY21kNjQwX2lkZV9leGl0ICh2b2lkKQoreworCWlkZV9wY2lf dW5yZWdpc3Rlcl9kcml2ZXIgKCZkcml2ZXIpOworfQorCittb2R1bGVfaW5p dCAoY21kNjQwX2lkZV9pbml0KTsKK21vZHVsZV9leGl0IChjbWQ2NDBfaWRl X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJJZ29yIEFicmFtb3YsIE1hcmsg TG9yZCwgU3RlZmFuIFRhbHBhbGFydSIpOwogTU9EVUxFX0RFU0NSSVBUSU9O KCJJREUgc3VwcG9ydCBmb3IgQ01ENjQwIGNvbnRyb2xsZXIiKTsKIE1PRFVM RV9QQVJNKGNtZDY0MF92bGIsICJpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNt ZDY0MF92bGIsICJTZXQgdG8gZW5hYmxlIHNjYW5uaW5nIGZvciBWTEIgY29u dHJvbGxlcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworRVhQT1JU X05PX1NZTUJPTFM7CmRpZmYgLXVyTiBsaW51eC0yLjQuMjIvZHJpdmVycy9p ZGUvcGNpL2NtZDY0MC5oIGxpbnV4LTIuNC4yMi1uZXcvZHJpdmVycy9pZGUv cGNpL2NtZDY0MC5oCi0tLSBsaW51eC0yLjQuMjIvZHJpdmVycy9pZGUvcGNp L2NtZDY0MC5oCTIwMDMtMDktMTAgMTc6MTg6MjIuMDAwMDAwMDAwICswMDAw CisrKyBsaW51eC0yLjQuMjItbmV3L2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAu aAkyMDAzLTEwLTI3IDIzOjI0OjEzLjAwMDAwMDAwMCArMDAwMApAQCAtNSw5 ICs1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxs aW51eC9pZGUuaD4KIAotI2RlZmluZSBJREVfSUdOT1JFICAgICAgKCh2b2lk ICopLTEpCitzdGF0aWMgdm9pZCBpbml0X2h3aWZfY21kNjQwIChpZGVfaHdp Zl90ICopOwogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBjbWQ2NDBfY2hp cHNldHNbXSBfX2luaXRkYXRhID0geworc3RhdGljIGlkZV9wY2lfZGV2aWNl X3QgY21kNjQwX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJ CS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9DTUQsCiAJCS5kZXZpY2UJCT0g UENJX0RFVklDRV9JRF9DTURfNjQwLApAQCAtMTUsNyArMTUsNyBAQAogCQku aW5pdF9zZXR1cAk9IE5VTEwsCiAJCS5pbml0X2NoaXBzZXQJPSBOVUxMLAog CQkuaW5pdF9pb3BzCT0gTlVMTCwKLQkJLmluaXRfaHdpZgk9IElERV9JR05P UkUsCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfY21kNjQwLAogCQkuaW5p dF9kbWEJPSBOVUxMLAogCQkuY2hhbm5lbHMJPSAyLAogCQkuYXV0b2RtYQk9 IE5PRE1BLApAQCAtMjUsOCArMjUsOSBAQAogCX0sewogCQkudmVuZG9yCQk9 IDAsCiAJCS5kZXZpY2UJCT0gMCwKKwkJLmNoYW5uZWxzIAk9IDAsCiAJCS5i b290YWJsZQk9IEVPTCwKIAl9Ci19Cit9OwogCiAjZW5kaWYgLyogQ01ENjQw X0ggKi8K --0-1222084409-1067429538=:56457--