From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from web38801.mail.mud.yahoo.com ([209.191.125.92]) by www.linuxtv.org with smtp (Exim 4.63) (envelope-from ) id 1L2mMn-0002WZ-47 for linux-dvb@linuxtv.org; Wed, 19 Nov 2008 13:41:12 +0100 Date: Wed, 19 Nov 2008 04:40:34 -0800 (PST) From: Uri Shkolnik To: linux-dvb@linuxtv.org In-Reply-To: <352865.62863.qm@web38803.mail.mud.yahoo.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1818082329-1227098434=:38943" Message-ID: <911565.38943.qm@web38801.mail.mud.yahoo.com> Subject: [linux-dvb] [PATCH 1/2] Siano's SMS subsystems API - SmsHost support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-dvb-bounces@linuxtv.org Errors-To: linux-dvb-bounces+mchehab=infradead.org@linuxtv.org List-ID: --0-1818082329-1227098434=:38943 Content-Type: text/plain; charset=us-ascii Siano DTV module works with three subsystem API (DVB-API v3, DVB-API v5 (S2) and SmsHost) Until now, only the DVB-API v3 has been supported. The following two patch's parts add the support for the two other APIs. The first adds the SmsHost API support. This API supports DTV standards yet to be fully supported by the DVB-API (CMMB, T-DMB and more). The second part adds support for the DVB-API v5 ("S2") ****** This patch adds Siano subsystem, which supports the CMMB, T-DMB, DVB-H and DAB-IPD TV standards. Signed-off-by: Uri Shkolnik --0-1818082329-1227098434=:38943 Content-Type: text/x-diff; name="smssys_patch.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smssys_patch.diff" VGhpcyBwYXRjaCBhZGRzIFNpYW5vIHN1YnN5c3RlbSwgd2hpY2ggc3VwcG9y dHMgdGhlIENNTUIgYW5kIFQtRE1CIERUViBzdGFuZGFyZHMuClRoZSBwYXRj aCBhbHNvIGFkZHMgTmV0d29yayBpbnRlcmZhY2UgKG5ldHdvcmsgZHJpdmVy cykgaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgRFZCLUggYW5kIERBQi1JUCBz dGFuZGFyZHMuCgpTaWduZWQtb2ZmLWJ5OiBVcmkgU2hrb2xuaWsgPHVyaXNA c2lhbm8tbXMuY29tPgoKCmRpZmYgLXVOciB2NGwtZHZiLWM1Zjk3NmNhYjAx MS9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjaGFyLmMgdjRs LWR2Yi1jNWY5NzZjYWIwMTFfMDAwMy9saW51eC9kcml2ZXJzL21lZGlhL2R2 Yi9zaWFuby9zbXNjaGFyLmMKLS0tIHY0bC1kdmItYzVmOTc2Y2FiMDExL2xp bnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NoYXIuYwkxOTcwLTAx LTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgdjRsLWR2Yi1jNWY5 NzZjYWIwMTFfMDAwMy9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9z bXNjaGFyLmMJMjAwOC0xMS0xOSAxNDoyMTozNC4wMDAwMDAwMDAgKzAyMDAK QEAgLTAsMCArMSw2NTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1Np YW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCitNRFRWIHJlY2VpdmVyIGtlcm5l bCBtb2R1bGVzLgorQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIFVyaSBTaGtv bG5paworCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVp dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5j bHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+CS8qIHByaW50aygpICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8q IGV2ZXJ5dGhpbmcuLi4gKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkv KiBzaXplX3QgKi8KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVk ZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Cisj aW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkJLyogY2xpKCksICpfZmxhZ3MgKi8K KyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CS8qIGNvcHlfKl91c2VyICov CisKKyNpbmNsdWRlICJzbXNjb3JlYXBpLmgiCisKKyNpbmNsdWRlICJzbXNj aGFyaW9jdGwuaCIKKworLyogbWF4IG51bWJlciBvZiBwYWNrZXRzIGFsbG93 ZWQgdG8gYmUgcGVuZGluZyBvbiBxdWV1ZSovCisjZGVmaW5lIFNNU19DSFJf TUFYX1FfTEVOCTE1CisjZGVmaW5lIFNNU0NIQVJfTlJfREVWUwkJNworCitz dHJ1Y3Qgc21zY2hhcl9kZXZpY2VfdCB7CisJc3RydWN0IGNkZXYgY2RldjsJ LyohPCBDaGFyIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwl3YWl0X3F1ZXVlX2hl YWRfdCB3YWl0cTsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KKwlpbnQgY2Fu Y2VsX3dhaXRxOworCXNwaW5sb2NrX3QgbG9jazsJLyohPCBjcml0aWNhbCBz ZWN0aW9uICovCisJaW50IHBlbmRpbmdfY291bnQ7CisJc3RydWN0IGxpc3Rf aGVhZCBwZW5kaW5nX2RhdGE7CS8qITwgbGlzdCBvZiBwZW5kaW5nIGRhdGEg Ki8KKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY3VycmVudGNiOworCWlu dCBkZXZpY2VfaW5kZXg7CisJc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNv cmVkZXY7CisJc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKnNtc2NsaWVudDsK K307CisKKy8qISAgSG9sZHMgdGhlIG1ham9yIG51bWJlciBvZiB0aGUgZGV2 aWNlIG5vZGUuIG1heSBiZSBjaGFuZ2VkIGF0IGxvYWQKK3RpbWUuKi8KK2lu dCBzbXNjaGFyX21ham9yID0gMjUxOworCisvKiEgIEhvbGRzIHRoZSBmaXJz dCBtaW5vciBudW1iZXIgb2YgdGhlIGRldmljZSBub2RlLgorbWF5IGJlIGNo YW5nZWQgYXQgbG9hZCB0aW1lLiovCitpbnQgc21zY2hhcl9taW5vcjsgIC8q PSAwKi8KKworLyogbWFjcm9zIHRoYXQgYWxsb3cgdGhlIGxvYWQgdGltZSBw YXJhbWV0ZXJzIGNoYW5nZSovCittb2R1bGVfcGFyYW0oc21zY2hhcl9tYWpv ciwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShzbXNjaGFyX21pbm9y LCBpbnQsIFNfSVJVR08pOworCitzdHJ1Y3Qgc21zY2hhcl9kZXZpY2VfdCBz bXNjaGFyX2RldmljZXNbU01TQ0hBUl9OUl9ERVZTXTsKK3N0YXRpYyBpbnQg Z19zbXNjaGFyX2ludXNlOworCitzdGF0aWMgaW50IGdfcG5wX3N0YXR1c19j aGFuZ2VkID0gMTsKK3dhaXRfcXVldWVfaGVhZF90IGdfcG5wX2V2ZW50Owor CisvKioKKyAqIHVucmVnaXN0ZXJzIHNtcyBjbGllbnQgYW5kIHJldHVybnMg YWxsIHF1ZXVlZCBidWZmZXJzCisgKgorICogQHBhcmFtIGRldiBwb2ludGVy IHRvIHRoZSBjbGllbnQgY29udGV4dCAoc21zY2hhciBwYXJhbWV0ZXJzIGJs b2NrKQorICoKKyAqLworc3RhdGljIHZvaWQgc21zY2hhcl91bnJlZ2lzdGVy X2NsaWVudChzdHJ1Y3Qgc21zY2hhcl9kZXZpY2VfdCAqZGV2KQoreworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2LT5jb3JlZGV2ICYmIGRl di0+c21zY2xpZW50KSB7CisJCWRldi0+Y2FuY2VsX3dhaXRxID0gMTsKKwkJ d2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRxKTsKKworCQlzcGlu X2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkJd2hpbGUg KCFsaXN0X2VtcHR5KCZkZXYtPnBlbmRpbmdfZGF0YSkpIHsKKwkJCXN0cnVj dCBzbXNjb3JlX2J1ZmZlcl90ICpjYiA9CisJCQkgICAgKHN0cnVjdCBzbXNj b3JlX2J1ZmZlcl90ICopZGV2LT5wZW5kaW5nX2RhdGEubmV4dDsKKwkJCWxp c3RfZGVsKCZjYi0+ZW50cnkpOworCisJCQlzbXNjb3JlX3B1dGJ1ZmZlcihk ZXYtPmNvcmVkZXYsIGNiKTsKKwkJCWRldi0+cGVuZGluZ19jb3VudC0tOwor CQl9CisKKwkJaWYgKGRldi0+Y3VycmVudGNiKSB7CisJCQlzbXNjb3JlX3B1 dGJ1ZmZlcihkZXYtPmNvcmVkZXYsIGRldi0+Y3VycmVudGNiKTsKKwkJCWRl di0+Y3VycmVudGNiID0gTlVMTDsKKwkJCWRldi0+cGVuZGluZ19jb3VudC0t OworCQl9CisKKwkJc21zY29yZV91bnJlZ2lzdGVyX2NsaWVudChkZXYtPnNt c2NsaWVudCk7CisJCWRldi0+c21zY2xpZW50ID0gTlVMTDsKKworCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl9Cit9 CisKKy8qKgorICogcXVldWVzIGluY29taW5nIGJ1ZmZlcnMgaW50byBidWZm ZXJzIHF1ZXVlCisgKgorICogQHBhcmFtIGNvbnRleHQgcG9pbnRlciB0byB0 aGUgY2xpZW50IGNvbnRleHQgKHNtc2NoYXIgcGFyYW1ldGVycyBibG9jaykK KyAqIEBwYXJhbSBjYiBwb2ludGVyIHRvIGluY29taW5nIGJ1ZmZlciBkZXNj cmlwdG9yCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIHF1 ZXVlIG92ZXJmbG93LgorICovCitzdGF0aWMgaW50IHNtc2NoYXJfb25yZXNw b25zZSh2b2lkICpjb250ZXh0LCBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAq Y2IpCit7CisJc3RydWN0IHNtc2NoYXJfZGV2aWNlX3QgKmRldiA9IGNvbnRl eHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGV2KSB7CisJ CXNtc19lcnIoInJlY2lldmVkIGJhZCBkZXYgcG9pbnRlclxuIik7CisJCXJl dHVybiAtRUZBVUxUOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5s b2NrLCBmbGFncyk7CisKKwlpZiAoZGV2LT5wZW5kaW5nX2NvdW50ID4gU01T X0NIUl9NQVhfUV9MRU4pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJ ZGV2LT5wZW5kaW5nX2NvdW50Kys7CisJLyogaWYgZGF0YSBjaGFubmVsLCBy ZW1vdmUgaGVhZGVyICovCisJaWYgKGRldi0+ZGV2aWNlX2luZGV4KSB7CisJ CWNiLT5zaXplIC09IHNpemVvZihzdHJ1Y3QgU21zTXNnSGRyX1NUKTsKKwkJ Y2ItPm9mZnNldCArPSBzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCk7CisJ fQorCisJbGlzdF9hZGRfdGFpbCgmY2ItPmVudHJ5LCAmZGV2LT5wZW5kaW5n X2RhdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywg ZmxhZ3MpOworCisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmRldi0+d2FpdHEp KQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdHEpOworCisJ cmV0dXJuIDA7Cit9CisKKy8qKgorICogaGFuZGxlcyBkZXZpY2UgcmVtb3Zh bCBldmVudAorICoKKyAqIEBwYXJhbSBjb250ZXh0IHBvaW50ZXIgdG8gdGhl IGNsaWVudCBjb250ZXh0IChzbXNjaGFyIHBhcmFtZXRlcnMgYmxvY2spCisg KgorICovCitzdGF0aWMgdm9pZCBzbXNjaGFyX29ucmVtb3ZlKHZvaWQgKmNv bnRleHQpCit7CisJc3RydWN0IHNtc2NoYXJfZGV2aWNlX3QgKmRldiA9IChz dHJ1Y3Qgc21zY2hhcl9kZXZpY2VfdCAqKWNvbnRleHQ7CisKKwlzbXNjaGFy X3VucmVnaXN0ZXJfY2xpZW50KGRldik7CisJZGV2LT5jb3JlZGV2ID0gTlVM TDsKK30KKworLyoqCisgKiByZWdpc3RlcnMgY2xpZW50IGFzc29jaWF0ZWQg d2l0aCB0aGUgbm9kZQorICoKKyAqIEBwYXJhbSBpbm9kZSBJbm9kZSBjb25j ZXJuZWQuCisgKiBAcGFyYW0gZmlsZSBGaWxlIGNvbmNlcm5lZC4KKyAqCisg KiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IuCisgKi8KK3N0 YXRpYyBpbnQgc21zY2hhcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzbXNjaGFyX2RldmljZV90 ICpkZXYgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKKwkJCQkJCSAg ICBzdHJ1Y3Qgc21zY2hhcl9kZXZpY2VfdCwKKwkJCQkJCSAgICBjZGV2KTsK KwlpbnQgcmMgPSAtRU5PREVWOworCisJc21zX2luZm8oImVudGVyaW5nIGlu ZGV4ICVkXG4iLCBkZXYtPmRldmljZV9pbmRleCk7CisJaWYgKGRldi0+Y29y ZWRldikgeworCQlzdHJ1Y3Qgc21zY2xpZW50X3BhcmFtc190IHBhcmFtczsK KwkJcGFyYW1zLmluaXRpYWxfaWQgPSBkZXYtPmRldmljZV9pbmRleCA/CisJ CSAgICBkZXYtPmRldmljZV9pbmRleCA6IFNNU19IT1NUX0xJQjsKKwkJcGFy YW1zLmRhdGFfdHlwZSA9IGRldi0+ZGV2aWNlX2luZGV4ID8gTVNHX1NNU19E QUJfQ0hBTk5FTCA6IDA7CisJCXBhcmFtcy5vbnJlc3BvbnNlX2hhbmRsZXIg PSBzbXNjaGFyX29ucmVzcG9uc2U7CisJCXBhcmFtcy5vbnJlbW92ZV9oYW5k bGVyID0gc21zY2hhcl9vbnJlbW92ZTsKKwkJcGFyYW1zLmNvbnRleHQgPSBk ZXY7CisKKwkJcmMgPSBzbXNjb3JlX3JlZ2lzdGVyX2NsaWVudChkZXYtPmNv cmVkZXYsICZwYXJhbXMsCisJCQkJCSAgICAgJmRldi0+c21zY2xpZW50KTsK KwkJaWYgKCFyYykKKwkJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKwkJ ZGV2LT5jYW5jZWxfd2FpdHEgPSAwOworCQlnX3BucF9zdGF0dXNfY2hhbmdl ZCA9IDE7CisJfQorCisJaWYgKHJjKQorCQlzbXNfZXJyKCIgZXhpdGluZywg cmMgJWRcbiIsIHJjKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiB1 bnJlZ2lzdGVycyBjbGllbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCisg KgorICogQHBhcmFtIGlub2RlIElub2RlIGNvbmNlcm5lZC4KKyAqIEBwYXJh bSBmaWxlIEZpbGUgY29uY2VybmVkLgorICoKKyAqLworc3RhdGljIGludCBz bXNjaGFyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZp bGUgKmZpbGUpCit7CisJc21zY2hhcl91bnJlZ2lzdGVyX2NsaWVudChmaWxl LT5wcml2YXRlX2RhdGEpOworCisJc21zX2luZm8oImV4aXRpbmdcbiIpOwor CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY29waWVzIGRhdGEgZnJvbSBi dWZmZXJzIGluIGluY29taW5nIHF1ZXVlIGludG8gYSB1c2VyIGJ1ZmZlcgor ICoKKyAqIEBwYXJhbSBmaWxlIEZpbGUgc3RydWN0dXJlLgorICogQHBhcmFt IGJ1ZiBTb3VyY2UgYnVmZmVyLgorICogQHBhcmFtIGNvdW50IFNpemUgb2Yg c291cmNlIGJ1ZmZlci4KKyAqIEBwYXJhbSBmX3BvcyBQb3NpdGlvbiBpbiBm aWxlIChpZ25vcmVkKS4KKyAqCisgKiBAcmV0dXJuIE51bWJlciBvZiBieXRl cyByZWFkLCBvciA8MCBvbiBlcnJvci4KKyAqLworc3RhdGljIHNzaXplX3Qg c21zY2hhcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAq YnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sK KwlzdHJ1Y3Qgc21zY2hhcl9kZXZpY2VfdCAqZGV2ID0gZmlsZS0+cHJpdmF0 ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjLCBjb3Bp ZWQgPSAwOworCisJaWYgKCFidWYpIHsKKwkJc21zX2VycigiQmFkIHBvaW50 ZXIgcmVjaWV2ZWQgZnJvbSB1c2VyLlxuIik7CisJCXJldHVybiAtRUZBVUxU OworCX0KKwlpZiAoIWRldi0+Y29yZWRldiB8fCAhZGV2LT5zbXNjbGllbnQp IHsKKwkJc21zX2Vycigibm8gY2xpZW50XG4iKTsKKwkJcmV0dXJuIC1FTk9E RVY7CisJfQorCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+ d2FpdHEsCisJCQkJICAgICAgIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ19k YXRhKQorCQkJCSAgICAgIHx8IChkZXYtPmNhbmNlbF93YWl0cSkpOworCWlm IChyYyA8IDApIHsKKwkJc21zX2Vycigid2FpdF9ldmVudF9pbnRlcnJ1cHRp YmxlIGVycm9yICVkXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJaWYg KGRldi0+Y2FuY2VsX3dhaXRxKQorCQlyZXR1cm4gMDsKKwlpZiAoIWRldi0+ c21zY2xpZW50KSB7CisJCXNtc19lcnIoIm5vIGNsaWVudFxuIik7CisJCXJl dHVybiAtRU5PREVWOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5s b2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldi0+cGVu ZGluZ19kYXRhKSAmJiAoY29waWVkIDwgY291bnQpKSB7CisJCXN0cnVjdCBz bXNjb3JlX2J1ZmZlcl90ICpjYiA9CisJCSAgICAoc3RydWN0IHNtc2NvcmVf YnVmZmVyX3QgKilkZXYtPnBlbmRpbmdfZGF0YS5uZXh0OworCQlpbnQgYWN0 dWFsX3NpemUgPSBtaW4oKChpbnQpY291bnQgLSBjb3BpZWQpLCBjYi0+c2l6 ZSk7CisJCWlmIChjb3B5X3RvX3VzZXIoJmJ1Zltjb3BpZWRdLCAmKChjaGFy ICopY2ItPnApW2NiLT5vZmZzZXRdLAorCQkJCSBhY3R1YWxfc2l6ZSkpIHsK KwkJCXNtc19lcnIoImNvcHlfdG9fdXNlciBmYWlsZWRcbiIpOworCQkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCQly ZXR1cm4gLUVGQVVMVDsKKwkJfQorCQljb3BpZWQgKz0gYWN0dWFsX3NpemU7 CisJCWNiLT5vZmZzZXQgKz0gYWN0dWFsX3NpemU7CisJCWNiLT5zaXplIC09 IGFjdHVhbF9zaXplOworCisJCWlmICghY2ItPnNpemUpIHsKKwkJCWxpc3Rf ZGVsKCZjYi0+ZW50cnkpOworCQkJc21zY29yZV9wdXRidWZmZXIoZGV2LT5j b3JlZGV2LCBjYik7CisJCQlkZXYtPnBlbmRpbmdfY291bnQtLTsKKwkJfQor CX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdz KTsKKwlyZXR1cm4gY29waWVkOworfQorCisvKioKKyAqIHNlbmRzIHRoZSBi dWZmZXIgdG8gdGhlIGFzc29jaWF0ZWQgZGV2aWNlCisgKgorICogQHBhcmFt IGZpbGUgRmlsZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gYnVmIFNvdXJjZSBi dWZmZXIuCisgKiBAcGFyYW0gY291bnQgU2l6ZSBvZiBzb3VyY2UgYnVmZmVy LgorICogQHBhcmFtIGZfcG9zIFBvc2l0aW9uIGluIGZpbGUgKGlnbm9yZWQp LgorICoKKyAqIEByZXR1cm4gTnVtYmVyIG9mIGJ5dGVzIHJlYWQsIG9yIDww IG9uIGVycm9yLgorICovCitzdGF0aWMgc3NpemVfdCBzbXNjaGFyX3dyaXRl KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAor CQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wb3MpCit7CisJc3Ry dWN0IHNtc2NoYXJfZGV2aWNlX3QgKmRldjsKKwl2b2lkICpidWZmZXI7CisK KwlpZiAoZmlsZSA9PSBOVUxMKSB7CisJCXNtc19lcnIoImZpbGUgaXMgTlVM TFxuIik7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJaWYgKGZpbGUtPnBy aXZhdGVfZGF0YSA9PSBOVUxMKSB7CisJCXNtc19lcnIoImZpbGUtPnByaXZh dGVfZGF0YSBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmICghZGV2LT5zbXNj bGllbnQpIHsKKwkJc21zX2Vycigibm8gY2xpZW50XG4iKTsKKwkJcmV0dXJu IC1FTk9ERVY7CisJfQorCisJYnVmZmVyID0ga21hbGxvYyhBTElHTihjb3Vu dCwgU01TX0FMTE9DX0FMSUdOTUVOVCkgKyBTTVNfRE1BX0FMSUdOTUVOVCwK KwkJCSBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKGJ1ZmZlcikgewor CQl2b2lkICptc2dfYnVmZmVyID0gKHZvaWQgKilTTVNfQUxJR05fQUREUkVT UyhidWZmZXIpOworCisJCWlmICghY29weV9mcm9tX3VzZXIobXNnX2J1ZmZl ciwgYnVmLCBjb3VudCkpCisJCQlzbXNjbGllbnRfc2VuZHJlcXVlc3QoZGV2 LT5zbXNjbGllbnQsCisJCQkJCSAgICAgIG1zZ19idWZmZXIsIGNvdW50KTsK KwkJZWxzZQorCQkJY291bnQgPSAwOworCisJCWtmcmVlKGJ1ZmZlcik7CisJ fQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHNtc2NoYXJf bW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICp2bWEpCit7CisJc3RydWN0IHNtc2NoYXJfZGV2aWNlX3QgKmRldiA9IGZp bGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gc21zY29yZV9tYXBfY29tbW9u X2J1ZmZlcihkZXYtPmNvcmVkZXYsIHZtYSk7Cit9CisKKy8qKgorICogd2Fp dHMgdW50aWwgYnVmZmVyIGluc2VydGVkIGludG8gYSBxdWV1ZS4gd2hlbiBp bnNlcnRlZCBidWZmZXIgb2Zmc2V0CisgKiBhcmUgcmVwb3J0ZWR0byB0aGUg Y2FsbGluZyBwcm9jZXNzLiBwcmV2aW91c2x5IHJlcG9ydGVkIGJ1ZmZlciBp cworICogcmV0dXJuZWQgdG8gc21zY29yZSBwb29sLgorICoKKyAqIEBwYXJh bSBkZXYgcG9pbnRlciB0byBzbXNjaGFyIHBhcmFtZXRlcnMgYmxvY2sKKyAq IEBwYXJhbSB0b3VzZXIgcG9pbnRlciB0byBhIHN0cnVjdHVyZSB0aGF0IHJl Y2VpdmVzIGluY29taW5nIGJ1ZmZlciBvZmZzZXRzCisgKgorICogQHJldHVy biAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50 IHNtc2NoYXJfd2FpdF9nZXRfYnVmZmVyKHN0cnVjdCBzbXNjaGFyX2Rldmlj ZV90ICpkZXYsCisJCQkJICAgc3RydWN0IHNtc2NoYXJfYnVmZmVyX3QgKnRv dXNlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlm IChkZXYtPmN1cnJlbnRjYikgeworCQlzbXNjb3JlX3B1dGJ1ZmZlcihkZXYt PmNvcmVkZXYsIGRldi0+Y3VycmVudGNiKTsKKwkJZGV2LT5jdXJyZW50Y2Ig PSBOVUxMOworCQlkZXYtPnBlbmRpbmdfY291bnQtLTsKKwl9CisKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJj ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d2FpdHEsCisJCQkJ ICAgICAgIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ19kYXRhKQorCQkJCSAg ICAgIHx8IChkZXYtPmNhbmNlbF93YWl0cSkpOworCWlmIChyYyA8IDApIHsK KwkJc21zX2Vycigid2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIGVycm9yLCBy Yz0lZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCWlmIChkZXYtPmNh bmNlbF93YWl0cSkgeworCQl0b3VzZXItPm9mZnNldCA9IDA7CisJCXRvdXNl ci0+c2l6ZSA9IDA7CisJCXJldHVybiAwOworCX0KKwlpZiAoIWRldi0+c21z Y2xpZW50KSB7CisJCXNtc19lcnIoIm5vIGNsaWVudFxuIik7CisJCXJldHVy biAtRU5PREVWOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxv Y2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wZW5kaW5n X2RhdGEpKSB7CisJCXN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYiA9CisJ CSAgICAoc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKilkZXYtPnBlbmRpbmdf ZGF0YS5uZXh0OworCQl0b3VzZXItPm9mZnNldCA9IGNiLT5vZmZzZXRfaW5f Y29tbW9uICsgY2ItPm9mZnNldDsKKwkJdG91c2VyLT5zaXplID0gY2ItPnNp emU7CisKKwkJbGlzdF9kZWwoJmNiLT5lbnRyeSk7CisKKwkJZGV2LT5jdXJy ZW50Y2IgPSBjYjsKKwl9IGVsc2UgeworCQl0b3VzZXItPm9mZnNldCA9IDA7 CisJCXRvdXNlci0+c2l6ZSA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiBwb2xsIGZvciBkYXRhIGF2YWlsYWJpbGl0eQorICoKKyAq IEBwYXJhbSBmaWxlIEZpbGUgc3RydWN0dXJlLgorICogQHBhcmFtIHdhaXQg a2VybmVsIHBvbGxpbmcgdGFibGUuCisgKgorICogQHJldHVybiBQT0xMSU4g ZmxhZyBpZiByZWFkIGRhdGEgaXMgYXZhaWxhYmxlLgorICovCitzdGF0aWMg dW5zaWduZWQgaW50IHNtc2NoYXJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwK KwkJCQkgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0 cnVjdCBzbXNjaGFyX2RldmljZV90ICpkZXY7CisJaW50IG1hc2sgPSAwOwor CisJaWYgKGZpbGUgPT0gTlVMTCkgeworCQlzbXNfZXJyKCJmaWxlIGlzIE5V TExcbiIpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCWlmIChmaWxlLT5w cml2YXRlX2RhdGEgPT0gTlVMTCkgeworCQlzbXNfZXJyKCJmaWxlLT5wcml2 YXRlX2RhdGEgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChsaXN0X2Vt cHR5KCZkZXYtPnBlbmRpbmdfZGF0YSkpIHsKKwkJc21zX2luZm8oIk5vIGRh dGEgaXMgcmVhZHksIHdhaXRpbmcgZm9yIGRhdGEgcmVjaWV2ZS5cbiIpOwor CQlwb2xsX3dhaXQoZmlsZSwgJmRldi0+d2FpdHEsIHdhaXQpOworCX0KKwor CWlmICghbGlzdF9lbXB0eSgmZGV2LT5wZW5kaW5nX2RhdGEpKQorCQltYXNr IHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJcmV0dXJuIG1hc2s7Cit9CisK K3N0YXRpYyBpbnQgc21zY2hhcl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1 bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc21zY2hhcl9kZXZpY2Vf dCAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX191c2VyICp1 cCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKworCWlmICghZGV2LT5jb3JlZGV2 IHx8ICFkZXYtPnNtc2NsaWVudCkgeworCQlzbXNfZXJyKCJubyBjbGllbnRc biIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzd2l0Y2ggKGNtZCkg eworCWNhc2UgU01TQ0hBUl9TRVRfREVWSUNFX01PREU6CisJCXJldHVybiBz bXNjb3JlX3NldF9kZXZpY2VfbW9kZShkZXYtPmNvcmVkZXYsIChpbnQpYXJn KTsKKworCWNhc2UgU01TQ0hBUl9HRVRfREVWSUNFX01PREU6CisJCXsKKwkJ CWlmIChwdXRfdXNlcihzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShkZXYtPmNv cmVkZXYpLAorCQkJCSAgICAgKGludCAqKXVwKSkKKwkJCQlyZXR1cm4gLUVG QVVMVDsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBTTVNDSEFSX0lTX0RFVklD RV9QTlBfRVZFTlQ6CisJCXsKKwkJCXNtc19pbmZvKCJXYWl0aW5nIGZvciBQ blAgZXZlbnQuXG4iKTsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShn X3BucF9ldmVudCwKKwkJCQkJCSAhZ19wbnBfc3RhdHVzX2NoYW5nZWQpOwor CQkJZ19wbnBfc3RhdHVzX2NoYW5nZWQgPSAwOworCQkJc21zX2luZm8oIlBu UCBFdmVudCAlZC5cbiIsIGdfc21zY2hhcl9pbnVzZSk7CisJCQlpZiAocHV0 X3VzZXIoZ19zbXNjaGFyX2ludXNlLCAoaW50ICopdXApKQorCQkJCXJldHVy biAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwljYXNlIFNNU0NIQVJfR0VU X0JVRkZFUl9TSVpFOgorCQl7CisJCQlpZiAocHV0X3VzZXIKKwkJCSAgICAo c21zY29yZV9nZXRfY29tbW9uX2J1ZmZlcl9zaXplKGRldi0+Y29yZWRldiks CisJCQkgICAgIChpbnQgKil1cCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisK KwkJCWJyZWFrOworCQl9CisKKwljYXNlIFNNU0NIQVJfV0FJVF9HRVRfQlVG RkVSOgorCQl7CisJCQlzdHJ1Y3Qgc21zY2hhcl9idWZmZXJfdCB0b3VzZXI7 CisJCQlpbnQgcmM7CisKKwkJCXJjID0gc21zY2hhcl93YWl0X2dldF9idWZm ZXIoZGV2LCAmdG91c2VyKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJu IHJjOworCisJCQlpZiAoY29weV90b191c2VyKHVwLCAmdG91c2VyLAorCQkJ CQkgc2l6ZW9mKHN0cnVjdCBzbXNjaGFyX2J1ZmZlcl90KSkpCisJCQkJcmV0 dXJuIC1FRkFVTFQ7CisKKwkJCWJyZWFrOworCQl9CisJY2FzZSBTTVNDSEFS X0NBTkNFTF9XQUlUX0JVRkZFUjoKKwkJeworCQkJZGV2LT5jYW5jZWxfd2Fp dHEgPSAxOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRx KTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBTTVNDSEFSX0dFVF9GV19GSUxF X05BTUU6CisJCXsKKwkJCWlmICghdXApCisJCQkJcmV0dXJuIC1FSU5WQUw7 CisJCQlyZXR1cm4gc21zY29yZV9nZXRfZndfZmlsZW5hbWUoZGV2LT5jb3Jl ZGV2LAorCQkJCSAgICAgICAoKHN0cnVjdAorCQkJCQkgc21zY2hhcl9nZXRf ZndfZmlsZW5hbWVfaW9jdGxfdAorCQkJCQkgKil1cCktPm1vZGUsCisJCQkJ ICAgICAgICgoc3RydWN0CisJCQkJCSBzbXNjaGFyX2dldF9md19maWxlbmFt ZV9pb2N0bF90CisJCQkJCSAqKXVwKS0+ZmlsZW5hbWUpOworCQl9CisJY2Fz ZSBTTVNDSEFSX1NFTkRfRldfRklMRToKKwkJeworCQkJaWYgKCF1cCkKKwkJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiBzbXNjb3JlX3NlbmRfZndf ZmlsZShkZXYtPmNvcmVkZXYsCisJCQkJCSgoc3RydWN0CisJCQkJCXNtc2No YXJfc2VuZF9md19maWxlX2lvY3RsX3QKKwkJCQkJKil1cCktPmZ3X2J1ZiwK KwkJCQkJKChzdHJ1Y3QKKwkJCQkJc21zY2hhcl9zZW5kX2Z3X2ZpbGVfaW9j dGxfdAorCQkJCQkqKXVwKS0+Zndfc2l6ZSk7CisJCX0KKworCWRlZmF1bHQ6 CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgc21zY2hhcl9mb3BzID0gewor CS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gc21zY2hhcl9yZWFk LAorCS53cml0ZSA9IHNtc2NoYXJfd3JpdGUsCisJLm9wZW4gPSBzbXNjaGFy X29wZW4sCisJLnJlbGVhc2UgPSBzbXNjaGFyX3JlbGVhc2UsCisJLm1tYXAg PSBzbXNjaGFyX21tYXAsCisJLnBvbGwgPSBzbXNjaGFyX3BvbGwsCisJLmlv Y3RsID0gc21zY2hhcl9pb2N0bCwKK307CisKK3N0YXRpYyBpbnQgc21zY2hh cl9zZXR1cF9jZGV2KHN0cnVjdCBzbXNjaGFyX2RldmljZV90ICpkZXYsIGlu dCBpbmRleCkKK3sKKwlpbnQgcmMsIGRldm5vID0gTUtERVYoc21zY2hhcl9t YWpvciwgc21zY2hhcl9taW5vciArIGluZGV4KTsKKworCWNkZXZfaW5pdCgm ZGV2LT5jZGV2LCAmc21zY2hhcl9mb3BzKTsKKworCWRldi0+Y2Rldi5vd25l ciA9IFRISVNfTU9EVUxFOworCWRldi0+Y2Rldi5vcHMgPSAmc21zY2hhcl9m b3BzOworCisJa29iamVjdF9zZXRfbmFtZSgmZGV2LT5jZGV2LmtvYmosICJT aWFub19zbXMlZCIsIGluZGV4KTsKKwlyYyA9IGNkZXZfYWRkKCZkZXYtPmNk ZXYsIGRldm5vLCAxKTsKKwlzbXNfaW5mbygiZXhpdGluZyAlcCAlZCwgcmMg JWQiLCBkZXYsIGluZGV4LCByYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8q KgorICogc21zY2hhciBjYWxsYmFjayB0aGF0IGNhbGxlZCB3aGVuIGRldmlj ZSBwbHVnZ2VkIGluL291dC4gdGhlIGZ1bmN0aW9uCisgKiByZWdpc3RlciBv ciB1bnJlZ2lzdGVycyBjaGFyIGRldmljZSBpbnRlcmZhY2UgYWNjb3JkaW5n IHRvIHBsdWcgaW4vb3V0CisgKgorICogQHBhcmFtIGNvcmVkZXYgcG9pbnRl ciB0byBkZXZpY2UgdGhhdCBpcyBiZWluZyBwbHVnZ2VkIGluL291dAorICog QHBhcmFtIGRldmljZSBwb2ludGVyIHRvIHN5c3RlbSBkZXZpY2Ugb2JqZWN0 CisgKiBAcGFyYW0gYXJyaXZhbCAxIG9uIHBsdWctb24sIDAgb3RoZXdpc2UK KyAqCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IuCisg Ki8KK3N0YXRpYyBpbnQgc21zY2hhcl9ob3RwbHVnKHN0cnVjdCBzbXNjb3Jl X2RldmljZV90ICpjb3JlZGV2LAorCQkJICAgc3RydWN0IGRldmljZSAqZGV2 aWNlLCBpbnQgYXJyaXZhbCkKK3sKKwlpbnQgcmMgPSAwLCBpOworCisJc21z X2luZm8oImVudGVyaW5nICVkXG4iLCBhcnJpdmFsKTsKKworCWdfcG5wX3N0 YXR1c19jaGFuZ2VkID0gMTsKKwlpZiAoYXJyaXZhbCkgeworCQkvKiBjdXJy ZW50bHkgb25seSAxIGluc3RhbmNlIHN1cHBvcnRlZCAqLworCQlpZiAoIWdf c21zY2hhcl9pbnVzZSkgeworCQkJLyogZGF0YSBub3RpZmljYXRpb24gY2Fs bGJhY2tzIGFzc2lnbm1lbnQgKi8KKwkJCW1lbXNldChzbXNjaGFyX2Rldmlj ZXMsIDAsIFNNU0NIQVJfTlJfREVWUyAqCisJCQkgICAgICAgc2l6ZW9mKHN0 cnVjdCBzbXNjaGFyX2RldmljZV90KSk7CisKKwkJCS8qIEluaXRpYWxpemUg ZWFjaCBkZXZpY2UuICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU01TQ0hBUl9O Ul9ERVZTOyBpKyspIHsKKwkJCQlzbXNfaW5mbygiY3JlYXRlIGRldmljZSAl ZCIsIGkpOworCQkJCXNtc2NoYXJfc2V0dXBfY2Rldigmc21zY2hhcl9kZXZp Y2VzW2ldLCBpKTsKKwkJCQlJTklUX0xJU1RfSEVBRCgmc21zY2hhcl9kZXZp Y2VzW2ldLgorCQkJCQkgICAgICAgcGVuZGluZ19kYXRhKTsKKwkJCQlzcGlu X2xvY2tfaW5pdCgmc21zY2hhcl9kZXZpY2VzW2ldLmxvY2spOworCQkJCWlu aXRfd2FpdHF1ZXVlX2hlYWQoJnNtc2NoYXJfZGV2aWNlc1tpXS53YWl0cSk7 CisKKwkJCQlzbXNjaGFyX2RldmljZXNbaV0uY29yZWRldiA9IGNvcmVkZXY7 CisJCQkJc21zY2hhcl9kZXZpY2VzW2ldLmRldmljZV9pbmRleCA9IGk7CisJ CQl9CisJCQlnX3Ntc2NoYXJfaW51c2UgPSAxOworCQkJd2FrZV91cF9pbnRl cnJ1cHRpYmxlKCZnX3BucF9ldmVudCk7CisJCX0KKwl9IGVsc2UgeworCQkv KiBjdXJyZW50bHkgb25seSAxIGluc3RhbmNlIHN1cHBvcnRlZCAqLworCQlp ZiAoZ19zbXNjaGFyX2ludXNlKSB7CisJCQkvKiBHZXQgcmlkIG9mIG91ciBj aGFyIGRldiBlbnRyaWVzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU01TQ0hB Ul9OUl9ERVZTOyBpKyspIHsKKwkJCQljZGV2X2RlbCgmc21zY2hhcl9kZXZp Y2VzW2ldLmNkZXYpOworCQkJCXNtc19pbmZvKCJyZW1vdmUgZGV2aWNlICVk XG4iLCBpKTsKKwkJCX0KKworCQkJZ19zbXNjaGFyX2ludXNlID0gMDsKKwkJ CXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ19wbnBfZXZlbnQpOworCQl9CisJ fQorCisJc21zX2luZm8oImV4aXRpbmcsIHJjICVkXG4iLCByYyk7CisKKwly ZXR1cm4gcmM7CQkvKiBzdWNjZWVkICovCit9CisKK2ludCBzbXNjaGFyX3Jl Z2lzdGVyKHZvaWQpCit7CisJZGV2X3QgZGV2bm8gPSBNS0RFVihzbXNjaGFy X21ham9yLCBzbXNjaGFyX21pbm9yKTsKKwlpbnQgcmM7CisKKwlzbXNfaW5m bygicmVnaXN0ZXJpbmcgZGV2aWNlIG1ham9yPSVkIG1pbm9yPSVkXG4iLCBz bXNjaGFyX21ham9yLAorCQkgc21zY2hhcl9taW5vcik7CisJaWYgKHNtc2No YXJfbWFqb3IpIHsKKwkJcmMgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRl dm5vLCBTTVNDSEFSX05SX0RFVlMsICJzbXNjaGFyIik7CisJfSBlbHNlIHsK KwkJcmMgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXZubywgc21zY2hhcl9t aW5vciwKKwkJCQkJIFNNU0NIQVJfTlJfREVWUywgInNtc2NoYXIiKTsKKwkJ c21zY2hhcl9tYWpvciA9IE1BSk9SKGRldm5vKTsKKwl9CisKKwlpZiAocmMg PCAwKSB7CisJCXNtc193YXJuKCJzbXNjaGFyOiBjYW4ndCBnZXQgbWFqb3Ig JWRcbiIsIHNtc2NoYXJfbWFqb3IpOworCQlyZXR1cm4gcmM7CisJfQorCWlu aXRfd2FpdHF1ZXVlX2hlYWQoJmdfcG5wX2V2ZW50KTsKKworCXJldHVybiBz bXNjb3JlX3JlZ2lzdGVyX2hvdHBsdWcoc21zY2hhcl9ob3RwbHVnKTsKK30K Kwordm9pZCBzbXNjaGFyX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlkZXZfdCBk ZXZubyA9IE1LREVWKHNtc2NoYXJfbWFqb3IsIHNtc2NoYXJfbWlub3IpOwor CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldm5vLCBTTVNDSEFSX05S X0RFVlMpOworCXNtc2NvcmVfdW5yZWdpc3Rlcl9ob3RwbHVnKHNtc2NoYXJf aG90cGx1Zyk7CisJc21zX2luZm8oInVucmVnaXN0ZXJlZFxuIik7Cit9CmRp ZmYgLXVOciB2NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2ZXJzL21l ZGlhL2R2Yi9zaWFuby9zbXNjaGFyaW9jdGwuaCB2NGwtZHZiLWM1Zjk3NmNh YjAxMV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2No YXJpb2N0bC5oCi0tLSB2NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2 ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjaGFyaW9jdGwuaAkxOTcwLTAxLTAx IDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgdjRsLWR2Yi1jNWY5NzZj YWIwMTFfMDAwMy9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNj aGFyaW9jdGwuaAkyMDA4LTExLTE5IDE0OjIxOjM0LjAwMDAwMDAwMCArMDIw MApAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitT aWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgorTURUViByZWNlaXZlciBrZXJu ZWwgbW9kdWxlcy4KK0NvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBVcmkgU2hr b2xuaWsKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK K1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TTVNfQ0hB Ul9JT0NUTF9IX18KKyNkZWZpbmUgX19TTVNfQ0hBUl9JT0NUTF9IX18KKwor I2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKK3N0cnVjdCBzbXNjaGFyX2J1 ZmZlcl90IHsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsJLyogb2Zmc2V0IGlu IGNvbW1vbiBidWZmZXIgKG1hcHBlZCB0byB1c2VyKSAqLworCWludCBzaXpl OworfTsKKworc3RydWN0IHNtc2NoYXJfZ2V0X2Z3X2ZpbGVuYW1lX2lvY3Rs X3QgeworCWludCBtb2RlOworCWNoYXIgZmlsZW5hbWVbMjAwXTsKK307CisK K3N0cnVjdCBzbXNjaGFyX3NlbmRfZndfZmlsZV9pb2N0bF90IHsKKwljaGFy ICpmd19idWY7CisJaW50IGZ3X3NpemU7Cit9OworCisjZGVmaW5lIFNNU0NI QVJfU0VUX0RFVklDRV9NT0RFCQlfSU9XKCdLJywgMCwgaW50KQorI2RlZmlu ZSBTTVNDSEFSX0dFVF9ERVZJQ0VfTU9ERQkJX0lPUignSycsIDEsIGludCkK KyNkZWZpbmUgU01TQ0hBUl9HRVRfQlVGRkVSX1NJWkUJCV9JT1IoJ0snLCAy LCBpbnQpCisjZGVmaW5lIFNNU0NIQVJfV0FJVF9HRVRfQlVGRkVSCQlfSU9S KCdLJywgMywgc3RydWN0IHNtc2NoYXJfYnVmZmVyX3QpCisjZGVmaW5lIFNN U0NIQVJfSVNfREVWSUNFX1BOUF9FVkVOVCAJX0lPUignSycsIDQsIGludCkK KyNkZWZpbmUgU01TQ0hBUl9HRVRfRldfRklMRV9OQU1FCVwKKwlfSU9XUign SycsIDUsIHN0cnVjdCBzbXNjaGFyX2dldF9md19maWxlbmFtZV9pb2N0bF90 KQorI2RlZmluZSBTTVNDSEFSX1NFTkRfRldfRklMRQkJXAorCV9JT1coJ0sn LCA2LCBzdHJ1Y3Qgc21zY2hhcl9zZW5kX2Z3X2ZpbGVfaW9jdGxfdCkKKyNk ZWZpbmUgU01TQ0hBUl9DQU5DRUxfV0FJVF9CVUZGRVIJX0lPKCdLJywgNykK KworI2VuZGlmIC8qIF9fU01TX0NIQVJfSU9DVExfSF9fICovCmRpZmYgLXVO ciB2NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2ZXJzL21lZGlhL2R2 Yi9zaWFuby9zbXNuZXQuYyB2NGwtZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xp bnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc25ldC5jCi0tLSB2NGwt ZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFu by9zbXNuZXQuYwkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIw MAorKysgdjRsLWR2Yi1jNWY5NzZjYWIwMTFfMDAwMy9saW51eC9kcml2ZXJz L21lZGlhL2R2Yi9zaWFuby9zbXNuZXQuYwkyMDA4LTExLTE5IDE0OjIxOjMy LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDQ1NSBAQAorLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKworU2lhbm8gTW9iaWxlIFNpbGljb24sIEluYy4KK01E VFYgcmVjZWl2ZXIga2VybmVsIG1vZHVsZXMuCitDb3B5cmlnaHQgKEMpIDIw MDYtMjAwOCwgVXJpIFNoa29sbmlrCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK KyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CS8qIHN0cnVj dCBkZXZpY2UsIGFuZCBvdGhlciBoZWFkZXJzICovCisjaW5jbHVkZSA8bGlu dXgvZXRoZXJkZXZpY2UuaD4JLyogZXRoX3R5cGVfdHJhbnMgKi8KKyNpbmNs dWRlIDxsaW51eC9pcC5oPgkJLyogc3RydWN0IGlwaGRyICovCisjaW5jbHVk ZSA8bGludXgvaXB2Ni5oPgkJLyogc3RydWN0IGlwdjZoZHIgKi8KKyNpbmNs dWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSAic21zY29yZWFwaS5oIgor CisjZGVmaW5lIElQVjRWRVJTSU9OCQkJMHg0MAorI2RlZmluZSBJUFY2VkVS U0lPTgkJCTB4NjAKKyNkZWZpbmUgR0VUSVBWRVJTSU9OKF94XykJKChfeF8p ICYgMHhmMCkKKworc3RydWN0IHNtc25ldF9jbGllbnRfdCB7CisJc3RydWN0 IGxpc3RfaGVhZCBlbnRyeTsKKworCXN0cnVjdCBzbXNjb3JlX2RldmljZV90 ICpjb3JlZGV2OworCXN0cnVjdCBzbXNjb3JlX2NsaWVudF90ICpzbXNjbGll bnQ7CisKKwlpbnQgcGFja2V0X2xlbmd0aCwgc3BsaXRwYWNrZXRfbGVuZ3Ro OworCWludCBoZWFkZXJfbGVuZ3RoLCBzcGxpdGhlYWRlcl9sZW5ndGg7CisJ dTggc3BsaXRwYWNrZXRbRVRIX0RBVEFfTEVOXTsKK307CisKK3N0cnVjdCBs aXN0X2hlYWQgZ19zbXNuZXRfY2xpZW50czsKK3N0cnVjdCBtdXRleCBnX3Nt c25ldF9jbGllbnRzbG9jazsKKworc3RydWN0IG5ldF9kZXZpY2UgKmdfc21z bmV0X2RldmljZTsKK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGdfc21zbmV0 X3N0YXRzOworCitpbnQgZ19zbXNuZXRfaW51c2U7CisKK3ZvaWQgc21zbmV0 X3NlbmRfcGFja2V0KHU4ICpidWZmZXIsIGludCBsZW5ndGgpCit7CisJdTgg KmV0aDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYihs ZW5ndGggKyBFVEhfSExFTiArIE5FVF9JUF9BTElHTik7CisKKwlpZiAoIXNr YikgeworCQlnX3Ntc25ldF9zdGF0cy5yeF9kcm9wcGVkKys7CisJCXJldHVy bjsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisK KwlldGggPSAodTggKikgc2tiX3B1dChza2IsIGxlbmd0aCArIEVUSF9ITEVO KTsKKwltZW1jcHkoZXRoICsgRVRIX0hMRU4sIGJ1ZmZlciwgbGVuZ3RoKTsK KworCWV0aFs2XSA9IDA7CisJZXRoWzddID0gMTsKKwlldGhbOF0gPSAxOwor CWV0aFs5XSA9IDM7CisJZXRoWzEwXSA9IDQ7CisJZXRoWzExXSA9IDU7CisK KwlpZiAoR0VUSVBWRVJTSU9OKCpidWZmZXIpID09IElQVjRWRVJTSU9OKSB7 CisJCWV0aFswXSA9IDE7CisJCWV0aFsxXSA9IDA7CisJCWV0aFsyXSA9IDB4 NWU7CisJCWV0aFszXSA9IGJ1ZmZlclsxN10gJiAweDdmOworCQlldGhbNF0g PSBidWZmZXJbMThdOworCQlldGhbNV0gPSBidWZmZXJbMTldOworCisJCWV0 aFsxMl0gPSAweDA4OworCQlldGhbMTNdID0gMHgwMDsKKwl9IGVsc2Ugewor CQkvKiBpcDYgbWNhc3QgYWRkcmVzcyAqLworCQlldGhbMF0gPSAweDMzOwor CQlldGhbMV0gPSAweDMzOworCQlldGhbMl0gPSBidWZmZXJbMzZdOworCQll dGhbM10gPSBidWZmZXJbMzddOworCQlldGhbNF0gPSBidWZmZXJbMzhdOwor CQlldGhbNV0gPSBidWZmZXJbMzldOworCisJCWV0aFsxMl0gPSAweDg2Owor CQlldGhbMTNdID0gMHhkZDsKKwl9CisKKwlza2ItPmRldiA9IGdfc21zbmV0 X2RldmljZTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2ti LCBnX3Ntc25ldF9kZXZpY2UpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tT VU1fQ09NUExFVEU7CisKKwlnX3Ntc25ldF9zdGF0cy5yeF9wYWNrZXRzKys7 CisJZ19zbXNuZXRfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwlu ZXRpZl9yeChza2IpOworfQorCitpbnQgY2hlY2tfaGVhZGVyKHN0cnVjdCBz bXNuZXRfY2xpZW50X3QgKmNsaWVudCwgdTggKmJ1ZmZlcikKK3sKKwlzdHJ1 Y3QgaXBoZHIgKmlwNF9oZHI7CisJc3RydWN0IGlwdjZoZHIgKmlwNl9oZHI7 CisJc3RydWN0IHVkcGhkciAqdWRwX2hkcjsKKwl1MTYgY3N1bTsKKworCS8q IGNoZWNrIGlmIHBhY2tldCBoZWFkZXIgaXMgdmFsaWQgYW5kIGl0IGlzIGEg VURQICovCisJaWYgKEdFVElQVkVSU0lPTigqYnVmZmVyKSA9PSBJUFY0VkVS U0lPTikgeworCQlpcDRfaGRyID0gKHN0cnVjdCBpcGhkciAqKWJ1ZmZlcjsK KwkJY3N1bSA9IGlwNF9oZHItPmNoZWNrOworCisJCWlwNF9oZHItPmNoZWNr ID0gMDsKKworCQkvKiBjaGVjayBoZWFkZXIgY2hlY2tzdW0gZm9yIElQdjQg cGFja2V0cyAqLworCQlpZiAoaXA0X2hkci0+cHJvdG9jb2wgIT0gSVBQUk9U T19VRFAgfHwgY3N1bSAhPQorCQkgICAgaXBfZmFzdF9jc3VtKGJ1ZmZlciwg aXA0X2hkci0+aWhsKSkgeworCQkJaXA0X2hkci0+Y2hlY2sgPSBjc3VtOwor CQkJcmV0dXJuIDA7CisJCX0KKworCQlpcDRfaGRyLT5jaGVjayA9IGNzdW07 CisJCWNsaWVudC0+cGFja2V0X2xlbmd0aCA9IG50b2hzKGlwNF9oZHItPnRv dF9sZW4pOworCX0gZWxzZSB7CisJCWlwNl9oZHIgPSAoc3RydWN0IGlwdjZo ZHIgKilidWZmZXI7CisJCXVkcF9oZHIgPSAoc3RydWN0IHVkcGhkciAqKShp cDZfaGRyICsgMSk7CisKKwkJaWYgKChpcDZfaGRyLT5uZXh0aGRyICE9IElQ UFJPVE9fVURQKSB8fAorCQkgICAgKGlwNl9oZHItPnBheWxvYWRfbGVuICE9 IHVkcF9oZHItPmxlbikpCisJCQlyZXR1cm4gMDsKKworCQljbGllbnQtPnBh Y2tldF9sZW5ndGggPSBudG9ocyhpcDZfaGRyLT5wYXlsb2FkX2xlbikgKwor CQkgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwl9CisKKwkvKiBjaGVj ayBmb3IgYWJub3JtYWwgcGFja2V0IGxlbmd0aCAqLworCWlmIChjbGllbnQt PnBhY2tldF9sZW5ndGggPiBFVEhfREFUQV9MRU4pCisJCXJldHVybiAwOwor CisJcmV0dXJuIDE7Cit9CisKK2ludCBzbXNuZXRfb25yZXNwb25zZSh2b2lk ICpjb250ZXh0LCBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpCit7CisJ c3RydWN0IHNtc25ldF9jbGllbnRfdCAqY2xpZW50ID0gKHN0cnVjdCBzbXNu ZXRfY2xpZW50X3QgKiljb250ZXh0OworCWludCBsZW5ndGgsIHJlc3Q7CisJ dTggaXBfdmVyLCAqYnVmZmVyOworCisJYnVmZmVyID0gKCh1OCAqKSBjYi0+ cCkgKyBjYi0+b2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBTbXNNc2dIZHJfU1Qp OworCWxlbmd0aCA9IGNiLT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBTbXNNc2dI ZHJfU1QpOworCisJaWYgKGNsaWVudC0+c3BsaXRoZWFkZXJfbGVuZ3RoKSB7 CisJCS8qIGhvdyBtdWNoIGRhdGEgaXMgbWlzc2luZyA/ICovCisJCXJlc3Qg PSBjbGllbnQtPmhlYWRlcl9sZW5ndGggLSBjbGllbnQtPnNwbGl0aGVhZGVy X2xlbmd0aDsKKworCQkvKiBkbyB3ZSBoYXZlIGVub3VnaCBpbiB0aGlzIGJ1 ZmZlciA/ICovCisJCXJlc3QgPSBtaW4ocmVzdCwgbGVuZ3RoKTsKKworCQlt ZW1jcHkoJmNsaWVudC0+c3BsaXRwYWNrZXRbY2xpZW50LT5zcGxpdGhlYWRl cl9sZW5ndGhdLAorCQkgICAgICAgYnVmZmVyLCByZXN0KTsKKworCQljbGll bnQtPnNwbGl0aGVhZGVyX2xlbmd0aCArPSByZXN0OworCisJCWlmIChjbGll bnQtPnNwbGl0aGVhZGVyX2xlbmd0aCAhPSBjbGllbnQtPmhlYWRlcl9sZW5n dGgpCisJCQlnb3RvIGV4aXQ7CisKKwkJaWYgKGNoZWNrX2hlYWRlcihjbGll bnQsIGNsaWVudC0+c3BsaXRwYWNrZXQpKSB7CisJCQlidWZmZXIgKz0gcmVz dDsKKwkJCWxlbmd0aCAtPSByZXN0OworCisJCQljbGllbnQtPnNwbGl0cGFj a2V0X2xlbmd0aCA9IGNsaWVudC0+aGVhZGVyX2xlbmd0aDsKKwkJfQorCisJ CWNsaWVudC0+c3BsaXRoZWFkZXJfbGVuZ3RoID0gMDsKKwl9CisKKwlpZiAo Y2xpZW50LT5zcGxpdHBhY2tldF9sZW5ndGgpIHsKKwkJLyogaG93IG11Y2gg ZGF0YSBpcyBtaXNzaW5nID8gKi8KKwkJcmVzdCA9IGNsaWVudC0+cGFja2V0 X2xlbmd0aCAtIGNsaWVudC0+c3BsaXRwYWNrZXRfbGVuZ3RoOworCisJCS8q IGRvIHdlIGhhdmUgZW5vdWdoIGluIHRoaXMgYnVmZmVyID8gKi8KKwkJcmVz dCA9IG1pbihyZXN0LCBsZW5ndGgpOworCisJCW1lbWNweSgmY2xpZW50LT5z cGxpdHBhY2tldFtjbGllbnQtPnNwbGl0cGFja2V0X2xlbmd0aF0sCisJCSAg ICAgICBidWZmZXIsIHJlc3QpOworCisJCWNsaWVudC0+c3BsaXRwYWNrZXRf bGVuZ3RoICs9IHJlc3Q7CisKKwkJaWYgKGNsaWVudC0+c3BsaXRwYWNrZXRf bGVuZ3RoICE9IGNsaWVudC0+cGFja2V0X2xlbmd0aCkKKwkJCWdvdG8gZXhp dDsKKworCQljbGllbnQtPnNwbGl0cGFja2V0X2xlbmd0aCA9IDA7CisKKwkJ c21zbmV0X3NlbmRfcGFja2V0KGNsaWVudC0+c3BsaXRwYWNrZXQsIGNsaWVu dC0+cGFja2V0X2xlbmd0aCk7CisKKwkJYnVmZmVyICs9IHJlc3Q7CisJCWxl bmd0aCAtPSByZXN0OworCX0KKworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJ CWlwX3ZlciA9IEdFVElQVkVSU0lPTigqYnVmZmVyKTsKKwkJd2hpbGUgKGxl bmd0aCAmJiAoaXBfdmVyICE9IElQVjRWRVJTSU9OKSAmJgorCQkgICAgICAg KGlwX3ZlciAhPSBJUFY2VkVSU0lPTikpIHsKKwkJCWJ1ZmZlcisrOworCQkJ bGVuZ3RoLS07CisJCQlpcF92ZXIgPSBHRVRJUFZFUlNJT04oKmJ1ZmZlcik7 CisJCX0KKworCQkvKiBObyBtb3JlIGRhdGEgaW4gc2VjdGlvbiAqLworCQlp ZiAoIWxlbmd0aCkKKwkJCWJyZWFrOworCisJCS8qIFNldCB0aGUgaGVhZGVy IGxlbmd0aCBhdCBzdGFydCBvZiBwYWNrZXQgYWNjb3JkaW5nCisJCSAgIHRv IHRoZSB2ZXJzaW9uIG5vIHByb2JsZW0gd2l0aCB0aGUgSVAgaGVhZGVyIGNh c3QsIHNpbmNlCisJCSAgIHdlIGhhdmUgYXQgbGVhc3QgMSBieXRlICh3ZSB1 c2Ugb25seSB0aGUgZmlyc3QgYnl0ZSkgKi8KKwkJY2xpZW50LT5oZWFkZXJf bGVuZ3RoID0KKwkJICAgIChpcF92ZXIgPT0gSVBWNFZFUlNJT04pID8KKwkJ ICAgICgoKHN0cnVjdCBpcGhkciAqKWJ1ZmZlciktPmlobCAqIDQpIDoKKwkJ ICAgIChzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB1 ZHBoZHIpKTsKKworCQkvKkNoZWNrIHRoYXQgSGVhZGVyIGxlbmd0aCBpcyBh dCBsZWFzdCAyMCAobWluIElQdjQgbGVuZ3RoKSAqLworCQlpZiAoY2xpZW50 LT5oZWFkZXJfbGVuZ3RoIDwgMjApIHsKKwkJCWxlbmd0aC0tOworCQkJYnVm ZmVyKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGNoZWNrIHNwbGl0 IGhlYWRlciBjYXNlICovCisJCWlmIChjbGllbnQtPmhlYWRlcl9sZW5ndGgg PiBsZW5ndGgpIHsKKwkJCW1lbWNweShjbGllbnQtPnNwbGl0cGFja2V0LCBi dWZmZXIsIGxlbmd0aCk7CisJCQljbGllbnQtPnNwbGl0aGVhZGVyX2xlbmd0 aCA9IGxlbmd0aDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNoZWNrX2hl YWRlcihjbGllbnQsIGJ1ZmZlcikpIHsKKwkJCS8qIGNoZWNrIHNwbGl0IHBh Y2tldCBjYXNlICovCisJCQlpZiAoY2xpZW50LT5wYWNrZXRfbGVuZ3RoID4g bGVuZ3RoKSB7CisJCQkJbWVtY3B5KGNsaWVudC0+c3BsaXRwYWNrZXQsIGJ1 ZmZlciwgbGVuZ3RoKTsKKwkJCQljbGllbnQtPnNwbGl0cGFja2V0X2xlbmd0 aCA9IGxlbmd0aDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ CWxlbmd0aC0tOworCQkJYnVmZmVyKys7CisJCQljb250aW51ZTsKKwkJfQor CisJCXNtc25ldF9zZW5kX3BhY2tldChidWZmZXIsIGNsaWVudC0+cGFja2V0 X2xlbmd0aCk7CisKKwkJYnVmZmVyICs9IGNsaWVudC0+cGFja2V0X2xlbmd0 aDsKKwkJbGVuZ3RoIC09IGNsaWVudC0+cGFja2V0X2xlbmd0aDsKKwl9CisK K2V4aXQ6CisJc21zY29yZV9wdXRidWZmZXIoY2xpZW50LT5jb3JlZGV2LCBj Yik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzbXNuZXRfdW5yZWdpc3Rl cl9jbGllbnQoc3RydWN0IHNtc25ldF9jbGllbnRfdCAqY2xpZW50KQorewor CS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGNsaWVudHNsb2NrICovCisKKwls aXN0X2RlbCgmY2xpZW50LT5lbnRyeSk7CisKKwlzbXNjb3JlX3VucmVnaXN0 ZXJfY2xpZW50KGNsaWVudC0+c21zY2xpZW50KTsKKwlrZnJlZShjbGllbnQp OworfQorCit2b2lkIHNtc25ldF9vbnJlbW92ZSh2b2lkICpjb250ZXh0KQor eworCWttdXRleF9sb2NrKCZnX3Ntc25ldF9jbGllbnRzbG9jayk7CisKKwlz bXNuZXRfdW5yZWdpc3Rlcl9jbGllbnQoKHN0cnVjdCBzbXNuZXRfY2xpZW50 X3QgKiljb250ZXh0KTsKKworCWttdXRleF91bmxvY2soJmdfc21zbmV0X2Ns aWVudHNsb2NrKTsKK30KKworaW50IHNtc25ldF9ob3RwbHVnKHN0cnVjdCBz bXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXZp Y2UsCisJCSAgIGludCBhcnJpdmFsKQoreworCXN0cnVjdCBzbXNjbGllbnRf cGFyYW1zX3QgcGFyYW1zOworCXN0cnVjdCBzbXNuZXRfY2xpZW50X3QgKmNs aWVudDsKKwlpbnQgcmM7CisKKwkvKiBkZXZpY2UgcmVtb3ZhbCBoYW5kbGVk IGJ5IG9ucmVtb3ZlIGNhbGxiYWNrICovCisJaWYgKCFhcnJpdmFsKQorCQly ZXR1cm4gMDsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBz bXNuZXRfY2xpZW50X3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaWVudCkg eworCQlwcmludGsoS0VSTl9JTkZPICIlcyBrbWFsbG9jKCkgZmFpbGVkXG4i LCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBhcmFt cy5pbml0aWFsX2lkID0gMTsKKwlwYXJhbXMuZGF0YV90eXBlID0gTVNHX1NN U19EQVRBX01TRzsKKwlwYXJhbXMub25yZXNwb25zZV9oYW5kbGVyID0gc21z bmV0X29ucmVzcG9uc2U7CisJcGFyYW1zLm9ucmVtb3ZlX2hhbmRsZXIgPSBz bXNuZXRfb25yZW1vdmU7CisJcGFyYW1zLmNvbnRleHQgPSBjbGllbnQ7CisK KwlyYyA9IHNtc2NvcmVfcmVnaXN0ZXJfY2xpZW50KGNvcmVkZXYsICZwYXJh bXMsICZjbGllbnQtPnNtc2NsaWVudCk7CisJaWYgKHJjIDwgMCkgeworCQlw cmludGsoS0VSTl9JTkZPICIlcyBzbXNjb3JlX3JlZ2lzdGVyX2NsaWVudCgp IGZhaWxlZCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCByYyk7CisJCWtm cmVlKGNsaWVudCk7CisJCXJldHVybiByYzsKKwl9CisKKwljbGllbnQtPmNv cmVkZXYgPSBjb3JlZGV2OworCisJa211dGV4X2xvY2soJmdfc21zbmV0X2Ns aWVudHNsb2NrKTsKKworCWxpc3RfYWRkKCZjbGllbnQtPmVudHJ5LCAmZ19z bXNuZXRfY2xpZW50cyk7CisKKwlrbXV0ZXhfdW5sb2NrKCZnX3Ntc25ldF9j bGllbnRzbG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcyBzdWNjZXNz XG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzbXNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWdf c21zbmV0X2ludXNlKys7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwor CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMsICVkXG4iLCBfX2Z1bmNfXywgZ19z bXNuZXRfaW51c2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c21zbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwluZXRp Zl9zdG9wX3F1ZXVlKGRldik7CisKKwlnX3Ntc25ldF9pbnVzZS0tOworCisJ cHJpbnRrKEtFUk5fSU5GTyAiJXMsICVkXG4iLCBfX2Z1bmNfXywgZ19zbXNu ZXRfaW51c2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21z bmV0X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXByaW50ayhLRVJOX0lORk8gIiVz XG4iLCBfX2Z1bmNfXyk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVy biAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNt c25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwly ZXR1cm4gJmdfc21zbmV0X3N0YXRzOworfQorCitzdGF0aWMgdm9pZCBzbXNu ZXRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp Cit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWRcbiIsIF9fZnVuY19fLCBk ZXYtPm1jX2NvdW50KTsKKwlpZiAoZGV2LT5tY19jb3VudCkgeworCQlzdHJ1 Y3QgZGV2X21jX2xpc3QgKnA7CisKKwkJZm9yIChwID0gZGV2LT5tY19saXN0 OyBwOyBwID0gcC0+bmV4dCkKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSIl cyAlZCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhc biIsCisJCQlfX2Z1bmNfXywgcC0+ZG1pX2FkZHJsZW4sIHAtPmRtaV9hZGRy WzBdLAorCQkJcC0+ZG1pX2FkZHJbMV0sIHAtPmRtaV9hZGRyWzJdLAorCQkJ cC0+ZG1pX2FkZHJbM10sIHAtPmRtaV9hZGRyWzRdLAorCQkJcC0+ZG1pX2Fk ZHJbNV0sIHAtPmRtaV9hZGRyWzZdLCBwLT5kbWlfYWRkcls3XQorCQkJKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHNtc25ldF9zZXR1cF9kZXZpY2Uoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlldGhlcl9zZXR1cChkZXYpOwor CisJZGV2LT5vcGVuID0gc21zbmV0X29wZW47CisJZGV2LT5zdG9wID0gc21z bmV0X3N0b3A7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzbXNuZXRfaGFy ZF9zdGFydF94bWl0OworCWRldi0+Z2V0X3N0YXRzID0gc21zbmV0X2dldF9z dGF0czsKKwlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNtc25ldF9zZXRf bXVsdGljYXN0X2xpc3Q7CisKKwlkZXYtPm1jX2NvdW50ID0gMDsKKworCW1l bWNweShkZXYtPmRldl9hZGRyLCAiXDBTSUFOTyIsIEVUSF9BTEVOKTsKKwor CWRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVCB8IElG Rl9VUDsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKK30K KworaW50IHNtc25ldF9yZWdpc3Rlcih2b2lkKQoreworCWludCByYzsKKwor CUlOSVRfTElTVF9IRUFEKCZnX3Ntc25ldF9jbGllbnRzKTsKKwlrbXV0ZXhf aW5pdCgmZ19zbXNuZXRfY2xpZW50c2xvY2spOworCisJbWVtc2V0KCZnX3Nt c25ldF9zdGF0cywgMCwgc2l6ZW9mKGdfc21zbmV0X3N0YXRzKSk7CisKKwln X3Ntc25ldF9kZXZpY2UgPSBhbGxvY19uZXRkZXYoMCwgInNtcyIsIHNtc25l dF9zZXR1cF9kZXZpY2UpOworCWlmICghZ19zbXNuZXRfZGV2aWNlKSB7CisJ CXByaW50ayhLRVJOX0lORk8gIiVzIGFsbG9jX25ldGRldigpIGZhaWxlZFxu IiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyYyA9 IHJlZ2lzdGVyX25ldGRldihnX3Ntc25ldF9kZXZpY2UpOworCWlmIChyYyA8 IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcmVnaXN0ZXJfbmV0ZGV2 KCkgZmFpbGVkICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHJjKTsKKwkJ ZnJlZV9uZXRkZXYoZ19zbXNuZXRfZGV2aWNlKTsKKwkJcmV0dXJuIHJjOwor CX0KKworCXJjID0gc21zY29yZV9yZWdpc3Rlcl9ob3RwbHVnKHNtc25ldF9o b3RwbHVnKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzLCByYyAlZFxuIiwg X19mdW5jX18sIHJjKTsKKworCXJldHVybiByYzsKK30KKwordm9pZCBzbXNu ZXRfdW5yZWdpc3Rlcih2b2lkKQoreworCWlmIChnX3Ntc25ldF9kZXZpY2Up IHsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZ19zbXNuZXRfZGV2aWNlKTsKKwkJ ZnJlZV9uZXRkZXYoZ19zbXNuZXRfZGV2aWNlKTsKKworCQlnX3Ntc25ldF9k ZXZpY2UgPSBOVUxMOworCX0KKworCXNtc2NvcmVfdW5yZWdpc3Rlcl9ob3Rw bHVnKHNtc25ldF9ob3RwbHVnKTsKKworCWttdXRleF9sb2NrKCZnX3Ntc25l dF9jbGllbnRzbG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmdfc21z bmV0X2NsaWVudHMpKQorCQlzbXNuZXRfdW5yZWdpc3Rlcl9jbGllbnQoKHN0 cnVjdCBzbXNuZXRfY2xpZW50X3QgKikKKwkJCQkJIGdfc21zbmV0X2NsaWVu dHMubmV4dCk7CisKKwlrbXV0ZXhfdW5sb2NrKCZnX3Ntc25ldF9jbGllbnRz bG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18p OworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIlNpYW5vIE5ldHdvcmsgQ2xp ZW50IG1vZHVsZSIpOworTU9EVUxFX0FVVEhPUigiU2lhbm8gTW9iaWxlIFNp bGljb24sIEluYy4gKHVyaXNAc2lhbm8tbXMuY29tKSIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOwo= --0-1818082329-1227098434=:38943 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ linux-dvb mailing list linux-dvb@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb --0-1818082329-1227098434=:38943--