On Tue, Apr 23, 2013 at 11:49:57AM +0300, Michael S. Tsirkin wrote:
I know of the following quirks that would have to be handled:
1 - the RSDP must be in the f-segment (where as all other tables can go into "high" memory).
2 - the RSDP has a checksum in a different location from the other tables and (with an XSDT) it can have two checksums.
3 - the RSDP has a pointer to the RSDT (and to the XSDT if present).
4 - the RSDT (and XSDT if present) has pointers to all the other tables (except RSDP, RSDT, DSDT, and FACS). The FADT pointer must be first in the list.
5 - the FADT table has pointers to DSDT and FACS.
6 - the FACS table must be 64 byte aligned.
And of course newer ACPI has lots of other pointer quirks, I assume you are aware of this.
I haven't had a chance to look through the newer acpi specs, but it's a shame more of the pointer quirks have been added.
So, will a generic scheme really be able to handle all of the above quirks, or will we just be mixing some hardcoded quirks with some generic quirks? And, will the code to handle the above quirks in a generic fashion be of a higher complexity than simply hard-coding it?
I wanted to handle checksums and pointers in a generic fashion, and allocation rules in a table specific version (since I only found two such examples in all of the spec: FACS and RSDP). It's not hard to add generic handlers for these two, and it's not much more code. You think it's preferable then?
I don't know if it's perferable or not. I guess one advantage of it is that the same mechanism could then also be used for smbios, mptable, and pir.
I think the seabios part of this will be straight forward no matter which direction is taken. The real work will be on getting the tables created in qemu.
-Kevin