Return-path: Received: from web38806.mail.mud.yahoo.com ([209.191.125.97]) by www.linuxtv.org with smtp (Exim 4.63) (envelope-from ) id 1L2lEZ-0004yJ-QJ for linux-dvb@linuxtv.org; Wed, 19 Nov 2008 12:28:43 +0100 Date: Wed, 19 Nov 2008 03:28:01 -0800 (PST) From: Uri Shkolnik To: Linux-dvb MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-762351964-1227094081=:6524" Message-ID: <560700.6524.qm@web38806.mail.mud.yahoo.com> Subject: [linux-dvb] [PATCH 2/5] [2] SPI interface driver for Siano's SMS chip-set based devices. 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-762351964-1227094081=:6524 Content-Type: text/plain; charset=us-ascii This patch provides SPI interface driver for SMS chip-set based devices. The patch includes common SMS SPI code, and adapter driver for PXA310 Signed-off-by: Uri Shkolnik --0-762351964-1227094081=:6524 Content-Type: text/x-diff; name="smsspi_patch.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smsspi_patch.diff" VGhpcyBwYXRjaCBwcm92aWRlcyBTUEkgaW50ZXJmYWNlIGRyaXZlciBmb3Ig U01TIGNoaXAtc2V0IGJhc2VkIGRldmljZXMuClRoZSBwYXRjaCBpbmNsdWRl cyBjb21tb24gU01TIFNQSSBjb2RlLCBhbmQgYWRhcHRlciBkcml2ZXIgZm9y IFBYQTMxMAoKClNpZ25lZC1vZmYtYnk6IFVyaSBTaGtvbG5payA8dXJpc0Bz aWFuby1tcy5jb20+CgoKZGlmZiAtdU5yIHY0bC1kdmItYzVmOTc2Y2FiMDEx L2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2RiZ19wcm4uaCB2 NGwtZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVkaWEv ZHZiL3NpYW5vL3Ntc2RiZ19wcm4uaAotLS0gdjRsLWR2Yi1jNWY5NzZjYWIw MTEvbGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZGJnX3Bybi5o CTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyB2NGwt ZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZi L3NpYW5vL3Ntc2RiZ19wcm4uaAkyMDA4LTExLTE5IDEzOjI1OjEyLjAwMDAw MDAwMCArMDIwMApAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorCitTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgorTURUViByZWNl aXZlciBrZXJuZWwgbW9kdWxlcy4KK0NvcHlyaWdodCAoQykgMjAwNi0yMDA4 LCBVcmkgU2hrb2xuaWsKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRl ZiBfU01TX0RCR19IXworI2RlZmluZSBfU01TX0RCR19IXworCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWJ1ZyBa b25lcyBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKyN1bmRlZiBQRVJST1IKKyMgIGRlZmluZSBQRVJST1IoZm10LCBh cmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fRVJSICJzcGlidXMgZXJyb3I6IGxp bmUgJWQtICVzKCk6ICIgZm10LCBfX0xJTkVfXyxcCisJICBfX2Z1bmNfXywg IyMgYXJncykKKyN1bmRlZiBQV0FSTklORworIyAgZGVmaW5lIFBXQVJOSU5H KGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgInNwaWJ1 cyB3YXJuaW5nOiBsaW5lICVkLSAlcygpOiAiIGZtdCwgX19MSU5FX18sICBc CisJX19mdW5jX18sICMjIGFyZ3MpCisKKy8qIHRoZSBkZWJ1ZyBtYWNybyAt IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZyb20gdGhlIG1ha2VmaWxlICov CisjdW5kZWYgUERFQlVHCQkJLyogdW5kZWYgaXQsIGp1c3QgaW4gY2FzZSAq LworI2lmZGVmIFNQSUJVU19ERUJVRworIyAgZGVmaW5lIFBERUJVRyhmbXQs IGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyAic3BpYnVzOiBsaW5l ICVkLSAlcygpOiAiIGZtdCwgX19MSU5FX18sIFwKKwkgX19mdW5jX18sICMj IGFyZ3MpCisjZWxzZQorIyAgZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4p CS8qIG5vdCBkZWJ1Z2dpbmc6IG5vdGhpbmcgKi8KKyNlbmRpZgorCisvKiBU aGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIHVzZWQgZm9yIHByaW50aW5nIGFu ZAorYXJlIG1hbmRhdG9yeSBmb3IgY29tcGlsYXRpb24uICovCisjZGVmaW5l IFRYVChzdHIpIHN0cgorI2RlZmluZSBQUk5fREJHKHN0cikgUERFQlVHIHN0 cgorI2RlZmluZSBQUk5fRVJSKHN0cikgUEVSUk9SIHN0cgorCisjZW5kaWYg LypfU01TX0RCR19IXyovCmRpZmYgLXVOciB2NGwtZHZiLWM1Zjk3NmNhYjAx MS9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGljb21tb24u YyB2NGwtZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVk aWEvZHZiL3NpYW5vL3Ntc3NwaWNvbW1vbi5jCi0tLSB2NGwtZHZiLWM1Zjk3 NmNhYjAxMS9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGlj b21tb24uYwkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAor KysgdjRsLWR2Yi1jNWY5NzZjYWIwMTFfMDAwMy9saW51eC9kcml2ZXJzL21l ZGlhL2R2Yi9zaWFuby9zbXNzcGljb21tb24uYwkyMDA4LTExLTE5IDEzOjI1 OjAzLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDMyNiBAQAorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKworU2lhbm8gTW9iaWxlIFNpbGljb24sIEluYy4K K01EVFYgcmVjZWl2ZXIga2VybmVsIG1vZHVsZXMuCitDb3B5cmlnaHQgKEMp IDIwMDYtMjAwOCwgVXJpIFNoa29sbmlrCisKK1RoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisjaW5jbHVkZSAic21zc3BpY29tbW9uLmgiCisjaW5jbHVkZSAic21zZGJn X3Bybi5oIgorCitzdGF0aWMgaW50IHNtc3NwaV9jb21tb25fZmluZF9tc2co c3RydWN0IHNwaV9kZXYgKmRldiwgcnhfYnVmZmVyX3N0ICogYnVmLAorCQkJ CSAgaW50IG9mZnNldCwgaW50IGxlbiwgaW50ICp1bnVzZWRfYnl0ZXMpCit7 CisJaW50IGksIG1pc3NpbmdfYnl0ZXM7CisJaW50IHJlY2lldmVkX2J5dGVz LCBwYWRkZWRfbXNnX2xlbjsKKwlpbnQgYWxpZ25fZml4OworCWNoYXIgKnB0 ciA9IChjaGFyICopYnVmLT5wdHIgKyBvZmZzZXQ7CisKKwlQUk5fREJHKChU WFQoImVudGVyaW5nIHdpdGggJWQgYnl0ZXMuXG4iKSwgbGVuKSk7CisJbWlz c2luZ19ieXRlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBw dHIrKykgeworCQlzd2l0Y2ggKGRldi0+cnhTdGF0ZSkgeworCQljYXNlIFJ4 c1dhaXRfYTU6CisJCQlkZXYtPnJ4U3RhdGUgPQorCQkJICAgICgoKnB0ciAm IDB4ZmYpID09IDB4YTUpID8gUnhzV2FpdF81YSA6IFJ4c1dhaXRfYTU7CisJ CQlkZXYtPnJ4UGFja2V0Lm1zZ19vZmZzZXQgPQorCQkJICAgICh1bnNpZ25l ZCBsb25nKXB0ciAtICh1bnNpZ25lZCBsb25nKWJ1Zi0+cHRyICsgNDsKKwkJ CWJyZWFrOworCQljYXNlIFJ4c1dhaXRfNWE6CisJCQlkZXYtPnJ4U3RhdGUg PQorCQkJICAgICgoKnB0ciAmIDB4ZmYpID09IDB4NWEpID8gUnhzV2FpdF9l NyA6IFJ4c1dhaXRfYTU7CisJCQlQUk5fREJHKChUWFQoInN0YXRlICVkLlxu IiksIGRldi0+cnhTdGF0ZSkpOworCQkJYnJlYWs7CisJCWNhc2UgUnhzV2Fp dF9lNzoKKwkJCWRldi0+cnhTdGF0ZSA9CisJCQkgICAgKCgqcHRyICYgMHhm ZikgPT0gMHhlNykgPyBSeHNXYWl0XzdlIDogUnhzV2FpdF9hNTsKKwkJCVBS Tl9EQkcoKFRYVCgic3RhdGUgJWQuXG4iKSwgZGV2LT5yeFN0YXRlKSk7CisJ CQlicmVhazsKKwkJY2FzZSBSeHNXYWl0XzdlOgorCQkJZGV2LT5yeFN0YXRl ID0KKwkJCSAgICAoKCpwdHIgJiAweGZmKSA9PSAweDdlKSA/IFJ4c1R5cGVI IDogUnhzV2FpdF9hNTsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4i KSwgZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNUeXBl SDoKKwkJCWRldi0+cnhQYWNrZXQubXNnX2J1ZiA9IGJ1ZjsKKwkJCWRldi0+ cnhQYWNrZXQubXNnX29mZnNldCA9CisJCQkgICAgKHVuc2lnbmVkIGxvbmcp cHRyIC0gKHVuc2lnbmVkIGxvbmcpYnVmLT5wdHI7CisJCQlkZXYtPnJ4U3Rh dGUgPSBSeHNUeXBlTDsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4i KSwgZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNUeXBl TDoKKwkJCWRldi0+cnhTdGF0ZSA9IFJ4c0dldFNyY0lkOworCQkJUFJOX0RC RygoVFhUKCJzdGF0ZSAlZC5cbiIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJy ZWFrOworCQljYXNlIFJ4c0dldFNyY0lkOgorCQkJZGV2LT5yeFN0YXRlID0g UnhzR2V0RHN0SWQ7CisJCQlQUk5fREJHKChUWFQoInN0YXRlICVkLlxuIiks IGRldi0+cnhTdGF0ZSkpOworCQkJYnJlYWs7CisJCWNhc2UgUnhzR2V0RHN0 SWQ6CisJCQlkZXYtPnJ4U3RhdGUgPSBSeHNHZXRMZW5MOworCQkJUFJOX0RC RygoVFhUKCJzdGF0ZSAlZC5cbiIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJy ZWFrOworCQljYXNlIFJ4c0dldExlbkw6CisJCQlkZXYtPnJ4U3RhdGUgPSBS eHNHZXRMZW5IOworCQkJZGV2LT5yeFBhY2tldC5tc2dfbGVuID0gKCpwdHIg JiAweGZmKTsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4iKSwgZGV2 LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNHZXRMZW5IOgor CQkJZGV2LT5yeFN0YXRlID0gUnhzRmxhZ3NMOworCQkJZGV2LT5yeFBhY2tl dC5tc2dfbGVuICs9ICgqcHRyICYgMHhmZikgPDwgODsKKwkJCVBSTl9EQkco KFRYVCgic3RhdGUgJWQuXG4iKSwgZGV2LT5yeFN0YXRlKSk7CisJCQlicmVh azsKKwkJY2FzZSBSeHNGbGFnc0w6CisJCQlkZXYtPnJ4U3RhdGUgPSBSeHNG bGFnc0g7CisJCQlkZXYtPnJ4UGFja2V0Lm1zZ19mbGFncyA9ICgqcHRyICYg MHhmZik7CisJCQlQUk5fREJHKChUWFQoInN0YXRlICVkLlxuIiksIGRldi0+ cnhTdGF0ZSkpOworCQkJYnJlYWs7CisJCWNhc2UgUnhzRmxhZ3NIOgorCQkJ ZGV2LT5yeFN0YXRlID0gUnhzRGF0YTsKKwkJCWRldi0+cnhQYWNrZXQubXNn X2ZsYWdzICs9ICgqcHRyICYgMHhmZikgPDwgODsKKwkJCVBSTl9EQkcoKFRY VCgic3RhdGUgJWQuXG4iKSwgZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsK KwkJY2FzZSBSeHNEYXRhOgorCQkJcmVjaWV2ZWRfYnl0ZXMgPQorCQkJICAg IGxlbiArIG9mZnNldCAtIGRldi0+cnhQYWNrZXQubXNnX29mZnNldDsKKwkJ CXBhZGRlZF9tc2dfbGVuID0KKwkJCSAgICAoKGRldi0+cnhQYWNrZXQubXNn X2xlbiArIDQgKyBTUElfUEFDS0VUX1NJWkUgLQorCQkJICAgICAgMSkgPj4g U1BJX1BBQ0tFVF9TSVpFX0JJVFMpIDw8CisJCQkgICAgU1BJX1BBQ0tFVF9T SVpFX0JJVFM7CisJCQlpZiAocmVjaWV2ZWRfYnl0ZXMgPCBwYWRkZWRfbXNn X2xlbikgeworCQkJCSp1bnVzZWRfYnl0ZXMgPSAwOworCQkJCXJldHVybiBw YWRkZWRfbXNnX2xlbiAtIHJlY2lldmVkX2J5dGVzOworCQkJfQorCQkJZGV2 LT5yeFN0YXRlID0gUnhzV2FpdF9hNTsKKwkJCWlmIChkZXYtPmNiLm1zZ19m b3VuZF9jYikgeworCQkJCWFsaWduX2ZpeCA9IDA7CisJCQkJaWYgKGRldi0+ cnhQYWNrZXQuCisJCQkJICAgIG1zZ19mbGFncyAmIE1TR19IRFJfRkxBR19T UExJVF9NU0dfSERSKSB7CisJCQkJCWFsaWduX2ZpeCA9CisJCQkJCSAgICAo ZGV2LT5yeFBhY2tldC4KKwkJCQkJICAgICBtc2dfZmxhZ3MgPj4gOCkgJiAw eDM7CisJCQkJCWlmIChhbGlnbl9maXgpIHsKKwkJCQkJLyogVGhlIEZXIGFs bGlnbmVkIHRoZSBtZXNzYWdlIGRhdGEKKwkJCQkJdGhlcmVmb3JlIC0gYWxs aWdtZW50IGJ5dGVzIHNob3VsZCBiZQorCQkJCQl0aHJvd24gYXdheS4gVGhy b3cgdGhlIGFsaWdtZW50IGJ5dGVzCisJCQkJCWJ5IG1vdmluZyB0aGUgaGVh ZGVyIGFoZWFkIG92ZXIgdGhlCisJCQkJCWFsbGlnbWVudCBieXRlcy4gKi8K KwkJCQkJCXB0ciA9CisJCQkJCQkgICAgKGNoYXIgKilkZXYtPnJ4UGFja2V0 LgorCQkJCQkJICAgIG1zZ19idWYtPnB0ciArCisJCQkJCQkgICAgZGV2LT5y eFBhY2tldC5tc2dfb2Zmc2V0OworCisJCQkJCQkvKiBSZXN0b3JlIGhlYWRl ciB0byBvcmlnaW5hbAorCQkJCQkJc3RhdGUgYmVmb3JlIGFsaWdubWVudCBj aGFuZ2VzCisJCQkJCQkqLworCQkJCQkJdTE2IGxlbmd0aCA9CisJCQkJCQkg ICAgKHB0cls1XSA8PCA4KSB8IHB0cls0XTsKKwkJCQkJCWxlbmd0aCAtPSBh bGlnbl9maXg7CisJCQkJCQlwdHJbNV0gPSBsZW5ndGggPj4gODsKKwkJCQkJ CXB0cls0XSA9IGxlbmd0aCAmIDB4ZmY7CisJCQkJCQkvKiBaZXJvIGFsaWdu bWVudCBmbGFncyAqLworCQkJCQkJcHRyWzddICY9IDB4ZmM7CisKKwkJCQkJ CWZvciAoaSA9IE1TR19IRFJfTEVOIC0gMTsKKwkJCQkJCSAgICAgaSA+PSAw OyBpLS0pIHsKKwkJCQkJCQlwdHJbaSArIGFsaWduX2ZpeF0gPQorCQkJCQkJ CSAgICBwdHJbaV07CisJCQkJCQl9CisJCQkJCQlkZXYtPnJ4UGFja2V0Lm1z Z19vZmZzZXQgKz0KKwkJCQkJCSAgICBhbGlnbl9maXg7CisJCQkJCX0KKwkJ CQl9CisKKwkJCQlQUk5fREJHKChUWFQKKwkJCQkoIk1zZyBmb3VuZCBhbmQg c2VudCB0byBjYWxsYmFjayBmdW5jLlxuIikpKTsKKwkJCQlkZXYtPmNiLm1z Z19mb3VuZF9jYihkZXYtPmNvbnRleHQsCisJCQkJCQkgICAgIGRldi0+cnhQ YWNrZXQubXNnX2J1ZiwKKwkJCQkJCSAgICAgZGV2LT5yeFBhY2tldC5tc2df b2Zmc2V0LAorCQkJCQkJICAgICBkZXYtPnJ4UGFja2V0Lm1zZ19sZW4gLQor CQkJCQkJICAgICBhbGlnbl9maXgpOworCQkJCSp1bnVzZWRfYnl0ZXMgPQor CQkJCSAgICBsZW4gKyBvZmZzZXQgLSBkZXYtPnJ4UGFja2V0Lm1zZ19vZmZz ZXQgLQorCQkJCSAgICBkZXYtPnJ4UGFja2V0Lm1zZ19sZW47CisJCQkJaWYg KCp1bnVzZWRfYnl0ZXMgPT0gMCkKKwkJCQkJKnVudXNlZF9ieXRlcyA9IC0x OworCQkJCXJldHVybiAwOworCQkJfSBlbHNlIHsKKwkJCQlQUk5fREJHKChU WFQKKwkJICgiTXNnIGZvdW5kIGJ1dCBubyBjYWxsYmFjay4gdGhlcmVmb3Jl IC0gdGhyb3duIGF3YXkuXG4iKSkpOworCQkJfQorCQkJUFJOX0RCRygoVFhU KCJzdGF0ZSAlZC5cbiIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFrOwor CQl9CisJfQorCisJaWYgKGRldi0+cnhTdGF0ZSA9PSBSeHNXYWl0X2E1KSB7 CisJCSp1bnVzZWRfYnl0ZXMgPSAwOworCQlyZXR1cm4gMDsKKwl9IGVsc2Ug eworCQkvKiBXb3JrYXJvdW5kIHRvIGNvcm5lciBjYXNlOiBpZiB0aGUgbGFz dCBieXRlIG9mIHRoZSBidWZmZXIKKwkJaXMgImE1IiAoZmlyc3QgYnl0ZSBv ZiB0aGUgcHJlYW1ibGUpLCB0aGUgaG9zdCB0aGlua3MgaXQgc2hvdWxkCisJ CXNlbmQgYW5vdGhlciAyNTYgYnl0ZXMuICBJbiBjYXNlIHRoZSBhNSBpcyB0 aGUgZmlybXdhcmUKKwkJdW5kZXJmbG93IGJ5dGUsIHRoaXMgd2lsbCBjYXVz ZSBhbiBpbmZpbml0ZSBsb29wLCBzbyB3ZSBjaGVjaworCQlmb3IgdGhpcyBj YXNlIGV4cGxpY2l0eS4gKi8KKwkJaWYgKChkZXYtPnJ4U3RhdGUgPT0gUnhz V2FpdF81YSkgJiYgKCoocHRyIC0gMikgPT0gMHhhNSkpIHsKKwkJCWRldi0+ cnhTdGF0ZSA9IFJ4c1dhaXRfYTU7CisJCQkqdW51c2VkX2J5dGVzID0gMDsK KwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGRldi0+cnhQYWNrZXQubXNn X29mZnNldCA+PSAoU1BJX1BBQ0tFVF9TSVpFICsgNCkpCisJCQkvKiBhZGRp bmcgNCBmb3IgdGhlIHByZWFtYmxlLiAqLworCQl7CQkvKlRoZSBwYWNrZXQg d2lsbCBiZSBjb3BpZWQgdG8gYSBuZXcgYnVmZmVyCisJCQkJICAgYW5kIHJl c2NhbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lICovCisJCQkqdW51c2VkX2J5 dGVzID0gZGV2LT5yeFN0YXRlIC0gUnhzV2FpdF9hNTsKKwkJCWRldi0+cnhT dGF0ZSA9IFJ4c1dhaXRfYTU7CisJCQlkZXYtPmNiLmZyZWVfcnhfYnVmKGRl di0+Y29udGV4dCwgYnVmKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2Ugewor CQkJLyogcmVwb3J0IG1pc3NpbmcgYnl0ZXMgYW5kIGNvbnRpbnVlCisJCQkg ICB3aXRoIG1lc3NhZ2Ugc2Nhbi4gKi8KKwkJCSp1bnVzZWRfYnl0ZXMgPSAw OworCQkJcmV0dXJuIFNQSV9QQUNLRVRfU0laRTsKKwkJfQorCX0KK30KKwor dm9pZCBzbXNzcGlfY29tbW9uX3RyYW5zZmVyX21zZyhzdHJ1Y3Qgc3BpX2Rl diAqZGV2LCBzdHJ1Y3Qgc3BpX21zZyAqdHhtc2csCisJCQkJaW50IHBhZGRp bmdfYWxsb3dlZCkKK3sKKwlpbnQgbGVuLCBieXRlc190b190cmFuc2ZlcjsK Kwl1bnNpZ25lZCBsb25nIHR4X3BoeV9hZGRyOworCWludCBtaXNzaW5nX2J5 dGVzLCB0eF9ieXRlczsKKwlpbnQgb2Zmc2V0LCB1bnVzZWRfYnl0ZXM7CisJ aW50IGFsaWduX2Jsb2NrOworCWNoYXIgKnR4YnVmOworCXJ4X2J1ZmZlcl9z dCAqIGJ1ZiwgKnRtcF9idWY7CisKKwlsZW4gPSAwOworCWlmICghZGV2LT5j Yi50cmFuc2Zlcl9kYXRhX2NiKSB7CisJCVBSTl9FUlIoKFRYVAorCQkoImZ1 bmN0aW9uIGNhbGxlZCB3aGlsZSBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVk LlxuIikpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodHhtc2cgPT0gMCkgewor CQlieXRlc190b190cmFuc2ZlciA9IFNQSV9QQUNLRVRfU0laRTsKKwkJdHhi dWYgPSAwOworCQl0eF9waHlfYWRkciA9IDA7CisJCXR4X2J5dGVzID0gMDsK Kwl9IGVsc2UgeworCQl0eF9ieXRlcyA9IHR4bXNnLT5sZW47CisJCWlmIChw YWRkaW5nX2FsbG93ZWQpCisJCQlieXRlc190b190cmFuc2ZlciA9CisJCQkg ICAgKCgodHhfYnl0ZXMgKyBTUElfUEFDS0VUX1NJWkUgLQorCQkJICAgICAg IDEpID4+IFNQSV9QQUNLRVRfU0laRV9CSVRTKSA8PAorCQkJICAgICBTUElf UEFDS0VUX1NJWkVfQklUUyk7CisJCWVsc2UKKwkJCWJ5dGVzX3RvX3RyYW5z ZmVyID0gKCgodHhfYnl0ZXMgKyAzKSA+PiAyKSA8PCAyKTsKKwkJdHhidWYg PSB0eG1zZy0+YnVmOworCQl0eF9waHlfYWRkciA9IHR4bXNnLT5idWZfcGh5 X2FkZHI7CisJfQorCW9mZnNldCA9IDA7CisJdW51c2VkX2J5dGVzID0gMDsK KwlidWYgPQorCSAgICBkZXYtPmNiLmFsbG9jYXRlX3J4X2J1ZihkZXYtPmNv bnRleHQsCisJCQkJICAgIFJYX1BBQ0tFVF9TSVpFICsgU1BJX1BBQ0tFVF9T SVpFKTsKKwlpZiAoIWJ1ZikgeworCQlQUk5fRVJSKChUWFQoIkZhaWxlZCB0 byBhbGxvY2F0ZSBSWCBidWZmZXIuXG4iKSkpOworCQlyZXR1cm47CisJfQor CXdoaWxlIChieXRlc190b190cmFuc2ZlciB8fCB1bnVzZWRfYnl0ZXMpIHsK KwkJaWYgKCh1bnVzZWRfYnl0ZXMgPD0gMCkgJiYgKGJ5dGVzX3RvX3RyYW5z ZmVyID4gMCkpIHsKKwkJCWxlbiA9IG1pbihieXRlc190b190cmFuc2Zlciwg UlhfUEFDS0VUX1NJWkUpOworCQkJUFJOX0RCRygoVFhUKCJ0cmFuc2Zlcmlu ZyBibG9jayBvZiAlZCBieXRlc1xuIiksIGxlbikpOworCQkJZGV2LT5jYi50 cmFuc2Zlcl9kYXRhX2NiKGRldi0+cGh5X2NvbnRleHQsIHR4YnVmLAorCQkJ CQkJIHR4X3BoeV9hZGRyLAorCQkJCQkJIChjaGFyICopYnVmLT5wdHIgKyBv ZmZzZXQsCisJCQkJCQkgYnVmLT5waHlfYWRkciArIG9mZnNldCwgbGVuKTsK KwkJfQorCQltaXNzaW5nX2J5dGVzID0KKwkJICAgIHNtc3NwaV9jb21tb25f ZmluZF9tc2coZGV2LCBidWYsIG9mZnNldCwgbGVuLAorCQkJCQkgICAmdW51 c2VkX2J5dGVzKTsKKwkJaWYgKGJ5dGVzX3RvX3RyYW5zZmVyKQorCQkJYnl0 ZXNfdG9fdHJhbnNmZXIgLT0gbGVuOworCisJCWlmICh0eF9ieXRlcykKKwkJ CXR4X2J5dGVzIC09IGxlbjsKKworCQlpZiAobWlzc2luZ19ieXRlcykKKwkJ CW9mZnNldCArPSBsZW47CisKKwkJaWYgKHVudXNlZF9ieXRlcykgeworCQkJ dG1wX2J1ZiA9CisJCQkgICAgZGV2LT5jYi5hbGxvY2F0ZV9yeF9idWYoZGV2 LT5jb250ZXh0LAorCQkJCQkJICAgIFJYX1BBQ0tFVF9TSVpFKTsKKwkJCWlm ICghdG1wX2J1ZikgeworCQkJCVBSTl9FUlIoKFRYVAorCQkJCQkgKCJGYWls ZWQgdG8gYWxsb2NhdGUgUlggYnVmZmVyLlxuIikpKTsKKwkJCQlyZXR1cm47 CisJCQl9CisJCQlpZiAodW51c2VkX2J5dGVzID4gMCkgeworCQkJCS8qIENv cHkgdGhlIHJlbWFpbmluZyBieXRlcyB0byB0aGUgZW5kIG9mCisJCQkJICAg YWxpbmdtZW50IGJsb2NrICgyNTYgYnl0ZXMpIHNvIG5leHQgcmVhZAorCQkJ CSAgIHdpbGwgYmUgYWxsaWduZWQuICovCisJCQkJYWxpZ25fYmxvY2sgPQor CQkJCSAgICAoKCh1bnVzZWRfYnl0ZXMgKyBTUElfUEFDS0VUX1NJWkUgLQor CQkJCSAgICAgICAxKSA+PiBTUElfUEFDS0VUX1NJWkVfQklUUykgPDwKKwkJ CQkgICAgIFNQSV9QQUNLRVRfU0laRV9CSVRTKTsKKwkJCQltZW1zZXQodG1w X2J1Zi0+cHRyLCAwLAorCQkJCSAgICAgICBhbGlnbl9ibG9jayAtIHVudXNl ZF9ieXRlcyk7CisJCQkJbWVtY3B5KChjaGFyICopdG1wX2J1Zi0+cHRyICsK KwkJCQkgICAgICAgKGFsaWduX2Jsb2NrIC0gdW51c2VkX2J5dGVzKSwKKwkJ CQkgICAgICAgKGNoYXIgKilidWYtPnB0ciArIG9mZnNldCArIGxlbiAtCisJ CQkJICAgICAgIHVudXNlZF9ieXRlcywgdW51c2VkX2J5dGVzKTsKKwkJCQls ZW4gPSBhbGlnbl9ibG9jazsKKwkJCX0KKwkJCW9mZnNldCA9IDA7CisJCQli dWYgPSB0bXBfYnVmOworCQl9CisJCWlmICh0eF9ieXRlcyA8PSAwKSB7CisJ CQl0eGJ1ZiA9IDA7CisJCQl0eF9ieXRlcyA9IDA7CisJCX0KKwkJaWYgKGJ5 dGVzX3RvX3RyYW5zZmVyIDwgbWlzc2luZ19ieXRlcykgeworCQkJYnl0ZXNf dG9fdHJhbnNmZXIgPQorCQkJICAgICgoKG1pc3NpbmdfYnl0ZXMgKyBTUElf UEFDS0VUX1NJWkUgLQorCQkJICAgICAgIDEpID4+IFNQSV9QQUNLRVRfU0la RV9CSVRTKSA8PAorCQkJICAgICBTUElfUEFDS0VUX1NJWkVfQklUUyk7CisJ CQlQUk5fREJHKChUWFQKKwkoImEgbWVzc2FnZSB3YXMgZm91bmQsIGFkZGlu ZyBieXRlcyB0byB0cmFuc2ZlciwgdHhtc2cgJWQsIHRvdGFsICVkXG4iKQor CQkJLCB0eF9ieXRlcywgYnl0ZXNfdG9fdHJhbnNmZXIpKTsKKwkJfQorCX0K KwlkZXYtPmNiLmZyZWVfcnhfYnVmKGRldi0+Y29udGV4dCwgYnVmKTsKK30K KworaW50IHNtc3NwaWNvbW1vbl9pbml0KHN0cnVjdCBzcGlfZGV2ICpkZXYs IHZvaWQgKmNvbnRleHQsIHZvaWQgKnBoeV9jb250ZXh0LAorCQkgICAgICBz cGlfZGV2X2NiX3N0ICpjYikKK3sKKwlQUk5fREJHKChUWFQoImVudGVyaW5n LlxuIikpKTsKKwlpZiAoY2ItPnRyYW5zZmVyX2RhdGFfY2IgPT0gMCB8fAor CSAgICBjYi0+bXNnX2ZvdW5kX2NiID09IDAgfHwKKwkgICAgY2ItPmFsbG9j YXRlX3J4X2J1ZiA9PSAwIHx8IGNiLT5mcmVlX3J4X2J1ZiA9PSAwKSB7CisJ CVBSTl9FUlIoKFRYVCgiSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzIG9mIGlu aXQgcm91dGluZS5cbiIpKSk7CisJCXJldHVybiAtMTsKKwl9CisJZGV2LT5j b250ZXh0ID0gY29udGV4dDsKKwlkZXYtPnBoeV9jb250ZXh0ID0gcGh5X2Nv bnRleHQ7CisJbWVtY3B5KCZkZXYtPmNiLCBjYiwgc2l6ZW9mKHNwaV9kZXZf Y2Jfc3QpKTsKKwlkZXYtPnJ4U3RhdGUgPSBSeHNXYWl0X2E1OworCVBSTl9E QkcoKFRYVCgiZXhpdGluZy5cbiIpKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYg LXVOciB2NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2ZXJzL21lZGlh L2R2Yi9zaWFuby9zbXNzcGljb21tb24uaCB2NGwtZHZiLWM1Zjk3NmNhYjAx MV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaWNv bW1vbi5oCi0tLSB2NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2ZXJz L21lZGlhL2R2Yi9zaWFuby9zbXNzcGljb21tb24uaAkxOTcwLTAxLTAxIDAy OjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgdjRsLWR2Yi1jNWY5NzZjYWIw MTFfMDAwMy9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGlj b21tb24uaAkyMDA4LTExLTE5IDEzOjI1OjAzLjAwMDAwMDAwMCArMDIwMApA QCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitTaWFu byBNb2JpbGUgU2lsaWNvbiwgSW5jLgorTURUViByZWNlaXZlciBrZXJuZWwg bW9kdWxlcy4KK0NvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBVcmkgU2hrb2xu aWsKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1NNU19TUElfQ09N TU9OX0hfCisjZGVmaW5lIF9TTVNfU1BJX0NPTU1PTl9IXworCisjZGVmaW5l IFJYX1BBQ0tFVF9TSVpFICAJCTB4MTAwMAorI2RlZmluZSBTUElfUEFDS0VU X1NJWkVfQklUUwkJOAorI2RlZmluZSBTUElfUEFDS0VUX1NJWkUgCQkoMTw8 U1BJX1BBQ0tFVF9TSVpFX0JJVFMpCisjZGVmaW5lIFNQSV9NQVhfQ1RSTF9N U0dfU0laRQkJMHgxMDAKKworI2RlZmluZSBNU0dfSERSX0ZMQUdfU1BMSVRf TVNHX0hEUgkweDAwMDQKKyNkZWZpbmUgTVNHX0hEUl9MRU4JCQk4CisKK2Vu dW0gX3NwaV9yeF9zdGF0ZSB7CisJUnhzV2FpdF9hNSA9IDAsCisJUnhzV2Fp dF81YSwKKwlSeHNXYWl0X2U3LAorCVJ4c1dhaXRfN2UsCisJUnhzVHlwZUgs CisJUnhzVHlwZUwsCisJUnhzR2V0U3JjSWQsCisJUnhzR2V0RHN0SWQsCisJ UnhzR2V0TGVuTCwKKwlSeHNHZXRMZW5ILAorCVJ4c0ZsYWdzTCwKKwlSeHNG bGFnc0gsCisJUnhzRGF0YQorfSBzcGlfcnhfc3RhdGU7CisKK3N0cnVjdCB7 CisJdm9pZCAqcHRyOworCXVuc2lnbmVkIGxvbmcgcGh5X2FkZHI7Cit9IHJ4 X2J1ZmZlcl9zdDsKKworc3RydWN0IF9yeF9wYWNrZXRfcmVxdWVzdCB7CisJ cnhfYnVmZmVyX3N0ICptc2dfYnVmOworCWludCBtc2dfb2Zmc2V0OworCWlu dCBtc2dfbGVuOworCWludCBtc2dfZmxhZ3M7Cit9IHJ4X3BhY2tldF9yZXF1 ZXN0OworCitzdHJ1Y3QgeworCXZvaWQgKCp0cmFuc2Zlcl9kYXRhX2NiKSAo dm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25n LAorCQkJCSAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nLCBpbnQp OworCXZvaWQgKCptc2dfZm91bmRfY2IpICh2b2lkICosIHZvaWQgKiwgaW50 LCBpbnQpOworCXJ4X2J1ZmZlcl9zdCAqKCphbGxvY2F0ZV9yeF9idWYpICh2 b2lkICosIGludCk7CisJdm9pZCAoKmZyZWVfcnhfYnVmKSAodm9pZCAqLCBy eF9idWZmZXJfc3QgKik7Cit9IHNwaV9kZXZfY2Jfc3Q7CisKK3N0cnVjdCBz cGlfZGV2IHsKKwl2b2lkICpjb250ZXh0OworCXZvaWQgKnBoeV9jb250ZXh0 OworCXNwaV9kZXZfY2Jfc3QgY2I7CisJY2hhciAqcnhidWY7CisJc3BpX3J4 X3N0YXRlIHJ4U3RhdGU7CisJcnhfcGFja2V0X3JlcXVlc3QgcnhQYWNrZXQ7 CisJY2hhciAqaW50ZXJuYWxfdHhfYnVmOworfSBzcGlfZGV2X3N0OworCitz dHJ1Y3Qgc3BpX21zZyB7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcg YnVmX3BoeV9hZGRyOworCWludCBsZW47Cit9IHNwaV9tc2dfc3Q7CisKK3Zv aWQgc21zc3BpX2NvbW1vbl90cmFuc2Zlcl9tc2coc3RydWN0IHNwaV9kZXYg KmRldiwgc3RydWN0IHNwaV9tc2cgKnR4bXNnLAorCQkJCWludCBwYWRkaW5n X2FsbG93ZWQpOworaW50IHNtc3NwaWNvbW1vbl9pbml0KHN0cnVjdCBzcGlf ZGV2ICpkZXYsIHZvaWQgKmNvbnRleCwgdm9pZCAqcGh5X2NvbnRleHQsCisJ CSAgICAgIHNwaV9kZXZfY2Jfc3QgKmNiKTsKKworI2lmIGRlZmluZWQgSEVY RFVNUF9ERUJVRyAmJiBkZWZpbmVkIFNQSUJVU19ERUJVRworLyohIGR1bXAg YSBodW1hbiByZWFkYWJsZSBwcmludCBvZiBhIGJpbmFyeSBidWZmZXIgKi8K K3ZvaWQgc21zc3BpX2toZXhkdW1wKGNoYXIgKmJ1ZiwgaW50IGxlbik7Cisj ZWxzZQorI2RlZmluZSBzbXNzcGlfa2hleGR1bXAoYnVmLCBsZW4pCisjZW5k aWYKKworI2VuZGlmIC8qX1NNU19TUElfQ09NTU9OX0hfKi8KZGlmZiAtdU5y IHY0bC1kdmItYzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZi L3NpYW5vL3Ntc3NwaWxvZy5jIHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMv bGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc3BpbG9nLmMKLS0t IHY0bC1kdmItYzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZi L3NpYW5vL3Ntc3NwaWxvZy5jCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAw MDAwICswMjAwCisrKyB2NGwtZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xpbnV4 L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaWxvZy5jCTIwMDgtMTEt MTkgMTM6MjU6MDMuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsNDQ2IEBA CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorCitTaWFubyBNb2JpbGUgU2lsaWNv biwgSW5jLgorTURUViByZWNlaXZlciBrZXJuZWwgbW9kdWxlcy4KK0NvcHly aWdodCAoQykgMjAwNi0yMDA4LCBVcmkgU2hrb2xuaWsKKworVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKy8qIQorCVxmaWxlCXNwaWJ1c2Rydi5jCisKKwlcYnJpZWYJ c3BpIGJ1cyBkcml2ZXIgbW9kdWxlCisKKwlUaGlzIGZpbGUgY29udGFpbnMg aW1wbGVtZW50YXRpb24gb2YgdGhlIHNwaSBidXMgZHJpdmVyLgorKi8KKwor I2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJzbXNjb3Jl YXBpLmgiCisjaW5jbHVkZSAic21zZGJnX3Bybi5oIgorI2luY2x1ZGUgInNt c3NwaWNvbW1vbi5oIgorI2luY2x1ZGUgInNtc3NwaXBoeS5oIgorCisjZGVm aW5lIFNNU19JTlRSX1BJTgkJCTE2ICAvKiAwIGZvciBub3ZhIHNpcCwgMjYg Zm9yIHZlZ2EgKi8KKyNkZWZpbmUgVFhfQlVGRkVSX1NJWkUJCQkweDIwMAor I2RlZmluZSBSWF9CVUZGRVJfU0laRQkJCSgweDEwMDAgKyBTUElfUEFDS0VU X1NJWkUgKyAweDEwMCkKKyNkZWZpbmUgTlVNX1JYX0JVRkZFUlMJCQk3Mgor CitzdHJ1Y3QgeworCXN0cnVjdCBzcGlfZGV2IGRldjsKKwl2b2lkICpwaHlf ZGV2OworCisJc3RydWN0IGNvbXBsZXRpb24gd3JpdGVfb3BlcmF0aW9uOwor CXN0cnVjdCBsaXN0X2hlYWQgdHhfcXVldWU7CisJaW50IGFsbG9jYXRlZFBh Y2tldHM7CisJaW50IHBhZGRpbmdfYWxsb3dlZDsKKwljaGFyICpyeGJ1ZjsK KwlkbWFfYWRkcl90IHJ4YnVmX3BoeV9hZGRyOworCisJc3RydWN0IHNtc2Nv cmVfZGV2aWNlX3QgKmNvcmVkZXY7CisJc3RydWN0IGxpc3RfaGVhZCB0eHF1 ZXVlOworCWNoYXIgKnR4YnVmOworCWRtYV9hZGRyX3QgdHhidWZfcGh5X2Fk ZHI7Cit9IHNwaV9kZXZpY2Vfc3Q7CisKK3N0cnVjdCBfc21zc3BpX3R4bXNn IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CS8qISBpbnRlcm5hbCBtYW5h Z2VtZW50ICovCisJdm9pZCAqYnVmZmVyOworCXNpemVfdCBzaXplOworCWlu dCBhbGlnbm1lbnQ7CisJaW50IGFkZF9wcmVhbWJsZTsKKwlzdHJ1Y3QgY29t cGxldGlvbiBjb21wbGV0aW9uOworCXZvaWQgKCpwcmV3cml0ZSkgKHZvaWQg Kik7CisJdm9pZCAoKnBvc3R3cml0ZSkgKHZvaWQgKik7Cit9IHNtc3NwaV90 eG1zZ190OworCitzcGlfZGV2aWNlX3N0ICpzcGlfZGV2OworCitzdGF0aWMg dm9pZCBzcGlfd29ya2VyX3RocmVhZCh2b2lkICphcmcpOworc3RhdGljIERF Q0xBUkVfV09SSyhzcGlfd29ya19xdWV1ZSwgKHZvaWQgKilzcGlfd29ya2Vy X3RocmVhZCk7CitzdGF0aWMgdTggc21zc3BpX3ByZWFtYmxlW10gPSB7IDB4 YTUsIDB4NWEsIDB4ZTcsIDB4N2UgfTsKK3N0YXRpYyB1OCBzbXNzcGlfc3Rh cnR1cFtdID0geyAwLCAwLCAweGRlLCAweGMxLCAweGE1LCAweDUxLCAweGYx LCAweGVkIH07CitzdGF0aWMgdTMyIGRlZmF1bHRfdHlwZSA9IFNNU19OT1ZB X0EwOworc3RhdGljIHUzMiBpbnRyX3BpbiA9IFNNU19JTlRSX1BJTjsKKwor bW9kdWxlX3BhcmFtKGRlZmF1bHRfdHlwZSwgaW50LCAwNjQ0KTsKK01PRFVM RV9QQVJNX0RFU0MoZGVmYXVsdF90eXBlLCAiZGVmYXVsdCBib2FyZCB0eXBl LiIpOworCittb2R1bGVfcGFyYW0oaW50cl9waW4sIGludCwgMDY0NCk7CitN T0RVTEVfUEFSTV9ERVNDKGludHJfcGluLCAiaW50ZXJydXB0IHBpbiBudW1i ZXIuIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCitzdGF0aWMgdm9pZCBzcGlfd29ya2VyX3RocmVhZCh2b2lk ICphcmcpCit7CisJc3BpX2RldmljZV9zdCAqc3BpX2RldmljZSA9IHNwaV9k ZXY7CisJc21zc3BpX3R4bXNnX3QgKm1zZyA9IE5VTEw7CisJc3BpX21zZ19z dCB0eG1zZzsKKworCVBERUJVRygid29ya2VyIHN0YXJ0XG4iKTsKKwlkbyB7 CisJCS8qIGRvIHdlIGhhdmUgYSBtc2cgdG8gd3JpdGUgPyAqLworCQlpZiAo IW1zZyAmJiAhbGlzdF9lbXB0eSgmc3BpX2RldmljZS0+dHhxdWV1ZSkpCisJ CQltc2cgPQorCQkJICAgIChzbXNzcGlfdHhtc2dfdCAqKSBsaXN0X2VudHJ5 KHNwaV9kZXZpY2UtPnR4cXVldWUuCisJCQkJCQkJICBuZXh0LCBzbXNzcGlf dHhtc2dfdCwKKwkJCQkJCQkgIG5vZGUpOworCisJCWlmIChtc2cpIHsKKwkJ CWlmIChtc2ctPmFkZF9wcmVhbWJsZSkgeworCQkJCXR4bXNnLmxlbiA9CisJ CQkJICAgIG1pbihtc2ctPnNpemUgKyBzaXplb2Yoc21zc3BpX3ByZWFtYmxl KSwKKwkJCQkJKHNpemVfdCkgVFhfQlVGRkVSX1NJWkUpOworCQkJCXR4bXNn LmJ1ZiA9IHNwaV9kZXZpY2UtPnR4YnVmOworCQkJCXR4bXNnLmJ1Zl9waHlf YWRkciA9IHNwaV9kZXZpY2UtPnR4YnVmX3BoeV9hZGRyOworCQkJCW1lbWNw eSh0eG1zZy5idWYsIHNtc3NwaV9wcmVhbWJsZSwKKwkJCQkgICAgICAgc2l6 ZW9mKHNtc3NwaV9wcmVhbWJsZSkpOworCQkJCW1lbWNweSgmdHhtc2cuYnVm W3NpemVvZihzbXNzcGlfcHJlYW1ibGUpXSwKKwkJCQkgICAgICAgbXNnLT5i dWZmZXIsCisJCQkJICAgICAgIHR4bXNnLmxlbiAtIHNpemVvZihzbXNzcGlf cHJlYW1ibGUpKTsKKwkJCQltc2ctPmFkZF9wcmVhbWJsZSA9IDA7CisJCQkJ bXNnLT5idWZmZXIgKz0KKwkJCQkgICAgdHhtc2cubGVuIC0gc2l6ZW9mKHNt c3NwaV9wcmVhbWJsZSk7CisJCQkJbXNnLT5zaXplIC09CisJCQkJICAgIHR4 bXNnLmxlbiAtIHNpemVvZihzbXNzcGlfcHJlYW1ibGUpOworCQkJCS8qIHpl cm8gb3V0IHRoZSByZXN0IG9mIGFsaWduZWQgYnVmZmVyICovCisJCQkJbWVt c2V0KCZ0eG1zZy5idWZbdHhtc2cubGVuXSwgMCwKKwkJCQkgICAgICAgVFhf QlVGRkVSX1NJWkUgLSB0eG1zZy5sZW4pOworCQkJCXNtc3NwaV9jb21tb25f dHJhbnNmZXJfbXNnKCZzcGlfZGV2aWNlLT5kZXYsCisJCQkJCQkJICAgJnR4 bXNnLCAxKTsKKwkJCX0gZWxzZSB7CisJCQkJdHhtc2cubGVuID0KKwkJCQkg ICAgbWluKG1zZy0+c2l6ZSwgKHNpemVfdCkgVFhfQlVGRkVSX1NJWkUpOwor CQkJCXR4bXNnLmJ1ZiA9IHNwaV9kZXZpY2UtPnR4YnVmOworCQkJCXR4bXNn LmJ1Zl9waHlfYWRkciA9IHNwaV9kZXZpY2UtPnR4YnVmX3BoeV9hZGRyOwor CQkJCW1lbWNweSh0eG1zZy5idWYsIG1zZy0+YnVmZmVyLCB0eG1zZy5sZW4p OworCisJCQkJbXNnLT5idWZmZXIgKz0gdHhtc2cubGVuOworCQkJCW1zZy0+ c2l6ZSAtPSB0eG1zZy5sZW47CisJCQkJLyogemVybyBvdXQgdGhlIHJlc3Qg b2YgYWxpZ25lZCBidWZmZXIgKi8KKwkJCQltZW1zZXQoJnR4bXNnLmJ1Zlt0 eG1zZy5sZW5dLCAwLAorCQkJCSAgICAgICBUWF9CVUZGRVJfU0laRSAtIHR4 bXNnLmxlbik7CisJCQkJc21zc3BpX2NvbW1vbl90cmFuc2Zlcl9tc2coJnNw aV9kZXZpY2UtPmRldiwKKwkJCQkJCQkgICAmdHhtc2csIDApOworCQkJfQor CisJCX0gZWxzZSB7CisJCQlzbXNzcGlfY29tbW9uX3RyYW5zZmVyX21zZygm c3BpX2RldmljZS0+ZGV2LCBOVUxMLCAxKTsKKwkJfQorCisJCS8qIGlmIHRo ZXJlIHdhcyB3cml0ZSwgaGF2ZSB3ZSBmaW5pc2hlZCA/ICovCisJCWlmICht c2cgJiYgIW1zZy0+c2l6ZSkgeworCQkJLyogY2FsbCBwb3N0d3JpdGUgY2Fs bCBiYWNrICovCisJCQlpZiAobXNnLT5wb3N0d3JpdGUpCisJCQkJbXNnLT5w b3N0d3JpdGUoc3BpX2RldmljZSk7CisKKwkJCWxpc3RfZGVsKCZtc2ctPm5v ZGUpOworCQkJY29tcGxldGUoJm1zZy0+Y29tcGxldGlvbik7CisJCQltc2cg PSBOVUxMOworCQl9CisJCS8qIGlmIHRoZXJlIHdhcyByZWFkLCBkaWQgd2Ug cmVhZCBhbnl0aGluZyA/ICovCisKKwl9IHdoaWxlICghbGlzdF9lbXB0eSgm c3BpX2RldmljZS0+dHhxdWV1ZSkgfHwgbXNnKTsKKworCVBERUJVRygid29y a2VyIGVuZFxuIik7CisKK30KKworc3RhdGljIHZvaWQgbXNnX2ZvdW5kKHZv aWQgKmNvbnRleHQsIHZvaWQgKmJ1ZiwgaW50IG9mZnNldCwgaW50IGxlbikK K3sKKwlzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlID0gKHNwaV9kZXZpY2Vf c3QgKikgY29udGV4dDsKKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2Ig PQorCSAgICAoc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QKKwkgICAgICopKGNv bnRhaW5lcl9vZihidWYsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90LCBwKSk7 CisKKwlQREVCVUcoImVudGVyaW5nXG4iKTsKKwljYi0+b2Zmc2V0ID0gb2Zm c2V0OworCWNiLT5zaXplID0gbGVuOworCS8qIFBFUlJPUiAoImJ1ZmZlciAl cCBpcyBzZW50IGJhY2sgdG8gY29yZSBkYXRhYnVmPSVwLAorCQlvZmZzZXQ9 JWQuXG4iLCBjYiwgY2ItPnAsIGNiLT5vZmZzZXQpOyAqLworCXNtc2NvcmVf b25yZXNwb25zZShzcGlfZGV2aWNlLT5jb3JlZGV2LCBjYik7CisKKwlQREVC VUcoImV4aXRpbmdcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIHNtc3NwaV9p bnRfaGFuZGxlcih2b2lkICpjb250ZXh0KQoreworCXNwaV9kZXZpY2Vfc3Qg KnNwaV9kZXZpY2UgPSAoc3BpX2RldmljZV9zdCAqKSBjb250ZXh0OworCVBE RUJVRygiaW50ZXJydXB0XG4iKTsKKwlQUkVQQVJFX1dPUksoJnNwaV93b3Jr X3F1ZXVlLCAodm9pZCAqKXNwaV93b3JrZXJfdGhyZWFkKTsKKwlzcGlfZGV2 aWNlLT5wYWRkaW5nX2FsbG93ZWQgPSAxOworCXNjaGVkdWxlX3dvcmsoJnNw aV93b3JrX3F1ZXVlKTsKK30KKworc3RhdGljIGludCBzbXNzcGlfcXVldWVf bWVzc2FnZV9hbmRfd2FpdChzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlLAor CQkJCQkgc21zc3BpX3R4bXNnX3QgKm1zZykKK3sKKwlpbml0X2NvbXBsZXRp b24oJm1zZy0+Y29tcGxldGlvbik7CisJbGlzdF9hZGRfdGFpbCgmbXNnLT5u b2RlLCAmc3BpX2RldmljZS0+dHhxdWV1ZSk7CisJc2NoZWR1bGVfd29yaygm c3BpX3dvcmtfcXVldWUpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1zZy0+ Y29tcGxldGlvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz bXNzcGlfcHJlbG9hZCh2b2lkICpjb250ZXh0KQoreworCXNtc3NwaV90eG1z Z190IG1zZzsKKwlzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlID0gKHNwaV9k ZXZpY2Vfc3QgKikgY29udGV4dDsKKworCXByZXBhcmVGb3JGV0RubChzcGlf ZGV2aWNlLT5waHlfZGV2KTsKKwlQREVCVUcoIlNlbmRpbmcgU1BJIGluaXQg c2VxdWVuY2VcbiIpOworCW1zZy5idWZmZXIgPSBzbXNzcGlfc3RhcnR1cDsK Kwltc2cuc2l6ZSA9IHNpemVvZihzbXNzcGlfc3RhcnR1cCk7CisJbXNnLmFs aWdubWVudCA9IDQ7CisJbXNnLmFkZF9wcmVhbWJsZSA9IDA7CisJbXNnLnBy ZXdyaXRlID0gTlVMTDsJLyogc21zc3BpcGh5X3JlZHVjZV9jbG9jazsgKi8K Kwltc2cucG9zdHdyaXRlID0gTlVMTDsKKworCXJldHVybiBzbXNzcGlfcXVl dWVfbWVzc2FnZV9hbmRfd2FpdChjb250ZXh0LCAmbXNnKTsKK30KKworc3Rh dGljIGludCBzbXNzcGlfcG9zdGxvYWQodm9pZCAqY29udGV4dCkKK3sKKwlz dHJ1Y3QgX01zZyB7CisJCXN0cnVjdCBTbXNNc2dIZHJfU1QgaGRyOworCQl1 MzIgZGF0YVszXTsKKwl9IE1zZyA9IHsKKwkJeworCQlNU0dfU01TX1NQSV9J TlRfTElORV9TRVRfUkVRLCAwLCBISUZfVEFTSywKKwkJCSAgICBzaXplb2Yo c3RydWN0IF9Nc2cpLCAwfSwgeworCQkwLCBpbnRyX3BpbiwgMH0KKwl9Owor CXNwaV9kZXZpY2Vfc3QgKnNwaV9kZXZpY2UgPSAoc3BpX2RldmljZV9zdCAq KSBjb250ZXh0OworCXNtc3NwaV90eG1zZ190IG1zZzsKKworCVBERUJVRygi U2VuZGluZyBTUEkgU2V0IEludGVycnVwdCBjb21tYW5kIHNlcXVlbmNlXG4i KTsKKwlmd0RubENvbXBsZXRlKHNwaV9kZXZpY2UtPnBoeV9kZXYsIDApOwor CW1zZy5idWZmZXIgPSAmTXNnOworCW1zZy5zaXplID0gc2l6ZW9mKE1zZyk7 CisJbXNnLmFsaWdubWVudCA9IFNQSV9QQUNLRVRfU0laRTsKKwltc2cuYWRk X3ByZWFtYmxlID0gMTsKKwltc2cucHJld3JpdGUgPSBOVUxMOworCW1zZy5w b3N0d3JpdGUgPSBOVUxMOwkvKiBzbXNzcGlwaHlfcmVzdG9yZV9jbG9jazsg Ki8KKworCXJldHVybiBzbXNzcGlfcXVldWVfbWVzc2FnZV9hbmRfd2FpdChj b250ZXh0LCAmbXNnKTsKK30KKworc3RhdGljIGludCBzbXNzcGlfd3JpdGUo dm9pZCAqY29udGV4dCwgdm9pZCAqdHhidWYsIHNpemVfdCBsZW4pCit7CisJ c21zc3BpX3R4bXNnX3QgbXNnOworCisJbXNnLmJ1ZmZlciA9IHR4YnVmOwor CW1zZy5zaXplID0gbGVuOworCW1zZy5wcmV3cml0ZSA9IE5VTEw7CisJbXNn LnBvc3R3cml0ZSA9IE5VTEw7CisKKwlpZiAobGVuID4gMHgxMDAwKSB7CisJ CS8qIFRoZSBGVyBpcyB0aGUgb25seSBsb25nIG1lc3NhZ2UuIERvIG5vdCBh ZGQgcHJlYW1ibGUsCisJCWFuZCBkbyBub3QgcGFkZCBpdCAqLworCQltc2cu YWxpZ25tZW50ID0gNDsKKwkJbXNnLmFkZF9wcmVhbWJsZSA9IDA7CisJCW1z Zy5wcmV3cml0ZSA9IHNtc2NoaXByZXNldDsKKwl9IGVsc2UgeworCQltc2cu YWxpZ25tZW50ID0gU1BJX1BBQ0tFVF9TSVpFOworCQltc2cuYWRkX3ByZWFt YmxlID0gMTsKKwl9CisJUERFQlVHKCJXcml0aW5nIG1lc3NhZ2UgdG8gIFNQ SS5cbiIpOworCVBERUJVRygibXNnIGhkcjogMHgleCwgMHgleCwgMHgleCwg MHgleCwgMHgleCwgMHgleCwgMHgleCwgMHgleC5cbiIsCisJICAgICAgICgo dTggKikgdHhidWYpWzBdLCAoKHU4ICopIHR4YnVmKVsxXSwgKCh1OCAqKSB0 eGJ1ZilbMl0sCisJICAgICAgICgodTggKikgdHhidWYpWzNdLCAoKHU4ICop IHR4YnVmKVs0XSwgKCh1OCAqKSB0eGJ1ZilbNV0sCisJICAgICAgICgodTgg KikgdHhidWYpWzZdLCAoKHU4ICopIHR4YnVmKVs3XSk7CisJcmV0dXJuIHNt c3NwaV9xdWV1ZV9tZXNzYWdlX2FuZF93YWl0KGNvbnRleHQsICZtc2cpOwor fQorCityeF9idWZmZXJfc3QgKmFsbG9jYXRlX3J4X2J1Zih2b2lkICpjb250 ZXh0LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAq YnVmOworCXNwaV9kZXZpY2Vfc3QgKnNwaV9kZXZpY2UgPSAoc3BpX2Rldmlj ZV9zdCAqKSBjb250ZXh0OworCWlmIChzaXplID4gUlhfQlVGRkVSX1NJWkUp IHsKKwkJUEVSUk9SKCJSZXF1ZXN0ZWQgc2l6ZSBpcyBiaWdnZXIgdGhhbiBt YXggYnVmZmVyIHNpemUuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWJ1 ZiA9IHNtc2NvcmVfZ2V0YnVmZmVyKHNwaV9kZXZpY2UtPmNvcmVkZXYpOwor CVBERUJVRygiUmVjaWV2ZWQgUnggYnVmICVwIHBoeXNpY2FsIDB4JXggKGNv bnRhaW5lZCBpbiAlcClcbiIsIGJ1Zi0+cCwKKwkgICAgICAgYnVmLT5waHlz LCBidWYpOworCisJLyogbm90ZTogdGhpcyBpcyBub3QgbWlzdGFrZSEgdGhl IHJ4X2J1ZmZlcl9zdCBpcyBpZGVudGljYWwgdG8gcGFydCBvZgorCSAgIHNt c2NvcmVfYnVmZmVyX3QgYW5kIHdlIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0 aGUgc3RhcnQgb2YgdGhlCisJICAgaWRlbnRpY2FsIHBhcnQgKi8KKwlyZXR1 cm4gKHJ4X2J1ZmZlcl9zdCAqKSAmYnVmLT5wOworfQorCitzdGF0aWMgdm9p ZCBmcmVlX3J4X2J1Zih2b2lkICpjb250ZXh0LCByeF9idWZmZXJfc3QgKmJ1 ZikKK3sKKwlzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlID0gKHNwaV9kZXZp Y2Vfc3QgKikgY29udGV4dDsKKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAq Y2IgPQorCSAgICAoc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QKKwkgICAgICop KGNvbnRhaW5lcl9vZigoKHZvaWQgKilidWYpLCBzdHJ1Y3Qgc21zY29yZV9i dWZmZXJfdCwgcCkpOworCVBERUJVRygiYnVmZmVyICVwIGlzIHJlbGVhc2Vk LlxuIiwgY2IpOworCXNtc2NvcmVfcHV0YnVmZmVyKHNwaV9kZXZpY2UtPmNv cmVkZXYsIGNiKTsKK30KKworLyohIFJlbGVhc2UgZGV2aWNlIFNUVUIKKwor XHBhcmFtW2luXQlkZXY6CQlkZXZpY2UgY29udHJvbCBibG9jaworXHJldHVy bgkJdm9pZAorKi8KK3N0YXRpYyB2b2lkIHNtc3NwaV9yZWxlYXNlKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlQREVCVUcoIm5vdGhpbmcgdG8gZG9cbiIp OworCS8qIE5vdGhpbmcgdG8gcmVsZWFzZSAqLworfQorCitzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSBzbXNzcGlfZGV2aWNlID0geworCS5uYW1l ID0gInNtc3NwaSIsCisJLmlkID0gMSwKKwkuZGV2ID0geworCQkucmVsZWFz ZSA9IHNtc3NwaV9yZWxlYXNlLAorCQl9LAorfTsKKworaW50IHNtc3NwaV9y ZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBzbXNkZXZpY2VfcGFyYW1zX3Qg cGFyYW1zOworCWludCByZXQ7CisJc3BpX2RldmljZV9zdCAqc3BpX2Rldmlj ZTsKKwlzcGlfZGV2X2NiX3N0IGNvbW1vbl9jYjsKKworCVBERUJVRygiZW50 ZXJpbmcgXG4iKTsKKworCXNwaV9kZXZpY2UgPQorCSAgICBrbWFsbG9jKHNp emVvZihzcGlfZGV2aWNlX3N0KSwgR0ZQX0tFUk5FTCk7CisJc3BpX2RldiA9 IHNwaV9kZXZpY2U7CisKKwlJTklUX0xJU1RfSEVBRCgmc3BpX2RldmljZS0+ dHhxdWV1ZSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIo JnNtc3NwaV9kZXZpY2UpOworCWlmIChyZXQgPCAwKSB7CisJCVBFUlJPUigi cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXJldHVy biByZXQ7CisJfQorCisJc3BpX2RldmljZS0+dHhidWYgPQorCSAgICBkbWFf YWxsb2NfY29oZXJlbnQoTlVMTCwgVFhfQlVGRkVSX1NJWkUsCisJCQkgICAg ICAgJnNwaV9kZXZpY2UtPnR4YnVmX3BoeV9hZGRyLAorCQkJICAgICAgIEdG UF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIXNwaV9kZXZpY2UtPnR4YnVm KSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIGRtYV9hbGxvY19jb2hlcmVu dCguLi4pIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0 ID0gLUVOT01FTTsKKwkJZ290byB0eGJ1Zl9lcnJvcjsKKwl9CisKKwlzcGlf ZGV2aWNlLT5waHlfZGV2ID0KKwkgICAgc21zc3BpcGh5X2luaXQoTlVMTCwg c21zc3BpX2ludF9oYW5kbGVyLCAmc3BpX2RldmljZSk7CisJaWYgKHNwaV9k ZXZpY2UtPnBoeV9kZXYgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIl cyBzbXNzcGlwaHlfaW5pdCguLi4pIGZhaWxlZFxuIiwgX19mdW5jX18pOwor CQlnb3RvIHBoeV9lcnJvcjsKKwl9CisKKwljb21tb25fY2IuYWxsb2NhdGVf cnhfYnVmID0gYWxsb2NhdGVfcnhfYnVmOworCWNvbW1vbl9jYi5mcmVlX3J4 X2J1ZiA9IGZyZWVfcnhfYnVmOworCWNvbW1vbl9jYi5tc2dfZm91bmRfY2Ig PSBtc2dfZm91bmQ7CisJY29tbW9uX2NiLnRyYW5zZmVyX2RhdGFfY2IgPSBz bXNzcGlidXNfeGZlcjsKKworCXJldCA9CisJICAgIHNtc3NwaWNvbW1vbl9p bml0KCZzcGlfZGV2aWNlLT5kZXYsIHNwaV9kZXZpY2UsIHNwaV9kZXZpY2Ut PnBoeV9kZXYsCisJCQkgICAgICAmY29tbW9uX2NiKTsKKwlpZiAocmV0KSB7 CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHNtc3NwaXBoeV9pbml0KC4uLikg ZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gY29tbW9uX2Vycm9yOwor CX0KKworCS8qIHJlZ2lzdGVyIGluIHNtc2NvcmUgKi8KKwltZW1zZXQoJnBh cmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOworCXBhcmFtcy5jb250ZXh0ID0g c3BpX2RldmljZTsKKwlwYXJhbXMuZGV2aWNlID0gJnNtc3NwaV9kZXZpY2Uu ZGV2OworCXBhcmFtcy5idWZmZXJfc2l6ZSA9IFJYX0JVRkZFUl9TSVpFOwor CXBhcmFtcy5udW1fYnVmZmVycyA9IE5VTV9SWF9CVUZGRVJTOworCXBhcmFt cy5mbGFncyA9IFNNU19ERVZJQ0VfTk9UX1JFQURZOworCXBhcmFtcy5zZW5k cmVxdWVzdF9oYW5kbGVyID0gc21zc3BpX3dyaXRlOworCXN0cmNweShwYXJh bXMuZGV2cGF0aCwgInNwaSIpOworCXBhcmFtcy5kZXZpY2VfdHlwZSA9IGRl ZmF1bHRfdHlwZTsKKworCWlmICgwKSB7CisJCS8qIGRldmljZSBmYW1pbHkg Ki8KKwkJLyogcGFyYW1zLnNldG1vZGVfaGFuZGxlciA9IHNtc3NwaV9zZXRt b2RlOyAqLworCX0gZWxzZSB7CisJCXBhcmFtcy5mbGFncyA9CisJCSAgICBT TVNfREVWSUNFX0ZBTUlMWTIgfCBTTVNfREVWSUNFX05PVF9SRUFEWSB8CisJ CSAgICBTTVNfUk9NX05PX1JFU1BPTlNFOworCQlwYXJhbXMucHJlbG9hZF9o YW5kbGVyID0gc21zc3BpX3ByZWxvYWQ7CisJCXBhcmFtcy5wb3N0bG9hZF9o YW5kbGVyID0gc21zc3BpX3Bvc3Rsb2FkOworCX0KKworCXJldCA9IHNtc2Nv cmVfcmVnaXN0ZXJfZGV2aWNlKCZwYXJhbXMsICZzcGlfZGV2aWNlLT5jb3Jl ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIl cyBzbXNjb3JlX3JlZ2lzdGVyX2RldmljZSguLi4pIGZhaWxlZFxuIiwKKwkJ ICAgICAgIF9fZnVuY19fKTsKKwkJZ290byByZWdfZGV2aWNlX2Vycm9yOwor CX0KKworCXJldCA9IHNtc2NvcmVfc3RhcnRfZGV2aWNlKHNwaV9kZXZpY2Ut PmNvcmVkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lO Rk8gIiVzIHNtc2NvcmVfc3RhcnRfZGV2aWNlKC4uLikgZmFpbGVkXG4iLAor CQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIHN0YXJ0X2RldmljZV9lcnJv cjsKKwl9CisKKwlQREVCVUcoImV4aXRpbmdcbiIpOworCXJldHVybiAwOwor CitzdGFydF9kZXZpY2VfZXJyb3I6CisJc21zY29yZV91bnJlZ2lzdGVyX2Rl dmljZShzcGlfZGV2aWNlLT5jb3JlZGV2KTsKKworcmVnX2RldmljZV9lcnJv cjoKKworY29tbW9uX2Vycm9yOgorCXNtc3NwaXBoeV9kZWluaXQoc3BpX2Rl dmljZS0+cGh5X2Rldik7CisKK3BoeV9lcnJvcjoKKwlkbWFfZnJlZV9jb2hl cmVudChOVUxMLCBUWF9CVUZGRVJfU0laRSwgc3BpX2RldmljZS0+dHhidWYs CisJCQkgIHNwaV9kZXZpY2UtPnR4YnVmX3BoeV9hZGRyKTsKKwordHhidWZf ZXJyb3I6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnNtc3NwaV9k ZXZpY2UpOworCisJUERFQlVHKCJleGl0aW5nIGVycm9yICVkXG4iLCByZXQp OworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzbXNzcGlfdW5yZWdpc3Rl cih2b2lkKQoreworCXNwaV9kZXZpY2Vfc3QgKnNwaV9kZXZpY2UgPSBzcGlf ZGV2OworCVBERUJVRygiZW50ZXJpbmdcbiIpOworCisJLyogc3RvcCBpbnRl cnJ1cHRzICovCisJc21zc3BpcGh5X2RlaW5pdChzcGlfZGV2aWNlLT5waHlf ZGV2KTsKKwlzbXNjb3JlX3VucmVnaXN0ZXJfZGV2aWNlKHNwaV9kZXZpY2Ut PmNvcmVkZXYpOworCisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVFhfQlVG RkVSX1NJWkUsIHNwaV9kZXZpY2UtPnR4YnVmLAorCQkJICBzcGlfZGV2aWNl LT50eGJ1Zl9waHlfYWRkcik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdp c3Rlcigmc21zc3BpX2RldmljZSk7CisJUERFQlVHKCJleGl0aW5nXG4iKTsK K30KZGlmZiAtdU5yIHY0bC1kdmItYzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZl cnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaXBoeS5oIHY0bC1kdmItYzVmOTc2 Y2FiMDExXzAwMDMvbGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21z c3BpcGh5LmgKLS0tIHY0bC1kdmItYzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZl cnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaXBoeS5oCTE5NzAtMDEtMDEgMDI6 MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyB2NGwtZHZiLWM1Zjk3NmNhYjAx MV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaXBo eS5oCTIwMDgtMTEtMTkgMTM6MjU6MDMuMDAwMDAwMDAwICswMjAwCkBAIC0w LDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1NpYW5vIE1v YmlsZSBTaWxpY29uLCBJbmMuCitNRFRWIHJlY2VpdmVyIGtlcm5lbCBtb2R1 bGVzLgorQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIFVyaSBTaGtvbG5pawor CitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiti dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fU01TX1NQSV9QSFlf SF9fCisjZGVmaW5lIF9fU01TX1NQSV9QSFlfSF9fCisKK3ZvaWQgc21zc3Bp YnVzX3hmZXIodm9pZCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqdHhidWYs CisJCSAgICB1bnNpZ25lZCBsb25nIHR4YnVmX3BoeV9hZGRyLCB1bnNpZ25l ZCBjaGFyICpyeGJ1ZiwKKwkJICAgIHVuc2lnbmVkIGxvbmcgcnhidWZfcGh5 X2FkZHIsIGludCBsZW4pOwordm9pZCAqc21zc3BpcGh5X2luaXQodm9pZCAq Y29udGV4dCwgdm9pZCAoKnNtc3NwaV9pbnRlcnJ1cHRIYW5kbGVyKSAodm9p ZCAqKSwKKwkJICAgICB2b2lkICppbnRyX2NvbnRleHQpOwordm9pZCBzbXNz cGlwaHlfZGVpbml0KHZvaWQgKmNvbnRleHQpOwordm9pZCBzbXNjaGlwcmVz ZXQodm9pZCAqY29udGV4dCk7Cit2b2lkIFdyaXRlRld0b1N0ZWxsYXIodm9p ZCAqcFNwaVBoeSwgdW5zaWduZWQgY2hhciAqcEZXLCB1bnNpZ25lZCBsb25n IExlbik7Cit2b2lkIHByZXBhcmVGb3JGV0RubCh2b2lkICpwU3BpUGh5KTsK K3ZvaWQgZndEbmxDb21wbGV0ZSh2b2lkICpjb250ZXh0LCBpbnQgQXBwKTsK KworI2VuZGlmIC8qIF9fU01TX1NQSV9QSFlfSF9fICovCmRpZmYgLXVOciB2 NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9z aWFuby9zbXNzcGlwaHlfcHhhLmMgdjRsLWR2Yi1jNWY5NzZjYWIwMTFfMDAw My9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGlwaHlfcHhh LmMKLS0tIHY0bC1kdmItYzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVk aWEvZHZiL3NpYW5vL3Ntc3NwaXBoeV9weGEuYwkxOTcwLTAxLTAxIDAyOjAw OjAwLjAwMDAwMDAwMCArMDIwMAorKysgdjRsLWR2Yi1jNWY5NzZjYWIwMTFf MDAwMy9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGlwaHlf cHhhLmMJMjAwOC0xMS0xOSAxMzoyNTowMy4wMDAwMDAwMDAgKzAyMDAKQEAg LTAsMCArMSw0MzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1NpYW5v IE1vYmlsZSBTaWxpY29uLCBJbmMuCitNRFRWIHJlY2VpdmVyIGtlcm5lbCBt b2R1bGVzLgorQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIFVyaSBTaGtvbG5p aworCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQWEFfMzEwX0xWCisK KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vaXJx Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaWZkZWYgUFhBXzMx MF9MVgorI2luY2x1ZGUgPGFzbS9hcmNoL3NzcC5oPgorI2luY2x1ZGUgPGFz bS9hcmNoL21mcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNp bmNsdWRlIDxhc20vYXJjaC9weGEzeHhfZ3Bpby5oPgorI2VuZGlmCisjaW5j bHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJx Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRl IDxhc20vZG1hLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KKyNpbmNsdWRlICJzbXNkYmdfcHJuLmgiCisKKyNpZmRlZiBQWEFfMzEw X0xWCisKKyNkZWZpbmUgU1NQX1BPUlQgNAorI2RlZmluZSBTU1BfQ0tFTiBD S0VOX1NTUDQKKyNkZWZpbmUgU01TX0lSUV9HUElPIE1GUF9QSU5fR1BJTzkz CisKKyNpZiAoU1NQX1BPUlQgPT0gMSkKKyNkZWZpbmUgU0RDTVJfUlggRFJD TVJSWFNTRFIKKyNkZWZpbmUgU0RDTVJfVFggRFJDTVJUWFNTRFIKKyNlbHNl CisjaWYgKFNTUF9QT1JUID09IDIpCisjZGVmaW5lIFNEQ01SX1JYIERSQ01S MTUKKyNkZWZpbmUgU0RDTVJfVFggRFJDTVIxNgorI2Vsc2UKKyNpZiAoU1NQ X1BPUlQgPT0gMykKKyNkZWZpbmUgU0RDTVJfUlggRFJDTVI2NgorI2RlZmlu ZSBTRENNUl9UWCBEUkNNUjY3CisjZWxzZQorI2lmIChTU1BfUE9SVCA9PSA0 KQorI2RlZmluZSBTRENNUl9SWCBEUkNNUlJYU0FEUgorI2RlZmluZSBTRENN Ul9UWCBEUkNNUlRYU0FEUgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2Vu ZGlmCisjZWxzZSAvKlBYQV8zMTBfTFYgKi8KKyNkZWZpbmUgU1NQX1BPUlQg MQorI2RlZmluZSBTRENNUl9SWCBEUkNNUlJYU1NEUgorI2RlZmluZSBTRENN Ul9UWCBEUkNNUlRYU1NEUgorCisjZW5kaWYgLypQWEFfMzEwX0xWICovCisK Ky8qIE1hY3JvcyBkZWZpbmluZyBwaHlzaWNhbCBsYXllciBiZWhhdmlvdXIq LworI2lmZGVmIFBYQV8zMTBfTFYKKyNkZWZpbmUgQ0xPQ0tfRkFDVE9SIDEK KyNlbHNlIC8qUFhBXzMxMF9MViAqLworI2RlZmluZSBDTE9DS19GQUNUT1Ig MgorI2VuZGlmIC8qUFhBXzMxMF9MViAqLworCisvKiBNYWNyb3MgZm9yIGNv ZGluZyByZXVzZSAqLworCisvKiEgbWFjcm8gdG8gYWxpZ24gdGhlIGRpdmlk ZXIgdG8gdGhlIHByb3BlciBvZmZzZXQgaW4gdGhlIHJlZ2lzdGVyIGJpdHMg Ki8KKyNkZWZpbmUgQ0xPQ0tfRElWSURFUihpKSgoaS0xKTw8OCkJLyogMS00 MDk2ICovCisKKy8qISBETUEgcmVsYXRlZCBtYWNyb3MgKi8KKyNkZWZpbmUg RE1BX0lOVF9NQVNLIChEQ1NSX0VORElOVFIgfCBEQ1NSX1NUQVJUSU5UUiB8 IERDU1JfQlVTRVJSKQorI2RlZmluZSBSRVNFVF9ETUFfQ0hBTk5FTCAoRENT Ul9OT0RFU0MgfCBETUFfSU5UX01BU0spCisKKyNkZWZpbmUgU1NQX1RJTUVP VVRfU0NBTEUgKDc2OSkKKyNkZWZpbmUgU1NQX1RJTUVPVVQoeCkgKCh4KjEw MDAwKS9TU1BfVElNRU9VVF9TQ0FMRSkKKworI2RlZmluZSBTUElfUEFDS0VU X1NJWkUgMjU2CisKKy8qIHBoeXNpY2FsIGxheWVyIHZhcmlhYmxlcyAqLwor LyohIGdsb2JhbCBidXMgZGF0YSAqLworc3RydWN0IHsKKwlzdHJ1Y3Qgc3Nw X2RldiBzc3BkZXY7CS8qITwgc3NwIHBvcnQgY29uZmlndXJhdGlvbiAqLwor CXN0cnVjdCBjb21wbGV0aW9uIHRyYW5zZmVyX2luX3Byb2Nlc3M7CisJdm9p ZCAoKmludGVycnVwdEhhbmRsZXIpICh2b2lkICopOworCXZvaWQgKmludHJf Y29udGV4dDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CS8qITwgZGV2aWNlIG1v ZGVsIHN0dWZmICovCisJaW50IHJ4X2RtYV9jaGFubmVsOworCWludCB0eF9k bWFfY2hhbm5lbDsKKwlpbnQgcnhfYnVmX2xlbjsKKwlpbnQgdHhfYnVmX2xl bjsKK30gc3BpcGh5X2Rldl9zdDsKKworLyohCitpbnZlcnQgdGhlIGVuZGlh bm5lc3Mgb2YgYSBzaW5nbGUgMzJpdCBpbnRlZ2VyCisKK1xwYXJhbVtpbl0J CXU6IHdvcmQgdG8gaW52ZXJ0CisKK1xyZXR1cm4JCXRoZSBpbnZlcnRlZCB3 b3JkCisqLworc3RhdGljIGlubGluZSB1MzIgaW52ZXJ0X2JvKHUzMiB1KQor eworCXJldHVybiAoKHUgJiAweGZmKSA8PCAyNCkgfCAoKHUgJiAweGZmMDAp IDw8IDgpIHwgKCh1ICYgMHhmZjAwMDApID4+IDgpCisJCXwgKCh1ICYgMHhm ZjAwMDAwMCkgPj4gMjQpOworfQorCisvKiEKK2ludmVydCB0aGUgZW5kaWFu bmVzcyBvZiBhIGRhdGEgYnVmZmVyCisKK1xwYXJhbVtpbl0JCWJ1ZjogYnVm ZmVyIHRvIGludmVydAorXHBhcmFtW2luXQkJbGVuOiBidWZmZXIgbGVuZ3Ro CisKK1xyZXR1cm4JCXRoZSBpbnZlcnRlZCB3b3JkCisqLworCitzdGF0aWMg aW50IGludmVydF9lbmRpYW5uZXNzKGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sK KwlpbnQgaTsKKwl1MzIgKnB0ciA9ICh1MzIgKikgYnVmOworCisJbGVuID0g KGxlbiArIDMpIC8gNDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHB0 cisrKQorCQkqcHRyID0gaW52ZXJ0X2JvKCpwdHIpOworCisJcmV0dXJuIDQg KiAoKGxlbiArIDMpICYgKH4zKSk7Cit9CisKKy8qISBNYXAgRE1BIGJ1ZmZl cnMgd2hlbiByZXF1ZXN0IHN0YXJ0cworCitccmV0dXJuCWVycm9yIHN0YXR1 cworKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9tYXBfYnVmKHNwaXBo eV9kZXZfc3QgKnNwaXBoeV9kZXYsIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJ CQkgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBsb25nIHBoeWFkZHI7 CisJLyogbWFwIGRtYSBidWZmZXJzICovCisJaWYgKCFidWYpIHsKKwkJUEVS Uk9SKCIgTlVMTCBidWZmZXJzIHRvIG1hcFxuIik7CisJCXJldHVybiAwOwor CX0KKwkvKiBtYXAgYnVmZmVyICovCisJcGh5YWRkciA9IGRtYV9tYXBfc2lu Z2xlKHNwaXBoeV9kZXYtPmRldiwgYnVmLCBsZW4sIGRpcmVjdGlvbik7CisJ aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBoeWFkZHIpKSB7CisJCVBFUlJPUigi ZXhpdGluZyAgd2l0aCBlcnJvclxuIik7CisJCXJldHVybiAwOworCX0KKwly ZXR1cm4gcGh5YWRkcjsKK30KKworc3RhdGljIGlycXJldHVybl90IHNwaWJ1 c19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29udGV4dCkKK3sKKwlzcGlw aHlfZGV2X3N0ICpzcGlwaHlfZGV2ID0gKHNwaXBoeV9kZXZfc3QgKikgY29u dGV4dDsKKwlQREVCVUcoInJlY2lldmVkIGludGVycnVwdCBmcm9tIGRldmlj ZSBkZXY9JXAuXG4iLCBjb250ZXh0KTsKKwlpZiAoc3BpcGh5X2Rldi0+aW50 ZXJydXB0SGFuZGxlcikKKwkJc3BpcGh5X2Rldi0+aW50ZXJydXB0SGFuZGxl cihzcGlwaHlfZGV2LT5pbnRyX2NvbnRleHQpOworCXJldHVybiBJUlFfSEFO RExFRDsKKworfQorCisvKiEJRE1BIGNvbnRyb2xsZXIgY2FsbGJhY2sgLSBj YWxsZWQgb25seSBvbiBCVVMgZXJyb3IgY29uZGl0aW9uCisKK1xwYXJhbVtp bl0JY2hhbm5lbDogRE1BIGNoYW5uZWwgd2l0aCBlcnJvcgorXHBhcmFtW2lu XQlkYXRhOiBVbnVzZWQKK1xwYXJhbVtpbl0JcmVnczogVW51c2VkCitccmV0 dXJuCQl2b2lkCisqLworc3RhdGljIHZvaWQgc3BpYnVzX2RtYV9oYW5kbGVy KGludCBjaGFubmVsLCB2b2lkICpjb250ZXh0KQoreworCXNwaXBoeV9kZXZf c3QgKnNwaXBoeV9kZXYgPSAoc3BpcGh5X2Rldl9zdCAqKSBjb250ZXh0Owor CXUzMiBpcnFfc3RhdHVzID0gRENTUihjaGFubmVsKSAmIERNQV9JTlRfTUFT SzsKKworCVBERUJVRygicmVjaWV2ZWQgaW50ZXJydXB0IGZyb20gZG1hIGNo YW5uZWwgJWQgaXJxIHN0YXR1cyAleC5cbiIsCisJICAgICAgIGNoYW5uZWws IGlycV9zdGF0dXMpOworCWlmIChpcnFfc3RhdHVzICYgRENTUl9CVVNFUlIp IHsKKwkJUEVSUk9SKCJidXMgZXJyb3IhISEgcmVzZXR0aW5nIGNoYW5uZWwg JWRcbiIsIGNoYW5uZWwpOworCisJCURDU1Ioc3BpcGh5X2Rldi0+cnhfZG1h X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJCURDU1Ioc3BpcGh5 X2Rldi0+dHhfZG1hX2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJ fQorCURDU1Ioc3BpcGh5X2Rldi0+cnhfZG1hX2NoYW5uZWwpID0gUkVTRVRf RE1BX0NIQU5ORUw7CisJY29tcGxldGUoJnNwaXBoeV9kZXYtPnRyYW5zZmVy X2luX3Byb2Nlc3MpOworfQorCit2b2lkIHNtc3NwaWJ1c194ZmVyKHZvaWQg KmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKnR4YnVmLAorCQkgICAgdW5zaWdu ZWQgbG9uZyB0eGJ1Zl9waHlfYWRkciwgdW5zaWduZWQgY2hhciAqcnhidWYs CisJCSAgICB1bnNpZ25lZCBsb25nIHJ4YnVmX3BoeV9hZGRyLCBpbnQgbGVu KQoreworCS8qIERNQSBidXJzdCBpcyA4IGJ5dGVzLCB0aGVyZWZvcmUgd2Ug bmVlZCB0bXAgYnVmZmVyIHRoYXQgc2l6ZS4gKi8KKwl1bnNpZ25lZCBsb25n IHRtcFsyXTsKKwl1bnNpZ25lZCBsb25nIHR4ZG1hOworCXNwaXBoeV9kZXZf c3QgKnNwaXBoeV9kZXYgPSAoc3BpcGh5X2Rldl9zdCAqKSBjb250ZXh0Owor CisJLyogcHJvZ3JhbSB0aGUgY29udHJvbGxlciAqLworCWlmICh0eGJ1ZikK KwkJaW52ZXJ0X2VuZGlhbm5lc3ModHhidWYsIGxlbik7CisKKwl0bXBbMF0g PSAtMTsKKwl0bXBbMV0gPSAtMTsKKworCS8qIG1hcCBSWCBidWZmZXIgKi8K KworCWlmICghdHhidWYpCisJCXR4ZG1hID0KKwkJICAgIGRtYV9tYXBfYnVm KHNwaXBoeV9kZXYsIChjaGFyICopdG1wLCBzaXplb2YodG1wKSwKKwkJCQlE TUFfVE9fREVWSUNFKTsKKwllbHNlCisJCXR4ZG1hID0gdHhidWZfcGh5X2Fk ZHI7CisKKwlpbml0X2NvbXBsZXRpb24oJnNwaXBoeV9kZXYtPnRyYW5zZmVy X2luX3Byb2Nlc3MpOworCS8qIGNvbmZpZ3VyZSBETUEgQ29udHJvbGxlciAq LworCURDU1Ioc3BpcGh5X2Rldi0+cnhfZG1hX2NoYW5uZWwpID0gUkVTRVRf RE1BX0NIQU5ORUw7CisJRFNBRFIoc3BpcGh5X2Rldi0+cnhfZG1hX2NoYW5u ZWwpID0gX19QUkVHKFNTRFJfUChTU1BfUE9SVCkpOworCURUQURSKHNwaXBo eV9kZXYtPnJ4X2RtYV9jaGFubmVsKSA9IHJ4YnVmX3BoeV9hZGRyOworCURD TUQoc3BpcGh5X2Rldi0+cnhfZG1hX2NoYW5uZWwpID0gRENNRF9JTkNUUkdB RERSIHwgRENNRF9GTE9XU1JDCisJICAgIHwgRENNRF9XSURUSDQgfCBEQ01E X0VORElSUUVOIHwgRENNRF9CVVJTVDggfCBsZW47CisJUERFQlVHKCJyeCBj aGFubmVsPSVkLCBzcmM9MHgleCwgZHN0PTB4JXgsIGNtZD0weCV4XG4iLAor CSAgICAgICBzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbCwgX19QUkVHKFNT RFJfUChTU1BfUE9SVCkpLAorCSAgICAgICAodW5zaWduZWQgaW50KXJ4YnVm X3BoeV9hZGRyLCBEQ01EKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsKSk7 CisJc3BpcGh5X2Rldi0+cnhfYnVmX2xlbiA9IGxlbjsKKworCURDU1Ioc3Bp cGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7 CisJRFRBRFIoc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwpID0gX19QUkVH KFNTRFJfUChTU1BfUE9SVCkpOworCURTQURSKHNwaXBoeV9kZXYtPnR4X2Rt YV9jaGFubmVsKSA9IHR4ZG1hOworCWlmICh0eGJ1ZikgeworCQlEQ01EKHNw aXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKSA9CisJCSAgICBEQ01EX0lOQ1NS Q0FERFIgfCBEQ01EX0ZMT1dUUkcgfCBEQ01EX1dJRFRINAorCQkgICAgLyog fCBEQ01EX0VORElSUUVOICovICB8IERDTURfQlVSU1Q4IHwgbGVuOworCQlz cGlwaHlfZGV2LT50eF9idWZfbGVuID0gbGVuOworCX0gZWxzZSB7CisJCURD TUQoc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwpID0gRENNRF9GTE9XVFJH CisJCSAgICB8IERDTURfV0lEVEg0IC8qIHwgRENNRF9FTkRJUlFFTiAqLyAg fCBEQ01EX0JVUlNUOCB8IGxlbjsKKwkJc3BpcGh5X2Rldi0+dHhfYnVmX2xl biA9IDQ7CisJfQorCisJUERFQlVHKCJ0eCBjaGFubmVsPSVkLCBzcmM9MHgl eCwgZHN0PTB4JXgsIGNtZD0weCV4XG4iLAorCSAgICAgICBzcGlwaHlfZGV2 LT50eF9kbWFfY2hhbm5lbCwgKHVuc2lnbmVkIGludCl0eGRtYSwKKwkgICAg ICAgX19QUkVHKFNTRFJfUChTU1BfUE9SVCkpLCBEQ01EKHNwaXBoeV9kZXYt PnR4X2RtYV9jaGFubmVsKSk7CisJLyogREFMR04gLSBETUEgQUxJR05NRU5U IFJFRy4gKi8KKwlpZiAocnhidWZfcGh5X2FkZHIgJiAweDcpCisJCURBTEdO IHw9ICgxIDw8IHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsKTsKKwllbHNl CisJCURBTEdOICY9IH4oMSA8PCBzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5l bCk7CisJaWYgKHR4ZG1hICYgMHg3KQorCQlEQUxHTiB8PSAoMSA8PCBzcGlw aHlfZGV2LT50eF9kbWFfY2hhbm5lbCk7CisJZWxzZQorCQlEQUxHTiAmPSB+ KDEgPDwgc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwpOworCisJLyogU3Rh cnQgRE1BIGNvbnRyb2xsZXIgKi8KKwlEQ1NSKHNwaXBoeV9kZXYtPnJ4X2Rt YV9jaGFubmVsKSB8PSBEQ1NSX1JVTjsKKwlEQ1NSKHNwaXBoeV9kZXYtPnR4 X2RtYV9jaGFubmVsKSB8PSBEQ1NSX1JVTjsKKwlQREVCVUcoIkRNQSBydW5u aW5nLiB3YWl0IGZvciBjb21wbGV0aW9uLlxuIik7CisJd2FpdF9mb3JfY29t cGxldGlvbigmc3BpcGh5X2Rldi0+dHJhbnNmZXJfaW5fcHJvY2Vzcyk7CisJ UERFQlVHKCJETUEgY29tcGxldGUuXG4iKTsKKwlpbnZlcnRfZW5kaWFubmVz cyhyeGJ1ZiwgbGVuKTsKK30KKwordm9pZCBzbXNjaGlwcmVzZXQodm9pZCAq Y29udGV4dCkKK3sKKworfQorCit2b2lkICpzbXNzcGlwaHlfaW5pdCh2b2lk ICpjb250ZXh0LCB2b2lkICgqc21zc3BpX2ludGVycnVwdEhhbmRsZXIpICh2 b2lkICopLAorCQkgICAgIHZvaWQgKmludHJfY29udGV4dCkKK3sKKwlpbnQg cmV0OworCXNwaXBoeV9kZXZfc3QgKnNwaXBoeV9kZXY7CisJdTMyIG1vZGUg PSAwLCBmbGFncyA9IDAsIHBzcF9mbGFncyA9IDAsIHNwZWVkID0gMDsKKwlQ REVCVUcoImVudGVyaW5nXG4iKTsKKworCXNwaXBoeV9kZXYgPSBrbWFsbG9j KHNpemVvZihzcGlwaHlfZGV2X3N0KSwgR0ZQX0tFUk5FTCk7CisKKwlyZXQg PSBzc3BfaW5pdCgmc3BpcGh5X2Rldi0+c3NwZGV2LCBTU1BfUE9SVCwgMCk7 CisJaWYgKHJldCkgeworCQlQRVJST1IoInNzcF9pbml0IGZhaWxlZC4gZXJy b3IgJWQiLCByZXQpOworCQlnb3RvIGVycm9yX3NzcGluaXQ7CisJfQorI2lm ZGVmIFBYQV8zMTBfTFYKKwlweGEzeHhfbWZwX3NldF9hZmRzKFNNU19JUlFf R1BJTywgTUZQX0FGMCwgTUZQX0RTMDNYKTsKKwlweGEzeHhfZ3Bpb19zZXRf cmlzaW5nX2VkZ2VfZGV0ZWN0KFNNU19JUlFfR1BJTywgMSk7CisJcHhhM3h4 X2dwaW9fc2V0X2RpcmVjdGlvbihTTVNfSVJRX0dQSU8sIEdQSU9fRElSX0lO KTsKKyNlbHNlIC8qUFhBXzMxMF9MViAqLworCS8qIHJlY2VpdmUgaW5wdXQg aW50ZXJydXB0cyBmcm9tIHRoZSBTTVMgMTAwMCBvbiBKMzIgcGluIDExICov CisJcHhhX2dwaW9fbW9kZSgyMiB8IEdQSU9fSU4pOworI2VuZGlmIC8qUFhB XzMxMF9MViAqLworCXNwZWVkID0gQ0xPQ0tfRElWSURFUihDTE9DS19GQUNU T1IpOyAvKiBjbG9jayBkaXZpc29yIGZvciB0aGlzIG1vZGUgKi8KKwkvKiAz MmJpdCB3b3JkcyBpbiB0aGUgZmlmbyAqLworCW1vZGUgPSBTU0NSMF9Nb3Rv cm9sYSB8IFNTQ1IwX0RhdGFTaXplKDE2KSB8IFNTQ1IwX0VEU1M7CisJLyog U1NDUjEgPSBmbGFncyAqLworCWZsYWdzID0gU1NDUjFfUnhUcmVzaCgxKSB8 IFNTQ1IxX1R4VHJlc2goMSkgfCBTU0NSMV9UU1JFIHwKKwkgU1NDUjFfUlNS RSB8IFNTQ1IxX1JJRSB8IFNTQ1IxX1RSQUlMOwkvKiB8IFNTQ1IxX1RJRSAq LworCisJc3NwX2NvbmZpZygmc3BpcGh5X2Rldi0+c3NwZGV2LCBtb2RlLCBm bGFncywgcHNwX2ZsYWdzLCBzcGVlZCk7CisJc3NwX2Rpc2FibGUoJihzcGlw aHlfZGV2LT5zc3BkZXYpKTsKKyNpZmRlZiBQWEFfMzEwX0xWCisKKwlweGEz eHhfbWZwX3NldF9hZmRzKE1GUF9QSU5fR1BJTzk1LCBNRlBfQUYxLCBNRlBf RFMwM1gpOworCXB4YTN4eF9tZnBfc2V0X2FmZHMoTUZQX1BJTl9HUElPOTYs IE1GUF9BRjEsIE1GUF9EUzAzWCk7CisJcHhhM3h4X21mcF9zZXRfYWZkcyhN RlBfUElOX0dQSU85NywgTUZQX0FGMSwgTUZQX0RTMDNYKTsKKwlweGEzeHhf bWZwX3NldF9hZmRzKE1GUF9QSU5fR1BJTzk4LCBNRlBfQUYxLCBNRlBfRFMw M1gpOworI2Vsc2UgLypQWEFfMzEwX0xWICovCisJcHhhX2dwaW9fbW9kZShH UElPMjNfU0NMS19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMjRfU0ZSTV9N RCk7CisJcHhhX2dwaW9fbW9kZShHUElPMjVfU1RYRF9NRCk7CisJcHhhX2dw aW9fbW9kZShHUElPMjZfU1JYRF9NRCk7CisjZW5kaWYgLypQWEFfMzEwX0xW ICovCisJLyogc2V0dXAgdGhlIGRtYSAqLworCXNwaXBoeV9kZXYtPnJ4X2Rt YV9jaGFubmVsID0KKwkgICAgcHhhX3JlcXVlc3RfZG1hKCJzcGlidXNkcnZf cngiLCBETUFfUFJJT19ISUdILCBzcGlidXNfZG1hX2hhbmRsZXIsCisJCQkg ICAgc3BpcGh5X2Rldik7CisJaWYgKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFu bmVsIDwgMCkgeworCQlyZXQgPSAtRUJVU1k7CisJCVBFUlJPUigiQ291bGQg bm90IGdldCBSWCBETUEgY2hhbm5lbC5cbiIpOworCQlnb3RvIGVycm9yX3J4 ZG1hOworCX0KKwlzcGlwaHlfZGV2LT50eF9kbWFfY2hhbm5lbCA9CisJICAg IHB4YV9yZXF1ZXN0X2RtYSgic3BpYnVzZHJ2X3R4IiwgRE1BX1BSSU9fSElH SCwgc3BpYnVzX2RtYV9oYW5kbGVyLAorCQkJICAgIHNwaXBoeV9kZXYpOwor CWlmIChzcGlwaHlfZGV2LT50eF9kbWFfY2hhbm5lbCA8IDApIHsKKwkJcmV0 ID0gLUVCVVNZOworCQlQRVJST1IoIkNvdWxkIG5vdCBnZXQgVFggRE1BIGNo YW5uZWwuXG4iKTsKKwkJZ290byBlcnJvcl90eGRtYTsKKwl9CisKKwlTRENN Ul9SWCA9IERSQ01SX01BUFZMRCB8IHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFu bmVsOworCVNEQ01SX1RYID0gRFJDTVJfTUFQVkxEIHwgc3BpcGh5X2Rldi0+ dHhfZG1hX2NoYW5uZWw7CisKKwlQREVCVUcoImRtYSByeCBjaGFubmVsOiAl ZCwgZG1hIHR4IGNoYW5uZWw6ICVkXG4iLAorCSAgICAgICBzcGlwaHlfZGV2 LT5yeF9kbWFfY2hhbm5lbCwgc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwp OworCS8qIGVuYWJsZSB0aGUgY2xvY2sgKi8KKworCXNwaXBoeV9kZXYtPmlu dGVycnVwdEhhbmRsZXIgPSBzbXNzcGlfaW50ZXJydXB0SGFuZGxlcjsKKwlz cGlwaHlfZGV2LT5pbnRyX2NvbnRleHQgPSBpbnRyX2NvbnRleHQ7CisjaWZk ZWYgUFhBXzMxMF9MVgorCXNldF9pcnFfdHlwZShJUlFfR1BJTyhNRlAyR1BJ TyhTTVNfSVJRX0dQSU8pKSwgSVJRVF9GQUxMSU5HKTsKKwlyZXQgPQorCSAg ICByZXF1ZXN0X2lycShJUlFfR1BJTyhNRlAyR1BJTyhTTVNfSVJRX0dQSU8p KSwgc3BpYnVzX2ludGVycnVwdCwKKwkJCVNBX0lOVEVSUlVQVCwgIlNNU1NQ SSIsIHNwaXBoeV9kZXYpOworI2Vsc2UgLypQWEFfMzEwX0xWICovCisJc2V0 X2lycV90eXBlKElSUV9HUElPKDIyKSwgSVJRVF9GQUxMSU5HKTsKKwlyZXQg PQorCSAgICByZXF1ZXN0X2lycShJUlFfR1BJTygyMiksIHNwaWJ1c19pbnRl cnJ1cHQsIFNBX0lOVEVSUlVQVCwgIlNNU1NQSSIsCisJCQkmKGdfc3BpZGF0 YS5zc3BkZXYpKTsKKyNlbmRpZiAvKlBYQV8zMTBfTFYgKi8KKwlpZiAocmV0 KSB7CisJCVBFUlJPUigiQ291bGQgbm90IGdldCBpbnRlcnJ1cHQgZm9yIFNN UyBkZXZpY2UuIHN0YXR1cyA9JWRcbiIsCisJCSAgICAgICByZXQpOworCQln b3RvIGVycm9yX2lycTsKKwl9CisKKwlzc3BfZW5hYmxlKCYoc3BpcGh5X2Rl di0+c3NwZGV2KSk7CisJUERFQlVHKCJleGl0aW5nXG4iKTsKKwlyZXR1cm4g c3BpcGh5X2RldjsKK2Vycm9yX2lycToKKwlpZiAoc3BpcGh5X2Rldi0+dHhf ZG1hX2NoYW5uZWwgPj0gMCkKKwkJcHhhX2ZyZWVfZG1hKHNwaXBoeV9kZXYt PnR4X2RtYV9jaGFubmVsKTsKKworZXJyb3JfdHhkbWE6CisJaWYgKHNwaXBo eV9kZXYtPnJ4X2RtYV9jaGFubmVsID49IDApCisJCXB4YV9mcmVlX2RtYShz cGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbCk7CisKK2Vycm9yX3J4ZG1hOgor CXNzcF9leGl0KCZzcGlwaHlfZGV2LT5zc3BkZXYpOworZXJyb3Jfc3NwaW5p dDoKKwlQREVCVUcoImV4aXRpbmcgb24gZXJyb3JcbiIpOworCXJldHVybiAw OworfQorCitpbnQgc21zc3BpcGh5X2RlaW5pdCh2b2lkICpjb250ZXh0KQor eworCXNwaXBoeV9kZXZfc3QgKnNwaXBoeV9kZXYgPSAoc3BpcGh5X2Rldl9z dCAqKSBjb250ZXh0OworCVBERUJVRygiZW50ZXJpbmdcbiIpOworCisJLyog ZGlzYWJsZSB0aGUgc3BpIHBvcnQgKi8KKwlzc3BfZmx1c2goJnNwaXBoeV9k ZXYtPnNzcGRldik7CisJc3NwX2Rpc2FibGUoJnNwaXBoeV9kZXYtPnNzcGRl dik7CisKKwkvKiAgcmVsZWFzZSBETUEgcmVzb3VyY2VzICovCisJaWYgKHNw aXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsID49IDApCisJCXB4YV9mcmVlX2Rt YShzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbCk7CisKKwlpZiAoc3BpcGh5 X2Rldi0+dHhfZG1hX2NoYW5uZWwgPj0gMCkKKwkJcHhhX2ZyZWVfZG1hKHNw aXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKTsKKworCS8qIHJlbGVhc2UgTWVt b3J5IHJlc291cmNlcyAqLworI2lmZGVmIFBYQV8zMTBfTFYKKwlmcmVlX2ly cShJUlFfR1BJTyhNRlAyR1BJTyhTTVNfSVJRX0dQSU8pKSwgc3BpcGh5X2Rl dik7CisjZWxzZSAvKlBYQV8zMTBfTFYgKi8KKwlmcmVlX2lycShJUlFfR1BJ TygyMiksICZzcGlwaHlfZGV2LT5zc3BkZXYpOworI2VuZGlmIC8qUFhBXzMx MF9MViAqLworCXNzcF9leGl0KCZzcGlwaHlfZGV2LT5zc3BkZXYpOworCVBE RUJVRygiZXhpdGluZ1xuIik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc21z c3BpcGh5X3NldF9jb25maWcoc3BpcGh5X2Rldl9zdCAqc3BpcGh5X2Rldiwg aW50IGNsb2NrX2RpdmlkZXIpCit7CisJdTMyIG1vZGUsIGZsYWdzLCBzcGVl ZCwgcHNwX2ZsYWdzID0gMDsKKwlzc3BfZGlzYWJsZSgmc3BpcGh5X2Rldi0+ c3NwZGV2KTsKKwkvKiBjbG9jayBkaXZpc29yIGZvciB0aGlzIG1vZGUuICov CisJc3BlZWQgPSBDTE9DS19ESVZJREVSKGNsb2NrX2RpdmlkZXIpOworCS8q IDMyYml0IHdvcmRzIGluIHRoZSBmaWZvICovCisJbW9kZSA9IFNTQ1IwX01v dG9yb2xhIHwgU1NDUjBfRGF0YVNpemUoMTYpIHwgU1NDUjBfRURTUzsKKwlm bGFncyA9IFNTQ1IxX1J4VHJlc2goMSkgfCBTU0NSMV9UeFRyZXNoKDEpIHwg U1NDUjFfVFNSRSB8CisJCSBTU0NSMV9SU1JFIHwgU1NDUjFfUklFIHwgU1ND UjFfVFJBSUw7CS8qIHwgU1NDUjFfVElFICovCisJc3NwX2NvbmZpZygmc3Bp cGh5X2Rldi0+c3NwZGV2LCBtb2RlLCBmbGFncywgcHNwX2ZsYWdzLCBzcGVl ZCk7CisJc3NwX2VuYWJsZSgmc3BpcGh5X2Rldi0+c3NwZGV2KTsKK30KKwor dm9pZCBwcmVwYXJlRm9yRldEbmwodm9pZCAqY29udGV4dCkKK3sKKwlzcGlw aHlfZGV2X3N0ICpzcGlwaHlfZGV2ID0gKHNwaXBoeV9kZXZfc3QgKikgY29u dGV4dDsKKwlzbXNzcGlwaHlfc2V0X2NvbmZpZyhzcGlwaHlfZGV2LCAyKTsK Kwltc2xlZXAoMTAwKTsKK30KKwordm9pZCBmd0RubENvbXBsZXRlKHZvaWQg KmNvbnRleHQsIGludCBBcHApCit7CisJc3BpcGh5X2Rldl9zdCAqc3BpcGh5 X2RldiA9IChzcGlwaHlfZGV2X3N0ICopIGNvbnRleHQ7CisJc21zc3BpcGh5 X3NldF9jb25maWcoc3BpcGh5X2RldiwgMSk7CisJbXNsZWVwKDEwMCk7Cit9 Cg== --0-762351964-1227094081=:6524 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-762351964-1227094081=:6524--