From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alan Cox Subject: [PATCH 10/12] gma500: Add Oaktrail support Date: Thu, 03 Nov 2011 18:22:26 +0000 Message-ID: <20111103182226.29503.64295.stgit@bob.linux.org.uk> References: <20111103182046.29503.60288.stgit@bob.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lxorguk.ukuu.org.uk (lxorguk.ukuu.org.uk [81.2.110.251]) by gabe.freedesktop.org (Postfix) with ESMTP id 163AFA0C1E for ; Thu, 3 Nov 2011 11:11:33 -0700 (PDT) In-Reply-To: <20111103182046.29503.60288.stgit@bob.linux.org.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: airlied@linux.ie, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogQWxhbiBDb3ggPGFsYW5AbGludXguaW50ZWwuY29tPgoKT2FrdHJhaWwgKEdNQTYwMCkg aXMgZm91bmQgb24gc29tZSB0YWJsZXQvc2xhdGUgUEMgdHlwZSBzeXN0ZW1zLiBJdCdzIGEgYml0 CmRpZmZlcmVudCB0byB0aGUgR01BNTAwIGJ1dCBzaW1pbGFyIGVub3VnaCBpdCBtYWtlcyBzZW5z ZSB0byBwbHVnIGl0IGludG8KdGhlIHNhbWUgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTogQWxhbiBD b3ggPGFsYW5AbGludXguaW50ZWwuY29tPgotLS0KCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29h a3RyYWlsLmggICAgICAgICAgfCAgMjUyICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAw L29ha3RyYWlsX2NydGMuYyAgICAgfCAgNjEwICsrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2RldmljZS5jICAgfCAgNDg5ICsrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfaGRtaS5jICAgICB8ICA4NTIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFp bF9oZG1pX2kyYy5jIHwgIDMyNyArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9v YWt0cmFpbF9sdmRzLmMgICAgIHwgIDQwNiArKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQs IDI5MzYgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfZGV2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2hkbWkuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfaGRtaV9pMmMuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfbHZkcy5jCgoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWwuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvb2FrdHJhaWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y ZGExZjM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFp bC5oCkBAIC0wLDAgKzEsMjUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAo YykgMjAwNy0yMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJh bmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qIE1JRCBkZXZpY2Ugc3BlY2lmaWMgZGVzY3JpcHRvcnMg Ki8KKworc3RydWN0IG9ha3RyYWlsX3ZidCB7CisJczggc2lnbmF0dXJlWzRdOwkvKjQgYnl0ZXMs IiRHQ1QiICovCisJdTggcmV2aXNpb247CisJdTggc2l6ZTsKKwl1OCBjaGVja3N1bTsKKwl2b2lk ICpvYWt0cmFpbF9nY3Q7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgb2FrdHJhaWxfdGltaW5nX2lu Zm8geworCXUxNiBwaXhlbF9jbG9jazsKKwl1OCBoYWN0aXZlX2xvOworCXU4IGhibGFua19sbzsK Kwl1OCBoYmxhbmtfaGk6NDsKKwl1OCBoYWN0aXZlX2hpOjQ7CisJdTggdmFjdGl2ZV9sbzsKKwl1 OCB2YmxhbmtfbG87CisJdTggdmJsYW5rX2hpOjQ7CisJdTggdmFjdGl2ZV9oaTo0OworCXU4IGhz eW5jX29mZnNldF9sbzsKKwl1OCBoc3luY19wdWxzZV93aWR0aF9sbzsKKwl1OCB2c3luY19wdWxz ZV93aWR0aF9sbzo0OworCXU4IHZzeW5jX29mZnNldF9sbzo0OworCXU4IHZzeW5jX3B1bHNlX3dp ZHRoX2hpOjI7CisJdTggdnN5bmNfb2Zmc2V0X2hpOjI7CisJdTggaHN5bmNfcHVsc2Vfd2lkdGhf aGk6MjsKKwl1OCBoc3luY19vZmZzZXRfaGk6MjsKKwl1OCB3aWR0aF9tbV9sbzsKKwl1OCBoZWln aHRfbW1fbG87CisJdTggaGVpZ2h0X21tX2hpOjQ7CisJdTggd2lkdGhfbW1faGk6NDsKKwl1OCBo Ym9yZGVyOworCXU4IHZib3JkZXI7CisJdTggdW5rbm93bjA6MTsKKwl1OCBoc3luY19wb3NpdGl2 ZToxOworCXU4IHZzeW5jX3Bvc2l0aXZlOjE7CisJdTggc2VwYXJhdGVfc3luYzoyOworCXU4IHN0 ZXJlbzoxOworCXU4IHVua25vd242OjE7CisJdTggaW50ZXJsYWNlZDoxOworfSBfX3BhY2tlZDsK Kworc3RydWN0IGdjdF9yMTBfdGltaW5nX2luZm8geworCXUxNiBwaXhlbF9jbG9jazsKKwl1MzIg aGFjdGl2ZV9sbzo4OworCXUzMiBoYWN0aXZlX2hpOjQ7CisJdTMyIGhibGFua19sbzo4OworCXUz MiBoYmxhbmtfaGk6NDsKKwl1MzIgaHN5bmNfb2Zmc2V0X2xvOjg7CisJdTE2IGhzeW5jX29mZnNl dF9oaToyOworCXUxNiBoc3luY19wdWxzZV93aWR0aF9sbzo4OworCXUxNiBoc3luY19wdWxzZV93 aWR0aF9oaToyOworCXUxNiBoc3luY19wb3NpdGl2ZToxOworCXUxNiByc3ZkXzE6MzsKKwl1OCAg dmFjdGl2ZV9sbzo4OworCXUxNiB2YWN0aXZlX2hpOjQ7CisJdTE2IHZibGFua19sbzo4OworCXUx NiB2YmxhbmtfaGk6NDsKKwl1MTYgdnN5bmNfb2Zmc2V0X2xvOjQ7CisJdTE2IHZzeW5jX29mZnNl dF9oaToyOworCXUxNiB2c3luY19wdWxzZV93aWR0aF9sbzo0OworCXUxNiB2c3luY19wdWxzZV93 aWR0aF9oaToyOworCXUxNiB2c3luY19wb3NpdGl2ZToxOworCXUxNiByc3ZkXzI6MzsKK30gX19w YWNrZWQ7CisKK3N0cnVjdCBvYWt0cmFpbF9wYW5lbF9kZXNjcmlwdG9yX3YxIHsKKwl1MzIgUGFu ZWxfUG9ydF9Db250cm9sOyAvKiAxIGR3b3JkLCBSZWdpc3RlciAweDYxMTgwIGlmIExWRFMgKi8K KwkJCQkvKiAweDYxMTkwIGlmIE1JUEkgKi8KKwl1MzIgUGFuZWxfUG93ZXJfT25fU2VxdWVuY2lu ZzsvKjEgZHdvcmQsUmVnaXN0ZXIgMHg2MTIwOCwqLworCXUzMiBQYW5lbF9Qb3dlcl9PZmZfU2Vx dWVuY2luZzsvKjEgZHdvcmQsUmVnaXN0ZXIgMHg2MTIwQywqLworCXUzMiBQYW5lbF9Qb3dlcl9D eWNsZV9EZWxheV9hbmRfUmVmZXJlbmNlX0Rpdmlzb3I7LyogMSBkd29yZCAqLworCQkJCQkJLyog UmVnaXN0ZXIgMHg2MTIxMCAqLworCXN0cnVjdCBvYWt0cmFpbF90aW1pbmdfaW5mbyBEVEQ7Lyox OCBieXRlcywgU3RhbmRhcmQgZGVmaW5pdGlvbiAqLworCXUxNiBQYW5lbF9CYWNrbGlnaHRfSW52 ZXJ0ZXJfRGVzY3JpcHRvcjsvKiAxNiBiaXRzLCBhcyBmb2xsb3dzICovCisJCQkJLyogQml0IDAs IEZyZXF1ZW5jeSwgMTUgYml0cywwIC0gMzI3NjdIeiAqLworCQkJLyogQml0IDE1LCBQb2xhcml0 eSwgMSBiaXQsIDA6IE5vcm1hbCwgMTogSW52ZXJ0ZWQgKi8KKwl1MTYgUGFuZWxfTUlQSV9EaXNw bGF5X0Rlc2NyaXB0b3I7CisJCQkvKjE2IGJpdHMsIERlZmluZWQgYXMgZm9sbG93czogKi8KKwkJ CS8qIGlmIE1JUEksIDB4MDAwMCBpZiBMVkRTICovCisJCQkvKiBCaXQgMCwgVHlwZSwgMiBiaXRz LCAqLworCQkJLyogMDogVHlwZS0xLCAqLworCQkJLyogMTogVHlwZS0yLCAqLworCQkJLyogMjog VHlwZS0zLCAqLworCQkJLyogMzogVHlwZS00ICovCisJCQkvKiBCaXQgMiwgUGl4ZWwgRm9ybWF0 LCA0IGJpdHMgKi8KKwkJCS8qIEJpdDA6IDE2YnBwIChub3Qgc3VwcG9ydGVkIGluIExOQyksICov CisJCQkvKiBCaXQxOiAxOGJwcCBsb29zZWx5IHBhY2tlZCwgKi8KKwkJCS8qIEJpdDI6IDE4YnBw IHBhY2tlZCwgKi8KKwkJCS8qIEJpdDM6IDI0YnBwICovCisJCQkvKiBCaXQgNiwgUmVzZXJ2ZWQs IDIgYml0cywgMDBiICovCisJCQkvKiBCaXQgOCwgTWluaW11bSBTdXBwb3J0ZWQgRnJhbWUgUmF0 ZSwgNiBiaXRzLCAwIC0gNjNIeiAqLworCQkJLyogQml0IDE0LCBSZXNlcnZlZCwgMiBiaXRzLCAw MGIgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBvYWt0cmFpbF9wYW5lbF9kZXNjcmlwdG9yX3Yy IHsKKwl1MzIgUGFuZWxfUG9ydF9Db250cm9sOyAvKiAxIGR3b3JkLCBSZWdpc3RlciAweDYxMTgw IGlmIExWRFMgKi8KKwkJCQkvKiAweDYxMTkwIGlmIE1JUEkgKi8KKwl1MzIgUGFuZWxfUG93ZXJf T25fU2VxdWVuY2luZzsvKjEgZHdvcmQsUmVnaXN0ZXIgMHg2MTIwOCwqLworCXUzMiBQYW5lbF9Q b3dlcl9PZmZfU2VxdWVuY2luZzsvKjEgZHdvcmQsUmVnaXN0ZXIgMHg2MTIwQywqLworCXU4IFBh bmVsX1Bvd2VyX0N5Y2xlX0RlbGF5X2FuZF9SZWZlcmVuY2VfRGl2aXNvcjsvKiAxIGJ5dGUgKi8K KwkJCQkJCS8qIFJlZ2lzdGVyIDB4NjEyMTAgKi8KKwlzdHJ1Y3Qgb2FrdHJhaWxfdGltaW5nX2lu Zm8gRFREOy8qMTggYnl0ZXMsIFN0YW5kYXJkIGRlZmluaXRpb24gKi8KKwl1MTYgUGFuZWxfQmFj a2xpZ2h0X0ludmVydGVyX0Rlc2NyaXB0b3I7LyoxNiBiaXRzLCBhcyBmb2xsb3dzKi8KKwkJCQkv KkJpdCAwLCBGcmVxdWVuY3ksIDE2IGJpdHMsIDAgLSAzMjc2N0h6Ki8KKwl1OCBQYW5lbF9Jbml0 aWFsX0JyaWdodG5lc3M7LyogWzc6MF0gMCAtIDEwMCUgKi8KKwkJCS8qQml0IDcsIFBvbGFyaXR5 LCAxIGJpdCwwOiBOb3JtYWwsIDE6IEludmVydGVkKi8KKwl1MTYgUGFuZWxfTUlQSV9EaXNwbGF5 X0Rlc2NyaXB0b3I7CisJCQkvKjE2IGJpdHMsIERlZmluZWQgYXMgZm9sbG93czogKi8KKwkJCS8q IGlmIE1JUEksIDB4MDAwMCBpZiBMVkRTICovCisJCQkvKiBCaXQgMCwgVHlwZSwgMiBiaXRzLCAq LworCQkJLyogMDogVHlwZS0xLCAqLworCQkJLyogMTogVHlwZS0yLCAqLworCQkJLyogMjogVHlw ZS0zLCAqLworCQkJLyogMzogVHlwZS00ICovCisJCQkvKiBCaXQgMiwgUGl4ZWwgRm9ybWF0LCA0 IGJpdHMgKi8KKwkJCS8qIEJpdDA6IDE2YnBwIChub3Qgc3VwcG9ydGVkIGluIExOQyksICovCisJ CQkvKiBCaXQxOiAxOGJwcCBsb29zZWx5IHBhY2tlZCwgKi8KKwkJCS8qIEJpdDI6IDE4YnBwIHBh Y2tlZCwgKi8KKwkJCS8qIEJpdDM6IDI0YnBwICovCisJCQkvKiBCaXQgNiwgUmVzZXJ2ZWQsIDIg Yml0cywgMDBiICovCisJCQkvKiBCaXQgOCwgTWluaW11bSBTdXBwb3J0ZWQgRnJhbWUgUmF0ZSwg NiBiaXRzLCAwIC0gNjNIeiAqLworCQkJLyogQml0IDE0LCBSZXNlcnZlZCwgMiBiaXRzLCAwMGIg Ki8KK30gX19wYWNrZWQ7CisKK3VuaW9uIG9ha3RyYWlsX3BhbmVsX3J4IHsKKwlzdHJ1Y3Qgewor CQl1MTYgTnVtYmVyT2ZMYW5lczoyOyAvKk51bSBvZiBMYW5lcywgMiBiaXRzLDAgPSAxIGxhbmUs Ki8KKwkJCS8qIDEgPSAyIGxhbmVzLCAyID0gMyBsYW5lcywgMyA9IDQgbGFuZXMuICovCisJCXUx NiBNYXhMYW5lRnJlcTozOyAvKiAwOiAxMDBNSHosIDE6IDIwME1IeiwgMjogMzAwTUh6LCAqLwor CQkvKjM6IDQwME1IeiwgNDogNTAwTUh6LCA1OiA2MDBNSHosIDY6IDcwME1IeiwgNzogODAwTUh6 LiovCisJCXUxNiBTdXBwb3J0ZWRWaWRlb1RyYW5zZmVyTW9kZToyOyAvKjA6IE5vbi1idXJzdCBv bmx5ICovCisJCQkJCS8qIDE6IEJ1cnN0IGFuZCBub24tYnVyc3QgKi8KKwkJCQkJLyogMi8zOiBS ZXNlcnZlZCAqLworCQl1MTYgSFNDbGtCZWhhdmlvcjoxOyAvKjA6IENvbnRpbnVvdXMsIDE6IE5v bi1jb250aW51b3VzKi8KKwkJdTE2IER1b0Rpc3BsYXlTdXBwb3J0OjE7IC8qMSBiaXQsMDogTm8s IDE6IFllcyovCisJCXUxNiBFQ0NfQ2hlY2tzdW1DYXBhYmlsaXRpZXM6MTsvKjEgYml0LDA6IE5v LCAxOiBZZXMqLworCQl1MTYgQmlkaXJlY3Rpb25hbENvbW11bmljYXRpb246MTsvKjEgYml0LDA6 IE5vLCAxOiBZZXMgKi8KKwkJdTE2IFJzdmQ6NTsvKjUgYml0cywwMDAwMGIgKi8KKwl9IHBhbmVs cng7CisJdTE2IHBhbmVsX3JlY2VpdmVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IG9ha3RyYWls X2djdF92MSB7CisJdW5pb24geyAvKjggYml0cyxEZWZpbmVkIGFzIGZvbGxvd3M6ICovCisJCXN0 cnVjdCB7CisJCQl1OCBQYW5lbFR5cGU6NDsgLyo0IGJpdHMsIEJpdCBmaWVsZCBmb3IgcGFuZWxz Ki8KKwkJCQkJLyogMCAtIDM6IDAgPSBMVkRTLCAxID0gTUlQSSovCisJCQkJCS8qMiBiaXRzLFNw ZWNpZmllcyB3aGljaCBvZiB0aGUqLworCQkJdTggQm9vdFBhbmVsSW5kZXg6MjsKKwkJCQkJLyog NCBwYW5lbHMgdG8gdXNlIGJ5IGRlZmF1bHQqLworCQkJdTggQm9vdE1JUElfRFNJX1J4SW5kZXg6 MjsvKlNwZWNpZmllcyB3aGljaCBvZiovCisJCQkJCS8qIHRoZSA0IE1JUEkgRFNJIHJlY2VpdmVy cyB0byB1c2UqLworCQl9IFBEOworCQl1OCBQYW5lbERlc2NyaXB0b3I7CisJfTsKKwlzdHJ1Y3Qg b2FrdHJhaWxfcGFuZWxfZGVzY3JpcHRvcl92MSBwYW5lbFs0XTsvKnBhbmVsIGRlc2NycywzOCBi eXRlcyBlYWNoKi8KKwl1bmlvbiBvYWt0cmFpbF9wYW5lbF9yeCBwYW5lbHJ4WzRdOyAvKiBwYW5l bCByZWNlaXZlcnMqLworfSBfX3BhY2tlZDsKKworc3RydWN0IG9ha3RyYWlsX2djdF92MiB7CisJ dW5pb24geyAvKjggYml0cyxEZWZpbmVkIGFzIGZvbGxvd3M6ICovCisJCXN0cnVjdCB7CisJCQl1 OCBQYW5lbFR5cGU6NDsgLyo0IGJpdHMsIEJpdCBmaWVsZCBmb3IgcGFuZWxzKi8KKwkJCQkJLyog MCAtIDM6IDAgPSBMVkRTLCAxID0gTUlQSSovCisJCQkJCS8qMiBiaXRzLFNwZWNpZmllcyB3aGlj aCBvZiB0aGUqLworCQkJdTggQm9vdFBhbmVsSW5kZXg6MjsKKwkJCQkJLyogNCBwYW5lbHMgdG8g dXNlIGJ5IGRlZmF1bHQqLworCQkJdTggQm9vdE1JUElfRFNJX1J4SW5kZXg6MjsvKlNwZWNpZmll cyB3aGljaCBvZiovCisJCQkJCS8qIHRoZSA0IE1JUEkgRFNJIHJlY2VpdmVycyB0byB1c2UqLwor CQl9IFBEOworCQl1OCBQYW5lbERlc2NyaXB0b3I7CisJfTsKKwlzdHJ1Y3Qgb2FrdHJhaWxfcGFu ZWxfZGVzY3JpcHRvcl92MiBwYW5lbFs0XTsvKnBhbmVsIGRlc2NycywzOCBieXRlcyBlYWNoKi8K Kwl1bmlvbiBvYWt0cmFpbF9wYW5lbF9yeCBwYW5lbHJ4WzRdOyAvKiBwYW5lbCByZWNlaXZlcnMq LworfSBfX3BhY2tlZDsKKworc3RydWN0IG9ha3RyYWlsX2djdF9kYXRhIHsKKwl1OCBicGk7IC8q IGJvb3QgcGFuZWwgaW5kZXgsIG51bWJlciBvZiBwYW5lbCB1c2VkIGR1cmluZyBib290ICovCisJ dTggcHQ7IC8qIHBhbmVsIHR5cGUsIDQgYml0IGZpZWxkLCAwPWx2ZHMsIDE9bWlwaSAqLworCXN0 cnVjdCBvYWt0cmFpbF90aW1pbmdfaW5mbyBEVEQ7IC8qIHRpbWluZyBpbmZvIGZvciB0aGUgc2Vs ZWN0ZWQgcGFuZWwgKi8KKwl1MzIgUGFuZWxfUG9ydF9Db250cm9sOworCXUzMiBQUF9Pbl9TZXF1 ZW5jaW5nOy8qMSBkd29yZCxSZWdpc3RlciAweDYxMjA4LCovCisJdTMyIFBQX09mZl9TZXF1ZW5j aW5nOy8qMSBkd29yZCxSZWdpc3RlciAweDYxMjBDLCovCisJdTMyIFBQX0N5Y2xlX0RlbGF5Owor CXUxNiBQYW5lbF9CYWNrbGlnaHRfSW52ZXJ0ZXJfRGVzY3JpcHRvcjsKKwl1MTYgUGFuZWxfTUlQ SV9EaXNwbGF5X0Rlc2NyaXB0b3I7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1PREVfU0VUVElO R19JTl9DUlRDCQkweDEKKyNkZWZpbmUgTU9ERV9TRVRUSU5HX0lOX0VOQ09ERVIJCTB4MgorI2Rl ZmluZSBNT0RFX1NFVFRJTkdfT05fR09JTkcJCTB4MworI2RlZmluZSBNT0RFX1NFVFRJTkdfSU5f RFNSCQkweDQKKyNkZWZpbmUgTU9ERV9TRVRUSU5HX0VOQ09ERVJfRE9ORQkweDgKKworI2RlZmlu ZSBHQ1RfUjEwX0hFQURFUl9TSVpFCQkxNgorI2RlZmluZSBHQ1RfUjEwX0RJU1BMQVlfREVTQ19T SVpFCTI4CisKKy8qCisgKglNb29yZXN0b3duIEhETUkgaW50ZXJmYWNlcworICovCisKK3N0cnVj dCBvYWt0cmFpbF9oZG1pX2RldiB7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwl2b2lkIF9faW9t ZW0gKnJlZ3M7CisJdW5zaWduZWQgaW50IG1taW8sIG1taW9fbGVuOworCWludCBkcG1zX21vZGU7 CisJc3RydWN0IGhkbWlfaTJjX2RldiAqaTJjX2RldjsKKworCS8qIHJlZ2lzdGVyIHN0YXRlICov CisJdTMyIHNhdmVEUExMX0NUUkw7CisJdTMyIHNhdmVEUExMX0RJVl9DVFJMOworCXUzMiBzYXZl RFBMTF9BREpVU1Q7CisJdTMyIHNhdmVEUExMX1VQREFURTsKKwl1MzIgc2F2ZURQTExfQ0xLX0VO QUJMRTsKKwl1MzIgc2F2ZVBDSF9IVE9UQUxfQjsKKwl1MzIgc2F2ZVBDSF9IQkxBTktfQjsKKwl1 MzIgc2F2ZVBDSF9IU1lOQ19COworCXUzMiBzYXZlUENIX1ZUT1RBTF9COworCXUzMiBzYXZlUENI X1ZCTEFOS19COworCXUzMiBzYXZlUENIX1ZTWU5DX0I7CisJdTMyIHNhdmVQQ0hfUElQRUJDT05G OworCXUzMiBzYXZlUENIX1BJUEVCU1JDOworfTsKKworZXh0ZXJuIHZvaWQgb2FrdHJhaWxfaGRt aV9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9ha3RyYWlsX2hk bWlfdGVhcmRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50ICBvYWt0cmFp bF9oZG1pX2kyY19pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgb2FrdHJh aWxfaGRtaV9pMmNfZXhpdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIG9ha3Ry YWlsX2hkbWlfc2F2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9ha3Ry YWlsX2hkbWlfcmVzdG9yZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9h a3RyYWlsX2hkbWlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgcHNiX2ludGVs X21vZGVfZGV2aWNlICptb2RlX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL29ha3RyYWlsX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfY3J0 Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOWM3OTEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2NydGMuYwpAQCAtMCww ICsxLDYxMCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhP VVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmts aW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisj aW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisj aW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJmcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUg InBzYl9kcnYuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfZHJ2LmgiCisjaW5jbHVkZSAicHNiX2lu dGVsX3JlZy5oIgorI2luY2x1ZGUgInBzYl9pbnRlbF9kaXNwbGF5LmgiCisjaW5jbHVkZSAicG93 ZXIuaCIKKworc3RydWN0IHBzYl9pbnRlbF9yYW5nZV90IHsKKwlpbnQgbWluLCBtYXg7Cit9Owor CitzdHJ1Y3Qgb2FrdHJhaWxfbGltaXRfdCB7CisJc3RydWN0IHBzYl9pbnRlbF9yYW5nZV90IGRv dCwgbSwgcDE7Cit9OworCitzdHJ1Y3Qgb2FrdHJhaWxfY2xvY2tfdCB7CisJLyogZGVyaXZlZCB2 YWx1ZXMgKi8KKwlpbnQgZG90OworCWludCBtOworCWludCBwMTsKK307CisKKyNkZWZpbmUgTVJT VF9MSU1JVF9MVkRTXzEwMEwJICAgIDAKKyNkZWZpbmUgTVJTVF9MSU1JVF9MVkRTXzgzCSAgICAx CisjZGVmaW5lIE1SU1RfTElNSVRfTFZEU18xMDAJICAgIDIKKworI2RlZmluZSBNUlNUX0RPVF9N SU4JCSAgMTk3NTAKKyNkZWZpbmUgTVJTVF9ET1RfTUFYCQkgIDEyMDAwMAorI2RlZmluZSBNUlNU X01fTUlOXzEwMEwJCSAgICAyMAorI2RlZmluZSBNUlNUX01fTUlOXzEwMAkJICAgIDEwCisjZGVm aW5lIE1SU1RfTV9NSU5fODMJCSAgICAxMgorI2RlZmluZSBNUlNUX01fTUFYXzEwMEwJCSAgICAz NAorI2RlZmluZSBNUlNUX01fTUFYXzEwMAkJICAgIDE3CisjZGVmaW5lIE1SU1RfTV9NQVhfODMJ CSAgICAyMAorI2RlZmluZSBNUlNUX1AxX01JTgkJICAgIDIKKyNkZWZpbmUgTVJTVF9QMV9NQVhf MAkJICAgIDcKKyNkZWZpbmUgTVJTVF9QMV9NQVhfMQkJICAgIDgKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBvYWt0cmFpbF9saW1pdF90IG9ha3RyYWlsX2xpbWl0c1tdID0geworCXsJCQkvKiBNUlNU X0xJTUlUX0xWRFNfMTAwTCAqLworCSAuZG90ID0gey5taW4gPSBNUlNUX0RPVF9NSU4sIC5tYXgg PSBNUlNUX0RPVF9NQVh9LAorCSAubSA9IHsubWluID0gTVJTVF9NX01JTl8xMDBMLCAubWF4ID0g TVJTVF9NX01BWF8xMDBMfSwKKwkgLnAxID0gey5taW4gPSBNUlNUX1AxX01JTiwgLm1heCA9IE1S U1RfUDFfTUFYXzF9LAorCSB9LAorCXsJCQkvKiBNUlNUX0xJTUlUX0xWRFNfODNMICovCisJIC5k b3QgPSB7Lm1pbiA9IE1SU1RfRE9UX01JTiwgLm1heCA9IE1SU1RfRE9UX01BWH0sCisJIC5tID0g ey5taW4gPSBNUlNUX01fTUlOXzgzLCAubWF4ID0gTVJTVF9NX01BWF84M30sCisJIC5wMSA9IHsu bWluID0gTVJTVF9QMV9NSU4sIC5tYXggPSBNUlNUX1AxX01BWF8wfSwKKwkgfSwKKwl7CQkJLyog TVJTVF9MSU1JVF9MVkRTXzEwMCAqLworCSAuZG90ID0gey5taW4gPSBNUlNUX0RPVF9NSU4sIC5t YXggPSBNUlNUX0RPVF9NQVh9LAorCSAubSA9IHsubWluID0gTVJTVF9NX01JTl8xMDAsIC5tYXgg PSBNUlNUX01fTUFYXzEwMH0sCisJIC5wMSA9IHsubWluID0gTVJTVF9QMV9NSU4sIC5tYXggPSBN UlNUX1AxX01BWF8xfSwKKwkgfSwKK307CisKKyNkZWZpbmUgTVJTVF9NX01JTgkgICAgMTAKK3N0 YXRpYyBjb25zdCB1MzIgb2FrdHJhaWxfbV9jb252ZXJ0c1tdID0geworCTB4MkIsIDB4MTUsIDB4 MkEsIDB4MzUsIDB4MUEsIDB4MEQsIDB4MjYsIDB4MzMsIDB4MTksIDB4MkMsCisJMHgzNiwgMHgz QiwgMHgxRCwgMHgyRSwgMHgzNywgMHgxQiwgMHgyRCwgMHgxNiwgMHgwQiwgMHgyNSwKKwkweDEy LCAweDA5LCAweDI0LCAweDMyLCAweDM5LCAweDFjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBvYWt0cmFpbF9saW1pdF90ICpvYWt0cmFpbF9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cit7CisJY29uc3Qgc3RydWN0IG9ha3RyYWlsX2xpbWl0X3QgKmxpbWl0ID0gTlVMTDsKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChwc2JfaW50ZWxfcGlwZV9oYXNf dHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykKKwkgICAgfHwgcHNiX2ludGVsX3BpcGVfaGFz X3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX01JUEkpKSB7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNv cmVfZnJlcSkgeworCQljYXNlIDEwMDoKKwkJCWxpbWl0ID0gJm9ha3RyYWlsX2xpbWl0c1tNUlNU X0xJTUlUX0xWRFNfMTAwTF07CisJCQlicmVhazsKKwkJY2FzZSAxNjY6CisJCQlsaW1pdCA9ICZv YWt0cmFpbF9saW1pdHNbTVJTVF9MSU1JVF9MVkRTXzgzXTsKKwkJCWJyZWFrOworCQljYXNlIDIw MDoKKwkJCWxpbWl0ID0gJm9ha3RyYWlsX2xpbWl0c1tNUlNUX0xJTUlUX0xWRFNfMTAwXTsKKwkJ CWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJbGltaXQgPSBOVUxMOworCQlkZXZfZXJyKGRldi0+ ZGV2LCAib2FrdHJhaWxfbGltaXQgV3JvbmcgZGlzcGxheSB0eXBlLlxuIik7CisJfQorCisJcmV0 dXJuIGxpbWl0OworfQorCisvKiogRGVyaXZlIHRoZSBwaXhlbCBjbG9jayBmb3IgdGhlIGdpdmVu IHJlZmNsayBhbmQgZGl2aXNvcnMgZm9yIDh4eCBjaGlwcy4gKi8KK3N0YXRpYyB2b2lkIG9ha3Ry YWlsX2Nsb2NrKGludCByZWZjbGssIHN0cnVjdCBvYWt0cmFpbF9jbG9ja190ICpjbG9jaykKK3sK KwljbG9jay0+ZG90ID0gKHJlZmNsayAqIGNsb2NrLT5tKSAvICgxNCAqIGNsb2NrLT5wMSk7Cit9 CisKK3ZvaWQgbXJzdFByaW50UGxsKGNoYXIgKnByZWZpeCwgc3RydWN0IG9ha3RyYWlsX2Nsb2Nr X3QgKmNsb2NrKQoreworCXByX2RlYnVnKCIlczogZG90Y2xvY2sgPSAlZCwgIG0gPSAlZCwgcDEg PSAlZC5cbiIsCisJICAgICBwcmVmaXgsIGNsb2NrLT5kb3QsIGNsb2NrLT5tLCBjbG9jay0+cDEp OworfQorCisvKioKKyAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVk IHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbiByZWZjbGssCisgKiBvciBGQUxTRS4gIERpdmlz b3IgdmFsdWVzIGFyZSB0aGUgYWN0dWFsIGRpdmlzb3JzIGZvcgorICovCitzdGF0aWMgYm9vbAor bXJzdEZpbmRCZXN0UExMKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHRhcmdldCwgaW50IHJl ZmNsaywKKwkJc3RydWN0IG9ha3RyYWlsX2Nsb2NrX3QgKmJlc3RfY2xvY2spCit7CisJc3RydWN0 IG9ha3RyYWlsX2Nsb2NrX3QgY2xvY2s7CisJY29uc3Qgc3RydWN0IG9ha3RyYWlsX2xpbWl0X3Qg KmxpbWl0ID0gb2FrdHJhaWxfbGltaXQoY3J0Yyk7CisJaW50IGVyciA9IHRhcmdldDsKKworCW1l bXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKKworCWZvciAoY2xvY2su bSA9IGxpbWl0LT5tLm1pbjsgY2xvY2subSA8PSBsaW1pdC0+bS5tYXg7IGNsb2NrLm0rKykgewor CQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEgPD0gbGltaXQtPnAxLm1h eDsKKwkJICAgICBjbG9jay5wMSsrKSB7CisJCQlpbnQgdGhpc19lcnI7CisKKwkJCW9ha3RyYWls X2Nsb2NrKHJlZmNsaywgJmNsb2NrKTsKKworCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0g dGFyZ2V0KTsKKwkJCWlmICh0aGlzX2VyciA8IGVycikgeworCQkJCSpiZXN0X2Nsb2NrID0gY2xv Y2s7CisJCQkJZXJyID0gdGhpc19lcnI7CisJCQl9CisJCX0KKwl9CisJZGV2X2RiZyhjcnRjLT5k ZXYtPmRldiwgIm1yc3RGaW5kQmVzdFBMTCBlcnIgPSAlZC5cbiIsIGVycik7CisJcmV0dXJuIGVy ciAhPSB0YXJnZXQ7Cit9CisKKy8qKgorICogU2V0cyB0aGUgcG93ZXIgbWFuYWdlbWVudCBtb2Rl IG9mIHRoZSBwaXBlIGFuZCBwbGFuZS4KKyAqCisgKiBUaGlzIGNvZGUgc2hvdWxkIHByb2JhYmx5 IGdyb3cgc3VwcG9ydCBmb3IgdHVybmluZyB0aGUgY3Vyc29yIG9mZiBhbmQgYmFjaworICogb24g YXBwcm9wcmlhdGVseSBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlJ3JlIHR1cm5pbmcgdGhlIHBpcGUg b2ZmL29uLgorICovCitzdGF0aWMgdm9pZCBvYWt0cmFpbF9jcnRjX2RwbXMoc3RydWN0IGRybV9j cnRjICpjcnRjLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50 ZWxfY3J0YyhjcnRjKTsKKwlpbnQgcGlwZSA9IHBzYl9pbnRlbF9jcnRjLT5waXBlOworCWludCBk cGxsX3JlZyA9IChwaXBlID09IDApID8gTVJTVF9EUExMX0EgOiBEUExMX0I7CisJaW50IGRzcGNu dHJfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBQ05UUiA6IERTUEJDTlRSOworCWludCBkc3BiYXNl X3JlZyA9IChwaXBlID09IDApID8gTVJTVF9EU1BBQkFTRSA6IERTUEJCQVNFOworCWludCBwaXBl Y29uZl9yZWcgPSAocGlwZSA9PSAwKSA/IFBJUEVBQ09ORiA6IFBJUEVCQ09ORjsKKwl1MzIgdGVt cDsKKwlib29sIGVuYWJsZWQ7CisKKwlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQor CQlyZXR1cm47CisKKwkvKiBYWFg6IFdoZW4gb3VyIG91dHB1dHMgYXJlIGFsbCB1bmF3YXJlIG9m IERQTVMgbW9kZXMgb3RoZXIgdGhhbiBvZmYKKwkgKiBhbmQgb24sIHdlIHNob3VsZCBtYXAgdGhv c2UgbW9kZXMgdG8gRFJNX01PREVfRFBNU19PRkYgaW4gdGhlIENSVEMuCisJICovCisJc3dpdGNo IChtb2RlKSB7CisJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgorCWNhc2UgRFJNX01PREVfRFBNU19T VEFOREJZOgorCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgorCQkvKiBFbmFibGUgdGhlIERQ TEwgKi8KKwkJdGVtcCA9IFJFR19SRUFEKGRwbGxfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRFBMTF9W Q09fRU5BQkxFKSA9PSAwKSB7CisJCQlSRUdfV1JJVEUoZHBsbF9yZWcsIHRlbXApOworCQkJUkVH X1JFQUQoZHBsbF9yZWcpOworCQkJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUu ICovCisJCQl1ZGVsYXkoMTUwKTsKKwkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCB8IERQTExf VkNPX0VOQUJMRSk7CisJCQlSRUdfUkVBRChkcGxsX3JlZyk7CisJCQkvKiBXYWl0IGZvciB0aGUg Y2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KKwkJCXVkZWxheSgxNTApOworCQkJUkVHX1dSSVRFKGRw bGxfcmVnLCB0ZW1wIHwgRFBMTF9WQ09fRU5BQkxFKTsKKwkJCVJFR19SRUFEKGRwbGxfcmVnKTsK KwkJCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCQkJdWRlbGF5KDE1 MCk7CisJCX0KKwkJLyogRW5hYmxlIHRoZSBwaXBlICovCisJCXRlbXAgPSBSRUdfUkVBRChwaXBl Y29uZl9yZWcpOworCQlpZiAoKHRlbXAgJiBQSVBFQUNPTkZfRU5BQkxFKSA9PSAwKQorCQkJUkVH X1dSSVRFKHBpcGVjb25mX3JlZywgdGVtcCB8IFBJUEVBQ09ORl9FTkFCTEUpOworCQkvKiBFbmFi bGUgdGhlIHBsYW5lICovCisJCXRlbXAgPSBSRUdfUkVBRChkc3BjbnRyX3JlZyk7CisJCWlmICgo dGVtcCAmIERJU1BMQVlfUExBTkVfRU5BQkxFKSA9PSAwKSB7CisJCQlSRUdfV1JJVEUoZHNwY250 cl9yZWcsCisJCQkJICB0ZW1wIHwgRElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJLyogRmx1c2gg dGhlIHBsYW5lIGNoYW5nZXMgKi8KKwkJCVJFR19XUklURShkc3BiYXNlX3JlZywgUkVHX1JFQUQo ZHNwYmFzZV9yZWcpKTsKKwkJfQorCisJCXBzYl9pbnRlbF9jcnRjX2xvYWRfbHV0KGNydGMpOwor CisJCS8qIEdpdmUgdGhlIG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRvIGVuYWJsZQorCQkgICBp ZiBpdCdzIG9uIHRoaXMgcGlwZSAqLworCQkvKiBwc2JfaW50ZWxfY3J0Y19kcG1zX3ZpZGVvKGNy dGMsIHRydWUpOyBUT0RPICovCisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJ CS8qIEdpdmUgdGhlIG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRvIGRpc2FibGUKKwkJICogaWYg aXQncyBvbiB0aGlzIHBpcGUgKi8KKwkJLyogcHNiX2ludGVsX2NydGNfZHBtc192aWRlbyhjcnRj LCBGQUxTRSk7IFRPRE8gKi8KKworCQkvKiBEaXNhYmxlIHRoZSBWR0EgcGxhbmUgdGhhdCB3ZSBu ZXZlciB1c2UgKi8KKwkJUkVHX1dSSVRFKFZHQUNOVFJMLCBWR0FfRElTUF9ESVNBQkxFKTsKKwkJ LyogRGlzYWJsZSBkaXNwbGF5IHBsYW5lICovCisJCXRlbXAgPSBSRUdfUkVBRChkc3BjbnRyX3Jl Zyk7CisJCWlmICgodGVtcCAmIERJU1BMQVlfUExBTkVfRU5BQkxFKSAhPSAwKSB7CisJCQlSRUdf V1JJVEUoZHNwY250cl9yZWcsCisJCQkJICB0ZW1wICYgfkRJU1BMQVlfUExBTkVfRU5BQkxFKTsK KwkJCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCisJCQlSRUdfV1JJVEUoZHNwYmFzZV9y ZWcsIFJFR19SRUFEKGRzcGJhc2VfcmVnKSk7CisJCQlSRUdfUkVBRChkc3BiYXNlX3JlZyk7CisJ CX0KKworCQkvKiBOZXh0LCBkaXNhYmxlIGRpc3BsYXkgcGlwZXMgKi8KKwkJdGVtcCA9IFJFR19S RUFEKHBpcGVjb25mX3JlZyk7CisJCWlmICgodGVtcCAmIFBJUEVBQ09ORl9FTkFCTEUpICE9IDAp IHsKKwkJCVJFR19XUklURShwaXBlY29uZl9yZWcsIHRlbXAgJiB+UElQRUFDT05GX0VOQUJMRSk7 CisJCQlSRUdfUkVBRChwaXBlY29uZl9yZWcpOworCQl9CisJCS8qIFdhaXQgZm9yIGZvciB0aGUg cGlwZSBkaXNhYmxlIHRvIHRha2UgZWZmZWN0LiAqLworCQlwc2JfaW50ZWxfd2FpdF9mb3JfdmJs YW5rKGRldik7CisKKwkJdGVtcCA9IFJFR19SRUFEKGRwbGxfcmVnKTsKKwkJaWYgKCh0ZW1wICYg RFBMTF9WQ09fRU5BQkxFKSAhPSAwKSB7CisJCQlSRUdfV1JJVEUoZHBsbF9yZWcsIHRlbXAgJiB+ RFBMTF9WQ09fRU5BQkxFKTsKKwkJCVJFR19SRUFEKGRwbGxfcmVnKTsKKwkJfQorCisJCS8qIFdh aXQgZm9yIHRoZSBjbG9ja3MgdG8gdHVybiBvZmYuICovCisJCXVkZWxheSgxNTApOworCQlicmVh azsKKwl9CisKKwllbmFibGVkID0gY3J0Yy0+ZW5hYmxlZCAmJiBtb2RlICE9IERSTV9NT0RFX0RQ TVNfT0ZGOworCisJLypTZXQgRklGTyBXYXRlcm1hcmtzKi8KKwlSRUdfV1JJVEUoRFNQQVJCLCAw eDNGRkYpOworCVJFR19XUklURShEU1BGVzEsIDB4M0Y4ODA4MEEpOworCVJFR19XUklURShEU1BG VzIsIDB4MGIwNjA4MDgpOworCVJFR19XUklURShEU1BGVzMsIDB4MCk7CisJUkVHX1dSSVRFKERT UEZXNCwgMHgwODAzMDQwNCk7CisJUkVHX1dSSVRFKERTUEZXNSwgMHgwNDA0MDQwNCk7CisJUkVH X1dSSVRFKERTUEZXNiwgMHg3OCk7CisJUkVHX1dSSVRFKDB4NzA0MDAsIFJFR19SRUFEKDB4NzA0 MDApIHwgMHg0MDAwKTsKKwkvKiBNdXN0IHdyaXRlIEJpdCAxNCBvZiB0aGUgQ2hpY2tlbiBCaXQg UmVnaXN0ZXIgKi8KKworCWdtYV9wb3dlcl9lbmQoZGV2KTsKK30KKworLyoqCisgKiBSZXR1cm4g dGhlIHBpcGUgY3VycmVudGx5IGNvbm5lY3RlZCB0byB0aGUgcGFuZWwgZml0dGVyLAorICogb3Ig LTEgaWYgdGhlIHBhbmVsIGZpdHRlciBpcyBub3QgcHJlc2VudCBvciBub3QgaW4gdXNlCisgKi8K K3N0YXRpYyBpbnQgb2FrdHJhaWxfcGFuZWxfZml0dGVyX3BpcGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwl1MzIgcGZpdF9jb250cm9sOworCisJcGZpdF9jb250cm9sID0gUkVHX1JFQUQo UEZJVF9DT05UUk9MKTsKKworCS8qIFNlZSBpZiB0aGUgcGFuZWwgZml0dGVyIGlzIGluIHVzZSAq LworCWlmICgocGZpdF9jb250cm9sICYgUEZJVF9FTkFCTEUpID09IDApCisJCXJldHVybiAtMTsK KwlyZXR1cm4gKHBmaXRfY29udHJvbCA+PiAyOSkgJiAzOworfQorCitzdGF0aWMgaW50IG9ha3Ry YWlsX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqYWRqdXN0ZWRfbW9kZSwKKwkJCSAgICAgIGludCB4LCBpbnQgeSwKKwkJCSAgICAgIHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19w c2JfaW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHBpcGUgPSBwc2JfaW50ZWxfY3J0Yy0+cGlwZTsKKwlp bnQgZnBfcmVnID0gKHBpcGUgPT0gMCkgPyBNUlNUX0ZQQTAgOiBGUEIwOworCWludCBkcGxsX3Jl ZyA9IChwaXBlID09IDApID8gTVJTVF9EUExMX0EgOiBEUExMX0I7CisJaW50IGRzcGNudHJfcmVn ID0gKHBpcGUgPT0gMCkgPyBEU1BBQ05UUiA6IERTUEJDTlRSOworCWludCBwaXBlY29uZl9yZWcg PSAocGlwZSA9PSAwKSA/IFBJUEVBQ09ORiA6IFBJUEVCQ09ORjsKKwlpbnQgaHRvdF9yZWcgPSAo cGlwZSA9PSAwKSA/IEhUT1RBTF9BIDogSFRPVEFMX0I7CisJaW50IGhibGFua19yZWcgPSAocGlw ZSA9PSAwKSA/IEhCTEFOS19BIDogSEJMQU5LX0I7CisJaW50IGhzeW5jX3JlZyA9IChwaXBlID09 IDApID8gSFNZTkNfQSA6IEhTWU5DX0I7CisJaW50IHZ0b3RfcmVnID0gKHBpcGUgPT0gMCkgPyBW VE9UQUxfQSA6IFZUT1RBTF9COworCWludCB2YmxhbmtfcmVnID0gKHBpcGUgPT0gMCkgPyBWQkxB TktfQSA6IFZCTEFOS19COworCWludCB2c3luY19yZWcgPSAocGlwZSA9PSAwKSA/IFZTWU5DX0Eg OiBWU1lOQ19COworCWludCBwaXBlc3JjX3JlZyA9IChwaXBlID09IDApID8gUElQRUFTUkMgOiBQ SVBFQlNSQzsKKwlpbnQgcmVmY2xrID0gMDsKKwlzdHJ1Y3Qgb2FrdHJhaWxfY2xvY2tfdCBjbG9j azsKKwl1MzIgZHBsbCA9IDAsIGZwID0gMCwgZHNwY250ciwgcGlwZWNvbmY7CisJYm9vbCBvaywg aXNfc2R2byA9IGZhbHNlOworCWJvb2wgaXNfY3J0ID0gZmFsc2UsIGlzX2x2ZHMgPSBmYWxzZSwg aXNfdHYgPSBmYWxzZTsKKwlib29sIGlzX21pcGkgPSBmYWxzZTsKKwlzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBwc2JfaW50 ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0ID0gTlVMTDsKKwl1aW50NjRfdCBzY2FsaW5nVHlw ZSA9IERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU47CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyOworCisJaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKKwkJcmV0dXJuIDA7CisK KwltZW1jcHkoJnBzYl9pbnRlbF9jcnRjLT5zYXZlZF9tb2RlLAorCQltb2RlLAorCQlzaXplb2Yo c3RydWN0IGRybV9kaXNwbGF5X21vZGUpKTsKKwltZW1jcHkoJnBzYl9pbnRlbF9jcnRjLT5zYXZl ZF9hZGp1c3RlZF9tb2RlLAorCQlhZGp1c3RlZF9tb2RlLAorCQlzaXplb2Yoc3RydWN0IGRybV9k aXNwbGF5X21vZGUpKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJm1vZGVfY29u ZmlnLT5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKworCQlpZiAoZW5jb2Rlci0+Y3J0YyAhPSBjcnRj KQorCQkJY29udGludWU7CisKKwkJcHNiX2ludGVsX291dHB1dCA9IGVuY190b19wc2JfaW50ZWxf b3V0cHV0KGVuY29kZXIpOworCQlzd2l0Y2ggKHBzYl9pbnRlbF9vdXRwdXQtPnR5cGUpIHsKKwkJ Y2FzZSBJTlRFTF9PVVRQVVRfTFZEUzoKKwkJCWlzX2x2ZHMgPSB0cnVlOworCQkJYnJlYWs7CisJ CWNhc2UgSU5URUxfT1VUUFVUX1NEVk86CisJCQlpc19zZHZvID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQljYXNlIElOVEVMX09VVFBVVF9UVk9VVDoKKwkJCWlzX3R2ID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQljYXNlIElOVEVMX09VVFBVVF9BTkFMT0c6CisJCQlpc19jcnQgPSB0cnVlOworCQkJYnJlYWs7 CisJCWNhc2UgSU5URUxfT1VUUFVUX01JUEk6CisJCQlpc19taXBpID0gdHJ1ZTsKKwkJCWJyZWFr OworCQl9CisJfQorCisJLyogRGlzYWJsZSB0aGUgVkdBIHBsYW5lIHRoYXQgd2UgbmV2ZXIgdXNl ICovCisJUkVHX1dSSVRFKFZHQUNOVFJMLCBWR0FfRElTUF9ESVNBQkxFKTsKKworCS8qIERpc2Fi bGUgdGhlIHBhbmVsIGZpdHRlciBpZiBpdCB3YXMgb24gb3VyIHBpcGUgKi8KKwlpZiAob2FrdHJh aWxfcGFuZWxfZml0dGVyX3BpcGUoZGV2KSA9PSBwaXBlKQorCQlSRUdfV1JJVEUoUEZJVF9DT05U Uk9MLCAwKTsKKworCVJFR19XUklURShwaXBlc3JjX3JlZywKKwkJICAoKG1vZGUtPmNydGNfaGRp c3BsYXkgLSAxKSA8PCAxNikgfAorCQkgIChtb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkpOworCisJ aWYgKHBzYl9pbnRlbF9vdXRwdXQpCisJCWRybV9jb25uZWN0b3JfcHJvcGVydHlfZ2V0X3ZhbHVl KCZwc2JfaW50ZWxfb3V0cHV0LT5iYXNlLAorCQkJZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21v ZGVfcHJvcGVydHksICZzY2FsaW5nVHlwZSk7CisKKwlpZiAoc2NhbGluZ1R5cGUgPT0gRFJNX01P REVfU0NBTEVfTk9fU0NBTEUpIHsKKwkJLyogTW9vcmVzdG93biBkb2Vzbid0IGhhdmUgcmVnaXN0 ZXIgc3VwcG9ydCBmb3IgY2VudGVyaW5nIHNvCisJCSAqIHdlIG5lZWQgdG8gbWVzcyB3aXRoIHRo ZSBoL3ZibGFuayBhbmQgaC92c3luYyBzdGFydCBhbmQKKwkJICogZW5kcyB0byBnZXQgY2VudGVy aW5nICovCisJCWludCBvZmZzZXRYID0gMCwgb2Zmc2V0WSA9IDA7CisKKwkJb2Zmc2V0WCA9IChh ZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0KKwkJCSAgIG1vZGUtPmNydGNfaGRpc3BsYXkp IC8gMjsKKwkJb2Zmc2V0WSA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0KKwkJCSAg IG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMjsKKworCQlSRUdfV1JJVEUoaHRvdF9yZWcsIChtb2Rl LT5jcnRjX2hkaXNwbGF5IC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbCAt IDEpIDw8IDE2KSk7CisJCVJFR19XUklURSh2dG90X3JlZywgKG1vZGUtPmNydGNfdmRpc3BsYXkg LSAxKSB8CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsIC0gMSkgPDwgMTYpKTsKKwkJ UkVHX1dSSVRFKGhibGFua19yZWcsCisJCQkoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3Rh cnQgLSBvZmZzZXRYIC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQg LSBvZmZzZXRYIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dSSVRFKGhzeW5jX3JlZywKKwkJCShhZGp1 c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gb2Zmc2V0WCAtIDEpIHwKKwkJCSgoYWRqdXN0 ZWRfbW9kZS0+Y3J0Y19oc3luY19lbmQgLSBvZmZzZXRYIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dS SVRFKHZibGFua19yZWcsCisJCQkoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgLSBv ZmZzZXRZIC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19lbmQgLSBvZmZz ZXRZIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dSSVRFKHZzeW5jX3JlZywKKwkJCShhZGp1c3RlZF9t b2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gb2Zmc2V0WSAtIDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9k ZS0+Y3J0Y192c3luY19lbmQgLSBvZmZzZXRZIC0gMSkgPDwgMTYpKTsKKwl9IGVsc2UgeworCQlS RUdfV1JJVEUoaHRvdF9yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgfAor CQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklU RSh2dG90X3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSAxKSB8CisJCQkoKGFk anVzdGVkX21vZGUtPmNydGNfdnRvdGFsIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dSSVRFKGhibGFu a19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19zdGFydCAtIDEpIHwKKwkJCSgoYWRq dXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dSSVRFKGhz eW5jX3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSAxKSB8CisJCQkoKGFk anVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dSSVRFKHZi bGFua19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCAtIDEpIHwKKwkJCSgo YWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gMSkgPDwgMTYpKTsKKwkJUkVHX1dSSVRF KHZzeW5jX3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSAxKSB8CisJCQko KGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kIC0gMSkgPDwgMTYpKTsKKwl9CisKKwkvKiBG bHVzaCB0aGUgcGxhbmUgY2hhbmdlcyAqLworCXsKKwkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9m dW5jcyAqY3J0Y19mdW5jcyA9CisJCSAgICBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKwkJY3J0Y19m dW5jcy0+bW9kZV9zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOworCX0KKworCS8qIHNldHVw IHBpcGVjb25mICovCisJcGlwZWNvbmYgPSBSRUdfUkVBRChwaXBlY29uZl9yZWcpOworCisJLyog U2V0IHVwIHRoZSBkaXNwbGF5IHBsYW5lIHJlZ2lzdGVyICovCisJZHNwY250ciA9IFJFR19SRUFE KGRzcGNudHJfcmVnKTsKKwlkc3BjbnRyIHw9IERJU1BQTEFORV9HQU1NQV9FTkFCTEU7CisKKwlp ZiAocGlwZSA9PSAwKQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRV9BOworCWVsc2UK KwkJZHNwY250ciB8PSBESVNQUExBTkVfU0VMX1BJUEVfQjsKKworCWRldl9wcml2LT5kc3BjbnRy ID0gZHNwY250ciB8PSBESVNQTEFZX1BMQU5FX0VOQUJMRTsKKwlkZXZfcHJpdi0+cGlwZWNvbmYg PSBwaXBlY29uZiB8PSBQSVBFQUNPTkZfRU5BQkxFOworCisJaWYgKGlzX21pcGkpCisJCWdvdG8g b2FrdHJhaWxfY3J0Y19tb2RlX3NldF9leGl0OworCisJcmVmY2xrID0gZGV2X3ByaXYtPmNvcmVf ZnJlcSAqIDEwMDA7CisKKwlkcGxsID0gMDsJCS8qQklUMTYgPSAwIGZvciAxMDBNSHogcmVmZXJl bmNlICovCisKKwlvayA9IG1yc3RGaW5kQmVzdFBMTChjcnRjLCBhZGp1c3RlZF9tb2RlLT5jbG9j aywgcmVmY2xrLCAmY2xvY2spOworCisJaWYgKCFvaykgeworCQlkZXZfZGJnKGRldi0+ZGV2LCAi bXJzdEZpbmRCZXN0UExMIGZhaWwgaW4gb2FrdHJhaWxfY3J0Y19tb2RlX3NldC5cbiIpOworCX0g ZWxzZSB7CisJCWRldl9kYmcoZGV2LT5kZXYsICJvYWt0cmFpbF9jcnRjX21vZGVfc2V0IHBpeGVs IGNsb2NrID0gJWQsIgorCQkJICJtID0gJXgsIHAxID0gJXguXG4iLCBjbG9jay5kb3QsIGNsb2Nr Lm0sCisJCQkgY2xvY2sucDEpOworCX0KKworCWZwID0gb2FrdHJhaWxfbV9jb252ZXJ0c1soY2xv Y2subSAtIE1SU1RfTV9NSU4pXSA8PCA4OworCisJZHBsbCB8PSBEUExMX1ZHQV9NT0RFX0RJUzsK KworCisJZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7CisKKwlpZiAoaXNfbHZkcykKKwkJZHBsbCB8 PSBEUExMQV9NT0RFX0xWRFM7CisJZWxzZQorCQlkcGxsIHw9IERQTExCX01PREVfREFDX1NFUklB TDsKKworCWlmIChpc19zZHZvKSB7CisJCWludCBzZHZvX3BpeGVsX211bHRpcGx5ID0KKwkJICAg IGFkanVzdGVkX21vZGUtPmNsb2NrIC8gbW9kZS0+Y2xvY2s7CisKKwkJZHBsbCB8PSBEUExMX0RW T19ISUdIX1NQRUVEOworCQlkcGxsIHw9CisJCSAgICAoc2R2b19waXhlbF9tdWx0aXBseSAtCisJ CSAgICAgMSkgPDwgU0RWT19NVUxUSVBMSUVSX1NISUZUX0hJUkVTOworCX0KKworCisJLyogY29t cHV0ZSBiaXRtYXNrIGZyb20gcDEgdmFsdWUgKi8KKwlkcGxsIHw9ICgxIDw8IChjbG9jay5wMSAt IDIpKSA8PCAxNzsKKworCWRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOworCisJbXJzdFByaW50UGxs KCJjaG9zZW4iLCAmY2xvY2spOworCisJaWYgKGRwbGwgJiBEUExMX1ZDT19FTkFCTEUpIHsKKwkJ UkVHX1dSSVRFKGZwX3JlZywgZnApOworCQlSRUdfV1JJVEUoZHBsbF9yZWcsIGRwbGwgJiB+RFBM TF9WQ09fRU5BQkxFKTsKKwkJUkVHX1JFQUQoZHBsbF9yZWcpOworCQkvKiBDaGVjayB0aGUgRFBM TEEgbG9jayBiaXQgUElQRUFDT05GWzI5XSAqLworCQl1ZGVsYXkoMTUwKTsKKwl9CisKKwlSRUdf V1JJVEUoZnBfcmVnLCBmcCk7CisJUkVHX1dSSVRFKGRwbGxfcmVnLCBkcGxsKTsKKwlSRUdfUkVB RChkcGxsX3JlZyk7CisJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCisJ dWRlbGF5KDE1MCk7CisKKwkvKiB3cml0ZSBpdCBhZ2FpbiAtLSB0aGUgQklPUyBkb2VzLCBhZnRl ciBhbGwgKi8KKwlSRUdfV1JJVEUoZHBsbF9yZWcsIGRwbGwpOworCVJFR19SRUFEKGRwbGxfcmVn KTsKKwkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KKwl1ZGVsYXkoMTUw KTsKKworCVJFR19XUklURShwaXBlY29uZl9yZWcsIHBpcGVjb25mKTsKKwlSRUdfUkVBRChwaXBl Y29uZl9yZWcpOworCXBzYl9pbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKworCVJFR19XUklU RShkc3BjbnRyX3JlZywgZHNwY250cik7CisJcHNiX2ludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYp OworCitvYWt0cmFpbF9jcnRjX21vZGVfc2V0X2V4aXQ6CisJZ21hX3Bvd2VyX2VuZChkZXYpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBvYWt0cmFpbF9jcnRjX21vZGVfZml4dXAoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs CisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1 cm4gdHJ1ZTsKK30KKworaW50IG9ha3RyYWlsX3BpcGVfc2V0X2Jhc2Uoc3RydWN0IGRybV9jcnRj ICpjcnRjLAorCQkJICAgIGludCB4LCBpbnQgeSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xk X2ZiKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJLyogc3RydWN0 IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsgKi8KKwlzdHJ1Y3QgcHNiX2lu dGVsX2NydGMgKnBzYl9pbnRlbF9jcnRjID0gdG9fcHNiX2ludGVsX2NydGMoY3J0Yyk7CisJc3Ry dWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmIgPSB0b19wc2JfZmIoY3J0Yy0+ZmIpOworCWludCBw aXBlID0gcHNiX2ludGVsX2NydGMtPnBpcGU7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgb2Zmc2V0 OworCS8qIEZJWE1FOiBjaGVjayBpZiB3ZSBuZWVkIHRoaXMgc3VyZWx5IE1SU1QgaXMgcGlwZSAw IG9ubHkgKi8KKwlpbnQgZHNwYmFzZSA9IChwaXBlID09IDAgPyBEU1BBTElOT0ZGIDogRFNQQkJB U0UpOworCWludCBkc3BzdXJmID0gKHBpcGUgPT0gMCA/IERTUEFTVVJGIDogRFNQQlNVUkYpOwor CWludCBkc3BzdHJpZGUgPSAocGlwZSA9PSAwKSA/IERTUEFTVFJJREUgOiBEU1BCU1RSSURFOwor CWludCBkc3BjbnRyX3JlZyA9IChwaXBlID09IDApID8gRFNQQUNOVFIgOiBEU1BCQ05UUjsKKwl1 MzIgZHNwY250cjsKKwlpbnQgcmV0ID0gMDsKKworCS8qIG5vIGZiIGJvdW5kICovCisJaWYgKCFj cnRjLT5mYikgeworCQlkZXZfZGJnKGRldi0+ZGV2LCAiTm8gRkIgYm91bmRcbiIpOworCQlyZXR1 cm4gMDsKKwl9CisKKwlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQorCQlyZXR1cm4g MDsKKworCXN0YXJ0ID0gcHNiZmItPmd0dC0+b2Zmc2V0OworCW9mZnNldCA9IHkgKiBjcnRjLT5m Yi0+cGl0Y2ggKyB4ICogKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCAvIDgpOworCisJUkVHX1dS SVRFKGRzcHN0cmlkZSwgY3J0Yy0+ZmItPnBpdGNoKTsKKworCWRzcGNudHIgPSBSRUdfUkVBRChk c3BjbnRyX3JlZyk7CisJZHNwY250ciAmPSB+RElTUFBMQU5FX1BJWEZPUk1BVF9NQVNLOworCisJ c3dpdGNoIChjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWRzcGNudHIg fD0gRElTUFBMQU5FXzhCUFA7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWlmIChjcnRjLT5mYi0+ ZGVwdGggPT0gMTUpCisJCQlkc3BjbnRyIHw9IERJU1BQTEFORV8xNV8xNkJQUDsKKwkJZWxzZQor CQkJZHNwY250ciB8PSBESVNQUExBTkVfMTZCUFA7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJY2Fz ZSAzMjoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEE7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LT5kZXYsICJVbmtub3duIGNvbG9yIGRlcHRoXG4iKTsK KwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBwaXBlX3NldF9iYXNlX2V4aXQ7CisJfQorCVJFR19X UklURShkc3BjbnRyX3JlZywgZHNwY250cik7CisKKwlpZiAoMCAvKiBGSVhNRUFDIC0gY2hlY2sg d2hhdCBQU0IgbmVlZHMgKi8pIHsKKwkJUkVHX1dSSVRFKGRzcGJhc2UsIG9mZnNldCk7CisJCVJF R19SRUFEKGRzcGJhc2UpOworCQlSRUdfV1JJVEUoZHNwc3VyZiwgc3RhcnQpOworCQlSRUdfUkVB RChkc3BzdXJmKTsKKwl9IGVsc2UgeworCQlSRUdfV1JJVEUoZHNwYmFzZSwgc3RhcnQgKyBvZmZz ZXQpOworCQlSRUdfUkVBRChkc3BiYXNlKTsKKwl9CisKK3BpcGVfc2V0X2Jhc2VfZXhpdDoKKwln bWFfcG93ZXJfZW5kKGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2FrdHJh aWxfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2Ny dGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJY3J0 Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09GRik7Cit9CisKK3N0YXRpYyB2b2lk IG9ha3RyYWlsX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg ZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7 CisJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09OKTsKK30KKworY29uc3Qg c3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBvYWt0cmFpbF9oZWxwZXJfZnVuY3MgPSB7CisJ LmRwbXMgPSBvYWt0cmFpbF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBvYWt0cmFpbF9jcnRj X21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gb2FrdHJhaWxfY3J0Y19tb2RlX3NldCwKKwkubW9k ZV9zZXRfYmFzZSA9IG9ha3RyYWlsX3BpcGVfc2V0X2Jhc2UsCisJLnByZXBhcmUgPSBvYWt0cmFp bF9jcnRjX3ByZXBhcmUsCisJLmNvbW1pdCA9IG9ha3RyYWlsX2NydGNfY29tbWl0LAorfTsKKwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9kZXZpY2UuYyBiL2Ry aXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDFjNDE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvb2FrdHJhaWxfZGV2aWNlLmMKQEAgLTAsMCArMSw0ODkgQEAKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAq IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Us CisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAq IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51 eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9kbWkuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm0uaD4KKyNp bmNsdWRlICJwc2JfZHJtLmgiCisjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1ZGUgInBzYl9y ZWcuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCisjaW5jbHVkZSA8YXNtL21yc3QuaD4K KyNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgorI2luY2x1ZGUgIm1pZF9iaW9zLmgiCisK K3N0YXRpYyBpbnQgb2FrdHJhaWxfb3V0cHV0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJaWYgKGRldl9wcml2LT5pTFZEU19lbmFibGUpCisJCW9ha3RyYWlsX2x2ZHNfaW5pdChkZXYs ICZkZXZfcHJpdi0+bW9kZV9kZXYpOworCWVsc2UKKwkJZGV2X2VycihkZXYtPmRldiwgIkRTSSBp cyBub3Qgc3VwcG9ydGVkXG4iKTsKKwlpZiAoZGV2X3ByaXYtPmhkbWlfcHJpdikKKwkJb2FrdHJh aWxfaGRtaV9pbml0KGRldiwgJmRldl9wcml2LT5tb2RlX2Rldik7CisJcmV0dXJuIDA7Cit9CisK Ky8qCisgKglQcm92aWRlIHRoZSBsb3cgbGV2ZWwgaW50ZXJmYWNlcyBmb3IgdGhlIE1vb3Jlc3Rv d24gYmFja2xpZ2h0CisgKi8KKworI2lmZGVmIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNF CisKKyNkZWZpbmUgTVJTVF9CTENfTUFYX1BXTV9SRUdfRlJFUQkgICAgMHhGRkZGCisjZGVmaW5l IEJMQ19QV01fUFJFQ0lTSU9OX0ZBQ1RPUiAxMDAJLyogMTAwMDAwMDAgKi8KKyNkZWZpbmUgQkxD X1BXTV9GUkVRX0NBTENfQ09OU1RBTlQgMzIKKyNkZWZpbmUgTUh6IDEwMDAwMDAKKyNkZWZpbmUg QkxDX0FESlVTVE1FTlRfTUFYIDEwMAorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2Ug Km9ha3RyYWlsX2JhY2tsaWdodF9kZXZpY2U7CitzdGF0aWMgaW50IG9ha3RyYWlsX2JyaWdodG5l c3M7CisKK3N0YXRpYyBpbnQgb2FrdHJhaWxfc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdo dF9kZXZpY2UgKmJkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBibF9nZXRfZGF0YShv YWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlKTsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGxldmVsID0gYmQtPnByb3BzLmJyaWdodG5l c3M7CisJdTMyIGJsY19wd21fY3RsOworCXUzMiBtYXhfcHdtX2JsYzsKKworCS8qIFBlcmNlbnRh Z2UgMS0xMDAlIGJlaW5nIHZhbGlkICovCisJaWYgKGxldmVsIDwgMSkKKwkJbGV2ZWwgPSAxOwor CisJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIDApKSB7CisJCS8qIENhbGN1bGF0ZSBhbmQgc2V0 IHRoZSBicmlnaHRuZXNzIHZhbHVlICovCisJCW1heF9wd21fYmxjID0gUkVHX1JFQUQoQkxDX1BX TV9DVEwpID4+IDE2OworCQlibGNfcHdtX2N0bCA9IGxldmVsICogbWF4X3B3bV9ibGMgLyAxMDA7 CisKKwkJLyogQWRqdXN0IHRoZSBiYWNrbGlnaHQgbGV2ZWwgd2l0aCB0aGUgcGVyY2VudCBpbgor CQkgKiBkZXZfcHJpdi0+YmxjX2FkajE7CisJCSAqLworCQlibGNfcHdtX2N0bCA9IGJsY19wd21f Y3RsICogZGV2X3ByaXYtPmJsY19hZGoxOworCQlibGNfcHdtX2N0bCA9IGJsY19wd21fY3RsIC8g MTAwOworCisJCS8qIEFkanVzdCB0aGUgYmFja2xpZ2h0IGxldmVsIHdpdGggdGhlIHBlcmNlbnQg aW4KKwkJICogZGV2X3ByaXYtPmJsY19hZGoyOworCQkgKi8KKwkJYmxjX3B3bV9jdGwgPSBibGNf cHdtX2N0bCAqIGRldl9wcml2LT5ibGNfYWRqMjsKKwkJYmxjX3B3bV9jdGwgPSBibGNfcHdtX2N0 bCAvIDEwMDsKKworCQkvKiBmb3JjZSBQV00gYml0IG9uICovCisJCVJFR19XUklURShCTENfUFdN X0NUTDIsICgweDgwMDAwMDAwIHwgUkVHX1JFQUQoQkxDX1BXTV9DVEwyKSkpOworCQlSRUdfV1JJ VEUoQkxDX1BXTV9DVEwsIChtYXhfcHdtX2JsYyA8PCAxNikgfCBibGNfcHdtX2N0bCk7CisJCWdt YV9wb3dlcl9lbmQoZGV2KTsKKwl9CisJb2FrdHJhaWxfYnJpZ2h0bmVzcyA9IGxldmVsOworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IG9ha3RyYWlsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBi YWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwkvKiByZXR1cm4gbG9jYWxseSBjYWNoZWQgdmFyIGlu c3RlYWQgb2YgSFcgcmVhZCAoZHVlIHRvIERQU1QgZXRjLikgKi8KKwkvKiBGSVhNRTogaWRlYWxs eSByZXR1cm4gYWN0dWFsIHZhbHVlIGluIGNhc2UgZmlybXdhcmUgZmlkZGxlZCB3aXRoCisJICAg aXQgKi8KKwlyZXR1cm4gb2FrdHJhaWxfYnJpZ2h0bmVzczsKK30KKworc3RhdGljIGludCBkZXZp Y2VfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJt X3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9u ZyBjb3JlX2Nsb2NrOworCXUxNiBibF9tYXhfZnJlcTsKKwl1aW50MzJfdCB2YWx1ZTsKKwl1aW50 MzJfdCBibGNfcHdtX3ByZWNpc2lvbl9mYWN0b3I7CisKKwlkZXZfcHJpdi0+YmxjX2FkajEgPSBC TENfQURKVVNUTUVOVF9NQVg7CisJZGV2X3ByaXYtPmJsY19hZGoyID0gQkxDX0FESlVTVE1FTlRf TUFYOworCWJsX21heF9mcmVxID0gMjU2OworCS8qIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGVsc2V3 aGVyZSAqLworCWJsY19wd21fcHJlY2lzaW9uX2ZhY3RvciA9IEJMQ19QV01fUFJFQ0lTSU9OX0ZB Q1RPUjsKKworCWNvcmVfY2xvY2sgPSBkZXZfcHJpdi0+Y29yZV9mcmVxOworCisJdmFsdWUgPSAo Y29yZV9jbG9jayAqIE1IeikgLyBCTENfUFdNX0ZSRVFfQ0FMQ19DT05TVEFOVDsKKwl2YWx1ZSAq PSBibGNfcHdtX3ByZWNpc2lvbl9mYWN0b3I7CisJdmFsdWUgLz0gYmxfbWF4X2ZyZXE7CisJdmFs dWUgLz0gYmxjX3B3bV9wcmVjaXNpb25fZmFjdG9yOworCisJaWYgKHZhbHVlID4gKHVuc2lnbmVk IGxvbmcgbG9uZylNUlNUX0JMQ19NQVhfUFdNX1JFR19GUkVRKQorCQkJcmV0dXJuIC1FUkFOR0U7 CisKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CisJCVJFR19XUklURShCTENf UFdNX0NUTDIsICgweDgwMDAwMDAwIHwgUkVHX1JFQUQoQkxDX1BXTV9DVEwyKSkpOworCQlSRUdf V1JJVEUoQkxDX1BXTV9DVEwsIHZhbHVlIHwgKHZhbHVlIDw8IDE2KSk7CisJCWdtYV9wb3dlcl9l bmQoZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xp Z2h0X29wcyBvYWt0cmFpbF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gb2FrdHJhaWxfZ2V0 X2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMgID0gb2FrdHJhaWxfc2V0X2JyaWdodG5lc3Ms Cit9OworCitpbnQgb2FrdHJhaWxfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CisKKwlt ZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJ cHJvcHMubWF4X2JyaWdodG5lc3MgPSAxMDA7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFU Rk9STTsKKworCW9ha3RyYWlsX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3Jl Z2lzdGVyKCJvYWt0cmFpbC1ibCIsCisJCQkJTlVMTCwgKHZvaWQgKilkZXYsICZvYWt0cmFpbF9v cHMsICZwcm9wcyk7CisKKwlpZiAoSVNfRVJSKG9ha3RyYWlsX2JhY2tsaWdodF9kZXZpY2UpKQor CQlyZXR1cm4gUFRSX0VSUihvYWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlKTsKKworCXJldCA9IGRl dmljZV9iYWNrbGlnaHRfaW5pdChkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWJhY2tsaWdodF9k ZXZpY2VfdW5yZWdpc3RlcihvYWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisJb2FrdHJhaWxfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9IDEw MDsKKwlvYWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDEw MDsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhvYWt0cmFpbF9iYWNrbGlnaHRfZGV2aWNlKTsK KwlkZXZfcHJpdi0+YmFja2xpZ2h0X2RldmljZSA9IG9ha3RyYWlsX2JhY2tsaWdodF9kZXZpY2U7 CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKgorICoJUHJvdmlkZSB0aGUgTW9vcmVzdG93 biBzcGVjaWZpYyBjaGlwIGxvZ2ljIGFuZCBsb3cgbGV2ZWwgbWV0aG9kcworICoJZm9yIHBvd2Vy IG1hbmFnZW1lbnQKKyAqLworCitzdGF0aWMgdm9pZCBvYWt0cmFpbF9pbml0X3BtKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7Cit9CisKKy8qKgorICoJb2FrdHJhaWxfc2F2ZV9kaXNwbGF5X3Jl Z2lzdGVycwktCXNhdmUgcmVnaXN0ZXJzIGxvc3Qgb24gc3VzcGVuZAorICoJQGRldjogb3VyIERS TSBkZXZpY2UKKyAqCisgKglTYXZlIHRoZSBzdGF0ZSB3ZSBuZWVkIGluIG9yZGVyIHRvIGJlIGFi bGUgdG8gcmVzdG9yZSB0aGUgaW50ZXJmYWNlCisgKgl1cG9uIHJlc3VtZSBmcm9tIHN1c3BlbmQK KyAqLworc3RhdGljIGludCBvYWt0cmFpbF9zYXZlX2Rpc3BsYXlfcmVnaXN0ZXJzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXUzMiBwcF9zdGF0OworCisJLyogRGlzcGxheSBh cmJpdHJhdGlvbiBjb250cm9sICsgd2F0ZXJtYXJrcyAqLworCWRldl9wcml2LT5zYXZlRFNQQVJC ID0gUFNCX1JWREMzMihEU1BBUkIpOworCWRldl9wcml2LT5zYXZlRFNQRlcxID0gUFNCX1JWREMz MihEU1BGVzEpOworCWRldl9wcml2LT5zYXZlRFNQRlcyID0gUFNCX1JWREMzMihEU1BGVzIpOwor CWRldl9wcml2LT5zYXZlRFNQRlczID0gUFNCX1JWREMzMihEU1BGVzMpOworCWRldl9wcml2LT5z YXZlRFNQRlc0ID0gUFNCX1JWREMzMihEU1BGVzQpOworCWRldl9wcml2LT5zYXZlRFNQRlc1ID0g UFNCX1JWREMzMihEU1BGVzUpOworCWRldl9wcml2LT5zYXZlRFNQRlc2ID0gUFNCX1JWREMzMihE U1BGVzYpOworCWRldl9wcml2LT5zYXZlQ0hJQ0tFTkJJVCA9IFBTQl9SVkRDMzIoRFNQQ0hJQ0tF TkJJVCk7CisKKwkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCisJZGV2X3ByaXYtPnNhdmVQSVBF QUNPTkYgPSBQU0JfUlZEQzMyKFBJUEVBQ09ORik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9 IFBTQl9SVkRDMzIoUElQRUFTUkMpOworCWRldl9wcml2LT5zYXZlRlBBMCA9IFBTQl9SVkRDMzIo TVJTVF9GUEEwKTsKKwlkZXZfcHJpdi0+c2F2ZUZQQTEgPSBQU0JfUlZEQzMyKE1SU1RfRlBBMSk7 CisJZGV2X3ByaXYtPnNhdmVEUExMX0EgPSBQU0JfUlZEQzMyKE1SU1RfRFBMTF9BKTsKKwlkZXZf cHJpdi0+c2F2ZUhUT1RBTF9BID0gUFNCX1JWREMzMihIVE9UQUxfQSk7CisJZGV2X3ByaXYtPnNh dmVIQkxBTktfQSA9IFBTQl9SVkRDMzIoSEJMQU5LX0EpOworCWRldl9wcml2LT5zYXZlSFNZTkNf QSA9IFBTQl9SVkRDMzIoSFNZTkNfQSk7CisJZGV2X3ByaXYtPnNhdmVWVE9UQUxfQSA9IFBTQl9S VkRDMzIoVlRPVEFMX0EpOworCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBQU0JfUlZEQzMyKFZC TEFOS19BKTsKKwlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBQU0JfUlZEQzMyKFZTWU5DX0EpOwor CWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gUFNCX1JWREMzMihCQ0xSUEFUX0EpOworCWRldl9w cml2LT5zYXZlRFNQQUNOVFIgPSBQU0JfUlZEQzMyKERTUEFDTlRSKTsKKwlkZXZfcHJpdi0+c2F2 ZURTUEFTVFJJREUgPSBQU0JfUlZEQzMyKERTUEFTVFJJREUpOworCWRldl9wcml2LT5zYXZlRFNQ QUFERFIgPSBQU0JfUlZEQzMyKERTUEFCQVNFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFTVVJGID0g UFNCX1JWREMzMihEU1BBU1VSRik7CisJZGV2X3ByaXYtPnNhdmVEU1BBTElOT0ZGID0gUFNCX1JW REMzMihEU1BBTElOT0ZGKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFUSUxFT0ZGID0gUFNCX1JWREMz MihEU1BBVElMRU9GRik7CisKKwkvKiBTYXZlIGN1cnNvciByZWdzICovCisJZGV2X3ByaXYtPnNh dmVEU1BBQ1VSU09SX0NUUkwgPSBQU0JfUlZEQzMyKENVUkFDTlRSKTsKKwlkZXZfcHJpdi0+c2F2 ZURTUEFDVVJTT1JfQkFTRSA9IFBTQl9SVkRDMzIoQ1VSQUJBU0UpOworCWRldl9wcml2LT5zYXZl RFNQQUNVUlNPUl9QT1MgPSBQU0JfUlZEQzMyKENVUkFQT1MpOworCisJLyogU2F2ZSBwYWxldHRl IChnYW1tYSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCWRldl9wcml2LT5zYXZl X3BhbGV0dGVfYVtpXSA9IFBTQl9SVkRDMzIoUEFMRVRURV9BICsgKGkgPDwgMikpOworCisJaWYg KGRldl9wcml2LT5oZG1pX3ByaXYpCisJCW9ha3RyYWlsX2hkbWlfc2F2ZShkZXYpOworCisJLyog U2F2ZSBwZXJmb3JtYW5jZSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlUEVSRl9NT0RFID0gUFNC X1JWREMzMihNUlNUX1BFUkZfTU9ERSk7CisKKwkvKiBMVkRTIHN0YXRlICovCisJZGV2X3ByaXYt PnNhdmVQUF9DT05UUk9MID0gUFNCX1JWREMzMihQUF9DT05UUk9MKTsKKwlkZXZfcHJpdi0+c2F2 ZVBGSVRfUEdNX1JBVElPUyA9IFBTQl9SVkRDMzIoUEZJVF9QR01fUkFUSU9TKTsKKwlkZXZfcHJp di0+c2F2ZVBGSVRfQVVUT19SQVRJT1MgPSBQU0JfUlZEQzMyKFBGSVRfQVVUT19SQVRJT1MpOwor CWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBQU0JfUlZEQzMyKEJMQ19QV01fQ1RMKTsKKwlk ZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IFBTQl9SVkRDMzIoQkxDX1BXTV9DVEwyKTsKKwlk ZXZfcHJpdi0+c2F2ZUxWRFMgPSBQU0JfUlZEQzMyKExWRFMpOworCWRldl9wcml2LT5zYXZlUEZJ VF9DT05UUk9MID0gUFNCX1JWREMzMihQRklUX0NPTlRST0wpOworCWRldl9wcml2LT5zYXZlUFBf T05fREVMQVlTID0gUFNCX1JWREMzMihMVkRTUFBfT04pOworCWRldl9wcml2LT5zYXZlUFBfT0ZG X0RFTEFZUyA9IFBTQl9SVkRDMzIoTFZEU1BQX09GRik7CisJZGV2X3ByaXYtPnNhdmVQUF9ESVZJ U09SID0gUFNCX1JWREMzMihQUF9DWUNMRSk7CisKKwkvKiBIVyBvdmVybGF5ICovCisJZGV2X3By aXYtPnNhdmVPVl9PVkFERCA9IFBTQl9SVkRDMzIoT1ZfT1ZBREQpOworCWRldl9wcml2LT5zYXZl T1ZfT0dBTUMwID0gUFNCX1JWREMzMihPVl9PR0FNQzApOworCWRldl9wcml2LT5zYXZlT1ZfT0dB TUMxID0gUFNCX1JWREMzMihPVl9PR0FNQzEpOworCWRldl9wcml2LT5zYXZlT1ZfT0dBTUMyID0g UFNCX1JWREMzMihPVl9PR0FNQzIpOworCWRldl9wcml2LT5zYXZlT1ZfT0dBTUMzID0gUFNCX1JW REMzMihPVl9PR0FNQzMpOworCWRldl9wcml2LT5zYXZlT1ZfT0dBTUM0ID0gUFNCX1JWREMzMihP Vl9PR0FNQzQpOworCWRldl9wcml2LT5zYXZlT1ZfT0dBTUM1ID0gUFNCX1JWREMzMihPVl9PR0FN QzUpOworCisJLyogRFBTVCByZWdpc3RlcnMgKi8KKwlkZXZfcHJpdi0+c2F2ZUhJU1RPR1JBTV9J TlRfQ09OVFJPTF9SRUcgPQorCQkJCQlQU0JfUlZEQzMyKEhJU1RPR1JBTV9JTlRfQ09OVFJPTCk7 CisJZGV2X3ByaXYtPnNhdmVISVNUT0dSQU1fTE9HSUNfQ09OVFJPTF9SRUcgPQorCQkJCQlQU0Jf UlZEQzMyKEhJU1RPR1JBTV9MT0dJQ19DT05UUk9MKTsKKwlkZXZfcHJpdi0+c2F2ZVBXTV9DT05U Uk9MX0xPR0lDID0gUFNCX1JWREMzMihQV01fQ09OVFJPTF9MT0dJQyk7CisKKwlpZiAoZGV2X3By aXYtPmlMVkRTX2VuYWJsZSkgeworCQkvKiBTaHV0IGRvd24gdGhlIHBhbmVsICovCisJCVBTQl9X VkRDMzIoMCwgUFBfQ09OVFJPTCk7CisKKwkJZG8geworCQkJcHBfc3RhdCA9IFBTQl9SVkRDMzIo UFBfU1RBVFVTKTsKKwkJfSB3aGlsZSAocHBfc3RhdCAmIDB4ODAwMDAwMDApOworCisJCS8qIFR1 cm4gb2ZmIHRoZSBwbGFuZSAqLworCQlQU0JfV1ZEQzMyKDB4NTgwMDAwMDAsIERTUEFDTlRSKTsK KwkJLyogVHJpZ2dlciB0aGUgcGxhbmUgZGlzYWJsZSAqLworCQlQU0JfV1ZEQzMyKDAsIERTUEFT VVJGKTsKKworCQkvKiBXYWl0IH40IHRpY2tzICovCisJCW1zbGVlcCg0KTsKKworCQkvKiBUdXJu IG9mZiBwaXBlICovCisJCVBTQl9XVkRDMzIoMHgwLCBQSVBFQUNPTkYpOworCQkvKiBXYWl0IH44 IHRpY2tzICovCisJCW1zbGVlcCg4KTsKKworCQkvKiBUdXJuIG9mZiBQTExzICovCisJCVBTQl9X VkRDMzIoMCwgTVJTVF9EUExMX0EpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglvYWt0 cmFpbF9yZXN0b3JlX2Rpc3BsYXlfcmVnaXN0ZXJzCS0JcmVzdG9yZSBsb3N0IHJlZ2lzdGVyIHN0 YXRlCisgKglAZGV2OiBvdXIgRFJNIGRldmljZQorICoKKyAqCVJlc3RvcmUgcmVnaXN0ZXIgc3Rh dGUgdGhhdCB3YXMgbG9zdCBkdXJpbmcgc3VzcGVuZCBhbmQgcmVzdW1lLgorICovCitzdGF0aWMg aW50IG9ha3RyYWlsX3Jlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJdTMyIHBwX3N0YXQ7CisJaW50IGk7CisKKwkvKiBEaXNwbGF5IGFyYml0cmF0aW9u ICsgd2F0ZXJtYXJrcyAqLworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BBUkIsIERTUEFS Qik7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEZXMSwgRFNQRlcxKTsKKwlQU0JfV1ZE QzMyKGRldl9wcml2LT5zYXZlRFNQRlcyLCBEU1BGVzIpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYt PnNhdmVEU1BGVzMsIERTUEZXMyk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEZXNCwg RFNQRlc0KTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlRFNQRlc1LCBEU1BGVzUpOworCVBT Ql9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BGVzYsIERTUEZXNik7CisJUFNCX1dWREMzMihkZXZf cHJpdi0+c2F2ZUNISUNLRU5CSVQsIERTUENISUNLRU5CSVQpOworCisJLyogTWFrZSBzdXJlIFZH QSBwbGFuZSBpcyBvZmYuIGl0IGluaXRpYWxpemVzIHRvIG9uIGFmdGVyIHJlc2V0ISovCisJUFNC X1dWREMzMigweDgwMDAwMDAwLCBWR0FDTlRSTCk7CisKKwkvKiBzZXQgdGhlIHBsbHMgKi8KKwlQ U0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlRlBBMCwgTVJTVF9GUEEwKTsKKwlQU0JfV1ZEQzMyKGRl dl9wcml2LT5zYXZlRlBBMSwgTVJTVF9GUEExKTsKKworCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAq LworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEUExMX0EsIE1SU1RfRFBMTF9BKTsKKwlEUk1f VURFTEFZKDE1MCk7CisKKwkvKiBSZXN0b3JlIG1vZGUgKi8KKwlQU0JfV1ZEQzMyKGRldl9wcml2 LT5zYXZlSFRPVEFMX0EsIEhUT1RBTF9BKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlSEJM QU5LX0EsIEhCTEFOS19BKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlSFNZTkNfQSwgSFNZ TkNfQSk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BLCBWVE9UQUxfQSk7CisJ UFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZVZCTEFOS19BLCBWQkxBTktfQSk7CisJUFNCX1dWREMz MihkZXZfcHJpdi0+c2F2ZVZTWU5DX0EsIFZTWU5DX0EpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYt PnNhdmVQSVBFQVNSQywgUElQRUFTUkMpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVCQ0xS UEFUX0EsIEJDTFJQQVRfQSk7CisKKwkvKiBSZXN0b3JlIHBlcmZvcm1hbmNlIG1vZGUqLworCVBT Ql9XVkRDMzIoZGV2X3ByaXYtPnNhdmVQRVJGX01PREUsIE1SU1RfUEVSRl9NT0RFKTsKKworCS8q IEVuYWJsZSB0aGUgcGlwZSovCisJaWYgKGRldl9wcml2LT5pTFZEU19lbmFibGUpCisJCVBTQl9X VkRDMzIoZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYsIFBJUEVBQ09ORik7CisKKwkvKiBTZXQgdXAg dGhlIHBsYW5lKi8KKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlRFNQQUxJTk9GRiwgRFNQQUxJ Tk9GRik7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEFTVFJJREUsIERTUEFTVFJJREUp OworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRiwgRFNQQVRJTEVPRkYpOwor CisJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BB Q05UUiwgRFNQQUNOVFIpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BBU1VSRiwgRFNQ QVNVUkYpOworCisJLyogRW5hYmxlIEN1cnNvciBBICovCisJUFNCX1dWREMzMihkZXZfcHJpdi0+ c2F2ZURTUEFDVVJTT1JfQ1RSTCwgQ1VSQUNOVFIpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNh dmVEU1BBQ1VSU09SX1BPUywgQ1VSQVBPUyk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURT UEFDVVJTT1JfQkFTRSwgQ1VSQUJBU0UpOworCisJLyogUmVzdG9yZSBwYWxldHRlIChnYW1tYSkg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNh dmVfcGFsZXR0ZV9hW2ldLCBQQUxFVFRFX0EgKyAoaSA8PCAyKSk7CisKKwlpZiAoZGV2X3ByaXYt PmhkbWlfcHJpdikKKwkJb2FrdHJhaWxfaGRtaV9yZXN0b3JlKGRldik7CisKKwlpZiAoZGV2X3By aXYtPmlMVkRTX2VuYWJsZSkgeworCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlQkxDX1BXTV9D VEwyLCBCTENfUFdNX0NUTDIpOworCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlTFZEUywgTFZE Uyk7IC8qcG9ydCA2MTE4MGgqLworCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlUEZJVF9DT05U Uk9MLCBQRklUX0NPTlRST0wpOworCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlUEZJVF9QR01f UkFUSU9TLCBQRklUX1BHTV9SQVRJT1MpOworCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlUEZJ VF9BVVRPX1JBVElPUywgUEZJVF9BVVRPX1JBVElPUyk7CisJCVBTQl9XVkRDMzIoZGV2X3ByaXYt PnNhdmVCTENfUFdNX0NUTCwgQkxDX1BXTV9DVEwpOworCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5z YXZlUFBfT05fREVMQVlTLCBMVkRTUFBfT04pOworCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZl UFBfT0ZGX0RFTEFZUywgTFZEU1BQX09GRik7CisJCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVQ UF9ESVZJU09SLCBQUF9DWUNMRSk7CisJCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVQUF9DT05U Uk9MLCBQUF9DT05UUk9MKTsKKwl9CisKKwkvKiBXYWl0IGZvciBjeWNsZSBkZWxheSAqLworCWRv IHsKKwkJcHBfc3RhdCA9IFBTQl9SVkRDMzIoUFBfU1RBVFVTKTsKKwl9IHdoaWxlIChwcF9zdGF0 ICYgMHgwODAwMDAwMCk7CisKKwkvKiBXYWl0IGZvciBwYW5lbCBwb3dlciB1cCAqLworCWRvIHsK KwkJcHBfc3RhdCA9IFBTQl9SVkRDMzIoUFBfU1RBVFVTKTsKKwl9IHdoaWxlIChwcF9zdGF0ICYg MHgxMDAwMDAwMCk7CisKKwkvKiBSZXN0b3JlIEhXIG92ZXJsYXkgKi8KKwlQU0JfV1ZEQzMyKGRl dl9wcml2LT5zYXZlT1ZfT1ZBREQsIE9WX09WQUREKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5z YXZlT1ZfT0dBTUMwLCBPVl9PR0FNQzApOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVPVl9P R0FNQzEsIE9WX09HQU1DMSk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZU9WX09HQU1DMiwg T1ZfT0dBTUMyKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlT1ZfT0dBTUMzLCBPVl9PR0FN QzMpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVPVl9PR0FNQzQsIE9WX09HQU1DNCk7CisJ UFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZU9WX09HQU1DNSwgT1ZfT0dBTUM1KTsKKworCS8qIERQ U1QgcmVnaXN0ZXJzICovCisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZUhJU1RPR1JBTV9JTlRf Q09OVFJPTF9SRUcsCisJCQkJCQlISVNUT0dSQU1fSU5UX0NPTlRST0wpOworCVBTQl9XVkRDMzIo ZGV2X3ByaXYtPnNhdmVISVNUT0dSQU1fTE9HSUNfQ09OVFJPTF9SRUcsCisJCQkJCQlISVNUT0dS QU1fTE9HSUNfQ09OVFJPTCk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZVBXTV9DT05UUk9M X0xPR0lDLCBQV01fQ09OVFJPTF9MT0dJQyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglv YWt0cmFpbF9wb3dlcl9kb3duCS0JcG93ZXIgZG93biB0aGUgZGlzcGxheSBpc2xhbmQKKyAqCUBk ZXY6IG91ciBEUk0gZGV2aWNlCisgKgorICoJUG93ZXIgZG93biB0aGUgZGlzcGxheSBpbnRlcmZh Y2Ugb2Ygb3VyIGRldmljZQorICovCitzdGF0aWMgaW50IG9ha3RyYWlsX3Bvd2VyX2Rvd24oc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHB3cl9tYXNrIDsKKwl1MzIgcHdyX3N0czsKKwor CXB3cl9tYXNrID0gUFNCX1BXUkdUX0RJU1BMQVlfTUFTSzsKKwlvdXRsKHB3cl9tYXNrLCBkZXZf cHJpdi0+b3NwbV9iYXNlICsgUFNCX1BNX1NTQyk7CisKKwl3aGlsZSAodHJ1ZSkgeworCQlwd3Jf c3RzID0gaW5sKGRldl9wcml2LT5vc3BtX2Jhc2UgKyBQU0JfUE1fU1NTKTsKKwkJaWYgKChwd3Jf c3RzICYgcHdyX21hc2spID09IHB3cl9tYXNrKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXVkZWxh eSgxMCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogb2FrdHJhaWxfcG93ZXJfdXAKKyAq CisgKiBSZXN0b3JlIHBvd2VyIHRvIHRoZSBzcGVjaWZpZWQgaXNsYW5kKHMpIChwb3dlcmdhdGlu ZykKKyAqLworc3RhdGljIGludCBvYWt0cmFpbF9wb3dlcl91cChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKKwl1MzIgcHdyX21hc2sgPSBQU0JfUFdSR1RfRElTUExBWV9NQVNLOworCXUzMiBwd3Jf c3RzLCBwd3JfY250OworCisJcHdyX2NudCA9IGlubChkZXZfcHJpdi0+b3NwbV9iYXNlICsgUFNC X1BNX1NTQyk7CisJcHdyX2NudCAmPSB+cHdyX21hc2s7CisJb3V0bChwd3JfY250LCAoZGV2X3By aXYtPm9zcG1fYmFzZSArIFBTQl9QTV9TU0MpKTsKKworCXdoaWxlICh0cnVlKSB7CisJCXB3cl9z dHMgPSBpbmwoZGV2X3ByaXYtPm9zcG1fYmFzZSArIFBTQl9QTV9TU1MpOworCQlpZiAoKHB3cl9z dHMgJiBwd3JfbWFzaykgPT0gMCkKKwkJCWJyZWFrOworCQllbHNlCisJCQl1ZGVsYXkoMTApOwor CX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBvYWt0cmFpbF90ZWFyZG93bihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCW9ha3RyYWlsX2hkbWlfdGVhcmRvd24oZGV2KTsKK30K KworY29uc3Qgc3RydWN0IHBzYl9vcHMgb2FrdHJhaWxfY2hpcF9vcHMgPSB7CisJLm5hbWUgPSAi T2FrdHJhaWwiLAorCS5hY2NlbF8yZCA9IDEsCisJLnBpcGVzID0gMiwKKwkuY3J0Y3MgPSAyLAor CS5zZ3hfb2Zmc2V0ID0gTVJTVF9TR1hfT0ZGU0VULAorCisJLmNoaXBfc2V0dXAgPSBtaWRfY2hp cF9zZXR1cCwKKwkuY2hpcF90ZWFyZG93biA9IG9ha3RyYWlsX3RlYXJkb3duLAorCS5jcnRjX2hl bHBlciA9ICZvYWt0cmFpbF9oZWxwZXJfZnVuY3MsCisJLmNydGNfZnVuY3MgPSAmcHNiX2ludGVs X2NydGNfZnVuY3MsCisKKwkub3V0cHV0X2luaXQgPSBvYWt0cmFpbF9vdXRwdXRfaW5pdCwKKwor I2lmZGVmIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJLmJhY2tsaWdodF9pbml0ID0g b2FrdHJhaWxfYmFja2xpZ2h0X2luaXQsCisjZW5kaWYKKworCS5pbml0X3BtID0gb2FrdHJhaWxf aW5pdF9wbSwKKwkuc2F2ZV9yZWdzID0gb2FrdHJhaWxfc2F2ZV9kaXNwbGF5X3JlZ2lzdGVycywK KwkucmVzdG9yZV9yZWdzID0gb2FrdHJhaWxfcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycywKKwku cG93ZXJfZG93biA9IG9ha3RyYWlsX3Bvd2VyX2Rvd24sCisJLnBvd2VyX3VwID0gb2FrdHJhaWxf cG93ZXJfdXAsCisKKwkuaTJjX2J1cyA9IDEsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9vYWt0cmFpbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3Ry YWlsX2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQyM2MwCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9oZG1pLmMK QEAgLTAsMCArMSw4NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJbnRlbCBDb3Jwb3Jh dGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQor ICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg KiBBdXRob3JzOgorICoJTGkgUGVuZyA8cGVuZy5saUBpbnRlbC5jb20+CisgKi8KKworI2luY2x1 ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybS5oPgorI2luY2x1ZGUgInBzYl9pbnRl bF9kcnYuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAicHNiX2Rydi5o IgorCisjZGVmaW5lIEhETUlfUkVBRChyZWcpCQlyZWFkbChoZG1pX2Rldi0+cmVncyArIChyZWcp KQorI2RlZmluZSBIRE1JX1dSSVRFKHJlZywgdmFsKQl3cml0ZWwodmFsLCBoZG1pX2Rldi0+cmVn cyArIChyZWcpKQorCisjZGVmaW5lIEhETUlfSENSCTB4MTAwMAorI2RlZmluZSBIQ1JfRU5BQkxF X0hEQ1AJCSgxIDw8IDUpCisjZGVmaW5lIEhDUl9FTkFCTEVfQVVESU8JKDEgPDwgMikKKyNkZWZp bmUgSENSX0VOQUJMRV9QSVhFTAkoMSA8PCAxKQorI2RlZmluZSBIQ1JfRU5BQkxFX1RNRFMJCSgx IDw8IDApCisKKyNkZWZpbmUgSERNSV9ISUNSCTB4MTAwNAorI2RlZmluZSBIRE1JX0hTUgkweDEw MDgKKyNkZWZpbmUgSERNSV9ISVNSCTB4MTAwQworI2RlZmluZSBIRE1JX0RFVEVDVF9IRFAJCSgx IDw8IDApCisKKyNkZWZpbmUgSERNSV9WSURFT19SRUcJMHgzMDAwCisjZGVmaW5lIEhETUlfVU5J VF9FTgkJKDEgPDwgNykKKyNkZWZpbmUgSERNSV9NT0RFX09VVFBVVAkoMSA8PCAwKQorI2RlZmlu ZSBIRE1JX0hCTEFOS19BCTB4MzEwMAorCisjZGVmaW5lIEhETUlfQVVESU9fQ1RSTAkweDQwMDAK KyNkZWZpbmUgSERNSV9FTkFCTEVfQVVESU8JKDEgPDwgMCkKKworI2RlZmluZSBQQ0hfSFRPVEFM X0IJMHgzMTAwCisjZGVmaW5lIFBDSF9IQkxBTktfQgkweDMxMDQKKyNkZWZpbmUgUENIX0hTWU5D X0IJMHgzMTA4CisjZGVmaW5lIFBDSF9WVE9UQUxfQgkweDMxMEMKKyNkZWZpbmUgUENIX1ZCTEFO S19CCTB4MzExMAorI2RlZmluZSBQQ0hfVlNZTkNfQgkweDMxMTQKKyNkZWZpbmUgUENIX1BJUEVC U1JDCTB4MzExQworCisjZGVmaW5lIFBDSF9QSVBFQl9EU0wJMHgzODAwCisjZGVmaW5lIFBDSF9Q SVBFQl9TTEMJMHgzODA0CisjZGVmaW5lIFBDSF9QSVBFQkNPTkYJMHgzODA4CisjZGVmaW5lIFBD SF9QSVBFQlNUQVQJMHgzODI0CisKKyNkZWZpbmUgQ0RWT19ERlQJMHg1MDAwCisjZGVmaW5lIENE Vk9fU0xFV1JBVEUJMHg1MDA0CisjZGVmaW5lIENEVk9fU1RSRU5HVEgJMHg1MDA4CisjZGVmaW5l IENEVk9fUkNPTVAJMHg1MDBDCisKKyNkZWZpbmUgRFBMTF9DVFJMICAgICAgIDB4NjAwMAorI2Rl ZmluZSBEUExMX1BESVZfU0hJRlQJCTE2CisjZGVmaW5lIERQTExfUERJVl9NQVNLCQkoMHhmIDw8 IDE2KQorI2RlZmluZSBEUExMX1BXUkROCQkoMSA8PCA0KQorI2RlZmluZSBEUExMX1JFU0VUCQko MSA8PCAzKQorI2RlZmluZSBEUExMX0ZBU1RFTgkJKDEgPDwgMikKKyNkZWZpbmUgRFBMTF9FTlNU QVQJCSgxIDw8IDEpCisjZGVmaW5lIERQTExfRElUSEVOCQkoMSA8PCAwKQorCisjZGVmaW5lIERQ TExfRElWX0NUUkwgICAweDYwMDQKKyNkZWZpbmUgRFBMTF9DTEtGX01BU0sJCTB4ZmZmZmZmYzAK KyNkZWZpbmUgRFBMTF9DTEtSX01BU0sJCSgweDNmKQorCisjZGVmaW5lIERQTExfQ0xLX0VOQUJM RSAweDYwMDgKKyNkZWZpbmUgRFBMTF9FTl9ESVNQCQkoMSA8PCAzMSkKKyNkZWZpbmUgRFBMTF9T RUxfSERNSQkJKDEgPDwgOCkKKyNkZWZpbmUgRFBMTF9FTl9IRE1JCQkoMSA8PCAxKQorI2RlZmlu ZSBEUExMX0VOX1ZHQQkJKDEgPDwgMCkKKworI2RlZmluZSBEUExMX0FESlVTVCAgICAgMHg2MDBD CisjZGVmaW5lIERQTExfU1RBVFVTICAgICAweDYwMTAKKyNkZWZpbmUgRFBMTF9VUERBVEUgICAg IDB4NjAxNAorI2RlZmluZSBEUExMX0RGVCAgICAgICAgMHg2MDIwCisKK3N0cnVjdCBpbnRlbF9y YW5nZSB7CisJaW50CW1pbiwgbWF4OworfTsKKworc3RydWN0IG9ha3RyYWlsX2hkbWlfbGltaXQg eworCXN0cnVjdCBpbnRlbF9yYW5nZSB2Y28sIG5wLCBuciwgbmY7Cit9OworCitzdHJ1Y3Qgb2Fr dHJhaWxfaGRtaV9jbG9jayB7CisJaW50IG5wOworCWludCBucjsKKwlpbnQgbmY7CisJaW50IGRv dDsKK307CisKKyNkZWZpbmUgVkNPX01JTgkJMzIwMDAwCisjZGVmaW5lIFZDT19NQVgJCTE2NTAw MDAKKyNkZWZpbmUJTlBfTUlOCQkxCisjZGVmaW5lCU5QX01BWAkJMTUKKyNkZWZpbmUJTlJfTUlO CQkxCisjZGVmaW5lCU5SX01BWAkJNjQKKyNkZWZpbmUgTkZfTUlOCQkyCisjZGVmaW5lIE5GX01B WAkJNDA5NQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9ha3RyYWlsX2hkbWlfbGltaXQgb2FrdHJh aWxfaGRtaV9saW1pdCA9IHsKKwkudmNvID0geyAubWluID0gVkNPX01JTiwJCS5tYXggPSBWQ09f TUFYIH0sCisJLm5wICA9IHsgLm1pbiA9IE5QX01JTiwJCQkubWF4ID0gTlBfTUFYICB9LAorCS5u ciAgPSB7IC5taW4gPSBOUl9NSU4sCQkJLm1heCA9IE5SX01BWCAgfSwKKwkubmYgID0geyAubWlu ID0gTkZfTUlOLAkJCS5tYXggPSBORl9NQVggIH0sCit9OworCitzdGF0aWMgdm9pZCB3YWl0X2Zv cl92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBGSVhNRTogQ2FuIHdlIGRv IHRoaXMgYXMgYSBzbGVlcCA/ICovCisJLyogV2FpdCBmb3IgMjBtcywgaS5lLiBvbmUgY3ljbGUg YXQgNTBoei4gKi8KKwltZGVsYXkoMjApOworfQorCitzdGF0aWMgdm9pZCBzY3VfYnVzeV9sb29w KHZvaWQgKnNjdV9iYXNlKQoreworCXUzMiBzdGF0dXMgPSAwOworCXUzMiBsb29wX2NvdW50ID0g MDsKKworCXN0YXR1cyA9IHJlYWRsKHNjdV9iYXNlICsgMHgwNCk7CisJd2hpbGUgKHN0YXR1cyAm IDEpIHsKKwkJdWRlbGF5KDEpOyAvKiBzY3UgcHJvY2Vzc2luZyB0aW1lIGlzIGluIGZldyB1IHNl Y29kcyAqLworCQlzdGF0dXMgPSByZWFkbChzY3VfYmFzZSArIDB4MDQpOworCQlsb29wX2NvdW50 Kys7CisJCS8qIGJyZWFrIGlmIHNjdSBkb2Vzbid0IHJlc2V0IGJ1c3kgYml0IGFmdGVyIGh1Z2Ug cmV0cnkgKi8KKwkJaWYgKGxvb3BfY291bnQgPiAxMDAwKSB7CisJCQlEUk1fREVCVUdfS01TKCJT Q1UgSVBDIHRpbWVkIG91dCIpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9p ZCBvYWt0cmFpbF9oZG1pX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdm9pZCAq YmFzZTsKKwkvKiBGSVhNRTogYXQgbGVhc3QgbWFrZSB0aGVzZSBkZWZpbmVzICovCisJdW5zaWdu ZWQgaW50IHNjdV9pcGNfbW1pbyA9IDB4ZmYxMWMwMDA7CisJaW50IHNjdV9sZW4gPSAxMDI0Owor CisJYmFzZSA9IGlvcmVtYXAoKHJlc291cmNlX3NpemVfdClzY3VfaXBjX21taW8sIHNjdV9sZW4p OworCWlmIChiYXNlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIFNDVSBt bWlvXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNjdSBpcGM6IGFzc2VydCBoZG1pIGNvbnRy b2xsZXIgcmVzZXQgKi8KKwl3cml0ZWwoMHhmZjExZDExOCwgYmFzZSArIDB4MGMpOworCXdyaXRl bCgweDdmZmZmZmRmLCBiYXNlICsgMHg4MCk7CisJd3JpdGVsKDB4NDIwMDUsIGJhc2UgKyAweDAp OworCXNjdV9idXN5X2xvb3AoYmFzZSk7CisKKwkvKiBzY3UgaXBjOiBkZS1hc3NlcnQgaGRtaSBj b250cm9sbGVyIHJlc2V0ICovCisJd3JpdGVsKDB4ZmYxMWQxMTgsIGJhc2UgKyAweDBjKTsKKwl3 cml0ZWwoMHg3ZmZmZmZmZiwgYmFzZSArIDB4ODApOworCXdyaXRlbCgweDQyMDA1LCBiYXNlICsg MHgwKTsKKwlzY3VfYnVzeV9sb29wKGJhc2UpOworCisJaW91bm1hcChiYXNlKTsKK30KKworc3Rh dGljIHZvaWQgb2FrdHJhaWxfaGRtaV9hdWRpb19lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9IGRldl9wcml2LT5oZG1p X3ByaXY7CisKKwlIRE1JX1dSSVRFKEhETUlfSENSLCAweDY3KTsKKwlIRE1JX1JFQUQoSERNSV9I Q1IpOworCisJSERNSV9XUklURSgweDUxYTgsIDB4MTApOworCUhETUlfUkVBRCgweDUxYTgpOwor CisJSERNSV9XUklURShIRE1JX0FVRElPX0NUUkwsIDB4MSk7CisJSERNSV9SRUFEKEhETUlfQVVE SU9fQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9ha3RyYWlsX2hkbWlfYXVkaW9fZGlzYWJsZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlf ZGV2ID0gZGV2X3ByaXYtPmhkbWlfcHJpdjsKKworCUhETUlfV1JJVEUoMHg1MWE4LCAweDApOwor CUhETUlfUkVBRCgweDUxYTgpOworCisJSERNSV9XUklURShIRE1JX0FVRElPX0NUUkwsIDB4MCk7 CisJSERNSV9SRUFEKEhETUlfQVVESU9fQ1RSTCk7CisKKwlIRE1JX1dSSVRFKEhETUlfSENSLCAw eDQ3KTsKKwlIRE1JX1JFQUQoSERNSV9IQ1IpOworfQorCit2b2lkIG9ha3RyYWlsX2NydGNfaGRt aV9kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwl1MzIgdGVtcDsKKworCXN3aXRjaCAobW9kZSkgewor CWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCS8qIERpc2FibGUgVkdBQ05UUkwgKi8KKwkJUkVH X1dSSVRFKFZHQUNOVFJMLCAweDgwMDAwMDAwKTsKKworCQkvKiBEaXNhYmxlIHBsYW5lICovCisJ CXRlbXAgPSBSRUdfUkVBRChEU1BCQ05UUik7CisJCWlmICgodGVtcCAmIERJU1BMQVlfUExBTkVf RU5BQkxFKSAhPSAwKSB7CisJCQlSRUdfV1JJVEUoRFNQQkNOVFIsIHRlbXAgJiB+RElTUExBWV9Q TEFORV9FTkFCTEUpOworCQkJUkVHX1JFQUQoRFNQQkNOVFIpOworCQkJLyogRmx1c2ggdGhlIHBs YW5lIGNoYW5nZXMgKi8KKwkJCVJFR19XUklURShEU1BCU1VSRiwgUkVHX1JFQUQoRFNQQlNVUkYp KTsKKwkJCVJFR19SRUFEKERTUEJTVVJGKTsKKwkJfQorCisJCS8qIERpc2FibGUgcGlwZSBCICov CisJCXRlbXAgPSBSRUdfUkVBRChQSVBFQkNPTkYpOworCQlpZiAoKHRlbXAgJiBQSVBFQUNPTkZf RU5BQkxFKSAhPSAwKSB7CisJCQlSRUdfV1JJVEUoUElQRUJDT05GLCB0ZW1wICYgflBJUEVBQ09O Rl9FTkFCTEUpOworCQkJUkVHX1JFQUQoUElQRUJDT05GKTsKKwkJfQorCisJCS8qIERpc2FibGUg TE5XIFBpcGVzLCBldGMgKi8KKwkJdGVtcCA9IFJFR19SRUFEKFBDSF9QSVBFQkNPTkYpOworCQlp ZiAoKHRlbXAgJiBQSVBFQUNPTkZfRU5BQkxFKSAhPSAwKSB7CisJCQlSRUdfV1JJVEUoUENIX1BJ UEVCQ09ORiwgdGVtcCAmIH5QSVBFQUNPTkZfRU5BQkxFKTsKKwkJCVJFR19SRUFEKFBDSF9QSVBF QkNPTkYpOworCQl9CisJCS8qIHdhaXQgZm9yIHBpcGUgb2ZmICovCisJCXVkZWxheSgxNTApOwor CQkvKiBEaXNhYmxlIGRwbGwgKi8KKwkJdGVtcCA9IFJFR19SRUFEKERQTExfQ1RSTCk7CisJCWlm ICgodGVtcCAmIERQTExfUFdSRE4pID09IDApIHsKKwkJCVJFR19XUklURShEUExMX0NUUkwsIHRl bXAgfCAoRFBMTF9QV1JETiB8IERQTExfUkVTRVQpKTsKKwkJCVJFR19XUklURShEUExMX1NUQVRV UywgMHgxKTsKKwkJfQorCQkvKiB3YWl0IGZvciBkcGxsIG9mZiAqLworCQl1ZGVsYXkoMTUwKTsK KwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgorCWNhc2UgRFJNX01PREVfRFBNU19T VEFOREJZOgorCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgorCQkvKiBFbmFibGUgZHBsbCAq LworCQl0ZW1wID0gUkVHX1JFQUQoRFBMTF9DVFJMKTsKKwkJaWYgKCh0ZW1wICYgRFBMTF9QV1JE TikgIT0gMCkgeworCQkJUkVHX1dSSVRFKERQTExfQ1RSTCwgdGVtcCAmIH4oRFBMTF9QV1JETiB8 IERQTExfUkVTRVQpKTsKKwkJCXRlbXAgPSBSRUdfUkVBRChEUExMX0NMS19FTkFCTEUpOworCQkJ UkVHX1dSSVRFKERQTExfQ0xLX0VOQUJMRSwgdGVtcCB8IERQTExfRU5fRElTUCB8IERQTExfU0VM X0hETUkgfCBEUExMX0VOX0hETUkpOworCQkJUkVHX1JFQUQoRFBMTF9DTEtfRU5BQkxFKTsKKwkJ fQorCQkvKiB3YWl0IGZvciBkcGxsIHdhcm0gdXAgKi8KKwkJdWRlbGF5KDE1MCk7CisKKwkJLyog RW5hYmxlIHBpcGUgQiAqLworCQl0ZW1wID0gUkVHX1JFQUQoUElQRUJDT05GKTsKKwkJaWYgKCh0 ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgPT0gMCkgeworCQkJUkVHX1dSSVRFKFBJUEVCQ09ORiwg dGVtcCB8IFBJUEVBQ09ORl9FTkFCTEUpOworCQkJUkVHX1JFQUQoUElQRUJDT05GKTsKKwkJfQor CisJCS8qIEVuYWJsZSBMTlcgUGlwZSBCICovCisJCXRlbXAgPSBSRUdfUkVBRChQQ0hfUElQRUJD T05GKTsKKwkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgPT0gMCkgeworCQkJUkVHX1dS SVRFKFBDSF9QSVBFQkNPTkYsIHRlbXAgfCBQSVBFQUNPTkZfRU5BQkxFKTsKKwkJCVJFR19SRUFE KFBDSF9QSVBFQkNPTkYpOworCQl9CisJCXdhaXRfZm9yX3ZibGFuayhkZXYpOworCisJCS8qIEVu YWJsZSBwbGFuZSAqLworCQl0ZW1wID0gUkVHX1JFQUQoRFNQQkNOVFIpOworCQlpZiAoKHRlbXAg JiBESVNQTEFZX1BMQU5FX0VOQUJMRSkgPT0gMCkgeworCQkJUkVHX1dSSVRFKERTUEJDTlRSLCB0 ZW1wIHwgRElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5n ZXMgKi8KKwkJCVJFR19XUklURShEU1BCU1VSRiwgUkVHX1JFQUQoRFNQQlNVUkYpKTsKKwkJCVJF R19SRUFEKERTUEJTVVJGKTsKKwkJfQorCQlwc2JfaW50ZWxfY3J0Y19sb2FkX2x1dChjcnRjKTsK Kwl9CisJLyogRFNQQVJCICovCisJUkVHX1dSSVRFKERTUEFSQiwgMHgwMDAwM2ZiZik7CisJLyog RlcxICovCisJUkVHX1dSSVRFKDB4NzAwMzQsIDB4M2Y4ODBhMGEpOworCS8qIEZXMiAqLworCVJF R19XUklURSgweDcwMDM4LCAweDBiMDYwODA4KTsKKwkvKiBGVzQgKi8KKwlSRUdfV1JJVEUoMHg3 MDA1MCwgMHgwODAzMDQwNCk7CisJLyogRlc1ICovCisJUkVHX1dSSVRFKDB4NzAwNTQsIDB4MDQw NDA0MDQpOworCS8qIExOQyBDaGlja2VuIEJpdHMgKi8KKwlSRUdfV1JJVEUoMHg3MDQwMCwgMHg0 MDAwKTsKK30KKworCitzdGF0aWMgdm9pZCBvYWt0cmFpbF9oZG1pX2RwbXMoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKK3sKKwlzdGF0aWMgaW50IGRwbXNfbW9kZSA9IC0x OworCisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgZHJt X3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG9ha3Ry YWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9IGRldl9wcml2LT5oZG1pX3ByaXY7CisJdTMyIHRlbXA7 CisKKwlpZiAoZHBtc19tb2RlID09IG1vZGUpCisJCXJldHVybjsKKworCWlmIChtb2RlICE9IERS TV9NT0RFX0RQTVNfT04pCisJCXRlbXAgPSAweDA7CisJZWxzZQorCQl0ZW1wID0gMHg5OTsKKwor CWRwbXNfbW9kZSA9IG1vZGU7CisJSERNSV9XUklURShIRE1JX1ZJREVPX1JFRywgdGVtcCk7Cit9 CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHRvdGFsX2NhbGN1bGF0ZShzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgaHRvdGFsLCBuZXdfY3J0Y19odG90YWw7CisKKwlodG90 YWwgPSAobW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwgKChtb2RlLT5jcnRjX2h0b3RhbCAtIDEp IDw8IDE2KTsKKworCS8qCisJICogMTAyNCB4IDc2OCAgbmV3X2NydGNfaHRvdGFsID0gMHgxMDI0 OworCSAqIDEyODAgeCAxMDI0IG5ld19jcnRjX2h0b3RhbCA9IDB4MGMzNDsKKwkgKi8KKwluZXdf Y3J0Y19odG90YWwgPSAobW9kZS0+Y3J0Y19odG90YWwgLSAxKSAqIDIwMCAqIDEwMDAgLyBtb2Rl LT5jbG9jazsKKworCXJldHVybiAobW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwgKG5ld19jcnRj X2h0b3RhbCA8PCAxNik7Cit9CisKK3N0YXRpYyB2b2lkIG9ha3RyYWlsX2hkbWlfZmluZF9kcGxs KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHRhcmdldCwKKwkJCQlpbnQgcmVmY2xrLCBzdHJ1 Y3Qgb2FrdHJhaWxfaGRtaV9jbG9jayAqYmVzdF9jbG9jaykKK3sKKwlpbnQgbnBfbWluLCBucF9t YXgsIG5yX21pbiwgbnJfbWF4OworCWludCBucCwgbnIsIG5mOworCisJbnBfbWluID0gRElWX1JP VU5EX1VQKG9ha3RyYWlsX2hkbWlfbGltaXQudmNvLm1pbiwgdGFyZ2V0ICogMTApOworCW5wX21h eCA9IG9ha3RyYWlsX2hkbWlfbGltaXQudmNvLm1heCAvICh0YXJnZXQgKiAxMCk7CisJaWYgKG5w X21pbiA8IG9ha3RyYWlsX2hkbWlfbGltaXQubnAubWluKQorCQlucF9taW4gPSBvYWt0cmFpbF9o ZG1pX2xpbWl0Lm5wLm1pbjsKKwlpZiAobnBfbWF4ID4gb2FrdHJhaWxfaGRtaV9saW1pdC5ucC5t YXgpCisJCW5wX21heCA9IG9ha3RyYWlsX2hkbWlfbGltaXQubnAubWF4OworCisJbnJfbWluID0g RElWX1JPVU5EX1VQKChyZWZjbGsgKiAxMDAwKSwgKHRhcmdldCAqIDEwICogbnBfbWF4KSk7CisJ bnJfbWF4ID0gRElWX1JPVU5EX1VQKChyZWZjbGsgKiAxMDAwKSwgKHRhcmdldCAqIDEwICogbnBf bWluKSk7CisJaWYgKG5yX21pbiA8IG9ha3RyYWlsX2hkbWlfbGltaXQubnIubWluKQorCQlucl9t aW4gPSBvYWt0cmFpbF9oZG1pX2xpbWl0Lm5yLm1pbjsKKwlpZiAobnJfbWF4ID4gb2FrdHJhaWxf aGRtaV9saW1pdC5uci5tYXgpCisJCW5yX21heCA9IG9ha3RyYWlsX2hkbWlfbGltaXQubnIubWF4 OworCisJbnAgPSBESVZfUk9VTkRfVVAoKHJlZmNsayAqIDEwMDApLCAodGFyZ2V0ICogMTAgKiBu cl9tYXgpKTsKKwluciA9IERJVl9ST1VORF9VUCgocmVmY2xrICogMTAwMCksICh0YXJnZXQgKiAx MCAqIG5wKSk7CisJbmYgPSBESVZfUk9VTkRfQ0xPU0VTVCgodGFyZ2V0ICogMTAgKiBucCAqIG5y KSwgcmVmY2xrKTsKKwlEUk1fREVCVUdfS01TKCJucCwgbnIsIG5mICVkICVkICVkXG4iLCBucCwg bnIsIG5mKTsKKworCS8qCisJICogMTAyNCB4IDc2OCAgbnAgPSAxOyBuciA9IDB4MjY7IG5mID0g MHgwZmQ4MDAwOworCSAqIDEyODAgeCAxMDI0IG5wID0gMTsgbnIgPSAweDE3OyBuZiA9IDB4MTAz NDAwMDsKKwkgKi8KKwliZXN0X2Nsb2NrLT5ucCA9IG5wOworCWJlc3RfY2xvY2stPm5yID0gbnIg LSAxOworCWJlc3RfY2xvY2stPm5mID0gKG5mIDw8IDE0KTsKK30KKworaW50IG9ha3RyYWlsX2Ny dGNfaGRtaV9tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFk anVzdGVkX21vZGUsCisJCQkgICAgaW50IHgsIGludCB5LAorCQkJICAgIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKm9sZF9mYikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2 OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlfZGV2ID0gZGV2X3ByaXYtPmhkbWlfcHJp djsKKwlpbnQgcGlwZSA9IDE7CisJaW50IGh0b3RfcmVnID0gKHBpcGUgPT0gMCkgPyBIVE9UQUxf QSA6IEhUT1RBTF9COworCWludCBoYmxhbmtfcmVnID0gKHBpcGUgPT0gMCkgPyBIQkxBTktfQSA6 IEhCTEFOS19COworCWludCBoc3luY19yZWcgPSAocGlwZSA9PSAwKSA/IEhTWU5DX0EgOiBIU1lO Q19COworCWludCB2dG90X3JlZyA9IChwaXBlID09IDApID8gVlRPVEFMX0EgOiBWVE9UQUxfQjsK KwlpbnQgdmJsYW5rX3JlZyA9IChwaXBlID09IDApID8gVkJMQU5LX0EgOiBWQkxBTktfQjsKKwlp bnQgdnN5bmNfcmVnID0gKHBpcGUgPT0gMCkgPyBWU1lOQ19BIDogVlNZTkNfQjsKKwlpbnQgZHNw c2l6ZV9yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFTSVpFIDogRFNQQlNJWkU7CisJaW50IGRzcHBv c19yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFQT1MgOiBEU1BCUE9TOworCWludCBwaXBlc3JjX3Jl ZyA9IChwaXBlID09IDApID8gUElQRUFTUkMgOiBQSVBFQlNSQzsKKwlpbnQgcGlwZWNvbmZfcmVn ID0gKHBpcGUgPT0gMCkgPyBQSVBFQUNPTkYgOiBQSVBFQkNPTkY7CisJaW50IHJlZmNsazsKKwlz dHJ1Y3Qgb2FrdHJhaWxfaGRtaV9jbG9jayBjbG9jazsKKwl1MzIgZHNwY250ciwgcGlwZWNvbmYs IGRwbGwsIHRlbXA7CisJaW50IGRzcGNudHJfcmVnID0gRFNQQkNOVFI7CisKKwkvKiBEaXNhYmxl IHRoZSBWR0EgcGxhbmUgdGhhdCB3ZSBuZXZlciB1c2UgKi8KKwlSRUdfV1JJVEUoVkdBQ05UUkws IFZHQV9ESVNQX0RJU0FCTEUpOworCisJLyogWFhYOiBEaXNhYmxlIHRoZSBwYW5lbCBmaXR0ZXIg aWYgaXQgd2FzIG9uIG91ciBwaXBlICovCisKKwkvKiBEaXNhYmxlIGRwbGwgaWYgbmVjZXNzYXJ5 ICovCisJZHBsbCA9IFJFR19SRUFEKERQTExfQ1RSTCk7CisJaWYgKChkcGxsICYgRFBMTF9QV1JE TikgPT0gMCkgeworCQlSRUdfV1JJVEUoRFBMTF9DVFJMLCBkcGxsIHwgKERQTExfUFdSRE4gfCBE UExMX1JFU0VUKSk7CisJCVJFR19XUklURShEUExMX0RJVl9DVFJMLCAweDAwMDAwMDAwKTsKKwkJ UkVHX1dSSVRFKERQTExfU1RBVFVTLCAweDEpOworCX0KKwl1ZGVsYXkoMTUwKTsKKworCS8qIHJl c2V0IGNvbnRyb2xsZXI6IEZJWE1FIC0gY2FuIHdlIHNvcnQgb3V0IHRoZSBpb3JlbWFwIG1lc3Mg PyAqLworCWlvdW5tYXAoaGRtaV9kZXYtPnJlZ3MpOworCW9ha3RyYWlsX2hkbWlfcmVzZXQoZGV2 KTsKKworCS8qIHByb2dyYW0gYW5kIGVuYWJsZSBkcGxsICovCisJcmVmY2xrID0gMjUwMDA7CisJ b2FrdHJhaWxfaGRtaV9maW5kX2RwbGwoY3J0YywgYWRqdXN0ZWRfbW9kZS0+Y2xvY2ssIHJlZmNs aywgJmNsb2NrKTsKKworCS8qIFNldHRpbmcgRFBMTCAqLworCWRwbGwgPSBSRUdfUkVBRChEUExM X0NUUkwpOworCWRwbGwgJj0gfkRQTExfUERJVl9NQVNLOworCWRwbGwgJj0gfihEUExMX1BXUkRO IHwgRFBMTF9SRVNFVCk7CisJUkVHX1dSSVRFKERQTExfQ1RSTCwgMHgwMDAwMDAwOCk7CisJUkVH X1dSSVRFKERQTExfRElWX0NUUkwsICgoY2xvY2submYgPDwgNikgfCBjbG9jay5ucikpOworCVJF R19XUklURShEUExMX0FESlVTVCwgKChjbG9jay5uZiA+PiAxNCkgLSAxKSk7CisJUkVHX1dSSVRF KERQTExfQ1RSTCwgKGRwbGwgfCAoY2xvY2subnAgPDwgRFBMTF9QRElWX1NISUZUKSB8IERQTExf RU5TVEFUIHwgRFBMTF9ESVRIRU4pKTsKKwlSRUdfV1JJVEUoRFBMTF9VUERBVEUsIDB4ODAwMDAw MDApOworCVJFR19XUklURShEUExMX0NMS19FTkFCTEUsIDB4ODAwNTAxMDIpOworCXVkZWxheSgx NTApOworCisJaGRtaV9kZXYtPnJlZ3MgPSBpb3JlbWFwKGhkbWlfZGV2LT5tbWlvLCBoZG1pX2Rl di0+bW1pb19sZW4pOworCWlmIChoZG1pX2Rldi0+cmVncyA9PSBOVUxMKSB7CisJCURSTV9FUlJP UigiZmFpbGVkIHRvIGRvIGhkbWkgbW1pbyBtYXBwaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJLyogY29uZmlndXJlIEhETUkgKi8KKwlIRE1JX1dSSVRFKDB4MTAwNCwgMHgxZmQp OworCUhETUlfV1JJVEUoMHgyMDAwLCAweDEpOworCUhETUlfV1JJVEUoMHgyMDA4LCAweDApOwor CUhETUlfV1JJVEUoMHgzMTMwLCAweDgpOworCUhETUlfV1JJVEUoMHgxMDFjLCAweDE4MDA4MTAp OworCisJdGVtcCA9IGh0b3RhbF9jYWxjdWxhdGUoYWRqdXN0ZWRfbW9kZSk7CisJUkVHX1dSSVRF KGh0b3RfcmVnLCB0ZW1wKTsKKwlSRUdfV1JJVEUoaGJsYW5rX3JlZywgKGFkanVzdGVkX21vZGUt PmNydGNfaGJsYW5rX3N0YXJ0IC0gMSkgfCAoKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX2Vu ZCAtIDEpIDw8IDE2KSk7CisJUkVHX1dSSVRFKGhzeW5jX3JlZywgKGFkanVzdGVkX21vZGUtPmNy dGNfaHN5bmNfc3RhcnQgLSAxKSB8ICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19lbmQgLSAx KSA8PCAxNikpOworCVJFR19XUklURSh2dG90X3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfdmRp c3BsYXkgLSAxKSB8ICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWwgLSAxKSA8PCAxNikpOwor CVJFR19XUklURSh2YmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQg LSAxKSB8ICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gMSkgPDwgMTYpKTsKKwlS RUdfV1JJVEUodnN5bmNfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCAtIDEp IHwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIDEpIDw8IDE2KSk7CisJUkVHX1dS SVRFKHBpcGVzcmNfcmVnLAorCQkoKG1vZGUtPmNydGNfaGRpc3BsYXkgLSAxKSA8PCAxNikgfCAg KG1vZGUtPmNydGNfdmRpc3BsYXkgLSAxKSk7CisKKwlSRUdfV1JJVEUoUENIX0hUT1RBTF9CLCAo YWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwgKChhZGp1c3RlZF9tb2RlLT5jcnRj X2h0b3RhbCAtIDEpIDw8IDE2KSk7CisJUkVHX1dSSVRFKFBDSF9IQkxBTktfQiwgKGFkanVzdGVk X21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0IC0gMSkgfCAoKGFkanVzdGVkX21vZGUtPmNydGNfaGJs YW5rX2VuZCAtIDEpIDw8IDE2KSk7CisJUkVHX1dSSVRFKFBDSF9IU1lOQ19CLCAoYWRqdXN0ZWRf bW9kZS0+Y3J0Y19oc3luY19zdGFydCAtIDEpIHwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5j X2VuZCAtIDEpIDw8IDE2KSk7CisJUkVHX1dSSVRFKFBDSF9WVE9UQUxfQiwgKGFkanVzdGVkX21v ZGUtPmNydGNfdmRpc3BsYXkgLSAxKSB8ICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWwgLSAx KSA8PCAxNikpOworCVJFR19XUklURShQQ0hfVkJMQU5LX0IsIChhZGp1c3RlZF9tb2RlLT5jcnRj X3ZibGFua19zdGFydCAtIDEpIHwgKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19lbmQgLSAx KSA8PCAxNikpOworCVJFR19XUklURShQQ0hfVlNZTkNfQiwgKGFkanVzdGVkX21vZGUtPmNydGNf dnN5bmNfc3RhcnQgLSAxKSB8ICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSAxKSA8 PCAxNikpOworCVJFR19XUklURShQQ0hfUElQRUJTUkMsCisJCSgobW9kZS0+Y3J0Y19oZGlzcGxh eSAtIDEpIDw8IDE2KSB8ICAobW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpKTsKKworCXRlbXAgPSBh ZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFu a19zdGFydDsKKwlIRE1JX1dSSVRFKEhETUlfSEJMQU5LX0EsICgoYWRqdXN0ZWRfbW9kZS0+Y3J0 Y19oZGlzcGxheSAtIDEpIDw8IDE2KSB8ICB0ZW1wKTsKKworCVJFR19XUklURShkc3BzaXplX3Jl ZywKKwkJCSgobW9kZS0+dmRpc3BsYXkgLSAxKSA8PCAxNikgfCAobW9kZS0+aGRpc3BsYXkgLSAx KSk7CisJUkVHX1dSSVRFKGRzcHBvc19yZWcsIDApOworCisJLyogRmx1c2ggdGhlIHBsYW5lIGNo YW5nZXMgKi8KKwl7CisJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3Mg PSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKwkJY3J0Y19mdW5jcy0+bW9kZV9zZXRfYmFzZShjcnRj LCB4LCB5LCBvbGRfZmIpOworCX0KKworCS8qIFNldCB1cCB0aGUgZGlzcGxheSBwbGFuZSByZWdp c3RlciAqLworCWRzcGNudHIgPSBSRUdfUkVBRChkc3BjbnRyX3JlZyk7CisJZHNwY250ciB8PSBE SVNQUExBTkVfR0FNTUFfRU5BQkxFOworCWRzcGNudHIgfD0gRElTUFBMQU5FX1NFTF9QSVBFX0I7 CisJZHNwY250ciB8PSBESVNQTEFZX1BMQU5FX0VOQUJMRTsKKworCS8qIHNldHVwIHBpcGVjb25m ICovCisJcGlwZWNvbmYgPSBSRUdfUkVBRChwaXBlY29uZl9yZWcpOworCXBpcGVjb25mIHw9IFBJ UEVBQ09ORl9FTkFCTEU7CisKKwlSRUdfV1JJVEUocGlwZWNvbmZfcmVnLCBwaXBlY29uZik7CisJ UkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKKworCVJFR19XUklURShQQ0hfUElQRUJDT05GLCBwaXBl Y29uZik7CisJUkVHX1JFQUQoUENIX1BJUEVCQ09ORik7CisJd2FpdF9mb3JfdmJsYW5rKGRldik7 CisKKwlSRUdfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOworCXdhaXRfZm9yX3ZibGFuayhk ZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2FrdHJhaWxfaGRtaV9tb2RlX3Zh bGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJaWYgKG1vZGUtPmNsb2NrID4gMTY1MDAwKQorCQlyZXR1cm4g TU9ERV9DTE9DS19ISUdIOworCWlmIChtb2RlLT5jbG9jayA8IDIwMDAwKQorCQlyZXR1cm4gTU9E RV9DTE9DS19MT1c7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4p CisJCXJldHVybiBNT0RFX05PX0RCTEVTQ0FOOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0 YXRpYyBib29sIG9ha3RyYWlsX2hkbWlfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK29ha3RyYWlsX2hkbWlfZGV0ZWN0KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5l Y3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlfZGV2ID0gZGV2X3ByaXYt PmhkbWlfcHJpdjsKKwl1MzIgdGVtcDsKKworCXRlbXAgPSBIRE1JX1JFQUQoSERNSV9IU1IpOwor CURSTV9ERUJVR19LTVMoIkhETUlfSFNSICV4XG4iLCB0ZW1wKTsKKworCWlmICgodGVtcCAmIEhE TUlfREVURUNUX0hEUCkgIT0gMCkKKwkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0 ZWQ7CisJZWxzZQorCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwor CXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJhd19lZGlk W10gPSB7CisJMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwg MHgxMCwgMHhhYywgMHgyZiwgMHhhMCwKKwkweDUzLCAweDU1LCAweDMzLCAweDMwLCAweDE2LCAw eDEzLCAweDAxLCAweDAzLCAweDBlLCAweDNhLCAweDI0LCAweDc4LAorCTB4ZWEsIDB4ZTksIDB4 ZjUsIDB4YWMsIDB4NTEsIDB4MzAsIDB4YjQsIDB4MjUsIDB4MTEsIDB4NTAsIDB4NTQsIDB4YTUs CisJMHg0YiwgMHgwMCwgMHg4MSwgMHg4MCwgMHhhOSwgMHg0MCwgMHg3MSwgMHg0ZiwgMHhiMywg MHgwMCwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw eDI4LCAweDNjLCAweDgwLCAweGEwLCAweDcwLCAweGIwLAorCTB4MjMsIDB4NDAsIDB4MzAsIDB4 MjAsIDB4MzYsIDB4MDAsIDB4NDYsIDB4NmMsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHgw MCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHg0NywgMHg0ZSwgMHgzNywgMHgzMiwgMHgzMSwg MHgzOSwgMHgzNSwKKwkweDUyLCAweDMwLCAweDMzLCAweDU1LCAweDUzLCAweDBhLCAweDAwLCAw eDAwLCAweDAwLCAweGZjLCAweDAwLCAweDQ0LAorCTB4NDUsIDB4NGMsIDB4NGMsIDB4MjAsIDB4 MzIsIDB4MzcsIDB4MzAsIDB4MzksIDB4NTcsIDB4MGEsIDB4MjAsIDB4MjAsCisJMHgwMCwgMHgw MCwgMHgwMCwgMHhmZCwgMHgwMCwgMHgzOCwgMHg0YywgMHgxZSwgMHg1MywgMHgxMSwgMHgwMCwg MHgwYSwKKwkweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDhkCit9 OworCitzdGF0aWMgaW50IG9ha3RyYWlsX2hkbWlfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ ZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXN0cnVjdCBlZGlkICplZGlkOwor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLCAqdDsKKwlpbnQgaSA9IDAsIHJldCA9IDA7 CisKKwlpMmNfYWRhcCA9IGkyY19nZXRfYWRhcHRlcigzKTsKKwlpZiAoaTJjX2FkYXAgPT0gTlVM TCkgeworCQlEUk1fRVJST1IoIk5vIGRkYyBhZGFwdGVyIGF2YWlsYWJsZSFcbiIpOworCQllZGlk ID0gKHN0cnVjdCBlZGlkICopcmF3X2VkaWQ7CisJfSBlbHNlIHsKKwkJZWRpZCA9IChzdHJ1Y3Qg ZWRpZCAqKXJhd19lZGlkOworCQkvKiBGSVhNRSA/IGVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVj dG9yLCBpMmNfYWRhcCk7ICovCisJfQorCisJaWYgKGVkaWQpIHsKKwkJZHJtX21vZGVfY29ubmVj dG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJCXJldCA9IGRybV9h ZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCQljb25uZWN0b3ItPmRpc3BsYXlfaW5m by5yYXdfZWRpZCA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBwcnVuZSBtb2RlcyB0aGF0IHJlcXVp cmUgZnJhbWUgYnVmZmVyIGJpZ2dlciB0aGFuIHN0b2xlbiBtZW0KKwkgKi8KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7 CisJCWlmICgobW9kZS0+aGRpc3BsYXkgKiBtb2RlLT52ZGlzcGxheSAqIDQpID49IGRldl9wcml2 LT52cmFtX3N0b2xlbl9zaXplKSB7CisJCQlpKys7CisJCQlkcm1fbW9kZV9yZW1vdmUoY29ubmVj dG9yLCBtb2RlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0IC0gaTsKK30KKworc3RhdGljIHZvaWQg b2FrdHJhaWxfaGRtaV9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkg ICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGVuY29kZXItPmRldjsKKworCW9ha3RyYWlsX2hkbWlfYXVkaW9fZW5hYmxlKGRldik7CisJ cmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBvYWt0cmFpbF9oZG1pX2Rlc3Ryb3koc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG9ha3RyYWlsX2hkbWlfaGVscGVyX2Z1bmNz ID0geworCS5kcG1zID0gb2FrdHJhaWxfaGRtaV9kcG1zLAorCS5tb2RlX2ZpeHVwID0gb2FrdHJh aWxfaGRtaV9tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gcHNiX2ludGVsX2VuY29kZXJfcHJlcGFy ZSwKKwkubW9kZV9zZXQgPSBvYWt0cmFpbF9oZG1pX21vZGVfc2V0LAorCS5jb21taXQgPSBwc2Jf aW50ZWxfZW5jb2Rlcl9jb21taXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzCisJCQkJCW9ha3RyYWlsX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gb2FrdHJhaWxfaGRtaV9nZXRfbW9kZXMsCisJLm1vZGVf dmFsaWQgPSBvYWt0cmFpbF9oZG1pX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IHBzYl9p bnRlbF9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3Mgb2FrdHJhaWxfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1f aGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5kZXRlY3QgPSBvYWt0cmFpbF9oZG1pX2RldGVjdCwK KwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywK KwkuZGVzdHJveSA9IG9ha3RyYWlsX2hkbWlfZGVzdHJveSwKK307CisKK3N0YXRpYyB2b2lkIG9h a3RyYWlsX2hkbWlfZW5jX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor CWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2VuY29kZXJfZnVuY3Mgb2FrdHJhaWxfaGRtaV9lbmNfZnVuY3MgPSB7CisJLmRlc3Ryb3kg PSBvYWt0cmFpbF9oZG1pX2VuY19kZXN0cm95LAorfTsKKwordm9pZCBvYWt0cmFpbF9oZG1pX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2Rl dmljZSAqbW9kZV9kZXYpCit7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9v dXRwdXQ7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXI7CisKKwlwc2JfaW50ZWxfb3V0cHV0ID0ga3phbGxvYyhzaXplb2Yoc3Ry dWN0IHBzYl9pbnRlbF9vdXRwdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBzYl9pbnRlbF9vdXRw dXQpCisJCXJldHVybjsKKworCXBzYl9pbnRlbF9vdXRwdXQtPm1vZGVfZGV2ID0gbW9kZV9kZXY7 CisJY29ubmVjdG9yID0gJnBzYl9pbnRlbF9vdXRwdXQtPmJhc2U7CisJZW5jb2RlciA9ICZwc2Jf aW50ZWxfb3V0cHV0LT5lbmM7CisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnBzYl9pbnRlbF9v dXRwdXQtPmJhc2UsCisJCQkgICAmb2FrdHJhaWxfaGRtaV9jb25uZWN0b3JfZnVuY3MsCisJCQkg ICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCk7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRldiwgJnBz Yl9pbnRlbF9vdXRwdXQtPmVuYywKKwkJCSAmb2FrdHJhaWxfaGRtaV9lbmNfZnVuY3MsCisJCQkg RFJNX01PREVfRU5DT0RFUl9UTURTKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j b2RlcigmcHNiX2ludGVsX291dHB1dC0+YmFzZSwKKwkJCQkJICAmcHNiX2ludGVsX291dHB1dC0+ ZW5jKTsKKworCXBzYl9pbnRlbF9vdXRwdXQtPnR5cGUgPSBJTlRFTF9PVVRQVVRfSERNSTsKKwlk cm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZvYWt0cmFpbF9oZG1pX2hlbHBlcl9mdW5j cyk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJm9ha3RyYWlsX2hkbWlf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJw aXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKKwljb25uZWN0b3ItPmludGVybGFj ZV9hbGxvd2VkID0gZmFsc2U7CisJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxz ZTsKKwlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOworCisJcmV0dXJuOworfQor CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaGRtaV9pZHMpID0geworCXsgUENJX0RF VklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MGQpIH0sCisJe30KK307CisKK3ZvaWQgb2Fr dHJhaWxfaGRtaV9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1f cHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGNpX2Rl diAqcGRldjsKKwlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlfZGV2OworCWludCByZXQ7 CisKKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODBkLCBO VUxMKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKworCWhkbWlfZGV2ID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZG1pX2Rl dikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7 CisJCWdvdG8gb3V0OworCX0KKworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJ aWYgKHJldCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBoZG1pIGNv bnRyb2xsZXJcbiIpOworCQlnb3RvIGZyZWU7CisJfQorCisJaGRtaV9kZXYtPm1taW8gPSBwY2lf cmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaGRtaV9kZXYtPm1taW9fbGVuID0gcGNpX3Jlc291 cmNlX2xlbihwZGV2LCAwKTsKKwloZG1pX2Rldi0+cmVncyA9IGlvcmVtYXAoaGRtaV9kZXYtPm1t aW8sIGhkbWlfZGV2LT5tbWlvX2xlbik7CisJaWYgKCFoZG1pX2Rldi0+cmVncykgeworCQlkZXZf ZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBoZG1pIG1taW9cbiIpOworCQlnb3RvIGZyZWU7 CisJfQorCisJaGRtaV9kZXYtPmRldiA9IHBkZXY7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGhk bWlfZGV2KTsKKworCS8qIEluaXRpYWxpemUgaTJjIGNvbnRyb2xsZXIgKi8KKwlyZXQgPSBvYWt0 cmFpbF9oZG1pX2kyY19pbml0KGhkbWlfZGV2LT5kZXYpOworCWlmIChyZXQpCisJCWRldl9lcnIo ZGV2LT5kZXYsICJIRE1JIEkyQyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCisJZGV2X3By aXYtPmhkbWlfcHJpdiA9IGhkbWlfZGV2OworCW9ha3RyYWlsX2hkbWlfYXVkaW9fZGlzYWJsZShk ZXYpOworCXJldHVybjsKKworZnJlZToKKwlrZnJlZShoZG1pX2Rldik7CitvdXQ6CisJcmV0dXJu OworfQorCit2b2lkIG9ha3RyYWlsX2hkbWlfdGVhcmRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9IGRldl9wcml2LT5oZG1p X3ByaXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlpZiAoaGRtaV9kZXYpIHsKKwkJcGRl diA9IGhkbWlfZGV2LT5kZXY7CisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJb2Fr dHJhaWxfaGRtaV9pMmNfZXhpdChwZGV2KTsKKwkJaW91bm1hcChoZG1pX2Rldi0+cmVncyk7CisJ CWtmcmVlKGhkbWlfZGV2KTsKKwkJcGNpX2Rldl9wdXQocGRldik7CisJfQorfQorCisvKiBzYXZl IEhETUkgcmVnaXN0ZXIgc3RhdGUgKi8KK3ZvaWQgb2FrdHJhaWxfaGRtaV9zYXZlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYgPSBk ZXZfcHJpdi0+aGRtaV9wcml2OworCWludCBpOworCisJLyogZHBsbCAqLworCWhkbWlfZGV2LT5z YXZlRFBMTF9DVFJMID0gUFNCX1JWREMzMihEUExMX0NUUkwpOworCWhkbWlfZGV2LT5zYXZlRFBM TF9ESVZfQ1RSTCA9IFBTQl9SVkRDMzIoRFBMTF9ESVZfQ1RSTCk7CisJaGRtaV9kZXYtPnNhdmVE UExMX0FESlVTVCA9IFBTQl9SVkRDMzIoRFBMTF9BREpVU1QpOworCWhkbWlfZGV2LT5zYXZlRFBM TF9VUERBVEUgPSBQU0JfUlZEQzMyKERQTExfVVBEQVRFKTsKKwloZG1pX2Rldi0+c2F2ZURQTExf Q0xLX0VOQUJMRSA9IFBTQl9SVkRDMzIoRFBMTF9DTEtfRU5BQkxFKTsKKworCS8qIHBpcGUgQiAq LworCWRldl9wcml2LT5zYXZlUElQRUJDT05GID0gUFNCX1JWREMzMihQSVBFQkNPTkYpOworCWRl dl9wcml2LT5zYXZlUElQRUJTUkMgID0gUFNCX1JWREMzMihQSVBFQlNSQyk7CisJZGV2X3ByaXYt PnNhdmVIVE9UQUxfQiAgPSBQU0JfUlZEQzMyKEhUT1RBTF9CKTsKKwlkZXZfcHJpdi0+c2F2ZUhC TEFOS19CICA9IFBTQl9SVkRDMzIoSEJMQU5LX0IpOworCWRldl9wcml2LT5zYXZlSFNZTkNfQiAg ID0gUFNCX1JWREMzMihIU1lOQ19CKTsKKwlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CICA9IFBTQl9S VkRDMzIoVlRPVEFMX0IpOworCWRldl9wcml2LT5zYXZlVkJMQU5LX0IgID0gUFNCX1JWREMzMihW QkxBTktfQik7CisJZGV2X3ByaXYtPnNhdmVWU1lOQ19CICAgPSBQU0JfUlZEQzMyKFZTWU5DX0Ip OworCisJaGRtaV9kZXYtPnNhdmVQQ0hfUElQRUJDT05GID0gUFNCX1JWREMzMihQQ0hfUElQRUJD T05GKTsKKwloZG1pX2Rldi0+c2F2ZVBDSF9QSVBFQlNSQyA9IFBTQl9SVkRDMzIoUENIX1BJUEVC U1JDKTsKKwloZG1pX2Rldi0+c2F2ZVBDSF9IVE9UQUxfQiA9IFBTQl9SVkRDMzIoUENIX0hUT1RB TF9CKTsKKwloZG1pX2Rldi0+c2F2ZVBDSF9IQkxBTktfQiA9IFBTQl9SVkRDMzIoUENIX0hCTEFO S19CKTsKKwloZG1pX2Rldi0+c2F2ZVBDSF9IU1lOQ19CICA9IFBTQl9SVkRDMzIoUENIX0hTWU5D X0IpOworCWhkbWlfZGV2LT5zYXZlUENIX1ZUT1RBTF9CID0gUFNCX1JWREMzMihQQ0hfVlRPVEFM X0IpOworCWhkbWlfZGV2LT5zYXZlUENIX1ZCTEFOS19CID0gUFNCX1JWREMzMihQQ0hfVkJMQU5L X0IpOworCWhkbWlfZGV2LT5zYXZlUENIX1ZTWU5DX0IgID0gUFNCX1JWREMzMihQQ0hfVlNZTkNf Qik7CisKKwkvKiBwbGFuZSAqLworCWRldl9wcml2LT5zYXZlRFNQQkNOVFIgPSBQU0JfUlZEQzMy KERTUEJDTlRSKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUgPSBQU0JfUlZEQzMyKERTUEJT VFJJREUpOworCWRldl9wcml2LT5zYXZlRFNQQkFERFIgPSBQU0JfUlZEQzMyKERTUEJCQVNFKTsK KwlkZXZfcHJpdi0+c2F2ZURTUEJTVVJGID0gUFNCX1JWREMzMihEU1BCU1VSRik7CisJZGV2X3By aXYtPnNhdmVEU1BCTElOT0ZGID0gUFNCX1JWREMzMihEU1BCTElOT0ZGKTsKKwlkZXZfcHJpdi0+ c2F2ZURTUEJUSUxFT0ZGID0gUFNCX1JWREMzMihEU1BCVElMRU9GRik7CisKKwkvKiBjdXJzb3Ig QiAqLworCWRldl9wcml2LT5zYXZlRFNQQkNVUlNPUl9DVFJMID0gUFNCX1JWREMzMihDVVJCQ05U Uik7CisJZGV2X3ByaXYtPnNhdmVEU1BCQ1VSU09SX0JBU0UgPSBQU0JfUlZEQzMyKENVUkJCQVNF KTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJDVVJTT1JfUE9TID0gUFNCX1JWREMzMihDVVJCUE9TKTsK KworCS8qIHNhdmUgcGFsZXR0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJZGV2 X3ByaXYtPnNhdmVfcGFsZXR0ZV9iW2ldID0gUFNCX1JWREMzMihQQUxFVFRFX0IgKyAoaSA8PCAy KSk7Cit9CisKKy8qIHJlc3RvcmUgSERNSSByZWdpc3RlciBzdGF0ZSAqLwordm9pZCBvYWt0cmFp bF9oZG1pX3Jlc3RvcmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX3Bz Yl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG9ha3RyYWls X2hkbWlfZGV2ICpoZG1pX2RldiA9IGRldl9wcml2LT5oZG1pX3ByaXY7CisJaW50IGk7CisKKwkv KiBkcGxsICovCisJUFNCX1dWREMzMihoZG1pX2Rldi0+c2F2ZURQTExfQ1RSTCwgRFBMTF9DVFJM KTsKKwlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZlRFBMTF9ESVZfQ1RSTCwgRFBMTF9ESVZfQ1RS TCk7CisJUFNCX1dWREMzMihoZG1pX2Rldi0+c2F2ZURQTExfQURKVVNULCBEUExMX0FESlVTVCk7 CisJUFNCX1dWREMzMihoZG1pX2Rldi0+c2F2ZURQTExfVVBEQVRFLCBEUExMX1VQREFURSk7CisJ UFNCX1dWREMzMihoZG1pX2Rldi0+c2F2ZURQTExfQ0xLX0VOQUJMRSwgRFBMTF9DTEtfRU5BQkxF KTsKKwlEUk1fVURFTEFZKDE1MCk7CisKKwkvKiBwaXBlICovCisJUFNCX1dWREMzMihkZXZfcHJp di0+c2F2ZVBJUEVCU1JDLCBQSVBFQlNSQyk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZUhU T1RBTF9CLCBIVE9UQUxfQik7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZUhCTEFOS19CLCBI QkxBTktfQik7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZUhTWU5DX0IsICBIU1lOQ19CKTsK KwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlVlRPVEFMX0IsIFZUT1RBTF9CKTsKKwlQU0JfV1ZE QzMyKGRldl9wcml2LT5zYXZlVkJMQU5LX0IsIFZCTEFOS19CKTsKKwlQU0JfV1ZEQzMyKGRldl9w cml2LT5zYXZlVlNZTkNfQiwgIFZTWU5DX0IpOworCisJUFNCX1dWREMzMihoZG1pX2Rldi0+c2F2 ZVBDSF9QSVBFQlNSQywgUENIX1BJUEVCU1JDKTsKKwlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZl UENIX0hUT1RBTF9CLCBQQ0hfSFRPVEFMX0IpOworCVBTQl9XVkRDMzIoaGRtaV9kZXYtPnNhdmVQ Q0hfSEJMQU5LX0IsIFBDSF9IQkxBTktfQik7CisJUFNCX1dWREMzMihoZG1pX2Rldi0+c2F2ZVBD SF9IU1lOQ19CLCAgUENIX0hTWU5DX0IpOworCVBTQl9XVkRDMzIoaGRtaV9kZXYtPnNhdmVQQ0hf VlRPVEFMX0IsIFBDSF9WVE9UQUxfQik7CisJUFNCX1dWREMzMihoZG1pX2Rldi0+c2F2ZVBDSF9W QkxBTktfQiwgUENIX1ZCTEFOS19CKTsKKwlQU0JfV1ZEQzMyKGhkbWlfZGV2LT5zYXZlUENIX1ZT WU5DX0IsICBQQ0hfVlNZTkNfQik7CisKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlUElQRUJD T05GLCBQSVBFQkNPTkYpOworCVBTQl9XVkRDMzIoaGRtaV9kZXYtPnNhdmVQQ0hfUElQRUJDT05G LCBQQ0hfUElQRUJDT05GKTsKKworCS8qIHBsYW5lICovCisJUFNCX1dWREMzMihkZXZfcHJpdi0+ c2F2ZURTUEJMSU5PRkYsIERTUEJMSU5PRkYpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVE U1BCU1RSSURFLCBEU1BCU1RSSURFKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlRFNQQlRJ TEVPRkYsIERTUEJUSUxFT0ZGKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlRFNQQkNOVFIs IERTUEJDTlRSKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlRFNQQlNVUkYsIERTUEJTVVJG KTsKKworCS8qIGN1cnNvciBCICovCisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEJDVVJT T1JfQ1RSTCwgQ1VSQkNOVFIpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BCQ1VSU09S X1BPUywgQ1VSQlBPUyk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEJDVVJTT1JfQkFT RSwgQ1VSQkJBU0UpOworCisJLyogcmVzdG9yZSBwYWxldHRlICovCisJZm9yIChpID0gMDsgaSA8 IDI1NjsgaSsrKQorCQlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYltpXSwgUEFM RVRURV9CICsgKGkgPDwgMikpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUw MC9vYWt0cmFpbF9oZG1pX2kyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9o ZG1pX2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NTRlNmYKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2hkbWlfaTJj LmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOgorICoJTGkgUGVuZyA8cGVuZy5saUBpbnRlbC5jb20+CisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8 bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKyNpbmNsdWRlICJwc2JfZHJ2LmgiCisKKyNkZWZpbmUgSERNSV9SRUFEKHJl ZykJCXJlYWRsKGhkbWlfZGV2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEhETUlfV1JJVEUocmVn LCB2YWwpCXdyaXRlbCh2YWwsIGhkbWlfZGV2LT5yZWdzICsgKHJlZykpCisKKyNkZWZpbmUgSERN SV9IQ1IJMHgxMDAwCisjZGVmaW5lIEhDUl9ERVRFQ1RfSERQCQkoMSA8PCA2KQorI2RlZmluZSBI Q1JfRU5BQkxFX0hEQ1AJCSgxIDw8IDUpCisjZGVmaW5lIEhDUl9FTkFCTEVfQVVESU8JKDEgPDwg MikKKyNkZWZpbmUgSENSX0VOQUJMRV9QSVhFTAkoMSA8PCAxKQorI2RlZmluZSBIQ1JfRU5BQkxF X1RNRFMJCSgxIDw8IDApCisjZGVmaW5lIEhETUlfSElDUgkweDEwMDQKKyNkZWZpbmUgSERNSV9J TlRSX0kyQ19FUlJPUgkoMSA8PCA0KQorI2RlZmluZSBIRE1JX0lOVFJfSTJDX0ZVTEwJKDEgPDwg MykKKyNkZWZpbmUgSERNSV9JTlRSX0kyQ19ET05FCSgxIDw8IDIpCisjZGVmaW5lIEhETUlfSU5U Ul9IUEQJCSgxIDw8IDApCisjZGVmaW5lIEhETUlfSFNSCTB4MTAwOAorI2RlZmluZSBIRE1JX0hJ U1IJMHgxMDBDCisjZGVmaW5lIEhETUlfSEkyQ1JEQjAJMHgxMjAwCisjZGVmaW5lIEhETUlfSEky Q0hDUgkweDEyNDAKKyNkZWZpbmUgSEkyQ19IRENQX1dSSVRFCQkoMCA8PCAyKQorI2RlZmluZSBI STJDX0hEQ1BfUklfUkVBRAkoMSA8PCAyKQorI2RlZmluZSBISTJDX0hEQ1BfUkVBRAkJKDIgPDwg MikKKyNkZWZpbmUgSEkyQ19FRElEX1JFQUQJCSgzIDw8IDIpCisjZGVmaW5lIEhJMkNfUkVBRF9D T05USU5VRQkoMSA8PCAxKQorI2RlZmluZSBISTJDX0VOQUJMRV9UUkFOU0FDVElPTgkoMSA8PCAw KQorCisjZGVmaW5lIEhETUlfSUNSSAkweDExMDAKKyNkZWZpbmUgSERNSV9ISTJDVERSMAkweDEy NDQKKyNkZWZpbmUgSERNSV9ISTJDVERSMQkweDEyNDgKKworI2RlZmluZSBJMkNfU1RBVF9JTklU CQkwCisjZGVmaW5lIEkyQ19SRUFEX0RPTkUJCTEKKyNkZWZpbmUgSTJDX1RSQU5TQUNUSU9OX0RP TkUJMgorCitzdHJ1Y3QgaGRtaV9pMmNfZGV2IHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7 CisJc3RydWN0IG11dGV4IGkyY19sb2NrOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlOwor CWludCBzdGF0dXM7CisJc3RydWN0IGkyY19tc2cgKm1zZzsKKwlpbnQgYnVmX29mZnNldDsKK307 CisKK3N0YXRpYyB2b2lkIGhkbWlfaTJjX2lycV9lbmFibGUoc3RydWN0IG9ha3RyYWlsX2hkbWlf ZGV2ICpoZG1pX2RldikKK3sKKwl1MzIgdGVtcDsKKworCXRlbXAgPSBIRE1JX1JFQUQoSERNSV9I SUNSKTsKKwl0ZW1wIHw9IChIRE1JX0lOVFJfSTJDX0VSUk9SIHwgSERNSV9JTlRSX0kyQ19GVUxM IHwgSERNSV9JTlRSX0kyQ19ET05FKTsKKwlIRE1JX1dSSVRFKEhETUlfSElDUiwgdGVtcCk7CisJ SERNSV9SRUFEKEhETUlfSElDUik7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfaTJjX2lycV9kaXNh YmxlKHN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYpCit7CisJSERNSV9XUklURShI RE1JX0hJQ1IsIDB4MCk7CisJSERNSV9SRUFEKEhETUlfSElDUik7Cit9CisKK3N0YXRpYyBpbnQg eGZlcl9yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgKnBtc2cp Cit7CisJc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldiA9IGkyY19nZXRfYWRhcGRh dGEoYWRhcCk7CisJc3RydWN0IGhkbWlfaTJjX2RldiAqaTJjX2RldiA9IGhkbWlfZGV2LT5pMmNf ZGV2OworCXUzMiB0ZW1wOworCisJaTJjX2Rldi0+c3RhdHVzID0gSTJDX1NUQVRfSU5JVDsKKwlp MmNfZGV2LT5tc2cgPSBwbXNnOworCWkyY19kZXYtPmJ1Zl9vZmZzZXQgPSAwOworCUlOSVRfQ09N UExFVElPTihpMmNfZGV2LT5jb21wbGV0ZSk7CisKKwkvKiBFbmFibGUgSTJDIHRyYW5zYWN0aW9u ICovCisJdGVtcCA9ICgocG1zZy0+bGVuKSA8PCAyMCkgfCBISTJDX0VESURfUkVBRCB8IEhJMkNf RU5BQkxFX1RSQU5TQUNUSU9OOworCUhETUlfV1JJVEUoSERNSV9ISTJDSENSLCB0ZW1wKTsKKwlI RE1JX1JFQUQoSERNSV9ISTJDSENSKTsKKworCXdoaWxlIChpMmNfZGV2LT5zdGF0dXMgIT0gSTJD X1RSQU5TQUNUSU9OX0RPTkUpCisJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90 aW1lb3V0KCZpMmNfZGV2LT5jb21wbGV0ZSwKKwkJCQkJCQkJMTAgKiBIWik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB4ZmVyX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwg c3RydWN0IGkyY19tc2cgKnBtc2cpCit7CisJLyoKKwkgKiBYWFg6IGkyYyB3cml0ZSBzZWVtcyBp c24ndCB1c2VmdWwgZm9yIEVESUQgcHJvYmUsIGRvbid0IGRvIGFueXRoaW5nCisJICovCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2FrdHJhaWxfaGRtaV9pMmNfYWNjZXNzKHN0cnVjdCBp MmNfYWRhcHRlciAqYWRhcCwKKwkJCQlzdHJ1Y3QgaTJjX21zZyAqcG1zZywKKwkJCQlpbnQgbnVt KQoreworCXN0cnVjdCBvYWt0cmFpbF9oZG1pX2RldiAqaGRtaV9kZXYgPSBpMmNfZ2V0X2FkYXBk YXRhKGFkYXApOworCXN0cnVjdCBoZG1pX2kyY19kZXYgKmkyY19kZXYgPSBoZG1pX2Rldi0+aTJj X2RldjsKKwlpbnQgaSwgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmkyY19kZXYtPmkyY19sb2Nr KTsKKworCS8qIEVuYWJsZSBpMmMgdW5pdCAqLworCUhETUlfV1JJVEUoSERNSV9JQ1JILCAweDAw MDA4NzYwKTsKKworCS8qIEVuYWJsZSBpcnEgKi8KKwloZG1pX2kyY19pcnFfZW5hYmxlKGhkbWlf ZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKHBtc2ctPmxlbiAmJiBw bXNnLT5idWYpIHsKKwkJCWlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1JEKQorCQkJCWVyciA9IHhm ZXJfcmVhZChhZGFwLCBwbXNnKTsKKwkJCWVsc2UKKwkJCQllcnIgPSB4ZmVyX3dyaXRlKGFkYXAs IHBtc2cpOworCQl9CisJCXBtc2crKzsgICAgICAgICAvKiBuZXh0IG1lc3NhZ2UgKi8KKwl9CisK KwkvKiBEaXNhYmxlIGlycSAqLworCWhkbWlfaTJjX2lycV9kaXNhYmxlKGhkbWlfZGV2KTsKKwor CW11dGV4X3VubG9jaygmaTJjX2Rldi0+aTJjX2xvY2spOworCisJcmV0dXJuIGk7Cit9CisKK3N0 YXRpYyB1MzIgb2FrdHJhaWxfaGRtaV9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0 ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DXzEwQklUX0FERFI7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBvYWt0cmFpbF9oZG1pX2kyY19hbGdv cml0aG0gPSB7CisJLm1hc3Rlcl94ZmVyCT0gb2FrdHJhaWxfaGRtaV9pMmNfYWNjZXNzLAorCS5m dW5jdGlvbmFsaXR5ICA9IG9ha3RyYWlsX2hkbWlfaTJjX2Z1bmMsCit9OworCitzdGF0aWMgc3Ry dWN0IGkyY19hZGFwdGVyIG9ha3RyYWlsX2hkbWlfaTJjX2FkYXB0ZXIgPSB7CisJLm5hbWUJCT0g Im9ha3RyYWlsX2hkbWlfaTJjIiwKKwkubnIJCT0gMywKKwkub3duZXIJCT0gVEhJU19NT0RVTEUs CisJLmNsYXNzCQk9IEkyQ19DTEFTU19EREMsCisJLmFsZ28JCT0gJm9ha3RyYWlsX2hkbWlfaTJj X2FsZ29yaXRobSwKK307CisKK3N0YXRpYyB2b2lkIGhkbWlfaTJjX3JlYWQoc3RydWN0IG9ha3Ry YWlsX2hkbWlfZGV2ICpoZG1pX2RldikKK3sKKwlzdHJ1Y3QgaGRtaV9pMmNfZGV2ICppMmNfZGV2 ID0gaGRtaV9kZXYtPmkyY19kZXY7CisJc3RydWN0IGkyY19tc2cgKm1zZyA9IGkyY19kZXYtPm1z ZzsKKwl1OCAqYnVmID0gbXNnLT5idWY7CisJdTMyIHRlbXA7CisJaW50IGksIG9mZnNldDsKKwor CW9mZnNldCA9IGkyY19kZXYtPmJ1Zl9vZmZzZXQ7CisJZm9yIChpID0gMDsgaSA8IDB4MTA7IGkr KykgeworCQl0ZW1wID0gSERNSV9SRUFEKEhETUlfSEkyQ1JEQjAgKyAoaSAqIDQpKTsKKwkJbWVt Y3B5KGJ1ZiArIChvZmZzZXQgKyBpICogNCksICZ0ZW1wLCA0KTsKKwl9CisJaTJjX2Rldi0+YnVm X29mZnNldCArPSAoMHgxMCAqIDQpOworCisJLyogY2xlYXJpbmcgcmVhZCBidWZmZXIgZnVsbCBp bnRyICovCisJdGVtcCA9IEhETUlfUkVBRChIRE1JX0hJU1IpOworCUhETUlfV1JJVEUoSERNSV9I SVNSLCB0ZW1wIHwgSERNSV9JTlRSX0kyQ19GVUxMKTsKKwlIRE1JX1JFQUQoSERNSV9ISVNSKTsK KworCS8qIGNvbnRpbnVlIHJlYWQgdHJhbnNhY3Rpb24gKi8KKwl0ZW1wID0gSERNSV9SRUFEKEhE TUlfSEkyQ0hDUik7CisJSERNSV9XUklURShIRE1JX0hJMkNIQ1IsIHRlbXAgfCBISTJDX1JFQURf Q09OVElOVUUpOworCUhETUlfUkVBRChIRE1JX0hJMkNIQ1IpOworCisJaTJjX2Rldi0+c3RhdHVz ID0gSTJDX1JFQURfRE9ORTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfaTJjX3Ry YW5zYWN0aW9uX2RvbmUoc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldikKK3sKKwlz dHJ1Y3QgaGRtaV9pMmNfZGV2ICppMmNfZGV2ID0gaGRtaV9kZXYtPmkyY19kZXY7CisJdTMyIHRl bXA7CisKKwkvKiBjbGVhciB0cmFuc2FjdGlvbiBkb25lIGludHIgKi8KKwl0ZW1wID0gSERNSV9S RUFEKEhETUlfSElTUik7CisJSERNSV9XUklURShIRE1JX0hJU1IsIHRlbXAgfCBIRE1JX0lOVFJf STJDX0RPTkUpOworCUhETUlfUkVBRChIRE1JX0hJU1IpOworCisKKwl0ZW1wID0gSERNSV9SRUFE KEhETUlfSEkyQ0hDUik7CisJSERNSV9XUklURShIRE1JX0hJMkNIQ1IsIHRlbXAgJiB+SEkyQ19F TkFCTEVfVFJBTlNBQ1RJT04pOworCUhETUlfUkVBRChIRE1JX0hJMkNIQ1IpOworCisJaTJjX2Rl di0+c3RhdHVzID0gSTJDX1RSQU5TQUNUSU9OX0RPTkU7CisJcmV0dXJuOworfQorCitzdGF0aWMg aXJxcmV0dXJuX3Qgb2FrdHJhaWxfaGRtaV9pMmNfaGFuZGxlcihpbnQgdGhpc19pcnEsIHZvaWQg KmRldikKK3sKKwlzdHJ1Y3Qgb2FrdHJhaWxfaGRtaV9kZXYgKmhkbWlfZGV2ID0gZGV2OworCXN0 cnVjdCBoZG1pX2kyY19kZXYgKmkyY19kZXYgPSBoZG1pX2Rldi0+aTJjX2RldjsKKwl1MzIgc3Rh dDsKKworCXN0YXQgPSBIRE1JX1JFQUQoSERNSV9ISVNSKTsKKworCWlmIChzdGF0ICYgSERNSV9J TlRSX0hQRCkgeworCQlIRE1JX1dSSVRFKEhETUlfSElTUiwgc3RhdCB8IEhETUlfSU5UUl9IUEQp OworCQlIRE1JX1JFQUQoSERNSV9ISVNSKTsKKwl9CisKKwlpZiAoc3RhdCAmIEhETUlfSU5UUl9J MkNfRlVMTCkKKwkJaGRtaV9pMmNfcmVhZChoZG1pX2Rldik7CisKKwlpZiAoc3RhdCAmIEhETUlf SU5UUl9JMkNfRE9ORSkKKwkJaGRtaV9pMmNfdHJhbnNhY3Rpb25fZG9uZShoZG1pX2Rldik7CisK Kwljb21wbGV0ZSgmaTJjX2Rldi0+Y29tcGxldGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOwor fQorCisvKgorICogY2hvb3NlIGFsdGVybmF0ZSBmdW5jdGlvbiAyIG9mIEdQSU8gcGluIDUyLCA1 MywKKyAqIHdoaWNoIGlzIHVzZWQgYnkgSERNSSBJMkMgbG9naWMKKyAqLworc3RhdGljIHZvaWQg b2FrdHJhaWxfaGRtaV9pMmNfZ3Bpb19maXgodm9pZCkKK3sKKwl2b2lkICpiYXNlOworCXVuc2ln bmVkIGludCBncGlvX2Jhc2UgPSAweGZmMTJjMDAwOworCWludCBncGlvX2xlbiA9IDB4MTAwMDsK Kwl1MzIgdGVtcDsKKworCWJhc2UgPSBpb3JlbWFwKChyZXNvdXJjZV9zaXplX3QpZ3Bpb19iYXNl LCBncGlvX2xlbik7CisJaWYgKGJhc2UgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoImdwaW8gaW9y ZW1hcCBmYWlsXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXRlbXAgPSByZWFkbChiYXNlICsgMHg0 NCk7CisJRFJNX0RFQlVHX0RSSVZFUigib2xkIGdwaW8gdmFsICV4XG4iLCB0ZW1wKTsKKwl3cml0 ZWwoKHRlbXAgfCAweDAwMDAwYTAwKSwgKGJhc2UgKyAgMHg0NCkpOworCXRlbXAgPSByZWFkbChi YXNlICsgMHg0NCk7CisJRFJNX0RFQlVHX0RSSVZFUigibmV3IGdwaW8gdmFsICV4XG4iLCB0ZW1w KTsKKworCWlvdW5tYXAoYmFzZSk7Cit9CisKK2ludCBvYWt0cmFpbF9oZG1pX2kyY19pbml0KHN0 cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IG9ha3RyYWlsX2hkbWlfZGV2ICpoZG1pX2Rl djsKKwlzdHJ1Y3QgaGRtaV9pMmNfZGV2ICppMmNfZGV2OworCWludCByZXQ7CisKKwloZG1pX2Rl diA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCisJaTJjX2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0 cnVjdCBoZG1pX2kyY19kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaTJjX2RldiA9PSBOVUxMKSB7 CisJCURSTV9FUlJPUigiQ2FuJ3QgYWxsb2NhdGUgaW50ZXJmYWNlXG4iKTsKKwkJcmV0ID0gLUVO T01FTTsKKwkJZ290byBleGl0OworCX0KKworCWkyY19kZXYtPmFkYXAgPSAmb2FrdHJhaWxfaGRt aV9pMmNfYWRhcHRlcjsKKwlpMmNfZGV2LT5zdGF0dXMgPSBJMkNfU1RBVF9JTklUOworCWluaXRf Y29tcGxldGlvbigmaTJjX2Rldi0+Y29tcGxldGUpOworCW11dGV4X2luaXQoJmkyY19kZXYtPmky Y19sb2NrKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZvYWt0cmFpbF9oZG1pX2kyY19hZGFwdGVyLCBo ZG1pX2Rldik7CisJaGRtaV9kZXYtPmkyY19kZXYgPSBpMmNfZGV2OworCisJLyogRW5hYmxlIEhE TUkgSTJDIGZ1bmN0aW9uIG9uIGdwaW8gKi8KKwlvYWt0cmFpbF9oZG1pX2kyY19ncGlvX2ZpeCgp OworCisJLyogcmVxdWVzdCBpcnEgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgb2Fr dHJhaWxfaGRtaV9pMmNfaGFuZGxlciwgSVJRRl9TSEFSRUQsCisJCQkgIG9ha3RyYWlsX2hkbWlf aTJjX2FkYXB0ZXIubmFtZSwgaGRtaV9kZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gcmVxdWVzdCBJUlEgZm9yIEkyQyBjb250cm9sbGVyXG4iKTsKKwkJZ290byBlcnI7 CisJfQorCisJLyogQWRhcHRlciByZWdpc3RyYXRpb24gKi8KKwlyZXQgPSBpMmNfYWRkX251bWJl cmVkX2FkYXB0ZXIoJm9ha3RyYWlsX2hkbWlfaTJjX2FkYXB0ZXIpOworCXJldHVybiByZXQ7CisK K2VycjoKKwlrZnJlZShpMmNfZGV2KTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBv YWt0cmFpbF9oZG1pX2kyY19leGl0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IG9h a3RyYWlsX2hkbWlfZGV2ICpoZG1pX2RldjsKKwlzdHJ1Y3QgaGRtaV9pMmNfZGV2ICppMmNfZGV2 OworCisJaGRtaV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoaTJjX2RlbF9hZGFw dGVyKCZvYWt0cmFpbF9oZG1pX2kyY19hZGFwdGVyKSkKKwkJRFJNX0RFQlVHX0RSSVZFUigiRmFp bGVkIHRvIGRlbGV0ZSBoZG1pLWkyYyBhZGFwdGVyXG4iKTsKKworCWkyY19kZXYgPSBoZG1pX2Rl di0+aTJjX2RldjsKKwlrZnJlZShpMmNfZGV2KTsKKwlmcmVlX2lycShkZXYtPmlycSwgaGRtaV9k ZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9sdmRz LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2x2ZHMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTUyMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9vYWt0cmFpbF9sdmRzLmMKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAwNi0yMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ TElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICoJ RXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCURhdmUgQWlybGllIDxhaXJsaWVkQGxp bnV4LmllPgorICoJSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICovCisK KyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUg PGFzbS9tcnN0Lmg+CisKKyNpbmNsdWRlICJpbnRlbF9iaW9zLmgiCisjaW5jbHVkZSAicHNiX2Ry di5oIgorI2luY2x1ZGUgInBzYl9pbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfcmVn LmgiCisjaW5jbHVkZSAicG93ZXIuaCIKKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisK Ky8qIFRoZSBtYXgvbWluIFBXTSBmcmVxdWVuY3kgaW4gQlBDUlszMToxN10gLSAqLworLyogVGhl IHNtYWxsZXN0IG51bWJlciBpcyAxIChub3QgMCkgdGhhdCBjYW4gZml0IGluIHRoZQorICogMTUt Yml0IGZpZWxkIG9mIHRoZSBhbmQgdGhlbiovCisvKiBzaGlmdHMgdG8gdGhlIGxlZnQgYnkgb25l IGJpdCB0byBnZXQgdGhlIGFjdHVhbCAxNi1iaXQKKyAqIHZhbHVlIHRoYXQgdGhlIDE1LWJpdHMg Y29ycmVzcG9uZCB0by4qLworI2RlZmluZSBNUlNUX0JMQ19NQVhfUFdNX1JFR19GUkVRCSAgICAw eEZGRkYKKyNkZWZpbmUgQlJJR0hUTkVTU19NQVhfTEVWRUwgMTAwCisKKy8qKgorICogU2V0cyB0 aGUgcG93ZXIgc3RhdGUgZm9yIHRoZSBwYW5lbC4KKyAqLworc3RhdGljIHZvaWQgb2FrdHJhaWxf bHZkc19zZXRfcG93ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgcHNiX2lu dGVsX291dHB1dCAqb3V0cHV0LCBib29sIG9uKQoreworCXUzMiBwcF9zdGF0dXM7CisJc3RydWN0 IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFn bWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKKwkJcmV0dXJuOworCisJaWYgKG9uKSB7CisJCVJF R19XUklURShQUF9DT05UUk9MLCBSRUdfUkVBRChQUF9DT05UUk9MKSB8CisJCQkgIFBPV0VSX1RB UkdFVF9PTik7CisJCWRvIHsKKwkJCXBwX3N0YXR1cyA9IFJFR19SRUFEKFBQX1NUQVRVUyk7CisJ CX0gd2hpbGUgKChwcF9zdGF0dXMgJiAoUFBfT04gfCBQUF9SRUFEWSkpID09IFBQX1JFQURZKTsK KwkJZGV2X3ByaXYtPmlzX2x2ZHNfb24gPSB0cnVlOworCQlpZiAoZGV2X3ByaXYtPm9wcy0+bHZk c19ibF9wb3dlcikKKwkJCWRldl9wcml2LT5vcHMtPmx2ZHNfYmxfcG93ZXIoZGV2LCB0cnVlKTsK Kwl9IGVsc2UgeworCQlpZiAoZGV2X3ByaXYtPm9wcy0+bHZkc19ibF9wb3dlcikKKwkJCWRldl9w cml2LT5vcHMtPmx2ZHNfYmxfcG93ZXIoZGV2LCBmYWxzZSk7CisJCVJFR19XUklURShQUF9DT05U Uk9MLCBSRUdfUkVBRChQUF9DT05UUk9MKSAmCisJCQkgIH5QT1dFUl9UQVJHRVRfT04pOworCQlk byB7CisJCQlwcF9zdGF0dXMgPSBSRUdfUkVBRChQUF9TVEFUVVMpOworCQl9IHdoaWxlIChwcF9z dGF0dXMgJiBQUF9PTik7CisJCWRldl9wcml2LT5pc19sdmRzX29uID0gZmFsc2U7CisJCXBtX3Jl cXVlc3RfaWRsZSgmZGV2LT5wZGV2LT5kZXYpOworCX0KKwlnbWFfcG93ZXJfZW5kKGRldik7Cit9 CisKK3N0YXRpYyB2b2lkIG9ha3RyYWlsX2x2ZHNfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIsIGludCBtb2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5k ZXY7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCA9IGVuY190b19wc2JfaW50ZWxf b3V0cHV0KGVuY29kZXIpOworCisJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikKKwkJb2Fr dHJhaWxfbHZkc19zZXRfcG93ZXIoZGV2LCBvdXRwdXQsIHRydWUpOworCWVsc2UKKwkJb2FrdHJh aWxfbHZkc19zZXRfcG93ZXIoZGV2LCBvdXRwdXQsIGZhbHNlKTsKKworCS8qIFhYWDogV2UgbmV2 ZXIgcG93ZXIgZG93biB0aGUgTFZEUyBwYWlycy4gKi8KK30KKworc3RhdGljIHZvaWQgb2FrdHJh aWxfbHZkc19tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2Rldmlj ZSAqbW9kZV9kZXYgPQorCQkJCWVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIpLT5tb2Rl X2RldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBk cm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgbHZkc19w b3J0OworCXVpbnQ2NF90IHYgPSBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOOworCisJaWYgKCFn bWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgTFZE UyBwaW4gcGFpciB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHR1cm5lZCBvbiBpbiB0aGUKKwkgKiBw c2JfaW50ZWxfY3J0Y19tb2RlX3NldCBzaW5jZSBpdCBoYXMgYSBsYXJnZSBpbXBhY3Qgb24gdGhl IERQTEwKKwkgKiBzZXR0aW5ncy4KKwkgKi8KKwlsdmRzX3BvcnQgPSAoUkVHX1JFQUQoTFZEUykg JgorCQkgICAgKH5MVkRTX1BJUEVCX1NFTEVDVCkpIHwKKwkJICAgIExWRFNfUE9SVF9FTiB8CisJ CSAgICBMVkRTX0JPUkRFUl9FTjsKKworCS8qIElmIHRoZSBmaXJtd2FyZSBzYXlzIGRpdGhlciBv biBNb29yZXN0b3duLCBvciB0aGUgQklPUyBkb2VzCisJICAgb24gT2FrdHJhaWwgdGhlbiBlbmFi bGUgZGl0aGVyaW5nICovCisJaWYgKG1vZGVfZGV2LT5wYW5lbF93YW50c19kaXRoZXIgfHwgZGV2 X3ByaXYtPmx2ZHNfZGl0aGVyKQorCQlsdmRzX3BvcnQgfD0gTVJTVF9QQU5FTF84VE82X0RJVEhF Ul9FTkFCTEU7CisKKwlSRUdfV1JJVEUoTFZEUywgbHZkc19wb3J0KTsKKworCWRybV9jb25uZWN0 b3JfcHJvcGVydHlfZ2V0X3ZhbHVlKAorCQkmZW5jX3RvX3BzYl9pbnRlbF9vdXRwdXQoZW5jb2Rl ciktPmJhc2UsCisJCWRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LAorCQkm dik7CisKKwlpZiAodiA9PSBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRSkKKwkJUkVHX1dSSVRFKFBG SVRfQ09OVFJPTCwgMCk7CisJZWxzZSBpZiAodiA9PSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1QpIHsK KwkJaWYgKChtb2RlLT52ZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5KSB8 fAorCQkgICAgKG1vZGUtPmhkaXNwbGF5ICE9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkp KSB7CisJCQlpZiAoKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgKiBtb2RlLT52ZGlzcGxh eSkgPT0KKwkJCSAgICAobW9kZS0+aGRpc3BsYXkgKiBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNw bGF5KSkKKwkJCQlSRUdfV1JJVEUoUEZJVF9DT05UUk9MLCBQRklUX0VOQUJMRSk7CisJCQllbHNl IGlmICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAqCisJCQkJbW9kZS0+dmRpc3BsYXkp ID4gKG1vZGUtPmhkaXNwbGF5ICoKKwkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5KSkK KwkJCQlSRUdfV1JJVEUoUEZJVF9DT05UUk9MLCBQRklUX0VOQUJMRSB8CisJCQkJCSAgUEZJVF9T Q0FMSU5HX01PREVfUElMTEFSQk9YKTsKKwkJCWVsc2UKKwkJCQlSRUdfV1JJVEUoUEZJVF9DT05U Uk9MLCBQRklUX0VOQUJMRSB8CisJCQkJCSAgUEZJVF9TQ0FMSU5HX01PREVfTEVUVEVSQk9YKTsK KwkJfSBlbHNlCisJCQlSRUdfV1JJVEUoUEZJVF9DT05UUk9MLCBQRklUX0VOQUJMRSk7CisJfSBl bHNlIC8qKHYgPT0gRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTikqLworCQlSRUdfV1JJVEUoUEZJ VF9DT05UUk9MLCBQRklUX0VOQUJMRSk7CisKKwlnbWFfcG93ZXJfZW5kKGRldik7Cit9CisKK3N0 YXRpYyB2b2lkIG9ha3RyYWlsX2x2ZHNfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3Qg cHNiX2ludGVsX291dHB1dCAqb3V0cHV0ID0gZW5jX3RvX3BzYl9pbnRlbF9vdXRwdXQoZW5jb2Rl cik7CisJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYgPSBvdXRwdXQtPm1v ZGVfZGV2OworCisJaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKKwkJcmV0dXJuOwor CisJbW9kZV9kZXYtPnNhdmVCTENfUFdNX0NUTCA9IFJFR19SRUFEKEJMQ19QV01fQ1RMKTsKKwlt b2RlX2Rldi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUgPSAobW9kZV9kZXYtPnNhdmVCTENfUFdNX0NU TCAmCisJCQkJCSAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSyk7CisJb2FrdHJhaWxfbHZkc19z ZXRfcG93ZXIoZGV2LCBvdXRwdXQsIGZhbHNlKTsKKwlnbWFfcG93ZXJfZW5kKGRldik7Cit9CisK K3N0YXRpYyB1MzIgb2FrdHJhaWxfbHZkc19nZXRfbWF4X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwl1MzIgcmV0OworCisJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIGZhbHNl KSkgeworCQlyZXQgPSAoKFJFR19SRUFEKEJMQ19QV01fQ1RMKSAmCisJCQkgIEJBQ0tMSUdIVF9N T0RVTEFUSU9OX0ZSRVFfTUFTSykgPj4KKwkJCSAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9T SElGVCkgKiAyOworCisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKKwl9IGVsc2UKKwkJcmV0ID0gKChk ZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMICYKKwkJCSAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJF UV9NQVNLKSA+PgorCQkJICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NISUZUKSAqIDI7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvYWt0cmFpbF9sdmRzX2NvbW1pdChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVu Y29kZXItPmRldjsKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqb3V0cHV0ID0gZW5jX3RvX3Bz Yl9pbnRlbF9vdXRwdXQoZW5jb2Rlcik7CisJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAq bW9kZV9kZXYgPSBvdXRwdXQtPm1vZGVfZGV2OworCisJaWYgKG1vZGVfZGV2LT5iYWNrbGlnaHRf ZHV0eV9jeWNsZSA9PSAwKQorCQltb2RlX2Rldi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUgPQorCQkJ CQlvYWt0cmFpbF9sdmRzX2dldF9tYXhfYmFja2xpZ2h0KGRldik7CisJb2FrdHJhaWxfbHZkc19z ZXRfcG93ZXIoZGV2LCBvdXRwdXQsIHRydWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBvYWt0cmFpbF9sdmRzX2hlbHBlcl9mdW5jcyA9IHsKKwku ZHBtcyA9IG9ha3RyYWlsX2x2ZHNfZHBtcywKKwkubW9kZV9maXh1cCA9IHBzYl9pbnRlbF9sdmRz X21vZGVfZml4dXAsCisJLnByZXBhcmUgPSBvYWt0cmFpbF9sdmRzX3ByZXBhcmUsCisJLm1vZGVf c2V0ID0gb2FrdHJhaWxfbHZkc19tb2RlX3NldCwKKwkuY29tbWl0ID0gb2FrdHJhaWxfbHZkc19j b21taXQsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbHZkc19jb25maWd1 cmF0aW9uX21vZGVzW10gPSB7CisJLyogaGFyZCBjb2RlZCBmaXhlZCBtb2RlIGZvciBUUE8gTFRQ UyBMUEowNDBLMDAxQSAqLworCXsgRFJNX01PREUoIjgwMHg0ODAiLCAgRFJNX01PREVfVFlQRV9E UklWRVIsIDMzMjY0LCA4MDAsIDgzNiwKKwkJICAgODQ2LCAxMDU2LCAwLCA0ODAsIDQ4OSwgNDkx LCA1MjUsIDAsIDApIH0sCisJLyogaGFyZCBjb2RlZCBmaXhlZCBtb2RlIGZvciBMVkRTIDgwMHg0 ODAgKi8KKwl7IERSTV9NT0RFKCI4MDB4NDgwIiwgIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMDk5 NCwgODAwLCA4MDEsCisJCSAgIDgwMiwgMTAyNCwgMCwgNDgwLCA0ODEsIDQ4MiwgNTI1LCAwLCAw KSB9LAorCS8qIGhhcmQgY29kZWQgZml4ZWQgbW9kZSBmb3IgU2Ftc3VuZyA0ODB3c3ZnYSBMVkRT IDEwMjR4NjAwQDc1ICovCisJeyBEUk1fTU9ERSgiMTAyNHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RS SVZFUiwgNTM5OTAsIDEwMjQsIDEwNzIsCisJCSAgIDExMDQsIDExODQsIDAsIDYwMCwgNjAzLCA2 MDQsIDYwOCwgMCwgMCkgfSwKKwkvKiBoYXJkIGNvZGVkIGZpeGVkIG1vZGUgZm9yIFNhbXN1bmcg NDgwd3N2Z2EgTFZEUyAxMDI0eDYwMEA3NSAqLworCXsgRFJNX01PREUoIjEwMjR4NjAwIiwgRFJN X01PREVfVFlQRV9EUklWRVIsIDUzOTkwLCAxMDI0LCAxMTA0LAorCQkgICAxMTM2LCAxMTg0LCAw LCA2MDAsIDYwMywgNjA0LCA2MDgsIDAsIDApIH0sCisJLyogaGFyZCBjb2RlZCBmaXhlZCBtb2Rl IGZvciBTaGFycCB3c3ZnYSBMVkRTIDEwMjR4NjAwICovCisJeyBEUk1fTU9ERSgiMTAyNHg2MDAi LCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNDg4ODUsIDEwMjQsIDExMjQsCisJCSAgIDEyMDQsIDEz MTIsIDAsIDYwMCwgNjA3LCA2MTAsIDYyMSwgMCwgMCkgfSwKKwkvKiBoYXJkIGNvZGVkIGZpeGVk IG1vZGUgZm9yIExWRFMgMTAyNHg3NjggKi8KKwl7IERSTV9NT0RFKCIxMDI0eDc2OCIsIERSTV9N T0RFX1RZUEVfRFJJVkVSLCA2NTAwMCwgMTAyNCwgMTA0OCwKKwkJICAgMTE4NCwgMTM0NCwgMCwg NzY4LCA3NzEsIDc3NywgODA2LCAwLCAwKSB9LAorCS8qIGhhcmQgY29kZWQgZml4ZWQgbW9kZSBm b3IgTFZEUyAxMzY2eDc2OCAqLworCXsgRFJNX01PREUoIjEzNjZ4NzY4IiwgRFJNX01PREVfVFlQ RV9EUklWRVIsIDc3NTAwLCAxMzY2LCAxNDMwLAorCQkgICAxNTU4LCAxNjY0LCAwLCA3NjgsIDc2 OSwgNzcwLCA3NzYsIDAsIDApIH0sCit9OworCisvKiBSZXR1cm5zIHRoZSBwYW5lbCBmaXhlZCBt b2RlIGZyb20gY29uZmlndXJhdGlvbi4gKi8KKworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICoKK29ha3RyYWlsX2x2ZHNfZ2V0X2NvbmZpZ3VyYXRpb25fbW9kZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKKwlz dHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3Ry dWN0IG9ha3RyYWlsX3RpbWluZ19pbmZvICp0aSA9ICZkZXZfcHJpdi0+Z2N0X2RhdGEuRFREOwor CisJaWYgKGRldl9wcml2LT52YnRfZGF0YS5zaXplICE9IDB4MDApIHsgLyppZiBub24temVybywg dGhlbiB1c2UgdmJ0Ki8KKwkJbW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCptb2RlKSwgR0ZQX0tFUk5F TCk7CisJCWlmICghbW9kZSkKKwkJCXJldHVybiBOVUxMOworCisJCW1vZGUtPmhkaXNwbGF5ID0g KHRpLT5oYWN0aXZlX2hpIDw8IDgpIHwgdGktPmhhY3RpdmVfbG87CisJCW1vZGUtPnZkaXNwbGF5 ID0gKHRpLT52YWN0aXZlX2hpIDw8IDgpIHwgdGktPnZhY3RpdmVfbG87CisJCW1vZGUtPmhzeW5j X3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBcCisJCQkJKCh0aS0+aHN5bmNfb2Zmc2V0X2hpIDw8 IDgpIHwgXAorCQkJCXRpLT5oc3luY19vZmZzZXRfbG8pOworCQltb2RlLT5oc3luY19lbmQgPSBt b2RlLT5oc3luY19zdGFydCArIFwKKwkJCQkoKHRpLT5oc3luY19wdWxzZV93aWR0aF9oaSA8PCA4 KSB8IFwKKwkJCQl0aS0+aHN5bmNfcHVsc2Vfd2lkdGhfbG8pOworCQltb2RlLT5odG90YWwgPSBt b2RlLT5oZGlzcGxheSArICgodGktPmhibGFua19oaSA8PCA4KSB8IFwKKwkJCQkJCQl0aS0+aGJs YW5rX2xvKTsKKwkJbW9kZS0+dnN5bmNfc3RhcnQgPSBcCisJCQltb2RlLT52ZGlzcGxheSArICgo dGktPnZzeW5jX29mZnNldF9oaSA8PCA0KSB8IFwKKwkJCQkJCXRpLT52c3luY19vZmZzZXRfbG8p OworCQltb2RlLT52c3luY19lbmQgPSBcCisJCQltb2RlLT52c3luY19zdGFydCArICgodGktPnZz eW5jX3B1bHNlX3dpZHRoX2hpIDw8IDQpIHwgXAorCQkJCQkJdGktPnZzeW5jX3B1bHNlX3dpZHRo X2xvKTsKKwkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyBcCisJCQkJKCh0aS0+dmJs YW5rX2hpIDw8IDgpIHwgdGktPnZibGFua19sbyk7CisJCW1vZGUtPmNsb2NrID0gdGktPnBpeGVs X2Nsb2NrICogMTA7CisjaWYgMAorCQlwcmludGsoS0VSTl9JTkZPICJoZGlzcGxheSBpcyAlZFxu IiwgbW9kZS0+aGRpc3BsYXkpOworCQlwcmludGsoS0VSTl9JTkZPICJ2ZGlzcGxheSBpcyAlZFxu IiwgbW9kZS0+dmRpc3BsYXkpOworCQlwcmludGsoS0VSTl9JTkZPICJIU1MgaXMgJWRcbiIsIG1v ZGUtPmhzeW5jX3N0YXJ0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSFNFIGlzICVkXG4iLCBtb2Rl LT5oc3luY19lbmQpOworCQlwcmludGsoS0VSTl9JTkZPICJodG90YWwgaXMgJWRcbiIsIG1vZGUt Pmh0b3RhbCk7CisJCXByaW50ayhLRVJOX0lORk8gIlZTUyBpcyAlZFxuIiwgbW9kZS0+dnN5bmNf c3RhcnQpOworCQlwcmludGsoS0VSTl9JTkZPICJWU0UgaXMgJWRcbiIsIG1vZGUtPnZzeW5jX2Vu ZCk7CisJCXByaW50ayhLRVJOX0lORk8gInZ0b3RhbCBpcyAlZFxuIiwgbW9kZS0+dnRvdGFsKTsK KwkJcHJpbnRrKEtFUk5fSU5GTyAiY2xvY2sgaXMgJWRcbiIsIG1vZGUtPmNsb2NrKTsKKyNlbmRp ZgorCX0gZWxzZQorCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgJmx2ZHNfY29uZmln dXJhdGlvbl9tb2Rlc1syXSk7CisKKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKKwlkcm1fbW9k ZV9zZXRfY3J0Y2luZm8obW9kZSwgMCk7CisKKwlyZXR1cm4gbW9kZTsKK30KKworLyoqCisgKiBv YWt0cmFpbF9sdmRzX2luaXQgLSBzZXR1cCBMVkRTIGNvbm5lY3RvcnMgb24gdGhpcyBkZXZpY2UK KyAqIEBkZXY6IGRybSBkZXZpY2UKKyAqCisgKiBDcmVhdGUgdGhlIGNvbm5lY3RvciwgcmVnaXN0 ZXIgdGhlIExWRFMgRERDIGJ1cywgYW5kIHRyeSB0byBmaWd1cmUgb3V0IHdoYXQKKyAqIG1vZGVz IHdlIGNhbiBkaXNwbGF5IG9uIHRoZSBMVkRTIHBhbmVsIChpZiBwcmVzZW50KS4KKyAqLwordm9p ZCBvYWt0cmFpbF9sdmRzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVj dCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2KQoreworCXN0cnVjdCBwc2JfaW50ZWxf b3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fcHNiX3ByaXZh dGUgKmRldl9wcml2ID0KKwkJCQkoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQgPSAwOworCXN0cnVjdCBpMmNf YWRhcHRlciAqaTJjX2FkYXA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnNjYW47CS8qICpt b2RlcywgKmJpb3NfbW9kZTsgKi8KKworCXBzYl9pbnRlbF9vdXRwdXQgPSBremFsbG9jKHNpemVv ZihzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCksIEdGUF9LRVJORUwpOworCWlmICghcHNiX2ludGVs X291dHB1dCkKKwkJcmV0dXJuOworCisJcHNiX2ludGVsX291dHB1dC0+bW9kZV9kZXYgPSBtb2Rl X2RldjsKKwljb25uZWN0b3IgPSAmcHNiX2ludGVsX291dHB1dC0+YmFzZTsKKwllbmNvZGVyID0g JnBzYl9pbnRlbF9vdXRwdXQtPmVuYzsKKwlkZXZfcHJpdi0+aXNfbHZkc19vbiA9IHRydWU7CisJ ZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnBzYl9pbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkgICAm cHNiX2ludGVsX2x2ZHNfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJNX01PREVfQ09OTkVDVE9S X0xWRFMpOworCisJZHJtX2VuY29kZXJfaW5pdChkZXYsICZwc2JfaW50ZWxfb3V0cHV0LT5lbmMs ICZwc2JfaW50ZWxfbHZkc19lbmNfZnVuY3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9MVkRTKTsK KworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcHNiX2ludGVsX291dHB1dC0+ YmFzZSwKKwkJCQkJICAmcHNiX2ludGVsX291dHB1dC0+ZW5jKTsKKwlwc2JfaW50ZWxfb3V0cHV0 LT50eXBlID0gSU5URUxfT1VUUFVUX0xWRFM7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVu Y29kZXIsICZvYWt0cmFpbF9sdmRzX2hlbHBlcl9mdW5jcyk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfYWRkKGNvbm5lY3RvciwKKwkJCQkgJnBzYl9pbnRlbF9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MpOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVsX29yZGVyID0gU3ViUGl4 ZWxIb3Jpem9udGFsUkdCOworCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSBmYWxzZTsK Kwljb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOworCisJZHJtX2Nvbm5lY3Rv cl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCQlkZXYtPm1vZGVfY29uZmlnLnNjYWxp bmdfbW9kZV9wcm9wZXJ0eSwKKwkJCQkJRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTik7CisJZHJt X2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCQlkZXZfcHJpdi0+YmFj a2xpZ2h0X3Byb3BlcnR5LAorCQkJCQlCUklHSFRORVNTX01BWF9MRVZFTCk7CisKKwltb2RlX2Rl di0+cGFuZWxfd2FudHNfZGl0aGVyID0gZmFsc2U7CisJaWYgKGRldl9wcml2LT52YnRfZGF0YS5z aXplICE9IDB4MDApCisJCW1vZGVfZGV2LT5wYW5lbF93YW50c19kaXRoZXIgPSAoZGV2X3ByaXYt PmdjdF9kYXRhLgorCQkJUGFuZWxfUG9ydF9Db250cm9sICYgTVJTVF9QQU5FTF84VE82X0RJVEhF Ul9FTkFCTEUpOworCisJLyoKKwkgKiBMVkRTIGRpc2NvdmVyeToKKwkgKiAxKSBjaGVjayBmb3Ig RURJRCBvbiBEREMKKwkgKiAyKSBjaGVjayBmb3IgVkJUIGRhdGEKKwkgKiAzKSBjaGVjayB0byBz ZWUgaWYgTFZEUyBpcyBhbHJlYWR5IG9uCisJICogICAgaWYgbm9uZSBvZiB0aGUgYWJvdmUsIG5v IHBhbmVsCisJICogNCkgbWFrZSBzdXJlIGxpZCBpcyBvcGVuCisJICogICAgaWYgY2xvc2VkLCBh Y3QgbGlrZSBpdCdzIG5vdCB0aGVyZSBmb3Igbm93CisJICovCisKKwlpMmNfYWRhcCA9IGkyY19n ZXRfYWRhcHRlcihkZXZfcHJpdi0+b3BzLT5pMmNfYnVzKTsKKwlpZiAoaTJjX2FkYXAgPT0gTlVM TCkKKwkJZGV2X2VycihkZXYtPmRldiwgIk5vIGRkYyBhZGFwdGVyIGF2YWlsYWJsZSFcbiIpOwor CS8qCisJICogQXR0ZW1wdCB0byBnZXQgdGhlIGZpeGVkIHBhbmVsIG1vZGUgZnJvbSBEREMuICBB c3N1bWUgdGhhdCB0aGUKKwkgKiBwcmVmZXJyZWQgbW9kZSBpcyB0aGUgcmlnaHQgb25lLgorCSAq LworCWlmIChpMmNfYWRhcCkgeworCQllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgaTJj X2FkYXApOworCQlpZiAoZWRpZCkgeworCQkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlk X3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQkJCQkJCWVkaWQpOworCQkJcmV0ID0gZHJtX2FkZF9l ZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJCQlrZnJlZShlZGlkKTsKKwkJfQorCisJCWxp c3RfZm9yX2VhY2hfZW50cnkoc2NhbiwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7 CisJCQlpZiAoc2Nhbi0+dHlwZSAmIERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEKSB7CisJCQkJbW9k ZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUgPQorCQkJCSAgICBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2 LCBzY2FuKTsKKwkJCQlnb3RvIG91dDsJLyogRklYTUU6IGNoZWNrIGZvciBxdWlya3MgKi8KKwkJ CX0KKwkJfQorCX0KKwkvKgorCSAqIElmIHdlIGRpZG4ndCBnZXQgRURJRCwgdHJ5IGdldGluZyBw YW5lbCB0aW1pbmcKKwkgKiBmcm9tIGNvbmZpZ3VyYXRpb24gZGF0YQorCSAqLworCW1vZGVfZGV2 LT5wYW5lbF9maXhlZF9tb2RlID0gb2FrdHJhaWxfbHZkc19nZXRfY29uZmlndXJhdGlvbl9tb2Rl KGRldik7CisKKwlpZiAobW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUpIHsKKwkJbW9kZV9kZXYt PnBhbmVsX2ZpeGVkX21vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJCWdv dG8gb3V0OwkvKiBGSVhNRTogY2hlY2sgZm9yIHF1aXJrcyAqLworCX0KKworCS8qIElmIHdlIHN0 aWxsIGRvbid0IGhhdmUgYSBtb2RlIGFmdGVyIGFsbCB0aGF0LCBnaXZlIHVwLiAqLworCWlmICgh bW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkZvdW5k IG5vIG1vZGVzIG9uIHRoZSBsdmRzLCBpZ25vcmluZyB0aGUgTFZEU1xuIik7CisJCWdvdG8gZmFp bGVkX2ZpbmQ7CisJfQorCitvdXQ6CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9y KTsKKwlyZXR1cm47CisKK2ZhaWxlZF9maW5kOgorCWRldl9kYmcoZGV2LT5kZXYsICJObyBMVkRT IG1vZGVzIGZvdW5kLCBkaXNhYmxpbmcuXG4iKTsKKwlpZiAocHNiX2ludGVsX291dHB1dC0+ZGRj X2J1cykKKwkJcHNiX2ludGVsX2kyY19kZXN0cm95KHBzYl9pbnRlbF9vdXRwdXQtPmRkY19idXMp OworCisvKiBmYWlsZWRfZGRjOiAqLworCisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsK Kwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShjb25uZWN0b3IpOwor fQorCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=