From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Laufer Date: Mon, 27 Mar 2000 10:19:17 +0000 Subject: [Patch] sb_card.c cleanup MIME-Version: 1 Content-Type: multipart/mixed; boundary="1199987260-738873169-954152357=:196" Message-Id: List-Id: To: linux-sound@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --1199987260-738873169-954152357=:196 Content-Type: TEXT/PLAIN; charset=US-ASCII Hey all, Alex told me to redo my previous sb_card.c cleanup patch after he got his into the kernel. So here is a new version, against 2.3.99pre3. Overview: After Alex's last patch the various sb_init_* functions were quite redundant, so I've written a generic sb_init function. I also reorganized sb_isapnp_list. I raided the ALSA drivers for all the ISAPnP codes for CTL and ESS chips and added them to the table (as I believe Alan suggested). Also returns the 2.3.99pre2 dev->active behavior, which was necessary to detect two of the same type of cards (Alex changed that in his last patch). I cut out some redundant code in probe_sb(), and cleaned up sb_isapnp_init(). Finally, I cleaned up the ISAPnP card detection procedure by dumping the audio device detection procedure and just using card detection (which should be okay since we have all the card ids). The overall result of this patch is a larger sb_isapnp_list with much less duplicated code - which I believe to be a good trade off. Have a look and please let me know what ya think, how it works for you, and/or if there is something I missed. Thanks again for your time, Paul Laufer --1199987260-738873169-954152357=:196 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="sb_card.99pre3.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="sb_card.99pre3.patch" LS0tIGxpbnV4LWRldmVsLXZpcmdpbi9kcml2ZXJzL3NvdW5kL3NiX2NhcmQu YwlTYXQgTWFyIDI1IDE1OjUyOjM0IDIwMDANCisrKyBsaW51eC9kcml2ZXJz L3NvdW5kL3NiX2NhcmQuYwlNb24gTWFyIDI3IDAyOjEzOjE0IDIwMDANCkBA IC0zMyw2ICszMyw5IEBADQogICogIFJlbW92ZWQgam95c3RpY2sgYW5kIHdh dmV0YWJsZSBjb2RlLCB0aGVyZSBhcmUgYmV0dGVyIHBsYWNlcyBmb3IgdGhl bS4NCiAgKiAgQ29kZSBjbGVhbnVwIHBsdXMgc29tZSBmaXhlcy4gDQogICoN CisgKiAyNy0wMy0yMDAwIE1ham9yIElTQVBuUCBjbGVhbnVwIGFuZCByZW9y Z2FuaXphdGlvbi4NCisgKiAgUGF1bCBMYXVmZXIgPHBlbGF1ZmVyQGNzdXBv bW9uYS5lZHU+DQorICoNCiAgKi8NCiANCiAjaW5jbHVkZSA8bGludXgvY29u ZmlnLmg+DQpAQCAtMTI2LDE0ICsxMjksNiBAQA0KIAkJfQ0KIAl9DQogI2Vu ZGlmDQotDQotCS8qIFRoaXMgaXMgdXNlbGVzcyBzaW5jZSBpcyBkb25lIGJ5 IHNiX2RzcF9kZXRlY3QgLSBhenVtbW8gKi8NCi0JDQotCWlmIChjaGVja19y ZWdpb24oaHdfY29uZmlnLT5pb19iYXNlLCAxNikpDQotCXsNCi0JCXByaW50 ayhLRVJOX0VSUiAic2JfY2FyZDogSS9PIHBvcnQgMHgleCBpcyBhbHJlYWR5 IGluIHVzZVxuXG4iLCBod19jb25maWctPmlvX2Jhc2UpOw0KLQkJcmV0dXJu IDA7DQotCX0NCiAJcmV0dXJuIHNiX2RzcF9kZXRlY3QoaHdfY29uZmlnLCAw LCAwKTsNCiB9DQogDQpAQCAtMTY3LDcgKzE2Miw2IEBADQogI2lmIGRlZmlu ZWQgQ09ORklHX0lTQVBOUCB8fCBkZWZpbmVkIENPTkZJR19JU0FQTlBfTU9E VUxFDQogc3RhdGljIGludCBpc2FwbnAJPSAxOw0KIHN0YXRpYyBpbnQgaXNh cG5wanVtcAk9IDA7DQotc3RhdGljIGludCBhY3RpdmF0ZWQJPSAxOw0KICNl bHNlDQogc3RhdGljIGludCBpc2FwbnAJPSAwOw0KICNlbmRpZg0KQEAgLTIw Myw2ICsxOTcsMTQxIEBADQogDQogI2lmIGRlZmluZWQgQ09ORklHX0lTQVBO UCB8fCBkZWZpbmVkIENPTkZJR19JU0FQTlBfTU9EVUxFDQogDQorLyogUGxl YXNlIGFkZCBuZXcgZW50cmllcyBhdCB0aGUgZW5kIG9mIHRoZSB0YWJsZSAq Lw0KK3N0YXRpYyBzdHJ1Y3Qge2NoYXIgKm5hbWU7IHVuc2lnbmVkIHNob3J0 IGNhcmRfdmVuZG9yLCBjYXJkX2RldmljZSwgYXVkaW9fdmVuZG9yLCBhdWRp b19mdW5jdGlvbiwgbXB1X3ZlbmRvciwgbXB1X2Z1bmN0aW9uO30NCitzYl9p c2FwbnBfbGlzdFtdIF9faW5pdGRhdGEgPSB7DQorCXsiU291bmQgQmxhc3Rl ciAxNiIsIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBO UF9ERVZJQ0UoMHgwMDI0KSwNCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywn TCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDMxKSwNCisJCTAsMCB9LA0KKwl7 IlNvdW5kIEJsYXN0ZXIgMTYiLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdU JywnTCcpLCBJU0FQTlBfREVWSUNFKDB4MDAyNiksIA0KKwkJSVNBUE5QX1ZF TkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAwMzEpLA0K KwkJMCwwfSwNCisJeyJTb3VuZCBCbGFzdGVyIDE2IiwgDQorCQlJU0FQTlBf VkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RFVklDRSgweDAwMjcpLCAN CisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJ T04oMHgwMDMxKSwNCisJCTAsMH0sDQorCXsiU291bmQgQmxhc3RlciAxNiIs IA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJ Q0UoMHgwMDI5KSwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwg SVNBUE5QX0ZVTkNUSU9OKDB4MDAzMSksDQorCQkwLDB9LA0KKwl7IlNvdW5k IEJsYXN0ZXIgMTYiLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcp LCBJU0FQTlBfREVWSUNFKDB4MDAyYiksIA0KKwkJSVNBUE5QX1ZFTkRPUign QycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAwMzEpLA0KKwkJMCww fSwNCisJeyJTb3VuZCBCbGFzdGVyIFZpYnJhMTZTIiwgDQorCQlJU0FQTlBf VkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RFVklDRSgweDAwNTEpLCAN CisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJ T04oMHgwMDAxKSwNCisJCTAsMH0sDQorCXsiU291bmQgQmxhc3RlciBWaWJy YTE2QyIsIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBO UF9ERVZJQ0UoMHgwMDcwKSwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcs J0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSksDQorCQkwLDB9LA0KKwl7 IlNvdW5kIEJsYXN0ZXIgVmlicmExNkNMIiwgDQorCQlJU0FQTlBfVkVORE9S KCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RFVklDRSgweDAwODApLCANCisJCUlT QVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgw MDQxKSwNCisJCTAsMH0sDQorCXsiU291bmQgQmxhc3RlciBWaWJyYTE2WCIs IA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJ Q0UoMHgwMEYwKSwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwg SVNBUE5QX0ZVTkNUSU9OKDB4MDA0MyksDQorCQkwLDB9LA0KKwl7IlNvdW5k IEJsYXN0ZXIgQVdFIDMyIiwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcs J0wnKSwgSVNBUE5QX0RFVklDRSgweDAwMzkpLCANCisJCUlTQVBOUF9WRU5E T1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDMxKSwNCisJ CTAsMH0sDQorCXsiU291bmQgQmxhc3RlciBBV0UgMzIiLA0KKwkJSVNBUE5Q X1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMDQyKSwg DQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNU SU9OKDB4MDAzMSksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgQVdF IDMyIiwNCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBf REVWSUNFKDB4MDA0MyksIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdM JyksIElTQVBOUF9GVU5DVElPTigweDAwMzEpLA0KKwkJMCwwfSwNCisJeyJT b3VuZCBCbGFzdGVyIEFXRSAzMiIsDQorCQlJU0FQTlBfVkVORE9SKCdDJywn VCcsJ0wnKSwgSVNBUE5QX0RFVklDRSgweDAwNDQpLA0KKwkJSVNBUE5QX1ZF TkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAwMzEpLA0K KwkJMCwwfSwNCisJeyJTb3VuZCBCbGFzdGVyIEFXRSAzMiIsDQorCQlJU0FQ TlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RFVklDRSgweDAwNDgp LCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVO Q1RJT04oMHgwMDMxKSwNCisJCTAsMH0sDQorCXsiU291bmQgQmxhc3RlciBB V0UgMzIiLA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBO UF9ERVZJQ0UoMHgwMDU0KSwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcs J0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAzMSksDQorCQkwLDB9LA0KKwl7 IlNvdW5kIEJsYXN0ZXIgQVdFIDMyIiwNCisJCUlTQVBOUF9WRU5ET1IoJ0Mn LCdUJywnTCcpLCBJU0FQTlBfREVWSUNFKDB4MDA5QyksIA0KKwkJSVNBUE5Q X1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAwNDEp LA0KKwkJMCwwfSwNCisJeyJTb3VuZCBCbGFzdGVyIEFXRSA2NCIsDQorCQlJ U0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RFVklDRSgweDAw OUQpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBf RlVOQ1RJT04oMHgwMDQyKSwNCisJCTAsMH0sDQorCXsiU291bmQgQmxhc3Rl ciBBV0UgNjQgR29sZCIsDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wn KSwgSVNBUE5QX0RFVklDRSgweDAwOUUpLCANCisJCUlTQVBOUF9WRU5ET1Io J0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDQ0KSwNCisJCTAs MH0sDQorCXsiU291bmQgQmxhc3RlciBBV0UgNjQiLA0KKwkJSVNBUE5QX1ZF TkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMEMxKSwgDQor CQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9O KDB4MDA0MiksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgQVdFIDY0 IiwNCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfREVW SUNFKDB4MDBDMyksIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyks IElTQVBOUF9GVU5DVElPTigweDAwNDUpLA0KKwkJMCwwfSwNCisJeyJTb3Vu ZCBCbGFzdGVyIEFXRSA2NCIsDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcs J0wnKSwgSVNBUE5QX0RFVklDRSgweDAwQzUpLCANCisJCUlTQVBOUF9WRU5E T1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDQ1KSwNCisJ CTAsMH0sDQorCXsiU291bmQgQmxhc3RlciBBV0UgNjQiLA0KKwkJSVNBUE5Q X1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMEM3KSwg DQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNU SU9OKDB4MDA0NSksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgQVdF IDY0IiwNCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBf REVWSUNFKDB4MDBFNCksIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdM JyksIElTQVBOUF9GVU5DVElPTigweDAwNDUpLA0KKwkJMCwwfSwNCisJeyJF U1MgMTg2OCIsDQorCQlJU0FQTlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNB UE5QX0RFVklDRSgweDE4NjgpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0UnLCdT JywnUycpLCBJU0FQTlBfRlVOQ1RJT04oMHgxODY4KSwNCisJCTAsMH0sDQor CXsiRVNTIDE4NjgiLA0KKwkJSVNBUE5QX1ZFTkRPUignRScsJ1MnLCdTJyks IElTQVBOUF9ERVZJQ0UoMHgxODY4KSwgDQorCQlJU0FQTlBfVkVORE9SKCdF JywnUycsJ1MnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4ODYxMSksDQorCQkwLDB9 LA0KKwl7IkVTUyAxODY5IFBuUCBBdWRpb0RyaXZlIiwgDQorCQlJU0FQTlBf VkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5QX0RFVklDRSgweDAwMDMpLCAN CisJCUlTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJU0FQTlBfRlVOQ1RJ T04oMHgxODY5KSwNCisJCTAsMH0sDQorCXsiRVNTIDE4NjkiLA0KKwkJSVNB UE5QX1ZFTkRPUignRScsJ1MnLCdTJyksIElTQVBOUF9ERVZJQ0UoMHgxODY5 KSwgDQorCQlJU0FQTlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5QX0ZV TkNUSU9OKDB4MTg2OSksDQorCQkwLDB9LA0KKwl7IkVTUyAxODc4IiwNCisJ CUlTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJU0FQTlBfREVWSUNFKDB4 MTg3OCksIA0KKwkJSVNBUE5QX1ZFTkRPUignRScsJ1MnLCdTJyksIElTQVBO UF9GVU5DVElPTigweDE4NzgpLA0KKwkJMCwwfSwNCisJeyJFU1MgMTg3OSIs DQorCQlJU0FQTlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5QX0RFVklD RSgweDE4NzkpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJ U0FQTlBfRlVOQ1RJT04oMHgxODc5KSwNCisJCTAsMH0sDQorCXsiQ01JIDgz MzAgU291bmRQUk8iLA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ00nLCdJJyks IElTQVBOUF9ERVZJQ0UoMHgwMDAxKSwgDQorCQlJU0FQTlBfVkVORE9SKCdA JywnWCcsJ0AnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSksDQorCQlJU0FQ TlBfVkVORE9SKCdAJywnSCcsJ0AnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAw MSl9LA0KKwl7IkRpYW1vbmQgRFQwMTk3SCIsDQorCQlJU0FQTlBfVkVORE9S KCdSJywnVycsJ0InKSwgSVNBUE5QX0RFVklDRSgweDE2ODgpLCANCisJCUlT QVBOUF9WRU5ET1IoJ0AnLCdAJywnQCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgw MDAxKSwNCisJCUlTQVBOUF9WRU5ET1IoJ0AnLCdYJywnQCcpLCBJU0FQTlBf RlVOQ1RJT04oMHgwMDAxKX0sDQorCXsiQUxTIDEwMCIsDQorCSAgICAgICAJ SVNBUE5QX1ZFTkRPUignQScsJ0wnLCdTJyksIElTQVBOUF9ERVZJQ0UoMHgw MDAxKSwgDQorCQlJU0FQTlBfVkVORE9SKCdAJywnQCcsJ0AnKSwgSVNBUE5Q X0ZVTkNUSU9OKDB4MDAwMSksDQorCQlJU0FQTlBfVkVORE9SKCdAJywnWCcs J0AnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSl9LA0KKwl7MH0NCit9Ow0K Kw0KKw0KIC8qIFRoYXQncyB1c2VmdWwuICovDQogDQogI2RlZmluZSBzaG93 X2Jhc2UoZGV2bmFtZSwgcmVzbmFtZSwgcmVzcHRyKSBwcmludGsoS0VSTl9J TkZPICJzYjogJXMgJXMgYmFzZSBsb2NhdGVkIGF0ICUjbHhcbiIsIGRldm5h bWUsIHJlc25hbWUsIChyZXNwdHIpLT5zdGFydCkNCkBAIC0yMTMsMTEgKzM0 MiwxMiBAQA0KIA0KIAkvKiBEZXZpY2UgYWxyZWFkeSBhY3RpdmU/IExldCdz IHVzZSBpdCAqLw0KIA0KKwkvKiBVbW0sIGNhbid0IGRvIHRoYXQgaWYgd2Ug d2FudCB0byB1c2UgdHdvIG9mIHRoZW0gc2luY2UNCisJICAgdGhlIGRyaXZl ciB3aWxsIGtlZXAgdHJpcHBpbmcgb3ZlciB0aGUgZmlyc3Qgb25lLiAqLw0K Kw0KIAlpZihkZXYtPmFjdGl2ZSkNCi0Jew0KLQkJYWN0aXZhdGVkID0gMDsN Ci0JCXJldHVybihkZXYpOw0KLQl9DQorCQlyZXR1cm4oTlVMTCk7DQorCQ0K IAlpZigoZXJyID0gZGV2LT5hY3RpdmF0ZShkZXYpKSA8IDApDQogCXsNCiAJ CXByaW50ayhLRVJOX0VSUiAic2I6ICVzICVzIGNvbmZpZyBmYWlsZWQgKG91 dCBvZiByZXNvdXJjZXM/KVslZF1cbiIsIGRldm5hbWUsIHJlc25hbWUsIGVy cik7DQpAQCAtMjI5LDI2MCArMzU5LDY2IEBADQogCXJldHVybihkZXYpOw0K IH0NCiANCi0vKiBDYXJkJ3Mgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZnVu Y3Rpb25zDQotICovDQotDQotc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpzYl9p bml0X2dlbmVyaWMoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9k ZXYgKmNhcmQsIHN0cnVjdCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZywgc3Ry dWN0IGFkZHJlc3NfaW5mbyAqbXB1X2NvbmZpZykNCitzdGF0aWMgc3RydWN0 IHBjaV9kZXYgKnNiX2luaXQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0 IGFkZHJlc3NfaW5mbyAqaHdfY29uZmlnLCBzdHJ1Y3QgYWRkcmVzc19pbmZv ICptcHVfY29uZmlnLCBpbnQgc2xvdCkNCiB7DQotCWlmKChzYl9kZXYgPSBp c2FwbnBfZmluZF9kZXYoYnVzLCBjYXJkLT52ZW5kb3IsIGNhcmQtPmRldmlj ZSwgTlVMTCkpKQ0KLQl7DQotCQlzYl9kZXYtPnByZXBhcmUoc2JfZGV2KTsN CisJLyogQ29uZmlndXJlIEF1ZGlvIGRldmljZSAqLw0KIA0KLQkJaWYoKHNi X2RldiA9IGFjdGl2YXRlX2RldigiU291bmRibGFzdGVyIiwgInNiIiwgc2Jf ZGV2KSkpDQotCQl7DQotCQkJaHdfY29uZmlnLT5pb19iYXNlIAk9IHNiX2Rl di0+cmVzb3VyY2VbMF0uc3RhcnQ7DQotCQkJaHdfY29uZmlnLT5pcnEgCQk9 IHNiX2Rldi0+aXJxX3Jlc291cmNlWzBdLnN0YXJ0Ow0KLQkJCWh3X2NvbmZp Zy0+ZG1hIAkJPSBzYl9kZXYtPmRtYV9yZXNvdXJjZVswXS5zdGFydDsNCi0J CQlod19jb25maWctPmRtYTIgCT0gc2JfZGV2LT5kbWFfcmVzb3VyY2VbMV0u c3RhcnQ7DQotCQkJbXB1X2NvbmZpZy0+aW9fYmFzZQk9IHNiX2Rldi0+cmVz b3VyY2VbMV0uc3RhcnQ7DQotCQl9DQotCX0NCi0JcmV0dXJuKHNiX2Rldik7 DQotfQ0KLQ0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqc2JfaW5pdF9lc3Mo c3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmNhcmQsIHN0 cnVjdCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZywgc3RydWN0IGFkZHJlc3Nf aW5mbyAqbXB1X2NvbmZpZykNCi17DQotCWlmKChzYl9kZXYgPSBpc2FwbnBf ZmluZF9kZXYoYnVzLCBjYXJkLT52ZW5kb3IsIGNhcmQtPmRldmljZSwgTlVM TCkpKQ0KKwlpZigoc2JfZGV2ID0gaXNhcG5wX2ZpbmRfZGV2KGJ1cywgc2Jf aXNhcG5wX2xpc3Rbc2xvdF0uYXVkaW9fdmVuZG9yLCBzYl9pc2FwbnBfbGlz dFtzbG90XS5hdWRpb19mdW5jdGlvbiwgTlVMTCkpKQ0KIAl7DQogCQlzYl9k ZXYtPnByZXBhcmUoc2JfZGV2KTsNCiANCi0JCWlmKChzYl9kZXYgPSBhY3Rp dmF0ZV9kZXYoIkVTUyIsICJzYiIsIHNiX2RldikpKQ0KLQkJew0KLQkJCWh3 X2NvbmZpZy0+aW9fYmFzZSAJPSBzYl9kZXYtPnJlc291cmNlWzBdLnN0YXJ0 Ow0KLQkJCWh3X2NvbmZpZy0+aXJxIAkJPSBzYl9kZXYtPmlycV9yZXNvdXJj ZVswXS5zdGFydDsNCi0JCQlod19jb25maWctPmRtYSAJCT0gc2JfZGV2LT5k bWFfcmVzb3VyY2VbMF0uc3RhcnQ7DQotCQkJaHdfY29uZmlnLT5kbWEyCQk9 IHNiX2Rldi0+ZG1hX3Jlc291cmNlWzFdLnN0YXJ0Ow0KLQkJCW1wdV9jb25m aWctPmlvX2Jhc2UJPSBzYl9kZXYtPnJlc291cmNlWzJdLnN0YXJ0Ow0KLQkJ fQ0KLQl9DQotCXJldHVybihzYl9kZXYpOw0KLX0NCi0NCi1zdGF0aWMgc3Ry dWN0IHBjaV9kZXYgKnNiX2luaXRfY21pKHN0cnVjdCBwY2lfYnVzICpidXMs IHN0cnVjdCBwY2lfZGV2ICpjYXJkLCBzdHJ1Y3QgYWRkcmVzc19pbmZvICpo d19jb25maWcsIHN0cnVjdCBhZGRyZXNzX2luZm8gKm1wdV9jb25maWcpDQot ew0KLQkvKiANCi0JICogIFRoZSBDTUk4MzMwL0MzRCBpcyBhIHZlcnkgJ3N0 dXBpZCcgY2hpcC4uLiB3aGVyZSBkaWQgdGhleSBnZXQgYWwgdGhvc2UgQEBA ID8NCi0JICogIEl0J3MgSVNBUG5QIHNlY3Rpb24gaXMgYmFkbHkgZGVzaWdu ZWQgYW5kIGhhcyBtYW55IGZsYXdzLCBpJ2xsIGRvIG15IGJlc3QNCi0JICog IHRvIHdvcmthcm91bmQgdGhlbS4gSSBzdHJvbmdseSBzdWdnZXN0IHlvdSB0 byBidXkgYSByZWFsIHNvdW5kY2FyZC4NCi0JICogIFRoZSBDTUk4MzMwIG9u IG15IG1vdGhlcmJvYXJkIGhhcyBhbHNvIHRoZSBiYWQgaGFiaXQgdG8gYWN0 aXZhdGUgDQotCSAqICB0aGUgcmVhciBjaGFubmVsIG9mIG15IGFtcGxpZmll ciBpbnN0ZWFkIG9mIHRoZSBmcm9udCBvbmUuDQotCSAqLw0KLQ0KLQkvKiAg QFhAMDAwMTpTb3VuZGJsYXN0ZXIuDQotCSAqLw0KLQ0KLQlpZigoc2JfZGV2 ID0gaXNhcG5wX2ZpbmRfZGV2KGJ1cywNCi0JCUlTQVBOUF9WRU5ET1IoJ0An LCdYJywnQCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDAxKSwgTlVMTCkpKQ0K LQl7DQotCQlzYl9kZXYtPnByZXBhcmUoc2JfZGV2KTsNCi0JCQ0KLQkJaWYo KHNiX2RldiA9IGFjdGl2YXRlX2RldigiQ01JODMzMCIsICJzYiIsIHNiX2Rl dikpKQ0KKwkJaWYoKHNiX2RldiA9IGFjdGl2YXRlX2RldihzYl9pc2FwbnBf bGlzdFtzbG90XS5uYW1lLCAic2IiLCBzYl9kZXYpKSkNCiAJCXsNCiAJCQlo d19jb25maWctPmlvX2Jhc2UgCT0gc2JfZGV2LT5yZXNvdXJjZVswXS5zdGFy dDsNCiAJCQlod19jb25maWctPmlycSAJCT0gc2JfZGV2LT5pcnFfcmVzb3Vy Y2VbMF0uc3RhcnQ7DQogCQkJaHdfY29uZmlnLT5kbWEgCQk9IHNiX2Rldi0+ ZG1hX3Jlc291cmNlWzBdLnN0YXJ0Ow0KIAkJCWh3X2NvbmZpZy0+ZG1hMiAJ PSBzYl9kZXYtPmRtYV9yZXNvdXJjZVsxXS5zdGFydDsNCisJCX0gZWxzZQ0K KwkJCXJldHVybihOVUxMKTsNCisJfSBlbHNlDQorCQlyZXR1cm4oTlVMTCk7 DQogDQotCQkJc2hvd19iYXNlKCJDTUk4MzMwIiwgInNiIiwgJnNiX2Rldi0+ cmVzb3VyY2VbMF0pOw0KLQkJfQ0KLQ0KLQkJaWYoIXNiX2RldikgcmV0dXJu KE5VTEwpOw0KLQl9DQotCWVsc2UNCi0JCXByaW50ayhLRVJOX0VSUiAic2I6 IENNSTgzMzAgcGFuaWM6IHNiIGJhc2Ugbm90IGZvdW5kXG4iKTsNCi0NCi0J LyogIEBIQDAwMDE6bXB1DQotCSAqLw0KLQ0KLQlpZigobXB1X2RldiA9IGlz YXBucF9maW5kX2RldihidXMsDQotCQlJU0FQTlBfVkVORE9SKCdAJywnSCcs J0AnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSksIE5VTEwpKSkNCi0Jew0K LQkJbXB1X2Rldi0+cHJlcGFyZShtcHVfZGV2KTsNCi0NCi0JCS8qICBUaGlz IGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgb24gdGhpcyByZXNvdXJjZS4gRG8g d2UgbmVlZCBpdCA/DQotCQkgKi8NCi0NCi0JCW1wdV9kZXYtPmlycV9yZXNv dXJjZVswXS5mbGFncyA9IDA7DQotDQotCQlpZigobXB1X2RldiA9IGFjdGl2 YXRlX2RldigiQ01JODMzMCIsICJtcHUiLCBtcHVfZGV2KSkpDQotCQl7DQot CQkJc2hvd19iYXNlKCJDTUk4MzMwIiwgIm1wdSIsICZtcHVfZGV2LT5yZXNv dXJjZVswXSk7DQotCQkJbXB1X2NvbmZpZy0+aW9fYmFzZSA9IG1wdV9kZXYt PnJlc291cmNlWzBdLnN0YXJ0Ow0KLQkJfQ0KLQl9DQotCWVsc2UNCi0JCXBy aW50ayhLRVJOX0VSUiAic2I6IENNSTgzMzAgcGFuaWM6IG1wdSBub3QgZm91 bmRcbiIpOw0KLQ0KLQlwcmludGsoS0VSTl9JTkZPICJzYjogQ01JODMzMCBt YWlsIHJlcG9ydHMgdG8gQWxlc3NhbmRybyBadW1tbyA8YXp1bW1vQGl0YS5m bGFzaG5ldC5pdD5cbiIpOw0KLQ0KLQlyZXR1cm4oc2JfZGV2KTsNCi19DQot DQotc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpzYl9pbml0X2RpYW1vbmQoc3Ry dWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmNhcmQsIHN0cnVj dCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZywgc3RydWN0IGFkZHJlc3NfaW5m byAqbXB1X2NvbmZpZykNCi17DQotCS8qIA0KLQkgKiBEaWFtb25kcyBEVDAx OTdIDQotCSAqIHZlcnkgc2ltaWxhciB0byB0aGUgQ01JODMzMCBhYm92ZQ0K LQkgKi8NCi0NCi0JLyogIEBAQDAwMDE6U291bmRibGFzdGVyLg0KLQkgKi8N Ci0NCi0JaWYoKHNiX2RldiA9IGlzYXBucF9maW5kX2RldihidXMsDQotCQkJ CUlTQVBOUF9WRU5ET1IoJ0AnLCdAJywnQCcpLCBJU0FQTlBfRlVOQ1RJT04o MHgwMDAxKSwgTlVMTCkpKQ0KLQl7DQotCQlzYl9kZXYtPnByZXBhcmUoc2Jf ZGV2KTsNCi0JCQ0KLQkJaWYoKHNiX2RldiA9IGFjdGl2YXRlX2RldigiRFQw MTk3SCIsICJzYiIsIHNiX2RldikpKQ0KLQkJew0KLQkJCWh3X2NvbmZpZy0+ aW9fYmFzZSAJPSBzYl9kZXYtPnJlc291cmNlWzBdLnN0YXJ0Ow0KLQkJCWh3 X2NvbmZpZy0+aXJxIAkJPSBzYl9kZXYtPmlycV9yZXNvdXJjZVswXS5zdGFy dDsNCi0JCQlod19jb25maWctPmRtYSAJCT0gc2JfZGV2LT5kbWFfcmVzb3Vy Y2VbMF0uc3RhcnQ7DQotCQkJaHdfY29uZmlnLT5kbWEyIAk9IC0xOw0KLQ0K LQkJCXNob3dfYmFzZSgiRFQwMTk3SCIsICJzYiIsICZzYl9kZXYtPnJlc291 cmNlWzBdKTsNCi0JCX0NCi0NCi0JCWlmKCFzYl9kZXYpIHJldHVybihOVUxM KTsNCi0JfQ0KLQllbHNlDQotCQlwcmludGsoS0VSTl9FUlIgInNiOiBEVDAx OTdIIHBhbmljOiBzYiBiYXNlIG5vdCBmb3VuZFxuIik7DQotDQotCS8qICBA WEAwMDAxOm1wdQ0KLQkgKi8NCi0NCi0JaWYoKG1wdV9kZXYgPSBpc2FwbnBf ZmluZF9kZXYoYnVzLA0KLQkJCQlJU0FQTlBfVkVORE9SKCdAJywnWCcsJ0An KSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSksIE5VTEwpKSkNCi0Jew0KLQkJ bXB1X2Rldi0+cHJlcGFyZShtcHVfZGV2KTsNCi0NCi0JCWlmKChtcHVfZGV2 ID0gYWN0aXZhdGVfZGV2KCJEVDAxOTdIIiwgIm1wdSIsIG1wdV9kZXYpKSkN Ci0JCXsNCi0JCQlzaG93X2Jhc2UoIkRUMDE5N0giLCAibXB1IiwgJm1wdV9k ZXYtPnJlc291cmNlWzBdKTsNCi0JCQltcHVfY29uZmlnLT5pb19iYXNlID0g bXB1X2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQ7DQotCQl9DQotCX0NCi0JZWxz ZQ0KLQkJcHJpbnRrKEtFUk5fRVJSICJzYjogRFQwMTk3SCBwYW5pYzogbXB1 IG5vdCBmb3VuZFxuIik7DQotDQotCXByaW50ayhLRVJOX0lORk8gInNiOiBE VDAxOTdIIG1haWwgcmVwb3J0cyB0byBUb3JzdGVuIFdlcm5lciA8dHdlcm5l ckBpbnRlcmNvbW0uZGU+XG4iKTsNCi0NCi0JcmV0dXJuKHNiX2Rldik7DQot fQ0KLQ0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqc2JfaW5pdF9hbHMoc3Ry dWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmNhcmQsIHN0cnVj dCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZywgc3RydWN0IGFkZHJlc3NfaW5m byAqbXB1X2NvbmZpZykNCi17DQotCS8qIA0KLQkgKiBBTFMxMDANCi0JICog dmVyeSBzaW1pbGFyIHRvIGJvdGggb25lcyBhYm92ZSBhYm92ZQ0KLQkgKi8N Ci0NCi0JLyogIEBAQDAwMDE6U291bmRibGFzdGVyLg0KLQkgKi8NCi0NCi0J aWYoKHNiX2RldiA9IGlzYXBucF9maW5kX2RldihidXMsDQotCQkJCUlTQVBO UF9WRU5ET1IoJ0AnLCdAJywnQCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDAx KSwgTlVMTCkpKQ0KLQl7DQotCQlzYl9kZXYtPnByZXBhcmUoc2JfZGV2KTsN Ci0JCQ0KLQkJaWYoKHNiX2RldiA9IGFjdGl2YXRlX2RldigiQUxTMTAwIiwg InNiIiwgc2JfZGV2KSkpDQotCQl7DQotCQkJaHdfY29uZmlnLT5pb19iYXNl IAk9IHNiX2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQ7DQotCQkJaHdfY29uZmln LT5pcnEgCQk9IHNiX2Rldi0+aXJxX3Jlc291cmNlWzBdLnN0YXJ0Ow0KLQkJ CWh3X2NvbmZpZy0+ZG1hIAkJPSBzYl9kZXYtPmRtYV9yZXNvdXJjZVsxXS5z dGFydDsNCi0JCQlod19jb25maWctPmRtYTIgCT0gc2JfZGV2LT5kbWFfcmVz b3VyY2VbMF0uc3RhcnQ7DQotDQotCQkJc2hvd19iYXNlKCJBTFMxMDAiLCAi c2IiLCAmc2JfZGV2LT5yZXNvdXJjZVswXSk7DQotCQl9DQotDQotCQlpZigh c2JfZGV2KSByZXR1cm4oTlVMTCk7DQorCS8qIENhcmRzIHdpdGggTVBVIHBh cnQgb2YgQXVkaW8gZGV2aWNlICovDQorCQ0KKwlpZighc2JfaXNhcG5wX2xp c3Rbc2xvdF0ubXB1X3ZlbmRvcikgew0KKwkJbXB1X2NvbmZpZy0+aW9fYmFz ZQk9IHNiX2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQ7DQorCQlyZXR1cm4oc2Jf ZGV2KTsNCiAJfQ0KLQllbHNlDQotCQlwcmludGsoS0VSTl9FUlIgInNiOiBB TFMxMDAgcGFuaWM6IHNiIGJhc2Ugbm90IGZvdW5kXG4iKTsNCiANCi0JLyog IEBYQDAwMDE6bXB1DQotCSAqLw0KKwkvKiBDYXJkcyB3aXRoIHNlcGFyYXRl IE1QVSBkZXZpY2UgKi8NCiANCi0JaWYoKG1wdV9kZXYgPSBpc2FwbnBfZmlu ZF9kZXYoYnVzLA0KLQkJCQlJU0FQTlBfVkVORE9SKCdAJywnWCcsJ0AnKSwg SVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSksIE5VTEwpKSkNCisJaWYoKG1wdV9k ZXYgPSBpc2FwbnBfZmluZF9kZXYoYnVzLCBzYl9pc2FwbnBfbGlzdFtzbG90 XS5tcHVfdmVuZG9yLCBzYl9pc2FwbnBfbGlzdFtzbG90XS5tcHVfZnVuY3Rp b24sIE5VTEwpKSkNCiAJew0KIAkJbXB1X2Rldi0+cHJlcGFyZShtcHVfZGV2 KTsNCiANCi0JCWlmKChtcHVfZGV2ID0gYWN0aXZhdGVfZGV2KCJBTFMxMDAi LCAibXB1IiwgbXB1X2RldikpKQ0KLQkJew0KLQkJCXNob3dfYmFzZSgiQUxT MTAwIiwgIm1wdSIsICZtcHVfZGV2LT5yZXNvdXJjZVswXSk7DQorCQlpZigo bXB1X2RldiA9IGFjdGl2YXRlX2RldihzYl9pc2FwbnBfbGlzdFtzbG90XS5u YW1lLCAibXB1IiwgbXB1X2RldikpKQ0KIAkJCW1wdV9jb25maWctPmlvX2Jh c2UgPSBtcHVfZGV2LT5yZXNvdXJjZVswXS5zdGFydDsNCi0JCX0NCiAJfQ0K IAllbHNlDQotCQlwcmludGsoS0VSTl9FUlIgInNiOiBBTFMxMDAgcGFuaWM6 IG1wdSBub3QgZm91bmRcbiIpOw0KLQ0KLQlwcmludGsoS0VSTl9JTkZPICJz YjogQUxTMTAwIG1haWwgcmVwb3J0cyB0byBUb3JzdGVuIFdlcm5lciA8dHdl cm5lckBpbnRlcmNvbW0uZGU+XG4iKTsNCi0NCisJCXByaW50ayhLRVJOX0VS UiAic2I6ICVzIHBhbmljOiBtcHUgbm90IGZvdW5kXG4iLCBzYl9pc2FwbnBf bGlzdFtzbG90XS5uYW1lKTsNCisJDQogCXJldHVybihzYl9kZXYpOw0KIH0N CiANCi0jZGVmaW5lIFNCRl9ERVYJMHgwMSAvKiBQbGVhc2Ugbm90aWNlIHRo YXQgY2FyZHMgd2l0aG91dCB0aGlzIGZsYWcgYXJlIG9uIHRoZSB0b3AgaW4g dGhlIGxpc3QgKi8NCi0NCi0NCi1zdGF0aWMgc3RydWN0IHsgdW5zaWduZWQg c2hvcnQgdmVuZG9yLCBmdW5jdGlvbiwgZmxhZ3M7IHN0cnVjdCBwY2lfZGV2 ICogKCppbml0ZnVuYykoc3RydWN0IHBjaV9idXMgKiwgc3RydWN0IHBjaV9k ZXYgKiwgc3RydWN0IGFkZHJlc3NfaW5mbyAqLCBzdHJ1Y3QgYWRkcmVzc19p bmZvICopOyBjaGFyICpuYW1lOyB9DQotc2JfaXNhcG5wX2xpc3RbXSBfX2lu aXRkYXRhID0gew0KLQl7SVNBUE5QX1ZFTkRPUignQycsJ00nLCdJJyksIElT QVBOUF9GVU5DVElPTigweDAwMDEpLCAwLAkmc2JfaW5pdF9jbWksCQkiQ01J IDgzMzAgU291bmRQUk8iIH0sDQotCXtJU0FQTlBfVkVORE9SKCdSJywnVycs J0InKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MTY4OCksIDAsCSZzYl9pbml0X2Rp YW1vbmQsCSJEaWFtb25kIERUMDE5N0giIH0sDQotCXtJU0FQTlBfVkVORE9S KCdBJywnTCcsJ1MnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSksIDAsCSZz Yl9pbml0X2FscywJCSJBTFMgMTAwIiB9LA0KLQl7SVNBUE5QX1ZFTkRPUign QycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAwMDEpLCBTQkZfREVW LAkmc2JfaW5pdF9nZW5lcmljLAkiU291bmQgQmxhc3RlciAxNiIgfSwNCi0J e0lTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04o MHgwMDMxKSwgU0JGX0RFViwJJnNiX2luaXRfZ2VuZXJpYywJIlNvdW5kIEJs YXN0ZXIgMTYiIH0sDQotCXtJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwg SVNBUE5QX0ZVTkNUSU9OKDB4MDA0MSksIFNCRl9ERVYsCSZzYl9pbml0X2dl bmVyaWMsCSJTb3VuZCBCbGFzdGVyIDE2IiB9LA0KLQl7SVNBUE5QX1ZFTkRP UignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAwNDIpLCBTQkZf REVWLAkmc2JfaW5pdF9nZW5lcmljLAkiU291bmQgQmxhc3RlciAxNiIgfSwN Ci0Je0lTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJ T04oMHgwMDQzKSwgU0JGX0RFViwJJnNiX2luaXRfZ2VuZXJpYywJIlNvdW5k IEJsYXN0ZXIgMTYiIH0sDQotCXtJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wn KSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDA0NSksIFNCRl9ERVYsCSZzYl9pbml0 X2dlbmVyaWMsCSJTb3VuZCBCbGFzdGVyIDE2IiB9LA0KLQl7SVNBUE5QX1ZF TkRPUignRScsJ1MnLCdTJyksIElTQVBOUF9GVU5DVElPTigweDA5NjgpLCBT QkZfREVWLAkmc2JfaW5pdF9lc3MsCQkiRVNTIDE2ODgiIH0sDQotCXtJU0FQ TlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MTg2 OCksIFNCRl9ERVYsCSZzYl9pbml0X2VzcywJCSJFU1MgMTg2OCIgfSwNCi0J e0lTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJU0FQTlBfRlVOQ1RJT04o MHg4NjExKSwgU0JGX0RFViwJJnNiX2luaXRfZXNzLAkJIkVTUyAxODY4IiB9 LA0KLQl7SVNBUE5QX1ZFTkRPUignRScsJ1MnLCdTJyksIElTQVBOUF9GVU5D VElPTigweDE4NjkpLCBTQkZfREVWLAkmc2JfaW5pdF9lc3MsCQkiRVNTIDE4 NjkiIH0sDQotCXtJU0FQTlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5Q X0ZVTkNUSU9OKDB4MTg3OCksIFNCRl9ERVYsCSZzYl9pbml0X2VzcywJCSJF U1MgMTg3OCIgfSwNCi0Je0lTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJ U0FQTlBfRlVOQ1RJT04oMHgxODc5KSwgU0JGX0RFViwJJnNiX2luaXRfZXNz LAkJIkVTUyAxODc5IiB9LA0KLQl7MH0NCi19Ow0KLQ0KIHN0YXRpYyBpbnQg X19pbml0IHNiX2lzYXBucF9pbml0KHN0cnVjdCBhZGRyZXNzX2luZm8gKmh3 X2NvbmZpZywgc3RydWN0IGFkZHJlc3NfaW5mbyAqbXB1X2NvbmZpZywgc3Ry dWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmNhcmQsIGludCBz bG90KQ0KIHsNCi0Jc3RydWN0IHBjaV9kZXYgKmlkZXYgPSBOVUxMOw0KKwlj aGFyICpidXNuYW1lID0gYnVzLT5uYW1lWzBdID8gYnVzLT5uYW1lIDogc2Jf aXNhcG5wX2xpc3Rbc2xvdF0ubmFtZTsNCiANCi0JLyogWW91IG1pc3NlZCB0 aGUgaW5pdCBmdW5jPyBUaGF0J3MgYmFkLiAqLw0KLQlpZihzYl9pc2FwbnBf bGlzdFtzbG90XS5pbml0ZnVuYykNCi0Jew0KLQkJY2hhciAqYnVzbmFtZSA9 IGJ1cy0+bmFtZVswXSA/IGJ1cy0+bmFtZSA6IHNiX2lzYXBucF9saXN0W3Ns b3RdLm5hbWU7DQorCXByaW50ayhLRVJOX0lORk8gInNiOiAlcyBkZXRlY3Rl ZFxuIiwgYnVzbmFtZSk7IA0KIA0KLQkJcHJpbnRrKEtFUk5fSU5GTyAic2I6 ICVzIGRldGVjdGVkXG4iLCBidXNuYW1lKTsgDQorCS8qIEluaXRpYWxpemUg dGhpcyBiYWJ5LiAqLw0KIA0KLQkJLyogSW5pdGlhbGl6ZSB0aGlzIGJhYnku ICovDQotDQotCQlpZigoaWRldiA9IHNiX2lzYXBucF9saXN0W3Nsb3RdLmlu aXRmdW5jKGJ1cywgY2FyZCwgaHdfY29uZmlnLCBtcHVfY29uZmlnKSkpDQot CQl7DQotCQkJLyogV2UgZ290IGl0LiAqLw0KLQ0KLQkJCXByaW50ayhLRVJO X05PVElDRSAic2I6IElTQVBuUCByZXBvcnRzICclcycgYXQgaS9vICUjeCwg aXJxICVkLCBkbWEgJWQsICVkXG4iLA0KLQkJCSAgICAgICBidXNuYW1lLA0K LQkJCSAgICAgICBod19jb25maWctPmlvX2Jhc2UsIGh3X2NvbmZpZy0+aXJx LCBod19jb25maWctPmRtYSwNCi0JCQkgICAgICAgaHdfY29uZmlnLT5kbWEy KTsNCi0JCQlyZXR1cm4gMTsNCi0JCX0NCi0JCWVsc2UNCi0JCQlwcmludGso S0VSTl9JTkZPICJzYjogRmFpbGVkIHRvIGluaXRpYWxpemUgJXNcbiIsIGJ1 c25hbWUpOw0KKwlpZihzYl9pbml0KGJ1cywgaHdfY29uZmlnLCBtcHVfY29u ZmlnLCBzbG90KSkgew0KKwkJLyogV2UgZ290IGl0LiAqLw0KKwkJDQorCQlw cmludGsoS0VSTl9OT1RJQ0UgInNiOiBJU0FQblAgcmVwb3J0cyAnJXMnIGF0 IGkvbyAlI3gsIGlycSAlZCwgZG1hICVkLCAlZFxuIiwNCisJCSAgICAgICBi dXNuYW1lLA0KKwkJICAgICAgIGh3X2NvbmZpZy0+aW9fYmFzZSwgaHdfY29u ZmlnLT5pcnEsIGh3X2NvbmZpZy0+ZG1hLA0KKwkJICAgICAgIGh3X2NvbmZp Zy0+ZG1hMik7DQorCQlyZXR1cm4gMTsNCiAJfQ0KIAllbHNlDQotCQlwcmlu dGsoS0VSTl9FUlIgInNiOiBCYWQgZW50cnkgaW4gc2JfY2FyZC5jIFBuUCB0 YWJsZVxuIik7DQorCQlwcmludGsoS0VSTl9JTkZPICJzYjogRmFpbGVkIHRv IGluaXRpYWxpemUgJXNcbiIsIGJ1c25hbWUpOw0KIA0KIAlyZXR1cm4gMDsN CiB9DQpAQCAtNDk4LDUwICs0MzQsMjQgQEANCiAJaW50IGk7DQogDQogCS8q IENvdW50IGVudHJpZXMgaW4gc2JfaXNhcG5wX2xpc3QgKi8NCi0JZm9yIChp ID0gMDsgc2JfaXNhcG5wX2xpc3RbaV0udmVuZG9yICE9IDA7IGkrKyk7DQor CWZvciAoaSA9IDA7IHNiX2lzYXBucF9saXN0W2ldLmNhcmRfdmVuZG9yICE9 IDA7IGkrKyk7DQogDQogCS8qIENoZWNrIGFuZCBhZGp1c3QgaXNhcG5wanVt cCAqLw0KLQlpZiggaXNhcG5wanVtcCA8IDAgfHwgaXNhcG5wanVtcCA+ICgg aSAtIDEgKSApDQotCXsNCisJaWYoIGlzYXBucGp1bXAgPCAwIHx8IGlzYXBu cGp1bXAgPiAoIGkgLSAxICkgKSB7DQogCQlwcmludGsoS0VSTl9FUlIgInNi OiBWYWxpZCByYW5nZSBmb3IgaXNhcG5wanVtcCBpcyAwLSVkLiBBZGp1c3Rl ZCB0byAwLlxuIiwgaS0xKTsNCiAJCWlzYXBucGp1bXAgPSAwOw0KIAl9DQog CQ0KLQlmb3IgKGkgPSBpc2FwbnBqdW1wOyBzYl9pc2FwbnBfbGlzdFtpXS52 ZW5kb3IgIT0gMDsgaSsrKSB7DQotDQotCQlpZighKHNiX2lzYXBucF9saXN0 W2ldLmZsYWdzICYgU0JGX0RFVikpDQotCQl7DQotCQkJc3RydWN0IHBjaV9i dXMgKmJ1cyA9IE5VTEw7DQorCWZvciAoaSA9IGlzYXBucGp1bXA7IHNiX2lz YXBucF9saXN0W2ldLmNhcmRfdmVuZG9yICE9IDA7IGkrKykgew0KKwkJc3Ry dWN0IHBjaV9idXMgKmJ1cyA9IE5VTEw7DQogCQkJCQ0KLQkJCXdoaWxlICgo YnVzID0gaXNhcG5wX2ZpbmRfY2FyZCgNCi0JCQkJCXNiX2lzYXBucF9saXN0 W2ldLnZlbmRvciwNCi0JCQkJCXNiX2lzYXBucF9saXN0W2ldLmZ1bmN0aW9u LA0KLQkJCQkJYnVzKSkpIHsNCisJCXdoaWxlICgoYnVzID0gaXNhcG5wX2Zp bmRfY2FyZCgNCisJCQkJc2JfaXNhcG5wX2xpc3RbaV0uY2FyZF92ZW5kb3Is DQorCQkJCXNiX2lzYXBucF9saXN0W2ldLmNhcmRfZGV2aWNlLA0KKwkJCQli dXMpKSkgew0KIAkNCi0JCQkJaWYoc2JfaXNhcG5wX2luaXQoaHdfY29uZmln LCBtcHVfY29uZmlnLCBidXMsIE5VTEwsIGkpKQ0KLQkJCQkJcmV0dXJuIDA7 DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCS8qICBObyBjYXJkcyBmb3VuZC4g SSdsbCB0cnkgbm93IHRvIHNlYXJjaCBpbnNpZGUgZXZlcnkgY2FyZCBmb3Ig YSBsb2dpY2FsIGRldmljZQ0KLQkgKiAgdGhhdCBtYXRjaGVzIGFueSBlbnRy eSBtYXJrZWQgd2l0aCBTQkZfREVWIGluIHRoZSB0YWJsZS4NCi0JICovDQot DQotCWZvciAoaSA9IGlzYXBucGp1bXA7IHNiX2lzYXBucF9saXN0W2ldLnZl bmRvciAhPSAwOyBpKyspIHsNCi0NCi0JCWlmKHNiX2lzYXBucF9saXN0W2ld LmZsYWdzICYgU0JGX0RFVikNCi0JCXsNCi0JCQlzdHJ1Y3QgcGNpX2RldiAq Y2FyZCA9IE5VTEw7DQotDQotCQkJd2hpbGUgKChjYXJkID0gaXNhcG5wX2Zp bmRfZGV2KE5VTEwsDQotCQkJCQlzYl9pc2FwbnBfbGlzdFtpXS52ZW5kb3Is DQotCQkJCQlzYl9pc2FwbnBfbGlzdFtpXS5mdW5jdGlvbiwNCi0JCQkJCWNh cmQpKSkgew0KLQ0KLQkJCQlpZihzYl9pc2FwbnBfaW5pdChod19jb25maWcs IG1wdV9jb25maWcsIGNhcmQtPmJ1cywgY2FyZCwgaSkpDQotCQkJCQlyZXR1 cm4gMDsNCi0JCQl9DQorCQkJaWYoc2JfaXNhcG5wX2luaXQoaHdfY29uZmln LCBtcHVfY29uZmlnLCBidXMsIE5VTEwsIGkpKQ0KKwkJCQlyZXR1cm4gMDsN CiAJCX0NCiAJfQ0KIA0KQEAgLTYwMSwxMSArNTExLDggQEANCiAJU09VTkRf TE9DS19FTkQ7DQogDQogI2lmIGRlZmluZWQgQ09ORklHX0lTQVBOUCB8fCBk ZWZpbmVkIENPTkZJR19JU0FQTlBfTU9EVUxFCQkJDQotCWlmKGFjdGl2YXRl ZCkNCi0Jew0KLQkJaWYoc2JfZGV2KSAJc2JfZGV2LT5kZWFjdGl2YXRlKHNi X2Rldik7DQotCQlpZihtcHVfZGV2KSAJbXB1X2Rldi0+ZGVhY3RpdmF0ZSht cHVfZGV2KTsNCi0JfQ0KKwlpZihzYl9kZXYpIAlzYl9kZXYtPmRlYWN0aXZh dGUoc2JfZGV2KTsNCisJaWYobXB1X2RldikgCW1wdV9kZXYtPmRlYWN0aXZh dGUobXB1X2Rldik7DQogI2VuZGlmDQogfQ0KIA0K --1199987260-738873169-954152357=:196--