From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-pz0-f46.google.com ([209.85.210.46]:55257 "EHLO mail-pz0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752671Ab1GQOSY (ORCPT ); Sun, 17 Jul 2011 10:18:24 -0400 Received: by pzk3 with SMTP id 3so3236989pzk.5 for ; Sun, 17 Jul 2011 07:18:24 -0700 (PDT) MIME-Version: 1.0 From: =?ISO-8859-1?Q?Istv=E1n_V=E1radi?= Date: Sun, 17 Jul 2011 16:18:04 +0200 Message-ID: Subject: Smart card reader support for Anysee DVB devices To: linux-media@vger.kernel.org Content-Type: multipart/mixed; boundary=000e0cd1570638788e04a8448e86 Sender: linux-media-owner@vger.kernel.org List-ID: --000e0cd1570638788e04a8448e86 Content-Type: text/plain; charset=ISO-8859-1 Hi, I have developed smart card reader support for the Anysee devices by extending Antti Palosaari's driver. I attached the patches for it. It registers a character device named /dev/anysee_scN for each Anysee device. The character device supports two ioctl's (see anysee_sc), one for detecting the presence of a card, the other one for resetting the card and querying the ATR. The write() operation writes to the card by packaging the bytes into USB commands. The read() operation issues an appropriate command over USB and returns the reply. I have also written a simple OpenCT driver (attached) which shows the usage. I would like to have the kernel driver included in the official sources. For this reason I corresponded with Antti, and he suggested the perhaps the kernel driver should have a lower-level interface. I had the following proposal: We would continue having the two ioctls, ANYSEE_SC_ACTIVATE and ANYSEE_SC_PRESENT, however, ANYSEE_SC_ACTIVATE would do only the register reading and writing. Besides these two we need access to the anysee_ctrl_msg() function somehow. I think the cleanest way would be via another ioctl() call in which we would pass the return buffer as well, with the length so that we know how many bytes to copy. Another possibility would be that a call to write() calls anysee_ctrl_msg() and stores the return data in a 64 byte buffer that we allocate for each device. The read() following a write() would read this buffer, then discard it. Further read() attempts would fail with EAGAIN, or we could maintain an offset into the 64 byte buffer, and read as long as there is data, and fail only then. A write() would cause losing any unread data. What do you think? Thanks, Istvan --000e0cd1570638788e04a8448e86 Content-Type: application/octet-stream; name=patch Content-Disposition: attachment; filename=patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_gq830snz0 LS0tIGFueXNlZS5jLm9yaWcJMjAxMC0wOC0wMiAwMDoxMToxNC4wMDAwMDAwMDAgKzAyMDAKKysr IGFueXNlZS5jCTIwMTAtMTItMjggMDk6MDQ6NDUuMDAwMDAwMDAwICswMTAwCkBAIC0zMiwxMSAr MzIsMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiYW55c2VlLmgiCisjaW5jbHVkZSAiYW55c2VlX3Nj LmgiCiAjaW5jbHVkZSAidGRhMTAwMnguaCIKICNpbmNsdWRlICJtdDM1Mi5oIgogI2luY2x1ZGUg Im10MzUyX3ByaXYuaCIKICNpbmNsdWRlICJ6bDEwMzUzLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9k ZXZpY2UuaD4KKwogLyogZGVidWcgKi8KIHN0YXRpYyBpbnQgZHZiX3VzYl9hbnlzZWVfZGVidWc7 CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYW55c2VlX2RlYnVnLCBpbnQsIDA2 NDQpOwpAQCAtMTMyLDYgKzEzNSwyNzMgQEAKIAlyZXR1cm4gYW55c2VlX2N0cmxfbXNnKGQsIGJ1 Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwsIDApOwogfQogCitzdGF0aWMgZGV2X3Qgc2NfZGV2Oworc3Rh dGljIGNvbnN0IHVuc2lnbmVkIHNjX2NvdW50ID0gMTY7CitzdGF0aWMgc3RydWN0IGNsYXNzKiBz Y19jbGFzcyA9IDA7CisKK3N0YXRpYyBpbnQgYW55c2VlX3NjX29wZW4oc3RydWN0IGlub2RlICpp bm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisgICAgICAgIHN0cnVjdCBhbnlzZWVfc2Nfc3Rh dGUqIHNjX3N0YXRlID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBhbnlzZWVf c2Nfc3RhdGUsIGNkZXYpOworICAgICAgICBmaWxwLT5wcml2YXRlX2RhdGEgPSBzY19zdGF0ZTsK KyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW55c2VlX3NjX2NoZWNrX3ByZXNl bmNlKHN0cnVjdCBkdmJfdXNiX2RldmljZSogZCkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICB1 OCB4OworCisgICAgcmV0ID0gYW55c2VlX3JlYWRfcmVnKGQsIDB4MDA4MCwgJngpOworICAgIGlm IChyZXQhPTApIHJldHVybiByZXQ7CisKKyAgICBpZiAoKHgmMHgwMikhPTApIHJldHVybiAwOwor CisgICAgcmV0ID0gYW55c2VlX3dyaXRlX3JlZyhkLCAweGIxLCAweGE3KTsKKyAgICBpZiAocmV0 IT0wKSByZXR1cm4gcmV0OworCisgICAgcmV0ID0gYW55c2VlX3JlYWRfcmVnKGQsIDB4MDA4MCwg JngpOworICAgIAorICAgIGlmIChyZXQhPTApIHJldHVybiByZXQ7CisgICAgZWxzZSByZXR1cm4g KCh4JjB4MDIpPT0wKSA/IC1FUElQRSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgYW55c2VlX3NjX3Jl YWRfYnl0ZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UqIGQsIHU4KiBkZXN0LCB1bnNpZ25lZCBpbnQg dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBsYXN0KQoreworICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCByZWFkX2ludGVydmFsID0gMjA7CisgICAgCisgICAgdTgg Y21kW10gPSB7IDB4MzQsIDB4MDYsIDB4MDEsIDB4MDAgfTsKKyAgICAKKyAgICB1OCBidWZbNF07 CisgICAgdW5zaWduZWQgbnVtX2N5Y2xlcyA9IHRpbWVvdXQgLyByZWFkX2ludGVydmFsLCBpOwor CisgICAgaW50IHJldCA9IDA7CisgICAgY21kWzNdID0gbGFzdDsKKyAgICBmb3IoaSA9IDA7IGk8 bnVtX2N5Y2xlcyAmJiByZXQ9PTA7ICsraSkgeworICAgICAgICByZXQgPSBhbnlzZWVfY3RybF9t c2coZCwgY21kLCBzaXplb2YoY21kKSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGlmIChy ZXQ9PTApIHsKKyAgICAgICAgICAgIGlmIChidWZbMF09PTB4MDEpIHsKKyAgICAgICAgICAgICAg ICAqZGVzdCA9IGJ1ZlsyXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChtc2xlZXBfaW50ZXJydXB0aWJsZShyZWFkX2ludGVydmFsKT4w KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBz c2l6ZV90IGFueXNlZV9zY19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVm LCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKK3sKKyAgICAgICAgc3RydWN0IGFueXNlZV9z Y19zdGF0ZSogc2Nfc3RhdGUgPSAoc3RydWN0IGFueXNlZV9zY19zdGF0ZSopZmlscC0+cHJpdmF0 ZV9kYXRhOworICAgICAgICBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UqIGQgPSBzY19zdGF0ZS0+ZHZi X3VzYl9kZXZpY2U7CisgICAgICAgIAorICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgdW5z aWduZWQgaW5kZXggPSAwOworICAgICAgICB1OCByZWFkX2J1Zltjb3VudF07CisKKworCWlmICht dXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNjX3N0YXRlLT5tdXRleCkgPCAwKQorCQlyZXR1cm4g LUVBR0FJTjsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXQ9PTApIHsKKyAgICAgICAgICAgIHJl dCA9IGFueXNlZV9zY19jaGVja19wcmVzZW5jZShkKTsKKyAgICAgICAgfQorCisgICAgICAgIHdo aWxlKHJldD09MCAmJiBpbmRleDxjb3VudCkgeworICAgICAgICAgICAgcmV0ID0gYW55c2VlX3Nj X3JlYWRfYnl0ZShkLCByZWFkX2J1ZitpbmRleCwgKGluZGV4PT0wKSA/IDEwMDAgOiAxMDAsIDB4 MDEpOworICAgICAgICAgICAgaWYgKHJldD09MCkgKytpbmRleDsKKyAgICAgICAgfQorCisgICAg ICAgIGlmIChyZXQ9PTApIHsKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoYnVmLCByZWFk X2J1ZiwgaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG11dGV4X3VubG9jaygmc2Nfc3RhdGUtPm11dGV4 KTsKKyAgICAKKyAgICAgICAgcmV0dXJuIChyZXQ9PTApID8gaW5kZXggOiByZXQ7Cit9CisKK3N0 YXRpYyBzc2l6ZV90IGFueXNlZV9zY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hh ciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCit7CisgICAgICAgIHN0 cnVjdCBhbnlzZWVfc2Nfc3RhdGUqIHNjX3N0YXRlID0gKHN0cnVjdCBhbnlzZWVfc2Nfc3RhdGUq KWZpbHAtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgc3RydWN0IGR2Yl91c2JfZGV2aWNlKiBkID0g c2Nfc3RhdGUtPmR2Yl91c2JfZGV2aWNlOworCisgICAgICAgIHU4IGNtZFtdID0geyAweDM0LCAw eDA4LCAweDAxLCAweDAxLCAweDAwLCAweDA1IH07CisgICAgICAgIHNzaXplX3QgcmV0ID0gMDsK KyAgICAgICAgdW5zaWduZWQgd3JpdHRlbiA9IDA7CisKKyAgICAgICAgaWYgKGNvdW50PjI1Nikg eworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAgICAgIAor CWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNjX3N0YXRlLT5tdXRleCkgPCAwKQorCQly ZXR1cm4gLUVBR0FJTjsKKworICAgICAgICBpZiAocmV0PT0wKSB7CisgICAgICAgICAgICByZXQg PSBhbnlzZWVfc2NfY2hlY2tfcHJlc2VuY2UoZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo cmV0PT0wKSB7CisgICAgICAgICAgICAgICAgY21kWzVdID0gY291bnQmMHhmZjsKKyAgICAgICAg ICAgICAgICByZXQgPSAgYW55c2VlX2N0cmxfbXNnKGQsIGNtZCwgc2l6ZW9mKGNtZCksIDAsIDAp OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB3aGlsZSAocmV0PT0wICYmIHdyaXR0ZW48 Y291bnQpIHsKKyAgICAgICAgICAgICAgICB1OCB3cml0ZV9idWZbNTJdOworCisgICAgICAgICAg ICAgICAgdW5zaWduZWQgdG9fd3JpdGUgPSBjb3VudCAtIHdyaXR0ZW47CisgICAgICAgICAgICAg ICAgaWYgKHRvX3dyaXRlPjQ4KSB0b193cml0ZSA9IDQ4OworCisgICAgICAgICAgICAgICAgd3Jp dGVfYnVmWzBdID0gMHgzNDsKKyAgICAgICAgICAgICAgICB3cml0ZV9idWZbMV0gPSAweDA3Owor ICAgICAgICAgICAgICAgIHdyaXRlX2J1ZlsyXSA9IHRvX3dyaXRlOworICAgICAgICAgICAgICAg IGlmIChjb3B5X2Zyb21fdXNlcih3cml0ZV9idWYrMywgYnVmICsgd3JpdHRlbiwgdG9fd3JpdGUp KSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7CisgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgaWYgKHJldD09MCkgeworICAgICAgICAgICAgICAgICAgICB3 cml0ZV9idWZbdG9fd3JpdGUrM10gPSAweDAxOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg ICAgICAgICAgICAgICAgcmV0ID0gYW55c2VlX2N0cmxfbXNnKGQsIHdyaXRlX2J1ZiwgdG9fd3Jp dGUgKyA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVf YnVmLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldD09MCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHdyaXRlX2J1ZlswXT09dG9fd3JpdGUpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3cml0dGVuICs9IHRvX3dyaXRlOworICAgICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOworICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtdXRleF91bmxvY2soJnNjX3N0 YXRlLT5tdXRleCk7CisKKyAgICAgICAgcmV0dXJuIChyZXQ9PTApID8gY291bnQgOiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgYW55c2VlX3NjX2FjdGl2YXRlKHN0cnVjdCBhbnlzZWVfc2Nfc3RhdGUq IHNjX3N0YXRlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sgICAgCisgICAgICAgIHN0cnVjdCBkdmJf dXNiX2RldmljZSogZCA9IHNjX3N0YXRlLT5kdmJfdXNiX2RldmljZTsKKyAgICAgICAgc3RydWN0 IGFueXNlZV9zY19hY3RpdmF0ZSBfX3VzZXIqIHBhcmFtcyA9IChzdHJ1Y3QgYW55c2VlX3NjX2Fj dGl2YXRlIF9fdXNlciopYXJnOworICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgdTggeDsK KworICAgICAgICBpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHBhcmFtcywgc2l6ZW9mKGFu eXNlZV9zY19hY3RpdmF0ZSkpKSB7CisgICAgICAgICAgICByZXQgPSAtRUZBVUxUOworICAgICAg ICB9CisKKyAgICAgICAgaWYgKHJldD09MCkgeworICAgICAgICAgICAgcmV0ID0gYW55c2VlX3Nj X2NoZWNrX3ByZXNlbmNlKGQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmV0 PT0wKSB7CisgICAgICAgICAgICByZXQgPSBhbnlzZWVfcmVhZF9yZWcoZCwgMHgwMGEwLCAmeCk7 CisgICAgICAgIH0KKworICAgICAgICBpZiAocmV0PT0wKSB7CisgICAgICAgICAgICByZXQgPSBh bnlzZWVfd3JpdGVfcmVnKGQsIDB4MDBhMCwgeHwweDAxKTsKKyAgICAgICAgfQorCisgICAgICAg IGlmIChyZXQ9PTApIHsKKyAgICAgICAgICAgIHN0YXRpYyB1OCBjbWRbXSA9IHsgMHgzNCwgMHgw OSwgMHgwMSB9OworICAgICAgICAgICAgcmV0ID0gYW55c2VlX2N0cmxfbXNnKGQsIGNtZCwgc2l6 ZW9mKGNtZCksIDAsIDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJldD09MCkgeworICAg ICAgICAgICAgc3RhdGljIHU4IGNtZFtdID0geyAweDM0LCAweDA4LCAweDAxLCAweDAyIH07Cisg ICAgICAgICAgICByZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgY21kLCBzaXplb2YoY21kKSwgMCwg MCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmV0PT0wKSB7CisgICAgICAgICAgICB1bnNp Z25lZCBpbmRleCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBhdHJfbGVuZ3RoID0gMjsKKyAg ICAgICAgICAgIHVuc2lnbmVkIGZtdF9pbmRleCA9IDE7CisgICAgICAgICAgICB1bnNpZ25lZCBr ID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUoaW5kZXg8c2l6ZW9mKHBhcmFt cy0+YXRyKSAmJiBpbmRleDxhdHJfbGVuZ3RoICYmIHJldD09MCkgeworICAgICAgICAgICAgICAg IHJldCA9IGFueXNlZV9zY19yZWFkX2J5dGUoZCwgJngsIChpbmRleD09MCkgPyAxMDAwIDogMTAw LCAweDAwKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0PT0wKSB7CisgICAgICAgICAgICAgICAg ICAgIGlmIChpbmRleD09Zm10X2luZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo aW5kZXg9PTEpIGsgPSB4JjB4MGY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCYweDEw KSArK2F0cl9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCYweDIwKSArK2F0 cl9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCYweDQwKSArK2F0cl9sZW5n dGg7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCYweDgwKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm10X2luZGV4ID0gYXRyX2xlbmd0aDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICArK2F0cl9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0cl9sZW5ndGggKz0gazsKKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICBwYXJhbXMtPmF0cltpbmRleCsrXSA9IHg7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgcGFyYW1zLT5hdHJfbGVuZ3RoID0gaW5kZXg7CisgICAgICAg IH0KKworICAgICAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFueXNlZV9zY19pb2N0 bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNt ZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisgICAgICAgIHN0cnVjdCBhbnlzZWVfc2Nfc3RhdGUq IHNjX3N0YXRlID0gKHN0cnVjdCBhbnlzZWVfc2Nfc3RhdGUqKWZpbHAtPnByaXZhdGVfZGF0YTsK KyAgICAgICAgaW50IHJldCA9IC1FTk9ERVY7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZzY19zdGF0ZS0+bXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKyAgICAgICAg c3dpdGNoKGNtZCkgeworICAgICAgICAgICAgY2FzZSBBTllTRUVfU0NfQUNUSVZBVEU6CisgICAg ICAgICAgICAgIHJldCA9IGFueXNlZV9zY19hY3RpdmF0ZShzY19zdGF0ZSwgYXJnKTsKKyAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFOWVNFRV9TQ19QUkVTRU5UOgorICAg ICAgICAgICAgICByZXQgPSBhbnlzZWVfc2NfY2hlY2tfcHJlc2VuY2Uoc2Nfc3RhdGUtPmR2Yl91 c2JfZGV2aWNlKTsKKyAgICAgICAgICAgICAgaWYgKHJldD09LUVQSVBFKSByZXQgPSAwOworICAg ICAgICAgICAgICBlbHNlIGlmIChyZXQ9PTApIHJldCA9IDE7CisgICAgICAgIH0KKworICAgICAg ICBtdXRleF91bmxvY2soJnNjX3N0YXRlLT5tdXRleCk7CisKKyAgICAgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYW55c2VlX3NjX2ZvcHMgPSB7Cisg ICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorICAgICAgICAub3BlbiA9IGFueXNlZV9zY19v cGVuLAorICAgICAgICAucmVhZCA9IGFueXNlZV9zY19yZWFkLAorICAgICAgICAud3JpdGUgPSBh bnlzZWVfc2Nfd3JpdGUsCisgICAgICAgIC5pb2N0bCA9IGFueXNlZV9zY19pb2N0bCwKK307CisK K3N0YXRpYyBpbnQgYW55c2VlX3NjX2luaXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciogYWRhcCkK K3sKKyAgICAgICAgc3RydWN0IGR2Yl91c2JfZGV2aWNlKiBkID0gYWRhcC0+ZGV2OworICAgICAg ICBpbnQgcmV0ID0gMDsKKyAgICAgICAgc3RydWN0IGFueXNlZV9zdGF0ZSAqc3RhdGUgPSBkLT5w cml2OworICAgICAgICBzdGF0ZS0+c2Nfc3RhdGUuZHZiX3VzYl9kZXZpY2UgPSBkOworICAgICAg ICAKKyAgICAgICAgc3RhdGUtPnNjX3N0YXRlLmRldm51bSA9IE1LREVWKE1BSk9SKHNjX2Rldiks IGQtPmFkYXB0ZXJbMF0uaWQpOworICAgICAgICAKKyAgICAgICAgY2Rldl9pbml0KCZzdGF0ZS0+ c2Nfc3RhdGUuY2RldiwgJmFueXNlZV9zY19mb3BzKTsKKyAgICAgICAgc3RhdGUtPnNjX3N0YXRl LmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKworICAgICAgICBtdXRleF9pbml0KCZzdGF0ZS0+ c2Nfc3RhdGUubXV0ZXgpOworICAgICAgICAKKyAgICAgICAgcmV0ID0gY2Rldl9hZGQoJnN0YXRl LT5zY19zdGF0ZS5jZGV2LCBzdGF0ZS0+c2Nfc3RhdGUuZGV2bnVtLCAxKTsKKyAgICAgICAgaWYg KHJldCkgeworCQllcnIoIiVzOiBjZGV2X2FkZCBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIF9f ZnVuY19fLCByZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRldmljZV9j cmVhdGUoc2NfY2xhc3MsIGFkYXAtPmR2Yl9hZGFwLmRldmljZSwgc3RhdGUtPnNjX3N0YXRlLmRl dm51bSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAiYW55c2VlX3NjJXUiLCBk LT5hZGFwdGVyWzBdLmlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworfQorCiBz dGF0aWMgaW50IGFueXNlZV9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKIAlpbnQg cmV0OwpAQCAtMTQ4LDYgKzQxOCwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBh bnlzZWVfZXhpdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgZHZiX3Vz Yl9kZXZpY2UgKmQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworICAgICAgICBzdHJ1Y3QgYW55 c2VlX3N0YXRlICpzdGF0ZSA9IGQtPnByaXY7CisKKyAgICAgICAgZGV2aWNlX2Rlc3Ryb3koc2Nf Y2xhc3MsIHN0YXRlLT5zY19zdGF0ZS5kZXZudW0pOworICAgICAgICBjZGV2X2RlbCgmc3RhdGUt PnNjX3N0YXRlLmNkZXYpOworCisgICAgICAgIGR2Yl91c2JfZGV2aWNlX2V4aXQoaW50Zik7Cit9 CisKIC8qIEkyQyAqLwogc3RhdGljIGludCBhbnlzZWVfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19h ZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAogCWludCBudW0pCkBAIC0yNjksNiAr NTUwLDEwIEBACiAJCXJldHVybiByZXQ7CiAJZGViX2luZm8oIiVzOiBJTyBwb3J0IEQ6JTAyeFxu IiwgX19mdW5jX18sIGlvX2QpOwogCisgICAgICAgIHJldCA9IGFueXNlZV9zY19pbml0KGFkYXAp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAkvKiBTZWxlY3QgZGVtb2QgdXNpbmcgdHJp YWwgYW5kIGVycm9yIG1ldGhvZC4gKi8KIAogCS8qIFRyeSB0byBhdHRhY2ggZGVtb2R1bGF0b3Ig aW4gZm9sbG93aW5nIG9yZGVyOgpAQCAtNTQxLDcgKzgyNiw3IEBACiBzdGF0aWMgc3RydWN0IHVz Yl9kcml2ZXIgYW55c2VlX2RyaXZlciA9IHsKIAkubmFtZSAgICAgICA9ICJkdmJfdXNiX2FueXNl ZSIsCiAJLnByb2JlICAgICAgPSBhbnlzZWVfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBkdmJfdXNi X2RldmljZV9leGl0LAorCS5kaXNjb25uZWN0ID0gYW55c2VlX2V4aXQsCiAJLmlkX3RhYmxlICAg PSBhbnlzZWVfdGFibGUsCiB9OwogCkBAIC01NTAsMTAgKzgzNSwyOCBAQAogewogCWludCByZXQ7 CiAKLQlyZXQgPSB1c2JfcmVnaXN0ZXIoJmFueXNlZV9kcml2ZXIpOwotCWlmIChyZXQpCi0JCWVy cigiJXM6IHVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIF9fZnVuY19fLCBy ZXQpOwotCisgICAgICAgIHJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJnNjX2RldiwgMCwgc2Nf Y291bnQsICJhbnlzZWVfc2MiKTsKKyAgICAgICAgaWYgKHJldCkgCisJCWVycigiJXM6IGFsbG9j X2NocmRldl9yZWdpb24gZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCBfX2Z1bmNfXywgcmV0KTsK KyAgICAgICAgCisgICAgICAgIGlmICghcmV0KSB7CisgICAgICAgICAgICAgICAgc2NfY2xhc3Mg PSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJhbnlzZWVfc2MiKTsKKyAgICAgICAgICAgICAg ICBpZiAoSVNfRVJSKHNjX2NsYXNzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCIl czogY2xhc3Nfc2ltcGxlX2NyZWF0ZSBmYWlsZWQuIiwgX19mdW5jX18pOworICAgICAgICAgICAg ICAgICAgICAgICAgdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKHNjX2Rldiwgc2NfY291bnQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJldCkgeworICAgICAgICAgICAgICAgIHJldCA9 IHVzYl9yZWdpc3RlcigmYW55c2VlX2RyaXZlcik7CisgICAgICAgICAgICAgICAgaWYgKHJldCkg eworICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCIlczogdXNiX3JlZ2lzdGVyIGZhaWxlZC4g RXJyb3IgbnVtYmVyICVkIiwgX19mdW5jX18sIHJldCk7CisgICAgICAgICAgICAgICAgICAgICAg ICBjbGFzc19kZXN0cm95KHNjX2NsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVucmVn aXN0ZXJfY2hyZGV2X3JlZ2lvbihzY19kZXYsIHNjX2NvdW50KTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NjEs NiArODY0LDExIEBACiB7CiAJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Ig c3Vic3lzdGVtICovCiAJdXNiX2RlcmVnaXN0ZXIoJmFueXNlZV9kcml2ZXIpOworCisgICAgICAg IGNsYXNzX2Rlc3Ryb3koc2NfY2xhc3MpOworICAgICAgICAKKyAgICAgICAgdW5yZWdpc3Rlcl9j aHJkZXZfcmVnaW9uKHNjX2Rldiwgc2NfY291bnQpOworCiB9CiAKIG1vZHVsZV9pbml0KGFueXNl ZV9tb2R1bGVfaW5pdCk7Ci0tLSBhbnlzZWUuaC5vcmlnCTIwMTAtMDgtMDIgMDA6MTE6MTQuMDAw MDAwMDAwICswMjAwCisrKyBhbnlzZWUuaAkyMDEwLTEyLTA1IDE5OjA3OjU1LjAwMDAwMDAwMCAr MDEwMApAQCAtMzQsNiArMzQsOCBAQAogI2lmbmRlZiBfRFZCX1VTQl9BTllTRUVfSF8KICNkZWZp bmUgX0RWQl9VU0JfQU5ZU0VFX0hfCiAKKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisKICNkZWZp bmUgRFZCX1VTQl9MT0dfUFJFRklYICJhbnlzZWUiCiAjaW5jbHVkZSAiZHZiLXVzYi5oIgogCkBA IC01Niw5ICs1OCwxNyBAQAogCUNNRF9TTUFSVENBUkQgICAgICAgICAgID0gMHgzNCwKIH07CiAK K3N0cnVjdCBhbnlzZWVfc2Nfc3RhdGUgeworICAgICAgICBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2Uq IGR2Yl91c2JfZGV2aWNlOworICAgICAgICBkZXZfdCBkZXZudW07CisgICAgICAgIHN0cnVjdCBj ZGV2IGNkZXY7CisgICAgICAgIHN0cnVjdCBtdXRleCBtdXRleDsKK307CisKIHN0cnVjdCBhbnlz ZWVfc3RhdGUgewogCXU4IHR1bmVyOwogCXU4IHNlcTsKKyAgICAgICAgc3RydWN0IGFueXNlZV9z Y19zdGF0ZSBzY19zdGF0ZTsKIH07CiAKICNlbmRpZgo= --000e0cd1570638788e04a8448e86 Content-Type: text/x-chdr; charset=US-ASCII; name="anysee_sc.h" Content-Disposition: attachment; filename="anysee_sc.h" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gq830yen1 I2lmbmRlZiBBTllTRUVfU0NfSAojZGVmaW5lIEFOWVNFRV9TQ19ICgojaW5jbHVkZSA8bGludXgv aW9jdGwuaD4KCiNkZWZpbmUgQU5ZU0VFX1NDX0lPQ19NQUdJQyAncycKCnN0cnVjdCBhbnlzZWVf c2NfYWN0aXZhdGUgewogICAgICAgIHVuc2lnbmVkIGF0cl9sZW5ndGg7CiAgICAgICAgdW5zaWdu ZWQgY2hhciBhdHJbMzNdOwp9OwoKI2RlZmluZSBBTllTRUVfU0NfQUNUSVZBVEUgX0lPUihBTllT RUVfU0NfSU9DX01BR0lDLCAxLCBzdHJ1Y3QgYW55c2VlX3NjX2FjdGl2YXRlKQoKI2RlZmluZSBB TllTRUVfU0NfUFJFU0VOVCBfSU8oQU5ZU0VFX1NDX0lPQ19NQUdJQywgMikKCiNlbmRpZgo= --000e0cd1570638788e04a8448e86 Content-Type: text/x-csrc; charset=US-ASCII; name="ifd-anysee.c" Content-Disposition: attachment; filename="ifd-anysee.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gq838wpl2 I2luY2x1ZGUgImludGVybmFsLmgiCgojaW5jbHVkZSAiYW55c2VlX3NjLmgiCgojaW5jbHVkZSA8 c3RyaW5nLmg+CiNpbmNsdWRlIDxmY250bC5oPgoKc3RhdGljIGludCBhbnlzZWVfb3BlbihpZmRf cmVhZGVyX3QqIHJlYWRlciwgY29uc3QgY2hhciogbmFtZSkKewogICAgaWZkX2RldmljZV90KiBk ZXYgPSAwOwogICAgaW50IGZkID0gLTE7CiAgICBjb25zdCBjaGFyKiBkZXZpY2VfbmFtZSA9IDA7 CgogICAgaWZkX2RlYnVnKDEsICJhbnlzZWVfb3BlbjogbmFtZT0nJXMnXG4iLCBuYW1lKTsKCiAg ICBkZXZpY2VfbmFtZSA9IHN0cmNocihuYW1lLCAnOicpOwogICAgaWYgKGRldmljZV9uYW1lPT0w KSByZXR1cm4gLTE7CiAgICArK2RldmljZV9uYW1lOwoKICAgIGZkID0gb3BlbihkZXZpY2VfbmFt ZSwgT19SRFdSKTsKICAgIGlmZF9kZWJ1ZygyLCAiYW55c2VlX29wZW46IGZkPSVkXG4iLCBmZCk7 CiAgICBpZiAoZmQ8MCkgcmV0dXJuIC0xOwogICAgCiAgICByZWFkZXItPm5hbWUgPSAiQW55c2Vl IERWQiBVU0IgY2FyZCByZWFkZXIiOwogICAgcmVhZGVyLT5uc2xvdHMgPSAxOwoKICAgIGRldiA9 IGlmZF9kZXZpY2VfbmV3KG5hbWUsIDAsIHNpemVvZigqZGV2KSk7CiAgICByZWFkZXItPmRldmlj ZSA9IGRldjsKICAgIGRldi0+dGltZW91dCA9IDEwMDA7CiAgICBkZXYtPmZkID0gZmQ7CiAgICBk ZXYtPnR5cGUgPSBJRkRfREVWSUNFX1RZUEVfT1RIRVI7CgogICAgcmV0dXJuIDA7Cn0KCnN0YXRp YyBpbnQgYW55c2VlX2Nsb3NlKGlmZF9yZWFkZXJfdCAqIHJlYWRlcikKewogICAgcmV0dXJuIGNs b3NlKHJlYWRlci0+ZGV2aWNlLT5mZCk7Cn0KCnN0YXRpYyBpbnQgYW55c2VlX2FjdGl2YXRlKGlm ZF9yZWFkZXJfdCAqcmVhZGVyKQp7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludCBhbnlzZWVf ZGVhY3RpdmF0ZShpZmRfcmVhZGVyX3QgKnJlYWRlcikKewogICAgcmV0dXJuIDA7Cn0KCnN0YXRp YyBpbnQgYW55c2VlX2NhcmRfc3RhdHVzKGlmZF9yZWFkZXJfdCAqcmVhZGVyLCBpbnQgc2xvdCwg aW50ICpzdGF0dXMpCnsKICAgIGludCBydiA9IGlvY3RsKHJlYWRlci0+ZGV2aWNlLT5mZCwgQU5Z U0VFX1NDX1BSRVNFTlQpOwogICAgaWZkX2RlYnVnKDIsICJhbnlzZWVfY2FyZF9zdGF0dXM6IHJ2 PSVkXG4iLCBydik7CiAgICBpZiAocnY8MCkgewogICAgICAgIHJldHVybiAtMTsKICAgIH0gZWxz ZSB7CiAgICAgICAgKnN0YXR1cyA9IChydj09MCkgPyAwIDogSUZEX0NBUkRfUFJFU0VOVDsKICAg ICAgICByZXR1cm4gMDsKICAgIH0KfQoKc3RhdGljIGludCBhbnlzZWVfY2FyZF9yZXNldChpZmRf cmVhZGVyX3QgKnJlYWRlciwgaW50IHNsb3QsIHZvaWQgKmF0ciwgc2l6ZV90IGF0cl9sZW4pCnsK ICAgIHN0cnVjdCBhbnlzZWVfc2NfYWN0aXZhdGUgYWN0aXZhdGU7CgogICAgaWYgKGlvY3RsKHJl YWRlci0+ZGV2aWNlLT5mZCwgQU5ZU0VFX1NDX0FDVElWQVRFLCAmYWN0aXZhdGUpPDApIHsKICAg ICAgICBpZmRfZGVidWcoMiwgImFueXNlZV9jYXJkX3Jlc2V0OiBmYWlsZWRcbiIpOwogICAgICAg IHJldHVybiAtMTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IChhdHJfbGVu PGFjdGl2YXRlLmF0cl9sZW5ndGgpID8gYXRyX2xlbiA6IGFjdGl2YXRlLmF0cl9sZW5ndGg7CiAg ICAgICAgbWVtY3B5KGF0ciwgYWN0aXZhdGUuYXRyLCBsZW5ndGgpOwogICAgICAgIHJldHVybiBs ZW5ndGg7CiAgICB9Cn0KCgpzdGF0aWMgaW50IGFueXNlZV9zZW5kKGlmZF9yZWFkZXJfdCAqcmVh ZGVyLCB1bnNpZ25lZCBpbnQgZGFkLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbikKewogICAgcmV0dXJuIHdyaXRlKHJlYWRlci0+ ZGV2aWNlLT5mZCwgYnVmZmVyLCBsZW4pOwp9CgpzdGF0aWMgaW50IGFueXNlZV9yZWN2KGlmZF9y ZWFkZXJfdCAqcmVhZGVyLCB1bnNpZ25lZCBpbnQgZGFkLAogICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAg ICBsb25nIHRpbWVvdXQpCnsKICAgIHJldHVybiByZWFkKHJlYWRlci0+ZGV2aWNlLT5mZCwgYnVm ZmVyLCBsZW4pOwp9CgpzdGF0aWMgc3RydWN0IGlmZF9kcml2ZXJfb3BzIGFueXNlZV9vcHM7Cgp2 b2lkIGlmZF9hbnlzZWVfcmVnaXN0ZXIoKQp7CiAgICBhbnlzZWVfb3BzLm9wZW4gPSAmYW55c2Vl X29wZW47CiAgICBhbnlzZWVfb3BzLmNsb3NlID0gJmFueXNlZV9jbG9zZTsKICAgIGFueXNlZV9v cHMuYWN0aXZhdGUgPSAmYW55c2VlX2FjdGl2YXRlOwogICAgYW55c2VlX29wcy5kZWFjdGl2YXRl ID0gJmFueXNlZV9kZWFjdGl2YXRlOwogICAgYW55c2VlX29wcy5jYXJkX3N0YXR1cyA9ICZhbnlz ZWVfY2FyZF9zdGF0dXM7CiAgICBhbnlzZWVfb3BzLmNhcmRfcmVzZXQgPSAmYW55c2VlX2NhcmRf cmVzZXQ7CiAgICBhbnlzZWVfb3BzLnNlbmQgPSAmYW55c2VlX3NlbmQ7CiAgICBhbnlzZWVfb3Bz LnJlY3YgPSAmYW55c2VlX3JlY3Y7CgogICAgaWZkX2RyaXZlcl9yZWdpc3RlcigiYW55c2VlIiwg JmFueXNlZV9vcHMpOwp9Cg== --000e0cd1570638788e04a8448e86--