From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fraxinus.osuosl.org (fraxinus.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id 0BD0B1C201D for ; Mon, 2 Mar 2015 10:55:42 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 06A7DA2178 for ; Mon, 2 Mar 2015 10:55:42 +0000 (UTC) Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3idJUjm8N63T for ; Mon, 2 Mar 2015 10:55:40 +0000 (UTC) Received: from asav21.altibox.net (asav21.altibox.net [109.247.116.8]) by fraxinus.osuosl.org (Postfix) with ESMTPS id CD7B4A213C for ; Mon, 2 Mar 2015 10:55:39 +0000 (UTC) From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC 3/7] staging: fbtft: add lcd controller abstraction Date: Mon, 2 Mar 2015 11:54:25 +0100 Message-Id: <1425293669-15754-4-git-send-email-noralf@tronnes.org> In-Reply-To: <1425293669-15754-1-git-send-email-noralf@tronnes.org> References: <1425293669-15754-1-git-send-email-noralf@tronnes.org> MIME-Version: 1.0 List-Id: Linux Driver Project Developer List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: thomas.petazzoni@free-electrons.com Cc: gregkh@linuxfoundation.org, driverdev-devel@linuxdriverproject.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= QWRkIGFic3RyYWN0aW9uIGZvciBNSVBJIERDUy9EQkkgbGlrZSBMQ0QgY29udHJvbGxlcnMuCgpT aWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KLS0tCiBk cml2ZXJzL3N0YWdpbmcvZmJ0ZnQvS2NvbmZpZyAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9z dGFnaW5nL2ZidGZ0L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvc3RhZ2luZy9m YnRmdC9sY2RjdHJsL0tjb25maWcgICB8ICAgMyArCiBkcml2ZXJzL3N0YWdpbmcvZmJ0ZnQvbGNk Y3RybC9NYWtlZmlsZSAgfCAgIDEgKwogZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2xjZGN0cmwvbGNk Y3RybC5jIHwgMjA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL3N0 YWdpbmcvZmJ0ZnQvbGNkY3RybC9sY2RjdHJsLmggfCAxMDQgKysrKysrKysrKysrKysrKwogNiBm aWxlcyBjaGFuZ2VkLCAzMTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy9mYnRmdC9sY2RjdHJsL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3N0YWdpbmcvZmJ0ZnQvbGNkY3RybC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy9mYnRmdC9sY2RjdHJsL2xjZGN0cmwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy9mYnRmdC9sY2RjdHJsL2xjZGN0cmwuaAoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy9mYnRmdC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L0tjb25m aWcKaW5kZXggMmQxNDkwZi4uMGFjMWI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Zi dGZ0L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L0tjb25maWcKQEAgLTE2OCw0 ICsxNjgsNSBAQCBjb25maWcgRkJfVEZUX0ZCVEZUX0RFVklDRQogCXRyaXN0YXRlICJNb2R1bGUg dG8gZm9yIGFkZGluZyBGQlRGVCBkZXZpY2VzIgogCWRlcGVuZHMgb24gRkJfVEZUCiAKK3NvdXJj ZSAiZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2xjZGN0cmwvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVy cy9zdGFnaW5nL2ZidGZ0L2xjZHJlZy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL2ZidGZ0L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L01ha2VmaWxlCmluZGV4 IDI3Njk0MjEuLjY5ZjdjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvZmJ0ZnQvTWFrZWZpbGUKQEAgLTMsNiArMyw3IEBA IG9iai0kKENPTkZJR19GQl9URlQpICAgICAgICAgICAgICs9IGZidGZ0Lm8KIGZidGZ0LXkgICAg ICAgICAgICAgICAgICAgICAgICAgICs9IGZidGZ0LWNvcmUubyBmYnRmdC1zeXNmcy5vIGZidGZ0 LWJ1cy5vIGZidGZ0LWlvLm8KIAogb2JqLSQoQ09ORklHX0xDRFJFRykgICAgICAgICAgICAgKz0g bGNkcmVnLworb2JqLSQoQ09ORklHX0xDRENUUkwpICAgICAgICAgICAgKz0gbGNkY3RybC8KIAog IyBDb250cm9sbGVyIGRyaXZlcnMKIG9iai0kKENPTkZJR19GQl9URlRfQUdNMTI2NEtfRkwpICs9 IGZiX2FnbTEyNjRrLWZsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9sY2Rj dHJsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZmJ0ZnQvbGNkY3RybC9LY29uZmlnCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNzI4NDcKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL3N0YWdpbmcvZmJ0ZnQvbGNkY3RybC9LY29uZmlnCkBAIC0wLDAgKzEsMyBAQAor Y29uZmlnIExDRENUUkwKKwl0cmlzdGF0ZQorCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL2ZidGZ0L2xjZGN0cmwvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZmJ0ZnQv bGNkY3RybC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmU0 ZThjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2xjZGN0cmwvTWFr ZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX0xDRENUUkwpICAgICAgICAgICAgICAg ICAgKz0gbGNkY3RybC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZmJ0ZnQvbGNkY3Ry bC9sY2RjdHJsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZmJ0ZnQvbGNkY3RybC9sY2RjdHJsLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4ZmM2YgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9sY2RjdHJsL2xjZGN0cmwuYwpAQCAtMCwwICsxLDIw NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBOb3JhbGYgVHLDuG5uZXMKKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1l ci5oPgorCisjaW5jbHVkZSAibGNkY3RybC5oIgorCit2b2lkIGxjZGN0cmxfb2ZfZ2V0X2Zvcm1h dChzdHJ1Y3QgbGNkY3RybCAqY3RybCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHJsLT5s Y2RyZWctPmRldjsKKwljb25zdCBjaGFyICpmbXRfc3RyOworCWludCByZXQ7CisKKwlpZiAoIWN0 cmwtPnNldF9mb3JtYXQpCisJCXJldHVybjsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3Ry aW5nKGRldi0+b2Zfbm9kZSwgImZvcm1hdCIsICZmbXRfc3RyKTsKKwlpZiAocmV0KQorCQlyZXR1 cm47CisKKwlpZiAoIXN0cmNtcChmbXRfc3RyLCAibW9ub2Nocm9tZSIpKQorCQljdHJsLT5mb3Jt YXQgPSBMQ0RDVFJMX0ZPUk1BVF9NT05PMTA7CisJZWxzZSBpZiAoIXN0cmNtcChmbXRfc3RyLCAi cmdiNTY1IikpCisJCWN0cmwtPmZvcm1hdCA9IExDRENUUkxfRk9STUFUX1JHQjU2NTsKKwllbHNl IGlmICghc3RyY21wKGZtdF9zdHIsICJyZ2I4ODgiKSkKKwkJY3RybC0+Zm9ybWF0ID0gTENEQ1RS TF9GT1JNQVRfUkdCODg4OworCWVsc2UgaWYgKCFzdHJjbXAoZm10X3N0ciwgInhyZ2I4ODg4Iikp CisJCWN0cmwtPmZvcm1hdCA9IExDRENUUkxfRk9STUFUX1hSR0I4ODg4OworCWVsc2UKKwkJZGV2 X2VycihkZXYsICJJbnZhbGlkIGZvcm1hdDogJXMuIFVzaW5nIGRlZmF1bHQuXG4iLCBmbXRfc3Ry KTsKK30KK0VYUE9SVF9TWU1CT0wobGNkY3RybF9vZl9nZXRfZm9ybWF0KTsKKwordm9pZCBsY2Rj dHJsX29mX2dldF9yb3RhdGlvbihzdHJ1Y3QgbGNkY3RybCAqY3RybCkKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBjdHJsLT5sY2RyZWctPmRldjsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlp ZiAoIWN0cmwtPnJvdGF0ZSkKKwkJcmV0dXJuOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIoZGV2LT5vZl9ub2RlLCAicm90YXRpb24iLCAmdmFsKTsKKwlpZiAocmV0KSB7CisJCWlmIChy ZXQgIT0gLUVJTlZBTCkKKwkJCWRldl9lcnIoZGV2LCAiZXJyb3IgcmVhZGluZyBwcm9wZXJ0eSAn cm90YXRpb24nOiAlaVxuIiwKKwkJCQlyZXQpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoICh2 YWwpIHsKKwljYXNlIDA6CisJY2FzZSA5MDoKKwljYXNlIDE4MDoKKwljYXNlIDI3MDoKKwkJY3Ry bC0+cm90YXRpb24gPSB2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAi aWxsZWdhbCByb3RhdGlvbiB2YWx1ZTogJXVcbiIsIHZhbCk7CisJCWJyZWFrOworCX0KK30KK0VY UE9SVF9TWU1CT0wobGNkY3RybF9vZl9nZXRfcm90YXRpb24pOworCitpbnQgbGNkY3RybF9lbmFi bGUoc3RydWN0IGxjZGN0cmwgKmN0cmwsIHZvaWQgKnZpZGVvbWVtKQoreworCXN0cnVjdCBsY2Rj dHJsX3VwZGF0ZSB1cGRhdGUgPSB7CisJCS5iYXNlID0gdmlkZW9tZW0sCisJCS55cyA9IDAsCisJ CS55ZSA9IGxjZGN0cmxfeXJlcyhjdHJsKSAtIDEsCisJfTsKKwlpbnQgcmV0OworCisJaWYgKFdB Uk5fT05fT05DRSghY3RybC0+dXBkYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3Ry bC0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJbGNkcmVnX2xvY2soY3RybC0+bGNkcmVn KTsKKworCWlmIChjdHJsLT5wb3dlcl9zdXBwbHkpIHsKKwkJcmV0ID0gcmVndWxhdG9yX2VuYWJs ZShjdHJsLT5wb3dlcl9zdXBwbHkpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGN0cmwtPmxj ZHJlZy0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZW5hYmxlIHBvd2VyIHN1cHBseTogJWRcbiIsIHJl dCk7CisJCQlnb3RvIGVuYWJsZV9mYWlsZWQ7CisJCX0KKwl9CisJaWYgKGN0cmwtPnBvd2Vyb24p IHsKKwkJcmV0ID0gY3RybC0+cG93ZXJvbihjdHJsKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZW5h YmxlX2ZhaWxlZDsKKwl9CisKKwlpZiAoY3RybC0+c2V0X2Zvcm1hdCkgeworCQlyZXQgPSBjdHJs LT5zZXRfZm9ybWF0KGN0cmwpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGN0cmwtPmxjZHJl Zy0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gc2V0IGZvcm1hdCAnJWQnXG4iLCBjdHJsLT5mb3JtYXQp OworCQkJZ290byBlbmFibGVfZmFpbGVkOworCQl9CisJfQorCisJaWYgKGN0cmwtPnJvdGF0ZSkg eworCQlyZXQgPSBfbGNkY3RybF9yb3RhdGUoY3RybCwgY3RybC0+cm90YXRpb24pOworCQlpZiAo cmV0KQorCQkJZ290byBlbmFibGVfZmFpbGVkOworCX0KKworCXJldCA9IGN0cmwtPnVwZGF0ZShj dHJsLCAmdXBkYXRlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVuYWJsZV9mYWlsZWQ7CisKKwlpZiAo Y3RybC0+YmxhbmspIHsKKwkJcmV0ID0gY3RybC0+YmxhbmsoY3RybCwgZmFsc2UpOworCQlpZiAo cmV0KQorCQkJZ290byBlbmFibGVfZmFpbGVkOworCX0KKworCWN0cmwtPmluaXRpYWxpemVkID0g dHJ1ZTsKKworZW5hYmxlX2ZhaWxlZDoKKwlsY2RyZWdfdW5sb2NrKGN0cmwtPmxjZHJlZyk7CisK KwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChsY2RjdHJsX2VuYWJsZSk7CisKK3ZvaWQg bGNkY3RybF9kaXNhYmxlKHN0cnVjdCBsY2RjdHJsICpjdHJsKQoreworCWxjZHJlZ19sb2NrKGN0 cmwtPmxjZHJlZyk7CisKKwlpZiAoY3RybC0+YmxhbmspCisJCWN0cmwtPmJsYW5rKGN0cmwsIHRy dWUpOworCWlmIChjdHJsLT5wb3dlcm9mZikKKwkJY3RybC0+cG93ZXJvZmYoY3RybCk7CisJaWYg KGN0cmwtPnBvd2VyX3N1cHBseSkKKwkJcmVndWxhdG9yX2Rpc2FibGUoY3RybC0+cG93ZXJfc3Vw cGx5KTsKKwljdHJsLT5pbml0aWFsaXplZCA9IGZhbHNlOworCisJbGNkcmVnX3VubG9jayhjdHJs LT5sY2RyZWcpOworfQorRVhQT1JUX1NZTUJPTChsY2RjdHJsX2Rpc2FibGUpOworCitpbnQgbGNk Y3RybF91cGRhdGUoc3RydWN0IGxjZGN0cmwgKmN0cmwsIHN0cnVjdCBsY2RjdHJsX3VwZGF0ZSAq dXBkYXRlKQoreworCXUzMiB5cmVzID0gbGNkY3RybF95cmVzKGN0cmwpOworCWludCByZXQ7CisK KwlpZiAoIWN0cmwtPmluaXRpYWxpemVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxjZHJlZ19s b2NrKGN0cmwtPmxjZHJlZyk7CisKKwlpZiAodXBkYXRlLT55cyA+IHVwZGF0ZS0+eWUpIHsKKwkJ dXBkYXRlLT55cyA9IDA7CisJCXVwZGF0ZS0+eWUgPSB5cmVzIC0gMTsKKwl9CisJaWYgKHVwZGF0 ZS0+eWUgPj0geXJlcykKKwkJdXBkYXRlLT55ZSA9IHlyZXMgLSAxOworCisJcmV0ID0gY3RybC0+ dXBkYXRlKGN0cmwsIHVwZGF0ZSk7CisKKwlsY2RyZWdfdW5sb2NrKGN0cmwtPmxjZHJlZyk7CisK KwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChsY2RjdHJsX3VwZGF0ZSk7CisKKy8qKgor ICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBsb2NraW5nLgorICovCitpbnQgX2xjZGN0cmxf cm90YXRlKHN0cnVjdCBsY2RjdHJsICpjdHJsLCB1MzIgcm90YXRpb24pCit7CisJaW50IHJldDsK KworCWlmICghY3RybC0+cm90YXRlKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXN3aXRjaCAocm90 YXRpb24pIHsKKwljYXNlIDA6CisJY2FzZSA5MDoKKwljYXNlIDE4MDoKKwljYXNlIDI3MDoKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gY3RybC0+ cm90YXRlKGN0cmwsIHJvdGF0aW9uKTsKKwlpZiAoIXJldCkKKwkJY3RybC0+cm90YXRpb24gPSBy b3RhdGlvbjsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKF9sY2RjdHJsX3JvdGF0 ZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy9mYnRmdC9sY2RjdHJsL2xjZGN0cmwuaCBiL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9sY2RjdHJs L2xjZGN0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRhNjZkCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2xjZGN0cmwvbGNkY3RybC5o CkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IE5vcmFsZiBUcsO4 bm5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAq IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0xJ TlVYX0xDRENUUkxfSAorI2RlZmluZSBfX0xJTlVYX0xDRENUUkxfSAorCisjaW5jbHVkZSAiLi4v bGNkcmVnL2xjZHJlZy5oIgorCitlbnVtIGxjZGN0cmxfZm9ybWF0IHsKKwlMQ0RDVFJMX0ZPUk1B VF9OT05FID0gMCwKKwlMQ0RDVFJMX0ZPUk1BVF9NT05PMTAsCisJTENEQ1RSTF9GT1JNQVRfUkdC NTY1LAorCUxDRENUUkxfRk9STUFUX1JHQjg4OCwKKwlMQ0RDVFJMX0ZPUk1BVF9YUkdCODg4OCwK K307CisKKy8qKgorICogRGVzY3JpcHRpb24gb2YgYSBkaXNwbGF5IHVwZGF0ZQorICoKKyAqIEBi YXNlOiBCYXNlIGFkZHJlc3Mgb2YgdmlkZW8gbWVtb3J5CisgKiBAeXM6IEhvcml6b250YWwgbGlu ZSB0byBzdGFydCB0aGUgdHJhbnNmZXIgZnJvbSAoemVybyBiYXNlZCkKKyAqIEB5ZTogTGFzdCBs aW5lIHRvIHRyYW5zZmVyIChpbmNsdXNpdmUpCisgKi8KK3N0cnVjdCBsY2RjdHJsX3VwZGF0ZSB7 CisJdm9pZCAqYmFzZTsKKwl1MzIgeXM7CisJdTMyIHllOworfTsKKworLyoqCisgKiBEZXNjcmlw dGlvbiBvZiBMQ0QgY29udHJvbGxlcgorICoKKyAqIEB3aWR0aDogV2lkdGggb2YgZGlzcGxheSBp biBwaXhlbHMKKyAqIEBoZWlnaHQ6IEhlaWdodCBvZiBkaXNwbGF5IGluIHBpeGVscworICogQHJv dGF0aW9uOiBEaXNwbGF5IHJvdGF0aW9uIENvdW50ZXIgQ2xvY2t3aXNlICgwLDkwLDE4MCwyNzAp CisgKiBAZm9ybWF0OiBWaWRlb21lbW9yeSBmb3JtYXQKKyAqIEBpbml0aWFsaXplZDogQ29udHJv bGxlciBpcyBpbml0aWFsaXplZAorICogQHBvd2Vyb246IFBvd2VyIG9uIG9wZXJhdGlvbiAob3B0 aW9uYWwpCisgKiBAcG93ZXJvZmY6IFBvd2VyIG9mZiBvcGVyYXRpb24gKG9wdGlvbmFsKQorICog QHVwZGF0ZTogVXBkYXRlcyB0aGUgY29udHJvbGxlcnMgdmlkZW8gbWVtb3J5CisgKiBAcm90YXRl OiBSb3RhdGVzIHRoZSBkaXNwbGF5IChvcHRpb25hbCkKKyAqIEBzZXRfZm9ybWF0OiBTZXRzIGZv cm1hdCBhY2NvcmRpbmcgdG8gQGZvcm1hdCAob3B0aW9uYWwpCisgKiBAYmxhbms6IEJsYW5rcyBk aXNwbGF5IChvcHRpb25hbCkKKyAqIEBsY2RyZWc6IExDRCByZWdpc3RlciBvcGVyYXRlZCB1cG9u CisgKiBAZHJpdmVyX3ByaXZhdGU6IERyaXZlciBkYXRhIChub3QgdG91Y2hlZCBieSBjb3JlKQor ICogQHBvd2VyX3N1cHBseTogUmVndWxhdG9yIGZvciBwb3dlciBzdXBwbHkKKyAqLworc3RydWN0 IGxjZGN0cmwgeworCXUzMiB3aWR0aDsKKwl1MzIgaGVpZ2h0OworCXUzMiByb3RhdGlvbjsKKwll bnVtIGxjZGN0cmxfZm9ybWF0IGZvcm1hdDsKKwlib29sIGluaXRpYWxpemVkOworCisJaW50ICgq cG93ZXJvbikoc3RydWN0IGxjZGN0cmwgKmN0cmwpOworCXZvaWQgKCpwb3dlcm9mZikoc3RydWN0 IGxjZGN0cmwgKmN0cmwpOworCWludCAoKnVwZGF0ZSkoc3RydWN0IGxjZGN0cmwgKmN0cmwsIHN0 cnVjdCBsY2RjdHJsX3VwZGF0ZSAqdXBkYXRlKTsKKwlpbnQgKCpyb3RhdGUpKHN0cnVjdCBsY2Rj dHJsICpjdHJsLCB1MzIgcm90YXRpb24pOworCWludCAoKnNldF9mb3JtYXQpKHN0cnVjdCBsY2Rj dHJsICpjdHJsKTsKKwlpbnQgKCpibGFuaykoc3RydWN0IGxjZGN0cmwgKmN0cmwsIGJvb2wgYmxh bmspOworCisJc3RydWN0IGxjZHJlZyAqbGNkcmVnOworCXN0cnVjdCByZWd1bGF0b3IgKnBvd2Vy X3N1cHBseTsKKwl2b2lkICpkcml2ZXJfcHJpdmF0ZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdTMy IGxjZGN0cmxfeHJlcyhzdHJ1Y3QgbGNkY3RybCAqY3RybCkKK3sKKwlyZXR1cm4gKGN0cmwtPnJv dGF0aW9uICUgMTgwKSA/IGN0cmwtPmhlaWdodCA6IGN0cmwtPndpZHRoOworfQorCitzdGF0aWMg aW5saW5lIHUzMiBsY2RjdHJsX3lyZXMoc3RydWN0IGxjZGN0cmwgKmN0cmwpCit7CisJcmV0dXJu IChjdHJsLT5yb3RhdGlvbiAlIDE4MCkgPyBjdHJsLT53aWR0aCA6IGN0cmwtPmhlaWdodDsKK30K Kworc3RhdGljIGlubGluZSBpbnQgbGNkY3RybF9ibGFuayhzdHJ1Y3QgbGNkY3RybCAqY3RybCwg Ym9vbCBibGFuaykKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjdHJsLT5ibGFuaykKKwkJcmV0dXJu IC1FTk9TWVM7CisKKwlsY2RyZWdfbG9jayhjdHJsLT5sY2RyZWcpOworCXJldCA9IGN0cmwtPmJs YW5rKGN0cmwsIGJsYW5rKTsKKwlsY2RyZWdfdW5sb2NrKGN0cmwtPmxjZHJlZyk7CisKKwlyZXR1 cm4gcmV0OworfQorCitleHRlcm4gdm9pZCBsY2RjdHJsX29mX2dldF9mb3JtYXQoc3RydWN0IGxj ZGN0cmwgKmN0cmwpOworZXh0ZXJuIHZvaWQgbGNkY3RybF9vZl9nZXRfcm90YXRpb24oc3RydWN0 IGxjZGN0cmwgKmN0cmwpOworZXh0ZXJuIGludCBsY2RjdHJsX2VuYWJsZShzdHJ1Y3QgbGNkY3Ry bCAqY3RybCwgdm9pZCAqdmlkZW9tZW0pOworZXh0ZXJuIHZvaWQgbGNkY3RybF9kaXNhYmxlKHN0 cnVjdCBsY2RjdHJsICpjdHJsKTsKK2V4dGVybiBpbnQgbGNkY3RybF91cGRhdGUoc3RydWN0IGxj ZGN0cmwgKmN0cmwsIHN0cnVjdCBsY2RjdHJsX3VwZGF0ZSAqdXBkYXRlKTsKK2V4dGVybiBpbnQg X2xjZGN0cmxfcm90YXRlKHN0cnVjdCBsY2RjdHJsICpjdHJsLCB1MzIgcm90YXRlKTsKKworI2Vu ZGlmIC8qIF9fTElOVVhfTENEQ1RSTF9IICovCi0tIAoyLjIuMgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZGV2ZWwgbWFpbGluZyBsaXN0CmRldmVsQGxp bnV4ZHJpdmVycHJvamVjdC5vcmcKaHR0cDovL2RyaXZlcmRldi5saW51eGRyaXZlcnByb2plY3Qu b3JnL21haWxtYW4vbGlzdGluZm8vZHJpdmVyZGV2LWRldmVsCg==