Subject: UMAX E100
To: None <port-macppc@netbsd.org>
From: Michael <macallan18@earthlink.net>
List: port-macppc
Date: 12/09/2004 17:56:31
This is a multi-part message in MIME format.

--Multipart=_Thu__9_Dec_2004_17_56_31_-0500_q2_1R5a60535kBi+
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Hello,

I made a patch to get the ethernet part of the UMAX E100 / Mercury card to work, but it used some hardcoded addresses. This patch doesn't need that anymore :)
The problem is that OF doesn't see and therefore doesn't configure the ethernet controller, so we have to do it by hand, that's what about 80% of the patch are about - figuring out which address ranges are in use by any PCI cards and then pick some unused one. But that's not enough - either the driver or the controller itself seem to have very weird alignment requirements, just letting the kernel pick an address range doesn't work and locks up when the tlp driver tries to attach, so the patch will try a handful of known good addresses, hoping they're not in use by other cards and if it can't find any it will disable memory access, configure only IO registers and hope things will work this way... 
Because some drivers rely on OF we can't just reconfigure everything - we must honour OF's PCI address assignments which makes things complicated.
Maybe it would be better to just walk the OF tree to find all used resources, but I hoped I could use NetBSD's PCI config code. 

Anyway, this should make it work.

have fun
Michael

--Multipart=_Thu__9_Dec_2004_17_56_31_-0500_q2_1R5a60535kBi+
Content-Type: application/octet-stream;
 name="if_pci_tlp.patch"
Content-Disposition: attachment;
 filename="if_pci_tlp.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IGlmX3RscF9wY2kuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lz
