From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King - ARM Linux Subject: Re: [PATCH v2 2/2] drm: bridge/dw_hdmi: add dw hdmi i2c bus adapter support Date: Thu, 13 Aug 2015 23:56:17 +0100 Message-ID: <20150813225616.GA6912@n2100.arm.linux.org.uk> References: <1431952341-20823-1-git-send-email-vladimir_zapolskiy@mentor.com> <1431952341-20823-3-git-send-email-vladimir_zapolskiy@mentor.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from pandora.arm.linux.org.uk (pandora.arm.linux.org.uk [78.32.30.218]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A3D96E371 for ; Thu, 13 Aug 2015 15:56:37 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1431952341-20823-3-git-send-email-vladimir_zapolskiy@mentor.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Vladimir Zapolskiy Cc: Fabio Estevam , dri-devel@lists.freedesktop.org, Yakir Yang , Andy Yan List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBNYXkgMTgsIDIwMTUgYXQgMDM6MzI6MjFQTSArMDMwMCwgVmxhZGltaXIgWmFwb2xz a2l5IHdyb3RlOgo+ICsvKiBIRE1JX0lIX0kyQ01fU1RBVDAgYW5kIEhETUlfSUhfTVVURV9JMkNN X1NUQVQwIHJlZ2lzdGVyIGJpdHMgKi8KPiArI2RlZmluZSBIRE1JX0lIX0kyQ01fU1RBVDBfRVJS T1IJCUJJVCgwKQo+ICsjZGVmaW5lIEhETUlfSUhfSTJDTV9TVEFUMF9ET05FCQkJQklUKDEpCj4g Kwo+ICsvKiBIRE1JX0kyQ01fT1BFUkFUSU9OIHJlZ2lzdGVyIGJpdHMgKi8KPiArI2RlZmluZSBI RE1JX0kyQ01fT1BFUkFUSU9OX1JFQUQJCUJJVCgwKQo+ICsjZGVmaW5lIEhETUlfSTJDTV9PUEVS QVRJT05fUkVBRF9FWFQJCUJJVCgxKQo+ICsjZGVmaW5lIEhETUlfSTJDTV9PUEVSQVRJT05fV1JJ VEUJCUJJVCg0KQo+ICsKPiArLyogSERNSV9JMkNNX0lOVCByZWdpc3RlciBiaXRzICovCj4gKyNk ZWZpbmUgSERNSV9JMkNNX0lOVF9ET05FX01BU0sJCQlCSVQoMikKPiArI2RlZmluZSBIRE1JX0ky Q01fSU5UX0RPTkVfUE9MCQkJQklUKDMpCj4gKwo+ICsvKiBIRE1JX0kyQ01fQ1RMSU5UIHJlZ2lz dGVyIGJpdHMgKi8KPiArI2RlZmluZSBIRE1JX0kyQ01fQ1RMSU5UX0FSQl9NQVNLCQlCSVQoMikK PiArI2RlZmluZSBIRE1JX0kyQ01fQ1RMSU5UX0FSQl9QT0wJCUJJVCgzKQo+ICsjZGVmaW5lIEhE TUlfSTJDTV9DVExJTlRfTkFDX01BU0sJCUJJVCg2KQo+ICsjZGVmaW5lIEhETUlfSTJDTV9DVExJ TlRfTkFDX1BPTAkJQklUKDcpCgpQbGVhc2UgcHV0IHRoZXNlIGRlZmluaXRpb25zIGluIGR3X2hk bWkuaAoKPiArCj4gKwo+ICAjZGVmaW5lIEhETUlfRURJRF9MRU4JCTUxMgo+ICAKPiAgI2RlZmlu ZSBSR0IJCQkwCj4gQEAgLTEwMiw2ICsxMjQsMTkgQEAgc3RydWN0IGhkbWlfZGF0YV9pbmZvIHsK PiAgCXN0cnVjdCBoZG1pX3Ztb2RlIHZpZGVvX21vZGU7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgZHdf aGRtaV9pMmMgewo+ICsJc3RydWN0IGkyY19hZGFwdGVyCWFkYXA7Cj4gKwo+ICsJc3BpbmxvY2tf dAkJbG9jazsKPiArCXN0cnVjdCBjb21wbGV0aW9uCWNtcF9yOwo+ICsJc3RydWN0IGNvbXBsZXRp b24JY21wX3c7Cj4gKwl1OAkJCXN0YXQ7Cj4gKwo+ICsJdTgJCQlvcGVyYXRpb25fcmVnOwo+ICsJ dTgJCQlzbGF2ZV9yZWc7Cj4gKwlib29sCQkJaXNfcmVnYWRkcjsKPiArfTsKPiArCj4gIHN0cnVj dCBkd19oZG1pIHsKPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKPiAgCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiBAQCAtMTExLDYgKzE0Niw3IEBAIHN0cnVjdCBkd19o ZG1pIHsKPiAgCXN0cnVjdCBkZXZpY2UgKmRldjsKPiAgCXN0cnVjdCBjbGsgKmlzZnJfY2xrOwo+ ICAJc3RydWN0IGNsayAqaWFoYl9jbGs7Cj4gKwlzdHJ1Y3QgZHdfaGRtaV9pMmMgKmkyYzsKPiAg Cj4gIAlzdHJ1Y3QgaGRtaV9kYXRhX2luZm8gaGRtaV9kYXRhOwo+ICAJY29uc3Qgc3RydWN0IGR3 X2hkbWlfcGxhdF9kYXRhICpwbGF0X2RhdGE7Cj4gQEAgLTE3OSw2ICsyMTUsMjQ5IEBAIHN0YXRp YyB2b2lkIGhkbWlfbWFza193cml0ZWIoc3RydWN0IGR3X2hkbWkgKmhkbWksIHU4IGRhdGEsIHVu c2lnbmVkIGludCByZWcsCj4gIAloZG1pX21vZGIoaGRtaSwgZGF0YSA8PCBzaGlmdCwgbWFzaywg cmVnKTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgZHdfaGRtaV9pMmNfaW5pdChzdHJ1Y3QgZHdf aGRtaSAqaGRtaSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xv Y2tfaXJxc2F2ZSgmaGRtaS0+aTJjLT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJLyogU2V0IEZhc3Qg TW9kZSBzcGVlZCAqLwo+ICsJaGRtaV93cml0ZWIoaGRtaSwgMHgwYiwgSERNSV9JMkNNX0RJVik7 Cj4gKwo+ICsJLyogU29mdHdhcmUgcmVzZXQgKi8KPiArCWhkbWlfd3JpdGViKGhkbWksIDB4MDAs IEhETUlfSTJDTV9TT0ZUUlNUWik7Cj4gKwo+ICsJLyogU2V0IGRvbmUsIG5vdCBhY2tub3dsZWRn ZWQgYW5kIGFyYml0cmF0aW9uIGludGVycnVwdCBwb2xhcml0aWVzICovCj4gKwloZG1pX3dyaXRl YihoZG1pLCBIRE1JX0kyQ01fSU5UX0RPTkVfUE9MLCBIRE1JX0kyQ01fSU5UKTsKPiArCWhkbWlf d3JpdGViKGhkbWksIEhETUlfSTJDTV9DVExJTlRfTkFDX1BPTCB8IEhETUlfSTJDTV9DVExJTlRf QVJCX1BPTCwKPiArCQkgICAgSERNSV9JMkNNX0NUTElOVCk7Cj4gKwo+ICsJLyogQ2xlYXIgRE9O RSBhbmQgRVJST1IgaW50ZXJydXB0cyAqLwo+ICsJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9JSF9J MkNNX1NUQVQwX0VSUk9SIHwgSERNSV9JSF9JMkNNX1NUQVQwX0RPTkUsCj4gKwkJICAgIEhETUlf SUhfSTJDTV9TVEFUMCk7Cj4gKwo+ICsJLyogTXV0ZSBET05FIGFuZCBFUlJPUiBpbnRlcnJ1cHRz ICovCj4gKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX0lIX0kyQ01fU1RBVDBfRVJST1IgfCBIRE1J X0lIX0kyQ01fU1RBVDBfRE9ORSwKPiArCQkgICAgSERNSV9JSF9NVVRFX0kyQ01fU1RBVDApOwo+ ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkbWktPmkyYy0+bG9jaywgZmxhZ3MpOwoK V2hhdCBleGFjdGx5IGlzIHRoaXMgc3BpbmxvY2sgcHJvdGVjdGluZyBhZ2FpbnN0IHdpdGggdGhl IGFib3ZlIGNvZGU/Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3X2hkbWlfaTJjX3JlYWQoc3Ry dWN0IGR3X2hkbWkgKmhkbWksCj4gKwkJCSAgICB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW5n dGgpCj4gK3sKPiArCWludCBzdGF0Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCXN0cnVj dCBkd19oZG1pX2kyYyAqaTJjID0gaGRtaS0+aTJjOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZl KCZpMmMtPmxvY2ssIGZsYWdzKTsKPiArCj4gKwlpMmMtPm9wZXJhdGlvbl9yZWcgPSBIRE1JX0ky Q01fT1BFUkFUSU9OX1JFQUQ7Cj4gKwo+ICsJaWYgKCFpMmMtPmlzX3JlZ2FkZHIpIHsKPiArCQlk ZXZfZGJnKGhkbWktPmRldiwgInNldCByZWFkIHJlZ2lzdGVyIGFkZHJlc3MgdG8gMFxuIik7Cj4g KwkJaTJjLT5zbGF2ZV9yZWcgPSAweDAwOwo+ICsJCWkyYy0+aXNfcmVnYWRkciA9IHRydWU7Cj4g Kwl9Cj4gKwo+ICsJd2hpbGUgKGxlbmd0aC0tKSB7Cj4gKwkJcmVpbml0X2NvbXBsZXRpb24oJmky Yy0+Y21wX3IpOwoKSWYgeW91J3JlIHJlLWluaXRpYWxpc2luZyB0aGUgY29tcGxldGlvbiBvbiBl dmVyeSBieXRlLCB3aHkgZG8geW91IG5lZWQKc2VwYXJhdGUgY29tcGxldGlvbnMgZm9yIHRoZSBy ZWFkIHBhdGggYW5kIHRoZSB3cml0ZSBwYXRoPwoKSWYgYSBzaW5nbGUgY29tcGxldGlvbiBjYW4g YmUgdXNlZCwgeW91IHRoZW4gZG9uJ3QgaGF2ZSB0byBzdG9yZSB0aGUKb3BlcmF0aW9uIHJlZ2lz dGVyIHZhbHVlIGluIHN0cnVjdCBkd19oZG1pX2kyYyBlaXRoZXIuCgo+ICsJCWkyYy0+c3RhdCA9 IDA7CgpXaGF0IHVzZSBkb2VzIHplcm9pbmcgdGhpcyBoYXZlPyAgWW91IGRvbid0IHJlYWQgaXQs IGV4Y2VwdCBhZnRlciB5b3UndmUKaGFkIGEgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB3aGljaCBp bXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBoYW5kbGVyIG11c3QKaGF2ZSB3cml0dGVuIHRvIGl0 LgoKPiArCj4gKwkJaGRtaV93cml0ZWIoaGRtaSwgaTJjLT5zbGF2ZV9yZWcrKywgSERNSV9JMkNN X0FERFJFU1MpOwo+ICsJCWhkbWlfd3JpdGViKGhkbWksIGkyYy0+b3BlcmF0aW9uX3JlZywgSERN SV9JMkNNX09QRVJBVElPTik7Cj4gKwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmkyYy0+ bG9jaywgZmxhZ3MpOwo+ICsKPiArCQlzdGF0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1 cHRpYmxlX3RpbWVvdXQoJmkyYy0+Y21wX3IsCj4gKwkJCQkJCQkJIEhaIC8gMTApOwo+ICsJCWlm ICghc3RhdCkKPiArCQkJcmV0dXJuIC1FVElNRURPVVQ7Cj4gKwkJaWYgKHN0YXQgPCAwKQo+ICsJ CQlyZXR1cm4gc3RhdDsKCkNhbiBhIEREQyByZWFkL3dyaXRlIHJlYWxseSBiZSBpbnRlcnJ1cHRl ZCBhbmQgcmVzdGFydGVkIGNvcnJlY3RseT8KV29uJ3QgdGhpcyByZXN0YXJ0IHRoZSB0cmFuc2Fj dGlvbiBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmluZz8gIEhhdmUKeW91IHZhbGlkYXRlZCB0aGF0IGFs bCBjb2RlIHBhdGhzIGNhbGxpbmcgaW50byBoZXJlIGNhbiBjb3BlIHdpdGgKLUVSRVNUQVJUU1lT PwoKSWYgeW91IGxvb2sgYXQgZHJtX2RvX3Byb2JlX2RkY19lZGlkKCkgZm9yIGV4YW1wbGUsIGl0 IHdpbGwgcmV0cnkKdGhlIHRyYW5zZmVyIGlmIHlvdSByZXR1cm4gLUVSRVNUQVJUU1lTIGhlcmUs IGJ1dCBhcyB0aGUgc2lnbmFsIGhhcwpub3QgYmVlbiBoYW5kbGVkLCB3YWl0X2Zvcl9jb21wbGV0 aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgpIHdpbGwKaW1tZWRpYXRlbHkgcmV0dXJuIC1FUkVT VEFSVFNZUyBhZ2Fpbi4uLiBhbmQgYWdhaW4uLi4gYW5kIGFnYWluLgpFYWNoIHRpbWUgd2lsbCBx dWV1ZSBhbm90aGVyIG9wZXJhdGlvbiBfd2l0aG91dF8gd2FpdGluZyBmb3IgdGhlCmxhc3Qgb25l IHRvIGNvbXBsZXRlLgoKPiArCj4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmkyYy0+bG9jaywgZmxh Z3MpOwo+ICsKPiArCQkvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9uIG9uIHRoZSBidXMgKi8K PiArCQlpZiAoaTJjLT5zdGF0ICYgSERNSV9JSF9JMkNNX1NUQVQwX0VSUk9SKSB7Cj4gKwkJCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmkyYy0+bG9jaywgZmxhZ3MpOwo+ICsJCQlyZXR1cm4gLUVJ TzsKPiArCQl9Cj4gKwo+ICsJCSpidWYrKyA9IGhkbWlfcmVhZGIoaGRtaSwgSERNSV9JMkNNX0RB VEFJKTsKPiArCX0KPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMmMtPmxvY2ssIGZs YWdzKTsKCkknZCBiZSB2ZXJ5IHN1cnByaXNlZCBpZiB5b3UgbmVlZCB0aGUgc3BpbmxvY2tzIGlu IHRoZSBhYm92ZSBjb2RlLgpZb3UnbGwgc2VlIHRoZSB1cGRhdGUgdG8gaTJjLT5zdGF0IGFmdGVy IHRoZSBjb21wbGV0aW9uLCBiZWN1YXNlCndhaXRfZm9yX2NvbXBsZXRpb24qKCkgaXMgaW4gdGhl IHNhbWUgY2xhc3MgYXMgdGhlIG90aGVyIGV2ZW50LXdhaXRpbmcKZnVuY3Rpb25zLCBhbmQgY29u dGFpbnMgYmFycmllcnMgd2hpY2ggd2lsbCBlbnN1cmUgdGhhdCB5b3Ugd2lsbCBub3QKcmVhZCBp MmMtPnN0YXQgYmVmb3JlIHlvdSBzZWUgdGhlIGNvbXBsZXRpb24gZXZlbiBvbiBTTVAgcGxhdGZv cm1zLgoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQouLi4KPiArc3RhdGljIGludCBkd19oZG1pX2ky Y194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKPiArCQkJICAgIHN0cnVjdCBpMmNfbXNn ICptc2dzLCBpbnQgbnVtKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfaGRtaSAqaGRtaSA9IGkyY19nZXRf YWRhcGRhdGEoYWRhcCk7Cj4gKwlzdHJ1Y3QgZHdfaGRtaV9pMmMgKmkyYyA9IGhkbWktPmkyYzsK PiArCj4gKwlpbnQgaSwgcmV0Owo+ICsJdTggYWRkcjsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Cj4gKwo+ICsJZGV2X2RiZyhoZG1pLT5kZXYsICJ4ZmVyOiBudW06ICVkLCBhZGRyOiAweCV4XG4i LCBudW0sIG1zZ3NbMF0uYWRkcik7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmkyYy0+bG9j aywgZmxhZ3MpOwo+ICsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4MDAsIEhETUlfSUhfTVVURV9J MkNNX1NUQVQwKTsKPiArCj4gKwkvKiBTZXQgc2xhdmUgZGV2aWNlIGFkZHJlc3MgZnJvbSB0aGUg Zmlyc3QgdHJhbnNhY3Rpb24gKi8KPiArCWFkZHIgPSBtc2dzWzBdLmFkZHI7Cj4gKwloZG1pX3dy aXRlYihoZG1pLCBhZGRyLCBIRE1JX0kyQ01fU0xBVkUpOwo+ICsKPiArCS8qIFNldCBzbGF2ZSBk ZXZpY2UgcmVnaXN0ZXIgYWRkcmVzcyBvbiB0cmFuc2ZlciAqLwo+ICsJaTJjLT5pc19yZWdhZGRy ID0gZmFsc2U7Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTJjLT5sb2NrLCBmbGFn cyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Cj4gKwkJZGV2X2RiZyhoZG1p LT5kZXYsICJ4ZmVyOiBudW06ICVkLyVkLCBsZW46ICVkLCBmbGFnczogMHgleFxuIiwKPiArCQkJ aSArIDEsIG51bSwgbXNnc1tpXS5sZW4sIG1zZ3NbaV0uZmxhZ3MpOwo+ICsKPiArCQlpZiAobXNn c1tpXS5hZGRyICE9IGFkZHIpIHsKPiArCQkJZGV2X3dhcm4oaGRtaS0+ZGV2LAo+ICsJCQkJICJ1 bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiwgY2hhbmdlZCBzbGF2ZSBhZGRyZXNzXG4iKTsKPiArCQkJ cmV0ID0gLUVPUE5PVFNVUFA7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KClByb2JhYmx5IG91Z2h0IHRv IHZhbGlkYXRlIHRoYXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0cmFuc2FjdGlvbj8KCj4gKwo+ICsJ CWlmIChtc2dzW2ldLmxlbiA9PSAwKSB7Cj4gKwkJCWRldl9kYmcoaGRtaS0+ZGV2LAo+ICsJCQkJ ICJ1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiAlZC8lZCwgbm8gZGF0YVxuIiwKPiArCQkJCSBpICsg MSwgbnVtKTsKPiArCQkJcmV0ID0gLUVPUE5PVFNVUFA7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KCkRp dHRvLgoKPiArCj4gKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKPiArCQkJcmV0ID0g ZHdfaGRtaV9pMmNfcmVhZChoZG1pLCBtc2dzW2ldLmJ1ZiwgbXNnc1tpXS5sZW4pOwo+ICsJCWVs c2UKPiArCQkJcmV0ID0gZHdfaGRtaV9pMmNfd3JpdGUoaGRtaSwgbXNnc1tpXS5idWYsIG1zZ3Nb aV0ubGVuKTsKPiArCj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiAr CWlmICghcmV0KQo+ICsJCXJldCA9IG51bTsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTJj LT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJLyogTXV0ZSBET05FIGFuZCBFUlJPUiBpbnRlcnJ1cHRz ICovCj4gKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX0lIX0kyQ01fU1RBVDBfRVJST1IgfCBIRE1J X0lIX0kyQ01fU1RBVDBfRE9ORSwKPiArCQkgICAgSERNSV9JSF9NVVRFX0kyQ01fU1RBVDApOwo+ ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmkyYy0+bG9jaywgZmxhZ3MpOwoKV2hhdCBl eGFjdGx5IGlzIHRoaXMgc3BpbmxvY2sgcHJvdGVjdGluZyB1cyBmcm9tPyAgQSBzaW5nbGUgd3Jp dGUgdG8gYQpyZWdpc3RlciBpcyBhbHdheXMgYXRvbWljLgoKPiArCj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGR3X2hkbWlfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVy ICphZGFwdGVyKQo+ICt7Cj4gKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNf RU1VTDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGR3X2hkbWlfYWxn b3JpdGhtID0gewoKY29uc3Q/Cgo+ICsJLm1hc3Rlcl94ZmVyCT0gZHdfaGRtaV9pMmNfeGZlciwK PiArCS5mdW5jdGlvbmFsaXR5CT0gZHdfaGRtaV9pMmNfZnVuYywKPiArfTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmR3X2hkbWlfaTJjX2FkYXB0ZXIoc3RydWN0IGR3X2hkbWkg KmhkbWkpCj4gK3sKPiArCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKPiArCWludCByZXQ7Cj4g Kwo+ICsJaGRtaS0+aTJjID0gZGV2bV9remFsbG9jKGhkbWktPmRldiwgc2l6ZW9mKCpoZG1pLT5p MmMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghaGRtaS0+aTJjKQo+ICsJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwoKSSdkIG11Y2ggcHJlZmVyOgoJc3RydWN0IGR3X2hkbWlfaTJjICppMmM7CgoJ aTJjID0gZGV2bV9remFsbG9jKC4uLik7Cgo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZoZG1pLT5p MmMtPmxvY2spOwo+ICsJaW5pdF9jb21wbGV0aW9uKCZoZG1pLT5pMmMtPmNtcF9yKTsKPiArCWlu aXRfY29tcGxldGlvbigmaGRtaS0+aTJjLT5jbXBfdyk7Cj4gKwo+ICsJYWRhcCA9ICZoZG1pLT5p MmMtPmFkYXA7Cj4gKwlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19EREM7Cj4gKwlhZGFwLT5vd25l ciA9IFRISVNfTU9EVUxFOwo+ICsJYWRhcC0+ZGV2LnBhcmVudCA9IGhkbWktPmRldjsKPiArCWFk YXAtPmFsZ28gPSAmZHdfaGRtaV9hbGdvcml0aG07Cj4gKwlzdHJsY3B5KGFkYXAtPm5hbWUsICJE ZXNpZ25XYXJlIEhETUkiLCBzaXplb2YoYWRhcC0+bmFtZSkpOwo+ICsJaTJjX3NldF9hZGFwZGF0 YShhZGFwLCBoZG1pKTsKPiArCj4gKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7Cj4gKwlp ZiAocmV0KSB7Cj4gKwkJZGV2X3dhcm4oaGRtaS0+ZGV2LCAiY2Fubm90IGFkZCAlcyBJMkMgYWRh cHRlclxuIiwgYWRhcC0+bmFtZSk7Cj4gKwkJZGV2bV9rZnJlZShoZG1pLT5kZXYsIGhkbWktPmky Yyk7Cj4gKwkJaGRtaS0+aTJjID0gTlVMTDsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJ fQo+ICsKCgloZG1pLT5pMmMgPSBpMmM7CgpyYXRoZXIgdGhhbiBoYXZpbmcgdG8gcmVtZW1iZXIg dG8gY2xlYXIgb3V0IGhkbWktPmkyYyBpbiBlcnJvciBwYXRocy4KCj4gKwlkZXZfaW5mbyhoZG1p LT5kZXYsICJyZWdpc3RlcmVkICVzIEkyQyBidXMgZHJpdmVyXG4iLCBhZGFwLT5uYW1lKTsKPiAr Cj4gKwlyZXR1cm4gYWRhcDsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgaGRtaV9zZXRfY3RzX24o c3RydWN0IGR3X2hkbWkgKmhkbWksIHVuc2lnbmVkIGludCBjdHMsCj4gIAkJCSAgIHVuc2lnbmVk IGludCBuKQo+ICB7Cj4gQEAgLTE0NjYsMTYgKzE3NDUsNDcgQEAgc3RydWN0IGRybV9icmlkZ2Vf ZnVuY3MgZHdfaGRtaV9icmlkZ2VfZnVuY3MgPSB7Cj4gIAkubW9kZV9maXh1cCA9IGR3X2hkbWlf YnJpZGdlX21vZGVfZml4dXAsCj4gIH07Cj4gIAo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZHdfaGRt aV9pMmNfaXJxKHN0cnVjdCBkd19oZG1pICpoZG1pKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfaGRtaV9p MmMgKmkyYyA9IGhkbWktPmkyYzsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJc3Bp bl9sb2NrX2lycXNhdmUoJmkyYy0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCWkyYy0+c3RhdCA9IGhk bWlfcmVhZGIoaGRtaSwgSERNSV9JSF9JMkNNX1NUQVQwKTsKPiArCWlmICghaTJjLT5zdGF0KSB7 Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTJjLT5sb2NrLCBmbGFncyk7Cj4gKwkJcmV0 dXJuIElSUV9OT05FOwo+ICsJfQo+ICsKPiArCWhkbWlfd3JpdGViKGhkbWksIGkyYy0+c3RhdCwg SERNSV9JSF9JMkNNX1NUQVQwKTsKPiArCj4gKwlpZiAoaTJjLT5vcGVyYXRpb25fcmVnICYgSERN SV9JMkNNX09QRVJBVElPTl9SRUFEKQo+ICsJCWNvbXBsZXRlKCZpMmMtPmNtcF9yKTsKPiArCWVs c2UKPiArCQljb21wbGV0ZSgmaTJjLT5jbXBfdyk7Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaTJjLT5sb2NrLCBmbGFncyk7CgpBZ2Fpbiwgd2hhdCBmdW5jdGlvbiBkb2VzIHRoaXMg c3BpbmxvY2sgcGVyZm9ybT8gIFdvdWxkbid0OgoKCXVuc2lnbmVkIGludCBzdGF0OwoKCXN0YXQg PSBoZG1pX3JlYWRiKGhkbWksIEhETUlfSUhfSTJDTV9TVEFUMCk7CglpZiAoc3RhdCA9PSAwKQoJ CXJldHVybiBJUlFfTk9ORTsKCgkvKiBDbGVhciBpbnRlcnJ1cHRzICovCgloZG1pX3dyaXRlYiho ZG1pLCBzdGF0LCBIRE1JX0lIX0kyQ01fU1RBVDApOwoKCWkyYy0+c3RhdCA9IHN0YXQ7CgoJaWYg KGkyYy0+b3BlcmF0aW9uX3JlZyAmIEhETUlfSTJDTV9PUEVSQVRJT05fUkVBRCkKCQljb21wbGV0 ZSgmaTJjLT5jbXBfcik7CgllbHNlCgkJY29tcGxldGUoJmkyYy0+Y21wX3cpOwoKYmUgZmluZSwg b3IgbWF5YmUgd2l0aCB0aGUgc3BpbmxvY2sgYXJvdW5kIHRoZSBhc3NpZ25tZW50IHRvIGkyYy0+ c3RhdAphbmQgdGhpcyBwb2ludCBpZiB5b3UgbmVlZCB0aGUgYXNzaWdubWVudCBhbmQgY29tcGxl dGlvbiB0byBiZSBhdG9taWM/CgpOb3RlIHRoYXQgdGhlIHdyaXRlIHRvICdpMmMtPnN0YXQnIHdv dWxkIGJlIGF0b21pYyBpbiBpdHNlbGYgYW55d2F5LgoKSW4gYW55IGNhc2UsIGNvbXBsZXRlKCkg aW1wbGllcyBhIHdyaXRlIG1lbW9yeSBiYXJyaWVyLCBzbyBldmVuIG9uIFNNUApzeXN0ZW1zLCB0 aGUgd3JpdGUgdG8gaTJjLT5zdGF0IHdpbGwgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGNvbXBsZXRp b24KImNvbXBsZXRlcyIuICBTbywgSSBkb24ndCB0aGluayB5b3UgbmVlZCBhbnkgbG9ja2luZyBo ZXJlLgoKVGhhbmtzLgoKLS0gCkZUVEMgYnJvYWRiYW5kIGZvciAwLjhtaWxlIGxpbmU6IGN1cnJl bnRseSBhdCAxMC41TWJwcyBkb3duIDQwMGticHMgdXAKYWNjb3JkaW5nIHRvIHNwZWVkdGVzdC5u ZXQuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==