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: [v8,03/12] usb: common: Small class for USB role switches From: Heikki Krogerus Message-Id: <20180314131215.70833-4-heikki.krogerus@linux.intel.com> Date: Wed, 14 Mar 2018 16:12:06 +0300 To: Greg Kroah-Hartman , Hans de Goede Cc: Darren Hart , Andy Shevchenko , MyungJoo Ham , Chanwoo Choi , Mathias Nyman , Guenter Roeck , Jun Li , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org List-ID: VVNCIHJvbGUgc3dpdGNoIGlzIGEgZGV2aWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hvb3NlIHRo ZQpkYXRhIHJvbGUgZm9yIFVTQiBjb25uZWN0b3IuIFdpdGggZHVhbC1yb2xlIGNhcGFibGUgVVNC CmNvbnRyb2xsZXJzLCB0aGUgY29udHJvbGxlciBpdHNlbGYgd2lsbCBiZSB0aGUgc3dpdGNoLCBi dXQKb24gc29tZSBwbGF0Zm9ybXMgdGhlIFVTQiBob3N0IGFuZCBkZXZpY2UgY29udHJvbGxlcnMg YXJlCnNlcGFyYXRlIElQcyBhbmQgdGhlcmUgaXMgYSBtdXggYmV0d2VlbiB0aGVtIGFuZCB0aGUK Y29ubmVjdG9yLiBPbiB0aG9zZSBwbGF0Zm9ybXMgdGhlIG11eCBkcml2ZXIgd2lsbCBuZWVkIHRv CnJlZ2lzdGVyIHRoZSBzd2l0Y2guCgpXaXRoIFVTQiBUeXBlLUMgY29ubmVjdG9ycywgdGhlIGhv c3QtdG8tZGV2aWNlIHJlbGF0aW9uc2hpcAppcyBuZWdvdGlhdGVkIG92ZXIgdGhlIENvbmZpZ3Vy YXRpb24gQ2hhbm5lbCAoQ0MpLiBUaGF0Cm1lYW5zIHRoZSBVU0IgVHlwZS1DIGRyaXZlcnMgbmVl ZCB0byBiZSBpbiBjb250cm9sIG9mIHRoZQpyb2xlIHN3aXRjaC4gVGhlIGNsYXNzIHByb3ZpZGVz IGEgc2ltcGxlIEFQSSBmb3IgdGhlIFVTQgpUeXBlLUMgZHJpdmVycyBmb3IgdGhlIGNvbnRyb2wu CgpGb3Igb3RoZXIgdHlwZXMgb2YgVVNCIGNvbm5lY3RvcnMgKG1haW5seSBtaWNyb0FCKSB0aGUg Y2xhc3MKcHJvdmlkZXMgdXNlciBzcGFjZSBjb250cm9sIHZpYSBzeXNmcyBhdHRyaWJ1dGUgZmls ZSB0aGF0CmNhbiBiZSB1c2VkIHRvIHJlcXVlc3Qgcm9sZSBzd2FwcGluZyBmcm9tIHRoZSBzd2l0 Y2guCgpSZXZpZXdlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KUmV2 aWV3ZWQtYnk6IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4KU2ln bmVkLW9mZi1ieTogSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwu Y29tPgotLS0KQ2hhbmdlcyBpbiB2NDoKLUNvbnNpc3RlbnRseSB1c2UgSVNfRVJSX09SX05VTEwg d2hlcmUgYXBwbGljYWJsZQotQWRkIEFuZHkncyBSZXZpZXdlZC1ieQoKQ2hhbmdlcyBpbiB2MjoK LU1pbm9yIHN0eWxlIGZpeGVzIGZyb20gcmV2aWV3IG9mIHYxCi0tLQogRG9jdW1lbnRhdGlvbi9B QkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2Jfcm9sZSB8ICAyMSArKwogZHJpdmVycy91c2IvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBkcml2ZXJzL3VzYi9jb21t b24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvdXNiL2NvbW1v bi9yb2xlcy5jICAgICAgICAgICAgICAgICAgICAgfCAzMDUgKysrKysrKysrKysrKysrKysrKysr KysrKwogaW5jbHVkZS9saW51eC91c2Ivcm9sZS5oICAgICAgICAgICAgICAgICAgICAgICB8ICA1 MyArKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzODMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX3JvbGUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jb21tb24vcm9sZXMuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvbGludXgvdXNiL3JvbGUuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRp b24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX3JvbGUgYi9Eb2N1bWVudGF0aW9uL0FCSS90 ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9yb2xlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uM2I4MTBhNDI1YTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlv bi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2Jfcm9sZQpAQCAtMCwwICsxLDIxIEBACitXaGF0 OgkJL3N5cy9jbGFzcy91c2Jfcm9sZS8KK0RhdGU6CQlKYW4gMjAxOAorQ29udGFjdDoJSGVpa2tp IEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tPgorRGVzY3JpcHRpb246 CisJCVBsYWNlIGluIHN5c2ZzIGZvciBVU0IgUm9sZSBTd2l0Y2hlcy4gVVNCIFJvbGUgU3dpdGNo IGlzIGEKKwkJZGV2aWNlIHRoYXQgY2FuIHNlbGVjdCB0aGUgZGF0YSByb2xlIChob3N0IG9yIGRl dmljZSkgZm9yIFVTQgorCQlwb3J0LgorCitXaGF0OgkJL3N5cy9jbGFzcy91c2Jfcm9sZS88c3dp dGNoPi9yb2xlCitEYXRlOgkJSmFuIDIwMTgKK0NvbnRhY3Q6CUhlaWtraSBLcm9nZXJ1cyA8aGVp a2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgY3VycmVu dCByb2xlIG9mIHRoZSBzd2l0Y2guIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIGZvcgorCQly ZXF1ZXN0aW5nIHJvbGUgc3dhcHBpbmcgd2l0aCBub24tVVNCIFR5cGUtQyBwb3J0cy4gV2l0aCBV U0IKKwkJVHlwZS1DIHBvcnRzLCB0aGUgQUJJIGRlZmluZWQgZm9yIFVTQiBUeXBlLUMgY29ubmVj dG9yIGNsYXNzCisJCW11c3QgYmUgdXNlZC4KKworCQlWYWxpZCB2YWx1ZXM6CisJCS0gbm9uZQor CQktIGhvc3QKKwkJLSBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9k cml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDE0OGYzZWU3MDI4Ni4uZjI3ODk1OGUwNGNhIDEwMDY0 NAotLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL0tjb25maWcKQEAg LTIwMyw0ICsyMDMsNyBAQCBjb25maWcgVVNCX1VMUElfQlVTCiAJICBUbyBjb21waWxlIHRoaXMg ZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKIAkgIGJl IGNhbGxlZCB1bHBpLgogCitjb25maWcgVVNCX1JPTEVfU1dJVENICisJdHJpc3RhdGUKKwogZW5k aWYgIyBVU0JfU1VQUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29tbW9uL01ha2VmaWxl IGIvZHJpdmVycy91c2IvY29tbW9uL01ha2VmaWxlCmluZGV4IDBhN2M0NWU4NTQ4MS4uZmI0ZDVl ZjQxNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb21tb24vTWFrZWZpbGUKKysrIGIvZHJp dmVycy91c2IvY29tbW9uL01ha2VmaWxlCkBAIC05LDMgKzksNCBAQCB1c2ItY29tbW9uLSQoQ09O RklHX1VTQl9MRURfVFJJRykgKz0gbGVkLm8KIAogb2JqLSQoQ09ORklHX1VTQl9PVEdfRlNNKSAr PSB1c2Itb3RnLWZzbS5vCiBvYmotJChDT05GSUdfVVNCX1VMUElfQlVTKQkrPSB1bHBpLm8KK29i ai0kKENPTkZJR19VU0JfUk9MRV9TV0lUQ0gpCSs9IHJvbGVzLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvdXNiL2NvbW1vbi9yb2xlcy5jIGIvZHJpdmVycy91c2IvY29tbW9uL3JvbGVzLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNWNjNzZlMjIxMjMKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb21tb24vcm9sZXMuYwpAQCAtMCwwICsxLDMwNSBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBVU0IgUm9sZSBTd2l0 Y2ggU3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgor ICogQXV0aG9yOiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5j b20+CisgKiAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKi8K KworI2luY2x1ZGUgPGxpbnV4L3VzYi9yb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKnJvbGVfY2xhc3M7 CisKK3N0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggeworCXN0cnVjdCBkZXZpY2UgZGV2OworCXN0cnVj dCBtdXRleCBsb2NrOyAvKiBkZXZpY2UgbG9jayovCisJZW51bSB1c2Jfcm9sZSByb2xlOworCisJ LyogRnJvbSBkZXNjcmlwdG9yICovCisJc3RydWN0IGRldmljZSAqdXNiMl9wb3J0OworCXN0cnVj dCBkZXZpY2UgKnVzYjNfcG9ydDsKKwlzdHJ1Y3QgZGV2aWNlICp1ZGM7CisJdXNiX3JvbGVfc3dp dGNoX3NldF90IHNldDsKKwl1c2Jfcm9sZV9zd2l0Y2hfZ2V0X3QgZ2V0OworCWJvb2wgYWxsb3df dXNlcnNwYWNlX2NvbnRyb2w7Cit9OworCisjZGVmaW5lIHRvX3JvbGVfc3dpdGNoKGQpCWNvbnRh aW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3JvbGVfc3dpdGNoLCBkZXYpCisKKy8qKgorICogdXNiX3Jv bGVfc3dpdGNoX3NldF9yb2xlIC0gU2V0IFVTQiByb2xlIGZvciBhIHN3aXRjaAorICogQHN3OiBV U0Igcm9sZSBzd2l0Y2gKKyAqIEByb2xlOiBVU0Igcm9sZSB0byBiZSBzd2l0Y2hlZCB0bworICoK KyAqIFNldCBVU0Igcm9sZSBAcm9sZSBmb3IgQHN3LgorICovCitpbnQgdXNiX3JvbGVfc3dpdGNo X3NldF9yb2xlKHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3LCBlbnVtIHVzYl9yb2xlIHJvbGUp Cit7CisJaW50IHJldDsKKworCWlmIChJU19FUlJfT1JfTlVMTChzdykpCisJCXJldHVybiAwOwor CisJbXV0ZXhfbG9jaygmc3ctPmxvY2spOworCisJcmV0ID0gc3ctPnNldChzdy0+ZGV2LnBhcmVu dCwgcm9sZSk7CisJaWYgKCFyZXQpCisJCXN3LT5yb2xlID0gcm9sZTsKKworCW11dGV4X3VubG9j aygmc3ctPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9y b2xlX3N3aXRjaF9zZXRfcm9sZSk7CisKKy8qKgorICogdXNiX3JvbGVfc3dpdGNoX2dldF9yb2xl IC0gR2V0IHRoZSBVU0Igcm9sZSBmb3IgYSBzd2l0Y2gKKyAqIEBzdzogVVNCIHJvbGUgc3dpdGNo CisgKgorICogRGVwZW5kaW5nIG9uIHRoZSByb2xlLXN3aXRjaC1kcml2ZXIgdGhpcyBmdW5jdGlv biByZXR1cm5zIGVpdGhlciBhIGNhY2hlZAorICogdmFsdWUgb2YgdGhlIGxhc3Qgc2V0IHJvbGUs IG9yIHJlYWRzIGJhY2sgdGhlIGFjdHVhbCB2YWx1ZSBmcm9tIHRoZSBoYXJkd2FyZS4KKyAqLwor ZW51bSB1c2Jfcm9sZSB1c2Jfcm9sZV9zd2l0Y2hfZ2V0X3JvbGUoc3RydWN0IHVzYl9yb2xlX3N3 aXRjaCAqc3cpCit7CisJZW51bSB1c2Jfcm9sZSByb2xlOworCisJaWYgKElTX0VSUl9PUl9OVUxM KHN3KSkKKwkJcmV0dXJuIFVTQl9ST0xFX05PTkU7CisKKwltdXRleF9sb2NrKCZzdy0+bG9jayk7 CisKKwlpZiAoc3ctPmdldCkKKwkJcm9sZSA9IHN3LT5nZXQoc3ctPmRldi5wYXJlbnQpOworCWVs c2UKKwkJcm9sZSA9IHN3LT5yb2xlOworCisJbXV0ZXhfdW5sb2NrKCZzdy0+bG9jayk7CisKKwly ZXR1cm4gcm9sZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9yb2xlX3N3aXRjaF9nZXRfcm9s ZSk7CisKK3N0YXRpYyBpbnQgX19zd2l0Y2hfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25z dCB2b2lkICpuYW1lKQoreworCXJldHVybiAhc3RyY21wKChjb25zdCBjaGFyICopbmFtZSwgZGV2 X25hbWUoZGV2KSk7Cit9CisKK3N0YXRpYyB2b2lkICp1c2Jfcm9sZV9zd2l0Y2hfbWF0Y2goc3Ry dWN0IGRldmljZV9jb25uZWN0aW9uICpjb24sIGludCBlcCwKKwkJCQkgICB2b2lkICpkYXRhKQor eworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKHJvbGVf Y2xhc3MsIE5VTEwsIGNvbi0+ZW5kcG9pbnRbZXBdLAorCQkJCV9fc3dpdGNoX21hdGNoKTsKKwor CXJldHVybiBkZXYgPyB0b19yb2xlX3N3aXRjaChkZXYpIDogRVJSX1BUUigtRVBST0JFX0RFRkVS KTsKK30KKworLyoqCisgKiB1c2Jfcm9sZV9zd2l0Y2hfZ2V0IC0gRmluZCBVU0Igcm9sZSBzd2l0 Y2ggbGlua2VkIHdpdGggdGhlIGNhbGxlcgorICogQGRldjogVGhlIGNhbGxlciBkZXZpY2UKKyAq CisgKiBGaW5kcyBhbmQgcmV0dXJucyByb2xlIHN3aXRjaCBsaW5rZWQgd2l0aCBAZGV2LiBUaGUg cmVmZXJlbmNlIGNvdW50IGZvciB0aGUKKyAqIGZvdW5kIHN3aXRjaCBpcyBpbmNyZW1lbnRlZC4K KyAqLworc3RydWN0IHVzYl9yb2xlX3N3aXRjaCAqdXNiX3JvbGVfc3dpdGNoX2dldChzdHJ1Y3Qg ZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldmljZV9jb25uZWN0aW9uX2ZpbmRfbWF0Y2goZGV2 LCAidXNiLXJvbGUtc3dpdGNoIiwgTlVMTCwKKwkJCQkJICAgIHVzYl9yb2xlX3N3aXRjaF9tYXRj aCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfcm9sZV9zd2l0Y2hfZ2V0KTsKKworLyoqCisg KiB1c2Jfcm9sZV9zd2l0Y2hfcHV0IC0gUmVsZWFzZSBoYW5kbGUgdG8gYSBzd2l0Y2gKKyAqIEBz dzogVVNCIFJvbGUgU3dpdGNoCisgKgorICogRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCBmb3Ig QHN3LgorICovCit2b2lkIHVzYl9yb2xlX3N3aXRjaF9wdXQoc3RydWN0IHVzYl9yb2xlX3N3aXRj aCAqc3cpCit7CisJaWYgKCFJU19FUlJfT1JfTlVMTChzdykpCisJCXB1dF9kZXZpY2UoJnN3LT5k ZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3JvbGVfc3dpdGNoX3B1dCk7CisKK3N0YXRp YyB1bW9kZV90Cit1c2Jfcm9sZV9zd2l0Y2hfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29i aiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gY29udGFpbmVyX29mKGtvYmosIHR5cGVvZigqZGV2KSwga29iaik7CisJc3RydWN0IHVzYl9y b2xlX3N3aXRjaCAqc3cgPSB0b19yb2xlX3N3aXRjaChkZXYpOworCisJaWYgKHN3LT5hbGxvd191 c2Vyc3BhY2VfY29udHJvbCkKKwkJcmV0dXJuIGF0dHItPm1vZGU7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2Jfcm9sZXNbXSA9IHsKKwlbVVNCX1JPTEVf Tk9ORV0JCT0gIm5vbmUiLAorCVtVU0JfUk9MRV9IT1NUXQkJPSAiaG9zdCIsCisJW1VTQl9ST0xF X0RFVklDRV0JPSAiZGV2aWNlIiwKK307CisKK3N0YXRpYyBzc2l6ZV90Cityb2xlX3Nob3coc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm KQoreworCXN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3ID0gdG9fcm9sZV9zd2l0Y2goZGV2KTsK KwllbnVtIHVzYl9yb2xlIHJvbGUgPSB1c2Jfcm9sZV9zd2l0Y2hfZ2V0X3JvbGUoc3cpOworCisJ cmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHVzYl9yb2xlc1tyb2xlXSk7Cit9CisKK3N0YXRp YyBzc2l6ZV90IHJvbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlz dHJ1Y3QgdXNiX3JvbGVfc3dpdGNoICpzdyA9IHRvX3JvbGVfc3dpdGNoKGRldik7CisJaW50IHJl dDsKKworCXJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyh1c2Jfcm9sZXMsIGJ1Zik7CisJaWYgKHJl dCA8IDApIHsKKwkJYm9vbCByZXM7CisKKwkJLyogRXh0cmEgY2hlY2sgaWYgdGhlIHVzZXIgd2Fu dHMgdG8gZGlzYWJsZSB0aGUgc3dpdGNoICovCisJCXJldCA9IGtzdHJ0b2Jvb2woYnVmLCAmcmVz KTsKKwkJaWYgKHJldCB8fCByZXMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSB1 c2Jfcm9sZV9zd2l0Y2hfc2V0X3JvbGUoc3csIHJldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldHVybiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSX1JXKHJvbGUpOworCitz dGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdXNiX3JvbGVfc3dpdGNoX2F0dHJzW10gPSB7CisJJmRl dl9hdHRyX3JvbGUuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgdXNiX3JvbGVfc3dpdGNoX2dyb3VwID0geworCS5pc192aXNpYmxlID0gdXNi X3JvbGVfc3dpdGNoX2lzX3Zpc2libGUsCisJLmF0dHJzID0gdXNiX3JvbGVfc3dpdGNoX2F0dHJz LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnVzYl9yb2xlX3N3 aXRjaF9ncm91cHNbXSA9IHsKKwkmdXNiX3JvbGVfc3dpdGNoX2dyb3VwLAorCU5VTEwsCit9Owor CitzdGF0aWMgaW50Cit1c2Jfcm9sZV9zd2l0Y2hfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQoreworCWludCByZXQ7CisKKwlyZXQgPSBhZGRf dWV2ZW50X3ZhcihlbnYsICJVU0JfUk9MRV9TV0lUQ0g9JXMiLCBkZXZfbmFtZShkZXYpKTsKKwlp ZiAocmV0KQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgdWV2ZW50IFVTQl9ST0xFX1NX SVRDSFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1c2Jfcm9sZV9zd2l0 Y2hfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9yb2xlX3N3aXRj aCAqc3cgPSB0b19yb2xlX3N3aXRjaChkZXYpOworCisJa2ZyZWUoc3cpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRldmljZV90eXBlIHVzYl9yb2xlX2Rldl90eXBlID0geworCS5uYW1lID0g InVzYl9yb2xlX3N3aXRjaCIsCisJLmdyb3VwcyA9IHVzYl9yb2xlX3N3aXRjaF9ncm91cHMsCisJ LnVldmVudCA9IHVzYl9yb2xlX3N3aXRjaF91ZXZlbnQsCisJLnJlbGVhc2UgPSB1c2Jfcm9sZV9z d2l0Y2hfcmVsZWFzZSwKK307CisKKy8qKgorICogdXNiX3JvbGVfc3dpdGNoX3JlZ2lzdGVyIC0g UmVnaXN0ZXIgVVNCIFJvbGUgU3dpdGNoCisgKiBAcGFyZW50OiBQYXJlbnQgZGV2aWNlIGZvciB0 aGUgc3dpdGNoCisgKiBAZGVzYzogRGVzY3JpcHRpb24gb2YgdGhlIHN3aXRjaAorICoKKyAqIFVT QiBSb2xlIFN3aXRjaCBpcyBhIGRldmljZSBjYXBhYmxlIG9yIGNob29zaW5nIHRoZSByb2xlIGZv ciBVU0IgY29ubmVjdG9yLgorICogT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBVU0IgY29udHJvbGxl ciBpcyBkdWFsLXJvbGUgY2FwYWJsZSwgdGhlIGNvbnRyb2xsZXIKKyAqIGRyaXZlciB3aWxsIG5l ZWQgdG8gcmVnaXN0ZXIgdGhlIHN3aXRjaC4gT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBVU0IgaG9z dCBhbmQKKyAqIFVTQiBkZXZpY2UgY29udHJvbGxlcnMgYmVoaW5kIHRoZSBjb25uZWN0b3IgYXJl IHNlcGFyYXRlLCB0aGVyZSB3aWxsIGJlIGEKKyAqIG11eCwgYW5kIHRoZSBkcml2ZXIgZm9yIHRo YXQgbXV4IHdpbGwgbmVlZCB0byByZWdpc3RlciB0aGUgc3dpdGNoLgorICoKKyAqIFJldHVybnMg aGFuZGxlIHRvIGEgbmV3IHJvbGUgc3dpdGNoIG9yIEVSUl9QVFIuIFRoZSBjb250ZW50IG9mIEBk ZXNjIGlzCisgKiBjb3BpZWQuCisgKi8KK3N0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKgordXNiX3Jv bGVfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJCSBjb25zdCBzdHJ1 Y3QgdXNiX3JvbGVfc3dpdGNoX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHVzYl9yb2xlX3N3aXRj aCAqc3c7CisJaW50IHJldDsKKworCWlmICghZGVzYyB8fCAhZGVzYy0+c2V0KQorCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKKworCXN3ID0ga3phbGxvYyhzaXplb2YoKnN3KSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFzdykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltdXRleF9pbml0 KCZzdy0+bG9jayk7CisKKwlzdy0+YWxsb3dfdXNlcnNwYWNlX2NvbnRyb2wgPSBkZXNjLT5hbGxv d191c2Vyc3BhY2VfY29udHJvbDsKKwlzdy0+dXNiMl9wb3J0ID0gZGVzYy0+dXNiMl9wb3J0Owor CXN3LT51c2IzX3BvcnQgPSBkZXNjLT51c2IzX3BvcnQ7CisJc3ctPnVkYyA9IGRlc2MtPnVkYzsK Kwlzdy0+c2V0ID0gZGVzYy0+c2V0OworCXN3LT5nZXQgPSBkZXNjLT5nZXQ7CisKKwlzdy0+ZGV2 LnBhcmVudCA9IHBhcmVudDsKKwlzdy0+ZGV2LmNsYXNzID0gcm9sZV9jbGFzczsKKwlzdy0+ZGV2 LnR5cGUgPSAmdXNiX3JvbGVfZGV2X3R5cGU7CisJZGV2X3NldF9uYW1lKCZzdy0+ZGV2LCAiJXMt cm9sZS1zd2l0Y2giLCBkZXZfbmFtZShwYXJlbnQpKTsKKworCXJldCA9IGRldmljZV9yZWdpc3Rl cigmc3ctPmRldik7CisJaWYgKHJldCkgeworCQlwdXRfZGV2aWNlKCZzdy0+ZGV2KTsKKwkJcmV0 dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwkvKiBUT0RPOiBTeW1saW5rcyBmb3IgdGhlIGhvc3Qg cG9ydCBhbmQgdGhlIGRldmljZSBjb250cm9sbGVyLiAqLworCisJcmV0dXJuIHN3OworfQorRVhQ T1JUX1NZTUJPTF9HUEwodXNiX3JvbGVfc3dpdGNoX3JlZ2lzdGVyKTsKKworLyoqCisgKiB1c2Jf cm9sZV9zd2l0Y2hfdW5yZWdpc3RlciAtIFVucmVnc2l0ZXIgVVNCIFJvbGUgU3dpdGNoCisgKiBA c3c6IFVTQiBSb2xlIFN3aXRjaAorICoKKyAqIFVucmVnaXN0ZXIgc3dpdGNoIHRoYXQgd2FzIHJl Z2lzdGVyZWQgd2l0aCB1c2Jfcm9sZV9zd2l0Y2hfcmVnaXN0ZXIoKS4KKyAqLwordm9pZCB1c2Jf cm9sZV9zd2l0Y2hfdW5yZWdpc3RlcihzdHJ1Y3QgdXNiX3JvbGVfc3dpdGNoICpzdykKK3sKKwlp ZiAoIUlTX0VSUl9PUl9OVUxMKHN3KSkKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJnN3LT5kZXYpOwor fQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3JvbGVfc3dpdGNoX3VucmVnaXN0ZXIpOworCitzdGF0 aWMgaW50IF9faW5pdCB1c2Jfcm9sZXNfaW5pdCh2b2lkKQoreworCXJvbGVfY2xhc3MgPSBjbGFz c19jcmVhdGUoVEhJU19NT0RVTEUsICJ1c2Jfcm9sZSIpOworCXJldHVybiBQVFJfRVJSX09SX1pF Uk8ocm9sZV9jbGFzcyk7Cit9CitzdWJzeXNfaW5pdGNhbGwodXNiX3JvbGVzX2luaXQpOworCitz dGF0aWMgdm9pZCBfX2V4aXQgdXNiX3JvbGVzX2V4aXQodm9pZCkKK3sKKwljbGFzc19kZXN0cm95 KHJvbGVfY2xhc3MpOworfQorbW9kdWxlX2V4aXQodXNiX3JvbGVzX2V4aXQpOworCitNT0RVTEVf QVVUSE9SKCJIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+ Iik7CitNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPiIp OworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgUm9s ZSBDbGFzcyIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivcm9sZS5oIGIvaW5jbHVk ZS9saW51eC91c2Ivcm9sZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uZWRjNTFiZTRhNzdjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivcm9s ZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CisKKyNpZm5kZWYgX19MSU5VWF9VU0JfUk9MRV9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1JPTEVf SAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKK3N0cnVjdCB1c2Jfcm9sZV9zd2l0Y2g7 CisKK2VudW0gdXNiX3JvbGUgeworCVVTQl9ST0xFX05PTkUsCisJVVNCX1JPTEVfSE9TVCwKKwlV U0JfUk9MRV9ERVZJQ0UsCit9OworCit0eXBlZGVmIGludCAoKnVzYl9yb2xlX3N3aXRjaF9zZXRf dCkoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHVzYl9yb2xlIHJvbGUpOwordHlwZWRlZiBlbnVt IHVzYl9yb2xlICgqdXNiX3JvbGVfc3dpdGNoX2dldF90KShzdHJ1Y3QgZGV2aWNlICpkZXYpOwor CisvKioKKyAqIHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2hfZGVzYyAtIFVTQiBSb2xlIFN3aXRjaCBE ZXNjcmlwdG9yCisgKiBAdXNiMl9wb3J0OiBPcHRpb25hbCByZWZlcmVuY2UgdG8gdGhlIGhvc3Qg Y29udHJvbGxlciBwb3J0IGRldmljZSAoVVNCMikKKyAqIEB1c2IzX3BvcnQ6IE9wdGlvbmFsIHJl ZmVyZW5jZSB0byB0aGUgaG9zdCBjb250cm9sbGVyIHBvcnQgZGV2aWNlIChVU0IzKQorICogQHVk YzogT3B0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZGV2aWNl CisgKiBAc2V0OiBDYWxsYmFjayBmb3Igc2V0dGluZyB0aGUgcm9sZQorICogQGdldDogQ2FsbGJh Y2sgZm9yIGdldHRpbmcgdGhlIHJvbGUgKG9wdGlvbmFsKQorICogQGFsbG93X3VzZXJzcGFjZV9j b250cm9sOiBJZiB0cnVlIHVzZXJzcGFjZSBtYXkgY2hhbmdlIHRoZSByb2xlIHRocm91Z2ggc3lz ZnMKKyAqCisgKiBAdXNiMl9wb3J0IGFuZCBAdXNiM19wb3J0IHdpbGwgcG9pbnQgdG8gdGhlIFVT QiBob3N0IHBvcnQgYW5kIEB1ZGMgdG8gdGhlIFVTQgorICogZGV2aWNlIGNvbnRyb2xsZXIgYmVo aW5kIHRoZSBVU0IgY29ubmVjdG9yIHdpdGggdGhlIHJvbGUgc3dpdGNoLiBJZgorICogQHVzYjJf cG9ydCwgQHVzYjNfcG9ydCBhbmQgQHVkYyBhcmUgaW5jbHVkZWQgaW4gdGhlIGRlc2NyaXB0aW9u LCB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlbSBzaG91bGQgYmUgaW5jcmVtZW50ZWQg YnkgdGhlIGNhbGxlciBvZgorICogdXNiX3JvbGVfc3dpdGNoX3JlZ2lzdGVyKCkgYmVmb3JlIHJl Z2lzdGVyaW5nIHRoZSBzd2l0Y2guCisgKi8KK3N0cnVjdCB1c2Jfcm9sZV9zd2l0Y2hfZGVzYyB7 CisJc3RydWN0IGRldmljZSAqdXNiMl9wb3J0OworCXN0cnVjdCBkZXZpY2UgKnVzYjNfcG9ydDsK KwlzdHJ1Y3QgZGV2aWNlICp1ZGM7CisJdXNiX3JvbGVfc3dpdGNoX3NldF90IHNldDsKKwl1c2Jf cm9sZV9zd2l0Y2hfZ2V0X3QgZ2V0OworCWJvb2wgYWxsb3dfdXNlcnNwYWNlX2NvbnRyb2w7Cit9 OworCitpbnQgdXNiX3JvbGVfc3dpdGNoX3NldF9yb2xlKHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2gg KnN3LCBlbnVtIHVzYl9yb2xlIHJvbGUpOworZW51bSB1c2Jfcm9sZSB1c2Jfcm9sZV9zd2l0Y2hf Z2V0X3JvbGUoc3RydWN0IHVzYl9yb2xlX3N3aXRjaCAqc3cpOworc3RydWN0IHVzYl9yb2xlX3N3 aXRjaCAqdXNiX3JvbGVfc3dpdGNoX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwordm9pZCB1c2Jf cm9sZV9zd2l0Y2hfcHV0KHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3KTsKKworc3RydWN0IHVz Yl9yb2xlX3N3aXRjaCAqCit1c2Jfcm9sZV9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAq cGFyZW50LAorCQkJIGNvbnN0IHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2hfZGVzYyAqZGVzYyk7Cit2 b2lkIHVzYl9yb2xlX3N3aXRjaF91bnJlZ2lzdGVyKHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3 KTsKKworI2VuZGlmIC8qIF9fTElOVVhfVVNCX1JPTEVfSCAqLwo=