Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Nov 2011 17:16:21 +0000
From:      Nima Misaghian <nmisaghian@sandvine.com>
To:        Craig Rodrigues <rodrigc@crodrigues.org>
Cc:        "freebsd-current@freebsd.org" <freebsd-current@freebsd.org>
Subject:   RE: Adding disk firmware programming capability to camcontrol
Message-ID:  <0A3573FC36A1BE41AAA3DFF287C7968405688A@wtl-exch-2.sandvine.com>
In-Reply-To: <CAG=rPVfzjZ=aJHVbcrR9r3u4iW3E4ra=0u%2B8-Q7zHAT3GUQTiA@mail.gmail.com>
References:  <20111028204706.GA57454@sandvine.com> <CAG=rPVfzjZ=aJHVbcrR9r3u4iW3E4ra=0u%2B8-Q7zHAT3GUQTiA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--_002_0A3573FC36A1BE41AAA3DFF287C7968405688Awtlexch2sandvinec_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

I have updated the patch according to feedbacks I received. The main modifi=
cation was to warn the user and ask for confirmation before downloading a f=
irmware image. A -y option has been added that suppresses the confirmation-=
- the same as the one for the format command.

The new patch is against HEAD and could be downloaded from:
http://people.freebsd.org/~emaste/patches/fwdownload.diff


Reviews/suggestions are greatly appreciated.


Nima Misaghian=20
nmisaghian@sandvine.com


> -----Original Message-----
> From: crodr001@gmail.com [mailto:crodr001@gmail.com] On Behalf Of Craig
> Rodrigues
> Sent: Thursday, November 03, 2011 10:06 PM
> To: Nima Misaghian
> Cc: freebsd-current@freebsd.org
> Subject: Re: Adding disk firmware programming capability to camcontrol
>=20
> On Fri, Oct 28, 2011 at 1:47 PM, Nima Misaghian
> <nmisaghian@sandvine.com> wrote:
> > Hi,
> >
> > I have got code developed by Andre Albsmeier that is capable of
> > programming firmware of hard drives from several vendors and =A0turned
> > it into a camcontrol command.
>=20
> +1
>=20
> I took a look at your patch and it looks great.  I have worked on a
> storage product before where there
> was a requirement to reprogram the firmware of hard drives.  On tha
> product,
> proprietary Windows tools had to be used.  It would have been nice to
> be able to use camcontrol in FreeBSD.
>=20
> I think the patch is fine in its current form.  Very few "regular
> users" need to reprogram hard drive firmware.
> It is a special administrative operation.
>=20
> --
> Craig Rodrigues
> rodrigc@crodrigues.org

--_002_0A3573FC36A1BE41AAA3DFF287C7968405688Awtlexch2sandvinec_
Content-Type: application/octet-stream; name="fwdownload.diff"
Content-Description: fwdownload.diff
Content-Disposition: attachment; filename="fwdownload.diff"; size=18521;
	creation-date="Thu, 17 Nov 2011 17:11:41 GMT";
	modification-date="Thu, 17 Nov 2011 17:11:41 GMT"
Content-Transfer-Encoding: base64

