From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v6 4/6] drm: rockchip: Support Synopsys DW MIPI DSI Date: Wed, 16 Dec 2015 18:10:14 +0800 Message-ID: <1450260616-21160-5-git-send-email-zyw@rock-chips.com> References: <1450260616-21160-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: <1450260616-21160-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 cyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgotLS0KCkNoYW5nZXMgaW4gdjY6Ci0gRG8gbm90 IHVzZSBicmlkZ2UgZHJpdmVyIChUaGllcnJ5IFJlZGluZykKLSBPcHRpbWl6YXRpb24gdGhlIHBo eSBpbml0IHNlcXVlbmNlCgpDaGFuZ2VzIGluIHY1OiBOb25lCkNoYW5nZXMgaW4gdjQ6IE5vbmUK Q2hhbmdlcyBpbiB2MzogTm9uZQoKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnICAg ICAgICAgICAgfCAgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSAgICAg ICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jICAg ICAgfCAxMjAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyB8ICAgIDMgKwogNCBmaWxlcyBjaGFuZ2VkLCAxMjE0 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvZHctbWlwaS1kc2kuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9L Y29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKaW5kZXggNjg2Y2I0OS4u MWRiMWI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKQEAgLTM0LDMgKzM0LDEzIEBAIGNv bmZpZyBST0NLQ0hJUF9BTkFMT0dJWF9EUAogCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIFJv Y2tjaGlwIFNvQyBzcGVjaWZpYyBleHRlbnNpb25zCiAJICBmb3IgdGhlIEFuYWxvZ2l4IENvcmUg RFAgZHJpdmVyLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgRFAKIAkgIG9uIFJLMzI4OCBiYXNlZCBT b0MsIHlvdSBzaG91bGQgc2VsZXQgdGhpcyBvcHRpb24uCisKK2NvbmZpZyBST0NLQ0hJUF9EV19N SVBJX0RTSQorCWJvb2wgIlJvY2tjaGlwIHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIFN5bm9wc3lz IERXIE1JUEkgRFNJIgorCWRlcGVuZHMgb24gRFJNX1JPQ0tDSElQCisJc2VsZWN0IERSTV9NSVBJ X0RTSQorCWhlbHAKKwkgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFNvQyBzcGVj aWZpYyBleHRlbnNpb25zCisJIGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBIRE1JIGRyaXZl ci4gSWYgeW91IHdhbnQgdG8KKwkgZW5hYmxlIE1JUEkgRFNJIG9uIFJLMzI4OCBiYXNlZCBTb0Ms IHlvdSBzaG91bGQgc2VsZXQgdGhpcworCSBvcHRpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZp bGUKaW5kZXggOGFkMDFmYi4uYzVjMmQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQpA QCAtNyw1ICs3LDYgQEAgcm9ja2NoaXBkcm0teSA6PSByb2NrY2hpcF9kcm1fZHJ2Lm8gcm9ja2No aXBfZHJtX2ZiLm8gcm9ja2NoaXBfZHJtX2ZiZGV2Lm8gXAogCiBvYmotJChDT05GSUdfUk9DS0NI SVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hpcC5vCiBvYmotJChDT05GSUdfUk9DS0NISVBf QU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4X2RwLXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19ST0NL Q0hJUF9EV19NSVBJX0RTSSkgKz0gZHctbWlwaS1kc2kubwogCiBvYmotJChDT05GSUdfRFJNX1JP Q0tDSElQKSArPSByb2NrY2hpcGRybS5vIHJvY2tjaGlwX2RybV92b3AubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvZHctbWlwaS1kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5lMzhhZTNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3 LW1pcGktZHNpLmMKQEAgLTAsMCArMSwxMjAwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0 LCBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGlu dXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv b2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgv bWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorCisjaW5jbHVkZSAi cm9ja2NoaXBfZHJtX2Rydi5oIgorI2luY2x1ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKKworI2Rl ZmluZSBEUklWRVJfTkFNRSAgICAiZHctbWlwaS1kc2kiCisKKyNkZWZpbmUgR1JGX1NPQ19DT042 ICAgICAgICAgICAgICAgICAgICAweDAyNWMKKyNkZWZpbmUgRFNJMF9TRUxfVk9QX0xJVCAgICAg ICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBEU0kxX1NFTF9WT1BfTElUICAgICAgICAgICAg ICAgICgxIDw8IDkpCisKKyNkZWZpbmUgRFNJX1ZFUlNJT04JCQkweDAwCisjZGVmaW5lIERTSV9Q V1JfVVAJCQkweDA0CisjZGVmaW5lIFJFU0VUCQkJCTAKKyNkZWZpbmUgUE9XRVJVUAkJCQlCSVQo MCkKKworI2RlZmluZSBEU0lfQ0xLTUdSX0NGRwkJCTB4MDgKKyNkZWZpbmUgVE9fQ0xLX0RJVklE U0lPTihkaXYpCQkoKChkaXYpICYgMHhmZikgPDwgOCkKKyNkZWZpbmUgVFhfRVNDX0NMS19ESVZJ RFNJT04oZGl2KQkoKChkaXYpICYgMHhmZikgPDwgMCkKKworI2RlZmluZSBEU0lfRFBJX1ZDSUQJ CQkweDBjCisjZGVmaW5lIERQSV9WSUQodmlkKQkJCSgoKHZpZCkgJiAweDMpIDw8IDApCisKKyNk ZWZpbmUgRFNJX0RQSV9DT0xPUl9DT0RJTkcJCTB4MTAKKyNkZWZpbmUgRU4xOF9MT09TRUxZCQkJ QklUKDgpCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMQkweDAKKyNkZWZpbmUgRFBJ X0NPTE9SX0NPRElOR18xNkJJVF8yCTB4MQorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklU XzMJMHgyCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMQkweDMKKyNkZWZpbmUgRFBJ X0NPTE9SX0NPRElOR18xOEJJVF8yCTB4NAorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzI0QklU CQkweDUKKworI2RlZmluZSBEU0lfRFBJX0NGR19QT0wJCQkweDE0CisjZGVmaW5lIENPTE9STV9B Q1RJVkVfTE9XCQlCSVQoNCkKKyNkZWZpbmUgU0hVVERfQUNUSVZFX0xPVwkJQklUKDMpCisjZGVm aW5lIEhTWU5DX0FDVElWRV9MT1cJCUJJVCgyKQorI2RlZmluZSBWU1lOQ19BQ1RJVkVfTE9XCQlC SVQoMSkKKyNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJCUJJVCgwKQorCisjZGVmaW5lIERTSV9E UElfTFBfQ01EX1RJTQkJMHgxOAorI2RlZmluZSBPVVRWQUNUX0xQQ01EX1RJTUUocCkJCSgoKHAp ICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIElOVkFDVF9MUENNRF9USU1FKHApCQkoKHApICYgMHhm ZikKKworI2RlZmluZSBEU0lfREJJX0NGRwkJCTB4MjAKKyNkZWZpbmUgRFNJX0RCSV9DTURTSVpF CQkJMHgyOAorCisjZGVmaW5lIERTSV9QQ0tIRExfQ0ZHCQkJMHgyYworI2RlZmluZSBFTl9DUkNf UlgJCQlCSVQoNCkKKyNkZWZpbmUgRU5fRUNDX1JYCQkJQklUKDMpCisjZGVmaW5lIEVOX0JUQQkJ CQlCSVQoMikKKyNkZWZpbmUgRU5fRU9UUF9SWAkJCUJJVCgxKQorI2RlZmluZSBFTl9FT1RQX1RY CQkJQklUKDApCisKKyNkZWZpbmUgRFNJX01PREVfQ0ZHCQkJMHgzNAorI2RlZmluZSBFTkFCTEVf VklERU9fTU9ERQkJMAorI2RlZmluZSBFTkFCTEVfQ01EX01PREUJCQlCSVQoMCkKKworI2RlZmlu ZSBEU0lfVklEX01PREVfQ0ZHCQkweDM4CisjZGVmaW5lIEZSQU1FX0JUQV9BQ0sJCQlCSVQoMTQp CisjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVIJCSgweDNmIDw8IDgpCisjZGVmaW5lIEVOQUJMRV9M T1dfUE9XRVJfTUFTSwkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgVklEX01PREVfVFlQRV9CVVJTVF9T WU5DX1BVTFNFUwkJMHgyCisjZGVmaW5lIFZJRF9NT0RFX1RZUEVfTUFTSwkJCTB4MworCisjZGVm aW5lIERTSV9WSURfUEtUX1NJWkUJCTB4M2MKKyNkZWZpbmUgVklEX1BLVF9TSVpFKHApCQkJKCgo cCkgJiAweDNmZmYpIDw8IDApCisjZGVmaW5lIFZJRF9QS1RfTUFYX1NJWkUJCTB4M2ZmZgorCisj ZGVmaW5lIERTSV9WSURfSFNBX1RJTUUJCTB4NDgKKyNkZWZpbmUgRFNJX1ZJRF9IQlBfVElNRQkJ MHg0YworI2RlZmluZSBEU0lfVklEX0hMSU5FX1RJTUUJCTB4NTAKKyNkZWZpbmUgRFNJX1ZJRF9W U0FfTElORVMJCTB4NTQKKyNkZWZpbmUgRFNJX1ZJRF9WQlBfTElORVMJCTB4NTgKKyNkZWZpbmUg RFNJX1ZJRF9WRlBfTElORVMJCTB4NWMKKyNkZWZpbmUgRFNJX1ZJRF9WQUNUSVZFX0xJTkVTCQkw eDYwCisjZGVmaW5lIERTSV9DTURfTU9ERV9DRkcJCTB4NjgKKyNkZWZpbmUgTUFYX1JEX1BLVF9T SVpFX0xQCQlCSVQoMjQpCisjZGVmaW5lIERDU19MV19UWF9MUAkJCUJJVCgxOSkKKyNkZWZpbmUg RENTX1NSXzBQX1RYX0xQCQkJQklUKDE4KQorI2RlZmluZSBEQ1NfU1dfMVBfVFhfTFAJCQlCSVQo MTcpCisjZGVmaW5lIERDU19TV18wUF9UWF9MUAkJCUJJVCgxNikKKyNkZWZpbmUgR0VOX0xXX1RY X0xQCQkJQklUKDE0KQorI2RlZmluZSBHRU5fU1JfMlBfVFhfTFAJCQlCSVQoMTMpCisjZGVmaW5l IEdFTl9TUl8xUF9UWF9MUAkJCUJJVCgxMikKKyNkZWZpbmUgR0VOX1NSXzBQX1RYX0xQCQkJQklU KDExKQorI2RlZmluZSBHRU5fU1dfMlBfVFhfTFAJCQlCSVQoMTApCisjZGVmaW5lIEdFTl9TV18x UF9UWF9MUAkJCUJJVCg5KQorI2RlZmluZSBHRU5fU1dfMFBfVFhfTFAJCQlCSVQoOCkKKyNkZWZp bmUgRU5fQUNLX1JRU1QJCQlCSVQoMSkKKyNkZWZpbmUgRU5fVEVBUl9GWAkJCUJJVCgwKQorCisj ZGVmaW5lIENNRF9NT0RFX0FMTF9MUAkJCShNQVhfUkRfUEtUX1NJWkVfTFAgfCBcCisJCQkJCSBE Q1NfTFdfVFhfTFAgfCBcCisJCQkJCSBEQ1NfU1JfMFBfVFhfTFAgfCBcCisJCQkJCSBEQ1NfU1df MVBfVFhfTFAgfCBcCisJCQkJCSBEQ1NfU1dfMFBfVFhfTFAgfCBcCisJCQkJCSBHRU5fTFdfVFhf TFAgfCBcCisJCQkJCSBHRU5fU1JfMlBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1JfMVBfVFhfTFAg fCBcCisJCQkJCSBHRU5fU1JfMFBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1dfMlBfVFhfTFAgfCBc CisJCQkJCSBHRU5fU1dfMVBfVFhfTFAgfCBcCisJCQkJCSBHRU5fU1dfMFBfVFhfTFApCisKKyNk ZWZpbmUgRFNJX0dFTl9IRFIJCQkweDZjCisjZGVmaW5lIEdFTl9IREFUQShkYXRhKQkJCSgoKGRh dGEpICYgMHhmZmZmKSA8PCA4KQorI2RlZmluZSBHRU5fSERBVEFfTUFTSwkJCSgweGZmZmYgPDwg OCkKKyNkZWZpbmUgR0VOX0hUWVBFKHR5cGUpCQkJKCgodHlwZSkgJiAweGZmKSA8PCAwKQorI2Rl ZmluZSBHRU5fSFRZUEVfTUFTSwkJCTB4ZmYKKworI2RlZmluZSBEU0lfR0VOX1BMRF9EQVRBCQkw eDcwCisKKyNkZWZpbmUgRFNJX0NNRF9QS1RfU1RBVFVTCQkweDc0CisjZGVmaW5lIEdFTl9DTURf RU1QVFkJCQlCSVQoMCkKKyNkZWZpbmUgR0VOX0NNRF9GVUxMCQkJQklUKDEpCisjZGVmaW5lIEdF Tl9QTERfV19FTVBUWQkJCUJJVCgyKQorI2RlZmluZSBHRU5fUExEX1dfRlVMTAkJCUJJVCgzKQor I2RlZmluZSBHRU5fUExEX1JfRU1QVFkJCQlCSVQoNCkKKyNkZWZpbmUgR0VOX1BMRF9SX0ZVTEwJ CQlCSVQoNSkKKyNkZWZpbmUgR0VOX1JEX0NNRF9CVVNZCQkJQklUKDYpCisKKyNkZWZpbmUgRFNJ X1RPX0NOVF9DRkcJCQkweDc4CisjZGVmaW5lIEhTVFhfVE9fQ05UKHApCQkJKCgocCkgJiAweGZm ZmYpIDw8IDE2KQorI2RlZmluZSBMUFJYX1RPX0NOVChwKQkJCSgocCkgJiAweGZmZmYpCisKKyNk ZWZpbmUgRFNJX0JUQV9UT19DTlQJCQkweDhjCisKKyNkZWZpbmUgRFNJX0xQQ0xLX0NUUkwJCQkw eDk0CisjZGVmaW5lIEFVVE9fQ0xLTEFORV9DVFJMCQlCSVQoMSkKKyNkZWZpbmUgUEhZX1RYUkVR VUVTVENMS0hTCQlCSVQoMCkKKworI2RlZmluZSBEU0lfUEhZX1RNUl9MUENMS19DRkcJCTB4OTgK KyNkZWZpbmUgUEhZX0NMS0hTMkxQX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHgzZmYpIDw8IDE2 KQorI2RlZmluZSBQSFlfQ0xLTFAySFNfVElNRShsYmNjKQkJKChsYmNjKSAmIDB4M2ZmKQorCisj ZGVmaW5lIERTSV9QSFlfVE1SX0NGRwkJCTB4OWMKKyNkZWZpbmUgUEhZX0hTMkxQX1RJTUUobGJj YykJCSgoKGxiY2MpICYgMHhmZikgPDwgMjQpCisjZGVmaW5lIFBIWV9MUDJIU19USU1FKGxiY2Mp CQkoKChsYmNjKSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBNQVhfUkRfVElNRShsYmNjKQkJKChs YmNjKSAmIDB4N2ZmZikKKworI2RlZmluZSBEU0lfUEhZX1JTVFoJCQkweGEwCisjZGVmaW5lIFBI WV9ESVNGT1JDRVBMTAkJCTAKKyNkZWZpbmUgUEhZX0VORk9SQ0VQTEwJCQlCSVQoMykKKyNkZWZp bmUgUEhZX0RJU0FCTEVDTEsJCQkwCisjZGVmaW5lIFBIWV9FTkFCTEVDTEsJCQlCSVQoMikKKyNk ZWZpbmUgUEhZX1JTVFoJCQkwCisjZGVmaW5lIFBIWV9VTlJTVFoJCQlCSVQoMSkKKyNkZWZpbmUg UEhZX1NIVVRET1dOWgkJCTAKKyNkZWZpbmUgUEhZX1VOU0hVVERPV05aCQkJQklUKDApCisKKyNk ZWZpbmUgRFNJX1BIWV9JRl9DRkcJCQkweGE0CisjZGVmaW5lIE5fTEFORVMobikJCQkoKCgobikg LSAxKSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgUEhZX1NUT1BfV0FJVF9USU1FKGN5Y2xlKQkoKChj eWNsZSkgJiAweGZmKSA8PCA4KQorCisjZGVmaW5lIERTSV9QSFlfU1RBVFVTCQkJMHhiMAorI2Rl ZmluZSBMT0NLCQkJCUJJVCgwKQorI2RlZmluZSBTVE9QX1NUQVRFX0NMS19MQU5FCQlCSVQoMikK KworI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJMMAkJMHhiNAorI2RlZmluZSBQSFlfVEVTVENMSwkJ CUJJVCgxKQorI2RlZmluZSBQSFlfVU5URVNUQ0xLCQkJMAorI2RlZmluZSBQSFlfVEVTVENMUgkJ CUJJVCgwKQorI2RlZmluZSBQSFlfVU5URVNUQ0xSCQkJMAorCisjZGVmaW5lIERTSV9QSFlfVFNU X0NUUkwxCQkweGI4CisjZGVmaW5lIFBIWV9URVNURU4JCQlCSVQoMTYpCisjZGVmaW5lIFBIWV9V TlRFU1RFTgkJCTAKKyNkZWZpbmUgUEhZX1RFU1RET1VUKG4pCQkJKCgobikgJiAweGZmKSA8PCA4 KQorI2RlZmluZSBQSFlfVEVTVERJTihuKQkJCSgoKG4pICYgMHhmZikgPDwgMCkKKworI2RlZmlu ZSBEU0lfSU5UX1NUMAkJCTB4YmMKKyNkZWZpbmUgRFNJX0lOVF9TVDEJCQkweGMwCisjZGVmaW5l IERTSV9JTlRfTVNLMAkJCTB4YzQKKyNkZWZpbmUgRFNJX0lOVF9NU0sxCQkJMHhjOAorCisjZGVm aW5lIFBIWV9TVEFUVVNfVElNRU9VVF9VUwkJMTAwMDAKKyNkZWZpbmUgQ01EX1BLVF9TVEFUVVNf VElNRU9VVF9VUwkyMDAwMAorCisjZGVmaW5lIEJZUEFTU19WQ09fUkFOR0UJQklUKDcpCisjZGVm aW5lIFZDT19SQU5HRV9DT05fU0VMKHZhbCkJKCgodmFsKSAmIDB4NykgPDwgMykKKyNkZWZpbmUg VkNPX0lOX0NBUF9DT05fREVGQVVMVAkoMHgwIDw8IDEpCisjZGVmaW5lIFZDT19JTl9DQVBfQ09O X0xPVwkoMHgxIDw8IDEpCisjZGVmaW5lIFZDT19JTl9DQVBfQ09OX0hJR0gJKDB4MiA8PCAxKQor I2RlZmluZSBSRUZfQklBU19DVVJfU0VMCUJJVCgwKQorCisjZGVmaW5lIENQX0NVUlJFTlRfM01B CQlCSVQoMykKKyNkZWZpbmUgQ1BfUFJPR1JBTV9FTgkJQklUKDcpCisjZGVmaW5lIExQRl9QUk9H UkFNX0VOCQlCSVQoNikKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU18yMF9LT0hNCTAKKworI2RlZmlu ZSBIU0ZSRVFSQU5HRV9TRUwodmFsKQkoKCh2YWwpICYgMHgzZikgPDwgMSkKKworI2RlZmluZSBJ TlBVVF9ESVZJREVSKHZhbCkJKCh2YWwgLSAxKSAmIDB4N2YpCisjZGVmaW5lIExPV19QUk9HUkFN X0VOCQkwCisjZGVmaW5lIEhJR0hfUFJPR1JBTV9FTgkJQklUKDcpCisjZGVmaW5lIExPT1BfRElW X0xPV19TRUwodmFsKQkoKHZhbCAtIDEpICYgMHgxZikKKyNkZWZpbmUgTE9PUF9ESVZfSElHSF9T RUwodmFsKQkoKCh2YWwgLSAxKSA+PiA1KSAmIDB4MWYpCisjZGVmaW5lIFBMTF9MT09QX0RJVl9F TgkJQklUKDUpCisjZGVmaW5lIFBMTF9JTlBVVF9ESVZfRU4JQklUKDQpCisKKyNkZWZpbmUgUE9X RVJfQ09OVFJPTAkJQklUKDYpCisjZGVmaW5lIElOVEVSTkFMX1JFR19DVVJSRU5UCUJJVCgzKQor I2RlZmluZSBCSUFTX0JMT0NLX09OCQlCSVQoMikKKyNkZWZpbmUgQkFOREdBUF9PTgkJQklUKDAp CisKKyNkZWZpbmUgVEVSX1JFU0lTVE9SX0hJR0gJQklUKDcpCisjZGVmaW5lCVRFUl9SRVNJU1RP Ul9MT1cJMAorI2RlZmluZSBMRVZFTF9TSElGVEVSU19PTglCSVQoNikKKyNkZWZpbmUgVEVSX0NB TF9ET05FCQlCSVQoNSkKKyNkZWZpbmUgU0VUUkRfTUFYCQkoMHg3IDw8IDIpCisjZGVmaW5lIFBP V0VSX01BTkFHRQkJQklUKDEpCisjZGVmaW5lIFRFUl9SRVNJU1RPUlNfT04JQklUKDApCisKKyNk ZWZpbmUgQklBU0VYVFJfU0VMKHZhbCkJKCh2YWwpICYgMHg3KQorI2RlZmluZSBCQU5ER0FQX1NF TCh2YWwpCSgodmFsKSAmIDB4NykKKyNkZWZpbmUgVExQX1BST0dSQU1fRU4JCUJJVCg3KQorI2Rl ZmluZSBUSFNfUFJFX1BST0dSQU1fRU4JQklUKDcpCisjZGVmaW5lIFRIU19aRVJPX1BST0dSQU1f RU4JQklUKDYpCisKK2VudW0geworCUJBTkRHQVBfOTdfMDcsCisJQkFOREdBUF85OF8wNSwKKwlC QU5ER0FQXzk5XzAyLAorCUJBTkRHQVBfMTAwXzAwLAorCUJBTkRHQVBfOTNfMTcsCisJQkFOREdB UF85NF8xNSwKKwlCQU5ER0FQXzk1XzEyLAorCUJBTkRHQVBfOTZfMTAsCit9OworCitlbnVtIHsK KwlCSUFTRVhUUl84N18xLAorCUJJQVNFWFRSXzkxXzUsCisJQklBU0VYVFJfOTVfOSwKKwlCSUFT RVhUUl8xMDAsCisJQklBU0VYVFJfMTA1Xzk0LAorCUJJQVNFWFRSXzExMV84OCwKKwlCSUFTRVhU Ul8xMThfOCwKKwlCSUFTRVhUUl8xMjdfNywKK307CisKK3N0cnVjdCBkd19taXBpX2RzaV9wbGF0 X2RhdGEgeworCXVuc2lnbmVkIGludCBtYXhfZGF0YV9sYW5lczsKKwllbnVtIGRybV9tb2RlX3N0 YXR1cyAoKm1vZGVfdmFsaWQpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJ CSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKK307CisKK3N0cnVjdCBkd19taXBp X2RzaSB7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgY29ubmVjdG9yOworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0OworCXN0cnVjdCBk cm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcmVnbWFwICpn cmZfcmVnbWFwOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXN0cnVjdCBjbGsgKnBsbHJlZl9j bGs7CisJc3RydWN0IGNsayAqcGNsazsKKworCXVuc2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBl ciBsYW5lICovCisJdTMyIGNoYW5uZWw7CisJdTMyIGxhbmVzOworCXUzMiBmb3JtYXQ7CisJdTE2 IGlucHV0X2RpdjsKKwl1MTYgZmVlZGJhY2tfZGl2OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlOworCisJY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGE7CisK K307CisKK2VudW0gZHdfbWlwaV9kc2lfbW9kZSB7CisJRFdfTUlQSV9EU0lfQ01EX01PREUsCisJ RFdfTUlQSV9EU0lfVklEX01PREUsCit9OworCitzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAg eworCXVuc2lnbmVkIGludCBtYXhfbWJwczsKKwl1OCB0ZXN0ZGluOworfTsKKworLyogVGhlIHRh YmxlIGlzIGJhc2VkIG9uIDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgZHB0ZGluX21hcFtdID0geworCXsg IDkwLCAweDAwfSwgeyAxMDAsIDB4MTB9LCB7IDExMCwgMHgyMH0sIHsgMTMwLCAweDAxfSwKKwl7 IDE0MCwgMHgxMX0sIHsgMTUwLCAweDIxfSwgeyAxNzAsIDB4MDJ9LCB7IDE4MCwgMHgxMn0sCisJ eyAyMDAsIDB4MjJ9LCB7IDIyMCwgMHgwM30sIHsgMjQwLCAweDEzfSwgeyAyNTAsIDB4MjN9LAor CXsgMjcwLCAweDA0fSwgeyAzMDAsIDB4MTR9LCB7IDMzMCwgMHgwNX0sIHsgMzYwLCAweDE1fSwK Kwl7IDQwMCwgMHgyNX0sIHsgNDUwLCAweDA2fSwgeyA1MDAsIDB4MTZ9LCB7IDU1MCwgMHgwN30s CisJeyA2MDAsIDB4MTd9LCB7IDY1MCwgMHgwOH0sIHsgNzAwLCAweDE4fSwgeyA3NTAsIDB4MDl9 LAorCXsgODAwLCAweDE5fSwgeyA4NTAsIDB4Mjl9LCB7IDkwMCwgMHgzOX0sIHsgOTUwLCAweDBh fSwKKwl7MTAwMCwgMHgxYX0sIHsxMDUwLCAweDJhfSwgezExMDAsIDB4M2F9LCB7MTE1MCwgMHgw Yn0sCisJezEyMDAsIDB4MWJ9LCB7MTI1MCwgMHgyYn0sIHsxMzAwLCAweDNifSwgezEzNTAsIDB4 MGN9LAorCXsxNDAwLCAweDFjfSwgezE0NTAsIDB4MmN9LCB7MTUwMCwgMHgzY30KK307CisKK3N0 YXRpYyBpbnQgbWF4X21icHNfdG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4X21icHMpCit7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKQor CQlpZiAoZHB0ZGluX21hcFtpXS5tYXhfbWJwcyA+IG1heF9tYnBzKQorCQkJcmV0dXJuIGRwdGRp bl9tYXBbaV0udGVzdGRpbjsKKworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogVGhlIGNv bnRyb2xsZXIgc2hvdWxkIGdlbmVyYXRlIDIgZnJhbWVzIGJlZm9yZQorICogcHJlcGFyaW5nIHRo ZSBwZXJpcGhlcmFsLgorICovCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV93YWl0X2Zvcl90d29f ZnJhbWVzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWludCByZWZyZXNoLCB0d29fZnJh bWVzOworCisJcmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKGRzaS0+bW9kZSk7CisJdHdvX2Zy YW1lcyA9IERJVl9ST1VORF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKKwltc2xlZXAo dHdvX2ZyYW1lcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpob3N0 X3RvX2RzaShzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGhvc3QsIHN0cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOworfQorCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBkd19taXBpX2RzaSAqY29uX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29uKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29uLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGNv bm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICplbmNvZGVy X3RvX2RzaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihlbmNvZGVyLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGVuY29kZXIpOworfQorc3RhdGljIGlu bGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZywgdTMy IHZhbCkKK3sKKwl3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5s aW5lIHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKK3sKKwly ZXR1cm4gcmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfcGh5X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1OCB0ZXN0X2NvZGUsCisJCQkJ IHU4IHRlc3RfZGF0YSkKK3sKKwkvKgorCSAqIFdpdGggdGhlIGZhbGxpbmcgZWRnZSBvbiBURVNU Q0xLLCB0aGUgVEVTVERJTls3OjBdIHNpZ25hbCBjb250ZW50CisJICogaXMgbGF0Y2hlZCBpbnRl cm5hbGx5IGFzIHRoZSBjdXJyZW50IHRlc3QgY29kZS4gVGVzdCBkYXRhIGlzCisJICogcHJvZ3Jh bW1lZCBpbnRlcm5hbGx5IGJ5IHJpc2luZyBlZGdlIG9uIFRFU1RDTEsuCisJICovCisJZHNpX3dy aXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7 CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9U RVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdF9jb2RlKSk7CisKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIp OworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9VTlRFU1RFTiB8IFBI WV9URVNURE9VVCgwKSB8CisJCQkJCSAgUEhZX1RFU1RESU4odGVzdF9kYXRhKSk7CisKKwlkc2lf d3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xS KTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9waHlfaW5pdChzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSkKK3sKKwlpbnQgcmV0LCB0ZXN0ZGluLCB2Y28sIHZhbDsKKworCXZjbyA9IChkc2kt PmxhbmVfbWJwcyA8IDIwMCkgPyAwIDogKGRzaS0+bGFuZV9tYnBzICsgMTAwKSAvIDIwMDsKKwor CXRlc3RkaW4gPSBtYXhfbWJwc190b190ZXN0ZGluKGRzaS0+bGFuZV9tYnBzKTsKKwlpZiAodGVz dGRpbiA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IHRlc3Rk aW4gZm9yICVkbWJwcyBsYW5lIGNsb2NrXG4iLAorCQkJZHNpLT5sYW5lX21icHMpOworCQlyZXR1 cm4gdGVzdGRpbjsKKwl9CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsK KworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTAsIEJZUEFTU19WQ09fUkFOR0UgfAor CQkJCQkgVkNPX1JBTkdFX0NPTl9TRUwodmNvKSB8CisJCQkJCSBWQ09fSU5fQ0FQX0NPTl9MT1cg fAorCQkJCQkgUkVGX0JJQVNfQ1VSX1NFTCk7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNp LCAweDExLCBDUF9DVVJSRU5UXzNNQSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgx MiwgQ1BfUFJPR1JBTV9FTiB8IExQRl9QUk9HUkFNX0VOIHwKKwkJCQkJIExQRl9SRVNJU1RPUlNf MjBfS09ITSk7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDQ0LCBIU0ZSRVFSQU5H RV9TRUwodGVzdGRpbikpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxOSwgUExM X0xPT1BfRElWX0VOIHwgUExMX0lOUFVUX0RJVl9FTik7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRl KGRzaSwgMHgxNywgSU5QVVRfRElWSURFUihkc2ktPmlucHV0X2RpdikpOworCWR3X21pcGlfZHNp X3BoeV93cml0ZShkc2ksIDB4MTgsIExPT1BfRElWX0xPV19TRUwoZHNpLT5mZWVkYmFja19kaXYp IHwKKwkJCQkJIExPV19QUk9HUkFNX0VOKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAw eDE4LCBMT09QX0RJVl9ISUdIX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAorCQkJCQkgSElHSF9Q Uk9HUkFNX0VOKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjAsIFBPV0VSX0NP TlRST0wgfCBJTlRFUk5BTF9SRUdfQ1VSUkVOVCB8CisJCQkJCSBCSUFTX0JMT0NLX09OIHwgQkFO REdBUF9PTik7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIxLCBURVJfUkVTSVNU T1JfTE9XIHwgVEVSX0NBTF9ET05FIHwKKwkJCQkJIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RPUlNf T04pOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJU1RPUl9ISUdI IHwgTEVWRUxfU0hJRlRFUlNfT04gfAorCQkJCQkgU0VUUkRfTUFYIHwgUE9XRVJfTUFOQUdFIHwK KwkJCQkJIFRFUl9SRVNJU1RPUlNfT04pOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg MHgyMiwgTE9XX1BST0dSQU1fRU4gfAorCQkJCQkgQklBU0VYVFJfU0VMKEJJQVNFWFRSXzEyN183 KSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMiwgSElHSF9QUk9HUkFNX0VOIHwK KwkJCQkJIEJBTkRHQVBfU0VMKEJBTkRHQVBfOTZfMTApKTsKKworCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIDB4NzAsIFRMUF9QUk9HUkFNX0VOIHwgMHhmKTsKKwlkd19taXBpX2RzaV9waHlf d3JpdGUoZHNpLCAweDcxLCBUSFNfUFJFX1BST0dSQU1fRU4gfCAweDU1KTsKKwlkd19taXBpX2Rz aV9waHlfd3JpdGUoZHNpLCAweDcyLCBUSFNfWkVST19QUk9HUkFNX0VOIHwgMHhhKTsKKworCWRz aV93cml0ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX0VORk9SQ0VQTEwgfCBQSFlfRU5BQkxFQ0xL IHwKKwkJCQkgICAgIFBIWV9VTlJTVFogfCBQSFlfVU5TSFVURE9XTlopOworCisKKwlyZXQgPSBy ZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAorCQkJ CSB2YWwsIHZhbCAmIExPQ0ssIDEwMDAsIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byB3YWl0IGZvciBwaHkgbG9j ayBzdGF0ZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVhZHhfcG9sbF90aW1l b3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfUEhZX1NUQVRVUywKKwkJCQkgdmFsLCB2YWwgJiBT VE9QX1NUQVRFX0NMS19MQU5FLCAxMDAwLAorCQkJCSBQSFlfU1RBVFVTX1RJTUVPVVRfVVMpOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsCisJCQkiZmFpbGVkIHRvIHdhaXQg Zm9yIHBoeSBjbGsgbGFuZSBzdG9wIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dldF9sYW5lX2JwcyhzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQgYnBwLCBpLCBwcmU7CisJdW5z aWduZWQgbG9uZyBtcGNsaywgcGxscmVmLCB0bXA7CisJdW5zaWduZWQgaW50IG0gPSAxLCBuID0g MSwgdGFyZ2V0X21icHMgPSAxMDAwOworCXVuc2lnbmVkIGludCBtYXhfbWJwcyA9IGRwdGRpbl9t YXBbQVJSQVlfU0laRShkcHRkaW5fbWFwKSAtIDFdLm1heF9tYnBzOworCisJYnBwID0gbWlwaV9k c2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisJaWYgKGJwcCA8IDApIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgYnBwIGZvciBwaXhlbCBmb3JtYXQgJWRc biIsCisJCQlkc2ktPmZvcm1hdCk7CisJCXJldHVybiBicHA7CisJfQorCisJbXBjbGsgPSBESVZf Uk9VTkRfVVAoZHNpLT5tb2RlLT5jbG9jaywgTVNFQ19QRVJfU0VDKTsKKwlpZiAobXBjbGspIHsK KwkJLyogdGFrZSAxIC8gMC45LCBzaW5jZSBtYnBzIG11c3QgYmlnIHRoYW4gYmFuZHdpZHRoIG9m IFJHQiAqLworCQl0bXAgPSBtcGNsayAqIChicHAgLyBkc2ktPmxhbmVzKSAqIDEwIC8gOTsKKwkJ aWYgKHRtcCA8IG1heF9tYnBzKQorCQkJdGFyZ2V0X21icHMgPSB0bXA7CisJCWVsc2UKKwkJCWRl dl9lcnIoZHNpLT5kZXYsICJEUEhZIGNsb2NrIGZyZXF1ZW5jeSBpcyBvdXQgb2YgcmFuZ2VcbiIp OworCX0KKworCXBsbHJlZiA9IERJVl9ST1VORF9VUChjbGtfZ2V0X3JhdGUoZHNpLT5wbGxyZWZf Y2xrKSwgVVNFQ19QRVJfU0VDKTsKKwl0bXAgPSBwbGxyZWY7CisKKwlmb3IgKGkgPSAxOyBpIDwg NjsgaSsrKSB7CisJCXByZSA9IHBsbHJlZiAvIGk7CisJCWlmICgodG1wID4gKHRhcmdldF9tYnBz ICUgcHJlKSkgJiYgKHRhcmdldF9tYnBzIC8gcHJlIDwgNTEyKSkgeworCQkJdG1wID0gdGFyZ2V0 X21icHMgJSBwcmU7CisJCQluID0gaTsKKwkJCW0gPSB0YXJnZXRfbWJwcyAvIHByZTsKKwkJfQor CQlpZiAodG1wID09IDApCisJCQlicmVhazsKKwl9CisKKwlkc2ktPmxhbmVfbWJwcyA9IHBsbHJl ZiAvIG4gKiBtOworCWRzaS0+aW5wdXRfZGl2ID0gbjsKKwlkc2ktPmZlZWRiYWNrX2RpdiA9IG07 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2F0dGFjaChz dHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkZXZpY2UpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0 KTsKKworCWlmIChkZXZpY2UtPmxhbmVzID4gZHNpLT5wZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsK KwkJZGV2X2Vycihkc2ktPmRldiwgInRoZSBudW1iZXIgb2YgZGF0YSBsYW5lcygldSkgaXMgdG9v IG1hbnlcbiIsCisJCQkJZGV2aWNlLT5sYW5lcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWlmICghKGRldmljZS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1QpIHx8 CisJICAgICEoZGV2aWNlLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BV TFNFKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZGV2aWNlIG1vZGUgaXMgdW5zdXBwb3J0ZWRc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5l czsKKwlkc2ktPmNoYW5uZWwgPSBkZXZpY2UtPmNoYW5uZWw7CisJZHNpLT5mb3JtYXQgPSBkZXZp Y2UtPmZvcm1hdDsKKwlkc2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYu b2Zfbm9kZSk7CisJaWYgKGRzaS0+cGFuZWwpCisJCXJldHVybiBkcm1fcGFuZWxfYXR0YWNoKGRz aS0+cGFuZWwsICZkc2ktPmNvbm5lY3Rvcik7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3Rh dGljIGludCBkd19taXBpX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9z dCwKKwkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGR3 X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKKworCWRybV9wYW5lbF9kZXRhY2go ZHNpLT5wYW5lbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9n ZW5fcGt0X2hkcl93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHZhbCkKK3sKKwlp bnQgcmV0OworCisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBE U0lfQ01EX1BLVF9TVEFUVVMsCisJCQkJIHZhbCwgISh2YWwgJiBHRU5fQ01EX0ZVTEwpLCAxMDAw LAorCQkJCSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgY29tbWFuZCBGSUZPXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgdmFs KTsKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHNpLT5iYXNlICsgRFNJX0NN RF9QS1RfU1RBVFVTLAorCQkJCSB2YWwsIHZhbCAmIChHRU5fQ01EX0VNUFRZIHwgR0VOX1BMRF9X X0VNUFRZKSwKKwkJCQkgMTAwMCwgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byB3cml0ZSBjb21tYW5kIEZJ Rk9cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJ CQkgICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUxNiAq dHhfYnVmID0gbXNnLT50eF9idWY7CisJdTMyIHZhbCA9IEdFTl9IREFUQSgqdHhfYnVmKSB8IEdF Tl9IVFlQRShtc2ctPnR5cGUpOworCisJaWYgKG1zZy0+dHhfbGVuID4gMikgeworCQlkZXZfZXJy KGRzaS0+ZGV2LCAidG9vIGxvbmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIHNob3J0IHdyaXRlXG4i LAorCQkJbXNnLT50eF9sZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZHdf bWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCB2YWwpOworfQorCitzdGF0aWMgaW50IGR3 X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAg ICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwljb25zdCB1MzIgKnR4X2J1 ZiA9IG1zZy0+dHhfYnVmOworCWludCBsZW4gPSBtc2ctPnR4X2xlbiwgcGxkX2RhdGFfYnl0ZXMg PSBzaXplb2YoKnR4X2J1ZiksIHJldDsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKG1zZy0+dHhfbGVu KSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOworCXUzMiByZW1haW5kZXIgPSAwOworCisJaWYgKG1z Zy0+dHhfbGVuIDwgMykgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAid3JvbmcgdHggYnVmIGxlbmd0 aCAlenUgZm9yIGxvbmcgd3JpdGVcbiIsCisJCQltc2ctPnR4X2xlbik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCXdoaWxlIChESVZfUk9VTkRfVVAobGVuLCBwbGRfZGF0YV9ieXRlcykpIHsK KwkJaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7CisJCQltZW1jcHkoJnJlbWFpbmRlciwgdHhf YnVmLCBsZW4pOworCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwgcmVtYWluZGVy KTsKKwkJCWxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BM RF9EQVRBLCAqdHhfYnVmKTsKKwkJCXR4X2J1ZisrOworCQkJbGVuIC09IHBsZF9kYXRhX2J5dGVz OworCQl9CisKKwkJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBE U0lfQ01EX1BLVF9TVEFUVVMsCisJCQkJCSB2YWwsICEodmFsICYgR0VOX1BMRF9XX0ZVTEwpLCAx MDAwLAorCQkJCQkgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7CisJCWlmIChyZXQgPCAwKSB7 CisJCQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSB3cml0 ZSBwYXlsb2FkIEZJRk9cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiBk d19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShkc2ksIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6 ZV90IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Qs CisJCQkJCSBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJc3RydWN0IGR3X21p cGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKKwlpbnQgcmV0OworCisJc3dpdGNoICht c2ctPnR5cGUpIHsKKwljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURToKKwljYXNlIE1JUElf RFNJX0RDU19TSE9SVF9XUklURV9QQVJBTToKKwljYXNlIE1JUElfRFNJX1NFVF9NQVhJTVVNX1JF VFVSTl9QQUNLRVRfU0laRToKKwkJcmV0ID0gZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKGRz aSwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9EQ1NfTE9OR19XUklURToKKwkJcmV0 ID0gZHdfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUoZHNpLCBtc2cpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlkZXZfZXJyKGRzaS0+ZGV2LCAidW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXG4iKTsK KwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIGR3X21pcGlfZHNpX2hvc3Rfb3BzID0geworCS5hdHRh Y2ggPSBkd19taXBpX2RzaV9ob3N0X2F0dGFjaCwKKwkuZGV0YWNoID0gZHdfbWlwaV9kc2lfaG9z dF9kZXRhY2gsCisJLnRyYW5zZmVyID0gZHdfbWlwaV9kc2lfaG9zdF90cmFuc2ZlciwKK307CisK K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBp X2RzaSAqZHNpKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBWSURfTU9ERV9UWVBFX0JVUlNUX1NZ TkNfUFVMU0VTIHwgRU5BQkxFX0xPV19QT1dFUjsKKworCWRzaV93cml0ZShkc2ksIERTSV9WSURf TU9ERV9DRkcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3NldF9tb2RlKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSBlbnVtIGR3X21pcGlfZHNpX21vZGUgbW9kZSkK K3sKKwlpZiAobW9kZSA9PSBEV19NSVBJX0RTSV9DTURfTU9ERSkgeworCQlkc2lfd3JpdGUoZHNp LCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5B QkxFX0NNRF9NT0RFKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7CisJ fSBlbHNlIHsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCQlkc2lfd3Jp dGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9WSURFT19NT0RFKTsKKwkJZHdfbWlwaV9kc2lf dmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9X RVJVUCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kaXNhYmxlKHN0cnVjdCBk d19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9SU1RaKTsKK30KKworc3RhdGljIHZv aWQgZHdfbWlwaV9kc2lfaW5pdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1Ra LCBQSFlfRElTRk9SQ0VQTEwgfCBQSFlfRElTQUJMRUNMSworCQkgIHwgUEhZX1JTVFogfCBQSFlf U0hVVERPV05aKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJVklE U0lPTigxMCkgfAorCQkgIFRYX0VTQ19DTEtfRElWSURTSU9OKDcpKTsKKwlkc2lfd3JpdGUoZHNp LCBEU0lfTFBDTEtfQ1RSTCwgUEhZX1RYUkVRVUVTVENMS0hTKTsKK30KKworc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gMCwgY29sb3IgPSAw OworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoK KwkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzI0QklUOworCQlicmVhazsKKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I2NjY6CisJCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xOEJJVF8yIHwgRU4x OF9MT09TRUxZOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgor CQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJ X0RTSV9GTVRfUkdCNTY1OgorCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMTsKKwkJ YnJlYWs7CisJfQorCisJaWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykp CisJCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOworCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19QSFNZTkMpKQorCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKKworCWRzaV93cml0 ZShkc2ksIERTSV9EUElfVkNJRCwgRFBJX1ZJRChkc2ktPmNoYW5uZWwpKTsKKwlkc2lfd3JpdGUo ZHNpLCBEU0lfRFBJX0NPTE9SX0NPRElORywgY29sb3IpOworCWRzaV93cml0ZShkc2ksIERTSV9E UElfQ0ZHX1BPTCwgdmFsKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0xQX0NNRF9USU0sIE9V VFZBQ1RfTFBDTURfVElNRSg0KQorCQkgIHwgSU5WQUNUX0xQQ01EX1RJTUUoNCkpOworfQorCitz dGF0aWMgdm9pZCBkd19taXBpX2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BDS0hETF9DRkcsIEVOX0NSQ19S WCB8IEVOX0VDQ19SWCB8IEVOX0JUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3Zp ZGVvX3BhY2tldF9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgICBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1BL VF9TSVpFLCBWSURfUEtUX1NJWkUobW9kZS0+aGRpc3BsYXkpKTsKK30KKworc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK K3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVE9fQ05UX0NGRywgSFNUWF9UT19DTlQoMTAwMCkgfCBM UFJYX1RPX0NOVCgxMDAwKSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0JUQV9UT19DTlQsIDB4ZDAw KTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLCBDTURfTU9ERV9BTExfTFApOwor CWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RFKTsKK30KKworLyog R2V0IGxhbmUgYnl0ZSBjbG9jayBjeWNsZXMuICovCitzdGF0aWMgdTMyIGR3X21pcGlfZHNpX2dl dF9oY29tcG9uZW50X2xiY2Moc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJCSAgIHUzMiBo Y29tcG9uZW50KQoreworCXUzMiBmcmFjLCBsYmNjOworCisJbGJjYyA9IGhjb21wb25lbnQgKiBk c2ktPmxhbmVfbWJwcyAqIE1TRUNfUEVSX1NFQyAvIDg7CisKKwlmcmFjID0gbGJjYyAlIGRzaS0+ bW9kZS0+Y2xvY2s7CisJbGJjYyA9IGxiY2MgLyBkc2ktPm1vZGUtPmNsb2NrOworCWlmIChmcmFj KQorCQlsYmNjKys7CisKKwlyZXR1cm4gbGJjYzsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfbGluZV90aW1lcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIGh0 b3RhbCwgaHNhLCBoYnAsIGxiY2M7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBk c2ktPm1vZGU7CisKKwlodG90YWwgPSBtb2RlLT5odG90YWw7CisJaHNhID0gbW9kZS0+aHN5bmNf ZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5 bmNfZW5kOworCisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBo dG90YWwpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfSExJTkVfVElNRSwgbGJjYyk7CisKKwls YmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGhzYSk7CisJZHNpX3dy aXRlKGRzaSwgRFNJX1ZJRF9IU0FfVElNRSwgbGJjYyk7CisKKwlsYmNjID0gZHdfbWlwaV9kc2lf Z2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGhicCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9I QlBfVElNRSwgbGJjYyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3Rp bWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMyIHZhY3RpdmUsIHZz YSwgdmZwLCB2YnA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2ktPm1vZGU7 CisKKwl2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7CisJdnNhID0gbW9kZS0+dnN5bmNfZW5kIC0g bW9kZS0+dnN5bmNfc3RhcnQ7CisJdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlz cGxheTsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfVklEX1ZBQ1RJVkVfTElORVMsIHZhY3RpdmUpOworCWRzaV93cml0ZShkc2ks IERTSV9WSURfVlNBX0xJTkVTLCB2c2EpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkZQX0xJ TkVTLCB2ZnApOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkJQX0xJTkVTLCB2YnApOworfQor CitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCBQSFlfSFMy TFBfVElNRSgweDQwKQorCQkgIHwgUEhZX0xQMkhTX1RJTUUoMHg0MCkgfCBNQVhfUkRfVElNRSgx MDAwMCkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHLCBQSFlfQ0xL SFMyTFBfVElNRSgweDQwKQorCQkgIHwgUEhZX0NMS0xQMkhTX1RJTUUoMHg0MCkpOworfQorCitz dGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9Q X1dBSVRfVElNRSgweDIwKSB8CisJCSAgTl9MQU5FUyhkc2ktPmxhbmVzKSk7Cit9CisKK3N0YXRp YyB2b2lkIGR3X21pcGlfZHNpX2NsZWFyX2VycihzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sK Kwlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QwKTsKKwlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1Qx KTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzAsIDApOworCWRzaV93cml0ZShkc2ksIERT SV9JTlRfTVNLMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfbW9k ZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21v ZGUpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVy KTsKKwlpbnQgcmV0OworCisJZHNpLT5tb2RlID0gYWRqdXN0ZWRfbW9kZTsKKworCXJldCA9IGR3 X21pcGlfZHNpX2dldF9sYW5lX2Jwcyhkc2kpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisK KwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykpIHsKKwkJZGV2X2Vycihkc2ktPmRl diwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOwor CX0KKworCWR3X21pcGlfZHNpX2luaXQoZHNpKTsKKwlkd19taXBpX2RzaV9kcGlfY29uZmlnKGRz aSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7CisJZHdf bWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19wYWNr ZXRfY29uZmlnKGRzaSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhk c2kpOworCWR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lf dmVydGljYWxfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2Nv bmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOworCWR3 X21pcGlfZHNpX2NsZWFyX2Vycihkc2kpOworCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBh bmVsKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHByZXBhcmUgcGFuZWxcbiIp OworCQlyZXR1cm47CisJfQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworfQor CitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19k c2koZW5jb2Rlcik7CisKKwlkcm1fcGFuZWxfZGlzYWJsZShkc2ktPnBhbmVsKTsKKworCWlmIChj bGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiJXM6 IEZhaWxlZCB0byBlbmFibGUgcGNsa1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJ ZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHJtX3Bh bmVsX3VucHJlcGFyZShkc2ktPnBhbmVsKTsKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERX X01JUElfRFNJX1ZJRF9NT0RFKTsKKworCS8qCisJICogVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFr ZSBzdXJlIHRoZSBwZXJpcGhlcmFsIHdpbGwgYmUgZHJpdmVuCisJICogbm9ybWFsbHkgd2hlbiB0 aGUgZGlzcGxheSBpcyBlbmFibGVkIGFnYWluIGxhdGVyLgorCSAqLworCW1zbGVlcCgxMjApOwor CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHdf bWlwaV9kc2lfZGlzYWJsZShkc2kpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGsp OworfQorCitzdGF0aWMgYm9vbCBkd19taXBpX2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7 CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfcHJl cGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGR3X21pcGlfZHNp ICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKwlpbnQgbXV4ICA9IHJvY2tjaGlwX2Ry bV9lbmNvZGVyX2dldF9tdXhfaWQoZHNpLT5kZXYtPm9mX25vZGUsIGVuY29kZXIpOworCXUzMiBp bnRlcmZhY2VfcGl4X2ZtdDsKKwl1MzIgdmFsOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgewor CWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJaW50ZXJmYWNlX3BpeF9mbXQgPSBST0NLQ0hJ UF9PVVRfTU9ERV9QODg4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJ CWludGVyZmFjZV9waXhfZm10ID0gUk9DS0NISVBfT1VUX01PREVfUDY2NjsKKwkJYnJlYWs7CisJ Y2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQlpbnRlcmZhY2VfcGl4X2ZtdCA9IFJPQ0tDSElQ X09VVF9NT0RFX1A1NjU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCXJl dHVybjsKKwl9CisKKwlyb2NrY2hpcF9kcm1fY3J0Y19tb2RlX2NvbmZpZyhlbmNvZGVyLT5jcnRj LCBEUk1fTU9ERV9DT05ORUNUT1JfRFNJLAorCQkJCSAgICAgIGludGVyZmFjZV9waXhfZm10KTsK KworCWlmIChtdXgpCisJCXZhbCA9IERTSTBfU0VMX1ZPUF9MSVQgfCAoRFNJMF9TRUxfVk9QX0xJ VCA8PCAxNik7CisJZWxzZQorCQl2YWwgPSBEU0kwX1NFTF9WT1BfTElUIDw8IDE2OworCisJcmVn bWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgR1JGX1NPQ19DT042LCB2YWwpOworCWRldl9kYmco ZHNpLT5kZXYsICJ2b3AgJXMgb3V0cHV0IHRvIGRzaTBcbiIsIChtdXgpID8gIkxJVCIgOiAiQklH Iik7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfY29tbWl0KHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29k ZXJfdG9fZHNpKGVuY29kZXIpOworCisJaWYgKGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGsp KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICIlczogRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iLCBf X2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkd19taXBpX2RzaV9waHlfaW5pdChkc2kpOwor CWR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoZHNpKTsKKworCWR3X21pcGlfZHNpX3Nl dF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUpOworCWRybV9wYW5lbF9lbmFibGUoZHNp LT5wYW5lbCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xrKTsKK30KKworc3Rh dGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MKK2R3X21pcGlfZHNpX2VuY29kZXJf aGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2Rl X2ZpeHVwLAorCS5wcmVwYXJlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9wcmVwYXJlLAorCS5jb21t aXQgPSBkd19taXBpX2RzaV9lbmNvZGVyX2NvbW1pdCwKKwkubW9kZV9zZXQgPSBkd19taXBpX2Rz aV9lbmNvZGVyX21vZGVfc2V0LAorCS5kaXNhYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNh YmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBpX2RzaV9l bmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisK K3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3Rv X2RzaShjb25uZWN0b3IpOworCisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5l bCk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBkd19taXBpX2RzaV9tb2RlX3Zh bGlkKAorCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNv bl90b19kc2koY29ubmVjdG9yKTsKKworCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfc3RhdHVz ID0gTU9ERV9PSzsKKworCWlmIChkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKQorCQltb2RlX3N0YXR1 cyA9IGRzaS0+cGRhdGEtPm1vZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiBt b2RlX3N0YXR1czsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqZHdfbWlwaV9kc2lf Y29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9y KTsKKworCXJldHVybiAmZHNpLT5lbmNvZGVyOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzIGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7 CisJLmdldF9tb2RlcyA9IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLm1vZGVf dmFsaWQgPSBkd19taXBpX2RzaV9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBkd19taXBp X2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMKK2R3X21pcGlfZHNpX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLCBib29sIGZvcmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3Rl ZDsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lz dGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkd19taXBpX2RzaV9jb25uZWN0b3Jf ZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21v ZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3Qg PSBkd19taXBpX2RzaV9kZXRlY3QsCisJLmRlc3Ryb3kgPSBkd19taXBpX2RzaV9kcm1fY29ubmVj dG9yX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlZ2lzdGVyKHN0cnVj dCBkcm1fZGV2aWNlICpkcm0sCisJCQkJICAgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7 CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRzaS0+Y29ubmVjdG9yOworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGRzaS0+ZGV2OworCWludCByZXQ7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRj cyA9IGRybV9vZl9maW5kX3Bvc3NpYmxlX2NydGNzKGRybSwKKwkJCQkJCQkgICAgIGRldi0+b2Zf bm9kZSk7CisJLyoKKwkgKiBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgQ1JUQyhzKSB3aGljaCB0 aGlzIGVuY29kZXIgaXMKKwkgKiBzdXBwb3NlZCB0byBiZSBjb25uZWN0ZWQgdG8sIGl0J3MgYmVj YXVzZSB0aGUgQ1JUQyBoYXMKKwkgKiBub3QgYmVlbiByZWdpc3RlcmVkIHlldC4gIERlZmVyIHBy b2JpbmcsIGFuZCBob3BlIHRoYXQKKwkgKiB0aGUgcmVxdWlyZWQgQ1JUQyBpcyBhZGRlZCBsYXRl ci4KKwkgKi8KKwlpZiAoZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPT0gMCkKKwkJcmV0dXJuIC1F UFJPQkVfREVGRVI7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsCisJ CQkgICAgICAgJmR3X21pcGlfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKwlyZXQgPSBkcm1f ZW5jb2Rlcl9pbml0KGRybSwgJmRzaS0+ZW5jb2RlciwgJmR3X21pcGlfZHNpX2VuY29kZXJfZnVu Y3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9EU0kpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLAorCQkJJmR3 X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCXJldCA9IGRybV9jb25uZWN0b3Jf aW5pdChkcm0sIGNvbm5lY3RvciwgJmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAg IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVu Y29kZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm9ja2NoaXBfbWlwaV9wYXJz ZV9kdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w ID0gZHNpLT5kZXYtPm9mX25vZGU7CisKKwlkc2ktPmdyZl9yZWdtYXAgPSBzeXNjb25fcmVnbWFw X2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIik7CisJaWYgKElTX0VSUihkc2kt PmdyZl9yZWdtYXApKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJVbmFibGUgdG8gZ2V0IHJvY2tj aGlwLGdyZlxuIik7CisJCXJldHVybiBQVFJfRVJSKGRzaS0+Z3JmX3JlZ21hcCk7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyByazMyODhfbWlwaV9k c2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJ CQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJLyoKKwkgKiBUaGUgVklEX1BL VF9TSVpFIGZpZWxkIGluIHRoZSBEU0lfVklEX1BLVF9DRkcKKwkgKiByZWdpc3RlciBpcyAxMS1i aXQuCisJICovCisJaWYgKG1vZGUtPmhkaXNwbGF5ID4gMHg3ZmYpCisJCXJldHVybiBNT0RFX0JB RF9IVkFMVUU7CisKKwkvKgorCSAqIFRoZSBWX0FDVElWRV9MSU5FUyBmaWVsZCBpbiB0aGUgRFNJ X1ZUSU1JTkdfQ0ZHCisJICogcmVnaXN0ZXIgaXMgMTEtYml0LgorCSAqLworCWlmIChtb2RlLT52 ZGlzcGxheSA+IDB4N2ZmKQorCQlyZXR1cm4gTU9ERV9CQURfVlZBTFVFOworCisJcmV0dXJuIE1P REVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHJrMzI4OF9t aXBpX2RzaV9kcnZfZGF0YSA9IHsKKwkubWF4X2RhdGFfbGFuZXMgPSA0LAorCS5tb2RlX3ZhbGlk ID0gcmszMjg4X21pcGlfZHNpX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9kdF9pZHNbXSA9IHsKKwl7CisJIC5jb21wYXRpYmxl ID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRzaSIsCisJIC5kYXRhID0gJnJrMzI4OF9taXBpX2Rz aV9kcnZfZGF0YSwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIGR3X21pcGlfZHNpX2R0X2lkcyk7CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lf YmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAg dm9pZCAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9CisJCQlv Zl9tYXRjaF9kZXZpY2UoZHdfbWlwaV9kc2lfZHRfaWRzLCBkZXYpOworCWNvbnN0IHN0cnVjdCBk d19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7CisJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpOworCXN0cnVjdCBy ZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGRhdGEgPSBwZGF0YTsKKworCXJldCA9IHJvY2tjaGlw X21pcGlfcGFyc2VfZHQoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJl cykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkc2ktPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoZHNpLT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIo ZHNpLT5iYXNlKTsKKworCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJyZWYi KTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2kt PnBsbHJlZl9jbGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgcGxsIHJlZmVyZW5j ZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5wY2xrID0g ZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGNsaykpIHsKKwkJ cmV0ID0gUFRSX0VSUihkc2ktPnBjbGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQg cGNsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwg IiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBkd19taXBpX2RzaV9yZWdpc3Rlcihkcm0sIGRzaSk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBtaXBpX2RzaTogJWRc biIsIHJldCk7CisJCWdvdG8gZXJyX3BsbHJlZjsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2 LCBkc2kpOworCisJZHNpLT5kc2lfaG9zdC5vcHMgPSAmZHdfbWlwaV9kc2lfaG9zdF9vcHM7CisJ ZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7CisJcmV0dXJuIG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIo JmRzaS0+ZHNpX2hvc3QpOworCitlcnJfcGxscmVmOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShk c2ktPnBsbHJlZl9jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlf ZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwl2 b2lkICpkYXRhKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCWNs a19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGNvbXBvbmVudF9vcHMgZHdfbWlwaV9kc2lfb3BzID0geworCS5iaW5kCT0gZHdfbWlw aV9kc2lfYmluZCwKKwkudW5iaW5kCT0gZHdfbWlwaV9kc2lfdW5iaW5kLAorfTsKKworc3RhdGlj IGludCBkd19taXBpX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkd19taXBpX2RzaV9vcHMpOworfQor CitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmR3X21pcGlfZHNpX29wcyk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X21pcGlfZHNp X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZHdfbWlwaV9kc2lfcHJvYmUsCisJLnJlbW92ZQkJPSBk d19taXBpX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9tYXRjaF90YWJsZSA9IGR3 X21pcGlfZHNpX2R0X2lkcywKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9LAorfTsKK21vZHVs ZV9wbGF0Zm9ybV9kcml2ZXIoZHdfbWlwaV9kc2lfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBU SU9OKCJST0NLQ0hJUCBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVf QVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPiIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCmluZGV4IGQ5ZWM3ODAuLmUx NzViNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f dm9wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwpA QCAtMTIwOSw2ICsxMjA5LDkgQEAgc3RhdGljIGludCB2b3BfY3J0Y19tb2RlX3NldChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE6CiAJCVZPUF9D VFJMX1NFVCh2b3AsIGhkbWlfZW4sIDEpOwogCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0NPTk5F Q1RPUl9EU0k6CisJCVZPUF9DVFJMX1NFVCh2b3AsIG1pcGlfZW4sIDEpOworCQlicmVhazsKIAlk ZWZhdWx0OgogCQlEUk1fRVJST1IoInVuc3VwcG9ydCBjb25uZWN0b3JfdHlwZVslZF1cbiIsCiAJ CQkgIHZvcC0+Y29ubmVjdG9yX3R5cGUpOwotLSAKMi42LjMKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==