[parisc-linux-cvs] ioremap() and really working framebuffer

Helge Deller deller@gmx.de
Sat, 16 Jun 2001 19:20:18 +0200


--------------Boundary-00=_UH91EI82GDW2OM72245K
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
Subject: 

Hi,

The following patch will
- activate the new ioremap() and iounmap() functions from arch/mm/ioremap.c
- make /dev/fb0 a _real_ framebuffer device, which is directly accessible via 
memory reads/writes (expample: dd if=/dev/zero of=/dev/fb0 bs=2048 count=100)
- add more functionality for other graphic chips than just Artist(unfinished!)

The main question is now, if I oversight anything with ioremap() or does it 
just works and I may commit my changes ?

Greetings,

Helge
--------------Boundary-00=_UH91EI82GDW2OM72245K
Content-Type: text/x-c;
  charset="iso-8859-1";
  name="LOG10"
Content-Transfer-Encoding: base64
Content-Description: patch
Content-Disposition: attachment; filename="LOG10"

SW5kZXg6IGFyY2gvcGFyaXNjL21tL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21l
L2N2cy9wYXJpc2MvbGludXgvYXJjaC9wYXJpc2MvbW0vTWFrZWZpbGUsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNQpkaWZmIC11IC1yMS41IE1ha2VmaWxlCi0tLSBNYWtlZmlsZQkyMDAxLzAxLzI4
IDA0OjE2OjQwCTEuNQorKysgTWFrZWZpbGUJMjAwMS8wNi8xNiAxNjo1OToyNwpAQCAtOCw2ICs4
LDYgQEAKICMgTm90ZSAyISBUaGUgQ0ZMQUdTIGRlZmluaXRpb24gaXMgbm93IGluIHRoZSBtYWlu
IG1ha2VmaWxlLi4uCiAKIE9fVEFSR0VUIDo9IG1tLm8KLW9iai15CSA6PSBpbml0Lm8gZmF1bHQu
byBleHRhYmxlLm8KK29iai15CSA6PSBpbml0Lm8gZmF1bHQubyBleHRhYmxlLm8gaW9yZW1hcC5v
CiAKIGluY2x1ZGUgJChUT1BESVIpL1J1bGVzLm1ha2UKCgoKCkluZGV4OiBpbmNsdWRlL2FzbS1w
YXJpc2MvaW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnMvcGFyaXNjL2xpbnV4L2lu
Y2x1ZGUvYXNtLXBhcmlzYy9pby5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXUg
LXIxLjE3IGlvLmgKLS0tIGlvLmgJMjAwMS8wNC8xMSAxOToxMjo1MAkxLjE3CisrKyBpby5oCTIw
MDEvMDYvMTYgMTY6NTk6NDIKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25m
aWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+
CiAjaW5jbHVkZSA8YXNtL2dzYy5oPgogCiAjZGVmaW5lIHZpcnRfdG9fcGh5cyhhKSAoKHVuc2ln
bmVkIGxvbmcpX19wYShhKSkKQEAgLTQ5LDggKzUwLDI1IEBACiAvKiBSaWdodCBub3cgd2UgZG9u
J3Qgc3VwcG9ydCBEaW5vLW9uLWEtY2FyZCBhbmQgViBjbGFzcyB3aGljaCBkbyBQQ0kgTU1JTwog
ICogdGhyb3VnaCBhZGRyZXNzL2RhdGEgcmVnaXN0ZXJzLiAqLwogCi0jZGVmaW5lIGlvcmVtYXAo
X19vZmZzZXQsIF9fc2l6ZSkJKCh2b2lkICopKF9fb2Zmc2V0KSkKLSNkZWZpbmUgaW91bm1hcChf
X2FkZHIpCitleHRlcm4gdm9pZCAqIF9faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5z
aWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIGlubGluZSB2
b2lkICogaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQor
eworCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCAwKTsKK30KKworLyoKKyAqIFRoaXMg
b25lIG1hcHMgaGlnaCBhZGRyZXNzIGRldmljZSBtZW1vcnkgYW5kIHR1cm5zIG9mZiBjYWNoaW5n
IGZvciB0aGF0IGFyZWEuCisgKiBpdCdzIHVzZWZ1bCBpZiBzb21lIGNvbnRyb2wgcmVnaXN0ZXJz
IGFyZSBpbiBzdWNoIGFuIGFyZWEgYW5kIHdyaXRlIGNvbWJpbmluZworICogb3IgcmVhZCBjYWNo
aW5nIGlzIG5vdCBkZXNpcmFibGU6CisgKi8KK2V4dGVybiBpbmxpbmUgdm9pZCAqIGlvcmVtYXBf
bm9jYWNoZSAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAg
ICAgICAgcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIF9QQUdFX05PX0NBQ0hFIC8qIF9Q
QUdFX1BDRCAqLyk7Cit9CisKK2V4dGVybiB2b2lkIGlvdW5tYXAodm9pZCAqYWRkcik7CisKIAog
I2RlZmluZSBkbWFfY2FjaGVfaW52KF9zdGFydCxfc2l6ZSkJCWRvIHsgZmx1c2hfa2VybmVsX2Rj
YWNoZV9yYW5nZShfc3RhcnQsX3NpemUpOyB9IHdoaWxlKDApCiAjZGVmaW5lIGRtYV9jYWNoZV93
YmFjayhfc3RhcnQsX3NpemUpCQlkbyB7IGZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2UoX3N0YXJ0
LF9zaXplKTsgfSB3aGlsZSAoMCkKCgpJbmRleDogaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnMvcGFyaXNjL2xpbnV4L2luY2x1ZGUvYXNt
LXBhcmlzYy9wZ3RhYmxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzYKZGlmZiAtdSAtcjEu
MzYgcGd0YWJsZS5oCi0tLSBwZ3RhYmxlLmgJMjAwMS8wMy8yMiAxNjoyNDoxOQkxLjM2CisrKyBw
Z3RhYmxlLmgJMjAwMS8wNi8xNiAxNjo1OTo0MgpAQCAtNjIsNiArNjIsNyBAQAogCiAjZGVmaW5l
IF9QQUdFX1JFQUQJMHgwMDEJLyogcmVhZCBhY2Nlc3MgYWxsb3dlZCAqLwogI2RlZmluZSBfUEFH
RV9XUklURQkweDAwMgkvKiB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9S
VyAoX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFKQogI2RlZmluZSBfUEFHRV9FWEVDCTB4MDA0CS8q
IGV4ZWN1dGUgYWNjZXNzIGFsbG93ZWQgKi8KICNkZWZpbmUgX1BBR0VfR0FURVdBWQkweDAwOAkv
KiBwcml2aWxlZ2UgcHJvbW90aW9uIGFsbG93ZWQgKi8KICNkZWZpbmUgX1BBR0VfR0FURVdBWV9C
SVQgMjgJLyogX1BBR0VfR0FURVdBWSAmIF9QQUdFX0dBVEVXQVlfQklUIG5lZWQgKi8KCgoKSW5k
ZXg6IGluY2x1ZGUvdmlkZW8vZmJjb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnMv
cGFyaXNjL2xpbnV4L2luY2x1ZGUvdmlkZW8vZmJjb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42CmRpZmYgLXUgLXIxLjYgZmJjb24uaAotLS0gZmJjb24uaAkyMDAxLzAzLzAyIDAwOjE2OjM2
CTEuNgorKysgZmJjb24uaAkyMDAxLzA2LzE2IDE3OjAwOjA2CkBAIC0xOCw3ICsxOCw2IEBACiAK
ICNpbmNsdWRlIDxhc20vaW8uaD4KIAotCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICogIGBzd2l0Y2gnIGZvciB0aGUgTG93IExldmVsIE9wZXJhdGlvbnMK
ICAgICAgKi8KQEAgLTIwNSwxNiArMjA0LDYgQEAKICNkZWZpbmUgZmJfd3JpdGV3IHNidXNfd3Jp
dGV3CiAjZGVmaW5lIGZiX3dyaXRlbCBzYnVzX3dyaXRlbAogI2RlZmluZSBmYl9tZW1zZXQgc2J1
c19tZW1zZXRfaW8KLQotI2VsaWYgZGVmaW5lZChfX2hwcGFfXykKLQotI2RlZmluZSBmYl9yZWFk
YiBnc2NfcmVhZGIKLSNkZWZpbmUgZmJfcmVhZHcgZ3NjX3JlYWR3Ci0jZGVmaW5lIGZiX3JlYWRs
IGdzY19yZWFkbAotI2RlZmluZSBmYl93cml0ZWIgZ3NjX3dyaXRlYgotI2RlZmluZSBmYl93cml0
ZXcgZ3NjX3dyaXRldwotI2RlZmluZSBmYl93cml0ZWwgZ3NjX3dyaXRlbAotI2RlZmluZSBmYl9t
ZW1zZXQgZ3NjX21lbXNldF9pbwogCiAjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVk
KF9fYWxwaGFfXykKIAoKCgoKSW5kZXg6IGRyaXZlcnMvdmlkZW8vc3RpL3N0aWNvbi5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9ob21lL2N2cy9wYXJpc2MvbGludXgvZHJpdmVycy92aWRlby9zdGkv
c3RpY29uLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcjEuMTEgc3RpY29u
LmMKLS0tIHN0aWNvbi5jCTIwMDEvMDYvMTQgMTY6MTM6MTYJMS4xMQorKysgc3RpY29uLmMJMjAw
MS8wNi8xNiAxNjo1OTozNwpAQCAtNTAsNyArNTAsMTEgQEAKICNpbmNsdWRlICJzdGljb24tYm1v
ZGUuaCIJLyogYXNzdW1lIGJ5dGUtbW9kZSBST00gKi8KICNpbmNsdWRlICJzdGljb3JlLmgiCiAK
Ky8qIHN3aXRjaGluZyB0byBncmFwaGljcyBtb2RlICovCisjZGVmaW5lIEJMQU5LIDAKK3N0YXRp
YyBpbnQgdmdhX2lzX2dmeDsKIAorCiAvKiBTb2Z0d2FyZSBzY3JvbGxiYWNrICovCiAKIGludCBz
dGljb25fc29mdGJhY2tfc2l6ZSA9IDMyNzY4OwpAQCAtOTcsNyArMTAxLDcgQEAKICAgICBpbnQg
dW5pdCA9IGNvbnAtPnZjX251bTsKICAgICBpbnQgcmVkcmF3X2N1cnNvciA9IDA7CiAKLSAgICBp
ZiAoY29uc29sZV9ibGFua2VkKQorICAgIGlmICh2Z2FfaXNfZ2Z4IHx8IGNvbnNvbGVfYmxhbmtl
ZCkKIAkgICAgcmV0dXJuOwogCSAgICAKICAgICBpZiAodnRfY29uc1t1bml0XS0+dmNfbW9kZSAh
PSBLRF9URVhUKQpAQCAtMTIxLDcgKzEyNSw3IEBACiAgICAgaW50IHVuaXQgPSBjb25wLT52Y19u
dW07CiAgICAgaW50IHJlZHJhd19jdXJzb3IgPSAwOwogCi0gICAgaWYgKGNvbnNvbGVfYmxhbmtl
ZCkKKyAgICBpZiAodmdhX2lzX2dmeCB8fCBjb25zb2xlX2JsYW5rZWQpCiAJICAgIHJldHVybjsK
IAogICAgIGlmICh2dF9jb25zW3VuaXRdLT52Y19tb2RlICE9IEtEX1RFWFQpCkBAIC0xNzMsOCAr
MTc3LDggQEAKIHsKICAgICBzdHJ1Y3Qgc3RpX3N0cnVjdCAqc3RpID0gZGVmYXVsdF9zdGk7CiAK
LSAgICBpZiAoY29uc29sZV9ibGFua2VkKQotCXJldHVybiAwOworICAgIGlmICh0IHx8IGIgIT0g
Y29ucC0+dmNfcm93cyB8fCB2Z2FfaXNfZ2Z4KQorICAgICAgICByZXR1cm4gMDsKIAogICAgIHN0
aWNvbl9jdXJzb3IoY29ucCwgQ01fRVJBU0UpOwogCkBAIC0yNDgsMTAgKzI1MiwyMyBAQAogICAg
IHJldHVybiAxOwkvKiBuZWVkcyByZWZyZXNoaW5nICovCiB9CiAKLXN0YXRpYyBpbnQgc3RpY29u
X2JsYW5rKHN0cnVjdCB2Y19kYXRhICpjb25wLCBpbnQgYmxhbmspCitzdGF0aWMgaW50IHN0aWNv
bl9ibGFuayhzdHJ1Y3QgdmNfZGF0YSAqYywgaW50IGJsYW5rKQogewotICAgIGlmIChibGFuayA8
IDApICAgICAgLyogRW50ZXJpbmcgZ3JhcGhpY3MgbW9kZSAqLwotCXJldHVybiAwOworICAgIHN3
aXRjaCAoYmxhbmspIHsKKyAgICBjYXNlIDA6CQkvKiB1bmJsYW5rICovCisJdmdhX2lzX2dmeCA9
IDA7CisJLyogVGVsbCBjb25zb2xlLmMgdGhhdCBpdCBoYXMgdG8gcmVzdG9yZSB0aGUgc2NyZWVu
IGl0c2VsZiAqLworCXJldHVybiAxOworICAgIGNhc2UgMToJCS8qIG5vcm1hbCBibGFua2luZyAq
LworICAgIGRlZmF1bHQ6CQkvKiBWRVNBIGJsYW5raW5nICovCisJc3RpY29uX3NldF9vcmlnaW4o
Yyk7CisJc3RpX2NsZWFyKGRlZmF1bHRfc3RpLCAwLDAsIGMtPnZjX3Jvd3MsIGMtPnZjX2NvbHMs
IEJMQU5LKTsKKwlyZXR1cm4gMTsKKyAgICBjYXNlIC0xOgkJLyogRW50ZXJpbmcgZ3JhcGhpYyBt
b2RlICovCisJc3RpX2NsZWFyKGRlZmF1bHRfc3RpLCAwLDAsIGMtPnZjX3Jvd3MsIGMtPnZjX2Nv
bHMsIEJMQU5LKTsKKwl2Z2FfaXNfZ2Z4ID0gMTsKKwlyZXR1cm4gMTsKKyAgICB9CiAgICAgcmV0
dXJuIDE7CQkvKiBjb25zb2xlIG5lZWRzIHRvIHJlc3RvcmUgc2NyZWVuIGl0c2VsZiAqLwogfQog
CkBAIC0zMzIsNyArMzQ5LDYgQEAKIAogdm9pZCBzdGljb25faW52ZXJ0X3JlZ2lvbihzdHJ1Y3Qg
dmNfZGF0YSAqY29ucCwgdTE2ICpwLCBpbnQgY291bnQpCiB7Ci0jaWYgMAogICAgIGludCBjb2wg
PSAxOyAvKiB2Z2FfY2FuX2RvX2NvbG9yOyAqLwogCiAgICAgd2hpbGUgKGNvdW50LS0pIHsKQEAg
LTM0NSw3ICszNjEsNiBAQAogCiAJc2NyX3dyaXRldyhhLCBwKyspOwogICAgIH0KLSNlbmRpZgog
fQogCiB2b2lkIHN0aWNvbl9zYXZlX3NjcmVlbihzdHJ1Y3QgdmNfZGF0YSAqY29ucCkKQEAgLTM1
OSw3ICszNzQsOSBAQAogCSAqLwogCWJvb3R1cF9jb25zb2xlID0gMTsKIAljb25wLT52Y194ID0g
MDsgLyogT1JJR19YOyBPUklHX1k7ICovCi0JY29ucC0+dmNfeSA9IDA7CisJY29ucC0+dmNfeSA9
IGNvbnAtPnZjX3Jvd3MtMTsKKwlpZiAoY29ucC0+dmNfeTwwKQorCQljb25wLT52Y195ID0gMDsK
ICAgICB9CiAgICAgCiAgICAgLyogVE9ETz86IGZpbGwgY29ucC0+dmNfc2NyZWVuYnVmIHdpdGgg
cGRjY29ucydzIGJvb3R1cCBtZXNzYWdlcyAqLwpJbmRleDogZHJpdmVycy92aWRlby9zdGkvc3Rp
ZmIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnMvcGFyaXNjL2xpbnV4L2RyaXZlcnMv
dmlkZW8vc3RpL3N0aWZiLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtdSAtcjEu
MTMgc3RpZmIuYwotLS0gc3RpZmIuYwkyMDAxLzA2LzE0IDEyOjEyOjQ0CTEuMTMKKysrIHN0aWZi
LmMJMjAwMS8wNi8xNiAxNjo1OTozOQpAQCAtNjksMTIgKzY5LDQ2IEBACiAKIGV4dGVybiBzdHJ1
Y3QgZGlzcGxheV9zd2l0Y2ggZmJjb25fc3RpOyAvKiBmYmNvbi1zdGkuYyAqLwogCisjZGVmaW5l
IEhQUEFfSU9SRU1BUChhZGRyLGxlbikgXAorCWlvcmVtYXAoYWRkcixsZW4pCisKKyNkZWZpbmUg
UkVHSU9OX0JBU0UoZmJfaW5mbywgaW5kZXgpIFwKKwlQVFJfU1RJKGZiX2luZm8uc3RpLT5nbG9i
X2NmZyktPnJlZ2lvbl9wdHJzW2luZGV4XQorCQorI2RlZmluZSBOR0xFREVWREVQUk9NX0NSVF9S
RUdJT04gMQorCit0eXBlZGVmIHN0cnVjdCB7CisJX19zMzIJdmlkZW9fY29uZmlnX3JlZzsKKwlf
X3MzMgltaXNjX3ZpZGVvX3N0YXJ0OworCV9fczMyCWhvcml6X3RpbWluZ19mbXQ7CisJX19zMzIJ
c2Vycl90aW1pbmdfZm10OworCV9fczMyCXZlcnRfdGltaW5nX2ZtdDsKKwlfX3MzMglob3Jpel9z
dGF0ZTsKKwlfX3MzMgl2ZXJ0X3N0YXRlOworCV9fczMyCXZ0Z19zdGF0ZV9lbGVtZW50czsKKwlf
X3MzMglwaXBlbGluZV9kZWxheTsKKwlfX3MzMgltaXNjX3ZpZGVvX2VuZDsKK30gdmlkZW9fc2V0
dXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgIAorCV9fczE2CXNpemVv
Zl9uZ2xlX2RhdGE7CisJX19zMTYJeF9zaXplX3Zpc2libGU7CSAgICAvKiB2aXNpYmxlIHNjcmVl
biBkaW0gaW4gcGl4ZWxzICAqLworCV9fczE2CXlfc2l6ZV92aXNpYmxlOworCV9fczE2CXBhZDJb
MTVdOworCV9fczE2CWN1cnNvcl9waXBlbGluZV9kZWxheTsKKwlfX3MxNgl2aWRlb19pbnRlcmxl
YXZlczsKKwlfX3MzMglwYWQzWzExXTsKK30gbmdsZV9yb21fdDsKKwogc3RydWN0IHN0aWZiX2lu
Zm8gewogCXN0cnVjdCBmYl9pbmZvX2dlbiBnZW47CiAJc3RydWN0IHN0aV9zdHJ1Y3QgKnN0aTsK
LQlfX3UzMiBpZDsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlfX3UzMiBpZDsKKwlpbnQgZ3Jh
eXNjYWxlOwogCWludCBicHA7CisJaW50IGRldmljZVNwZWNpZmljQ29uZmlnOworCW5nbGVfcm9t
X3QgbmdsZV9yb207CiAJc3RydWN0IHsgdV9zaG9ydCByZWQsIGdyZWVuLCBibHVlOyB9IHBhbGV0
dGVbMjU2XTsKIH07CiAKQEAgLTExMCw2ICsxNDQsNyBAQAogI2RlZmluZSBSRUdfMTQgIAkweDAx
ODAxYwogI2RlZmluZSBSRUdfMTViMAkweDIwMDAwMAogI2RlZmluZSBSRUdfMTZiMQkweDIwMDAw
NQorI2RlZmluZSBSRUdfMTZiMwkweDIwMDAwNwogI2RlZmluZSBSRUdfMjEJCTB4MjAwMjE4CiAj
ZGVmaW5lIFJFR18yMgkJMHgwMDA1YTAKICNkZWZpbmUgUkVHXzIzCQkweDAwMDVjMApAQCAtMTE3
LDYgKzE1Miw4IEBACiAjZGVmaW5lIFJFR18yNwkJMHgyMDAzMDgKICNkZWZpbmUgUkVHXzMyCQkw
eDIxMDAzYwogI2RlZmluZSBSRUdfMzMJCTB4MjEwMDQwCisjZGVmaW5lIFJFR18zNAkJMHgyMDAw
MDgKKyNkZWZpbmUgUkVHXzM4CQkweDIxMDAyMAogCiAjZGVmaW5lIFJFQURfQllURShiYXNlKQkJ
Z3NjX3JlYWRiKGJhc2UpCiAjZGVmaW5lIFJFQURfV09SRChiYXNlKQkJZ3NjX3JlYWRsKGJhc2Up
CkBAIC0xMjYsNiArMTYzLDkgQEAKICNkZWZpbmUgRU5BQkxFCTEJLyogZm9yIGVuYWJsaW5nL2Rp
c2FibGluZyBzY3JlZW4gKi8JCiAjZGVmaW5lIERJU0FCTEUgMAogCisjZGVmaW5lIE5HTEVfTE9D
SyhmYl9pbmZvKQorI2RlZmluZSBOR0xFX1VOTE9DSyhmYl9pbmZvKQorCiBzdGF0aWMgdm9pZAog
U0VUVVBfSFcoc3RydWN0IHN0aWZiX2luZm8gKmZiX2luZm8pCiB7CkBAIC0yODUsNiArMzI1LDkw
IEBACiAJfQogfQogCisjZGVmaW5lIEdFVF9ST01UQUJMRV9JTkRFWChmYl9pbmZvKSBcCisJKFJF
QURfQllURShmYl9pbmZvLT5pb2Jhc2UgKyBSRUdfMTZiMykgLSAxKQorCisjZGVmaW5lIEhZUEVS
X0NPTkZJR19QTEFORVNfMjQgMHgwMDAwMDEwMAorCQorI2RlZmluZSBJU18yNF9ERVZJQ0UoZmJf
aW5mbykgXAorCShmYl9pbmZvLT5kZXZpY2VTcGVjaWZpY0NvbmZpZyAmIEhZUEVSX0NPTkZJR19Q
TEFORVNfMjQpCisKKyNkZWZpbmUgSVNfODg4X0RFVklDRShmYl9pbmZvKSBcCisJKCEoSVNfMjRf
REVWSUNFKGZiX2luZm8pKSkKKworI2RlZmluZSBHRVRfRklGT19TTE9UUyhmYl9pbmZvLCBjbnQs
IG51bXNsb3RzKQkJCVwKK3sJd2hpbGUgKGNudCA8IG51bXNsb3RzKSAJCQkJCVwKKwkJY250ID0g
UkVBRF9XT1JEKGZiX2luZm8tPmlvYmFzZSArIFJFR18zNCk7CVwKKwljbnQgLT0gbnVtc2xvdHM7
CQkJCQlcCit9CisKKyNkZWZpbmUJICAgIEluZGV4ZWREY2QJMAkvKiBQaXhlbCBkYXRhIGlzIGlu
ZGV4ZWQgKHBzZXVkbykgY29sb3IgKi8KKyNkZWZpbmUJICAgIE90YzA0CTIJLyogUGl4ZWxzIGlu
IGVhY2ggbG9uZ3dvcmQgdHJhbnNmZXIgKDQpICovCisjZGVmaW5lCSAgICBPdGMzMgk1CS8qIFBp
eGVscyBpbiBlYWNoIGxvbmd3b3JkIHRyYW5zZmVyICgzMikgKi8KKyNkZWZpbmUJICAgIE90czA4
CTMJLyogRWFjaCBwaXhlbCBpcyBzaXplICg4KWQgdHJhbnNmZXIgKDEpICovCisjZGVmaW5lCSAg
ICBPdHNJbmRpcmVjdAk2CS8qIEVhY2ggYml0IGdvZXMgdGhyb3VnaCBGRy9CRyBjb2xvcig4KSAq
LworI2RlZmluZQkgICAgQWRkckxvbmcJNQkvKiBGQiBhZGRyZXNzIGlzIExvbmcgYWxpZ25lZCAo
cGl4ZWwpICovCisjZGVmaW5lCSAgICBCSU5vdmx5CTB4MgkvKiA4IGJpdCBvdmVybGF5ICovCisj
ZGVmaW5lCSAgICBCSU5hcHAwSQkweDAJLyogQXBwbGljYXRpb24gQnVmZmVyIDAsIEluZGV4ZWQg
Ki8KKyNkZWZpbmUJICAgIEJJTmFwcDFJCTB4MQkvKiBBcHBsaWNhdGlvbiBCdWZmZXIgMSwgSW5k
ZXhlZCAqLworI2RlZmluZQkgICAgQklOYXBwMEY4CTB4YQkvKiBBcHBsaWNhdGlvbiBCdWZmZXIg
MCwgRnJhY3Rpb25hbCA4LTgtOCAqLworI2RlZmluZQkgICAgQklOYXR0cgkweGQJLyogQXR0cmli
dXRlIEJpdG1hcCAqLworI2RlZmluZQkgICAgUm9wU3JjIAkweDMKKyNkZWZpbmUJICAgIEJpdG1h
cEV4dGVudDA4ICAzCS8qIEVhY2ggd3JpdGUgaGl0cyAoIDgpIGJpdHMgaW4gZGVwdGggKi8KKyNk
ZWZpbmUJICAgIEJpdG1hcEV4dGVudDMyICA1CS8qIEVhY2ggd3JpdGUgaGl0cyAoMzIpIGJpdHMg
aW4gZGVwdGggKi8KKyNkZWZpbmUJICAgIERhdGFEeW5hbWljCSAgICAwCS8qIERhdGEgcmVnaXN0
ZXIgcmVsb2FkZWQgYnkgZGlyZWN0IGFjY2VzcyAqLworI2RlZmluZQkgICAgTWFza0R5bmFtaWMJ
ICAgIDEJLyogTWFzayByZWdpc3RlciByZWxvYWRlZCBieSBkaXJlY3QgYWNjZXNzICovCisjZGVm
aW5lCSAgICBNYXNrT3RjCSAgICAwCS8qIE1hc2sgY29udGFpbnMgT2JqZWN0IENvdW50IHZhbGlk
IGJpdHMgKi8KKworI2RlZmluZSBNYXNrQWRkck9mZnNldChvZmZzZXQpIChvZmZzZXQpCisjZGVm
aW5lIFN0YXRpY1JlZyhlbikgKGVuKQorI2RlZmluZSBCR3goZW4pIChlbikKKyNkZWZpbmUgRkd4
KGVuKSAoZW4pCisKKyNkZWZpbmUgCisKKwlOR0xFX0xPQ0soZmJfaW5mbyk7CisKKwlHRVRfRklG
T19TTE9UUyhmYl9pbmZvLCBuRnJlZUZpZm9TbG90cywgMSk7CisJV1JJVEVfV09SRCgweGZmZmZm
ZmZmLCBmYl9pbmZvLT5pb2Jhc2UgKyBSRUdfMzIpOworCisJLyogV3JpdGUgb3ZlcmxheSB0cmFu
c3BhcmVuY3kgbWFzayBzbyBvbmx5IGVudHJ5IDI1NSBpcyB0cmFuc3BhcmVudCAqLworCisJLyog
SGFyZHdhcmUgc2V0dXAgZm9yIGZ1bGwtZGVwdGggd3JpdGUgdG8gIm1hZ2ljIiBsb2NhdGlvbiAq
LworCUdFVF9GSUZPX1NMT1RTKGZiX2luZm8sIG5GcmVlRmlmb1Nsb3RzLCA3KTsKKwlOR0xFX1FV
SUNLX1NFVF9EU1RfQk1fQUNDRVNTKGZiX2luZm8sIAorCQlCQShJbmRleGVkRGNkLCBPdGMwNCwg
T3RzMDgsIEFkZHJMb25nLAorCQlCQUp1c3RQb2ludCgwKSwgQklOb3ZseSwgQkFJbmRleEJhc2Uo
MCkpKTsKKwlOR0xFX1FVSUNLX1NFVF9JTUFHRV9CSVRNQVBfT1AoZmJfaW5mbywKKwkJSUJPdmFs
cyhSb3BTcmMsIE1hc2tBZGRyT2Zmc2V0KDApLAorCQlCaXRtYXBFeHRlbnQwOCwgU3RhdGljUmVn
KDApLAorCQlEYXRhRHluYW1pYywgTWFza090YywgQkd4KDApLCBGR3goMCkpKTsKKworCS8qIE5v
dyBwcmVwYXJlIHRvIHdyaXRlIHRvIHRoZSAibWFnaWMiIGxvY2F0aW9uICovCisJZmJBZGRyID0g
TkdMRV9MT05HX0ZCX0FERFJFU1MoMCwgMTUzMiwgMCk7CisJTkdMRV9CSU5DX1NFVF9EU1RBRERS
KGZiX2luZm8sIGZiQWRkcik7CisJTkdMRV9SRUFMTFlfU0VUX0lNQUdFX1BMQU5FTUFTSyhmYl9p
bmZvLCAweGZmZmZmZik7CisJTkdMRV9CSU5DX1NFVF9EU1RNQVNLKGZiX2luZm8sIH4wVUwpOwor
CisJLyogRmluYWxseSwgd3JpdGUgYSB6ZXJvIHRvIGNsZWFyIHRoZSBtYXNrICovCisJTkdMRV9C
SU5DX1dSSVRFMzIoZmJfaW5mbywgMCk7CisKKwlOR0xFX1VOTE9DSyhmYl9pbmZvKTsKK30KKwor
c3RhdGljIHZvaWQgCituZ2xlRGVwdGg4X0NsZWFySW1hZ2VQbGFuZXMoc3RydWN0IHN0aWZiX2lu
Zm8gKmZiX2luZm8pCit7CisJLyogRklYTUUhICovCit9CisKK3N0YXRpYyB2b2lkIAorbmdsZURl
cHRoMjRfQ2xlYXJJbWFnZVBsYW5lcyhzdHJ1Y3Qgc3RpZmJfaW5mbyAqZmJfaW5mbykKK3sKKwkv
KiBGSVhNRSEgKi8KK30KKworc3RhdGljIHZvaWQKK25nbGVSZXNldEF0dHJQbGFuZXMoc3RydWN0
IHN0aWZiX2luZm8gKmZiX2luZm8sIGludCBlbmFibGUpCit7CisJLyogRklYTUUhICovCit9Citz
dGF0aWMgdm9pZAorbmdsZUNsZWFyT3ZlcmxheVBsYW5lcyhzdHJ1Y3Qgc3RpZmJfaW5mbyAqZmJf
aW5mbywgaW50IG1hc2ssIGludCBsZW4pCit7Cit9CisKK3N0YXRpYyB2b2lkIAoraHlwZXJSZXNl
dFBsYW5lcyhzdHJ1Y3Qgc3RpZmJfaW5mbyAqZmJfaW5mbywgaW50IGVuYWJsZSkKK3sKKwl1bnNp
Z25lZCBpbnQgY29udHJvbFBsYW5lUmVnOworCisJTkdMRV9MT0NLKGZiX2luZm8pOworCisJaWYg
KElTXzI0X0RFVklDRShmYl9pbmZvKSkKKwkJaWYgKGZiX2luZm8tPmJwcCA9PSAyNCkKKwkJCWNv
bnRyb2xQbGFuZVJlZyA9IDB4MDQwMDBGMDA7CisJCWVsc2UKKwkJCWNvbnRyb2xQbGFuZVJlZyA9
IDB4MDAwMDBGMDA7ICAgLyogMHgwMDAwMDgwMCBzaG91bGQgYmUgZW5vdWdodCwgYnV0IGxldHMg
Y2xlYXIgYWxsIDQgYml0cyAqLworCWVsc2UKKwkJY29udHJvbFBsYW5lUmVnID0gMHgwMDAwMEYw
MDsgLyogMHgwMDAwMDEwMCBzaG91bGQgYmUgZW5vdWdodCwgYnV0IGxldHMgY2xlYXIgYWxsIDQg
Yml0cyAqLworCisJc3dpdGNoIChlbmFibGUpIHsKKwljYXNlIDE6CQkvKiBTRVJWRVJfSU5JVCAq
LworCQkvKiBjbGVhciBzY3JlZW4gKi8KKwkJaWYgKElTXzI0X0RFVklDRShmYl9pbmZvKSkKKwkJ
CW5nbGVEZXB0aDI0X0NsZWFySW1hZ2VQbGFuZXMoZmJfaW5mbyk7CisJCWVsc2UKKwkJCW5nbGVE
ZXB0aDhfQ2xlYXJJbWFnZVBsYW5lcyhmYl9pbmZvKTsKKworCQkvKiBQYWludCBhdHRyaWJ1dGUg
cGxhbmVzIGZvciBkZWZhdWx0IGNhc2UuCisJCSAqIE9uIEh5cGVyZHJpdmUsIHRoaXMgbWVhbnMg
YWxsIHdpbmRvd3MgdXNpbmcgb3ZlcmxheSBjbWFwIDAuICovCisJCW5nbGVSZXNldEF0dHJQbGFu
ZXMoZmJfaW5mbywgY29udHJvbFBsYW5lUmVnKTsKKworCQkvKiBjbGVhciBvdmVybGF5IHBsYW5l
cyAqLworCQlpZiAoZmJfaW5mby0+YnBwID09IDgpCisJCQluZ2xlQ2xlYXJPdmVybGF5UGxhbmVz
KGZiX2luZm8sIDB4ZmYsIDApOworCQllbHNlCisJCQluZ2xlQ2xlYXJPdmVybGF5UGxhbmVzKGZi
X2luZm8sIDB4ZmYsIDI1NSk7CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisJCSAqKiBBbHNvIG5lZWQgdG8gY291bnRlcmFjdCBJVEUgc2V0
dGluZ3MgCisJCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKwkJaHlwZXJVbmRvSVRFKGZiX2luZm8pOworCQlicmVhazsKKworCWNhc2UgMDoJCS8q
IFNFUlZFUl9FWElUICovCisJCS8qIGNsZWFyIHNjcmVlbiAqLworCQlpZiAoSVNfMjRfREVWSUNF
KGZiX2luZm8pKQorCQkJbmdsZURlcHRoMjRfQ2xlYXJJbWFnZVBsYW5lcyhmYl9pbmZvKTsKKwkJ
ZWxzZQorCQkJbmdsZURlcHRoOF9DbGVhckltYWdlUGxhbmVzKGZiX2luZm8pOworCQluZ2xlUmVz
ZXRBdHRyUGxhbmVzKGZiX2luZm8sIGNvbnRyb2xQbGFuZVJlZyk7CisJCW5nbGVDbGVhck92ZXJs
YXlQbGFuZXMoZmJfaW5mbywgMHhmZiwgMCk7CisJCWJyZWFrOworCisJY2FzZSAtMToJLyogU0VS
VkVSX1JFQ09WRVJZICovCisJCWh5cGVyVW5kb0lURShmYl9pbmZvKTsKKwkJbmdsZVJlc2V0QXR0
clBsYW5lcyhmYl9pbmZvLCBjb250cm9sUGxhbmVSZWcpOworCQlicmVhazsKKyAgICAJfQorCQor
CU5HTEVfVU5MT0NLKGZiX2luZm8pOworfQorCisvKiBSZXR1cm4gcG9pbnRlciB0byBpbi1tZW1v
cnkgc3RydWN0dXJlIGhvbGRpbmcgRUxLIGRldmljZS1kZXBlbmRlbnQgUk9NIHZhbHVlcy4gKi8K
KworI2lmIDAKK3N0YXRpYyB2b2lkIAorbmdsZUdldERldmljZVJvbURhdGEoc3RydWN0IHN0aWZi
X2luZm8gKmZiX2luZm8pCit7CisJaW50CSpwQnl0ZVBlckxvbmdEZXZEZXBEYXRhOy8qIGRhdGEg
Ynl0ZSA9PSBMU0IgKi8KKwlpbnQgCSpwUm9tVGFibGU7CisJTmdsZURldlJvbURhdGEJKnBQYWNr
ZWREZXZSb21EYXRhOworCWludAlzaXplUGFja2VkRGV2Um9tRGF0YSA9IHNpemVvZigqcFBhY2tl
ZERldlJvbURhdGEpOworCWNoYXIJKnBDYXJkODsKKwlpbnQJaTsKKwljaGFyCSptYXBPcmlnaW4g
PSBOVUxMOworICAgIAorCWludCByb21UYWJsZUlkeDsKKworCXBQYWNrZWREZXZSb21EYXRhID0g
ZmJfaW5mby0+bmdsZV9yb207CisKKwlTRVRVUF9IVyhmYl9pbmZvKTsKKwlpZiAoZmJfaW5mby0+
aWQgPT0gUzkwMDBfSURfQVJUSVNUKSB7CisJCXBQYWNrZWREZXZSb21EYXRhLT5jdXJzb3JfcGlw
ZWxpbmVfZGVsYXkgPSA0OworCQlwUGFja2VkRGV2Um9tRGF0YS0+dmlkZW9faW50ZXJsZWF2ZXMg
ICAgID0gNDsKKwl9IGVsc2UgeworCQkvKiBHZXQgcG9pbnRlciB0byB1bnBhY2tlZCBieXRlL2xv
bmcgZGF0YSBpbiBST00gKi8KKwkJcEJ5dGVQZXJMb25nRGV2RGVwRGF0YSA9IGZiX2luZm8tPnN0
aS0+cmVnaW9uc1tOR0xFREVWREVQUk9NX0NSVF9SRUdJT05dOworCisJCS8qIFRvbWNhdCBzdXBw
b3J0cyBzZXZlcmFsIHJlc29sdXRpb25zOiAxMjgweDEwMjQsIDEwMjR4NzY4LCA2NDB4NDgwICov
CisJCWlmIChmYl9pbmZvLT5pZCA9PSBTOTAwMF9JRF9UT01DQVQpCisJeworCSAgICAvKiAganVt
cCB0byB0aGUgY29ycmVjdCBST00gdGFibGUgICovCisJICAgIEdFVF9ST01UQUJMRV9JTkRFWChy
b21UYWJsZUlkeCk7CisJICAgIHdoaWxlICAocm9tVGFibGVJZHggPiAwKQorCSAgICB7CisJCXBD
YXJkOCA9IChDYXJkOCAqKSBwUGFja2VkRGV2Um9tRGF0YTsKKwkJcFJvbVRhYmxlID0gcEJ5dGVQ
ZXJMb25nRGV2RGVwRGF0YTsKKwkJLyogUGFjayBldmVyeSBmb3VydGggYnl0ZSBmcm9tIFJPTSBp
bnRvIHN0cnVjdHVyZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZVBhY2tlZERldlJvbURhdGE7
IGkrKykKKwkJeworCQkgICAgKnBDYXJkOCsrID0gKENhcmQ4KSAoKnBSb21UYWJsZSsrKTsKKwkJ
fQorCisJCXBCeXRlUGVyTG9uZ0RldkRlcERhdGEgPSAoQ2FyZDMyICopCisJCQkoKENhcmQ4ICop
IHBCeXRlUGVyTG9uZ0RldkRlcERhdGEgKworCQkJICAgICAgIHBQYWNrZWREZXZSb21EYXRhLT5z
aXplb2ZfbmdsZV9kYXRhKTsKKworCQlyb21UYWJsZUlkeC0tOworCSAgICB9CisJfQorCisJcENh
cmQ4ID0gKENhcmQ4ICopIHBQYWNrZWREZXZSb21EYXRhOworCisJLyogUGFjayBldmVyeSBmb3Vy
dGggYnl0ZSBmcm9tIFJPTSBpbnRvIHN0cnVjdHVyZSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXpl
UGFja2VkRGV2Um9tRGF0YTsgaSsrKQorCXsKKwkgICAgKnBDYXJkOCsrID0gKENhcmQ4KSAoKnBC
eXRlUGVyTG9uZ0RldkRlcERhdGErKyk7CisJfQorICAgIH0KKworICAgIFNFVFVQX0ZCKHBEcmVn
cyxwU2NyZWVuUHJpdi0+ZGV2aWNlSUQscFNjcmVlblByaXYtPmRldkRlcHRoKTsKKworICAgIHJl
dHVybihwUGFja2VkRGV2Um9tRGF0YSk7Cit9ICAgLyogbmdsZUdldERldmljZVJvbURhdGEoKSAq
LworI2VuZGlmCisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBkcml2ZXIgc3BlY2lmaWMgZnVu
Y3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50CiBzdGlm
Yl9lbmNvZGVfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LAotCSAgICAgICBjb25z
dCB2b2lkICpfcGFyLAotCSAgICAgICBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pCisJCWNvbnN0
IHZvaWQgKl9wYXIsCisJCXN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbykKIHsKIAljb25zdCBzdHJ1
Y3Qgc3RpZmJfcGFyICpwYXIgPSBfcGFyOwotCQorCiAJbWVtc2V0KGZpeCwgMCwgc2l6ZW9mKCpm
aXgpKTsKIAkKIAlzdHJjcHkoZml4LT5pZCwgInN0aWZiIik7CiAJZml4LT5saW5lX2xlbmd0aCA9
IFBUUl9TVEkoZmJfaW5mby5zdGktPmdsb2JfY2ZnKS0+dG90YWxfeDsKIAlpZiAoIWZpeC0+bGlu
ZV9sZW5ndGgpCiAJICAgIGZpeC0+bGluZV9sZW5ndGggPSAyMDQ4OyAvKiBkZWZhdWx0ICovCi0J
Zml4LT5zbWVtX3N0YXJ0ID0gUFRSX1NUSShmYl9pbmZvLnN0aS0+Z2xvYl9jZmcpLT5yZWdpb25f
cHRyc1sxXTsKIAlmaXgtPnNtZW1fbGVuID0gUFRSX1NUSShmYl9pbmZvLnN0aS0+Z2xvYl9jZmcp
LT50b3RhbF95ICogZml4LT5saW5lX2xlbmd0aDsKKwlmaXgtPnNtZW1fc3RhcnQgPSBIUFBBX0lP
UkVNQVAoUkVHSU9OX0JBU0UoZmJfaW5mbywxKSwgMjA0OFVMKjIwNDgpOwogCiAJaWYgKHBhci0+
YnBwID09IDEpIHsKIAkgICAgZml4LT50eXBlID0gRkJfVFlQRV9QTEFORVM7CS8qIHdlbGwsIHNv
cnQgb2YgKi8KQEAgLTQ3NiwyMCArODYzLDM5IEBACiAJaWYgKHJlZ25vID4gMjU1KQogCQlyZXR1
cm4gMTsKIAkKLQljb2xvciA9ICgoKHJlZCAmIDB4ZmYwMCkgPDwgOCkgfCAoZ3JlZW4gJiAweGZm
MDApIHwKKwlpZiAocC0+Z3JheXNjYWxlKSB7CisJCS8qIGdyYXkgPSAwLjMwKlIgKyAwLjU5Kkcg
KyAwLjExKkIgKi8KKwkJY29sb3IgPSByZWQgPSBncmVlbiA9IGJsdWUgPSAocmVkICogNzcgKyBn
cmVlbiAqIDE1MSArIGJsdWUgKiAyOCkgPj4gODsKKwl9IGVsc2UgeworCQljb2xvciA9ICgoKHJl
ZCAmIDB4ZmYwMCkgPDwgOCkgfCAoZ3JlZW4gJiAweGZmMDApIHwKIAkJCSgoYmx1ZSAmIDB4ZmYw
MCkgPj4gOCkgKTsKKwkJcmVkID4+PSA4OworCQlncmVlbiA+Pj0gODsKKwkJYmx1ZSA+Pj0gODsK
Kwl9CiAJCi0JcmVkID4+PSA4OwotCWdyZWVuID4+PSA4OwotCWJsdWUgPj49IDg7CiAJcC0+cGFs
ZXR0ZVtyZWdub10ucmVkID0gcmVkOwogCXAtPnBhbGV0dGVbcmVnbm9dLmdyZWVuID0gZ3JlZW47
CiAJcC0+cGFsZXR0ZVtyZWdub10uYmx1ZSA9IGJsdWU7CiAKIAlTVEFSVF9JTUFHRV9DT0xPUk1B
UF9BQ0NFU1MocCk7Ci0JV1JJVEVfSU1BR0VfQ09MT1IocCwgcmVnbm8sIGNvbG9yKTsgCi0JRklO
SVNIX0lNQUdFX0NPTE9STUFQX0FDQ0VTUyhwKTsKKwlXUklURV9JTUFHRV9DT0xPUihwLCByZWdu
bywgY29sb3IpOwogCisJaWYgKHAtPmlkID09IFM5MDAwX0lEX0hDUlgpIHsKKwkJTmdsZUx1dEJs
dEN0bCBsdXRCbHRDdGw7CisJCWx1dEJsdEN0bCA9IHNldEh5cGVyTHV0Qmx0Q3RsKHAsIAorCQkJ
CTAsCS8qIE9mZnNldCB3L2kgTFVUICovCisJCQkJMjU2KTsJLyogTG9hZCBlbnRpcmUgTFVUICov
CisJCU5HTEVfQklOQ19TRVRfU1JDQUREUihwLAorCQkJCU5HTEVfTE9OR19GQl9BRERSRVNTKDAs
IDB4MTAwLCAwKSk7IAorCQkJCS8qIDB4MTAwIGlzIHNhbWUgYXMgdXNlZCBpbiBXUklURV9JTUFH
RV9DT0xPUigpICovCisJCVNUQVJUX0NPTE9STUFQTE9BRChwLCBsdXRCbHRDdGwuYWxsKTsKKwkJ
U0VUVVBfRkIocCk7CisJfSBlbHNlIHsKKwkJLyogY2xlYW51cCBjb2xvcm1hcCBoYXJkd2FyZSAq
LworCQlGSU5JU0hfSU1BR0VfQ09MT1JNQVBfQUNDRVNTKHApOworCX0KKwogCXJldHVybiAwOwog
fQogCkBAIC01MDEsNyArOTA3LDcgQEAKIAljb25zdCBzdHJ1Y3Qgc3RpZmJfcGFyICpwYXIgPSBf
cGFyOwogCQogCWRpc3AtPnNjcmVlbl9iYXNlID0KLQkJKHZvaWQgKikgUFRSX1NUSShmYl9pbmZv
LnN0aS0+Z2xvYl9jZmcpLT5yZWdpb25fcHRyc1sxXTsKKwkJSFBQQV9JT1JFTUFQKFJFR0lPTl9C
QVNFKGZiX2luZm8sMSksIDIwNDhVTCoyMDQ4KTsKIAkKIAkvKiBIYWNrOiBDdXJyZW50bHkgb25s
eSBBcnRpc3QtRnJhbWVidWZmZXIgc3VwcG9ydGVkICEgKi8KIAlpZiAoZmJfaW5mby5pZCA9PSBT
OTAwMF9JRF9BUlRJU1QpIHsKQEAgLTYxNSw2ICsxMDIxLDkgQEAKIGludCBfX2luaXQKIHN0aWZi
X2luaXQodm9pZCkKIHsKKwkvKiBzZXQgc3RydWN0IHRvIGEga25vd24gc3RhdGUgKi8KKwltZW1z
ZXQoJmZiX2luZm8sIDAsIHNpemVvZihmYl9pbmZvKSk7CisJCiAJaWYgKCEoZmJfaW5mby5zdGkg
PSBzdGlfaW5pdF9yb21zKCkpKQogCQlyZXR1cm4gLUVOWElPOwogCkBAIC02MjIsNyArMTAzMSw3
IEBACiAJZmJfaW5mby5pZCA9IGZiX2luZm8uc3RpLT5ncmFwaGljc19pZFswXTsKIAkKIAkvKiBh
bmQgdGhlIGlvIHJlZ2lvbiBiYXNlIGFkZHIgKi8KLQlmYl9pbmZvLmlvYmFzZSA9IFBUUl9TVEko
ZmJfaW5mby5zdGktPmdsb2JfY2ZnKS0+cmVnaW9uX3B0cnNbMl07CisJZmJfaW5mby5pb2Jhc2Ug
PSBSRUdJT05fQkFTRShmYl9pbmZvLDIpOwogCiAgICAgICAgCS8qIFJlamVjdCBhbnkgZGV2aWNl
IG5vdCBpbiB0aGUgTkdMRSBmYW1pbHkgKi8KIAlzd2l0Y2ggKGZiX2luZm8uaWQpIHsKCgoK

--------------Boundary-00=_UH91EI82GDW2OM72245K--