LS0tIG9sZC9jYW1jb250cm9sLmgJMjAxMS0xMS0xNyAxMTo1MTozMC4wMDAwMDAwMDAgLTA1MDAK
KysrIG5ldy9jYW1jb250cm9sLmgJMjAxMS0xMS0xNyAxMTo1MTozMC4wMDAwMDAwMDAgLTA1MDAK
QEAgLTQwLDYgKzQwLDggQEAKIAlpbnQgZ290OwogfTsKIAoraW50IGZ3ZG93bmxvYWQoc3RydWN0
IGNhbV9kZXZpY2UgKmRldmljZSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorCSAgICAgICBjaGFy
ICpjb21iaW5lZG9wdCwgaW50IHZlcmJvc2UsIGludCByZXRyeV9jb3VudCwgaW50IHRpbWVvdXQp
Owogdm9pZCBtb2RlX3NlbnNlKHN0cnVjdCBjYW1fZGV2aWNlICpkZXZpY2UsIGludCBtb2RlX3Bh
Z2UsIGludCBwYWdlX2NvbnRyb2wsCiAJCWludCBkYmQsIGludCByZXRyeV9jb3VudCwgaW50IHRp
bWVvdXQsIHVfaW50OF90ICpkYXRhLAogCQlpbnQgZGF0YWxlbik7CkBAIC00OSw4ICs1MSwxMSBA
QAogCSAgICAgICBpbnQgZWRpdCwgaW50IGJpbmFyeSwgaW50IHJldHJ5X2NvdW50LCBpbnQgdGlt
ZW91dCk7CiB2b2lkIG1vZGVfbGlzdChzdHJ1Y3QgY2FtX2RldmljZSAqZGV2aWNlLCBpbnQgcGFn
ZV9jb250cm9sLCBpbnQgZGJkLAogCSAgICAgICBpbnQgcmV0cnlfY291bnQsIGludCB0aW1lb3V0
KTsKK2ludCBzY3NpZG9pbnF1aXJ5KHN0cnVjdCBjYW1fZGV2aWNlICpkZXZpY2UsIGludCBhcmdj
LCBjaGFyICoqYXJndiwKKwkJICBjaGFyICpjb21iaW5lZG9wdCwgaW50IHJldHJ5X2NvdW50LCBp
bnQgdGltZW91dCk7CiBjaGFyICpjZ2V0KHZvaWQgKmhvb2ssIGNoYXIgKm5hbWUpOwogaW50IGln
ZXQodm9pZCAqaG9vaywgY2hhciAqbmFtZSk7CiB2b2lkIGFyZ19wdXQodm9pZCAqaG9vaywgaW50
IGxldHRlciwgdm9pZCAqYXJnLCBpbnQgY291bnQsIGNoYXIgKm5hbWUpOworaW50IGdldF9jb25m
aXJtYXRpb24odm9pZCk7CiB2b2lkIHVzYWdlKGludCB2ZXJib3NlKTsKICNlbmRpZiAvKiBfQ0FN
Q09OVFJPTF9IICovCi0tLSBvbGQvY2FtY29udHJvbC5jCTIwMTEtMTEtMTcgMTE6NTE6MzAuMDAw
MDAwMDAwIC0wNTAwCisrKyBuZXcvY2FtY29udHJvbC5jCTIwMTEtMTEtMTcgMTE6NTE6MzAuMDAw
MDAwMDAwIC0wNTAwCkBAIC04Niw3ICs4Niw4IEBACiAJQ0FNX0NNRF9TTVBfUkcJCT0gMHgwMDAw
MDAxOCwKIAlDQU1fQ01EX1NNUF9QQwkJPSAweDAwMDAwMDE5LAogCUNBTV9DTURfU01QX1BIWUxJ
U1QJPSAweDAwMDAwMDFhLAotCUNBTV9DTURfU01QX01BTklORk8JPSAweDAwMDAwMDFiCisJQ0FN
X0NNRF9TTVBfTUFOSU5GTwk9IDB4MDAwMDAwMWIsCisJQ0FNX0NNRF9ET1dOTE9BRF9GVwk9IDB4
MDAwMDAwMWMKIH0gY2FtX2NtZG1hc2s7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0xODAsNiArMTgx
LDcgQEAKIAl7ImlkbGUiLCBDQU1fQ01EX0lETEUsIENBTV9BUkdfTk9ORSwgInQ6In0sCiAJeyJz
dGFuZGJ5IiwgQ0FNX0NNRF9TVEFOREJZLCBDQU1fQVJHX05PTkUsICJ0OiJ9LAogCXsic2xlZXAi
LCBDQU1fQ01EX1NMRUVQLCBDQU1fQVJHX05PTkUsICIifSwKKwl7ImZ3ZG93bmxvYWQiLCBDQU1f
Q01EX0RPV05MT0FEX0ZXLCBDQU1fQVJHX05PTkUsICJmOnlzIn0sCiAjZW5kaWYgLyogTUlOSU1B
TElTVElDICovCiAJeyJoZWxwIiwgQ0FNX0NNRF9VU0FHRSwgQ0FNX0FSR19OT05FLCBOVUxMfSwK
IAl7Ii0/IiwgQ0FNX0NNRF9VU0FHRSwgQ0FNX0FSR19OT05FLCBOVUxMfSwKQEAgLTY4Myw3ICs2
ODUsNyBAQAogCXJldHVybihlcnJvcik7CiB9CiAKLXN0YXRpYyBpbnQKK2ludAogc2NzaWRvaW5x
dWlyeShzdHJ1Y3QgY2FtX2RldmljZSAqZGV2aWNlLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCiAJ
ICAgICAgY2hhciAqY29tYmluZWRvcHQsIGludCByZXRyeV9jb3VudCwgaW50IHRpbWVvdXQpCiB7
CkBAIC0zNTcxLDcgKzM1NzMsNyBAQAogCXVuaW9uIGNjYiAqY2NiOwogCWludCBjOwogCWludCB5
Y291bnQgPSAwLCBxdWlldCA9IDA7Ci0JaW50IGVycm9yID0gMCwgcmVzcG9uc2UgPSAwLCByZXR2
YWwgPSAwOworCWludCBlcnJvciA9IDAsIHJldHZhbCA9IDA7CiAJaW50IHVzZV90aW1lb3V0ID0g
MTA4MDAgKiAxMDAwOwogCWludCBpbW1lZGlhdGUgPSAxOwogCXN0cnVjdCBmb3JtYXRfZGVmZWN0
X2xpc3RfaGVhZGVyIGZoOwpAQCAtMzYyNSwyNyArMzYyNyw3IEBACiAJfQogCiAJaWYgKHljb3Vu
dCA9PSAwKSB7Ci0KLQkJZG8gewotCQkJY2hhciBzdHJbMTAyNF07Ci0KLQkJCWZwcmludGYoc3Rk
b3V0LCAiQXJlIHlvdSBTVVJFIHlvdSB3YW50IHRvIGRvICIKLQkJCQkidGhpcz8gKHllcy9ubykg
Iik7Ci0KLQkJCWlmIChmZ2V0cyhzdHIsIHNpemVvZihzdHIpLCBzdGRpbikgIT0gTlVMTCkgewot
Ci0JCQkJaWYgKHN0cm5jYXNlY21wKHN0ciwgInllcyIsIDMpID09IDApCi0JCQkJCXJlc3BvbnNl
ID0gMTsKLQkJCQllbHNlIGlmIChzdHJuY2FzZWNtcChzdHIsICJubyIsIDIpID09IDApCi0JCQkJ
CXJlc3BvbnNlID0gLTE7Ci0JCQkJZWxzZSB7Ci0JCQkJCWZwcmludGYoc3Rkb3V0LCAiUGxlYXNl
IGFuc3dlciIKLQkJCQkJCSIgXCJ5ZXNcIiBvciBcIm5vXCJcbiIpOwotCQkJCX0KLQkJCX0KLQkJ
fSB3aGlsZSAocmVzcG9uc2UgPT0gMCk7Ci0KLQkJaWYgKHJlc3BvbnNlID09IC0xKSB7CisJCWlm
ICghZ2V0X2NvbmZpcm1hdGlvbigpKSB7CiAJCQllcnJvciA9IDE7CiAJCQlnb3RvIHNjc2lmb3Jt
YXRfYmFpbG91dDsKIAkJfQpAQCAtNTY5Myw2ICs1Njc1LDcgQEAKICIgICAgICAgIGNhbWNvbnRy
b2wgaWRsZSAgICAgICBbZGV2X2lkXVtnZW5lcmljIGFyZ3NdWy10IHRpbWVdXG4iCiAiICAgICAg
ICBjYW1jb250cm9sIHN0YW5kYnkgICAgW2Rldl9pZF1bZ2VuZXJpYyBhcmdzXVstdCB0aW1lXVxu
IgogIiAgICAgICAgY2FtY29udHJvbCBzbGVlcCAgICAgIFtkZXZfaWRdW2dlbmVyaWMgYXJnc11c
biIKKyIgICAgICAgIGNhbWNvbnRyb2wgZndkb3dubG9hZCBbZGV2X2lkXVtnZW5lcmljIGFyZ3Nd
IDwtZiBmd19pbWFnZT4gWy15XVstc11cbiIKICNlbmRpZiAvKiBNSU5JTUFMSVNUSUMgKi8KICIg
ICAgICAgIGNhbWNvbnRyb2wgaGVscFxuIik7CiAJaWYgKCF2ZXJib3NlKQpAQCAtNTcyOCw2ICs1
NzExLDcgQEAKICJpZGxlICAgICAgICBzZW5kIHRoZSBBVEEgSURMRSBjb21tYW5kIHRvIHRoZSBu
YW1lZCBkZXZpY2VcbiIKICJzdGFuZGJ5ICAgICBzZW5kIHRoZSBBVEEgU1RBTkRCWSBjb21tYW5k
IHRvIHRoZSBuYW1lZCBkZXZpY2VcbiIKICJzbGVlcCAgICAgICBzZW5kIHRoZSBBVEEgU0xFRVAg
Y29tbWFuZCB0byB0aGUgbmFtZWQgZGV2aWNlXG4iCisiZndkb3dubG9hZCAgcHJvZ3JhbSBmaXJt
d2FyZSBvZiB0aGUgbmFtZWQgZGV2aWNlIHdpdGggdGhlIGdpdmVuIGltYWdlIgogImhlbHAgICAg
ICAgIHRoaXMgbWVzc2FnZVxuIgogIkRldmljZSBJZGVudGlmaWVyczpcbiIKICJidXM6dGFyZ2V0
ICAgICAgICBzcGVjaWZ5IHRoZSBidXMgYW5kIHRhcmdldCwgbHVuIGRlZmF1bHRzIHRvIDBcbiIK
QEAgLTU4MTksNyArNTgwMywxMiBAQAogIi13ICAgICAgICAgICAgICAgIGRvbid0IHNlbmQgaW1t
ZWRpYXRlIGZvcm1hdCBjb21tYW5kXG4iCiAiLXkgICAgICAgICAgICAgICAgZG9uJ3QgYXNrIGFu
eSBxdWVzdGlvbnNcbiIKICJpZGxlL3N0YW5kYnkgYXJndW1lbnRzOlxuIgotIi10IDxhcmc+ICAg
ICAgICAgIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSByZXNwZWN0aXZlIHN0YXRlLlxuIik7Cisi
LXQgPGFyZz4gICAgICAgICAgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHJlc3BlY3RpdmUgc3Rh
dGUuXG4iCisiZndkb3dubG9hZCBhcmd1bWVudHM6XG4iCisiLWYgZndfaW1hZ2UgICAgICAgcGF0
aCB0byBmaXJtd2FyZSBpbWFnZSBmaWxlXG4iCisiLXkgICAgICAgICAgICAgICAgZG9uJ3QgYXNr
IGFueSBxdWVzdGlvbnNcbiIKKyItcyAgICAgICAgICAgICAgICBydW4gaW4gc2ltdWxhdGlvbiBt
b2RlXG4iCisiLXYgICAgICAgICAgICAgICAgcHJpbnQgaW5mbyBmb3IgZXZlcnkgZmlybXdhcmUg
c2VnbWVudCBzZW50IHRvIGRldmljZVxuIik7CiAjZW5kaWYgLyogTUlOSU1BTElTVElDICovCiB9
CiAKQEAgLTYxMzUsNiArNjEyNCwxMCBAQAogCQkJCQkJIGNvbWJpbmVkb3B0LCByZXRyeV9jb3Vu
dCwKIAkJCQkJCSB0aW1lb3V0KTsKIAkJCWJyZWFrOworCQljYXNlIENBTV9DTURfRE9XTkxPQURf
Rlc6CisJCQllcnJvciA9IGZ3ZG93bmxvYWQoY2FtX2RldiwgYXJnYywgYXJndiwgY29tYmluZWRv
cHQsCisJCQkgICAgYXJnbGlzdCAmIENBTV9BUkdfVkVSQk9TRSwgcmV0cnlfY291bnQsIHRpbWVv
dXQpOworCQkJYnJlYWs7CiAjZW5kaWYgLyogTUlOSU1BTElTVElDICovCiAJCWNhc2UgQ0FNX0NN
RF9VU0FHRToKIAkJCXVzYWdlKDEpOwotLS0gb2xkL2Z3ZG93bmxvYWQuYwkxOTY5LTEyLTMxIDE5
OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbmV3L2Z3ZG93bmxvYWQuYwkyMDExLTExLTE3IDEx
OjUxOjMwLjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDM3OCBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMTEgU2FuZHZpbmUgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgQW5kcmUgQWxic21laWVyIDxhbmRyZUBhbGJzbWVp
ZXIubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRo
b3V0IG1vZGlmaWNhdGlvbiwgaW1tZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmls
ZS4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqICAgIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQkVXQVJFOgorICoKKyAqIFRoZSBmYWN0IHRo
YXQgeW91IHNlZSB5b3VyIGZhdm9yaXRlIHZlbmRvciBsaXN0ZWQgYmVsb3cgZG9lcyBub3QKKyAq
IGltcGx5IHRoYXQgeW91ciBlcXVpcG1lbnQgd29uJ3QgYnJlYWsgd2hlbiB5b3UgdXNlIHRoaXMg
c29mdHdhcmUKKyAqIHdpdGggaXQuIEl0IG9ubHkgbWVhbnMgdGhhdCB0aGUgZmlybXdhcmUgb2Yg
YXQgbGVhc3Qgb25lIGRldmljZSB0eXBlCisgKiBvZiBlYWNoIHZlbmRvciBsaXN0ZWQgaGFzIGJl
ZW4gcHJvZ3JhbW1lZCBzdWNjZXNzZnVsbHkgdXNpbmcgdGhpcyBjb2RlLgorICoKKyAqIFRoZSAt
cyBvcHRpb24gc2ltdWxhdGVzIGEgZG93bmxvYWQgYnV0IGRvZXMgbm90aGluZyBhcGFydCBmcm9t
IHRoYXQuCisgKiBJdCBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGF0IGNodW5rIHNpemVzIHdvdWxk
IGhhdmUgYmVlbiB1c2VkIHdpdGggdGhlCisgKiBzcGVjaWZpZWQgZGV2aWNlLgorICovCisKKwor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRl
IDxlcnIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisK
KyNpbmNsdWRlIDxjYW0vc2NzaS9zY3NpX2FsbC5oPgorI2luY2x1ZGUgPGNhbS9zY3NpL3Njc2lf
bWVzc2FnZS5oPgorI2luY2x1ZGUgPGNhbWxpYi5oPgorCisjaW5jbHVkZSAiY2FtY29udHJvbC5o
IgorCisjZGVmaW5lCUNNRF9USU1FT1VUIDUwMDAwCS8qIDUwIHNlY29uZHMgKi8KKwordHlwZWRl
ZiBlbnVtIHsKKwlWRU5ET1JfSElUQUNISSwKKwlWRU5ET1JfSFAsCisJVkVORE9SX0lCTSwKKwlW
RU5ET1JfUExFWFRPUiwKKwlWRU5ET1JfUVVBTlRVTSwKKwlWRU5ET1JfU0VBR0FURSwKKwlWRU5E
T1JfVU5LTk9XTgorfSBmd192ZW5kb3JfdDsKKworc3RydWN0IGZ3X3ZlbmRvciB7CisJZndfdmVu
ZG9yX3QgdHlwZTsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWludCBtYXhfcGt0X3NpemU7CisJ
dV9pbnQ4X3QgY2RiX2J5dGUyOworCXVfaW50OF90IGNkYl9ieXRlMl9sYXN0OworCWludCBpbmNf
Y2RiX2J1ZmZlcl9pZDsKKwlpbnQgaW5jX2NkYl9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgZndfdmVu
ZG9yIHZlbmRvcnNfbGlzdFtdID0geworCXtWRU5ET1JfSElUQUNISSwJIkhJVEFDSEkiLAkweDgw
MDAsIDB4MDUsIDB4MDUsIDEsIDB9LAorCXtWRU5ET1JfSFAsCQkiSFAiLAkJMHg4MDAwLCAweDA3
LCAweDA3LCAwLCAxfSwKKwl7VkVORE9SX0lCTSwJCSJJQk0iLAkJMHg4MDAwLCAweDA1LCAweDA1
LCAxLCAwfSwKKwl7VkVORE9SX1BMRVhUT1IsCSJQTEVYVE9SIiwJMHgyMDAwLCAweDA0LCAweDA1
LCAwLCAxfSwKKwl7VkVORE9SX1FVQU5UVU0sCSJRVUFOVFVNIiwJMHgyMDAwLCAweDA0LCAweDA1
LCAwLCAxfSwKKwl7VkVORE9SX1NFQUdBVEUsCSJTRUFHQVRFIiwJMHg4MDAwLCAweDA3LCAweDA3
LCAwLCAxfSwKKwl7VkVORE9SX1VOS05PV04sCU5VTEwsCQkweDAwMDAsIDB4MDAsIDB4MDAsIDAs
IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGZ3X3ZlbmRvciAqZndfZ2V0X3ZlbmRvcihzdHJ1Y3Qg
Y2FtX2RldmljZSAqY2FtX2Rldik7CitzdGF0aWMgY2hhcgkqZndfcmVhZF9pbWcoY2hhciAqZndf
aW1nX3BhdGgsIHN0cnVjdCBmd192ZW5kb3IgKnZwLAorCQkgICAgaW50ICpudW1fYnl0ZXMpOwor
c3RhdGljIGludAkgZndfZG93bmxvYWRfaW1nKHN0cnVjdCBjYW1fZGV2aWNlICpjYW1fZGV2LAor
CQkgICAgc3RydWN0IGZ3X3ZlbmRvciAqdnAsIGNoYXIgKmJ1ZiwgaW50IGltZ19zaXplLAorCQkg
ICAgaW50IHNpbV9tb2RlLCBpbnQgdmVyYm9zZSwgaW50IHJldHJ5X2NvdW50LCBpbnQgdGltZW91
dCk7CisKKy8qCisgKiBGaW5kIGVudHJ5IGluIHZlbmRvcnMgbGlzdCB0aGF0IGJlbG9uZ3MgdG8K
KyAqIHRoZSB2ZW5kb3Igb2YgZ2l2ZW4gY2FtIGRldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCBm
d192ZW5kb3IgKgorZndfZ2V0X3ZlbmRvcihzdHJ1Y3QgY2FtX2RldmljZSAqY2FtX2RldikKK3sK
KwljaGFyIHZlbmRvcltTSURfVkVORE9SX1NJWkUgKyAxXTsKKwlzdHJ1Y3QgZndfdmVuZG9yICp2
cDsKKworCWlmIChjYW1fZGV2ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJY2FtX3N0cnZp
cygodV9jaGFyICopdmVuZG9yLCAodV9jaGFyICopY2FtX2Rldi0+aW5xX2RhdGEudmVuZG9yLAor
CSAgICBzaXplb2YoY2FtX2Rldi0+aW5xX2RhdGEudmVuZG9yKSwgc2l6ZW9mKHZlbmRvcikpOwor
CWZvciAodnAgPSB2ZW5kb3JzX2xpc3Q7IHZwLT5wYXR0ZXJuICE9IE5VTEw7IHZwKyspIHsKKwkJ
aWYgKCFjYW1fc3RybWF0Y2goKGNvbnN0IHVfY2hhciAqKXZlbmRvciwKKwkJICAgIChjb25zdCB1
X2NoYXIgKil2cC0+cGF0dGVybiwgc3RybGVuKHZlbmRvcikpKQorCQkJYnJlYWs7CisJfQorCXJl
dHVybiAodnApOworfQorCisvKgorICogQWxsb2NhdGUgYSBidWZmZXIgYW5kIHJlYWQgZncgaW1h
Z2UgZmlsZSBpbnRvIGl0CisgKiBmcm9tIGdpdmVuIHBhdGguIE51bWJlciBvZiBieXRlcyByZWFk
IGlzIHN0b3JlZAorICogaW4gbnVtX2J5dGVzLgorICovCitzdGF0aWMgY2hhciAqCitmd19yZWFk
X2ltZyhjaGFyICpmd19pbWdfcGF0aCwgc3RydWN0IGZ3X3ZlbmRvciAqdnAsIGludCAqbnVtX2J5
dGVzKQoreworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzdGJ1ZjsKKwljaGFyICpidWY7CisJb2Zm
X3QgaW1nX3NpemU7CisJaW50IHNraXBfYnl0ZXMgPSAwOworCisJaWYgKChmZCA9IG9wZW4oZndf
aW1nX3BhdGgsIE9fUkRPTkxZKSkgPCAwKSB7CisJCXdhcm4oIkNvdWxkIG5vdCBvcGVuIGltYWdl
IGZpbGUgJXMiLCBmd19pbWdfcGF0aCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChmc3Rh
dChmZCwgJnN0YnVmKSA8IDApIHsKKwkJd2FybigiQ291bGQgbm90IHN0YXQgaW1hZ2UgZmlsZSAl
cyIsIGZ3X2ltZ19wYXRoKTsKKwkJZ290byBiYWlsb3V0MTsKKwl9CisJaWYgKChpbWdfc2l6ZSA9
IHN0YnVmLnN0X3NpemUpID09IDApIHsKKwkJd2FybngoIlplcm8gbGVuZ3RoIGltYWdlIGZpbGUg
JXMiLCBmd19pbWdfcGF0aCk7CisJCWdvdG8gYmFpbG91dDE7CisJfQorCWlmICgoYnVmID0gbWFs
bG9jKGltZ19zaXplKSkgPT0gTlVMTCkgeworCQl3YXJueCgiQ291bGQgbm90IGFsbG9jYXRlIGJ1
ZmZlciB0byByZWFkIGltYWdlIGZpbGUgJXMiLAorCQkgICAgZndfaW1nX3BhdGgpOworCQlnb3Rv
IGJhaWxvdXQxOworCX0KKwkvKiBTa2lwIGhlYWRlcnMgaWYgYXBwbGljYWJsZS4gKi8KKwlzd2l0
Y2ggKHZwLT50eXBlKSB7CisJY2FzZSBWRU5ET1JfU0VBR0FURToKKwkJaWYgKHJlYWQoZmQsIGJ1
ZiwgMTYpICE9IDE2KSB7CisJCQl3YXJuKCJDb3VsZCBub3QgcmVhZCBpbWFnZSBmaWxlICVzIiwg
ZndfaW1nX3BhdGgpOworCQkJZ290byBiYWlsb3V0OworCQl9CisJCWlmIChsc2VlayhmZCwgMCwg
U0VFS19TRVQpID09IC0xKSB7CisJCQl3YXJuKCJVbmFibGUgdG8gbHNlZWsiKTsKKwkJCWdvdG8g
YmFpbG91dDsKKwkJfQorCQlpZiAoKHN0cm5jbXAoYnVmLCAiU0VBR0FURSxTRUFHQVRFICIsIDE2
KSA9PSAwKSB8fAorCQkgICAgKGltZ19zaXplICUgNTEyID09IDgwKSkKKwkJCXNraXBfYnl0ZXMg
PSA4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmIChza2lwX2J5dGVz
ICE9IDApIHsKKwkJZnByaW50ZihzdGRvdXQsICJTa2lwcGluZyAlZCBieXRlIGhlYWRlci5cbiIs
IHNraXBfYnl0ZXMpOworCQlpZiAobHNlZWsoZmQsIHNraXBfYnl0ZXMsIFNFRUtfU0VUKSA9PSAt
MSkgeworCQkJd2FybigiQ291bGQgbm90IGxzZWVrIik7CisJCQlnb3RvIGJhaWxvdXQ7CisJCX0K
KwkJaW1nX3NpemUgLT0gc2tpcF9ieXRlczsKKwl9CisJLyogUmVhZCBpbWFnZSBpbnRvIGEgYnVm
ZmVyLiAqLworCWlmIChyZWFkKGZkLCBidWYsIGltZ19zaXplKSAhPSBpbWdfc2l6ZSkgeworCQl3
YXJuKCJDb3VsZCBub3QgcmVhZCBpbWFnZSBmaWxlICVzIiwgZndfaW1nX3BhdGgpOworCQlnb3Rv
IGJhaWxvdXQ7CisJfQorCSpudW1fYnl0ZXMgPSBpbWdfc2l6ZTsKKwlyZXR1cm4gKGJ1Zik7Citi
YWlsb3V0OgorCWZyZWUoYnVmKTsKK2JhaWxvdXQxOgorCWNsb3NlKGZkKTsKKwkqbnVtX2J5dGVz
ID0gMDsKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKiAKKyAqIERvd25sb2FkIGZpcm13YXJlIHN0
b3JlZCBpbiBidWYgdG8gY2FtX2Rldi4gSWYgc2ltdWxhdGlvbiBtb2RlCisgKiBpcyBlbmFibGVk
LCBvbmx5IHNob3cgd2hhdCBwYWNrZXQgc2l6ZXMgd291bGQgYmUgc2VudCB0byB0aGUgCisgKiBk
ZXZpY2UgYnV0IGRvIG5vdCBzZW50IGFueSBhY3R1YWwgcGFja2V0cworICovCitzdGF0aWMgaW50
Citmd19kb3dubG9hZF9pbWcoc3RydWN0IGNhbV9kZXZpY2UgKmNhbV9kZXYsIHN0cnVjdCBmd192
ZW5kb3IgKnZwLAorICAgIGNoYXIgKmJ1ZiwgaW50IGltZ19zaXplLCBpbnQgc2ltX21vZGUsIGlu
dCB2ZXJib3NlLCBpbnQgcmV0cnlfY291bnQsCisgICAgaW50IHRpbWVvdXQpCit7CisJc3RydWN0
IHNjc2lfd3JpdGVfYnVmZmVyIGNkYjsKKwl1bmlvbiBjY2IgKmNjYjsKKwlpbnQgcGt0X2NvdW50
ID0gMDsKKwl1X2ludDMyX3QgcGt0X3NpemUgPSAwOworCWNoYXIgKnBrdF9wdHIgPSBidWY7CisJ
dV9pbnQzMl90IG9mZnNldDsKKwlpbnQgbGFzdF9wa3QgPSAwOworCisJaWYgKChjY2IgPSBjYW1f
Z2V0Y2NiKGNhbV9kZXYpKSA9PSBOVUxMKSB7CisJCXdhcm54KCJDb3VsZCBub3QgYWxsb2NhdGUg
Q0NCIik7CisJCXJldHVybiAoMSk7CisJfQorCXNjc2lfdGVzdF91bml0X3JlYWR5KCZjY2ItPmNz
aW8sIDAsIE5VTEwsIE1TR19TSU1QTEVfUV9UQUcsCisJICAgIFNTRF9GVUxMX1NJWkUsIDUwMDAp
OworCS8qIERpc2FibGUgZnJlZXppbmcgdGhlIGRldmljZSBxdWV1ZS4gKi8KKwljY2ItPmNjYl9o
LmZsYWdzIHw9IENBTV9ERVZfUUZSWkRJUzsKKwlpZiAoY2FtX3NlbmRfY2NiKGNhbV9kZXYsIGNj
YikgPCAwKSB7CisJCXdhcm54KCJFcnJvciBzZW5kaW5nIHRlc3QgdW5pdCByZWFkeSIpOworCQlp
ZiAodmVyYm9zZSkKKwkJCWNhbV9lcnJvcl9wcmludChjYW1fZGV2LCBjY2IsIENBTV9FU0ZfQUxM
LAorCQkJICAgIENBTV9FUEZfQUxMLCBzdGRlcnIpOworCQljYW1fZnJlZWNjYihjY2IpOworCQly
ZXR1cm4oMSk7CisJfQorCWlmICgoY2NiLT5jY2JfaC5zdGF0dXMgJiBDQU1fU1RBVFVTX01BU0sp
ICE9IENBTV9SRVFfQ01QKSB7CisJCXdhcm54KCJEZXZpY2UgaXMgbm90IHJlYWR5Iik7CisJCWlm
ICh2ZXJib3NlKQorCQkJY2FtX2Vycm9yX3ByaW50KGNhbV9kZXYsIGNjYiwgQ0FNX0VTRl9BTEws
CisJCQkgICAgQ0FNX0VQRl9BTEwsIHN0ZGVycik7CisJCWNhbV9mcmVlY2NiKGNjYik7CisJCXJl
dHVybiAoMSk7CisJfQorCXBrdF9zaXplID0gdnAtPm1heF9wa3Rfc2l6ZTsKKwlpZiAodmVyYm9z
ZSB8fCBzaW1fbW9kZSkgeworCQlmcHJpbnRmKHN0ZG91dCwKKwkJICAgICItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCWZwcmludGYoc3Rk
b3V0LAorCQkgICAgIlBrdE5vLglQa3RTaXplCSAgICAgICBCeXRlc1JlbWFpbmluZwlMYXN0UGt0
XG4iKTsKKwkJZnByaW50ZihzdGRvdXQsCisJCSAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCX0KKwkvKiBEb3dubG9hZCBzaW5nbGUg
ZncgcGFja2V0cy4gKi8KKwlkbyB7CisJCWlmIChpbWdfc2l6ZSA8PSB2cC0+bWF4X3BrdF9zaXpl
KSB7CisJCQlsYXN0X3BrdCA9IDE7CisJCQlwa3Rfc2l6ZSA9IGltZ19zaXplOworCQl9CisJCWlm
ICh2ZXJib3NlIHx8IHNpbV9tb2RlKQorCQkJZnByaW50ZihzdGRvdXQsICIlM3UgICAlNXUgKDB4
JTA1WCkgICAlN3UgKDB4JTA2WCkgICAiCisJCQkgICAgIiVkXG4iLCBwa3RfY291bnQsIHBrdF9z
aXplLCBwa3Rfc2l6ZSwKKwkJCSAgICBpbWdfc2l6ZSAtIHBrdF9zaXplLCBpbWdfc2l6ZSAtIHBr
dF9zaXplLAorCQkJICAgIGxhc3RfcGt0KTsKKwkJYnplcm8oJmNkYiwgc2l6ZW9mKGNkYikpOwor
CQljZGIub3Bjb2RlICA9IFdSSVRFX0JVRkZFUjsKKwkJY2RiLmNvbnRyb2wgPSAwOworCQkvKiBQ
YXJhbWV0ZXIgbGlzdCBsZW5ndGguICovCisJCXNjc2lfdWx0bzNiKHBrdF9zaXplLCAmY2RiLmxl
bmd0aFswXSk7CisJCW9mZnNldCA9IHZwLT5pbmNfY2RiX29mZnNldCA/IChwa3RfcHRyIC0gYnVm
KSA6IDA7CisJCXNjc2lfdWx0bzNiKG9mZnNldCwgJmNkYi5vZmZzZXRbMF0pOworCQljZGIuYnl0
ZTIgPSBsYXN0X3BrdCA/IHZwLT5jZGJfYnl0ZTJfbGFzdCA6IHZwLT5jZGJfYnl0ZTI7CisJCWNk
Yi5idWZmZXJfaWQgPSB2cC0+aW5jX2NkYl9idWZmZXJfaWQgPyBwa3RfY291bnQgOiAwOworCQkv
KiBaZXJvIG91dCBwYXlsb2FkIG9mIGNjYiB1bmlvbiBhZnRlciBjY2IgaGVhZGVyLiAqLworCQli
emVybygodV9jaGFyICopY2NiICsgc2l6ZW9mKHN0cnVjdCBjY2JfaGRyKSwKKwkJICAgIHNpemVv
ZihzdHJ1Y3QgY2NiX3Njc2lpbykgLSBzaXplb2Yoc3RydWN0IGNjYl9oZHIpKTsKKwkJLyogQ29w
eSBwcmV2aW91c2x5IGNvbnN0cnVjdGVkIGNkYiBpbnRvIGNjYl9zY3NpaW8gc3RydWN0LiAqLwor
CQliY29weSgmY2RiLCAmY2NiLT5jc2lvLmNkYl9pby5jZGJfYnl0ZXNbMF0sCisJCSAgICBzaXpl
b2Yoc3RydWN0IHNjc2lfd3JpdGVfYnVmZmVyKSk7CisJCS8qIEZpbGwgcmVzdCBvZiBjY2Jfc2Nz
aWlvIHN0cnVjdC4gKi8KKwkJaWYgKCFzaW1fbW9kZSkgeworCQkJY2FtX2ZpbGxfY3NpbygmY2Ni
LT5jc2lvLAkJLyogY2NiX3Njc2lpbwkqLworCQkJICAgIHJldHJ5X2NvdW50LAkJCS8qIHJldHJp
ZXMJKi8KKwkJCSAgICBOVUxMLAkJCQkvKiBjYmZjbnAJKi8KKwkJCSAgICBDQU1fRElSX09VVCB8
IENBTV9ERVZfUUZSWkRJUywJLyogZmxhZ3MJKi8KKwkJCSAgICBDQU1fVEFHX0FDVElPTl9OT05F
LAkJLyogdGFnX2FjdGlvbgkqLworCQkJICAgICh1X2NoYXIgKilwa3RfcHRyLAkJCS8qIGRhdGFf
cHRyCSovCisJCQkgICAgcGt0X3NpemUsCQkJCS8qIGR4ZmVyX2xlbgkqLworCQkJICAgIFNTRF9G
VUxMX1NJWkUsCQkJLyogc2Vuc2VfbGVuCSovCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3NpX3dy
aXRlX2J1ZmZlciksCS8qIGNkYl9sZW4JKi8KKwkJCSAgICB0aW1lb3V0ID8gdGltZW91dCA6IENN
RF9USU1FT1VUKTsJLyogdGltZW91dAkqLworCQkJLyogRXhlY3V0ZSB0aGUgY29tbWFuZC4gKi8K
KwkJCWlmIChjYW1fc2VuZF9jY2IoY2FtX2RldiwgY2NiKSA8IDApIHsKKwkJCQl3YXJueCgiRXJy
b3Igd3JpdGluZyBpbWFnZSB0byBkZXZpY2UiKTsKKwkJCQlpZiAodmVyYm9zZSkKKwkJCQkJY2Ft
X2Vycm9yX3ByaW50KGNhbV9kZXYsIGNjYiwgQ0FNX0VTRl9BTEwsCisJCQkJCSAgICBDQU1fRVBG
X0FMTCwgc3RkZXJyKTsKKwkJCQlnb3RvIGJhaWxvdXQ7CisJCQl9CisJCX0KKwkJLyogUHJlcGFy
ZSBuZXh0IHJvdW5kLiAqLworCQlwa3RfY291bnQrKzsKKwkJcGt0X3B0ciArPSBwa3Rfc2l6ZTsK
KwkJaW1nX3NpemUgLT0gcGt0X3NpemU7CisJfSB3aGlsZSghbGFzdF9wa3QpOworCWlmICgoY2Ni
LT5jY2JfaC5zdGF0dXMgJiBDQU1fU1RBVFVTX01BU0spICE9IENBTV9SRVFfQ01QKSB7CisJCWlm
ICh2ZXJib3NlKQorCQkJY2FtX2Vycm9yX3ByaW50KGNhbV9kZXYsIGNjYiwgQ0FNX0VTRl9BTEws
CisJCQkgICAgQ0FNX0VQRl9BTEwsIHN0ZGVycik7CisJCWdvdG8gYmFpbG91dDsKKwl9CisJY2Ft
X2ZyZWVjY2IoY2NiKTsKKwlyZXR1cm4gKDApOworYmFpbG91dDoKKwljYW1fZnJlZWNjYihjY2Ip
OworCXJldHVybiAoMSk7Cit9CisKK2ludAorZndkb3dubG9hZChzdHJ1Y3QgY2FtX2RldmljZSAq
ZGV2aWNlLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCisgICAgY2hhciAqY29tYmluZWRvcHQsIGlu
dCB2ZXJib3NlLCBpbnQgcmV0cnlfY291bnQsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBmd192
ZW5kb3IgKnZwOworCWNoYXIgKmZ3X2ltZ19wYXRoID0gTlVMTDsKKwljaGFyICpidWY7CisJaW50
IGltZ19zaXplOworCWludCBjOworCWludCBzaW1fbW9kZSA9IDA7CisJaW50IGNvbmZpcm1lZCA9
IDA7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgY29tYmluZWRvcHQpKSAhPSAt
MSkgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAncyc6CisJCQlzaW1fbW9kZSA9IDE7CisJCQlj
b25maXJtZWQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJZndfaW1nX3BhdGggPSBv
cHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAneSc6CisJCQljb25maXJtZWQgPSAxOworCQkJYnJl
YWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmd19pbWdfcGF0aCA9
PSBOVUxMKQorCQllcnJ4KDEsCisJCSAgICAieW91IG11c3Qgc3BlY2lmeSBhIGZpcm13YXJlIGlt
YWdlIGZpbGUgdXNpbmcgLWYgb3B0aW9uIik7CisKKwl2cCA9IGZ3X2dldF92ZW5kb3IoZGV2aWNl
KTsKKwlpZiAodnAgPT0gTlVMTCB8fCB2cC0+dHlwZSA9PSBWRU5ET1JfVU5LTk9XTikKKwkJZXJy
eCgxLCAiVW5zdXBwb3J0ZWQgZGV2aWNlIik7CisKKwlidWYgPSBmd19yZWFkX2ltZyhmd19pbWdf
cGF0aCwgdnAsICZpbWdfc2l6ZSk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlnb3RvIGZhaWw7CisK
KwlpZiAoIWNvbmZpcm1lZCkgeworCQlmcHJpbnRmKHN0ZG91dCwgIllvdSBhcmUgYWJvdXQgdG8g
ZG93bmxvYWQgZmlybXdhcmUgaW1hZ2UgKCVzKSIKKwkJICAgICIgaW50byB0aGUgZm9sbG93aW5n
IGRldmljZTpcbiIsCisJCSAgICBmd19pbWdfcGF0aCk7CisJCWlmIChzY3NpZG9pbnF1aXJ5KGRl
dmljZSwgYXJnYywgYXJndiwgY29tYmluZWRvcHQsIDAsCisJCSAgICA1MDAwKSAhPSAwKSB7CisJ
CQl3YXJueCgiRXJyb3Igc2VuZGluZyBpbnF1aXJ5Iik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJ
ZnByaW50ZihzdGRvdXQsICJcbkl0IG1heSBkYW1hZ2UgeW91ciBkcml2ZS4gIik7CisJCWlmICgh
Z2V0X2NvbmZpcm1hdGlvbigpKQorCQkJZ290byBmYWlsOworCX0KKwlpZiAoc2ltX21vZGUpCisJ
CWZwcmludGYoc3Rkb3V0LCAiUnVubmluZyBpbiBzaW11bGF0aW9uIG1vZGVcbiIpOworCisJaWYg
KGZ3X2Rvd25sb2FkX2ltZyhkZXZpY2UsIHZwLCBidWYsIGltZ19zaXplLCBzaW1fbW9kZSwgdmVy
Ym9zZSwKKwkgICAgcmV0cnlfY291bnQsIHRpbWVvdXQpICE9IDApIHsKKwkJZnByaW50ZihzdGRl
cnIsICJGaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWw7CisJfSBlbHNl
IAorCQlmcHJpbnRmKHN0ZG91dCwgIkZpcm13YXJlIGRvd25sb2FkIHN1Y2Nlc3NmdWxcbiIpOwor
CisJZnJlZShidWYpOworCXJldHVybiAoMCk7CitmYWlsOgorCWlmIChidWYgIT0gTlVMTCkKKwkJ
ZnJlZShidWYpOworCXJldHVybiAoMSk7Cit9CisKLS0tIG9sZC9jYW1jb250cm9sLjgJMjAxMS0x
MS0xNyAxMTo1MTozMC4wMDAwMDAwMDAgLTA1MDAKKysrIG5ldy9jYW1jb250cm9sLjgJMjAxMS0x
MS0xNyAxMTo1MTozMC4wMDAwMDAwMDAgLTA1MDAKQEAgLTI3LDcgKzI3LDcgQEAKIC5cIgogLlwi
ICRGcmVlQlNEJAogLlwiCi0uRGQgTm92ZW1iZXIgMzAsIDIwMTAKKy5EZCBOb3ZlbWJlciAxNywg
MjAxMQogLkR0IENBTUNPTlRST0wgOAogLk9zCiAuU2ggTkFNRQpAQCAtMjIwLDYgKzIyMCwxMyBA
QAogLk9wIGRldmljZSBpZAogLk9wIGdlbmVyaWMgYXJncwogLk5tCisuSWMgZndkb3dubG9hZAor
Lk9wIGRldmljZSBpZAorLk9wIGdlbmVyaWMgYXJncworLkFxIEZsIGYgQXIgZndfaW1hZ2UKKy5P
cCBGbCB5CisuT3AgRmwgcworLk5tCiAuSWMgaGVscAogLlNoIERFU0NSSVBUSU9OCiBUaGUKQEAg
LTEwNjAsNiArMTA2Nyw0OSBAQAogLkl0IEljIHNsZWVwCiBQdXQgQVRBIGRldmljZSBpbnRvIFNM
RUVQIHN0YXRlLiBOb3RlIHRoYXQgdGhlIG9ubHkgd2F5IGdldCBkZXZpY2Ugb3V0IG9mCiB0aGlz
IHN0YXRlIG1heSBiZSByZXNldC4KKy5JdCBJYyBmd2Rvd25sb2FkCitQcm9ncmFtIGZpcm13YXJl
IG9mIHRoZSBuYW1lZCBTQ1NJIGRldmljZSB1c2luZyB0aGUgaW1hZ2UgZmlsZSBwcm92aWRlZC4K
Ky5QcAorQ3VycmVudCBsaXN0IG9mIHN1cHBvcnRlZCB2ZW5kb3JzOgorLkJsIC1idWxsZXQgLW9m
ZnNldCBpbmRlbnQgLWNvbXBhY3QKKy5JdAorSElUQUNISQorLkl0CitIUAorLkl0CitJQk0KKy5J
dAorUExFWFRPUgorLkl0CitRVUFOVFVNCisuSXQKK1NFQUdBVEUKKy5FbAorLlBwCisuRW0gV0FS
TklORyEgV0FSTklORyEgV0FSTklORyEKKy5QcAorVmVyeSBsaXR0bGUgdGVzdGluZyBoYXMgYmVl
biBkb25lIHRvIG1ha2Ugc3VyZSB0aGF0IGRpZmZlcmVudCBkZXZpY2UgbW9kZWxzCitvZiBlYWNo
IHZlbmRvciB3b3JrIGNvcnJlY3RseSB3aXRoIGZ3ZG93bmxvYWQgY29tbWFuZC4gU2hvd2luZyB1
cCBhIHZlbmRvciAKK25hbWUgaW4gdGhlIHN1cHBvcnRlZCBsaXN0IGJhc2ljYWxseSBtZWFucyBm
aXJtd2FyZSBvZiBhdCBsZWFzdCBvbmUgZGV2aWNlCit0eXBlIGZyb20gdGhhdCB2ZW5kb3IgaGFz
IHN1Y2Nlc3NmdWxseSBiZWVuIHByb2dyYW1tZWQgd2l0aCBmd2Rvd25sb2FkCitjb21tYW5kLiBF
eHRyYSBjYXV0aW9uIHNob3VsZCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoaXMgY29tbWFuZCBzaW5j
ZSB0aGVyZSBpcworbm8gZ3VhcmFudGVlIGl0IHdvdWxkIG5vdCBicmVhayBhIGRldmljZSBmcm9t
IGxpc3RlZCB2ZW5kb3JzLgorLkJsIC10YWcgLXdpZHRoIDExbgorLkl0IEZsIGYgQXIgZndfaW1h
Z2UKK1BhdGggdG8gdGhlIGZpcm13YXJlIGltYWdlIGZpbGUgdG8gYmUgZG93bmxvYWRlZCB0byB0
aGUgc3BlY2lmaWVkIGRldmljZS4KKy5JdCBGbCB5CitEbyBub3QgYXNrIHRoZSB1c2VyIGZvciBj
b25maXJtYXRpb24uCisuSXQgRmwgcworUnVuIGluIHNpbXVsYXRpb24gbW9kZSB3aGVyZSBwYWNr
ZXQgc2l6ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgc2VudCBhcmUgc2hvd24sCitidXQgbm8gYWN0
dWFsIHBhY2tldCBpcyBzZW50IHRvIHRoZSBkZXZpY2UuIE5vIGNvbmZpbWF0aW9uIHF1ZXN0aW9u
IGlzIGFza2VkIAorZnJvbSB1c2VyIGluIHNpbXVsYXRpb24gbW9kZS4KKy5JdCBGbCB2CitCZXNp
ZGVzIHNob3dpbmcgc2Vuc2UgaW5mb3JtYXRpb24gaW4gY2FzZSBvZiBhIGZhaWx1cmUsIHRoZSB2
ZXJib3NlIG9wdGlvbiBjYXVzZXMKKy5ObQordG8gb3V0cHV0IGEgbGluZSBmb3IgZXZlcnkgZmly
bXdhcmUgc2VnbWVudCB0aGF0IGlzIHNlbnQgdG8gdGhlIGRldmljZSBieSB0aGUKK2Z3ZG93bmxv
YWQgY29tbWFuZAorLS0gdGhlIHNhbWUgYXMgdGhlIG9uZXMgc2hvd24gaW4gc2ltdWxhdGlvbiBt
b2RlLgorLkVsCiAuSXQgSWMgaGVscAogUHJpbnQgb3V0IHZlcmJvc2UgdXNhZ2UgaW5mb3JtYXRp
b24uCiAuRWwKLS0tIG9sZC9NYWtlZmlsZQkyMDExLTExLTE3IDExOjUxOjMwLjAwMDAwMDAwMCAt
MDUwMAorKysgbmV3L01ha2VmaWxlCTIwMTEtMTEtMTcgMTE6NTE6MzAuMDAwMDAwMDAwIC0wNTAw
CkBAIC0xLDcgKzEsNyBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JY2FtY29udHJvbAotU1JDUz0J
Y2FtY29udHJvbC5jIHV0aWwuYworU1JDUz0JY2FtY29udHJvbC5jIGZ3ZG93bmxvYWQuYyB1dGls
LmMKIC5pZiAhZGVmaW5lZChSRUxFQVNFX0NSVU5DSCkKIFNSQ1MrPQltb2RlZWRpdC5jCiAuZWxz
ZQotLS0gb2xkL3V0aWwuYwkyMDExLTExLTE3IDExOjUxOjMwLjAwMDAwMDAwMCAtMDUwMAorKysg
bmV3L3V0aWwuYwkyMDExLTExLTE3IDExOjUxOjMwLjAwMDAwMDAwMCAtMDUwMApAQCAtMTU0LDMg
KzE1NCwzMSBAQAogCWlmICh2ZXJib3NlKQogCQlwdXRjaGFyKCdcbicpOwogfQorCisvKgorICog
R2V0IGNvbmZpcm1hdGlvbiBmcm9tIHVzZXIKKyAqIFJldHVybiB2YWx1ZXM6CisgKiAgICAxOiBj
b25maXJtZWQKKyAqICAgIDA6IHVuY29uZmlybWVkCisgKi8KK2ludAorZ2V0X2NvbmZpcm1hdGlv
bigpCit7CisJY2hhciBzdHJbMTAyNF07CisJaW50IHJlc3BvbnNlID0gLTE7CisKKwlkbyB7CisJ
CWZwcmludGYoc3Rkb3V0LCAiQXJlIHlvdSBTVVJFIHlvdSB3YW50IHRvIGRvIHRoaXM/ICh5ZXMv
bm8pICIpOworCQlpZiAoZmdldHMoc3RyLCBzaXplb2Yoc3RyKSwgc3RkaW4pICE9IE5VTEwpIHsK
KwkJCWlmIChzdHJuY2FzZWNtcChzdHIsICJ5ZXMiLCAzKSA9PSAwKQorCQkJCXJlc3BvbnNlID0g
MTsKKwkJCWVsc2UgaWYgKHN0cm5jYXNlY21wKHN0ciwgIm5vIiwgMikgPT0gMCkKKwkJCQlyZXNw
b25zZSA9IDA7CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRvdXQsCisJCQkJICAgICJQbGVhc2Ug
YW5zd2VyIFwieWVzXCIgb3IgXCJub1wiXG4iKTsKKwkJfSBlbHNlCisJCQlyZXNwb25zZSA9IDA7
CisJfSB3aGlsZSAocmVzcG9uc2UgPT0gLTEpOworCXJldHVybiAocmVzcG9uc2UpOworfQo=

--_002_0A3573FC36A1BE41AAA3DFF287C7968405688Awtlexch2sandvinec_--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0A3573FC36A1BE41AAA3DFF287C7968405688A>