From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH 4/5] drm/i915: Implement color management on bdw/skl/bxt/kbl Date: Thu, 25 Feb 2016 15:33:42 +0000 Message-ID: <1456414423-7079-5-git-send-email-lionel.g.landwerlin@intel.com> References: <1456414423-7079-1-git-send-email-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456414423-7079-1-git-send-email-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Kumar@freedesktop.org, kausalmalladi@gmail.com List-Id: dri-devel@lists.freedesktop.org UGF0Y2ggYmFzZWQgb24gYSBwcmV2aW91cyBzZXJpZXMgYnkgU2hhc2hhbmsgU2hhcm1hLgoKdjI6 IERvIG5vdCByZWFkIEdBTU1BX01PREUgcmVnaXN0ZXIgdG8gZmlndXJlIHdoYXQgbW9kZSB3ZSdy ZSBpbgoKdjM6IFByb2dyYW0gUFJFQ19QQUxfR0NfTUFYIHRvIGNsYW1wIHBpeGVsIHZhbHVlcyA+ IDEuMAoKICAgIEFkZCBkb2N1bWVudGF0aW9uIG9uIGhvdyB0aGUgQnJvYWRjYXN0IFJHQiBwcm9w ZXJ0eSBpcyBhZmZlY3RlZCBieSBDVE0KCnY0OiBVcGRhdGUgY29udHJpYnV0b3JzCgp2NTogUmVm YWN0b3IgZGVnYW1tYS9nYW1tYSBMVVRzIGxvYWQgaW50byBhIHNpbmdsZSBmdW5jdGlvbgoKdjY6 IEZpeCBtaXNzaW5nIGludGVsX2NydGMgdmFyaWFibGUgKGJpc2VjdCBpc3N1ZSkKCnY3OiBGaXgg JiBzaW1wbGlmeSBsaW1pdGVkIHJhbmdlIG1hdHJpeCBtdWx0aXBsaWNhdGlvbgoKU2lnbmVkLW9m Zi1ieTogU2hhc2hhbmsgU2hhcm1hIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+ ClNpZ25lZC1vZmYtYnk6IEt1bWFyLCBLaXJhbiBTIDxraXJhbi5zLmt1bWFyQGludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogS2F1c2FsIE1hbGxhZGkgPGthdXNhbG1hbGxhZGlAZ21haWwuY29tPgot LS0KIERvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbCAgICAgICB8ICAgNiArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgIHwgIDI0ICsrLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmggICAgICB8ICAyMiArKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbG9yLmMg ICB8IDM0MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgIDIyICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHJ2LmggICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRl di5jICAgfCAgIDggKwogOCBmaWxlcyBjaGFuZ2VkLCAzNjkgaW5zZXJ0aW9ucygrKSwgNjMgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsIGIv RG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsCmluZGV4IDE2OTJjNGQuLjQzMGU5OWIgMTAw NjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAorKysgYi9Eb2N1bWVudGF0 aW9uL0RvY0Jvb2svZ3B1LnRtcGwKQEAgLTIxNTMsNyArMjE1MywxMSBAQCB2b2lkIGludGVsX2Ny dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJPHRkIHZhbGlnbj0idG9wIiA+RU5VTTwv dGQ+CiAJPHRkIHZhbGlnbj0idG9wIiA+eyAiQXV0b21hdGljIiwgIkZ1bGwiLCAiTGltaXRlZCAx NjoyMzUiIH08L3RkPgogCTx0ZCB2YWxpZ249InRvcCIgPkNvbm5lY3RvcjwvdGQ+Ci0JPHRkIHZh bGlnbj0idG9wIiA+VEJEPC90ZD4KKwk8dGQgdmFsaWduPSJ0b3AiID5XaGVuIHRoaXMgcHJvcGVy dHkgaXMgc2V0IHRvIExpbWl0ZWQgMTY6MjM1CisJCWFuZCBDVE0gaXMgc2V0LCB0aGUgaGFyZHdh cmUgd2lsbCBiZSBwcm9ncmFtbWVkIHdpdGggdGhlCisJCXJlc3VsdCBvZiB0aGUgbXVsdGlwbGlj YXRpb24gb2YgQ1RNIGJ5IHRoZSBsaW1pdGVkIHJhbmdlCisJCW1hdHJpeCB0byBlbnN1cmUgdGhl IHBpeGVscyBub3JtYWx5IGluIHRoZSByYW5nZSAwLi4xLjAgYXJlCisJCXJlbWFwcGVkIHRvIHRo ZSByYW5nZSAxNi8yNTUuLjIzNS8yNTUuPC90ZD4KIAk8L3RyPgogCTx0cj4KIAk8dGQgdmFsaWdu PSJ0b3AiID7igJxhdWRpb+KAnTwvdGQ+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAyMGU4 MjAwLi4zODA3YjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTY2LDYgKzY2LDkgQEAg c3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKICNkZWZpbmUgSVZCX0NVUlNPUl9PRkZT RVRTIFwKIAkuY3Vyc29yX29mZnNldHMgPSB7IENVUlNPUl9BX09GRlNFVCwgSVZCX0NVUlNPUl9C X09GRlNFVCwgSVZCX0NVUlNPUl9DX09GRlNFVCB9CiAKKyNkZWZpbmUgQkRXX0NPTE9SUyBcCisJ LmNvbG9yID0geyAuZGVnYW1tYV9sdXRfc2l6ZSA9IDUxMiwgLmdhbW1hX2x1dF9zaXplID0gNTEy IH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pODMwX2lu Zm8gPSB7CiAJLmdlbiA9IDIsIC5pc19tb2JpbGUgPSAxLCAuY3Vyc29yX25lZWRzX3BoeXNpY2Fs ID0gMSwgLm51bV9waXBlcyA9IDIsCiAJLmhhc19vdmVybGF5ID0gMSwgLm92ZXJsYXlfbmVlZHNf cGh5c2ljYWwgPSAxLApAQCAtMjg4LDI0ICsyOTEsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9oYXN3ZWxsX21faW5mbyA9IHsKIAkuaXNfbW9iaWxlID0g MSwKIH07CiAKKyNkZWZpbmUgQkRXX0ZFQVRVUkVTIFwKKwlIU1dfRkVBVFVSRVMsIFwKKwlCRFdf Q09MT1JTCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfYnJv YWR3ZWxsX2RfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5nZW4g PSA4LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9i cm9hZHdlbGxfbV9pbmZvID0gewotCUhTV19GRUFUVVJFUywKKwlCRFdfRkVBVFVSRVMsCiAJLmdl biA9IDgsIC5pc19tb2JpbGUgPSAxLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9k ZXZpY2VfaW5mbyBpbnRlbF9icm9hZHdlbGxfZ3QzZF9pbmZvID0gewotCUhTV19GRUFUVVJFUywK KwlCRFdfRkVBVFVSRVMsCiAJLmdlbiA9IDgsCiAJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwg QlNEX1JJTkcgfCBCTFRfUklORyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCiB9OwogCiBzdGF0 aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2Jyb2Fkd2VsbF9ndDNtX2lu Zm8gPSB7Ci0JSFNXX0ZFQVRVUkVTLAorCUJEV19GRUFUVVJFUywKIAkuZ2VuID0gOCwgLmlzX21v YmlsZSA9IDEsCiAJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwgQlNEX1JJTkcgfCBCTFRfUklO RyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCiB9OwpAQCAtMzIxLDEzICszMjgsMTMgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9jaGVycnl2aWV3X2luZm8g PSB7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX3Nr eWxha2VfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5pc19za3ls YWtlID0gMSwKIAkuZ2VuID0gOSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2 aWNlX2luZm8gaW50ZWxfc2t5bGFrZV9ndDNfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRX X0ZFQVRVUkVTLAogCS5pc19za3lsYWtlID0gMSwKIAkuZ2VuID0gOSwKIAkucmluZ19tYXNrID0g UkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklO RywKQEAgLTM0NSwxNyArMzUyLDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNl X2luZm8gaW50ZWxfYnJveHRvbl9pbmZvID0gewogCS5oYXNfZmJjID0gMSwKIAlHRU5fREVGQVVM VF9QSVBFT0ZGU0VUUywKIAlJVkJfQ1VSU09SX09GRlNFVFMsCisJQkRXX0NPTE9SUywKIH07CiAK IHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxha2VfaW5m byA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5pc19wcmVsaW1pbmFyeSA9 IDEsCiAJLmlzX2thYnlsYWtlID0gMSwKIAkuZ2VuID0gOSwKIH07CiAKIHN0YXRpYyBjb25zdCBz dHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxha2VfZ3QzX2luZm8gPSB7Ci0JSFNX X0ZFQVRVUkVTLAorCUJEV19GRUFUVVJFUywKIAkuaXNfcHJlbGltaW5hcnkgPSAxLAogCS5pc19r YWJ5bGFrZSA9IDEsCiAJLmdlbiA9IDksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA4Y2I0 NDE4Li5lNzFkYzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTY2Myw2ICs2NjMsNyBA QCBzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9mdW5jcyB7CiAJLyogZGlzcGxheSBjbG9jayBpbmNy ZWFzZS9kZWNyZWFzZSAqLwogCS8qIHBsbCBjbG9jayBpbmNyZWFzZS9kZWNyZWFzZSAqLwogCisJ dm9pZCAoKmxvYWRfY3NjX21hdHJpeCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAl2b2lkICgq bG9hZF9sdXRzKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogfTsKIApAQCAtODEyLDYgKzgxMywx MSBAQCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gewogCXU4IGhhc19zbGljZV9wZzoxOwogCXU4 IGhhc19zdWJzbGljZV9wZzoxOwogCXU4IGhhc19ldV9wZzoxOworCisJc3RydWN0IGNvbG9yX2x1 dHMgeworCQl1MTYgZGVnYW1tYV9sdXRfc2l6ZTsKKwkJdTE2IGdhbW1hX2x1dF9zaXplOworCX0g Y29sb3I7CiB9OwogCiAjdW5kZWYgREVGSU5FX0ZMQUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmlu ZGV4IGY3NmNiZjMuLjc2YTllNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNzY1MSw2 ICs3NjUxLDI4IEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSBQSVBFX0NT Q19QT1NUT0ZGX01FKHBpcGUpCV9NTUlPX1BJUEUocGlwZSwgX1BJUEVfQV9DU0NfUE9TVE9GRl9N RSwgX1BJUEVfQl9DU0NfUE9TVE9GRl9NRSkKICNkZWZpbmUgUElQRV9DU0NfUE9TVE9GRl9MTyhw aXBlKQlfTU1JT19QSVBFKHBpcGUsIF9QSVBFX0FfQ1NDX1BPU1RPRkZfTE8sIF9QSVBFX0JfQ1ND X1BPU1RPRkZfTE8pCiAKKy8qIHBpcGUgZGVnYW1tYS9nYW1tYSBMVVRzIG9uIElWQisgKi8KKyNk ZWZpbmUgX1BBTF9QUkVDX0lOREVYX0EJMHg0QTQwMAorI2RlZmluZSBfUEFMX1BSRUNfSU5ERVhf QgkweDRBQzAwCisjZGVmaW5lIF9QQUxfUFJFQ19JTkRFWF9DCTB4NEI0MDAKKyNkZWZpbmUgICBQ QUxfUFJFQ18xMF8xMl9CSVQJCSgwIDw8IDMxKQorI2RlZmluZSAgIFBBTF9QUkVDX1NQTElUX01P REUJCSgxIDw8IDMxKQorI2RlZmluZSAgIFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UCSgxIDw8IDE1 KQorI2RlZmluZSBfUEFMX1BSRUNfREFUQV9BCTB4NEE0MDQKKyNkZWZpbmUgX1BBTF9QUkVDX0RB VEFfQgkweDRBQzA0CisjZGVmaW5lIF9QQUxfUFJFQ19EQVRBX0MJMHg0QjQwNAorI2RlZmluZSBf UEFMX1BSRUNfR0NfTUFYX0EJMHg0QTQxMAorI2RlZmluZSBfUEFMX1BSRUNfR0NfTUFYX0IJMHg0 QUMxMAorI2RlZmluZSBfUEFMX1BSRUNfR0NfTUFYX0MJMHg0QjQxMAorI2RlZmluZSBfUEFMX1BS RUNfRVhUX0dDX01BWF9BCTB4NEE0MjAKKyNkZWZpbmUgX1BBTF9QUkVDX0VYVF9HQ19NQVhfQgkw eDRBQzIwCisjZGVmaW5lIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0MJMHg0QjQyMAorCisjZGVmaW5l IFBSRUNfUEFMX0lOREVYKHBpcGUpCQlfTU1JT19QSVBFKHBpcGUsIF9QQUxfUFJFQ19JTkRFWF9B LCBfUEFMX1BSRUNfSU5ERVhfQikKKyNkZWZpbmUgUFJFQ19QQUxfREFUQShwaXBlKQkJX01NSU9f UElQRShwaXBlLCBfUEFMX1BSRUNfREFUQV9BLCBfUEFMX1BSRUNfREFUQV9CKQorI2RlZmluZSBQ UkVDX1BBTF9HQ19NQVgocGlwZSwgaSkJX01NSU8oX1BJUEUocGlwZSwgX1BBTF9QUkVDX0dDX01B WF9BLCBfUEFMX1BSRUNfR0NfTUFYX0IpICsgKGkpICogNCkKKyNkZWZpbmUgUFJFQ19QQUxfRVhU X0dDX01BWChwaXBlLCBpKQlfTU1JTyhfUElQRShwaXBlLCBfUEFMX1BSRUNfRVhUX0dDX01BWF9B LCBfUEFMX1BSRUNfRVhUX0dDX01BWF9CKSArIChpKSAqIDQpCisKIC8qIE1JUEkgRFNJIHJlZ2lz dGVycyAqLwogCiAjZGVmaW5lIF9NSVBJX1BPUlQocG9ydCwgYSwgYykJX1BPUlQzKHBvcnQsIGEs IDAsIGMpCS8qIHBvcnRzIEEgYW5kIEMgb25seSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfY29sb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbG9y LmMKaW5kZXggMTY2NTdlYi4uYTZkYzJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfY29sb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xvci5j CkBAIC0yNCwzOSArMjQsMTU1IEBACiAKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKIAorI2RlZmlu ZSBDVE1fQ09FRkZfU0lHTgkoMVVMTCA8PCA2MykKKworI2RlZmluZSBDVE1fQ09FRkZfMV8wCSgx VUxMIDw8IDMyKQorI2RlZmluZSBDVE1fQ09FRkZfMl8wCShDVE1fQ09FRkZfMV8wIDw8IDEpCisj ZGVmaW5lIENUTV9DT0VGRl80XzAJKENUTV9DT0VGRl8yXzAgPDwgMSkKKyNkZWZpbmUgQ1RNX0NP RUZGXzBfNQkoQ1RNX0NPRUZGXzFfMCA+PiAxKQorI2RlZmluZSBDVE1fQ09FRkZfMF8yNQkoQ1RN X0NPRUZGXzBfNSA+PiAxKQorI2RlZmluZSBDVE1fQ09FRkZfMF8xMjUJKENUTV9DT0VGRl8wXzI1 ID4+IDEpCisKKyNkZWZpbmUgQ1RNX0NPRUZGX0xJTUlURURfUkFOR0UgKCgyMzVVTEwgLSAxNlVM TCkgKiBDVE1fQ09FRkZfMV8wIC8gMjU1KQorCisjZGVmaW5lIENUTV9DT0VGRl9ORUdBVElWRShj b2VmZikJKCgoY29lZmYpICYgQ1RNX0NPRUZGX1NJR04pICE9IDApCisjZGVmaW5lIENUTV9DT0VG Rl9BQlMoY29lZmYpCQkoKGNvZWZmKSAmIChDVE1fQ09FRkZfU0lHTiAtIDEpKQorCisjZGVmaW5l IExFR0FDWV9MVVRfTEVOR1RICQkoc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAqIDI1NikK KwogLyoKLSAqIFNldCB1cCB0aGUgcGlwZSBDU0MgdW5pdC4KKyAqIEV4dHJhY3QgdGhlIENTQyBj b2VmZmljaWVudCBmcm9tIGEgQ1RNIGNvZWZmaWNpZW50IChpbiBVMzIuMzIgZml4ZWQgcG9pbnQK KyAqIGZvcm1hdCkuIFRoaXMgbWFjcm8gdGFrZXMgdGhlIGNvZWZmaWNpZW50IHdlIHdhbnQgdHJh bnNmb3JtZWQgYW5kIHRoZQorICogbnVtYmVyIG9mIGZyYWN0aW9uYWwgYml0cy4KICAqCi0gKiBD dXJyZW50bHkgb25seSBmdWxsIHJhbmdlIFJHQiB0byBsaW1pdGVkIHJhbmdlIFJHQiBjb252ZXJz aW9uCi0gKiBpcyBzdXBwb3J0ZWQsIGJ1dCBldmVudHVhbGx5IHRoaXMgc2hvdWxkIGhhbmRsZSB2 YXJpb3VzCi0gKiBSR0I8LT5ZQ2JDciBzY2VuYXJpb3MgYXMgd2VsbC4KKyAqIFdlIG9ubHkgaGF2 ZSBhIDkgYml0cyBwcmVjaXNpb24gd2luZG93IHdoaWNoIHNsaWRlcyBkZXBlbmRpbmcgb24gdGhl IHZhbHVlCisgKiBvZiB0aGUgQ1RNIGNvZWZmaWNpZW50IGFuZCB3ZSB3cml0ZSB0aGUgdmFsdWUg ZnJvbSBiaXQgMy4gV2UgYWxzbyByb3VuZCB0aGUKKyAqIHZhbHVlLgogICovCisjZGVmaW5lIEk5 WFhfQ1NDX0NPRUZGX0ZQKGNvZWZmLCBmYml0cykJXAorCShjbGFtcF92YWwoKChjb2VmZikgPj4g KDMyIC0gKGZiaXRzKSAtIDMpKSArIDQsIDAsIDB4ZmZmKSAmIDB4ZmY4KQorCisjZGVmaW5lIEk5 WFhfQ1NDX0NPRUZGX0xJTUlURURfUkFOR0UJXAorCUk5WFhfQ1NDX0NPRUZGX0ZQKENUTV9DT0VG Rl9MSU1JVEVEX1JBTkdFLCA5KQorI2RlZmluZSBJOVhYX0NTQ19DT0VGRl8xXzAJCVwKKwkoKDcg PDwgMTIpIHwgSTlYWF9DU0NfQ09FRkZfRlAoQ1RNX0NPRUZGXzFfMCwgOCkpCisKK3N0YXRpYyBi b29sIGNydGNfc3RhdGVfaXNfbGVnYWN5KHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7 CisJcmV0dXJuICFzdGF0ZS0+ZGVnYW1tYV9sdXQgJiYKKwkJIXN0YXRlLT5jdG0gJiYKKwkJc3Rh dGUtPmdhbW1hX2x1dCAmJgorCQlzdGF0ZS0+Z2FtbWFfbHV0LT5sZW5ndGggPT0gTEVHQUNZX0xV VF9MRU5HVEg7Cit9CisKKy8qCisgKiBXaGVuIHVzaW5nIGxpbWl0ZWQgcmFuZ2UsIG11bHRpcGx5 IHRoZSBtYXRyaXggZ2l2ZW4gYnkgdXNlcnNwYWNlIGJ5CisgKiB0aGUgbWF0cml4IHRoYXQgd2Ug d291bGQgdXNlIGZvciB0aGUgbGltaXRlZCByYW5nZS4gV2UgZG8gdGhlCisgKiBtdWx0aXBsaWNh dGlvbiBpbiBVMi4zMCBmb3JtYXQuCisgKi8KK3N0YXRpYyB2b2lkIGN0bV9tdWx0X2J5X2xpbWl0 ZWQodWludDY0X3QgKnJlc3VsdCwgaW50NjRfdCAqaW5wdXQpCit7CisJaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgOTsgaSsrKQorCQlyZXN1bHRbaV0gPSAwOworCisJZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgeworCQlpbnQ2NF90IHVzZXJfY29lZmYgPSBpbnB1dFtpICogMyArIGldOworCQl1 aW50NjRfdCBsaW1pdGVkX2NvZWZmID0gQ1RNX0NPRUZGX0xJTUlURURfUkFOR0UgPj4gMjsKKwkJ dWludDY0X3QgYWJzX2NvZWZmID0gY2xhbXBfdmFsKENUTV9DT0VGRl9BQlModXNlcl9jb2VmZiks CisJCQkJCSAgICAgICAwLAorCQkJCQkgICAgICAgQ1RNX0NPRUZGXzRfMCAtIDEpID4+IDI7CisK KwkJcmVzdWx0W2kgKiAzICsgaV0gPSAobGltaXRlZF9jb2VmZiAqIGFic19jb2VmZikgPj4gMjc7 CisJCWlmIChDVE1fQ09FRkZfTkVHQVRJVkUodXNlcl9jb2VmZikpCisJCQlyZXN1bHRbaSAqIDMg KyBpXSB8PSBDVE1fQ09FRkZfU0lHTjsKKwl9Cit9CisKKy8qIFNldCB1cCB0aGUgcGlwZSBDU0Mg dW5pdC4gKi8KIHN0YXRpYyB2b2lkIGk5eHhfbG9hZF9jc2NfbWF0cml4KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IGNydGMtPnN0YXRlOwogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCWludCBwaXBlID0gaW50 ZWxfY3J0Yy0+cGlwZTsKLQl1aW50MTZfdCBjb2VmZiA9IDB4NzgwMDsgLyogMS4wICovCisJaW50 IGksIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCXVpbnQxNl90IGNvZWZmc1s5XSA9IHsgMCwg fTsKIAotCS8qCi0JICogVE9ETzogQ2hlY2sgd2hhdCBraW5kIG9mIHZhbHVlcyBhY3R1YWxseSBj b21lIG91dCBvZiB0aGUgcGlwZQotCSAqIHdpdGggdGhlc2UgY29lZmYvcG9zdG9mZiB2YWx1ZXMg YW5kIGFkanVzdCB0byBnZXQgdGhlIGJlc3QKLQkgKiBhY2N1cmFjeS4gUGVyaGFwcyB3ZSBldmVu IG5lZWQgdG8gdGFrZSB0aGUgYnBjIHZhbHVlIGludG8KLQkgKiBjb25zaWRlcmF0aW9uLgotCSAq LworCWlmIChjcnRjX3N0YXRlLT5jdG0pIHsKKwkJc3RydWN0IGRybV9jb2xvcl9jdG0gKmN0bSA9 CisJCQkoc3RydWN0IGRybV9jb2xvcl9jdG0gKiljcnRjX3N0YXRlLT5jdG0tPmRhdGE7CisJCXVp bnQ2NF90IGlucHV0WzldID0geyAwLCB9OwogCi0JaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGlt aXRlZF9jb2xvcl9yYW5nZSkKLQkJY29lZmYgPSAoKDIzNSAtIDE2KSAqICgxIDw8IDEyKSAvIDI1 NSkgJiAweGZmODsgLyogMC54eHguLi4gKi8KKwkJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGlt aXRlZF9jb2xvcl9yYW5nZSkKKwkJCWN0bV9tdWx0X2J5X2xpbWl0ZWQoaW5wdXQsIGN0bS0+bWF0 cml4KTsKKwkJZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnB1dCk7IGkr KykKKwkJCQlpbnB1dFtpXSA9IGN0bS0+bWF0cml4W2ldOworCQl9CisKKwkJLyoKKwkJICogQ29u dmVydCBmaXhlZCBwb2ludCBTMzEuMzIgaW5wdXQgdG8gZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUK KwkJICogaGFyZHdhcmUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2Vm ZnMpOyBpKyspIHsKKwkJCXVpbnQ2NF90IGFic19jb2VmZiA9ICgoMVVMTCA8PCA2MykgLSAxKSAm IGlucHV0W2ldOworCisJCQkvKgorCQkJICogQ2xhbXAgaW5wdXQgdmFsdWUgdG8gbWluL21heCBz dXBwb3J0ZWQgYnkKKwkJCSAqIGhhcmR3YXJlLgorCQkJICovCisJCQlhYnNfY29lZmYgPSBjbGFt cF92YWwoYWJzX2NvZWZmLCAwLCBDVE1fQ09FRkZfNF8wIC0gMSk7CisKKwkJCS8qIHNpZ24gYml0 ICovCisJCQlpZiAoQ1RNX0NPRUZGX05FR0FUSVZFKGlucHV0W2ldKSkKKwkJCQljb2VmZnNbaV0g fD0gMSA8PCAxNTsKKworCQkJaWYgKGFic19jb2VmZiA8IENUTV9DT0VGRl8wXzEyNSkKKwkJCQlj b2VmZnNbaV0gfD0gKDMgPDwgMTIpIHwKKwkJCQkJSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZm LCAxMik7CisJCQllbHNlIGlmIChhYnNfY29lZmYgPCBDVE1fQ09FRkZfMF8yNSkKKwkJCQljb2Vm ZnNbaV0gfD0gKDIgPDwgMTIpIHwKKwkJCQkJSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZmLCAx MSk7CisJCQllbHNlIGlmIChhYnNfY29lZmYgPCBDVE1fQ09FRkZfMF81KQorCQkJCWNvZWZmc1tp XSB8PSAoMSA8PCAxMikgfAorCQkJCQlJOVhYX0NTQ19DT0VGRl9GUChhYnNfY29lZmYsIDEwKTsK KwkJCWVsc2UgaWYgKGFic19jb2VmZiA8IENUTV9DT0VGRl8xXzApCisJCQkJY29lZmZzW2ldIHw9 IEk5WFhfQ1NDX0NPRUZGX0ZQKGFic19jb2VmZiwgOSk7CisJCQllbHNlIGlmIChhYnNfY29lZmYg PCBDVE1fQ09FRkZfMl8wKQorCQkJCWNvZWZmc1tpXSB8PSAoNyA8PCAxMikgfAorCQkJCQlJOVhY X0NTQ19DT0VGRl9GUChhYnNfY29lZmYsIDgpOworCQkJZWxzZQorCQkJCWNvZWZmc1tpXSB8PSAo NiA8PCAxMikgfAorCQkJCQlJOVhYX0NTQ19DT0VGRl9GUChhYnNfY29lZmYsIDcpOworCQl9CisJ fSBlbHNlIHsKKwkJLyoKKwkJICogTG9hZCBhbiBpZGVudGlmeSBtYXRyaXggaWYgbm8gY29lZmZp Y2llbnRzIGFyZSBwcm92aWRlZC4KKwkJICoKKwkJICogVE9ETzogQ2hlY2sgd2hhdCBraW5kIG9m IHZhbHVlcyBhY3R1YWxseSBjb21lIG91dCBvZiB0aGUKKwkJICogcGlwZSB3aXRoIHRoZXNlIGNv ZWZmL3Bvc3RvZmYgdmFsdWVzIGFuZCBhZGp1c3QgdG8gZ2V0IHRoZQorCQkgKiBiZXN0IGFjY3Vy YWN5LiBQZXJoYXBzIHdlIGV2ZW4gbmVlZCB0byB0YWtlIHRoZSBicGMgdmFsdWUKKwkJICogaW50 byBjb25zaWRlcmF0aW9uLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJ aWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGltaXRlZF9jb2xvcl9yYW5nZSkKKwkJCQljb2VmZnNb aSAqIDMgKyBpXSA9CisJCQkJCUk5WFhfQ1NDX0NPRUZGX0xJTUlURURfUkFOR0U7CisJCQllbHNl CisJCQkJY29lZmZzW2kgKiAzICsgaV0gPSBJOVhYX0NTQ19DT0VGRl8xXzA7CisJCX0KKwl9CiAK LQlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX1JZX0dZKHBpcGUpLCBjb2VmZiA8PCAxNik7Ci0J STkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9CWShwaXBlKSwgMCk7CisJSTkxNV9XUklURShQSVBF X0NTQ19DT0VGRl9SWV9HWShwaXBlKSwgY29lZmZzWzBdIDw8IDE2IHwgY29lZmZzWzFdKTsKKwlJ OTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX0JZKHBpcGUpLCBjb2VmZnNbMl0gPDwgMTYpOwogCi0J STkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9SVV9HVShwaXBlKSwgY29lZmYpOwotCUk5MTVfV1JJ VEUoUElQRV9DU0NfQ09FRkZfQlUocGlwZSksIDApOworCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09F RkZfUlVfR1UocGlwZSksIGNvZWZmc1szXSA8PCAxNiB8IGNvZWZmc1s0XSk7CisJSTkxNV9XUklU RShQSVBFX0NTQ19DT0VGRl9CVShwaXBlKSwgY29lZmZzWzVdIDw8IDE2KTsKIAotCUk5MTVfV1JJ VEUoUElQRV9DU0NfQ09FRkZfUlZfR1YocGlwZSksIDApOwotCUk5MTVfV1JJVEUoUElQRV9DU0Nf Q09FRkZfQlYocGlwZSksIGNvZWZmIDw8IDE2KTsKKwlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZG X1JWX0dWKHBpcGUpLCBjb2VmZnNbNl0gPDwgMTYgfCBjb2VmZnNbN10pOworCUk5MTVfV1JJVEUo UElQRV9DU0NfQ09FRkZfQlYocGlwZSksIGNvZWZmc1s4XSA8PCAxNik7CiAKIAlJOTE1X1dSSVRF KFBJUEVfQ1NDX1BSRU9GRl9ISShwaXBlKSwgMCk7CiAJSTkxNV9XUklURShQSVBFX0NTQ19QUkVP RkZfTUUocGlwZSksIDApOwpAQCAtODUsMTMgKzIwMSwxOCBAQCBzdGF0aWMgdm9pZCBpOXh4X2xv YWRfY3NjX21hdHJpeChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAKIHZvaWQgaW50ZWxfY29sb3Jf c2V0X2NzYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7Ci0JaTl4eF9sb2FkX2NzY19tYXRyaXgo Y3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9w cml2LT5kaXNwbGF5LmxvYWRfY3NjX21hdHJpeCkKKwkJZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9j c2NfbWF0cml4KGNydGMpOwogfQogCi0vKiBMb2FkcyB0aGUgcGFsZXR0ZS9nYW1tYSB1bml0IGZv ciB0aGUgQ1JUQyB3aXRoIHRoZSBwcmVwYXJlZCB2YWx1ZXMuICovCisvKiBMb2FkcyB0aGUgbGVn YWN5IHBhbGV0dGUvZ2FtbWEgdW5pdCBmb3IgdGhlIENSVEMuICovCiBzdGF0aWMgdm9pZCBpOXh4 X2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+ c3RhdGU7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Yyk7CiAJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwpAQCAtMTA0LDE4ICsyMjUs MzMgQEAgc3RhdGljIHZvaWQgaTl4eF9sb2FkX2x1dHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQog CQkJYXNzZXJ0X3BsbF9lbmFibGVkKGRldl9wcml2LCBwaXBlKTsKIAl9CiAKLQlmb3IgKGkgPSAw OyBpIDwgMjU2OyBpKyspIHsKLQkJdWludDMyX3Qgd29yZCA9IChpbnRlbF9jcnRjLT5sdXRfcltp XSA8PCAxNikgfAotCQkJKGludGVsX2NydGMtPmx1dF9nW2ldIDw8IDgpIHwKLQkJCWludGVsX2Ny dGMtPmx1dF9iW2ldOwotCQlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXYpKQotCQkJSTkxNV9XUklU RShQQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsKLQkJZWxzZQotCQkJSTkxNV9XUklURShMR0NfUEFM RVRURShwaXBlLCBpKSwgd29yZCk7CisJaWYgKHN0YXRlLT5nYW1tYV9sdXQpIHsKKwkJc3RydWN0 IGRybV9jb2xvcl9sdXQgKmx1dCA9CisJCQkoc3RydWN0IGRybV9jb2xvcl9sdXQgKikgc3RhdGUt PmdhbW1hX2x1dC0+ZGF0YTsKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQl1aW50 MzJfdCB3b3JkID0KKwkJCQkoZHJtX2NvbG9yX2x1dF9leHRyYWN0KGx1dFtpXS5yZWQsIDgpIDw8 IDE2KSB8CisJCQkJKGRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uZ3JlZW4sIDgpIDw8IDgp IHwKKwkJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDgpOworCisJCQlpZiAo SEFTX0dNQ0hfRElTUExBWShkZXYpKQorCQkJCUk5MTVfV1JJVEUoUEFMRVRURShwaXBlLCBpKSwg d29yZCk7CisJCQllbHNlCisJCQkJSTkxNV9XUklURShMR0NfUEFMRVRURShwaXBlLCBpKSwgd29y ZCk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCXVp bnQzMl90IHdvcmQgPSAoaSA8PCAxNikgfCAoaSA8PCA4KSB8IGk7CisKKwkJCWlmIChIQVNfR01D SF9ESVNQTEFZKGRldikpCisJCQkJSTkxNV9XUklURShQQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsK KwkJCWVsc2UKKwkJCQlJOTE1X1dSSVRFKExHQ19QQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsKKwkJ fQogCX0KIH0KIAotLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxldHRlL2dhbW1hIHVuaXQgZm9yIHRo ZSBDUlRDIG9uIEhhc3dlbGwrLiAqLworLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxldHRlL2dhbW1h IHVuaXQgZm9yIHRoZSBDUlRDIG9uIEhhc3dlbGwuICovCiBzdGF0aWMgdm9pZCBoYXN3ZWxsX2xv YWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKQEAgLTE0NCw2ICsyODAsODkgQEAgc3RhdGljIHZvaWQgaGFzd2VsbF9s b2FkX2x1dHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQloc3dfZW5hYmxlX2lwcyhpbnRlbF9j cnRjKTsKIH0KIAorLyogTG9hZHMgdGhlIHBhbGV0dGUvZ2FtbWEgdW5pdCBmb3IgdGhlIENSVEMg b24gQnJvYWR3ZWxsKy4gKi8KK3N0YXRpYyB2b2lkIGJyb2Fkd2VsbF9sb2FkX2x1dHMoc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7 CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSA9IGNydGMtPnN0YXRlOworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShzdGF0ZSk7 CisJZW51bSBwaXBlIHBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOworCXVpbnQzMl90 IGksIGx1dF9zaXplID0gSU5URUxfSU5GTyhkZXYpLT5jb2xvci5kZWdhbW1hX2x1dF9zaXplOwor CisJaWYgKGNydGNfc3RhdGVfaXNfbGVnYWN5KHN0YXRlKSkgeworCQloYXN3ZWxsX2xvYWRfbHV0 cyhjcnRjKTsKKwkJcmV0dXJuOworCX0KKworCUk5MTVfV1JJVEUoUFJFQ19QQUxfSU5ERVgocGlw ZSksCisJCSAgIFBBTF9QUkVDX1NQTElUX01PREUgfCBQQUxfUFJFQ19BVVRPX0lOQ1JFTUVOVCk7 CisKKwlpZiAoc3RhdGUtPmRlZ2FtbWFfbHV0KSB7CisJCXN0cnVjdCBkcm1fY29sb3JfbHV0ICps dXQgPQorCQkJKHN0cnVjdCBkcm1fY29sb3JfbHV0ICopIHN0YXRlLT5kZWdhbW1hX2x1dC0+ZGF0 YTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQkJdWludDMyX3Qgd29y ZCA9CisJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJlZCwgMTApIDw8IDIwIHwKKwkJ CWRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uZ3JlZW4sIDEwKSA8PCAxMCB8CisJCQlkcm1f Y29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDEwKTsKKworCQkJSTkxNV9XUklURShQUkVD X1BBTF9EQVRBKHBpcGUpLCB3b3JkKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkg PCBsdXRfc2l6ZTsgaSsrKSB7CisJCQl1aW50MzJfdCB2ID0gKGkgKiAoKDEgPDwgMTApIC0gMSkp IC8gKGx1dF9zaXplIC0gMSk7CisKKwkJCUk5MTVfV1JJVEUoUFJFQ19QQUxfREFUQShwaXBlKSwK KwkJCQkgICAodiA8PCAyMCkgfCAodiA8PCAxMCkgfCB2KTsKKwkJfQorCX0KKworCWlmIChzdGF0 ZS0+Z2FtbWFfbHV0KSB7CisJCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPQorCQkJKHN0cnVj dCBkcm1fY29sb3JfbHV0ICopIHN0YXRlLT5nYW1tYV9sdXQtPmRhdGE7CisKKwkJZm9yIChpID0g MDsgaSA8IGx1dF9zaXplOyBpKyspIHsKKwkJCXVpbnQzMl90IHdvcmQgPQorCQkJKGRybV9jb2xv cl9sdXRfZXh0cmFjdChsdXRbaV0ucmVkLCAxMCkgPDwgMjApIHwKKwkJCShkcm1fY29sb3JfbHV0 X2V4dHJhY3QobHV0W2ldLmdyZWVuLCAxMCkgPDwgMTApIHwKKwkJCWRybV9jb2xvcl9sdXRfZXh0 cmFjdChsdXRbaV0uYmx1ZSwgMTApOworCisJCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0RBVEEocGlw ZSksIHdvcmQpOworCQl9CisKKwkJLyogUHJvZ3JhbSB0aGUgbWF4IHJlZ2lzdGVyIHRvIGNsYW1w IHZhbHVlcyA+IDEuMC4gKi8KKwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMCks CisJCQkgICBkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJlZCwgMTYpKTsKKwkJSTkxNV9X UklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMSksCisJCQkgICBkcm1fY29sb3JfbHV0X2V4dHJh Y3QobHV0W2ldLmdyZWVuLCAxNikpOworCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBl LCAyKSwKKwkJCSAgIGRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uYmx1ZSwgMTYpKTsKKwl9 IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQkJdWludDMyX3Qg diA9IChpICogKCgxIDw8IDEwKSAtIDEpKSAvIChsdXRfc2l6ZSAtIDEpOworCisJCQlJOTE1X1dS SVRFKFBSRUNfUEFMX0RBVEEocGlwZSksCisJCQkJICAgKHYgPDwgMjApIHwgKHYgPDwgMTApIHwg dik7CisJCX0KKworCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBlLCAwKSwgKDEgPDwg MTYpIC0gMSk7CisJCUk5MTVfV1JJVEUoUFJFQ19QQUxfR0NfTUFYKHBpcGUsIDEpLCAoMSA8PCAx NikgLSAxKTsKKwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMiksICgxIDw8IDE2 KSAtIDEpOworCX0KKworCWludGVsX3N0YXRlLT5nYW1tYV9tb2RlID0gR0FNTUFfTU9ERV9NT0RF X1NQTElUOworCUk5MTVfV1JJVEUoR0FNTUFfTU9ERShwaXBlKSwgR0FNTUFfTU9ERV9NT0RFX1NQ TElUKTsKKwlQT1NUSU5HX1JFQUQoR0FNTUFfTU9ERShwaXBlKSk7CisKKwkvKgorCSAqIFJlc2V0 IHRoZSBpbmRleCwgb3RoZXJ3aXNlIGl0IHByZXZlbnRzIHRoZSBsZWdhY3kgcGFsZXR0ZSB0byBi ZQorCSAqIHdyaXR0ZW4gcHJvcGVybHkuCisJICovCisJSTkxNV9XUklURShQUkVDX1BBTF9JTkRF WChwaXBlKSwgMCk7Cit9CisKIHZvaWQgaW50ZWxfY29sb3JfbG9hZF9sdXRzKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAt MTU2LDM5ICszNzUsNjEgQEAgdm9pZCBpbnRlbF9jb2xvcl9sb2FkX2x1dHMoc3RydWN0IGRybV9j cnRjICpjcnRjKQogCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0cyhjcnRjKTsKIH0KIAotdm9p ZCBpbnRlbF9jb2xvcl9sZWdhY3lfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2 ICpyZWQsIHUxNiAqZ3JlZW4sCi0JCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHN0YXJ0LCB1aW50 MzJfdCBzaXplKQoraW50IGludGVsX2NvbG9yX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK KwkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewotCWludCBlbmQg PSAoc3RhcnQgKyBzaXplID4gMjU2KSA/IDI1NiA6IHN0YXJ0ICsgc2l6ZSwgaTsKLQlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzaXplX3QgZ2FtbWFfbGVuZ3RoLCBkZWdhbW1h X2xlbmd0aDsKIAotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLQkJaW50ZWxfY3J0 Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gODsKLQkJaW50ZWxfY3J0Yy0+bHV0X2dbaV0gPSBncmVl bltpXSA+PiA4OwotCQlpbnRlbF9jcnRjLT5sdXRfYltpXSA9IGJsdWVbaV0gPj4gODsKLQl9CisJ ZGVnYW1tYV9sZW5ndGggPSBJTlRFTF9JTkZPKGRldiktPmNvbG9yLmRlZ2FtbWFfbHV0X3NpemUg KgorCQlzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpOworCWdhbW1hX2xlbmd0aCA9IElOVEVM X0lORk8oZGV2KS0+Y29sb3IuZ2FtbWFfbHV0X3NpemUgKgorCQlzaXplb2Yoc3RydWN0IGRybV9j b2xvcl9sdXQpOworCisJLyoKKwkgKiBXZSBhbGxvdyBib3RoIGRlZ2FtbWEgJiBnYW1tYSBsdXRz IGF0IHRoZSByaWdodCBzaXplIG9yCisJICogTlVMTC4KKwkgKi8KKwlpZiAoKCFjcnRjX3N0YXRl LT5kZWdhbW1hX2x1dCB8fAorCSAgICAgY3J0Y19zdGF0ZS0+ZGVnYW1tYV9sdXQtPmxlbmd0aCA9 PSBkZWdhbW1hX2xlbmd0aCkgJiYKKwkgICAgKCFjcnRjX3N0YXRlLT5nYW1tYV9sdXQgfHwKKwkg ICAgIGNydGNfc3RhdGUtPmdhbW1hX2x1dC0+bGVuZ3RoID09IGdhbW1hX2xlbmd0aCkpCisJCXJl dHVybiAwOworCisJLyoKKwkgKiBXZSBhbHNvIGFsbG93IG5vIGRlZ2FtbWEgbHV0IGFuZCBhIGdh bW1hIGx1dCBhdCB0aGUgbGVnYWN5CisJICogc2l6ZSAoMjU2IGVudHJpZXMpLgorCSAqLworCWlm ICghY3J0Y19zdGF0ZS0+ZGVnYW1tYV9sdXQgJiYKKwkgICAgY3J0Y19zdGF0ZS0+Z2FtbWFfbHV0 ICYmCisJICAgIGNydGNfc3RhdGUtPmdhbW1hX2x1dC0+bGVuZ3RoID09IExFR0FDWV9MVVRfTEVO R1RIKQorCQlyZXR1cm4gMDsKIAotCWludGVsX2NvbG9yX2xvYWRfbHV0cyhjcnRjKTsKKwlyZXR1 cm4gLUVJTlZBTDsKIH0KIAogdm9pZCBpbnRlbF9jb2xvcl9pbml0KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCWludCBpOwogCiAJ ZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZShjcnRjLCAyNTYpOwotCWZvciAoaSA9IDA7IGkg PCAyNTY7IGkrKykgewotCQlpbnRlbF9jcnRjLT5sdXRfcltpXSA9IGk7Ci0JCWludGVsX2NydGMt Pmx1dF9nW2ldID0gaTsKLQkJaW50ZWxfY3J0Yy0+bHV0X2JbaV0gPSBpOwotCX0KIAotCWlmIChJ U19IQVNXRUxMKGRldikgfHwKLQkgICAgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDggJiYgIUlT X0NIRVJSWVZJRVcoZGV2KSkpIHsKKwlpZiAoSVNfSEFTV0VMTChkZXYpKSB7CisJCWRldl9wcml2 LT5kaXNwbGF5LmxvYWRfY3NjX21hdHJpeCA9IGk5eHhfbG9hZF9jc2NfbWF0cml4OwogCQlkZXZf cHJpdi0+ZGlzcGxheS5sb2FkX2x1dHMgPSBoYXN3ZWxsX2xvYWRfbHV0czsKKwl9IGVsc2UgaWYg KElTX0JST0FEV0VMTChkZXYpIHx8IElTX1NLWUxBS0UoZGV2KSB8fAorCQkgICBJU19CUk9YVE9O KGRldikgfHwgSVNfS0FCWUxBS0UoZGV2KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2Nz Y19tYXRyaXggPSBpOXh4X2xvYWRfY3NjX21hdHJpeDsKKwkJZGV2X3ByaXYtPmRpc3BsYXkubG9h ZF9sdXRzID0gYnJvYWR3ZWxsX2xvYWRfbHV0czsKIAl9IGVsc2UgewogCQlkZXZfcHJpdi0+ZGlz cGxheS5sb2FkX2x1dHMgPSBpOXh4X2xvYWRfbHV0czsKIAl9CisKKwkvKiBFbmFibGUgY29sb3Ig bWFuYWdlbWVudCBzdXBwb3J0IHdoZW4gd2UgaGF2ZSBkZWdhbW1hICYgZ2FtbWEgTFVUcy4gKi8K KwlpZiAoSU5URUxfSU5GTyhkZXYpLT5jb2xvci5kZWdhbW1hX2x1dF9zaXplICE9IDAgJiYKKwkg ICAgSU5URUxfSU5GTyhkZXYpLT5jb2xvci5nYW1tYV9sdXRfc2l6ZSAhPSAwKQorCQlkcm1faGVs cGVyX2NydGNfZW5hYmxlX2NvbG9yX21nbXQoY3J0YywKKwkJCQkJSU5URUxfSU5GTyhkZXYpLT5j b2xvci5kZWdhbW1hX2x1dF9zaXplLAorCQkJCQlJTlRFTF9JTkZPKGRldiktPmNvbG9yLmdhbW1h X2x1dF9zaXplKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCAxNTRh Yzg3Li4yMjRlYzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xMTgz MCw2ICsxMTgzMCwxMiBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKIAkJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKGNydGNfc3RhdGUt PmNvbG9yX21nbXRfY2hhbmdlZCkgeworCQlyZXQgPSBpbnRlbF9jb2xvcl9jaGVjayhjcnRjLCBj cnRjX3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJcmV0ID0gMDsK IAlpZiAoZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtKSB7CiAJCXJldCA9IGRldl9w cml2LT5kaXNwbGF5LmNvbXB1dGVfcGlwZV93bShpbnRlbF9jcnRjLCBzdGF0ZSk7CkBAIC0xMTg1 MSw3ICsxMTg1Nyw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0 IGRybV9jcnRjICpjcnRjLAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9m dW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CiAJLm1vZGVfc2V0X2Jhc2VfYXRvbWljID0gaW50 ZWxfcGlwZV9zZXRfYmFzZV9hdG9taWMsCi0JLmxvYWRfbHV0ID0gaW50ZWxfY29sb3JfbG9hZF9s dXRzLAogCS5hdG9taWNfYmVnaW4gPSBpbnRlbF9iZWdpbl9jcnRjX2NvbW1pdCwKIAkuYXRvbWlj X2ZsdXNoID0gaW50ZWxfZmluaXNoX2NydGNfY29tbWl0LAogCS5hdG9taWNfY2hlY2sgPSBpbnRl bF9jcnRjX2F0b21pY19jaGVjaywKQEAgLTEzMzg2LDYgKzEzMzkxLDE4IEBAIHN0YXRpYyBpbnQg aW50ZWxfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19lbmFibGUoY3J0Yyk7CiAJCX0KIAorCQlpZiAoIW1vZGVzZXQgJiYKKwkJ ICAgIGNydGMtPnN0YXRlLT5hY3RpdmUgJiYKKwkJICAgIGNydGMtPnN0YXRlLT5jb2xvcl9tZ210 X2NoYW5nZWQpIHsKKwkJCS8qCisJCQkgKiBPbmx5IHVwZGF0ZSBjb2xvciBtYW5hZ2VtZW50IHdo ZW4gbm90IGRvaW5nCisJCQkgKiBhIG1vZGVzZXQgYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkKKwkJ CSAqIGNydGNfZW5hYmxlIGFscmVhZHkuCisJCQkgKi8KKwkJCWludGVsX2NvbG9yX3NldF9jc2Mo Y3J0Yyk7CisJCQlpbnRlbF9jb2xvcl9sb2FkX2x1dHMoY3J0Yyk7CisJCX0KKwogCQlpZiAoIW1v ZGVzZXQpCiAJCQlpbnRlbF9wcmVfcGxhbmVfdXBkYXRlKHRvX2ludGVsX2NydGNfc3RhdGUoY3J0 Y19zdGF0ZSkpOwogCkBAIC0xMzQ3Nyw4ICsxMzQ5NCw5IEBAIG91dDoKICN1bmRlZiBmb3JfZWFj aF9pbnRlbF9jcnRjX21hc2tlZAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNz IGludGVsX2NydGNfZnVuY3MgPSB7Ci0JLmdhbW1hX3NldCA9IGludGVsX2NvbG9yX2xlZ2FjeV9n YW1tYV9zZXQsCisJLmdhbW1hX3NldCA9IGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9z ZXQsCiAJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5zZXRf cHJvcGVydHkgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3NldF9wcm9wZXJ0eSwKIAkuZGVzdHJv eSA9IGludGVsX2NydGNfZGVzdHJveSwKIAkucGFnZV9mbGlwID0gaW50ZWxfY3J0Y19wYWdlX2Zs aXAsCiAJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0 ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggOGM0ODEzMS4uYmFhNmFkYiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTE2MjYsOSArMTYyNiw4IEBAIGV4dGVybiBjb25zdCBz dHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3M7CiAK IC8qIGludGVsX2NvbG9yLmMgKi8KIHZvaWQgaW50ZWxfY29sb3JfaW5pdChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOworaW50IGludGVsX2NvbG9yX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7CiB2b2lkIGludGVsX2NvbG9yX3NldF9jc2Mo c3RydWN0IGRybV9jcnRjICpjcnRjKTsKIHZvaWQgaW50ZWxfY29sb3JfbG9hZF9sdXRzKHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Ci12b2lkIGludGVsX2NvbG9yX2xlZ2FjeV9nYW1tYV9zZXQoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKLQkJCQkgIHUxNiAqYmx1 ZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IHNpemUpOwogCiAjZW5kaWYgLyogX19JTlRFTF9E UlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwppbmRleCA5N2E5MWU2Li43Nzdm OThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKQEAgLTM3OSw2ICszNzksNyBAQCBy ZXRyeToKIAkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAkJc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyOwogCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICpuZXdfY3J0YzsK KwkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CiAKIAkJZmJfY29ubiA9IGZiX2hlbHBl ci0+Y29ubmVjdG9yX2luZm9baV07CiAJCWNvbm5lY3RvciA9IGZiX2Nvbm4tPmNvbm5lY3RvcjsK QEAgLTQyMCw2ICs0MjEsMTMgQEAgcmV0cnk6CiAKIAkJbnVtX2Nvbm5lY3RvcnNfZW5hYmxlZCsr OwogCisJCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNvbm5lY3Rvci0+c3RhdGUtPmNydGMp OworCQlmb3IgKGogPSAwOyBqIDwgMjU2OyBqKyspIHsKKwkJCWludGVsX2NydGMtPmx1dF9yW2pd ID0gajsKKwkJCWludGVsX2NydGMtPmx1dF9nW2pdID0gajsKKwkJCWludGVsX2NydGMtPmx1dF9i W2pdID0gajsKKwkJfQorCiAJCW5ld19jcnRjID0gaW50ZWxfZmJfaGVscGVyX2NydGMoZmJfaGVs cGVyLCBjb25uZWN0b3ItPnN0YXRlLT5jcnRjKTsKIAogCQkvKgotLSAKMi43LjAKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=