VirtualBox

Changeset 20835 in vbox


Ignore:
Timestamp:
Jun 23, 2009 1:55:08 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
48974
Message:

Interface for generating NMI & SMI added.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/include/VBox/pdmdev.h

    r20374 r20835  
    11031103} PDMAPICVERSION;
    11041104
     1105/**
     1106 * APIC irq argument for SetInterruptFF.
     1107 */
     1108typedef enum PDMAPICIRQ
     1109{
     1110    /** Invalid 0 entry. */
     1111    PDMAPICIRQ_INVALID = 0,
     1112    /** Normal hardware interrupt. */
     1113    PDMAPICIRQ_HARDWARE,
     1114    /** NMI. */
     1115    PDMAPICIRQ_NMI,
     1116    /** SMI. */
     1117    PDMAPICIRQ_SMI,
     1118    /** The usual 32-bit paranoia. */
     1119    PDMAPICIRQ_32BIT_HACK = 0x7fffffff
     1120} PDMAPICIRQ;
     1121
    11051122
    11061123/**
     
    11161133     *
    11171134     * @param   pDevIns         Device instance of the APIC.
     1135     * @param   enmType         Irq type
    11181136     * @param   idCpu           Virtual CPU to set flag upon.
    11191137     */
    1120     DECLRCCALLBACKMEMBER(void, pfnSetInterruptFF,(PPDMDEVINS pDevIns, VMCPUID idCpu));
     1138    DECLRCCALLBACKMEMBER(void, pfnSetInterruptFF,(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu));
    11211139
    11221140    /**
     
    11691187
    11701188/** Current PDMAPICHLPRC version number. */
    1171 #define PDM_APICHLPRC_VERSION   0x60010000
     1189#define PDM_APICHLPRC_VERSION   0x60010001
    11721190
    11731191
     
    11841202     *
    11851203     * @param   pDevIns         Device instance of the APIC.
     1204     * @param   enmType         Irq type
    11861205     * @param   idCpu           Virtual CPU to set flag upon.
    11871206     */
    1188     DECLR0CALLBACKMEMBER(void, pfnSetInterruptFF,(PPDMDEVINS pDevIns, VMCPUID idCpu));
     1207    DECLR0CALLBACKMEMBER(void, pfnSetInterruptFF,(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu));
    11891208
    11901209    /**
     
    12371256
    12381257/** Current PDMAPICHLPR0 version number. */
    1239 #define PDM_APICHLPR0_VERSION   0x60010000
     1258#define PDM_APICHLPR0_VERSION   0x60010001
    12401259
    12411260/**
     
    12511270     *
    12521271     * @param   pDevIns         Device instance of the APIC.
     1272     * @param   enmType         IRQ type
    12531273     * @param   idCpu           Virtual CPU to set flag upon.
    12541274     */
    1255     DECLR3CALLBACKMEMBER(void, pfnSetInterruptFF,(PPDMDEVINS pDevIns, VMCPUID idCpu));
     1275    DECLR3CALLBACKMEMBER(void, pfnSetInterruptFF,(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu));
    12561276
    12571277    /**
     
    13511371
    13521372/** Current PDMAPICHLP version number. */
    1353 #define PDM_APICHLPR3_VERSION  0xfd020000
     1373#define PDM_APICHLPR3_VERSION  0xfd020001
    13541374
    13551375
  • TabularUnified trunk/include/VBox/vm.h

    r20752 r20835  
    294294
    295295
    296 /** This action forces the VM to service check and pending interrups on the APIC. */
     296/** This action forces the VM to check any pending interrups on the APIC. */
    297297#define VMCPU_FF_INTERRUPT_APIC             RT_BIT_32(0)
    298 /** This action forces the VM to service check and pending interrups on the PIC. */
     298/** This action forces the VM to check any pending interrups on the PIC. */
    299299#define VMCPU_FF_INTERRUPT_PIC              RT_BIT_32(1)
    300300/** This action forces the VM to schedule and run pending timer (TM).
    301301 * @remarks Don't move - PATM compatability.  */
    302302#define VMCPU_FF_TIMER                      RT_BIT_32(2)
     303/** This action forces the VM to check any pending NMIs. */
     304#define VMCPU_FF_INTERRUPT_NMI              RT_BIT_32(3)
     305/** This action forces the VM to check any pending SMIs. */
     306#define VMCPU_FF_INTERRUPT_SMI              RT_BIT_32(4)
    303307/** PDM critical section unlocking is pending, process promptly upon return to R3. */
    304308#define VMCPU_FF_PDM_CRITSECT               RT_BIT_32(5)
  • TabularUnified trunk/include/iprt/log.h

    r20374 r20835  
    323323    /** New lines should be prefixed with thread name. */
    324324    RTLOGFLAGS_PREFIX_THREAD        = 0x00800000,
     325    /** New lines should be prefixed with the VCPU id. */
     326    RTLOGFLAGS_PREFIX_VCPU          = 0x01000000,
    325327    /** New lines should be prefixed with formatted timestamp since program start. */
    326328    RTLOGFLAGS_PREFIX_TIME_PROG     = 0x04000000,
  • TabularUnified trunk/src/VBox/VMM/PDMDevMiscHlp.cpp

    r20092 r20835  
    145145
    146146/** @copydoc PDMAPICHLPR3::pfnSetInterruptFF */
    147 static DECLCALLBACK(void) pdmR3ApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, VMCPUID idCpu)
     147static DECLCALLBACK(void) pdmR3ApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu)
    148148{
    149149    PDMDEV_ASSERT_DEVINS(pDevIns);
     
    156156             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, idCpu, VMCPU_FF_ISSET(pVCpu, VMCPU_FF_INTERRUPT_APIC)));
    157157
    158     VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC);
     158    switch (enmType)
     159    {
     160    case PDMAPICIRQ_HARDWARE:
     161        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC);
     162        break;
     163    case PDMAPICIRQ_NMI:
     164        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI);
     165        break;
     166    case PDMAPICIRQ_SMI:
     167        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_SMI);
     168        break;
     169    }
    159170    REMR3NotifyInterruptSet(pVM, pVCpu);
    160171    VMR3NotifyCpuFFU(pVCpu->pUVCpu, VMNOTIFYFF_FLAGS_DONE_REM | VMNOTIFYFF_FLAGS_POKE);
  • TabularUnified trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp

    r20374 r20835  
    8686 * @{
    8787 */
    88 static DECLCALLBACK(void) pdmRCApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, VMCPUID idCpu);
     88static DECLCALLBACK(void) pdmRCApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu);
    8989static DECLCALLBACK(void) pdmRCApicHlp_ClearInterruptFF(PPDMDEVINS pDevIns, VMCPUID idCpu);
    9090static DECLCALLBACK(void) pdmRCApicHlp_ChangeFeature(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion);
     
    412412
    413413/** @copydoc PDMAPICHLPRC::pfnSetInterruptFF */
    414 static DECLCALLBACK(void) pdmRCApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, VMCPUID idCpu)
     414static DECLCALLBACK(void) pdmRCApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu)
    415415{
    416416    PDMDEV_ASSERT_DEVINS(pDevIns);
     
    422422    LogFlow(("pdmRCApicHlp_SetInterruptFF: caller=%p/%d: VM_FF_INTERRUPT %d -> 1\n",
    423423             pDevIns, pDevIns->iInstance, VMCPU_FF_ISSET(pVCpu, VMCPU_FF_INTERRUPT_APIC)));
    424     VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC);
     424    switch (enmType)
     425    {
     426    case PDMAPICIRQ_HARDWARE:
     427        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC);
     428        break;
     429    case PDMAPICIRQ_NMI:
     430        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI);
     431        break;
     432    case PDMAPICIRQ_SMI:
     433        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_SMI);
     434        break;
     435    }
    425436}
    426437
  • TabularUnified trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp

    r20374 r20835  
    8989 * @{
    9090 */
    91 static DECLCALLBACK(void) pdmR0ApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, VMCPUID idCpu);
     91static DECLCALLBACK(void) pdmR0ApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu);
    9292static DECLCALLBACK(void) pdmR0ApicHlp_ClearInterruptFF(PPDMDEVINS pDevIns, VMCPUID idCpu);
    9393static DECLCALLBACK(void) pdmR0ApicHlp_ChangeFeature(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion);
     
    427427
    428428/** @copydoc PDMAPICHLPR0::pfnSetInterruptFF */
    429 static DECLCALLBACK(void) pdmR0ApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, VMCPUID idCpu)
     429static DECLCALLBACK(void) pdmR0ApicHlp_SetInterruptFF(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu)
    430430{
    431431    PDMDEV_ASSERT_DEVINS(pDevIns);
     
    437437    LogFlow(("pdmR0ApicHlp_SetInterruptFF: caller=%p/%d: VM_FF_INTERRUPT %d -> 1\n",
    438438             pDevIns, pDevIns->iInstance, VMCPU_FF_ISSET(pVCpu, VMCPU_FF_INTERRUPT_APIC)));
    439     VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC);
     439
     440    switch (enmType)
     441    {
     442    case PDMAPICIRQ_HARDWARE:
     443        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC);
     444        break;
     445    case PDMAPICIRQ_NMI:
     446        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI);
     447        break;
     448    case PDMAPICIRQ_SMI:
     449        VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_SMI);
     450        break;
     451    }
    440452
    441453    /* We need to wait up the target CPU. */
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