Date: Sat, 22 Aug 2015 14:23:33 -0400 From: Brian Fundakowski Feldman <brianfundakowskifeldman@gmail.com> To: Tom Jones <jones@sdf.org>, loos@freebsd.org Cc: embedded@freebsd.org Subject: Re: spigen(4) SPI Generic IO interface -- need comments Message-ID: <CAEv1%2BOXe4w8hJXQu2MsoMLz6ixeG3hU3BmLZpssG15SaPd9JGw@mail.gmail.com> In-Reply-To: <CAEv1%2BOUhSAJxxWAfW2GUFVw=H-_KOs2dGg2d7uhZnFbqsHE5Qw@mail.gmail.com> References: <CAEv1%2BOU4cFpMpeQGfnCP7L4Q_k18rOSOA9JBnKUa99DS5dFnWA@mail.gmail.com> <20150817160423.GB3078@gmail.com> <CAEv1%2BOUhSAJxxWAfW2GUFVw=H-_KOs2dGg2d7uhZnFbqsHE5Qw@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--001a113f3c707013b3051dea7b77 Content-Type: text/plain; charset=UTF-8 I've added a couple more features: * clock adjustment via ioctl, independent per spigenN device * mmap(2) support for very low latency On Tue, Aug 18, 2015 at 6:47 PM, Brian Fundakowski Feldman < brianfundakowskifeldman@gmail.com> wrote: > On Mon, Aug 17, 2015 at 12:04 PM Tom Jones <jones@sdf.org> wrote: > >> On Mon, Aug 17, 2015 at 10:00:26AM -0400, Brian Fundakowski Feldman wrote: >> > 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. >> >> Oh, cool. >> >> I did the same earlier this year, have you seen[1]?. >> >> The FreeBSD i2c api is the same/very similar the linux one[2][3]. Have you >> considered adding some of the ioctls[3] or the data structures to make it >> easier to port code? >> >> [1]: >> https://lists.freebsd.org/pipermail/freebsd-embedded/2015-April/002466.html >> [2]: https://www.kernel.org/doc/Documentation/i2c/dev-interface >> [3]: >> https://www.freebsd.org/cgi/man.cgi?query=iic&apropos=0&sektion=0&manpath=FreeBSD+10.2-RELEASE&arch=default&format=html >> [4]: https://www.kernel.org/doc/Documentation/spi/spidev > > > I've iterated a bit on this to try to make some more sensible API, > behaving reasonably about being able to set the SPI clock speed. I'm going > to implement an mmap handler so I can have my low-latency operation mode, > as well. I don't like the Linux APIs one bit because it's just not safe to > allow all those configuration changes on a per-transfer basis... > > Moving this to -embedded because it's more apt than -hackers. > --001a113f3c707013b3051dea7b77 Content-Type: application/octet-stream; name="spigen_with_mmap.patch" Content-Disposition: attachment; filename="spigen_with_mmap.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_idne77xk1 SW5kZXg6IGFybS9icm9hZGNvbS9iY20yODM1L2JjbTI4MzVfc3BpLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g YXJtL2Jyb2FkY29tL2JjbTI4MzUvYmNtMjgzNV9zcGkuYwkocmV2aXNpb24gMjg2ODkwKQorKysg YXJtL2Jyb2FkY29tL2JjbTI4MzUvYmNtMjgzNV9zcGkuYwkod29ya2luZyBjb3B5KQpAQCAtMTA3 LDYgKzEwNywyNSBAQAogCUJDTV9TUElfV1JJVEUoc2MsIG9mZiwgcmVnKTsKIH0KIAorLyoKKyAq IFNldCB0aGUgY2xvY2sgc3BlZWQgcmVnaXN0ZXIgYW5kIHJldHVybiB0aGUgY2xvY2sgc3BlZWQg YWN0dWFsbHkgdXNlZCwKKyAqIGFmdGVyIGNvcnJlY3Rpb25zIHRvIGZpdCB3aXRoaW4gU1BJX0NP UkVfQ0xLLgorICovCitzdGF0aWMgdWludDMyX3QKK2JjbV9zcGlfc2V0X2Nsb2NrX3NwZWVkKHN0 cnVjdCBiY21fc3BpX3NvZnRjICpzYywgY29uc3QgdWludDMyX3QgY2xvY2tfc3BlZWQpCit7CisJ dWludDMyX3QgY2xrID0gU1BJX0NPUkVfQ0xLIC8gY2xvY2tfc3BlZWQ7CisKKwlpZiAoY2xrIDw9 IDEpCisJCWNsayA9IDI7CisJZWxzZSBpZiAoY2xrICUgMikKKwkJY2xrLS07CisJaWYgKGNsayA+ IDB4ZmZmZikKKwkJY2xrID0gMDsKKwlCQ01fU1BJX1dSSVRFKHNjLCBTUElfQ0xLLCBjbGspOwor CXJldHVybiAoY2xrID09IDAgPyAwIDogU1BJX0NPUkVfQ0xLIC8gY2xrKTsKK30KKwogc3RhdGlj IGludAogYmNtX3NwaV9jbG9ja19wcm9jKFNZU0NUTF9IQU5ETEVSX0FSR1MpCiB7CkBAIC0xMTcs MjYgKzEzNiwxOSBAQAogCXNjID0gKHN0cnVjdCBiY21fc3BpX3NvZnRjICopYXJnMTsKIAogCUJD TV9TUElfTE9DSyhzYyk7Ci0JY2xrID0gQkNNX1NQSV9SRUFEKHNjLCBTUElfQ0xLKTsKKwljbGsg PSBzYy0+c2NfY2xvY2tfc3BlZWQ7CiAJQkNNX1NQSV9VTkxPQ0soc2MpOwotCWNsayAmPSAweGZm ZmY7Ci0JaWYgKGNsayA9PSAwKQotCQljbGsgPSA2NTUzNjsKLQljbGsgPSBTUElfQ09SRV9DTEsg LyBjbGs7CiAKIAllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZjbGssIHNpemVvZihj bGspLCByZXEpOwogCWlmIChlcnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCiAJCXJl dHVybiAoZXJyb3IpOwogCi0JY2xrID0gU1BJX0NPUkVfQ0xLIC8gY2xrOwotCWlmIChjbGsgPD0g MSkKLQkJY2xrID0gMjsKLQllbHNlIGlmIChjbGsgJSAyKQotCQljbGstLTsKLQlpZiAoY2xrID4g MHhmZmZmKQotCQljbGsgPSAwOwogCUJDTV9TUElfTE9DSyhzYyk7Ci0JQkNNX1NQSV9XUklURShz YywgU1BJX0NMSywgY2xrKTsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgQkNNX1NQSV9CVVNZKSB7CisJ CUJDTV9TUElfVU5MT0NLKHNjKTsKKwkJcmV0dXJuIChFQlVTWSk7CisJfQorCXNjLT5zY19jbG9j a19zcGVlZCA9IGJjbV9zcGlfc2V0X2Nsb2NrX3NwZWVkKHNjLCBjbGspOwogCUJDTV9TUElfVU5M T0NLKHNjKTsKIAogCXJldHVybiAoMCk7CkBAIC0zMTAsNyArMzIyLDggQEAKIAlCQ01fU1BJX1dS SVRFKHNjLCBTUElfQ1MsIFNQSV9DU19DTEVBUl9SWEZJRk8gfCBTUElfQ1NfQ0xFQVJfVFhGSUZP KTsKIAogCS8qIFNldCB0aGUgU1BJIGNsb2NrIHRvIDUwMEtoei4gKi8KLQlCQ01fU1BJX1dSSVRF KHNjLCBTUElfQ0xLLCBTUElfQ09SRV9DTEsgLyA1MDAwMDApOworCXNjLT5zY19jbG9ja19zcGVl ZCA9IDUwMDAwMDsKKwlCQ01fU1BJX1dSSVRFKHNjLCBTUElfQ0xLLCBTUElfQ09SRV9DTEsgLyBz Yy0+c2NfY2xvY2tfc3BlZWQpOwogCiAjaWZkZWYJQkNNX1NQSV9ERUJVRwogCWJjbV9zcGlfcHJp bnRyKGRldik7CkBAIC00MTgsNiArNDMxLDcgQEAKIGJjbV9zcGlfdHJhbnNmZXIoZGV2aWNlX3Qg ZGV2LCBkZXZpY2VfdCBjaGlsZCwgc3RydWN0IHNwaV9jb21tYW5kICpjbWQpCiB7CiAJc3RydWN0 IGJjbV9zcGlfc29mdGMgKnNjOworCWNvbnN0IHVpbnQzMl90IGNsb2NrX3NwZWVkX2h6ID0gY21k LT5jbG9ja19zcGVlZF9oejsKIAlpbnQgY3MsIGVycjsKIAogCXNjID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXYpOwpAQCAtNDUwLDYgKzQ2NCwxMCBAQAogCSAgICBTUElfQ1NfQ0xFQVJfUlhGSUZPIHwg U1BJX0NTX0NMRUFSX1RYRklGTywKIAkgICAgU1BJX0NTX0NMRUFSX1JYRklGTyB8IFNQSV9DU19D TEVBUl9UWEZJRk8pOwogCisJLyogU3dpdGNoIGNsb2NrIHNwZWVkIGlmIG5lY2Vzc2FyeS4gKi8K KwlpZiAoY2xvY2tfc3BlZWRfaHogIT0gMCAmJiBjbG9ja19zcGVlZF9oeiAhPSBzYy0+c2NfY2xv Y2tfc3BlZWQpCisJCWJjbV9zcGlfc2V0X2Nsb2NrX3NwZWVkKHNjLCBjbG9ja19zcGVlZF9oeik7 CisKIAkvKiBTYXZlIGEgcG9pbnRlciB0byB0aGUgU1BJIGNvbW1hbmQuICovCiAJc2MtPnNjX2Nt ZCA9IGNtZDsKIAlzYy0+c2NfcmVhZCA9IDA7CkBAIC00NzAsNiArNDg4LDEwIEBACiAJLyogTWFr ZSBzdXJlIHRoZSBTUEkgZW5naW5lIGFuZCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gKi8KIAli Y21fc3BpX21vZGlmeXJlZyhzYywgU1BJX0NTLCBTUElfQ1NfVEEgfCBTUElfQ1NfSU5UUiB8IFNQ SV9DU19JTlRELCAwKTsKIAorCS8qIFN3aXRjaCB0aGUgY2xvY2sgc3BlZWQgYmFjayBpZiBuZWNl c3NhcnkuICovCisJaWYgKGNsb2NrX3NwZWVkX2h6ICE9IDAgJiYgY2xvY2tfc3BlZWRfaHogIT0g c2MtPnNjX2Nsb2NrX3NwZWVkKQorCQliY21fc3BpX3NldF9jbG9ja19zcGVlZChzYywgc2MtPnNj X2Nsb2NrX3NwZWVkKTsKKwogCS8qIFJlbGVhc2UgdGhlIGNvbnRyb2xsZXIgYW5kIHdha2V1cCB0 aGUgbmV4dCB0aHJlYWQgd2FpdGluZyBmb3IgaXQuICovCiAJc2MtPnNjX2ZsYWdzID0gMDsKIAl3 YWtldXBfb25lKGRldik7CkBAIC00ODcsNiArNTA5LDcgQEAKIAlyZXR1cm4gKGVycik7CiB9CiAK Kwogc3RhdGljIHBoYW5kbGVfdAogYmNtX3NwaV9nZXRfbm9kZShkZXZpY2VfdCBidXMsIGRldmlj ZV90IGRldikKIHsKSW5kZXg6IGFybS9icm9hZGNvbS9iY20yODM1L2JjbTI4MzVfc3BpdmFyLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gYXJtL2Jyb2FkY29tL2JjbTI4MzUvYmNtMjgzNV9zcGl2YXIuaAkocmV2 aXNpb24gMjg2ODkwKQorKysgYXJtL2Jyb2FkY29tL2JjbTI4MzUvYmNtMjgzNV9zcGl2YXIuaAko d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogCXVpbnQzMl90CQlzY19yZWFkOwogCXVp bnQzMl90CQlzY19mbGFnczsKIAl1aW50MzJfdAkJc2Nfd3JpdHRlbjsKKwl1aW50MzJfdAkJc2Nf Y2xvY2tfc3BlZWQ7CiAJdm9pZCAqCQkJc2NfaW50cmhhbmQ7CiB9OwogCkluZGV4OiBhcm0vbHBj L3NzZDEyODkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vbHBjL3NzZDEyODkuYwkocmV2aXNpb24gMjg2 ODkwKQorKysgYXJtL2xwYy9zc2QxMjg5LmMJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcs OCBAQAogc3RhdGljIF9faW5saW5lIHZvaWQKIHNzZDEyODlfc3BpX3NlbmQoc3RydWN0IHNzZDEy ODlfc29mdGMgKnNjLCB1aW50OF90ICpkYXRhLCBpbnQgbGVuKQogewotCXN0cnVjdCBzcGlfY29t bWFuZCBjbWQ7CisJc3RydWN0IHNwaV9jb21tYW5kIGNtZCA9IFNQSV9DT01NQU5EX0lOSVRJQUxJ WkVSOworCiAJdWludDhfdCBidWZmZXJbOF07CiAJY21kLnR4X2NtZCA9IGRhdGE7CiAJY21kLnR4 X2NtZF9zeiA9IGxlbjsKSW5kZXg6IGNvbmYvZmlsZXMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZi9maWxl cwkocmV2aXNpb24gMjg2ODkwKQorKysgY29uZi9maWxlcwkod29ya2luZyBjb3B5KQpAQCAtMjQ1 Miw2ICsyNDUyLDcgQEAKIGRldi9zcGlidXMvb2Z3X3NwaWJ1cy5jCQlvcHRpb25hbCBmZHQgc3Bp YnVzCiBkZXYvc3BpYnVzL3NwaWJ1cy5jCQlvcHRpb25hbCBzcGlidXMJCQkJXAogCWRlcGVuZGVu Y3kJInNwaWJ1c19pZi5oIgorZGV2L3NwaWJ1cy9zcGlnZW4uYwkJb3B0aW9uYWwgc3BpYnVzCiBk ZXYvc3BpYnVzL3NwaWJ1c19pZi5tCQlvcHRpb25hbCBzcGlidXMKIGRldi9zdGUvaWZfc3RlLmMJ CW9wdGlvbmFsIHN0ZSBwY2kKIGRldi9zdGcvdG1jMThjMzAuYwkJb3B0aW9uYWwgc3RnCkluZGV4 OiBkZXYvc3BpYnVzL3NwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi9zcGlidXMvc3BpLmgJKHJldmlz aW9uIDI4Njg5MCkKKysrIGRldi9zcGlidXMvc3BpLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg KzI3LDcgQEAKICAqLwogCiBzdHJ1Y3Qgc3BpX2NvbW1hbmQgeworCXVpbnQzMl90IGNsb2NrX3Nw ZWVkX2h6OwogCXZvaWQJKnR4X2NtZDsKIAl1aW50MzJfdCB0eF9jbWRfc3o7CiAJdm9pZAkqcnhf Y21kOwpAQCAtMzcsNCArMzgsNiBAQAogCXVpbnQzMl90IHJ4X2RhdGFfc3o7CiB9OwogCisjZGVm aW5lCVNQSV9DT01NQU5EX0lOSVRJQUxJWkVSCXsgMCB9CisKICNkZWZpbmUJU1BJX0NISVBfU0VM RUNUX0hJR0gJMHgxCQkvKiBDaGlwIHNlbGVjdCBoaWdoIChlbHNlIGxvdykgKi8KSW5kZXg6IGRl di9zcGlidXMvc3BpZ2VuLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3NwaWJ1cy9zcGlnZW4uYwkocmV2 aXNpb24gMCkKKysrIGRldi9zcGlidXMvc3BpZ2VuLmMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr MSw0MDIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IEJyaWFuIEZ1bmRha293c2tpIEZl bGRtYW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQg U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICog SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j bHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxz eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+ CisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVk ZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21t YW4uaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+Cisj aW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CisjaW5jbHVkZSA8 c3lzL3NwaWdlbmlvLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgorIAorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+ CisjaW5jbHVkZSA8dm0vdm1fb2JqZWN0Lmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZS5oPgorI2lu Y2x1ZGUgPHZtL3ZtX3BhZ2VyLmg+CisKKyNpbmNsdWRlIDxkZXYvc3BpYnVzL3NwaS5oPgorCisj aW5jbHVkZSAic3BpYnVzX2lmLmgiCisKK3N0cnVjdCBzcGlnZW5fc29mdGMgeworCWRldmljZV90 IHNjX2RldjsKKwlzdHJ1Y3QgY2RldiAqc2NfY2RldjsKKwlzdHJ1Y3QgbXR4IHNjX210eDsKKwl1 aW50MzJfdCBzY19jbG9ja19zcGVlZDsKKwl1aW50MzJfdCBzY19jb21tYW5kX2xlbmd0aF9tYXg7 IC8qIGNhbm5vdCBjaGFuZ2Ugd2hpbGUgbW1hcHBlZCAqLworCXVpbnQzMl90IHNjX2RhdGFfbGVu Z3RoX21heDsgICAgLyogY2Fubm90IGNoYW5nZSB3aGlsZSBtbWFwcGVkICovCisJdm1fb2JqZWN0 X3Qgc2NfbW1hcF9idWZmZXI7ICAgICAvKiBjb21tYW5kLCB0aGVuIGRhdGEgKi8KKwl2bV9vZmZz ZXRfdCBzY19tbWFwX2t2YWRkcjsKKwlzaXplX3Qgc2NfbW1hcF9idWZmZXJfc2l6ZTsKKwlpbnQg c2NfbW1hcF9idXN5OworfTsKKworc3RhdGljIGludAorc3BpZ2VuX3Byb2JlKGRldmljZV90IGRl dikKK3sKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiU1BJIEdlbmVyaWMgSU8iKTsKKwlyZXR1cm4g KDApOworfQorCitzdGF0aWMgaW50IHNwaWdlbl9vcGVuKHN0cnVjdCBjZGV2ICosIGludCwgaW50 LCBzdHJ1Y3QgdGhyZWFkICopOworc3RhdGljIGludCBzcGlnZW5faW9jdGwoc3RydWN0IGNkZXYg KiwgdV9sb25nLCBjYWRkcl90LCBpbnQsIHN0cnVjdCB0aHJlYWQgKik7CitzdGF0aWMgaW50IHNw aWdlbl9jbG9zZShzdHJ1Y3QgY2RldiAqLCBpbnQsIGludCwgc3RydWN0IHRocmVhZCAqKTsKK3N0 YXRpYyBkX21tYXBfc2luZ2xlX3Qgc3BpZ2VuX21tYXBfc2luZ2xlOworCitzdGF0aWMgc3RydWN0 IGNkZXZzdyBzcGlnZW5fY2RldnN3ID0geworCS5kX3ZlcnNpb24gPSAgICAgRF9WRVJTSU9OLAor CS5kX25hbWUgPSAgICAgICAgInNwaWdlbiIsCisJLmRfb3BlbiA9ICAgICAgICBzcGlnZW5fb3Bl biwKKwkuZF9pb2N0bCA9ICAgICAgIHNwaWdlbl9pb2N0bCwKKwkuZF9tbWFwX3NpbmdsZSA9IHNw aWdlbl9tbWFwX3NpbmdsZSwKKwkuZF9jbG9zZSA9ICAgICAgIHNwaWdlbl9jbG9zZQorfTsKKwor c3RhdGljIGludAorc3BpZ2VuX2NvbW1hbmRfbGVuZ3RoX21heF9wcm9jKFNZU0NUTF9IQU5ETEVS X0FSR1MpCit7CisJc3RydWN0IHNwaWdlbl9zb2Z0YyAqc2MgPSAoc3RydWN0IHNwaWdlbl9zb2Z0 YyAqKWFyZzE7CisJdWludDMyX3QgY29tbWFuZF9sZW5ndGhfbWF4OworCWludCBlcnJvcjsKKwor CW10eF9sb2NrKCZzYy0+c2NfbXR4KTsKKwljb21tYW5kX2xlbmd0aF9tYXggPSBzYy0+c2NfY29t bWFuZF9sZW5ndGhfbWF4OworCW10eF91bmxvY2soJnNjLT5zY19tdHgpOworCWVycm9yID0gc3lz Y3RsX2hhbmRsZV9pbnQob2lkcCwgJmNvbW1hbmRfbGVuZ3RoX21heCwKKwkgICAgc2l6ZW9mKGNv bW1hbmRfbGVuZ3RoX21heCksIHJlcSk7CisJaWYgKGVycm9yID09IDAgJiYgcmVxLT5uZXdwdHIg IT0gTlVMTCkgeworCQltdHhfbG9jaygmc2MtPnNjX210eCk7CisJCWlmIChzYy0+c2NfbW1hcF9i dWZmZXIgIT0gTlVMTCkKKwkJCWVycm9yID0gRUJVU1k7CisJCWVsc2UKKwkJCXNjLT5zY19jb21t YW5kX2xlbmd0aF9tYXggPSBjb21tYW5kX2xlbmd0aF9tYXg7CisJCW10eF91bmxvY2soJnNjLT5z Y19tdHgpOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorc3BpZ2VuX2Rh dGFfbGVuZ3RoX21heF9wcm9jKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJc3RydWN0IHNwaWdl bl9zb2Z0YyAqc2MgPSAoc3RydWN0IHNwaWdlbl9zb2Z0YyAqKWFyZzE7CisJdWludDMyX3QgZGF0 YV9sZW5ndGhfbWF4OworCWludCBlcnJvcjsKKworCW10eF9sb2NrKCZzYy0+c2NfbXR4KTsKKwlk YXRhX2xlbmd0aF9tYXggPSBzYy0+c2NfZGF0YV9sZW5ndGhfbWF4OworCW10eF91bmxvY2soJnNj LT5zY19tdHgpOworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJmRhdGFfbGVuZ3Ro X21heCwKKwkgICAgc2l6ZW9mKGRhdGFfbGVuZ3RoX21heCksIHJlcSk7CisJaWYgKGVycm9yID09 IDAgJiYgcmVxLT5uZXdwdHIgIT0gTlVMTCkgeworCQltdHhfbG9jaygmc2MtPnNjX210eCk7CisJ CWlmIChzYy0+c2NfbW1hcF9idWZmZXIgIT0gTlVMTCkKKwkJCWVycm9yID0gRUJVU1k7CisJCWVs c2UKKwkJCXNjLT5zY19kYXRhX2xlbmd0aF9tYXggPSBkYXRhX2xlbmd0aF9tYXg7CisJCW10eF91 bmxvY2soJnNjLT5zY19tdHgpOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIHZv aWQKK3NwaWdlbl9zeXNjdGxfaW5pdChzdHJ1Y3Qgc3BpZ2VuX3NvZnRjICpzYykKK3sKKwlzdHJ1 Y3Qgc3lzY3RsX2N0eF9saXN0ICpjdHg7CisJc3RydWN0IHN5c2N0bF9vaWQgKnRyZWVfbm9kZTsK KwlzdHJ1Y3Qgc3lzY3RsX29pZF9saXN0ICp0cmVlOworCisJLyoKKwkgKiBBZGQgc3lzdGVtIHN5 c2N0bCB0cmVlL2hhbmRsZXJzLgorCSAqLworCWN0eCA9IGRldmljZV9nZXRfc3lzY3RsX2N0eChz Yy0+c2NfZGV2KTsKKwl0cmVlX25vZGUgPSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKHNjLT5zY19k ZXYpOworCXRyZWUgPSBTWVNDVExfQ0hJTERSRU4odHJlZV9ub2RlKTsKKwlTWVNDVExfQUREX1BS T0MoY3R4LCB0cmVlLCBPSURfQVVUTywgImNvbW1hbmRfbGVuZ3RoX21heCIsCisJICAgIENUTEZM QUdfTVBTQUZFIHwgQ1RMRkxBR19SVyB8IENUTFRZUEVfVUlOVCwgc2MsIHNpemVvZigqc2MpLAor CSAgICBzcGlnZW5fY29tbWFuZF9sZW5ndGhfbWF4X3Byb2MsICJJVSIsICJTUEkgY29tbWFuZCBo ZWFkZXIgcG9ydGlvbiAob2N0ZXRzKSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9J RF9BVVRPLCAiZGF0YV9sZW5ndGhfbWF4IiwKKwkgICAgQ1RMRkxBR19NUFNBRkUgfCBDVExGTEFH X1JXIHwgQ1RMVFlQRV9VSU5ULCBzYywgc2l6ZW9mKCpzYyksCisJICAgIHNwaWdlbl9kYXRhX2xl bmd0aF9tYXhfcHJvYywgIklVIiwgIlNQSSBkYXRhIHRyYWlsZXIgcG9ydGlvbiAob2N0ZXRzKSIp OworfQorCitzdGF0aWMgaW50CitzcGlnZW5fYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1 Y3Qgc3BpZ2VuX3NvZnRjICpzYzsKKwljb25zdCBpbnQgdW5pdCA9IGRldmljZV9nZXRfdW5pdChk ZXYpOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPnNjX2RldiA9IGRldjsK KwlzYy0+c2NfY2RldiA9IG1ha2VfZGV2KCZzcGlnZW5fY2RldnN3LCB1bml0LAorCSAgICBVSURf Uk9PVCwgR0lEX09QRVJBVE9SLCAwNjYwLCAic3BpZ2VuJWQiLCB1bml0KTsKKwlzYy0+c2NfY2Rl di0+c2lfZHJ2MSA9IGRldjsKKwlzYy0+c2NfY29tbWFuZF9sZW5ndGhfbWF4ID0gUEFHRV9TSVpF OworCXNjLT5zY19kYXRhX2xlbmd0aF9tYXggPSBQQUdFX1NJWkU7CisJbXR4X2luaXQoJnNjLT5z Y19tdHgsIGRldmljZV9nZXRfbmFtZXVuaXQoZGV2KSwgTlVMTCwgTVRYX0RFRik7CisJc3BpZ2Vu X3N5c2N0bF9pbml0KHNjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgCitzcGln ZW5fb3BlbihzdHJ1Y3QgY2RldiAqZGV2LCBpbnQgb2ZsYWdzLCBpbnQgZGV2dHlwZSwgc3RydWN0 IHRocmVhZCAqdGQpCit7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzcGlnZW5f dHJhbnNmZXIoc3RydWN0IGNkZXYgKmNkZXYsIHN0cnVjdCBzcGlnZW5fdHJhbnNmZXIgKnN0KQor eworCXN0cnVjdCBzcGlfY29tbWFuZCB0cmFuc2ZlciA9IFNQSV9DT01NQU5EX0lOSVRJQUxJWkVS OworCWRldmljZV90IGRldiA9IGNkZXYtPnNpX2RydjE7CisJc3RydWN0IHNwaWdlbl9zb2Z0YyAq c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaW50IGVycm9yID0gMDsKKworCW10eF9sb2Nr KCZzYy0+c2NfbXR4KTsKKwlpZiAoc3QtPnN0X2NvbW1hbmQuaW92X2xlbiA9PSAwIHx8IHN0LT5z dF9kYXRhLmlvdl9sZW4gPT0gMCkKKwkJZXJyb3IgPSBFSU5WQUw7CisJZWxzZSBpZiAoc3QtPnN0 X2NvbW1hbmQuaW92X2xlbiA+IHNjLT5zY19jb21tYW5kX2xlbmd0aF9tYXggfHwKKwkgICAgc3Qt PnN0X2RhdGEuaW92X2xlbiA+IHNjLT5zY19kYXRhX2xlbmd0aF9tYXgpCisJCWVycm9yID0gRU5P TUVNOworCWVsc2UKKwkJdHJhbnNmZXIuY2xvY2tfc3BlZWRfaHogPSBzYy0+c2NfY2xvY2tfc3Bl ZWQ7CisJbXR4X3VubG9jaygmc2MtPnNjX210eCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVy cm9yKTsKKwkKKyNpZiAwCisJZGV2aWNlX3ByaW50ZihkZXYsICJjbWQgJXAgJXUgZGF0YSAlcCAl dVxuIiwgc3QtPnN0X2NvbW1hbmQuaW92X2Jhc2UsCisJICAgIHN0LT5zdF9jb21tYW5kLmlvdl9s ZW4sIHN0LT5zdF9kYXRhLmlvdl9iYXNlLCBzdC0+c3RfZGF0YS5pb3ZfbGVuKTsKKyNlbmRpZgor CXRyYW5zZmVyLnR4X2NtZCA9IHRyYW5zZmVyLnJ4X2NtZCA9IG1hbGxvYyhzdC0+c3RfY29tbWFu ZC5pb3ZfbGVuLAorCSAgICBNX0RFVkJVRiwgTV9XQUlUT0spOworCWlmICh0cmFuc2Zlci50eF9j bWQgPT0gTlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworCXRyYW5zZmVyLnR4X2RhdGEgPSB0cmFu c2Zlci5yeF9kYXRhID0gbWFsbG9jKHN0LT5zdF9kYXRhLmlvdl9sZW4sCisJICAgIE1fREVWQlVG LCBNX1dBSVRPSyk7CisJaWYgKHRyYW5zZmVyLnR4X2RhdGEgPT0gTlVMTCkgeworCQlmcmVlKHRy YW5zZmVyLnR4X2NtZCwgTV9ERVZCVUYpOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJZXJy b3IgPSBjb3B5aW4oc3QtPnN0X2NvbW1hbmQuaW92X2Jhc2UsIHRyYW5zZmVyLnR4X2NtZCwKKwkg ICAgdHJhbnNmZXIudHhfY21kX3N6ID0gdHJhbnNmZXIucnhfY21kX3N6ID0gc3QtPnN0X2NvbW1h bmQuaW92X2xlbik7CQorCWlmIChlcnJvciA9PSAwKQorCQllcnJvciA9IGNvcHlpbihzdC0+c3Rf ZGF0YS5pb3ZfYmFzZSwgdHJhbnNmZXIudHhfZGF0YSwKKwkJICAgIHRyYW5zZmVyLnR4X2RhdGFf c3ogPSB0cmFuc2Zlci5yeF9kYXRhX3N6ID0KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBz dC0+c3RfZGF0YS5pb3ZfbGVuKTsJCisJaWYgKGVycm9yID09IDApCisJCWVycm9yID0gU1BJQlVT X1RSQU5TRkVSKGRldmljZV9nZXRfcGFyZW50KGRldiksIGRldiwgJnRyYW5zZmVyKTsKKwlpZiAo ZXJyb3IgPT0gMCkgeworCQllcnJvciA9IGNvcHlvdXQodHJhbnNmZXIucnhfY21kLCBzdC0+c3Rf Y29tbWFuZC5pb3ZfYmFzZSwKKwkJICAgIHRyYW5zZmVyLnJ4X2NtZF9zeik7CisJCWlmIChlcnJv ciA9PSAwKQorCQkJZXJyb3IgPSBjb3B5b3V0KHRyYW5zZmVyLnJ4X2RhdGEsIHN0LT5zdF9kYXRh Lmlvdl9iYXNlLAorCQkJICAgIHRyYW5zZmVyLnJ4X2RhdGFfc3opOworCX0KKworCWZyZWUodHJh bnNmZXIudHhfY21kLCBNX0RFVkJVRik7CisJZnJlZSh0cmFuc2Zlci50eF9kYXRhLCBNX0RFVkJV Rik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK3NwaWdlbl90cmFuc2Zlcl9t bWFwcGVkKHN0cnVjdCBjZGV2ICpjZGV2LCBzdHJ1Y3Qgc3BpZ2VuX3RyYW5zZmVyX21tYXBwZWQg KnN0bSkKK3sKKwlzdHJ1Y3Qgc3BpX2NvbW1hbmQgdHJhbnNmZXIgPSBTUElfQ09NTUFORF9JTklU SUFMSVpFUjsKKwlkZXZpY2VfdCBkZXYgPSBjZGV2LT5zaV9kcnYxOworCXN0cnVjdCBzcGlnZW5f c29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWludCBlcnJvciA9IDA7CisKKwlt dHhfbG9jaygmc2MtPnNjX210eCk7CisJaWYgKHNjLT5zY19tbWFwX2J1c3kpCisJCWVycm9yID0g RUJVU1k7CisJZWxzZSBpZiAoc3RtLT5zdG1fY29tbWFuZF9sZW5ndGggPiBzYy0+c2NfY29tbWFu ZF9sZW5ndGhfbWF4IHx8CisJICAgIHN0bS0+c3RtX2RhdGFfbGVuZ3RoID4gc2MtPnNjX2RhdGFf bGVuZ3RoX21heCkKKwkJZXJyb3IgPSBFMkJJRzsKKwllbHNlIGlmIChzYy0+c2NfbW1hcF9idWZm ZXIgPT0gTlVMTCkKKwkJZXJyb3IgPSBFSU5WQUw7CisJZWxzZSBpZiAoc2MtPnNjX21tYXBfYnVm ZmVyX3NpemUgPAorCSAgICBzdG0tPnN0bV9jb21tYW5kX2xlbmd0aCArIHN0bS0+c3RtX2RhdGFf bGVuZ3RoKQorCQllcnJvciA9IEVOT01FTTsKKwllbHNlCisJCXRyYW5zZmVyLmNsb2NrX3NwZWVk X2h6ID0gc2MtPnNjX2Nsb2NrX3NwZWVkOworCWlmIChlcnJvciA9PSAwKQorCQlzYy0+c2NfbW1h cF9idXN5ID0gMTsKKwltdHhfdW5sb2NrKCZzYy0+c2NfbXR4KTsKKwlpZiAoZXJyb3IpCisJCXJl dHVybiAoZXJyb3IpOworCQorCXRyYW5zZmVyLnR4X2NtZCA9IHRyYW5zZmVyLnJ4X2NtZCA9ICh2 b2lkICopc2MtPnNjX21tYXBfa3ZhZGRyOworCXRyYW5zZmVyLnR4X2NtZF9zeiA9IHRyYW5zZmVy LnJ4X2NtZF9zeiA9IHN0bS0+c3RtX2NvbW1hbmRfbGVuZ3RoOworCXRyYW5zZmVyLnR4X2RhdGEg PSB0cmFuc2Zlci5yeF9kYXRhID0KKwkgICAgKHZvaWQgKikoc2MtPnNjX21tYXBfa3ZhZGRyICsg c3RtLT5zdG1fY29tbWFuZF9sZW5ndGgpOworCXRyYW5zZmVyLnR4X2RhdGFfc3ogPSB0cmFuc2Zl ci5yeF9kYXRhX3N6ID0gc3RtLT5zdG1fZGF0YV9sZW5ndGg7CisJZXJyb3IgPSBTUElCVVNfVFJB TlNGRVIoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgZGV2LCAmdHJhbnNmZXIpOworCisJbXR4X2xv Y2soJnNjLT5zY19tdHgpOworCUtBU1NFUlQoc2MtPnNjX21tYXBfYnVzeSwgKCJtbWFwIG5vIGxv bmdlciBtYXJrZWQgYnVzeSIpKTsKKwlzYy0+c2NfbW1hcF9idXN5ID0gMDsKKwltdHhfdW5sb2Nr KCZzYy0+c2NfbXR4KTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorc3BpZ2Vu X2lvY3RsKHN0cnVjdCBjZGV2ICpjZGV2LCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIGludCBm ZmxhZywKKyAgICBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlkZXZpY2VfdCBkZXYgPSBjZGV2LT5z aV9kcnYxOworCXN0cnVjdCBzcGlnZW5fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OworCWludCBlcnJvcjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTUElHRU5JT0NfVFJBTlNG RVI6CisJCWVycm9yID0gc3BpZ2VuX3RyYW5zZmVyKGNkZXYsIChzdHJ1Y3Qgc3BpZ2VuX3RyYW5z ZmVyICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgU1BJR0VOSU9DX1RSQU5TRkVSX01NQVBQRUQ6 CisJCWVycm9yID0gc3BpZ2VuX3RyYW5zZmVyX21tYXBwZWQoY2RldiwgKHN0cnVjdCBzcGlnZW5f dHJhbnNmZXJfbW1hcHBlZCAqKWRhdGEpOworCQlicmVhazsKKwljYXNlIFNQSUdFTklPQ19HRVRf Q0xPQ0tfU1BFRUQ6CisJCW10eF9sb2NrKCZzYy0+c2NfbXR4KTsKKwkJKih1aW50MzJfdCAqKWRh dGEgPSBzYy0+c2NfY2xvY2tfc3BlZWQ7CisJCW10eF91bmxvY2soJnNjLT5zY19tdHgpOworCQll cnJvciA9IDA7CisJCWJyZWFrOworCWNhc2UgU1BJR0VOSU9DX1NFVF9DTE9DS19TUEVFRDoKKwkJ bXR4X2xvY2soJnNjLT5zY19tdHgpOworCQlzYy0+c2NfY2xvY2tfc3BlZWQgPSAqKHVpbnQzMl90 ICopZGF0YTsKKwkJbXR4X3VubG9jaygmc2MtPnNjX210eCk7CisJCWVycm9yID0gMDsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJZXJyb3IgPSBFT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gKGVycm9y KTsKK30KKworc3RhdGljIGludAorc3BpZ2VuX21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2 LCB2bV9vb2Zmc2V0X3QgKm9mZnNldCwKKyAgICB2bV9zaXplX3Qgc2l6ZSwgc3RydWN0IHZtX29i amVjdCAqKm9iamVjdCwgaW50IG5wcm90KQoreworCWRldmljZV90IGRldiA9IGNkZXYtPnNpX2Ry djE7CisJc3RydWN0IHNwaWdlbl9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJ dm1fcGFnZV90ICptOworCXNpemVfdCBuLCBwYWdlczsKKworCWlmIChzaXplID09IDAgfHwKKwkg ICAgKG5wcm90ICYgKFBST1RfRVhFQyB8IFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKQorCSAgICAh PSAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpCisJCXJldHVybiAoRUlOVkFMKTsKKwlzaXplID0g cm91bmR1cDIoc2l6ZSwgUEFHRV9TSVpFKTsKKwlwYWdlcyA9IHNpemUgLyBQQUdFX1NJWkU7CisK KwltdHhfbG9jaygmc2MtPnNjX210eCk7CisJaWYgKHNjLT5zY19tbWFwX2J1ZmZlciAhPSBOVUxM KSB7CisJCW10eF91bmxvY2soJnNjLT5zY19tdHgpOworCQlyZXR1cm4gKEVCVVNZKTsKKwl9IGVs c2UgaWYgKHNpemUgPiBzYy0+c2NfY29tbWFuZF9sZW5ndGhfbWF4ICsgc2MtPnNjX2RhdGFfbGVu Z3RoX21heCkgeworCQltdHhfdW5sb2NrKCZzYy0+c2NfbXR4KTsKKwkJcmV0dXJuIChFMkJJRyk7 CisJfQorCXNjLT5zY19tbWFwX2J1ZmZlcl9zaXplID0gc2l6ZTsKKwkqb2Zmc2V0ID0gMDsKKwlz Yy0+c2NfbW1hcF9idWZmZXIgPSAqb2JqZWN0ID0gdm1fcGFnZXJfYWxsb2NhdGUoT0JKVF9QSFlT LCAwLCBzaXplLAorCSAgICBucHJvdCwgKm9mZnNldCwgY3VydGhyZWFkLT50ZF91Y3JlZCk7CisJ bSA9IG1hbGxvYyhzaXplb2YoKm0pICogcGFnZXMsIE1fVEVNUCwgTV9XQUlUT0spOworCVZNX09C SkVDVF9XTE9DSygqb2JqZWN0KTsKKwl2bV9vYmplY3RfcmVmZXJlbmNlX2xvY2tlZCgqb2JqZWN0 KTsgLy8ga2VybmVsIGFuZCB1c2VybGFuZCBib3RoCisJZm9yIChuID0gMDsgbiA8IHBhZ2VzOyBu KyspIHsKKwkJbVtuXSA9IHZtX3BhZ2VfZ3JhYigqb2JqZWN0LCBuLAorCQkgICAgVk1fQUxMT0Nf Tk9CVVNZIHwgVk1fQUxMT0NfWkVSTyB8IFZNX0FMTE9DX1dJUkVEKTsKKwkJbVtuXS0+dmFsaWQg PSBWTV9QQUdFX0JJVFNfQUxMOworCX0KKwlWTV9PQkpFQ1RfV1VOTE9DSygqb2JqZWN0KTsKKwlz Yy0+c2NfbW1hcF9rdmFkZHIgPSBrdmFfYWxsb2Moc2l6ZSk7CisJcG1hcF9xZW50ZXIoc2MtPnNj X21tYXBfa3ZhZGRyLCBtLCBwYWdlcyk7CisJZnJlZShtLCBNX1RFTVApOworCW10eF91bmxvY2so JnNjLT5zY19tdHgpOworCisJaWYgKCpvYmplY3QgPT0gTlVMTCkKKwkJIHJldHVybiAoRUlOVkFM KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IAorc3BpZ2VuX2Nsb3NlKHN0cnVjdCBj ZGV2ICpjZGV2LCBpbnQgZmZsYWcsIGludCBkZXZ0eXBlLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sK KwlkZXZpY2VfdCBkZXYgPSBjZGV2LT5zaV9kcnYxOworCXN0cnVjdCBzcGlnZW5fc29mdGMgKnNj ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJbXR4X2xvY2soJnNjLT5zY19tdHgpOworCWlm IChzYy0+c2NfbW1hcF9idWZmZXIgIT0gTlVMTCkgeworCQlwbWFwX3FyZW1vdmUoc2MtPnNjX21t YXBfa3ZhZGRyLAorCQkgICAgc2MtPnNjX21tYXBfYnVmZmVyX3NpemUgLyBQQUdFX1NJWkUpOwor CQlrdmFfZnJlZShzYy0+c2NfbW1hcF9rdmFkZHIsIHNjLT5zY19tbWFwX2J1ZmZlcl9zaXplKTsK KwkJc2MtPnNjX21tYXBfa3ZhZGRyID0gMDsKKwkJdm1fb2JqZWN0X2RlYWxsb2NhdGUoc2MtPnNj X21tYXBfYnVmZmVyKTsKKwkJc2MtPnNjX21tYXBfYnVmZmVyID0gTlVMTDsKKwkJc2MtPnNjX21t YXBfYnVmZmVyX3NpemUgPSAwOworCX0KKwltdHhfdW5sb2NrKCZzYy0+c2NfbXR4KTsKKwlyZXR1 cm4gKDApOworfQorCitzdGF0aWMgaW50CitzcGlnZW5fZGV0YWNoKGRldmljZV90IGRldikKK3sK KworCXJldHVybiAoRUlPKTsKK30KKworc3RhdGljIGRldmNsYXNzX3Qgc3BpZ2VuX2RldmNsYXNz OworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IHNwaWdlbl9tZXRob2RzW10gPSB7CisJLyogRGV2 aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQlzcGlnZW5fcHJvYmUp LAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAlzcGlnZW5fYXR0YWNoKSwKKwlERVZNRVRIT0Qo ZGV2aWNlX2RldGFjaCwJc3BpZ2VuX2RldGFjaCksCisKKwl7IDAsIDAgfQorfTsKKworc3RhdGlj IGRyaXZlcl90IHNwaWdlbl9kcml2ZXIgPSB7CisJInNwaWdlbiIsCisJc3BpZ2VuX21ldGhvZHMs CisJc2l6ZW9mKHN0cnVjdCBzcGlnZW5fc29mdGMpLAorfTsKKworRFJJVkVSX01PRFVMRShzcGln ZW4sIHNwaWJ1cywgc3BpZ2VuX2RyaXZlciwgc3BpZ2VuX2RldmNsYXNzLCAwLCAwKTsKClByb3Bl cnR5IGNoYW5nZXMgb246IGRldi9zcGlidXMvc3BpZ2VuLmMKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu OmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw cm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdvcmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCww ICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6 IHN5cy9zcGlnZW5pby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9zcGlnZW5pby5oCShyZXZpc2lvbiAw KQorKysgc3lzL3NwaWdlbmlvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyot CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgRG91ZyBSYWJzb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU SE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu CisgKgorICoJJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBfU1lTX1NQSUdFTklPX0hfCisjZGVm aW5lIF9TWVNfU1BJR0VOSU9fSF8KKworI2luY2x1ZGUgPHN5cy9faW92ZWMuaD4KKworc3RydWN0 IHNwaWdlbl90cmFuc2ZlciB7CisJc3RydWN0IGlvdmVjIHN0X2NvbW1hbmQ7IC8qIG1hc3RlciB0 byBzbGF2ZSAqLworCXN0cnVjdCBpb3ZlYyBzdF9kYXRhOyAgICAvKiBzbGF2ZSB0byBtYXN0ZXIg YW5kL29yIG1hc3RlciB0byBzbGF2ZSAqLworfTsKKworc3RydWN0IHNwaWdlbl90cmFuc2Zlcl9t bWFwcGVkIHsKKwlzaXplX3Qgc3RtX2NvbW1hbmRfbGVuZ3RoOyAvKiBhdCBvZmZzZXQgMCBpbiBt bWFwKDIpIGFyZWEgKi8KKwlzaXplX3Qgc3RtX2RhdGFfbGVuZ3RoOyAgICAvKiBhdCBvZmZzZXQg c3RtX2NvbW1hbmRfbGVuZ3RoICovCit9OworCisjZGVmaW5lIFNQSUdFTklPQ19CQVNFICAgICAn UycKKyNkZWZpbmUgU1BJR0VOSU9DX1RSQU5TRkVSIAkgICBfSU9XKFNQSUdFTklPQ19CQVNFLCAw LCBcCisJICAgIHN0cnVjdCBzcGlnZW5fdHJhbnNmZXIpCisjZGVmaW5lIFNQSUdFTklPQ19UUkFO U0ZFUl9NTUFQUEVEIF9JT1coU1BJR0VOSU9DX0JBU0UsIDEsIFwKKwkgICAgc3RydWN0IHNwaWdl bl90cmFuc2Zlcl9tbWFwcGVkKQorI2RlZmluZSBTUElHRU5JT0NfR0VUX0NMT0NLX1NQRUVEICBf SU9SKFNQSUdFTklPQ19CQVNFLCAyLCB1aW50MzJfdCkKKyNkZWZpbmUgU1BJR0VOSU9DX1NFVF9D TE9DS19TUEVFRCAgX0lPVyhTUElHRU5JT0NfQkFTRSwgMywgdWludDMyX3QpCisKKyNlbmRpZiAv KiAhX1NZU19TUElHRU5JT19IXyAqLwoKUHJvcGVydHkgY2hhbmdlcyBvbjogc3lzL3NwaWdlbmlv LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdvcmRzCiMjIC0w LDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRl ZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgcHJvcGVydHkK --001a113f3c707013b3051dea7b77--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAEv1%2BOXe4w8hJXQu2MsoMLz6ixeG3hU3BmLZpssG15SaPd9JGw>