From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/2] dma: xilinx: Add driver for Video Framebuffer IP From: Vishal Sagar Message-Id: <1513758618-85689-3-git-send-email-vsagar@xilinx.com> Date: Wed, 20 Dec 2017 14:00:18 +0530 To: dmaengine@vger.kernel.org Cc: dineshk@xilinx.com, michal.simek@xilinx.com, jmouroux@xilinx.com, radheys@xilinx.com, hyunk@xilinx.com, mpenner@xilinx.com, Vishal Sagar , John Nichols , Hyun Kwon List-ID: VGhlIFZpZGVvIEZyYW1lYnVmZmVyIElQIGlzIGF2YWlsYWJsZSBpbiB0d28gZm9ybXM6IHJlYWQg b3Igd3JpdGUuClRoaXMgZHJpdmVyIHN1cHBvcnRzIGVpdGhlciBmb3JtIG9mIHRoZSBJUC4KRWFj aCBJUCBpcyBhIHNpbmdsZSBjaGFubmVsIERNQSBhbmQgaXMgdmlkZW8gZm9ybWF0IGF3YXJlLgpJ dCBjYW4gcmVhZC93cml0ZSB2aWRlbyBkYXRhIGFycmFuZ2VkIGZyb20vdG8gbWVtb3J5IGFzIHBh Y2tlZCBvcgpzZW1pLXBsYW5hciB3YXkgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHZpZGVvIGZvcm1h dC4KVG8gZ2V0IGxpc3Qgb2Ygc3VwcG9ydGVkIHZpZGVvIGZvcm1hdHMsIGNsaWVudHMgY2FuIGNh bGwgY2VydGFpbgpBUElzIGV4cG9zZWQgYnkgdGhlIGRyaXZlci4gVGhpcyBkcml2ZXIgaW50cm9k dWNlcyBzdXBwb3J0IGZvcgp0aGVzZSBJUHMgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgRE1BIEVu Z2luZSBGcmFtZXdvcmsuCgpTaWduZWQtb2ZmLWJ5OiBSYWRoZXkgU2h5YW0gUGFuZGV5IDxyYWRo ZXlzQHhpbGlueC5jb20+ClNpZ25lZC1vZmYtYnk6IEpvaG4gTmljaG9scyA8am5pY2hvbEB4aWxp bnguY29tPgpTaWduZWQtb2ZmLWJ5OiBKZWZmcmV5IE1vdXJvdXggPGptb3Vyb3V4QHhpbGlueC5j b20+ClNpZ25lZC1vZmYtYnk6IE1pY2hhbCBTaW1layA8bWljaGFsLnNpbWVrQHhpbGlueC5jb20+ ClNpZ25lZC1vZmYtYnk6IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+ClNpZ25lZC1v ZmYtYnk6IFZpc2hhbCBTYWdhciA8dnNhZ2FyQHhpbGlueC5jb20+Ci0tLQogZHJpdmVycy9kbWEv S2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgMTQgKy0KIGRyaXZlcnMvZG1hL3hpbGlueC9NYWtl ZmlsZSAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZG1hL3hpbGlueC94aWxpbnhfZnJtYnVmLmMg fCAxMTU1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51 eC9kbWEveGlsaW54X2ZybWJ1Zi5oICB8ICAgOTcgKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEyNjYg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv ZG1hL3hpbGlueC94aWxpbnhfZnJtYnVmLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xp bnV4L2RtYS94aWxpbnhfZnJtYnVmLmgKCi0tCjEuOS4xCgotLQpUbyB1bnN1YnNjcmliZSBmcm9t IHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgZG1hZW5naW5lIiBpbgp0aGUg Ym9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9y ZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpp bmRleCAyN2RmM2UyLi5kZGVjMDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisr KyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTM0Miw3ICszNDIsNyBAQCBjb25maWcgTU9YQVJU X0RNQQogCXNlbGVjdCBETUFfVklSVFVBTF9DSEFOTkVMUwogCWhlbHAKIAkgIEVuYWJsZSBzdXBw b3J0IGZvciB0aGUgTU9YQSBBUlQgU29DIERNQSBjb250cm9sbGVyLgotCisKIAkgIFNheSBZIGhl cmUgaWYgeW91IGVuYWJsZWQgTU1QIEFETUEsIG90aGVyd2lzZSBzYXkgTi4KCiBjb25maWcgTVBD NTEyWF9ETUEKQEAgLTYxNCw2ICs2MTQsMTggQEAgY29uZmlnIFhJTElOWF9ETUEKIAkgIEFYSSBE TUEgZW5naW5lIHByb3ZpZGVzIGhpZ2gtYmFuZHdpZHRoIG9uZSBkaW1lbnNpb25hbCBkaXJlY3QK IAkgIG1lbW9yeSBhY2Nlc3MgYmV0d2VlbiBtZW1vcnkgYW5kIEFYSTQtU3RyZWFtIHRhcmdldCBw ZXJpcGhlcmFscy4KCitjb25maWcgWElMSU5YX0ZSTUJVRgorCXRyaXN0YXRlICJYaWxpbnggRnJh bWVidWZmZXIiCisJc2VsZWN0IERNQV9FTkdJTkUKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBm b3IgWGlsaW54IFZpZGVvIEZyYW1lYnVmZmVyIChSZWFkL1dyaXRlKSBJUCBETUEuCisKKwkgIFRo aXMgZHJpdmVyIGNvbnRyb2xzIHRoZSBYaWxpbnggVmlkZW8gRnJhbWVidWZmZXIgUmVhZCBhbmQK KwkgIFZpZGVvIEZyYW1lYnVmZmVyIFdyaXRlIElQLiBUaGV5IGFyZSBzaW5nbGUgY2hhbm5lbCBE TUEgZW5naW5lcworCSAgd2hpY2ggc3VwcG9ydCByZWFkaW5nIGFuZCB3cml0aW5nIGEgdmFyaWV0 eSBvZiB2aWRlbyBmb3JtYXRzCisJICAoUkdCLCBZVVYgNDo0OjQsIFlVViA0OjI6MiwgWVVWIDQ6 MjowLCBhbmQgTHVtYSBvbmx5KS4gVGhlIGRhdGEKKwkgIGlzIHBhY2tlZC91bnBhY2tlZCBiYXNl ZCBvbiB0aGUgdmlkZW8gZm9ybWF0LgorCiBjb25maWcgWElMSU5YX1pZTlFNUF9ETUEKIAl0cmlz dGF0ZSAiWGlsaW54IFp5bnFNUCBETUEgRW5naW5lIgogCWRlcGVuZHMgb24gKEFSQ0hfWllOUSB8 fCBNSUNST0JMQVpFIHx8IEFSTTY0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEveGlsaW54L01h a2VmaWxlIGIvZHJpdmVycy9kbWEveGlsaW54L01ha2VmaWxlCmluZGV4IDllOTFmOGYuLmE4MzAw ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3hpbGlueC9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2RtYS94aWxpbngvTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmotJChDT05GSUdfWElMSU5Y X0RNQSkgKz0geGlsaW54X2RtYS5vCitvYmotJChDT05GSUdfWElMSU5YX0ZSTUJVRikgKz0geGls aW54X2ZybWJ1Zi5vCiBvYmotJChDT05GSUdfWElMSU5YX1pZTlFNUF9ETUEpICs9IHp5bnFtcF9k bWEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEveGlsaW54L3hpbGlueF9mcm1idWYuYyBiL2Ry aXZlcnMvZG1hL3hpbGlueC94aWxpbnhfZnJtYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNGVlMmUxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL3hpbGlu eC94aWxpbnhfZnJtYnVmLmMKQEAgLTAsMCArMSwxMTU1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMAorLyoKKyAqIERNQUVuZ2luZSBkcml2ZXIgZm9yIFhpbGlueCBGcmFt ZWJ1ZmZlciBJUAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiAtIDIwMTcgWGlsaW54LCBJbmMu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczogUmFkaGV5IFNoeWFtIFBhbmRl eSA8cmFkaGV5c0B4aWxpbnguY29tPgorICogICAgICAgICAgSm9obiBOaWNob2xzIDxqbmljaG9s QHhpbGlueC5jb20+CisgKiAgICAgICAgICBKZWZmcmV5IE1vdXJvdXggPGptb3Vyb3V4QHhpbGlu eC5jb20+CisgKgorICogQmFzZWQgb24gdGhlIEZyZWVzY2FsZSBETUEgZHJpdmVyLgorICoKKyAq IERlc2NyaXB0aW9uOgorICogVGhlIEFYSSBGcmFtZWJ1ZmZlciBjb3JlIGlzIGEgc29mdCBYaWxp bnggSVAgY29yZSB0aGF0CisgKiBwcm92aWRlcyBoaWdoLWJhbmR3aWR0aCBkaXJlY3QgbWVtb3J5 IGFjY2VzcyBiZXR3ZWVuIG1lbW9yeQorICogYW5kIEFYSTQtU3RyZWFtLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RtYS94aWxpbnhfZnJtYnVmLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9v bC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8u aD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+ CisKKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorCisjaW5jbHVkZSAiLi4vZG1hZW5naW5l LmgiCisKKy8qIFJlZ2lzdGVyL0Rlc2NyaXB0b3IgT2Zmc2V0cyAqLworI2RlZmluZSBYSUxJTlhf RlJNQlVGX0NUUkxfT0ZGU0VUCQkweDAwCisjZGVmaW5lIFhJTElOWF9GUk1CVUZfR0lFX09GRlNF VAkJMHgwNAorI2RlZmluZSBYSUxJTlhfRlJNQlVGX0lFX09GRlNFVAkJCTB4MDgKKyNkZWZpbmUg WElMSU5YX0ZSTUJVRl9JU1JfT0ZGU0VUCQkweDBjCisjZGVmaW5lIFhJTElOWF9GUk1CVUZfV0lE VEhfT0ZGU0VUCQkweDEwCisjZGVmaW5lIFhJTElOWF9GUk1CVUZfSEVJR0hUX09GRlNFVAkJMHgx OAorI2RlZmluZSBYSUxJTlhfRlJNQlVGX1NUUklERV9PRkZTRVQJCTB4MjAKKyNkZWZpbmUgWElM SU5YX0ZSTUJVRl9GTVRfT0ZGU0VUCQkweDI4CisjZGVmaW5lIFhJTElOWF9GUk1CVUZfQUREUl9P RkZTRVQJCTB4MzAKKyNkZWZpbmUgWElMSU5YX0ZSTUJVRl9BRERSMl9PRkZTRVQJCTB4M2MKKwor LyogQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgWElMSU5YX0ZSTUJVRl9DVFJMX0FQX1NU QVJUCQlCSVQoMCkKKyNkZWZpbmUgWElMSU5YX0ZSTUJVRl9DVFJMX0FQX0RPTkUJCUJJVCgxKQor I2RlZmluZSBYSUxJTlhfRlJNQlVGX0NUUkxfQVBfSURMRQkJQklUKDIpCisjZGVmaW5lIFhJTElO WF9GUk1CVUZfQ1RSTF9BUF9SRUFEWQkJQklUKDMpCisjZGVmaW5lIFhJTElOWF9GUk1CVUZfQ1RS TF9BVVRPX1JFU1RBUlQJCUJJVCg3KQorI2RlZmluZSBYSUxJTlhfRlJNQlVGX0dJRV9FTgkJCUJJ VCgwKQorCisvKiBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sICovCisjZGVmaW5lIFhJTElO WF9GUk1CVUZfSUVfQVBfRE9ORQkJQklUKDApCisjZGVmaW5lIFhJTElOWF9GUk1CVUZfSUVfQVBf UkVBRFkJCUJJVCgxKQorCisjZGVmaW5lIFhJTElOWF9GUk1CVUZfSVNSX0FQX0RPTkVfSVJRCQlC SVQoMCkKKyNkZWZpbmUgWElMSU5YX0ZSTUJVRl9JU1JfQVBfUkVBRFlfSVJRCQlCSVQoMSkKKwor I2RlZmluZSBYSUxJTlhfRlJNQlVGX0lTUl9BTExfSVJRX01BU0sJXAorCQkoWElMSU5YX0ZSTUJV Rl9JU1JfQVBfRE9ORV9JUlEgfCBcCisJCVhJTElOWF9GUk1CVUZfSVNSX0FQX1JFQURZX0lSUSkK KworLyogVmlkZW8gRm9ybWF0IFJlZ2lzdGVyIFNldHRpbmdzICovCisjZGVmaW5lIFhJTElOWF9G Uk1CVUZfRk1UX1JHQlg4CQkJMTAKKyNkZWZpbmUgWElMSU5YX0ZSTUJVRl9GTVRfWVVWWDgJCQkx MQorI2RlZmluZSBYSUxJTlhfRlJNQlVGX0ZNVF9ZVVlWOAkJCTEyCisjZGVmaW5lIFhJTElOWF9G Uk1CVUZfRk1UX1lfVVY4CQkJMTgKKyNkZWZpbmUgWElMSU5YX0ZSTUJVRl9GTVRfWV9VVjhfNDIw CQkxOQorI2RlZmluZSBYSUxJTlhfRlJNQlVGX0ZNVF9SR0I4CQkJMjAKKyNkZWZpbmUgWElMSU5Y X0ZSTUJVRl9GTVRfWVVWOAkJCTIxCisjZGVmaW5lIFhJTElOWF9GUk1CVUZfRk1UX1k4CQkJMjQK KworLyoqCisgKiBzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXNjX2h3IC0gSGFyZHdhcmUgRGVzY3Jp cHRvcgorICogQGx1bWFfcGxhbmVfYWRkcjogTHVtYSBvciBwYWNrZWQgcGxhbmUgYnVmZmVyIGFk ZHJlc3MKKyAqIEBjaHJvbWFfcGxhbmVfYWRkcjogQ2hyb21hIHBsYW5lIGJ1ZmZlciBhZGRyZXNz CisgKiBAdnNpemU6IFZlcnRpY2FsIFNpemUKKyAqIEBoc2l6ZTogSG9yaXpvbnRhbCBTaXplCisg KiBAc3RyaWRlOiBOdW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiB0aGUgZmlyc3QKKyAqCSAgICBwaXhl bHMgb2YgZWFjaCBob3Jpem9udGFsIGxpbmUKKyAqLworc3RydWN0IHhpbGlueF9mcm1idWZfZGVz Y19odyB7CisJZG1hX2FkZHJfdCBsdW1hX3BsYW5lX2FkZHI7CisJZG1hX2FkZHJfdCBjaHJvbWFf cGxhbmVfYWRkcjsKKwl1MzIgdnNpemU7CisJdTMyIGhzaXplOworCXUzMiBzdHJpZGU7Cit9Owor CisvKioKKyAqIHN0cnVjdCB4aWxpbnhfZnJtYnVmX3R4X2Rlc2NyaXB0b3IgLSBQZXIgVHJhbnNh Y3Rpb24gc3RydWN0dXJlCisgKiBAYXN5bmNfdHg6IEFzeW5jIHRyYW5zYWN0aW9uIGRlc2NyaXB0 b3IKKyAqIEBodzogSGFyZHdhcmUgZGVzY3JpcHRvcgorICogQG5vZGU6IE5vZGUgaW4gdGhlIGNo YW5uZWwgZGVzY3JpcHRvcnMgbGlzdAorICovCitzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl90eF9kZXNj cmlwdG9yIHsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7CisJc3Ry dWN0IHhpbGlueF9mcm1idWZfZGVzY19odyBodzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9 OworCisvKioKKyAqIHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gLSBEcml2ZXIgc3BlY2lmaWMg ZG1hIGNoYW5uZWwgc3RydWN0dXJlCisgKiBAeGRldjogRHJpdmVyIHNwZWNpZmljIGRldmljZSBz dHJ1Y3R1cmUKKyAqIEBsb2NrOiBEZXNjcmlwdG9yIG9wZXJhdGlvbiBsb2NrCisgKiBAY2hhbl9u b2RlOiBNZW1iZXIgb2YgYSBsaXN0IG9mIGZyYW1lYnVmZmVyIGNoYW5uZWwgaW5zdGFuY2VzCisg KiBAcGVuZGluZ19saXN0OiBEZXNjcmlwdG9ycyB3YWl0aW5nCisgKiBAZG9uZV9saXN0OiBDb21w bGV0ZSBkZXNjcmlwdG9ycworICogQHN0YWdlZF9kZXNjOiBOZXh0IGJ1ZmZlciB0byBiZSBwcm9n cmFtbWVkCisgKiBAYWN0aXZlX2Rlc2M6IEN1cnJlbnRseSBhY3RpdmUgYnVmZmVyIGJlaW5nIHJl YWQvd3JpdHRlbiB0bworICogQGNvbW1vbjogRE1BIGNvbW1vbiBjaGFubmVsCisgKiBAZGV2OiBU aGUgZG1hIGRldmljZQorICogQHdyaXRlX2FkZHI6IGNhbGxiYWNrIHRoYXQgd2lsbCB3cml0ZSBk bWEgYWRkcmVzc2VzIHRvIElQICgzMiBvciA2NCBiaXQpCisgKiBAaXJxOiBDaGFubmVsIElSUQor ICogQGRpcmVjdGlvbjogVHJhbnNmZXIgZGlyZWN0aW9uCisgKiBAaWRsZTogQ2hhbm5lbCBpZGxl IHN0YXRlCisgKiBAdGFza2xldDogQ2xlYW51cCB3b3JrIGFmdGVyIGlycQorICogQHZpZF9mbXQ6 IFJlZmVyZW5jZSB0byBjdXJyZW50bHkgYXNzaWduZWQgdmlkZW8gZm9ybWF0IGRlc2NyaXB0aW9u CisgKi8KK3N0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4geworCXN0cnVjdCB4aWxpbnhfZnJtYnVm X2RldmljZSAqeGRldjsKKwkvKiBEZXNjcmlwdG9yIG9wZXJhdGlvbiBsb2NrICovCisJc3Bpbmxv Y2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgY2hhbl9ub2RlOworCXN0cnVjdCBsaXN0X2hl YWQgcGVuZGluZ19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgZG9uZV9saXN0OworCXN0cnVjdCB4 aWxpbnhfZnJtYnVmX3R4X2Rlc2NyaXB0b3IgKnN0YWdlZF9kZXNjOworCXN0cnVjdCB4aWxpbnhf ZnJtYnVmX3R4X2Rlc2NyaXB0b3IgKmFjdGl2ZV9kZXNjOworCXN0cnVjdCBkbWFfY2hhbiBjb21t b247CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgKCp3cml0ZV9hZGRyKShzdHJ1Y3QgeGls aW54X2ZybWJ1Zl9jaGFuICpjaGFuLCB1MzIgcmVnLAorCQkJICAgZG1hX2FkZHJfdCB2YWx1ZSk7 CisJaW50IGlycTsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uOworCWJv b2wgaWRsZTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKKwljb25zdCBzdHJ1Y3Qg eGlsaW54X2ZybWJ1Zl9mb3JtYXRfZGVzYyAqdmlkX2ZtdDsKK307CisKKy8qKgorICogc3RydWN0 IHhpbGlueF9mcm1idWZfZm9ybWF0X2Rlc2MgLSBsb29rdXAgdGFibGUgdG8gbWF0Y2ggZm91cmNj IHRvIGZvcm1hdAorICogQGR0c19uYW1lOiBEZXZpY2UgdHJlZSBuYW1lIGZvciB0aGlzIGVudHJ5 LgorICogQGlkOiBGb3JtYXQgSUQKKyAqIEBicHA6IEJ5dGVzIHBlciBwaXhlbAorICogQG51bV9w bGFuZXM6IEV4cGVjdGVkIG51bWJlciBvZiBwbGFuZSBidWZmZXJzIGluIGZyYW1lYnVmZmVyIGZv ciB0aGlzIGZvcm1hdAorICogQGRybV9mbXQ6IERSTSB2aWRlbyBmcmFtZXdvcmsgZXF1aXZhbGVu dCBmb3VyY2MgY29kZQorICogQHY0bDJfZm10OiBWaWRlbyA0IExpbnV4IGZyYW1ld29yayBlcXVp dmFsZW50IGZvdXJjYyBjb2RlCisgKiBAZm10X2JpdG1hc2s6IEZsYWcgaWRlbnRpZnlpbmcgdGhp cyBmb3JtYXQgaW4gZGV2aWNlLXNwZWNpZmljICJlbmFibGVkIgorICoJYml0bWFwCisgKi8KK3N0 cnVjdCB4aWxpbnhfZnJtYnVmX2Zvcm1hdF9kZXNjIHsKKwljb25zdCBjaGFyICpkdHNfbmFtZTsK Kwl1MzIgaWQ7CisJdTMyIGJwcDsKKwl1MzIgbnVtX3BsYW5lczsKKwl1MzIgZHJtX2ZtdDsKKwl1 MzIgdjRsMl9mbXQ7CisJdTMyIGZtdF9iaXRtYXNrOworfTsKKworc3RhdGljIExJU1RfSEVBRChm cm1idWZfY2hhbl9saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZnJtYnVmX2NoYW5fbGlzdF9s b2NrKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB4aWxpbnhfZnJtYnVmX2Zvcm1hdF9kZXNjIHhp bGlueF9mcm1idWZfZm9ybWF0c1tdID0geworCXsKKwkJLmR0c19uYW1lID0gInhiZ3I4ODg4IiwK KwkJLmlkID0gWElMSU5YX0ZSTUJVRl9GTVRfUkdCWDgsCisJCS5icHAgPSA0LAorCQkubnVtX3Bs YW5lcyA9IDEsCisJCS5kcm1fZm10ID0gRFJNX0ZPUk1BVF9YQkdSODg4OCwKKwkJLnY0bDJfZm10 ID0gMCwKKwkJLmZtdF9iaXRtYXNrID0gQklUKDApLAorCX0sCisJeworCQkuZHRzX25hbWUgPSAi dW5zdXBwb3J0ZWQiLAorCQkuaWQgPSBYSUxJTlhfRlJNQlVGX0ZNVF9ZVVZYOCwKKwkJLmJwcCA9 IDQsCisJCS5udW1fcGxhbmVzID0gMSwKKwkJLmRybV9mbXQgPSAwLAorCQkudjRsMl9mbXQgPSAw LAorCQkuZm10X2JpdG1hc2sgPSBCSVQoMSksCisJfSwKKwl7CisJCS5kdHNfbmFtZSA9ICJ5dXl2 IiwKKwkJLmlkID0gWElMSU5YX0ZSTUJVRl9GTVRfWVVZVjgsCisJCS5icHAgPSAyLAorCQkubnVt X3BsYW5lcyA9IDEsCisJCS5kcm1fZm10ID0gRFJNX0ZPUk1BVF9ZVVlWLAorCQkudjRsMl9mbXQg PSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLmZtdF9iaXRtYXNrID0gQklUKDIpLAorCX0sCisJewor CQkuZHRzX25hbWUgPSAibnYxNiIsCisJCS5pZCA9IFhJTElOWF9GUk1CVUZfRk1UX1lfVVY4LAor CQkuYnBwID0gMSwKKwkJLm51bV9wbGFuZXMgPSAyLAorCQkuZHJtX2ZtdCA9IERSTV9GT1JNQVRf TlYxNiwKKwkJLnY0bDJfZm10ID0gVjRMMl9QSVhfRk1UX05WMTYsCisJCS5mbXRfYml0bWFzayA9 IEJJVCgzKSwKKwl9LAorCXsKKwkJLmR0c19uYW1lID0gIm52MTIiLAorCQkuaWQgPSBYSUxJTlhf RlJNQlVGX0ZNVF9ZX1VWOF80MjAsCisJCS5icHAgPSAxLAorCQkubnVtX3BsYW5lcyA9IDIsCisJ CS5kcm1fZm10ID0gRFJNX0ZPUk1BVF9OVjEyLAorCQkudjRsMl9mbXQgPSBWNEwyX1BJWF9GTVRf TlYxMiwKKwkJLmZtdF9iaXRtYXNrID0gQklUKDQpLAorCX0sCisJeworCQkuZHRzX25hbWUgPSAi YmdyODg4IiwKKwkJLmlkID0gWElMSU5YX0ZSTUJVRl9GTVRfUkdCOCwKKwkJLmJwcCA9IDMsCisJ CS5udW1fcGxhbmVzID0gMSwKKwkJLmRybV9mbXQgPSBEUk1fRk9STUFUX0JHUjg4OCwKKwkJLnY0 bDJfZm10ID0gVjRMMl9QSVhfRk1UX1JHQjI0LAorCQkuZm10X2JpdG1hc2sgPSBCSVQoNSksCisJ fSwKKwl7CisJCS5kdHNfbmFtZSA9ICJ1bnN1cHBvcnRlZCIsCisJCS5pZCA9IFhJTElOWF9GUk1C VUZfRk1UX1lVVjgsCisJCS5icHAgPSAzLAorCQkubnVtX3BsYW5lcyA9IDEsCisJCS5kcm1fZm10 ID0gMCwKKwkJLnY0bDJfZm10ID0gMCwKKwkJLmZtdF9iaXRtYXNrID0gQklUKDYpLAorCX0sCisJ eworCQkuZHRzX25hbWUgPSAieTgiLAorCQkuaWQgPSBYSUxJTlhfRlJNQlVGX0ZNVF9ZOCwKKwkJ LmJwcCA9IDEsCisJCS5udW1fcGxhbmVzID0gMSwKKwkJLmRybV9mbXQgPSAwLAorCQkudjRsMl9m bXQgPSBWNEwyX1BJWF9GTVRfR1JFWSwKKwkJLmZtdF9iaXRtYXNrID0gQklUKDcpLAorCX0sCit9 OworCisvKioKKyAqIHN0cnVjdCB4aWxpbnhfZnJtYnVmX2RldmljZSAtIGRtYSBkZXZpY2Ugc3Ry dWN0dXJlCisgKiBAcmVnczogSS9PIG1hcHBlZCBiYXNlIGFkZHJlc3MKKyAqIEBkZXY6IERldmlj ZSBTdHJ1Y3R1cmUKKyAqIEBjb21tb246IERNQSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2hhbjog RHJpdmVyIHNwZWNpZmljIGRtYSBjaGFubmVsCisgKiBAcnN0X2dwaW86IEdQSU8gcmVzZXQKKyAq IEBlbmFibGVkX3ZpZF9mbXRzOiBCaXRtYXNrIG9mIHZpZGVvIGZvcm1hdHMgZW5hYmxlZCBpbiBo YXJkd2FyZQorICogQGRybV9tZW1vcnlfZm10czogQXJyYXkgb2Ygc3VwcG9ydGVkIERSTSBmb3Vy Y2MgY29kZXMKKyAqIEBkcm1fZm10X2NudDogQ291bnQgb2Ygc3VwcG9ydGVkIERSTSBmb3VyY2Mg Y29kZXMKKyAqIEB2NGwyX21lbW9yeV9mbXRzOiBBcnJheSBvZiBzdXBwb3J0ZWQgVjRMMiBmb3Vy Y2MgY29kZXMKKyAqIEB2NGwyX2ZtdF9jbnQ6IENvdW50IG9mIHN1cHBvcnRlZCBWNEwyIGZvdXJj YyBjb2RlcworICovCitzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgeworCXZvaWQgX19pb21l bSAqcmVnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRtYV9kZXZpY2UgY29tbW9u OworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gY2hhbjsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpy c3RfZ3BpbzsKKwl1MzIgZW5hYmxlZF92aWRfZm10czsKKwl1MzIgZHJtX21lbW9yeV9mbXRzW0FS UkFZX1NJWkUoeGlsaW54X2ZybWJ1Zl9mb3JtYXRzKV07CisJdTMyIGRybV9mbXRfY250OworCXUz MiB2NGwyX21lbW9yeV9mbXRzW0FSUkFZX1NJWkUoeGlsaW54X2ZybWJ1Zl9mb3JtYXRzKV07CisJ dTMyIHY0bDJfZm10X2NudDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IHhpbGlueF9mcm1idWZfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LGF4aS1m cm1idWYtd3ItdjIiLAorCQkuZGF0YSA9ICh2b2lkICopRE1BX0RFVl9UT19NRU19LAorCXsgLmNv bXBhdGlibGUgPSAieGxueCxheGktZnJtYnVmLXJkLXYyIiwKKwkJLmRhdGEgPSAodm9pZCAqKURN QV9NRU1fVE9fREVWfSwKKwl7LyogZW5kIG9mIGxpc3QgKi99Cit9OworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqUFJPVE9UWVBFUyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisjZGVmaW5lIHRvX3hpbGlueF9jaGFuKGNoYW4pIFwKKwljb250YWluZXJfb2Yo Y2hhbiwgc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiwgY29tbW9uKQorI2RlZmluZSB0b19kbWFf dHhfZGVzY3JpcHRvcih0eCkgXAorCWNvbnRhaW5lcl9vZih0eCwgc3RydWN0IHhpbGlueF9mcm1i dWZfdHhfZGVzY3JpcHRvciwgYXN5bmNfdHgpCisKK3N0YXRpYyBpbmxpbmUgdTMyIGZybWJ1Zl9y ZWFkKHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4sIHUzMiByZWcpCit7CisJcmV0dXJu IGlvcmVhZDMyKGNoYW4tPnhkZXYtPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgZnJtYnVmX3dyaXRlKHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4sIHUzMiByZWcs CisJCQkJdTMyIHZhbHVlKQoreworCWlvd3JpdGUzMih2YWx1ZSwgY2hhbi0+eGRldi0+cmVncyAr IHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcm1idWZfd3JpdGVxKHN0cnVjdCB4aWxp bnhfZnJtYnVmX2NoYW4gKmNoYW4sIHUzMiByZWcsCisJCQkJIHU2NCB2YWx1ZSkKK3sKKwlpb3dy aXRlMzIobG93ZXJfMzJfYml0cyh2YWx1ZSksIGNoYW4tPnhkZXYtPnJlZ3MgKyByZWcpOworCWlv d3JpdGUzMih1cHBlcl8zMl9iaXRzKHZhbHVlKSwgY2hhbi0+eGRldi0+cmVncyArIHJlZyArIDQp OworfQorCitzdGF0aWMgdm9pZCB3cml0ZXFfYWRkcihzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFu ICpjaGFuLCB1MzIgcmVnLAorCQkJZG1hX2FkZHJfdCBhZGRyKQoreworCWZybWJ1Zl93cml0ZXEo Y2hhbiwgcmVnLCAodTY0KWFkZHIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9hZGRyKHN0cnVj dCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4sIHUzMiByZWcsCisJCSAgICAgICBkbWFfYWRkcl90 IGFkZHIpCit7CisJZnJtYnVmX3dyaXRlKGNoYW4sIHJlZywgYWRkcik7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBmcm1idWZfY2xyKHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4sIHUz MiByZWcsCisJCQkgICAgICB1MzIgY2xyKQoreworCWZybWJ1Zl93cml0ZShjaGFuLCByZWcsIGZy bWJ1Zl9yZWFkKGNoYW4sIHJlZykgJiB+Y2xyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZy bWJ1Zl9zZXQoc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqY2hhbiwgdTMyIHJlZywKKwkJCSAg ICAgIHUzMiBzZXQpCit7CisJZnJtYnVmX3dyaXRlKGNoYW4sIHJlZywgZnJtYnVmX3JlYWQoY2hh biwgcmVnKSB8IHNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGZybWJ1Zl9pbml0X2Zvcm1hdF9hcnJh eShzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXYpCit7CisJdTMyIGksIGNudDsKKwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhpbGlueF9mcm1idWZfZm9ybWF0cyk7IGkrKykg eworCQlpZiAoISh4ZGV2LT5lbmFibGVkX3ZpZF9mbXRzICYKKwkJICAgICAgeGlsaW54X2ZybWJ1 Zl9mb3JtYXRzW2ldLmZtdF9iaXRtYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh4aWxpbnhf ZnJtYnVmX2Zvcm1hdHNbaV0uZHJtX2ZtdCkgeworCQkJY250ID0geGRldi0+ZHJtX2ZtdF9jbnQr KzsKKwkJCXhkZXYtPmRybV9tZW1vcnlfZm10c1tjbnRdID0KKwkJCQl4aWxpbnhfZnJtYnVmX2Zv cm1hdHNbaV0uZHJtX2ZtdDsKKwkJfQorCisJCWlmICh4aWxpbnhfZnJtYnVmX2Zvcm1hdHNbaV0u djRsMl9mbXQpIHsKKwkJCWNudCA9IHhkZXYtPnY0bDJfZm10X2NudCsrOworCQkJeGRldi0+djRs Ml9tZW1vcnlfZm10c1tjbnRdID0KKwkJCQl4aWxpbnhfZnJtYnVmX2Zvcm1hdHNbaV0udjRsMl9m bXQ7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKmZy bWJ1Zl9maW5kX2RldihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHhpbGlueF9m cm1idWZfY2hhbiAqeGNoYW4sICp0ZW1wOworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX2RldmljZSAq eGRldjsKKwlib29sIGlzX2ZybWJ1Zl9jaGFuID0gZmFsc2U7CisKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoeGNoYW4sIHRlbXAsICZmcm1idWZfY2hhbl9saXN0LCBjaGFuX25vZGUpIHsKKwkJ aWYgKGNoYW4gPT0gJnhjaGFuLT5jb21tb24pCisJCQlpc19mcm1idWZfY2hhbiA9IHRydWU7CisJ fQorCisJaWYgKCFpc19mcm1idWZfY2hhbikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisK Kwl4Y2hhbiA9IHRvX3hpbGlueF9jaGFuKGNoYW4pOworCXhkZXYgPSBjb250YWluZXJfb2YoeGNo YW4sIHN0cnVjdCB4aWxpbnhfZnJtYnVmX2RldmljZSwgY2hhbik7CisKKwlyZXR1cm4geGRldjsK K30KKworc3RhdGljIGludCBmcm1idWZfdmVyaWZ5X2Zvcm1hdChzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4sIHUzMiBmb3VyY2MsIHUzMiB0eXBlKQoreworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4g KnhpbF9jaGFuID0gdG9feGlsaW54X2NoYW4oY2hhbik7CisJdTMyIGksIHN6ID0gQVJSQVlfU0la RSh4aWxpbnhfZnJtYnVmX2Zvcm1hdHMpOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsK KwkJaWYgKCh0eXBlID09IFhETUFfRFJNICYmCisJCSAgICAgZm91cmNjICE9IHhpbGlueF9mcm1i dWZfZm9ybWF0c1tpXS5kcm1fZm10KSB8fAorCQkgICAodHlwZSA9PSBYRE1BX1Y0TDIgJiYKKwkJ ICAgIGZvdXJjYyAhPSB4aWxpbnhfZnJtYnVmX2Zvcm1hdHNbaV0udjRsMl9mbXQpKQorCQkJY29u dGludWU7CisKKwkJaWYgKCEoeGlsaW54X2ZybWJ1Zl9mb3JtYXRzW2ldLmZtdF9iaXRtYXNrICYK KwkJICAgICAgeGlsX2NoYW4tPnhkZXYtPmVuYWJsZWRfdmlkX2ZtdHMpKQorCQkJcmV0dXJuIC1F SU5WQUw7CisKKwkJeGlsX2NoYW4tPnZpZF9mbXQgPSAmeGlsaW54X2ZybWJ1Zl9mb3JtYXRzW2ld OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHhp bGlueF94ZG1hX3NldF9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1MzIgZm91cmNjLCB1 MzIgdHlwZSkKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICp4aWxfY2hhbjsKKwlib29s IGZvdW5kX3hjaGFuID0gZmFsc2U7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmZybWJ1Zl9j aGFuX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh4aWxfY2hhbiwgJmZybWJ1Zl9j aGFuX2xpc3QsIGNoYW5fbm9kZSkgeworCQlpZiAoY2hhbiA9PSAmeGlsX2NoYW4tPmNvbW1vbikg eworCQkJZm91bmRfeGNoYW4gPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5s b2NrKCZmcm1idWZfY2hhbl9saXN0X2xvY2spOworCisJaWYgKCFmb3VuZF94Y2hhbikgeworCQlk ZXZfZGJnKGNoYW4tPmRldmljZS0+ZGV2LAorCQkJImRtYSBjaGFuIG5vdCBhIFZpZGVvIEZyYW1l YnVmZmVyIGNoYW5uZWwgaW5zdGFuY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZnJt YnVmX3ZlcmlmeV9mb3JtYXQoY2hhbiwgZm91cmNjLCB0eXBlKTsKKwlpZiAocmV0ID09IC1FSU5W QUwpIHsKKwkJZGV2X2VycihjaGFuLT5kZXZpY2UtPmRldiwKKwkJCSJGcmFtZWJ1ZmZlciBub3Qg Y29uZmlndXJlZCBmb3IgZm91cmNjIDB4JXhcbiIsCisJCQlmb3VyY2MpOworCQlyZXR1cm47CisJ fQorfQorCit2b2lkIHhpbGlueF94ZG1hX2RybV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFu LCB1MzIgZHJtX2ZvdXJjYykKK3sKKwl4aWxpbnhfeGRtYV9zZXRfY29uZmlnKGNoYW4sIGRybV9m b3VyY2MsIFhETUFfRFJNKTsKKworfSBFWFBPUlRfU1lNQk9MX0dQTCh4aWxpbnhfeGRtYV9kcm1f Y29uZmlnKTsKKwordm9pZCB4aWxpbnhfeGRtYV92NGwyX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4sIHUzMiB2NGwyX2ZvdXJjYykKK3sKKwl4aWxpbnhfeGRtYV9zZXRfY29uZmlnKGNoYW4s IHY0bDJfZm91cmNjLCBYRE1BX1Y0TDIpOworCit9IEVYUE9SVF9TWU1CT0xfR1BMKHhpbGlueF94 ZG1hX3Y0bDJfY29uZmlnKTsKKworaW50IHhpbGlueF94ZG1hX2dldF9kcm1fdmlkX2ZtdHMoc3Ry dWN0IGRtYV9jaGFuICpjaGFuLCB1MzIgKmZtdF9jbnQsCisJCQkJIHUzMiAqKmZtdHMpCit7CisJ c3RydWN0IHhpbGlueF9mcm1idWZfZGV2aWNlICp4ZGV2OworCisJeGRldiA9IGZybWJ1Zl9maW5k X2RldihjaGFuKTsKKworCWlmIChJU19FUlIoeGRldikpCisJCXJldHVybiBQVFJfRVJSKHhkZXYp OworCisJKmZtdF9jbnQgPSB4ZGV2LT5kcm1fZm10X2NudDsKKwkqZm10cyA9IHhkZXYtPmRybV9t ZW1vcnlfZm10czsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh4aWxpbnhfeGRtYV9n ZXRfZHJtX3ZpZF9mbXRzKTsKKworaW50IHhpbGlueF94ZG1hX2dldF92NGwyX3ZpZF9mbXRzKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbiwgdTMyICpmbXRfY250LAorCQkJCSAgdTMyICoqZm10cykKK3sK KwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXY7CisKKwl4ZGV2ID0gZnJtYnVmX2Zp bmRfZGV2KGNoYW4pOworCisJaWYgKElTX0VSUih4ZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoeGRl dik7CisKKwkqZm10X2NudCA9IHhkZXYtPnY0bDJfZm10X2NudDsKKwkqZm10cyA9IHhkZXYtPnY0 bDJfbWVtb3J5X2ZtdHM7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woeGlsaW54X3hk bWFfZ2V0X3Y0bDJfdmlkX2ZtdHMpOworCisvKioKKyAqIG9mX2RtYV94aWxpbnhfeGxhdGUgLSBU cmFuc2xhdGlvbiBmdW5jdGlvbgorICogQGRtYV9zcGVjOiBQb2ludGVyIHRvIERNQSBzcGVjaWZp ZXIgYXMgZm91bmQgaW4gdGhlIGRldmljZSB0cmVlCisgKiBAb2ZkbWE6IFBvaW50ZXIgdG8gRE1B IGNvbnRyb2xsZXIgZGF0YQorICoKKyAqIFJldHVybjogRE1BIGNoYW5uZWwgcG9pbnRlciBvbiBz dWNjZXNzIG9yIGVycm9yIGNvZGUgb24gZXJyb3IKKyAqLworc3RhdGljIHN0cnVjdCBkbWFfY2hh biAqb2ZfZG1hX3hpbGlueF94bGF0ZShzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpkbWFfc3BlYywK KwkJCQkJICAgIHN0cnVjdCBvZl9kbWEgKm9mZG1hKQoreworCXN0cnVjdCB4aWxpbnhfZnJtYnVm X2RldmljZSAqeGRldiA9IG9mZG1hLT5vZl9kbWFfZGF0YTsKKworCXJldHVybiBkbWFfZ2V0X3Ns YXZlX2NoYW5uZWwoJnhkZXYtPmNoYW4uY29tbW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIERlc2NyaXB0b3JzIGFsbG9jIGFuZCBmcmVlCisgKi8KKworLyoqCisgKiB4aWxp bnhfZnJtYnVmX3R4X2Rlc2NyaXB0b3IgLSBBbGxvY2F0ZSB0cmFuc2FjdGlvbiBkZXNjcmlwdG9y CisgKiBAY2hhbjogRHJpdmVyIHNwZWNpZmljIGRtYSBjaGFubmVsCisgKgorICogUmV0dXJuOiBU aGUgYWxsb2NhdGVkIGRlc2NyaXB0b3Igb24gc3VjY2VzcyBhbmQgTlVMTCBvbiBmYWlsdXJlLgor ICovCitzdGF0aWMgc3RydWN0IHhpbGlueF9mcm1idWZfdHhfZGVzY3JpcHRvciAqCit4aWxpbnhf ZnJtYnVmX2FsbG9jX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqY2hh bikKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl90eF9kZXNjcmlwdG9yICpkZXNjOworCisJZGVz YyA9IGt6YWxsb2Moc2l6ZW9mKCpkZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXNjKQorCQly ZXR1cm4gTlVMTDsKKworCXJldHVybiBkZXNjOworfQorCisvKioKKyAqIHhpbGlueF9mcm1idWZf ZnJlZV9kZXNjX2xpc3QgLSBGcmVlIGRlc2NyaXB0b3JzIGxpc3QKKyAqIEBjaGFuOiBEcml2ZXIg c3BlY2lmaWMgZG1hIGNoYW5uZWwKKyAqIEBsaXN0OiBMaXN0IHRvIHBhcnNlIGFuZCBkZWxldGUg dGhlIGRlc2NyaXB0b3IKKyAqLworc3RhdGljIHZvaWQgeGlsaW54X2ZybWJ1Zl9mcmVlX2Rlc2Nf bGlzdChzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpjaGFuLAorCQkJCQkgc3RydWN0IGxpc3Rf aGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl90eF9kZXNjcmlwdG9yICpkZXNj LCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBuZXh0LCBsaXN0LCBu b2RlKSB7CisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKwkJa2ZyZWUoZGVzYyk7CisJfQorfQor CisvKioKKyAqIHhpbGlueF9mcm1idWZfZnJlZV9kZXNjcmlwdG9ycyAtIEZyZWUgY2hhbm5lbCBk ZXNjcmlwdG9ycworICogQGNoYW46IERyaXZlciBzcGVjaWZpYyBkbWEgY2hhbm5lbAorICovCitz dGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVmX2ZyZWVfZGVzY3JpcHRvcnMoc3RydWN0IHhpbGlueF9m cm1idWZfY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKworCXhpbGlueF9mcm1idWZfZnJlZV9kZXNj X2xpc3QoY2hhbiwgJmNoYW4tPnBlbmRpbmdfbGlzdCk7CisJeGlsaW54X2ZybWJ1Zl9mcmVlX2Rl c2NfbGlzdChjaGFuLCAmY2hhbi0+ZG9uZV9saXN0KTsKKwlrZnJlZShjaGFuLT5hY3RpdmVfZGVz Yyk7CisJa2ZyZWUoY2hhbi0+c3RhZ2VkX2Rlc2MpOworCisJY2hhbi0+c3RhZ2VkX2Rlc2MgPSBO VUxMOworCWNoYW4tPmFjdGl2ZV9kZXNjID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmY2hhbi0+ cGVuZGluZ19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2hhbi0+ZG9uZV9saXN0KTsKKworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiB4 aWxpbnhfZnJtYnVmX2ZyZWVfY2hhbl9yZXNvdXJjZXMgLSBGcmVlIGNoYW5uZWwgcmVzb3VyY2Vz CisgKiBAZGNoYW46IERNQSBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIHhpbGlueF9mcm1idWZf ZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuKQoreworCXN0cnVjdCB4 aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4gPSB0b194aWxpbnhfY2hhbihkY2hhbik7CisKKwl4aWxp bnhfZnJtYnVmX2ZyZWVfZGVzY3JpcHRvcnMoY2hhbik7Cit9CisKKy8qKgorICogeGlsaW54X2Zy bWJ1Zl9jaGFuX2Rlc2NfY2xlYW51cCAtIENsZWFuIGNoYW5uZWwgZGVzY3JpcHRvcnMKKyAqIEBj aGFuOiBEcml2ZXIgc3BlY2lmaWMgZG1hIGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgeGlsaW54 X2ZybWJ1Zl9jaGFuX2Rlc2NfY2xlYW51cChzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpjaGFu KQoreworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX3R4X2Rlc2NyaXB0b3IgKmRlc2MsICpuZXh0Owor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+bG9jaywg ZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIG5leHQsICZjaGFuLT5k b25lX2xpc3QsIG5vZGUpIHsKKwkJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNhbGxiYWNrOworCQl2 b2lkICpjYWxsYmFja19wYXJhbTsKKworCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7CisKKwkJLyog UnVuIHRoZSBsaW5rIGRlc2NyaXB0b3IgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKwkJY2FsbGJhY2sg PSBkZXNjLT5hc3luY190eC5jYWxsYmFjazsKKwkJY2FsbGJhY2tfcGFyYW0gPSBkZXNjLT5hc3lu Y190eC5jYWxsYmFja19wYXJhbTsKKwkJaWYgKGNhbGxiYWNrKSB7CisJCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CisJCQljYWxsYmFjayhjYWxsYmFja19wYXJh bSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCQl9CisKKwkJ LyogUnVuIGFueSBkZXBlbmRlbmNpZXMsIHRoZW4gZnJlZSB0aGUgZGVzY3JpcHRvciAqLworCQlk bWFfcnVuX2RlcGVuZGVuY2llcygmZGVzYy0+YXN5bmNfdHgpOworCQlrZnJlZShkZXNjKTsKKwl9 CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7Cit9CisKKy8q KgorICogeGlsaW54X2ZybWJ1Zl9kb190YXNrbGV0IC0gU2NoZWR1bGUgY29tcGxldGlvbiB0YXNr bGV0CisgKiBAZGF0YTogUG9pbnRlciB0byB0aGUgWGlsaW54IGZybWJ1ZiBjaGFubmVsIHN0cnVj dHVyZQorICovCitzdGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVmX2RvX3Rhc2tsZXQodW5zaWduZWQg bG9uZyBkYXRhKQoreworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4gPSAoc3RydWN0 IHhpbGlueF9mcm1idWZfY2hhbiAqKWRhdGE7CisKKwl4aWxpbnhfZnJtYnVmX2NoYW5fZGVzY19j bGVhbnVwKGNoYW4pOworfQorCisvKioKKyAqIHhpbGlueF9mcm1idWZfYWxsb2NfY2hhbl9yZXNv dXJjZXMgLSBBbGxvY2F0ZSBjaGFubmVsIHJlc291cmNlcworICogQGRjaGFuOiBETUEgY2hhbm5l bAorICoKKyAqIFJldHVybjogJzAnIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWUgb24gZXJy b3IKKyAqLworc3RhdGljIGludCB4aWxpbnhfZnJtYnVmX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0 cnVjdCBkbWFfY2hhbiAqZGNoYW4pCit7CisJZG1hX2Nvb2tpZV9pbml0KGRjaGFuKTsKKworCXJl dHVybiAwOworfQorCisvKioKKyAqIHhpbGlueF9mcm1idWZfdHhfc3RhdHVzIC0gR2V0IGZybWJ1 ZiB0cmFuc2FjdGlvbiBzdGF0dXMKKyAqIEBkY2hhbjogRE1BIGNoYW5uZWwKKyAqIEBjb29raWU6 IFRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAqIEB0eHN0YXRlOiBUcmFuc2FjdGlvbiBzdGF0ZQor ICoKKyAqIFJldHVybjogZm1yYnVmIHRyYW5zYWN0aW9uIHN0YXR1cworICovCitzdGF0aWMgZW51 bSBkbWFfc3RhdHVzIHhpbGlueF9mcm1idWZfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqZGNo YW4sCisJCQkJCSAgICAgICBkbWFfY29va2llX3QgY29va2llLAorCQkJCQkgICAgICAgc3RydWN0 IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlyZXR1cm4gZG1hX2Nvb2tpZV9zdGF0dXMoZGNo YW4sIGNvb2tpZSwgdHhzdGF0ZSk7Cit9CisKKy8qKgorICogeGlsaW54X2ZybWJ1Zl9oYWx0IC0g SGFsdCBmcm1idWYgY2hhbm5lbAorICogQGNoYW46IERyaXZlciBzcGVjaWZpYyBkbWEgY2hhbm5l bAorICovCitzdGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVmX2hhbHQoc3RydWN0IHhpbGlueF9mcm1i dWZfY2hhbiAqY2hhbikKK3sKKwlmcm1idWZfY2xyKGNoYW4sIFhJTElOWF9GUk1CVUZfQ1RSTF9P RkZTRVQsCisJCSAgIFhJTElOWF9GUk1CVUZfQ1RSTF9BUF9TVEFSVCB8CisJCSAgIFhJTElOWF9G Uk1CVUZfQ1RSTF9BVVRPX1JFU1RBUlQpOworCWNoYW4tPmlkbGUgPSB0cnVlOworfQorCisvKioK KyAqIHhpbGlueF9mcm1idWZfc3RhcnQgLSBTdGFydCBkbWEgY2hhbm5lbAorICogQGNoYW46IERy aXZlciBzcGVjaWZpYyBkbWEgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVm X3N0YXJ0KHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4pCit7CisJZnJtYnVmX3NldChj aGFuLCBYSUxJTlhfRlJNQlVGX0NUUkxfT0ZGU0VULAorCQkgICBYSUxJTlhfRlJNQlVGX0NUUkxf QVBfU1RBUlQgfAorCQkgICBYSUxJTlhfRlJNQlVGX0NUUkxfQVVUT19SRVNUQVJUKTsKKwljaGFu LT5pZGxlID0gZmFsc2U7Cit9CisKKy8qKgorICogeGlsaW54X2ZybWJ1Zl9jb21wbGV0ZV9kZXNj cmlwdG9yIC0gTWFyayB0aGUgYWN0aXZlIGRlc2NyaXB0b3IgYXMgY29tcGxldGUKKyAqIFRoaXMg ZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHNwaW5sb2NrIGhlbGQKKyAqIEBjaGFuIDogeGlsaW54 IGZybWJ1ZiBjaGFubmVsCisgKgorICogQ09OVEVYVDogaGFyZGlycQorICovCitzdGF0aWMgdm9p ZCB4aWxpbnhfZnJtYnVmX2NvbXBsZXRlX2Rlc2NyaXB0b3Ioc3RydWN0IHhpbGlueF9mcm1idWZf Y2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl90eF9kZXNjcmlwdG9yICpkZXNj ID0gY2hhbi0+YWN0aXZlX2Rlc2M7CisKKwlkbWFfY29va2llX2NvbXBsZXRlKCZkZXNjLT5hc3lu Y190eCk7CisJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmNoYW4tPmRvbmVfbGlzdCk7Cit9 CisKKy8qKgorICogeGlsaW54X2ZybWJ1Zl9zdGFydF90cmFuc2ZlciAtIFN0YXJ0cyBmcm1idWYg dHJhbnNmZXIKKyAqIEBjaGFuOiBEcml2ZXIgc3BlY2lmaWMgY2hhbm5lbCBzdHJ1Y3QgcG9pbnRl cgorICovCitzdGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVmX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCB4 aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHhpbGlueF9mcm1idWZfdHhfZGVz Y3JpcHRvciAqZGVzYzsKKworCWlmICghY2hhbi0+aWRsZSkKKwkJcmV0dXJuOworCisJaWYgKGNo YW4tPmFjdGl2ZV9kZXNjKSB7CisJCXhpbGlueF9mcm1idWZfY29tcGxldGVfZGVzY3JpcHRvcihj aGFuKTsKKwkJY2hhbi0+YWN0aXZlX2Rlc2MgPSBOVUxMOworCX0KKworCWlmIChjaGFuLT5zdGFn ZWRfZGVzYykgeworCQljaGFuLT5hY3RpdmVfZGVzYyA9IGNoYW4tPnN0YWdlZF9kZXNjOworCQlj aGFuLT5zdGFnZWRfZGVzYyA9IE5VTEw7CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJmNoYW4tPnBl bmRpbmdfbGlzdCkpCisJCXJldHVybjsKKworCWRlc2MgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjaGFu LT5wZW5kaW5nX2xpc3QsCisJCQkJc3RydWN0IHhpbGlueF9mcm1idWZfdHhfZGVzY3JpcHRvciwK KwkJCQlub2RlKTsKKworCS8qIFN0YXJ0IHRoZSB0cmFuc2ZlciAqLworCWNoYW4tPndyaXRlX2Fk ZHIoY2hhbiwgWElMSU5YX0ZSTUJVRl9BRERSX09GRlNFVCwKKwkJCSBkZXNjLT5ody5sdW1hX3Bs YW5lX2FkZHIpOworCWNoYW4tPndyaXRlX2FkZHIoY2hhbiwgWElMSU5YX0ZSTUJVRl9BRERSMl9P RkZTRVQsCisJCQkgZGVzYy0+aHcuY2hyb21hX3BsYW5lX2FkZHIpOworCisJLyogSFcgZXhwZWN0 cyB0aGVzZSBwYXJhbWV0ZXJzIHRvIGJlIHNhbWUgZm9yIG9uZSB0cmFuc2FjdGlvbiAqLworCWZy bWJ1Zl93cml0ZShjaGFuLCBYSUxJTlhfRlJNQlVGX1dJRFRIX09GRlNFVCwgZGVzYy0+aHcuaHNp emUpOworCWZybWJ1Zl93cml0ZShjaGFuLCBYSUxJTlhfRlJNQlVGX1NUUklERV9PRkZTRVQsIGRl c2MtPmh3LnN0cmlkZSk7CisJZnJtYnVmX3dyaXRlKGNoYW4sIFhJTElOWF9GUk1CVUZfSEVJR0hU X09GRlNFVCwgZGVzYy0+aHcudnNpemUpOworCWZybWJ1Zl93cml0ZShjaGFuLCBYSUxJTlhfRlJN QlVGX0ZNVF9PRkZTRVQsIGNoYW4tPnZpZF9mbXQtPmlkKTsKKworCS8qIFN0YXJ0IHRoZSBoYXJk d2FyZSAqLworCXhpbGlueF9mcm1idWZfc3RhcnQoY2hhbik7CisJbGlzdF9kZWwoJmRlc2MtPm5v ZGUpOworCWNoYW4tPnN0YWdlZF9kZXNjID0gZGVzYzsKK30KKworLyoqCisgKiB4aWxpbnhfZnJt YnVmX2lzc3VlX3BlbmRpbmcgLSBJc3N1ZSBwZW5kaW5nIHRyYW5zYWN0aW9ucworICogQGRjaGFu OiBETUEgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVmX2lzc3VlX3BlbmRp bmcoc3RydWN0IGRtYV9jaGFuICpkY2hhbikKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFu ICpjaGFuID0gdG9feGlsaW54X2NoYW4oZGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCXhpbGlueF9mcm1idWZf c3RhcnRfdHJhbnNmZXIoY2hhbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9j aywgZmxhZ3MpOworfQorCisvKioKKyAqIHhpbGlueF9mcm1idWZfcmVzZXQgLSBSZXNldCBmcm1i dWYgY2hhbm5lbAorICogQGNoYW46IERyaXZlciBzcGVjaWZpYyBkbWEgY2hhbm5lbAorICovCitz dGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVmX3Jlc2V0KHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4g KmNoYW4pCit7CisJLyogcmVzZXQgaXAgKi8KKwlncGlvZF9zZXRfdmFsdWUoY2hhbi0+eGRldi0+ cnN0X2dwaW8sIDEpOworCXVkZWxheSgxKTsKKwlncGlvZF9zZXRfdmFsdWUoY2hhbi0+eGRldi0+ cnN0X2dwaW8sIDApOworfQorCisvKioKKyAqIHhpbGlueF9mcm1idWZfY2hhbl9yZXNldCAtIFJl c2V0IGZybWJ1ZiBjaGFubmVsIGFuZCBlbmFibGUgaW50ZXJydXB0cworICogQGNoYW46IERyaXZl ciBzcGVjaWZpYyBmcm1idWYgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCB4aWxpbnhfZnJtYnVm X2NoYW5fcmVzZXQoc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqY2hhbikKK3sKKwl4aWxpbnhf ZnJtYnVmX3Jlc2V0KGNoYW4pOworCWZybWJ1Zl93cml0ZShjaGFuLCBYSUxJTlhfRlJNQlVGX0lF X09GRlNFVCwgWElMSU5YX0ZSTUJVRl9JRV9BUF9SRUFEWSk7CisJZnJtYnVmX3dyaXRlKGNoYW4s IFhJTElOWF9GUk1CVUZfR0lFX09GRlNFVCwgWElMSU5YX0ZSTUJVRl9HSUVfRU4pOworfQorCisv KioKKyAqIHhpbGlueF9mcm1idWZfaXJxX2hhbmRsZXIgLSBmcm1idWYgSW50ZXJydXB0IGhhbmRs ZXIKKyAqIEBpcnE6IElSUSBudW1iZXIKKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBYaWxpbngg ZnJtYnVmIGNoYW5uZWwgc3RydWN0dXJlCisgKgorICogUmV0dXJuOiBJUlFfSEFORExFRC9JUlFf Tk9ORQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgeGlsaW54X2ZybWJ1Zl9pcnFfaGFuZGxlcihp bnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4g PSBkYXRhOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBmcm1idWZfcmVhZChjaGFuLCBYSUxJ TlhfRlJNQlVGX0lTUl9PRkZTRVQpOworCWlmICghKHN0YXR1cyAmIFhJTElOWF9GUk1CVUZfSVNS X0FMTF9JUlFfTUFTSykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZybWJ1Zl93cml0ZShjaGFu LCBYSUxJTlhfRlJNQlVGX0lTUl9PRkZTRVQsCisJCSAgICAgc3RhdHVzICYgWElMSU5YX0ZSTUJV Rl9JU1JfQUxMX0lSUV9NQVNLKTsKKworCWlmIChzdGF0dXMgJiBYSUxJTlhfRlJNQlVGX0lTUl9B UF9SRUFEWV9JUlEpIHsKKwkJc3Bpbl9sb2NrKCZjaGFuLT5sb2NrKTsKKwkJY2hhbi0+aWRsZSA9 IHRydWU7CisJCXhpbGlueF9mcm1idWZfc3RhcnRfdHJhbnNmZXIoY2hhbik7CisJCXNwaW5fdW5s b2NrKCZjaGFuLT5sb2NrKTsKKwl9CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZjaGFuLT50YXNrbGV0 KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogeGlsaW54X2ZybWJ1Zl90eF9z dWJtaXQgLSBTdWJtaXQgRE1BIHRyYW5zYWN0aW9uCisgKiBAdHg6IEFzeW5jIHRyYW5zYWN0aW9u IGRlc2NyaXB0b3IKKyAqCisgKiBSZXR1cm46IGNvb2tpZSB2YWx1ZSBvbiBzdWNjZXNzIGFuZCBm YWlsdXJlIHZhbHVlIG9uIGVycm9yCisgKi8KK3N0YXRpYyBkbWFfY29va2llX3QgeGlsaW54X2Zy bWJ1Zl90eF9zdWJtaXQoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKK3sKKwlz dHJ1Y3QgeGlsaW54X2ZybWJ1Zl90eF9kZXNjcmlwdG9yICpkZXNjID0gdG9fZG1hX3R4X2Rlc2Ny aXB0b3IodHgpOworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4gPSB0b194aWxpbnhf Y2hhbih0eC0+Y2hhbik7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKwljb29raWUg PSBkbWFfY29va2llX2Fzc2lnbih0eCk7CisJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmNo YW4tPnBlbmRpbmdfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywg ZmxhZ3MpOworCisJcmV0dXJuIGNvb2tpZTsKK30KKworLyoqCisgKiB4aWxpbnhfZnJtYnVmX2Rt YV9wcmVwX2ludGVybGVhdmVkIC0gcHJlcGFyZSBhIGRlc2NyaXB0b3IgZm9yIGEKKyAqCURNQV9T TEFWRSB0cmFuc2FjdGlvbgorICogQGRjaGFuOiBETUEgY2hhbm5lbAorICogQHh0OiBJbnRlcmxl YXZlZCB0ZW1wbGF0ZSBwb2ludGVyCisgKiBAZmxhZ3M6IHRyYW5zZmVyIGFjayBmbGFncworICoK KyAqIFJldHVybjogQXN5bmMgdHJhbnNhY3Rpb24gZGVzY3JpcHRvciBvbiBzdWNjZXNzIGFuZCBO VUxMIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRv ciAqCit4aWxpbnhfZnJtYnVmX2RtYV9wcmVwX2ludGVybGVhdmVkKHN0cnVjdCBkbWFfY2hhbiAq ZGNoYW4sCisJCQkJICAgc3RydWN0IGRtYV9pbnRlcmxlYXZlZF90ZW1wbGF0ZSAqeHQsCisJCQkJ ICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpj aGFuID0gdG9feGlsaW54X2NoYW4oZGNoYW4pOworCXN0cnVjdCB4aWxpbnhfZnJtYnVmX3R4X2Rl c2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHhpbGlueF9mcm1idWZfZGVzY19odyAqaHc7CisKKwlp ZiAoY2hhbi0+ZGlyZWN0aW9uICE9IHh0LT5kaXIgfHwgIWNoYW4tPnZpZF9mbXQpCisJCWdvdG8g ZXJyb3I7CisKKwlpZiAoIXh0LT5udW1mIHx8ICF4dC0+c2dsWzBdLnNpemUpCisJCWdvdG8gZXJy b3I7CisKKwlpZiAoeHQtPmZyYW1lX3NpemUgIT0gY2hhbi0+dmlkX2ZtdC0+bnVtX3BsYW5lcykK KwkJZ290byBlcnJvcjsKKworCWRlc2MgPSB4aWxpbnhfZnJtYnVmX2FsbG9jX3R4X2Rlc2NyaXB0 b3IoY2hhbik7CisJaWYgKCFkZXNjKQorCQlyZXR1cm4gTlVMTDsKKworCWRtYV9hc3luY190eF9k ZXNjcmlwdG9yX2luaXQoJmRlc2MtPmFzeW5jX3R4LCAmY2hhbi0+Y29tbW9uKTsKKwlkZXNjLT5h c3luY190eC50eF9zdWJtaXQgPSB4aWxpbnhfZnJtYnVmX3R4X3N1Ym1pdDsKKwlhc3luY190eF9h Y2soJmRlc2MtPmFzeW5jX3R4KTsKKworCWh3ID0gJmRlc2MtPmh3OworCWh3LT52c2l6ZSA9IHh0 LT5udW1mOworCWh3LT5oc2l6ZSA9IHh0LT5zZ2xbMF0uc2l6ZSAvIGNoYW4tPnZpZF9mbXQtPmJw cDsKKwlody0+c3RyaWRlID0geHQtPnNnbFswXS5pY2cgKyB4dC0+c2dsWzBdLnNpemU7CisKKwlp ZiAoY2hhbi0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7CisJCWh3LT5sdW1hX3BsYW5l X2FkZHIgPSB4dC0+c3JjX3N0YXJ0OworCQlpZiAoeHQtPmZyYW1lX3NpemUgPT0gMikKKwkJCWh3 LT5jaHJvbWFfcGxhbmVfYWRkciA9CisJCQkJeHQtPnNyY19zdGFydCArCisJCQkJeHQtPm51bWYg KiBody0+c3RyaWRlICsKKwkJCQl4dC0+c2dsWzBdLnNyY19pY2c7CisJfSBlbHNlIHsKKwkJaHct Pmx1bWFfcGxhbmVfYWRkciA9IHh0LT5kc3Rfc3RhcnQ7CisJCWlmICh4dC0+ZnJhbWVfc2l6ZSA9 PSAyKQorCQkJaHctPmNocm9tYV9wbGFuZV9hZGRyID0KKwkJCQl4dC0+ZHN0X3N0YXJ0ICsKKwkJ CQl4dC0+bnVtZiAqIGh3LT5zdHJpZGUgKworCQkJCXh0LT5zZ2xbMF0uZHN0X2ljZzsKKwl9CisK KwlyZXR1cm4gJmRlc2MtPmFzeW5jX3R4OworCitlcnJvcjoKKwlkZXZfZXJyKGNoYW4tPnhkZXYt PmRldiwKKwkJIkludmFsaWQgZG1hIHRlbXBsYXRlIG9yIG1pc3NpbmcgZG1hIHZpZGVvIGZtdCBj b25maWdcbiIpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHhpbGlueF9mcm1idWZfdGVy bWluYXRlX2FsbCAtIEhhbHQgdGhlIGNoYW5uZWwgYW5kIGZyZWUgZGVzY3JpcHRvcnMKKyAqIEBk Y2hhbjogRHJpdmVyIHNwZWNpZmljIGRtYSBjaGFubmVsIHBvaW50ZXIKKyAqCisgKiBSZXR1cm46 IDAKKyAqLworc3RhdGljIGludCB4aWxpbnhfZnJtYnVmX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IGRt YV9jaGFuICpkY2hhbikKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpjaGFuID0gdG9f eGlsaW54X2NoYW4oZGNoYW4pOworCisJeGlsaW54X2ZybWJ1Zl9oYWx0KGNoYW4pOworCXhpbGlu eF9mcm1idWZfZnJlZV9kZXNjcmlwdG9ycyhjaGFuKTsKKwkvKiB3b3JzdCBjYXNlIGZyYW1lLXRv LWZyYW1lIGJvdW5kYXJ5OyBlbnN1cmUgZnJhbWUgb3V0cHV0IGNvbXBsZXRlICovCisJbXNsZWVw KDUwKTsKKwl4aWxpbnhfZnJtYnVmX2NoYW5fcmVzZXQoY2hhbik7CisKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiB4aWxpbnhfZnJtYnVmX3N5bmNocm9uaXplIC0ga2lsbCB0YXNrbGV0IHRvIHN0 b3AgZnVydGhlciBkZXNjciBwcm9jZXNzaW5nCisgKiBAZGNoYW46IERyaXZlciBzcGVjaWZpYyBk bWEgY2hhbm5lbCBwb2ludGVyCisgKi8KK3N0YXRpYyB2b2lkIHhpbGlueF9mcm1idWZfc3luY2hy b25pemUoc3RydWN0IGRtYV9jaGFuICpkY2hhbikKK3sKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9j aGFuICpjaGFuID0gdG9feGlsaW54X2NoYW4oZGNoYW4pOworCisJdGFza2xldF9raWxsKCZjaGFu LT50YXNrbGV0KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFByb2JlIGFuZCBy ZW1vdmUKKyAqLworCisvKioKKyAqIHhpbGlueF9mcm1idWZfY2hhbl9yZW1vdmUgLSBQZXIgQ2hh bm5lbCByZW1vdmUgZnVuY3Rpb24KKyAqIEBjaGFuOiBEcml2ZXIgc3BlY2lmaWMgZG1hIGNoYW5u ZWwKKyAqLworc3RhdGljIHZvaWQgeGlsaW54X2ZybWJ1Zl9jaGFuX3JlbW92ZShzdHJ1Y3QgeGls aW54X2ZybWJ1Zl9jaGFuICpjaGFuKQoreworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8K Kwlmcm1idWZfY2xyKGNoYW4sIFhJTElOWF9GUk1CVUZfSUVfT0ZGU0VULAorCQkgICBYSUxJTlhf RlJNQlVGX0lTUl9BTExfSVJRX01BU0spOworCisJdGFza2xldF9raWxsKCZjaGFuLT50YXNrbGV0 KTsKKwlsaXN0X2RlbCgmY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKKworCW11dGV4X2xvY2so JmZybWJ1Zl9jaGFuX2xpc3RfbG9jayk7CisJbGlzdF9kZWwoJmNoYW4tPmNoYW5fbm9kZSk7CisJ bXV0ZXhfdW5sb2NrKCZmcm1idWZfY2hhbl9saXN0X2xvY2spOworfQorCisvKioKKyAqIHhpbGlu eF9mcm1idWZfY2hhbl9wcm9iZSAtIFBlciBDaGFubmVsIFByb2JpbmcKKyAqIEl0IGdldCBjaGFu bmVsIGZlYXR1cmVzIGZyb20gdGhlIGRldmljZSB0cmVlIGVudHJ5IGFuZAorICogaW5pdGlhbGl6 ZSBzcGVjaWFsIGNoYW5uZWwgaGFuZGxpbmcgcm91dGluZXMKKyAqCisgKiBAeGRldjogRHJpdmVy IHNwZWNpZmljIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBub2RlOiBEZXZpY2Ugbm9kZQorICoKKyAq IFJldHVybjogJzAnIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWUgb24gZXJyb3IKKyAqLwor c3RhdGljIGludCB4aWxpbnhfZnJtYnVmX2NoYW5fcHJvYmUoc3RydWN0IHhpbGlueF9mcm1idWZf ZGV2aWNlICp4ZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJc3Ry dWN0IHhpbGlueF9mcm1idWZfY2hhbiAqY2hhbjsKKwlpbnQgZXJyOworCXUzMiBkbWFfYWRkcl9z aXplOworCisJY2hhbiA9ICZ4ZGV2LT5jaGFuOworCisJY2hhbi0+ZGV2ID0geGRldi0+ZGV2Owor CWNoYW4tPnhkZXYgPSB4ZGV2OworCWNoYW4tPmlkbGUgPSB0cnVlOworCisJZXJyID0gb2ZfcHJv cGVydHlfcmVhZF91MzIobm9kZSwgInhsbngsZG1hLWFkZHItd2lkdGgiLAorCQkJCSAgICZkbWFf YWRkcl9zaXplKTsKKwlpZiAoZXJyIHx8IChkbWFfYWRkcl9zaXplICE9IDMyICYmIGRtYV9hZGRy X3NpemUgIT0gNjQpKSB7CisJCWRldl9lcnIoeGRldi0+ZGV2LCAibWlzc2luZyBvciBpbnZhbGlk IGFkZHIgd2lkdGggZHRzIHByb3BcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChkbWFf YWRkcl9zaXplID09IDY0ICYmIHNpemVvZihkbWFfYWRkcl90KSA9PSBzaXplb2YodTY0KSkKKwkJ Y2hhbi0+d3JpdGVfYWRkciA9IHdyaXRlcV9hZGRyOworCWVsc2UKKwkJY2hhbi0+d3JpdGVfYWRk ciA9IHdyaXRlX2FkZHI7CisKKwlzcGluX2xvY2tfaW5pdCgmY2hhbi0+bG9jayk7CisJSU5JVF9M SVNUX0hFQUQoJmNoYW4tPnBlbmRpbmdfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoYW4tPmRv bmVfbGlzdCk7CisKKwljaGFuLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsK KwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKHhkZXYtPmRldiwgY2hhbi0+aXJxLCB4aWxpbnhfZnJt YnVmX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCAieGlsaW54X2ZyYW1lYnVm ZmVyIiwgY2hhbik7CisKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoeGRldi0+ZGV2LCAidW5hYmxl IHRvIHJlcXVlc3QgSVJRICVkXG4iLCBjaGFuLT5pcnEpOworCQlyZXR1cm4gZXJyOworCX0KKwor CXRhc2tsZXRfaW5pdCgmY2hhbi0+dGFza2xldCwgeGlsaW54X2ZybWJ1Zl9kb190YXNrbGV0LAor CQkgICAgICh1bnNpZ25lZCBsb25nKWNoYW4pOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBE TUEgY2hhbm5lbCBhbmQgYWRkIGl0IHRvIHRoZSBETUEgZW5naW5lIGNoYW5uZWxzCisJICogbGlz dC4KKwkgKi8KKwljaGFuLT5jb21tb24uZGV2aWNlID0gJnhkZXYtPmNvbW1vbjsKKworCWxpc3Rf YWRkX3RhaWwoJmNoYW4tPmNvbW1vbi5kZXZpY2Vfbm9kZSwgJnhkZXYtPmNvbW1vbi5jaGFubmVs cyk7CisKKwltdXRleF9sb2NrKCZmcm1idWZfY2hhbl9saXN0X2xvY2spOworCWxpc3RfYWRkX3Rh aWwoJmNoYW4tPmNoYW5fbm9kZSwgJmZybWJ1Zl9jaGFuX2xpc3QpOworCW11dGV4X3VubG9jaygm ZnJtYnVmX2NoYW5fbGlzdF9sb2NrKTsKKworCXhpbGlueF9mcm1idWZfY2hhbl9yZXNldChjaGFu KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHhpbGlueF9mcm1idWZfcHJvYmUgLSBEcml2 ZXIgcHJvYmUgZnVuY3Rpb24KKyAqIEBwZGV2OiBQb2ludGVyIHRvIHRoZSBwbGF0Zm9ybV9kZXZp Y2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuOiAnMCcgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB2 YWx1ZSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IHhpbGlueF9mcm1idWZfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBw ZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXY7CisJ c3RydWN0IHJlc291cmNlICppbzsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZG1hX2Rp cjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlpbnQgZXJyOworCXUzMiBp LCBqOworCWludCBod192aWRfZm10X2NudDsKKwljb25zdCBjaGFyICp2aWRfZm10c1tBUlJBWV9T SVpFKHhpbGlueF9mcm1idWZfZm9ybWF0cyldOworCisJeGRldiA9IGRldm1fa3phbGxvYygmcGRl di0+ZGV2LCBzaXplb2YoKnhkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXhkZXYpCisJCXJldHVy biAtRU5PTUVNOworCisJeGRldi0+ZGV2ID0gJnBkZXYtPmRldjsKKworCW1hdGNoID0gb2ZfbWF0 Y2hfbm9kZSh4aWxpbnhfZnJtYnVmX29mX2lkcywgbm9kZSk7CisJaWYgKCFtYXRjaCkKKwkJcmV0 dXJuIC1FTk9ERVY7CisKKwlkbWFfZGlyID0gKGVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbilt YXRjaC0+ZGF0YTsKKworCXhkZXYtPnJzdF9ncGlvID0gZGV2bV9ncGlvZF9nZXQoJnBkZXYtPmRl diwgInJlc2V0IiwKKwkJCQkJR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIoeGRldi0+cnN0 X2dwaW8pKSB7CisJCWVyciA9IFBUUl9FUlIoeGRldi0+cnN0X2dwaW8pOworCQlpZiAoZXJyID09 IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LAorCQkJCSAiUHJvYmUgZGVm ZXJyZWQgZHVlIHRvIEdQSU8gcmVzZXQgZGVmZXJcbiIpOworCQllbHNlCisJCQlkZXZfZXJyKCZw ZGV2LT5kZXYsCisJCQkJIlVuYWJsZSB0byBsb2NhdGUgcmVzZXQgcHJvcGVydHkgaW4gZHRcbiIp OworCQlyZXR1cm4gZXJyOworCX0KKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh4ZGV2LT5y c3RfZ3BpbywgMHgwKTsKKworCWlvID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVT T1VSQ0VfTUVNLCAwKTsKKwl4ZGV2LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2 LT5kZXYsIGlvKTsKKwlpZiAoSVNfRVJSKHhkZXYtPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUih4 ZGV2LT5yZWdzKTsKKworCS8qIEluaXRpYWxpemUgdGhlIERNQSBlbmdpbmUgKi8KKwl4ZGV2LT5j b21tb24uZGV2ID0gJnBkZXYtPmRldjsKKworCUlOSVRfTElTVF9IRUFEKCZ4ZGV2LT5jb21tb24u Y2hhbm5lbHMpOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgeGRldi0+Y29tbW9uLmNhcF9tYXNr KTsKKwlkbWFfY2FwX3NldChETUFfUFJJVkFURSwgeGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwor CS8qIEluaXRpYWxpemUgdGhlIGNoYW5uZWxzICovCisJZXJyID0geGlsaW54X2ZybWJ1Zl9jaGFu X3Byb2JlKHhkZXYsIG5vZGUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJeGRl di0+Y2hhbi5kaXJlY3Rpb24gPSBkbWFfZGlyOworCisJaWYgKHhkZXYtPmNoYW4uZGlyZWN0aW9u ID09IERNQV9ERVZfVE9fTUVNKSB7CisJCXhkZXYtPmNvbW1vbi5kaXJlY3Rpb25zID0gQklUKERN QV9ERVZfVE9fTUVNKTsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlhpbGlueCBBWEkgZnJtYnVm IERNQV9ERVZfVE9fTUVNXG4iKTsKKwl9IGVsc2UgaWYgKHhkZXYtPmNoYW4uZGlyZWN0aW9uID09 IERNQV9NRU1fVE9fREVWKSB7CisJCXhkZXYtPmNvbW1vbi5kaXJlY3Rpb25zID0gQklUKERNQV9N RU1fVE9fREVWKTsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlhpbGlueCBBWEkgZnJtYnVmIERN QV9NRU1fVE9fREVWXG4iKTsKKwl9IGVsc2UgeworCQl4aWxpbnhfZnJtYnVmX2NoYW5fcmVtb3Zl KCZ4ZGV2LT5jaGFuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcmVhZCBzdXBwb3J0 ZWQgdmlkZW8gZm9ybWF0cyBhbmQgdXBkYXRlIGludGVybmFsIHRhYmxlICovCisJaHdfdmlkX2Zt dF9jbnQgPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKG5vZGUsICJ4bG54LHZpZC1mb3JtYXRz Iik7CisKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShub2RlLCAieGxueCx2 aWQtZm9ybWF0cyIsCisJCQkJCSAgICB2aWRfZm10cywgaHdfdmlkX2ZtdF9jbnQpOworCWlmIChl cnIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJNaXNzaW5nIG9yIGludmFsaWQg eGxueCx2aWQtZm9ybWF0cyBkdHMgcHJvcFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZm9y IChpID0gMDsgaSA8IGh3X3ZpZF9mbXRfY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqdmlkX2Zt dF9uYW1lID0gdmlkX2ZtdHNbaV07CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoeGls aW54X2ZybWJ1Zl9mb3JtYXRzKTsgaisrKSB7CisJCQljb25zdCBjaGFyICpkdHNfbmFtZSA9CisJ CQkJeGlsaW54X2ZybWJ1Zl9mb3JtYXRzW2pdLmR0c19uYW1lOworCisJCQlpZiAoc3RyY21wKHZp ZF9mbXRfbmFtZSwgZHRzX25hbWUpKQorCQkJCWNvbnRpbnVlOworCisJCQl4ZGV2LT5lbmFibGVk X3ZpZF9mbXRzIHw9CisJCQkJeGlsaW54X2ZybWJ1Zl9mb3JtYXRzW2pdLmZtdF9iaXRtYXNrOwor CQl9CisJfQorCisJLyogRGV0ZXJtaW5lIHN1cHBvcnRlZCB2aWQgZnJhbWV3b3JrIGZvcm1hdHMg Ki8KKwlmcm1idWZfaW5pdF9mb3JtYXRfYXJyYXkoeGRldik7CisKKwl4ZGV2LT5jb21tb24uZGV2 aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0KKwkJCQl4aWxpbnhfZnJtYnVmX2FsbG9jX2NoYW5f cmVzb3VyY2VzOworCXhkZXYtPmNvbW1vbi5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9CisJ CQkJeGlsaW54X2ZybWJ1Zl9mcmVlX2NoYW5fcmVzb3VyY2VzOworCXhkZXYtPmNvbW1vbi5kZXZp Y2VfcHJlcF9pbnRlcmxlYXZlZF9kbWEgPQorCQkJCXhpbGlueF9mcm1idWZfZG1hX3ByZXBfaW50 ZXJsZWF2ZWQ7CisJeGRldi0+Y29tbW9uLmRldmljZV90ZXJtaW5hdGVfYWxsID0geGlsaW54X2Zy bWJ1Zl90ZXJtaW5hdGVfYWxsOworCXhkZXYtPmNvbW1vbi5kZXZpY2Vfc3luY2hyb25pemUgPSB4 aWxpbnhfZnJtYnVmX3N5bmNocm9uaXplOworCXhkZXYtPmNvbW1vbi5kZXZpY2VfdHhfc3RhdHVz ID0geGlsaW54X2ZybWJ1Zl90eF9zdGF0dXM7CisJeGRldi0+Y29tbW9uLmRldmljZV9pc3N1ZV9w ZW5kaW5nID0geGlsaW54X2ZybWJ1Zl9pc3N1ZV9wZW5kaW5nOworCisJcGxhdGZvcm1fc2V0X2Ry dmRhdGEocGRldiwgeGRldik7CisKKwkvKiBSZWdpc3RlciB0aGUgRE1BIGVuZ2luZSB3aXRoIHRo ZSBjb3JlICovCisJZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmeGRldi0+Y29tbW9uKTsKKwll cnIgPSBvZl9kbWFfY29udHJvbGxlcl9yZWdpc3Rlcihub2RlLCBvZl9kbWFfeGlsaW54X3hsYXRl LCB4ZGV2KTsKKworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJs ZSB0byByZWdpc3RlciBETUEgdG8gRFRcbiIpOworCQl4aWxpbnhfZnJtYnVmX2NoYW5fcmVtb3Zl KCZ4ZGV2LT5jaGFuKTsKKwkJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZ4ZGV2LT5jb21t b24pOworCQlyZXR1cm4gZXJyOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJYaWxpbngg QVhJIEZyYW1lQnVmZmVyIEVuZ2luZSBEcml2ZXIgUHJvYmVkISFcbiIpOworCisJcmV0dXJuIDA7 Cit9CisKKy8qKgorICogeGlsaW54X2ZybWJ1Zl9yZW1vdmUgLSBEcml2ZXIgcmVtb3ZlIGZ1bmN0 aW9uCisgKiBAcGRldjogUG9pbnRlciB0byB0aGUgcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZQor ICoKKyAqIFJldHVybjogQWx3YXlzICcwJworICovCitzdGF0aWMgaW50IHhpbGlueF9mcm1idWZf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHhpbGlueF9m cm1idWZfZGV2aWNlICp4ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkbWFf YXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJnhkZXYtPmNvbW1vbik7CisJeGlsaW54X2ZybWJ1Zl9j aGFuX3JlbW92ZSgmeGRldi0+Y2hhbik7CisKKwlyZXR1cm4gMDsKK30KKworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgeGlsaW54X2ZybWJ1Zl9vZl9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciB4aWxpbnhfZnJtYnVmX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFt ZSA9ICJ4aWxpbngtZnJtYnVmIiwKKwkJLm9mX21hdGNoX3RhYmxlID0geGlsaW54X2ZybWJ1Zl9v Zl9pZHMsCisJfSwKKwkucHJvYmUgPSB4aWxpbnhfZnJtYnVmX3Byb2JlLAorCS5yZW1vdmUgPSB4 aWxpbnhfZnJtYnVmX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeGlsaW54 X2ZybWJ1Zl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsKK01PRFVM RV9ERVNDUklQVElPTigiWGlsaW54IEZyYW1lYnVmZmVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEveGlsaW54X2ZybWJ1 Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEveGlsaW54X2ZybWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmU4YTEzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xp bnV4L2RtYS94aWxpbnhfZnJtYnVmLmgKQEAgLTAsMCArMSw5NyBAQAorLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBYaWxpbnggRnJhbWVidWZmZXIgRE1BIHN1cHBv cnQgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgLSAyMDE3IFhpbGlueCwg SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisK KyNpZm5kZWYgX19YSUxJTlhfRlJNQlVGX0RNQV9ICisjZGVmaW5lIF9fWElMSU5YX0ZSTUJVRl9E TUFfSAorCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisKKy8qKgorICogZW51bSB2aWRf ZnJtd29ya190eXBlIC0gTGludXggdmlkZW8gZnJhbWV3b3JrIHR5cGUKKyAqIEBYRE1BX0RSTTog Zm91cmNjIGlzIG9mIHR5cGUgRFJNCisgKiBAWERNQV9WNEwyOiBmb3VyY2MgaXMgb2YgdHlwZSBW NEwyCisgKi8KK2VudW0gdmlkX2ZybXdvcmtfdHlwZSB7CisJWERNQV9EUk0gPSAwLAorCVhETUFf VjRMMiwKK307CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19YSUxJTlhfRlJNQlVGKQorLyoqCisg KiB4aWxpbnhfeGRtYV9kcm1fY29uZmlnIC0gY29uZmlndXJlIHZpZGVvIGZvcm1hdCBpbiB2aWRl byBhd2FyZSBETUEKKyAqIEBjaGFuOiBkbWEgY2hhbm5lbCBpbnN0YW5jZQorICogQGRybV9mb3Vy Y2M6IERSTSBmb3VyY2MgY29kZSBkZXNjcmliaW5nIHRoZSBtZW1vcnkgbGF5b3V0IG9mIHZpZGVv IGRhdGEKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB3aGVuIHV0aWxpemluZyAidmlkZW8g Zm9ybWF0IGF3YXJlIiBYaWxpbnggRE1BIElQCisgKiAoc3VjaCBhcyBWaWRlbyBGcmFtZWJ1ZmZl ciBSZWFkIG9yIFZpZGVvIEZyYW1lYnVmZmVyIFdyaXRlKS4gIFRoaXMgY2FsbAorICogbXVzdCBi ZSBtYWRlIHByaW9yIHRvIGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKCkgdG8gZW5zdGFibGlzaCB0 aGUgdmlkZW8KKyAqIGRhdGEgbWVtb3J5IGZvcm1hdCB3aXRoaW4gdGhlIGhhcmR3YXJlIERNQS4K KyAqLwordm9pZCB4aWxpbnhfeGRtYV9kcm1fY29uZmlnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwg dTMyIGRybV9mb3VyY2MpOworCisvKioKKyAqIHhpbGlueF94ZG1hX2RybV9jb25maWcgLSBjb25m aWd1cmUgdmlkZW8gZm9ybWF0IGluIHZpZGVvIGF3YXJlIERNQQorICogQGNoYW46IGRtYSBjaGFu bmVsIGluc3RhbmNlCisgKiBAdjRsMl9mb3VyY2M6IFY0TDIgZm91cmNjIGNvZGUgZGVzY3JpYmlu ZyB0aGUgbWVtb3J5IGxheW91dCBvZiB2aWRlbyBkYXRhCisgKgorICogVGhpcyByb3V0aW5lIGlz IHVzZWQgd2hlbiB1dGlsaXppbmcgInZpZGVvIGZvcm1hdCBhd2FyZSIgWGlsaW54IERNQSBJUAor ICogKHN1Y2ggYXMgVmlkZW8gRnJhbWVidWZmZXIgUmVhZCBvciBWaWRlbyBGcmFtZWJ1ZmZlciBX cml0ZSkuICBUaGlzIGNhbGwKKyAqIG11c3QgYmUgbWFkZSBwcmlvciB0byBkbWFfYXN5bmNfaXNz dWVfcGVuZGluZygpIHRvIGVuc3RhYmxpc2ggdGhlIHZpZGVvCisgKiBkYXRhIG1lbW9yeSBmb3Jt YXQgd2l0aGluIHRoZSBoYXJkd2FyZSBETUEuCisgKi8KK3ZvaWQgeGlsaW54X3hkbWFfdjRsMl9j b25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1MzIgdjRsMl9mb3VyY2MpOworCisvKioKKyAq IHhpbGlueF94ZG1hX2dldF9kcm1fdmlkX2ZtdHMgLSBvYnRhaW4gbGlzdCBvZiBzdXBwb3J0ZWQg RFJNIG1lbSBmb3JtYXRzCisgKiBAY2hhbjogZG1hIGNoYW5uZWwgaW5zdGFuY2UKKyAqIEBmbXRf Y250OiBPdXRwdXQgcGFyYW0gLSB0b3RhbCBjb3VudCBvZiBzdXBwb3J0ZWQgRFJNIGZvdXJjYyBj b2RlcworICogQGZtdHM6IE91dHB1dCBwYXJhbSAtIHBvaW50ZXIgdG8gYXJyYXkgb2YgRFJNIGZv dXJjYyBjb2RlcyAobm90IGEgY29weSkKKyAqCisgKiBSZXR1cm46IGEgcmVmZXJlbmNlIHRvIGFu IGFycmF5IG9mIERSTSBmb3VyY2MgY29kZXMgc3VwcG9ydGVkIGJ5IHRoaXMKKyAqIGluc3RhbmNl IG9mIHRoZSBWaWRlbyBGcmFtZWJ1ZmZlciBEcml2ZXIKKyAqLworaW50IHhpbGlueF94ZG1hX2dl dF9kcm1fdmlkX2ZtdHMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1MzIgKmZtdF9jbnQsCisJCQkJ IHUzMiAqKmZtdHMpOworCisvKioKKyAqIHhpbGlueF94ZG1hX2dldF92NGwyX3ZpZF9mbXRzIC0g b2J0YWluIGxpc3Qgb2Ygc3VwcG9ydGVkIFY0TDIgbWVtIGZvcm1hdHMKKyAqIEBjaGFuOiBkbWEg Y2hhbm5lbCBpbnN0YW5jZQorICogQGZtdF9jbnQ6IE91dHB1dCBwYXJhbSAtIHRvdGFsIGNvdW50 IG9mIHN1cHBvcnRlZCBWNEwyIGZvdXJjYyBjb2RlcworICogQGZtdHM6IE91dHB1dCBwYXJhbSAt IHBvaW50ZXIgdG8gYXJyYXkgb2YgVjRMMiBmb3VyY2MgY29kZXMgKG5vdCBhIGNvcHkpCisgKgor ICogUmV0dXJuOiBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBWNEwyIGZvdXJjYyBjb2RlcyBz dXBwb3J0ZWQgYnkgdGhpcworICogaW5zdGFuY2Ugb2YgdGhlIFZpZGVvIEZyYW1lYnVmZmVyIERy aXZlcgorICovCitpbnQgeGlsaW54X3hkbWFfZ2V0X3Y0bDJfdmlkX2ZtdHMoc3RydWN0IGRtYV9j aGFuICpjaGFuLCB1MzIgKmZtdF9jbnQsCisJCQkJICB1MzIgKipmbXRzKTsKKyNlbHNlCitzdGF0 aWMgaW5saW5lIHZvaWQgeGlsaW54X3hkbWFfZHJtX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4sIHUzMiBkcm1fZm91cmNjKQoreyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4aWxpbnhfeGRt YV92NGwyX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCSAgIHUzMiB2NGwyX2Zv dXJjYykKK3sgfQorCitpbnQgeGlsaW54X3hkbWFfZ2V0X2RybV92aWRfZm10cyhzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4sIHUzMiAqZm10X2NudCwKKwkJCQkgdTMyICoqZm10cyk7Cit7CisJcmV0dXJu IC1FTk9ERVY7Cit9CisKK2ludCB4aWxpbnhfeGRtYV9nZXRfdjRsMl92aWRfZm10cyhzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4sIHUzMiAqZm10X2NudCwKKwkJCQkgIHUzMiAqKmZtdHMpOworeworCXJl dHVybiAtRU5PREVWOworfQorI2VuZGlmCisKKyNlbmRpZiAvKl9fWElMSU5YX0ZSTUJVRl9ETUFf SCovCg==