From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: =?UTF-8?q?=5BPATCH=2001/10=5D=20drm=3A=20rename=20drm=5Fdp=5Fi2c=5Fhelper=2Ec=20to=20drm=5Fdp=5Fhelper=2Ec?= Date: Thu, 18 Oct 2012 10:15:23 +0200 Message-ID: <1350548132-3037-2-git-send-email-daniel.vetter@ffwll.ch> References: <1350548132-3037-1-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ee0-f49.google.com (mail-ee0-f49.google.com [74.125.83.49]) by gabe.freedesktop.org (Postfix) with ESMTP id 5F1399E85C for ; Thu, 18 Oct 2012 01:15:40 -0700 (PDT) Received: by mail-ee0-f49.google.com with SMTP id c1so4333516eek.36 for ; Thu, 18 Oct 2012 01:15:40 -0700 (PDT) In-Reply-To: <1350548132-3037-1-git-send-email-daniel.vetter@ffwll.ch> 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: DRI Development Cc: nouveau@lists.freedesktop.org, Intel Graphics Development , xorg-driver-ati@lists.x.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org SSB3YW50IHRvIG1vdmUgc29tZSBkcCBsaW5rIHRyYWluaW5nIGhlbHBlcnMgaW50byB0aGlzIHBs YWNlLCBzbyBpbgp0aGUgZnV0dXJlIHRoaXMgd29uJ3QgYmUganVzdCBhYm91dCBpMmMgYW55IGxv bmdlci4KClNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwu Y2g+Ci0tLQogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgfCAgIDIgKy0KIGRy aXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMgICAgIHwgMjA4ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9pMmNfaGVscGVyLmMg fCAyMDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5n ZWQsIDIwOSBpbnNlcnRpb25zKCspLCAyMDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9kcm1fZHBfaTJjX2hlbHBlci5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDJmZjVjZWYu LmRjNGU4OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTE5LDcgKzE5LDcgQEAgZHJtLSQoQ09ORklHX0RSTV9H RU1fQ01BX0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KIAogZHJtLXVzYi15ICAgOj0g ZHJtX3VzYi5vCiAKLWRybV9rbXNfaGVscGVyLXkgOj0gZHJtX2ZiX2hlbHBlci5vIGRybV9jcnRj X2hlbHBlci5vIGRybV9kcF9pMmNfaGVscGVyLm8KK2RybV9rbXNfaGVscGVyLXkgOj0gZHJtX2Zi X2hlbHBlci5vIGRybV9jcnRjX2hlbHBlci5vIGRybV9kcF9oZWxwZXIubwogZHJtX2ttc19oZWxw ZXItJChDT05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCiBk cm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fS01TX0NNQV9IRUxQRVIpICs9IGRybV9mYl9jbWFf aGVscGVyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZjdlYmEwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZHBfaGVscGVyLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAw OSBLZWl0aCBQYWNrYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwg ZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0 aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlk ZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3Bp ZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAorICog dGhhdCB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2 ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0 aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lv bi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucworICogYWJv dXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQg aXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFu dHkuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVT IFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgKiBFVkVO VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg SU5ESVJFQ1QgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFU U09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICog VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFVTRSBPUiBQRVJGT1JNQU5DRQorICogT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgv ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5o PgorI2luY2x1ZGUgImRybV9kcF9oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1QLmgiCisKKy8qIFJ1 biBhIHNpbmdsZSBBVVhfQ0ggSTJDIHRyYW5zYWN0aW9uLCB3cml0aW5nL3JlYWRpbmcgZGF0YSBh cyBuZWNlc3NhcnkgKi8KK3N0YXRpYyBpbnQKK2kyY19hbGdvX2RwX2F1eF90cmFuc2FjdGlvbihz dHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtb2RlLAorCQkJICAgIHVpbnQ4X3Qgd3Jp dGVfYnl0ZSwgdWludDhfdCAqcmVhZF9ieXRlKQoreworCXN0cnVjdCBpMmNfYWxnb19kcF9hdXhf ZGF0YSAqYWxnb19kYXRhID0gYWRhcHRlci0+YWxnb19kYXRhOworCWludCByZXQ7CisJCisJcmV0 ID0gKCphbGdvX2RhdGEtPmF1eF9jaCkoYWRhcHRlciwgbW9kZSwKKwkJCQkgICB3cml0ZV9ieXRl LCByZWFkX2J5dGUpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJMkMgb3ZlciBBVVggQ0gK KyAqLworCisvKgorICogU2VuZCB0aGUgYWRkcmVzcy4gSWYgdGhlIEkyQyBsaW5rIGlzIHJ1bm5p bmcsIHRoaXMgJ3Jlc3RhcnRzJworICogdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgbmV3IGFkZHJl c3MsIHRoaXMgaXMgdXNlZCBmb3IgZG9pbmcKKyAqIGEgd3JpdGUgZm9sbG93ZWQgYnkgYSByZWFk IChhcyBuZWVkZWQgZm9yIEREQykKKyAqLworc3RhdGljIGludAoraTJjX2FsZ29fZHBfYXV4X2Fk ZHJlc3Moc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1MTYgYWRkcmVzcywgYm9vbCByZWFk aW5nKQoreworCXN0cnVjdCBpMmNfYWxnb19kcF9hdXhfZGF0YSAqYWxnb19kYXRhID0gYWRhcHRl ci0+YWxnb19kYXRhOworCWludCBtb2RlID0gTU9ERV9JMkNfU1RBUlQ7CisJaW50IHJldDsKKwor CWlmIChyZWFkaW5nKQorCQltb2RlIHw9IE1PREVfSTJDX1JFQUQ7CisJZWxzZQorCQltb2RlIHw9 IE1PREVfSTJDX1dSSVRFOworCWFsZ29fZGF0YS0+YWRkcmVzcyA9IGFkZHJlc3M7CisJYWxnb19k YXRhLT5ydW5uaW5nID0gdHJ1ZTsKKwlyZXQgPSBpMmNfYWxnb19kcF9hdXhfdHJhbnNhY3Rpb24o YWRhcHRlciwgbW9kZSwgMCwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0b3Ag dGhlIEkyQyB0cmFuc2FjdGlvbi4gVGhpcyBjbG9zZXMgb3V0IHRoZSBsaW5rLCBzZW5kaW5nCisg KiBhIGJhcmUgYWRkcmVzcyBwYWNrZXQgd2l0aCB0aGUgTU9UIGJpdCB0dXJuZWQgb2ZmCisgKi8K K3N0YXRpYyB2b2lkCitpMmNfYWxnb19kcF9hdXhfc3RvcChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXB0ZXIsIGJvb2wgcmVhZGluZykKK3sKKwlzdHJ1Y3QgaTJjX2FsZ29fZHBfYXV4X2RhdGEgKmFs Z29fZGF0YSA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKKwlpbnQgbW9kZSA9IE1PREVfSTJDX1NUT1A7 CisKKwlpZiAocmVhZGluZykKKwkJbW9kZSB8PSBNT0RFX0kyQ19SRUFEOworCWVsc2UKKwkJbW9k ZSB8PSBNT0RFX0kyQ19XUklURTsKKwlpZiAoYWxnb19kYXRhLT5ydW5uaW5nKSB7CisJCSh2b2lk KSBpMmNfYWxnb19kcF9hdXhfdHJhbnNhY3Rpb24oYWRhcHRlciwgbW9kZSwgMCwgTlVMTCk7CisJ CWFsZ29fZGF0YS0+cnVubmluZyA9IGZhbHNlOworCX0KK30KKworLyoKKyAqIFdyaXRlIGEgc2lu Z2xlIGJ5dGUgdG8gdGhlIGN1cnJlbnQgSTJDIGFkZHJlc3MsIHRoZQorICogdGhlIEkyQyBsaW5r IG11c3QgYmUgcnVubmluZyBvciB0aGlzIHJldHVybnMgLUVJTworICovCitzdGF0aWMgaW50Citp MmNfYWxnb19kcF9hdXhfcHV0X2J5dGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBi eXRlKQoreworCXN0cnVjdCBpMmNfYWxnb19kcF9hdXhfZGF0YSAqYWxnb19kYXRhID0gYWRhcHRl ci0+YWxnb19kYXRhOworCWludCByZXQ7CisKKwlpZiAoIWFsZ29fZGF0YS0+cnVubmluZykKKwkJ cmV0dXJuIC1FSU87CisKKwlyZXQgPSBpMmNfYWxnb19kcF9hdXhfdHJhbnNhY3Rpb24oYWRhcHRl ciwgTU9ERV9JMkNfV1JJVEUsIGJ5dGUsIE5VTEwpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBSZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgY3VycmVudCBJMkMgYWRkcmVzcywgdGhlCisg KiBJMkMgbGluayBtdXN0IGJlIHJ1bm5pbmcgb3IgdGhpcyByZXR1cm5zIC1FSU8KKyAqLworc3Rh dGljIGludAoraTJjX2FsZ29fZHBfYXV4X2dldF9ieXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRh cHRlciwgdTggKmJ5dGVfcmV0KQoreworCXN0cnVjdCBpMmNfYWxnb19kcF9hdXhfZGF0YSAqYWxn b19kYXRhID0gYWRhcHRlci0+YWxnb19kYXRhOworCWludCByZXQ7CisKKwlpZiAoIWFsZ29fZGF0 YS0+cnVubmluZykKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBpMmNfYWxnb19kcF9hdXhfdHJh bnNhY3Rpb24oYWRhcHRlciwgTU9ERV9JMkNfUkVBRCwgMCwgYnl0ZV9yZXQpOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2kyY19hbGdvX2RwX2F1eF94ZmVyKHN0cnVjdCBpMmNfYWRh cHRlciAqYWRhcHRlciwKKwkJICAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywKKwkJICAgICBpbnQg bnVtKQoreworCWludCByZXQgPSAwOworCWJvb2wgcmVhZGluZyA9IGZhbHNlOworCWludCBtOwor CWludCBiOworCisJZm9yIChtID0gMDsgbSA8IG51bTsgbSsrKSB7CisJCXUxNiBsZW4gPSBtc2dz W21dLmxlbjsKKwkJdTggKmJ1ZiA9IG1zZ3NbbV0uYnVmOworCQlyZWFkaW5nID0gKG1zZ3NbbV0u ZmxhZ3MgJiBJMkNfTV9SRCkgIT0gMDsKKwkJcmV0ID0gaTJjX2FsZ29fZHBfYXV4X2FkZHJlc3Mo YWRhcHRlciwgbXNnc1ttXS5hZGRyLCByZWFkaW5nKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVh azsKKwkJaWYgKHJlYWRpbmcpIHsKKwkJCWZvciAoYiA9IDA7IGIgPCBsZW47IGIrKykgeworCQkJ CXJldCA9IGkyY19hbGdvX2RwX2F1eF9nZXRfYnl0ZShhZGFwdGVyLCAmYnVmW2JdKTsKKwkJCQlp ZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGIgPSAw OyBiIDwgbGVuOyBiKyspIHsKKwkJCQlyZXQgPSBpMmNfYWxnb19kcF9hdXhfcHV0X2J5dGUoYWRh cHRlciwgYnVmW2JdKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0K KwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwl9CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBu dW07CisJaTJjX2FsZ29fZHBfYXV4X3N0b3AoYWRhcHRlciwgcmVhZGluZyk7CisJRFJNX0RFQlVH X0tNUygiZHBfYXV4X3hmZXIgcmV0dXJuICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB1MzIKK2kyY19hbGdvX2RwX2F1eF9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRh cHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNf RU1VTCB8CisJICAgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSB8CisJICAgICAg IEkyQ19GVU5DX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCB8CisJICAgICAgIEkyQ19GVU5DXzEwQklU X0FERFI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfZHBfYXV4 X2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gaTJjX2FsZ29fZHBfYXV4X3hmZXIsCisJLmZ1bmN0 aW9uYWxpdHkJPSBpMmNfYWxnb19kcF9hdXhfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyB2 b2lkCitpMmNfZHBfYXV4X3Jlc2V0X2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7 CisJKHZvaWQpIGkyY19hbGdvX2RwX2F1eF9hZGRyZXNzKGFkYXB0ZXIsIDAsIGZhbHNlKTsKKwko dm9pZCkgaTJjX2FsZ29fZHBfYXV4X3N0b3AoYWRhcHRlciwgZmFsc2UpOworCQkJCQkgICAKK30K Kworc3RhdGljIGludAoraTJjX2RwX2F1eF9wcmVwYXJlX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIg KmFkYXB0ZXIpCit7CisJYWRhcHRlci0+YWxnbyA9ICZpMmNfZHBfYXV4X2FsZ287CisJYWRhcHRl ci0+cmV0cmllcyA9IDM7CisJaTJjX2RwX2F1eF9yZXNldF9idXMoYWRhcHRlcik7CisJcmV0dXJu IDA7Cit9CisKK2ludAoraTJjX2RwX2F1eF9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRh cHRlcikKK3sKKwlpbnQgZXJyb3I7CisJCisJZXJyb3IgPSBpMmNfZHBfYXV4X3ByZXBhcmVfYnVz KGFkYXB0ZXIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWVycm9yID0gaTJjX2Fk ZF9hZGFwdGVyKGFkYXB0ZXIpOworCXJldHVybiBlcnJvcjsKK30KK0VYUE9SVF9TWU1CT0woaTJj X2RwX2F1eF9hZGRfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaTJj X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9pMmNfaGVscGVyLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZWJhMGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2RybV9kcF9pMmNfaGVscGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAot LyoKLSAqIENvcHlyaWdodCDCqSAyMDA5IEtlaXRoIFBhY2thcmQKLSAqCi0gKiBQZXJtaXNzaW9u IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJl IGFuZCBpdHMKLSAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFu dGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0Ci0gKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0Ci0g KiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcg ZG9jdW1lbnRhdGlvbiwgYW5kCi0gKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9s ZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgotICogcHVibGljaXR5IHBlcnRhaW5p bmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAotICog d3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8g cmVwcmVzZW50YXRpb25zCi0gKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2Fy ZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKLSAqIGlzIiB3aXRob3V0IGV4 cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLSAqCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMg RElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKLSAq IElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUywgSU4gTk8KLSAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B R0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0Us Ci0gKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBO RUdMSUdFTkNFIE9SIE9USEVSCi0gKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCi0gKiBPRiBUSElTIFNP RlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+ Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSAiZHJtX2RwX2hlbHBlci5oIgotI2lu Y2x1ZGUgImRybVAuaCIKLQotLyogUnVuIGEgc2luZ2xlIEFVWF9DSCBJMkMgdHJhbnNhY3Rpb24s IHdyaXRpbmcvcmVhZGluZyBkYXRhIGFzIG5lY2Vzc2FyeSAqLwotc3RhdGljIGludAotaTJjX2Fs Z29fZHBfYXV4X3RyYW5zYWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IG1v ZGUsCi0JCQkgICAgdWludDhfdCB3cml0ZV9ieXRlLCB1aW50OF90ICpyZWFkX2J5dGUpCi17Ci0J c3RydWN0IGkyY19hbGdvX2RwX2F1eF9kYXRhICphbGdvX2RhdGEgPSBhZGFwdGVyLT5hbGdvX2Rh dGE7Ci0JaW50IHJldDsKLQkKLQlyZXQgPSAoKmFsZ29fZGF0YS0+YXV4X2NoKShhZGFwdGVyLCBt b2RlLAotCQkJCSAgIHdyaXRlX2J5dGUsIHJlYWRfYnl0ZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQot LyoKLSAqIEkyQyBvdmVyIEFVWCBDSAotICovCi0KLS8qCi0gKiBTZW5kIHRoZSBhZGRyZXNzLiBJ ZiB0aGUgSTJDIGxpbmsgaXMgcnVubmluZywgdGhpcyAncmVzdGFydHMnCi0gKiB0aGUgY29ubmVj dGlvbiB3aXRoIHRoZSBuZXcgYWRkcmVzcywgdGhpcyBpcyB1c2VkIGZvciBkb2luZwotICogYSB3 cml0ZSBmb2xsb3dlZCBieSBhIHJlYWQgKGFzIG5lZWRlZCBmb3IgRERDKQotICovCi1zdGF0aWMg aW50Ci1pMmNfYWxnb19kcF9hdXhfYWRkcmVzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIs IHUxNiBhZGRyZXNzLCBib29sIHJlYWRpbmcpCi17Ci0Jc3RydWN0IGkyY19hbGdvX2RwX2F1eF9k YXRhICphbGdvX2RhdGEgPSBhZGFwdGVyLT5hbGdvX2RhdGE7Ci0JaW50IG1vZGUgPSBNT0RFX0ky Q19TVEFSVDsKLQlpbnQgcmV0OwotCi0JaWYgKHJlYWRpbmcpCi0JCW1vZGUgfD0gTU9ERV9JMkNf UkVBRDsKLQllbHNlCi0JCW1vZGUgfD0gTU9ERV9JMkNfV1JJVEU7Ci0JYWxnb19kYXRhLT5hZGRy ZXNzID0gYWRkcmVzczsKLQlhbGdvX2RhdGEtPnJ1bm5pbmcgPSB0cnVlOwotCXJldCA9IGkyY19h bGdvX2RwX2F1eF90cmFuc2FjdGlvbihhZGFwdGVyLCBtb2RlLCAwLCBOVUxMKTsKLQlyZXR1cm4g cmV0OwotfQotCi0vKgotICogU3RvcCB0aGUgSTJDIHRyYW5zYWN0aW9uLiBUaGlzIGNsb3NlcyBv dXQgdGhlIGxpbmssIHNlbmRpbmcKLSAqIGEgYmFyZSBhZGRyZXNzIHBhY2tldCB3aXRoIHRoZSBN T1QgYml0IHR1cm5lZCBvZmYKLSAqLwotc3RhdGljIHZvaWQKLWkyY19hbGdvX2RwX2F1eF9zdG9w KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgYm9vbCByZWFkaW5nKQotewotCXN0cnVjdCBp MmNfYWxnb19kcF9hdXhfZGF0YSAqYWxnb19kYXRhID0gYWRhcHRlci0+YWxnb19kYXRhOwotCWlu dCBtb2RlID0gTU9ERV9JMkNfU1RPUDsKLQotCWlmIChyZWFkaW5nKQotCQltb2RlIHw9IE1PREVf STJDX1JFQUQ7Ci0JZWxzZQotCQltb2RlIHw9IE1PREVfSTJDX1dSSVRFOwotCWlmIChhbGdvX2Rh dGEtPnJ1bm5pbmcpIHsKLQkJKHZvaWQpIGkyY19hbGdvX2RwX2F1eF90cmFuc2FjdGlvbihhZGFw dGVyLCBtb2RlLCAwLCBOVUxMKTsKLQkJYWxnb19kYXRhLT5ydW5uaW5nID0gZmFsc2U7Ci0JfQot fQotCi0vKgotICogV3JpdGUgYSBzaW5nbGUgYnl0ZSB0byB0aGUgY3VycmVudCBJMkMgYWRkcmVz cywgdGhlCi0gKiB0aGUgSTJDIGxpbmsgbXVzdCBiZSBydW5uaW5nIG9yIHRoaXMgcmV0dXJucyAt RUlPCi0gKi8KLXN0YXRpYyBpbnQKLWkyY19hbGdvX2RwX2F1eF9wdXRfYnl0ZShzdHJ1Y3QgaTJj X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJ5dGUpCi17Ci0Jc3RydWN0IGkyY19hbGdvX2RwX2F1eF9k YXRhICphbGdvX2RhdGEgPSBhZGFwdGVyLT5hbGdvX2RhdGE7Ci0JaW50IHJldDsKLQotCWlmICgh YWxnb19kYXRhLT5ydW5uaW5nKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9IGkyY19hbGdvX2Rw X2F1eF90cmFuc2FjdGlvbihhZGFwdGVyLCBNT0RFX0kyQ19XUklURSwgYnl0ZSwgTlVMTCk7Ci0J cmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFJlYWQgYSBzaW5nbGUgYnl0ZSBmcm9tIHRoZSBjdXJy ZW50IEkyQyBhZGRyZXNzLCB0aGUKLSAqIEkyQyBsaW5rIG11c3QgYmUgcnVubmluZyBvciB0aGlz IHJldHVybnMgLUVJTwotICovCi1zdGF0aWMgaW50Ci1pMmNfYWxnb19kcF9hdXhfZ2V0X2J5dGUo c3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCAqYnl0ZV9yZXQpCi17Ci0Jc3RydWN0IGky Y19hbGdvX2RwX2F1eF9kYXRhICphbGdvX2RhdGEgPSBhZGFwdGVyLT5hbGdvX2RhdGE7Ci0JaW50 IHJldDsKLQotCWlmICghYWxnb19kYXRhLT5ydW5uaW5nKQotCQlyZXR1cm4gLUVJTzsKLQotCXJl dCA9IGkyY19hbGdvX2RwX2F1eF90cmFuc2FjdGlvbihhZGFwdGVyLCBNT0RFX0kyQ19SRUFELCAw LCBieXRlX3JldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotaTJjX2FsZ29fZHBf YXV4X3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgIHN0cnVjdCBpMmNf bXNnICptc2dzLAotCQkgICAgIGludCBudW0pCi17Ci0JaW50IHJldCA9IDA7Ci0JYm9vbCByZWFk aW5nID0gZmFsc2U7Ci0JaW50IG07Ci0JaW50IGI7Ci0KLQlmb3IgKG0gPSAwOyBtIDwgbnVtOyBt KyspIHsKLQkJdTE2IGxlbiA9IG1zZ3NbbV0ubGVuOwotCQl1OCAqYnVmID0gbXNnc1ttXS5idWY7 Ci0JCXJlYWRpbmcgPSAobXNnc1ttXS5mbGFncyAmIEkyQ19NX1JEKSAhPSAwOwotCQlyZXQgPSBp MmNfYWxnb19kcF9hdXhfYWRkcmVzcyhhZGFwdGVyLCBtc2dzW21dLmFkZHIsIHJlYWRpbmcpOwot CQlpZiAocmV0IDwgMCkKLQkJCWJyZWFrOwotCQlpZiAocmVhZGluZykgewotCQkJZm9yIChiID0g MDsgYiA8IGxlbjsgYisrKSB7Ci0JCQkJcmV0ID0gaTJjX2FsZ29fZHBfYXV4X2dldF9ieXRlKGFk YXB0ZXIsICZidWZbYl0pOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJ fSBlbHNlIHsKLQkJCWZvciAoYiA9IDA7IGIgPCBsZW47IGIrKykgewotCQkJCXJldCA9IGkyY19h bGdvX2RwX2F1eF9wdXRfYnl0ZShhZGFwdGVyLCBidWZbYl0pOwotCQkJCWlmIChyZXQgPCAwKQot CQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAocmV0IDwgMCkKLQkJCWJyZWFrOwotCX0KLQlp ZiAocmV0ID49IDApCi0JCXJldCA9IG51bTsKLQlpMmNfYWxnb19kcF9hdXhfc3RvcChhZGFwdGVy LCByZWFkaW5nKTsKLQlEUk1fREVCVUdfS01TKCJkcF9hdXhfeGZlciByZXR1cm4gJWRcbiIsIHJl dCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHUzMgotaTJjX2FsZ29fZHBfYXV4X2Z1bmN0 aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBJMkNfRlVO Q19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMIHwKLQkgICAgICAgSTJDX0ZVTkNfU01CVVNfUkVB RF9CTE9DS19EQVRBIHwKLQkgICAgICAgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMIHwK LQkgICAgICAgSTJDX0ZVTkNfMTBCSVRfQUREUjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBp MmNfYWxnb3JpdGhtIGkyY19kcF9hdXhfYWxnbyA9IHsKLQkubWFzdGVyX3hmZXIJPSBpMmNfYWxn b19kcF9hdXhfeGZlciwKLQkuZnVuY3Rpb25hbGl0eQk9IGkyY19hbGdvX2RwX2F1eF9mdW5jdGlv bmFsaXR5LAotfTsKLQotc3RhdGljIHZvaWQKLWkyY19kcF9hdXhfcmVzZXRfYnVzKHN0cnVjdCBp MmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkodm9pZCkgaTJjX2FsZ29fZHBfYXV4X2FkZHJlc3Mo YWRhcHRlciwgMCwgZmFsc2UpOwotCSh2b2lkKSBpMmNfYWxnb19kcF9hdXhfc3RvcChhZGFwdGVy LCBmYWxzZSk7Ci0JCQkJCSAgIAotfQotCi1zdGF0aWMgaW50Ci1pMmNfZHBfYXV4X3ByZXBhcmVf YnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlhZGFwdGVyLT5hbGdvID0gJmky Y19kcF9hdXhfYWxnbzsKLQlhZGFwdGVyLT5yZXRyaWVzID0gMzsKLQlpMmNfZHBfYXV4X3Jlc2V0 X2J1cyhhZGFwdGVyKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1pMmNfZHBfYXV4X2FkZF9idXMo c3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWludCBlcnJvcjsKLQkKLQllcnJvciA9 IGkyY19kcF9hdXhfcHJlcGFyZV9idXMoYWRhcHRlcik7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4g ZXJyb3I7Ci0JZXJyb3IgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcHRlcik7Ci0JcmV0dXJuIGVycm9y OwotfQotRVhQT1JUX1NZTUJPTChpMmNfZHBfYXV4X2FkZF9idXMpOwotLSAKMS43LjExLjQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==