Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 07 Sep 2008 09:36:03 +0900
From:      "G. Otsuji" <annona2@gmail.com>
To:        FreeBSD Current <freebsd-current@freebsd.org>
Subject:   AMD Family 10h cpufreq driver
Message-ID:  <200809070036.m870a3NC001532@softbank219001162114.bbtec.net>

next in thread | raw e-mail | index | archive | help
--Multipart_Sun_Sep__7_09:36:03_2008-1
Content-Type: text/plain; charset=US-ASCII


Hello ,
I have AMD Phenom x4 9850 BE cpu ,but 
there was no sysctl oid dev.cpu.0.freq_levels.
so I read the BKDG (bios and kernel developer guide for AMD Family 10h)
and finally I reached some result.
I wrote pstate.c cpufreq driver module. attached in this mail.
I have tested this module on i386 current/stable, amd64 current/stable.
and make -j20 buildworld can be done with running powerd.
This module has capability to down clock to 400MHz.
but It's slow, so echo "debug.cpufreq.lowest=1200" >>/boot/loader.conf.
and the reuslt is as follows.
$ sysctl dev.cpu.0.freq_levels
dev.cpu.0.freq_levels: 2500/-1 2400/-1 2300/-1 2200/-1 2100/-1 2000/-1 
1900/-1 1800/-1 1700/-1 1600/-1 1500/-1 1400/-1 1300/-1 1200/-1

I have enjoying this module in a few days but It's OK.

AMD Family 10h cpu_id's are 100f23,100f2a,100f22.
I don't have Opteron 13XX 23XX 83XX,Phenom X3, and other Phenom X4,And MP system.
if you have these cpu's , i would like you to try this module.
feel free to contact me.

Sincerely,
G. Otsuji <annona2@gmail.com>


--Multipart_Sun_Sep__7_09:36:03_2008-1
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="pstate.c"
Content-Transfer-Encoding: base64

