Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757869AbXFZMk1 (ORCPT ); Tue, 26 Jun 2007 08:40:27 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754276AbXFZMkL (ORCPT ); Tue, 26 Jun 2007 08:40:11 -0400 Received: from wa-out-1112.google.com ([209.85.146.183]:42497 "EHLO wa-out-1112.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755074AbXFZMkH (ORCPT ); Tue, 26 Jun 2007 08:40:07 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:mime-version:content-type; b=ukjJo5o6evhsfEP33hkkFhLsnGaaul2YUAWGTqTo9RDNNQGBhgVPSAcvmfA9NgAFyFSIIQw7tV4JTxGZAVzdBqlrZvrcaMsyqdl2RDuf7C1S+k4lHACnOShX30h0j8zIaZa7yizin1EBOhcgQ57XPVZY5YoQEC/CnvdlWUxzxjg= Message-ID: <5d5443650706260540t500d057cjc19cd77103601c67@mail.gmail.com> Date: Tue, 26 Jun 2007 18:10:06 +0530 From: "Trilok Soni" To: linux-fbdev-devel@lists.sourceforge.net, adaplas@gmail.com, akpm@linux-foundation.org Subject: [PATCH 07/17] OMAP: Add external Epson HWA742 LCD controller support Cc: "Tony Lindgren" , imre.deak@solidboot.com, juha.yrjola@solidboot.com, linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_17376_5349026.1182861606658" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 42736 Lines: 567 ------=_Part_17376_5349026.1182861606658 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline -- --Trilok Soni ------=_Part_17376_5349026.1182861606658 Content-Type: text/x-patch; name=0007-OMAP-Add-external-Epson-HWA742-LCD-controller-support.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f3ed8r6n Content-Disposition: attachment; filename="0007-OMAP-Add-external-Epson-HWA742-LCD-controller-support.patch" RnJvbSA4NjhmZmJlNjg2ZThkY2U5ZjAxN2I0YThkYTE3ZjUyODg4ZmJhNjJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJlIERlYWsgPGltcmUuZGVha0Bzb2xpZGJvb3QuY29tPgpE YXRlOiBTYXQsIDI2IE1heSAyMDA3IDE5OjE5OjE5ICswNTMwClN1YmplY3Q6IFtQQVRDSCAwNy8x N10gT01BUDogQWRkIGV4dGVybmFsIEVwc29uIEhXQTc0MiBMQ0QgY29udHJvbGxlciBzdXBwb3J0 CgotIEFkZHMgRXBzb24gSFdBNzQyIGxjZCBjb250cm9sbGVyIGRyaXZlcjsgdXNlZCBpbgogIE5v a2lhIEludGVybmV0IFRhYmxldCBwcm9kdWN0cy4KClNpZ25lZC1vZmYtYnk6IFRyaWxvayBTb25p IDxzb25pLnRyaWxva0BnbWFpbC5jb20+Ci0tLQogZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcg IHwgICAgNyArCiBkcml2ZXJzL3ZpZGVvL29tYXAvTWFrZWZpbGUgfCAgICAyICsKIGRyaXZlcnMv dmlkZW8vb21hcC9od2E3NDIuYyB8IDEwNzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMDg2IGluc2VydGlvbnMoKyksIDAgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5j CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVv L29tYXAvS2NvbmZpZwppbmRleCAxNzYwN2U5Li4zZDM2ZTYyIDEwMDY0NAotLS0gYS9kcml2ZXJz L3ZpZGVvL29tYXAvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZwpAQCAt NDMsMyArNDMsMTAgQEAgY29uZmlnIEZCX09NQVBfTENEQ19FWFRFUk5BTAogCSAgU2F5IFkgaGVy ZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0IGZvciBib2FyZHMgd2l0aCBhbgogCSAgZXh0 ZXJuYWwgTENEIGNvbnRyb2xsZXIgY29ubmVjdGVkIHRvIHRoZSBTb1NTSS9SRkJJIGludGVyZmFj ZS4KIAorY29uZmlnIEZCX09NQVBfTENEQ19IV0E3NDIKKwlib29sICJFcHNvbiBIV0E3NDIgTENE IGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX09NQVAgJiYgRkJfT01BUF9MQ0RD X0VYVEVSTkFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBv cnQgZm9yIHRoZSBleHRlcm5hbAorCSAgRXBzb24gSFdBNzQyIExDRCBjb250cm9sbGVyLgorCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL29t YXAvTWFrZWZpbGUKaW5kZXggMWU4ZGQzMS4uZDFjYzQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92 aWRlby9vbWFwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9NYWtlZmlsZQpAQCAt MTIsNSArMTIsNyBAQCBvYmpzLXkkKENPTkZJR19BUkNIX09NQVAyKSArPSBkaXNwYy5vCiBvYmpz LSQoQ09ORklHX0FSQ0hfT01BUDEpJChDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMKSArPSBz b3NzaS5vCiBvYmpzLSQoQ09ORklHX0FSQ0hfT01BUDIpJChDT05GSUdfRkJfT01BUF9MQ0RDX0VY VEVSTkFMKSArPSByZmJpLm8KIAorb2Jqcy15JChDT05GSUdfRkJfT01BUF9MQ0RDX0hXQTc0Mikg Kz0gaHdhNzQyLm8KKwogb21hcGZiLW9ianMgOj0gJChvYmpzLXl5KQogCmRpZmYgLS1naXQgYS9k cml2ZXJzL3ZpZGVvL29tYXAvaHdhNzQyLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvaHdhNzQyLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0OGUwMgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYwpAQCAtMCwwICsxLDEwNzcgQEAKKy8q CisgKiBFcHNvbiBIV0E3NDIgTENEIGNvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDA0LTIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcnM6ICAgICBKdWhhIFly asO2bMOkICAgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqCSAgICAgICAgSW1yZSBEZWFrICAg ICA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqIFlVViBzdXBwb3J0OiBKdXNzaSBMYWFrbyAgIDxq dXNzaS5sYWFrb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjEx MS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgor I2luY2x1ZGUgPGFzbS9hcmNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2h3YTc0Mi5o PgorCisjZGVmaW5lIEhXQTc0Ml9SRVZfQ09ERV9SRUcgICAgICAgMHgwCisjZGVmaW5lIEhXQTc0 Ml9DT05GSUdfUkVHICAgICAgICAgMHgyCisjZGVmaW5lIEhXQTc0Ml9QTExfRElWX1JFRyAgICAg ICAgMHg0CisjZGVmaW5lIEhXQTc0Ml9QTExfMF9SRUcgICAgICAgICAgMHg2CisjZGVmaW5lIEhX QTc0Ml9QTExfMV9SRUcgICAgICAgICAgMHg4CisjZGVmaW5lIEhXQTc0Ml9QTExfMl9SRUcgICAg ICAgICAgMHhhCisjZGVmaW5lIEhXQTc0Ml9QTExfM19SRUcgICAgICAgICAgMHhjCisjZGVmaW5l IEhXQTc0Ml9QTExfNF9SRUcgICAgICAgICAgMHhlCisjZGVmaW5lIEhXQTc0Ml9DTEtfU1JDX1JF RyAgICAgICAgMHgxMgorI2RlZmluZSBIV0E3NDJfUEFORUxfVFlQRV9SRUcgICAgIDB4MTQKKyNk ZWZpbmUgSFdBNzQyX0hfRElTUF9SRUcgICAgICAgICAweDE2CisjZGVmaW5lIEhXQTc0Ml9IX05E UF9SRUcgICAgICAgICAgMHgxOAorI2RlZmluZSBIV0E3NDJfVl9ESVNQXzFfUkVHICAgICAgIDB4 MWEKKyNkZWZpbmUgSFdBNzQyX1ZfRElTUF8yX1JFRyAgICAgICAweDFjCisjZGVmaW5lIEhXQTc0 Ml9WX05EUF9SRUcgICAgICAgICAgMHgxZQorI2RlZmluZSBIV0E3NDJfSFNfV19SRUcgICAgICAg ICAgIDB4MjAKKyNkZWZpbmUgSFdBNzQyX0hQX1NfUkVHICAgICAgICAgICAweDIyCisjZGVmaW5l IEhXQTc0Ml9WU19XX1JFRyAgICAgICAgICAgMHgyNAorI2RlZmluZSBIV0E3NDJfVlBfU19SRUcg ICAgICAgICAgIDB4MjYKKyNkZWZpbmUgSFdBNzQyX1BDTEtfUE9MX1JFRyAgICAgICAweDI4Cisj ZGVmaW5lIEhXQTc0Ml9JTlBVVF9NT0RFX1JFRyAgICAgMHgyYQorI2RlZmluZSBIV0E3NDJfVFJB TlNMX01PREVfUkVHMSAgIDB4MmUKKyNkZWZpbmUgSFdBNzQyX0RJU1BfTU9ERV9SRUcgICAgICAw eDM0CisjZGVmaW5lIEhXQTc0Ml9XSU5ET1dfVFlQRSAgICAgICAgMHgzNgorI2RlZmluZSBIV0E3 NDJfV0lORE9XX1hfU1RBUlRfMCAgIDB4MzgKKyNkZWZpbmUgSFdBNzQyX1dJTkRPV19YX1NUQVJU XzEgICAweDNhCisjZGVmaW5lIEhXQTc0Ml9XSU5ET1dfWV9TVEFSVF8wICAgMHgzYworI2RlZmlu ZSBIV0E3NDJfV0lORE9XX1lfU1RBUlRfMSAgIDB4M2UKKyNkZWZpbmUgSFdBNzQyX1dJTkRPV19Y X0VORF8wICAgICAweDQwCisjZGVmaW5lIEhXQTc0Ml9XSU5ET1dfWF9FTkRfMSAgICAgMHg0Mgor I2RlZmluZSBIV0E3NDJfV0lORE9XX1lfRU5EXzAgICAgIDB4NDQKKyNkZWZpbmUgSFdBNzQyX1dJ TkRPV19ZX0VORF8xICAgICAweDQ2CisjZGVmaW5lIEhXQTc0Ml9NRU1PUllfV1JJVEVfTFNCICAg MHg0OAorI2RlZmluZSBIV0E3NDJfTUVNT1JZX1dSSVRFX01TQiAgIDB4NDkKKyNkZWZpbmUgSFdB NzQyX01FTU9SWV9SRUFEXzAgICAgICAweDRhCisjZGVmaW5lIEhXQTc0Ml9NRU1PUllfUkVBRF8x ICAgICAgMHg0YworI2RlZmluZSBIV0E3NDJfTUVNT1JZX1JFQURfMiAgICAgIDB4NGUKKyNkZWZp bmUgSFdBNzQyX1BPV0VSX1NBVkUgICAgICAgICAweDU2CisjZGVmaW5lIEhXQTc0Ml9ORFBfQ1RS TCAgICAgICAgICAgMHg1OAorCisjZGVmaW5lIEhXQTc0Ml9BVVRPX1VQREFURV9USU1FCQkoSFog LyAyMCkKKworLyogUmVzZXJ2ZSA0IHJlcXVlc3Qgc2xvdHMgZm9yIHJlcXVlc3RzIGluIGlycSBj b250ZXh0ICovCisjZGVmaW5lIFJFUV9QT09MX1NJWkUJCQkyNAorI2RlZmluZSBJUlFfUkVRX1BP T0xfU0laRQkJNAorCisjZGVmaW5lIFJFUV9GUk9NX0lSUV9QT09MIDB4MDEKKworI2RlZmluZSBS RVFfQ09NUExFVEUJMAorI2RlZmluZSBSRVFfUEVORElORwkxCisKK3N0cnVjdCB1cGRhdGVfcGFy YW0geworCWludAl4LCB5LCB3aWR0aCwgaGVpZ2h0OworCWludAljb2xvcl9tb2RlOworCWludAlm bGFnczsKK307CisKK3N0cnVjdCBod2E3NDJfcmVxdWVzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBl bnRyeTsKKwl1bnNpZ25lZCBpbnQJIGZsYWdzOworCisJaW50CQkgKCpoYW5kbGVyKShzdHJ1Y3Qg aHdhNzQyX3JlcXVlc3QgKnJlcSk7CisJdm9pZAkJICgqY29tcGxldGUpKHZvaWQgKmRhdGEpOwor CXZvaWQJCSAqY29tcGxldGVfZGF0YTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHVwZGF0ZV9wYXJh bQl1cGRhdGU7CisJCXN0cnVjdCBjb21wbGV0aW9uCSpzeW5jOworCX0gcGFyOworfTsKKworc3Ry dWN0IHsKKwllbnVtIG9tYXBmYl91cGRhdGVfbW9kZQl1cGRhdGVfbW9kZTsKKwllbnVtIG9tYXBm Yl91cGRhdGVfbW9kZQl1cGRhdGVfbW9kZV9iZWZvcmVfc3VzcGVuZDsKKworCXN0cnVjdCB0aW1l cl9saXN0CWF1dG9fdXBkYXRlX3RpbWVyOworCWludAkJCXN0b3BfYXV0b191cGRhdGU7CisJc3Ry dWN0IG9tYXBmYl91cGRhdGVfd2luZG93CWF1dG9fdXBkYXRlX3dpbmRvdzsKKwl1bnNpZ25lZAkJ dGVfY29ubmVjdGVkOjE7CisJdW5zaWduZWQJCXZzeW5jX29ubHk6MTsKKworCXN0cnVjdCBod2E3 NDJfcmVxdWVzdAlyZXFfcG9vbFtSRVFfUE9PTF9TSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBl bmRpbmdfcmVxX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlmcmVlX3JlcV9saXN0OworCXN0cnVj dCBzZW1hcGhvcmUJcmVxX3NlbWE7CisJc3BpbmxvY2tfdAkJcmVxX2xvY2s7CisKKwlzdHJ1Y3Qg ZXh0aWZfdGltaW5ncwlyZWdfdGltaW5ncywgbHV0X3RpbWluZ3M7CisKKwlpbnQJCQlwcmV2X2Nv bG9yX21vZGU7CisJaW50CQkJcHJldl9mbGFnczsKKwlpbnQJCQl3aW5kb3dfdHlwZTsKKworCXUz MgkJCW1heF90cmFuc21pdF9zaXplOworCXUzMgkJCWV4dGlmX2Nsa19wZXJpb2Q7CisJdW5zaWdu ZWQgbG9uZwkJcGl4X3R4X3RpbWU7CisJdW5zaWduZWQgbG9uZwkJbGluZV91cGRfdGltZTsKKwor CisJc3RydWN0IG9tYXBmYl9kZXZpY2UJKmZiZGV2OworCXN0cnVjdCBsY2RfY3RybF9leHRpZgkq ZXh0aWY7CisJc3RydWN0IGxjZF9jdHJsCQkqaW50X2N0cmw7CisKKwl2b2lkCQkJKCpwb3dlcl91 cCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwl2b2lkCQkJKCpwb3dlcl9kb3duKShzdHJ1Y3QgZGV2 aWNlICpkZXYpOworfSBod2E3NDI7CisKK3N0cnVjdCBsY2RfY3RybCBod2E3NDJfY3RybDsKKwor c3RhdGljIHU4IGh3YTc0Ml9yZWFkX3JlZyh1OCByZWcpCit7CisJdTggZGF0YTsKKworCWh3YTc0 Mi5leHRpZi0+c2V0X2JpdHNfcGVyX2N5Y2xlKDgpOworCWh3YTc0Mi5leHRpZi0+d3JpdGVfY29t bWFuZCgmcmVnLCAxKTsKKwlod2E3NDIuZXh0aWYtPnJlYWRfZGF0YSgmZGF0YSwgMSk7CisKKwly ZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgaHdhNzQyX3dyaXRlX3JlZyh1OCByZWcsIHU4 IGRhdGEpCit7CisJaHdhNzQyLmV4dGlmLT5zZXRfYml0c19wZXJfY3ljbGUoOCk7CisJaHdhNzQy LmV4dGlmLT53cml0ZV9jb21tYW5kKCZyZWcsIDEpOworCWh3YTc0Mi5leHRpZi0+d3JpdGVfZGF0 YSgmZGF0YSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF93aW5kb3dfcmVncyhpbnQgeF9zdGFy dCwgaW50IHlfc3RhcnQsIGludCB4X2VuZCwgaW50IHlfZW5kKQoreworCXU4IHRtcFs4XTsKKwl1 OCBjbWQ7CisKKwl4X2VuZC0tOworCXlfZW5kLS07CisJdG1wWzBdID0geF9zdGFydDsKKwl0bXBb MV0gPSB4X3N0YXJ0ID4+IDg7CisJdG1wWzJdID0geV9zdGFydDsKKwl0bXBbM10gPSB5X3N0YXJ0 ID4+IDg7CisJdG1wWzRdID0geF9lbmQ7CisJdG1wWzVdID0geF9lbmQgPj4gODsKKwl0bXBbNl0g PSB5X2VuZDsKKwl0bXBbN10gPSB5X2VuZCA+PiA4OworCisJaHdhNzQyLmV4dGlmLT5zZXRfYml0 c19wZXJfY3ljbGUoOCk7CisJY21kID0gSFdBNzQyX1dJTkRPV19YX1NUQVJUXzA7CisKKwlod2E3 NDIuZXh0aWYtPndyaXRlX2NvbW1hbmQoJmNtZCwgMSk7CisKKwlod2E3NDIuZXh0aWYtPndyaXRl X2RhdGEodG1wLCA4KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2Zvcm1hdF9yZWdzKGludCBjb252 LCBpbnQgdHJhbnNsLCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgT01BUEZCX0ZPUk1BVF9G TEFHX0RPVUJMRSkgeworCQlod2E3NDIud2luZG93X3R5cGUgPSAoKGh3YTc0Mi53aW5kb3dfdHlw ZSAmIDB4ZmMpIHwgMHgwMSk7CisjaWZkZWYgVkVSQk9TRQorCQlkZXZfZGJnKGh3YTc0Mi5mYmRl di0+ZGV2LCAiaHdhNzQyOiBlbmFibGVkIHBpeGVsIGRvdWJsaW5nXG4iKTsKKyNlbmRpZgorCX0g ZWxzZSB7CisJCWh3YTc0Mi53aW5kb3dfdHlwZSA9IChod2E3NDIud2luZG93X3R5cGUgJiAweGZj KTsKKyNpZmRlZiBWRVJCT1NFCisJCWRldl9kYmcoaHdhNzQyLmZiZGV2LT5kZXYsICJod2E3NDI6 IGRpc2FibGVkIHBpeGVsIGRvdWJsaW5nXG4iKTsKKyNlbmRpZgorCX0KKworCWh3YTc0Ml93cml0 ZV9yZWcoSFdBNzQyX0lOUFVUX01PREVfUkVHLCBjb252KTsKKwlod2E3NDJfd3JpdGVfcmVnKEhX QTc0Ml9UUkFOU0xfTU9ERV9SRUcxLCB0cmFuc2wpOworCWh3YTc0Ml93cml0ZV9yZWcoSFdBNzQy X1dJTkRPV19UWVBFLCBod2E3NDIud2luZG93X3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBlbmFi bGVfdGVhcnN5bmMoaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHNjcmVlbl9oZWln aHQsCisJCQkgICAgaW50IGZvcmNlX3ZzeW5jKQoreworCXU4IGI7CisKKwliID0gaHdhNzQyX3Jl YWRfcmVnKEhXQTc0Ml9ORFBfQ1RSTCk7CisJYiB8PSAxIDw8IDI7CisJaHdhNzQyX3dyaXRlX3Jl ZyhIV0E3NDJfTkRQX0NUUkwsIGIpOworCisJaWYgKGxpa2VseShod2E3NDIudnN5bmNfb25seSB8 fCBmb3JjZV92c3luYykpIHsKKwkJaHdhNzQyLmV4dGlmLT5lbmFibGVfdGVhcnN5bmMoMSwgMCk7 CisJCXJldHVybjsKKwl9CisKKwlpZiAod2lkdGggKiBod2E3NDIucGl4X3R4X3RpbWUgPCBod2E3 NDIubGluZV91cGRfdGltZSkgeworCQlod2E3NDIuZXh0aWYtPmVuYWJsZV90ZWFyc3luYygxLCAw KTsKKwkJcmV0dXJuOworCX0KKworCWlmICgod2lkdGggKiBod2E3NDIucGl4X3R4X3RpbWUgLyAx MDAwKSAqIGhlaWdodCA8CisJICAgICh5ICsgaGVpZ2h0KSAqIChod2E3NDIubGluZV91cGRfdGlt ZSAvIDEwMDApKSB7CisJCWh3YTc0Mi5leHRpZi0+ZW5hYmxlX3RlYXJzeW5jKDEsIDApOworCQly ZXR1cm47CisJfQorCisJaHdhNzQyLmV4dGlmLT5lbmFibGVfdGVhcnN5bmMoMSwgeSArIDEpOwor fQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3RlYXJzeW5jKHZvaWQpCit7CisJdTggYjsKKworCWh3 YTc0Mi5leHRpZi0+ZW5hYmxlX3RlYXJzeW5jKDAsIDApOworCisJYiA9IGh3YTc0Ml9yZWFkX3Jl ZyhIV0E3NDJfTkRQX0NUUkwpOworCWIgJj0gfigxIDw8IDIpOworCWh3YTc0Ml93cml0ZV9yZWco SFdBNzQyX05EUF9DVFJMLCBiKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaHdhNzQyX3Jl cXVlc3QgKmFsbG9jX3JlcSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0 IGh3YTc0Ml9yZXF1ZXN0ICpyZXE7CisJaW50IHJlcV9mbGFncyA9IDA7CisKKwlpZiAoIWluX2lu dGVycnVwdCgpKQorCQlkb3duKCZod2E3NDIucmVxX3NlbWEpOworCWVsc2UKKwkJcmVxX2ZsYWdz ID0gUkVRX0ZST01fSVJRX1BPT0w7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHdhNzQyLnJlcV9s b2NrLCBmbGFncyk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmh3YTc0Mi5mcmVlX3JlcV9saXN0KSk7 CisJcmVxID0gbGlzdF9lbnRyeShod2E3NDIuZnJlZV9yZXFfbGlzdC5uZXh0LAorCQkJIHN0cnVj dCBod2E3NDJfcmVxdWVzdCwgZW50cnkpOworCWxpc3RfZGVsKCZyZXEtPmVudHJ5KTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZod2E3NDIucmVxX2xvY2ssIGZsYWdzKTsKKworCUlOSVRfTElT VF9IRUFEKCZyZXEtPmVudHJ5KTsKKwlyZXEtPmZsYWdzID0gcmVxX2ZsYWdzOworCisJcmV0dXJu IHJlcTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcmVxKHN0cnVjdCBod2E3NDJfcmVx dWVzdCAqcmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmaHdhNzQyLnJlcV9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2RlbCgmcmVxLT5lbnRyeSk7CisJ bGlzdF9hZGQoJnJlcS0+ZW50cnksICZod2E3NDIuZnJlZV9yZXFfbGlzdCk7CisJaWYgKCEocmVx LT5mbGFncyAmIFJFUV9GUk9NX0lSUV9QT09MKSkKKwkJdXAoJmh3YTc0Mi5yZXFfc2VtYSk7CisK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2E3NDIucmVxX2xvY2ssIGZsYWdzKTsKK30KKwor c3RhdGljIHZvaWQgcHJvY2Vzc19wZW5kaW5nX3JlcXVlc3RzKHZvaWQpCit7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZod2E3NDIucmVxX2xvY2ssIGZsYWdz KTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmaHdhNzQyLnBlbmRpbmdfcmVxX2xpc3QpKSB7CisJ CXN0cnVjdCBod2E3NDJfcmVxdWVzdCAqcmVxOworCQl2b2lkICgqY29tcGxldGUpKHZvaWQgKik7 CisJCXZvaWQgKmNvbXBsZXRlX2RhdGE7CisKKwkJcmVxID0gbGlzdF9lbnRyeShod2E3NDIucGVu ZGluZ19yZXFfbGlzdC5uZXh0LAorCQkJCSBzdHJ1Y3QgaHdhNzQyX3JlcXVlc3QsIGVudHJ5KTsK KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdhNzQyLnJlcV9sb2NrLCBmbGFncyk7CisKKwkJ aWYgKHJlcS0+aGFuZGxlcihyZXEpID09IFJFUV9QRU5ESU5HKQorCQkJcmV0dXJuOworCisJCWNv bXBsZXRlID0gcmVxLT5jb21wbGV0ZTsKKwkJY29tcGxldGVfZGF0YSA9IHJlcS0+Y29tcGxldGVf ZGF0YTsKKwkJZnJlZV9yZXEocmVxKTsKKworCQlpZiAoY29tcGxldGUpCisJCQljb21wbGV0ZShj b21wbGV0ZV9kYXRhKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdhNzQyLnJlcV9sb2NrLCBm bGFncyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdhNzQyLnJlcV9sb2NrLCBm bGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHN1Ym1pdF9yZXFfbGlzdChzdHJ1Y3QgbGlzdF9oZWFk ICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHByb2Nlc3MgPSAxOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJmh3YTc0Mi5yZXFfbG9jaywgZmxhZ3MpOworCWlmIChsaWtlbHko IWxpc3RfZW1wdHkoJmh3YTc0Mi5wZW5kaW5nX3JlcV9saXN0KSkpCisJCXByb2Nlc3MgPSAwOwor CWxpc3Rfc3BsaWNlX2luaXQoaGVhZCwgaHdhNzQyLnBlbmRpbmdfcmVxX2xpc3QucHJldik7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdhNzQyLnJlcV9sb2NrLCBmbGFncyk7CisKKwlpZiAo cHJvY2VzcykKKwkJcHJvY2Vzc19wZW5kaW5nX3JlcXVlc3RzKCk7Cit9CisKK3N0YXRpYyB2b2lk IHJlcXVlc3RfY29tcGxldGUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaHdhNzQyX3JlcXVlc3QJ KnJlcSA9IChzdHJ1Y3QgaHdhNzQyX3JlcXVlc3QgKilkYXRhOworCXZvaWQJCQkoKmNvbXBsZXRl KSh2b2lkICopOworCXZvaWQJCQkqY29tcGxldGVfZGF0YTsKKworCWNvbXBsZXRlID0gcmVxLT5j b21wbGV0ZTsKKwljb21wbGV0ZV9kYXRhID0gcmVxLT5jb21wbGV0ZV9kYXRhOworCisJZnJlZV9y ZXEocmVxKTsKKworCWlmIChjb21wbGV0ZSkKKwkJY29tcGxldGUoY29tcGxldGVfZGF0YSk7CisK Kwlwcm9jZXNzX3BlbmRpbmdfcmVxdWVzdHMoKTsKK30KKworc3RhdGljIGludCBzZW5kX2ZyYW1l X2hhbmRsZXIoc3RydWN0IGh3YTc0Ml9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHVwZGF0ZV9w YXJhbSAqcGFyID0gJnJlcS0+cGFyLnVwZGF0ZTsKKwlpbnQgeCA9IHBhci0+eDsKKwlpbnQgeSA9 IHBhci0+eTsKKwlpbnQgdyA9IHBhci0+d2lkdGg7CisJaW50IGggPSBwYXItPmhlaWdodDsKKwlp bnQgYnBwOworCWludCBjb252LCB0cmFuc2w7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJaW50 IGNvbG9yX21vZGUgPSBwYXItPmNvbG9yX21vZGU7CisJaW50IGZsYWdzID0gcGFyLT5mbGFnczsK KwlpbnQgc2NyX3dpZHRoID0gaHdhNzQyLmZiZGV2LT5wYW5lbC0+eF9yZXM7CisJaW50IHNjcl9o ZWlnaHQgPSBod2E3NDIuZmJkZXYtPnBhbmVsLT55X3JlczsKKworI2lmZGVmIFZFUkJPU0UKKwlk ZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2LCAieCAlZCB5ICVkIHcgJWQgaCAlZCBzY3Jfd2lkdGgg JWQgIgorCQkiY29sb3JfbW9kZSAlZCBmbGFncyAlZFxuIiwKKwkJeCwgeSwgdywgaCwgc2NyX3dp ZHRoLCBjb2xvcl9tb2RlLCBmbGFncyk7CisjZW5kaWYKKworCXN3aXRjaCAoY29sb3JfbW9kZSkg eworCWNhc2UgT01BUEZCX0NPTE9SX1lVVjQyMjoKKwkJYnBwID0gMTY7CisJCWNvbnYgPSAweDA4 OworCQl0cmFuc2wgPSAweDI1OworCQlicmVhazsKKwljYXNlIE9NQVBGQl9DT0xPUl9ZVVY0MjA6 CisJCWJwcCA9IDEyOworCQljb252ID0gMHgwOTsKKwkJdHJhbnNsID0gMHgyNTsKKwkJYnJlYWs7 CisJY2FzZSBPTUFQRkJfQ09MT1JfUkdCNTY1OgorCQlicHAgPSAxNjsKKwkJY29udiA9IDB4MDE7 CisJCXRyYW5zbCA9IDB4MDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCWlmIChod2E3NDIucHJldl9mbGFncyAhPSBmbGFncyB8fAorCSAgICBod2E3NDIu cHJldl9jb2xvcl9tb2RlICE9IGNvbG9yX21vZGUpIHsKKwkJc2V0X2Zvcm1hdF9yZWdzKGNvbnYs IHRyYW5zbCwgZmxhZ3MpOworCQlod2E3NDIucHJldl9jb2xvcl9tb2RlID0gY29sb3JfbW9kZTsK KwkJaHdhNzQyLnByZXZfZmxhZ3MgPSBmbGFnczsKKwl9CisJZmxhZ3MgPSByZXEtPnBhci51cGRh dGUuZmxhZ3M7CisJaWYgKGZsYWdzICYgT01BUEZCX0ZPUk1BVF9GTEFHX1RFQVJTWU5DKQorCQll bmFibGVfdGVhcnN5bmMoeSwgc2NyX3dpZHRoLCBoLCBzY3JfaGVpZ2h0LAorCQkJCWZsYWdzICYg T01BUEZCX0ZPUk1BVF9GTEFHX0ZPUkNFX1ZTWU5DKTsKKwllbHNlCisJCWRpc2FibGVfdGVhcnN5 bmMoKTsKKworCXNldF93aW5kb3dfcmVncyh4LCB5LCB4ICsgdywgeSArIGgpOworCisJb2Zmc2V0 ID0gKHNjcl93aWR0aCAqIHkgKyB4KSAqIGJwcCAvIDg7CisKKwlod2E3NDIuaW50X2N0cmwtPnNl dHVwX3BsYW5lKE9NQVBGQl9QTEFORV9HRlgsCisJCQlPTUFQRkJfQ0hBTk5FTF9PVVRfTENELCBv ZmZzZXQsIHNjcl93aWR0aCwgMCwgMCwgdywgaCwKKwkJCWNvbG9yX21vZGUpOworCisJaHdhNzQy LmV4dGlmLT5zZXRfYml0c19wZXJfY3ljbGUoMTYpOworCisJaHdhNzQyLmludF9jdHJsLT5lbmFi bGVfcGxhbmUoT01BUEZCX1BMQU5FX0dGWCwgMSk7CisJaHdhNzQyLmV4dGlmLT50cmFuc2Zlcl9h cmVhKHcsIGgsIHJlcXVlc3RfY29tcGxldGUsIHJlcSk7CisKKwlyZXR1cm4gUkVRX1BFTkRJTkc7 Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfZnJhbWVfY29tcGxldGUodm9pZCAqZGF0YSkKK3sKKwlo d2E3NDIuaW50X2N0cmwtPmVuYWJsZV9wbGFuZShPTUFQRkJfUExBTkVfR0ZYLCAwKTsKK30KKwor I2RlZmluZSBBRERfUFJFUShfeCwgX3ksIF93LCBfaCkgZG8gewkJXAorCXJlcSA9IGFsbG9jX3Jl cSgpOwkJCVwKKwlyZXEtPmhhbmRsZXIJPSBzZW5kX2ZyYW1lX2hhbmRsZXI7CVwKKwlyZXEtPmNv bXBsZXRlCT0gc2VuZF9mcmFtZV9jb21wbGV0ZTsJXAorCXJlcS0+cGFyLnVwZGF0ZS54ID0gX3g7 CQkJXAorCXJlcS0+cGFyLnVwZGF0ZS55ID0gX3k7CQkJXAorCXJlcS0+cGFyLnVwZGF0ZS53aWR0 aCAgPSBfdzsJCVwKKwlyZXEtPnBhci51cGRhdGUuaGVpZ2h0ID0gX2g7CQlcCisJcmVxLT5wYXIu dXBkYXRlLmNvbG9yX21vZGUgPSBjb2xvcl9tb2RlO1wKKwlyZXEtPnBhci51cGRhdGUuZmxhZ3MJ ICA9IGZsYWdzOwlcCisJbGlzdF9hZGRfdGFpbCgmcmVxLT5lbnRyeSwgcmVxX2hlYWQpOwlcCit9 IHdoaWxlKDApCisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9yZXFfbGlzdChzdHJ1Y3Qgb21hcGZiX3Vw ZGF0ZV93aW5kb3cgKndpbiwKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXFfaGVhZCkKK3sK KwlzdHJ1Y3QgaHdhNzQyX3JlcXVlc3QgKnJlcTsKKwlpbnQgeCA9IHdpbi0+eDsKKwlpbnQgeSA9 IHdpbi0+eTsKKwlpbnQgd2lkdGggPSB3aW4tPndpZHRoOworCWludCBoZWlnaHQgPSB3aW4tPmhl aWdodDsKKwlpbnQgY29sb3JfbW9kZTsKKwlpbnQgZmxhZ3M7CisKKwlmbGFncyA9IHdpbi0+Zm9y bWF0ICYgfk9NQVBGQl9GT1JNQVRfTUFTSzsKKwljb2xvcl9tb2RlID0gd2luLT5mb3JtYXQgJiBP TUFQRkJfRk9STUFUX01BU0s7CisKKwlpZiAoeCAmIDEpIHsKKwkJQUREX1BSRVEoeCwgeSwgMSwg aGVpZ2h0KTsKKwkJd2lkdGgtLTsKKwkJeCsrOworCQlmbGFncyAmPSB+T01BUEZCX0ZPUk1BVF9G TEFHX1RFQVJTWU5DOworCX0KKwlpZiAod2lkdGggJiB+MSkgeworCQl1bnNpZ25lZCBpbnQgeHNw YW4gPSB3aWR0aCAmIH4xOworCQl1bnNpZ25lZCBpbnQgeXN0YXJ0ID0geTsKKwkJdW5zaWduZWQg aW50IHlzcGFuID0gaGVpZ2h0OworCisJCWlmICh4c3BhbiAqIGhlaWdodCAqIDIgPiBod2E3NDIu bWF4X3RyYW5zbWl0X3NpemUpIHsKKwkJCXlzcGFuID0gaHdhNzQyLm1heF90cmFuc21pdF9zaXpl IC8gKHhzcGFuICogMik7CisJCQlBRERfUFJFUSh4LCB5c3RhcnQsIHhzcGFuLCB5c3Bhbik7CisJ CQl5c3RhcnQgKz0geXNwYW47CisJCQl5c3BhbiA9IGhlaWdodCAtIHlzcGFuOworCQkJZmxhZ3Mg Jj0gfk9NQVBGQl9GT1JNQVRfRkxBR19URUFSU1lOQzsKKwkJfQorCisJCUFERF9QUkVRKHgsIHlz dGFydCwgeHNwYW4sIHlzcGFuKTsKKwkJeCArPSB4c3BhbjsKKwkJd2lkdGggLT0geHNwYW47CisJ CWZsYWdzICY9IH5PTUFQRkJfRk9STUFUX0ZMQUdfVEVBUlNZTkM7CisJfQorCWlmICh3aWR0aCkK KwkJQUREX1BSRVEoeCwgeSwgMSwgaGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgYXV0b191cGRh dGVfY29tcGxldGUodm9pZCAqZGF0YSkKK3sKKwlpZiAoIWh3YTc0Mi5zdG9wX2F1dG9fdXBkYXRl KQorCQltb2RfdGltZXIoJmh3YTc0Mi5hdXRvX3VwZGF0ZV90aW1lciwKKwkJCSAgamlmZmllcyAr IEhXQTc0Ml9BVVRPX1VQREFURV9USU1FKTsKK30KKworc3RhdGljIHZvaWQgaHdhNzQyX3VwZGF0 ZV93aW5kb3dfYXV0byh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlMSVNUX0hFQUQocmVxX2xpc3Qp OworCXN0cnVjdCBod2E3NDJfcmVxdWVzdCAqbGFzdDsKKworCWNyZWF0ZV9yZXFfbGlzdCgmaHdh NzQyLmF1dG9fdXBkYXRlX3dpbmRvdywgJnJlcV9saXN0KTsKKwlsYXN0ID0gbGlzdF9lbnRyeShy ZXFfbGlzdC5wcmV2LCBzdHJ1Y3QgaHdhNzQyX3JlcXVlc3QsIGVudHJ5KTsKKworCWxhc3QtPmNv bXBsZXRlID0gYXV0b191cGRhdGVfY29tcGxldGU7CisJbGFzdC0+Y29tcGxldGVfZGF0YSA9IE5V TEw7CisKKwlzdWJtaXRfcmVxX2xpc3QoJnJlcV9saXN0KTsKK30KKworaW50IGh3YTc0Ml91cGRh dGVfd2luZG93X2FzeW5jKHN0cnVjdCBmYl9pbmZvICpmYmksCisJCQkJIHN0cnVjdCBvbWFwZmJf dXBkYXRlX3dpbmRvdyAqd2luLAorCQkJCSB2b2lkICgqY29tcGxldGVfY2FsbGJhY2spKHZvaWQg KmFyZyksCisJCQkJIHZvaWQgKmNvbXBsZXRlX2NhbGxiYWNrX2RhdGEpCit7CisJTElTVF9IRUFE KHJlcV9saXN0KTsKKwlzdHJ1Y3QgaHdhNzQyX3JlcXVlc3QgKmxhc3Q7CisJaW50IHIgPSAwOwor CisJaWYgKGh3YTc0Mi51cGRhdGVfbW9kZSAhPSBPTUFQRkJfTUFOVUFMX1VQREFURSkgeworCQlk ZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2LCAiaW52YWxpZCB1cGRhdGUgbW9kZVxuIik7CisJCXIg PSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHVubGlrZWx5KHdpbi0+Zm9ybWF0ICYK KwkgICAgfigweDAzIHwgT01BUEZCX0ZPUk1BVF9GTEFHX0RPVUJMRSB8CisJICAgIE9NQVBGQl9G T1JNQVRfRkxBR19URUFSU1lOQyB8IE9NQVBGQl9GT1JNQVRfRkxBR19GT1JDRV9WU1lOQykpKSB7 CisJCWRldl9kYmcoaHdhNzQyLmZiZGV2LT5kZXYsICJpbnZhbGlkIHdpbmRvdyBmbGFnIik7CisJ CXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVhdGVfcmVxX2xpc3Qod2luLCAm cmVxX2xpc3QpOworCWxhc3QgPSBsaXN0X2VudHJ5KHJlcV9saXN0LnByZXYsIHN0cnVjdCBod2E3 NDJfcmVxdWVzdCwgZW50cnkpOworCisJbGFzdC0+Y29tcGxldGUgPSBjb21wbGV0ZV9jYWxsYmFj azsKKwlsYXN0LT5jb21wbGV0ZV9kYXRhID0gKHZvaWQgKiljb21wbGV0ZV9jYWxsYmFja19kYXRh OworCisJc3VibWl0X3JlcV9saXN0KCZyZXFfbGlzdCk7CisKK291dDoKKwlyZXR1cm4gcjsKK30K K0VYUE9SVF9TWU1CT0woaHdhNzQyX3VwZGF0ZV93aW5kb3dfYXN5bmMpOworCitzdGF0aWMgaW50 IGh3YTc0Ml9zZXR1cF9wbGFuZShpbnQgcGxhbmUsIGludCBjaGFubmVsX291dCwKKwkJCQkgIHVu c2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgc2NyZWVuX3dpZHRoLAorCQkJCSAgaW50IHBvc194LCBp bnQgcG9zX3ksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKwkJCQkgIGludCBjb2xvcl9tb2RlKQor eworCWlmIChwbGFuZSAhPSBPTUFQRkJfUExBTkVfR0ZYIHx8CisJICAgIGNoYW5uZWxfb3V0ICE9 IE9NQVBGQl9DSEFOTkVMX09VVF9MQ0QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaHdhNzQyX2VuYWJsZV9wbGFuZShpbnQgcGxhbmUsIGludCBlbmFi bGUpCit7CisJaWYgKHBsYW5lICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaHdhNzQyLmlu dF9jdHJsLT5lbmFibGVfcGxhbmUocGxhbmUsIGVuYWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBzeW5jX2hhbmRsZXIoc3RydWN0IGh3YTc0Ml9yZXF1ZXN0ICpyZXEpCit7CisJ Y29tcGxldGUocmVxLT5wYXIuc3luYyk7CisJcmV0dXJuIFJFUV9DT01QTEVURTsKK30KKworc3Rh dGljIHZvaWQgaHdhNzQyX3N5bmModm9pZCkKK3sKKwlMSVNUX0hFQUQocmVxX2xpc3QpOworCXN0 cnVjdCBod2E3NDJfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CisKKwly ZXEgPSBhbGxvY19yZXEoKTsKKworCXJlcS0+aGFuZGxlciA9IHN5bmNfaGFuZGxlcjsKKwlyZXEt PmNvbXBsZXRlID0gTlVMTDsKKwlpbml0X2NvbXBsZXRpb24oJmNvbXApOworCXJlcS0+cGFyLnN5 bmMgPSAmY29tcDsKKworCWxpc3RfYWRkKCZyZXEtPmVudHJ5LCAmcmVxX2xpc3QpOworCXN1Ym1p dF9yZXFfbGlzdCgmcmVxX2xpc3QpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcCk7Cit9 CisKK3N0YXRpYyB2b2lkIGh3YTc0Ml9iaW5kX2NsaWVudChzdHJ1Y3Qgb21hcGZiX25vdGlmaWVy X2Jsb2NrICpuYikKK3sKKwlkZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2LCAidXBkYXRlX21vZGUg JWRcbiIsIGh3YTc0Mi51cGRhdGVfbW9kZSk7CisJaWYgKGh3YTc0Mi51cGRhdGVfbW9kZSA9PSBP TUFQRkJfTUFOVUFMX1VQREFURSkgeworCQlvbWFwZmJfbm90aWZ5X2NsaWVudHMoaHdhNzQyLmZi ZGV2LCBPTUFQRkJfRVZFTlRfUkVBRFkpOworCX0KK30KKworc3RhdGljIGludCBod2E3NDJfc2V0 X3VwZGF0ZV9tb2RlKGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlIG1vZGUpCit7CisJaWYgKG1vZGUg IT0gT01BUEZCX01BTlVBTF9VUERBVEUgJiYgbW9kZSAhPSBPTUFQRkJfQVVUT19VUERBVEUgJiYK KwkgICAgbW9kZSAhPSBPTUFQRkJfVVBEQVRFX0RJU0FCTEVEKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWlmIChtb2RlID09IGh3YTc0Mi51cGRhdGVfbW9kZSkKKwkJcmV0dXJuIDA7CisKKwlkZXZf aW5mbyhod2E3NDIuZmJkZXYtPmRldiwgIkhXQTc0Mjogc2V0dGluZyB1cGRhdGUgbW9kZSB0byAl c1xuIiwKKwkJCW1vZGUgPT0gT01BUEZCX1VQREFURV9ESVNBQkxFRCA/ICJkaXNhYmxlZCIgOgor CQkJKG1vZGUgPT0gT01BUEZCX0FVVE9fVVBEQVRFID8gImF1dG8iIDogIm1hbnVhbCIpKTsKKwor CXN3aXRjaCAoaHdhNzQyLnVwZGF0ZV9tb2RlKSB7CisJY2FzZSBPTUFQRkJfTUFOVUFMX1VQREFU RToKKwkJb21hcGZiX25vdGlmeV9jbGllbnRzKGh3YTc0Mi5mYmRldiwgT01BUEZCX0VWRU5UX0RJ U0FCTEVEKTsKKwkJYnJlYWs7CisJY2FzZSBPTUFQRkJfQVVUT19VUERBVEU6CisJCWh3YTc0Mi5z dG9wX2F1dG9fdXBkYXRlID0gMTsKKwkJZGVsX3RpbWVyX3N5bmMoJmh3YTc0Mi5hdXRvX3VwZGF0 ZV90aW1lcik7CisJCWJyZWFrOworCWNhc2UgT01BUEZCX1VQREFURV9ESVNBQkxFRDoKKwkJYnJl YWs7CisJfQorCisJaHdhNzQyLnVwZGF0ZV9tb2RlID0gbW9kZTsKKwlod2E3NDJfc3luYygpOwor CWh3YTc0Mi5zdG9wX2F1dG9fdXBkYXRlID0gMDsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2Ug T01BUEZCX01BTlVBTF9VUERBVEU6CisJCW9tYXBmYl9ub3RpZnlfY2xpZW50cyhod2E3NDIuZmJk ZXYsIE9NQVBGQl9FVkVOVF9SRUFEWSk7CisJCWJyZWFrOworCWNhc2UgT01BUEZCX0FVVE9fVVBE QVRFOgorCQlod2E3NDJfdXBkYXRlX3dpbmRvd19hdXRvKDApOworCQlicmVhazsKKwljYXNlIE9N QVBGQl9VUERBVEVfRElTQUJMRUQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgaHdhNzQyX2dldF91cGRhdGVfbW9kZSh2b2lk KQoreworCXJldHVybiBod2E3NDIudXBkYXRlX21vZGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBs b25nIHJvdW5kX3RvX2V4dGlmX3RpY2tzKHVuc2lnbmVkIGxvbmcgcHMsIGludCBkaXYpCit7CisJ aW50IGJ1c190aWNrID0gaHdhNzQyLmV4dGlmX2Nsa19wZXJpb2QgKiBkaXY7CisJcmV0dXJuIChw cyArIGJ1c190aWNrIC0gMSkgLyBidXNfdGljayAqIGJ1c190aWNrOworfQorCitzdGF0aWMgaW50 IGNhbGNfcmVnX3RpbWluZyh1bnNpZ25lZCBsb25nIHN5c2NsaywgaW50IGRpdikKK3sKKwlzdHJ1 Y3QgZXh0aWZfdGltaW5ncyAqdDsKKwl1bnNpZ25lZCBsb25nIHN5c3RpbTsKKworCS8qIENTT25U aW1lIDAsIFdFT25UaW1lIDIgbnMsIFJFT25UaW1lIDIgbnMsCisJICogQWNjZXNzVGltZSAyIG5z ICsgMTIuMiBucyAocmVncyksCisJICogV0VPZmZUaW1lID0gV0VPblRpbWUgKyAxIG5zLAorCSAq IFJFT2ZmVGltZSA9IFJFT25UaW1lICsgMTYgbnMgKHJlZ3MpLAorCSAqIENTT2ZmVGltZSA9IFJF T2ZmVGltZSArIDEgbnMKKwkgKiBSZWFkQ3ljbGUgPSAybnMgKyAyKlNZU0NMSyAgKHJlZ3MpLAor CSAqIFdyaXRlQ3ljbGUgPSAyKlNZU0NMSyArIDIgbnMsCisJICogQ1NQdWxzZVdpZHRoID0gMTAg bnMgKi8KKwlzeXN0aW0gPSAxMDAwMDAwMDAwIC8gKHN5c2NsayAvIDEwMDApOworCWRldl9kYmco aHdhNzQyLmZiZGV2LT5kZXYsICJIV0E3NDIgc3lzdGltICVsdSBwcyBleHRpZl9jbGtfcGVyaW9k ICV1IHBzIgorCQkgICJleHRpZl9jbGtfZGl2ICVkXG4iLCBzeXN0aW0sIGh3YTc0Mi5leHRpZl9j bGtfcGVyaW9kLCBkaXYpOworCisJdCA9ICZod2E3NDIucmVnX3RpbWluZ3M7CisJbWVtc2V0KHQs IDAsIHNpemVvZigqdCkpOworCXQtPmNsa19kaXYgPSBkaXY7CisJdC0+Y3Nfb25fdGltZSA9IDA7 CisJdC0+d2Vfb25fdGltZSA9IHJvdW5kX3RvX2V4dGlmX3RpY2tzKHQtPmNzX29uX3RpbWUgKyAy MDAwLCBkaXYpOworCXQtPnJlX29uX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT5jc19v bl90aW1lICsgMjAwMCwgZGl2KTsKKwl0LT5hY2Nlc3NfdGltZSA9IHJvdW5kX3RvX2V4dGlmX3Rp Y2tzKHQtPnJlX29uX3RpbWUgKyAxMjIwMCwgZGl2KTsKKwl0LT53ZV9vZmZfdGltZSA9IHJvdW5k X3RvX2V4dGlmX3RpY2tzKHQtPndlX29uX3RpbWUgKyAxMDAwLCBkaXYpOworCXQtPnJlX29mZl90 aW1lID0gcm91bmRfdG9fZXh0aWZfdGlja3ModC0+cmVfb25fdGltZSArIDE2MDAwLCBkaXYpOwor CXQtPmNzX29mZl90aW1lID0gcm91bmRfdG9fZXh0aWZfdGlja3ModC0+cmVfb2ZmX3RpbWUgKyAx MDAwLCBkaXYpOworCXQtPndlX2N5Y2xlX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcygyICog c3lzdGltICsgMjAwMCwgZGl2KTsKKwlpZiAodC0+d2VfY3ljbGVfdGltZSA8IHQtPndlX29mZl90 aW1lKQorCQl0LT53ZV9jeWNsZV90aW1lID0gdC0+d2Vfb2ZmX3RpbWU7CisJdC0+cmVfY3ljbGVf dGltZSA9IHJvdW5kX3RvX2V4dGlmX3RpY2tzKDIgKiBzeXN0aW0gKyAyMDAwLCBkaXYpOworCWlm ICh0LT5yZV9jeWNsZV90aW1lIDwgdC0+cmVfb2ZmX3RpbWUpCisJCXQtPnJlX2N5Y2xlX3RpbWUg PSB0LT5yZV9vZmZfdGltZTsKKwl0LT5jc19wdWxzZV93aWR0aCA9IDA7CisKKwlkZXZfZGJnKGh3 YTc0Mi5mYmRldi0+ZGV2LCAiW3JlZ11jc29uICVkIGNzb2ZmICVkIHJlb24gJWQgcmVvZmYgJWRc biIsCisJCSB0LT5jc19vbl90aW1lLCB0LT5jc19vZmZfdGltZSwgdC0+cmVfb25fdGltZSwgdC0+ cmVfb2ZmX3RpbWUpOworCWRldl9kYmcoaHdhNzQyLmZiZGV2LT5kZXYsICJbcmVnXXdlb24gJWQg d2VvZmYgJWQgcmVjeWMgJWQgd2VjeWMgJWRcbiIsCisJCSB0LT53ZV9vbl90aW1lLCB0LT53ZV9v ZmZfdGltZSwgdC0+cmVfY3ljbGVfdGltZSwKKwkJIHQtPndlX2N5Y2xlX3RpbWUpOworCWRldl9k YmcoaHdhNzQyLmZiZGV2LT5kZXYsICJbcmVnXXJkYWNjZXNzICVkIGNzcHVsc2UgJWRcbiIsCisJ CSB0LT5hY2Nlc3NfdGltZSwgdC0+Y3NfcHVsc2Vfd2lkdGgpOworCisJcmV0dXJuIGh3YTc0Mi5l eHRpZi0+Y29udmVydF90aW1pbmdzKHQpOworfQorCitzdGF0aWMgaW50IGNhbGNfbHV0X3RpbWlu Zyh1bnNpZ25lZCBsb25nIHN5c2NsaywgaW50IGRpdikKK3sKKwlzdHJ1Y3QgZXh0aWZfdGltaW5n cyAqdDsKKwl1bnNpZ25lZCBsb25nIHN5c3RpbTsKKworCS8qIENTT25UaW1lIDAsIFdFT25UaW1l IDIgbnMsIFJFT25UaW1lIDIgbnMsCisJICogQWNjZXNzVGltZSAyIG5zICsgNCAqIFNZU0NMSyAr IDI2IChsdXQpLAorCSAqIFdFT2ZmVGltZSA9IFdFT25UaW1lICsgMSBucywKKwkgKiBSRU9mZlRp bWUgPSBSRU9uVGltZSArIDQqU1lTQ0xLICsgMjYgbnMgKGx1dCksCisJICogQ1NPZmZUaW1lID0g UkVPZmZUaW1lICsgMSBucworCSAqIFJlYWRDeWNsZSA9IDJucyArIDQqU1lTQ0xLICsgMjYgbnMg KGx1dCksCisJICogV3JpdGVDeWNsZSA9IDIqU1lTQ0xLICsgMiBucywKKwkgKiBDU1B1bHNlV2lk dGggPSAxMCBucworCSAqLworCXN5c3RpbSA9IDEwMDAwMDAwMDAgLyAoc3lzY2xrIC8gMTAwMCk7 CisJZGV2X2RiZyhod2E3NDIuZmJkZXYtPmRldiwgIkhXQTc0MiBzeXN0aW0gJWx1IHBzIGV4dGlm X2Nsa19wZXJpb2QgJXUgcHMiCisJCSAgImV4dGlmX2Nsa19kaXYgJWRcbiIsIHN5c3RpbSwgaHdh NzQyLmV4dGlmX2Nsa19wZXJpb2QsIGRpdik7CisKKwl0ID0gJmh3YTc0Mi5sdXRfdGltaW5nczsK KwltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisKKwl0LT5jbGtfZGl2ID0gZGl2OworCisJdC0+ Y3Nfb25fdGltZSA9IDA7CisJdC0+d2Vfb25fdGltZSA9IHJvdW5kX3RvX2V4dGlmX3RpY2tzKHQt PmNzX29uX3RpbWUgKyAyMDAwLCBkaXYpOworCXQtPnJlX29uX3RpbWUgPSByb3VuZF90b19leHRp Zl90aWNrcyh0LT5jc19vbl90aW1lICsgMjAwMCwgZGl2KTsKKwl0LT5hY2Nlc3NfdGltZSA9IHJv dW5kX3RvX2V4dGlmX3RpY2tzKHQtPnJlX29uX3RpbWUgKyA0ICogc3lzdGltICsKKwkJCQkJICAg ICAgMjYwMDAsIGRpdik7CisJdC0+d2Vfb2ZmX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0 LT53ZV9vbl90aW1lICsgMTAwMCwgZGl2KTsKKwl0LT5yZV9vZmZfdGltZSA9IHJvdW5kX3RvX2V4 dGlmX3RpY2tzKHQtPnJlX29uX3RpbWUgKyA0ICogc3lzdGltICsKKwkJCQkJICAgICAgMjYwMDAs IGRpdik7CisJdC0+Y3Nfb2ZmX3RpbWUgPSByb3VuZF90b19leHRpZl90aWNrcyh0LT5yZV9vZmZf dGltZSArIDEwMDAsIGRpdik7CisJdC0+d2VfY3ljbGVfdGltZSA9IHJvdW5kX3RvX2V4dGlmX3Rp Y2tzKDIgKiBzeXN0aW0gKyAyMDAwLCBkaXYpOworCWlmICh0LT53ZV9jeWNsZV90aW1lIDwgdC0+ d2Vfb2ZmX3RpbWUpCisJCXQtPndlX2N5Y2xlX3RpbWUgPSB0LT53ZV9vZmZfdGltZTsKKwl0LT5y ZV9jeWNsZV90aW1lID0gcm91bmRfdG9fZXh0aWZfdGlja3MoMjAwMCArIDQgKiBzeXN0aW0gKyAy NjAwMCwgZGl2KTsKKwlpZiAodC0+cmVfY3ljbGVfdGltZSA8IHQtPnJlX29mZl90aW1lKQorCQl0 LT5yZV9jeWNsZV90aW1lID0gdC0+cmVfb2ZmX3RpbWU7CisJdC0+Y3NfcHVsc2Vfd2lkdGggPSAw OworCisJZGV2X2RiZyhod2E3NDIuZmJkZXYtPmRldiwgIltsdXRdY3NvbiAlZCBjc29mZiAlZCBy ZW9uICVkIHJlb2ZmICVkXG4iLAorCQkgdC0+Y3Nfb25fdGltZSwgdC0+Y3Nfb2ZmX3RpbWUsIHQt PnJlX29uX3RpbWUsIHQtPnJlX29mZl90aW1lKTsKKwlkZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2 LCAiW2x1dF13ZW9uICVkIHdlb2ZmICVkIHJlY3ljICVkIHdlY3ljICVkXG4iLAorCQkgdC0+d2Vf b25fdGltZSwgdC0+d2Vfb2ZmX3RpbWUsIHQtPnJlX2N5Y2xlX3RpbWUsCisJCSB0LT53ZV9jeWNs ZV90aW1lKTsKKwlkZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2LCAiW2x1dF1yZGFjY2VzcyAlZCBj c3B1bHNlICVkXG4iLAorCQkgdC0+YWNjZXNzX3RpbWUsIHQtPmNzX3B1bHNlX3dpZHRoKTsKKwor CXJldHVybiBod2E3NDIuZXh0aWYtPmNvbnZlcnRfdGltaW5ncyh0KTsKK30KKworc3RhdGljIGlu dCBjYWxjX2V4dGlmX3RpbWluZ3ModW5zaWduZWQgbG9uZyBzeXNjbGssIGludCAqZXh0aWZfbWVt X2RpdikKK3sKKwlpbnQgbWF4X2Nsa19kaXY7CisJaW50IGRpdjsKKworCWh3YTc0Mi5leHRpZi0+ Z2V0X2Nsa19pbmZvKCZod2E3NDIuZXh0aWZfY2xrX3BlcmlvZCwgJm1heF9jbGtfZGl2KTsKKwlm b3IgKGRpdiA9IDE7IGRpdiA8IG1heF9jbGtfZGl2OyBkaXYrKykgeworCQlpZiAoY2FsY19yZWdf dGltaW5nKHN5c2NsaywgZGl2KSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChkaXYgPiBtYXhf Y2xrX2RpdikKKwkJZ290byBlcnI7CisKKwkqZXh0aWZfbWVtX2RpdiA9IGRpdjsKKworCWZvciAo ZGl2ID0gMTsgZGl2IDwgbWF4X2Nsa19kaXY7IGRpdisrKSB7CisJCWlmIChjYWxjX2x1dF90aW1p bmcoc3lzY2xrLCBkaXYpID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoZGl2ID4gbWF4X2Ns a19kaXYpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlkZXZfZXJyKGh3YTc0 Mi5mYmRldi0+ZGV2LCAiY2FuJ3Qgc2V0dXAgdGltaW5nc1xuIik7CisJcmV0dXJuIC0xOworfQor CitzdGF0aWMgdm9pZCBjYWxjX2h3YTc0Ml9jbGtfcmF0ZXModW5zaWduZWQgbG9uZyBleHRfY2xr LAorCQkJCXVuc2lnbmVkIGxvbmcgKnN5c19jbGssIHVuc2lnbmVkIGxvbmcgKnBpeF9jbGspCit7 CisJaW50IHBpeF9jbGtfc3JjOworCWludCBzeXNfZGl2ID0gMCwgc3lzX211bCA9IDA7CisJaW50 IHBpeF9kaXY7CisKKwlwaXhfY2xrX3NyYyA9IGh3YTc0Ml9yZWFkX3JlZyhIV0E3NDJfQ0xLX1NS Q19SRUcpOworCXBpeF9kaXYgPSAoKHBpeF9jbGtfc3JjID4+IDMpICYgMHgxZikgKyAxOworCWlm ICgocGl4X2Nsa19zcmMgJiAoMHgzIDw8IDEpKSA9PSAwKSB7CisJCS8qIFNvdXJjZSBpcyB0aGUg UExMICovCisJCXN5c19kaXYgPSAoaHdhNzQyX3JlYWRfcmVnKEhXQTc0Ml9QTExfRElWX1JFRykg JiAweDNmKSArIDE7CisJCXN5c19tdWwgPSAoaHdhNzQyX3JlYWRfcmVnKEhXQTc0Ml9QTExfNF9S RUcpICYgMHg3ZikgKyAxOworCQkqc3lzX2NsayA9IGV4dF9jbGsgKiBzeXNfbXVsIC8gc3lzX2Rp djsKKwl9IGVsc2UJLyogZWxzZSBzb3VyY2UgaXMgZXh0IGNsaywgb3Igb3NjaWxsYXRvciAqLwor CQkqc3lzX2NsayA9IGV4dF9jbGs7CisKKwkqcGl4X2NsayA9ICpzeXNfY2xrIC8gcGl4X2RpdjsJ CQkvKiBIWiAqLworCWRldl9kYmcoaHdhNzQyLmZiZGV2LT5kZXYsCisJCSJleHRfY2xrICVsZCBw aXhfc3JjICVkIHBpeF9kaXYgJWQgc3lzX2RpdiAlZCBzeXNfbXVsICVkXG4iLAorCQlleHRfY2xr LCBwaXhfY2xrX3NyYyAmICgweDMgPDwgMSksIHBpeF9kaXYsIHN5c19kaXYsIHN5c19tdWwpOwor CWRldl9kYmcoaHdhNzQyLmZiZGV2LT5kZXYsICJzeXNfY2xrICVsZCBwaXhfY2xrICVsZFxuIiwK KwkJKnN5c19jbGssICpwaXhfY2xrKTsKK30KKworCitzdGF0aWMgaW50IHNldHVwX3RlYXJzeW5j KHVuc2lnbmVkIGxvbmcgcGl4X2NsaywgaW50IGV4dGlmX2RpdikKK3sKKwlpbnQgaGRpc3AsIHZk aXNwOworCWludCBobmRwLCB2bmRwOworCWludCBoc3csIHZzdzsKKwlpbnQgaHMsIHZzOworCWlu dCBoc19wb2xfaW52LCB2c19wb2xfaW52OworCWludCB1c2VfaHN2cywgdXNlX25kcDsKKwl1OCAg YjsKKworCWhzdyA9IGh3YTc0Ml9yZWFkX3JlZyhIV0E3NDJfSFNfV19SRUcpOworCXZzdyA9IGh3 YTc0Ml9yZWFkX3JlZyhIV0E3NDJfVlNfV19SRUcpOworCWhzX3BvbF9pbnYgPSAhKGhzdyAmIDB4 ODApOworCXZzX3BvbF9pbnYgPSAhKHZzdyAmIDB4ODApOworCWhzdyA9IGhzdyAmIDB4N2Y7CisJ dnN3ID0gdnN3ICYgMHgzZjsKKworCWhkaXNwID0gKGh3YTc0Ml9yZWFkX3JlZyhIV0E3NDJfSF9E SVNQX1JFRykgJiAweDdmKSAqIDg7CisJdmRpc3AgPSBod2E3NDJfcmVhZF9yZWcoSFdBNzQyX1Zf RElTUF8xX1JFRykgKworCQkoKGh3YTc0Ml9yZWFkX3JlZyhIV0E3NDJfVl9ESVNQXzJfUkVHKSAm IDB4MykgPDwgOCk7CisKKwlobmRwID0gaHdhNzQyX3JlYWRfcmVnKEhXQTc0Ml9IX05EUF9SRUcp ICYgMHg3ZjsKKwl2bmRwID0gaHdhNzQyX3JlYWRfcmVnKEhXQTc0Ml9WX05EUF9SRUcpOworCisJ LyogdGltZSB0byB0cmFuc2ZlciBvbmUgcGl4ZWwgKDE2YnBwKSBpbiBwcyAqLworCWh3YTc0Mi5w aXhfdHhfdGltZSA9IGh3YTc0Mi5yZWdfdGltaW5ncy53ZV9jeWNsZV90aW1lOworCWlmIChod2E3 NDIuZXh0aWYtPmdldF9tYXhfdHhfcmF0ZSAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFRoZSBleHRl cm5hbCBpbnRlcmZhY2UgbWlnaHQgaGF2ZSBhIHJhdGUgbGltaXRhdGlvbiwKKwkJICogaWYgc28s IHdlIGhhdmUgdG8gbWF4aW1pemUgb3VyIHRyYW5zZmVyIHJhdGUuCisJCSAqLworCQl1bnNpZ25l ZCBsb25nIG1pbl90eF90aW1lOworCQl1bnNpZ25lZCBsb25nIG1heF90eF9yYXRlID0gaHdhNzQy LmV4dGlmLT5nZXRfbWF4X3R4X3JhdGUoKTsKKworCQlkZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2 LCAibWF4X3R4X3JhdGUgJWxkIEhaXG4iLAorCQkJbWF4X3R4X3JhdGUpOworCQltaW5fdHhfdGlt ZSA9IDEwMDAwMDAwMDAgLyAobWF4X3R4X3JhdGUgLyAxMDAwKTsgIC8qIHBzICovCisJCWlmICho d2E3NDIucGl4X3R4X3RpbWUgPCBtaW5fdHhfdGltZSkKKwkJCWh3YTc0Mi5waXhfdHhfdGltZSA9 IG1pbl90eF90aW1lOworCX0KKworCS8qIHRpbWUgdG8gdXBkYXRlIG9uZSBsaW5lIGluIHBzICov CisJaHdhNzQyLmxpbmVfdXBkX3RpbWUgPSAoaGRpc3AgKyBobmRwKSAqIDEwMDAwMDAgLyAocGl4 X2NsayAvIDEwMDApOworCWh3YTc0Mi5saW5lX3VwZF90aW1lICo9IDEwMDA7CisJaWYgKGhkaXNw ICogaHdhNzQyLnBpeF90eF90aW1lID4gaHdhNzQyLmxpbmVfdXBkX3RpbWUpCisJCS8qCisJCSAq IHRyYW5zZmVyIHNwZWVkIHRvbyBsb3csIHdlIG1pZ2h0IGhhdmUgdG8gdXNlIGJvdGgKKwkJICog SFMgYW5kIFZTCisJCSAqLworCQl1c2VfaHN2cyA9IDE7CisJZWxzZQorCQkvKiBkZWNlbnQgdHJh bnNmZXIgc3BlZWQsIHdlJ2xsIGFsd2F5cyB1c2Ugb25seSBWUyAqLworCQl1c2VfaHN2cyA9IDA7 CisKKwlpZiAodXNlX2hzdnMgJiYgKGhzX3BvbF9pbnYgfHwgdnNfcG9sX2ludikpIHsKKwkJLyoK KwkJICogSFMgb3InZWQgd2l0aCBWUyBkb2Vzbid0IHdvcmssIHVzZSB0aGUgYWN0aXZlIGhpZ2gK KwkJICogVEUgc2lnbmFsIGJhc2VkIG9uIEhORFAgLyBWTkRQCisJCSAqLworCQl1c2VfbmRwID0g MTsKKwkJaHNfcG9sX2ludiA9IDA7CisJCXZzX3BvbF9pbnYgPSAwOworCQlocyA9IGhuZHA7CisJ CXZzID0gdm5kcDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBVc2UgSFMgb3InZWQgd2l0aCBWUyBh cyBhIFRFIHNpZ25hbCBpZiBib3RoIGFyZSBuZWVkZWQKKwkJICogb3IgVk5EUCBpZiBvbmx5IHZz eW5jIGlzIG5lZWRlZC4KKwkJICovCisJCXVzZV9uZHAgPSAwOworCQlocyA9IGhzdzsKKwkJdnMg PSB2c3c7CisJCWlmICghdXNlX2hzdnMpIHsKKwkJCWhzX3BvbF9pbnYgPSAwOworCQkJdnNfcG9s X2ludiA9IDA7CisJCX0KKwl9CisKKwlocyA9IGhzICogMTAwMDAwMCAvIChwaXhfY2xrIC8gMTAw MCk7CQkJLyogcHMgKi8KKwlocyAqPSAxMDAwOworCisJdnMgPSB2cyAqIChoZGlzcCArIGhuZHAp ICogMTAwMDAwMCAvIChwaXhfY2xrIC8gMTAwMCk7CS8qIHBzICovCisJdnMgKj0gMTAwMDsKKwor CWlmICh2cyA8PSBocykKKwkJcmV0dXJuIC1FRE9NOworCS8qIHNldCBWUyB0byAxMjAlIG9mIEhT IHRvIG1pbmltaXplIFZTIGRldGVjdGlvbiB0aW1lICovCisJdnMgPSBocyAqIDEyIC8gMTA7CisJ LyogbWluaW1pemUgSFMgdG9vICovCisJaHMgPSAxMDAwMDsKKworCWIgPSBod2E3NDJfcmVhZF9y ZWcoSFdBNzQyX05EUF9DVFJMKTsKKwliICY9IH4weDM7CisJYiB8PSB1c2VfaHN2cyA/IDEgOiAw OworCWIgfD0gKHVzZV9uZHAgJiYgdXNlX2hzdnMpID8gMCA6IDI7CisJaHdhNzQyX3dyaXRlX3Jl ZyhIV0E3NDJfTkRQX0NUUkwsIGIpOworCisJaHdhNzQyLnZzeW5jX29ubHkgPSAhdXNlX2hzdnM7 CisKKwlkZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2LAorCQkicGl4X2NsayAlbGQgSFogcGl4X3R4 X3RpbWUgJWxkIHBzIGxpbmVfdXBkX3RpbWUgJWxkIHBzXG4iLAorCQlwaXhfY2xrLCBod2E3NDIu cGl4X3R4X3RpbWUsIGh3YTc0Mi5saW5lX3VwZF90aW1lKTsKKwlkZXZfZGJnKGh3YTc0Mi5mYmRl di0+ZGV2LAorCQkiaHMgJWQgcHMgdnMgJWQgcHMgbW9kZSAlZCB2c3luY19vbmx5ICVkXG4iLAor CQlocywgdnMsIChiICYgMHgzKSwgIXVzZV9oc3ZzKTsKKworCXJldHVybiBod2E3NDIuZXh0aWYt PnNldHVwX3RlYXJzeW5jKDEsIGhzLCB2cywKKwkJCQkJICAgIGhzX3BvbF9pbnYsIHZzX3BvbF9p bnYsIGV4dGlmX2Rpdik7Cit9CisKK3N0YXRpYyB2b2lkIGh3YTc0Ml9nZXRfY2FwcyhpbnQgcGxh bmUsIHN0cnVjdCBvbWFwZmJfY2FwcyAqY2FwcykKK3sKKwlod2E3NDIuaW50X2N0cmwtPmdldF9j YXBzKHBsYW5lLCBjYXBzKTsKKwljYXBzLT5jdHJsIHw9IE9NQVBGQl9DQVBTX01BTlVBTF9VUERB VEUgfAorCQkgICAgICBPTUFQRkJfQ0FQU19XSU5ET1dfUElYRUxfRE9VQkxFOworCWlmIChod2E3 NDIudGVfY29ubmVjdGVkKQorCQljYXBzLT5jdHJsIHw9IE9NQVBGQl9DQVBTX1RFQVJTWU5DOwor CWNhcHMtPnduZF9jb2xvciB8PSAoMSA8PCBPTUFQRkJfQ09MT1JfUkdCNTY1KSB8CisJCQkgICAo MSA8PCBPTUFQRkJfQ09MT1JfWVVWNDIwKTsKK30KKworc3RhdGljIHZvaWQgaHdhNzQyX3N1c3Bl bmQodm9pZCkKK3sKKwlod2E3NDIudXBkYXRlX21vZGVfYmVmb3JlX3N1c3BlbmQgPSBod2E3NDIu dXBkYXRlX21vZGU7CisJaHdhNzQyX3NldF91cGRhdGVfbW9kZShPTUFQRkJfVVBEQVRFX0RJU0FC TEVEKTsKKwkvKiBFbmFibGUgc2xlZXAgbW9kZSAqLworCWh3YTc0Ml93cml0ZV9yZWcoSFdBNzQy X1BPV0VSX1NBVkUsIDEgPDwgMSk7CisJaWYgKGh3YTc0Mi5wb3dlcl9kb3duICE9IE5VTEwpCisJ CWh3YTc0Mi5wb3dlcl9kb3duKGh3YTc0Mi5mYmRldi0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQg aHdhNzQyX3Jlc3VtZSh2b2lkKQoreworCWlmIChod2E3NDIucG93ZXJfdXAgIT0gTlVMTCkKKwkJ aHdhNzQyLnBvd2VyX3VwKGh3YTc0Mi5mYmRldi0+ZGV2KTsKKwkvKiBEaXNhYmxlIHNsZWVwIG1v ZGUgKi8KKwlod2E3NDJfd3JpdGVfcmVnKEhXQTc0Ml9QT1dFUl9TQVZFLCAwKTsKKwl3aGlsZSAo MSkgeworCQkvKiBMb29wIHVudGlsIFBMTCBvdXRwdXQgaXMgc3RhYmlsaXplZCAqLworCQlpZiAo aHdhNzQyX3JlYWRfcmVnKEhXQTc0Ml9QTExfRElWX1JFRykgJiAoMSA8PCA3KSkKKwkJCWJyZWFr OworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxl X3RpbWVvdXQobXNlY3NfdG9famlmZmllcyg1KSk7CisJfQorCWh3YTc0Ml9zZXRfdXBkYXRlX21v ZGUoaHdhNzQyLnVwZGF0ZV9tb2RlX2JlZm9yZV9zdXNwZW5kKTsKK30KKworc3RhdGljIGludCBo d2E3NDJfaW5pdChzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsIGludCBleHRfbW9kZSwKKwkJ ICAgICAgIHN0cnVjdCBvbWFwZmJfbWVtX2Rlc2MgKnJlcV92cmFtKQoreworCWludCByID0gMCwg aTsKKwl1OCByZXYsIGNvbmY7CisJdW5zaWduZWQgbG9uZyBleHRfY2xrOworCXVuc2lnbmVkIGxv bmcgc3lzX2NsaywgcGl4X2NsazsKKwlpbnQgZXh0aWZfbWVtX2RpdjsKKwlzdHJ1Y3Qgb21hcGZi X3BsYXRmb3JtX2RhdGEgKm9tYXBmYl9jb25mOworCXN0cnVjdCBod2E3NDJfcGxhdGZvcm1fZGF0 YSAqY3RybF9jb25mOworCisJQlVHX09OKCFmYmRldi0+ZXh0X2lmIHx8ICFmYmRldi0+aW50X2N0 cmwpOworCisJaHdhNzQyLmZiZGV2ID0gZmJkZXY7CisJaHdhNzQyLmV4dGlmID0gZmJkZXYtPmV4 dF9pZjsKKwlod2E3NDIuaW50X2N0cmwgPSBmYmRldi0+aW50X2N0cmw7CisKKwlvbWFwZmJfY29u ZiA9IGZiZGV2LT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJY3RybF9jb25mID0gb21hcGZiX2NvbmYt PmN0cmxfcGxhdGZvcm1fZGF0YTsKKworCWlmIChjdHJsX2NvbmYgPT0gTlVMTCB8fCBjdHJsX2Nv bmYtPmdldF9jbG9ja19yYXRlID09IE5VTEwpIHsKKwkJZGV2X2VycihmYmRldi0+ZGV2LCAiSFdB NzQyOiBtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyID0gLUVOT0VOVDsKKwkJZ290byBl cnIxOworCX0KKworCWh3YTc0Mi5wb3dlcl9kb3duID0gY3RybF9jb25mLT5wb3dlcl9kb3duOwor CWh3YTc0Mi5wb3dlcl91cCA9IGN0cmxfY29uZi0+cG93ZXJfdXA7CisKKwlzcGluX2xvY2tfaW5p dCgmaHdhNzQyLnJlcV9sb2NrKTsKKworCWlmICgociA9IGh3YTc0Mi5pbnRfY3RybC0+aW5pdChm YmRldiwgMSwgcmVxX3ZyYW0pKSA8IDApCisJCWdvdG8gZXJyMTsKKworCWlmICgociA9IGh3YTc0 Mi5leHRpZi0+aW5pdChmYmRldikpIDwgMCkKKwkJZ290byBlcnIyOworCisJZXh0X2NsayA9IGN0 cmxfY29uZi0+Z2V0X2Nsb2NrX3JhdGUoZmJkZXYtPmRldik7CisJaWYgKChyID0gY2FsY19leHRp Zl90aW1pbmdzKGV4dF9jbGssICZleHRpZl9tZW1fZGl2KSkgPCAwKQorCQlnb3RvIGVycjM7CisJ aHdhNzQyLmV4dGlmLT5zZXRfdGltaW5ncygmaHdhNzQyLnJlZ190aW1pbmdzKTsKKwlpZiAoaHdh NzQyLnBvd2VyX3VwICE9IE5VTEwpCisJCWh3YTc0Mi5wb3dlcl91cChmYmRldi0+ZGV2KTsKKwor CWNhbGNfaHdhNzQyX2Nsa19yYXRlcyhleHRfY2xrLCAmc3lzX2NsaywgJnBpeF9jbGspOworCWlm ICgociA9IGNhbGNfZXh0aWZfdGltaW5ncyhzeXNfY2xrLCAmZXh0aWZfbWVtX2RpdikpIDwgMCkK KwkJZ290byBlcnI0OworCWh3YTc0Mi5leHRpZi0+c2V0X3RpbWluZ3MoJmh3YTc0Mi5yZWdfdGlt aW5ncyk7CisKKwlyZXYgPSBod2E3NDJfcmVhZF9yZWcoSFdBNzQyX1JFVl9DT0RFX1JFRyk7CisJ aWYgKChyZXYgJiAweGZjKSAhPSAweDgwKSB7CisJCWRldl9lcnIoZmJkZXYtPmRldiwgIkhXQTc0 MjogaW52YWxpZCByZXZpc2lvbiAlMDJ4XG4iLCByZXYpOworCQlyID0gLUVOT0RFVjsKKwkJZ290 byBlcnI0OworCX0KKworCisJaWYgKCEoaHdhNzQyX3JlYWRfcmVnKEhXQTc0Ml9QTExfRElWX1JF RykgJiAweDgwKSkgeworCQlkZXZfZXJyKGZiZGV2LT5kZXYsCisJCSAgICAgICJIV0E3NDI6IGNv bnRyb2xsZXIgbm90IGluaXRpYWxpemVkIGJ5IHRoZSBib290bG9hZGVyXG4iKTsKKwkJciA9IC1F Tk9ERVY7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlpZiAoY3RybF9jb25mLT50ZV9jb25uZWN0ZWQp IHsKKwkJaWYgKChyID0gc2V0dXBfdGVhcnN5bmMocGl4X2NsaywgZXh0aWZfbWVtX2RpdikpIDwg MCkgeworCQkJZGV2X2Vycihod2E3NDIuZmJkZXYtPmRldiwKKwkJCSAgICAgICAiSFdBNzQyOiBj YW4ndCBzZXR1cCB0ZWFyaW5nIHN5bmNocm9uaXphdGlvblxuIik7CisJCQlnb3RvIGVycjQ7CisJ CX0KKwkJaHdhNzQyLnRlX2Nvbm5lY3RlZCA9IDE7CisJfQorCisJaHdhNzQyLm1heF90cmFuc21p dF9zaXplID0gaHdhNzQyLmV4dGlmLT5tYXhfdHJhbnNtaXRfc2l6ZTsKKworCWh3YTc0Mi51cGRh dGVfbW9kZSA9IE9NQVBGQl9VUERBVEVfRElTQUJMRUQ7CisKKwlod2E3NDIuYXV0b191cGRhdGVf d2luZG93LnggPSAwOworCWh3YTc0Mi5hdXRvX3VwZGF0ZV93aW5kb3cueSA9IDA7CisJaHdhNzQy LmF1dG9fdXBkYXRlX3dpbmRvdy53aWR0aCA9IGZiZGV2LT5wYW5lbC0+eF9yZXM7CisJaHdhNzQy LmF1dG9fdXBkYXRlX3dpbmRvdy5oZWlnaHQgPSBmYmRldi0+cGFuZWwtPnlfcmVzOworCWh3YTc0 Mi5hdXRvX3VwZGF0ZV93aW5kb3cuZm9ybWF0ID0gMDsKKworCWluaXRfdGltZXIoJmh3YTc0Mi5h dXRvX3VwZGF0ZV90aW1lcik7CisJaHdhNzQyLmF1dG9fdXBkYXRlX3RpbWVyLmZ1bmN0aW9uID0g aHdhNzQyX3VwZGF0ZV93aW5kb3dfYXV0bzsKKwlod2E3NDIuYXV0b191cGRhdGVfdGltZXIuZGF0 YSA9IDA7CisKKwlod2E3NDIucHJldl9jb2xvcl9tb2RlID0gLTE7CisJaHdhNzQyLnByZXZfZmxh Z3MgPSAwOworCisJaHdhNzQyLmZiZGV2ID0gZmJkZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmaHdh NzQyLmZyZWVfcmVxX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZod2E3NDIucGVuZGluZ19yZXFf bGlzdCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdhNzQyLnJlcV9wb29sKTsgaSsr KQorCQlsaXN0X2FkZCgmaHdhNzQyLnJlcV9wb29sW2ldLmVudHJ5LCAmaHdhNzQyLmZyZWVfcmVx X2xpc3QpOworCUJVR19PTihpIDw9IElSUV9SRVFfUE9PTF9TSVpFKTsKKwlzZW1hX2luaXQoJmh3 YTc0Mi5yZXFfc2VtYSwgaSAtIElSUV9SRVFfUE9PTF9TSVpFKTsKKworCWNvbmYgPSBod2E3NDJf cmVhZF9yZWcoSFdBNzQyX0NPTkZJR19SRUcpOworCWRldl9pbmZvKGZiZGV2LT5kZXYsICI6IEVw c29uIEhXQTc0MiBMQ0QgY29udHJvbGxlciByZXYgJWQgIgorCQkJImluaXRpYWxpemVkIChDTkYg cGlucyAleClcbiIsIHJldiAmIDB4MDMsIGNvbmYgJiAweDA3KTsKKworCXJldHVybiAwOworZXJy NDoKKwlpZiAoaHdhNzQyLnBvd2VyX2Rvd24gIT0gTlVMTCkKKwkJaHdhNzQyLnBvd2VyX2Rvd24o ZmJkZXYtPmRldik7CitlcnIzOgorCWh3YTc0Mi5leHRpZi0+Y2xlYW51cCgpOworZXJyMjoKKwlo d2E3NDIuaW50X2N0cmwtPmNsZWFudXAoKTsKK2VycjE6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRp YyB2b2lkIGh3YTc0Ml9jbGVhbnVwKHZvaWQpCit7CisJaHdhNzQyX3NldF91cGRhdGVfbW9kZShP TUFQRkJfVVBEQVRFX0RJU0FCTEVEKTsKKwlod2E3NDIuZXh0aWYtPmNsZWFudXAoKTsKKwlod2E3 NDIuaW50X2N0cmwtPmNsZWFudXAoKTsKKwlpZiAoaHdhNzQyLnBvd2VyX2Rvd24gIT0gTlVMTCkK KwkJaHdhNzQyLnBvd2VyX2Rvd24oaHdhNzQyLmZiZGV2LT5kZXYpOworfQorCitzdHJ1Y3QgbGNk X2N0cmwgaHdhNzQyX2N0cmwgPSB7CisJLm5hbWUJCQk9ICJod2E3NDIiLAorCS5pbml0CQkJPSBo d2E3NDJfaW5pdCwKKwkuY2xlYW51cAkJPSBod2E3NDJfY2xlYW51cCwKKwkuYmluZF9jbGllbnQJ CT0gaHdhNzQyX2JpbmRfY2xpZW50LAorCS5nZXRfY2FwcwkJPSBod2E3NDJfZ2V0X2NhcHMsCisJ LnNldF91cGRhdGVfbW9kZQk9IGh3YTc0Ml9zZXRfdXBkYXRlX21vZGUsCisJLmdldF91cGRhdGVf bW9kZQk9IGh3YTc0Ml9nZXRfdXBkYXRlX21vZGUsCisJLnNldHVwX3BsYW5lCQk9IGh3YTc0Ml9z ZXR1cF9wbGFuZSwKKwkuZW5hYmxlX3BsYW5lCQk9IGh3YTc0Ml9lbmFibGVfcGxhbmUsCisJLnVw ZGF0ZV93aW5kb3cJCT0gaHdhNzQyX3VwZGF0ZV93aW5kb3dfYXN5bmMsCisJLnN5bmMJCQk9IGh3 YTc0Ml9zeW5jLAorCS5zdXNwZW5kCQk9IGh3YTc0Ml9zdXNwZW5kLAorCS5yZXN1bWUJCQk9IGh3 YTc0Ml9yZXN1bWUsCit9OworCi0tIAoxLjUuMAoK ------=_Part_17376_5349026.1182861606658-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/