lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] Re: [lwip] Word mode transfers in an ethernet driver


From: Dan Lewis
Subject: [lwip-users] Re: [lwip] Word mode transfers in an ethernet driver
Date: Wed, 08 Jan 2003 23:43:02 -0000

This is a MIME message. If you are reading this text, you may want to 
consider changing to a mail reader or gateway that understands how to 
properly handle MIME multipart messages.

--=_C19D17CB.7F1E56A4
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Nicolas,

Thanks for the offer. I intended to release my code when I'm done
anyway. So far, however, I've only tested ARP and DHCP - which seem to
work, and do so with word mode transfers in the driver.

My interest in lwIP is related to my book, "Fundamentals of Embedded
Software". It uses a library I wrote to let students develop small
embedded applications on a PC without using either the PC's BIOS or O.S.
 Their code is compiled using a small protected mode library I wrote and
includes support for uC/OS-II.

My current goal is to get all this running on a PC104 board sold by JK
MicroSystems, called the uFlashTCP. As the name implies, it includes the
RealTek Ethernet chip, and thus my interest in lwIP and writing the
driver.

Attached is the source I have so far for the RealTek chip. It isn't
very pretty yet - I still have a lot to do. In particular, I haven't
checked the routine that recovers from an input overrun in the RealTek
chip.

If you find anything that needs to be changed, please let me know.

All the best,

Dan Lewis, Chair
Computer Engineering
Santa Clara University

>>> address@hidden 11/28/02 2:49:45 PM >>>
I have written a driver for the RTL8019AS, it works ok but still has
some strange glitches. Maybe we can work together, and then release our
work ?

Nicolas

Quoting Dan Lewis <address@hidden>:

> I'm porting lwIP to a PC104 board that uses the RealTek RTL8019AS
> Ethernet controller. The board has the RealTek chip configured for
> word-mode transfers. The sample driver transfers data to/from the
> Ethernet controller by walking through the pbuf chain and then
(within
> each pbuf) transfers the pbuf contents to the Ethernet controller
one
> byte at a time. I'd like to transfer the data one 16-bit word at a
time.
> Does anyone know whether or not pbufs always contain an even number
of
> bytes (except possibly the last pbuf in the chain)?
> 
> Thanks in advance!
> 
> Dan Lewis, Chair
> Computer Engineering 
> Santa Clara University
> [This message was sent through the lwip discussion list.]
> 


-------------------------------------------------

[This message was sent through the lwip discussion list.]

--=_C19D17CB.7F1E56A4
Content-Type: application/octet-stream; name="rtl8019.h"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rtl8019.h"

dm9pZAkJCXJ0bDgwMTlfaW5pdChzdHJ1Y3QgbmV0aWYgKm5ldGlmKSA7DQppbnQJCQlydGw4MDE5
X3BhY2tldF9yY3ZkKHZvaWQpIDsNCnZvaWQJCQlydGw4MDE5X2lucHV0KHN0cnVjdCBuZXRpZiAq
bmV0aWYpIDsNCg0K

--=_C19D17CB.7F1E56A4
Content-Type: application/octet-stream; name="rtl8019.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rtl8019.c"

