Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Mar 2009 15:00:01 -0800
From:      Maksim Yevmenkin <maksim.yevmenkin@gmail.com>
To:        Iain Hibbert <plunky@rya-online.net>
Cc:        "freebsd-bluetooth@freebsd.org" <freebsd-bluetooth@freebsd.org>
Subject:   Re: libhci
Message-ID:  <bb4a86c70903051500j70837feo659b22dba44428fe@mail.gmail.com>
In-Reply-To: <1236284095.692711.620.nullmailer@galant.ukfsn.org>
References:  <1233365217.00068654.1233354838@10.7.7.3> <1233758519.360141.162.nullmailer@galant.ukfsn.org> <bb4a86c70902041000t26ad9b66q94a32ff37cfb7f4b@mail.gmail.com> <1233845167.798942.24919.nullmailer@galant.ukfsn.org> <bb4a86c70902051001j53f52e3dhb2e80e393b936f16@mail.gmail.com> <1233919880.530235.10843.nullmailer@galant.ukfsn.org> <bb4a86c70902131717o2ccc1fd2nd73f84b1a7765152@mail.gmail.com> <1234605178.990729.799.nullmailer@galant.ukfsn.org> <bb4a86c70903051103q8937592sb117db281b20705f@mail.gmail.com> <1236284095.692711.620.nullmailer@galant.ukfsn.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--00504502c8e6d17e0904646720df
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

On Thu, Mar 5, 2009 at 12:14 PM, Iain Hibbert <plunky@rya-online.net> wrote:
> On Thu, 5 Mar 2009, Maksim Yevmenkin wrote:
>>  [v2]
>
> seems fine, some documentation comments
>
> +The
> +.Fn bt_devenum
> +function enumerates up to
> +.Dv HCI_DEVMAX
> +Bluetooth devices present in the system.
>
> This should not be in the function API but in a CAVEATS or BUGS section as
> its implementation dependent :)

yeah, sure.

> +The
> +.Fn bt_devenum
> +uses the same socket for the duration of enumeration.
>
> Likewise I don't think this should be part of the specification as some
> implementations might not be able to reuse the socket. Perhaps just say
> that the socket handle provided will only be valid during the callback to
> make sure that the callback doesn't store it? (can put it in CAVEATS
> section that it is reused if you like?)

fine

> +The function guarantees that the socket,
> +passed to the callback function,
> +will be bound and connected to the Bluetooth device being enumerated.
> +The function returns number of successfully enumerated devices,
> +otherwise -1.
>
> can we say 'or -1 if an error occurred', as I think it could be valid to
> successfully enumerate 0 devices..?

yes, we can :)

> +#define        HCI_DEVFEATURES_SIZE            NG_HCI_FEATURES_SIZE
>
> when I ported the include files I just chopped off the NG_, is there
> any gain in having another definition?

well, i wanted to have something that is compatible on the source code
level. i could have used NG_HCI_FEATURES_SIZE but decided not to.

> +       uint32_t        state;
>
> I guess state is impementation dependent? (some kind of device flags not
> mentioned here?)

yeah, its what ever device chooses to report.

> +       uint8_t         _padding[20];   /* make it 128 bytes in size */
>
> that comment shoud be 'leave space for future additions' rather than
> specifying the size as some platforms won't actually be that size anyway..

sure.

thanks,
max

--00504502c8e6d17e0904646720df
Content-Type: text/plain; charset=US-ASCII; name="bluetooth-hci.diff.txt"
Content-Disposition: attachment; filename="bluetooth-hci.diff.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_fry1irpe0

