From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Hean-Loong, Ong" Subject: [PATCHv6 3/3] ARM:drm ivip Intel FPGA Video and Image Processing Suite Date: Fri, 11 Aug 2017 14:49:47 +0800 Message-ID: <1502434187-6407-4-git-send-email-hean.loong.ong@intel.com> References: <1502434187-6407-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: <1502434187-6407-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 , Randy Dunlap Cc: hean.loong.ong@intel.com, devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org RnJvbTogT25nIEhlYW4gTG9vbmcgPGhlYW4ubG9vbmcub25nQGludGVsLmNvbT4KCkRyaXZlciBm b3IgSW50ZWwgRlBHQSBWaWRlbyBhbmQgSW1hZ2UgUHJvY2Vzc2luZyBTdWl0ZSBGcmFtZSBCdWZm ZXIgSUkuClRoZSBkcml2ZXIgb25seSBzdXBwb3J0cyB0aGUgSW50ZWwgQXJyaWExMCBkZXZraXQg YW5kIGl0cyB2YXJpYW50cy4KVGhpcyBkcml2ZXIgY2FuIGJlIGVpdGhlciBsb2FkZWQgc3RhdGlj bGx5IG9yIGluIG1vZHVsZXMuClRoZSBPRiBkZXZpY2UgdHJlZSBiaW5kaW5nIGlzIGxvY2F0ZWQg YXQ6CkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2FsdHIsdmlwLWZi Mi50eHQKClNpZ25lZC1vZmYtYnk6IE9uZyBIZWFuIExvb25nIDxoZWFuLmxvb25nLm9uZ0BpbnRl bC5jb20+Ci0tLQpWNjoKKkZpeCBDb21tZW50cyBmb3IgTWFrZWZpbGUgYW5kIEtjb25maWcKClY1 OgoqRml4IENvbW1lbnRzCgpWNDoKKkZpeCBDb21tZW50cwoKVjM6CipDaGFuZ2VzIHRvIGZpeGlu ZyBkcm1fc2ltcGxlX3BpcGUKKlVzZWQgZHJtX2ZiX2NtYV9nZXRfZ2VtX2FkZHIKClYyOgoqQWRk aW5nIGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQKCi0tLQotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl ICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaXZpcC9LY29uZmlnICAgICAg ICAgIHwgIDE0ICsrKwogZHJpdmVycy9ncHUvZHJtL2l2aXAvTWFrZWZpbGUgICAgICAgICB8ICAg OSArKwogZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX2Nvbm4uYyB8ICA5NiArKysrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX2NvcmUuYyB8IDE2MiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92 aXBfZHJ2LmggIHwgIDUyICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlw X29mLmMgICB8IDE5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVz IGNoYW5nZWQsIDUzMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2l2aXAvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p dmlwL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50 ZWxfdmlwX2Nvbm4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pdmlwL2lu dGVsX3ZpcF9jb3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXZpcC9p bnRlbF92aXBfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXZpcC9p bnRlbF92aXBfb2YuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJp dmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggODNjYjJhOC4uMzhhMTg0ZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAg LTE5NSw2ICsxOTUsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWci CiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZyIKIAorc291cmNlICJkcml2 ZXJzL2dwdS9kcm0vaXZpcC9LY29uZmlnIgorCiBjb25maWcgRFJNX1ZHRU0KIAl0cmlzdGF0ZSAi VmlydHVhbCBHRU0gcHJvdmlkZXIiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAyNGEw NjZlLi40MTYyYTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC01OCw2ICs1OCw3IEBAIG9iai0kKENPTkZJR19E Uk1fQU1ER1BVKSs9IGFtZC9hbWRncHUvCiBvYmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwog b2JqLSQoQ09ORklHX0RSTV9JODEwKQkrPSBpODEwLwogb2JqLSQoQ09ORklHX0RSTV9JOTE1KQkr PSBpOTE1Lworb2JqLSQoQ09ORklHX0RSTV9JVklQKSArPSBpdmlwLwogb2JqLSQoQ09ORklHX0RS TV9NR0FHMjAwKSArPSBtZ2FnMjAwLwogb2JqLSQoQ09ORklHX0RSTV9WQzQpICArPSB2YzQvCiBv YmotJChDT05GSUdfRFJNX0NJUlJVU19RRU1VKSArPSBjaXJydXMvCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaXZpcC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2l2aXAvS2NvbmZpZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThjOWFiCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2l2aXAvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25m aWcgRFJNX0lWSVAKKyAgICAgICAgdHJpc3RhdGUgIkludGVsIEZHUEEgVmlkZW8gYW5kIEltYWdl IFByb2Nlc3NpbmciCisgICAgICAgIGRlcGVuZHMgb24gRFJNICYmIE9GCisgICAgICAgIHNlbGVj dCBEUk1fR0VNX0NNQV9IRUxQRVIKKyAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSCisgICAg ICAgIHNlbGVjdCBEUk1fS01TX0ZCX0hFTFBFUgorICAgICAgICBzZWxlY3QgRFJNX0tNU19DTUFf SEVMUEVSCisgICAgICAgIGhlbHAKKyAgICAgICAgICAgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5 b3UgaGF2ZSBhIEludGVsIEZQR0EgQXJyaWEgMTAgc3lzdGVtCisgICAgICAgICAgICBhbmQgYWJv dmUgd2l0aCBhbiBJbnRlbCBEaXNwbGF5IFBvcnQgSVAuIFRoaXMgZG9lcyBub3Qgc3VwcG9ydAor ICAgICAgICAgICAgbGVnYWN5IEludGVsIEZQR0EgQ3ljbG9uZSBWIGRpc3BsYXkgcG9ydC4gQ3Vy cmVudGx5IG9ubHkgc2luZ2xlCisgICAgICAgICAgICBmcmFtZSBidWZmZXIgaXMgc3VwcG9ydGVk LiBOb3RlIHRoYXQgQUNQSSBhbmQgWF84NiBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIGlzIG5v dCBzdXBwb3J0ZWQgZm9yIEFycmlhMTAuSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwg YmUKKyAgICAgICAgICAgIGNhbGxlZCBpdmlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2l2aXAvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaXZpcC9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzU1YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2l2aXAvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxl IGZvciB0aGUgZHJtIGRldmljZSBkcml2ZXIuICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0 IGZvciB0aGUKKyMgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAoRFJJKSBpbiBYRnJl ZTg2IDQuMS4wIGFuZCBoaWdoZXIuCisKK2NjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCisKK29i ai0kKENPTkZJR19EUk1fSVZJUCkgKz0gaXZpcC5vCitpdmlwLW9ianMgOj0gaW50ZWxfdmlwX29m Lm8gaW50ZWxfdmlwX2NvcmUubyBcCisJaW50ZWxfdmlwX2Nvbm4ubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX2Nvbm4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pdmlw L2ludGVsX3ZpcF9jb25uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4 ZGYyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3ZpcF9j b25uLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIGludGVsX3ZpcF9jb25uLmMgLS0gSW50ZWwg VmlkZW8gYW5kIEltYWdlIFByb2Nlc3NpbmcoVklQKQorICogRnJhbWUgQnVmZmVyIElJIGRyaXZl cgorICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBJbnRlbCBWSVAgRnJhbWUgUmVhZGVy IGNvbXBvbmVudC4KKyAqIE1vcmUgaW5mbyBvbiB0aGUgaGFyZHdhcmUgY2FuIGJlIGZvdW5kIGlu IHRoZSBJbnRlbCBWaWRlbworICogYW5kIEltYWdlIFByb2Nlc3NpbmcgU3VpdGUgVXNlciBHdWlk ZSBhdCB0aGlzIGFkZHJlc3MKKyAqIGh0dHA6Ly93d3cuYWx0ZXJhLmNvbS9saXRlcmF0dXJlL3Vn L3VnX3ZpcC5wZGYuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgor ICogbW9yZSBkZXRhaWxzLgorICoKKyAqIEF1dGhvcnM6CisgKiBPbmcsIEhlYW4tTG9vbmcgPGhl YW4ubG9vbmcub25nQGludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9lbmNvZGVyX3NsYXZlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4K Kworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2ludGVsdmlwZmJfZHJtX2Nvbm5l Y3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkK K3sKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lk IGludGVsdmlwZmJfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9mdW5jcyBpbnRlbHZpcGZiX2RybV9jb25uZWN0b3JfZnVuY3MgPSB7CisJ LmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkucmVzZXQgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmRldGVjdCA9IGludGVsdmlwZmJfZHJt X2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Npbmds ZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBpbnRlbHZpcGZiX2RybV9jb25uZWN0b3Jf ZGVzdHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IGlu dGVsdmlwZmJfZHJtX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gY29ubmVjdG9yLT5kZXY7CisJ aW50IGNvdW50OworCisJY291bnQgPSBkcm1fYWRkX21vZGVzX25vZWRpZChjb25uZWN0b3IsIGRy bS0+bW9kZV9jb25maWcubWF4X3dpZHRoLAorCQkJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0 KTsKKwlkcm1fc2V0X3ByZWZlcnJlZF9tb2RlKGNvbm5lY3RvciwgZHJtLT5tb2RlX2NvbmZpZy5t YXhfd2lkdGgsCisJCQlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQpOworCXJldHVybiBjb3Vu dDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcwor aW50ZWx2aXBmYl9kcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0g aW50ZWx2aXBmYl9kcm1fY29ubmVjdG9yX2dldF9tb2RlcywKK307CisKK3N0cnVjdCBkcm1fY29u bmVjdG9yICoKK2ludGVsdmlwZmJfY29ubl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQor eworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCWludCByZXQ7CisKKwljb25uID0gZGV2 bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKmNvbm4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoSVNf RVJSKGNvbm4pKQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChk cm0sIGNvbm4sICZpbnRlbHZpcGZiX2RybV9jb25uZWN0b3JfZnVuY3MsCisJCQlEUk1fTU9ERV9D T05ORUNUT1JfRGlzcGxheVBvcnQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHJtLT5k ZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkcm0gY29ubmVjdG9yXG4iKTsKKwkJcmV0ID0gLUVO T01FTTsKKwkJZ290byBlcnJvcl9jb25uZWN0b3JfY2xlYW51cDsKKwl9CisKKwlkcm1fY29ubmVj dG9yX2hlbHBlcl9hZGQoY29ubiwgJmludGVsdmlwZmJfZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MpOworCisJcmV0dXJuIGNvbm47CisKK2Vycm9yX2Nvbm5lY3Rvcl9jbGVhbnVwOgorCWRybV9j b25uZWN0b3JfY2xlYW51cChjb25uKTsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2l2aXAvaW50ZWxfdmlwX2NvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9p dmlwL2ludGVsX3ZpcF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NmI0M2MxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3Zp cF9jb3JlLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBpbnRlbF92aXBfY29yZS5jIC0tIElu dGVsIFZpZGVvIGFuZCBJbWFnZSBQcm9jZXNzaW5nKFZJUCkKKyAqIEZyYW1lIEJ1ZmZlciBJSSBk cml2ZXIKKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgSW50ZWwgVklQIEZyYW1lIFJl YWRlciBjb21wb25lbnQuCisgKiBNb3JlIGluZm8gb24gdGhlIGhhcmR3YXJlIGNhbiBiZSBmb3Vu ZCBpbiB0aGUgSW50ZWwgVmlkZW8KKyAqIGFuZCBJbWFnZSBQcm9jZXNzaW5nIFN1aXRlIFVzZXIg R3VpZGUgYXQgdGhpcyBhZGRyZXNzCisgKiBodHRwOi8vd3d3LmFsdGVyYS5jb20vbGl0ZXJhdHVy ZS91Zy91Z192aXAucGRmLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICog dmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBBdXRob3JzOgorICogT25nLCBIZWFuLUxvb25n IDxoZWFuLmxvb25nLm9uZ0BpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f cGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5oPgor CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaW50ZWxfdmlwX2Rydi5oIgorCitz dGF0aWMgdm9pZCBpbnRlbHZpcGZiX2VuYWJsZShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3Bp cGUgKnBpcGUsCisJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sK KwkvKgorCSAqIFRoZSBmcmFtZWluZm8gdmFyaWFibGUgaGFzIHRvIGNvcnJlc3BvbmQgdG8gdGhl IHNpemUgb2YgdGhlIFZJUCBTdWl0ZQorCSAqIEZyYW1lIFJlYWRlciByZWdpc3RlciA3IHdoaWNo IHdpbGwgZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIHNpemUgdXNlZAorCSAqIGluIHRoaXMgZnJhbWVp bmZvCisJICovCisKKwl1MzIgZnJhbWVpbmZvOworCXN0cnVjdCBpbnRlbHZpcGZiX3ByaXYgKnBy aXYgPSBwaXBlLT5wbGFuZS5kZXYtPmRldl9wcml2YXRlOworCXZvaWQgX19pb21lbSAqYmFzZSA9 IHByaXYtPmJhc2U7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwaXBlLT5wbGFu ZS5zdGF0ZTsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlhZGRyID0gZHJtX2ZiX2NtYV9nZXRfZ2Vt X2FkZHIoc3RhdGUtPmZiLCBzdGF0ZSwgMCk7CisKKwlkZXZfaW5mbyhwaXBlLT5wbGFuZS5kZXYt PmRldiwgIkFkZHJlc3MgMHgleFxuIiwgYWRkcik7CisKKwlmcmFtZWluZm8gPQorCQlyZWFkbChi YXNlICsgSU5URUxWSVBGQl9GUkFNRV9SRUFERVIpICYgMHgwMGZmZmZmZjsKKwl3cml0ZWwoZnJh bWVpbmZvLCBiYXNlICsgSU5URUxWSVBGQl9GUkFNRV9JTkZPKTsKKwl3cml0ZWwoYWRkciwgYmFz ZSArIElOVEVMVklQRkJfRlJBTUVfU1RBUlQpOworCS8qIEZpbmFsbHkgc2V0IHRoZSBjb250cm9s IHJlZ2lzdGVyIHRvIDEgdG8gc3RhcnQgc3RyZWFtaW5nICovCisJd3JpdGVsKDEsIGJhc2UgKyBJ TlRFTFZJUEZCX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbHZpcGZiX2Rpc2FibGUo c3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKQoreworCXN0cnVjdCBpbnRlbHZp cGZiX3ByaXYgKnByaXYgPSBwaXBlLT5wbGFuZS5kZXYtPmRldl9wcml2YXRlOworCXZvaWQgX19p b21lbSAqYmFzZSA9IHByaXYtPmJhc2U7CisJLyogc2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIHRv IDAgdG8gc3RvcCBzdHJlYW1pbmcgKi8KKwl3cml0ZWwoMCwgYmFzZSArIElOVEVMVklQRkJfQ09O VFJPTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIGlu dGVsdmlwZmJfbW9kZV9jb25maWdfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFf Y3JlYXRlLAorCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRv bWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyB2b2lk IGludGVsdmlwZmJfc2V0dXBfbW9kZV9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sK Kwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOworCWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAm aW50ZWx2aXBmYl9tb2RlX2NvbmZpZ19mdW5jczsKK30KKworc3RhdGljIGludCBpbnRlbHZpcGZi X3BpcGVfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJ CQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXJldHVybiBkcm1f ZmJfY21hX3ByZXBhcmVfZmIoJnBpcGUtPnBsYW5lLCBwbGFuZV9zdGF0ZSk7Cit9CisKKworc3Rh dGljIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBmYnByaXZfZnVuY3MgPSB7 CisJLnByZXBhcmVfZmIgPSBpbnRlbHZpcGZiX3BpcGVfcHJlcGFyZV9mYiwKKwkuZW5hYmxlID0g aW50ZWx2aXBmYl9lbmFibGUsCisJLmRpc2FibGUgPSBpbnRlbHZpcGZiX2Rpc2FibGUKK307CisK K2ludCBpbnRlbHZpcGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFs OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJc3RydWN0IGludGVsdmlwZmJfcHJpdiAqZmJw cml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKKwl1MzIgZm9ybWF0c1tdID0ge0RSTV9GT1JNQVRfWFJHQjg4ODh9OworCisJZHJtID0g ZmJwcml2LT5kcm07CisKKwlkcm0tPmRldl9wcml2YXRlID0gZmJwcml2OworCisJaW50ZWx2aXBm Yl9zZXR1cF9tb2RlX2NvbmZpZyhkcm0pOworCisJY29ubmVjdG9yID0gaW50ZWx2aXBmYl9jb25u X3NldHVwKGRybSk7CisJaWYgKCFjb25uZWN0b3IpIHsKKwkJZGV2X2Vycihkcm0tPmRldiwgIkNv bm5lY3RvciBzZXR1cCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9tb2RlX2NvbmZpZzsKKwl9CisK KwlyZXR2YWwgPSBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0KGRybSwgJmZicHJpdi0+cGlw ZSwKKwkJCSZmYnByaXZfZnVuY3MsIGZvcm1hdHMsCisJCQlBUlJBWV9TSVpFKGZvcm1hdHMpLCBj b25uZWN0b3IpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJDYW5u b3Qgc2V0dXAgc2ltcGxlIGRpc3BsYXkgcGlwZVxuIik7CisJCWdvdG8gZXJyX21vZGVfY29uZmln OworCX0KKworCWZicHJpdi0+ZmJjbWEgPSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLAorCQkJZHJt LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGgsCisJCQlkcm0tPm1vZGVfY29uZmlnLm51bV9j b25uZWN0b3IpOworCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwlkcm1fZGV2X3Jl Z2lzdGVyKGRybSwgMCk7CisKKwlyZXR1cm4gcmV0dmFsOworCitlcnJfbW9kZV9jb25maWc6CisK Kwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCXJldHVybiAtRU5PREVWOworfQorCitp bnQgaW50ZWx2aXBmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbnRl bHZpcGZiX3ByaXYgKmZicHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSAgZmJwcml2LT5kcm07CisKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsK KworCWlmIChmYnByaXYtPmZiY21hKQorCQlkcm1fZmJkZXZfY21hX2ZpbmkoZmJwcml2LT5mYmNt YSk7CisKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCWRybV9kZXZfdW5yZWYoZHJt KTsKKworCXJldHVybiAwOworfQorCitNT0RVTEVfQVVUSE9SKCJPbmcsIEhlYW4tTG9vbmcgPGhl YW4ubG9vbmcub25nQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgVklQ IEZyYW1lIEJ1ZmZlciBJSSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3ZpcF9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pdmlwL2ludGVsX3ZpcF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4wYTM1NTVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2l2aXAv aW50ZWxfdmlwX2Rydi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MTcgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogSW50ZWwgVmlkZW8gYW5kIEltYWdlIFByb2Nl c3NpbmcoVklQKSBGcmFtZSBCdWZmZXIgSUkgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisgKgorICogQXV0aG9yczoKKyAqIE9uZywgSGVhbi1Mb29uZyA8aGVh bi5sb29uZy5vbmdAaW50ZWwuY29tPgorICoKKyAqLworI2lmbmRlZiBfSU5URUxfVklQX0RSVl9I CisjZGVmaW5lIF9JTlRFTF9WSVBfRFJWX0gKKworI2RlZmluZSBEUklWRVJfTkFNRSAgICAiaW50 ZWx2aXBmYiIKKyNkZWZpbmUgQllURVNfUEVSX1BJWEVMCSA0CisjZGVmaW5lIENSVENfTlVNCSAg ICAgICAgMQorI2RlZmluZSBDT05OX05VTQkgICAgICAgIDEKKworLyogY29udHJvbCByZWdpc3Rl cnMgKi8KKyNkZWZpbmUgSU5URUxWSVBGQl9DT05UUk9MCSAgICAgIDAKKyNkZWZpbmUgSU5URUxW SVBGQl9TVEFUVVMJICAgICAgIDB4NAorI2RlZmluZSBJTlRFTFZJUEZCX0lOVEVSUlVQVAkgICAg MHg4CisjZGVmaW5lIElOVEVMVklQRkJfRlJBTUVfQ09VTlRFUgkweEMKKyNkZWZpbmUgSU5URUxW SVBGQl9GUkFNRV9EUk9QCSAgIDB4MTAKKyNkZWZpbmUgSU5URUxWSVBGQl9GUkFNRV9JTkZPCSAg IDB4MTQKKyNkZWZpbmUgSU5URUxWSVBGQl9GUkFNRV9TVEFSVAkgIDB4MTgKKyNkZWZpbmUgSU5U RUxWSVBGQl9GUkFNRV9SRUFERVIJICAgICAgICAgMHgxQworCitpbnQgaW50ZWx2aXBmYl9wcm9i ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IGludGVsdmlwZmJfcmVtb3ZlKHN0cnVjdCBkZXZp Y2UgKmRldik7CitpbnQgaW50ZWx2aXBmYl9zZXR1cF9jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pOworc3RydWN0IGRybV9jb25uZWN0b3IgKmludGVsdmlwZmJfY29ubl9zZXR1cChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtKTsKKworc3RydWN0IGludGVsdmlwZmJfcHJpdiB7CisJc3RydWN0IGRy bV9zaW1wbGVfZGlzcGxheV9waXBlIHBpcGU7CisJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiY21h OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJdm9pZCAgICBfX2lvbWVtICpiYXNlOworfTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXZpcC9pbnRlbF92aXBfb2Yu YyBiL2RyaXZlcnMvZ3B1L2RybS9pdmlwL2ludGVsX3ZpcF9vZi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmI0NmY3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaXZpcC9pbnRlbF92aXBfb2YuYwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIGludGVs X3ZpcF9vZi5jIC0tIEludGVsIFZpZGVvIGFuZCBJbWFnZSBQcm9jZXNzaW5nKFZJUCkKKyAqIEZy YW1lIEJ1ZmZlciBJSSBkcml2ZXIKKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgSW50 ZWwgVklQIEZyYW1lIFJlYWRlciBjb21wb25lbnQuCisgKiBNb3JlIGluZm8gb24gdGhlIGhhcmR3 YXJlIGNhbiBiZSBmb3VuZCBpbiB0aGUgSW50ZWwgVmlkZW8KKyAqIGFuZCBJbWFnZSBQcm9jZXNz aW5nIFN1aXRlIFVzZXIgR3VpZGUgYXQgdGhpcyBhZGRyZXNzCisgKiBodHRwOi8vd3d3LmFsdGVy YS5jb20vbGl0ZXJhdHVyZS91Zy91Z192aXAucGRmLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBBdXRob3JzOgorICog T25nLCBIZWFuLUxvb25nIDxoZWFuLmxvb25nLm9uZ0BpbnRlbC5jb20+CisgKgorICovCisjaW5j bHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KKworI2lu Y2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgImludGVsX3ZpcF9kcnYuaCIK KworREVGSU5FX0RSTV9HRU1fQ01BX0ZPUFMoZHJtX2ZvcHMpOworCitzdGF0aWMgdm9pZCBpbnRl bHZpcGZiX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBpbnRl bHZpcGZiX3ByaXYgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCisJZHJtX2ZiZGV2X2NtYV9y ZXN0b3JlX21vZGUocHJpdi0+ZmJjbWEpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg aW50ZWx2aXBmYl9kcm0gPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9CisJCQlEUklWRVJfTU9ERVNF VCB8IERSSVZFUl9HRU0gfAorCQkJRFJJVkVSX1BSSU1FIHwgRFJJVkVSX0FUT01JQywKKwkuZ2Vt X2ZyZWVfb2JqZWN0X3VubG9ja2VkID0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCisJLmdlbV92 bV9vcHMgPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAorCS5kdW1iX2NyZWF0ZSA9IGRybV9nZW1fY21h X2R1bWJfY3JlYXRlLAorCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9v ZmZzZXQsCisJLmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCS5wcmltZV9o YW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9f aGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQg PSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJp bWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVf Z2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFf cHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3By aW1lX3ZtYXAsCisJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAs CisJLmdlbV9wcmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKKwkubGFzdGNsb3Nl ID0gaW50ZWx2aXBmYl9sYXN0Y2xvc2UsCisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuZGF0ZSA9 ICIyMDE3MDcyOSIsCisJLmRlc2MgPSAiSW50ZWwgRlBHQSBWSVAgU1VJVEUiLAorCS5tYWpvciA9 IDEsCisJLm1pbm9yID0gMCwKKwkuaW9jdGxzID0gTlVMTCwKKwkucGF0Y2hsZXZlbCA9IDAsCisJ LmZvcHMgPSAmZHJtX2ZvcHMsCit9OworCisvKgorICogU2V0dGluZyB1cCBpbmZvcm1hdGlvbiBk ZXJpdmVkIGZyb20gT0YgRGV2aWNlIFRyZWUgTm9kZXMKKyAqIG1heC13aWR0aCwgbWF4LWhlaWdo dCwgYml0cyBwZXIgcGl4ZWwsIG1lbW9yeSBwb3J0IHdpZHRoCisgKi8KKworc3RhdGljIGludCBp bnRlbHZpcGZiX2RybV9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGludGVs dmlwZmJfcHJpdiAqZmJwcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBmYnByaXYt PmRybTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCWludCBtZW1f d29yZF93aWR0aDsKKwlpbnQgbWF4X2gsIG1heF93OworCWludCByZXQ7CisKKwlyZXQgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihucCwgImFsdHIsbWF4LXdpZHRoIiwgJm1heF93KTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoZGV2LAorCQkJIk1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyICdhbHRy LG1heC13aWR0aCciKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihucCwgImFsdHIsbWF4LWhlaWdodCIsICZtYXhfaCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwKKwkJCSJNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciAnYWx0cixtYXgtaGVp Z2h0JyIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy KG5wLCAiYWx0cixtZW0tcG9ydC13aWR0aCIsICZtZW1fd29yZF93aWR0aCk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyICdhbHRyLG1lbS1w b3J0LXdpZHRoICciKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIShtZW1fd29yZF93aWR0 aCA+PSAzMiAmJiBtZW1fd29yZF93aWR0aCAlIDMyID09IDApKSB7CisJCWRldl9lcnIoZGV2LAor CQkJIm1lbS13b3JkLXdpZHRoIGlzIHNldCB0byAlaS4gbXVzdCBiZSA+PSAzMiBhbmQgbXVsdGlw bGUgb2YgMzIuIiwKKwkJCSBtZW1fd29yZF93aWR0aCk7CisJCXJldHVybiAtRU5PREVWOworCX0K KworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQwOworCWRybS0+bW9kZV9jb25maWcu bWluX2hlaWdodCA9IDQ4MDsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IG1heF93Owor CWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IG1heF9oOworCWRybS0+bW9kZV9jb25maWcu cHJlZmVycmVkX2RlcHRoID0gMzI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRl bHZpcGZiX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJl dHZhbDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ19yZXM7CisJc3RydWN0IGludGVsdmlwZmJfcHJp diAqZmJwcml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybTsKKworCWZicHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZmJw cml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYnByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJ LypzZXR1cCBEUk0gKi8KKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZpbnRlbHZpcGZiX2RybSwgZGV2 KTsKKwlpZiAoSVNfRVJSKGRybSkpCisJCXJldHVybiBQVFJfRVJSKGRybSk7CisKKwlyZXR2YWwg PSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRybS0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsK KwlpZiAocmV0dmFsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZicHJpdi0+ZHJtID0gZHJtOwor CisJcmVnX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwg MCk7CisJaWYgKCFyZWdfcmVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZicHJpdi0+YmFzZSA9 IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ19yZXMpOworCisJaWYgKElTX0VSUihmYnBy aXYtPmJhc2UpKSB7CisJCWRldl9lcnIoZGV2LCAiZGV2bV9pb3JlbWFwX3Jlc291cmNlIGZhaWxl ZFxuIik7CisJCXJldHZhbCA9IFBUUl9FUlIoZmJwcml2LT5iYXNlKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCisJaW50ZWx2aXBmYl9kcm1fc2V0dXAoZGV2LCBmYnByaXYpOworCisJZGV2X3Nl dF9kcnZkYXRhKGRldiwgZmJwcml2KTsKKworCXJldHVybiBpbnRlbHZpcGZiX3Byb2JlKGRldik7 Cit9CisKK3N0YXRpYyBpbnQgaW50ZWx2aXBmYl9vZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlyZXR1cm4gaW50ZWx2aXBmYl9yZW1vdmUoJnBkZXYtPmRldik7Cit9 CisKKy8qCisgKiBUaGUgbmFtZSB2aXAtZnJhbWUtYnVmZmVyLTIuMCBpcyBkZXJpdmVkIGZyb20K KyAqIGh0dHA6Ly93d3cuYWx0ZXJhLmNvbS9saXRlcmF0dXJlL3VnL3VnX3ZpcC5wZGYKKyAqIGZy YW1lIGJ1ZmZlciBJUCBjb3JlcyBzZWN0aW9uIDE0CisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgaW50ZWx2aXBmYl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUg PSAiYWx0cix2aXAtZnJhbWUtYnVmZmVyLTIuMCIgfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIGludGVsdmlwZmJfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBpbnRlbHZpcGZiX2RyaXZlciA9IHsKKwkucHJvYmUgPSBpbnRlbHZpcGZiX29m X3Byb2JlLAorCS5yZW1vdmUgPSBpbnRlbHZpcGZiX29mX3JlbW92ZSwKKwkuZHJpdmVyID0gewor CQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBpbnRlbHZpcGZiX29m X21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGludGVsdmlwZmJfZHJp dmVyKTsKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK