From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Anand Subject: [PATCH v4 1/5] drm/i915: setup bridge for HDMI LPE audio driver Date: Sat, 21 Jan 2017 03:52:28 +0530 Message-ID: <20170120222232.27791-2-jerome.anand@intel.com> References: <20170120222232.27791-1-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170120222232.27791-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, alsa-devel@alsa-project.org Cc: tiwai@suse.de, broonie@kernel.org, rakesh.a.ughreja@intel.com List-Id: alsa-devel@alsa-project.org RW5hYmxlIHN1cHBvcnQgZm9yIEhETUkgTFBFIGF1ZGlvIG1vZGUgb24gQmF5dHJhaWwgYW5kCkNo ZXJyeXRyYWlsIHdoZW4gSERhdWRpbyBjb250cm9sbGVyIGlzIG5vdCBkZXRlY3RlZAoKU2V0dXAg bWluaW11bSByZXF1aXJlZCByZXNvdXJjZXMgZHVyaW5nIGk5MTVfZHJpdmVyX2xvYWQ6CjEuIENy ZWF0ZSBhIHBsYXRmb3JtIGRldmljZSB0byBzaGFyZSBNTUlPL0lSUSByZXNvdXJjZXMKMi4gTWFr ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIGNoaWxkIG9mIGk5MTUgZGV2aWNlIGZvciBydW50aW1lIFBN LgozLiBDcmVhdGUgSVJRIGNoaXAgdG8gZm9yd2FyZCBIRE1JIExQRSBhdWRpbyBpcnFzLgoKSERN SSBMUEUgYXVkaW8gZHJpdmVyIChhIHN0YW5kYWxvbmUgc291bmQgZHJpdmVyKSBwcm9iZXMgdGhl CkxQRSBhdWRpbyBkZXZpY2UgYW5kIGNyZWF0ZXMgYSBuZXcgc291bmQgY2FyZC4KClNpZ25lZC1v ZmYtYnk6IFBpZXJyZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBsaW51eC5p bnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEplcm9tZSBBbmFuZCA8amVyb21lLmFuYW5kQGludGVs LmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL2dwdS9pOTE1LnJzdCAgICAgICAgICAgICB8ICAgOSAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICB8ICAgMyArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgfCAgMTUgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfaXJxLmMgICAgICAgIHwgIDE2ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o ICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYyB8 IDMzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvZHJtL2ludGVs X2xwZV9hdWRpby5oICAgICAgICAgIHwgIDQ2ICsrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQzNyBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9p OTE1LnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CmluZGV4IDEwNDI5NmQuLmJkOWI3 NjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CisrKyBiL0RvY3VtZW50 YXRpb24vZ3B1L2k5MTUucnN0CkBAIC0yMjUsNiArMjI1LDE1IEBAIERpc3BsYXkgUExMcwogLi4g a2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwbGxfbWdyLmgKICAgIDpp bnRlcm5hbDoKIAoraW50ZWwgaGRtaSBscGUgYXVkaW8gc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHBlX2F1ZGlvLmMKKyAgIDpkb2M6ICBMUEUgQXVkaW8gaW50ZWdyYXRpb24gZm9yIEhETUkg b3IgRFAgcGxheWJhY2sKKworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xwZV9hdWRpby5jCisgICA6aW50ZXJuYWw6CisKIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBD b21tYW5kIFN1Ym1pc3Npb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA1MTk2NTA5Li4yYmNhMjM5IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQpAQCAtMTI3LDYgKzEyNyw5IEBAIGk5MTUteSArPSBpbnRlbF9ndnQubwogaW5j bHVkZSAkKHNyYykvZ3Z0L01ha2VmaWxlCiBlbmRpZgogCisjIExQRSBBdWRpbyBmb3IgVkxWIGFu ZCBDSFQKK2k5MTUteSArPSBpbnRlbF9scGVfYXVkaW8ubworCiBvYmotJChDT05GSUdfRFJNX0k5 MTUpICs9IGk5MTUubwogCiBDRkxBR1NfaTkxNV90cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNGQyMmI0Yi4uNzBkNzI4YiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jCkBAIC0xMTMxLDcgKzExMzEsOCBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZl cl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaWYgKElTX0dF TjUoZGV2X3ByaXYpKQogCQlpbnRlbF9ncHVfaXBzX2luaXQoZGV2X3ByaXYpOwogCi0JaTkxNV9h dWRpb19jb21wb25lbnRfaW5pdChkZXZfcHJpdik7CisJaWYgKGludGVsX2xwZV9hdWRpb19pbml0 KGRldl9wcml2KSA8IDApCisJCWk5MTVfYXVkaW9fY29tcG9uZW50X2luaXQoZGV2X3ByaXYpOwog CiAJLyoKIAkgKiBTb21lIHBvcnRzIHJlcXVpcmUgY29ycmVjdGx5IHNldC11cCBocGQgcmVnaXN0 ZXJzIGZvciBkZXRlY3Rpb24gdG8KQEAgLTExNDksNyArMTE1MCwxMCBAQCBzdGF0aWMgdm9pZCBp OTE1X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAg Ki8KIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQogewotCWk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoZGV2X3By aXYpOworCWlmIChIQVNfTFBFX0FVRElPKGRldl9wcml2KSkKKwkJaW50ZWxfbHBlX2F1ZGlvX3Rl YXJkb3duKGRldl9wcml2KTsKKwllbHNlCisJCWk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAo ZGV2X3ByaXYpOwogCiAJaW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOwogCWFjcGlfdmlkZW9fdW5y ZWdpc3RlcigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZjY2ZWVlZGUuLmNjNzAzM2Eg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjQ0OSw2ICsyNDQ5LDEyIEBAIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlIHsKIAkvKiBVc2VkIHRvIHNhdmUgdGhlIHBpcGUtdG8tZW5jb2RlciBt YXBwaW5nIGZvciBhdWRpbyAqLwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICphdl9lbmNfbWFwW0k5 MTVfTUFYX1BJUEVTXTsKIAorCS8qIG5lY2Vzc2FyeSByZXNvdXJjZSBzaGFyaW5nIHdpdGggSERN SSBMUEUgYXVkaW8gZHJpdmVyLiAqLworCXN0cnVjdCB7CisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBsYXRkZXY7CisJCWludAlpcnE7CisJfSBscGVfYXVkaW87CisKIAkvKgogCSAqIE5PVEU6 IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZb3Vy IHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZvciBhIGJldHRlciBw bGFjZS4KQEAgLTI4NDgsNiArMjg1NCw4IEBAIGludGVsX2luZm8oY29uc3Qgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogCiAjZGVmaW5lIEhBU19QT09MRURfRVUoZGV2X3ByaXYp CSgoZGV2X3ByaXYpLT5pbmZvLmhhc19wb29sZWRfZXUpCiAKKyNkZWZpbmUgSEFTX0xQRV9BVURJ TyhkZXZfcHJpdikgKChkZXZfcHJpdiktPmxwZV9hdWRpby5wbGF0ZGV2ICE9IE5VTEwpCisKICNk ZWZpbmUgSU5URUxfUENIX0RFVklDRV9JRF9NQVNLCQkweGZmMDAKICNkZWZpbmUgSU5URUxfUENI X0lCWF9ERVZJQ0VfSURfVFlQRQkJMHgzYjAwCiAjZGVmaW5lIElOVEVMX1BDSF9DUFRfREVWSUNF X0lEX1RZUEUJCTB4MWMwMApAQCAtMzYwOSw2ICszNjE3LDEzIEBAIGV4dGVybiBpbnQgaTkxNV9y ZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGk5 MTVfc2V0dXBfc3lzZnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQg aTkxNV90ZWFyZG93bl9zeXNmcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwog CisvKiBpOTE1X2xwZV9hdWRpby5jICovCitpbnQgIGludGVsX2xwZV9hdWRpb19pbml0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitpbnQgIGludGVsX2xwZV9hdWRpb19zZXR1 cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpbnRlbF9scGVfYXVk aW9fdGVhcmRvd24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgaW50 ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7Citib29sIGludGVsX2xwZV9hdWRpb19kZXRlY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKKwogLyogaW50ZWxfaTJjLmMgKi8KIGV4dGVybiBpbnQgaW50ZWxfc2V0dXBf Z21idXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiB2b2lkIGlu dGVsX3RlYXJkb3duX2dtYnVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBhMGU3MGY1Li5kOTM5M2Q2YSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2lycS5jCkBAIC0xODkzLDYgKzE4OTMsMTAgQEAgc3RhdGljIGlycXJldHVybl90IHZh bGxleXZpZXdfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogCQkgKiBzaWduYWxsZWQg aW4gaWlyICovCiAJCXZhbGxleXZpZXdfcGlwZXN0YXRfaXJxX2FjayhkZXZfcHJpdiwgaWlyLCBw aXBlX3N0YXRzKTsKIAorCQlpZiAoaWlyICYgKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAor CQkJICAgSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCkpCisJCQlpbnRlbF9scGVfYXVkaW9faXJx X2hhbmRsZXIoZGV2X3ByaXYpOworCiAJCS8qCiAJCSAqIFZMVl9JSVIgaXMgc2luZ2xlIGJ1ZmZl cmVkLCBhbmQgcmVmbGVjdHMgdGhlIGxldmVsCiAJCSAqIGZyb20gUElQRVNUQVQvUE9SVF9IT1RQ TFVHX1NUQVQsIGhlbmNlIGNsZWFyIGl0IGxhc3QuCkBAIC0xOTczLDYgKzE5NzcsMTEgQEAgc3Rh dGljIGlycXJldHVybl90IGNoZXJyeXZpZXdfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJn KQogCQkgKiBzaWduYWxsZWQgaW4gaWlyICovCiAJCXZhbGxleXZpZXdfcGlwZXN0YXRfaXJxX2Fj ayhkZXZfcHJpdiwgaWlyLCBwaXBlX3N0YXRzKTsKIAorCQlpZiAoaWlyICYgKEk5MTVfTFBFX1BJ UEVfQV9JTlRFUlJVUFQgfAorCQkJICAgSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCB8CisJCQkg ICBJOTE1X0xQRV9QSVBFX0NfSU5URVJSVVBUKSkKKwkJCWludGVsX2xwZV9hdWRpb19pcnFfaGFu ZGxlcihkZXZfcHJpdik7CisKIAkJLyoKIAkJICogVkxWX0lJUiBpcyBzaW5nbGUgYnVmZmVyZWQs IGFuZCByZWZsZWN0cyB0aGUgbGV2ZWwKIAkJICogZnJvbSBQSVBFU1RBVC9QT1JUX0hPVFBMVUdf U1RBVCwgaGVuY2UgY2xlYXIgaXQgbGFzdC4KQEAgLTI5MTQsNiArMjkyMyw3IEBAIHN0YXRpYyB2 b2lkIHZsdl9kaXNwbGF5X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiAJdTMyIHBpcGVzdGF0X21hc2s7CiAJdTMyIGVuYWJsZV9tYXNrOwogCWVudW0g cGlwZSBwaXBlOworCXUzMiB2YWw7CiAKIAlwaXBlc3RhdF9tYXNrID0gUExBTkVfRkxJUF9ET05F X0lOVF9TVEFUVVNfVkxWIHwKIAkJCVBJUEVfQ1JDX0RPTkVfSU5URVJSVVBUX1NUQVRVUzsKQEAg LTI5MzAsNiArMjk0MCwxMiBAQCBzdGF0aWMgdm9pZCB2bHZfZGlzcGxheV9pcnFfcG9zdGluc3Rh bGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCiAJV0FSTl9PTihkZXZfcHJp di0+aXJxX21hc2sgIT0gfjApOwogCisJdmFsID0gKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQg fAorCQlJOTE1X0xQRV9QSVBFX0JfSU5URVJSVVBUIHwKKwkJSTkxNV9MUEVfUElQRV9DX0lOVEVS UlVQVCk7CisKKwllbmFibGVfbWFzayB8PSB2YWw7CisKIAlkZXZfcHJpdi0+aXJxX21hc2sgPSB+ ZW5hYmxlX21hc2s7CiAKIAlHRU41X0lSUV9JTklUKFZMVl8sIGRldl9wcml2LT5pcnFfbWFzaywg ZW5hYmxlX21hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggMDA5NzBhYS4uNjQzYmM2 ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0yNDI4LDYgKzI0MjgsOSBAQCBlbnVtIHNr bF9kaXNwX3Bvd2VyX3dlbGxzIHsKICNkZWZpbmUgSTkxNV9BU0xFX0lOVEVSUlVQVAkJCQkoMTw8 MCkKICNkZWZpbmUgSTkxNV9CU0RfVVNFUl9JTlRFUlJVUFQJCQkJKDE8PDI1KQogCisjZGVmaW5l IEk5MTVfSERNSV9MUEVfQVVESU9fQkFTRQkoVkxWX0RJU1BMQVlfQkFTRSArIDB4NjUwMDApCisj ZGVmaW5lIEk5MTVfSERNSV9MUEVfQVVESU9fU0laRQkweDEwMDAKKwogI2RlZmluZSBHRU42X0JT RF9STkNJRAkJCV9NTUlPKDB4MTIxOTgpCiAKICNkZWZpbmUgR0VON19GRl9USFJFQURfTU9ERQkJ X01NSU8oMHgyMGEwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHBl X2F1ZGlvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTk3MzJjCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHBlX2F1ZGlvLmMKQEAgLTAsMCArMSwzMzkgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAg UGllcnJlLUxvdWlzIEJvc3NhcnQgPHBpZXJyZS1sb3Vpcy5ib3NzYXJ0QGxpbnV4LmludGVsLmNv bT4KKyAqICAgIEplcm9tZSBBbmFuZCA8amVyb21lLmFuYW5kQGludGVsLmNvbT4KKyAqICAgIGJh c2VkIG9uIFZFRCBwYXRjaGVzCisgKgorICovCisKKy8qKgorICogRE9DOiBMUEUgQXVkaW8gaW50 ZWdyYXRpb24gZm9yIEhETUkgb3IgRFAgcGxheWJhY2sKKyAqCisgKiBNb3RpdmF0aW9uOgorICog QXRvbSBwbGF0Zm9ybXMgKGUuZy4gdmFsbGV5dmlldyBhbmQgY2hlcnJ5VHJhaWwpIGludGVncmF0 ZXMgYSBETUEtYmFzZWQKKyAqIGludGVyZmFjZSBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgdHJh ZGl0aW9uYWwgSERhdWRpbyBwYXRoLiBXaGlsZSB0aGlzCisgKiBtb2RlIGlzIHVucmVsYXRlZCB0 byB0aGUgTFBFIGFrYSBTU1QgYXVkaW8gZW5naW5lLCB0aGUgZG9jdW1lbnRhdGlvbiByZWZlcnMK KyAqIHRvIHRoaXMgbW9kZSBhcyBMUEUgc28gd2Uga2VlcCB0aGlzIG5vdGF0aW9uIGZvciB0aGUg c2FrZSBvZiBjb25zaXN0ZW5jeS4KKyAqCisgKiBUaGUgaW50ZXJmYWNlIGlzIGhhbmRsZWQgYnkg YSBzZXBhcmF0ZSBzdGFuZGFsb25lIGRyaXZlciBtYWludGFpbmVkIGluIHRoZQorICogQUxTQSBz dWJzeXN0ZW0gZm9yIHNpbXBsaWNpdHkuIFRvIG1pbmltaXplIHRoZSBpbnRlcmFjdGlvbiBiZXR3 ZWVuIHRoZSB0d28KKyAqIHN1YnN5c3RlbXMsIGEgYnJpZGdlIGlzIHNldHVwIGJldHdlZW4gdGhl IGhkbWktbHBlLWF1ZGlvIGFuZCBpOTE1OgorICogMS4gQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNl IHRvIHNoYXJlIE1NSU8vSVJRIHJlc291cmNlcworICogMi4gTWFrZSB0aGUgcGxhdGZvcm0gZGV2 aWNlIGNoaWxkIG9mIGk5MTUgZGV2aWNlIGZvciBydW50aW1lIFBNLgorICogMy4gQ3JlYXRlIElS USBjaGlwIHRvIGZvcndhcmQgdGhlIExQRSBhdWRpbyBpcnFzLgorICogdGhlIGhkbWktbHBlLWF1 ZGlvIGRyaXZlciBwcm9iZXMgdGhlIGxwZSBhdWRpbyBkZXZpY2UgYW5kIGNyZWF0ZXMgYSBuZXcK KyAqIHNvdW5kIGNhcmQKKyAqCisgKiBUaHJlYXRzOgorICogRHVlIHRvIHRoZSByZXN0cmljdGlv biBpbiBMaW51eCBwbGF0Zm9ybSBkZXZpY2UgbW9kZWwsIHVzZXIgbmVlZCBtYW51YWxseQorICog dW5pbnN0YWxsIHRoZSBoZG1pLWxwZS1hdWRpbyBkcml2ZXIgYmVmb3JlIHVuaW5zdGFsbGluZyBp OTE1IG1vZHVsZSwKKyAqIG90aGVyd2lzZSB3ZSBtaWdodCBydW4gaW50byB1c2UtYWZ0ZXItZnJl ZSBpc3N1ZXMgYWZ0ZXIgaTkxNSByZW1vdmVzIHRoZQorICogcGxhdGZvcm0gZGV2aWNlOiBldmVu IHRob3VnaCBoZG1pLWxwZS1hdWRpbyBkcml2ZXIgaXMgcmVsZWFzZWQsIHRoZSBtb2R1bGVzCisg KiBpcyBzdGlsbCBpbiAiaW5zdGFsbGVkIiBzdGF0dXMuCisgKgorICogSW1wbGVtZW50YXRpb246 CisgKiBUaGUgTU1JTy9SRUcgcGxhdGZvcm0gcmVzb3VyY2VzIGFyZSBjcmVhdGVkIGFjY29yZGlu ZyB0byB0aGUgcmVnaXN0ZXJzCisgKiBzcGVjaWZpY2F0aW9uLgorICogV2hlbiBmb3J3YXJkaW5n IExQRSBhdWRpbyBpcnFzLCB0aGUgZmxvdyBjb250cm9sIGhhbmRsZXIgc2VsZWN0aW9uIGRlcGVu ZHMKKyAqIG9uIHRoZSBwbGF0Zm9ybSwgZm9yIGV4YW1wbGUgb24gdmFsbGV5dmlldyBoYW5kbGVf c2ltcGxlX2lycSBpcyBlbm91Z2guCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+ CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNp bmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8 ZHJtL2ludGVsX2xwZV9hdWRpby5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAq CitscGVfYXVkaW9fcGxhdGRldl9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ ZHJtOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwaW5mbyA9IHt9OworCXN0cnVjdCBy ZXNvdXJjZSAqcnNjOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRkZXY7CisJc3RydWN0 IGludGVsX2hkbWlfbHBlX2F1ZGlvX3BkYXRhICpwZGF0YTsKKworCXBkYXRhID0ga3phbGxvYyhz aXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CisKKwlyc2MgPSBrY2FsbG9jKDIsIHNpemVvZigqcnNjKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFyc2MpIHsKKwkJa2ZyZWUocGRhdGEpOworCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKKwl9CisKKwlyc2NbMF0uc3RhcnQgICAgPSByc2NbMF0uZW5kID0gZGV2X3ByaXYtPmxw ZV9hdWRpby5pcnE7CisJcnNjWzBdLmZsYWdzICAgID0gSU9SRVNPVVJDRV9JUlE7CisJcnNjWzBd Lm5hbWUgICAgID0gImhkbWktbHBlLWF1ZGlvLWlycSI7CisKKwlyc2NbMV0uc3RhcnQgICAgPSBw Y2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArCisJCUk5MTVfSERNSV9MUEVfQVVESU9f QkFTRTsKKwlyc2NbMV0uZW5kICAgICAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAw KSArCisJCUk5MTVfSERNSV9MUEVfQVVESU9fQkFTRSArIEk5MTVfSERNSV9MUEVfQVVESU9fU0la RSAtIDE7CisJcnNjWzFdLmZsYWdzICAgID0gSU9SRVNPVVJDRV9NRU07CisJcnNjWzFdLm5hbWUg ICAgID0gImhkbWktbHBlLWF1ZGlvLW1taW8iOworCisJcGluZm8ucGFyZW50ID0gZGV2LT5kZXY7 CisJcGluZm8ubmFtZSA9ICJoZG1pLWxwZS1hdWRpbyI7CisJcGluZm8uaWQgPSAtMTsKKwlwaW5m by5yZXMgPSByc2M7CisJcGluZm8ubnVtX3JlcyA9IDI7CisJcGluZm8uZGF0YSA9IHBkYXRhOwor CXBpbmZvLnNpemVfZGF0YSA9IHNpemVvZigqcGRhdGEpOworCXBpbmZvLmRtYV9tYXNrID0gRE1B X0JJVF9NQVNLKDMyKTsKKworCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+bHBlX2F1ZGlvX3Nsb2Nr KTsKKworCXBsYXRkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmcGluZm8pOwor CWlmIChJU19FUlIocGxhdGRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihwbGF0ZGV2KTsKKwkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgTFBFIGF1ZGlvIHBsYXRmb3JtIGRldmljZVxuIik7 CisJCWdvdG8gZXJyOworCX0KKworCWtmcmVlKHJzYyk7CisKKwlyZXR1cm4gcGxhdGRldjsKKwor ZXJyOgorCWtmcmVlKHJzYyk7CisJa2ZyZWUocGRhdGEpOworCXJldHVybiBFUlJfUFRSKHJldCk7 Cit9CisKK3N0YXRpYyB2b2lkIGxwZV9hdWRpb19wbGF0ZGV2X2Rlc3Ryb3koc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRl dl9wcml2LT5scGVfYXVkaW8ucGxhdGRldik7CisJa2ZyZWUoZGV2X3ByaXYtPmxwZV9hdWRpby5w bGF0ZGV2LT5kZXYuZG1hX21hc2spOworfQorCitzdGF0aWMgdm9pZCBscGVfYXVkaW9faXJxX3Vu bWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZC0+Y2hpcF9kYXRhOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdTMyIHZh bCA9IChJOTE1X0xQRV9QSVBFX0FfSU5URVJSVVBUIHwKKwkJSTkxNV9MUEVfUElQRV9CX0lOVEVS UlVQVCk7CisKKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCXZhbCB8PSBJOTE1X0xQ RV9QSVBFX0NfSU5URVJSVVBUOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFf bG9jaywgaXJxZmxhZ3MpOworCisJZGV2X3ByaXYtPmlycV9tYXNrICY9IH52YWw7CisJSTkxNV9X UklURShWTFZfSUlSLCB2YWwpOworCUk5MTVfV1JJVEUoVkxWX0lJUiwgdmFsKTsKKwlJOTE1X1dS SVRFKFZMVl9JTVIsIGRldl9wcml2LT5pcnFfbWFzayk7CisJUE9TVElOR19SRUFEKFZMVl9JTVIp OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFn cyk7Cit9CisKK3N0YXRpYyB2b2lkIGxwZV9hdWRpb19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEg KmQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZC0+Y2hpcF9kYXRh OworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdTMyIHZhbCA9IChJOTE1X0xQRV9QSVBFX0Ff SU5URVJSVVBUIHwKKwkJSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCk7CisKKwlpZiAoSVNfQ0hF UlJZVklFVyhkZXZfcHJpdikpCisJCXZhbCB8PSBJOTE1X0xQRV9QSVBFX0NfSU5URVJSVVBUOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJ ZGV2X3ByaXYtPmlycV9tYXNrIHw9IHZhbDsKKwlJOTE1X1dSSVRFKFZMVl9JTVIsIGRldl9wcml2 LT5pcnFfbWFzayk7CisJSTkxNV9XUklURShWTFZfSUlSLCB2YWwpOworCUk5MTVfV1JJVEUoVkxW X0lJUiwgdmFsKTsKKwlQT1NUSU5HX1JFQUQoVkxWX0lJUik7CisKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKK30KKworc3RhdGljIHN0cnVj dCBpcnFfY2hpcCBscGVfYXVkaW9faXJxY2hpcCA9IHsKKwkubmFtZSA9ICJoZG1pX2xwZV9hdWRp b19pcnFjaGlwIiwKKwkuaXJxX21hc2sgPSBscGVfYXVkaW9faXJxX21hc2ssCisJLmlycV91bm1h c2sgPSBscGVfYXVkaW9faXJxX3VubWFzaywKK307CisKK3N0YXRpYyBpbnQgbHBlX2F1ZGlvX2ly cV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQgaXJxID0g ZGV2X3ByaXYtPmxwZV9hdWRpby5pcnE7CisKKwlXQVJOX09OKCFpbnRlbF9pcnFzX2VuYWJsZWQo ZGV2X3ByaXYpKTsKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmxw ZV9hdWRpb19pcnFjaGlwLAorCQkJCWhhbmRsZV9zaW1wbGVfaXJxLAorCQkJCSJoZG1pX2xwZV9h dWRpb19pcnFfaGFuZGxlciIpOworCisJcmV0dXJuIGlycV9zZXRfY2hpcF9kYXRhKGlycSwgZGV2 X3ByaXYpOworfQorCisvKioKKyAqIGludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcigpIC0gZm9y d2FyZHMgdGhlIExQRSBhdWRpbyBpcnEKKyAqIEBkZXZfcHJpdjogdGhlIGk5MTUgZHJtIGRldmlj ZSBwcml2YXRlIGRhdGEKKyAqCisgKiB0aGUgTFBFIEF1ZGlvIGlycSBpcyBmb3J3YXJkZWQgdG8g dGhlIGlycSBoYW5kbGVyIHJlZ2lzdGVyZWQgYnkgTFBFIGF1ZGlvCisgKiBkcml2ZXIuCisgKi8K K3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFIQVNfTFBFX0FVRElPKGRldl9wcml2 KSkKKwkJcmV0dXJuOworCisJcmV0ID0gZ2VuZXJpY19oYW5kbGVfaXJxKGRldl9wcml2LT5scGVf YXVkaW8uaXJxKTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1JfUkFURUxJTUlURUQoImVycm9yIGhh bmRsaW5nIExQRSBhdWRpbyBpcnE6ICVkXG4iLAorCQkJCXJldCk7Cit9CisKKy8qKgorICogaW50 ZWxfbHBlX2F1ZGlvX2RldGVjdCgpIC0gY2hlY2sgJiBzZXR1cCBscGUgYXVkaW8gaWYgcHJlc2Vu dAorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAq IERldGVjdCBpZiBscGUgYXVkaW8gaXMgcHJlc2VudAorICoKKyAqIFJldHVybjogdHJ1ZSBpZiBs cGUgYXVkaW8gcHJlc2VudCBlbHNlIFJldHVybiA9IGZhbHNlCisgKi8KK2Jvb2wgaW50ZWxfbHBl X2F1ZGlvX2RldGVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50 IGxwZV9wcmVzZW50ID0gZmFsc2U7CisKKwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwg SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKKwkJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkIGF0b21faGRhdWRpb19pZHNbXSA9IHsKKwkJCS8qIEJheXRyYWlsICovCisJCQl7UENJ X0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDBmMDQpfSwKKwkJCS8qIEJyYXN3ZWxsICov CisJCQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIyODQpfSwKKwkJCXt9CisJ CX07CisKKwkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoYXRvbV9oZGF1ZGlvX2lkcykpIHsKKwkJCURS TV9JTkZPKCIlc1xuIiwgIkhEYXVkaW8gY29udHJvbGxlciBub3QgZGV0ZWN0ZWQsIHVzaW5nIExQ RSBhdWRpbyBpbnN0ZWFkXG4iKTsKKwkJCWxwZV9wcmVzZW50ID0gdHJ1ZTsKKwkJfQorCX0KKwly ZXR1cm4gbHBlX3ByZXNlbnQ7Cit9CisKKy8qKgorICogaW50ZWxfbHBlX2F1ZGlvX3NldHVwKCkg LSBzZXR1cCB0aGUgYnJpZGdlIGJldHdlZW4gSERNSSBMUEUgQXVkaW8KKyAqIGRyaXZlciBhbmQg aTkxNQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoK KyAqIHNldCB1cCB0aGUgbWluaW11bSByZXF1aXJlZCByZXNvdXJjZXMgZm9yIHRoZSBicmlkZ2U6 IGlycSBjaGlwLAorICogcGxhdGZvcm0gcmVzb3VyY2UgYW5kIHBsYXRmb3JtIGRldmljZS4gaTkx NSBkZXZpY2UgaXMgc2V0IGFzIHBhcmVudAorICogb2YgdGhlIG5ldyBwbGF0Zm9ybSBkZXZpY2Uu CisgKgorICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwuIG5vbi16ZXJvIGlmIGFsbG9jYXRpb24v aW5pdGlhbGl6YXRpb24gZmFpbHMKKyAqLworaW50IGludGVsX2xwZV9hdWRpb19zZXR1cChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHJldDsKKworCWRldl9wcml2 LT5scGVfYXVkaW8uaXJxID0gaXJxX2FsbG9jX2Rlc2MoMCk7CisJaWYgKGRldl9wcml2LT5scGVf YXVkaW8uaXJxIDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBJUlEgZGVz YzogJWRcbiIsCisJCQlkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisJCXJldCA9IGRldl9wcml2 LT5scGVfYXVkaW8uaXJxOworCQlnb3RvIGVycjsKKwl9CisKKwlEUk1fREVCVUcoImlycSA9ICVk XG4iLCBkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisKKwlyZXQgPSBscGVfYXVkaW9faXJxX2lu aXQoZGV2X3ByaXYpOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0 aWFsaXplIGlycWNoaXAgZm9yIGxwZSBhdWRpbzogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVy cl9mcmVlX2lycTsKKwl9CisKKwlkZXZfcHJpdi0+bHBlX2F1ZGlvLnBsYXRkZXYgPSBscGVfYXVk aW9fcGxhdGRldl9jcmVhdGUoZGV2X3ByaXYpOworCisJaWYgKElTX0VSUihkZXZfcHJpdi0+bHBl X2F1ZGlvLnBsYXRkZXYpKSB7CisJCXJldCA9IFBUUl9FUlIoZGV2X3ByaXYtPmxwZV9hdWRpby5w bGF0ZGV2KTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGxwZSBhdWRpbyBwbGF0Zm9y bSBkZXZpY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJ cmV0dXJuIDA7CitlcnJfZnJlZV9pcnE6CisJaXJxX2ZyZWVfZGVzYyhkZXZfcHJpdi0+bHBlX2F1 ZGlvLmlycSk7CitlcnI6CisJZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEgPSAtMTsKKwlkZXZfcHJp di0+bHBlX2F1ZGlvLnBsYXRkZXYgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisg KiBpbnRlbF9scGVfYXVkaW9faW5pdCgpIC0gZGV0ZWN0IGFuZCBzZXR1cCB0aGUgYnJpZGdlIGJl dHdlZW4gSERNSSBMUEUgQXVkaW8KKyAqIGRyaXZlciBhbmQgaTkxNQorICogQGRldl9wcml2OiB0 aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAqIFJldHVybjogMCBpZiBzdWNj ZXNzZnVsLiBub24temVybyBpZiBkZXRlY3Rpb24gb3IKKyAqIGxsb2NhdGlvbi9pbml0aWFsaXph dGlvbiBmYWlscworICovCitpbnQgaW50ZWxfbHBlX2F1ZGlvX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKGludGVs X2xwZV9hdWRpb19kZXRlY3QoZGV2X3ByaXYpKSB7CisJCXJldCA9IGludGVsX2xwZV9hdWRpb19z ZXR1cChkZXZfcHJpdik7CisJCWlmIChyZXQgPCAwKQorCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g c2V0dXAgTFBFIEF1ZGlvIGJyaWRnZVxuIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgor ICogaW50ZWxfbHBlX2F1ZGlvX3RlYXJkb3duKCkgLSBkZXN0cm95IHRoZSBicmlkZ2UgYmV0d2Vl biBIRE1JIExQRQorICogYXVkaW8gZHJpdmVyIGFuZCBpOTE1CisgKiBAZGV2X3ByaXY6IHRoZSBp OTE1IGRybSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKgorICogcmVsZWFzZSBhbGwgdGhlIHJlc291 cmNlcyBmb3IgTFBFIGF1ZGlvIDwtPiBpOTE1IGJyaWRnZS4KKyAqLwordm9pZCBpbnRlbF9scGVf YXVkaW9fdGVhcmRvd24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0 cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWlmICghSEFTX0xQRV9BVURJTyhkZXZfcHJpdikpCisJ CXJldHVybjsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7 CisKKwlscGVfYXVkaW9faXJxX21hc2soJmRlc2MtPmlycV9kYXRhKTsKKworCWxwZV9hdWRpb19w bGF0ZGV2X2Rlc3Ryb3koZGV2X3ByaXYpOworCisJaXJxX2ZyZWVfZGVzYyhkZXZfcHJpdi0+bHBl X2F1ZGlvLmlycSk7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9pbnRlbF9scGVfYXVkaW8u aCBiL2luY2x1ZGUvZHJtL2ludGVsX2xwZV9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjk1MmRlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9pbnRl bF9scGVfYXVkaW8uaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTYg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09G VFdBUkUuCisgKi8KKworI2lmbmRlZiBfSU5URUxfTFBFX0FVRElPX0hfCisjZGVmaW5lIF9JTlRF TF9MUEVfQVVESU9fSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGlu dXgvc3BpbmxvY2tfdHlwZXMuaD4KKworI2RlZmluZSBIRE1JX01BWF9FTERfQllURVMJMTI4CisK K3N0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRpb19lbGQgeworCWludCBwb3J0X2lkOworCXVuc2ln bmVkIGNoYXIgZWxkX2RhdGFbSERNSV9NQVhfRUxEX0JZVEVTXTsKK307CisKK3N0cnVjdCBpbnRl bF9oZG1pX2xwZV9hdWRpb19wZGF0YSB7CisJYm9vbCBub3RpZnlfcGVuZGluZzsKKwlpbnQgdG1k c19jbG9ja19zcGVlZDsKKwlib29sIGhkbWlfY29ubmVjdGVkOworCXN0cnVjdCBpbnRlbF9oZG1p X2xwZV9hdWRpb19lbGQgZWxkOworCXZvaWQgKCpub3RpZnlfYXVkaW9fbHBlKSh2b2lkICphdWRp b19wdHIpOworCXNwaW5sb2NrX3QgbHBlX2F1ZGlvX3Nsb2NrOworfTsKKworI2VuZGlmIC8qIF9J OTE1X0xQRV9BVURJT19IXyAqLwotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=