detecting > 64M on x86

Larry M. Augustin (lma@varesearch.com)
Sat, 21 Dec 1996 09:45:41 -0800


Modern x86 BIOSes support detection of memory > 64MB. I have modified
arch/i386/boot/setup.S to safely detect the presence of these BIOS
features and use them if present to detect more than 64MB RAM.

I now need some advice as to how to return this information to the
kernel.

For example, the int 15h ah=c7 get memory map call returns a 42 byte
structure that includes how much memory is installed above and below
the 16M boundary.

Here are two possible ways to proceed:

1. Assign a 42 byte block in the PARAM page to return the entire
data structure. We would still need a way to return the memory
for systems that do not support the memory map bios call - probably
use the existing PARAM+2 location.
2. Change the PARAM+2 location to return the amount of memory in MB instead
of 1K chunks. Currently this location is only a 16-bit word and
returns memory on 1K chunks.

The 42-byte memory map data structure is defined as:

word length of table
dword local memory between 1M and 16M in 1K blocks
dword local memory between 16M and 4G in 1K blocks
dword system memory between 1M and 16M in 1K blocks
dword system memory between 16M and 4G in 1K blocks
dword cacheable memory between 1M and 16M in 1K blocks
dword cachaeble memory between 16M and 4G in 1K blocks
dword reserved
dword reserved

No, I don't know the difference between local and system memory, and I
don't know if "cacheable" means the memory is really cached or not, or
just that it's not something like memory mapped I/O that can't be
cached.

The appeal of solution #1 is that it gives us access to the table in
case there's something there that proves useful in the future. The
only disadvantage I can see is that it takes up much more space on the
PARAM page. I don't know if that's a problem or not.

Solution #2 makes the minimal change to code, and also does not take
up any more space on the PARAM page.

Which changes would you like me to see?

Larry