From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH 03/13] drm/amdgpu: add amdgpu <--> amdkfd gfx7 interface Date: Fri, 12 Jun 2015 22:31:11 +0300 Message-ID: <1434137481-13315-4-git-send-email-oded.gabbay@gmail.com> References: <1434137481-13315-1-git-send-email-oded.gabbay@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f51.google.com (mail-wg0-f51.google.com [74.125.82.51]) by gabe.freedesktop.org (Postfix) with ESMTP id A73B66E456 for ; Fri, 12 Jun 2015 12:31:28 -0700 (PDT) Received: by wgv5 with SMTP id 5so30575455wgv.1 for ; Fri, 12 Jun 2015 12:31:28 -0700 (PDT) In-Reply-To: <1434137481-13315-1-git-send-email-oded.gabbay@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, alexdeucher@gmail.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIHRoZSBnZng3IGludGVyZmFjZSBmaWxlIGJldHdlZW4gYW1kZ3B1IGFu ZCBhbWRrZmQuIFRoaXMKaW50ZXJmYWNlIGZpbGUgbWlycm9ycyAoc29tZSkgb2YgdGhlIGZ1bmN0 aW9ucyBpbiByYWRlb25fa2ZkLmMKKHRoZSBpbnRlcmZhY2UgZmlsZSBiZXR3ZWVuIHJhZGVvbiBh bmQgYW1ka2ZkKS4KClRoZSBnZng3IGludGVyZmFjZSBpcyB1c2VkIHdoZW4gaXQgaXMgcnVuIG9u IGEgS2F2ZXJpLWJhc2VkIHN5c3RlbS4KClRoaXMgaW50ZXJmYWNlIGZpbGUgd2FzIHVzZWQgZm9y IGJyaW5nLXVwIG9mIGFtZGtmZCBvbiBhbWRncHUgYW5kIGZvcgpkZWJ1Z2dpbmcgcHVycG9zZXMu IEZvciB1c2VycyB3aG8gd291bGQgbGlrZSB0byBydW4gSFNBIG9uIEthdmVyaSwgcGxlYXNlCnVz ZSB0aGUgcmFkZW9uIGdyYXBoaWMgZHJpdmVyLgoKTm90ZTogQ09ORklHX0RSTV9BTURHUFVfQ0lL IG11c3QgYmUgc2VsZWN0ZWQgZm9yIGFtZGdwdSB0byBoYW5kbGUgS2F2ZXJpLgoKU2lnbmVkLW9m Zi1ieTogT2RlZCBHYWJiYXkgPG9kZWQuZ2FiYmF5QGdtYWlsLmNvbT4KLS0tCiBNQUlOVEFJTkVS UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDMgKy0KIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuYyAgICAgICAgfCAgIDIgKwogZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9nZnhfdjcuYyB8IDY3MCArKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWtkLmggICAg ICAgICAgICAgICAgIHwgIDEyICsKIDUgZmlsZXMgY2hhbmdlZCwgNjg3IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfYW1ka2ZkX2dmeF92Ny5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9N QUlOVEFJTkVSUwppbmRleCA1ODFjOGQ0Li4zMjRiYzJkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVS UworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjM3LDYgKzYzNyw3IEBAIFQ6CWdpdCBnaXQ6Ly9wZW9w bGUuZnJlZWRlc2t0b3Aub3JnL35nYWJiYXlvL2xpbnV4LmdpdAogUzoJU3VwcG9ydGVkCiBGOglk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmMKIEY6CWRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaAorRjoJZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2FtZGtmZF9nZnhfdjcuYwogRjoJZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRr ZmQvCiBGOglkcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvY2lrX3N0cnVjdHMuaAogRjoJZHJp dmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmgKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvTWFrZWZpbGUKaW5kZXggODkxZjAyYy4uYWY1Mzk3YyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvTWFrZWZpbGUKQEAgLTczLDcgKzczLDggQEAgYW1kZ3B1LXkgKz0gXAogCiAjIGFk ZCBhbWRrZmQgaW50ZXJmYWNlcwogYW1kZ3B1LXkgKz0gXAotCSBhbWRncHVfYW1ka2ZkLm8KKwkg YW1kZ3B1X2FtZGtmZC5vIFwKKwkgYW1kZ3B1X2FtZGtmZF9nZnhfdjcubwogCiBhbWRncHUtJChD T05GSUdfQ09NUEFUKSArPSBhbWRncHVfaW9jMzIubwogYW1kZ3B1LSQoQ09ORklHX1ZHQV9TV0lU Q0hFUk9PKSArPSBhbWRncHVfYXRweF9oYW5kbGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9hbWRrZmQuYwppbmRleCAyMDcxYTliLi43YWE1YWIwIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5jCkBAIC01MSw2ICs1MSw4IEBAIGJvb2wg YW1kZ3B1X2FtZGtmZF9sb2FkX2ludGVyZmFjZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqcmRldikK IAogCXN3aXRjaCAocmRldi0+YXNpY190eXBlKSB7CiAJY2FzZSBDSElQX0tBVkVSSToKKwkJa2Zk MmtnZCA9IGFtZGdwdV9hbWRrZmRfZ2Z4XzdfZ2V0X2Z1bmN0aW9ucygpOworCQlicmVhazsKIAlk ZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9nZnhfdjcuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ2Z4X3Y3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMmRhYWQzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ2Z4X3Y3LmMKQEAgLTAsMCArMSw2NzAgQEAKKy8qCisgKiBD b3B5cmlnaHQgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBB VVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgImFtZGdwdS5oIgorI2luY2x1ZGUgImFtZGdwdV9hbWRrZmQuaCIKKyNpbmNs dWRlICJjaWtkLmgiCisjaW5jbHVkZSAiY2lrX3NkbWEuaCIKKyNpbmNsdWRlICJhbWRncHVfdWNv ZGUuaCIKKyNpbmNsdWRlICJnY2EvZ2Z4XzdfMl9kLmgiCisjaW5jbHVkZSAiZ2NhL2dmeF83XzJf ZW51bS5oIgorI2luY2x1ZGUgImdjYS9nZnhfN18yX3NoX21hc2suaCIKKyNpbmNsdWRlICJvc3Mv b3NzXzJfMF9kLmgiCisjaW5jbHVkZSAib3NzL29zc18yXzBfc2hfbWFzay5oIgorI2luY2x1ZGUg ImdtYy9nbWNfN18xX2QuaCIKKyNpbmNsdWRlICJnbWMvZ21jXzdfMV9zaF9tYXNrLmgiCisjaW5j bHVkZSAiY2lrX3N0cnVjdHMuaCIKKworI2RlZmluZSBDSUtfUElQRV9QRVJfTUVDCSg0KQorCitl bnVtIHsKKwlNQVhfVFJBUElEID0gOCwJCS8qIDMgYml0cyBpbiB0aGUgYml0ZmllbGQuICovCisJ TUFYX1dBVENIX0FERFJFU1NFUyA9IDQKK307CisKK2VudW0geworCUFERFJFU1NfV0FUQ0hfUkVH X0FERFJfSEkgPSAwLAorCUFERFJFU1NfV0FUQ0hfUkVHX0FERFJfTE8sCisJQUREUkVTU19XQVRD SF9SRUdfQ05UTCwKKwlBRERSRVNTX1dBVENIX1JFR19NQVgKK307CisKKy8qICBub3QgZGVmaW5l ZCBpbiB0aGUgQ0kvS1YgcmVnIGZpbGUgICovCitlbnVtIHsKKwlBRERSRVNTX1dBVENIX1JFR19D TlRMX0FUQ19CSVQgPSAweDEwMDAwMDAwVUwsCisJQUREUkVTU19XQVRDSF9SRUdfQ05UTF9ERUZB VUxUX01BU0sgPSAweDAwRkZGRkZGLAorCUFERFJFU1NfV0FUQ0hfUkVHX0FERExPV19NQVNLX0VY VEVOU0lPTiA9IDB4MDMwMDAwMDAsCisJLyogZXh0ZW5kIHRoZSBtYXNrIHRvIDI2IGJpdHMgdG8g bWF0Y2ggdGhlIGxvdyBhZGRyZXNzIGZpZWxkICovCisJQUREUkVTU19XQVRDSF9SRUdfQURETE9X X1NISUZUID0gNiwKKwlBRERSRVNTX1dBVENIX1JFR19BRERISUdIX01BU0sgPSAweEZGRkYKK307 CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCB3YXRjaFJlZ3NbTUFYX1dBVENIX0FERFJFU1NFUyAq IEFERFJFU1NfV0FUQ0hfUkVHX01BWF0gPSB7CisJbW1UQ1BfV0FUQ0gwX0FERFJfSCwgbW1UQ1Bf V0FUQ0gwX0FERFJfTCwgbW1UQ1BfV0FUQ0gwX0NOVEwsCisJbW1UQ1BfV0FUQ0gxX0FERFJfSCwg bW1UQ1BfV0FUQ0gxX0FERFJfTCwgbW1UQ1BfV0FUQ0gxX0NOVEwsCisJbW1UQ1BfV0FUQ0gyX0FE RFJfSCwgbW1UQ1BfV0FUQ0gyX0FERFJfTCwgbW1UQ1BfV0FUQ0gyX0NOVEwsCisJbW1UQ1BfV0FU Q0gzX0FERFJfSCwgbW1UQ1BfV0FUQ0gzX0FERFJfTCwgbW1UQ1BfV0FUQ0gzX0NOVEwKK307CisK K3VuaW9uIFRDUF9XQVRDSF9DTlRMX0JJVFMgeworCXN0cnVjdCB7CisJCXVpbnQzMl90IG1hc2s6 MjQ7CisJCXVpbnQzMl90IHZtaWQ6NDsKKwkJdWludDMyX3QgYXRjOjE7CisJCXVpbnQzMl90IG1v ZGU6MjsKKwkJdWludDMyX3QgdmFsaWQ6MTsKKwl9IGJpdGZpZWxkcywgYml0czsKKwl1aW50MzJf dCB1MzJBbGw7CisJc2lnbmVkIGludCBpMzJBbGw7CisJZmxvYXQgZjMyQWxsOworfTsKKworLyoK KyAqIFJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBrZ2RfcHJv Z3JhbV9zaF9tZW1fc2V0dGluZ3Moc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDMyX3Qgdm1pZCwK KwkJdWludDMyX3Qgc2hfbWVtX2NvbmZpZywJdWludDMyX3Qgc2hfbWVtX2FwZTFfYmFzZSwKKwkJ dWludDMyX3Qgc2hfbWVtX2FwZTFfbGltaXQsIHVpbnQzMl90IHNoX21lbV9iYXNlcyk7CisKK3N0 YXRpYyBpbnQga2dkX3NldF9wYXNpZF92bWlkX21hcHBpbmcoc3RydWN0IGtnZF9kZXYgKmtnZCwg dW5zaWduZWQgaW50IHBhc2lkLAorCQkJCQl1bnNpZ25lZCBpbnQgdm1pZCk7CisKK3N0YXRpYyBp bnQga2dkX2luaXRfcGlwZWxpbmUoc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDMyX3QgcGlwZV9p ZCwKKwkJCQl1aW50MzJfdCBocGRfc2l6ZSwgdWludDY0X3QgaHBkX2dwdV9hZGRyKTsKK3N0YXRp YyBpbnQga2dkX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50MzJfdCBw aXBlX2lkKTsKK3N0YXRpYyBpbnQga2dkX2hxZF9sb2FkKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHZv aWQgKm1xZCwgdWludDMyX3QgcGlwZV9pZCwKKwkJCXVpbnQzMl90IHF1ZXVlX2lkLCB1aW50MzJf dCBfX3VzZXIgKndwdHIpOworc3RhdGljIGludCBrZ2RfaHFkX3NkbWFfbG9hZChzdHJ1Y3Qga2dk X2RldiAqa2dkLCB2b2lkICptcWQpOworc3RhdGljIGJvb2wga2dkX2hxZF9pc19vY2N1cGllZChz dHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAorCQkJCXVpbnQzMl90 IHBpcGVfaWQsIHVpbnQzMl90IHF1ZXVlX2lkKTsKKworc3RhdGljIGludCBrZ2RfaHFkX2Rlc3Ry b3koc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDMyX3QgcmVzZXRfdHlwZSwKKwkJCQl1bnNpZ25l ZCBpbnQgdGltZW91dCwgdWludDMyX3QgcGlwZV9pZCwKKwkJCQl1aW50MzJfdCBxdWV1ZV9pZCk7 CitzdGF0aWMgYm9vbCBrZ2RfaHFkX3NkbWFfaXNfb2NjdXBpZWQoc3RydWN0IGtnZF9kZXYgKmtn ZCwgdm9pZCAqbXFkKTsKK3N0YXRpYyBpbnQga2dkX2hxZF9zZG1hX2Rlc3Ryb3koc3RydWN0IGtn ZF9kZXYgKmtnZCwgdm9pZCAqbXFkLAorCQkJCXVuc2lnbmVkIGludCB0aW1lb3V0KTsKK3N0YXRp YyBpbnQga2dkX2FkZHJlc3Nfd2F0Y2hfZGlzYWJsZShzdHJ1Y3Qga2dkX2RldiAqa2dkKTsKK3N0 YXRpYyBpbnQga2dkX2FkZHJlc3Nfd2F0Y2hfZXhlY3V0ZShzdHJ1Y3Qga2dkX2RldiAqa2dkLAor CQkJCQl1bnNpZ25lZCBpbnQgd2F0Y2hfcG9pbnRfaWQsCisJCQkJCXVpbnQzMl90IGNudGxfdmFs LAorCQkJCQl1aW50MzJfdCBhZGRyX2hpLAorCQkJCQl1aW50MzJfdCBhZGRyX2xvKTsKK3N0YXRp YyBpbnQga2dkX3dhdmVfY29udHJvbF9leGVjdXRlKHN0cnVjdCBrZ2RfZGV2ICprZ2QsCisJCQkJ CXVpbnQzMl90IGdmeF9pbmRleF92YWwsCisJCQkJCXVpbnQzMl90IHNxX2NtZCk7CitzdGF0aWMg dWludDMyX3Qga2dkX2FkZHJlc3Nfd2F0Y2hfZ2V0X29mZnNldChzdHJ1Y3Qga2dkX2RldiAqa2dk LAorCQkJCQl1bnNpZ25lZCBpbnQgd2F0Y2hfcG9pbnRfaWQsCisJCQkJCXVuc2lnbmVkIGludCBy ZWdfb2Zmc2V0KTsKKworc3RhdGljIGJvb2wgZ2V0X2F0Y192bWlkX3Bhc2lkX21hcHBpbmdfdmFs aWQoc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDhfdCB2bWlkKTsKK3N0YXRpYyB1aW50MTZfdCBn ZXRfYXRjX3ZtaWRfcGFzaWRfbWFwcGluZ19wYXNpZChzdHJ1Y3Qga2dkX2RldiAqa2dkLAorCQkJ CQkJCXVpbnQ4X3Qgdm1pZCk7CitzdGF0aWMgdm9pZCB3cml0ZV92bWlkX2ludmFsaWRhdGVfcmVx dWVzdChzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50OF90IHZtaWQpOworCitzdGF0aWMgdWludDE2 X3QgZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IGtnZF9kZXYgKmtnZCwgZW51bSBrZ2RfZW5naW5lX3R5 cGUgdHlwZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkMmtnZF9jYWxscyBrZmQya2dkID0g eworCS5pbml0X2d0dF9tZW1fYWxsb2NhdGlvbiA9IGFsbG9jX2d0dF9tZW0sCisJLmZyZWVfZ3R0 X21lbSA9IGZyZWVfZ3R0X21lbSwKKwkuZ2V0X3ZtZW1fc2l6ZSA9IGdldF92bWVtX3NpemUsCisJ LmdldF9ncHVfY2xvY2tfY291bnRlciA9IGdldF9ncHVfY2xvY2tfY291bnRlciwKKwkuZ2V0X21h eF9lbmdpbmVfY2xvY2tfaW5fbWh6ID0gZ2V0X21heF9lbmdpbmVfY2xvY2tfaW5fbWh6LAorCS5w cm9ncmFtX3NoX21lbV9zZXR0aW5ncyA9IGtnZF9wcm9ncmFtX3NoX21lbV9zZXR0aW5ncywKKwku c2V0X3Bhc2lkX3ZtaWRfbWFwcGluZyA9IGtnZF9zZXRfcGFzaWRfdm1pZF9tYXBwaW5nLAorCS5p bml0X3BpcGVsaW5lID0ga2dkX2luaXRfcGlwZWxpbmUsCisJLmluaXRfaW50ZXJydXB0cyA9IGtn ZF9pbml0X2ludGVycnVwdHMsCisJLmhxZF9sb2FkID0ga2dkX2hxZF9sb2FkLAorCS5ocWRfc2Rt YV9sb2FkID0ga2dkX2hxZF9zZG1hX2xvYWQsCisJLmhxZF9pc19vY2N1cGllZCA9IGtnZF9ocWRf aXNfb2NjdXBpZWQsCisJLmhxZF9zZG1hX2lzX29jY3VwaWVkID0ga2dkX2hxZF9zZG1hX2lzX29j Y3VwaWVkLAorCS5ocWRfZGVzdHJveSA9IGtnZF9ocWRfZGVzdHJveSwKKwkuaHFkX3NkbWFfZGVz dHJveSA9IGtnZF9ocWRfc2RtYV9kZXN0cm95LAorCS5hZGRyZXNzX3dhdGNoX2Rpc2FibGUgPSBr Z2RfYWRkcmVzc193YXRjaF9kaXNhYmxlLAorCS5hZGRyZXNzX3dhdGNoX2V4ZWN1dGUgPSBrZ2Rf YWRkcmVzc193YXRjaF9leGVjdXRlLAorCS53YXZlX2NvbnRyb2xfZXhlY3V0ZSA9IGtnZF93YXZl X2NvbnRyb2xfZXhlY3V0ZSwKKwkuYWRkcmVzc193YXRjaF9nZXRfb2Zmc2V0ID0ga2dkX2FkZHJl c3Nfd2F0Y2hfZ2V0X29mZnNldCwKKwkuZ2V0X2F0Y192bWlkX3Bhc2lkX21hcHBpbmdfcGFzaWQg PSBnZXRfYXRjX3ZtaWRfcGFzaWRfbWFwcGluZ19wYXNpZCwKKwkuZ2V0X2F0Y192bWlkX3Bhc2lk X21hcHBpbmdfdmFsaWQgPSBnZXRfYXRjX3ZtaWRfcGFzaWRfbWFwcGluZ192YWxpZCwKKwkud3Jp dGVfdm1pZF9pbnZhbGlkYXRlX3JlcXVlc3QgPSB3cml0ZV92bWlkX2ludmFsaWRhdGVfcmVxdWVz dCwKKwkuZ2V0X2Z3X3ZlcnNpb24gPSBnZXRfZndfdmVyc2lvbgorfTsKKworc3RydWN0IGtmZDJr Z2RfY2FsbHMgKmFtZGdwdV9hbWRrZmRfZ2Z4XzdfZ2V0X2Z1bmN0aW9ucygpCit7CisJcmV0dXJu IChzdHJ1Y3Qga2ZkMmtnZF9jYWxscyAqKSZrZmQya2dkOworfQorCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBhbWRncHVfZGV2aWNlICpnZXRfYW1kZ3B1X2RldmljZShzdHJ1Y3Qga2dkX2RldiAqa2dk KQoreworCXJldHVybiAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKilrZ2Q7Cit9CisKK3N0YXRpYyB2 b2lkIGxvY2tfc3JibShzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50MzJfdCBtZWMsIHVpbnQzMl90 IHBpcGUsCisJCQl1aW50MzJfdCBxdWV1ZSwgdWludDMyX3Qgdm1pZCkKK3sKKwlzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiA9IGdldF9hbWRncHVfZGV2aWNlKGtnZCk7CisJdWludDMyX3QgdmFs dWUgPSBQSVBFSUQocGlwZSkgfCBNRUlEKG1lYykgfCBWTUlEKHZtaWQpIHwgUVVFVUVJRChxdWV1 ZSk7CisKKwltdXRleF9sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKKwlXUkVHMzIobW1TUkJNX0dG WF9DTlRMLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19zcmJtKHN0cnVjdCBrZ2Rf ZGV2ICprZ2QpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBnZXRfYW1kZ3B1X2Rl dmljZShrZ2QpOworCisJV1JFRzMyKG1tU1JCTV9HRlhfQ05UTCwgMCk7CisJbXV0ZXhfdW5sb2Nr KCZhZGV2LT5zcmJtX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgYWNxdWlyZV9xdWV1ZShzdHJ1 Y3Qga2dkX2RldiAqa2dkLCB1aW50MzJfdCBwaXBlX2lkLAorCQkJCXVpbnQzMl90IHF1ZXVlX2lk KQoreworCXVpbnQzMl90IG1lYyA9ICgrK3BpcGVfaWQgLyBDSUtfUElQRV9QRVJfTUVDKSArIDE7 CisJdWludDMyX3QgcGlwZSA9IChwaXBlX2lkICUgQ0lLX1BJUEVfUEVSX01FQyk7CisKKwlsb2Nr X3NyYm0oa2dkLCBtZWMsIHBpcGUsIHF1ZXVlX2lkLCAwKTsKK30KKworc3RhdGljIHZvaWQgcmVs ZWFzZV9xdWV1ZShzdHJ1Y3Qga2dkX2RldiAqa2dkKQoreworCXVubG9ja19zcmJtKGtnZCk7Cit9 CisKK3N0YXRpYyB2b2lkIGtnZF9wcm9ncmFtX3NoX21lbV9zZXR0aW5ncyhzdHJ1Y3Qga2dkX2Rl diAqa2dkLCB1aW50MzJfdCB2bWlkLAorCQkJCQl1aW50MzJfdCBzaF9tZW1fY29uZmlnLAorCQkJ CQl1aW50MzJfdCBzaF9tZW1fYXBlMV9iYXNlLAorCQkJCQl1aW50MzJfdCBzaF9tZW1fYXBlMV9s aW1pdCwKKwkJCQkJdWludDMyX3Qgc2hfbWVtX2Jhc2VzKQoreworCXN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2ID0gZ2V0X2FtZGdwdV9kZXZpY2Uoa2dkKTsKKworCWxvY2tfc3JibShrZ2QsIDAs IDAsIDAsIHZtaWQpOworCisJV1JFRzMyKG1tU0hfTUVNX0NPTkZJRywgc2hfbWVtX2NvbmZpZyk7 CisJV1JFRzMyKG1tU0hfTUVNX0FQRTFfQkFTRSwgc2hfbWVtX2FwZTFfYmFzZSk7CisJV1JFRzMy KG1tU0hfTUVNX0FQRTFfTElNSVQsIHNoX21lbV9hcGUxX2xpbWl0KTsKKwlXUkVHMzIobW1TSF9N RU1fQkFTRVMsIHNoX21lbV9iYXNlcyk7CisKKwl1bmxvY2tfc3JibShrZ2QpOworfQorCitzdGF0 aWMgaW50IGtnZF9zZXRfcGFzaWRfdm1pZF9tYXBwaW5nKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVu c2lnbmVkIGludCBwYXNpZCwKKwkJCQkJdW5zaWduZWQgaW50IHZtaWQpCit7CisJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSBnZXRfYW1kZ3B1X2RldmljZShrZ2QpOworCisJLyoKKwkgKiBX ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZXJlIGlzIG5vIG91dHN0YW5kaW5nIG1hcHBpbmcuCisJ ICogVGhlIEFUQ19WTUlEX1BBU0lEX01BUFBJTkdfVVBEQVRFX1NUQVRVUyBiaXQgY291bGQgYmUg MCBiZWNhdXNlCisJICogYSBtYXBwaW5nIGlzIGluIHByb2dyZXNzIG9yIGJlY2F1c2UgYSBtYXBw aW5nIGZpbmlzaGVkIGFuZCB0aGUKKwkgKiBTVyBjbGVhcmVkIGl0LiBTbyB0aGUgcHJvdG9jb2wg aXMgdG8gYWx3YXlzIHdhaXQgJiBjbGVhci4KKwkgKi8KKwl1aW50MzJfdCBwYXNpZF9tYXBwaW5n ID0gKHBhc2lkID09IDApID8gMCA6ICh1aW50MzJfdClwYXNpZCB8CisJCQlBVENfVk1JRDBfUEFT SURfTUFQUElOR19fVkFMSURfTUFTSzsKKworCVdSRUczMihtbUFUQ19WTUlEMF9QQVNJRF9NQVBQ SU5HICsgdm1pZCwgcGFzaWRfbWFwcGluZyk7CisKKwl3aGlsZSAoIShSUkVHMzIobW1BVENfVk1J RF9QQVNJRF9NQVBQSU5HX1VQREFURV9TVEFUVVMpICYgKDFVIDw8IHZtaWQpKSkKKwkJY3B1X3Jl bGF4KCk7CisJV1JFRzMyKG1tQVRDX1ZNSURfUEFTSURfTUFQUElOR19VUERBVEVfU1RBVFVTLCAx VSA8PCB2bWlkKTsKKworCS8qIE1hcHBpbmcgdm1pZCB0byBwYXNpZCBhbHNvIGZvciBJSCBibG9j ayAqLworCVdSRUczMihtbUlIX1ZNSURfMF9MVVQgKyB2bWlkLCBwYXNpZF9tYXBwaW5nKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtnZF9pbml0X3BpcGVsaW5lKHN0cnVjdCBrZ2Rf ZGV2ICprZ2QsIHVpbnQzMl90IHBpcGVfaWQsCisJCQkJdWludDMyX3QgaHBkX3NpemUsIHVpbnQ2 NF90IGhwZF9ncHVfYWRkcikKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGdldF9h bWRncHVfZGV2aWNlKGtnZCk7CisKKwl1aW50MzJfdCBtZWMgPSAoKytwaXBlX2lkIC8gQ0lLX1BJ UEVfUEVSX01FQykgKyAxOworCXVpbnQzMl90IHBpcGUgPSAocGlwZV9pZCAlIENJS19QSVBFX1BF Ul9NRUMpOworCisJbG9ja19zcmJtKGtnZCwgbWVjLCBwaXBlLCAwLCAwKTsKKwlXUkVHMzIobW1D UF9IUERfRU9QX0JBU0VfQUREUiwgbG93ZXJfMzJfYml0cyhocGRfZ3B1X2FkZHIgPj4gOCkpOwor CVdSRUczMihtbUNQX0hQRF9FT1BfQkFTRV9BRERSX0hJLCB1cHBlcl8zMl9iaXRzKGhwZF9ncHVf YWRkciA+PiA4KSk7CisJV1JFRzMyKG1tQ1BfSFBEX0VPUF9WTUlELCAwKTsKKwlXUkVHMzIobW1D UF9IUERfRU9QX0NPTlRST0wsIGhwZF9zaXplKTsKKwl1bmxvY2tfc3JibShrZ2QpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2dkX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3Qga2dkX2Rl diAqa2dkLCB1aW50MzJfdCBwaXBlX2lkKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 ID0gZ2V0X2FtZGdwdV9kZXZpY2Uoa2dkKTsKKwl1aW50MzJfdCBtZWM7CisJdWludDMyX3QgcGlw ZTsKKworCW1lYyA9IChwaXBlX2lkIC8gQ0lLX1BJUEVfUEVSX01FQykgKyAxOworCXBpcGUgPSAo cGlwZV9pZCAlIENJS19QSVBFX1BFUl9NRUMpOworCisJbG9ja19zcmJtKGtnZCwgbWVjLCBwaXBl LCAwLCAwKTsKKworCVdSRUczMihtbUNQQ19JTlRfQ05UTCwgQ1BfSU5UX0NOVExfUklORzBfX1RJ TUVfU1RBTVBfSU5UX0VOQUJMRV9NQVNLIHwKKwkJCUNQX0lOVF9DTlRMX1JJTkcwX19PUENPREVf RVJST1JfSU5UX0VOQUJMRV9NQVNLKTsKKworCXVubG9ja19zcmJtKGtnZCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBnZXRfc2RtYV9iYXNlX2FkZHIoc3RydWN0 IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKm0pCit7CisJdWludDMyX3QgcmV0dmFsOworCisJcmV0 dmFsID0gbS0+c2RtYV9lbmdpbmVfaWQgKiBTRE1BMV9SRUdJU1RFUl9PRkZTRVQgKworCQkJbS0+ c2RtYV9xdWV1ZV9pZCAqIEtGRF9DSUtfU0RNQV9RVUVVRV9PRkZTRVQ7CisKKwlwcl9kZWJ1Zygi a2ZkOiBzZG1hIGJhc2UgYWRkcmVzczogMHgleFxuIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2 YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNpa19tcWQgKmdldF9tcWQodm9pZCAqbXFk KQoreworCXJldHVybiAoc3RydWN0IGNpa19tcWQgKiltcWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKmdldF9zZG1hX21xZCh2b2lkICptcWQpCit7 CisJcmV0dXJuIChzdHJ1Y3QgY2lrX3NkbWFfcmxjX3JlZ2lzdGVycyAqKW1xZDsKK30KKworc3Rh dGljIGludCBrZ2RfaHFkX2xvYWQoc3RydWN0IGtnZF9kZXYgKmtnZCwgdm9pZCAqbXFkLCB1aW50 MzJfdCBwaXBlX2lkLAorCQkJdWludDMyX3QgcXVldWVfaWQsIHVpbnQzMl90IF9fdXNlciAqd3B0 cikKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGdldF9hbWRncHVfZGV2aWNlKGtn ZCk7CisJdWludDMyX3Qgd3B0cl9zaGFkb3csIGlzX3dwdHJfc2hhZG93X3ZhbGlkOworCXN0cnVj dCBjaWtfbXFkICptOworCisJbSA9IGdldF9tcWQobXFkKTsKKworCWlzX3dwdHJfc2hhZG93X3Zh bGlkID0gIWdldF91c2VyKHdwdHJfc2hhZG93LCB3cHRyKTsKKworCWFjcXVpcmVfcXVldWUoa2dk LCBwaXBlX2lkLCBxdWV1ZV9pZCk7CisJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUiwgbS0+Y3Bf bXFkX2Jhc2VfYWRkcl9sbyk7CisJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUl9ISSwgbS0+Y3Bf bXFkX2Jhc2VfYWRkcl9oaSk7CisJV1JFRzMyKG1tQ1BfTVFEX0NPTlRST0wsIG0tPmNwX21xZF9j b250cm9sKTsKKworCVdSRUczMihtbUNQX0hRRF9QUV9CQVNFLCBtLT5jcF9ocWRfcHFfYmFzZV9s byk7CisJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0VfSEksIG0tPmNwX2hxZF9wcV9iYXNlX2hpKTsK KwlXUkVHMzIobW1DUF9IUURfUFFfQ09OVFJPTCwgbS0+Y3BfaHFkX3BxX2NvbnRyb2wpOworCisJ V1JFRzMyKG1tQ1BfSFFEX0lCX0NPTlRST0wsIG0tPmNwX2hxZF9pYl9jb250cm9sKTsKKwlXUkVH MzIobW1DUF9IUURfSUJfQkFTRV9BRERSLCBtLT5jcF9ocWRfaWJfYmFzZV9hZGRyX2xvKTsKKwlX UkVHMzIobW1DUF9IUURfSUJfQkFTRV9BRERSX0hJLCBtLT5jcF9ocWRfaWJfYmFzZV9hZGRyX2hp KTsKKworCVdSRUczMihtbUNQX0hRRF9JQl9SUFRSLCBtLT5jcF9ocWRfaWJfcnB0cik7CisKKwlX UkVHMzIobW1DUF9IUURfUEVSU0lTVEVOVF9TVEFURSwgbS0+Y3BfaHFkX3BlcnNpc3RlbnRfc3Rh dGUpOworCVdSRUczMihtbUNQX0hRRF9TRU1BX0NNRCwgbS0+Y3BfaHFkX3NlbWFfY21kKTsKKwlX UkVHMzIobW1DUF9IUURfTVNHX1RZUEUsIG0tPmNwX2hxZF9tc2dfdHlwZSk7CisKKwlXUkVHMzIo bW1DUF9IUURfQVRPTUlDMF9QUkVPUF9MTywgbS0+Y3BfaHFkX2F0b21pYzBfcHJlb3BfbG8pOwor CVdSRUczMihtbUNQX0hRRF9BVE9NSUMwX1BSRU9QX0hJLCBtLT5jcF9ocWRfYXRvbWljMF9wcmVv cF9oaSk7CisJV1JFRzMyKG1tQ1BfSFFEX0FUT01JQzFfUFJFT1BfTE8sIG0tPmNwX2hxZF9hdG9t aWMxX3ByZW9wX2xvKTsKKwlXUkVHMzIobW1DUF9IUURfQVRPTUlDMV9QUkVPUF9ISSwgbS0+Y3Bf aHFkX2F0b21pYzFfcHJlb3BfaGkpOworCisJV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JU X0FERFIsIG0tPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2xvKTsKKwlXUkVHMzIobW1DUF9I UURfUFFfUlBUUl9SRVBPUlRfQUREUl9ISSwKKwkJCW0tPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9h ZGRyX2hpKTsKKworCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCBtLT5jcF9ocWRfcHFfcnB0cik7 CisKKwlXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9QT0xMX0FERFIsIG0tPmNwX2hxZF9wcV93cHRy X3BvbGxfYWRkcl9sbyk7CisJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSX0hJLCBt LT5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfaGkpOworCisJV1JFRzMyKG1tQ1BfSFFEX1BRX0RP T1JCRUxMX0NPTlRST0wsIG0tPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sKTsKKworCVdSRUcz MihtbUNQX0hRRF9WTUlELCBtLT5jcF9ocWRfdm1pZCk7CisKKwlXUkVHMzIobW1DUF9IUURfUVVB TlRVTSwgbS0+Y3BfaHFkX3F1YW50dW0pOworCisJV1JFRzMyKG1tQ1BfSFFEX1BJUEVfUFJJT1JJ VFksIG0tPmNwX2hxZF9waXBlX3ByaW9yaXR5KTsKKwlXUkVHMzIobW1DUF9IUURfUVVFVUVfUFJJ T1JJVFksIG0tPmNwX2hxZF9xdWV1ZV9wcmlvcml0eSk7CisKKwlXUkVHMzIobW1DUF9IUURfSVFf UlBUUiwgbS0+Y3BfaHFkX2lxX3JwdHIpOworCisJaWYgKGlzX3dwdHJfc2hhZG93X3ZhbGlkKQor CQlXUkVHMzIobW1DUF9IUURfUFFfV1BUUiwgd3B0cl9zaGFkb3cpOworCisJV1JFRzMyKG1tQ1Bf SFFEX0FDVElWRSwgbS0+Y3BfaHFkX2FjdGl2ZSk7CisJcmVsZWFzZV9xdWV1ZShrZ2QpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2dkX2hxZF9zZG1hX2xvYWQoc3RydWN0IGtnZF9k ZXYgKmtnZCwgdm9pZCAqbXFkKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZ2V0 X2FtZGdwdV9kZXZpY2Uoa2dkKTsKKwlzdHJ1Y3QgY2lrX3NkbWFfcmxjX3JlZ2lzdGVycyAqbTsK Kwl1aW50MzJfdCBzZG1hX2Jhc2VfYWRkcjsKKworCW0gPSBnZXRfc2RtYV9tcWQobXFkKTsKKwlz ZG1hX2Jhc2VfYWRkciA9IGdldF9zZG1hX2Jhc2VfYWRkcihtKTsKKworCVdSRUczMihzZG1hX2Jh c2VfYWRkciArIG1tU0RNQTBfUkxDMF9WSVJUVUFMX0FERFIsCisJCQltLT5zZG1hX3JsY192aXJ0 dWFsX2FkZHIpOworCisJV1JFRzMyKHNkbWFfYmFzZV9hZGRyICsgbW1TRE1BMF9STEMwX1JCX0JB U0UsCisJCQltLT5zZG1hX3JsY19yYl9iYXNlKTsKKworCVdSRUczMihzZG1hX2Jhc2VfYWRkciAr IG1tU0RNQTBfUkxDMF9SQl9CQVNFX0hJLAorCQkJbS0+c2RtYV9ybGNfcmJfYmFzZV9oaSk7CisK KwlXUkVHMzIoc2RtYV9iYXNlX2FkZHIgKyBtbVNETUEwX1JMQzBfUkJfUlBUUl9BRERSX0xPLAor CQkJbS0+c2RtYV9ybGNfcmJfcnB0cl9hZGRyX2xvKTsKKworCVdSRUczMihzZG1hX2Jhc2VfYWRk ciArIG1tU0RNQTBfUkxDMF9SQl9SUFRSX0FERFJfSEksCisJCQltLT5zZG1hX3JsY19yYl9ycHRy X2FkZHJfaGkpOworCisJV1JFRzMyKHNkbWFfYmFzZV9hZGRyICsgbW1TRE1BMF9STEMwX0RPT1JC RUxMLAorCQkJbS0+c2RtYV9ybGNfZG9vcmJlbGwpOworCisJV1JFRzMyKHNkbWFfYmFzZV9hZGRy ICsgbW1TRE1BMF9STEMwX1JCX0NOVEwsCisJCQltLT5zZG1hX3JsY19yYl9jbnRsKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgYm9vbCBrZ2RfaHFkX2lzX29jY3VwaWVkKHN0cnVjdCBrZ2Rf ZGV2ICprZ2QsIHVpbnQ2NF90IHF1ZXVlX2FkZHJlc3MsCisJCQkJdWludDMyX3QgcGlwZV9pZCwg dWludDMyX3QgcXVldWVfaWQpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBnZXRf YW1kZ3B1X2RldmljZShrZ2QpOworCXVpbnQzMl90IGFjdDsKKwlib29sIHJldHZhbCA9IGZhbHNl OworCXVpbnQzMl90IGxvdywgaGlnaDsKKworCWFjcXVpcmVfcXVldWUoa2dkLCBwaXBlX2lkLCBx dWV1ZV9pZCk7CisJYWN0ID0gUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSk7CisJaWYgKGFjdCkgewor CQlsb3cgPSBsb3dlcl8zMl9iaXRzKHF1ZXVlX2FkZHJlc3MgPj4gOCk7CisJCWhpZ2ggPSB1cHBl cl8zMl9iaXRzKHF1ZXVlX2FkZHJlc3MgPj4gOCk7CisKKwkJaWYgKGxvdyA9PSBSUkVHMzIobW1D UF9IUURfUFFfQkFTRSkgJiYKKwkJCQloaWdoID09IFJSRUczMihtbUNQX0hRRF9QUV9CQVNFX0hJ KSkKKwkJCXJldHZhbCA9IHRydWU7CisJfQorCXJlbGVhc2VfcXVldWUoa2dkKTsKKwlyZXR1cm4g cmV0dmFsOworfQorCitzdGF0aWMgYm9vbCBrZ2RfaHFkX3NkbWFfaXNfb2NjdXBpZWQoc3RydWN0 IGtnZF9kZXYgKmtnZCwgdm9pZCAqbXFkKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 ID0gZ2V0X2FtZGdwdV9kZXZpY2Uoa2dkKTsKKwlzdHJ1Y3QgY2lrX3NkbWFfcmxjX3JlZ2lzdGVy cyAqbTsKKwl1aW50MzJfdCBzZG1hX2Jhc2VfYWRkcjsKKwl1aW50MzJfdCBzZG1hX3JsY19yYl9j bnRsOworCisJbSA9IGdldF9zZG1hX21xZChtcWQpOworCXNkbWFfYmFzZV9hZGRyID0gZ2V0X3Nk bWFfYmFzZV9hZGRyKG0pOworCisJc2RtYV9ybGNfcmJfY250bCA9IFJSRUczMihzZG1hX2Jhc2Vf YWRkciArIG1tU0RNQTBfUkxDMF9SQl9DTlRMKTsKKworCWlmIChzZG1hX3JsY19yYl9jbnRsICYg U0RNQTBfUkxDMF9SQl9DTlRMX19SQl9FTkFCTEVfTUFTSykKKwkJcmV0dXJuIHRydWU7CisKKwly ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQga2dkX2hxZF9kZXN0cm95KHN0cnVjdCBrZ2Rf ZGV2ICprZ2QsIHVpbnQzMl90IHJlc2V0X3R5cGUsCisJCQkJdW5zaWduZWQgaW50IHRpbWVvdXQs IHVpbnQzMl90IHBpcGVfaWQsCisJCQkJdWludDMyX3QgcXVldWVfaWQpCit7CisJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSBnZXRfYW1kZ3B1X2RldmljZShrZ2QpOworCXVpbnQzMl90IHRl bXA7CisKKwlhY3F1aXJlX3F1ZXVlKGtnZCwgcGlwZV9pZCwgcXVldWVfaWQpOworCVdSRUczMiht bUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLCAwKTsKKworCVdSRUczMihtbUNQX0hRRF9ERVFV RVVFX1JFUVVFU1QsIHJlc2V0X3R5cGUpOworCisJd2hpbGUgKHRydWUpIHsKKwkJdGVtcCA9IFJS RUczMihtbUNQX0hRRF9BQ1RJVkUpOworCQlpZiAodGVtcCAmIENQX0hRRF9BQ1RJVkVfX0FDVElW RV9fU0hJRlQpCisJCQlicmVhazsKKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJcHJfZXJyKCJr ZmQ6IGNwIHF1ZXVlIHByZWVtcHRpb24gdGltZSBvdXQgKCVkbXMpXG4iLAorCQkJCXRlbXApOwor CQkJcmVsZWFzZV9xdWV1ZShrZ2QpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQltc2xlZXAo MjApOworCQl0aW1lb3V0IC09IDIwOworCX0KKworCXJlbGVhc2VfcXVldWUoa2dkKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBrZ2RfaHFkX3NkbWFfZGVzdHJveShzdHJ1Y3Qga2dkX2Rl diAqa2dkLCB2b2lkICptcWQsCisJCQkJdW5zaWduZWQgaW50IHRpbWVvdXQpCit7CisJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBnZXRfYW1kZ3B1X2RldmljZShrZ2QpOworCXN0cnVjdCBj aWtfc2RtYV9ybGNfcmVnaXN0ZXJzICptOworCXVpbnQzMl90IHNkbWFfYmFzZV9hZGRyOworCXVp bnQzMl90IHRlbXA7CisKKwltID0gZ2V0X3NkbWFfbXFkKG1xZCk7CisJc2RtYV9iYXNlX2FkZHIg PSBnZXRfc2RtYV9iYXNlX2FkZHIobSk7CisKKwl0ZW1wID0gUlJFRzMyKHNkbWFfYmFzZV9hZGRy ICsgbW1TRE1BMF9STEMwX1JCX0NOVEwpOworCXRlbXAgPSB0ZW1wICYgflNETUEwX1JMQzBfUkJf Q05UTF9fUkJfRU5BQkxFX01BU0s7CisJV1JFRzMyKHNkbWFfYmFzZV9hZGRyICsgbW1TRE1BMF9S TEMwX1JCX0NOVEwsIHRlbXApOworCisJd2hpbGUgKHRydWUpIHsKKwkJdGVtcCA9IFJSRUczMihz ZG1hX2Jhc2VfYWRkciArIG1tU0RNQTBfUkxDMF9DT05URVhUX1NUQVRVUyk7CisJCWlmICh0ZW1w ICYgU0RNQTBfU1RBVFVTX1JFR19fUkJfQ01EX0lETEVfX1NISUZUKQorCQkJYnJlYWs7CisJCWlm ICh0aW1lb3V0ID09IDApCisJCQlyZXR1cm4gLUVUSU1FOworCQltc2xlZXAoMjApOworCQl0aW1l b3V0IC09IDIwOworCX0KKworCVdSRUczMihzZG1hX2Jhc2VfYWRkciArIG1tU0RNQTBfUkxDMF9E T09SQkVMTCwgMCk7CisJV1JFRzMyKHNkbWFfYmFzZV9hZGRyICsgbW1TRE1BMF9STEMwX1JCX1JQ VFIsIDApOworCVdSRUczMihzZG1hX2Jhc2VfYWRkciArIG1tU0RNQTBfUkxDMF9SQl9XUFRSLCAw KTsKKwlXUkVHMzIoc2RtYV9iYXNlX2FkZHIgKyBtbVNETUEwX1JMQzBfUkJfQkFTRSwgMCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrZ2RfYWRkcmVzc193YXRjaF9kaXNhYmxlKHN0 cnVjdCBrZ2RfZGV2ICprZ2QpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBnZXRf YW1kZ3B1X2RldmljZShrZ2QpOworCXVuaW9uIFRDUF9XQVRDSF9DTlRMX0JJVFMgY250bDsKKwl1 bnNpZ25lZCBpbnQgaTsKKworCWNudGwudTMyQWxsID0gMDsKKworCWNudGwuYml0ZmllbGRzLnZh bGlkID0gMDsKKwljbnRsLmJpdGZpZWxkcy5tYXNrID0gQUREUkVTU19XQVRDSF9SRUdfQ05UTF9E RUZBVUxUX01BU0s7CisJY250bC5iaXRmaWVsZHMuYXRjID0gMTsKKworCS8qIFR1cm5pbmcgb2Zm IHRoaXMgYWRkcmVzcyB1bnRpbCB3ZSBzZXQgYWxsIHRoZSByZWdpc3RlcnMgKi8KKwlmb3IgKGkg PSAwOyBpIDwgTUFYX1dBVENIX0FERFJFU1NFUzsgaSsrKQorCQlXUkVHMzIod2F0Y2hSZWdzW2kg KiBBRERSRVNTX1dBVENIX1JFR19NQVggKworCQkJQUREUkVTU19XQVRDSF9SRUdfQ05UTF0sIGNu dGwudTMyQWxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtnZF9hZGRyZXNzX3dh dGNoX2V4ZWN1dGUoc3RydWN0IGtnZF9kZXYgKmtnZCwKKwkJCQkJdW5zaWduZWQgaW50IHdhdGNo X3BvaW50X2lkLAorCQkJCQl1aW50MzJfdCBjbnRsX3ZhbCwKKwkJCQkJdWludDMyX3QgYWRkcl9o aSwKKwkJCQkJdWludDMyX3QgYWRkcl9sbykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diA9IGdldF9hbWRncHVfZGV2aWNlKGtnZCk7CisJdW5pb24gVENQX1dBVENIX0NOVExfQklUUyBj bnRsOworCisJY250bC51MzJBbGwgPSBjbnRsX3ZhbDsKKworCS8qIFR1cm5pbmcgb2ZmIHRoaXMg d2F0Y2ggcG9pbnQgdW50aWwgd2Ugc2V0IGFsbCB0aGUgcmVnaXN0ZXJzICovCisJY250bC5iaXRm aWVsZHMudmFsaWQgPSAwOworCVdSRUczMih3YXRjaFJlZ3Nbd2F0Y2hfcG9pbnRfaWQgKiBBRERS RVNTX1dBVENIX1JFR19NQVggKworCQlBRERSRVNTX1dBVENIX1JFR19DTlRMXSwgY250bC51MzJB bGwpOworCisJV1JFRzMyKHdhdGNoUmVnc1t3YXRjaF9wb2ludF9pZCAqIEFERFJFU1NfV0FUQ0hf UkVHX01BWCArCisJCUFERFJFU1NfV0FUQ0hfUkVHX0FERFJfSEldLCBhZGRyX2hpKTsKKworCVdS RUczMih3YXRjaFJlZ3Nbd2F0Y2hfcG9pbnRfaWQgKiBBRERSRVNTX1dBVENIX1JFR19NQVggKwor CQlBRERSRVNTX1dBVENIX1JFR19BRERSX0xPXSwgYWRkcl9sbyk7CisKKwkvKiBFbmFibGUgdGhl IHdhdGNoIHBvaW50ICovCisJY250bC5iaXRmaWVsZHMudmFsaWQgPSAxOworCisJV1JFRzMyKHdh dGNoUmVnc1t3YXRjaF9wb2ludF9pZCAqIEFERFJFU1NfV0FUQ0hfUkVHX01BWCArCisJCUFERFJF U1NfV0FUQ0hfUkVHX0NOVExdLCBjbnRsLnUzMkFsbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBrZ2Rfd2F2ZV9jb250cm9sX2V4ZWN1dGUoc3RydWN0IGtnZF9kZXYgKmtnZCwKKwkJ CQkJdWludDMyX3QgZ2Z4X2luZGV4X3ZhbCwKKwkJCQkJdWludDMyX3Qgc3FfY21kKQoreworCXN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZ2V0X2FtZGdwdV9kZXZpY2Uoa2dkKTsKKwl1aW50 MzJfdCBkYXRhOworCisJbXV0ZXhfbG9jaygmYWRldi0+Z3JibV9pZHhfbXV0ZXgpOworCisJV1JF RzMyKG1tR1JCTV9HRlhfSU5ERVgsIGdmeF9pbmRleF92YWwpOworCVdSRUczMihtbVNRX0NNRCwg c3FfY21kKTsKKworCS8qICBSZXN0b3JlIHRoZSBHUkJNX0dGWF9JTkRFWCByZWdpc3RlciAgKi8K KworCWRhdGEgPSBHUkJNX0dGWF9JTkRFWF9fSU5TVEFOQ0VfQlJPQURDQVNUX1dSSVRFU19NQVNL IHwKKwkJR1JCTV9HRlhfSU5ERVhfX1NIX0JST0FEQ0FTVF9XUklURVNfTUFTSyB8CisJCUdSQk1f R0ZYX0lOREVYX19TRV9CUk9BRENBU1RfV1JJVEVTX01BU0s7CisKKwlXUkVHMzIobW1HUkJNX0dG WF9JTkRFWCwgZGF0YSk7CisKKwltdXRleF91bmxvY2soJmFkZXYtPmdyYm1faWR4X211dGV4KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDMyX3Qga2dkX2FkZHJlc3Nfd2F0Y2hfZ2V0 X29mZnNldChzdHJ1Y3Qga2dkX2RldiAqa2dkLAorCQkJCQl1bnNpZ25lZCBpbnQgd2F0Y2hfcG9p bnRfaWQsCisJCQkJCXVuc2lnbmVkIGludCByZWdfb2Zmc2V0KQoreworCXJldHVybiB3YXRjaFJl Z3Nbd2F0Y2hfcG9pbnRfaWQgKiBBRERSRVNTX1dBVENIX1JFR19NQVggKyByZWdfb2Zmc2V0XTsK K30KKworc3RhdGljIGJvb2wgZ2V0X2F0Y192bWlkX3Bhc2lkX21hcHBpbmdfdmFsaWQoc3RydWN0 IGtnZF9kZXYgKmtnZCwKKwkJCQkJCQl1aW50OF90IHZtaWQpCit7CisJdWludDMyX3QgcmVnOwor CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopIGtn ZDsKKworCXJlZyA9IFJSRUczMihtbUFUQ19WTUlEMF9QQVNJRF9NQVBQSU5HICsgdm1pZCk7CisJ cmV0dXJuIHJlZyAmIEFUQ19WTUlEMF9QQVNJRF9NQVBQSU5HX19WQUxJRF9NQVNLOworfQorCitz dGF0aWMgdWludDE2X3QgZ2V0X2F0Y192bWlkX3Bhc2lkX21hcHBpbmdfcGFzaWQoc3RydWN0IGtn ZF9kZXYgKmtnZCwKKwkJCQkJCQkJdWludDhfdCB2bWlkKQoreworCXVpbnQzMl90IHJlZzsKKwlz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKSBrZ2Q7 CisKKwlyZWcgPSBSUkVHMzIobW1BVENfVk1JRDBfUEFTSURfTUFQUElORyArIHZtaWQpOworCXJl dHVybiByZWcgJiBBVENfVk1JRDBfUEFTSURfTUFQUElOR19fVkFMSURfTUFTSzsKK30KKworc3Rh dGljIHZvaWQgd3JpdGVfdm1pZF9pbnZhbGlkYXRlX3JlcXVlc3Qoc3RydWN0IGtnZF9kZXYgKmtn ZCwgdWludDhfdCB2bWlkKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVj dCBhbWRncHVfZGV2aWNlICopIGtnZDsKKworCVdSRUczMihtbVZNX0lOVkFMSURBVEVfUkVRVUVT VCwgMSA8PCB2bWlkKTsKK30KKworc3RhdGljIHVpbnQxNl90IGdldF9md192ZXJzaW9uKHN0cnVj dCBrZ2RfZGV2ICprZ2QsIGVudW0ga2dkX2VuZ2luZV90eXBlIHR5cGUpCit7CisJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKikga2dkOworCWNvbnN0 IHVuaW9uIGFtZGdwdV9maXJtd2FyZV9oZWFkZXIgKmhkcjsKKworCUJVR19PTihrZ2QgPT0gTlVM TCk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEtHRF9FTkdJTkVfUEZQOgorCQloZHIgPSAo Y29uc3QgdW5pb24gYW1kZ3B1X2Zpcm13YXJlX2hlYWRlciAqKQorCQkJCQkJCWFkZXYtPmdmeC5w ZnBfZnctPmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBLR0RfRU5HSU5FX01FOgorCQloZHIgPSAo Y29uc3QgdW5pb24gYW1kZ3B1X2Zpcm13YXJlX2hlYWRlciAqKQorCQkJCQkJCWFkZXYtPmdmeC5t ZV9mdy0+ZGF0YTsKKwkJYnJlYWs7CisKKwljYXNlIEtHRF9FTkdJTkVfQ0U6CisJCWhkciA9IChj b25zdCB1bmlvbiBhbWRncHVfZmlybXdhcmVfaGVhZGVyICopCisJCQkJCQkJYWRldi0+Z2Z4LmNl X2Z3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9NRUMxOgorCQloZHIgPSAo Y29uc3QgdW5pb24gYW1kZ3B1X2Zpcm13YXJlX2hlYWRlciAqKQorCQkJCQkJCWFkZXYtPmdmeC5t ZWNfZnctPmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBLR0RfRU5HSU5FX01FQzI6CisJCWhkciA9 IChjb25zdCB1bmlvbiBhbWRncHVfZmlybXdhcmVfaGVhZGVyICopCisJCQkJCQkJYWRldi0+Z2Z4 Lm1lYzJfZnctPmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBLR0RfRU5HSU5FX1JMQzoKKwkJaGRy ID0gKGNvbnN0IHVuaW9uIGFtZGdwdV9maXJtd2FyZV9oZWFkZXIgKikKKwkJCQkJCQlhZGV2LT5n ZngucmxjX2Z3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9TRE1BMToKKwkJ aGRyID0gKGNvbnN0IHVuaW9uIGFtZGdwdV9maXJtd2FyZV9oZWFkZXIgKikKKwkJCQkJCQlhZGV2 LT5zZG1hWzBdLmZ3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9TRE1BMjoK KwkJaGRyID0gKGNvbnN0IHVuaW9uIGFtZGdwdV9maXJtd2FyZV9oZWFkZXIgKikKKwkJCQkJCQlh ZGV2LT5zZG1hWzFdLmZ3LT5kYXRhOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAw OworCX0KKworCWlmIChoZHIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBPbmx5IDEyIGJp dCBpbiB1c2UqLworCXJldHVybiBoZHItPmNvbW1vbi51Y29kZV92ZXJzaW9uOworfQorCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWtkLmggYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9jaWtkLmgKaW5kZXggMjIwODY1YS4uYTNlM2RmYSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2Npa2QuaApAQCAtNTUyLDQgKzU1MiwxNiBAQAogI2RlZmluZSBWQ0VfQ01EX0lC X0FVVE8JCTB4MDAwMDAwMDUKICNkZWZpbmUgVkNFX0NNRF9TRU1BUEhPUkUJMHgwMDAwMDAwNgog CisvKiBpZiBQVFIzMiwgdGhlc2UgYXJlIHRoZSBiYXNlcyBmb3Igc2NyYXRjaCBhbmQgbGRzICov CisjZGVmaW5lCVBSSVZBVEVfQkFTRSh4KQkoKHgpIDw8IDApIC8qIHNjcmF0Y2ggKi8KKyNkZWZp bmUJU0hBUkVEX0JBU0UoeCkJKCh4KSA8PCAxNikgLyogTERTICovCisKKyNkZWZpbmUgS0ZEX0NJ S19TRE1BX1FVRVVFX09GRlNFVAkweDIwMAorCisvKiB2YWxpZCBmb3IgYm90aCBERUZBVUxUX01U WVBFIGFuZCBBUEUxX01UWVBFICovCitlbnVtIHsKKwlNVFlQRV9DQUNIRUQgPSAwLAorCU1UWVBF X05PTkNBQ0hFRCA9IDMKK307CisKICNlbmRpZgotLSAKMi40LjMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==