From mboxrd@z Thu Jan 1 00:00:00 1970 From: Leo Liu Subject: [PATCH 03/21] drm/amdgpu: separate JPEG1.0 code out from VCN1.0 Date: Tue, 12 Nov 2019 13:03:11 -0500 Message-ID: <20191112180329.3927-4-leo.liu@amd.com> References: <20191112180329.3927-1-leo.liu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191112180329.3927-1-leo.liu-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Leo Liu Rm9yIFZDTjEuMCwgdGhlIHNlcGFyYXRpb24gaXMganVzdCBpbiBjb2RlIHdpc2UsIEpQRUcxLjAg SFcgaXMgc3RpbGwKaW5jbHVkZWQgaW4gdGhlIFZDTjEuMCBIVy4KClNpZ25lZC1vZmYtYnk6IExl byBMaXUgPGxlby5saXVAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9N YWtlZmlsZSAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192MV8w LmMgfCA1ODQgKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvanBlZ192MV8wLmggfCAgMzIgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3Zj bl92MV8wLmMgIHwgNDgxICstLS0tLS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDYz MCBpbnNlcnRpb25zKCspLCA0NzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192MV8wLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YxXzAuaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvTWFrZWZpbGUKaW5kZXggMTFjYTcwMTA1ZWViLi4yOTM2YzI5MjM3OWQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L01ha2VmaWxlCkBAIC0xNTMsNyArMTUzLDggQEAgYW1kZ3B1LXkgKz0gXAog CXZjbl92MV8wLm8gXAogCXZjbl92Ml8wLm8gXAogCXZjbl92Ml81Lm8gXAotCWFtZGdwdV9qcGVn Lm8KKwlhbWRncHVfanBlZy5vIFwKKwlqcGVnX3YxXzAubwogCiAjIGFkZCBBVEhVQiBibG9jawog YW1kZ3B1LXkgKz0gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBl Z192MV8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YxXzAuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1MzUwNmRmMDc3ZAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjFfMC5jCkBAIC0wLDAg KzEsNTg0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywg SW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiYW1kZ3B1LmgiCisjaW5j bHVkZSAiYW1kZ3B1X2pwZWcuaCIKKyNpbmNsdWRlICJzb2MxNS5oIgorI2luY2x1ZGUgInNvYzE1 ZC5oIgorCisjaW5jbHVkZSAidmNuL3Zjbl8xXzBfb2Zmc2V0LmgiCisjaW5jbHVkZSAidmNuL3Zj bl8xXzBfc2hfbWFzay5oIgorCitzdGF0aWMgdm9pZCBqcGVnX3YxXzBfc2V0X2RlY19yaW5nX2Z1 bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9z ZXRfaXJxX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKKworc3RhdGljIHZvaWQg anBlZ192MV8wX2RlY29kZV9yaW5nX3BhdGNoX3dyZWcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n LCB1aW50MzJfdCAqcHRyLCB1aW50MzJfdCByZWdfb2Zmc2V0LCB1aW50MzJfdCB2YWwpCit7CisJ c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCXJpbmctPnJpbmdbKCpw dHIpKytdID0gUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfRVhU RVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKTsKKwlpZiAoKChyZWdfb2Zmc2V0 ID49IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAorCQkoKHJlZ19vZmZz ZXQgPj0gMHgxZTAwMCkgJiYgKHJlZ19vZmZzZXQgPD0gMHgxZTFmZikpKSB7CisJCXJpbmctPnJp bmdbKCpwdHIpKytdID0gMDsKKwkJcmluZy0+cmluZ1soKnB0cikrK10gPSBQQUNLRVRKKChyZWdf b2Zmc2V0ID4+IDIpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKTsKKwl9IGVsc2UgeworCQlyaW5nLT5y aW5nWygqcHRyKSsrXSA9IHJlZ19vZmZzZXQ7CisJCXJpbmctPnJpbmdbKCpwdHIpKytdID0gUEFD S0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUwKTsKKwl9CisJcmluZy0+cmluZ1soKnB0cikrK10g PSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9kZWNvZGVfcmluZ19zZXRfcGF0Y2hf cmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IHB0cikKK3sKKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisKKwl1aW50MzJfdCByZWcsIHJlZ19v ZmZzZXQsIHZhbCwgbWFzaywgaTsKKworCS8vIDFzdDogcHJvZ3JhbSBtbVVWRF9MTUlfSlJCQ19S Ql9NRU1fUkRfNjRCSVRfQkFSX0xPVworCXJlZyA9IFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwg bW1VVkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9MT1cpOworCXJlZ19vZmZzZXQgPSAo cmVnIDw8IDIpOworCXZhbCA9IGxvd2VyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpOworCWpwZWdf djFfMF9kZWNvZGVfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7 CisKKwkvLyAybmQ6IHByb2dyYW0gbW1VVkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9I SUdICisJcmVnID0gU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9N RU1fUkRfNjRCSVRfQkFSX0hJR0gpOworCXJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCXZhbCA9 IHVwcGVyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpOworCWpwZWdfdjFfMF9kZWNvZGVfcmluZ19w YXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7CisKKwkvLyAzcmQgdG8gNXRo OiBpc3N1ZSBNRU1fUkVBRCBjb21tYW5kcworCWZvciAoaSA9IDA7IGkgPD0gMjsgaSsrKSB7CisJ CXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUyKTsKKwkJ cmluZy0+cmluZ1twdHIrK10gPSAwOworCX0KKworCS8vIDZ0aDogcHJvZ3JhbSBtbVVWRF9KUkJD X1JCX0NOVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIE5PX0ZFVENIIGFuZCBSUFRSIHdyaXRlIGFiaWxp dHkKKwlyZWcgPSBTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ05UTCk7 CisJcmVnX29mZnNldCA9IChyZWcgPDwgMik7CisJdmFsID0gMHgxMzsKKwlqcGVnX3YxXzBfZGVj b2RlX3JpbmdfcGF0Y2hfd3JlZyhyaW5nLCAmcHRyLCByZWdfb2Zmc2V0LCB2YWwpOworCisJLy8g N3RoOiBwcm9ncmFtIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEKKwlyZWcgPSBTT0MxNV9SRUdfT0ZG U0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEpOworCXJlZ19vZmZzZXQgPSAocmVn IDw8IDIpOworCXZhbCA9IDB4MTsKKwlqcGVnX3YxXzBfZGVjb2RlX3JpbmdfcGF0Y2hfd3JlZyhy aW5nLCAmcHRyLCByZWdfb2Zmc2V0LCB2YWwpOworCisJLy8gOHRoOiBpc3N1ZSBjb25kaXRpb25h bCByZWdpc3RlciByZWFkIG1tVVZEX0pSQkNfUkJfQ05UTAorCXJlZyA9IFNPQzE1X1JFR19PRkZT RVQoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9DTlRMKTsKKwlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAy KTsKKwl2YWwgPSAweDE7CisJbWFzayA9IDB4MTsKKworCXJpbmctPnJpbmdbcHRyKytdID0gUEFD S0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1F UiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApOworCXJpbmctPnJpbmdbcHRyKytdID0gMHgwMTQwMDIw MDsKKwlyaW5nLT5yaW5nW3B0cisrXSA9IFBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChKUEVHLCAw LCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCk7CisJcmluZy0+ cmluZ1twdHIrK10gPSB2YWw7CisJcmluZy0+cmluZ1twdHIrK10gPSBQQUNLRVRKKFNPQzE1X1JF R19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBB Q0tFVEpfVFlQRTApOworCWlmICgoKHJlZ19vZmZzZXQgPj0gMHgxZjgwMCkgJiYgKHJlZ19vZmZz ZXQgPD0gMHgyMWZmZikpIHx8CisJCSgocmVnX29mZnNldCA+PSAweDFlMDAwKSAmJiAocmVnX29m ZnNldCA8PSAweDFlMWZmKSkpIHsKKwkJcmluZy0+cmluZ1twdHIrK10gPSAwOworCQlyaW5nLT5y aW5nW3B0cisrXSA9IFBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQ RTMpOworCX0gZWxzZSB7CisJCXJpbmctPnJpbmdbcHRyKytdID0gcmVnX29mZnNldDsKKwkJcmlu Zy0+cmluZ1twdHIrK10gPSBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTMpOworCX0KKwly aW5nLT5yaW5nW3B0cisrXSA9IG1hc2s7CisKKwkvLzl0aCB0byAyMXN0OiBpbnNlcnQgbm8tb3AK Kwlmb3IgKGkgPSAwOyBpIDw9IDEyOyBpKyspIHsKKwkJcmluZy0+cmluZ1twdHIrK10gPSBQQUNL RVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTYpOworCQlyaW5nLT5yaW5nW3B0cisrXSA9IDA7CisJ fQorCisJLy8yMm5kOiByZXNldCBtbVVWRF9KUkJDX1JCX1JQVFIKKwlyZWcgPSBTT0MxNV9SRUdf T0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUlBUUik7CisJcmVnX29mZnNldCA9IChyZWcg PDwgMik7CisJdmFsID0gMDsKKwlqcGVnX3YxXzBfZGVjb2RlX3JpbmdfcGF0Y2hfd3JlZyhyaW5n LCAmcHRyLCByZWdfb2Zmc2V0LCB2YWwpOworCisJLy8yM3JkOiBwcm9ncmFtIG1tVVZEX0pSQkNf UkJfQ05UTCB0byBkaXNhYmxlIG5vX2ZldGNoCisJcmVnID0gU09DMTVfUkVHX09GRlNFVChKUEVH LCAwLCBtbVVWRF9KUkJDX1JCX0NOVEwpOworCXJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCXZh bCA9IDB4MTI7CisJanBlZ192MV8wX2RlY29kZV9yaW5nX3BhdGNoX3dyZWcocmluZywgJnB0ciwg cmVnX29mZnNldCwgdmFsKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfZ2V0 X3JwdHIgLSBnZXQgcmVhZCBwb2ludGVyCisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50 ZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGhhcmR3YXJlIHJlYWQgcG9pbnRlcgorICov CitzdGF0aWMgdWludDY0X3QganBlZ192MV8wX2RlY29kZV9yaW5nX2dldF9ycHRyKHN0cnVjdCBh bWRncHVfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmct PmFkZXY7CisKKwlyZXR1cm4gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUlBU Uik7Cit9CisKKy8qKgorICoganBlZ192MV8wX2RlY29kZV9yaW5nX2dldF93cHRyIC0gZ2V0IHdy aXRlIHBvaW50ZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFJl dHVybnMgdGhlIGN1cnJlbnQgaGFyZHdhcmUgd3JpdGUgcG9pbnRlcgorICovCitzdGF0aWMgdWlu dDY0X3QganBlZ192MV8wX2RlY29kZV9yaW5nX2dldF93cHRyKHN0cnVjdCBhbWRncHVfcmluZyAq cmluZykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisKKwly ZXR1cm4gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfV1BUUik7Cit9CisKKy8q KgorICoganBlZ192MV8wX2RlY29kZV9yaW5nX3NldF93cHRyIC0gc2V0IHdyaXRlIHBvaW50ZXIK KyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIENvbW1pdHMgdGhlIHdy aXRlIHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlCisgKi8KK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9k ZWNvZGVfcmluZ19zZXRfd3B0cihzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCisJV1JFRzMyX1NPQzE1KEpQRUcs IDAsIG1tVVZEX0pSQkNfUkJfV1BUUiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7Cit9CisK Ky8qKgorICoganBlZ192MV8wX2RlY29kZV9yaW5nX2luc2VydF9zdGFydCAtIGluc2VydCBhIHN0 YXJ0IGNvbW1hbmQKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFdy aXRlIGEgc3RhcnQgY29tbWFuZCB0byB0aGUgcmluZy4KKyAqLworc3RhdGljIHZvaWQganBlZ192 MV8wX2RlY29kZV9yaW5nX2luc2VydF9zdGFydChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7 CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZE X0pSQkNfRVhURVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywgMHg2OGUwNCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQ QUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5n LCAweDgwMDEwMDAwKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfaW5zZXJ0 X2VuZCAtIGluc2VydCBhIGVuZCBjb21tYW5kCisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBv aW50ZXIKKyAqCisgKiBXcml0ZSBhIGVuZCBjb21tYW5kIHRvIHRoZSByaW5nLgorICovCitzdGF0 aWMgdm9pZCBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfaW5zZXJ0X2VuZChzdHJ1Y3QgYW1kZ3B1X3Jp bmcgKnJpbmcpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2Owor CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQ RUcsIDAsIG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUw KSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHg2OGUwNCk7CisKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLCBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDAwMDEwMDAwKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZGVjb2Rl X3JpbmdfZW1pdF9mZW5jZSAtIGVtaXQgYW4gZmVuY2UgJiB0cmFwIGNvbW1hbmQKKyAqCisgKiBA cmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICogQGZlbmNlOiBmZW5jZSB0byBlbWl0CisgKgor ICogV3JpdGUgYSBmZW5jZSBhbmQgYSB0cmFwIGNvbW1hbmQgdG8gdGhlIHJpbmcuCisgKi8KK3N0 YXRpYyB2b2lkIGpwZWdfdjFfMF9kZWNvZGVfcmluZ19lbWl0X2ZlbmNlKHN0cnVjdCBhbWRncHVf cmluZyAqcmluZywgdTY0IGFkZHIsIHU2NCBzZXEsCisJCQkJICAgICB1bnNpZ25lZCBmbGFncykK K3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisKKwlXQVJOX09O KGZsYWdzICYgQU1ER1BVX0ZFTkNFX0ZMQUdfNjRCSVQpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pQRUdfR1BD T01fREFUQTApLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmlu Zywgc2VxKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVH X09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUEVHX0dQQ09NX0RBVEExKSwgMCwgMCwgUEFDS0VUSl9U WVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHNlcSk7CisKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfTE1J X0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9MT1cpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgbG93ZXJfMzJfYml0cyhhZGRyKSk7CisKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1V VkRfTE1JX0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9ISUdIKSwgMCwgMCwgUEFDS0VUSl9UWVBF MCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoYWRkcikpOworCisJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcs IDAsIG1tVVZEX0pQRUdfR1BDT01fQ01EKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIDB4OCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQ QUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlBFR19HUENPTV9DTUQpLCAw LCBQQUNLRVRKX0NPTkRJVElPTl9DSEVDSzAsIFBBQ0tFVEpfVFlQRTQpKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAwKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEoo U09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX0NPTkRfUkRfVElNRVIpLCAw LCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgwMTQwMDIw MCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZT RVQoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9SRUZfREFUQSksIDAsIDAsIFBBQ0tFVEpfVFlQRTAp KTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBzZXEpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJD X1JCX01FTV9SRF82NEJJVF9CQVJfTE9XKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMoYWRkcikpOworCisJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0xN SV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfSElHSCksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsK KwlhbWRncHVfcmluZ193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRzKGFkZHIpKTsKKworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooMCwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hF Q0szLCBQQUNLRVRKX1RZUEUyKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhmZmZmZmZm Zik7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZT RVQoSlBFRywgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpf VFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDNmYmMpOworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywKKwkJUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1k Z3B1X3Jpbmdfd3JpdGUocmluZywgMHgxKTsKKworCS8qIGVtaXQgdHJhcCAqLworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFNykpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIDApOworfQorCisvKioKKyAqIGpwZWdfdjFfMF9kZWNvZGVfcmlu Z19lbWl0X2liIC0gZXhlY3V0ZSBpbmRpcmVjdCBidWZmZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1 X3JpbmcgcG9pbnRlcgorICogQGliOiBpbmRpcmVjdCBidWZmZXIgdG8gZXhlY3V0ZQorICoKKyAq IFdyaXRlIHJpbmcgY29tbWFuZHMgdG8gZXhlY3V0ZSB0aGUgaW5kaXJlY3QgYnVmZmVyLgorICov CitzdGF0aWMgdm9pZCBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfZW1pdF9pYihzdHJ1Y3QgYW1kZ3B1 X3JpbmcgKnJpbmcsCisJCQkJCXN0cnVjdCBhbWRncHVfam9iICpqb2IsCisJCQkJCXN0cnVjdCBh bWRncHVfaWIgKmliLAorCQkJCQl1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisJdW5zaWduZWQgdm1pZCA9IEFNREdQVV9KT0JfR0VU X1ZNSUQoam9iKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVf UkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19JQl9WTUlEKSwgMCwgMCwgUEFDS0VU Sl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwgKHZtaWQgPDwgNCkp KTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVHX09GRlNF VChKUEVHLCAwLCBtbVVWRF9MTUlfSlBFR19WTUlEKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwor CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwgKHZtaWQgPDwgNCkpKTsKKworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBt bVVWRF9MTUlfSlJCQ19JQl82NEJJVF9CQVJfTE9XKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwor CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSk7CisK KwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBF RywgMCwgbW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRfQkFSX0hJR0gpLCAwLCAwLCBQQUNLRVRKX1RZ UEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhpYi0+Z3B1X2Fk ZHIpKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVHX09G RlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX0lCX1NJWkUpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgaWItPmxlbmd0aF9kdyk7CisKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRf TE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9MT1cpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgbG93ZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikp OworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VU KEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfSElHSCksIDAsIDAs IFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRz KHJpbmctPmdwdV9hZGRyKSk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRK KDAsIDAsIFBBQ0tFVEpfQ09ORElUSU9OX0NIRUNLMCwgUEFDS0VUSl9UWVBFMikpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIDApOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFD S0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1F UiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDAx NDAwMjAwKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVH X09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFDS0VUSl9U WVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4Mik7CisKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlJC Q19TVEFUVVMpLCAwLCBQQUNLRVRKX0NPTkRJVElPTl9DSEVDSzMsIFBBQ0tFVEpfVFlQRTMpKTsK KwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDIpOworfQorCitzdGF0aWMgdm9pZCBqcGVnX3Yx XzBfZGVjb2RlX3JpbmdfZW1pdF9yZWdfd2FpdChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCisJ CQkJCSAgICB1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCwKKwkJCQkJICAgIHVpbnQzMl90IG1h c2spCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCXVpbnQz Ml90IHJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywK KwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ09ORF9S RF9USU1FUiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5n LCAweDAxNDAwMjAwKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09D MTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFD S0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHZhbCk7CisKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1V VkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlpZiAo KChyZWdfb2Zmc2V0ID49IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAor CQkoKHJlZ19vZmZzZXQgPj0gMHgxZTAwMCkgJiYgKHJlZ19vZmZzZXQgPD0gMHgxZTFmZikpKSB7 CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworCQlhbWRncHVfcmluZ193cml0ZShyaW5n LAorCQkJUEFDS0VUSigocmVnX29mZnNldCA+PiAyKSwgMCwgMCwgUEFDS0VUSl9UWVBFMykpOwor CX0gZWxzZSB7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHJlZ19vZmZzZXQpOworCQlhbWRn cHVfcmluZ193cml0ZShyaW5nLAorCQkJUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUzKSk7 CisJfQorCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBq cGVnX3YxXzBfZGVjb2RlX3JpbmdfZW1pdF92bV9mbHVzaChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcsCisJCXVuc2lnbmVkIHZtaWQsIHVpbnQ2NF90IHBkX2FkZHIpCit7CisJc3RydWN0IGFtZGdw dV92bWh1YiAqaHViID0gJnJpbmctPmFkZXYtPnZtaHViW3JpbmctPmZ1bmNzLT52bWh1Yl07CisJ dWludDMyX3QgZGF0YTAsIGRhdGExLCBtYXNrOworCisJcGRfYWRkciA9IGFtZGdwdV9nbWNfZW1p dF9mbHVzaF9ncHVfdGxiKHJpbmcsIHZtaWQsIHBkX2FkZHIpOworCisJLyogd2FpdCBmb3IgcmVn aXN0ZXIgd3JpdGUgKi8KKwlkYXRhMCA9IGh1Yi0+Y3R4MF9wdGJfYWRkcl9sbzMyICsgdm1pZCAq IDI7CisJZGF0YTEgPSBsb3dlcl8zMl9iaXRzKHBkX2FkZHIpOworCW1hc2sgPSAweGZmZmZmZmZm OworCWpwZWdfdjFfMF9kZWNvZGVfcmluZ19lbWl0X3JlZ193YWl0KHJpbmcsIGRhdGEwLCBkYXRh MSwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9kZWNvZGVfcmluZ19lbWl0X3dy ZWcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAorCQkJCQl1aW50MzJfdCByZWcsIHVpbnQzMl90 IHZhbCkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisJdWlu dDMyX3QgcmVnX29mZnNldCA9IChyZWcgPDwgMik7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5n LAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlJCQ19FWFRFUk5B TF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlpZiAoKChyZWdfb2Zmc2V0ID49 IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAorCQkJKChyZWdfb2Zmc2V0 ID49IDB4MWUwMDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MWUxZmYpKSkgeworCQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAwKTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJCVBBQ0tFVEoo KHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwl9IGVsc2UgeworCQlh bWRncHVfcmluZ193cml0ZShyaW5nLCByZWdfb2Zmc2V0KTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKKwkJCVBBQ0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCX0KKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBqcGVnX3YxXzBfZGVjb2Rl X3Jpbmdfbm9wKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdWludDMyX3QgY291bnQpCit7CisJ aW50IGk7CisKKwlXQVJOX09OKHJpbmctPndwdHIgJSAyIHx8IGNvdW50ICUgMik7CisKKwlmb3Ig KGkgPSAwOyBpIDwgY291bnQgLyAyOyBpKyspIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywg UEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEU2KSk7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJp bmcsIDApOworCX0KK30KKworc3RhdGljIGludCBqcGVnX3YxXzBfc2V0X2ludGVycnVwdF9zdGF0 ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJc3RydWN0IGFtZGdwdV9pcnFfc3Jj ICpzb3VyY2UsCisJCQkJCXVuc2lnbmVkIHR5cGUsCisJCQkJCWVudW0gYW1kZ3B1X2ludGVycnVw dF9zdGF0ZSBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqcGVnX3YxXzBf cHJvY2Vzc19pbnRlcnJ1cHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgICAg c3RydWN0IGFtZGdwdV9pcnFfc3JjICpzb3VyY2UsCisJCQkJICAgICAgc3RydWN0IGFtZGdwdV9p dl9lbnRyeSAqZW50cnkpCit7CisJRFJNX0RFQlVHKCJJSDogSlBFRyBkZWNvZGUgVFJBUFxuIik7 CisKKwlzd2l0Y2ggKGVudHJ5LT5zcmNfaWQpIHsKKwljYXNlIDEyNjoKKwkJYW1kZ3B1X2ZlbmNl X3Byb2Nlc3MoJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWMpOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlEUk1fRVJST1IoIlVuaGFuZGxlZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLAorCQkJICBlbnRy eS0+c3JjX2lkLCBlbnRyeS0+c3JjX2RhdGFbMF0pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZWFybHlfaW5pdCAtIHNldCBmdW5jdGlvbiBwb2lu dGVycworICoKKyAqIEBoYW5kbGU6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIFNldCBy aW5nIGFuZCBpcnEgZnVuY3Rpb24gcG9pbnRlcnMKKyAqLworaW50IGpwZWdfdjFfMF9lYXJseV9p bml0KHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCWFkZXYtPmpwZWcubnVtX2pwZWdfaW5zdCA9 IDE7CisKKwlqcGVnX3YxXzBfc2V0X2RlY19yaW5nX2Z1bmNzKGFkZXYpOworCWpwZWdfdjFfMF9z ZXRfaXJxX2Z1bmNzKGFkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoganBlZ192MV8w X3N3X2luaXQgLSBzdyBpbml0IGZvciBKUEVHIGJsb2NrCisgKgorICogQGhhbmRsZTogYW1kZ3B1 X2RldmljZSBwb2ludGVyCisgKgorICovCitpbnQganBlZ192MV8wX3N3X2luaXQodm9pZCAqaGFu ZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2 aWNlICopaGFuZGxlOworCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKKwlpbnQgcjsKKworCS8q IEpQRUcgVFJBUCAqLworCXIgPSBhbWRncHVfaXJxX2FkZF9pZChhZGV2LCBTT0MxNV9JSF9DTElF TlRJRF9WQ04sIDEyNiwgJmFkZXYtPmpwZWcuaW5zdC0+aXJxKTsKKwlpZiAocikKKwkJcmV0dXJu IHI7CisKKwlyaW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisJc3ByaW50ZihyaW5n LT5uYW1lLCAianBlZ19kZWMiKTsKKwlyID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCByaW5nLCA1 MTIsICZhZGV2LT5qcGVnLmluc3QtPmlycSwgMCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJ YWRldi0+anBlZy5pbnRlcm5hbC5qcGVnX3BpdGNoID0gYWRldi0+anBlZy5pbnN0LT5leHRlcm5h bC5qcGVnX3BpdGNoID0KKwkJU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUEVHX1BJ VENIKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGpwZWdfdjFfMF9zd19maW5pIC0gc3cg ZmluaSBmb3IgSlBFRyBibG9jaworICoKKyAqIEBoYW5kbGU6IGFtZGdwdV9kZXZpY2UgcG9pbnRl cgorICoKKyAqIEpQRUcgZnJlZSB1cCBzdyBhbGxvY2F0aW9uCisgKi8KK3ZvaWQganBlZ192MV8w X3N3X2Zpbmkodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g KHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCisJYW1kZ3B1X3JpbmdfZmluaSgmYWRl di0+anBlZy5pbnN0WzBdLnJpbmdfZGVjKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfc3RhcnQg LSBzdGFydCBKUEVHIGJsb2NrCisgKgorICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgor ICoKKyAqIFNldHVwIGFuZCBzdGFydCB0aGUgSlBFRyBibG9jaworICovCit2b2lkIGpwZWdfdjFf MF9zdGFydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IG1vZGUpCit7CisJc3RydWN0 IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisKKwlpZiAo bW9kZSA9PSAwKSB7CisJCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9W TUlELCAwKTsKKwkJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ05UTCwgVVZE X0pSQkNfUkJfQ05UTF9fUkJfTk9fRkVUQ0hfTUFTSyB8CisJCQkJVVZEX0pSQkNfUkJfQ05UTF9f UkJfUlBUUl9XUl9FTl9NQVNLKTsKKwkJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0xNSV9K UkJDX1JCXzY0QklUX0JBUl9MT1csIGxvd2VyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpKTsKKwkJ V1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJDX1JCXzY0QklUX0JBUl9ISUdILCB1 cHBlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSk7CisJCVdSRUczMl9TT0MxNShKUEVHLCAwLCBt bVVWRF9KUkJDX1JCX1JQVFIsIDApOworCQlXUkVHMzJfU09DMTUoSlBFRywgMCwgbW1VVkRfSlJC Q19SQl9XUFRSLCAwKTsKKwl9CVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX0NO VEwsIFVWRF9KUkJDX1JCX0NOVExfX1JCX1JQVFJfV1JfRU5fTUFTSyk7CisKKwkvKiBpbml0aWFs aXplIHdwdHIgKi8KKwlyaW5nLT53cHRyID0gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pS QkNfUkJfV1BUUik7CisKKwkvKiBjb3B5IHBhdGNoIGNvbW1hbmRzIHRvIHRoZSBqcGVnIHJpbmcg Ki8KKwlqcGVnX3YxXzBfZGVjb2RlX3Jpbmdfc2V0X3BhdGNoX3JpbmcocmluZywKKwkJKHJpbmct PndwdHIgKyByaW5nLT5tYXhfZHcgKiBhbWRncHVfc2NoZWRfaHdfc3VibWlzc2lvbikpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIGpwZWdfdjFfMF9kZWNvZGVf cmluZ192bV9mdW5jcyA9IHsKKwkudHlwZSA9IEFNREdQVV9SSU5HX1RZUEVfVkNOX0pQRUcsCisJ LmFsaWduX21hc2sgPSAweGYsCisJLm5vcCA9IFBBQ0tFVDAoMHg4MWZmLCAwKSwKKwkuc3VwcG9y dF82NGJpdF9wdHJzID0gZmFsc2UsCisJLm5vX3VzZXJfZmVuY2UgPSB0cnVlLAorCS52bWh1YiA9 IEFNREdQVV9NTUhVQl8wLAorCS5leHRyYV9kdyA9IDY0LAorCS5nZXRfcnB0ciA9IGpwZWdfdjFf MF9kZWNvZGVfcmluZ19nZXRfcnB0ciwKKwkuZ2V0X3dwdHIgPSBqcGVnX3YxXzBfZGVjb2RlX3Jp bmdfZ2V0X3dwdHIsCisJLnNldF93cHRyID0ganBlZ192MV8wX2RlY29kZV9yaW5nX3NldF93cHRy LAorCS5lbWl0X2ZyYW1lX3NpemUgPQorCQk2ICsgNiArIC8qIGhkcCBpbnZhbGlkYXRlIC8gZmx1 c2ggKi8KKwkJU09DMTVfRkxVU0hfR1BVX1RMQl9OVU1fV1JFRyAqIDYgKworCQlTT0MxNV9GTFVT SF9HUFVfVExCX05VTV9SRUdfV0FJVCAqIDggKworCQk4ICsgLyoganBlZ192MV8wX2RlY29kZV9y aW5nX2VtaXRfdm1fZmx1c2ggKi8KKwkJMjYgKyAyNiArIC8qIGpwZWdfdjFfMF9kZWNvZGVfcmlu Z19lbWl0X2ZlbmNlIHgyIHZtIGZlbmNlICovCisJCTYsCisJLmVtaXRfaWJfc2l6ZSA9IDIyLCAv KiBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfZW1pdF9pYiAqLworCS5lbWl0X2liID0ganBlZ192MV8w X2RlY29kZV9yaW5nX2VtaXRfaWIsCisJLmVtaXRfZmVuY2UgPSBqcGVnX3YxXzBfZGVjb2RlX3Jp bmdfZW1pdF9mZW5jZSwKKwkuZW1pdF92bV9mbHVzaCA9IGpwZWdfdjFfMF9kZWNvZGVfcmluZ19l bWl0X3ZtX2ZsdXNoLAorCS50ZXN0X3JpbmcgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X3Jp bmcsCisJLnRlc3RfaWIgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X2liLAorCS5pbnNlcnRf bm9wID0ganBlZ192MV8wX2RlY29kZV9yaW5nX25vcCwKKwkuaW5zZXJ0X3N0YXJ0ID0ganBlZ192 MV8wX2RlY29kZV9yaW5nX2luc2VydF9zdGFydCwKKwkuaW5zZXJ0X2VuZCA9IGpwZWdfdjFfMF9k ZWNvZGVfcmluZ19pbnNlcnRfZW5kLAorCS5wYWRfaWIgPSBhbWRncHVfcmluZ19nZW5lcmljX3Bh ZF9pYiwKKwkuYmVnaW5fdXNlID0gYW1kZ3B1X3Zjbl9yaW5nX2JlZ2luX3VzZSwKKwkuZW5kX3Vz ZSA9IGFtZGdwdV92Y25fcmluZ19lbmRfdXNlLAorCS5lbWl0X3dyZWcgPSBqcGVnX3YxXzBfZGVj b2RlX3JpbmdfZW1pdF93cmVnLAorCS5lbWl0X3JlZ193YWl0ID0ganBlZ192MV8wX2RlY29kZV9y aW5nX2VtaXRfcmVnX3dhaXQsCisJLmVtaXRfcmVnX3dyaXRlX3JlZ193YWl0ID0gYW1kZ3B1X3Jp bmdfZW1pdF9yZWdfd3JpdGVfcmVnX3dhaXRfaGVscGVyLAorfTsKKworc3RhdGljIHZvaWQganBl Z192MV8wX3NldF9kZWNfcmluZ19mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sK KwlhZGV2LT5qcGVnLmluc3QtPnJpbmdfZGVjLmZ1bmNzID0gJmpwZWdfdjFfMF9kZWNvZGVfcmlu Z192bV9mdW5jczsKKwlEUk1fSU5GTygiSlBFRyBkZWNvZGUgaXMgZW5hYmxlZCBpbiBWTSBtb2Rl XG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfaXJxX3NyY19mdW5jcyBqcGVn X3YxXzBfaXJxX2Z1bmNzID0geworCS5zZXQgPSBqcGVnX3YxXzBfc2V0X2ludGVycnVwdF9zdGF0 ZSwKKwkucHJvY2VzcyA9IGpwZWdfdjFfMF9wcm9jZXNzX2ludGVycnVwdCwKK307CisKK3N0YXRp YyB2b2lkIGpwZWdfdjFfMF9zZXRfaXJxX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQoreworCWFkZXYtPmpwZWcuaW5zdC0+aXJxLmZ1bmNzID0gJmpwZWdfdjFfMF9pcnFfZnVuY3M7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YxXzAuaCBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjFfMC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmJmMzNhNmEzOTcyCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192MV8wLmgKQEAgLTAsMCArMSwzMiBAQAor LyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVS KFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICog T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0pQRUdfVjFfMF9IX18KKyNkZWZpbmUgX19K UEVHX1YxXzBfSF9fCisKK2ludCBqcGVnX3YxXzBfZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpOwor aW50IGpwZWdfdjFfMF9zd19pbml0KHZvaWQgKmhhbmRsZSk7Cit2b2lkIGpwZWdfdjFfMF9zd19m aW5pKHZvaWQgKmhhbmRsZSk7Cit2b2lkIGpwZWdfdjFfMF9zdGFydChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwgaW50IG1vZGUpOworCisjZW5kaWYgLypfX0pQRUdfVjFfMF9IX18qLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNuX3YxXzAuYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L3Zjbl92MV8wLmMKaW5kZXggYjRmODRhODIwYTQ0Li42NTJjZWNj MDMwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3Zjbl92MV8wLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNuX3YxXzAuYwpAQCAtMzYsNiArMzYs NyBAQAogI2luY2x1ZGUgIm1taHViL21taHViXzlfMV9zaF9tYXNrLmgiCiAKICNpbmNsdWRlICJp dnNyY2lkL3Zjbi9pcnFzcmNzX3Zjbl8xXzAuaCIKKyNpbmNsdWRlICJqcGVnX3YxXzAuaCIKIAog I2RlZmluZSBtbVVWRF9SQkNfWFhfSUJfUkVHX0NIRUNLCQkJCTB4MDVhYgogI2RlZmluZSBtbVVW RF9SQkNfWFhfSUJfUkVHX0NIRUNLX0JBU0VfSURYCTEKQEAgLTQ1LDkgKzQ2LDcgQEAKIHN0YXRp YyBpbnQgdmNuX3YxXzBfc3RvcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiBzdGF0aWMg dm9pZCB2Y25fdjFfMF9zZXRfZGVjX3JpbmdfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpOwogc3RhdGljIHZvaWQgdmNuX3YxXzBfc2V0X2VuY19yaW5nX2Z1bmNzKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KTsKLXN0YXRpYyB2b2lkIHZjbl92MV8wX3NldF9qcGVnX3JpbmdfZnVu Y3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwogc3RhdGljIHZvaWQgdmNuX3YxXzBfc2V0 X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Ci1zdGF0aWMgdm9pZCB2Y25f djFfMF9qcGVnX3Jpbmdfc2V0X3BhdGNoX3Jpbmcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCB1 aW50MzJfdCBwdHIpOwogc3RhdGljIGludCB2Y25fdjFfMF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUo dm9pZCAqaGFuZGxlLCBlbnVtIGFtZF9wb3dlcmdhdGluZ19zdGF0ZSBzdGF0ZSk7CiBzdGF0aWMg aW50IHZjbl92MV8wX3BhdXNlX2RwZ19tb2RlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAog CQkJCXN0cnVjdCBkcGdfcGF1c2Vfc3RhdGUgKm5ld19zdGF0ZSk7CkBAIC02OCw5ICs2NywxMCBA QCBzdGF0aWMgaW50IHZjbl92MV8wX2Vhcmx5X2luaXQodm9pZCAqaGFuZGxlKQogCiAJdmNuX3Yx XzBfc2V0X2RlY19yaW5nX2Z1bmNzKGFkZXYpOwogCXZjbl92MV8wX3NldF9lbmNfcmluZ19mdW5j cyhhZGV2KTsKLQl2Y25fdjFfMF9zZXRfanBlZ19yaW5nX2Z1bmNzKGFkZXYpOwogCXZjbl92MV8w X3NldF9pcnFfZnVuY3MoYWRldik7CiAKKwlqcGVnX3YxXzBfZWFybHlfaW5pdChoYW5kbGUpOwor CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMSwxMSArMTAxLDYgQEAgc3RhdGljIGludCB2Y25fdjFf MF9zd19pbml0KHZvaWQgKmhhbmRsZSkKIAkJCXJldHVybiByOwogCX0KIAotCS8qIFZDTiBKUEVH IFRSQVAgKi8KLQlyID0gYW1kZ3B1X2lycV9hZGRfaWQoYWRldiwgU09DMTVfSUhfQ0xJRU5USURf VkNOLCAxMjYsICZhZGV2LT52Y24uaW5zdC0+aXJxKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0K IAlyID0gYW1kZ3B1X3Zjbl9zd19pbml0KGFkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAg LTE0OSwxNyArMTQ0LDExIEBAIHN0YXRpYyBpbnQgdmNuX3YxXzBfc3dfaW5pdCh2b2lkICpoYW5k bGUpCiAJCQlyZXR1cm4gcjsKIAl9CiAKLQlyaW5nID0gJmFkZXYtPnZjbi5pbnN0LT5yaW5nX2pw ZWc7Ci0Jc3ByaW50ZihyaW5nLT5uYW1lLCAidmNuX2pwZWciKTsKLQlyID0gYW1kZ3B1X3Jpbmdf aW5pdChhZGV2LCByaW5nLCA1MTIsICZhZGV2LT52Y24uaW5zdC0+aXJxLCAwKTsKLQlpZiAocikK LQkJcmV0dXJuIHI7Ci0KIAlhZGV2LT52Y24ucGF1c2VfZHBnX21vZGUgPSB2Y25fdjFfMF9wYXVz ZV9kcGdfbW9kZTsKLQlhZGV2LT52Y24uaW50ZXJuYWwuanBlZ19waXRjaCA9IGFkZXYtPnZjbi5p bnN0LT5leHRlcm5hbC5qcGVnX3BpdGNoID0KLQkJU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1t VVZEX0pQRUdfUElUQ0gpOwogCi0JcmV0dXJuIDA7CisJciA9IGpwZWdfdjFfMF9zd19pbml0KGhh bmRsZSk7CisKKwlyZXR1cm4gcjsKIH0KIAogLyoqCkBAIC0xNzgsNiArMTY3LDggQEAgc3RhdGlj IGludCB2Y25fdjFfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKIAlpZiAocikKIAkJcmV0dXJuIHI7 CiAKKwlqcGVnX3YxXzBfc3dfZmluaShoYW5kbGUpOworCiAJciA9IGFtZGdwdV92Y25fc3dfZmlu aShhZGV2KTsKIAogCXJldHVybiByOwpAQCAtMjA3LDcgKzE5OCw3IEBAIHN0YXRpYyBpbnQgdmNu X3YxXzBfaHdfaW5pdCh2b2lkICpoYW5kbGUpCiAJCQlnb3RvIGRvbmU7CiAJfQogCi0JcmluZyA9 ICZhZGV2LT52Y24uaW5zdC0+cmluZ19qcGVnOworCXJpbmcgPSAmYWRldi0+anBlZy5pbnN0LT5y aW5nX2RlYzsKIAlyID0gYW1kZ3B1X3JpbmdfdGVzdF9oZWxwZXIocmluZyk7CiAJaWYgKHIpCiAJ CWdvdG8gZG9uZTsKQEAgLTk0NywyMiArOTM4LDcgQEAgc3RhdGljIGludCB2Y25fdjFfMF9zdGFy dF9zcGdfbW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAlXUkVHMzJfU09DMTUoVVZE LCAwLCBtbVVWRF9SQl9CQVNFX0hJMiwgdXBwZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikpOwog CVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1JCX1NJWkUyLCByaW5nLT5yaW5nX3NpemUgLyA0 KTsKIAotCXJpbmcgPSAmYWRldi0+dmNuLmluc3QtPnJpbmdfanBlZzsKLQlXUkVHMzJfU09DMTUo VVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9WTUlELCAwKTsKLQlXUkVHMzJfU09DMTUoVVZELCAw LCBtbVVWRF9KUkJDX1JCX0NOVEwsIFVWRF9KUkJDX1JCX0NOVExfX1JCX05PX0ZFVENIX01BU0sg fAotCQkJVVZEX0pSQkNfUkJfQ05UTF9fUkJfUlBUUl9XUl9FTl9NQVNLKTsKLQlXUkVHMzJfU09D MTUoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl82NEJJVF9CQVJfTE9XLCBsb3dlcl8zMl9iaXRz KHJpbmctPmdwdV9hZGRyKSk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfTE1JX0pSQkNf UkJfNjRCSVRfQkFSX0hJR0gsIHVwcGVyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpKTsKLQlXUkVH MzJfU09DMTUoVVZELCAwLCBtbVVWRF9KUkJDX1JCX1JQVFIsIDApOwotCVdSRUczMl9TT0MxNShV VkQsIDAsIG1tVVZEX0pSQkNfUkJfV1BUUiwgMCk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1V VkRfSlJCQ19SQl9DTlRMLCBVVkRfSlJCQ19SQl9DTlRMX19SQl9SUFRSX1dSX0VOX01BU0spOwot Ci0JLyogaW5pdGlhbGl6ZSB3cHRyICovCi0JcmluZy0+d3B0ciA9IFJSRUczMl9TT0MxNShVVkQs IDAsIG1tVVZEX0pSQkNfUkJfV1BUUik7Ci0KLQkvKiBjb3B5IHBhdGNoIGNvbW1hbmRzIHRvIHRo ZSBqcGVnIHJpbmcgKi8KLQl2Y25fdjFfMF9qcGVnX3Jpbmdfc2V0X3BhdGNoX3JpbmcocmluZywK LQkJKHJpbmctPndwdHIgKyByaW5nLT5tYXhfZHcgKiBhbWRncHVfc2NoZWRfaHdfc3VibWlzc2lv bikpOworCWpwZWdfdjFfMF9zdGFydChhZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEw NiwxMyArMTA4Miw3IEBAIHN0YXRpYyBpbnQgdmNuX3YxXzBfc3RhcnRfZHBnX21vZGUoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJV1JFRzMyX1AoU09DMTVfUkVHX09GRlNFVChVVkQsIDAs IG1tVVZEX1JCQ19SQl9DTlRMKSwgMCwKIAkJCX5VVkRfUkJDX1JCX0NOVExfX1JCX05PX0ZFVENI X01BU0spOwogCi0JLyogaW5pdGlhbGl6ZSBKUEVHIHdwdHIgKi8KLQlyaW5nID0gJmFkZXYtPnZj bi5pbnN0LT5yaW5nX2pwZWc7Ci0JcmluZy0+d3B0ciA9IFJSRUczMl9TT0MxNShVVkQsIDAsIG1t VVZEX0pSQkNfUkJfV1BUUik7Ci0KLQkvKiBjb3B5IHBhdGNoIGNvbW1hbmRzIHRvIHRoZSBqcGVn IHJpbmcgKi8KLQl2Y25fdjFfMF9qcGVnX3Jpbmdfc2V0X3BhdGNoX3JpbmcocmluZywKLQkJKHJp bmctPndwdHIgKyByaW5nLT5tYXhfZHcgKiBhbWRncHVfc2NoZWRfaHdfc3VibWlzc2lvbikpOwor CWpwZWdfdjFfMF9zdGFydChhZGV2LCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMxNiw3ICsx Mjg2LDcgQEAgc3RhdGljIGludCB2Y25fdjFfMF9wYXVzZV9kcGdfbW9kZShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKIAkJCQkJCQlVVkRfRFBHX1BBVVNFX19KUEVHX1BBVVNFX0RQR19BQ0tf TUFTSywgcmV0X2NvZGUpOwogCiAJCQkJLyogUmVzdG9yZSAqLwotCQkJCXJpbmcgPSAmYWRldi0+ dmNuLmluc3QtPnJpbmdfanBlZzsKKwkJCQlyaW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19k ZWM7CiAJCQkJV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfTE1JX0pSQkNfUkJfVk1JRCwgMCk7 CiAJCQkJV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9DTlRMLAogCQkJCQkJCVVW RF9KUkJDX1JCX0NOVExfX1JCX05PX0ZFVENIX01BU0sgfApAQCAtMTcxNiwzODkgKzE2ODYsNiBA QCBzdGF0aWMgdm9pZCB2Y25fdjFfMF9lbmNfcmluZ19lbWl0X3dyZWcoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLAogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHZhbCk7CiB9CiAKLQotLyoqCi0g KiB2Y25fdjFfMF9qcGVnX3JpbmdfZ2V0X3JwdHIgLSBnZXQgcmVhZCBwb2ludGVyCi0gKgotICog QHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKLSAqCi0gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGhh cmR3YXJlIHJlYWQgcG9pbnRlcgotICovCi1zdGF0aWMgdWludDY0X3QgdmNuX3YxXzBfanBlZ19y aW5nX2dldF9ycHRyKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKLXsKLQlzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7Ci0KLQlyZXR1cm4gUlJFRzMyX1NPQzE1KFVWRCwg MCwgbW1VVkRfSlJCQ19SQl9SUFRSKTsKLX0KLQotLyoqCi0gKiB2Y25fdjFfMF9qcGVnX3Jpbmdf Z2V0X3dwdHIgLSBnZXQgd3JpdGUgcG9pbnRlcgotICoKLSAqIEByaW5nOiBhbWRncHVfcmluZyBw b2ludGVyCi0gKgotICogUmV0dXJucyB0aGUgY3VycmVudCBoYXJkd2FyZSB3cml0ZSBwb2ludGVy Ci0gKi8KLXN0YXRpYyB1aW50NjRfdCB2Y25fdjFfMF9qcGVnX3JpbmdfZ2V0X3dwdHIoc3RydWN0 IGFtZGdwdV9yaW5nICpyaW5nKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmlu Zy0+YWRldjsKLQotCXJldHVybiBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9KUkJDX1JCX1dQ VFIpOwotfQotCi0vKioKLSAqIHZjbl92MV8wX2pwZWdfcmluZ19zZXRfd3B0ciAtIHNldCB3cml0 ZSBwb2ludGVyCi0gKgotICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKLSAqCi0gKiBDb21t aXRzIHRoZSB3cml0ZSBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZQotICovCi1zdGF0aWMgdm9pZCB2 Y25fdjFfMF9qcGVnX3Jpbmdfc2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQotewot CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKLQotCVdSRUczMl9TT0Mx NShVVkQsIDAsIG1tVVZEX0pSQkNfUkJfV1BUUiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7 Ci19Ci0KLS8qKgotICogdmNuX3YxXzBfanBlZ19yaW5nX2luc2VydF9zdGFydCAtIGluc2VydCBh IHN0YXJ0IGNvbW1hbmQKLSAqCi0gKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgotICoKLSAq IFdyaXRlIGEgc3RhcnQgY29tbWFuZCB0byB0aGUgcmluZy4KLSAqLwotc3RhdGljIHZvaWQgdmNu X3YxXzBfanBlZ19yaW5nX2luc2VydF9zdGFydChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCi17 Ci0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwotCi0JYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRf SlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVf cmluZ193cml0ZShyaW5nLCAweDY4ZTA0KTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBB Q0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcs IDB4ODAwMTAwMDApOwotfQotCi0vKioKLSAqIHZjbl92MV8wX2pwZWdfcmluZ19pbnNlcnRfZW5k IC0gaW5zZXJ0IGEgZW5kIGNvbW1hbmQKLSAqCi0gKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRl cgotICoKLSAqIFdyaXRlIGEgZW5kIGNvbW1hbmQgdG8gdGhlIHJpbmcuCi0gKi8KLXN0YXRpYyB2 b2lkIHZjbl92MV8wX2pwZWdfcmluZ19pbnNlcnRfZW5kKHN0cnVjdCBhbWRncHVfcmluZyAqcmlu ZykKLXsKLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7Ci0KLQlhbWRn cHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBt bVVWRF9KUkJDX0VYVEVSTkFMX1JFR19CQVNFKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4NjhlMDQpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmlu ZywgUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMHgwMDAxMDAwMCk7Ci19Ci0KLS8qKgotICogdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRf ZmVuY2UgLSBlbWl0IGFuIGZlbmNlICYgdHJhcCBjb21tYW5kCi0gKgotICogQHJpbmc6IGFtZGdw dV9yaW5nIHBvaW50ZXIKLSAqIEBmZW5jZTogZmVuY2UgdG8gZW1pdAotICoKLSAqIFdyaXRlIGEg ZmVuY2UgYW5kIGEgdHJhcCBjb21tYW5kIHRvIHRoZSByaW5nLgotICovCi1zdGF0aWMgdm9pZCB2 Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF9mZW5jZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHU2 NCBhZGRyLCB1NjQgc2VxLAotCQkJCSAgICAgdW5zaWduZWQgZmxhZ3MpCi17Ci0Jc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwotCi0JV0FSTl9PTihmbGFncyAmIEFNREdQ VV9GRU5DRV9GTEFHXzY0QklUKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tF VEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pQRUdfR1BDT01fREFUQTApLCAwLCAw LCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgc2VxKTsKLQotCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAs IG1tVVZEX0pQRUdfR1BDT01fREFUQTEpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywgc2VxKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBB Q0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9XUl82 NEJJVF9CQVJfTE9XKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRl KHJpbmcsIGxvd2VyXzMyX2JpdHMoYWRkcikpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywK LQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfTE1JX0pSQkNfUkJfTUVN X1dSXzY0QklUX0JBUl9ISUdIKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoYWRkcikpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlBFR19HUENP TV9DTUQpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywg MHg4KTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09G RlNFVChVVkQsIDAsIG1tVVZEX0pQRUdfR1BDT01fQ01EKSwgMCwgUEFDS0VUSl9DT05ESVRJT05f Q0hFQ0swLCBQQUNLRVRKX1RZUEU0KSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7Ci0K LQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZE LCAwLCBtbVVWRF9KUkJDX1JCX0NPTkRfUkRfVElNRVIpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgwMTQwMDIwMCk7Ci0KLQlhbWRncHVfcmluZ193 cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJD X1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRl KHJpbmcsIHNlcSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1 X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRCSVRfQkFSX0xP VyksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBsb3dl cl8zMl9iaXRzKGFkZHIpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEoo U09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9C QVJfSElHSCksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5n LCB1cHBlcl8zMl9iaXRzKGFkZHIpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBB Q0tFVEooMCwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0szLCBQQUNLRVRKX1RZUEUyKSk7Ci0J YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhmZmZmZmZmZik7Ci0KLQlhbWRncHVfcmluZ193cml0 ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJDX0VY VEVSTkFMX1JFR19CQVNFKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIDB4M2ZiYyk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRK KDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDEp OwotCi0JLyogZW1pdCB0cmFwICovCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUSigw LCAwLCAwLCBQQUNLRVRKX1RZUEU3KSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7Ci19 Ci0KLS8qKgotICogdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfaWIgLSBleGVjdXRlIGluZGlyZWN0 IGJ1ZmZlcgotICoKLSAqIEByaW5nOiBhbWRncHVfcmluZyBwb2ludGVyCi0gKiBAaWI6IGluZGly ZWN0IGJ1ZmZlciB0byBleGVjdXRlCi0gKgotICogV3JpdGUgcmluZyBjb21tYW5kcyB0byBleGVj dXRlIHRoZSBpbmRpcmVjdCBidWZmZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHZjbl92MV8wX2pwZWdf cmluZ19lbWl0X2liKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKLQkJCQkJc3RydWN0IGFtZGdw dV9qb2IgKmpvYiwKLQkJCQkJc3RydWN0IGFtZGdwdV9pYiAqaWIsCi0JCQkJCXVpbnQzMl90IGZs YWdzKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKLQl1bnNp Z25lZCB2bWlkID0gQU1ER1BVX0pPQl9HRVRfVk1JRChqb2IpOwotCi0JYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfTE1JX0pS QkNfSUJfVk1JRCksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShy aW5nLCAodm1pZCB8ICh2bWlkIDw8IDQpKSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAot CQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlBFR19WTUlEKSwg MCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwg KHZtaWQgPDwgNCkpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09D MTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX0lCXzY0QklUX0JBUl9MT1cpLCAw LCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgbG93ZXJfMzJf Yml0cyhpYi0+Z3B1X2FkZHIpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tF VEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX0lCXzY0QklUX0JBUl9I SUdIKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVw cGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAot CQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJDX0lCX1NJWkUpLCAw LCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgaWItPmxlbmd0 aF9kdyk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19P RkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRCSVRfQkFSX0xPVyksIDAs IDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBsb3dlcl8zMl9i aXRzKHJpbmctPmdwdV9hZGRyKSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNL RVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRC SVRfQkFSX0hJR0gpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgdXBwZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikpOwotCi0JYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywKLQkJUEFDS0VUSigwLCAwLCBQQUNLRVRKX0NPTkRJVElPTl9DSEVDSzAsIFBBQ0tF VEpfVFlQRTIpKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKLQotCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pS QkNfUkJfQ09ORF9SRF9USU1FUiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDAxNDAwMjAwKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0J CVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEp LCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgyKTsK LQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChV VkQsIDAsIG1tVVZEX0pSQkNfU1RBVFVTKSwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0szLCBQ QUNLRVRKX1RZUEUzKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgyKTsKLX0KLQotc3Rh dGljIHZvaWQgdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfcmVnX3dhaXQoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLAotCQkJCQkgICAgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwsCi0JCQkJCSAg ICB1aW50MzJfdCBtYXNrKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+ YWRldjsKLQl1aW50MzJfdCByZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQotCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pS QkNfUkJfQ09ORF9SRF9USU1FUiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDAxNDAwMjAwKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0J CVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEp LCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdmFsKTsK LQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChV VkQsIDAsIG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUw KSk7Ci0JaWYgKCgocmVnX29mZnNldCA+PSAweDFmODAwKSAmJiAocmVnX29mZnNldCA8PSAweDIx ZmZmKSkgfHwKLQkJKChyZWdfb2Zmc2V0ID49IDB4MWUwMDApICYmIChyZWdfb2Zmc2V0IDw9IDB4 MWUxZmYpKSkgewotCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKLQkJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywKLQkJCVBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpf VFlQRTMpKTsKLQl9IGVsc2UgewotCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCByZWdfb2Zmc2V0 KTsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJCVBBQ0tFVEooMCwgMCwgMCwgUEFDS0VU Sl9UWVBFMykpOwotCX0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBtYXNrKTsKLX0KLQotc3Rh dGljIHZvaWQgdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfdm1fZmx1c2goc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLAotCQl1bnNpZ25lZCB2bWlkLCB1aW50NjRfdCBwZF9hZGRyKQotewotCXN0cnVj dCBhbWRncHVfdm1odWIgKmh1YiA9ICZyaW5nLT5hZGV2LT52bWh1YltyaW5nLT5mdW5jcy0+dm1o dWJdOwotCXVpbnQzMl90IGRhdGEwLCBkYXRhMSwgbWFzazsKLQotCXBkX2FkZHIgPSBhbWRncHVf Z21jX2VtaXRfZmx1c2hfZ3B1X3RsYihyaW5nLCB2bWlkLCBwZF9hZGRyKTsKLQotCS8qIHdhaXQg Zm9yIHJlZ2lzdGVyIHdyaXRlICovCi0JZGF0YTAgPSBodWItPmN0eDBfcHRiX2FkZHJfbG8zMiAr IHZtaWQgKiAyOwotCWRhdGExID0gbG93ZXJfMzJfYml0cyhwZF9hZGRyKTsKLQltYXNrID0gMHhm ZmZmZmZmZjsKLQl2Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF9yZWdfd2FpdChyaW5nLCBkYXRhMCwg ZGF0YTEsIG1hc2spOwotfQotCi1zdGF0aWMgdm9pZCB2Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF93 cmVnKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKLQkJCQkJdWludDMyX3QgcmVnLCB1aW50MzJf dCB2YWwpCi17Ci0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwotCXVp bnQzMl90IHJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmlu ZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19FWFRFUk5B TF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlpZiAoKChyZWdfb2Zmc2V0ID49 IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAotCQkJKChyZWdfb2Zmc2V0 ID49IDB4MWUwMDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MWUxZmYpKSkgewotCQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAwKTsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJCVBBQ0tFVEoo KHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQl9IGVsc2UgewotCQlh bWRncHVfcmluZ193cml0ZShyaW5nLCByZWdfb2Zmc2V0KTsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKLQkJCVBBQ0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCX0KLQlhbWRncHVf cmluZ193cml0ZShyaW5nLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCB2Y25fdjFfMF9qcGVnX3Jp bmdfbm9wKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdWludDMyX3QgY291bnQpCi17Ci0JaW50 IGk7Ci0KLQlXQVJOX09OKHJpbmctPndwdHIgJSAyIHx8IGNvdW50ICUgMik7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgY291bnQgLyAyOyBpKyspIHsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFD S0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEU2KSk7Ci0JCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcs IDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgdmNuX3YxXzBfanBlZ19yaW5nX3BhdGNoX3dyZWco c3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCB1aW50MzJfdCAqcHRyLCB1aW50MzJfdCByZWdfb2Zm c2V0LCB1aW50MzJfdCB2YWwpCi17Ci0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5n LT5hZGV2OwotCXJpbmctPnJpbmdbKCpwdHIpKytdID0gUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VU KFVWRCwgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQ RTApOwotCWlmICgoKHJlZ19vZmZzZXQgPj0gMHgxZjgwMCkgJiYgKHJlZ19vZmZzZXQgPD0gMHgy MWZmZikpIHx8Ci0JCSgocmVnX29mZnNldCA+PSAweDFlMDAwKSAmJiAocmVnX29mZnNldCA8PSAw eDFlMWZmKSkpIHsKLQkJcmluZy0+cmluZ1soKnB0cikrK10gPSAwOwotCQlyaW5nLT5yaW5nWygq cHRyKSsrXSA9IFBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQRTAp OwotCX0gZWxzZSB7Ci0JCXJpbmctPnJpbmdbKCpwdHIpKytdID0gcmVnX29mZnNldDsKLQkJcmlu Zy0+cmluZ1soKnB0cikrK10gPSBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApOwotCX0K LQlyaW5nLT5yaW5nWygqcHRyKSsrXSA9IHZhbDsKLX0KLQotc3RhdGljIHZvaWQgdmNuX3YxXzBf anBlZ19yaW5nX3NldF9wYXRjaF9yaW5nKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdWludDMy X3QgcHRyKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKLQot CXVpbnQzMl90IHJlZywgcmVnX29mZnNldCwgdmFsLCBtYXNrLCBpOwotCi0JLy8gMXN0OiBwcm9n cmFtIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfTE9XCi0JcmVnID0gU09DMTVf UkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfTE9X KTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSBsb3dlcl8zMl9iaXRzKHJpbmct PmdwdV9hZGRyKTsKLQl2Y25fdjFfMF9qcGVnX3JpbmdfcGF0Y2hfd3JlZyhyaW5nLCAmcHRyLCBy ZWdfb2Zmc2V0LCB2YWwpOwotCi0JLy8gMm5kOiBwcm9ncmFtIG1tVVZEX0xNSV9KUkJDX1JCX01F TV9SRF82NEJJVF9CQVJfSElHSAotCXJlZyA9IFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVW RF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRCSVRfQkFSX0hJR0gpOwotCXJlZ19vZmZzZXQgPSAocmVn IDw8IDIpOwotCXZhbCA9IHVwcGVyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpOwotCXZjbl92MV8w X2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkv LyAzcmQgdG8gNXRoOiBpc3N1ZSBNRU1fUkVBRCBjb21tYW5kcwotCWZvciAoaSA9IDA7IGkgPD0g MjsgaSsrKSB7Ci0JCXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRK X1RZUEUyKTsKLQkJcmluZy0+cmluZ1twdHIrK10gPSAwOwotCX0KLQotCS8vIDZ0aDogcHJvZ3Jh bSBtbVVWRF9KUkJDX1JCX0NOVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIE5PX0ZFVENIIGFuZCBSUFRS IHdyaXRlIGFiaWxpdHkKLQlyZWcgPSBTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJC Q19SQl9DTlRMKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSAweDEzOwotCXZj bl92MV8wX2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7 Ci0KLQkvLyA3dGg6IHByb2dyYW0gbW1VVkRfSlJCQ19SQl9SRUZfREFUQQotCXJlZyA9IFNPQzE1 X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKTsKLQlyZWdfb2Zmc2V0 ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSAweDE7Ci0JdmNuX3YxXzBfanBlZ19yaW5nX3BhdGNoX3dy ZWcocmluZywgJnB0ciwgcmVnX29mZnNldCwgdmFsKTsKLQotCS8vIDh0aDogaXNzdWUgY29uZGl0 aW9uYWwgcmVnaXN0ZXIgcmVhZCBtbVVWRF9KUkJDX1JCX0NOVEwKLQlyZWcgPSBTT0MxNV9SRUdf T0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9DTlRMKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8 PCAyKTsKLQl2YWwgPSAweDE7Ci0JbWFzayA9IDB4MTsKLQotCXJpbmctPnJpbmdbcHRyKytdID0g UEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9DT05EX1JEX1RJ TUVSKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCk7Ci0JcmluZy0+cmluZ1twdHIrK10gPSAweDAxNDAw MjAwOwotCXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwg MCwgbW1VVkRfSlJCQ19SQl9SRUZfREFUQSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApOwotCXJpbmct PnJpbmdbcHRyKytdID0gdmFsOwotCXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSihTT0MxNV9S RUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBB Q0tFVEpfVFlQRTApOwotCWlmICgoKHJlZ19vZmZzZXQgPj0gMHgxZjgwMCkgJiYgKHJlZ19vZmZz ZXQgPD0gMHgyMWZmZikpIHx8Ci0JCSgocmVnX29mZnNldCA+PSAweDFlMDAwKSAmJiAocmVnX29m ZnNldCA8PSAweDFlMWZmKSkpIHsKLQkJcmluZy0+cmluZ1twdHIrK10gPSAwOwotCQlyaW5nLT5y aW5nW3B0cisrXSA9IFBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQ RTMpOwotCX0gZWxzZSB7Ci0JCXJpbmctPnJpbmdbcHRyKytdID0gcmVnX29mZnNldDsKLQkJcmlu Zy0+cmluZ1twdHIrK10gPSBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTMpOwotCX0KLQly aW5nLT5yaW5nW3B0cisrXSA9IG1hc2s7Ci0KLQkvLzl0aCB0byAyMXN0OiBpbnNlcnQgbm8tb3AK LQlmb3IgKGkgPSAwOyBpIDw9IDEyOyBpKyspIHsKLQkJcmluZy0+cmluZ1twdHIrK10gPSBQQUNL RVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTYpOwotCQlyaW5nLT5yaW5nW3B0cisrXSA9IDA7Ci0J fQotCi0JLy8yMm5kOiByZXNldCBtbVVWRF9KUkJDX1JCX1JQVFIKLQlyZWcgPSBTT0MxNV9SRUdf T0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9SUFRSKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8 PCAyKTsKLQl2YWwgPSAwOwotCXZjbl92MV8wX2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZw dHIsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkvLzIzcmQ6IHByb2dyYW0gbW1VVkRfSlJCQ19SQl9D TlRMIHRvIGRpc2FibGUgbm9fZmV0Y2gKLQlyZWcgPSBTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwg bW1VVkRfSlJCQ19SQl9DTlRMKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSAw eDEyOwotCXZjbl92MV8wX2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZz ZXQsIHZhbCk7Ci19Ci0KIHN0YXRpYyBpbnQgdmNuX3YxXzBfc2V0X2ludGVycnVwdF9zdGF0ZShz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJCQkJc3RydWN0IGFtZGdwdV9pcnFfc3JjICpz b3VyY2UsCiAJCQkJCXVuc2lnbmVkIHR5cGUsCkBAIC0yMTIzLDkgKzE3MTAsNiBAQCBzdGF0aWMg aW50IHZjbl92MV8wX3Byb2Nlc3NfaW50ZXJydXB0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAogCWNhc2UgMTIwOgogCQlhbWRncHVfZmVuY2VfcHJvY2VzcygmYWRldi0+dmNuLmluc3QtPnJp bmdfZW5jWzFdKTsKIAkJYnJlYWs7Ci0JY2FzZSAxMjY6Ci0JCWFtZGdwdV9mZW5jZV9wcm9jZXNz KCZhZGV2LT52Y24uaW5zdC0+cmluZ19qcGVnKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJN X0VSUk9SKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwKIAkJCSAgZW50cnktPnNyY19p ZCwgZW50cnktPnNyY19kYXRhWzBdKTsKQEAgLTIyNTksNDEgKzE4NDMsNiBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIHZjbl92MV8wX2VuY19yaW5nX3ZtX2Z1bmNzID0g ewogCS5lbWl0X3JlZ193cml0ZV9yZWdfd2FpdCA9IGFtZGdwdV9yaW5nX2VtaXRfcmVnX3dyaXRl X3JlZ193YWl0X2hlbHBlciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X3Jpbmdf ZnVuY3MgdmNuX3YxXzBfanBlZ19yaW5nX3ZtX2Z1bmNzID0gewotCS50eXBlID0gQU1ER1BVX1JJ TkdfVFlQRV9WQ05fSlBFRywKLQkuYWxpZ25fbWFzayA9IDB4ZiwKLQkubm9wID0gUEFDS0VUMCgw eDgxZmYsIDApLAotCS5zdXBwb3J0XzY0Yml0X3B0cnMgPSBmYWxzZSwKLQkubm9fdXNlcl9mZW5j ZSA9IHRydWUsCi0JLnZtaHViID0gQU1ER1BVX01NSFVCXzAsCi0JLmV4dHJhX2R3ID0gNjQsCi0J LmdldF9ycHRyID0gdmNuX3YxXzBfanBlZ19yaW5nX2dldF9ycHRyLAotCS5nZXRfd3B0ciA9IHZj bl92MV8wX2pwZWdfcmluZ19nZXRfd3B0ciwKLQkuc2V0X3dwdHIgPSB2Y25fdjFfMF9qcGVnX3Jp bmdfc2V0X3dwdHIsCi0JLmVtaXRfZnJhbWVfc2l6ZSA9Ci0JCTYgKyA2ICsgLyogaGRwIGludmFs aWRhdGUgLyBmbHVzaCAqLwotCQlTT0MxNV9GTFVTSF9HUFVfVExCX05VTV9XUkVHICogNiArCi0J CVNPQzE1X0ZMVVNIX0dQVV9UTEJfTlVNX1JFR19XQUlUICogOCArCi0JCTggKyAvKiB2Y25fdjFf MF9qcGVnX3JpbmdfZW1pdF92bV9mbHVzaCAqLwotCQkyNiArIDI2ICsgLyogdmNuX3YxXzBfanBl Z19yaW5nX2VtaXRfZmVuY2UgeDIgdm0gZmVuY2UgKi8KLQkJNiwKLQkuZW1pdF9pYl9zaXplID0g MjIsIC8qIHZjbl92MV8wX2pwZWdfcmluZ19lbWl0X2liICovCi0JLmVtaXRfaWIgPSB2Y25fdjFf MF9qcGVnX3JpbmdfZW1pdF9pYiwKLQkuZW1pdF9mZW5jZSA9IHZjbl92MV8wX2pwZWdfcmluZ19l bWl0X2ZlbmNlLAotCS5lbWl0X3ZtX2ZsdXNoID0gdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfdm1f Zmx1c2gsCi0JLnRlc3RfcmluZyA9IGFtZGdwdV92Y25fanBlZ19yaW5nX3Rlc3RfcmluZywKLQku dGVzdF9pYiA9IGFtZGdwdV92Y25fanBlZ19yaW5nX3Rlc3RfaWIsCi0JLmluc2VydF9ub3AgPSB2 Y25fdjFfMF9qcGVnX3Jpbmdfbm9wLAotCS5pbnNlcnRfc3RhcnQgPSB2Y25fdjFfMF9qcGVnX3Jp bmdfaW5zZXJ0X3N0YXJ0LAotCS5pbnNlcnRfZW5kID0gdmNuX3YxXzBfanBlZ19yaW5nX2luc2Vy dF9lbmQsCi0JLnBhZF9pYiA9IGFtZGdwdV9yaW5nX2dlbmVyaWNfcGFkX2liLAotCS5iZWdpbl91 c2UgPSBhbWRncHVfdmNuX3JpbmdfYmVnaW5fdXNlLAotCS5lbmRfdXNlID0gYW1kZ3B1X3Zjbl9y aW5nX2VuZF91c2UsCi0JLmVtaXRfd3JlZyA9IHZjbl92MV8wX2pwZWdfcmluZ19lbWl0X3dyZWcs Ci0JLmVtaXRfcmVnX3dhaXQgPSB2Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF9yZWdfd2FpdCwKLQku ZW1pdF9yZWdfd3JpdGVfcmVnX3dhaXQgPSBhbWRncHVfcmluZ19lbWl0X3JlZ193cml0ZV9yZWdf d2FpdF9oZWxwZXIsCi19OwotCiBzdGF0aWMgdm9pZCB2Y25fdjFfMF9zZXRfZGVjX3JpbmdfZnVu Y3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJYWRldi0+dmNuLmluc3QtPnJpbmdf ZGVjLmZ1bmNzID0gJnZjbl92MV8wX2RlY19yaW5nX3ZtX2Z1bmNzOwpAQCAtMjMxMCwxMiArMTg1 OSw2IEBAIHN0YXRpYyB2b2lkIHZjbl92MV8wX3NldF9lbmNfcmluZ19mdW5jcyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKIAlEUk1fSU5GTygiVkNOIGVuY29kZSBpcyBlbmFibGVkIGluIFZN IG1vZGVcbiIpOwogfQogCi1zdGF0aWMgdm9pZCB2Y25fdjFfMF9zZXRfanBlZ19yaW5nX2Z1bmNz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQotewotCWFkZXYtPnZjbi5pbnN0LT5yaW5nX2pw ZWcuZnVuY3MgPSAmdmNuX3YxXzBfanBlZ19yaW5nX3ZtX2Z1bmNzOwotCURSTV9JTkZPKCJWQ04g anBlZyBkZWNvZGUgaXMgZW5hYmxlZCBpbiBWTSBtb2RlXG4iKTsKLX0KLQogc3RhdGljIGNvbnN0 IHN0cnVjdCBhbWRncHVfaXJxX3NyY19mdW5jcyB2Y25fdjFfMF9pcnFfZnVuY3MgPSB7CiAJLnNl dCA9IHZjbl92MV8wX3NldF9pbnRlcnJ1cHRfc3RhdGUsCiAJLnByb2Nlc3MgPSB2Y25fdjFfMF9w cm9jZXNzX2ludGVycnVwdCwKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hbWQtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2BD48C17440 for ; Tue, 12 Nov 2019 18:04:08 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0E7A42067B for ; Tue, 12 Nov 2019 18:04:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0E7A42067B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C733E6EBAA; Tue, 12 Nov 2019 18:04:07 +0000 (UTC) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-eopbgr790081.outbound.protection.outlook.com [40.107.79.81]) by gabe.freedesktop.org (Postfix) with ESMTPS id F031E6EBA4 for ; Tue, 12 Nov 2019 18:04:03 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jzeAqFxG/lURWHMCg3z4pJ60IDLgrZ0js3cAnP49xEFtw6fZk+UCvB7LZGv/Wmk7Q9k1BLLPFw9lh/XDWvsAJJ/srUo5FgQE31TE8/Zi2TzDgSCeVC8lWizdgY8JsbTKg6JqEGrqL7gPDmM7FRZRUPZP23mOwR0sX3IyCii1qtlMSsVDQghAbPCPF3wWGdh+3OtzLoedvgUYExG5zQcL9hfT+peYamU6mOapUPwSfUgJUQ8HIwvDXOGyFO+SjKmk9ta3dATzCU7Dc1lPwNNnn0pKvUmc6UblFHjrZeQjfIw6vG5lHampRktR891f6x00TSKFZAFRfcynCxEwPdvQtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aLijgiQSeQTMXDxjmJqrxvRWEB4/MplGcEc9JLu1ifU=; b=HjNF3pvMpZFsQJ0/sdvZcxCHt0G5BPemS4Y/yn/UuSjVjEUELnZmNgHWznUf/GYZh1gnryFPgBRFOkKm7Q5RxSY0ZSBqFIuGIYjxpJ+jEf84kBGJb7CLsQ4xXTXeGh/WNU4O69WCrmEX1PjEDupFbIbk5gnPHeZXzL4oUbxTjOjJk9WXS3kJg1hHG1irHplG6i6D2wLexx07GwIV0HGZNvKedfYiH8kkTH06DxUol7qNb7r/QU/9EFQ/7IgrPNVIp/cfWPxcLikqh/BjT+u+pWS2ZgVKBmnsh1vYeAvqtfH7W2YvpbLHLx6okrnKC9FmaQ0grGD95gVshCHpepeG2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none Received: from DM5PR12MB2456.namprd12.prod.outlook.com (52.132.141.37) by DM5PR12MB2405.namprd12.prod.outlook.com (52.132.140.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.24; Tue, 12 Nov 2019 18:04:01 +0000 Received: from DM5PR12MB2456.namprd12.prod.outlook.com ([fe80::75bf:bd52:2f61:656b]) by DM5PR12MB2456.namprd12.prod.outlook.com ([fe80::75bf:bd52:2f61:656b%7]) with mapi id 15.20.2451.023; Tue, 12 Nov 2019 18:04:01 +0000 From: Leo Liu To: amd-gfx@lists.freedesktop.org Subject: [PATCH 03/21] drm/amdgpu: separate JPEG1.0 code out from VCN1.0 Date: Tue, 12 Nov 2019 13:03:11 -0500 Message-Id: <20191112180329.3927-4-leo.liu@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191112180329.3927-1-leo.liu@amd.com> References: <20191112180329.3927-1-leo.liu@amd.com> X-ClientProxiedBy: YTOPR0101CA0059.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b00:14::36) To DM5PR12MB2456.namprd12.prod.outlook.com (2603:10b6:4:b4::37) MIME-Version: 1.0 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [165.204.55.251] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 9347ab23-9682-47d6-74ad-08d7679ab291 X-MS-TrafficTypeDiagnostic: DM5PR12MB2405: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-Forefront-PRVS: 021975AE46 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(376002)(346002)(136003)(396003)(366004)(199004)(189003)(4326008)(6512007)(76176011)(66066001)(47776003)(6666004)(2351001)(478600001)(51416003)(52116002)(14454004)(6916009)(44832011)(486006)(186003)(476003)(2616005)(6506007)(386003)(7736002)(26005)(25786009)(2361001)(14444005)(36756003)(86362001)(305945005)(446003)(11346002)(6116002)(8676002)(3846002)(99286004)(16586007)(66476007)(50226002)(66946007)(30864003)(2906002)(6486002)(6436002)(8936002)(81166006)(50466002)(5660300002)(316002)(1076003)(48376002)(81156014)(66556008)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB2405; H:DM5PR12MB2456.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /BPzzx15XxZUsreAKzjKH9+256fjD9OScHtEc9SJjlPuD8hyZNfqZY13C3h6oOiZHMExSVixoaWZCrGiYqimWSpENmCXB69lK55tAESD6Umo6GehrquaK3FjLw+cLq2Zgvat3VhYADGLUdD0Bdk0sJGzRB7BNs2HsR3rnUMI1Cy6EySA4Z50rgKnpfDfnNJjRDe5BEDNAeOBpoq2C5irkEuqPw/4gMzS/hzd3TaQhL+6fUJsWN+l1bMh9QDJSZ6uh13wm468yqPWPEL9gaWM1S3hDj4BaV4vV+9+JxOaGTraU3LHxRQTp6MsPUjcgAk/Y8cGzLHUH1VKcBwF4SVB4xIJyHDzQof7Avv8gGe0sDEsUhYwCXX6YgUJZKi+1WqQh8ABeX6EYp3ot1yOxmrK97ZHlNjOnDhzl1qHxZeXwurFZehBJGqrbkpa4drrSPzU X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9347ab23-9682-47d6-74ad-08d7679ab291 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2019 18:04:01.7874 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yuDC1HKgmdeM+Ma3PvQBCUciYP17WszkCTRk0SP6p3rKikP+l+Z6ZDI1lbKL8MgI X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB2405 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aLijgiQSeQTMXDxjmJqrxvRWEB4/MplGcEc9JLu1ifU=; b=RmxFDzDhyFeO4qo+plBF8QNLqXwSJxctssb/iZ7cTFbriFJjkcOMEik5vHjWjoxXrbDX4jfJamHN/ZbA6vBWTxSWnXq0ZstPEkG/tO/R+Lf6n7Su0EMe5X75OFy2X94RwUdEuvnIdsp4i2HutxfYL+zfNXTTJXKik9oLxT8uZgc= X-Mailman-Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Leo.Liu@amd.com; X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Leo Liu Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191112180311.M3HvLY3Hzc2f7Uvg9oSB6OMxyjuYGAC1fp71hQF9Kcs@z> Rm9yIFZDTjEuMCwgdGhlIHNlcGFyYXRpb24gaXMganVzdCBpbiBjb2RlIHdpc2UsIEpQRUcxLjAg SFcgaXMgc3RpbGwKaW5jbHVkZWQgaW4gdGhlIFZDTjEuMCBIVy4KClNpZ25lZC1vZmYtYnk6IExl byBMaXUgPGxlby5saXVAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9N YWtlZmlsZSAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192MV8w LmMgfCA1ODQgKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvanBlZ192MV8wLmggfCAgMzIgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3Zj bl92MV8wLmMgIHwgNDgxICstLS0tLS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDYz MCBpbnNlcnRpb25zKCspLCA0NzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192MV8wLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YxXzAuaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvTWFrZWZpbGUKaW5kZXggMTFjYTcwMTA1ZWViLi4yOTM2YzI5MjM3OWQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L01ha2VmaWxlCkBAIC0xNTMsNyArMTUzLDggQEAgYW1kZ3B1LXkgKz0gXAog CXZjbl92MV8wLm8gXAogCXZjbl92Ml8wLm8gXAogCXZjbl92Ml81Lm8gXAotCWFtZGdwdV9qcGVn Lm8KKwlhbWRncHVfanBlZy5vIFwKKwlqcGVnX3YxXzAubwogCiAjIGFkZCBBVEhVQiBibG9jawog YW1kZ3B1LXkgKz0gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBl Z192MV8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YxXzAuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1MzUwNmRmMDc3ZAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjFfMC5jCkBAIC0wLDAg KzEsNTg0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywg SW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiYW1kZ3B1LmgiCisjaW5j bHVkZSAiYW1kZ3B1X2pwZWcuaCIKKyNpbmNsdWRlICJzb2MxNS5oIgorI2luY2x1ZGUgInNvYzE1 ZC5oIgorCisjaW5jbHVkZSAidmNuL3Zjbl8xXzBfb2Zmc2V0LmgiCisjaW5jbHVkZSAidmNuL3Zj bl8xXzBfc2hfbWFzay5oIgorCitzdGF0aWMgdm9pZCBqcGVnX3YxXzBfc2V0X2RlY19yaW5nX2Z1 bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9z ZXRfaXJxX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKKworc3RhdGljIHZvaWQg anBlZ192MV8wX2RlY29kZV9yaW5nX3BhdGNoX3dyZWcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n LCB1aW50MzJfdCAqcHRyLCB1aW50MzJfdCByZWdfb2Zmc2V0LCB1aW50MzJfdCB2YWwpCit7CisJ c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCXJpbmctPnJpbmdbKCpw dHIpKytdID0gUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfRVhU RVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKTsKKwlpZiAoKChyZWdfb2Zmc2V0 ID49IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAorCQkoKHJlZ19vZmZz ZXQgPj0gMHgxZTAwMCkgJiYgKHJlZ19vZmZzZXQgPD0gMHgxZTFmZikpKSB7CisJCXJpbmctPnJp bmdbKCpwdHIpKytdID0gMDsKKwkJcmluZy0+cmluZ1soKnB0cikrK10gPSBQQUNLRVRKKChyZWdf b2Zmc2V0ID4+IDIpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKTsKKwl9IGVsc2UgeworCQlyaW5nLT5y aW5nWygqcHRyKSsrXSA9IHJlZ19vZmZzZXQ7CisJCXJpbmctPnJpbmdbKCpwdHIpKytdID0gUEFD S0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUwKTsKKwl9CisJcmluZy0+cmluZ1soKnB0cikrK10g PSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9kZWNvZGVfcmluZ19zZXRfcGF0Y2hf cmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IHB0cikKK3sKKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisKKwl1aW50MzJfdCByZWcsIHJlZ19v ZmZzZXQsIHZhbCwgbWFzaywgaTsKKworCS8vIDFzdDogcHJvZ3JhbSBtbVVWRF9MTUlfSlJCQ19S Ql9NRU1fUkRfNjRCSVRfQkFSX0xPVworCXJlZyA9IFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwg bW1VVkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9MT1cpOworCXJlZ19vZmZzZXQgPSAo cmVnIDw8IDIpOworCXZhbCA9IGxvd2VyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpOworCWpwZWdf djFfMF9kZWNvZGVfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7 CisKKwkvLyAybmQ6IHByb2dyYW0gbW1VVkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9I SUdICisJcmVnID0gU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9N RU1fUkRfNjRCSVRfQkFSX0hJR0gpOworCXJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCXZhbCA9 IHVwcGVyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpOworCWpwZWdfdjFfMF9kZWNvZGVfcmluZ19w YXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7CisKKwkvLyAzcmQgdG8gNXRo OiBpc3N1ZSBNRU1fUkVBRCBjb21tYW5kcworCWZvciAoaSA9IDA7IGkgPD0gMjsgaSsrKSB7CisJ CXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUyKTsKKwkJ cmluZy0+cmluZ1twdHIrK10gPSAwOworCX0KKworCS8vIDZ0aDogcHJvZ3JhbSBtbVVWRF9KUkJD X1JCX0NOVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIE5PX0ZFVENIIGFuZCBSUFRSIHdyaXRlIGFiaWxp dHkKKwlyZWcgPSBTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ05UTCk7 CisJcmVnX29mZnNldCA9IChyZWcgPDwgMik7CisJdmFsID0gMHgxMzsKKwlqcGVnX3YxXzBfZGVj b2RlX3JpbmdfcGF0Y2hfd3JlZyhyaW5nLCAmcHRyLCByZWdfb2Zmc2V0LCB2YWwpOworCisJLy8g N3RoOiBwcm9ncmFtIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEKKwlyZWcgPSBTT0MxNV9SRUdfT0ZG U0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEpOworCXJlZ19vZmZzZXQgPSAocmVn IDw8IDIpOworCXZhbCA9IDB4MTsKKwlqcGVnX3YxXzBfZGVjb2RlX3JpbmdfcGF0Y2hfd3JlZyhy aW5nLCAmcHRyLCByZWdfb2Zmc2V0LCB2YWwpOworCisJLy8gOHRoOiBpc3N1ZSBjb25kaXRpb25h bCByZWdpc3RlciByZWFkIG1tVVZEX0pSQkNfUkJfQ05UTAorCXJlZyA9IFNPQzE1X1JFR19PRkZT RVQoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9DTlRMKTsKKwlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAy KTsKKwl2YWwgPSAweDE7CisJbWFzayA9IDB4MTsKKworCXJpbmctPnJpbmdbcHRyKytdID0gUEFD S0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1F UiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApOworCXJpbmctPnJpbmdbcHRyKytdID0gMHgwMTQwMDIw MDsKKwlyaW5nLT5yaW5nW3B0cisrXSA9IFBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChKUEVHLCAw LCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCk7CisJcmluZy0+ cmluZ1twdHIrK10gPSB2YWw7CisJcmluZy0+cmluZ1twdHIrK10gPSBQQUNLRVRKKFNPQzE1X1JF R19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBB Q0tFVEpfVFlQRTApOworCWlmICgoKHJlZ19vZmZzZXQgPj0gMHgxZjgwMCkgJiYgKHJlZ19vZmZz ZXQgPD0gMHgyMWZmZikpIHx8CisJCSgocmVnX29mZnNldCA+PSAweDFlMDAwKSAmJiAocmVnX29m ZnNldCA8PSAweDFlMWZmKSkpIHsKKwkJcmluZy0+cmluZ1twdHIrK10gPSAwOworCQlyaW5nLT5y aW5nW3B0cisrXSA9IFBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQ RTMpOworCX0gZWxzZSB7CisJCXJpbmctPnJpbmdbcHRyKytdID0gcmVnX29mZnNldDsKKwkJcmlu Zy0+cmluZ1twdHIrK10gPSBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTMpOworCX0KKwly aW5nLT5yaW5nW3B0cisrXSA9IG1hc2s7CisKKwkvLzl0aCB0byAyMXN0OiBpbnNlcnQgbm8tb3AK Kwlmb3IgKGkgPSAwOyBpIDw9IDEyOyBpKyspIHsKKwkJcmluZy0+cmluZ1twdHIrK10gPSBQQUNL RVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTYpOworCQlyaW5nLT5yaW5nW3B0cisrXSA9IDA7CisJ fQorCisJLy8yMm5kOiByZXNldCBtbVVWRF9KUkJDX1JCX1JQVFIKKwlyZWcgPSBTT0MxNV9SRUdf T0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUlBUUik7CisJcmVnX29mZnNldCA9IChyZWcg PDwgMik7CisJdmFsID0gMDsKKwlqcGVnX3YxXzBfZGVjb2RlX3JpbmdfcGF0Y2hfd3JlZyhyaW5n LCAmcHRyLCByZWdfb2Zmc2V0LCB2YWwpOworCisJLy8yM3JkOiBwcm9ncmFtIG1tVVZEX0pSQkNf UkJfQ05UTCB0byBkaXNhYmxlIG5vX2ZldGNoCisJcmVnID0gU09DMTVfUkVHX09GRlNFVChKUEVH LCAwLCBtbVVWRF9KUkJDX1JCX0NOVEwpOworCXJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCXZh bCA9IDB4MTI7CisJanBlZ192MV8wX2RlY29kZV9yaW5nX3BhdGNoX3dyZWcocmluZywgJnB0ciwg cmVnX29mZnNldCwgdmFsKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfZ2V0 X3JwdHIgLSBnZXQgcmVhZCBwb2ludGVyCisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50 ZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGhhcmR3YXJlIHJlYWQgcG9pbnRlcgorICov CitzdGF0aWMgdWludDY0X3QganBlZ192MV8wX2RlY29kZV9yaW5nX2dldF9ycHRyKHN0cnVjdCBh bWRncHVfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmct PmFkZXY7CisKKwlyZXR1cm4gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUlBU Uik7Cit9CisKKy8qKgorICoganBlZ192MV8wX2RlY29kZV9yaW5nX2dldF93cHRyIC0gZ2V0IHdy aXRlIHBvaW50ZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFJl dHVybnMgdGhlIGN1cnJlbnQgaGFyZHdhcmUgd3JpdGUgcG9pbnRlcgorICovCitzdGF0aWMgdWlu dDY0X3QganBlZ192MV8wX2RlY29kZV9yaW5nX2dldF93cHRyKHN0cnVjdCBhbWRncHVfcmluZyAq cmluZykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisKKwly ZXR1cm4gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfV1BUUik7Cit9CisKKy8q KgorICoganBlZ192MV8wX2RlY29kZV9yaW5nX3NldF93cHRyIC0gc2V0IHdyaXRlIHBvaW50ZXIK KyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIENvbW1pdHMgdGhlIHdy aXRlIHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlCisgKi8KK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9k ZWNvZGVfcmluZ19zZXRfd3B0cihzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCisJV1JFRzMyX1NPQzE1KEpQRUcs IDAsIG1tVVZEX0pSQkNfUkJfV1BUUiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7Cit9CisK Ky8qKgorICoganBlZ192MV8wX2RlY29kZV9yaW5nX2luc2VydF9zdGFydCAtIGluc2VydCBhIHN0 YXJ0IGNvbW1hbmQKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFdy aXRlIGEgc3RhcnQgY29tbWFuZCB0byB0aGUgcmluZy4KKyAqLworc3RhdGljIHZvaWQganBlZ192 MV8wX2RlY29kZV9yaW5nX2luc2VydF9zdGFydChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7 CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZE X0pSQkNfRVhURVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywgMHg2OGUwNCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQ QUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5n LCAweDgwMDEwMDAwKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfaW5zZXJ0 X2VuZCAtIGluc2VydCBhIGVuZCBjb21tYW5kCisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBv aW50ZXIKKyAqCisgKiBXcml0ZSBhIGVuZCBjb21tYW5kIHRvIHRoZSByaW5nLgorICovCitzdGF0 aWMgdm9pZCBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfaW5zZXJ0X2VuZChzdHJ1Y3QgYW1kZ3B1X3Jp bmcgKnJpbmcpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2Owor CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQ RUcsIDAsIG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUw KSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHg2OGUwNCk7CisKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLCBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDAwMDEwMDAwKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZGVjb2Rl X3JpbmdfZW1pdF9mZW5jZSAtIGVtaXQgYW4gZmVuY2UgJiB0cmFwIGNvbW1hbmQKKyAqCisgKiBA cmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICogQGZlbmNlOiBmZW5jZSB0byBlbWl0CisgKgor ICogV3JpdGUgYSBmZW5jZSBhbmQgYSB0cmFwIGNvbW1hbmQgdG8gdGhlIHJpbmcuCisgKi8KK3N0 YXRpYyB2b2lkIGpwZWdfdjFfMF9kZWNvZGVfcmluZ19lbWl0X2ZlbmNlKHN0cnVjdCBhbWRncHVf cmluZyAqcmluZywgdTY0IGFkZHIsIHU2NCBzZXEsCisJCQkJICAgICB1bnNpZ25lZCBmbGFncykK K3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisKKwlXQVJOX09O KGZsYWdzICYgQU1ER1BVX0ZFTkNFX0ZMQUdfNjRCSVQpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pQRUdfR1BD T01fREFUQTApLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmlu Zywgc2VxKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVH X09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUEVHX0dQQ09NX0RBVEExKSwgMCwgMCwgUEFDS0VUSl9U WVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHNlcSk7CisKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfTE1J X0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9MT1cpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgbG93ZXJfMzJfYml0cyhhZGRyKSk7CisKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1V VkRfTE1JX0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9ISUdIKSwgMCwgMCwgUEFDS0VUSl9UWVBF MCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoYWRkcikpOworCisJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcs IDAsIG1tVVZEX0pQRUdfR1BDT01fQ01EKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIDB4OCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQ QUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlBFR19HUENPTV9DTUQpLCAw LCBQQUNLRVRKX0NPTkRJVElPTl9DSEVDSzAsIFBBQ0tFVEpfVFlQRTQpKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAwKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEoo U09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX0NPTkRfUkRfVElNRVIpLCAw LCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgwMTQwMDIw MCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZT RVQoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9SRUZfREFUQSksIDAsIDAsIFBBQ0tFVEpfVFlQRTAp KTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBzZXEpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJD X1JCX01FTV9SRF82NEJJVF9CQVJfTE9XKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMoYWRkcikpOworCisJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0xN SV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfSElHSCksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsK KwlhbWRncHVfcmluZ193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRzKGFkZHIpKTsKKworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooMCwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hF Q0szLCBQQUNLRVRKX1RZUEUyKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhmZmZmZmZm Zik7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZT RVQoSlBFRywgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpf VFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDNmYmMpOworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywKKwkJUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1k Z3B1X3Jpbmdfd3JpdGUocmluZywgMHgxKTsKKworCS8qIGVtaXQgdHJhcCAqLworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFNykpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIDApOworfQorCisvKioKKyAqIGpwZWdfdjFfMF9kZWNvZGVfcmlu Z19lbWl0X2liIC0gZXhlY3V0ZSBpbmRpcmVjdCBidWZmZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1 X3JpbmcgcG9pbnRlcgorICogQGliOiBpbmRpcmVjdCBidWZmZXIgdG8gZXhlY3V0ZQorICoKKyAq IFdyaXRlIHJpbmcgY29tbWFuZHMgdG8gZXhlY3V0ZSB0aGUgaW5kaXJlY3QgYnVmZmVyLgorICov CitzdGF0aWMgdm9pZCBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfZW1pdF9pYihzdHJ1Y3QgYW1kZ3B1 X3JpbmcgKnJpbmcsCisJCQkJCXN0cnVjdCBhbWRncHVfam9iICpqb2IsCisJCQkJCXN0cnVjdCBh bWRncHVfaWIgKmliLAorCQkJCQl1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisJdW5zaWduZWQgdm1pZCA9IEFNREdQVV9KT0JfR0VU X1ZNSUQoam9iKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVf UkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19JQl9WTUlEKSwgMCwgMCwgUEFDS0VU Sl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwgKHZtaWQgPDwgNCkp KTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVHX09GRlNF VChKUEVHLCAwLCBtbVVWRF9MTUlfSlBFR19WTUlEKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwor CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwgKHZtaWQgPDwgNCkpKTsKKworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBt bVVWRF9MTUlfSlJCQ19JQl82NEJJVF9CQVJfTE9XKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwor CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSk7CisK KwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBF RywgMCwgbW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRfQkFSX0hJR0gpLCAwLCAwLCBQQUNLRVRKX1RZ UEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhpYi0+Z3B1X2Fk ZHIpKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVHX09G RlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX0lCX1NJWkUpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgaWItPmxlbmd0aF9kdyk7CisKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRf TE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9MT1cpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgbG93ZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikp OworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VU KEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfSElHSCksIDAsIDAs IFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRz KHJpbmctPmdwdV9hZGRyKSk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRK KDAsIDAsIFBBQ0tFVEpfQ09ORElUSU9OX0NIRUNLMCwgUEFDS0VUSl9UWVBFMikpOworCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIDApOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJUEFD S0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1F UiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDAx NDAwMjAwKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09DMTVfUkVH X09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFDS0VUSl9U WVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4Mik7CisKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlJC Q19TVEFUVVMpLCAwLCBQQUNLRVRKX0NPTkRJVElPTl9DSEVDSzMsIFBBQ0tFVEpfVFlQRTMpKTsK KwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDIpOworfQorCitzdGF0aWMgdm9pZCBqcGVnX3Yx XzBfZGVjb2RlX3JpbmdfZW1pdF9yZWdfd2FpdChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCisJ CQkJCSAgICB1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCwKKwkJCQkJICAgIHVpbnQzMl90IG1h c2spCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCXVpbnQz Ml90IHJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywK KwkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ09ORF9S RF9USU1FUiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5n LCAweDAxNDAwMjAwKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCVBBQ0tFVEooU09D MTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFD S0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHZhbCk7CisKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1V VkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlpZiAo KChyZWdfb2Zmc2V0ID49IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAor CQkoKHJlZ19vZmZzZXQgPj0gMHgxZTAwMCkgJiYgKHJlZ19vZmZzZXQgPD0gMHgxZTFmZikpKSB7 CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworCQlhbWRncHVfcmluZ193cml0ZShyaW5n LAorCQkJUEFDS0VUSigocmVnX29mZnNldCA+PiAyKSwgMCwgMCwgUEFDS0VUSl9UWVBFMykpOwor CX0gZWxzZSB7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHJlZ19vZmZzZXQpOworCQlhbWRn cHVfcmluZ193cml0ZShyaW5nLAorCQkJUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUzKSk7 CisJfQorCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBq cGVnX3YxXzBfZGVjb2RlX3JpbmdfZW1pdF92bV9mbHVzaChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcsCisJCXVuc2lnbmVkIHZtaWQsIHVpbnQ2NF90IHBkX2FkZHIpCit7CisJc3RydWN0IGFtZGdw dV92bWh1YiAqaHViID0gJnJpbmctPmFkZXYtPnZtaHViW3JpbmctPmZ1bmNzLT52bWh1Yl07CisJ dWludDMyX3QgZGF0YTAsIGRhdGExLCBtYXNrOworCisJcGRfYWRkciA9IGFtZGdwdV9nbWNfZW1p dF9mbHVzaF9ncHVfdGxiKHJpbmcsIHZtaWQsIHBkX2FkZHIpOworCisJLyogd2FpdCBmb3IgcmVn aXN0ZXIgd3JpdGUgKi8KKwlkYXRhMCA9IGh1Yi0+Y3R4MF9wdGJfYWRkcl9sbzMyICsgdm1pZCAq IDI7CisJZGF0YTEgPSBsb3dlcl8zMl9iaXRzKHBkX2FkZHIpOworCW1hc2sgPSAweGZmZmZmZmZm OworCWpwZWdfdjFfMF9kZWNvZGVfcmluZ19lbWl0X3JlZ193YWl0KHJpbmcsIGRhdGEwLCBkYXRh MSwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjFfMF9kZWNvZGVfcmluZ19lbWl0X3dy ZWcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAorCQkJCQl1aW50MzJfdCByZWcsIHVpbnQzMl90 IHZhbCkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisJdWlu dDMyX3QgcmVnX29mZnNldCA9IChyZWcgPDwgMik7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5n LAorCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlJCQ19FWFRFUk5B TF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlpZiAoKChyZWdfb2Zmc2V0ID49 IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAorCQkJKChyZWdfb2Zmc2V0 ID49IDB4MWUwMDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MWUxZmYpKSkgeworCQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAwKTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKKwkJCVBBQ0tFVEoo KHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwl9IGVsc2UgeworCQlh bWRncHVfcmluZ193cml0ZShyaW5nLCByZWdfb2Zmc2V0KTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKKwkJCVBBQ0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCX0KKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBqcGVnX3YxXzBfZGVjb2Rl X3Jpbmdfbm9wKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdWludDMyX3QgY291bnQpCit7CisJ aW50IGk7CisKKwlXQVJOX09OKHJpbmctPndwdHIgJSAyIHx8IGNvdW50ICUgMik7CisKKwlmb3Ig KGkgPSAwOyBpIDwgY291bnQgLyAyOyBpKyspIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywg UEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEU2KSk7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJp bmcsIDApOworCX0KK30KKworc3RhdGljIGludCBqcGVnX3YxXzBfc2V0X2ludGVycnVwdF9zdGF0 ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJc3RydWN0IGFtZGdwdV9pcnFfc3Jj ICpzb3VyY2UsCisJCQkJCXVuc2lnbmVkIHR5cGUsCisJCQkJCWVudW0gYW1kZ3B1X2ludGVycnVw dF9zdGF0ZSBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqcGVnX3YxXzBf cHJvY2Vzc19pbnRlcnJ1cHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgICAg c3RydWN0IGFtZGdwdV9pcnFfc3JjICpzb3VyY2UsCisJCQkJICAgICAgc3RydWN0IGFtZGdwdV9p dl9lbnRyeSAqZW50cnkpCit7CisJRFJNX0RFQlVHKCJJSDogSlBFRyBkZWNvZGUgVFJBUFxuIik7 CisKKwlzd2l0Y2ggKGVudHJ5LT5zcmNfaWQpIHsKKwljYXNlIDEyNjoKKwkJYW1kZ3B1X2ZlbmNl X3Byb2Nlc3MoJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWMpOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlEUk1fRVJST1IoIlVuaGFuZGxlZCBpbnRlcnJ1cHQ6ICVkICVkXG4iLAorCQkJICBlbnRy eS0+c3JjX2lkLCBlbnRyeS0+c3JjX2RhdGFbMF0pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfZWFybHlfaW5pdCAtIHNldCBmdW5jdGlvbiBwb2lu dGVycworICoKKyAqIEBoYW5kbGU6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIFNldCBy aW5nIGFuZCBpcnEgZnVuY3Rpb24gcG9pbnRlcnMKKyAqLworaW50IGpwZWdfdjFfMF9lYXJseV9p bml0KHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCWFkZXYtPmpwZWcubnVtX2pwZWdfaW5zdCA9 IDE7CisKKwlqcGVnX3YxXzBfc2V0X2RlY19yaW5nX2Z1bmNzKGFkZXYpOworCWpwZWdfdjFfMF9z ZXRfaXJxX2Z1bmNzKGFkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoganBlZ192MV8w X3N3X2luaXQgLSBzdyBpbml0IGZvciBKUEVHIGJsb2NrCisgKgorICogQGhhbmRsZTogYW1kZ3B1 X2RldmljZSBwb2ludGVyCisgKgorICovCitpbnQganBlZ192MV8wX3N3X2luaXQodm9pZCAqaGFu ZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2 aWNlICopaGFuZGxlOworCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKKwlpbnQgcjsKKworCS8q IEpQRUcgVFJBUCAqLworCXIgPSBhbWRncHVfaXJxX2FkZF9pZChhZGV2LCBTT0MxNV9JSF9DTElF TlRJRF9WQ04sIDEyNiwgJmFkZXYtPmpwZWcuaW5zdC0+aXJxKTsKKwlpZiAocikKKwkJcmV0dXJu IHI7CisKKwlyaW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisJc3ByaW50ZihyaW5n LT5uYW1lLCAianBlZ19kZWMiKTsKKwlyID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCByaW5nLCA1 MTIsICZhZGV2LT5qcGVnLmluc3QtPmlycSwgMCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJ YWRldi0+anBlZy5pbnRlcm5hbC5qcGVnX3BpdGNoID0gYWRldi0+anBlZy5pbnN0LT5leHRlcm5h bC5qcGVnX3BpdGNoID0KKwkJU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBtbVVWRF9KUEVHX1BJ VENIKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGpwZWdfdjFfMF9zd19maW5pIC0gc3cg ZmluaSBmb3IgSlBFRyBibG9jaworICoKKyAqIEBoYW5kbGU6IGFtZGdwdV9kZXZpY2UgcG9pbnRl cgorICoKKyAqIEpQRUcgZnJlZSB1cCBzdyBhbGxvY2F0aW9uCisgKi8KK3ZvaWQganBlZ192MV8w X3N3X2Zpbmkodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g KHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCisJYW1kZ3B1X3JpbmdfZmluaSgmYWRl di0+anBlZy5pbnN0WzBdLnJpbmdfZGVjKTsKK30KKworLyoqCisgKiBqcGVnX3YxXzBfc3RhcnQg LSBzdGFydCBKUEVHIGJsb2NrCisgKgorICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgor ICoKKyAqIFNldHVwIGFuZCBzdGFydCB0aGUgSlBFRyBibG9jaworICovCit2b2lkIGpwZWdfdjFf MF9zdGFydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IG1vZGUpCit7CisJc3RydWN0 IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisKKwlpZiAo bW9kZSA9PSAwKSB7CisJCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9W TUlELCAwKTsKKwkJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfQ05UTCwgVVZE X0pSQkNfUkJfQ05UTF9fUkJfTk9fRkVUQ0hfTUFTSyB8CisJCQkJVVZEX0pSQkNfUkJfQ05UTF9f UkJfUlBUUl9XUl9FTl9NQVNLKTsKKwkJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0xNSV9K UkJDX1JCXzY0QklUX0JBUl9MT1csIGxvd2VyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpKTsKKwkJ V1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJDX1JCXzY0QklUX0JBUl9ISUdILCB1 cHBlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSk7CisJCVdSRUczMl9TT0MxNShKUEVHLCAwLCBt bVVWRF9KUkJDX1JCX1JQVFIsIDApOworCQlXUkVHMzJfU09DMTUoSlBFRywgMCwgbW1VVkRfSlJC Q19SQl9XUFRSLCAwKTsKKwl9CVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX0NO VEwsIFVWRF9KUkJDX1JCX0NOVExfX1JCX1JQVFJfV1JfRU5fTUFTSyk7CisKKwkvKiBpbml0aWFs aXplIHdwdHIgKi8KKwlyaW5nLT53cHRyID0gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pS QkNfUkJfV1BUUik7CisKKwkvKiBjb3B5IHBhdGNoIGNvbW1hbmRzIHRvIHRoZSBqcGVnIHJpbmcg Ki8KKwlqcGVnX3YxXzBfZGVjb2RlX3Jpbmdfc2V0X3BhdGNoX3JpbmcocmluZywKKwkJKHJpbmct PndwdHIgKyByaW5nLT5tYXhfZHcgKiBhbWRncHVfc2NoZWRfaHdfc3VibWlzc2lvbikpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIGpwZWdfdjFfMF9kZWNvZGVf cmluZ192bV9mdW5jcyA9IHsKKwkudHlwZSA9IEFNREdQVV9SSU5HX1RZUEVfVkNOX0pQRUcsCisJ LmFsaWduX21hc2sgPSAweGYsCisJLm5vcCA9IFBBQ0tFVDAoMHg4MWZmLCAwKSwKKwkuc3VwcG9y dF82NGJpdF9wdHJzID0gZmFsc2UsCisJLm5vX3VzZXJfZmVuY2UgPSB0cnVlLAorCS52bWh1YiA9 IEFNREdQVV9NTUhVQl8wLAorCS5leHRyYV9kdyA9IDY0LAorCS5nZXRfcnB0ciA9IGpwZWdfdjFf MF9kZWNvZGVfcmluZ19nZXRfcnB0ciwKKwkuZ2V0X3dwdHIgPSBqcGVnX3YxXzBfZGVjb2RlX3Jp bmdfZ2V0X3dwdHIsCisJLnNldF93cHRyID0ganBlZ192MV8wX2RlY29kZV9yaW5nX3NldF93cHRy LAorCS5lbWl0X2ZyYW1lX3NpemUgPQorCQk2ICsgNiArIC8qIGhkcCBpbnZhbGlkYXRlIC8gZmx1 c2ggKi8KKwkJU09DMTVfRkxVU0hfR1BVX1RMQl9OVU1fV1JFRyAqIDYgKworCQlTT0MxNV9GTFVT SF9HUFVfVExCX05VTV9SRUdfV0FJVCAqIDggKworCQk4ICsgLyoganBlZ192MV8wX2RlY29kZV9y aW5nX2VtaXRfdm1fZmx1c2ggKi8KKwkJMjYgKyAyNiArIC8qIGpwZWdfdjFfMF9kZWNvZGVfcmlu Z19lbWl0X2ZlbmNlIHgyIHZtIGZlbmNlICovCisJCTYsCisJLmVtaXRfaWJfc2l6ZSA9IDIyLCAv KiBqcGVnX3YxXzBfZGVjb2RlX3JpbmdfZW1pdF9pYiAqLworCS5lbWl0X2liID0ganBlZ192MV8w X2RlY29kZV9yaW5nX2VtaXRfaWIsCisJLmVtaXRfZmVuY2UgPSBqcGVnX3YxXzBfZGVjb2RlX3Jp bmdfZW1pdF9mZW5jZSwKKwkuZW1pdF92bV9mbHVzaCA9IGpwZWdfdjFfMF9kZWNvZGVfcmluZ19l bWl0X3ZtX2ZsdXNoLAorCS50ZXN0X3JpbmcgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X3Jp bmcsCisJLnRlc3RfaWIgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X2liLAorCS5pbnNlcnRf bm9wID0ganBlZ192MV8wX2RlY29kZV9yaW5nX25vcCwKKwkuaW5zZXJ0X3N0YXJ0ID0ganBlZ192 MV8wX2RlY29kZV9yaW5nX2luc2VydF9zdGFydCwKKwkuaW5zZXJ0X2VuZCA9IGpwZWdfdjFfMF9k ZWNvZGVfcmluZ19pbnNlcnRfZW5kLAorCS5wYWRfaWIgPSBhbWRncHVfcmluZ19nZW5lcmljX3Bh ZF9pYiwKKwkuYmVnaW5fdXNlID0gYW1kZ3B1X3Zjbl9yaW5nX2JlZ2luX3VzZSwKKwkuZW5kX3Vz ZSA9IGFtZGdwdV92Y25fcmluZ19lbmRfdXNlLAorCS5lbWl0X3dyZWcgPSBqcGVnX3YxXzBfZGVj b2RlX3JpbmdfZW1pdF93cmVnLAorCS5lbWl0X3JlZ193YWl0ID0ganBlZ192MV8wX2RlY29kZV9y aW5nX2VtaXRfcmVnX3dhaXQsCisJLmVtaXRfcmVnX3dyaXRlX3JlZ193YWl0ID0gYW1kZ3B1X3Jp bmdfZW1pdF9yZWdfd3JpdGVfcmVnX3dhaXRfaGVscGVyLAorfTsKKworc3RhdGljIHZvaWQganBl Z192MV8wX3NldF9kZWNfcmluZ19mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sK KwlhZGV2LT5qcGVnLmluc3QtPnJpbmdfZGVjLmZ1bmNzID0gJmpwZWdfdjFfMF9kZWNvZGVfcmlu Z192bV9mdW5jczsKKwlEUk1fSU5GTygiSlBFRyBkZWNvZGUgaXMgZW5hYmxlZCBpbiBWTSBtb2Rl XG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfaXJxX3NyY19mdW5jcyBqcGVn X3YxXzBfaXJxX2Z1bmNzID0geworCS5zZXQgPSBqcGVnX3YxXzBfc2V0X2ludGVycnVwdF9zdGF0 ZSwKKwkucHJvY2VzcyA9IGpwZWdfdjFfMF9wcm9jZXNzX2ludGVycnVwdCwKK307CisKK3N0YXRp YyB2b2lkIGpwZWdfdjFfMF9zZXRfaXJxX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQoreworCWFkZXYtPmpwZWcuaW5zdC0+aXJxLmZ1bmNzID0gJmpwZWdfdjFfMF9pcnFfZnVuY3M7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YxXzAuaCBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjFfMC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmJmMzNhNmEzOTcyCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192MV8wLmgKQEAgLTAsMCArMSwzMiBAQAor LyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVS KFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICog T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0pQRUdfVjFfMF9IX18KKyNkZWZpbmUgX19K UEVHX1YxXzBfSF9fCisKK2ludCBqcGVnX3YxXzBfZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpOwor aW50IGpwZWdfdjFfMF9zd19pbml0KHZvaWQgKmhhbmRsZSk7Cit2b2lkIGpwZWdfdjFfMF9zd19m aW5pKHZvaWQgKmhhbmRsZSk7Cit2b2lkIGpwZWdfdjFfMF9zdGFydChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwgaW50IG1vZGUpOworCisjZW5kaWYgLypfX0pQRUdfVjFfMF9IX18qLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNuX3YxXzAuYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L3Zjbl92MV8wLmMKaW5kZXggYjRmODRhODIwYTQ0Li42NTJjZWNj MDMwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3Zjbl92MV8wLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNuX3YxXzAuYwpAQCAtMzYsNiArMzYs NyBAQAogI2luY2x1ZGUgIm1taHViL21taHViXzlfMV9zaF9tYXNrLmgiCiAKICNpbmNsdWRlICJp dnNyY2lkL3Zjbi9pcnFzcmNzX3Zjbl8xXzAuaCIKKyNpbmNsdWRlICJqcGVnX3YxXzAuaCIKIAog I2RlZmluZSBtbVVWRF9SQkNfWFhfSUJfUkVHX0NIRUNLCQkJCTB4MDVhYgogI2RlZmluZSBtbVVW RF9SQkNfWFhfSUJfUkVHX0NIRUNLX0JBU0VfSURYCTEKQEAgLTQ1LDkgKzQ2LDcgQEAKIHN0YXRp YyBpbnQgdmNuX3YxXzBfc3RvcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiBzdGF0aWMg dm9pZCB2Y25fdjFfMF9zZXRfZGVjX3JpbmdfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpOwogc3RhdGljIHZvaWQgdmNuX3YxXzBfc2V0X2VuY19yaW5nX2Z1bmNzKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KTsKLXN0YXRpYyB2b2lkIHZjbl92MV8wX3NldF9qcGVnX3JpbmdfZnVu Y3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwogc3RhdGljIHZvaWQgdmNuX3YxXzBfc2V0 X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Ci1zdGF0aWMgdm9pZCB2Y25f djFfMF9qcGVnX3Jpbmdfc2V0X3BhdGNoX3Jpbmcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCB1 aW50MzJfdCBwdHIpOwogc3RhdGljIGludCB2Y25fdjFfMF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUo dm9pZCAqaGFuZGxlLCBlbnVtIGFtZF9wb3dlcmdhdGluZ19zdGF0ZSBzdGF0ZSk7CiBzdGF0aWMg aW50IHZjbl92MV8wX3BhdXNlX2RwZ19tb2RlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAog CQkJCXN0cnVjdCBkcGdfcGF1c2Vfc3RhdGUgKm5ld19zdGF0ZSk7CkBAIC02OCw5ICs2NywxMCBA QCBzdGF0aWMgaW50IHZjbl92MV8wX2Vhcmx5X2luaXQodm9pZCAqaGFuZGxlKQogCiAJdmNuX3Yx XzBfc2V0X2RlY19yaW5nX2Z1bmNzKGFkZXYpOwogCXZjbl92MV8wX3NldF9lbmNfcmluZ19mdW5j cyhhZGV2KTsKLQl2Y25fdjFfMF9zZXRfanBlZ19yaW5nX2Z1bmNzKGFkZXYpOwogCXZjbl92MV8w X3NldF9pcnFfZnVuY3MoYWRldik7CiAKKwlqcGVnX3YxXzBfZWFybHlfaW5pdChoYW5kbGUpOwor CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMSwxMSArMTAxLDYgQEAgc3RhdGljIGludCB2Y25fdjFf MF9zd19pbml0KHZvaWQgKmhhbmRsZSkKIAkJCXJldHVybiByOwogCX0KIAotCS8qIFZDTiBKUEVH IFRSQVAgKi8KLQlyID0gYW1kZ3B1X2lycV9hZGRfaWQoYWRldiwgU09DMTVfSUhfQ0xJRU5USURf VkNOLCAxMjYsICZhZGV2LT52Y24uaW5zdC0+aXJxKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0K IAlyID0gYW1kZ3B1X3Zjbl9zd19pbml0KGFkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAg LTE0OSwxNyArMTQ0LDExIEBAIHN0YXRpYyBpbnQgdmNuX3YxXzBfc3dfaW5pdCh2b2lkICpoYW5k bGUpCiAJCQlyZXR1cm4gcjsKIAl9CiAKLQlyaW5nID0gJmFkZXYtPnZjbi5pbnN0LT5yaW5nX2pw ZWc7Ci0Jc3ByaW50ZihyaW5nLT5uYW1lLCAidmNuX2pwZWciKTsKLQlyID0gYW1kZ3B1X3Jpbmdf aW5pdChhZGV2LCByaW5nLCA1MTIsICZhZGV2LT52Y24uaW5zdC0+aXJxLCAwKTsKLQlpZiAocikK LQkJcmV0dXJuIHI7Ci0KIAlhZGV2LT52Y24ucGF1c2VfZHBnX21vZGUgPSB2Y25fdjFfMF9wYXVz ZV9kcGdfbW9kZTsKLQlhZGV2LT52Y24uaW50ZXJuYWwuanBlZ19waXRjaCA9IGFkZXYtPnZjbi5p bnN0LT5leHRlcm5hbC5qcGVnX3BpdGNoID0KLQkJU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1t VVZEX0pQRUdfUElUQ0gpOwogCi0JcmV0dXJuIDA7CisJciA9IGpwZWdfdjFfMF9zd19pbml0KGhh bmRsZSk7CisKKwlyZXR1cm4gcjsKIH0KIAogLyoqCkBAIC0xNzgsNiArMTY3LDggQEAgc3RhdGlj IGludCB2Y25fdjFfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKIAlpZiAocikKIAkJcmV0dXJuIHI7 CiAKKwlqcGVnX3YxXzBfc3dfZmluaShoYW5kbGUpOworCiAJciA9IGFtZGdwdV92Y25fc3dfZmlu aShhZGV2KTsKIAogCXJldHVybiByOwpAQCAtMjA3LDcgKzE5OCw3IEBAIHN0YXRpYyBpbnQgdmNu X3YxXzBfaHdfaW5pdCh2b2lkICpoYW5kbGUpCiAJCQlnb3RvIGRvbmU7CiAJfQogCi0JcmluZyA9 ICZhZGV2LT52Y24uaW5zdC0+cmluZ19qcGVnOworCXJpbmcgPSAmYWRldi0+anBlZy5pbnN0LT5y aW5nX2RlYzsKIAlyID0gYW1kZ3B1X3JpbmdfdGVzdF9oZWxwZXIocmluZyk7CiAJaWYgKHIpCiAJ CWdvdG8gZG9uZTsKQEAgLTk0NywyMiArOTM4LDcgQEAgc3RhdGljIGludCB2Y25fdjFfMF9zdGFy dF9zcGdfbW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAlXUkVHMzJfU09DMTUoVVZE LCAwLCBtbVVWRF9SQl9CQVNFX0hJMiwgdXBwZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikpOwog CVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1JCX1NJWkUyLCByaW5nLT5yaW5nX3NpemUgLyA0 KTsKIAotCXJpbmcgPSAmYWRldi0+dmNuLmluc3QtPnJpbmdfanBlZzsKLQlXUkVHMzJfU09DMTUo VVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9WTUlELCAwKTsKLQlXUkVHMzJfU09DMTUoVVZELCAw LCBtbVVWRF9KUkJDX1JCX0NOVEwsIFVWRF9KUkJDX1JCX0NOVExfX1JCX05PX0ZFVENIX01BU0sg fAotCQkJVVZEX0pSQkNfUkJfQ05UTF9fUkJfUlBUUl9XUl9FTl9NQVNLKTsKLQlXUkVHMzJfU09D MTUoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl82NEJJVF9CQVJfTE9XLCBsb3dlcl8zMl9iaXRz KHJpbmctPmdwdV9hZGRyKSk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfTE1JX0pSQkNf UkJfNjRCSVRfQkFSX0hJR0gsIHVwcGVyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpKTsKLQlXUkVH MzJfU09DMTUoVVZELCAwLCBtbVVWRF9KUkJDX1JCX1JQVFIsIDApOwotCVdSRUczMl9TT0MxNShV VkQsIDAsIG1tVVZEX0pSQkNfUkJfV1BUUiwgMCk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1V VkRfSlJCQ19SQl9DTlRMLCBVVkRfSlJCQ19SQl9DTlRMX19SQl9SUFRSX1dSX0VOX01BU0spOwot Ci0JLyogaW5pdGlhbGl6ZSB3cHRyICovCi0JcmluZy0+d3B0ciA9IFJSRUczMl9TT0MxNShVVkQs IDAsIG1tVVZEX0pSQkNfUkJfV1BUUik7Ci0KLQkvKiBjb3B5IHBhdGNoIGNvbW1hbmRzIHRvIHRo ZSBqcGVnIHJpbmcgKi8KLQl2Y25fdjFfMF9qcGVnX3Jpbmdfc2V0X3BhdGNoX3JpbmcocmluZywK LQkJKHJpbmctPndwdHIgKyByaW5nLT5tYXhfZHcgKiBhbWRncHVfc2NoZWRfaHdfc3VibWlzc2lv bikpOworCWpwZWdfdjFfMF9zdGFydChhZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEw NiwxMyArMTA4Miw3IEBAIHN0YXRpYyBpbnQgdmNuX3YxXzBfc3RhcnRfZHBnX21vZGUoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJV1JFRzMyX1AoU09DMTVfUkVHX09GRlNFVChVVkQsIDAs IG1tVVZEX1JCQ19SQl9DTlRMKSwgMCwKIAkJCX5VVkRfUkJDX1JCX0NOVExfX1JCX05PX0ZFVENI X01BU0spOwogCi0JLyogaW5pdGlhbGl6ZSBKUEVHIHdwdHIgKi8KLQlyaW5nID0gJmFkZXYtPnZj bi5pbnN0LT5yaW5nX2pwZWc7Ci0JcmluZy0+d3B0ciA9IFJSRUczMl9TT0MxNShVVkQsIDAsIG1t VVZEX0pSQkNfUkJfV1BUUik7Ci0KLQkvKiBjb3B5IHBhdGNoIGNvbW1hbmRzIHRvIHRoZSBqcGVn IHJpbmcgKi8KLQl2Y25fdjFfMF9qcGVnX3Jpbmdfc2V0X3BhdGNoX3JpbmcocmluZywKLQkJKHJp bmctPndwdHIgKyByaW5nLT5tYXhfZHcgKiBhbWRncHVfc2NoZWRfaHdfc3VibWlzc2lvbikpOwor CWpwZWdfdjFfMF9zdGFydChhZGV2LCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMxNiw3ICsx Mjg2LDcgQEAgc3RhdGljIGludCB2Y25fdjFfMF9wYXVzZV9kcGdfbW9kZShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKIAkJCQkJCQlVVkRfRFBHX1BBVVNFX19KUEVHX1BBVVNFX0RQR19BQ0tf TUFTSywgcmV0X2NvZGUpOwogCiAJCQkJLyogUmVzdG9yZSAqLwotCQkJCXJpbmcgPSAmYWRldi0+ dmNuLmluc3QtPnJpbmdfanBlZzsKKwkJCQlyaW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19k ZWM7CiAJCQkJV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfTE1JX0pSQkNfUkJfVk1JRCwgMCk7 CiAJCQkJV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9DTlRMLAogCQkJCQkJCVVW RF9KUkJDX1JCX0NOVExfX1JCX05PX0ZFVENIX01BU0sgfApAQCAtMTcxNiwzODkgKzE2ODYsNiBA QCBzdGF0aWMgdm9pZCB2Y25fdjFfMF9lbmNfcmluZ19lbWl0X3dyZWcoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLAogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHZhbCk7CiB9CiAKLQotLyoqCi0g KiB2Y25fdjFfMF9qcGVnX3JpbmdfZ2V0X3JwdHIgLSBnZXQgcmVhZCBwb2ludGVyCi0gKgotICog QHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKLSAqCi0gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGhh cmR3YXJlIHJlYWQgcG9pbnRlcgotICovCi1zdGF0aWMgdWludDY0X3QgdmNuX3YxXzBfanBlZ19y aW5nX2dldF9ycHRyKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKLXsKLQlzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7Ci0KLQlyZXR1cm4gUlJFRzMyX1NPQzE1KFVWRCwg MCwgbW1VVkRfSlJCQ19SQl9SUFRSKTsKLX0KLQotLyoqCi0gKiB2Y25fdjFfMF9qcGVnX3Jpbmdf Z2V0X3dwdHIgLSBnZXQgd3JpdGUgcG9pbnRlcgotICoKLSAqIEByaW5nOiBhbWRncHVfcmluZyBw b2ludGVyCi0gKgotICogUmV0dXJucyB0aGUgY3VycmVudCBoYXJkd2FyZSB3cml0ZSBwb2ludGVy Ci0gKi8KLXN0YXRpYyB1aW50NjRfdCB2Y25fdjFfMF9qcGVnX3JpbmdfZ2V0X3dwdHIoc3RydWN0 IGFtZGdwdV9yaW5nICpyaW5nKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmlu Zy0+YWRldjsKLQotCXJldHVybiBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9KUkJDX1JCX1dQ VFIpOwotfQotCi0vKioKLSAqIHZjbl92MV8wX2pwZWdfcmluZ19zZXRfd3B0ciAtIHNldCB3cml0 ZSBwb2ludGVyCi0gKgotICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKLSAqCi0gKiBDb21t aXRzIHRoZSB3cml0ZSBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZQotICovCi1zdGF0aWMgdm9pZCB2 Y25fdjFfMF9qcGVnX3Jpbmdfc2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQotewot CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKLQotCVdSRUczMl9TT0Mx NShVVkQsIDAsIG1tVVZEX0pSQkNfUkJfV1BUUiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7 Ci19Ci0KLS8qKgotICogdmNuX3YxXzBfanBlZ19yaW5nX2luc2VydF9zdGFydCAtIGluc2VydCBh IHN0YXJ0IGNvbW1hbmQKLSAqCi0gKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgotICoKLSAq IFdyaXRlIGEgc3RhcnQgY29tbWFuZCB0byB0aGUgcmluZy4KLSAqLwotc3RhdGljIHZvaWQgdmNu X3YxXzBfanBlZ19yaW5nX2luc2VydF9zdGFydChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCi17 Ci0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwotCi0JYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRf SlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVf cmluZ193cml0ZShyaW5nLCAweDY4ZTA0KTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBB Q0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcs IDB4ODAwMTAwMDApOwotfQotCi0vKioKLSAqIHZjbl92MV8wX2pwZWdfcmluZ19pbnNlcnRfZW5k IC0gaW5zZXJ0IGEgZW5kIGNvbW1hbmQKLSAqCi0gKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRl cgotICoKLSAqIFdyaXRlIGEgZW5kIGNvbW1hbmQgdG8gdGhlIHJpbmcuCi0gKi8KLXN0YXRpYyB2 b2lkIHZjbl92MV8wX2pwZWdfcmluZ19pbnNlcnRfZW5kKHN0cnVjdCBhbWRncHVfcmluZyAqcmlu ZykKLXsKLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7Ci0KLQlhbWRn cHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBt bVVWRF9KUkJDX0VYVEVSTkFMX1JFR19CQVNFKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4NjhlMDQpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmlu ZywgUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMHgwMDAxMDAwMCk7Ci19Ci0KLS8qKgotICogdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRf ZmVuY2UgLSBlbWl0IGFuIGZlbmNlICYgdHJhcCBjb21tYW5kCi0gKgotICogQHJpbmc6IGFtZGdw dV9yaW5nIHBvaW50ZXIKLSAqIEBmZW5jZTogZmVuY2UgdG8gZW1pdAotICoKLSAqIFdyaXRlIGEg ZmVuY2UgYW5kIGEgdHJhcCBjb21tYW5kIHRvIHRoZSByaW5nLgotICovCi1zdGF0aWMgdm9pZCB2 Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF9mZW5jZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHU2 NCBhZGRyLCB1NjQgc2VxLAotCQkJCSAgICAgdW5zaWduZWQgZmxhZ3MpCi17Ci0Jc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwotCi0JV0FSTl9PTihmbGFncyAmIEFNREdQ VV9GRU5DRV9GTEFHXzY0QklUKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tF VEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pQRUdfR1BDT01fREFUQTApLCAwLCAw LCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgc2VxKTsKLQotCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAs IG1tVVZEX0pQRUdfR1BDT01fREFUQTEpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywgc2VxKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBB Q0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9XUl82 NEJJVF9CQVJfTE9XKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRl KHJpbmcsIGxvd2VyXzMyX2JpdHMoYWRkcikpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywK LQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfTE1JX0pSQkNfUkJfTUVN X1dSXzY0QklUX0JBUl9ISUdIKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoYWRkcikpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlBFR19HUENP TV9DTUQpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywg MHg4KTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09G RlNFVChVVkQsIDAsIG1tVVZEX0pQRUdfR1BDT01fQ01EKSwgMCwgUEFDS0VUSl9DT05ESVRJT05f Q0hFQ0swLCBQQUNLRVRKX1RZUEU0KSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7Ci0K LQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZE LCAwLCBtbVVWRF9KUkJDX1JCX0NPTkRfUkRfVElNRVIpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgwMTQwMDIwMCk7Ci0KLQlhbWRncHVfcmluZ193 cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJD X1JCX1JFRl9EQVRBKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRl KHJpbmcsIHNlcSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1 X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRCSVRfQkFSX0xP VyksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBsb3dl cl8zMl9iaXRzKGFkZHIpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEoo U09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9C QVJfSElHSCksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5n LCB1cHBlcl8zMl9iaXRzKGFkZHIpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBB Q0tFVEooMCwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0szLCBQQUNLRVRKX1RZUEUyKSk7Ci0J YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhmZmZmZmZmZik7Ci0KLQlhbWRncHVfcmluZ193cml0 ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJDX0VY VEVSTkFMX1JFR19CQVNFKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIDB4M2ZiYyk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRK KDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDEp OwotCi0JLyogZW1pdCB0cmFwICovCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUSigw LCAwLCAwLCBQQUNLRVRKX1RZUEU3KSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7Ci19 Ci0KLS8qKgotICogdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfaWIgLSBleGVjdXRlIGluZGlyZWN0 IGJ1ZmZlcgotICoKLSAqIEByaW5nOiBhbWRncHVfcmluZyBwb2ludGVyCi0gKiBAaWI6IGluZGly ZWN0IGJ1ZmZlciB0byBleGVjdXRlCi0gKgotICogV3JpdGUgcmluZyBjb21tYW5kcyB0byBleGVj dXRlIHRoZSBpbmRpcmVjdCBidWZmZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHZjbl92MV8wX2pwZWdf cmluZ19lbWl0X2liKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKLQkJCQkJc3RydWN0IGFtZGdw dV9qb2IgKmpvYiwKLQkJCQkJc3RydWN0IGFtZGdwdV9pYiAqaWIsCi0JCQkJCXVpbnQzMl90IGZs YWdzKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKLQl1bnNp Z25lZCB2bWlkID0gQU1ER1BVX0pPQl9HRVRfVk1JRChqb2IpOwotCi0JYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfTE1JX0pS QkNfSUJfVk1JRCksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShy aW5nLCAodm1pZCB8ICh2bWlkIDw8IDQpKSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAot CQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlBFR19WTUlEKSwg MCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwg KHZtaWQgPDwgNCkpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09D MTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX0lCXzY0QklUX0JBUl9MT1cpLCAw LCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgbG93ZXJfMzJf Yml0cyhpYi0+Z3B1X2FkZHIpKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tF VEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX0lCXzY0QklUX0JBUl9I SUdIKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVw cGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAot CQlQQUNLRVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJDX0lCX1NJWkUpLCAw LCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgaWItPmxlbmd0 aF9kdyk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVRKKFNPQzE1X1JFR19P RkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRCSVRfQkFSX0xPVyksIDAs IDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBsb3dlcl8zMl9i aXRzKHJpbmctPmdwdV9hZGRyKSk7Ci0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNL RVRKKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRC SVRfQkFSX0hJR0gpLCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgdXBwZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikpOwotCi0JYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywKLQkJUEFDS0VUSigwLCAwLCBQQUNLRVRKX0NPTkRJVElPTl9DSEVDSzAsIFBBQ0tF VEpfVFlQRTIpKTsKLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKLQotCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pS QkNfUkJfQ09ORF9SRF9USU1FUiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDAxNDAwMjAwKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0J CVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEp LCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgyKTsK LQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChV VkQsIDAsIG1tVVZEX0pSQkNfU1RBVFVTKSwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0szLCBQ QUNLRVRKX1RZUEUzKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgyKTsKLX0KLQotc3Rh dGljIHZvaWQgdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfcmVnX3dhaXQoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLAotCQkJCQkgICAgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwsCi0JCQkJCSAg ICB1aW50MzJfdCBtYXNrKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+ YWRldjsKLQl1aW50MzJfdCByZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQotCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pS QkNfUkJfQ09ORF9SRF9USU1FUiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDAxNDAwMjAwKTsKLQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0J CVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0pSQkNfUkJfUkVGX0RBVEEp LCAwLCAwLCBQQUNLRVRKX1RZUEUwKSk7Ci0JYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdmFsKTsK LQotCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVEooU09DMTVfUkVHX09GRlNFVChV VkQsIDAsIG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0JBU0UpLCAwLCAwLCBQQUNLRVRKX1RZUEUw KSk7Ci0JaWYgKCgocmVnX29mZnNldCA+PSAweDFmODAwKSAmJiAocmVnX29mZnNldCA8PSAweDIx ZmZmKSkgfHwKLQkJKChyZWdfb2Zmc2V0ID49IDB4MWUwMDApICYmIChyZWdfb2Zmc2V0IDw9IDB4 MWUxZmYpKSkgewotCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKLQkJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywKLQkJCVBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpf VFlQRTMpKTsKLQl9IGVsc2UgewotCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCByZWdfb2Zmc2V0 KTsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJCVBBQ0tFVEooMCwgMCwgMCwgUEFDS0VU Sl9UWVBFMykpOwotCX0KLQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBtYXNrKTsKLX0KLQotc3Rh dGljIHZvaWQgdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfdm1fZmx1c2goc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLAotCQl1bnNpZ25lZCB2bWlkLCB1aW50NjRfdCBwZF9hZGRyKQotewotCXN0cnVj dCBhbWRncHVfdm1odWIgKmh1YiA9ICZyaW5nLT5hZGV2LT52bWh1YltyaW5nLT5mdW5jcy0+dm1o dWJdOwotCXVpbnQzMl90IGRhdGEwLCBkYXRhMSwgbWFzazsKLQotCXBkX2FkZHIgPSBhbWRncHVf Z21jX2VtaXRfZmx1c2hfZ3B1X3RsYihyaW5nLCB2bWlkLCBwZF9hZGRyKTsKLQotCS8qIHdhaXQg Zm9yIHJlZ2lzdGVyIHdyaXRlICovCi0JZGF0YTAgPSBodWItPmN0eDBfcHRiX2FkZHJfbG8zMiAr IHZtaWQgKiAyOwotCWRhdGExID0gbG93ZXJfMzJfYml0cyhwZF9hZGRyKTsKLQltYXNrID0gMHhm ZmZmZmZmZjsKLQl2Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF9yZWdfd2FpdChyaW5nLCBkYXRhMCwg ZGF0YTEsIG1hc2spOwotfQotCi1zdGF0aWMgdm9pZCB2Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF93 cmVnKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKLQkJCQkJdWludDMyX3QgcmVnLCB1aW50MzJf dCB2YWwpCi17Ci0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwotCXVp bnQzMl90IHJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOwotCi0JYW1kZ3B1X3Jpbmdfd3JpdGUocmlu ZywKLQkJUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19FWFRFUk5B TF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQlpZiAoKChyZWdfb2Zmc2V0ID49 IDB4MWY4MDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MjFmZmYpKSB8fAotCQkJKChyZWdfb2Zmc2V0 ID49IDB4MWUwMDApICYmIChyZWdfb2Zmc2V0IDw9IDB4MWUxZmYpKSkgewotCQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAwKTsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJCVBBQ0tFVEoo KHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKLQl9IGVsc2UgewotCQlh bWRncHVfcmluZ193cml0ZShyaW5nLCByZWdfb2Zmc2V0KTsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywKLQkJCVBBQ0tFVEooMCwgMCwgMCwgUEFDS0VUSl9UWVBFMCkpOwotCX0KLQlhbWRncHVf cmluZ193cml0ZShyaW5nLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCB2Y25fdjFfMF9qcGVnX3Jp bmdfbm9wKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdWludDMyX3QgY291bnQpCi17Ci0JaW50 IGk7Ci0KLQlXQVJOX09OKHJpbmctPndwdHIgJSAyIHx8IGNvdW50ICUgMik7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgY291bnQgLyAyOyBpKyspIHsKLQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFD S0VUSigwLCAwLCAwLCBQQUNLRVRKX1RZUEU2KSk7Ci0JCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcs IDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgdmNuX3YxXzBfanBlZ19yaW5nX3BhdGNoX3dyZWco c3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCB1aW50MzJfdCAqcHRyLCB1aW50MzJfdCByZWdfb2Zm c2V0LCB1aW50MzJfdCB2YWwpCi17Ci0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5n LT5hZGV2OwotCXJpbmctPnJpbmdbKCpwdHIpKytdID0gUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VU KFVWRCwgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBBQ0tFVEpfVFlQ RTApOwotCWlmICgoKHJlZ19vZmZzZXQgPj0gMHgxZjgwMCkgJiYgKHJlZ19vZmZzZXQgPD0gMHgy MWZmZikpIHx8Ci0JCSgocmVnX29mZnNldCA+PSAweDFlMDAwKSAmJiAocmVnX29mZnNldCA8PSAw eDFlMWZmKSkpIHsKLQkJcmluZy0+cmluZ1soKnB0cikrK10gPSAwOwotCQlyaW5nLT5yaW5nWygq cHRyKSsrXSA9IFBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQRTAp OwotCX0gZWxzZSB7Ci0JCXJpbmctPnJpbmdbKCpwdHIpKytdID0gcmVnX29mZnNldDsKLQkJcmlu Zy0+cmluZ1soKnB0cikrK10gPSBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTApOwotCX0K LQlyaW5nLT5yaW5nWygqcHRyKSsrXSA9IHZhbDsKLX0KLQotc3RhdGljIHZvaWQgdmNuX3YxXzBf anBlZ19yaW5nX3NldF9wYXRjaF9yaW5nKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdWludDMy X3QgcHRyKQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKLQot CXVpbnQzMl90IHJlZywgcmVnX29mZnNldCwgdmFsLCBtYXNrLCBpOwotCi0JLy8gMXN0OiBwcm9n cmFtIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfTE9XCi0JcmVnID0gU09DMTVf UkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfTE9X KTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSBsb3dlcl8zMl9iaXRzKHJpbmct PmdwdV9hZGRyKTsKLQl2Y25fdjFfMF9qcGVnX3JpbmdfcGF0Y2hfd3JlZyhyaW5nLCAmcHRyLCBy ZWdfb2Zmc2V0LCB2YWwpOwotCi0JLy8gMm5kOiBwcm9ncmFtIG1tVVZEX0xNSV9KUkJDX1JCX01F TV9SRF82NEJJVF9CQVJfSElHSAotCXJlZyA9IFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVW RF9MTUlfSlJCQ19SQl9NRU1fUkRfNjRCSVRfQkFSX0hJR0gpOwotCXJlZ19vZmZzZXQgPSAocmVn IDw8IDIpOwotCXZhbCA9IHVwcGVyXzMyX2JpdHMocmluZy0+Z3B1X2FkZHIpOwotCXZjbl92MV8w X2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkv LyAzcmQgdG8gNXRoOiBpc3N1ZSBNRU1fUkVBRCBjb21tYW5kcwotCWZvciAoaSA9IDA7IGkgPD0g MjsgaSsrKSB7Ci0JCXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSigwLCAwLCAwLCBQQUNLRVRK X1RZUEUyKTsKLQkJcmluZy0+cmluZ1twdHIrK10gPSAwOwotCX0KLQotCS8vIDZ0aDogcHJvZ3Jh bSBtbVVWRF9KUkJDX1JCX0NOVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIE5PX0ZFVENIIGFuZCBSUFRS IHdyaXRlIGFiaWxpdHkKLQlyZWcgPSBTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJC Q19SQl9DTlRMKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSAweDEzOwotCXZj bl92MV8wX2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZzZXQsIHZhbCk7 Ci0KLQkvLyA3dGg6IHByb2dyYW0gbW1VVkRfSlJCQ19SQl9SRUZfREFUQQotCXJlZyA9IFNPQzE1 X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9KUkJDX1JCX1JFRl9EQVRBKTsKLQlyZWdfb2Zmc2V0 ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSAweDE7Ci0JdmNuX3YxXzBfanBlZ19yaW5nX3BhdGNoX3dy ZWcocmluZywgJnB0ciwgcmVnX29mZnNldCwgdmFsKTsKLQotCS8vIDh0aDogaXNzdWUgY29uZGl0 aW9uYWwgcmVnaXN0ZXIgcmVhZCBtbVVWRF9KUkJDX1JCX0NOVEwKLQlyZWcgPSBTT0MxNV9SRUdf T0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9DTlRMKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8 PCAyKTsKLQl2YWwgPSAweDE7Ci0JbWFzayA9IDB4MTsKLQotCXJpbmctPnJpbmdbcHRyKytdID0g UEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9DT05EX1JEX1RJ TUVSKSwgMCwgMCwgUEFDS0VUSl9UWVBFMCk7Ci0JcmluZy0+cmluZ1twdHIrK10gPSAweDAxNDAw MjAwOwotCXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSihTT0MxNV9SRUdfT0ZGU0VUKFVWRCwg MCwgbW1VVkRfSlJCQ19SQl9SRUZfREFUQSksIDAsIDAsIFBBQ0tFVEpfVFlQRTApOwotCXJpbmct PnJpbmdbcHRyKytdID0gdmFsOwotCXJpbmctPnJpbmdbcHRyKytdID0gUEFDS0VUSihTT0MxNV9S RUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfQkFTRSksIDAsIDAsIFBB Q0tFVEpfVFlQRTApOwotCWlmICgoKHJlZ19vZmZzZXQgPj0gMHgxZjgwMCkgJiYgKHJlZ19vZmZz ZXQgPD0gMHgyMWZmZikpIHx8Ci0JCSgocmVnX29mZnNldCA+PSAweDFlMDAwKSAmJiAocmVnX29m ZnNldCA8PSAweDFlMWZmKSkpIHsKLQkJcmluZy0+cmluZ1twdHIrK10gPSAwOwotCQlyaW5nLT5y aW5nW3B0cisrXSA9IFBBQ0tFVEooKHJlZ19vZmZzZXQgPj4gMiksIDAsIDAsIFBBQ0tFVEpfVFlQ RTMpOwotCX0gZWxzZSB7Ci0JCXJpbmctPnJpbmdbcHRyKytdID0gcmVnX29mZnNldDsKLQkJcmlu Zy0+cmluZ1twdHIrK10gPSBQQUNLRVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTMpOwotCX0KLQly aW5nLT5yaW5nW3B0cisrXSA9IG1hc2s7Ci0KLQkvLzl0aCB0byAyMXN0OiBpbnNlcnQgbm8tb3AK LQlmb3IgKGkgPSAwOyBpIDw9IDEyOyBpKyspIHsKLQkJcmluZy0+cmluZ1twdHIrK10gPSBQQUNL RVRKKDAsIDAsIDAsIFBBQ0tFVEpfVFlQRTYpOwotCQlyaW5nLT5yaW5nW3B0cisrXSA9IDA7Ci0J fQotCi0JLy8yMm5kOiByZXNldCBtbVVWRF9KUkJDX1JCX1JQVFIKLQlyZWcgPSBTT0MxNV9SRUdf T0ZGU0VUKFVWRCwgMCwgbW1VVkRfSlJCQ19SQl9SUFRSKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8 PCAyKTsKLQl2YWwgPSAwOwotCXZjbl92MV8wX2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZw dHIsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkvLzIzcmQ6IHByb2dyYW0gbW1VVkRfSlJCQ19SQl9D TlRMIHRvIGRpc2FibGUgbm9fZmV0Y2gKLQlyZWcgPSBTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwg bW1VVkRfSlJCQ19SQl9DTlRMKTsKLQlyZWdfb2Zmc2V0ID0gKHJlZyA8PCAyKTsKLQl2YWwgPSAw eDEyOwotCXZjbl92MV8wX2pwZWdfcmluZ19wYXRjaF93cmVnKHJpbmcsICZwdHIsIHJlZ19vZmZz ZXQsIHZhbCk7Ci19Ci0KIHN0YXRpYyBpbnQgdmNuX3YxXzBfc2V0X2ludGVycnVwdF9zdGF0ZShz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJCQkJc3RydWN0IGFtZGdwdV9pcnFfc3JjICpz b3VyY2UsCiAJCQkJCXVuc2lnbmVkIHR5cGUsCkBAIC0yMTIzLDkgKzE3MTAsNiBAQCBzdGF0aWMg aW50IHZjbl92MV8wX3Byb2Nlc3NfaW50ZXJydXB0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAogCWNhc2UgMTIwOgogCQlhbWRncHVfZmVuY2VfcHJvY2VzcygmYWRldi0+dmNuLmluc3QtPnJp bmdfZW5jWzFdKTsKIAkJYnJlYWs7Ci0JY2FzZSAxMjY6Ci0JCWFtZGdwdV9mZW5jZV9wcm9jZXNz KCZhZGV2LT52Y24uaW5zdC0+cmluZ19qcGVnKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJN X0VSUk9SKCJVbmhhbmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwKIAkJCSAgZW50cnktPnNyY19p ZCwgZW50cnktPnNyY19kYXRhWzBdKTsKQEAgLTIyNTksNDEgKzE4NDMsNiBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIHZjbl92MV8wX2VuY19yaW5nX3ZtX2Z1bmNzID0g ewogCS5lbWl0X3JlZ193cml0ZV9yZWdfd2FpdCA9IGFtZGdwdV9yaW5nX2VtaXRfcmVnX3dyaXRl X3JlZ193YWl0X2hlbHBlciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X3Jpbmdf ZnVuY3MgdmNuX3YxXzBfanBlZ19yaW5nX3ZtX2Z1bmNzID0gewotCS50eXBlID0gQU1ER1BVX1JJ TkdfVFlQRV9WQ05fSlBFRywKLQkuYWxpZ25fbWFzayA9IDB4ZiwKLQkubm9wID0gUEFDS0VUMCgw eDgxZmYsIDApLAotCS5zdXBwb3J0XzY0Yml0X3B0cnMgPSBmYWxzZSwKLQkubm9fdXNlcl9mZW5j ZSA9IHRydWUsCi0JLnZtaHViID0gQU1ER1BVX01NSFVCXzAsCi0JLmV4dHJhX2R3ID0gNjQsCi0J LmdldF9ycHRyID0gdmNuX3YxXzBfanBlZ19yaW5nX2dldF9ycHRyLAotCS5nZXRfd3B0ciA9IHZj bl92MV8wX2pwZWdfcmluZ19nZXRfd3B0ciwKLQkuc2V0X3dwdHIgPSB2Y25fdjFfMF9qcGVnX3Jp bmdfc2V0X3dwdHIsCi0JLmVtaXRfZnJhbWVfc2l6ZSA9Ci0JCTYgKyA2ICsgLyogaGRwIGludmFs aWRhdGUgLyBmbHVzaCAqLwotCQlTT0MxNV9GTFVTSF9HUFVfVExCX05VTV9XUkVHICogNiArCi0J CVNPQzE1X0ZMVVNIX0dQVV9UTEJfTlVNX1JFR19XQUlUICogOCArCi0JCTggKyAvKiB2Y25fdjFf MF9qcGVnX3JpbmdfZW1pdF92bV9mbHVzaCAqLwotCQkyNiArIDI2ICsgLyogdmNuX3YxXzBfanBl Z19yaW5nX2VtaXRfZmVuY2UgeDIgdm0gZmVuY2UgKi8KLQkJNiwKLQkuZW1pdF9pYl9zaXplID0g MjIsIC8qIHZjbl92MV8wX2pwZWdfcmluZ19lbWl0X2liICovCi0JLmVtaXRfaWIgPSB2Y25fdjFf MF9qcGVnX3JpbmdfZW1pdF9pYiwKLQkuZW1pdF9mZW5jZSA9IHZjbl92MV8wX2pwZWdfcmluZ19l bWl0X2ZlbmNlLAotCS5lbWl0X3ZtX2ZsdXNoID0gdmNuX3YxXzBfanBlZ19yaW5nX2VtaXRfdm1f Zmx1c2gsCi0JLnRlc3RfcmluZyA9IGFtZGdwdV92Y25fanBlZ19yaW5nX3Rlc3RfcmluZywKLQku dGVzdF9pYiA9IGFtZGdwdV92Y25fanBlZ19yaW5nX3Rlc3RfaWIsCi0JLmluc2VydF9ub3AgPSB2 Y25fdjFfMF9qcGVnX3Jpbmdfbm9wLAotCS5pbnNlcnRfc3RhcnQgPSB2Y25fdjFfMF9qcGVnX3Jp bmdfaW5zZXJ0X3N0YXJ0LAotCS5pbnNlcnRfZW5kID0gdmNuX3YxXzBfanBlZ19yaW5nX2luc2Vy dF9lbmQsCi0JLnBhZF9pYiA9IGFtZGdwdV9yaW5nX2dlbmVyaWNfcGFkX2liLAotCS5iZWdpbl91 c2UgPSBhbWRncHVfdmNuX3JpbmdfYmVnaW5fdXNlLAotCS5lbmRfdXNlID0gYW1kZ3B1X3Zjbl9y aW5nX2VuZF91c2UsCi0JLmVtaXRfd3JlZyA9IHZjbl92MV8wX2pwZWdfcmluZ19lbWl0X3dyZWcs Ci0JLmVtaXRfcmVnX3dhaXQgPSB2Y25fdjFfMF9qcGVnX3JpbmdfZW1pdF9yZWdfd2FpdCwKLQku ZW1pdF9yZWdfd3JpdGVfcmVnX3dhaXQgPSBhbWRncHVfcmluZ19lbWl0X3JlZ193cml0ZV9yZWdf d2FpdF9oZWxwZXIsCi19OwotCiBzdGF0aWMgdm9pZCB2Y25fdjFfMF9zZXRfZGVjX3JpbmdfZnVu Y3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJYWRldi0+dmNuLmluc3QtPnJpbmdf ZGVjLmZ1bmNzID0gJnZjbl92MV8wX2RlY19yaW5nX3ZtX2Z1bmNzOwpAQCAtMjMxMCwxMiArMTg1 OSw2IEBAIHN0YXRpYyB2b2lkIHZjbl92MV8wX3NldF9lbmNfcmluZ19mdW5jcyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKIAlEUk1fSU5GTygiVkNOIGVuY29kZSBpcyBlbmFibGVkIGluIFZN IG1vZGVcbiIpOwogfQogCi1zdGF0aWMgdm9pZCB2Y25fdjFfMF9zZXRfanBlZ19yaW5nX2Z1bmNz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQotewotCWFkZXYtPnZjbi5pbnN0LT5yaW5nX2pw ZWcuZnVuY3MgPSAmdmNuX3YxXzBfanBlZ19yaW5nX3ZtX2Z1bmNzOwotCURSTV9JTkZPKCJWQ04g anBlZyBkZWNvZGUgaXMgZW5hYmxlZCBpbiBWTSBtb2RlXG4iKTsKLX0KLQogc3RhdGljIGNvbnN0 IHN0cnVjdCBhbWRncHVfaXJxX3NyY19mdW5jcyB2Y25fdjFfMF9pcnFfZnVuY3MgPSB7CiAJLnNl dCA9IHZjbl92MV8wX3NldF9pbnRlcnJ1cHRfc3RhdGUsCiAJLnByb2Nlc3MgPSB2Y25fdjFfMF9w cm9jZXNzX2ludGVycnVwdCwKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hbWQtZ2Z4