From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 11/13] ASoC: AMD: add AMD ASoC ACP 2.x DMA driver Date: Fri, 4 Dec 2015 18:40:38 -0500 Message-ID: <1449272440-8735-11-git-send-email-alexander.deucher@amd.com> References: <1449272440-8735-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449272440-8735-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: broonie@kernel.org, airlied@gmail.com, dri-devel@lists.freedesktop.org, alsa-devel@alsa-project.org, maruthi.bayyavarapu@amd.com, rajeevkumar.linux@gmail.com Cc: Alex Deucher , Maruthi Srinivas Bayyavarapu , lgirdwood@gmail.com, perex@perex.cz List-Id: alsa-devel@alsa-project.org RnJvbTogTWFydXRoaSBTcmluaXZhcyBCYXl5YXZhcmFwdSA8TWFydXRoaS5CYXl5YXZhcmFwdUBh bWQuY29tPgoKQUNQIElQIGJsb2NrIGNvbnNpc3RzIG9mIGRlZGljYXRlZCBETUEgYW5kIEkyUyBi bG9ja3MuIFRoZSBQQ00KZHJpdmVyIHByb3ZpZGVzIHRoZSBwbGF0Zm9ybSBETUEgY29tcG9uZW50 IHRvIEFMU0EgY29yZS4KClNpZ25lZC1vZmYtYnk6IE1hcnV0aGkgQmF5eWF2YXJhcHUgPG1hcnV0 aGkuYmF5eWF2YXJhcHVAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXggRGV1Y2hlciA8YWxleGFu ZGVyLmRldWNoZXJAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IE11cmFsaSBLcmlzaG5hIFZlbXVyaSA8 bXVyYWxpLWtyaXNobmEudmVtdXJpQGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IEFsZXggRGV1Y2hl ciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLS0tCiBzb3VuZC9zb2MvS2NvbmZpZyAgICAg ICAgICAgfCAgIDEgKwogc291bmQvc29jL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIHNvdW5k L3NvYy9hbWQvS2NvbmZpZyAgICAgICB8ICAgNCArCiBzb3VuZC9zb2MvYW1kL01ha2VmaWxlICAg ICAgfCAgIDMgKwogc291bmQvc29jL2FtZC9hY3AtcGNtLWRtYS5jIHwgNDc2ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDQ4NSBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL2FtZC9LY29uZmlnCiBj cmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL2FtZC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEuYwoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9L Y29uZmlnIGIvc291bmQvc29jL0tjb25maWcKaW5kZXggN2ZmN2Q4OC4uYTM0ZTllOSAxMDA2NDQK LS0tIGEvc291bmQvc29jL0tjb25maWcKKysrIGIvc291bmQvc29jL0tjb25maWcKQEAgLTM4LDYg KzM4LDcgQEAgY29uZmlnIFNORF9TT0NfVE9QT0xPR1kKIAogIyBBbGwgdGhlIHN1cHBvcnRlZCBT b0NzCiBzb3VyY2UgInNvdW5kL3NvYy9hZGkvS2NvbmZpZyIKK3NvdXJjZSAic291bmQvc29jL2Ft ZC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvYXRtZWwvS2NvbmZpZyIKIHNvdXJjZSAic291 bmQvc29jL2F1MXgvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL2JjbS9LY29uZmlnIgpkaWZm IC0tZ2l0IGEvc291bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IDhl YjA2ZGIuLmE3OWE0YzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3Vu ZC9zb2MvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9 IHNuZC1zb2MtY29yZS5vCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gY29kZWNzLwogb2JqLSQo Q09ORklHX1NORF9TT0MpCSs9IGdlbmVyaWMvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gYWRp Lworb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGFtZC8KIG9iai0kKENPTkZJR19TTkRfU09DKQkr PSBhdG1lbC8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBhdTF4Lwogb2JqLSQoQ09ORklHX1NO RF9TT0MpCSs9IGJjbS8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hbWQvS2NvbmZpZyBiL3NvdW5k L3NvYy9hbWQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODE4 N2ViCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9LY29uZmlnCkBAIC0wLDAgKzEs NCBAQAorY29uZmlnIFNORF9TT0NfQU1EX0FDUAorCXRyaXN0YXRlICJBTUQgQXVkaW8gQ29wcm9j ZXNzb3Igc3VwcG9ydCIKKwloZWxwCisJIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNQIERNQSBzdXBw b3J0IG9uIEFNRCBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hbWQvTWFrZWZpbGUg Yi9zb3VuZC9zb2MvYW1kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjYyNjQ4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvYW1kL01ha2VmaWxlCkBA IC0wLDAgKzEsMyBAQAorc25kLXNvYy1hY3AtcGNtLW9ianMJOj0gYWNwLXBjbS1kbWEubyBhY3Au bworCitvYmotJChDT05GSUdfU05EX1NPQ19BTURfQUNQKSArPSBzbmQtc29jLWFjcC1wY20ubwpk aWZmIC0tZ2l0IGEvc291bmQvc29jL2FtZC9hY3AtcGNtLWRtYS5jIGIvc291bmQvc29jL2FtZC9h Y3AtcGNtLWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MzRmMmUK LS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvYW1kL2FjcC1wY20tZG1hLmMKQEAgLTAsMCAr MSw0NzYgQEAKKy8qCisgKiBBTUQgQUxTQSBTb0MgUENNIERyaXZlcgorICoKKyAqIENvcHlyaWdo dCAyMDE0LTIwMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ VFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5j bHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBp bmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRl IDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5k L3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgImFjcC5o IgorCisjZGVmaW5lIFBMQVlCQUNLX01JTl9OVU1fUEVSSU9EUyAgICAyCisjZGVmaW5lIFBMQVlC QUNLX01BWF9OVU1fUEVSSU9EUyAgICAyCisjZGVmaW5lIFBMQVlCQUNLX01BWF9QRVJJT0RfU0la RSAgICAxNjM4NAorI2RlZmluZSBQTEFZQkFDS19NSU5fUEVSSU9EX1NJWkUgICAgMTAyNAorI2Rl ZmluZSBDQVBUVVJFX01JTl9OVU1fUEVSSU9EUyAgICAgMgorI2RlZmluZSBDQVBUVVJFX01BWF9O VU1fUEVSSU9EUyAgICAgMgorI2RlZmluZSBDQVBUVVJFX01BWF9QRVJJT0RfU0laRSAgICAgMTYz ODQKKyNkZWZpbmUgQ0FQVFVSRV9NSU5fUEVSSU9EX1NJWkUgICAgIDEwMjQKKworI2RlZmluZSBO VU1fRFNDUlNfUEVSX0NIQU5ORUwgMgorCisjZGVmaW5lIE1BWF9CVUZGRVIgKFBMQVlCQUNLX01B WF9QRVJJT0RfU0laRSAqIFBMQVlCQUNLX01BWF9OVU1fUEVSSU9EUykKKyNkZWZpbmUgTUlOX0JV RkZFUiBNQVhfQlVGRkVSCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBh Y3BfcGNtX2hhcmR3YXJlX3BsYXliYWNrID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fSU5U RVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8IFNORFJWX1BDTV9J TkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwgU05EUlZfUENNX0lORk9f QkFUQ0ggfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSwK KwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJU05EUlZfUENNX0ZNVEJJ VF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkuY2hhbm5lbHNfbWluID0gMSwK KwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAw LAorCS5yYXRlX21pbiA9IDgwMDAsCisJLnJhdGVfbWF4ID0gOTYwMDAsCisJLmJ1ZmZlcl9ieXRl c19tYXggPSBQTEFZQkFDS19NQVhfTlVNX1BFUklPRFMgKiBQTEFZQkFDS19NQVhfUEVSSU9EX1NJ WkUsCisJLnBlcmlvZF9ieXRlc19taW4gPSBQTEFZQkFDS19NSU5fUEVSSU9EX1NJWkUsCisJLnBl cmlvZF9ieXRlc19tYXggPSBQTEFZQkFDS19NQVhfUEVSSU9EX1NJWkUsCisJLnBlcmlvZHNfbWlu ID0gUExBWUJBQ0tfTUlOX05VTV9QRVJJT0RTLAorCS5wZXJpb2RzX21heCA9IFBMQVlCQUNLX01B WF9OVU1fUEVSSU9EUywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2Fy ZSBhY3BfcGNtX2hhcmR3YXJlX2NhcHR1cmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19J TlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwgU05EUlZfUENN X0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfCBTTkRSVl9QQ01fSU5G T19CQVRDSCB8CisJICAgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVT VU1FLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQlTTkRSVl9QQ01f Rk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCS5jaGFubmVsc19taW4g PSAxLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBf NDgwMDAsCisJLnJhdGVfbWluID0gODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKKwkuYnVmZmVy X2J5dGVzX21heCA9IENBUFRVUkVfTUFYX05VTV9QRVJJT0RTICogQ0FQVFVSRV9NQVhfUEVSSU9E X1NJWkUsCisJLnBlcmlvZF9ieXRlc19taW4gPSBDQVBUVVJFX01JTl9QRVJJT0RfU0laRSwKKwku cGVyaW9kX2J5dGVzX21heCA9IENBUFRVUkVfTUFYX1BFUklPRF9TSVpFLAorCS5wZXJpb2RzX21p biA9IENBUFRVUkVfTUlOX05VTV9QRVJJT0RTLAorCS5wZXJpb2RzX21heCA9IENBUFRVUkVfTUFY X05VTV9QRVJJT0RTLAorfTsKKworc3RydWN0IGF1ZGlvX2Rydl9kYXRhIHsKKwlzdHJ1Y3Qgc25k X3BjbV9zdWJzdHJlYW0gKnBsYXlfc3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq Y2FwdHVyZV9zdHJlYW07CisJdm9pZCBfX2lvbWVtICphY3BfbW1pbzsKK307CisKKy8qIEFDUCBE TUEgaXJxIGhhbmRsZXIgcm91dGluZSBmb3IgcGxheWJhY2ssIGNhcHR1cmUgdXNlY2FzZXMgKi8K K3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQor eworCXUxNiBkc2NyX2lkeDsKKwl1MzIgaW50cl9mbGFnOworCisJaW50IHByaW9yaXR5X2xldmVs ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcmc7CisKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2Rh dGEgKmlycV9kYXRhOworCXZvaWQgX19pb21lbSAqYWNwX21taW87CisKKwlpcnFfZGF0YSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCWFjcF9tbWlvID0gaXJxX2RhdGEtPmFjcF9tbWlvOworCisJ aW50cl9mbGFnID0gYWNwX2dldF9pbnRyX2ZsYWcoYWNwX21taW8pOworCisJaWYgKChpbnRyX2Zs YWcgJiBCSVQoQUNQX1RPX0kyU19ETUFfQ0hfTlVNKSkgIT0gMCkgeworCQlkc2NyX2lkeCA9IGdl dF9kc2NyX2lkeChhY3BfbW1pbywgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CisJCWNvbmZp Z19hY3BfZG1hX2NoYW5uZWwoYWNwX21taW8sIFNZU1JBTV9UT19BQ1BfQ0hfTlVNLCBkc2NyX2lk eCwKKwkJCQkgICAgICAgMSwgcHJpb3JpdHlfbGV2ZWwpOworCQlhY3BfZG1hX3N0YXJ0KGFjcF9t bWlvLCBTWVNSQU1fVE9fQUNQX0NIX05VTSwgZmFsc2UpOworCisJCXNuZF9wY21fcGVyaW9kX2Vs YXBzZWQoaXJxX2RhdGEtPnBsYXlfc3RyZWFtKTsKKwkJYWNwX2V4dF9zdGF0X2NsZWFyX2RtYWlv YyhhY3BfbW1pbywgQUNQX1RPX0kyU19ETUFfQ0hfTlVNKTsKKwl9CisKKwlpZiAoKGludHJfZmxh ZyAmIEJJVChJMlNfVE9fQUNQX0RNQV9DSF9OVU0pKSAhPSAwKSB7CisJCWRzY3JfaWR4ID0gZ2V0 X2RzY3JfaWR4KGFjcF9tbWlvLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCQljb25maWdf YWNwX2RtYV9jaGFubmVsKGFjcF9tbWlvLCBBQ1BfVE9fU1lTUkFNX0NIX05VTSwgZHNjcl9pZHgs CisJCQkJICAgICAgIDEsIHByaW9yaXR5X2xldmVsKTsKKwkJYWNwX2RtYV9zdGFydChhY3BfbW1p bywgQUNQX1RPX1NZU1JBTV9DSF9OVU0sIGZhbHNlKTsKKwkJYWNwX2V4dF9zdGF0X2NsZWFyX2Rt YWlvYyhhY3BfbW1pbywgSTJTX1RPX0FDUF9ETUFfQ0hfTlVNKTsKKwl9CisKKwlpZiAoKGludHJf ZmxhZyAmIEJJVChBQ1BfVE9fU1lTUkFNX0NIX05VTSkpICE9IDApIHsKKwkJc25kX3BjbV9wZXJp b2RfZWxhcHNlZChpcnFfZGF0YS0+Y2FwdHVyZV9zdHJlYW0pOworCQlhY3BfZXh0X3N0YXRfY2xl YXJfZG1haW9jKGFjcF9tbWlvLCBBQ1BfVE9fU1lTUkFNX0NIX05VTSk7CisJfQorCisJcmV0dXJu IElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfb3BlbihzdHJ1Y3Qgc25kX3Bj bV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3Bj bV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29j X3BjbV9ydW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1 ZGlvX2Rydl9kYXRhICppbnRyX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEocHJ0ZC0+cGxhdGZvcm0t PmRldik7CisKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKmFkYXRhID0KKwkJa3phbGxv YyhzaXplb2Yoc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYg KGFkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHN1YnN0cmVhbS0+c3Ry ZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJ1bnRpbWUtPmh3ID0gYWNwX3Bj bV9oYXJkd2FyZV9wbGF5YmFjazsKKwllbHNlCisJCXJ1bnRpbWUtPmh3ID0gYWNwX3BjbV9oYXJk d2FyZV9jYXB0dXJlOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVu dGltZSwKKwkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAocmV0IDwg MCkgeworCQlkZXZfZXJyKHBydGQtPnBsYXRmb3JtLT5kZXYsICJzZXQgaW50ZWdlciBjb25zdHJh aW50IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJYWRhdGEtPmFjcF9tbWlvID0g aW50cl9kYXRhLT5hY3BfbW1pbzsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBhZGF0YTsKKwor CS8qIEVuYWJsZSBBQ1AgaXJxLCB3aGVuIG5laXRoZXIgcGxheWJhY2sgb3IgY2FwdHVyZSBzdHJl YW1zIGFyZQorCSAqIGFjdGl2ZSBieSB0aGUgdGltZSB3aGVuIGEgbmV3IHN0cmVhbSBpcyBiZWlu ZyBvcGVuZWQuCisJICogVGhpcyBlbmFibGVtZW50IGlzIG5vdCByZXF1aXJlZCBmb3IgYW5vdGhl ciBzdHJlYW0sIGlmIGN1cnJlbnQKKwkgKiBzdHJlYW0gaXMgbm90IGNsb3NlZAorCSovCisJaWYg KCFpbnRyX2RhdGEtPnBsYXlfc3RyZWFtICYmICFpbnRyX2RhdGEtPmNhcHR1cmVfc3RyZWFtKQor CQlhY3BfZW5hYmxlX2V4dGVybmFsX2ludGVycnVwdHMoYWRhdGEtPmFjcF9tbWlvLCAxKTsKKwor CWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlp bnRyX2RhdGEtPnBsYXlfc3RyZWFtID0gc3Vic3RyZWFtOworCWVsc2UKKwkJaW50cl9kYXRhLT5j YXB0dXJlX3N0cmVhbSA9IHN1YnN0cmVhbTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGFjcF9kbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAor CQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQgc3RhdHVz OworCXVpbnQ2NF90IHNpemU7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFfYnVmZmVyOwor CXN0cnVjdCBwYWdlICpwZzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXN0 cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkOworCisJZG1hX2J1ZmZlciA9ICZzdWJzdHJl YW0tPmRtYV9idWZmZXI7CisKKwlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXJ0ZCA9 IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlmIChXQVJOX09OKCFydGQpKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCXNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CisJc3RhdHVz ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgc2l6ZSk7CisJaWYgKHN0YXR1 cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwltZW1zZXQoc3Vic3RyZWFtLT5ydW50aW1lLT5k bWFfYXJlYSwgMCwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKKwlwZyA9IHZpcnRfdG9f cGFnZShzdWJzdHJlYW0tPmRtYV9idWZmZXIuYXJlYSk7CisKKwlpZiAocGcgIT0gTlVMTCkgewor CQkvKiBTYXZlIGZvciBydW50aW1lIHByaXZhdGUgZGF0YSAqLworCQlydGQtPnBnID0gcGc7CisJ CXJ0ZC0+b3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwkJLyogRmlsbCB0aGUgcGFnZSB0YWJs ZSBlbnRyaWVzIGluIEFDUCBTUkFNICovCisJCXJ0ZC0+cGcgPSBwZzsKKwkJcnRkLT5zaXplID0g c2l6ZTsKKwkJcnRkLT5udW1fb2ZfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpID4+IFBBR0VfU0hJ RlQ7CisJCXJ0ZC0+ZGlyZWN0aW9uID0gc3Vic3RyZWFtLT5zdHJlYW07CisKKwkJY29uZmlnX2Fj cF9kbWEocnRkLT5hY3BfbW1pbywgcnRkKTsKKwkJc3RhdHVzID0gMDsKKwl9IGVsc2UgeworCQlz dGF0dXMgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGFj cF9kbWFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwly ZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgc25k X3BjbV91ZnJhbWVzX3QgYWNwX2RtYV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq c3Vic3RyZWFtKQoreworCXUxNiBkc2NyOworCXUzMiBtdWwsIGRtYV9jb25maWcsIHBlcmlvZF9i eXRlczsKKwl1MzIgcG9zID0gMDsKKworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUg PSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICpydGQg PSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlwZXJpb2RfYnl0ZXMgPSBmcmFtZXNfdG9fYnl0 ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCWlmIChzdWJzdHJlYW0tPnN0cmVh bSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWRzY3IgPSBhY3BfcmVnX3JlYWQo cnRkLT5hY3BfbW1pbywgbW1BQ1BfRE1BX0NVUl9EU0NSXzEzKTsKKworCQltdWwgPSAoZHNjciA9 PSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMykgPyAwIDogMTsKKwkJcG9zID0gIChtdWwg KiBwZXJpb2RfYnl0ZXMpOworCisJfSBlbHNlIHsKKwkJZG1hX2NvbmZpZyA9IGFjcF9yZWdfcmVh ZChydGQtPmFjcF9tbWlvLCBtbUFDUF9ETUFfQ05UTF8xNCk7CisJCWlmIChkbWFfY29uZmlnICE9 IDApIHsKKwkJCWRzY3IgPSBhY3BfcmVnX3JlYWQocnRkLT5hY3BfbW1pbywKKwkJCQkJCW1tQUNQ X0RNQV9DVVJfRFNDUl8xNCk7CisJCQltdWwgPSAoZHNjciA9PSBDQVBUVVJFX1NUQVJUX0RNQV9E RVNDUl9DSDE0KSA/IDEgOiAyOworCQkJcG9zID0gKG11bCAqIHBlcmlvZF9ieXRlcyk7CisJCX0K KworCQlpZiAocG9zID49ICgyICogcGVyaW9kX2J5dGVzKSkKKwkJCXBvcyA9IDA7CisKKwl9CisK KwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQg YWNwX2RtYV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2RlZmF1bHRf bW1hcChzdWJzdHJlYW0sIHZtYSk7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV9wcmVwYXJlKHN0 cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1 bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGF1ZGlvX3N1YnN0 cmVhbV9kYXRhICpydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoc3Vic3RyZWFt LT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQljb25maWdfYWNwX2Rt YV9jaGFubmVsKHJ0ZC0+YWNwX21taW8sIFNZU1JBTV9UT19BQ1BfQ0hfTlVNLAorCQkJCQlQTEFZ QkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMiwKKwkJCQkJTlVNX0RTQ1JTX1BFUl9DSEFOTkVMLCAw KTsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChydGQtPmFjcF9tbWlvLCBBQ1BfVE9fSTJTX0RN QV9DSF9OVU0sCisJCQkJCVBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzLAorCQkJCQlOVU1f RFNDUlNfUEVSX0NIQU5ORUwsIDApOworCQkvKiBGaWxsIEFDUCBTUkFNICgyIHBlcmlvZHMpIHdp dGggemVyb3MgZnJvbSBTeXN0ZW0gUkFNCisJCSAqIHdoaWNoIGlzIHplcm8tZWQgaW4gaHdfcGFy YW1zCisJCSovCisJCWFjcF9kbWFfc3RhcnQocnRkLT5hY3BfbW1pbywgU1lTUkFNX1RPX0FDUF9D SF9OVU0sIGZhbHNlKTsKKworCQkvKiBBQ1AgU1JBTSAoMiBwZXJpb2RzIG9mIGJ1ZmZlciBzaXpl KSBpcyBpbnRpYWxseSBmaWxsZWQgd2l0aAorCQkgKiB6ZXJvcy4gQmVmb3JlIHJlbmRlcmluZyBz dGFydHMsIDJuZCBoYWxmIG9mIFNSQU0gd2lsbCBiZQorCQkgKiBmaWxsZWQgd2l0aCB2YWxpZCBh dWRpbyBkYXRhIERNQSdlZCBmcm9tIGZpcnN0IGhhbGYgb2Ygc3lzdGVtCisJCSAqIFJBTSBhbmQg MXN0IGhhbGYgb2YgU1JBTSB3aWxsIGJlIGZpbGxlZCB3aXRoIFplcm9zLiBUaGlzIGlzCisJCSAq IHRoZSBpbml0aWFsIHNjZW5hcmlvIHdoZW4gcmVkZXJpbmcgc3RhcnRzIGZyb20gU1JBTS4gTGF0 ZXIKKwkJICogb24sIDJuZCBoYWxmIG9mIHN5c3RlbSBtZW1vcnkgd2lsbCBiZSBETUEnZWQgdG8g MXN0IGhhbGYgb2YKKwkJICogU1JBTSwgMXN0IGhhbGYgb2Ygc3lzdGVtIG1lbW9yeSB3aWxsIGJl IERNQSdlZCB0byAybmQgaGFsZiBvZgorCQkgKiBTUkFNIGluIHBpbmctcG9uZyB3YXkgdGlsbCBy ZW5kZXJpbmcgc3RvcHMuCisJCSovCisJCWNvbmZpZ19hY3BfZG1hX2NoYW5uZWwocnRkLT5hY3Bf bW1pbywgU1lTUkFNX1RPX0FDUF9DSF9OVU0sCisJCQkJCVBMQVlCQUNLX1NUQVJUX0RNQV9ERVND Ul9DSDEyLAorCQkJCQkxLCAwKTsKKwl9IGVsc2UgeworCQljb25maWdfYWNwX2RtYV9jaGFubmVs KHJ0ZC0+YWNwX21taW8sIEFDUF9UT19TWVNSQU1fQ0hfTlVNLAorCQkJCQlDQVBUVVJFX1NUQVJU X0RNQV9ERVNDUl9DSDE0LAorCQkJCQlOVU1fRFNDUlNfUEVSX0NIQU5ORUwsIDApOworCQljb25m aWdfYWNwX2RtYV9jaGFubmVsKHJ0ZC0+YWNwX21taW8sIEkyU19UT19BQ1BfRE1BX0NIX05VTSwK KwkJCQkJQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSwKKwkJCQkJTlVNX0RTQ1JTX1BFUl9D SEFOTkVMLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV90cmln Z2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCWlu dCByZXQ7CisKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5y dW50aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJp dmF0ZV9kYXRhOworCisJaWYgKCFydGQpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoY21k KSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklH R0VSX1BBVVNFX1JFTEVBU0U6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCWlm IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQlh Y3BfZG1hX3N0YXJ0KHJ0ZC0+YWNwX21taW8sCisJCQkJCQlTWVNSQU1fVE9fQUNQX0NIX05VTSwg ZmFsc2UpOworCQkJd2hpbGUgKGFjcF9yZWdfcmVhZChydGQtPmFjcF9tbWlvLCBtbUFDUF9ETUFf Q0hfU1RTKSAmCisJCQkJCQlCSVQoU1lTUkFNX1RPX0FDUF9DSF9OVU0pKQorCQkJCWNwdV9yZWxh eCgpOworCisJCQlhY3BfZG1hX3N0YXJ0KHJ0ZC0+YWNwX21taW8sCisJCQkJCUFDUF9UT19JMlNf RE1BX0NIX05VTSwgdHJ1ZSk7CisKKwkJfSBlbHNlIHsKKwkJCWFjcF9kbWFfc3RhcnQocnRkLT5h Y3BfbW1pbywKKwkJCQkJICAgIEkyU19UT19BQ1BfRE1BX0NIX05VTSwgdHJ1ZSk7CisJCX0KKwkJ cmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2Ug U05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NV U1BFTkQ6CisJCS8qIE5lZWQgdG8gc3RvcCBvbmx5IGNpcmN1bGFyIERNQSBjaGFubmVscyA6CisJ CSAqIEFDUF9UT19JMlNfRE1BX0NIX05VTSAvIEkyU19UT19BQ1BfRE1BX0NIX05VTS4gTm9uLWNp cmN1bGFyCisJCSAqIGNoYW5uZWxzIHdpbGwgc3RvcHBlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0 cyB0cmFuc2ZlcgorCQkgKiBjb21wbGV0ZXMgOiBTWVNSQU1fVE9fQUNQX0NIX05VTSAvIEFDUF9U T19TWVNSQU1fQ0hfTlVNCisJCSAqLworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZf UENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXJldCA9IGFjcF9kbWFfc3RvcChydGQtPmFjcF9tbWlv LAorCQkJCQlBQ1BfVE9fSTJTX0RNQV9DSF9OVU0pOworCQllbHNlCisJCQlyZXQgPSBhY3BfZG1h X3N0b3AocnRkLT5hY3BfbW1pbywKKwkJCQkJSTJTX1RPX0FDUF9ETUFfQ0hfTlVNKTsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKworCX0KKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IGFjcF9kbWFfbmV3KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQp Cit7CisJcmV0dXJuIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocnRkLT5w Y20sCisJCQkJCQkJU05EUlZfRE1BX1RZUEVfREVWLAorCQkJCQkJCU5VTEwsIE1JTl9CVUZGRVIs CisJCQkJCQkJTUFYX0JVRkZFUik7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV9jbG9zZShzdHJ1 Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50 aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJl YW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX3Bj bV9ydW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1ZGlv X2Rydl9kYXRhICphZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShwcnRkLT5wbGF0Zm9ybS0+ZGV2KTsK KworCWtmcmVlKHJ0ZCk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NU UkVBTV9QTEFZQkFDSykKKwkJYWRhdGEtPnBsYXlfc3RyZWFtID0gTlVMTDsKKwllbHNlCisJCWFk YXRhLT5jYXB0dXJlX3N0cmVhbSA9IE5VTEw7CisKKwkvKiBEaXNhYmxlIEFDUCBpcnEsIHdoZW4g dGhlIGN1cnJlbnQgc3RyZWFtIGlzIGJlaW5nIGNsb3NlZCBhbmQKKwkgKiBhbm90aGVyIHN0cmVh bSBpcyBhbHNvIG5vdCBhY3RpdmUuCisJKi8KKwlpZiAoIWFkYXRhLT5wbGF5X3N0cmVhbSAmJiAh YWRhdGEtPmNhcHR1cmVfc3RyZWFtKQorCQlhY3BfZW5hYmxlX2V4dGVybmFsX2ludGVycnVwdHMo YWRhdGEtPmFjcF9tbWlvLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNu ZF9wY21fb3BzIGFjcF9kbWFfb3BzID0geworCS5vcGVuID0gYWNwX2RtYV9vcGVuLAorCS5jbG9z ZSA9IGFjcF9kbWFfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3Bh cmFtcyA9IGFjcF9kbWFfaHdfcGFyYW1zLAorCS5od19mcmVlID0gYWNwX2RtYV9od19mcmVlLAor CS50cmlnZ2VyID0gYWNwX2RtYV90cmlnZ2VyLAorCS5wb2ludGVyID0gYWNwX2RtYV9wb2ludGVy LAorCS5tbWFwID0gYWNwX2RtYV9tbWFwLAorCS5wcmVwYXJlID0gYWNwX2RtYV9wcmVwYXJlLAor fTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciBhY3BfYXNvY19wbGF0 Zm9ybSA9IHsKKwkub3BzID0gJmFjcF9kbWFfb3BzLAorCS5wY21fbmV3ID0gYWNwX2RtYV9uZXcs Cit9OworCitzdGF0aWMgaW50IGFjcF9hdWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICphdWRpb19k cnZfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWF1ZGlvX2Rydl9kYXRhID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEpLAorCQkJ CQlHRlBfS0VSTkVMKTsKKwlpZiAoYXVkaW9fZHJ2X2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOworCWF1ZGlvX2Rydl9kYXRhLT5hY3BfbW1pbyA9IGRldm1faW9yZW1hcF9yZXNvdXJj ZSgmcGRldi0+ZGV2LCByZXMpOworCisJLyogVGhlIGZvbGxvd2luZyBtZW1iZXJzIGdldHMgcG9w dWxhdGVkIGluIGRldmljZSAnb3BlbicKKwkgKiBmdW5jdGlvbi4gVGlsbCB0aGVuIGludGVycnVw dHMgYXJlIGRpc2FibGVkIGluICdhY3BfaW5pdCcKKwkgKiBhbmQgZGV2aWNlIGRvZXNuJ3QgZ2Vu ZXJhdGUgYW55IGludGVycnVwdHMuCisJICovCisKKwlhdWRpb19kcnZfZGF0YS0+cGxheV9zdHJl YW0gPSBOVUxMOworCWF1ZGlvX2Rydl9kYXRhLT5jYXB0dXJlX3N0cmVhbSA9IE5VTEw7CisKKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlm ICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklPUkVTT1VSQ0VfSVJRIEZBSUxFRFxu Iik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0YXR1cyA9IGRldm1fcmVxdWVzdF9pcnEo JnBkZXYtPmRldiwgcmVzLT5zdGFydCwgZG1hX2lycV9oYW5kbGVyLAorCQkJCQkwLCAiQUNQX0lS USIsICZwZGV2LT5kZXYpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi QUNQIElSUSByZXF1ZXN0IGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJZGV2 X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGF1ZGlvX2Rydl9kYXRhKTsKKworCS8qIEluaXRpYWxp emUgdGhlIEFDUCAqLworCWFjcF9pbml0KGF1ZGlvX2Rydl9kYXRhLT5hY3BfbW1pbyk7CisKKwlz dGF0dXMgPSBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYsICZhY3BfYXNvY19w bGF0Zm9ybSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZh aWwgdG8gcmVnaXN0ZXIgQUxTQSBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCQlyZXR1cm4gc3RhdHVz OworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2F1ZGlvX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdWRpb19kcnZfZGF0 YSAqYWRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlhY3BfZGVpbml0KGFk YXRhLT5hY3BfbW1pbyk7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFjcF9k bWFfZHJpdmVyID0geworCS5wcm9iZSA9IGFjcF9hdWRpb19wcm9iZSwKKwkucmVtb3ZlID0gYWNw X2F1ZGlvX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhY3BfYXVkaW9fZG1hIiwK Kwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhY3BfZG1hX2RyaXZlcik7CisKK01P RFVMRV9BVVRIT1IoIk1hcnV0aGkuQmF5eWF2YXJhcHVAYW1kLmNvbSIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJBTUQgQUNQIFBDTSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK K01PRFVMRV9BTElBUygicGxhdGZvcm06YWNwLWRtYS1hdWRpbyIpOwotLSAKMS44LjMuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK