From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Anand Subject: [RFC PATCH v4 1/7] drm/i915: setup bridge for HDMI LPE audio driver Date: Sat, 3 Dec 2016 01:33:56 +0530 Message-ID: <20161202200356.28154-1-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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 MTVfaXJxLmMgICAgICAgIHwgIDI3ICsrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aCAgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHBlX2F1ZGlvLmMg fCAzNjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2RybS9pbnRl bF9scGVfYXVkaW8uaCAgICAgICAgICB8ICA0NSArKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQ3MSBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9p OTE1LnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CmluZGV4IDExN2QyYWIuLmE2NzFl ZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CisrKyBiL0RvY3VtZW50 YXRpb24vZ3B1L2k5MTUucnN0CkBAIC0yMTMsNiArMjEzLDE1IEBAIFZpZGVvIEJJT1MgVGFibGUg KFZCVCkKIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92YnRfZGVm cy5oCiAgICA6aW50ZXJuYWw6CiAKK2ludGVsIGhkbWkgbHBlIGF1ZGlvIHN1cHBvcnQKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCisgICA6ZG9jOiAgTFBFIEF1ZGlvIGludGVncmF0aW9u IGZvciBIRE1JIG9yIERQIHBsYXliYWNrCisKKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYworICAgOmludGVybmFsOgorCiBNZW1vcnkgTWFuYWdl bWVudCBhbmQgQ29tbWFuZCBTdWJtaXNzaW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNTgwNjAyZC4uM2EyMzY5YyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTEyNiw2ICsxMjYsOSBAQCBpOTE1LXkgKz0gaW50ZWxf Z3Z0Lm8KIGluY2x1ZGUgJChzcmMpL2d2dC9NYWtlZmlsZQogZW5kaWYKIAorIyBMUEUgQXVkaW8g Zm9yIFZMViBhbmQgQ0hUCitpOTE1LXkgKz0gaW50ZWxfbHBlX2F1ZGlvLm8KKwogb2JqLSQoQ09O RklHX0RSTV9JOTE1KSArPSBpOTE1Lm8KIAogQ0ZMQUdTX2k5MTVfdHJhY2VfcG9pbnRzLm8gOj0g LUkkKHNyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGI4OTNlNjcuLjkzODExZWQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTE0NCw3ICsxMTQ0LDggQEAgc3RhdGljIHZvaWQg aTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CWlmIChJU19HRU41KGRldl9wcml2KSkKIAkJaW50ZWxfZ3B1X2lwc19pbml0KGRldl9wcml2KTsK IAotCWk5MTVfYXVkaW9fY29tcG9uZW50X2luaXQoZGV2X3ByaXYpOworCWlmIChpbnRlbF9scGVf YXVkaW9faW5pdChkZXZfcHJpdikgPCAwKQorCQlpOTE1X2F1ZGlvX2NvbXBvbmVudF9pbml0KGRl dl9wcml2KTsKIAogCS8qCiAJICogU29tZSBwb3J0cyByZXF1aXJlIGNvcnJlY3RseSBzZXQtdXAg aHBkIHJlZ2lzdGVycyBmb3IgZGV0ZWN0aW9uIHRvCkBAIC0xMTYyLDcgKzExNjMsMTAgQEAgc3Rh dGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogICovCiBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlpOTE1X2F1ZGlvX2NvbXBvbmVudF9jbGVh bnVwKGRldl9wcml2KTsKKwlpZiAoSEFTX0xQRV9BVURJTyhkZXZfcHJpdikpCisJCWludGVsX2xw ZV9hdWRpb190ZWFyZG93bihkZXZfcHJpdik7CisJZWxzZQorCQlpOTE1X2F1ZGlvX2NvbXBvbmVu dF9jbGVhbnVwKGRldl9wcml2KTsKIAogCWludGVsX2dwdV9pcHNfdGVhcmRvd24oKTsKIAlhY3Bp X3ZpZGVvX3VucmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDk3MGU1MGIu LjJhNzkwNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjI4NCw2ICsyMjg0LDEyIEBA IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkvKiBVc2VkIHRvIHNhdmUgdGhlIHBpcGUtdG8t ZW5jb2RlciBtYXBwaW5nIGZvciBhdWRpbyAqLwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICphdl9l bmNfbWFwW0k5MTVfTUFYX1BJUEVTXTsKIAorCS8qIG5lY2Vzc2FyeSByZXNvdXJjZSBzaGFyaW5n IHdpdGggSERNSSBMUEUgYXVkaW8gZHJpdmVyLiAqLworCXN0cnVjdCB7CisJCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBsYXRkZXY7CisJCWludAlpcnE7CisJfSBscGVfYXVkaW87CisKIAkvKgog CSAqIE5PVEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBo ZXJlLiBZb3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZvciBh IGJldHRlciBwbGFjZS4KQEAgLTI3NzMsNiArMjc3OSw4IEBAIGludGVsX2luZm8oY29uc3Qgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCiAjZGVmaW5lIEhBU19QT09MRURfRVUo ZGV2X3ByaXYpCSgoZGV2X3ByaXYpLT5pbmZvLmhhc19wb29sZWRfZXUpCiAKKyNkZWZpbmUgSEFT X0xQRV9BVURJTyhkZXZfcHJpdikgKChkZXZfcHJpdiktPmxwZV9hdWRpby5wbGF0ZGV2ICE9IE5V TEwpCisKICNkZWZpbmUgSU5URUxfUENIX0RFVklDRV9JRF9NQVNLCQkweGZmMDAKICNkZWZpbmUg SU5URUxfUENIX0lCWF9ERVZJQ0VfSURfVFlQRQkJMHgzYjAwCiAjZGVmaW5lIElOVEVMX1BDSF9D UFRfREVWSUNFX0lEX1RZUEUJCTB4MWMwMApAQCAtMzU0Nyw2ICszNTU1LDEzIEBAIGV4dGVybiBp bnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1 X3NldHVwX3N5c2ZzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGk5 MTVfdGVhcmRvd25fc3lzZnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAor LyogaTkxNV9scGVfYXVkaW8uYyAqLworaW50ICBpbnRlbF9scGVfYXVkaW9faW5pdChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50ICBpbnRlbF9scGVfYXVkaW9fc2V0dXAo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgaW50ZWxfbHBlX2F1ZGlv X3RlYXJkb3duKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGludGVs X2xwZV9hdWRpb19pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp OworYm9vbCBpbnRlbF9scGVfYXVkaW9fZGV0ZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdik7CisKIC8qIGludGVsX2kyYy5jICovCiBleHRlcm4gaW50IGludGVsX3NldHVwX2dt YnVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaW50ZWxfdGVhcmRvd25f Z21idXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRl eCAwN2NhNzFjLi42ZjcxMGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTE4OTQsNiAr MTg5NCwxNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmFsbGV5dmlld19pcnFfaGFuZGxlcihpbnQg aXJxLCB2b2lkICphcmcpCiAJCXZhbGxleXZpZXdfcGlwZXN0YXRfaXJxX2FjayhkZXZfcHJpdiwg aWlyLCBwaXBlX3N0YXRzKTsKIAogCQkvKgorCQkgKiBMUEUgYXVkaW8gaW50ZXJydXB0cyBhcmUg b25seSBlbmFibGVkIG9uIEJheXRyYWlsIGFuZAorCQkgKiBDaGVycnlWaWV3IHBsYXRmb3JtcyB3 aXRob3V0IEhEYXVkaW8KKwkJICovCisJCWlmIChpaXIgJiAoSTkxNV9MUEVfUElQRV9BX0lOVEVS UlVQVCB8CisJCQkgICBJOTE1X0xQRV9QSVBFX0JfSU5URVJSVVBUKSkKKwkJCWludGVsX2xwZV9h dWRpb19pcnFfaGFuZGxlcihkZXZfcHJpdik7CisKKwkJLyoKIAkJICogVkxWX0lJUiBpcyBzaW5n bGUgYnVmZmVyZWQsIGFuZCByZWZsZWN0cyB0aGUgbGV2ZWwKIAkJICogZnJvbSBQSVBFU1RBVC9Q T1JUX0hPVFBMVUdfU1RBVCwgaGVuY2UgY2xlYXIgaXQgbGFzdC4KIAkJICovCkBAIC0xOTc0LDYg KzE5ODIsMTUgQEAgc3RhdGljIGlycXJldHVybl90IGNoZXJyeXZpZXdfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqYXJnKQogCQl2YWxsZXl2aWV3X3BpcGVzdGF0X2lycV9hY2soZGV2X3ByaXYs IGlpciwgcGlwZV9zdGF0cyk7CiAKIAkJLyoKKwkJICogTFBFIGF1ZGlvIGludGVycnVwdHMgYXJl IG9ubHkgZW5hYmxlZCBvbiBCYXl0cmFpbCBhbmQKKwkJICogQ2hlcnJ5VmlldyBwbGF0Zm9ybXMg d2l0aG91dCBIRGF1ZGlvCisJCSAqLworCQlpZiAoaWlyICYgKEk5MTVfTFBFX1BJUEVfQV9JTlRF UlJVUFQgfAorCQkJICAgSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCB8CisJCQkgICBJOTE1X0xQ RV9QSVBFX0NfSU5URVJSVVBUKSkKKwkJCWludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcihkZXZf cHJpdik7CisKKwkJLyoKIAkJICogVkxWX0lJUiBpcyBzaW5nbGUgYnVmZmVyZWQsIGFuZCByZWZs ZWN0cyB0aGUgbGV2ZWwKIAkJICogZnJvbSBQSVBFU1RBVC9QT1JUX0hPVFBMVUdfU1RBVCwgaGVu Y2UgY2xlYXIgaXQgbGFzdC4KIAkJICovCkBAIC0yOTE0LDYgKzI5MzEsNyBAQCBzdGF0aWMgdm9p ZCB2bHZfZGlzcGxheV9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogCXUzMiBwaXBlc3RhdF9tYXNrOwogCXUzMiBlbmFibGVfbWFzazsKIAllbnVtIHBp cGUgcGlwZTsKKwl1MzIgdmFsOwogCiAJcGlwZXN0YXRfbWFzayA9IFBMQU5FX0ZMSVBfRE9ORV9J TlRfU1RBVFVTX1ZMViB8CiAJCQlQSVBFX0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVM7CkBAIC0y OTMwLDYgKzI5NDgsMTUgQEAgc3RhdGljIHZvaWQgdmx2X2Rpc3BsYXlfaXJxX3Bvc3RpbnN0YWxs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAogCVdBUk5fT04oZGV2X3ByaXYt PmlycV9tYXNrICE9IH4wKTsKIAorCS8qIGFkZCBpbnRlcnJ1cHQgbWFza3MgdW5jb25kaXRpYWxs eSBoZXJlLCB0aGUgYWN0dWFsIHVubWFzaworCSAqIHdpbGwgdGFrZSBwbGFjZSBvbmx5IGlmIHRo ZSBMUEVfQVVESU8gbW9kZSBpcyBkZXRlY3RlZAorCSAqLworCXZhbCA9IChJOTE1X0xQRV9QSVBF X0FfSU5URVJSVVBUIHwKKwkJSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCB8CisJCUk5MTVfTFBF X1BJUEVfQ19JTlRFUlJVUFQpOworCisJZW5hYmxlX21hc2sgfD0gdmFsOworCiAJZGV2X3ByaXYt PmlycV9tYXNrID0gfmVuYWJsZV9tYXNrOwogCiAJR0VONV9JUlFfSU5JVChWTFZfLCBkZXZfcHJp di0+aXJxX21hc2ssIGVuYWJsZV9tYXNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IGZj YWQ4ZmEuLjZiMTZlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVn LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMjM5NSw2ICsyMzk1 LDkgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVmaW5lIEk5MTVfQVNMRV9JTlRF UlJVUFQJCQkJKDE8PDApCiAjZGVmaW5lIEk5MTVfQlNEX1VTRVJfSU5URVJSVVBUCQkJCSgxPDwy NSkKIAorI2RlZmluZSBJOTE1X0hETUlfTFBFX0FVRElPX0JBU0UJKFZMVl9ESVNQTEFZX0JBU0Ug KyAweDY1MDAwKQorI2RlZmluZSBJOTE1X0hETUlfTFBFX0FVRElPX1NJWkUJMHgxMDAwCisKICNk ZWZpbmUgR0VONl9CU0RfUk5DSUQJCQlfTU1JTygweDEyMTk4KQogCiAjZGVmaW5lIEdFTjdfRkZf VEhSRUFEX01PREUJCV9NTUlPKDB4MjBhMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xwZV9hdWRpby5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHBlX2F1 ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyZTVmNwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCkBAIC0w LDAgKzEsMzYzIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0 aG9yczoKKyAqICAgIFBpZXJyZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBs aW51eC5pbnRlbC5jb20+CisgKiAgICBKZXJvbWUgQW5hbmQgPGplcm9tZS5hbmFuZEBpbnRlbC5j b20+CisgKiAgICBiYXNlZCBvbiBWRUQgcGF0Y2hlcworICoKKyAqLworCisvKioKKyAqIERPQzog TFBFIEF1ZGlvIGludGVncmF0aW9uIGZvciBIRE1JIG9yIERQIHBsYXliYWNrCisgKgorICogTW90 aXZhdGlvbjoKKyAqIEF0b20gcGxhdGZvcm1zIChlLmcuIHZhbGxleXZpZXcgYW5kIGNoZXJyeVRy YWlsKSBpbnRlZ3JhdGVzIGEgRE1BLWJhc2VkCisgKiBpbnRlcmZhY2UgYXMgYW4gYWx0ZXJuYXRp dmUgdG8gdGhlIHRyYWRpdGlvbmFsIEhEYXVkaW8gcGF0aC4gV2hpbGUgdGhpcworICogbW9kZSBp cyB1bnJlbGF0ZWQgdG8gdGhlIExQRSBha2EgU1NUIGF1ZGlvIGVuZ2luZSwgdGhlIGRvY3VtZW50 YXRpb24gcmVmZXJzCisgKiB0byB0aGlzIG1vZGUgYXMgTFBFIHNvIHdlIGtlZXAgdGhpcyBub3Rh dGlvbiBmb3IgdGhlIHNha2Ugb2YgY29uc2lzdGVuY3kuCisgKgorICogVGhlIGludGVyZmFjZSBp cyBoYW5kbGVkIGJ5IGEgc2VwYXJhdGUgc3RhbmRhbG9uZSBkcml2ZXIgbWFpbnRhaW5lZCBpbiB0 aGUKKyAqIEFMU0Egc3Vic3lzdGVtIGZvciBzaW1wbGljaXR5LiBUbyBtaW5pbWl6ZSB0aGUgaW50 ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdHdvCisgKiBzdWJzeXN0ZW1zLCBhIGJyaWRnZSBpcyBzZXR1 cCBiZXR3ZWVuIHRoZSBoZG1pLWxwZS1hdWRpbyBhbmQgaTkxNToKKyAqIDEuIENyZWF0ZSBhIHBs YXRmb3JtIGRldmljZSB0byBzaGFyZSBNTUlPL0lSUSByZXNvdXJjZXMKKyAqIDIuIE1ha2UgdGhl IHBsYXRmb3JtIGRldmljZSBjaGlsZCBvZiBpOTE1IGRldmljZSBmb3IgcnVudGltZSBQTS4KKyAq IDMuIENyZWF0ZSBJUlEgY2hpcCB0byBmb3J3YXJkIHRoZSBMUEUgYXVkaW8gaXJxcy4KKyAqIHRo ZSBoZG1pLWxwZS1hdWRpbyBkcml2ZXIgcHJvYmVzIHRoZSBscGUgYXVkaW8gZGV2aWNlIGFuZCBj cmVhdGVzIGEgbmV3CisgKiBzb3VuZCBjYXJkCisgKgorICogVGhyZWF0czoKKyAqIER1ZSB0byB0 aGUgcmVzdHJpY3Rpb24gaW4gTGludXggcGxhdGZvcm0gZGV2aWNlIG1vZGVsLCB1c2VyIG5lZWQg bWFudWFsbHkKKyAqIHVuaW5zdGFsbCB0aGUgaGRtaS1scGUtYXVkaW8gZHJpdmVyIGJlZm9yZSB1 bmluc3RhbGxpbmcgaTkxNSBtb2R1bGUsCisgKiBvdGhlcndpc2Ugd2UgbWlnaHQgcnVuIGludG8g dXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFmdGVyIGk5MTUgcmVtb3ZlcyB0aGUKKyAqIHBsYXRmb3Jt IGRldmljZTogZXZlbiB0aG91Z2ggaGRtaS1scGUtYXVkaW8gZHJpdmVyIGlzIHJlbGVhc2VkLCB0 aGUgbW9kdWxlcworICogaXMgc3RpbGwgaW4gImluc3RhbGxlZCIgc3RhdHVzLgorICoKKyAqIElt cGxlbWVudGF0aW9uOgorICogVGhlIE1NSU8vUkVHIHBsYXRmb3JtIHJlc291cmNlcyBhcmUgY3Jl YXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJlZ2lzdGVycworICogc3BlY2lmaWNhdGlvbi4KKyAqIFdo ZW4gZm9yd2FyZGluZyBMUEUgYXVkaW8gaXJxcywgdGhlIGZsb3cgY29udHJvbCBoYW5kbGVyIHNl bGVjdGlvbiBkZXBlbmRzCisgKiBvbiB0aGUgcGxhdGZvcm0sIGZvciBleGFtcGxlIG9uIHZhbGxl eXZpZXcgaGFuZGxlX3NpbXBsZV9pcnEgaXMgZW5vdWdoLgorICoKKyAqLworCisjaW5jbHVkZSA8 bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3BjaS5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5o PgorI2luY2x1ZGUgPGRybS9pbnRlbF9scGVfYXVkaW8uaD4KKworc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UqCitscGVfYXVkaW9fcGxhdGRldl9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYt PmRybTsKKwlpbnQgcmV0OworCXN0cnVjdCByZXNvdXJjZSByc2NbMl0gPSB7fTsKKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2OworCXU2NCAqZG1hX21hc2s7CisJc3RydWN0IGludGVs X2hkbWlfbHBlX2F1ZGlvX3BkYXRhICpwZGF0YTsKKworCWlmIChkZXZfcHJpdi0+bHBlX2F1ZGlv LmlycSA8IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJcGxhdGRldiA9IHBsYXRm b3JtX2RldmljZV9hbGxvYygiaGRtaS1scGUtYXVkaW8iLCAtMSk7CisJaWYgKCFwbGF0ZGV2KSB7 CisJCXJldCA9IC1FTk9NRU07CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIExQRSBh dWRpbyBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiB0byB3b3Jr LWFyb3VuZCBjaGVja19hZGRyIGluIG5vbW11X21hcF9zZygpICovCisJZG1hX21hc2sgPSBrbWFs bG9jKHNpemVvZigqcGxhdGRldi0+ZGV2LmRtYV9tYXNrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFk bWFfbWFzaykgeworCQlyZXQgPSAtRU5PTUVNOworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxv Y2F0ZSBkbWFfbWFza1xuIik7CisJCWdvdG8gZXJyX3B1dF9kZXY7CisJfQorCSpkbWFfbWFzayA9 IERNQV9CSVRfTUFTSygzMik7CisJcGxhdGRldi0+ZGV2LmRtYV9tYXNrID0gZG1hX21hc2s7CisJ cGxhdGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gKmRtYV9tYXNrOworCisJcnNjWzBdLnN0 YXJ0ICAgID0gcnNjWzBdLmVuZCA9IGRldl9wcml2LT5scGVfYXVkaW8uaXJxOworCXJzY1swXS5m bGFncyAgICA9IElPUkVTT1VSQ0VfSVJROworCXJzY1swXS5uYW1lICAgICA9ICJoZG1pLWxwZS1h dWRpby1pcnEiOworCisJcnNjWzFdLnN0YXJ0ICAgID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+ cGRldiwgMCkgKworCQlJOTE1X0hETUlfTFBFX0FVRElPX0JBU0U7CisJcnNjWzFdLmVuZCAgICAg ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkgKworCQlJOTE1X0hETUlfTFBFX0FV RElPX0JBU0UgKyBJOTE1X0hETUlfTFBFX0FVRElPX1NJWkUgLSAxOworCXJzY1sxXS5mbGFncyAg ICA9IElPUkVTT1VSQ0VfTUVNOworCXJzY1sxXS5uYW1lICAgICA9ICJoZG1pLWxwZS1hdWRpby1t bWlvIjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBsYXRkZXYsIHJz YywgMik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhZGQgcmVzb3VyY2Ug Zm9yIHBsYXRmb3JtIGRldmljZTogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9wdXRfZGV2 OworCX0KKworCXBkYXRhID0ga3phbGxvYyhzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisK KwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wdXRf ZGV2OworCX0KKwlwbGF0ZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCXNwaW5fbG9j a19pbml0KCZwZGF0YS0+bHBlX2F1ZGlvX3Nsb2NrKTsKKworCS8qIGZvciBMUEUgYXVkaW8gZHJp dmVyJ3MgcnVudGltZS1QTSAqLworCXBsYXRkZXYtPmRldi5wYXJlbnQgPSBkZXYtPmRldjsKKwly ZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBsYXRkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gYWRkIExQRSBhdWRpbyBwbGF0Zm9ybSBkZXZpY2U6ICVkXG4iLAorCQkJ cmV0KTsKKwkJZ290byBlcnJfcHV0X2RldjsKKwl9CisKKwlyZXR1cm4gcGxhdGRldjsKK2Vycl9w dXRfZGV2OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGxhdGRldik7CisJa2ZyZWUoZG1hX21hc2sp OworZXJyOgorCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGxwZV9hdWRp b19wbGF0ZGV2X2Rlc3Ryb3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorewor CXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldik7 CisJa2ZyZWUoZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2LT5kZXYuZG1hX21hc2spOworfQor CitzdGF0aWMgdm9pZCBscGVfYXVkaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZC0+Y2hpcF9kYXRhOworCXVu c2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdTMyIHZhbCA9IChJOTE1X0xQRV9QSVBFX0FfSU5URVJS VVBUIHwKKwkJSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCk7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisKKwkvKgorCSAqIFZMVl9JRVIgaXMg YWxyZWFkeSBzZXQgaW4gdGhlIHZsdl9kaXNwbGF5X3Bvc3RpbnN0YWxsKCksCisJICogd2Ugb25s eSBjaGFuZ2UgVkxWX0lJUiBhbmQgVkxWX0lNUgorCSAqLworCWRldl9wcml2LT5pcnFfbWFzayAm PSB+dmFsOworCUk5MTVfV1JJVEUoVkxWX0lJUiwgdmFsKTsKKwlJOTE1X1dSSVRFKFZMVl9JSVIs IHZhbCk7CisJSTkxNV9XUklURShWTFZfSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOworCVBPU1RJ TkdfUkVBRChWTFZfSU1SKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5p cnFfbG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBscGVfYXVkaW9faXJxX21hc2so c3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGQtPmNoaXBfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXUzMiB2YWwgPSAo STkxNV9MUEVfUElQRV9BX0lOVEVSUlVQVCB8CisJCUk5MTVfTFBFX1BJUEVfQl9JTlRFUlJVUFQp OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwor CisJLyoKKwkgKiBWTFZfSUVSIGlzIGFscmVhZHkgc2V0IGluIHRoZSB2bHZfZGlzcGxheV9wb3N0 aW5zdGFsbCgpLAorCSAqIHdlIG9ubHkgY2hhbmdlIFZMVl9JSVIgYW5kIFZMVl9JTVIKKwkgKi8K KwlkZXZfcHJpdi0+aXJxX21hc2sgfD0gdmFsOworCUk5MTVfV1JJVEUoVkxWX0lNUiwgZGV2X3By aXYtPmlycV9tYXNrKTsKKwlJOTE1X1dSSVRFKFZMVl9JSVIsIHZhbCk7CisJSTkxNV9XUklURShW TFZfSUlSLCB2YWwpOworCVBPU1RJTkdfUkVBRChWTFZfSUlSKTsKKworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgc3Ry dWN0IGlycV9jaGlwIGxwZV9hdWRpb19pcnFjaGlwID0geworCS5uYW1lID0gImhkbWlfbHBlX2F1 ZGlvX2lycWNoaXAiLAorCS5pcnFfbWFzayA9IGxwZV9hdWRpb19pcnFfbWFzaywKKwkuaXJxX3Vu bWFzayA9IGxwZV9hdWRpb19pcnFfdW5tYXNrLAorfTsKKworc3RhdGljIGludCBscGVfYXVkaW9f aXJxX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCBpcnEg PSBkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycTsKKworCVdBUk5fT04oIWludGVsX2lycXNfZW5hYmxl ZChkZXZfcHJpdikpOworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkm bHBlX2F1ZGlvX2lycWNoaXAsCisJCQkJaGFuZGxlX3NpbXBsZV9pcnEsCisJCQkJImhkbWlfbHBl X2F1ZGlvX2lycV9oYW5kbGVyIik7CisKKwlyZXR1cm4gaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBk ZXZfcHJpdik7Cit9CisKKy8qKgorICogaW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKCkgLSBm b3J3YXJkcyB0aGUgTFBFIGF1ZGlvIGlycQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2 aWNlIHByaXZhdGUgZGF0YQorICoKKyAqIHRoZSBMUEUgQXVkaW8gaXJxIGlzIGZvcndhcmRlZCB0 byB0aGUgaXJxIGhhbmRsZXIgcmVnaXN0ZXJlZCBieSBMUEUgYXVkaW8KKyAqIGRyaXZlci4KKyAq Lwordm9pZCBpbnRlbF9scGVfYXVkaW9faXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBnZW5lcmljX2hhbmRsZV9pcnEo ZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEpOworCWlmIChyZXQpCisJCURSTV9FUlJPUl9SQVRFTElN SVRFRCgiZXJyb3IgaGFuZGxpbmcgTFBFIGF1ZGlvIGlycTogJWRcbiIsCisJCQkJcmV0KTsKK30K KworLyoqCisgKiBpbnRlbF9scGVfYXVkaW9fZGV0ZWN0KCkgLSBjaGVjayAmIHNldHVwIGxwZSBh dWRpbyBpZiBwcmVzZW50CisgKiBAZGV2X3ByaXY6IHRoZSBpOTE1IGRybSBkZXZpY2UgcHJpdmF0 ZSBkYXRhCisgKgorICogRGV0ZWN0IGlmIGxwZSBhdWRpbyBpcyBwcmVzZW50CisgKgorICogUmV0 dXJuOiB0cnVlIGlmIGxwZSBhdWRpbyBwcmVzZW50IGVsc2UgUmV0dXJuID0gZmFsc2UKKyAqLwor Ym9vbCBpbnRlbF9scGVfYXVkaW9fZGV0ZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKK3sKKwlpbnQgbHBlX3ByZXNlbnQgPSBmYWxzZTsKKworCWlmIChJU19WQUxMRVlWSUVX KGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgeworCQlzdGF0aWMgY29uc3Qg c3RydWN0IHBjaV9kZXZpY2VfaWQgYXRvbV9oZGF1ZGlvX2lkc1tdID0geworCQkJLyogQmF5dHJh aWwgKi8KKwkJCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MGYwNCl9LAorCQkJ LyogQnJhc3dlbGwgKi8KKwkJCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjI4 NCl9LAorCQkJe30KKwkJfTsKKworCQlpZiAoIXBjaV9kZXZfcHJlc2VudChhdG9tX2hkYXVkaW9f aWRzKSkgeworCQkJRFJNX0lORk8oIiVzJXNcbiIsICJIRGF1ZGlvIGNvbnRyb2xsZXIgbm90IGRl dGVjdGVkLCIsCisJCQkJInVzaW5nIExQRSBhdWRpbyBpbnN0ZWFkXG4iKTsKKwkJCWxwZV9wcmVz ZW50ID0gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1cm4gbHBlX3ByZXNlbnQ7Cit9CisKKy8qKgorICog aW50ZWxfbHBlX2F1ZGlvX3NldHVwKCkgLSBzZXR1cCB0aGUgYnJpZGdlIGJldHdlZW4gSERNSSBM UEUgQXVkaW8KKyAqIGRyaXZlciBhbmQgaTkxNQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0g ZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAqIHNldCB1cCB0aGUgbWluaW11bSByZXF1aXJlZCBy ZXNvdXJjZXMgZm9yIHRoZSBicmlkZ2U6IGlycSBjaGlwLAorICogcGxhdGZvcm0gcmVzb3VyY2Ug YW5kIHBsYXRmb3JtIGRldmljZS4gaTkxNSBkZXZpY2UgaXMgc2V0IGFzIHBhcmVudAorICogb2Yg dGhlIG5ldyBwbGF0Zm9ybSBkZXZpY2UuCisgKgorICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwu IG5vbi16ZXJvIGlmIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gZmFpbHMKKyAqLworaW50IGlu dGVsX2xwZV9hdWRpb19zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7 CisJaW50IHJldDsKKworCWRldl9wcml2LT5scGVfYXVkaW8uaXJxID0gaXJxX2FsbG9jX2Rlc2Mo MCk7CisJaWYgKGRldl9wcml2LT5scGVfYXVkaW8uaXJxIDwgMCkgeworCQlEUk1fRVJST1IoIkZh aWxlZCB0byBhbGxvY2F0ZSBJUlEgZGVzYzogJWRcbiIsCisJCQlkZXZfcHJpdi0+bHBlX2F1ZGlv LmlycSk7CisJCXJldCA9IGRldl9wcml2LT5scGVfYXVkaW8uaXJxOworCQlnb3RvIGVycjsKKwl9 CisKKwlEUk1fREVCVUcoImlycSA9ICVkXG4iLCBkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisK KwlyZXQgPSBscGVfYXVkaW9faXJxX2luaXQoZGV2X3ByaXYpOworCisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGlycWNoaXAgZm9yIGxwZSBhdWRpbzogJWRc biIsCisJCQlyZXQpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlkZXZfcHJpdi0+bHBl X2F1ZGlvLnBsYXRkZXYgPSBscGVfYXVkaW9fcGxhdGRldl9jcmVhdGUoZGV2X3ByaXYpOworCisJ aWYgKElTX0VSUihkZXZfcHJpdi0+bHBlX2F1ZGlvLnBsYXRkZXYpKSB7CisJCXJldCA9IFBUUl9F UlIoZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2KTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8g Y3JlYXRlIGxwZSBhdWRpbyBwbGF0Zm9ybSBkZXZpY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290 byBlcnJfZnJlZV9pcnE7CisJfQorCisJcmV0dXJuIDA7CitlcnJfZnJlZV9pcnE6CisJaXJxX2Zy ZWVfZGVzYyhkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CitlcnI6CisJZGV2X3ByaXYtPmxwZV9h dWRpby5pcnEgPSAtMTsKKwlkZXZfcHJpdi0+bHBlX2F1ZGlvLnBsYXRkZXYgPSBOVUxMOworCXJl dHVybiByZXQ7Cit9CisKKworLyoqCisgKiBpbnRlbF9scGVfYXVkaW9faW5pdCgpIC0gZGV0ZWN0 IGFuZCBzZXR1cCB0aGUgYnJpZGdlIGJldHdlZW4gSERNSSBMUEUgQXVkaW8KKyAqIGRyaXZlciBh bmQgaTkxNQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQor ICoKKyAqIFJldHVybjogMCBpZiBzdWNjZXNzZnVsLiBub24temVybyBpZiBkZXRlY3Rpb24gb3IK KyAqIGxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBmYWlscworICovCitpbnQgaW50ZWxfbHBlX2F1 ZGlvX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCByZXQg PSAtRU5PREVWOworCisJaWYgKGludGVsX2xwZV9hdWRpb19kZXRlY3QoZGV2X3ByaXYpKSB7CisJ CXJldCA9IGludGVsX2xwZV9hdWRpb19zZXR1cChkZXZfcHJpdik7CisJCWlmIChyZXQgPCAwKQor CQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgTFBFIEF1ZGlvIGJyaWRnZVxuIik7CisJfQor CXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaW50ZWxfbHBlX2F1ZGlvX3RlYXJkb3duKCkgLSBk ZXN0cm95IHRoZSBicmlkZ2UgYmV0d2VlbiBIRE1JIExQRQorICogYXVkaW8gZHJpdmVyIGFuZCBp OTE1CisgKiBAZGV2X3ByaXY6IHRoZSBpOTE1IGRybSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKgor ICogcmVsZWFzZSBhbGwgdGhlIHJlc291cmNlcyBmb3IgTFBFIGF1ZGlvIDwtPiBpOTE1IGJyaWRn ZS4KKyAqLwordm9pZCBpbnRlbF9scGVfYXVkaW9fdGVhcmRvd24oc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJc3RydWN0IGly cV9kZXNjICpkZXNjOworCisJaWYgKCFIQVNfTFBFX0FVRElPKGRldl9wcml2KSkKKwkJcmV0dXJu OworCisJZGVzYyA9IGlycV90b19kZXNjKGRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsKKworCS8q KgorCSAqIG1hc2sgTFBFIGF1ZGlvIGlycSBiZWZvcmUgZGVzdHJveWluZworCSAqLworCWxwZV9h dWRpb19pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRl dl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJbHBlX2F1ZGlvX3BsYXRkZXZfZGVzdHJv eShkZXZfcHJpdik7CisKKwlpcnFfZnJlZV9kZXNjKGRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsK KworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3Mp OworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmggYi9pbmNsdWRl L2RybS9pbnRlbF9scGVfYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5hNjRjNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vaW50ZWxfbHBlX2F1ZGlv LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICov CisKKyNpZm5kZWYgX0lOVEVMX0xQRV9BVURJT19IXworI2RlZmluZSBfSU5URUxfTFBFX0FVRElP X0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEhETUlfTUFYX0VMRF9C WVRFUwkxMjgKKworc3RydWN0IGludGVsX2hkbWlfbHBlX2F1ZGlvX2VsZCB7CisJaW50IHBvcnRf aWQ7CisJdW5zaWduZWQgY2hhciBlbGRfZGF0YVtIRE1JX01BWF9FTERfQllURVNdOworfTsKKwor c3RydWN0IGludGVsX2hkbWlfbHBlX2F1ZGlvX3BkYXRhIHsKKwlib29sIG5vdGlmeV9wZW5kaW5n OworCWludCB0bWRzX2Nsb2NrX3NwZWVkOworCWJvb2wgaGRtaV9jb25uZWN0ZWQ7CisJc3RydWN0 IGludGVsX2hkbWlfbHBlX2F1ZGlvX2VsZCBlbGQ7CisJdm9pZCAoKm5vdGlmeV9hdWRpb19scGUp KHZvaWQgKmF1ZGlvX3B0cik7CisJc3BpbmxvY2tfdCBscGVfYXVkaW9fc2xvY2s7Cit9OworCisj ZW5kaWYgLyogX0k5MTVfTFBFX0FVRElPX0hfICovCi0tIAoyLjkuMwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==