Hi,
nooooooooos wrote:
Well...As specified in ACPI the OS has to use the XSDT Tables if they are present...
But I don't support Longmode in my OS and I want to use RSDT tables...So do I have to support only ACPI Version 2 or can I support Version 3 and simply use the RSDT though there is a XSDT?
Even though you dont support long mode, long mode and the XSDT have nothing to do with each other and you should still use the XSDT.
However, because the XSDT uses 64-bit pointers it's theoretically possible that one or more XSDT entries point to a table that can't be accessed with 32-bit addressing. This is extremely unlikely for 80x86 - usually the RSDT and the XSDT both contain pointers that point to the same tables that are always below 4 GB (it's only really Itanium systems that need the 64-bit pointers). Just to be safe, my OS scans the XSDT to find out if any of it's entries point to anything above 4 GB, and then use the XSDT if it doesn't. If there is no XSDT or if it contains entries that point to something above 4 GB then I use the RSDT.
nooooooooos wrote:
Then I think I found a bug in Brendans BIOS...I discovered that I have to use Version 2 of ACPI to get a RSDT. But i only get a functional RSDT when I have just enabled Version 2 and had an other Version before...If I try it with Version 2 a second time I only get a RSDT wich has at its entries for other DescriptionHeaders the value of zero...
Doh - thanks
I think I've found and fixed the problem. At line 355 in "common/acpi/init.asm" it should be "
mov edi,[dword EBDA_ADDRESS+EBDA_ACPI_RSDToffset]" rather than "
mov [dword EBDA_ADDRESS+EBDA_ACPI_RSDToffset],edi".
Note: There is another bug in my BIOS - it uses AMD's method of determining cores and logical CPUs, which gives wrong results if Bochs is emulating Intel CPUs. The result is that when Bochs is emulating Intel CPUs it thinks there's one logical CPU per core, even if there's more, and you end up with all CPUs listed in the MPS tables. For ACPI's APIC table, my BIOS also never sorts the list (with the first logical CPU in each core before additional logical CPUs in each core). This is because it's a pain in the neck (and mostly useless anyway).
nooooooooos wrote:
EDIT:
Is assumption, that MPS tables list every CPU and every CPU core, but no additional logial processors (beside the first logical processor who is also the core) right?
That's correct (except when using my BIOS with Bochs emulating Intel CPUs due to the bug in my BIOS that I mentioned above).
Cheers,
Brendan