From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Anand Subject: [RFC PATCH v2 1/8] drm/i915: setup bridge for HDMI LPE audio driver Date: Sat, 1 Oct 2016 05:52:35 +0530 Message-ID: <20161001002242.31025-2-jerome.anand@intel.com> References: <20161001002242.31025-1-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 746446E8AD for ; Wed, 12 Oct 2016 16:26:59 +0000 (UTC) Resent-Message-ID: <20161012162655.GK4329@intel.com> Resent-To: intel-gfx@lists.freedesktop.org In-Reply-To: <20161001002242.31025-1-jerome.anand@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 Cc: tiwai@suse.de, broonie@opensource.wolfsonmicro.com List-Id: intel-gfx@lists.freedesktop.org RW5hYmxlIHN1cHBvcnQgZm9yIEhETUkgTFBFIGF1ZGlvIG1vZGUgb24gQmF5dHJhaWwgYW5kCkNo ZXJyeXRyYWlsIHdoZW4gSERhdWRpbyBjb250cm9sbGVyIGlzIG5vdCBkZXRlY3RlZAoKU2V0dXAg bWluaW11bSByZXF1aXJlZCByZXNvdXJjZXMgZHVyaW5nIGk5MTVfZHJpdmVyX2xvYWQ6CjEuIENy ZWF0ZSBhIHBsYXRmb3JtIGRldmljZSB0byBzaGFyZSBNTUlPL0lSUSByZXNvdXJjZXMKMi4gTWFr ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIGNoaWxkIG9mIGk5MTUgZGV2aWNlIGZvciBydW50aW1lIFBN LgozLiBDcmVhdGUgSVJRIGNoaXAgdG8gZm9yd2FyZCBIRE1JIExQRSBhdWRpbyBpcnFzLgoKSERN SSBMUEUgYXVkaW8gZHJpdmVyIChhIHN0YW5kYWxvbmUgc291bmQgZHJpdmVyKSBwcm9iZXMgdGhl CkxQRSBhdWRpbyBkZXZpY2UgYW5kIGNyZWF0ZXMgYSBuZXcgc291bmQgY2FyZC4KClNpZ25lZC1v ZmYtYnk6IFBpZXJyZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBsaW51eC5p bnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEplcm9tZSBBbmFuZCA8amVyb21lLmFuYW5kQGludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICB8ICAgMyAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICB8ICAxMyArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgfCAgMTkgKysKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfaXJxLmMgICAgICAgIHwgIDE0ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVf YXVkaW8uYyB8IDM1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUv ZHJtL2ludGVsX2xwZV9hdWRpby5oICAgICAgICAgIHwgIDQ1ICsrKysrCiA3IGZpbGVzIGNoYW5n ZWQsIDQ1MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgaW5jbHVkZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4 IGU2ZmUwMDQuLjExZjk3NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0xMTUsNiArMTE1LDkg QEAgaTkxNS15ICs9IGludGVsX2d2dC5vCiBpbmNsdWRlICQoc3JjKS9ndnQvTWFrZWZpbGUKIGVu ZGlmCiAKKyMgTFBFIEF1ZGlvIGZvciBWTFYgYW5kIENIVAoraTkxNS15ICs9IGludGVsX2xwZV9h dWRpby5vCisKIG9iai0kKENPTkZJR19EUk1fSTkxNSkgKz0gaTkxNS5vCiAKIENGTEFHU19pOTE1 X3RyYWNlX3BvaW50cy5vIDo9IC1JJChzcmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAz MWIyYjYzLi5hYjFlNDc2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0xMTQxLDcgKzEx NDEsMTMgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogCWlmIChJU19HRU41KGRldl9wcml2KSkKIAkJaW50ZWxfZ3B1 X2lwc19pbml0KGRldl9wcml2KTsKIAotCWk5MTVfYXVkaW9fY29tcG9uZW50X2luaXQoZGV2X3By aXYpOworCWlmIChpbnRlbF9scGVfYXVkaW9fZGV0ZWN0KGRldl9wcml2KSkgeworCQlpZiAoaW50 ZWxfbHBlX2F1ZGlvX3NldHVwKGRldl9wcml2KSA8IDApCisJCQlEUk1fRVJST1IoImZhaWxlZCB0 byBzZXR1cCBMUEUgQXVkaW8gYnJpZGdlXG4iKTsKKwl9CisKKwlpZiAoIUlTX0xQRV9BVURJT19F TkFCTEVEKGRldl9wcml2KSkKKwkJaTkxNV9hdWRpb19jb21wb25lbnRfaW5pdChkZXZfcHJpdik7 CiAKIAkvKgogCSAqIFNvbWUgcG9ydHMgcmVxdWlyZSBjb3JyZWN0bHkgc2V0LXVwIGhwZCByZWdp c3RlcnMgZm9yIGRldGVjdGlvbiB0bwpAQCAtMTE1OSw3ICsxMTY1LDEwIEBAIHN0YXRpYyB2b2lk IGk5MTVfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK ICAqLwogc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cChkZXZf cHJpdik7CisJaWYgKElTX0xQRV9BVURJT19FTkFCTEVEKGRldl9wcml2KSkKKwkJaW50ZWxfbHBl X2F1ZGlvX3RlYXJkb3duKGRldl9wcml2KTsKKwllbHNlCisJCWk5MTVfYXVkaW9fY29tcG9uZW50 X2NsZWFudXAoZGV2X3ByaXYpOwogCiAJaW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOwogCWFjcGlf dmlkZW9fdW5yZWdpc3RlcigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggOTFmZjNkNy4u Mzk5YThlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yMDg3LDYgKzIwODcsMTIgQEAg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCS8qIFVzZWQgdG8gc2F2ZSB0aGUgcGlwZS10by1l bmNvZGVyIG1hcHBpbmcgZm9yIGF1ZGlvICovCiAJc3RydWN0IGludGVsX2VuY29kZXIgKmF2X2Vu Y19tYXBbSTkxNV9NQVhfUElQRVNdOwogCisJLyogbmVjZXNzYXJ5IHJlc291cmNlIHNoYXJpbmcg d2l0aCBIRE1JIExQRSBhdWRpbyBkcml2ZXIuICovCisJc3RydWN0IHsKKwkJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGxhdGRldjsKKwkJaW50CWlycTsKKwl9IGxwZV9hdWRpbzsKKwogCS8qCiAJ ICogTk9URTogVGhpcyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZmIGhl cmUuIFlvdXIgcGF0Y2gKIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEg YmV0dGVyIHBsYWNlLgpAQCAtMjgyNyw2ICsyODMzLDEzIEBAIHN0cnVjdCBkcm1faTkxNV9jbWRf dGFibGUgewogCiAjZGVmaW5lIEhBU19QT09MRURfRVUoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5o YXNfcG9vbGVkX2V1KQogCisjZGVmaW5lIEhBU19MUEVfQVVESU8oZGV2KQkoSVNfVkFMTEVZVklF VyhkZXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2KSkKKyNkZWZpbmUgSVNfTFBFX0FVRElPX0VOQUJM RUQoZGV2X3ByaXYpIFwKKwkJCQkoX19JOTE1X18oZGV2X3ByaXYpLT5scGVfYXVkaW8ucGxhdGRl diAhPSBOVUxMKQorI2RlZmluZSBJU19MUEVfQVVESU9fSVJRX1ZBTElEKGRldl9wcml2KSBcCisJ CQkJKF9fSTkxNV9fKGRldl9wcml2KS0+bHBlX2F1ZGlvLmlycSA+PSAwKQorCisKICNkZWZpbmUg SU5URUxfUENIX0RFVklDRV9JRF9NQVNLCQkweGZmMDAKICNkZWZpbmUgSU5URUxfUENIX0lCWF9E RVZJQ0VfSURfVFlQRQkJMHgzYjAwCiAjZGVmaW5lIElOVEVMX1BDSF9DUFRfREVWSUNFX0lEX1RZ UEUJCTB4MWMwMApAQCAtMzU3OSw2ICszNTkyLDEyIEBAIGV4dGVybiBpbnQgaTkxNV9yZXN0b3Jl X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1X3NldHVwX3N5c2ZzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGk5MTVfdGVhcmRvd25fc3lz ZnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAorLyogaTkxNV9scGVfYXVk aW8uYyAqLworaW50ICBpbnRlbF9scGVfYXVkaW9fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKK3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX3RlYXJkb3duKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IGludGVsX2xwZV9hdWRp b19kZXRlY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKwogLyogaW50ZWxf aTJjLmMgKi8KIGV4dGVybiBpbnQgaW50ZWxfc2V0dXBfZ21idXMoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7CiBleHRlcm4gdm9pZCBpbnRlbF90ZWFyZG93bl9nbWJ1cyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDZlZDViMjQuLmQ4ZjUxNWYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMTgyNyw2ICsxODI3LDEzIEBAIHN0YXRpYyBpcnFy ZXR1cm5fdCB2YWxsZXl2aWV3X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAkJICog c2lnbmFsbGVkIGluIGlpciAqLwogCQl2YWxsZXl2aWV3X3BpcGVzdGF0X2lycV9hY2soZGV2X3By aXYsIGlpciwgcGlwZV9zdGF0cyk7CiAKKwkJaWYgKElTX0xQRV9BVURJT19FTkFCTEVEKGRldl9w cml2KSkKKwkJCWlmIChJU19MUEVfQVVESU9fSVJRX1ZBTElEKGRldl9wcml2KSkKKwkJCQlpZiAo aWlyICYgKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAorCQkJCQlJOTE1X0xQRV9QSVBFX0Jf SU5URVJSVVBUIHwKKwkJCQkJSTkxNV9MUEVfUElQRV9DX0lOVEVSUlVQVCkpCisJCQkJCWludGVs X2xwZV9hdWRpb19pcnFfaGFuZGxlcihkZXZfcHJpdik7CisKIAkJLyoKIAkJICogVkxWX0lJUiBp cyBzaW5nbGUgYnVmZmVyZWQsIGFuZCByZWZsZWN0cyB0aGUgbGV2ZWwKIAkJICogZnJvbSBQSVBF U1RBVC9QT1JUX0hPVFBMVUdfU1RBVCwgaGVuY2UgY2xlYXIgaXQgbGFzdC4KQEAgLTE5MDcsNiAr MTkxNCwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgY2hlcnJ5dmlld19pcnFfaGFuZGxlcihpbnQg aXJxLCB2b2lkICphcmcpCiAJCSAqIHNpZ25hbGxlZCBpbiBpaXIgKi8KIAkJdmFsbGV5dmlld19w aXBlc3RhdF9pcnFfYWNrKGRldl9wcml2LCBpaXIsIHBpcGVfc3RhdHMpOwogCisJCWlmIChJU19M UEVfQVVESU9fRU5BQkxFRChkZXZfcHJpdikpCisJCQlpZiAoSVNfTFBFX0FVRElPX0lSUV9WQUxJ RChkZXZfcHJpdikpCisJCQkJaWYgKGlpciAmIChJOTE1X0xQRV9QSVBFX0FfSU5URVJSVVBUIHwK KwkJCQkJSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCB8CisJCQkJCUk5MTVfTFBFX1BJUEVfQ19J TlRFUlJVUFQpKQorCQkJCQlpbnRlbF9scGVfYXVkaW9faXJxX2hhbmRsZXIoZGV2X3ByaXYpOwor CiAJCS8qCiAJCSAqIFZMVl9JSVIgaXMgc2luZ2xlIGJ1ZmZlcmVkLCBhbmQgcmVmbGVjdHMgdGhl IGxldmVsCiAJCSAqIGZyb20gUElQRVNUQVQvUE9SVF9IT1RQTFVHX1NUQVQsIGhlbmNlIGNsZWFy IGl0IGxhc3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA4ZDQ0Y2VlLi5mYjczNGYyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTIxMzcsNiArMjEzNyw5IEBAIGVudW0gc2tsX2Rp c3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSBJOTE1X0FTTEVfSU5URVJSVVBUCQkJCSgxPDwwKQog I2RlZmluZSBJOTE1X0JTRF9VU0VSX0lOVEVSUlVQVAkJCQkoMTw8MjUpCiAKKyNkZWZpbmUgSTkx NV9IRE1JX0xQRV9BVURJT19CQVNFCShWTFZfRElTUExBWV9CQVNFICsgMHg2NTAwMCkKKyNkZWZp bmUgSTkxNV9IRE1JX0xQRV9BVURJT19TSVpFCTB4MTAwMAorCiAjZGVmaW5lIEdFTjZfQlNEX1JO Q0lECQkJX01NSU8oMHgxMjE5OCkKIAogI2RlZmluZSBHRU43X0ZGX1RIUkVBRF9NT0RFCQlfTU1J TygweDIwYTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVk aW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmUyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYwpAQCAtMCwwICsxLDM1NyBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBQaWVy cmUtTG91aXMgQm9zc2FydCA8cGllcnJlLWxvdWlzLmJvc3NhcnRAbGludXguaW50ZWwuY29tPgor ICogICAgSmVyb21lIEFuYW5kIDxqZXJvbWUuYW5hbmRAaW50ZWwuY29tPgorICogICAgYmFzZWQg b24gVkVEIHBhdGNoZXMKKyAqCisgKi8KKworLyoqCisgKiBET0M6IExQRSBBdWRpbyBpbnRlZ3Jh dGlvbiBpbnRlZ3JhdGlvbiBmb3IgSERNSSBvciBEUCBwbGF5YmFjaworICoKKyAqIE1vdGl2YXRp b246CisgKiBBdG9tIHBsYXRmb3JtcyAoZS5nLiB2YWxsZXl2aWV3IGFuZCBjaGVycnlUcmFpbCkg aW50ZWdyYXRlcyBhIERNQS1iYXNlZAorICogaW50ZXJmYWNlIGFzIGFuIGFsdGVybmF0aXZlIHRv IHRoZSB0cmFkaXRpb25hbCBIRGF1ZGlvIHBhdGguIFdoaWxlIHRoaXMKKyAqIG1vZGUgaXMgdW5y ZWxhdGVkIHRvIHRoZSBMUEUgYWthIFNTVCBhdWRpbyBlbmdpbmUsIHRoZSBkb2N1bWVudGF0aW9u IHJlZmVycworICogdG8gdGhpcyBtb2RlIGFzIExQRSBzbyB3ZSBrZWVwIHRoaXMgbm90YXRpb24g Zm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbmN5LgorICoKKyAqIFRoZSBpbnRlcmZhY2UgaXMgaGFu ZGxlZCBieSBhIHNlcGFyYXRlIHN0YW5kYWxvbmUgZHJpdmVyIG1haW50YWluZWQgaW4gdGhlCisg KiBBTFNBIHN1YnN5c3RlbSBmb3Igc2ltcGxpY2l0eS4gVG8gbWluaW1pemUgdGhlIGludGVyYWN0 aW9uIGJldHdlZW4gdGhlIHR3bworICogc3Vic3lzdGVtcywgYSBicmlkZ2UgaXMgc2V0dXAgYmV0 d2VlbiB0aGUgaGRtaS1scGUtYXVkaW8gYW5kIGk5MTU6CisgKiAxLiBDcmVhdGUgYSBwbGF0Zm9y bSBkZXZpY2UgdG8gc2hhcmUgTU1JTy9JUlEgcmVzb3VyY2VzCisgKiAyLiBNYWtlIHRoZSBwbGF0 Zm9ybSBkZXZpY2UgY2hpbGQgb2YgaTkxNSBkZXZpY2UgZm9yIHJ1bnRpbWUgUE0uCisgKiAzLiBD cmVhdGUgSVJRIGNoaXAgdG8gZm9yd2FyZCB0aGUgTFBFIGF1ZGlvIGlycXMuCisgKiB0aGUgaGRt aS1scGUtYXVkaW8gZHJpdmVyIHByb2JlcyB0aGUgbHBlIGF1ZGlvIGRldmljZSBhbmQgY3JlYXRl cyBhIG5ldworICogc291bmQgY2FyZAorICoKKyAqIFRocmVhdHM6CisgKiBEdWUgdG8gdGhlIHJl c3RyaWN0aW9uIGluIExpbnV4IHBsYXRmb3JtIGRldmljZSBtb2RlbCwgdXNlciBuZWVkIG1hbnVh bGx5CisgKiB1bmluc3RhbGwgdGhlIGhkbWktbHBlLWF1ZGlvIGRyaXZlciBiZWZvcmUgdW5pbnN0 YWxsaW5nIGk5MTUgbW9kdWxlLAorICogb3RoZXJ3aXNlIHdlIG1pZ2h0IHJ1biBpbnRvIHVzZS1h ZnRlci1mcmVlIGlzc3VlcyBhZnRlciBpOTE1IHJlbW92ZXMgdGhlCisgKiBwbGF0Zm9ybSBkZXZp Y2U6IGV2ZW4gdGhvdWdoIGhkbWktbHBlLWF1ZGlvIGRyaXZlciBpcyByZWxlYXNlZCwgdGhlIG1v ZHVsZXMKKyAqIGlzIHN0aWxsIGluICJpbnN0YWxsZWQiIHN0YXR1cy4KKyAqCisgKiBJbXBsZW1l bnRhdGlvbjoKKyAqIFRoZSBNTUlPL1JFRyBwbGF0Zm9ybSByZXNvdXJjZXMgYXJlIGNyZWF0ZWQg YWNjb3JkaW5nIHRvIHRoZSByZWdpc3RlcnMKKyAqIHNwZWNpZmljYXRpb24uCisgKiBXaGVuIGZv cndhcmRpbmcgTFBFIGF1ZGlvIGlycXMsIHRoZSBmbG93IGNvbnRyb2wgaGFuZGxlciBzZWxlY3Rp b24gZGVwZW5kcworICogb24gdGhlIHBsYXRmb3JtLCBmb3IgZXhhbXBsZSBvbiB2YWxsZXl2aWV3 IGhhbmRsZV9zaW1wbGVfaXJxIGlzIGVub3VnaC4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ku aD4KKworI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNp bmNsdWRlIDxkcm0vaW50ZWxfbHBlX2F1ZGlvLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlKgorbHBlX2F1ZGlvX3BsYXRkZXZfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07 CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcnNjWzJdID0ge307CisJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGxhdGRldjsKKwl1NjQgKmRtYV9tYXNrOworCXN0cnVjdCBpbnRlbF9oZG1p X2xwZV9hdWRpb19wZGF0YSAqcGRhdGE7CisKKwlpZiAoZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEg PCAwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXBsYXRkZXYgPSBwbGF0Zm9ybV9k ZXZpY2VfYWxsb2MoImhkbWktbHBlLWF1ZGlvIiwgLTEpOworCWlmICghcGxhdGRldikgeworCQly ZXQgPSAtRU5PTUVNOworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBMUEUgYXVkaW8g cGxhdGZvcm0gZGV2aWNlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogdG8gd29yay1hcm91 bmQgY2hlY2tfYWRkciBpbiBub21tdV9tYXBfc2coKSAqLworCWRtYV9tYXNrID0ga21hbGxvYyhz aXplb2YoKnBsYXRkZXYtPmRldi5kbWFfbWFzayksIEdGUF9LRVJORUwpOworCWlmICghZG1hX21h c2spIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUg ZG1hX21hc2tcbiIpOworCQlnb3RvIGVycl9wdXRfZGV2OworCX0KKwkqZG1hX21hc2sgPSBETUFf QklUX01BU0soMzIpOworCXBsYXRkZXYtPmRldi5kbWFfbWFzayA9IGRtYV9tYXNrOworCXBsYXRk ZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9ICpkbWFfbWFzazsKKworCXJzY1swXS5zdGFydCAg ICA9IHJzY1swXS5lbmQgPSBkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycTsKKwlyc2NbMF0uZmxhZ3Mg ICAgPSBJT1JFU09VUkNFX0lSUTsKKwlyc2NbMF0ubmFtZSAgICAgPSAiaGRtaS1scGUtYXVkaW8t aXJxIjsKKworCURSTV9ERUJVRygiJXM6IEhETUlfQVVESU8gcnNjLnN0YXJ0WzBdID0gMHgleFxu IiwKKwkJX19mdW5jX18sIChpbnQpKHJzY1swXS5zdGFydCkpOworCisJcnNjWzFdLnN0YXJ0ICAg ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkgKworCQlJOTE1X0hETUlfTFBFX0FV RElPX0JBU0U7CisJcnNjWzFdLmVuZCAgICAgID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRl diwgMCkgKworCQlJOTE1X0hETUlfTFBFX0FVRElPX0JBU0UgKyBJOTE1X0hETUlfTFBFX0FVRElP X1NJWkUgLSAxOworCXJzY1sxXS5mbGFncyAgICA9IElPUkVTT1VSQ0VfTUVNOworCXJzY1sxXS5u YW1lICAgICA9ICJoZG1pLWxwZS1hdWRpby1tbWlvIjsKKworCURSTV9ERUJVRygiJXM6IEhETUlf QVVESU8gcnNjLnN0YXJ0WzFdID0gMHgleFxuIiwKKwkJX19mdW5jX18sIChpbnQpKHJzY1sxXS5z dGFydCkpOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGxhdGRldiwg cnNjLCAyKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFkZCByZXNvdXJj ZSBmb3IgcGxhdGZvcm0gZGV2aWNlOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX3B1dF9k ZXY7CisJfQorCisJcGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsK KworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3B1 dF9kZXY7CisJfQorCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CisKKwkvKiBm b3IgTFBFIGF1ZGlvIGRyaXZlcidzIHJ1bnRpbWUtUE0gKi8KKwlwbGF0ZGV2LT5kZXYucGFyZW50 ID0gZGV2LT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwbGF0ZGV2KTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFkZCBMUEUgYXVkaW8gcGxhdGZvcm0gZGV2 aWNlOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX3B1dF9kZXY7CisJfQorCXNwaW5fbG9j a19pbml0KCZwZGF0YS0+bHBlX2F1ZGlvX3Nsb2NrKTsKKworCXJldHVybiBwbGF0ZGV2OworZXJy X3B1dF9kZXY6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwbGF0ZGV2KTsKKwlrZnJlZShkbWFfbWFz ayk7CitlcnI6CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RhdGljIHZvaWQgbHBlX2F1 ZGlvX3BsYXRkZXZfZGVzdHJveShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7 CisJaWYgKGRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldikgeworCQlwbGF0Zm9ybV9kZXZpY2Vf dW5yZWdpc3RlcihkZXZfcHJpdi0+bHBlX2F1ZGlvLnBsYXRkZXYpOworCQlrZnJlZShkZXZfcHJp di0+bHBlX2F1ZGlvLnBsYXRkZXYtPmRldi5kbWFfbWFzayk7CisJfQorfQorCitzdGF0aWMgdm9p ZCBscGVfYXVkaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGQtPmNoaXBfZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1MzIg dmFsID0gKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAorCQlJOTE1X0xQRV9QSVBFX0JfSU5U RVJSVVBUIHwKKwkJSTkxNV9MUEVfUElQRV9DX0lOVEVSUlVQVCk7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisKKwkvKgorCSAqIFZMVl9JRVIg aXMgYWxyZWFkeSBzZXQgaW4gdGhlIHZsdl9kaXNwbGF5X3Bvc3RpbnN0YWxsKCksCisJICogd2Ug b25seSBjaGFuZ2UgVkxWX0lJUiBhbmQgVkxWX0lNUgorCSAqLworCWRldl9wcml2LT5pcnFfbWFz ayAmPSB+dmFsOworCUk5MTVfV1JJVEUoVkxWX0lJUiwgdmFsKTsKKwlJOTE1X1dSSVRFKFZMVl9J SVIsIHZhbCk7CisJSTkxNV9XUklURShWTFZfSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOworCisJ UE9TVElOR19SRUFEKFZMVl9JTVIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3By aXYtPmlycV9sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGxwZV9hdWRpb19pcnFf bWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGQt PmNoaXBfZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRldik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1MzIgdmFsID0gKEk5MTVfTFBFX1BJ UEVfQV9JTlRFUlJVUFQgfAorCQlJOTE1X0xQRV9QSVBFX0JfSU5URVJSVVBUIHwKKwkJSTkxNV9M UEVfUElQRV9DX0lOVEVSUlVQVCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmly cV9sb2NrLCBpcnFmbGFncyk7CisKKwkvKgorCSAqIFZMVl9JRVIgaXMgYWxyZWFkeSBzZXQgaW4g dGhlIHZsdl9kaXNwbGF5X3Bvc3RpbnN0YWxsKCksCisJICogd2Ugb25seSBjaGFuZ2UgVkxWX0lJ UiBhbmQgVkxWX0lNUgorCSAqLworCWRldl9wcml2LT5pcnFfbWFzayB8PSB2YWw7CisJSTkxNV9X UklURShWTFZfSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOworCUk5MTVfV1JJVEUoVkxWX0lJUiwg dmFsKTsKKwlJOTE1X1dSSVRFKFZMVl9JSVIsIHZhbCk7CisJUE9TVElOR19SRUFEKFZMVl9JSVIp OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFn cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbHBlX2F1ZGlvX2lycWNoaXAgPSB7CisJ Lm5hbWUgPSAiaGRtaV9scGVfYXVkaW9faXJxY2hpcCIsCisJLmlycV9tYXNrID0gbHBlX2F1ZGlv X2lycV9tYXNrLAorCS5pcnFfdW5tYXNrID0gbHBlX2F1ZGlvX2lycV91bm1hc2ssCit9OworCitz dGF0aWMgaW50IGxwZV9hdWRpb19pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCit7CisJaW50IGlycSA9IGRldl9wcml2LT5scGVfYXVkaW8uaXJxOworCisJV0FSTl9P TighaW50ZWxfaXJxc19lbmFibGVkKGRldl9wcml2KSk7CisJaXJxX3NldF9jaGlwX2FuZF9oYW5k bGVyX25hbWUoaXJxLAorCQkmbHBlX2F1ZGlvX2lycWNoaXAsCisJCWhhbmRsZV9zaW1wbGVfaXJx LAorCQkiaGRtaV9scGVfYXVkaW9faXJxX2hhbmRsZXIiKTsKKworCXJldHVybiBpcnFfc2V0X2No aXBfZGF0YShpcnEsICZkZXZfcHJpdi0+ZHJtKTsKK30KKworLyoqCisgKiBpbnRlbF9scGVfYXVk aW9faXJxX2hhbmRsZXIoKSAtIGZvcndhcmRzIHRoZSBMUEUgYXVkaW8gaXJxCisgKiBAZGV2X3By aXY6IHRoZSBpOTE1IGRybSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKgorICogdGhlIExQRSBBdWRp byBpcnEgaXMgZm9yd2FyZGVkIHRvIHRoZSBpcnEgaGFuZGxlciByZWdpc3RlcmVkIGJ5IExQRSBh dWRpbworICogZHJpdmVyLgorICovCit2b2lkIGludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9 IGdlbmVyaWNfaGFuZGxlX2lycShkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisJaWYgKHJldCkK KwkJRFJNX0VSUk9SX1JBVEVMSU1JVEVEKCJlcnJvciBoYW5kbGluZyBMUEUgYXVkaW8gaXJxOiAl ZFxuIiwKKwkJCQlyZXQpOworfQorCisvKioKKyAqIGludGVsX2xwZV9hdWRpb19kZXRlY3QoKSAt IGNoZWNrICYgc2V0dXAgbHBlIGF1ZGlvIGlmIHByZXNlbnQKKyAqIEBkZXZfcHJpdjogdGhlIGk5 MTUgZHJtIGRldmljZSBwcml2YXRlIGRhdGEKKyAqCisgKiBEZXRlY3QgaWYgbHBlIGF1ZGlvIGlz IHByZXNlbnQKKyAqCisgKiBSZXR1cm46IHRydWUgaWYgbHBlIGF1ZGlvIHByZXNlbnQgZWxzZSBS ZXR1cm4gPSBmYWxzZQorICovCitpbnQgaW50ZWxfbHBlX2F1ZGlvX2RldGVjdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IGxwZV9wcmVzZW50ID0gZmFsc2U7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCisJaWYgKEhBU19MUEVf QVVESU8oZGV2KSkgeworCQlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRvbV9o ZGF1ZGlvX2lkc1tdID0geworCQkJLyogQmF5dHJhaWwgKi8KKwkJCXtQQ0lfREVWSUNFKFBDSV9W RU5ET1JfSURfSU5URUwsIDB4MGYwNCl9LAorCQkJLyogQnJhc3dlbGwgKi8KKwkJCXtQQ0lfREVW SUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjI4NCl9LAorCQkJe30KKwkJfTsKKworCQlpZiAo IXBjaV9kZXZfcHJlc2VudChhdG9tX2hkYXVkaW9faWRzKSkgeworCQkJRFJNX0lORk8oIiVzJXNc biIsICJIRGF1ZGlvIGNvbnRyb2xsZXIgbm90IGRldGVjdGVkLCIsCisJCQkJInVzaW5nIExQRSBh dWRpbyBpbnN0ZWFkXG4iKTsKKwkJCWxwZV9wcmVzZW50ID0gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1 cm4gbHBlX3ByZXNlbnQ7Cit9CisKKy8qKgorICogaW50ZWxfbHBlX2F1ZGlvX3NldHVwKCkgLSBz ZXR1cCB0aGUgYnJpZGdlIGJldHdlZW4gSERNSSBMUEUgQXVkaW8KKyAqIGRyaXZlciBhbmQgaTkx NQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAq IHNldCB1cCB0aGUgbWluaW11bSByZXF1aXJlZCByZXNvdXJjZXMgZm9yIHRoZSBicmlkZ2U6IGly cSBjaGlwLAorICogcGxhdGZvcm0gcmVzb3VyY2UgYW5kIHBsYXRmb3JtIGRldmljZS4gaTkxNSBk ZXZpY2UgaXMgc2V0IGFzIHBhcmVudAorICogb2YgdGhlIG5ldyBwbGF0Zm9ybSBkZXZpY2UuCisg KgorICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwuIG5vbi16ZXJvIGlmIGFsbG9jYXRpb24vaW5p dGlhbGl6YXRpb24gZmFpbHMKKyAqLworaW50IGludGVsX2xwZV9hdWRpb19zZXR1cChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHJldDsKKworCWRldl9wcml2LT5s cGVfYXVkaW8uaXJxID0gaXJxX2FsbG9jX2Rlc2NzKC0xLCAwLCAxLCAwKTsKKwlpZiAoZGV2X3By aXYtPmxwZV9hdWRpby5pcnEgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRl IElSUSBkZXNjOiAlZFxuIiwKKwkJCWRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsKKwkJcmV0ID0g ZGV2X3ByaXYtPmxwZV9hdWRpby5pcnE7CisJCWdvdG8gZXJyOworCX0KKworCURSTV9ERUJVRygi JXMgOiBpcnEgPSAlZFxuIiwgX19mdW5jX18sIGRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsKKwor CXJldCA9IGxwZV9hdWRpb19pcnFfaW5pdChkZXZfcHJpdik7CisKKwlpZiAocmV0KSB7CisKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBpcnFjaGlwIGZvciBscGUgYXVkaW86ICVk XG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJZGV2X3ByaXYtPmxw ZV9hdWRpby5wbGF0ZGV2ID0gbHBlX2F1ZGlvX3BsYXRkZXZfY3JlYXRlKGRldl9wcml2KTsKKwor CWlmIChJU19FUlIoZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2KSkgeworCQlyZXQgPSBQVFJf RVJSKGRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldik7CisJCURSTV9FUlJPUigiRmFpbGVkIHRv IGNyZWF0ZSBscGUgYXVkaW8gcGxhdGZvcm0gZGV2aWNlOiAlZFxuIiwKKwkJCXJldCk7CisJCWdv dG8gZXJyX2ZyZWVfaXJxOworCX0KKworCXJldHVybiAwOworZXJyX2ZyZWVfaXJxOgorCWlycV9m cmVlX2Rlc2MoZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEpOworZXJyOgorCWRldl9wcml2LT5scGVf YXVkaW8uaXJxID0gLTE7CisJZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2ID0gTlVMTDsKKwly ZXR1cm4gcmV0OworfQorCisvKioKKyAqIGludGVsX2xwZV9hdWRpb190ZWFyZG93bigpIC0gZGVz dHJveSB0aGUgYnJpZGdlIGJldHdlZW4gSERNSSBMUEUKKyAqIGF1ZGlvIGRyaXZlciBhbmQgaTkx NQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAq IHJlbGVhc2UgYWxsIHRoZSByZXNvdXJjZXMgZm9yIExQRSBhdWRpbyA8LT4gaTkxNSBicmlkZ2Uu CisgKi8KK3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX3RlYXJkb3duKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCBpcnFf ZGVzYyAqZGVzYzsKKworCWRlc2MgPSBJU19MUEVfQVVESU9fSVJRX1ZBTElEKGRldl9wcml2KSA/ CisJCQlpcnFfdG9fZGVzYyhkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSkgOiBOVUxMOworCisJLyoq CisJICogbWFzayBMUEUgYXVkaW8gaXJxIGJlZm9yZSBkZXN0cm95aW5nCisJICovCisJaWYgKGRl c2MpCisJCWxwZV9hdWRpb19pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJbHBlX2F1ZGlvX3Bs YXRkZXZfZGVzdHJveShkZXZfcHJpdik7CisKKwlpZiAoZGVzYykKKwkJaXJxX2ZyZWVfZGVzYyhk ZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZf cHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2lu dGVsX2xwZV9hdWRpby5oIGIvaW5jbHVkZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0YzQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2lu Y2x1ZGUvZHJtL2ludGVsX2xwZV9hdWRpby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK KyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9JTlRFTF9MUEVfQVVESU9fSF8K KyNkZWZpbmUgX0lOVEVMX0xQRV9BVURJT19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K KworI2RlZmluZSBIRE1JX01BWF9FTERfQllURVMJMTI4CisKK3N0cnVjdCBpbnRlbF9oZG1pX2xw ZV9hdWRpb19lbGQgeworCWludCBwb3J0X2lkOworCXVuc2lnbmVkIGNoYXIgZWxkX2RhdGFbSERN SV9NQVhfRUxEX0JZVEVTXTsKK307CisKK3N0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRpb19wZGF0 YSB7CisJYm9vbCBub3RpZnlfcGVuZGluZzsKKwlpbnQgdG1kc19jbG9ja19zcGVlZDsKKwlib29s IGhkbWlfY29ubmVjdGVkOworCXN0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRpb19lbGQgZWxkOwor CXZvaWQgKCpub3RpZnlfYXVkaW9fbHBlKSh2b2lkICphdWRpb19wdHIpOworCXNwaW5sb2NrX3Qg bHBlX2F1ZGlvX3Nsb2NrOworfTsKKworI2VuZGlmIC8qIF9JOTE1X0xQRV9BVURJT19IXyAqLwot LSAKMi45LjMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==