From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= Subject: [PATCH] serial/efm32: add new driver Date: Thu, 22 Dec 2011 14:38:12 +0100 Message-ID: <1324561092-1945-1-git-send-email-u.kleine-koenig@pengutronix.de> References: <20111221202847.4ffeba10@bob.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20111221202847.4ffeba10-Z/y2cZnRghHXmaaqVzeoHQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: devicetree-discuss-bounces+gldd-devicetree-discuss=m.gmane.org-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Sender: devicetree-discuss-bounces+gldd-devicetree-discuss=m.gmane.org-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Alan Cox Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, Greg Kroah-Hartman , linux-serial-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org List-Id: devicetree@vger.kernel.org U2lnbmVkLW9mZi1ieTogVXdlIEtsZWluZS1Lw7ZuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRy b25peC5kZT4KLS0tCmNoYW5nZXMgc2luY2UgKGltcGxpY2l0KSB2MToKLSBmaXggY2hlY2twYXRj aCBpc3N1ZXMKLSB1c2UgdHR5X3BvcnRfdHR5X2dldC90dHlfa3JlZl9wdXQgaW4gZWZtMzJfdXNh cnRfcnhfY2hhcnMKLSBoYW5kbGUgcGFyaXR5IGFuZCBjc2l6ZSBpbiAuc2V0X3Rlcm1pb3MgYW5k CiAgZWZtMzJfdXNhcnRfY29uc29sZV9nZXRfb3B0aW9ucwotIGRyb3AgY2xlYXJpbmcgSFVQQ0wg ZnJvbSBjX2NmbGFnIGFuZCBldmVyeXRoaW5nIGZyb20gY19pZmxhZyBpbgogIC5zZXRfdGVybWlv cwoKVGhlc2Ugd2VyZSBhbGwgc3BvdHRlZCBieSBBbGFuLgoKIC4uLi9kZXZpY2V0cmVlL2JpbmRp bmdzL3R0eS9zZXJpYWwvZWZtMzItdXNhcnQudHh0IHwgICAxNCArCiBkcml2ZXJzL3R0eS9zZXJp YWwvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogZHJpdmVycy90dHkv c2VyaWFsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMv dHR5L3NlcmlhbC9lZm0zMi11c2FydC5jICAgICAgICAgICAgICAgICAgIHwgIDc1MCArKysrKysr KysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAyICsKIDUgZmlsZXMgY2hhbmdlZCwgNzc3IGluc2VydGlvbnMoKyksIDAg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL3R0eS9zZXJpYWwvZWZtMzItdXNhcnQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy90dHkvc2VyaWFsL2VmbTMyLXVzYXJ0LmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdHR5L3NlcmlhbC9lZm0zMi11c2FydC50eHQgYi9Eb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdHR5L3NlcmlhbC9lZm0zMi11c2FydC50eHQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmMjcyMQotLS0gL2Rldi9udWxs CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90dHkvc2VyaWFsL2VmbTMy LXVzYXJ0LnR4dApAQCAtMCwwICsxLDE0IEBACisqIEVuZXJneW1pY3JvIGVmbTMyIFVBUlQKKwor UmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSAiZWZtMzIsdXNh cnQiCistIHJlZyA6IEFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0CistIGlu dGVycnVwdHMgOiBTaG91bGQgY29udGFpbiB1YXJ0IGludGVycnVwdAorCitFeGFtcGxlOgorCit1 YXJ0QDB4NDAwMGM0MDAgeworCWNvbXBhdGlibGUgPSAiZWZtMzIsdXNhcnQiOworCXJlZyA9IDww eDQwMDBjNDAwIDB4NDAwPjsKKwlpbnRlcnJ1cHRzID0gPDE1PjsKK307CmRpZmYgLS1naXQgYS9k cml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmlu ZGV4IDkyNWExZTUuLmNmZWIwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29u ZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC0xNjEwLDQgKzE2MTAsMTQg QEAgY29uZmlnIFNFUklBTF9YSUxJTlhfUFNfVUFSVF9DT05TT0xFCiAJaGVscAogCSAgRW5hYmxl IGEgWGlsaW54IFBTIFVBUlQgcG9ydCB0byBiZSB0aGUgc3lzdGVtIGNvbnNvbGUuCiAKK2NvbmZp ZyBTRVJJQUxfRUZNMzJfVVNBUlQKKwlib29sICJFRk0zMiBVU0FSVCBwb3J0LiIKKwlkZXBlbmRz IG9uIEFSQ0hfRUZNMzIKKwlzZWxlY3QgU0VSSUFMX0NPUkUKKworY29uZmlnIFNFUklBTF9FRk0z Ml9VU0FSVF9DT05TT0xFCisJYm9vbCAiRUZNMzIgVVNBUlQgY29uc29sZSBzdXBwb3J0IgorCWRl cGVuZHMgb24gU0VSSUFMX0VGTTMyX1VTQVJUPXkKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09M RQorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUgYi9k cml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKaW5kZXggZTEwY2Y1Yi4uZDNhYjQyYiAxMDA2NDQK LS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdHR5L3Nlcmlh bC9NYWtlZmlsZQpAQCAtOTQsMyArOTQsNCBAQCBvYmotJChDT05GSUdfU0VSSUFMX01TTV9TTUQp CSs9IG1zbV9zbWRfdHR5Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfTVhTX0FVQVJUKSArPSBteHMt YXVhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9MQU5USVEpCSs9IGxhbnRpcS5vCiBvYmotJChD T05GSUdfU0VSSUFMX1hJTElOWF9QU19VQVJUKSArPSB4aWxpbnhfdWFydHBzLm8KK29iai0kKENP TkZJR19TRVJJQUxfRUZNMzJfVVNBUlQpICs9IGVmbTMyLXVzYXJ0Lm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdHR5L3NlcmlhbC9lZm0zMi11c2FydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2VmbTMy LXVzYXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2YjQzYwotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9lZm0zMi11c2FydC5jCkBAIC0wLDAg KzEsNzUwIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2Vy aWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9p by5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4K KworI2RlZmluZSBEUklWRVJfTkFNRSAiZWZtMzItdXNhcnQiCisjZGVmaW5lIERFVl9OQU1FICJ0 dHllZm0iCisKKyNkZWZpbmUgVVNBUlRuX0NUUkwJCTB4MDAKKyNkZWZpbmUgVVNBUlRuX0NUUkxf U1lOQwkJMHgwMDAxCisKKyNkZWZpbmUgVVNBUlRuX0ZSQU1FCQkweDA0CisjZGVmaW5lIFVTQVJU bl9GUkFNRV9EQVRBQklUU19fTUFTSwkweDAwMGYKKyNkZWZpbmUgVVNBUlRuX0ZSQU1FX0RBVEFC SVRTKG4pCSgobikgLSAzKQorI2RlZmluZSBVU0FSVG5fRlJBTUVfUEFSSVRZX05PTkUJMHgwMDAw CisjZGVmaW5lIFVTQVJUbl9GUkFNRV9QQVJJVFlfRVZFTgkweDAyMDAKKyNkZWZpbmUgVVNBUlRu X0ZSQU1FX1BBUklUWV9PREQJCTB4MDMwMAorI2RlZmluZSBVU0FSVG5fRlJBTUVfU1RPUEJJVFNf SEFMRgkweDAwMDAKKyNkZWZpbmUgVVNBUlRuX0ZSQU1FX1NUT1BCSVRTX09ORQkweDEwMDAKKyNk ZWZpbmUgVVNBUlRuX0ZSQU1FX1NUT1BCSVRTX1RXTwkweDMwMDAKKworI2RlZmluZSBVU0FSVG5f Q01ECQkweDBjCisjZGVmaW5lIFVTQVJUbl9DTURfUlhFTgkJCTB4MDAwMQorI2RlZmluZSBVU0FS VG5fQ01EX1JYRElTCQkweDAwMDIKKyNkZWZpbmUgVVNBUlRuX0NNRF9UWEVOCQkJMHgwMDA0Cisj ZGVmaW5lIFVTQVJUbl9DTURfVFhESVMJCTB4MDAwOAorCisjZGVmaW5lIFVTQVJUbl9TVEFUVVMJ CTB4MTAKKyNkZWZpbmUgVVNBUlRuX1NUQVRVU19UWEVOUwkJMHgwMDAyCisjZGVmaW5lIFVTQVJU bl9TVEFUVVNfVFhDCQkweDAwMjAKKyNkZWZpbmUgVVNBUlRuX1NUQVRVU19UWEJMCQkweDAwNDAK KyNkZWZpbmUgVVNBUlRuX1NUQVRVU19SWERBVEFWCQkweDAwODAKKworI2RlZmluZSBVU0FSVG5f Q0xLRElWCQkweDE0CisKKyNkZWZpbmUgVVNBUlRuX1JYREFUQVgJCTB4MTgKKyNkZWZpbmUgVVNB UlRuX1JYREFUQVhfUEVSUgkJMHg0MDAwCisjZGVmaW5lIFVTQVJUbl9SWERBVEFYX0ZFUlIJCTB4 ODAwMAorCisjZGVmaW5lIFVTQVJUbl9UWERBVEEJCTB4MzQKKworI2RlZmluZSBVU0FSVG5fSUYJ CTB4NDAKKyNkZWZpbmUgVVNBUlRuX0lGX1RYQkwJCQkweDAwMDIKKyNkZWZpbmUgVVNBUlRuX0lG X1JYREFUQVYJCTB4MDAwNAorCisjZGVmaW5lIFVTQVJUbl9JRlMJCTB4NDQKKyNkZWZpbmUgVVNB UlRuX0lGQwkJMHg0OAorI2RlZmluZSBVU0FSVG5fSUVOCQkweDRjCisKKyNkZWZpbmUgVVNBUlRu X1JPVVRFCQkweDU0CisjZGVmaW5lIFVTQVJUbl9ST1VURV9SWFBFTgkJMHgwMDAxCisjZGVmaW5l IFVTQVJUbl9ST1VURV9UWFBFTgkJMHgwMDAyCisKK3N0cnVjdCBlZm0zMl91c2FydF9wb3J0IHsK KwlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CisJdW5zaWduZWQgaW50IHR4aXJxOworCXN0cnVjdCBj bGsgKmNsazsKK307CisjZGVmaW5lIHRvX2VmbV9wb3J0KF9wb3J0KSBjb250YWluZXJfb2YoX3Bv cnQsIHN0cnVjdCBlZm0zMl91c2FydF9wb3J0LCBwb3J0KQorI2RlZmluZSBlZm1fZGVidWcoZWZt X3BvcnQsIGZvcm1hdCwgYXJnLi4uKQkJCVwKKwlkZXZfZGJnKGVmbV9wb3J0LT5wb3J0LmRldiwg Zm9ybWF0LCAjI2FyZykKKworc3RhdGljIHZvaWQgZWZtMzJfdXNhcnRfd3JpdGUzMihzdHJ1Y3Qg ZWZtMzJfdXNhcnRfcG9ydCAqZWZtX3BvcnQsCisJCXUzMiB2YWx1ZSwgdW5zaWduZWQgb2Zmc2V0 KQoreworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgZWZtX3BvcnQtPnBvcnQubWVtYmFzZSArIG9mZnNl dCk7Cit9CisKK3N0YXRpYyB1MzIgZWZtMzJfdXNhcnRfcmVhZDMyKHN0cnVjdCBlZm0zMl91c2Fy dF9wb3J0ICplZm1fcG9ydCwKKwkJdW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19y ZWFkbChlZm1fcG9ydC0+cG9ydC5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHVuc2ln bmVkIGludCBlZm0zMl91c2FydF90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorewor CXN0cnVjdCBlZm0zMl91c2FydF9wb3J0ICplZm1fcG9ydCA9IHRvX2VmbV9wb3J0KHBvcnQpOwor CXUzMiBzdGF0dXMgPSBlZm0zMl91c2FydF9yZWFkMzIoZWZtX3BvcnQsIFVTQVJUbl9TVEFUVVMp OworCisJLyogWFhYOiBkb2VzIFRYQkwgYWxzbyBtZWFuIHRoYXQgdGhlIHNoaWZ0ZXIgaXMgZG9u ZT8gKi8KKwlpZiAoc3RhdHVzICYgVVNBUlRuX1NUQVRVU19UWEJMKQorCQlyZXR1cm4gVElPQ1NF Ul9URU1UOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVmbTMyX3VzYXJ0 X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7 CisJLyogc29ycnksIG5laXRoZXIgaGFuZHNoYWtpbmcgbGluZXMgbm9yIGxvb3AgZnVuY3Rpb25h bGxpdHkgKi8KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlZm0zMl91c2FydF9nZXRfbWN0cmwo c3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwkvKiBzb3JyeSwgbm8gaGFuZHNoYWtpbmcgbGlu ZXMgYXZhaWxhYmxlICovCisJcmV0dXJuIFRJT0NNX0NBUiB8IFRJT0NNX0NUUyB8IFRJT0NNX0RT UjsKK30KKworc3RhdGljIHZvaWQgZWZtMzJfdXNhcnRfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0 ICpwb3J0KQoreworCXN0cnVjdCBlZm0zMl91c2FydF9wb3J0ICplZm1fcG9ydCA9IHRvX2VmbV9w b3J0KHBvcnQpOworCXUzMiBpZW4gPSBlZm0zMl91c2FydF9yZWFkMzIoZWZtX3BvcnQsICBVU0FS VG5fSUVOKTsKKworCWVmbTMyX3VzYXJ0X3dyaXRlMzIoZWZtX3BvcnQsIGllbiAmIH5VU0FSVG5f SUZfVFhCTCwgVVNBUlRuX0lFTik7Cit9CisKK3N0YXRpYyB2b2lkIGVmbTMyX3VzYXJ0X3R4X2No YXJzKHN0cnVjdCBlZm0zMl91c2FydF9wb3J0ICplZm1fcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9w b3J0ICpwb3J0ID0gJmVmbV9wb3J0LT5wb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZw b3J0LT5zdGF0ZS0+eG1pdDsKKworCXdoaWxlIChlZm0zMl91c2FydF9yZWFkMzIoZWZtX3BvcnQs IFVTQVJUbl9TVEFUVVMpICYKKwkJCVVTQVJUbl9TVEFUVVNfVFhCTCkgeworCQlpZiAocG9ydC0+ eF9jaGFyKSB7CisJCQlwb3J0LT5pY291bnQudHgrKzsKKwkJCWVmbTMyX3VzYXJ0X3dyaXRlMzIo ZWZtX3BvcnQsIHBvcnQtPnhfY2hhciwKKwkJCQkJVVNBUlRuX1RYREFUQSk7CisJCQlwb3J0LT54 X2NoYXIgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCF1YXJ0X2NpcmNfZW1wdHkoeG1p dCkgJiYgIXVhcnRfdHhfc3RvcHBlZChwb3J0KSkgeworCQkJcG9ydC0+aWNvdW50LnR4Kys7CisJ CQllZm0zMl91c2FydF93cml0ZTMyKGVmbV9wb3J0LCB4bWl0LT5idWZbeG1pdC0+dGFpbF0sCisJ CQkJCVVTQVJUbl9UWERBVEEpOworCQkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAo VUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisKKwlpZiAodWFy dF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVf d2FrZXVwKHBvcnQpOworCisJaWYgKCFwb3J0LT54X2NoYXIgJiYgdWFydF9jaXJjX2VtcHR5KHht aXQpKQorCQllZm0zMl91c2FydF9zdG9wX3R4KHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBlZm0z Ml91c2FydF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZm0z Ml91c2FydF9wb3J0ICplZm1fcG9ydCA9IHRvX2VmbV9wb3J0KHBvcnQpOworCXUzMiBpZW47CisK KwllZm0zMl91c2FydF93cml0ZTMyKGVmbV9wb3J0LCBVU0FSVG5fSUZfVFhCTCwgVVNBUlRuX0lG Qyk7CisJaWVuID0gZWZtMzJfdXNhcnRfcmVhZDMyKGVmbV9wb3J0LCAgVVNBUlRuX0lFTik7CisJ ZWZtMzJfdXNhcnRfd3JpdGUzMihlZm1fcG9ydCwgaWVuIHwgVVNBUlRuX0lGX1RYQkwsIFVTQVJU bl9JRU4pOworCWVmbTMyX3VzYXJ0X3dyaXRlMzIoZWZtX3BvcnQsIFVTQVJUbl9DTURfVFhFTiwg VVNBUlRuX0NNRCk7CisKKwllZm0zMl91c2FydF90eF9jaGFycyhlZm1fcG9ydCk7Cit9CisKK3N0 YXRpYyB2b2lkIGVmbTMyX3VzYXJ0X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sK KwlzdHJ1Y3QgZWZtMzJfdXNhcnRfcG9ydCAqZWZtX3BvcnQgPSB0b19lZm1fcG9ydChwb3J0KTsK KworCWVmbTMyX3VzYXJ0X3dyaXRlMzIoZWZtX3BvcnQsIFVTQVJUbl9DTURfUlhESVMsIFVTQVJU bl9DTUQpOworfQorCitzdGF0aWMgdm9pZCBlZm0zMl91c2FydF9lbmFibGVfbXMoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCkKK3sKKwkvKiBubyBoYW5kc2hha2UgbGluZXMsIG5vIG1vZGVtIHN0YXR1 cyBpbnRlcnJ1cHRzICovCit9CisKK3N0YXRpYyB2b2lkIGVmbTMyX3VzYXJ0X2JyZWFrX2N0bChz dHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY3RsKQoreworCS8qIG5vdCBwb3NzaWJsZSB3aXRo b3V0IGZpZGRsaW5nIHdpdGggZ3Bpb3MgKi8KK30KKworc3RhdGljIHZvaWQgZWZtMzJfdXNhcnRf cnhfY2hhcnMoc3RydWN0IGVmbTMyX3VzYXJ0X3BvcnQgKmVmbV9wb3J0KQoreworCXN0cnVjdCB1 YXJ0X3BvcnQgKnBvcnQgPSAmZWZtX3BvcnQtPnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0 eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnN0YXRlLT5wb3J0KTsKKworCXNwaW5fbG9jaygm cG9ydC0+bG9jayk7CisKKwl3aGlsZSAoZWZtMzJfdXNhcnRfcmVhZDMyKGVmbV9wb3J0LCBVU0FS VG5fU1RBVFVTKSAmCisJCQlVU0FSVG5fU1RBVFVTX1JYREFUQVYpIHsKKwkJdTMyIHJ4ZGF0YSA9 IGVmbTMyX3VzYXJ0X3JlYWQzMihlZm1fcG9ydCwgVVNBUlRuX1JYREFUQVgpOworCQlpbnQgZmxh ZyA9IDA7CisKKwkJcG9ydC0+aWNvdW50LnJ4Kys7CisKKwkJLyogWFhYIGRldGVjdCBCUkVBSyBh bmQgb3ZlcnJ1biAqLworCisJCWlmIChyeGRhdGEgJiBVU0FSVG5fUlhEQVRBWF9QRVJSKSB7CisJ CQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJCQlpZiAocG9ydC0+cmVhZF9zdGF0dXNfbWFzayAm IFVTQVJUbl9SWERBVEFYX1BFUlIpCisJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCX0gZWxzZSBp ZiAocnhkYXRhICYgVVNBUlRuX1JYREFUQVhfRkVSUikgeworCQkJcG9ydC0+aWNvdW50LmZyYW1l Kys7CisJCQlpZiAocG9ydC0+cmVhZF9zdGF0dXNfbWFzayAmIFVTQVJUbl9SWERBVEFYX0ZFUlIp CisJCQkJZmxhZyA9IFRUWV9GUkFNRTsKKwkJfQorCisJCWlmIChyeGRhdGEgJiBwb3J0LT5pZ25v cmVfc3RhdHVzX21hc2spCisJCQljb250aW51ZTsKKworCQlpZiAodHR5KQorCQkJdHR5X2luc2Vy dF9mbGlwX2NoYXIodHR5LCByeGRhdGEsIGZsYWcpOworCX0KKwlzcGluX3VubG9jaygmcG9ydC0+ bG9jayk7CisKKwlpZiAodHR5KSB7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCXR0 eV9rcmVmX3B1dCh0dHkpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGVmbTMyX3VzYXJ0 X3J4aXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGVmbTMyX3VzYXJ0X3BvcnQg KmVmbV9wb3J0ID0gZGF0YTsKKwl1MzIgaXJxZmxhZyA9IGVmbTMyX3VzYXJ0X3JlYWQzMihlZm1f cG9ydCwgVVNBUlRuX0lGKTsKKworCWlmIChpcnFmbGFnICYgVVNBUlRuX0lGX1JYREFUQVYpIHsK KwkJZWZtMzJfdXNhcnRfd3JpdGUzMihlZm1fcG9ydCwgVVNBUlRuX0lGX1JYREFUQVYsIFVTQVJU bl9JRkMpOworCQllZm0zMl91c2FydF9yeF9jaGFycyhlZm1fcG9ydCk7CisKKwkJcmV0dXJuIElS UV9IQU5ETEVEOworCX0gZWxzZQorCQlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpcnFy ZXR1cm5fdCBlZm0zMl91c2FydF90eGlycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVj dCBlZm0zMl91c2FydF9wb3J0ICplZm1fcG9ydCA9IGRhdGE7CisJdTMyIGlycWZsYWcgPSBlZm0z Ml91c2FydF9yZWFkMzIoZWZtX3BvcnQsIFVTQVJUbl9JRik7CisKKwlpZiAoaXJxZmxhZyAmIFVT QVJUbl9JRl9UWEJMKSB7CisJCWVmbTMyX3VzYXJ0X3dyaXRlMzIoZWZtX3BvcnQsIFVTQVJUbl9J Rl9UWEJMLCBVU0FSVG5fSUZDKTsKKwkJZWZtMzJfdXNhcnRfdHhfY2hhcnMoZWZtX3BvcnQpOwor CQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfSBlbHNlCisJCXJldHVybiBJUlFfTk9ORTsKK30KKwor c3RhdGljIGludCBlZm0zMl91c2FydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7 CisJc3RydWN0IGVmbTMyX3VzYXJ0X3BvcnQgKmVmbV9wb3J0ID0gdG9fZWZtX3BvcnQocG9ydCk7 CisJaW50IHJldDsKKworCXJldCA9IGNsa19lbmFibGUoZWZtX3BvcnQtPmNsayk7CisJaWYgKHJl dCkgeworCQllZm1fZGVidWcoZWZtX3BvcnQsICJmYWlsZWQgdG8gZW5hYmxlIGNsa1xuIik7CisJ CWdvdG8gZXJyX2Nsa19lbmFibGU7CisJfQorCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUo ZWZtX3BvcnQtPmNsayk7CisKKwkvKiBFbmFibGUgcGlucyBhdCBkZWZhdWx0IGxvY2F0aW9uICov CisJZWZtMzJfdXNhcnRfd3JpdGUzMihlZm1fcG9ydCwgVVNBUlRuX1JPVVRFX1JYUEVOIHwgVVNB UlRuX1JPVVRFX1RYUEVOLAorCQkJVVNBUlRuX1JPVVRFKTsKKworCXJldCA9IHJlcXVlc3RfaXJx KHBvcnQtPmlycSwgZWZtMzJfdXNhcnRfcnhpcnEsIDAsCisJCQlEUklWRVJfTkFNRSwgZWZtX3Bv cnQpOworCWlmIChyZXQpIHsKKwkJZWZtX2RlYnVnKGVmbV9wb3J0LCAiZmFpbGVkIHRvIHJlZ2lz dGVyIHJ4aXJxXG4iKTsKKwkJZ290byBlcnJfcmVxdWVzdF9pcnFfcng7CisJfQorCisJLyogZGlz YWJsZSBhbGwgaXJxcyAqLworCWVmbTMyX3VzYXJ0X3dyaXRlMzIoZWZtX3BvcnQsIDAsIFVTQVJU bl9JRU4pOworCisJcmV0ID0gcmVxdWVzdF9pcnEoZWZtX3BvcnQtPnR4aXJxLCBlZm0zMl91c2Fy dF90eGlycSwgMCwKKwkJCURSSVZFUl9OQU1FLCBlZm1fcG9ydCk7CisJaWYgKHJldCkgeworCQll Zm1fZGVidWcoZWZtX3BvcnQsICJmYWlsZWQgdG8gcmVnaXN0ZXIgdHhpcnFcbiIpOworCQlmcmVl X2lycShwb3J0LT5pcnEsIGVmbV9wb3J0KTsKK2Vycl9yZXF1ZXN0X2lycV9yeDoKKworCQljbGtf ZGlzYWJsZShlZm1fcG9ydC0+Y2xrKTsKKwl9IGVsc2UgeworCQllZm0zMl91c2FydF93cml0ZTMy KGVmbV9wb3J0LCBVU0FSVG5fSUZfUlhEQVRBViwgVVNBUlRuX0lFTik7CisJCWVmbTMyX3VzYXJ0 X3dyaXRlMzIoZWZtX3BvcnQsIFVTQVJUbl9DTURfUlhFTiwgVVNBUlRuX0NNRCk7CisJfQorCitl cnJfY2xrX2VuYWJsZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlZm0zMl91c2Fy dF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZm0zMl91c2Fy dF9wb3J0ICplZm1fcG9ydCA9IHRvX2VmbV9wb3J0KHBvcnQpOworCisJZWZtMzJfdXNhcnRfd3Jp dGUzMihlZm1fcG9ydCwgMCwgVVNBUlRuX0lFTik7CisJZnJlZV9pcnEocG9ydC0+aXJxLCBlZm1f cG9ydCk7CisKKwljbGtfZGlzYWJsZShlZm1fcG9ydC0+Y2xrKTsKK30KKworc3RhdGljIHZvaWQg ZWZtMzJfdXNhcnRfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJc3RydWN0 IGt0ZXJtaW9zICpuZXcsIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXN0cnVjdCBlZm0zMl91 c2FydF9wb3J0ICplZm1fcG9ydCA9IHRvX2VmbV9wb3J0KHBvcnQpOworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisJdW5zaWduZWQgYmF1ZDsKKwl1MzIgY2xrZGl2OworCXUzMiBmcmFtZSA9IDA7CisK KwkvKiBubyBtb2RlbSBjb250cm9sIGxpbmVzICovCisJbmV3LT5jX2NmbGFnICY9IH4oQ1JUU0NU UyB8IENNU1BBUik7CisKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIG5ldywgb2xk LAorCQkJRElWX1JPVU5EX0NMT1NFU1QocG9ydC0+dWFydGNsaywgMTYgKiA4MTkyKSwKKwkJCURJ Vl9ST1VORF9DTE9TRVNUKHBvcnQtPnVhcnRjbGssIDE2KSk7CisKKwlzd2l0Y2ggKG5ldy0+Y19j ZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWZyYW1lIHw9IFVTQVJUbl9GUkFNRV9EQVRB QklUUyg1KTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCWZyYW1lIHw9IFVTQVJUbl9GUkFNRV9E QVRBQklUUyg2KTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWZyYW1lIHw9IFVTQVJUbl9GUkFN RV9EQVRBQklUUyg3KTsKKwkJYnJlYWs7CisJY2FzZSBDUzg6CisJCWZyYW1lIHw9IFVTQVJUbl9G UkFNRV9EQVRBQklUUyg4KTsKKwkJYnJlYWs7CisJfQorCisJLyogdHggb25seSBzdXBwb3J0cyBh ICJoYWxmIiBzdG9wIGJpdCAqLworCW5ldy0+Y19jZmxhZyB8PSBDU1RPUEI7CisJZnJhbWUgfD0g VVNBUlRuX0ZSQU1FX1NUT1BCSVRTX09ORTsKKworCWlmIChuZXctPmNfY2ZsYWcgJiBQQVJFTkIp IHsKKwkJaWYgKG5ldy0+Y19jZmxhZyAmIFBBUk9ERCkKKwkJCWZyYW1lIHw9IFVTQVJUbl9GUkFN RV9QQVJJVFlfT0REOworCQllbHNlCisJCQlmcmFtZSB8PSBVU0FSVG5fRlJBTUVfUEFSSVRZX0VW RU47CisJfSBlbHNlCisJCWZyYW1lIHw9IFVTQVJUbl9GUkFNRV9QQVJJVFlfTk9ORTsKKworCS8q CisJICogdGhlIDYgbG93ZXN0IGJpdHMgb2YgQ0xLRElWIGFyZSBkYywgYml0IDYgaGFzIHZhbHVl IDAuMjUuCisJICogcG9ydC0+dWFydGNsayA8PSAxNGU2LCBzbyA0ICogcG9ydC0+dWFydGNsayBk b2Vzbid0IG92ZXJmbG93LgorCSAqLworCWNsa2RpdiA9IChESVZfUk9VTkRfQ0xPU0VTVCg0ICog cG9ydC0+dWFydGNsaywgMTYgKiBiYXVkKSAtIDQpIDw8IDY7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJZWZtMzJfdXNhcnRfd3JpdGUzMihlZm1fcG9ydCwK KwkJCVVTQVJUbl9DTURfVFhESVMgfCBVU0FSVG5fQ01EX1JYRElTLCBVU0FSVG5fQ01EKTsKKwor CXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgPSAwOworCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9 IDA7CisKKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIG5ldy0+Y19jZmxhZywgYmF1ZCk7CisK KwllZm0zMl91c2FydF93cml0ZTMyKGVmbV9wb3J0LCAwLCBVU0FSVG5fQ1RSTCk7CisJZWZtMzJf dXNhcnRfd3JpdGUzMihlZm1fcG9ydCwgZnJhbWUsIFVTQVJUbl9GUkFNRSk7CisJZWZtMzJfdXNh cnRfd3JpdGUzMihlZm1fcG9ydCwgY2xrZGl2LCBVU0FSVG5fQ0xLRElWKTsKKworCWVmbTMyX3Vz YXJ0X3dyaXRlMzIoZWZtX3BvcnQsIFVTQVJUbl9DTURfVFhFTiB8IFVTQVJUbl9DTURfUlhFTiwK KwkJCVVTQVJUbl9DTUQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywg ZmxhZ3MpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZWZtMzJfdXNhcnRfdHlwZShzdHJ1Y3Qg dWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBwb3J0LT50eXBlID09IFBPUlRfRUZNVVNBUlQg PyAiZWZtMzItdXNhcnQiIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgZWZtMzJfdXNhcnRfcmVs ZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVmbTMyX3VzYXJ0 X3BvcnQgKmVmbV9wb3J0ID0gdG9fZWZtX3BvcnQocG9ydCk7CisKKwljbGtfdW5wcmVwYXJlKGVm bV9wb3J0LT5jbGspOworCWNsa19wdXQoZWZtX3BvcnQtPmNsayk7CisJaW91bm1hcChwb3J0LT5t ZW1iYXNlKTsKK30KKworc3RhdGljIGludCBlZm0zMl91c2FydF9yZXF1ZXN0X3BvcnQoc3RydWN0 IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWZtMzJfdXNhcnRfcG9ydCAqZWZtX3BvcnQg PSB0b19lZm1fcG9ydChwb3J0KTsKKwlpbnQgcmV0OworCisJcG9ydC0+bWVtYmFzZSA9IGlvcmVt YXAocG9ydC0+bWFwYmFzZSwgNjApOworCWlmICghZWZtX3BvcnQtPnBvcnQubWVtYmFzZSkgewor CQlyZXQgPSAtRU5PTUVNOworCQllZm1fZGVidWcoZWZtX3BvcnQsICJmYWlsZWQgdG8gcmVtYXBc biIpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCWVmbV9wb3J0LT5jbGsgPSBjbGtfZ2V0 KHBvcnQtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihlZm1fcG9ydC0+Y2xrKSkgeworCQlyZXQg PSBQVFJfRVJSKGVmbV9wb3J0LT5jbGspOworCQllZm1fZGVidWcoZWZtX3BvcnQsICJmYWlsZWQg dG8gZ2V0IGNsb2NrXG4iKTsKKwkJZ290byBlcnJfY2xrX2dldDsKKwl9CisKKwlyZXQgPSBjbGtf cHJlcGFyZShlZm1fcG9ydC0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWNsa19wdXQoZWZtX3BvcnQt PmNsayk7CitlcnJfY2xrX2dldDoKKworCQlpb3VubWFwKHBvcnQtPm1lbWJhc2UpOworZXJyX2lv cmVtYXA6CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBl Zm0zMl91c2FydF9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgdHlwZSkK K3sKKwlpZiAodHlwZSAmIFVBUlRfQ09ORklHX1RZUEUgJiYKKwkJCSFlZm0zMl91c2FydF9yZXF1 ZXN0X3BvcnQocG9ydCkpCisJCXBvcnQtPnR5cGUgPSBQT1JUX0VGTVVTQVJUOworfQorCitzdGF0 aWMgaW50IGVmbTMyX3VzYXJ0X3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJ CXN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXJpbmZvKQoreworCWludCByZXQgPSAwOworCisJaWYg KHNlcmluZm8tPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlcmluZm8tPnR5cGUgIT0gUE9SVF9F Rk1VU0FSVCkKKwkJcmV0ID0gLUVJTlZBTDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgdWFydF9vcHMgZWZtMzJfdXNhcnRfcG9wcyA9IHsKKwkudHhfZW1wdHkgPSBlZm0zMl91 c2FydF90eF9lbXB0eSwKKwkuc2V0X21jdHJsID0gZWZtMzJfdXNhcnRfc2V0X21jdHJsLAorCS5n ZXRfbWN0cmwgPSBlZm0zMl91c2FydF9nZXRfbWN0cmwsCisJLnN0b3BfdHggPSBlZm0zMl91c2Fy dF9zdG9wX3R4LAorCS5zdGFydF90eCA9IGVmbTMyX3VzYXJ0X3N0YXJ0X3R4LAorCS5zdG9wX3J4 ID0gZWZtMzJfdXNhcnRfc3RvcF9yeCwKKwkuZW5hYmxlX21zID0gZWZtMzJfdXNhcnRfZW5hYmxl X21zLAorCS5icmVha19jdGwgPSBlZm0zMl91c2FydF9icmVha19jdGwsCisJLnN0YXJ0dXAgPSBl Zm0zMl91c2FydF9zdGFydHVwLAorCS5zaHV0ZG93biA9IGVmbTMyX3VzYXJ0X3NodXRkb3duLAor CS5zZXRfdGVybWlvcyA9IGVmbTMyX3VzYXJ0X3NldF90ZXJtaW9zLAorCS50eXBlID0gZWZtMzJf dXNhcnRfdHlwZSwKKwkucmVsZWFzZV9wb3J0ID0gZWZtMzJfdXNhcnRfcmVsZWFzZV9wb3J0LAor CS5yZXF1ZXN0X3BvcnQgPSBlZm0zMl91c2FydF9yZXF1ZXN0X3BvcnQsCisJLmNvbmZpZ19wb3J0 ID0gZWZtMzJfdXNhcnRfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0ID0gZWZtMzJfdXNhcnRf dmVyaWZ5X3BvcnQsCit9OworCitzdGF0aWMgc3RydWN0IGVmbTMyX3VzYXJ0X3BvcnQgKmVmbTMy X3VzYXJ0X3BvcnRzWzNdOworCisjaWZkZWYgQ09ORklHX1NFUklBTF9FRk0zMl9VU0FSVF9DT05T T0xFCitzdGF0aWMgdm9pZCBlZm0zMl91c2FydF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRf cG9ydCAqcG9ydCwgaW50IGNoKQoreworCXN0cnVjdCBlZm0zMl91c2FydF9wb3J0ICplZm1fcG9y dCA9IHRvX2VmbV9wb3J0KHBvcnQpOworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gMHg0MDA7CisJ dTMyIHN0YXR1czsKKworCXdoaWxlICgxKSB7CisJCXN0YXR1cyA9IGVmbTMyX3VzYXJ0X3JlYWQz MihlZm1fcG9ydCwgVVNBUlRuX1NUQVRVUyk7CisKKwkJaWYgKHN0YXR1cyAmIFVTQVJUbl9TVEFU VVNfVFhCTCkKKwkJCWJyZWFrOworCQlpZiAoIXRpbWVvdXQtLSkKKwkJCXJldHVybjsKKwl9CisJ ZWZtMzJfdXNhcnRfd3JpdGUzMihlZm1fcG9ydCwgY2gsIFVTQVJUbl9UWERBVEEpOworfQorCitz dGF0aWMgdm9pZCBlZm0zMl91c2FydF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywg Y29uc3QgY2hhciAqcywKKwkJdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBlZm0zMl91 c2FydF9wb3J0ICplZm1fcG9ydCA9IGVmbTMyX3VzYXJ0X3BvcnRzW2NvLT5pbmRleF07CisJdTMy IHN0YXR1cyA9IGVmbTMyX3VzYXJ0X3JlYWQzMihlZm1fcG9ydCwgVVNBUlRuX1NUQVRVUyk7CisJ dW5zaWduZWQgaW50IHRpbWVvdXQgPSAweDQwMDsKKworCWlmICghKHN0YXR1cyAmIFVTQVJUbl9T VEFUVVNfVFhFTlMpKQorCQllZm0zMl91c2FydF93cml0ZTMyKGVmbV9wb3J0LCBVU0FSVG5fQ01E X1RYRU4sIFVTQVJUbl9DTUQpOworCisJdWFydF9jb25zb2xlX3dyaXRlKCZlZm1fcG9ydC0+cG9y dCwgcywgY291bnQsCisJCQllZm0zMl91c2FydF9jb25zb2xlX3B1dGNoYXIpOworCisJLyogV2Fp dCBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eSAqLworCXdoaWxlICgxKSB7CisJ CXUzMiBzdGF0dXMgPSBlZm0zMl91c2FydF9yZWFkMzIoZWZtX3BvcnQsIFVTQVJUbl9TVEFUVVMp OworCQlpZiAoc3RhdHVzICYgVVNBUlRuX1NUQVRVU19UWEMpCisJCQlicmVhazsKKwkJaWYgKCF0 aW1lb3V0LS0pCisJCQlicmVhazsKKwl9CisKKwlpZiAoIShzdGF0dXMgJiBVU0FSVG5fU1RBVFVT X1RYRU5TKSkKKwkJZWZtMzJfdXNhcnRfd3JpdGUzMihlZm1fcG9ydCwgVVNBUlRuX0NNRF9UWERJ UywgVVNBUlRuX0NNRCk7Cit9CisKK3N0YXRpYyB2b2lkIGVmbTMyX3VzYXJ0X2NvbnNvbGVfZ2V0 X29wdGlvbnMoc3RydWN0IGVmbTMyX3VzYXJ0X3BvcnQgKmVmbV9wb3J0LAorCQlpbnQgKmJhdWQs IGludCAqcGFyaXR5LCBpbnQgKmJpdHMpCit7CisJdTMyIGN0cmwgPSBlZm0zMl91c2FydF9yZWFk MzIoZWZtX3BvcnQsIFVTQVJUbl9DVFJMKTsKKwl1MzIgcm91dGUsIGNsa2RpdiwgZnJhbWU7CisK KwlpZiAoY3RybCAmIFVTQVJUbl9DVFJMX1NZTkMpCisJCS8qIG5vdCBvcGVyYXRpbmcgaW4gYXN5 bmMgbW9kZSAqLworCQlyZXR1cm47CisKKwlyb3V0ZSA9IGVmbTMyX3VzYXJ0X3JlYWQzMihlZm1f cG9ydCwgVVNBUlRuX1JPVVRFKTsKKwlpZiAoIShyb3V0ZSAmIFVTQVJUbl9ST1VURV9UWFBFTikp CisJCS8qIHR4IHBpbiBub3Qgcm91dGVkICovCisJCXJldHVybjsKKworCWNsa2RpdiA9IGVmbTMy X3VzYXJ0X3JlYWQzMihlZm1fcG9ydCwgVVNBUlRuX0NMS0RJVik7CisKKwkqYmF1ZCA9IERJVl9S T1VORF9DTE9TRVNUKDQgKiBlZm1fcG9ydC0+cG9ydC51YXJ0Y2xrLAorCQkJMTYgKiAoNCArIChj bGtkaXYgPj4gNikpKTsKKworCWZyYW1lID0gZWZtMzJfdXNhcnRfcmVhZDMyKGVmbV9wb3J0LCBV U0FSVG5fRlJBTUUpOworCWlmIChmcmFtZSAmIFVTQVJUbl9GUkFNRV9QQVJJVFlfT0REKQorCQkq cGFyaXR5ID0gJ28nOworCWVsc2UgaWYgKGZyYW1lICYgVVNBUlRuX0ZSQU1FX1BBUklUWV9FVkVO KQorCQkqcGFyaXR5ID0gJ2UnOworCWVsc2UKKwkJKnBhcml0eSA9ICduJzsKKworCSpiaXRzID0g KGZyYW1lICYgVVNBUlRuX0ZSQU1FX0RBVEFCSVRTX19NQVNLKSAtCisJCQlVU0FSVG5fRlJBTUVf REFUQUJJVFMoNCkgKyA0OworCisJZWZtX2RlYnVnKGVmbV9wb3J0LCAiZ2V0X29wdHM6IG9wdGlv bnM9JWQlYyVkXG4iLAorCQkJKmJhdWQsICpwYXJpdHksICpiaXRzKTsKK30KKworc3RhdGljIGlu dCBlZm0zMl91c2FydF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0 aW9ucykKK3sKKwlzdHJ1Y3QgZWZtMzJfdXNhcnRfcG9ydCAqZWZtX3BvcnQ7CisJaW50IGJhdWQg PSAxMTUyMDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cg PSAnbic7CisJaW50IHJldDsKKworCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBB UlJBWV9TSVpFKGVmbTMyX3VzYXJ0X3BvcnRzKSkgeworCQl1bnNpZ25lZCBpOworCQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShlZm0zMl91c2FydF9wb3J0cyk7ICsraSkgeworCQkJaWYgKGVm bTMyX3VzYXJ0X3BvcnRzW2ldKSB7CisJCQkJcHJfd2FybigiZWZtMzItY29uc29sZTogZmFsbCBi YWNrIHRvIGNvbnNvbGUgaW5kZXggJXUgKGZyb20gJWhoaSlcbiIsCisJCQkJCQlpLCBjby0+aW5k ZXgpOworCQkJCWNvLT5pbmRleCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwll Zm1fcG9ydCA9IGVmbTMyX3VzYXJ0X3BvcnRzW2NvLT5pbmRleF07CisJaWYgKCFlZm1fcG9ydCkg eworCQlwcl93YXJuKCJlZm0zMi1jb25zb2xlOiBObyBwb3J0IGF0ICVkXG4iLCBjby0+aW5kZXgp OworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZShlZm1fcG9ydC0+ Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGVmbV9wb3J0LT5wb3J0LmRldiwKKwkJCQki Y29uc29sZTogY2xrX3ByZXBhcmUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwllZm1fcG9ydC0+cG9ydC51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGVmbV9wb3J0LT5j bGspOworCisJaWYgKG9wdGlvbnMpCisJCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1 ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKKwllbHNlCisJCWVmbTMyX3VzYXJ0X2NvbnNvbGVf Z2V0X29wdGlvbnMoZWZtX3BvcnQsCisJCQkJJmJhdWQsICZwYXJpdHksICZiaXRzKTsKKworCXJl dHVybiB1YXJ0X3NldF9vcHRpb25zKCZlZm1fcG9ydC0+cG9ydCwgY28sIGJhdWQsIHBhcml0eSwg Yml0cywgZmxvdyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgZWZtMzJfdXNhcnRf cmVnOworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgZWZtMzJfdXNhcnRfY29uc29sZSA9IHsKKwku bmFtZSA9IERFVl9OQU1FLAorCS53cml0ZSA9IGVmbTMyX3VzYXJ0X2NvbnNvbGVfd3JpdGUsCisJ LmRldmljZSA9IHVhcnRfY29uc29sZV9kZXZpY2UsCisJLnNldHVwID0gZWZtMzJfdXNhcnRfY29u c29sZV9zZXR1cCwKKwkuZmxhZ3MgPSBDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4ID0gLTEsCisJ LmRhdGEgPSAmZWZtMzJfdXNhcnRfcmVnLAorfTsKKworI2Vsc2UKKyNkZWZpbmUgZWZtMzJfdXNh cnRfY29uc29sZSAoKihzdHJ1Y3QgY29uc29sZSAqKU5VTEwpCisjZW5kaWYgLyogaWZkZWYgQ09O RklHX1NFUklBTF9FRk0zMl9VU0FSVF9DT05TT0xFIC8gZWxzZSAqLworCitzdGF0aWMgc3RydWN0 IHVhcnRfZHJpdmVyIGVmbTMyX3VzYXJ0X3JlZyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwK KwkuZHJpdmVyX25hbWUgPSBEUklWRVJfTkFNRSwKKwkuZGV2X25hbWUgPSBERVZfTkFNRSwKKwku bnIgPSBBUlJBWV9TSVpFKGVmbTMyX3VzYXJ0X3BvcnRzKSwKKwkuY29ucyA9ICZlZm0zMl91c2Fy dF9jb25zb2xlLAorfTsKKworc3RhdGljIGludCBlZm0zMl91c2FydF9wcm9iZV9kdChzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgZWZtMzJfdXNhcnRfcG9ydCAqZWZtX3Bv cnQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCWlu dCByZXQ7CisKKwlpZiAoIW5wKQorCQlyZXR1cm4gMTsKKworCXJldCA9IG9mX2FsaWFzX2dldF9p ZChucCwgInNlcmlhbCIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwg ImZhaWxlZCB0byBnZXQgYWxpYXMgaWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0g ZWxzZSB7CisJCWVmbV9wb3J0LT5wb3J0LmxpbmUgPSByZXQ7CisJCXJldHVybiAwOworCX0KKwor fQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlZm0zMl91c2FydF9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBlZm0zMl91c2FydF9wb3J0ICplZm1fcG9ydDsK KwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJZWZtX3BvcnQgPSBremFsbG9j KHNpemVvZigqZWZtX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVmbV9wb3J0KSB7CisJCWRl dl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFcbiIpOwor CQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRl diwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJ CWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBkZXRlcm1pbmUgYmFzZSBhZGRyZXNzXG4i KTsKKwkJZ290byBlcnJfZ2V0X2Jhc2U7CisJfQorCisJaWYgKHJlc291cmNlX3NpemUocmVzKSA8 IDYwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm1lbW9yeSBy ZXNvdXJjZSB0b28gc21hbGxcbiIpOworCQlnb3RvIGVycl90b29fc21hbGw7CisJfQorCisJcmV0 ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocmV0IDw9IDApIHsKKwkJZGV2X2Ri ZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByeCBpcnFcbiIpOworCQlnb3RvIGVycl9nZXRf cnhpcnE7CisJfQorCisJZWZtX3BvcnQtPnBvcnQuaXJxID0gcmV0OworCisJcmV0ID0gcGxhdGZv cm1fZ2V0X2lycShwZGV2LCAxKTsKKwlpZiAocmV0IDw9IDApCisJCXJldCA9IGVmbV9wb3J0LT5w b3J0LmlycSArIDE7CisKKwllZm1fcG9ydC0+dHhpcnEgPSByZXQ7CisKKwllZm1fcG9ydC0+cG9y dC5kZXYgPSAmcGRldi0+ZGV2OworCWVmbV9wb3J0LT5wb3J0Lm1hcGJhc2UgPSByZXMtPnN0YXJ0 OworCWVmbV9wb3J0LT5wb3J0LnR5cGUgPSBQT1JUX0VGTVVTQVJUOworCWVmbV9wb3J0LT5wb3J0 LmlvdHlwZSA9IFVQSU9fTUVNMzI7CisJZWZtX3BvcnQtPnBvcnQuZmlmb3NpemUgPSAyOworCWVm bV9wb3J0LT5wb3J0Lm9wcyA9ICZlZm0zMl91c2FydF9wb3BzOworCWVmbV9wb3J0LT5wb3J0LmZs YWdzID0gVVBGX0JPT1RfQVVUT0NPTkY7CisKKwlyZXQgPSBlZm0zMl91c2FydF9wcm9iZV9kdChw ZGV2LCBlZm1fcG9ydCk7CisJaWYgKHJldCA+IDApCisJCS8qIG5vdCBjcmVhdGVkIGJ5IGRldmlj ZSB0cmVlICovCisJCWVmbV9wb3J0LT5wb3J0LmxpbmUgPSBwZGV2LT5pZDsKKworCWlmIChlZm1f cG9ydC0+cG9ydC5saW5lID49IDAgJiYKKwkJCWVmbV9wb3J0LT5wb3J0LmxpbmUgPCBBUlJBWV9T SVpFKGVmbTMyX3VzYXJ0X3BvcnRzKSkKKwkJZWZtMzJfdXNhcnRfcG9ydHNbZWZtX3BvcnQtPnBv cnQubGluZV0gPSBlZm1fcG9ydDsKKworCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZlZm0zMl91 c2FydF9yZWcsICZlZm1fcG9ydC0+cG9ydCk7CisJaWYgKHJldCkgeworCQlkZXZfZGJnKCZwZGV2 LT5kZXYsICJmYWlsZWQgdG8gYWRkIHBvcnQ6ICVkXG4iLCByZXQpOworCisJCWlmIChwZGV2LT5p ZCA+PSAwICYmIHBkZXYtPmlkIDwgQVJSQVlfU0laRShlZm0zMl91c2FydF9wb3J0cykpCisJCQll Zm0zMl91c2FydF9wb3J0c1twZGV2LT5pZF0gPSBOVUxMOworZXJyX2dldF9yeGlycToKK2Vycl90 b29fc21hbGw6CitlcnJfZ2V0X2Jhc2U6CisJCWtmcmVlKGVmbV9wb3J0KTsKKwl9IGVsc2Ugewor CQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlZm1fcG9ydCk7CisJCWRldl9kYmcoJnBkZXYt PmRldiwgIlxcby9cbiIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19k ZXZleGl0IGVmbTMyX3VzYXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCXN0cnVjdCBlZm0zMl91c2FydF9wb3J0ICplZm1fcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwl1YXJ0 X3JlbW92ZV9vbmVfcG9ydCgmZWZtMzJfdXNhcnRfcmVnLCAmZWZtX3BvcnQtPnBvcnQpOworCisJ aWYgKHBkZXYtPmlkID49IDAgJiYgcGRldi0+aWQgPCBBUlJBWV9TSVpFKGVmbTMyX3VzYXJ0X3Bv cnRzKSkKKwkJZWZtMzJfdXNhcnRfcG9ydHNbcGRldi0+aWRdID0gTlVMTDsKKworCWtmcmVlKGVm bV9wb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBl Zm0zMl91c2FydF9kdF9pZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImVmbTMyLHVzYXJ0 IiwKKwl9LCB7CisJCS8qIHNlbnRpbmVsICovCisJfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIGVmbTMyX3VzYXJ0X2R0X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGVmbTMyX3VzYXJ0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBlZm0zMl91c2FydF9wcm9iZSwKKwku cmVtb3ZlID0gX19kZXZleGl0X3AoZWZtMzJfdXNhcnRfcmVtb3ZlKSwKKworCS5kcml2ZXIgPSB7 CisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBlZm0zMl91c2FydF9kdF9pZHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQg X19pbml0IGVmbTMyX3VzYXJ0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdWFy dF9yZWdpc3Rlcl9kcml2ZXIoJmVmbTMyX3VzYXJ0X3JlZyk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZWZtMzJfdXNhcnRfZHJp dmVyKTsKKwlpZiAocmV0KQorCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZlZm0zMl91c2FydF9y ZWcpOworCisJcHJfaW5mbygiRUZNMzIgVVNBUlQgZHJpdmVyXG4iKTsKKworCXJldHVybiByZXQ7 Cit9Cittb2R1bGVfaW5pdChlZm0zMl91c2FydF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0 IGVmbTMyX3VzYXJ0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigm ZWZtMzJfdXNhcnRfZHJpdmVyKTsKKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZlZm0zMl91c2Fy dF9yZWcpOworfQorCitNT0RVTEVfQVVUSE9SKCJVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUt a29lbmlnQHBlbmd1dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFRk0zMiBVU0FS VCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxh dGZvcm06IiBEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9j b3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggZWFkZjMzZC4uZWI0NWQ0 ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUv bGludXgvc2VyaWFsX2NvcmUuaApAQCAtMjA3LDYgKzIwNyw4IEBACiAvKiBYaWxpbnggUFNTIFVB UlQgKi8KICNkZWZpbmUgUE9SVF9YVUFSVFBTCTk4CiAKKyNkZWZpbmUgUE9SVF9FRk1VU0FSVCAg IDk5CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgot LSAKMS43LjcuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZGV2aWNldHJlZS1kaXNjdXNzIG1haWxpbmcgbGlzdApkZXZpY2V0cmVlLWRpc2N1c3NAbGlz dHMub3psYWJzLm9yZwpodHRwczovL2xpc3RzLm96bGFicy5vcmcvbGlzdGluZm8vZGV2aWNldHJl ZS1kaXNjdXNzCg==