From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH 2/5] drm/tinydrm: Add tinydrm_panel abstraction Date: Sat, 11 Mar 2017 22:35:33 +0100 Message-ID: <20170311213536.2226-3-noralf@tronnes.org> References: <20170311213536.2226-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3E5566E182 for ; Sat, 11 Mar 2017 21:35:52 +0000 (UTC) In-Reply-To: <20170311213536.2226-1-noralf@tronnes.org> 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: treding@nvidia.com List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIGRpc3BsYXlzIHRoYXQgY2FuIGJlIG9wZXJhdGVkIHVzaW5nIGEgc2lt cGxlIHZ0YWJsZS4KR2VhcmVkIHRvd2FyZHMgY29udHJvbGxlcnMgdGhhdCBjYW4gcmVwcmVzZW50 IGl0J3MgcmVnaXN0ZXJzIHVzaW5nCnJlZ21hcC4KClNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4 bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgotLS0KIERvY3VtZW50YXRpb24vZ3B1L3Rpbnlkcm0u cnN0ICAgICAgICAgICAgICAgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25m aWcgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvTWFr ZWZpbGUgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlk cm0tcGFuZWwuYyB8IDUzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvZHJt L3Rpbnlkcm0vdGlueWRybS1wYW5lbC5oICAgICAgICAgIHwgMTUzICsrKysrKysrCiA1IGZpbGVz IGNoYW5nZWQsIDY5OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLXBhbmVsLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0tcGFuZWwuaAoKZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L3Rpbnlkcm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUv dGlueWRybS5yc3QKaW5kZXggYTkxMzY0NC4uYmI3ODQzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRh dGlvbi9ncHUvdGlueWRybS5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvdGlueWRybS5yc3QK QEAgLTIwLDYgKzIwLDE4IEBAIENvcmUgZnVuY3Rpb25hbGl0eQogLi4ga2VybmVsLWRvYzo6IGRy aXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1waXBlLmMKICAgIDpleHBvcnQ6CiAK K1BhbmVsCis9PT09PQorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0v Y29yZS90aW55ZHJtLXBhbmVsLmMKKyAgIDpkb2M6IG92ZXJ2aWV3CisKKy4uIGtlcm5lbC1kb2M6 OiBpbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0tcGFuZWwuaAorICAgOmludGVybmFsOgorCisu LiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLXBhbmVs LmMKKyAgIDpleHBvcnQ6CisKIEFkZGl0aW9uYWwgaGVscGVycwogPT09PT09PT09PT09PT09PT09 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vdGlueWRybS9LY29uZmlnCmluZGV4IDM1MDRjNTMuLjRlYTBmYmMgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIG1lbnVjb25maWcgRFJNX1RJTllEUk0K IAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3Igc2ltcGxlIGRpc3BsYXlzIgogCWRlcGVuZHMgb24gRFJN CisJc2VsZWN0IFJFR01BUAogCXNlbGVjdCBEUk1fS01TX0hFTFBFUgogCXNlbGVjdCBEUk1fS01T X0NNQV9IRUxQRVIKIAlzZWxlY3QgQkFDS0xJR0hUX0xDRF9TVVBQT1JUCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Rp bnlkcm0vY29yZS9NYWtlZmlsZQppbmRleCBmYjIyMWU2Li4yMTNiNDc5IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL2NvcmUvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi10aW55ZHJtLXkgOj0gdGlu eWRybS1jb3JlLm8gdGlueWRybS1waXBlLm8gdGlueWRybS1oZWxwZXJzLm8KK3Rpbnlkcm0teSA6 PSB0aW55ZHJtLWNvcmUubyB0aW55ZHJtLXBpcGUubyB0aW55ZHJtLXBhbmVsLm8gdGlueWRybS1o ZWxwZXJzLm8KIAogb2JqLSQoQ09ORklHX0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLm8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1wYW5lbC5jIGIvZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLXBhbmVsLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlNWZiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1wYW5lbC5jCkBAIC0wLDAgKzEsNTMyIEBACisv KgorICogQ29weXJpZ2h0IDIwMTcgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUg PGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUg PGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4K KworI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUg PGRybS90aW55ZHJtL3Rpbnlkcm0taGVscGVycy5oPgorI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rp bnlkcm0tcGFuZWwuaD4KKworLyoqCisgKiBET0M6IG92ZXJ2aWV3CisgKgorICogVGhpcyBsaWJy YXJ5IHByb3ZpZGVzIGhlbHBlcnMgZm9yIGRpc3BsYXlzL3BhbmVscyB0aGF0IGNhbiBiZSBvcGVy YXRlZAorICogdXNpbmcgYSBzaW1wbGUgdnRhYmxlLgorICoKKyAqIE1hbnkgY29udHJvbGxlcnMg YXJlIG9wZXJhdGVkIHRocm91Z2ggYSByZWdpc3RlciBtYWtpbmcgJnJlZ21hcCBhIHVzZWZ1bAor ICogYWJzdHJhY3Rpb24gZm9yIHRoZSByZWdpc3RlciBpbnRlcmZhY2UgY29kZS4gVGhpcyBoZWxw ZXIgaXMgZ2VhcmVkIHRvd2FyZHMKKyAqIHN1Y2ggY29udHJvbGxlcnMuIE9mdGVuIGNvbnRyb2xs ZXJzIGFsc28gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGJ1cywgYW5kCisgKiBzaG91bGQgZm9yIGlu c3RhbmNlIGEgY29udHJvbGxlciBiZSBjb25uZWN0ZWQgaW4gYSBub24tc3RhbmRhcmQgd2F5Cisg KiAoZS5nLiBtZW1vcnkgbWFwcGVkKSwgdGhlbiBvbmx5IHRoZSByZWdtYXAgbmVlZHMgdG8gYmUg Y2hhbmdlZC4KKyAqLworCitzdGF0aWMgaW50IHRpbnlkcm1fcGFuZWxfcHJlcGFyZShzdHJ1Y3Qg dGlueWRybV9wYW5lbCAqcGFuZWwpCit7CisJaWYgKHBhbmVsLT5mdW5jcyAmJiBwYW5lbC0+ZnVu Y3MtPnByZXBhcmUpCisJCXJldHVybiBwYW5lbC0+ZnVuY3MtPnByZXBhcmUocGFuZWwpOworCisJ aWYgKHBhbmVsLT5yZWd1bGF0b3IpCisJCXJldHVybiByZWd1bGF0b3JfZW5hYmxlKHBhbmVsLT5y ZWd1bGF0b3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlueWRybV9wYW5lbF9l bmFibGUoc3RydWN0IHRpbnlkcm1fcGFuZWwgKnBhbmVsKQoreworCWlmIChwYW5lbC0+ZnVuY3Mg JiYgcGFuZWwtPmZ1bmNzLT5lbmFibGUpCisJCXJldHVybiBwYW5lbC0+ZnVuY3MtPmVuYWJsZShw YW5lbCk7CisKKwlyZXR1cm4gdGlueWRybV9lbmFibGVfYmFja2xpZ2h0KHBhbmVsLT5iYWNrbGln aHQpOworfQorCitzdGF0aWMgaW50IHRpbnlkcm1fcGFuZWxfZGlzYWJsZShzdHJ1Y3QgdGlueWRy bV9wYW5lbCAqcGFuZWwpCit7CisJaWYgKHBhbmVsLT5mdW5jcyAmJiBwYW5lbC0+ZnVuY3MtPmRp c2FibGUpCisJCXJldHVybiBwYW5lbC0+ZnVuY3MtPmRpc2FibGUocGFuZWwpOworCisJcmV0dXJu IHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQocGFuZWwtPmJhY2tsaWdodCk7Cit9CisKK3N0YXRp YyBpbnQgdGlueWRybV9wYW5lbF91bnByZXBhcmUoc3RydWN0IHRpbnlkcm1fcGFuZWwgKnBhbmVs KQoreworCWlmIChwYW5lbC0+ZnVuY3MgJiYgcGFuZWwtPmZ1bmNzLT51bnByZXBhcmUpCisJCXJl dHVybiBwYW5lbC0+ZnVuY3MtPnVucHJlcGFyZShwYW5lbCk7CisKKwlpZiAocGFuZWwtPnJlZ3Vs YXRvcikKKwkJcmV0dXJuIHJlZ3VsYXRvcl9kaXNhYmxlKHBhbmVsLT5yZWd1bGF0b3IpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRpbnlkcm1fcGFuZWxfcGlwZV9lbmFibGUoc3Ry dWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCSAgICAgIHN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYg PSBwaXBlX3RvX3Rpbnlkcm0ocGlwZSk7CisJc3RydWN0IHRpbnlkcm1fcGFuZWwgKnBhbmVsID0g dGlueWRybV90b19wYW5lbCh0ZGV2KTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBp cGUtPnBsYW5lLmZiOworCisJcGFuZWwtPmVuYWJsZWQgPSB0cnVlOworCWZiLT5mdW5jcy0+ZGly dHkoZmIsIE5VTEwsIDAsIDAsIE5VTEwsIDApOworCXRpbnlkcm1fcGFuZWxfZW5hYmxlKHBhbmVs KTsKK30KKworc3RhdGljIHZvaWQgdGlueWRybV9wYW5lbF9waXBlX2Rpc2FibGUoc3RydWN0IGRy bV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKQoreworCXN0cnVjdCB0aW55ZHJtX2RldmljZSAq dGRldiA9IHBpcGVfdG9fdGlueWRybShwaXBlKTsKKwlzdHJ1Y3QgdGlueWRybV9wYW5lbCAqcGFu ZWwgPSB0aW55ZHJtX3RvX3BhbmVsKHRkZXYpOworCisJcGFuZWwtPmVuYWJsZWQgPSBmYWxzZTsK Kwl0aW55ZHJtX3BhbmVsX2Rpc2FibGUocGFuZWwpOworfQorCitzdGF0aWMgdm9pZCB0aW55ZHJt X3BhbmVsX3BpcGVfdXBkYXRlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwK KwkJCQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0 IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gcGlwZV90b190aW55ZHJtKHBpcGUpOworCXN0cnVjdCB0 aW55ZHJtX3BhbmVsICpwYW5lbCA9IHRpbnlkcm1fdG9fcGFuZWwodGRldik7CisJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwaXBlLT5wbGFuZS5zdGF0ZS0+ZmI7CisKKwkvKiBmYiBpcyBz ZXQgKG5vdCBjaGFuZ2VkKSAqLworCWlmIChmYiAmJiAhb2xkX3N0YXRlLT5mYikKKwkJdGlueWRy bV9wYW5lbF9wcmVwYXJlKHBhbmVsKTsKKworCXRpbnlkcm1fZGlzcGxheV9waXBlX3VwZGF0ZShw aXBlLCBvbGRfc3RhdGUpOworCisJLyogZmIgaXMgdW5zZXQgKi8KKwlpZiAoIWZiKQorCQl0aW55 ZHJtX3BhbmVsX3VucHJlcGFyZShwYW5lbCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3NpbXBsZV9kaXNwbGF5X3BpcGVfZnVuY3MgdGlueWRybV9wYW5lbF9waXBlX2Z1bmNzID0gewor CS5lbmFibGUgPSB0aW55ZHJtX3BhbmVsX3BpcGVfZW5hYmxlLAorCS5kaXNhYmxlID0gdGlueWRy bV9wYW5lbF9waXBlX2Rpc2FibGUsCisJLnVwZGF0ZSA9IHRpbnlkcm1fcGFuZWxfcGlwZV91cGRh dGUsCisJLnByZXBhcmVfZmIgPSB0aW55ZHJtX2Rpc3BsYXlfcGlwZV9wcmVwYXJlX2ZiLAorfTsK Kworc3RhdGljIGludCB0aW55ZHJtX3BhbmVsX2ZiX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAorCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJICB1bnNpZ25l ZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBjb2xvciwKKwkJCQkgIHN0cnVjdCBkcm1fY2xpcF9y ZWN0ICpjbGlwcywKKwkJCQkgIHVuc2lnbmVkIGludCBudW1fY2xpcHMpCit7CisJc3RydWN0IHRp bnlkcm1fZGV2aWNlICp0ZGV2ID0gZmItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHRpbnlk cm1fcGFuZWwgKnBhbmVsID0gdGlueWRybV90b19wYW5lbCh0ZGV2KTsKKwlzdHJ1Y3QgZHJtX2Ns aXBfcmVjdCByZWN0OworCWludCByZXQgPSAwOworCisJaWYgKCFwYW5lbC0+ZnVuY3MgfHwgIXBh bmVsLT5mdW5jcy0+Zmx1c2gpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmdGRldi0+ZGly dHlfbG9jayk7CisKKwlpZiAoIXBhbmVsLT5lbmFibGVkKQorCQlnb3RvIG91dF91bmxvY2s7CisK KwkvKiBmYmRldiBjYW4gZmx1c2ggZXZlbiB3aGVuIHdlJ3JlIG5vdCBpbnRlcmVzdGVkICovCisJ aWYgKHRkZXYtPnBpcGUucGxhbmUuZmIgIT0gZmIpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXRp bnlkcm1fbWVyZ2VfY2xpcHMoJnJlY3QsIGNsaXBzLCBudW1fY2xpcHMsIGZsYWdzLAorCQkJICAg IGZiLT53aWR0aCwgZmItPmhlaWdodCk7CisKKwlyZXQgPSBwYW5lbC0+ZnVuY3MtPmZsdXNoKHBh bmVsLCBmYiwgJnJlY3QpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmdGRldi0+ZGly dHlfbG9jayk7CisKKwlpZiAocmV0KQorCQlkZXZfZXJyX29uY2UoZmItPmRldi0+ZGV2LCAiRmFp bGVkIHRvIHVwZGF0ZSBkaXNwbGF5ICVkXG4iLAorCQkJICAgICByZXQpOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgdGlueWRy bV9wYW5lbF9mYl9mdW5jcyA9IHsKKwkuZGVzdHJveQk9IGRybV9mYl9jbWFfZGVzdHJveSwKKwku Y3JlYXRlX2hhbmRsZQk9IGRybV9mYl9jbWFfY3JlYXRlX2hhbmRsZSwKKwkuZGlydHkJCT0gdGlu eWRybV9wYW5lbF9mYl9kaXJ0eSwKK307CisKKy8qKgorICogdGlueWRybV9wYW5lbF9pbml0IC0g SW5pdGlhbGl6ZSAmdGlueWRybV9wYW5lbAorICogQGRldjogUGFyZW50IGRldmljZQorICogQHBh bmVsOiAmdGlueWRybV9wYW5lbCBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICogQGZ1bmNzOiBD YWxsYmFja3MgZm9yIHRoZSBwYW5lbCAob3B0aW9uYWwpCisgKiBAZm9ybWF0czogQXJyYXkgb2Yg c3VwcG9ydGVkIGZvcm1hdHMgKERSTV9GT1JNQVRcX1wqKS4gVGhlIGZpcnN0IGZvcm1hdCBpcwor ICogICAgICAgICAgIGNvbnNpZGVyZWQgdGhlIGRlZmF1bHQgZm9ybWF0IGFuZCAmdGlueWRybV9w YW5lbC0+dHhfYnVmIGlzCisgKiAgICAgICAgICAgYWxsb2NhdGVkIGEgYnVmZmVyIHRoYXQgY2Fu IGhvbGQgYSBmcmFtZWJ1ZmZlciB3aXRoIHRoYXQgZm9ybWF0LgorICogQGZvcm1hdF9jb3VudDog TnVtYmVyIG9mIGVsZW1lbnRzIGluIEBmb3JtYXRzCisgKiBAZHJpdmVyOiBEUk0gZHJpdmVyCisg KiBAbW9kZTogRGlzcGxheSBtb2RlCisgKiBAcm90YXRpb246IEluaXRpYWwgcm90YXRpb24gaW4g ZGVncmVlcyBDb3VudGVyIENsb2NrIFdpc2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxp emVzIGEgJnRpbnlkcm1fcGFuZWwgc3RydWN0dXJlIGFuZCBpdCdzIHVuZGVybHlpbmcKKyAqIEB0 aW55ZHJtX2RldmljZS4gSXQgYWxzbyBzZXRzIHVwIHRoZSBkaXNwbGF5IHBpcGVsaW5lLgorICoK KyAqIE9iamVjdHMgY3JlYXRlZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxs eSBmcmVlZCBvbiBkcml2ZXIKKyAqIGRldGFjaCAoZGV2cmVzKS4KKyAqCisgKiBSZXR1cm5zOgor ICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8K K2ludCB0aW55ZHJtX3BhbmVsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdGlueWRy bV9wYW5lbCAqcGFuZWwsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdGlueWRybV9wYW5lbF9mdW5j cyAqZnVuY3MsCisJCSAgICAgICBjb25zdCB1aW50MzJfdCAqZm9ybWF0cywgdW5zaWduZWQgaW50 IGZvcm1hdF9jb3VudCwKKwkJICAgICAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIsCisJCSAg ICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJICAgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSAmcGFu ZWwtPnRpbnlkcm07CisJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZm9ybWF0X2luZm87 CisJc2l6ZV90IGJ1ZnNpemU7CisJaW50IHJldDsKKworCWZvcm1hdF9pbmZvID0gZHJtX2Zvcm1h dF9pbmZvKGZvcm1hdHNbMF0pOworCWJ1ZnNpemUgPSBtb2RlLT52ZGlzcGxheSAqIG1vZGUtPmhk aXNwbGF5ICogZm9ybWF0X2luZm8tPmNwcFswXTsKKworCXBhbmVsLT50eF9idWYgPSBkZXZtX2tt YWxsb2MoZGV2LCBidWZzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhbmVsLT50eF9idWYpCisJ CXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZGV2bV90aW55ZHJtX2luaXQoZGV2LCB0ZGV2LCAm dGlueWRybV9wYW5lbF9mYl9mdW5jcywgZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0ID0gdGlueWRybV9kaXNwbGF5X3BpcGVfaW5pdCh0ZGV2LCAmdGlueWRybV9wYW5l bF9waXBlX2Z1bmNzLAorCQkJCQlEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCwKKwkJCQkJZm9y bWF0cywgZm9ybWF0X2NvdW50LCBtb2RlLAorCQkJCQlyb3RhdGlvbik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXRkZXYtPmRybS0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0g Zm9ybWF0X2luZm8tPmRlcHRoOworCisJcGFuZWwtPnJvdGF0aW9uID0gcm90YXRpb247CisJcGFu ZWwtPmZ1bmNzID0gZnVuY3M7CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQodGRldi0+ZHJtKTsK KworCURSTV9ERUJVR19LTVMoInByZWZlcnJlZF9kZXB0aD0ldSwgcm90YXRpb24gPSAldVxuIiwK KwkJICAgICAgdGRldi0+ZHJtLT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGgsIHJvdGF0aW9u KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX3BhbmVsX2luaXQpOwor CisvKioKKyAqIHRpbnlkcm1fcGFuZWxfcmdiNTY1X2J1ZiAtIFJldHVybiBSR0I1NjUgYnVmZmVy IHRvIHNjYW5vdXQKKyAqIEBwYW5lbDogdGlueWRybSBwYW5lbAorICogQGZiOiBEUk0gZnJhbWVi dWZmZXIKKyAqIEByZWN0OiBDbGlwIHJlY3RhbmdsZSBhcmVhIHRvIHNjYW5vdXQKKyAqCisgKiBU aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFJHQjU2NSBmcmFtZWJ1ZmZlciByZWN0YW5nbGUgdG8g c2Nhbm91dC4KKyAqIEl0IGNvbnZlcnRzIFhSR0I4ODg4IHRvIFJHQjU2NSBpZiBuZWNlc3Nhcnku CisgKiBJZiBjb3B5aW5nIGlzbid0IG5lY2Vzc2FyeSAoUkdCNTY1IGZ1bGwgcmVjdCwgbm8gc3dh cCksIHRoZW4gdGhlIGJhY2tpbmcKKyAqIENNQSBidWZmZXIgaXMgcmV0dXJuZWQuCisgKgorICog UmV0dXJuczoKKyAqIEJ1ZmZlciB0byBzY2Fub3V0IG9uIHN1Y2Nlc3MsIEVSUl9QVFIgb24gZmFp bHVyZS4KKyAqLwordm9pZCAqdGlueWRybV9wYW5lbF9yZ2I1NjVfYnVmKHN0cnVjdCB0aW55ZHJt X3BhbmVsICpwYW5lbCwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJ CSAgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9j bWFfb2JqZWN0ICpjbWFfb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisJYm9v bCBzd2FwID0gcGFuZWwtPnN3YXBfYnl0ZXM7CisJYm9vbCBmdWxsOworCXZvaWQgKmJ1ZjsKKwlp bnQgcmV0OworCisJZnVsbCA9IChyZWN0LT54MiAtIHJlY3QtPngxKSA9PSBmYi0+d2lkdGggJiYK KwkgICAgICAgKHJlY3QtPnkyIC0gcmVjdC0+eTEpID09IGZiLT5oZWlnaHQ7CisKKwlpZiAocGFu ZWwtPmFsd2F5c190eF9idWYgfHwgc3dhcCB8fCAhZnVsbCB8fAorCSAgICBmYi0+Zm9ybWF0LT5m b3JtYXQgPT0gRFJNX0ZPUk1BVF9YUkdCODg4OCkgeworCQlidWYgPSBwYW5lbC0+dHhfYnVmOwor CQlyZXQgPSB0aW55ZHJtX3JnYjU2NV9idWZfY29weShidWYsIGZiLCByZWN0LCBzd2FwKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfSBlbHNlIHsKKwkJYnVmID0gY21h X29iai0+dmFkZHI7CisJfQorCisJcmV0dXJuIGJ1ZjsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRy bV9wYW5lbF9yZ2I1NjVfYnVmKTsKKworLyoqCisgKiB0aW55ZHJtX3BhbmVsX3BtX3N1c3BlbmQg LSB0aW55ZHJtX3BhbmVsIFBNIHN1c3BlbmQgaGVscGVyCisgKiBAZGV2OiBEZXZpY2UKKyAqCisg KiB0aW55ZHJtX3BhbmVsIGRyaXZlcnMgY2FuIHVzZSB0aGlzIGluIHRoZWlyICZkZXZpY2VfZHJp dmVyLT5wbSBvcGVyYXRpb25zLgorICogVXNlIGRldl9zZXRfZHJ2ZGF0YSgpIG9yIHNpbWlsYXIg dG8gc2V0ICZ0aW55ZHJtX3BhbmVsIGFzIGRyaXZlciBkYXRhLgorICovCitpbnQgdGlueWRybV9w YW5lbF9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlueWRybV9w YW5lbCAqcGFuZWwgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0g dGlueWRybV9zdXNwZW5kKCZwYW5lbC0+dGlueWRybSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCS8qIGZiIGlzbid0IHNldCB0byBOVUxMIGJ5IHN1c3BlbmQsIGRvIC51bnByZXBhcmUo KSBleHBsaWNpdGx5ICovCisJdGlueWRybV9wYW5lbF91bnByZXBhcmUocGFuZWwpOworCisJcmV0 dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fcGFuZWxfcG1fc3VzcGVuZCk7CisKKy8q KgorICogdGlueWRybV9wYW5lbF9wbV9yZXN1bWUgLSB0aW55ZHJtX3BhbmVsIFBNIHJlc3VtZSBo ZWxwZXIKKyAqIEBkZXY6IERldmljZQorICoKKyAqIHRpbnlkcm1fcGFuZWwgZHJpdmVycyBjYW4g dXNlIHRoaXMgaW4gdGhlaXIgJmRldmljZV9kcml2ZXItPnBtIG9wZXJhdGlvbnMuCisgKiBVc2Ug ZGV2X3NldF9kcnZkYXRhKCkgb3Igc2ltaWxhciB0byBzZXQgJnRpbnlkcm1fcGFuZWwgYXMgZHJp dmVyIGRhdGEuCisgKi8KK2ludCB0aW55ZHJtX3BhbmVsX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNl ICpkZXYpCit7CisJc3RydWN0IHRpbnlkcm1fcGFuZWwgKnBhbmVsID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisKKwkvKiBmYiBpcyBOVUxMIG9uIHJlc3VtZSwgLnByZXBhcmUoKSB3aWxsIGJlIGNh bGxlZCBpbiBwaXBlX3VwZGF0ZSAqLworCisJcmV0dXJuIHRpbnlkcm1fcmVzdW1lKCZwYW5lbC0+ dGlueWRybSk7Cit9CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fcGFuZWxfcG1fcmVzdW1lKTsKKwor LyoqCisgKiB0aW55ZHJtX3BhbmVsX3NwaV9zaHV0ZG93biAtIHRpbnlkcm1fcGFuZWwgU1BJIHNo dXRkb3duIGhlbHBlcgorICogQHNwaTogU1BJIGRldmljZQorICoKKyAqIHRpbnlkcm1fcGFuZWwg ZHJpdmVycyBjYW4gdXNlIHRoaXMgYXMgdGhlaXIgc2h1dGRvd24gY2FsbGJhY2sgdG8gdHVybiBv ZmYKKyAqIHRoZSBkaXNwbGF5IG9uIG1hY2hpbmUgc2h1dGRvd24gYW5kIHJlYm9vdC4gVXNlIHNw aV9zZXRfZHJ2ZGF0YSgpIG9yCisgKiBzaW1pbGFyIHRvIHNldCAmdGlueWRybV9wYW5lbCBhcyBk cml2ZXIgZGF0YS4KKyAqLwordm9pZCB0aW55ZHJtX3BhbmVsX3NwaV9zaHV0ZG93bihzdHJ1Y3Qg c3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB0aW55ZHJtX3BhbmVsICpwYW5lbCA9IHNwaV9n ZXRfZHJ2ZGF0YShzcGkpOworCisJdGlueWRybV9zaHV0ZG93bigmcGFuZWwtPnRpbnlkcm0pOwor fQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX3BhbmVsX3NwaV9zaHV0ZG93bik7CisKKy8qKgorICog dGlueWRybV9wYW5lbF9pMmNfc2h1dGRvd24gLSB0aW55ZHJtX3BhbmVsIEkyQyBzaHV0ZG93biBo ZWxwZXIKKyAqIEBpMmM6IEkyQyBjbGllbnQgZGV2aWNlCisgKgorICogdGlueWRybV9wYW5lbCBk cml2ZXJzIGNhbiB1c2UgdGhpcyBhcyB0aGVpciBzaHV0ZG93biBjYWxsYmFjayB0byB0dXJuIG9m ZgorICogdGhlIGRpc3BsYXkgb24gbWFjaGluZSBzaHV0ZG93biBhbmQgcmVib290LiBVc2UgaTJj X3NldF9jbGllbnRkYXRhKCkgb3IKKyAqIHNpbWlsYXIgdG8gc2V0ICZ0aW55ZHJtX3BhbmVsIGFz IGRyaXZlciBkYXRhLgorICovCit2b2lkIHRpbnlkcm1fcGFuZWxfaTJjX3NodXRkb3duKHN0cnVj dCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHRpbnlkcm1fcGFuZWwgKnBhbmVsID0gaTJj X2dldF9jbGllbnRkYXRhKGkyYyk7CisKKwl0aW55ZHJtX3NodXRkb3duKCZwYW5lbC0+dGlueWRy bSk7Cit9CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fcGFuZWxfaTJjX3NodXRkb3duKTsKKworLyoq CisgKiB0aW55ZHJtX3BhbmVsX3BsYXRmb3JtX3NodXRkb3duIC0gdGlueWRybV9wYW5lbCBwbGF0 Zm9ybSBkcml2ZXIgc2h1dGRvd24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBoZWxwZXIKKyAqIEBwZGV2OiBQbGF0Zm9ybSBkZXZpY2UKKyAqCisgKiB0aW55ZHJtX3BhbmVs IGRyaXZlcnMgY2FuIHVzZSB0aGlzIGFzIHRoZWlyIHNodXRkb3duIGNhbGxiYWNrIHRvIHR1cm4g b2ZmCisgKiB0aGUgZGlzcGxheSBvbiBtYWNoaW5lIHNodXRkb3duIGFuZCByZWJvb3QuIFVzZSBw bGF0Zm9ybV9zZXRfZHJ2ZGF0YSgpIG9yCisgKiBzaW1pbGFyIHRvIHNldCAmdGlueWRybV9wYW5l bCBhcyBkcml2ZXIgZGF0YS4KKyAqLwordm9pZCB0aW55ZHJtX3BhbmVsX3BsYXRmb3JtX3NodXRk b3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRpbnlkcm1fcGFu ZWwgKnBhbmVsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl0aW55ZHJtX3NodXRk b3duKCZwYW5lbC0+dGlueWRybSk7Cit9CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fcGFuZWxfcGxh dGZvcm1fc2h1dGRvd24pOworCisvKioKKyAqIHRpbnlkcm1fcmVnbWFwX3Jhd19zd2FwX2J5dGVz IC0gRG9lcyBhIHJhdyB3cml0ZSByZXF1aXJlIHN3YXBwaW5nIGJ5dGVzPworICogQHJlZzogUmVn bWFwCisgKgorICogSWYgdGhlIGJ1cyBkb2Vzbid0IHN1cHBvcnQgdGhlIGZ1bGwgcmVnd2lkdGgs IGl0IGhhcyB0byBicmVhayB1cCB0aGUgd29yZC4KKyAqIEFkZGl0aW9uYWxseSBpZiB0aGUgYnVz IGFuZCBtYWNoaW5lIGRvZXNuJ3QgbWF0Y2ggZW5kaWFuIHdpc2UsIHRoaXMgcmVxdWlyZXMKKyAq IGJ5dGVzd2FwcGluZyB0aGUgYnVmZmVyIHdoZW4gdXNpbmcgcmVnbWFwX3Jhd193cml0ZSgpLgor ICoKKyAqIFJldHVybnM6CisgKiBUcnVlIGlmIGJ5dGUgc3dhcHBpbmcgaXMgbmVlZGVkLCBvdGhl cndpc2UgZmFsc2UKKyAqLworYm9vbCB0aW55ZHJtX3JlZ21hcF9yYXdfc3dhcF9ieXRlcyhzdHJ1 Y3QgcmVnbWFwICpyZWcpCit7CisJaW50IHZhbF9ieXRlcyA9IHJlZ21hcF9nZXRfdmFsX2J5dGVz KHJlZyk7CisJdW5zaWduZWQgaW50IGJ1c192YWw7CisJdTE2IHZhbDE2ID0gMHgwMGZmOworCisJ aWYgKHZhbF9ieXRlcyA9PSAxKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoV0FSTl9PTl9PTkNF KHZhbF9ieXRlcyAhPSAyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmVnbWFwX3BhcnNlX3ZhbChy ZWcsICZ2YWwxNiwgJmJ1c192YWwpOworCisJcmV0dXJuIHZhbDE2ICE9IGJ1c192YWw7Cit9CitF WFBPUlRfU1lNQk9MKHRpbnlkcm1fcmVnbWFwX3Jhd19zd2FwX2J5dGVzKTsKKworI2lmZGVmIENP TkZJR19ERUJVR19GUworCitzdGF0aWMgaW50Cit0aW55ZHJtX2tzdHJ0b3VsX2FycmF5X2Zyb21f dXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgc2l6ZV90IGNvdW50LAorCQkJCSB1bnNpZ25lZCBp bnQgYmFzZSwKKwkJCQkgdW5zaWduZWQgbG9uZyAqdmFscywgc2l6ZV90IG51bV92YWxzKQorewor CWNoYXIgKmJ1ZiwgKnBvcywgKnRva2VuOworCWludCByZXQsIGkgPSAwOworCisJYnVmID0gbWVt ZHVwX3VzZXJfbnVsKHMsIGNvdW50KTsKKwlpZiAoSVNfRVJSKGJ1ZikpCisJCXJldHVybiBQVFJf RVJSKGJ1Zik7CisKKwlwb3MgPSBidWY7CisJd2hpbGUgKHBvcykgeworCQlpZiAoaSA9PSBudW1f dmFscykgeworCQkJcmV0ID0gLUUyQklHOworCQkJZ290byBlcnJfZnJlZTsKKwkJfQorCisJCXRv a2VuID0gc3Ryc2VwKCZwb3MsICIgIik7CisJCWlmICghdG9rZW4pIHsKKwkJCXJldCA9IC1FSU5W QUw7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisKKwkJcmV0ID0ga3N0cnRvdWwodG9rZW4sIGJh c2UsIHZhbHMrKyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfZnJlZTsKKwkJaSsrOwor CX0KKworZXJyX2ZyZWU6CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXQgPyByZXQgOiBpOwor fQorCitzdGF0aWMgc3NpemVfdCB0aW55ZHJtX3JlZ21hcF9kZWJ1Z2ZzX3JlZ193cml0ZShzdHJ1 Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJ CXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZp bGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWcgPSBtLT5wcml2YXRlOworCXVu c2lnbmVkIGxvbmcgdmFsc1syXTsKKwlpbnQgcmV0OworCisJcmV0ID0gdGlueWRybV9rc3RydG91 bF9hcnJheV9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCAxNiwgdmFscywgMik7CisJaWYgKHJl dCA8PSAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJldCA9IHJlZ21hcF93cml0ZShyZWcsIHZhbHNbMF0sIHZhbHNbMV0pOworCisJcmV0 dXJuIHJldCA8IDAgPyByZXQgOiBjb3VudDsKK30KKworc3RhdGljIGludCB0aW55ZHJtX3JlZ21h cF9kZWJ1Z2ZzX3JlZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZCkKK3sKKwlzdHJ1 Y3QgcmVnbWFwICpyZWcgPSBtLT5wcml2YXRlOworCWludCBtYXhfcmVnID0gcmVnbWFwX2dldF9t YXhfcmVnaXN0ZXIocmVnKTsKKwlpbnQgdmFsX2J5dGVzID0gcmVnbWFwX2dldF92YWxfYnl0ZXMo cmVnKTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZWduciwgcmV0OworCisJZm9yIChyZWdu ciA9IDA7IHJlZ25yIDwgbWF4X3JlZzsgcmVnbnIrKykgeworCQlzZXFfcHJpbnRmKG0sICIlLip4 OiAiLCB2YWxfYnl0ZXMgKiAyLCByZWducik7CisJCXJldCA9IHJlZ21hcF9yZWFkKHJlZywgcmVn bnIsICZ2YWwpOworCQlpZiAocmV0KQorCQkJc2VxX3B1dHMobSwgIlhYXG4iKTsKKwkJZWxzZQor CQkJc2VxX3ByaW50ZihtLCAiJS4qeFxuIiwgdmFsX2J5dGVzICogMiwgdmFsKTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW55ZHJtX3JlZ21hcF9kZWJ1Z2ZzX3JlZ19vcGVu KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJl dHVybiBzaW5nbGVfb3BlbihmaWxlLCB0aW55ZHJtX3JlZ21hcF9kZWJ1Z2ZzX3JlZ19zaG93LAor CQkJICAgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIHRpbnlkcm1fcmVnbWFwX2RlYnVnZnNfcmVnX2ZvcHMgPSB7CisJLm93bmVyID0g VEhJU19NT0RVTEUsCisJLm9wZW4gPSB0aW55ZHJtX3JlZ21hcF9kZWJ1Z2ZzX3JlZ19vcGVuLAor CS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNp bmdsZV9yZWxlYXNlLAorCS53cml0ZSA9IHRpbnlkcm1fcmVnbWFwX2RlYnVnZnNfcmVnX3dyaXRl LAorfTsKKworc3RhdGljIGludAordGlueWRybV9yZWdtYXBfZGVidWdmc19pbml0KHN0cnVjdCBy ZWdtYXAgKnJlZywgc3RydWN0IGRlbnRyeSAqcGFyZW50KQoreworCXVtb2RlX3QgbW9kZSA9IDAy MDA7CisKKwlpZiAocmVnbWFwX2dldF9tYXhfcmVnaXN0ZXIocmVnKSkKKwkJbW9kZSB8PSAwNDQ0 OworCisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVnaXN0ZXJzIiwgbW9kZSwgcGFyZW50LCByZWcs CisJCQkgICAgJnRpbnlkcm1fcmVnbWFwX2RlYnVnZnNfcmVnX2ZvcHMpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pbmZvX2xpc3QgdGlueWRybV9wYW5lbF9kZWJ1 Z2ZzbGlzdFtdID0geworCXsgImZiIiwgICBkcm1fZmJfY21hX2RlYnVnZnNfc2hvdywgMCB9LAor fTsKKworLyoqCisgKiB0aW55ZHJtX3BhbmVsX2RlYnVnZnNfaW5pdCAtIENyZWF0ZSB0aW55ZHJt IHBhbmVsIGRlYnVnZnMgZW50cmllcworICogQG1pbm9yOiBEUk0gbWlub3IKKyAqCisgKiAmdGlu eWRybV9wYW5lbCBkcml2ZXJzIGNhbiB1c2UgdGhpcyBhcyB0aGVpcgorICogJmRybV9kcml2ZXIt PmRlYnVnZnNfaW5pdCBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOgorICogWmVybyBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCB0aW55ZHJtX3Bh bmVsX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgdGlu eWRybV9kZXZpY2UgKnRkZXYgPSBtaW5vci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgdGlu eWRybV9wYW5lbCAqcGFuZWwgPSB0aW55ZHJtX3RvX3BhbmVsKHRkZXYpOworCXN0cnVjdCByZWdt YXAgKnJlZyA9IHBhbmVsLT5yZWc7CisJaW50IHJldDsKKworCWlmIChyZWcpIHsKKwkJcmV0ID0g dGlueWRybV9yZWdtYXBfZGVidWdmc19pbml0KHJlZywgbWlub3ItPmRlYnVnZnNfcm9vdCk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBkcm1fZGVidWdmc19jcmVh dGVfZmlsZXModGlueWRybV9wYW5lbF9kZWJ1Z2ZzbGlzdCwKKwkJCQkJQVJSQVlfU0laRSh0aW55 ZHJtX3BhbmVsX2RlYnVnZnNsaXN0KSwKKwkJCQkJbWlub3ItPmRlYnVnZnNfcm9vdCwgbWlub3Ip OworfQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX3BhbmVsX2RlYnVnZnNfaW5pdCk7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLXBhbmVsLmggYi9pbmNs dWRlL2RybS90aW55ZHJtL3Rpbnlkcm0tcGFuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5mYzQzNDhkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vdGlueWRy bS90aW55ZHJtLXBhbmVsLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTcgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq LworCisjaWZuZGVmIF9fTElOVVhfVElOWURSTV9QQU5FTF9ICisjZGVmaW5lIF9fTElOVVhfVElO WURSTV9QQU5FTF9ICisKKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLmg+CisKK3N0cnVj dCBiYWNrbGlnaHRfZGV2aWNlOworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCB0aW55 ZHJtX3BhbmVsOworc3RydWN0IHNwaV9kZXZpY2U7CitzdHJ1Y3QgcmVndWxhdG9yOworc3RydWN0 IGdwaW9fZGVzYzsKK3N0cnVjdCByZWdtYXA7CisKKy8qKgorICogc3RydWN0IHRpbnlkcm1fcGFu ZWxfZnVuY3MgLSB0aW55ZHJtIHBhbmVsIGZ1bmN0aW9ucworICoKKyAqIEFsbCBmdW5jdGlvbnMg YXJlIG9wdGlvbmFsLgorICovCitzdHJ1Y3QgdGlueWRybV9wYW5lbF9mdW5jcyB7CisJLyoqCisJ ICogQHByZXBhcmU6CisJICoKKwkgKiBQcmVwYXJlIGNvbnRyb2xsZXIvZGlzcGxheS4KKwkgKgor CSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBmcmFtZWJ1ZmZlciBmbHVzaGluZyBz dGFydHMuCisJICogRHJpdmVycyBjYW4gdXNlIHRoaXMgY2FsbGJhY2sgdG8gcG93ZXIgb24gYW5k IGNvbmZpZ3VyZSB0aGUKKwkgKiBjb250cm9sbGVyL2Rpc3BsYXkuCisJICogSWYgdGhpcyBpcyBu b3Qgc2V0IGFuZCAmdGlueWRybV9wYW5lbC0+cmVndWxhdG9yIGlzIHNldCwKKwkgKiB0aGUgcmVn dWxhdG9yIGlzIGVuYWJsZWQuCisJICovCisJaW50ICgqcHJlcGFyZSkoc3RydWN0IHRpbnlkcm1f cGFuZWwgKnBhbmVsKTsKKworCS8qKgorCSAqIEBlbmFibGU6CisJICoKKwkgKiBFbmFibGUgZGlz cGxheS4KKwkgKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGRpc3BsYXkg cGlwZWxpbmUgaXMgZW5hYmxlZC4KKwkgKiBEcml2ZXJzIGNhbiB1c2UgdGhpcyBjYWxsYmFjayB0 byB0dXJuIG9uIHRoZSBkaXNwbGF5LgorCSAqIElmIHRoaXMgaXMgbm90IHNldCBhbmQgJnRpbnlk cm1fcGFuZWwtPmJhY2tsaWdodCBpcyBzZXQsCisJICogdGhlIGJhY2tsaWdodCBpcyB0dXJuZWQg b24uCisJICovCisJaW50ICgqZW5hYmxlKShzdHJ1Y3QgdGlueWRybV9wYW5lbCAqcGFuZWwpOwor CisJLyoqCisJICogQGRpc2FibGU6CisJICoKKwkgKiBEaXNhYmxlIGRpc3BsYXkuCisJICoKKwkg KiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBkaXNwbGF5IHBpcGVsaW5lIGlzIGRp c2FibGVkLgorCSAqIERyaXZlcnMgY2FuIHVzZSB0aGlzIGNhbGxiYWNrIHRvIHR1cm4gb2ZmIHRo ZSBkaXNwbGF5LgorCSAqIElmIHRoaXMgaXMgbm90IHNldCBhbmQgJnRpbnlkcm1fcGFuZWwtPmJh Y2tsaWdodCBpcyBzZXQsCisJICogdGhlIGJhY2tsaWdodCBpcyB0dXJuZWQgb2ZmLgorCSAqLwor CWludCAoKmRpc2FibGUpKHN0cnVjdCB0aW55ZHJtX3BhbmVsICpwYW5lbCk7CisKKwkvKioKKwkg KiBAdW5wcmVwYXJlOgorCSAqCisJICogVW5wcmVwYXJlIGNvbnRyb2xsZXIvZGlzcGxheS4KKwkg KgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gZnJhbWVidWZmZXIgaXMgdW5zZXQg b24gdGhlIHBsYW5lLgorCSAqIERyaXZlcnMgY2FuIHVzZSB0aGlzIGNhbGxiYWNrIHRvIHBvd2Vy IGRvd24gdGhlIGNvbnRyb2xsZXIvZGlzcGxheS4KKwkgKiBJZiB0aGlzIGlzIG5vdCBzZXQgYW5k ICZ0aW55ZHJtX3BhbmVsLT5yZWd1bGF0b3IgaXMgc2V0LAorCSAqIHRoZSByZWd1bGF0b3IgaXMg ZGlzYWJsZWQuCisJICovCisJaW50ICgqdW5wcmVwYXJlKShzdHJ1Y3QgdGlueWRybV9wYW5lbCAq cGFuZWwpOworCisJLyoqCisJICogQGZsdXNoOgorCSAqCisJICogRmx1c2ggZnJhbWVidWZmZXIg dG8gY29udHJvbGxlci9kaXNwbGF5LgorCSAqCisJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg d2hlbiB0aGUgZnJhbWVidWZmZXIgaXMgZmx1c2hlZC4gVGhpcworCSAqIGhhcHBlbnMgd2hlbiB1 c2Vyc3BhY2UgY2FsbHMgaW9jdGwgRFJNX0lPQ1RMX01PREVfRElSVFlGQiwgd2hlbiB0aGUKKwkg KiBmcmFtZWJ1ZmZlciBpcyBjaGFuZ2VkIG9uIHRoZSBwbGFuZSBhbmQgd2hlbiB0aGUgcGlwZWxp bmUgaXMKKwkgKiBlbmFibGVkLiBJZiBtdWx0aXBsZSBjbGlwIHJlY3RhbmdsZXMgYXJlIHBhc3Nl ZCBpbiwgdGhleSBhcmUgbWVyZ2VkCisJICogaW50byBvbmUgcmVjdGFuZ2xlIGFuZCBwYXNzZWQg dG8gQGZsdXNoLiBObyBmbHVzaGluZyBoYXBwZW5zCisJICogZHVyaW5nIHRoZSB0aW1lIHRoZSBw aXBlbGluZSBpcyBkaXNhYmxlZC4KKwkgKi8KKwlpbnQgKCpmbHVzaCkoc3RydWN0IHRpbnlkcm1f cGFuZWwgKnBhbmVsLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJICAgICBzdHJ1Y3Qg ZHJtX2NsaXBfcmVjdCAqcmVjdCk7Cit9OworCisvKioKKyAqIHN0cnVjdCB0aW55ZHJtX3BhbmVs IC0gdGlueWRybSBwYW5lbCBkZXZpY2UKKyAqIEB0aW55ZHJtOiBCYXNlICZ0aW55ZHJtX2Rldmlj ZQorICogQGZ1bmNzOiB0aW55ZHJtIHBhbmVsIGZ1bmN0aW9ucyAob3B0aW9uYWwpCisgKiBAcmVn OiBSZWdpc3RlciBtYXAgKG9wdGlvbmFsKQorICogQGVuYWJsZWQ6IFBpcGVsaW5lIGlzIGVuYWJs ZWQKKyAqIEB0eF9idWY6IFRyYW5zbWl0IGJ1ZmZlcgorICogQHN3YXBfYnl0ZXM6IFN3YXAgcGl4 ZWwgZGF0YSBieXRlcworICogQGFsd2F5c190eF9idWY6IEFsd2F5cyB1c2UgQHR4X2J1ZgorICog QHJvdGF0aW9uOiBSb3RhdGlvbiBpbiBkZWdyZWVzIENvdW50ZXIgQ2xvY2sgV2lzZQorICogQHJl c2V0OiBPcHRpb25hbCByZXNldCBncGlvCisgKiBAYmFja2xpZ2h0OiBPcHRpb25hbCBiYWNrbGln aHQgZGV2aWNlCisgKiBAcmVndWxhdG9yOiBPcHRpb25hbCByZWd1bGF0b3IKKyAqLworc3RydWN0 IHRpbnlkcm1fcGFuZWwgeworCXN0cnVjdCB0aW55ZHJtX2RldmljZSB0aW55ZHJtOworCWNvbnN0 IHN0cnVjdCB0aW55ZHJtX3BhbmVsX2Z1bmNzICpmdW5jczsKKwlzdHJ1Y3QgcmVnbWFwICpyZWc7 CisJYm9vbCBlbmFibGVkOworCXZvaWQgKnR4X2J1ZjsKKwlib29sIHN3YXBfYnl0ZXM7CisJYm9v bCBhbHdheXNfdHhfYnVmOworCXVuc2lnbmVkIGludCByb3RhdGlvbjsKKwlzdHJ1Y3QgZ3Bpb19k ZXNjICpyZXNldDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OworCXN0cnVj dCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbnlk cm1fcGFuZWwgKgordGlueWRybV90b19wYW5lbChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYp Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0ZGV2LCBzdHJ1Y3QgdGlueWRybV9wYW5lbCwgdGlu eWRybSk7Cit9CisKK2ludCB0aW55ZHJtX3BhbmVsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgdGlueWRybV9wYW5lbCAqcGFuZWwsCisJCQljb25zdCBzdHJ1Y3QgdGlueWRybV9wYW5l bF9mdW5jcyAqZnVuY3MsCisJCQljb25zdCB1aW50MzJfdCAqZm9ybWF0cywgdW5zaWduZWQgaW50 IGZvcm1hdF9jb3VudCwKKwkJCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIsCisJCQljb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCXVuc2lnbmVkIGludCByb3RhdGlvbik7 CisKK3ZvaWQgKnRpbnlkcm1fcGFuZWxfcmdiNTY1X2J1ZihzdHJ1Y3QgdGlueWRybV9wYW5lbCAq cGFuZWwsCisJCQkgICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgICAg c3RydWN0IGRybV9jbGlwX3JlY3QgKnJlY3QpOworCitpbnQgdGlueWRybV9wYW5lbF9wbV9zdXNw ZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgdGlueWRybV9wYW5lbF9wbV9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgdGlueWRybV9wYW5lbF9zcGlfc2h1dGRvd24oc3RydWN0 IHNwaV9kZXZpY2UgKnNwaSk7Cit2b2lkIHRpbnlkcm1fcGFuZWxfaTJjX3NodXRkb3duKHN0cnVj dCBpMmNfY2xpZW50ICppMmMpOwordm9pZCB0aW55ZHJtX3BhbmVsX3BsYXRmb3JtX3NodXRkb3du KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCitib29sIHRpbnlkcm1fcmVnbWFwX3Jh d19zd2FwX2J5dGVzKHN0cnVjdCByZWdtYXAgKnJlZyk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdf RlMKK2ludCB0aW55ZHJtX3BhbmVsX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5v cik7CisjZWxzZQorI2RlZmluZSB0aW55ZHJtX3BhbmVsX2RlYnVnZnNfaW5pdAlOVUxMCisjZW5k aWYKKworI2VuZGlmIC8qIF9fTElOVVhfVElOWURSTV9QQU5FTF9IICovCi0tIAoyLjEwLjIKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=