From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v14 3/8] drm/mediatek: Add DSI sub driver Date: Mon, 11 Apr 2016 17:09:31 +0200 Message-ID: <1460387376-11799-4-git-send-email-p.zabel@pengutronix.de> References: <1460387376-11799-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460387376-11799-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8 aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56 YWJlbEBwZW5ndXRyb25peC5kZT4KLS0KQ2hhbmdlcyBzaW5jZSB2MTM6CiAtIENyZWF0ZSBjb25u ZWN0b3IgaW4gc2VwYXJhdGUgZnVuY3Rpb24KIC0gUmVtb3ZlIHN1c3BlbmQvcmVzdW1lIGZ1bmN0 aW9ucwogLSBBZGQgbWlwaV90eF9zZXQvY2xlYXJfYml0cyBmdW5jdGlvbnMsIHJlbmFtZSBfbWFz ayB0byBfdXBkYXRlX2JpdHMKIC0gQ29uc29saWRhdGUgZHVwbGljYXRlZCBSR19EU0lfTE5UW0Mw MTIzNF0gcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL0tjb25maWcgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm aWxlICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5j IHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIHwgICAyICsK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgICAgIHwgOTI3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBp X3R4LmMgfCA0NjMgKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMzk5IGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19taXBpX3R4LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDhk YWQ4OTIuLjBjNDlhOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u ZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0zLDYgKzMsOCBA QCBjb25maWcgRFJNX01FRElBVEVLCiAJZGVwZW5kcyBvbiBEUk0KIAlkZXBlbmRzIG9uIEFSQ0hf TUVESUFURUsgfHwgKEFSTSAmJiBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVS CisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUwKIAlzZWxlY3QgSU9NTVVf RE1BCiAJc2VsZWN0IE1US19TTUkKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5k ZXggZDRiZGU3Yy4uZTc4MWRiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTYs NiArNiw4IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKIAkJICBtdGtfZHJt X2Rydi5vIFwKIAkJICBtdGtfZHJtX2ZiLm8gXAogCQkgIG10a19kcm1fZ2VtLm8gXAotCQkgIG10 a19kcm1fcGxhbmUubworCQkgIG10a19kcm1fcGxhbmUubyBcCisJCSAgbXRrX2RzaS5vIFwKKwkJ ICBtdGtfbWlwaV90eC5vCiAKIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVr LWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCmluZGV4IGY3NDllN2Eu LmFiYjhmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01MjMs NiArNTIzLDggQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJt X2RyaXZlcnNbXSA9IHsKIAkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCiAJJm10a19kaXNwX292 bF9kcml2ZXIsCiAJJm10a19kaXNwX3JkbWFfZHJpdmVyLAorCSZtdGtfZHNpX2RyaXZlciwKKwkm bXRrX21pcGlfdHhfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0 KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmluZGV4IGZiNjAwNTcu LjFmMjJlYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry di5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC01Miw1 ICs1Miw3IEBAIHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgewogCiBleHRlcm4gc3RydWN0IHBsYXRm b3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBtdGtfZHNpX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBp X3R4X2RyaXZlcjsKIAogI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZThmZjUK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCkBA IC0wLDAgKzEsOTI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlw aV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBo Lmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSAibXRr X2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERTSV9WSURFT19GSUZPX0RFUFRICSgxOTIwIC8g NCkKKyNkZWZpbmUgRFNJX0hPU1RfRklGT19ERVBUSAk2NAorCisjZGVmaW5lIERTSV9TVEFSVAkJ MHgwMAorCisjZGVmaW5lIERTSV9DT05fQ1RSTAkJMHgxMAorI2RlZmluZSBEU0lfUkVTRVQJCQlC SVQoMCkKKyNkZWZpbmUgRFNJX0VOCQkJCUJJVCgxKQorCisjZGVmaW5lIERTSV9NT0RFX0NUUkwJ CTB4MTQKKyNkZWZpbmUgTU9ERQkJCQkoMykKKyNkZWZpbmUgQ01EX01PREUJCQkwCisjZGVmaW5l IFNZTkNfUFVMU0VfTU9ERQkJCTEKKyNkZWZpbmUgU1lOQ19FVkVOVF9NT0RFCQkJMgorI2RlZmlu ZSBCVVJTVF9NT0RFCQkJMworI2RlZmluZSBGUk1fTU9ERQkJCUJJVCgxNikKKyNkZWZpbmUgTUlY X01PREUJCQlCSVQoMTcpCisKKyNkZWZpbmUgRFNJX1RYUlhfQ1RSTAkJMHgxOAorI2RlZmluZSBW Q19OVU0JCQkJKDIgPDwgMCkKKyNkZWZpbmUgTEFORV9OVU0JCQkoMHhmIDw8IDIpCisjZGVmaW5l IERJU19FT1QJCQkJQklUKDYpCisjZGVmaW5lIE5VTExfRU4JCQkJQklUKDcpCisjZGVmaW5lIFRF X0ZSRUVSVU4JCQlCSVQoOCkKKyNkZWZpbmUgRVhUX1RFX0VOCQkJQklUKDkpCisjZGVmaW5lIEVY VF9URV9FREdFCQkJQklUKDEwKQorI2RlZmluZSBNQVhfUlROX1NJWkUJCQkoMHhmIDw8IDEyKQor I2RlZmluZSBIU1RYX0NLTFBfRU4JCQlCSVQoMTYpCisKKyNkZWZpbmUgRFNJX1BTQ1RSTAkJMHgx YworI2RlZmluZSBEU0lfUFNfV0MJCQkweDNmZmYKKyNkZWZpbmUgRFNJX1BTX1NFTAkJCSgzIDw8 IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1CQkoMCA8PCAxNikKKyNkZWZpbmUg TE9PU0VMWV9QU18xOEJJVF9SR0I2NjYJCSgxIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMThC SVRfUkdCNjY2CQkoMiA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzI0QklUX1JHQjg4OAkJKDMg PDwgMTYpCisKKyNkZWZpbmUgRFNJX1ZTQV9OTAkJMHgyMAorI2RlZmluZSBEU0lfVkJQX05MCQkw eDI0CisjZGVmaW5lIERTSV9WRlBfTkwJCTB4MjgKKyNkZWZpbmUgRFNJX1ZBQ1RfTkwJCTB4MkMK KyNkZWZpbmUgRFNJX0hTQV9XQwkJMHg1MAorI2RlZmluZSBEU0lfSEJQX1dDCQkweDU0CisjZGVm aW5lIERTSV9IRlBfV0MJCTB4NTgKKworI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQKKwor I2RlZmluZSBEU0lfUEhZX0xDQ09OCQkweDEwNAorI2RlZmluZSBMQ19IU19UWF9FTgkJCUJJVCgw KQorI2RlZmluZSBMQ19VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExDX1dBS0VVUF9FTgkJCUJJ VCgyKQorCisjZGVmaW5lIERTSV9QSFlfTEQwQ09OCQkweDEwOAorI2RlZmluZSBMRDBfSFNfVFhf RU4JCQlCSVQoMCkKKyNkZWZpbmUgTEQwX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTEQwX1dB S0VVUF9FTgkJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjAJMHgxMTAKKyNkZWZp bmUgTFBYCQkJCSgweGZmIDw8IDApCisjZGVmaW5lIEhTX1BSUFIJCQkJKDB4ZmYgPDwgOCkKKyNk ZWZpbmUgSFNfWkVSTwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgSFNfVFJBSUwJCQkoMHhmZiA8 PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04xCTB4MTE0CisjZGVmaW5lIFRBX0dPCQkJ CSgweGZmIDw8IDApCisjZGVmaW5lIFRBX1NVUkUJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgVEFf R0VUCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBEQV9IU19FWElUCQkJKDB4ZmYgPDwgMjQpCisK KyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMgkweDExOAorI2RlZmluZSBDT05UX0RFVAkJCSgweGZm IDw8IDApCisjZGVmaW5lIENMS19aRVJPCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIENMS19UUkFJ TAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjMJMHgxMWMKKyNkZWZp bmUgQ0xLX0hTX1BSUFIJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBDTEtfSFNfUE9TVAkJCSgweGZm IDw8IDgpCisjZGVmaW5lIENMS19IU19FWElUCQkJKDB4ZmYgPDwgMTYpCisKKyNkZWZpbmUgTlNf VE9fQ1lDTEUobiwgYykgICAgKChuKSAvIChjKSArICgoKG4pICUgKGMpKSA/IDEgOiAwKSkKKwor c3RydWN0IHBoeTsKKworc3RydWN0IG10a19kc2kgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAgZGRw X2NvbXA7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGhvc3Q7 CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29u bjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl OworCXN0cnVjdCBwaHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsKKworCXN0cnVjdCBj bGsgKmVuZ2luZV9jbGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisJc3RydWN0IGNsayAq aHNfY2xrOworCisJdTMyIGRhdGFfcmF0ZTsKKworCXVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsK KwllbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWduZWQgaW50IGxhbmVz OworCXN0cnVjdCB2aWRlb21vZGUgdm07CisJaW50IHJlZmNvdW50OworCWJvb2wgZW5hYmxlZDsK K307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVj dCBkcm1fZW5jb2RlciAqZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCBtdGtf ZHNpLCBlbmNvZGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqY29ubmVj dG9yX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGMsIHN0cnVjdCBtdGtfZHNpLCBjb25uKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg bXRrX2RzaSAqaG9zdF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmgpCit7CisJcmV0dXJu IGNvbnRhaW5lcl9vZihoLCBzdHJ1Y3QgbXRrX2RzaSwgaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lk IG10a19kc2lfbWFzayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywg dTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJlZ3MgKyBvZmZzZXQpOworCisJ d3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgZHNpLT5yZWdzICsgb2Zmc2V0 KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BoeV90aW1jb25maWcoc3RydWN0IG10a19kc2kgKmRz aSkKK3sKKwl1MzIgdGltY29uMCwgdGltY29uMSwgdGltY29uMiwgdGltY29uMzsKKwl1bnNpZ25l ZCBpbnQgdWksIGN5Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxweDsKKworCXVpID0gMTAwMCAv IGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0gODAwMCAvIGRzaS0+ZGF0YV9y YXRlICsgMHgwMTsKKwlscHggPSA1OworCisJdGltY29uMCA9ICg4IDw8IDI0KSB8ICgweGEgPDwg MTYpIHwgKDB4NiA8PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcgPDwgMjQpIHwgKDUgKiBscHgg PDwgMTYpIHwgKCgzICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0ICogbHB4KTsKKwl0aW1jb24y ID0gKChOU19UT19DWUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4YSkgPDwgMjQpIHwKKwkJICAo TlNfVE9fQ1lDTEUoMHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsKKwl0aW1jb24zID0gKDIgKiBs cHgpIDw8IDE2IHwgTlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBjeWNsZV90aW1lKSA8PCA4IHwK KwkJICAgTlNfVE9fQ1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisKKwl3cml0ZWwodGltY29uMCwg ZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVsKHRpbWNvbjEsIGRzaS0+cmVn cyArIERTSV9QSFlfVElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24yLCBkc2ktPnJlZ3MgKyBEU0lf UEhZX1RJTUVDT04yKTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1F Q09OMyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpk c2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lfRU4sIERTSV9FTik7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQor eworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCAwKTsKK30KKworc3Rh dGljIHZvaWQgbXRrX2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lf bWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lfUkVTRVQpOworCW10a19kc2lf bWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsKK30KKworc3RhdGljIGludCBt dGtfZHNpX3Bvd2Vyb24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNpLT5yZWZjb3VudCAhPSAxKQor CQlyZXR1cm4gMDsKKworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChwaXhlbF9jbG9jayAvIDEwMDAp ICogcGl4ZWxfZGlwdGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVsX2Nsb2NrIHVuaXQgaXMgS2h6 LCBkYXRhX3JhdGEgdW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRlIDEwMDAuCisJICogbWlwaV9y YXRpbyBpcyBtaXBpIGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5jZSB0aGUgcGl4ZWwgY2xrIGlu IG1pcGkuCisJICogd2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4KKwkgKi8KKwlkc2ktPmRhdGFf cmF0ZSA9IGRzaS0+dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgxICogMTAwMCAqIDEwKTsKKwor CXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5kYXRhX3JhdGUgKiAxMDAwMDAw KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgZGF0YSBy YXRlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVmY291bnQ7CisJfQorCisJcGh5X3Bvd2Vy X29uKGRzaS0+cGh5KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmVuZ2luZV9j bGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBl bmdpbmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waHlfcG93ZXJfb2ZmOworCX0K KworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xrKTsKKwlpZiAocmV0 IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCBjbG9jazog JWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rpc2FibGVfZW5naW5lX2NsazsKKwl9CisKKwltdGtf ZHNpX2VuYWJsZShkc2kpOworCW10a19kc2lfcmVzZXQoZHNpKTsKKwlkc2lfcGh5X3RpbWNvbmZp Zyhkc2kpOworCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX2VuZ2luZV9jbGs6CisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5lX2Nsayk7CitlcnJfcGh5X3Bvd2VyX29mZjoKKwlw aHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK2Vycl9yZWZjb3VudDoKKwlkc2ktPnJlZmNvdW50LS07 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9lbnRlcihz dHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04s IExDX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19V TFBNX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9sZWF2ZShzdHJ1 Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExD X1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VV UF9FTiwgTENfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBM Q19XQUtFVVBfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfZW50 ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xE MENPTiwgTEQwX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENP TiwgTEQwX1VMUE1fRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVf bGVhdmUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZ X0xEMENPTiwgTEQwX1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQw Q09OLCBMRDBfV0FLRVVQX0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBE U0lfUEhZX0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGRzaV9j bGtfaHNfc3RhdGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzE7CisKKwl0 bXBfcmVnMSA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOworCXJldHVybiAoKHRt cF9yZWcxICYgTENfSFNfVFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMg dm9pZCBkc2lfY2xrX2hzX21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9vbCBlbnRlcikKK3sK KwlpZiAoZW50ZXIgJiYgIWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRz aSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsKKwllbHNlIGlmICgh ZW50ZXIgJiYgZHNpX2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lf UEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9k ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENNRF9NT0RFOworCisJ aWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJdmlkX21vZGUg PSBTWU5DX1BVTFNFX01PREU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9N T0RFX1ZJREVPX0JVUlNUKSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9N T0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9NT0RFOworCX0KKwor CXdyaXRlbCh2aWRfbW9kZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7Cit9CisKK3N0YXRp YyB2b2lkIGRzaV9wc19jb250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1 Y3QgdmlkZW9tb2RlICp2bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2JwcCwgcHNfd2M7CisJ dTMyIHBzX2JwcF9tb2RlOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1 NjUpCisJCWRzaV9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBwID0gMzsKKworCXBz X3djID0gdm0tPmhhY3RpdmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9kZSA9IHBzX3djOwor CisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJ cHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBN SVBJX0RTSV9GTVRfUkdCNjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMThCSVRfUkdC NjY2OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlwc19i cHBfbW9kZSB8PSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJ X0RTSV9GTVRfUkdCNTY1OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1 OworCQlicmVhazsKKwl9CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+cmVncyArIERTSV9W QUNUX05MKTsKKwl3cml0ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOwor CXdyaXRlbChwc193YywgZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsKK30KKworc3RhdGlj IHZvaWQgZHNpX3J4dHhfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBf cmVnOworCisJc3dpdGNoIChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0bXBfcmVnID0gMSA8 PCAyOworCQlicmVhazsKKwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7CisJCWJyZWFrOwor CWNhc2UgMzoKKwkJdG1wX3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0bXBf cmVnID0gMHhmIDw8IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSAweGYgPDwg MjsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9UWFJY X0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAq ZHNpKQoreworCXVuc2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMyIHRtcF9yZWc7CisK Kwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl0 bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsK KwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBfcmVnID0gTE9PU0VM WV9QU18xOEJJVF9SR0I2NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNh c2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMThC SVRfUkdCNjY2OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I1NjU6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlk c2lfdG1wX2J1Zl9icHAgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gUEFD S0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJ fQorCisJdG1wX3JlZyArPSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1Zl9icHAgJiBEU0lf UFNfV0M7CisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworfQorCitz dGF0aWMgdm9pZCBkc2lfY29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sK Kwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOworCXVuc2lnbmVkIGlu dCBob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Zy b250cG9yY2hfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCisJc3RydWN0 IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1hdCA9PSBNSVBJX0RT SV9GTVRfUkdCNTY1KQorCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UKKwkJZHNpX3RtcF9i dWZfYnBwID0gMzsKKworCXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJlZ3MgKyBEU0lfVlNB X05MKTsKKwl3cml0ZWwodm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkJQX05MKTsK Kwl3cml0ZWwodm0tPnZmcm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZGUF9OTCk7CisJd3Jp dGVsKHZtLT52YWN0aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisKKwlob3Jpem9udGFs X3N5bmNfYWN0aXZlX2J5dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBfYnVmX2JwcCAtIDEw KTsKKworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVM U0UpCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5oYmFja19wb3JjaCAq IGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5 dGUgPSAoKHZtLT5oYmFja19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJCWRzaV90bXBfYnVm X2JwcCAtIDEwKTsKKworCWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0gKHZtLT5oZnJvbnRf cG9yY2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9yaXpvbnRhbF9zeW5j X2FjdGl2ZV9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRh bF9iYWNrcG9yY2hfYnl0ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJd3JpdGVsKGhvcml6 b250YWxfZnJvbnRwb3JjaF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dDKTsKKworCWRzaV9w c19jb250cm9sKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3RhcnQoc3RydWN0IG10 a19kc2kgKmRzaSkKK3sKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKKwl3cml0 ZWwoMSwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9w b3dlcm9mZihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09OKGRzaS0+cmVmY291 bnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQgIT0gMCkKKwkJcmV0 dXJuOworCisJZHNpX2xhbmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNpX2Nsa191bHBfbW9k ZV9lbnRlcihkc2kpOworCisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoZHNpLT5lbmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5k aWdpdGFsX2Nsayk7CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30KKworc3RhdGljIHZv aWQgbXRrX291dHB1dF9kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJl dDsKKworCWlmIChkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7 CisJCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gc2V0dXAgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJl dCA9IG10a19kc2lfcG93ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigi ZmFpbGVkIHRvIHBvd2VyIG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkc2lfcnh0eF9j b250cm9sKGRzaSk7CisKKwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2xhbmUw X3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMCk7CisJZHNpX3Nl dF9tb2RlKGRzaSk7CisKKwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJZHNpX2NvbmZpZ192 ZG9fdGltaW5nKGRzaSk7CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUo ZHNpLCAxKTsKKworCW10a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0IG10a19kc2kg KmRzaSkKK3sKKwlpZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFu ZWwpIHsKKwkJaWYgKGRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJS T1IoImZhaWxlZCB0byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9 CisKKwltdGtfZHNpX3Bvd2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30K Kworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2Z1bmNzID0g eworCS5kZXN0cm95ID0gbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgYm9v bCBtdGtfZHNpX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIs CisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAg ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0 cnVjdCBtdGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWRzaS0+dm0u cGl4ZWxjbG9jayA9IGFkanVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3RpdmUgPSBhZGp1c3Rl ZC0+aGRpc3BsYXk7CisJZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVkLT5odG90YWwgLSBh ZGp1c3RlZC0+aHN5bmNfZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0gYWRqdXN0ZWQtPmhz eW5jX3N0YXJ0IC0gYWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5bmNfbGVuID0gYWRq dXN0ZWQtPmhzeW5jX2VuZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKworCWRzaS0+dm0udmFj dGl2ZSA9IGFkanVzdGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3BvcmNoID0gYWRqdXN0 ZWQtPnZ0b3RhbCAtIGFkanVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52ZnJvbnRfcG9yY2gg PSBhZGp1c3RlZC0+dnN5bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52 c3luY19sZW4gPSBhZGp1c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0Owor fQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVu Y29kZXIpOworCisJbXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQorCitzdGF0aWMgdm9p ZCBtdGtfZHNpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sK KwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtf b3V0cHV0X2RzaV9lbmFibGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMgbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVj dGVkOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNv bm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29u bmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQor CitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29k ZXIoCisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19k c2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAmZHNpLT5l bmNvZGVyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5j cyBtdGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gbXRrX2Rz aV9lbmNvZGVyX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9lbmNvZGVyX21vZGVf c2V0LAorCS5kaXNhYmxlID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IG10 a19kc2lfZW5jb2Rlcl9lbmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3JfZnVuY3MgbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2RzaV9jb25uZWN0b3Jf ZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9y X21vZGVzLAorCS5kZXN0cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQg PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVf c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5h dG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95 X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9m dW5jcworCW10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0g bXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfZHNpX2Nv bm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fYXR0YWNoX2Jy aWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIpCit7CisJaW50IHJldDsKKworCWlmICghYnJpZGdlKQorCQlyZXR1cm4gLUVOT0VO VDsKKworCWVuY29kZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVuY29kZXIgPSBlbmNv ZGVyOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwgYnJpZGdlKTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8gZHJtXG4i KTsKKwkJZW5jb2Rlci0+YnJpZGdlID0gTlVMTDsKKwkJYnJpZGdlLT5lbmNvZGVyID0gTlVMTDsK Kwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5l Y3RvcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlu dCByZXQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5jb25uLCAmbXRr X2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCWlm IChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIGluaXQgdG8gZHJtXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+ Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fY29u bmVjdG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVyIHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Nvbm5l Y3Rvcl9jbGVhbnVwOworCX0KKworCWRzaS0+Y29ubi5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7 CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPmNvbm4sICZkc2ktPmVu Y29kZXIpOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChk c2ktPnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gYXR0YWNoIHBhbmVsIHRvIGRybVxuIik7CisJCQlnb3RvIGVycl9jb25uZWN0b3JfdW5y ZWdpc3RlcjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfY29ubmVjdG9yX3VucmVnaXN0 ZXI6CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZkc2ktPmNvbm4pOworZXJyX2Nvbm5lY3Rv cl9jbGVhbnVwOgorCWRybV9jb25uZWN0b3JfY2xlYW51cCgmZHNpLT5jb25uKTsKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCXJldCA9 IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2Z1 bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuY29kZXIgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsICZtdGtf ZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCS8qCisJICogQ3VycmVudGx5IGRpc3BsYXkg ZGF0YSBwYXRocyBhcmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byBhIGNydGMgZWFjaC4KKwkgKiBj cnRjIDAgaXMgT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4g RFNJMAorCSAqLworCWRzaS0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9IDE7CisKKwkvKiBJZiB0 aGVyZSdzIGEgYnJpZGdlLCBhdHRhY2ggdG8gaXQgYW5kIGxldCBpdCBjcmVhdGUgdGhlIGNvbm5l Y3RvciAqLworCXJldCA9IG10a19kcm1fYXR0YWNoX2JyaWRnZShkc2ktPmJyaWRnZSwgJmRzaS0+ ZW5jb2Rlcik7CisJaWYgKHJldCkgeworCQkvKiBPdGhlcndpc2UgY3JlYXRlIG91ciBvd24gY29u bmVjdG9yIGFuZCBhdHRhY2ggdG8gYSBwYW5lbCAqLworCQlyZXQgPSBtdGtfZHNpX2NyZWF0ZV9j b25uZWN0b3IoZHJtLCBkc2kpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZW5jb2Rlcl9jbGVh bnVwOworCX0KKworCXJldHVybiAwOworCitlcnJfZW5jb2Rlcl9jbGVhbnVwOgorCWRybV9lbmNv ZGVyX2NsZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQgbXRrX2RzaV9kZXN0cm95X2Nvbm5fZW5jKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJZHJt X2VuY29kZXJfY2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKKwkvKiBTa2lwIGNvbm5lY3RvciBjbGVh bnVwIGlmIGNyZWF0aW9uIHdhcyBkZWxlZ2F0ZWQgdG8gdGhlIGJyaWRnZSAqLworCWlmIChkc2kt PmNvbm4uZGV2KSB7CisJCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmZHNpLT5jb25uKTsKKwkJ ZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZkc2ktPmNvbm4pOworCX0KK30KKworc3RhdGljIHZvaWQg bXRrX2RzaV9kZHBfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3Qg bXRrX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHNpLCBkZHBfY29t cCk7CisKKwltdGtfZHNpX3Bvd2Vyb24oZHNpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9k ZHBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHNpICpk c2kgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kc2ksIGRkcF9jb21wKTsKKworCW10 a19kc2lfcG93ZXJvZmYoZHNpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv bXBfZnVuY3MgbXRrX2RzaV9mdW5jcyA9IHsKKwkuc3RhcnQgPSBtdGtfZHNpX2RkcF9zdGFydCwK Kwkuc3RvcCA9IG10a19kc2lfZGRwX3N0b3AsCit9OworCitzdGF0aWMgaW50IG10a19kc2lfaG9z dF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkgICAgICAgc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBob3N0X3Rv X2RzaShob3N0KTsKKworCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOworCWRzaS0+Zm9ybWF0 ID0gZGV2aWNlLT5mb3JtYXQ7CisJZHNpLT5tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdz OworCisJaWYgKGRzaS0+Y29ubi5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkc2kt PmNvbm4uZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kc2lfaG9zdF9k ZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkgICAgICAgc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBob3N0X3RvX2Rz aShob3N0KTsKKworCWlmIChkc2ktPmNvbm4uZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZl bnQoZHNpLT5jb25uLmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBtaXBpX2RzaV9ob3N0X29wcyBtdGtfZHNpX29wcyA9IHsKKwkuYXR0YWNoID0gbXRrX2RzaV9o b3N0X2F0dGFjaCwKKwkuZGV0YWNoID0gbXRrX2RzaV9ob3N0X2RldGFjaCwKK307CisKK3N0YXRp YyBpbnQgbXRrX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLCB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJ cmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCWlmIChy ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAl czogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXQgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmhvc3QpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERTSSBob3N0 OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZGRwX2NvbXBfdW5yZWdpc3RlcjsKKwl9CisKKwly ZXQgPSBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhkcm0sIGRzaSk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkVuY29kZXIgY3JlYXRlIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlnb3Rv IGVycl91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwlt aXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+aG9zdCk7CitlcnJfZGRwX2NvbXBfdW5yZWdp c3RlcjoKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21wKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2RzaV9kZXN0cm95X2Nvbm5fZW5jKGRzaSk7CisJbWlw aV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmhvc3QpOworCW10a19kZHBfY29tcF91bnJlZ2lz dGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBv bmVudF9vcHMgbXRrX2RzaV9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gbXRrX2RzaV9iaW5k LAorCS51bmJpbmQgPSBtdGtfZHNpX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpk c2k7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKnJlbW90ZV9ub2RlLCAqZW5kcG9pbnQ7CisJc3RydWN0IHJlc291cmNlICpyZWdzOworCWlu dCBjb21wX2lkOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRz aS0+aG9zdC5vcHMgPSAmbXRrX2RzaV9vcHM7CisJZHNpLT5ob3N0LmRldiA9IGRldjsKKworCWVu ZHBvaW50ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsK KwlpZiAoZW5kcG9pbnQpIHsKKwkJcmVtb3RlX25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3Bv cnRfcGFyZW50KGVuZHBvaW50KTsKKwkJaWYgKCFyZW1vdGVfbm9kZSkgeworCQkJZGV2X2Vycihk ZXYsICJObyBwYW5lbCBjb25uZWN0ZWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwor CQlkc2ktPmJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGVfbm9kZSk7CisJCWRzaS0+ cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChyZW1vdGVfbm9kZSk7CisJCW9mX25vZGVfcHV0KHJl bW90ZV9ub2RlKTsKKwkJaWYgKCFkc2ktPmJyaWRnZSAmJiAhZHNpLT5wYW5lbCkgeworCQkJZGV2 X2luZm8oZGV2LCAiV2FpdGluZyBmb3IgYnJpZGdlIG9yIHBhbmVsIGRyaXZlclxuIik7CisJCQly ZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0KKworCWRzaS0+ZW5naW5lX2NsayA9IGRldm1f Y2xrX2dldChkZXYsICJlbmdpbmUiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZW5naW5lX2NsaykpIHsK KwkJcmV0ID0gUFRSX0VSUihkc2ktPmVuZ2luZV9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxl ZCB0byBnZXQgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK Kwlkc2ktPmRpZ2l0YWxfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImRpZ2l0YWwiKTsKKwlpZiAo SVNfRVJSKGRzaS0+ZGlnaXRhbF9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5kaWdpdGFs X2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBkaWdpdGFsIGNsb2NrOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPmhzX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJocyIpOworCWlmIChJU19FUlIoZHNpLT5oc19jbGspKSB7CisJCXJldCA9IFBUUl9F UlIoZHNpLT5oc19jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgaHMgY2xvY2s6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRzaS0+cmVncyA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZHNpLT5yZWdzKSkgeworCQly ZXQgPSBQVFJfRVJSKGRzaS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVt YXAgbWVtb3J5OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPnBoeSA9 IGRldm1fcGh5X2dldChkZXYsICJkcGh5Iik7CisJaWYgKElTX0VSUihkc2ktPnBoeSkpIHsKKwkJ cmV0ID0gUFRSX0VSUihkc2ktPnBoeSk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBN SVBJLURQSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBt dGtfZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwgTVRLX0RTSSk7CisJaWYgKGNvbXBfaWQg PCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFsaWFzOiAlZFxu IiwgY29tcF9pZCk7CisJCXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10a19kZHBfY29t cF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmZHNpLT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkm bXRrX2RzaV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBp bml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKKworCXJldHVybiBjb21wb25lbnRfYWRk KCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOworfQorCitzdGF0aWMgaW50IG10 a19kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10 a19kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX291dHB1dF9k c2lfZGlzYWJsZShkc2kpOworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kc2lfY29t cG9uZW50X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbXRrX2RzaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTczLWRzaSIgfSwKKwl7IH0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10 a19kc2lfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19kc2lfcHJvYmUsCisJLnJlbW92ZSA9IG10 a19kc2lfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10ay1kc2kiLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBtdGtfZHNpX29mX21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX21pcGlfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j Y2QxYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t aXBpX3R4LmMKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk aWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXBy b3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2RlZmluZSBNSVBJVFhfRFNJ X0NPTgkJMHgwMAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJQklUKDApCisjZGVmaW5lIFJH X0RTSV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMg PDwgMikKKyNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8IDQpCisjZGVmaW5lIFJHX0RT SV9QSFlDTEtfU0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlC SVQoMTApCisjZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJVCgxMSkKKworI2RlZmluZSBN SVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJ MHgwOAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTEJMHgwYworI2RlZmluZSBNSVBJVFhf RFNJX0RBVEFfTEFORTIJMHgxMAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJMHgxNAor I2RlZmluZSBSR19EU0lfTE5UeF9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5U eF9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UeF9MUFRYX0lQTFVTMQkJQklU KDIpCisjZGVmaW5lIFJHX0RTSV9MTlR4X0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdf RFNJX0xOVHhfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UeF9MUENEX0lQ TFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2Rl ZmluZSBSR19EU0lfTE5UeF9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RT SV9UT1BfQ09OCTB4NDAKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKKyNkZWZp bmUgUkdfRFNJX0xOVF9IU19CSUFTX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBf Q0FMX0VOCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCisj ZGVmaW5lIFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0RT SV9MTlRfQUlPX1NFTAkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlC SVQoMTEpCisjZGVmaW5lIFJHX0RTSV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2RlZmluZSBS R19EU0lfUFJFU0VSVkUJCQkoNyA8PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkw eDQ0CisjZGVmaW5lIFJHX0RTSV9CR19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0JH X0NLRU4JCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikKKyNkZWZp bmUgUkdfRFNJX0JHX0ZBU1RfQ0hBUkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNL CQkJKDB4M2ZmZmYgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1KQorI2Rl ZmluZSBSR19EU0lfVjEwX1NFTAkJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJ CSg3IDw8IDExKQorI2RlZmluZSBSR19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2RlZmluZSBS R19EU0lfVjAzMl9TRUwJCQkoNyA8PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8 PCAyMCkKKyNkZWZpbmUgUkdfRFNJX0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJH X0RTSV9CR19SMl9UUklNCQkoMHhmIDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NP TjAJMHg1MAorI2RlZmluZSBSR19EU0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdf RFNJX01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfUFJF RElWCQkoMyA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAzKQorI2Rl ZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lfTVBQTExf UE9TRElWCQkoNyA8PCA3KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJVCgxMCkK KyNkZWZpbmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBSR19EU0lf TVBQTExfVk9EX0VOCQlCSVQoMTIpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0 CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ X01QUExMX1NETV9TU0NfUEhfSU5JVAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9T U0NfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8 PCAxNikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmluZSBNSVBJ VFhfRFNJX1BMTF9QV1IJMHg2OAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTgkJQklU KDApCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdf RFNJX01QUExMX1NETV9QV1JfQUNLCUJJVCg4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RS TAkweDgwCisjZGVmaW5lIFNXX0NUUkxfRU4JCQlCSVQoMCkKKworI2RlZmluZSBNSVBJVFhfRFNJ X1NXX0NUUkxfQ09OMAkweDg0CisjZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJVCgwKQor I2RlZmluZSBTV19MTlRDX0xQVFhfT0UJCQlCSVQoMSkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1AJ CQlCSVQoMikKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX04JCQlCSVQoMykKKyNkZWZpbmUgU1dfTE5U Q19IU1RYX1BSRV9PRQkJQklUKDQpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJVCg1KQor I2RlZmluZSBTV19MTlRDX0hTVFhfWkVST0NMSwkJQklUKDYpCisjZGVmaW5lIFNXX0xOVDBfTFBU WF9QUkVfT0UJCUJJVCg3KQorI2RlZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkKKyNkZWZp bmUgU1dfTE5UMF9MUFRYX1AJCQlCSVQoOSkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX04JCQlCSVQo MTApCisjZGVmaW5lIFNXX0xOVDBfSFNUWF9QUkVfT0UJCUJJVCgxMSkKKyNkZWZpbmUgU1dfTE5U MF9IU1RYX09FCQkJQklUKDEyKQorI2RlZmluZSBTV19MTlQwX0xQUlhfRU4JCQlCSVQoMTMpCisj ZGVmaW5lIFNXX0xOVDFfTFBUWF9QUkVfT0UJCUJJVCgxNCkKKyNkZWZpbmUgU1dfTE5UMV9MUFRY X09FCQkJQklUKDE1KQorI2RlZmluZSBTV19MTlQxX0xQVFhfUAkJCUJJVCgxNikKKyNkZWZpbmUg U1dfTE5UMV9MUFRYX04JCQlCSVQoMTcpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJ VCgxOCkKKyNkZWZpbmUgU1dfTE5UMV9IU1RYX09FCQkJQklUKDE5KQorI2RlZmluZSBTV19MTlQy X0xQVFhfUFJFX09FCQlCSVQoMjApCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJVCgyMSkK KyNkZWZpbmUgU1dfTE5UMl9MUFRYX1AJCQlCSVQoMjIpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9O CQkJQklUKDIzKQorI2RlZmluZSBTV19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCisjZGVmaW5l IFNXX0xOVDJfSFNUWF9PRQkJCUJJVCgyNSkKKworc3RydWN0IG10a19taXBpX3R4IHsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGludCBkYXRh X3JhdGU7CisJc3RydWN0IGNsa19odyBwbGxfaHc7CisJc3RydWN0IGNsayAqcGxsOworfTsKKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX21pcGlfdHggKm10a19taXBpX3R4X2Zyb21fY2xrX2h3 KHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXJldHVybiBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBt dGtfbWlwaV90eCwgcGxsX2h3KTsKK30KKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfY2xlYXJf Yml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCisJCQkJICAgdTMy IGJpdHMpCit7CisJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKKwor CXdyaXRlbCh0ZW1wICYgfmJpdHMsIG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0 aWMgdm9pZCBtdGtfbWlwaV90eF9zZXRfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgs IHUzMiBvZmZzZXQsCisJCQkJIHUzMiBiaXRzKQoreworCXUzMiB0ZW1wID0gcmVhZGwobWlwaV90 eC0+cmVncyArIG9mZnNldCk7CisKKwl3cml0ZWwodGVtcCB8IGJpdHMsIG1pcGlfdHgtPnJlZ3Mg KyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF91cGRhdGVfYml0cyhzdHJ1 Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCisJCQkJICAgIHUzMiBtYXNrLCB1 MzIgZGF0YSkKK3sKKwl1MzIgdGVtcCA9IHJlYWRsKG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwor CisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyAr IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0 IGNsa19odyAqaHcpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gbXRrX21pcGlf dHhfZnJvbV9jbGtfaHcoaHcpOworCXVuc2lnbmVkIGludCB0eGRpdiwgdHhkaXYwLCB0eGRpdjE7 CisJdTY0IHBjdzsKKworCWRldl9kYmcobWlwaV90eC0+ZGV2LCAicHJlcGFyZTogJXUgSHpcbiIs IG1pcGlfdHgtPmRhdGFfcmF0ZSk7CisKKwlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMDAw MDAwMCkgeworCQl0eGRpdiA9IDE7CisJCXR4ZGl2MCA9IDA7CisJCXR4ZGl2MSA9IDA7CisJfSBl bHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gMjUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMjsK KwkJdHhkaXYwID0gMTsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFf cmF0ZSA+PSAxMjUwMDAwMDApIHsKKwkJdHhkaXYgPSA0OworCQl0eGRpdjAgPSAyOworCQl0eGRp djEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAwMDApIHsKKwkJ dHhkaXYgPSA4OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAxOworCX0gZWxzZSBpZiAobWlw aV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTY7CisJCXR4ZGl2MCA9 IDI7CisJCXR4ZGl2MSA9IDI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ bXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkJ UkdfRFNJX1ZPVVRfTVNLIHwKKwkJCQlSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VO LAorCQkJCSg0IDw8IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8CisJCQkJKDQgPDwgMTEp IHwgKDQgPDwgOCkgfCAoNCA8PCA1KSB8CisJCQkJUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdf Q09SRV9FTik7CisKKwl1c2xlZXBfcmFuZ2UoMzAsIDEwMCk7CisKKwltdGtfbWlwaV90eF91cGRh dGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkJUkdfRFNJX0xOVF9JTVBf Q0FMX0NPREUgfCBSR19EU0lfTE5UX0hTX0JJQVNfRU4sCisJCQkJKDggPDwgNCkgfCBSR19EU0lf TE5UX0hTX0JJQVNfRU4pOworCisJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRY X0RTSV9DT04sCisJCQkgICAgIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVf RU4pOworCisJbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExf UFdSLAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fUFdSX09OIHwKKwkJCQlSR19EU0lfTVBQTExfU0RN X0lTT19FTiwKKwkJCQlSR19EU0lfTVBQTExfU0RNX1BXUl9PTik7CisKKwltdGtfbWlwaV90eF9j bGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkgICAgICAgUkdfRFNJ X01QUExMX1BMTF9FTik7CisKKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJ VFhfRFNJX1BMTF9DT04wLAorCQkJCVJHX0RTSV9NUFBMTF9UWERJVjAgfCBSR19EU0lfTVBQTExf VFhESVYxIHwKKwkJCQlSR19EU0lfTVBQTExfUFJFRElWLAorCQkJCSh0eGRpdjAgPDwgMykgfCAo dHhkaXYxIDw8IDUpKTsKKworCS8qCisJICogUExMIFBDVyBjb25maWcKKwkgKiBQQ1cgYml0IDI0 fjMwID0gaW50ZWdlciBwYXJ0IG9mIHBjdworCSAqIFBDVyBiaXQgMH4yMyA9IGZyYWN0aW9uYWwg cGFydCBvZiBwY3cKKwkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8oUmVmX2NsayoyKTsKKwkg KiBQb3N0IERJViA9NCwgc28gbmVlZCBkYXRhX1JhdGUqNAorCSAqIFJlZl9jbGsgaXMgMjZNSHoK KwkgKi8KKwlwY3cgPSAoKHU2NCltaXBpX3R4LT5kYXRhX3JhdGUgKiAyICogdHhkaXYpIDw8IDI0 OworCXBjdyAvPSAyNjAwMDAwMDsKKwl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQSVRY X0RTSV9QTExfQ09OMik7CisKKwltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhf RFNJX1BMTF9DT04xLAorCQkJICAgICBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7CisKKwltdGtf bWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQ TExfUExMX0VOKTsKKworCXVzbGVlcF9yYW5nZSgyMCwgMTAwKTsKKworCW10a19taXBpX3R4X2Ns ZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKKwkJCSAgICAgICBSR19EU0lf TVBQTExfU0RNX1NTQ19FTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX21p cGlfdHhfcGxsX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX21p cGlfdHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7CisKKwlkZXZfZGJn KG1pcGlfdHgtPmRldiwgInVucHJlcGFyZVxuIik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRz KG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkgICAgICAgUkdfRFNJX01QUExMX1BM TF9FTik7CisKKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BM TF9QV1IsCisJCQkJUkdfRFNJX01QUExMX1NETV9JU09fRU4gfAorCQkJCVJHX0RTSV9NUFBMTF9T RE1fUFdSX09OLAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOKTsKKworCW10a19taXBpX3R4 X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAorCQkJICAgICAgIFJHX0RT SV9MTlRfSFNfQklBU19FTik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1J UElUWF9EU0lfQ09OLAorCQkJICAgICAgIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xE T0NPUkVfRU4pOworCisJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJ X0JHX0NPTiwKKwkJCSAgICAgICBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsK KworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwK KwkJCSAgICAgICBSR19EU0lfTVBQTExfRElWX01TSyk7Cit9CisKK3N0YXRpYyBsb25nIG10a19t aXBpX3R4X3BsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJh dGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnByYXRlKQoreworCXJldHVybiBjbGFtcF92 YWwocmF0ZSwgNTAwMDAwMDAsIDEyNTAwMDAwMDApOworfQorCitzdGF0aWMgaW50IG10a19taXBp X3R4X3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAor CQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90 eCAqbWlwaV90eCA9IG10a19taXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKKworCWRldl9kYmcobWlw aV90eC0+ZGV2LCAic2V0IHJhdGU6ICVsdSBIelxuIiwgcmF0ZSk7CisKKwltaXBpX3R4LT5kYXRh X3JhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG10 a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJCSB1bnNp Z25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9 IG10a19taXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKKworCXJldHVybiBtaXBpX3R4LT5kYXRhX3Jh dGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtfbWlwaV90eF9wbGxfb3Bz ID0geworCS5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9 IG10a19taXBpX3R4X3BsbF91bnByZXBhcmUsCisJLnJvdW5kX3JhdGUgPSBtdGtfbWlwaV90eF9w bGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfc2V0X3JhdGUsCisJ LnJlY2FsY19yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlLAorfTsKKworc3RhdGlj IGludCBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwoc3RydWN0IHBoeSAqcGh5KQoreworCXN0 cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCXVuc2ln bmVkIGludCByZWc7CisKKwlmb3IgKHJlZyA9IE1JUElUWF9EU0lfQ0xPQ0tfTEFORTsKKwkgICAg IHJlZyA8PSBNSVBJVFhfRFNJX0RBVEFfTEFORTM7IHJlZyArPSA0KQorCQltdGtfbWlwaV90eF9z ZXRfYml0cyhtaXBpX3R4LCByZWcsIFJHX0RTSV9MTlR4X0xET09VVF9FTik7CisKKwltdGtfbWlw aV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwKKwkJCSAgICAgICBS R19EU0lfUEFEX1RJRV9MT1dfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRr X21pcGlfdHhfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90 eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCWludCByZXQ7CisKKwkvKiBQb3dl ciB1cCBjb3JlIGFuZCBlbmFibGUgUExMICovCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1p cGlfdHgtPnBsbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUg RFNJIExhbmUgTERPIG91dHB1dHMsIGRpc2FibGUgcGFkIHRpZSBsb3cgKi8KKwltdGtfbWlwaV90 eF9wb3dlcl9vbl9zaWduYWwocGh5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBt dGtfbWlwaV90eF9wb3dlcl9vZmZfc2lnbmFsKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3Qg bXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwl1bnNpZ25lZCBp bnQgcmVnOworCisJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1Bf Q09OLAorCQkJICAgICBSR19EU0lfUEFEX1RJRV9MT1dfRU4pOworCisJZm9yIChyZWcgPSBNSVBJ VFhfRFNJX0NMT0NLX0xBTkU7CisJICAgICByZWcgPD0gTUlQSVRYX0RTSV9EQVRBX0xBTkUzOyBy ZWcgKz0gNCkKKwkJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCByZWcsIFJHX0RTSV9M TlR4X0xET09VVF9FTik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmKHN0 cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0 X2RydmRhdGEocGh5KTsKKworCS8qIEVuYWJsZSBwYWQgdGllIGxvdywgZGlzYWJsZSBEU0kgTGFu ZSBMRE8gb3V0cHV0cyAqLworCW10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwocGh5KTsKKwor CS8qIERpc2FibGUgUExMIGFuZCBwb3dlciBkb3duIGNvcmUgKi8KKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUobWlwaV90eC0+cGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHBoeV9vcHMgbXRrX21pcGlfdHhfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19taXBpX3R4 X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYgPSBtdGtfbWlwaV90eF9wb3dlcl9vZmYsCisJLm93bmVy ID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHg7CisJc3RydWN0IHJlc291cmNlICpt ZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFyICpyZWZfY2xrX25hbWU7CisJ c3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5vcHMgPSAmbXRrX21pcGlfdHhf cGxsX29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBj aGFyICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfR0FU RSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJv dmlkZXI7CisJaW50IHJldDsKKworCW1pcGlfdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo Km1pcGlfdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1pcGlfdHgpCisJCXJldHVybiAtRU5PTUVN OworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKKwltaXBpX3R4LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKKwlp ZiAoSVNfRVJSKG1pcGlfdHgtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+cmVn cyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2 LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVmX2Ns ayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRfbmFt ZShyZWZfY2xrKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9k ZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0cHV0 LW5hbWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltaXBpX3R4LT5wbGxf aHcuaW5pdCA9ICZjbGtfaW5pdDsKKwltaXBpX3R4LT5wbGwgPSBkZXZtX2Nsa19yZWdpc3Rlcihk ZXYsICZtaXBpX3R4LT5wbGxfaHcpOworCWlmIChJU19FUlIobWlwaV90eC0+cGxsKSkgeworCQly ZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnBsbCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJl Z2lzdGVyIFBMTDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGh5ID0gZGV2 bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19taXBpX3R4X29wcyk7CisJaWYgKElTX0VSUihw aHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g Y3JlYXRlIE1JUEkgRC1QSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHlf c2V0X2RydmRhdGEocGh5LCBtaXBpX3R4KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5 X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisJaWYgKElTX0VS UihwaHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwltaXBpX3R4LT5kZXYgPSBkZXY7CisKKwlyZXR1cm4gb2ZfY2xrX2FkZF9wcm92aWRl cihkZXYtPm9mX25vZGUsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwKKwkJCQkgICBtaXBpX3R4LT5w bGwpOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCW9mX2Nsa19kZWxfcHJvdmlkZXIocGRldi0+ZGV2Lm9mX25vZGUp OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtf bWlwaV90eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1p cGktdHgiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlwaV90 eF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX21pcGlfdHhfcHJvYmUsCisJLnJlbW92ZSA9IG10 a19taXBpX3R4X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1taXBp LXR4IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX21pcGlfdHhfbWF0Y2gsCisJfSwKK307Ci0t IAoyLjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==