From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v2 6/8] drm/xen-front: Introduce DRM/KMS virtual display driver Date: Tue, 13 Mar 2018 15:31:05 +0200 Message-ID: <1520947867-32514-7-git-send-email-andr2000@gmail.com> References: <1520947867-32514-1-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x243.google.com (mail-lf0-x243.google.com [IPv6:2a00:1450:4010:c07::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9BDBA6E4F0 for ; Tue, 13 Mar 2018 13:31:28 +0000 (UTC) Received: by mail-lf0-x243.google.com with SMTP id q69-v6so28761864lfi.10 for ; Tue, 13 Mar 2018 06:31:28 -0700 (PDT) In-Reply-To: <1520947867-32514-1-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, Oleksandr Andrushchenko List-Id: dri-devel@lists.freedesktop.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKSW1wbGVtZW50IGVzc2VudGlhbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGlzcGxh eSBkcml2ZXI6CiAgLSBpbnRyb2R1Y2UgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzCiAgLSBoYW5k bGUgRFJNL0tNUyBkcml2ZXIgcmVnaXN0cmF0aW9uCiAgLSByZWdpc3RlciBkcml2ZXIgb24gYmFj a2VuZCBjb25uZWN0aW9uCiAgLSByZW1vdmUgZHJpdmVyIG9uIGJhY2tlbmQgZGlzY29ubmVjdAoK SW1wbGVtZW50IGtlcm5lbCBtb2Rlc2V0aWluZy9jb25uZWN0b3IgaGFuZGxpbmcgdXNpbmcKRFJN IHNpbXBsZSBLTVMgaGVscGVyIHBpcGVsaW5lOgoKLSBpbXBsZW1lbnQgS01TIHBhcnQgb2YgdGhl IGRyaXZlciB3aXRoIHRoZSBoZWxwIG9mIERSTQogIHNpbXBsZSBwaXBlcGxpbmUgaGVscGVyIHdo aWNoIGlzIHBvc3NpYmxlIGR1ZSB0byB0aGUgZmFjdAogIHRoYXQgdGhlIHBhcmEtdmlydHVhbGl6 ZWQgZHJpdmVyIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUKICAocHJpbWFyeSkgcGxhbmU6CiAgLSBp bml0aWFsaXplIGNvbm5lY3RvcnMgYWNjb3JkaW5nIHRvIFhlblN0b3JlIGNvbmZpZ3VyYXRpb24K ICAtIGhhbmRsZSBmcmFtZSBkb25lIGV2ZW50cyBmcm9tIHRoZSBiYWNrZW5kCiAgLSBjcmVhdGUg YW5kIGRlc3Ryb3kgZnJhbWUgYnVmZmVycyBhbmQgcHJvcGFnYXRlIHRob3NlCiAgICB0byB0aGUg YmFja2VuZAogIC0gcHJvcGFnYXRlIHNldC9yZXNldCBtb2RlIGNvbmZpZ3VyYXRpb24gdG8gdGhl IGJhY2tlbmQgb24gZGlzcGxheQogICAgZW5hYmxlL2Rpc2FibGUgY2FsbGJhY2tzCiAgLSBzZW5k IHBhZ2UgZmxpcCByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kIGFuZCBpbXBsZW1lbnQgbG9naWMgZm9y CiAgICByZXBvcnRpbmcgYmFja2VuZCBJTyBlcnJvcnMgb24gcHJlcGFyZSBmYiBjYWxsYmFjawoK LSBpbXBsZW1lbnQgdmlydHVhbCBjb25uZWN0b3IgaGFuZGxpbmc6CiAgLSBzdXBwb3J0IG9ubHkg cGl4ZWwgZm9ybWF0cyBzdWl0YWJsZSBmb3Igc2luZ2xlIHBsYW5lIG1vZGVzCiAgLSBtYWtlIHN1 cmUgdGhlIGNvbm5lY3RvciBpcyBhbHdheXMgY29ubmVjdGVkCiAgLSBzdXBwb3J0IGEgc2luZ2xl IHZpZGVvIG1vZGUgYXMgcGVyIHBhcmEtdmlydHVhbGl6ZWQgZHJpdmVyCiAgICBjb25maWd1cmF0 aW9uCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2Fu ZHJ1c2hjaGVua29AZXBhbS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZSAg ICAgICAgICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQu YyAgICAgICAgIHwgMTYxICsrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVu X2RybV9mcm9udC5oICAgICAgICAgfCAgMzIgKysrKwogZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5f ZHJtX2Zyb250X2Nvbm4uYyAgICB8IDExOSArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9jb25uLmggICAgfCAgMjcgKysrCiBkcml2ZXJzL2dwdS9kcm0veGVu L3hlbl9kcm1fZnJvbnRfZHJ2LmMgICAgIHwgMTcxICsrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmggICAgIHwgIDY1ICsrKysrKysKIGRyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9ldnRjaG5sLmMgfCAgIDQgKy0KIGRyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuYyAgICAgfCAyODIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5oICAg ICB8ICAyMiArKysKIDEwIGZpbGVzIGNoYW5nZWQsIDg4MyBpbnNlcnRpb25zKCspLCAzIGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9m cm9udF9jb25uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9k cm1fZnJvbnRfY29ubi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250X2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3hlbi94ZW5fZHJtX2Zyb250X2ttcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3hlbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUKaW5kZXggNmM4Yzc1 MWYxMmVkLi5hNzg1ODY5M2JhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZQpAQCAtMSw2ICsxLDkgQEAK ICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCiAKIGRybV94ZW5fZnJv bnQtb2JqcyA6PSB4ZW5fZHJtX2Zyb250Lm8gXAorCQkgICAgICB4ZW5fZHJtX2Zyb250X2Rydi5v IFwKKwkJICAgICAgeGVuX2RybV9mcm9udF9rbXMubyBcCisJCSAgICAgIHhlbl9kcm1fZnJvbnRf Y29ubi5vIFwKIAkJICAgICAgeGVuX2RybV9mcm9udF9ldnRjaG5sLm8gXAogCQkgICAgICB4ZW5f ZHJtX2Zyb250X3NoYnVmLm8gXAogCQkgICAgICB4ZW5fZHJtX2Zyb250X2NmZy5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYyBiL2RyaXZlcnMvZ3B1L2Ry bS94ZW4veGVuX2RybV9mcm9udC5jCmluZGV4IGZhZTYzMTA2N2MzMS4uNGU1MDU5YTI4MGJhIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYwpAQCAtMTAsNiArMTAsOCBAQAogCiAjaW5j bHVkZSA8ZHJtL2RybVAuaD4KIAorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCiAjaW5j bHVkZSA8eGVuL3BsYXRmb3JtX3BjaS5oPgogI2luY2x1ZGUgPHhlbi94ZW4uaD4KICNpbmNsdWRl IDx4ZW4veGVuYnVzLmg+CkBAIC0xNywxMSArMTksMTQ5IEBACiAjaW5jbHVkZSA8eGVuL2ludGVy ZmFjZS9pby9kaXNwbGlmLmg+CiAKICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250LmgiCisjaW5jbHVk ZSAieGVuX2RybV9mcm9udF9kcnYuaCIKICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2V2dGNobmwu aCIKICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X3NoYnVmLmgiCiAKK2ludCB4ZW5fZHJtX2Zyb250 X21vZGVfc2V0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUsCisJ CXVpbnQzMl90IHgsIHVpbnQzMl90IHksIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQs CisJCXVpbnQzMl90IGJwcCwgdWludDY0X3QgZmJfY29va2llKQoreworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGJlX2RidWZfY3JlYXRlX2ludChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZv ICpmcm9udF9pbmZvLAorCQl1aW50NjRfdCBkYnVmX2Nvb2tpZSwgdWludDMyX3Qgd2lkdGgsIHVp bnQzMl90IGhlaWdodCwKKwkJdWludDMyX3QgYnBwLCB1aW50NjRfdCBzaXplLCBzdHJ1Y3QgcGFn ZSAqKnBhZ2VzLAorCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKK3sKKwlyZXR1cm4gMDsKK30KKwor aW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGVfZnJvbV9zZ3Qoc3RydWN0IHhlbl9kcm1fZnJv bnRfaW5mbyAqZnJvbnRfaW5mbywKKwkJdWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdp ZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCXVpbnQzMl90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3Ry dWN0IHNnX3RhYmxlICpzZ3QpCit7CisJcmV0dXJuIGJlX2RidWZfY3JlYXRlX2ludChmcm9udF9p bmZvLCBkYnVmX2Nvb2tpZSwgd2lkdGgsIGhlaWdodCwKKwkJCWJwcCwgc2l6ZSwgTlVMTCwgc2d0 KTsKK30KKworaW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGVfZnJvbV9wYWdlcyhzdHJ1Y3Qg eGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAorCQl1aW50NjRfdCBkYnVmX2Nvb2tpZSwg dWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJdWludDMyX3QgYnBwLCB1aW50NjRf dCBzaXplLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQoreworCXJldHVybiBiZV9kYnVmX2NyZWF0ZV9p bnQoZnJvbnRfaW5mbywgZGJ1Zl9jb29raWUsIHdpZHRoLCBoZWlnaHQsCisJCQlicHAsIHNpemUs IHBhZ2VzLCBOVUxMKTsKK30KKworaW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9kZXN0cm95KHN0cnVj dCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCisJCXVpbnQ2NF90IGRidWZfY29va2ll KQoreworCXJldHVybiAwOworfQorCitpbnQgeGVuX2RybV9mcm9udF9mYl9hdHRhY2goc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKKwkJdWludDY0X3QgZGJ1Zl9jb29raWUs IHVpbnQ2NF90IGZiX2Nvb2tpZSwgdWludDMyX3Qgd2lkdGgsCisJCXVpbnQzMl90IGhlaWdodCwg dWludDMyX3QgcGl4ZWxfZm9ybWF0KQoreworCXJldHVybiAwOworfQorCitpbnQgeGVuX2RybV9m cm9udF9mYl9kZXRhY2goc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKKwkJ dWludDY0X3QgZmJfY29va2llKQoreworCXJldHVybiAwOworfQorCitpbnQgeGVuX2RybV9mcm9u dF9wYWdlX2ZsaXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKKwkJaW50 IGNvbm5faWR4LCB1aW50NjRfdCBmYl9jb29raWUpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQg eGVuX2RybV9mcm9udF91bmxvYWQoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5m bykKK3sKKwlpZiAoZnJvbnRfaW5mby0+eGJfZGV2LT5zdGF0ZSAhPSBYZW5idXNTdGF0ZVJlY29u ZmlndXJpbmcpCisJCXJldHVybjsKKworCURSTV9ERUJVRygiQ2FuIHRyeSByZW1vdmluZyBkcml2 ZXIgbm93XG4iKTsKKwl4ZW5idXNfc3dpdGNoX3N0YXRlKGZyb250X2luZm8tPnhiX2RldiwgWGVu YnVzU3RhdGVJbml0aWFsaXNpbmcpOworfQorCitzdGF0aWMgaW50IHhlbl9kcm1fZHJ2X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJLyoKKwkgKiBUaGUgZGV2aWNlIGlz IG5vdCBzcGF3biBmcm9tIGEgZGV2aWNlIHRyZWUsIHNvIGFyY2hfc2V0dXBfZG1hX29wcworCSAq IGlzIG5vdCBjYWxsZWQsIHRodXMgbGVhdmluZyB0aGUgZGV2aWNlIHdpdGggZHVtbXkgRE1BIG9w cy4KKwkgKiBUaGlzIG1ha2VzIHRoZSBkZXZpY2UgcmV0dXJuIGVycm9yIG9uIFBSSU1FIGJ1ZmZl ciBpbXBvcnQsIHdoaWNoCisJICogaXMgbm90IGNvcnJlY3Q6IHRvIGZpeCB0aGlzIGNhbGwgb2Zf ZG1hX2NvbmZpZ3VyZSgpIHdpdGggYSBOVUxMCisJICogbm9kZSB0byBzZXQgZGVmYXVsdCBETUEg b3BzLgorCSAqLworCW9mX2RtYV9jb25maWd1cmUoJnBkZXYtPmRldiwgTlVMTCk7CisJcmV0dXJu IHhlbl9kcm1fZnJvbnRfZHJ2X3Byb2JlKHBkZXYpOworfQorCitzdGF0aWMgaW50IHhlbl9kcm1f ZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiB4ZW5f ZHJtX2Zyb250X2Rydl9yZW1vdmUocGRldik7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Vf aW5mbyB4ZW5fZHJtX2Zyb250X3BsYXRmb3JtX2luZm8gPSB7CisJLm5hbWUgPSBYRU5ESVNQTF9E UklWRVJfTkFNRSwKKwkuaWQgPSAwLAorCS5udW1fcmVzID0gMCwKKwkuZG1hX21hc2sgPSBETUFf QklUX01BU0soMzIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGVuX2Ry bV9mcm9udF9mcm9udF9pbmZvID0geworCS5wcm9iZQkJPSB4ZW5fZHJtX2Rydl9wcm9iZSwKKwku cmVtb3ZlCQk9IHhlbl9kcm1fZHJ2X3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBY RU5ESVNQTF9EUklWRVJfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgeGVuX2RybV9kcnZf ZGVpbml0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCit7CisJaWYgKCFm cm9udF9pbmZvLT5kcm1fcGRydl9yZWdpc3RlcmVkKQorCQlyZXR1cm47CisKKwlpZiAoZnJvbnRf aW5mby0+ZHJtX3BkZXYpCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGZyb250X2luZm8t PmRybV9wZGV2KTsKKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ4ZW5fZHJtX2Zyb250 X2Zyb250X2luZm8pOworCWZyb250X2luZm8tPmRybV9wZHJ2X3JlZ2lzdGVyZWQgPSBmYWxzZTsK Kwlmcm9udF9pbmZvLT5kcm1fcGRldiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgeGVuX2RybV9k cnZfaW5pdChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvKQoreworCWludCBy ZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhlbl9kcm1fZnJvbnRfZnJv bnRfaW5mbyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlmcm9udF9pbmZvLT5k cm1fcGRydl9yZWdpc3RlcmVkID0gdHJ1ZTsKKwkvKiBwYXNzIGNhcmQgY29uZmlndXJhdGlvbiB2 aWEgcGxhdGZvcm0gZGF0YSAqLworCXhlbl9kcm1fZnJvbnRfcGxhdGZvcm1faW5mby5kYXRhID0g JmZyb250X2luZm8tPmNmZzsKKwl4ZW5fZHJtX2Zyb250X3BsYXRmb3JtX2luZm8uc2l6ZV9kYXRh ID0gc2l6ZW9mKGZyb250X2luZm8tPmNmZyk7CisKKwlmcm9udF9pbmZvLT5kcm1fcGRldiA9IHBs YXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKAorCQkJJnhlbl9kcm1fZnJvbnRfcGxhdGZvcm1f aW5mbyk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGZyb250X2luZm8tPmRybV9wZGV2KSkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciAiIFhFTkRJU1BMX0RSSVZFUl9OQU1FICIgUFYg RFJNIGRyaXZlclxuIik7CisJCWZyb250X2luZm8tPmRybV9wZGV2ID0gTlVMTDsKKwkJeGVuX2Ry bV9kcnZfZGVpbml0KGZyb250X2luZm8pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKwogc3RhdGljIHZvaWQgeGVuX2Rydl9yZW1vdmVfaW50ZXJuYWwoc3RydWN0IHhl bl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbykKIHsKKwl4ZW5fZHJtX2Rydl9kZWluaXQoZnJv bnRfaW5mbyk7CiAJeGVuX2RybV9mcm9udF9ldnRjaG5sX2ZyZWVfYWxsKGZyb250X2luZm8pOwog fQogCkBAIC00NywxMyArMTg3LDI5IEBAIHN0YXRpYyBpbnQgZGlzcGxiYWNrX2luaXR3YWl0KHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCiBzdGF0aWMgaW50IGRpc3BsYmFj a19jb25uZWN0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCiB7CiAJeGVu X2RybV9mcm9udF9ldnRjaG5sX3NldF9zdGF0ZShmcm9udF9pbmZvLCBFVlRDSE5MX1NUQVRFX0NP Tk5FQ1RFRCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHhlbl9kcm1fZHJ2X2luaXQoZnJvbnRfaW5m byk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc3BsYmFja19kaXNjb25uZWN0KHN0cnVjdCB4ZW5fZHJt X2Zyb250X2luZm8gKmZyb250X2luZm8pCiB7CisJYm9vbCByZW1vdmVkID0gdHJ1ZTsKKworCWlm IChmcm9udF9pbmZvLT5kcm1fcGRldikgeworCQlpZiAoeGVuX2RybV9mcm9udF9kcnZfaXNfdXNl ZChmcm9udF9pbmZvLT5kcm1fcGRldikpIHsKKwkJCURSTV9XQVJOKCJEUk0gZHJpdmVyIHN0aWxs IGluIHVzZSwgZGVmZXJyaW5nIHJlbW92YWxcbiIpOworCQkJcmVtb3ZlZCA9IGZhbHNlOworCQl9 IGVsc2UKKwkJCXhlbl9kcnZfcmVtb3ZlX2ludGVybmFsKGZyb250X2luZm8pOworCX0KKwogCXhl bl9kcm1fZnJvbnRfZXZ0Y2hubF9zZXRfc3RhdGUoZnJvbnRfaW5mbywgRVZUQ0hOTF9TVEFURV9E SVNDT05ORUNURUQpOwotCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZnJvbnRfaW5mby0+eGJfZGV2LCBY ZW5idXNTdGF0ZUluaXRpYWxpc2luZyk7CisKKwlpZiAocmVtb3ZlZCkKKwkJeGVuYnVzX3N3aXRj aF9zdGF0ZShmcm9udF9pbmZvLT54Yl9kZXYsCisJCQkJWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcp OworCWVsc2UKKwkJeGVuYnVzX3N3aXRjaF9zdGF0ZShmcm9udF9pbmZvLT54Yl9kZXYsCisJCQkJ WGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzcGxiYWNrX2No YW5nZWQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiwKQEAgLTEzNiw2ICsyOTIsNyBAQCBz dGF0aWMgaW50IHhlbl9kcnZfcHJvYmUoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiwKIAog CWZyb250X2luZm8tPnhiX2RldiA9IHhiX2RldjsKIAlzcGluX2xvY2tfaW5pdCgmZnJvbnRfaW5m by0+aW9fbG9jayk7CisJZnJvbnRfaW5mby0+ZHJtX3BkcnZfcmVnaXN0ZXJlZCA9IGZhbHNlOwog CWRldl9zZXRfZHJ2ZGF0YSgmeGJfZGV2LT5kZXYsIGZyb250X2luZm8pOwogCXJldHVybiB4ZW5i dXNfc3dpdGNoX3N0YXRlKHhiX2RldiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpOwogfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmggYi9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaAppbmRleCA0YWRiNjEwMWM4ODkuLmQ5NjRjNGJkNGZi NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmgKQEAgLTExLDYgKzExLDggQEAKICNp Zm5kZWYgX19YRU5fRFJNX0ZST05UX0hfCiAjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9IXwogCisj aW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKwogI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRf Y2ZnLmgiCiAKICNpZm5kZWYgR1JBTlRfSU5WQUxJRF9SRUYKQEAgLTIyLDEwICsyNCwxMyBAQAog I2RlZmluZSBHUkFOVF9JTlZBTElEX1JFRgkwCiAjZW5kaWYKIAorc3RydWN0IHhlbl9kcm1fZnJv bnRfZHJtX3BpcGVsaW5lOworCiBzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvIHsKIAlzdHJ1Y3Qg eGVuYnVzX2RldmljZSAqeGJfZGV2OwogCS8qIHRvIHByb3RlY3QgZGF0YSBiZXR3ZWVuIGJhY2tl bmQgSU8gY29kZSBhbmQgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlzcGlubG9ja190IGlvX2xvY2s7 CisJYm9vbCBkcm1fcGRydl9yZWdpc3RlcmVkOwogCS8qIHZpcnR1YWwgRFJNIHBsYXRmb3JtIGRl dmljZSAqLwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRybV9wZGV2OwogCkBAIC0zNCw0ICsz OSwzMSBAQCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvIHsKIAlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9jZmcgY2ZnOwogfTsKIAoraW50IHhlbl9kcm1fZnJvbnRfbW9kZV9zZXQoc3RydWN0IHhlbl9k cm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKKwkJdWludDMyX3QgeCwgdWludDMyX3Qg eSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJdWludDMyX3QgYnBwLCB1aW50 NjRfdCBmYl9jb29raWUpOworCitpbnQgeGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZV9mcm9tX3Nn dChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAorCQl1aW50NjRfdCBkYnVm X2Nvb2tpZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJdWludDMyX3QgYnBw LCB1aW50NjRfdCBzaXplLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7CisKK2ludCB4ZW5fZHJtX2Zy b250X2RidWZfY3JlYXRlX2Zyb21fcGFnZXMoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJv bnRfaW5mbywKKwkJdWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJf dCBoZWlnaHQsCisJCXVpbnQzMl90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKipw YWdlcyk7CisKK2ludCB4ZW5fZHJtX2Zyb250X2RidWZfZGVzdHJveShzdHJ1Y3QgeGVuX2RybV9m cm9udF9pbmZvICpmcm9udF9pbmZvLAorCQl1aW50NjRfdCBkYnVmX2Nvb2tpZSk7CisKK2ludCB4 ZW5fZHJtX2Zyb250X2ZiX2F0dGFjaChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9p bmZvLAorCQl1aW50NjRfdCBkYnVmX2Nvb2tpZSwgdWludDY0X3QgZmJfY29va2llLCB1aW50MzJf dCB3aWR0aCwKKwkJdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBwaXhlbF9mb3JtYXQpOworCitp bnQgeGVuX2RybV9mcm9udF9mYl9kZXRhY2goc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJv bnRfaW5mbywKKwkJdWludDY0X3QgZmJfY29va2llKTsKKworaW50IHhlbl9kcm1fZnJvbnRfcGFn ZV9mbGlwKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCisJCWludCBjb25u X2lkeCwgdWludDY0X3QgZmJfY29va2llKTsKKwordm9pZCB4ZW5fZHJtX2Zyb250X3VubG9hZChz dHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvKTsKKwogI2VuZGlmIC8qIF9fWEVO X0RSTV9GUk9OVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2Nvbm4uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jb25uLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zODJjOGE5ZGE3ZTYKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY29ubi5j CkBAIC0wLDAgKzEsMTE5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBP UiBNSVQKKworLyoKKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgorICoKKyAqIEF1dGhvcjogT2xl a3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgor ICovCisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGNfaGVscGVyLmg+CisKKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2lu Y2x1ZGUgInhlbl9kcm1fZnJvbnRfY29ubi5oIgorI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZHJ2 LmgiCisKK3N0YXRpYyBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKgordG9feGVu X2RybV9waXBlbGluZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXJldHVy biBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxp bmUsIGNvbm4pOworfQorCitzdGF0aWMgY29uc3QgdWludDMyX3QgcGxhbmVfZm9ybWF0c1tdID0g eworCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfUkdCODg4LAorCURSTV9GT1JNQVRf WFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX1hSR0I0NDQ0LAor CURSTV9GT1JNQVRfQVJHQjQ0NDQsCisJRFJNX0ZPUk1BVF9YUkdCMTU1NSwKKwlEUk1fRk9STUFU X0FSR0IxNTU1LAorfTsKKworY29uc3QgdWludDMyX3QgKnhlbl9kcm1fZnJvbnRfY29ubl9nZXRf Zm9ybWF0cyhpbnQgKmZvcm1hdF9jb3VudCkKK3sKKwkqZm9ybWF0X2NvdW50ID0gQVJSQVlfU0la RShwbGFuZV9mb3JtYXRzKTsKKwlyZXR1cm4gcGxhbmVfZm9ybWF0czsKK30KKworc3RhdGljIGlu dCBjb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCXN0 cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4LAorCQlib29sIGZvcmNlKQoreworCWlm IChkcm1fZGV2X2lzX3VucGx1Z2dlZChjb25uZWN0b3ItPmRldikpCisJCXJldHVybiBjb25uZWN0 b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5l Y3RlZDsKK30KKworI2RlZmluZSBYRU5fRFJNX05VTV9WSURFT19NT0RFUwkJMQorI2RlZmluZSBY RU5fRFJNX0NSVENfVlJFRlJFU0hfSFoJNjAKKworc3RhdGljIGludCBjb25uZWN0b3JfZ2V0X21v ZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9CisJCQl0b194ZW5fZHJtX3BpcGVsaW5lKGNv bm5lY3Rvcik7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJc3RydWN0IHZpZGVv bW9kZSB2aWRlb21vZGU7CisJaW50IHdpZHRoLCBoZWlnaHQ7CisKKwltb2RlID0gZHJtX21vZGVf Y3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworCisJbWVt c2V0KCZ2aWRlb21vZGUsIDAsIHNpemVvZih2aWRlb21vZGUpKTsKKwl2aWRlb21vZGUuaGFjdGl2 ZSA9IHBpcGVsaW5lLT53aWR0aDsKKwl2aWRlb21vZGUudmFjdGl2ZSA9IHBpcGVsaW5lLT5oZWln aHQ7CisJd2lkdGggPSB2aWRlb21vZGUuaGFjdGl2ZSArIHZpZGVvbW9kZS5oZnJvbnRfcG9yY2gg KworCQkJdmlkZW9tb2RlLmhiYWNrX3BvcmNoICsgdmlkZW9tb2RlLmhzeW5jX2xlbjsKKwloZWln aHQgPSB2aWRlb21vZGUudmFjdGl2ZSArIHZpZGVvbW9kZS52ZnJvbnRfcG9yY2ggKworCQkJdmlk ZW9tb2RlLnZiYWNrX3BvcmNoICsgdmlkZW9tb2RlLnZzeW5jX2xlbjsKKwl2aWRlb21vZGUucGl4 ZWxjbG9jayA9IHdpZHRoICogaGVpZ2h0ICogWEVOX0RSTV9DUlRDX1ZSRUZSRVNIX0haOworCW1v ZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCB8IERSTV9NT0RFX1RZUEVfRFJJVkVS OworCisJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVvbW9kZSgmdmlkZW9tb2RlLCBtb2RlKTsK Kwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJcmV0dXJuIFhFTl9EUk1f TlVNX1ZJREVPX01PREVTOworfQorCitzdGF0aWMgaW50IGNvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQoreworCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUg PQorCQkJdG9feGVuX2RybV9waXBlbGluZShjb25uZWN0b3IpOworCisJaWYgKG1vZGUtPmhkaXNw bGF5ICE9IHBpcGVsaW5lLT53aWR0aCkKKwkJcmV0dXJuIE1PREVfRVJST1I7CisKKwlpZiAobW9k ZS0+dmRpc3BsYXkgIT0gcGlwZWxpbmUtPmhlaWdodCkKKwkJcmV0dXJuIE1PREVfRVJST1I7CisK KwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y X2hlbHBlcl9mdW5jcyBjb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBj b25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gY29ubmVjdG9yX21vZGVfdmFsaWQs CisJLmRldGVjdF9jdHggPSBjb25uZWN0b3JfZGV0ZWN0LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGNvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRy bV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2Jl X3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFu dXAsCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0 ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK2ludCB4ZW5fZHJtX2Zyb250X2Nvbm5faW5pdChz dHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8sCisJCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3Rv ciwgJmNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIGRybV9jb25uZWN0b3JfaW5p dChkcm1faW5mby0+ZHJtX2RldiwgY29ubmVjdG9yLAorCQkmY29ubmVjdG9yX2Z1bmNzLCBEUk1f TU9ERV9DT05ORUNUT1JfVklSVFVBTCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v eGVuL3hlbl9kcm1fZnJvbnRfY29ubi5oIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2Nvbm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYzOGM0 YjZkYjVkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9m cm9udF9jb25uLmgKQEAgLTAsMCArMSwyNyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgT1IgTUlUICovCisKKy8qCisgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNl CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KKyAqCisg KiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5r b0BlcGFtLmNvbT4KKyAqLworCisjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9DT05OX0hfCisjZGVm aW5lIF9fWEVOX0RSTV9GUk9OVF9DT05OX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgorCisj aW5jbHVkZSA8bGludXgvd2FpdC5oPgorCitzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbzsK KworaW50IHhlbl9kcm1fZnJvbnRfY29ubl9pbml0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9p bmZvICpkcm1faW5mbywKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisKK2Nv bnN0IHVpbnQzMl90ICp4ZW5fZHJtX2Zyb250X2Nvbm5fZ2V0X2Zvcm1hdHMoaW50ICpmb3JtYXRf Y291bnQpOworCisjZW5kaWYgLyogX19YRU5fRFJNX0ZST05UX0NPTk5fSF8gKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjg4ODdhYzA1NDYwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYwpAQCAtMCwwICsxLDE3MSBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisKKy8qCisgKiAgWGVuIHBhcmEtdmly dHVhbCBEUk0gZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0 ZW1zIEluYy4KKyAqCisgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2Fu ZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dl bS5oPgorCisjaW5jbHVkZSAieGVuX2RybV9mcm9udC5oIgorI2luY2x1ZGUgInhlbl9kcm1fZnJv bnRfY2ZnLmgiCisjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYuaCIKKyNpbmNsdWRlICJ4ZW5f ZHJtX2Zyb250X2ttcy5oIgorCitzdGF0aWMgaW50IGR1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmls ZSAqZmlscCwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9kdW1iICphcmdzKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBmcmVl X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgeGVuX2RybV9m cm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBvYmotPmRldi0+ZGV2X3ByaXZhdGU7CisKKwl4ZW5f ZHJtX2Zyb250X2RidWZfZGVzdHJveShkcm1faW5mby0+ZnJvbnRfaW5mbywKKwkJCXhlbl9kcm1f ZnJvbnRfZGJ1Zl90b19jb29raWUob2JqKSk7Cit9CisKK3ZvaWQgeGVuX2RybV9mcm9udF9vbl9m cmFtZV9kb25lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCWludCBjb25uX2lkeCwg dWludDY0X3QgZmJfY29va2llKQoreworCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpk cm1faW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHVubGlrZWx5KGNv bm5faWR4ID49IGRybV9pbmZvLT5jZmctPm51bV9jb25uZWN0b3JzKSkKKwkJcmV0dXJuOworCisJ eGVuX2RybV9mcm9udF9rbXNfb25fZnJhbWVfZG9uZSgmZHJtX2luZm8tPnBpcGVsaW5lW2Nvbm5f aWR4XSwKKwkJCWZiX2Nvb2tpZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxhc3RjbG9zZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1f aW5mbyA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwl4ZW5fZHJtX2Zyb250X3VubG9hZChkcm1faW5m by0+ZnJvbnRfaW5mbyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHhlbl9kcm1fZm9wcyA9IHsKKwkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkub3Bl biAgICAgICAgICAgPSBkcm1fb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBkcm1fcmVsZWFzZSwK KwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5j b21wYXRfaW9jdGwgICA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkucG9sbCAgICAgICAg ICAgPSBkcm1fcG9sbCwKKwkucmVhZCAgICAgICAgICAgPSBkcm1fcmVhZCwKKwkubGxzZWVrICAg ICAgICAgPSBub19sbHNlZWssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlv bnNfc3RydWN0IHhlbl9kcm1fdm1fb3BzID0geworCS5vcGVuICAgICAgICAgICA9IGRybV9nZW1f dm1fb3BlbiwKKwkuY2xvc2UgICAgICAgICAgPSBkcm1fZ2VtX3ZtX2Nsb3NlLAorfTsKKworc3Ry dWN0IGRybV9kcml2ZXIgeGVuX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyAgICAg ICAgICAgPSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfAorCQkJCSAgICAgRFJJVkVSX1BS SU1FIHwgRFJJVkVSX0FUT01JQywKKwkubGFzdGNsb3NlICAgICAgICAgICAgICAgICA9IGxhc3Rj bG9zZSwKKwkuZ2VtX3ZtX29wcyAgICAgICAgICAgICAgICA9ICZ4ZW5fZHJtX3ZtX29wcywKKwku Z2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkICA9IGZyZWVfb2JqZWN0LAorCS5wcmltZV9oYW5kbGVf dG9fZmQgICAgICAgID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2ZkX3Rv X2hhbmRsZSAgICAgICAgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKKwkuZ2VtX3ByaW1l X2ltcG9ydCAgICAgICAgICA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZXhw b3J0ICAgICAgICAgID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmR1bWJfY3JlYXRlICAgICAg ICAgICAgICAgPSBkdW1iX2NyZWF0ZSwKKwkuZm9wcyAgICAgICAgICAgICAgICAgICAgICA9ICZ4 ZW5fZHJtX2ZvcHMsCisJLm5hbWUgICAgICAgICAgICAgICAgICAgICAgPSAieGVuZHJtLWR1IiwK KwkuZGVzYyAgICAgICAgICAgICAgICAgICAgICA9ICJYZW4gUFYgRFJNIERpc3BsYXkgVW5pdCIs CisJLmRhdGUgICAgICAgICAgICAgICAgICAgICAgPSAiMjAxODAyMjEiLAorCS5tYWpvciAgICAg ICAgICAgICAgICAgICAgID0gMSwKKwkubWlub3IgICAgICAgICAgICAgICAgICAgICA9IDAsCit9 OworCitpbnQgeGVuX2RybV9mcm9udF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZyA9IGRldl9nZXRfcGxhdGRh dGEoJnBkZXYtPmRldik7CisJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZv OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCURSTV9JTkZPKCJDcmVh dGluZyAlc1xuIiwgeGVuX2RybV9kcml2ZXIuZGVzYyk7CisKKwlkcm1faW5mbyA9IGRldm1fa3ph bGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRybV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFk cm1faW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1faW5mby0+ZnJvbnRfaW5mbyA9IGNm Zy0+ZnJvbnRfaW5mbzsKKworCWRldiA9IGRybV9kZXZfYWxsb2MoJnhlbl9kcm1fZHJpdmVyLCAm cGRldi0+ZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1faW5mby0+ ZHJtX2RldiA9IGRldjsKKworCWRybV9pbmZvLT5jZmcgPSBjZmc7CisJZGV2LT5kZXZfcHJpdmF0 ZSA9IGRybV9pbmZvOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRybV9pbmZvKTsKKwor CXJldCA9IHhlbl9kcm1fZnJvbnRfa21zX2luaXQoZHJtX2luZm8pOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBEUk0vS01TLCByZXQgJWRcbiIsIHJldCk7 CisJCWdvdG8gZmFpbF9tb2Rlc2V0OworCX0KKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZGV2 LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CisKKwlEUk1fSU5GTygiSW5p dGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWRcbiIsCisJCQl4ZW5fZHJtX2RyaXZl ci5uYW1lLCB4ZW5fZHJtX2RyaXZlci5tYWpvciwKKwkJCXhlbl9kcm1fZHJpdmVyLm1pbm9yLCB4 ZW5fZHJtX2RyaXZlci5wYXRjaGxldmVsLAorCQkJeGVuX2RybV9kcml2ZXIuZGF0ZSwgZGV2LT5w cmltYXJ5LT5pbmRleCk7CisKKwlyZXR1cm4gMDsKKworZmFpbF9yZWdpc3RlcjoKKwlkcm1fZGV2 X3VucmVnaXN0ZXIoZGV2KTsKK2ZhaWxfbW9kZXNldDoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51 cChkZXYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB4ZW5fZHJtX2Zyb250X2Rydl9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1faW5mbyAqZHJtX2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gZHJtX2luZm8tPmRybV9kZXY7CisKKwlpZiAoZGV2KSB7CisJCWRy bV9kZXZfdW5yZWdpc3RlcihkZXYpOworCQlkcm1fYXRvbWljX2hlbHBlcl9zaHV0ZG93bihkZXYp OworCQlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOworCQlkcm1fZGV2X3VucmVmKGRldik7 CisJfQorCXJldHVybiAwOworfQorCitib29sIHhlbl9kcm1fZnJvbnRfZHJ2X2lzX3VzZWQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1f aW5mbyAqZHJtX2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2OworCisJaWYgKCFkcm1faW5mbykKKwkJcmV0dXJuIGZhbHNlOworCisJZGV2 ID0gZHJtX2luZm8tPmRybV9kZXY7CisJaWYgKCFkZXYpCisJCXJldHVybiBmYWxzZTsKKworCS8q CisJICogRklYTUU6IHRoZSBjb2RlIGJlbG93IG11c3QgYmUgcHJvdGVjdGVkIGJ5IGRybV9nbG9i YWxfbXV0ZXgsCisJICogYnV0IGl0IGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHVzLiBBbnl3YXlzIHRo ZXJlIGlzIGEgcmFjZSBjb25kaXRpb24sCisJICogYnV0IHdlIHdpbGwgcmUtdHJ5LgorCSAqLwor CXJldHVybiBkZXYtPm9wZW5fY291bnQgIT0gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNm MzUxN2I2MTk3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9kcnYuaApAQCAtMCwwICsxLDY1IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQgKi8KKworLyoKKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZp Y2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgorICoK KyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hl bmtvQGVwYW0uY29tPgorICovCisKKyNpZm5kZWYgX19YRU5fRFJNX0ZST05UX0RSVl9IXworI2Rl ZmluZSBfX1hFTl9EUk1fRlJPTlRfRFJWX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KKworI2luY2x1ZGUgInhlbl9kcm1f ZnJvbnQuaCIKKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2NmZy5oIgorI2luY2x1ZGUgInhlbl9k cm1fZnJvbnRfY29ubi5oIgorCitzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgewor CXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5mbzsKKworCWludCBpbmRleDsK KworCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSBwaXBlOworCisJc3RydWN0IGRybV9j b25uZWN0b3IgY29ubjsKKwkvKiBUaGVzZSBhcmUgb25seSBmb3IgY29ubmVjdG9yIG1vZGUgY2hl Y2tpbmcgKi8KKwlpbnQgd2lkdGgsIGhlaWdodDsKKworCXN0cnVjdCBkcm1fcGVuZGluZ192Ymxh bmtfZXZlbnQgKnBlbmRpbmdfZXZlbnQ7Cit9OworCitzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1f aW5mbyB7CisJc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbzsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtX2RldjsKKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZzsKKwor CXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSBwaXBlbGluZVtYRU5fRFJNX0ZST05U X01BWF9DUlRDU107Cit9OworCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHhlbl9kcm1fZnJvbnRf ZmJfdG9fY29va2llKAorCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlyZXR1cm4g KHVpbnQ2NF90KWZiOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHhlbl9kcm1fZnJvbnRf ZGJ1Zl90b19jb29raWUoCisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKK3sKKwly ZXR1cm4gKHVpbnQ2NF90KWdlbV9vYmo7Cit9CisKK2ludCB4ZW5fZHJtX2Zyb250X2Rydl9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKworaW50IHhlbl9kcm1fZnJvbnRfZHJ2 X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKworYm9vbCB4ZW5fZHJtX2Zy b250X2Rydl9pc191c2VkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCit2b2lkIHhl bl9kcm1fZnJvbnRfb25fZnJhbWVfZG9uZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAor CQlpbnQgY29ubl9pZHgsIHVpbnQ2NF90IGZiX2Nvb2tpZSk7CisKKyNlbmRpZiAvKiBfX1hFTl9E Uk1fRlJPTlRfRFJWX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVu X2RybV9mcm9udF9ldnRjaG5sLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRf ZXZ0Y2hubC5jCmluZGV4IGZkOTI4OWE2YTFjOC4uMjI4YjlmZmU4ZmQ4IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZXZ0Y2hubC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9ldnRjaG5sLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNp bmNsdWRlIDx4ZW4vZ3JhbnRfdGFibGUuaD4KIAogI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIK KyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Rydi5oIgogI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRf ZXZ0Y2hubC5oIgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZXZ0Y2hubF9pbnRlcnJ1cHRfY3RybChp bnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0xMDUsNyArMTA2LDggQEAgc3RhdGljIGlycXJldHVy bl90IGV2dGNobmxfaW50ZXJydXB0X2V2dChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiAKIAkJc3dp dGNoIChldmVudC0+dHlwZSkgewogCQljYXNlIFhFTkRJU1BMX0VWVF9QR19GTElQOgotCQkJLyog cGxhY2Vob2xkZXIgKi8KKwkJCXhlbl9kcm1fZnJvbnRfb25fZnJhbWVfZG9uZShmcm9udF9pbmZv LT5kcm1fcGRldiwKKwkJCQlldnRjaG5sLT5pbmRleCwgZXZlbnQtPm9wLnBnX2ZsaXAuZmJfY29v a2llKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2ttcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDY4OTk1YjZi ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2ttcy5jCkBAIC0wLDAgKzEsMjgyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCBPUiBNSVQKKworLyoKKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKKyAqCisg KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgorICoKKyAqIEF1dGhv cjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0u Y29tPgorICovCisKKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2ttcy5oIgorCisjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+CisKKyNpbmNsdWRlICJ4ZW5fZHJtX2Zy b250LmgiCisjaW5jbHVkZSAieGVuX2RybV9mcm9udF9jb25uLmgiCisjaW5jbHVkZSAieGVuX2Ry bV9mcm9udF9kcnYuaCIKKworc3RhdGljIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGlu ZSAqCit0b194ZW5fZHJtX3BpcGVsaW5lKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAq cGlwZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBpcGUsIHN0cnVjdCB4ZW5fZHJtX2Zyb250 X2RybV9waXBlbGluZSwgcGlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZiX2Rlc3Ryb3koc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8g KmRybV9pbmZvID0gZmItPmRldi0+ZGV2X3ByaXZhdGU7CisKKwl4ZW5fZHJtX2Zyb250X2ZiX2Rl dGFjaChkcm1faW5mby0+ZnJvbnRfaW5mbywKKwkJCXhlbl9kcm1fZnJvbnRfZmJfdG9fY29va2ll KGZiKSk7CisJZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1f ZnJhbWVidWZmZXJfZnVuY3MgZmJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBmYl9kZXN0cm95LAor fTsKKworc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiX2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsIGNvbnN0IHN0cnVjdCBkcm1f bW9kZV9mYl9jbWQyICptb2RlX2NtZCkKK3sKKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5m byAqZHJtX2luZm8gPSBkZXYtPmRldl9wcml2YXRlOworCXN0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmo7CisJaW50IHJldDsK KworCWZiID0gZHJtX2dlbV9mYl9jcmVhdGVfd2l0aF9mdW5jcyhkZXYsIGZpbHAsIG1vZGVfY21k LCAmZmJfZnVuY3MpOworCWlmIChJU19FUlJfT1JfTlVMTChmYikpCisJCXJldHVybiBmYjsKKwor CWdlbV9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlscCwgbW9kZV9jbWQtPmhhbmRsZXNb MF0pOworCWlmICghZ2VtX29iaikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb29rdXAgR0VN IG9iamVjdFxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW1fb2JqKTsKKworCXJldCA9IHhlbl9k cm1fZnJvbnRfZmJfYXR0YWNoKAorCQkJZHJtX2luZm8tPmZyb250X2luZm8sCisJCQl4ZW5fZHJt X2Zyb250X2RidWZfdG9fY29va2llKGdlbV9vYmopLAorCQkJeGVuX2RybV9mcm9udF9mYl90b19j b29raWUoZmIpLAorCQkJZmItPndpZHRoLCBmYi0+aGVpZ2h0LCBmYi0+Zm9ybWF0LT5mb3JtYXQp OworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiQmFjayBmYWlsZWQgdG8gYXR0YWNoIEZC ICVwOiAlZFxuIiwgZmIsIHJldCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gZmI7CisK K2ZhaWw6CisJZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtb2RlX2NvbmZp Z19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gZmJfY3JlYXRlLAorCS5hdG9taWNfY2hlY2sgPSBk cm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVs cGVyX2NvbW1pdCwKK307CisKK3ZvaWQgeGVuX2RybV9mcm9udF9rbXNfc2VuZF9wZW5kaW5nX2V2 ZW50KAorCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5lKQorewor CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZwaXBlbGluZS0+cGlwZS5jcnRjOworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAocGlwZWxpbmUt PnBlbmRpbmdfZXZlbnQpCisJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIHBpcGVs aW5lLT5wZW5kaW5nX2V2ZW50KTsKKwlwaXBlbGluZS0+cGVuZGluZ19ldmVudCA9IE5VTEw7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKK3N0 YXRpYyB2b2lkIGRpc3BsYXlfZW5hYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAq cGlwZSwKKwkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCB4 ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUgPQorCQkJdG9feGVuX2RybV9waXBl bGluZShwaXBlKTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsKKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBpcGUtPnBsYW5lLnN0YXRlLT5mYjsKKwlpbnQgcmV0 OworCisJcmV0ID0geGVuX2RybV9mcm9udF9tb2RlX3NldChwaXBlbGluZSwKKwkJCWNydGMtPngs IGNydGMtPnksIGZiLT53aWR0aCwgZmItPmhlaWdodCwKKwkJCWZiLT5mb3JtYXQtPmNwcFswXSAq IDgsCisJCQl4ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZShmYikpOworCisJaWYgKHJldCkKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGRpc3BsYXk6ICVkXG4iLCByZXQpOworfQorCitz dGF0aWMgdm9pZCBkaXNwbGF5X2Rpc2FibGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBl ICpwaXBlKQoreworCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUg PQorCQkJdG9feGVuX2RybV9waXBlbGluZShwaXBlKTsKKwlpbnQgcmV0OworCisJcmV0ID0geGVu X2RybV9mcm9udF9tb2RlX3NldChwaXBlbGluZSwgMCwgMCwgMCwgMCwgMCwKKwkJCXhlbl9kcm1f ZnJvbnRfZmJfdG9fY29va2llKE5VTEwpKTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBkaXNhYmxlIGRpc3BsYXk6ICVkXG4iLCByZXQpOworCisJLyogcmVsZWFzZSBzdGFsbGVk IGV2ZW50IGlmIGFueSAqLworCXhlbl9kcm1fZnJvbnRfa21zX3NlbmRfcGVuZGluZ19ldmVudChw aXBlbGluZSk7Cit9CisKK3ZvaWQgeGVuX2RybV9mcm9udF9rbXNfb25fZnJhbWVfZG9uZSgKKwkJ c3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKKwkJdWludDY0X3Qg ZmJfY29va2llKQoreworCXhlbl9kcm1fZnJvbnRfa21zX3NlbmRfcGVuZGluZ19ldmVudChwaXBl bGluZSk7Cit9CisKK3N0YXRpYyBib29sIGRpc3BsYXlfc2VuZF9wYWdlX2ZsaXAoc3RydWN0IGRy bV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpv bGRfcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUg PSBkcm1fYXRvbWljX2dldF9uZXdfcGxhbmVfc3RhdGUoCisJCQlvbGRfcGxhbmVfc3RhdGUtPnN0 YXRlLCAmcGlwZS0+cGxhbmUpOworCisJLyoKKwkgKiBJZiBvbGRfcGxhbmVfc3RhdGUtPmZiIGlz IE5VTEwgYW5kIHBsYW5lX3N0YXRlLT5mYiBpcyBub3QsCisJICogdGhlbiB0aGlzIGlzIGFuIGF0 b21pYyBjb21taXQgd2hpY2ggd2lsbCBlbmFibGUgZGlzcGxheS4KKwkgKiBJZiBvbGRfcGxhbmVf c3RhdGUtPmZiIGlzIG5vdCBOVUxMIGFuZCBwbGFuZV9zdGF0ZS0+ZmIgaXMsCisJICogdGhlbiB0 aGlzIGlzIGFuIGF0b21pYyBjb21taXQgd2hpY2ggd2lsbCBkaXNhYmxlIGRpc3BsYXkuCisJICog SWdub3JlIHRoZXNlIGFuZCBkbyBub3Qgc2VuZCBwYWdlIGZsaXAgYXMgdGhpcyBmcmFtZWJ1ZmZl ciB3aWxsIGJlCisJICogc2VudCB0byB0aGUgYmFja2VuZCBhcyBhIHBhcnQgb2YgZGlzcGxheV9z ZXRfY29uZmlnIGNhbGwuCisJICovCisJaWYgKG9sZF9wbGFuZV9zdGF0ZS0+ZmIgJiYgcGxhbmVf c3RhdGUtPmZiKSB7CisJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxp bmUgPQorCQkJCXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7CisJCXN0cnVjdCB4ZW5fZHJtX2Zy b250X2RybV9pbmZvICpkcm1faW5mbyA9IHBpcGVsaW5lLT5kcm1faW5mbzsKKwkJaW50IHJldDsK KworCQlyZXQgPSB4ZW5fZHJtX2Zyb250X3BhZ2VfZmxpcChkcm1faW5mby0+ZnJvbnRfaW5mbywK KwkJCQlwaXBlbGluZS0+aW5kZXgsCisJCQkJeGVuX2RybV9mcm9udF9mYl90b19jb29raWUocGxh bmVfc3RhdGUtPmZiKSk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIHNl bmQgcGFnZSBmbGlwIHJlcXVlc3QgdG8gYmFja2VuZDogJWRcbiIsIHJldCk7CisKKwkJCS8qCisJ CQkgKiBSZXBvcnQgdGhlIGZsaXAgbm90IGhhbmRsZWQsIHNvIHBlbmRpbmcgZXZlbnQgaXMKKwkJ CSAqIHNlbnQsIHVuYmxvY2tpbmcgdXNlci1zcGFjZS4KKwkJCSAqLworCQkJcmV0dXJuIGZhbHNl OworCQl9CisJCS8qCisJCSAqIFNpZ25hbCB0aGF0IHBhZ2UgZmxpcCB3YXMgaGFuZGxlZCwgcGVu ZGluZyBldmVudCB3aWxsIGJlIHNlbnQKKwkJICogb24gZnJhbWUgZG9uZSBldmVudCBmcm9tIHRo ZSBiYWNrZW5kLgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCitzdGF0aWMgaW50IGRpc3BsYXlfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNw bGF5X3BpcGUgKnBpcGUsCisJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQor eworCXJldHVybiBkcm1fZ2VtX2ZiX3ByZXBhcmVfZmIoJnBpcGUtPnBsYW5lLCBwbGFuZV9zdGF0 ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfdXBkYXRlKHN0cnVjdCBkcm1fc2ltcGxlX2Rp c3BsYXlfcGlwZSAqcGlwZSwKKwkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0 YXRlKQoreworCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUgPQor CQkJdG9feGVuX2RybV9waXBlbGluZShwaXBlKTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAm cGlwZS0+Y3J0YzsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKKwor CWV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50OworCWlmIChldmVudCkgeworCQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCVdB Uk5fT04ocGlwZWxpbmUtPnBlbmRpbmdfZXZlbnQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZk ZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKKwor CQlwaXBlbGluZS0+cGVuZGluZ19ldmVudCA9IGV2ZW50OworCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKworCX0KKwkvKgorCSAqIFNlbmQgcGFnZSBm bGlwIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQgKmFmdGVyKiB3ZSBoYXZlIGV2ZW50IGNhY2hlZAor CSAqIGFib3ZlLCBzbyBvbiBwYWdlIGZsaXAgZG9uZSBldmVudCBmcm9tIHRoZSBiYWNrZW5kIHdl IGNhbgorCSAqIGRlbGl2ZXIgaXQgYW5kIHRoZXJlIGlzIG5vIHJhY2UgY29uZGl0aW9uIGJldHdl ZW4gdGhpcyBjb2RlIGFuZAorCSAqIGV2ZW50IGZyb20gdGhlIGJhY2tlbmQuCisJICogSWYgdGhp cyBpcyBub3QgYSBwYWdlIGZsaXAsIGUuZy4gbm8gZmxpcCBkb25lIGV2ZW50IGZyb20gdGhlIGJh Y2tlbmQKKwkgKiBpcyBleHBlY3RlZCwgdGhlbiBzZW5kIG5vdy4KKwkgKi8KKwlpZiAoIWRpc3Bs YXlfc2VuZF9wYWdlX2ZsaXAocGlwZSwgb2xkX3BsYW5lX3N0YXRlKSkKKwkJeGVuX2RybV9mcm9u dF9rbXNfc2VuZF9wZW5kaW5nX2V2ZW50KHBpcGVsaW5lKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBkaXNwbGF5X2Z1bmNzID0geworCS5l bmFibGUgPSBkaXNwbGF5X2VuYWJsZSwKKwkuZGlzYWJsZSA9IGRpc3BsYXlfZGlzYWJsZSwKKwku cHJlcGFyZV9mYiA9IGRpc3BsYXlfcHJlcGFyZV9mYiwKKwkudXBkYXRlID0gZGlzcGxheV91cGRh dGUsCit9OworCitzdGF0aWMgaW50IGRpc3BsYXlfcGlwZV9pbml0KHN0cnVjdCB4ZW5fZHJtX2Zy b250X2RybV9pbmZvICpkcm1faW5mbywKKwkJaW50IGluZGV4LCBzdHJ1Y3QgeGVuX2RybV9mcm9u dF9jZmdfY29ubmVjdG9yICpjZmcsCisJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGlu ZSAqcGlwZWxpbmUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRybV9pbmZvLT5kcm1f ZGV2OworCWNvbnN0IHVpbnQzMl90ICpmb3JtYXRzOworCWludCBmb3JtYXRfY291bnQ7CisJaW50 IHJldDsKKworCXBpcGVsaW5lLT5kcm1faW5mbyA9IGRybV9pbmZvOworCXBpcGVsaW5lLT5pbmRl eCA9IGluZGV4OworCXBpcGVsaW5lLT5oZWlnaHQgPSBjZmctPmhlaWdodDsKKwlwaXBlbGluZS0+ d2lkdGggPSBjZmctPndpZHRoOworCisJcmV0ID0geGVuX2RybV9mcm9udF9jb25uX2luaXQoZHJt X2luZm8sICZwaXBlbGluZS0+Y29ubik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZv cm1hdHMgPSB4ZW5fZHJtX2Zyb250X2Nvbm5fZ2V0X2Zvcm1hdHMoJmZvcm1hdF9jb3VudCk7CisK KwlyZXR1cm4gZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfaW5pdChkZXYsICZwaXBlbGluZS0+cGlw ZSwKKwkJCSZkaXNwbGF5X2Z1bmNzLCBmb3JtYXRzLCBmb3JtYXRfY291bnQsCisJCQlOVUxMLCAm cGlwZWxpbmUtPmNvbm4pOworfQorCitpbnQgeGVuX2RybV9mcm9udF9rbXNfaW5pdChzdHJ1Y3Qg eGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8pCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGRybV9pbmZvLT5kcm1fZGV2OworCWludCBpLCByZXQ7CisKKwlkcm1fbW9kZV9jb25m aWdfaW5pdChkZXYpOworCisJZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSAwOworCWRldi0+ bW9kZV9jb25maWcubWluX2hlaWdodCA9IDA7CisJZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgg PSA0MDk1OworCWRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDIwNDc7CisJZGV2LT5tb2Rl X2NvbmZpZy5mdW5jcyA9ICZtb2RlX2NvbmZpZ19mdW5jczsKKworCWZvciAoaSA9IDA7IGkgPCBk cm1faW5mby0+Y2ZnLT5udW1fY29ubmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCB4ZW5fZHJtX2Zy b250X2NmZ19jb25uZWN0b3IgKmNmZyA9CisJCQkJJmRybV9pbmZvLT5jZmctPmNvbm5lY3RvcnNb aV07CisJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUgPQorCQkJ CSZkcm1faW5mby0+cGlwZWxpbmVbaV07CisKKwkJcmV0ID0gZGlzcGxheV9waXBlX2luaXQoZHJt X2luZm8sIGksIGNmZywgcGlwZWxpbmUpOworCQlpZiAocmV0KSB7CisJCQlkcm1fbW9kZV9jb25m aWdfY2xlYW51cChkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWRybV9tb2RlX2Nv bmZpZ19yZXNldChkZXYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2ttcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzRh MmRiM2Q2ODdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2ttcy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wIE9SIE1JVCAqLworCisvKgorICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmlj ZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCisgKgor ICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVu a29AZXBhbS5jb20+CisgKi8KKworI2lmbmRlZiBfX1hFTl9EUk1fRlJPTlRfS01TX0hfCisjZGVm aW5lIF9fWEVOX0RSTV9GUk9OVF9LTVNfSF8KKworI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZHJ2 LmgiCisKK2ludCB4ZW5fZHJtX2Zyb250X2ttc19pbml0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2Ry bV9pbmZvICpkcm1faW5mbyk7CisKK3ZvaWQgeGVuX2RybV9mcm9udF9rbXNfb25fZnJhbWVfZG9u ZSgKKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKKwkJdWlu dDY0X3QgZmJfY29va2llKTsKKworI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9LTVNfSF8gKi8K LS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752830AbeCMNcN (ORCPT ); Tue, 13 Mar 2018 09:32:13 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:33520 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933007AbeCMNb2 (ORCPT ); Tue, 13 Mar 2018 09:31:28 -0400 X-Google-Smtp-Source: AG47ELtddBVPkeYzqEZY4F/BKpX1jAqLFEg2edUfljy2loh7rUXUKR7CZiKflJfQ3S4eWRBIRQXL9w== From: Oleksandr Andrushchenko To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, Oleksandr Andrushchenko Subject: [PATCH v2 6/8] drm/xen-front: Introduce DRM/KMS virtual display driver Date: Tue, 13 Mar 2018 15:31:05 +0200 Message-Id: <1520947867-32514-7-git-send-email-andr2000@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1520947867-32514-1-git-send-email-andr2000@gmail.com> References: <1520947867-32514-1-git-send-email-andr2000@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Oleksandr Andrushchenko Implement essential initialization of the display driver: - introduce required data structures - handle DRM/KMS driver registration - register driver on backend connection - remove driver on backend disconnect Implement kernel modesetiing/connector handling using DRM simple KMS helper pipeline: - implement KMS part of the driver with the help of DRM simple pipepline helper which is possible due to the fact that the para-virtualized driver only supports a single (primary) plane: - initialize connectors according to XenStore configuration - handle frame done events from the backend - create and destroy frame buffers and propagate those to the backend - propagate set/reset mode configuration to the backend on display enable/disable callbacks - send page flip request to the backend and implement logic for reporting backend IO errors on prepare fb callback - implement virtual connector handling: - support only pixel formats suitable for single plane modes - make sure the connector is always connected - support a single video mode as per para-virtualized driver configuration Signed-off-by: Oleksandr Andrushchenko --- drivers/gpu/drm/xen/Makefile | 3 + drivers/gpu/drm/xen/xen_drm_front.c | 161 +++++++++++++++- drivers/gpu/drm/xen/xen_drm_front.h | 32 ++++ drivers/gpu/drm/xen/xen_drm_front_conn.c | 119 ++++++++++++ drivers/gpu/drm/xen/xen_drm_front_conn.h | 27 +++ drivers/gpu/drm/xen/xen_drm_front_drv.c | 171 +++++++++++++++++ drivers/gpu/drm/xen/xen_drm_front_drv.h | 65 +++++++ drivers/gpu/drm/xen/xen_drm_front_evtchnl.c | 4 +- drivers/gpu/drm/xen/xen_drm_front_kms.c | 282 ++++++++++++++++++++++++++++ drivers/gpu/drm/xen/xen_drm_front_kms.h | 22 +++ 10 files changed, 883 insertions(+), 3 deletions(-) create mode 100644 drivers/gpu/drm/xen/xen_drm_front_conn.c create mode 100644 drivers/gpu/drm/xen/xen_drm_front_conn.h create mode 100644 drivers/gpu/drm/xen/xen_drm_front_drv.c create mode 100644 drivers/gpu/drm/xen/xen_drm_front_drv.h create mode 100644 drivers/gpu/drm/xen/xen_drm_front_kms.c create mode 100644 drivers/gpu/drm/xen/xen_drm_front_kms.h diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile index 6c8c751f12ed..a7858693baae 100644 --- a/drivers/gpu/drm/xen/Makefile +++ b/drivers/gpu/drm/xen/Makefile @@ -1,6 +1,9 @@ # SPDX-License-Identifier: GPL-2.0 OR MIT drm_xen_front-objs := xen_drm_front.o \ + xen_drm_front_drv.o \ + xen_drm_front_kms.o \ + xen_drm_front_conn.o \ xen_drm_front_evtchnl.o \ xen_drm_front_shbuf.o \ xen_drm_front_cfg.o diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c index fae631067c31..4e5059a280ba 100644 --- a/drivers/gpu/drm/xen/xen_drm_front.c +++ b/drivers/gpu/drm/xen/xen_drm_front.c @@ -10,6 +10,8 @@ #include +#include + #include #include #include @@ -17,11 +19,149 @@ #include #include "xen_drm_front.h" +#include "xen_drm_front_drv.h" #include "xen_drm_front_evtchnl.h" #include "xen_drm_front_shbuf.h" +int xen_drm_front_mode_set(struct xen_drm_front_drm_pipeline *pipeline, + uint32_t x, uint32_t y, uint32_t width, uint32_t height, + uint32_t bpp, uint64_t fb_cookie) +{ + return 0; +} + +static int be_dbuf_create_int(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie, uint32_t width, uint32_t height, + uint32_t bpp, uint64_t size, struct page **pages, + struct sg_table *sgt) +{ + return 0; +} + +int xen_drm_front_dbuf_create_from_sgt(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie, uint32_t width, uint32_t height, + uint32_t bpp, uint64_t size, struct sg_table *sgt) +{ + return be_dbuf_create_int(front_info, dbuf_cookie, width, height, + bpp, size, NULL, sgt); +} + +int xen_drm_front_dbuf_create_from_pages(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie, uint32_t width, uint32_t height, + uint32_t bpp, uint64_t size, struct page **pages) +{ + return be_dbuf_create_int(front_info, dbuf_cookie, width, height, + bpp, size, pages, NULL); +} + +int xen_drm_front_dbuf_destroy(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie) +{ + return 0; +} + +int xen_drm_front_fb_attach(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie, uint64_t fb_cookie, uint32_t width, + uint32_t height, uint32_t pixel_format) +{ + return 0; +} + +int xen_drm_front_fb_detach(struct xen_drm_front_info *front_info, + uint64_t fb_cookie) +{ + return 0; +} + +int xen_drm_front_page_flip(struct xen_drm_front_info *front_info, + int conn_idx, uint64_t fb_cookie) +{ + return 0; +} + +void xen_drm_front_unload(struct xen_drm_front_info *front_info) +{ + if (front_info->xb_dev->state != XenbusStateReconfiguring) + return; + + DRM_DEBUG("Can try removing driver now\n"); + xenbus_switch_state(front_info->xb_dev, XenbusStateInitialising); +} + +static int xen_drm_drv_probe(struct platform_device *pdev) +{ + /* + * The device is not spawn from a device tree, so arch_setup_dma_ops + * is not called, thus leaving the device with dummy DMA ops. + * This makes the device return error on PRIME buffer import, which + * is not correct: to fix this call of_dma_configure() with a NULL + * node to set default DMA ops. + */ + of_dma_configure(&pdev->dev, NULL); + return xen_drm_front_drv_probe(pdev); +} + +static int xen_drm_drv_remove(struct platform_device *pdev) +{ + return xen_drm_front_drv_remove(pdev); +} + +struct platform_device_info xen_drm_front_platform_info = { + .name = XENDISPL_DRIVER_NAME, + .id = 0, + .num_res = 0, + .dma_mask = DMA_BIT_MASK(32), +}; + +static struct platform_driver xen_drm_front_front_info = { + .probe = xen_drm_drv_probe, + .remove = xen_drm_drv_remove, + .driver = { + .name = XENDISPL_DRIVER_NAME, + }, +}; + +static void xen_drm_drv_deinit(struct xen_drm_front_info *front_info) +{ + if (!front_info->drm_pdrv_registered) + return; + + if (front_info->drm_pdev) + platform_device_unregister(front_info->drm_pdev); + + platform_driver_unregister(&xen_drm_front_front_info); + front_info->drm_pdrv_registered = false; + front_info->drm_pdev = NULL; +} + +static int xen_drm_drv_init(struct xen_drm_front_info *front_info) +{ + int ret; + + ret = platform_driver_register(&xen_drm_front_front_info); + if (ret < 0) + return ret; + + front_info->drm_pdrv_registered = true; + /* pass card configuration via platform data */ + xen_drm_front_platform_info.data = &front_info->cfg; + xen_drm_front_platform_info.size_data = sizeof(front_info->cfg); + + front_info->drm_pdev = platform_device_register_full( + &xen_drm_front_platform_info); + if (IS_ERR_OR_NULL(front_info->drm_pdev)) { + DRM_ERROR("Failed to register " XENDISPL_DRIVER_NAME " PV DRM driver\n"); + front_info->drm_pdev = NULL; + xen_drm_drv_deinit(front_info); + return -ENODEV; + } + + return 0; +} + static void xen_drv_remove_internal(struct xen_drm_front_info *front_info) { + xen_drm_drv_deinit(front_info); xen_drm_front_evtchnl_free_all(front_info); } @@ -47,13 +187,29 @@ static int displback_initwait(struct xen_drm_front_info *front_info) static int displback_connect(struct xen_drm_front_info *front_info) { xen_drm_front_evtchnl_set_state(front_info, EVTCHNL_STATE_CONNECTED); - return 0; + return xen_drm_drv_init(front_info); } static void displback_disconnect(struct xen_drm_front_info *front_info) { + bool removed = true; + + if (front_info->drm_pdev) { + if (xen_drm_front_drv_is_used(front_info->drm_pdev)) { + DRM_WARN("DRM driver still in use, deferring removal\n"); + removed = false; + } else + xen_drv_remove_internal(front_info); + } + xen_drm_front_evtchnl_set_state(front_info, EVTCHNL_STATE_DISCONNECTED); - xenbus_switch_state(front_info->xb_dev, XenbusStateInitialising); + + if (removed) + xenbus_switch_state(front_info->xb_dev, + XenbusStateInitialising); + else + xenbus_switch_state(front_info->xb_dev, + XenbusStateReconfiguring); } static void displback_changed(struct xenbus_device *xb_dev, @@ -136,6 +292,7 @@ static int xen_drv_probe(struct xenbus_device *xb_dev, front_info->xb_dev = xb_dev; spin_lock_init(&front_info->io_lock); + front_info->drm_pdrv_registered = false; dev_set_drvdata(&xb_dev->dev, front_info); return xenbus_switch_state(xb_dev, XenbusStateInitialising); } diff --git a/drivers/gpu/drm/xen/xen_drm_front.h b/drivers/gpu/drm/xen/xen_drm_front.h index 4adb6101c889..d964c4bd4fb6 100644 --- a/drivers/gpu/drm/xen/xen_drm_front.h +++ b/drivers/gpu/drm/xen/xen_drm_front.h @@ -11,6 +11,8 @@ #ifndef __XEN_DRM_FRONT_H_ #define __XEN_DRM_FRONT_H_ +#include + #include "xen_drm_front_cfg.h" #ifndef GRANT_INVALID_REF @@ -22,10 +24,13 @@ #define GRANT_INVALID_REF 0 #endif +struct xen_drm_front_drm_pipeline; + struct xen_drm_front_info { struct xenbus_device *xb_dev; /* to protect data between backend IO code and interrupt handler */ spinlock_t io_lock; + bool drm_pdrv_registered; /* virtual DRM platform device */ struct platform_device *drm_pdev; @@ -34,4 +39,31 @@ struct xen_drm_front_info { struct xen_drm_front_cfg cfg; }; +int xen_drm_front_mode_set(struct xen_drm_front_drm_pipeline *pipeline, + uint32_t x, uint32_t y, uint32_t width, uint32_t height, + uint32_t bpp, uint64_t fb_cookie); + +int xen_drm_front_dbuf_create_from_sgt(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie, uint32_t width, uint32_t height, + uint32_t bpp, uint64_t size, struct sg_table *sgt); + +int xen_drm_front_dbuf_create_from_pages(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie, uint32_t width, uint32_t height, + uint32_t bpp, uint64_t size, struct page **pages); + +int xen_drm_front_dbuf_destroy(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie); + +int xen_drm_front_fb_attach(struct xen_drm_front_info *front_info, + uint64_t dbuf_cookie, uint64_t fb_cookie, uint32_t width, + uint32_t height, uint32_t pixel_format); + +int xen_drm_front_fb_detach(struct xen_drm_front_info *front_info, + uint64_t fb_cookie); + +int xen_drm_front_page_flip(struct xen_drm_front_info *front_info, + int conn_idx, uint64_t fb_cookie); + +void xen_drm_front_unload(struct xen_drm_front_info *front_info); + #endif /* __XEN_DRM_FRONT_H_ */ diff --git a/drivers/gpu/drm/xen/xen_drm_front_conn.c b/drivers/gpu/drm/xen/xen_drm_front_conn.c new file mode 100644 index 000000000000..382c8a9da7e6 --- /dev/null +++ b/drivers/gpu/drm/xen/xen_drm_front_conn.c @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT + +/* + * Xen para-virtual DRM device + * + * Copyright (C) 2016-2018 EPAM Systems Inc. + * + * Author: Oleksandr Andrushchenko + */ + +#include +#include + +#include