From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Hean Loong, Ong" Subject: [PATCHv5 3/3] ARM:drm ivip Intel FPGA Video and Image Processing Suite Date: Thu, 3 Aug 2017 13:01:36 +0800 Message-ID: <1501736496-4118-4-git-send-email-hean.loong.ong@intel.com> References: <1501736496-4118-1-git-send-email-hean.loong.ong@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1501736496-4118-1-git-send-email-hean.loong.ong@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring , Dinh Nguyen , Daniel Vetter , Laurent Pinchart Cc: hean.loong.ong@intel.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: devicetree@vger.kernel.org RnJvbTogT25nIEhlYW4gTG9vbmcgPGhlYW4ubG9vbmcub25nQGludGVsLmNvbT4KClNpZ25lZC1v ZmYtYnk6IE9uZyBIZWFuIExvb25nIDxoZWFuLmxvb25nLm9uZ0BpbnRlbC5jb20+Ci0tLQpWNToK KkZpeCBDb21tZW50cwoKVjQ6CipGaXggQ29tbWVudHMKClYzOgoqQ2hhbmdlcyB0byBmaXhpbmcg ZHJtX3NpbXBsZV9waXBlCipVc2VkIGRybV9mYl9jbWFfZ2V0X2dlbV9hZGRyCgpWMjoKKkFkZGlu ZyBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0CgotLS0KIGRyaXZlcnMvZ3B1L2RybS9LY29u ZmlnICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaXZpcC9LY29uZmlnICAgICAgICAgIHwg IDEzICsrKwogZHJpdmVycy9ncHUvZHJtL2l2aXAvTWFrZWZpbGUgICAgICAgICB8ICAgOSArKwog ZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX2Nvbm4uYyB8ICA5NiArKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX2NvcmUuYyB8IDE2MiArKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92aXBfZHJ2 LmggIHwgIDUyICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX29mLmMg ICB8IDE5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5n ZWQsIDUyOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2l2aXAvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pdmlwL01h a2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlw X2Nvbm4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3Zp cF9jb3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92 aXBfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92 aXBfb2YuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKaW5kZXggODNjYjJhOC4uMzhhMTg0ZCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTE5NSw2 ICsxOTUsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWciCiAKIHNv dXJjZSAiZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dw dS9kcm0vaXZpcC9LY29uZmlnIgorCiBjb25maWcgRFJNX1ZHRU0KIAl0cmlzdGF0ZSAiVmlydHVh bCBHRU0gcHJvdmlkZXIiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAyNGEwNjZlLi40 MTYyYTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCkBAIC01OCw2ICs1OCw3IEBAIG9iai0kKENPTkZJR19EUk1fQU1E R1BVKSs9IGFtZC9hbWRncHUvCiBvYmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwogb2JqLSQo Q09ORklHX0RSTV9JODEwKQkrPSBpODEwLwogb2JqLSQoQ09ORklHX0RSTV9JOTE1KQkrPSBpOTE1 Lworb2JqLSQoQ09ORklHX0RSTV9JVklQKSArPSBpdmlwLwogb2JqLSQoQ09ORklHX0RSTV9NR0FH MjAwKSArPSBtZ2FnMjAwLwogb2JqLSQoQ09ORklHX0RSTV9WQzQpICArPSB2YzQvCiBvYmotJChD T05GSUdfRFJNX0NJUlJVU19RRU1VKSArPSBjaXJydXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaXZpcC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2l2aXAvS2NvbmZpZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YThjNWNlCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2l2aXAvS2NvbmZpZwpAQCAtMCwwICsxLDEzIEBACitjb25maWcgRFJN X0lWSVAKKyAgICAgICAgdHJpc3RhdGUgIkludGVsIEZHUEEgVmlkZW8gYW5kIEltYWdlIFByb2Nl c3NpbmciCisgICAgICAgIGRlcGVuZHMgb24gRFJNICYmIE9GCisgICAgICAgIHNlbGVjdCBEUk1f R0VNX0NNQV9IRUxQRVIKKyAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSCisgICAgICAgIHNl bGVjdCBEUk1fS01TX0ZCX0hFTFBFUgorICAgICAgICBzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVS CisgICAgICAgIGhlbHAKKyAgICAgICAgICAgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2 ZSBhIEludGVsIEZQR0EgQXJyaWEgMTAgc3lzdGVtCisgICAgICAgICAgICBhbmQgYWJvdmUgd2l0 aCBhIERpc3BsYXkgUG9ydCBJUC4gVGhpcyBkb2VzIG5vdCBzdXBwb3J0IGxlZ2FjeQorICAgICAg ICAgICAgSW50ZWwgRlBHQSBDeWNsb25lIFYgZGlzcGxheSBwb3J0LiBDdXJyZW50bHkgb25seSBz aW5nbGUgZnJhbWUKKyAgICAgICAgICAgIGJ1ZmZlciBpcyBzdXBwb3J0ZWQuIE5vdGUgdGhhdCBB Q1BJIGFuZCBYXzg2IGFyY2hpdGVjdHVyZSBpcyB5ZXQKKyAgICAgICAgICAgIHRvIGJlIHN1cHBv cnRlZC5JZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd291bGQgYmUgY2FsbGVkIGl2aXAuCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXZpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9pdmlwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Mjkx YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXZpcC9NYWtlZmlsZQpAQCAt MCwwICsxLDkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBkcm0gZGV2aWNlIGRyaXZlci4gIFRo aXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZQorIyBEaXJlY3QgUmVuZGVyaW5nIElu ZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlci4KKworY2NmbGFn cy15IDo9IC1JaW5jbHVkZS9kcm0KKworb2JqLSQoQ09ORklHX0RSTV9JVklQKSArPSBpdmlwLm8K K2l2aXAtb2JqcyA6PSBpbnRlbF92aXBfb2YubyBpbnRlbF92aXBfY29yZS5vIFwKK2ludGVsX3Zp cF9jb25uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3ZpcF9jb25u LmMgYi9kcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92aXBfY29ubi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OGRmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaXZpcC9pbnRlbF92aXBfY29ubi5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBp bnRlbF92aXBfY29ubi5jIC0tIEludGVsIFZpZGVvIGFuZCBJbWFnZSBQcm9jZXNzaW5nKFZJUCkK KyAqIEZyYW1lIEJ1ZmZlciBJSSBkcml2ZXIKKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0 aGUgSW50ZWwgVklQIEZyYW1lIFJlYWRlciBjb21wb25lbnQuCisgKiBNb3JlIGluZm8gb24gdGhl IGhhcmR3YXJlIGNhbiBiZSBmb3VuZCBpbiB0aGUgSW50ZWwgVmlkZW8KKyAqIGFuZCBJbWFnZSBQ cm9jZXNzaW5nIFN1aXRlIFVzZXIgR3VpZGUgYXQgdGhpcyBhZGRyZXNzCisgKiBodHRwOi8vd3d3 LmFsdGVyYS5jb20vbGl0ZXJhdHVyZS91Zy91Z192aXAucGRmLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg b3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBBdXRob3Jz OgorICogT25nLCBIZWFuLUxvb25nIDxoZWFuLmxvb25nLm9uZ0BpbnRlbC5jb20+CisgKgorICov CisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlcl9zbGF2ZS5oPgorI2luY2x1ZGUg PGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzCitpbnRlbHZpcGZiX2RybV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBpbnRlbHZpcGZiX2RybV9jb25uZWN0b3JfZGVzdHJv eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfdW5y ZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgaW50ZWx2aXBmYl9k cm1fY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2RwbXMsCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAor CS5kZXRlY3QgPSBpbnRlbHZpcGZiX2RybV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21vZGVz ID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0g aW50ZWx2aXBmYl9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ksCisJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9t aWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0 YXRlLAorfTsKKworc3RhdGljIGludCBpbnRlbHZpcGZiX2RybV9jb25uZWN0b3JfZ2V0X21vZGVz KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9IGNvbm5lY3Rvci0+ZGV2OworCWludCBjb3VudDsKKworCWNvdW50ID0gZHJtX2FkZF9t b2Rlc19ub2VkaWQoY29ubmVjdG9yLCBkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCwKKwkJCWRy bS0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7CisJZHJtX3NldF9wcmVmZXJyZWRfbW9kZShjb25u ZWN0b3IsIGRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoLAorCQkJZHJtLT5tb2RlX2NvbmZpZy5t YXhfaGVpZ2h0KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKK2ludGVsdmlwZmJfZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGludGVsdmlwZmJfZHJtX2Nvbm5lY3Rvcl9nZXRfbW9k ZXMsCit9OworCitzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqCitpbnRlbHZpcGZiX2Nvbm5fc2V0dXAo c3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsK KwlpbnQgcmV0OworCisJY29ubiA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCpjb25u KSwgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjb25uKSkKKwkJcmV0dXJuIE5VTEw7CisKKwly ZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJtLCBjb25uLCAmaW50ZWx2aXBmYl9kcm1fY29ubmVj dG9yX2Z1bmNzLAorCQkJRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KTsKKwlpZiAocmV0 IDwgMCkgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGNv bm5lY3RvclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfY29ubmVjdG9yX2Ns ZWFudXA7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm4sICZpbnRlbHZpcGZi X2RybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiBjb25uOworCitlcnJvcl9j b25uZWN0b3JfY2xlYW51cDoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubik7CisKKwlyZXR1 cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3ZpcF9j b3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92aXBfY29yZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDNjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92aXBfY29yZS5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgor ICogaW50ZWxfdmlwX2NvcmUuYyAtLSBJbnRlbCBWaWRlbyBhbmQgSW1hZ2UgUHJvY2Vzc2luZyhW SVApCisgKiBGcmFtZSBCdWZmZXIgSUkgZHJpdmVyCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9y dHMgdGhlIEludGVsIFZJUCBGcmFtZSBSZWFkZXIgY29tcG9uZW50LgorICogTW9yZSBpbmZvIG9u IHRoZSBoYXJkd2FyZSBjYW4gYmUgZm91bmQgaW4gdGhlIEludGVsIFZpZGVvCisgKiBhbmQgSW1h Z2UgUHJvY2Vzc2luZyBTdWl0ZSBVc2VyIEd1aWRlIGF0IHRoaXMgYWRkcmVzcworICogaHR0cDov L3d3dy5hbHRlcmEuY29tL2xpdGVyYXR1cmUvdWcvdWdfdmlwLnBkZi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM SVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogQXV0 aG9yczoKKyAqIE9uZywgSGVhbi1Mb29uZyA8aGVhbi5sb29uZy5vbmdAaW50ZWwuY29tPgorICoK KyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1 ZGUgImludGVsX3ZpcF9kcnYuaCIKKworc3RhdGljIHZvaWQgaW50ZWx2aXBmYl9lbmFibGUoc3Ry dWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCSAgICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJLyoKKwkgKiBUaGUgZnJhbWVpbmZvIHZhcmlhYmxl IGhhcyB0byBjb3JyZXNwb25kIHRvIHRoZSBzaXplIG9mIHRoZSBWSVAgU3VpdGUKKwkgKiBGcmFt ZSBSZWFkZXIgcmVnaXN0ZXIgNyB3aGljaCB3aWxsIGRldGVybWluZSB0aGUgbWF4aW11bSBzaXpl IHVzZWQKKwkgKiBpbiB0aGlzIGZyYW1laW5mbworCSAqLworCisJdTMyIGZyYW1laW5mbzsKKwlz dHJ1Y3QgaW50ZWx2aXBmYl9wcml2ICpwcml2ID0gcGlwZS0+cGxhbmUuZGV2LT5kZXZfcHJpdmF0 ZTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwcml2LT5iYXNlOworCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlID0gcGlwZS0+cGxhbmUuc3RhdGU7CisJZG1hX2FkZHJfdCBhZGRyOworCisJ YWRkciA9IGRybV9mYl9jbWFfZ2V0X2dlbV9hZGRyKHN0YXRlLT5mYiwgc3RhdGUsIDApOworCisJ ZGV2X2luZm8ocGlwZS0+cGxhbmUuZGV2LT5kZXYsICJBZGRyZXNzIDB4JXhcbiIsIGFkZHIpOwor CisJZnJhbWVpbmZvID0KKwkJcmVhZGwoYmFzZSArIElOVEVMVklQRkJfRlJBTUVfUkVBREVSKSAm IDB4MDBmZmZmZmY7CisJd3JpdGVsKGZyYW1laW5mbywgYmFzZSArIElOVEVMVklQRkJfRlJBTUVf SU5GTyk7CisJd3JpdGVsKGFkZHIsIGJhc2UgKyBJTlRFTFZJUEZCX0ZSQU1FX1NUQVJUKTsKKwkv KiBGaW5hbGx5IHNldCB0aGUgY29udHJvbCByZWdpc3RlciB0byAxIHRvIHN0YXJ0IHN0cmVhbWlu ZyAqLworCXdyaXRlbCgxLCBiYXNlICsgSU5URUxWSVBGQl9DT05UUk9MKTsKK30KKworc3RhdGlj IHZvaWQgaW50ZWx2aXBmYl9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAq cGlwZSkKK3sKKwlzdHJ1Y3QgaW50ZWx2aXBmYl9wcml2ICpwcml2ID0gcGlwZS0+cGxhbmUuZGV2 LT5kZXZfcHJpdmF0ZTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwcml2LT5iYXNlOworCS8qIHNl dCB0aGUgY29udHJvbCByZWdpc3RlciB0byAwIHRvIHN0b3Agc3RyZWFtaW5nICovCisJd3JpdGVs KDAsIGJhc2UgKyBJTlRFTFZJUEZCX0NPTlRST0wpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBpbnRlbHZpcGZiX21vZGVfY29uZmlnX2Z1bmNzID0gewor CS5mYl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0 b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9j b21taXQsCit9OworCitzdGF0aWMgdm9pZCBpbnRlbHZpcGZiX3NldHVwX21vZGVfY29uZmlnKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKKwlk cm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJmludGVsdmlwZmJfbW9kZV9jb25maWdfZnVuY3M7Cit9 CisKK3N0YXRpYyBpbnQgaW50ZWx2aXBmYl9waXBlX3ByZXBhcmVfZmIoc3RydWN0IGRybV9zaW1w bGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQoreworCXJldHVybiBkcm1fZmJfY21hX3ByZXBhcmVfZmIoJnBpcGUtPnBsYW5lLCBw bGFuZV9zdGF0ZSk7Cit9CisKKworc3RhdGljIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlw ZV9mdW5jcyBmYnByaXZfZnVuY3MgPSB7CisJLnByZXBhcmVfZmIgPSBpbnRlbHZpcGZiX3BpcGVf cHJlcGFyZV9mYiwKKwkuZW5hYmxlID0gaW50ZWx2aXBmYl9lbmFibGUsCisJLmRpc2FibGUgPSBp bnRlbHZpcGZiX2Rpc2FibGUKK307CisKK2ludCBpbnRlbHZpcGZiX3Byb2JlKHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJc3Ry dWN0IGludGVsdmlwZmJfcHJpdiAqZmJwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwl1MzIgZm9ybWF0c1tdID0ge0RSTV9GT1JN QVRfWFJHQjg4ODh9OworCisJZHJtID0gZmJwcml2LT5kcm07CisKKwlkcm0tPmRldl9wcml2YXRl ID0gZmJwcml2OworCisJaW50ZWx2aXBmYl9zZXR1cF9tb2RlX2NvbmZpZyhkcm0pOworCisJY29u bmVjdG9yID0gaW50ZWx2aXBmYl9jb25uX3NldHVwKGRybSk7CisJaWYgKCFjb25uZWN0b3IpIHsK KwkJZGV2X2Vycihkcm0tPmRldiwgIkNvbm5lY3RvciBzZXR1cCBmYWlsZWRcbiIpOworCQlnb3Rv IGVycl9tb2RlX2NvbmZpZzsKKwl9CisKKwlyZXR2YWwgPSBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlw ZV9pbml0KGRybSwgJmZicHJpdi0+cGlwZSwKKwkJCSZmYnByaXZfZnVuY3MsIGZvcm1hdHMsCisJ CQlBUlJBWV9TSVpFKGZvcm1hdHMpLCBjb25uZWN0b3IpOworCWlmIChyZXR2YWwgPCAwKSB7CisJ CWRldl9lcnIoZHJtLT5kZXYsICJDYW5ub3Qgc2V0dXAgc2ltcGxlIGRpc3BsYXkgcGlwZVxuIik7 CisJCWdvdG8gZXJyX21vZGVfY29uZmlnOworCX0KKworCWZicHJpdi0+ZmJjbWEgPSBkcm1fZmJk ZXZfY21hX2luaXQoZHJtLAorCQkJZHJtLT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGgsCisJ CQlkcm0tPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpOworCisJZHJtX21vZGVfY29uZmlnX3Jl c2V0KGRybSk7CisKKwlkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisKKwlyZXR1cm4gcmV0dmFs OworCitlcnJfbW9kZV9jb25maWc6CisKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwor CXJldHVybiAtRU5PREVWOworfQorCitpbnQgaW50ZWx2aXBmYl9yZW1vdmUoc3RydWN0IGRldmlj ZSAqZGV2KQoreworCXN0cnVjdCBpbnRlbHZpcGZiX3ByaXYgKmZicHJpdiA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSAgZmJwcml2LT5kcm07CisKKwlk cm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKKworCWlmIChmYnByaXYtPmZiY21hKQorCQlkcm1fZmJk ZXZfY21hX2ZpbmkoZmJwcml2LT5mYmNtYSk7CisKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChk cm0pOworCWRybV9kZXZfdW5yZWYoZHJtKTsKKworCXJldHVybiAwOworfQorCitNT0RVTEVfQVVU SE9SKCJPbmcsIEhlYW4tTG9vbmcgPGhlYW4ubG9vbmcub25nQGludGVsLmNvbT4iKTsKK01PRFVM RV9ERVNDUklQVElPTigiSW50ZWwgVklQIEZyYW1lIEJ1ZmZlciBJSSBkcml2ZXIiKTsKK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2lu dGVsX3ZpcF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3ZpcF9kcnYuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTM1NTVkCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX2Rydi5oCkBAIC0wLDAgKzEsNTIgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogSW50 ZWwgVmlkZW8gYW5kIEltYWdlIFByb2Nlc3NpbmcoVklQKSBGcmFtZSBCdWZmZXIgSUkgZHJpdmVy LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0 YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogQXV0aG9yczoK KyAqIE9uZywgSGVhbi1Mb29uZyA8aGVhbi5sb29uZy5vbmdAaW50ZWwuY29tPgorICoKKyAqLwor I2lmbmRlZiBfSU5URUxfVklQX0RSVl9ICisjZGVmaW5lIF9JTlRFTF9WSVBfRFJWX0gKKworI2Rl ZmluZSBEUklWRVJfTkFNRSAgICAiaW50ZWx2aXBmYiIKKyNkZWZpbmUgQllURVNfUEVSX1BJWEVM CSA0CisjZGVmaW5lIENSVENfTlVNCSAgICAgICAgMQorI2RlZmluZSBDT05OX05VTQkgICAgICAg IDEKKworLyogY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSU5URUxWSVBGQl9DT05UUk9M CSAgICAgIDAKKyNkZWZpbmUgSU5URUxWSVBGQl9TVEFUVVMJICAgICAgIDB4NAorI2RlZmluZSBJ TlRFTFZJUEZCX0lOVEVSUlVQVAkgICAgMHg4CisjZGVmaW5lIElOVEVMVklQRkJfRlJBTUVfQ09V TlRFUgkweEMKKyNkZWZpbmUgSU5URUxWSVBGQl9GUkFNRV9EUk9QCSAgIDB4MTAKKyNkZWZpbmUg SU5URUxWSVBGQl9GUkFNRV9JTkZPCSAgIDB4MTQKKyNkZWZpbmUgSU5URUxWSVBGQl9GUkFNRV9T VEFSVAkgIDB4MTgKKyNkZWZpbmUgSU5URUxWSVBGQl9GUkFNRV9SRUFERVIJICAgICAgICAgMHgx QworCitpbnQgaW50ZWx2aXBmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IGludGVs dmlwZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgaW50ZWx2aXBmYl9zZXR1cF9j cnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOworc3RydWN0IGRybV9jb25uZWN0b3IgKmludGVs dmlwZmJfY29ubl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKKworc3RydWN0IGludGVs dmlwZmJfcHJpdiB7CisJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlIHBpcGU7CisJc3Ry dWN0IGRybV9mYmRldl9jbWEgKmZiY21hOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJdm9p ZCAgICBfX2lvbWVtICpiYXNlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaXZpcC9pbnRlbF92aXBfb2YuYyBiL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3Zp cF9vZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NmY3ODkKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92aXBfb2YuYwpAQCAtMCww ICsxLDE5NCBAQAorLyoKKyAqIGludGVsX3ZpcF9vZi5jIC0tIEludGVsIFZpZGVvIGFuZCBJbWFn ZSBQcm9jZXNzaW5nKFZJUCkKKyAqIEZyYW1lIEJ1ZmZlciBJSSBkcml2ZXIKKyAqCisgKiBUaGlz IGRyaXZlciBzdXBwb3J0cyB0aGUgSW50ZWwgVklQIEZyYW1lIFJlYWRlciBjb21wb25lbnQuCisg KiBNb3JlIGluZm8gb24gdGhlIGhhcmR3YXJlIGNhbiBiZSBmb3VuZCBpbiB0aGUgSW50ZWwgVmlk ZW8KKyAqIGFuZCBJbWFnZSBQcm9jZXNzaW5nIFN1aXRlIFVzZXIgR3VpZGUgYXQgdGhpcyBhZGRy ZXNzCisgKiBodHRwOi8vd3d3LmFsdGVyYS5jb20vbGl0ZXJhdHVyZS91Zy91Z192aXAucGRmLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqCisgKiBBdXRob3JzOgorICogT25nLCBIZWFuLUxvb25nIDxoZWFuLmxvb25nLm9uZ0Bp bnRlbC5jb20+CisgKgorICovCisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fc2lt cGxlX2ttc19oZWxwZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2lu Y2x1ZGUgImludGVsX3ZpcF9kcnYuaCIKKworREVGSU5FX0RSTV9HRU1fQ01BX0ZPUFMoZHJtX2Zv cHMpOworCitzdGF0aWMgdm9pZCBpbnRlbHZpcGZiX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtKQoreworCXN0cnVjdCBpbnRlbHZpcGZiX3ByaXYgKnByaXYgPSBkcm0tPmRldl9wcml2 YXRlOworCisJZHJtX2ZiZGV2X2NtYV9yZXN0b3JlX21vZGUocHJpdi0+ZmJjbWEpOworfQorCitz dGF0aWMgc3RydWN0IGRybV9kcml2ZXIgaW50ZWx2aXBmYl9kcm0gPSB7CisJLmRyaXZlcl9mZWF0 dXJlcyA9CisJCQlEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfAorCQkJRFJJVkVSX1BSSU1F IHwgRFJJVkVSX0FUT01JQywKKwkuZ2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkID0gZHJtX2dlbV9j bWFfZnJlZV9vYmplY3QsCisJLmdlbV92bV9vcHMgPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAorCS5k dW1iX2NyZWF0ZSA9IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlLAorCS5kdW1iX21hcF9vZmZzZXQg PSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCisJLmR1bWJfZGVzdHJveSA9IGRybV9nZW1f ZHVtYl9kZXN0cm95LAorCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRs ZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5k bGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3By aW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3Rh YmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0 X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJp bWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCisJLmdlbV9wcmltZV92dW5tYXAgPSBk cm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCisJLmdlbV9wcmltZV9tbWFwID0gZHJtX2dlbV9jbWFf cHJpbWVfbW1hcCwKKwkubGFzdGNsb3NlID0gaW50ZWx2aXBmYl9sYXN0Y2xvc2UsCisJLm5hbWUg PSBEUklWRVJfTkFNRSwKKwkuZGF0ZSA9ICIyMDE3MDcyOSIsCisJLmRlc2MgPSAiSW50ZWwgRlBH QSBWSVAgU1VJVEUiLAorCS5tYWpvciA9IDEsCisJLm1pbm9yID0gMCwKKwkuaW9jdGxzID0gTlVM TCwKKwkucGF0Y2hsZXZlbCA9IDAsCisJLmZvcHMgPSAmZHJtX2ZvcHMsCit9OworCisvKgorICog U2V0dGluZyB1cCBpbmZvcm1hdGlvbiBkZXJpdmVkIGZyb20gT0YgRGV2aWNlIFRyZWUgTm9kZXMK KyAqIG1heC13aWR0aCwgbWF4LWhlaWdodCwgYml0cyBwZXIgcGl4ZWwsIG1lbW9yeSBwb3J0IHdp ZHRoCisgKi8KKworc3RhdGljIGludCBpbnRlbHZpcGZiX2RybV9zZXR1cChzdHJ1Y3QgZGV2aWNl ICpkZXYsCisJCQkJc3RydWN0IGludGVsdmlwZmJfcHJpdiAqZmJwcml2KQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSBmYnByaXYtPmRybTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0g ZGV2LT5vZl9ub2RlOworCWludCBtZW1fd29yZF93aWR0aDsKKwlpbnQgbWF4X2gsIG1heF93Owor CWludCByZXQ7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFsdHIsbWF4LXdp ZHRoIiwgJm1heF93KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LAorCQkJIk1pc3Npbmcg cmVxdWlyZWQgcGFyYW1ldGVyICdhbHRyLG1heC13aWR0aCciKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFsdHIsbWF4LWhlaWdodCIsICZt YXhfaCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJNaXNzaW5nIHJlcXVpcmVk IHBhcmFtZXRlciAnYWx0cixtYXgtaGVpZ2h0JyIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYWx0cixtZW0tcG9ydC13aWR0aCIsICZtZW1f d29yZF93aWR0aCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgcmVxdWly ZWQgcGFyYW1ldGVyICdhbHRyLG1lbS1wb3J0LXdpZHRoICciKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlpZiAoIShtZW1fd29yZF93aWR0aCA+PSAzMiAmJiBtZW1fd29yZF93aWR0aCAlIDMyID09 IDApKSB7CisJCWRldl9lcnIoZGV2LAorCQkJIm1lbS13b3JkLXdpZHRoIGlzIHNldCB0byAlaS4g bXVzdCBiZSA+PSAzMiBhbmQgbXVsdGlwbGUgb2YgMzIuIiwKKwkJCSBtZW1fd29yZF93aWR0aCk7 CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0g NjQwOworCWRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDQ4MDsKKwlkcm0tPm1vZGVfY29u ZmlnLm1heF93aWR0aCA9IG1heF93OworCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IG1h eF9oOworCWRybS0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gMzI7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBpbnRlbHZpcGZiX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ19yZXM7 CisJc3RydWN0IGludGVsdmlwZmJfcHJpdiAqZmJwcml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKworCWZicHJpdiA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqZmJwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYnByaXYp CisJCXJldHVybiAtRU5PTUVNOworCisJLypzZXR1cCBEUk0gKi8KKwlkcm0gPSBkcm1fZGV2X2Fs bG9jKCZpbnRlbHZpcGZiX2RybSwgZGV2KTsKKwlpZiAoSVNfRVJSKGRybSkpCisJCXJldHVybiBQ VFJfRVJSKGRybSk7CisKKwlyZXR2YWwgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRybS0+ ZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gLUVOT0RFVjsK KworCWZicHJpdi0+ZHJtID0gZHJtOworCisJcmVnX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZWdfcmVzKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWZicHJpdi0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ19y ZXMpOworCisJaWYgKElTX0VSUihmYnByaXYtPmJhc2UpKSB7CisJCWRldl9lcnIoZGV2LCAiZGV2 bV9pb3JlbWFwX3Jlc291cmNlIGZhaWxlZFxuIik7CisJCXJldHZhbCA9IFBUUl9FUlIoZmJwcml2 LT5iYXNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW50ZWx2aXBmYl9kcm1fc2V0dXAo ZGV2LCBmYnByaXYpOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgZmJwcml2KTsKKworCXJldHVy biBpbnRlbHZpcGZiX3Byb2JlKGRldik7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWx2aXBmYl9vZl9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gaW50ZWx2aXBm Yl9yZW1vdmUoJnBkZXYtPmRldik7Cit9CisKKy8qCisgKiBUaGUgbmFtZSB2aXAtZnJhbWUtYnVm ZmVyLTIuMCBpcyBkZXJpdmVkIGZyb20KKyAqIGh0dHA6Ly93d3cuYWx0ZXJhLmNvbS9saXRlcmF0 dXJlL3VnL3VnX3ZpcC5wZGYKKyAqIGZyYW1lIGJ1ZmZlciBJUCBjb3JlcyBzZWN0aW9uIDE0Cisg Ki8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW50ZWx2aXBmYl9vZl9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYWx0cix2aXAtZnJhbWUtYnVmZmVyLTIuMCIgfSwK Kwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGludGVsdmlwZmJfb2ZfbWF0Y2gp OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbnRlbHZpcGZiX2RyaXZlciA9IHsK KwkucHJvYmUgPSBpbnRlbHZpcGZiX29mX3Byb2JlLAorCS5yZW1vdmUgPSBpbnRlbHZpcGZiX29m X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkub2ZfbWF0 Y2hfdGFibGUgPSBpbnRlbHZpcGZiX29mX21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZv cm1fZHJpdmVyKGludGVsdmlwZmJfZHJpdmVyKTsKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK