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: [4/5] usb: host: Add XHCI driver for Broadcom STB SoCs From: Alan Cooper Message-Id: <1538000414-24873-5-git-send-email-alcooperx@gmail.com> Date: Wed, 26 Sep 2018 18:20:13 -0400 To: linux-kernel@vger.kernel.org Cc: Al Cooper , Greg Kroah-Hartman , Rob Herring , Mark Rutland , Alan Stern , Mathias Nyman , Mauro Carvalho Chehab , "David S. Miller" , Andrew Morton , Arnd Bergmann , Dmitry Osipenko , Chunfeng Yun , Jianguo Sun , James Hogan , Alban Bedel , Lu Baolu , Avi Fishman , Alex Elder , Hans de Goede , linux-usb@vger.kernel.org, devicetree@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com List-ID: VGhpcyBkcml2ZXIgZW5hYmxlcyBVU0IgWEhDSSBvbiBCcm9hZGNvbSBBUk0gU1RCIFNvQ3MuClRo ZSBkcml2ZXJzIGRlcGVuZCBvbiBhIG1hdGNoaW5nICJicmNtLGJyY21zdGItdXNiLXBoeSIKQnJv YWRjb20gU1RCIFVTQiBQaHkgZHJpdmVyLgoKVGhlIHN0YW5kYXJkIHBsYXRmb3JtIGRyaXZlciBj YW4ndCBiZSB1c2VkIGJlY2F1c2Ugb2YgZGlmZmVyZW5jZXMKaW4gUEhZIGFuZCBDbG9jayBoYW5k bGluZy4gVGhlIHN0YW5kYXJkIFBIWSBoYW5kbGluZyBpbiBoY2QuYyB3aWxsCmRvIGEgcGh5X2V4 aXQvcGh5X2luaXQgb24gc3VzcGVuZC9yZXN1bWUgYW5kIHRoaXMgd2lsbCBlbmQgdXAKc2h1dHRp bmcgZG93biB0aGUgUEhZcyB0byB0aGUgcG9pbnQgdGhhdCB0aGUgaG9zdCBjb250cm9sbGVyCnJl Z2lzdGVycyBhcmUgbm8gbG9uZ2VyIGFjY2Vzc2libGUgYW5kIHdpbGwgY2F1c2Ugc3VzcGVuZCB0 byBjcmFzaC4KVGhlIGNsb2NrcyBzcGVjaWZpZWQgaW4gZGV2aWNlIHRyZWUgZm9yIHRoZXNlIGRy aXZlcnMgYXJlIG5vdAphdmFpbGFibGUgaW4gbWFpbmxpbmUgc28gaW5zdGVhZCBvZiByZXR1cm5p bmcgRVBST0JFX0RFRkVSIHdoZW4KdGhlIHNwZWNpZmllZCBjbG9jayBpcyBub3QgZm91bmQgYW5k IGV2ZW50dWFsbHkgZmFpbGluZyBwcm9iZSwKdGhlIGNsb2NrIHBvaW50ZXIgaXMgc2V0IHRvIE5V TEwgd2hpY2ggZGlzYWJsZXMgYWxsIGNsb2NrIGhhbmRsaW5nLgoKU2lnbmVkLW9mZi1ieTogQWwg Q29vcGVyIDxhbGNvb3BlcnhAZ21haWwuY29tPgotLS0KIGRyaXZlcnMvdXNiL2hvc3QveGhjaS1i cmNtLmMgfCAyOTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MSBmaWxlIGNoYW5nZWQsIDI5NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvaG9zdC94aGNpLWJyY20uYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qv eGhjaS1icmNtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktYnJjbS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWE3NTc4YjhlZjZhCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWJyY20uYwpAQCAtMCwwICsxLDI5NCBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAxOCwgQnJv YWRjb20gKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9w aHkvcGh5Lmg+CisKKyNpbmNsdWRlICJ4aGNpLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVy IF9fcmVhZF9tb3N0bHkgeGhjaV9icmNtX2hjX2RyaXZlcjsKKworI2RlZmluZSBCUkNNX0RSSVZF Ul9ERVNDICJ4SENJIEJyb2FkY29tIFNUQiBkcml2ZXIiCisjZGVmaW5lIEJSQ01fRFJJVkVSX05B TUUgInhoY2ktYnJjbSIKKworI2RlZmluZSBoY2RfdG9feGhjaV9wcml2KGgpICgoc3RydWN0IGJy Y21fcHJpdiAqKWhjZF90b194aGNpKGgpLT5wcml2KQorCitzdHJ1Y3QgYnJjbV9wcml2IHsKKwlz dHJ1Y3QgcGh5ICpwaHk7Cit9OworCitzdGF0aWMgdm9pZCB4aGNpX2JyY21fcXVpcmtzKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IHhoY2lfaGNkICp4aGNpKQoreworCS8qCisJICogQXMgb2Yg bm93IHBsYXRmb3JtIGRyaXZlcnMgZG9uJ3QgcHJvdmlkZSBNU0kgc3VwcG9ydCBzbyB3ZSBlbnN1 cmUKKwkgKiBoZXJlIHRoYXQgdGhlIGdlbmVyaWMgY29kZSBkb2VzIG5vdCB0cnkgdG8gbWFrZSBh IHBjaV9kZXYgZnJvbSBvdXIKKwkgKiBkZXYgc3RydWN0IGluIG9yZGVyIHRvIHNldHVwIE1TSQor CSAqLworCXhoY2ktPnF1aXJrcyB8PSBYSENJX1BMQVQ7CisKKwkvKgorCSAqIFRoZSBCcm9hZGNv bSBYSENJIGNvcmUgZG9lcyBub3Qgc3VwcG9ydCBzYXZlL3Jlc3RvcmUgc3RhdGUKKwkgKiBzbyB3 ZSBuZWVkIHRvIHJlc2V0IG9uIHJlc3VtZS4KKwkgKi8KKwl4aGNpLT5xdWlya3MgfD0gWEhDSV9S RVNFVF9PTl9SRVNVTUU7Cit9CisKKy8qIGNhbGxlZCBkdXJpbmcgcHJvYmUoKSBhZnRlciBjaGlw IHJlc2V0IGNvbXBsZXRlcyAqLworc3RhdGljIGludCB4aGNpX2JyY21fc2V0dXAoc3RydWN0IHVz Yl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4geGhjaV9nZW5fc2V0dXAoaGNkLCB4aGNpX2JyY21fcXVp cmtzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB4aGNpX2RyaXZlcl9vdmVycmlkZXMgYnJj bV9vdmVycmlkZXMgX19pbml0Y29uc3QgPSB7CisKKwkuZXh0cmFfcHJpdl9zaXplID0gc2l6ZW9m KHN0cnVjdCBicmNtX3ByaXYpLAorCS5yZXNldCA9IHhoY2lfYnJjbV9zZXR1cCwKK307CisKK3N0 YXRpYyBpbnQgeGhjaV9icmNtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJY29uc3Qgc3RydWN0IGhjX2RyaXZlcgkqZHJpdmVyOworCXN0cnVjdCBicmNtX3ByaXYJKnBy aXY7CisJc3RydWN0IHhoY2lfaGNkCQkqeGhjaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgICAgICAgICAq cmVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXJldDsKKwlpbnQJCQlpcnE7CisK KwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJZHJpdmVyID0gJnho Y2lfYnJjbV9oY19kcml2ZXI7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwor CWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFRyeSB0byBzZXQgNjQtYml0 IERNQSBmaXJzdCAqLworCWlmIChXQVJOX09OKCFwZGV2LT5kZXYuZG1hX21hc2spKQorCQkvKiBQ bGF0Zm9ybSBkaWQgbm90IGluaXRpYWxpemUgZG1hX21hc2sgKi8KKwkJcmV0ID0gZG1hX2NvZXJj ZV9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJICAgRE1BX0JJVF9NQVNLKDY0 KSk7CisJZWxzZQorCQlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYs IERNQV9CSVRfTUFTSyg2NCkpOworCisJLyogSWYgc2V0aW5nIDY0LWJpdCBETUEgbWFzayBmYWls cywgZmFsbCBiYWNrIHRvIDMyLWJpdCBETUEgbWFzayAqLworCWlmIChyZXQpIHsKKwkJcmV0ID0g ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcG1fcnVudGltZV9zZXRfYWN0aXZl KCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRp bWVfZ2V0X25vcmVzdW1lKCZwZGV2LT5kZXYpOworCisJaGNkID0gX191c2JfY3JlYXRlX2hjZChk cml2ZXIsICZwZGV2LT5kZXYsICZwZGV2LT5kZXYsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYt PmRldiksIE5VTEwpOworCWlmICghaGNkKSB7CisJCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGRp c2FibGVfcnVudGltZTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOworCWhjZC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgm cGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoaGNkLT5yZWdzKSkgeworCQlyZXQgPSBQVFJf RVJSKGhjZC0+cmVncyk7CisJCWdvdG8gcHV0X2hjZDsKKwl9CisKKwloY2QtPnJzcmNfc3RhcnQg PSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwkv KgorCSAqIE5vdCBhbGwgcGxhdGZvcm1zIGhhdmUgYSBjbGsgc28gaXQgaXMgbm90IGFuIGVycm9y IGlmIHRoZQorCSAqIGNsb2NrIGRvZXMgbm90IGV4aXN0cy4KKwkgKi8KKwl4aGNpID0gaGNkX3Rv X3hoY2koaGNkKTsKKwl4aGNpLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7 CisJaWYgKElTX0VSUih4aGNpLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNsb2Nr IG5vdCBmb3VuZCBpbiBEZXZpY2UgVHJlZVxuIik7CisJCXhoY2ktPmNsayA9IE5VTEw7CisJfQor CWRldmljZV93YWtldXBfZW5hYmxlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKworCXhoY2ktPm1h aW5faGNkID0gaGNkOworCXhoY2ktPnNoYXJlZF9oY2QgPSBfX3VzYl9jcmVhdGVfaGNkKGRyaXZl ciwgJnBkZXYtPmRldiwgJnBkZXYtPmRldiwKKwkJCQkJICAgIGRldl9uYW1lKCZwZGV2LT5kZXYp LCBoY2QpOworCWlmICgheGhjaS0+c2hhcmVkX2hjZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQln b3RvIGRpc2FibGVfY2xrOworCX0KKworCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKCZw ZGV2LT5kZXYsICJ1c2IzLWxwbS1jYXBhYmxlIikpCisJCXhoY2ktPnF1aXJrcyB8PSBYSENJX0xQ TV9TVVBQT1JUOworCisJcHJpdiA9IGhjZF90b194aGNpX3ByaXYoaGNkKTsKKwlwcml2LT5waHkg PSBkZXZtX29mX3BoeV9nZXRfYnlfaW5kZXgoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUs IDApOworCWlmIChJU19FUlIocHJpdi0+cGh5KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJV U0IgUGh5IG5vdCBmb3VuZC5cbiIpOworCQlyZXQgPSBQVFJfRVJSKHByaXYtPnBoeSk7CisJCWdv dG8gcHV0X3VzYjNfaGNkOworCX0KKwlyZXQgPSBwaHlfaW5pdChwcml2LT5waHkpOworCWlmIChy ZXQpCisJCWdvdG8gcHV0X3VzYjNfaGNkOworCisJaGNkLT5za2lwX3BoeV9pbml0aWFsaXphdGlv biA9IDE7CisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfU0hBUkVEKTsKKwlpZiAo cmV0KQorCQlnb3RvIGRpc2FibGVfdXNiX3BoeTsKKworCWlmIChIQ0NfTUFYX1BTQSh4aGNpLT5o Y2NfcGFyYW1zKSA+PSA0KQorCQl4aGNpLT5zaGFyZWRfaGNkLT5jYW5fZG9fc3RyZWFtcyA9IDE7 CisKKwlyZXQgPSB1c2JfYWRkX2hjZCh4aGNpLT5zaGFyZWRfaGNkLCBpcnEsIElSUUZfU0hBUkVE KTsKKwlpZiAocmV0KQorCQlnb3RvIGRlYWxsb2NfdXNiMl9oY2Q7CisKKwlkZXZpY2VfZW5hYmxl X2FzeW5jX3N1c3BlbmQoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2 LT5kZXYpOworCisJLyoKKwkgKiBQcmV2ZW50IHJ1bnRpbWUgcG0gZnJvbSBiZWluZyBvbiBhcyBk ZWZhdWx0LCB1c2VycyBzaG91bGQgZW5hYmxlCisJICogcnVudGltZSBwbSB1c2luZyBwb3dlci9j b250cm9sIGluIHN5c2ZzLgorCSAqLworCXBtX3J1bnRpbWVfZm9yYmlkKCZwZGV2LT5kZXYpOwor CisJcmV0dXJuIDA7CisKK2RlYWxsb2NfdXNiMl9oY2Q6CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsK KworZGlzYWJsZV91c2JfcGh5OgorCXBoeV9leGl0KHByaXYtPnBoeSk7CisKK3B1dF91c2IzX2hj ZDoKKwl1c2JfcHV0X2hjZCh4aGNpLT5zaGFyZWRfaGNkKTsKKworZGlzYWJsZV9jbGs6CisJaWYg KCFJU19FUlIoeGhjaS0+Y2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHhoY2ktPmNsayk7 CisKK3B1dF9oY2Q6CisJdXNiX3B1dF9oY2QoaGNkKTsKKworZGlzYWJsZV9ydW50aW1lOgorCXBt X3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBk ZXYtPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhoY2lfYnJjbV9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2Qg PSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhj ZF90b194aGNpKGhjZCk7CisJc3RydWN0IGJyY21fcHJpdiAqcHJpdiA9IGhjZF90b194aGNpX3By aXYoaGNkKTsKKworCXhoY2ktPnhoY19zdGF0ZSB8PSBYSENJX1NUQVRFX1JFTU9WSU5HOworCisJ dXNiX3JlbW92ZV9oY2QoeGhjaS0+c2hhcmVkX2hjZCk7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsK Kwl1c2JfcHV0X2hjZCh4aGNpLT5zaGFyZWRfaGNkKTsKKwlwaHlfZXhpdChwcml2LT5waHkpOwor CWNsa19kaXNhYmxlX3VucHJlcGFyZSh4aGNpLT5jbGspOworCXVzYl9wdXRfaGNkKGhjZCk7CisK KwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2Fi bGUoJmRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQ CitzdGF0aWMgaW50IHhoY2lfYnJjbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlp bnQgcmV0OworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlz dHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCisJcmV0ID0geGhjaV9z dXNwZW5kKHhoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOworCWNsa19kaXNhYmxlX3VucHJl cGFyZSh4aGNpLT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeGhjaV9icmNt X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNp KGhjZCk7CisJaW50IGVycjsKKworCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZSh4aGNpLT5jbGsp OworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIHhoY2lfcmVzdW1lKHhoY2ksIDAp OworfQorCitzdGF0aWMgaW50IHhoY2lfYnJjbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmlj ZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCisJcmV0dXJuIHho Y2lfc3VzcGVuZCh4aGNpLCB0cnVlKTsKK30KKworc3RhdGljIGludCB4aGNpX2JyY21fcnVudGlt ZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhj aShoY2QpOworCisJcmV0dXJuIHhoY2lfcmVzdW1lKHhoY2ksIDApOworfQorCisjZW5kaWYgLyog Q09ORklHX1BNX1NMRUVQICovCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHho Y2lfYnJjbV9wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoeGhjaV9icmNtX3N1 c3BlbmQsIHhoY2lfYnJjbV9yZXN1bWUpCisKKwlTRVRfUlVOVElNRV9QTV9PUFMoeGhjaV9icmNt X3J1bnRpbWVfc3VzcGVuZCwKKwkJCSAgIHhoY2lfYnJjbV9ydW50aW1lX3Jlc3VtZSwKKwkJCSAg IE5VTEwpCit9OworCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBicmNtX3hoY2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20s eGhjaS1icmNtLXYyIiB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBicmNt X3hoY2lfb2ZfbWF0Y2gpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IHhoY2lfYnJjbV9kcml2ZXIgPSB7CisJLnByb2JlCT0geGhjaV9icmNtX3Byb2JlLAorCS5yZW1v dmUJPSB4aGNpX2JyY21fcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gQlJDTV9EUklW RVJfTkFNRSwKKwkJLnBtID0gJnhoY2lfYnJjbV9wbV9vcHMsCisJCS5vZl9tYXRjaF90YWJsZSA9 IG9mX21hdGNoX3B0cihicmNtX3hoY2lfb2ZfbWF0Y2gpLAorCX0sCit9OworCitzdGF0aWMgaW50 IF9faW5pdCB4aGNpX2JyY21faW5pdCh2b2lkKQoreworCXByX2luZm8oIiVzOiAiIEJSQ01fRFJJ VkVSX0RFU0MgIlxuIiwgQlJDTV9EUklWRVJfTkFNRSk7CisJeGhjaV9pbml0X2RyaXZlcigmeGhj aV9icmNtX2hjX2RyaXZlciwgJmJyY21fb3ZlcnJpZGVzKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJp dmVyX3JlZ2lzdGVyKCZ4aGNpX2JyY21fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHhoY2lfYnJj bV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHhoY2lfYnJjbV9leGl0KHZvaWQpCit7CisJ cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnhoY2lfYnJjbV9kcml2ZXIpOworfQorbW9kdWxl X2V4aXQoeGhjaV9icmNtX2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnhoY2ktYnJj bSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKEJSQ01fRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhP UigiQWwgQ29vcGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cg==