From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King Subject: Re: [PATCH v2 1/9] drm: bridge/dw_hdmi-ahb-audio: add audio driver Date: Fri, 14 Aug 2015 15:04:25 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Takashi Iwai Cc: Fabio Estevam , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Jaroslav Kysela , linux-rockchip@lists.infradead.org, Mark Brown , Yakir Yang , Andy Yan , linux-arm-kernel@lists.infradead.org List-Id: alsa-devel@alsa-project.org QWRkIEFMU0EgYmFzZWQgSERNSSBBSEIgYXVkaW8gZHJpdmVyIGZvciBkd19oZG1pLiAgVGhlIG9u bHkgYnVmZmVyCmZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlIGlzIGl0cyBvd24gc3Bl Y2lhbCBJRUM5NTggYmFzZWQgZm9ybWF0LAp3aGljaCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGFu eSBBTFNBIGZvcm1hdC4gIFRvIGF2b2lkIGRvaW5nIHRvbyBtdWNoCmRhdGEgbWFuaXB1bGF0aW9u IHdpdGhpbiB0aGUgZHJpdmVyLCB3ZSBzdXBwb3J0IG9ubHkgQUxTQXMgSUVDOTU4IExFIGFuZAoy NC1iaXQgUENNIGZvcm1hdHMgZm9yIDIgdG8gNiBjaGFubmVscywgd2hpY2ggd2UgY29udmVydCB0 byBpdHMgaGFyZHdhcmUKZm9ybWF0LgoKQSBtb3JlIGRlc2lyYWJsZSBzb2x1dGlvbiB3b3VsZCBi ZSB0byBoYXZlIHRoaXMgY29udmVyc2lvbiBpbiB1c2Vyc3BhY2UsCmJ1dCBBTFNBIGRvZXMgbm90 IGFwcGVhciB0byBhbGxvdyBzdWNoIHRyYW5zZm9ybWF0aW9ucyBvdXRzaWRlIG9mCmxpYmFzb3Vu ZCBpdHNlbGYuCgpTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtLmxp bnV4Lm9yZy51az4KLS0tCnYyOiB1cGRhdGVkIHdpdGggVGFrYXNoaSBJd2FpJ3MgY29tbWVudHMu Li4gYW5kIHdpdGggYSBmaXhlZCBDYzogbGluZS4KCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tj b25maWcgICAgICAgICAgICAgfCAgMTAgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfaGRtaS1haGIt YXVkaW8uYyB8IDU3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9kd19oZG1pLWF1ZGlvLmggICAgIHwgIDEzICsKIGRyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvZHdfaGRtaS5jICAgICAgICAgICB8ICAyNCArKwogZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9kd19oZG1pLmggICAgICAgICAgIHwgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgNjMwIGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hk bWktYWhiLWF1ZGlvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2R3X2hkbWktYXVkaW8uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2Nv bmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwppbmRleCBhY2VmMzIyMzc3MmMu LjU2ZWQzNWZlMDczNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmln CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMyw2ICszLDE2IEBAIGNv bmZpZyBEUk1fRFdfSERNSQogCWRlcGVuZHMgb24gRFJNCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVS CiAKK2NvbmZpZyBEUk1fRFdfSERNSV9BSEJfQVVESU8KKwl0cmlzdGF0ZSAiU3lub3BzaXMgRGVz aWdud2FyZSBBSEIgQXVkaW8gaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gRFJNX0RXX0hETUkgJiYg U05ECisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX1BDTV9JRUM5NTgKKwloZWxwCisJICBT dXBwb3J0IHRoZSBBSEIgQXVkaW8gaW50ZXJmYWNlIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFN5bm9w c2lzCisJICBEZXNpZ253YXJlIEhETUkgYmxvY2suICBUaGlzIGlzIHVzZWQgaW4gY29uanVuY3Rp b24gd2l0aAorCSAgdGhlIGkuTVg2IEhETUkgZHJpdmVyLgorCiBjb25maWcgRFJNX1BUTjM0NjAK IAl0cmlzdGF0ZSAiUFROMzQ2MCBEUC9MVkRTIGJyaWRnZSIKIAlkZXBlbmRzIG9uIERSTQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUKaW5kZXggOGRmZWJkOTg0MzcwLi5lYjgwZGJiYjgzNjUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAtMywzICszLDQgQEAgY2NmbGFncy15IDo9IC1JaW5jbHVk ZS9kcm0KIG9iai0kKENPTkZJR19EUk1fUFM4NjIyKSArPSBwczg2MjIubwogb2JqLSQoQ09ORklH X0RSTV9QVE4zNDYwKSArPSBwdG4zNDYwLm8KIG9iai0kKENPTkZJR19EUk1fRFdfSERNSSkgKz0g ZHdfaGRtaS5vCitvYmotJChDT05GSUdfRFJNX0RXX0hETUlfQUhCX0FVRElPKSArPSBkd19oZG1p LWFoYi1hdWRpby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWkt YWhiLWF1ZGlvLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWktYWhiLWF1ZGlvLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZjM3OTMxMDAwOGEKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWktYWhiLWF1ZGlv LmMKQEAgLTAsMCArMSw1NzkgQEAKKy8qCisgKiBEZXNpZ25XYXJlIEhETUkgYXVkaW8gZHJpdmVy CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGFuZCB0ZXN0ZWQgYWdhaW5z dCB0aGUgRGVzaWdud2FyZSBIRE1JIFR4IGZvdW5kIGluIGlNWDYuCisgKi8KKyNpbmNsdWRlIDxs aW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUg PGRybS9icmlkZ2UvZHdfaGRtaS5oPgorCisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNp bmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1 ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9pZWM5NTguaD4KKworI2luY2x1 ZGUgImR3X2hkbWktYXVkaW8uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAiZHctaGRtaS1haGIt YXVkaW8iCisKKy8qIFByb3ZpZGUgc29tZSBiaXRzIHJhdGhlciB0aGFuIGJpdCBvZmZzZXRzICov CitlbnVtIHsKKwlIRE1JX0FIQl9ETUFfQ09ORjBfU1dfRklGT19SU1QgPSBCSVQoNyksCisJSERN SV9BSEJfRE1BX0NPTkYwX0VOX0hMT0NLID0gQklUKDMpLAorCUhETUlfQUhCX0RNQV9TVEFSVF9T VEFSVCA9IEJJVCgwKSwKKwlIRE1JX0FIQl9ETUFfU1RPUF9TVE9QID0gQklUKDApLAorCUhETUlf SUhfTVVURV9BSEJETUFBVURfU1RBVDBfRVJST1IgPSBCSVQoNSksCisJSERNSV9JSF9NVVRFX0FI QkRNQUFVRF9TVEFUMF9MT1NUID0gQklUKDQpLAorCUhETUlfSUhfTVVURV9BSEJETUFBVURfU1RB VDBfUkVUUlkgPSBCSVQoMyksCisJSERNSV9JSF9NVVRFX0FIQkRNQUFVRF9TVEFUMF9ET05FID0g QklUKDIpLAorCUhETUlfSUhfTVVURV9BSEJETUFBVURfU1RBVDBfQlVGRkZVTEwgPSBCSVQoMSks CisJSERNSV9JSF9NVVRFX0FIQkRNQUFVRF9TVEFUMF9CVUZGRU1QVFkgPSBCSVQoMCksCisJSERN SV9JSF9NVVRFX0FIQkRNQUFVRF9TVEFUMF9BTEwgPQorCQlIRE1JX0lIX01VVEVfQUhCRE1BQVVE X1NUQVQwX0VSUk9SIHwKKwkJSERNSV9JSF9NVVRFX0FIQkRNQUFVRF9TVEFUMF9MT1NUIHwKKwkJ SERNSV9JSF9NVVRFX0FIQkRNQUFVRF9TVEFUMF9SRVRSWSB8CisJCUhETUlfSUhfTVVURV9BSEJE TUFBVURfU1RBVDBfRE9ORSB8CisJCUhETUlfSUhfTVVURV9BSEJETUFBVURfU1RBVDBfQlVGRkZV TEwgfAorCQlIRE1JX0lIX01VVEVfQUhCRE1BQVVEX1NUQVQwX0JVRkZFTVBUWSwKKwlIRE1JX0lI X0FIQkRNQUFVRF9TVEFUMF9FUlJPUiA9IEJJVCg1KSwKKwlIRE1JX0lIX0FIQkRNQUFVRF9TVEFU MF9MT1NUID0gQklUKDQpLAorCUhETUlfSUhfQUhCRE1BQVVEX1NUQVQwX1JFVFJZID0gQklUKDMp LAorCUhETUlfSUhfQUhCRE1BQVVEX1NUQVQwX0RPTkUgPSBCSVQoMiksCisJSERNSV9JSF9BSEJE TUFBVURfU1RBVDBfQlVGRkZVTEwgPSBCSVQoMSksCisJSERNSV9JSF9BSEJETUFBVURfU1RBVDBf QlVGRkVNUFRZID0gQklUKDApLAorCUhETUlfSUhfQUhCRE1BQVVEX1NUQVQwX0FMTCA9CisJCUhE TUlfSUhfQUhCRE1BQVVEX1NUQVQwX0VSUk9SIHwKKwkJSERNSV9JSF9BSEJETUFBVURfU1RBVDBf TE9TVCB8CisJCUhETUlfSUhfQUhCRE1BQVVEX1NUQVQwX1JFVFJZIHwKKwkJSERNSV9JSF9BSEJE TUFBVURfU1RBVDBfRE9ORSB8CisJCUhETUlfSUhfQUhCRE1BQVVEX1NUQVQwX0JVRkZGVUxMIHwK KwkJSERNSV9JSF9BSEJETUFBVURfU1RBVDBfQlVGRkVNUFRZLAorCUhETUlfQUhCX0RNQV9DT05G MF9JTkNSMTYgPSAyIDw8IDEsCisJSERNSV9BSEJfRE1BX0NPTkYwX0lOQ1I4ID0gMSA8PCAxLAor CUhETUlfQUhCX0RNQV9DT05GMF9JTkNSNCA9IDAsCisJSERNSV9BSEJfRE1BX0NPTkYwX0JVUlNU X01PREUgPSBCSVQoMCksCisJSERNSV9BSEJfRE1BX01BU0tfRE9ORSA9IEJJVCg3KSwKKwlIRE1J X1JFVklTSU9OX0lEID0gMHgwMDAxLAorCUhETUlfSUhfQUhCRE1BQVVEX1NUQVQwID0gMHgwMTA5 LAorCUhETUlfSUhfTVVURV9BSEJETUFBVURfU1RBVDAgPSAweDAxODksCisJSERNSV9BSEJfRE1B X0NPTkYwID0gMHgzNjAwLAorCUhETUlfQUhCX0RNQV9TVEFSVCA9IDB4MzYwMSwKKwlIRE1JX0FI Ql9ETUFfU1RPUCA9IDB4MzYwMiwKKwlIRE1JX0FIQl9ETUFfVEhSU0xEID0gMHgzNjAzLAorCUhE TUlfQUhCX0RNQV9TVFJBRERSMCA9IDB4MzYwNCwKKwlIRE1JX0FIQl9ETUFfU1RQQUREUjAgPSAw eDM2MDgsCisJSERNSV9BSEJfRE1BX01BU0sgPSAweDM2MTQsCisJSERNSV9BSEJfRE1BX1BPTCA9 IDB4MzYxNSwKKwlIRE1JX0FIQl9ETUFfQ09ORjEgPSAweDM2MTYsCisJSERNSV9BSEJfRE1BX0JV RkZQT0wgPSAweDM2MWEsCit9OworCitzdHJ1Y3Qgc25kX2R3X2hkbWkgeworCXN0cnVjdCBzbmRf Y2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXNwaW5sb2NrX3QgbG9jazsKKwlz dHJ1Y3QgZHdfaGRtaV9hdWRpb19kYXRhIGRhdGE7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW07CisJdm9pZCAoKnJlZm9ybWF0KShzdHJ1Y3Qgc25kX2R3X2hkbWkgKiwgc2l6 ZV90LCBzaXplX3QpOworCXZvaWQgKmJ1Zl9zcmM7CisJdm9pZCAqYnVmX2RzdDsKKwlkbWFfYWRk cl90IGJ1Zl9hZGRyOworCXVuc2lnbmVkIGJ1Zl9vZmZzZXQ7CisJdW5zaWduZWQgYnVmX3Blcmlv ZDsKKwl1bnNpZ25lZCBidWZfc2l6ZTsKKwl1bnNpZ25lZCBjaGFubmVsczsKKwl1OCByZXZpc2lv bjsKKwl1OCBpZWNfb2Zmc2V0OworCXU4IGNzWzE5Ml1bOF07Cit9OworCitzdGF0aWMgdm9pZCBk d19oZG1pX3dyaXRlbCh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKnB0cikKK3sKKwl3cml0ZWJfcmVs YXhlZCh2YWwsIHB0cik7CisJd3JpdGViX3JlbGF4ZWQodmFsID4+IDgsIHB0ciArIDEpOworCXdy aXRlYl9yZWxheGVkKHZhbCA+PiAxNiwgcHRyICsgMik7CisJd3JpdGViX3JlbGF4ZWQodmFsID4+ IDI0LCBwdHIgKyAzKTsKK30KKworLyoKKyAqIENvbnZlcnQgdG8gaGFyZHdhcmUgZm9ybWF0OiBU aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb250YWlucyBJRUM5NTggc2FtcGxlcywKKyAqIHdpdGggdGhl IFBDVVYgYml0cyBpbiBiaXRzIDMxLi4yOCBhbmQgYXVkaW8gc2FtcGxlcyBpbiBiaXRzIDI3Li40 LiAgV2UKKyAqIG5lZWQgdGhlc2UgdG8gYmUgaW4gYml0cyAyNy4uMjQsIHdpdGggdGhlIElFQyBC IGJpdCBpbiBiaXQgMjgsIGFuZCBhdWRpbworICogc2FtcGxlcyBpbiAyMy4uMC4KKyAqCisgKiBE ZWZhdWx0IHByZWFtYmxlIGluIGJpdHMgMy4uMDogOCA9IGJsb2NrIHN0YXJ0LCA0ID0gZXZlbiAy ID0gb2RkCisgKgorICogSWRlYWxseSwgd2UgY291bGQgZG8gd2l0aCBoYXZpbmcgdGhlIGRhdGEg cHJvcGVybHkgZm9ybWF0dGVkIGluIHVzZXJzcGFjZS4KKyAqLworc3RhdGljIHZvaWQgZHdfaGRt aV9yZWZvcm1hdF9pZWM5NTgoc3RydWN0IHNuZF9kd19oZG1pICpkdywKKwlzaXplX3Qgb2Zmc2V0 LCBzaXplX3QgYnl0ZXMpCit7CisJdTMyICpzcmMgPSBkdy0+YnVmX3NyYyArIG9mZnNldDsKKwl1 MzIgKmRzdCA9IGR3LT5idWZfZHN0ICsgb2Zmc2V0OworCXUzMiAqZW5kID0gZHctPmJ1Zl9zcmMg KyBvZmZzZXQgKyBieXRlczsKKworCWRvIHsKKwkJdTMyIGIsIHNhbXBsZSA9ICpzcmMrKzsKKwor CQliID0gKHNhbXBsZSAmIDgpIDw8ICgyOCAtIDMpOworCisJCXNhbXBsZSA+Pj0gNDsKKworCQkq ZHN0KysgPSBzYW1wbGUgfCBiOworCX0gd2hpbGUgKHNyYyA8IGVuZCk7Cit9CisKK3N0YXRpYyB1 MzIgcGFyaXR5KHUzMiBzYW1wbGUpCit7CisJc2FtcGxlIF49IHNhbXBsZSA+PiAxNjsKKwlzYW1w bGUgXj0gc2FtcGxlID4+IDg7CisJc2FtcGxlIF49IHNhbXBsZSA+PiA0OworCXNhbXBsZSBePSBz YW1wbGUgPj4gMjsKKwlzYW1wbGUgXj0gc2FtcGxlID4+IDE7CisJcmV0dXJuIChzYW1wbGUgJiAx KSA8PCAyNzsKK30KKworc3RhdGljIHZvaWQgZHdfaGRtaV9yZWZvcm1hdF9zMjQoc3RydWN0IHNu ZF9kd19oZG1pICpkdywKKwlzaXplX3Qgb2Zmc2V0LCBzaXplX3QgYnl0ZXMpCit7CisJdTMyICpz cmMgPSBkdy0+YnVmX3NyYyArIG9mZnNldDsKKwl1MzIgKmRzdCA9IGR3LT5idWZfZHN0ICsgb2Zm c2V0OworCXUzMiAqZW5kID0gZHctPmJ1Zl9zcmMgKyBvZmZzZXQgKyBieXRlczsKKworCWRvIHsK KwkJdW5zaWduZWQgaTsKKwkJdTggKmNzOworCisJCWNzID0gZHctPmNzW2R3LT5pZWNfb2Zmc2V0 KytdOworCQlpZiAoZHctPmllY19vZmZzZXQgPj0gMTkyKQorCQkJZHctPmllY19vZmZzZXQgPSAw OworCisJCWkgPSBkdy0+Y2hhbm5lbHM7CisJCWRvIHsKKwkJCXUzMiBzYW1wbGUgPSAqc3JjKys7 CisKKwkJCXNhbXBsZSAmPSB+MHhmZjAwMDAwMDsKKwkJCXNhbXBsZSB8PSAqY3MrKyA8PCAyNDsK KwkJCXNhbXBsZSB8PSBwYXJpdHkoc2FtcGxlICYgfjB4ZjgwMDAwMDApOworCisJCQkqZHN0Kysg PSBzYW1wbGU7CisJCX0gd2hpbGUgKC0taSk7CisJfSB3aGlsZSAoc3JjIDwgZW5kKTsKK30KKwor c3RhdGljIHZvaWQgZHdfaGRtaV9jcmVhdGVfY3Moc3RydWN0IHNuZF9kd19oZG1pICpkdywKKwlz dHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCXU4IGNzWzRdOworCXVuc2lnbmVk IGNoLCBpLCBqOworCisJc25kX3BjbV9jcmVhdGVfaWVjOTU4X2NvbnN1bWVyKHJ1bnRpbWUsIGNz LCBzaXplb2YoY3MpKTsKKworCW1lbXNldChkdy0+Y3MsIDAsIHNpemVvZihkdy0+Y3MpKTsKKwor CWZvciAoY2ggPSAwOyBjaCA8IDg7IGNoKyspIHsKKwkJY3NbMl0gJj0gfklFQzk1OF9BRVMyX0NP Tl9DSEFOTkVMOworCQljc1syXSB8PSAoY2ggKyAxKSA8PCA0OworCisJCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGNzKTsgaSsrKSB7CisJCQl1bnNpZ25lZCBjID0gY3NbaV07CisKKwkJCWZv ciAoaiA9IDA7IGogPCA4OyBqKyssIGMgPj49IDEpCisJCQkJZHctPmNzW2kgKiA4ICsgal1bY2hd ID0gKGMgJiAxKSA8PCAyOworCQl9CisJfQorCWR3LT5jc1swXVswXSB8PSBCSVQoNCk7Cit9CisK K3N0YXRpYyB2b2lkIGR3X2hkbWlfc3RhcnRfZG1hKHN0cnVjdCBzbmRfZHdfaGRtaSAqZHcpCit7 CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZHctPmRhdGEuYmFzZTsKKwl1bnNpZ25lZCBvZmZzZXQg PSBkdy0+YnVmX29mZnNldDsKKwl1bnNpZ25lZCBwZXJpb2QgPSBkdy0+YnVmX3BlcmlvZDsKKwl1 MzIgc3RhcnQsIHN0b3A7CisKKwlkdy0+cmVmb3JtYXQoZHcsIG9mZnNldCwgcGVyaW9kKTsKKwor CS8qIENsZWFyIGFsbCBpcnFzIGJlZm9yZSBlbmFibGluZyBpcnFzIGFuZCBzdGFydGluZyBETUEg Ki8KKwl3cml0ZWJfcmVsYXhlZChIRE1JX0lIX0FIQkRNQUFVRF9TVEFUMF9BTEwsCisJCSAgICAg ICBiYXNlICsgSERNSV9JSF9BSEJETUFBVURfU1RBVDApOworCisJc3RhcnQgPSBkdy0+YnVmX2Fk ZHIgKyBvZmZzZXQ7CisJc3RvcCA9IHN0YXJ0ICsgcGVyaW9kIC0gMTsKKworCS8qIFNldHVwIHRo ZSBoYXJkd2FyZSBzdGFydC9zdG9wIGFkZHJlc3NlcyAqLworCWR3X2hkbWlfd3JpdGVsKHN0YXJ0 LCBiYXNlICsgSERNSV9BSEJfRE1BX1NUUkFERFIwKTsKKwlkd19oZG1pX3dyaXRlbChzdG9wLCBi YXNlICsgSERNSV9BSEJfRE1BX1NUUEFERFIwKTsKKworCXdyaXRlYl9yZWxheGVkKCh1OCl+SERN SV9BSEJfRE1BX01BU0tfRE9ORSwgYmFzZSArIEhETUlfQUhCX0RNQV9NQVNLKTsKKwl3cml0ZWIo SERNSV9BSEJfRE1BX1NUQVJUX1NUQVJULCBiYXNlICsgSERNSV9BSEJfRE1BX1NUQVJUKTsKKwor CW9mZnNldCArPSBwZXJpb2Q7CisJaWYgKG9mZnNldCA+PSBkdy0+YnVmX3NpemUpCisJCW9mZnNl dCA9IDA7CisJZHctPmJ1Zl9vZmZzZXQgPSBvZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3X2hk bWlfc3RvcF9kbWEoc3RydWN0IHNuZF9kd19oZG1pICpkdykKK3sKKwkvKiBEaXNhYmxlIGludGVy cnVwdHMgYmVmb3JlIGRpc2FibGluZyBETUEgKi8KKwl3cml0ZWJfcmVsYXhlZCh+MCwgZHctPmRh dGEuYmFzZSArIEhETUlfQUhCX0RNQV9NQVNLKTsKKwl3cml0ZWJfcmVsYXhlZChIRE1JX0FIQl9E TUFfU1RPUF9TVE9QLCBkdy0+ZGF0YS5iYXNlICsgSERNSV9BSEJfRE1BX1NUT1ApOworfQorCitz dGF0aWMgaXJxcmV0dXJuX3Qgc25kX2R3X2hkbWlfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7 CisJc3RydWN0IHNuZF9kd19oZG1pICpkdyA9IGRhdGE7CisJc3RydWN0IHNuZF9wY21fc3Vic3Ry ZWFtICpzdWJzdHJlYW07CisJdW5zaWduZWQgc3RhdDsKKworCXN0YXQgPSByZWFkYl9yZWxheGVk KGR3LT5kYXRhLmJhc2UgKyBIRE1JX0lIX0FIQkRNQUFVRF9TVEFUMCk7CisJaWYgKCFzdGF0KQor CQlyZXR1cm4gSVJRX05PTkU7CisKKwl3cml0ZWJfcmVsYXhlZChzdGF0LCBkdy0+ZGF0YS5iYXNl ICsgSERNSV9JSF9BSEJETUFBVURfU1RBVDApOworCisJc3Vic3RyZWFtID0gZHctPnN1YnN0cmVh bTsKKwlpZiAoc3RhdCAmIEhETUlfSUhfQUhCRE1BQVVEX1NUQVQwX0RPTkUgJiYgc3Vic3RyZWFt KSB7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKKworCQlzcGluX2xvY2so JmR3LT5sb2NrKTsKKwkJaWYgKGR3LT5zdWJzdHJlYW0pCisJCQlkd19oZG1pX3N0YXJ0X2RtYShk dyk7CisJCXNwaW5fdW5sb2NrKCZkdy0+bG9jayk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVE OworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgZHdfaGRtaV9odyA9IHsKKwku aW5mbyA9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxP Q0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9f TU1BUF9WQUxJRCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfSUVDOTU4X1NVQkZSQU1F X0xFIHwKKwkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUsCisJLnJhdGVzID0gU05EUlZfUENN X1JBVEVfMzIwMDAgfAorCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkgU05EUlZfUENNX1JB VEVfNDgwMDAgfAorCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkgU05EUlZfUENNX1JBVEVf OTYwMDAgfAorCQkgU05EUlZfUENNX1JBVEVfMTc2NDAwIHwKKwkJIFNORFJWX1BDTV9SQVRFXzE5 MjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVy X2J5dGVzX21heCA9IDY0ICogMTAyNCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDI1NiwKKwkucGVy aW9kX2J5dGVzX21heCA9IDgxOTIsCS8qIEVSUjAwNDMyMzogbXVzdCBsaW1pdCB0byA4ayAqLwor CS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMTYsCisJLmZpZm9fc2l6ZSA9IDAs Cit9OworCitzdGF0aWMgaW50IGR3X2hkbWlfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0g KnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3Ry ZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfZHdfaGRtaSAqZHcgPSBzdWJzdHJlYW0tPnByaXZh dGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBkdy0+ZGF0YS5iYXNlOworCWludCByZXQ7 CisKKwlydW50aW1lLT5odyA9IGR3X2hkbWlfaHc7CisKKwlyZXQgPSBzbmRfcGNtX2xpbWl0X2h3 X3JhdGVzKHJ1bnRpbWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g c25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFN X1BFUklPRFMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ2xlYXIgRklG TyAqLworCXdyaXRlYl9yZWxheGVkKEhETUlfQUhCX0RNQV9DT05GMF9TV19GSUZPX1JTVCwKKwkJ ICAgICAgIGJhc2UgKyBIRE1JX0FIQl9ETUFfQ09ORjApOworCisJLyogQ29uZmlndXJlIGludGVy cnVwdCBwb2xhcml0aWVzICovCisJd3JpdGViX3JlbGF4ZWQofjAsIGJhc2UgKyBIRE1JX0FIQl9E TUFfUE9MKTsKKwl3cml0ZWJfcmVsYXhlZCh+MCwgYmFzZSArIEhETUlfQUhCX0RNQV9CVUZGUE9M KTsKKworCS8qIEtlZXAgaW50ZXJydXB0cyBtYXNrZWQsIGFuZCBjbGVhciBhbnkgcGVuZGluZyAq LworCXdyaXRlYl9yZWxheGVkKH4wLCBiYXNlICsgSERNSV9BSEJfRE1BX01BU0spOworCXdyaXRl Yl9yZWxheGVkKH4wLCBiYXNlICsgSERNSV9JSF9BSEJETUFBVURfU1RBVDApOworCisJcmV0ID0g cmVxdWVzdF9pcnEoZHctPmRhdGEuaXJxLCBzbmRfZHdfaGRtaV9pcnEsIElSUUZfU0hBUkVELAor CQkJICAiZHctaGRtaS1hdWRpbyIsIGR3KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ LyogVW4tbXV0ZSBkb25lIGludGVycnVwdCAqLworCXdyaXRlYl9yZWxheGVkKEhETUlfSUhfTVVU RV9BSEJETUFBVURfU1RBVDBfQUxMICYKKwkJICAgICAgIH5IRE1JX0lIX01VVEVfQUhCRE1BQVVE X1NUQVQwX0RPTkUsCisJCSAgICAgICBiYXNlICsgSERNSV9JSF9NVVRFX0FIQkRNQUFVRF9TVEFU MCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19oZG1pX2Nsb3NlKHN0cnVjdCBz bmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfZHdfaGRtaSAqZHcg PSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCS8qIE11dGUgYWxsIGludGVycnVwdHMgKi8K Kwl3cml0ZWJfcmVsYXhlZChIRE1JX0lIX01VVEVfQUhCRE1BQVVEX1NUQVQwX0FMTCwKKwkJICAg ICAgIGR3LT5kYXRhLmJhc2UgKyBIRE1JX0lIX01VVEVfQUhCRE1BQVVEX1NUQVQwKTsKKworCWZy ZWVfaXJxKGR3LT5kYXRhLmlycSwgZHcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg ZHdfaGRtaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorewor CXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7Cit9CisK K3N0YXRpYyBpbnQgZHdfaGRtaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpz dWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJcmV0dXJu IHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJCXBhcmFt c19idWZmZXJfYnl0ZXMocGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgZHdfaGRtaV9wcmVwYXJl KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNt X3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9kd19o ZG1pICpkdyA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXU4IHRocmVzaG9sZCwgY29uZjAs IGNvbmYxOworCisJLyogU2V0dXAgYXMgcGVyIDMuMC41IEZTTCA0LjEuMCBCU1AgKi8KKwlzd2l0 Y2ggKGR3LT5yZXZpc2lvbikgeworCWNhc2UgMHgwYToKKwkJY29uZjAgPSBIRE1JX0FIQl9ETUFf Q09ORjBfQlVSU1RfTU9ERSB8CisJCQlIRE1JX0FIQl9ETUFfQ09ORjBfSU5DUjQ7CisJCWlmIChy dW50aW1lLT5jaGFubmVscyA9PSAyKQorCQkJdGhyZXNob2xkID0gMTI2OworCQllbHNlCisJCQl0 aHJlc2hvbGQgPSAxMjQ7CisJCWJyZWFrOworCWNhc2UgMHgxYToKKwkJY29uZjAgPSBIRE1JX0FI Ql9ETUFfQ09ORjBfQlVSU1RfTU9ERSB8CisJCQlIRE1JX0FIQl9ETUFfQ09ORjBfSU5DUjg7CisJ CXRocmVzaG9sZCA9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTk9UUkVBQ0hFRCAq LworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkd19oZG1pX3NldF9zYW1wbGVfcmF0ZShkdy0+ ZGF0YS5oZG1pLCBydW50aW1lLT5yYXRlKTsKKworCS8qIE1pbmltdW0gbnVtYmVyIG9mIGJ5dGVz IGluIHRoZSBmaWZvLiAqLworCXJ1bnRpbWUtPmh3LmZpZm9fc2l6ZSA9IHRocmVzaG9sZCAqIDMy OworCisJY29uZjAgfD0gSERNSV9BSEJfRE1BX0NPTkYwX0VOX0hMT0NLOworCWNvbmYxID0gKDEg PDwgcnVudGltZS0+Y2hhbm5lbHMpIC0gMTsKKworCXdyaXRlYl9yZWxheGVkKHRocmVzaG9sZCwg ZHctPmRhdGEuYmFzZSArIEhETUlfQUhCX0RNQV9USFJTTEQpOworCXdyaXRlYl9yZWxheGVkKGNv bmYwLCBkdy0+ZGF0YS5iYXNlICsgSERNSV9BSEJfRE1BX0NPTkYwKTsKKwl3cml0ZWJfcmVsYXhl ZChjb25mMSwgZHctPmRhdGEuYmFzZSArIEhETUlfQUhCX0RNQV9DT05GMSk7CisKKwlzd2l0Y2gg KHJ1bnRpbWUtPmZvcm1hdCkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJB TUVfTEU6CisJCWR3LT5yZWZvcm1hdCA9IGR3X2hkbWlfcmVmb3JtYXRfaWVjOTU4OworCQlicmVh azsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlkd19oZG1pX2NyZWF0ZV9jcyhk dywgcnVudGltZSk7CisJCWR3LT5yZWZvcm1hdCA9IGR3X2hkbWlfcmVmb3JtYXRfczI0OworCQli cmVhazsKKwl9CisJZHctPmllY19vZmZzZXQgPSAwOworCWR3LT5jaGFubmVscyA9IHJ1bnRpbWUt PmNoYW5uZWxzOworCWR3LT5idWZfc3JjICA9IHJ1bnRpbWUtPmRtYV9hcmVhOworCWR3LT5idWZf ZHN0ICA9IHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hcmVhOworCWR3LT5idWZfYWRkciA9IHN1YnN0 cmVhbS0+ZG1hX2J1ZmZlci5hZGRyOworCWR3LT5idWZfcGVyaW9kID0gc25kX3BjbV9saWJfcGVy aW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJZHctPmJ1Zl9zaXplID0gc25kX3BjbV9saWJfYnVmZmVy X2J5dGVzKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19oZG1p X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7 CisJc3RydWN0IHNuZF9kd19oZG1pICpkdyA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNh c2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkdy0+bG9j aywgZmxhZ3MpOworCQlkdy0+YnVmX29mZnNldCA9IDA7CisJCWR3LT5zdWJzdHJlYW0gPSBzdWJz dHJlYW07CisJCWR3X2hkbWlfc3RhcnRfZG1hKGR3KTsKKwkJZHdfaGRtaV9hdWRpb19lbmFibGUo ZHctPmRhdGEuaGRtaSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3LT5sb2NrLCBmbGFn cyk7CisJCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnBl cmlvZF9zaXplOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJ c3Bpbl9sb2NrX2lycXNhdmUoJmR3LT5sb2NrLCBmbGFncyk7CisJCWR3LT5zdWJzdHJlYW0gPSBO VUxMOworCQlkd19oZG1pX3N0b3BfZG1hKGR3KTsKKwkJZHdfaGRtaV9hdWRpb19kaXNhYmxlKGR3 LT5kYXRhLmhkbWkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdy0+bG9jaywgZmxhZ3Mp OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0K KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBkd19oZG1pX3Bv aW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNu ZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25k X2R3X2hkbWkgKmR3ID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwkvKgorCSAqIFdlIGFy ZSB1bmFibGUgdG8gcmVwb3J0IHRoZSBleGFjdCBoYXJkd2FyZSBwb3NpdGlvbiBhcworCSAqIHJl YWRpbmcgdGhlIDMyLWJpdCBETUEgcG9zaXRpb24gdXNpbmcgOC1iaXQgcmVhZHMgaXMgcmFjeS4K KwkgKi8KKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGR3LT5idWZfb2Zmc2V0KTsK K30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfZHdfaGRtaV9vcHMgPSB7CisJLm9w ZW4gPSBkd19oZG1pX29wZW4sCisJLmNsb3NlID0gZHdfaGRtaV9jbG9zZSwKKwkuaW9jdGwgPSBz bmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gZHdfaGRtaV9od19wYXJhbXMsCisJLmh3 X2ZyZWUgPSBkd19oZG1pX2h3X2ZyZWUsCisJLnByZXBhcmUgPSBkd19oZG1pX3ByZXBhcmUsCisJ LnRyaWdnZXIgPSBkd19oZG1pX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBkd19oZG1pX3BvaW50ZXIs CisJLnBhZ2UgPSBzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorfTsKKworc3RhdGljIGlu dCBzbmRfZHdfaGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNv bnN0IHN0cnVjdCBkd19oZG1pX2F1ZGlvX2RhdGEgKmRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1f ZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZGV2LT5kZXYucGFyZW50OworCXN0cnVjdCBz bmRfZHdfaGRtaSAqZHc7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfcGNt ICpwY207CisJdW5zaWduZWQgcmV2aXNpb247CisJaW50IHJldDsKKworCXdyaXRlYl9yZWxheGVk KEhETUlfSUhfTVVURV9BSEJETUFBVURfU1RBVDBfQUxMLAorCQkgICAgICAgZGF0YS0+YmFzZSAr IEhETUlfSUhfTVVURV9BSEJETUFBVURfU1RBVDApOworCXJldmlzaW9uID0gcmVhZGJfcmVsYXhl ZChkYXRhLT5iYXNlICsgSERNSV9SRVZJU0lPTl9JRCk7CisJaWYgKHJldmlzaW9uICE9IDB4MGEg JiYgcmV2aXNpb24gIT0gMHgxYSkgeworCQlkZXZfZXJyKGRldiwgImR3LWhkbWktYXVkaW86IHVu a25vd24gcmV2aXNpb24gMHglMDJ4XG4iLAorCQkJcmV2aXNpb24pOworCQlyZXR1cm4gLUVOWElP OworCX0KKworCXJldCA9IHNuZF9jYXJkX25ldyhkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05E UlZfREVGQVVMVF9TVFIxLAorCQkJICAgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25k X2R3X2hkbWkpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzdHJs Y3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihjYXJkLT5kcml2ZXIpKTsKKwlz dHJsY3B5KGNhcmQtPnNob3J0bmFtZSwgIkRXLUhETUkiLCBzaXplb2YoY2FyZC0+c2hvcnRuYW1l KSk7CisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJ CSAiJXMgcmV2IDB4JTAyeCwgaXJxICVkIiwgY2FyZC0+c2hvcnRuYW1lLCByZXZpc2lvbiwKKwkJ IGRhdGEtPmlycSk7CisKKwlkdyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlkdy0+Y2FyZCA9IGNh cmQ7CisJZHctPmRhdGEgPSAqZGF0YTsKKwlkdy0+cmV2aXNpb24gPSByZXZpc2lvbjsKKworCXNw aW5fbG9ja19pbml0KCZkdy0+bG9jayk7CisKKwlyZXQgPSBzbmRfcGNtX25ldyhjYXJkLCAiRFcg SERNSSIsIDAsIDEsIDAsICZwY20pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCWR3 LT5wY20gPSBwY207CisJcGNtLT5wcml2YXRlX2RhdGEgPSBkdzsKKwlzdHJsY3B5KHBjbS0+bmFt ZSwgRFJJVkVSX05BTUUsIHNpemVvZihwY20tPm5hbWUpKTsKKwlzbmRfcGNtX3NldF9vcHMocGNt LCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX2R3X2hkbWlfb3BzKTsKKworCXNuZF9w Y21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYs CisJCQlkZXYsIDY0ICogMTAyNCwgNjQgKiAxMDI0KTsKKworCXJldCA9IHNuZF9jYXJkX3JlZ2lz dGVyKGNhcmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCXBsYXRmb3JtX3NldF9k cnZkYXRhKHBkZXYsIGR3KTsKKworCXJldHVybiAwOworCitlcnI6CisJc25kX2NhcmRfZnJlZShj YXJkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuZF9kd19oZG1pX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfZHdfaGRtaSAqZHcg PSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9jYXJkX2ZyZWUoZHctPmNhcmQp OworCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgJiYgZGVm aW5lZChJU19OT1RfQlJPS0VOKQorLyoKKyAqIFRoaXMgY29kZSBpcyBmaW5lLCBidXQgcmVxdWly ZXMgaW1wbGVtZW50YXRpb24gaW4gdGhlIGR3X2hkbWlfdHJpZ2dlcigpCisgKiBtZXRob2Qgd2hp Y2ggaXMgY3VycmVudGx5IG1pc3NpbmcgYXMgSSBoYXZlIG5vIHdheSB0byB0ZXN0IHRoaXMuCisg Ki8KK3N0YXRpYyBpbnQgc25kX2R3X2hkbWlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IHNuZF9kd19oZG1pICpkdyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc25k X3Bvd2VyX2NoYW5nZV9zdGF0ZShkdy0+Y2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzY29sZCk7CisJ c25kX3BjbV9zdXNwZW5kX2FsbChkdy0+cGNtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHNuZF9kd19oZG1pX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNu ZF9kd19oZG1pICpkdyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc25kX3Bvd2VyX2NoYW5n ZV9zdGF0ZShkdy0+Y2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoc25kX2R3X2hkbWlfcG0sIHNuZF9kd19oZG1pX3N1 c3BlbmQsCisJCQkgc25kX2R3X2hkbWlfcmVzdW1lKTsKKyNkZWZpbmUgUE1fT1BTICZzbmRfZHdf aGRtaV9wbQorI2Vsc2UKKyNkZWZpbmUgUE1fT1BTIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfZHdfaGRtaV9kcml2ZXIgPSB7CisJLnByb2JlCT0gc25k X2R3X2hkbWlfcHJvYmUsCisJLnJlbW92ZQk9IHNuZF9kd19oZG1pX3JlbW92ZSwKKwkuZHJpdmVy CT0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJ LnBtID0gUE1fT1BTLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNuZF9kd19o ZG1pX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBh cm0ubGludXgub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5vcHNpcyBEZXNpZ253 YXJlIEhETUkgQUhCIEFMU0EgaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLWF1ZGlvLmggYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL2R3X2hkbWktYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjFlODQwMTE4ZDkwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvZHdfaGRtaS1hdWRpby5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgRFdfSERNSV9BVURJ T19ICisjZGVmaW5lIERXX0hETUlfQVVESU9fSAorCitzdHJ1Y3QgZHdfaGRtaTsKKworc3RydWN0 IGR3X2hkbWlfYXVkaW9fZGF0YSB7CisJcGh5c19hZGRyX3QgcGh5czsKKwl2b2lkIF9faW9tZW0g KmJhc2U7CisJaW50IGlycTsKKwlzdHJ1Y3QgZHdfaGRtaSAqaGRtaTsKK307CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmMgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2R3X2hkbWkuYwppbmRleCBmYmEyNTYwN2VmODguLmI2NTQ2NDc4OWZiZCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxk cm0vYnJpZGdlL2R3X2hkbWkuaD4KIAogI2luY2x1ZGUgImR3X2hkbWkuaCIKKyNpbmNsdWRlICJk d19oZG1pLWF1ZGlvLmgiCiAKICNkZWZpbmUgSERNSV9FRElEX0xFTgkJNTEyCiAKQEAgLTEwNCw2 ICsxMDUsNyBAQCBzdHJ1Y3QgZHdfaGRtaSB7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy OwogCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7CiAKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICphdWRpbzsKIAllbnVtIGR3X2hkbWlfZGV2dHlwZSBkZXZfdHlwZTsKIAlzdHJ1Y3QgZGV2aWNl ICpkZXY7CiAJc3RydWN0IGNsayAqaXNmcl9jbGs7CkBAIC0xNzMyLDcgKzE3MzQsOSBAQCBpbnQg ZHdfaGRtaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAog ewogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBkZXZpbmZv OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGRjX25vZGU7CisJc3RydWN0IGR3X2hkbWlfYXVkaW9f ZGF0YSBhdWRpbzsKIAlzdHJ1Y3QgZHdfaGRtaSAqaGRtaTsKIAlpbnQgcmV0OwogCXUzMiB2YWwg PSAxOwpAQCAtMTg2MCw2ICsxODY0LDIzIEBAIGludCBkd19oZG1pX2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCiAJaGRtaV93cml0ZWIoaGRtaSwgfihIRE1J X0lIX1BIWV9TVEFUMF9IUEQgfCBIRE1JX0lIX1BIWV9TVEFUMF9SWF9TRU5TRSksCiAJCSAgICBI RE1JX0lIX01VVEVfUEhZX1NUQVQwKTsKIAorCW1lbXNldCgmcGRldmluZm8sIDAsIHNpemVvZihw ZGV2aW5mbykpOworCXBkZXZpbmZvLnBhcmVudCA9IGRldjsKKwlwZGV2aW5mby5pZCA9IFBMQVRG T1JNX0RFVklEX0FVVE87CisKKwlpZiAoaGRtaV9yZWFkYihoZG1pLCBIRE1JX0NPTkZJRzFfSUQp ICYgSERNSV9DT05GSUcxX0FIQikgeworCQlhdWRpby5waHlzID0gaW9yZXMtPnN0YXJ0OworCQlh dWRpby5iYXNlID0gaGRtaS0+cmVnczsKKwkJYXVkaW8uaXJxID0gaXJxOworCQlhdWRpby5oZG1p ID0gaGRtaTsKKworCQlwZGV2aW5mby5uYW1lID0gImR3LWhkbWktYWhiLWF1ZGlvIjsKKwkJcGRl dmluZm8uZGF0YSA9ICZhdWRpbzsKKwkJcGRldmluZm8uc2l6ZV9kYXRhID0gc2l6ZW9mKGF1ZGlv KTsKKwkJcGRldmluZm8uZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCQloZG1pLT5hdWRp byA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZwZGV2aW5mbyk7CisJfQorCiAJZGV2 X3NldF9kcnZkYXRhKGRldiwgaGRtaSk7CiAKIAlyZXR1cm4gMDsKQEAgLTE4NzcsNiArMTg5OCw5 IEBAIHZvaWQgZHdfaGRtaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGR3X2hkbWkgKmhkbWkgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKIAorCWlmIChoZG1pLT5hdWRpbyAmJiAhSVNfRVJSKGhkbWktPmF1ZGlv KSkKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaGRtaS0+YXVkaW8pOworCiAJLyogRGlz YWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCWhkbWlfd3JpdGViKGhkbWksIH4wLCBIRE1JX0lIX01V VEVfUEhZX1NUQVQwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19o ZG1pLmggYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWkuaAppbmRleCAxNzVkYmM4OWE4 MjQuLjc4ZTU0ZTgxMzIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19o ZG1pLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmgKQEAgLTU0NSw2ICs1 NDUsOSBAQAogI2RlZmluZSBIRE1JX0kyQ01fRlNfU0NMX0xDTlRfMF9BRERSICAgICAgICAgICAg MHg3RTEyCiAKIGVudW0geworLyogQ09ORklHMV9JRCBmaWVsZCB2YWx1ZXMgKi8KKwlIRE1JX0NP TkZJRzFfQUhCID0gMHgwMSwKKwogLyogSUhfRkNfSU5UMiBmaWVsZCB2YWx1ZXMgKi8KIAlIRE1J X0lIX0ZDX0lOVDJfT1ZFUkZMT1dfTUFTSyA9IDB4MDMsCiAJSERNSV9JSF9GQ19JTlQyX0xPV19Q UklPUklUWV9PVkVSRkxPVyA9IDB4MDIsCi0tIAoyLjEuMAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK