From mboxrd@z Thu Jan 1 00:00:00 1970 From: Meng Yi Subject: [PATCH v3 1/3] drm/layerscape: Add sii9022a driver Date: Wed, 9 Mar 2016 16:31:00 +0800 Message-ID: <1457512262-45984-1-git-send-email-meng.yi@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0087.outbound.protection.outlook.com [157.56.110.87]) by gabe.freedesktop.org (Postfix) with ESMTPS id 19EDC6E866 for ; Wed, 9 Mar 2016 08:56:12 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: stefan@agner.ch, jianwei.wang.chn@gmail.com, dri-devel@lists.freedesktop.org Cc: Meng Yi , Xiubo Li , Alison Wang List-Id: dri-devel@lists.freedesktop.org VGhlIFNpSTkwMjJBIGlzIGFuIHVsdHJhIGxvdy1wb3dlciBIRE1JIHRyYW5zbWl0dGVyLiBJdCBz dXBwb3J0cwpyZXNvbHV0aW9ucyBmcm9tIHN0YW5kYXJkIGRlZmluaXRpb24gNDgwaS9wIGFuZCA1 NzZpL3AgYWxsIHRoZSB3YXkKdG8gaGlnaC1kZWZpbml0aW9uIDcyMHAsIDEwODBpLCBhbmQgMTA4 MHAsIHRoZSBoaWdoZXN0IHJlc29sdXRpb24Kc3VwcG9ydGVkIDRLIHRvZGF5LiBJdCBhbHNvIHN1 cHBvcnRzIGFsbCBQQyByZXNvbHV0aW9ucyB1cAp0byBVWEdBIGZvciBuZXRib29rcwoKU2lnbmVk LW9mZi1ieTogTWVuZyBZaSA8bWVuZy55aUBueHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbGlzb24g V2FuZyA8YWxpc29uLndhbmdAbnhwLmNvbT4KU2lnbmVkLW9mZi1ieTogWGl1Ym8gTGkgPGxpeGl1 Ym9AY21zcy5jaGluYW1vYmlsZS5jb20+ClNpZ25lZC1vZmYtYnk6IEppYW53ZWkgV2FuZyA8amlh bndlaS53YW5nLmNobkBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2kyYy9LY29uZmln ICAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9pMmMvTWFrZWZpbGUgICAgICB8ICAgMyAr CiBkcml2ZXJzL2dwdS9kcm0vaTJjL3NpaTkwMjJfZHJ2LmMgfCA0NDkgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDU4IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTJjL3NpaTkwMjJfZHJ2LmMK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL0tjb25maWcgYi9kcml2ZXJzL2dwdS9k cm0vaTJjL0tjb25maWcKaW5kZXggMjJjN2VkNi4uODY0NjcyOSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2kyYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZpZwpA QCAtMzEsNCArMzEsMTAgQEAgY29uZmlnIERSTV9JMkNfTlhQX1REQTk5OFgKIAloZWxwCiAJICBT dXBwb3J0IGZvciBOWFAgU2VtaWNvbmR1Y3RvcnMgVERBOTk4WCBIRE1JIGVuY29kZXJzLgogCitj b25maWcgRFJNX0kyQ19TSUk5MDIyCisJdHJpc3RhdGUgIlNpbGljb24gSW1hZ2Ugc2lpOTAyMiBU TURTIHRyYW5zbWl0dGVyIgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHNpaTkwMjIgYW5kIHNpbWls YXIgc2luZ2xlLWxpbmsgKG9yIGR1YWwtbGluaworCSAgd2hlbiB1c2VkIGluIHBhaXJzKSBUTURT IHRyYW5zbWl0dGVycy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ky Yy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvTWFrZWZpbGUKaW5kZXggMmM3MmViNS4u Y2YyZThiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9NYWtlZmlsZQorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTJjL01ha2VmaWxlCkBAIC0xMCwzICsxMCw2IEBAIG9iai0kKENPTkZJ R19EUk1fSTJDX1NJTDE2NCkgKz0gc2lsMTY0Lm8KIAogdGRhOTk4eC15IDo9IHRkYTk5OHhfZHJ2 Lm8KIG9iai0kKENPTkZJR19EUk1fSTJDX05YUF9UREE5OThYKSArPSB0ZGE5OTh4Lm8KKworc2lp OTAyMi15IDo9IHNpaTkwMjJfZHJ2Lm8KK29iai0kKENPTkZJR19EUk1fSTJDX1NJSTkwMjIpICs9 c2lpOTAyMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL3NpaTkwMjJfZHJ2LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTJjL3NpaTkwMjJfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYmM0OWNhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pMmMvc2lpOTAyMl9kcnYuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqIENvcHlyaWdodCAy MDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogRnJlZXNjYWxlIERDVSBk cm0gZGV2aWNlIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICog dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxs aW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxp bnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDx2aWRl by92aWRlb21vZGUuaD4KKyNpbmNsdWRlIDx2aWRlby9vZl9kaXNwbGF5X3RpbWluZy5oPgorCisj aW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXJfc2xhdmUuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisKKworI2RlZmluZSBTSUk5 MDJYX0lOUFVUX0JVU19GTVQJMHgwOAorI2RlZmluZSBTSUk5MDJYX1RQSV9BVklfSU5QVVRfRk1U CTB4MDkKKyNkZWZpbmUgU0lJOTAyWF9UUElfQVZJX09VVFBVVF9GTVQJMHgwQQorI2RlZmluZSBT SUk5MDJYX1NZU19DT05UUk9MCTB4MUEKKyNkZWZpbmUgU0lJOTAyWF9TWVNfQ1RSX0REQ19SRVEJ QklUKDIpCisjZGVmaW5lIFNJSTkwMlhfU1lTX0NUUl9ERENfQlVTX0FWQUkJKEJJVCgyKSB8IEJJ VCgxKSkKKyNkZWZpbmUgU0lJOTAyWF9UUElfRkFNSUxZX0RFVl9JRAkweDFCCisjZGVmaW5lIFNJ STkwMlhfVFBJX0RFVl9SRVZfSUQJMHgxQworI2RlZmluZSBTSUk5MDJYX1RQSV9SRVZfTEVWRUxf SUQJMHgxRAorI2RlZmluZSBTSUk5MDJYX1BPV0VSX1NUQVRFCTB4MUUKKyNkZWZpbmUgU0lJOTAy WF9UUElfQVVESU9fQ0ZHMAkweDI0CisjZGVmaW5lIFNJSTkwMlhfVFBJX0FVRElPX0NGRzEJMHgy NQorI2RlZmluZSBTSUk5MDJYX1RQSV9BVURJT19DRkcyCTB4MjYKKyNkZWZpbmUgU0lJOTAyWF9U UElfQVVESU9fQ0ZHMwkweDI3CisjZGVmaW5lIFNJSTkwMlhfVFBJX0hEQ1BfUkVWCTB4MzAKKyNk ZWZpbmUgU0lJOTAyWF9UUElfSU5UX0VOQUJMRQkweDNDCisjZGVmaW5lIFNJSTkwMlhfVFBJX0lO VF9TVEFUVVMJMHgzRAorI2RlZmluZSBTSUk5MDJYX1RQSV9JTlRfUExVR19JTglCSVQoMikKKyNk ZWZpbmUgU0lJOTAyWF9HRU5FUkFMX1BVUlBPU0VfSU8wCTB4QkMKKyNkZWZpbmUgU0lJOTAyWF9H RU5FUkFMX1BVUlBPU0VfSU8xCTB4QkQKKyNkZWZpbmUgU0lJOTAyWF9HRU5FUkFMX1BVUlBPU0Vf SU8yCTB4QkUKKyNkZWZpbmUgU0lJOTAyWF9UUkFOU19NT0RFX0RJRkYJMHhDNworCitib29sIGdf ZW5hYmxlX2hkbWk7CisKK3N0cnVjdCBzaWk5MDJ4X2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayBkZXRfd29yazsKKwlzdHJ1Y3QgZmJfaW5m byAqZmJpOworfSAqc2lpOTAyeDsKKworI2RlZmluZSB0b19zaWk5MDJ4X2RhdGEoeCkgXAorCSgo c3RydWN0IHNpaTkwMnhfZGF0YSAqKXRvX2VuY29kZXJfc2xhdmUoeCktPnNsYXZlX3ByaXYpCisK K3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqc2lpOTAyeF90b19pMmMoc3RydWN0IHNpaTkwMnhf ZGF0YSAqc2lpOTAyeCkKK3sKKwlyZXR1cm4gc2lpOTAyeC0+Y2xpZW50OworfQorCisvKiBIVyBh Y2Nlc3MgZnVuY3Rpb25zICovCitzdGF0aWMgczMyIHNpaTkwMnhfd3JpdGUoY29uc3Qgc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSB1OCBjb21tYW5kLCB1OCB2YWx1ZSkKK3sKKwlyZXR1 cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQsIHZhbHVlKTsKK30K Kworc3RhdGljIHMzMiBzaWk5MDJ4X3JlYWQoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwgdTggY29tbWFuZCkKK3sKKwlpbnQgdmFsOworCisJdmFsID0gaTJjX3NtYnVzX3JlYWRfd29y ZF9kYXRhKGNsaWVudCwgY29tbWFuZCk7CisKKwlyZXR1cm4gdmFsICYgMHhmZjsKK30KKworc3Rh dGljIHZvaWQgc2lpOTAyeF9wb3dlcm9uKHZvaWQpCit7CisJLyogVHVybiBvbiBEVkkgb3IgSERN SSAqLworCXNpaTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZU19DT05UUk9M LCAweDAwKTsKK30KKworc3RhdGljIHZvaWQgc2lpOTAyeF9wb3dlcm9mZih2b2lkKQoreworCS8q IGRpc2FibGUgdG1kcyBiZWZvcmUgY2hhbmdpbmcgcmVzb2x1dGlvbiAqLworCXNpaTkwMnhfd3Jp dGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZU19DT05UUk9MLCAweDEwKTsKK30KKworCitz dGF0aWMgdm9pZCBzaWk5MDJ4X2NoaXBfaWQoc3RydWN0IHNpaTkwMnhfZGF0YSAqc2lpOTAyeCkK K3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2lpOTAyeF90b19pMmMoc2lpOTAyeCk7 CisJaW50IHZhbDsKKworCS8qIHJlYWQgZGV2aWNlIElEICovCisJdmFsID0gc2lpOTAyeF9yZWFk KGNsaWVudCwgU0lJOTAyWF9UUElfRkFNSUxZX0RFVl9JRCk7CisJcHJfaW5mbygiU2lpOTAyeDog cmVhZCBpZCA9IDB4JTAyWCIsIHZhbCk7CisJdmFsID0gc2lpOTAyeF9yZWFkKGNsaWVudCwgU0lJ OTAyWF9UUElfREVWX1JFVl9JRCk7CisJcHJfaW5mbygiLTB4JTAyWCIsIHZhbCk7CisJdmFsID0g c2lpOTAyeF9yZWFkKGNsaWVudCwgU0lJOTAyWF9UUElfUkVWX0xFVkVMX0lEKTsKKwlwcl9pbmZv KCItMHglMDJYIiwgdmFsKTsKKwl2YWwgPSBzaWk5MDJ4X3JlYWQoY2xpZW50LCBTSUk5MDJYX1RQ SV9IRENQX1JFVik7CisJcHJfaW5mbygiLTB4JTAyWFxuIiwgdmFsKTsKK30KKworc3RhdGljIGlu dCBzaWk5MDJ4X2luaXRpYWxpemUoc3RydWN0IHNpaTkwMnhfZGF0YSAqc2lpOTAyeCkKK3sKKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2lpOTAyeF90b19pMmMoc2lpOTAyeCk7CisJaW50 IHJldCwgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCA1OyBjbnQrKykgeworCQkvKiBTZXQg OTAyeCBpbiBoYXJkd2FyZSBUUEkgbW9kZSBvbiBhbmQganVtcCBvdXQgb2YgRDMgc3RhdGUgKi8K KwkJcmV0ID0gc2lpOTAyeF93cml0ZShjbGllbnQsIFNJSTkwMlhfVFJBTlNfTU9ERV9ESUZGLCAw eDAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwl9CisJaWYgKHJldCAhPSAwKQorCQlk ZXZfZXJyKCZjbGllbnQtPmRldiwgImNvdW5kIG5vdCBmaW5kIGRldmljZVxuIik7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaWk5MDJ4X2VuYWJsZV9zb3VyY2Uoc3RydWN0IHNp aTkwMnhfZGF0YSAqc2lpOTAyeCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2lp OTAyeF90b19pMmMoc2lpOTAyeCk7CisJaW50IHZhbDsKKworCXNpaTkwMnhfd3JpdGUoY2xpZW50 LCBTSUk5MDJYX0dFTkVSQUxfUFVSUE9TRV9JTzAsIDB4MDEpOworCXNpaTkwMnhfd3JpdGUoY2xp ZW50LCBTSUk5MDJYX0dFTkVSQUxfUFVSUE9TRV9JTzEsIDB4ODIpOworCXZhbCA9IHNpaTkwMnhf cmVhZChjbGllbnQsIFNJSTkwMlhfR0VORVJBTF9QVVJQT1NFX0lPMik7CisJdmFsIHw9IDB4MTsK KwlzaWk5MDJ4X3dyaXRlKGNsaWVudCwgU0lJOTAyWF9HRU5FUkFMX1BVUlBPU0VfSU8yLCB2YWwp OworfQorCitzdGF0aWMgdm9pZCBzaWk5MDJ4X3Bvd2VyX3VwX3R4KHN0cnVjdCBzaWk5MDJ4X2Rh dGEgKnNpaTkwMngpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNpaTkwMnhfdG9f aTJjKHNpaTkwMngpOworCWludCB2YWw7CisKKwl2YWwgPSBzaWk5MDJ4X3JlYWQoY2xpZW50LCBT SUk5MDJYX1BPV0VSX1NUQVRFKTsKKwl2YWwgJj0gfjB4MzsKKwlzaWk5MDJ4X3dyaXRlKGNsaWVu dCwgU0lJOTAyWF9QT1dFUl9TVEFURSwgdmFsKTsKK30KKworc3RhdGljIGludCBzaWk5MDJ4X2dl dF9lZGlkX3ByZWNvbmZpZyh2b2lkKQoreworCWludCBvbGQsIGRhdCwgcmV0ID0gMCwgY250ID0g MTAwOworCisJb2xkID0gc2lpOTAyeF9yZWFkKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9TWVNf Q09OVFJPTCk7CisKKwlzaWk5MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9TWVNf Q09OVFJPTCwKKwkJICAgICAgb2xkIHwgU0lJOTAyWF9TWVNfQ1RSX0REQ19SRVEpOworCWRvIHsK KwkJY250LS07CisJCW1zbGVlcCgyMCk7CisJCWRhdCA9IHNpaTkwMnhfcmVhZChzaWk5MDJ4LT5j bGllbnQsIFNJSTkwMlhfU1lTX0NPTlRST0wpOworCX0gd2hpbGUgKCghKGRhdCAmIDB4MikpICYm IGNudCk7CisKKwlpZiAoIWNudCkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwor CXNpaTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZU19DT05UUk9MLAorCQkg ICAgICBvbGQgfCBTSUk5MDJYX1NZU19DVFJfRERDX0JVU19BVkFJKTsKKworZG9uZToKKwlzaWk5 MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9TWVNfQ09OVFJPTCwgb2xkKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfaGRtaV9zZXR1cChjaGFy ICpzdHIpCit7CisJZ19lbmFibGVfaGRtaSA9IHRydWU7CisKKwlyZXR1cm4gMTsKK30KKworX19z ZXR1cCgiaGRtaSIsIGVuYWJsZV9oZG1pX3NldHVwKTsKKworc3RhdGljIGlycXJldHVybl90IHNp aTkwMnhfZGV0ZWN0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoZ19lbmFi bGVfaGRtaSkKKwkJZ19lbmFibGVfaGRtaSA9IGZhbHNlOworCisJcmV0dXJuIElSUV9IQU5ETEVE OworfQorCitzdGF0aWMgaW50IHNpaTkwMnhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19h ZGFwdGVyICphZGFwID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlpbnQg cmV0LCBlcnI7CisKKwlpZiAoIWdfZW5hYmxlX2hkbWkpCisJCXJldHVybiAtRVBFUk07CisKKwlp ZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXAsIEkyQ19GVU5DX1NNQlVTX0JZVEUpKSB7 CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkgZXJyb3Jc biIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzaWk5MDJ4ID0gZGV2bV9remFsbG9jKCZj bGllbnQtPmRldiwgc2l6ZW9mKCpzaWk5MDJ4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaWk5MDJ4 KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNpaTkwMngtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNf c2V0X2NsaWVudGRhdGEoY2xpZW50LCBzaWk5MDJ4KTsKKworCWVyciA9IHNpaTkwMnhfaW5pdGlh bGl6ZShzaWk5MDJ4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2lpOTAyeF9jaGlw X2lkKHNpaTkwMngpOworCXNpaTkwMnhfcG93ZXJfdXBfdHgoc2lpOTAyeCk7CisJc2lpOTAyeF9l bmFibGVfc291cmNlKHNpaTkwMngpOworCisJaWYgKHNpaTkwMnhfZ2V0X2VkaWRfcHJlY29uZmln KCkgPCAwKQorCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJSZWFkIGVkaWQgcHJlY29uZmlnIGZh aWxlZFxuIik7CisKKwlpZiAoY2xpZW50LT5pcnEpIHsKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2ly cSgmY2xpZW50LT5kZXYsIGNsaWVudC0+aXJxLAorCQkJCSAgICAgICBzaWk5MDJ4X2RldGVjdF9o YW5kbGVyLCAwLAorCQkJCSAgICAgICAiU0lJOTAyeF9kZXQiLCBzaWk5MDJ4KTsKKwkJaWYgKHJl dCA8IDApCisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkJICJjb3VuZCBub3QgcmVxdWVz dCBkZXQgaXJxICVkXG4iLAorCQkJCSBjbGllbnQtPmlycSk7CisJCWVsc2UgeworCQkJLyplbmFi bGUgY2FibGUgaG90IHBsdWcgaXJxKi8KKwkJCXNpaTkwMnhfd3JpdGUoY2xpZW50LCBTSUk5MDJY X1RQSV9JTlRfRU5BQkxFLCAweDAxKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHNpaTkwMnhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc2lp OTAyeF9wb3dlcm9mZigpOworCXJldHVybiAwOworfQorCisvKiBEUk0gZW5jb2RlciBmdW5jdGlv bnMgKi8KKworc3RhdGljIHZvaWQKK3NpaTkwMnhfZW5jb2Rlcl9kcG1zKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19P TikKKwkJc2lpOTAyeF9wb3dlcm9uKCk7CisJZWxzZQorCQlzaWk5MDJ4X3Bvd2Vyb2ZmKCk7Cit9 CisKKworc3RhdGljIGludAorc2lpOTAyeF9lbmNvZGVyX21vZGVfdmFsaWQoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAorCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NpaTkwMnhfZW5jb2Rlcl9tb2RlX3NldChz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0 cnVjdCB2aWRlb21vZGUgdm07CisJdTE2IGRhdGFbNF07CisJdTMyIHJlZnJlc2g7CisJdTggKnRt cDsKKwlpbnQgaTsKKworCS8qIFBvd2VyIHVwICovCisJc2lpOTAyeF9wb3dlcl91cF90eChzaWk5 MDJ4KTsKKworCWRybV9kaXNwbGF5X21vZGVfdG9fdmlkZW9tb2RlKG1vZGUsICZ2bSk7CisJZGF0 YVswXSA9IFBJQ09TMktIWih2bS5waXhlbGNsb2NrKSAvIDEwOworCWRhdGFbMl0gPSB2bS5oc3lu Y19sZW4gKyB2bS5oYmFja19wb3JjaCArCisJCSAgdm0uaGFjdGl2ZSArIHZtLmhmcm9udF9wb3Jj aDsKKwlkYXRhWzNdID0gdm0udnN5bmNfbGVuICsgdm0udmZyb250X3BvcmNoICsKKwkJICB2bS52 YWN0aXZlICsgdm0udmJhY2tfcG9yY2g7CisJcmVmcmVzaCA9IGRhdGFbMl0gKiBkYXRhWzNdOwor CXJlZnJlc2ggPSAoUElDT1MyS0haKHZtLnBpeGVsY2xvY2spICogMTAwMCkgLyByZWZyZXNoOwor CWRhdGFbMV0gPSByZWZyZXNoICogMTAwOworCisJdG1wID0gKHU4ICopZGF0YTsKKwlmb3IgKGkg PSAwOyBpIDwgODsgaSsrKQorCQlzaWk5MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgaSwgdG1w W2ldKTsKKworCS8qIGlucHV0IGJ1cy9waXhlbDogZnVsbCBwaXhlbCB3aWRlICgyNGJpdCksIHJp c2luZyBlZGdlICovCisJc2lpOTAyeF93cml0ZShzaWk5MDJ4LT5jbGllbnQsIFNJSTkwMlhfSU5Q VVRfQlVTX0ZNVCwgMHg3MCk7CisJLyogU2V0IGlucHV0IGZvcm1hdCB0byBSR0IgKi8KKwlzaWk5 MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9UUElfQVZJX0lOUFVUX0ZNVCwgMHgw MCk7CisJLyogc2V0IG91dHB1dCBmb3JtYXQgdG8gUkdCICovCisJc2lpOTAyeF93cml0ZShzaWk5 MDJ4LT5jbGllbnQsIFNJSTkwMlhfVFBJX0FWSV9PVVRQVVRfRk1ULCAweDAwKTsKKwkvKiBhdWRp byBzZXR1cCAqLworCXNpaTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1RQSV9B VURJT19DRkcxLCAweDAwKTsKKwlzaWk5MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAy WF9UUElfQVVESU9fQ0ZHMiwgMHg0MCk7CisJc2lpOTAyeF93cml0ZShzaWk5MDJ4LT5jbGllbnQs IFNJSTkwMlhfVFBJX0FVRElPX0NGRzMsIDB4MDApOworfQorCitzdHJ1Y3QgZWRpZCAqc2lpOTAy eF9kcm1fZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgIHN0 cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgb2xkLCBkYXQsIGNudCA9IDEwMDsK KwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKworCW9sZCA9IHNpaTkwMnhfcmVhZChzaWk5MDJ4LT5jbGll bnQsIFNJSTkwMlhfU1lTX0NPTlRST0wpOworCisJc2lpOTAyeF93cml0ZShzaWk5MDJ4LT5jbGll bnQsIFNJSTkwMlhfU1lTX0NPTlRST0wsCisJCSAgICAgIG9sZCB8IFNJSTkwMlhfU1lTX0NUUl9E RENfUkVRKTsKKwlkbyB7CisJCWNudC0tOworCQltc2xlZXAoMjApOworCQlkYXQgPSBzaWk5MDJ4 X3JlYWQoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZU19DT05UUk9MKTsKKwl9IHdoaWxlICgo IShkYXQgJiAweDIpKSAmJiBjbnQpOworCisJaWYgKCFjbnQpIHsKKwkJZWRpZCA9IE5VTEw7CisJ CWdvdG8gZG9uZTsKKwl9CisKKwlzaWk5MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAy WF9TWVNfQ09OVFJPTCwKKwkJICAgICAgb2xkIHwgU0lJOTAyWF9TWVNfQ1RSX0REQ19CVVNfQVZB SSk7CisKKwkvKiBlZGlkIHJlYWRpbmcgKi8KKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3Rv ciwgYWRhcHRlcik7CisKKwljbnQgPSAxMDA7CisJZG8geworCQljbnQtLTsKKwkJc2lpOTAyeF93 cml0ZShzaWk5MDJ4LT5jbGllbnQsIFNJSTkwMlhfU1lTX0NPTlRST0wsCisJCQkgICAgICBvbGQg JiB+U0lJOTAyWF9TWVNfQ1RSX0REQ19CVVNfQVZBSSk7CisJCW1zbGVlcCgyMCk7CisJCWRhdCA9 IHNpaTkwMnhfcmVhZChzaWk5MDJ4LT5jbGllbnQsIFNJSTkwMlhfU1lTX0NPTlRST0wpOworCX0g d2hpbGUgKChkYXQgJiAweDYpICYmIGNudCk7CisKKwlpZiAoIWNudCkKKwkJZWRpZCA9IE5VTEw7 CisKK2RvbmU6CisJc2lpOTAyeF93cml0ZShzaWk5MDJ4LT5jbGllbnQsIFNJSTkwMlhfU1lTX0NP TlRST0wsIG9sZCk7CisJcmV0dXJuIGVkaWQ7Cit9CisKK3N0YXRpYyBpbnQKK3NpaTkwMnhfZW5j b2Rlcl9nZXRfbW9kZXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJIHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNv bm5lY3Rvci0+ZGV2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IHRvX2kyY19hZGFwdGVy KHNpaTkwMngtPmNsaWVudC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJaW50IHJldDsKKworCWVkaWQgPSBzaWk5MDJ4 X2RybV9nZXRfZWRpZChjb25uZWN0b3IsIGFkYXApOworCWlmIChlZGlkKSB7CisJCWRybV9tb2Rl X2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOworCQlyZXQg PSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKKwkJa2ZyZWUoZWRpZCk7CisJ fSBlbHNlIHsKKwkJZGV2X2RiZyhkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZWRpZFxuIik7CisJ fQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMs IGhlYWQpIHsKKwkJaWYgKG1vZGUtPmhkaXNwbGF5ID09IDEwMjQgfHwgbW9kZS0+dmRpc3BsYXkg PT0gNzY4KQorCQkJbW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKwkJZWxz ZQorCQkJbW9kZS0+dHlwZSAmPSB+RFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZV9mdW5jcyBzaWk5 MDJ4X2VuY29kZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBzaWk5MDJ4X2VuY29kZXJfZHBtcywKKwku bW9kZV92YWxpZCA9IHNpaTkwMnhfZW5jb2Rlcl9tb2RlX3ZhbGlkLAorCS5tb2RlX3NldCA9IHNp aTkwMnhfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZ2V0X21vZGVzID0gc2lpOTAyeF9lbmNvZGVyX2dl dF9tb2RlcywKK307CitzdGF0aWMgaW50CitzaWk5MDJ4X2VuY29kZXJfaW5pdChzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50LAorCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0 cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZSAqZW5jb2RlcikKK3sKKworCWVuY29kZXItPnNsYXZlX2Z1 bmNzID0gJnNpaTkwMnhfZW5jb2Rlcl9mdW5jczsKKworCXJldHVybiAwOworfQorc3RhdGljIGNv bnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNpaTkwMnhfaWRbXSA9IHsKKwl7ICJzaWk5MDJ4Iiwg MCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzaWk5MDJ4X2lkKTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2lpOTAyeF9kdF9pZHNbXSA9IHsKKwl7 IC5jb21wYXRpYmxlID0gInNpbCxzaWk5MDIyYSIsIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9 OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2lpOTAyeF9kdF9pZHMpOworCitzdGF0aWMgc3Ry dWN0IGRybV9pMmNfZW5jb2Rlcl9kcml2ZXIgc2lpOTAyeF9kcml2ZXIgPSB7CisJLmkyY19kcml2 ZXIgPSB7CisJCS5wcm9iZSA9IHNpaTkwMnhfcHJvYmUsCisJCS5yZW1vdmUgPSBzaWk5MDJ4X3Jl bW92ZSwKKwkJLmRyaXZlciA9IHsKKwkJCS5uYW1lID0gInNpaTkwMngiLAorCQkJLm93bmVyID0g VEhJU19NT0RVTEUsCisJCQkub2ZfbWF0Y2hfdGFibGUgPSBzaWk5MDJ4X2R0X2lkcywKKwkJfSwK KwkJLmlkX3RhYmxlID0gc2lpOTAyeF9pZCwKKwl9LAorCS5lbmNvZGVyX2luaXQgPSBzaWk5MDJ4 X2VuY29kZXJfaW5pdCwKK307CisKKy8qIE1vZHVsZSBpbml0aWFsaXphdGlvbiAqLworCitzdGF0 aWMgaW50IF9faW5pdCBzaWk5MDJ4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJtX2kyY19lbmNv ZGVyX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCAmc2lpOTAyeF9kcml2ZXIpOworfQorCitzdGF0aWMg dm9pZCBfX2V4aXQgc2lpOTAyeF9leGl0KHZvaWQpCit7CisJZHJtX2kyY19lbmNvZGVyX3VucmVn aXN0ZXIoJnNpaTkwMnhfZHJpdmVyKTsKK30KKworCitNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUg U2VtaWNvbmR1Y3RvciwgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTSUk5MDJ4IERWSS9I RE1JIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKK21vZHVsZV9pbml0KHNp aTkwMnhfaW5pdCk7Cittb2R1bGVfZXhpdChzaWk5MDJ4X2V4aXQpOwotLSAKMi4xLjAuMjcuZzk2 ZGIzMjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=