From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751694AbWJMNKc (ORCPT ); Fri, 13 Oct 2006 09:10:32 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751695AbWJMNKc (ORCPT ); Fri, 13 Oct 2006 09:10:32 -0400 Received: from bay0-omc3-s40.bay0.hotmail.com ([65.54.246.240]:2625 "EHLO bay0-omc3-s40.bay0.hotmail.com") by vger.kernel.org with ESMTP id S1751692AbWJMNKb (ORCPT ); Fri, 13 Oct 2006 09:10:31 -0400 Message-ID: X-Originating-IP: [80.178.105.199] X-Originating-Email: [yan_952@hotmail.com] From: "Burman Yan" To: linux-kernel@vger.kernel.org Subject: [PATCH] HP mobile data protection system driver take 2 Date: Fri, 13 Oct 2006 15:10:29 +0200 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_705b_3b9_7c8b" X-OriginalArrivalTime: 13 Oct 2006 13:10:30.0683 (UTC) FILETIME=[F587DEB0:01C6EEC8] Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. ------=_NextPart_000_705b_3b9_7c8b Content-Type: text/plain; format=flowed Hi, All. Thanks for the remarks on my previous post. Here is the driver for HP Mobile Data Protection System with the following changes: 1) Fixed tabs from 8 spaces to tabs 2) Removed C++ style comments 3) Made some functions return void if their return value is not checked anyway 4) Moved the interface from proc to sysfs 5) Made the sysfs interface similar to hdaps's so that hdapsd could be used perhaps with small modifications I would like to hear your remarks on this version. Yan Burman yan_952@hotmail.com _________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ ------=_NextPart_000_705b_3b9_7c8b Content-Type: application/octet-stream; name="mdps-0.2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mdps-0.2.patch" SFAgTW9iaWxlIERhdGEgUHJvdGVjdGlvbiBTeXN0ZW0gM0QgQUNQSSBkcml2 ZXIuIFNpbWlsYXIgdG8gaGRhcHMgaW4gZnVuY3Rpb25hbGl0eS4KCkZvciBj b21tZW50cyBtYWlsIHRvOiB5YW5fOTUyQGhvdG1haWwuY29tCgpTaWduZWQt b2ZmLWJ5OiBZYW4gQnVybWFuIDx5YW5fOTUyQGhvdG1haWwuY29tPgoKZGlm ZiAtTnJ1YnAgbGludXgtMi42LjE4Lm9yaWcvZHJpdmVycy9od21vbi9LY29u ZmlnIGxpbnV4LTIuNi4xOC5tZHBzL2RyaXZlcnMvaHdtb24vS2NvbmZpZwot LS0gbGludXgtMi42LjE4Lm9yaWcvZHJpdmVycy9od21vbi9LY29uZmlnCTIw MDYtMTAtMTEgMTQ6MjA6MDguMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0y LjYuMTgubWRwcy9kcml2ZXJzL2h3bW9uL0tjb25maWcJMjAwNi0xMC0xMyAw ODo1Mjo0Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTUwNyw2ICs1MDcsMjIgQEAg Y29uZmlnIFNFTlNPUlNfSERBUFMKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhh dmUgYW4gYXBwbGljYWJsZSBsYXB0b3AgYW5kIHdhbnQgdG8gZXhwZXJpZW5j ZQogCSAgdGhlIGF3ZXNvbWUgcG93ZXIgb2YgaGRhcHMuCiAKK2NvbmZpZyBT RU5TT1JTX01EUFMKKyAgICAgICAgdHJpc3RhdGUgIkhQIE1vYmlsZSBEYXRh IFByb3RlY3Rpb24gU3lzdGVtIDNEIChtZHBzKSIKKyAgICAgICAgZGVwZW5k cyBvbiBBQ1BJICYmIEhXTU9OICYmIElOUFVUICYmIFg4NgorICAgICAgICBk ZWZhdWx0IG4KKyAgICAgICAgaGVscAorICAgICAgICAgIFRoaXMgZHJpdmVy IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBIUCBNb2JpbGUgRGF0YSBQcm90 ZWN0aW9uIAorICAgICAgICAgIFN5c3RlbSAzRCAobWRwcyksIHdoaWNoIGlz IGFuIGFjY2VsZXJvbWV0ZXIuIE9ubHkgSFAgbmM2NDAwIGlzIHN1cHBvcnRl ZAorICAgICAgICAgIHJpZ2h0IG5vdywgYnV0IGl0IG1heSB3b3JrIG9uIG90 aGVyIG1vZGVscyBhcyB3ZWxsLiAgVGhlCisgICAgICAgICAgYWNjZWxlcm9t ZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYSAvcHJvYy9kcml2ZXJzL21kcHMu CisKKyAgICAgICAgICBUaGlzIGRyaXZlciBhbHNvIHByb3ZpZGVzIGFuIGFi c29sdXRlIGlucHV0IGNsYXNzIGRldmljZSwgYWxsb3dpbmcKKyAgICAgICAg ICB0aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1 ZSBqb3lzdGljay4KKworICAgICAgICAgIFRoaXMgZHJpdmVyIGNhbiBhbHNv IGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKyAg ICAgICAgICB3aWxsIGJlIGNhbGxlZCBtZHBzLgorCiBjb25maWcgSFdNT05f REVCVUdfQ0hJUAogCWJvb2wgIkhhcmR3YXJlIE1vbml0b3JpbmcgQ2hpcCBk ZWJ1Z2dpbmcgbWVzc2FnZXMiCiAJZGVwZW5kcyBvbiBIV01PTgpkaWZmIC1O cnVicCBsaW51eC0yLjYuMTgub3JpZy9kcml2ZXJzL2h3bW9uL01ha2VmaWxl IGxpbnV4LTIuNi4xOC5tZHBzL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKLS0t IGxpbnV4LTIuNi4xOC5vcmlnL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUJMjAw Ni0xMC0xMSAxNDoyMDowOC4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIu Ni4xOC5tZHBzL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUJMjAwNi0xMC0xMyAx MDoxNDoxMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTI2LDYgKzI2LDcgQEAgb2Jq LSQoQ09ORklHX1NFTlNPUlNfRlNDUE9TKQkrPSBmc2Nwb3Mubwogb2JqLSQo Q09ORklHX1NFTlNPUlNfR0w1MThTTSkJKz0gZ2w1MThzbS5vCiBvYmotJChD T05GSUdfU0VOU09SU19HTDUyMFNNKQkrPSBnbDUyMHNtLm8KIG9iai0kKENP TkZJR19TRU5TT1JTX0hEQVBTKQkrPSBoZGFwcy5vCitvYmotJChDT05GSUdf U0VOU09SU19NRFBTKQkrPSBtZHBzLm8KIG9iai0kKENPTkZJR19TRU5TT1JT X0lUODcpCSs9IGl0ODcubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE02MykJ Kz0gbG02My5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTcwKQkrPSBsbTcw Lm8KZGlmZiAtTnJ1YnAgbGludXgtMi42LjE4Lm9yaWcvZHJpdmVycy9od21v bi9tZHBzLmMgbGludXgtMi42LjE4Lm1kcHMvZHJpdmVycy9od21vbi9tZHBz LmMKLS0tIGxpbnV4LTIuNi4xOC5vcmlnL2RyaXZlcnMvaHdtb24vbWRwcy5j CTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBsaW51 eC0yLjYuMTgubWRwcy9kcml2ZXJzL2h3bW9uL21kcHMuYwkyMDA2LTEwLTEz IDE0OjU1OjU2LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDU3NyBAQAor LyoKKyAqICBtZHBzLmMgLSBIUCBNb2JpbGUgRGF0YSBQcm90ZWN0aW9uIFN5 c3RlbSAzRCBBQ1BJIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIw MDYgWWFuIEJ1cm1hbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0 ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4 L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5j bHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxhY3BpL2Fj bmFtZXNwLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjZGVm aW5lIFZFUlNJT04gIjAuMiIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJIUCB0 aHJlZS1heGlzIGRpZ2l0YWwgYWNjZWxlcm9tZXRlciBBQ1BJIGRyaXZlciIp OworTU9EVUxFX0FVVEhPUigiWWFuIEJ1cm1hbiAoeWFuXzk1MkBob3RtYWls LmNvbSkiKTsKK01PRFVMRV9WRVJTSU9OKFZFUlNJT04pOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOworCisjZGVmaW5lIERSSVZFUl9OQU1FICAgICAibWRw cyIKKyNkZWZpbmUgQUNQSV9NRFBTX0NMQVNTICJhY2NlbGVyb21ldGVyIgor I2RlZmluZSBBQ1BJX01EUFNfSUQgICAgIkhQUTAwMDQiCisKKy8qIFRoZSBh Y3R1YWwgY2hpcCBpcyBTVE1pY3JvZWxlY3Ryb25pY3MgTElTM0xWMDJETCBv ciBMSVMzTFYwMkRRICovCisKKyNkZWZpbmUgTURQU19XSE9fQU1fSSAgICAg ICAgMHgwRiAvKnIgICAgICAwMDExMTAxMCAqLworI2RlZmluZSBNRFBTX09G RlNFVF9YICAgICAgICAweDE2IC8qcncgICAgICAgICAgICAgICovCisjZGVm aW5lIE1EUFNfT0ZGU0VUX1kgICAgICAgIDB4MTcgLypydyAgICAgICAgICAg ICAgKi8KKyNkZWZpbmUgTURQU19PRkZTRVRfWiAgICAgICAgMHgxOCAvKnJ3 ICAgICAgICAgICAgICAqLworI2RlZmluZSBNRFBTX0dBSU5fWCAgICAgICAg ICAweDE5IC8qcncgICAgICAgICAgICAgICovCisjZGVmaW5lIE1EUFNfR0FJ Tl9ZICAgICAgICAgIDB4MUEgLypydyAgICAgICAgICAgICAgKi8KKyNkZWZp bmUgTURQU19HQUlOX1ogICAgICAgICAgMHgxQiAvKnJ3ICAgICAgICAgICAg ICAqLworI2RlZmluZSBNRFBTX0NUUkxfUkVHMSAgICAgICAweDIwIC8qcncg ICAgIDAwMDAwMTExICovCisjZGVmaW5lIE1EUFNfQ1RSTF9SRUcyICAgICAg IDB4MjEgLypydyAgICAgMDAwMDAwMDAgKi8KKyNkZWZpbmUgTURQU19DVFJM X1JFRzMgICAgICAgMHgyMiAvKnJ3ICAgICAwMDAwMTAwMCAqLworI2RlZmlu ZSBNRFBTX0hQX0ZJTFRFUiBSRVNFVCAweDIzIC8qciAgICAgICAgICAgICAg ICovCisjZGVmaW5lIE1EUFNfU1RBVFVTX1JFRyAgICAgIDB4MjcgLypydyAg ICAgMDAwMDAwMDAgKi8KKyNkZWZpbmUgTURQU19PVVRYX0wgICAgICAgICAg MHgyOCAvKnIgICAgICAgICAgICAgICAqLworI2RlZmluZSBNRFBTX09VVFhf SCAgICAgICAgICAweDI5IC8qciAgICAgICAgICAgICAgICovCisjZGVmaW5l IE1EUFNfT1VUWV9MICAgICAgICAgIDB4MkEgLypyICAgICAgICAgICAgICAg Ki8KKyNkZWZpbmUgTURQU19PVVRZX0ggICAgICAgICAgMHgyQiAvKnIgICAg ICAgICAgICAgICAqLworI2RlZmluZSBNRFBTX09VVFpfTCAgICAgICAgICAw eDJDIC8qciAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1EUFNfT1VUWl9I ICAgICAgICAgIDB4MkQgLypyICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUg TURQU19GRl9XVV9DRkcgICAgICAgMHgzMCAvKnJ3ICAgICAwMDAwMDAwMCAq LworI2RlZmluZSBNRFBTX0ZGX1dVX1NSQyAgICAgICAweDMxIC8qcncgICAg IDAwMDAwMDAwICovCisjZGVmaW5lIE1EUFNfRkZfV1VfQUNLICAgICAgIDB4 MzIgLypyICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTURQU19GRl9XVV9U SFNfTCAgICAgMHgzNCAvKnJ3ICAgICAwMDAwMDAwMCAqLworI2RlZmluZSBN RFBTX0ZGX1dVX1RIU19IICAgICAweDM1IC8qcncgICAgIDAwMDAwMDAwICov CisjZGVmaW5lIE1EUFNfRkZfV1VfRFVSQVRJT04gIDB4MzYgLypydyAgICAg MDAwMDAwMDAgKi8KKyNkZWZpbmUgTURQU19ERF9DRkcgICAgICAgICAgMHgz OCAvKnJ3ICAgICAwMDAwMDAwMCAqLworI2RlZmluZSBNRFBTX0REX1NSQyAg ICAgICAgICAweDM5IC8qcncgICAgIDAwMDAwMDAwICovCisjZGVmaW5lIE1E UFNfRERfQUNLICAgICAgICAgIDB4M0EgLypyICAgICAgICAgICAgICAgKi8K KyNkZWZpbmUgTURQU19ERF9USFNJX0wgICAgICAgMHgzQyAvKnJ3ICAgICAw MDAwMDAwMCAqLworI2RlZmluZSBNRFBTX0REX1RIU0lfSCAgICAgICAweDNE IC8qcncgICAgIDAwMDAwMDAwICovCisjZGVmaW5lIE1EUFNfRERfVEhTRV9M ICAgICAgIDB4M0UgLypydyAgICAgMDAwMDAwMDAgKi8KKyNkZWZpbmUgTURQ U19ERF9USFNFX0ggICAgICAgMHgzRiAvKnJ3ICAgICAwMDAwMDAwMCAqLwor CisjZGVmaW5lIE1EUFNfSUQgMHgzQQorCisvKiBtb3VzZSBkZXZpY2UgcG9s bCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgTURQU19Q T0xMX0lOVEVSVkFMIDMwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbW91c2U7 Cittb2R1bGVfcGFyYW0obW91c2UsIGJvb2wsIDApOworTU9EVUxFX1BBUk1f REVTQyhtb3VzZSwgIkVuYWJsZSB0aGUgaW5wdXQgY2xhc3MgZGV2aWNlIG9u IG1vZHVsZSBsb2FkIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG93ZXJf b2ZmOworbW9kdWxlX3BhcmFtKHBvd2VyX29mZiwgYm9vbCwgMCk7CitNT0RV TEVfUEFSTV9ERVNDKHBvd2VyX29mZiwgIlR1cm4gb2ZmIGRldmljZSBvbiBt b2R1bGUgbG9hZCIpOworCitzdHJ1Y3QgYWNwaV9tZHBzCit7CisJc3RydWN0 IGFjcGlfZGV2aWNlKiAgICAgZGV2aWNlOyAgICAvKiBUaGUgQUNQSSBkZXZp Y2UgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICBpcnE7ICAgICAgIC8q IElSUSBudW1iZXIgKi8KKwlzdHJ1Y3QgaW5wdXRfZGV2KiAgICAgICBpZGV2 OyAgICAgIC8qIGlucHV0IGRldmljZSAqLworCXN0cnVjdCB0YXNrX3N0cnVj dCogICAgIGt0aHJlYWQ7ICAgLyoga3RocmVhZCBmb3IgaW5wdXQgKi8KKwlp bnQgICAgICAgICAgICAgICAgICAgICB4Y2FsaWI7ICAgIC8qIGNhbGlicmF0 ZWQgbnVsbCB2YWx1ZSBmb3IgeCAqLworCWludCAgICAgICAgICAgICAgICAg ICAgIHljYWxpYjsgICAgLyogY2FsaWJyYXRlZCBudWxsIHZhbHVlIGZvciB5 ICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgaXNfb247ICAgICAvKiB3 aGV0aGVyIHRoZSBkZXZpY2UgaXMgb24gb3Igb2ZmICovCisJc3RydWN0IHBs YXRmb3JtX2RldmljZSogcGRldjsgICAgICAvKiBwbGF0Zm9ybSBkZXZpY2Ug Ki8KK307CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9tZHBzIG1kcHM7CisKK3N0 YXRpYyBpbnQgbWRwc19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2Up Oworc3RhdGljIGludCBtZHBzX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2Ug KmRldmljZSwgaW50IHR5cGUpOworc3RhdGljIGludCBtZHBzX3N1c3BlbmQo c3RydWN0IGFjcGlfZGV2aWNlICogZGV2aWNlLCBpbnQgc3RhdGUpOworc3Rh dGljIGludCBtZHBzX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZp Y2UsIGludCBzdGF0ZSk7CitzdGF0aWMgaW50IG1kcHNfcmVtb3ZlX2ZzKHZv aWQpOworc3RhdGljIGludCBtZHBzX2FkZF9mcyhzdHJ1Y3QgYWNwaV9kZXZp Y2UgKmRldmljZSk7CitzdGF0aWMgdm9pZCBtZHBzX21vdXNlX2VuYWJsZSh2 b2lkKTsKK3N0YXRpYyB2b2lkIG1kcHNfbW91c2VfZGlzYWJsZSh2b2lkKTsK Kworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBtZHBzX2RyaXZlciA9Cit7 CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuY2xhc3MgPSBBQ1BJX01EUFNf Q0xBU1MsCisJLmlkcyA9IEFDUElfTURQU19JRCwKKwkub3BzID0geworCQku YWRkICAgICA9IG1kcHNfYWRkLAorCQkucmVtb3ZlICA9IG1kcHNfcmVtb3Zl LAorCQkuc3VzcGVuZCA9IG1kcHNfc3VzcGVuZCwKKwkJLnJlc3VtZSAgPSBt ZHBzX3Jlc3VtZQorCX0KK307CisKKy8qKiBDcmVhdGUgYSBzaW5nbGUgdmFs dWUgZnJvbSAyIGJ5dGVzIHJlY2VpdmVkIGZyb20gdGhlIGFjY2VsZXJvbWV0 ZXIKKyAqIEBwYXJhbSBoaSB0aGUgaGlnaCBieXRlCisgKiBAcGFyYW0gbG8g dGhlIGxvdyBieXRlCisgKiBAcmV0dXJuIHRoZSByZXN1bHRpbmcgdmFsdWUK KyAqLworc3RhdGljIGlubGluZSBzMTYgbWRwc19nbHVlX2J5dGVzKHVuc2ln bmVkIGxvbmcgaGksIHVuc2lnbmVkIGxvbmcgbG8pCit7CisJLyogSW4gIjEy IGJpdCByaWdodCBqdXN0aWZpZWQiIG1vZGUsIGJpdCA2LCBiaXQgNywgYml0 IDggPSBiaXQgNSAqLworCWlmIChoaSAmIDB4MTApCisJCWhpIHw9IDB4RTA7 CisJcmV0dXJuIChzMTYpKGxvIHwgKChoaSA8PCA4KSkpOworfQorCitzdGF0 aWMgYWNwaV9zdGF0dXMgcmVhZF9hY3BpX2ludF9wYXJhbShhY3BpX2hhbmRs ZSBoYW5kbGUsIGFjcGlfc3RyaW5nIG1ldGhvZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwsIHVuc2lnbmVkIGxv bmcqIHJldCkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBhcmcwID0geyBBQ1BJ X1RZUEVfSU5URUdFUiB9OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFy Z3MgPSB7IDEsICZhcmcwIH07CisKKwlhcmcwLmludGVnZXIudmFsdWUgPSB2 YWw7CisKKwlyZXR1cm4gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwg bWV0aG9kLCAmYXJncywgcmV0KTsKK30KKworLyoqIEFDUEkgX1NUQSBtZXRo b2Q6IGdldCBkZXZpY2Ugc3RhdHVzCisgKiBAcGFyYW0gaGFuZGxlIHRoZSBo YW5kbGUgb2YgdGhlIGRldmljZQorICogQHBhcmFtW291dF0gcmV0IHJlc3Vs dCBvZiB0aGUgb3BlcmF0aW9uCisgKiBAcmV0dXJuIEFFX09LIG9uIHN1Y2Nl c3MKKyAqLworc3RhdGljIGlubGluZSBhY3BpX3N0YXR1cyBtZHBzX19TVEEo YWNwaV9oYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBsb25nKiByZXQpCit7CisJ cmV0dXJuIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsIE1FVEhPRF9O QU1FX19TVEEsIE5VTEwsIHJldCk7Cit9CisKKy8qKiBBQ1BJIEFMUkQgbWV0 aG9kOiByZWFkIGEgcmVnaXN0ZXIKKyAqIEBwYXJhbSBoYW5kbGUgdGhlIGhh bmRsZSBvZiB0aGUgZGV2aWNlCisgKiBAcGFyYW0gcmVnIHRoZSByZWdpc3Rl ciB0byByZWFkCisgKiBAcGFyYW1bb3V0XSByZXQgcmVzdWx0IG9mIHRoZSBv cGVyYXRpb24KKyAqIEByZXR1cm4gQUVfT0sgb24gc3VjY2VzcworICovCitz dGF0aWMgaW5saW5lIGFjcGlfc3RhdHVzIG1kcHNfQUxSRChhY3BpX2hhbmRs ZSBoYW5kbGUsIGludCByZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nKiByZXQpCit7CisJcmV0dXJuIHJl YWRfYWNwaV9pbnRfcGFyYW0oaGFuZGxlLCAiQUxSRCIsIHJlZywgcmV0KTsK K30KKworLyoqIEFDUEkgX0lOSSBtZXRob2Q6IGluaXRpYWxpemUgdGhlIGRl dmljZS4KKyAqIEBwYXJhbSBoYW5kbGUgdGhlIGhhbmRsZSBvZiB0aGUgZGV2 aWNlCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW5s aW5lIGFjcGlfc3RhdHVzIG1kcHNfX0lOSShhY3BpX2hhbmRsZSBoYW5kbGUp Cit7CisJcmV0dXJuIGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVU SE9EX05BTUVfX0lOSSwgTlVMTCwgTlVMTCk7Cit9CisKKy8qKiBBQ1BJIEFM V1IgbWV0aG9kOiB3cml0ZSB0byBhIHJlZ2lzdGVyCisgKiBAcGFyYW0gaGFu ZGxlIHRoZSBoYW5kbGUgb2YgdGhlIGRldmljZQorICogQHBhcmFtIHJlZyB0 aGUgcmVnaXN0ZXIgdG8gd3JpdGUgdG8KKyAqIEBwYXJhbSB2YWwgdGhlIHZh bHVlIHRvIHdyaXRlCisgKiBAcGFyYW1bb3V0XSByZXQgcmVzdWx0IG9mIHRo ZSBvcGVyYXRpb24KKyAqIEByZXR1cm4gQUVfT0sgb24gc3VjY2VzcworICov CitzdGF0aWMgYWNwaV9zdGF0dXMgbWRwc19BTFdSKGFjcGlfaGFuZGxlIGhh bmRsZSwgaW50IHJlZywgaW50IHZhbCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyogcmV0KQoreworCXVuaW9uIGFjcGlf b2JqZWN0IGluX29ialsyXTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBh cmdzOworCisJYXJncy5jb3VudCAgICAgICAgICAgICAgPSAyOworCWFyZ3Mu cG9pbnRlciAgICAgICAgICAgID0gaW5fb2JqOworCWluX29ialswXS50eXBl ICAgICAgICAgID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fb2JqWzBdLmlu dGVnZXIudmFsdWUgPSByZWc7CisJaW5fb2JqWzFdLnR5cGUgICAgICAgICAg PSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbl9vYmpbMV0uaW50ZWdlci52YWx1 ZSA9IHZhbDsKKworCXJldHVybiBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFu ZGxlLCAiQUxXUiIsICZhcmdzLCByZXQpOworfQorCitzdGF0aWMgdm9pZCBt ZHBzX2dldF94eShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCogeCwgaW50KiB5 KQoreworCXVuc2lnbmVkIGxvbmcgeF9sbywgeF9oaSwgeV9sbywgeV9oaTsK KworCW1kcHNfQUxSRChtZHBzLmRldmljZS0+aGFuZGxlLCBNRFBTX09VVFhf TCwgJnhfbG8pOworCW1kcHNfQUxSRChtZHBzLmRldmljZS0+aGFuZGxlLCBN RFBTX09VVFhfSCwgJnhfaGkpOworCW1kcHNfQUxSRChtZHBzLmRldmljZS0+ aGFuZGxlLCBNRFBTX09VVFlfTCwgJnlfbG8pOworCW1kcHNfQUxSRChtZHBz LmRldmljZS0+aGFuZGxlLCBNRFBTX09VVFlfSCwgJnlfaGkpOworCisJKngg PSBtZHBzX2dsdWVfYnl0ZXMoeF9oaSwgeF9sbyk7CisJKnkgPSBtZHBzX2ds dWVfYnl0ZXMoeV9oaSwgeV9sbyk7Cit9CisKKy8qKiBLdGhyZWFkIHBvbGxp bmcgZnVuY3Rpb24KKyAqIEBwYXJhbSBkYXRhIHVudXNlZCAtIGhlcmUgdG8g Y29uZm9ybSB0byB0aHJlYWRmbiBwcm90b3R5cGUKKyAqIEByZXR1cm4gMCB1 bnVzZWQgLSBoZXJlIHRvIGNvbmZvcm0gdG8gdGhyZWFkZm4gcHJvdG90eXBl CisgKi8KK3N0YXRpYyBpbnQgbWRwc19tb3VzZV9rdGhyZWFkKHZvaWQgKmRh dGEpCit7CisJaW50IHgsIHk7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxk X3N0b3AoKSkgeworCQltZHBzX2dldF94eShtZHBzLmRldmljZS0+aGFuZGxl LCAmeCwgJnkpOworCisJCS8qIG5lZWQgdG8gaW52ZXJ0IHRoZSBYIGF4aXMg Zm9yIHRoaXMgdG8gbG9vayBuYXR1cmFsICovCisJCWlucHV0X3JlcG9ydF9h YnMobWRwcy5pZGV2LCBBQlNfWCwgLSh4IC0gbWRwcy54Y2FsaWIpKTsKKwkJ aW5wdXRfcmVwb3J0X2FicyhtZHBzLmlkZXYsIEFCU19ZLCB5IC0gbWRwcy55 Y2FsaWIpOworCisJCWlucHV0X3N5bmMobWRwcy5pZGV2KTsKKworCQltc2xl ZXBfaW50ZXJydXB0aWJsZShNRFBTX1BPTExfSU5URVJWQUwpOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWRwc19wb3dl cm9mZihhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJdW5zaWduZWQgbG9uZyBy ZXQ7CisJbWRwcy5pc19vbiA9IDA7CisJbWRwc19BTFdSKGhhbmRsZSwgTURQ U19DVFJMX1JFRzEsIDB4MDAsICZyZXQpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgbWRwc19wb3dlcm9uKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlt ZHBzLmlzX29uID0gMTsKKwltZHBzX19JTkkoaGFuZGxlKTsKK30KKworaW50 IG1kcHNfc3VzcGVuZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIGlu dCBzdGF0ZSkKK3sKKwltZHBzX3Bvd2Vyb2ZmKG1kcHMuZGV2aWNlLT5oYW5k bGUpOworCW1kcHNfbW91c2VfZGlzYWJsZSgpOworCisJcmV0dXJuIDA7Cit9 CisKK2ludCBtZHBzX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZp Y2UsIGludCBzdGF0ZSkKK3sKKwltZHBzX3Bvd2Vyb24obWRwcy5kZXZpY2Ut PmhhbmRsZSk7CisKKwlpZiAobW91c2UpCisJCW1kcHNfbW91c2VfZW5hYmxl KCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzCitt ZHBzX2dldF9yZXNvdXJjZShzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3Vy Y2UsIHZvaWQgKmNvbnRleHQpCit7CisJaWYgKHJlc291cmNlLT50eXBlID09 IEFDUElfUkVTT1VSQ0VfVFlQRV9FWFRFTkRFRF9JUlEpIHsKKwkJc3RydWN0 IGFjcGlfcmVzb3VyY2VfZXh0ZW5kZWRfaXJxKiBpcnE7CisJCXUzMiogZGV2 aWNlX2lycSA9IGNvbnRleHQ7CisKKwkJaXJxID0gJnJlc291cmNlLT5kYXRh LmV4dGVuZGVkX2lycTsKKwkJKmRldmljZV9pcnEgPSBpcnEtPmludGVycnVw dHNbMF07CisJfQorCisJcmV0dXJuIEFFX09LOworfQorCitzdGF0aWMgdm9p ZCBtZHBzX2VudW1fcmVzb3VyY2VzKHN0cnVjdCBhY3BpX2RldmljZSAqIGRl dmljZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBh Y3BpX3dhbGtfcmVzb3VyY2VzKGRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFN RV9fQ1JTLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRwc19n ZXRfcmVzb3VyY2UsICZtZHBzLmlycSk7CisJaWYgKEFDUElfRkFJTFVSRShz dGF0dXMpKQorCQlwcmludGsoS0VSTl9ERUJVRyAibWRwczogRXJyb3IgZ2V0 dGluZyByZXNvdXJjZXNcbiIpOworfQorCitpbnQgbWRwc19hZGQoc3RydWN0 IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7 CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZHBz LmRldmljZSA9IGRldmljZTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShk ZXZpY2UpLCBEUklWRVJfTkFNRSk7CisJc3RyY3B5KGFjcGlfZGV2aWNlX2Ns YXNzKGRldmljZSksIEFDUElfTURQU19DTEFTUyk7CisJYWNwaV9kcml2ZXJf ZGF0YShkZXZpY2UpID0gJm1kcHM7CisKKwltZHBzX0FMUkQoZGV2aWNlLT5o YW5kbGUsIE1EUFNfV0hPX0FNX0ksICZ2YWwpOworCWlmICh2YWwgIT0gTURQ U19JRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJtZHBzOiBBY2NlbGVyb21l dGVyIGNoaXAgbm90IExJUzNMVjAyRHtMLFF9XG4iKTsKKwkJcmV0dXJuIC1F Tk9ERVY7CisJfQorCisJbWRwc19lbnVtX3Jlc291cmNlcyhkZXZpY2UpOwor CW1kcHNfYWRkX2ZzKGRldmljZSk7CisJbWRwc19yZXN1bWUoZGV2aWNlLCAz KTsKKworCWlmIChwb3dlcl9vZmYpCisJCW1kcHNfcG93ZXJvZmYobWRwcy5k ZXZpY2UtPmhhbmRsZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1kcHNf cmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkK K3sKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAo bW91c2UpCisJCW1kcHNfbW91c2VfZGlzYWJsZSgpOworCisJcmV0dXJuIG1k cHNfcmVtb3ZlX2ZzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZHBz X2NhbGlicmF0ZV9tb3VzZSh2b2lkKQoreworCWludCB4LCB5OworCW1kcHNf Z2V0X3h5KG1kcHMuZGV2aWNlLT5oYW5kbGUsICZ4LCAmeSk7CisKKwltZHBz LnhjYWxpYiA9IHg7CisJbWRwcy55Y2FsaWIgPSB5OworfQorCit2b2lkIG1k cHNfbW91c2VfZW5hYmxlKHZvaWQpCit7CisJaWYgKG1kcHMuaWRldikKKwkJ cmV0dXJuOworCisJbWRwcy5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNl KCk7CisJaWYgKCFtZHBzLmlkZXYpCisJCXJldHVybjsKKworCW1kcHNfY2Fs aWJyYXRlX21vdXNlKCk7CisKKwltZHBzLmlkZXYtPm5hbWUgICAgICAgPSAi SFAgTW9iaWxlIERhdGEgUHJvdGVjdGlvbiBTeXN0ZW0iOworCW1kcHMuaWRl di0+aWQuYnVzdHlwZSA9IEJVU19JMkM7CisJbWRwcy5pZGV2LT5pZC52ZW5k b3IgID0gMDsKKworCWlucHV0X3NldF9hYnNfcGFyYW1zKG1kcHMuaWRldiwg QUJTX1gsIC0yMDQ4LCAyMDQ4LCAzLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3Bh cmFtcyhtZHBzLmlkZXYsIEFCU19ZLCAtMjA0OCwgMjA0OCwgMywgMCk7CisK KwlzZXRfYml0KEVWX0FCUywgbWRwcy5pZGV2LT5ldmJpdCk7CisJc2V0X2Jp dChFVl9LRVksIG1kcHMuaWRldi0+ZXZiaXQpOworCXNldF9iaXQoQlROX1RP VUNILCBtZHBzLmlkZXYtPmtleWJpdCk7CisKKwlpZiAoaW5wdXRfcmVnaXN0 ZXJfZGV2aWNlKG1kcHMuaWRldikpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2Uo bWRwcy5pZGV2KTsKKwkJbWRwcy5pZGV2ID0gTlVMTDsKKwkJcmV0dXJuOwor CX0KKworCW1kcHMua3RocmVhZCA9IGt0aHJlYWRfcnVuKG1kcHNfbW91c2Vf a3RocmVhZCwgTlVMTCwgImttZHBzIik7CisJaWYgKElTX0VSUihtZHBzLmt0 aHJlYWQpKSB7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKG1kcHMuaWRl dik7CisJCW1kcHMuaWRldiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwlt b3VzZSA9IDE7Cit9CisKK3ZvaWQgbWRwc19tb3VzZV9kaXNhYmxlKHZvaWQp Cit7CisJaWYgKCFtZHBzLmlkZXYpCisJCXJldHVybjsKKworCWt0aHJlYWRf c3RvcChtZHBzLmt0aHJlYWQpOworCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZp Y2UobWRwcy5pZGV2KTsKKwltZHBzLmlkZXYgPSBOVUxMOworfQorCisvKiBT eXNmcyBzdHVmZiAqLworc3RhdGljIHNzaXplX3QgbWRwc19wb3NpdGlvbl9z aG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwg Y2hhciAqYnVmKQoreworCWludCB4LCB5OworCW1kcHNfZ2V0X3h5KG1kcHMu ZGV2aWNlLT5oYW5kbGUsICZ4LCAmeSk7CisJcmV0dXJuIHNwcmludGYoYnVm LCAiKCVkLCAlZClcbiIsIHgsIHkpOworfQorCitzdGF0aWMgc3NpemVfdCBt ZHBzX3Bvc2l0aW9uM2Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGxv bmcgel9sbywgel9oaTsKKwlpbnQgeCwgeSwgejsKKworCW1kcHNfZ2V0X3h5 KG1kcHMuZGV2aWNlLT5oYW5kbGUsICZ4LCAmeSk7CisKKwltZHBzX0FMUkQo bWRwcy5kZXZpY2UtPmhhbmRsZSwgTURQU19PVVRaX0wsICZ6X2xvKTsKKwlt ZHBzX0FMUkQobWRwcy5kZXZpY2UtPmhhbmRsZSwgTURQU19PVVRaX0gsICZ6 X2hpKTsKKworCXogPSBtZHBzX2dsdWVfYnl0ZXMoel9oaSwgel9sbyk7CisK KwlyZXR1cm4gc3ByaW50ZihidWYsICIoJWQsICVkLCAlZClcbiIsIHgsIHks IHopOworfQorCitzdGF0aWMgc3NpemVfdCBtZHBzX3N0YXRlX3Nob3coc3Ry dWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYp Cit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChtZHBzLmlzX29u ID8gIm9uIiA6ICJvZmYiKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1kcHNf bW91c2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xu IiwgKG1vdXNlID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOworfQorCitz dGF0aWMgc3NpemVfdCBtZHBzX2NhbGlicmF0ZV9zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sK KwlyZXR1cm4gc3ByaW50ZihidWYsICIoJWQsJWQpXG4iLCBtZHBzLnhjYWxp YiwgbWRwcy55Y2FsaWIpOworfQorCitzdGF0aWMgc3NpemVfdCBtZHBzX2Nh bGlicmF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAg ICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCW1kcHNfY2FsaWJyYXRl X21vdXNlKCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVf dCBtZHBzX3JhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGxvbmcgY3RybDsK KwlpbnQgcmF0ZSA9IDA7CisKKwltZHBzX0FMUkQobWRwcy5kZXZpY2UtPmhh bmRsZSwgTURQU19DVFJMX1JFRzEsICZjdHJsKTsKKworCXN3aXRjaCAoY3Ry bCAmIDB4MzApCisJeworCWNhc2UgMHgwMDoKKwkJcmF0ZSA9IDQwOworCQli cmVhazsKKworCWNhc2UgMHgxMDoKKwkJcmF0ZSA9IDE2MDsKKwkJYnJlYWs7 CisKKwljYXNlIDB4MjA6CisJCXJhdGUgPSA2NDA7CisJCWJyZWFrOworCisJ Y2FzZSAweDMwOgorCQlyYXRlID0gMjU2MDsKKwkJYnJlYWs7CisJfQorCisJ cmV0dXJuIHNwcmludGYoYnVmLCAic2FtcGxpbmcgcmF0ZTpcdCVkSHpcbiIs IHJhdGUpOworfQorCitzdGF0aWMgc3NpemVfdCBtZHBzX3N0YXRlX3N0b3Jl KHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpi dWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgc3RhdGU7CisKKwlpZiAoc3Nj YW5mKGJ1ZiwgIiVkIiwgJnN0YXRlKSAhPSAxIHx8IChzdGF0ZSAhPSAxICYm IHN0YXRlICE9IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1kcHMuaXNf b24gPSBzdGF0ZTsKKworCWlmIChtZHBzLmlzX29uKQorCQltZHBzX3Bvd2Vy b24obWRwcy5kZXZpY2UtPmhhbmRsZSk7CisJZWxzZQorCQltZHBzX3Bvd2Vy b2ZmKG1kcHMuZGV2aWNlLT5oYW5kbGUpOworCisJcmV0dXJuIGNvdW50Owor fQorCitzdGF0aWMgc3NpemVfdCBtZHBzX21vdXNlX3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCit7CisJaW50IHRtcDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnRt cCkgIT0gMSB8fCAodG1wICE9IDEgJiYgdG1wICE9IDApKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCW1vdXNlID0gdG1wOworCisJaWYgKG1vdXNlKQorCQlt ZHBzX21vdXNlX2VuYWJsZSgpOworCWVsc2UKKwkJbWRwc19tb3VzZV9kaXNh YmxlKCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0Vf QVRUUihwb3NpdGlvbiwgMDQ0NCwgbWRwc19wb3NpdGlvbl9zaG93LCBOVUxM KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3NpdGlvbjNkLCAwNDQ0LCBtZHBz X3Bvc2l0aW9uM2Rfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIo Y2FsaWJyYXRlLCAwNjQ0LCBtZHBzX2NhbGlicmF0ZV9zaG93LCBtZHBzX2Nh bGlicmF0ZV9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmF0ZSwgMDQ0 NCwgbWRwc19yYXRlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRS KHN0YXRlLCAwNjQ0LCBtZHBzX3N0YXRlX3Nob3csIG1kcHNfc3RhdGVfc3Rv cmUpOworc3RhdGljIERFVklDRV9BVFRSKG1vdXNlLCAwNjQ0LCBtZHBzX21v dXNlX3Nob3csIG1kcHNfbW91c2Vfc3RvcmUpOworCitzdGF0aWMgc3RydWN0 IGF0dHJpYnV0ZSAqbWRwc19hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRy X3Bvc2l0aW9uLmF0dHIsCisJJmRldl9hdHRyX3Bvc2l0aW9uM2QuYXR0ciwK KwkmZGV2X2F0dHJfY2FsaWJyYXRlLmF0dHIsCisJJmRldl9hdHRyX3JhdGUu YXR0ciwKKwkmZGV2X2F0dHJfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfbW91 c2UuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0 ZV9ncm91cCBtZHBzX2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBt ZHBzX2F0dHJpYnV0ZXMKK307CisKK2ludCBtZHBzX2FkZF9mcyhzdHJ1Y3Qg YWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwltZHBzLnBkZXYgPSBwbGF0Zm9y bV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSSVZFUl9OQU1FLCAtMSwgTlVM TCwgMCk7CisJaWYgKElTX0VSUihtZHBzLnBkZXYpKQorCQlyZXR1cm4gUFRS X0VSUihtZHBzLnBkZXYpOworCisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91 cCgmbWRwcy5wZGV2LT5kZXYua29iaiwgJm1kcHNfYXR0cmlidXRlX2dyb3Vw KTsKK30KKworaW50IG1kcHNfcmVtb3ZlX2ZzKHZvaWQpCit7CisJc3lzZnNf cmVtb3ZlX2dyb3VwKCZtZHBzLnBkZXYtPmRldi5rb2JqLCAmbWRwc19hdHRy aWJ1dGVfZ3JvdXApOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1k cHMucGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0 IG1kcHNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCWFjcGlf c3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSAwOworCisJ aWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCisJLyog ZGV2aWNlIGRldGVjdGlvbjogc2VlIGlmIG91ciBkZXZpY2UgaXMgcHJlc2Vu dCAqLworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShOVUxMLCAiXFxfU0Iu QzAwMi5BQ0VMIiwgJmhhbmRsZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0 dXMpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1kcHM6IEhQIE1vYmlsZSBE YXRhIFByb3RlY3Rpb24gU3lzdGVtIDNEIGRldmljZSBub3QgZm91bmRcbiIp OworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBhY3BpX2J1c19y ZWdpc3Rlcl9kcml2ZXIoJm1kcHNfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkK KwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBfX2V4aXQgbWRwc19leGl0X21vZHVsZSh2b2lkKQoreworCWFjcGlfYnVz X3VucmVnaXN0ZXJfZHJpdmVyKCZtZHBzX2RyaXZlcik7Cit9CisKK21vZHVs ZV9pbml0KG1kcHNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQobWRwc19l eGl0X21vZHVsZSk7Cg== ------=_NextPart_000_705b_3b9_7c8b--