From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH v5 1/6] drm: Add struct drm_rect and assorted utility functions Date: Wed, 24 Apr 2013 18:52:34 +0300 Message-ID: <1366818759-8707-2-git-send-email-ville.syrjala@linux.intel.com> References: <1366818759-8707-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1366818759-8707-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCnN0 cnVjdCBkcm1fcmVjdCByZXByZXNlbnRzIGEgc2ltcGxlIHJlY3RhbmdsZS4gVGhlIHV0aWxpdHkK ZnVuY3Rpb25zIGFyZSB0aGVyZSB0byBoZWxwIGRyaXZlciB3cml0ZXJzLgoKdjI6IE1vdmVkIHRo ZSByZWdpb24gc3R1ZmYgaW50byBpdHMgb3duIGZpbGUsIG1hZGUgdGhlIHNtYWxsZXIgZnVuY3MK ICAgIHN0YXRpYyBpbmxpbmUsIHVzZWQgNjRiaXQgbWF0aHMgaW4gdGhlIHNjYWxlZCBjbGlwcGlu ZyBmdW5jdGlvbiB0bwogICAgYXZvaWQgb3ZlcmZsb3dzIChpbnN0ZWFkIGl0IHdpbGwgc2F0dXJh dGUgdG8gSU5UX01JTiBvciBJTlRfTUFYKS4KdjM6IFJlbmFtZWQgZHJtX3JlZ2lvbiB0byBkcm1f cmVjdCwgZHJtX3JlZ2lvbl9jbGlwIHRvCiAgICBkcm1fcmVjdF9pbnRlcnNlY3QsIGFuZCBkcm1f cmVnaW9uX3N1YnNhbXBsZSB0byBkcm1fcmVjdF9kb3duc2NhbGUuCnY0OiBSZW5hbWVkIHNvbWUg ZnVuY3Rpb24gcGFyYW1ldGVycywgaW1wcm92ZSBrZXJuZWwtZG9jIGNvbW1lbnRzIGEgYml0LAog ICAgYW5kIGFjdHVhbGx5IGdlbmVyYXRlIGRvY3VtZW50YXRpb24gZm9yIGRybV9yZWN0LltjaF0u CnY1OiBzL1JFVFVUUk5TL1JFVFVSTlMvCgpSZXZpZXdlZC1ieTogTGF1cmVudCBQaW5jaGFydCA8 bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgpSZXZpZXdlZC1ieTogQ2hyaXMgV2ls c29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrD pGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi9E b2NCb29rL2RybS50bXBsIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICB8 ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2RybV9yZWN0LmMgICAgIHwgIDk2ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX3JlY3QuaCAgICAgICAgIHwgMTMy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5n ZWQsIDIzMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2RybV9yZWN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2Ry bS9kcm1fcmVjdC5oCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBs IGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCmluZGV4IGY5ZGYzYjguLjdjN2FmMjUg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAorKysgYi9Eb2N1bWVu dGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKQEAgLTE2NTMsNiArMTY1Myw4IEBAIHZvaWQgaW50ZWxf Y3J0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKICAgICA8c2VjdDI+CiAgICAgICA8dGl0 bGU+S01TIEFQSSBGdW5jdGlvbnM8L3RpdGxlPgogIUVkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMu YworIUVkcml2ZXJzL2dwdS9kcm0vZHJtX3JlY3QuYworIUZpbmNsdWRlL2RybS9kcm1fcmVjdC5o CiAgICAgPC9zZWN0Mj4KICAgPC9zZWN0MT4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDZhNDIxMTUuLjMzNzRh YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDggQEAgZHJtLXkgICAgICAgOj0JZHJtX2F1dGgu byBkcm1fYnVmZmVyLm8gZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCiAJCWRybV9wbGF0Zm9ybS5v IGRybV9zeXNmcy5vIGRybV9oYXNodGFiLm8gZHJtX21tLm8gXAogCQlkcm1fY3J0Yy5vIGRybV9t b2Rlcy5vIGRybV9lZGlkLm8gXAogCQlkcm1faW5mby5vIGRybV9kZWJ1Z2ZzLm8gZHJtX2VuY29k ZXJfc2xhdmUubyBcCi0JCWRybV90cmFjZV9wb2ludHMubyBkcm1fZ2xvYmFsLm8gZHJtX3ByaW1l Lm8KKwkJZHJtX3RyYWNlX3BvaW50cy5vIGRybV9nbG9iYWwubyBkcm1fcHJpbWUubyBcCisJCWRy bV9yZWN0Lm8KIAogZHJtLSQoQ09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KIGRybS0kKENP TkZJR19EUk1fR0VNX0NNQV9IRUxQRVIpICs9IGRybV9nZW1fY21hX2hlbHBlci5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3JlY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmVj dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMDkxZWMKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3JlY3QuYwpAQCAtMCwwICsxLDk2IEBACisv KgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisg KiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9yZWN0Lmg+CisKKy8qKgorICogZHJtX3JlY3Rf aW50ZXJzZWN0IC0gaW50ZXJzZWN0IHR3byByZWN0YW5nbGVzCisgKiBAcjE6IGZpcnN0IHJlY3Rh bmdsZQorICogQHIyOiBzZWNvbmQgcmVjdGFuZ2xlCisgKgorICogQ2FsY3VsYXRlIHRoZSBpbnRl cnNlY3Rpb24gb2YgcmVjdGFuZ2xlcyBAcjEgYW5kIEByMi4KKyAqIEByMSB3aWxsIGJlIG92ZXJ3 cml0dGVuIHdpdGggdGhlIGludGVyc2VjdGlvbi4KKyAqCisgKiBSRVRVUk5TOgorICogJXRydWUg aWYgcmVjdGFuZ2xlIEByMSBpcyBzdGlsbCB2aXNpYmxlIGFmdGVyIHRoZSBvcGVyYXRpb24sCisg KiAlZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIGRybV9yZWN0X2ludGVyc2VjdChzdHJ1Y3Qg ZHJtX3JlY3QgKnIxLCBjb25zdCBzdHJ1Y3QgZHJtX3JlY3QgKnIyKQoreworCXIxLT54MSA9IG1h eChyMS0+eDEsIHIyLT54MSk7CisJcjEtPnkxID0gbWF4KHIxLT55MSwgcjItPnkxKTsKKwlyMS0+ eDIgPSBtaW4ocjEtPngyLCByMi0+eDIpOworCXIxLT55MiA9IG1pbihyMS0+eTIsIHIyLT55Mik7 CisKKwlyZXR1cm4gZHJtX3JlY3RfdmlzaWJsZShyMSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9y ZWN0X2ludGVyc2VjdCk7CisKKy8qKgorICogZHJtX3JlY3RfY2xpcF9zY2FsZWQgLSBwZXJmb3Jt IGEgc2NhbGVkIGNsaXAgb3BlcmF0aW9uCisgKiBAc3JjOiBzb3VyY2Ugd2luZG93IHJlY3Rhbmds ZQorICogQGRzdDogZGVzdGluYXRpb24gd2luZG93IHJlY3RhbmdsZQorICogQGNsaXA6IGNsaXAg cmVjdGFuZ2xlCisgKiBAaHNjYWxlOiBob3Jpem9udGFsIHNjYWxpbmcgZmFjdG9yCisgKiBAdnNj YWxlOiB2ZXJ0aWNhbCBzY2FsaW5nIGZhY3RvcgorICoKKyAqIENsaXAgcmVjdGFuZ2xlIEBkc3Qg YnkgcmVjdGFuZ2xlIEBjbGlwLiBDbGlwIHJlY3RhbmdsZSBAc3JjIGJ5IHRoZQorICogc2FtZSBh bW91bnRzIG11bHRpcGxpZWQgYnkgQGhzY2FsZSBhbmQgQHZzY2FsZS4KKyAqCisgKiBSRVRVUk5T OgorICogJXRydWUgaWYgcmVjdGFuZ2xlIEBkc3QgaXMgc3RpbGwgdmlzaWJsZSBhZnRlciBiZWlu ZyBjbGlwcGVkLAorICogJWZhbHNlIG90aGVyd2lzZQorICovCitib29sIGRybV9yZWN0X2NsaXBf c2NhbGVkKHN0cnVjdCBkcm1fcmVjdCAqc3JjLCBzdHJ1Y3QgZHJtX3JlY3QgKmRzdCwKKwkJCSAg Y29uc3Qgc3RydWN0IGRybV9yZWN0ICpjbGlwLAorCQkJICBpbnQgaHNjYWxlLCBpbnQgdnNjYWxl KQoreworCWludCBkaWZmOworCisJZGlmZiA9IGNsaXAtPngxIC0gZHN0LT54MTsKKwlpZiAoZGlm ZiA+IDApIHsKKwkJaW50NjRfdCB0bXAgPSBzcmMtPngxICsgKGludDY0X3QpIGRpZmYgKiBoc2Nh bGU7CisJCXNyYy0+eDEgPSBjbGFtcF90KGludDY0X3QsIHRtcCwgSU5UX01JTiwgSU5UX01BWCk7 CisJfQorCWRpZmYgPSBjbGlwLT55MSAtIGRzdC0+eTE7CisJaWYgKGRpZmYgPiAwKSB7CisJCWlu dDY0X3QgdG1wID0gc3JjLT55MSArIChpbnQ2NF90KSBkaWZmICogdnNjYWxlOworCQlzcmMtPnkx ID0gY2xhbXBfdChpbnQ2NF90LCB0bXAsIElOVF9NSU4sIElOVF9NQVgpOworCX0KKwlkaWZmID0g ZHN0LT54MiAtIGNsaXAtPngyOworCWlmIChkaWZmID4gMCkgeworCQlpbnQ2NF90IHRtcCA9IHNy Yy0+eDIgLSAoaW50NjRfdCkgZGlmZiAqIGhzY2FsZTsKKwkJc3JjLT54MiA9IGNsYW1wX3QoaW50 NjRfdCwgdG1wLCBJTlRfTUlOLCBJTlRfTUFYKTsKKwl9CisJZGlmZiA9IGRzdC0+eTIgLSBjbGlw LT55MjsKKwlpZiAoZGlmZiA+IDApIHsKKwkJaW50NjRfdCB0bXAgPSBzcmMtPnkyIC0gKGludDY0 X3QpIGRpZmYgKiB2c2NhbGU7CisJCXNyYy0+eTIgPSBjbGFtcF90KGludDY0X3QsIHRtcCwgSU5U X01JTiwgSU5UX01BWCk7CisJfQorCisJcmV0dXJuIGRybV9yZWN0X2ludGVyc2VjdChkc3QsIGNs aXApOworfQorRVhQT1JUX1NZTUJPTChkcm1fcmVjdF9jbGlwX3NjYWxlZCk7CmRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fcmVjdC5oIGIvaW5jbHVkZS9kcm0vZHJtX3JlY3QuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyNzhjCi0tLSAvZGV2L251bGwKKysrIGIv aW5jbHVkZS9kcm0vZHJtX3JlY3QuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdo dCAoQykgMjAxMS0yMDEzIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgRFJNX1JFQ1RfSAorI2RlZmlu ZSBEUk1fUkVDVF9ICisKKy8qKgorICogZHJtX3JlY3QgLSB0d28gZGltZW5zaW9uYWwgcmVjdGFu Z2xlCisgKiBAeDE6IGhvcml6b250YWwgc3RhcnRpbmcgY29vcmRpbmF0ZSAoaW5jbHVzaXZlKQor ICogQHgyOiBob3Jpem9udGFsIGVuZGluZyBjb29yZGluYXRlIChleGNsdXNpdmUpCisgKiBAeTE6 IHZlcnRpY2FsIHN0YXJ0aW5nIGNvb3JkaW5hdGUgKGluY2x1c2l2ZSkKKyAqIEB5MjogdmVydGlj YWwgZW5kaW5nIGNvb3JkaW5hdGUgKGV4Y2x1c2l2ZSkKKyAqLworc3RydWN0IGRybV9yZWN0IHsK KwlpbnQgeDEsIHkxLCB4MiwgeTI7Cit9OworCisvKioKKyAqIGRybV9yZWN0X2FkanVzdF9zaXpl IC0gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSByZWN0YW5nbGUKKyAqIEByOiByZWN0YW5nbGUgdG8g YmUgYWRqdXN0ZWQKKyAqIEBkdzogaG9yaXpvbnRhbCBhZGp1c3RtZW50CisgKiBAZGg6IHZlcnRp Y2FsIGFkanVzdG1lbnQKKyAqCisgKiBDaGFuZ2UgdGhlIHNpemUgb2YgcmVjdGFuZ2xlIEByIGJ5 IEBkdyBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24sCisgKiBhbmQgYnkgQGRoIGluIHRoZSB2 ZXJ0aWNhbCBkaXJlY3Rpb24sIHdoaWxlIGtlZXBpbmcgdGhlIGNlbnRlcgorICogb2YgQHIgc3Rh dGlvbmFyeS4KKyAqCisgKiBQb3NpdGl2ZSBAZHcgYW5kIEBkaCBpbmNyZWFzZSB0aGUgc2l6ZSwg bmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZHJt X3JlY3RfYWRqdXN0X3NpemUoc3RydWN0IGRybV9yZWN0ICpyLCBpbnQgZHcsIGludCBkaCkKK3sK KwlyLT54MSAtPSBkdyA+PiAxOworCXItPnkxIC09IGRoID4+IDE7CisJci0+eDIgKz0gKGR3ICsg MSkgPj4gMTsKKwlyLT55MiArPSAoZGggKyAxKSA+PiAxOworfQorCisvKioKKyAqIGRybV9yZWN0 X3RyYW5zbGF0ZSAtIHRyYW5zbGF0ZSB0aGUgcmVjdGFuZ2xlCisgKiBAcjogcmVjdGFuZ2xlIHRv IGJlIHRyYW5sYXRlZAorICogQGR4OiBob3Jpem9udGFsIHRyYW5zbGF0aW9uCisgKiBAZHk6IHZl cnRpY2FsIHRyYW5zbGF0aW9uCisgKgorICogTW92ZSByZWN0YW5nbGUgQHIgYnkgQGR4IGluIHRo ZSBob3Jpem9udGFsIGRpcmVjdGlvbiwKKyAqIGFuZCBieSBAZHkgaW4gdGhlIHZlcnRpY2FsIGRp cmVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRybV9yZWN0X3RyYW5zbGF0ZShzdHJ1 Y3QgZHJtX3JlY3QgKnIsIGludCBkeCwgaW50IGR5KQoreworCXItPngxICs9IGR4OworCXItPnkx ICs9IGR5OworCXItPngyICs9IGR4OworCXItPnkyICs9IGR5OworfQorCisvKioKKyAqIGRybV9y ZWN0X2Rvd25zY2FsZSAtIGRvd25zY2FsZSBhIHJlY3RhbmdsZQorICogQHI6IHJlY3RhbmdsZSB0 byBiZSBkb3duc2NhbGVkCisgKiBAaG9yejogaG9yaXpvbnRhbCBkb3duc2NhbGUgZmFjdG9yCisg KiBAdmVydDogdmVydGljYWwgZG93bnNjYWxlIGZhY3RvcgorICoKKyAqIERpdmlkZSB0aGUgY29v cmRpbmF0ZXMgb2YgcmVjdGFuZ2xlIEByIGJ5IEBob3J6IGFuZCBAdmVydC4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkIGRybV9yZWN0X2Rvd25zY2FsZShzdHJ1Y3QgZHJtX3JlY3QgKnIsIGludCBo b3J6LCBpbnQgdmVydCkKK3sKKwlyLT54MSAvPSBob3J6OworCXItPnkxIC89IHZlcnQ7CisJci0+ eDIgLz0gaG9yejsKKwlyLT55MiAvPSB2ZXJ0OworfQorCisvKioKKyAqIGRybV9yZWN0X3dpZHRo IC0gZGV0ZXJtaW5lIHRoZSByZWN0YW5nbGUgd2lkdGgKKyAqIEByOiByZWN0YW5nbGUgd2hvc2Ug d2lkdGggaXMgcmV0dXJuZWQKKyAqCisgKiBSRVRVUk5TOgorICogVGhlIHdpZHRoIG9mIHRoZSBy ZWN0YW5nbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRybV9yZWN0X3dpZHRoKGNvbnN0IHN0 cnVjdCBkcm1fcmVjdCAqcikKK3sKKwlyZXR1cm4gci0+eDIgLSByLT54MTsKK30KKworLyoqCisg KiBkcm1fcmVjdF9oZWlnaHQgLSBkZXRlcm1pbmUgdGhlIHJlY3RhbmdsZSBoZWlnaHQKKyAqIEBy OiByZWN0YW5nbGUgd2hvc2UgaGVpZ2h0IGlzIHJldHVybmVkCisgKgorICogUkVUVVJOUzoKKyAq IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZHJt X3JlY3RfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqcikKK3sKKwlyZXR1cm4gci0+eTIg LSByLT55MTsKK30KKworLyoqCisgKiBkcm1fcmVjdF92aXNpYmxlIC0gZGV0ZXJtaW5lIGlmIHRo ZSB0aGUgcmVjdGFuZ2xlIGlzIHZpc2libGUKKyAqIEByOiByZWN0YW5nbGUgd2hvc2UgdmlzaWJp bGl0eSBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTlM6CisgKiAldHJ1ZSBpZiB0aGUgcmVjdGFu Z2xlIGlzIHZpc2libGUsICVmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9v bCBkcm1fcmVjdF92aXNpYmxlKGNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqcikKK3sKKwlyZXR1cm4g ZHJtX3JlY3Rfd2lkdGgocikgPiAwICYmIGRybV9yZWN0X2hlaWdodChyKSA+IDA7Cit9CisKK2Jv b2wgZHJtX3JlY3RfaW50ZXJzZWN0KHN0cnVjdCBkcm1fcmVjdCAqciwgY29uc3Qgc3RydWN0IGRy bV9yZWN0ICpjbGlwKTsKK2Jvb2wgZHJtX3JlY3RfY2xpcF9zY2FsZWQoc3RydWN0IGRybV9yZWN0 ICpzcmMsIHN0cnVjdCBkcm1fcmVjdCAqZHN0LAorCQkJICBjb25zdCBzdHJ1Y3QgZHJtX3JlY3Qg KmNsaXAsCisJCQkgIGludCBoc2NhbGUsIGludCB2c2NhbGUpOworCisjZW5kaWYKLS0gCjEuOC4x LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==