Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Sep 2011 09:16:44 +0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        Yin <paradyse@gmail.com>
Cc:        freebsd-wireless@freebsd.org
Subject:   [patch] Fix TBTT, TSF handling for TDMA on AR5416 and later chips
Message-ID:  <CAJ-Vmok9n3Gh-Uiuaqh8Q6XOgOkeg_sKBKh1MqVXMQTkNTm42A@mail.gmail.com>

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

Hi Yin, all;

I've done a bit of tidying up of Yin's TDMA related cleanups.

In particular, I've added a new capability (HAL_CAP_LONG_RXDESC_TSF)
which the AR5416 and later chips set. This indicates the received TSF
is 32 bits rather than 15 bits.

Yin, would you mind testing this in your local setup and make sure it
works the same as your patch? I'll submit it for inclusion into -HEAD
/ 9.0 if it does.

Thanks again for your great work!



adrian

--20cf30434baa8caef804ac4fb2ef
Content-Type: application/octet-stream; name="ar5416-tbtt-tsf-fixes.diff"
Content-Disposition: attachment; filename="ar5416-tbtt-tsf-fixes.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gs9mb2q60

SW5kZXg6IHN5cy9kZXYvYXRoL2lmX2F0aHZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvYXRo
L2lmX2F0aHZhci5oCShyZXZpc2lvbiAyMjUxNDMpCisrKyBzeXMvZGV2L2F0aC9pZl9hdGh2YXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDcgKzI1NSw4IEBACiAJCQkJc2Nfc2V0Y2NhICAgOiAx
LC8qIHNldC9jbHIgQ0NBIHdpdGggVERNQSAqLwogCQkJCXNjX3Jlc2V0Y2FsIDogMSwvKiByZXNl
dCBjYWwgc3RhdGUgbmV4dCB0cmlwICovCiAJCQkJc2NfcnhzbGluayAgOiAxLC8qIGRvIHNlbGYt
bGlua2VkIGZpbmFsIGRlc2NyaXB0b3IgKi8KLQkJCQlzY19raWNrcGN1ICA6IDE7Lyoga2ljayBQ
Q1UgUlggb24gbmV4dCBSWCBwcm9jICovCisJCQkJc2Nfa2lja3BjdSAgOiAxLC8qIGtpY2sgUENV
IFJYIG9uIG5leHQgUlggcHJvYyAqLworCQkJCXNjX3J4dHNmMzIgIDogMTsvKiBSWCBkZWMgVFNG
IGlzIDMyIGJpdHMgKi8KIAl1aW50MzJfdAkJc2NfZWVyZDsJLyogcmVnZG9tYWluIGZyb20gRUVQ
Uk9NICovCiAJdWludDMyX3QJCXNjX2VlY2M7CS8qIGNvdW50cnkgY29kZSBmcm9tIEVFUFJPTSAq
LwogCQkJCQkJLyogcmF0ZSB0YWJsZXMgKi8KQEAgLTQ4Miw2ICs0ODMsOCBAQAogCSgoKihfYWgp
LT5haF9zZXRCZWFjb25UaW1lcnMpKChfYWgpLCAoX2J0KSkpCiAjZGVmaW5lCWF0aF9oYWxfYmVh
Y29udGltZXJzKF9haCwgX2JzKSBcCiAJKCgqKF9haCktPmFoX3NldFN0YXRpb25CZWFjb25UaW1l
cnMpKChfYWgpLCAoX2JzKSkpCisjZGVmaW5lCWF0aF9oYWxfZ2V0bmV4dHRidHQoX2FoKSBcCisJ
KCgqKF9haCktPmFoX2dldE5leHRUQlRUKSgoX2FoKSkpCiAjZGVmaW5lCWF0aF9oYWxfc2V0YXNz
b2NpZChfYWgsIF9ic3MsIF9hc3NvY2lkKSBcCiAJKCgqKF9haCktPmFoX3dyaXRlQXNzb2NpZCko
KF9haCksIChfYnNzKSwgKF9hc3NvY2lkKSkpCiAjZGVmaW5lCWF0aF9oYWxfcGh5ZGlzYWJsZShf
YWgpIFwKQEAgLTY1Nyw2ICs2NjAsOCBAQAogCShhdGhfaGFsX2dldGNhcGFiaWxpdHkoX2FoLCBI
QUxfQ0FQX1JYREVTQ19TRUxGTElOSywgMCwgTlVMTCkgPT0gSEFMX09LKQogI2RlZmluZQlhdGhf
aGFsX2d0eHRvX3N1cHBvcnRlZChfYWgpIFwKIAkoYXRoX2hhbF9nZXRjYXBhYmlsaXR5KF9haCwg
SEFMX0NBUF9HVFhUTywgMCwgTlVMTCkgPT0gSEFMX09LKQorI2RlZmluZQlhdGhfaGFsX2hhc19s
b25nX3J4ZGVzY190c2YoX2FoKSBcCisJKGF0aF9oYWxfZ2V0Y2FwYWJpbGl0eShfYWgsIEhBTF9D
QVBfTE9OR19SWERFU0NfVFNGLCAwLCBOVUxMKSA9PSBIQUxfT0spCiAKICNkZWZpbmUJYXRoX2hh
bF9zZXR1cHJ4ZGVzYyhfYWgsIF9kcywgX3NpemUsIF9pbnRyZXEpIFwKIAkoKCooX2FoKS0+YWhf
c2V0dXBSeERlc2MpKChfYWgpLCAoX2RzKSwgKF9zaXplKSwgKF9pbnRyZXEpKSkKSW5kZXg6IHN5
cy9kZXYvYXRoL2F0aF9oYWwvYXI1NDE2L2FyNTQxNl9hdHRhY2guYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
eXMvZGV2L2F0aC9hdGhfaGFsL2FyNTQxNi9hcjU0MTZfYXR0YWNoLmMJKHJldmlzaW9uIDIyNTE0
MykKKysrIHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1NDE2L2FyNTQxNl9hdHRhY2guYwkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw3IEBACiAJYWgtPmFoX2dwaW9HZXQJCQk9IGFyNTQxNkdw
aW9HZXQ7CiAJYWgtPmFoX2dwaW9TZXQJCQk9IGFyNTQxNkdwaW9TZXQ7CiAJYWgtPmFoX2dwaW9T
ZXRJbnRyCQk9IGFyNTQxNkdwaW9TZXRJbnRyOworCWFoLT5haF9nZXRUc2Y2NAkJCT0gYXI1NDE2
R2V0VHNmNjQ7CiAJYWgtPmFoX3Jlc2V0VHNmCQkJPSBhcjU0MTZSZXNldFRzZjsKIAlhaC0+YWhf
Z2V0UmZHYWluCQk9IGFyNTQxNkdldFJmZ2FpbjsKIAlhaC0+YWhfc2V0QW50ZW5uYVN3aXRjaAkJ
PSBhcjU0MTZTZXRBbnRlbm5hU3dpdGNoOwpAQCAtMTYwLDYgKzE2MSw3IEBACiAJYWgtPmFoX2Jl
YWNvbkluaXQJCT0gYXI1NDE2QmVhY29uSW5pdDsKIAlhaC0+YWhfc2V0U3RhdGlvbkJlYWNvblRp
bWVycwk9IGFyNTQxNlNldFN0YUJlYWNvblRpbWVyczsKIAlhaC0+YWhfcmVzZXRTdGF0aW9uQmVh
Y29uVGltZXJzCT0gYXI1NDE2UmVzZXRTdGFCZWFjb25UaW1lcnM7CisJYWgtPmFoX2dldE5leHRU
QlRUCQk9IGFyNTQxNkdldE5leHRUQlRUOwogCiAJLyogODAyLjExbiBGdW5jdGlvbnMgKi8KIAlh
aC0+YWhfY2hhaW5UeERlc2MJCT0gYXI1NDE2Q2hhaW5UeERlc2M7CkBAIC04ODgsNiArODkwLDgg
QEAKIAlwQ2FwLT5oYWxHVFRTdXBwb3J0ID0gQUhfVFJVRTsKIAlwQ2FwLT5oYWxDU1RTdXBwb3J0
ID0gQUhfVFJVRTsKIAlwQ2FwLT5oYWxFbmhhbmNlZERmc1N1cHBvcnQgPSBBSF9GQUxTRTsKKwkv
KiBIYXJkd2FyZSBzdXBwb3J0cyAzMiBiaXQgVFNGIHZhbHVlcyBpbiB0aGUgUlggZGVzY3JpcHRv
ciAqLworCXBDYXAtPmhhbEhhc0xvbmdSeERlc2NUc2YgPSBBSF9UUlVFOwogCiAJaWYgKGF0aF9o
YWxfZWVwcm9tR2V0RmxhZyhhaCwgQVJfRUVQX1JGS0lMTCkgJiYKIAkgICAgYXRoX2hhbF9lZXBy
b21HZXQoYWgsIEFSX0VFUF9SRlNJTEVOVCwgJmFocHJpdi0+YWhfcmZzaWxlbnQpID09IEhBTF9P
SykgewpJbmRleDogc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjU0MTYvYXI1NDE2X3Jlc2V0LmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjU0MTYvYXI1NDE2X3Jlc2V0LmMJKHJl
dmlzaW9uIDIyNTE0MykKKysrIHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1NDE2L2FyNTQxNl9yZXNl
dC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkvKiBGb3IgY2hpcHMgb24g
d2hpY2ggdGhlIFJUQyByZXNldCBpcyBkb25lLCBzYXZlIFRTRiBiZWZvcmUgaXQgZ2V0cyBjbGVh
cmVkICovCiAJaWYgKEFSX1NSRVZfSE9XTChhaCkgfHwKIAkgICAgKEFSX1NSRVZfTUVSTElOKGFo
KSAmJiBhdGhfaGFsX2VlcHJvbUdldEZsYWcoYWgsIEFSX0VFUF9PTF9QV1JDVFJMKSkpCi0JCXRz
ZiA9IGFyNTIxMkdldFRzZjY0KGFoKTsKKwkJdHNmID0gYXI1NDE2R2V0VHNmNjQoYWgpOwogCiAJ
LyogTWFyayBQSFkgYXMgaW5hY3RpdmU7IG1hcmtlZCBhY3RpdmUgaW4gYXI1NDE2SW5pdEJCKCkg
Ki8KIAlhcjU0MTZNYXJrUGh5SW5hY3RpdmUoYWgpOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIAkv
KiBSZXN0b3JlIFRTRiAqLwogCWlmICh0c2YpCi0JCWFyNTIxMlNldFRzZjY0KGFoLCB0c2YpOwor
CQlhcjU0MTZTZXRUc2Y2NChhaCwgdHNmKTsKIAogCU9TX01BUksoYWgsIEFIX01BUktfUkVTRVRf
TElORSwgX19MSU5FX18pOwogCWlmIChBUl9TUkVWX01FUkxJTl8xMF9PUl9MQVRFUihhaCkpCkBA
IC0xOTIsOSArMTkyLDkgQEAKIAkgKiB2YWx1ZSBhZnRlciB0aGUgaW5pdHZhbHMgaGF2ZSBiZWVu
IGFwcGxpZWQsIHdpdGggYW4gb2Zmc2V0CiAJICogYmFzZWQgb24gbWVhc3VyZWQgdGltZSBkaWZm
ZXJlbmNlCiAJICovCi0JaWYgKEFSX1NSRVZfSE9XTChhaCkgJiYgKGFyNTIxMkdldFRzZjY0KGFo
KSA8IHRzZikpIHsKKwlpZiAoQVJfU1JFVl9IT1dMKGFoKSAmJiAoYXI1NDE2R2V0VHNmNjQoYWgp
IDwgdHNmKSkgewogCQl0c2YgKz0gMTUwMDsKLQkJYXI1MjEyU2V0VHNmNjQoYWgsIHRzZik7CisJ
CWFyNTQxNlNldFRzZjY0KGFoLCB0c2YpOwogCX0KIAogCUhBTERFQlVHKGFoLCBIQUxfREVCVUdf
UkVTRVQsICI+Pj4yICVzOiBBUl9QSFlfREFHX0NUUkxDQ0s9MHgleFxuIiwKQEAgLTM2NCw4ICsz
NjQsNyBAQAogCU9TX1JFR19STVdfRklFTEQoYWgsIEFSX1JJTVQsIEFSX1JJTVRfRklSU1QsIDIw
MDApOwogCU9TX1JFR19STVdfRklFTEQoYWgsIEFSX1RJTVQsIEFSX1RJTVRfTEFTVCwgMzAwKTsK
IAlPU19SRUdfUk1XX0ZJRUxEKGFoLCBBUl9USU1ULCBBUl9USU1UX0ZJUlNULCA3NTApOwotI2Vu
ZGlmCSAgICAKLQkKKyNlbmRpZgogCWFyNTQxNkluaXRCQihhaCwgY2hhbik7CiAKIAkvKiBTZXR1
cCBjb21wcmVzc2lvbiByZWdpc3RlcnMgKi8KQEAgLTUwMyw3ICs1MDIsNyBAQAogCQljaGFuLT5p
Y19zdGF0ZSAmPSB+SUVFRTgwMjExX0NIQU5TVEFURV9DV0lOVDsKIAogCWljaGFuLT5jaGFubmVs
X3RpbWUgPSAwOwotCWljaGFuLT50c2ZfbGFzdCA9IGFyNTIxMkdldFRzZjY0KGFoKTsKKwlpY2hh
bi0+dHNmX2xhc3QgPSBhcjU0MTZHZXRUc2Y2NChhaCk7CiAJYXI1MjEyVHhFbmFibGUoYWgsIEFI
X1RSVUUpOwogCXJldHVybiBBSF9UUlVFOwogfQpJbmRleDogc3lzL2Rldi9hdGgvYXRoX2hhbC9h
cjU0MTYvYXI1NDE2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjU0MTYv
YXI1NDE2LmgJKHJldmlzaW9uIDIyNTE0MykKKysrIHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1NDE2
L2FyNTQxNi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDcgQEAKIGV4dGVybgl2b2lk
IGFyNTQxNlJlc2V0U3RhQmVhY29uVGltZXJzKHN0cnVjdCBhdGhfaGFsICphaCk7CiBleHRlcm4J
dm9pZCBhcjU0MTZTZXRTdGFCZWFjb25UaW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAogCQljb25z
dCBIQUxfQkVBQ09OX1NUQVRFICopOworZXh0ZXJuCXVpbnQ2NF90IGFyNTQxNkdldE5leHRUQlRU
KHN0cnVjdCBhdGhfaGFsICopOwogCiBleHRlcm4JSEFMX0JPT0wgYXI1NDE2RWVwcm9tUmVhZChz
dHJ1Y3QgYXRoX2hhbCAqLCB1X2ludCBvZmYsIHVpbnQxNl90ICpkYXRhKTsKIGV4dGVybglIQUxf
Qk9PTCBhcjU0MTZFZXByb21Xcml0ZShzdHJ1Y3QgYXRoX2hhbCAqLCB1X2ludCBvZmYsIHVpbnQx
Nl90IGRhdGEpOwpAQCAtMTg2LDYgKzE4Nyw4IEBACiAKIGV4dGVybgl1X2ludCBhcjU0MTZHZXRX
aXJlbGVzc01vZGVzKHN0cnVjdCBhdGhfaGFsICphaCk7CiBleHRlcm4Jdm9pZCBhcjU0MTZTZXRM
ZWRTdGF0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIEhBTF9MRURfU1RBVEUgc3RhdGUpOworZXh0ZXJu
CXVpbnQ2NF90IGFyNTQxNkdldFRzZjY0KHN0cnVjdCBhdGhfaGFsICphaCk7CitleHRlcm4Jdm9p
ZCBhcjU0MTZTZXRUc2Y2NChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHVpbnQ2NF90IHRzZjY0KTsKIGV4
dGVybgl2b2lkIGFyNTQxNlJlc2V0VHNmKHN0cnVjdCBhdGhfaGFsICphaCk7CiBleHRlcm4JSEFM
X0JPT0wgYXI1NDE2U2V0QW50ZW5uYVN3aXRjaChzdHJ1Y3QgYXRoX2hhbCAqLCBIQUxfQU5UX1NF
VFRJTkcpOwogZXh0ZXJuCUhBTF9CT09MIGFyNTQxNlNldERlY29tcE1hc2soc3RydWN0IGF0aF9o
YWwgKiwgdWludDE2X3QsIGludCk7CkluZGV4OiBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTQxNi9h
cjU0MTZfYmVhY29uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjU0MTYv
YXI1NDE2X2JlYWNvbi5jCShyZXZpc2lvbiAyMjUxNDMpCisrKyBzeXMvZGV2L2F0aC9hdGhfaGFs
L2FyNTQxNi9hcjU0MTZfYmVhY29uLmMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDE1IEBA
CiAjZGVmaW5lCU9ORV9FSUdIVEhfVFVfVE9fVVNFQyhfdHU4KQkoKF90dTgpIDw8IDcpCiAKIC8q
CisgKiBSZXR1cm4gdGhlIGhhcmR3YXJlIE5leHRUQlRUIGluIFRTRgorICovCit1aW50NjRfdAor
YXI1NDE2R2V0TmV4dFRCVFQoc3RydWN0IGF0aF9oYWwgKmFoKQoreworCXJldHVybiBPU19SRUdf
UkVBRChhaCwgQVJfTkVYVF9UQlRUKTsKK30KKworLyoKICAqIEluaXRpYWxpemUgYWxsIG9mIHRo
ZSBoYXJkd2FyZSByZWdpc3RlcnMgdXNlZCB0bwogICogc2VuZCBiZWFjb25zLiAgTm90ZSB0aGF0
IGZvciBzdGF0aW9uIG9wZXJhdGlvbiB0aGUKICAqIGRyaXZlciBjYWxscyBhcjU0MTZTZXRTdGFC
ZWFjb25UaW1lcnMgaW5zdGVhZC4KSW5kZXg6IHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1NDE2L2Fy
NTQxNl9taXNjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjU0MTYvYXI1
NDE2X21pc2MuYwkocmV2aXNpb24gMjI1MTQzKQorKysgc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjU0
MTYvYXI1NDE2X21pc2MuYwkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNDEgQEAKIH0KIAog
LyoKKyAqIEdldCB0aGUgY3VycmVudCBoYXJkd2FyZSB0c2YgZm9yIHN0YW1sbWUKKyAqLwordWlu
dDY0X3QKK2FyNTQxNkdldFRzZjY0KHN0cnVjdCBhdGhfaGFsICphaCkKK3sKKwl1aW50MzJfdCBs
b3cxLCBsb3cyLCB1MzI7CisKKwkvKiBzeW5jIG11bHRpLXdvcmQgcmVhZCAqLworCWxvdzEgPSBP
U19SRUdfUkVBRChhaCwgQVJfVFNGX0wzMik7CisJdTMyID0gT1NfUkVHX1JFQUQoYWgsIEFSX1RT
Rl9VMzIpOworCWxvdzIgPSBPU19SRUdfUkVBRChhaCwgQVJfVFNGX0wzMik7CisJaWYgKGxvdzIg
PCBsb3cxKSB7CS8qIHJvbGwgb3ZlciAqLworCQkvKgorCQkgKiBJZiB3ZSBhcmUgbm90IHByZWVt
cHRlZCB0aGlzIHdpbGwgd29yay4gIElmIHdlIGFyZQorCQkgKiB0aGVuIHdlIHJlLXJlYWRpbmcg
QVJfVFNGX1UzMiBkb2VzIG5vIGdvb2QgYXMgdGhlCisJCSAqIGxvdyBiaXRzIHdpbGwgYmUgbWVh
bmluZ2xlc3MuICBMaWtld2lzZSByZWFkaW5nCisJCSAqIEwzMiwgVTMyLCBVMzIsIHRoZW4gY29t
cGFyaW5nIHRoZSBsYXN0IHR3byByZWFkcworCQkgKiB0byBjaGVjayBmb3Igcm9sbG92ZXIgZG9l
c24ndCBoZWxwIGlmIHByZWVtcHRlZC0tc28KKwkJICogd2UgdGFrZSB0aGlzIGFwcHJvYWNoIGFz
IGl0IGNvc3RzIG9uZSBsZXNzIFBDSSByZWFkCisJCSAqIHdoaWNoIGNhbiBiZSBub3RpY2VhYmxl
IHdoZW4gZG9pbmcgdGhpbmdzIGxpa2UKKwkJICogdGltZXN0YW1waW5nIHBhY2tldHMgaW4gbW9u
aXRvciBtb2RlLgorCQkgKi8KKwkJdTMyKys7CisJfQorCXJldHVybiAoKCh1aW50NjRfdCkgdTMy
KSA8PCAzMikgfCAoKHVpbnQ2NF90KSBsb3cyKTsKK30KKwordm9pZAorYXI1NDE2U2V0VHNmNjQo
c3RydWN0IGF0aF9oYWwgKmFoLCB1aW50NjRfdCB0c2Y2NCkKK3sKKwlPU19SRUdfV1JJVEUoYWgs
IEFSX1RTRl9MMzIsIHRzZjY0ICYgMHhmZmZmZmZmZik7CisJT1NfUkVHX1dSSVRFKGFoLCBBUl9U
U0ZfVTMyLCAodHNmNjQgPj4gMzIpICYgMHhmZmZmZmZmZik7Cit9CisKKy8qCiAgKiBSZXNldCB0
aGUgY3VycmVudCBoYXJkd2FyZSB0c2YgZm9yIHN0YW1sbWUuCiAgKi8KIHZvaWQKSW5kZXg6IHN5
cy9kZXYvYXRoL2F0aF9oYWwvYWhfaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L2F0
aC9hdGhfaGFsL2FoX2ludGVybmFsLmgJKHJldmlzaW9uIDIyNTE0MykKKysrIHN5cy9kZXYvYXRo
L2F0aF9oYWwvYWhfaW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw4IEBA
CiAJCQloYWxCc3NpZE1hdGNoU3VwcG9ydAkJOiAxLAogCQkJaGFsNGtiU3BsaXRUcmFuc1N1cHBv
cnQJCTogMSwKIAkJCWhhbEhhc1J4U2VsZkxpbmtlZFRhaWwJCTogMSwKLQkJCWhhbFN1cHBvcnRz
RmFzdENsb2NrNUdIegk6IDE7CS8qIEhhcmR3YXJlIHN1cHBvcnRzIDVnaHogZmFzdCBjbG9jazsg
Y2hlY2sgZWVwcm9tL2NoYW5uZWwgYmVmb3JlIHVzaW5nICovCisJCQloYWxTdXBwb3J0c0Zhc3RD
bG9jazVHSHoJOiAxLAkvKiBIYXJkd2FyZSBzdXBwb3J0cyA1Z2h6IGZhc3QgY2xvY2s7IGNoZWNr
IGVlcHJvbS9jaGFubmVsIGJlZm9yZSB1c2luZyAqLworCQkJaGFsSGFzTG9uZ1J4RGVzY1RzZgkJ
OiAxOwogCXVpbnQzMl90CWhhbFdpcmVsZXNzTW9kZXM7CiAJdWludDE2X3QJaGFsVG90YWxRdWV1
ZXM7CiAJdWludDE2X3QJaGFsS2V5Q2FjaGVTaXplOwpJbmRleDogc3lzL2Rldi9hdGgvYXRoX2hh
bC9haC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvYXRoL2F0aF9oYWwvYWguYwkocmV2aXNpb24g
MjI1MTQzKQorKysgc3lzL2Rldi9hdGgvYXRoX2hhbC9haC5jCSh3b3JraW5nIGNvcHkpCkBAIC02
NTcsNiArNjU3LDggQEAKIAkJfQogCWNhc2UgSEFMX0NBUF9SWERFU0NfU0VMRkxJTks6CS8qIGhh
cmR3YXJlIHN1cHBvcnRzIHNlbGYtbGlua2VkIGZpbmFsIFJYIGRlc2NyaXB0b3JzIGNvcnJlY3Rs
eSAqLwogCQlyZXR1cm4gcENhcC0+aGFsSGFzUnhTZWxmTGlua2VkVGFpbCA/IEhBTF9PSyA6IEhB
TF9FTk9UU1VQUDsKKwljYXNlIEhBTF9DQVBfTE9OR19SWERFU0NfVFNGOgkJLyogMzIgYml0IFRT
RiBpbiBSWCBkZXNjcmlwdG9yPyAqLworCQlyZXR1cm4gcENhcC0+aGFsSGFzTG9uZ1J4RGVzY1Rz
ZiA/IEhBTF9PSyA6IEhBTF9FTk9UU1VQUDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gSEFMX0VJTlZB
TDsKIAl9CkBAIC0xMjIyLDMgKzEyMjQsMzcgQEAKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQor
CisvKgorICogQWRqdXN0IHRoZSBUU0YuCisgKi8KK3ZvaWQKK2F0aF9oYWxfYWRqdXN0dHNmKHN0
cnVjdCBhdGhfaGFsICphaCwgaW50MzJfdCB0c2ZkZWx0YSkKK3sKKwkvKiBYWFggaGFuZGxlIHdy
YXAvb3ZlcmZsb3cgKi8KKwlPU19SRUdfV1JJVEUoYWgsIEFSX1RTRl9MMzIsIE9TX1JFR19SRUFE
KGFoLCBBUl9UU0ZfTDMyKSArIHRzZmRlbHRhKTsKK30KKworLyoKKyAqIEVuYWJsZSBvciBkaXNh
YmxlIENDQS4KKyAqLwordm9pZAorYXRoX2hhbF9zZXRjY2Eoc3RydWN0IGF0aF9oYWwgKmFoLCBp
bnQgZW5hKQoreworCS8qCisJICogTkI6IGZpbGwgbWUgaW47IHRoaXMgaXMgbm90IHByb3ZpZGVk
IGJ5IGRlZmF1bHQgYmVjYXVzZSBkaXNhYmxpbmcKKwkgKiAgICAgQ0NBIGluIG1vc3QgbG9jYWxl
cyB2aW9sYXRlcyByZWd1bGF0b3J5LgorCSAqLworfQorCisvKgorICogR2V0IENDQSBzZXR0aW5n
LgorICovCitpbnQKK2F0aF9oYWxfZ2V0Y2NhKHN0cnVjdCBhdGhfaGFsICphaCkKK3sKKwl1X2lu
dDMyX3QgZGlhZzsKKwlpZiAoYXRoX2hhbF9nZXRjYXBhYmlsaXR5KGFoLCBIQUxfQ0FQX0RJQUcs
IDAsICZkaWFnKSAhPSBIQUxfT0spCisJCXJldHVybiAxOworCXJldHVybiAoKGRpYWcgJiAweDUw
MDAwMCkgPT0gMCk7Cit9CkluZGV4OiBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMC9hcjUyMTBf
YXR0YWNoLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjUyMTAvYXI1MjEw
X2F0dGFjaC5jCShyZXZpc2lvbiAyMjUxNDMpCisrKyBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIx
MC9hcjUyMTBfYXR0YWNoLmMJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNyBAQAogCS5h
aF9iZWFjb25Jbml0CQkJPSBhcjUyMTBCZWFjb25Jbml0LAogCS5haF9zZXRTdGF0aW9uQmVhY29u
VGltZXJzCT0gYXI1MjEwU2V0U3RhQmVhY29uVGltZXJzLAogCS5haF9yZXNldFN0YXRpb25CZWFj
b25UaW1lcnMJPSBhcjUyMTBSZXNldFN0YUJlYWNvblRpbWVycywKKwkuYWhfZ2V0TmV4dFRCVFQJ
CQk9IGFyNTIxMEdldE5leHRUQlRULAogCiAJLyogSW50ZXJydXB0IEZ1bmN0aW9ucyAqLwogCS5h
aF9pc0ludGVycnVwdFBlbmRpbmcJCT0gYXI1MjEwSXNJbnRlcnJ1cHRQZW5kaW5nLApJbmRleDog
c3lzL2Rldi9hdGgvYXRoX2hhbC9hcjUyMTAvYXI1MjEwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rl
di9hdGgvYXRoX2hhbC9hcjUyMTAvYXI1MjEwLmgJKHJldmlzaW9uIDIyNTE0MykKKysrIHN5cy9k
ZXYvYXRoL2F0aF9oYWwvYXI1MjEwL2FyNTIxMC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiAr
MjY4LDcgQEAKIGV4dGVybgl2b2lkIGFyNTIxMFNldFN0YUJlYWNvblRpbWVycyhzdHJ1Y3QgYXRo
X2hhbCAqLAogCQljb25zdCBIQUxfQkVBQ09OX1NUQVRFICopOwogZXh0ZXJuCXZvaWQgYXI1MjEw
UmVzZXRTdGFCZWFjb25UaW1lcnMoc3RydWN0IGF0aF9oYWwgKik7CitleHRlcm4JdWludDY0X3Qg
YXI1MjEwR2V0TmV4dFRCVFQoc3RydWN0IGF0aF9oYWwgKik7CiAKIGV4dGVybglIQUxfQk9PTCBh
cjUyMTBJc0ludGVycnVwdFBlbmRpbmcoc3RydWN0IGF0aF9oYWwgKik7CiBleHRlcm4JSEFMX0JP
T0wgYXI1MjEwR2V0UGVuZGluZ0ludGVycnVwdHMoc3RydWN0IGF0aF9oYWwgKiwgSEFMX0lOVCAq
KTsKSW5kZXg6IHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1MjEwL2FyNTIxMF9iZWFjb24uYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMC9hcjUyMTBfYmVhY29uLmMJKHJl
dmlzaW9uIDIyNTE0MykKKysrIHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1MjEwL2FyNTIxMF9iZWFj
b24uYwkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsMTcgQEAKICNpbmNsdWRlICJhcjUyMTAv
YXI1MjEwZGVzYy5oIgogCiAvKgorICogUmV0dXJuIHRoZSBoYXJkd2FyZSBOZXh0VEJUVCBpbiBU
U0YKKyAqLwordWludDY0X3QKK2FyNTIxMEdldE5leHRUQlRUKHN0cnVjdCBhdGhfaGFsICphaCkK
K3sKKyNkZWZpbmUgVFVfVE9fVFNGKF90dSkJKCgodWludDY0X3QpKF90dSkpIDw8IDEwKQorCXJl
dHVybiBUVV9UT19UU0YoT1NfUkVHX1JFQUQoYWgsIEFSX1RJTUVSMCkpOworI3VuZGVmIFRVX1RP
X1RTRgorfQorCisvKgogICogSW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGhhcmR3YXJlIHJlZ2lzdGVy
cyB1c2VkIHRvIHNlbmQgYmVhY29ucy4KICAqLwogdm9pZApJbmRleDogc3lzL2Rldi9hdGgvYXRo
X2hhbC9hcjUyMTEvYXI1MjExX2F0dGFjaC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvYXRoL2F0
aF9oYWwvYXI1MjExL2FyNTIxMV9hdHRhY2guYwkocmV2aXNpb24gMjI1MTQzKQorKysgc3lzL2Rl
di9hdGgvYXRoX2hhbC9hcjUyMTEvYXI1MjExX2F0dGFjaC5jCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDgsNiArMTQ4LDcgQEAKIAkuYWhfYmVhY29uSW5pdAkJCT0gYXI1MjExQmVhY29uSW5pdCwKIAku
YWhfc2V0U3RhdGlvbkJlYWNvblRpbWVycwk9IGFyNTIxMVNldFN0YUJlYWNvblRpbWVycywKIAku
YWhfcmVzZXRTdGF0aW9uQmVhY29uVGltZXJzCT0gYXI1MjExUmVzZXRTdGFCZWFjb25UaW1lcnMs
CisJLmFoX2dldE5leHRUQlRUCQkJPSBhcjUyMTFHZXROZXh0VEJUVCwKIAogCS8qIEludGVycnVw
dCBGdW5jdGlvbnMgKi8KIAkuYWhfaXNJbnRlcnJ1cHRQZW5kaW5nCQk9IGFyNTIxMUlzSW50ZXJy
dXB0UGVuZGluZywKSW5kZXg6IHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1MjExL2FyNTIxMS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1MjExL2FyNTIxMS5oCShyZXZpc2lv
biAyMjUxNDMpCisrKyBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMS9hcjUyMTEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw3IEBACiBleHRlcm4Jdm9pZCBhcjUyMTFTZXRTdGFCZWFj
b25UaW1lcnMoc3RydWN0IGF0aF9oYWwgKiwKIAkJY29uc3QgSEFMX0JFQUNPTl9TVEFURSAqKTsK
IGV4dGVybgl2b2lkIGFyNTIxMVJlc2V0U3RhQmVhY29uVGltZXJzKHN0cnVjdCBhdGhfaGFsICop
OworZXh0ZXJuCXVpbnQ2NF90IGFyNTIxMUdldE5leHRUQlRUKHN0cnVjdCBhdGhfaGFsICopOwog
CiBleHRlcm4JSEFMX0JPT0wgYXI1MjExSXNJbnRlcnJ1cHRQZW5kaW5nKHN0cnVjdCBhdGhfaGFs
ICopOwogZXh0ZXJuCUhBTF9CT09MIGFyNTIxMUdldFBlbmRpbmdJbnRlcnJ1cHRzKHN0cnVjdCBh
dGhfaGFsICosIEhBTF9JTlQgKik7CkluZGV4OiBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMS9h
cjUyMTFfYmVhY29uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjUyMTEv
YXI1MjExX2JlYWNvbi5jCShyZXZpc2lvbiAyMjUxNDMpCisrKyBzeXMvZGV2L2F0aC9hdGhfaGFs
L2FyNTIxMS9hcjUyMTFfYmVhY29uLmMJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDE3IEBA
CiAgKi8KIAogLyoKKyAqIFJldHVybiB0aGUgaGFyZHdhcmUgTmV4dFRCVFQgaW4gVFNGCisgKi8K
K3VpbnQ2NF90CithcjUyMTFHZXROZXh0VEJUVChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit7CisjZGVm
aW5lIFRVX1RPX1RTRihfdHUpCSgoKHVpbnQ2NF90KShfdHUpKSA8PCAxMCkKKwlyZXR1cm4gVFVf
VE9fVFNGKE9TX1JFR19SRUFEKGFoLCBBUl9USU1FUjApKTsKKyN1bmRlZiBUVV9UT19UU0YKK30K
KworLyoKICAqIEluaXRpYWxpemUgYWxsIG9mIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgdXNlZCB0
byBzZW5kIGJlYWNvbnMuCiAgKi8KIHZvaWQKSW5kZXg6IHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1
MjEyL2FyNTIxMl9hdHRhY2guYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L2F0aC9hdGhfaGFsL2Fy
NTIxMi9hcjUyMTJfYXR0YWNoLmMJKHJldmlzaW9uIDIyNTE0MykKKysrIHN5cy9kZXYvYXRoL2F0
aF9oYWwvYXI1MjEyL2FyNTIxMl9hdHRhY2guYwkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYgKzE1
MSw3IEBACiAJLmFoX2JlYWNvbkluaXQJCQk9IGFyNTIxMkJlYWNvbkluaXQsCiAJLmFoX3NldFN0
YXRpb25CZWFjb25UaW1lcnMJPSBhcjUyMTJTZXRTdGFCZWFjb25UaW1lcnMsCiAJLmFoX3Jlc2V0
U3RhdGlvbkJlYWNvblRpbWVycwk9IGFyNTIxMlJlc2V0U3RhQmVhY29uVGltZXJzLAorCS5haF9n
ZXROZXh0VEJUVAkJCT0gYXI1MjEyR2V0TmV4dFRCVFQsCiAKIAkvKiBJbnRlcnJ1cHQgRnVuY3Rp
b25zICovCiAJLmFoX2lzSW50ZXJydXB0UGVuZGluZwkJPSBhcjUyMTJJc0ludGVycnVwdFBlbmRp
bmcsCkluZGV4OiBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMi9hcjUyMTIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMi9hcjUyMTIuaAkocmV2aXNpb24gMjI1MTQz
KQorKysgc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjUyMTIvYXI1MjEyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzMCw2ICs0MzAsNyBAQAogZXh0ZXJuCXZvaWQgYXI1MjEyUmVzZXRTdGFCZWFjb25UaW1l
cnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKIGV4dGVybgl2b2lkIGFyNTIxMlNldFN0YUJlYWNvblRp
bWVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCiAJCWNvbnN0IEhBTF9CRUFDT05fU1RBVEUgKik7Citl
eHRlcm4JdWludDY0X3QgYXI1MjEyR2V0TmV4dFRCVFQoc3RydWN0IGF0aF9oYWwgKik7CiAKIGV4
dGVybglIQUxfQk9PTCBhcjUyMTJJc0ludGVycnVwdFBlbmRpbmcoc3RydWN0IGF0aF9oYWwgKmFo
KTsKIGV4dGVybglIQUxfQk9PTCBhcjUyMTJHZXRQZW5kaW5nSW50ZXJydXB0cyhzdHJ1Y3QgYXRo
X2hhbCAqYWgsIEhBTF9JTlQgKik7CkluZGV4OiBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMi9h
cjUyMTJfYmVhY29uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjUyMTIv
YXI1MjEyX2JlYWNvbi5jCShyZXZpc2lvbiAyMjUxNDMpCisrKyBzeXMvZGV2L2F0aC9hdGhfaGFs
L2FyNTIxMi9hcjUyMTJfYmVhY29uLmMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDE3IEBA
CiAjaW5jbHVkZSAiYXI1MjEyL2FyNTIxMmRlc2MuaCIKIAogLyoKKyAqIFJldHVybiB0aGUgaGFy
ZHdhcmUgTmV4dFRCVFQgaW4gVFNGCisgKi8KK3VpbnQ2NF90CithcjUyMTJHZXROZXh0VEJUVChz
dHJ1Y3QgYXRoX2hhbCAqYWgpCit7CisjZGVmaW5lIFRVX1RPX1RTRihfdHUpCSgoKHVpbnQ2NF90
KShfdHUpKSA8PCAxMCkKKwlyZXR1cm4gVFVfVE9fVFNGKE9TX1JFR19SRUFEKGFoLCBBUl9USU1F
UjApKTsKKyN1bmRlZiBUVV9UT19UU0YKK30KKworLyoKICAqIEluaXRpYWxpemUgYWxsIG9mIHRo
ZSBoYXJkd2FyZSByZWdpc3RlcnMgdXNlZCB0bwogICogc2VuZCBiZWFjb25zLiAgTm90ZSB0aGF0
IGZvciBzdGF0aW9uIG9wZXJhdGlvbiB0aGUKICAqIGRyaXZlciBjYWxscyBhcjUyMTJTZXRTdGFC
ZWFjb25UaW1lcnMgaW5zdGVhZC4KSW5kZXg6IHN5cy9kZXYvYXRoL2F0aF9oYWwvYWguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzeXMvZGV2L2F0aC9hdGhfaGFsL2FoLmgJKHJldmlzaW9uIDIyNTE0MykKKysr
IHN5cy9kZXYvYXRoL2F0aF9oYWwvYWguaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw3
IEBACiAJSEFMX0NBUF9CU1NJRE1BVENICT0gMjM4LAkvKiBoYXJkd2FyZSBoYXMgZGlzYWJsZSBi
c3NpZCBtYXRjaCAqLwogCUhBTF9DQVBfU1RSRUFNUwkJPSAyMzksCS8qIGhvdyBtYW55IDgwMi4x
MW4gc3BhdGlhbCBzdHJlYW1zIGFyZSBhdmFpbGFibGUgKi8KIAlIQUxfQ0FQX1JYREVTQ19TRUxG
TElOSwk9IDI0MiwJLyogc3VwcG9ydCBhIHNlbGYtbGlua2VkIHRhaWwgUlggZGVzY3JpcHRvciAq
LworCUhBTF9DQVBfTE9OR19SWERFU0NfVFNGCT0gMjQzLAkvKiBoYXJkd2FyZSBzdXBwb3J0cyAz
MmJpdCBUU0YgaW4gUlggZGVzY3JpcHRvciAqLwogfSBIQUxfQ0FQQUJJTElUWV9UWVBFOwogCiAv
KiAKQEAgLTk5Niw2ICs5OTcsNyBAQAogCXZvaWQJICBfX2FoZGVjbCgqYWhfc2V0U3RhdGlvbkJl
YWNvblRpbWVycykoc3RydWN0IGF0aF9oYWwqLAogCQkJCWNvbnN0IEhBTF9CRUFDT05fU1RBVEUg
Kik7CiAJdm9pZAkgIF9fYWhkZWNsKCphaF9yZXNldFN0YXRpb25CZWFjb25UaW1lcnMpKHN0cnVj
dCBhdGhfaGFsKik7CisJdWludDY0X3QgIF9fYWhkZWNsKCphaF9nZXROZXh0VEJUVCkoc3RydWN0
IGF0aF9oYWwgKik7CiAKIAkvKiA4MDIuMTFuIEZ1bmN0aW9ucyAqLwogCUhBTF9CT09MICBfX2Fo
ZGVjbCgqYWhfY2hhaW5UeERlc2MpKHN0cnVjdCBhdGhfaGFsICosCkBAIC0xMTM4LDQgKzExNDAs
MjAgQEAKIGV4dGVybiB1aW50MTZfdCBfX2FoZGVjbCBhdGhfaGFsX2NvbXB1dGV0eHRpbWUoc3Ry
dWN0IGF0aF9oYWwgKiwKIAkJY29uc3QgSEFMX1JBVEVfVEFCTEUgKnJhdGVzLCB1aW50MzJfdCBm
cmFtZUxlbiwKIAkJdWludDE2X3QgcmF0ZWl4LCBIQUxfQk9PTCBzaG9ydFByZWFtYmxlKTsKKwor
LyoKKyAqIEFkanVzdCB0aGUgVFNGLgorICovCitleHRlcm4gdm9pZCBfX2FoZGVjbCBhdGhfaGFs
X2FkanVzdHRzZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludDMyX3QgdHNmZGVsdGEpOworCisvKgor
ICogRW5hYmxlIG9yIGRpc2FibGUgQ0NBLgorICovCit2b2lkIF9fYWhkZWNsIGF0aF9oYWxfc2V0
Y2NhKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IGVuYSk7CisKKy8qCisgKiBHZXQgQ0NBIHNldHRp
bmcuCisgKi8KK2ludCBfX2FoZGVjbCBhdGhfaGFsX2dldGNjYShzdHJ1Y3QgYXRoX2hhbCAqYWgp
OworCiAjZW5kaWYgLyogX0FUSF9BSF9IXyAqLwpJbmRleDogc3lzL2Rldi9hdGgvaWZfYXRoLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvaWZfYXRoLmMJKHJldmlzaW9uIDIyNTE0NSkKKysr
IHN5cy9kZXYvYXRoL2lmX2F0aC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsMjQgKzIxNCw2IEBA
CiBzdGF0aWMgdm9pZAlhdGhfdGRtYV9iZWFjb25fc2VuZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywK
IAkJICAgIHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCk7CiAKLXN0YXRpYyBfX2lubGluZSB2b2lk
Ci1hdGhfaGFsX3NldGNjYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBlbmEpCi17Ci0JLyoKLQkg
KiBOQjogZmlsbCBtZSBpbjsgdGhpcyBpcyBub3QgcHJvdmlkZWQgYnkgZGVmYXVsdCBiZWNhdXNl
IGRpc2FibGluZwotCSAqICAgICBDQ0EgaW4gbW9zdCBsb2NhbGVzIHZpb2xhdGVzIHJlZ3VsYXRv
cnkuCi0JICovCi19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWF0aF9oYWxfZ2V0Y2NhKHN0cnVj
dCBhdGhfaGFsICphaCkKLXsKLQl1X2ludDMyX3QgZGlhZzsKLQlpZiAoYXRoX2hhbF9nZXRjYXBh
YmlsaXR5KGFoLCBIQUxfQ0FQX0RJQUcsIDAsICZkaWFnKSAhPSBIQUxfT0spCi0JCXJldHVybiAx
OwotCXJldHVybiAoKGRpYWcgJiAweDUwMDAwMCkgPT0gMCk7Ci19Ci0KICNkZWZpbmUJVERNQV9F
UF9NVUxUSVBMSUVSCSgxPDwxMCkgLyogcG93MiB0byBvcHRpbWl6ZSBvdXQgKiBhbmQgLyAqLwog
I2RlZmluZQlURE1BX0xQRl9MRU4JCTYKICNkZWZpbmUJVERNQV9EVU1NWV9NQVJLRVIJMHgxMjcK
QEAgLTYxMyw2ICs1OTUsNyBAQAogCXNjLT5zY19oYXNibWF0Y2ggPSBhdGhfaGFsX2hhc2Jzc2lk
bWF0Y2goYWgpOwogCXNjLT5zY19oYXN0c2ZhZGQgPSBhdGhfaGFsX2hhc3RzZmFkanVzdChhaCk7
CiAJc2MtPnNjX3J4c2xpbmsgPSBhdGhfaGFsX3NlbGZfbGlua2VkX2ZpbmFsX3J4ZGVzYyhhaCk7
CisJc2MtPnNjX3J4dHNmMzIgPSBhdGhfaGFsX2hhc19sb25nX3J4ZGVzY190c2YoYWgpOwogCWlm
IChhdGhfaGFsX2hhc2Zhc3RmcmFtZXMoYWgpKQogCQlpYy0+aWNfY2FwcyB8PSBJRUVFODAyMTFf
Q19GRjsKIAl3bW9kZXMgPSBhdGhfaGFsX2dldHdpcmVsZXNzbW9kZXMoYWgpOwpAQCAtMzI5NCwx
NCArMzI3Nyw0OSBAQAogICogYSBmdWxsIDY0LWJpdCBUU0YgdXNpbmcgdGhlIHNwZWNpZmllZCBU
U0YuCiAgKi8KIHN0YXRpYyBfX2lubGluZSB1X2ludDY0X3QKLWF0aF9leHRlbmRfdHNmKHVfaW50
MzJfdCByc3RhbXAsIHVfaW50NjRfdCB0c2YpCithdGhfZXh0ZW5kX3RzZjE1KHVfaW50MzJfdCBy
c3RhbXAsIHVfaW50NjRfdCB0c2YpCiB7CiAJaWYgKCh0c2YgJiAweDdmZmYpIDwgcnN0YW1wKQog
CQl0c2YgLT0gMHg4MDAwOworCiAJcmV0dXJuICgodHNmICZ+IDB4N2ZmZikgfCByc3RhbXApOwog
fQogCiAvKgorICogRXh0ZW5kIDMyLWJpdCB0aW1lIHN0YW1wIGZyb20gcnggZGVzY3JpcHRvciB0
bworICogYSBmdWxsIDY0LWJpdCBUU0YgdXNpbmcgdGhlIHNwZWNpZmllZCBUU0YuCisgKi8KK3N0
YXRpYyBfX2lubGluZSB1X2ludDY0X3QKK2F0aF9leHRlbmRfdHNmMzIodV9pbnQzMl90IHJzdGFt
cCwgdV9pbnQ2NF90IHRzZikKK3sKKwl1X2ludDMyX3QgdHNmX2xvdyA9IHRzZiAmIDB4ZmZmZmZm
ZmY7CisJdV9pbnQ2NF90IHRzZjY0ID0gKHRzZiAmIH4weGZmZmZmZmZmVUxMKSB8IHJzdGFtcDsK
KworCWlmIChyc3RhbXAgPiB0c2ZfbG93ICYmIChyc3RhbXAgLSB0c2ZfbG93ID4gMHgxMDAwMDAw
MCkpCisJCXRzZjY0IC09IDB4MTAwMDAwMDAwVUxMOworCisJaWYgKHJzdGFtcCA8IHRzZl9sb3cg
JiYgKHRzZl9sb3cgLSByc3RhbXAgPiAweDEwMDAwMDAwKSkKKwkJdHNmNjQgKz0gMHgxMDAwMDAw
MDBVTEw7CisKKwlyZXR1cm4gdHNmNjQ7Cit9CisKKy8qCisgKiBFeHRlbmQgdGhlIFRTRiBmcm9t
IHRoZSBSWCBkZXNjcmlwdG9yIHRvIGEgZnVsbCA2NCBiaXQgVFNGLgorICogRWFybGllciBoYXJk
d2FyZSB2ZXJzaW9ucyBvbmx5IHdyb3RlIHRoZSBsb3cgMTUgYml0cyBvZiB0aGUKKyAqIFRTRiBp
bnRvIHRoZSBSWCBkZXNjcmlwdG9yOyBsYXRlciB2ZXJzaW9ucyAoQVI1NDE2IGFuZCB1cCkKKyAq
IGluY2x1ZGUgdGhlIDMyIGJpdCBUU0YgdmFsdWUuCisgKi8KK3N0YXRpYyBfX2lubGluZSB1X2lu
dDY0X3QKK2F0aF9leHRlbmRfdHNmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1X2ludDMyX3QgcnN0
YW1wLCB1X2ludDY0X3QgdHNmKQoreworCWlmIChzYy0+c2Nfcnh0c2YzMikKKwkJcmV0dXJuIGF0
aF9leHRlbmRfdHNmMzIocnN0YW1wLCB0c2YpOworCWVsc2UKKwkJcmV0dXJuIGF0aF9leHRlbmRf
dHNmMTUocnN0YW1wLCB0c2YpOworfQorCisvKgogICogSW50ZXJjZXB0IG1hbmFnZW1lbnQgZnJh
bWVzIHRvIGNvbGxlY3QgYmVhY29uIHJzc2kgZGF0YQogICogYW5kIHRvIGRvIGlic3MgbWVyZ2Vz
LgogICovCkBAIC0zMzM0LDcgKzMzNTIsNyBAQAogCQlpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVF
RTgwMjExX01fSUJTUyAmJgogCQkgICAgdmFwLT5pdl9zdGF0ZSA9PSBJRUVFODAyMTFfU19SVU4p
IHsKIAkJCXVpbnQzMl90IHJzdGFtcCA9IHNjLT5zY19sYXN0cnMtPnJzX3RzdGFtcDsKLQkJCXVp
bnQ2NF90IHRzZiA9IGF0aF9leHRlbmRfdHNmKHJzdGFtcCwKKwkJCXVpbnQ2NF90IHRzZiA9IGF0
aF9leHRlbmRfdHNmKHNjLCByc3RhbXAsCiAJCQkJYXRoX2hhbF9nZXR0c2Y2NChzYy0+c2NfYWgp
KTsKIAkJCS8qCiAJCQkgKiBIYW5kbGUgaWJzcyBtZXJnZSBhcyBuZWVkZWQ7IGNoZWNrIHRoZSB0
c2Ygb24gdGhlCkBAIC0zNDA2LDcgKzM0MjQsNyBAQAogCQkJc2MtPnNjX3J4X3RoLndyX2ZsYWdz
IHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX1NIT1JUR0k7CiAJfQogI2VuZGlmCi0Jc2MtPnNjX3J4
X3RoLndyX3RzZiA9IGh0b2xlNjQoYXRoX2V4dGVuZF90c2YocnMtPnJzX3RzdGFtcCwgdHNmKSk7
CisJc2MtPnNjX3J4X3RoLndyX3RzZiA9IGh0b2xlNjQoYXRoX2V4dGVuZF90c2Yoc2MsIHJzLT5y
c190c3RhbXAsIHRzZikpOwogCWlmIChycy0+cnNfc3RhdHVzICYgSEFMX1JYRVJSX0NSQykKIAkJ
c2MtPnNjX3J4X3RoLndyX2ZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX0JBREZDUzsKIAkv
KiBYWFggcHJvcGFnYXRlIG90aGVyIGVycm9yIGZsYWdzIGZyb20gZGVzY3JpcHRvciAqLwpAQCAt
NTQ2MCwyMCArNTQ3OCw2IEBACiB9CiAKICNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9URE1BCi1z
dGF0aWMgX19pbmxpbmUgdWludDMyX3QKLWF0aF9oYWxfZ2V0bmV4dHRidHQoc3RydWN0IGF0aF9o
YWwgKmFoKQotewotI2RlZmluZQlBUl9USU1FUjAJMHg4MDI4Ci0JcmV0dXJuIE9TX1JFR19SRUFE
KGFoLCBBUl9USU1FUjApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYXRoX2hhbF9hZGp1
c3R0c2Yoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQzMl90IHRzZmRlbHRhKQotewotCS8qIFhYWCBo
YW5kbGUgd3JhcC9vdmVyZmxvdyAqLwotCU9TX1JFR19XUklURShhaCwgQVJfVFNGX0wzMiwgT1Nf
UkVHX1JFQUQoYWgsIEFSX1RTRl9MMzIpICsgdHNmZGVsdGEpOwotfQotCiBzdGF0aWMgdm9pZAog
YXRoX3RkbWFfc2V0dGltZXJzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1X2ludDMyX3QgbmV4dHRi
dHQsIHVfaW50MzJfdCBiaW50dmFsKQogewpAQCAtNTYyOSw4ICs1NjMzLDggQEAKIAlzdHJ1Y3Qg
YXRoX3NvZnRjICpzYyA9IGljLT5pY19pZnAtPmlmX3NvZnRjOwogCXN0cnVjdCBhdGhfaGFsICph
aCA9IHNjLT5zY19haDsKIAljb25zdCBIQUxfUkFURV9UQUJMRSAqcnQgPSBzYy0+c2NfY3VycmF0
ZXM7Ci0JdV9pbnQ2NF90IHRzZiwgcnN0YW1wLCBuZXh0c2xvdDsKLQl1X2ludDMyX3QgdHh0aW1l
LCBuZXh0c2xvdHR1LCB0aW1lcjA7CisJdV9pbnQ2NF90IHRzZiwgcnN0YW1wLCBuZXh0c2xvdCwg
bmV4dHRidHQ7CisJdV9pbnQzMl90IHR4dGltZSwgbmV4dHNsb3R0dTsKIAlpbnQzMl90IHR1ZGVs
dGEsIHRzZmRlbHRhOwogCWNvbnN0IHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyczsKIAlpbnQgcml4
OwpAQCAtNTY2MSw3ICs1NjY1LDcgQEAKIAkvKiBleHRlbmQgcnggdGltZXN0YW1wIHRvIDY0IGJp
dHMgKi8KIAlycyA9IHNjLT5zY19sYXN0cnM7CiAJdHNmID0gYXRoX2hhbF9nZXR0c2Y2NChhaCk7
Ci0JcnN0YW1wID0gYXRoX2V4dGVuZF90c2YocnMtPnJzX3RzdGFtcCwgdHNmKTsKKwlyc3RhbXAg
PSBhdGhfZXh0ZW5kX3RzZihzYywgcnMtPnJzX3RzdGFtcCwgdHNmKTsKIAkvKgogCSAqIFRoZSBy
eCB0aW1lc3RhbXAgaXMgc2V0IGJ5IHRoZSBoYXJkd2FyZSBvbiBjb21wbGV0aW5nCiAJICogcmVj
ZXB0aW9uIChhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIHJ4IGRlc2NyaXB0b3IgaXMgRE1BJ2QKQEAg
LTU2NzcsMTUgKzU2ODEsMTUgQEAKIAluZXh0c2xvdHR1ID0gVFNGX1RPX1RVKG5leHRzbG90Pj4z
MiwgbmV4dHNsb3QpICYgSEFMX0JFQUNPTl9QRVJJT0Q7CiAKIAkvKgotCSAqIFRJTUVSMCBpcyB0
aGUgaC93J3MgaWRlYSBvZiBOZXh0VEJUVCAoaW4gVFUncykuICBDb252ZXJ0Ci0JICogdG8gdXNl
Y3MgYW5kIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdoYXQgdGhlCisJICogUmV0
cmlldmUgdGhlIGhhcmR3YXJlIE5leHRUQlRUIGluIHVzZWNzCisJICogYW5kIGNhbGN1bGF0ZSB0
aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdoYXQgdGhlCiAJICogb3RoZXIgc3RhdGlvbiB0aGlua3Mg
YW5kIHdoYXQgd2UgaGF2ZSBwcm9ncmFtbWVkLiAgVGhpcwogCSAqIGxldHMgdXMgZmlndXJlIGhv
dyB0byBhZGp1c3Qgb3VyIHRpbWVycyB0byBtYXRjaC4gIFRoZQogCSAqIGFkanVzdG1lbnRzIGFy
ZSBkb25lIGJ5IHB1bGxpbmcgdGhlIFRTRiBmb3J3YXJkIGFuZCBwb3NzaWJseQogCSAqIHJld3Jp
dGluZyB0aGUgYmVhY29uIHRpbWVycy4KIAkgKi8KLQl0aW1lcjAgPSBhdGhfaGFsX2dldG5leHR0
YnR0KGFoKTsKLQl0c2ZkZWx0YSA9IChpbnQzMl90KSgobmV4dHNsb3QgJSBUVV9UT19UU0YoSEFM
X0JFQUNPTl9QRVJJT0QrMSkpIC0gVFVfVE9fVFNGKHRpbWVyMCkpOworCW5leHR0YnR0ID0gYXRo
X2hhbF9nZXRuZXh0dGJ0dChhaCk7CisJdHNmZGVsdGEgPSAoaW50MzJfdCkoKG5leHRzbG90ICUg
VFVfVE9fVFNGKEhBTF9CRUFDT05fUEVSSU9EICsgMSkpIC0gbmV4dHRidHQpOwogCiAJRFBSSU5U
RihzYywgQVRIX0RFQlVHX1RETUFfVElNRVIsCiAJICAgICJ0c2ZkZWx0YSAlZCBhdmcgKyVkLy0l
ZFxuIiwgdHNmZGVsdGEsCkBAIC01NzA1LDcgKzU3MDksNyBAQAogCQlURE1BX1NBTVBMRShzYy0+
c2NfYXZndHNmZGVsdGFwLCAwKTsKIAkJVERNQV9TQU1QTEUoc2MtPnNjX2F2Z3RzZmRlbHRhbSwg
MCk7CiAJfQotCXR1ZGVsdGEgPSBuZXh0c2xvdHR1IC0gdGltZXIwOworCXR1ZGVsdGEgPSBuZXh0
c2xvdHR1IC0gVFNGX1RPX1RVKG5leHR0YnR0ID4+IDMyLCBuZXh0dGJ0dCk7CiAKIAkvKgogCSAq
IENvcHkgc2VuZGVyJ3MgdGltZXRzdGFtcCBpbnRvIHRkbWEgaWUgc28gdGhleSBjYW4KQEAgLTU3
MjQsMTAgKzU3MjgsOSBAQAogCQkmbmktPm5pX3RzdGFtcC5kYXRhLCA4KTsKICNpZiAwCiAJRFBS
SU5URihzYywgQVRIX0RFQlVHX1RETUFfVElNRVIsCi0JICAgICJ0c2YgJWxsdSBuZXh0c2xvdCAl
bGx1ICglZCwgJWQpIG5leHRzbG90dHUgJXUgdGltZXIwICV1ICglZClcbiIsCisJICAgICJ0c2Yg
JWxsdSBuZXh0c2xvdCAlbGx1ICglZCwgJWQpIG5leHRzbG90dHUgJXUgbmV4dHRidHQgJWxsdSAo
JWQpXG4iLAogCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2YsICh1bnNpZ25lZCBsb25nIGxv
bmcpIG5leHRzbG90LAotCSAgICAoaW50KShuZXh0c2xvdCAtIHRzZiksIHRzZmRlbHRhLAotCSAg
ICBuZXh0c2xvdHR1LCB0aW1lcjAsIHR1ZGVsdGEpOworCSAgICAoaW50KShuZXh0c2xvdCAtIHRz
ZiksIHRzZmRlbHRhLCBuZXh0c2xvdHR1LCBuZXh0dGJ0dCwgdHVkZWx0YSk7CiAjZW5kaWYKIAkv
KgogCSAqIEFkanVzdCB0aGUgYmVhY29uIHRpbWVycyBvbmx5IHdoZW4gcHVsbGluZyB0aGVtIGZv
cndhcmQK
--20cf30434baa8caef804ac4fb2ef--



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