L2Rldi9wY2kvaWZfdGxwX3BjaS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc3CmRpZmYgLXUg
LXcgLXIxLjc3IGlmX3RscF9wY2kuYwotLS0gaWZfdGxwX3BjaS5jCTIxIEF1ZyAyMDA0IDIzOjQ4
OjMzIC0wMDAwCTEuNzcKKysrIGlmX3RscF9wY2kuYwk5IERlYyAyMDA0IDIyOjM1OjU5IC0wMDAw
CkBAIC0yMjQsNiArMjI0LDggQEAKIAogc3RhdGljIHZvaWQJdGxwX3BjaV9hc2FudGVfMjExNDBf
cXVpcmtzKHN0cnVjdCB0dWxpcF9wY2lfc29mdGMgKiwKIAkJICAgIGNvbnN0IHVfaW50OF90ICop
Oworc3RhdGljIHZvaWQJdGxwX3BjaV9lMTAwX3F1aXJrcyhzdHJ1Y3QgdHVsaXBfcGNpX3NvZnRj
ICosCisJICAgCQljb25zdCB1X2ludDhfdCAqKTsKIHN0YXRpYyB2b2lkCXRscF9wY2lfc21jXzIx
MTQwX3F1aXJrcyhzdHJ1Y3QgdHVsaXBfcGNpX3NvZnRjICosCiAJCSAgICBjb25zdCB1X2ludDhf
dCAqKTsKIHN0YXRpYyB2b2lkCXRscF9wY2lfdnBjXzIxMTQwX3F1aXJrcyhzdHJ1Y3QgdHVsaXBf
cGNpX3NvZnRjICosCkBAIC0yMzIsNiArMjM0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGxw
X3BjaV9xdWlya3MgdGxwX3BjaV8yMTE0MF9xdWlya3NbXSA9IHsKIAl7IHRscF9wY2lfZGVjX3F1
aXJrcywJCXsgMHgwOCwgMHgwMCwgMHgyYiB9IH0sCiAJeyB0bHBfcGNpX2RlY19xdWlya3MsCQl7
IDB4MDAsIDB4MDAsIDB4ZjggfSB9LAorCXsgdGxwX3BjaV9lMTAwX3F1aXJrcywJCXsgMHgwMCwg
MHhhMCwgMHg1OSB9IH0sCS8vIGVuYWJsZSBxdWlya3MgZm9yIEUxMDAgRXRoZXJuZXQKIAl7IHRs
cF9wY2lfYXNhbnRlXzIxMTQwX3F1aXJrcywJeyAweDAwLCAweDAwLCAweDk0IH0gfSwKIAl7IHRs
cF9wY2lfYWRhcHRlY19xdWlya3MsCXsgMHgwMCwgMHgwMCwgMHg5MiB9IH0sCiAJeyB0bHBfcGNp
X2FkYXB0ZWNfcXVpcmtzLAl7IDB4MDAsIDB4MDAsIDB4ZDEgfSB9LApAQCAtMzQxLDcgKzM0NCw3
IEBACiAJY29uc3Qgc3RydWN0IHR1bGlwX3BjaV9wcm9kdWN0ICp0cHA7CiAJdV9pbnQ4X3QgZW5h
ZGRyW0VUSEVSX0FERFJfTEVOXTsKIAl1X2ludDMyX3QgdmFsID0gMDsKLQlwY2lyZWdfdCByZWc7
CisJcGNpcmVnX3QgcmVnLCBhZGRyLCBzaXplOwogCWludCBwbXJlZzsKIAogCXNjLT5zY19kZXZu
byA9IHBhLT5wYV9kZXZpY2U7CkBAIC01MjksMTMgKzUzMiwxMyBAQAogCS8qCiAJICogTWFwIHRo
ZSBkZXZpY2UuCiAJICovCisJIAkgCiAJaW9oX3ZhbGlkID0gKHBjaV9tYXByZWdfbWFwKHBhLCBU
VUxJUF9QQ0lfSU9CQSwKIAkgICAgUENJX01BUFJFR19UWVBFX0lPLCAwLAogCSAgICAmaW90LCAm
aW9oLCBOVUxMLCBOVUxMKSA9PSAwKTsKIAltZW1oX3ZhbGlkID0gKHBjaV9tYXByZWdfbWFwKHBh
LCBUVUxJUF9QQ0lfTU1CQSwKIAkgICAgUENJX01BUFJFR19UWVBFX01FTXxQQ0lfTUFQUkVHX01F
TV9UWVBFXzMyQklULCAwLAotCSAgICAmbWVtdCwgJm1lbWgsIE5VTEwsIE5VTEwpID09IDApOwot
CisJICAgICZtZW10LCAmbWVtaCwgJmFkZHIsICZzaXplKSA9PSAwKTsKIAlpZiAobWVtaF92YWxp
ZCkgewogCQlzYy0+c2Nfc3QgPSBtZW10OwogCQlzYy0+c2Nfc2ggPSBtZW1oOwpAQCAtMTIxOSw2
ICsxMjIyLDIyIEBACiAJc2MtPnNjX21lZGlhc3cgPSAmdGxwX3Npb19taWlfbWVkaWFzdzsKIH0K
IAorc3RhdGljIHZvaWQgdGxwX3BjaV9lMTAwX3F1aXJrcyhwc2MsIGVuYWRkcikKKwlzdHJ1Y3Qg
dHVsaXBfcGNpX3NvZnRjICpwc2M7CisJY29uc3QgdV9pbnQ4X3QgKmVuYWRkcjsKK3sKKwlzdHJ1
Y3QgdHVsaXBfc29mdGMgKnNjID0gJnBzYy0+c2NfdHVsaXA7CisKKwlpZiAoc2MtPnNjX21lZGlh
c3cgPT0gJnRscF8yMTE0eF9pc3ZfbWVkaWFzdykKKwkJcmV0dXJuOworCisJc3RyY3B5KHNjLT5z
Y19uYW1lLCAiVU1BWCBFMTAwIik7CisKKwlzYy0+c2NfZ3BfZGlyID0gMHhiZjsKKwlzYy0+c2Nf
cmVzZXQgPSB0bHBfcGNpX2FzYW50ZV8yMTE0MF9yZXNldDsKKwlzYy0+c2NfbWVkaWFzdyA9ICZ0
bHBfc2lvX21paV9tZWRpYXN3OworfQorCiBzdGF0aWMgdm9pZAogdGxwX3BjaV9hc2FudGVfMjEx
NDBfcmVzZXQoc3RydWN0IHR1bGlwX3NvZnRjICpzYykKIHsK

