From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lior Balkohen Subject: porting a driver to the new fbdev api Date: Sun, 11 Sep 2005 13:13:10 +0200 Message-ID: <196b7d31050911041317dde7b3@mail.gmail.com> Reply-To: linux-fbdev-devel@lists.sourceforge.net Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_12421_13149975.1126437190585" Return-path: Received: from sc8-sf-mx2-b.sourceforge.net ([10.3.1.92] helo=mail.sourceforge.net) by sc8-sf-list1.sourceforge.net with esmtp (Exim 4.30) id 1EEPlv-00046E-6k for linux-fbdev-devel@lists.sourceforge.net; Sun, 11 Sep 2005 04:13:19 -0700 Received: from nproxy.gmail.com ([64.233.182.194]) by mail.sourceforge.net with esmtp (Exim 4.44) id 1EEPlt-0003fp-FA for linux-fbdev-devel@lists.sourceforge.net; Sun, 11 Sep 2005 04:13:19 -0700 Received: by nproxy.gmail.com with SMTP id n15so762732nfc for ; Sun, 11 Sep 2005 04:13:10 -0700 (PDT) Sender: linux-fbdev-devel-admin@lists.sourceforge.net Errors-To: linux-fbdev-devel-admin@lists.sourceforge.net List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: To: linux-fbdev-devel@lists.sourceforge.net ------=_Part_12421_13149975.1126437190585 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline hi list, i want to port attached xilleon framebuffer driver to the new 2.6 fbdev api. any good documentation, or any advice how to do, what care about? thanks in advance and blue skies, --- Lior Balkohen ------=_Part_12421_13149975.1126437190585 Content-Type: application/octet-stream; name="x220fb.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="x220fb.c" LyogIFhpbGxlb24gMjIwIGZyYW1lIGJ1ZmZlciBkcml2ZXIKICoKICogIENvcHlyaWdodCAoQykg MjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KICoKICovCgojaW5jbHVkZSA8bGludXgvY29u ZmlnLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgojaW5jbHVkZSA8bGludXgvZXJybm8uaD4KI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgojaW5j bHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgojaW5jbHVkZSA8bGludXgv c2xhYi5oPgojaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgojaW5jbHVkZSA8bGludXgvZGVsYXku aD4KI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgojaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4K I2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxs aW51eC9wY2kuaD4KI2luY2x1ZGUgPGFzbS9pby5oPgoKI2luY2x1ZGUgPHZpZGVvL2ZiY29uLmg+ CiNpbmNsdWRlIDx2aWRlby9mYmNvbi1tZmIuaD4KI2luY2x1ZGUgPHZpZGVvL2ZiY29uLWNmYjE2 Lmg+CiNpbmNsdWRlIDx2aWRlby9mYmNvbi1jZmIyNC5oPgojaW5jbHVkZSA8dmlkZW8vZmJjb24t Y2ZiMzIuaD4KCiNpbmNsdWRlICJ4MjIwZmIuaCIKCi8vIEZJWE1FOiBqdXN0IGEgZ3Vlc3MgYW5k IHNob3VsZG4ndCBiZSBoZXJlCiNkZWZpbmUgWDIyMF9NRU1fQkFTRSAwCgojZGVmaW5lIFgyMjBf TU9EVUxFX05BTUUgIlgyMjBGQiIKI2RlZmluZSBQRlggWDIyMF9NT0RVTEVfTkFNRQoKI2RlZmlu ZSBYMjIwX0RFQlVHCgojaWZkZWYgWDIyMF9ERUJVRwojZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4u LikgXAogICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iICwgX19mdW5jX18s ICMjIGFyZykKI2Vsc2UKI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgw KQojZW5kaWYKI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBQRlgg IjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBw cmludGsoS0VSTl9JTkZPIFBGWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQojZGVmaW5lIHdh cm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgUEZYICI6ICIgZm9ybWF0ICJc biIgLCAjIyBhcmcpCiNkZWZpbmUgZW1lcmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VN RVJHIFBGWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQoKI2RlZmluZSBDTUFQU0laRSAxNgoj ZGVmaW5lIGFycmF5c2l6ZSh4KQkoc2l6ZW9mKHgpL3NpemVvZigqKHgpKSkKCi8qIGNvbW1hbmQg bGluZSBkYXRhLCBzZXQgaW4geDIyMGZiX3NldHVwKCkgKi8Kc3RhdGljIGNoYXIgX19pbml0ZGF0 YSBmb250bmFtZVs0MF0gPSB7IDAgfTsKc3RhdGljIGludCBhY2NlbCA9IDA7CnN0YXRpYyBpbnQg bm9kbXMgPSAwOwoKc3RhdGljIGNvbnN0IGNoYXIgKm1vZGVfb3B0aW9uIF9faW5pdGRhdGEgPSBO VUxMOwoKc3RydWN0IHgyMjBmYl9wYXIgewogICAgICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5m byB2YXI7CgoJc3NpemVfdCBmYl9zaXplOwoJaW50IGZiX29yZGVyOwoKCWludCBsaW5lX2xlbmd0 aDsgIC8vIGluIGJ5dGVzCn07Cgp0eXBlZGVmIGVudW0gewoJSURMRSA9IDAsCglXQUlUX0lOX1BS T0dSRVNTLAoJTU9ERV9DSEFOR0VfSU5fUFJPR1JFU1MKfSB4MjIwZmJfc3RhdGVfdDsKCQoKc3Ry dWN0IHgyMjBmYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgZmJfaW5mb19nZW4gZ2VuOwoJc3RydWN0 IHgyMjBmYl9wYXIgY3VycGFyOwoJc3RydWN0IHgyMjBmYl9wYXIgcmVxcGFyOwogICAgICAgIHN0 cnVjdCBkaXNwbGF5IGRpc3A7CgogICAgICAgIHZvaWQgKiAgICAgIGZiX2FkZHJfdmlydDsKICAg ICAgICBwaHlzX2FkZHJfdCBmYl9hZGRyX3BoeXM7CgoJaW50IGZha2Vfb2Zmc2V0OwoJeDIyMGZi X3N0YXRlX3Qgc3RhdGU7CglpbnQgZG1zOwoJCgl3YWl0X3F1ZXVlX2hlYWRfdCBhY2xyZXFfd2Fp dDsKCXdhaXRfcXVldWVfaGVhZF90IHNldHBhcl93YWl0OwogICAgICAgIHN0cnVjdCBzZW1hcGhv cmUgaW9jdGxfc2VtOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2V0cGFyX3NlbTsKCQoJc3Ry dWN0IHsKCQl1bnNpZ25lZCByZWQ7CgkJdW5zaWduZWQgZ3JlZW47CgkJdW5zaWduZWQgYmx1ZTsK CQl1bnNpZ25lZCBhbHBoYTsKCX0gcGFsZXR0ZVsyNTZdOwp9OwoKc3RhdGljIHN0cnVjdCB4MjIw ZmJfaW5mbyAqZmJfeDIyMDsKCnN0YXRpYyBjaGFyIHgyMjBmYl9uYW1lWzE2XSA9IFgyMjBfTU9E VUxFX05BTUU7CgpzdGF0aWMgdW5pb24gewojaWZkZWYgRkJDT05fSEFTX0NGQjE2Cgl1MTYgY2Zi MTZbQ01BUFNJWkVdOwojZW5kaWYKI2lmZGVmIEZCQ09OX0hBU19DRkIyNAoJdTMyIGNmYjI0W0NN QVBTSVpFXTsKI2VuZGlmCiNpZmRlZiBGQkNPTl9IQVNfQ0ZCMzIKCXUzMiBjZmIzMltDTUFQU0la RV07CiNlbmRpZgp9IGZiY29uX2NtYXA7CgpzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3Jl ZW5pbmZvIHgyMjBfZGVmYXVsdF92YXIgPSB7Cgk2NDAsIDQ4MCwgNjQwLCA0ODAsIDAsIDAsIDE2 LCAwLAoJezB9LCB7MH0sIHswfSwgezB9LAoJMCwgRkJfQUNUSVZBVEVfTk9XLCAtMSwgLTEsIDAs CgkwLCAwLCAwLCAwLCAwLCAwLCAwLAoJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAp9OwoKLyoK ICogVGhlc2UgYXJlIGp1c3QgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMgLSBsaW51eCBmYiBk b2Vzbid0CiAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGRpZmZlcmVudCBicm9hZGNhc3Qgc3Rh bmRhcmRzLgogKi8KI2RlZmluZSBGQl9TWU5DX1BTMiAgIDAgLy8gVkdBCiNkZWZpbmUgRkJfU1lO Q19IRCAgICBGQl9TWU5DX0JST0FEQ0FTVAojZGVmaW5lIEZCX1NZTkNfTlRTQyAgRkJfU1lOQ19C Uk9BRENBU1QKI2RlZmluZSBGQl9TWU5DX1BBTCAgIEZCX1NZTkNfQlJPQURDQVNUCiNkZWZpbmUg RkJfU1lOQ19TRUNBTSBGQl9TWU5DX0JST0FEQ0FTVAoKc3RhdGljIGNvbnN0IHN0cnVjdCB7Cgl1 MzIgeHJlczsKCXUzMiB5cmVzOwoJdTMyIHZtb2RlOyAvLyBvbmx5IGhvbGRzIGludGVybGFjZWQg dnMuIHByb2dyZXNzaXZlIGluZm8KCXUzMiBzeW5jOyAgLy8gb25seSBob2xkcyBQUzIgdnMuIGJy b2RjYXN0IGluZm8KfSAgYWNsX21vZGVzW10gPSB7Cgl7ICA2NDAsICA0ODAsIEZCX1ZNT0RFX05P TklOVEVSTEFDRUQsIEZCX1NZTkNfUFMyICAgfSwKCXsgIDcyMCwgIDQ4MCwgRkJfVk1PREVfTk9O SU5URVJMQUNFRCwgRkJfU1lOQ19QUzIgICB9LAoJeyAgNzIwLCAgNTc2LCBGQl9WTU9ERV9OT05J TlRFUkxBQ0VELCBGQl9TWU5DX1BTMiAgIH0sCgl7ICA4MDAsICA2MDAsIEZCX1ZNT0RFX05PTklO VEVSTEFDRUQsIEZCX1NZTkNfUFMyICAgfSwKCXsgMTAyNCwgIDc2OCwgRkJfVk1PREVfTk9OSU5U RVJMQUNFRCwgRkJfU1lOQ19QUzIgICB9LAoJeyAxMjgwLCAgNzIwLCBGQl9WTU9ERV9OT05JTlRF UkxBQ0VELCBGQl9TWU5DX1BTMiAgIH0sCgl7IDE5MjAsIDEwODAsIEZCX1ZNT0RFX0lOVEVSTEFD RUQgICAsIEZCX1NZTkNfUFMyICAgfSwKCXsgIDcyMCwgIDQ4MCwgRkJfVk1PREVfSU5URVJMQUNF RCAgICwgRkJfU1lOQ19IRCAgICB9LAoJeyAgNzIwLCAgNDgwLCBGQl9WTU9ERV9OT05JTlRFUkxB Q0VELCBGQl9TWU5DX0hEICAgIH0sCgl7ICA5NjAsICA1NDAsIEZCX1ZNT0RFX05PTklOVEVSTEFD RUQsIEZCX1NZTkNfSEQgICAgfSwKCXsgMTI4MCwgIDcyMCwgRkJfVk1PREVfTk9OSU5URVJMQUNF RCwgRkJfU1lOQ19IRCAgICB9LAoJeyAxOTIwLCAxMDgwLCBGQl9WTU9ERV9JTlRFUkxBQ0VEICAg LCBGQl9TWU5DX0hEICAgIH0sCgl7ICA3MjAsICA0ODAsIEZCX1ZNT0RFX0lOVEVSTEFDRUQgICAs IEZCX1NZTkNfTlRTQyAgfSwKCXsgIDcyMCwgIDU3NiwgRkJfVk1PREVfSU5URVJMQUNFRCAgICwg RkJfU1lOQ19QQUwgICB9LAoJeyAgNzIwLCAgNTc2LCBGQl9WTU9ERV9JTlRFUkxBQ0VEICAgLCBG Ql9TWU5DX1NFQ0FNIH0KfTsKCgkKLyogSW50ZXJmYWNlIHVzZWQgYnkgdGhlIHdvcmxkICovCmlu dCB4MjIwZmJfaW5pdCh2b2lkKTsKaW50IHgyMjBmYl9zZXR1cChjaGFyICpvcHRpb25zKTsKCi8q IEhhcmR3YXJlIFNwZWNpZmljIFJvdXRpbmVzICovCnN0YXRpYyBpbnQgeDIyMGZiX2lvY3RsKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsCgkJCXVfbG9u ZyBhcmcsIGludCBjb24sIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKc3RhdGljIHZvaWQgeDIyMGZi X2RldGVjdCAodm9pZCk7CnN0YXRpYyBpbnQgeDIyMGZiX2VuY29kZV9maXggKHN0cnVjdCBmYl9m aXhfc2NyZWVuaW5mbyAqZml4LCBjb25zdCB2b2lkICpwYXIsCgkJCQlzdHJ1Y3QgZmJfaW5mb19n ZW4gKmluZm8pOwpzdGF0aWMgaW50IHgyMjBmYl9kZWNvZGVfdmFyIChjb25zdCBzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gKnZhciwgdm9pZCAqcGFyLAoJCQkJc3RydWN0IGZiX2luZm9fZ2VuICpp bmZvKTsKc3RhdGljIGludCB4MjIwZmJfZW5jb2RlX3ZhciAoc3RydWN0IGZiX3Zhcl9zY3JlZW5p bmZvICp2YXIsIGNvbnN0IHZvaWQgKnBhciwKCQkJCXN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7 CnN0YXRpYyB2b2lkIHgyMjBmYl9nZXRfcGFyICh2b2lkICpwYXIsIHN0cnVjdCBmYl9pbmZvX2dl biAqaW5mbyk7CnN0YXRpYyB2b2lkIHgyMjBmYl9zZXRfcGFyIChjb25zdCB2b2lkICpwYXIsIHN0 cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7CnN0YXRpYyBpbnQgeDIyMGZiX2dldGNvbHJlZyAodW5z aWduZWQgcmVnbm8sIHVuc2lnbmVkICpyZWQsIHVuc2lnbmVkICpncmVlbiwKCQkJICAgICAgIHVu c2lnbmVkICpibHVlLCB1bnNpZ25lZCAqdHJhbnNwLAoJCQkgICAgICAgc3RydWN0IGZiX2luZm8g KmluZm8pOwpzdGF0aWMgaW50IHgyMjBmYl9zZXRjb2xyZWcgKHVuc2lnbmVkIHJlZ25vLCB1bnNp Z25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAoJCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmlu Zm8pOwpzdGF0aWMgaW50IHgyMjBmYl9wYW5fZGlzcGxheSAoY29uc3Qgc3RydWN0IGZiX3Zhcl9z Y3JlZW5pbmZvICp2YXIsCgkJCQkgc3RydWN0IGZiX2luZm9fZ2VuICppbmZvKTsKc3RhdGljIGlu dCB4MjIwZmJfYmxhbmsgKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8p OwpzdGF0aWMgdm9pZCB4MjIwZmJfc2V0X2Rpc3AgKGNvbnN0IHZvaWQgKnBhciwgc3RydWN0IGRp c3BsYXkgKmRpc3AsCgkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pOwoKLyogZnVu Y3Rpb24gdGFibGUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyAqLwpzdGF0aWMgc3RydWN0IGZiX29w cyB4MjIwZmJfb3BzID0gewogICAgICAgIG93bmVyOiAgICAgICAgICBUSElTX01PRFVMRSwKICAg ICAgICBmYl9nZXRfZml4OiAgICAgZmJnZW5fZ2V0X2ZpeCwKICAgICAgICBmYl9nZXRfdmFyOiAg ICAgZmJnZW5fZ2V0X3ZhciwKICAgICAgICBmYl9zZXRfdmFyOiAgICAgZmJnZW5fc2V0X3ZhciwK ICAgICAgICBmYl9nZXRfY21hcDogICAgZmJnZW5fZ2V0X2NtYXAsCiAgICAgICAgZmJfc2V0X2Nt YXA6ICAgIGZiZ2VuX3NldF9jbWFwLAogICAgICAgIGZiX3Bhbl9kaXNwbGF5OiBmYmdlbl9wYW5f ZGlzcGxheSwKICAgICAgICBmYl9pb2N0bDogICAgICAgeDIyMGZiX2lvY3RsLAp9OwoKLyogZnVu Y3Rpb24gdGFibGUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyAqLwpzdGF0aWMgc3RydWN0IGZiZ2Vu X2h3c3dpdGNoIHgyMjBmYl9od3N3aXRjaCA9CnsKICAgICAgICB4MjIwZmJfZGV0ZWN0LAogICAg ICAgIHgyMjBmYl9lbmNvZGVfZml4LAogICAgICAgIHgyMjBmYl9kZWNvZGVfdmFyLAogICAgICAg IHgyMjBmYl9lbmNvZGVfdmFyLAogICAgICAgIHgyMjBmYl9nZXRfcGFyLAogICAgICAgIHgyMjBm Yl9zZXRfcGFyLAogICAgICAgIHgyMjBmYl9nZXRjb2xyZWcsCiAgICAgICAgeDIyMGZiX3NldGNv bHJlZywKICAgICAgICB4MjIwZmJfcGFuX2Rpc3BsYXksCiAgICAgICAgeDIyMGZiX2JsYW5rLAog ICAgICAgIHgyMjBmYl9zZXRfZGlzcAp9OwoKCnN0YXRpYyB2b2lkIHNldF9jb2xvcl9iaXRmaWVs ZHMoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCnsKCXN3aXRjaCAodmFyLT5iaXRzX3Bl cl9waXhlbCkgewoJY2FzZSAxNjoJLyogQVJHQjE1NTUgKi8KCQl2YXItPnRyYW5zcC5vZmZzZXQg PSAxNTsKCQl2YXItPnRyYW5zcC5sZW5ndGggPSAxOwoJCXZhci0+cmVkLm9mZnNldCA9IDEwOwoJ CXZhci0+cmVkLmxlbmd0aCA9IDU7CgkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwoJCXZhci0+Z3Jl ZW4ubGVuZ3RoID0gNTsKCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKCQl2YXItPmJsdWUubGVuZ3Ro ID0gNTsKCQlicmVhazsKCWNhc2UgMzI6CS8qIEFSR0IgODg4OCAqLwoJCXZhci0+dHJhbnNwLm9m ZnNldCA9IDI0OwoJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7CgkJdmFyLT5yZWQub2Zmc2V0ID0g MTY7CgkJdmFyLT5yZWQubGVuZ3RoID0gODsKCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CgkJdmFy LT5ncmVlbi5sZW5ndGggPSA4OwoJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwoJCXZhci0+Ymx1ZS5s ZW5ndGggPSA4OwoJCWJyZWFrOwoJfQoKCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7Cgl2YXItPmdy ZWVuLm1zYl9yaWdodCA9IDA7Cgl2YXItPmJsdWUubXNiX3JpZ2h0ID0gMDsKCXZhci0+dHJhbnNw Lm1zYl9yaWdodCA9IDA7Cn0KCgpzdGF0aWMgdm9pZCBjYWxjX3BhcihzdHJ1Y3QgeDIyMGZiX3Bh ciAqcGFyLAoJCSAgICAgY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCnsKCW1l bXNldChwYXIsIDAsIHNpemVvZihzdHJ1Y3QgeDIyMGZiX3BhcikpOwoKCXBhci0+bGluZV9sZW5n dGggPQoJCXZhci0+eHJlc192aXJ0dWFsICogKCh2YXItPmJpdHNfcGVyX3BpeGVsICsgNykgPj4g Myk7CglwYXItPmxpbmVfbGVuZ3RoID0gKHBhci0+bGluZV9sZW5ndGggKyAxMjcpICYgfjEyNzsK CglwYXItPmZiX3NpemUgPSBwYXItPmxpbmVfbGVuZ3RoICogdmFyLT55cmVzX3ZpcnR1YWw7CgoJ cGFyLT5mYl9vcmRlciA9IDA7Cgl3aGlsZSAocGFyLT5mYl9zaXplID4gKFBBR0VfU0laRSAqICgx IDw8IHBhci0+ZmJfb3JkZXIpKSkKCQlwYXItPmZiX29yZGVyKys7CgoJcGFyLT52YXIgPSAqdmFy OwoKCXBhci0+dmFyLndpZHRoID0gcGFyLT52YXIuaGVpZ2h0ID0gLTE7CgkvKiBubyB2aXJ0dWFs IGRpc3BsYXkgc3VwcG9ydCAobm8gcGFubmluZy9zY3JvbGxpbmcpICovCglwYXItPnZhci52bW9k ZSAmPSBGQl9WTU9ERV9NQVNLOwoJcGFyLT52YXIueG9mZnNldCA9IHBhci0+dmFyLnlvZmZzZXQg PSAwOwoJcGFyLT52YXIueHJlc192aXJ0dWFsID0gcGFyLT52YXIueHJlczsKCXBhci0+dmFyLnly ZXNfdmlydHVhbCA9IHBhci0+dmFyLnlyZXM7CgkvKiBubyBhY2NlbHMgKi8KCXBhci0+dmFyLmFj Y2VsX2ZsYWdzID0gMDsKCXBhci0+dmFyLnN5bmMgJj0gRkJfU1lOQ19CUk9BRENBU1Q7CgkKCXNl dF9jb2xvcl9iaXRmaWVsZHMoJnBhci0+dmFyKTsKfQoKCnN0YXRpYyB2b2lkIHgyMjBmYl9kZXRl Y3QgKHZvaWQpCnsKCWRiZygiIik7Cn0KCgpzdGF0aWMgaW50IHgyMjBmYl9lbmNvZGVfZml4KHN0 cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LAoJCQkJY29uc3Qgdm9pZCogX3BhciwKCQkJCXN0 cnVjdCBmYl9pbmZvX2dlbiogX2luZm8pCnsKICAgICAgICBzdHJ1Y3QgeDIyMGZiX3BhciAqcGFy ID0gKHN0cnVjdCB4MjIwZmJfcGFyICopIF9wYXI7CiAgICAgICAgc3RydWN0IHgyMjBmYl9pbmZv ICppbmZvID0gKHN0cnVjdCB4MjIwZmJfaW5mbyAqKSBfaW5mbzsKCXN0cnVjdCBmYl92YXJfc2Ny ZWVuaW5mbyogdmFyID0gJnBhci0+dmFyOwoKCWRvd24oJmluZm8tPnNldHBhcl9zZW0pOwoKCWRi ZygiIik7CgoJbWVtc2V0KGZpeCwgMCwgc2l6ZW9mKHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbykp OwoJc3RyY3B5KGZpeC0+aWQsIHgyMjBmYl9uYW1lKTsKCglmaXgtPnNtZW1fc3RhcnQgPSBpbmZv LT5mYl9hZGRyX3BoeXM7CglmaXgtPnNtZW1fbGVuID0gcGFyLT5mYl9zaXplOwoJZml4LT50eXBl ID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwoJZml4LT50eXBlX2F1eCA9IDA7CiAgICAgICAgZml4 LT52aXN1YWwgPSAodmFyLT5iaXRzX3Blcl9waXhlbCA8PSA4KSA/CgkJRkJfVklTVUFMX1BTRVVE T0NPTE9SIDogRkJfVklTVUFMX1RSVUVDT0xPUjsKCWZpeC0+eXdyYXBzdGVwID0gMDsKCWZpeC0+ eHBhbnN0ZXAgPSAxOwoJZml4LT55cGFuc3RlcCA9IDE7CglmaXgtPmxpbmVfbGVuZ3RoID0gcGFy LT5saW5lX2xlbmd0aDsKCgl1cCgmaW5mby0+c2V0cGFyX3NlbSk7CgoJcmV0dXJuIDA7Cn0KCgoK c3RhdGljIGludCB4MjIwZmJfZGVjb2RlX3Zhcihjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmlu Zm8gKnZhciwKCQkJICAgICB2b2lkICpfcGFyLAoJCQkgICAgIHN0cnVjdCBmYl9pbmZvX2dlbiAq X2luZm8pCnsKICAgICAgICBzdHJ1Y3QgeDIyMGZiX3BhciAqcGFyID0gKHN0cnVjdCB4MjIwZmJf cGFyICopIF9wYXI7CiAgICAgICAgc3RydWN0IHgyMjBmYl9pbmZvICppbmZvID0gKHN0cnVjdCB4 MjIwZmJfaW5mbyAqKSBfaW5mbzsKICAgICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmN1 cnZhciA9ICZpbmZvLT5jdXJwYXIudmFyOwoJaW50IGk7CgkKCWRiZygiIik7CgoJaWYgKCFpbmZv LT5kbXMpIHsKCQlpZiAodmFyLT54cmVzICE9IGN1cnZhci0+eHJlcyB8fAoJCSAgICB2YXItPnly ZXMgIT0gY3VydmFyLT55cmVzKSB7CgkJCWRiZygicmVzb2x1dGlvbiBkb2Vzbid0IG1hdGNoIik7 CgkJCXJldHVybiAtRUlOVkFMOwoJCX0KCQkKCQlpZiAoKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9N QVNLKSAhPQoJCSAgICAoY3VydmFyLT52bW9kZSAmIEZCX1ZNT0RFX01BU0spKSB7CgkJCWRiZygi aW50ZXJsYWNlIG1vZGUgZG9lc24ndCBtYXRjaCIpOwoJCQlyZXR1cm4gLUVJTlZBTDsKCQl9CgkJ CgkJaWYgKCh2YXItPnN5bmMgJiBGQl9TWU5DX0JST0FEQ0FTVCkgIT0gY3VydmFyLT5zeW5jKSB7 CgkJCWRiZygic3luYyBtb2RlIGRvZXNuJ3QgbWF0Y2giKTsKCQkJcmV0dXJuIC1FSU5WQUw7CgkJ fQoKCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSBjdXJ2YXItPmJpdHNfcGVyX3BpeGVsKSB7 CgkJCWRiZygiY29sb3IgZGVwdGggZG9lc24ndCBtYXRjaCIpOwoJCQlyZXR1cm4gLUVJTlZBTDsK CQl9Cgl9CgkKCWZvciAoaT0wOyBpIDwgc2l6ZW9mKGFjbF9tb2Rlcykvc2l6ZW9mKGFjbF9tb2Rl c1swXSk7IGkrKykgewoJCWlmICh2YXItPnhyZXMgPT0gYWNsX21vZGVzW2ldLnhyZXMgJiYKCQkg ICAgdmFyLT55cmVzID09IGFjbF9tb2Rlc1tpXS55cmVzICYmCgkJICAgICh2YXItPnZtb2RlICYg RkJfVk1PREVfTUFTSykgPT0gYWNsX21vZGVzW2ldLnZtb2RlICYmCgkJICAgICh2YXItPnN5bmMg JiBGQl9TWU5DX0JST0FEQ0FTVCkgPT0gYWNsX21vZGVzW2ldLnN5bmMpCgkJCWJyZWFrOwoJfQoJ aWYgKGkgPj0gc2l6ZW9mKGFjbF9tb2Rlcykvc2l6ZW9mKGFjbF9tb2Rlc1swXSkpIHsKCQlkYmco InVuc3VwcG9ydGVkIG1vZGU6ICVzICVkeCVkJWMiLAoJCSAgICAodmFyLT5zeW5jICYgRkJfU1lO Q19CUk9BRENBU1QpID8gIkJyb2FkY2FzdCIgOiAiVkdBIiwKCQkgICAgdmFyLT54cmVzLCB2YXIt PnlyZXMsCgkJICAgICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkgPyAnaScgOiAn cCcpOwoJCXJldHVybiAtRUlOVkFMOwoJfQoKCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDMy ICYmIHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMTYpIHsKCQlkYmcoInVuc3VwcG9ydGVkIGNvbG9y IGRlcHRoOiAlZCBicHAiLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKCQlyZXR1cm4gLUVJTlZBTDsK CX0KCQoJY2FsY19wYXIocGFyLCB2YXIpOwoKCWlmICghaW5mby0+ZG1zKSB7CgkJLyoKCQkgKiAg Y2hlY2sgbWVtb3J5IGxpbWl0CgkJICovCgkJaWYgKHBhci0+bGluZV9sZW5ndGggKiBwYXItPnZh ci55cmVzX3ZpcnR1YWwgPiBwYXItPmZiX3NpemUpIHsKCQkJZGJnKCJub3QgZW5vdWdoIHZpZGVv IG1lbW9yeSBmb3IgcmVzICVkeCVkLSVkYnBwISIsCgkJCSAgICBwYXItPnZhci54cmVzX3ZpcnR1 YWwsIHBhci0+dmFyLnlyZXNfdmlydHVhbCwKCQkJICAgIHBhci0+dmFyLmJpdHNfcGVyX3BpeGVs KTsKCQkJcmV0dXJuIC1FTk9NRU07CgkJfQoJfQoJCglyZXR1cm4gMDsKfQoKCnN0YXRpYyBpbnQg IHgyMjBmYl9lbmNvZGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAoJCQkJY29u c3Qgdm9pZCAqcGFyLAoJCQkJc3RydWN0IGZiX2luZm9fZ2VuICppbmZvKQp7CglkYmcoIiIpOwoK CSp2YXIgPSAoKHN0cnVjdCB4MjIwZmJfcGFyICopcGFyKS0+dmFyOwoJcmV0dXJuIDA7Cn0KCgpz dGF0aWMgdm9pZCB4MjIwZmJfc2V0X2Rpc3AoY29uc3Qgdm9pZCAqX3Bhciwgc3RydWN0IGRpc3Bs YXkgKmRpc3AsCgkJCSAgICAgIHN0cnVjdCBmYl9pbmZvX2dlbiAqX2luZm8pCnsKICAgICAgICBz dHJ1Y3QgeDIyMGZiX3BhciAqcGFyID0gKHN0cnVjdCB4MjIwZmJfcGFyICopIF9wYXI7CiAgICAg ICAgc3RydWN0IHgyMjBmYl9pbmZvICppbmZvID0gKHN0cnVjdCB4MjIwZmJfaW5mbyAqKSBfaW5m bzsKCglkb3duKCZpbmZvLT5zZXRwYXJfc2VtKTsKCglkYmcoIiIpOwoKCWRpc3AtPnNjcmVlbl9i YXNlID0gKGNoYXIgKilpbmZvLT5mYl9hZGRyX3ZpcnQ7CgoJc3dpdGNoIChwYXItPnZhci5iaXRz X3Blcl9waXhlbCkgewojaWZkZWYgRkJDT05fSEFTX0NGQjE2CgljYXNlIDE2OgoJCWRpc3AtPmRp c3BzdyA9ICZmYmNvbl9jZmIxNjsKCQlkaXNwLT5kaXNwc3dfZGF0YSA9IGZiY29uX2NtYXAuY2Zi MTY7CgkJYnJlYWs7CiNlbmRpZgojaWZkZWYgRkJDT05fSEFTX0NGQjI0CgljYXNlIDI0OgoJCWRp c3AtPmRpc3BzdyA9ICZmYmNvbl9jZmIyNDsKCQlkaXNwLT5kaXNwc3dfZGF0YSA9IGZiY29uX2Nt YXAuY2ZiMjQ7CgkJYnJlYWs7CiNlbmRpZgojaWZkZWYgRkJDT05fSEFTX0NGQjMyCgljYXNlIDMy OgoJCWRpc3AtPmRpc3BzdyA9ICZmYmNvbl9jZmIzMjsKCQlkaXNwLT5kaXNwc3dfZGF0YSA9IGZi Y29uX2NtYXAuY2ZiMzI7CgkJYnJlYWs7CiNlbmRpZgoJZGVmYXVsdDoKCQlkaXNwLT5kaXNwc3cg PSAmZmJjb25fZHVtbXk7CgkJZGlzcC0+ZGlzcHN3X2RhdGEgPSBOVUxMOwoJCWJyZWFrOwoJfQoK CXVwKCZpbmZvLT5zZXRwYXJfc2VtKTsKfQoKCgovKgogKiAgQmxhbmsgdGhlIGRpc3BsYXkuCiAq CiAqIDAgdW5ibGFuaywgMSBibGFuaywgMiBubyB2c3luYywgMyBubyBoc3luYywgNCBvZmYKICov CnN0YXRpYyBpbnQgeDIyMGZiX2JsYW5rKGludCBtb2RlLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKl9p bmZvKQp7CgkvKiBub3Qgc3VwcG9ydGVkICovCglkYmcoIiIpOwoJcmV0dXJuIC1FSU5WQUw7Cn0K CgovKiBnZXQgY3VycmVudCB2aWRlbyBtb2RlICovCnN0YXRpYyB2b2lkIHgyMjBmYl9nZXRfcGFy ICh2b2lkICpfcGFyLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKl9pbmZvKQp7CiAgICAgICAgc3RydWN0 IHgyMjBmYl9wYXIgKnBhciA9IChzdHJ1Y3QgeDIyMGZiX3BhciAqKSBfcGFyOwogICAgICAgIHN0 cnVjdCB4MjIwZmJfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgeDIyMGZiX2luZm8gKikgX2luZm87CgoJ ZG93bigmaW5mby0+c2V0cGFyX3NlbSk7CglkYmcoIiIpOwogICAgICAgICpwYXIgPSBpbmZvLT5j dXJwYXI7Cgl1cCgmaW5mby0+c2V0cGFyX3NlbSk7Cn0KCgpzdGF0aWMgdm9pZCB4MjIwZmJfc2V0 X3Bhcihjb25zdCB2b2lkICpfcGFyLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKl9pbmZvKQp7CiAgICAg ICAgc3RydWN0IHgyMjBmYl9wYXIgKnBhciA9IChzdHJ1Y3QgeDIyMGZiX3BhciAqKSBfcGFyOwog ICAgICAgIHN0cnVjdCB4MjIwZmJfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgeDIyMGZiX2luZm8gKikg X2luZm87CglzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmN1cnZhciA9ICZpbmZvLT5jdXJwYXIu dmFyOwoJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpuZXd2YXIgPSAmcGFyLT52YXI7CglERUNM QVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKCglkYmcoIiVkeCVkLSVkYnBwIiwgbmV3dmFy LT54cmVzLCBuZXd2YXItPnlyZXMsIG5ld3Zhci0+Yml0c19wZXJfcGl4ZWwpOwoKCWlmICghaW5m by0+ZG1zKQoJCXJldHVybjsKCQoJZG93bigmaW5mby0+c2V0cGFyX3NlbSk7CgoJaWYgKG5ld3Zh ci0+eHJlcyAhPSBjdXJ2YXItPnhyZXMgfHwKCSAgICBuZXd2YXItPnlyZXMgIT0gY3VydmFyLT55 cmVzIHx8CgkgICAgbmV3dmFyLT5iaXRzX3Blcl9waXhlbCAhPSBjdXJ2YXItPmJpdHNfcGVyX3Bp eGVsKSB7CgkJCgkJaWYgKGluZm8tPnN0YXRlICE9IFdBSVRfSU5fUFJPR1JFU1MpIHsKCQkJZGJn KCJpbnZhbGlkIHN0YXRlIChubyBkYWVtb24gbGlzdGVuaW5nPykiKTsKCQkJKnBhciA9IGluZm8t PmN1cnBhcjsKCQkJdXAoJmluZm8tPnNldHBhcl9zZW0pOwoJCQlyZXR1cm47CgkJfQoJCQoJCS8q IHdha2V1cCBBQ0wgZGFlbW9uIHdhaXRpbmcgZm9yIGEgcmVxdWVzdC4uLiAqLwoJCWlmICh3YWl0 cXVldWVfYWN0aXZlKCZpbmZvLT5hY2xyZXFfd2FpdCkpIHsKCQkJZGJnKCJ3YWtpbmcgQUNMIGRh ZW1vbiIpOwoJCQl3YWtlX3VwKCZpbmZvLT5hY2xyZXFfd2FpdCk7CgkJfQoJCQoJCS8qIGFuZCBn aXZlIHRoZSBkYWVtb24gdGhlIHJlcXVlc3RlZCBwYXIgKi8KCQlpbmZvLT5yZXFwYXIgPSAqcGFy OwoKCQlkYmcoIndhaXRpbmcgZm9yIEFDTCBkYWVtb24gdG8gcHJvZ3JhbSBtb2RlIik7CgoJCS8q IG5vdyBzbGVlcCB3YWl0aW5nIGZvciBBQ0wgdG8gY29tcGxldGUgdGhlIG1vZGUgKi8KCQlhZGRf d2FpdF9xdWV1ZSgmaW5mby0+c2V0cGFyX3dhaXQsICZ3YWl0KTsKCQlfX3NldF9jdXJyZW50X3N0 YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CgkJc2NoZWR1bGUoKTsKCQlyZW1vdmVfd2FpdF9xdWV1 ZSgmaW5mby0+c2V0cGFyX3dhaXQsICZ3YWl0KTsKCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JV Tk5JTkcpOwoJCWRiZygiQUNMIGRhZW1vbiBkb25lIHByb2dyYW1taW5nIG1vZGUiKTsKCQkKCQkv KgoJCSAqIHRoZSByZXF1ZXN0ZWQgbW9kZSBtYXkgbm90IGhhdmUgc3VjY2VlZGVkLAoJCSAqIG1h a2Ugc3VyZSB3ZSByZXR1cm4gdGhlIGFjdHVhbCBjdXJyZW50IG1vZGUKCQkgKiB0byB0aGUgY2Fs bGVyLgoJCSAqLwoJCSpwYXIgPSBpbmZvLT5jdXJwYXI7Cgl9CgoJdXAoJmluZm8tPnNldHBhcl9z ZW0pOwp9CgoKc3RhdGljIGludCB4MjIwZmJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbGUsIHVfaW50IGNtZCwKCQkJICB1X2xvbmcgYXJnLCBpbnQgY29uLCBzdHJ1 Y3QgZmJfaW5mbyAqX2luZm8pCnsKCWludCBmYmlkeCA9IEdFVF9GQl9JRFgoaW5vZGUtPmlfcmRl dik7CglpbnQgZG1zX2VuYl9kaXMsIHJldCA9IDA7CiAgICAgICAgc3RydWN0IHgyMjBmYl9pbmZv ICppbmZvID0gKHN0cnVjdCB4MjIwZmJfaW5mbyAqKSBfaW5mbzsKICAgICAgICBzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gKnZhcjsKICAgICAgICBzdHJ1Y3QgeDIyMGZiX3BhciAqY3VycGFyID0g JmluZm8tPmN1cnBhcjsKCXN0cnVjdCB4MjIwZmJfY29uZmlnIGNmZzsKCURFQ0xBUkVfV0FJVFFV RVVFKHdhaXQsIGN1cnJlbnQpOwoJZXh0ZXJuIGludCBzZXRfYWxsX3ZjcyhpbnQsIHN0cnVjdCBm Yl9vcHMgKiwKCQkJICAgICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAoJCQkgICAg ICAgc3RydWN0IGZiX2luZm8gKik7CgoJLyoKCSAqIHRoaXMgbXV0ZXggcHJldmVudHMgcmVlbnRy YW5jeSB3aGlsZSBzbGVlcGluZyBpbgoJICogV0FJVF9BQ0xSRVEuCgkgKi8KCWRvd24oJmluZm8t PmlvY3RsX3NlbSk7CgoJZGJnKCIiKTsKCglzd2l0Y2ggKGNtZCkgewoJY2FzZSBGQklPX1gyMjBf U0VUX0RNUzoKCQkvKgoJCSAqIGNoYW5naW5nIHRoZSBETVMgZmxhZyBhdCB3ZWlyZCB0aW1lcyBj YW4KCQkgKiBzY3Jldy11cCB0aGUgbW9kZS1jaGFuZ2Ugc3RhdGUgbWFjaGluZQoJCSAqIChpdCBz aG91bGQgb255IGJlIGRvbmUgd2hlbiBpbmZvLT5zdGF0ZSA9IElETEUpLAoJCSAqIGJ1dCBzaW5j ZSBvbmx5IHRoZSBkYWVtb24gdXNlcyB0aGVzZSBjdXN0b20KCQkgKiBpb2N0bHMsIGFuZCB3ZSBt dXN0IHRydXN0IHRoZSBkYWVtb24sIHdlJ2xsCgkJICogYWxsb3cgaXQgYWx3YXlzLgoJCSAqLwoJ CWlmIChnZXRfdXNlcihkbXNfZW5iX2RpcywgKGludCAqKShhcmcpKSkgewoJCQlyZXQgPSAtRUZB VUxUOwoJCQlicmVhazsKCQl9CgkJaW5mby0+ZG1zID0gZG1zX2VuYl9kaXM7CgkJaW5mbygiRHlu YW1pYyBNb2RlIFNlbGVjdGlvbiBpcyAlcyIsCgkJICAgICBpbmZvLT5kbXMgPyAiT04iIDogIk9G RiIpOwoJCWJyZWFrOwoJY2FzZSBGQklPX1gyMjBfQ09ORklHOgoJCWlmIChpbmZvLT5kbXMgJiYg aW5mby0+c3RhdGUgIT0gTU9ERV9DSEFOR0VfSU5fUFJPR1JFU1MpIHsKCQkJZGJnKCJoZXkgZGFl bW9uLCB5b3UncmUgZG9pbmcgc29tZXRoaW5nIHN0dXBpZCEiKTsKCQkJcmV0ID0gLUVJTlZBTDsK CQkJYnJlYWs7CgkJfQoJCQkKCQlpZiAoY29weV9mcm9tX3VzZXIoJmNmZywgKHZvaWQgKilhcmcs CgkJCQkgICBzaXplb2Yoc3RydWN0IHgyMjBmYl9jb25maWcpKSkgewoJCQllcnIoImZhdWx0IGlu IGNvcHlfZnJvbV91c2VyIik7CgkJCXJldCA9IC1FRkFVTFQ7CgkJCWJyZWFrOwoJCX0KCQkKCQlp ZiAoaW5mby0+ZmFrZV9vZmZzZXQpIHsKCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylpbmZv LT5mYl9hZGRyX3ZpcnQsCgkJCQkgICBjdXJwYXItPmZiX29yZGVyKTsKCQkJaW5mby0+ZmFrZV9v ZmZzZXQgPSAwOwoJCX0gZWxzZSBpZiAoaW5mby0+ZmJfYWRkcl92aXJ0KQoJCQlpb3VubWFwKGlu Zm8tPmZiX2FkZHJfdmlydCk7CgkJCgkJdmFyID0gJmNmZy52YXI7CgkJY2FsY19wYXIoY3VycGFy LCB2YXIpOwoKCQlpbmZvLT5mYl9hZGRyX3BoeXMgPSBYMjIwX01FTV9CQVNFICsgY2ZnLmZiX29m ZnNldDsKCQlpbmZvLT5mYl9hZGRyX3ZpcnQgPSBpb3JlbWFwKGluZm8tPmZiX2FkZHJfcGh5cywK CQkJCQkgICAgIGN1cnBhci0+ZmJfc2l6ZSk7CgkJaWYgKGluZm8tPmRtcykgewoJCQkvKiB3YWtl dXAgRkIgYXBwIHdhaXRpbmcgZm9yIHNldF9wYXIgdG8gY29tcGxldGUgKi8KCQkJaWYgKHdhaXRx dWV1ZV9hY3RpdmUoJmluZm8tPnNldHBhcl93YWl0KSkgewoJCQkJZGJnKCJDT05GSUc6IHdha2lu ZyBGQiBhcHAiKTsKCQkJCXdha2VfdXAoJmluZm8tPnNldHBhcl93YWl0KTsKCQkJfQoJCX0gZWxz ZSB7CgkJCWlmICh2YXItPmFjdGl2YXRlICYgRkJfQUNUSVZBVEVfQUxMKQoJCQkJc2V0X2FsbF92 Y3MoZmJpZHgsIF9pbmZvLT5mYm9wcywKCQkJCQkgICAgdmFyLCBfaW5mbyk7CgkJCWVsc2UKCQkJ CV9pbmZvLT5mYm9wcy0+ZmJfc2V0X3Zhcih2YXIsCgkJCQkJCQkgUFJPQ19DT05TT0xFKF9pbmZv KSwKCQkJCQkJCSBfaW5mbyk7CgkJfQoKCQkvLyBtb2RlIGNoYW5nZSBjeWNsZSBpcyBjb21wbGV0 ZSwgYmFjayB0byBJRExFCgkJaW5mby0+c3RhdGUgPSBJRExFOwoJCWluZm8oIkNPTkZJRzogRkIg YXQgMHglMDh4LCBtYXBwZWQgdG8gJXAsIHNpemUgJWQiLAoJCSAgICAgKHUzMilpbmZvLT5mYl9h ZGRyX3BoeXMsCgkJICAgICBpbmZvLT5mYl9hZGRyX3ZpcnQsCgkJICAgICAoaW50KWN1cnBhci0+ ZmJfc2l6ZSk7CgkJaW5mbygiQ09ORklHOiBtb2RlIHNldCB0byAlZHglZC0lZGJwcCIsCgkJICAg ICB2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7CgkJYnJlYWs7Cglj YXNlIEZCSU9fWDIyMF9XQUlUX0FDTFJFUToKCQlpZiAoaW5mby0+ZG1zKSB7CgkJCWlmIChpbmZv LT5zdGF0ZSAhPSBJRExFKSB7CgkJCQlkYmcoImhleSBkYWVtb24sIHlvdSdyZSBkb2luZyAiCgkJ CQkgICAgInNvbWV0aGluZyBzdHVwaWQhIik7CgkJCQlyZXQgPSAtRUlOVkFMOwoJCQkJYnJlYWs7 CgkJCX0KCQkJCgkJCWRiZygiV0FJVF9BQ0xSRVE6IHdhaXRpbmcuLi4iKTsKCQkJaW5mby0+c3Rh dGUgPSBXQUlUX0lOX1BST0dSRVNTOwoJCQlhZGRfd2FpdF9xdWV1ZSgmaW5mby0+YWNscmVxX3dh aXQsICZ3YWl0KTsKCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwoJ CQlzY2hlZHVsZSgpOwoJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+YWNscmVxX3dhaXQsICZ3 YWl0KTsKCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKCQkJaWYgKHNpZ25hbF9w ZW5kaW5nKGN1cnJlbnQpKSB7CgkJCQlpbmZvLT5zdGF0ZSA9IElETEU7CgkJCQlyZXQgPSAtRVJF U1RBUlRTWVM7CgkJCQlicmVhazsKCQkJfQoJCQlkYmcoIldBSVRfQUNMUkVROiBnb3QgYSByZXF1 ZXN0Iik7CgoJCQlpbmZvLT5zdGF0ZSA9IE1PREVfQ0hBTkdFX0lOX1BST0dSRVNTOwoKCQkJLyoK CQkJICogYSBmcmFtZWJ1ZmZlciBhcHAgaGFzIGlzc3VlZCBhIHNldCB2YXIsIHdha2luZwoJCQkg KiB1cyB1cC4gUmV0dXJuIHRoZSByZXF1ZXN0ZWQgdmFyICh0byBBQ0wgZGFlbW9uKS4KCQkJICov CgkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLAoJCQkJCSAmaW5mby0+cmVxcGFyLnZh ciwKCQkJCQkgc2l6ZW9mKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbykpKSB7CgkJCQllcnIoImZh dWx0IGluIGNvcHlfdG9fdXNlciIpOwoJCQkJcmV0ID0gLUVGQVVMVDsKCQkJfQoJCX0gZWxzZSB7 CgkJCXJldCA9IC1FSU5WQUw7CgkJfQoKCQlicmVhazsKCWRlZmF1bHQ6CgkJcmV0ID0gLUVJTlZB TDsKCX0KCQogICAgICAgIHVwKCZpbmZvLT5pb2N0bF9zZW0pOwoJcmV0dXJuIHJldDsKfQoKCnN0 YXRpYyBpbnQgeDIyMGZiX2dldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgKnJlZCwg dW5zaWduZWQgKmdyZWVuLAoJCQkgICAgICB1bnNpZ25lZCAqYmx1ZSwgdW5zaWduZWQgKnRyYW5z cCwKCQkJICAgICAgc3RydWN0IGZiX2luZm8gKl9pbmZvKQp7CiAgICAgICAgc3RydWN0IHgyMjBm Yl9pbmZvICppbmZvID0gKHN0cnVjdCB4MjIwZmJfaW5mbyAqKSBfaW5mbzsKCgkvL2RiZygiIik7 CgogICAgICAgIGlmIChyZWdubyA+IDI1NSkKICAgICAgICAgICAgICAgIHJldHVybiAxOwoKICAg ICAgICAqcmVkICAgID0gaW5mby0+cGFsZXR0ZVtyZWdub10ucmVkIDw8IDEwOwogICAgICAgICpn cmVlbiAgPSBpbmZvLT5wYWxldHRlW3JlZ25vXS5ncmVlbiA8PCAxMDsKICAgICAgICAqYmx1ZSAg ID0gaW5mby0+cGFsZXR0ZVtyZWdub10uYmx1ZSA8PCAxMDsKICAgICAgICAqdHJhbnNwID0gaW5m by0+cGFsZXR0ZVtyZWdub10uYWxwaGEgPDwgMTA7CgogICAgICAgIHJldHVybiAwOwp9CgoKc3Rh dGljIGludCB4MjIwZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVu c2lnbmVkIGdyZWVuLAoJCQkgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCgkJ CSAgICAgIHN0cnVjdCBmYl9pbmZvICpfaW5mbykKewoJc3RydWN0IHgyMjBmYl9pbmZvICppbmZv ID0gKHN0cnVjdCB4MjIwZmJfaW5mbyAqKSBfaW5mbzsKCXN0cnVjdCB4MjIwZmJfcGFyKiBwYXIg PSAmaW5mby0+Y3VycGFyOwoJCgkvL2RiZygiIik7CgoJaWYgKHJlZ25vID4gMjU1KQoJCXJldHVy biAtRUlOVkFMOwoKICAgICAgICBpbmZvLT5wYWxldHRlW3JlZ25vXS5yZWQgPSByZWQgPj4gMTA7 CiAgICAgICAgaW5mby0+cGFsZXR0ZVtyZWdub10uZ3JlZW4gPSBncmVlbiA+PiAxMDsKICAgICAg ICBpbmZvLT5wYWxldHRlW3JlZ25vXS5ibHVlID0gYmx1ZSA+PiAxMDsKICAgICAgICBpbmZvLT5w YWxldHRlW3JlZ25vXS5hbHBoYSA9IHRyYW5zcCA+PiAxMDsKCglzd2l0Y2ggKHBhci0+dmFyLmJp dHNfcGVyX3BpeGVsKSB7CiNpZmRlZiBGQkNPTl9IQVNfQ0ZCMTYKCWNhc2UgMTY6CgkJaWYocmVn bm8gPCBDTUFQU0laRSkKCQkJZmJjb25fY21hcC5jZmIxNltyZWdub10gPQoJCQkJKChyZWQgJiAw eGY4MDApID4+IDApIHwKCQkJCSgoZ3JlZW4gJiAweGY4MDApID4+IDUpIHwKCQkJCSgoYmx1ZSAm IDB4ZjgwMCkgPj4gMTEpOwoJCWJyZWFrOwojZW5kaWYKI2lmZGVmIEZCQ09OX0hBU19DRkIyNAoJ Y2FzZSAyNDoKCQlpZiAocmVnbm8gPCBDTUFQU0laRSkKCQkJZmJjb25fY21hcC5jZmIyNFtyZWdu b10gPQoJCQkJKChyZWQgJiAweGZmMDApIDw8IDgpIHwKCQkJCSgoZ3JlZW4gJiAweGZmMDApKSB8 CgkJCQkoKGJsdWUgJiAweGZmMDApID4+IDgpOwoJCWJyZWFrOwojZW5kaWYKI2lmZGVmIEZCQ09O X0hBU19DRkIzMgoJY2FzZSAzMjoKCQlpZihyZWdubyA8IENNQVBTSVpFKQoJCQkvLyBGSVhNRTog d2hhdCBhYm91dCB0cmFuc3AKCQkJZmJjb25fY21hcC5jZmIzMltyZWdub10gPQoJCQkJKChyZWQg JiAweGZmMDApID4+IDgpIHwKCQkJCSgoZ3JlZW4gJiAweGZmMDApKSB8CgkJCQkoKGJsdWUgJiAw eGZmMDApIDw8IDgpOwoJCWJyZWFrOwojZW5kaWYKCWRlZmF1bHQ6IAoJCWJyZWFrOwoJfQoKCXJl dHVybiAwOwp9CgoKc3RhdGljIGludCB4MjIwZmJfcGFuX2Rpc3BsYXkgKGNvbnN0IHN0cnVjdCBm Yl92YXJfc2NyZWVuaW5mbyAqdmFyLAoJCQkJIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbykKewoJ Lyogbm90IHN1cHBvcnRlZCAqLwoJZGJnKCIiKTsKCglyZXR1cm4gLUVJTlZBTDsKfQoKCi8qCiAq ICBJbml0aWFsaXNhdGlvbgogKi8KaW50IF9faW5pdCB4MjIwZmJfaW5pdCh2b2lkKQp7CglzdHJ1 Y3QgeDIyMGZiX2luZm8gKnAgPSBOVUxMOwoJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXI7 CgkKCWZiX3gyMjAgPSBwID0KCQkoc3RydWN0IHgyMjBmYl9pbmZvICopIGttYWxsb2Moc2l6ZW9m KCpwKSwgR0ZQX0FUT01JQyk7CglpZihwPT1OVUxMKQoJCXJldHVybiAtRU5PTUVNOwoJbWVtc2V0 KHAsIDAsIHNpemVvZigqcCkpOwoKCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnAtPmFjbHJlcV93YWl0 KTsKCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnAtPnNldHBhcl93YWl0KTsKCWluaXRfTVVURVgoJnAt PnNldHBhcl9zZW0pOwoJaW5pdF9NVVRFWCgmcC0+aW9jdGxfc2VtKTsKCglpbmZvKCJYaWxsZW9u IDIyMCBGcmFtZWJ1ZmZlciBEcml2ZXIiKTsKCiAgICAgICAgLyogc2V0IHVwIGEgZmV3IG1vcmUg dGhpbmdzLCByZWdpc3RlciBmcmFtZWJ1ZmZlciBkcml2ZXIgZXRjICovCiAgICAgICAgcC0+Z2Vu LnBhcnNpemUgPSBzaXplb2YgKHN0cnVjdCB4MjIwZmJfcGFyKTsKICAgICAgICBwLT5nZW4uZmJo dyA9ICZ4MjIwZmJfaHdzd2l0Y2g7CgoJc3RyY3B5KHAtPmdlbi5pbmZvLm1vZGVuYW1lLCAiQVRJ ICIpOyAKCXN0cmNhdChwLT5nZW4uaW5mby5tb2RlbmFtZSwgeDIyMGZiX25hbWUpOwoJcC0+Z2Vu LmluZm8uY2hhbmdldmFyID0gTlVMTDsKCXAtPmdlbi5pbmZvLm5vZGUgPSAtMTsKCglwLT5nZW4u aW5mby5mYm9wcyA9ICZ4MjIwZmJfb3BzOwoJcC0+Z2VuLmluZm8uZGlzcCA9ICZwLT5kaXNwOwoJ cC0+Z2VuLmluZm8uc3dpdGNoX2NvbiA9ICZmYmdlbl9zd2l0Y2g7CglwLT5nZW4uaW5mby51cGRh dGV2YXIgPSAmZmJnZW5fdXBkYXRlX3ZhcjsKCXAtPmdlbi5pbmZvLmJsYW5rID0gJmZiZ2VuX2Js YW5rOwoJcC0+Z2VuLmluZm8uZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwoKCWNhbGNfcGFy KCZwLT5jdXJwYXIsICZ4MjIwX2RlZmF1bHRfdmFyKTsKCXZhciA9ICZwLT5jdXJwYXIudmFyOwoJ CgkvKiBUT0RPOiBleHBsYWluIHRoaXMgY3JhcCAqLwoJcC0+ZmJfYWRkcl92aXJ0ID0gKHZvaWQg KilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsCgkJCQkJCSAgIHAtPmN1cnBhci5mYl9vcmRl cik7CglwLT5mYl9hZGRyX3BoeXMgPSB2aXJ0X3RvX3BoeXMocC0+ZmJfYWRkcl92aXJ0KTsKCXAt PmZha2Vfb2Zmc2V0ID0gMTsKCWluZm8oIkluaXRpYWwgZnJhbWVidWZmZXIgYXQgMHglMDh4LCBt YXBwZWQgdG8gJXAsIHNpemUgJWQiLAoJICAgICAodTMyKXAtPmZiX2FkZHJfcGh5cywKCSAgICAg cC0+ZmJfYWRkcl92aXJ0LAoJICAgICAoaW50KXAtPmN1cnBhci5mYl9zaXplKTsKCQogICAgICAg IGlmIChmYmdlbl9kb19zZXRfdmFyKCZwLT5jdXJwYXIudmFyLCAxLCAmcC0+Z2VuKSkgewogICAg ICAgICAgICAgICAgZXJyKCJib290IHZpZGVvIG1vZGUgZmFpbGVkIik7CiAgICAgICAgICAgICAg ICBnb3RvIHJldF9lbnhpbzsKICAgICAgICB9CgogICAgICAgIHAtPmRpc3AudmFyID0gcC0+Y3Vy cGFyLnZhcjsKICAgICAgICBmYmdlbl9zZXRfZGlzcCgtMSwgJnAtPmdlbik7CiAgICAgICAgZmJn ZW5faW5zdGFsbF9jbWFwKDAsICZwLT5nZW4pOwoKCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigm cC0+Z2VuLmluZm8pIDwgMCkgewoJCWdvdG8gcmV0X2VueGlvOwoJfQoKCWlmICghbm9kbXMpCgkJ cC0+ZG1zID0gMTsKCglyZXR1cm4gMDsKCiByZXRfZW54aW86CglrZnJlZShwKTsKCWlvdW5tYXAo cC0+ZmJfYWRkcl92aXJ0KTsKCXJldHVybiAtRU5YSU87Cn0KCgojaWZkZWYgTU9EVUxFCgpzdGF0 aWMgdm9pZCBfX2V4aXQgeDIyMGZiX2V4aXQodm9pZCkKewoJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZl cigmKGZiX3gyMjAtPmdlbi5pbmZvKSk7Cglpb3VubWFwKGZiX3gyMjAtPmZiX2FkZHJfdmlydCk7 CglrZnJlZShmYl94MjIwKTsKfQoKbW9kdWxlX2luaXQoeDIyMGZiX2luaXQpOwptb2R1bGVfZXhp dCh4MjIwZmJfZXhpdCk7CgpNT0RVTEVfUEFSTShmb250LCAicyIpOwpNT0RVTEVfUEFSTV9ERVND KGZvbnQsICJTcGVjaWZpZXMgYSBjb21waWxlZC1pbiBmb250IChkZWZhdWx0PW5vbmUpIik7Ck1P RFVMRV9QQVJNKGFjY2VsLCAiaSIpOwpNT0RVTEVfUEFSTV9ERVNDKGFjY2VsLCAiRW5hYmxlcyBo YXJkd2FyZSBhY2NlbGVyYXRpb24gKGRlZmF1bHQ9MCkiKTsKTU9EVUxFX1BBUk0obm9kbXMsICJp Iik7Ck1PRFVMRV9QQVJNX0RFU0Mobm9kbXMsICJEaXNhYmxlcyBkeW5hbWljIG1vZGUgc2VsZWN0 aW9uIChkZWZhdWx0PTApIik7CgojZWxzZQoKaW50IHgyMjBmYl9zZXR1cChjaGFyICpvcHRpb25z KQp7CgljaGFyICp0aGlzX29wdDsKCQoJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKCQlyZXR1 cm4gMTsKCglmb3IgKHRoaXNfb3B0ID0gc3RydG9rKG9wdGlvbnMsICIsIik7IHRoaXNfb3B0OwoJ ICAgICB0aGlzX29wdCA9IHN0cnRvayhOVUxMLCAiLCIpKSB7CgkJaWYgKCFzdHJuY21wKHRoaXNf b3B0LCAiZm9udDoiLCA1KSkgewoJCQlzdHJjcHkoZm9udG5hbWUsIHRoaXNfb3B0KzUpOwoJCX0g ZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJhY2NlbCIsIDUpKSB7CgkJCWFjY2VsID0gMTsK CQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibm9kbXMiLCAzKSkgewoJCQlub2RtcyA9 IDE7CgkJfSBlbHNlIHsKCQkJbW9kZV9vcHRpb24gPSB0aGlzX29wdDsKCQl9Cgl9CgkKCXJldHVy biAwOwp9CgojZW5kaWYgLyogTU9EVUxFICovCg== ------=_Part_12421_13149975.1126437190585 Content-Type: application/octet-stream; name="x220fb.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="x220fb.h" I2lmbmRlZiBfQVNNX0FUSV9YMjIwRkJfSAojZGVmaW5lIF9BU01fQVRJX1gyMjBGQl9ICgojaW5j bHVkZSA8bGludXgvaW9jdGwuaD4KI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CgpzdHJ1Y3QgeDIyMGZi X2NvbmZpZyB7Cgl1bnNpZ25lZCBpbnQgZmJfb2Zmc2V0OwoJc3RydWN0IGZiX3Zhcl9zY3JlZW5p bmZvIHZhcjsKfTsKCiNkZWZpbmUgWDIyMF9NQUdJQyAweEQ4CiNkZWZpbmUgRkJJT19YMjIwX0NP TkZJRyAgICAgIF9JT1cgKFgyMjBfTUFHSUMsIDEsIHN0cnVjdCB4MjIwZmJfY29uZmlnKQojZGVm aW5lIEZCSU9fWDIyMF9XQUlUX0FDTFJFUSBfSU9SIChYMjIwX01BR0lDLCAyLCBzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8pCiNkZWZpbmUgRkJJT19YMjIwX1NFVF9ETVMgICAgIF9JT1cgKFgyMjBf TUFHSUMsIDMsIGludCkKCiNlbmRpZiAvKiBfQVNNX0FUSV9YMjIwRkJfSCAqLwo= ------=_Part_12421_13149975.1126437190585-- ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf