Changeset 91930 in vbox
- Timestamp:
- Oct 21, 2021 10:12:30 AM (3 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
include/VBox/vmm/pdmdev.h (modified) (5 diffs)
-
src/VBox/Devices/Graphics/DevVGA.cpp (modified) (9 diffs)
-
src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp (modified) (3 diffs)
-
src/VBox/VMM/VMMR3/PDMDevHlp.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmdev.h
r91928 r91930 2424 2424 2425 2425 /** Current PDMDEVHLPR3 version number. */ 2426 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 5 5, 0)2426 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 56, 0) 2427 2427 2428 2428 /** … … 2715 2715 */ 2716 2716 DECLR3CALLBACKMEMBER(int, pfnMmio2ChangeRegionNo,(PPDMDEVINS pDevIns, PGMMMIO2HANDLE hRegion, uint32_t iNewRegion)); 2717 2718 /** 2719 * Mapping an MMIO2 page in place of an MMIO page for direct access. 2720 * 2721 * This is a special optimization used by the VGA device. Call 2722 * PDMDevHlpMmioResetRegion() to undo the mapping. 2723 * 2724 * @returns VBox status code. This API may return VINF_SUCCESS even if no 2725 * remapping is made. 2726 * @retval VERR_SEM_BUSY in ring-0 if we cannot get the IOM lock. 2727 * 2728 * @param pDevIns The device instance @a hRegion and @a hMmio2 are 2729 * associated with. 2730 * @param hRegion The handle to the MMIO region. 2731 * @param offRegion The offset into @a hRegion of the page to be 2732 * remapped. 2733 * @param hMmio2 The MMIO2 handle. 2734 * @param offMmio2 Offset into @a hMmio2 of the page to be use for the 2735 * mapping. 2736 * @param fPageFlags Page flags to set. Must be (X86_PTE_RW | X86_PTE_P) 2737 * for the time being. 2738 */ 2739 DECLR3CALLBACKMEMBER(int, pfnMmioMapMmio2Page,(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion, RTGCPHYS offRegion, 2740 uint64_t hMmio2, RTGCPHYS offMmio2, uint64_t fPageFlags)); 2741 2742 /** 2743 * Reset a previously modified MMIO region; restore the access flags. 2744 * 2745 * This undoes the effects of PDMDevHlpMmioMapMmio2Page() and is currently only 2746 * intended for some ancient VGA hack. However, it would be great to extend it 2747 * beyond VT-x and/or nested-paging. 2748 * 2749 * @returns VBox status code. 2750 * 2751 * @param pDevIns The device instance @a hRegion is associated with. 2752 * @param hRegion The handle to the MMIO region. 2753 */ 2754 DECLR3CALLBACKMEMBER(int, pfnMmioResetRegion, (PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion)); 2717 2755 /** @} */ 2718 2756 … … 5704 5742 DECLR0CALLBACKMEMBER(int, pfnPGMHandlerPhysicalPageTempOff,(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTGCPHYS GCPhysPage)); 5705 5743 5744 /** 5745 * Mapping an MMIO2 page in place of an MMIO page for direct access. 5746 * 5747 * This is a special optimization used by the VGA device. Call 5748 * PDMDevHlpMmioResetRegion() to undo the mapping. 5749 * 5750 * @returns VBox status code. This API may return VINF_SUCCESS even if no 5751 * remapping is made. 5752 * @retval VERR_SEM_BUSY in ring-0 if we cannot get the IOM lock. 5753 * 5754 * @param pDevIns The device instance @a hRegion and @a hMmio2 are 5755 * associated with. 5756 * @param hRegion The handle to the MMIO region. 5757 * @param offRegion The offset into @a hRegion of the page to be 5758 * remapped. 5759 * @param hMmio2 The MMIO2 handle. 5760 * @param offMmio2 Offset into @a hMmio2 of the page to be use for the 5761 * mapping. 5762 * @param fPageFlags Page flags to set. Must be (X86_PTE_RW | X86_PTE_P) 5763 * for the time being. 5764 */ 5765 DECLR0CALLBACKMEMBER(int, pfnMmioMapMmio2Page,(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion, RTGCPHYS offRegion, 5766 uint64_t hMmio2, RTGCPHYS offMmio2, uint64_t fPageFlags)); 5767 5768 /** 5769 * Reset a previously modified MMIO region; restore the access flags. 5770 * 5771 * This undoes the effects of PDMDevHlpMmioMapMmio2Page() and is currently only 5772 * intended for some ancient VGA hack. However, it would be great to extend it 5773 * beyond VT-x and/or nested-paging. 5774 * 5775 * @returns VBox status code. 5776 * 5777 * @param pDevIns The device instance @a hRegion is associated with. 5778 * @param hRegion The handle to the MMIO region. 5779 */ 5780 DECLR0CALLBACKMEMBER(int, pfnMmioResetRegion, (PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion)); 5781 5706 5782 /** Space reserved for future members. 5707 5783 * @{ */ … … 5727 5803 5728 5804 /** Current PDMDEVHLP version number. */ 5729 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 2 3, 0)5805 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 24, 0) 5730 5806 5731 5807 … … 6471 6547 6472 6548 #endif /* IN_RING3 */ 6549 6550 /** 6551 * @copydoc PDMDEVHLPR3::pfnMmioMapMmio2Page 6552 */ 6553 DECLINLINE(RTGCPHYS) PDMDevHlpMmioMapMmio2Page(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion, RTGCPHYS offRegion, 6554 uint64_t hMmio2, RTGCPHYS offMmio2, uint64_t fPageFlags) 6555 { 6556 return pDevIns->CTX_SUFF(pHlp)->pfnMmioMapMmio2Page(pDevIns, hRegion, offRegion, hMmio2, offMmio2, fPageFlags); 6557 } 6558 6559 /** 6560 * @copydoc PDMDEVHLPR3::pfnMmioResetRegion 6561 */ 6562 DECLINLINE(RTGCPHYS) PDMDevHlpMmioResetRegion(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion) 6563 { 6564 return pDevIns->CTX_SUFF(pHlp)->pfnMmioResetRegion(pDevIns, hRegion); 6565 } 6566 6473 6567 #if !defined(IN_RING3) || defined(DOXYGEN_RUNNING) 6474 6568 -
trunk/src/VBox/Devices/Graphics/DevVGA.cpp
r91928 r91930 632 632 if (pThis->fRemappedVGA) 633 633 { 634 IOMMmioResetRegion(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy);634 PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy); 635 635 pThis->fRemappedVGA = false; 636 636 } … … 671 671 if (pThis->fRemappedVGA) 672 672 { 673 IOMMmioResetRegion(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy);673 PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy); 674 674 pThis->fRemappedVGA = false; 675 675 } … … 928 928 if (pThis->fRemappedVGA) 929 929 { 930 IOMMmioResetRegion(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy);930 PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy); 931 931 pThis->fRemappedVGA = false; 932 932 } … … 1037 1037 if (pThis->fRemappedVGA) 1038 1038 { 1039 IOMMmioResetRegion(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy);1039 PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy); 1040 1040 pThis->fRemappedVGA = false; 1041 1041 } … … 1138 1138 /** @todo only allow read access (doesn't work now) */ 1139 1139 STAM_COUNTER_INC(&pThis->StatMapPage); 1140 IOMMmioMapMmio2Page(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy, GCPhys - 0xa0000,1141 pThis->hMmio2VRam, addr, X86_PTE_RW | X86_PTE_P);1140 PDMDevHlpMmioMapMmio2Page(pDevIns, pThis->hMmioLegacy, GCPhys - 0xa0000, 1141 pThis->hMmio2VRam, addr, X86_PTE_RW | X86_PTE_P); 1142 1142 /* Set as dirty as write accesses won't be noticed now. */ 1143 1143 vgaR3MarkDirty(pThis, addr); … … 1246 1246 { 1247 1247 STAM_COUNTER_INC(&pThis->StatMapPage); 1248 IOMMmioMapMmio2Page(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy, GCPhys - 0xa0000,1249 pThis->hMmio2VRam, addr, X86_PTE_RW | X86_PTE_P);1248 PDMDevHlpMmioMapMmio2Page(pDevIns, pThis->hMmioLegacy, GCPhys - 0xa0000, 1249 pThis->hMmio2VRam, addr, X86_PTE_RW | X86_PTE_P); 1250 1250 pThis->fRemappedVGA = true; 1251 1251 } … … 4792 4792 if (pThis->fRemappedVGA) 4793 4793 { 4794 IOMMmioResetRegion(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy);4794 PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy); 4795 4795 pThis->fRemappedVGA = false; 4796 4796 } … … 4820 4820 if (pThis->fRemappedVGA) 4821 4821 { 4822 IOMMmioResetRegion(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy);4822 PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy); 4823 4823 pThis->fRemappedVGA = false; 4824 4824 } … … 6060 6060 if (pThis->fRemappedVGA) 6061 6061 { 6062 IOMMmioResetRegion(PDMDevHlpGetVM(pDevIns),pDevIns, pThis->hMmioLegacy);6062 PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy); 6063 6063 pThis->fRemappedVGA = false; 6064 6064 } -
trunk/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp
r91928 r91930 1329 1329 1330 1330 Log(("pdmR0DevHlp_PGMHandlerPhysicalPageTempOff: caller='%s'/%d: returns %Rrc\n", 1331 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 1332 return rc; 1333 } 1334 1335 1336 /** @interface_method_impl{PDMDEVHLPR0,pfnMmioMapMmio2Page} */ 1337 static DECLCALLBACK(int) pdmR0DevHlp_MmioMapMmio2Page(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion, RTGCPHYS offRegion, 1338 uint64_t hMmio2, RTGCPHYS offMmio2, uint64_t fPageFlags) 1339 { 1340 PDMDEV_ASSERT_DEVINS(pDevIns); 1341 LogFlow(("pdmR0DevHlp_MmioMapMmio2Page: caller='%s'/%d: hRegion=%RX64 offRegion=%RGp hMmio2=%RX64 offMmio2=%RGp fPageFlags=%RX64\n", 1342 pDevIns->pReg->szName, pDevIns->iInstance, hRegion, offRegion, hMmio2, offMmio2, fPageFlags)); 1343 1344 int rc = IOMMmioMapMmio2Page(pDevIns->Internal.s.pGVM, pDevIns, hRegion, offRegion, hMmio2, offMmio2, fPageFlags); 1345 1346 Log(("pdmR0DevHlp_MmioMapMmio2Page: caller='%s'/%d: returns %Rrc\n", 1347 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 1348 return rc; 1349 } 1350 1351 1352 /** @interface_method_impl{PDMDEVHLPR0,pfnMmioResetRegion} */ 1353 static DECLCALLBACK(int) pdmR0DevHlp_MmioResetRegion(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion) 1354 { 1355 PDMDEV_ASSERT_DEVINS(pDevIns); 1356 LogFlow(("pdmR0DevHlp_MmioResetRegion: caller='%s'/%d: hRegion=%RX64\n", 1357 pDevIns->pReg->szName, pDevIns->iInstance, hRegion)); 1358 1359 int rc = IOMMmioResetRegion(pDevIns->Internal.s.pGVM, pDevIns, hRegion); 1360 1361 Log(("pdmR0DevHlp_MmioResetRegion: caller='%s'/%d: returns %Rrc\n", 1331 1362 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 1332 1363 return rc; … … 1427 1458 pdmR0DevHlp_HpetSetUpContext, 1428 1459 pdmR0DevHlp_PGMHandlerPhysicalPageTempOff, 1460 pdmR0DevHlp_MmioMapMmio2Page, 1461 pdmR0DevHlp_MmioResetRegion, 1429 1462 NULL /*pfnReserved1*/, 1430 1463 NULL /*pfnReserved2*/, … … 1535 1568 pdmR0DevHlp_HpetSetUpContext, 1536 1569 pdmR0DevHlp_PGMHandlerPhysicalPageTempOff, 1570 pdmR0DevHlp_MmioMapMmio2Page, 1571 pdmR0DevHlp_MmioResetRegion, 1537 1572 NULL /*pfnReserved1*/, 1538 1573 NULL /*pfnReserved2*/, -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r91928 r91930 351 351 352 352 LogFlow(("pdmR3DevHlp_Mmio2ChangeRegionNo: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 353 return rc; 354 } 355 356 357 /** @interface_method_impl{PDMDEVHLPR3,pfnMmioMapMmio2Page} */ 358 static DECLCALLBACK(int) pdmR3DevHlp_MmioMapMmio2Page(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion, RTGCPHYS offRegion, 359 uint64_t hMmio2, RTGCPHYS offMmio2, uint64_t fPageFlags) 360 { 361 PDMDEV_ASSERT_DEVINS(pDevIns); 362 LogFlow(("pdmR3DevHlp_MmioMapMmio2Page: caller='%s'/%d: hRegion=%RX64 offRegion=%RGp hMmio2=%RX64 offMmio2=%RGp fPageFlags=%RX64\n", 363 pDevIns->pReg->szName, pDevIns->iInstance, hRegion, offRegion, hMmio2, offMmio2, fPageFlags)); 364 365 int rc = IOMMmioMapMmio2Page(pDevIns->Internal.s.pVMR3, pDevIns, hRegion, offRegion, hMmio2, offMmio2, fPageFlags); 366 367 Log(("pdmR3DevHlp_MmioMapMmio2Page: caller='%s'/%d: returns %Rrc\n", 368 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 369 return rc; 370 } 371 372 373 /** @interface_method_impl{PDMDEVHLPR3,pfnMmioResetRegion} */ 374 static DECLCALLBACK(int) pdmR3DevHlp_MmioResetRegion(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion) 375 { 376 PDMDEV_ASSERT_DEVINS(pDevIns); 377 LogFlow(("pdmR3DevHlp_MmioResetRegion: caller='%s'/%d: hRegion=%RX64\n", 378 pDevIns->pReg->szName, pDevIns->iInstance, hRegion)); 379 380 int rc = IOMMmioResetRegion(pDevIns->Internal.s.pVMR3, pDevIns, hRegion); 381 382 Log(("pdmR3DevHlp_MmioResetRegion: caller='%s'/%d: returns %Rrc\n", 383 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 353 384 return rc; 354 385 } … … 4566 4597 pdmR3DevHlp_Mmio2GetMappingAddress, 4567 4598 pdmR3DevHlp_Mmio2ChangeRegionNo, 4599 pdmR3DevHlp_MmioMapMmio2Page, 4600 pdmR3DevHlp_MmioResetRegion, 4568 4601 pdmR3DevHlp_ROMRegister, 4569 4602 pdmR3DevHlp_ROMProtectShadow, … … 4945 4978 pdmR3DevHlp_Mmio2GetMappingAddress, 4946 4979 pdmR3DevHlp_Mmio2ChangeRegionNo, 4980 pdmR3DevHlp_MmioMapMmio2Page, 4981 pdmR3DevHlp_MmioResetRegion, 4947 4982 pdmR3DevHlp_ROMRegister, 4948 4983 pdmR3DevHlp_ROMProtectShadow, … … 5595 5630 pdmR3DevHlp_Mmio2GetMappingAddress, 5596 5631 pdmR3DevHlp_Mmio2ChangeRegionNo, 5632 pdmR3DevHlp_MmioMapMmio2Page, 5633 pdmR3DevHlp_MmioResetRegion, 5597 5634 pdmR3DevHlp_ROMRegister, 5598 5635 pdmR3DevHlp_ROMProtectShadow,
Note:
See TracChangeset
for help on using the changeset viewer.