--Multipart=_Thu__9_Dec_2004_17_56_31_-0500_q2_1R5a60535kBi+
Content-Type: application/octet-stream;
 name="pci_machdep.patch"
Content-Disposition: attachment;
 filename="pci_machdep.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IGluY2x1ZGUvcGNpX21hY2hkZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v
dC9zcmMvc3lzL2FyY2gvbWFjcHBjL2luY2x1ZGUvcGNpX21hY2hkZXAuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNwpkaWZmIC11IC13IC1yMS4xNyBwY2lfbWFjaGRlcC5oCi0tLSBpbmNsdWRl
L3BjaV9tYWNoZGVwLmgJMjkgSnVsIDIwMDQgMTY6NTU6MjUgLTAwMDAJMS4xNworKysgaW5jbHVk
ZS9wY2lfbWFjaGRlcC5oCTkgRGVjIDIwMDQgMjI6MzU6MDYgLTAwMDAKQEAgLTkzLDMgKzkzLDcg
QEAKICAqLwogdm9pZAkJcGNpX2luaXQoaW50KTsKIGludAkJcGNpZGV2X3RvX29mZGV2KHBjaV9j
aGlwc2V0X3RhZ190LCBwY2l0YWdfdCk7CisKKyNkZWZpbmUgX19IQVZFX1BDSV9DT05GX0hPT0sK
K2ludCBwY2lfY29uZl9ob29rKHBjaV9jaGlwc2V0X3RhZ190LCBpbnQsIGludCwgaW50LCBwY2ly
ZWdfdCk7Cit2b2lkIHBjaV9jb25mX2ludGVycnVwdChwY2lfY2hpcHNldF90YWdfdCwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQgKik7CkluZGV4OiBwY2kvcGNpX21hY2hkZXAuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2FyY2gvbWFjcHBjL3BjaS9wY2lfbWFjaGRlcC5j
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXcgLXIxLjI3IHBjaV9tYWNoZGVw
LmMKLS0tIHBjaS9wY2lfbWFjaGRlcC5jCTcgRGVjIDIwMDQgMTU6NDI6MDggLTAwMDAJMS4yNwor
KysgcGNpL3BjaV9tYWNoZGVwLmMJOSBEZWMgMjAwNCAyMjozNTowNyAtMDAwMApAQCAtNjQsMTIg
KzY0LDI0IEBACiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KICNpbmNsdWRlIDxkZXYvcGNp
L3BjaXJlZy5oPgogCisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9leHRl
bnQuaD4KKyNpbmNsdWRlIDxkZXYvcGNpL3BjaWNvbmYuaD4KKwogI2luY2x1ZGUgPGRldi9vZncv
b3BlbmZpcm0uaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KKyNpbmNsdWRlICJvcHRf
cGNpLmgiCisKKy8vI2RlZmluZSBERUJVR19QQ0kKIAogc3RhdGljIHZvaWQgZml4cGNpIF9fUCgo
aW50LCBwY2lfY2hpcHNldF90YWdfdCkpOwogc3RhdGljIGludCBmaW5kX25vZGVfaW50ciBfX1Ao
KGludCwgdV9pbnQzMl90ICosIHVfaW50MzJfdCAqKSk7CiAKK3N0cnVjdCBleHRlbnQgKmlvZXh0
PU5VTEwsICptZW1leHQ9TlVMTDsKKyNkZWZpbmUgUEhBU0VfR0FUSEVSCQkwCisjZGVmaW5lIFBI
QVNFX0NPTkZJR1VSRQkJMQorCitpbnQgY29uZmlnX3BoYXNlOwogLyoKICAqIFBDSSBkb2Vzbid0
IGhhdmUgYW55IHNwZWNpYWwgbmVlZHM7IGp1c3QgdXNlIHRoZSBnZW5lcmljIHZlcnNpb25zCiAg
KiBvZiB0aGVzZSBmdW5jdGlvbnMuCkBAIC0xMDAsNiArMTEyLDQxIEBACiAJaW50IGJ1cyA9IHBi
YS0+cGJhX2J1czsKIAlpbnQgbm9kZSwgbm4sIHN6OwogCWludDMyX3QgYnVzcmFuZ2VbMl07CisJ
I2lmZGVmIERFQlVHX1BDSQorCXByaW50ZigicGNpIGF0dGFjaCBob29rXG4iKTsKKwkjZW5kaWYK
KyNpZmRlZiBQQ0lfTkVUQlNEX0NPTkZJR1VSRQorCWlmKGJ1cz09MCkKKwl7CisJCWludCBpOwor
CQkvKiBNYWNpbnRvc2ggMjNiaXQgSS9PIHNwYWNlICovCisJCWlmKGlvZXh0PT1OVUxMKQorCQkJ
aW9leHQgID0gZXh0ZW50X2NyZWF0ZSgicGNpaW8iLCAgMHgwMDAwMDAwMCwgMHgwMDdmZmZmZiwg
TV9ERVZCVUYsCisgICAgICAgICAgICAgICAgIE5VTEwsIDAsIEVYX05PV0FJVCk7CisJCS8qIFBD
SSBtZW1vcnkgcmFuZ2UgKi8KKwkJaWYobWVtZXh0PT1OVUxMKQorCQkgICAgbWVtZXh0ID0gZXh0
ZW50X2NyZWF0ZSgicGNpbWVtIiwgMHg4MDAwMDAwMCwgMHhmZmZmZmZmZiwgTV9ERVZCVUYsCisg
ICAgICAgICAgICAgICAgIE5VTEwsIDAsIEVYX05PV0FJVCk7CisJCS8qIG5vIGV4dGVudCBmb3Ig
Uk9NcyBhbmQgcHJlZmV0Y2hhYmxlIG1lbW9yeSwgT0Ygc2VlbXMgdG8gbWl4IHRoZW0gdG9vICov
CisJCS8qIE1hY3MgY2FuIGhhdmUgdXAgdG8gNCBQQ0kgYnVzZXMgKi8KKwkJY29uZmlnX3BoYXNl
PVBIQVNFX0dBVEhFUjsKKwkJZm9yKGk9MDtpPDQ7aSsrKQorCQkJcGNpX2NvbmZpZ3VyZV9idXMo
cGMsIGlvZXh0LCBtZW1leHQsIE5VTEwsIGksMCk7CisjaWZkZWYgREVCVUdfUENJCisJCWV4dGVu
dF9wcmludChpb2V4dCk7CisJCWV4dGVudF9wcmludChtZW1leHQpOworI2VuZGlmCisJCWNvbmZp
Z19waGFzZT1QSEFTRV9DT05GSUdVUkU7CisJCWZvcihpPTA7aTw0O2krKykKKwkJCXBjaV9jb25m
aWd1cmVfYnVzKHBjLCBpb2V4dCwgbWVtZXh0LCBOVUxMLCBpLDApOworI2lmZGVmIERFQlVHX1BD
SQorCQlleHRlbnRfcHJpbnQoaW9leHQpOworCQlleHRlbnRfcHJpbnQobWVtZXh0KTsKKyNlbmRp
ZgorCX0KKwkKKyNlbmRpZgorCiAKIAlmb3IgKG5vZGUgPSBwYy0+bm9kZTsgbm9kZTsgbm9kZSA9
IG5uKSB7CiAJCXN6ID0gT0ZfZ2V0cHJvcChub2RlLCAiYnVzLXJhbmdlIiwgYnVzcmFuZ2UsIDgp
OwpAQCAtMjY3LDcgKzMxNCw2IEBACiAKIAlpZiAoaWggPT0gMCB8fCBpaCA+PSBJQ1VfTEVOKQog
CQlwYW5pYygicGNpX2ludHJfZXN0YWJsaXNoOiBib2d1cyBoYW5kbGUgMHgleCIsIGloKTsKLQog
CXJldHVybiBpbnRyX2VzdGFibGlzaChpaCwgSVNUX0xFVkVMLCBsZXZlbCwgZnVuYywgYXJnKTsK
IH0KIApAQCAtMzA1LDcgKzM1MSw5IEBACiAJCXVfaW50MzJfdCBwaHlzX2hpLCBwaHlzX21pZCwg
cGh5c19sbzsKIAkJdV9pbnQzMl90IGljZWxsc1s1XTsKIAl9IGlhZGRyOwotCisJI2lmZGVmIERF
QlVHX1BDSQorCXByaW50ZigiZml4cGNpKClcbiIpOworCSNlbmRpZgogCWxlbiA9IE9GX2dldHBy
b3AocGFyZW50LCAiI2ludGVycnVwdC1jZWxscyIsICZpbGVuLCBzaXplb2YoaWxlbikpOwogCWlm
IChsZW4gPCAwKSAgICAgICAgICAgIAogCQlpbGVuID0gMDsgICAgICAgCkBAIC0zMTgsNyArMzY2
LDkgQEAKIAkJdGFnID0gcGNpX21ha2VfdGFnKHBjLCBwY2lidXMoYWRkclswXS5waHlzX2hpKSwK
IAkJCQkgICBwY2lkZXYoYWRkclswXS5waHlzX2hpKSwKIAkJCQkgICBwY2lmdW5jKGFkZHJbMF0u
cGh5c19oaSkpOwotCisJCSNpZmRlZiBERUJVR19QQ0kKKwkJcHJpbnRmKCJ0YWc6ICUwOHhcbiIs
dGFnKTsKKwkJI2VuZGlmCiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgSU8gYW5kIE1FTSBlbmFi
bGUgYml0cyBhcmUgc2V0IGluIHRoZSBDU1IuCiAJCSAqLwpAQCAtNTE0LDMgKzU2NCwxMDkgQEAK
IAogCXJldHVybiAtMTsKIH0KKworaW50CitwY2lfY29uZl9ob29rKHBjaV9jaGlwc2V0X3RhZ190
IHBjLCBpbnQgYnVzLCBpbnQgZGV2LCBpbnQgZnVuYywgcGNpcmVnX3QgaWQpCit7CisJLyogY2hl
Y2sgaWYgdGhlcmUncyBhbiBFMTAwIGJvYXJkIGluIDA6MTE6MCAqLworCXBjaXRhZ190IHRhZz1w
Y2lfbWFrZV90YWcocGMsYnVzLGRldixmdW5jKTsKKwlwY2lyZWdfdCB0eXBlLCBzaXplLCBiYXIs
IGFkZHIsIGZsYWdzOworCWlmKHRhZz09MHg4MDAwODgwMCkKKwl7CisJCWlmKGlkPT0weDAwMDkx
MDExKQorCQl7CisJCQlwY2lyZWdfdCBpc3A7CisJCQlwY2l0YWdfdCB0YWdfaXNwPXBjaV9tYWtl
X3RhZyhwYywwLDB4ZCwwKTsKKwkJCS8qIGhlcmUgd2UgZ28uIFdlIHNob3VsZG4ndCBlbmNvdW50
ZXIgdGhpcyBhbnl3aGVyZSBlbHNlIHRoYW4gb24gYSBVTUFYIFM5MDAgd2l0aCBhbiBFMTAwIGJv
YXJkICovCisJCQkvKiBsb29rIGF0IDAwOjBkOjAwIGZvciBhIDEwMjAxMDc3ICggUWxvZ2ljIElT
UCApIHRvIG1ha2Ugc3VyZSB3ZSByZWFsbHkgaGF2ZSBhbiBFMTAwIGhlcmUgKi8KKwkJCWlzcD1w
Y2lfY29uZl9yZWFkKHBjLHRhZ19pc3AsMCk7CisJCQlpZihpc3A9PTB4MTAyMDEwNzcpCisJCQl7
CisJCQkJaWYoY29uZmlnX3BoYXNlPT1QSEFTRV9HQVRIRVIpIHsKKwkJCQkJcmV0dXJuIDA7CisJ
CQkJfSBlbHNlIHsKKwkJCQkJdV9sb25nIGFkZHI9MDsKKwkJCQkJcGNpcmVnX3QgcmVnOworCQkJ
CQlyZWc9cGNpX2NvbmZfcmVhZChwYyx0YWcsUENJX0lOVEVSUlVQVF9SRUcpOworCQkJCQlyZWc9
KHJlZyYweGZmZmZmZjAwKXwyMzsKKwkJCQkJcGNpX2NvbmZfd3JpdGUocGMsdGFnLFBDSV9JTlRF
UlJVUFRfUkVHLHJlZyk7CisJCQkJCS8qIHRoZSBFMTAwIGhhcyBzb21lIGZ1bmt5IGFsaWdubWVu
dCByZXF1aXJlbWVudHMgLSBsZXR0aW5nIHRoZSBrZXJuZWwgY29uZmlndXJlIGl0ICovCisJCQkJ
CS8qIGFsbW9zdCBjZXJ0YWlubHkgaGFuZ3MgdGhlIHdob2xlIHRoaW5nIHdoZW4gdGxwIHRyaWVz
IHRvIGF0dGFjaC4gVGhlc2UgYWRkcmVzZXMgKi8KKwkJCQkJLyogYXJlIGtub3duIHRvIHdvcmsg
dGhvdWdoICovCisJCQkJCWlmKCFhZGRyKQorCQkJCQkJZXh0ZW50X2FsbG9jX3N1YnJlZ2lvbiht
ZW1leHQsMHg4MDAwMDAwMCwweDgwMDAwMDdmLDB4ODAsMHg4MCwwLEVYX05PV0FJVCwmYWRkcik7
CisJCQkJCWlmKCFhZGRyKQorCQkJCQkJZXh0ZW50X2FsbG9jX3N1YnJlZ2lvbihtZW1leHQsMHg4
MDkwMDAwMCwweDgwOTAwMDdmLDB4ODAsMHg4MCwwLEVYX05PV0FJVCwmYWRkcik7CisJCQkJCWlm
KGFkZHIpCisJCQkJCXsKKwkJCQkJCXBjaV9jb25mX3dyaXRlKHBjLHRhZywweDE0LGFkZHIpOwor
CQkJCQkJcmV0dXJuIFBDSV9DT05GX0VOQUJMRV9NRU18UENJX0NPTkZfRU5BQkxFX0JNOworCQkJ
CQl9IGVsc2UgeworCQkJCQkJcHJpbnRmKCJTb3JyeSwgY291bGRuJ3QgbWFwIHRoZSBFMTAwIE1N
SU8gcmVnaXN0ZXJzIHRvIGFueSBrbm93biBnb29kIGFkZHJlc3MuXG4iKTsKKwkJCQkJCXByaW50
ZigiTWF5YmUgeW91J3JlIGx1Y2t5IGFuZCBhY2Nlc3MgdmlhIEkvTyB3b3Jrcy5cbiIpOworCQkJ
CQl9CisJCQkJCXJldHVybiBQQ0lfQ09ORl9NQVBfSU98UENJX0NPTkZfRU5BQkxFX0lPfFBDSV9D
T05GX0VOQUJMRV9CTTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYoY29uZmlnX3BoYXNlPT1Q
SEFTRV9HQVRIRVIpIHsKKwkJLyogaWYgd2UgYXJyaXZlIGhlcmUgd2UganVzdCB0aHJvdyBhIHZh
bHVlIGludG8gYW4gZXh0ZW50ICovCisJCSNpZmRlZiBERUJVR19QQ0kKKwkJCXByaW50ZigiZGV2
OiAlZCAlZCAlZFxuIixidXMsZGV2LGZ1bmMpOworCQkjZW5kaWYKKwkJZm9yKGJhcj1QQ0lfTUFQ
UkVHX1NUQVJUO2Jhcjw9UENJX01BUFJFR19FTkQ7YmFyKz00KSB7CisJCQl0eXBlPXBjaV9tYXBy
ZWdfdHlwZShwYyx0YWcsYmFyKTsKKwkJCS8qIHRoaXMgc3Bld3MgYSB3YXJuaW5nIHdoZW5ldmVy
IHdlIHJlYWNoIGFuIHVudXNlZCBCQVIgLSBubyBpZGVhIGhvdyB0byBzdXBwcmVzcyBpdCAqLwor
CQkJaWYocGNpX21hcHJlZ19pbmZvKHBjLHRhZyxiYXIsdHlwZSwmYWRkciwgJnNpemUsICZmbGFn
cyk9PTApIHsKKwkJCQkjaWZkZWYgREVCVUdfUENJCisJCQkJCXByaW50ZigicmVnICV4ICV4ICUw
OHggJWRcbiIsYmFyLHR5cGUsYWRkcixzaXplKTsKKwkJCQkjZW5kaWYKKwkJCQlzd2l0Y2godHlw
ZSkgeworCQkJCQljYXNlIFBDSV9NQVBSRUdfVFlQRV9JTzoKKwkJCQkJCS8qIGlnbm9yZSBib2d1
cyBhZGRyZXNzLCBlaXRoZXIgbm8gdmFsaWQgQkFSIG9yIHVuY29uZmlndXJlZCAqLworCQkJCQkJ
aWYoYWRkcjwweDdmZmZmZil7CisJCQkJCQkJZXh0ZW50X2FsbG9jX3JlZ2lvbihpb2V4dCwgYWRk
ciwgc2l6ZSwgRVhfTk9XQUlUKTsKKwkJCQkJCX0gCisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBQ
Q0lfTUFQUkVHX1RZUEVfTUVNOgorCQkJCQkJaWYoYWRkcj49MHg4MDAwMDAwMCkgeworCQkJCQkJ
CWV4dGVudF9hbGxvY19yZWdpb24obWVtZXh0LCBhZGRyLCBzaXplLCBFWF9OT1dBSVQpOworCQkJ
CQkJfQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisJCQkvKiByZWFjaGVkIGFuIHVu
dXNlZCBCQVIgLT4gZG9uJ3QgYm90aGVyIHdpdGggdGhlIHJlc3QgKi8KKwkJCQlicmVhazsKKwkJ
fQorCQkvKiBsb29rIGZvciBST00gKi8KKwkJdHlwZT1wY2lfbWFwcmVnX3R5cGUocGMsdGFnLDB4
MzApOworCQlpZihwY2lfbWFwcmVnX2luZm8ocGMsdGFnLDB4MzAsdHlwZSwmYWRkciwgJnNpemUs
ICZmbGFncyk9PTApIHsKKwkJCWlmKGFkZHI+PTB4ODAwMDAwMDApIHsKKwkJCQlleHRlbnRfYWxs
b2NfcmVnaW9uKG1lbWV4dCwgYWRkciwgc2l6ZSwgRVhfTk9XQUlUKTsKKwkJCX0KKwkJfQorCX0K
KwlyZXR1cm4gMDsKK30KKwordm9pZCBwY2lfY29uZl9pbnRlcnJ1cHQocGNpX2NoaXBzZXRfdGFn
X3QgcGMsIGludCBidXMsIGludCBkZXYsIGludAorICAgICBmdW5jLCBpbnQgc3dpeiwgaW50ICpp
bGluZSkKK3sKKwlwY2l0YWdfdCB0YWc9cGNpX21ha2VfdGFnKHBjLGJ1cyxkZXYsZnVuYyk7CisJ
cGNpcmVnX3QgaWQscmVnOworCWlmKHRhZz09MHg4MDAwODgwMCkKKwl7CisJCWlkPXBjaV9jb25m
X3JlYWQocGMsdGFnLDApOworCQkjaWZkZWYgREVCVUdfUENJCisJCQlwcmludGYoImlkOiAlMDh4
XG4iLGlkKTsKKwkJI2VuZGlmCisJCWlmKGlkPT0weDAwMDkxMDExKQorCQl7CisJCQlyZWc9cGNp
X2NvbmZfcmVhZChwYyx0YWcsUENJX0lOVEVSUlVQVF9SRUcpOworCQkJcmVnPShyZWcmMHhmZmZm
ZmYwMCl8MjM7CisJCQlwY2lfY29uZl93cml0ZShwYyx0YWcsUENJX0lOVEVSUlVQVF9SRUcscmVn
KTsKKwkJCSppbGluZT0yMzsKKwkJfQorCX0KK30K

--Multipart=_Thu__9_Dec_2004_17_56_31_-0500_q2_1R5a60535kBi+--