I2RlZmluZQlEV0wgMQ0KDQojZGVmaW5lCUVUSEVSTkVUX01JTl9QQUNLRVRfTEVOR1RICTB4M0MN
Cg0KLyoNCiAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiBTd2VkaXNoIEluc3RpdHV0ZSBvZiBD
b21wdXRlciBTY2llbmNlLg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gDQogKiANCiAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dCBtb2RpZmljYXRpb24sIA0KICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICoNCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAq
ICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
DQogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQogKiAgICBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCiAq
IDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cw0KICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIA0KICoNCiAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgDQogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiANCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIA0K
ICogU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCANCiAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgDQogKiBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgDQogKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiANCiAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgDQogKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgDQogKiBPRiBTVUNIIERBTUFHRS4NCiAq
DQogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbHdJUCBUQ1AvSVAgc3RhY2suDQogKiANCiAq
IEF1dGhvcjogQWRhbSBEdW5rZWxzIDxhZGFtQHNpY3Muc2U+DQogKg0KICovDQoNCi8qDQogKiBU
aGlzIGZpbGUgaXMgYSBza2VsZXRvbiBmb3IgZGV2ZWxvcGluZyBFdGhlcm5ldCBuZXR3b3JrIGlu
dGVyZmFjZQ0KICogZHJpdmVycyBmb3IgbHdJUC4gQWRkIGNvZGUgdG8gdGhlIGxvd19sZXZlbCBm
dW5jdGlvbnMgYW5kIGRvIGENCiAqIHNlYXJjaC1hbmQtcmVwbGFjZSBmb3IgdGhlIHdvcmQgImV0
aGVybmV0aWYiIHRvIHJlcGxhY2UgaXQgd2l0aA0KICogc29tZXRoaW5nIHRoYXQgYmV0dGVyIGRl
c2NyaWJlcyB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlLg0KICoNCiAqIFRISVMgQ09ERSBORUVEUyBU
TyBCRSBGSVhFRCAtIElUIElTIE5PVCBJbiBTWU5DIFdJVEggQ1VSUkVOVCBFVEhBUlAgQVBJDQog
Ki8NCg0KI2luY2x1ZGUgPHBjLmg+DQojaW5jbHVkZSA8ZG9zLmg+DQoNCiNpbmNsdWRlICJsd2lw
L2RlYnVnLmgiDQojaW5jbHVkZSAibHdpcC9vcHQuaCINCiNpbmNsdWRlICJsd2lwL2RlZi5oIg0K
I2luY2x1ZGUgImx3aXAvbWVtLmgiDQojaW5jbHVkZSAibHdpcC9wYnVmLmgiDQojaW5jbHVkZSAi
bHdpcC9zeXMuaCINCiNpbmNsdWRlICJhcnAuaCINCg0KI2luY2x1ZGUgImxpYnBjMTA0LmgiDQoj
aW5jbHVkZSAicnRsODAxOS5oIg0KDQovKiBEZWZpbmUgdGhvc2UgdG8gYmV0dGVyIGRlc2NyaWJl
IHlvdXIgbmV0d29yayBpbnRlcmZhY2UuICovDQojZGVmaW5lIElGTkFNRTAgJ24nDQojZGVmaW5l
IElGTkFNRTEgJ2UnDQoNCnN0cnVjdCBydGw4MDE5IHsNCiAgc3RydWN0IGV0aF9hZGRyICpldGhh
ZGRyOw0KICAvKiBBZGQgd2hhdGV2ZXIgcGVyLWludGVyZmFjZSBzdGF0ZSB0aGF0IGlzIG5lZWRl
ZCBoZXJlLiAqLw0KfTsNCg0Kc3RhdGljIGNvbnN0IHN0cnVjdCBldGhfYWRkciBldGhicm9hZGNh
c3QgPSB7ezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfX07DQoNCi8qIEZvcndhcmQgZGVj
bGFyYXRpb25zLiAqLw0KIHZvaWQgIHJ0bDgwMTlfaW5wdXQoc3RydWN0IG5ldGlmICpuZXRpZik7
DQpzdGF0aWMgZXJyX3QgcnRsODAxOV9vdXRwdXQoc3RydWN0IG5ldGlmICpuZXRpZiwgc3RydWN0
IHBidWYgKnAsDQoJCQkgICAgICAgc3RydWN0IGlwX2FkZHIgKmlwYWRkcik7DQoNCi8qIENvbnN0
YW50cyB1c2VkIHRvIHByb2dyYW0gdGhlIFJUTDgwMTlBUy4uLiAqLw0KDQojZGVmaW5lCUJBU0UJ
CQkweDMwMA0KDQojZGVmaW5lCUNSCQkJQkFTRSswDQoNCiNkZWZpbmUJUFNUQVJUCQlCQVNFKzB4
MDEJLy8gUGFnZSAwIHJlZ2lzdGVycw0KI2RlZmluZQlQU1RPUAkJCUJBU0UrMHgwMg0KI2RlZmlu
ZQlCTlJZCQkJQkFTRSsweDAzDQojZGVmaW5lCVRQU1IJCQlCQVNFKzB4MDQNCiNkZWZpbmUJVEJD
UjAJCQlCQVNFKzB4MDUNCiNkZWZpbmUJVEJDUjEJCQlCQVNFKzB4MDYNCiNkZWZpbmUJSVNSCQkJ
QkFTRSsweDA3DQojZGVmaW5lCVJTQVIwCQkJQkFTRSsweDA4DQojZGVmaW5lCVJTQVIxCQkJQkFT
RSsweDA5DQojZGVmaW5lCVJCQ1IwCQkJQkFTRSsweDBBDQojZGVmaW5lCVJCQ1IxCQkJQkFTRSsw
eDBCDQojZGVmaW5lCVJDUgkJCUJBU0UrMHgwQw0KI2RlZmluZQlUQ1IJCQlCQVNFKzB4MEQNCiNk
ZWZpbmUJRENSCQkJQkFTRSsweDBFDQojZGVmaW5lCUlNUgkJCUJBU0UrMHgwRg0KDQojZGVmaW5l
CVBBUjAJCQlCQVNFKzB4MDEJLy8gUGFnZSAxIHJlZ2lzdGVycw0KI2RlZmluZQlDVVJSCQkJQkFT
RSsweDA3DQoNCiNkZWZpbmUJVFhTVEFSVF9JTklUCTB4NDANCiNkZWZpbmUJUlhTVEFSVF9JTklU
CTB4NDYNCiNkZWZpbmUJUlhTVE9QX0lOSVQJCTB4ODANCg0KI2RlZmluZQlSRE1BUE9SVAkJQkFT
RSsweDEwDQoNCi8vIElTUiBSZWdpc3RlciBiaXRzLi4uDQoNCnVuc2lnbmVkIHNob3J0IGludCBS
ZWFkVGltZXIodm9pZCkNCgl7DQoJX19hc21fXyAoIg0KCQlNT1ZCCSQweDAwLCVBTA0KCQlPVVRC
CSVBTCwkMHg0Mw0KCQlJTkIgCSQweDQwLCVBTA0KCQlNT1ZCCSVBTCwlQUgNCgkJSU5CCSQweDQw
LCVBTA0KCQlYQ0hHQgklQUwsJUFIDQoJIikgOw0KCX0NCg0Kdm9pZCBXYWl0TVMoaW50IG1zZWNz
KQ0KCXsNCgl1bnNpZ25lZCBzaG9ydCBpbnQgY291bnQxLCBjb3VudDIgOw0KDQoJbXNlY3MgKz0g
bXNlY3MgOw0KCWNvdW50MiA9IFJlYWRUaW1lcigpIDsNCgl3aGlsZSAobXNlY3MtLSkNCgkJew0K
CQlkbw0KCQkJew0KCQkJY291bnQxID0gY291bnQyIDsNCgkJCWNvdW50MiA9IFJlYWRUaW1lcigp
IDsNCgkJCX0gd2hpbGUgKGNvdW50MiA8PSBjb3VudDEpIDsNCgkJfQ0KCX0NCg0Kc3RhdGljIHZv
aWQgR2V0UGh5QWRyKGNoYXIgbWFjWzZdKQ0KCXsNCglpbnQgaSA7DQoNCglvdXRwb3J0YihSQkNS
MCwgTFNCKDIgKiA2KSkgOw0KCW91dHBvcnRiKFJCQ1IxLCBNU0IoMiAqIDYpKSA7DQoJb3V0cG9y
dGIoUlNBUjAsIExTQigwKSkgOw0KCW91dHBvcnRiKFJTQVIxLCBNU0IoMCkpIDsNCglvdXRwb3J0
YihDUiwgMHgwQSk7DQoJZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCgkJew0KCQltYWNbaV0gPSBp
bnBvcnRiKDB4MzEwKSA7DQoJCX0NCglvdXRwb3J0YihJU1IsIDB4NDApIDsJLy8gY2xlYXIgdGhl
IHJlbW90ZSBETUEgaW50ZXJydXB0DQoJfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8NCnN0YXRpYyB2b2lkDQpsb3dfbGV2ZWxfaW5pdChzdHJ1Y3QgbmV0aWYgKm5ldGlmKQ0Kew0K
ICBzdHJ1Y3QgcnRsODAxOSAqcnRsODAxOTsNCiAgY2hhciBtYWNbNl0gOw0KICBpbnQgaSA7DQoN
CiAgcnRsODAxOSA9IG5ldGlmLT5zdGF0ZTsNCg0KICBkaXNhYmxlKCkgOyANCiAgb3V0cG9ydGIo
Q1IsIDB4MjEpOwkJLy8gcGFnZSAwDQogIG91dHBvcnRiKERDUiwgMHg0OSkgOw0KICBvdXRwb3J0
YihSQkNSMCwgTFNCKDApKSA7DQogIG91dHBvcnRiKFJCQ1IxLCBNU0IoMCkpIDsNCiAgb3V0cG9y
dGIoUkNSLCAweDA0KSA7DQogIG91dHBvcnRiKFRDUiwgMHgwMikgOw0KICBvdXRwb3J0YihCTlJZ
LCBSWFNUQVJUX0lOSVQpIDsNCiAgb3V0cG9ydGIoUFNUQVJULCBSWFNUQVJUX0lOSVQpIDsNCiAg
b3V0cG9ydGIoUFNUT1AsIFJYU1RPUF9JTklUKSA7DQogIG91dHBvcnRiKElTUiwgMHhGRikgOw0K
ICBvdXRwb3J0YihJTVIsIDB4MEIpIDsNCiAgR2V0UGh5QWRyKG1hYykgOw0KI2lmbmRlZiBEV0wN
CiAgb3V0cG9ydGIoRENSLCAweDQ4KSA7DQojZW5kaWYNCiAgb3V0cG9ydGIoQ1IsIDB4NjEpIDsJ
CS8vIHBhZ2UgMQ0KICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQ0KCXsNCiAgICAgIHJ0bDgwMTkt
PmV0aGFkZHItPmFkZHJbaV0gPSBtYWNbaV0gOw0KCW91dHBvcnRiKFBBUjAgKyBpLCBtYWNbaV0p
IDsNCgl9DQogIG91dHBvcnRiKENVUlIsIFJYU1RBUlRfSU5JVCkgOw0KICBvdXRwb3J0YihDUiwg
MHgyMikgOwkJLy8gcGFnZSAwDQogIG91dHBvcnRiKFRDUiwgMHgwMCkgOw0KICBlbmFibGUoKSA7
DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyoNCiAqIGxvd19sZXZlbF9v
dXRwdXQoKToNCiAqDQogKiBTaG91bGQgZG8gdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgdGhl
IHBhY2tldC4gVGhlIHBhY2tldCBpcw0KICogY29udGFpbmVkIGluIHRoZSBwYnVmIHRoYXQgaXMg
cGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gVGhpcyBwYnVmDQogKiBtaWdodCBiZSBjaGFpbmVkLg0K
ICoNCiAqLw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCnN0YXRpYyBlcnJfdA0K
bG93X2xldmVsX291dHB1dChzdHJ1Y3QgcnRsODAxOSAqcnRsODAxOSwgc3RydWN0IHBidWYgKnAp
DQp7DQogIGludCBwYWNrZXRMZW5ndGgsIHNlbmRQYWNrZXRMZW5ndGgsIGkgOw0KICBzdHJ1Y3Qg
cGJ1ZiAqcTsNCiAgaW50IHdvcmQgOw0KDQogIHBhY2tldExlbmd0aCA9IDAgOw0KICBmb3IgKHEg
PSBwOyBxICE9IE5VTEw7IHEgPSBxLT5uZXh0KQ0KICAgICAgcGFja2V0TGVuZ3RoICs9IHEtPmxl
biA7DQoNCiAgb3V0cG9ydGIoQ1IsIDB4MjIpIDsJCQkvLyBzdGFydCB0aGUgTklDDQogIHdoaWxl
IChpbnBvcnRiKENSKSAmIDB4MDQpIDsJLy8gc3RpbGwgdHJhbnNtaXR0aW5nIC0gd2FpdA0KICBv
dXRwb3J0YihSU0FSMCwgTFNCKFRYU1RBUlRfSU5JVCA8PCA4KSkgOwkvLyBzZXQgc3RhcnQgYWRy
cyBmb3IgcmVtb3RlIERNQSBvcGVyYXRpb24NCiAgb3V0cG9ydGIoUlNBUjEsIE1TQihUWFNUQVJU
X0lOSVQgPDwgOCkpIDsNCiAgb3V0cG9ydGIoUkJDUjAsIExTQihwYWNrZXRMZW5ndGgpKSA7CS8v
IGxvYWQgZGF0YSBieXRlIGNvdW50IGZvciByZW1vdGUgRE1BDQogIG91dHBvcnRiKFJCQ1IxLCBN
U0IocGFja2V0TGVuZ3RoKSkgOw0KICBvdXRwb3J0YihDUiwgMHgxMikgOwkJCS8vIGRvIHJlbW90
ZSB3cml0ZSBvcGVyYXRpb24NCg0KICB3b3JkID0gLTEgOw0KICBmb3IocSA9IHA7IHEgIT0gTlVM
TDsgcSA9IHEtPm5leHQpDQoJew0KICAgIAkvKiBTZW5kIHRoZSBkYXRhIGZyb20gdGhlIHBidWYg
dG8gdGhlIGludGVyZmFjZSwgb25lIHBidWYgYXQgYQ0KICAgICAgIHRpbWUuIFRoZSBzaXplIG9m
IHRoZSBkYXRhIGluIGVhY2ggcGJ1ZiBpcyBrZXB0IGluIHRoZSAtPmxlbg0KICAgICAgIHZhcmlh
YmxlLiANCgkqLw0KI2lmZGVmIERXTA0KICAgICAgdTE2X3QgKnAgPSBxLT5wYXlsb2FkIDsNCglm
b3IgKGkgPSAwOyBpIDwgcS0+bGVuOyBpICs9IDIpIA0KCQl7DQoJCW91dHBvcnR3KFJETUFQT1JU
LCAqcCsrKSA7DQoJCX0NCiNlbHNlDQogICAgICBjaGFyICpwID0gcS0+cGF5bG9hZCA7DQoJZm9y
IChpID0gMDsgaSA8IHEtPmxlbjsgaSsrKSANCgkJew0KCQlvdXRwb3J0YihSRE1BUE9SVCwgKnAr
KykgOw0KCQl9DQojZW5kaWYNCgl9DQogIG91dHBvcnRiKElTUiwgMHg0MCkgOwkvLyBjbGVhciB0
aGUgcmVtb3RlIERNQSBpbnRlcnJ1cHQNCg0KICBzZW5kUGFja2V0TGVuZ3RoID0gcGFja2V0TGVu
Z3RoIDsNCi8vZHdsICBpZiAoc2VuZFBhY2tldExlbmd0aCA8IEVUSEVSTkVUX01JTl9QQUNLRVRf
TEVOR1RIKQ0KLy9kd2wgICAgICBzZW5kUGFja2V0TGVuZ3RoID0gRVRIRVJORVRfTUlOX1BBQ0tF
VF9MRU5HVEggOw0KICBvdXRwb3J0YihUUFNSLCBUWFNUQVJUX0lOSVQpIDsJLy8gbG9hZCBiZWdp
bm5pbmcgcGFnZSBmb3IgdHJhbnNtaXQgYnVmZmVyDQogIG91dHBvcnRiKFRCQ1IwLCBMU0Ioc2Vu
ZFBhY2tldExlbmd0aCkpIDsNCiAgb3V0cG9ydGIoVEJDUjEsIE1TQihzZW5kUGFja2V0TGVuZ3Ro
KSkgOw0KICBvdXRwb3J0YihJU1IsIDB4MDIpIDsJLy8gY2xlYXIgdGhlIHBhY2tldCBzdG9yZWQg
aW50ZXJydXB0DQogIG91dHBvcnRiKENSLCAweDI0KSA7CQkJLy8gc2VuZCB0cmFuc21pdCBidWZm
ZXIgb250byB0aGUgbmV0d29yaw0KICANCiNpZmRlZiBMSU5LX1NUQVRTDQogIHN0YXRzLmxpbmsu
eG1pdCsrOw0KI2VuZGlmIC8qIExJTktfU1RBVFMgKi8gICAgICANCg0KICByZXR1cm4gRVJSX09L
Ow0KfQ0KDQp2b2lkIG92ZXJydW4odm9pZCkNCgl7DQoJdW5zaWduZWQgY2hhciBkYXRhX0wsIHJl
c2VuZCA7DQoNCglkaXNhYmxlKCkgOw0KCWRhdGFfTCA9IGlucG9ydGIoQ1IpIDsNCglvdXRwb3J0
YihDUiwgMHgyMSkgOw0KCVdhaXRNUygyKSA7DQoJb3V0cG9ydGIoUkJDUjAsIExTQigwKSkgOw0K
CW91dHBvcnRiKFJCQ1IxLCBNU0IoMCkpIDsNCglpZiAoIShkYXRhX0wgJiAweDA0KSkgcmVzZW5k
ID0gMCA7DQoJZWxzZQ0KCQl7DQoJCWRhdGFfTCA9IGlucG9ydGIoSVNSKSA7DQoJCXJlc2VuZCA9
IChkYXRhX0wgJiAweDBBKSA/IDAgOiAxIDsNCgkJfQ0KCW91dHBvcnRiKFRDUiwgMHgwMikgOw0K
CW91dHBvcnRiKENSLCAweDIyKSA7DQoJb3V0cG9ydGIoQk5SWSwgUlhTVEFSVF9JTklUKSA7DQoJ
b3V0cG9ydGIoQ1IsIDB4NjIpIDsNCglvdXRwb3J0YihDVVJSLCBSWFNUQVJUX0lOSVQpIDsNCglv
dXRwb3J0YihDUiwgMHgyMikgOw0KCW91dHBvcnRiKElTUiwgMHgxMCkgOw0KCW91dHBvcnRiKFRD
UiwgMHgwMCkgOw0KCW91dHBvcnRiKElTUiwgMHhGRikgOw0KCWVuYWJsZSgpIDsNCgl9DQoNCi8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyoNCiAqIGxvd19sZXZlbF9pbnB1dCgpOg0K
ICoNCiAqIFNob3VsZCBhbGxvY2F0ZSBhIHBidWYgYW5kIHRyYW5zZmVyIHRoZSBieXRlcyBvZiB0
aGUgaW5jb21pbmcNCiAqIHBhY2tldCBmcm9tIHRoZSBpbnRlcmZhY2UgaW50byB0aGUgcGJ1Zi4N
CiAqDQogKi8NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0Kc3RhdGljIHVuc2lnbmVk
IGludCBjdXJyZW50UmV0cmlldmVBZGRyZXNzIDsNCnN0YXRpYyBzdHJ1Y3QgcGJ1ZiAqDQpsb3df
bGV2ZWxfaW5wdXQoc3RydWN0IHJ0bDgwMTkgKnJ0bDgwMTkpDQp7DQojZGVmaW5lIEVORVRQQUNL
RVRTVEFUVVMJMAkvLyBvZmZzZXQgb2YgaXRlbXMgaW4gTklDIHBhZ2UgaGVhZGVyDQojZGVmaW5l
IE5FWFRCTE9DS19QVFIJCTENCiNkZWZpbmUgRU5FVFBBQ0tFVExFTkwJCTINCiNkZWZpbmUgRU5F
VFBBQ0tFVExFTkgJCTMNCiAgdW5zaWduZWQgY2hhciBuZXh0UGFnZSwgaSwgYm5yeSwgcGFnZWhl
YWRlcls0XSA7DQogIHVuc2lnbmVkIGludCByeGxlbiA7DQogIHN0cnVjdCBwYnVmICpwLCAqcTsN
CiAgdTE2X3QgbGVuOw0KDQogIGlmIChpbnBvcnRiKElTUikgJiAweDEwKQkJLy8gY2hlY2sgZm9y
IGFuZCBoYW5kbGUgYW4gb3ZlcnJ1bg0KCW92ZXJydW4oKSA7DQoNCiAgb3V0cG9ydGIoQ1IsIDB4
NjIpIDsJCQkvLyByZWFkIENVUlIgZnJvbSBwYWdlIDENCiAgaSA9IGlucG9ydGIoQ1VSUikgOw0K
DQogIG91dHBvcnRiKENSLCAweDIyKSA7CQkJLy8gcmVhZCBib3VuZGFyeSByZWcgKHB0cyB0byBz
dGFydCBvZiBwYWNrZXQpDQogIGJucnkgPSBpbnBvcnRiKEJOUlkpIDsNCiAgaWYgKGJucnkgPT0g
aSkgDQoJew0KCWdvdG8gZXJyIDsJLy8gbm90aGluZyBpbiB0aGUgYnVmZmVyDQoJfQ0KDQogIG91
dHBvcnRiKElTUiwgMHgwMSkgOwkvLyBjbGVhciBwYWNrZXQgcmVjZWl2ZWQgaW50ZXJydXB0IGZs
YWcNCg0KICAvLyBpZiBib3VuZGFyeSBwdHIgaXMgaW52YWxpZCwgcmVzZXQgYnVmZmVyIGFuZCBl
eGl0DQogIGlmIChibnJ5ID49IFJYU1RPUF9JTklUIHx8IGJucnkgPCBSWFNUQVJUX0lOSVQpDQoJ
ew0KCW91dHBvcnRiKEJOUlksIFJYU1RBUlRfSU5JVCkgOw0KCW91dHBvcnRiKENSLCAweDYyKSA7
DQoJb3V0cG9ydGIoQ1VSUiwgUlhTVEFSVF9JTklUKSA7DQoJb3V0cG9ydGIoQ1IsIDB4MjIpIDsN
Cglnb3RvIGVyciA7DQoJfQ0KDQogIC8vIFN0YXJ0IERNQSB0byB0cmFuc2ZlciB0aGUgcGFja2V0
IGhlYWRlcg0KICBvdXRwb3J0YihSQkNSMCwgTFNCKDQpKSA7DQogIG91dHBvcnRiKFJCQ1IxLCBN
U0IoNCkpIDsNCiAgb3V0cG9ydGIoUlNBUjAsIDApIDsNCiAgb3V0cG9ydGIoUlNBUjEsIGJucnkp
IDsNCg0KICBvdXRwb3J0YihDUiwgMHgwQSkgOw0KI2lmZGVmIERXTA0KICAoKHUxNl90ICopIHBh
Z2VoZWFkZXIpWzBdID0gaW5wb3J0dyhSRE1BUE9SVCkgOw0KICAoKHUxNl90ICopIHBhZ2VoZWFk
ZXIpWzFdID0gaW5wb3J0dyhSRE1BUE9SVCkgOw0KI2Vsc2UNCiAgZm9yIChpID0gMDsgaSA8IDQ7
IGkrKykNCgl7DQoJcGFnZWhlYWRlcltpXSA9IGlucG9ydGIoUkRNQVBPUlQpIDsNCgl9DQojZW5k
aWYNCg0KICAvLyBlbmQgdGhlIERNQSBvcGVyYXRpb24NCiAgb3V0cG9ydGIoQ1IsIDB4MjIpIDsN
CiAgZm9yIChpID0gMDsgaSA8PSAyMDsgaSsrKQ0KCWlmIChpbnBvcnRiKElTUikgJiAweDQwKSBi
cmVhayA7DQogIG91dHBvcnRiKElTUiwgMHg0MCkgOw0KDQogIHJ4bGVuID0gKCgodTE2X3QpIHBh
Z2VoZWFkZXJbRU5FVFBBQ0tFVExFTkhdKSA8PCA4KSArIHBhZ2VoZWFkZXJbRU5FVFBBQ0tFVExF
TkxdIDsNCiAgbmV4dFBhZ2UgPSBwYWdlaGVhZGVyW05FWFRCTE9DS19QVFJdIDsNCiAgY3VycmVu
dFJldHJpZXZlQWRkcmVzcyA9ICgoKHUxNl90KSBibnJ5KSA8PCA4KSArIDQgOw0KDQogIC8vIGlm
IG5leHRQYWdlIHB0ciBpcyBpbnZhbGlkLCBwa3QgaXMgbm90IHJlYWR5IA0KICBpZiAobmV4dFBh
Z2UgPj0gUlhTVE9QX0lOSVQgfHwgbmV4dFBhZ2UgPCBSWFNUQVJUX0lOSVQpIA0KCXsNCglnb3Rv
IGVyciA7DQoJfQ0KDQogICAgLyogT2J0YWluIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQgYW5kIHB1
dCBpdCBpbnRvIHRoZSAibGVuIg0KICAgICB2YXJpYWJsZS4gKi8NCiAgbGVuID0gcnhsZW4gLSA0
IDsNCg0KICAvKiBXZSBhbGxvY2F0ZSBhIHBidWYgY2hhaW4gb2YgcGJ1ZnMgZnJvbSB0aGUgcG9v
bC4gKi8NCiAgcCA9IHBidWZfYWxsb2MoUEJVRl9MSU5LLCBsZW4sIFBCVUZfUE9PTCk7DQogIGlm
KHAgPT0gTlVMTCkgDQoJew0KCWdvdG8gZXJyIDsNCgl9DQoNCiAgLyogV2UgaXRlcmF0ZSBvdmVy
IHRoZSBwYnVmIGNoYWluIHVudGlsIHdlIGhhdmUgcmVhZCB0aGUgZW50aXJlDQogICAgIHBhY2tl
dCBpbnRvIHRoZSBwYnVmLiANCiAgKi8NCiAgb3V0cG9ydGIoUkJDUjAsIExTQihsZW4pKSA7CQkv
LyBpbml0aWF0ZSBETUEgdG8gdHJhbnNmZXIgdGhlIGRhdGENCiAgb3V0cG9ydGIoUkJDUjEsIE1T
QihsZW4pKSA7DQogIG91dHBvcnRiKFJTQVIwLCBMU0IoY3VycmVudFJldHJpZXZlQWRkcmVzcykp
IDsNCiAgb3V0cG9ydGIoUlNBUjEsIE1TQihjdXJyZW50UmV0cmlldmVBZGRyZXNzKSkgOw0KICBv
dXRwb3J0YihDUiwgMHgwQSkgOw0KICBmb3IocSA9IHA7IHEgIT0gTlVMTDsgcSA9IHEtPm5leHQp
DQoJew0KCS8qIFJlYWQgZW5vdWdoIGJ5dGVzIHRvIGZpbGwgdGhpcyBwYnVmIGluIHRoZSBjaGFp
bi4gVGhlDQogICAgICAgICBhdmFsaWFibGUgZGF0YSBpbiB0aGUgcGJ1ZiBpcyBnaXZlbiBieSB0
aGUgcS0+bGVuDQogICAgIAkgICB2YXJpYWJsZS4gDQoJKi8NCiNpZmRlZiBEV0wNCiAgICAgIHUx
Nl90ICpwID0gcS0+cGF5bG9hZCA7DQoJZm9yIChpID0gMDsgaSA8IHEtPmxlbjsgaSArPSAyKQ0K
CQl7DQoJCSpwKysgPSBpbnBvcnR3KFJETUFQT1JUKSA7DQoJCX0NCgl9DQojZWxzZQ0KICAgICAg
Y2hhciAqcCA9IHEtPnBheWxvYWQgOw0KCWZvciAoaSA9IDA7IGkgPCBxLT5sZW47IGkrKykNCgkJ
ew0KCQkqcCsrID0gaW5wb3J0YihSRE1BUE9SVCkgOw0KCQl9DQoJfQ0KI2VuZGlmDQoNCiAgb3V0
cG9ydGIoQ1IsIDB4MjIpOwkvLyBlbmQgdGhlIERNQSBvcGVyYXRpb24NCiAgZm9yIChpID0gMDsg
aSA8PSAyMDsgaSsrKQ0KCWlmIChpbnBvcnRiKElTUikgJiAoMSA8PCA2KSkgYnJlYWsgOw0KICBv
dXRwb3J0YihJU1IsIDEgPDwgNikgOw0KDQogIGN1cnJlbnRSZXRyaWV2ZUFkZHJlc3MgKz0gbGVu
IDsNCiAgaWYgKGN1cnJlbnRSZXRyaWV2ZUFkZHJlc3MgPj0gKFJYU1RPUF9JTklUIDw8IDgpKQ0K
CWN1cnJlbnRSZXRyaWV2ZUFkZHJlc3MgLT0gKFJYU1RPUF9JTklUIC0gUlhTVEFSVF9JTklUKSA8
PCA4IDsNCg0KICBvdXRwb3J0YihDUiwgMHgyMik7CS8vIGVuZCB0aGUgRE1BIG9wZXJhdGlvbg0K
ICBmb3IgKGkgPSAwOyBpIDw9IDIwOyBpKyspDQoJaWYgKGlucG9ydGIoSVNSKSAmICgxIDw8IDYp
KSBicmVhayA7DQogIG91dHBvcnRiKElTUiwgMSA8PCA2KSA7DQoNCiAgb3V0cG9ydGIoQk5SWSwg
bmV4dFBhZ2UpIDsgLy8gc2V0IGJvdW5kYXJ5IHJlZyB0byBwb2ludCB0byBzdGFydCBvZiBuZXh0
IHBhY2tldA0KDQojaWZkZWYgTElOS19TVEFUUw0KICBzdGF0cy5saW5rLnJlY3YrKzsNCiNlbmRp
ZiAvKiBMSU5LX1NUQVRTICovICAgICAgDQogIHJldHVybiBwIDsNCg0KZXJyOg0KLy8gIGRyb3Bf
cGFja2V0KCk7DQojaWZkZWYgTElOS19TVEFUUw0KICBzdGF0cy5saW5rLm1lbWVycisrOw0KICBz
dGF0cy5saW5rLmRyb3ArKzsNCiNlbmRpZiAvKiBMSU5LX1NUQVRTICovICAgICAgDQogIHJldHVy
biBOVUxMIDsNCn0NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyoNCiAqIHJ0bDgw
MTlfb3V0cHV0KCk6DQogKg0KICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFRDUC9J
UCBzdGFjayB3aGVuIGFuIElQIHBhY2tldA0KICogc2hvdWxkIGJlIHNlbnQuIEl0IGNhbGxzIHRo
ZSBmdW5jdGlvbiBjYWxsZWQgbG93X2xldmVsX291dHB1dCgpIHRvDQogKiBkbyB0aGUgYWN0dWFs
bCB0cmFuc21pc3Npb24gb2YgdGhlIHBhY2tldC4NCiAqDQogKi8NCi8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLw0Kc3RhdGljIGVycl90DQpydGw4MDE5X291dHB1dChzdHJ1Y3QgbmV0aWYg
Km5ldGlmLCBzdHJ1Y3QgcGJ1ZiAqcCwNCgkJICBzdHJ1Y3QgaXBfYWRkciAqaXBhZGRyKQ0Kew0K
ICBzdHJ1Y3QgcnRsODAxOSAqcnRsODAxOTsNCiAgc3RydWN0IHBidWYgKnE7DQogIHN0cnVjdCBl
dGhfaGRyICpldGhoZHI7DQogIHN0cnVjdCBldGhfYWRkciAqZGVzdCwgbWNhc3RhZGRyOw0KICBz
dHJ1Y3QgaXBfYWRkciAqcXVlcnlhZGRyOw0KICBlcnJfdCBlcnI7DQogIHU4X3QgaTsNCiAgDQog
IHJ0bDgwMTkgPSBuZXRpZi0+c3RhdGU7DQoNCiAgLyogTWFrZSByb29tIGZvciBFdGhlcm5ldCBo
ZWFkZXIuICovDQogIGlmKHBidWZfaGVhZGVyKHAsIDE0KSAhPSAwKSB7DQogICAgLyogVGhlIHBi
dWZfaGVhZGVyKCkgY2FsbCBzaG91bGRuJ3QgZmFpbCwgYnV0IHdlIGFsbG9jYXRlIGFuIGV4dHJh
DQogICAgICAgcGJ1ZiBqdXN0IGluIGNhc2UuICovDQogICAgcSA9IHBidWZfYWxsb2MoUEJVRl9M
SU5LLCAxNCwgUEJVRl9SQU0pOw0KICAgIGlmKHEgPT0gTlVMTCkgew0KI2lmZGVmIExJTktfU1RB
VFMNCiAgICAgIHN0YXRzLmxpbmsuZHJvcCsrOw0KICAgICAgc3RhdHMubGluay5tZW1lcnIrKzsN
CiNlbmRpZiAvKiBMSU5LX1NUQVRTICovICAgICAgDQogICAgICByZXR1cm4gRVJSX01FTTsNCiAg
ICB9DQogICAgcGJ1Zl9jaGFpbihxLCBwKTsNCiAgICBwID0gcTsNCiAgfQ0KDQogIC8qIENvbnN0
cnVjdCBFdGhlcm5ldCBoZWFkZXIuIFN0YXJ0IHdpdGggbG9va2luZyB1cCBkZWNpZGluZyB3aGlj
aA0KICAgICBNQUMgYWRkcmVzcyB0byB1c2UgYXMgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLiBCcm9h
ZGNhc3RzIGFuZA0KICAgICBtdWx0aWNhc3RzIGFyZSBzcGVjaWFsLCBhbGwgb3RoZXIgYWRkcmVz
c2VzIGFyZSBsb29rZWQgdXAgaW4gdGhlDQogICAgIEFSUCB0YWJsZS4gKi8NCiAgcXVlcnlhZGRy
ID0gaXBhZGRyOw0KICBpZihpcF9hZGRyX2lzYW55KGlwYWRkcikgfHwNCiAgICAgaXBfYWRkcl9p
c2Jyb2FkY2FzdChpcGFkZHIsICYobmV0aWYtPm5ldG1hc2spKSkgew0KICAgIGRlc3QgPSAoc3Ry
dWN0IGV0aF9hZGRyICopJmV0aGJyb2FkY2FzdDsNCiAgfSBlbHNlIGlmKGlwX2FkZHJfaXNtdWx0
aWNhc3QoaXBhZGRyKSkgew0KICAgIC8qIEhhc2ggSVAgbXVsdGljYXN0IGFkZHJlc3MgdG8gTUFD
IGFkZHJlc3MuICovDQogICAgbWNhc3RhZGRyLmFkZHJbMF0gPSAweDAxOw0KICAgIG1jYXN0YWRk
ci5hZGRyWzFdID0gMHgwOw0KICAgIG1jYXN0YWRkci5hZGRyWzJdID0gMHg1ZTsNCiAgICBtY2Fz
dGFkZHIuYWRkclszXSA9IGlwNF9hZGRyMihpcGFkZHIpICYgMHg3ZjsNCiAgICBtY2FzdGFkZHIu
YWRkcls0XSA9IGlwNF9hZGRyMyhpcGFkZHIpOw0KICAgIG1jYXN0YWRkci5hZGRyWzVdID0gaXA0
X2FkZHI0KGlwYWRkcik7DQogICAgZGVzdCA9ICZtY2FzdGFkZHI7DQogIH0gZWxzZSB7DQoNCiAg
ICBpZihpcF9hZGRyX21hc2tjbXAoaXBhZGRyLCAmKG5ldGlmLT5pcF9hZGRyKSwgJihuZXRpZi0+
bmV0bWFzaykpKSB7DQogICAgICAvKiBVc2UgZGVzdGluYXRpb24gSVAgYWRkcmVzcyBpZiB0aGUg
ZGVzdGluYXRpb24gaXMgb24gdGhlIHNhbWUNCiAgICAgICAgIHN1Ym5ldCBhcyB3ZSBhcmUuICov
DQogICAgICBxdWVyeWFkZHIgPSBpcGFkZHI7DQogICAgfSBlbHNlIHsNCiAgICAgIC8qIE90aGVy
d2lzZSB3ZSB1c2UgdGhlIGRlZmF1bHQgcm91dGVyIGFzIHRoZSBhZGRyZXNzIHRvIHNlbmQNCiAg
ICAgICAgIHRoZSBFdGhlcm5ldCBmcmFtZSB0by4gKi8NCiAgICAgIHF1ZXJ5YWRkciA9ICYobmV0
aWYtPmd3KTsNCiAgICB9DQogICAgZGVzdCA9IGFycF9sb29rdXAocXVlcnlhZGRyKTsNCiAgfQ0K
DQoNCiAgLyogSWYgdGhlIGFycF9sb29rdXAoKSBkaWRuJ3QgZmluZCBhbiBhZGRyZXNzLCB3ZSBz
ZW5kIG91dCBhbiBBUlANCiAgICAgcXVlcnkgZm9yIHRoZSBJUCBhZGRyZXNzLiAqLw0KICBpZihk
ZXN0ID09IE5VTEwpIHsNCiAgICBxID0gYXJwX3F1ZXJ5KG5ldGlmLCBydGw4MDE5LT5ldGhhZGRy
LCBxdWVyeWFkZHIpOw0KICAgIGlmKHEgIT0gTlVMTCkgew0KICAgICAgZXJyID0gbG93X2xldmVs
X291dHB1dChydGw4MDE5LCBxKTsNCiAgICAgIHBidWZfZnJlZShxKTsNCiAgICAgIHJldHVybiBl
cnI7DQogICAgfQ0KI2lmZGVmIExJTktfU1RBVFMNCiAgICBzdGF0cy5saW5rLmRyb3ArKzsNCiAg
ICBzdGF0cy5saW5rLm1lbWVycisrOw0KI2VuZGlmIC8qIExJTktfU1RBVFMgKi8gICAgICAgICAg
DQogICAgcmV0dXJuIEVSUl9NRU07DQogIH0NCiAgZXRoaGRyID0gcC0+cGF5bG9hZDsNCg0KICBm
b3IoaSA9IDA7IGkgPCA2OyBpKyspIHsNCiAgICBldGhoZHItPmRlc3QuYWRkcltpXSA9IGRlc3Qt
PmFkZHJbaV07DQogICAgZXRoaGRyLT5zcmMuYWRkcltpXSA9IHJ0bDgwMTktPmV0aGFkZHItPmFk
ZHJbaV07DQogIH0NCiAgDQogIGV0aGhkci0+dHlwZSA9IGh0b25zKEVUSFRZUEVfSVApOw0KICAN
CiAgcmV0dXJuIGxvd19sZXZlbF9vdXRwdXQocnRsODAxOSwgcCk7DQoNCn0NCg0KaW50IHJ0bDgw
MTlfcGFja2V0X3JjdmQodm9pZCkNCgl7DQoJcmV0dXJuIChpbnBvcnRiKElTUikgJiAweDAxKSAh
PSAwIDsNCgl9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyoNCiAqIHJ0bDgw
MTlfaW5wdXQoKToNCiAqDQogKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBh
IHBhY2tldCBpcyByZWFkeSB0byBiZSByZWFkDQogKiBmcm9tIHRoZSBpbnRlcmZhY2UuIEl0IHVz
ZXMgdGhlIGZ1bmN0aW9uIGxvd19sZXZlbF9pbnB1dCgpIHRoYXQNCiAqIHNob3VsZCBoYW5kbGUg
dGhlIGFjdHVhbCByZWNlcHRpb24gb2YgYnl0ZXMgZnJvbSB0aGUgbmV0d29yaw0KICogaW50ZXJm
YWNlLg0KICoNCiAqLw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQp2b2lkDQpydGw4
MDE5X2lucHV0KHN0cnVjdCBuZXRpZiAqbmV0aWYpDQp7DQogIHN0cnVjdCBydGw4MDE5ICpydGw4
MDE5Ow0KICBzdHJ1Y3QgZXRoX2hkciAqZXRoaGRyOw0KICBzdHJ1Y3QgcGJ1ZiAqcDsNCg0KICBy
dGw4MDE5ID0gbmV0aWYtPnN0YXRlOw0KICANCiAgcCA9IGxvd19sZXZlbF9pbnB1dChydGw4MDE5
KTsNCg0KICBpZihwICE9IE5VTEwpIHsNCg0KI2lmZGVmIExJTktfU1RBVFMNCiAgICBzdGF0cy5s
aW5rLnJlY3YrKzsNCiNlbmRpZiAvKiBMSU5LX1NUQVRTICovDQoNCiAgICBldGhoZHIgPSBwLT5w
YXlsb2FkOw0KICAgIA0KICAgIHN3aXRjaChodG9ucyhldGhoZHItPnR5cGUpKSB7DQogICAgY2Fz
ZSBFVEhUWVBFX0lQOg0KICAgICAgYXJwX2lwX2lucHV0KG5ldGlmLCBwKTsNCiAgICAgIHBidWZf
aGVhZGVyKHAsIC0xNCk7DQogICAgICBuZXRpZi0+aW5wdXQocCwgbmV0aWYpOw0KICAgICAgYnJl
YWs7DQogICAgY2FzZSBFVEhUWVBFX0FSUDoNCiAgICAgIHAgPSBhcnBfYXJwX2lucHV0KG5ldGlm
LCBydGw4MDE5LT5ldGhhZGRyLCBwKTsNCiAgICAgIGlmKHAgIT0gTlVMTCkgew0KCWxvd19sZXZl
bF9vdXRwdXQocnRsODAxOSwgcCk7DQoJcGJ1Zl9mcmVlKHApOw0KICAgICAgfQ0KICAgICAgYnJl
YWs7DQogICAgZGVmYXVsdDoNCiAgICAgIHBidWZfZnJlZShwKTsNCiAgICAgIGJyZWFrOw0KICAg
IH0NCiAgfQ0KfQ0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpzdGF0aWMgdm9pZA0K
YXJwX3RpbWVyKHZvaWQgKmFyZykNCnsNCiAgYXJwX3RtcigpOw0KICBzeXNfdGltZW91dChBUlBf
VE1SX0lOVEVSVkFMLCAoc3lzX3RpbWVvdXRfaGFuZGxlcilhcnBfdGltZXIsIE5VTEwpOw0KfQ0K
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKg0KICogcnRsODAxOV9pbml0KCk6DQog
Kg0KICogU2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9ncmFtIHRv
IHNldCB1cCB0aGUNCiAqIG5ldHdvcmsgaW50ZXJmYWNlLiBJdCBjYWxscyB0aGUgZnVuY3Rpb24g
bG93X2xldmVsX2luaXQoKSB0byBkbyB0aGUNCiAqIGFjdHVhbCBzZXR1cCBvZiB0aGUgaGFyZHdh
cmUuDQogKg0KICovDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCnZvaWQNCnJ0bDgw
MTlfaW5pdChzdHJ1Y3QgbmV0aWYgKm5ldGlmKQ0Kew0KICBzdHJ1Y3QgcnRsODAxOSAqcnRsODAx
OTsNCiAgICANCiAgcnRsODAxOSA9IG1lbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBydGw4MDE5KSk7
DQogIG5ldGlmLT5zdGF0ZSA9IHJ0bDgwMTk7DQogIG5ldGlmLT5uYW1lWzBdID0gSUZOQU1FMDsN
CiAgbmV0aWYtPm5hbWVbMV0gPSBJRk5BTUUxOw0KICBuZXRpZi0+b3V0cHV0ID0gcnRsODAxOV9v
dXRwdXQ7DQogIG5ldGlmLT5saW5rb3V0cHV0ID0gbG93X2xldmVsX291dHB1dDsNCiAgDQogIHJ0
bDgwMTktPmV0aGFkZHIgPSAoc3RydWN0IGV0aF9hZGRyICopJihuZXRpZi0+aHdhZGRyWzBdKTsN
CiAgDQogIGxvd19sZXZlbF9pbml0KG5ldGlmKTsNCiAgYXJwX2luaXQoKTsNCg0KICBzeXNfdGlt
ZW91dChBUlBfVE1SX0lOVEVSVkFMLCAoc3lzX3RpbWVvdXRfaGFuZGxlcilhcnBfdGltZXIsIE5V
TEwpOw0KDQp9DQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg==

--=_C19D17CB.7F1E56A4--
[This message was sent through the lwip discussion list.]




reply via email to

[Prev in Thread] Current Thread [Next in Thread]