VirtualBox

Changeset 18996 in vbox


Ignore:
Timestamp:
Apr 17, 2009 2:46:18 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
46088
Message:

Enabled SMP ACPI code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevACPI.cpp

    r18143 r18996  
    426426AssertCompileSize(ACPITBLIOAPIC, 12);
    427427
    428 #ifdef VBOX_WITH_SMP_GUESTS
    429428# ifdef IN_RING3 /**@todo r=bird: Move this down to where it's used. */
    430429
     
    532531};
    533532# endif /* IN_RING3 */
    534 
    535 #else  /* !VBOX_WITH_SMP_GUESTS */
    536 /** Multiple APIC Description Table */
    537 struct ACPITBLMADT
    538 {
    539     ACPITBLHEADER       header;
    540     uint32_t            u32LAPIC;               /**< local APIC address */
    541     uint32_t            u32Flags;               /**< Flags */
    542 # define PCAT_COMPAT    0x1                     /**< system has also a dual-8259 setup */
    543     ACPITBLLAPIC        LApic;
    544     ACPITBLIOAPIC       IOApic;
    545 };
    546 AssertCompileSize(ACPITBLMADT, 64);
    547 #endif /* !VBOX_WITH_SMP_GUESTS */
    548533
    549534#pragma pack()
     
    784769static void acpiSetupMADT(ACPIState *s, RTGCPHYS32 addr)
    785770{
    786 #ifdef VBOX_WITH_SMP_GUESTS
    787771    uint16_t cpus = s->cCpus;
    788772    AcpiTableMADT madt(cpus);
     
    815799    madt.header_addr()->u8Checksum = acpiChecksum(madt.data(), madt.size());
    816800    acpiPhyscpy(s, addr, madt.data(), madt.size());
    817 
    818 #else  /* !VBOX_WITH_SMP_GUESTS */
    819     ACPITBLMADT madt;
    820 
    821     /* Don't call this function if u8UseIOApic==false! */
    822     Assert(s->u8UseIOApic);
    823 
    824     memset(&madt, 0, sizeof(madt));
    825     acpiPrepareHeader(&madt.header, "APIC", sizeof(madt), 2);
    826 
    827     madt.u32LAPIC          = RT_H2LE_U32(0xfee00000);
    828     madt.u32Flags          = RT_H2LE_U32(PCAT_COMPAT);
    829 
    830     madt.LApic.u8Type      = 0;
    831     madt.LApic.u8Length    = sizeof(ACPITBLLAPIC);
    832     madt.LApic.u8ProcId    = 0;
    833     madt.LApic.u8ApicId    = 0;
    834     madt.LApic.u32Flags    = RT_H2LE_U32(LAPIC_ENABLED);
    835 
    836     madt.IOApic.u8Type     = 1;
    837     madt.IOApic.u8Length   = sizeof(ACPITBLIOAPIC);
    838     madt.IOApic.u8IOApicId = 1;
    839     madt.IOApic.u8Reserved = 0;
    840     madt.IOApic.u32Address = RT_H2LE_U32(0xfec00000);
    841     madt.IOApic.u32GSIB    = RT_H2LE_U32(0);
    842 
    843     madt.header.u8Checksum = acpiChecksum((uint8_t*)&madt, sizeof(madt));
    844     acpiPhyscpy(s, addr, &madt, sizeof(madt));
    845 #endif /* !VBOX_WITH_SMP_GUESTS */
    846801}
    847802
     
    13731328                case SYSTEM_INFO_INDEX_CPU2_STATUS:
    13741329                case SYSTEM_INFO_INDEX_CPU3_STATUS:
    1375 #ifdef VBOX_WITH_SMP_GUESTS
    13761330                    *pu32 = s->fShowCpu
    13771331                         && s->uSystemInfoIndex - SYSTEM_INFO_INDEX_CPU0_STATUS < s->cCpus
     
    13811335                            | STA_DEVICE_FUNCTIONING_PROPERLY_MASK
    13821336                          : 0;
    1383 #else
    1384                     *pu32 = 0;
    1385 #endif
    13861337                    break;
    13871338
     
    17801731    {
    17811732        apic_addr = RT_ALIGN_32(facs_addr + sizeof(ACPITBLFACS), 16);
    1782 #ifdef VBOX_WITH_SMP_GUESTS
    17831733        /**
    17841734         * @todo nike: maybe some refactoring needed to compute tables layout,
     
    17861736         */
    17871737        dsdt_addr = RT_ALIGN_32(apic_addr + AcpiTableMADT::sizeFor(s), 16);
    1788 #else
    1789         dsdt_addr = RT_ALIGN_32(apic_addr + sizeof(ACPITBLMADT), 16);
    1790 #endif
    17911738    }
    17921739    else
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette