From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v7 3/5] drm: rockchip: Support Synopsys DW MIPI DSI Date: Wed, 6 Jan 2016 12:03:55 +0800 Message-ID: <1452053038-32098-4-git-send-email-zyw@rock-chips.com> References: <1452053038-32098-1-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1452053038-32098-1-git-send-email-zyw@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, mark.yao@rock-chips.com, treding@nvidia.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 QHJvY2stY2hpcHMuY29tPgotLS0KCkNoYW5nZXMgaW4gdjc6Ci0gbW9kaWZ5IHRoZSBjb25maWcg dG8gdHJpc3RhdGUgZm9yIG1vZHVsZXMgYnVpbGQgKE1hcmsgWWFvKQotIFBhc3MgTlVMTCAnbmFt ZScgdG8gZHJtX2VuY29kZXJfaW5pdCgpIHRvIGZpeCBjb21waWxlIGVyciAoTWFyayBZYW8pCgpD aGFuZ2VzIGluIHY2OgotIG1vdmUgdGhlIG1pcGlfZW4gZ2F0ZSB0byBvY2tjaGlwX2RybV9jcnRj X21vZGVfY29uZmlnCi0gUmVtb3ZlIHRoZSBhdG9taWMgZmVhdHVyZSBjaGVjayAoTWFyayBZYW8p Ci0gQWRkIGF0b21pYyBBUEkgc3VwcG9ydCAoSGVpa28gU3TDvGJuZSkKLSBEbyBub3QgdXNlIGJy aWRnZSBkcml2ZXIgKFRoaWVycnkgUmVkaW5nKQotIE9wdGltaXphdGlvbiB0aGUgcGh5IGluaXQg c2VxdWVuY2UKCkNoYW5nZXMgaW4gdjU6IE5vbmUKQ2hhbmdlcyBpbiB2NDogTm9uZQpDaGFuZ2Vz IGluIHYzOiBOb25lCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgICAgICAgICAg ICB8ICAgMTAgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlICAgICAgICAgICB8 ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgICAgICB8IDEx OTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfZHJtX3ZvcC5jIHwgICAgMyArCiA0IGZpbGVzIGNoYW5nZWQsIDEyMTAgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1t aXBpLWRzaS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCAzNTIxNWY2Li44NTczOTg1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtMjUsMyArMjUsMTMgQEAgY29uZmlnIFJP Q0tDSElQX0RXX0hETUkKIAkgIGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBIRE1JIGRyaXZl ci4gSWYgeW91IHdhbnQgdG8KIAkgIGVuYWJsZSBIRE1JIG9uIFJLMzI4OCBiYXNlZCBTb0MsIHlv dSBzaG91bGQgc2VsZXQgdGhpcwogCSAgb3B0aW9uLgorCitjb25maWcgUk9DS0NISVBfRFdfTUlQ SV9EU0kKKwl0cmlzdGF0ZSAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3Bz eXMgRFcgTUlQSSBEU0kiCisJZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKKwlzZWxlY3QgRFJNX01J UElfRFNJCisJaGVscAorCSBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgUm9ja2NoaXAgU29DIHNw ZWNpZmljIGV4dGVuc2lvbnMKKwkgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEhETUkgZHJp dmVyLiBJZiB5b3Ugd2FudCB0bworCSBlbmFibGUgTUlQSSBEU0kgb24gUkszMjg4IGJhc2VkIFNv QywgeW91IHNob3VsZCBzZWxldCB0aGlzCisJIG9wdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtl ZmlsZQppbmRleCBhOWQzODBmLi5kMWRjMGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxl CkBAIC02LDYgKzYsNyBAQCByb2NrY2hpcGRybS15IDo9IHJvY2tjaGlwX2RybV9kcnYubyByb2Nr Y2hpcF9kcm1fZmIubyByb2NrY2hpcF9kcm1fZmJkZXYubyBcCiAJCXJvY2tjaGlwX2RybV9nZW0u bwogCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hpcC5v CitvYmotJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLm8KIAog b2JqLSQoQ09ORklHX0RSTV9ST0NLQ0hJUCkgKz0gcm9ja2NoaXBkcm0ubyByb2NrY2hpcF9kcm1f dm9wLm8gXAogCQkJCXJvY2tjaGlwX3ZvcF9yZWcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHct bWlwaS1kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTcwZjlkCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMK QEAgLTAsMCArMSwxMTk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBGdXpob3UgUm9j a2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50 Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5o PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9k cm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlf ZGlzcGxheS5oPgorCisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgorI2luY2x1ZGUgInJv Y2tjaGlwX2RybV92b3AuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAgICAiZHctbWlwaS1kc2ki CisKKyNkZWZpbmUgR1JGX1NPQ19DT042ICAgICAgICAgICAgICAgICAgICAweDAyNWMKKyNkZWZp bmUgRFNJMF9TRUxfVk9QX0xJVCAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBEU0kx X1NFTF9WT1BfTElUICAgICAgICAgICAgICAgICgxIDw8IDkpCisKKyNkZWZpbmUgRFNJX1ZFUlNJ T04JCQkweDAwCisjZGVmaW5lIERTSV9QV1JfVVAJCQkweDA0CisjZGVmaW5lIFJFU0VUCQkJCTAK KyNkZWZpbmUgUE9XRVJVUAkJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfQ0xLTUdSX0NGRwkJCTB4 MDgKKyNkZWZpbmUgVE9fQ0xLX0RJVklEU0lPTihkaXYpCQkoKChkaXYpICYgMHhmZikgPDwgOCkK KyNkZWZpbmUgVFhfRVNDX0NMS19ESVZJRFNJT04oZGl2KQkoKChkaXYpICYgMHhmZikgPDwgMCkK KworI2RlZmluZSBEU0lfRFBJX1ZDSUQJCQkweDBjCisjZGVmaW5lIERQSV9WSUQodmlkKQkJCSgo KHZpZCkgJiAweDMpIDw8IDApCisKKyNkZWZpbmUgRFNJX0RQSV9DT0xPUl9DT0RJTkcJCTB4MTAK KyNkZWZpbmUgRU4xOF9MT09TRUxZCQkJQklUKDgpCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdf MTZCSVRfMQkweDAKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8yCTB4MQorI2RlZmlu ZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzMJMHgyCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdf MThCSVRfMQkweDMKKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xOEJJVF8yCTB4NAorI2RlZmlu ZSBEUElfQ09MT1JfQ09ESU5HXzI0QklUCQkweDUKKworI2RlZmluZSBEU0lfRFBJX0NGR19QT0wJ CQkweDE0CisjZGVmaW5lIENPTE9STV9BQ1RJVkVfTE9XCQlCSVQoNCkKKyNkZWZpbmUgU0hVVERf QUNUSVZFX0xPVwkJQklUKDMpCisjZGVmaW5lIEhTWU5DX0FDVElWRV9MT1cJCUJJVCgyKQorI2Rl ZmluZSBWU1lOQ19BQ1RJVkVfTE9XCQlCSVQoMSkKKyNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJ CUJJVCgwKQorCisjZGVmaW5lIERTSV9EUElfTFBfQ01EX1RJTQkJMHgxOAorI2RlZmluZSBPVVRW QUNUX0xQQ01EX1RJTUUocCkJCSgoKHApICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIElOVkFDVF9M UENNRF9USU1FKHApCQkoKHApICYgMHhmZikKKworI2RlZmluZSBEU0lfREJJX0NGRwkJCTB4MjAK KyNkZWZpbmUgRFNJX0RCSV9DTURTSVpFCQkJMHgyOAorCisjZGVmaW5lIERTSV9QQ0tIRExfQ0ZH CQkJMHgyYworI2RlZmluZSBFTl9DUkNfUlgJCQlCSVQoNCkKKyNkZWZpbmUgRU5fRUNDX1JYCQkJ QklUKDMpCisjZGVmaW5lIEVOX0JUQQkJCQlCSVQoMikKKyNkZWZpbmUgRU5fRU9UUF9SWAkJCUJJ VCgxKQorI2RlZmluZSBFTl9FT1RQX1RYCQkJQklUKDApCisKKyNkZWZpbmUgRFNJX01PREVfQ0ZH CQkJMHgzNAorI2RlZmluZSBFTkFCTEVfVklERU9fTU9ERQkJMAorI2RlZmluZSBFTkFCTEVfQ01E X01PREUJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfVklEX01PREVfQ0ZHCQkweDM4CisjZGVmaW5l IEZSQU1FX0JUQV9BQ0sJCQlCSVQoMTQpCisjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVIJCSgweDNm IDw8IDgpCisjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVJfTUFTSwkJKDB4M2YgPDwgOCkKKyNkZWZp bmUgVklEX01PREVfVFlQRV9CVVJTVF9TWU5DX1BVTFNFUwkJMHgyCisjZGVmaW5lIFZJRF9NT0RF X1RZUEVfTUFTSwkJCTB4MworCisjZGVmaW5lIERTSV9WSURfUEtUX1NJWkUJCTB4M2MKKyNkZWZp bmUgVklEX1BLVF9TSVpFKHApCQkJKCgocCkgJiAweDNmZmYpIDw8IDApCisjZGVmaW5lIFZJRF9Q S1RfTUFYX1NJWkUJCTB4M2ZmZgorCisjZGVmaW5lIERTSV9WSURfSFNBX1RJTUUJCTB4NDgKKyNk ZWZpbmUgRFNJX1ZJRF9IQlBfVElNRQkJMHg0YworI2RlZmluZSBEU0lfVklEX0hMSU5FX1RJTUUJ CTB4NTAKKyNkZWZpbmUgRFNJX1ZJRF9WU0FfTElORVMJCTB4NTQKKyNkZWZpbmUgRFNJX1ZJRF9W QlBfTElORVMJCTB4NTgKKyNkZWZpbmUgRFNJX1ZJRF9WRlBfTElORVMJCTB4NWMKKyNkZWZpbmUg RFNJX1ZJRF9WQUNUSVZFX0xJTkVTCQkweDYwCisjZGVmaW5lIERTSV9DTURfTU9ERV9DRkcJCTB4 NjgKKyNkZWZpbmUgTUFYX1JEX1BLVF9TSVpFX0xQCQlCSVQoMjQpCisjZGVmaW5lIERDU19MV19U WF9MUAkJCUJJVCgxOSkKKyNkZWZpbmUgRENTX1NSXzBQX1RYX0xQCQkJQklUKDE4KQorI2RlZmlu ZSBEQ1NfU1dfMVBfVFhfTFAJCQlCSVQoMTcpCisjZGVmaW5lIERDU19TV18wUF9UWF9MUAkJCUJJ VCgxNikKKyNkZWZpbmUgR0VOX0xXX1RYX0xQCQkJQklUKDE0KQorI2RlZmluZSBHRU5fU1JfMlBf VFhfTFAJCQlCSVQoMTMpCisjZGVmaW5lIEdFTl9TUl8xUF9UWF9MUAkJCUJJVCgxMikKKyNkZWZp bmUgR0VOX1NSXzBQX1RYX0xQCQkJQklUKDExKQorI2RlZmluZSBHRU5fU1dfMlBfVFhfTFAJCQlC SVQoMTApCisjZGVmaW5lIEdFTl9TV18xUF9UWF9MUAkJCUJJVCg5KQorI2RlZmluZSBHRU5fU1df MFBfVFhfTFAJCQlCSVQoOCkKKyNkZWZpbmUgRU5fQUNLX1JRU1QJCQlCSVQoMSkKKyNkZWZpbmUg RU5fVEVBUl9GWAkJCUJJVCgwKQorCisjZGVmaW5lIENNRF9NT0RFX0FMTF9MUAkJCShNQVhfUkRf UEtUX1NJWkVfTFAgfCBcCisJCQkJCSBEQ1NfTFdfVFhfTFAgfCBcCisJCQkJCSBEQ1NfU1JfMFBf VFhfTFAgfCBcCisJCQkJCSBEQ1NfU1dfMVBfVFhfTFAgfCBcCisJCQkJCSBEQ1NfU1dfMFBfVFhf TFAgfCBcCisJCQkJCSBHRU5fTFdfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1JfMlBfVFhfTFAgfCBc CisJCQkJCSBHRU5fU1JfMVBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1JfMFBfVFhfTFAgfCBcCisJ CQkJCSBHRU5fU1dfMlBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1dfMVBfVFhfTFAgfCBcCisJCQkJ CSBHRU5fU1dfMFBfVFhfTFApCisKKyNkZWZpbmUgRFNJX0dFTl9IRFIJCQkweDZjCisjZGVmaW5l IEdFTl9IREFUQShkYXRhKQkJCSgoKGRhdGEpICYgMHhmZmZmKSA8PCA4KQorI2RlZmluZSBHRU5f SERBVEFfTUFTSwkJCSgweGZmZmYgPDwgOCkKKyNkZWZpbmUgR0VOX0hUWVBFKHR5cGUpCQkJKCgo dHlwZSkgJiAweGZmKSA8PCAwKQorI2RlZmluZSBHRU5fSFRZUEVfTUFTSwkJCTB4ZmYKKworI2Rl ZmluZSBEU0lfR0VOX1BMRF9EQVRBCQkweDcwCisKKyNkZWZpbmUgRFNJX0NNRF9QS1RfU1RBVFVT CQkweDc0CisjZGVmaW5lIEdFTl9DTURfRU1QVFkJCQlCSVQoMCkKKyNkZWZpbmUgR0VOX0NNRF9G VUxMCQkJQklUKDEpCisjZGVmaW5lIEdFTl9QTERfV19FTVBUWQkJCUJJVCgyKQorI2RlZmluZSBH RU5fUExEX1dfRlVMTAkJCUJJVCgzKQorI2RlZmluZSBHRU5fUExEX1JfRU1QVFkJCQlCSVQoNCkK KyNkZWZpbmUgR0VOX1BMRF9SX0ZVTEwJCQlCSVQoNSkKKyNkZWZpbmUgR0VOX1JEX0NNRF9CVVNZ CQkJQklUKDYpCisKKyNkZWZpbmUgRFNJX1RPX0NOVF9DRkcJCQkweDc4CisjZGVmaW5lIEhTVFhf VE9fQ05UKHApCQkJKCgocCkgJiAweGZmZmYpIDw8IDE2KQorI2RlZmluZSBMUFJYX1RPX0NOVChw KQkJCSgocCkgJiAweGZmZmYpCisKKyNkZWZpbmUgRFNJX0JUQV9UT19DTlQJCQkweDhjCisKKyNk ZWZpbmUgRFNJX0xQQ0xLX0NUUkwJCQkweDk0CisjZGVmaW5lIEFVVE9fQ0xLTEFORV9DVFJMCQlC SVQoMSkKKyNkZWZpbmUgUEhZX1RYUkVRVUVTVENMS0hTCQlCSVQoMCkKKworI2RlZmluZSBEU0lf UEhZX1RNUl9MUENMS19DRkcJCTB4OTgKKyNkZWZpbmUgUEhZX0NMS0hTMkxQX1RJTUUobGJjYykJ CSgoKGxiY2MpICYgMHgzZmYpIDw8IDE2KQorI2RlZmluZSBQSFlfQ0xLTFAySFNfVElNRShsYmNj KQkJKChsYmNjKSAmIDB4M2ZmKQorCisjZGVmaW5lIERTSV9QSFlfVE1SX0NGRwkJCTB4OWMKKyNk ZWZpbmUgUEhZX0hTMkxQX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwgMjQpCisjZGVm aW5lIFBIWV9MUDJIU19USU1FKGxiY2MpCQkoKChsYmNjKSAmIDB4ZmYpIDw8IDE2KQorI2RlZmlu ZSBNQVhfUkRfVElNRShsYmNjKQkJKChsYmNjKSAmIDB4N2ZmZikKKworI2RlZmluZSBEU0lfUEhZ X1JTVFoJCQkweGEwCisjZGVmaW5lIFBIWV9ESVNGT1JDRVBMTAkJCTAKKyNkZWZpbmUgUEhZX0VO Rk9SQ0VQTEwJCQlCSVQoMykKKyNkZWZpbmUgUEhZX0RJU0FCTEVDTEsJCQkwCisjZGVmaW5lIFBI WV9FTkFCTEVDTEsJCQlCSVQoMikKKyNkZWZpbmUgUEhZX1JTVFoJCQkwCisjZGVmaW5lIFBIWV9V TlJTVFoJCQlCSVQoMSkKKyNkZWZpbmUgUEhZX1NIVVRET1dOWgkJCTAKKyNkZWZpbmUgUEhZX1VO U0hVVERPV05aCQkJQklUKDApCisKKyNkZWZpbmUgRFNJX1BIWV9JRl9DRkcJCQkweGE0CisjZGVm aW5lIE5fTEFORVMobikJCQkoKCgobikgLSAxKSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgUEhZX1NU T1BfV0FJVF9USU1FKGN5Y2xlKQkoKChjeWNsZSkgJiAweGZmKSA8PCA4KQorCisjZGVmaW5lIERT SV9QSFlfU1RBVFVTCQkJMHhiMAorI2RlZmluZSBMT0NLCQkJCUJJVCgwKQorI2RlZmluZSBTVE9Q X1NUQVRFX0NMS19MQU5FCQlCSVQoMikKKworI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJMMAkJMHhi NAorI2RlZmluZSBQSFlfVEVTVENMSwkJCUJJVCgxKQorI2RlZmluZSBQSFlfVU5URVNUQ0xLCQkJ MAorI2RlZmluZSBQSFlfVEVTVENMUgkJCUJJVCgwKQorI2RlZmluZSBQSFlfVU5URVNUQ0xSCQkJ MAorCisjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwxCQkweGI4CisjZGVmaW5lIFBIWV9URVNURU4J CQlCSVQoMTYpCisjZGVmaW5lIFBIWV9VTlRFU1RFTgkJCTAKKyNkZWZpbmUgUEhZX1RFU1RET1VU KG4pCQkJKCgobikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBQSFlfVEVTVERJTihuKQkJCSgoKG4p ICYgMHhmZikgPDwgMCkKKworI2RlZmluZSBEU0lfSU5UX1NUMAkJCTB4YmMKKyNkZWZpbmUgRFNJ X0lOVF9TVDEJCQkweGMwCisjZGVmaW5lIERTSV9JTlRfTVNLMAkJCTB4YzQKKyNkZWZpbmUgRFNJ X0lOVF9NU0sxCQkJMHhjOAorCisjZGVmaW5lIFBIWV9TVEFUVVNfVElNRU9VVF9VUwkJMTAwMDAK KyNkZWZpbmUgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUwkyMDAwMAorCisjZGVmaW5lIEJZUEFT U19WQ09fUkFOR0UJQklUKDcpCisjZGVmaW5lIFZDT19SQU5HRV9DT05fU0VMKHZhbCkJKCgodmFs KSAmIDB4NykgPDwgMykKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fREVGQVVMVAkoMHgwIDw8IDEp CisjZGVmaW5lIFZDT19JTl9DQVBfQ09OX0xPVwkoMHgxIDw8IDEpCisjZGVmaW5lIFZDT19JTl9D QVBfQ09OX0hJR0gJKDB4MiA8PCAxKQorI2RlZmluZSBSRUZfQklBU19DVVJfU0VMCUJJVCgwKQor CisjZGVmaW5lIENQX0NVUlJFTlRfM01BCQlCSVQoMykKKyNkZWZpbmUgQ1BfUFJPR1JBTV9FTgkJ QklUKDcpCisjZGVmaW5lIExQRl9QUk9HUkFNX0VOCQlCSVQoNikKKyNkZWZpbmUgTFBGX1JFU0lT VE9SU18yMF9LT0hNCTAKKworI2RlZmluZSBIU0ZSRVFSQU5HRV9TRUwodmFsKQkoKCh2YWwpICYg MHgzZikgPDwgMSkKKworI2RlZmluZSBJTlBVVF9ESVZJREVSKHZhbCkJKCh2YWwgLSAxKSAmIDB4 N2YpCisjZGVmaW5lIExPV19QUk9HUkFNX0VOCQkwCisjZGVmaW5lIEhJR0hfUFJPR1JBTV9FTgkJ QklUKDcpCisjZGVmaW5lIExPT1BfRElWX0xPV19TRUwodmFsKQkoKHZhbCAtIDEpICYgMHgxZikK KyNkZWZpbmUgTE9PUF9ESVZfSElHSF9TRUwodmFsKQkoKCh2YWwgLSAxKSA+PiA1KSAmIDB4MWYp CisjZGVmaW5lIFBMTF9MT09QX0RJVl9FTgkJQklUKDUpCisjZGVmaW5lIFBMTF9JTlBVVF9ESVZf RU4JQklUKDQpCisKKyNkZWZpbmUgUE9XRVJfQ09OVFJPTAkJQklUKDYpCisjZGVmaW5lIElOVEVS TkFMX1JFR19DVVJSRU5UCUJJVCgzKQorI2RlZmluZSBCSUFTX0JMT0NLX09OCQlCSVQoMikKKyNk ZWZpbmUgQkFOREdBUF9PTgkJQklUKDApCisKKyNkZWZpbmUgVEVSX1JFU0lTVE9SX0hJR0gJQklU KDcpCisjZGVmaW5lCVRFUl9SRVNJU1RPUl9MT1cJMAorI2RlZmluZSBMRVZFTF9TSElGVEVSU19P TglCSVQoNikKKyNkZWZpbmUgVEVSX0NBTF9ET05FCQlCSVQoNSkKKyNkZWZpbmUgU0VUUkRfTUFY CQkoMHg3IDw8IDIpCisjZGVmaW5lIFBPV0VSX01BTkFHRQkJQklUKDEpCisjZGVmaW5lIFRFUl9S RVNJU1RPUlNfT04JQklUKDApCisKKyNkZWZpbmUgQklBU0VYVFJfU0VMKHZhbCkJKCh2YWwpICYg MHg3KQorI2RlZmluZSBCQU5ER0FQX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKKyNkZWZpbmUgVExQ X1BST0dSQU1fRU4JCUJJVCg3KQorI2RlZmluZSBUSFNfUFJFX1BST0dSQU1fRU4JQklUKDcpCisj ZGVmaW5lIFRIU19aRVJPX1BST0dSQU1fRU4JQklUKDYpCisKK2VudW0geworCUJBTkRHQVBfOTdf MDcsCisJQkFOREdBUF85OF8wNSwKKwlCQU5ER0FQXzk5XzAyLAorCUJBTkRHQVBfMTAwXzAwLAor CUJBTkRHQVBfOTNfMTcsCisJQkFOREdBUF85NF8xNSwKKwlCQU5ER0FQXzk1XzEyLAorCUJBTkRH QVBfOTZfMTAsCit9OworCitlbnVtIHsKKwlCSUFTRVhUUl84N18xLAorCUJJQVNFWFRSXzkxXzUs CisJQklBU0VYVFJfOTVfOSwKKwlCSUFTRVhUUl8xMDAsCisJQklBU0VYVFJfMTA1Xzk0LAorCUJJ QVNFWFRSXzExMV84OCwKKwlCSUFTRVhUUl8xMThfOCwKKwlCSUFTRVhUUl8xMjdfNywKK307CisK K3N0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgeworCXVuc2lnbmVkIGludCBtYXhfZGF0YV9s YW5lczsKKwllbnVtIGRybV9tb2RlX3N0YXR1cyAoKm1vZGVfdmFsaWQpKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCisJCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl KTsKK307CisKK3N0cnVjdCBkd19taXBpX2RzaSB7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29k ZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOworCXN0cnVjdCBtaXBpX2RzaV9o b3N0IGRzaV9ob3N0OworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkZXZpY2Ug KmRldjsKKwlzdHJ1Y3QgcmVnbWFwICpncmZfcmVnbWFwOworCXZvaWQgX19pb21lbSAqYmFzZTsK KworCXN0cnVjdCBjbGsgKnBsbHJlZl9jbGs7CisJc3RydWN0IGNsayAqcGNsazsKKworCXVuc2ln bmVkIGludCBsYW5lX21icHM7IC8qIHBlciBsYW5lICovCisJdTMyIGNoYW5uZWw7CisJdTMyIGxh bmVzOworCXUzMiBmb3JtYXQ7CisJdTE2IGlucHV0X2RpdjsKKwl1MTYgZmVlZGJhY2tfZGl2Owor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJY29uc3Qgc3RydWN0IGR3X21pcGlf ZHNpX3BsYXRfZGF0YSAqcGRhdGE7CisKK307CisKK2VudW0gZHdfbWlwaV9kc2lfbW9kZSB7CisJ RFdfTUlQSV9EU0lfQ01EX01PREUsCisJRFdfTUlQSV9EU0lfVklEX01PREUsCit9OworCitzdHJ1 Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgeworCXVuc2lnbmVkIGludCBtYXhfbWJwczsKKwl1OCB0 ZXN0ZGluOworfTsKKworLyogVGhlIHRhYmxlIGlzIGJhc2VkIG9uIDI3TUh6IERQSFkgcGxsIHJl ZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9t YXAgZHB0ZGluX21hcFtdID0geworCXsgIDkwLCAweDAwfSwgeyAxMDAsIDB4MTB9LCB7IDExMCwg MHgyMH0sIHsgMTMwLCAweDAxfSwKKwl7IDE0MCwgMHgxMX0sIHsgMTUwLCAweDIxfSwgeyAxNzAs IDB4MDJ9LCB7IDE4MCwgMHgxMn0sCisJeyAyMDAsIDB4MjJ9LCB7IDIyMCwgMHgwM30sIHsgMjQw LCAweDEzfSwgeyAyNTAsIDB4MjN9LAorCXsgMjcwLCAweDA0fSwgeyAzMDAsIDB4MTR9LCB7IDMz MCwgMHgwNX0sIHsgMzYwLCAweDE1fSwKKwl7IDQwMCwgMHgyNX0sIHsgNDUwLCAweDA2fSwgeyA1 MDAsIDB4MTZ9LCB7IDU1MCwgMHgwN30sCisJeyA2MDAsIDB4MTd9LCB7IDY1MCwgMHgwOH0sIHsg NzAwLCAweDE4fSwgeyA3NTAsIDB4MDl9LAorCXsgODAwLCAweDE5fSwgeyA4NTAsIDB4Mjl9LCB7 IDkwMCwgMHgzOX0sIHsgOTUwLCAweDBhfSwKKwl7MTAwMCwgMHgxYX0sIHsxMDUwLCAweDJhfSwg ezExMDAsIDB4M2F9LCB7MTE1MCwgMHgwYn0sCisJezEyMDAsIDB4MWJ9LCB7MTI1MCwgMHgyYn0s IHsxMzAwLCAweDNifSwgezEzNTAsIDB4MGN9LAorCXsxNDAwLCAweDFjfSwgezE0NTAsIDB4MmN9 LCB7MTUwMCwgMHgzY30KK307CisKK3N0YXRpYyBpbnQgbWF4X21icHNfdG9fdGVzdGRpbih1bnNp Z25lZCBpbnQgbWF4X21icHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShkcHRkaW5fbWFwKTsgaSsrKQorCQlpZiAoZHB0ZGluX21hcFtpXS5tYXhfbWJwcyA+IG1h eF9tYnBzKQorCQkJcmV0dXJuIGRwdGRpbl9tYXBbaV0udGVzdGRpbjsKKworCXJldHVybiAtRUlO VkFMOworfQorCisvKgorICogVGhlIGNvbnRyb2xsZXIgc2hvdWxkIGdlbmVyYXRlIDIgZnJhbWVz IGJlZm9yZQorICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFsLgorICovCitzdGF0aWMgdm9pZCBk d19taXBpX2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQor eworCWludCByZWZyZXNoLCB0d29fZnJhbWVzOworCisJcmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZy ZXNoKGRzaS0+bW9kZSk7CisJdHdvX2ZyYW1lcyA9IERJVl9ST1VORF9VUChNU0VDX1BFUl9TRUMs IHJlZnJlc2gpICogMjsKKwltc2xlZXAodHdvX2ZyYW1lcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGR3X21pcGlfZHNpICpob3N0X3RvX2RzaShzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9z dCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhvc3QsIHN0cnVjdCBkd19taXBpX2RzaSwgZHNp X2hvc3QpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqY29uX3RvX2Rz aShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29u LCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGR3X21pcGlfZHNpICplbmNvZGVyX3RvX2RzaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3QgZHdfbWlwaV9kc2ks IGVuY29kZXIpOworfQorc3RhdGljIGlubGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBkc2ktPmJhc2Ug KyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSwgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGh5X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpLCB1OCB0ZXN0X2NvZGUsCisJCQkJIHU4IHRlc3RfZGF0YSkKK3sKKwkvKgorCSAqIFdpdGgg dGhlIGZhbGxpbmcgZWRnZSBvbiBURVNUQ0xLLCB0aGUgVEVTVERJTls3OjBdIHNpZ25hbCBjb250 ZW50CisJICogaXMgbGF0Y2hlZCBpbnRlcm5hbGx5IGFzIHRoZSBjdXJyZW50IHRlc3QgY29kZS4g VGVzdCBkYXRhIGlzCisJICogcHJvZ3JhbW1lZCBpbnRlcm5hbGx5IGJ5IHJpc2luZyBlZGdlIG9u IFRFU1RDTEsuCisJICovCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9U RVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9D VFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4o dGVzdF9jb2RlKSk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VO VEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1Rf Q1RSTDEsIFBIWV9VTlRFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RE SU4odGVzdF9kYXRhKSk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZ X1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9w aHlfaW5pdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlpbnQgcmV0LCB0ZXN0ZGluLCB2 Y28sIHZhbDsKKworCXZjbyA9IChkc2ktPmxhbmVfbWJwcyA8IDIwMCkgPyAwIDogKGRzaS0+bGFu ZV9tYnBzICsgMTAwKSAvIDIwMDsKKworCXRlc3RkaW4gPSBtYXhfbWJwc190b190ZXN0ZGluKGRz aS0+bGFuZV9tYnBzKTsKKwlpZiAodGVzdGRpbiA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwK KwkJCSJmYWlsZWQgdG8gZ2V0IHRlc3RkaW4gZm9yICVkbWJwcyBsYW5lIGNsb2NrXG4iLAorCQkJ ZHNpLT5sYW5lX21icHMpOworCQlyZXR1cm4gdGVzdGRpbjsKKwl9CisKKwlkc2lfd3JpdGUoZHNp LCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4 MTAsIEJZUEFTU19WQ09fUkFOR0UgfAorCQkJCQkgVkNPX1JBTkdFX0NPTl9TRUwodmNvKSB8CisJ CQkJCSBWQ09fSU5fQ0FQX0NPTl9MT1cgfAorCQkJCQkgUkVGX0JJQVNfQ1VSX1NFTCk7CisKKwlk d19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDExLCBDUF9DVVJSRU5UXzNNQSk7CisJZHdfbWlw aV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxMiwgQ1BfUFJPR1JBTV9FTiB8IExQRl9QUk9HUkFNX0VO IHwKKwkJCQkJIExQRl9SRVNJU1RPUlNfMjBfS09ITSk7CisKKwlkd19taXBpX2RzaV9waHlfd3Jp dGUoZHNpLCAweDQ0LCBIU0ZSRVFSQU5HRV9TRUwodGVzdGRpbikpOworCisJZHdfbWlwaV9kc2lf cGh5X3dyaXRlKGRzaSwgMHgxOSwgUExMX0xPT1BfRElWX0VOIHwgUExMX0lOUFVUX0RJVl9FTik7 CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxNywgSU5QVVRfRElWSURFUihkc2ktPmlu cHV0X2RpdikpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTgsIExPT1BfRElWX0xP V19TRUwoZHNpLT5mZWVkYmFja19kaXYpIHwKKwkJCQkJIExPV19QUk9HUkFNX0VOKTsKKwlkd19t aXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE4LCBMT09QX0RJVl9ISUdIX1NFTChkc2ktPmZlZWRi YWNrX2RpdikgfAorCQkJCQkgSElHSF9QUk9HUkFNX0VOKTsKKworCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIDB4MjAsIFBPV0VSX0NPTlRST0wgfCBJTlRFUk5BTF9SRUdfQ1VSUkVOVCB8CisJ CQkJCSBCSUFTX0JMT0NLX09OIHwgQkFOREdBUF9PTik7CisKKwlkd19taXBpX2RzaV9waHlfd3Jp dGUoZHNpLCAweDIxLCBURVJfUkVTSVNUT1JfTE9XIHwgVEVSX0NBTF9ET05FIHwKKwkJCQkJIFNF VFJEX01BWCB8IFRFUl9SRVNJU1RPUlNfT04pOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IDB4MjEsIFRFUl9SRVNJU1RPUl9ISUdIIHwgTEVWRUxfU0hJRlRFUlNfT04gfAorCQkJCQkgU0VU UkRfTUFYIHwgUE9XRVJfTUFOQUdFIHwKKwkJCQkJIFRFUl9SRVNJU1RPUlNfT04pOworCisJZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMiwgTE9XX1BST0dSQU1fRU4gfAorCQkJCQkgQklB U0VYVFJfU0VMKEJJQVNFWFRSXzEyN183KSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg MHgyMiwgSElHSF9QUk9HUkFNX0VOIHwKKwkJCQkJIEJBTkRHQVBfU0VMKEJBTkRHQVBfOTZfMTAp KTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NzAsIFRMUF9QUk9HUkFNX0VOIHwg MHhmKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDcxLCBUSFNfUFJFX1BST0dSQU1f RU4gfCAweDU1KTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDcyLCBUSFNfWkVST19Q Uk9HUkFNX0VOIHwgMHhhKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX0VO Rk9SQ0VQTEwgfCBQSFlfRU5BQkxFQ0xLIHwKKwkJCQkgICAgIFBIWV9VTlJTVFogfCBQSFlfVU5T SFVURE9XTlopOworCisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFz ZSArIERTSV9QSFlfU1RBVFVTLAorCQkJCSB2YWwsIHZhbCAmIExPQ0ssIDEwMDAsIFBIWV9TVEFU VVNfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZh aWxlZCB0byB3YWl0IGZvciBwaHkgbG9jayBzdGF0ZVxuIik7CisJCXJldHVybiByZXQ7CisJfQor CisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfUEhZX1NU QVRVUywKKwkJCQkgdmFsLCB2YWwgJiBTVE9QX1NUQVRFX0NMS19MQU5FLCAxMDAwLAorCQkJCSBQ SFlfU1RBVFVTX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5k ZXYsCisJCQkiZmFpbGVkIHRvIHdhaXQgZm9yIHBoeSBjbGsgbGFuZSBzdG9wIHN0YXRlXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3X21p cGlfZHNpX2dldF9sYW5lX2JwcyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1bnNpZ25l ZCBpbnQgYnBwLCBpLCBwcmU7CisJdW5zaWduZWQgbG9uZyBtcGNsaywgcGxscmVmLCB0bXA7CisJ dW5zaWduZWQgaW50IG0gPSAxLCBuID0gMSwgdGFyZ2V0X21icHMgPSAxMDAwOworCXVuc2lnbmVk IGludCBtYXhfbWJwcyA9IGRwdGRpbl9tYXBbQVJSQVlfU0laRShkcHRkaW5fbWFwKSAtIDFdLm1h eF9tYnBzOworCisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1h dCk7CisJaWYgKGJwcCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQg YnBwIGZvciBwaXhlbCBmb3JtYXQgJWRcbiIsCisJCQlkc2ktPmZvcm1hdCk7CisJCXJldHVybiBi cHA7CisJfQorCisJbXBjbGsgPSBESVZfUk9VTkRfVVAoZHNpLT5tb2RlLT5jbG9jaywgTVNFQ19Q RVJfU0VDKTsKKwlpZiAobXBjbGspIHsKKwkJLyogdGFrZSAxIC8gMC45LCBzaW5jZSBtYnBzIG11 c3QgYmlnIHRoYW4gYmFuZHdpZHRoIG9mIFJHQiAqLworCQl0bXAgPSBtcGNsayAqIChicHAgLyBk c2ktPmxhbmVzKSAqIDEwIC8gOTsKKwkJaWYgKHRtcCA8IG1heF9tYnBzKQorCQkJdGFyZ2V0X21i cHMgPSB0bXA7CisJCWVsc2UKKwkJCWRldl9lcnIoZHNpLT5kZXYsICJEUEhZIGNsb2NrIGZyZXF1 ZW5jeSBpcyBvdXQgb2YgcmFuZ2VcbiIpOworCX0KKworCXBsbHJlZiA9IERJVl9ST1VORF9VUChj bGtfZ2V0X3JhdGUoZHNpLT5wbGxyZWZfY2xrKSwgVVNFQ19QRVJfU0VDKTsKKwl0bXAgPSBwbGxy ZWY7CisKKwlmb3IgKGkgPSAxOyBpIDwgNjsgaSsrKSB7CisJCXByZSA9IHBsbHJlZiAvIGk7CisJ CWlmICgodG1wID4gKHRhcmdldF9tYnBzICUgcHJlKSkgJiYgKHRhcmdldF9tYnBzIC8gcHJlIDwg NTEyKSkgeworCQkJdG1wID0gdGFyZ2V0X21icHMgJSBwcmU7CisJCQluID0gaTsKKwkJCW0gPSB0 YXJnZXRfbWJwcyAvIHByZTsKKwkJfQorCQlpZiAodG1wID09IDApCisJCQlicmVhazsKKwl9CisK Kwlkc2ktPmxhbmVfbWJwcyA9IHBsbHJlZiAvIG4gKiBtOworCWRzaS0+aW5wdXRfZGl2ID0gbjsK Kwlkc2ktPmZlZWRiYWNrX2RpdiA9IG07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBk d19taXBpX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkg ICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNp ICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKKworCWlmIChkZXZpY2UtPmxhbmVzID4gZHNpLT5w ZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgInRoZSBudW1iZXIg b2YgZGF0YSBsYW5lcygldSkgaXMgdG9vIG1hbnlcbiIsCisJCQkJZGV2aWNlLT5sYW5lcyk7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKGRldmljZS0+bW9kZV9mbGFncyAmIE1JUElf RFNJX01PREVfVklERU9fQlVSU1QpIHx8CisJICAgICEoZGV2aWNlLT5tb2RlX2ZsYWdzICYgTUlQ SV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZGV2 aWNlIG1vZGUgaXMgdW5zdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlk c2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmNoYW5uZWwgPSBkZXZpY2UtPmNoYW5u ZWw7CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKKwlkc2ktPnBhbmVsID0gb2ZfZHJt X2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zfbm9kZSk7CisJaWYgKGRzaS0+cGFuZWwpCisJCXJl dHVybiBkcm1fcGFuZWxfYXR0YWNoKGRzaS0+cGFuZWwsICZkc2ktPmNvbm5lY3Rvcik7CisKKwly ZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2RldGFjaChz dHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0 KTsKKworCWRybV9wYW5lbF9kZXRhY2goZHNpLT5wYW5lbCk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSwgdTMyIHZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVhZHhfcG9sbF90aW1l b3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsCisJCQkJIHZhbCwgISh2 YWwgJiBHRU5fQ01EX0ZVTEwpLCAxMDAwLAorCQkJCSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VT KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBh dmFpbGFibGUgY29tbWFuZCBGSUZPXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfR0VOX0hEUiwgdmFsKTsKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChy ZWFkbCwgZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVTLAorCQkJCSB2YWwsIHZhbCAmIChH RU5fQ01EX0VNUFRZIHwgR0VOX1BMRF9XX0VNUFRZKSwKKwkJCQkgMTAwMCwgQ01EX1BLVF9TVEFU VVNfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZh aWxlZCB0byB3cml0ZSBjb21tYW5kIEZJRk9cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93cml0ZShzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21z ZyAqbXNnKQoreworCWNvbnN0IHUxNiAqdHhfYnVmID0gbXNnLT50eF9idWY7CisJdTMyIHZhbCA9 IEdFTl9IREFUQSgqdHhfYnVmKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOworCisJaWYgKG1zZy0+ dHhfbGVuID4gMikgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAidG9vIGxvbmcgdHggYnVmIGxlbmd0 aCAlenUgZm9yIHNob3J0IHdyaXRlXG4iLAorCQkJbXNnLT50eF9sZW4pOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlyZXR1cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCB2 YWwpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKHN0cnVjdCBk d19taXBpX2RzaSAqZHNpLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1z ZykKK3sKKwljb25zdCB1MzIgKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOworCWludCBsZW4gPSBtc2ct PnR4X2xlbiwgcGxkX2RhdGFfYnl0ZXMgPSBzaXplb2YoKnR4X2J1ZiksIHJldDsKKwl1MzIgdmFs ID0gR0VOX0hEQVRBKG1zZy0+dHhfbGVuKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOworCXUzMiBy ZW1haW5kZXIgPSAwOworCisJaWYgKG1zZy0+dHhfbGVuIDwgMykgeworCQlkZXZfZXJyKGRzaS0+ ZGV2LCAid3JvbmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIGxvbmcgd3JpdGVcbiIsCisJCQltc2ct PnR4X2xlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdoaWxlIChESVZfUk9VTkRfVVAo bGVuLCBwbGRfZGF0YV9ieXRlcykpIHsKKwkJaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7CisJ CQltZW1jcHkoJnJlbWFpbmRlciwgdHhfYnVmLCBsZW4pOworCQkJZHNpX3dyaXRlKGRzaSwgRFNJ X0dFTl9QTERfREFUQSwgcmVtYWluZGVyKTsKKwkJCWxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlk c2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCAqdHhfYnVmKTsKKwkJCXR4X2J1ZisrOwor CQkJbGVuIC09IHBsZF9kYXRhX2J5dGVzOworCQl9CisKKwkJcmV0ID0gcmVhZHhfcG9sbF90aW1l b3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsCisJCQkJCSB2YWwsICEo dmFsICYgR0VOX1BMRF9XX0ZVTEwpLCAxMDAwLAorCQkJCQkgQ01EX1BLVF9TVEFUVVNfVElNRU9V VF9VUyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJCSJmYWls ZWQgdG8gZ2V0IGF2YWlsYWJsZSB3cml0ZSBwYXlsb2FkIEZJRk9cbiIpOworCQkJcmV0dXJuIHJl dDsKKwkJfQorCX0KKworCXJldHVybiBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShkc2ks IHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIoc3Ry dWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJCSBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNn ICptc2cpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsK KwlpbnQgcmV0OworCisJc3dpdGNoIChtc2ctPnR5cGUpIHsKKwljYXNlIE1JUElfRFNJX0RDU19T SE9SVF9XUklURToKKwljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTToKKwljYXNl IE1JUElfRFNJX1NFVF9NQVhJTVVNX1JFVFVSTl9QQUNLRVRfU0laRToKKwkJcmV0ID0gZHdfbWlw aV9kc2lfZGNzX3Nob3J0X3dyaXRlKGRzaSwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RT SV9EQ1NfTE9OR19XUklURToKKwkJcmV0ID0gZHdfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUoZHNp LCBtc2cpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRzaS0+ZGV2LCAidW5zdXBw b3J0ZWQgbWVzc2FnZSB0eXBlXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIGR3X21pcGlf ZHNpX2hvc3Rfb3BzID0geworCS5hdHRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2F0dGFjaCwKKwku ZGV0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2gsCisJLnRyYW5zZmVyID0gZHdfbWlwaV9k c2lfaG9zdF90cmFuc2ZlciwKK307CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX21v ZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCXUzMiB2YWw7CisKKwl2YWwg PSBWSURfTU9ERV9UWVBFX0JVUlNUX1NZTkNfUFVMU0VTIHwgRU5BQkxFX0xPV19QT1dFUjsKKwor CWRzaV93cml0ZShkc2ksIERTSV9WSURfTU9ERV9DRkcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX3NldF9tb2RlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSBlbnVt IGR3X21pcGlfZHNpX21vZGUgbW9kZSkKK3sKKwlpZiAobW9kZSA9PSBEV19NSVBJX0RTSV9DTURf TU9ERSkgeworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJCWRzaV93cml0 ZShkc2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RFKTsKKwkJZHNpX3dyaXRlKGRzaSwg RFNJX1BXUl9VUCwgUE9XRVJVUCk7CisJfSBlbHNlIHsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BX Ul9VUCwgUkVTRVQpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9WSURF T19NT0RFKTsKKwkJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKwkJZHNpX3dy aXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV9kaXNhYmxlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShk c2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBI WV9SU1RaKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfaW5pdChzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfRElTRk9SQ0VQTEwgfCBQSFlfRElTQUJMRUNM SworCQkgIHwgUEhZX1JTVFogfCBQSFlfU0hVVERPV05aKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lf Q0xLTUdSX0NGRywgVE9fQ0xLX0RJVklEU0lPTigxMCkgfAorCQkgIFRYX0VTQ19DTEtfRElWSURT SU9OKDcpKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfTFBDTEtfQ1RSTCwgUEhZX1RYUkVRVUVTVENM S0hTKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sK Kwl1MzIgdmFsID0gMCwgY29sb3IgPSAwOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNh c2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzI0QklU OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCWNvbG9yID0gRFBJX0NP TE9SX0NPRElOR18xOEJJVF8yIHwgRU4xOF9MT09TRUxZOworCQlicmVhazsKKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMThCSVRf MTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQljb2xvciA9IERQSV9D T0xPUl9DT0RJTkdfMTZCSVRfMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCEobW9kZS0+ZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX1BWU1lOQykpCisJCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOworCWlm ICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpKQorCQl2YWwgfD0gSFNZTkNf QUNUSVZFX0xPVzsKKworCWRzaV93cml0ZShkc2ksIERTSV9EUElfVkNJRCwgRFBJX1ZJRChkc2kt PmNoYW5uZWwpKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0NPTE9SX0NPRElORywgY29sb3Ip OworCWRzaV93cml0ZShkc2ksIERTSV9EUElfQ0ZHX1BPTCwgdmFsKTsKKwlkc2lfd3JpdGUoZHNp LCBEU0lfRFBJX0xQX0NNRF9USU0sIE9VVFZBQ1RfTFBDTURfVElNRSg0KQorCQkgIHwgSU5WQUNU X0xQQ01EX1RJTUUoNCkpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9wYWNrZXRfaGFu ZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1BDS0hETF9DRkcsIEVOX0NSQ19SWCB8IEVOX0VDQ19SWCB8IEVOX0JUQSk7Cit9CisKK3N0 YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoc3RydWN0IGR3X21pcGlf ZHNpICpkc2ksCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlk c2lfd3JpdGUoZHNpLCBEU0lfVklEX1BLVF9TSVpFLCBWSURfUEtUX1NJWkUobW9kZS0+aGRpc3Bs YXkpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVE9fQ05UX0NG RywgSFNUWF9UT19DTlQoMTAwMCkgfCBMUFJYX1RPX0NOVCgxMDAwKSk7CisJZHNpX3dyaXRlKGRz aSwgRFNJX0JUQV9UT19DTlQsIDB4ZDAwKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfQ01EX01PREVf Q0ZHLCBDTURfTU9ERV9BTExfTFApOworCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5B QkxFX0NNRF9NT0RFKTsKK30KKworLyogR2V0IGxhbmUgYnl0ZSBjbG9jayBjeWNsZXMuICovCitz dGF0aWMgdTMyIGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2Moc3RydWN0IGR3X21pcGlf ZHNpICpkc2ksCisJCQkJCSAgIHUzMiBoY29tcG9uZW50KQoreworCXUzMiBmcmFjLCBsYmNjOwor CisJbGJjYyA9IGhjb21wb25lbnQgKiBkc2ktPmxhbmVfbWJwcyAqIE1TRUNfUEVSX1NFQyAvIDg7 CisKKwlmcmFjID0gbGJjYyAlIGRzaS0+bW9kZS0+Y2xvY2s7CisJbGJjYyA9IGxiY2MgLyBkc2kt Pm1vZGUtPmNsb2NrOworCWlmIChmcmFjKQorCQlsYmNjKys7CisKKwlyZXR1cm4gbGJjYzsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJdTMyIGh0b3RhbCwgaHNhLCBoYnAsIGxiY2M7CisJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2ktPm1vZGU7CisKKwlodG90YWwgPSBtb2RlLT5odG90 YWw7CisJaHNhID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0g bW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCisJbGJjYyA9IGR3X21pcGlfZHNpX2dl dF9oY29tcG9uZW50X2xiY2MoZHNpLCBodG90YWwpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURf SExJTkVfVElNRSwgbGJjYyk7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRf bGJjYyhkc2ksIGhzYSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IU0FfVElNRSwgbGJjYyk7 CisKKwlsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGhicCk7CisJ ZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IQlBfVElNRSwgbGJjYyk7Cit9CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpCit7CisJdTMyIHZhY3RpdmUsIHZzYSwgdmZwLCB2YnA7CisJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUgPSBkc2ktPm1vZGU7CisKKwl2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7CisJ dnNhID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmZwID0gbW9kZS0+ dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBtb2Rl LT52c3luY19lbmQ7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZBQ1RJVkVfTElORVMsIHZh Y3RpdmUpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfVlNBX0xJTkVTLCB2c2EpOworCWRzaV93 cml0ZShkc2ksIERTSV9WSURfVkZQX0xJTkVTLCB2ZnApOworCWRzaV93cml0ZShkc2ksIERTSV9W SURfVkJQX0xJTkVTLCB2YnApOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X3Rp bWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9UTVJfQ0ZHLCBQSFlfSFMyTFBfVElNRSgweDQwKQorCQkgIHwgUEhZX0xQMkhTX1RJ TUUoMHg0MCkgfCBNQVhfUkRfVElNRSgxMDAwMCkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9UTVJfTFBDTEtfQ0ZHLCBQSFlfQ0xLSFMyTFBfVElNRSgweDQwKQorCQkgIHwgUEhZX0NMS0xQ MkhTX1RJTUUoMHg0MCkpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2ludGVy ZmFjZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9QX1dBSVRfVElNRSgweDIwKSB8CisJCSAgTl9MQU5FUyhk c2ktPmxhbmVzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NsZWFyX2VycihzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QwKTsKKwlk c2lfcmVhZChkc2ksIERTSV9JTlRfU1QxKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzAs IDApOworCWRzaV93cml0ZShkc2ksIERTSV9JTlRfTVNLMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy LAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kg PSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKwlpbnQgcmV0OworCisJZHNpLT5tb2RlID0gYWRq dXN0ZWRfbW9kZTsKKworCXJldCA9IGR3X21pcGlfZHNpX2dldF9sYW5lX2Jwcyhkc2kpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm47CisKKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNs aykpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIs IF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWR3X21pcGlfZHNpX2luaXQoZHNpKTsKKwlk d19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfcGFja2V0X2hh bmRsZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsK Kwlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdfbWlwaV9k c2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29u ZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3 X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfaW50 ZXJmYWNlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2NsZWFyX2Vycihkc2kpOworCWlmIChk cm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFp bGVkIHRvIHByZXBhcmUgcGFuZWxcbiIpOworCQlyZXR1cm47CisJfQorCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShkc2ktPnBjbGspOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNvZGVy X2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkd19taXBp X2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwlkcm1fcGFuZWxfZGlzYWJs ZShkc2ktPnBhbmVsKTsKKworCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgewor CQlkZXZfZXJyKGRzaS0+ZGV2LCAiJXM6IEZhaWxlZCB0byBlbmFibGUgcGNsa1xuIiwgX19mdW5j X18pOworCQlyZXR1cm47CisJfQorCisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJ X0RTSV9DTURfTU9ERSk7CisJZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBhbmVsKTsKKwlkd19t aXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKworCS8qCisJICog VGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHRoZSBwZXJpcGhlcmFsIHdpbGwgYmUgZHJp dmVuCisJICogbm9ybWFsbHkgd2hlbiB0aGUgZGlzcGxheSBpcyBlbmFibGVkIGFnYWluIGxhdGVy LgorCSAqLworCW1zbGVlcCgxMjApOworCisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19N SVBJX0RTSV9DTURfTU9ERSk7CisJZHdfbWlwaV9kc2lfZGlzYWJsZShkc2kpOworCWNsa19kaXNh YmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworfQorCitzdGF0aWMgYm9vbCBkd19taXBpX2RzaV9l bmNvZGVyX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQljb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2VuY29kZXJfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK K3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOwor CWludCBtdXggID0gcm9ja2NoaXBfZHJtX2VuY29kZXJfZ2V0X211eF9pZChkc2ktPmRldi0+b2Zf bm9kZSwgZW5jb2Rlcik7CisJdTMyIGludGVyZmFjZV9waXhfZm10OworCXUzMiB2YWw7CisKKwlp ZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwg IiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0K KworCWR3X21pcGlfZHNpX3BoeV9pbml0KGRzaSk7CisJZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdv X2ZyYW1lcyhkc2kpOworCisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJX0RTSV9W SURfTU9ERSk7CisJZHJtX3BhbmVsX2VuYWJsZShkc2ktPnBhbmVsKTsKKworCWNsa19kaXNhYmxl X3VucHJlcGFyZShkc2ktPnBjbGspOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2Ug TUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJaW50ZXJmYWNlX3BpeF9mbXQgPSBST0NLQ0hJUF9PVVRf TU9ERV9QODg4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCWludGVy ZmFjZV9waXhfZm10ID0gUk9DS0NISVBfT1VUX01PREVfUDY2NjsKKwkJYnJlYWs7CisJY2FzZSBN SVBJX0RTSV9GTVRfUkdCNTY1OgorCQlpbnRlcmZhY2VfcGl4X2ZtdCA9IFJPQ0tDSElQX09VVF9N T0RFX1A1NjU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsK Kwl9CisKKwlyb2NrY2hpcF9kcm1fY3J0Y19tb2RlX2NvbmZpZyhlbmNvZGVyLT5jcnRjLCBEUk1f TU9ERV9DT05ORUNUT1JfRFNJLAorCQkJCSAgICAgIGludGVyZmFjZV9waXhfZm10KTsKKworCWlm IChtdXgpCisJCXZhbCA9IERTSTBfU0VMX1ZPUF9MSVQgfCAoRFNJMF9TRUxfVk9QX0xJVCA8PCAx Nik7CisJZWxzZQorCQl2YWwgPSBEU0kwX1NFTF9WT1BfTElUIDw8IDE2OworCisJcmVnbWFwX3dy aXRlKGRzaS0+Z3JmX3JlZ21hcCwgR1JGX1NPQ19DT042LCB2YWwpOworCWRldl9kYmcoZHNpLT5k ZXYsICJ2b3AgJXMgb3V0cHV0IHRvIGRzaTBcbiIsIChtdXgpID8gIkxJVCIgOiAiQklHIik7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzCitkd19taXBpX2RzaV9l bmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IGR3X21pcGlfZHNpX2VuY29k ZXJfbW9kZV9maXh1cCwKKwkuY29tbWl0ID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9jb21taXQsCisJ Lm1vZGVfc2V0ID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZGlzYWJsZSA9IGR3 X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29k ZXJfZnVuY3MgZHdfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9l bmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9n ZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFu ZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0 dXMgZHdfbWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0 IGR3X21pcGlfZHNpICpkc2kgPSBjb25fdG9fZHNpKGNvbm5lY3Rvcik7CisKKwllbnVtIGRybV9t b2RlX3N0YXR1cyBtb2RlX3N0YXR1cyA9IE1PREVfT0s7CisKKwlpZiAoZHNpLT5wZGF0YS0+bW9k ZV92YWxpZCkKKwkJbW9kZV9zdGF0dXMgPSBkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKGNvbm5lY3Rv ciwgbW9kZSk7CisKKwlyZXR1cm4gbW9kZV9zdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJt X2VuY29kZXIgKmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCQkJCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kg PSBjb25fdG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJmRzaS0+ZW5jb2RlcjsKK30KKwor c3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBkd19taXBpX2RzaV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBkd19taXBpX2RzaV9jb25uZWN0 b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gZHdfbWlwaV9kc2lfbW9kZV92YWxpZCwKKwku YmVzdF9lbmNvZGVyID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKK307CisK K3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitkd19taXBpX2RzaV9kZXRlY3Qoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlyZXR1cm4gY29u bmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Ry bV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQorewor CWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xl YW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mg ZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9i ZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSBkd19taXBpX2RzaV9kZXRlY3Qs CisJLmRlc3Ryb3kgPSBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0 ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJv eV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcmVnaXN0ZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwKKwkJCQkgICAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHNpLT5lbmNvZGVyOworCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IgPSAmZHNpLT5jb25uZWN0b3I7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0g ZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0Y3MoZHJtLAorCQkJCQkJCSAgICAgZGV2LT5vZl9ub2Rl KTsKKwkvKgorCSAqIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBDUlRDKHMpIHdoaWNoIHRoaXMg ZW5jb2RlciBpcworCSAqIHN1cHBvc2VkIHRvIGJlIGNvbm5lY3RlZCB0bywgaXQncyBiZWNhdXNl IHRoZSBDUlRDIGhhcworCSAqIG5vdCBiZWVuIHJlZ2lzdGVyZWQgeWV0LiAgRGVmZXIgcHJvYmlu ZywgYW5kIGhvcGUgdGhhdAorCSAqIHRoZSByZXF1aXJlZCBDUlRDIGlzIGFkZGVkIGxhdGVyLgor CSAqLworCWlmIChlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9PSAwKQorCQlyZXR1cm4gLUVQUk9C RV9ERUZFUjsKKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRzaS0+ZW5jb2RlciwKKwkJCSAg ICAgICAmZHdfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCXJldCA9IGRybV9lbmNv ZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmZHdfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcywK KwkJCSBEUk1fTU9ERV9FTkNPREVSX0RTSSwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIgd2l0aCBkcm1cbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsCisJCQkm ZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlkcm1fY29ubmVjdG9yX2lu aXQoZHJtLCAmZHNpLT5jb25uZWN0b3IsCisJCQkgICAmZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5l Y3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCisJZHJtX21vZGVf Y29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCByb2NrY2hpcF9taXBpX3BhcnNlX2R0KHN0cnVjdCBkd19taXBp X2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkc2ktPmRldi0+b2Zfbm9k ZTsKKworCWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUo bnAsICJyb2NrY2hpcCxncmYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+Z3JmX3JlZ21hcCkpIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgIlVuYWJsZSB0byBnZXQgcm9ja2NoaXAsZ3JmXG4iKTsKKwkJcmV0 dXJuIFBUUl9FUlIoZHNpLT5ncmZfcmVnbWFwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGVudW0gZHJtX21vZGVfc3RhdHVzIHJrMzI4OF9taXBpX2RzaV9tb2RlX3ZhbGlkKAorCQkJ CQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKK3sKKwkvKgorCSAqIFRoZSBWSURfUEtUX1NJWkUgZmllbGQgaW4gdGhl IERTSV9WSURfUEtUX0NGRworCSAqIHJlZ2lzdGVyIGlzIDExLWJpdC4KKwkgKi8KKwlpZiAobW9k ZS0+aGRpc3BsYXkgPiAweDdmZikKKwkJcmV0dXJuIE1PREVfQkFEX0hWQUxVRTsKKworCS8qCisJ ICogVGhlIFZfQUNUSVZFX0xJTkVTIGZpZWxkIGluIHRoZSBEU0lfVlRJTUlOR19DRkcKKwkgKiBy ZWdpc3RlciBpcyAxMS1iaXQuCisJICovCisJaWYgKG1vZGUtPnZkaXNwbGF5ID4gMHg3ZmYpCisJ CXJldHVybiBNT0RFX0JBRF9WVkFMVUU7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGlj IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgcmszMjg4X21pcGlfZHNpX2Rydl9kYXRhID0g eworCS5tYXhfZGF0YV9sYW5lcyA9IDQsCisJLm1vZGVfdmFsaWQgPSByazMyODhfbWlwaV9kc2lf bW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X21p cGlfZHNpX2R0X2lkc1tdID0geworCXsKKwkgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4 LW1pcGktZHNpIiwKKwkgLmRhdGEgPSAmcmszMjg4X21pcGlfZHNpX2Rydl9kYXRhLAorCX0sCisJ eyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHdfbWlwaV9k c2lfZHRfaWRzKTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCWNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KKwkJCW9mX21hdGNoX2RldmljZShkd19t aXBpX2RzaV9kdF9pZHMsIGRldik7CisJY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0 YSAqcGRhdGEgPSBvZl9pZC0+ZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0g dG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7 CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50 IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNpLT5kZXYgPSBkZXY7CisJ ZHNpLT5wZGF0YSA9IHBkYXRhOworCisJcmV0ID0gcm9ja2NoaXBfbWlwaV9wYXJzZV9kdChkc2kp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RF VjsKKworCWRzaS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYg KElTX0VSUihkc2ktPmJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihkc2ktPmJhc2UpOworCisJZHNp LT5wbGxyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInJlZiIpOworCWlmIChJU19FUlIoZHNp LT5wbGxyZWZfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGxscmVmX2Nsayk7CisJCWRl dl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBwbGwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPnBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi cGNsayIpOworCWlmIChJU19FUlIoZHNpLT5wY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ cGNsayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBwY2xrOiAlZFxuIiwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wbGxy ZWZfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IEZhaWxlZCB0byBlbmFi bGUgcGxscmVmX2Nsa1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9 IGR3X21pcGlfZHNpX3JlZ2lzdGVyKGRybSwgZHNpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG1pcGlfZHNpOiAlZFxuIiwgcmV0KTsKKwkJZ290byBl cnJfcGxscmVmOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7CisKKwlkc2ktPmRz aV9ob3N0Lm9wcyA9ICZkd19taXBpX2RzaV9ob3N0X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9 IGRldjsKKwlyZXR1cm4gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7CisK K2Vycl9wbGxyZWY6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdW5iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCXZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IGR3X21pcGlfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1pcGlfZHNp X2hvc3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGRzaS0+cGxscmVmX2Nsayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29w cyBkd19taXBpX2RzaV9vcHMgPSB7CisJLmJpbmQJPSBkd19taXBpX2RzaV9iaW5kLAorCS51bmJp bmQJPSBkd19taXBpX2RzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGNvbXBvbmVudF9h ZGQoJnBkZXYtPmRldiwgJmR3X21pcGlfZHNpX29wcyk7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlw aV9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50 X2RlbCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lfb3BzKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWlwaV9kc2lfZHJpdmVyID0geworCS5wcm9i ZQkJPSBkd19taXBpX2RzaV9wcm9iZSwKKwkucmVtb3ZlCQk9IGR3X21pcGlfZHNpX3JlbW92ZSwK KwkuZHJpdmVyCQk9IHsKKwkJLm9mX21hdGNoX3RhYmxlID0gZHdfbWlwaV9kc2lfZHRfaWRzLAor CQkubmFtZQk9IERSSVZFUl9OQU1FLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihk d19taXBpX2RzaV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlJPQ0tDSElQIE1JUEkg RFNJIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzIFpob25n IDx6eXdAcm9jay1jaGlwcy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVf QUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fdm9wLmMKaW5kZXggMDU2Y2FjMy4uNDZjMmE4ZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCkBAIC04MTgsNiArODE4LDkgQEAg aW50IHJvY2tjaGlwX2RybV9jcnRjX21vZGVfY29uZmlnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK IAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAkJVk9QX0NUUkxfU0VUKHZvcCwgaGRt aV9lbiwgMSk7CiAJCWJyZWFrOworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RTSToKKwkJVk9Q X0NUUkxfU0VUKHZvcCwgbWlwaV9lbiwgMSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9F UlJPUigidW5zdXBwb3J0IGNvbm5lY3Rvcl90eXBlWyVkXVxuIiwgY29ubmVjdG9yX3R5cGUpOwog CQlyZXR1cm4gLUVJTlZBTDsKLS0gCjIuNi4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=