From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Yao Subject: [PATCH v3 6/6] drm/rockchip: vop: support plane scale Date: Tue, 21 Jul 2015 16:28:52 +0800 Message-ID: <1437467332-14006-1-git-send-email-mark.yao@rock-chips.com> References: <1437466807-13689-1-git-send-email-mark.yao@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from regular1.263xmail.com (regular1.263xmail.com [211.150.99.134]) by gabe.freedesktop.org (Postfix) with ESMTPS id 062276E8E7 for ; Tue, 21 Jul 2015 01:30:10 -0700 (PDT) In-Reply-To: <1437466807-13689-1-git-send-email-mark.yao@rock-chips.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 Cc: zwl@rock-chips.com, linux-kernel@vger.kernel.org, tfiga@chromium.org, linux-rockchip@lists.infradead.org, xw@rock-chips.com, dkm@rock-chips.com, sandy.huang@rock-chips.com, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org V2luX2Z1bGwgc3VwcG9ydCAxLzggdG8gOCBzY2FsZSBkb3duL3VwIGVuZ2luZSwgc3VwcG9ydAph bGwgZm9ybWF0IHNjYWxlLgoKU2lnbmVkLW9mZi1ieTogTWFyayBZYW8gPG1hcmsueWFvQHJvY2st Y2hpcHMuY29tPgotLS0KQ2hhbmdlcyBpbiB2MzoKQWR2aWNlZCBieSBUb21hc3ogRmlnYQotIHJl bW92ZSB1bnVzZWQgY29kZSBhbmQgdW5uZWNlc3Nhcnkgc2NhbGUgcGF0aC4KLSB1c2Ugc3RhdGlj IGlubGluZSBmdW5jaW9uIGluc3RlYWQgIiNkZWZpbmUiLCBsZXQgZ2NjIGNoZWNrIHRoZSBjYXN0 Ci0gbW92ZSBzYW1lIGNhbGwgaW50byBoZWxwZXIsIG1ha2UgY29kZSBjbGVhbi4KCkNoYW5nZXMg aW4gdjI6Ci0gRml4IHNjYWxlIGRlc3QgaW5mby4gCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfZHJtX3ZvcC5jIHwgIDE5NiArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmggfCAgIDg3ICsrKysrKysr KysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyODEgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5j IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwppbmRleCA0ZGZh ZDA2NS4uODI1N2U5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV92b3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X3ZvcC5jCkBAIC00OSw2ICs0OSw4IEBACiAKICNkZWZpbmUgVk9QX1dJTl9TRVQoeCwgd2luLCBu YW1lLCB2KSBcCiAJCVJFR19TRVQoeCwgd2luLT5iYXNlLCB3aW4tPnBoeS0+bmFtZSwgdiwgUkVM QVhFRCkKKyNkZWZpbmUgVk9QX1NDTF9TRVQoeCwgd2luLCBuYW1lLCB2KSBcCisJCVJFR19TRVQo eCwgd2luLT5iYXNlLCB3aW4tPnBoeS0+c2NsLT5uYW1lLCB2LCBSRUxBWEVEKQogI2RlZmluZSBW T1BfQ1RSTF9TRVQoeCwgbmFtZSwgdikgXAogCQlSRUdfU0VUKHgsIDAsICh4KS0+ZGF0YS0+Y3Ry bC0+bmFtZSwgdiwgTk9STUFMKQogCkBAIC0xNjMsNyArMTY1LDM3IEBAIHN0cnVjdCB2b3BfY3Ry bCB7CiAJc3RydWN0IHZvcF9yZWcgdnBvc3Rfc3RfZW5kOwogfTsKIAorc3RydWN0IHZvcF9zY2xf cmVncyB7CisJc3RydWN0IHZvcF9yZWcgY2Jjcl92c2RfbW9kZTsKKwlzdHJ1Y3Qgdm9wX3JlZyBj YmNyX3ZzdV9tb2RlOworCXN0cnVjdCB2b3BfcmVnIGNiY3JfaHNkX21vZGU7CisJc3RydWN0IHZv cF9yZWcgY2Jjcl92ZXJfc2NsX21vZGU7CisJc3RydWN0IHZvcF9yZWcgY2Jjcl9ob3Jfc2NsX21v ZGU7CisJc3RydWN0IHZvcF9yZWcgeXJnYl92c2RfbW9kZTsKKwlzdHJ1Y3Qgdm9wX3JlZyB5cmdi X3ZzdV9tb2RlOworCXN0cnVjdCB2b3BfcmVnIHlyZ2JfaHNkX21vZGU7CisJc3RydWN0IHZvcF9y ZWcgeXJnYl92ZXJfc2NsX21vZGU7CisJc3RydWN0IHZvcF9yZWcgeXJnYl9ob3Jfc2NsX21vZGU7 CisJc3RydWN0IHZvcF9yZWcgbGluZV9sb2FkX21vZGU7CisJc3RydWN0IHZvcF9yZWcgY2Jjcl9h eGlfZ2F0aGVyX251bTsKKwlzdHJ1Y3Qgdm9wX3JlZyB5cmdiX2F4aV9nYXRoZXJfbnVtOworCXN0 cnVjdCB2b3BfcmVnIHZzZF9jYmNyX2d0MjsKKwlzdHJ1Y3Qgdm9wX3JlZyB2c2RfY2Jjcl9ndDQ7 CisJc3RydWN0IHZvcF9yZWcgdnNkX3lyZ2JfZ3QyOworCXN0cnVjdCB2b3BfcmVnIHZzZF95cmdi X2d0NDsKKwlzdHJ1Y3Qgdm9wX3JlZyBiaWNfY29lX3NlbDsKKwlzdHJ1Y3Qgdm9wX3JlZyBjYmNy X2F4aV9nYXRoZXJfZW47CisJc3RydWN0IHZvcF9yZWcgeXJnYl9heGlfZ2F0aGVyX2VuOworCisJ c3RydWN0IHZvcF9yZWcgbGJfbW9kZTsKKwlzdHJ1Y3Qgdm9wX3JlZyBzY2FsZV95cmdiX3g7CisJ c3RydWN0IHZvcF9yZWcgc2NhbGVfeXJnYl95OworCXN0cnVjdCB2b3BfcmVnIHNjYWxlX2NiY3Jf eDsKKwlzdHJ1Y3Qgdm9wX3JlZyBzY2FsZV9jYmNyX3k7Cit9OworCiBzdHJ1Y3Qgdm9wX3dpbl9w aHkgeworCWNvbnN0IHN0cnVjdCB2b3Bfc2NsX3JlZ3MgKnNjbDsKIAljb25zdCB1aW50MzJfdCAq ZGF0YV9mb3JtYXRzOwogCXVpbnQzMl90IG5mb3JtYXRzOwogCkBAIC0yMTIsNyArMjQ0LDM2IEBA IHN0YXRpYyBjb25zdCB1aW50MzJfdCBmb3JtYXRzXzIzNFtdID0gewogCURSTV9GT1JNQVRfUkdC NTY1LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2b3Bfc2NsX3JlZ3Mgd2luX2Z1bGxfc2Ns ID0geworCS5jYmNyX3ZzZF9tb2RlID0gVk9QX1JFRyhXSU4wX0NUUkwxLCAweDEsIDMxKSwKKwku Y2Jjcl92c3VfbW9kZSA9IFZPUF9SRUcoV0lOMF9DVFJMMSwgMHgxLCAzMCksCisJLmNiY3JfaHNk X21vZGUgPSBWT1BfUkVHKFdJTjBfQ1RSTDEsIDB4MywgMjgpLAorCS5jYmNyX3Zlcl9zY2xfbW9k ZSA9IFZPUF9SRUcoV0lOMF9DVFJMMSwgMHgzLCAyNiksCisJLmNiY3JfaG9yX3NjbF9tb2RlID0g Vk9QX1JFRyhXSU4wX0NUUkwxLCAweDMsIDI0KSwKKwkueXJnYl92c2RfbW9kZSA9IFZPUF9SRUco V0lOMF9DVFJMMSwgMHgxLCAyMyksCisJLnlyZ2JfdnN1X21vZGUgPSBWT1BfUkVHKFdJTjBfQ1RS TDEsIDB4MSwgMjIpLAorCS55cmdiX2hzZF9tb2RlID0gVk9QX1JFRyhXSU4wX0NUUkwxLCAweDMs IDIwKSwKKwkueXJnYl92ZXJfc2NsX21vZGUgPSBWT1BfUkVHKFdJTjBfQ1RSTDEsIDB4MywgMTgp LAorCS55cmdiX2hvcl9zY2xfbW9kZSA9IFZPUF9SRUcoV0lOMF9DVFJMMSwgMHgzLCAxNiksCisJ LmxpbmVfbG9hZF9tb2RlID0gVk9QX1JFRyhXSU4wX0NUUkwxLCAweDEsIDE1KSwKKwkuY2Jjcl9h eGlfZ2F0aGVyX251bSA9IFZPUF9SRUcoV0lOMF9DVFJMMSwgMHg3LCAxMiksCisJLnlyZ2JfYXhp X2dhdGhlcl9udW0gPSBWT1BfUkVHKFdJTjBfQ1RSTDEsIDB4ZiwgOCksCisJLnZzZF9jYmNyX2d0 MiA9IFZPUF9SRUcoV0lOMF9DVFJMMSwgMHgxLCA3KSwKKwkudnNkX2NiY3JfZ3Q0ID0gVk9QX1JF RyhXSU4wX0NUUkwxLCAweDEsIDYpLAorCS52c2RfeXJnYl9ndDIgPSBWT1BfUkVHKFdJTjBfQ1RS TDEsIDB4MSwgNSksCisJLnZzZF95cmdiX2d0NCA9IFZPUF9SRUcoV0lOMF9DVFJMMSwgMHgxLCA0 KSwKKwkuYmljX2NvZV9zZWwgPSBWT1BfUkVHKFdJTjBfQ1RSTDEsIDB4MywgMiksCisJLmNiY3Jf YXhpX2dhdGhlcl9lbiA9IFZPUF9SRUcoV0lOMF9DVFJMMSwgMHgxLCAxKSwKKwkueXJnYl9heGlf Z2F0aGVyX2VuID0gVk9QX1JFRyhXSU4wX0NUUkwxLCAweDEsIDApLAorCS5sYl9tb2RlID0gVk9Q X1JFRyhXSU4wX0NUUkwwLCAweDcsIDUpLAorCS5zY2FsZV95cmdiX3ggPSBWT1BfUkVHKFdJTjBf U0NMX0ZBQ1RPUl9ZUkdCLCAweGZmZmYsIDB4MCksCisJLnNjYWxlX3lyZ2JfeSA9IFZPUF9SRUco V0lOMF9TQ0xfRkFDVE9SX1lSR0IsIDB4ZmZmZiwgMTYpLAorCS5zY2FsZV9jYmNyX3ggPSBWT1Bf UkVHKFdJTjBfU0NMX0ZBQ1RPUl9DQlIsIDB4ZmZmZiwgMHgwKSwKKwkuc2NhbGVfY2Jjcl95ID0g Vk9QX1JFRyhXSU4wX1NDTF9GQUNUT1JfQ0JSLCAweGZmZmYsIDE2KSwKK307CisKIHN0YXRpYyBj b25zdCBzdHJ1Y3Qgdm9wX3dpbl9waHkgd2luMDFfZGF0YSA9IHsKKwkuc2NsID0gJndpbl9mdWxs X3NjbCwKIAkuZGF0YV9mb3JtYXRzID0gZm9ybWF0c18wMSwKIAkubmZvcm1hdHMgPSBBUlJBWV9T SVpFKGZvcm1hdHNfMDEpLAogCS5lbmFibGUgPSBWT1BfUkVHKFdJTjBfQ1RSTDAsIDB4MSwgMCks CkBAIC00MDEsNiArNDYyLDEyNiBAQCBzdGF0aWMgYm9vbCBpc19hbHBoYV9zdXBwb3J0KHVpbnQz Ml90IGZvcm1hdCkKIAl9CiB9CiAKK3N0YXRpYyB1aW50MTZfdCBzY2xfdm9wX2NhbF9zY2FsZShl bnVtIHNjYWxlX21vZGUgbW9kZSwgdWludDMyX3Qgc3JjLAorCQkJCSAgdWludDMyX3QgZHN0LCBp bnQgc2Nhbl90eXBlLAorCQkJCSAgaW50IHZzdV9tb2RlLCBpbnQgKnZza2lwbGluZXMpCit7CisJ dWludDE2X3QgdmFsID0gMSA8PCBTQ0xfRlRfREVGQVVMVF9GSVhQT0lOVF9TSElGVDsKKworCWlm IChzY2FuX3R5cGUgPT0gMCkgeworCQlpZiAobW9kZSA9PSBTQ0FMRV9VUCkKKwkJCXZhbCA9IEdF VF9TQ0xfRlRfQklDKHNyYywgZHN0KTsKKwkJZWxzZSBpZiAobW9kZSA9PSBTQ0FMRV9ET1dOKQor CQkJdmFsID0gR0VUX1NDTF9GVF9CSUxJX0ROKHNyYywgZHN0KTsKKwl9IGVsc2UgeworCQlpZiAo bW9kZSA9PSBTQ0FMRV9VUCkgeworCQkJaWYgKHZzdV9tb2RlID09IFNDQUxFX1VQX0JJTCkKKwkJ CQl2YWwgPSBHRVRfU0NMX0ZUX0JJTElfVVAoc3JjLCBkc3QpOworCQkJZWxzZQorCQkJCXZhbCA9 IEdFVF9TQ0xfRlRfQklDKHNyYywgZHN0KTsKKwkJfSBlbHNlIGlmIChtb2RlID09IFNDQUxFX0RP V04pIHsKKwkJCWlmICh2c2tpcGxpbmVzKSB7CisJCQkJKnZza2lwbGluZXMgPSBzY2xfZ2V0X3Zz a2lwbGluZXMoc3JjLCBkc3QpOworCQkJCXZhbCA9IHNjbF9nZXRfYmlsaV9kbl92c2tpcChzcmMs IGRzdCwKKwkJCQkJCQkgICAgKnZza2lwbGluZXMpOworCQkJfSBlbHNlIHsKKwkJCQl2YWwgPSBH RVRfU0NMX0ZUX0JJTElfRE4oc3JjLCBkc3QpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHZh bDsKK30KKworc3RhdGljIHZvaWQgc2NsX3ZvcF9jYWxfc2NsX2ZhYyhzdHJ1Y3Qgdm9wICp2b3As IGNvbnN0IHN0cnVjdCB2b3Bfd2luX2RhdGEgKndpbiwKKwkJCSAgICAgdWludDMyX3Qgc3JjX3cs IHVpbnQzMl90IHNyY19oLCB1aW50MzJfdCBkc3RfdywKKwkJCSAgICAgdWludDMyX3QgZHN0X2gs IHVpbnQzMl90IHBpeGVsX2Zvcm1hdCkKK3sKKwl1aW50MTZfdCB5cmdiX2hvcl9zY2xfbW9kZSwg eXJnYl92ZXJfc2NsX21vZGU7CisJdWludDE2X3QgY2Jjcl9ob3Jfc2NsX21vZGUgPSBTQ0FMRV9O T05FOworCXVpbnQxNl90IGNiY3JfdmVyX3NjbF9tb2RlID0gU0NBTEVfTk9ORTsKKwlpbnQgaHN1 YiA9IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcocGl4ZWxfZm9ybWF0KTsKKwlp bnQgdnN1YiA9IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcocGl4ZWxfZm9ybWF0 KTsKKwlib29sIGlzX3l1diA9IGlzX3l1dl9zdXBwb3J0KHBpeGVsX2Zvcm1hdCk7CisJdWludDE2 X3QgY2Jjcl9zcmNfdyA9IHNyY193IC8gaHN1YjsKKwl1aW50MTZfdCBjYmNyX3NyY19oID0gc3Jj X2ggLyB2c3ViOworCXVpbnQxNl90IHZzdV9tb2RlOworCXVpbnQxNl90IGxiX21vZGU7CisJdWlu dDMyX3QgdmFsOworCWludCB2c2tpcGxpbmVzOworCisJaWYgKGRzdF93ID4gMzg0MCkgeworCQlE Uk1fRVJST1IoInlyZ2Igc2NhbGUgZXhjZWVkIDgsc3JjWyVkeCVkXSBkc3RbJWR4JWRdXG4iLAor CQkJICBzcmNfdywgc3JjX2gsIGRzdF93LCBkc3RfaCk7CisJCXJldHVybjsKKwl9CisKKwl5cmdi X2hvcl9zY2xfbW9kZSA9IHNjbF9nZXRfc2NsX21vZGUoc3JjX3csIGRzdF93KTsKKwl5cmdiX3Zl cl9zY2xfbW9kZSA9IHNjbF9nZXRfc2NsX21vZGUoc3JjX2gsIGRzdF9oKTsKKworCWlmIChpc195 dXYpIHsKKwkJY2Jjcl9ob3Jfc2NsX21vZGUgPSBzY2xfZ2V0X3NjbF9tb2RlKGNiY3Jfc3JjX3cs IGRzdF93KTsKKwkJY2Jjcl92ZXJfc2NsX21vZGUgPSBzY2xfZ2V0X3NjbF9tb2RlKGNiY3Jfc3Jj X2gsIGRzdF9oKTsKKwkJaWYgKGNiY3JfaG9yX3NjbF9tb2RlID09IFNDQUxFX0RPV04pCisJCQls Yl9tb2RlID0gc2NsX3ZvcF9jYWxfbGJfbW9kZShkc3RfdywgdHJ1ZSk7CisJCWVsc2UKKwkJCWxi X21vZGUgPSBzY2xfdm9wX2NhbF9sYl9tb2RlKGNiY3Jfc3JjX3csIHRydWUpOworCX0gZWxzZSB7 CisJCWlmICh5cmdiX2hvcl9zY2xfbW9kZSA9PSBTQ0FMRV9ET1dOKQorCQkJbGJfbW9kZSA9IHNj bF92b3BfY2FsX2xiX21vZGUoZHN0X3csIGZhbHNlKTsKKwkJZWxzZQorCQkJbGJfbW9kZSA9IHNj bF92b3BfY2FsX2xiX21vZGUoc3JjX3csIGZhbHNlKTsKKwl9CisKKwlWT1BfU0NMX1NFVCh2b3As IHdpbiwgbGJfbW9kZSwgbGJfbW9kZSk7CisJaWYgKGxiX21vZGUgPT0gTEJfUkdCXzM4NDBYMikg eworCQlpZiAoeXJnYl92ZXJfc2NsX21vZGUgIT0gU0NBTEVfTk9ORSkgeworCQkJRFJNX0VSUk9S KCJFUlJPUiA6IG5vdCBhbGxvdyB5cmdiIHZlciBzY2FsZVxuIik7CisJCQlyZXR1cm47CisJCX0K KwkJaWYgKGNiY3JfdmVyX3NjbF9tb2RlICE9IFNDQUxFX05PTkUpIHsKKwkJCURSTV9FUlJPUigi RVJST1IgOiBub3QgYWxsb3cgY2JjciB2ZXIgc2NhbGVcbiIpOworCQkJcmV0dXJuOworCQl9CisJ CXZzdV9tb2RlID0gU0NBTEVfVVBfQklMOworCX0gZWxzZSBpZiAobGJfbW9kZSA9PSBMQl9SR0Jf MjU2MFg0KSB7CisJCXZzdV9tb2RlID0gU0NBTEVfVVBfQklMOworCX0gZWxzZSB7CisJCXZzdV9t b2RlID0gU0NBTEVfVVBfQklDOworCX0KKworCXZhbCA9IHNjbF92b3BfY2FsX3NjYWxlKHlyZ2Jf aG9yX3NjbF9tb2RlLCBzcmNfdywgZHN0X3csIDAsIDAsIE5VTEwpOworCVZPUF9TQ0xfU0VUKHZv cCwgd2luLCBzY2FsZV95cmdiX3gsIHZhbCk7CisJdmFsID0gc2NsX3ZvcF9jYWxfc2NhbGUoeXJn Yl92ZXJfc2NsX21vZGUsIHNyY19oLCBkc3RfaCwKKwkJCQkxLCB2c3VfbW9kZSwgJnZza2lwbGlu ZXMpOworCVZPUF9TQ0xfU0VUKHZvcCwgd2luLCBzY2FsZV95cmdiX3ksIHZhbCk7CisKKwlWT1Bf U0NMX1NFVCh2b3AsIHdpbiwgdnNkX3lyZ2JfZ3Q0LCB2c2tpcGxpbmVzID09IDQpOworCVZPUF9T Q0xfU0VUKHZvcCwgd2luLCB2c2RfeXJnYl9ndDIsIHZza2lwbGluZXMgPT0gMik7CisKKwlWT1Bf U0NMX1NFVCh2b3AsIHdpbiwgeXJnYl9ob3Jfc2NsX21vZGUsIHlyZ2JfaG9yX3NjbF9tb2RlKTsK KwlWT1BfU0NMX1NFVCh2b3AsIHdpbiwgeXJnYl92ZXJfc2NsX21vZGUsIHlyZ2JfdmVyX3NjbF9t b2RlKTsKKwlWT1BfU0NMX1NFVCh2b3AsIHdpbiwgeXJnYl9oc2RfbW9kZSwgU0NBTEVfRE9XTl9C SUwpOworCVZPUF9TQ0xfU0VUKHZvcCwgd2luLCB5cmdiX3ZzZF9tb2RlLCBTQ0FMRV9ET1dOX0JJ TCk7CisJVk9QX1NDTF9TRVQodm9wLCB3aW4sIHlyZ2JfdnN1X21vZGUsIHZzdV9tb2RlKTsKKwlp ZiAoaXNfeXV2KSB7CisJCXZhbCA9IHNjbF92b3BfY2FsX3NjYWxlKGNiY3JfaG9yX3NjbF9tb2Rl LCBjYmNyX3NyY193LAorCQkJCQlkc3RfdywgMCwgMCwgTlVMTCk7CisJCVZPUF9TQ0xfU0VUKHZv cCwgd2luLCBzY2FsZV9jYmNyX3gsIHZhbCk7CisJCXZhbCA9IHNjbF92b3BfY2FsX3NjYWxlKGNi Y3JfdmVyX3NjbF9tb2RlLCBjYmNyX3NyY19oLAorCQkJCQlkc3RfaCwgMSwgdnN1X21vZGUsICZ2 c2tpcGxpbmVzKTsKKwkJVk9QX1NDTF9TRVQodm9wLCB3aW4sIHNjYWxlX2NiY3JfeSwgdmFsKTsK KworCQlWT1BfU0NMX1NFVCh2b3AsIHdpbiwgdnNkX2NiY3JfZ3Q0LCB2c2tpcGxpbmVzID09IDQp OworCQlWT1BfU0NMX1NFVCh2b3AsIHdpbiwgdnNkX2NiY3JfZ3QyLCB2c2tpcGxpbmVzID09IDIp OworCQlWT1BfU0NMX1NFVCh2b3AsIHdpbiwgY2Jjcl9ob3Jfc2NsX21vZGUsIGNiY3JfaG9yX3Nj bF9tb2RlKTsKKwkJVk9QX1NDTF9TRVQodm9wLCB3aW4sIGNiY3JfdmVyX3NjbF9tb2RlLCBjYmNy X3Zlcl9zY2xfbW9kZSk7CisJCVZPUF9TQ0xfU0VUKHZvcCwgd2luLCBjYmNyX2hzZF9tb2RlLCBT Q0FMRV9ET1dOX0JJTCk7CisJCVZPUF9TQ0xfU0VUKHZvcCwgd2luLCBjYmNyX3ZzZF9tb2RlLCBT Q0FMRV9ET1dOX0JJTCk7CisJCVZPUF9TQ0xfU0VUKHZvcCwgd2luLCBjYmNyX3ZzdV9tb2RlLCB2 c3VfbW9kZSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCB2b3BfZHNwX2hvbGRfdmFsaWRfaXJxX2Vu YWJsZShzdHJ1Y3Qgdm9wICp2b3ApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYzMSwx MSArODEyLDEzIEBAIHN0YXRpYyBpbnQgdm9wX3VwZGF0ZV9wbGFuZV9ldmVudChzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKIAkJLnkyID0gY3J0Yy0+bW9kZS52ZGlzcGxheSwKIAl9OwogCWJvb2wg Y2FuX3Bvc2l0aW9uID0gcGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWTsKKwlp bnQgbWluX3NjYWxlID0gd2luLT5waHktPnNjbCA/IDB4MDIwMDAgOiBEUk1fUExBTkVfSEVMUEVS X05PX1NDQUxJTkc7CisJaW50IG1heF9zY2FsZSA9IHdpbi0+cGh5LT5zY2wgPyAweDgwMDAwIDog RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOwogCiAJcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9j aGVja191cGRhdGUocGxhbmUsIGNydGMsIGZiLAogCQkJCQkgICAgJnNyYywgJmRlc3QsICZjbGlw LAotCQkJCQkgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAotCQkJCQkgICAgRFJNX1BM QU5FX0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgbWluX3NjYWxlLAorCQkJCQkgICAgbWF4 X3NjYWxlLAogCQkJCQkgICAgY2FuX3Bvc2l0aW9uLCBmYWxzZSwgJnZpc2libGUpOwogCWlmIChy ZXQpCiAJCXJldHVybiByZXQ7CkBAIC03MzgsOSArOTIxLDE4IEBAIHN0YXRpYyBpbnQgdm9wX3Vw ZGF0ZV9wbGFuZV9ldmVudChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJVk9QX1dJTl9TRVQo dm9wLCB3aW4sIHV2X3ZpciwgdXZfdmlyX3N0cmlkZSk7CiAJCVZPUF9XSU5fU0VUKHZvcCwgd2lu LCB1dl9tc3QsIHV2X21zdCk7CiAJfQorCisJaWYgKHdpbi0+cGh5LT5zY2wpCisJCXNjbF92b3Bf Y2FsX3NjbF9mYWModm9wLCB3aW4sIGFjdHVhbF93LCBhY3R1YWxfaCwKKwkJCQkgICAgZGVzdC54 MiAtIGRlc3QueDEsIGRlc3QueTIgLSBkZXN0LnkxLAorCQkJCSAgICBmYi0+cGl4ZWxfZm9ybWF0 KTsKKwogCXZhbCA9IChhY3R1YWxfaCAtIDEpIDw8IDE2OwogCXZhbCB8PSAoYWN0dWFsX3cgLSAx KSAmIDB4ZmZmZjsKIAlWT1BfV0lOX1NFVCh2b3AsIHdpbiwgYWN0X2luZm8sIHZhbCk7CisKKwl2 YWwgPSAoZGVzdC55MiAtIGRlc3QueTEgLSAxKSA8PCAxNjsKKwl2YWwgfD0gKGRlc3QueDIgLSBk ZXN0LngxIC0gMSkgJiAweGZmZmY7CiAJVk9QX1dJTl9TRVQodm9wLCB3aW4sIGRzcF9pbmZvLCB2 YWwpOwogCXZhbCA9IChkc3Bfc3R5IC0gMSkgPDwgMTY7CiAJdmFsIHw9IChkc3Bfc3R4IC0gMSkg JiAweGZmZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX3ZvcC5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaApp bmRleCA2M2U5YjNhLi43OGNkMzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfZHJtX3ZvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmgKQEAgLTE5OCw0ICsxOTgsOTEgQEAgZW51bSBmYWN0b3JfbW9kZSB7CiAJ QUxQSEFfU1JDX0dMT0JBTCwKIH07CiAKK2VudW0gc2NhbGVfbW9kZSB7CisJU0NBTEVfTk9ORSA9 IDB4MCwKKwlTQ0FMRV9VUCAgID0gMHgxLAorCVNDQUxFX0RPV04gPSAweDIKK307CisKK2VudW0g bGJfbW9kZSB7CisJTEJfWVVWXzM4NDBYNSA9IDB4MCwKKwlMQl9ZVVZfMjU2MFg4ID0gMHgxLAor CUxCX1JHQl8zODQwWDIgPSAweDIsCisJTEJfUkdCXzI1NjBYNCA9IDB4MywKKwlMQl9SR0JfMTky MFg1ID0gMHg0LAorCUxCX1JHQl8xMjgwWDggPSAweDUKK307CisKK2VudW0gc2FjbGVfdXBfbW9k ZSB7CisJU0NBTEVfVVBfQklMID0gMHgwLAorCVNDQUxFX1VQX0JJQyA9IDB4MQorfTsKKworZW51 bSBzY2FsZV9kb3duX21vZGUgeworCVNDQUxFX0RPV05fQklMID0gMHgwLAorCVNDQUxFX0RPV05f QVZHID0gMHgxCit9OworCisjZGVmaW5lIFNDTF9GVF9ERUZBVUxUX0ZJWFBPSU5UX1NISUZUCTEy CisjZGVmaW5lIFNDTF9NQVhfVlNLSVBMSU5FUwkJNAorI2RlZmluZSBNSU5fU0NMX0ZUX0FGVEVS X1ZTS0lQCQkxCisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3Qgc2NsX2NhbF9zY2FsZShpbnQgc3Jj LCBpbnQgZHN0LCBpbnQgc2hpZnQpCit7CisJcmV0dXJuICgoc3JjICogMiAtIDMpIDw8IChzaGlm dCAtIDEpKSAvIChkc3QgLSAxKTsKK30KKworI2RlZmluZSBHRVRfU0NMX0ZUX0JJTElfRE4oc3Jj LCBkc3QpCXNjbF9jYWxfc2NhbGUoc3JjLCBkc3QsIDEyKQorI2RlZmluZSBHRVRfU0NMX0ZUX0JJ TElfVVAoc3JjLCBkc3QpCXNjbF9jYWxfc2NhbGUoc3JjLCBkc3QsIDE2KQorI2RlZmluZSBHRVRf U0NMX0ZUX0JJQyhzcmMsIGRzdCkJc2NsX2NhbF9zY2FsZShzcmMsIGRzdCwgMTYpCisKK3N0YXRp YyBpbmxpbmUgdWludDE2X3Qgc2NsX2dldF9iaWxpX2RuX3Zza2lwKGludCBzcmNfaCwgaW50IGRz dF9oLAorCQkJCQkgICAgIGludCB2c2tpcGxpbmVzKQoreworCWludCBhY3RfaGVpZ2h0OworCisJ YWN0X2hlaWdodCA9IChzcmNfaCArIHZza2lwbGluZXMgLSAxKSAvIHZza2lwbGluZXM7CisKKwly ZXR1cm4gR0VUX1NDTF9GVF9CSUxJX0ROKGFjdF9oZWlnaHQsIGRzdF9oKTsKK30KKworc3RhdGlj IGlubGluZSBlbnVtIHNjYWxlX21vZGUgc2NsX2dldF9zY2xfbW9kZShpbnQgc3JjLCBpbnQgZHN0 KQoreworCWlmIChzcmMgPCBkc3QpCisJCXJldHVybiBTQ0FMRV9VUDsKKwllbHNlIGlmIChzcmMg PiBkc3QpCisJCXJldHVybiBTQ0FMRV9ET1dOOworCisJcmV0dXJuIFNDQUxFX05PTkU7Cit9CisK K3N0YXRpYyBpbmxpbmUgaW50IHNjbF9nZXRfdnNraXBsaW5lcyh1aW50MzJfdCBzcmNoLCB1aW50 MzJfdCBkc3RoKQoreworCXVpbnQzMl90IHZza2lwbGluZXM7CisKKwlmb3IgKHZza2lwbGluZXMg PSBTQ0xfTUFYX1ZTS0lQTElORVM7IHZza2lwbGluZXMgPiAxOyB2c2tpcGxpbmVzIC89IDIpCisJ CWlmIChzcmNoID49IHZza2lwbGluZXMgKiBkc3RoICogTUlOX1NDTF9GVF9BRlRFUl9WU0tJUCkK KwkJCWJyZWFrOworCisJcmV0dXJuIHZza2lwbGluZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 IHNjbF92b3BfY2FsX2xiX21vZGUoaW50IHdpZHRoLCBib29sIGlzX3l1dikKK3sKKwlpbnQgbGJf bW9kZTsKKworCWlmICh3aWR0aCA+IDI1NjApCisJCWxiX21vZGUgPSBMQl9SR0JfMzg0MFgyOwor CWVsc2UgaWYgKHdpZHRoID4gMTkyMCkKKwkJbGJfbW9kZSA9IExCX1JHQl8yNTYwWDQ7CisJZWxz ZSBpZiAoIWlzX3l1dikKKwkJbGJfbW9kZSA9IExCX1JHQl8xOTIwWDU7CisJZWxzZSBpZiAod2lk dGggPiAxMjgwKQorCQlsYl9tb2RlID0gTEJfWVVWXzM4NDBYNTsKKwllbHNlCisJCWxiX21vZGUg PSBMQl9ZVVZfMjU2MFg4OworCisJcmV0dXJuIGxiX21vZGU7Cit9CisKICNlbmRpZiAvKiBfUk9D S0NISVBfRFJNX1ZPUF9IICovCi0tIAoxLjcuOS41CgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK