From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from outbound-mail-105.bluehost.com (outbound-mail-105.bluehost.com [69.89.18.5]) by ozlabs.org (Postfix) with SMTP id 11A1CDE29B for ; Tue, 19 Aug 2008 19:41:01 +1000 (EST) Message-ID: <48AA938C.4060309@dlasys.net> Date: Tue, 19 Aug 2008 05:34:04 -0400 From: "David H. Lynch Jr." MIME-Version: 1.0 To: linuxppc-embedded , netdev@vger.kernel.org Subject: [PATCH] Linux Device Driver for Xilinx LL TEMAC 10/100/1000 Ethernet NIC Content-Type: multipart/mixed; boundary="------------020701070101080101060501" Reply-To: dhlii@dlasys.net List-Id: Linux on Embedded PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. --------------020701070101080101060501 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Pass II --------------020701070101080101060501 Content-Type: text/plain; name="lltemac" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="lltemac" TGludXggRGV2aWNlIERyaXZlciBmb3IgWGlsaW54IExMIFRFTUFDIDEwLzEwMC8xMDAwIEV0 aGVybmV0IE5JQwoKT3JpZ2luYWwgQXV0aG9yIFlvc2hpbyBLYXNoaXdhZ2kKVXBkYXRlZCBh bmQgTWFpbnRhaW5lZCBieSBEYXZpZCBMeW5jaAoKU2lnbmVkLW9mZi1ieTogRGF2aWQgSC4g THluY2ggSnIuIDxkaGxpaUBkbGFzeXMubmV0PgoKLS0tCgogZHJpdmVycy9uZXQvS2NvbmZp ZyAgICAgICAgICAgIHwgICAgNSAKIGRyaXZlcnMvbmV0L01ha2VmaWxlICAgICAgICAgICB8 ICAgIDEgCiBkcml2ZXJzL25ldC94cHNfbGx0ZW1hYy5jICAgICAgfCAxNTYyICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgveGlsaW54 X2RldmljZXMuaCB8ICAgIDIgCiA0IGZpbGVzIGNoYW5nZWQsIDE1NjkgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIv ZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCAwMzNlMTNmLi43MWI0YzE3IDEwMDY0NAotLS0g YS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTIz MzIsNiArMjMzMiwxMSBAQCBjb25maWcgTVY2NDNYWF9FVEgKIAkgIFNvbWUgYm9hcmRzIHRo YXQgdXNlIHRoZSBEaXNjb3ZlcnkgY2hpcHNldCBhcmUgdGhlIE1vbWVuY28KIAkgIE9jZWxv dCBDIGFuZCBKYWd1YXIgQVRYIGFuZCBQZWdhc29zIElJLgogCitjb25maWcgWFBTX0xMVEVN QUMKKwl0cmlzdGF0ZSAiWGlsaW54IExMVEVNQUMgMTAvMTAwLzEwMDAgRXRoZXJuZXQgTUFD IGRyaXZlciIKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgWGlsaW54IDEw LzEwMC8xMDAwIExMVEVNQUMgZm91bmQgaW4gVmlydGV4IDQgRlBHQXMKKwogY29uZmlnIFFM QTNYWFgKIAl0cmlzdGF0ZSAiUUxvZ2ljIFFMQTNYWFggTmV0d29yayBEcml2ZXIgU3VwcG9y dCIKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUg Yi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCAxZjA5OTM0Li45MTk2YmFiIDEwMDY0NAot LS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpA QCAtMTI2LDYgKzEyNiw3IEBAIG9iai0kKENPTkZJR19BWDg4Nzk2KSArPSBheDg4Nzk2Lm8K IG9iai0kKENPTkZJR19UU0kxMDhfRVRIKSArPSB0c2kxMDhfZXRoLm8KIG9iai0kKENPTkZJ R19QSUNPX1RFTUFDKSArPSBwaWNvX3RlbWFjLm8KIG9iai0kKENPTkZJR19NVjY0M1hYX0VU SCkgKz0gbXY2NDN4eF9ldGgubworb2JqLSQoQ09ORklHX1hQU19MTFRFTUFDKSArPSB4cHNf bGx0ZW1hYy5vCiBvYmotJChDT05GSUdfUUxBM1hYWCkgKz0gcWxhM3h4eC5vCiAKIG9iai0k KENPTkZJR19QUFApICs9IHBwcF9nZW5lcmljLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3hwc19sbHRlbWFjLmMgYi9kcml2ZXJzL25ldC94cHNfbGx0ZW1hYy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjRlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL25ldC94cHNfbGx0ZW1hYy5jCkBAIC0wLDAgKzEsMTU2MiBAQAorLyo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisKKyBEcml2ZXIgZm9yIFhpbGlueCB0ZW1hYyBldGhlcm5ldCBOSUMncwor CisgQXV0aG9yOiBZb3NoaW8gS2FzaGl3YWdpCisgQ29weXJpZ2h0IChjKSAyMDA4IE5pc3Np biBTeXN0ZW1zIENvLixMdGQuCisKKyBSZXZpc29uczogRGF2aWQgSC4gTHluY2ggSnIuIDxk aGxpaUBkbGFzeXMubmV0PgorIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IERMQSBTeXN0ZW1z CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0qLworLyogRFJWX05BTUUgaXMgZm9yIGNvbXBhdGliaWxp dHkgd2l0aCBleGlzdGluZyB4aWxpbnggbGwgdGVtYWMgZHJpdmVyCisgKiBhbHNvIHdpdGgg IG9mL2R0YyBvYmplY3QgbmFtZXMgKi8KKyNkZWZpbmUgRFJWX05BTUUgICAgICAgICJ4aWxp bnhfbGx0ZW1hYyIKKyNkZWZpbmUgRFJWX0FVVEhPUiAgICAgICJZb3NoaW8gS2FzaGl3YWdp IgorI2RlZmluZSBEUlZfRU1BSUwgICAgICAgIiIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0 aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4 L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNs dWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8 bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4gICAgICAvKiBqdXN0IG5lZWRl ZCBmb3Igc2l6ZW9mKHRjcGhkcikgKi8KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4gICAgICAv KiBuZWVkZWQgZm9yIHNpemVvZih1ZHBoZHIpICovCisjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjZGVmaW5lIE1JSV9BTkkgICAgICAgICAg ICAgICAgICAgICAweDEwCisjZGVmaW5lIFBIWV9OVU0gICAgICAgICAgICAgICAgICAgICAw CisjZGVmaW5lIFBIWV9USU1FT1VUICAgICAgICAgICAgICAgICAxMDAwMAorCisjZGVmaW5l IE1JSV9TU1IgICAgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIE1JSV9TU1JfTElO SyAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIE1JSV9TU1JfU1BETUFT SyAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIE1JSV9TU1JfU1BEMTAwMCAgICAg ICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIE1JSV9TU1JfU1BEMTAwICAgICAgICAg ICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIE1JSV9TU1JfU1BEMTAgICAgICAgICAgICAg ICAgICAgMAorI2RlZmluZSBNSUlfU1NSX0ZEICAgICAgICAgICAgICAgICAgICAgICgxIDw8 IDEzKQorCisjZGVmaW5lIE1JSV9JU1IgICAgICAgICAgICAgICAgICAgICAweDEzCisjZGVm aW5lIE1JSV9SRUdfTUFYCQkJCQkweGZmCisjZGVmaW5lIFRFTUFDX1JFR19NQVgJCQkJMHgz ZmYKKyNkZWZpbmUgUEhZX0FERFJfSU5WQUxJRAkJCTB4ZmYKKworLyogcGFja2V0IHNpemUg aW5mbyAqLworI2RlZmluZSBYVEVfTVRVICAgICAgICAgICAgICAgICAgICAxNTAwICAgIC8q IG1heCBNVFUgc2l6ZSBvZiBFdGhlcm5ldCBmcmFtZSAqLworI2RlZmluZSBYVEVfSERSX1NJ WkUgICAgICAgICAgICAgICAxNCAgICAgIC8qIHNpemUgb2YgRXRoZXJuZXQgaGVhZGVyICov CisjZGVmaW5lIFhURV9UUkxfU0laRSAgICAgICAgICAgICAgIDQgICAgICAgLyogc2l6ZSBv ZiBFdGhlcm5ldCB0cmFpbGVyIChGQ1MpICovCisjZGVmaW5lIFhURV9NQVhfRlJBTUVfU0la RSAgICAgICAgIChYVEVfTVRVICsgWFRFX0hEUl9TSVpFICsgWFRFX1RSTF9TSVpFKQorI2Rl ZmluZSBYVEVfSlVNQk9fTVRVICAgICAgICAgICAgICA5MDAwCisjZGVmaW5lIFhURV9NQVhf SlVNQk9fRlJBTUVfU0laRSAgIChYVEVfSlVNQk9fTVRVICsgWFRFX0hEUl9TSVpFICsgWFRF X1RSTF9TSVpFKQorCisvKiAgQ29uZmlndXJhdGlvbiBvcHRpb25zICovCisKKy8qICBBY2Nl cHQgYWxsIGluY29taW5nIHBhY2tldHMuCisgKiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8g ZGlzYWJsZWQgKGNsZWFyZWQpICovCisjZGVmaW5lIFhURV9PUFRJT05fUFJPTUlTQyAgICAg ICAgICAgICAgICAgICAgICAoMSA8PCAwKQorLyogIEp1bWJvIGZyYW1lIHN1cHBvcnQgZm9y IFR4ICYgUnguCisgKiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gZGlzYWJsZWQgKGNsZWFy ZWQpICovCisjZGVmaW5lIFhURV9PUFRJT05fSlVNQk8gICAgICAgICAgICAgICAgICAgICAg ICAoMSA8PCAxKQorLyogIFZMQU4gUnggJiBUeCBmcmFtZSBzdXBwb3J0LgorICogIFRoaXMg b3B0aW9uIGRlZmF1bHRzIHRvIGRpc2FibGVkIChjbGVhcmVkKSAqLworI2RlZmluZSBYVEVf T1BUSU9OX1ZMQU4gICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKy8qICBFbmFi bGUgcmVjb2duaXRpb24gb2YgZmxvdyBjb250cm9sIGZyYW1lcyBvbiBSeAorICogIFRoaXMg b3B0aW9uIGRlZmF1bHRzIHRvIGVuYWJsZWQgKHNldCkgKi8KKyNkZWZpbmUgWFRFX09QVElP Tl9GTE9XX0NPTlRST0wgICAgICAgICAgICAgICAgICgxIDw8IDQpCisvKiAgU3RyaXAgRkNT IGFuZCBQQUQgZnJvbSBpbmNvbWluZyBmcmFtZXMuCisgKiAgTm90ZTogUEFEIGZyb20gVkxB TiBmcmFtZXMgaXMgbm90IHN0cmlwcGVkLgorICogIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRv IGRpc2FibGVkIChzZXQpICovCisjZGVmaW5lIFhURV9PUFRJT05fRkNTX1NUUklQICAgICAg ICAgICAgICAgICAgICAoMSA8PCA1KQorLyogIEdlbmVyYXRlIEZDUyBmaWVsZCBhbmQgYWRk IFBBRCBhdXRvbWF0aWNhbGx5IGZvciBvdXRnb2luZyBmcmFtZXMuCisgKiAgVGhpcyBvcHRp b24gZGVmYXVsdHMgdG8gZW5hYmxlZCAoc2V0KSAqLworI2RlZmluZSBYVEVfT1BUSU9OX0ZD U19JTlNFUlQgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKy8qICBFbmFibGUgTGVuZ3Ro L1R5cGUgZXJyb3IgY2hlY2tpbmcgZm9yIGluY29taW5nIGZyYW1lcy4gV2hlbiB0aGlzIG9w dGlvbiBpcworc2V0LCB0aGUgTUFDIHdpbGwgZmlsdGVyIGZyYW1lcyB0aGF0IGhhdmUgYSBt aXNtYXRjaGVkIHR5cGUvbGVuZ3RoIGZpZWxkCithbmQgaWYgWFRFX09QVElPTl9SRVBPUlRf UlhFUlIgaXMgc2V0LCB0aGUgdXNlciBpcyBub3RpZmllZCB3aGVuIHRoZXNlCit0eXBlcyBv ZiBmcmFtZXMgYXJlIGVuY291bnRlcmVkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIGNsZWFyZWQs IHRoZSBNQUMgd2lsbAorYWxsb3cgdGhlc2UgdHlwZXMgb2YgZnJhbWVzIHRvIGJlIHJlY2Vp dmVkLgorVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gZW5hYmxlZCAoc2V0KSAqLworI2RlZmlu ZSBYVEVfT1BUSU9OX0xFTlRZUEVfRVJSICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKy8q ICBFbmFibGUgdGhlIHRyYW5zbWl0dGVyLgorICogIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRv IGVuYWJsZWQgKHNldCkgKi8KKyNkZWZpbmUgWFRFX09QVElPTl9UWEVOICAgICAgICAgICAg ICAgICAgICAgICAgICgxIDw8IDExKQorLyogIEVuYWJsZSB0aGUgcmVjZWl2ZXIKKyogICBU aGlzIG9wdGlvbiBkZWZhdWx0cyB0byBlbmFibGVkIChzZXQpICovCisjZGVmaW5lIFhURV9P UFRJT05fUlhFTiAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKworLyogIERl ZmF1bHQgb3B0aW9ucyBzZXQgd2hlbiBkZXZpY2UgaXMgaW5pdGlhbGl6ZWQgb3IgcmVzZXQg Ki8KKyNkZWZpbmUgWFRFX09QVElPTl9ERUZBVUxUUyAgICAgICAgICAgICAgICAgICAgIFwK KwkoWFRFX09QVElPTl9UWEVOIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgWFRF X09QVElPTl9GTE9XX0NPTlRST0wgfCAgICAgICAgICAgICAgICAgIFwKKwkgWFRFX09QVElP Tl9SWEVOKQorCisvKiBYUFNfTExfVEVNQUMgU0RNQSByZWdpc3RlcnMgZGVmaW5pdGlvbiAq LworCisjZGVmaW5lIFRYX05YVERFU0NfUFRSICAgICAgMHgwMCAgICAgICAgICAgIC8qIHIg Ki8KKyNkZWZpbmUgVFhfQ1VSQlVGX0FERFIgICAgICAweDA0ICAgICAgICAgICAgLyogciAq LworI2RlZmluZSBUWF9DVVJCVUZfTEVOR1RIICAgIDB4MDggICAgICAgICAgICAvKiByICov CisjZGVmaW5lIFRYX0NVUkRFU0NfUFRSICAgICAgMHgwYyAgICAgICAgICAgIC8qIHJ3ICov CisjZGVmaW5lIFRYX1RBSUxERVNDX1BUUiAgICAgMHgxMCAgICAgICAgICAgIC8qIHJ3ICov CisjZGVmaW5lIFRYX0NITkxfQ1RSTCAgICAgICAgMHgxNCAgICAgICAgICAgIC8qIHJ3ICov CisvKgorIDA6NyAgICAgIDI0OjMxICAgICAgIElSUVRpbWVvdXQKKyA4OjE1ICAgICAxNjoy MyAgICAgICBJUlFDb3VudAorIDE2OjIwICAgIDExOjE1ICAgICAgIFJlc2VydmVkCisgMjEg ICAgICAgMTAgICAgICAgICAgMAorIDIyICAgICAgIDkgICAgICAgICAgIFVzZUludE9uRW5k CisgMjMgICAgICAgOCAgICAgICAgICAgTGRJUlFDbnQKKyAyNCAgICAgICA3ICAgICAgICAg ICBJUlFFbgorIDI1OjI4ICAgIDM6NiAgICAgICAgIFJlc2VydmVkCisgMjkgICAgICAgMiAg ICAgICAgICAgSXJxRXJyRW4KKyAzMCAgICAgICAxICAgICAgICAgICBJcnFEbHlFbgorIDMx ICAgICAgIDAgICAgICAgICAgIElycUNvYWxFbgorKi8KKyNkZWZpbmUgQ0hOTF9DVFJMX0lS UV9JT0UgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgQ0hOTF9DVFJMX0lSUV9FTiAgICAgICAg KDEgPDwgNykKKyNkZWZpbmUgQ0hOTF9DVFJMX0lSUV9FUlJfRU4gICAgKDEgPDwgMikKKyNk ZWZpbmUgQ0hOTF9DVFJMX0lSUV9ETFlfRU4gICAgKDEgPDwgMSkKKyNkZWZpbmUgQ0hOTF9D VFJMX0lSUV9DT0FMX0VOICAgKDEgPDwgMCkKKyNkZWZpbmUgVFhfSVJRX1JFRyAgICAgICAg ICAweDE4ICAgICAgICAgICAgLyogcncgKi8KKy8qCisgIDA6NyAgICAgIDI0OjMxICAgICAg IERsdFRtclZhbHVlCisgODoxNSAgICAgMTY6MjMgICAgICAgQ2xzY0NudHJWYWx1ZQorIDE2 OjE3ICAgIDE0OjE1ICAgICAgIFJlc2VydmVkCisgMTg6MjEgICAgMTA6MTMgICAgICAgQ2xz Y0NudAorIDIyOjIzICAgIDg6OSAgICAgICAgIERseUNudAorIDI0OjI4ICAgIDM6OjcgICAg ICAgIFJlc2VydmVkCisgMjkgICAgICAgMiAgICAgICAgICAgRXJySXJxCisgMzAgICAgICAg MSAgICAgICAgICAgRGx5SXJxCisgMzEgICAgICAgMCAgICAgICAgICAgQ29hbElycQorICov CisjZGVmaW5lIFRYX0NITkxfU1RTICAgICAgICAgMHgxYyAgICAgICAgICAgIC8qIHIgKi8K Ky8qCisgICAwOjkgICAgICAyMjozMSAgIFJlc2VydmVkCisgMTAgICAgICAgMjEgICAgICBU YWlsUEVycgorIDExICAgICAgIDIwICAgICAgQ21wRXJyCisgMTIgICAgICAgMTkgICAgICBB ZGRyRXJyCisgMTMgICAgICAgMTggICAgICBOeHRQRXJyCisgMTQgICAgICAgMTcgICAgICBD dXJQRXJyCisgMTUgICAgICAgMTYgICAgICBCc3lXcgorIDE2OjIzICAgIDg6MTUgICAgUmVz ZXJ2ZWQKKyAyNCAgICAgICA3ICAgICAgIEVycm9yCisgMjUgICAgICAgNiAgICAgICBJT0UK KyAyNiAgICAgICA1ICAgICAgIFNPRQorIDI3ICAgICAgIDQgICAgICAgQ21wbHQKKyAyOCAg ICAgICAzICAgICAgIFNPUAorIDI5ICAgICAgIDIgICAgICAgRU9QCisgMzAgICAgICAgMSAg ICAgICBFbmdCdXN5CisgMzEgICAgICAgMCAgICAgICBSZXNlcnZlZAorKi8KKworI2RlZmlu ZSBSWF9OWFRERVNDX1BUUiAgICAgIDB4MjAgICAgICAgICAgICAvKiByICovCisjZGVmaW5l IFJYX0NVUkJVRl9BRERSICAgICAgMHgyNCAgICAgICAgICAgIC8qIHIgKi8KKyNkZWZpbmUg UlhfQ1VSQlVGX0xFTkdUSCAgICAweDI4ICAgICAgICAgICAgLyogciAqLworI2RlZmluZSBS WF9DVVJERVNDX1BUUiAgICAgIDB4MmMgICAgICAgICAgICAvKiBydyAqLworI2RlZmluZSBS WF9UQUlMREVTQ19QVFIgICAgIDB4MzAgICAgICAgICAgICAvKiBydyAqLworI2RlZmluZSBS WF9DSE5MX0NUUkwgICAgICAgIDB4MzQgICAgICAgICAgICAvKiBydyAqLworLyoKKyAwOjcg ICAgICAyNDozMSAgICAgICBJUlFUaW1lb3V0CisgODoxNSAgICAgMTY6MjMgICAgICAgSVJR Q291bnQKKyAxNjoyMCAgICAxMToxNSAgICAgICBSZXNlcnZlZAorIDIxICAgICAgIDEwICAg ICAgICAgIDAKKyAyMiAgICAgICA5ICAgICAgICAgICBVc2VJbnRPbkVuZAorIDIzICAgICAg IDggICAgICAgICAgIExkSVJRQ250CisgMjQgICAgICAgNyAgICAgICAgICAgSVJRRW4KKyAy NToyOCAgICAzOjYgICAgICAgICBSZXNlcnZlZAorIDI5ICAgICAgIDIgICAgICAgICAgIEly cUVyckVuCisgMzAgICAgICAgMSAgICAgICAgICAgSXJxRGx5RW4KKyAzMSAgICAgICAwICAg ICAgICAgICBJcnFDb2FsRW4KKyAqLworI2RlZmluZSBSWF9JUlFfUkVHICAgICAgICAgIDB4 MzggICAgICAgICAgICAvKiBydyAqLworI2RlZmluZSBJUlFfQ09BTCAgICAgICAgKDEgPDwg MCkKKyNkZWZpbmUgSVJRX0RMWSAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElSUV9FUlIg ICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJUlFfRE1BRVJSICAgICAgKDEgPDwgNykgICAg ICAgICAgICAvKiB0aGlzIGlzIG5vdCBkb2N1bWVudGVkID8/PyAqLworLyoKKyAwOjcgICAg ICAyNDozMSAgICAgICBEbHRUbXJWYWx1ZQorIDg6MTUgICAgIDE2OjIzICAgICAgIENsc2ND bnRyVmFsdWUKKyAxNjoxNyAgICAxNDoxNSAgICAgICBSZXNlcnZlZAorIDE4OjIxICAgIDEw OjEzICAgICAgIENsc2NDbnQKKyAyMjoyMyAgICA4OjkgICAgICAgICBEbHlDbnQKKyAyNDoy OCAgICAzOjo3ICAgICAgICBSZXNlcnZlZAorKi8KKyNkZWZpbmUgUlhfQ0hOTF9TVFMgICAg ICAgICAweDNjICAgICAgICAvKiByICovCisjZGVmaW5lIENITkxfU1RTX0VOR0JVU1kgICAg KDEgPDwgMSkKKyNkZWZpbmUgQ0hOTF9TVFNfRU9QICAgICAgICAoMSA8PCAyKQorI2RlZmlu ZSBDSE5MX1NUU19TT1AgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIENITkxfU1RTX0NNUExU ICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ0hOTF9TVFNfU09FICAgICAgICAoMSA8PCA1KQor I2RlZmluZSBDSE5MX1NUU19JT0UgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIENITkxfU1RT X0VSUiAgICAgICAgKDEgPDwgNykKKworI2RlZmluZSBDSE5MX1NUU19CU1lXUiAgICAgICgx IDw8IDE2KQorI2RlZmluZSBDSE5MX1NUU19DVVJQRVJSICAgICgxIDw8IDE3KQorI2RlZmlu ZSBDSE5MX1NUU19OWFRQRVJSICAgICgxIDw8IDE4KQorI2RlZmluZSBDSE5MX1NUU19BRERS RVJSICAgICgxIDw8IDE5KQorI2RlZmluZSBDSE5MX1NUU19DTVBFUlIgICAgICgxIDw8IDIw KQorI2RlZmluZSBDSE5MX1NUU19UQUlMRVJSICAgICgxIDw8IDIxKQorLyoKKyAwOjkgICAg ICAyMjozMSAgIFJlc2VydmVkCisgMTAgICAgICAgMjEgICAgICBUYWlsUEVycgorIDExICAg ICAgIDIwICAgICAgQ21wRXJyCisgMTIgICAgICAgMTkgICAgICBBZGRyRXJyCisgMTMgICAg ICAgMTggICAgICBOeHRQRXJyCisgMTQgICAgICAgMTcgICAgICBDdXJQRXJyCisgMTUgICAg ICAgMTYgICAgICBCc3lXcgorIDE2OjIzICAgIDg6MTUgICAgUmVzZXJ2ZWQKKyAyNCAgICAg ICA3ICAgICAgIEVycm9yCisgMjUgICAgICAgNiAgICAgICBJT0UKKyAyNiAgICAgICA1ICAg ICAgIFNPRQorIDI3ICAgICAgIDQgICAgICAgQ21wbHQKKyAyOCAgICAgICAzICAgICAgIFNP UAorIDI5ICAgICAgIDIgICAgICAgRU9QCisgMzAgICAgICAgMSAgICAgICBFbmdCdXN5Cisg MzEgICAgICAgMCAgICAgICBSZXNlcnZlZAorKi8KKworI2RlZmluZSBETUFfQ09OVFJPTF9S RUcgICAgICAgICAgICAgMHg0MCAgICAgICAgICAgIC8qIHJ3ICovCisjZGVmaW5lIERNQV9D T05UUk9MX1JTVCAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworLyogWFBTX0xMX1RFTUFD IGRpcmVjdCByZWdpc3RlcnMgZGVmaW5pdGlvbiAqLworCisjZGVmaW5lIFhURV9SQUYwX09G RlNFVCAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBSQUYwX1JTVCAgICAgICAgICAgICAg ICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIFJBRjBfTUNTVFJFSiAgICAgICAgICAgICAg ICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgUkFGMF9CQ1NUUkVKICAgICAgICAgICAgICAgICAg ICAoMSA8PCAyKQorI2RlZmluZSBYVEVfVFBGMF9PRkZTRVQgICAgICAgICAgICAgIDB4MDQK KyNkZWZpbmUgWFRFX0lGR1AwX09GRlNFVCAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFhU RV9JU1IwX09GRlNFVCAgICAgICAgICAgICAgMHgwYworI2RlZmluZSBJU1IwX0hBUkRBQ1ND TVBMVCAgICAgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIElTUjBfQVVUT05FRyAgICAg ICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSVNSMF9SWENNUExUICAgICAgICAg ICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJU1IwX1JYUkVKICAgICAgICAgICAgICAg ICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElTUjBfUlhGSUZPT1ZSICAgICAgICAgICAgICAg ICAgKDEgPDwgNCkKKyNkZWZpbmUgSVNSMF9UWENNUExUICAgICAgICAgICAgICAgICAgICAo MSA8PCA1KQorI2RlZmluZSBJU1IwX1JYRENNTENLICAgICAgICAgICAgICAgICAgICgxIDw8 IDYpCisKKyNkZWZpbmUgWFRFX0lQUjBfT0ZGU0VUICAgICAgICAgICAgICAweDEwCisjZGVm aW5lIFhURV9JRVIwX09GRlNFVCAgICAgICAgICAgICAgMHgxNAorCisjZGVmaW5lIFhURV9N U1cwX09GRlNFVCAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBYVEVfTFNXMF9PRkZTRVQg ICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgWFRFX0NUTDBfT0ZGU0VUICAgICAgICAgICAg ICAweDI4CisjZGVmaW5lIFhURV9SRFkwX09GRlNFVCAgICAgICAgICAgICAgMHgyYworCisj ZGVmaW5lIFhURV9SU0VfTUlJTV9SUl9NQVNLICAgICAgMHgwMDAyCisjZGVmaW5lIFhURV9S U0VfTUlJTV9XUl9NQVNLICAgICAgMHgwMDA0CisjZGVmaW5lIFhURV9SU0VfQ0ZHX1JSX01B U0sgICAgICAgMHgwMDIwCisjZGVmaW5lIFhURV9SU0VfQ0ZHX1dSX01BU0sgICAgICAgMHgw MDQwCisKKy8qIFhQU19MTF9URU1BQyBpbmRpcmVjdCByZWdpc3RlcnMgb2Zmc2V0IGRlZmlu aXRpb24gKi8KKworLyogIFJ4IGNvbmZpZ3VyYXRpb24gd29yZCAwICovCisjZGVmaW5lIFhU RV9SWEMwX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorLyogIFJ4IGNvbmZp Z3VyYXRpb24gd29yZCAxICovCisjZGVmaW5lIFhURV9SWEMxX09GRlNFVCAgICAgICAgICAg ICAgICAgMHgwMDAwMDI0MAorLyogIFJlY2VpdmVyIHJlc2V0ICovCisjZGVmaW5lIFhURV9S WEMxX1JYUlNUX01BU0sgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorLyogIEp1bWJvIGZy YW1lIGVuYWJsZSAqLworI2RlZmluZSBYVEVfUlhDMV9SWEpNQk9fTUFTSyAgICAgICAgICAg ICAgICAoMSA8PCAzMCkKKy8qICBGQ1Mgbm90IHN0cmlwcGVkICovCisjZGVmaW5lIFhURV9S WEMxX1JYRkNTX01BU0sgICAgICAgICAgICAgICAgICgxIDw8IDI5KQorLyogIFJlY2VpdmVy IGVuYWJsZSAqLworI2RlZmluZSBYVEVfUlhDMV9SWEVOX01BU0sgICAgICAgICAgICAgICAg ICAoMSA8PCAyOCkKKy8qICBWTEFOIGVuYWJsZSAqLworI2RlZmluZSBYVEVfUlhDMV9SWFZM QU5fTUFTSyAgICAgICAgICAgICAgICAoMSA8PCAyNykKKy8qICBIYWxmIGR1cGxleCAqLwor I2RlZmluZSBYVEVfUlhDMV9SWEhEX01BU0sgICAgICAgICAgICAgICAgICAoMSA8PCAyNikK Ky8qICBMZW5ndGgvdHlwZSBjaGVjayBkaXNhYmxlICovCisjZGVmaW5lIFhURV9SWEMxX1JY TFRfTUFTSyAgICAgICAgICAgICAgICAgICgxIDw8IDI1KQorCisvKiAgVHggY29uZmlndXJh dGlvbiAqLworI2RlZmluZSBYVEVfVFhDX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAw MDAyODAKKy8qICBUcmFuc21pdHRlciByZXNldCAqLworI2RlZmluZSBYVEVfVFhDX1RYUlNU X01BU0sgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKy8qICBKdW1ibyBmcmFtZSBlbmFi bGUgKi8KKyNkZWZpbmUgWFRFX1RYQ19UWEpNQk9fTUFTSyAgICAgICAgICAgICAgICAgKDEg PDwgMzApCisvKiAgR2VuZXJhdGUgRkNTICovCisjZGVmaW5lIFhURV9UWENfVFhGQ1NfTUFT SyAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQorLyogIFRyYW5zbWl0dGVyIGVuYWJsZSAq LworI2RlZmluZSBYVEVfVFhDX1RYRU5fTUFTSyAgICAgICAgICAgICAgICAgICAoMSA8PCAy OCkKKy8qICBWTEFOIGVuYWJsZSAqLworI2RlZmluZSBYVEVfVFhDX1RYVkxBTl9NQVNLICAg ICAgICAgICAgICAgICAoMSA8PCAyNykKKy8qICBIYWxmIGR1cGxleCAqLworI2RlZmluZSBY VEVfVFhDX1RYSERfTUFTSyAgICAgICAgICAgICAgICAgICAoMSA8PCAyNikKKy8qICBGbG93 IGNvbnRyb2wgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBYVEVfRkNDX09GRlNFVCAgICAg ICAgICAgICAgICAgIDB4MDAwMDAyQzAKKy8qICBSeCBmbG93IGNvbnRyb2wgZW5hYmxlICov CisjZGVmaW5lIFhURV9GQ0NfUlhGTE9fTUFTSyAgICAgICAgICAgICAgICAgICgxIDw8IDI5 KQorLyogIFR4IGZsb3cgY29udHJvbCBlbmFibGUgKi8KKyNkZWZpbmUgWFRFX0ZDQ19UWEZM T19NQVNLICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisKKy8qICBFTUFDIGNvbmZpZ3Vy YXRpb24gKi8KKyNkZWZpbmUgWFRFX0VNQ0ZHX09GRlNFVCAgICAgICAgICAgICAgICAweDAw MDAwMzAwCisvKiAgTGluayBzcGVlZCAqLworI2RlZmluZSBYVEVfRU1DRkdfTElOS1NQRF9N QVNLICAgICAgICAgIDB4QzAwMDAwMDAKKy8qICBIb3N0IGludGVyZmFjZSBlbmFibGUgKi8K KyNkZWZpbmUgWFRFX0VNQ0ZHX0hPU1RFTl9NQVNLICAgICAgICAgICAgICAgKDEgPDwgMjYp CisvKiAgWFRFX0VNQ0ZHX0xJTktTUERfTUFTSyBmb3IgMTAgTWJpdCAqLworI2RlZmluZSBY VEVfRU1DRkdfTElOS1NQRF8xMCAgICAgICAgICAgIDB4MDAwMDAwMDAKKy8qICBYVEVfRU1D RkdfTElOS1NQRF9NQVNLIGZvciAxMDAgTWJpdCAqLworI2RlZmluZSBYVEVfRU1DRkdfTElO S1NQRF8xMDAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKy8qICBYVEVfRU1DRkdfTElOS1NQ RF9NQVNLIGZvciAxMDAwIE1iaXQgKi8KKyNkZWZpbmUgWFRFX0VNQ0ZHX0xJTktTUERfMTAw MCAgICAgICAgICAgICAgKDEgPDwgMzEpCisKKy8qICBSR01JSS9TR01JSSBjb25maWd1cmF0 aW9uICovCisjZGVmaW5lIFhURV9HTUlDX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAw MDMyMAorLyogIE1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBYVEVfTUNf T0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNDAKKy8qICBNSUkgbWFuYWdlbWVu dCBlbmFibGUgKi8KKyNkZWZpbmUgWFRFX01DX01ESU9fTUFTSyAgICAgICAgICAgICAgICAg ICAgKDEgPDwgNikKKy8qIDEwMCBNSHogaG9zdCBjbG9jayAqLworI2RlZmluZSBYVEVfTURJ T19DTE9DS19ESVZfMTAwTUh6ICAgICAgIDB4MjgKKy8qIERlZmF1bHQgTURJTyBjbG9jayBk aXZpc29yICovCisjZGVmaW5lIFhURV9NRElPX0RJVl9ERlQgICAgICAgICAgICAgICAgMjkK Ky8qICBVbmljYXN0IGFkZHJlc3Mgd29yZCAwICovCisjZGVmaW5lIFhURV9VQVcwX09GRlNF VCAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAorLyogIFVuaWNhc3QgYWRkcmVzcyB3b3Jk IDEgKi8KKyNkZWZpbmUgWFRFX1VBVzFfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAw Mzg0CisKKy8qICBNdWx0aWNhc3QgYWRkcmVzcyB3b3JkIDAgKi8KKyNkZWZpbmUgWFRFX01B VzBfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMzg4CisvKiAgTXVsdGljYXN0IGFk ZHJlc3Mgd29yZCAxICovCisjZGVmaW5lIFhURV9NQVcxX09GRlNFVCAgICAgICAgICAgICAg ICAgMHgwMDAwMDM4QworLyogIFByb21pc2NpdW91cyBtb2RlICovCisjZGVmaW5lIFhURV9B Rk1fT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5MAorLyogIFByb21pc2N1b3Vz IG1vZGUgZW5hYmxlICovCisjZGVmaW5lIFhURV9BRk1fRVBQUk1fTUFTSyAgICAgICAgICAg ICAgICAgICgxIDw8IDMxKQorCisvKiBJbnRlcnJ1cHQgUmVxdWVzdCBzdGF0dXMgKi8KKyNk ZWZpbmUgWFRFX1RJU19PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwM0EwCisjZGVm aW5lIFRJU19GUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjZGVm aW5lIFRJU19NUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVm aW5lIFRJU19NV0lTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVm aW5lIFRJU19BUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVm aW5lIFRJU19BV0lTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVm aW5lIFRJU19DUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVm aW5lIFRJU19DV0lTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisvKiBJ bnRlcnJ1cHQgUmVxdWVzdCBlbmFibGUgKi8KKyNkZWZpbmUgWFRFX1RJRV9PRkZTRVQgICAg ICAgICAgICAgICAgICAweDAwMDAwM0E0CisKKy8qKiAgTUlJIE1hbWFnZW1lbnQgQ29udHJv bCByZWdpc3RlciAoTUdUQ1IpICovCisKKy8qICBNSUkgZGF0YSAqLworI2RlZmluZSBYVEVf TUdURFJfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAzQjAKKy8qICBNSUkgY29udHJv bCAqLworI2RlZmluZSBYVEVfTUlJTUFJX09GRlNFVCAgICAgICAgICAgICAgIDB4MDAwMDAz QjQKKworI2RlZmluZSBDTlRMUkVHX1dSSVRFX0VOQUJMRV9NQVNLICAgMHg4MDAwCisjZGVm aW5lIENOVExSRUdfRU1BQzFTRUxfTUFTSyAgICAgICAweDA0MDAKKyNkZWZpbmUgQ05UTFJF R19BRERSRVNTQ09ERV9NQVNLICAgIDB4MDNmZgorCisvKiBDRE1BQyBkZXNjcmlwdG9yIHN0 YXR1cyBiaXQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBTVFNfQ1RSTF9BUFAwX0VSUiAg ICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBTVFNfQ1RSTF9BUFAwX0lSUU9ORU5EICAgICgx IDw8IDMwKQorLyogdW5kb2NjdW1lbnRlZCAqLworI2RlZmluZSBTVFNfQ1RSTF9BUFAwX1NU T1BPTkVORCAgICgxIDw8IDI5KQorI2RlZmluZSBTVFNfQ1RSTF9BUFAwX0NNUExUICAgICAg ICgxIDw8IDI4KQorI2RlZmluZSBTVFNfQ1RSTF9BUFAwX1NPUCAgICAgICAgICgxIDw8IDI3 KQorI2RlZmluZSBTVFNfQ1RSTF9BUFAwX0VPUCAgICAgICAgICgxIDw8IDI2KQorI2RlZmlu ZSBTVFNfQ1RSTF9BUFAwX0VOR0JVU1kgICAgICgxIDw8IDI1KQorLyogdW5kb2N1bWVudGVk ICovCisjZGVmaW5lIFNUU19DVFJMX0FQUDBfRU5HUlNUICAgICAgKDEgPDwgMjQpCisKKyNk ZWZpbmUgVFhfQ09OVFJPTF9DQUxDX0NTVU1fTUFTSyAgIDEKKworI2RlZmluZSBYVEVfQUxJ R04gICAgICAgMzIKKyNkZWZpbmUgQlVGRkVSX0FMSUdOKGFkcikgKChYVEVfQUxJR04gLSAo KHUzMikgYWRyKSkgJSBYVEVfQUxJR04pCisKKyNkZWZpbmUgTVVMVElDQVNUX0NBTV9UQUJM RV9OVU0gNAorCisjZGVmaW5lIFRYX0JEX05VTSAgIDY0CisjZGVmaW5lIFJYX0JEX05VTSAg IDEyOAorCisjZGVmaW5lIFhJTElOWF9HU1JEM19OQVBJCisKKworLyogVFgvUlggQ1VSREVT Q19QVFIgcG9pbnRzIHRvIGZpcnN0IGRlc2NyaXB0b3IgKi8KKy8qIFRYL1JYIFRBSUxERVND X1BUUiBwb2ludHMgdG8gbGFzdCBkZXNjcmlwdG9yIGluIGxpbmtlZCBsaXN0ICovCisKK3N0 cnVjdCBjZG1hY19iZCB7CisJc3RydWN0IGNkbWFjX2JkICAgICAgICAqbmV4dDsKKwl1bnNp Z25lZCBjaGFyICAgICAgICAgICpwaHlzOworCXUzMiAgICAgICAgICAgICAgICAgICAgbGVu OworCXUzMiAgICAgICAgICAgICAgICAgICAgYXBwMDsKKwl1MzIgICAgICAgICAgICAgICAg ICAgIGFwcDE7ICAgICAgICAgICAvKiBUWCBzdGFydCA8PCAxNiB8IGluc2VydCAqLworCXUz MiAgICAgICAgICAgICAgICAgICAgYXBwMjsgICAgICAgICAgIC8qIFRYIGNzdW0gKi8KKwl1 MzIgICAgICAgICAgICAgICAgICAgIGFwcDM7ICAgICAgICAgICAvKiB1bnVzZWQgPyAqLwor CXUzMiAgICAgICAgICAgICAgICAgICAgYXBwNDsgICAgICAgICAgIC8qIHNrYiBmb3IgVFgg bGVuZ3RoIGZvciBSWCAqLworfSA7CisvKiBBUFAwIGJpdHMKKyAwICAgIEVycm9yCisgMSAg ICBJcnFPbkVuZCAgICBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgYXQgY29tcGxldGlvbiBvZiBE TUEgIG9wCisgMiAgICByZXNlcnZlZAorIDMgICAgY29tcGxldGVkICAgQ3VycmVudCBkZXNj cmlwdG9yIGNvbXBsZXRlZAorIDQgICAgU09QICAgICAgICAgVFggLSBtYXJrcyBmaXJzdCBk ZXNjLyBSWCBtYXJrcyBmaXJzdCBkZXNjdAorIDUgICAgRU9QICAgICAgICAgVFggbWFya3Mg bGFzdCBkZXNjL1JYIG1hcmtzIGxhc3QgZGVzYworIDYgICAgRW5nQnVzeSAgICAgRE1BIGlz IHByb2Nlc3NpbmcKKyA3ICAgIHJlc2VydmVkCisgODozMSBhcHBsaWNhdGlvbiBzcGVjaWZp YworICovCisKK3N0cnVjdCB0ZW1hY19yZWdpb24geworCXZvaWQgX19pb21lbSAgICAgICAg ICAgICAgICAqYWRkcjsKKwl2b2lkIF9faW9tZW0gICAgICAgICAgICAgICAgKmJhc2U7CisJ dW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIGxlbjsKK307CisKK3N0cnVjdCB0ZW1hY19s b2NhbCB7CisJLyogU3RhdGlzdGljcyBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgbmV0 X2RldmljZV9zdGF0cyAgICAgc3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2UgICAgICAgICAg ICpkZXY7CisJc3RydWN0IHRlbWFjX3JlZ2lvbgkJCXJlZ3M7CisJc3RydWN0IHRlbWFjX3Jl Z2lvbgkJCXNkbWE7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHR4X2lycTsKKwlp bnQgICAgICAgICAgICAgICAgICAgICAgICAgcnhfaXJxOworCisJaW50ICAgICAgICAgICAg ICAgICAgICAgICAgIGVtYWNfbnVtOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICBw aHlfYWRkcjsKKwkvKiBTcGVlZCBvZiBsaW5rIDEwLzEwMC8xMDAwICovCisJaW50ICAgICAg ICAgICAgICAgICAgICAgICAgIExpbmtTcGVlZDsKKwkvKiBDdXJyZW50IG9wdGlvbnMgd29y ZCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczsKKwlzcGlubG9ja190ICAg ICAgICAgICAgICAgICAgbG9jazsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgcnhf bG9jazsKKwlzdHJ1Y3QgY2RtYWNfYmQgICAgICAgICAgICAgKnR4X2JkX3Y7CisJc3RydWN0 IGNkbWFjX2JkICAgICAgICAgICAgICp0eF9iZF9wOworCXN0cnVjdCBjZG1hY19iZCAgICAg ICAgICAgICAqcnhfYmRfdjsKKwlzdHJ1Y3QgY2RtYWNfYmQgICAgICAgICAgICAgKnJ4X2Jk X3A7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHR4X2JkX2NpOworCWludCAgICAg ICAgICAgICAgICAgICAgICAgICB0eF9iZF9uZXh0OworCWludCAgICAgICAgICAgICAgICAg ICAgICAgICB0eF9iZF90YWlsOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICByeF9i ZF9jaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAgICAgKipyeF9za2I7Cit9OworCisK K3N0YXRpYyB1MzIKK3Rpb3Ioc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBvZmZzZXQp Cit7CisJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOworCisJ cmV0dXJuIGluX2JlMzIoKHUzMiAqKShscC0+cmVncy5hZGRyICsgb2Zmc2V0KSk7Cit9CisK K3N0YXRpYyB2b2lkCit0aW93KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgb2Zmc2V0 LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2 KG5kZXYpOworCW91dF9iZTMyKCh1MzIgKikgKGxwLT5yZWdzLmFkZHIgKyBvZmZzZXQpLCB2 YWx1ZSk7Cit9CisKK3N0YXRpYyB1MzIKK3Rpb19zZXRjbHIoc3RydWN0IG5ldF9kZXZpY2Ug Km5kZXYsIHUzMiByZWdfbnVtLCB1MzIgdmFsLCBpbnQgZmxnKQoreworCXUzMiBSZWcgPSB0 aW9yKG5kZXYsIHJlZ19udW0pICYgfnZhbDsKKwlpZiAoZmxnKQorCQlSZWcgfD0gdmFsOwor CXRpb3cobmRldiwgcmVnX251bSwgUmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUz Mgorc2RfaW9yKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgb2Zmc2V0KQoreworCXN0 cnVjdCB0ZW1hY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlyZXR1cm4gaW5f YmUzMigodTMyICopKGxwLT5zZG1hLmFkZHIgKyBvZmZzZXQpKTsKK30KKworc3RhdGljIHZv aWQKK3NkX2lvdyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG9mZnNldCwgdTMyIHZh bHVlKQoreworCXN0cnVjdCB0ZW1hY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsK KwlvdXRfYmUzMigodTMyICopIChscC0+c2RtYS5hZGRyICsgb2Zmc2V0KSwgdmFsdWUpOwor fQorCitzdGF0aWMgdW5zaWduZWQgaW50CittZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2Ug Km5kZXYsIGludCBwaHlfaWQsIGludCByZWdfbnVtKQoreworCXN0cnVjdCB0ZW1hY19sb2Nh bCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgdGltZW91dCA9IFBIWV9USU1FT1VU OworCXUzMiBydiA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgocmVnX251 bSA+ICBNSUlfUkVHX01BWCkgfHwKKwkJKHBoeV9pZCA9PSBQSFlfQUREUl9JTlZBTElEKSkg eworCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCQkibWRpb19yZWFkKCV4LCAleCkgaW52YWxp ZCByZWdfbnVtIG9yIGludmFsaWQgcGh5X2lkXG4iLAorCQkJcmVnX251bSwgcGh5X2lkKTsK KwkJcmV0dXJuIC0xOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxh Z3MpOworCisJdGlvdyhuZGV2LCBYVEVfTFNXMF9PRkZTRVQsCisJCQkoKHBoeV9pZCA8PCA1 KSB8IChyZWdfbnVtKSkpOworCXRpb3cobmRldiwgWFRFX0NUTDBfT0ZGU0VULAorCQkJWFRF X01JSU1BSV9PRkZTRVQgfCAobHAtPmVtYWNfbnVtIDw8IDEwKSk7CisJd2hpbGUgKCEodGlv cihuZGV2LCBYVEVfUkRZMF9PRkZTRVQpICYgWFRFX1JTRV9NSUlNX1JSX01BU0spKSB7CisJ CXVkZWxheSgxKTsKKwkJaWYgKC0tdGltZW91dCA9PSAwKSB7CisJCQlkZXZfZXJyKCZuZGV2 LT5kZXYsICJyZWFkX01JSSBidXN5IHRpbWVvdXQhIVxuIik7CisJCQlyZXR1cm4gLTE7CisJ CX0KKwl9CisJcnYgPSB0aW9yKG5kZXYsIFhURV9MU1cwX09GRlNFVCk7CisKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBydjsKK30KKwor c3RhdGljIHZvaWQKK21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBw aHlfaWQsIGludCByZWdfbnVtLCBpbnQgcmVnX3ZhbCkKK3sKKwlzdHJ1Y3QgdGVtYWNfbG9j YWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJdTMyIHRpbWVvdXQgPSBQSFlfVElNRU9V VCwgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKHJlZ19udW0gPiAg TUlJX1JFR19NQVgpIHx8CisJCShwaHlfaWQgPT0gUEhZX0FERFJfSU5WQUxJRCkpIHsKKwkJ ZGV2X2VycigmbmRldi0+ZGV2LAorCQkJIm1kaW9fd3JpdGUoJXgsICV4KWludmFsaWQgcmVn X251bSBvciBpbnZhbGlkIHBoeV9pZFxuIiwKKwkJCXJlZ19udW0sIHBoeV9pZCk7CisJCXJl dHVybiAtMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsK KworCXRpb3cobmRldiwgWFRFX0xTVzBfT0ZGU0VULAorCQkJcmVnX3ZhbCk7CisJdGlvdyhu ZGV2LCBYVEVfQ1RMMF9PRkZTRVQsCisJCQlDTlRMUkVHX1dSSVRFX0VOQUJMRV9NQVNLIHwg WFRFX01HVERSX09GRlNFVCk7CisJdGlvdyhuZGV2LCBYVEVfTFNXMF9PRkZTRVQsCisJCQko KHBoeV9pZCA8PCA1KSB8IChyZWdfbnVtKSkpOworCXRpb3cobmRldiwgWFRFX0NUTDBfT0ZG U0VULAorCQkJQ05UTFJFR19XUklURV9FTkFCTEVfTUFTSworCQkJfCBYVEVfTUlJTUFJX09G RlNFVAorCQkJfCAobHAtPmVtYWNfbnVtIDw8IDEwKSk7CisJd2hpbGUgKCEoc3RhdHVzID0g dGlvcihuZGV2LCBYVEVfUkRZMF9PRkZTRVQpICYgWFRFX1JTRV9NSUlNX1dSX01BU0spKSB7 CisJCXVkZWxheSgxKTsKKwkJaWYgKC0tdGltZW91dCA9PSAwKSB7CisJCQlkZXZfZXJyKCZu ZGV2LT5kZXYsICJ3cml0ZV9NSUkgYnVzeSB0aW1lb3V0ISFcbiIpOworCQkJcmV0dXJuIDsK KwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7 Cit9CisKK3N0YXRpYyB1MzIKK2VtYWNfY2ZnX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5k ZXYsIHUxNiByZWdfbnVtKQoreworCXN0cnVjdCB0ZW1hY19sb2NhbCAqbHAgPSBuZXRkZXZf cHJpdihuZGV2KTsKKwl1MzIgdGltZW91dCA9IFBIWV9USU1FT1VUOworCisJaWYgKHJlZ19u dW0gPiBURU1BQ19SRUdfTUFYKSB7CisJCWRldl9lcnIoJm5kZXYtPmRldiwKKwkJCQkiZW1h Y19jZmdfcmVhZCgleCkgaW52YWxpZCByZWdfbnVtXG4iLAorCQkJCXJlZ19udW0pOworCQly ZXR1cm4gLTE7CisJfQorCisJdGlvdyhuZGV2LCBYVEVfQ1RMMF9PRkZTRVQsIChscC0+ZW1h Y19udW0gPDwgMTApIHwgcmVnX251bSk7CisJd2hpbGUgKCEodGlvcihuZGV2LCBYVEVfUkRZ MF9PRkZTRVQpICYgWFRFX1JTRV9DRkdfUlJfTUFTSykpIHsKKwkJdWRlbGF5KDEpOworCQlp ZiAoLS10aW1lb3V0ID09IDApIHsKKwkJCWRldl9lcnIoJm5kZXYtPmRldiwgInJlYWQgdGVt YWMgYnVzeSB0aW1lb3V0ISFcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVy biAodTMyKSB0aW9yKG5kZXYsIFhURV9MU1cwX09GRlNFVCk7CisKK30KKworc3RhdGljIHZv aWQKK2VtYWNfY2ZnX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcmVnX251 bSwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgdGVtYWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYo bmRldik7CisJdTMyIHRpbWVvdXQgPSBQSFlfVElNRU9VVDsKKworCWlmIChyZWdfbnVtID4g VEVNQUNfUkVHX01BWCkgeworCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCQkJImVtYWNfY2Zn X3dyaXRlKCV4KSBpbnZhbGlkIHJlZ19udW1cbiIsCisJCQkJcmVnX251bSk7CisJCXJldHVy biAtMTsKKwl9CisKKwl0aW93KG5kZXYsIFhURV9MU1cwX09GRlNFVCwgdmFsKTsKKwl0aW93 KG5kZXYsCisJCQlYVEVfQ1RMMF9PRkZTRVQsCisJCQkoQ05UTFJFR19XUklURV9FTkFCTEVf TUFTSworCQkJIHwgKGxwLT5lbWFjX251bSA8PCAxMCkKKwkJCSB8IHJlZ19udW0pKTsKKwl3 aGlsZSAoISh0aW9yKG5kZXYsIFhURV9SRFkwX09GRlNFVCkgJiBYVEVfUlNFX0NGR19XUl9N QVNLKSkgeworCQl1ZGVsYXkoMSk7CisJCWlmICgtLXRpbWVvdXQgPT0gMCkgeworCQkJZGV2 X2VycigmbmRldi0+ZGV2LCAid3JpdGUgdGVtYWMgYnVzeSB0aW1lb3V0ISFcbiIpOworCQkJ cmV0dXJuIDsKKwkJfQorCX0KK30KKworc3RhdGljIHUzMgorZW1hY19jZmdfc2V0Y2xyKHN0 cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcmVnX251bSwgdTMyIHZhbCwgaW50IGZsZykK K3sKKwl1MzIgUmVnOworCWlmIChyZWdfbnVtID4gVEVNQUNfUkVHX01BWCkgeworCQlkZXZf ZXJyKCZuZGV2LT5kZXYsCisJCQkJImVtYWNfY2ZnX3NldGNscigleCkgaW52YWxpZCByZWdf bnVtXG4iLAorCQkJCXJlZ19udW0pOworCQlyZXR1cm4gLTE7CisJfQorCisJUmVnID0gZW1h Y19jZmdfcmVhZChuZGV2LCByZWdfbnVtKSAmIH52YWw7CisJaWYgKGZsZykKKwkJUmVnIHw9 IHZhbDsKKwllbWFjX2NmZ193cml0ZShuZGV2LCByZWdfbnVtLCBSZWcpOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50Cit0ZW1hY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9k ZXZpY2UgKm5kZXYsIHZvaWQgKmFkZHJlc3MpCit7CisJaWYgKGFkZHJlc3MpCisJCW1lbWNw eShuZGV2LT5kZXZfYWRkciwgYWRkcmVzcywgRVRIX0FMRU4pOworCisJaWYgKCFpc192YWxp ZF9ldGhlcl9hZGRyKG5kZXYtPmRldl9hZGRyKSkKKwkJcmFuZG9tX2V0aGVyX2FkZHIobmRl di0+ZGV2X2FkZHIpOworCisJLyogc2V0IHVwIHVuaWNhc3QgTUFDIGFkZHJlc3MgZmlsdGVy IHNldCBpdHMgbWFjIGFkZHJlc3MgKi8KKwllbWFjX2NmZ193cml0ZShuZGV2LCBYVEVfVUFX MF9PRkZTRVQsCisJCQkoKG5kZXYtPmRldl9hZGRyWzBdKSB8CisJCQkobmRldi0+ZGV2X2Fk ZHJbMV0gPDwgOCkgfAorCQkJKG5kZXYtPmRldl9hZGRyWzJdIDw8IDE2KSB8CisJCQkobmRl di0+ZGV2X2FkZHJbM10gPDwgMjQpKSk7CisJLyogVGhlcmUgYXJlIHJlc2VydmVkIGJpdHMg aW4gRVVBVzEKKwkgKiBzbyBkb24ndCBhZmZlY3QgdGhlbSBTZXQgTUFDIGJpdHMgWzQ3OjMy XSBpbiBFVUFXMSAqLworCWVtYWNfY2ZnX3dyaXRlKG5kZXYsIFhURV9VQVcxX09GRlNFVCwK KwkJCSAgKG5kZXYtPmRldl9hZGRyWzRdICYgMHgwMDAwMDBmZikgfAorCQkJICAobmRldi0+ ZGV2X2FkZHJbNV0gPDwgOCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit0 ZW1hY19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJ c3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOworCXUzMiBtdWx0 aV9hZGRyX21zdywgbXVsdGlfYWRkcl9sc3c7CisJaW50IGk7CisKKwlzcGluX2xvY2soJmxw LT5sb2NrKTsKKworCWlmIChuZGV2LT5mbGFncyAmIChJRkZfQUxMTVVMVEkgfCBJRkZfUFJP TUlTQykKKwkJCXx8IG5kZXYtPm1jX2NvdW50ID4gTVVMVElDQVNUX0NBTV9UQUJMRV9OVU0p IHsKKwkJLyoKKwkJICoJV2UgbXVzdCBtYWtlIHRoZSBrZXJuZWwgcmVhbGlzZSB3ZSBoYWQg dG8gbW92ZQorCQkgKglpbnRvIHByb21pc2MgbW9kZSBvciB3ZSBzdGFydCBhbGwgb3V0IHdh ciBvbgorCQkgKgl0aGUgY2FibGUuIElmIGl0IHdhcyBhIHByb21pc2MgcmVxdWVzdCB0aGUK KwkJICoJZmxhZyBpcyBhbHJlYWR5IHNldC4gSWYgbm90IHdlIGFzc2VydCBpdC4KKwkJICov CisJCW5kZXYtPmZsYWdzIHw9IElGRl9QUk9NSVNDOworCQlkZXZfaW5mbygmbmRldi0+ZGV2 LCAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsCisJCQkJbmRldi0+bmFtZSk7 CisJCWVtYWNfY2ZnX3dyaXRlKG5kZXYsIFhURV9BRk1fT0ZGU0VULCBYVEVfQUZNX0VQUFJN X01BU0spOworCX0gZWxzZSBpZiAobmRldi0+bWNfY291bnQpIHsKKwkJc3RydWN0IGRldl9t Y19saXN0ICptY2xpc3Q7CisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IG5kZXYtPm1jX2xpc3Q7 CisJCQkJbWNsaXN0ICYmIGkgPCBuZGV2LT5tY19jb3VudDsKKwkJCQlpKyssIG1jbGlzdCA9 IG1jbGlzdC0+bmV4dCkgeworCisJCQlpZiAoaSA+PSBNVUxUSUNBU1RfQ0FNX1RBQkxFX05V TSkKKwkJCQlicmVhazsKKwkJCW11bHRpX2FkZHJfbXN3ID0gKChtY2xpc3QtPmRtaV9hZGRy WzNdIDw8IDI0KQorCQkJCQkJfCAobWNsaXN0LT5kbWlfYWRkclsyXSA8PCAxNikKKwkJCQkJ CXwgKG1jbGlzdC0+ZG1pX2FkZHJbMV0gPDwgOCkKKwkJCQkJCQl8IG1jbGlzdC0+ZG1pX2Fk ZHJbMF0pOworCQkJZW1hY19jZmdfd3JpdGUobmRldiwgWFRFX01BVzBfT0ZGU0VULCBtdWx0 aV9hZGRyX21zdyk7CisJCQltdWx0aV9hZGRyX2xzdyA9ICgobWNsaXN0LT5kbWlfYWRkcls1 XSA8PCA4KQorCQkJCQkJCXwgbWNsaXN0LT5kbWlfYWRkcls0XSk7CisJCQltdWx0aV9hZGRy X2xzdyB8PSAoaSA8PCAxNik7CisJCQllbWFjX2NmZ193cml0ZShuZGV2LCBYVEVfTUFXMV9P RkZTRVQsIG11bHRpX2FkZHJfbHN3KTsKKwkJfQorCX0gIGVsc2UgeworCQlkZXZfaW5mbygm bmRldi0+ZGV2LCAiJXM6IFByb21pc2N1b3VzIG1vZGUgZGlzYWJsZWQuXG4iLAorCQkJCW5k ZXYtPm5hbWUpOworCQllbWFjX2NmZ193cml0ZShuZGV2LAorCQkJCVhURV9BRk1fT0ZGU0VU LAorCQkJZW1hY19jZmdfcmVhZChuZGV2LCBYVEVfQUZNX09GRlNFVCkKKwkJCSYgflhURV9B Rk1fRVBQUk1fTUFTSyk7CisJCWVtYWNfY2ZnX3dyaXRlKG5kZXYsIFhURV9NQVcwX09GRlNF VCwgMCk7CisJCWVtYWNfY2ZnX3dyaXRlKG5kZXYsIFhURV9NQVcxX09GRlNFVCwgMCk7CisJ fQorCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZW1hY19w aHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgdGVtYWNfbG9j YWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJdW5zaWduZWQgaW50IHJldCwgUmVnOwor CWludCBpaTsKKworCS8qIFNldCBkZWZhdWx0IE1ESU8gZGl2aXNvciAqLworCS8qIFNldCB1 cCBNSUkgbWFuYWdlbWVudCByZWdpc3RlcnMgdG8gd3JpdGUgdG8gUEhZICAqLworCWVtYWNf Y2ZnX3dyaXRlKG5kZXYsCisJCSBYVEVfTUNfT0ZGU0VULAorCQkgWFRFX01DX01ESU9fTUFT SyB8IFhURV9NRElPX0RJVl9ERlQpOworCisJLyoKKwkgICBTZXQgQS1OIEFkdmVydGlzZW1l bnQgUmVncyBmb3IgRnVsbCBEdXBsZXggbW9kZXMgT05MWQorCSAqLworCW1kaW9fd3JpdGUo bmRldiwKKwkJIFBIWV9OVU0sCisJCSBNSUlfQURWRVJUSVNFLAorCQkgbWRpb19yZWFkKG5k ZXYsCisJCSBQSFlfTlVNLAorCQkgTUlJX0FEVkVSVElTRSkKKwkJfCBBRFZFUlRJU0VfMTBG VUxMCisJCXwgQURWRVJUSVNFXzEwMEZVTEwKKwkJfCBBRFZFUlRJU0VfQ1NNQSk7CisJbWRp b193cml0ZShuZGV2LCBQSFlfTlVNLCBNSUlfQ1RSTDEwMDAsIEFEVkVSVElTRV8xMDAwRlVM TCk7CisKKwkvKgorCSAgIFNvZnQgcmVzZXQgdGhlIFBIWQorCSAqLworCW1kaW9fd3JpdGUo bmRldiwKKwkJCVBIWV9OVU0sCisJCQlNSUlfQk1DUiwKKwkJCW1kaW9fcmVhZChuZGV2LCBQ SFlfTlVNLCBNSUlfQk1DUikKKwkJCXwgQk1DUl9SRVNFVAorCQkJfCBCTUNSX0FORU5BQkxF CisJCQl8IEJNQ1JfQU5SRVNUQVJUKTsKKworCS8qIFdhaXQgZm9yIGEgUEhZIExpbmsgKGF1 dG8tbmVnb3RpYXRpb24gdG8gY29tcGxldGUpLi4uICAqLworCXJldCA9IG1kaW9fcmVhZChu ZGV2LCBQSFlfTlVNLCBNSUlfQk1TUik7CisJaWkgPSA2NDsKKwl3aGlsZSAoKChyZXQgJiBC TVNSX0xTVEFUVVMpICE9IEJNU1JfTFNUQVRVUykgJiYgaWktLSkgeworCQltZGVsYXkoNTAw KTsKKwkJcmV0ID0gbWRpb19yZWFkKG5kZXYsIFBIWV9OVU0sIE1JSV9CTVNSKTsKKwl9CisJ cmV0ID0gbWRpb19yZWFkKG5kZXYsIFBIWV9OVU0sIE1JSV9TU1IpOworCisJUmVnID0gZW1h Y19jZmdfcmVhZChuZGV2LCBYVEVfRU1DRkdfT0ZGU0VUKSAmIH5YVEVfRU1DRkdfTElOS1NQ RF9NQVNLOworCWlmIChyZXQgJiBNSUlfU1NSX0xJTkspIHsKKwkJc3dpdGNoIChyZXQgJiBN SUlfU1NSX1NQRE1BU0spIHsKKwkJY2FzZSBNSUlfU1NSX1NQRDEwMDA6ICAgLyogMTAwMEJh c2UtVCAqLworCQkJbHAtPkxpbmtTcGVlZCA9IDEwMDA7CisJCQllbWFjX2NmZ193cml0ZShu ZGV2LAorCQkJCQlYVEVfRU1DRkdfT0ZGU0VULAorCQkJCQlSZWcgfCAodTMyKSBYVEVfRU1D RkdfTElOS1NQRF8xMDAwKTsKKwkJCWJyZWFrOworCQljYXNlIE1JSV9TU1JfU1BEMTAwOiAg ICAvKiAxMDBCYXNlLVQgKi8KKwkJCWxwLT5MaW5rU3BlZWQgPSAxMDA7CisJCQllbWFjX2Nm Z193cml0ZShuZGV2LAorCQkJCQlYVEVfRU1DRkdfT0ZGU0VULAorCQkJCQlSZWcgfCBYVEVf RU1DRkdfTElOS1NQRF8xMDApOworCQkJYnJlYWs7CisJCWNhc2UgTUlJX1NTUl9TUEQxMDog LyogMTBCYXNlLVQgKi8KKwkJCWxwLT5MaW5rU3BlZWQgPSAxMDsKKwkJCWJyZWFrOworCQl9 OworCQlpZiAoKHJldCAmIE1JSV9TU1JfRkQpID09IDB4MCkgeworCQkJLyogc2V0IHVwIFR4 L1J4IGNvbmZpZyByZWcgZm9yIGhhbGYgZHVwbGV4ICovCisJCQlyZXQgPSBlbWFjX2NmZ19y ZWFkKG5kZXYsIFhURV9UWENfT0ZGU0VUKTsKKwkJCWVtYWNfY2ZnX3dyaXRlKG5kZXYsCisJ CQkJCVhURV9UWENfT0ZGU0VULAorCQkJCQlyZXQgfCBYVEVfVFhDX1RYSERfTUFTSyk7CisJ CQlyZXQgPSBlbWFjX2NmZ19yZWFkKG5kZXYsIFhURV9SWEMxX09GRlNFVCk7CisJCQllbWFj X2NmZ193cml0ZShuZGV2LAorCQkJCQlYVEVfUlhDMV9PRkZTRVQsCisJCQkJCXJldCB8IFhU RV9SWEMxX1JYSERfTUFTSyk7CisJCX0KKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludAordGVtYWNf YmRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgdGVtYWNfbG9j YWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlp bnQgaWk7CisKKwlscC0+cnhfc2tiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYp KlJYX0JEX05VTSwgR0ZQX0tFUk5FTCk7CisJLyogYWxsb2NhdGUgdGhlIHR4IGFuZCByeCBy aW5nIGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KKwkvKiByZXR1cm5zIGEgdmlydHVhbCBhZGRy ZXMgYW5kIGEgcGh5c2ljYWwgYWRkcmVzcy4gKi8KKwlscC0+dHhfYmRfdiA9IGRtYV9hbGxv Y19jb2hlcmVudChOVUxMLAorCQkJc2l6ZW9mKHN0cnVjdCBjZG1hY19iZCkgKiBUWF9CRF9O VU0sCisJCQkoZG1hX2FkZHJfdCAqKSZscC0+dHhfYmRfcCwKKwkJCUdGUF9LRVJORUwpOwor CWxwLT5yeF9iZF92ID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsCisJCQlzaXplb2Yoc3Ry dWN0IGNkbWFjX2JkKSAqIFJYX0JEX05VTSwKKwkJCShkbWFfYWRkcl90ICopJmxwLT5yeF9i ZF9wLAorCQkJR0ZQX0tFUk5FTCk7CisKKwlmb3IgKGlpID0gMDsgaWkgPCBUWF9CRF9OVU07 IGlpKyspIHsKKwkJbWVtc2V0KChjaGFyICopJmxwLT50eF9iZF92W2lpXSwgMCwgc2l6ZW9m KHN0cnVjdCBjZG1hY19iZCkpOworCQlpZiAoaWkgPT0gKFRYX0JEX05VTSAtIDEpKQorCQkJ bHAtPnR4X2JkX3ZbaWldLm5leHQgPSAmbHAtPnR4X2JkX3BbMF07CisJCWVsc2UKKwkJCWxw LT50eF9iZF92W2lpXS5uZXh0ID0gJmxwLT50eF9iZF9wW2lpICsgMV07CisKKwl9CisJZm9y IChpaSA9IDA7IGlpIDwgUlhfQkRfTlVNOyBpaSsrKSB7CisJCW1lbXNldCgoY2hhciAqKSZs cC0+cnhfYmRfdltpaV0sIDAsIHNpemVvZihzdHJ1Y3QgY2RtYWNfYmQpKTsKKwkJaWYgKGlp ID09IChSWF9CRF9OVU0gLSAxKSkKKwkJCWxwLT5yeF9iZF92W2lpXS5uZXh0ID0gJmxwLT5y eF9iZF9wWzBdOworCQllbHNlCisJCQlscC0+cnhfYmRfdltpaV0ubmV4dCA9ICZscC0+cnhf YmRfcFtpaSArIDFdOworCisJCXNrYiA9IGFsbG9jX3NrYihYVEVfTUFYX0pVTUJPX0ZSQU1F X1NJWkUKKwkJCQkrIFhURV9BTElHTiwgR0ZQX0FUT01JQyk7CisJCWlmIChza2IgPT0gMCkg eworCQkJZGV2X2VycigmbmRldi0+ZGV2LCAiYWxsb2Nfc2tiIGVycm9yICVkXG4iLCBpaSk7 CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbHAtPnJ4X3NrYltpaV0gPSBza2I7CisJCXNrYl9y ZXNlcnZlKHNrYiwgIEJVRkZFUl9BTElHTihza2ItPmRhdGEpKTsKKwkJLyogcmV0dXJucyBw aHlzaWNhbCBhZGRyZXNzIG9mIHNrYi0+ZGF0YSAqLworCQlscC0+cnhfYmRfdltpaV0ucGh5 cyA9ICh1bnNpZ25lZCBjaGFyICopcGNpX21hcF9zaW5nbGUoTlVMTCwKKwkJCQlza2ItPmRh dGEsCisJCQkJWFRFX01BWF9KVU1CT19GUkFNRV9TSVpFLAorCQkJCVBDSV9ETUFfRlJPTURF VklDRSk7CisJCWxwLT5yeF9iZF92W2lpXS5sZW4gPSBYVEVfTUFYX0pVTUJPX0ZSQU1FX1NJ WkU7CisJCWxwLT5yeF9iZF92W2lpXS5hcHAwID0gU1RTX0NUUkxfQVBQMF9JUlFPTkVORDsK Kwl9CisKKwlzZF9pb3cobmRldiwKKwkJCVRYX0NITkxfQ1RSTCwKKwkJCTB4MTAyMjA0MDAK KwkJCXwgQ0hOTF9DVFJMX0lSUV9FTgorCQkJfCBDSE5MX0NUUkxfSVJRX0RMWV9FTgorCQkJ fCBDSE5MX0NUUkxfSVJRX0NPQUxfRU4pOworCS8qIDB4MTAyMjA0ODMgKi8KKwkvKiAweDAw MTAwNDgzICovCisJc2RfaW93KG5kZXYsCisJCQlSWF9DSE5MX0NUUkwsCisJCQkweGZmMDEw MDAwCisJCQl8IENITkxfQ1RSTF9JUlFfRU4KKwkJCXwgQ0hOTF9DVFJMX0lSUV9ETFlfRU4K KwkJCXwgQ0hOTF9DVFJMX0lSUV9DT0FMX0VOCisJCQl8IENITkxfQ1RSTF9JUlFfSU9FKTsK KwkvKiAweGZmMDEwMjgzICovCisKKwlzZF9pb3cobmRldiwgUlhfQ1VSREVTQ19QVFIsICAo dWludHB0cl90KSZscC0+cnhfYmRfcFswXSk7CisJc2RfaW93KG5kZXYsIFJYX1RBSUxERVND X1BUUiwgKHVpbnRwdHJfdCkmbHAtPnJ4X2JkX3BbUlhfQkRfTlVNIC0gMV0pOworCisJcmV0 dXJuIDA7Cit9CisKK3N0cnVjdCB0ZW1hY19vcHRpb24geworCWludAkJZmxnOworCXUzMgkJ b3B0OworCXUzMgkJcmVnOworCXUzMgkJbV9vcjsKKwl1MzIJCW1fYW5kOworCit9OworCitz dHJ1Y3QgdGVtYWNfb3B0aW9uIHRlbWFjX29wdGlvbnNbXSA9IHsKKwkJLyogVHVybiBvbiBq dW1ibyBwYWNrZXQgc3VwcG9ydCBmb3IgYm90aCBSeCBhbmQgVHggKi8KKwl7CTAsCisJCVhU RV9PUFRJT05fSlVNQk8sCisJCVhURV9UWENfT0ZGU0VULAorCQlYVEVfVFhDX1RYSk1CT19N QVNLLAorCQkwCisJfSwKKwl7CTAsCisJCVhURV9PUFRJT05fSlVNQk8sCisJCVhURV9SWEMx X09GRlNFVCwKKwkJWFRFX1JYQzFfUlhKTUJPX01BU0ssCisJCTAKKwl9LAorCS8qIFR1cm4g b24gVkxBTiBwYWNrZXQgc3VwcG9ydCBmb3IgYm90aCBSeCBhbmQgVHggKi8KKwl7CTAsCisJ CVhURV9PUFRJT05fVkxBTiwKKwkJWFRFX1RYQ19PRkZTRVQsCisJCVhURV9UWENfVFhWTEFO X01BU0ssCisJCTAKKwl9LAorCXsJMCwKKwkJWFRFX09QVElPTl9WTEFOLAorCQlYVEVfUlhD MV9PRkZTRVQsCisJCVhURV9SWEMxX1JYVkxBTl9NQVNLLAorCQkwCisJfSwKKwkvKiBUdXJu IG9uIEZDUyBzdHJpcHBpbmcgb24gcmVjZWl2ZSBwYWNrZXRzICovCisJewkwLAorCQlYVEVf T1BUSU9OX0ZDU19TVFJJUCwKKwkJWFRFX1JYQzFfT0ZGU0VULAorCQlYVEVfUlhDMV9SWEZD U19NQVNLLAorCQkwCisJfSwKKwkvKiBUdXJuIG9uIEZDUyBpbnNlcnRpb24gb24gdHJhbnNt aXQgcGFja2V0cyAqLworCXsJMCwKKwkJWFRFX09QVElPTl9GQ1NfSU5TRVJULAorCQlYVEVf VFhDX09GRlNFVCwKKwkJWFRFX1RYQ19UWEZDU19NQVNLLAorCQkwCisJfSwKKwkvKiBUdXJu IG9uIGxlbmd0aC90eXBlIGZpZWxkIGNoZWNraW5nIG9uIHJlY2VpdmUgcGFja2V0cyAqLwor CXsJMCwKKwkJWFRFX09QVElPTl9MRU5UWVBFX0VSUiwKKwkJWFRFX1JYQzFfT0ZGU0VULAor CQlYVEVfUlhDMV9SWExUX01BU0ssCisJCTAKKwl9LAorCS8qIFR1cm4gb24gZmxvdyBjb250 cm9sICovCisJewkwLAorCQlYVEVfT1BUSU9OX0ZMT1dfQ09OVFJPTCwKKwkJWFRFX0ZDQ19P RkZTRVQsCisJCVhURV9GQ0NfUlhGTE9fTUFTSywKKwkJMAorCX0sCisJLyogVHVybiBvbiBm bG93IGNvbnRyb2wgKi8KKwl7CTAsCisJCVhURV9PUFRJT05fRkxPV19DT05UUk9MLAorCQlY VEVfRkNDX09GRlNFVCwKKwkJWFRFX0ZDQ19UWEZMT19NQVNLLAorCQkwCisJfSwKKwkvKiBU dXJuIG9uIHByb21pc2N1b3VzIGZyYW1lIGZpbHRlcmluZyAoYWxsIGZyYW1lcyBhcmUgcmVj ZWl2ZWQgKSAqLworCXsJMCwKKwkJWFRFX09QVElPTl9QUk9NSVNDLAorCQlYVEVfQUZNX09G RlNFVCwKKwkJWFRFX0FGTV9FUFBSTV9NQVNLLAorCQkwCisJfSwKKwkvKiBFbmFibGUgdHJh bnNtaXR0ZXIgaWYgbm90IGFscmVhZHkgZW5hYmxlZCAqLworCXsJMCwKKwkJWFRFX09QVElP Tl9UWEVOLAorCQlYVEVfVFhDX09GRlNFVCwKKwkJWFRFX1RYQ19UWEVOX01BU0ssCisJCTAK Kwl9LAorCS8qIEVuYWJsZSByZWNlaXZlcj8gKi8KKwl7CTAsCisJCVhURV9PUFRJT05fUlhF TiwKKwkJWFRFX1JYQzFfT0ZGU0VULAorCQlYVEVfUlhDMV9SWEVOX01BU0ssCisJCTAKKwl9 LAorCXsJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMAorICAgfQorfTsKKworc3RhdGljIHUz MgordGVtYWNfc2V0b3B0aW9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIE9wdGlv bnMpIHsKKwlzdHJ1Y3QgdGVtYWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJ c3RydWN0IHRlbWFjX29wdGlvbiAqdHAgPSAmdGVtYWNfb3B0aW9uc1swXTsKKworCXdoaWxl ICh0cC0+b3B0KSB7CisJCWlmICh0cC0+ZmxnKQorCQkJdGlvX3NldGNscihuZGV2LAorCQkJ CQl0cC0+cmVnLAorCQkJCQl0cC0+bV9vciwKKwkJCQkJKE9wdGlvbnMgJiB0cC0+b3B0KSk7 CisJCWVsc2UKKwkJCWVtYWNfY2ZnX3NldGNscihuZGV2LAorCQkJCQl0cC0+cmVnLAorCQkJ CQl0cC0+bV9vciwKKwkJCQkJKE9wdGlvbnMgJiB0cC0+b3B0KSk7CisJCXRwKys7CisJfQor CWxwLT5vcHRpb25zIHw9IE9wdGlvbnM7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBJbml0 aWxpemUgdGVtYWMgKi8KK3N0YXRpYyB2b2lkCit0ZW1hY19kZXZpY2VfcmVzZXQoc3RydWN0 IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRl dl9wcml2KG5kZXYpOworCXUzMiB0aW1lb3V0ID0gMTAwMDsKKworCS8qIFBlcmZvcm0gYSBz b2Z0d2FyZSByZXNldCAqLworCisJLyogMHgzMDAgaG9zdCBlbmFibGUgYml0ID8gKi8KKwkv KiByZXNldCBQSFkgdGhyb3VnaCBjb250cm9sIHJlZ2lzdGVyID86MSAqLworCisJLyogUmVz ZXQgdGhlIGRldmljZSAqLworCWVtYWNfY2ZnX3dyaXRlKG5kZXYsIFhURV9SWEMxX09GRlNF VCwgWFRFX1JYQzFfUlhSU1RfTUFTSyk7CisJLyogV2FpdCBmb3IgdGhlIHJlY2VpdmVyIHRv IGZpbmlzaCByZXNldCAqLworCXdoaWxlIChlbWFjX2NmZ19yZWFkKG5kZXYsIFhURV9SWEMx X09GRlNFVCkgJiBYVEVfUlhDMV9SWFJTVF9NQVNLKSB7CisJCXVkZWxheSgxKTsKKwkJaWYg KC0tdGltZW91dCA9PSAwKSB7CisJCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCQkJInRlbWFj X2RldmljZV9yZXNldCBSWCByZXNldCB0aW1lb3V0ISFcbiIpOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwllbWFjX2NmZ193cml0ZShuZGV2LCBYVEVfVFhDX09GRlNFVCwgWFRFX1RYQ19U WFJTVF9NQVNLKTsKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNtaXR0ZXIgdG8gZmluaXNoIHJl c2V0ICovCisJdGltZW91dCA9IDEwMDA7CisJd2hpbGUgKGVtYWNfY2ZnX3JlYWQobmRldiwg WFRFX1RYQ19PRkZTRVQpICYgWFRFX1RYQ19UWFJTVF9NQVNLKSB7CisJCXVkZWxheSgxKTsK KwkJaWYgKC0tdGltZW91dCA9PSAwKSB7CisJCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCQkJ InRlbWFjX2RldmljZV9yZXNldCBUWCByZXNldCB0aW1lb3V0ISFcbiIpOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwkvKiBEaXNhYmxlIHRoZSByZWNlaXZlciAqLworCWVtYWNfY2ZnX3dy aXRlKG5kZXYsCisJCQlYVEVfUlhDMV9PRkZTRVQsCisJCQllbWFjX2NmZ19yZWFkKG5kZXYs IFhURV9SWEMxX09GRlNFVCkKKwkJCSYgflhURV9SWEMxX1JYRU5fTUFTSyk7CisKKwkvKiBy ZXNldCAqLworCXRpb3cobmRldiwgWFRFX1JBRjBfT0ZGU0VULCAxKTsKKwkvKiB3YWl0IGZv ciByZXNldCAqLworCXRpbWVvdXQgPSAxMDAwOworCXdoaWxlICh0aW9yKG5kZXYsIFhURV9S QUYwX09GRlNFVCkgJiAxKSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKC0tdGltZW91dCA9PSAw KSB7CisJCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCQkJInRlbWFjX2RldmljZV9yZXNldCBS QUYgcmVzZXQgdGltZW91dCEhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSVNS MC9JRVIwL0lQUjAgYml0cyAqLworCS8qIGIxICAgICAgICAgYXV0b25lZyBjb21wbGV0ZSAq LworCS8qIGIyICAgICAgICAgcmVjZWl2ZSBjb21wbGV0ZSAqLworCS8qIGI1ICAgICAgICAg dHJhbnNtaXQgY29tcGxldGUgKi8KKwkvKiBiMCAgICAgICA9IGludGVycnVwdHMgZnJvbSBU SVMvVElFIHJlZ2lzdGVycyAqLworCisKKwkvKiBSZXNldCAqLworCXNkX2lvdyhuZGV2LCBE TUFfQ09OVFJPTF9SRUcsIERNQV9DT05UUk9MX1JTVCk7CisJdGltZW91dCA9IDEwMDA7CisJ d2hpbGUgKHNkX2lvcihuZGV2LCBETUFfQ09OVFJPTF9SRUcpICYgRE1BX0NPTlRST0xfUlNU KSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKC0tdGltZW91dCA9PSAwKSB7CisJCQlkZXZfZXJy KCZuZGV2LT5kZXYsCisJCQkJInRlbWFjX2RldmljZV9yZXNldCBETUEgcmVzZXQgdGltZW91 dCEhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZGV2X2luZm8oJm5kZXYtPmRldiwK KwkJCSIlczogWGlsaW54IEVtYmVkZGVkIFRyaS1Nb2RlIEV0aGVybmV0IE1BQyAlcyAlc1xu IiwKKwkJCW5kZXYtPm5hbWUsCisJCQlfX0RBVEVfXywKKwkJCV9fVElNRV9fKTsKKwlkZXZf aW5mbygmbmRldi0+ZGV2LCAidGVtYWMgJTA4eCBzZG1hICUwOHhcbiIsCisJCQlscC0+cmVn cy5hZGRyLAorCQkJbHAtPnNkbWEuYWRkcik7CisKKwl0ZW1hY19iZF9pbml0KG5kZXYpOwor CisJZW1hY19jZmdfd3JpdGUobmRldiwgWFRFX1JYQzBfT0ZGU0VULCAwKTsKKwllbWFjX2Nm Z193cml0ZShuZGV2LCBYVEVfUlhDMV9PRkZTRVQsIDApOworCWVtYWNfY2ZnX3dyaXRlKG5k ZXYsIFhURV9UWENfT0ZGU0VULCAwKTsKKwllbWFjX2NmZ193cml0ZShuZGV2LCBYVEVfRkND X09GRlNFVCwgWFRFX0ZDQ19SWEZMT19NQVNLKTsKKworCS8qIFN5bmMgZGVmYXVsdCBvcHRp b25zIHdpdGggSFcKKwkgKiBidXQgbGVhdmUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGRp c2FibGVkLiAgKi8KKwl0ZW1hY19zZXRvcHRpb25zKG5kZXYsCisJCQlscC0+b3B0aW9ucyAm IH4oWFRFX09QVElPTl9UWEVOIHwgWFRFX09QVElPTl9SWEVOKSk7CisKKwl0ZW1hY19waHlf aW5pdChuZGV2KTsKKworCXRlbWFjX3NldF9tYWNfYWRkcmVzcyhuZGV2LCAwKTsKKwkvKiBT ZXQgYWRkcmVzcyBmaWx0ZXIgdGFibGUgKi8KKwl0ZW1hY19zZXRfbXVsdGljYXN0X2xpc3Qo bmRldik7CisJaWYgKHRlbWFjX3NldG9wdGlvbnMobmRldiwgbHAtPm9wdGlvbnMpKQorCQlk ZXZfZXJyKCZuZGV2LT5kZXYsICJFcnJvciBzZXR0aW5nIFRFTUFDIG9wdGlvbnNcbiIpOwor CisJLyogSW5pdCBEcml2ZXIgdmFyaWFibGUgKi8KKwluZGV2LT50cmFuc19zdGFydCA9IDA7 CisJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbHAtPnJ4 X2xvY2spOworfQorCitzdGF0aWMgdm9pZAordGVtYWNfaGFyZF9zdGFydF94bWl0X2RvbmUo c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9 IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBjZG1hY19iZCAqY3VyX3A7CisJdW5zaWdu ZWQgaW50IHN0YXQgPSAwOworCisJY3VyX3AgPSAmbHAtPnR4X2JkX3ZbbHAtPnR4X2JkX2Np XTsKKwlzdGF0ID0gY3VyX3AtPmFwcDA7CisKKwl3aGlsZSAoc3RhdCAmIFNUU19DVFJMX0FQ UDBfQ01QTFQpIHsKKwkJcGNpX3VubWFwX3NpbmdsZShOVUxMLAorCQkJCSh1bnNpZ25lZCBs b25nKWN1cl9wLT5waHlzLAorCQkJCWN1cl9wLT5sZW4sCisJCQkJUENJX0RNQV9UT0RFVklD RSk7CisJCWlmIChjdXJfcC0+YXBwNCkKKwkJCWRldl9rZnJlZV9za2JfaXJxKChzdHJ1Y3Qg c2tfYnVmZiAqKWN1cl9wLT5hcHA0KTsKKwkJY3VyX3AtPmFwcDAgPSAwOworCisJCWxwLT5z dGF0cy50eF9wYWNrZXRzKys7CisJCWxwLT5zdGF0cy50eF9ieXRlcyArPSBjdXJfcC0+bGVu OworCisJCWxwLT50eF9iZF9jaSsrOworCQlpZiAobHAtPnR4X2JkX2NpID49IFRYX0JEX05V TSkKKwkJCWxwLT50eF9iZF9jaSA9IDA7CisKKwkJY3VyX3AgPSAmbHAtPnR4X2JkX3ZbbHAt PnR4X2JkX2NpXTsKKwkJc3RhdCA9IGN1cl9wLT5hcHAwOworCX0KKworCW5ldGlmX3dha2Vf cXVldWUobmRldik7Cit9CisKK3N0YXRpYyBpbnQKK3RlbWFjX2hhcmRfc3RhcnRfeG1pdChz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1 Y3QgdGVtYWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IGNkbWFj X2JkICpjdXJfcCwgKnN0YXJ0X3AsICp0YWlsX3A7CisJaW50IGlpOworCXVuc2lnbmVkIGxv bmcgbnVtX2ZyYWc7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKworCW51bV9mcmFnID0gc2tiX3No aW5mbyhza2IpLT5ucl9mcmFnczsKKwlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nb MF07CisJc3RhcnRfcCA9ICZscC0+dHhfYmRfcFtscC0+dHhfYmRfdGFpbF07CisJY3VyX3Ag PSAmbHAtPnR4X2JkX3ZbbHAtPnR4X2JkX3RhaWxdOworCisJaWYgKGN1cl9wLT5hcHAwICYg U1RTX0NUUkxfQVBQMF9DTVBMVCkgeworCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQobmRl dikpIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJCQlyZXR1cm4gTkVUREVWX1RY X0JVU1k7CisJCX0KKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWN1cl9wLT5h cHAwID0gMDsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewor CQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwID0gaXBfaGRyKHNrYik7CisJCWludCBsZW5ndGgg PSAwLCBzdGFydCwgaW5zZXJ0ID0gMCwgaGVhZGxlbjsKKworCQlzd2l0Y2ggKGlwLT5wcm90 b2NvbCkgeworCQljYXNlIElQUFJPVE9fVENQOgorCQkJc3RhcnQgPSBzaXplb2Yoc3RydWN0 IGlwaGRyKSArIEVUSF9ITEVOOworCQkJaW5zZXJ0ID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikg KyBFVEhfSExFTiArIDE2OworCQkJbGVuZ3RoID0gaXAtPnRvdF9sZW4gLSBzaXplb2Yoc3Ry dWN0IGlwaGRyKTsKKwkJCWhlYWRsZW4gPSBFVEhfSExFTgorCQkJCSsgc2l6ZW9mKHN0cnVj dCBpcGhkcikKKwkJCQkrIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwkJCWJyZWFrOworCQlj YXNlIElQUFJPVE9fVURQOgorCQkJc3RhcnQgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIEVU SF9ITEVOOworCQkJaW5zZXJ0ID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyBFVEhfSExFTiAr IDY7CisJCQlsZW5ndGggPSBpcC0+dG90X2xlbiAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwor CQkJaGVhZGxlbiA9IEVUSF9ITEVOCisJCQkJKyBzaXplb2Yoc3RydWN0IGlwaGRyKQorCQkJ CSsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQli cmVhazsKKwkJfQorCQljdXJfcC0+YXBwMSA9ICgoc3RhcnQgPDwgMTYpIHwgaW5zZXJ0KTsK KwkJY3VyX3AtPmFwcDIgPSBjc3VtX3RjcHVkcF9tYWdpYyhpcC0+c2FkZHIsCisJCQkJaXAt PmRhZGRyLAorCQkJCWxlbmd0aCwKKwkJCQlpcC0+cHJvdG9jb2wsCisJCQkJMCk7CisJCXNr Yi0+ZGF0YVtpbnNlcnRdID0gMDsKKwkJc2tiLT5kYXRhW2luc2VydCArIDFdID0gMDsKKwl9 CisJY3VyX3AtPmFwcDAgfD0gU1RTX0NUUkxfQVBQMF9TT1A7CisJY3VyX3AtPmxlbiA9IHNr Yl9oZWFkbGVuKHNrYik7CisJY3VyX3AtPnBoeXMgPSAodW5zaWduZWQgY2hhciAqKXBjaV9t YXBfc2luZ2xlKE5VTEwsCisJCQlza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJUENJX0RNQV9U T0RFVklDRSk7CisJY3VyX3AtPmFwcDQgPSAodW5zaWduZWQgbG9uZylza2I7CisKKwlmb3Ig KGlpID0gMDsgaWkgPCBudW1fZnJhZzsgaWkrKykgeworCQlscC0+dHhfYmRfdGFpbCsrOwor CQlpZiAobHAtPnR4X2JkX3RhaWwgPj0gVFhfQkRfTlVNKQorCQkJbHAtPnR4X2JkX3RhaWwg PSAwOworCisJCWN1cl9wID0gJmxwLT50eF9iZF92W2xwLT50eF9iZF90YWlsXTsKKwkJY3Vy X3AtPnBoeXMgPSAodW5zaWduZWQgY2hhciAqKXBjaV9tYXBfc2luZ2xlKE5VTEwsCisJCQkJ KHZvaWQgKilwYWdlX2FkZHJlc3MoZnJhZy0+cGFnZSkKKwkJCQkrIGZyYWctPnBhZ2Vfb2Zm c2V0LAorCQkJCWZyYWctPnNpemUsCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCWN1cl9w LT5sZW4gPSBmcmFnLT5zaXplOworCQljdXJfcC0+YXBwMCA9IDA7CisJCWZyYWcrKzsKKwl9 CisJY3VyX3AtPmFwcDAgfD0gU1RTX0NUUkxfQVBQMF9FT1A7CisKKwl0YWlsX3AgPSAmbHAt PnR4X2JkX3BbbHAtPnR4X2JkX3RhaWxdOworCWxwLT50eF9iZF90YWlsKys7CisJaWYgKGxw LT50eF9iZF90YWlsID49IFRYX0JEX05VTSkKKwkJbHAtPnR4X2JkX3RhaWwgPSAwOworCisJ CS8qIEVuZ0J1c3kgPyAqLworCWlmICghKHNkX2lvcihuZGV2LCBUWF9DSE5MX1NUUykgJiBD SE5MX1NUU19FTkdCVVNZKSkgeworCQlzZF9pb3cobmRldiwgVFhfQ1VSREVTQ19QVFIsICh1 aW50cHRyX3Qpc3RhcnRfcCk7CisJCS8qIERNQSBzdGFydCAqLworCQlzZF9pb3cobmRldiwg VFhfVEFJTERFU0NfUFRSLCAodWludHB0cl90KXRhaWxfcCk7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKKworc3RhdGljIHZvaWQKK2xsX3RlbWFjX3JlY3Yoc3RydWN0IG5ldF9kZXZpY2Ug Km5kZXYpCit7CisJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYp OworCXN0cnVjdCBza19idWZmICpza2IsICpuZXdfc2tiOworCXVuc2lnbmVkIGludCBiZHN0 YXQ7CisJc3RydWN0IGNkbWFjX2JkICpjdXJfcCwgKnRhaWxfcDsKKwlpbnQgbGVuZ3RoOwor CXVuc2lnbmVkIGxvbmcgc2tiX3ZhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmbHAtPnJ4X2xvY2ssIGZsYWdzKTsKKworCXRhaWxfcCA9ICZs cC0+cnhfYmRfcFtscC0+cnhfYmRfY2ldOworCWN1cl9wID0gJmxwLT5yeF9iZF92W2xwLT5y eF9iZF9jaV07CisKKwliZHN0YXQgPSBjdXJfcC0+YXBwMDsKKwl3aGlsZSAoKGJkc3RhdCAm IFNUU19DVFJMX0FQUDBfQ01QTFQpKSB7CisKKwkJc2tiID0gbHAtPnJ4X3NrYltscC0+cnhf YmRfY2ldOworCQlsZW5ndGggPSBjdXJfcC0+YXBwNDsKKworCQlza2JfdmFkZHIgPSB2aXJ0 X3RvX2J1cyhza2ItPmRhdGEpOworCQlwY2lfdW5tYXBfc2luZ2xlKE5VTEwsIHNrYl92YWRk ciwgbGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCXNrYl9wdXQoc2tiLCBsZW5n dGgpOworCQlza2ItPmRldiA9IG5kZXY7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90 cmFucyhza2IsIG5kZXYpOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisK KwkJbmV0aWZfcngoc2tiKTsKKworCQlscC0+c3RhdHMucnhfcGFja2V0cysrOworCQlscC0+ c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCisJCW5ld19za2IgPSBhbGxvY19za2IoWFRF X01BWF9KVU1CT19GUkFNRV9TSVpFICsgWFRFX0FMSUdOLAorCQkJCUdGUF9BVE9NSUMpOwor CQlpZiAobmV3X3NrYiA9PSAwKSB7CisJCQlkZXZfZXJyKCZuZGV2LT5kZXYsICJubyBtZW1v cnkgZm9yIG5ldyBza19idWZmXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxw LT5yeF9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlza2JfcmVzZXJ2ZShu ZXdfc2tiLCBCVUZGRVJfQUxJR04obmV3X3NrYi0+ZGF0YSkpOworCisJCWN1cl9wLT5hcHAw ID0gU1RTX0NUUkxfQVBQMF9JUlFPTkVORDsKKwkJY3VyX3AtPnBoeXMgPSAodW5zaWduZWQg Y2hhciAqKQorCQkJCXBjaV9tYXBfc2luZ2xlKE5VTEwsIG5ld19za2ItPmRhdGEsCisJCQkJ CQkgICBYVEVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUsCisJCQkJCQkgICBQQ0lfRE1BX0ZST01E RVZJQ0UpOworCQljdXJfcC0+bGVuICAgID0gWFRFX01BWF9KVU1CT19GUkFNRV9TSVpFOwor CQlscC0+cnhfc2tiW2xwLT5yeF9iZF9jaV0gPSBuZXdfc2tiOworCisJCWxwLT5yeF9iZF9j aSsrOworCQlpZiAobHAtPnJ4X2JkX2NpID49IFJYX0JEX05VTSkKKwkJCWxwLT5yeF9iZF9j aSA9IDA7CisKKwkJY3VyX3AgPSAmbHAtPnJ4X2JkX3ZbbHAtPnJ4X2JkX2NpXTsKKwkJYmRz dGF0ID0gY3VyX3AtPmFwcDA7CisJfQorCXNkX2lvdyhuZGV2LCBSWF9UQUlMREVTQ19QVFIs ICh1aW50cHRyX3QpdGFpbF9wKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5y eF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbGxfdGVtYWNfdHhf aW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgc3Rh dHVzOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICop ZGV2X2lkOworCisJc3RhdHVzID0gc2RfaW9yKG5kZXYsIFRYX0lSUV9SRUcpOworCXNkX2lv dyhuZGV2LCBUWF9JUlFfUkVHLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyAmIChJUlFfQ09B TCB8IElSUV9ETFkpKQorCQl0ZW1hY19oYXJkX3N0YXJ0X3htaXRfZG9uZShuZGV2KTsKKwlp ZiAoc3RhdHVzICYgMHgwODApCisJCWRldl9lcnIoJm5kZXYtPmRldiwgIkRNQSBlcnJvciAw eCV4XG4iLCBzdGF0dXMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMg aXJxcmV0dXJuX3QKK2xsX3RlbWFjX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZf aWQpCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRl diA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKworCXN0YXR1cyA9IHNkX2lvcihu ZGV2LCBSWF9JUlFfUkVHKTsKKwlzZF9pb3cobmRldiwgUlhfSVJRX1JFRywgc3RhdHVzKTsK KworCWlmIChzdGF0dXMgJiAoSVJRX0NPQUwgfCBJUlFfRExZKSkKKwkJbGxfdGVtYWNfcmVj dihuZGV2KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBu ZXRfZGV2aWNlX3N0YXRzICoKK3RlbWFjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAq bmRldikKK3sKKwlyZXR1cm4gbmV0ZGV2X3ByaXYobmRldik7Cit9CisKK3N0YXRpYyBpbnQK K3RlbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHRlbWFj X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBlckMgPSAwOworCisJLyog aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5kZXYpKQorCSAqCXJhaXNlIGxpbmsKKwkqLwor CWVyQyA9IHJlcXVlc3RfaXJxKGxwLT50eF9pcnEsIGxsX3RlbWFjX3R4X2ludGVycnVwdCwK KwkJCTAsIG5kZXYtPm5hbWUsIG5kZXYpOworCWVyQyA9IHJlcXVlc3RfaXJxKGxwLT5yeF9p cnEsIGxsX3RlbWFjX3J4X2ludGVycnVwdCwKKwkJCTAsIG5kZXYtPm5hbWUsIG5kZXYpOwor CXRlbWFjX2RldmljZV9yZXNldChuZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAordGVtYWNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgdGVt YWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJLyogaWYgKG5ldGlmX2Rldmlj ZV9wcmVzZW50KG5kZXYpKQorCSAqCWRyb3AgbGluaworCSovCisJZnJlZV9pcnEobHAtPnR4 X2lycSwgbmRldik7CisJZnJlZV9pcnEobHAtPnJ4X2lycSwgbmRldik7CisJLyogZnJlZSBi dWZmZXJzICovCisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9D T05UUk9MTEVSCitzdGF0aWMgdm9pZAordGVtYWNfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBu ZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCB0ZW1hY19sb2NhbCAqbHAgPSBuZXRkZXZf cHJpdihuZGV2KTsKKworCWRpc2FibGVfaXJxKGxwLT50eF9pcnEpOworCWRpc2FibGVfaXJx KGxwLT5yeF9pcnEpOworCisJbGxfdGVtYWNfcnhfaW50ZXJydXB0KGxwLT50eF9pcnEsIG5k ZXYsIDApOworCWxsX3RlbWFjX3R4X2ludGVycnVwdChscC0+cnhfaXJxLCBuZGV2LCAwKTsK KworCWVuYWJsZV9pcnEobHAtPnR4X2lycSk7CisJZW5hYmxlX2lycShscC0+cnhfaXJxKTsK K30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdAordGVtYWNfZGV2aWNlX21hcChzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJ aW50IG51bSwgc3RydWN0IHRlbWFjX3JlZ2lvbiAqcmVnKQoreworCXN0cnVjdCByZXNvdXJj ZSAqcmVzOworCWludCBlckMgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNl KHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBudW0pOworCWlmIChyZXMgPT0gMCkgeworCQllckMg PSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCWlmIChyZXF1ZXN0X21lbV9yZWdpb24o cmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0LAorCQkJCXBkZXYtPm5hbWUpID09 IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSIlczogZmFpbGVkIHRvIHJlcXVl c3QgcmVnaXN0ZXJzXG4iLAorCQkJCXBkZXYtPm5hbWUpOworCQllckMgPSAtRU5YSU87CisJ CWdvdG8gZmFpbDsKKwl9CisKKwlyZWctPmJhc2UgPSAodWludHB0cl90KXJlcy0+c3RhcnQ7 CisJcmVnLT5sZW4gID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0OworCXJlZy0+YWRkciA9IGlv cmVtYXBfbm9jYWNoZSgodWludHB0cl90KXJlZy0+YmFzZSwgcmVnLT5sZW4pOworCWlmIChy ZWctPmFkZHIgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiJXM6IGZhaWxl ZCB0byByZW1hcCByZWdpc3RlcnNcbiIsIHBkZXYtPm5hbWUpOworCQllckMgPSAtRU5YSU87 CisJCWdvdG8gZmFpbF9yZW1hcDsKKwl9CisJcmV0dXJuIDA7CitmYWlsX3JlbWFwOgorCXJl bGVhc2VfcmVnaW9uKCh1MzIpcmVnLT5hZGRyLCByZWctPmxlbik7CitmYWlsOgorCXJldHVy biBlckM7Cit9CisvKgorU2VhcmNoIFRFTUFDIGJvYXJkLCBhbGxvY2F0ZSBzcGFjZSBhbmQg cmVnaXN0ZXIgaXQKKyAqLworc3RhdGljIGludCBfX2luaXQKK3RlbWFjX2RldmljZV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNl ICpuZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB0ZW1hY19sb2NhbCkpOwor CXN0cnVjdCB4bGx0ZW1hY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCShzdHJ1Y3QgeGxs dGVtYWNfcGxhdGZvcm1fZGF0YSAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1 Y3QgdGVtYWNfbG9jYWwgKmxwOworCXU4IGFkZHJbXSA9IHsgMHgwLCAweDUwLCAweGMyLCAw eDQ0LCAweDJmLCAweGZmIH07CisJaW50IGVyQyA9IDA7CisKKwkvKiBJbml0IG5ldHdvcmsg ZGV2aWNlICovCisJaWYgKCFuZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxk IG5vdCBhbGxvY2F0ZSBkZXZpY2UuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYs ICZwZGV2LT5kZXYpOworCS8qIHNldHVwIGJvYXJkIGluZm8gc3RydWN0dXJlICovCisJLyog Q2xlYXIgbWVtb3J5ICovCisJbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwltZW1zZXQobHAs IDAsIHNpemVvZihzdHJ1Y3QgdGVtYWNfbG9jYWwpKTsKKwllckMgPSB0ZW1hY19kZXZpY2Vf bWFwKHBkZXYsIG5kZXYsIDAsICZscC0+cmVncyk7CisJaWYgKGVyQykgeworCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgdGVtYWMgcmVncy5cbiIpOworCQln b3RvIG5vZGV2OworCX0KKwluZGV2LT5iYXNlX2FkZHIgPSAodTMyKSBscC0+cmVncy5hZGRy OworCisJZXJDID0gdGVtYWNfZGV2aWNlX21hcChwZGV2LCBuZGV2LCAxLCAmbHAtPnNkbWEp OworCWlmIChlckMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGFsbG9j YXRlIHNkbWEgcmVncy5cbiIpOworCQlnb3RvIG5vZGV2OworCX0KKwlscC0+cnhfaXJxID0g cGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAobHAtPnJ4X2lycSA8IDApIHsKKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHJ4IGlycS5cbiIpOwor CQllckMgPSAtRU5PTUVNOworCQlnb3RvIG5vZGV2OworCX0KKwlscC0+dHhfaXJxID0gcGxh dGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlpZiAobHAtPnR4X2lycSA8IDApIHsKKwkJZGV2 X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHR4IGlycS5cbiIpOworCQll ckMgPSAtRU5PTUVNOworCQlnb3RvIG5vZGV2OworCX0KKworCWRldl9pbmZvKCZwZGV2LT5k ZXYsIERSVl9OQU1FICIuYzp2ICIgX19EQVRFX18gIiAiCisJCQlEUlZfQVVUSE9SICIgIiBE UlZfRU1BSUwgIlxuIik7CisKKwlscC0+ZGV2ID0gbmRldjsKKwlscC0+ZW1hY19udW0gPSAw OworCWxwLT5vcHRpb25zID0gWFRFX09QVElPTl9ERUZBVUxUUzsKKworCXRlbWFjX3NldF9t YWNfYWRkcmVzcyhuZGV2LCBhZGRyKTsKKwkvKiBmcm9tIHRoaXMgcG9pbnQgd2UgYXNzdW1l IHRoYXQgd2UgaGF2ZSBmb3VuZCBhIFRFTUFDICovCisJLyogZHJpdmVyIHN5c3RlbSBmdW5j dGlvbiAqLworCWV0aGVyX3NldHVwKG5kZXYpOworCS8qIFRoZSBURU1BQy1zcGVjaWZpYyBl bnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLworCW5kZXYtPm9wZW4gPSAmdGVt YWNfb3BlbjsKKwluZGV2LT5zdG9wID0gJnRlbWFjX3N0b3A7CisJbmRldi0+Z2V0X3N0YXRz ID0gJnRlbWFjX2dldF9zdGF0czsKKwluZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmdGVtYWNf c2V0X21hY19hZGRyZXNzOworCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZ0ZW1hY19oYXJk X3N0YXJ0X3htaXQ7CisJbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnRlbWFjX3NldF9t dWx0aWNhc3RfbGlzdDsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCW5k ZXYtPnBvbGxfY29udHJvbGxlciA9ICZ0ZW1hY19wb2xsX2NvbnRyb2xsZXI7CisjZW5kaWYK KwluZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsgIC8qIGNsZWFyIG11bHRpY2FzdCAq LworCisJLyogU2NhdHRlci9nYXRoZXIgSU8uICovCisJbmRldi0+ZmVhdHVyZXMgPSBORVRJ Rl9GX1NHIDsKKwkvKiBTY2F0dGVyL2dhdGhlciBJTy4gKi8KKwluZGV2LT5mZWF0dXJlcyB8 PSBORVRJRl9GX0ZSQUdMSVNUOworI2lmIDAKKwkvKiBDYW4gY2hlY2tzdW0gVENQL1VEUCBv dmVyIElQdjQuICovCisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNCisJLyog Q2FuIGNoZWNrc3VtIGFsbCB0aGUgcGFja2V0cy4gKi8KKwluZGV2LT5mZWF0dXJlcyB8PSBO RVRJRl9GX0hXX0NTVU0KKworCS8qIENhbiBjaGVja3N1bSBUQ1AvVURQIG92ZXIgSVBWNiAq LworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNCisJLyogQ2FuIERNQSB0 byBoaWdoIG1lbW9yeS4gKi8KKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUEK KwkvKiBUcmFuc21pdCBWTEFOIGh3IGFjY2VsZXJhdGlvbiAqLworCW5kZXYtPmZlYXR1cmVz IHw9IE5FVElGX0ZfSFdfVkxBTl9UWAorCS8qIFJlY2VpdmUgVkxBTiBodyBhY2NlbGVyYXRp b24gKi8KKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fUlgKKwkvKiBSZWNl aXZlIGZpbHRlcmluZyBvbiBWTEFOICovCisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9I V19WTEFOX0ZJTFRFUgorCS8qIERldmljZSBjYW5ub3QgaGFuZGxlIFZMQU4gcGFja2V0cyAq LworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VECisJLyogRW5h YmxlIHNvZnR3YXJlIEdTTy4gKi8KKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dTTwor CS8qIEhhcyBtdWx0aXBsZSBUWC9SWCBxdWV1ZXMgKi8KKwluZGV2LT5mZWF0dXJlcyB8PSBO RVRJRl9GX01VTFRJX1FVRVVFCisJLyogbGFyZ2UgcmVjZWl2ZSBvZmZsb2FkICovCisJIG5k ZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPCisjZW5kaWYKKworCisJZXJDID0gcmVnaXN0 ZXJfbmV0ZGV2KG5kZXYpOworCWlmICghZXJDKQorCQlyZXR1cm4gMDsKKworbm9kZXY6CisJ ZnJlZV9uZXRkZXYobmRldik7CisJbmRldiA9IE5VTEw7CisJcmV0dXJuIGVyQzsKK30KKwor c3RhdGljIGludCBfX2RldmV4aXQgdGVtYWNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwly ZXR1cm4gMDsKK30KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlbWFjX2Rldmlj ZV9kcml2ZXIgPSB7CisJLnByb2JlICAgICAgPSB0ZW1hY19kZXZpY2VfcHJvYmUsCisJLnJl bW92ZSAgICAgPSBfX2RldmV4aXRfcCh0ZW1hY19kZXZpY2VfcmVtb3ZlKSwKKwkuc3VzcGVu ZCAgICA9IE5VTEwsCisJLnJlc3VtZSAgICAgPSBOVUxMLAorCS5kcml2ZXIgICAgID0gewor CQkubmFtZSAgID0gRFJWX05BTUUsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAor fTsKKworc3RhdGljIGludCBfX2luaXQKK3RlbWFjX2luaXRfbW9kdWxlKHZvaWQpCit7CisJ cmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVtYWNfZGV2aWNlX2RyaXZlcik7 Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordGVtYWNfY2xlYW51cF9tb2R1bGUodm9pZCkK K3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGVtYWNfZGV2aWNlX2RyaXZlcik7 Cit9CisKK21vZHVsZV9pbml0KHRlbWFjX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHRl bWFjX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggVHJp LU1vZGUgRXRoIE1BQyBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZf TkFNRSk7CitNT0RVTEVfQVVUSE9SKERSVl9BVVRIT1IpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOworLyogdmltOnNldCB0cz00IHN0cz00IHN3PTQgbm9ldCBsaXN0IG5vd3JhcDogKi8K ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveGlsaW54X2RldmljZXMuaCBiL2luY2x1ZGUv bGludXgveGlsaW54X2RldmljZXMuaAppbmRleCA0MWFkNDIxLi40MDUxMmQ1IDEwMDc1NQot LS0gYS9pbmNsdWRlL2xpbnV4L3hpbGlueF9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9saW51 eC94aWxpbnhfZGV2aWNlcy5oCkBAIC05NCw3ICs5NCw3IEBAIHN0cnVjdCB4dGVtYWNfcGxh dGZvcm1fZGF0YSB7CiAjZGVmaW5lIFhURU1BQ19ETUFfU0dETUEJMwkvKiBzY2F0dGVyIGdh dGhlciBETUEgKi8KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfWElMSU5YX0xMVEVN QUMpCisjaWYgZGVmaW5lZChDT05GSUdfWElMSU5YX0xMVEVNQUMpIHx8IGRlZmluZWQoQ09O RklHX1hQU19MTFRFTUFDKQogLyogTExURU1BQyBwbGF0Zm9ybSBkYXRhICovCiBzdHJ1Y3Qg eGxsdGVtYWNfcGxhdGZvcm1fZGF0YSB7CiAJdTggdHhfY3N1bTsK --------------020701070101080101060501--