From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rafael Antognolli Subject: [PATCH v9 2/3] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Thu, 3 Dec 2015 14:54:01 -0800 Message-ID: <1449183242-2608-3-git-send-email-rafael.antognolli@intel.com> References: <1449183242-2608-1-git-send-email-rafael.antognolli@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449183242-2608-1-git-send-email-rafael.antognolli@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBpMmMtZGV2LiBPbmNlIGxvYWRlZCwgaXQg cHJvdmlkZXMgb25lCmRldiBub2RlIHBlciBEUCBBVVggY2hhbm5lbCwgbmFtZWQgZHJtX2RwX2F1 eE4sIHdoZXJlIE4gaXMgYW4gaW50ZWdlci4KCkl0J3MgcG9zc2libGUgdG8ga25vdyB3aGljaCBj b25uZWN0b3Igb3ducyB0aGlzIGF1eCBjaGFubmVsIGJ5IGxvb2tpbmcKYXQgdGhlIHJlc3BlY3Rp dmUgc3lzZnMgL3N5cy9jbGFzcy9kcm1fYXV4X2Rldi9kcm1fZHBfYXV4Ti9jb25uZWN0b3IsIGlm CnRoZSBjb25uZWN0b3IgZGV2aWNlIHBvaW50ZXIgd2FzIGNvcnJlY3RseSBzZXQgaW4gdGhlIGF1 eCBoZWxwZXIgc3RydWN0LgoKVHdvIG1haW4gb3BlcmF0aW9ucyBhcmUgcHJvdmlkZWQgb24gdGhl IHJlZ2lzdGVycyByZWFkIGFuZCB3cml0ZS4gVGhlCmFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRv IGJlIHJlYWQgb3Igd3JpdHRlbiBpcyBnaXZlbiB1c2luZyBsc2Vlay4gVGhlCnNlZWsgcG9zaXRp b24gaXMgdXBkYXRlZCB1cG9uIHJlYWQgb3Igd3JpdGUuCgp2MjoKIC0gbHNlZWsgaXMgdXNlZCB0 byBzZWxlY3QgdGhlIHJlZ2lzdGVyIHRvIHJlYWQvd3JpdGUKIC0gcmVhZC93cml0ZSBhcmUgdXNl ZCBpbnN0ZWFkIG9mIGlvY3RsCiAtIG5vIGJsb2NraW5nX25vdGlmaWVyIGlzIHVzZWQsIGp1c3Qg YSBkaXJlY3QgY2FsbGJhY2sKCnYzOgogLSB1c2UgZHJtX2RwX2F1eF9kZXYgcHJlZml4IGZvciBw dWJsaWMgZnVuY3Rpb25zCiAtIGNoYXJkZXYgaXMgbmFtZWQgZHJtX2RwX2F1eE4KIC0gcmVhZC93 cml0ZSBkb24ndCBhbGxvY2F0ZSBhIGJ1ZmZlciBhbnltb3JlLCBhbmQgdHJhbnNmZXIgdXAgdG8g MTYgYnl0ZXMgYQogICB0aW1lCiAtIHJlbW92ZSBub3RpZmllciBsaXN0IGZyb20gdGhlIGltcGxl bWVudGF0aW9uCiAtIG9wdGlvbiBvbiBtZW51Y29uZmlnIGlzIG5vdyBhIGJvb2xlYW4KIC0gYWRk IGlubGluZSBzdHViIGZ1bmN0aW9ucyB0byBhdm9pZCBicmVha2FnZSB3aGVuIHRoaXMgb3B0aW9u IGlzIGRpc2FibGVkCgp2NDoKIC0gZml4IGJ1aWxkIHN5c3RlbSBjaGFuZ2VzIC0gYWN0dWFsbHkg ZGlzYWJsZSB0aGlzIG1vZHVsZSB3aGVuIG5vdCBzZWxlY3RlZC4KCnY1OgogLSBVc2Uga3JlZiB0 byBhdm9pZCBkZXZpY2UgY2xvc2luZyB3aGlsZSBzdGlsbCBpbiB1c2UKIC0gRG9uJ3QgdXNlIGxp c3QsIHVzZSBhbiBpZHIgZm9yIHN0b3JpbmcgYXV4X2RldgogLSBSZW1vdmUgImNvbm5lY3RvciIg YXR0cmlidXRlCiAtIHNldCBhdXguZGV2IHRvIHRoZSBjb25uZWN0b3IgZHJtX2Nvbm5lY3RvciBk ZXZpY2UsIGluc3RlYWQgb2YKICAgZHJtX2RldmljZQoKdjY6CiAtIFVzZSBhdG9taWNfdCBmb3Ig dXNhZ2UgY291bnQKIC0gVXNlIGEgbXV0ZXggaW5zdGVhZCBvZiBzcGlubG9jayBmb3IgaWRyIGxv Y2sKIC0gRGVzdHJveSBjaGFyZGV2IGltbWVkaWF0ZWx5IG9uIHVucmVnaXN0ZXIKIC0gb3RoZXIg bWlub3Igc3VnZ2VzdGlvbnMgZnJvbSBWaWxsZQoKdjc6CiAtIHN0eWxlIGZpeGVzCiAtIGVycm9y IGhhbmRsaW5nIGZpeGVzCgp2ODoKIC0gbW9yZSBlcnJvciBoYW5kbGluZyBmaXhlcwoKdjk6CiAt IHJlbW92ZSBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQsIGFuZCBhZGQgZHJtX2RwX2F1eF9k ZXZfaW5pdC9leGl0CiB0byBkcm1fa21zX2hlbHBlcl9pbml0L2V4aXQuCgpTaWduZWQtb2ZmLWJ5 OiBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgOCArCiBkcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2Ry bV9kcF9hdXhfZGV2LmMgICAgICAgIHwgMzY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jICAgICAgICAgfCAgMTYgKy0KIGRy aXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24uYyB8ICAxNSArLQogaW5jbHVkZS9k cm0vZHJtX2RwX2F1eF9kZXYuaCAgICAgICAgICAgIHwgIDYyICsrKysrKwogNiBmaWxlcyBjaGFu Z2VkLCA0NjggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGM0YmY5YTEuLmRhZWZjY2Ug MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnCkBAIC0yNSw2ICsyNSwxNCBAQCBjb25maWcgRFJNX01JUElfRFNJCiAJYm9vbAog CWRlcGVuZHMgb24gRFJNCiAKK2NvbmZpZyBEUk1fRFBfQVVYX0NIQVJERVYKKwlib29sICJEUk0g RFAgQVVYIEludGVyZmFjZSIKKwlkZXBlbmRzIG9uIERSTQorCWhlbHAKKwkgIENob29zZSB0aGlz IG9wdGlvbiB0byBlbmFibGUgYSAvZGV2L2RybV9kcF9hdXhOIG5vZGUgdGhhdCBhbGxvd3MgdG8K KwkgIHJlYWQgYW5kIHdyaXRlIHZhbHVlcyB0byBhcmJpdHJhcnkgRFBDRCByZWdpc3RlcnMgb24g dGhlIERQIGF1eAorCSAgY2hhbm5lbC4KKwogY29uZmlnIERSTV9LTVNfSEVMUEVSCiAJdHJpc3Rh dGUKIAlkZXBlbmRzIG9uIERSTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDc2Mzk5ZGEuLjU3ZTE1M2QgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUKQEAgLTMwLDYgKzMwLDcgQEAgZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxw ZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKIGRybV9rbXNfaGVscGVy LSQoQ09ORklHX0RSTV9MT0FEX0VESURfRklSTVdBUkUpICs9IGRybV9lZGlkX2xvYWQubwogZHJt X2ttc19oZWxwZXItJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gZHJtX2ZiX2hlbHBl ci5vCiBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fS01TX0NNQV9IRUxQRVIpICs9IGRybV9m Yl9jbWFfaGVscGVyLm8KK2RybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9EUF9BVVhfQ0hBUkRF VikgKz0gZHJtX2RwX2F1eF9kZXYubwogCiBvYmotJChDT05GSUdfRFJNX0tNU19IRUxQRVIpICs9 IGRybV9rbXNfaGVscGVyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9h dXhfZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNiMzhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9kcF9hdXhfZGV2LmMKQEAgLTAsMCArMSwzNjggQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK KyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgUmFmYWVsIEFudG9n bm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgv c2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMu aD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCitzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgeworCXVu c2lnbmVkIGluZGV4OworCXN0cnVjdCBkcm1fZHBfYXV4ICphdXg7CisJc3RydWN0IGRldmljZSAq ZGV2OworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCWF0b21pY190IHVzZWNvdW50OworfTsKKwor I2RlZmluZSBEUk1fQVVYX01JTk9SUwkyNTYKKyNkZWZpbmUgQVVYX01BWF9PRkZTRVQJKDEgPDwg MjApCitzdGF0aWMgREVGSU5FX0lEUihhdXhfaWRyKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYXV4 X2lkcl9tdXRleCk7CitzdGF0aWMgc3RydWN0IGNsYXNzICpkcm1fZHBfYXV4X2Rldl9jbGFzczsK K3N0YXRpYyBpbnQgZHJtX2Rldl9tYWpvciA9IC0xOworCitzdGF0aWMgc3RydWN0IGRybV9kcF9h dXhfZGV2ICpkcm1fZHBfYXV4X2Rldl9nZXRfYnlfbWlub3IodW5zaWduZWQgaW5kZXgpCit7CisJ c3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gTlVMTDsKKworCW11dGV4X2xvY2soJmF1 eF9pZHJfbXV0ZXgpOworCWF1eF9kZXYgPSBpZHJfZmluZCgmYXV4X2lkciwgaW5kZXgpOworCWlm ICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmF1eF9kZXYtPnJlZmNvdW50KSkKKwkJYXV4X2RldiA9 IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZhdXhfaWRyX211dGV4KTsKKworCXJldHVybiBhdXhfZGV2 OworfQorCitzdGF0aWMgc3RydWN0IGRybV9kcF9hdXhfZGV2ICphbGxvY19kcm1fZHBfYXV4X2Rl dihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQoreworCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4 X2RldjsKKwlpbnQgaW5kZXg7CisKKwlhdXhfZGV2ID0ga3phbGxvYyhzaXplb2YoKmF1eF9kZXYp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1eF9kZXYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCWF1eF9kZXYtPmF1eCA9IGF1eDsKKwlhdG9taWNfc2V0KCZhdXhfZGV2LT51c2Vjb3VudCwg MSk7CisJa3JlZl9pbml0KCZhdXhfZGV2LT5yZWZjb3VudCk7CisKKwltdXRleF9sb2NrKCZhdXhf aWRyX211dGV4KTsKKwlpbmRleCA9IGlkcl9hbGxvY19jeWNsaWMoJmF1eF9pZHIsIGF1eF9kZXYs IDAsIERSTV9BVVhfTUlOT1JTLAorCQkJCSBHRlBfS0VSTkVMKTsKKwltdXRleF91bmxvY2soJmF1 eF9pZHJfbXV0ZXgpOworCWlmIChpbmRleCA8IDApIHsKKwkJa2ZyZWUoYXV4X2Rldik7CisJCXJl dHVybiBFUlJfUFRSKGluZGV4KTsKKwl9CisJYXV4X2Rldi0+aW5kZXggPSBpbmRleDsKKworCXJl dHVybiBhdXhfZGV2OworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2RybV9kcF9hdXhfZGV2KHN0 cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0KKwkJ Y29udGFpbmVyX29mKHJlZiwgc3RydWN0IGRybV9kcF9hdXhfZGV2LCByZWZjb3VudCk7CisKKwlr ZnJlZShhdXhfZGV2KTsKK30KKworc3RhdGljIHNzaXplX3QgbmFtZV9zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQor eworCXNzaXplX3QgcmVzOworCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9CisJCWRy bV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcihNSU5PUihkZXYtPmRldnQpKTsKKworCWlmICghYXV4 X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXMgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBh dXhfZGV2LT5hdXgtPm5hbWUpOworCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwgcmVsZWFz ZV9kcm1fZHBfYXV4X2Rldik7CisKKwlyZXR1cm4gcmVzOworfQorc3RhdGljIERFVklDRV9BVFRS X1JPKG5hbWUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZHJtX2RwX2F1eF9hdHRyc1td ID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJTlVMTCwKK307CitBVFRSSUJVVEVfR1JPVVBT KGRybV9kcF9hdXgpOworCitzdGF0aWMgaW50IGF1eGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihp bm9kZSk7CisJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2OworCisJYXV4X2RldiA9IGRy bV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcihtaW5vcik7CisJaWYgKCFhdXhfZGV2KQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGF1eF9kZXY7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBsb2ZmX3QgYXV4ZGV2X2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKwlyZXR1cm4gZml4ZWRfc2l6ZV9sbHNlZWsoZmls ZSwgb2Zmc2V0LCB3aGVuY2UsIEFVWF9NQVhfT0ZGU0VUKTsKK30KKworc3RhdGljIHNzaXplX3Qg YXV4ZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBj b3VudCwKKwkJCSAgIGxvZmZfdCAqb2Zmc2V0KQoreworCXNpemVfdCBieXRlc19wZW5kaW5nLCBu dW1fYnl0ZXNfcHJvY2Vzc2VkID0gMDsKKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYg PSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXMgPSAwOworCisJaWYgKCFhdG9taWNf aW5jX25vdF96ZXJvKCZhdXhfZGV2LT51c2Vjb3VudCkpCisJCXJldHVybiAtRU5PREVWOworCisJ Ynl0ZXNfcGVuZGluZyA9IG1pbigobG9mZl90KWNvdW50LCBBVVhfTUFYX09GRlNFVCAtICgqb2Zm c2V0KSk7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgYnl0ZXNfcGVuZGlu ZykpIHsKKwkJcmVzID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKGJ5dGVz X3BlbmRpbmcgPiAwKSB7CisJCXVpbnQ4X3QgbG9jYWxidWZbRFBfQVVYX01BWF9QQVlMT0FEX0JZ VEVTXTsKKwkJc3NpemVfdCB0b2RvID0gbWluX3Qoc2l6ZV90LCBieXRlc19wZW5kaW5nLCBzaXpl b2YobG9jYWxidWYpKTsKKworCQlyZXMgPSBkcm1fZHBfZHBjZF9yZWFkKGF1eF9kZXYtPmF1eCwg Km9mZnNldCwgbG9jYWxidWYsIHRvZG8pOworCQlpZiAocmVzIDw9IDApIHsKKwkJCXJlcyA9IG51 bV9ieXRlc19wcm9jZXNzZWQgPyBudW1fYnl0ZXNfcHJvY2Vzc2VkIDogcmVzOworCQkJZ290byBv dXQ7CisJCX0KKwkJaWYgKF9fY29weV90b191c2VyKGJ1ZiArIG51bV9ieXRlc19wcm9jZXNzZWQs IGxvY2FsYnVmLCByZXMpKSB7CisJCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkID8KKwkJCQlu dW1fYnl0ZXNfcHJvY2Vzc2VkIDogLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJ5dGVz X3BlbmRpbmcgLT0gcmVzOworCQkqb2Zmc2V0ICs9IHJlczsKKwkJbnVtX2J5dGVzX3Byb2Nlc3Nl ZCArPSByZXM7CisJCXJlcyA9IG51bV9ieXRlc19wcm9jZXNzZWQ7CisJfQorCitvdXQ6CisJYXRv bWljX2RlYygmYXV4X2Rldi0+dXNlY291bnQpOworCXdha2VfdXBfYXRvbWljX3QoJmF1eF9kZXYt PnVzZWNvdW50KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgc3NpemVfdCBhdXhkZXZfd3Jp dGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6 ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlzaXplX3QgYnl0ZXNfcGVuZGluZywgbnVt X2J5dGVzX3Byb2Nlc3NlZCA9IDA7CisJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0g ZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgcmVzID0gMDsKKworCWlmICghYXRvbWljX2lu Y19ub3RfemVybygmYXV4X2Rldi0+dXNlY291bnQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWJ5 dGVzX3BlbmRpbmcgPSBtaW4oKGxvZmZfdCljb3VudCwgQVVYX01BWF9PRkZTRVQgLSAqb2Zmc2V0 KTsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWYsIGJ5dGVzX3BlbmRpbmcpKSB7 CisJCXJlcyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlIChieXRlc19wZW5k aW5nID4gMCkgeworCQl1aW50OF90IGxvY2FsYnVmW0RQX0FVWF9NQVhfUEFZTE9BRF9CWVRFU107 CisJCXNzaXplX3QgdG9kbyA9IG1pbl90KHNpemVfdCwgYnl0ZXNfcGVuZGluZywgc2l6ZW9mKGxv Y2FsYnVmKSk7CisKKwkJaWYgKF9fY29weV9mcm9tX3VzZXIobG9jYWxidWYsCisJCQkJICAgICBi dWYgKyBudW1fYnl0ZXNfcHJvY2Vzc2VkLCB0b2RvKSkgeworCQkJcmVzID0gbnVtX2J5dGVzX3By b2Nlc3NlZCA/CisJCQkJbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IC1FRkFVTFQ7CisJCQlnb3RvIG91 dDsKKwkJfQorCisJCXJlcyA9IGRybV9kcF9kcGNkX3dyaXRlKGF1eF9kZXYtPmF1eCwgKm9mZnNl dCwgbG9jYWxidWYsIHRvZG8pOworCQlpZiAocmVzIDw9IDApIHsKKwkJCXJlcyA9IG51bV9ieXRl c19wcm9jZXNzZWQgPyBudW1fYnl0ZXNfcHJvY2Vzc2VkIDogcmVzOworCQkJZ290byBvdXQ7CisJ CX0KKwkJYnl0ZXNfcGVuZGluZyAtPSByZXM7CisJCSpvZmZzZXQgKz0gcmVzOworCQludW1fYnl0 ZXNfcHJvY2Vzc2VkICs9IHJlczsKKwkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZDsKKwl9CisK K291dDoKKwlhdG9taWNfZGVjKCZhdXhfZGV2LT51c2Vjb3VudCk7CisJd2FrZV91cF9hdG9taWNf dCgmYXV4X2Rldi0+dXNlY291bnQpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgYXV4 ZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJ c3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJ a3JlZl9wdXQoJmF1eF9kZXYtPnJlZmNvdW50LCByZWxlYXNlX2RybV9kcF9hdXhfZGV2KTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXV4ZGV2 X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gYXV4ZGV2X2xs c2VlaywKKwkucmVhZAkJPSBhdXhkZXZfcmVhZCwKKwkud3JpdGUJCT0gYXV4ZGV2X3dyaXRlLAor CS5vcGVuCQk9IGF1eGRldl9vcGVuLAorCS5yZWxlYXNlCT0gYXV4ZGV2X3JlbGVhc2UsCit9Owor CisjZGVmaW5lIHRvX2F1eGRldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRybV9kcF9hdXhf ZGV2LCBhdXgpCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmRybV9kcF9hdXhfZGV2 X2dldF9ieV9hdXgoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKK3sKKwlzdHJ1Y3QgZHJtX2RwX2F1 eF9kZXYgKml0ZXIsICphdXhfZGV2ID0gTlVMTDsKKwlpbnQgaWQ7CisKKwkvKiBkb24ndCBpbmNy ZWFzZSBrcmVmIGNvdW50IGhlcmUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJl CisJICogdXNlZCBieSBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZS4gVGh1cywgaXQgd2ls bCBhbHdheXMgaGF2ZSBhdAorCSAqIGxlYXN0IG9uZSByZWZlcmVuY2UgLSB0aGUgb25lIHRoYXQg ZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlCisJICogY3JlYXRlZAorCSAqLworCW11dGV4X2xv Y2soJmF1eF9pZHJfbXV0ZXgpOworCWlkcl9mb3JfZWFjaF9lbnRyeSgmYXV4X2lkciwgaXRlciwg aWQpIHsKKwkJaWYgKGl0ZXItPmF1eCA9PSBhdXgpIHsKKwkJCWF1eF9kZXYgPSBpdGVyOworCQkJ YnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZhdXhfaWRyX211dGV4KTsKKwlyZXR1cm4g YXV4X2RldjsKK30KKworc3RhdGljIGludCBhdXhkZXZfd2FpdF9hdG9taWNfdChhdG9taWNfdCAq cCkKK3sKKwlzY2hlZHVsZSgpOworCXJldHVybiAwOworfQorLyoqCisgKiBkcm1fZHBfYXV4X3Vu cmVnaXN0ZXJfZGV2bm9kZSgpIC0gdW5yZWdpc3RlciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4IGNo YW5uZWwKKyAqIEBhdXg6IERpc3BsYXlQb3J0IEFVWCBjaGFubmVsCisgKgorICogUmV0dXJucyAw IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3Zv aWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkK K3sKKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7CisJdW5zaWduZWQgaW50IG1pbm9y OworCisJYXV4X2RldiA9IGRybV9kcF9hdXhfZGV2X2dldF9ieV9hdXgoYXV4KTsKKwlpZiAoIWF1 eF9kZXYpIC8qIGF0dGFjaCBtdXN0IGhhdmUgZmFpbGVkICovCisJCXJldHVybjsKKworCW11dGV4 X2xvY2soJmF1eF9pZHJfbXV0ZXgpOworCWlkcl9yZW1vdmUoJmF1eF9pZHIsIGF1eF9kZXYtPmlu ZGV4KTsKKwltdXRleF91bmxvY2soJmF1eF9pZHJfbXV0ZXgpOworCisJYXRvbWljX2RlYygmYXV4 X2Rldi0+dXNlY291bnQpOworCXdhaXRfb25fYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50LCBh dXhkZXZfd2FpdF9hdG9taWNfdCwKKwkJCSBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwltaW5v ciA9IGF1eF9kZXYtPmluZGV4OworCWlmIChhdXhfZGV2LT5kZXYpCisJCWRldmljZV9kZXN0cm95 KGRybV9kcF9hdXhfZGV2X2NsYXNzLAorCQkJICAgICAgIE1LREVWKGRybV9kZXZfbWFqb3IsIG1p bm9yKSk7CisKKwlEUk1fREVCVUcoImRybV9kcF9hdXhfZGV2OiBhdXggWyVzXSB1bnJlZ2lzdGVy aW5nXG4iLCBhdXgtPm5hbWUpOworCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwgcmVsZWFz ZV9kcm1fZHBfYXV4X2Rldik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfdW5yZWdpc3Rl cl9kZXZub2RlKTsKKworLyoqCisgKiBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoKSAtIHJl Z2lzdGVyIGEgZGV2bm9kZSBmb3IgdGhpcyBhdXggY2hhbm5lbAorICogQGF1eDogRGlzcGxheVBv cnQgQVVYIGNoYW5uZWwKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZl IGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2 bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQoreworCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAq YXV4X2RldjsKKwlpbnQgcmVzOworCisJYXV4X2RldiA9IGFsbG9jX2RybV9kcF9hdXhfZGV2KGF1 eCk7CisJaWYgKElTX0VSUihhdXhfZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoYXV4X2Rldik7CisK KwlhdXhfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGRybV9kcF9hdXhfZGV2X2NsYXNzLCBhdXgt PmRldiwKKwkJCQkgICAgIE1LREVWKGRybV9kZXZfbWFqb3IsIGF1eF9kZXYtPmluZGV4KSwgTlVM TCwKKwkJCQkgICAgICJkcm1fZHBfYXV4JWQiLCBhdXhfZGV2LT5pbmRleCk7CisJaWYgKElTX0VS UihhdXhfZGV2LT5kZXYpKSB7CisJCXJlcyA9IFBUUl9FUlIoYXV4X2Rldi0+ZGV2KTsKKwkJYXV4 X2Rldi0+ZGV2ID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlEUk1fREVCVUcoImRybV9k cF9hdXhfZGV2OiBhdXggWyVzXSByZWdpc3RlcmVkIGFzIG1pbm9yICVkXG4iLAorCQkgIGF1eC0+ bmFtZSwgYXV4X2Rldi0+aW5kZXgpOworCXJldHVybiAwOworZXJyb3I6CisJZHJtX2RwX2F1eF91 bnJlZ2lzdGVyX2Rldm5vZGUoYXV4KTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTChk cm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUpOworCitpbnQgZHJtX2RwX2F1eF9kZXZfaW5pdCh2 b2lkKQoreworCWludCByZXM7CisKKwlkcm1fZHBfYXV4X2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0 ZShUSElTX01PRFVMRSwgImRybV9kcF9hdXhfZGV2Iik7CisJaWYgKElTX0VSUihkcm1fZHBfYXV4 X2Rldl9jbGFzcykpIHsKKwkJcmVzID0gUFRSX0VSUihkcm1fZHBfYXV4X2Rldl9jbGFzcyk7CisJ CWdvdG8gb3V0OworCX0KKwlkcm1fZHBfYXV4X2Rldl9jbGFzcy0+ZGV2X2dyb3VwcyA9IGRybV9k cF9hdXhfZ3JvdXBzOworCisJcmVzID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJhdXgiLCAmYXV4ZGV2 X2ZvcHMpOworCWlmIChyZXMgPCAwKQorCQlnb3RvIG91dDsKKwlkcm1fZGV2X21ham9yID0gcmVz OworCisJcmV0dXJuIDA7CitvdXQ6CisJY2xhc3NfZGVzdHJveShkcm1fZHBfYXV4X2Rldl9jbGFz cyk7CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2RwX2F1eF9kZXZfaW5pdCk7 CisKK3ZvaWQgZHJtX2RwX2F1eF9kZXZfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfY2hyZGV2 KGRybV9kZXZfbWFqb3IsICJhdXgiKTsKKwljbGFzc19kZXN0cm95KGRybV9kcF9hdXhfZGV2X2Ns YXNzKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2RwX2F1eF9kZXZfZXhpdCk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9k cF9oZWxwZXIuYwppbmRleCA5NTM1YzViLi43ZDU4ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2RwX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVy LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUg PGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9kcF9hdXhfZGV2Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KIAogLyoqCkBAIC03 NTQsNiArNzU1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGRybV9kcF9p MmNfYWxnbyA9IHsKICAqLwogaW50IGRybV9kcF9hdXhfcmVnaXN0ZXIoc3RydWN0IGRybV9kcF9h dXggKmF1eCkKIHsKKwlpbnQgcmV0OworCiAJbXV0ZXhfaW5pdCgmYXV4LT5od19tdXRleCk7CiAK IAlhdXgtPmRkYy5hbGdvID0gJmRybV9kcF9pMmNfYWxnbzsKQEAgLTc2OCw3ICs3NzEsMTcgQEAg aW50IGRybV9kcF9hdXhfcmVnaXN0ZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKIAlzdHJsY3B5 KGF1eC0+ZGRjLm5hbWUsIGF1eC0+bmFtZSA/IGF1eC0+bmFtZSA6IGRldl9uYW1lKGF1eC0+ZGV2 KSwKIAkJc2l6ZW9mKGF1eC0+ZGRjLm5hbWUpKTsKIAotCXJldHVybiBpMmNfYWRkX2FkYXB0ZXIo JmF1eC0+ZGRjKTsKKwlyZXQgPSBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoYXV4KTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZhdXgtPmRk Yyk7CisJaWYgKHJldCkgeworCQlkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZShhdXgpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZHBf YXV4X3JlZ2lzdGVyKTsKIApAQCAtNzc4LDYgKzc5MSw3IEBAIEVYUE9SVF9TWU1CT0woZHJtX2Rw X2F1eF9yZWdpc3Rlcik7CiAgKi8KIHZvaWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyKHN0cnVjdCBk cm1fZHBfYXV4ICphdXgpCiB7CisJZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoYXV4KTsK IAlpMmNfZGVsX2FkYXB0ZXIoJmF1eC0+ZGRjKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F1 eF91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBl cl9jb21tb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24uYwppbmRl eCA5MjBiMmZiLi4yNTY1YjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ttc19o ZWxwZXJfY29tbW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9rbXNfaGVscGVyX2NvbW1v bi5jCkBAIC0yNywxNiArMjcsMjkgQEAKIAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVk ZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2F1eF9kZXYuaD4K IAogc3RhdGljIGludCBfX2luaXQgZHJtX2ttc19oZWxwZXJfaW5pdCh2b2lkKQogeworCWludCBy ZXQ7CisKIAkvKiBDYWxsIGluaXQgZnVuY3Rpb25zIGZyb20gc3BlY2lmaWMga21zIGhlbHBlcnMg aGVyZSAqLwotCXJldHVybiBkcm1fZmJfaGVscGVyX21vZGluaXQoKTsKKwlyZXQgPSBkcm1fZmJf aGVscGVyX21vZGluaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBk cm1fZHBfYXV4X2Rldl9pbml0KCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6 CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRybV9rbXNfaGVscGVyX2V4 aXQodm9pZCkKIHsKIAkvKiBDYWxsIGV4aXQgZnVuY3Rpb25zIGZyb20gc3BlY2lmaWMga21zIGhl bHBlcnMgaGVyZSAqLworCWRybV9kcF9hdXhfZGV2X2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQo ZHJtX2ttc19oZWxwZXJfaW5pdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfYXV4 X2Rldi5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4xYjc2ZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0v ZHJtX2RwX2F1eF9kZXYuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIw MTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUg U09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFJhZmFlbCBBbnRvZ25vbGxpIDxyYWZh ZWwuYW50b2dub2xsaUBpbnRlbC5jb20+CisgKgorICovCisKKyNpZm5kZWYgRFJNX0RQX0FVWF9E RVYKKyNkZWZpbmUgRFJNX0RQX0FVWF9ERVYKKworI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVy Lmg+CisKKyNpZmRlZiBDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWCisKK2ludCBkcm1fZHBfYXV4 X2Rldl9pbml0KHZvaWQpOwordm9pZCBkcm1fZHBfYXV4X2Rldl9leGl0KHZvaWQpOworaW50IGRy bV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KTsKK3ZvaWQg ZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCk7CisK KyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGRybV9kcF9hdXhfZGV2X2luaXQodm9pZCkKK3sK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRybV9kcF9hdXhfZGV2X2V4aXQo dm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZu b2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1 eCAqYXV4KQoreworfQorCisjZW5kaWYKKworI2VuZGlmCi0tIAoyLjQuMwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK