From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomi Valkeinen Subject: [PATCH 14/36] drm: omapdrm: Reorder CRTC functions Date: Tue, 24 Mar 2015 14:15:31 +0200 Message-ID: <1427199353-4412-15-git-send-email-tomi.valkeinen@ti.com> References: <1427199353-4412-1-git-send-email-tomi.valkeinen@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bear.ext.ti.com (bear.ext.ti.com [192.94.94.41]) by gabe.freedesktop.org (Postfix) with ESMTP id E8D666E6C4 for ; Tue, 24 Mar 2015 05:16:32 -0700 (PDT) In-Reply-To: <1427199353-4412-1-git-send-email-tomi.valkeinen@ti.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Laurent Pinchart List-Id: dri-devel@lists.freedesktop.org RnJvbTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29t PgoKVGhlIG5leHQgY29tbWl0IHdpbGwgbmVlZCBmdW5jdGlvbnMgdG8gYmUgcmVvcmRlcmVkLiBE byBpdCBzZXBhcmF0ZWx5IHRvCmhlbHAgcmV2aWV3LgoKVGhpcyBvbmx5IG1vdmVzIGZ1bmN0aW9u cyB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdGhlIGNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBMYXVyZW50 IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL29tYXBkcm0vb21hcF9jcnRjLmMgfCAzOTYgKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjA2IGluc2VydGlvbnMoKyksIDE5MCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2Ny dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfY3J0Yy5jCmluZGV4IDEwNWVhYjdj YjgzMC4uNWNkMTBjZjU3OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9v bWFwX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2NydGMuYwpAQCAt NzQsNiArNzQsMTAgQEAgc3RydWN0IG9tYXBfY3J0YyB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHBh Z2VfZmxpcF93b3JrOwogfTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEhlbHBlciBG dW5jdGlvbnMKKyAqLworCiB1aW50MzJfdCBwaXBlMnZibChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CiB7CiAJc3RydWN0IG9tYXBfY3J0YyAqb21hcF9jcnRjID0gdG9fb21hcF9jcnRjKGNydGMpOwpA QCAtODEsNiArODUsMjIgQEAgdWludDMyX3QgcGlwZTJ2Ymwoc3RydWN0IGRybV9jcnRjICpjcnRj KQogCXJldHVybiBkaXNwY19tZ3JfZ2V0X3ZzeW5jX2lycShvbWFwX2NydGMtPmNoYW5uZWwpOwog fQogCitjb25zdCBzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICpvbWFwX2NydGNfdGltaW5ncyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG9tYXBfY3J0YyAqb21hcF9jcnRjID0g dG9fb21hcF9jcnRjKGNydGMpOworCXJldHVybiAmb21hcF9jcnRjLT50aW1pbmdzOworfQorCitl bnVtIG9tYXBfY2hhbm5lbCBvbWFwX2NydGNfY2hhbm5lbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cit7CisJc3RydWN0IG9tYXBfY3J0YyAqb21hcF9jcnRjID0gdG9fb21hcF9jcnRjKGNydGMpOwor CXJldHVybiBvbWFwX2NydGMtPmNoYW5uZWw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiBEU1MgTWFuYWdlciBGdW5jdGlvbnMKKyAqLworCiAvKgogICogTWFuYWdlci1vcHMsIGNh bGxiYWNrcyBmcm9tIG91dHB1dCB3aGVuIHRoZXkgbmVlZCB0byBjb25maWd1cmUKICAqIHRoZSB1 cHN0cmVhbSBwYXJ0IG9mIHRoZSB2aWRlbyBwaXBlLgpAQCAtMjMyLDggKzI1MiwxODkgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkc3NfbWdyX29wcyBtZ3Jfb3BzID0gewogCS51bnJlZ2lzdGVyX2Zy YW1lZG9uZV9oYW5kbGVyID0gb21hcF9jcnRjX3VucmVnaXN0ZXJfZnJhbWVkb25lX2hhbmRsZXIs CiB9OwogCi0vKgotICogQ1JUQyBmdW5jczoKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBB cHBseSBMb2dpYworICovCisKK3N0YXRpYyB2b2lkIG9tYXBfY3J0Y19lcnJvcl9pcnEoc3RydWN0 IG9tYXBfZHJtX2lycSAqaXJxLCB1aW50MzJfdCBpcnFzdGF0dXMpCit7CisJc3RydWN0IG9tYXBf Y3J0YyAqb21hcF9jcnRjID0KKwkJCWNvbnRhaW5lcl9vZihpcnEsIHN0cnVjdCBvbWFwX2NydGMs IGVycm9yX2lycSk7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm9tYXBfY3J0Yy0+YmFzZTsK KwlEUk1fRVJST1IoIiVzOiBlcnJvcnM6ICUwOHhcbiIsIG9tYXBfY3J0Yy0+bmFtZSwgaXJxc3Rh dHVzKTsKKwkvKiBhdm9pZCBnZXR0aW5nIGluIGEgZmxvb2QsIHVucmVnaXN0ZXIgdGhlIGlycSB1 bnRpbCBuZXh0IHZibGFuayAqLworCV9fb21hcF9pcnFfdW5yZWdpc3RlcihjcnRjLT5kZXYsICZv bWFwX2NydGMtPmVycm9yX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfY3J0Y19hcHBseV9p cnEoc3RydWN0IG9tYXBfZHJtX2lycSAqaXJxLCB1aW50MzJfdCBpcnFzdGF0dXMpCit7CisJc3Ry dWN0IG9tYXBfY3J0YyAqb21hcF9jcnRjID0KKwkJCWNvbnRhaW5lcl9vZihpcnEsIHN0cnVjdCBv bWFwX2NydGMsIGFwcGx5X2lycSk7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm9tYXBfY3J0 Yy0+YmFzZTsKKworCWlmICghb21hcF9jcnRjLT5lcnJvcl9pcnEucmVnaXN0ZXJlZCkKKwkJX19v bWFwX2lycV9yZWdpc3RlcihjcnRjLT5kZXYsICZvbWFwX2NydGMtPmVycm9yX2lycSk7CisKKwlp ZiAoIWRpc3BjX21ncl9nb19idXN5KG9tYXBfY3J0Yy0+Y2hhbm5lbCkpIHsKKwkJc3RydWN0IG9t YXBfZHJtX3ByaXZhdGUgKnByaXYgPQorCQkJCWNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CisJCURC RygiJXM6IGFwcGx5IGRvbmUiLCBvbWFwX2NydGMtPm5hbWUpOworCQlfX29tYXBfaXJxX3VucmVn aXN0ZXIoY3J0Yy0+ZGV2LCAmb21hcF9jcnRjLT5hcHBseV9pcnEpOworCQlxdWV1ZV93b3JrKHBy aXYtPndxLCAmb21hcF9jcnRjLT5hcHBseV93b3JrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFw cGx5X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9tYXBfY3J0 YyAqb21hcF9jcnRjID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb21hcF9jcnRjLCBh cHBseV93b3JrKTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmb21hcF9jcnRjLT5iYXNlOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IG9tYXBfZHJtX2Fw cGx5ICphcHBseSwgKm47CisJYm9vbCBuZWVkX2FwcGx5OworCisJLyoKKwkgKiBTeW5jaHJvbml6 ZSBldmVyeXRoaW5nIG9uIG1vZGVfY29uZmlnLm11dGV4LCB0byBrZWVwCisJICogdGhlIGNhbGxi YWNrcyBhbmQgbGlzdCBtb2RpZmljYXRpb24gYWxsIHNlcmlhbGl6ZWQKKwkgKiB3aXRoIHJlc3Bl Y3QgdG8gbW9kZXNldHRpbmcgaW9jdGxzIGZyb20gdXNlcnNwYWNlLgorCSAqLworCWRybV9tb2Rl c2V0X2xvY2soJmNydGMtPm11dGV4LCBOVUxMKTsKKwlkaXNwY19ydW50aW1lX2dldCgpOworCisJ LyoKKwkgKiBJZiB3ZSBhcmUgc3RpbGwgcGVuZGluZyBhIHByZXZpb3VzIHVwZGF0ZSwgd2FpdC4u IHdoZW4gdGhlCisJICogcGVuZGluZyB1cGRhdGUgY29tcGxldGVzLCB3ZSBnZXQga2lja2VkIGFn YWluLgorCSAqLworCWlmIChvbWFwX2NydGMtPmFwcGx5X2lycS5yZWdpc3RlcmVkKQorCQlnb3Rv IG91dDsKKworCS8qIGZpbmlzaCB1cCBwcmV2aW91cyBhcHBseSdzOiAqLworCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShhcHBseSwgbiwKKwkJCSZvbWFwX2NydGMtPnBlbmRpbmdfYXBwbGllcywg cGVuZGluZ19ub2RlKSB7CisJCWFwcGx5LT5wb3N0X2FwcGx5KGFwcGx5KTsKKwkJbGlzdF9kZWwo JmFwcGx5LT5wZW5kaW5nX25vZGUpOworCX0KKworCW5lZWRfYXBwbHkgPSAhbGlzdF9lbXB0eSgm b21hcF9jcnRjLT5xdWV1ZWRfYXBwbGllcyk7CisKKwkvKiB0aGVuIGhhbmRsZSB0aGUgbmV4dCBy b3VuZCBvZiBvZiBxdWV1ZWQgYXBwbHknczogKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo YXBwbHksIG4sCisJCQkmb21hcF9jcnRjLT5xdWV1ZWRfYXBwbGllcywgcXVldWVkX25vZGUpIHsK KwkJYXBwbHktPnByZV9hcHBseShhcHBseSk7CisJCWxpc3RfZGVsKCZhcHBseS0+cXVldWVkX25v ZGUpOworCQlhcHBseS0+cXVldWVkID0gZmFsc2U7CisJCWxpc3RfYWRkX3RhaWwoJmFwcGx5LT5w ZW5kaW5nX25vZGUsCisJCQkJJm9tYXBfY3J0Yy0+cGVuZGluZ19hcHBsaWVzKTsKKwl9CisKKwlp ZiAobmVlZF9hcHBseSkgeworCQllbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsID0gb21hcF9jcnRj LT5jaGFubmVsOworCisJCURCRygiJXM6IEdPIiwgb21hcF9jcnRjLT5uYW1lKTsKKworCQlpZiAo ZGlzcGNfbWdyX2lzX2VuYWJsZWQoY2hhbm5lbCkpIHsKKwkJCWRpc3BjX21ncl9nbyhjaGFubmVs KTsKKwkJCW9tYXBfaXJxX3JlZ2lzdGVyKGRldiwgJm9tYXBfY3J0Yy0+YXBwbHlfaXJxKTsKKwkJ fSBlbHNlIHsKKwkJCXN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZvbWFwX2NydGMtPmFwcGx5X3dvcmspOwor CQl9CisJfQorCitvdXQ6CisJZGlzcGNfcnVudGltZV9wdXQoKTsKKwlkcm1fbW9kZXNldF91bmxv Y2soJmNydGMtPm11dGV4KTsKK30KKworaW50IG9tYXBfY3J0Y19hcHBseShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCisJCXN0cnVjdCBvbWFwX2RybV9hcHBseSAqYXBwbHkpCit7CisJc3RydWN0IG9t YXBfY3J0YyAqb21hcF9jcnRjID0gdG9fb21hcF9jcnRjKGNydGMpOworCisJV0FSTl9PTighZHJt X21vZGVzZXRfaXNfbG9ja2VkKCZjcnRjLT5tdXRleCkpOworCisJLyogbm8gbmVlZCB0byBxdWV1 ZSBpdCBhZ2FpbiBpZiBpdCBpcyBhbHJlYWR5IHF1ZXVlZDogKi8KKwlpZiAoYXBwbHktPnF1ZXVl ZCkKKwkJcmV0dXJuIDA7CisKKwlhcHBseS0+cXVldWVkID0gdHJ1ZTsKKwlsaXN0X2FkZF90YWls KCZhcHBseS0+cXVldWVkX25vZGUsICZvbWFwX2NydGMtPnF1ZXVlZF9hcHBsaWVzKTsKKworCS8q CisJICogSWYgdGhlcmUgYXJlIG5vIGN1cnJlbnRseSBwZW5kaW5nIHVwZGF0ZXMsIHRoZW4gZ28g YWhlYWQgYW5kCisJICoga2ljayB0aGUgd29ya2VyIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UgaXQg d2lsbCBydW4gYWdhaW4gd2hlbgorCSAqIHRoZSBjdXJyZW50IHVwZGF0ZSBmaW5pc2hlcy4KKwkg Ki8KKwlpZiAobGlzdF9lbXB0eSgmb21hcF9jcnRjLT5wZW5kaW5nX2FwcGxpZXMpKSB7CisJCXN0 cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwkJ cXVldWVfd29yayhwcml2LT53cSwgJm9tYXBfY3J0Yy0+YXBwbHlfd29yayk7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfY3J0Y19wcmVfYXBwbHkoc3RydWN0IG9tYXBf ZHJtX2FwcGx5ICphcHBseSkKK3sKKwlzdHJ1Y3Qgb21hcF9jcnRjICpvbWFwX2NydGMgPQorCQkJ Y29udGFpbmVyX29mKGFwcGx5LCBzdHJ1Y3Qgb21hcF9jcnRjLCBhcHBseSk7CisJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gJm9tYXBfY3J0Yy0+YmFzZTsKKwlzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0 ZSAqcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCURCRygiJXM6IGVuYWJsZWQ9JWQi LCBvbWFwX2NydGMtPm5hbWUsIG9tYXBfY3J0Yy0+ZW5hYmxlZCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgcHJpdi0+bnVtX2VuY29kZXJzOyBpKyspIHsKKwkJaWYgKHByaXYtPmVuY29kZXJzW2ldLT5j cnRjID09IGNydGMpIHsKKwkJCWVuY29kZXIgPSBwcml2LT5lbmNvZGVyc1tpXTsKKwkJCWJyZWFr OworCQl9CisJfQorCisJaWYgKG9tYXBfY3J0Yy0+Y3VycmVudF9lbmNvZGVyICYmIGVuY29kZXIg IT0gb21hcF9jcnRjLT5jdXJyZW50X2VuY29kZXIpCisJCW9tYXBfZW5jb2Rlcl9zZXRfZW5hYmxl ZChvbWFwX2NydGMtPmN1cnJlbnRfZW5jb2RlciwgZmFsc2UpOworCisJb21hcF9jcnRjLT5jdXJy ZW50X2VuY29kZXIgPSBlbmNvZGVyOworCisJaWYgKCFvbWFwX2NydGMtPmVuYWJsZWQpIHsKKwkJ aWYgKGVuY29kZXIpCisJCQlvbWFwX2VuY29kZXJfc2V0X2VuYWJsZWQoZW5jb2RlciwgZmFsc2Up OworCX0gZWxzZSB7CisJCWlmIChlbmNvZGVyKSB7CisJCQlvbWFwX2VuY29kZXJfc2V0X2VuYWJs ZWQoZW5jb2RlciwgZmFsc2UpOworCQkJb21hcF9lbmNvZGVyX3VwZGF0ZShlbmNvZGVyLCBvbWFw X2NydGMtPm1nciwKKwkJCQkJJm9tYXBfY3J0Yy0+dGltaW5ncyk7CisJCQlvbWFwX2VuY29kZXJf c2V0X2VuYWJsZWQoZW5jb2RlciwgdHJ1ZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9t YXBfY3J0Y19wb3N0X2FwcGx5KHN0cnVjdCBvbWFwX2RybV9hcHBseSAqYXBwbHkpCit7CisJLyog bm90aGluZyBuZWVkZWQgZm9yIHBvc3QtYXBwbHkgKi8KK30KKwordm9pZCBvbWFwX2NydGNfZmx1 c2goc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBvbWFwX2NydGMgKm9tYXBfY3J0 YyA9IHRvX29tYXBfY3J0YyhjcnRjKTsKKwlpbnQgbG9vcHMgPSAwOworCisJd2hpbGUgKCFsaXN0 X2VtcHR5KCZvbWFwX2NydGMtPnBlbmRpbmdfYXBwbGllcykgfHwKKwkJIWxpc3RfZW1wdHkoJm9t YXBfY3J0Yy0+cXVldWVkX2FwcGxpZXMpIHx8CisJCW9tYXBfY3J0Yy0+ZXZlbnQgfHwgb21hcF9j cnRjLT5vbGRfZmIpIHsKKworCQlpZiAoKytsb29wcyA+IDEwKSB7CisJCQlkZXZfZXJyKGNydGMt PmRldi0+ZGV2LAorCQkJCSJvbWFwX2NydGNfZmx1c2goKSB0aW1lb3V0XG4iKTsKKwkJCWJyZWFr OworCQl9CisKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlm ZmllcygyMCkpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENSVEMgRnVu Y3Rpb25zCiAgKi8KIAogc3RhdGljIHZvaWQgb21hcF9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9j cnRjICpjcnRjKQpAQCAtNDU1LDE5NCArNjU2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y3J0Y19oZWxwZXJfZnVuY3Mgb21hcF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKIAkubW9kZV9zZXRf YmFzZSA9IG9tYXBfY3J0Y19tb2RlX3NldF9iYXNlLAogfTsKIAotY29uc3Qgc3RydWN0IG9tYXBf dmlkZW9fdGltaW5ncyAqb21hcF9jcnRjX3RpbWluZ3Moc3RydWN0IGRybV9jcnRjICpjcnRjKQot ewotCXN0cnVjdCBvbWFwX2NydGMgKm9tYXBfY3J0YyA9IHRvX29tYXBfY3J0YyhjcnRjKTsKLQly ZXR1cm4gJm9tYXBfY3J0Yy0+dGltaW5nczsKLX0KLQotZW51bSBvbWFwX2NoYW5uZWwgb21hcF9j cnRjX2NoYW5uZWwoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBvbWFwX2NydGMg Km9tYXBfY3J0YyA9IHRvX29tYXBfY3J0YyhjcnRjKTsKLQlyZXR1cm4gb21hcF9jcnRjLT5jaGFu bmVsOwotfQotCi1zdGF0aWMgdm9pZCBvbWFwX2NydGNfZXJyb3JfaXJxKHN0cnVjdCBvbWFwX2Ry bV9pcnEgKmlycSwgdWludDMyX3QgaXJxc3RhdHVzKQotewotCXN0cnVjdCBvbWFwX2NydGMgKm9t YXBfY3J0YyA9Ci0JCQljb250YWluZXJfb2YoaXJxLCBzdHJ1Y3Qgb21hcF9jcnRjLCBlcnJvcl9p cnEpOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZvbWFwX2NydGMtPmJhc2U7Ci0JRFJNX0VS Uk9SKCIlczogZXJyb3JzOiAlMDh4XG4iLCBvbWFwX2NydGMtPm5hbWUsIGlycXN0YXR1cyk7Ci0J LyogYXZvaWQgZ2V0dGluZyBpbiBhIGZsb29kLCB1bnJlZ2lzdGVyIHRoZSBpcnEgdW50aWwgbmV4 dCB2YmxhbmsgKi8KLQlfX29tYXBfaXJxX3VucmVnaXN0ZXIoY3J0Yy0+ZGV2LCAmb21hcF9jcnRj LT5lcnJvcl9pcnEpOwotfQotCi1zdGF0aWMgdm9pZCBvbWFwX2NydGNfYXBwbHlfaXJxKHN0cnVj dCBvbWFwX2RybV9pcnEgKmlycSwgdWludDMyX3QgaXJxc3RhdHVzKQotewotCXN0cnVjdCBvbWFw X2NydGMgKm9tYXBfY3J0YyA9Ci0JCQljb250YWluZXJfb2YoaXJxLCBzdHJ1Y3Qgb21hcF9jcnRj LCBhcHBseV9pcnEpOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZvbWFwX2NydGMtPmJhc2U7 Ci0KLQlpZiAoIW9tYXBfY3J0Yy0+ZXJyb3JfaXJxLnJlZ2lzdGVyZWQpCi0JCV9fb21hcF9pcnFf cmVnaXN0ZXIoY3J0Yy0+ZGV2LCAmb21hcF9jcnRjLT5lcnJvcl9pcnEpOwotCi0JaWYgKCFkaXNw Y19tZ3JfZ29fYnVzeShvbWFwX2NydGMtPmNoYW5uZWwpKSB7Ci0JCXN0cnVjdCBvbWFwX2RybV9w cml2YXRlICpwcml2ID0KLQkJCQljcnRjLT5kZXYtPmRldl9wcml2YXRlOwotCQlEQkcoIiVzOiBh cHBseSBkb25lIiwgb21hcF9jcnRjLT5uYW1lKTsKLQkJX19vbWFwX2lycV91bnJlZ2lzdGVyKGNy dGMtPmRldiwgJm9tYXBfY3J0Yy0+YXBwbHlfaXJxKTsKLQkJcXVldWVfd29yayhwcml2LT53cSwg Jm9tYXBfY3J0Yy0+YXBwbHlfd29yayk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhcHBseV93b3Jr ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBvbWFwX2NydGMgKm9tYXBf Y3J0YyA9Ci0JCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9tYXBfY3J0YywgYXBwbHlfd29y ayk7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm9tYXBfY3J0Yy0+YmFzZTsKLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBvbWFwX2RybV9hcHBseSAqYXBw bHksICpuOwotCWJvb2wgbmVlZF9hcHBseTsKLQotCS8qCi0JICogU3luY2hyb25pemUgZXZlcnl0 aGluZyBvbiBtb2RlX2NvbmZpZy5tdXRleCwgdG8ga2VlcAotCSAqIHRoZSBjYWxsYmFja3MgYW5k IGxpc3QgbW9kaWZpY2F0aW9uIGFsbCBzZXJpYWxpemVkCi0JICogd2l0aCByZXNwZWN0IHRvIG1v ZGVzZXR0aW5nIGlvY3RscyBmcm9tIHVzZXJzcGFjZS4KLQkgKi8KLQlkcm1fbW9kZXNldF9sb2Nr KCZjcnRjLT5tdXRleCwgTlVMTCk7Ci0JZGlzcGNfcnVudGltZV9nZXQoKTsKLQotCS8qCi0JICog SWYgd2UgYXJlIHN0aWxsIHBlbmRpbmcgYSBwcmV2aW91cyB1cGRhdGUsIHdhaXQuLiB3aGVuIHRo ZQotCSAqIHBlbmRpbmcgdXBkYXRlIGNvbXBsZXRlcywgd2UgZ2V0IGtpY2tlZCBhZ2Fpbi4KLQkg Ki8KLQlpZiAob21hcF9jcnRjLT5hcHBseV9pcnEucmVnaXN0ZXJlZCkKLQkJZ290byBvdXQ7Ci0K LQkvKiBmaW5pc2ggdXAgcHJldmlvdXMgYXBwbHknczogKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUoYXBwbHksIG4sCi0JCQkmb21hcF9jcnRjLT5wZW5kaW5nX2FwcGxpZXMsIHBlbmRpbmdf bm9kZSkgewotCQlhcHBseS0+cG9zdF9hcHBseShhcHBseSk7Ci0JCWxpc3RfZGVsKCZhcHBseS0+ cGVuZGluZ19ub2RlKTsKLQl9Ci0KLQluZWVkX2FwcGx5ID0gIWxpc3RfZW1wdHkoJm9tYXBfY3J0 Yy0+cXVldWVkX2FwcGxpZXMpOwotCi0JLyogdGhlbiBoYW5kbGUgdGhlIG5leHQgcm91bmQgb2Yg b2YgcXVldWVkIGFwcGx5J3M6ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFwcGx5LCBu LAotCQkJJm9tYXBfY3J0Yy0+cXVldWVkX2FwcGxpZXMsIHF1ZXVlZF9ub2RlKSB7Ci0JCWFwcGx5 LT5wcmVfYXBwbHkoYXBwbHkpOwotCQlsaXN0X2RlbCgmYXBwbHktPnF1ZXVlZF9ub2RlKTsKLQkJ YXBwbHktPnF1ZXVlZCA9IGZhbHNlOwotCQlsaXN0X2FkZF90YWlsKCZhcHBseS0+cGVuZGluZ19u b2RlLAotCQkJCSZvbWFwX2NydGMtPnBlbmRpbmdfYXBwbGllcyk7Ci0JfQotCi0JaWYgKG5lZWRf YXBwbHkpIHsKLQkJZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCA9IG9tYXBfY3J0Yy0+Y2hhbm5l bDsKLQotCQlEQkcoIiVzOiBHTyIsIG9tYXBfY3J0Yy0+bmFtZSk7Ci0KLQkJaWYgKGRpc3BjX21n cl9pc19lbmFibGVkKGNoYW5uZWwpKSB7Ci0JCQlkaXNwY19tZ3JfZ28oY2hhbm5lbCk7Ci0JCQlv bWFwX2lycV9yZWdpc3RlcihkZXYsICZvbWFwX2NydGMtPmFwcGx5X2lycSk7Ci0JCX0gZWxzZSB7 Ci0JCQlzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0J CQlxdWV1ZV93b3JrKHByaXYtPndxLCAmb21hcF9jcnRjLT5hcHBseV93b3JrKTsKLQkJfQotCX0K LQotb3V0OgotCWRpc3BjX3J1bnRpbWVfcHV0KCk7Ci0JZHJtX21vZGVzZXRfdW5sb2NrKCZjcnRj LT5tdXRleCk7Ci19Ci0KLWludCBvbWFwX2NydGNfYXBwbHkoc3RydWN0IGRybV9jcnRjICpjcnRj LAotCQlzdHJ1Y3Qgb21hcF9kcm1fYXBwbHkgKmFwcGx5KQotewotCXN0cnVjdCBvbWFwX2NydGMg Km9tYXBfY3J0YyA9IHRvX29tYXBfY3J0YyhjcnRjKTsKLQotCVdBUk5fT04oIWRybV9tb2Rlc2V0 X2lzX2xvY2tlZCgmY3J0Yy0+bXV0ZXgpKTsKLQotCS8qIG5vIG5lZWQgdG8gcXVldWUgaXQgYWdh aW4gaWYgaXQgaXMgYWxyZWFkeSBxdWV1ZWQ6ICovCi0JaWYgKGFwcGx5LT5xdWV1ZWQpCi0JCXJl dHVybiAwOwotCi0JYXBwbHktPnF1ZXVlZCA9IHRydWU7Ci0JbGlzdF9hZGRfdGFpbCgmYXBwbHkt PnF1ZXVlZF9ub2RlLCAmb21hcF9jcnRjLT5xdWV1ZWRfYXBwbGllcyk7Ci0KLQkvKgotCSAqIElm IHRoZXJlIGFyZSBubyBjdXJyZW50bHkgcGVuZGluZyB1cGRhdGVzLCB0aGVuIGdvIGFoZWFkIGFu ZAotCSAqIGtpY2sgdGhlIHdvcmtlciBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlIGl0IHdpbGwgcnVu IGFnYWluIHdoZW4KLQkgKiB0aGUgY3VycmVudCB1cGRhdGUgZmluaXNoZXMuCi0JICovCi0JaWYg KGxpc3RfZW1wdHkoJm9tYXBfY3J0Yy0+cGVuZGluZ19hcHBsaWVzKSkgewotCQlzdHJ1Y3Qgb21h cF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Ci0JCXF1ZXVlX3dv cmsocHJpdi0+d3EsICZvbWFwX2NydGMtPmFwcGx5X3dvcmspOwotCX0KLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgdm9pZCBvbWFwX2NydGNfcHJlX2FwcGx5KHN0cnVjdCBvbWFwX2RybV9hcHBs eSAqYXBwbHkpCi17Ci0Jc3RydWN0IG9tYXBfY3J0YyAqb21hcF9jcnRjID0KLQkJCWNvbnRhaW5l cl9vZihhcHBseSwgc3RydWN0IG9tYXBfY3J0YywgYXBwbHkpOwotCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YyA9ICZvbWFwX2NydGMtPmJhc2U7Ci0Jc3RydWN0IG9tYXBfZHJtX3ByaXZhdGUgKnByaXYg PSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9 IE5VTEw7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlEQkcoIiVzOiBlbmFibGVkPSVkIiwgb21hcF9j cnRjLT5uYW1lLCBvbWFwX2NydGMtPmVuYWJsZWQpOwotCi0JZm9yIChpID0gMDsgaSA8IHByaXYt Pm51bV9lbmNvZGVyczsgaSsrKSB7Ci0JCWlmIChwcml2LT5lbmNvZGVyc1tpXS0+Y3J0YyA9PSBj cnRjKSB7Ci0JCQllbmNvZGVyID0gcHJpdi0+ZW5jb2RlcnNbaV07Ci0JCQlicmVhazsKLQkJfQot CX0KLQotCWlmIChvbWFwX2NydGMtPmN1cnJlbnRfZW5jb2RlciAmJiBlbmNvZGVyICE9IG9tYXBf Y3J0Yy0+Y3VycmVudF9lbmNvZGVyKQotCQlvbWFwX2VuY29kZXJfc2V0X2VuYWJsZWQob21hcF9j cnRjLT5jdXJyZW50X2VuY29kZXIsIGZhbHNlKTsKLQotCW9tYXBfY3J0Yy0+Y3VycmVudF9lbmNv ZGVyID0gZW5jb2RlcjsKLQotCWlmICghb21hcF9jcnRjLT5lbmFibGVkKSB7Ci0JCWlmIChlbmNv ZGVyKQotCQkJb21hcF9lbmNvZGVyX3NldF9lbmFibGVkKGVuY29kZXIsIGZhbHNlKTsKLQl9IGVs c2UgewotCQlpZiAoZW5jb2RlcikgewotCQkJb21hcF9lbmNvZGVyX3NldF9lbmFibGVkKGVuY29k ZXIsIGZhbHNlKTsKLQkJCW9tYXBfZW5jb2Rlcl91cGRhdGUoZW5jb2Rlciwgb21hcF9jcnRjLT5t Z3IsCi0JCQkJCSZvbWFwX2NydGMtPnRpbWluZ3MpOwotCQkJb21hcF9lbmNvZGVyX3NldF9lbmFi bGVkKGVuY29kZXIsIHRydWUpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvbWFwX2NydGNf cG9zdF9hcHBseShzdHJ1Y3Qgb21hcF9kcm1fYXBwbHkgKmFwcGx5KQotewotCS8qIG5vdGhpbmcg bmVlZGVkIGZvciBwb3N0LWFwcGx5ICovCi19Ci0KLXZvaWQgb21hcF9jcnRjX2ZsdXNoKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3Qgb21hcF9jcnRjICpvbWFwX2NydGMgPSB0b19v bWFwX2NydGMoY3J0Yyk7Ci0JaW50IGxvb3BzID0gMDsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgm b21hcF9jcnRjLT5wZW5kaW5nX2FwcGxpZXMpIHx8Ci0JCSFsaXN0X2VtcHR5KCZvbWFwX2NydGMt PnF1ZXVlZF9hcHBsaWVzKSB8fAotCQlvbWFwX2NydGMtPmV2ZW50IHx8IG9tYXBfY3J0Yy0+b2xk X2ZiKSB7Ci0KLQkJaWYgKCsrbG9vcHMgPiAxMCkgewotCQkJZGV2X2VycihjcnRjLT5kZXYtPmRl diwKLQkJCQkib21hcF9jcnRjX2ZsdXNoKCkgdGltZW91dFxuIik7Ci0JCQlicmVhazsKLQkJfQot Ci0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMjAp KTsKLQl9Ci19CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW5pdCBhbmQgQ2xlYW51cAor ICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICpjaGFubmVsX25hbWVzW10gPSB7CiAJW09NQVBfRFNT X0NIQU5ORUxfTENEXSA9ICJsY2QiLAotLSAKMi4zLjMKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVsCg==