Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Aug 2015 10:00:26 -0400
From:      Brian Fundakowski Feldman <brianfundakowskifeldman@gmail.com>
To:        hackers@freebsd.org
Subject:   spigen(4) SPI Generic IO interface -- need comments
Message-ID:  <CAEv1%2BOU4cFpMpeQGfnCP7L4Q_k18rOSOA9JBnKUa99DS5dFnWA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAEv1%2BOU4cFpMpeQGfnCP7L4Q_k18rOSOA9JBnKUa99DS5dFnWA>