LyotCiAqIENvcHlyaWdodCAoYykgMjAwOCBHZW4gT3RzdWppCiAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
aW5nIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JgYEFTIElT
JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQogKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
CiAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORwogKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAqLwoKLyoKICogUmVmZXJlbmNlOiBSZXYgMy4wNiAtIE1hcmNoIDI2LCAyMDA4IEFNRCBG
YW1pbHkgMTBoIFByb2Nlc3NvciBCS0RHCiAqLwoKI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgpfX0ZC
U0RJRCgiJEZyZWVCU0QkIik7CgojaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiNpbmNsdWRlIDxzeXMv
YnVzLmg+CiNpbmNsdWRlIDxzeXMvY3B1Lmg+CiNpbmNsdWRlIDxzeXMva2VybmVsLmg+CiNpbmNs
dWRlIDxzeXMvbW9kdWxlLmg+CiNpbmNsdWRlIDxzeXMvcHJvYy5oPgojaW5jbHVkZSA8c3lzL3N5
c2N0bC5oPgojaW5jbHVkZSA8c3lzL3N5c3RtLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KCiNp
bmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgojaW5jbHVkZSA8bWFjaGluZS9tZF92YXIuaD4KCiNp
bmNsdWRlIDxjb250cmliL2Rldi9hY3BpY2EvYWNwaS5oPgojaW5jbHVkZSA8ZGV2L2FjcGljYS9h
Y3BpdmFyLmg+CgojaW5jbHVkZSAiYWNwaV9pZi5oIgojaW5jbHVkZSAiY3B1ZnJlcV9pZi5oIgoK
I2RlZmluZSBNU1JfUFNUQVRFX0xJTUlUICAgIDB4YzAwMTAwNjEKI2RlZmluZSBNU1JfUFNUQVRF
X0NPTlRST0wgIDB4YzAwMTAwNjIKI2RlZmluZSBNU1JfUFNUQVRFX1NUQVRVUyAgIDB4YzAwMTAw
NjMKI2RlZmluZSBNU1JfUFNUQVRFX0NPTkZJRyAgIDB4YzAwMTAwNjQKI2RlZmluZSBNU1JfUFNU
QVRFX0NPRlZJRCAgIDB4YzAwMTAwNzEKCiNkZWZpbmUgTVNSX1BTVEFURV9NT0YobXNyKSAgICAg
ICAgICAgICAgICAgKCgodWludDY0X3QpKG1zcik+PjQ5KSYweDNGKQojZGVmaW5lIE1TUl9QU1RB
VEVfQ1VSX1ZJRChtc3IpICAgICAgICAgICAgICgoKG1zcikgPj4gOSkgJiAweDNGKQojZGVmaW5l
IE1TUl9QU1RBVEVfQ1VSX0RJRChtc3IpICAgICAgICAgICAgICgoKG1zcikgPj4gNikgJiAweDA3
KQojZGVmaW5lIE1TUl9QU1RBVEVfQ1VSX0ZJRChtc3IpICAgICAgICAgICAgICgobXNyKSAmIDB4
M0YpCiNkZWZpbmUgUFNUQVRFX0xJU1RWSURfVE9fVklEKGxpc3R2aWQsbXVsdCkgKChsaXN0dmlk
KSAqIChtdWx0KSkKI2RlZmluZSBQU1RBVEVfVklEX1RPX0xJU1RWSUQodmlkLG11bHQpICAgICAo
KHZpZCkgLyAobXVsdCkpCiNkZWZpbmUgUFNUQVRFX0xJU1RWSURfVE9fVk9MVFMobGlzdHZpZCkg
ICAgKDE1NTAgLSAyNSAqIChsaXN0dmlkKSkKI2RlZmluZSBQU1RBVEVfVklEX1RPX1ZPTFRTKHZp
ZCxtdWx0KSAgICAgICAoMTU1MCAtIDI1MCAqICh2aWQpIC8gKG11bHQpIC8xMCkKI2RlZmluZSBQ
U1RBVEVfTUtfUFNUQVRFKG1zcixsaXN0dmlkLG11bHQpICAgICAgICAgICAgICAgICAgICAgICBc
CgkoKChtc3IpICYgMHhGRkZGRkZGRkZGRkYwMDAwKSB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCgkgKCgoUFNUQVRFX0xJU1RWSURfVE9fVklEKGxpc3R2aWQsbXVsdCkpICYgMHg3RikgPDwg
OSkgfCBcCgkgKChwc3RhdGVfZGlkX2xpc3RbaWRdICYgMHgwNykgPDwgNikgfCAgICAgICAgICAg
ICAgICAgICBcCgkgKChwc3RhdGVfZmlkX2xpc3RbaWRdICYgMHgzRikpKQoKc3RhdGljIGNvbnN0
IGludCBwc3RhdGVfdmlkX2xpc3RbMzNdID0gewoJMjYsIDI2LCAyNiwgMjYsIDI2LCAyNSwgMjQs
IDIzLCAyMiwgMjIsIDIxLCAyMCwgMTksIDE4LCAxOCwgMTcsIDE2LAoJMTUsIDE0LCAxNCwgMTMs
IDEyLCAxMSwgMTAsIDEwLCA5LCA4LCA3LCA2LCA2LCA1LCA0LCAzCn07CnN0YXRpYyBjb25zdCBp
bnQgcHN0YXRlX2ZpZF9saXN0WzMzXSA9IHsKCTAsIDAsIDAsIDAsIDQsIDgsIDEyLCAwLCAyLCA0
LCA2LCA4LCAxMCwgMTIsIDE0LCAwLCAxLAoJMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEx
LCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3Cn07CnN0YXRpYyBjb25zdCBpbnQgcHN0YXRlX2RpZF9s
aXN0WzMzXSA9IHsKCTIsIDIsIDIsIDIsIDIsIDIsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDAsIDAsCgkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCn07
CnN0YXRpYyBjb25zdCBpbnQgcHN0YXRlX2RpZF90b19kaXZbXSA9IHsKCTEsIDIsIDQsIDgsIDE2
LCAxNiwgMTYsIDE2Cn07CiNkZWZpbmUgUFNUQVRFX01BWF9TVEFURVMJNjQKCnN0cnVjdCBwc3Rh
dGVfc2V0dGluZyB7CglpbnQJCWZyZXE7CS8qIENQVSBjbG9jayBpbiBNaHogb3IgMTAwdGhzIG9m
IGEgcGVyY2VudC4gKi8KCWludAkJdm9sdHM7CS8qIFZvbHRhZ2UgaW4gbVYuICovCglpbnQJCXBv
d2VyOwkvKiBQb3dlciBjb25zdW1lZCBpbiBtVy4gKi8KCWludAkJbGF0OwkvKiBUcmFuc2l0aW9u
IGxhdGVuY3kgaW4gdXMuICovCglkZXZpY2VfdAlkZXY7CS8qIERyaXZlciBwcm92aWRpbmcgdGhp
cyBzZXR0aW5nLiAqLwp9OwoKc3RydWN0IHBzdGF0ZV9zb2Z0YyB7CglkZXZpY2VfdAlkZXY7Cglz
dHJ1Y3QgcHN0YXRlX3NldHRpbmcgcHN0YXRlX3NldHRpbmdzW1BTVEFURV9NQVhfU1RBVEVTXTsK
CWludAkJY2ZudW07CglpbnQJCW1vZl9pZDsJLyogTWF4aW11bSBPcGVyYXRpbmcgRnJlcXVlbmN5
IC8gMTAwICovCglpbnQJCW11bHQ7CS8qIDIoaW4gc3ZpIG1vZGUpIDEoaW4gcHZpIG1vZGUpICov
Cgl1aW50NjRfdAliYWNrdXAgWzVdOwoJZGV2aWNlX3QJRjM7Cn07CgpzdGF0aWMgdm9pZAlwc3Rh
dGVfaWRlbnRpZnkoZHJpdmVyX3QgKiBkcml2ZXIsIGRldmljZV90IHBhcmVudCk7CnN0YXRpYyBp
bnQJcHN0YXRlX3Byb2JlKGRldmljZV90IGRldik7CnN0YXRpYyBpbnQJcHN0YXRlX2F0dGFjaChk
ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50CXBzdGF0ZV9kZXRhY2goZGV2aWNlX3QgZGV2KTsKc3Rh
dGljIGludAlwc3RhdGVfc2V0KGRldmljZV90IGRldiwgY29uc3Qgc3RydWN0IGNmX3NldHRpbmcg
KmNmKTsKc3RhdGljIGludAlwc3RhdGVfZ2V0KGRldmljZV90IGRldiwgc3RydWN0IGNmX3NldHRp
bmcgKmNmKTsKc3RhdGljIGludAlwc3RhdGVfc2V0dGluZ3MoZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qg
Y2Zfc2V0dGluZyAqc2V0cywgaW50ICpjb3VudCk7CnN0YXRpYyBpbnQJcHN0YXRlX3R5cGUoZGV2
aWNlX3QgZGV2LCBpbnQgKnR5cGUpOwpzdGF0aWMgaW50CXBzdGF0ZV9zaHV0ZG93bihkZXZpY2Vf
dCBkZXYpOwpzdGF0aWMgaW50CXBzdGF0ZV9mZWF0dXJlcyhkcml2ZXJfdCAqIGRyaXZlciwgdV9p
bnQgKiBmZWF0dXJlcyk7CgpzdGF0aWMgZGV2aWNlX21ldGhvZF90IHBzdGF0ZV9tZXRob2RzW10g
PSB7CgkvKiBEZXZpY2UgaW50ZXJmYWNlICovCglERVZNRVRIT0QoZGV2aWNlX2lkZW50aWZ5LCBw
c3RhdGVfaWRlbnRpZnkpLAoJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgcHN0YXRlX3Byb2JlKSwK
CURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBwc3RhdGVfYXR0YWNoKSwKCURFVk1FVEhPRChkZXZp
Y2VfZGV0YWNoLCBwc3RhdGVfZGV0YWNoKSwKCURFVk1FVEhPRChkZXZpY2Vfc2h1dGRvd24sIHBz
dGF0ZV9zaHV0ZG93biksCgoJLyogY3B1ZnJlcSBpbnRlcmZhY2UgKi8KCURFVk1FVEhPRChjcHVm
cmVxX2Rydl9zZXQsIHBzdGF0ZV9zZXQpLAoJREVWTUVUSE9EKGNwdWZyZXFfZHJ2X2dldCwgcHN0
YXRlX2dldCksCglERVZNRVRIT0QoY3B1ZnJlcV9kcnZfc2V0dGluZ3MsIHBzdGF0ZV9zZXR0aW5n
cyksCglERVZNRVRIT0QoY3B1ZnJlcV9kcnZfdHlwZSwgcHN0YXRlX3R5cGUpLAoKCS8qIEFDUEkg
aW50ZXJmYWNlICovCglERVZNRVRIT0QoYWNwaV9nZXRfZmVhdHVyZXMsIHBzdGF0ZV9mZWF0dXJl
cyksCgoJezAsIDB9Cn07CgpzdGF0aWMgZGV2Y2xhc3NfdCBwc3RhdGVfZGV2Y2xhc3M7CnN0YXRp
YyBkcml2ZXJfdAlwc3RhdGVfZHJpdmVyID0gewoJInBzdGF0ZSIsCglwc3RhdGVfbWV0aG9kcywK
CXNpemVvZihzdHJ1Y3QgcHN0YXRlX3NvZnRjKSwKfTsKRFJJVkVSX01PRFVMRShwc3RhdGUsIGNw
dSwgcHN0YXRlX2RyaXZlciwgcHN0YXRlX2RldmNsYXNzLCAwLCAwKTsKCnN0YXRpYyBpbnQKcHN0
YXRlX2N1cl9jcHVfZnJlcSh2b2lkKQp7Cgl1aW50NjRfdAltc3I7CglpbnQJCWRpZCAgICAgICAs
IGZpZDsKCW1zciA9IHJkbXNyKE1TUl9QU1RBVEVfQ09GVklEKTsKCWRpZCA9IE1TUl9QU1RBVEVf
Q1VSX0RJRChtc3IpOwoJZmlkID0gTVNSX1BTVEFURV9DVVJfRklEKG1zcik7CglpZiAoYm9vdHZl
cmJvc2UpCgkJcHJpbnRmKCJwc3RhdGU6IERJRD0lZCxGSUQ9JWRcbiIsIGRpZCwgZmlkKTsKCXJl
dHVybiAoMTAwICogKGZpZCArIDE2KSAvIHBzdGF0ZV9kaWRfdG9fZGl2W2RpZF0pOwp9CgpzdGF0
aWMgaW50CnBzdGF0ZV9jdXJfY3B1X3ZvbHRzKGludCBtdWx0KQp7Cgl1aW50NjRfdAltc3I7Cglp
bnQJCXZpZDsKCW1zciA9IHJkbXNyKE1TUl9QU1RBVEVfQ09GVklEKTsKCXZpZCA9IE1TUl9QU1RB
VEVfQ1VSX1ZJRChtc3IpOwoJaWYgKGJvb3R2ZXJib3NlKQoJCXByaW50ZigicHN0YXRlOiBWSUQ9
JWRcbiIsIHZpZCk7CglyZXR1cm4gKFBTVEFURV9WSURfVE9fVk9MVFModmlkLCBtdWx0KSk7Cn0K
CnN0YXRpYyBpbnQKcHN0YXRlX3NldChkZXZpY2VfdCBkZXYsIGNvbnN0IHN0cnVjdCBjZl9zZXR0
aW5nICpjZikKewoJc3RydWN0IHBzdGF0ZV9zb2Z0YyAqc2M7CglzdHJ1Y3QgcHN0YXRlX3NldHRp
bmcgKnBzOwoJdWludDY0X3QJbXNyOwoJaW50CQlpICAgICAgICAgLCBpZCwgc2V0ZnJlcSwgY3Vy
ZnJlcSwgY3Vydm9sdHM7CglpZiAoY2YgPT0gTlVMTCkKCQlyZXR1cm4gKEVJTlZBTCk7Cgltc3Ig
PSByZG1zcihNU1JfUFNUQVRFX0NPTkZJRyArIDEpOwoJaWYgKCEobXNyICYgMHg4MDAwMDAwMDAw
MDAwMDAwKSkgewoJCWlmIChib290dmVyYm9zZSkKCQkJZGV2aWNlX3ByaW50ZihkZXYsICJQMSBu
b3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLlxuIik7CgkJcmV0dXJuIChFTk9ERVYpOwoJfQoJc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CglwcyA9IHNjLT5wc3RhdGVfc2V0dGluZ3M7Cglmb3Ig
KGkgPSAwOyBpIDwgc2MtPmNmbnVtOyBpKyssIHBzKyspCgkJaWYgKGNmLT5mcmVxID09IHBzLT5m
cmVxKSB7CgkJCWJyZWFrOwoJCX0KCXNldGZyZXEgPSBwcy0+ZnJlcTsKCWlmIChpID09IHNjLT5j
Zm51bSkgewoJCWlmIChib290dmVyYm9zZSkKCQkJZGV2aWNlX3ByaW50ZihkZXYsICIlZCBNSHog
aXMgbm90IHN1cHBvcnRlZC5cbiIsCgkJCQkgICAgICBjZi0+ZnJlcSk7CgkJcmV0dXJuIChFSU5W
QUwpOwoJfQoJLyogZ28gdG8gUDAgKi8KCXdybXNyKE1TUl9QU1RBVEVfQ09OVFJPTCwgMCk7CglE
RUxBWSgzMDAwKTsKCWlmIChzZXRmcmVxIC8gMTAwID09IHNjLT5tb2ZfaWQpIHsKCQlpZiAoYm9v
dHZlcmJvc2UpCgkJCWRldmljZV9wcmludGYoZGV2LCAiZ29pbmcgYmFjayB0byBkZWZhdWx0IHNl
dHRpbmcuXG4iKTsKCQlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKQoJCQl3cm1zcihNU1JfUFNUQVRF
X0NPTkZJRyArIGksIHNjLT5iYWNrdXBbaV0pOwoJCXJldHVybiAoMCk7Cgl9CgkvKiBjb3B5IGNv
bmZpZyB2YWwgZnJvbSBQMCB0byBQMSAqLwoJbXNyID0gcmRtc3IoTVNSX1BTVEFURV9DT05GSUcp
OwoJd3Jtc3IoTVNSX1BTVEFURV9DT05GSUcgKyAxLCBtc3IpOwoJLyogbWFrZSBwc3RhdGUgKi8K
CWlkID0gc2MtPm1vZl9pZCAtIGkgLSAxOwoJbXNyID0gUFNUQVRFX01LX1BTVEFURShtc3IsIHBz
dGF0ZV92aWRfbGlzdFtpZF0sIHNjLT5tdWx0KTsKCXdybXNyKE1TUl9QU1RBVEVfQ09ORklHICsg
MSwgbXNyKTsKCWlmIChib290dmVyYm9zZSkKCQlkZXZpY2VfcHJpbnRmKGRldiwgImdvaW5nIHRv
ICVkTUh6XG4iLCBzZXRmcmVxKTsKCS8qIGdvIHRvIFAxICovCgl3cm1zcihNU1JfUFNUQVRFX0NP
TlRST0wsIDEpOwoJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewoJCURFTEFZKDMwMDApOwoJ
CWN1cmZyZXEgPSBwc3RhdGVfY3VyX2NwdV9mcmVxKCk7CgkJY3Vydm9sdHMgPSBwc3RhdGVfY3Vy
X2NwdV92b2x0cyhzYy0+bXVsdCk7CgkJaWYgKHNldGZyZXEgPT0gY3VyZnJlcSkKCQkJYnJlYWs7
Cgl9CglpZiAoc2V0ZnJlcSAhPSBjdXJmcmVxICYmIGJvb3R2ZXJib3NlKSB7CgkJZGV2aWNlX3By
aW50ZihkZXYsICJjdXJyZW50ICVkTUh6IGFuZCBzZXQgJWRNSHogZGlmZmVyLlxuIiwKCQkJICAg
ICAgY3VyZnJlcSwgc2V0ZnJlcSk7CgkJcmV0dXJuICgwKTsKCX0KCWlmIChib290dmVyYm9zZSkK
CQlkZXZpY2VfcHJpbnRmKGRldiwgIk5vdzogJWQgTUh6ICVkIG1WXG4iLCBjdXJmcmVxLCBjdXJ2
b2x0cyk7CgoJbXNyID0gcmRtc3IoTVNSX1BTVEFURV9TVEFUVVMpOwoJaWYgKG1zciAhPSAxICYm
IGJvb3R2ZXJib3NlKQoJCWRldmljZV9wcmludGYoZGV2LCAiUDEgaXMgbm90IGVuYWJsZWQuXG4i
KTsKCXJldHVybiAoMCk7Cn0KCnN0YXRpYyBpbnQKcHN0YXRlX2dldChkZXZpY2VfdCBkZXYsIHN0
cnVjdCBjZl9zZXR0aW5nICpjZikKewoJc3RydWN0IHBzdGF0ZV9zb2Z0YyAqc2M7CglzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKCWlmIChjZiA9PSBOVUxMKQoJCXJldHVybiAoRUlOVkFMKTsK
CWNmLT5mcmVxID0gcHN0YXRlX2N1cl9jcHVfZnJlcSgpOwoJY2YtPnZvbHRzID0gcHN0YXRlX2N1
cl9jcHVfdm9sdHMoc2MtPm11bHQpOwoJY2YtPnBvd2VyID0gQ1BVRlJFUV9WQUxfVU5LTk9XTjsK
CWNmLT5sYXQgPSAxNjsKCWNmLT5kZXYgPSBkZXY7CglyZXR1cm4gKDApOwp9CgpzdGF0aWMgaW50
CnBzdGF0ZV9zZXR0aW5ncyhkZXZpY2VfdCBkZXYsIHN0cnVjdCBjZl9zZXR0aW5nICpzZXRzLCBp
bnQgKmNvdW50KQp7CglzdHJ1Y3QgcHN0YXRlX3NvZnRjICpzYzsKCWludAkJaTsKCWlmIChzZXRz
ID09IE5VTEwgfHwgY291bnQgPT0gTlVMTCkKCQlyZXR1cm4gKEVJTlZBTCk7CglzYyA9IGRldmlj
ZV9nZXRfc29mdGMoZGV2KTsKCWlmICgqY291bnQgPCBzYy0+Y2ZudW0pCgkJcmV0dXJuIChFMkJJ
Ryk7Cglmb3IgKGkgPSAwOyBpIDwgc2MtPmNmbnVtOyBpKyssIHNldHMrKykgewoJCXNldHMtPmZy
ZXEgPSBzYy0+cHN0YXRlX3NldHRpbmdzW2ldLmZyZXE7CgkJc2V0cy0+dm9sdHMgPSBzYy0+cHN0
YXRlX3NldHRpbmdzW2ldLnZvbHRzOwoJCXNldHMtPnBvd2VyID0gc2MtPnBzdGF0ZV9zZXR0aW5n
c1tpXS5wb3dlcjsKCQlzZXRzLT5sYXQgPSBzYy0+cHN0YXRlX3NldHRpbmdzW2ldLmxhdDsKCQlz
ZXRzLT5kZXYgPSBzYy0+cHN0YXRlX3NldHRpbmdzW2ldLmRldjsKCX0KCSpjb3VudCA9IHNjLT5j
Zm51bTsKCXJldHVybiAoMCk7Cn0KCnN0YXRpYyBpbnQKcHN0YXRlX3R5cGUoZGV2aWNlX3QgZGV2
LCBpbnQgKnR5cGUpCnsKCglpZiAodHlwZSA9PSBOVUxMKQoJCXJldHVybiAoRUlOVkFMKTsKCSp0
eXBlID0gQ1BVRlJFUV9UWVBFX0FCU09MVVRFOwoJcmV0dXJuICgwKTsKfQoKc3RhdGljIGludApw
c3RhdGVfaXNfY2FwYWJsZSh2b2lkKQp7Cgl1X2ludAkJcmVncyAgICAgWzRdOwoJaWYgKHN0cmNt
cChjcHVfdmVuZG9yLCAiQXV0aGVudGljQU1EIikgIT0gMCB8fAoJICAgIGNwdV9leHRoaWdoIDwg
MHg4MDAwMDAwNykKCQlyZXR1cm4gKEZBTFNFKTsKCXN3aXRjaCAoY3B1X2lkKSB7CgljYXNlIDB4
MTAwZjJBOgoJY2FzZSAweDEwMGYyMjoKCWNhc2UgMHgxMDBmMjM6CgkJYnJlYWs7CglkZWZhdWx0
OgoJCXJldHVybiAoRkFMU0UpOwoJfQoJZG9fY3B1aWQoMHg4MDAwMDAwNywgcmVncyk7CglpZiAo
cmVnc1szXSAmIDB4ODApIHsKCQlyZXR1cm4gKFRSVUUpOwoJfQoJcmV0dXJuIChGQUxTRSk7Cn0K
CnN0YXRpYyB2b2lkCnBzdGF0ZV9pZGVudGlmeShkcml2ZXJfdCAqIGRyaXZlciwgZGV2aWNlX3Qg
cGFyZW50KQp7CglkZXZpY2VfdAljaGlsZDsKCWlmIChkZXZpY2VfZmluZF9jaGlsZChwYXJlbnQs
ICJwc3RhdGUiLCAtMSkgIT0gTlVMTCkKCQlyZXR1cm47CglpZiAocHN0YXRlX2lzX2NhcGFibGUo
KSA9PSBGQUxTRSkKCQlyZXR1cm47CglpZiAoKGNoaWxkID0gQlVTX0FERF9DSElMRChwYXJlbnQs
IDEwLCAicHN0YXRlIiwgLTEpKSA9PSBOVUxMKQoJCWRldmljZV9wcmludGYocGFyZW50LCAicHN0
YXRlOiBhZGQgY2hpbGQgZmFpbGVkXG4iKTsKfQoKc3RhdGljIGludApwc3RhdGVfcHJvYmUoZGV2
aWNlX3QgZGV2KQp7CglkZXZpY2VfdAlwZXJmX2RldjsKCWludAkJZXJyb3IgICAgICwgdHlwZTsK
CWlmIChyZXNvdXJjZV9kaXNhYmxlZCgicHN0YXRlIiwgMCkpCgkJcmV0dXJuIChFTlhJTyk7CgoJ
cGVyZl9kZXYgPSBkZXZpY2VfZmluZF9jaGlsZChkZXZpY2VfZ2V0X3BhcmVudChkZXYpLCAiYWNw
aV9wZXJmIiwgLTEpOwoJaWYgKHBlcmZfZGV2ICYmIGRldmljZV9pc19hdHRhY2hlZChwZXJmX2Rl
dikpIHsKCQllcnJvciA9IENQVUZSRVFfRFJWX1RZUEUocGVyZl9kZXYsICZ0eXBlKTsKCQlpZiAo
ZXJyb3IgPT0gMCAmJiAodHlwZSAmIENQVUZSRVFfRkxBR19JTkZPX09OTFkpID09IDApCgkJCXJl
dHVybiAoRU5YSU8pOwoJfQoJZGV2aWNlX3NldF9kZXNjKGRldiwgIkNvb2xgbidRdWlldCAyLjAi
KTsKCXJldHVybiAoMCk7Cn0KCnN0YXRpYyBpbnQKcHN0YXRlX2F0dGFjaChkZXZpY2VfdCBkZXYp
CnsKCXN0cnVjdCBwc3RhdGVfc29mdGMgKnNjOwoJdWludDY0X3QJbXNyOwoJdWludDMyX3QJY2Zn
OwoJaW50CQlpICAgICAgICAgLCBqLCBsaXN0dmlkOwoJdV9pbnQJCXJlZ3MgICAgIFs0XSwgcmVn
OwoJY2hhcgkJY3B1X21vZGVsIFs0OF0sICpwID0gY3B1X21vZGVsOwoJc2MgPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldik7Cglmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQoJCXNjLT5iYWNrdXBbaV0gPSBy
ZG1zcihNU1JfUFNUQVRFX0NPTkZJRyArIGkpOwoJbXNyID0gcmRtc3IoTVNSX1BTVEFURV9DT0ZW
SUQpOwoJc2MtPm1vZl9pZCA9IE1TUl9QU1RBVEVfTU9GKG1zcikgLyAxMDA7CglpZiAoc2MtPm1v
Zl9pZCA9PSAwKSB7CgkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewoJCQlkb19jcHVpZCgweDgw
MDAwMDAyICsgaSwgcmVncyk7CgkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKCQkJCXJlZyA9
IHJlZ3Nbal07CgkJCQkqcCsrID0gKGNoYXIpKHJlZyAmIDB4ZmYpOwoJCQkJKnArKyA9IChjaGFy
KSgocmVnID4+IDgpICYgMHhmZik7CgkJCQkqcCsrID0gKGNoYXIpKChyZWcgPj4gMTYpICYgMHhm
Zik7CgkJCQkqcCsrID0gKGNoYXIpKChyZWcgPj4gMjQpICYgMHhmZik7CgkJCX0KCQl9CgkJaWYg
KHN0cnN0cihjcHVfbW9kZWwsICJQaGVub20iKSkgewoJCQlpZiAoc3Ryc3RyKGNwdV9tb2RlbCwg
Ijk2MDAiKSkgewoJCQkJc2MtPm1vZl9pZCA9IDIzOwkvKiAyLjMgR0h6ICovCgkJCX0gZWxzZSBp
ZiAoc3Ryc3RyKGNwdV9tb2RlbCwgIjk4NTAiKSkgewoJCQkJc2MtPm1vZl9pZCA9IDI1OwkvKiAy
LjUgR0h6ICovCgkJCX0gZWxzZSBpZiAoc3Ryc3RyKGNwdV9tb2RlbCwgIjk5NTAiKSkgewoJCQkJ
c2MtPm1vZl9pZCA9IDI2OwkvKiAyLjYgR0h6ICovCgkJCX0KCQl9CgkJaWYgKHNjLT5tb2ZfaWQg
PT0gMCkgewoJCQlyZXR1cm4gKEVOT0RFVik7CgkJfQoJfQoJLyogaWYgMjUwMCwuLjYwMCw1MDAs
NDAwIE1IeiA9PiBzYy0+bW9mX2lkPTI1OyBzYy0+Y2ZudW09MjI7ICovCglzYy0+Y2ZudW0gPSBz
Yy0+bW9mX2lkIC0gMzsKCS8qKgoJICogZm9sbG93aW5nIDI0IG1lYW5zIHRoZSAxc3QgY3B1LiAy
NS0zMSBpbnN0ZWFkIG9mIDI0IGlzIE1QIHN5c3RlbS4KCSAqIEkgZG9uJ3QgaGF2ZSBNUCBzeXN0
ZW0gOi08IC4KCSAqLwoJc2MtPkYzID0gcGNpX2ZpbmRfYnNmKDAsIDI0LCAzKTsKCWNmZyA9IHBj
aV9yZWFkX2NvbmZpZyhzYy0+RjMsIDB4QTAsIDQpOwoJaWYgKGNmZyAmIDB4MTApCQkvKiBQVkkg
bW9kZSAqLwoJCXNjLT5tdWx0ID0gMTsKCWVsc2UJCQkvKiBTVkkgbW9kZSAqLwoJCXNjLT5tdWx0
ID0gMjsKCWZvciAoaSA9IDA7IGkgPCBzYy0+Y2ZudW07IGkrKykgewoJCXNjLT5wc3RhdGVfc2V0
dGluZ3NbaV0uZnJlcSA9IDEwMCAqIChzYy0+bW9mX2lkIC0gaSk7CgkJbGlzdHZpZCA9IHBzdGF0
ZV92aWRfbGlzdFtzYy0+bW9mX2lkIC0gaV07CgkJc2MtPnBzdGF0ZV9zZXR0aW5nc1tpXS52b2x0
cyA9IFBTVEFURV9MSVNUVklEX1RPX1ZPTFRTKGxpc3R2aWQpOwoJCXNjLT5wc3RhdGVfc2V0dGlu
Z3NbaV0ucG93ZXIgPSBDUFVGUkVRX1ZBTF9VTktOT1dOOwoJCXNjLT5wc3RhdGVfc2V0dGluZ3Nb
aV0ubGF0ID0gMTY7CgkJc2MtPnBzdGF0ZV9zZXR0aW5nc1tpXS5kZXYgPSBkZXY7Cgl9CgljcHVm
cmVxX3JlZ2lzdGVyKGRldik7CglyZXR1cm4gKDApOwp9CgpzdGF0aWMgaW50CnBzdGF0ZV9kZXRh
Y2goZGV2aWNlX3QgZGV2KQp7CglzdHJ1Y3QgcHN0YXRlX3NvZnRjICpzYzsKCWludAkJbmV3OwoJ
c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgluZXcgPSBzYy0+bW9mX2lkICogMTAwOwoJaWYg
KG5ldyAhPSAwKQoJCWtlcm5lbF9zeXNjdGxieW5hbWUoJnRocmVhZDAsICJkZXYuY3B1LjAuZnJl
cSIsCgkJCQkgICAgMCwgMCwgJm5ldywgc2l6ZW9mKG5ldyksIE5VTEwsIDApOwoJcmV0dXJuIChj
cHVmcmVxX3VucmVnaXN0ZXIoZGV2KSk7Cn0KCnN0YXRpYyBpbnQKcHN0YXRlX3NodXRkb3duKGRl
dmljZV90IGRldikKewoJc3RydWN0IHBzdGF0ZV9zb2Z0YyAqc2M7CglpbnQJCW5ldzsKCXNjID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoJbmV3ID0gc2MtPm1vZl9pZCAqIDEwMDsKCWlmIChuZXcg
IT0gMCkKCQlrZXJuZWxfc3lzY3RsYnluYW1lKCZ0aHJlYWQwLCAiZGV2LmNwdS4wLmZyZXEiLAoJ
CQkJICAgIDAsIDAsICZuZXcsIHNpemVvZihuZXcpLCBOVUxMLCAwKTsKCXJldHVybiAoMCk7Cn0K
CnN0YXRpYyBpbnQKcHN0YXRlX2ZlYXR1cmVzKGRyaXZlcl90ICogZHJpdmVyLCB1X2ludCAqIGZl
YXR1cmVzKQp7CgoJKmZlYXR1cmVzID0gQUNQSV9DQVBfUEVSRl9NU1JTOwoJcmV0dXJuICgwKTsK
fQo=

--Multipart_Sun_Sep__7_09:36:03_2008-1
Content-Type: text/plain; charset=US-ASCII




--Multipart_Sun_Sep__7_09:36:03_2008-1--



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