Changeset 20001 in vbox
- Timestamp:
- May 25, 2009 1:59:29 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
-
include/VBox/pdmapi.h (modified) (1 diff)
-
include/VBox/pdmdev.h (modified) (2 diffs)
-
src/VBox/Devices/PC/DevAPIC.cpp (modified) (3 diffs)
-
src/VBox/VMM/PDMInternal.h (modified) (3 diffs)
-
src/VBox/VMM/VMMAll/EMAll.cpp (modified) (2 diffs)
-
src/VBox/VMM/VMMAll/PDMAll.cpp (modified) (2 diffs)
-
src/VBox/VMM/VMMR0/HWSVMR0.cpp (modified) (2 diffs)
-
src/VBox/VMM/VMMR0/HWVMXR0.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/pdmapi.h
r19995 r20001 50 50 VMMDECL(int) PDMApicSetBase(PVM pVM, uint64_t u64Base); 51 51 VMMDECL(int) PDMApicGetBase(PVM pVM, uint64_t *pu64Base); 52 VMMDECL(int) PDMApicSetTPR(PVM pVM, uint8_t u8TPR);53 VMMDECL(int) PDMApicGetTPR(PVM pVM, uint8_t *pu8TPR, bool *pfPending);52 VMMDECL(int) PDMApicSetTPR(PVMCPU pVCpu, uint8_t u8TPR); 53 VMMDECL(int) PDMApicGetTPR(PVMCPU pVCpu, uint8_t *pu8TPR, bool *pfPending); 54 54 VMMDECL(int) PDMApicWriteMSR(PVM pVM, VMCPUID iCpu, uint32_t u32Reg, uint64_t u64Value); 55 55 VMMDECL(int) PDMApicReadMSR(PVM pVM, VMCPUID iCpu, uint32_t u32Reg, uint64_t *pu64Value); -
trunk/include/VBox/pdmdev.h
r19475 r20001 983 983 * 984 984 * @param pDevIns Device instance of the APIC. 985 * @param idCpu VCPU id 985 986 * @param u8TPR The new TPR. 986 987 */ 987 DECLR3CALLBACKMEMBER(void, pfnSetTPRR3,(PPDMDEVINS pDevIns, uint8_t u8TPR));988 DECLR3CALLBACKMEMBER(void, pfnSetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR)); 988 989 989 990 /** … … 992 993 * @returns The current TPR. 993 994 * @param pDevIns Device instance of the APIC. 994 * @param pfPending Pending interrupt state (out).995 */ 996 DECLR3CALLBACKMEMBER(uint8_t, pfnGetTPRR3,(PPDMDEVINS pDevIns ));995 * @param idCpu VCPU id 996 */ 997 DECLR3CALLBACKMEMBER(uint8_t, pfnGetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 997 998 998 999 /** -
trunk/src/VBox/Devices/PC/DevAPIC.cpp
r19787 r20001 438 438 PDMBOTHCBDECL(void) apicSetBase(PPDMDEVINS pDevIns, uint64_t val); 439 439 PDMBOTHCBDECL(uint64_t) apicGetBase(PPDMDEVINS pDevIns); 440 PDMBOTHCBDECL(void) apicSetTPR(PPDMDEVINS pDevIns, uint8_t val);441 PDMBOTHCBDECL(uint8_t) apicGetTPR(PPDMDEVINS pDevIns );440 PDMBOTHCBDECL(void) apicSetTPR(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t val); 441 PDMBOTHCBDECL(uint8_t) apicGetTPR(PPDMDEVINS pDevIns, VMCPUID idCpu); 442 442 PDMBOTHCBDECL(int) apicBusDeliverCallback(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, 443 443 uint8_t u8DeliveryMode, uint8_t iVector, uint8_t u8Polarity, … … 670 670 } 671 671 672 PDMBOTHCBDECL(void) apicSetTPR(PPDMDEVINS pDevIns, uint8_t val)672 PDMBOTHCBDECL(void) apicSetTPR(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t val) 673 673 { 674 674 APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *); 675 APICState *s = getLapic (dev);675 APICState *s = getLapicById(dev, idCpu); 676 676 LogFlow(("apicSetTPR: val=%#x (trp %#x -> %#x)\n", val, s->tpr, (val & 0x0f) << 4)); 677 677 apic_update_tpr(dev, s, (val & 0x0f) << 4); 678 678 } 679 679 680 PDMBOTHCBDECL(uint8_t) apicGetTPR(PPDMDEVINS pDevIns )680 PDMBOTHCBDECL(uint8_t) apicGetTPR(PPDMDEVINS pDevIns, VMCPUID idCpu) 681 681 { 682 682 APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *); 683 APICState *s = getLapic (dev);683 APICState *s = getLapicById(dev, idCpu); 684 684 Log2(("apicGetTPR: returns %#x\n", s->tpr >> 4)); 685 685 return s->tpr >> 4; … … 2368 2368 /* 2369 2369 * Register the MMIO range. 2370 * @todo: may need to rethink for cases when different LAPICs mapped to different address2371 * (see IA32_APIC_BASE_MSR)2372 2370 */ 2373 2371 rc = PDMDevHlpMMIORegister(pDevIns, LAPIC_BASE(pThis)->apicbase & ~0xfff, 0x1000, pThis, -
trunk/src/VBox/VMM/PDMInternal.h
r19785 r20001 409 409 DECLR3CALLBACKMEMBER(uint64_t, pfnGetBaseR3,(PPDMDEVINS pDevIns)); 410 410 /** @copydoc PDMAPICREG::pfnSetTPRR3 */ 411 DECLR3CALLBACKMEMBER(void, pfnSetTPRR3,(PPDMDEVINS pDevIns, uint8_t u8TPR));411 DECLR3CALLBACKMEMBER(void, pfnSetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR)); 412 412 /** @copydoc PDMAPICREG::pfnGetTPRR3 */ 413 DECLR3CALLBACKMEMBER(uint8_t, pfnGetTPRR3,(PPDMDEVINS pDevIns ));413 DECLR3CALLBACKMEMBER(uint8_t, pfnGetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 414 414 /** @copydoc PDMAPICREG::pfnWriteMSRR3 */ 415 415 DECLR3CALLBACKMEMBER(int, pfnWriteMSRR3, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value)); … … 431 431 DECLR0CALLBACKMEMBER(uint64_t, pfnGetBaseR0,(PPDMDEVINS pDevIns)); 432 432 /** @copydoc PDMAPICREG::pfnSetTPRR3 */ 433 DECLR0CALLBACKMEMBER(void, pfnSetTPRR0,(PPDMDEVINS pDevIns, uint8_t u8TPR));433 DECLR0CALLBACKMEMBER(void, pfnSetTPRR0,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR)); 434 434 /** @copydoc PDMAPICREG::pfnGetTPRR3 */ 435 DECLR0CALLBACKMEMBER(uint8_t, pfnGetTPRR0,(PPDMDEVINS pDevIns ));435 DECLR0CALLBACKMEMBER(uint8_t, pfnGetTPRR0,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 436 436 /** @copydoc PDMAPICREG::pfnWriteMSRR3 */ 437 437 DECLR0CALLBACKMEMBER(uint32_t, pfnWriteMSRR0, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value)); … … 453 453 DECLRCCALLBACKMEMBER(uint64_t, pfnGetBaseRC,(PPDMDEVINS pDevIns)); 454 454 /** @copydoc PDMAPICREG::pfnSetTPRR3 */ 455 DECLRCCALLBACKMEMBER(void, pfnSetTPRRC,(PPDMDEVINS pDevIns, uint8_t u8TPR));455 DECLRCCALLBACKMEMBER(void, pfnSetTPRRC,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR)); 456 456 /** @copydoc PDMAPICREG::pfnGetTPRR3 */ 457 DECLRCCALLBACKMEMBER(uint8_t, pfnGetTPRRC,(PPDMDEVINS pDevIns ));457 DECLRCCALLBACKMEMBER(uint8_t, pfnGetTPRRC,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 458 458 /** @copydoc PDMAPICREG::pfnWriteMSRR3 */ 459 459 DECLRCCALLBACKMEMBER(uint32_t, pfnWriteMSRRC, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value)); -
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r19992 r20001 1994 1994 { 1995 1995 val64 = 0; 1996 rc = PDMApicGetTPR(pV M, (uint8_t *)&val64, NULL);1996 rc = PDMApicGetTPR(pVCpu, (uint8_t *)&val64, NULL); 1997 1997 AssertMsgRCReturn(rc, ("PDMApicGetTPR failed\n"), VERR_EM_INTERPRETER); 1998 1998 } … … 2171 2171 2172 2172 case USE_REG_CR8: 2173 return PDMApicSetTPR(pV M, val);2173 return PDMApicSetTPR(pVCpu, val); 2174 2174 2175 2175 default: -
trunk/src/VBox/VMM/VMMAll/PDMAll.cpp
r19995 r20001 226 226 * 227 227 * @returns VBox status code. 228 * @param pV M VMhandle.228 * @param pVCpu VMCPU handle. 229 229 * @param u8TPR The new TPR. 230 230 */ 231 VMMDECL(int) PDMApicSetTPR(PVM pVM, uint8_t u8TPR) 232 { 231 VMMDECL(int) PDMApicSetTPR(PVMCPU pVCpu, uint8_t u8TPR) 232 { 233 PVM pVM = pVCpu->CTX_SUFF(pVM); 233 234 if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns)) 234 235 { 235 236 Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR)); 236 237 pdmLock(pVM); 237 pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), u8TPR);238 pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu, u8TPR); 238 239 pdmUnlock(pVM); 239 240 return VINF_SUCCESS; … … 247 248 * 248 249 * @returns The current TPR. 249 * @param pV M VMhandle.250 * @param pVCpu VMCPU handle. 250 251 * @param pu8TPR Where to store the TRP. 251 252 * @param pfPending Pending interrupt state (out). 252 253 */ 253 VMMDECL(int) PDMApicGetTPR(PVM pVM, uint8_t *pu8TPR, bool *pfPending) 254 { 254 VMMDECL(int) PDMApicGetTPR(PVMCPU pVCpu, uint8_t *pu8TPR, bool *pfPending) 255 { 256 PVM pVM = pVCpu->CTX_SUFF(pVM); 255 257 if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns)) 256 258 { 257 259 Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR)); 258 260 pdmLock(pVM); 259 *pu8TPR = pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns) );261 *pu8TPR = pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu); 260 262 if (pfPending) 261 263 *pfPending = pVM->pdm.s.Apic.CTX_SUFF(pfnHasPendingIrq)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns)); -
trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
r19992 r20001 947 947 948 948 /* TPR caching in CR8 */ 949 int rc = PDMApicGetTPR(pV M, &u8LastVTPR, &fPending);949 int rc = PDMApicGetTPR(pVCpu, &u8LastVTPR, &fPending); 950 950 AssertRC(rc); 951 951 pVMCB->ctrl.IntCtrl.n.u8VTPR = u8LastVTPR; … … 1340 1340 if (fSyncTPR) 1341 1341 { 1342 rc = PDMApicSetTPR(pV M, pVMCB->ctrl.IntCtrl.n.u8VTPR);1342 rc = PDMApicSetTPR(pVCpu, pVMCB->ctrl.IntCtrl.n.u8VTPR); 1343 1343 AssertRC(rc); 1344 1344 } -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r20000 r20001 2181 2181 bool fPending; 2182 2182 2183 int rc = PDMApicGetTPR(pV M, &u8TPR, &fPending);2183 int rc = PDMApicGetTPR(pVCpu, &u8TPR, &fPending); 2184 2184 AssertRC(rc); 2185 2185 /* The TPR can be found at offset 0x80 in the APIC mmio page. */ … … 2384 2384 if (fSyncTPR) 2385 2385 { 2386 rc = PDMApicSetTPR(pV M, pVCpu->hwaccm.s.vmx.pVAPIC[0x80] >> 4);2386 rc = PDMApicSetTPR(pVCpu, pVCpu->hwaccm.s.vmx.pVAPIC[0x80] >> 4); 2387 2387 AssertRC(rc); 2388 2388 }
Note:
See TracChangeset
for help on using the changeset viewer.

