On Mon, Dec 18, 2000 at 03:32:23PM -0500, Drew Northup wrote:
> That is walking around the problem instead of creating a solution. It
> probably works too, but we don't have working serial yet anyway--so we might
> as well think this over as many other problems may be solved the same way.
Oh, I thought we did have working serial.
I should think an interface like this would be happy:
Guest Driver Initiated
----------------------
Guest creates a buffer, and fills it in.
Guest sets ES:DI with the address of the buffer, AX with the length of
the buffer, BH with the subsystem ID (IE 'n' for network) and BL with a code
specific for the subsystem.
Guest executes some specific bad opcode, which causes a fault.
Monitor catches the fault, checks that it's of the correct bad opcode, and
passes it to the host.
Host does processing, and sets BX to 0 if there is no error, or gives an
error code in BX otherwise. Some might want to return more then 64 bits of
state, in that case it should overwrite the buffer given. Only the BX
register should be changed, though, to insure a consistent interface.
Host Initated
-------------
Host sets registers as described above, and does an INT3 in the guest. (I'm
assuming that hw int 3 will never happen other then this, since it's used
for emulation. Am I correct in this?) We map the host's buffer in
somewhere. I'd say that above any point that has yet been accessed. On
IRET, we unmap it, so as not to step on any toes. If the interupt handler
isn't finished with the data, it should copy it.
-=- James Mastros
--
midendian: She never sleeps.
mousetrout: But I do. I just regret it after I wake up.
AIM: theorbtwo homepage: http://www.rtweb.net/theorb/
ICBM: 40:04:15.100 N, 76:18:53.165 W