VirtualBox

Changeset 52670 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Sep 10, 2014 11:04:10 AM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95990
Message:

VMM, Devices: Add interface to query the APIC frequency from the APIC device.

Location:
trunk/src/VBox/VMM/VMMR3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDM.cpp

    r51291 r52670  
    486486        if (pVM->pdm.s.Apic.pfnLocalInterruptRC)
    487487            pVM->pdm.s.Apic.pfnLocalInterruptRC += offDelta;
     488        pVM->pdm.s.Apic.pfnGetTimerFreqRC   += offDelta;
    488489        pVM->pdm.s.Apic.pfnWriteMSRRC       += offDelta;
    489490        pVM->pdm.s.Apic.pfnReadMSRRC        += offDelta;
  • trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp

    r51376 r52670  
    25882588    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
    25892589    LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: pApicReg=%p:{.u32Version=%#x, .pfnGetInterruptR3=%p, .pfnSetBaseR3=%p, .pfnGetBaseR3=%p, "
    2590              ".pfnSetTPRR3=%p, .pfnGetTPRR3=%p, .pfnWriteMSR3=%p, .pfnReadMSR3=%p, .pfnBusDeliverR3=%p, .pfnLocalInterruptR3=%p, pszGetInterruptRC=%p:{%s}, pszSetBaseRC=%p:{%s}, pszGetBaseRC=%p:{%s}, "
    2591              ".pszSetTPRRC=%p:{%s}, .pszGetTPRRC=%p:{%s}, .pszWriteMSRRC=%p:{%s}, .pszReadMSRRC=%p:{%s}, .pszBusDeliverRC=%p:{%s}, .pszLocalInterruptRC=%p:{%s}} ppApicHlpR3=%p\n",
     2590             ".pfnSetTPRR3=%p, .pfnGetTPRR3=%p, .pfnWriteMSR3=%p, .pfnReadMSR3=%p, .pfnBusDeliverR3=%p, .pfnLocalInterruptR3=%p .pfnGetTimerFreqR3=%p, pszGetInterruptRC=%p:{%s}, pszSetBaseRC=%p:{%s}, pszGetBaseRC=%p:{%s}, "
     2591             ".pszSetTPRRC=%p:{%s}, .pszGetTPRRC=%p:{%s}, .pszWriteMSRRC=%p:{%s}, .pszReadMSRRC=%p:{%s}, .pszBusDeliverRC=%p:{%s}, .pszLocalInterruptRC=%p:{%s}, .pszGetTimerFreqRC=%p:{%s}} ppApicHlpR3=%p\n",
    25922592             pDevIns->pReg->szName, pDevIns->iInstance, pApicReg, pApicReg->u32Version, pApicReg->pfnGetInterruptR3, pApicReg->pfnSetBaseR3,
    2593              pApicReg->pfnGetBaseR3, pApicReg->pfnSetTPRR3, pApicReg->pfnGetTPRR3, pApicReg->pfnWriteMSRR3, pApicReg->pfnReadMSRR3, pApicReg->pfnBusDeliverR3, pApicReg->pfnLocalInterruptR3, pApicReg->pszGetInterruptRC,
     2593             pApicReg->pfnGetBaseR3, pApicReg->pfnSetTPRR3, pApicReg->pfnGetTPRR3, pApicReg->pfnWriteMSRR3, pApicReg->pfnReadMSRR3, pApicReg->pfnBusDeliverR3, pApicReg->pfnLocalInterruptR3, pApicReg->pfnGetTimerFreqR3, pApicReg->pszGetInterruptRC,
    25942594             pApicReg->pszGetInterruptRC, pApicReg->pszSetBaseRC, pApicReg->pszSetBaseRC, pApicReg->pszGetBaseRC, pApicReg->pszGetBaseRC,
    25952595             pApicReg->pszSetTPRRC, pApicReg->pszSetTPRRC, pApicReg->pszGetTPRRC, pApicReg->pszGetTPRRC, pApicReg->pszWriteMSRRC, pApicReg->pszWriteMSRRC, pApicReg->pszReadMSRRC, pApicReg->pszReadMSRRC, pApicReg->pszBusDeliverRC,
    2596              pApicReg->pszBusDeliverRC, pApicReg->pszLocalInterruptRC, pApicReg->pszLocalInterruptRC, ppApicHlpR3));
     2596             pApicReg->pszBusDeliverRC, pApicReg->pszLocalInterruptRC, pApicReg->pszLocalInterruptRC, pApicReg->pszGetTimerFreqRC, pApicReg->pszGetTimerFreqRC, ppApicHlpR3));
    25972597
    25982598    /*
     
    26142614        ||  !pApicReg->pfnReadMSRR3
    26152615        ||  !pApicReg->pfnBusDeliverR3
    2616         ||  !pApicReg->pfnLocalInterruptR3)
     2616        ||  !pApicReg->pfnLocalInterruptR3
     2617        ||  !pApicReg->pfnGetTimerFreqR3)
    26172618    {
    26182619        Assert(pApicReg->pfnGetInterruptR3);
     
    26262627        Assert(pApicReg->pfnBusDeliverR3);
    26272628        Assert(pApicReg->pfnLocalInterruptR3);
     2629        Assert(pApicReg->pfnGetTimerFreqR3);
    26282630        LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc (R3 callbacks)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER));
    26292631        return VERR_INVALID_PARAMETER;
     
    26382640            ||  pApicReg->pszReadMSRRC
    26392641            ||  pApicReg->pszBusDeliverRC
    2640             ||  pApicReg->pszLocalInterruptRC)
     2642            ||  pApicReg->pszLocalInterruptRC
     2643            ||  pApicReg->pszGetTimerFreqRC)
    26412644        &&  (   !VALID_PTR(pApicReg->pszGetInterruptRC)
    26422645            ||  !VALID_PTR(pApicReg->pszHasPendingIrqRC)
     
    26482651            ||  !VALID_PTR(pApicReg->pszReadMSRRC)
    26492652            ||  !VALID_PTR(pApicReg->pszBusDeliverRC)
    2650             ||  !VALID_PTR(pApicReg->pszLocalInterruptRC))
     2653            ||  !VALID_PTR(pApicReg->pszLocalInterruptRC)
     2654            ||  !VALID_PTR(pApicReg->pszGetTimerFreqRC))
    26512655       )
    26522656    {
     
    26612665        Assert(VALID_PTR(pApicReg->pszBusDeliverRC));
    26622666        Assert(VALID_PTR(pApicReg->pszLocalInterruptRC));
     2667        Assert(VALID_PTR(pApicReg->pszGetTimerFreqRC));
    26632668        LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc (RC callbacks)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER));
    26642669        return VERR_INVALID_PARAMETER;
     
    26732678            ||  pApicReg->pszReadMSRR0
    26742679            ||  pApicReg->pszBusDeliverR0
    2675             ||  pApicReg->pszLocalInterruptR0)
     2680            ||  pApicReg->pszLocalInterruptR0
     2681            ||  pApicReg->pszGetTimerFreqR0)
    26762682        &&  (   !VALID_PTR(pApicReg->pszGetInterruptR0)
    26772683            ||  !VALID_PTR(pApicReg->pszHasPendingIrqR0)
     
    26832689            ||  !VALID_PTR(pApicReg->pszWriteMSRR0)
    26842690            ||  !VALID_PTR(pApicReg->pszBusDeliverR0)
    2685             ||  !VALID_PTR(pApicReg->pszLocalInterruptR0))
     2691            ||  !VALID_PTR(pApicReg->pszLocalInterruptR0)
     2692            ||  !VALID_PTR(pApicReg->pszGetTimerFreqR0))
    26862693       )
    26872694    {
     
    26962703        Assert(VALID_PTR(pApicReg->pszBusDeliverR0));
    26972704        Assert(VALID_PTR(pApicReg->pszLocalInterruptR0));
     2705        Assert(VALID_PTR(pApicReg->pszGetTimerFreqR0));
    26982706        LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc (R0 callbacks)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER));
    26992707        return VERR_INVALID_PARAMETER;
     
    27702778            AssertMsgRC(rc, ("%s::%s rc=%Rrc\n", pDevIns->pReg->szRCMod, pApicReg->pszLocalInterruptRC, rc));
    27712779        }
     2780        if (RT_SUCCESS(rc))
     2781        {
     2782            rc = pdmR3DevGetSymbolRCLazy(pDevIns, pApicReg->pszGetTimerFreqRC, &pVM->pdm.s.Apic.pfnGetTimerFreqRC);
     2783            AssertMsgRC(rc, ("%s::%s rc=%Rrc\n", pDevIns->pReg->szRCMod, pApicReg->pszGetTimerFreqRC, rc));
     2784        }
    27722785        if (RT_FAILURE(rc))
    27732786        {
    2774             LogFlow(("pdmR3DevHlp_IOAPICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     2787            LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
    27752788            return rc;
    27762789        }
     
    27902803        pVM->pdm.s.Apic.pfnBusDeliverRC     = 0;
    27912804        pVM->pdm.s.Apic.pfnLocalInterruptRC = 0;
     2805        pVM->pdm.s.Apic.pfnGetTimerFreqRC   = 0;
    27922806    }
    27932807
     
    28442858            AssertMsgRC(rc, ("%s::%s rc=%Rrc\n", pDevIns->pReg->szR0Mod, pApicReg->pszLocalInterruptR0, rc));
    28452859        }
     2860        if (RT_SUCCESS(rc))
     2861        {
     2862            rc = pdmR3DevGetSymbolR0Lazy(pDevIns, pApicReg->pszGetTimerFreqR0, &pVM->pdm.s.Apic.pfnGetTimerFreqR0);
     2863            AssertMsgRC(rc, ("%s::%s rc=%Rrc\n", pDevIns->pReg->szR0Mod, pApicReg->pszGetTimerFreqR0, rc));
     2864        }
    28462865        if (RT_FAILURE(rc))
    28472866        {
    2848             LogFlow(("pdmR3DevHlp_IOAPICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     2867            LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
    28492868            return rc;
    28502869        }
     
    28642883        pVM->pdm.s.Apic.pfnBusDeliverR0     = 0;
    28652884        pVM->pdm.s.Apic.pfnLocalInterruptR0 = 0;
     2885        pVM->pdm.s.Apic.pfnGetTimerFreqR0   = 0;
    28662886        pVM->pdm.s.Apic.pDevInsR0           = 0;
    28672887    }
     
    28812901    pVM->pdm.s.Apic.pfnBusDeliverR3     = pApicReg->pfnBusDeliverR3;
    28822902    pVM->pdm.s.Apic.pfnLocalInterruptR3 = pApicReg->pfnLocalInterruptR3;
     2903    pVM->pdm.s.Apic.pfnGetTimerFreqR3   = pApicReg->pfnGetTimerFreqR3;
    28832904    Log(("PDM: Registered APIC device '%s'/%d pDevIns=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, pDevIns));
    28842905
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