From owner-freebsd-arm@FreeBSD.ORG Sat Aug 30 07:37:34 2008 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6345B1065677 for ; Sat, 30 Aug 2008 07:37:34 +0000 (UTC) (envelope-from jacques.fourie@gmail.com) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.157]) by mx1.freebsd.org (Postfix) with ESMTP id 6C2348FC12 for ; Sat, 30 Aug 2008 07:37:33 +0000 (UTC) (envelope-from jacques.fourie@gmail.com) Received: by fg-out-1718.google.com with SMTP id l26so786983fgb.35 for ; Sat, 30 Aug 2008 00:37:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type:references; bh=GzCXuTwipxeulGbQhn58PdgVn8PwGHYub027Jxso8LA=; b=cq6TFpcsRPdnB6n/nzVwgfZ5d7Why0EgprI1eDC/LcChurJQMdyiS4nWJIiI5V9oUk 4QUk829MRYAWcs3rmq1eF5KZSKzohOqgXPWb0gP+X6/CD/T8wmaF00apw3UqqE7umQVc WxKDCFIAdnCaq45Cj3oo6bK9WxjwlsRpWDzSE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:references; b=a9dwAS9tNak/FLdUDLJ9Wep+63zLmiH0coEjwv9fWdyL/8bRvadcWv4ZvoJt4KvEqe r3rg/5Kw4f6JXojpBV0QX29qx7LiDSAVmhG59Fi9pGahaK9DhjrQYZ6UjDTbWtjnKkPn B+5yQI1os6zm78b1e3wFAYTednwXI2vqaz5gg= Received: by 10.103.203.4 with SMTP id f4mr2549607muq.8.1220081851648; Sat, 30 Aug 2008 00:37:31 -0700 (PDT) Received: by 10.103.17.17 with HTTP; Sat, 30 Aug 2008 00:37:31 -0700 (PDT) Message-ID: Date: Sat, 30 Aug 2008 09:37:31 +0200 From: "Jacques Fourie" To: "Stanislav Sedov" In-Reply-To: <20080829231522.201a591b.stas@FreeBSD.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_26427_13643661.1220081851637" References: <20080829231522.201a591b.stas@FreeBSD.org> Cc: freebsd-arm@freebsd.org Subject: Re: MMC Controller driver for PXA255 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 30 Aug 2008 07:37:34 -0000 ------=_Part_26427_13643661.1220081851637 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline > On Fri, 29 Aug 2008 18:20:16 +0200 > "Jacques Fourie" mentioned: > >> Hi, >> >> I've written a driver for the MMC controller found on the Intel Xscale >> PXA255 (as found on the Gumstix Connex). It seems to work OK - I've >> tested with a range of SD cards. The driver works in PIO mode (still >> busy to debug some DMA issues) and on my Gumstix Connex I get around >> 400kB/s. If anyone wants to review the code for inclusion let me know >> and I'll be happy to provide it. >> > > Great work! > Upload it somewhere or post here, so we can take a look. > > Thanks! > -- > Stanislav Sedov > ST4096-RIPE > Hi, I previously sent Warner some mods but forgot to cc the list. Here is a diff against current (svn revision 182470). I also made some minor mods to the mmc stack that I'll post as soon as I've cleaned them up - they contain a lot of extra printf's at the moment. Jacques ------=_Part_26427_13643661.1220081851637 Content-Type: text/plain; name=diff_arm.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkhwpo1x1 Content-Disposition: attachment; filename=diff_arm.txt ZGlmZiAteCAnKnN2bionIC11IC1OIC1kIC1yIGZic2RfY3VycmVudF8yMDA4MDgzMC9zcmMvc3lz L2FybS94c2NhbGUvcHhhL2ZpbGVzLnB4YSBmYnNkX2pmX3ByaXYvc3JjL3N5cy9hcm0veHNjYWxl L3B4YS9maWxlcy5weGEKLS0tIGZic2RfY3VycmVudF8yMDA4MDgzMC9zcmMvc3lzL2FybS94c2Nh bGUvcHhhL2ZpbGVzLnB4YQkyMDA4LTA4LTMwIDA4OjQzOjU3LjAwMDAwMDAwMCArMDIwMAorKysg ZmJzZF9qZl9wcml2L3NyYy9zeXMvYXJtL3hzY2FsZS9weGEvZmlsZXMucHhhCTIwMDgtMDgtMjUg MTY6MzE6NDkuMDAwMDAwMDAwICswMjAwCkBAIC0xLDQgKzEsNCBAQAotIyAkRnJlZUJTRDogaGVh ZC9zeXMvYXJtL3hzY2FsZS9weGEvZmlsZXMucHhhIDE3OTcwMCAyMDA4LTA2LTEwIDAzOjQ0OjE0 WiBrZXZsbyAkCisjICRGcmVlQlNEJAogCiBhcm0vYXJtL2J1c19zcGFjZV9nZW5lcmljLmMJCXN0 YW5kYXJkCiBhcm0vYXJtL2NwdWZ1bmNfYXNtX3hzY2FsZS5TCQlzdGFuZGFyZApAQCAtMTEsOCAr MTEsMTIgQEAKIGFybS94c2NhbGUvcHhhL3B4YV9zbWkuYwkJc3RhbmRhcmQKIGFybS94c2NhbGUv cHhhL3B4YV9zcGFjZS5jCQlzdGFuZGFyZAogYXJtL3hzY2FsZS9weGEvcHhhX3RpbWVyLmMJCXN0 YW5kYXJkCithcm0veHNjYWxlL3B4YS9weGFfY2xrX21nci5jCQlzdGFuZGFyZAorYXJtL3hzY2Fs ZS9weGEvcHhhX2RtYWMuYwkJc3RhbmRhcmQKIAogYXJtL3hzY2FsZS9weGEvdWFydF9idXNfcHhh LmMJCW9wdGlvbmFsIHVhcnQKIGFybS94c2NhbGUvcHhhL3VhcnRfY3B1X3B4YS5jCQlvcHRpb25h bCB1YXJ0CiAKIGFybS94c2NhbGUvcHhhL2lmX3NtY19zbWkuYwkJb3B0aW9uYWwgc21jCisKK2Fy bS94c2NhbGUvcHhhL3B4YV9tY2kuYwkJb3B0aW9uYWwgcHhhX21jaQpkaWZmIC14ICcqc3ZuKicg LXUgLU4gLWQgLXIgZmJzZF9jdXJyZW50XzIwMDgwODMwL3NyYy9zeXMvYXJtL3hzY2FsZS9weGEv cHhhX2Nsa19tZ3IuYyBmYnNkX2pmX3ByaXYvc3JjL3N5cy9hcm0veHNjYWxlL3B4YS9weGFfY2xr X21nci5jCi0tLSBmYnNkX2N1cnJlbnRfMjAwODA4MzAvc3JjL3N5cy9hcm0veHNjYWxlL3B4YS9w eGFfY2xrX21nci5jCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBmYnNk X2pmX3ByaXYvc3JjL3N5cy9hcm0veHNjYWxlL3B4YS9weGFfY2xrX21nci5jCTIwMDgtMDgtMjUg MTM6MjA6NDMuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTU3IEBACisvKi0KKyAqIENvcHly aWdodCAoYykgMjAwOCBKYWNxdWVzIEZvdXJpZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl ZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5o PgorI2luY2x1ZGUgPHN5cy9iaW8uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8 c3lzL2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5l bC5oPgorI2luY2x1ZGUgPHN5cy9rdGhyZWFkLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNp bmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUg PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9yZXNv dXJjZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Cisj aW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZXRjLmg+CisjaW5jbHVkZSA8 c3lzL3dhdGNoZG9nLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1h Y2hpbmUvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9jcHVmdW5jLmg+CisjaW5jbHVkZSA8bWFj aGluZS9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxt YWNoaW5lL2ludHIuaD4KKyNpbmNsdWRlIDxhcm0veHNjYWxlL3B4YS9weGFyZWcuaD4KKyNpbmNs dWRlIDxhcm0veHNjYWxlL3B4YS9weGF2YXIuaD4KKworc3RydWN0IHB4YV9jbGtfbWdyX3NvZnRj IHsKKwlkZXZpY2VfdCBkZXY7CisJc3RydWN0IHJlc291cmNlCSptZW1fcmVzOwkKK307CisKK3N0 YXRpYyBzdHJ1Y3QgcHhhX2Nsa19tZ3Jfc29mdGMgKnB4YV9jbGtfbWdyX3NvZnRjID0gTlVMTDsK Kworc3RhdGljIGludCBweGFfY2xrX21ncl9hY3RpdmF0ZShkZXZpY2VfdCBkZXYpOworCitzdGF0 aWMgdm9pZCBweGFfY2xrX21ncl9kZWFjdGl2YXRlKGRldmljZV90IGRldik7CisKK3N0YXRpYyBp bnQKK3B4YV9jbGtfbWdyX3Byb2JlKGRldmljZV90IGRldikKK3sKKworCWRldmljZV9zZXRfZGVz YyhkZXYsICJQWEEgY2xvY2sgbWFuYWdlciIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBp bnQKK3B4YV9jbGtfbWdyX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB4YV9jbGtf bWdyX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlpbnQgZXJyOworCisJc2Mt PmRldiA9IGRldjsKKwlweGFfY2xrX21ncl9zb2Z0YyA9IHNjOworCWVyciA9IHB4YV9jbGtfbWdy X2FjdGl2YXRlKGRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBidXNfZ2Vu ZXJpY19hdHRhY2goZGV2KTsKK291dDo7CisJaWYgKGVycikKKwkJcHhhX2Nsa19tZ3JfZGVhY3Rp dmF0ZShkZXYpOworCXJldHVybiAoZXJyKTsKK30KKworc3RhdGljIGludAorcHhhX2Nsa19tZ3Jf YWN0aXZhdGUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBweGFfY2xrX21ncl9zb2Z0YyAqc2M7 CisJaW50IHJpZDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXJpZCA9IDA7CisJ c2MtPm1lbV9yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlks ICZyaWQsCisJICAgIFJGX0FDVElWRSk7CisJaWYgKHNjLT5tZW1fcmVzID09IE5VTEwpCisJCWdv dG8gZXJyb3V0OworCXJldHVybiAoMCk7CitlcnJvdXQ6CisJcHhhX2Nsa19tZ3JfZGVhY3RpdmF0 ZShkZXYpOworCXJldHVybiAoRU5PTUVNKTsKK30KKworc3RhdGljIHZvaWQKK3B4YV9jbGtfbWdy X2RlYWN0aXZhdGUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBweGFfY2xrX21ncl9zb2Z0YyAq c2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlidXNfZ2VuZXJpY19kZXRhY2go c2MtPmRldik7CisJaWYgKHNjLT5tZW1fcmVzKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYs IFNZU19SRVNfTUVNT1JZLAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5tZW1fcmVzKSwgc2MtPm1l bV9yZXMpOworCXNjLT5tZW1fcmVzID0gMDsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3B4YV9zZXRf Y2tlbih1aW50MzJfdCBjbG9jaywgdWludDMyX3QgZW5hYmxlKQoreworCXVpbnQzMl90IHZhbDsK KwlzdHJ1Y3QgcHhhX2Nsa19tZ3Jfc29mdGMgKnNjOworCisJc2MgPSBweGFfY2xrX21ncl9zb2Z0 YzsKKwkvKiBSZWFkIGN1cnJlbnQgdmFsdWUgKi8KKwl2YWwgPSBidXNfcmVhZF80KHNjLT5tZW1f cmVzLCBDTEtNQU5fQ0tFTik7CisJaWYgKGVuYWJsZSkKKwkJdmFsIHw9IGNsb2NrOworCWVsc2UJ CisJCXZhbCAmPSB+Y2xvY2s7CisJYnVzX3dyaXRlXzQoc2MtPm1lbV9yZXMsIENMS01BTl9DS0VO LCB2YWwpOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IHB4YV9jbGtfbWdyX21ldGhvZHNb XSA9IHsKKwkvKiBkZXZpY2VfaWYgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCBweGFfY2xr X21ncl9wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gsIHB4YV9jbGtfbWdyX2F0dGFj aCksCisJezAsIDB9LAorfTsKKworc3RhdGljIGRyaXZlcl90IHB4YV9jbGtfbWdyX2RyaXZlciA9 IHsKKwkicHhhX2Nsa19tZ3IiLAorCXB4YV9jbGtfbWdyX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVj dCBweGFfY2xrX21ncl9zb2Z0YyksCit9Oworc3RhdGljIGRldmNsYXNzX3QgcHhhX2Nsa19tZ3Jf ZGV2Y2xhc3M7CisKK0RSSVZFUl9NT0RVTEUocHhhX2Nsa19tZ3IsIHB4YSwgcHhhX2Nsa19tZ3Jf ZHJpdmVyLCBweGFfY2xrX21ncl9kZXZjbGFzcywgMCwgMCk7CmRpZmYgLXggJypzdm4qJyAtdSAt TiAtZCAtciBmYnNkX2N1cnJlbnRfMjAwODA4MzAvc3JjL3N5cy9hcm0veHNjYWxlL3B4YS9weGFf ZG1hYy5jIGZic2RfamZfcHJpdi9zcmMvc3lzL2FybS94c2NhbGUvcHhhL3B4YV9kbWFjLmMKLS0t IGZic2RfY3VycmVudF8yMDA4MDgzMC9zcmMvc3lzL2FybS94c2NhbGUvcHhhL3B4YV9kbWFjLmMJ MTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIGZic2RfamZfcHJpdi9zcmMv c3lzL2FybS94c2NhbGUvcHhhL3B4YV9kbWFjLmMJMjAwOC0wOC0yOCAxMTozMzozOS4wMDAwMDAw MDAgKzAyMDAKQEAgLTAsMCArMSwzNDUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA2IEJl bm5vIFJpY2UuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT IE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAor ICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj aW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRl IDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVz Lmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5j bHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxz eXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHN5cy90aW1ldGMu aD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgor CisjaW5jbHVkZSA8YXJtL3hzY2FsZS9weGEvcHhhdmFyLmg+CisjaW5jbHVkZSA8YXJtL3hzY2Fs ZS9weGEvcHhhcmVnLmg+CisKK3N0cnVjdCBkbWFjX2NoYW5uZWwgeworCWludAlkY19pZDsKKwlp bnQJZGNfYWxsb2NhdGVkOworCWludAlkY19idXN5OworCWludAlkY19lcnJvcjsKK307CisKK3N0 cnVjdCBweGFfZG1hY19zb2Z0YyB7CisJc3RydWN0IHJlc291cmNlICoJcGRfcmVzWzJdOworCWRl dmljZV90CQlwZF9kZXY7CisJYnVzX3NwYWNlX3RhZ190CQlwZF9ic3Q7CisJYnVzX3NwYWNlX2hh bmRsZV90CXBkX2JzaDsKKwlzdHJ1Y3QgbXR4IAkJcGRfbXR4OworCXN0cnVjdCBkbWFjX2NoYW5u ZWwJcGRfY2hhbm5lbHNbRE1BQ19OX0NIQU5ORUxTXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVz b3VyY2Vfc3BlYyBweGFfZG1hY19zcGVjW10gPSB7CisJeyBTWVNfUkVTX01FTU9SWSwJMCwJUkZf QUNUSVZFIH0sCisJeyBTWVNfUkVTX0lSUSwJCTAsCVJGX0FDVElWRSB9LAorCXsgLTEsIDAgfQor fTsKKworc3RhdGljIHN0cnVjdCBweGFfZG1hY19zb2Z0YyAqZG1hY19zb2Z0YyA9IE5VTEw7CisK K3N0YXRpYyBpbnQJcHhhX2RtYWNfcHJvYmUoZGV2aWNlX3QpOworc3RhdGljIGludAlweGFfZG1h Y19hdHRhY2goZGV2aWNlX3QpOworCitzdGF0aWMgZHJpdmVyX2ZpbHRlcl90CXB4YV9kbWFjX2lu dHI7CisKK3N0YXRpYyBpbnQKK3B4YV9kbWFjX3Byb2JlKGRldmljZV90IGRldikKK3sKKworCWRl dmljZV9zZXRfZGVzYyhkZXYsICJETUEgQ29udHJvbGxlciIpOworCXJldHVybiAoMCk7Cit9CisK K3N0YXRpYyBpbnQKK3B4YV9kbWFjX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJaW50CWVycm9y LCBpOworCXZvaWQJKmlobDsKKwlzdHJ1Y3QJcHhhX2RtYWNfc29mdGMgKnNjOworCisJc2MgPSAo c3RydWN0IHB4YV9kbWFjX3NvZnRjICopZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYgKGRt YWNfc29mdGMgIT0gTlVMTCkKKwkJcmV0dXJuIChFTlhJTyk7CisJZG1hY19zb2Z0YyA9IHNjOwor CisJZXJyb3IgPSBidXNfYWxsb2NfcmVzb3VyY2VzKGRldiwgcHhhX2RtYWNfc3BlYywgc2MtPnBk X3Jlcyk7CisJaWYgKGVycm9yKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFs bG9jYXRlIHJlc291cmNlc1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWlmIChidXNf c2V0dXBfaW50cihkZXYsIHNjLT5wZF9yZXNbMV0sIElOVFJfVFlQRV9NSVNDLCBweGFfZG1hY19p bnRyLAorCSAgICBOVUxMLCBOVUxMLCAmaWhsKSAhPSAwKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291 cmNlcyhkZXYsIHB4YV9kbWFjX3NwZWMsIHNjLT5wZF9yZXMpOworCQlkZXZpY2VfcHJpbnRmKGRl diwgImNvdWxkIG5vdCBzZXQgdXAgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJ fQorCisJc2MtPnBkX2JzdCA9IHJtYW5fZ2V0X2J1c3RhZyhzYy0+cGRfcmVzWzBdKTsKKwlzYy0+ cGRfYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5wZF9yZXNbMF0pOworCisJZm9yIChpID0g MDsgaSA8IERNQUNfTl9DSEFOTkVMUzsgaSsrKSB7CisJCXNjLT5wZF9jaGFubmVsc1tpXS5kY19p ZCA9IGk7CisJCXNjLT5wZF9jaGFubmVsc1tpXS5kY19hbGxvY2F0ZWQgPSAwOworCQlzYy0+cGRf Y2hhbm5lbHNbaV0uZGNfYnVzeSA9IDA7CisJCXNjLT5wZF9jaGFubmVsc1tpXS5kY19lcnJvciA9 IDA7CisJfQorCisJLyoKKwkgKiBXZSB1c2UgYSBzcGluIGxvY2sgc28gd2UgY2FuIGxvY2sgaXQg aW4gdGhlIChmYXN0KSBpbnRlcnJ1cHQgaGFuZGxlci4KKwkgKi8KKwltdHhfaW5pdCgmc2MtPnBk X210eCwgImRtYWMgbXV0ZXgiLCBOVUxMLCBNVFhfU1BJTik7CisKKwlzYy0+cGRfZGV2ID0gZGV2 OworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcHhhX2RtYWNfaW50cih2b2lkICph cmcpCit7CisJdWludDMyX3QJZGludCwgZGNzcjsKKwlpbnQJCWk7CisJc3RydWN0CQlweGFfZG1h Y19zb2Z0YyAqc2M7CisKKwkodm9pZClhcmc7CisKKwlzYyA9IGRtYWNfc29mdGM7CisKKwlkaW50 ID0gYnVzX3NwYWNlX3JlYWRfNChzYy0+cGRfYnN0LCBzYy0+cGRfYnNoLCBETUFDX0RJTlQpOwor CisJLy9wcmludGYoIkRNQUMgaW50ciA6ICUwOFhcbiIsIGRpbnQpOworCQorCWZvciAoaSA9IDA7 IGkgPCBETUFDX05fQ0hBTk5FTFM7IGkrKykgeworCQlpZiAoZGludCAmICgxIDw8IGkpKSB7CisJ CQlkY3NyID0gYnVzX3NwYWNlX3JlYWRfNChzYy0+cGRfYnN0LCBzYy0+cGRfYnNoLAorCQkJICAg IERNQUNfRENTUihpKSk7CisJCQltdHhfbG9ja19zcGluKCZzYy0+cGRfbXR4KTsKKwkJCWlmICgo ZGNzciAmIERDU1JfQlVTRVJSSU5UUikgIT0gMCkgeworCQkJCXNjLT5wZF9jaGFubmVsc1tpXS5k Y19lcnJvciA9IDE7CisJCQl9CisJCQlzYy0+cGRfY2hhbm5lbHNbaV0uZGNfYnVzeSA9IDA7CisJ CQltdHhfdW5sb2NrX3NwaW4oJnNjLT5wZF9tdHgpOworCQkJd2FrZXVwX29uZSgmKHNjLT5wZF9j aGFubmVsc1tpXSkpOworCQkJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPnBkX2JzdCwgc2MtPnBkX2Jz aCwKKwkJCSAgICBETUFDX0RDU1IoaSksIGRjc3IpOworCQl9CisJfQorCQorCXJldHVybiAoRklM VEVSX0hBTkRMRUQpOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IHB4YV9kbWFjX21ldGhv ZHNbXSA9IHsKKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCBweGFfZG1hY19wcm9iZSksCisJREVW TUVUSE9EKGRldmljZV9hdHRhY2gsIHB4YV9kbWFjX2F0dGFjaCksCisKKwl7MCwgMH0KK307CisK K3N0YXRpYyBkcml2ZXJfdCBweGFfZG1hY19kcml2ZXIgPSB7CisJImRtYWMiLAorCXB4YV9kbWFj X21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBweGFfZG1hY19zb2Z0YyksCit9OworCitzdGF0aWMg ZGV2Y2xhc3NfdCBweGFfZG1hY19kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShweGFkbWFjLCBw eGEsIHB4YV9kbWFjX2RyaXZlciwgcHhhX2RtYWNfZGV2Y2xhc3MsIDAsIDApOworCitpbnQKK3B4 YV9kbWFjX2FsbG9jKGludCBwcmlvcml0eSwgc3RydWN0IGRtYWNfY2hhbm5lbCAqKmNoYW5uZWws IGludCB0aW1lb3V0KQoreworCWludAlpLCBzdGFydCwgZW5kOworCXN0cnVjdAlweGFfZG1hY19z b2Z0YyAqc2M7CisKKwlzYyA9IGRtYWNfc29mdGM7CisKKwlpZiAocHJpb3JpdHkgPCBETUFDX1BS SU9SSVRZX0hJR0hFU1QgJiYgcHJpb3JpdHkgPiBETUFDX1BSSU9SSVRZX0xPVykgeworCQkqY2hh bm5lbCA9IE5VTEw7CisJCXJldHVybiAoRURPT0ZVUyk7CisJfQorCisJc3dpdGNoIChwcmlvcml0 eSkgeworCWNhc2UgRE1BQ19QUklPUklUWV9ISUdIRVNUOgorCQlzdGFydCA9IDA7CisJCWVuZCA9 IDM7CisJCWJyZWFrOworCisJY2FzZSBETUFDX1BSSU9SSVRZX0hJR0g6CisJCXN0YXJ0ID0gNDsK KwkJZW5kID0gNzsKKwkJYnJlYWs7CisKKwljYXNlIERNQUNfUFJJT1JJVFlfTE9XOgorCWRlZmF1 bHQ6CisJCXN0YXJ0ID0gODsKKwkJZW5kID0gMTU7CisJCWJyZWFrOworCX0KKworCW10eF9sb2Nr X3NwaW4oJnNjLT5wZF9tdHgpOworCityZXRyeToKKwlmb3IgKGkgPSBzdGFydDsgaSA8PSBlbmQ7 IGkrKykgeworCQlpZiAoc2MtPnBkX2NoYW5uZWxzW2ldLmRjX2FsbG9jYXRlZCA9PSAwKSB7CisJ CQlzYy0+cGRfY2hhbm5lbHNbaV0uZGNfYWxsb2NhdGVkID0gMTsKKwkJCW10eF91bmxvY2tfc3Bp bigmc2MtPnBkX210eCk7CisJCQkqY2hhbm5lbCA9ICYoc2MtPnBkX2NoYW5uZWxzW2ldKTsKKwkJ CXJldHVybiAoMCk7CisJCX0KKwl9CisKKwlpZiAodGltZW91dCkgeworCQltc2xlZXAoc2MsICZz Yy0+cGRfbXR4LCAwLCAiZG1hYWxjIiwKKwkJICAgIHRpbWVvdXQgPT0gLTEgPyAwIDogdGltZW91 dCk7CisJCWlmICh0aW1lb3V0ICE9IC0xKQorCQkJdGltZW91dCA9IDA7CisJCWdvdG8gcmV0cnk7 CisJfQorCisJbXR4X3VubG9ja19zcGluKCZzYy0+cGRfbXR4KTsKKwlyZXR1cm4gKEVOT1NQQyk7 Cit9CisKK3ZvaWQKK3B4YV9kbWFjX3JlbGVhc2Uoc3RydWN0IGRtYWNfY2hhbm5lbCAqY2hhbm5l bCkKK3sKKwlzdHJ1Y3QJcHhhX2RtYWNfc29mdGMgKnNjOworCisJc2MgPSBkbWFjX3NvZnRjOwor CisJbXR4X2xvY2tfc3Bpbigmc2MtPnBkX210eCk7CisJY2hhbm5lbC0+ZGNfYWxsb2NhdGVkID0g MDsKKwltdHhfdW5sb2NrX3NwaW4oJnNjLT5wZF9tdHgpOworCXdha2V1cF9vbmUoc2MpOworfQor CitpbnQKK3B4YV9kbWFjX3RyYW5zZmVyKHN0cnVjdCBkbWFjX2NoYW5uZWwgKmNoYW5uZWwsIGJ1 c19hZGRyX3QgZGVzYykKK3sKKwlzdHJ1Y3QJCXB4YV9kbWFjX3NvZnRjICpzYzsKKworCXNjID0g ZG1hY19zb2Z0YzsKKworCWlmICgoZGVzYyAmIDB4ZikgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwp OworCWlmIChjaGFubmVsLT5kY19idXN5ID09IDEpCisJCXJldHVybiAoRUJVU1kpOworCisJbXR4 X2xvY2tfc3Bpbigmc2MtPnBkX210eCk7CisKKwljaGFubmVsLT5kY19lcnJvciA9IDA7CisKKwli dXNfc3BhY2Vfd3JpdGVfNChzYy0+cGRfYnN0LCBzYy0+cGRfYnNoLCBETUFDX0REQURSKGNoYW5u ZWwtPmRjX2lkKSwKKwkgICAgZGVzYyk7CisJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPnBkX2JzdCwg c2MtPnBkX2JzaCwgRE1BQ19EQ1NSKGNoYW5uZWwtPmRjX2lkKSwKKwkgICAgRENTUl9CVVNFUlJJ TlRSfERDU1JfRU5ESU5UUnxEQ1NSX1JVTik7CisKKwljaGFubmVsLT5kY19idXN5ID0gMTsKKwor CW10eF91bmxvY2tfc3Bpbigmc2MtPnBkX210eCk7CisJcmV0dXJuICgwKTsKK30KKworaW50Citw eGFfZG1hY190cmFuc2Zlcl9zaW5nbGUoc3RydWN0IGRtYWNfY2hhbm5lbCAqY2hhbm5lbCwgYnVz X2FkZHJfdCBzb3VyY2UsCisgICAgYnVzX2FkZHJfdCB0YXJnZXQsIHVpbnQzMl90IGNvbW1hbmQp Cit7CisJc3RydWN0CQlweGFfZG1hY19zb2Z0YyAqc2M7CisJdWludDMyX3QJZGNzcjsKKworCXNj ID0gZG1hY19zb2Z0YzsKKworCWlmIChjaGFubmVsLT5kY19idXN5ID09IDEpCisJCXJldHVybiAo RUJVU1kpOworCisJbXR4X2xvY2tfc3Bpbigmc2MtPnBkX210eCk7CisKKwljaGFubmVsLT5kY19l cnJvciA9IDA7CisKKwlkY3NyID0gYnVzX3NwYWNlX3JlYWRfNChzYy0+cGRfYnN0LCBzYy0+cGRf YnNoLAorCSAgICBETUFDX0RDU1IoY2hhbm5lbC0+ZGNfaWQpKTsKKwlkY3NyICY9IH5EQ1NSX1JV TjsKKwlkY3NyIHw9IERDU1JfTk9ERVNDRkVUQ0g7CisKKwkvKiBJbnRlcnJ1cHQgd2hlbiB0cmFu c2ZlciBpcyBjb21wbGV0ZSAqLworCWNvbW1hbmQgfD0gRENNRF9FTkRJUlFFTjsKKworCWJ1c19z cGFjZV93cml0ZV80KHNjLT5wZF9ic3QsIHNjLT5wZF9ic2gsIERNQUNfRENTUihjaGFubmVsLT5k Y19pZCksCisJICAgIGRjc3IpOworCWJ1c19zcGFjZV93cml0ZV80KHNjLT5wZF9ic3QsIHNjLT5w ZF9ic2gsIERNQUNfRFNBRFIoY2hhbm5lbC0+ZGNfaWQpLAorCSAgICBzb3VyY2UpOworCWJ1c19z cGFjZV93cml0ZV80KHNjLT5wZF9ic3QsIHNjLT5wZF9ic2gsIERNQUNfRFRBRFIoY2hhbm5lbC0+ ZGNfaWQpLAorCSAgICB0YXJnZXQpOworCWJ1c19zcGFjZV93cml0ZV80KHNjLT5wZF9ic3QsIHNj LT5wZF9ic2gsIERNQUNfRENNRChjaGFubmVsLT5kY19pZCksCisJICAgIGNvbW1hbmQpOworCWRj c3IgfD0gRENTUl9SVU4gfCBEQ1NSX0JVU0VSUklOVFIgfCBEQ1NSX0VORElOVFI7CisJYnVzX3Nw YWNlX3dyaXRlXzQoc2MtPnBkX2JzdCwgc2MtPnBkX2JzaCwgRE1BQ19EQ1NSKGNoYW5uZWwtPmRj X2lkKSwKKwkgICAgZGNzcik7CisKKwljaGFubmVsLT5kY19idXN5ID0gMTsKKworCW10eF91bmxv Y2tfc3Bpbigmc2MtPnBkX210eCk7CisJcmV0dXJuICgwKTsKK30KKwordm9pZAorcHhhX2RtYWNf Y2hhbm5lbF9tYXBfdmFsaWQoc3RydWN0IGRtYWNfY2hhbm5lbCAqY2hhbm5lbCwgdWludDMyX3Qg bWFwX3JlZykKK3sKKwl1aW50MzJfdCB2YWw7CisJc3RydWN0CQlweGFfZG1hY19zb2Z0YyAqc2Mg PSBkbWFjX3NvZnRjOworCisJdmFsID0gRFJDTVJfTUFQVkxEIHwgY2hhbm5lbC0+ZGNfaWQ7CisJ YnVzX3NwYWNlX3dyaXRlXzQoc2MtPnBkX2JzdCwgc2MtPnBkX2JzaCwgRE1BQ19EUkNNUihtYXBf cmVnKSwgdmFsKTsKK30KKwordm9pZAorcHhhX2RtYWNfY2hhbm5lbF9tYXBfaW52YWxpZChzdHJ1 Y3QgZG1hY19jaGFubmVsICpjaGFubmVsLCB1aW50MzJfdCBtYXBfcmVnKQoreworCXN0cnVjdAkJ cHhhX2RtYWNfc29mdGMgKnNjID0gZG1hY19zb2Z0YzsKKworCWJ1c19zcGFjZV93cml0ZV80KHNj LT5wZF9ic3QsIHNjLT5wZF9ic2gsIERNQUNfRFJDTVIobWFwX3JlZyksIDApOworfQorCitpbnQK K3B4YV9kbWFjX3RyYW5zZmVyX2RvbmUoc3RydWN0IGRtYWNfY2hhbm5lbCAqY2hhbm5lbCkKK3sK KworCXJldHVybiAoIWNoYW5uZWwtPmRjX2J1c3kpOworfQorCitpbnQKK3B4YV9kbWFjX3RyYW5z ZmVyX2ZhaWxlZChzdHJ1Y3QgZG1hY19jaGFubmVsICpjaGFubmVsKQoreworCisJcmV0dXJuIChj aGFubmVsLT5kY19lcnJvcik7Cit9CmRpZmYgLXggJypzdm4qJyAtdSAtTiAtZCAtciBmYnNkX2N1 cnJlbnRfMjAwODA4MzAvc3JjL3N5cy9hcm0veHNjYWxlL3B4YS9weGFfbWNpLmMgZmJzZF9qZl9w cml2L3NyYy9zeXMvYXJtL3hzY2FsZS9weGEvcHhhX21jaS5jCi0tLSBmYnNkX2N1cnJlbnRfMjAw ODA4MzAvc3JjL3N5cy9hcm0veHNjYWxlL3B4YS9weGFfbWNpLmMJMTk3MC0wMS0wMSAwMjowMDow MC4wMDAwMDAwMDAgKzAyMDAKKysrIGZic2RfamZfcHJpdi9zcmMvc3lzL2FybS94c2NhbGUvcHhh L3B4YV9tY2kuYwkyMDA4LTA4LTI5IDE4OjA5OjEzLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsx LDg0OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSmFjcXVlcyBGb3VyaWUuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2Nk ZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4K KyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYmlvLmg+CisjaW5jbHVkZSA8 c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2VuZGlhbi5o PgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RocmVhZC5oPgorI2lu Y2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5 cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUu aD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2lu Y2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lz L3RpbWV0Yy5oPgorI2luY2x1ZGUgPHN5cy93YXRjaGRvZy5oPgorCisjaW5jbHVkZSA8bWFjaGlu ZS9idXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1 ZnVuYy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxtYWNoaW5l L2ZyYW1lLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisjaW5jbHVkZSA8YXJtL3hzY2Fs ZS9weGEvcHhhcmVnLmg+CisjaW5jbHVkZSA8YXJtL3hzY2FsZS9weGEvcHhhdmFyLmg+CisjaW5j bHVkZSA8ZGV2L21tYy9icmlkZ2UuaD4KKyNpbmNsdWRlIDxkZXYvbW1jL21tY3JlZy5oPgorI2lu Y2x1ZGUgPGRldi9tbWMvbW1jYnJ2YXIuaD4KKworI2luY2x1ZGUgIm1tY2JyX2lmLmgiCisKKy8v I2RlZmluZSBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgLi4uKSBwcmlu dGYoZm10LCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdCwgLi4uKQorI2Vu ZGlmCisKKyNkZWZpbmUgQ0xPQ0tSQVRFX01BWAkyMDAwMDAwMAorI2RlZmluZSBDTE9DS1JBVEVf TUlOCTMxMjUwMAorI2RlZmluZSBDTE9DS1JBVEUJQ0xPQ0tSQVRFX01BWCAKKyNkZWZpbmUgQkJT WgkJNTEyCisKK3N0cnVjdCBweGFfbWNpX3NvZnRjIHsKKwl2b2lkICppbnRyaGFuZDsJCQkKKwlk ZXZpY2VfdCBkZXY7CisJaW50IGZsYWdzOworI2RlZmluZSBDTURfU1RBUlRFRAkxCisjZGVmaW5l IFNUT1BfU1RBUlRFRAkyCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzOwkKKwlzdHJ1Y3QgcmVz b3VyY2UJKm1lbV9yZXM7CQorCXN0cnVjdCBtdHggc2NfbXR4OworCXN0cnVjdCBtbWNfaG9zdCBo b3N0OworCWludCBidXNfYnVzeTsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3Qg bW1jX2NvbW1hbmQgKmN1cmNtZDsKKwljaGFyIGJvdW5jZV9idWZmZXJbQkJTWl07CisJdWludDMy X3QgY2xvY2tyYXRlOworCXVpbnQzMl90IGltYXNrOworCXVpbnQzMl90IGNtZGF0OworCWVudW0g bW1jX3Bvd2VyX21vZGUgcG93ZXJfbW9kZTsKKwl1aW50MzJfdCB4ZmVycmVkOworfTsKKworc3Rh dGljIGlubGluZSB1aW50OF90CitSRDEoc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjLCBidXNfc2l6 ZV90IG9mZikKK3sKKwlyZXR1cm4gYnVzX3JlYWRfMShzYy0+bWVtX3Jlcywgb2ZmKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkCitXUjEoc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjLCBidXNfc2l6 ZV90IG9mZiwgdWludDhfdCB2YWwpCit7CisJYnVzX3dyaXRlXzEoc2MtPm1lbV9yZXMsIG9mZiwg dmFsKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdAorUkQ0KHN0cnVjdCBweGFfbWNpX3Nv ZnRjICpzYywgYnVzX3NpemVfdCBvZmYpCit7CisJcmV0dXJuIGJ1c19yZWFkXzQoc2MtPm1lbV9y ZXMsIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorV1I0KHN0cnVjdCBweGFfbWNpX3Nv ZnRjICpzYywgYnVzX3NpemVfdCBvZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlidXNfd3JpdGVfNChz Yy0+bWVtX3Jlcywgb2ZmLCB2YWwpOworfQorCisvKiBidXMgZW50cnkgcG9pbnRzICovCitzdGF0 aWMgaW50IHB4YV9tY2lfcHJvYmUoZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBpbnQgcHhhX21jaV9h dHRhY2goZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyB2b2lkIHB4YV9tY2lfaW50cih2b2lkICopOwor CisvKiBoZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgcHhhX21jaV9hY3RpdmF0ZShkZXZp Y2VfdCBkZXYpOworc3RhdGljIHZvaWQgcHhhX21jaV9kZWFjdGl2YXRlKGRldmljZV90IGRldik7 CisKKyNkZWZpbmUgUFhBX01DSV9MT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4KQor I2RlZmluZQlQWEFfTUNJX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+c2NfbXR4KQor I2RlZmluZSBQWEFfTUNJX0xPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHgs IGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLCBcCisJICAgICJtY2kiLCBNVFhfREVGKQor I2RlZmluZSBQWEFfTUNJX0xPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210 eCk7CisjZGVmaW5lIFBYQV9NQ0lfQVNTRVJUX0xPQ0tFRChfc2MpCW10eF9hc3NlcnQoJl9zYy0+ c2NfbXR4LCBNQV9PV05FRCk7CisjZGVmaW5lIFBYQV9NQ0lfQVNTRVJUX1VOTE9DS0VEKF9zYykg bXR4X2Fzc2VydCgmX3NjLT5zY19tdHgsIE1BX05PVE9XTkVEKTsKKworc3RhdGljIHZvaWQKK3B4 YV9tY2lfc3RvcF9jbG9jayhzdHJ1Y3QgcHhhX21jaV9zb2Z0YyAqc2MpCit7CisJdV9pbnQzMl90 IHRpbWVvdXQgPSAxMDAwMDsKKwl1X2ludDMyX3QgdmFsOworCisJaWYgKCh2YWwgPSBSRDQoc2Ms IE1NQ19TVEFUKSkgJiBTVEFUX0NMS19FTikgeworCQkvKiBUcnkgdG8gc3RvcCBjbG9jayAqLwor CQlXUjQoc2MsIE1NQ19TVFJQQ0wsIFNUUlBDTF9TVE9QKTsJCisJCS8qIFBvbGwgc3RhdHVzIHdp dGggdGltZW91dCAqLworCQlkbyB7CisJCQlpZiAoKCh2YWwgPSBSRDQoc2MsIE1NQ19TVEFUKSkg JiBTVEFUX0NMS19FTikgPT0gMCkKKwkJCQlicmVhazsKKwkJCURFTEFZKDEpOwkKKwkJfSB3aGls ZSAodGltZW91dC0tKTsKKwkJCisJCWlmICh2YWwgJiBTVEFUX0NMS19FTikKKwkJCURCRygiRmFp bGVkIHRvIHN0b3AgY2xvY2tcbiIpOwkKKwl9Cit9CisKKy8qCisgKiBTdGFydHMgdGhlIE1NQyBj bG9jay4gQXNzdW1lcyB0aGF0IHNjLT5jbG9ja3JhdGUgaGFzIAorICogYmVlbiBzZXQuCisgKi8K K3N0YXRpYyB2b2lkCitweGFfbWNpX3N0YXJ0X2Nsb2NrKHN0cnVjdCBweGFfbWNpX3NvZnRjICpz YykKK3sKKwl1aW50MzJfdCB2YWw7CisKKwl2YWwgPSBSRDQoc2MsIE1NQ19TVEFUKTsKKwlpZiAo dmFsICYgU1RBVF9DTEtfRU4pCisJCURCRygiY2xvY2sgZW5hYmxlZCBiZWZvcmUgc3RhcnQhXG4i KTsKKworCURCRygiU3RhcnQgY2xvY2ssIGNsb2NrcmF0ZSA9ICUwOFhcbiIsIHNjLT5jbG9ja3Jh dGUpOworCVdSNChzYywgTU1DX0NMS1JULCBzYy0+Y2xvY2tyYXRlKTsJCisJV1I0KHNjLCBNTUNf U1RSUENMLCBTVFJQQ0xfU1RBUlQpOworfQorCisvKgorICogc29mdGMgbG9jayBtdXN0IGJlIGhl bGQgd2hlbiBtYWtpbmcgdGhpcyBjYWxsISAKKyAqLworc3RhdGljIHZvaWQKK3B4YV9tY2lfaXJx X2Rpc2FibGUoc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjLCB1aW50MzJfdCBtYXNrKQoreworCXNj LT5pbWFzayB8PSBtYXNrOworCVdSNChzYywgTU1DX0lfTUFTSywgc2MtPmltYXNrKTsKK30KKwor LyoKKyAqIHNvZnRjIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gbWFraW5nIHRoaXMgY2FsbCEgCisg Ki8KK3N0YXRpYyB2b2lkCitweGFfbWNpX2lycV9lbmFibGUoc3RydWN0IHB4YV9tY2lfc29mdGMg KnNjLCB1aW50MzJfdCBtYXNrKQoreworCXNjLT5pbWFzayAmPSB+bWFzazsKKwlXUjQoc2MsIE1N Q19JX01BU0ssIHNjLT5pbWFzayk7Cit9CisKK3N0YXRpYyBpbnQKK3B4YV9tY2lfcHJvYmUoZGV2 aWNlX3QgZGV2KQoreworCisJZGV2aWNlX3NldF9kZXNjKGRldiwgIk1DSSBtbWMvc2QgaG9zdCBi cmlkZ2UiKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitweGFfbWNpX2F0dGFjaChk ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9z b2Z0YyhkZXYpOworCWludCBlcnI7CisJZGV2aWNlX3QgY2hpbGQ7CisKKwkvKiAKKwkgKiBQcm9n cmFtIEdQSU8gZm9yIGFsdGVybmF0ZSBmdW5jdGlvbnMKKwkgKiB1c2VkIGJ5IE1NQyBjb250cm9s bGVyLiBJcyB0aGlzIHRoZQorCSAqIGNvcnJlY3QgcGxhY2U/CisJICovCisJcHhhX2dwaW9fc2V0 X2Z1bmN0aW9uKDYsIEdQSU9fQUxUX0ZOXzFfT1VUKTsKKwlweGFfZ3Bpb19zZXRfZnVuY3Rpb24o NTMsIEdQSU9fQUxUX0ZOXzFfT1VUKTsKKwlweGFfZ3Bpb19zZXRfZnVuY3Rpb24oOCwgR1BJT19B TFRfRk5fMV9PVVQpOworCisJc2MtPmRldiA9IGRldjsKKwlzYy0+aW1hc2sgPSBNTUNfSV9NQVNL X0FMTDsgCisJCisJZXJyID0gcHhhX21jaV9hY3RpdmF0ZShkZXYpOworCWlmIChlcnIpCisJCWdv dG8gb3V0OworCisJUFhBX01DSV9MT0NLX0lOSVQoc2MpOworCisJLyogU3RvcCB0aGUgY2xvY2sg Ki8KKwlweGFfbWNpX3N0b3BfY2xvY2soc2MpOworCS8qIEluaXQgU1BJIGFuZCBSRVNUTyAqLwor CVdSNChzYywgTU1DX1NQSSwgMCk7CisJV1I0KHNjLCBNTUNfUkVTVE8sIE1NQ19SRVNUT19ERUZB VUxUKTsKKwkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCisJV1I0KHNjLCBNTUNfSV9NQVNLLCBz Yy0+aW1hc2spOworCisJLyoKKwkgKiBBY3RpdmF0ZSB0aGUgaW50ZXJydXB0CisJICovCisJZXJy ID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3JlcywgSU5UUl9UWVBFX01JU0MgfCBJTlRS X01QU0FGRSwKKwkgICAgTlVMTCwgcHhhX21jaV9pbnRyLCBzYywgJnNjLT5pbnRyaGFuZCk7CisJ aWYgKGVycikgeworCQlQWEFfTUNJX0xPQ0tfREVTVFJPWShzYyk7CisJCWdvdG8gb3V0OworCX0K KwlzYy0+aG9zdC5mX21pbiA9IENMT0NLUkFURV9NSU47CisJc2MtPmhvc3QuZl9tYXggPSBDTE9D S1JBVEVfTUFYOworCXNjLT5ob3N0Lmhvc3Rfb2NyID0gTU1DX09DUl8zMjBfMzMwIHwgTU1DX09D Ul8zMzBfMzQwOworCS8vc2MtPmhvc3QuY2FwcyA9IE1NQ19DQVBfNF9CSVRfREFUQTsKKwljaGls ZCA9IGRldmljZV9hZGRfY2hpbGQoZGV2LCAibW1jIiwgMCk7CisJZGV2aWNlX3NldF9pdmFycyhk ZXYsICZzYy0+aG9zdCk7CisJZXJyID0gYnVzX2dlbmVyaWNfYXR0YWNoKGRldik7CitvdXQ6Owor CWlmIChlcnIpCisJCXB4YV9tY2lfZGVhY3RpdmF0ZShkZXYpOworCXJldHVybiAoZXJyKTsKK30K Kworc3RhdGljIGludAorcHhhX21jaV9hY3RpdmF0ZShkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0 IHB4YV9tY2lfc29mdGMgKnNjOworCWludCByaWQ7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMo ZGV2KTsKKwlyaWQgPSAwOworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShk ZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+bWVt X3JlcyA9PSBOVUxMKQorCQlnb3RvIGVycm91dDsKKwlyaWQgPSAwOworCXNjLT5pcnFfcmVzID0g YnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAgICBSRl9B Q1RJVkUpOworCWlmIChzYy0+aXJxX3JlcyA9PSBOVUxMKQorCQlnb3RvIGVycm91dDsKKwlyZXR1 cm4gKDApOworZXJyb3V0OgorCXB4YV9tY2lfZGVhY3RpdmF0ZShkZXYpOworCXJldHVybiAoRU5P TUVNKTsKK30KKworc3RhdGljIHZvaWQKK3B4YV9tY2lfZGVhY3RpdmF0ZShkZXZpY2VfdCBkZXYp Cit7CisJc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CisJaWYgKHNjLT5pbnRyaGFuZCkKKwkJYnVzX3RlYXJkb3duX2ludHIoZGV2LCBzYy0+ aXJxX3Jlcywgc2MtPmludHJoYW5kKTsKKwlzYy0+aW50cmhhbmQgPSAwOworCWJ1c19nZW5lcmlj X2RldGFjaChzYy0+ZGV2KTsKKwlpZiAoc2MtPm1lbV9yZXMpCisJCWJ1c19yZWxlYXNlX3Jlc291 cmNlKGRldiwgU1lTX1JFU19NRU1PUlksCisJCSAgICBybWFuX2dldF9yaWQoc2MtPm1lbV9yZXMp LCBzYy0+bWVtX3Jlcyk7CisJc2MtPm1lbV9yZXMgPSAwOworCWlmIChzYy0+aXJxX3JlcykKKwkJ YnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lSUSwKKwkJICAgIHJtYW5fZ2V0X3Jp ZChzYy0+aXJxX3JlcyksIHNjLT5pcnFfcmVzKTsKKwlzYy0+aXJxX3JlcyA9IDA7CisJcmV0dXJu OworfQorCitzdGF0aWMgaW50CitweGFfbWNpX3VwZGF0ZV9pb3MoZGV2aWNlX3QgYnJkZXYsIGRl dmljZV90IHJlcWRldikKK3sKKwlzdHJ1Y3QgcHhhX21jaV9zb2Z0YyAqc2M7CisJc3RydWN0IG1t Y19ob3N0ICpob3N0OworCXN0cnVjdCBtbWNfaW9zICppb3M7CisJdWludDMyX3QgY2xrZGl2Owor CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJyZGV2KTsKKwlob3N0ID0gJnNjLT5ob3N0OworCWlv cyA9ICZob3N0LT5pb3M7CisJCisJaWYgKGlvcy0+Y2xvY2sgPT0gMCkgeworCQlEQkcoImlvcy0+ Y2xvY2sgPT0gMFxuIik7CisJCXB4YV9tY2lfc3RvcF9jbG9jayhzYyk7CisJCS8qIERpc2FibGUg TU1DIGNsb2NrICovCisJCXB4YV9zZXRfY2tlbihDS0VOX01NQywgMCk7CisJfSBlbHNlIHsKKwkJ REJHKCJpb3MtPmNsb2NrID0gJWRcbiIsIGlvcy0+Y2xvY2spOworCQkvKiBDYWxjdWxhdGUgY2xv Y2sgcmF0ZS4KKwkJICogV3JpdGUgb24gbmV4dCBjb21tYW5kLgorCQkgKi8KKwkJY2xrZGl2ID0g Q0xPQ0tSQVRFIC8gaW9zLT5jbG9jazsKKwkJaWYgKGNsa2RpdiA+ICgxPDw2KSkKKwkJCWNsa2Rp diA9ICgxPDw2KTsKKwkJc2MtPmNsb2NrcmF0ZSA9IGZscyhjbGtkaXYpIC0gMTsKKwkJLyogRW5h YmxlIE1NQyBjbG9jayAqLworCQlweGFfc2V0X2NrZW4oQ0tFTl9NTUMsIDEpOworCX0KKworCWlm IChzYy0+cG93ZXJfbW9kZSAhPSBpb3MtPnBvd2VyX21vZGUpIHsKKwkJc2MtPnBvd2VyX21vZGUg PSBpb3MtPnBvd2VyX21vZGU7CisKKwkJaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBwb3dlcl9vbikg eworCQkJc2MtPmNtZGF0IHw9IENNREFUX0lOSVQ7CisJCQlEQkcoIlNldHRpbmcgSU5JVFxuIik7 CisJCX0KKwl9CisKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgCitweGFfbWNpX3Nl dHVwX2RhdGEoc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjLCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEp Cit7CisJdW5zaWduZWQgaW50IG51bWJsb2NrczsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcTsK KworCXJlcSA9IGRhdGEtPm1ycTsKKworCW51bWJsb2NrcyA9IChkYXRhLT5sZW4gKyBCQlNaIC0g MSkgLyBCQlNaOworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfU1RSRUFNKQorCQludW1i bG9ja3MgPSAweGZmZmY7CisJCisJV1I0KHNjLCBNTUNfQkxLTEVOLCBCQlNaKTsKKwlXUjQoc2Ms IE1NQ19OT0IsIG51bWJsb2Nrcyk7CisKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFE KSB7CisJCTsKKwl9IGVsc2UgeworCQlpZiAoZGF0YS0+bGVuICE9IEJCU1opIAorCQkJcGFuaWMo Ik11bHRpYmxvY2sgd3JpdGUgc3VwcG9ydCIpOworCQliY29weShkYXRhLT5kYXRhLCBzYy0+Ym91 bmNlX2J1ZmZlciwgZGF0YS0+bGVuKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQKK3B4YV9tY2lfc3RhcnRfY21kKHN0cnVjdCBweGFfbWNpX3NvZnRjICpzYywgc3RydWN0IG1t Y19jb21tYW5kICpjbWQsIHVpbnQzMl90IGNtZGF0KQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0 YSA9IE5VTEw7CisJc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEgPSBOVUxMOworCWludCBlcnI7CisK KwlzYy0+Y3VyY21kID0gY21kOworCWRhdGEgPSBjbWQtPmRhdGE7CisJcmVxID0gc2MtPnJlcTsK KwkvKmlmIChkYXRhICE9IE5VTEwpCisJCXJlcSA9IGRhdGEtPm1ycTsKKwllbHNlCisJCXJlcSA9 IGNtZC0+bXJxOworCSovCisKKwkvKiBTdG9wIHRoZSBjbG9jayAqLworCXB4YV9tY2lfc3RvcF9j bG9jayhzYyk7CisKKyNpZmRlZiBSU1BfVFlQRQorI3VuZGVmIFJTUF9UWVBFCisjZW5kaWYKKwor I2RlZmluZSBSU1BfVFlQRSh4KQkoKHgpICYgTU1DX1JTUF9NQVNLICYgfihNTUNfUlNQX0JVU1l8 TU1DX1JTUF9PUENPREUpKQorCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0JVU1kpCisJCWNt ZGF0IHw9IENNREFUX0JVU1k7CisJaWYgKE1NQ19SU1AoY21kLT5mbGFncykgPT0gTU1DX1JTUF9O T05FKQorCQljbWRhdCB8PSBDTURBVF9SRVNQT05TRV9GT1JNQVRfTk87CisJc3dpdGNoIChSU1Bf VFlQRShjbWQtPmZsYWdzKSkgeworCWNhc2UgUlNQX1RZUEUoTU1DX1JTUF9SMSk6IC8qIHIxLCBy MWIsIHI2LCByNyAqLworCQljbWRhdCB8PSBDTURBVF9SRVNQT05TRV9GT1JNQVRfUjE7IAorCQli cmVhazsKKwljYXNlIFJTUF9UWVBFKE1NQ19SU1BfUjIpOgorCQljbWRhdCB8PSBDTURBVF9SRVNQ T05TRV9GT1JNQVRfUjI7IAorCQlicmVhazsKKwljYXNlIFJTUF9UWVBFKE1NQ19SU1BfUjMpOgor CQljbWRhdCB8PSBDTURBVF9SRVNQT05TRV9GT1JNQVRfUjM7IAorCQlicmVhazsKKwlkZWZhdWx0 OgorCQlicmVhazsKKwl9CisKKwlEQkcoInJlcSA9ICVwLCBkYXRhID0gJXAsIGNtZCA9ICVwLCBv cGNvZGUgPSAlZFxuIiwgcmVxLCBkYXRhLCBjbWQsIGNtZC0+b3Bjb2RlKTsKKworI3VuZGVmIFJT UF9UWVBFCisKKwlpZiAoZGF0YSAhPSBOVUxMKSB7CisJCS8qIFNldHVwIG9mIGRhdGEgdHJhbnNm ZXIgKi8KKwkJaWYgKChlcnIgPSBweGFfbWNpX3NldHVwX2RhdGEoc2MsIGRhdGEpKSAhPSAwKSB7 CisJCQlEQkcoIkRhdGEgc2V0dXAgZmFpbGVkIDogJWQsICVwLCAlcFxuIiwgZXJyLCByZXEsIHJl cS0+Y21kKTsKKwkJCS8qIE1hcmsgcmVxdWVzdCBhcyBkb25lICovCisJCQlpZiAocmVxLT5jbWQt PmZsYWdzICYgU1RPUF9TVEFSVEVEKQorCQkJCXJlcS0+c3RvcC0+ZXJyb3IgPSBNTUNfRVJSX05P X01FTU9SWTsKKwkJCWVsc2UKKwkJCQlyZXEtPmNtZC0+ZXJyb3IgPSBNTUNfRVJSX05PX01FTU9S WTsKKwkJCXNjLT5yZXEgPSBOVUxMOworCQkJc2MtPmN1cmNtZCA9IE5VTEw7CisJCQlyZXEtPmRv bmUocmVxKTsKKwkJCXJldHVybjsKKwkJfQorCQljbWRhdCAmPSB+Q01EQVRfQlVTWTsgCisJCWNt ZGF0IHw9IENNREFUX0RBVEFfRU47CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRF KQorCQkJY21kYXQgfD0gQ01EQVRfV1JJVEU7CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRB X1NUUkVBTSkKKwkJCWNtZGF0IHw9IENNREFUX1NUUkVBTV9CTE9DSzsKKwl9CisKKwlEQkcoImNt ZGF0ID0gJTA4WCBvcGNvZGUgPSAlZFxuIiwgY21kYXQsIGNtZC0+b3Bjb2RlKTsKKwkKKwlXUjQo c2MsIE1NQ19DTUQsIGNtZC0+b3Bjb2RlKTsgCisJV1I0KHNjLCBNTUNfQVJHSCwgY21kLT5hcmcg Pj4gMTYpOworCVdSNChzYywgTU1DX0FSR0wsIGNtZC0+YXJnICYgMHhmZmZmKTsKKwlXUjQoc2Ms IE1NQ19DTURBVCwgY21kYXQpOworCXB4YV9tY2lfc3RhcnRfY2xvY2soc2MpOworCXB4YV9tY2lf aXJxX2VuYWJsZShzYywgTU1DX0lfRU5EX0NNRF9SRVMpOworCXJldHVybjsKK30KKworc3RhdGlj IHZvaWQKK3B4YV9tY2lfc3RhcnQoc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjKQoreworCXN0cnVj dCBtbWNfcmVxdWVzdCAqcmVxOworCXVpbnQzMl90IGNtZGF0OworCisJcmVxID0gc2MtPnJlcTsK KwlpZiAocmVxID09IE5VTEwpCisJCXJldHVybjsKKwkKKwljbWRhdCA9IHNjLT5jbWRhdDsKKwlz Yy0+Y21kYXQgJj0gfkNNREFUX0lOSVQ7CisKKwkvLyBhc3NlcnQgbG9ja2VkCisJaWYgKCEoc2Mt PmZsYWdzICYgQ01EX1NUQVJURUQpKSB7CisJCXNjLT5mbGFncyB8PSBDTURfU1RBUlRFRDsKKwkJ REJHKCJTdGFydGluZyBDTURcbiIpOworCQlweGFfbWNpX3N0YXJ0X2NtZChzYywgcmVxLT5jbWQs IGNtZGF0KTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIShzYy0+ZmxhZ3MgJiBTVE9QX1NUQVJURUQp ICYmIHJlcS0+c3RvcCkgeworCQlEQkcoIlN0YXJ0aW5nIFN0b3BcbiIpOworCQlzYy0+ZmxhZ3Mg fD0gU1RPUF9TVEFSVEVEOworCQlweGFfbWNpX3N0YXJ0X2NtZChzYywgcmVxLT5zdG9wLCBjbWRh dCk7CisJCXJldHVybjsKKwl9CisJLyogV2UgbXVzdCBiZSBkb25lIC0tIGJhZCBpZGVhIHRvIGRv IHRoaXMgd2hpbGUgbG9ja2VkPyAqLworCXNjLT5yZXEgPSBOVUxMOworCXNjLT5jdXJjbWQgPSBO VUxMOworCXJlcS0+ZG9uZShyZXEpOworfQorCitzdGF0aWMgaW50CitweGFfbWNpX3JlcXVlc3Qo ZGV2aWNlX3QgYnJkZXYsIGRldmljZV90IHJlcWRldiwgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEp Cit7CisJc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhicmRldik7 CisKKwlEQkcoIlJlcXVlc3QgOiAlcFxuIiwgcmVxKTsKKworCVBYQV9NQ0lfTE9DSyhzYyk7CisJ Ly8gWFhYIGRvIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBxdWV1ZSB1cCBtdWx0aXBsZSBjb21tYW5k cz8KKwkvLyBYWFggc291bmRzIGxpa2UgYSBnb29kIGlkZWEsIGJ1dCBhbGwgcHJvdG9jb2xzIGFy ZSBzeW5jLCBzbworCS8vIFhYWCBtYXliZSB0aGUgaWRlYSBpcyBuYWl2ZS4uLgorCWlmIChzYy0+ cmVxICE9IE5VTEwpIHsKKwkJUFhBX01DSV9VTkxPQ0soc2MpOworCQlEQkcoInNjLT5yZXEgIT0g TlVMTFxuIik7CisJCXJldHVybiBFQlVTWTsKKwl9CisJc2MtPnJlcSA9IHJlcTsKKwlzYy0+Zmxh Z3MgPSAwOworCXB4YV9tY2lfc3RhcnQoc2MpOworCVBYQV9NQ0lfVU5MT0NLKHNjKTsKKwlyZXR1 cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorcHhhX21jaV9jbWRfZG9uZShzdHJ1Y3QgcHhhX21j aV9zb2Z0YyAqc2MsIHVpbnQzMl90IHN0YXQpCit7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7 CisJdWludDMyX3QgdmFsMCwgdmFsMSwgdmFsMjsKKwlpbnQgaTsKKwlzdGF0aWMgdWludDMyX3Qg cHJldl9vcGNvZGUgPSAyNTY7CisKKwlpZiAoc2MtPmN1cmNtZCA9PSBOVUxMKQorCQlyZXR1cm47 CisJCisJY21kID0gc2MtPmN1cmNtZDsKKwkKKwlweGFfbWNpX2lycV9kaXNhYmxlKHNjLCBNTUNf SV9FTkRfQ01EX1JFUyk7CisJCisJLyoKKwkgKiBEaXNjYXJkIHVwcGVyIDggYml0cyBvZiBmaXJz dCAxNi1iaXQgd29yZC4KKwkgKi8KKwlEQkcoImNtZCByZXNwb25zZSA9ICIpOworCXZhbDAgPSBS RDQoc2MsIE1NQ19SRVMpICYgMHhmZmZmOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJ dmFsMSA9IFJENChzYywgTU1DX1JFUykgJiAweGZmZmY7CisJCXZhbDIgPSBSRDQoc2MsIE1NQ19S RVMpICYgMHhmZmZmOworCQljbWQtPnJlc3BbaV0gPSB2YWwwIDw8IDI0IHwgdmFsMSA8PCA4IHwg dmFsMiA+PiA4OworCQl2YWwwID0gdmFsMjsKKwkJREJHKCIlMDhYICIsIGNtZC0+cmVzcFtpXSk7 CisJfQorCURCRygiXG4iKTsKKwkKKwljbWQtPmVycm9yID0gTU1DX0VSUl9OT05FOworCisJaWYg KHN0YXQgJiBTVEFUX1RJTUVPVVRfUkVTUE9OU0UpIHsKKwkJY21kLT5lcnJvciA9IE1NQ19FUlJf VElNRU9VVDsKKwkJaWYgKGNtZC0+b3Bjb2RlICE9IDggJiYgY21kLT5vcGNvZGUgIT0gNDEgJiYg Y21kLT5vcGNvZGUgIT0gNTUpIHsKKwkJCURCRygiUmVzcG9uc2UgdGltZW91dCA6IG9wY29kZSA9 ICVkLCBwcmV2ID0gJWRcbiIsIAorCQkJICAgIGNtZC0+b3Bjb2RlLCBwcmV2X29wY29kZSk7CisJ CX0KKwl9CisJZWxzZSBpZiAoc3RhdCAmIFNUQVRfUkVTX0NSQ19FUlIgJiYgY21kLT5mbGFncyAm IE1NQ19SU1BfQ1JDKSB7CisJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX0JBRENSQzsKKwkJREJHKCJj bWQgY3JjIGVycm9yXG4iKTsKKwl9CisKKwlwcmV2X29wY29kZSA9IGNtZC0+b3Bjb2RlOworCisJ aWYgKGNtZC0+ZGF0YSAmJiBjbWQtPmVycm9yID09IE1NQ19FUlJfTk9ORSkgeworCQlpZiAoY21k LT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCXNjLT54ZmVycmVkID0gMDsgCisJ CQlweGFfbWNpX2lycV9lbmFibGUoc2MsIE1NQ19JX1JYRklGT19SRF9SRVEpOworCQl9CisJCWVs c2UgaWYgKGNtZC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgeworCQkJc2MtPnhmZXJy ZWQgPSAwOworCQkJcHhhX21jaV9pcnFfZW5hYmxlKHNjLCBNTUNfSV9UWEZJRk9fV1JfUkVRKTsK KwkJfQorCX0gZWxzZSB7CisJCXB4YV9tY2lfc3RhcnQoc2MpOworCX0KK30KKworc3RhdGljIHZv aWQKK3B4YV9tY2lfZGF0YV9kb25lKHN0cnVjdCBweGFfbWNpX3NvZnRjICpzYywgdWludDMyX3Qg c3RhdCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7CisJc3RydWN0IG1tY19jb21tYW5kICpj bWQ7CisKKwlpZiAoc2MtPmN1cmNtZCA9PSBOVUxMIHx8IHNjLT5jdXJjbWQtPmRhdGEgPT0gTlVM TCkKKwkJcmV0dXJuOworCQorCWNtZCA9IHNjLT5jdXJjbWQ7CisJZGF0YSA9IGNtZC0+ZGF0YTsK KworCWlmIChzdGF0ICYgU1RBVF9SRUFEX1RJTUVfT1VUKQorCQljbWQtPmVycm9yID0gTU1DX0VS Ul9USU1FT1VUOworCWVsc2UgaWYgKHN0YXQgJiAoU1RBVF9DUkNfUkVBRF9FUlJPUiB8IFNUQVRf Q1JDX1dSSVRFX0VSUk9SKSkgeworCQljbWQtPmVycm9yID0gTU1DX0VSUl9CQURDUkM7CisJCURC RygiQ1JDIGVycm9yIDogJTA4WFxuIiwgc3RhdCk7CisJfQorCWVsc2UgaWYgKGRhdGEtPmZsYWdz ICYgTU1DX0RBVEFfUkVBRCAmJgorCSAgICAoc3RhdCAmIFNUQVRfUkVDVl9GSUZPX0ZVTEwpKSB7 CisJCURCRygiUlggZmlmbyBmdWxsXG4iKTsKKwl9CisJZWxzZSBpZiAoZGF0YS0+ZmxhZ3MgJiBN TUNfREFUQV9XUklURSAmJgorCSAgICAoc3RhdCAmIFNUQVRfWE1JVF9GSUZPX0VNUFRZKSkgewor CQlEQkcoIlRYIGZpZm8gZW1wdHlcbiIpOworCX0KKworCS8qCisJICogRnJvbSBMaW51eDoKKwkg KiBUaGVyZSBhcHBlYXJzIHRvIGJlIGEgaGFyZHdhcmUgZGVzaWduIGJ1ZyBoZXJlLiAgVGhlcmUg c2VlbXMgdG8KKwkgKiBiZSBubyB3YXkgdG8gZmluZCBvdXQgaG93IG11Y2ggZGF0YSB3YXMgdHJh bnNmZXJyZWQgdG8gdGhlIGNhcmQuCisJICogVGhpcyBtZWFucyB0aGF0IGlmIHRoZXJlIHdhcyBh biBlcnJvciBvbiBhbnkgYmxvY2ssIHdlIG1hcmsgYWxsCisJICogZGF0YSBibG9ja3MgYXMgYmVp bmcgaW4gZXJyb3IuCisJICovCisJaWYgKGNtZC0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKSB7CisJ CURCRygiU2V0dGluZyB0cmFuc2ZlciBsZW4gdG8gMFxuIik7CisJCWRhdGEtPnhmZXJfbGVuID0g MDsKKwl9CisKKwlweGFfbWNpX2lycV9kaXNhYmxlKHNjLCBNTUNfSV9EQVRBX1RSQU5fRE9ORSk7 CisKKwlweGFfbWNpX3N0YXJ0KHNjKTsKK30KKworc3RhdGljIHZvaWQKK3B4YV9tY2lfeGZlcl9k YXRhKHN0cnVjdCBweGFfbWNpX3NvZnRjICpzYywgdW5zaWduZWQgY2hhciB3cml0ZSwgdWludDMy X3Qgc3RhdCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBOVUxMOworCXN0cnVjdCBtbWNf cmVxdWVzdCAqcmVxID0gTlVMTDsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IE5VTEw7CisJ aW50IGk7CisJdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CisJdWludDMyX3Qgc3IgPSAwOwor CisJY21kID0gc2MtPmN1cmNtZDsKKwlkYXRhID0gY21kLT5kYXRhOworCXJlcSA9IHNjLT5yZXE7 CisJCisJc3IgPSBSRDQoc2MsIE1NQ19TVEFUKTsKKworCWlmICh3cml0ZSkgeworCQlweGFfbWNp X2lycV9kaXNhYmxlKHNjLCBNTUNfSV9UWEZJRk9fV1JfUkVRKTsKKwkJZm9yIChpID0gMDsgaSA8 IDMyOyBpKyspIAorCQkJV1IxKHNjLCBNTUNfVFhGSUZPLCBzYy0+Ym91bmNlX2J1ZmZlcltpICsg c2MtPnhmZXJyZWRdKTsKKwkJc2MtPnhmZXJyZWQgKz0gMzI7CisJCWlmIChzYy0+eGZlcnJlZCA8 IGRhdGEtPmxlbikKKwkJCXB4YV9tY2lfaXJxX2VuYWJsZShzYywgTU1DX0lfVFhGSUZPX1dSX1JF USk7CQkKKwl9CisJZWxzZSB7CisJCXB4YV9tY2lfaXJxX2Rpc2FibGUoc2MsIE1NQ19JX1JYRklG T19SRF9SRVEpOworCQlkZXN0ID0gKHVuc2lnbmVkIGNoYXIgKikoZGF0YS0+ZGF0YSk7CisJCWZv ciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQkJZGVzdFtpICsgc2MtPnhmZXJyZWRdID0gUkQxKHNj LCBNTUNfUlhGSUZPKTsJCisJCXNjLT54ZmVycmVkICs9IDMyOworCQlpZiAoc2MtPnhmZXJyZWQg PCBkYXRhLT5sZW4pCisJCQlweGFfbWNpX2lycV9lbmFibGUoc2MsIE1NQ19JX1JYRklGT19SRF9S RVEpOworCX0KKworCWlmIChzYy0+eGZlcnJlZCA+PSBkYXRhLT5sZW4pIAorCQlweGFfbWNpX2ly cV9lbmFibGUoc2MsIE1NQ19JX0RBVEFfVFJBTl9ET05FKTsgCit9CisKK3N0YXRpYyB2b2lkCitw eGFfbWNpX2ludHIodm9pZCAqYXJnKQoreworCXN0cnVjdCBweGFfbWNpX3NvZnRjICpzYyA9IChz dHJ1Y3QgcHhhX21jaV9zb2Z0YyopYXJnOworCXVpbnQzMl90IHNyLCBpcjsKKwlzdHJ1Y3QgbW1j X2RhdGEgKmRhdGEgPSBOVUxMOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxID0gTlVMTDsKKwlz dHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IE5VTEw7CisJCisJUFhBX01DSV9MT0NLKHNjKTsKKwor CWlyID0gUkQ0KHNjLCBNTUNfSV9SRUcpOworCQorCWNtZCA9IHNjLT5jdXJjbWQ7CisJZGF0YSA9 IGNtZC0+ZGF0YTsKKwlyZXEgPSBzYy0+cmVxOworCisJREJHKCJJUiA9ICUwOFhcbiIsIGlyKTsK KworCWlmIChpciAhPSAwKSB7CisJCXNyID0gUkQ0KHNjLCBNTUNfU1RBVCk7CisKKwkJREJHKCJT UiA9ICUwOFhcbiIsIHNyKTsKKworCQlpZiAoaXIgJiBNTUNfSV9FTkRfQ01EX1JFUykKKwkJCXB4 YV9tY2lfY21kX2RvbmUoc2MsIHNyKTsKKwkJaWYgKGlyICYgTU1DX0lfUlhGSUZPX1JEX1JFUSkK KwkJCXB4YV9tY2lfeGZlcl9kYXRhKHNjLCAwLCBzcik7CisJCWlmIChpciAmIE1NQ19JX1RYRklG T19XUl9SRVEpCisJCQlweGFfbWNpX3hmZXJfZGF0YShzYywgMSwgc3IpOworCQlpZiAoaXIgJiBN TUNfSV9EQVRBX1RSQU5fRE9ORSkgeworCQkJaWYgKChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dS SVRFKSAmJgorCQkJICAgICEoc3IgJiBTVEFUX1BSR19ET05FKSkgeworCQkJCXB4YV9tY2lfaXJx X2Rpc2FibGUoc2MsIE1NQ19JX0RBVEFfVFJBTl9ET05FKTsKKwkJCQkvKiBXYWl0IGZvciBwcmdf ZG9uZSAqLworCQkJCXB4YV9tY2lfaXJxX2VuYWJsZShzYywgTU1DX0lfUFJHX0RPTkUpOyAKKwkJ CX0KKwkJCWVsc2UKKwkJCQlweGFfbWNpX2RhdGFfZG9uZShzYywgc3IpOworCQl9CisJCWlmIChp ciAmIE1NQ19JX1BSR19ET05FKSB7CisJCQlweGFfbWNpX2lycV9kaXNhYmxlKHNjLCBNTUNfSV9Q UkdfRE9ORSk7CisJCQlweGFfbWNpX2RhdGFfZG9uZShzYywgc3IpOworCQl9CisJfQorCisJUFhB X01DSV9VTkxPQ0soc2MpOworfQorCitzdGF0aWMgaW50CitweGFfbWNpX2dldF9ybyhkZXZpY2Vf dCBicmRldiwgZGV2aWNlX3QgcmVxZGV2KQoreworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMg aW50CitweGFfbWNpX2FjcXVpcmVfaG9zdChkZXZpY2VfdCBicmRldiwgZGV2aWNlX3QgcmVxZGV2 KQoreworCXN0cnVjdCBweGFfbWNpX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoYnJkZXYp OworCWludCBlcnIgPSAwOworCisJUFhBX01DSV9MT0NLKHNjKTsKKwl3aGlsZSAoc2MtPmJ1c19i dXN5KQorCQltc2xlZXAoc2MsICZzYy0+c2NfbXR4LCBQWkVSTywgIm1jaWFoIiwgaHogLyA1KTsK KwlzYy0+YnVzX2J1c3krKzsKKwlQWEFfTUNJX1VOTE9DSyhzYyk7CisJCisJcmV0dXJuIChlcnIp OworfQorCitzdGF0aWMgaW50CitweGFfbWNpX3JlbGVhc2VfaG9zdChkZXZpY2VfdCBicmRldiwg ZGV2aWNlX3QgcmVxZGV2KQoreworCXN0cnVjdCBweGFfbWNpX3NvZnRjICpzYyA9IGRldmljZV9n ZXRfc29mdGMoYnJkZXYpOworCisJUFhBX01DSV9MT0NLKHNjKTsKKwlzYy0+YnVzX2J1c3ktLTsK Kwl3YWtldXAoc2MpOworCVBYQV9NQ0lfVU5MT0NLKHNjKTsKKworCXJldHVybiAoMCk7Cit9CisK K3N0YXRpYyBpbnQKK3B4YV9tY2lfcmVhZF9pdmFyKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hp bGQsIGludCB3aGljaCwgdV9jaGFyICpyZXN1bHQpCit7CisJc3RydWN0IHB4YV9tY2lfc29mdGMg KnNjID0gZGV2aWNlX2dldF9zb2Z0YyhidXMpOworCisKKwlzd2l0Y2ggKHdoaWNoKSB7CisJZGVm YXVsdDoKKwkJcmV0dXJuIChFSU5WQUwpOworCWNhc2UgTU1DQlJfSVZBUl9CVVNfTU9ERToKKwkJ KihpbnQgKilyZXN1bHQgPSBzYy0+aG9zdC5pb3MuYnVzX21vZGU7CisJCWJyZWFrOworCWNhc2Ug TU1DQlJfSVZBUl9CVVNfV0lEVEg6CisJCSooaW50ICopcmVzdWx0ID0gc2MtPmhvc3QuaW9zLmJ1 c193aWR0aDsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX0NISVBfU0VMRUNUOgorCQkqKGlu dCAqKXJlc3VsdCA9IHNjLT5ob3N0Lmlvcy5jaGlwX3NlbGVjdDsKKwkJYnJlYWs7CisJY2FzZSBN TUNCUl9JVkFSX0NMT0NLOgorCQkqKGludCAqKXJlc3VsdCA9IHNjLT5ob3N0Lmlvcy5jbG9jazsK KwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX0ZfTUlOOgorCQkqKGludCAqKXJlc3VsdCA9IHNj LT5ob3N0LmZfbWluOworCQlicmVhazsKKwljYXNlIE1NQ0JSX0lWQVJfRl9NQVg6CisJCSooaW50 ICopcmVzdWx0ID0gc2MtPmhvc3QuZl9tYXg7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9I T1NUX09DUjoKKwkJKihpbnQgKilyZXN1bHQgPSBzYy0+aG9zdC5ob3N0X29jcjsKKwkJYnJlYWs7 CisJY2FzZSBNTUNCUl9JVkFSX01PREU6CisJCSooaW50ICopcmVzdWx0ID0gc2MtPmhvc3QubW9k ZTsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX09DUjoKKwkJKihpbnQgKilyZXN1bHQgPSBz Yy0+aG9zdC5vY3I7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9QT1dFUl9NT0RFOgorCQkq KGludCAqKXJlc3VsdCA9IHNjLT5ob3N0Lmlvcy5wb3dlcl9tb2RlOworCQlicmVhazsKKwljYXNl IE1NQ0JSX0lWQVJfVkREOgorCQkqKGludCAqKXJlc3VsdCA9IHNjLT5ob3N0Lmlvcy52ZGQ7CisJ CWJyZWFrOworCX0KKwkKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitweGFfbWNpX3dy aXRlX2l2YXIoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHdoaWNoLCB1aW50cHRy X3QgdmFsdWUpCit7CisJc3RydWN0IHB4YV9tY2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0 YyhidXMpOworCisJc3dpdGNoICh3aGljaCkgeworCWRlZmF1bHQ6CisJCXJldHVybiAoRUlOVkFM KTsKKwljYXNlIE1NQ0JSX0lWQVJfQlVTX01PREU6CisJCXNjLT5ob3N0Lmlvcy5idXNfbW9kZSA9 IHZhbHVlOworCQlicmVhazsKKwljYXNlIE1NQ0JSX0lWQVJfQlVTX1dJRFRIOgorCQlzYy0+aG9z dC5pb3MuYnVzX3dpZHRoID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9DSElQ X1NFTEVDVDoKKwkJc2MtPmhvc3QuaW9zLmNoaXBfc2VsZWN0ID0gdmFsdWU7CisJCWJyZWFrOwor CWNhc2UgTU1DQlJfSVZBUl9DTE9DSzoKKwkJc2MtPmhvc3QuaW9zLmNsb2NrID0gdmFsdWU7CisJ CWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9NT0RFOgorCQlzYy0+aG9zdC5tb2RlID0gdmFsdWU7 CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9PQ1I6CisJCXNjLT5ob3N0Lm9jciA9IHZhbHVl OworCQlicmVhazsKKwljYXNlIE1NQ0JSX0lWQVJfUE9XRVJfTU9ERToKKwkJc2MtPmhvc3QuaW9z LnBvd2VyX21vZGUgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX1ZERDoKKwkJ c2MtPmhvc3QuaW9zLnZkZCA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIE1NQ0JSX0lWQVJfSE9T VF9PQ1I6CisJY2FzZSBNTUNCUl9JVkFSX0ZfTUlOOgorCWNhc2UgTU1DQlJfSVZBUl9GX01BWDoK KwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgZGV2aWNl X21ldGhvZF90IHB4YV9tY2lfbWV0aG9kc1tdID0geworCS8qIGRldmljZV9pZiAqLworCURFVk1F VEhPRChkZXZpY2VfcHJvYmUsIHB4YV9tY2lfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0 YWNoLCBweGFfbWNpX2F0dGFjaCksCisJLypERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgcHhhX21j aV9kZXRhY2gpLCovCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19yZWFk X2l2YXIsIHB4YV9tY2lfcmVhZF9pdmFyKSwKKwlERVZNRVRIT0QoYnVzX3dyaXRlX2l2YXIsIHB4 YV9tY2lfd3JpdGVfaXZhciksCisKKwkvKiBtbWNicl9pZiAqLworCURFVk1FVEhPRChtbWNicl91 cGRhdGVfaW9zLCBweGFfbWNpX3VwZGF0ZV9pb3MpLAorCURFVk1FVEhPRChtbWNicl9yZXF1ZXN0 LCBweGFfbWNpX3JlcXVlc3QpLAorCURFVk1FVEhPRChtbWNicl9nZXRfcm8sIHB4YV9tY2lfZ2V0 X3JvKSwKKwlERVZNRVRIT0QobW1jYnJfYWNxdWlyZV9ob3N0LCBweGFfbWNpX2FjcXVpcmVfaG9z dCksCisJREVWTUVUSE9EKG1tY2JyX3JlbGVhc2VfaG9zdCwgcHhhX21jaV9yZWxlYXNlX2hvc3Qp LAorCisJezAsIDB9LAorfTsKKworc3RhdGljIGRyaXZlcl90IHB4YV9tY2lfZHJpdmVyID0gewor CSJweGFfbWNpIiwKKwlweGFfbWNpX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBweGFfbWNpX3Nv ZnRjKSwKK307CitzdGF0aWMgZGV2Y2xhc3NfdCBweGFfbWNpX2RldmNsYXNzOworCisKK0RSSVZF Ul9NT0RVTEUocHhhX21jaSwgcHhhLCBweGFfbWNpX2RyaXZlciwgcHhhX21jaV9kZXZjbGFzcywg MCwgMCk7CmRpZmYgLXggJypzdm4qJyAtdSAtTiAtZCAtciBmYnNkX2N1cnJlbnRfMjAwODA4MzAv c3JjL3N5cy9hcm0veHNjYWxlL3B4YS9weGFfb2Jpby5jIGZic2RfamZfcHJpdi9zcmMvc3lzL2Fy bS94c2NhbGUvcHhhL3B4YV9vYmlvLmMKLS0tIGZic2RfY3VycmVudF8yMDA4MDgzMC9zcmMvc3lz L2FybS94c2NhbGUvcHhhL3B4YV9vYmlvLmMJMjAwOC0wOC0zMCAwODo0Mzo1Ny4wMDAwMDAwMDAg KzAyMDAKKysrIGZic2RfamZfcHJpdi9zcmMvc3lzL2FybS94c2NhbGUvcHhhL3B4YV9vYmlvLmMJ MjAwOC0wOC0yNSAxMzowMjoxOS4wMDAwMDAwMDAgKzAyMDAKQEAgLTIzLDcgKzIzLDcgQEAKICAq LwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lz L2FybS94c2NhbGUvcHhhL3B4YV9vYmlvLmMgMTc5NzAxIDIwMDgtMDYtMTAgMDY6MDY6MTVaIGtl dmxvICQiKTsKK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5o PgogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgpAQCAtNzYsNiArNzYsOCBAQAogCXsgInVhcnQiLCBQ WEEyWDBfQlRVQVJUX0JBU0UsIFBYQTJYMF9CVFVBUlRfU0laRSwgeyBQWEEyWDBfSU5UX0JUVUFS VCwgMCB9IH0sCiAJeyAidWFydCIsIFBYQTJYMF9TVFVBUlRfQkFTRSwgUFhBMlgwX1NUVUFSVF9T SVpFLCB7IFBYQTJYMF9JTlRfU1RVQVJULCAwIH0gfSwKIAl7ICJ1YXJ0IiwgUFhBMlgwX0hXVUFS VF9CQVNFLCBQWEEyWDBfSFdVQVJUX1NJWkUsIHsgUFhBMlgwX0lOVF9IV1VBUlQsIDAgfSB9LAor CXsgInB4YV9jbGtfbWdyIiwgUFhBMlgwX0NMS01BTl9CQVNFLCBQWEEyWDBfQ0xLTUFOX1NJWkUs IHsgMCB9IH0sCSAgCQorCXsgInB4YV9tY2kiLCBQWEEyWDBfTU1DX0JBU0UsIFBYQTJYMF9NTUNf U0laRSwgeyBQWEEyWDBfSU5UX01NQywgMCB9IH0sICAJCQkgCiAJeyAic21pIiwgUFhBMlgwX0NT MF9TVEFSVCwgUFhBMlgwX0NTX1NJWkUgKiA2LCB7IDAgfSB9LAogCXsgTlVMTCwgMCwgMCwgeyAw IH0gfQogfTsKQEAgLTI0NCw2ICsyNDYsMTAgQEAKIAkJCSAgICBzdGFydCwgZW5kLCBjb3VudCwg ZmxhZ3MpKTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CisJLyogVGVtcCBoYWNrICovCisJaWYgKHJs ZS0+cmVzICE9IE5VTEwpCisJCXJldHVybiBOVUxMOworCiAJaWYgKHJsZS0+cmVzICE9IE5VTEwp CiAJCXBhbmljKCJweGFfYWxsb2NfcmVzb3VyY2U6IHJlc291cmNlIGlzIGJ1c3kiKTsKZGlmZiAt eCAnKnN2bionIC11IC1OIC1kIC1yIGZic2RfY3VycmVudF8yMDA4MDgzMC9zcmMvc3lzL2FybS94 c2NhbGUvcHhhL3B4YXJlZy5oIGZic2RfamZfcHJpdi9zcmMvc3lzL2FybS94c2NhbGUvcHhhL3B4 YXJlZy5oCi0tLSBmYnNkX2N1cnJlbnRfMjAwODA4MzAvc3JjL3N5cy9hcm0veHNjYWxlL3B4YS9w eGFyZWcuaAkyMDA4LTA4LTMwIDA4OjQzOjU3LjAwMDAwMDAwMCArMDIwMAorKysgZmJzZF9qZl9w cml2L3NyYy9zeXMvYXJtL3hzY2FsZS9weGEvcHhhcmVnLmgJMjAwOC0wOC0yNiAxMDo0ODoxNi4w MDAwMDAwMDAgKzAyMDAKQEAgLTMyLDcgKzMyLDcgQEAKICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAg KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqCi0gKiAkRnJlZUJTRDogaGVhZC9zeXMv YXJtL3hzY2FsZS9weGEvcHhhcmVnLmggMTc5NTk1IDIwMDgtMDYtMDYgMDU6MDg6MDlaIGJlbm5v ICQKKyAqICRGcmVlQlNEJAogICovCiAKIApAQCAtMjEwLDYgKzIxMCw5IEBACiAjZGVmaW5lICBE Q01EX0lOQ1RSR0FERFIgICgxPDwzMCkJLyogaW5jcmVtZW50IHRhcmdldCBhZGRyZXNzICovCiAj ZGVmaW5lICBEQ01EX0lOQ1NSQ0FERFIgICgxPDwzMSkJLyogaW5jcmVtZW50IHNvdXJjZSBhZGRy ZXNzICovCiAKKyNkZWZpbmUgRFJDTVJfTU1DX1JYCTIxCisjZGVmaW5lIERSQ01SX01NQ19UWAky MgorCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIC8qIERNQSBkZXNjcmlwdG9yICovCiBzdHJ1Y3Qg cHhhX2RtYV9kZXNjIHsKQEAgLTU4Miw2ICs1ODUsNyBAQAogI2RlZmluZSAgQ01EQVRfSU5JVAkJ KDE8PDYpIC8qIHByZWNlZWRlIGNvbW1hbmQgd2l0aCA4MCBjbG9ja3MgKi8KICNkZWZpbmUgIENN REFUX01NQ19ETUFfRU4JKDE8PDcpIC8qIERNQSBlbmFibGUgKi8KICNkZWZpbmUgTU1DX1JFU1RP CTB4MTQJLyogZXhwZWN0ZWQgcmVzcG9uc2UgdGltZSBvdXQgKi8KKyNkZWZpbmUgIE1NQ19SRVNU T19ERUZBVUxUIDB4NDAgLyogZGVmYXVsdCB2YWx1ZSAqLwogI2RlZmluZSBNTUNfUkRUTyAJMHgx OAkvKiBleHBlY3RlZCBkYXRhIHJlYWQgdGltZSBvdXQgKi8KICNkZWZpbmUgTU1DX0JMS0xFTgkw eDFjCS8qIGJsb2NrIGxlbmd0aCBvZiBkYXRhIHRyYW5zYWN0aW9uICovCiAjZGVmaW5lIE1NQ19O T0IgIAkweDIwCS8qIG51bWJlciBvZiBibG9ja3MgKGJsb2NrIG1vZGUpICovCkBAIC01OTYsNiAr NjAwLDcgQEAKICNkZWZpbmUgIE1NQ19JX0NMS19JU19PRkYJKDE8PDQpCiAjZGVmaW5lICBNTUNf SV9SWEZJRk9fUkRfUkVRCSgxPDw1KQogI2RlZmluZSAgTU1DX0lfVFhGSUZPX1dSX1JFUQkoMTw8 NikKKyNkZWZpbmUgIE1NQ19JX01BU0tfQUxMCQkoKDE8PDcpIC0gMSkKICNkZWZpbmUgTU1DX0NN RCAgCTB4MzAJLyogaW5kZXggb2YgY3VycmVudCBjb21tYW5kICovCiAjZGVmaW5lIE1NQ19BUkdI IAkweDM0CS8qIE1TVyBwYXJ0IG9mIHRoZSBjdXJyZW50IGNvbW1hbmQgYXJnICovCiAjZGVmaW5l IE1NQ19BUkdMIAkweDM4CS8qIExTVyBwYXJ0IG9mIHRoZSBjdXJyZW50IGNvbW1hbmQgYXJnICov CmRpZmYgLXggJypzdm4qJyAtdSAtTiAtZCAtciBmYnNkX2N1cnJlbnRfMjAwODA4MzAvc3JjL3N5 cy9hcm0veHNjYWxlL3B4YS9weGF2YXIuaCBmYnNkX2pmX3ByaXYvc3JjL3N5cy9hcm0veHNjYWxl L3B4YS9weGF2YXIuaAotLS0gZmJzZF9jdXJyZW50XzIwMDgwODMwL3NyYy9zeXMvYXJtL3hzY2Fs ZS9weGEvcHhhdmFyLmgJMjAwOC0wOC0zMCAwODo0Mzo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrIGZi c2RfamZfcHJpdi9zcmMvc3lzL2FybS94c2NhbGUvcHhhL3B4YXZhci5oCTIwMDgtMDgtMjUgMTY6 NTg6NDYuMDAwMDAwMDAwICswMjAwCkBAIC0zNCw3ICszNCw3IEBACiAgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRQogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKgotICogJEZyZWVCU0Q6IGhl YWQvc3lzL2FybS94c2NhbGUvcHhhL3B4YXZhci5oIDE3OTU5NSAyMDA4LTA2LTA2IDA1OjA4OjA5 WiBiZW5ubyAkCisgKiAkRnJlZUJTRCQKICAqCiAgKi8KIApAQCAtODcsNiArODcsOSBAQAogaW50 CXB4YV9kbWFjX3RyYW5zZmVyX2RvbmUoc3RydWN0IGRtYWNfY2hhbm5lbCAqKTsKIGludAlweGFf ZG1hY190cmFuc2Zlcl9mYWlsZWQoc3RydWN0IGRtYWNfY2hhbm5lbCAqKTsKIAordm9pZAlweGFf ZG1hY19jaGFubmVsX21hcF92YWxpZChzdHJ1Y3QgZG1hY19jaGFubmVsICpjaGFubmVsLCB1aW50 MzJfdCBtYXBfcmVnKTsKK3ZvaWQJcHhhX2RtYWNfY2hhbm5lbF9tYXBfaW52YWxpZChzdHJ1Y3Qg ZG1hY19jaGFubmVsICpjaGFubmVsLCB1aW50MzJfdCBtYXBfcmVnKTsKKwogZW51bSBweGFfZGV2 aWNlX2l2YXJzIHsKIAlQWEFfSVZBUl9CQVNFLAogfTsKQEAgLTEwOSw0ICsxMTIsNyBAQAogCiAj dW5kZWYgQ1NSX0FDQ0VTU09SCiAKKwordm9pZCBweGFfc2V0X2NrZW4odWludDMyX3QgY2xvY2ss IHVpbnQzMl90IGVuYWJsZSk7CisKICNlbmRpZiAvKiBfUFhBVkFSX0hfICovCg== ------=_Part_26427_13643661.1220081851637--