On 11/20/2010 01:28 PM, Kevin O'Connor wrote:
On Sat, Nov 20, 2010 at 01:18:18PM -0500, Stefan Berger wrote:
On 11/20/2010 01:05 PM, Kevin O'Connor wrote:
Is it something like stacks.c:call32() or is it via SMM?
The way it works is that there is a jumptable with entries to the function in the 'high bios'. That jumptable along with all the other 32 bit code gets relocated to upper memory and in the 'lower BIOS' I keep a pointer to the jumptable in the 'high bios' for the upcall code to see. It's basically similar to what I have previously contributed to Bochs BIOS in Xen, just that the upcall code can deal with parameter passed via registers or a limited number on the stack.
That looks to be doing the same thing that stacks.c:call32() does.
BTW, are you reserving the relocated code or are you only doing this during the init phase?
The 'high bios' functions should be accessible all the time basically. So, the relocated code needs to be marked as e820-reserved memory -- I suppose that should do the trick then?
Yes, but of course that means the OS can't use the memory then. Why does the code need to be in high memory - why not just have it in the f-segment?
With possible future extensions to the BIOS, the f-segment may not provide enough space and so we can open up 'the world' using the high memory areas. Reserving for example 256kb out of 1 GB seems negligible...