I'm adding SMP support in my OS and testing it at many HW configs. For this moment parsing only Intel MPS tables was good -- I can run my OS on 4 cores per CPU Dual Xeon (8 CPU). But today I got Intel Core 2 Quad CPU on Intel S3000AH motherboard and MPS tables shows only 1 CPU entry. Does this mean that MPS tables are obsolete for this brand new system and i should parse ACPI tables? Or this tables broken?
Where can I find simple source code to understand it (Only MADT parsing)?
MPS table in Intel Core 2 Quad
Yes, MPS tables are obsolete. The latest version of the standard is 1.4, and that's quite old. There's quite a few threads on this already, too.
You'll need to implement parsing the RSDP and the RSDT to find the MADT (which actually uses APIC as the table signature, not MADT. That seems to confuse some people). I have some code that'll parse these tables. I can PM it to you if interested. But it's not very hard to figure out just from reading the ACPI spec. I believe the latest version is 3.0b and can be found at http://acpi.info.
While you're at it, you might as well also look for and parse the XSDT. It's just an extended version of the RSDT, using 64 bit addresses instead of 32 bit addresses.
You'll need to implement parsing the RSDP and the RSDT to find the MADT (which actually uses APIC as the table signature, not MADT. That seems to confuse some people). I have some code that'll parse these tables. I can PM it to you if interested. But it's not very hard to figure out just from reading the ACPI spec. I believe the latest version is 3.0b and can be found at http://acpi.info.
While you're at it, you might as well also look for and parse the XSDT. It's just an extended version of the RSDT, using 64 bit addresses instead of 32 bit addresses.