Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Mar 2014 10:31:54 -0300
From:      Luiz Otavio O Souza <loos.br@gmail.com>
To:        freebsd-arm@freebsd.org,  "freebsd-embedded@freebsd.org" <freebsd-embedded@freebsd.org>
Subject:   [RFC] AM335x (Beaglebone-black) ADC driver
Message-ID:  <CAJ8CS7pZ2e%2BAL5tHB9dX==iRLe7Rpm5bQ80VMgxL841UOgqaPw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--047d7bb709886b3cc004f4cd7118
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I've written a driver for the am335x ADC module (AIN inputs on BBB).

It works from the sysctl(8) interface, each input can be individually
enabled/disabled. When all the inputs are disabled, the ADC is turned
off.

The sysctl(8) interface also allows the selection of the number of the
samples average for each input (none, 2, 4, 8, 16) and the setting of
the ADC prescaler value (low clock speeds gives far stable readings
with the cost of loading - sometimes too much - the input circuit as
conversions can take a long time).

The converted values are exported as raw values (12 bits - 0 ~ 4095).

The ADC module can also work as a touchscreen sensor, but i have no
idea how to program the module as TSC sensor neither have the hardware
to test it, so this driver only works for reading the AIN converted
values.

Here is the output of the sysctl(8) for this driver:

# sysctl dev.am335x_adc.0
dev.am335x_adc.0.%desc: AM335x ADC controller
dev.am335x_adc.0.%driver: am335x_adc
dev.am335x_adc.0.%pnpinfo: name=adc@44E0D000 compat=ti,am335x-adc
dev.am335x_adc.0.%parent: simplebus0
dev.am335x_adc.0.clockdiv: 30000
dev.am335x_adc.0.ain.0.enable: 0
dev.am335x_adc.0.ain.0.samples_avg: 0
dev.am335x_adc.0.ain.0.input: 0
dev.am335x_adc.0.ain.1.enable: 0
dev.am335x_adc.0.ain.1.samples_avg: 0
dev.am335x_adc.0.ain.1.input: 0
dev.am335x_adc.0.ain.2.enable: 0
dev.am335x_adc.0.ain.2.samples_avg: 0
dev.am335x_adc.0.ain.2.input: 0
dev.am335x_adc.0.ain.3.enable: 0
dev.am335x_adc.0.ain.3.samples_avg: 0
dev.am335x_adc.0.ain.3.input: 0
dev.am335x_adc.0.ain.4.enable: 0
dev.am335x_adc.0.ain.4.samples_avg: 0
dev.am335x_adc.0.ain.4.input: 0
dev.am335x_adc.0.ain.5.enable: 0
dev.am335x_adc.0.ain.5.samples_avg: 0
dev.am335x_adc.0.ain.5.input: 0
dev.am335x_adc.0.ain.6.enable: 1
dev.am335x_adc.0.ain.6.samples_avg: 0
dev.am335x_adc.0.ain.6.input: 2176

I've checked the 7 AINs with a potentiometer connected to them (and
using VDD_ADC and GNDA_ADC).

I am now writing the man page so i can ask for a approval to commit it.

Comments ?

Regards,
Luiz

--047d7bb709886b3cc004f4cd7118
Content-Type: text/plain; charset=US-ASCII; name="am335x_adc.diff"
Content-Disposition: attachment; filename="am335x_adc.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hsvse87w0

