Hi,
smiddy wrote:Brendan wrote:I'm also allowing for a "chipset driver" to make additional RAM available after the kernel starts. This can be freeing the ACPI reclaimable area, finding more RAM between 0x000C0000 and 0x000F0000, or support for hotplug RAM.
I've seen that in a number of your posts. I'm not certain I know what that means "chipset driver"; is that in reference to an Intel, VIA, ASUS, MSI, etcetera motherboard chipset?
Yes. For most (all?) chipsets there's some interesting things to play with.
There's usually some registers in the memory host controller that allow parts of the region from 0x000A0000 and 0x000FFFFF to be set so that reads and/or writes are forwarded to the PCI bus, to RAM, etc. For example, imagine there's a PCI/AGP video card with a ROM mapped to 0x000C0000. If you disable this ROM (using the card's PCI configuration space) then you still can't access the RAM at this address until you tell the memory host controller that reads/writes for the area should both go to RAM (instead of the PCI bus).
Then there's things like the PCI IRQ router, serial port and parallel port I/O base addresses, floppy controller I/O base address, flash BIOS support, power management, hotplug RAM, hotlpug PCI devices, etc. For Intel chipsets there's a complete TCO (Total Cost of Ownership) system for monitoring the system (including watchdog timer, heartbeat, remote/ethernet monitoring, etc). For most onboard devices, the chipset has some control over which I/O APIC input the device is connected to, which can be useful for avoiding IRQ sharing (remembering that the PCI IRQ router only effects PIC connections).
Specifications (like ACPI) cover most of this, but not all of it.
The idea is to provide a way of supporting all of this (with or without ACPI), while providing somewhere where chipset bugs can be worked-around, etc. Despite this, it's very likely that most of my "chipset drivers" will do almost nothing or just use generic ACPI...
smiddy wrote:I didn't do a thorough look, but I noticed you identify E820 twice, once as a type 7 and another as type 8. Type 8's comments mentions ACPI 3.0. How do you know, based on the BIOS date? Perhaps I've missed something in the ACPI text...
The ACPI 3.0 version of this function is meant to return 24 bytes of data (including a new "extended attributes" field), while older versions should only return 20 bytes of data. IMHO the ACPI specification messed this up though, as the extended field includes an "ignore this entry" flag that legacy OSs won't even see, so I'm expecting most BIOSs to keep supporting the legacy 20-byte structure anyway. I haven't done code for the ACPI 3.0 version yet - partly because I'm waiting to see if any BIOSs bother supporting it, and partly because I can't test it.
Cheers,
Brendan