Use max_cpus when building bios tables.

Signed-off-by: Jes Sorensen <jes@sgi.com>

diff --git a/bios/rombios32.c b/bios/rombios32.c
index e6bb164..3d15283 100644
--- a/bios/rombios32.c
+++ b/bios/rombios32.c
@@ -1145,23 +1145,25 @@ static void mptable_init(void)
     putle32(&q, 0); /* OEM table ptr */
     putle16(&q, 0); /* OEM table size */
 #ifdef BX_QEMU
-    putle16(&q, smp_cpus + 17); /* entry count */
+    putle16(&q, max_cpus + 17); /* entry count */
 #else
-    putle16(&q, smp_cpus + 18); /* entry count */
+    putle16(&q, max_cpus + 18); /* entry count */
 #endif
     putle32(&q, 0xfee00000); /* local APIC addr */
     putle16(&q, 0); /* ext table length */
     putb(&q, 0); /* ext table checksum */
     putb(&q, 0); /* reserved */
 
-    for(i = 0; i < smp_cpus; i++) {
+    for(i = 0; i < max_cpus; i++) {
         putb(&q, 0); /* entry type = processor */
         putb(&q, i); /* APIC id */
         putb(&q, 0x11); /* local APIC version number */
         if (i == 0)
             putb(&q, 3); /* cpu flags: enabled, bootstrap cpu */
-        else
+        else if (i < smp_cpus)
             putb(&q, 1); /* cpu flags: enabled */
+        else
+            putb(&q, 0); /* cpu flags: disabled */
         putb(&q, 0); /* cpu signature */
         putb(&q, 6);
         putb(&q, 0);
@@ -1181,7 +1183,7 @@ static void mptable_init(void)
     putstr(&q, "ISA   ");
 
     /* ioapic */
-    ioapic_id = smp_cpus;
+    ioapic_id = max_cpus;
     putb(&q, 2); /* entry type = I/O APIC */
     putb(&q, ioapic_id); /* apic ID */
     putb(&q, 0x11); /* I/O APIC version number */
@@ -1581,7 +1583,7 @@ int acpi_build_processor_ssdt(uint8_t *ssdt)
 {
     uint8_t *ssdt_ptr = ssdt;
     int i, length;
-    int acpi_cpus = smp_cpus > 0xff ? 0xff : smp_cpus;
+    int acpi_cpus = max_cpus > 0xff ? 0xff : max_cpus;
 
     ssdt_ptr[9] = 0; // checksum;
     ssdt_ptr += sizeof(struct acpi_table_header);
@@ -1713,7 +1715,7 @@ void acpi_bios_init(void)
         addr = (addr + 7) & ~7;
         srat_addr = addr;
         srat_size = sizeof(*srat) +
-            sizeof(struct srat_processor_affinity) * smp_cpus +
+            sizeof(struct srat_processor_affinity) * max_cpus +
             sizeof(struct srat_memory_affinity) * (nb_numa_nodes + 2);
         srat = (void *)(addr);
         addr += srat_size;
@@ -1726,7 +1728,7 @@ void acpi_bios_init(void)
     addr = (addr + 7) & ~7;
     madt_addr = addr;
     madt_size = sizeof(*madt) +
-        sizeof(struct madt_processor_apic) * smp_cpus +
+        sizeof(struct madt_processor_apic) * max_cpus +
 #ifdef BX_QEMU
         sizeof(struct madt_io_apic) + sizeof(struct madt_int_override);
 #else
@@ -1799,18 +1801,21 @@ void acpi_bios_init(void)
         madt->local_apic_address = cpu_to_le32(0xfee00000);
         madt->flags = cpu_to_le32(1);
         apic = (void *)(madt + 1);
-        for(i=0;i<smp_cpus;i++) {
+        for(i = 0;i < max_cpus; i++) {
             apic->type = APIC_PROCESSOR;
             apic->length = sizeof(*apic);
             apic->processor_id = i;
             apic->local_apic_id = i;
-            apic->flags = cpu_to_le32(1);
+            if (i < smp_cpus)
+                apic->flags = cpu_to_le32(1);
+            else
+                apic->flags = 0;
             apic++;
         }
         io_apic = (void *)apic;
         io_apic->type = APIC_IO;
         io_apic->length = sizeof(*io_apic);
-        io_apic->io_apic_id = smp_cpus;
+        io_apic->io_apic_id = max_cpus;
         io_apic->address = cpu_to_le32(0xfec00000);
         io_apic->interrupt = cpu_to_le32(0);
 #ifdef BX_QEMU
@@ -1844,7 +1849,7 @@ void acpi_bios_init(void)
         srat->reserved1=1;
  
         core = (void*)(srat + 1);
-        for (i = 0; i < smp_cpus; ++i) {
+        for (i = 0; i < max_cpus; ++i) {
              core->type = SRAT_PROCESSOR;
              core->length = sizeof(*core);
              core->local_apic_id = i;
@@ -2603,7 +2608,7 @@ void smbios_init(void)
     add_struct(0, p);
     add_struct(1, p);
     add_struct(3, p);
-    for (cpu_num = 1; cpu_num <= smp_cpus; cpu_num++)
+    for (cpu_num = 1; cpu_num <= max_cpus; cpu_num++)
         add_struct(4, p, cpu_num);
 
     /* Each 'memory device' covers up to 16GB of address space. */
