From owner-freebsd-hackers@freebsd.org Mon Aug 17 14:00:30 2015 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 26FAF9BBAA7 for ; Mon, 17 Aug 2015 14:00:30 +0000 (UTC) (envelope-from brianfundakowskifeldman@gmail.com) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 067B91BA3 for ; Mon, 17 Aug 2015 14:00:30 +0000 (UTC) (envelope-from brianfundakowskifeldman@gmail.com) Received: by mailman.ysv.freebsd.org (Postfix) id 060CC9BBAA6; Mon, 17 Aug 2015 14:00:30 +0000 (UTC) Delivered-To: hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DFC079BBAA5 for ; Mon, 17 Aug 2015 14:00:29 +0000 (UTC) (envelope-from brianfundakowskifeldman@gmail.com) Received: from mail-la0-x22d.google.com (mail-la0-x22d.google.com [IPv6:2a00:1450:4010:c03::22d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5B8B11BA1 for ; Mon, 17 Aug 2015 14:00:29 +0000 (UTC) (envelope-from brianfundakowskifeldman@gmail.com) Received: by lahi9 with SMTP id i9so79350835lah.2 for ; Mon, 17 Aug 2015 07:00:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=F4jd6IulmclXxwvNRjpitDbitYDzxhMAJhOHjDzZUuE=; b=Hhh0GOe359r0fRMCA8LIIyqUjqcwBWu7wWzVOeQ5KzTbzLDV4dTS1Nn4ShS+Dl7PKx OeERu7sPfvUKYHiagJ5yq3zQgC8pBcqULy36bVK9qo7F0c6TsxLakoHntuxcVpn6C/6L 6ocfxsfpcB75qEYtID6+3Hx7xQAh3aK/p5tOaxNCVXiqsScmtSynpJ6rMSVQLDj5OiLQ BcxdhuuwLu/vWm3MJ0NslV9rFunARRBqhisJ0WlPNpAuiic9egQnh83xHS+/dWIq7IgN WmRMLdqMqSWY0GKoQKIdh3JJqkUXegQe6jByCRapVPbhmSg26uh80nSAk2c2tAPiicvS dPYw== MIME-Version: 1.0 X-Received: by 10.152.20.196 with SMTP id p4mr1234299lae.121.1439820027185; Mon, 17 Aug 2015 07:00:27 -0700 (PDT) Received: by 10.25.126.2 with HTTP; Mon, 17 Aug 2015 07:00:26 -0700 (PDT) Date: Mon, 17 Aug 2015 10:00:26 -0400 Message-ID: Subject: spigen(4) SPI Generic IO interface -- need comments From: Brian Fundakowski Feldman To: hackers@freebsd.org Content-Type: multipart/mixed; boundary=089e013d203c42ea93051d823955 X-Mailman-Approved-At: Mon, 17 Aug 2015 14:55:59 +0000 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Aug 2015 14:00:30 -0000 --089e013d203c42ea93051d823955 Content-Type: text/plain; charset=UTF-8 I'm woefully out-of-practice with my kernel hackery (but still pretty proficient in jiggery-pokery) so I would like to get comments on a little driver I just made for interfacing arbitrarily in userland with SPI components. The only thing I'm exposing is a /dev/spigenN node with a single transfer ioctl and I put together a test circuit and program with an MCP3008 10-bit ADC IC to validate that it basically works, other than the limitation that the transfers must be octet-multiply-sized, but I haven't looked at the SoC's (I'm using a Raspberry Pi 2) data sheet to tell whether that's just a limit on the spibus(4) interface or the Broadcom SPI driver or the Broadcom SoC itself. I hit one snag in development where I simply called the ioctl wrong and found copyin(9) to page fault HARD if given a bogus user address to copy from, and panic the kernel. I can post up the test program if anyone wants but it's very trivial: I just align the start bit and the command data into the least significant bits of the first octet, shift it up two positions so the NULs get clocked out as part of the command field, and provide two octets for the data field to retrieve back the 10-bit digital value. Good to be back in the FreeBSD hacking! Cheers, Brian Fundakowski Feldman --089e013d203c42ea93051d823955 Content-Type: application/octet-stream; name="spigen.patch" Content-Disposition: attachment; filename="spigen.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_idfzo8lg0 SW5kZXg6IHN5cy9jb25mL2ZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9jb25mL2ZpbGVzCShyZXZp c2lvbiAyODY3ODYpCisrKyBzeXMvY29uZi9maWxlcwkod29ya2luZyBjb3B5KQpAQCAtMjQ1MCw2 ICsyNDUwLDcgQEAKIGRldi9zcGlidXMvb2Z3X3NwaWJ1cy5jCQlvcHRpb25hbCBmZHQgc3BpYnVz CiBkZXYvc3BpYnVzL3NwaWJ1cy5jCQlvcHRpb25hbCBzcGlidXMJCQkJXAogCWRlcGVuZGVuY3kJ InNwaWJ1c19pZi5oIgorZGV2L3NwaWJ1cy9zcGlnZW4uYwkJb3B0aW9uYWwgc3BpYnVzCiBkZXYv c3BpYnVzL3NwaWJ1c19pZi5tCQlvcHRpb25hbCBzcGlidXMKIGRldi9zdGUvaWZfc3RlLmMJCW9w dGlvbmFsIHN0ZSBwY2kKIGRldi9zdGcvdG1jMThjMzAuYwkJb3B0aW9uYWwgc3RnCkluZGV4OiBz eXMvZGV2L3NwaWJ1cy9zcGlnZW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3NwaWJ1cy9zcGln ZW4uYwkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYvc3BpYnVzL3NwaWdlbi5jCSh3b3JraW5nIGNv cHkpCkBAIC0wLDAgKzEsMTgxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBCcmlhbiBG dW5kYWtvd3NraSBGZWxkbWFuLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBB TlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAq IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOwor CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVk ZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5l bC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+Cisj aW5jbHVkZSA8c3lzL3NwaWdlbmlvLmg+CisKKyNpbmNsdWRlIDxkZXYvc3BpYnVzL3NwaS5oPgor I2luY2x1ZGUgInNwaWJ1c19pZi5oIgorCitzdHJ1Y3Qgc3BpZ2VuX3NvZnRjIHsKKwlkZXZpY2Vf dCBzY19kZXY7CisJc3RydWN0IGNkZXYgKnNjX2NkZXY7Cit9OworCitzdGF0aWMgaW50CitzcGln ZW5fcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCWRldmljZV9zZXRfZGVzYyhkZXYsICJTUEkgR2Vu ZXJpYyBJTyIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgc3BpZ2VuX29wZW4oc3Ry dWN0IGNkZXYgKiwgaW50LCBpbnQsIHN0cnVjdCB0aHJlYWQgKik7CitzdGF0aWMgaW50IHNwaWdl bl9pb2N0bChzdHJ1Y3QgY2RldiAqLCB1X2xvbmcsIGNhZGRyX3QsIGludCwgc3RydWN0IHRocmVh ZCAqKTsKK3N0YXRpYyBpbnQgc3BpZ2VuX2Nsb3NlKHN0cnVjdCBjZGV2ICosIGludCwgaW50LCBz dHJ1Y3QgdGhyZWFkICopOworCitzdGF0aWMgc3RydWN0IGNkZXZzdyBzcGlnZW5fY2RldnN3ID0g eworCS5kX3ZlcnNpb24gPSBEX1ZFUlNJT04sCisJLmRfbmFtZSA9ICJzcGlnZW4iLAorCS5kX29w ZW4gPSBzcGlnZW5fb3BlbiwKKwkuZF9pb2N0bCA9IHNwaWdlbl9pb2N0bCwKKwkuZF9jbG9zZSA9 IHNwaWdlbl9jbG9zZQorfTsKKworc3RhdGljIGludAorc3BpZ2VuX2F0dGFjaChkZXZpY2VfdCBk ZXYpCit7CisJc3RydWN0IHNwaWdlbl9zb2Z0YyAqc2M7CisJY29uc3QgaW50IHVuaXQgPSBkZXZp Y2VfZ2V0X3VuaXQoZGV2KTsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5z Y19kZXYgPSBkZXY7CisJc2MtPnNjX2NkZXYgPSBtYWtlX2Rldigmc3BpZ2VuX2NkZXZzdywgdW5p dCwKKwkgICAgVUlEX1JPT1QsIEdJRF9PUEVSQVRPUiwgMDY2MCwgInNwaWdlbiVkIiwgdW5pdCk7 CisJc2MtPnNjX2NkZXYtPnNpX2RydjEgPSBkZXY7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0 aWMgaW50IAorc3BpZ2VuX29wZW4oc3RydWN0IGNkZXYgKmRldiwgaW50IG9mbGFncywgaW50IGRl dnR5cGUsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGlj IGludAorc3BpZ2VuX3RyYW5zZmVyKHN0cnVjdCBjZGV2ICpjZGV2LCBzdHJ1Y3Qgc3BpZ2VuX3Ry YW5zZmVyICpzdCkKK3sKKwlzdHJ1Y3Qgc3BpX2NvbW1hbmQgdHJhbnNmZXI7CisJZGV2aWNlX3Qg ZGV2ID0gY2Rldi0+c2lfZHJ2MTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoc3QtPnN0X2NvbW1hbmQu aW92X2xlbiA9PSAwIHx8IHN0LT5zdF9kYXRhLmlvdl9sZW4gPT0gMCkKKwkJcmV0dXJuIChFSU5W QUwpOworCWlmIChzdC0+c3RfY29tbWFuZC5pb3ZfbGVuID4gUEFHRV9TSVpFIHx8CisJICAgIHN0 LT5zdF9kYXRhLmlvdl9sZW4gPiBQQUdFX1NJWkUpCisJCXJldHVybiAoRU5PTUVNKTsKKyNpZiAw CisJZGV2aWNlX3ByaW50ZihkZXYsICJjbWQgJXAgJXUgZGF0YSAlcCAldVxuIiwgc3QtPnN0X2Nv bW1hbmQuaW92X2Jhc2UsCisJICAgIHN0LT5zdF9jb21tYW5kLmlvdl9sZW4sIHN0LT5zdF9kYXRh Lmlvdl9iYXNlLCBzdC0+c3RfZGF0YS5pb3ZfbGVuKTsKKyNlbmRpZgorCXRyYW5zZmVyLnR4X2Nt ZCA9IHRyYW5zZmVyLnJ4X2NtZCA9IG1hbGxvYyhzdC0+c3RfY29tbWFuZC5pb3ZfbGVuLAorCSAg ICBNX0RFVkJVRiwgTV9XQUlUT0spOworCWlmICh0cmFuc2Zlci50eF9jbWQgPT0gTlVMTCkKKwkJ cmV0dXJuIChFTk9NRU0pOworCXRyYW5zZmVyLnR4X2RhdGEgPSB0cmFuc2Zlci5yeF9kYXRhID0g bWFsbG9jKHN0LT5zdF9kYXRhLmlvdl9sZW4sCisJICAgIE1fREVWQlVGLCBNX1dBSVRPSyk7CisJ aWYgKHRyYW5zZmVyLnR4X2RhdGEgPT0gTlVMTCkgeworCQlmcmVlKHRyYW5zZmVyLnR4X2NtZCwg TV9ERVZCVUYpOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJZXJyb3IgPSBjb3B5aW4oc3Qt PnN0X2NvbW1hbmQuaW92X2Jhc2UsIHRyYW5zZmVyLnR4X2NtZCwKKwkgICAgdHJhbnNmZXIudHhf Y21kX3N6ID0gdHJhbnNmZXIucnhfY21kX3N6ID0gc3QtPnN0X2NvbW1hbmQuaW92X2xlbik7CQor CWlmIChlcnJvciA9PSAwKQorCQllcnJvciA9IGNvcHlpbihzdC0+c3RfZGF0YS5pb3ZfYmFzZSwg dHJhbnNmZXIudHhfZGF0YSwKKwkJICAgIHRyYW5zZmVyLnR4X2RhdGFfc3ogPSB0cmFuc2Zlci5y eF9kYXRhX3N6ID0KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfZGF0YS5pb3Zf bGVuKTsJCisJaWYgKGVycm9yID09IDApCisJCWVycm9yID0gU1BJQlVTX1RSQU5TRkVSKGRldmlj ZV9nZXRfcGFyZW50KGRldiksIGRldiwgJnRyYW5zZmVyKTsKKwlpZiAoZXJyb3IgPT0gMCkgewor CQllcnJvciA9IGNvcHlvdXQodHJhbnNmZXIucnhfY21kLCBzdC0+c3RfY29tbWFuZC5pb3ZfYmFz ZSwKKwkJICAgIHRyYW5zZmVyLnJ4X2NtZF9zeik7CisJCWlmIChlcnJvciA9PSAwKQorCQkJZXJy b3IgPSBjb3B5b3V0KHRyYW5zZmVyLnJ4X2RhdGEsIHN0LT5zdF9kYXRhLmlvdl9iYXNlLAorCQkJ ICAgIHRyYW5zZmVyLnJ4X2RhdGFfc3opOworCX0KKworCWZyZWUodHJhbnNmZXIudHhfY21kLCBN X0RFVkJVRik7CisJZnJlZSh0cmFuc2Zlci50eF9kYXRhLCBNX0RFVkJVRik7CisJcmV0dXJuIChl cnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK3NwaWdlbl9pb2N0bChzdHJ1Y3QgY2RldiAqZGV2LCB1 X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIGludCBmZmxhZywKKyAgICBzdHJ1Y3QgdGhyZWFkICp0 ZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU1BJR0VOSU9DX1RS QU5TRkVSOgorCQllcnJvciA9IHNwaWdlbl90cmFuc2ZlcihkZXYsIChzdHJ1Y3Qgc3BpZ2VuX3Ry YW5zZmVyICopZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gRU9QTk9UU1VQ UDsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IAorc3BpZ2VuX2Nsb3NlKHN0 cnVjdCBjZGV2ICpkZXYsIGludCBmZmxhZywgaW50IGRldnR5cGUsIHN0cnVjdCB0aHJlYWQgKnRk KQoreworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorc3BpZ2VuX2RldGFjaChkZXZp Y2VfdCBkZXYpCit7CisKKwlyZXR1cm4gKEVJTyk7Cit9CisKK3N0YXRpYyBkZXZjbGFzc190IHNw aWdlbl9kZXZjbGFzczsKKworc3RhdGljIGRldmljZV9tZXRob2RfdCBzcGlnZW5fbWV0aG9kc1td ID0geworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJ c3BpZ2VuX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJc3BpZ2VuX2F0dGFjaCks CisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCXNwaWdlbl9kZXRhY2gpLAorCisJeyAwLCAwIH0K K307CisKK3N0YXRpYyBkcml2ZXJfdCBzcGlnZW5fZHJpdmVyID0geworCSJzcGlnZW4iLAorCXNw aWdlbl9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3Qgc3BpZ2VuX3NvZnRjKSwKK307CisKK0RSSVZF Ul9NT0RVTEUoc3BpZ2VuLCBzcGlidXMsIHNwaWdlbl9kcml2ZXIsIHNwaWdlbl9kZXZjbGFzcywg MCwgMCk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBzeXMvZGV2L3NwaWJ1cy9zcGlnZW4uYwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46a2V5d29yZHMKIyMgLTAsMCArMSAj IworRnJlZUJTRD0lSApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46 bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBwcm9wZXJ0eQpJbmRleDogc3lzL3N5cy9zcGlnZW5pby5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9z eXMvc3BpZ2VuaW8uaAkocmV2aXNpb24gMCkKKysrIHN5cy9zeXMvc3BpZ2VuaW8uaAkod29ya2lu ZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMCBEb3Vn IFJhYnNvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKgkkRnJlZUJTRCQKKyAqLworCisj aWZuZGVmIF9TWVNfU1BJR0VOSU9fSF8KKyNkZWZpbmUgX1NZU19TUElHRU5JT19IXworCisjaW5j bHVkZSA8c3lzL19pb3ZlYy5oPgorCitzdHJ1Y3Qgc3BpZ2VuX3RyYW5zZmVyIHsKKwlzdHJ1Y3Qg aW92ZWMgc3RfY29tbWFuZDsgLyogbWFzdGVyIHRvIHNsYXZlICovCisJc3RydWN0IGlvdmVjIHN0 X2RhdGE7ICAgIC8qIHNsYXZlIHRvIG1hc3RlciAqLworfTsKKworI2RlZmluZSBTUElHRU5JT0Nf QkFTRSAgICAgJ1MnCisjZGVmaW5lIFNQSUdFTklPQ19UUkFOU0ZFUiBfSU9XKFNQSUdFTklPQ19C QVNFLCAwLCBzdHJ1Y3Qgc3BpZ2VuX3RyYW5zZmVyKQorCisjZW5kaWYgLyogIV9TWVNfU1BJR0VO SU9fSF8gKi8KClByb3BlcnR5IGNoYW5nZXMgb246IHN5cy9zeXMvc3BpZ2VuaW8uaApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46a2V5d29yZHMKIyMgLTAsMCArMSAjIwor RnJlZUJTRD0lSApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWlt ZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw cm9wZXJ0eQo= --089e013d203c42ea93051d823955--