SW5kZXg6IGRldi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi5jCShyZXZpc2lvbiAwKQorKysgZGV2LmMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBkZXYuYworICovCisKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAyMDA5IE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28u
Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNs
dWRlIDxibHVldG9vdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCitzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcKK3sKKwljaGFyCQlkZXZuYW1lW0hDSV9E
RVZOQU1FX1NJWkVdOworCWJkYWRkcl90IGNvbnN0CSpiZGFkZHI7Cit9OworCitzdGF0aWMgYnRf
ZGV2ZW51bV9jYl90CWJ0X2RldmFkZHJfbWF0Y2g7CisKK2ludAorYnRfZGV2YWRkcihjaGFyIGNv
bnN0ICpkZXZuYW1lLCBiZGFkZHJfdCAqYWRkcikKK3sKKwlzdHJ1Y3QgYnRfZGV2aW5mbwlkaTsK
KworCXN0cmxjcHkoZGkuZGV2bmFtZSwgZGV2bmFtZSwgc2l6ZW9mKGRpLmRldm5hbWUpKTsKKwor
CWlmIChidF9kZXZpbmZvKCZkaSkgPCAwKQorCQlyZXR1cm4gKDApOworCisJaWYgKGFkZHIgIT0g
TlVMTCkKKwkJYmRhZGRyX2NvcHkoYWRkciwgJmRpLmJkYWRkcik7CisKKwlyZXR1cm4gKDEpOwor
fQorCitpbnQKK2J0X2Rldm5hbWUoY2hhciAqZGV2bmFtZSwgYmRhZGRyX3QgY29uc3QgKmFkZHIp
Cit7CisJc3RydWN0IGJ0X2RldmFkZHJfbWF0Y2hfYXJnCWFyZzsKKworCW1lbXNldCgmYXJnLCAw
LCBzaXplb2YoYXJnKSk7CisJYXJnLmJkYWRkciA9IGFkZHI7CisKKwlpZiAoYnRfZGV2ZW51bSgm
YnRfZGV2YWRkcl9tYXRjaCwgJmFyZykgPCAwKQorCQlyZXR1cm4gKDApOworCQorCWlmIChhcmcu
ZGV2bmFtZVswXSA9PSAnXDAnKSB7CisJCWVycm5vID0gRU5YSU87CisJCXJldHVybiAoMCk7CisJ
fQorCisJaWYgKGRldm5hbWUgIT0gTlVMTCkKKwkJc3RybGNweShkZXZuYW1lLCBhcmcuZGV2bmFt
ZSwgSENJX0RFVk5BTUVfU0laRSk7CisKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50Citi
dF9kZXZhZGRyX21hdGNoKGludCBzLCBzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQg
KmFyZykKK3sKKwlzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcJKm0gPSAoc3RydWN0IGJ0X2Rl
dmFkZHJfbWF0Y2hfYXJnICopYXJnOworCisJaWYgKCFiZGFkZHJfc2FtZSgmZGktPmJkYWRkciwg
bS0+YmRhZGRyKSkKKwkJcmV0dXJuICgwKTsKKworCXN0cmxjcHkobS0+ZGV2bmFtZSwgZGktPmRl
dm5hbWUsIHNpemVvZihtLT5kZXZuYW1lKSk7CisKKwlyZXR1cm4gKDEpOworfQorCkluZGV4OiBo
Y2kuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBoY2kuYwkocmV2aXNpb24gMCkKKysrIGhjaS5jCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIGhjaS5jCisgKi8KKworLyotCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDkgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+Cisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGJs
dWV0b290aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBjaGFyICogYnRf
ZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQgbm5sZW4p
OworCitpbnQKK2J0X2RldmluZm8oc3RydWN0IGJ0X2RldmluZm8gKmRpKQoreworCXVuaW9uIHsK
KwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdfbm9kZV9zdGF0ZQkJcjA7CisJCXN0cnVjdCBu
Z19idHNvY2tldF9oY2lfcmF3X25vZGVfYmRhZGRyCQlyMTsKKwkJc3RydWN0IG5nX2J0c29ja2V0
X2hjaV9yYXdfbm9kZV9mZWF0dXJlcwlyMjsKKwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdf
bm9kZV9idWZmZXIJCXIzOworCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX3N0YXQJ
CXI0OworCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX2xpbmtfcG9saWN5X21hc2sg
cjU7CisJCXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfcGFja2V0X21hc2sJcjY7CisJ
CXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfcm9sZV9zd2l0Y2gJcjc7CisJCXN0cnVj
dCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfZGVidWcJCXI4OworCX0JCQkJCQlycDsKKwlzdHJ1
Y3Qgc29ja2FkZHJfaGNpCQkJCWhhOworCWludAkJCQkJCXMsIHJ2YWw7CisKKwlpZiAoZGkgPT0g
TlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbWVtc2V0
KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJaGEuaGNpX2xlbiA9IHNpemVvZihoYSk7CisJaGEuaGNp
X2ZhbWlseSA9IEFGX0JMVUVUT09USDsKKworCWlmIChidF9hdG9uKGRpLT5kZXZuYW1lLCAmcnAu
cjEuYmRhZGRyKSkgeworCQlpZiAoIWJ0X2Rldm5hbWUoaGEuaGNpX25vZGUsICZycC5yMS5iZGFk
ZHIpKQorCQkJcmV0dXJuICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShkaS0+ZGV2bmFt
ZSwgaGEuaGNpX25vZGUsCisJCQkJCXNpemVvZihoYS5oY2lfbm9kZSkpID09IE5VTEwpIHsKKwkJ
ZXJybm8gPSBFTlhJTzsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcyA9IHNvY2tldChQRl9CTFVF
VE9PVEgsIFNPQ0tfUkFXLCBCTFVFVE9PVEhfUFJPVE9fSENJKTsKKwlpZiAocyA8IDApCisJCXJl
dHVybiAoLTEpOworCisJcnZhbCA9IC0xOworCisJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRk
ciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAorCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29j
a2FkZHIgKikgJmhhLCBzaXplb2YoaGEpKSA8IDApCisJCWdvdG8gYmFkOworCXN0cmxjcHkoZGkt
PmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2YoZGktPmRldm5hbWUpKTsKKworCWlmIChpb2N0
bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfU1RBVEUsICZycC5yMCwgc2l6ZW9mKHJwLnIwKSkg
PCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+c3RhdGUgPSBycC5yMC5zdGF0ZTsKKworCWlmIChpb2N0
bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfQkRBRERSLCAmcnAucjEsIHNpemVvZihycC5yMSkp
IDwgMCkKKwkJZ290byBiYWQ7CisJYmRhZGRyX2NvcHkoJmRpLT5iZGFkZHIsICZycC5yMS5iZGFk
ZHIpOworCQorCWlmIChpb2N0bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfRkVBVFVSRVMsICZy
cC5yMiwgc2l6ZW9mKHJwLnIyKSkgPCAwKQorCQlnb3RvIGJhZDsKKwltZW1jcHkoZGktPmZlYXR1
cmVzLCBycC5yMi5mZWF0dXJlcywgc2l6ZW9mKGRpLT5mZWF0dXJlcykpOworCisJaWYgKGlvY3Rs
KHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9CVUZGRVIsICZycC5yMywgc2l6ZW9mKHJwLnIzKSkg
PCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+Y21kX2ZyZWUgPSBycC5yMy5idWZmZXIuY21kX2ZyZWU7
CisJZGktPnNjb19zaXplID0gcnAucjMuYnVmZmVyLnNjb19zaXplOworCWRpLT5zY29fcGt0cyA9
IHJwLnIzLmJ1ZmZlci5zY29fcGt0czsKKwlkaS0+c2NvX2ZyZWUgPSBycC5yMy5idWZmZXIuc2Nv
X2ZyZWU7CisJZGktPmFjbF9zaXplID0gcnAucjMuYnVmZmVyLmFjbF9zaXplOworCWRpLT5hY2xf
cGt0cyA9IHJwLnIzLmJ1ZmZlci5hY2xfcGt0czsKKwlkaS0+YWNsX2ZyZWUgPSBycC5yMy5idWZm
ZXIuYWNsX2ZyZWU7CisKKwlpZiAoaW9jdGwocywgU0lPQ19IQ0lfUkFXX05PREVfR0VUX1NUQVQs
ICZycC5yNCwgc2l6ZW9mKHJwLnI0KSkgPCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+Y21kX3NlbnQg
PSBycC5yNC5zdGF0LmNtZF9zZW50OworCWRpLT5ldm50X3JlY3YgPSBycC5yNC5zdGF0LmV2bnRf
cmVjdjsKKwlkaS0+YWNsX3JlY3YgPSBycC5yNC5zdGF0LmFjbF9yZWN2OworCWRpLT5hY2xfc2Vu
dCA9IHJwLnI0LnN0YXQuYWNsX3NlbnQ7CisJZGktPnNjb19yZWN2ID0gcnAucjQuc3RhdC5zY29f
cmVjdjsKKwlkaS0+c2NvX3NlbnQgPSBycC5yNC5zdGF0LnNjb19zZW50OworCWRpLT5ieXRlc19y
ZWN2ID0gcnAucjQuc3RhdC5ieXRlc19yZWN2OworCWRpLT5ieXRlc19zZW50ID0gcnAucjQuc3Rh
dC5ieXRlc19zZW50OworCisJaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9MSU5L
X1BPTElDWV9NQVNLLAorCQkJJnJwLnI1LCBzaXplb2YocnAucjUpKSA8IDApCisJCWdvdG8gYmFk
OworCWRpLT5saW5rX3BvbGljeV9pbmZvID0gcnAucjUucG9saWN5X21hc2s7CisKKwlpZiAoaW9j
dGwocywgU0lPQ19IQ0lfUkFXX05PREVfR0VUX1BBQ0tFVF9NQVNLLAorCQkJJnJwLnI2LCBzaXpl
b2YocnAucjYpKSA8IDApCisJCWdvdG8gYmFkOworCWRpLT5wYWNrZXRfdHlwZV9pbmZvID0gcnAu
cjYucGFja2V0X21hc2s7CisKKwkgaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9S
T0xFX1NXSVRDSCwKKwkJCSZycC5yNywgc2l6ZW9mKHJwLnI3KSkgPCAwKQorCQlnb3RvIGJhZDsK
KwlkaS0+cm9sZV9zd2l0Y2hfaW5mbyA9IHJwLnI3LnJvbGVfc3dpdGNoOworCisJaWYgKGlvY3Rs
KHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9ERUJVRywgJnJwLnI4LCBzaXplb2YocnAucjgpKSA8
IDApCisJCWdvdG8gYmFkOworCWRpLT5kZWJ1ZyA9IHJwLnI4LmRlYnVnOworCisJcnZhbCA9IDA7
CitiYWQ6CisJY2xvc2Uocyk7CisKKwlyZXR1cm4gKHJ2YWwpOworfQorCitpbnQKK2J0X2RldmVu
dW0oYnRfZGV2ZW51bV9jYl90IGNiLCB2b2lkICphcmcpCit7CisJc3RydWN0IG5nX2J0c29ja2V0
X2hjaV9yYXdfbm9kZV9saXN0X25hbWVzCXJwOworCXN0cnVjdCBidF9kZXZpbmZvCQkJCWRpOwor
CXN0cnVjdCBzb2NrYWRkcl9oY2kJCQkJaGE7CisJaW50CQkJCQkJcywgaSwgY291bnQ7CisKKwly
cC5udW1fbmFtZXMgPSBIQ0lfREVWTUFYOworCXJwLm5hbWVzID0gKHN0cnVjdCBub2RlaW5mbyAq
KSBjYWxsb2MocnAubnVtX25hbWVzLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBub2RlaW5mbykpOwor
CWlmIChycC5uYW1lcyA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0x
KTsKKwl9CisKKwltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKKwloYS5oY2lfbGVuID0gc2l6
ZW9mKGhhKTsKKwloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOworCWhhLmhjaV9ub2RlWzBd
ID0gJ3gnOworCisJcyA9IHNvY2tldChQRl9CTFVFVE9PVEgsIFNPQ0tfUkFXLCBCTFVFVE9PVEhf
UFJPVE9fSENJKTsKKwlpZiAocyA8IDApIHsKKwkJZnJlZShycC5uYW1lcyk7CisKKwkJcmV0dXJu
ICgtMSk7CisJfQorCisJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVv
ZihoYSkpIDwgMCB8fAorCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBz
aXplb2YoaGEpKSA8IDAgfHwKKwkgICAgaW9jdGwocywgU0lPQ19IQ0lfUkFXX05PREVfTElTVF9O
QU1FUywgJnJwLCBzaXplb2YocnApKSA8IDApIHsKKwkJY2xvc2Uocyk7CisJCWZyZWUocnAubmFt
ZXMpOworCisJCXJldHVybiAoLTEpOworCX0KKworCWZvciAoY291bnQgPSAwLCBpID0gMDsgaSA8
IHJwLm51bV9uYW1lczsgaSArKykgeworCQlzdHJsY3B5KGRpLmRldm5hbWUsIHJwLm5hbWVzW2ld
Lm5hbWUsIHNpemVvZihkaS5kZXZuYW1lKSk7CisJCWlmIChidF9kZXZpbmZvKCZkaSkgPCAwKQor
CQkJY29udGludWU7CisKKwkJY291bnQgKys7CisKKwkJaWYgKGNiID09IE5VTEwpCisJCQljb250
aW51ZTsKKworCQlzdHJsY3B5KGhhLmhjaV9ub2RlLCBycC5uYW1lc1tpXS5uYW1lLCBzaXplb2Yo
aGEuaGNpX25vZGUpKTsKKwkJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNp
emVvZihoYSkpIDwgMCB8fAorCQkgICAgY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopICZo
YSwgc2l6ZW9mKGhhKSkgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCgqY2IpKHMsICZkaSwg
YXJnKSA+IDApCisJCQlicmVhazsKKwl9CisKKwljbG9zZSAocyk7CisJZnJlZShycC5uYW1lcyk7
CisKKwlyZXR1cm4gKGNvdW50KTsKK30KKworc3RhdGljIGNoYXIgKgorYnRfZGV2Mm5vZGUoY2hh
ciBjb25zdCAqZGV2bmFtZSwgY2hhciAqbm9kZW5hbWUsIGludCBubmxlbikKK3sKKwlzdGF0aWMg
Y2hhciBjb25zdCAqCSBidF9kZXZfcHJlZml4W10gPSB7CisJCSJidGNjYyIsCS8qIDNDb20gQmx1
ZXRvb3RoIFBDLUNBUkQgKi8KKwkJImg0IiwJCS8qIFVBUlQvc2VyaWFsIEJsdWV0b290aCBkZXZp
Y2VzICovCisJCSJ1YnQiLAkJLyogQmx1ZXRvb3RoIFVTQiBkZXZpY2VzICovCisJCU5VTEwJCS8q
IHNob3VsZCBiZSBsYXN0ICovCisJfTsKKworCXN0YXRpYyBjaGFyCQlfbm9kZW5hbWVbSENJX0RF
Vk5BTUVfU0laRV07CisJY2hhciBjb25zdAkJKipwOworCWNoYXIJCQkqZXA7CisJaW50CQkJcGxl
biwgdW5pdDsKKworCWlmIChub2RlbmFtZSA9PSBOVUxMKSB7CisJCW5vZGVuYW1lID0gX25vZGVu
YW1lOworCQlubmxlbiA9IEhDSV9ERVZOQU1FX1NJWkU7CisJfQorCisJZm9yIChwID0gYnRfZGV2
X3ByZWZpeDsgKnAgIT0gTlVMTDsgcCArKykgeworCQlwbGVuID0gc3RybGVuKCpwKTsKKwkJaWYg
KHN0cm5jbXAoZGV2bmFtZSwgKnAsIHBsZW4pICE9IDApCisJCQljb250aW51ZTsKKworCQl1bml0
ID0gc3RydG91bChkZXZuYW1lICsgcGxlbiwgJmVwLCAxMCk7CisJCWlmICgqZXAgIT0gJ1wwJyAm
JgorCQkgICAgc3RyY21wKGVwLCAiaGNpIikgIT0gMCAmJgorCQkgICAgc3RyY21wKGVwLCAibDJj
YXAiKSAhPSAwKQorCQkJcmV0dXJuIChOVUxMKTsJLyogY2FuJ3QgbWFrZSBzZW5zZSBvZiBkZXZp
Y2UgbmFtZSAqLworCisJCXNucHJpbnRmKG5vZGVuYW1lLCBubmxlbiwgIiVzJXVoY2kiLCAqcCwg
dW5pdCk7CisKKwkJcmV0dXJuIChub2RlbmFtZSk7CisJfQorCisJcmV0dXJuIChOVUxMKTsKK30K
KwpJbmRleDogYmx1ZXRvb3RoLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLjMJKHJldmlzaW9u
IDE4OTQxNCkKKysrIGJsdWV0b290aC4zCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot
LlwiIENvcHlyaWdodCAoYykgMjAwMyBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9v
LmNvbT4KKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOSBNYWtzaW0gWWV2bWVua2luIDxtX2V2
bWVua2luQHlhaG9vLmNvbT4KIC5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLlwiCiAuXCIgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yNSw3ICsyNSw3IEBACiAuXCIgJElkOiBibHVldG9vdGguMyx2IDEuNSAyMDAz
LzA1LzIwIDIzOjA0OjMwIG1heCBFeHAgJAogLlwiICRGcmVlQlNEJAogLlwiCi0uRGQgQXVndXN0
IDEzLCAyMDA4CisuRGQgRmVicnVhcnkgMTMsIDIwMDkKIC5EdCBCTFVFVE9PVEggMwogLk9zCiAu
U2ggTkFNRQpAQCAtNzQsNiArNzQsMTYgQEAKIC5GdCBjb25zdCBjaGFyICoKIC5GbiBidF9udG9h
ICJjb25zdCBiZGFkZHJfdCAqYmEiICJjaGFyICpzdHIiCiAuRnQgaW50CisuRm4gYnRfZGV2YWRk
ciAiY29uc3QgY2hhciAqZGV2bmFtZSIgImJkYWRkcl90ICphZGRyIgorLkZ0IGludAorLkZuIGJ0
X2Rldm5hbWUgImNoYXIgKmRldm5hbWUiICJjb25zdCBiZGFkZHJfdCAqYWRkciIKKy5GdCBpbnQK
Ky5GbiAoYnRfZGV2ZW51bV9jYl90KSAiaW50IHMiICJzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAq
ZGkiICJ2b2lkICphcmciCisuRnQgaW50CisuRm4gYnRfZGV2aW5mbyAic3RydWN0IGJ0X2Rldmlu
Zm8gKmRpIgorLkZ0IGludAorLkZuIGJ0X2RldmVudW0gImJ0X2RldmVudW1fY2JfdCAqY2IiICJ2
b2lkICphcmciCisuRnQgaW50CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICphIiAi
Y29uc3QgYmRhZGRyX3QgKmIiCiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRhZGRy
X3QgKmEiCkBAIC0xOTcsNiArMjA3LDExMCBAQAogSWYgbm8gYnVmZmVyIHdhcyBwcm92aWRlZCB0
aGVuIGludGVybmFsIHN0YXRpYyBidWZmZXIgd2lsbCBiZSB1c2VkLgogLlBwCiBUaGUKKy5GbiBi
dF9kZXZhZGRyCitmdW5jdGlvbiBpbnRlcnByZXRzIHRoZSBzcGVjaWZpZWQKKy5GYSBkZXZuYW1l
CitzdHJpbmcgYXMgdGhlIGFkZHJlc3Mgb3IgZGV2aWNlIG5hbWUgb2YgYSBCbHVldG9vdGggZGV2
aWNlIG9uIHRoZSBsb2NhbCBzeXN0ZW0sCithbmQgcGxhY2VzIHRoZSBkZXZpY2UgYWRkcmVzcyBp
biB0aGUgcHJvdmlkZWQKKy5GYSBiZGFkZHIgLAoraWYgYW55LgorVGhlIGZ1bmN0aW9uIHJldHVy
bnMgMSBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgaW50ZXJwcmV0ZWQsCitvciAwIGlm
IHRoZSBzdHJpbmcgZGlkIG5vdCBtYXRjaCBhbnkgbG9jYWwgZGV2aWNlLgorVGhlCisuRm4gYnRf
ZGV2bmFtZQorZnVuY3Rpb24gdGFrZXMgYSBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3MgYW5kIGNv
cGllcyB0aGUgbG9jYWwgZGV2aWNlCituYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGFkZHJlc3Mg
aW50byB0aGUgYnVmZmVyIHByb3ZpZGVkLAoraWYgYW55LgorQ2FsbGVyIG11c3QgZW5zdXJlIHRo
YXQgcHJvdmlkZWQgYnVmZmVyIGlzIGF0IGxlYXN0CisuRHYgSENJX0RFVk5BTUVfU0laRQorY2hh
cmFjdGVycyBpbiBzaXplLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIHRoZSBkZXZpY2Ug
d2FzIGZvdW5kLAorb3RoZXJ3aXNlIDAuCisuUHAKK1RoZQorLkZuIGJ0X2RldmluZm8KK2Z1bmN0
aW9uIHBvcHVsYXRlcyBwcm9kaXZkZWQKKy5WdCBidF9kZXZpbmZvCitzdHJ1Y3R1cmUgd2l0aCB0
aGUgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gQmx1ZXRvb3RoIGRldmljZS4KK1RoZSBjYWxsZXIg
aXMgZXhwZWN0ZWQgdG8gcGFzcyBCbHVldG9vdGggZGV2aWNlIG5hbWUgaW4gdGhlCisuRmEgZGV2
bmFtZQorZmllbGQgb2YgdGhlIHBhc3NlZAorLlZ0IGJ0X2RldmluZm8KK3N0cnVjdHVyZS4KK1Ro
ZSBmdW5jdGlvbiByZXR1cm5zIDAgd2hlbiBzdWNjZXNzZnVsLAorb3RoZXJ3aXNlIC0xLgorVGhl
CisuVnQgYnRfZGV2aW5mbworc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93cworLkJkIC1s
aXRlcmFsIC1vZmZzZXQgaW5kZW50CitzdHJ1Y3QgYnRfZGV2aW5mbworeworICAgICAgICBjaGFy
ICAgICAgICAgICAgZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsKKworICAgICAgICB1aW50MzJf
dCAgICAgICAgc3RhdGU7CisKKyAgICAgICAgYmRhZGRyX3QgICAgICAgIGJkYWRkcjsKKyAgICAg
ICAgdWludDE2X3QgICAgICAgIF9yZXNlcnZlZDA7CisKKyAgICAgICAgdWludDhfdCAgICAgICAg
IGZlYXR1cmVzW0hDSV9ERVZGRUFUVVJFU19TSVpFXTsKKworICAgICAgICAvKiBidWZmZXIgaW5m
byAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgX3Jlc2VydmVkMTsKKyAgICAgICAgdWludDE2
X3QgICAgICAgIGNtZF9mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgc2NvX3NpemU7Cisg
ICAgICAgIHVpbnQxNl90ICAgICAgICBzY29fcGt0czsKKyAgICAgICAgdWludDE2X3QgICAgICAg
IHNjb19mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgYWNsX3NpemU7CisgICAgICAgIHVp
bnQxNl90ICAgICAgICBhY2xfcGt0czsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGFjbF9mcmVl
OworCisgICAgICAgIC8qIHN0YXRzICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICBjbWRfc2Vu
dDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGV2bnRfcmVjdjsKKyAgICAgICAgdWludDMyX3Qg
ICAgICAgIGFjbF9yZWN2OworICAgICAgICB1aW50MzJfdCAgICAgICAgYWNsX3NlbnQ7CisgICAg
ICAgIHVpbnQzMl90ICAgICAgICBzY29fcmVjdjsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHNj
b19zZW50OworICAgICAgICB1aW50MzJfdCAgICAgICAgYnl0ZXNfcmVjdjsKKyAgICAgICAgdWlu
dDMyX3QgICAgICAgIGJ5dGVzX3NlbnQ7CisKKyAgICAgICAgLyogbWlzYy9zcGVjaWZpYyAqLwor
ICAgICAgICB1aW50MTZfdCAgICAgICAgbGlua19wb2xpY3lfaW5mbzsKKyAgICAgICAgdWludDE2
X3QgICAgICAgIHBhY2tldF90eXBlX2luZm87CisgICAgICAgIHVpbnQxNl90ICAgICAgICByb2xl
X3N3aXRjaF9pbmZvOworICAgICAgICB1aW50MTZfdCAgICAgICAgZGVidWc7CisKKyAgICAgICAg
dWludDhfdCAgICAgICAgIF9wYWRkaW5nWzIwXTsKK307CisuRWQKKy5QcAorVGhlCisuRm4gYnRf
ZGV2ZW51bQorZnVuY3Rpb24gZW51bWVyYXRlcyBCbHVldG9vdGggZGV2aWNlcyBwcmVzZW50IGlu
IHRoZSBzeXN0ZW0uCitGb3IgZXZlcnkgZGV2aWNlIGZvdW5kLAordGhlIGZ1bmN0aW9uIHdpbGwg
Y2FsbCBwcm92aWRlZAorLkZhIGNiCitjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBzaG91bGQgYmUg
b2YKKy5WdCBidF9kZXZlbnVtX2NiX3QKK3R5cGUuCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMg
cGFzc2VkIGEKKy5EdiBIQ0kKK3NvY2tldAorLkZhIHMgLAorZnVsbHkgcG9wdWxhdGVkCisuVnQg
YnRfZGV2aW5mbworc3RydWN0dXJlCisuRmEgZGkKK2FuZAorLkZhIGFyZworYXJndW1lbnQgcHJv
dmlkZWQgdG8gdGhlCisuRm4gYnRfZGV2ZW51bSAuCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gY2Fu
IHN0b3AgZW51bWVyYXRpb24gYnkgcmV0dXJuaW5nIGEgdmFsdWUKK3RoYXQgaXMgZ3JlYXRlciB0
aGFuIHplcm8uCitUaGUgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGVu
dW1lcmF0ZWQgZGV2aWNlcywKK29yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorLlBwCitUaGUK
IC5GbiBiZGFkZHJfc2FtZSAsCiAuRm4gYmRhZGRyX2FueQogYW5kCkBAIC0yODcsNyArNDAxLDgg
QEAKIC5YciBnZXRwcm90b2J5bnVtYmVyIDMgLAogLlhyIGhlcnJvciAzICwKIC5YciBpbmV0X2F0
b24gMyAsCi0uWHIgaW5ldF9udG9hIDMKKy5YciBpbmV0X250b2EgMyAsCisuWHIgbmdfaGNpIDQK
IC5TaCBDQVZFQVQKIFRoZQogLkZuIGJ0X2dldGhvc3RlbnQKQEAgLTMxMiw2ICs0MjcsMjAgQEAK
IGZ1bmN0aW9uIG9wZW5zIGFuZC9vciByZXdpbmRzIHRoZQogLlBhIC9ldGMvYmx1ZXRvb3RoL3By
b3RvY29scwogZmlsZS4KKy5QcAorVGhlCisuRm4gYnRfZGV2ZW51bQorZnVuY3Rpb24gZW51bWVy
YXRlcyB1cCB0bworLkR2IEhDSV9ERVZNQVgKK0JsdWV0b290aCBkZXZpY2VzLgorRHVyaW5nIGVu
dW1lcmF0aW9uIHRoZQorLkZuIGJ0X2RldmVudW0KK2Z1bmN0aW9uIHVzZXMgdGhlIHNhbWUKKy5E
diBIQ0kKK3NvY2tldC4KK1RoZSBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgdGhlIHNvY2tldCwK
K3Bhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sCit3aWxsIGJlIGJvdW5kIGFuZCBjb25u
ZWN0ZWQgdG8gdGhlIEJsdWV0b290aCBkZXZpY2UgYmVpbmcgZW51bWVyYXRlZC4KIC5TaCBBVVRI
T1JTCiAuQW4gTWFrc2ltIFlldm1lbmtpbiBBcSBtX2V2bWVua2luQHlhaG9vLmNvbQogLlNoIEJV
R1MKSW5kZXg6IGJsdWV0b290aC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJsdWV0b290aC5jCShyZXZpc2lv
biAxODk0MTQpCisrKyBibHVldG9vdGguYwkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDkgQEAK
IC8qCiAgKiBibHVldG9vdGguYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIE1ha3Np
bSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28uY29tPgorICovCisKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDAxLTIwMDkgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+
CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApJbmRleDogYmx1ZXRv
b3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLmgJKHJldmlzaW9uIDE4OTQxNCkKKysrIGJs
dWV0b290aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsOSBAQAogLyoKICAqIGJsdWV0b290
aC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgTWFrc2ltIFlldm1lbmtpbiA8bV9l
dm1lbmtpbkB5YWhvby5jb20+CisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAw
OSBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9vLmNvbT4KICAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNSw5ICszNywxMiBAQAogI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9iaXRzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMv
ZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5o
PgogI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bmV0
ZGIuaD4KKyNpbmNsdWRlIDxuZXRncmFwaC9uZ19tZXNzYWdlLmg+CiAjaW5jbHVkZSA8bmV0Z3Jh
cGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfaGNpLmg+CiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRv
b3RoL2luY2x1ZGUvbmdfbDJjYXAuaD4KICNpbmNsdWRlIDxuZXRncmFwaC9ibHVldG9vdGgvaW5j
bHVkZS9uZ19idHNvY2tldC5oPgpAQCAtNzIsNiArNzcsNjMgQEAKIGNoYXIgY29uc3QgKiAgICAg
IGJ0X250b2EgICAgICAgICAgICAgKGJkYWRkcl90IGNvbnN0ICpiYSwgY2hhciAqc3RyKTsKIGlu
dCAgICAgICAgICAgICAgIGJ0X2F0b24gICAgICAgICAgICAgKGNoYXIgY29uc3QgKnN0ciwgYmRh
ZGRyX3QgKmJhKTsKIAorLyogYnRfZGV2WFhYWCgpIGZ1bmN0aW9ucyAoaW5zcGlyZWQgYnkgTmV0
QlNEKSAqLworaW50ICAgICAgICAgICAgICAgYnRfZGV2YWRkciAgICAgICAgICAoY2hhciBjb25z
dCAqZGV2bmFtZSwgYmRhZGRyX3QgKmFkZHIpOworaW50ICAgICAgICAgICAgICAgYnRfZGV2bmFt
ZSAgICAgICAgICAoY2hhciAqZGV2bmFtZSwgYmRhZGRyX3QgY29uc3QgKmFkZHIpOworCisvKiAK
KyAqIEJsdWV0b290aCBIQ0kgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZQlIQ0lfREVWTUFYCQkJ
MzIJCS8qIGFyYml0cmFyeSAqLworI2RlZmluZQlIQ0lfREVWTkFNRV9TSVpFCQlOR19OT0RFU0la
CisjZGVmaW5lCUhDSV9ERVZGRUFUVVJFU19TSVpFCQlOR19IQ0lfRkVBVFVSRVNfU0laRQorCitz
dHJ1Y3QgYnRfZGV2aW5mbworeworCWNoYXIJCWRldm5hbWVbSENJX0RFVk5BTUVfU0laRV07CisK
Kwl1aW50MzJfdAlzdGF0ZTsJCS8qIGRldmljZS9pbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyAqLwor
CisJYmRhZGRyX3QJYmRhZGRyOworCXVpbnQxNl90CV9yZXNlcnZlZDA7CisKKwl1aW50OF90CQlm
ZWF0dXJlc1tIQ0lfREVWRkVBVFVSRVNfU0laRV07CisKKwkvKiBidWZmZXIgaW5mbyAqLworCXVp
bnQxNl90CV9yZXNlcnZlZDE7CisJdWludDE2X3QJY21kX2ZyZWU7CisJdWludDE2X3QJc2NvX3Np
emU7CisJdWludDE2X3QJc2NvX3BrdHM7CisJdWludDE2X3QJc2NvX2ZyZWU7CisJdWludDE2X3QJ
YWNsX3NpemU7CisJdWludDE2X3QJYWNsX3BrdHM7CisJdWludDE2X3QJYWNsX2ZyZWU7CisKKwkv
KiBzdGF0cyAqLworCXVpbnQzMl90CWNtZF9zZW50OworCXVpbnQzMl90CWV2bnRfcmVjdjsKKwl1
aW50MzJfdAlhY2xfcmVjdjsKKwl1aW50MzJfdAlhY2xfc2VudDsKKwl1aW50MzJfdAlzY29fcmVj
djsKKwl1aW50MzJfdAlzY29fc2VudDsKKwl1aW50MzJfdAlieXRlc19yZWN2OworCXVpbnQzMl90
CWJ5dGVzX3NlbnQ7CisKKwkvKiBtaXNjL3NwZWNpZmljICovCisJdWludDE2X3QJbGlua19wb2xp
Y3lfaW5mbzsKKwl1aW50MTZfdAlwYWNrZXRfdHlwZV9pbmZvOworCXVpbnQxNl90CXJvbGVfc3dp
dGNoX2luZm87CisJdWludDE2X3QJZGVidWc7CisKKwl1aW50OF90CQlfcGFkZGluZ1syMF07CS8q
IGxlYXZlIHNwYWNlIGZvciBmdXR1cmUgYWRkaXRpb25zICovCit9OworCit0eXBlZGVmIGludAko
YnRfZGV2ZW51bV9jYl90KShpbnQsIHN0cnVjdCBidF9kZXZpbmZvIGNvbnN0ICosIHZvaWQgKik7
CisKK2ludAkJYnRfZGV2aW5mbyAoc3RydWN0IGJ0X2RldmluZm8gKmRpKTsKK2ludAkJYnRfZGV2
ZW51bSAoYnRfZGV2ZW51bV9jYl90ICpjYiwgdm9pZCAqYXJnKTsKKwogLyoKICAqIGJkYWRkciB1
dGlsaXR5IGZ1bmN0aW9ucyAoZnJvbSBOZXRCU0QpCiAgKi8KSW5kZXg6IE1ha2VmaWxlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIE1ha2VmaWxlCShyZXZpc2lvbiAxODk0MTQpCisrKyBNYWtlZmlsZQkod29ya2lu
ZyBjb3B5KQpAQCAtOSw3ICs5LDcgQEAKIAogU0hMSUJfTUFKT1I9CTMKIAotU1JDUz0JCWJsdWV0
b290aC5jCitTUkNTPQkJYmx1ZXRvb3RoLmMgZGV2LmMgaGNpLmMKIElOQ1M9CQlibHVldG9vdGgu
aAogCiBNTElOS1MrPQlibHVldG9vdGguMyBidF9nZXRob3N0YnluYW1lLjMKQEAgLTI3LDYgKzI3
LDEyIEBACiBNTElOS1MrPQlibHVldG9vdGguMyBidF9udG9hLjMKIE1MSU5LUys9CWJsdWV0b290
aC4zIGJ0X2F0b24uMwogCitNTElOS1MrPQlibHVldG9vdGguMyBidF9kZXZhZGRyLjMKK01MSU5L
Uys9CWJsdWV0b290aC4zIGJ0X2Rldm5hbWUuMworCitNTElOS1MrPQlibHVldG9vdGguMyBidF9k
ZXZpbmZvLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmVudW0uMworCiBNTElOS1MrPQli
bHVldG9vdGguMyBiZGFkZHJfc2FtZS4zCiBNTElOS1MrPQlibHVldG9vdGguMyBiZGFkZHJfYW55
LjMKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9jb3B5LjMK
--00504502c8e6d17e0904646720df--



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