From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v7.1 3/5] drm: rockchip: Support Synopsys DW MIPI DSI Date: Wed, 6 Jan 2016 15:12:09 +0800 Message-ID: <1452064329-25897-1-git-send-email-zyw@rock-chips.com> References: <568CB47B.1010205@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <568CB47B.1010205@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: heiko@sntech.de, linux-rockchip@lists.infradead.org, treding@nvidia.com, mark.yao@rock-chips.com Cc: Chris Zhong , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgY29udHJvbGxlciB3 aGljaCBpcwplbWJlZGRlZCBpbiB0aGUgcmszMjg4IFNvQ3MuCgpTaWduZWQtb2ZmLWJ5OiBDaHJp cyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgpBY2tlZC1ieTogTWFyayBZYW8gPG1hcmsueWFv QHJvY2stY2hpcHMuY29tPgotLS0KCkNoYW5nZXMgaW4gdjcuMToKLSBtYWtlIHN1cmUgZGlzYWJs ZSBjbGsgd2hlbiBkcm1fcGFuZWxfcHJlcGFyZSBlcnIgKE1hcmsgWWFvKQoKQ2hhbmdlcyBpbiB2 NzoKLSBtb2RpZnkgdGhlIGNvbmZpZyB0byB0cmlzdGF0ZSBmb3IgbW9kdWxlcyBidWlsZCAoTWFy ayBZYW8pCi0gUGFzcyBOVUxMICduYW1lJyB0byBkcm1fZW5jb2Rlcl9pbml0KCkgdG8gZml4IGNv bXBpbGUgZXJyIChNYXJrIFlhbykKCkNoYW5nZXMgaW4gdjY6Ci0gbW92ZSB0aGUgbWlwaV9lbiBn YXRlIHRvIG9ja2NoaXBfZHJtX2NydGNfbW9kZV9jb25maWcKLSBSZW1vdmUgdGhlIGF0b21pYyBm ZWF0dXJlIGNoZWNrIChNYXJrIFlhbykKLSBBZGQgYXRvbWljIEFQSSBzdXBwb3J0IChIZWlrbyBT dMO8Ym5lKQotIERvIG5vdCB1c2UgYnJpZGdlIGRyaXZlciAoVGhpZXJyeSBSZWRpbmcpCi0gT3B0 aW1pemF0aW9uIHRoZSBwaHkgaW5pdCBzZXF1ZW5jZQoKQ2hhbmdlcyBpbiB2NTogTm9uZQpDaGFu Z2VzIGluIHY0OiBOb25lCkNoYW5nZXMgaW4gdjM6IE5vbmUKCiBkcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvS2NvbmZpZyAgICAgICAgICAgIHwgICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv ZHctbWlwaS1kc2kuYyAgICAgIHwgMTE5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgfCAgICAzICsKIDQgZmls ZXMgY2hhbmdlZCwgMTIxMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmln CmluZGV4IDM1MjE1ZjYuLjg1NzM5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCkBAIC0y NSwzICsyNSwxMyBAQCBjb25maWcgUk9DS0NISVBfRFdfSERNSQogCSAgZm9yIHRoZSBTeW5vcHN5 cyBEZXNpZ25XYXJlIEhETUkgZHJpdmVyLiBJZiB5b3Ugd2FudCB0bwogCSAgZW5hYmxlIEhETUkg b24gUkszMjg4IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzCiAJICBvcHRpb24uCisK K2NvbmZpZyBST0NLQ0hJUF9EV19NSVBJX0RTSQorCXRyaXN0YXRlICJSb2NrY2hpcCBzcGVjaWZp YyBleHRlbnNpb25zIGZvciBTeW5vcHN5cyBEVyBNSVBJIERTSSIKKwlkZXBlbmRzIG9uIERSTV9S T0NLQ0hJUAorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwloZWxwCisJIFRoaXMgc2VsZWN0cyBzdXBw b3J0IGZvciBSb2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5zaW9ucworCSBmb3IgdGhlIFN5bm9w c3lzIERlc2lnbldhcmUgSERNSSBkcml2ZXIuIElmIHlvdSB3YW50IHRvCisJIGVuYWJsZSBNSVBJ IERTSSBvbiBSSzMyODggYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGV0IHRoaXMKKwkgb3B0aW9u LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCmluZGV4IGE5ZDM4MGYuLmQxZGMwZjcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBAIHJvY2tjaGlwZHJtLXkgOj0g cm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlwX2RybV9mYi5vIHJvY2tjaGlwX2RybV9mYmRldi5v IFwKIAkJcm9ja2NoaXBfZHJtX2dlbS5vCiAKIG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19IRE1J KSArPSBkd19oZG1pLXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9EV19NSVBJX0RT SSkgKz0gZHctbWlwaS1kc2kubwogCiBvYmotJChDT05GSUdfRFJNX1JPQ0tDSElQKSArPSByb2Nr Y2hpcGRybS5vIHJvY2tjaGlwX2RybV92b3AubyBcCiAJCQkJcm9ja2NoaXBfdm9wX3JlZy5vCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYyBiL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmEzNmNmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvZHctbWlwaS1kc2kuYwpAQCAtMCwwICsxLDExOTcgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMTYsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNp bmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNp bmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNs dWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlICJyb2NrY2hpcF9k cm1fZHJ2LmgiCisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5oIgorCisjZGVmaW5lIERSSVZF Ul9OQU1FICAgICJkdy1taXBpLWRzaSIKKworI2RlZmluZSBHUkZfU09DX0NPTjYgICAgICAgICAg ICAgICAgICAgIDB4MDI1YworI2RlZmluZSBEU0kwX1NFTF9WT1BfTElUICAgICAgICAgICAgICAg ICgxIDw8IDYpCisjZGVmaW5lIERTSTFfU0VMX1ZPUF9MSVQgICAgICAgICAgICAgICAgKDEgPDwg OSkKKworI2RlZmluZSBEU0lfVkVSU0lPTgkJCTB4MDAKKyNkZWZpbmUgRFNJX1BXUl9VUAkJCTB4 MDQKKyNkZWZpbmUgUkVTRVQJCQkJMAorI2RlZmluZSBQT1dFUlVQCQkJCUJJVCgwKQorCisjZGVm aW5lIERTSV9DTEtNR1JfQ0ZHCQkJMHgwOAorI2RlZmluZSBUT19DTEtfRElWSURTSU9OKGRpdikJ CSgoKGRpdikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBUWF9FU0NfQ0xLX0RJVklEU0lPTihkaXYp CSgoKGRpdikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9EUElfVkNJRAkJCTB4MGMKKyNk ZWZpbmUgRFBJX1ZJRCh2aWQpCQkJKCgodmlkKSAmIDB4MykgPDwgMCkKKworI2RlZmluZSBEU0lf RFBJX0NPTE9SX0NPRElORwkJMHgxMAorI2RlZmluZSBFTjE4X0xPT1NFTFkJCQlCSVQoOCkKKyNk ZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8xCTB4MAorI2RlZmluZSBEUElfQ09MT1JfQ09E SU5HXzE2QklUXzIJMHgxCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMwkweDIKKyNk ZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xOEJJVF8xCTB4MworI2RlZmluZSBEUElfQ09MT1JfQ09E SU5HXzE4QklUXzIJMHg0CisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMjRCSVQJCTB4NQorCisj ZGVmaW5lIERTSV9EUElfQ0ZHX1BPTAkJCTB4MTQKKyNkZWZpbmUgQ09MT1JNX0FDVElWRV9MT1cJ CUJJVCg0KQorI2RlZmluZSBTSFVURF9BQ1RJVkVfTE9XCQlCSVQoMykKKyNkZWZpbmUgSFNZTkNf QUNUSVZFX0xPVwkJQklUKDIpCisjZGVmaW5lIFZTWU5DX0FDVElWRV9MT1cJCUJJVCgxKQorI2Rl ZmluZSBEQVRBRU5fQUNUSVZFX0xPVwkJQklUKDApCisKKyNkZWZpbmUgRFNJX0RQSV9MUF9DTURf VElNCQkweDE4CisjZGVmaW5lIE9VVFZBQ1RfTFBDTURfVElNRShwKQkJKCgocCkgJiAweGZmKSA8 PCAxNikKKyNkZWZpbmUgSU5WQUNUX0xQQ01EX1RJTUUocCkJCSgocCkgJiAweGZmKQorCisjZGVm aW5lIERTSV9EQklfQ0ZHCQkJMHgyMAorI2RlZmluZSBEU0lfREJJX0NNRFNJWkUJCQkweDI4CisK KyNkZWZpbmUgRFNJX1BDS0hETF9DRkcJCQkweDJjCisjZGVmaW5lIEVOX0NSQ19SWAkJCUJJVCg0 KQorI2RlZmluZSBFTl9FQ0NfUlgJCQlCSVQoMykKKyNkZWZpbmUgRU5fQlRBCQkJCUJJVCgyKQor I2RlZmluZSBFTl9FT1RQX1JYCQkJQklUKDEpCisjZGVmaW5lIEVOX0VPVFBfVFgJCQlCSVQoMCkK KworI2RlZmluZSBEU0lfTU9ERV9DRkcJCQkweDM0CisjZGVmaW5lIEVOQUJMRV9WSURFT19NT0RF CQkwCisjZGVmaW5lIEVOQUJMRV9DTURfTU9ERQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURf TU9ERV9DRkcJCTB4MzgKKyNkZWZpbmUgRlJBTUVfQlRBX0FDSwkJCUJJVCgxNCkKKyNkZWZpbmUg RU5BQkxFX0xPV19QT1dFUgkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgRU5BQkxFX0xPV19QT1dFUl9N QVNLCQkoMHgzZiA8PCA4KQorI2RlZmluZSBWSURfTU9ERV9UWVBFX0JVUlNUX1NZTkNfUFVMU0VT CQkweDIKKyNkZWZpbmUgVklEX01PREVfVFlQRV9NQVNLCQkJMHgzCisKKyNkZWZpbmUgRFNJX1ZJ RF9QS1RfU0laRQkJMHgzYworI2RlZmluZSBWSURfUEtUX1NJWkUocCkJCQkoKChwKSAmIDB4M2Zm ZikgPDwgMCkKKyNkZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHgzZmZmCisKKyNkZWZpbmUgRFNJ X1ZJRF9IU0FfVElNRQkJMHg0OAorI2RlZmluZSBEU0lfVklEX0hCUF9USU1FCQkweDRjCisjZGVm aW5lIERTSV9WSURfSExJTkVfVElNRQkJMHg1MAorI2RlZmluZSBEU0lfVklEX1ZTQV9MSU5FUwkJ MHg1NAorI2RlZmluZSBEU0lfVklEX1ZCUF9MSU5FUwkJMHg1OAorI2RlZmluZSBEU0lfVklEX1ZG UF9MSU5FUwkJMHg1YworI2RlZmluZSBEU0lfVklEX1ZBQ1RJVkVfTElORVMJCTB4NjAKKyNkZWZp bmUgRFNJX0NNRF9NT0RFX0NGRwkJMHg2OAorI2RlZmluZSBNQVhfUkRfUEtUX1NJWkVfTFAJCUJJ VCgyNCkKKyNkZWZpbmUgRENTX0xXX1RYX0xQCQkJQklUKDE5KQorI2RlZmluZSBEQ1NfU1JfMFBf VFhfTFAJCQlCSVQoMTgpCisjZGVmaW5lIERDU19TV18xUF9UWF9MUAkJCUJJVCgxNykKKyNkZWZp bmUgRENTX1NXXzBQX1RYX0xQCQkJQklUKDE2KQorI2RlZmluZSBHRU5fTFdfVFhfTFAJCQlCSVQo MTQpCisjZGVmaW5lIEdFTl9TUl8yUF9UWF9MUAkJCUJJVCgxMykKKyNkZWZpbmUgR0VOX1NSXzFQ X1RYX0xQCQkJQklUKDEyKQorI2RlZmluZSBHRU5fU1JfMFBfVFhfTFAJCQlCSVQoMTEpCisjZGVm aW5lIEdFTl9TV18yUF9UWF9MUAkJCUJJVCgxMCkKKyNkZWZpbmUgR0VOX1NXXzFQX1RYX0xQCQkJ QklUKDkpCisjZGVmaW5lIEdFTl9TV18wUF9UWF9MUAkJCUJJVCg4KQorI2RlZmluZSBFTl9BQ0tf UlFTVAkJCUJJVCgxKQorI2RlZmluZSBFTl9URUFSX0ZYCQkJQklUKDApCisKKyNkZWZpbmUgQ01E X01PREVfQUxMX0xQCQkJKE1BWF9SRF9QS1RfU0laRV9MUCB8IFwKKwkJCQkJIERDU19MV19UWF9M UCB8IFwKKwkJCQkJIERDU19TUl8wUF9UWF9MUCB8IFwKKwkJCQkJIERDU19TV18xUF9UWF9MUCB8 IFwKKwkJCQkJIERDU19TV18wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKKwkJ CQkJIEdFTl9TUl8yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwKKwkJCQkJ IEdFTl9TUl8wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18yUF9UWF9MUCB8IFwKKwkJCQkJIEdF Tl9TV18xUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18wUF9UWF9MUCkKKworI2RlZmluZSBEU0lf R0VOX0hEUgkJCTB4NmMKKyNkZWZpbmUgR0VOX0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkgJiAweGZm ZmYpIDw8IDgpCisjZGVmaW5lIEdFTl9IREFUQV9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmlu ZSBHRU5fSFRZUEUodHlwZSkJCQkoKCh0eXBlKSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEdFTl9I VFlQRV9NQVNLCQkJMHhmZgorCisjZGVmaW5lIERTSV9HRU5fUExEX0RBVEEJCTB4NzAKKworI2Rl ZmluZSBEU0lfQ01EX1BLVF9TVEFUVVMJCTB4NzQKKyNkZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJ VCgwKQorI2RlZmluZSBHRU5fQ01EX0ZVTEwJCQlCSVQoMSkKKyNkZWZpbmUgR0VOX1BMRF9XX0VN UFRZCQkJQklUKDIpCisjZGVmaW5lIEdFTl9QTERfV19GVUxMCQkJQklUKDMpCisjZGVmaW5lIEdF Tl9QTERfUl9FTVBUWQkJCUJJVCg0KQorI2RlZmluZSBHRU5fUExEX1JfRlVMTAkJCUJJVCg1KQor I2RlZmluZSBHRU5fUkRfQ01EX0JVU1kJCQlCSVQoNikKKworI2RlZmluZSBEU0lfVE9fQ05UX0NG RwkJCTB4NzgKKyNkZWZpbmUgSFNUWF9UT19DTlQocCkJCQkoKChwKSAmIDB4ZmZmZikgPDwgMTYp CisjZGVmaW5lIExQUlhfVE9fQ05UKHApCQkJKChwKSAmIDB4ZmZmZikKKworI2RlZmluZSBEU0lf QlRBX1RPX0NOVAkJCTB4OGMKKworI2RlZmluZSBEU0lfTFBDTEtfQ1RSTAkJCTB4OTQKKyNkZWZp bmUgQVVUT19DTEtMQU5FX0NUUkwJCUJJVCgxKQorI2RlZmluZSBQSFlfVFhSRVFVRVNUQ0xLSFMJ CUJJVCgwKQorCisjZGVmaW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJMHg5OAorI2RlZmluZSBQ SFlfQ0xLSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweDNmZikgPDwgMTYpCisjZGVmaW5l IFBIWV9DTEtMUDJIU19USU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYpCisKKyNkZWZpbmUgRFNJ X1BIWV9UTVJfQ0ZHCQkJMHg5YworI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJKCgobGJj YykgJiAweGZmKSA8PCAyNCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2Mp ICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIE1BWF9SRF9USU1FKGxiY2MpCQkoKGxiY2MpICYgMHg3 ZmZmKQorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKKyNkZWZpbmUgUEhZX0RJU0ZPUkNF UExMCQkJMAorI2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQorI2RlZmluZSBQSFlfRElT QUJMRUNMSwkJCTAKKyNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQorI2RlZmluZSBQSFlf UlNUWgkJCTAKKyNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2RlZmluZSBQSFlfU0hVVERP V05aCQkJMAorI2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKKworI2RlZmluZSBEU0lf UEhZX0lGX0NGRwkJCTB4YTQKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgz KSA8PCAwKQorI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4 ZmYpIDw8IDgpCisKKyNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCisjZGVmaW5lIExPQ0sJ CQkJQklUKDApCisjZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQorCisjZGVmaW5l IERTSV9QSFlfVFNUX0NUUkwwCQkweGI0CisjZGVmaW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCisj ZGVmaW5lIFBIWV9VTlRFU1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCisj ZGVmaW5lIFBIWV9VTlRFU1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4 YjgKKyNkZWZpbmUgUEhZX1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJ MAorI2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5l IFBIWV9URVNURElOKG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9JTlRf U1QwCQkJMHhiYworI2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKKyNkZWZpbmUgRFNJX0lOVF9N U0swCQkJMHhjNAorI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4CisKKyNkZWZpbmUgUEhZX1NU QVRVU19USU1FT1VUX1VTCQkxMDAwMAorI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VT CTIwMDAwCisKKyNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykKKyNkZWZpbmUgVkNPX1JB TkdFX0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQorI2RlZmluZSBWQ09fSU5fQ0FQ X0NPTl9ERUZBVUxUCSgweDAgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEg PDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8IDEpCisjZGVmaW5lIFJF Rl9CSUFTX0NVUl9TRUwJQklUKDApCisKKyNkZWZpbmUgQ1BfQ1VSUkVOVF8zTUEJCUJJVCgzKQor I2RlZmluZSBDUF9QUk9HUkFNX0VOCQlCSVQoNykKKyNkZWZpbmUgTFBGX1BST0dSQU1fRU4JCUJJ VCg2KQorI2RlZmluZSBMUEZfUkVTSVNUT1JTXzIwX0tPSE0JMAorCisjZGVmaW5lIEhTRlJFUVJB TkdFX1NFTCh2YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQorCisjZGVmaW5lIElOUFVUX0RJVklE RVIodmFsKQkoKHZhbCAtIDEpICYgMHg3ZikKKyNkZWZpbmUgTE9XX1BST0dSQU1fRU4JCTAKKyNk ZWZpbmUgSElHSF9QUk9HUkFNX0VOCQlCSVQoNykKKyNkZWZpbmUgTE9PUF9ESVZfTE9XX1NFTCh2 YWwpCSgodmFsIC0gMSkgJiAweDFmKQorI2RlZmluZSBMT09QX0RJVl9ISUdIX1NFTCh2YWwpCSgo KHZhbCAtIDEpID4+IDUpICYgMHgxZikKKyNkZWZpbmUgUExMX0xPT1BfRElWX0VOCQlCSVQoNSkK KyNkZWZpbmUgUExMX0lOUFVUX0RJVl9FTglCSVQoNCkKKworI2RlZmluZSBQT1dFUl9DT05UUk9M CQlCSVQoNikKKyNkZWZpbmUgSU5URVJOQUxfUkVHX0NVUlJFTlQJQklUKDMpCisjZGVmaW5lIEJJ QVNfQkxPQ0tfT04JCUJJVCgyKQorI2RlZmluZSBCQU5ER0FQX09OCQlCSVQoMCkKKworI2RlZmlu ZSBURVJfUkVTSVNUT1JfSElHSAlCSVQoNykKKyNkZWZpbmUJVEVSX1JFU0lTVE9SX0xPVwkwCisj ZGVmaW5lIExFVkVMX1NISUZURVJTX09OCUJJVCg2KQorI2RlZmluZSBURVJfQ0FMX0RPTkUJCUJJ VCg1KQorI2RlZmluZSBTRVRSRF9NQVgJCSgweDcgPDwgMikKKyNkZWZpbmUgUE9XRVJfTUFOQUdF CQlCSVQoMSkKKyNkZWZpbmUgVEVSX1JFU0lTVE9SU19PTglCSVQoMCkKKworI2RlZmluZSBCSUFT RVhUUl9TRUwodmFsKQkoKHZhbCkgJiAweDcpCisjZGVmaW5lIEJBTkRHQVBfU0VMKHZhbCkJKCh2 YWwpICYgMHg3KQorI2RlZmluZSBUTFBfUFJPR1JBTV9FTgkJQklUKDcpCisjZGVmaW5lIFRIU19Q UkVfUFJPR1JBTV9FTglCSVQoNykKKyNkZWZpbmUgVEhTX1pFUk9fUFJPR1JBTV9FTglCSVQoNikK KworZW51bSB7CisJQkFOREdBUF85N18wNywKKwlCQU5ER0FQXzk4XzA1LAorCUJBTkRHQVBfOTlf MDIsCisJQkFOREdBUF8xMDBfMDAsCisJQkFOREdBUF85M18xNywKKwlCQU5ER0FQXzk0XzE1LAor CUJBTkRHQVBfOTVfMTIsCisJQkFOREdBUF85Nl8xMCwKK307CisKK2VudW0geworCUJJQVNFWFRS Xzg3XzEsCisJQklBU0VYVFJfOTFfNSwKKwlCSUFTRVhUUl85NV85LAorCUJJQVNFWFRSXzEwMCwK KwlCSUFTRVhUUl8xMDVfOTQsCisJQklBU0VYVFJfMTExXzg4LAorCUJJQVNFWFRSXzExOF84LAor CUJJQVNFWFRSXzEyN183LAorfTsKKworc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSB7CisJ dW5zaWduZWQgaW50IG1heF9kYXRhX2xhbmVzOworCWVudW0gZHJtX21vZGVfc3RhdHVzICgqbW9k ZV92YWxpZCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworfTsKKworc3RydWN0IGR3X21pcGlfZHNpIHsKKwlz dHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0 b3I7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7CisJc3RydWN0IGRybV9wYW5lbCAq cGFuZWw7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZWdtYXAgKmdyZl9yZWdtYXA7 CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJc3RydWN0IGNsayAqcGxscmVmX2NsazsKKwlzdHJ1 Y3QgY2xrICpwY2xrOworCisJdW5zaWduZWQgaW50IGxhbmVfbWJwczsgLyogcGVyIGxhbmUgKi8K Kwl1MzIgY2hhbm5lbDsKKwl1MzIgbGFuZXM7CisJdTMyIGZvcm1hdDsKKwl1MTYgaW5wdXRfZGl2 OworCXUxNiBmZWVkYmFja19kaXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisK Kwljb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YTsKK307CisKK2VudW0g ZHdfbWlwaV9kc2lfbW9kZSB7CisJRFdfTUlQSV9EU0lfQ01EX01PREUsCisJRFdfTUlQSV9EU0lf VklEX01PREUsCit9OworCitzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgeworCXVuc2lnbmVk IGludCBtYXhfbWJwczsKKwl1OCB0ZXN0ZGluOworfTsKKworLyogVGhlIHRhYmxlIGlzIGJhc2Vk IG9uIDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgZHB0ZGluX21hcFtdID0geworCXsgIDkwLCAweDAwfSwg eyAxMDAsIDB4MTB9LCB7IDExMCwgMHgyMH0sIHsgMTMwLCAweDAxfSwKKwl7IDE0MCwgMHgxMX0s IHsgMTUwLCAweDIxfSwgeyAxNzAsIDB4MDJ9LCB7IDE4MCwgMHgxMn0sCisJeyAyMDAsIDB4MjJ9 LCB7IDIyMCwgMHgwM30sIHsgMjQwLCAweDEzfSwgeyAyNTAsIDB4MjN9LAorCXsgMjcwLCAweDA0 fSwgeyAzMDAsIDB4MTR9LCB7IDMzMCwgMHgwNX0sIHsgMzYwLCAweDE1fSwKKwl7IDQwMCwgMHgy NX0sIHsgNDUwLCAweDA2fSwgeyA1MDAsIDB4MTZ9LCB7IDU1MCwgMHgwN30sCisJeyA2MDAsIDB4 MTd9LCB7IDY1MCwgMHgwOH0sIHsgNzAwLCAweDE4fSwgeyA3NTAsIDB4MDl9LAorCXsgODAwLCAw eDE5fSwgeyA4NTAsIDB4Mjl9LCB7IDkwMCwgMHgzOX0sIHsgOTUwLCAweDBhfSwKKwl7MTAwMCwg MHgxYX0sIHsxMDUwLCAweDJhfSwgezExMDAsIDB4M2F9LCB7MTE1MCwgMHgwYn0sCisJezEyMDAs IDB4MWJ9LCB7MTI1MCwgMHgyYn0sIHsxMzAwLCAweDNifSwgezEzNTAsIDB4MGN9LAorCXsxNDAw LCAweDFjfSwgezE0NTAsIDB4MmN9LCB7MTUwMCwgMHgzY30KK307CisKK3N0YXRpYyBpbnQgbWF4 X21icHNfdG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4X21icHMpCit7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKQorCQlpZiAoZHB0ZGlu X21hcFtpXS5tYXhfbWJwcyA+IG1heF9tYnBzKQorCQkJcmV0dXJuIGRwdGRpbl9tYXBbaV0udGVz dGRpbjsKKworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogVGhlIGNvbnRyb2xsZXIgc2hv dWxkIGdlbmVyYXRlIDIgZnJhbWVzIGJlZm9yZQorICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFs LgorICovCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKHN0cnVj dCBkd19taXBpX2RzaSAqZHNpKQoreworCWludCByZWZyZXNoLCB0d29fZnJhbWVzOworCisJcmVm cmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKGRzaS0+bW9kZSk7CisJdHdvX2ZyYW1lcyA9IERJVl9S T1VORF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKKwltc2xlZXAodHdvX2ZyYW1lcyk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpob3N0X3RvX2RzaShzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhvc3QsIHN0 cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBk d19taXBpX2RzaSAqY29uX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uKQoreworCXJl dHVybiBjb250YWluZXJfb2YoY29uLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGNvbm5lY3Rvcik7Cit9 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICplbmNvZGVyX3RvX2RzaShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlbmNvZGVy LCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGVuY29kZXIpOworfQorc3RhdGljIGlubGluZSB2b2lkIGRz aV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl3 cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBkc2lf cmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVhZGwo ZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGh5X3dyaXRl KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1OCB0ZXN0X2NvZGUsCisJCQkJIHU4IHRlc3RfZGF0 YSkKK3sKKwkvKgorCSAqIFdpdGggdGhlIGZhbGxpbmcgZWRnZSBvbiBURVNUQ0xLLCB0aGUgVEVT VERJTls3OjBdIHNpZ25hbCBjb250ZW50CisJICogaXMgbGF0Y2hlZCBpbnRlcm5hbGx5IGFzIHRo ZSBjdXJyZW50IHRlc3QgY29kZS4gVGVzdCBkYXRhIGlzCisJICogcHJvZ3JhbW1lZCBpbnRlcm5h bGx5IGJ5IHJpc2luZyBlZGdlIG9uIFRFU1RDTEsuCisJICovCisJZHNpX3dyaXRlKGRzaSwgRFNJ X1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8 CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdF9jb2RlKSk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lf UEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCisJZHNpX3dy aXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9VTlRFU1RFTiB8IFBIWV9URVNURE9VVCgw KSB8CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdF9kYXRhKSk7CisKKwlkc2lfd3JpdGUoZHNpLCBE U0lfUEhZX1RTVF9DVFJMMCwgUEhZX1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKK30KKworc3Rh dGljIGludCBkd19taXBpX2RzaV9waHlfaW5pdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sK KwlpbnQgcmV0LCB0ZXN0ZGluLCB2Y28sIHZhbDsKKworCXZjbyA9IChkc2ktPmxhbmVfbWJwcyA8 IDIwMCkgPyAwIDogKGRzaS0+bGFuZV9tYnBzICsgMTAwKSAvIDIwMDsKKworCXRlc3RkaW4gPSBt YXhfbWJwc190b190ZXN0ZGluKGRzaS0+bGFuZV9tYnBzKTsKKwlpZiAodGVzdGRpbiA8IDApIHsK KwkJZGV2X2Vycihkc2ktPmRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IHRlc3RkaW4gZm9yICVkbWJw cyBsYW5lIGNsb2NrXG4iLAorCQkJZHNpLT5sYW5lX21icHMpOworCQlyZXR1cm4gdGVzdGRpbjsK Kwl9CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKKworCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIDB4MTAsIEJZUEFTU19WQ09fUkFOR0UgfAorCQkJCQkgVkNPX1JB TkdFX0NPTl9TRUwodmNvKSB8CisJCQkJCSBWQ09fSU5fQ0FQX0NPTl9MT1cgfAorCQkJCQkgUkVG X0JJQVNfQ1VSX1NFTCk7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDExLCBDUF9D VVJSRU5UXzNNQSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxMiwgQ1BfUFJPR1JB TV9FTiB8IExQRl9QUk9HUkFNX0VOIHwKKwkJCQkJIExQRl9SRVNJU1RPUlNfMjBfS09ITSk7CisK Kwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDQ0LCBIU0ZSRVFSQU5HRV9TRUwodGVzdGRp bikpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxOSwgUExMX0xPT1BfRElWX0VO IHwgUExMX0lOUFVUX0RJVl9FTik7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxNywg SU5QVVRfRElWSURFUihkc2ktPmlucHV0X2RpdikpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShk c2ksIDB4MTgsIExPT1BfRElWX0xPV19TRUwoZHNpLT5mZWVkYmFja19kaXYpIHwKKwkJCQkJIExP V19QUk9HUkFNX0VOKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE4LCBMT09QX0RJ Vl9ISUdIX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAorCQkJCQkgSElHSF9QUk9HUkFNX0VOKTsK KworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjAsIFBPV0VSX0NPTlRST0wgfCBJTlRF Uk5BTF9SRUdfQ1VSUkVOVCB8CisJCQkJCSBCSUFTX0JMT0NLX09OIHwgQkFOREdBUF9PTik7CisK Kwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIxLCBURVJfUkVTSVNUT1JfTE9XIHwgVEVS X0NBTF9ET05FIHwKKwkJCQkJIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RPUlNfT04pOworCWR3X21p cGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJU1RPUl9ISUdIIHwgTEVWRUxfU0hJ RlRFUlNfT04gfAorCQkJCQkgU0VUUkRfTUFYIHwgUE9XRVJfTUFOQUdFIHwKKwkJCQkJIFRFUl9S RVNJU1RPUlNfT04pOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMiwgTE9XX1BS T0dSQU1fRU4gfAorCQkJCQkgQklBU0VYVFJfU0VMKEJJQVNFWFRSXzEyN183KSk7CisJZHdfbWlw aV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMiwgSElHSF9QUk9HUkFNX0VOIHwKKwkJCQkJIEJBTkRH QVBfU0VMKEJBTkRHQVBfOTZfMTApKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4 NzAsIFRMUF9QUk9HUkFNX0VOIHwgMHhmKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAw eDcxLCBUSFNfUFJFX1BST0dSQU1fRU4gfCAweDU1KTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUo ZHNpLCAweDcyLCBUSFNfWkVST19QUk9HUkFNX0VOIHwgMHhhKTsKKworCWRzaV93cml0ZShkc2ks IERTSV9QSFlfUlNUWiwgUEhZX0VORk9SQ0VQTEwgfCBQSFlfRU5BQkxFQ0xLIHwKKwkJCQkgICAg IFBIWV9VTlJTVFogfCBQSFlfVU5TSFVURE9XTlopOworCisKKwlyZXQgPSByZWFkeF9wb2xsX3Rp bWVvdXQocmVhZGwsIGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAorCQkJCSB2YWwsIHZhbCAm IExPQ0ssIDEwMDAsIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byB3YWl0IGZvciBwaHkgbG9jayBzdGF0ZVxuIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBk c2ktPmJhc2UgKyBEU0lfUEhZX1NUQVRVUywKKwkJCQkgdmFsLCB2YWwgJiBTVE9QX1NUQVRFX0NM S19MQU5FLCAxMDAwLAorCQkJCSBQSFlfU1RBVFVTX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsCisJCQkiZmFpbGVkIHRvIHdhaXQgZm9yIHBoeSBjbGsg bGFuZSBzdG9wIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dldF9sYW5lX2JwcyhzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQgYnBwLCBpLCBwcmU7CisJdW5zaWduZWQgbG9uZyBt cGNsaywgcGxscmVmLCB0bXA7CisJdW5zaWduZWQgaW50IG0gPSAxLCBuID0gMSwgdGFyZ2V0X21i cHMgPSAxMDAwOworCXVuc2lnbmVkIGludCBtYXhfbWJwcyA9IGRwdGRpbl9tYXBbQVJSQVlfU0la RShkcHRkaW5fbWFwKSAtIDFdLm1heF9tYnBzOworCisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9y bWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisJaWYgKGJwcCA8IDApIHsKKwkJZGV2X2Vycihkc2kt PmRldiwgImZhaWxlZCB0byBnZXQgYnBwIGZvciBwaXhlbCBmb3JtYXQgJWRcbiIsCisJCQlkc2kt PmZvcm1hdCk7CisJCXJldHVybiBicHA7CisJfQorCisJbXBjbGsgPSBESVZfUk9VTkRfVVAoZHNp LT5tb2RlLT5jbG9jaywgTVNFQ19QRVJfU0VDKTsKKwlpZiAobXBjbGspIHsKKwkJLyogdGFrZSAx IC8gMC45LCBzaW5jZSBtYnBzIG11c3QgYmlnIHRoYW4gYmFuZHdpZHRoIG9mIFJHQiAqLworCQl0 bXAgPSBtcGNsayAqIChicHAgLyBkc2ktPmxhbmVzKSAqIDEwIC8gOTsKKwkJaWYgKHRtcCA8IG1h eF9tYnBzKQorCQkJdGFyZ2V0X21icHMgPSB0bXA7CisJCWVsc2UKKwkJCWRldl9lcnIoZHNpLT5k ZXYsICJEUEhZIGNsb2NrIGZyZXF1ZW5jeSBpcyBvdXQgb2YgcmFuZ2VcbiIpOworCX0KKworCXBs bHJlZiA9IERJVl9ST1VORF9VUChjbGtfZ2V0X3JhdGUoZHNpLT5wbGxyZWZfY2xrKSwgVVNFQ19Q RVJfU0VDKTsKKwl0bXAgPSBwbGxyZWY7CisKKwlmb3IgKGkgPSAxOyBpIDwgNjsgaSsrKSB7CisJ CXByZSA9IHBsbHJlZiAvIGk7CisJCWlmICgodG1wID4gKHRhcmdldF9tYnBzICUgcHJlKSkgJiYg KHRhcmdldF9tYnBzIC8gcHJlIDwgNTEyKSkgeworCQkJdG1wID0gdGFyZ2V0X21icHMgJSBwcmU7 CisJCQluID0gaTsKKwkJCW0gPSB0YXJnZXRfbWJwcyAvIHByZTsKKwkJfQorCQlpZiAodG1wID09 IDApCisJCQlicmVhazsKKwl9CisKKwlkc2ktPmxhbmVfbWJwcyA9IHBsbHJlZiAvIG4gKiBtOwor CWRzaS0+aW5wdXRfZGl2ID0gbjsKKwlkc2ktPmZlZWRiYWNrX2RpdiA9IG07CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9k c2lfaG9zdCAqaG9zdCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCit7 CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKKworCWlmIChk ZXZpY2UtPmxhbmVzID4gZHNpLT5wZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsKKwkJZGV2X2Vycihk c2ktPmRldiwgInRoZSBudW1iZXIgb2YgZGF0YSBsYW5lcygldSkgaXMgdG9vIG1hbnlcbiIsCisJ CQkJZGV2aWNlLT5sYW5lcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKGRldmlj ZS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1QpIHx8CisJICAgICEoZGV2 aWNlLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZGV2aWNlIG1vZGUgaXMgdW5zdXBwb3J0ZWRcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmNo YW5uZWwgPSBkZXZpY2UtPmNoYW5uZWw7CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsK Kwlkc2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zfbm9kZSk7CisJ aWYgKGRzaS0+cGFuZWwpCisJCXJldHVybiBkcm1fcGFuZWxfYXR0YWNoKGRzaS0+cGFuZWwsICZk c2ktPmNvbm5lY3Rvcik7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkd19t aXBpX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICBz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpk c2kgPSBob3N0X3RvX2RzaShob3N0KTsKKworCWRybV9wYW5lbF9kZXRhY2goZHNpLT5wYW5lbCk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93 cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHZhbCkKK3sKKwlpbnQgcmV0OworCisJ cmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9T VEFUVVMsCisJCQkJIHZhbCwgISh2YWwgJiBHRU5fQ01EX0ZVTEwpLCAxMDAwLAorCQkJCSBDTURf UEtUX1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ ZGV2LCAiZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgY29tbWFuZCBGSUZPXG4iKTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgdmFsKTsKKworCXJldCA9 IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVT LAorCQkJCSB2YWwsIHZhbCAmIChHRU5fQ01EX0VNUFRZIHwgR0VOX1BMRF9XX0VNUFRZKSwKKwkJ CQkgMTAwMCwgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byB3cml0ZSBjb21tYW5kIEZJRk9cbiIpOworCQly ZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNp X2Rjc19zaG9ydF93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICAgICAgY29u c3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUxNiAqdHhfYnVmID0gbXNn LT50eF9idWY7CisJdTMyIHZhbCA9IEdFTl9IREFUQSgqdHhfYnVmKSB8IEdFTl9IVFlQRShtc2ct PnR5cGUpOworCisJaWYgKG1zZy0+dHhfbGVuID4gMikgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAi dG9vIGxvbmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIHNob3J0IHdyaXRlXG4iLAorCQkJbXNnLT50 eF9sZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZHdfbWlwaV9kc2lfZ2Vu X3BrdF9oZHJfd3JpdGUoZHNpLCB2YWwpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rj c19sb25nX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgICAgIGNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwljb25zdCB1MzIgKnR4X2J1ZiA9IG1zZy0+dHhf YnVmOworCWludCBsZW4gPSBtc2ctPnR4X2xlbiwgcGxkX2RhdGFfYnl0ZXMgPSBzaXplb2YoKnR4 X2J1ZiksIHJldDsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKG1zZy0+dHhfbGVuKSB8IEdFTl9IVFlQ RShtc2ctPnR5cGUpOworCXUzMiByZW1haW5kZXIgPSAwOworCisJaWYgKG1zZy0+dHhfbGVuIDwg MykgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAid3JvbmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIGxv bmcgd3JpdGVcbiIsCisJCQltc2ctPnR4X2xlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXdoaWxlIChESVZfUk9VTkRfVVAobGVuLCBwbGRfZGF0YV9ieXRlcykpIHsKKwkJaWYgKGxlbiA8 IHBsZF9kYXRhX2J5dGVzKSB7CisJCQltZW1jcHkoJnJlbWFpbmRlciwgdHhfYnVmLCBsZW4pOwor CQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwgcmVtYWluZGVyKTsKKwkJCWxlbiA9 IDA7CisJCX0gZWxzZSB7CisJCQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCAqdHhf YnVmKTsKKwkJCXR4X2J1ZisrOworCQkJbGVuIC09IHBsZF9kYXRhX2J5dGVzOworCQl9CisKKwkJ cmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9T VEFUVVMsCisJCQkJCSB2YWwsICEodmFsICYgR0VOX1BMRF9XX0ZVTEwpLCAxMDAwLAorCQkJCQkg Q01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJy KGRzaS0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSB3cml0ZSBwYXlsb2FkIEZJ Rk9cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiBkd19taXBpX2RzaV9n ZW5fcGt0X2hkcl93cml0ZShkc2ksIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGR3X21pcGlf ZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJCSBjb25z dCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kg PSBob3N0X3RvX2RzaShob3N0KTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChtc2ctPnR5cGUpIHsK KwljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURToKKwljYXNlIE1JUElfRFNJX0RDU19TSE9S VF9XUklURV9QQVJBTToKKwljYXNlIE1JUElfRFNJX1NFVF9NQVhJTVVNX1JFVFVSTl9QQUNLRVRf U0laRToKKwkJcmV0ID0gZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKGRzaSwgbXNnKTsKKwkJ YnJlYWs7CisJY2FzZSBNSVBJX0RTSV9EQ1NfTE9OR19XUklURToKKwkJcmV0ID0gZHdfbWlwaV9k c2lfZGNzX2xvbmdfd3JpdGUoZHNpLCBtc2cpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZf ZXJyKGRzaS0+ZGV2LCAidW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXG4iKTsKKwkJcmV0ID0gLUVJ TlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlf ZHNpX2hvc3Rfb3BzIGR3X21pcGlfZHNpX2hvc3Rfb3BzID0geworCS5hdHRhY2ggPSBkd19taXBp X2RzaV9ob3N0X2F0dGFjaCwKKwkuZGV0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2gsCisJ LnRyYW5zZmVyID0gZHdfbWlwaV9kc2lfaG9zdF90cmFuc2ZlciwKK307CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQor eworCXUzMiB2YWw7CisKKwl2YWwgPSBWSURfTU9ERV9UWVBFX0JVUlNUX1NZTkNfUFVMU0VTIHwg RU5BQkxFX0xPV19QT1dFUjsKKworCWRzaV93cml0ZShkc2ksIERTSV9WSURfTU9ERV9DRkcsIHZh bCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3NldF9tb2RlKHN0cnVjdCBkd19taXBp X2RzaSAqZHNpLAorCQkJCSBlbnVtIGR3X21pcGlfZHNpX21vZGUgbW9kZSkKK3sKKwlpZiAobW9k ZSA9PSBEV19NSVBJX0RTSV9DTURfTU9ERSkgeworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQ LCBSRVNFVCk7CisJCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RF KTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7CisJfSBlbHNlIHsKKwkJ ZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lf TU9ERV9DRkcsIEVOQUJMRV9WSURFT19NT0RFKTsKKwkJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9j b25maWcoZHNpKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7CisJfQor fQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kaXNhYmxlKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwlkc2lfd3JpdGUo ZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9SU1RaKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfaW5pdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lf UFdSX1VQLCBSRVNFVCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfRElTRk9S Q0VQTEwgfCBQSFlfRElTQUJMRUNMSworCQkgIHwgUEhZX1JTVFogfCBQSFlfU0hVVERPV05aKTsK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJVklEU0lPTigxMCkgfAor CQkgIFRYX0VTQ19DTEtfRElWSURTSU9OKDcpKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfTFBDTEtf Q1RSTCwgUEhZX1RYUkVRVUVTVENMS0hTKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lf ZHBpX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gMCwgY29sb3IgPSAwOworCisJc3dpdGNo IChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJY29sb3IgPSBE UElfQ09MT1JfQ09ESU5HXzI0QklUOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2 NjY6CisJCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xOEJJVF8yIHwgRU4xOF9MT09TRUxZOwor CQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQljb2xvciA9IERQ SV9DT0xPUl9DT0RJTkdfMThCSVRfMTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdC NTY1OgorCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMTsKKwkJYnJlYWs7CisJfQor CisJaWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykpCisJCXZhbCB8PSBW U1lOQ19BQ1RJVkVfTE9XOworCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZ TkMpKQorCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKKworCWRzaV93cml0ZShkc2ksIERTSV9E UElfVkNJRCwgRFBJX1ZJRChkc2ktPmNoYW5uZWwpKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJ X0NPTE9SX0NPRElORywgY29sb3IpOworCWRzaV93cml0ZShkc2ksIERTSV9EUElfQ0ZHX1BPTCwg dmFsKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0xQX0NNRF9USU0sIE9VVFZBQ1RfTFBDTURf VElNRSg0KQorCQkgIHwgSU5WQUNUX0xQQ01EX1RJTUUoNCkpOworfQorCitzdGF0aWMgdm9pZCBk d19taXBpX2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BDS0hETF9DRkcsIEVOX0NSQ19SWCB8IEVOX0VDQ19S WCB8IEVOX0JUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9j b25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1BLVF9TSVpFLCBWSURf UEtUX1NJWkUobW9kZS0+aGRpc3BsYXkpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lf Y29tbWFuZF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfVE9fQ05UX0NGRywgSFNUWF9UT19DTlQoMTAwMCkgfCBMUFJYX1RPX0NOVCgx MDAwKSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0JUQV9UT19DTlQsIDB4ZDAwKTsKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLCBDTURfTU9ERV9BTExfTFApOworCWRzaV93cml0ZShk c2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RFKTsKK30KKworLyogR2V0IGxhbmUgYnl0 ZSBjbG9jayBjeWNsZXMuICovCitzdGF0aWMgdTMyIGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50 X2xiY2Moc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgIHUzMiBoY29tcG9uZW50KQor eworCXUzMiBmcmFjLCBsYmNjOworCisJbGJjYyA9IGhjb21wb25lbnQgKiBkc2ktPmxhbmVfbWJw cyAqIE1TRUNfUEVSX1NFQyAvIDg7CisKKwlmcmFjID0gbGJjYyAlIGRzaS0+bW9kZS0+Y2xvY2s7 CisJbGJjYyA9IGxiY2MgLyBkc2ktPm1vZGUtPmNsb2NrOworCWlmIChmcmFjKQorCQlsYmNjKys7 CisKKwlyZXR1cm4gbGJjYzsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfbGluZV90aW1l cl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIGh0b3RhbCwgaHNhLCBo YnAsIGxiY2M7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2ktPm1vZGU7CisK KwlodG90YWwgPSBtb2RlLT5odG90YWw7CisJaHNhID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+ aHN5bmNfc3RhcnQ7CisJaGJwID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCisJ bGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBodG90YWwpOworCWRz aV93cml0ZShkc2ksIERTSV9WSURfSExJTkVfVElNRSwgbGJjYyk7CisKKwlsYmNjID0gZHdfbWlw aV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGhzYSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJ X1ZJRF9IU0FfVElNRSwgbGJjYyk7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25l bnRfbGJjYyhkc2ksIGhicCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IQlBfVElNRSwgbGJj Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWco c3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZhY3RpdmUsIHZzYSwgdmZwLCB2YnA7 CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2ktPm1vZGU7CisKKwl2YWN0aXZl ID0gbW9kZS0+dmRpc3BsYXk7CisJdnNhID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNf c3RhcnQ7CisJdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2YnAg PSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lf VklEX1ZBQ1RJVkVfTElORVMsIHZhY3RpdmUpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfVlNB X0xJTkVTLCB2c2EpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkZQX0xJTkVTLCB2ZnApOwor CWRzaV93cml0ZShkc2ksIERTSV9WSURfVkJQX0xJTkVTLCB2YnApOworfQorCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCBQSFlfSFMyTFBfVElNRSgweDQw KQorCQkgIHwgUEhZX0xQMkhTX1RJTUUoMHg0MCkgfCBNQVhfUkRfVElNRSgxMDAwMCkpOworCisJ ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHLCBQSFlfQ0xLSFMyTFBfVElNRSgw eDQwKQorCQkgIHwgUEhZX0NMS0xQMkhTX1RJTUUoMHg0MCkpOworfQorCitzdGF0aWMgdm9pZCBk d19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9QX1dBSVRfVElNRSgw eDIwKSB8CisJCSAgTl9MQU5FUyhkc2ktPmxhbmVzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21p cGlfZHNpX2NsZWFyX2VycihzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfcmVhZChk c2ksIERTSV9JTlRfU1QwKTsKKwlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QxKTsKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfSU5UX01TSzAsIDApOworCWRzaV93cml0ZShkc2ksIERTSV9JTlRfTVNLMSwg MCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3Ry dWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKwlpbnQgcmV0 OworCisJZHNpLT5tb2RlID0gYWRqdXN0ZWRfbW9kZTsKKworCXJldCA9IGR3X21pcGlfZHNpX2dl dF9sYW5lX2Jwcyhkc2kpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisKKwlpZiAoY2xrX3By ZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIiVzOiBGYWls ZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWR3X21p cGlfZHNpX2luaXQoZHNpKTsKKwlkd19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7CisJ ZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlk ZW9fbW9kZV9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRz aSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOworCWR3X21p cGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmVydGljYWxfdGlt aW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhkc2kpOwor CWR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2Ns ZWFyX2Vycihkc2kpOworCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHByZXBhcmUgcGFuZWxcbiIpOworCQlnb3RvIG1v ZGVfc2V0X2VuZDsKKwl9CisKK21vZGVfc2V0X2VuZDoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo ZHNpLT5wY2xrKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxl KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJZHJtX3BhbmVsX2Rpc2FibGUoZHNpLT5w YW5lbCk7CisKKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykpIHsKKwkJZGV2X2Vy cihkc2ktPmRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9fZnVuY19fKTsKKwkJ cmV0dXJuOworCX0KKworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01E X01PREUpOworCWRybV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7CisJZHdfbWlwaV9kc2lf c2V0X21vZGUoZHNpLCBEV19NSVBJX0RTSV9WSURfTU9ERSk7CisKKwkvKgorCSAqIFRoaXMgaXMg bmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSB0aGUgcGVyaXBoZXJhbCB3aWxsIGJlIGRyaXZlbgorCSAq IG5vcm1hbGx5IHdoZW4gdGhlIGRpc3BsYXkgaXMgZW5hYmxlZCBhZ2FpbiBsYXRlci4KKwkgKi8K Kwltc2xlZXAoMTIwKTsKKworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lf Q01EX01PREUpOworCWR3X21pcGlfZHNpX2Rpc2FibGUoZHNpKTsKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHNpLT5wY2xrKTsKK30KKworc3RhdGljIGJvb2wgZHdfbWlwaV9kc2lfZW5jb2Rlcl9t b2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkd19taXBp X2RzaV9lbmNvZGVyX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3Ry dWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKwlpbnQgbXV4 ICA9IHJvY2tjaGlwX2RybV9lbmNvZGVyX2dldF9tdXhfaWQoZHNpLT5kZXYtPm9mX25vZGUsIGVu Y29kZXIpOworCXUzMiBpbnRlcmZhY2VfcGl4X2ZtdDsKKwl1MzIgdmFsOworCisJaWYgKGNsa19w cmVwYXJlX2VuYWJsZShkc2ktPnBjbGspKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICIlczogRmFp bGVkIHRvIGVuYWJsZSBwY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkd19t aXBpX2RzaV9waHlfaW5pdChkc2kpOworCWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMo ZHNpKTsKKworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUp OworCWRybV9wYW5lbF9lbmFibGUoZHNpLT5wYW5lbCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBh cmUoZHNpLT5wY2xrKTsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJ X0ZNVF9SR0I4ODg6CisJCWludGVyZmFjZV9waXhfZm10ID0gUk9DS0NISVBfT1VUX01PREVfUDg4 ODsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQlpbnRlcmZhY2VfcGl4 X2ZtdCA9IFJPQ0tDSElQX09VVF9NT0RFX1A2NjY7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lf Rk1UX1JHQjU2NToKKwkJaW50ZXJmYWNlX3BpeF9mbXQgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNTY1 OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJ cm9ja2NoaXBfZHJtX2NydGNfbW9kZV9jb25maWcoZW5jb2Rlci0+Y3J0YywgRFJNX01PREVfQ09O TkVDVE9SX0RTSSwKKwkJCQkgICAgICBpbnRlcmZhY2VfcGl4X2ZtdCk7CisKKwlpZiAobXV4KQor CQl2YWwgPSBEU0kwX1NFTF9WT1BfTElUIHwgKERTSTBfU0VMX1ZPUF9MSVQgPDwgMTYpOworCWVs c2UKKwkJdmFsID0gRFNJMF9TRUxfVk9QX0xJVCA8PCAxNjsKKworCXJlZ21hcF93cml0ZShkc2kt PmdyZl9yZWdtYXAsIEdSRl9TT0NfQ09ONiwgdmFsKTsKKwlkZXZfZGJnKGRzaS0+ZGV2LCAidm9w ICVzIG91dHB1dCB0byBkc2kwXG4iLCAobXV4KSA/ICJMSVQiIDogIkJJRyIpOworfQorCitzdGF0 aWMgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcworZHdfbWlwaV9kc2lfZW5jb2Rlcl9o ZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAgPSBkd19taXBpX2RzaV9lbmNvZGVyX21vZGVf Zml4dXAsCisJLmNvbW1pdCA9IGR3X21pcGlfZHNpX2VuY29kZXJfY29tbWl0LAorCS5tb2RlX3Nl dCA9IGR3X21pcGlfZHNpX2VuY29kZXJfbW9kZV9zZXQsCisJLmRpc2FibGUgPSBkd19taXBpX2Rz aV9lbmNvZGVyX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNz IGR3X21pcGlfZHNpX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9j bGVhbnVwLAorfTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVz KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGR3X21pcGlfZHNp ICpkc2kgPSBjb25fdG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9t b2Rlcyhkc2ktPnBhbmVsKTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIGR3X21p cGlfZHNpX21vZGVfdmFsaWQoCisJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is CisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBkd19taXBp X2RzaSAqZHNpID0gY29uX3RvX2RzaShjb25uZWN0b3IpOworCisJZW51bSBkcm1fbW9kZV9zdGF0 dXMgbW9kZV9zdGF0dXMgPSBNT0RFX09LOworCisJaWYgKGRzaS0+cGRhdGEtPm1vZGVfdmFsaWQp CisJCW1vZGVfc3RhdHVzID0gZHNpLT5wZGF0YS0+bW9kZV92YWxpZChjb25uZWN0b3IsIG1vZGUp OworCisJcmV0dXJuIG1vZGVfc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVy ICpkd19taXBpX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKAorCQkJCQlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3Rv X2RzaShjb25uZWN0b3IpOworCisJcmV0dXJuICZkc2ktPmVuY29kZXI7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hl bHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9t b2RlcywKKwkubW9kZV92YWxpZCA9IGR3X21pcGlfZHNpX21vZGVfdmFsaWQsCisJLmJlc3RfZW5j b2RlciA9IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMg ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworZHdfbWlwaV9kc2lfZGV0ZWN0KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcm1fY29ubmVj dG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29u bmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29u bmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGR3X21pcGlf ZHNpX2F0b21pY19jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfZHBtcywKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xl X2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGV0ZWN0ID0gZHdfbWlwaV9kc2lfZGV0ZWN0LAorCS5kZXN0 cm95ID0gZHdfbWlwaV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUs Cit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sCisJCQkJICAgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gJmRzaS0+Y29ubmVjdG9yOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRz aS0+ZGV2OworCWludCByZXQ7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9vZl9m aW5kX3Bvc3NpYmxlX2NydGNzKGRybSwKKwkJCQkJCQkgICAgIGRldi0+b2Zfbm9kZSk7CisJLyoK KwkgKiBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgQ1JUQyhzKSB3aGljaCB0aGlzIGVuY29kZXIg aXMKKwkgKiBzdXBwb3NlZCB0byBiZSBjb25uZWN0ZWQgdG8sIGl0J3MgYmVjYXVzZSB0aGUgQ1JU QyBoYXMKKwkgKiBub3QgYmVlbiByZWdpc3RlcmVkIHlldC4gIERlZmVyIHByb2JpbmcsIGFuZCBo b3BlIHRoYXQKKwkgKiB0aGUgcmVxdWlyZWQgQ1JUQyBpcyBhZGRlZCBsYXRlci4KKwkgKi8KKwlp ZiAoZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPT0gMCkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7 CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsCisJCQkgICAgICAgJmR3 X21pcGlfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0 KGRybSwgJmRzaS0+ZW5jb2RlciwgJmR3X21pcGlfZHNpX2VuY29kZXJfZnVuY3MsCisJCQkgRFJN X01PREVfRU5DT0RFUl9EU0ksIE5VTEwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLAorCQkJJmR3X21pcGlf ZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwg JmRzaS0+Y29ubmVjdG9yLAorCQkJICAgJmR3X21pcGlfZHNpX2F0b21pY19jb25uZWN0b3JfZnVu Y3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rv cl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcm9ja2NoaXBfbWlwaV9wYXJzZV9kdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZHNpLT5kZXYtPm9mX25vZGU7CisKKwlk c2ktPmdyZl9yZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9j a2NoaXAsZ3JmIik7CisJaWYgKElTX0VSUihkc2ktPmdyZl9yZWdtYXApKSB7CisJCWRldl9lcnIo ZHNpLT5kZXYsICJVbmFibGUgdG8gZ2V0IHJvY2tjaGlwLGdyZlxuIik7CisJCXJldHVybiBQVFJf RVJSKGRzaS0+Z3JmX3JlZ21hcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVt IGRybV9tb2RlX3N0YXR1cyByazMyODhfbWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpCit7CisJLyoKKwkgKiBUaGUgVklEX1BLVF9TSVpFIGZpZWxkIGluIHRoZSBEU0lfVklE X1BLVF9DRkcKKwkgKiByZWdpc3RlciBpcyAxMS1iaXQuCisJICovCisJaWYgKG1vZGUtPmhkaXNw bGF5ID4gMHg3ZmYpCisJCXJldHVybiBNT0RFX0JBRF9IVkFMVUU7CisKKwkvKgorCSAqIFRoZSBW X0FDVElWRV9MSU5FUyBmaWVsZCBpbiB0aGUgRFNJX1ZUSU1JTkdfQ0ZHCisJICogcmVnaXN0ZXIg aXMgMTEtYml0LgorCSAqLworCWlmIChtb2RlLT52ZGlzcGxheSA+IDB4N2ZmKQorCQlyZXR1cm4g TU9ERV9CQURfVlZBTFVFOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg ZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHJrMzI4OF9taXBpX2RzaV9kcnZfZGF0YSA9IHsKKwkubWF4 X2RhdGFfbGFuZXMgPSA0LAorCS5tb2RlX3ZhbGlkID0gcmszMjg4X21pcGlfZHNpX21vZGVfdmFs aWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9k dF9pZHNbXSA9IHsKKwl7CisJIC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRz aSIsCisJIC5kYXRhID0gJnJrMzI4OF9taXBpX2RzaV9kcnZfZGF0YSwKKwl9LAorCXsgLyogc2Vu dGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X21pcGlfZHNpX2R0X2lk cyk7CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9CisJCQlvZl9tYXRjaF9kZXZpY2UoZHdfbWlwaV9kc2lf ZHRfaWRzLCBkZXYpOworCWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRh ID0gb2ZfaWQtPmRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRm b3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVj dCBkd19taXBpX2RzaSAqZHNpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisK Kwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlm ICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGRh dGEgPSBwZGF0YTsKKworCXJldCA9IHJvY2tjaGlwX21pcGlfcGFyc2VfZHQoZHNpKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlk c2ktPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIo ZHNpLT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5iYXNlKTsKKworCWRzaS0+cGxscmVm X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJyZWYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVm X2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBsbHJlZl9jbGspOworCQlkZXZfZXJyKGRl diwgIlVuYWJsZSB0byBnZXQgcGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJZHNpLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsK KwlpZiAoSVNfRVJSKGRzaS0+cGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBjbGspOwor CQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgcGNsazogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7 CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBsbHJl Zl9jbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkd19taXBp X2RzaV9yZWdpc3Rlcihkcm0sIGRzaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byByZWdpc3RlciBtaXBpX2RzaTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BsbHJl ZjsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOworCisJZHNpLT5kc2lfaG9zdC5v cHMgPSAmZHdfbWlwaV9kc2lfaG9zdF9vcHM7CisJZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7CisJ cmV0dXJuIG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCitlcnJfcGxs cmVmOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwl2b2lkICpkYXRhKQoreworCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltaXBpX2RzaV9ob3N0X3Vu cmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBs bHJlZl9jbGspOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHdfbWlw aV9kc2lfb3BzID0geworCS5iaW5kCT0gZHdfbWlwaV9kc2lfYmluZCwKKwkudW5iaW5kCT0gZHdf bWlwaV9kc2lfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2 LT5kZXYsICZkd19taXBpX2RzaV9vcHMpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBk ZXYtPmRldiwgJmR3X21pcGlfZHNpX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X21pcGlfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZHdf bWlwaV9kc2lfcHJvYmUsCisJLnJlbW92ZQkJPSBkd19taXBpX2RzaV9yZW1vdmUsCisJLmRyaXZl cgkJPSB7CisJCS5vZl9tYXRjaF90YWJsZSA9IGR3X21pcGlfZHNpX2R0X2lkcywKKwkJLm5hbWUJ PSBEUklWRVJfTkFNRSwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHdfbWlwaV9k c2lfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJST0NLQ0hJUCBNSVBJIERTSSBob3N0 IGNvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJv Y2stY2hpcHMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJw bGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX3ZvcC5jCmluZGV4IDA1NmNhYzMuLjQ2YzJhOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwpAQCAtODE4LDYgKzgxOCw5IEBAIGludCByb2Nr Y2hpcF9kcm1fY3J0Y19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJY2FzZSBE Uk1fTU9ERV9DT05ORUNUT1JfSERNSUE6CiAJCVZPUF9DVFJMX1NFVCh2b3AsIGhkbWlfZW4sIDEp OwogCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k6CisJCVZPUF9DVFJMX1NF VCh2b3AsIG1pcGlfZW4sIDEpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoInVu c3VwcG9ydCBjb25uZWN0b3JfdHlwZVslZF1cbiIsIGNvbm5lY3Rvcl90eXBlKTsKIAkJcmV0dXJu IC1FSU5WQUw7Ci0tIAoyLjYuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK