The ID is 0x14 for Intel. But that is wrong for AMD CPUs. The actual Dual-Core
Why can't hw designers ever get such things right? Sigh...
Athlon CPUs we have report an APIC version of 0x10. Please refer to the start
of this thread.
Frankly, such a change implies a change to the inter-APIC communication protocol, so the major revision should have been bumped, like it happened for the I/O APIC (0x20); I hope they do not worry of changing the design so many times they run out of numbers! Thus none of the implementers has done their job properly, but for Intel there is at least some change, while for AMD there seems no generic way of determining that -- 0x10 implies a "traditional" integrated APIC as implemented in Pentium in 1995, using a three-wire serial bus for communication...
Perhaps a variable should be added holding the "architectural revision" of the APIC subsystem, set up by the early CPU/APIC initialization code and used from there on instead of direct references to the version register as implemented in the hardware. It does not have to be based on what hardware uses, e.g.:
- 0: no APIC,
- 1: 82489DX -- communication using a five-wire inter-APIC bus, 8-bit physical ID, 32-bit logical ID, etc.,
- 2: Pentium-style -- communication using a three-wire inter-APIC bus, 4-bit physical ID, 8-bit logical ID, etc.,
- 3: P4-style -- communication using the system bus, 8-bit physical ID, 8-bit logical ID, etc.
Anyway, I understand that you agree this does not belong into the subarch
code?
That's CPU/chipset specific indeed. It shouldn't really depend on the platform these are used in. Exceptions, if any, can be handled on a case by case basis.
Maciej