From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH v2 02/10] drm/i915: Unduplicate CHV signal level code Date: Wed, 13 Apr 2016 20:47:45 +0300 Message-ID: <1460569673-13694-3-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1460569673-13694-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 18FDF6E92E for ; Wed, 13 Apr 2016 17:48:06 +0000 (UTC) In-Reply-To: <1460569673-13694-1-git-send-email-ander.conselvan.de.oliveira@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 Cc: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org VGhlIGNvZGUgZm9yIHByb2dyYW1taW5nIHZvbHRhZ2Ugc3dpbmcgYW5kIGVtcGhhc2lzIHdhcyBk dXBsaWNhdGVkCmJldHdlZW4gRFAgYW5kIEhETUkgY29kZS4gTW92ZSB0aGF0IHRvIGEgbmV3IGZp bGUsIGludGVsX2RwaW9fcGh5LmMuCgp2MjogS2VlcCB0aGUgIlVzZSA4MDBtVi0wZEIiIGNvbW1l bnQgaW4gdGhlIEhETUkgY29kZS4gKFZpbGxlKQpTaWduZWQtb2ZmLWJ5OiBBbmRlciBDb25zZWx2 YW4gZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgIHwgICA1ICsrCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jICAgICAgIHwgMTAzICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwaW9fcGh5LmMgfCAxMjIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5j ICAgICB8ICA3MCArLS0tLS0tLS0tLS0tLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDEzNiBpbnNl cnRpb25zKCspLCAxNjUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHBpb19waHkuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggN2Zm YjUxYi4uZWI0NWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAgaTkx NS15ICs9IGludGVsX2F1ZGlvLm8gXAogCSAgaW50ZWxfYmlvcy5vIFwKIAkgIGludGVsX2NvbG9y Lm8gXAogCSAgaW50ZWxfZGlzcGxheS5vIFwKKwkgIGludGVsX2RwaW9fcGh5Lm8gXAogCSAgaW50 ZWxfZHBsbF9tZ3IubyBcCiAJICBpbnRlbF9mYmMubyBcCiAJICBpbnRlbF9maWZvX3VuZGVycnVu Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZjVjOTFiMC4uMjMzMTk4ZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0zNTU0LDYgKzM1NTQsMTEgQEAgdm9pZCBpbnRlbF9zYmlf d3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MTYgcmVnLCB1MzIgdmFs dWUsCiB1MzIgdmx2X2ZsaXNkc2lfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHUzMiByZWcpOwogdm9pZCB2bHZfZmxpc2RzaV93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcsIHUzMiB2YWwpOwogCisvKiBpbnRlbF9kcGlvX3BoeS5j ICovCit2b2lkIGNodl9zZXRfcGh5X3NpZ25hbF9sZXZlbChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq ZW5jb2RlciwKKwkJCSAgICAgIHUzMiBkZWVtcGhfcmVnX3ZhbHVlLCB1MzIgbWFyZ2luX3JlZ192 YWx1ZSwKKwkJCSAgICAgIGJvb2wgdW5pcV90cmFuc19zY2FsZSk7CisKIGludCBpbnRlbF9ncHVf ZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwogaW50IGlu dGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZh bCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDFiODllMmIuLmMyZjc3NGMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtMzMzOSwyMyArMzMzOSwxMiBAQCBzdGF0aWMgdWludDMy X3Qgdmx2X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIGJvb2wgY2h2X25lZWRfdW5pcV90cmFuc19zY2FsZSh1aW50OF90IHRy YWluX3NldCkKLXsKLQlyZXR1cm4gKHRyYWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19N QVNLKSA9PSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wICYmCi0JCSh0cmFpbl9zZXQgJiBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX01BU0spID09IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxf MzsKLX0KLQogc3RhdGljIHVpbnQzMl90IGNodl9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2Rl dihpbnRlbF9kcCk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkcG9ydCA9IGRwX3RvX2Rp Z19wb3J0KGludGVsX2RwKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoZHBvcnQtPmJhc2UuYmFzZS5jcnRjKTsKLQl1MzIgZGVlbXBoX3JlZ192YWx1ZSwg bWFyZ2luX3JlZ192YWx1ZSwgdmFsOworCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0g JmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZTsKKwl1MzIgZGVlbXBoX3JlZ192YWx1ZSwg bWFyZ2luX3JlZ192YWx1ZTsKKwlib29sIHVuaXFfdHJhbnNfc2NhbGUgPSBmYWxzZTsKIAl1aW50 OF90IHRyYWluX3NldCA9IGludGVsX2RwLT50cmFpbl9zZXRbMF07Ci0JZW51bSBkcGlvX2NoYW5u ZWwgY2ggPSB2bHZfZHBvcnRfdG9fY2hhbm5lbChkcG9ydCk7Ci0JZW51bSBwaXBlIHBpcGUgPSBp bnRlbF9jcnRjLT5waXBlOwotCWludCBpOwogCiAJc3dpdGNoICh0cmFpbl9zZXQgJiBEUF9UUkFJ Tl9QUkVfRU1QSEFTSVNfTUFTSykgewogCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoK QEAgLTMzNzUsNyArMzM2NCw3IEBAIHN0YXRpYyB1aW50MzJfdCBjaHZfc2lnbmFsX2xldmVscyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUxfMzoKIAkJCWRlZW1waF9yZWdfdmFsdWUgPSAxMjg7CiAJCQltYXJnaW5fcmVnX3ZhbHVl ID0gMTU0OwotCQkJLyogRklYTUUgZXh0cmEgdG8gc2V0IGZvciAxMjAwICovCisJCQl1bmlxX3Ry YW5zX3NjYWxlID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIDA7CkBA IC0zNDI3LDg4ICszNDE2LDggQEAgc3RhdGljIHVpbnQzMl90IGNodl9zaWduYWxfbGV2ZWxzKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiAJCXJldHVybiAwOwogCX0KIAotCW11dGV4X2xvY2so JmRldl9wcml2LT5zYl9sb2NrKTsKLQotCS8qIENsZWFyIGNhbGMgaW5pdCAqLwotCXZhbCA9IHZs dl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzEwKGNoKSk7Ci0JdmFsICY9 IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFf VFgzKTsKLQl2YWwgJj0gfihEUElPX1BDU19UWDFERUVNUF9NQVNLIHwgRFBJT19QQ1NfVFgyREVF TVBfTUFTSyk7Ci0JdmFsIHw9IERQSU9fUENTX1RYMURFRU1QXzlQNSB8IERQSU9fUENTX1RYMkRF RU1QXzlQNTsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAo Y2gpLCB2YWwpOwotCi0JaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIpIHsK LQkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAoY2gp KTsKLQkJdmFsICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJ TkdfQ0FMQ19UWDFfVFgzKTsKLQkJdmFsICY9IH4oRFBJT19QQ1NfVFgxREVFTVBfTUFTSyB8IERQ SU9fUENTX1RYMkRFRU1QX01BU0spOwotCQl2YWwgfD0gRFBJT19QQ1NfVFgxREVFTVBfOVA1IHwg RFBJT19QQ1NfVFgyREVFTVBfOVA1OwotCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwg VkxWX1BDUzIzX0RXMTAoY2gpLCB2YWwpOwotCX0KLQotCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2 X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzkoY2gpKTsKLQl2YWwgJj0gfihEUElPX1BDU19UWDFN QVJHSU5fTUFTSyB8IERQSU9fUENTX1RYMk1BUkdJTl9NQVNLKTsKLQl2YWwgfD0gRFBJT19QQ1Nf VFgxTUFSR0lOXzAwMCB8IERQSU9fUENTX1RYMk1BUkdJTl8wMDA7Ci0Jdmx2X2RwaW9fd3JpdGUo ZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzkoY2gpLCB2YWwpOwotCi0JaWYgKGludGVsX2Ny dGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIpIHsKLQkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZf cHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXOShjaCkpOwotCQl2YWwgJj0gfihEUElPX1BDU19UWDFN QVJHSU5fTUFTSyB8IERQSU9fUENTX1RYMk1BUkdJTl9NQVNLKTsKLQkJdmFsIHw9IERQSU9fUENT X1RYMU1BUkdJTl8wMDAgfCBEUElPX1BDU19UWDJNQVJHSU5fMDAwOwotCQl2bHZfZHBpb193cml0 ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXOShjaCksIHZhbCk7Ci0JfQotCi0JLyogUHJv Z3JhbSBzd2luZyBkZWVtcGggKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfY3J0Yy0+Y29uZmln LT5sYW5lX2NvdW50OyBpKyspIHsKLQkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlw ZSwgQ0hWX1RYX0RXNChjaCwgaSkpOwotCQl2YWwgJj0gfkRQSU9fU1dJTkdfREVFTVBIOVA1X01B U0s7Ci0JCXZhbCB8PSBkZWVtcGhfcmVnX3ZhbHVlIDw8IERQSU9fU1dJTkdfREVFTVBIOVA1X1NI SUZUOwotCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXNChjaCwgaSks IHZhbCk7Ci0JfQotCi0JLyogUHJvZ3JhbSBzd2luZyBtYXJnaW4gKi8KLQlmb3IgKGkgPSAwOyBp IDwgaW50ZWxfY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50OyBpKyspIHsKLQkJdmFsID0gdmx2X2Rw aW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXMihjaCwgaSkpOwotCi0JCXZhbCAmPSB+ RFBJT19TV0lOR19NQVJHSU4wMDBfTUFTSzsKLQkJdmFsIHw9IG1hcmdpbl9yZWdfdmFsdWUgPDwg RFBJT19TV0lOR19NQVJHSU4wMDBfU0hJRlQ7Ci0KLQkJLyoKLQkJICogU3VwcG9zZWRseSB0aGlz IHZhbHVlIHNob3VsZG4ndCBtYXR0ZXIgd2hlbiB1bmlxdWUgdHJhbnNpdGlvbgotCQkgKiBzY2Fs ZSBpcyBkaXNhYmxlZCwgYnV0IGluIGZhY3QgaXQgZG9lcyBtYXR0ZXIuIExldCdzIGp1c3QKLQkJ ICogYWx3YXlzIHByb2dyYW0gdGhlIHNhbWUgdmFsdWUgYW5kIGhvcGUgaXQncyBPSy4KLQkJICov Ci0JCXZhbCAmPSB+KDB4ZmYgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUKTsKLQkJdmFs IHw9IDB4OWEgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUOwotCi0JCXZsdl9kcGlvX3dy aXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFcyKGNoLCBpKSwgdmFsKTsKLQl9Ci0KLQkvKgot CSAqIFRoZSBkb2N1bWVudCBzYWlkIGl0IG5lZWRzIHRvIHNldCBiaXQgMjcgZm9yIGNoMCBhbmQg Yml0IDI2Ci0JICogZm9yIGNoMS4gTWlnaHQgYmUgYSB0eXBvIGluIHRoZSBkb2MuCi0JICogRm9y IG5vdywgZm9yIHRoaXMgdW5pcXVlIHRyYW5zaXRpb24gc2NhbGUgc2VsZWN0aW9uLCBzZXQgYml0 Ci0JICogMjcgZm9yIGNoMCBhbmQgY2gxLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9j cnRjLT5jb25maWctPmxhbmVfY291bnQ7IGkrKykgewotCQl2YWwgPSB2bHZfZHBpb19yZWFkKGRl dl9wcml2LCBwaXBlLCBDSFZfVFhfRFczKGNoLCBpKSk7Ci0JCWlmIChjaHZfbmVlZF91bmlxX3Ry YW5zX3NjYWxlKHRyYWluX3NldCkpCi0JCQl2YWwgfD0gRFBJT19UWF9VTklRX1RSQU5TX1NDQUxF X0VOOwotCQllbHNlCi0JCQl2YWwgJj0gfkRQSU9fVFhfVU5JUV9UUkFOU19TQ0FMRV9FTjsKLQkJ dmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzMoY2gsIGkpLCB2YWwpOwot CX0KLQotCS8qIFN0YXJ0IHN3aW5nIGNhbGN1bGF0aW9uICovCi0JdmFsID0gdmx2X2RwaW9fcmVh ZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpKTsKLQl2YWwgfD0gRFBJT19QQ1Nf U1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgzOwotCXZsdl9k cGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCksIHZhbCk7Ci0KLQlp ZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50ID4gMikgewotCQl2YWwgPSB2bHZfZHBp b19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCkpOwotCQl2YWwgfD0gRFBJ T19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgzOwot CQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAoY2gpLCB2YWwp OwotCX0KLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNiX2xvY2spOworCWNodl9zZXRfcGh5 X3NpZ25hbF9sZXZlbChlbmNvZGVyLCBkZWVtcGhfcmVnX3ZhbHVlLAorCQkJCSBtYXJnaW5fcmVn X3ZhbHVlLCB1bmlxX3RyYW5zX3NjYWxlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBpb19waHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwaW9fcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u Y2JlMTcwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cGlvX3BoeS5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQtMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCisKK3ZvaWQgY2h2X3NldF9w aHlfc2lnbmFsX2xldmVsKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgICAg dTMyIGRlZW1waF9yZWdfdmFsdWUsIHUzMiBtYXJnaW5fcmVnX3ZhbHVlLAorCQkJICAgICAgYm9v bCB1bmlxX3RyYW5zX3NjYWxlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3Bv cnQgKmRwb3J0ID0gZW5jX3RvX2RpZ19wb3J0KCZlbmNvZGVyLT5iYXNlKTsKKwlzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoZHBvcnQtPmJhc2UuYmFzZS5jcnRj KTsKKwllbnVtIGRwaW9fY2hhbm5lbCBjaCA9IHZsdl9kcG9ydF90b19jaGFubmVsKGRwb3J0KTsK KwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisJdTMyIHZhbDsKKwlpbnQgaTsK KworCW11dGV4X2xvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKKworCS8qIENsZWFyIGNhbGMgaW5p dCAqLworCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzEw KGNoKSk7CisJdmFsICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1Nf U1dJTkdfQ0FMQ19UWDFfVFgzKTsKKwl2YWwgJj0gfihEUElPX1BDU19UWDFERUVNUF9NQVNLIHwg RFBJT19QQ1NfVFgyREVFTVBfTUFTSyk7CisJdmFsIHw9IERQSU9fUENTX1RYMURFRU1QXzlQNSB8 IERQSU9fUENTX1RYMkRFRU1QXzlQNTsKKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwg VkxWX1BDUzAxX0RXMTAoY2gpLCB2YWwpOworCisJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGFu ZV9jb3VudCA+IDIpIHsKKwkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxW X1BDUzIzX0RXMTAoY2gpKTsKKwkJdmFsICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgy IHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgzKTsKKwkJdmFsICY9IH4oRFBJT19QQ1NfVFgx REVFTVBfTUFTSyB8IERQSU9fUENTX1RYMkRFRU1QX01BU0spOworCQl2YWwgfD0gRFBJT19QQ1Nf VFgxREVFTVBfOVA1IHwgRFBJT19QQ1NfVFgyREVFTVBfOVA1OworCQl2bHZfZHBpb193cml0ZShk ZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAoY2gpLCB2YWwpOworCX0KKworCXZhbCA9IHZs dl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzkoY2gpKTsKKwl2YWwgJj0g fihEUElPX1BDU19UWDFNQVJHSU5fTUFTSyB8IERQSU9fUENTX1RYMk1BUkdJTl9NQVNLKTsKKwl2 YWwgfD0gRFBJT19QQ1NfVFgxTUFSR0lOXzAwMCB8IERQSU9fUENTX1RYMk1BUkdJTl8wMDA7CisJ dmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzkoY2gpLCB2YWwpOwor CisJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIpIHsKKwkJdmFsID0gdmx2 X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXOShjaCkpOworCQl2YWwgJj0g fihEUElPX1BDU19UWDFNQVJHSU5fTUFTSyB8IERQSU9fUENTX1RYMk1BUkdJTl9NQVNLKTsKKwkJ dmFsIHw9IERQSU9fUENTX1RYMU1BUkdJTl8wMDAgfCBEUElPX1BDU19UWDJNQVJHSU5fMDAwOwor CQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXOShjaCksIHZhbCk7 CisJfQorCisJLyogUHJvZ3JhbSBzd2luZyBkZWVtcGggKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW50 ZWxfY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50OyBpKyspIHsKKwkJdmFsID0gdmx2X2RwaW9fcmVh ZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXNChjaCwgaSkpOworCQl2YWwgJj0gfkRQSU9fU1dJ TkdfREVFTVBIOVA1X01BU0s7CisJCXZhbCB8PSBkZWVtcGhfcmVnX3ZhbHVlIDw8IERQSU9fU1dJ TkdfREVFTVBIOVA1X1NISUZUOworCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hW X1RYX0RXNChjaCwgaSksIHZhbCk7CisJfQorCisJLyogUHJvZ3JhbSBzd2luZyBtYXJnaW4gKi8K Kwlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50OyBpKyspIHsK KwkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXMihjaCwgaSkp OworCisJCXZhbCAmPSB+RFBJT19TV0lOR19NQVJHSU4wMDBfTUFTSzsKKwkJdmFsIHw9IG1hcmdp bl9yZWdfdmFsdWUgPDwgRFBJT19TV0lOR19NQVJHSU4wMDBfU0hJRlQ7CisKKwkJLyoKKwkJICog U3VwcG9zZWRseSB0aGlzIHZhbHVlIHNob3VsZG4ndCBtYXR0ZXIgd2hlbiB1bmlxdWUgdHJhbnNp dGlvbgorCQkgKiBzY2FsZSBpcyBkaXNhYmxlZCwgYnV0IGluIGZhY3QgaXQgZG9lcyBtYXR0ZXIu IExldCdzIGp1c3QKKwkJICogYWx3YXlzIHByb2dyYW0gdGhlIHNhbWUgdmFsdWUgYW5kIGhvcGUg aXQncyBPSy4KKwkJICovCisJCXZhbCAmPSB+KDB4ZmYgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxF X1NISUZUKTsKKwkJdmFsIHw9IDB4OWEgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUOwor CisJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFcyKGNoLCBpKSwgdmFs KTsKKwl9CisKKwkvKgorCSAqIFRoZSBkb2N1bWVudCBzYWlkIGl0IG5lZWRzIHRvIHNldCBiaXQg MjcgZm9yIGNoMCBhbmQgYml0IDI2CisJICogZm9yIGNoMS4gTWlnaHQgYmUgYSB0eXBvIGluIHRo ZSBkb2MuCisJICogRm9yIG5vdywgZm9yIHRoaXMgdW5pcXVlIHRyYW5zaXRpb24gc2NhbGUgc2Vs ZWN0aW9uLCBzZXQgYml0CisJICogMjcgZm9yIGNoMCBhbmQgY2gxLgorCSAqLworCWZvciAoaSA9 IDA7IGkgPCBpbnRlbF9jcnRjLT5jb25maWctPmxhbmVfY291bnQ7IGkrKykgeworCQl2YWwgPSB2 bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFczKGNoLCBpKSk7CisJCWlmICh1 bmlxX3RyYW5zX3NjYWxlKQorCQkJdmFsIHw9IERQSU9fVFhfVU5JUV9UUkFOU19TQ0FMRV9FTjsK KwkJZWxzZQorCQkJdmFsICY9IH5EUElPX1RYX1VOSVFfVFJBTlNfU0NBTEVfRU47CisJCXZsdl9k cGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFczKGNoLCBpKSwgdmFsKTsKKwl9CisK KwkvKiBTdGFydCBzd2luZyBjYWxjdWxhdGlvbiAqLworCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2 X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzEwKGNoKSk7CisJdmFsIHw9IERQSU9fUENTX1NXSU5H X0NBTENfVFgwX1RYMiB8IERQSU9fUENTX1NXSU5HX0NBTENfVFgxX1RYMzsKKwl2bHZfZHBpb193 cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpLCB2YWwpOworCisJaWYgKGlu dGVsX2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIpIHsKKwkJdmFsID0gdmx2X2RwaW9fcmVh ZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAoY2gpKTsKKwkJdmFsIHw9IERQSU9fUENT X1NXSU5HX0NBTENfVFgwX1RYMiB8IERQSU9fUENTX1NXSU5HX0NBTENfVFgxX1RYMzsKKwkJdmx2 X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MyM19EVzEwKGNoKSwgdmFsKTsKKwl9 CisKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKKworfQorCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9oZG1pLmMKaW5kZXggODBkOTg0MS4uZWVkNDZjMiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2hkbWkuYwpAQCAtMTkxMyw3NyArMTkxMywxMSBAQCBzdGF0aWMgdm9pZCBjaHZfaGRtaV9w cmVfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQogCS8qIERlYXNzZXJ0IGRh dGEgbGFuZSByZXNldCAqLwogCWNodl9kYXRhX2xhbmVfc29mdF9yZXNldChlbmNvZGVyLCBmYWxz ZSk7CiAKLQkvKiBDbGVhciBjYWxjIGluaXQgKi8KLQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9w cml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCkpOwotCXZhbCAmPSB+KERQSU9fUENTX1NXSU5H X0NBTENfVFgwX1RYMiB8IERQSU9fUENTX1NXSU5HX0NBTENfVFgxX1RYMyk7Ci0JdmFsICY9IH4o RFBJT19QQ1NfVFgxREVFTVBfTUFTSyB8IERQSU9fUENTX1RYMkRFRU1QX01BU0spOwotCXZhbCB8 PSBEUElPX1BDU19UWDFERUVNUF85UDUgfCBEUElPX1BDU19UWDJERUVNUF85UDU7Ci0Jdmx2X2Rw aW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzEwKGNoKSwgdmFsKTsKLQotCXZh bCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MyM19EVzEwKGNoKSk7Ci0J dmFsICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FM Q19UWDFfVFgzKTsKLQl2YWwgJj0gfihEUElPX1BDU19UWDFERUVNUF9NQVNLIHwgRFBJT19QQ1Nf VFgyREVFTVBfTUFTSyk7Ci0JdmFsIHw9IERQSU9fUENTX1RYMURFRU1QXzlQNSB8IERQSU9fUENT X1RYMkRFRU1QXzlQNTsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIz X0RXMTAoY2gpLCB2YWwpOwotCi0JdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwg VkxWX1BDUzAxX0RXOShjaCkpOwotCXZhbCAmPSB+KERQSU9fUENTX1RYMU1BUkdJTl9NQVNLIHwg RFBJT19QQ1NfVFgyTUFSR0lOX01BU0spOwotCXZhbCB8PSBEUElPX1BDU19UWDFNQVJHSU5fMDAw IHwgRFBJT19QQ1NfVFgyTUFSR0lOXzAwMDsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlw ZSwgVkxWX1BDUzAxX0RXOShjaCksIHZhbCk7Ci0KLQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9w cml2LCBwaXBlLCBWTFZfUENTMjNfRFc5KGNoKSk7Ci0JdmFsICY9IH4oRFBJT19QQ1NfVFgxTUFS R0lOX01BU0sgfCBEUElPX1BDU19UWDJNQVJHSU5fTUFTSyk7Ci0JdmFsIHw9IERQSU9fUENTX1RY MU1BUkdJTl8wMDAgfCBEUElPX1BDU19UWDJNQVJHSU5fMDAwOwotCXZsdl9kcGlvX3dyaXRlKGRl dl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFc5KGNoKSwgdmFsKTsKKwltdXRleF91bmxvY2soJmRl dl9wcml2LT5zYl9sb2NrKTsKIAogCS8qIEZJWE1FOiBQcm9ncmFtIHRoZSBzdXBwb3J0IHh4eCBW LWRCICovCiAJLyogVXNlIDgwMG1WLTBkQiAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsK LQkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXNChjaCwgaSkp OwotCQl2YWwgJj0gfkRQSU9fU1dJTkdfREVFTVBIOVA1X01BU0s7Ci0JCXZhbCB8PSAxMjggPDwg RFBJT19TV0lOR19ERUVNUEg5UDVfU0hJRlQ7Ci0JCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBw aXBlLCBDSFZfVFhfRFc0KGNoLCBpKSwgdmFsKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKSB7Ci0JCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzIo Y2gsIGkpKTsKLQotCQl2YWwgJj0gfkRQSU9fU1dJTkdfTUFSR0lOMDAwX01BU0s7Ci0JCXZhbCB8 PSAxMDIgPDwgRFBJT19TV0lOR19NQVJHSU4wMDBfU0hJRlQ7Ci0KLQkJLyoKLQkJICogU3VwcG9z ZWRseSB0aGlzIHZhbHVlIHNob3VsZG4ndCBtYXR0ZXIgd2hlbiB1bmlxdWUgdHJhbnNpdGlvbgot CQkgKiBzY2FsZSBpcyBkaXNhYmxlZCwgYnV0IGluIGZhY3QgaXQgZG9lcyBtYXR0ZXIuIExldCdz IGp1c3QKLQkJICogYWx3YXlzIHByb2dyYW0gdGhlIHNhbWUgdmFsdWUgYW5kIGhvcGUgaXQncyBP Sy4KLQkJICovCi0JCXZhbCAmPSB+KDB4ZmYgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZU KTsKLQkJdmFsIHw9IDB4OWEgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUOwotCi0JCXZs dl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFcyKGNoLCBpKSwgdmFsKTsKLQl9 Ci0KLQkvKgotCSAqIFRoZSBkb2N1bWVudCBzYWlkIGl0IG5lZWRzIHRvIHNldCBiaXQgMjcgZm9y IGNoMCBhbmQgYml0IDI2Ci0JICogZm9yIGNoMS4gTWlnaHQgYmUgYSB0eXBvIGluIHRoZSBkb2Mu Ci0JICogRm9yIG5vdywgZm9yIHRoaXMgdW5pcXVlIHRyYW5zaXRpb24gc2NhbGUgc2VsZWN0aW9u LCBzZXQgYml0Ci0JICogMjcgZm9yIGNoMCBhbmQgY2gxLgotCSAqLwotCWZvciAoaSA9IDA7IGkg PCA0OyBpKyspIHsKLQkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1RY X0RXMyhjaCwgaSkpOwotCQl2YWwgJj0gfkRQSU9fVFhfVU5JUV9UUkFOU19TQ0FMRV9FTjsKLQkJ dmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzMoY2gsIGkpLCB2YWwpOwot CX0KLQotCS8qIFN0YXJ0IHN3aW5nIGNhbGN1bGF0aW9uICovCi0JdmFsID0gdmx2X2RwaW9fcmVh ZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpKTsKLQl2YWwgfD0gRFBJT19QQ1Nf U1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgzOwotCXZsdl9k cGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCksIHZhbCk7Ci0KLQl2 YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCkpOwot CXZhbCB8PSBEUElPX1BDU19TV0lOR19DQUxDX1RYMF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxD X1RYMV9UWDM7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MyM19EVzEw KGNoKSwgdmFsKTsKLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNiX2xvY2spOworCWNodl9z ZXRfcGh5X3NpZ25hbF9sZXZlbChlbmNvZGVyLCAxMjgsIDEwMiwgZmFsc2UpOwogCiAJaW50ZWxf aGRtaS0+c2V0X2luZm9mcmFtZXMoJmVuY29kZXItPmJhc2UsCiAJCQkJICAgaW50ZWxfY3J0Yy0+ Y29uZmlnLT5oYXNfaGRtaV9zaW5rLAotLSAKMi40LjExCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK