VirtualBox

Changeset 20037 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
May 26, 2009 1:25:48 PM (16 years ago)
Author:
vboxsync
Message:

TPR read/write updates

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PDMInternal.h

    r20008 r20037  
    420420    DECLR3CALLBACKMEMBER(uint64_t,  pfnGetBaseR3,(PPDMDEVINS pDevIns));
    421421    /** @copydoc PDMAPICREG::pfnSetTPRR3 */
    422     DECLR3CALLBACKMEMBER(void,      pfnSetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR));
     422    DECLR3CALLBACKMEMBER(void,      pfnSetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR, bool fMMIOFormat));
    423423    /** @copydoc PDMAPICREG::pfnGetTPRR3 */
    424     DECLR3CALLBACKMEMBER(uint8_t,   pfnGetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu));
     424    DECLR3CALLBACKMEMBER(uint8_t,   pfnGetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, bool fMMIOFormat));
    425425    /** @copydoc PDMAPICREG::pfnWriteMSRR3 */
    426426    DECLR3CALLBACKMEMBER(int,       pfnWriteMSRR3, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value));
     
    442442    DECLR0CALLBACKMEMBER(uint64_t,  pfnGetBaseR0,(PPDMDEVINS pDevIns));
    443443    /** @copydoc PDMAPICREG::pfnSetTPRR3 */
    444     DECLR0CALLBACKMEMBER(void,      pfnSetTPRR0,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR));
     444    DECLR0CALLBACKMEMBER(void,      pfnSetTPRR0,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR, bool fMMIOFormat));
    445445    /** @copydoc PDMAPICREG::pfnGetTPRR3 */
    446     DECLR0CALLBACKMEMBER(uint8_t,   pfnGetTPRR0,(PPDMDEVINS pDevIns, VMCPUID idCpu));
     446    DECLR0CALLBACKMEMBER(uint8_t,   pfnGetTPRR0,(PPDMDEVINS pDevIns, VMCPUID idCpu, bool fMMIOFormat));
    447447     /** @copydoc PDMAPICREG::pfnWriteMSRR3 */
    448448    DECLR0CALLBACKMEMBER(uint32_t,  pfnWriteMSRR0, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value));
     
    464464    DECLRCCALLBACKMEMBER(uint64_t,  pfnGetBaseRC,(PPDMDEVINS pDevIns));
    465465    /** @copydoc PDMAPICREG::pfnSetTPRR3 */
    466     DECLRCCALLBACKMEMBER(void,      pfnSetTPRRC,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR));
     466    DECLRCCALLBACKMEMBER(void,      pfnSetTPRRC,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR, bool fMMIOFormat));
    467467    /** @copydoc PDMAPICREG::pfnGetTPRR3 */
    468     DECLRCCALLBACKMEMBER(uint8_t,   pfnGetTPRRC,(PPDMDEVINS pDevIns, VMCPUID idCpu));
     468    DECLRCCALLBACKMEMBER(uint8_t,   pfnGetTPRRC,(PPDMDEVINS pDevIns, VMCPUID idCpu, bool fMMIOFormat));
    469469    /** @copydoc PDMAPICREG::pfnWriteMSRR3 */
    470470    DECLRCCALLBACKMEMBER(uint32_t,  pfnWriteMSRRC, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value));
  • trunk/src/VBox/VMM/VMMAll/PDMAll.cpp

    r20001 r20037  
    223223
    224224/**
    225  * Set the TPR (task priority register?).
     225 * Set the TPR (task priority register).
    226226 *
    227227 * @returns VBox status code.
    228228 * @param   pVCpu           VMCPU handle.
    229229 * @param   u8TPR           The new TPR.
     230 * @param   fMMIOFormat     Update as if MMIO write to ApicBase + 0x80
     231 */
     232VMMDECL(int) PDMApicSetTPREx(PVMCPU pVCpu, uint8_t u8TPR, bool fMMIOFormat)
     233{
     234    PVM pVM = pVCpu->CTX_SUFF(pVM);
     235    if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns))
     236    {
     237        Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR));
     238        pdmLock(pVM);
     239        pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu, u8TPR, fMMIOFormat);
     240        pdmUnlock(pVM);
     241        return VINF_SUCCESS;
     242    }
     243    return VERR_PDM_NO_APIC_INSTANCE;
     244}
     245
     246/**
     247 * Set the TPR (task priority register).
     248 *
     249 * @returns VBox status code.
     250 * @param   pVCpu           VMCPU handle.
     251 * @param   u8TPR           The new TPR.
    230252 */
    231253VMMDECL(int) PDMApicSetTPR(PVMCPU pVCpu, uint8_t u8TPR)
    232254{
     255    return PDMApicSetTPREx(pVCpu, u8TPR, false /* TPR only */);
     256}
     257
     258/**
     259 * Get the TPR (task priority register).
     260 *
     261 * @returns The current TPR.
     262 * @param   pVCpu           VMCPU handle.
     263 * @param   pu8TPR          Where to store the TRP.
     264 * @param   fMMIOFormat     Return as if MMIO read from ApicBase + 0x80
     265 * @param   pfPending       Pending interrupt state (out).
     266*/
     267VMMDECL(int) PDMApicGetTPREx(PVMCPU pVCpu, uint8_t *pu8TPR, bool fMMIOFormat, bool *pfPending)
     268{
    233269    PVM pVM = pVCpu->CTX_SUFF(pVM);
    234270    if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns))
    235271    {
    236         Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR));
    237         pdmLock(pVM);
    238         pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu, u8TPR);
    239         pdmUnlock(pVM);
    240         return VINF_SUCCESS;
    241     }
     272        Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR));
     273        pdmLock(pVM);
     274        *pu8TPR = pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu, fMMIOFormat);
     275        if (pfPending)
     276            *pfPending = pVM->pdm.s.Apic.CTX_SUFF(pfnHasPendingIrq)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns));
     277        pdmUnlock(pVM);
     278        return VINF_SUCCESS;
     279    }
     280    *pu8TPR = 0;
    242281    return VERR_PDM_NO_APIC_INSTANCE;
    243282}
     
    254293VMMDECL(int) PDMApicGetTPR(PVMCPU pVCpu, uint8_t *pu8TPR, bool *pfPending)
    255294{
    256     PVM pVM = pVCpu->CTX_SUFF(pVM);
    257     if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns))
    258     {
    259         Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR));
    260         pdmLock(pVM);
    261         *pu8TPR = pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu);
    262         if (pfPending)
    263             *pfPending = pVM->pdm.s.Apic.CTX_SUFF(pfnHasPendingIrq)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns));
    264         pdmUnlock(pVM);
    265         return VINF_SUCCESS;
    266     }
    267     *pu8TPR = 0;
    268     return VERR_PDM_NO_APIC_INSTANCE;
     295    return PDMApicGetTPREx(pVCpu, pu8TPR, false /* TPR only */, pfPending);
    269296}
    270297
Note: See TracChangeset for help on using the changeset viewer.

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