SW5kZXg6IHN5cy9hcm0vdGkvYW0zMzV4L2FtMzM1eF9wcmNtLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
L2FybS90aS9hbTMzNXgvYW0zMzV4X3ByY20uYwkocmV2aXNpb24gMjYyMTMxKQorKysgc3lzL2Fy
bS90aS9hbTMzNXgvYW0zMzV4X3ByY20uYwkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3
IEBACiAjZGVmaW5lIENNX1dLVVBfQ01fQ0xLRENPTERPX0RQTExfUEVSCShDTV9XS1VQICsgMHgw
N0MpCiAjZGVmaW5lIENNX1dLVVBfQ01fQ0xLTU9ERV9EUExMX0RJU1AJKENNX1dLVVAgKyAweDA5
OCkKICNkZWZpbmUgQ01fV0tVUF9JMkMwX0NMS0NUUkwJCShDTV9XS1VQICsgMHgwQjgpCisjZGVm
aW5lIENNX1dLVVBfQURDX1RTQ19DTEtDVFJMCQkoQ01fV0tVUCArIDB4MEJDKQogCiAjZGVmaW5l
IENNX0RQTEwJCQkJMHg1MDAKICNkZWZpbmUgQ0xLU0VMX1RJTUVSN19DTEsJCShDTV9EUExMICsg
MHgwMDQpCkBAIC0yNjAsNiArMjYxLDkgQEAKIAlBTTMzNVhfR0VORVJJQ19DTE9DS19ERVYoSTJD
MV9DTEspLAogCUFNMzM1WF9HRU5FUklDX0NMT0NLX0RFVihJMkMyX0NMSyksCiAKKwkvKiBUU0Nf
QURDICovCisJQU0zMzVYX0dFTkVSSUNfQ0xPQ0tfREVWKFRTQ19BRENfQ0xLKSwKKwogCS8qIEVE
TUEgKi8KIAlBTTMzNVhfR0VORVJJQ19DTE9DS19ERVYoRURNQV9UUENDX0NMSyksCiAJQU0zMzVY
X0dFTkVSSUNfQ0xPQ0tfREVWKEVETUFfVFBUQzBfQ0xLKSwKQEAgLTMzNyw2ICszNDEsOSBAQAog
CV9DTEtfREVUQUlMKEkyQzFfQ0xLLCBDTV9QRVJfSTJDMV9DTEtDVFJMLCAwKSwKIAlfQ0xLX0RF
VEFJTChJMkMyX0NMSywgQ01fUEVSX0kyQzJfQ0xLQ1RSTCwgMCksCiAKKwkvKiBUU0NfQURDIG1v
ZHVsZSAqLworCV9DTEtfREVUQUlMKFRTQ19BRENfQ0xLLCBDTV9XS1VQX0FEQ19UU0NfQ0xLQ1RS
TCwgMCksCisKIAkvKiBFRE1BIG1vZHVsZXMgKi8KIAlfQ0xLX0RFVEFJTChFRE1BX1RQQ0NfQ0xL
LCBDTV9QRVJfVFBDQ19DTEtDVFJMLCAwKSwKIAlfQ0xLX0RFVEFJTChFRE1BX1RQVEMwX0NMSywg
Q01fUEVSX1RQVEMwX0NMS0NUUkwsIDApLApJbmRleDogc3lzL2FybS90aS9hbTMzNXgvZmlsZXMu
YmVhZ2xlYm9uZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL3RpL2FtMzM1eC9maWxlcy5iZWFnbGVi
b25lCShyZXZpc2lvbiAyNjIxMzEpCisrKyBzeXMvYXJtL3RpL2FtMzM1eC9maWxlcy5iZWFnbGVi
b25lCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAogIyRGcmVlQlNEJAogCithcm0vdGkv
YW0zMzV4L2FtMzM1eF9hZGMuYwkJCW9wdGlvbmFsCWFtMzM1eF9hZGMKIGFybS90aS9hbTMzNXgv
YW0zMzV4X3BtaWMuYwkJCW9wdGlvbmFsCWFtMzM1eF9wbWljCkluZGV4OiBzeXMvYXJtL3RpL3Rp
X3ByY20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL3RpL3RpX3ByY20uaAkocmV2aXNpb24gMjYy
MTMxKQorKysgc3lzL2FybS90aS90aV9wcmNtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsx
NjIsOCBAQAogCiAJUFJVU1NfQ0xLID0gMTcwMCwKIAorCVRTQ19BRENfQ0xLID0gMTgwMCwKKwog
CUlOVkFMSURfQ0xLX0lERU5UCiAKIH0gY2xrX2lkZW50X3Q7Ci0tLSAvZGV2L251bGwJMjAxNC0w
My0xNiAxMTowMDowMC4wMDAwMDAwMDAgLTAzMDAKKysrIHN5cy9hcm0vdGkvYW0zMzV4L2FtMzM1
eF9hZGMuYwkyMDE0LTAzLTE1IDIzOjQ4OjM3LjA5OTIwNTgwMyAtMDMwMApAQCAtMCwwICsxLDQ5
NyBAQAorLyotCisgKiBDb3B5cmlnaHQgMjAxNCBMdWl6IE90YXZpbyBPIFNvdXphIDxsb29zQGZy
ZWVic2Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2Nk
ZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4K
KyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisKKyNpbmNsdWRl
IDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbW9k
dWxlLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+
CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisKKyNpbmNs
dWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2lu
Y2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJy
Lmg+CisKKyNpbmNsdWRlIDxhcm0vdGkvdGlfcHJjbS5oPgorI2luY2x1ZGUgPGFybS90aS9hbTMz
NXgvYW0zMzV4X2FkY3JlZy5oPgorI2luY2x1ZGUgPGFybS90aS9hbTMzNXgvYW0zMzV4X2FkY3Zh
ci5oPgorCisvKiBEZWZpbmUgb3VyIDcgc3RlcHMsIG9uZSBmb3IgZWFjaCBpbnB1dCBjaGFubmVs
LiAqLworc3RhdGljIHN0cnVjdCBhbTMzNXhfYWRjX2lucHV0IGFtMzM1eF9hZGNfaW5wdXRzW0FN
MzM1WF9BRENfTlBJTlNdID0geworCXsgLnN0ZXByZWcgPSBBRENfU1RFUENGRzEsIH0sCisJeyAu
c3RlcHJlZyA9IEFEQ19TVEVQQ0ZHMiwgfSwKKwl7IC5zdGVwcmVnID0gQURDX1NURVBDRkczLCB9
LAorCXsgLnN0ZXByZWcgPSBBRENfU1RFUENGRzQsIH0sCisJeyAuc3RlcHJlZyA9IEFEQ19TVEVQ
Q0ZHNSwgfSwKKwl7IC5zdGVwcmVnID0gQURDX1NURVBDRkc2LCB9LAorCXsgLnN0ZXByZWcgPSBB
RENfU1RFUENGRzcsIH0sCit9OworCitzdGF0aWMgaW50IGFtMzM1eF9hZGNfc2FtcGxlc1s1XSA9
IHsgMCwgMiwgNCwgOCwgMTYgfTsKKworc3RhdGljIHZvaWQKK2FtMzM1eF9hZGNfZW5hYmxlKHN0
cnVjdCBhbTMzNXhfYWRjX3NvZnRjICpzYykKK3sKKwl1aW50MzJfdCB2YWw7CisKKwlBTTMzNVhf
QURDX0xPQ0tfQVNTRVJUKHNjKTsKKworCS8qIEVuYWJsZSB0aGUgRklGTzAgdGhyZXNob2xkIGlu
dGVycnVwdC4gKi8KKwlBRENfV1JJVEU0KHNjLCBBRENfSVJRRU5BQkxFX1NFVCwgQURDX0lSUV9G
SUZPMF9USFJFUyk7CisKKwkvKiBFbmFibGUgdGhlIEFEQy4gIFJ1biB0aHJ1IGVuYWJsZWQgc3Rl
cHMsIHN0YXJ0IHRoZSBjb252ZXJ0aW9ucy4gKi8KKwl2YWwgPSBBRENfUkVBRDQoc2MsIEFEQ19D
VFJMKTsKKwlBRENfV1JJVEU0KHNjLCBBRENfQ1RSTCwgdmFsIHwgQURDX0NUUkxfRU5BQkxFKTsK
K30KKworc3RhdGljIHZvaWQKK2FtMzM1eF9hZGNfZGlzYWJsZShzdHJ1Y3QgYW0zMzV4X2FkY19z
b2Z0YyAqc2MpCit7CisJdWludDMyX3QgdmFsOworCisJQU0zMzVYX0FEQ19MT0NLX0FTU0VSVChz
Yyk7CisKKwkvKiBEaXNhYmxlIHRoZSBGSUZPMCB0aHJlc2hvbGQgaW50ZXJydXB0LiAqLworCUFE
Q19XUklURTQoc2MsIEFEQ19JUlFFTkFCTEVfQ0xSLCBBRENfSVJRX0ZJRk8wX1RIUkVTKTsKKwor
CS8qIERpc2FibGUgdGhlIEFEQy4gKi8KKwl2YWwgPSBBRENfUkVBRDQoc2MsIEFEQ19DVFJMKTsK
Kwl2YWwgJj0gfkFEQ19DVFJMX0VOQUJMRTsKKwlBRENfV1JJVEU0KHNjLCBBRENfQ1RSTCwgdmFs
KTsKK30KKworc3RhdGljIHZvaWQKK2FtMzM1eF9hZGNfZW5hYmxlX2lucHV0KHN0cnVjdCBhbTMz
NXhfYWRjX3NvZnRjICpzYywgaW50MzJfdCBpbnB1dCkKK3sKKwl1aW50MzJfdCByZWcsIHZhbDsK
KworCUFNMzM1WF9BRENfTE9DS19BU1NFUlQoc2MpOworCisJcmVnID0gYW0zMzV4X2FkY19pbnB1
dHNbaW5wdXRdLnN0ZXByZWc7CisJdmFsID0gQURDX1JFQUQ0KHNjLCByZWcpOworCisJLyogU2V0
IHRoZSBuZWdhdGl2ZSB2b2x0YWdlIHJlZmVyZW5jZS4gKi8KKwl2YWwgJj0gfkFEQ19TVEVQX1JG
TV9NU0s7CisJdmFsIHw9IEFEQ19TVEVQX1JGTV9WUkVGTiA8PCBBRENfU1RFUF9SRk1fU0hJRlQ7
CisKKwkvKiBTZXQgdGhlIHBvc2l0aXZlIHZvbHRhZ2UgcmVmZXJlbmNlLiAqLworCXZhbCAmPSB+
QURDX1NURVBfUkZQX01TSzsKKwl2YWwgfD0gQURDX1NURVBfUkZQX1ZSRUZQIDw8IEFEQ19TVEVQ
X1JGUF9TSElGVDsKKworCS8qIFNldCB0aGUgc2FtcGxlcyBhdmVyYWdlLiAqLworCXZhbCAmPSB+
QURDX1NURVBfQVZHX01TSzsKKwl2YWwgfD0gYW0zMzV4X2FkY19pbnB1dHNbaW5wdXRdLnNhbXBs
ZXMgPDwgQURDX1NURVBfQVZHX1NISUZUOworCisJLyogU2VsZWN0IHRoZSBkZXNpcmVkIGlucHV0
LiAqLworCXZhbCAmPSB+QURDX1NURVBfSU5QX01TSzsKKwl2YWwgfD0gaW5wdXQgPDwgQURDX1NU
RVBfSU5QX1NISUZUOworCisJLyogU2V0IHRoZSBBREMgdG8gY29udGludW91cyBtb2RlLiAqLwor
CXZhbCAmPSB+QURDX1NURVBfTU9ERV9NU0s7CisJdmFsIHw9IEFEQ19TVEVQX01PREVfQ09OVElO
VU9VUzsKKworCUFEQ19XUklURTQoc2MsIHJlZywgdmFsKTsKK30KKworc3RhdGljIHZvaWQKK2Ft
MzM1eF9hZGNfZGlzYWJsZV9pbnB1dChzdHJ1Y3QgYW0zMzV4X2FkY19zb2Z0YyAqc2MsIGludDMy
X3QgaW5wdXQpCit7CisJdWludDMyX3QgcmVnLCB2YWw7CisKKwlBTTMzNVhfQURDX0xPQ0tfQVNT
RVJUKHNjKTsKKworCS8qIFJlc2V0IHRoZSBpbnB1dCByZWFkIGRhdGEuICovCisJYW0zMzV4X2Fk
Y19pbnB1dHNbaW5wdXRdLnZhbHVlID0gMDsKKworCXJlZyA9IGFtMzM1eF9hZGNfaW5wdXRzW2lu
cHV0XS5zdGVwcmVnOworCXZhbCA9IEFEQ19SRUFENChzYywgcmVnKTsKKworCS8qIFJlc2V0IHRo
ZSBBREMgb3BlcmF0aW9uIG1vZGUuICovCisJdmFsICY9IH5BRENfU1RFUF9NT0RFX01TSzsKKwor
CS8qIFJlc2V0IHRoZSBpbnB1dCBwaW4gc2VsZWN0aW9uLiAqLworCXZhbCAmPSB+QURDX1NURVBf
SU5QX01TSzsKKworCS8qIFJlc2V0IHRoZSBzYW1wbGVzIGF2ZXJhZ2UuICovCisJdmFsICY9IH5B
RENfU1RFUF9BVkdfTVNLOworCisJLyogUmVzZXQgdGhlIHBvc2l0aXZlIHZvbHRhZ2UgcmVmZXJl
bmNlLiAqLworCXZhbCAmPSB+QURDX1NURVBfUkZQX01TSzsKKworCS8qIFJlc2V0IHRoZSBuZWdh
dGl2ZSB2b2x0YWdlIHJlZmVyZW5jZS4gKi8KKwl2YWwgJj0gfkFEQ19TVEVQX1JGTV9NU0s7CisK
KwlBRENfV1JJVEU0KHNjLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkCithbTMzNXhfYWRj
X3Jlc2V0KHN0cnVjdCBhbTMzNXhfYWRjX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKworCUFNMzM1
WF9BRENfTE9DS19BU1NFUlQoc2MpOworCisJLyogRGlzYWJsZSBhbGwgdGhlIGlucHV0cy4gKi8K
Kwlmb3IgKGkgPSAwOyBpIDwgQU0zMzVYX0FEQ19OUElOUzsgaSsrKQorCQlhbTMzNXhfYWRjX2lu
cHV0c1tpXS5lbmFibGUgPSAwOworfQorCitzdGF0aWMgaW50CithbTMzNXhfYWRjX3NldHVwKHN0
cnVjdCBhbTMzNXhfYWRjX3NvZnRjICpzYykKK3sKKwlpbnQgZW5hYmxlZCwgaTsKKworCUFNMzM1
WF9BRENfTE9DS19BU1NFUlQoc2MpOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgaW5wdXQg
ZW5hYmxlZC4gKi8KKwllbmFibGVkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQU0zMzVYX0FEQ19O
UElOUzsgaSsrKSB7CisJCWlmIChhbTMzNXhfYWRjX2lucHV0c1tpXS5lbmFibGUpIHsKKwkJCWVu
YWJsZWQgfD0gKDFVIDw8IChpICsgMSkpOworCQkJYW0zMzV4X2FkY19lbmFibGVfaW5wdXQoc2Ms
IGkpOworCQl9IGVsc2UKKwkJCWFtMzM1eF9hZGNfZGlzYWJsZV9pbnB1dChzYywgaSk7CisJfQor
CisJLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBzdGVwcy4gKi8KKwlBRENfV1JJVEU0KHNjLCBBRENf
U1RFUEVOQUJMRSwgZW5hYmxlZCk7CisKKwkvKiBTZXQgdGhlIGdsb2JhbCBBREMgc3RhdHVzLiAq
LworCWlmIChlbmFibGVkICE9IDApCisJCWFtMzM1eF9hZGNfZW5hYmxlKHNjKTsKKwllbHNlCisJ
CWFtMzM1eF9hZGNfZGlzYWJsZShzYyk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50
CithbTMzNXhfYWRjX2Nsb2NrZGl2X3Byb2MoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlpbnQg
ZXJyb3IsIHJlZzsKKwlzdHJ1Y3QgYW0zMzV4X2FkY19zb2Z0YyAqc2M7CisKKwlzYyA9IChzdHJ1
Y3QgYW0zMzV4X2FkY19zb2Z0YyAqKWFyZzE7CisKKwlBTTMzNVhfQURDX0xPQ0soc2MpOworCXJl
ZyA9IChpbnQpQURDX1JFQUQ0KHNjLCBBRENfQ0xLRElWKSArIDE7CisJQU0zMzVYX0FEQ19VTkxP
Q0soc2MpOworCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmcmVnLCBzaXplb2Yo
cmVnKSwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0ciA9PSBOVUxMKQorCQly
ZXR1cm4gKGVycm9yKTsKKworCS8qIFRoZSBhY3R1YWwgd3JpdHRlbiB2YWx1ZSBpcyB0aGUgcHJl
c2NhbGVyIHNldHRpbmcgLSAxLiAqLworCXJlZy0tOworCWlmIChyZWcgPCAwKQorCQlyZWcgPSAw
OworCWlmIChyZWcgPiA2NTUzNSkKKwkJcmVnID0gNjU1MzU7CisKKwlBTTMzNVhfQURDX0xPQ0so
c2MpOworCS8qIERpc2FibGUgdGhlIEFEQy4gKi8KKwlhbTMzNXhfYWRjX2Rpc2FibGUoc2MpOwor
CS8qIFVwZGF0ZSB0aGUgQURDIHByZXNjYWxlciBzZXR0aW5nLiAqLworCUFEQ19XUklURTQoc2Ms
IEFEQ19DTEtESVYsIHJlZyk7CisJLyogRW5hYmxlIHRoZSBBREMgYWdhaW4uICovCisJYW0zMzV4
X2FkY19zZXR1cChzYyk7CisJQU0zMzVYX0FEQ19VTkxPQ0soc2MpOworCisJcmV0dXJuICgwKTsK
K30KKworc3RhdGljIGludAorYW0zMzV4X2FkY19lbmFibGVfcHJvYyhTWVNDVExfSEFORExFUl9B
UkdTKQoreworCWludCBlcnJvcjsKKwlpbnQzMl90IGVuYWJsZTsKKwlzdHJ1Y3QgYW0zMzV4X2Fk
Y19zb2Z0YyAqc2M7CisJc3RydWN0IGFtMzM1eF9hZGNfaW5wdXQgKmlucHV0OworCisJaW5wdXQg
PSAoc3RydWN0IGFtMzM1eF9hZGNfaW5wdXQgKilhcmcxOworCXNjID0gaW5wdXQtPnNjOworCisJ
ZW5hYmxlID0gaW5wdXQtPmVuYWJsZTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAs
ICZlbmFibGUsIHNpemVvZihlbmFibGUpLAorCSAgICByZXEpOworCWlmIChlcnJvciAhPSAwIHx8
IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiAoZXJyb3IpOworCisJaWYgKGVuYWJsZSkK
KwkJZW5hYmxlID0gMTsKKworCUFNMzM1WF9BRENfTE9DSyhzYyk7CisJLyogU2V0dXAgdGhlIEFE
QyBhcyBuZWVkZWQuICovCisJaWYgKGlucHV0LT5lbmFibGUgIT0gZW5hYmxlKSB7CisJCWlucHV0
LT5lbmFibGUgPSBlbmFibGU7CisJCWFtMzM1eF9hZGNfc2V0dXAoc2MpOworCX0KKwlBTTMzNVhf
QURDX1VOTE9DSyhzYyk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CithbTMzNXhf
YWRjX3NhbXBsZXNfYXZnX3Byb2MoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlpbnQgZXJyb3Is
IHNhbXBsZXMsIGk7CisJc3RydWN0IGFtMzM1eF9hZGNfc29mdGMgKnNjOworCXN0cnVjdCBhbTMz
NXhfYWRjX2lucHV0ICppbnB1dDsKKworCWlucHV0ID0gKHN0cnVjdCBhbTMzNXhfYWRjX2lucHV0
ICopYXJnMTsKKwlzYyA9IGlucHV0LT5zYzsKKworCWlmIChpbnB1dC0+c2FtcGxlcyA+IG5pdGVt
cyhhbTMzNXhfYWRjX3NhbXBsZXMpKQorCQlpbnB1dC0+c2FtcGxlcyA9IG5pdGVtcyhhbTMzNXhf
YWRjX3NhbXBsZXMpOworCXNhbXBsZXMgPSBhbTMzNXhfYWRjX3NhbXBsZXNbaW5wdXQtPnNhbXBs
ZXNdOworCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmc2FtcGxlcywgMCwgcmVx
KTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0ciA9PSBOVUxMKQorCQlyZXR1cm4gKGVy
cm9yKTsKKworCWlmIChzYW1wbGVzICE9IGFtMzM1eF9hZGNfc2FtcGxlc1tpbnB1dC0+c2FtcGxl
c10pIHsKKwkJQU0zMzVYX0FEQ19MT0NLKHNjKTsKKwkJYW0zMzV4X2FkY19kaXNhYmxlKHNjKTsK
KwkJaW5wdXQtPnNhbXBsZXMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zKGFtMzM1eF9h
ZGNfc2FtcGxlcyk7IGkrKykKKwkJCWlmIChzYW1wbGVzID49IGFtMzM1eF9hZGNfc2FtcGxlc1tp
XSkKKwkJCQlpbnB1dC0+c2FtcGxlcyA9IGk7CisKKwkJLyogVXBkYXRlIHRoZSBBREMgc2V0dXAg
YXMgbmVlZGVkLiAqLworCQlhbTMzNXhfYWRjX3NldHVwKHNjKTsKKwkJQU0zMzVYX0FEQ19VTkxP
Q0soc2MpOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgdm9pZAorYW0zMzV4
X2FkY19pbnRyKHZvaWQgKmFyZykKK3sKKwlpbnQgY291bnQsIGlucHV0OworCXN0cnVjdCBhbTMz
NXhfYWRjX3NvZnRjICpzYzsKKwl1aW50MzJfdCBkYXRhLCBzdGF0dXM7CisKKwlzYyA9IChzdHJ1
Y3QgYW0zMzV4X2FkY19zb2Z0YyAqKWFyZzsKKworCXN0YXR1cyA9IEFEQ19SRUFENChzYywgQURD
X0lSUVNUQVRVUyk7CisJaWYgKHN0YXR1cyAmIH5BRENfSVJRX0ZJRk8wX1RIUkVTKQorCQlkZXZp
Y2VfcHJpbnRmKHNjLT5zY19kZXYsICJzdHJheSBpbnRlcnJ1cHQ6ICUjeFxuIiwgc3RhdHVzKTsK
KworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQuICovCisJQURDX1dSSVRFNChzYywgQURDX0lSUVNU
QVRVUywgQURDX0lSUV9GSUZPMF9USFJFUyk7CisKKwkvKiBSZWFkIHRoZSBhdmFpbGFibGUgZGF0
YS4gKi8KKwljb3VudCA9IEFEQ19SRUFENChzYywgQURDX0ZJRk8wQ09VTlQpICYgQURDX0ZJRk9f
Q09VTlRfTVNLOworCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlkYXRhID0gQURDX1JFQUQ0KHNj
LCBBRENfRklGTzBEQVRBKTsKKwkJaW5wdXQgPSAoZGF0YSAmIEFEQ19GSUZPX1NURVBfSURfTVNL
KSA+PiBBRENfRklGT19TVEVQX0lEX1NISUZUOworCQlhbTMzNXhfYWRjX2lucHV0c1tpbnB1dF0u
dmFsdWUgPSBkYXRhICYgQURDX0ZJRk9fREFUQV9NU0s7CisJfQorfQorCitzdGF0aWMgdm9pZAor
YW0zMzV4X2FkY19zeXNjdGxfaW5pdChzdHJ1Y3QgYW0zMzV4X2FkY19zb2Z0YyAqc2MpCit7CisJ
Y2hhciBwaW5idWZbM107CisJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqY3R4OworCXN0cnVjdCBz
eXNjdGxfb2lkICp0cmVlX25vZGUsICppbnBfbm9kZSwgKmlucE5fbm9kZTsKKwlzdHJ1Y3Qgc3lz
Y3RsX29pZF9saXN0ICp0cmVlLCAqaW5wX3RyZWUsICppbnBOX3RyZWU7CisJaW50IGk7CisKKwkv
KgorCSAqIEFkZCBwZXItcGluIHN5c2N0bCB0cmVlL2hhbmRsZXJzLgorCSAqLworCWN0eCA9IGRl
dmljZV9nZXRfc3lzY3RsX2N0eChzYy0+c2NfZGV2KTsKKwl0cmVlX25vZGUgPSBkZXZpY2VfZ2V0
X3N5c2N0bF90cmVlKHNjLT5zY19kZXYpOworCXRyZWUgPSBTWVNDVExfQ0hJTERSRU4odHJlZV9u
b2RlKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCB0cmVlLCBPSURfQVVUTywgImNsb2NrZGl2IiwK
KwkgICAgQ1RMRkxBR19SVyB8IENUTFRZUEVfVUlOVCwgIHNjLCAwLAorCSAgICBhbTMzNXhfYWRj
X2Nsb2NrZGl2X3Byb2MsICJJVSIsICJBREMgY2xvY2sgcHJlc2NhbGVyIik7CisJaW5wX25vZGUg
PSBTWVNDVExfQUREX05PREUoY3R4LCB0cmVlLCBPSURfQVVUTywgImFpbiIsCisJICAgIENUTEZM
QUdfUkQsIE5VTEwsICJBREMgaW5wdXRzIik7CisJaW5wX3RyZWUgPSBTWVNDVExfQ0hJTERSRU4o
aW5wX25vZGUpOworCisJZm9yIChpID0gMDsgaSA8IEFNMzM1WF9BRENfTlBJTlM7IGkrKykgewor
CisJCXNucHJpbnRmKHBpbmJ1Ziwgc2l6ZW9mKHBpbmJ1ZiksICIlZCIsIGkpOworCQlpbnBOX25v
ZGUgPSBTWVNDVExfQUREX05PREUoY3R4LCBpbnBfdHJlZSwgT0lEX0FVVE8sIHBpbmJ1ZiwKKwkJ
ICAgIENUTEZMQUdfUkQsIE5VTEwsICJBREMgaW5wdXQiKTsKKwkJaW5wTl90cmVlID0gU1lTQ1RM
X0NISUxEUkVOKGlucE5fbm9kZSk7CisKKwkJYW0zMzV4X2FkY19pbnB1dHNbaV0uc2MgPSBzYzsK
KwkJYW0zMzV4X2FkY19pbnB1dHNbaV0uaW5wdXQgPSBpOworCQlhbTMzNXhfYWRjX2lucHV0c1tp
XS52YWx1ZSA9IDA7CisJCWFtMzM1eF9hZGNfaW5wdXRzW2ldLmVuYWJsZSA9IDA7CisJCWFtMzM1
eF9hZGNfaW5wdXRzW2ldLnNhbXBsZXMgPSAwOworCQlTWVNDVExfQUREX1BST0MoY3R4LCBpbnBO
X3RyZWUsIE9JRF9BVVRPLCAiZW5hYmxlIiwKKwkJICAgIENUTEZMQUdfUlcgfCBDVExUWVBFX1VJ
TlQsICZhbTMzNXhfYWRjX2lucHV0c1tpXSwgMCwKKwkJICAgIGFtMzM1eF9hZGNfZW5hYmxlX3By
b2MsICJJVSIsICJFbmFibGUgQURDIGlucHV0Iik7CisJCVNZU0NUTF9BRERfUFJPQyhjdHgsIGlu
cE5fdHJlZSwgT0lEX0FVVE8sICJzYW1wbGVzX2F2ZyIsCisJCSAgICBDVExGTEFHX1JXIHwgQ1RM
VFlQRV9VSU5ULCAgJmFtMzM1eF9hZGNfaW5wdXRzW2ldLCAwLAorCQkgICAgYW0zMzV4X2FkY19z
YW1wbGVzX2F2Z19wcm9jLCAiSVUiLCAiQURDIHNhbXBsZXMgYXZlcmFnZSIpOworCQlTWVNDVExf
QUREX0lOVChjdHgsIGlucE5fdHJlZSwgT0lEX0FVVE8sICJpbnB1dCIsCisJCSAgICBDVExGTEFH
X1JELCAmYW0zMzV4X2FkY19pbnB1dHNbaV0udmFsdWUsIDAsCisJCSAgICAiQ29udmVydGVkIHZh
bHVlIGZvciB0aGUgQURDIGlucHV0Iik7CisJfQorfQorCitzdGF0aWMgaW50CithbTMzNXhfYWRj
X3Byb2JlKGRldmljZV90IGRldikKK3sKKworCWlmICghb2Z3X2J1c19pc19jb21wYXRpYmxlKGRl
diwgInRpLGFtMzM1eC1hZGMiKSkKKwkJcmV0dXJuIChFTlhJTyk7CisJZGV2aWNlX3NldF9kZXNj
KGRldiwgIkFNMzM1eCBBREMgY29udHJvbGxlciIpOworCisJcmV0dXJuIChCVVNfUFJPQkVfREVG
QVVMVCk7Cit9CisKK3N0YXRpYyBpbnQKK2FtMzM1eF9hZGNfYXR0YWNoKGRldmljZV90IGRldikK
K3sKKwlpbnQgZXJyLCByaWQ7CisJc3RydWN0IGFtMzM1eF9hZGNfc29mdGMgKnNjOworCXVpbnQz
Ml90IHJlZywgcmV2OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPnNjX2Rl
diA9IGRldjsKKworCXJpZCA9IDA7CisJc2MtPnNjX21lbV9yZXMgPSBidXNfYWxsb2NfcmVzb3Vy
Y2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlksICZyaWQsCisJICAgIFJGX0FDVElWRSk7CisJaWYg
KCFzYy0+c2NfbWVtX3JlcykgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNhbm5vdCBhbGxvY2F0
ZSBtZW1vcnkgd2luZG93XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJcmlkID0gMDsK
KwlzYy0+c2NfaXJxX3JlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lS
USwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoIXNjLT5zY19pcnFfcmVzKSB7CisJCWJ1
c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIDAsIHNjLT5zY19tZW1fcmVz
KTsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjYW5ub3QgYWxsb2NhdGUgaW50ZXJydXB0XG4iKTsK
KwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJaWYgKGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPnNj
X2lycV9yZXMsIElOVFJfVFlQRV9NSVNDIHwgSU5UUl9NUFNBRkUsCisJICAgIE5VTEwsIGFtMzM1
eF9hZGNfaW50ciwgc2MsICZzYy0+c2NfaW50cmhhbmQpICE9IDApIHsKKwkJYnVzX3JlbGVhc2Vf
cmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lSUSwgMCwgc2MtPnNjX2lycV9yZXMpOworCQlidXNfcmVs
ZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCAwLCBzYy0+c2NfbWVtX3Jlcyk7CisJ
CWRldmljZV9wcmludGYoZGV2LCAiVW5hYmxlIHRvIHNldHVwIHRoZSBpcnEgaGFuZGxlci5cbiIp
OworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBBY3RpdmF0ZSB0aGUgQURDX1RTQyBtb2R1
bGUuICovCisJZXJyID0gdGlfcHJjbV9jbGtfZW5hYmxlKFRTQ19BRENfQ0xLKTsKKwlpZiAoZXJy
KQorCQlyZXR1cm4gKGVycik7CisKKwkvKiBDaGVjayB0aGUgQURDIHJldmlzaW9uLiAqLworCXJl
diA9IEFEQ19SRUFENChzYywgQURDX1JFVklTSU9OKTsKKwlkZXZpY2VfcHJpbnRmKGRldiwKKwkg
ICAgInNjaGVtZTogJSN4IGZ1bmM6ICUjeCBydGw6ICVkIHJldjogJWQuJWQgY3VzdG9tIHJldjog
JWRcbiIsCisJICAgIChyZXYgJiBBRENfUkVWX1NDSEVNRV9NU0spID4+IEFEQ19SRVZfU0NIRU1F
X1NISUZULAorCSAgICAocmV2ICYgQURDX1JFVl9GVU5DX01TSykgPj4gQURDX1JFVl9GVU5DX1NI
SUZULAorCSAgICAocmV2ICYgQURDX1JFVl9SVExfTVNLKSA+PiBBRENfUkVWX1JUTF9TSElGVCwK
KwkgICAgKHJldiAmIEFEQ19SRVZfTUFKT1JfTVNLKSA+PiBBRENfUkVWX01BSk9SX1NISUZULAor
CSAgICByZXYgJiBBRENfUkVWX01JTk9SX01TSywKKwkgICAgKHJldiAmIEFEQ19SRVZfQ1VTVE9N
X01TSykgPj4gQURDX1JFVl9DVVNUT01fU0hJRlQpOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBz
dGVwIHdyaXRlIHByb3RlY3QgYW5kIG1ha2UgaXQgc3RvcmUgdGhlIHN0ZXAgSUQgZm9yCisJICog
dGhlIGNhcHR1cmVkIGRhdGEgb24gRklGTy4KKwkgKi8KKwlyZWcgPSBBRENfUkVBRDQoc2MsIEFE
Q19DVFJMKTsKKwlBRENfV1JJVEU0KHNjLCBBRENfQ1RSTCwgcmVnIHwgQURDX0NUUkxfU1RFUF9X
UCB8IEFEQ19DVFJMX1NURVBfSUQpOworCisJLyoKKwkgKiBTZXQgdGhlIEFEQyBwcmVzY2FsZXIg
dG8gMjAwMCAoeWVzLCB0aGUgYWN0dWFsIHZhbHVlIHdyaXR0ZW4gaGVyZQorCSAqIGlzIDIwMDAg
LSAxKS4KKwkgKi8KKwlBRENfV1JJVEU0KHNjLCBBRENfQ0xLRElWLCAxOTk5KTsKKworCUFNMzM1
WF9BRENfTE9DS19JTklUKHNjKTsKKworCWFtMzM1eF9hZGNfc3lzY3RsX2luaXQoc2MpOworCisJ
cmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorYW0zMzV4X2FkY19kZXRhY2goZGV2aWNlX3Qg
ZGV2KQoreworCXN0cnVjdCBhbTMzNXhfYWRjX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOworCisJLyogVHVybiBvZmYgdGhlIEFEQy4gKi8KKwlBTTMzNVhfQURDX0xP
Q0soc2MpOworCWFtMzM1eF9hZGNfcmVzZXQoc2MpOworCWFtMzM1eF9hZGNfc2V0dXAoc2MpOwor
CUFNMzM1WF9BRENfVU5MT0NLKHNjKTsKKworCUFNMzM1WF9BRENfTE9DS19ERVNUUk9ZKHNjKTsK
KworCWlmIChzYy0+c2NfaW50cmhhbmQpCisJCWJ1c190ZWFyZG93bl9pbnRyKGRldiwgc2MtPnNj
X2lycV9yZXMsIHNjLT5zY19pbnRyaGFuZCk7CisJaWYgKHNjLT5zY19pcnFfcmVzKQorCQlidXNf
cmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCAwLCBzYy0+c2NfaXJxX3Jlcyk7CisJ
aWYgKHNjLT5zY19tZW1fcmVzKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNf
TUVNT1JZLCAwLCBzYy0+c2NfbWVtX3Jlcyk7CisKKwlyZXR1cm4gKGJ1c19nZW5lcmljX2RldGFj
aChkZXYpKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBhbTMzNXhfYWRjX21ldGhvZHNb
XSA9IHsKKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJYW0zMzV4X2FkY19wcm9iZSksCisJREVW
TUVUSE9EKGRldmljZV9hdHRhY2gsCWFtMzM1eF9hZGNfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2
aWNlX2RldGFjaCwJYW0zMzV4X2FkY19kZXRhY2gpLAorCisJREVWTUVUSE9EX0VORAorfTsKKwor
c3RhdGljIGRyaXZlcl90IGFtMzM1eF9hZGNfZHJpdmVyID0geworCSJhbTMzNXhfYWRjIiwKKwlh
bTMzNXhfYWRjX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBhbTMzNXhfYWRjX3NvZnRjKSwKK307
CisKK3N0YXRpYyBkZXZjbGFzc190IGFtMzM1eF9hZGNfZGV2Y2xhc3M7CisKK0RSSVZFUl9NT0RV
TEUoYW0zMzV4X2FkYywgc2ltcGxlYnVzLCBhbTMzNXhfYWRjX2RyaXZlciwgYW0zMzV4X2FkY19k
ZXZjbGFzcywgMCwgMCk7CitNT0RVTEVfVkVSU0lPTihhbTMzNXhfYWRjLCAxKTsKK01PRFVMRV9E
RVBFTkQoYW0zMzV4X2FkYywgc2ltcGxlYnVzLCAxLCAxLCAxKTsKLS0tIC9kZXYvbnVsbAkyMDE0
LTAzLTE2IDExOjAwOjAwLjAwMDAwMDAwMCAtMDMwMAorKysgc3lzL2FybS90aS9hbTMzNXgvYW0z
MzV4X2FkY3JlZy5oCTIwMTQtMDMtMTYgMTE6MDc6NDcuMjA0Mzk2OTcwIC0wMzAwCkBAIC0wLDAg
KzEsMTA1IEBACisvKi0KKyAqIENvcHlyaWdodCAyMDE0IEx1aXogT3RhdmlvIE8gU291emEgPGxv
b3NAZnJlZWJzZC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAor
ICovCisKKyNpZm5kZWYgX0FNMzM1WF9BRENSRUdfSF8KKyNkZWZpbmUgX0FNMzM1WF9BRENSRUdf
SF8KKworI2RlZmluZQlBRENfUkVWSVNJT04JCTB4MDAwCisjZGVmaW5lCUFEQ19SRVZfU0NIRU1F
X01TSwkJMHhjMDAwMDAwMAorI2RlZmluZQlBRENfUkVWX1NDSEVNRV9TSElGVAkJMzAKKyNkZWZp
bmUJQURDX1JFVl9GVU5DX01TSwkJMHgwZmZmMDAwMAorI2RlZmluZQlBRENfUkVWX0ZVTkNfU0hJ
RlQJCTE2CisjZGVmaW5lCUFEQ19SRVZfUlRMX01TSwkJCTB4MDAwMGY4MDAKKyNkZWZpbmUJQURD
X1JFVl9SVExfU0hJRlQJCTExCisjZGVmaW5lCUFEQ19SRVZfTUFKT1JfTVNLCQkweDAwMDAwNzAw
CisjZGVmaW5lCUFEQ19SRVZfTUFKT1JfU0hJRlQJCTgKKyNkZWZpbmUJQURDX1JFVl9DVVNUT01f
TVNLCQkweDAwMDAwMGMwCisjZGVmaW5lCUFEQ19SRVZfQ1VTVE9NX1NISUZUCQk2CisjZGVmaW5l
CUFEQ19SRVZfTUlOT1JfTVNLCQkweDAwMDAwMDNmCisjZGVmaW5lCUFEQ19TWVNDRkcJCTB4MDEw
CisjZGVmaW5lCUFEQ19TWVNDRkdfSURMRV9NU0sJCTB4MDAwMDAwYzAKKyNkZWZpbmUJQURDX1NZ
U0NGR19JRExFX1NISUZUCQkyCisjZGVmaW5lCUFEQ19JUlFTVEFUVVNfUkFXCTB4MDI0CisjZGVm
aW5lCUFEQ19JUlFTVEFUVVMJCTB4MDI4CisjZGVmaW5lCUFEQ19JUlFFTkFCTEVfU0VUCTB4MDJj
CisjZGVmaW5lCUFEQ19JUlFFTkFCTEVfQ0xSCTB4MDMwCisjZGVmaW5lCUFEQ19JUlFfSFdfUEVO
X1NZTkMJCSgxIDw8IDEwKQorI2RlZmluZQlBRENfSVJRX1BFTl9VUAkJCSgxIDw8IDkpCisjZGVm
aW5lCUFEQ19JUlFfT1VUX1JBTkdFCQkoMSA8PCA4KQorI2RlZmluZQlBRENfSVJRX0ZJRk8xX1VO
RFIJCSgxIDw8IDcpCisjZGVmaW5lCUFEQ19JUlFfRklGTzFfT1ZFUlIJCSgxIDw8IDYpCisjZGVm
aW5lCUFEQ19JUlFfRklGTzFfVEhSRVMJCSgxIDw8IDUpCisjZGVmaW5lCUFEQ19JUlFfRklGTzBf
VU5EUgkJKDEgPDwgNCkKKyNkZWZpbmUJQURDX0lSUV9GSUZPMF9PVkVSUgkJKDEgPDwgMykKKyNk
ZWZpbmUJQURDX0lSUV9GSUZPMF9USFJFUwkJKDEgPDwgMikKKyNkZWZpbmUJQURDX0lSUV9FTkRf
T0ZfU0VRCQkoMSA8PCAxKQorI2RlZmluZQlBRENfSVJRX0hXX1BFTl9BU1lOQwkJKDEgPDwgMCkK
KyNkZWZpbmUJQURDX0NUUkwJCTB4MDQwCisjZGVmaW5lCUFEQ19DVFJMX1NURVBfV1AJCTB4MDAw
MDAwMDQKKyNkZWZpbmUJQURDX0NUUkxfU1RFUF9JRAkJMHgwMDAwMDAwMgorI2RlZmluZQlBRENf
Q1RSTF9FTkFCTEUJCQkweDAwMDAwMDAxCisjZGVmaW5lCUFEQ19DTEtESVYJCTB4MDRjCisjZGVm
aW5lCUFEQ19TVEVQRU5BQkxFCQkweDA1NAorI2RlZmluZQlBRENfU1RFUENGRzEJCTB4MDY0Cisj
ZGVmaW5lCUFEQ19TVEVQQ0ZHMgkJMHgwNmMKKyNkZWZpbmUJQURDX1NURVBDRkczCQkweDA3NAor
I2RlZmluZQlBRENfU1RFUENGRzQJCTB4MDdjCisjZGVmaW5lCUFEQ19TVEVQQ0ZHNQkJMHgwODQK
KyNkZWZpbmUJQURDX1NURVBDRkc2CQkweDA4YworI2RlZmluZQlBRENfU1RFUENGRzcJCTB4MDk0
CisjZGVmaW5lCUFEQ19TVEVQX1JGTV9NU0sJCTB4MDE4MDAwMDAKKyNkZWZpbmUJQURDX1NURVBf
UkZNX1NISUZUCQkyMworI2RlZmluZQlBRENfU1RFUF9SRk1fVlNTQQkJMAorI2RlZmluZQlBRENf
U1RFUF9SRk1fWE5VUgkJMQorI2RlZmluZQlBRENfU1RFUF9SRk1fWU5MUgkJMgorI2RlZmluZQlB
RENfU1RFUF9SRk1fVlJFRk4JCTMKKyNkZWZpbmUJQURDX1NURVBfSU5QX01TSwkJMHgwMDc4MDAw
MAorI2RlZmluZQlBRENfU1RFUF9JTlBfU0hJRlQJCTE5CisjZGVmaW5lCUFEQ19TVEVQX0lOTV9N
U0sJCTB4MDAwNzgwMDAKKyNkZWZpbmUJQURDX1NURVBfSU5NX1NISUZUCQkxNQorI2RlZmluZQlB
RENfU1RFUF9SRlBfTVNLCQkweDAwMDA3MDAwCisjZGVmaW5lCUFEQ19TVEVQX1JGUF9TSElGVAkJ
MTIKKyNkZWZpbmUJQURDX1NURVBfUkZQX1ZEREEJCTAKKyNkZWZpbmUJQURDX1NURVBfUkZQX1hQ
VUwJCTEKKyNkZWZpbmUJQURDX1NURVBfUkZQX1lQTEwJCTIKKyNkZWZpbmUJQURDX1NURVBfUkZQ
X1ZSRUZQCQkzCisjZGVmaW5lCUFEQ19TVEVQX1JGUF9JTlRSRUYJCTQKKyNkZWZpbmUJQURDX1NU
RVBfQVZHX01TSwkJMHgwMDAwMDAxYworI2RlZmluZQlBRENfU1RFUF9BVkdfU0hJRlQJCTIKKyNk
ZWZpbmUJQURDX1NURVBfTU9ERV9NU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUJQURDX1NURVBfTU9E
RV9PTkVTSE9UCQkweDAwMDAwMDAwCisjZGVmaW5lCUFEQ19TVEVQX01PREVfQ09OVElOVU9VUwkw
eDAwMDAwMDAxCisjZGVmaW5lCUFEQ19GSUZPMENPVU5UCQkweDBlNAorI2RlZmluZQlBRENfRklG
TzBUSFJFU0hPTEQJMHgwZTgKKyNkZWZpbmUJQURDX0ZJRk8wREFUQQkJMHgxMDAKKyNkZWZpbmUJ
QURDX0ZJRk9fQ09VTlRfTVNLCQkweDAwMDAwMDdmCisjZGVmaW5lCUFEQ19GSUZPX1NURVBfSURf
TVNLCQkweDAwMGYwMDAwCisjZGVmaW5lCUFEQ19GSUZPX1NURVBfSURfU0hJRlQJCTE2CisjZGVm
aW5lCUFEQ19GSUZPX0RBVEFfTVNLCQkweDAwMDAwZmZmCisKKyNlbmRpZiAvKiBfQU0zMzVYX0FE
Q1JFR19IXyAqLwotLS0gL2Rldi9udWxsCTIwMTQtMDMtMTYgMTE6MDA6MDAuMDAwMDAwMDAwIC0w
MzAwCisrKyBzeXMvYXJtL3RpL2FtMzM1eC9hbTMzNXhfYWRjdmFyLmgJMjAxNC0wMy0xNSAyMjoy
Njo0Ny4zMTM1NDI5NTkgLTAzMDAKQEAgLTAsMCArMSw2NyBAQAorLyotCisgKiBDb3B5cmlnaHQg
MjAxNCBMdWl6IE90YXZpbyBPIFNvdXphIDxsb29zQGZyZWVic2Qub3JnPgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmIF9BTTMzNVhfQURDVkFS
X0hfCisjZGVmaW5lIF9BTTMzNVhfQURDVkFSX0hfCisKKyNkZWZpbmUJQU0zMzVYX0FEQ19OUElO
Uwk3CisKKyNkZWZpbmUJQURDX1JFQUQ0KF9zYywgcmVnKQlidXNfcmVhZF80KChfc2MpLT5zY19t
ZW1fcmVzLCByZWcpCisjZGVmaW5lCUFEQ19XUklURTQoX3NjLCByZWcsIHZhbHVlKQlcCisJYnVz
X3dyaXRlXzQoKF9zYyktPnNjX21lbV9yZXMsIHJlZywgdmFsdWUpCisKK3N0cnVjdCBhbTMzNXhf
YWRjX3NvZnRjIHsKKwlkZXZpY2VfdAkJc2NfZGV2OworCXN0cnVjdCBtdHgJCXNjX210eDsKKwlz
dHJ1Y3QgcmVzb3VyY2UJCSpzY19tZW1fcmVzOworCXN0cnVjdCByZXNvdXJjZQkJKnNjX2lycV9y
ZXM7CisJdm9pZAkJCSpzY19pbnRyaGFuZDsKK307CisKK3N0cnVjdCBhbTMzNXhfYWRjX2lucHV0
IHsKKwlpbnQzMl90CQkJZW5hYmxlOwkJLyogaW5wdXQgZW5hYmxlZCAqLworCWludDMyX3QJCQlz
YW1wbGVzOwkvKiBzYW1wbGVzIGF2ZXJhZ2UgKi8KKwlpbnQzMl90CQkJaW5wdXQ7CQkvKiBpbnB1
dCBudW1iZXIgKi8KKwlpbnQzMl90CQkJdmFsdWU7CQkvKiByYXcgY29udmVydGVkIHZhbHVlICov
CisJdWludDMyX3QJCXN0ZXByZWc7CS8qIHN0ZXAgcmVnaXN0ZXIgKi8KKwlzdHJ1Y3QgYW0zMzV4
X2FkY19zb2Z0Ywkqc2M7CQkvKiBwb2ludGVyIHRvIGFkYyBzb2Z0YyAqLworfTsKKworI2RlZmlu
ZQlBTTMzNVhfQURDX0xPQ0soX3NjKQkJXAorCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4KQorI2Rl
ZmluZQlBTTMzNVhfQURDX1VOTE9DSyhfc2MpCQlcCisJbXR4X3VubG9jaygmKF9zYyktPnNjX210
eCkKKyNkZWZpbmUJQU0zMzVYX0FEQ19MT0NLX0lOSVQoX3NjKQlcCisJbXR4X2luaXQoJl9zYy0+
c2NfbXR4LCBkZXZpY2VfZ2V0X25hbWV1bml0KF9zYy0+c2NfZGV2KSwgXAorCSAgICAiYW0zMzV4
X2FkYyIsIE1UWF9ERUYpCisjZGVmaW5lCUFNMzM1WF9BRENfTE9DS19ERVNUUk9ZKF9zYykJXAor
CW10eF9kZXN0cm95KCZfc2MtPnNjX210eCk7CisjZGVmaW5lCUFNMzM1WF9BRENfTE9DS19BU1NF
UlQoX3NjKQlcCisJbXR4X2Fzc2VydCgmKF9zYyktPnNjX210eCwgTUFfT1dORUQpCisKKyNlbmRp
ZiAvKiBfQU0zMzVYX0FEQ1ZBUl9IXyAqLwpJbmRleDogc3lzL2Jvb3QvZmR0L2R0cy9hbTMzNXgu
ZHRzaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBzeXMvYm9vdC9mZHQvZHRzL2FtMzM1eC5kdHNpCShyZXZpc2lv
biAyNjIxMzEpCisrKyBzeXMvYm9vdC9mZHQvZHRzL2FtMzM1eC5kdHNpCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw2ICs3NSwxMyBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQUlOVEM+OwogCQl9
OwogCisJCWFkYzA6IGFkY0A0NEUwRDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtMzM1eC1h
ZGMiOworCQkJcmVnID0gPDB4NDRFMEQwMDAgMHgyMDAwPjsKKwkJCWludGVycnVwdHMgPSA8IDE2
ID47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZBSU5UQz47CisgCQl9OworIAkJCiAJCUdQSU86
IGdwaW8gewogCQkJI2dwaW8tY2VsbHMgPSA8Mz47CiAJCQljb21wYXRpYmxlID0gInRpLGdwaW8i
OwpJbmRleDogc3lzL2FybS9jb25mL0JFQUdMRUJPTkUKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9j
b25mL0JFQUdMRUJPTkUJKHJldmlzaW9uIDI2MjEzMSkKKysrIHN5cy9hcm0vY29uZi9CRUFHTEVC
T05FCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDkgQEAKIGRldmljZQkJZ3BpbwogZGV2
aWNlCQlncGlvbGVkCiAKKyMgQURDIHN1cHBvcnQKK2RldmljZQkJYW0zMzV4X2FkYworCiAjIFVT
QiBzdXBwb3J0CiBkZXZpY2UJCXVzYgogb3B0aW9ucyAJVVNCX0hPU1RfQUxJR049NjQJIyBDYWNo
ZWxpbmUgc2l6ZSBpcyA2NCBvbiBBTTMzNXguCg==
--047d7bb709886b3cc004f4cd7118--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ8CS7pZ2e%2BAL5tHB9dX==iRLe7Rpm5bQ80VMgxL841UOgqaPw>