VirtualBox

Changeset 25995 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jan 25, 2010 11:33:03 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56866
Message:

VMM: PDM infrastructure for HPET

Location:
trunk/src/VBox
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Makefile.kmk

    r25993 r25995  
    676676
    677677ifdef VBOX_WITH_HPET
    678 VBoxDDR0_DEFS          += VBOX_WITH_HPET
    679 VBoxDDR0_SOURCES       += PC/DevHPET.cpp
     678 VBoxDDR0_DEFS          += VBOX_WITH_HPET
     679 VBoxDDR0_SOURCES       += PC/DevHPET.cpp
    680680endif
    681681
  • trunk/src/VBox/VMM/PDMDevHlp.cpp

    r25893 r25995  
    19551955    return VINF_SUCCESS;
    19561956}
    1957 
     1957/** @copydoc PDMDEVHLPR3::pfnHPETRegister */
     1958static DECLCALLBACK(int) pdmR3DevHlp_HPETRegister(PPDMDEVINS pDevIns, PPDMHPETREG pHpetReg, PCPDMHPETHLPR3 *ppHpetHlpR3)
     1959{
     1960    PDMDEV_ASSERT_DEVINS(pDevIns);
     1961    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     1962    LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d:\n"));
     1963
     1964    /*
     1965     * Validate input.
     1966     */
     1967    if (pHpetReg->u32Version != PDM_HPETREG_VERSION)
     1968    {
     1969        AssertMsgFailed(("u32Version=%#x expected %#x\n", pHpetReg->u32Version, PDM_HPETREG_VERSION));
     1970        LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d: returns %Rrc (version)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER));
     1971        return VERR_INVALID_PARAMETER;
     1972    }
     1973
     1974    if (!ppHpetHlpR3)
     1975    {
     1976        Assert(ppHpetHlpR3);
     1977        LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d: returns %Rrc (ppApicHlpR3)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER));
     1978        return VERR_INVALID_PARAMETER;
     1979    }
     1980
     1981    /* set the helper pointer and return. */
     1982    *ppHpetHlpR3 = &g_pdmR3DevHpetHlp;
     1983    LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VINF_SUCCESS));
     1984    return VINF_SUCCESS;
     1985}
    19581986
    19591987/** @copydoc PDMDEVHLPR3::pfnDMACRegister */
     
    28092837    pdmR3DevHlp_APICRegister,
    28102838    pdmR3DevHlp_IOAPICRegister,
     2839    pdmR3DevHlp_HPETRegister,
    28112840    pdmR3DevHlp_DMACRegister,
    28122841    pdmR3DevHlp_PhysRead,
     
    28992928}
    29002929
     2930/** @copydoc PDMDEVHLPR3::pfnHPETRegister */
     2931static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_HPETRegister(PPDMDEVINS pDevIns, PPDMHPETREG pHpetReg, PCPDMHPETHLPR3 *ppHpetHlpR3)
     2932{
     2933    PDMDEV_ASSERT_DEVINS(pDevIns);
     2934    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance));
     2935    NOREF(pHpetReg);
     2936    NOREF(ppHpetHlpR3);
     2937    return VERR_ACCESS_DENIED;
     2938}
    29012939
    29022940/** @copydoc PDMDEVHLPR3::pfnDMACRegister */
     
    32763314    pdmR3DevHlp_Untrusted_APICRegister,
    32773315    pdmR3DevHlp_Untrusted_IOAPICRegister,
     3316    pdmR3DevHlp_Untrusted_HPETRegister,
    32783317    pdmR3DevHlp_Untrusted_DMACRegister,
    32793318    pdmR3DevHlp_Untrusted_PhysRead,
     
    33473386
    33483387/** @} */
    3349 
  • trunk/src/VBox/VMM/PDMDevMiscHlp.cpp

    r24125 r25995  
    5757        return;
    5858    }
    59  
     59
    6060    PVMCPU pVCpu = &pVM->aCpus[0];  /* for PIC we always deliver to CPU 0, MP use APIC */
    6161
     
    531531
    532532
     533/** @copydoc PDMHPETHLPR3::pfnSetLegacyMode */
     534static DECLCALLBACK(int) pdmR3HpetHlp_SetLegacyMode(PPDMDEVINS pDevIns, bool fActivate)
     535{
     536    PDMDEV_ASSERT_DEVINS(pDevIns);
     537    LogFlow(("pdmR3HpetHlp_SetLegacyMode: caller='%s'/%d: fActivate=%d\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, fActivate));
     538    return 0;
     539}
     540
     541/** @copydoc PDMHPETHLPR3::pfnLock */
     542static DECLCALLBACK(int) pdmR3HpetHlp_Lock(PPDMDEVINS pDevIns, int rc)
     543{
     544    PDMDEV_ASSERT_DEVINS(pDevIns);
     545    LogFlow(("pdmR3HpetHlp_Lock: caller='%s'/%d: rc=%Rrc\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, rc));
     546    return pdmLockEx(pDevIns->Internal.s.pVMR3, rc);
     547}
     548
     549
     550/** @copydoc PDMHPETHLPR3::pfnUnlock */
     551static DECLCALLBACK(void) pdmR3HpetHlp_Unlock(PPDMDEVINS pDevIns)
     552{
     553    PDMDEV_ASSERT_DEVINS(pDevIns);
     554    LogFlow(("pdmR3HpetHlp_Unlock: caller='%s'/%d:\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance));
     555    pdmUnlock(pDevIns->Internal.s.pVMR3);
     556}
     557
     558/** @copydoc PDMHPETHLPR3::pfnGetRCHelpers */
     559static DECLCALLBACK(PCPDMHPETHLPRC) pdmR3HpetHlp_GetRCHelpers(PPDMDEVINS pDevIns)
     560{
     561    PDMDEV_ASSERT_DEVINS(pDevIns);
     562    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     563    RTRCPTR pRCHelpers = 0;
     564    int rc = PDMR3LdrGetSymbolRC(pDevIns->Internal.s.pVMR3, NULL, "g_pdmRCHpetHlp", &pRCHelpers);
     565    AssertReleaseRC(rc);
     566    AssertRelease(pRCHelpers);
     567    LogFlow(("pdmR3HpetHlp_GetGCHelpers: caller='%s'/%d: returns %RRv\n",
     568             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pRCHelpers));
     569    return pRCHelpers;
     570}
     571
     572/** @copydoc PDMHPETHLPR3::pfnGetR0Helpers */
     573static DECLCALLBACK(PCPDMHPETHLPR0) pdmR3HpetHlp_GetR0Helpers(PPDMDEVINS pDevIns)
     574{
     575    PDMDEV_ASSERT_DEVINS(pDevIns);
     576    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     577    PCPDMHPETHLPR0 pR0Helpers = 0;
     578    int rc = PDMR3LdrGetSymbolR0(pDevIns->Internal.s.pVMR3, NULL, "g_pdmR0HpetHlp", &pR0Helpers);
     579    AssertReleaseRC(rc);
     580    AssertRelease(pR0Helpers);
     581    LogFlow(("pdmR3HpetHlp_GetR0Helpers: caller='%s'/%d: returns %RHv\n",
     582             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pR0Helpers));
     583    return pR0Helpers;
     584}
     585
    533586/**
    534587 * PCI Bus Device Helpers.
     
    549602/** @} */
    550603
     604/**
     605 * HPET Device Helpers.
     606 */
     607const PDMHPETHLPR3 g_pdmR3DevHpetHlp =
     608{
     609    PDM_HPETHLPR3_VERSION,
     610    pdmR3HpetHlp_SetLegacyMode,   
     611    pdmR3HpetHlp_Lock,
     612    pdmR3HpetHlp_Unlock,
     613    pdmR3HpetHlp_GetRCHelpers,
     614    pdmR3HpetHlp_GetR0Helpers,
     615    PDM_HPETHLPR3_VERSION, /* the end */
     616};
     617
     618/** @} */
     619
    551620
    552621
     
    573642    PDM_RTCHLP_VERSION
    574643};
    575 
    576 
  • trunk/src/VBox/VMM/PDMInternal.h

    r25891 r25995  
    10551055extern const PDMDMACHLP     g_pdmR3DevDmacHlp;
    10561056extern const PDMRTCHLP      g_pdmR3DevRtcHlp;
     1057extern const PDMHPETHLPR3   g_pdmR3DevHpetHlp;
    10571058#endif
    10581059
  • trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp

    r24139 r25995  
    4949extern DECLEXPORT(const PDMIOAPICHLPRC) g_pdmRCIoApicHlp;
    5050extern DECLEXPORT(const PDMPCIHLPRC)    g_pdmRCPciHlp;
     51extern DECLEXPORT(const PDMHPETHLPRC)   g_pdmRCHpetHlp;
    5152RT_C_DECLS_END
    5253
     
    112113static DECLCALLBACK(int) pdmRCPciHlp_Lock(PPDMDEVINS pDevIns, int rc);
    113114static DECLCALLBACK(void) pdmRCPciHlp_Unlock(PPDMDEVINS pDevIns);
     115/** @} */
     116
     117
     118/** @name HPET RC Helpers
     119 * @{
     120 */
     121static DECLCALLBACK(int) pdmRCHpetHlp_Lock(PPDMDEVINS pDevIns, int rc);
     122static DECLCALLBACK(void) pdmRCHpetHlp_Unlock(PPDMDEVINS pDevIns);
    114123/** @} */
    115124
     
    197206};
    198207
    199 
     208/**
     209 * The Raw-Mode Context HPET Helper Callbacks.
     210 */
     211extern DECLEXPORT(const PDMHPETHLPRC) g_pdmRCHpetHlp =
     212{
     213    PDM_HPETHLPRC_VERSION,
     214    pdmRCHpetHlp_Lock,
     215    pdmRCHpetHlp_Unlock,
     216    PDM_HPETHLPRC_VERSION, /* the end */
     217};
    200218
    201219
     
    683701    }
    684702}
     703
     704
     705/** @copydoc PDMHPETHLPRC::pfnLock */
     706static DECLCALLBACK(int) pdmRCHpetHlp_Lock(PPDMDEVINS pDevIns, int rc)
     707{
     708    PDMDEV_ASSERT_DEVINS(pDevIns);
     709    return pdmLockEx(pDevIns->Internal.s.pVMRC, rc);
     710}
     711
     712
     713/** @copydoc PDMHPETHLPRC::pfnUnlock */
     714static DECLCALLBACK(void) pdmRCHpetHlp_Unlock(PPDMDEVINS pDevIns)
     715{
     716    PDMDEV_ASSERT_DEVINS(pDevIns);
     717    pdmUnlock(pDevIns->Internal.s.pVMRC);
     718}
  • trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp

    r24139 r25995  
    5151extern DECLEXPORT(const PDMIOAPICHLPR0) g_pdmR0IoApicHlp;
    5252extern DECLEXPORT(const PDMPCIHLPR0)    g_pdmR0PciHlp;
     53extern DECLEXPORT(const PDMHPETHLPR0)   g_pdmR0HpetHlp;
    5354RT_C_DECLS_END
    5455
     
    115116static DECLCALLBACK(int) pdmR0PciHlp_Lock(PPDMDEVINS pDevIns, int rc);
    116117static DECLCALLBACK(void) pdmR0PciHlp_Unlock(PPDMDEVINS pDevIns);
     118/** @} */
     119
     120/** @name HPET GC Helpers
     121 * @{
     122 */
     123static DECLCALLBACK(int) pdmR0HpetHlp_Lock(PPDMDEVINS pDevIns, int rc);
     124static DECLCALLBACK(void) pdmR0HpetHlp_Unlock(PPDMDEVINS pDevIns);
    117125/** @} */
    118126
     
    201209};
    202210
    203 
     211/**
     212 * The Guest Context HPET Helper Callbacks.
     213 */
     214extern DECLEXPORT(const PDMHPETHLPR0) g_pdmR0HpetHlp =
     215{
     216    PDM_HPETHLPR0_VERSION,
     217    pdmR0HpetHlp_Lock,
     218    pdmR0HpetHlp_Unlock,
     219    PDM_HPETHLPR0_VERSION, /* the end */
     220};
    204221
    205222
     
    720737    }
    721738}
     739
     740/** @copydoc PDMHPETHLPR0::pfnLock */
     741static DECLCALLBACK(int) pdmR0HpetHlp_Lock(PPDMDEVINS pDevIns, int rc)
     742{
     743    PDMDEV_ASSERT_DEVINS(pDevIns);
     744    return pdmLockEx(pDevIns->Internal.s.pVMR0, rc);
     745}
     746
     747
     748/** @copydoc PDMHPETHLPR0::pfnUnlock */
     749static DECLCALLBACK(void) pdmR0HpetHlp_Unlock(PPDMDEVINS pDevIns)
     750{
     751    PDMDEV_ASSERT_DEVINS(pDevIns);
     752    pdmUnlock(pDevIns->Internal.s.pVMR0);
     753}
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