* Joseph Smith joe@settoplinux.org [110106 19:28]:
[f000:3a5c] -- IO: outb 0cfc <= 10 PCI 0:1f.0 R.44 [f000:3a5c] -- IO: inw 1004 => 0000 [f000:0013] -- IO: outw 0080 <= fea0 [f000:0024] -- IO: outl 0cf8 <= 800000fc [f000:0024] -- IO: outw 0cfc <= 0109 PCI 0:00.0 R.fc [f000:0024] -- IO: outb 0080 <= 01 [f000:0078] -- IO: outb 0080 <= 02 [f000:009a] -- IO: outw 0080 <= eee3 <------FREEZE
0xf0091: test $0x3,%ebp 0xf0098: jne 0xf00a1 0xf009a: mov $0xeee3,%ax 0xf009d: out %ax,$0x80 0xf009f: jmp 0xf009f 0xf00a1: mov $0x3,%al 0xf00a3: out %al,$0x80 ----bla, bla, bla
So I think it all points back to the PMBASE + 4 (0x1004) register.
0xf3b0a: shr $0xa,%ax 0xf3b0d: and $0x7,%ax 0xf3b10: cmp $0x5,%ax
This checks if bits 12:0 have a value of 5. I.e. whether the machine is coming out of a deep sleep
I tried to set PMBASE + 4 (0x1004) to 0x0005 in my serialice mainboard config but when the bios re-enables PMBASE it seems to get wiped out (reset to 0).
Also, that would set bits that are completely unrelated to the ones checked above.
You should look for code that sets/clears the lower 2 bits in ebp
Stefan