From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v7.2 3/5] drm: rockchip: Support Synopsys DW MIPI DSI Date: Wed, 6 Jan 2016 16:12:54 +0800 Message-ID: <1452067974-29942-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 QHJvY2stY2hpcHMuY29tPgotLS0KCkNoYW5nZXMgaW4gdjcuMjoKLSBtYWtlIHN1cmUgZGlzYWJs ZSBjbGsgd2hlbiBkcm1fcGFuZWxfcHJlcGFyZSBlcnIgKE1hcmsgWWFvKQoKQ2hhbmdlcyBpbiB2 NzoKLSBtb2RpZnkgdGhlIGNvbmZpZyB0byB0cmlzdGF0ZSBmb3IgbW9kdWxlcyBidWlsZCAoTWFy ayBZYW8pCi0gUGFzcyBOVUxMICduYW1lJyB0byBkcm1fZW5jb2Rlcl9pbml0KCkgdG8gZml4IGNv bXBpbGUgZXJyIChNYXJrIFlhbykKCkNoYW5nZXMgaW4gdjY6Ci0gbW92ZSB0aGUgbWlwaV9lbiBn YXRlIHRvIG9ja2NoaXBfZHJtX2NydGNfbW9kZV9jb25maWcKLSBSZW1vdmUgdGhlIGF0b21pYyBm ZWF0dXJlIGNoZWNrIChNYXJrIFlhbykKLSBBZGQgYXRvbWljIEFQSSBzdXBwb3J0IChIZWlrbyBT dMO8Ym5lKQotIERvIG5vdCB1c2UgYnJpZGdlIGRyaXZlciAoVGhpZXJyeSBSZWRpbmcpCi0gT3B0 aW1pemF0aW9uIHRoZSBwaHkgaW5pdCBzZXF1ZW5jZQoKQ2hhbmdlcyBpbiB2NTogTm9uZQpDaGFu Z2VzIGluIHY0OiBOb25lCkNoYW5nZXMgaW4gdjM6IE5vbmUKCiBkcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvS2NvbmZpZyAgICAgICAgICAgIHwgICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv ZHctbWlwaS1kc2kuYyAgICAgIHwgMTE5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgfCAgICAzICsKIDQgZmls ZXMgY2hhbmdlZCwgMTIwOCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmln CmluZGV4IDM1MjE1ZjYuLjg1NzM5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCkBAIC0y NSwzICsyNSwxMyBAQCBjb25maWcgUk9DS0NISVBfRFdfSERNSQogCSAgZm9yIHRoZSBTeW5vcHN5 cyBEZXNpZ25XYXJlIEhETUkgZHJpdmVyLiBJZiB5b3Ugd2FudCB0bwogCSAgZW5hYmxlIEhETUkg b24gUkszMjg4IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzCiAJICBvcHRpb24uCisK K2NvbmZpZyBST0NLQ0hJUF9EV19NSVBJX0RTSQorCXRyaXN0YXRlICJSb2NrY2hpcCBzcGVjaWZp YyBleHRlbnNpb25zIGZvciBTeW5vcHN5cyBEVyBNSVBJIERTSSIKKwlkZXBlbmRzIG9uIERSTV9S T0NLQ0hJUAorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwloZWxwCisJIFRoaXMgc2VsZWN0cyBzdXBw b3J0IGZvciBSb2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5zaW9ucworCSBmb3IgdGhlIFN5bm9w c3lzIERlc2lnbldhcmUgSERNSSBkcml2ZXIuIElmIHlvdSB3YW50IHRvCisJIGVuYWJsZSBNSVBJ IERTSSBvbiBSSzMyODggYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGV0IHRoaXMKKwkgb3B0aW9u LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCmluZGV4IGE5ZDM4MGYuLmQxZGMwZjcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBAIHJvY2tjaGlwZHJtLXkgOj0g cm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlwX2RybV9mYi5vIHJvY2tjaGlwX2RybV9mYmRldi5v IFwKIAkJcm9ja2NoaXBfZHJtX2dlbS5vCiAKIG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19IRE1J KSArPSBkd19oZG1pLXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9EV19NSVBJX0RT SSkgKz0gZHctbWlwaS1kc2kubwogCiBvYmotJChDT05GSUdfRFJNX1JPQ0tDSElQKSArPSByb2Nr Y2hpcGRybS5vIHJvY2tjaGlwX2RybV92b3AubyBcCiAJCQkJcm9ja2NoaXBfdm9wX3JlZy5vCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYyBiL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjdiZmUyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvZHctbWlwaS1kc2kuYwpAQCAtMCwwICsxLDExOTQgQEAKKy8qCisgKiBDb3B5cmln 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 ZWFyX2Vycihkc2kpOworCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkKKwkJZGV2 X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBwcmVwYXJlIHBhbmVsXG4iKTsKKworCWNsa19kaXNh YmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9l bmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBk d19taXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwlkcm1fcGFuZWxf ZGlzYWJsZShkc2ktPnBhbmVsKTsKKworCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xr KSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiJXM6IEZhaWxlZCB0byBlbmFibGUgcGNsa1xuIiwg X19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBE V19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBhbmVsKTsK Kwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKworCS8q CisJICogVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHRoZSBwZXJpcGhlcmFsIHdpbGwg YmUgZHJpdmVuCisJICogbm9ybWFsbHkgd2hlbiB0aGUgZGlzcGxheSBpcyBlbmFibGVkIGFnYWlu IGxhdGVyLgorCSAqLworCW1zbGVlcCgxMjApOworCisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNp LCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHdfbWlwaV9kc2lfZGlzYWJsZShkc2kpOworCWNs a19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworfQorCitzdGF0aWMgYm9vbCBkd19taXBp X2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJ CQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29k ZXIpOworCWludCBtdXggID0gcm9ja2NoaXBfZHJtX2VuY29kZXJfZ2V0X211eF9pZChkc2ktPmRl di0+b2Zfbm9kZSwgZW5jb2Rlcik7CisJdTMyIGludGVyZmFjZV9waXhfZm10OworCXUzMiB2YWw7 CisKKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykpIHsKKwkJZGV2X2Vycihkc2kt PmRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJu OworCX0KKworCWR3X21pcGlfZHNpX3BoeV9pbml0KGRzaSk7CisJZHdfbWlwaV9kc2lfd2FpdF9m b3JfdHdvX2ZyYW1lcyhkc2kpOworCisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJ X0RTSV9WSURfTU9ERSk7CisJZHJtX3BhbmVsX2VuYWJsZShkc2ktPnBhbmVsKTsKKworCWNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgewor CWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJaW50ZXJmYWNlX3BpeF9mbXQgPSBST0NLQ0hJ UF9PVVRfTU9ERV9QODg4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJ CWludGVyZmFjZV9waXhfZm10ID0gUk9DS0NISVBfT1VUX01PREVfUDY2NjsKKwkJYnJlYWs7CisJ Y2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQlpbnRlcmZhY2VfcGl4X2ZtdCA9IFJPQ0tDSElQ X09VVF9NT0RFX1A1NjU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCXJl dHVybjsKKwl9CisKKwlyb2NrY2hpcF9kcm1fY3J0Y19tb2RlX2NvbmZpZyhlbmNvZGVyLT5jcnRj LCBEUk1fTU9ERV9DT05ORUNUT1JfRFNJLAorCQkJCSAgICAgIGludGVyZmFjZV9waXhfZm10KTsK KworCWlmIChtdXgpCisJCXZhbCA9IERTSTBfU0VMX1ZPUF9MSVQgfCAoRFNJMF9TRUxfVk9QX0xJ VCA8PCAxNik7CisJZWxzZQorCQl2YWwgPSBEU0kwX1NFTF9WT1BfTElUIDw8IDE2OworCisJcmVn bWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgR1JGX1NPQ19DT042LCB2YWwpOworCWRldl9kYmco ZHNpLT5kZXYsICJ2b3AgJXMgb3V0cHV0IHRvIGRzaTBcbiIsIChtdXgpID8gIkxJVCIgOiAiQklH Iik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzCitkd19taXBp X2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IGR3X21pcGlfZHNp X2VuY29kZXJfbW9kZV9maXh1cCwKKwkuY29tbWl0ID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9jb21t aXQsCisJLm1vZGVfc2V0ID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZGlzYWJs ZSA9IGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJt X2VuY29kZXJfZnVuY3MgZHdfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9 IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Nvbm5l Y3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBk cm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9k ZV9zdGF0dXMgZHdfbWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ c3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBjb25fdG9fZHNpKGNvbm5lY3Rvcik7CisKKwllbnVt IGRybV9tb2RlX3N0YXR1cyBtb2RlX3N0YXR1cyA9IE1PREVfT0s7CisKKwlpZiAoZHNpLT5wZGF0 YS0+bW9kZV92YWxpZCkKKwkJbW9kZV9zdGF0dXMgPSBkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKGNv bm5lY3RvciwgbW9kZSk7CisKKwlyZXR1cm4gbW9kZV9zdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2VuY29kZXIgKmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCQkJ CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGR3X21pcGlfZHNp ICpkc2kgPSBjb25fdG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJmRzaS0+ZW5jb2RlcjsK K30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBkd19taXBpX2Rz aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBkd19taXBpX2RzaV9j b25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gZHdfbWlwaV9kc2lfbW9kZV92YWxp ZCwKKwkuYmVzdF9lbmNvZGVyID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwK K307CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitkd19taXBpX2RzaV9kZXRl Y3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlyZXR1 cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlf ZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0 b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3MgZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBl cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSBkd19taXBpX2RzaV9k ZXRlY3QsCisJLmRlc3Ryb3kgPSBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ksCisJ LnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVw bGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0 ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcmVnaXN0ZXIoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkgICAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK K3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHNpLT5lbmNvZGVyOworCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSAmZHNpLT5jb25uZWN0b3I7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsKKworCWVuY29kZXItPnBvc3NpYmxlX2Ny dGNzID0gZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0Y3MoZHJtLAorCQkJCQkJCSAgICAgZGV2LT5v Zl9ub2RlKTsKKwkvKgorCSAqIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBDUlRDKHMpIHdoaWNo IHRoaXMgZW5jb2RlciBpcworCSAqIHN1cHBvc2VkIHRvIGJlIGNvbm5lY3RlZCB0bywgaXQncyBi ZWNhdXNlIHRoZSBDUlRDIGhhcworCSAqIG5vdCBiZWVuIHJlZ2lzdGVyZWQgeWV0LiAgRGVmZXIg cHJvYmluZywgYW5kIGhvcGUgdGhhdAorCSAqIHRoZSByZXF1aXJlZCBDUlRDIGlzIGFkZGVkIGxh dGVyLgorCSAqLworCWlmIChlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9PSAwKQorCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsKKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRzaS0+ZW5jb2RlciwK KwkJCSAgICAgICAmZHdfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCXJldCA9IGRy bV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmZHdfbWlwaV9kc2lfZW5jb2Rlcl9m dW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX0RTSSwgTlVMTCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIgd2l0aCBkcm1cbiIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3Is CisJCQkmZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlkcm1fY29ubmVj dG9yX2luaXQoZHJtLCAmZHNpLT5jb25uZWN0b3IsCisJCQkgICAmZHdfbWlwaV9kc2lfYXRvbWlj X2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCisJZHJt X21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCByb2NrY2hpcF9taXBpX3BhcnNlX2R0KHN0cnVjdCBk d19taXBpX2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkc2ktPmRldi0+ b2Zfbm9kZTsKKworCWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3Bo YW5kbGUobnAsICJyb2NrY2hpcCxncmYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+Z3JmX3JlZ21hcCkp IHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIlVuYWJsZSB0byBnZXQgcm9ja2NoaXAsZ3JmXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5ncmZfcmVnbWFwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIHJrMzI4OF9taXBpX2RzaV9tb2RlX3ZhbGlk KAorCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwkvKgorCSAqIFRoZSBWSURfUEtUX1NJWkUgZmllbGQg aW4gdGhlIERTSV9WSURfUEtUX0NGRworCSAqIHJlZ2lzdGVyIGlzIDExLWJpdC4KKwkgKi8KKwlp ZiAobW9kZS0+aGRpc3BsYXkgPiAweDdmZikKKwkJcmV0dXJuIE1PREVfQkFEX0hWQUxVRTsKKwor CS8qCisJICogVGhlIFZfQUNUSVZFX0xJTkVTIGZpZWxkIGluIHRoZSBEU0lfVlRJTUlOR19DRkcK KwkgKiByZWdpc3RlciBpcyAxMS1iaXQuCisJICovCisJaWYgKG1vZGUtPnZkaXNwbGF5ID4gMHg3 ZmYpCisJCXJldHVybiBNT0RFX0JBRF9WVkFMVUU7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKwor c3RhdGljIHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgcmszMjg4X21pcGlfZHNpX2Rydl9k YXRhID0geworCS5tYXhfZGF0YV9sYW5lcyA9IDQsCisJLm1vZGVfdmFsaWQgPSByazMyODhfbWlw aV9kc2lfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IGR3X21pcGlfZHNpX2R0X2lkc1tdID0geworCXsKKwkgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAs cmszMjg4LW1pcGktZHNpIiwKKwkgLmRhdGEgPSAmcmszMjg4X21pcGlfZHNpX2Rydl9kYXRhLAor CX0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHdf bWlwaV9kc2lfZHRfaWRzKTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQor eworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KKwkJCW9mX21hdGNoX2Rldmlj ZShkd19taXBpX2RzaV9kdF9pZHMsIGRldik7CisJY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3Bs YXRfZGF0YSAqcGRhdGEgPSBvZl9pZC0+ZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IGRhdGE7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7 CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNpLT5kZXYgPSBk ZXY7CisJZHNpLT5wZGF0YSA9IHBkYXRhOworCisJcmV0ID0gcm9ja2NoaXBfbWlwaV9wYXJzZV9k dChkc2kpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4g LUVOT0RFVjsKKworCWRzaS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7 CisJaWYgKElTX0VSUihkc2ktPmJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihkc2ktPmJhc2UpOwor CisJZHNpLT5wbGxyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInJlZiIpOworCWlmIChJU19F UlIoZHNpLT5wbGxyZWZfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGxscmVmX2Nsayk7 CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBwbGwgcmVmZXJlbmNlIGNsb2NrOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPnBjbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIoZHNpLT5wY2xrKSkgeworCQlyZXQgPSBQVFJfRVJS KGRzaS0+cGNsayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBwY2xrOiAlZFxuIiwg cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNp LT5wbGxyZWZfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IEZhaWxlZCB0 byBlbmFibGUgcGxscmVmX2Nsa1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IGR3X21pcGlfZHNpX3JlZ2lzdGVyKGRybSwgZHNpKTsKKwlpZiAocmV0KSB7CisJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG1pcGlfZHNpOiAlZFxuIiwgcmV0KTsKKwkJ Z290byBlcnJfcGxscmVmOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7CisKKwlk c2ktPmRzaV9ob3N0Lm9wcyA9ICZkd19taXBpX2RzaV9ob3N0X29wczsKKwlkc2ktPmRzaV9ob3N0 LmRldiA9IGRldjsKKwlyZXR1cm4gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9z dCk7CisKK2Vycl9wbGxyZWY6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Ns ayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCXZvaWQgKmRhdGEpCit7 CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1p cGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9u ZW50X29wcyBkd19taXBpX2RzaV9vcHMgPSB7CisJLmJpbmQJPSBkd19taXBpX2RzaV9iaW5kLAor CS51bmJpbmQJPSBkd19taXBpX2RzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGR3X21pcGlf ZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGNvbXBv bmVudF9hZGQoJnBkZXYtPmRldiwgJmR3X21pcGlfZHNpX29wcyk7Cit9CisKK3N0YXRpYyBpbnQg ZHdfbWlwaV9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29t cG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lfb3BzKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWlwaV9kc2lfZHJpdmVyID0gewor CS5wcm9iZQkJPSBkd19taXBpX2RzaV9wcm9iZSwKKwkucmVtb3ZlCQk9IGR3X21pcGlfZHNpX3Jl bW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm9mX21hdGNoX3RhYmxlID0gZHdfbWlwaV9kc2lfZHRf aWRzLAorCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2Ry aXZlcihkd19taXBpX2RzaV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlJPQ0tDSElQ IE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlz IFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitN T0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKaW5kZXggMDU2Y2FjMy4uNDZjMmE4ZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCkBAIC04MTgsNiArODE4 LDkgQEAgaW50IHJvY2tjaGlwX2RybV9jcnRjX21vZGVfY29uZmlnKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAkJVk9QX0NUUkxfU0VUKHZv cCwgaGRtaV9lbiwgMSk7CiAJCWJyZWFrOworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RTSToK KwkJVk9QX0NUUkxfU0VUKHZvcCwgbWlwaV9lbiwgMSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJ CURSTV9FUlJPUigidW5zdXBwb3J0IGNvbm5lY3Rvcl90eXBlWyVkXVxuIiwgY29ubmVjdG9yX3R5 cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKLS0gCjIuNi4zCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=