From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sebastian Andrzej Siewior Subject: [PATCH 03/13] tty: serial: Add 8250-core based omap driver Date: Mon, 29 Sep 2014 20:06:39 +0200 Message-ID: <1412014009-13315-4-git-send-email-bigeasy@linutronix.de> References: <1412014009-13315-1-git-send-email-bigeasy@linutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1412014009-13315-1-git-send-email-bigeasy@linutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-serial@vger.kernel.org Cc: tony@atomide.com, gregkh@linuxfoundation.org, Sebastian Andrzej Siewior , linux-kernel@vger.kernel.org, balbi@ti.com, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: linux-omap@vger.kernel.org VGhpcyBwYXRjaCBwcm92aWRlcyBhIDgyNTAtY29yZSBiYXNlZCBVQVJUIGRyaXZlciBmb3IgdGhl IGludGVybmFsIE9NQVAKVUFSVC4gVGhlIGxvbmcgdGVybSBnb2FsIGlzIHRvIHByb3ZpZGUgdGhl IHNhbWUgZnVuY3Rpb25hbGl0eSBhcyB0aGUKY3VycmVudCBPTUFQIHVhcnQgZHJpdmVyIGFuZCBE TUEgc3VwcG9ydC4KSSB0cmllZCB0byBtZXJnZSBvbWFwLXNlcmlhbCBjb2RlIHRvZ2V0aGVyIHdp dGggdGhlIDgyNTAtY29yZSBjb2RlLgpUaGVyZSBzaG91bGQgc2hvdWxkIGJlIGhhcmRseSBhIG5v dGljYWJsZSBkaWZmZXJlbmNlLiBUaGUgdHJpZ2dlciBsZXZlbHMKYXJlIGRpZmZlcmVudCBjb21w YXJlZCB0byBvbWFwLXNlcmlhbDoKLSBvbWFwIHNlcmlhbAogIFRYOiBJbnRlcnJ1cHQgY29tZXMg YWZ0ZXIgVFggRklGTyBoYXMgcm9vbSBmb3IgMTYgYnl0ZXMuCiAgICAgIFRYIG9mIDQwOTYgYnl0 ZXMgaW4gb25lIGdvIHJlc3VsdHMgaW4gMjU2IGludGVycnVwdHMKCiAgUlg6IEludGVycnVwdCBj b21lcyBhZnRlciB0aGVyZSBpcyBvbiBieXRlIGluIHRoZSBGSUZPLgogICAgICBSWCBvZiA0MDk2 IGJ5dGVzIHJlc3VsdHMgaW4gNDA5NiBpbnRlcnJ1cHRzLgoKLSB0aGlzIGRyaXZlcgogIFRYOiBJ bnRlcnJ1cHQgY29tZXMgb25jZSB0aGUgVFggRklGTyBpcyBlbXB0eS4KICAgICAgVFggb2YgNDA5 NiBieXRlcyByZXN1bHRzIGluIDY1IGludGVycnVwdHMuIFRoYXQgbWVhbnMgdGhlcmUgd2lsbAog ICAgICBiZSBnYXBzIG9uIHRoZSBsaW5lIHdoaWxlIHRoZSBkcml2ZXIgcmVsb2FkcyB0aGUgRklG Ty4KCiAgUlg6IEludGVycnVwdCBjb21lcyBvbmNlIHRoZXJlIGFyZSA0OCBieXRlcyBpbiB0aGUg RklGTyBvciBsZXNzIG92ZXIKICAgICAgImxvbmdlciIgdGltZSBmcmFtZS4gV2UgaGF2ZQogICAg ICAgICAgMSAvIDExNTIwICogMTBeMyAqIDE2ID0+IDEuMzjigKYgbXMKICAgICAgMS4zOG1zIHRv IHJlYWN0IGFuZCBwdXJnZSB0aGUgRklGTyBvbiAxMTUyMDAsOE4xLiBTaW5jZSB0aGUgb3RoZXIK ICAgICAgZHJpdmVyIGZpcmVkIGFmdGVyIGVhY2ggYnl0ZSBpdCBoYWQgfjUuNDdtcyB0aW1lIHRv IHJlYWN0LiBUaGlzCiAgICAgIF9tYXlfIGNhdXNlIHByb2JsZW1zIGlmIG9uZSByZWxpZXMgb24g bm8gbWlzc2luZyBieXRlcyBhbmQgaGFzIG5vCiAgICAgIGZsb3cgY29udHJvbC4gT24gdGhlIG90 aGVyIGhhbmQgd2UgZ2V0IG9ubHkgODUgaW50ZXJydXB0cyBmb3IgdGhlCiAgICAgIHNhbWUgYW1v dW50IG9mIGRhdGEuCgpJdCBoYXMgYmVlbiBvbmx5IHRlc3RlZCBhcyBjb25zb2xlIFVBUlQgb24g YW0zMzV4LWV2bSwgZHJhNy1ldm0gYW5kCmJlYWdsZSBib25lLiBJIGFsc28gZGlkIHNvbWUgbG9u Z2VyIHJhdy10cmFuc2ZlcnMgdG8gbWVhc3N1cmUgdGhlIGxvYWQuCgpUaGUgZGV2aWNlIG5hbWUg aXMgdHR5UyBiYXNlZCBpbnN0ZWFkIG9mIHR0eU8uIElmIGEgdHR5TyBiYXNlZCBub2RlIG5hbWUK aXMgcmVxdWlyZWQgcGxlYXNlIGFzayB1ZGV2IGZvciBpdC4gSWYgYm90aCBkcml2ZXIgYXJlIGFj dGl2YXRlZCAodGhpcwphbmQgb21hcC1zZXJpYWwpIHRoZW4gdGhpcyBzZXJpYWwgZHJpdmVyIHdp bGwgdGFrZSBjb250cm9sIG92ZXIgdGhlCmRldmljZSBkdWUgdG8gdGhlIGxpbmsgb3JkZXIKCnY5 4oCmdjEwOgoJLSBUb255IG5vdGljZWQgdGhhdCBvbWFwMyB3b24ndCBzaG93IGFueXRoaW5nIGFm dGVyIHdha2luZyB1cAoJICBmcm9tIGNvcmUgb2ZmLiBJbiB2OSBJIHJld29ya2VkIHRoZSByZWdp c3RlciByZXN0b3JlIGFuZCBzZXQKCSAgSUVSIHRvIDAgYnkgYWNjaWRlbnQuIFRoaXMgd2VudCB1 bm5vdGljZWQgYmVjYXVzZSBzdGFydF90eAoJICB1c3VhbGx5IHNldHMgaWVyIChlaXRoZXIgZHVl IHRvIERNQSBidWcgb3IgZHVlIHRvIFRYLWNvbXBsZXRlCgkgIElSUSkuCgktIGRyb3BwZWQgRUZS IGFuZCBTTEVFUCBmcm9tIGNhcGFiaWxpdGllcy4gV2UgZG8gaGF2ZSBib3RoIGJ1dAoJICBub2Jv ZHkgc2hvdWxkIHRvdWNoIGl0LiBXZSBhbHJlYWR5IGhhbmRsZSBTTEVFUCBvdXJzZWxmLgoJLSBt YWtlIHRoZSBwcml2YXRlIGNvcHkgb2YgdGhlIHJlZ2lzdGVycyAobGlrZSBFRlIpIHU4IGluc3Rl YWQKCSAgdTMyCgktIGRyb3AgTURSMSAmIERMW01MXSByZXNldCBpbiByZXN0b3JlIHJlZ2lzdGVy cy4gRG9lcyBub3QgbG9vawoJICByZXF1aXJlZCBpdCBpcyBzZXQgdG8gdGhlIHJlcXVpcmVkIHZh bHVlIGxhdGVyLgoJLSB1cGRhdGUgTURSMSAmIFNDUiBvbmx5IGlmIGNoYW5nZWQuCgktIHNldCBN RFIxIGFzIHRoZSBsYXN0IHRoaW5nLiBUaGUgZXJyYXRhIHNheXMgdGhhdCB3ZSBzaG91bGQKCSAg c2V0dXAgZXZlcnl0aGluZyBiZWZvcmUgTURSMSBzZXQuCgktIGF2b2lkIGRpdiBieSAwIGluIG9t YXBfODI1MF9nZXRfZGl2aXNvcigpIGlmIGJhdWQgcmF0ZSBnZXRzCgkgIHZlcnkgbGFyZ2UgKEZy YW5zIEtsYXZlciBmaXhlZCB0aGUgc2FtZSB0aGluZyBvbWFwLXNlcmlhbCkKCS0gZHJvcCAiaXMg aW4gZWFybHkgc3RhZ2UiIGZyb20gS2NvbmZpZy4KdjjigKZ2OToKCS0gbGVzcyBvbiBhIGZpbGUg c2VlbXMgdG8gaGFuZyB0aGUgYW0zMzV4IGFmdGVyIGEgd2hpbGUuIEkKCSAgYmVsaWV2ZSBJIGlu dHJvZHVjZSB0aGlzIGJ1ZyBhIHdoaWxlIGFnbyBzaW5jZSBJIGNhbiByZXByb2R1Y2UKCSAgdGhp cyBwcmlvciB0byB2OC4gRml4ZWQgYnkgcmVkb2luZyB0aGUgb21hcDgyNTBfcmVzdG9yZV9yZWdz KCkKdjfigKZ2ODoKCS0gcmVkbyB0aGUgcmVnaXN0ZXIgd3JpdGUuIFRoZXJlIGlzIG5vdyBvbmUg ZnVuY3Rpb24gZm9yIHRoYXQKCSAgd2hpY2ggaXMgdXNlZCBmcm9tIHNldF90ZXJtaW9zKCkgYW5k IHJ1bnRpbWUtcmVzdW1lLgoJLSBkcm9wIFBPUlRfT01BUF8xNjc1MCBhbmQgbW92ZSB0aGUgc2V0 dXAgdG8gdGhlIG9tYXAgZmlsZS4gV2UKCSAgaGF2ZSBvdXIgb3duIHNldCB0ZXJtaW9zIGZ1bmN0 aW9uIGFueXdheSAoSGVpa2tpIEtyb2dlcnVzKQoJLSB1c2UgTUVNIGluc3RlYWQgb2YgTUVNMzIu IFRSTSBvZiBBTS9ETTM3eCBzYXlzIHRoYXQgMzJiaXQKCSAgYWNjZXNzIG9uIFRIUiBtaWdodCBy ZXN1bHQgaW4gZGF0YSBhYm9ydC4gV2Ugb25seSBuZWVkIDMyYml0CgkgIGFjY2VzcyBpbiB0aGUg ZXJyYXRhIGZ1bmN0aW9uIHdoaWNoIGlzIGJlZm9yZSB3ZSB1c2UgODI1MCdzCgkgIHJlYWQgZnVu Y3Rpb24gc28gaXQgZG9lc24ndCBtYXR0ZXIuCnY04oCmdjc6CgktIGNoYW5nZSB0cmlnZ2VyIGxl dmVscyBhZnRlciBzb21lIHRlc3RzIHdpdGggcmF3IHRyYW5zZmVycy4KdjPigKZ2NDoKCS0gZHJv cCBSUzQ4NSBzdXBwb3J0CgktIHdpcmUgdXAgLT50aHJvdHRsZSAvIC0+dW50aHJvdHRsZQp2MuKA pnYzOgoJLSB3aXJlIHVwIHN0YXJ0dXAgJiBzaHV0ZG93biBmb3Igd2FrZXVwLWlycSBoYW5kbGlu Zy4KCS0gUlM0ODUgaGFuZGxpbmcgKHdlbGwgdGhlIGNvcmUgZG9lcykuCgp2MeKApnYyOgoJLSBh ZGRlZCBydW50aW1lIFBNLiBDb3VsZCBzb21lYm9keSBjb3VsZCBwbGVhc2UgZG91YmxlIGNoZWNr CgkgIHRoaXM/CgktIGFkZGVkIG9tYXBfODI1MF9zZXRfdGVybWlvcygpCgpSZXZpZXdlZC1ieTog VG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KVGVzdGVkLWJ5OiBUb255IExpbmRncmVu IDx0b255QGF0b21pZGUuY29tPgpUZXN0ZWQtYnk6IEZyYW5zIEtsYXZlciA8ZnJhbnMua2xhdmVy QHhzZW5zLmNvbT4KU2lnbmVkLW9mZi1ieTogU2ViYXN0aWFuIEFuZHJ6ZWogU2lld2lvciA8Ymln ZWFzeUBsaW51dHJvbml4LmRlPgotLS0KIGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfb21h cC5jIHwgOTE0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy90 dHkvc2VyaWFsLzgyNTAvS2NvbmZpZyAgICAgfCAgIDkgKwogZHJpdmVycy90dHkvc2VyaWFsLzgy NTAvTWFrZWZpbGUgICAgfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCA5MjQgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfb21hcC5j CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9vbWFwLmMgYi9kcml2 ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX29tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjJmNjUzYzQ4NjM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv dHR5L3NlcmlhbC84MjUwLzgyNTBfb21hcC5jCkBAIC0wLDAgKzEsOTE0IEBACisvKgorICogODI1 MC1jb3JlIGJhc2VkIGRyaXZlciBmb3IgdGhlIE9NQVAgaW50ZXJuYWwgVUFSVAorICoKKyAqIGJh c2VkIG9uIG9tYXAtc2VyaWFsLmMsIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50 cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2ViYXN0aWFuIEFuZHJ6ZWogU2lld2lvcgor ICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8u aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1 MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2Vy aWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29m X2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25z b2xlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CisKKyNpbmNsdWRlICI4MjUwLmgiCisK KyNkZWZpbmUgREVGQVVMVF9DTEtfU1BFRUQJNDgwMDAwMDAKKworI2RlZmluZSBVQVJUX0VSUkFU QV9pMjAyX01EUjFfQUNDRVNTCSgxIDw8IDApCisjZGVmaW5lIE9NQVBfVUFSVF9XRVJfSEFTX1RY X1dBS0VVUAkoMSA8PCAxKQorCisjZGVmaW5lIE9NQVBfVUFSVF9GQ1JfUlhfVFJJRwkJNgorI2Rl ZmluZSBPTUFQX1VBUlRfRkNSX1RYX1RSSUcJCTQKKworLyogU0NSIHJlZ2lzdGVyIGJpdG1hc2tz ICovCisjZGVmaW5lIE9NQVBfVUFSVF9TQ1JfUlhfVFJJR19HUkFOVTFfTUFTSwkoMSA8PCA3KQor I2RlZmluZSBPTUFQX1VBUlRfU0NSX1RYX1RSSUdfR1JBTlUxX01BU0sJKDEgPDwgNikKKyNkZWZp bmUgT01BUF9VQVJUX1NDUl9UWF9FTVBUWQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVBfVUFSVF9T Q1JfRE1BTU9ERV9NQVNLCQkoMyA8PCAxKQorI2RlZmluZSBPTUFQX1VBUlRfU0NSX0RNQU1PREVf MQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVBfVUFSVF9TQ1JfRE1BTU9ERV9DVEwJCSgxIDw8IDAp CisKKy8qIE1WUiByZWdpc3RlciBiaXRtYXNrcyAqLworI2RlZmluZSBPTUFQX1VBUlRfTVZSX1ND SEVNRV9TSElGVAkzMAorI2RlZmluZSBPTUFQX1VBUlRfTEVHQUNZX01WUl9NQUpfTUFTSwkweGYw CisjZGVmaW5lIE9NQVBfVUFSVF9MRUdBQ1lfTVZSX01BSl9TSElGVAk0CisjZGVmaW5lIE9NQVBf VUFSVF9MRUdBQ1lfTVZSX01JTl9NQVNLCTB4MGYKKyNkZWZpbmUgT01BUF9VQVJUX01WUl9NQUpf TUFTSwkJMHg3MDAKKyNkZWZpbmUgT01BUF9VQVJUX01WUl9NQUpfU0hJRlQJCTgKKyNkZWZpbmUg T01BUF9VQVJUX01WUl9NSU5fTUFTSwkJMHgzZgorCisjZGVmaW5lIFVBUlRfVEk3NTJfVExSX1RY CTAKKyNkZWZpbmUgVUFSVF9USTc1Ml9UTFJfUlgJNAorCisjZGVmaW5lIFRSSUdHRVJfVExSX01B U0soeCkJKCh4ICYgMHgzYykgPj4gMikKKyNkZWZpbmUgVFJJR0dFUl9GQ1JfTUFTSyh4KQkoeCAm IDMpCisKKy8qIEVuYWJsZSBYT04vWE9GRiBmbG93IGNvbnRyb2wgb24gb3V0cHV0ICovCisjZGVm aW5lIE9NQVBfVUFSVF9TV19UWAkJMHgwOAorLyogRW5hYmxlIFhPTi9YT0ZGIGZsb3cgY29udHJv bCBvbiBpbnB1dCAqLworI2RlZmluZSBPTUFQX1VBUlRfU1dfUlgJCTB4MDIKKworI2RlZmluZSBP TUFQX1VBUlRfV0VSX01PRF9XS1VQCTB4N2YKKyNkZWZpbmUgT01BUF9VQVJUX1RYX1dBS0VVUF9F TgkoMSA8PCA3KQorCisjZGVmaW5lIFRYX1RSSUdHRVIJMQorI2RlZmluZSBSWF9UUklHR0VSCTQ4 CisKKyNkZWZpbmUgT01BUF9VQVJUX1RDUl9SRVNUT1JFKHgpCSgoeCAvIDQpIDw8IDQpCisjZGVm aW5lIE9NQVBfVUFSVF9UQ1JfSEFMVCh4KQkJKCh4IC8gNCkgPDwgMCkKKworI2RlZmluZSBVQVJU X0JVSUxEX1JFVklTSU9OKHgsIHkpCSgoKHgpIDw8IDgpIHwgKHkpKQorCisjZGVmaW5lIE9NQVBf VUFSVF9SRVZfNDYgMHgwNDA2CisjZGVmaW5lIE9NQVBfVUFSVF9SRVZfNTIgMHgwNTAyCisjZGVm aW5lIE9NQVBfVUFSVF9SRVZfNjMgMHgwNjAzCisKK3N0cnVjdCBvbWFwODI1MF9wcml2IHsKKwlp bnQgbGluZTsKKwl1OCBoYWJpdDsKKwl1OCBtZHIxOworCXU4IGVmcjsKKwl1OCBzY3I7CisJdTgg d2VyOworCXU4IHhvbjsKKwl1OCB4b2ZmOworCXUxNiBxdW90OworCisJYm9vbCBpc19zdXNwZW5k aW5nOworCWludCB3YWtlaXJxOworCWludCB3YWtldXBzX2VuYWJsZWQ7CisJdTMyIGxhdGVuY3k7 CisJdTMyIGNhbGNfbGF0ZW5jeTsKKwlzdHJ1Y3QgcG1fcW9zX3JlcXVlc3QgcG1fcW9zX3JlcXVl c3Q7CisJc3RydWN0IHdvcmtfc3RydWN0IHFvc193b3JrOworCXN0cnVjdCB1YXJ0XzgyNTBfZG1h IG9tYXA4MjUwX2RtYTsKK307CisKK3N0YXRpYyB1MzIgdWFydF9yZWFkKHN0cnVjdCB1YXJ0Xzgy NTBfcG9ydCAqdXAsIHUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKHVwLT5wb3J0Lm1lbWJhc2Ug KyAocmVnIDw8IHVwLT5wb3J0LnJlZ3NoaWZ0KSk7Cit9CisKKy8qCisgKiBXb3JrIEFyb3VuZCBm b3IgRXJyYXRhIGkyMDIgKDI0MzAsIDM0MzAsIDM2MzAsIDQ0MzAgYW5kIDQ0NjApCisgKiBUaGUg YWNjZXNzIHRvIHVhcnQgcmVnaXN0ZXIgYWZ0ZXIgTURSMSBBY2Nlc3MKKyAqIGNhdXNlcyBVQVJU IHRvIGNvcnJ1cHQgZGF0YS4KKyAqCisgKiBOZWVkIGEgZGVsYXkgPQorICogNSBMNCBjbG9jayBj eWNsZXMgKyA1IFVBUlQgZnVuY3Rpb25hbCBjbG9jayBjeWNsZSAoQDQ4TUh6ID0gfjAuMnVTKQor ICogZ2l2ZSAxMCB0aW1lcyBhcyBtdWNoCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfODI1MF9tZHIx X2VycmF0YXNldChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwLAorCQkJCSAgICAgc3RydWN0IG9t YXA4MjUwX3ByaXYgKnByaXYpCit7CisJdTggdGltZW91dCA9IDI1NTsKKwl1OCBvbGRfbWRyMTsK KworCW9sZF9tZHIxID0gc2VyaWFsX2luKHVwLCBVQVJUX09NQVBfTURSMSk7CisJaWYgKG9sZF9t ZHIxID09IHByaXYtPm1kcjEpCisJCXJldHVybjsKKworCXNlcmlhbF9vdXQodXAsIFVBUlRfT01B UF9NRFIxLCBwcml2LT5tZHIxKTsKKwl1ZGVsYXkoMik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9G Q1IsIHVwLT5mY3IgfCBVQVJUX0ZDUl9DTEVBUl9YTUlUIHwKKwkJCVVBUlRfRkNSX0NMRUFSX1JD VlIpOworCS8qCisJICogV2FpdCBmb3IgRklGTyB0byBlbXB0eTogd2hlbiBlbXB0eSwgUlhfRklG T19FIGJpdCBpcyAwIGFuZAorCSAqIFRYX0ZJRk9fRSBiaXQgaXMgMS4KKwkgKi8KKwl3aGlsZSAo VUFSVF9MU1JfVEhSRSAhPSAoc2VyaWFsX2luKHVwLCBVQVJUX0xTUikgJgorCQkJCShVQVJUX0xT Ul9USFJFIHwgVUFSVF9MU1JfRFIpKSkgeworCQl0aW1lb3V0LS07CisJCWlmICghdGltZW91dCkg eworCQkJLyogU2hvdWxkICpuZXZlciogaGFwcGVuLiB3ZSB3YXJuIGFuZCBjYXJyeSBvbiAqLwor CQkJZGV2X2NyaXQodXAtPnBvcnQuZGV2LCAiRXJyYXRhIGkyMDI6IHRpbWVkb3V0ICV4XG4iLAor CQkJCSBzZXJpYWxfaW4odXAsIFVBUlRfTFNSKSk7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXko MSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvbWFwXzgyNTBfZ2V0X2Rpdmlzb3Ioc3RydWN0IHVh cnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGJhdWQsCisJCQkJICBzdHJ1Y3Qgb21hcDgyNTBf cHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBpbnQgdWFydGNsayA9IHBvcnQtPnVhcnRjbGs7CisJ dW5zaWduZWQgaW50IGRpdl8xMywgZGl2XzE2OworCXVuc2lnbmVkIGludCBhYnNfZDEzLCBhYnNf ZDE2OworCisJLyoKKwkgKiBPbGQgY3VzdG9tIHNwZWVkIGhhbmRsaW5nLgorCSAqLworCWlmIChi YXVkID09IDM4NDAwICYmIChwb3J0LT5mbGFncyAmIFVQRl9TUERfTUFTSykgPT0gVVBGX1NQRF9D VVNUKSB7CisJCXByaXYtPnF1b3QgPSBwb3J0LT5jdXN0b21fZGl2aXNvciAmIDB4ZmZmZjsKKwkJ LyoKKwkJICogSSBhc3N1bWUgdGhhdCBub2JvZHkgaXMgdXNpbmcgdGhpcy4gQnV0IGhleSwgaWYg c29tZWJvZHkKKwkJICogd291bGQgbGlrZSB0byBzcGVjaWZ5IHRoZSBkaXZpc29yIF9hbmRfIHRo ZSBtb2RlIHRoZW4gdGhlCisJCSAqIGRyaXZlciBpcyByZWFkeSBhbmQgd2FpdGluZyBmb3IgaXQu CisJCSAqLworCQlpZiAocG9ydC0+Y3VzdG9tX2Rpdmlzb3IgJiAoMSA8PCAxNikpCisJCQlwcml2 LT5tZHIxID0gVUFSVF9PTUFQX01EUjFfMTNYX01PREU7CisJCWVsc2UKKwkJCXByaXYtPm1kcjEg PSBVQVJUX09NQVBfTURSMV8xNlhfTU9ERTsKKwkJcmV0dXJuOworCX0KKwlkaXZfMTMgPSBESVZf Uk9VTkRfQ0xPU0VTVCh1YXJ0Y2xrLCAxMyAqIGJhdWQpOworCWRpdl8xNiA9IERJVl9ST1VORF9D TE9TRVNUKHVhcnRjbGssIDE2ICogYmF1ZCk7CisKKwlpZiAoIWRpdl8xMykKKwkJZGl2XzEzID0g MTsKKwlpZiAoIWRpdl8xNikKKwkJZGl2XzE2ID0gMTsKKworCWFic19kMTMgPSBhYnMoYmF1ZCAt IHVhcnRjbGsgLyAxMyAvIGRpdl8xMyk7CisJYWJzX2QxNiA9IGFicyhiYXVkIC0gdWFydGNsayAv IDE2IC8gZGl2XzE2KTsKKworCWlmIChhYnNfZDEzID49IGFic19kMTYpIHsKKwkJcHJpdi0+bWRy MSA9IFVBUlRfT01BUF9NRFIxXzE2WF9NT0RFOworCQlwcml2LT5xdW90ID0gZGl2XzE2OworCX0g ZWxzZSB7CisJCXByaXYtPm1kcjEgPSBVQVJUX09NQVBfTURSMV8xM1hfTU9ERTsKKwkJcHJpdi0+ cXVvdCA9IGRpdl8xMzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9tYXA4MjUwX3VwZGF0ZV9zY3Io c3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCwKKwkJCQlzdHJ1Y3Qgb21hcDgyNTBfcHJpdiAqcHJp dikKK3sKKwl1OCBvbGRfc2NyOworCisJb2xkX3NjciA9IHNlcmlhbF9pbih1cCwgVUFSVF9PTUFQ X1NDUik7CisJaWYgKG9sZF9zY3IgPT0gcHJpdi0+c2NyKQorCQlyZXR1cm47CisKKwkvKgorCSAq IFRoZSBtYW51YWwgcmVjb21tZW5kcyBub3QgdG8gZW5hYmxlIHRoZSBETUEgbW9kZSBzZWxlY3Rv ciBpbiB0aGUgU0NSCisJICogKGluc3RlYWQgb2YgdGhlIEZDUikgcmVnaXN0ZXIgX2FuZF8gc2Vs ZWN0aW5nIHRoZSBETUEgbW9kZSBhcyBvbmUKKwkgKiByZWdpc3RlciB3cml0ZSBiZWNhdXNlIHRo aXMgbWF5IGxlYWQgdG8gbWFsZnVuY3Rpb24uCisJICovCisJaWYgKHByaXYtPnNjciAmIE9NQVBf VUFSVF9TQ1JfRE1BTU9ERV9NQVNLKQorCQlzZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfU0NSLAor CQkJICAgcHJpdi0+c2NyICYgfk9NQVBfVUFSVF9TQ1JfRE1BTU9ERV9NQVNLKTsKKwlzZXJpYWxf b3V0KHVwLCBVQVJUX09NQVBfU0NSLCBwcml2LT5zY3IpOworfQorCitzdGF0aWMgdm9pZCBvbWFw ODI1MF9yZXN0b3JlX3JlZ3Moc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKK3sKKwlzdHJ1Y3Qg b21hcDgyNTBfcHJpdiAqcHJpdiA9IHVwLT5wb3J0LnByaXZhdGVfZGF0YTsKKworCXNlcmlhbF9v dXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQik7CisJc2VyaWFsX291dCh1cCwg VUFSVF9FRlIsIFVBUlRfRUZSX0VDQik7CisKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFS VF9MQ1JfQ09ORl9NT0RFX0EpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfTUNSLCBVQVJUX01DUl9U Q1JUTFIpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfRkNSLCB1cC0+ZmNyKTsKKworCW9tYXA4MjUw X3VwZGF0ZV9zY3IodXAsIHByaXYpOworCisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRf TENSX0NPTkZfTU9ERV9CKTsKKworCXNlcmlhbF9vdXQodXAsIFVBUlRfVEk3NTJfVENSLCBPTUFQ X1VBUlRfVENSX1JFU1RPUkUoMTYpIHwKKwkJCU9NQVBfVUFSVF9UQ1JfSEFMVCg1MikpOworCXNl cmlhbF9vdXQodXAsIFVBUlRfVEk3NTJfVExSLAorCQkgICBUUklHR0VSX1RMUl9NQVNLKFRYX1RS SUdHRVIpIDw8IFVBUlRfVEk3NTJfVExSX1RYIHwKKwkJICAgVFJJR0dFUl9UTFJfTUFTSyhSWF9U UklHR0VSKSA8PCBVQVJUX1RJNzUyX1RMUl9SWCk7CisKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xD UiwgMCk7CisKKwkvKiBkcm9wIFRDUiArIFRMUiBhY2Nlc3MsIHdlIHNldHVwIFhPTi9YT0ZGIGxh dGVyICovCisJc2VyaWFsX291dCh1cCwgVUFSVF9NQ1IsIHVwLT5tY3IpOworCXNlcmlhbF9vdXQo dXAsIFVBUlRfSUVSLCB1cC0+aWVyKTsKKworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJU X0xDUl9DT05GX01PREVfQik7CisJc2VyaWFsX2RsX3dyaXRlKHVwLCBwcml2LT5xdW90KTsKKwor CXNlcmlhbF9vdXQodXAsIFVBUlRfRUZSLCBwcml2LT5lZnIpOworCisJLyogQ29uZmlndXJlIGZs b3cgY29udHJvbCAqLworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01P REVfQik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9YT04xLCBwcml2LT54b24pOworCXNlcmlhbF9v dXQodXAsIFVBUlRfWE9GRjEsIHByaXYtPnhvZmYpOworCisJc2VyaWFsX291dCh1cCwgVUFSVF9M Q1IsIHVwLT5sY3IpOworCS8qIG5lZWQgbW9kZSBBIGZvciBGQ1IgKi8KKwlpZiAocHJpdi0+aGFi aXQgJiBVQVJUX0VSUkFUQV9pMjAyX01EUjFfQUNDRVNTKQorCQlvbWFwXzgyNTBfbWRyMV9lcnJh dGFzZXQodXAsIHByaXYpOworCWVsc2UKKwkJc2VyaWFsX291dCh1cCwgVUFSVF9PTUFQX01EUjEs IHByaXYtPm1kcjEpOworCXVwLT5wb3J0Lm9wcy0+c2V0X21jdHJsKCZ1cC0+cG9ydCwgdXAtPnBv cnQubWN0cmwpOworfQorCisvKgorICogT01BUCBjYW4gdXNlICJDTEsgLyAoMTYgb3IgMTMpIC8g ZGl2IiBmb3IgYmF1ZCByYXRlLiBBbmQgdGhlbiB3ZSBoYXZlIGhhdmUKKyAqIHNvbWUgZGlmZmVy ZW5jZXMgaW4gaG93IHdlIHdhbnQgdG8gaGFuZGxlIGZsb3cgY29udHJvbC4KKyAqLworc3RhdGlj IHZvaWQgb21hcF84MjUwX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJ ICBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkK K3sKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0 cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CisJc3RydWN0IG9tYXA4MjUwX3ByaXYgKnByaXYg PSB1cC0+cG9ydC5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgY2hhciBjdmFsID0gMDsKKwl1bnNp Z25lZCBpbnQgYmF1ZDsKKworCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CisJ Y2FzZSBDUzU6CisJCWN2YWwgPSBVQVJUX0xDUl9XTEVONTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6 CisJCWN2YWwgPSBVQVJUX0xDUl9XTEVONjsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWN2YWwg PSBVQVJUX0xDUl9XTEVONzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIENTODoKKwkJY3Zh bCA9IFVBUlRfTENSX1dMRU44OworCQlicmVhazsKKwl9CisKKwlpZiAodGVybWlvcy0+Y19jZmxh ZyAmIENTVE9QQikKKwkJY3ZhbCB8PSBVQVJUX0xDUl9TVE9QOworCWlmICh0ZXJtaW9zLT5jX2Nm bGFnICYgUEFSRU5CKQorCQljdmFsIHw9IFVBUlRfTENSX1BBUklUWTsKKwlpZiAoISh0ZXJtaW9z LT5jX2NmbGFnICYgUEFST0REKSkKKwkJY3ZhbCB8PSBVQVJUX0xDUl9FUEFSOworCWlmICh0ZXJt aW9zLT5jX2NmbGFnICYgQ01TUEFSKQorCQljdmFsIHw9IFVBUlRfTENSX1NQQVI7CisKKwkvKgor CSAqIEFzayB0aGUgY29yZSB0byBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgZm9yIHVzLgorCSAqLwor CWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLAorCQkJCSAgcG9y dC0+dWFydGNsayAvIDE2IC8gMHhmZmZmLAorCQkJCSAgcG9ydC0+dWFydGNsayAvIDEzKTsKKwlv bWFwXzgyNTBfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCwgcHJpdik7CisKKwkvKgorCSAqIE9rLCB3 ZSdyZSBub3cgY2hhbmdpbmcgdGhlIHBvcnQgc3RhdGUuIERvIGl0IHdpdGgKKwkgKiBpbnRlcnJ1 cHRzIGRpc2FibGVkLgorCSAqLworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocG9ydC0+ZGV2KTsKKwlz cGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKKworCS8qCisJICogVXBkYXRlIHRoZSBwZXItcG9y dCB0aW1lb3V0LgorCSAqLworCXVhcnRfdXBkYXRlX3RpbWVvdXQocG9ydCwgdGVybWlvcy0+Y19j ZmxhZywgYmF1ZCk7CisKKwl1cC0+cG9ydC5yZWFkX3N0YXR1c19tYXNrID0gVUFSVF9MU1JfT0Ug fCBVQVJUX0xTUl9USFJFIHwgVUFSVF9MU1JfRFI7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJ TlBDSykKKwkJdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9GRSB8IFVBUlRf TFNSX1BFOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgKElHTkJSSyB8IFBBUk1SSykpCisJCXVw LT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfQkk7CisKKwkvKgorCSAqIENoYXJh Y3RlcnMgdG8gaWdub3JlCisJICovCisJdXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrID0gMDsK KwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKKwkJdXAtPnBvcnQuaWdub3JlX3N0YXR1 c19tYXNrIHw9IFVBUlRfTFNSX1BFIHwgVUFSVF9MU1JfRkU7CisJaWYgKHRlcm1pb3MtPmNfaWZs YWcgJiBJR05CUkspIHsKKwkJdXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNS X0JJOworCQkvKgorCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGlj YXRvcnMsCisJCSAqIGlnbm9yZSBvdmVycnVucyB0b28gKGZvciByZWFsIHJhdyBzdXBwb3J0KS4K KwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQkJdXAtPnBvcnQuaWdu b3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX09FOworCX0KKworCS8qCisJICogaWdub3JlIGFs bCBjaGFyYWN0ZXJzIGlmIENSRUFEIGlzIG5vdCBzZXQKKwkgKi8KKwlpZiAoKHRlcm1pb3MtPmNf Y2ZsYWcgJiBDUkVBRCkgPT0gMCkKKwkJdXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrIHw9IFVB UlRfTFNSX0RSOworCisJLyoKKwkgKiBNb2RlbSBzdGF0dXMgaW50ZXJydXB0cworCSAqLworCXVw LT5pZXIgJj0gflVBUlRfSUVSX01TSTsKKwlpZiAoVUFSVF9FTkFCTEVfTVMoJnVwLT5wb3J0LCB0 ZXJtaW9zLT5jX2NmbGFnKSkKKwkJdXAtPmllciB8PSBVQVJUX0lFUl9NU0k7CisKKwl1cC0+bGNy ID0gY3ZhbDsKKwkvKiBVcCB0byBoZXJlIGl0IHdhcyBtb3N0bHkgc2VyaWFsODI1MF9kb19zZXRf dGVybWlvcygpICovCisKKwkvKgorCSAqIFdlIGVuYWJsZSBUUklHX0dSQU5VIGZvciBSWCBhbmQg VFggYW5kIGFkZGl0aW9uYWx5IHdlIHNldAorCSAqIFNDUl9UWF9FTVBUWSBiaXQuIFRoZSByZXN1 bHQgaXMgdGhlIGZvbGxvd2luZzoKKwkgKiAtIFJYX1RSSUdHRVIgYW1vdW50IG9mIGJ5dGVzIGlu IHRoZSBGSUZPIHdpbGwgY2F1c2UgYW4gaW50ZXJydXB0LgorCSAqIC0gbGVzcyB0aGFuIFJYX1RS SUdHRVIgbnVtYmVyIG9mIGJ5dGVzIHdpbGwgYWxzbyBjYXVzZSBhbiBpbnRlcnJ1cHQKKwkgKiAg IG9uY2UgdGhlIFVBUlQgZGVjaWRlcyB0aGF0IHRoZXJlIG5vIG5ldyBieXRlcyBhcnJpdmluZy4K KwkgKiAtIE9uY2UgVEhSRSBpcyBlbmFibGVkLCB0aGUgaW50ZXJydXB0IHdpbGwgYmUgZmlyZWQg b25jZSB0aGUgRklGTyBpcworCSAqICAgZW1wdHkgLSB0aGUgdHJpZ2dlciBsZXZlbCBpcyBpZ25v cmVkIGhlcmUuCisJICoKKwkgKiBPbmNlIERNQSBpcyBlbmFibGVkOgorCSAqIC0gVUFSVCB3aWxs IGFzc2VydCB0aGUgVFggRE1BIGxpbmUgb25jZSB0aGVyZSBpcyByb29tIGZvciBUWF9UUklHR0VS CisJICogICBieXRlcyBpbiB0aGUgVFggRklGTy4gT24gZWFjaCBhc3NlcnQgdGhlIERNQSBlbmdp bmUgd2lsbCBtb3ZlCisJICogICBUWF9UUklHR0VSIGJ5dGVzIGludG8gdGhlIEZJRk8uCisJICog LSBVQVJUIHdpbGwgYXNzZXJ0IHRoZSBSWCBETUEgbGluZSBvbmNlIHRoZXJlIGFyZSBSWF9UUklH R0VSIGJ5dGVzIGluCisJICogICB0aGUgRklGTyBhbmQgbW92ZSBSWF9UUklHR0VSIGJ5dGVzLgor CSAqIFRoaXMgaXMgYmVjYXVzZSB0aHJlc2hvbGQgYW5kIHRyaWdnZXIgdmFsdWVzIGFyZSB0aGUg c2FtZS4KKwkgKi8KKwl1cC0+ZmNyID0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk87CisJdXAtPmZjciB8 PSBUUklHR0VSX0ZDUl9NQVNLKFRYX1RSSUdHRVIpIDw8IE9NQVBfVUFSVF9GQ1JfVFhfVFJJRzsK Kwl1cC0+ZmNyIHw9IFRSSUdHRVJfRkNSX01BU0soUlhfVFJJR0dFUikgPDwgT01BUF9VQVJUX0ZD Ul9SWF9UUklHOworCisJcHJpdi0+c2NyID0gT01BUF9VQVJUX1NDUl9SWF9UUklHX0dSQU5VMV9N QVNLIHwgT01BUF9VQVJUX1NDUl9UWF9FTVBUWSB8CisJCU9NQVBfVUFSVF9TQ1JfVFhfVFJJR19H UkFOVTFfTUFTSzsKKworCXByaXYtPnhvbiA9IHRlcm1pb3MtPmNfY2NbVlNUQVJUXTsKKwlwcml2 LT54b2ZmID0gdGVybWlvcy0+Y19jY1tWU1RPUF07CisKKwlwcml2LT5lZnIgPSAwOworCXVwLT5t Y3IgJj0gfihVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9YT05BTlkpOworCWlmICh0ZXJtaW9zLT5j X2NmbGFnICYgQ1JUU0NUUyAmJiB1cC0+cG9ydC5mbGFncyAmIFVQRl9IQVJEX0ZMT1cpIHsKKwkJ LyogRW5hYmxlIEFVVE9SVFMgYW5kIEFVVE9DVFMgKi8KKwkJcHJpdi0+ZWZyIHw9IFVBUlRfRUZS X0NUUyB8IFVBUlRfRUZSX1JUUzsKKworCQkvKiBFbnN1cmUgTUNSIFJUUyBpcyBhc3NlcnRlZCAq LworCQl1cC0+bWNyIHw9IFVBUlRfTUNSX1JUUzsKKwl9IGVsc2UJaWYgKHVwLT5wb3J0LmZsYWdz ICYgVVBGX1NPRlRfRkxPVykgeworCQkvKgorCQkgKiBJWE9OIEZsYWc6CisJCSAqIEVuYWJsZSBY T04vWE9GRiBmbG93IGNvbnRyb2wgb24gaW5wdXQuCisJCSAqIFJlY2VpdmVyIGNvbXBhcmVzIFhP TjEsIFhPRkYxLgorCQkgKi8KKwkJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJWE9OKQorCQkJcHJp di0+ZWZyIHw9IE9NQVBfVUFSVF9TV19SWDsKKworCQkvKgorCQkgKiBJWE9GRiBGbGFnOgorCQkg KiBFbmFibGUgWE9OL1hPRkYgZmxvdyBjb250cm9sIG9uIG91dHB1dC4KKwkJICogVHJhbnNtaXQg WE9OMSwgWE9GRjEKKwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSVhPRkYpCisJCQlw cml2LT5lZnIgfD0gT01BUF9VQVJUX1NXX1RYOworCisJCS8qCisJCSAqIElYQU5ZIEZsYWc6CisJ CSAqIEVuYWJsZSBhbnkgY2hhcmFjdGVyIHRvIHJlc3RhcnQgb3V0cHV0LgorCQkgKiBPcGVyYXRp b24gcmVzdW1lcyBhZnRlciByZWNlaXZpbmcgYW55CisJCSAqIGNoYXJhY3RlciBhZnRlciByZWNv Z25pdGlvbiBvZiB0aGUgWE9GRiBjaGFyYWN0ZXIKKwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lm bGFnICYgSVhBTlkpCisJCQl1cC0+bWNyIHw9IFVBUlRfTUNSX1hPTkFOWTsKKwl9CisJb21hcDgy NTBfcmVzdG9yZV9yZWdzKHVwKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdXAtPnBvcnQubG9jayk7 CisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShwb3J0LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0 X2F1dG9zdXNwZW5kKHBvcnQtPmRldik7CisKKwkvKiBjYWxjdWxhdGUgd2FrZXVwIGxhdGVuY3kg Y29uc3RyYWludCAqLworCXByaXYtPmNhbGNfbGF0ZW5jeSA9IFVTRUNfUEVSX1NFQyAqIDY0ICog OCAvIGJhdWQ7CisJcHJpdi0+bGF0ZW5jeSA9IHByaXYtPmNhbGNfbGF0ZW5jeTsKKworCXNjaGVk dWxlX3dvcmsoJnByaXYtPnFvc193b3JrKTsKKworCS8qIERvbid0IHJld3JpdGUgQjAgKi8KKwlp ZiAodHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHRlcm1pb3MpKQorCQl0dHlfdGVybWlvc19lbmNvZGVf YmF1ZF9yYXRlKHRlcm1pb3MsIGJhdWQsIGJhdWQpOworfQorCisvKiBzYW1lIGFzIDgyNTAgZXhj ZXB0IHRoYXQgd2UgbWF5IGhhdmUgZXh0cmEgZmxvdyBiaXRzIHNldCBpbiBFRlIgKi8KK3N0YXRp YyB2b2lkIG9tYXBfODI1MF9wbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQg c3RhdGUsCisJCQkgdW5zaWduZWQgaW50IG9sZHN0YXRlKQoreworCXN0cnVjdCB1YXJ0XzgyNTBf cG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfODI1MF9wb3J0LCBw b3J0KTsKKwlzdHJ1Y3Qgb21hcDgyNTBfcHJpdiAqcHJpdiA9IHVwLT5wb3J0LnByaXZhdGVfZGF0 YTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocG9ydC0+ZGV2KTsKKwlzZXJpYWxfb3V0KHVwLCBV QVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfRUZS LCBwcml2LT5lZnIgfCBVQVJUX0VGUl9FQ0IpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCAw KTsKKworCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCAoc3RhdGUgIT0gMCkgPyBVQVJUX0lFUlhf U0xFRVAgOiAwKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RF X0IpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfRUZSLCBwcml2LT5lZnIpOworCXNlcmlhbF9vdXQo dXAsIFVBUlRfTENSLCAwKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3kocG9ydC0+ZGV2 KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChwb3J0LT5kZXYpOworfQorCitzdGF0aWMg dm9pZCBvbWFwX3NlcmlhbF9maWxsX2ZlYXR1cmVzX2VycmF0YXMoc3RydWN0IHVhcnRfODI1MF9w b3J0ICp1cCwKKwkJCQkJICAgICAgc3RydWN0IG9tYXA4MjUwX3ByaXYgKnByaXYpCit7CisJdTMy IG12ciwgc2NoZW1lOworCXUxNiByZXZpc2lvbiwgbWFqb3IsIG1pbm9yOworCisJbXZyID0gdWFy dF9yZWFkKHVwLCBVQVJUX09NQVBfTVZFUik7CisKKwkvKiBDaGVjayByZXZpc2lvbiByZWdpc3Rl ciBzY2hlbWUgKi8KKwlzY2hlbWUgPSBtdnIgPj4gT01BUF9VQVJUX01WUl9TQ0hFTUVfU0hJRlQ7 CisKKwlzd2l0Y2ggKHNjaGVtZSkgeworCWNhc2UgMDogLyogTGVnYWN5IFNjaGVtZTogT01BUDIv MyAqLworCQkvKiBNSU5PUl9SRVZbMDo0XSwgTUFKT1JfUkVWWzQ6N10gKi8KKwkJbWFqb3IgPSAo bXZyICYgT01BUF9VQVJUX0xFR0FDWV9NVlJfTUFKX01BU0spID4+CisJCQlPTUFQX1VBUlRfTEVH QUNZX01WUl9NQUpfU0hJRlQ7CisJCW1pbm9yID0gKG12ciAmIE9NQVBfVUFSVF9MRUdBQ1lfTVZS X01JTl9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiBOZXcgU2NoZW1lOiBPTUFQNCsg Ki8KKwkJLyogTUlOT1JfUkVWWzA6NV0sIE1BSk9SX1JFVls4OjEwXSAqLworCQltYWpvciA9ICht dnIgJiBPTUFQX1VBUlRfTVZSX01BSl9NQVNLKSA+PgorCQkJT01BUF9VQVJUX01WUl9NQUpfU0hJ RlQ7CisJCW1pbm9yID0gKG12ciAmIE9NQVBfVUFSVF9NVlJfTUlOX01BU0spOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlkZXZfd2Fybih1cC0+cG9ydC5kZXYsCisJCQkgIlVua25vd24gcmV2aXNp b24sIGRlZmF1bHRpbmcgdG8gaGlnaGVzdFxuIik7CisJCS8qIGhpZ2hlc3QgcG9zc2libGUgcmV2 aXNpb24gKi8KKwkJbWFqb3IgPSAweGZmOworCQltaW5vciA9IDB4ZmY7CisJfQorCS8qIG5vcm1h bGl6ZSByZXZpc2lvbiBmb3IgdGhlIGRyaXZlciAqLworCXJldmlzaW9uID0gVUFSVF9CVUlMRF9S RVZJU0lPTihtYWpvciwgbWlub3IpOworCisJc3dpdGNoIChyZXZpc2lvbikgeworCWNhc2UgT01B UF9VQVJUX1JFVl80NjoKKwkJcHJpdi0+aGFiaXQgPSBVQVJUX0VSUkFUQV9pMjAyX01EUjFfQUND RVNTOworCQlicmVhazsKKwljYXNlIE9NQVBfVUFSVF9SRVZfNTI6CisJCXByaXYtPmhhYml0ID0g VUFSVF9FUlJBVEFfaTIwMl9NRFIxX0FDQ0VTUyB8CisJCQkJT01BUF9VQVJUX1dFUl9IQVNfVFhf V0FLRVVQOworCQlicmVhazsKKwljYXNlIE9NQVBfVUFSVF9SRVZfNjM6CisJCXByaXYtPmhhYml0 ID0gVUFSVF9FUlJBVEFfaTIwMl9NRFIxX0FDQ0VTUyB8CisJCQlPTUFQX1VBUlRfV0VSX0hBU19U WF9XQUtFVVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGlj IHZvaWQgb21hcDgyNTBfdWFydF9xb3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7 CisJc3RydWN0IG9tYXA4MjUwX3ByaXYgKnByaXY7CisKKwlwcml2ID0gY29udGFpbmVyX29mKHdv cmssIHN0cnVjdCBvbWFwODI1MF9wcml2LCBxb3Nfd29yayk7CisJcG1fcW9zX3VwZGF0ZV9yZXF1 ZXN0KCZwcml2LT5wbV9xb3NfcmVxdWVzdCwgcHJpdi0+bGF0ZW5jeSk7Cit9CisKK3N0YXRpYyBp cnFyZXR1cm5fdCBvbWFwX3dha2VfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1 Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOworCWludCByZXQ7CisKKwlyZXQgPSBwb3J0LT5o YW5kbGVfaXJxKHBvcnQpOworCWlmIChyZXQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1 cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgb21hcF84MjUwX3N0YXJ0dXAoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0KKwkJY29udGFp bmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CisJc3RydWN0IG9tYXA4 MjUwX3ByaXYgKnByaXYgPSBwb3J0LT5wcml2YXRlX2RhdGE7CisKKwlpbnQgcmV0OworCisJaWYg KHByaXYtPndha2VpcnEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+d2FrZWlycSwgb21h cF93YWtlX2lycSwKKwkJCQkgIHBvcnQtPmlycWZsYWdzLCAidWFydCB3YWtldXAgaXJxIiwgcG9y dCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlkaXNhYmxlX2lycShwcml2LT53YWtl aXJxKTsKKwl9CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKHBvcnQtPmRldik7CisKKwlyZXQgPSBz ZXJpYWw4MjUwX2RvX3N0YXJ0dXAocG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKyNp ZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCXVwLT5jYXBhYmlsaXRpZXMgfD0gVUFSVF9DQVBfUlBN OworI2VuZGlmCisKKwkvKiBFbmFibGUgbW9kdWxlIGxldmVsIHdha2UgdXAgKi8KKwlwcml2LT53 ZXIgPSBPTUFQX1VBUlRfV0VSX01PRF9XS1VQOworCWlmIChwcml2LT5oYWJpdCAmIE9NQVBfVUFS VF9XRVJfSEFTX1RYX1dBS0VVUCkKKwkJcHJpdi0+d2VyIHw9IE9NQVBfVUFSVF9UWF9XQUtFVVBf RU47CisJc2VyaWFsX291dCh1cCwgVUFSVF9PTUFQX1dFUiwgcHJpdi0+d2VyKTsKKworCXBtX3J1 bnRpbWVfbWFya19sYXN0X2J1c3kocG9ydC0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3Vz cGVuZChwb3J0LT5kZXYpOworCXJldHVybiAwOworZXJyOgorCXBtX3J1bnRpbWVfbWFya19sYXN0 X2J1c3kocG9ydC0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChwb3J0LT5kZXYp OworCWlmIChwcml2LT53YWtlaXJxKQorCQlmcmVlX2lycShwcml2LT53YWtlaXJxLCBwb3J0KTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvbWFwXzgyNTBfc2h1dGRvd24oc3RydWN0 IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0KKwkJY29u dGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CisJc3RydWN0IG9t YXA4MjUwX3ByaXYgKnByaXYgPSBwb3J0LT5wcml2YXRlX2RhdGE7CisKKwlmbHVzaF93b3JrKCZw cml2LT5xb3Nfd29yayk7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKHBvcnQtPmRldik7CisKKwlz ZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfV0VSLCAwKTsKKwlzZXJpYWw4MjUwX2RvX3NodXRkb3du KHBvcnQpOworCisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShwb3J0LT5kZXYpOworCXBtX3J1 bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHBvcnQtPmRldik7CisKKwlpZiAocHJpdi0+d2FrZWlycSkK KwkJZnJlZV9pcnEocHJpdi0+d2FrZWlycSwgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBf ODI1MF90aHJvdHRsZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0 LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOworCisJcG1fcnVudGltZV9nZXRfc3luYyhw b3J0LT5kZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwl1 cC0+aWVyICY9IH4oVUFSVF9JRVJfUkxTSSB8IFVBUlRfSUVSX1JESSk7CisJc2VyaWFsX291dCh1 cCwgVUFSVF9JRVIsIHVwLT5pZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxv Y2ssIGZsYWdzKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3kocG9ydC0+ZGV2KTsKKwlw bV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChwb3J0LT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBv bWFwXzgyNTBfdW50aHJvdHRsZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9v Zihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOworCisJcG1fcnVudGltZV9nZXRf c3luYyhwb3J0LT5kZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdz KTsKKwl1cC0+aWVyIHw9IFVBUlRfSUVSX1JMU0kgfCBVQVJUX0lFUl9SREk7CisJc2VyaWFsX291 dCh1cCwgVUFSVF9JRVIsIHVwLT5pZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQt PmxvY2ssIGZsYWdzKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3kocG9ydC0+ZGV2KTsK KwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChwb3J0LT5kZXYpOworfQorCitzdGF0aWMgaW50 IG9tYXA4MjUwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IHJlc291cmNlICpyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw ZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJc3RydWN0IG9tYXA4MjUwX3ByaXYgKnByaXY7CisJ c3RydWN0IHVhcnRfODI1MF9wb3J0IHVwOworCWludCByZXQ7CisJdm9pZCBfX2lvbWVtICptZW1i YXNlOworCisJaWYgKCFyZWdzIHx8ICFpcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlz c2luZyByZWdpc3RlcnMgb3IgaXJxXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJp diA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtYmFzZSA9IGRldm1faW9yZW1h cF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlZ3MtPnN0YXJ0LAorCQkJCSAgICAgICByZXNvdXJjZV9z aXplKHJlZ3MpKTsKKwlpZiAoIW1lbWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJbWVtc2V0 KCZ1cCwgMCwgc2l6ZW9mKHVwKSk7CisJdXAucG9ydC5kZXYgPSAmcGRldi0+ZGV2OworCXVwLnBv cnQubWFwYmFzZSA9IHJlZ3MtPnN0YXJ0OworCXVwLnBvcnQubWVtYmFzZSA9IG1lbWJhc2U7CisJ dXAucG9ydC5pcnEgPSBpcnEtPnN0YXJ0OworCS8qCisJICogSXQgY2xhaW1zIHRvIGJlIDE2Qzc1 MCBjb21wYXRpYmxlIGhvd2V2ZXIgaXQgaXMgYSBsaXR0bGUgZGlmZmVyZW50LgorCSAqIEl0IGhh cyBFRlIgYW5kIGhhcyBubyBGQ1I3XzY0Ynl0ZSBiaXQuIFRoZSBBRkUgKHdoaWNoIGl0IGNsYWlt cyB0bworCSAqIGhhdmUpIGlzIGVuYWJsZWQgdmlhIEVGUiBpbnN0ZWFkIG9mIE1DUi4gVGhlIHR5 cGUgaXMgc2V0IGhlcmUgODI1MAorCSAqIGp1c3QgdG8gZ2V0IHRoaW5ncyBnb2luZy4gVU5LTk9X TiBkb2VzIG5vdCB3b3JrIGZvciBhIGZldyByZWFzb25zIGFuZAorCSAqIHdlIGRvbid0IG5lZWQg b3VyIG93biB0eXBlIHNpbmNlIHdlIGRvbid0IHVzZSA4MjUwJ3Mgc2V0X3Rlcm1pb3MoKQorCSAq IG9yIHBtIGNhbGxiYWNrLgorCSAqLworCXVwLnBvcnQudHlwZSA9IFBPUlRfODI1MDsKKwl1cC5w b3J0LmlvdHlwZSA9IFVQSU9fTUVNOworCXVwLnBvcnQuZmxhZ3MgPSBVUEZfRklYRURfUE9SVCB8 IFVQRl9GSVhFRF9UWVBFIHwgVVBGX1NPRlRfRkxPVyB8CisJCVVQRl9IQVJEX0ZMT1c7CisJdXAu cG9ydC5wcml2YXRlX2RhdGEgPSBwcml2OworCisJdXAucG9ydC5yZWdzaGlmdCA9IDI7CisJdXAu cG9ydC5maWZvc2l6ZSA9IDY0OworCXVwLnR4X2xvYWRzeiA9IDY0OworCXVwLmNhcGFiaWxpdGll cyA9IFVBUlRfQ0FQX0ZJRk87CisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKwkvKgorCSAqIFBN X1JVTlRJTUUgaXMgbW9zdGx5IHRyYW5zcGFyZW50LiBIb3dldmVyIHRvIGRvIGl0IHJpZ2h0IHdl IG5lZWQgdG8gYQorCSAqIFRYIGVtcHR5IGludGVycnVwdCBiZWZvcmUgd2UgY2FuIHB1dCB0aGUg ZGV2aWNlIHRvIGF1dG8gaWRsZS4gU28gaWYKKwkgKiBQTV9SVU5USU1FIGlzIG5vdCBlbmFibGVk IHdlIGRvbid0IGFkZCB0aGF0IGZsYWcgYW5kIGNhbiBzcGFyZSB0aGF0CisJICogb25lIGV4dHJh IGludGVycnVwdCBpbiB0aGUgVFggcGF0aC4KKwkgKi8KKwl1cC5jYXBhYmlsaXRpZXMgfD0gVUFS VF9DQVBfUlBNOworI2VuZGlmCisJdXAucG9ydC5zZXRfdGVybWlvcyA9IG9tYXBfODI1MF9zZXRf dGVybWlvczsKKwl1cC5wb3J0LnBtID0gb21hcF84MjUwX3BtOworCXVwLnBvcnQuc3RhcnR1cCA9 IG9tYXBfODI1MF9zdGFydHVwOworCXVwLnBvcnQuc2h1dGRvd24gPSBvbWFwXzgyNTBfc2h1dGRv d247CisJdXAucG9ydC50aHJvdHRsZSA9IG9tYXBfODI1MF90aHJvdHRsZTsKKwl1cC5wb3J0LnVu dGhyb3R0bGUgPSBvbWFwXzgyNTBfdW50aHJvdHRsZTsKKworCWlmIChwZGV2LT5kZXYub2Zfbm9k ZSkgeworCQl1cC5wb3J0LmxpbmUgPSBvZl9hbGlhc19nZXRfaWQocGRldi0+ZGV2Lm9mX25vZGUs ICJzZXJpYWwiKTsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsICJj bG9jay1mcmVxdWVuY3kiLAorCQkJCSAgICAgJnVwLnBvcnQudWFydGNsayk7CisJCXByaXYtPndh a2VpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMSk7CisJfSBl bHNlIHsKKwkJdXAucG9ydC5saW5lID0gcGRldi0+aWQ7CisJfQorCisJaWYgKHVwLnBvcnQubGlu ZSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBhbGlhcy9wZGV2 IGlkLCBlcnJubyAlZFxuIiwKKwkJCXVwLnBvcnQubGluZSk7CisJCXJldHVybiAtRU5PREVWOwor CX0KKwlpZiAoIXVwLnBvcnQudWFydGNsaykgeworCQl1cC5wb3J0LnVhcnRjbGsgPSBERUZBVUxU X0NMS19TUEVFRDsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCSAiTm8gY2xvY2sgc3BlZWQg c3BlY2lmaWVkOiB1c2luZyBkZWZhdWx0OiAlZFxuIiwKKwkJCSBERUZBVUxUX0NMS19TUEVFRCk7 CisJfQorCisJcHJpdi0+bGF0ZW5jeSA9IFBNX1FPU19DUFVfRE1BX0xBVF9ERUZBVUxUX1ZBTFVF OworCXByaXYtPmNhbGNfbGF0ZW5jeSA9IFBNX1FPU19DUFVfRE1BX0xBVF9ERUZBVUxUX1ZBTFVF OworCXBtX3Fvc19hZGRfcmVxdWVzdCgmcHJpdi0+cG1fcW9zX3JlcXVlc3QsIFBNX1FPU19DUFVf RE1BX0xBVEVOQ1ksCisJCQkgICBwcml2LT5sYXRlbmN5KTsKKwlJTklUX1dPUksoJnByaXYtPnFv c193b3JrLCBvbWFwODI1MF91YXJ0X3Fvc193b3JrKTsKKworCWRldmljZV9pbml0X3dha2V1cCgm cGRldi0+ZGV2LCB0cnVlKTsKKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2 KTsKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGRldi0+ZGV2LCAtMSk7CisK KwlwbV9ydW50aW1lX2lycV9zYWZlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZw ZGV2LT5kZXYpOworCisJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKKworCW9tYXBf c2VyaWFsX2ZpbGxfZmVhdHVyZXNfZXJyYXRhcygmdXAsIHByaXYpOworCXJldCA9IHNlcmlhbDgy NTBfcmVnaXN0ZXJfODI1MF9wb3J0KCZ1cCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigm cGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIDgyNTAgcG9ydFxuIik7CisJCWdvdG8gZXJy OworCX0KKwlwcml2LT5saW5lID0gcmV0OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBy aXYpOworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJnBkZXYtPmRldik7CisJcG1fcnVudGlt ZV9wdXRfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7CisJcmV0dXJuIDA7CitlcnI6CisJcG1fcnVu dGltZV9wdXQoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb21hcDgyNTBfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXA4MjUwX3ByaXYgKnByaXYgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRl dik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXNlcmlhbDgyNTBfdW5yZWdp c3Rlcl9wb3J0KHByaXYtPmxpbmUpOworCXBtX3Fvc19yZW1vdmVfcmVxdWVzdCgmcHJpdi0+cG1f cW9zX3JlcXVlc3QpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCBmYWxzZSk7CisJ cmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgfHwgZGVmaW5lZChD T05GSUdfUE1fUlVOVElNRSkKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXA4MjUwX2VuYWJsZV93 YWtlaXJxKHN0cnVjdCBvbWFwODI1MF9wcml2ICpwcml2LAorCQkJCQkgICBib29sIGVuYWJsZSkK K3sKKwlpZiAoIXByaXYtPndha2VpcnEpCisJCXJldHVybjsKKworCWlmIChlbmFibGUpCisJCWVu YWJsZV9pcnEocHJpdi0+d2FrZWlycSk7CisJZWxzZQorCQlkaXNhYmxlX2lycV9ub3N5bmMocHJp di0+d2FrZWlycSk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXA4MjUwX2VuYWJsZV93YWtldXAoc3Ry dWN0IG9tYXA4MjUwX3ByaXYgKnByaXYsCisJCQkJICAgYm9vbCBlbmFibGUpCit7CisJaWYgKGVu YWJsZSA9PSBwcml2LT53YWtldXBzX2VuYWJsZWQpCisJCXJldHVybjsKKworCW9tYXA4MjUwX2Vu YWJsZV93YWtlaXJxKHByaXYsIGVuYWJsZSk7CisJcHJpdi0+d2FrZXVwc19lbmFibGVkID0gZW5h YmxlOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgb21h cDgyNTBfcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9tYXA4MjUwX3By aXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghcHJpdikKKwkJcmV0dXJu IDA7CisJcHJpdi0+aXNfc3VzcGVuZGluZyA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIG9tYXA4MjUwX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg b21hcDgyNTBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFwcml2 KQorCQlyZXR1cm47CisJcHJpdi0+aXNfc3VzcGVuZGluZyA9IGZhbHNlOworfQorCitzdGF0aWMg aW50IG9tYXA4MjUwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBvbWFw ODI1MF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzZXJpYWw4MjUwX3N1 c3BlbmRfcG9ydChwcml2LT5saW5lKTsKKwlmbHVzaF93b3JrKCZwcml2LT5xb3Nfd29yayk7CisK KwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJb21hcDgyNTBfZW5hYmxlX3dha2V1cChw cml2LCB0cnVlKTsKKwllbHNlCisJCW9tYXA4MjUwX2VuYWJsZV93YWtldXAocHJpdiwgZmFsc2Up OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXA4MjUwX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IG9tYXA4MjUwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQlvbWFwODI1MF9lbmFi bGVfd2FrZXVwKHByaXYsIGZhbHNlKTsKKworCXNlcmlhbDgyNTBfcmVzdW1lX3BvcnQocHJpdi0+ bGluZSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwODI1MF9wcmVwYXJlIE5V TEwKKyNkZWZpbmUgb21hcDgyNTBfY29tcGxldGUgTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05G SUdfUE1fUlVOVElNRQorc3RhdGljIGludCBvbWFwODI1MF9sb3N0X2NvbnRleHQoc3RydWN0IHVh cnRfODI1MF9wb3J0ICp1cCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gc2VyaWFsX2luKHVwLCBV QVJUX09NQVBfTURSMSk7CisJLyoKKwkgKiBJZiB3ZSBsb3NlIGNvbnRleHQsIHRoZW4gTURSMSBp cyBzZXQgdG8gaXRzIHJlc2V0IHZhbHVlIHdoaWNoIGlzCisJICogVUFSVF9PTUFQX01EUjFfRElT QUJMRS4gQWZ0ZXIgc2V0X3Rlcm1pb3MoKSB3ZSBzZXQgaXQgZWl0aGVyIHRvIDEzeAorCSAqIG9y IDE2eCBidXQgbmV2ZXIgdG8gZGlzYWJsZSBhZ2Fpbi4KKwkgKi8KKwlpZiAodmFsID09IFVBUlRf T01BUF9NRFIxX0RJU0FCTEUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG9tYXA4MjUwX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IG9tYXA4MjUwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qg dWFydF84MjUwX3BvcnQgKnVwOworCisJdXAgPSBzZXJpYWw4MjUwX2dldF9wb3J0KHByaXYtPmxp bmUpOworCS8qCisJICogV2hlbiB1c2luZyAnbm9fY29uc29sZV9zdXNwZW5kJywgdGhlIGNvbnNv bGUgVUFSVCBtdXN0IG5vdCBiZQorCSAqIHN1c3BlbmRlZC4gU2luY2UgZHJpdmVyIHN1c3BlbmQg aXMgbWFuYWdlZCBieSBydW50aW1lIHN1c3BlbmQsCisJICogcHJldmVudGluZyBydW50aW1lIHN1 c3BlbmQgKGJ5IHJldHVybmluZyBlcnJvcikgd2lsbCBrZWVwIGRldmljZQorCSAqIGFjdGl2ZSBk dXJpbmcgc3VzcGVuZC4KKwkgKi8KKwlpZiAocHJpdi0+aXNfc3VzcGVuZGluZyAmJiAhY29uc29s ZV9zdXNwZW5kX2VuYWJsZWQpIHsKKwkJaWYgKHVhcnRfY29uc29sZSgmdXAtPnBvcnQpKQorCQkJ cmV0dXJuIC1FQlVTWTsKKwl9CisKKwlvbWFwODI1MF9lbmFibGVfd2FrZXVwKHByaXYsIHRydWUp OworCisJcHJpdi0+bGF0ZW5jeSA9IFBNX1FPU19DUFVfRE1BX0xBVF9ERUZBVUxUX1ZBTFVFOwor CXNjaGVkdWxlX3dvcmsoJnByaXYtPnFvc193b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IG9tYXA4MjUwX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3Qgb21hcDgyNTBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVj dCB1YXJ0XzgyNTBfcG9ydCAqdXA7CisJaW50IGxvc3NfY250eDsKKworCS8qIEluIGNhc2UgcnVu dGltZS1wbSB0cmllcyB0aGlzIGJlZm9yZSB3ZSBhcmUgc2V0dXAgKi8KKwlpZiAoIXByaXYpCisJ CXJldHVybiAwOworCisJdXAgPSBzZXJpYWw4MjUwX2dldF9wb3J0KHByaXYtPmxpbmUpOworCW9t YXA4MjUwX2VuYWJsZV93YWtldXAocHJpdiwgZmFsc2UpOworCWxvc3NfY250eCA9IG9tYXA4MjUw X2xvc3RfY29udGV4dCh1cCk7CisKKwlpZiAobG9zc19jbnR4KQorCQlvbWFwODI1MF9yZXN0b3Jl X3JlZ3ModXApOworCisJcHJpdi0+bGF0ZW5jeSA9IHByaXYtPmNhbGNfbGF0ZW5jeTsKKwlzY2hl ZHVsZV93b3JrKCZwcml2LT5xb3Nfd29yayk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG9tYXA4MjUwX2Rldl9wbV9vcHMgPSB7CisJU0VU X1NZU1RFTV9TTEVFUF9QTV9PUFMob21hcDgyNTBfc3VzcGVuZCwgb21hcDgyNTBfcmVzdW1lKQor CVNFVF9SVU5USU1FX1BNX09QUyhvbWFwODI1MF9ydW50aW1lX3N1c3BlbmQsCisJCQkgICBvbWFw ODI1MF9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKKwkucHJlcGFyZSAgICAgICAgPSBvbWFwODI1MF9w cmVwYXJlLAorCS5jb21wbGV0ZSAgICAgICA9IG9tYXA4MjUwX2NvbXBsZXRlLAorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb21hcDgyNTBfZHRfaWRzW10gPSB7CisJeyAu Y29tcGF0aWJsZSA9ICJ0aSxvbWFwMi11YXJ0IiB9LAorCXsgLmNvbXBhdGlibGUgPSAidGksb21h cDMtdWFydCIgfSwKKwl7IC5jb21wYXRpYmxlID0gInRpLG9tYXA0LXVhcnQiIH0sCisJe30sCit9 OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb21hcDgyNTBfZHRfaWRzKTsKKworc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDgyNTBfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2 ZXIgPSB7CisJCS5uYW1lCQk9ICJvbWFwODI1MCIsCisJCS5wbQkJPSAmb21hcDgyNTBfZGV2X3Bt X29wcywKKwkJLm9mX21hdGNoX3RhYmxlID0gb21hcDgyNTBfZHRfaWRzLAorCQkub3duZXIJCT0g VEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCQk9IG9tYXA4MjUwX3Byb2JlLAorCS5yZW1vdmUJ CQk9IG9tYXA4MjUwX3JlbW92ZSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG9tYXA4MjUw X3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlNlYmFzdGlhbiBBbmRyemVqIFNp ZXdpb3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigiT01BUCA4MjUwIERyaXZlciIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAv S2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwL0tjb25maWcKaW5kZXggMjFlY2E3OTIy NGU0Li41ZDNkNjVjMDczM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwL0tj b25maWcKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvS2NvbmZpZwpAQCAtMjk5LDYgKzI5 OSwxNSBAQCBjb25maWcgU0VSSUFMXzgyNTBfUlQyODhYCiAJICBzZXJpYWwgcG9ydCwgc2F5IFkg dG8gdGhpcyBvcHRpb24uIFRoZSBkcml2ZXIgY2FuIGhhbmRsZSB1cCB0byAyIHNlcmlhbAogCSAg cG9ydHMuIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBTRVJJQUxfODI1MF9PTUFQCisJdHJp c3RhdGUgIlN1cHBvcnQgZm9yIE9NQVAgaW50ZXJuYWwgVUFSVCAoODI1MCBiYXNlZCBkcml2ZXIp IgorCWRlcGVuZHMgb24gU0VSSUFMXzgyNTAgJiYgQVJDSF9PTUFQMlBMVVMKKwloZWxwCisJICBJ ZiB5b3UgaGF2ZSBhIG1hY2hpbmUgYmFzZWQgb24gYW4gVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBD UFUgeW91CisJICBjYW4gZW5hYmxlIGl0cyBvbmJvYXJkIHNlcmlhbCBwb3J0cyBieSBlbmFibGlu ZyB0aGlzIG9wdGlvbi4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0dHlTIGluc3RlYWQgb2YgdHR5 Ty4KKwogY29uZmlnIFNFUklBTF84MjUwX0ZJTlRFSwogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBG aW50ZWsgRjgxMjE2QSBMUEMgdG8gNCBVQVJUIgogCWRlcGVuZHMgb24gU0VSSUFMXzgyNTAgJiYg UE5QCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC9NYWtlZmlsZSBiL2RyaXZl cnMvdHR5L3NlcmlhbC84MjUwL01ha2VmaWxlCmluZGV4IDUyNTZiODk0ZTQ2YS4uMzFlN2NkYzY4 NjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC9NYWtlZmlsZQorKysgYi9k cml2ZXJzL3R0eS9zZXJpYWwvODI1MC9NYWtlZmlsZQpAQCAtMjAsNSArMjAsNiBAQCBvYmotJChD T05GSUdfU0VSSUFMXzgyNTBfSFVCNikJCSs9IDgyNTBfaHViNi5vCiBvYmotJChDT05GSUdfU0VS SUFMXzgyNTBfRlNMKQkJKz0gODI1MF9mc2wubwogb2JqLSQoQ09ORklHX1NFUklBTF84MjUwX0RX KQkJKz0gODI1MF9kdy5vCiBvYmotJChDT05GSUdfU0VSSUFMXzgyNTBfRU0pCQkrPSA4MjUwX2Vt Lm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MF9PTUFQKQkJKz0gODI1MF9vbWFwLm8KIG9iai0k KENPTkZJR19TRVJJQUxfODI1MF9GSU5URUspCSs9IDgyNTBfZmludGVrLm8KIG9iai0kKENPTkZJ R19TRVJJQUxfODI1MF9NVDY1NzcpCSs9IDgyNTBfbXRrLm8KLS0gCjIuMS4wCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBt YWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=