From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: HID: add driver for U2F Zero built-in LED and RNG From: Andrej Shadura Message-Id: <20181023144654.12906-1-andrew.shadura@collabora.co.uk> Date: Tue, 23 Oct 2018 16:46:54 +0200 To: =?UTF-8?q?Ji=C5=99=C3=AD=20Kosina?= Cc: linux-input@vger.kernel.org, linux-usb@vger.kernel.org, kernel@collabora.com, Vasily Khoruzhick List-ID: VTJGIFplcm8gc3VwcG9ydHMgY3VzdG9tIGNvbW1hbmRzIGZvciBibGlua2luZyB0aGUgTEVEIGFu ZCBnZXR0aW5nIGRhdGEKZnJvbSB0aGUgaW50ZXJuYWwgaGFyZHdhcmUgUk5HLiBFeHBvc2UgdGhl IGJsaW5raW5nIGZ1bmN0aW9uIGFzIGEgTEVECmRldmljZSwgYW5kIHRoZSBpbnRlcm5hbCBoYXJk d2FyZSBSTkcgYXMgYW4gSFdSTkcgc28gdGhhdCBpdCBjYW4gYmUgdXNlZAp0byBmZWVkIHRoZSBl bnRocm9weSBwb29sLgoKU2lnbmVkLW9mZi1ieTogQW5kcmVqIFNoYWR1cmEgPGFuZHJldy5zaGFk dXJhQGNvbGxhYm9yYS5jby51az4KLS0tCiBkcml2ZXJzL2hpZC9LY29uZmlnICAgICAgIHwgIDE1 ICsrCiBkcml2ZXJzL2hpZC9NYWtlZmlsZSAgICAgIHwgICAxICsKIGRyaXZlcnMvaGlkL2hpZC1p ZHMuaCAgICAgfCAgIDEgKwogZHJpdmVycy9oaWQvaGlkLXUyZnplcm8uYyB8IDM3MSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzODggaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaGlkL2hpZC11MmZ6ZXJvLmMK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpp bmRleCA2MWUxOTUzZmY5MjEuLjNkZTZiZjIwMmYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQv S2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC05NzUsNiArOTc1LDIxIEBAIGNv bmZpZyBISURfVURSQVdfUFMzCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUg VEhRIHVEcmF3IGdhbWluZyB0YWJsZXQgZm9yCiAJICB0aGUgUFMzLgogCitjb25maWcgSElEX1Uy RlpFUk8KKwl0cmlzdGF0ZSAiVTJGIFplcm8gTEVEIGFuZCBSTkcgc3VwcG9ydCIKKwlkZXBlbmRz IG9uIEhJRAorCWRlcGVuZHMgb24gTEVEU19DTEFTUworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRo ZSBMRUQgb2YgdGhlIFUyRiBaZXJvIGRldmljZS4KKworCSAgVTJGIFplcm8gc3VwcG9ydHMgY3Vz dG9tIGNvbW1hbmRzIGZvciBibGlua2luZyB0aGUgTEVECisJICBhbmQgZ2V0dGluZyBkYXRhIGZy b20gdGhlIGludGVybmFsIGhhcmR3YXJlIFJORy4KKwkgIFRoZSBpbnRlcm5hbCBoYXJkd2FyZSBj YW4gYmUgdXNlZCB0byBmZWVkIHRoZSBlbnRocm9weSBwb29sLgorCisJICBVMkYgWmVybyBvbmx5 IHN1cHBvcnRzIGJsaW5raW5nIGl0cyBMRUQsIHNvIHRoaXMgZHJpdmVyIGRvZXNuJ3QKKwkgIGFs bG93IHNldHRpbmcgdGhlIGJyaWdodG5lc3MgdG8gYW55dGhpbmcgYnV0IDEsIHdoaWNoIHdpbGwK KwkgIHRyaWdnZXIgYSBzaW5nbGUgYmxpbmsgYW5kIGltbWVkaWF0ZWx5IHJlc2V0IHRvIGJhY2sg MC4KKwogY29uZmlnIEhJRF9XQUNPTQogCXRyaXN0YXRlICJXYWNvbSBJbnR1b3MvR3JhcGhpcmUg dGFibGV0IHN1cHBvcnQgKFVTQikiCiAJZGVwZW5kcyBvbiBVU0JfSElECmRpZmYgLS1naXQgYS9k cml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IGJkN2FjNTNi NzVjNS4uNjE3YjFhOTI4YjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2hpZC9NYWtlZmlsZQpAQCAtMTA3LDYgKzEwNyw3IEBAIG9iai0kKENPTkZJR19I SURfVEhSVVNUTUFTVEVSKQkrPSBoaWQtdG1mZi5vCiBvYmotJChDT05GSUdfSElEX1RJVk8pCQkr PSBoaWQtdGl2by5vCiBvYmotJChDT05GSUdfSElEX1RPUFNFRUQpCSs9IGhpZC10b3BzZWVkLm8K IG9iai0kKENPTkZJR19ISURfVFdJTkhBTikJKz0gaGlkLXR3aW5oYW4ubworb2JqLSQoQ09ORklH X0hJRF9VMkZaRVJPKQkrPSBoaWQtdTJmemVyby5vCiBvYmotJChDT05GSUdfSElEX1VDTE9HSUMp CSs9IGhpZC11Y2xvZ2ljLm8KIG9iai0kKENPTkZJR19ISURfVURSQVdfUFMzKQkrPSBoaWQtdWRy YXctcHMzLm8KIG9iai0kKENPTkZJR19ISURfTEVEKQkJKz0gaGlkLWxlZC5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggYmM0 OTkwOWFiYThlLi4wNzBhMmZjZDhhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMu aAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTMwOSw2ICszMDksNyBAQAogI2RlZmlu ZSBVU0JfREVWSUNFX0lEX0NZR05BTF9SQURJT19TSTQ3MFgJMHg4MThhCiAjZGVmaW5lIFVTQl9E RVZJQ0VfSURfRk9DQUxURUNIX0ZUWFhYWF9NVUxUSVRPVUNICTB4ODFiOQogI2RlZmluZSBVU0Jf REVWSUNFX0lEX0NZR05BTF9DUDIxMTIJMHhlYTkwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVTJG X1pFUk8JCTB4OGFjZgogCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lHTkFMX1JBRElPX1NJNDcx MyAgICAgICAweDgyNDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXUyZnplcm8uYyBi L2RyaXZlcnMvaGlkL2hpZC11MmZ6ZXJvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5iZDQwNzdjOTNjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9o aWQtdTJmemVyby5jCkBAIC0wLDAgKzEsMzcxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAorLyoKKyAqIFUyRiBaZXJvIExFRCBhbmQgUk5HIGRyaXZlcgorICoKKyAqIENv cHlyaWdodCAyMDE4IEFuZHJlaiBTaGFkdXJhIDxhbmRyZXdAc2hhZHVyYS5tZT4KKyAqIExvb3Nl bHkgYmFzZWQgb24gZHJpdmVycy9oaWQvaGlkLWxlZC5jCisgKiAgICAgICAgICAgICAgYW5kIGRy aXZlcnMvdXNiL21pc2MvY2hhb3NrZXkuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisK KyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWRyYXcuaD4KKyNpbmNs dWRlIDxsaW51eC9od19yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxs aW51eC91c2IuaD4KKworI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKyNpbmNsdWRlICJoaWQt aWRzLmgiCisKKyNkZWZpbmUgRFJJVkVSX1NIT1JUCQkidTJmemVybyIKKworI2RlZmluZSBISURf UkVQT1JUX1NJWkUJCTY0CisKKy8qIFdlIG9ubHkgdXNlIGJyb2FkY2FzdCAoQ0lELWxlc3MpIG1l c3NhZ2VzICovCisjZGVmaW5lIENJRF9CUk9BRENBU1QJCTB4ZmZmZmZmZmYKKworc3RydWN0IHUy Zl9oaWRfbXNnIHsKKwl1MzIgY2lkOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IGNtZDsK KwkJCXU4IGJjbnRoOworCQkJdTggYmNudGw7CisJCQl1OCBkYXRhW0hJRF9SRVBPUlRfU0laRSAt IDddOworCQl9IGluaXQ7CisJCXN0cnVjdCB7CisJCQl1OCBzZXE7CisJCQl1OCBkYXRhW0hJRF9S RVBPUlRfU0laRSAtIDVdOworCQl9IGNvbnQ7CisJfTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB1 MmZfaGlkX3JlcG9ydCB7CisJdTggcmVwb3J0X3R5cGU7CisJc3RydWN0IHUyZl9oaWRfbXNnIG1z ZzsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgVTJGX0hJRF9NU0dfTEVOKGYpCShzaXplX3QpKCgo ZikuaW5pdC5iY250aCA8PCA4KSArIChmKS5pbml0LmJjbnRsKQorCisvKiBDdXN0b20gZXh0ZW5z aW9ucyB0byB0aGUgVTJGSElEIHByb3RvY29sICovCisjZGVmaW5lIFUyRl9DVVNUT01fR0VUX1JO RwkweDIxCisjZGVmaW5lIFUyRl9DVVNUT01fV0lOSwkJMHgyNAorCitzdHJ1Y3QgdTJmemVyb19k ZXZpY2UgeworCXN0cnVjdCBoaWRfZGV2aWNlCSpoZGV2OworCXN0cnVjdCB1cmIJCSp1cmI7CSAg ICAvKiBVUkIgZm9yIHRoZSBSTkcgZGF0YSAqLworCXN0cnVjdCBsZWRfY2xhc3NkZXYJbGRldjsJ ICAgIC8qIEVtYmVkZGVkIHN0cnVjdCBmb3IgbGVkICovCisJc3RydWN0IGh3cm5nCQlod3JuZzsJ ICAgIC8qIEVtYmVkZGVkIHN0cnVjdCBmb3IgaHdybmcgKi8KKwljaGFyCQkJKmxlZF9uYW1lOwor CWNoYXIJCQkqcm5nX25hbWU7CisJdTgJCQkqYnVmX291dDsKKwl1OAkJCSpidWZfaW47CisJc3Ry dWN0IG11dGV4CQlsb2NrOworCWJvb2wJCQlwcmVzZW50OworfTsKKworc3RhdGljIGludCB1MmZ6 ZXJvX3NlbmQoc3RydWN0IHUyZnplcm9fZGV2aWNlICpkZXYsIHN0cnVjdCB1MmZfaGlkX3JlcG9y dCAqcmVxKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJbWVt Y3B5KGRldi0+YnVmX291dCwgcmVxLCBzaXplb2Yoc3RydWN0IHUyZl9oaWRfcmVwb3J0KSk7CisK KwlyZXQgPSBoaWRfaHdfb3V0cHV0X3JlcG9ydChkZXYtPmhkZXYsIGRldi0+YnVmX291dCwKKwkJ CQkgICBzaXplb2Yoc3RydWN0IHUyZl9oaWRfbXNnKSk7CisKKwltdXRleF91bmxvY2soJmRldi0+ bG9jayk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQgPT0g c2l6ZW9mKHN0cnVjdCB1MmZfaGlkX21zZykgPyAwIDogLUVNU0dTSVpFOworfQorCitzdHJ1Y3Qg dTJmemVyb190cmFuc2Zlcl9jb250ZXh0IHsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCWlu dCBzdGF0dXM7Cit9OworCitzdGF0aWMgdm9pZCB1MmZ6ZXJvX3JlYWRfY2FsbGJhY2soc3RydWN0 IHVyYiAqdXJiKQoreworCXN0cnVjdCB1MmZ6ZXJvX3RyYW5zZmVyX2NvbnRleHQgKmN0eCA9IHVy Yi0+Y29udGV4dDsKKworCWN0eC0+c3RhdHVzID0gdXJiLT5zdGF0dXM7CisJY29tcGxldGUoJmN0 eC0+ZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgdTJmemVyb19yZWN2KHN0cnVjdCB1MmZ6ZXJvX2Rl dmljZSAqZGV2LAorCQkJc3RydWN0IHUyZl9oaWRfcmVwb3J0ICpyZXEsCisJCQlzdHJ1Y3QgdTJm X2hpZF9tc2cgKnJlc3ApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiA9 IGRldi0+aGRldjsKKwlzdHJ1Y3QgdTJmemVyb190cmFuc2Zlcl9jb250ZXh0IGN0eDsKKworCW11 dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwltZW1jcHkoZGV2LT5idWZfb3V0LCByZXEsIHNpemVv ZihzdHJ1Y3QgdTJmX2hpZF9yZXBvcnQpKTsKKworCWRldi0+dXJiLT5jb250ZXh0ID0gJmN0eDsK Kwlpbml0X2NvbXBsZXRpb24oJmN0eC5kb25lKTsKKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKGRl di0+dXJiLCBHRlBfTk9JTyk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJaGlkX2VycihoZGV2 LCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwor CXJldCA9IGhpZF9od19vdXRwdXRfcmVwb3J0KGRldi0+aGRldiwgZGV2LT5idWZfb3V0LAorCQkJ CSAgIHNpemVvZihzdHJ1Y3QgdTJmX2hpZF9tc2cpKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWhp ZF9lcnIoaGRldiwgImhpZF9od19vdXRwdXRfcmVwb3J0IGZhaWxlZDogJWQiLCByZXQpOworCQln b3RvIGVycjsKKwl9CisKKwlyZXQgPSAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAorCQkm Y3R4LmRvbmUsIG1zZWNzX3RvX2ppZmZpZXMoVVNCX0NUUkxfU0VUX1RJTUVPVVQpKSk7CisJaWYg KHJldCA8IDApIHsKKwkJdXNiX2tpbGxfdXJiKGRldi0+dXJiKTsKKwkJaGlkX2VycihoZGV2LCAi dXJiIHN1Ym1pc3Npb24gdGltZWQgb3V0Iik7CisJfSBlbHNlIHsKKwkJcmV0ID0gZGV2LT51cmIt PmFjdHVhbF9sZW5ndGg7CisJCW1lbWNweShyZXNwLCBkZXYtPmJ1Zl9pbiwgcmV0KTsKKwl9CisK K2VycjoKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IHUyZnplcm9fYmxpbmsoc3RydWN0IGxlZF9jbGFzc2RldiAqbGRldikKK3sKKwlz dHJ1Y3QgdTJmemVyb19kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihsZGV2LAorCQlzdHJ1Y3Qg dTJmemVyb19kZXZpY2UsIGxkZXYpOworCXN0cnVjdCB1MmZfaGlkX3JlcG9ydCByZXEgPSB7CisJ CS5yZXBvcnRfdHlwZSA9IDAsCisJCS5tc2cuY2lkID0gQ0lEX0JST0FEQ0FTVCwKKwkJLm1zZy5p bml0ID0geworCQkJLmNtZCA9IFUyRl9DVVNUT01fV0lOSywKKwkJCS5iY250aCA9IDAsCisJCQku YmNudGwgPSAwLAorCQkJLmRhdGEgID0gezB9LAorCQl9CisJfTsKKwlyZXR1cm4gdTJmemVyb19z ZW5kKGRldiwgJnJlcSk7Cit9CisKK3N0YXRpYyBpbnQgdTJmemVyb19icmlnaHRuZXNzX3NldChz dHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZGV2LAorCQkJCSAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmln aHRuZXNzKQoreworCWxkZXYtPmJyaWdodG5lc3MgPSBMRURfT0ZGOworCWlmIChicmlnaHRuZXNz KQorCQlyZXR1cm4gdTJmemVyb19ibGluayhsZGV2KTsKKwllbHNlCisJCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHUyZnplcm9fcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHZvaWQgKmRh dGEsCisJCQkgICAgc2l6ZV90IG1heCwgYm9vbCB3YWl0KQoreworCXN0cnVjdCB1MmZ6ZXJvX2Rl dmljZSAqZGV2ID0gY29udGFpbmVyX29mKHJuZywKKwkJc3RydWN0IHUyZnplcm9fZGV2aWNlLCBo d3JuZyk7CisJc3RydWN0IHUyZl9oaWRfcmVwb3J0IHJlcSA9IHsKKwkJLnJlcG9ydF90eXBlID0g MCwKKwkJLm1zZy5jaWQgPSBDSURfQlJPQURDQVNULAorCQkubXNnLmluaXQgPSB7CisJCQkuY21k ID0gVTJGX0NVU1RPTV9HRVRfUk5HLAorCQkJLmJjbnRoID0gMCwKKwkJCS5iY250bCA9IDAsCisJ CQkuZGF0YSAgPSB7MH0sCisJCX0KKwl9OworCXN0cnVjdCB1MmZfaGlkX21zZyByZXNwOworCWlu dCByZXQ7CisJc2l6ZV90IGFjdHVhbF9sZW5ndGg7CisKKwlpZiAoIWRldi0+cHJlc2VudCkgewor CQloaWRfZGJnKGRldi0+aGRldiwgImRldmljZSBub3QgcHJlc2VudCIpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlyZXQgPSB1MmZ6ZXJvX3JlY3YoZGV2LCAmcmVxLCAmcmVzcCk7CisJaWYgKHJldCA8 IDApCisJCXJldHVybiAwOworCisJLyogb25seSB0YWtlIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBk YXRhIGl0IGlzIHNhZmUgdG8gdGFrZSAqLworCWFjdHVhbF9sZW5ndGggPSBtaW4zKChzaXplX3Qp cmV0IC0gb2Zmc2V0b2Yoc3RydWN0IHUyZl9oaWRfbXNnLAorCQlpbml0LmRhdGEpLCBVMkZfSElE X01TR19MRU4ocmVzcCksIG1heCk7CisKKwltZW1jcHkoZGF0YSwgcmVzcC5pbml0LmRhdGEsIGFj dHVhbF9sZW5ndGgpOworCisJcmV0dXJuIGFjdHVhbF9sZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQg dTJmemVyb19pbml0X2xlZChzdHJ1Y3QgdTJmemVyb19kZXZpY2UgKmRldiwKKwkJCSAgICB1bnNp Z25lZCBpbnQgbWlub3IpCit7CisJZGV2LT5sZWRfbmFtZSA9IGRldm1fa2FzcHJpbnRmKCZkZXYt PmhkZXYtPmRldiwgR0ZQX0tFUk5FTCwKKwkJIiVzJXUiLCBEUklWRVJfU0hPUlQsIG1pbm9yKTsK KwlpZiAoZGV2LT5sZWRfbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+ bGRldi5uYW1lID0gZGV2LT5sZWRfbmFtZTsKKwlkZXYtPmxkZXYubWF4X2JyaWdodG5lc3MgPSBM RURfT047CisJZGV2LT5sZGV2LmZsYWdzID0gTEVEX0hXX1BMVUdHQUJMRTsKKwlkZXYtPmxkZXYu YnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB1MmZ6ZXJvX2JyaWdodG5lc3Nfc2V0OworCisJcmV0 dXJuIGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZkZXYtPmhkZXYtPmRldiwgJmRldi0+bGRl dik7Cit9CisKK3N0YXRpYyBpbnQgdTJmemVyb19pbml0X2h3cm5nKHN0cnVjdCB1MmZ6ZXJvX2Rl dmljZSAqZGV2LAorCQkJICAgICAgdW5zaWduZWQgaW50IG1pbm9yKQoreworCWRldi0+cm5nX25h bWUgPSBkZXZtX2thc3ByaW50ZigmZGV2LT5oZGV2LT5kZXYsIEdGUF9LRVJORUwsCisJCSIlcy1y bmcldSIsIERSSVZFUl9TSE9SVCwgbWlub3IpOworCWlmIChkZXYtPnJuZ19uYW1lID09IE5VTEwp CisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5od3JuZy5uYW1lID0gZGV2LT5ybmdfbmFtZTsK KwlkZXYtPmh3cm5nLnJlYWQgPSB1MmZ6ZXJvX3JuZ19yZWFkOworCWRldi0+aHdybmcucXVhbGl0 eSA9IDEwMjQ7CisKKwlyZXR1cm4gZGV2bV9od3JuZ19yZWdpc3RlcigmZGV2LT5oZGV2LT5kZXYs ICZkZXYtPmh3cm5nKTsKK30KKworc3RhdGljIGludCB1MmZ6ZXJvX2ZpbGxfaW5fdXJiKHN0cnVj dCB1MmZ6ZXJvX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2ID0gZGV2 LT5oZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JoaWRfZGV2aWNl ICp1c2JoaWQgPSBoZGV2LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgcGlwZV9pbjsKKwlz dHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCisJaWYgKGRldi0+aGRldi0+YnVzICE9IEJV U19VU0IpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRldiA9IGhpZF90b191c2JfZGV2KGhkZXYp OworCisJaWYgKCF1c2JoaWQtPnVyYm91dCB8fCAhdXNiaGlkLT51cmJpbikKKwkJcmV0dXJuIC1F Tk9ERVY7CisKKwllcCA9IHVzYl9waXBlX2VuZHBvaW50KHVkZXYsIHVzYmhpZC0+dXJiaW4tPnBp cGUpOworCWlmICghZXApCisJCXJldHVybiAtRU5PREVWOworCisJZGV2LT51cmIgPSB1c2JfYWxs b2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT51cmIpCisJCXJldHVybiAtRU5PTUVN OworCisJcGlwZV9pbiA9ICh1c2JoaWQtPnVyYmluLT5waXBlICYgfigzIDw8IDMwKSkgfCAoUElQ RV9JTlRFUlJVUFQgPDwgMzApOworCisJdXNiX2ZpbGxfaW50X3VyYihkZXYtPnVyYiwKKwkJdWRl diwKKwkJcGlwZV9pbiwKKwkJZGV2LT5idWZfaW4sCisJCUhJRF9SRVBPUlRfU0laRSwKKwkJdTJm emVyb19yZWFkX2NhbGxiYWNrLAorCQlOVUxMLAorCQllcC0+ZGVzYy5iSW50ZXJ2YWwpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdTJmemVyb19wcm9iZShzdHJ1Y3QgaGlkX2Rldmlj ZSAqaGRldiwKKwkJCSBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0 IHUyZnplcm9fZGV2aWNlICpkZXY7CisJdW5zaWduZWQgaW50IG1pbm9yOworCWludCByZXQ7CisK KwlkZXYgPSBkZXZtX2t6YWxsb2MoJmhkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVM KTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5idWZfb3V0 ID0gZGV2bV9rbWFsbG9jKCZoZGV2LT5kZXYsCisJCXNpemVvZihzdHJ1Y3QgdTJmX2hpZF9yZXBv cnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2LT5idWZfb3V0ID09IE5VTEwpCisJCXJldHVybiAt RU5PTUVNOworCisJZGV2LT5idWZfaW4gPSBkZXZtX2ttYWxsb2MoJmhkZXYtPmRldiwKKwkJc2l6 ZW9mKHN0cnVjdCB1MmZfaGlkX21zZyksIEdGUF9LRVJORUwpOworCWlmIChkZXYtPmJ1Zl9pbiA9 PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2LT5oZGV2ID0gaGRldjsKKwloaWRfc2V0X2Ry dmRhdGEoaGRldiwgZGV2KTsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCisJcmV0ID0gaGlk X2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0hJRFJBVyk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXUyZnplcm9fZmlsbF9pbl91cmIoZGV2KTsKKworCWRldi0+cHJlc2VudCA9IHRy dWU7CisKKwltaW5vciA9ICgoc3RydWN0IGhpZHJhdyAqKSBoZGV2LT5oaWRyYXcpLT5taW5vcjsK KworCXJldCA9IHUyZnplcm9faW5pdF9sZWQoZGV2LCBtaW5vcik7CisJaWYgKHJldCkgeworCQlo aWRfaHdfc3RvcChoZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloaWRfaW5mbyhoZGV2LCAi VTJGIFplcm8gTEVEIGluaXRpYWxpc2VkXG4iKTsKKworCXJldCA9IHUyZnplcm9faW5pdF9od3Ju ZyhkZXYsIG1pbm9yKTsKKwlpZiAocmV0KSB7CisJCWhpZF9od19zdG9wKGhkZXYpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWhpZF9pbmZvKGhkZXYsICJVMkYgWmVybyBSTkcgaW5pdGlhbGlzZWRc biIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHUyZnplcm9fcmVtb3ZlKHN0cnVj dCBoaWRfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCB1MmZ6ZXJvX2RldmljZSAqZGV2ID0gaGlk X2dldF9kcnZkYXRhKGhkZXYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlkZXYtPnBy ZXNlbnQgPSBmYWxzZTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwloaWRfaHdfc3Rv cChoZGV2KTsKKwl1c2JfcG9pc29uX3VyYihkZXYtPnVyYik7CisJdXNiX2ZyZWVfdXJiKGRldi0+ dXJiKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHUyZnplcm9fdGFi bGVbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ1lHTkFMLAorCSAgVVNC X0RFVklDRV9JRF9VMkZfWkVSTykgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhp ZCwgdTJmemVyb190YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciB1MmZ6ZXJvX2Ry aXZlciA9IHsKKwkubmFtZSA9ICJoaWQtIiBEUklWRVJfU0hPUlQsCisJLnByb2JlID0gdTJmemVy b19wcm9iZSwKKwkucmVtb3ZlID0gdTJmemVyb19yZW1vdmUsCisJLmlkX3RhYmxlID0gdTJmemVy b190YWJsZSwKK307CisKK21vZHVsZV9oaWRfZHJpdmVyKHUyZnplcm9fZHJpdmVyKTsKKworTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQW5kcmVqIFNoYWR1cmEgPGFuZHJl d0BzaGFkdXJhLm1lPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVMkYgWmVybyBMRUQgYW5kIFJO RyBkcml2ZXIiKTsK