Date: Sat, 19 Nov 2022 18:45:26 +0900 (JST) From: UEMURA Tetsuya <t_uemura@macome.co.jp> To: freebsd-acpi@FreeBSD.org, freebsd-drivers@FreeBSD.org Subject: Request for adding ACPI WDAT watchdog driver Message-ID: <20221119094526.4598F9B8774@towerrecords.dyndns.org>
next in thread | raw e-mail | index | archive | help
--------_63789D9600000000DB11_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sorry for multiposting, as I can't guess where is the right list to post. I've written a driver for ACPI WDAT (Watchdog Action Table) based watchdog timer and I want this driver to be included in the future FreeBSD versions. Please someone tell me how should I do. Simply said, WDAT is an abstraction for the real WDT hardware. For instance, to add a newer generation WDT to ichwd(4), one must know the detailed hardware registers, etc.. Actually I tried to add Apollo Lake Celeron and Coffee Lake Xeon support to ichwd(4) and I couldn't. With WDAT, the necessary IO port accesses to operate the WDT are comprehensively described in it and no hardware knowledge is required. With this driver, I have successfully managed to use the WDT on Advantech ARK-1124C, Dell R210 and Dell R240. * R210 is also supported by ichwd(4). Others are not supported yet. The unfortunate thing is that not all systems have WDAT defined. Thanks in advance for your attention. -- Tetsuya Uemura <t_uemura@macome.co.jp> --------_63789D9600000000DB11_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="patch-share__man__man4__wdatwd.4" Content-Disposition: attachment; filename="patch-share__man__man4__wdatwd.4" Content-Transfer-Encoding: base64 LS0tIC9kZXYvbnVsbAkyMDIyLTExLTE5IDE3OjI2OjA1LjQzNTg5MzAwMCArMDkwMAorKysgc2hh cmUvbWFuL21hbjQvd2RhdHdkLjQJMjAyMi0xMS0xOSAxNjo0MjoxMi45OTIzNDQwMDAgKzA5MDAK QEAgLTAsMCArMSw5OCBAQAorLlwiLQorLlwiIENvcHlyaWdodCAoYykgMjAyMiBUZXRzdXlhIFVl bXVyYSA8dF91ZW11cmFAbWFjb21lLmNvLmpwPgorLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisu XCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwi ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisuXCIgQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisuXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKy5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorLlwiIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMCisuXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKy5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKy5cIiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisu XCIgU1VDSCBEQU1BR0UuCisuXCIKKy5EZCBOb3ZlbWJlciAxOCwgMjAyMgorLkR0IFdEQVRXRCA0 CisuT3MKKy5TaCBOQU1FCisuTm0gd2RhdHdkCisuTmQgZGV2aWNlIGRyaXZlciBmb3IgdGhlIEFD UEkgV0RBVCBiYXNlZCB3YXRjaGRvZyBpbnRlcnJ1cHQgdGltZXIKKy5TaCBTWU5PUFNJUworVG8g Y29tcGlsZSB0aGlzIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsCitwbGFjZSB0aGUgZm9sbG93aW5n IGxpbmUgaW4geW91cgora2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZToKKy5CZCAtcmFnZ2VkIC1v ZmZzZXQgaW5kZW50CisuQ2QgImRldmljZSB3ZGF0d2QiCisuRWQKKy5QcAorQWx0ZXJuYXRpdmVs eSwgdG8gbG9hZCB0aGUgZHJpdmVyIGFzIGEKK21vZHVsZSBhdCBib290IHRpbWUsIHBsYWNlIHRo ZSBmb2xsb3dpbmcgbGluZSBpbgorLlhyIGxvYWRlci5jb25mIDUgOgorLkJkIC1saXRlcmFsIC1v ZmZzZXQgaW5kZW50Cit3ZGF0d2RfbG9hZD0iWUVTIgorLkVkCisuU2ggREVTQ1JJUFRJT04KK1Ro ZQorLk5tCitkcml2ZXIgcHJvdmlkZXMKKy5YciB3YXRjaGRvZyA0CitzdXBwb3J0IGZvciB0aGUg d2F0Y2hkb2cgaW50ZXJydXB0IHRpbWVyIGRlc2NyaWJlZCBieSBBQ1BJIFdEQVQgKFdhdGNoZG9n CitBY3Rpb24gVGFibGUpIGZvdW5kIG9uIHNvbWUgQUNQSSBpbXBsZW1lbnRhdGlvbnMuCisuUHAK K1NpbmNlIFdEQVQgaXRzZWxmIGlzIGFuIGFic3RyYWN0aW9uIGZvciB0aGUgcmVhbCBoYXJkd2Fy ZSBzdWNoIGFzIElDSCBXRFQsCitXREFUIGRvZXNuJ3QgcmVxdWlyZSB0aGUga25vd2xlZGdlIGFi b3V0IHRoZSBoYXJkd2FyZSBhdCBhbGwuIFRodXMsCisuTm0KK2ZvciBleGFtcGxlIG1heSBzdXBw b3J0IHRoZSBuZXdlciBnZW5lcmF0aW9uIGhhcmR3YXJlcyB0aGF0CisuWHIgaWNod2QgNAorZHJp dmVyIGlzIHlldCB0byBzdXBwb3J0LgorLlNoIFNZU0NUTCBWQVJJQUJMRVMKK1RoZSBmb2xsb3dp bmcgcmVhZC1vbmx5CisuWHIgc3lzY3RsIDgKK3ZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlOgorLkJs IC10YWcgLXdpZHRoIGluZGVudAorLkl0IFZhIGRldi53ZGF0LiVkLmNhbl9zZXRfdGltZW91dAor MCBpZiBXREFUIGRvZXNuJ3QgYWxsb3cgdXNlcnMgdG8gc2V0IHRoZSBjdXN0b20gdGltZW91dCwg b3IgYW55IHBvc2l0aXZlCitpbnRlZ2VyIGlmIGFsbG93ZWQuIElmIDAsIHRoZSB3YXRjaGRvZyB3 aWxsIGZpcmUgYWZ0ZXIgaXRzIEJJT1MgZGVmYXVsdCB0aW1lb3V0CitwZXJpb2QuCisuSXQgVmEg ZGV2LndkYXQuJWQuZGVmYXVsdF90aW1lb3V0X21zCitJZiBXREFUIGRlc2NyaWJlcyB0aGUgYWN0 aW9uIHRvIGd1ZXNzIHRoZSBkZWZhdWx0IHRpbWVvdXQsIGl0IHdpbGwgYmUKK2NvbnZlcnRlZCB0 byBtaWxsaS1zZWMgb3JkZXIgYW5kIGlzIHNldCB0byB0aGlzIHZhcmlhYmxlLgorLkl0IFZhIGRl di53ZGF0LiVkLnJ1bm5pbmcKKzAgaWYgdGhlIHdhdGNoZG9nIGlzIGluIHN0b3BwZWQgc3RhdGUg b3IgMSBpbiBydW5uaW5nIHN0YXRlLgorLkl0IFZhIGRldi53ZGF0LiVkLnRpbWVvdXRfbXMKK0N1 cnJlbnRseSBjb25maWd1cmVkIHRpbWVvdXQgcGVyaW9kIGluIG1pbGxpLXNlYyBvcmRlci4KKy5F bAorLlNoIFNFRSBBTFNPCisuWHIgd2F0Y2hkb2cgNCAsCisuWHIgaWNod2QgNCAsCisuWHIgd2F0 Y2hkb2cgOCAsCisuWHIgd2F0Y2hkb2dkIDggLAorLlhyIHdhdGNoZG9nIDkKKy5ScworLiVUIEhh cmR3YXJlIFdhdGNoZG9nIFRpbWVycyBEZXNpZ24gU3BlY2lmaWNhdGlvbgorLiVSIFJlcXVpcmVt ZW50cyBmb3IgSGFyZHdhcmUgV2F0Y2hkb2cgVGltZXJzIFN1cHBvcnRlZCBieSBNaWNyb3NvZnQo UikgV2luZG93cyBWaXN0YShSKSBhbmQgTWljcm9zb2Z0IFdpbmRvd3MgU2VydmVyKFIpIDIwMDgg T3BlcmF0aW5nIFN5c3RlbXMKKy4lQSBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKy5SZQorLlNoIEhJ U1RPUlkKK1RoZQorLk5tCitkcml2ZXIgc3RpbGwgaW4tZGV2ZWxvcG1lbnQuCisuU2ggQVVUSE9S UworLkFuIC1ub3NwbGl0CitUaGUKKy5ObQorZHJpdmVyIHdhcyB3cml0dGVuIGJ5CisuQW4gVGV0 c3V5YSBVZW11cmEgQXEgTXQgdF91ZW11cmFAbWFjb21lLmNvLmpwCitvZiBNQUNPTUUsIENvcnBv cmF0aW9uLgo= --------_63789D9600000000DB11_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="patch-share__man__man4__Makefile" Content-Disposition: attachment; filename="patch-share__man__man4__Makefile" Content-Transfer-Encoding: base64 LS0tIHNoYXJlL21hbi9tYW40L01ha2VmaWxlLm9yaWcJMjAyMi0wNi0wNCAwNzo0MjoxOS4wMDAw MDAwMDAgKzA5MDAKKysrIHNoYXJlL21hbi9tYW40L01ha2VmaWxlCTIwMjItMTEtMTkgMTY6NDY6 MjUuMzA2MDU3MDAwICswOTAwCkBAIC01OTcsNiArNTk3LDcgQEAgTUFOPQlhYWMuNCBcCiAJdnRu ZXQuNCBcCiAJd2F0Y2hkb2cuNCBcCiAJJHtfd2J3ZC40fSBcCisJd2RhdHdkLjQgXAogCXdpdG5l c3MuNCBcCiAJd2xhbi40IFwKIAl3bGFuX2FjbC40IFwK --------_63789D9600000000DB11_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="patch-sys__modules__Makefile" Content-Disposition: attachment; filename="patch-sys__modules__Makefile" Content-Transfer-Encoding: base64 LS0tIHN5cy9tb2R1bGVzL01ha2VmaWxlLm9yaWcJMjAyMi0wNi0yNCAwNzo0Mjo0NC4wMDAwMDAw MDAgKzA5MDAKKysrIHN5cy9tb2R1bGVzL01ha2VmaWxlCTIwMjItMTEtMTEgMTQ6MjM6MzkuMTE4 MjYxMDAwICswOTAwCkBAIC0zOTcsNiArMzk3LDcgQEAgU1VCRElSPQlcCiAJdnIgXAogCXZ0ZSBc CiAJJHtfd2J3ZH0gXAorCXdkYXR3ZCBcCiAJd2xhbiBcCiAJd2xhbl9hY2wgXAogCXdsYW5fYW1y ciBcCg== --------_63789D9600000000DB11_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="patch-sys__modules__wdatwd__Makefile" Content-Disposition: attachment; filename="patch-sys__modules__wdatwd__Makefile" Content-Transfer-Encoding: base64 LS0tIC9kZXYvbnVsbAkyMDIyLTExLTE5IDE3OjI5OjUxLjY2NjIwODAwMCArMDkwMAorKysgc3lz L21vZHVsZXMvd2RhdHdkL01ha2VmaWxlCTIwMjItMTEtMTEgMTQ6MjM6MzkuMTEzNjU4MDAwICsw OTAwCkBAIC0wLDAgKzEsOSBAQAorIyAkRnJlZUJTRCQKKworLlBBVEg6ICR7U1JDVE9QfS9zeXMv ZGV2L3dkYXR3ZAorCitLTU9EPQl3ZGF0d2QKK1NSQ1M9CXdkYXR3ZC5jCitTUkNTKz0Jb3B0X2Fj cGkuaCBhY3BpX2lmLmggZGV2aWNlX2lmLmggYnVzX2lmLmgKKworLmluY2x1ZGUgPGJzZC5rbW9k Lm1rPgo= --------_63789D9600000000DB11_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="patch-sys__conf__files" Content-Disposition: attachment; filename="patch-sys__conf__files" Content-Transfer-Encoding: base64 LS0tIHN5cy9jb25mL2ZpbGVzLm9yaWcJMjAyMi0wNy0zMCAwNzo0MjoxNS4wMDAwMDAwMDAgKzA5 MDAKKysrIHN5cy9jb25mL2ZpbGVzCTIwMjItMTEtMTEgMTQ6MjM6MzkuMTE3NTc5MDAwICswOTAw CkBAIC0zNTI4LDYgKzM1MjgsNyBAQCBkZXYvdnQvdnRfZm9udC5jCQlvcHRpb25hbCB2dAogZGV2 L3Z0L3Z0X3N5c21vdXNlLmMJCW9wdGlvbmFsIHZ0CiBkZXYvdnRlL2lmX3Z0ZS5jCQlvcHRpb25h bCB2dGUgcGNpCiBkZXYvd2F0Y2hkb2cvd2F0Y2hkb2cuYwkJc3RhbmRhcmQKK2Rldi93ZGF0d2Qv d2RhdHdkLmMJCW9wdGlvbmFsIHdkYXR3ZAogZGV2L3dwaS9pZl93cGkuYwkJb3B0aW9uYWwgd3Bp IHBjaQogd3BpZncuYwkJCW9wdGlvbmFsIHdwaWZ3CQkJCQlcCiAJY29tcGlsZS13aXRoCSIke0FX S30gLWYgJFMvdG9vbHMvZndfc3R1Yi5hd2sgd3BpLmZ3OndwaWZ3OjE1MzIyOSAtbXdwaSAtYyR7 LlRBUkdFVH0iIFwK --------_63789D9600000000DB11_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="patch-sys__dev__wdatwd__wdatwd.c" Content-Disposition: attachment; filename="patch-sys__dev__wdatwd__wdatwd.c" Content-Transfer-Encoding: base64 LS0tIC9kZXYvbnVsbAkyMDIyLTExLTE5IDE3OjMxOjA4Ljg2Mzk2NTAwMCArMDkwMAorKysgc3lz L2Rldi93ZGF0d2Qvd2RhdHdkLmMJMjAyMi0xMS0xNyAxMzowNzowMi41ODY0MTcxNzggKzA5MDAK QEAgLTAsMCArMSw4MTAgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1GcmVlQlNECisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyIFRldHN1eWEgVWVtdXJh IDx0X3VlbXVyYUBtYWNvbWUuY28uanA+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEFDUEkgV0RBVCBiYXNlZCB3YXRj aGRvZyB0aW1lciBkcml2ZXIuIFRoZSBXREFUIHNwZWNpZmljYXRpb24gYGBIYXJkd2FyZQorICog V2F0Y2hkb2cgVGltZXJzIERlc2lnbiBTcGVjaWZpY2F0aW9uJycgd2FzIG1hZGUgcHVibGljIGJ5 IE1pY3Jvc29mdCBhbmQgY2FuCisgKiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9u LgorICogV1dXOiBodHRwczovL2Rvd25sb2FkLm1pY3Jvc29mdC5jb20vZG93bmxvYWQvYS9mLzcv YWY3Nzc3ZTUtN2RjZC00ODAwLThhMGEtYjE4MzM2NTY1ZjViL0hhcmR3YXJlV0RUU3BlYy5kb2MK KyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisK KyNpbmNsdWRlICJvcHRfYWNwaS5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVk ZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9jYWxs b3V0Lmg+CisjaW5jbHVkZSA8c3lzL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwu aD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2lu Y2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lz L2V2ZW50aGFuZGxlci5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMv d2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKwor I2luY2x1ZGUgPGNvbnRyaWIvZGV2L2FjcGljYS9pbmNsdWRlL2FjcGkuaD4KKyNpbmNsdWRlIDxj b250cmliL2Rldi9hY3BpY2EvaW5jbHVkZS9hY2NvbW1vbi5oPgorI2luY2x1ZGUgPGNvbnRyaWIv ZGV2L2FjcGljYS9pbmNsdWRlL2FjbG9jYWwuaD4KKyNpbmNsdWRlIDxjb250cmliL2Rldi9hY3Bp Y2EvaW5jbHVkZS9hY3RhYmxlcy5oPgorCisjaW5jbHVkZSA8ZGV2L2FjcGljYS9hY3BpdmFyLmg+ CisKK3N0YXRpYyBkZXZjbGFzc190IHdkYXR3ZF9kZXZjbGFzczsKKworLyogCisgKiBSZXNvdXJj ZSBlbnRyeS4gRXZlcnkgaW5zdHJ1Y3Rpb24gc3BlY2lmaWVzIHRoZSBjb3JyZXNwb25kaW5nIEFD UEkgR0FTIGJ1dAorICogbW9yZSB0aGFuIG9uZSBpbnN0cnVjdGlvbnMgYWNjZXNzIHRoZSBzYW1l IG9yIGFkamFjZW50IHJlZ2lzdGVyIHJlZ2lvbihzKQorICogc28gd2UgbmVlZCB0byBjYW5vbmlj YWxpemUvbWVyZ2UgYWxsIHRoZSBzcGVjaWZpZWQgR0FTcy4KKyAqIAorICogdHlwZSAgQUNQSSBy ZXNvdXJjZSB0eXBlIGFuZCBsYXRlciBTWVNfUkVTXyhJT1BPUlR8TUVNT1JZKS4KKyAqIHN0YXJ0 IFJlZ2lvbiBzdGFydCBhZGRyZXNzLgorICogZW5kICAgUmVnaW9uIGVuZCBhZGRyZXNzICsgMS4K KyAqIHJpZCAgIFJlc291cmNlIHJpZCBhc3NpZ25lZCB3aGVuIGFsbG9jYXRlZC4KKyAqIHJlcyAg IFJlc291cmNlIHdoZW4gYWxsb2NhdGVkLgorICogbGluayAgTmV4dC9wcmV2aW91cyByZXNvdXJj ZSBlbnRyeS4KKyAqLworc3RydWN0IHdkYXRfcmVzIHsKKwlpbnQJCQkgdHlwZTsKKwl1aW50NjRf dAkJIHN0YXJ0LCBlbmQ7CisJaW50CQkJIHJpZDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisJ VEFJTFFfRU5UUlkod2RhdF9yZXMpCSBsaW5rOworfTsKKworLyogCisgKiBJbnN0cnVjdGlvbiBl bnRyeS4gRXZlcnkgaW5zdHJ1Y3Rpb24gaXRzZWxmIGlzIGFjdHVhbGx5IGEgc2luZ2xlIHJlZ2lz dGVyCisgKiByZWFkIG9yIHdyaXRlIChhbmQgc3Vic2VxdWVudCBiaXQgb3BlcmF0aW9uKHMpKS4K KyAqIDAgb3IgbW9yZSBpbnN0cnVjdGlvbnMgYXJlIHRpZWQgdG8gZXZlcnkgd2F0Y2hkb2cgYWN0 aW9uIGFuZCBvbmNlIGFuIGFjdGlvbgorICogaXMga2lja2VkLCB0aGUgY29ycmVzcG9uZGluZyBl bnRyaWVzIGFyZSBvcGVyYXRlZCBzZXF1ZW5jaWFsbHkuCisgKiAKKyAqIGVudHJ5IFBlcm1hbmVu dCBjb3B5IG9mIEFDUElfV0RBVF9FTlRSWSBlbnRyeSAoc3ViLXRhYmxlKS4KKyAqIG5leHQgIE5l eHQgaW5zdHJ1Y3Rpb24gZW50cnkuCisgKi8KK3N0cnVjdCB3ZGF0X2luc3RyIHsKKwlBQ1BJX1dE QVRfRU5UUlkJCSBlbnRyeTsKKwlTVEFJTFFfRU5UUlkod2RhdF9pbnN0cikgbmV4dDsKK307CisK Ky8qIAorICogZGV2ICAgICAgICAgICAgIFdhdGNoZG9nIGRldmljZS4KKyAqIHdkYXQgICAgICAg ICAgICBBQ1BJIFdEQVQgdGFibGUsIGNhbiBiZSBhY2Nlc3NlZCB1bnRpbCBBY3BpUHV0VGFibGUo KS4KKyAqIHBlcmlvZCAgICAgICAgICBOdW1iZXIgb2Ygd2F0Y2hkb2cgdGlja3MgcGVyIG1pbGxp LXNlYy4KKyAqIG1heCAgICAgICAgICAgICBNYXguIHN1cHBvcnRlZCB3YXRjaGRvZyB0aWNrcyB0 byBiZSBzZXQuCisgKiBtaW4gICAgICAgICAgICAgTWluLiBzdXBwb3J0ZWQgd2F0Y2hkb2cgdGlj a3MgdG8gYmUgc2V0LgorICogZGVmYXVsdF90aW1lb3V0IEJJT1MgY29uZmlndXJlZCB3YXRjaGRv ZyB0aWNrcyB0byBmaXJlLgorICogdGltZW91dCAgICAgICAgIFVzZXIgc2V0IHdhdGNoZG9nIHRp bWVvdXQgaW4gbXMgb3IgMCBpZiBpc24ndCBjaGFuZ2VkLgorICogc3RvcF9pbl9zbGVlcCAgIDAg aWYgdGhpcyB3YXRjaGRvZyBrZWVwcyBjb3VudGluZyBkb3duIGR1cmluZyBzbGVlcC4KKyAqIHJ1 bm5pbmcgICAgICAgICAxIGlmIHRoaXMgd2F0Y2hkb2cgaXMgcnVubmluZyBvciAwIGlmIHN0b3Bw ZWQuCisgKiBldl90YWcgICAgICAgICAgVGFnIGZvciBFVkVOVEhBTkRMRVJfKigpLgorICogYWN0 aW9uICAgICAgICAgIEFycmF5IG9mIHdhdGNoZG9nIGluc3RydWN0aW9uIHNldHMsIGVhY2ggaW5k ZXhlZCBieSBhY3Rpb24uCisgKi8KK3N0cnVjdCB3ZGF0d2Rfc29mdGMgeworCWRldmljZV90CQkg ZGV2OworCUFDUElfVEFCTEVfV0RBVAkJKndkYXQ7CisJdW5zaWduZWQgaW50CQkgcGVyaW9kOwor CXVuc2lnbmVkIGludAkJIG1heDsKKwl1bnNpZ25lZCBpbnQJCSBtaW47CisJdWludDY0X3QJCSBk ZWZhdWx0X3RpbWVvdXQ7CisJdWludDY0X3QJCSB0aW1lb3V0OworCXVuc2lnbmVkIGludAkJIHN0 b3BfaW5fc2xlZXA7CisJdW5zaWduZWQgaW50CQkgcnVubmluZzsKKwlldmVudGhhbmRsZXJfdGFn CSBldl90YWc7CisJU1RBSUxRX0hFQUQoLCB3ZGF0X2luc3RyKSBhY3Rpb25bQUNQSV9XREFUX0FD VElPTl9SRVNFUlZFRF07CisJVEFJTFFfSEVBRChyZXNfaGVhZCwgd2RhdF9yZXMpIHJlczsKK307 CisKKyNkZWZpbmUgd2RhdHdkX3ZlcmJvc2VfcHJpbnRmKGRldiwgLi4uKSBcCisJZG8geyBcCisJ CWlmIChib290dmVyYm9zZSkgXAorCQkJZGV2aWNlX3ByaW50ZihkZXYsIF9fVkFfQVJHU19fKTsg XAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIHdkYXR3ZF9hY3BpX3N0YXR1cyhydykgeyBcCisJ CWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkge1wKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwg XAorCQkJICAgICJhY3Rpb246IDB4JTAyeCwgJXMoKSByZXR1cm5lZDogJWRcbiIsIFwKKwkJCSAg ICBhY3Rpb24sIChydyksIHN0YXR1cyk7IFwKKwkJCXJldHVybiAoRU5YSU8pOyBcCisJCX07IFwK Kwl9CisKKy8qIAorICogRG8gcmVxdWVzdGVkIGFjdGlvbi4KKyAqLworc3RhdGljIGludAord2Rh dHdkX2FjdGlvbihzdHJ1Y3Qgd2RhdHdkX3NvZnRjICpzYywgdW5zaWduZWQgaW50IGFjdGlvbiwg dWludDY0X3QgdmFsLCB1aW50NjRfdCAqcmV0KQoreworCXN0cnVjdCB3ZGF0X2luc3RyCSp3ZGF0 OworCisJaWYgKFNUQUlMUV9FTVBUWSgmc2MtPmFjdGlvblthY3Rpb25dKSkgeworCQl3ZGF0d2Rf dmVyYm9zZV9wcmludGYoc2MtPmRldiwgCisJCSAgICAiYWN0aW9uIG5vdCBzdXBwb3J0ZWQ6IDB4 JTAyeFxuIiwgYWN0aW9uKTsKKwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKKwl9CisKKwlTVEFJTFFf Rk9SRUFDSCh3ZGF0LCAmc2MtPmFjdGlvblthY3Rpb25dLCBuZXh0KSB7CisJCUFDUElfU1RBVFVT CQkgc3RhdHVzOworCQlBQ1BJX0dFTkVSSUNfQUREUkVTUwkqZ2FzID0gJndkYXQtPmVudHJ5LlJl Z2lzdGVyUmVnaW9uOworCQl1aW50NjRfdAkJIHgsIHk7CisKKwkJc3dpdGNoICh3ZGF0LT5lbnRy eS5JbnN0cnVjdGlvbiAKKwkJICAgICYgfkFDUElfV0RBVF9QUkVTRVJWRV9SRUdJU1RFUikgewor CQkgICAgY2FzZSBBQ1BJX1dEQVRfUkVBRF9WQUxVRToKKwkJCXN0YXR1cyA9IEFjcGlSZWFkKCZ4 LCBnYXMpOworCQkJd2RhdHdkX2FjcGlfc3RhdHVzKCJBY3BpUmVhZCIpOworCQkJeCA+Pj0gZ2Fz LT5CaXRPZmZzZXQ7CisJCQl4ICY9IHdkYXQtPmVudHJ5Lk1hc2s7CisJCQkqcmV0ID0gKHggPT0g d2RhdC0+ZW50cnkuVmFsdWUpID8gMSA6IDA7CisJCQlicmVhazsKKwkJICAgIGNhc2UgQUNQSV9X REFUX1JFQURfQ09VTlRET1dOOgorCQkJc3RhdHVzID0gQWNwaVJlYWQoJngsIGdhcyk7CisJCQl3 ZGF0d2RfYWNwaV9zdGF0dXMoIkFjcGlSZWFkIik7CisJCQl4ID4+PSBnYXMtPkJpdE9mZnNldDsK KwkJCXggJj0gd2RhdC0+ZW50cnkuTWFzazsKKwkJCSpyZXQgPSB4OworCQkJYnJlYWs7CisJCSAg ICBjYXNlIEFDUElfV0RBVF9XUklURV9WQUxVRToKKwkJCXggPSB3ZGF0LT5lbnRyeS5WYWx1ZSAm IHdkYXQtPmVudHJ5Lk1hc2s7CisJCQl4IDw8PSBnYXMtPkJpdE9mZnNldDsKKwkJCWlmICh3ZGF0 LT5lbnRyeS5JbnN0cnVjdGlvbiAKKwkJCSAgICAmIEFDUElfV0RBVF9QUkVTRVJWRV9SRUdJU1RF UikgeworCQkJCXN0YXR1cyA9IEFjcGlSZWFkKCZ5LCBnYXMpOworCQkJCXdkYXR3ZF9hY3BpX3N0 YXR1cygiQWNwaVJlYWQiKTsKKwkJCQl5ICY9IH4od2RhdC0+ZW50cnkuTWFzayA8PCBnYXMtPkJp dE9mZnNldCk7CisJCQkJeCB8PSB5OworCQkJfQorCQkJc3RhdHVzID0gQWNwaVdyaXRlKHgsIGdh cyk7CisJCQl3ZGF0d2RfYWNwaV9zdGF0dXMoIkFjcGlXcml0ZSIpOworCQkJYnJlYWs7CisJCSAg ICBjYXNlIEFDUElfV0RBVF9XUklURV9DT1VOVERPV046CisJCQl4ID0gdmFsICYgd2RhdC0+ZW50 cnkuTWFzazsKKwkJCXggPDw9IGdhcy0+Qml0T2Zmc2V0OworCQkJaWYgKHdkYXQtPmVudHJ5Lklu c3RydWN0aW9uIAorCQkJICAgICYgQUNQSV9XREFUX1BSRVNFUlZFX1JFR0lTVEVSKSB7CisJCQkJ c3RhdHVzID0gQWNwaVJlYWQoJnksIGdhcyk7CisJCQkJd2RhdHdkX2FjcGlfc3RhdHVzKCJBY3Bp UmVhZCIpOworCQkJCXkgJj0gfih3ZGF0LT5lbnRyeS5NYXNrIDw8IGdhcy0+Qml0T2Zmc2V0KTsK KwkJCQl4IHw9IHk7CisJCQl9CisJCQlzdGF0dXMgPSBBY3BpV3JpdGUoeCwgZ2FzKTsKKwkJCXdk YXR3ZF9hY3BpX3N0YXR1cygiQWNwaVdyaXRlIik7CisJCQlicmVhazsKKwkJICAgIGRlZmF1bHQ6 CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9CisKKwlyZXR1cm4gKDApOworfQorCisvKiAK KyAqIFJlc2V0IHRoZSB3YXRjaGRvZyBjb3VudGRvd24uCisgKi8KK3N0YXRpYyBpbnQKK3dkYXR3 ZF9yZXNldF9jb3VudGRvd24oc3RydWN0IHdkYXR3ZF9zb2Z0YyAqc2MpCit7CisJcmV0dXJuIHdk YXR3ZF9hY3Rpb24oc2MsIEFDUElfV0RBVF9SRVNFVCwgMCwgTlVMTCk7Cit9CisKKy8qIAorICog U2V0IHRoZSB3YXRjaGRvZyBjb3VudGRvd24gdmFsdWUuIEluIFdEQVQgc3BlY2lmaWNhdGlvbiwg dGhpcyBpcyBvcHRpb25hbC4KKyAqLworc3RhdGljIGludAord2RhdHdkX3NldF9jb3VudGRvd24o c3RydWN0IHdkYXR3ZF9zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBjbWQpCit7CisJdWludDY0X3QJ CSB0aW1lb3V0OworCWludAkJCSBlOworCisJY21kICY9IFdEX0lOVEVSVkFMOworCXRpbWVvdXQg PSAoKHVpbnQ2NF90KSAxIDw8IGNtZCkgLyAxMDAwMDAwIC8gc2MtPnBlcmlvZDsKKwlpZiAodGlt ZW91dCA+IHNjLT5tYXgpIAorCQl0aW1lb3V0ID0gc2MtPm1heDsKKwllbHNlIGlmICh0aW1lb3V0 IDwgc2MtPm1pbikgCisJCXRpbWVvdXQgPSBzYy0+bWluOworCWlmICghIChlID0gd2RhdHdkX2Fj dGlvbigKKwkgICAgc2MsIEFDUElfV0RBVF9TRVRfQ09VTlRET1dOLCB0aW1lb3V0LCBOVUxMKSkp IHsKKwkJc2MtPnRpbWVvdXQgPSB0aW1lb3V0ICogc2MtPnBlcmlvZDsKKwl9CisKKwlyZXR1cm4g KGUpOworfQorCisvKiAKKyAqIEdldCB0aGUgd2F0Y2hkb2cgY3VycmVudCBjb3VudGRvd24gdmFs dWUuCisgKi8KK3N0YXRpYyBpbnQKK3dkYXR3ZF9nZXRfY3VycmVudF9jb3VudGRvd24oc3RydWN0 IHdkYXR3ZF9zb2Z0YyAqc2MsIHVpbnQ2NF90ICp0aW1lb3V0KQoreworCXJldHVybiB3ZGF0d2Rf YWN0aW9uKHNjLCBBQ1BJX1dEQVRfR0VUX0NVUlJFTlRfQ09VTlRET1dOLCAwLCB0aW1lb3V0KTsK K30KKworLyogCisgKiBHZXQgdGhlIHdhdGNoZG9nIGNvdW50ZG93biB2YWx1ZSB0aGUgd2F0Y2hk b2cgaXMgY29uZmlndXJlZCB0byBmaXJlLgorICovCitzdGF0aWMgaW50Cit3ZGF0d2RfZ2V0X2Nv dW50ZG93bihzdHJ1Y3Qgd2RhdHdkX3NvZnRjICpzYywgdWludDY0X3QgKnRpbWVvdXQpCit7CisJ cmV0dXJuIHdkYXR3ZF9hY3Rpb24oc2MsIEFDUElfV0RBVF9HRVRfQ09VTlRET1dOLCAwLCB0aW1l b3V0KTsKK30KKworLyogCisgKiBTZXQgdGhlIHdhdGNoZG9nIHRvIHJ1bm5pbmcgc3RhdGUuCisg Ki8KK3N0YXRpYyBpbnQKK3dkYXR3ZF9zZXRfcnVubmluZyhzdHJ1Y3Qgd2RhdHdkX3NvZnRjICpz YykKK3sKKwlpbnQJCQkgZSA9IDA7CisKKwllID0gd2RhdHdkX2FjdGlvbihzYywgQUNQSV9XREFU X1NFVF9SVU5OSU5HX1NUQVRFLCAwLCBOVUxMKTsKKwlzYy0+cnVubmluZyA9ICEgZTsKKwlyZXR1 cm4gKGUpOworfQorCisvKiAKKyAqIFNldCB0aGUgd2F0Y2hkb2cgdG8gc3RvcHBlZCBzdGF0ZS4K KyAqLworc3RhdGljIGludAord2RhdHdkX3NldF9zdG9wKHN0cnVjdCB3ZGF0d2Rfc29mdGMgKnNj KQoreworCWludAkJCSBlID0gMDsKKworCWUgPSB3ZGF0d2RfYWN0aW9uKHNjLCBBQ1BJX1dEQVRf U0VUX1NUT1BQRURfU1RBVEUsIDAsIE5VTEwpOworCXNjLT5ydW5uaW5nID0gISEgZTsKKwlyZXR1 cm4gKGUpOworfQorCisvKiAKKyAqIENsZWFyIHRoZSB3YXRjaGRvZydzIGJvb3Qgc3RhdHVzIGlm IHRoZSBjdXJyZW50IGJvb3Qgd2FzIGNhdXNlZCBieSB0aGUKKyAqIHdhdGNoZG9nIGZpcmluZy4K KyAqLworc3RhdGljIGludAord2RhdHdkX2NsZWFyX3N0YXR1cyhzdHJ1Y3Qgd2RhdHdkX3NvZnRj ICpzYykKK3sKKwlyZXR1cm4gd2RhdHdkX2FjdGlvbihzYywgQUNQSV9XREFUX1NFVF9TVEFUVVMs IDAsIE5VTEwpOworfQorCisvKiAKKyAqIFNldCB0aGUgd2F0Y2hkb2cgdG8gcmVib290IHdoZW4g aXQgaXMgZmlyZWQuCisgKi8KK3N0YXRpYyBpbnQKK3dkYXR3ZF9zZXRfcmVib290KHN0cnVjdCB3 ZGF0d2Rfc29mdGMgKnNjKQoreworCXJldHVybiB3ZGF0d2RfYWN0aW9uKHNjLCBBQ1BJX1dEQVRf U0VUX1JFQk9PVCwgMCwgTlVMTCk7Cit9CisKKy8qIAorICogV2F0Y2hkb2cgZXZlbnQgaGFuZGxl ci4KKyAqLworc3RhdGljIHZvaWQKK3dkYXR3ZF9ldmVudCh2b2lkICpwcml2YXRlLCB1bnNpZ25l ZCBpbnQgY21kLCBpbnQgKmVycm9yKQoreworCXN0cnVjdCB3ZGF0d2Rfc29mdGMJKnNjID0gcHJp dmF0ZTsKKwlpbnQJCQkgcnVuWzJdOworCXVpbnQ2NF90CQkgY3VyWzJdLCBjbnRbMl07CisKKwlp ZiAoYm9vdHZlcmJvc2UpIHsKKwkJcnVuWzBdID0gc2MtPnJ1bm5pbmc7CisJCXdkYXR3ZF9nZXRf Y291bnRkb3duKHNjLCBjbnQpOworCQl3ZGF0d2RfZ2V0X2N1cnJlbnRfY291bnRkb3duKHNjLCBj dXIpOworCX0KKworCWlmICgoY21kICYgV0RfSU5URVJWQUwpKSB7CisJCWlmIChzYy0+cnVubmlu ZykgCisJCQl3ZGF0d2RfcmVzZXRfY291bnRkb3duKHNjKTsKKwkJZWxzZSB7CisJCQkvLyBBQ1BJ X1dEQVRfU0VUX0NPVU5URE9XTiBtYXkgbm90IGJlIGltcGxlbWVudGVkLgorCQkJd2RhdHdkX3Nl dF9jb3VudGRvd24oc2MsIGNtZCk7CisJCQl3ZGF0d2Rfc2V0X3J1bm5pbmcoc2MpOworCQkJLyog SW4gdGhlIGZpcnN0IHdkYXR3ZF9ldmVudCgpIGNhbGwsIGl0IHNldHMgdGhlCisJCQkgKiB3YXRj aGRvZyB0aW1lb3V0IHRvIGEgY29uc2lkZXJhYmx5IGxhcmdlciB2YWx1ZSBzdWNoCisJCQkgKiBh cyAxMzcgc2VjLCB0aGVuIGtpY2tzIHRoZSB3YXRjaGRvZyB0byBzdGFydAorCQkJICogY291bnRp bmcgZG93bi4gV2VpcmRseSB0aG91Z2gsIG9uIGEgRGVsbCBSMjEwIEJJT1MKKwkJCSAqIDEuMTIu MCwgYSBzdXBwbGVtZW50YWwgcmVzZXQgYWN0aW9uIG11c3QgYmUKKwkJCSAqIHRyaWdnZXJlZCBm b3IgdGhlIG5ld2x5IHNldCB0aW1lb3V0IHZhbHVlIHRvIHRha2UKKwkJCSAqIGVmZmVjdC4gV2l0 aG91dCBpdCwgdGhlIHdhdGNoZG9nIGZpcmVzIDIuNCBzZWMgYWZ0ZXIKKwkJCSAqIHN0YXJ0aW5n LCB3aGVyZSAyLjQgc2VjIGlzIGl0cyBpbml0aWFsbHkgc2V0CisJCQkgKiB0aW1lb3V0LiBUaGlz IGZhaWx1cmUgc2NlbmFyaW8gaXMgc2VlbiBieSBmaXJzdAorCQkJICogc3RhcnRpbmcgd2F0Y2hk b2dkKDgpIHdpdGhvdXQgd2RhdHdkIHJlZ2lzdGVyZWQgdGhlbgorCQkJICoga2xkbG9hZCBpdC4g SW4gc3RlYWR5IHN0YXRlLCB3YXRjaGRvZ2QgcGF0cyB0aGUKKwkJCSAqIHdhdGNoZG9nIGV2ZXJ5 IDEwIG9yIHNvIHNlYyB3aGljaCBpcyBtdWNoIGxvbmdlcgorCQkJICogdGhhbiAyLjQgc2VjIHRp bWVvdXQuICovCisJCQl3ZGF0d2RfcmVzZXRfY291bnRkb3duKHNjKTsKKwkJfQorCX0gZWxzZSAK KwkJd2RhdHdkX3NldF9zdG9wKHNjKTsKKworCWlmIChib290dmVyYm9zZSkgeworCQlydW5bMV0g PSBzYy0+cnVubmluZzsKKwkJd2RhdHdkX2dldF9jb3VudGRvd24oc2MsIGNudCArIDEpOworCQl3 ZGF0d2RfZ2V0X2N1cnJlbnRfY291bnRkb3duKHNjLCBjdXIgKyAxKTsKKwkJd2RhdHdkX3ZlcmJv c2VfcHJpbnRmKHNjLT5kZXYsICJjbWQ6ICV1LCBzYy0+cnVubmluZzogIiAKKwkJICAgICIlZCAt PiAlZCwgY250OiAlbHUgLT4gJWx1LCBjdXI6ICVsdSAtPiAlbHVcbiIsIGNtZCwgCisJCSAgICBy dW5bMF0sIHJ1blsxXSwgY250WzBdLCBjbnRbMV0sIGN1clswXSwgY3VyWzFdKTsKKwl9CisKKwly ZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3dkYXRfc2V0X2FjdGlvbihzdHJ1Y3Qgd2RhdHdkX3Nv ZnRjICpzYywgdm9pZCAqYWRkciwgaW50IHJlbWFpbmluZykKK3sKKwlBQ1BJX1dEQVRfRU5UUlkJ CSplbnRyeSA9IGFkZHI7CisJc3RydWN0IHdkYXRfaW5zdHIJKndkYXQ7CisKKwlpZiAocmVtYWlu aW5nIDwgKGludCkgc2l6ZW9mKEFDUElfV0RBVF9FTlRSWSkpCisJCXJldHVybiAoLTEpOworCisJ Ly8gU2tpcCBhY3Rpb25zIGJleW9uZCBzcGVjaWZpY2F0aW9uLgorCWlmIChlbnRyeS0+QWN0aW9u IDwgQUNQSV9XREFUX0FDVElPTl9SRVNFUlZFRCkgeworCQl3ZGF0ID0gbWFsbG9jKHNpemVvZigq d2RhdCksIE1fREVWQlVGLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJCXdkYXQtPmVudHJ5ID0gKmVu dHJ5OworCQlTVEFJTFFfSU5TRVJUX1RBSUwoJnNjLT5hY3Rpb25bZW50cnktPkFjdGlvbl0sIHdk YXQsIG5leHQpOworCX0KKwlyZXR1cm4gc2l6ZW9mKEFDUElfV0RBVF9FTlRSWSk7Cit9CisKKy8q IAorICogVHJhbnNmb3JtIGV2ZXJ5IEFDUElfV0RBVF9FTlRSWSB0byB3ZGF0X2luc3RyIGJ5IGNh bGxpbmcgd2RhdF9zZXRfYWN0aW9uKCkuCisgKi8KK3N0YXRpYyB2b2lkCit3ZGF0X3BhcnNlX2Fj dGlvbl90YWJsZShzdHJ1Y3Qgd2RhdHdkX3NvZnRjICpzYykKK3sKKwlBQ1BJX1RBQkxFX1dEQVQJ CSp3ZGF0ID0gc2MtPndkYXQ7CisJY2hhcgkJCSpjcDsKKwlpbnQJCQkgcmVtYWluaW5nLCBjb25z dW1lZDsKKworCXJlbWFpbmluZyA9IHdkYXQtPkhlYWRlci5MZW5ndGggLSBzaXplb2YoQUNQSV9U QUJMRV9XREFUKTsKKwl3aGlsZSAocmVtYWluaW5nID4gMCkgeworCQljcCA9IChjaGFyICopd2Rh dCArIHdkYXQtPkhlYWRlci5MZW5ndGggLSByZW1haW5pbmc7CisJCWNvbnN1bWVkID0gd2RhdF9z ZXRfYWN0aW9uKHNjLCBjcCwgcmVtYWluaW5nKTsKKwkJaWYgKGNvbnN1bWVkIDwgMCkgCisJCQlk ZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJpbmNvbnNpc3RlbnQgV0RBVCB0YWJsZS5cbiIpOworCQlp ZiAoY29uc3VtZWQgPD0gMCkKKwkJCWJyZWFrOworCQllbHNlCisJCQlyZW1haW5pbmcgLT0gY29u c3VtZWQ7CisJfQorCisJcmV0dXJuOworfQorCisvKiAKKyAqIENvbXBhcmUgdGhlIGdpdmVuIEdB UyByciBhZ2FpbnN0IHRoZSByZWdpb24gc3RhcnQgYW5kIGVuZAorICogKGFjdHVhbGx5IGVuZCAr IDEpLiBPbiByZXR1cm4sIHR5cGUsIHN0YXJ0IGFuZCBlbmQgYXJlIHVwZGF0ZWQgYXMgcGVyIHJy LgorICogSWYgbm90IE5VTEwsIGFsc28gb3ZlcmxhcCBpcyB1cGRhdGVkIGRlcGVuZGluZyBvbiBo b3cgcnIgYW5kIHN0YXJ0LWVuZAorICogb3ZlcmxhcCBlYWNoIG90aGVyLgorICovCitzdGF0aWMg aW50Cit3ZGF0X2NvbXBhcmVfcmVnaW9uKEFDUElfR0VORVJJQ19BRERSRVNTICpyciwgaW50ICp0 eXBlLCB1aW50NjRfdCAqc3RhcnQsIHVpbnQ2NF90ICplbmQsIGludCAqb3ZlcmxhcCkKK3sKKwl1 aW50NjRfdAkJIHMsIGU7CisKKwlzID0gZSA9IHJyLT5BZGRyZXNzOworCXN3aXRjaCAocnItPkFj Y2Vzc1dpZHRoKSB7CisJICAgIGNhc2UgMToKKwkJZSArPSAxOworCQlicmVhazsKKwkgICAgY2Fz ZSAyOgorCQllICs9IDI7CisJCWJyZWFrOworCSAgICBjYXNlIDM6CisJCWUgKz0gNDsKKwkJYnJl YWs7CisJICAgIGNhc2UgNDoKKwkJZSArPSA4OworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJ cmV0dXJuIChFSU5WQUwpOworCX0KKworCS8qIGEpIHJyIGlzIGZ1bGx5IGNvdmVyZWQgYnkgc3Rh cnQtZW5kLgorCSAqIGIpIHJyIGZ1bGx5IGNvdmVycyBzdGFydC1lbmQuCisJICogYykgcnIgYW5k IHN0YXJ0LWVuZCBvdmVybGFwIHBhcnRpYWxseS4KKwkgKiBkKSByciBhbmQgc3RhcnQtZW5kIGhh dmUgbm8gb3ZlcmxhcC4KKwkgKiBlKSBib3RoIGhhdmUgZGlmZmVyZW50IHJlc291cmNlIHR5cGUu CisJICogZikgb3ZlcmxhcCBpcyBzZXQgdG8gTlVMTC4KKwkgKiBvdmVybGFwIGlzIGEgYml0LWZp ZWxkLiBiaXQgMSBpcyBmb3IgKGEpLCBiaXQgMiBhbmQgMyBpcyBmb3IgKGIpIGFuZAorCSAqIChj KSwgd2hlcmUgcnIgZXh0ZW5kcyBzdGFydCB0byBsb3dlciB0aGVuIGJpdCAyIGlzIHNldCwgYW5k IHRvIHVwcGVyCisJICogYml0IDMgaXMgc2V0LiAqLworCWlmIChvdmVybGFwKSAKKwkJKm92ZXJs YXAgPSAwOworCisJaWYgKCgqdHlwZSAhPSByci0+U3BhY2VJZCkgfHwgKG92ZXJsYXAgPT0gTlVM TCkJLy8gKGVmKQorCSAgICB8fCAocyA+ICplbmQpIHx8IChlIDwgKnN0YXJ0KSkge30JCS8vIChk KQorCWVsc2UgeworCQlpZiAoKHMgPj0gKnN0YXJ0KSAmJiAoZSA8PSAqZW5kKSkgCS8vIChhKQor CQkJKm92ZXJsYXAgPSAweDE7CisJCWlmIChzIDwgKnN0YXJ0KSAJCQkvLyAoYmMpCisJCQkqb3Zl cmxhcCA9IDB4MjsKKwkJaWYgKGUgPiAqZW5kKSAJCQkJLy8gKGJjKQorCQkJKm92ZXJsYXAgKz0g MHg0OworCX0KKworCSpzdGFydCA9IHM7CisJKmVuZCAgID0gZTsKKwkqdHlwZSAgPSByci0+U3Bh Y2VJZDsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIAorICogVHJ5IHRvIG1lcmdlIHRoZSBnaXZl biBHQVMgKGluIHdkYXQpIHdpdGggdGhlIGV4aXN0aW5nIHJlcyBpbiBxdWV1ZS4KKyAqLworc3Rh dGljIHZvaWQKK3dkYXRfbWVyZ2VfcmVzb3VyY2Uoc3RydWN0IHdkYXR3ZF9zb2Z0YyAqc2MsIHN0 cnVjdCB3ZGF0X2luc3RyICp3ZGF0KQoreworCXN0cnVjdCB3ZGF0X3JlcwkJKnJlcywgKnIyOwor CXVpbnQ2NF90CQkgcywgZTsKKwlpbnQJCQkgb3ZlcmxhcCwgdHlwZSwgZm91bmQgPSAwOworCisJ LyogVHJ5IHRvIG1lcmdlIHRoZSBnaXZlbiBHQVMgd2l0aCB0aGUgZXhpc3RpbmcgcmVzIGxpc3Qg YnkgZXh0ZW5kaW5nCisJICogb25lIGNlcnRhaW4gcmVzIHRvIGNvdmVyIHRoZSBHQVMgaWYgc3Vj aCByZXMgYW5kIEdBUyBvdmVybGFwIGVhY2gKKwkgKiBvdGhlci4gSWYgbm8gb3ZlcmxhcHBlZCBy ZXMgZm91bmQsIGluc2VydCBhIG5ldyByZXMgYXQgYXBwcm9wcmlhdGUKKwkgKiBwb3NpdGlvbi4g Ki8KKwlUQUlMUV9GT1JFQUNIKHJlcywgJnNjLT5yZXMsIGxpbmspIHsKKwkJdHlwZSA9IHJlcy0+ dHlwZTsKKwkJcyAgICA9IHJlcy0+c3RhcnQ7CisJCWUgICAgPSByZXMtPmVuZDsKKwkJd2RhdF9j b21wYXJlX3JlZ2lvbigmd2RhdC0+ZW50cnkuUmVnaXN0ZXJSZWdpb24sIAorCQkgICAgJnR5cGUs ICZzLCAmZSwgJm92ZXJsYXApOworCQkvLyBUcnkgbmV4dCByZXMgaWYgR0FTIGlzbid0IG1lcmdl YWJsZS4KKwkJaWYgKCh0eXBlICE9IHJlcy0+dHlwZSkgfHwgKCEgb3ZlcmxhcCkpIAorCQkJY29u dGludWU7CisKKwkJZm91bmQgPSAxOworCisJCS8vIFRoaXMgcmVzIGZ1bGx5IGNvdmVycyB0aGUg R0FTLgorCQlpZiAob3ZlcmxhcCA9PSAweDEpIAorCQkJYnJlYWs7CisKKwkJLy8gVGhpcyBHQVMg ZXh0ZW5kcyB0aGUgcmVzIHRvIGxvd2VyIGFkZHJlc3MgKHMgPCByZXMtPnN0YXJ0KS4KKwkJaWYg KChvdmVybGFwICYgMHgyKSkgeworCQkJd2hpbGUgKChyMiA9IFRBSUxRX1BSRVYocmVzLCByZXNf aGVhZCwgbGluaykpKSB7CisJCQkJaWYgKHR5cGUgIT0gcjItPnR5cGUpCisJCQkJCWNvbnRpbnVl OworCQkJCWVsc2UgaWYgKHMgPD0gcjItPmVuZCkgeworCQkJCQlzID0gcjItPnN0YXJ0OworCQkJ CQlUQUlMUV9SRU1PVkUoJnNjLT5yZXMsIHIyLCBsaW5rKTsKKwkJCQkJZnJlZShyMiwgTV9ERVZC VUYpOworCQkJCX0gZWxzZSAKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlyZXMtPnN0YXJ0ID0gczsK KwkJfQorCQkvLyBUaGlzIEdBUyBleHRlbmRzIHRoZSByZXMgdG8gdXBwZXIgYWRkcmVzcyAoZSA+ IHJlcy0+ZW5kKS4KKwkJaWYgKChvdmVybGFwICYgMHg0KSkgeworCQkJd2hpbGUgKChyMiA9IFRB SUxRX05FWFQocmVzLCBsaW5rKSkpIHsKKwkJCQlpZiAodHlwZSAhPSByMi0+dHlwZSkKKwkJCQkJ Y29udGludWU7CisJCQkJZWxzZSBpZiAoZSA+PSByMi0+c3RhcnQpIHsKKwkJCQkJZSA9IHIyLT5l bmQ7CisJCQkJCVRBSUxRX1JFTU9WRSgmc2MtPnJlcywgcjIsIGxpbmspOworCQkJCQlmcmVlKHIy LCBNX0RFVkJVRik7CisJCQkJfSBlbHNlIAorCQkJCQlicmVhazsKKwkJCX0KKwkJCXJlcy0+ZW5k ID0gZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvLyBObyBleHRlbmRhYmxlIHJlcyBhdCBhbGwu IE5vdyBhZGQgbmV3IHJlcyB0byB0aGUgcXVldWUuCisJaWYgKCEgZm91bmQpIHsKKwkJcmVzID0g bWFsbG9jKHNpemVvZigqcmVzKSwgTV9ERVZCVUYsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKwkJcmVz LT50eXBlICA9IHR5cGU7CisJCXJlcy0+c3RhcnQgPSBzOworCQlyZXMtPmVuZCAgID0gZTsKKwor CQlUQUlMUV9GT1JFQUNIKHIyLCAmc2MtPnJlcywgbGluaykgeworCQkJaWYgKHJlcy0+dHlwZSAh PSByMi0+dHlwZSkgCisJCQkJY29udGludWU7CisJCQlpZiAocmVzLT5zdGFydCA8IHIyLT5zdGFy dCkgeworCQkJCVRBSUxRX0lOU0VSVF9CRUZPUkUocjIsIHJlcywgbGluayk7CisJCQkJZm91bmQg PSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghIGZvdW5kKSAKKwkJCVRBSUxRX0lO U0VSVF9UQUlMKCZzYy0+cmVzLCByZXMsIGxpbmspOworCX0KK30KKworLyogCisgKiBSZWxlYXNl IHRoZSBhbHJlYWR5IGFsbG9jYXRlZCByZXNvdXJjZS4KKyAqLworc3RhdGljIHZvaWQKK3dkYXRf cmVsZWFzZV9yZXNvdXJjZShkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHdkYXR3ZF9zb2Z0Ywkq c2M7CisJc3RydWN0IHdkYXRfcmVzCQkqcmVzOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisKKwlUQUlMUV9GT1JFQUNIKHJlcywgJnNjLT5yZXMsIGxpbmspIAorCQlpZiAocmVzLT5y ZXMpIHsKKwkJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgcmVzLT50eXBlLCAKKwkJCSAgICBy ZXMtPnJpZCwgcmVzLT5yZXMpOworCQkJYnVzX2RlbGV0ZV9yZXNvdXJjZShkZXYsIHJlcy0+dHlw ZSwgcmVzLT5yaWQpOworCQkJcmVzLT5yZXMgPSBOVUxMOworCQl9Cit9CisKK3N0YXRpYyBpbnQK K3dkYXR3ZF9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJQUNQSV9UQUJMRV9XREFUCQkqd2RhdDsK KwlBQ1BJX1NUQVRVUwkJIHN0YXR1czsKKworCS8qIFdpdGhvdXQgV0RBVCB0YWJsZSB3ZSBoYXZl IG5vdGhpbmcgdG8gZG8uICovCisJc3RhdHVzID0gQWNwaUdldFRhYmxlKEFDUElfU0lHX1dEQVQs IDAsIChBQ1BJX1RBQkxFX0hFQURFUiAqKikgJndkYXQpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3Rh dHVzKSkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwkvKiBUcnkgdG8gYWxsb2NhdGUgb25lIHJlc291 cmNlIGFuZCBhc3N1bWUgd2RhdHdkIGlzIGFscmVhZHkgYXR0YWNoZWQKKwkgKiBpZiBpdCBmYWls cy4gKi8KKwl7CisJCWludAkJIHR5cGUsIHJpZCA9IDA7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVz OworCisJCWlmIChhY3BpX2J1c19hbGxvY19nYXMoZGV2LCAmdHlwZSwgJnJpZCwgCisJCSAgICAm KChBQ1BJX1dEQVRfRU5UUlkgKikod2RhdCArIDEpKS0+UmVnaXN0ZXJSZWdpb24sIAorCQkgICAg JnJlcywgMCkpIAorCQkJcmV0dXJuIChFTlhJTyk7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRl diwgdHlwZSwgcmlkLCByZXMpOworCQlidXNfZGVsZXRlX3Jlc291cmNlKGRldiwgdHlwZSwgcmlk KTsKKwl9CisKKwl3ZGF0d2RfdmVyYm9zZV9wcmludGYoZGV2LCAiRmxhZ3M6IDB4JXgsIFRpbWVy UGVyaW9kOiAlZCBtcy9jbnQsICIKKwkgICAgIk1heENvdW50OiAlZCBjbnQgKCVkIG1zKSwgTWlu Q291bnQ6ICVkIGNudCAoJWQgbXMpXG4iLCAKKwkgICAgKGludCkgd2RhdC0+RmxhZ3MsIChpbnQp IHdkYXQtPlRpbWVyUGVyaW9kLCAKKwkgICAgKGludCkgd2RhdC0+TWF4Q291bnQsIChpbnQpICh3 ZGF0LT5NYXhDb3VudCAqIHdkYXQtPlRpbWVyUGVyaW9kKSwgCisJICAgIChpbnQpIHdkYXQtPk1p bkNvdW50LCAoaW50KSAod2RhdC0+TWluQ291bnQgKiB3ZGF0LT5UaW1lclBlcmlvZCkpOworCS8v IFdEQVQgdGltZXIgY29uc2lzdGVuY3kuCisJaWYgKCh3ZGF0LT5UaW1lclBlcmlvZCA8IDEpIHx8 ICh3ZGF0LT5NaW5Db3VudCA+IHdkYXQtPk1heENvdW50KSkgeworCQlkZXZpY2VfcHJpbnRmKGRl diwgImluY29uc2lzdGVudCB0aW1lciB2YXJpYWJsZXMuXG4iKTsKKwkJcmV0dXJuIChFSU5WQUwp OworCX0KKworCUFjcGlQdXRUYWJsZSgoQUNQSV9UQUJMRV9IRUFERVIgKikgd2RhdCk7CisKKwlk ZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiQUNQSSBXREFUIFdhdGNoZG9nIEludGVyZmFjZSIpOworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50Cit3ZGF0d2RfYXR0YWNoKGRldmljZV90IGRldikKK3sK KwlzdHJ1Y3Qgd2RhdHdkX3NvZnRjCSpzYzsKKwlBQ1BJX1NUQVRVUwkJIHN0YXR1czsKKwlpbnQJ CQkgaSwgcmlkLCBlID0gMDsKKwlzdHJ1Y3Qgd2RhdF9pbnN0cgkqd2RhdDsKKwlzdHJ1Y3Qgc3lz Y3RsX2N0eF9saXN0CSpzY3R4OworCXN0cnVjdCBzeXNjdGxfb2lkCSpzb2lkOworCXN0cnVjdCB3 ZGF0X3JlcwkJKnJlczsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5kZXYg PSBkZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9XREFUX0FDVElPTl9SRVNFUlZFRDsgKytp KSAKKwkJU1RBSUxRX0lOSVQoJnNjLT5hY3Rpb25baV0pOworCisJLyogU2VhcmNoIGFuZCBwYXJz ZSBXREFUIHRhYmxlLiAqLworCXN0YXR1cyA9IEFjcGlHZXRUYWJsZShBQ1BJX1NJR19XREFULCAw LCAKKwkgICAgKEFDUElfVEFCTEVfSEVBREVSICoqKSZzYy0+d2RhdCk7CisJaWYgKEFDUElfRkFJ TFVSRShzdGF0dXMpKQorCQlyZXR1cm4gKEVOWElPKTsKKworCS8vIFBhcnNlIHdhdGNoZG9nIHZh cmlhYmxlcy4KKwlzYy0+cGVyaW9kID0gc2MtPndkYXQtPlRpbWVyUGVyaW9kOworCXNjLT5tYXgg PSBzYy0+d2RhdC0+TWF4Q291bnQ7CisJc2MtPm1pbiA9IHNjLT53ZGF0LT5NaW5Db3VudDsKKwlz Yy0+c3RvcF9pbl9zbGVlcCA9ICEhIChzYy0+d2RhdC0+RmxhZ3MgJiBBQ1BJX1dEQVRfU1RPUFBF RCk7CisJLy8gUGFyc2UgZGVmaW5lZCB3YXRjaGRvZyBhY3Rpb25zLgorCXdkYXRfcGFyc2VfYWN0 aW9uX3RhYmxlKHNjKTsKKworCUFjcGlQdXRUYWJsZSgoQUNQSV9UQUJMRV9IRUFERVIgKikgc2Mt PndkYXQpOworCisJLy8gVmVyYm9zZSBsb2dnaW5nLgorCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1dE QVRfQUNUSU9OX1JFU0VSVkVEOyArK2kpIAorCQlTVEFJTFFfRk9SRUFDSCh3ZGF0LCAmc2MtPmFj dGlvbltpXSwgbmV4dCkgeworCQkJd2RhdHdkX3ZlcmJvc2VfcHJpbnRmKGRldiwgImFjdGlvbjog MHglMDJ4LCAiIAorCQkJICAgICIlcyAlcyBhdCAweCVseCAoJWQgYml0KHMpLCBvZmZzZXQgJWQg Yml0KHMpKVxuIiwgCisJCQkgICAgaSwgCisJCQkgICAgd2RhdC0+ZW50cnkuUmVnaXN0ZXJSZWdp b24uU3BhY2VJZCAKKwkJCSAgICAgICAgPT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWSAK KwkJCSAgICAgICAgPyAibWVtIiAKKwkJCSAgICAgICAgOiB3ZGF0LT5lbnRyeS5SZWdpc3RlclJl Z2lvbi5TcGFjZUlkIAorCQkJICAgICAgICAgICAgPT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lP IAorCQkJICAgICAgICAgICAgPyAiaW8gIiAKKwkJCSAgICAgICAgICAgIDogIj8/PyIsCisJCQkg ICAgd2RhdC0+ZW50cnkuUmVnaXN0ZXJSZWdpb24uQWNjZXNzV2lkdGggPT0gMSAKKwkJCSAgICAg ICAgPyAiYnl0ZSAiIAorCQkJICAgICAgICA6IHdkYXQtPmVudHJ5LlJlZ2lzdGVyUmVnaW9uLkFj Y2Vzc1dpZHRoID09IDIgCisJCQkgICAgICAgICAgICA/ICJ3b3JkICIgCisJCQkgICAgICAgICAg ICA6IHdkYXQtPmVudHJ5LlJlZ2lzdGVyUmVnaW9uLkFjY2Vzc1dpZHRoID09IDMgCisJCQkgICAg ICAgICAgICAgICAgPyAiZHdvcmQiIAorCQkJICAgICAgICAgICAgICAgIDogd2RhdC0+ZW50cnku UmVnaXN0ZXJSZWdpb24uQWNjZXNzV2lkdGggPT0gNCAKKwkJCSAgICAgICAgICAgICAgICAgICAg PyAicXdvcmQiIAorCQkJICAgICAgICAgICAgICAgICAgICA6ICJ1bmRlZiIsCisJCQkgICAgd2Rh dC0+ZW50cnkuUmVnaXN0ZXJSZWdpb24uQWRkcmVzcywgCisJCQkgICAgd2RhdC0+ZW50cnkuUmVn aXN0ZXJSZWdpb24uQml0V2lkdGgsIAorCQkJICAgIHdkYXQtPmVudHJ5LlJlZ2lzdGVyUmVnaW9u LkJpdE9mZnNldCk7CisJfQorCisJLy8gQ2Fub25pY2FsaXplIHRoZSByZXF1ZXN0ZWQgcmVzb3Vy Y2VzLgorCVRBSUxRX0lOSVQoJnNjLT5yZXMpOworCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1dEQVRf QUNUSU9OX1JFU0VSVkVEOyArK2kpIAorCQlTVEFJTFFfRk9SRUFDSCh3ZGF0LCAmc2MtPmFjdGlv bltpXSwgbmV4dCkgeworCQkJaWYgKFRBSUxRX0VNUFRZKCZzYy0+cmVzKSkgeworCQkJCXJlcyA9 IG1hbGxvYyhzaXplb2YoKnJlcyksIAorCQkJCSAgICBNX0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pF Uk8pOworCQkJCXdkYXRfY29tcGFyZV9yZWdpb24oCisJCQkJICAgICZ3ZGF0LT5lbnRyeS5SZWdp c3RlclJlZ2lvbiwgCisJCQkJICAgICZyZXMtPnR5cGUsICZyZXMtPnN0YXJ0LCAmcmVzLT5lbmQs IE5VTEwpOworCQkJCVRBSUxRX0lOU0VSVF9IRUFEKCZzYy0+cmVzLCByZXMsIGxpbmspOworCQkJ fSBlbHNlIAorCQkJCXdkYXRfbWVyZ2VfcmVzb3VyY2Uoc2MsIHdkYXQpOworCQl9CisKKwkvLyBS ZXNvdXJjZSBhbGxvY2F0aW9uLgorCXJpZCA9IDA7CisJVEFJTFFfRk9SRUFDSChyZXMsICZzYy0+ cmVzLCBsaW5rKSB7CisJCXN3aXRjaCAocmVzLT50eXBlKSB7CisJCSAgICBjYXNlIEFDUElfQURS X1NQQUNFX1NZU1RFTV9NRU1PUlk6CisJCQlyZXMtPnR5cGUgPSBTWVNfUkVTX01FTU9SWTsKKwkJ CWJyZWFrOworCQkgICAgY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU86CisJCQlyZXMtPnR5 cGUgPSBTWVNfUkVTX0lPUE9SVDsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJCXJldHVy biAoRU9QTk9UU1VQUCk7CisJCX0KKworCQlyZXMtPnJpZCA9IHJpZCsrOworCQlidXNfc2V0X3Jl c291cmNlKGRldiwgcmVzLT50eXBlLCByZXMtPnJpZCwgCisJCSAgICByZXMtPnN0YXJ0LCByZXMt PmVuZCAtIHJlcy0+c3RhcnQpOworCQlyZXMtPnJlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnko CisJCSAgICBkZXYsIHJlcy0+dHlwZSwgJnJlcy0+cmlkLCBSRl9BQ1RJVkUpOworCQlpZiAocmVz LT5yZXMgPT0gTlVMTCkgeworCQkJYnVzX2RlbGV0ZV9yZXNvdXJjZShkZXYsIHJlcy0+dHlwZSwg cmVzLT5yaWQpOworCQkJZSA9IEVOT01FTTsKKwkJCWRldmljZV9wcmludGYoZGV2LCAiJXMgYXQg MHglbHggKCVsZCBieXRlKHMpKTogIiAKKwkJCSAgICAiYWxsb2MnIGZhaWxlZFxuIiwgCisJCQkg ICAgcmVzLT50eXBlID09IFNZU19SRVNfTUVNT1JZID8gIm1lbSIgOiAiaW8gIiwgCisJCQkgICAg cmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQor CQl3ZGF0d2RfdmVyYm9zZV9wcmludGYoZGV2LCAiJXMgYXQgMHglbHggKCVsZCBieXRlKHMpKTog IiAKKwkJICAgICJhbGxvYydlZFxuIiwKKwkJICAgIHJlcy0+dHlwZSA9PSBTWVNfUkVTX01FTU9S WSA/ICJtZW0iIDogImlvICIsIAorCQkgICAgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0 YXJ0KTsKKwl9CisKKwkvLyBJbml0aWFsaXplIHRoZSB3YXRjaGRvZyBoYXJkd2FyZS4KKwlpZiAo KChlID0gd2RhdHdkX3NldF9zdG9wKHNjKSkpIAorCSAgICB8fCAoKGUgPSB3ZGF0d2RfY2xlYXJf c3RhdHVzKHNjKSkgJiYgKGUgIT0gRU9QTk9UU1VQUCkpIAorCSAgICB8fCAoKGUgPSB3ZGF0d2Rf c2V0X3JlYm9vdChzYykpICYmIChlICE9IEVPUE5PVFNVUFApKSAKKwkgICAgfHwgKChlID0gd2Rh dHdkX2dldF9jb3VudGRvd24oc2MsICZzYy0+ZGVmYXVsdF90aW1lb3V0KSkgCisJICAgICAgICAm JiAoZSAhPSBFT1BOT1RTVVBQKSkpIAorCQlnb3RvIGZhaWw7CisJd2RhdHdkX3ZlcmJvc2VfcHJp bnRmKGRldiwgImluaXRpYWxpemVkLlxuIik7CisKKwkvLyBTb21lIHN5c2N0bHMuIE1vc3Qgb2Yg dGhlbSBzaG91bGQgZ28gdG8gd2RhdHdkX3ZlcmJvc2VfcHJpbnRmKCkuCisJc2N0eCA9IGRldmlj ZV9nZXRfc3lzY3RsX2N0eChkZXYpOworCXNvaWQgPSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRl dik7CisJU1lTQ1RMX0FERF9VNjQoc2N0eCwgU1lTQ1RMX0NISUxEUkVOKHNvaWQpLCBPSURfQVVU TywgCisJICAgICJ0aW1lb3V0X21zIiwgQ1RMRkxBR19SRCwgJnNjLT50aW1lb3V0LCAwLCAKKwkg ICAgIkN1cnJlbnQgd2F0Y2hkb2cgdGltZW91dCBpbiBtcyBpZiBjaGFuZ2VkLiIpOworCVNZU0NU TF9BRERfVUlOVChzY3R4LCBTWVNDVExfQ0hJTERSRU4oc29pZCksIE9JRF9BVVRPLCAKKwkgICAg InJ1bm5pbmciLCBDVExGTEFHX1JELCAmc2MtPnJ1bm5pbmcsIDAsIAorCSAgICAiV2F0Y2hkb2cg aXMgcnVubmluZyBub3cuIik7CisJU1lTQ1RMX0FERF9VNjQoc2N0eCwgU1lTQ1RMX0NISUxEUkVO KHNvaWQpLCBPSURfQVVUTywgCisJICAgICJkZWZhdWx0X3RpbWVvdXRfbXMiLCBDVExGTEFHX1JE LCBTWVNDVExfTlVMTF9VNjRfUFRSLCAKKwkgICAgc2MtPmRlZmF1bHRfdGltZW91dCAqIHNjLT5w ZXJpb2QsIAorCSAgICAiQklPUyBjb25maWd1cmVkIHdhdGNoZG9nIHRpbWVvdXQgaW4gbXMuIik7 CisJU1lTQ1RMX0FERF9VSU5UKHNjdHgsIFNZU0NUTF9DSElMRFJFTihzb2lkKSwgT0lEX0FVVE8s IAorCSAgICAiY2FuX3NldF90aW1lb3V0IiwgQ1RMRkxBR19SRCwgU1lTQ1RMX05VTExfVUlOVF9Q VFIsIAorCSAgICAhIFNUQUlMUV9FTVBUWSgmc2MtPmFjdGlvbltBQ1BJX1dEQVRfU0VUX0NPVU5U RE9XTl0pLCAKKwkgICAgIldhdGNoZG9nIHRpbWVvdXQgaXMgY29uZmlndXJhYmxlLiIpOworCisJ c2MtPmV2X3RhZyA9IEVWRU5USEFORExFUl9SRUdJU1RFUih3YXRjaGRvZ19saXN0LCB3ZGF0d2Rf ZXZlbnQsIHNjLCAwKTsKKwl3ZGF0d2RfdmVyYm9zZV9wcmludGYoZGV2LCAid2F0Y2hkb2cgcmVn aXN0ZXJlZC5cbiIpOworCisJcmV0dXJuICgwKTsKKworZmFpbDoKKwl3ZGF0X3JlbGVhc2VfcmVz b3VyY2UoZGV2KTsKKworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgaW50Cit3ZGF0d2Rf ZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qgd2RhdHdkX3NvZnRjCSpzYzsKKwlpbnQJ CQkgZTsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJRVZFTlRIQU5ETEVSX0RF UkVHSVNURVIod2F0Y2hkb2dfbGlzdCwgc2MtPmV2X3RhZyk7CisJZSA9IHdkYXR3ZF9zZXRfc3Rv cChzYyk7CisJd2RhdF9yZWxlYXNlX3Jlc291cmNlKGRldik7CisKKwlyZXR1cm4gKGUpOworfQor CitzdGF0aWMgaW50Cit3ZGF0d2Rfc3VzcGVuZChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHdk YXR3ZF9zb2Z0Ywkqc2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCXJldHVy biBzYy0+c3RvcF9pbl9zbGVlcCA/IDAgOiB3ZGF0d2Rfc2V0X3N0b3Aoc2MpOworfQorCitzdGF0 aWMgaW50Cit3ZGF0d2RfcmVzdW1lKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qgd2RhdHdkX3Nv ZnRjCSpzYzsKKwlpbnQJCQkgZSA9IDA7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK KworCWlmIChzYy0+c3RvcF9pbl9zbGVlcCkgCisJCShlID0gd2RhdHdkX3Jlc2V0X2NvdW50ZG93 bihzYykpIAorCQkgICAgfHwgKGUgPSB3ZGF0d2Rfc2V0X3J1bm5pbmcoc2MpKTsKKworCXJldHVy biAoZSk7Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3Qgd2RhdHdkX21ldGhvZHNbXSA9IHsK KwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgd2RhdHdk X3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgd2RhdHdkX2F0dGFjaCksCisJREVW TUVUSE9EKGRldmljZV9kZXRhY2gsIHdkYXR3ZF9kZXRhY2gpLAorCURFVk1FVEhPRChkZXZpY2Vf c2h1dGRvd24sIHdkYXR3ZF9kZXRhY2gpLAorCURFVk1FVEhPRChkZXZpY2Vfc3VzcGVuZCwgd2Rh dHdkX3N1c3BlbmQpLAorCURFVk1FVEhPRChkZXZpY2VfcmVzdW1lLCB3ZGF0d2RfcmVzdW1lKSwK KwlERVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJpdmVyX3QJd2RhdHdkX2RyaXZlciA9IHsK Kwkid2RhdHdkIiwKKwl3ZGF0d2RfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IHdkYXR3ZF9zb2Z0 YyksCit9OworCitEUklWRVJfTU9EVUxFKHdkYXR3ZCwgYWNwaSwgd2RhdHdkX2RyaXZlciwgd2Rh dHdkX2RldmNsYXNzLCAwLCAwKTsKK01PRFVMRV9ERVBFTkQod2RhdHdkLCBhY3BpLCAxLCAxLCAx KTsK --------_63789D9600000000DB11_MULTIPART_MIXED_--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20221119094526.4598F9B8774>