Changeset 81564 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Oct 29, 2019 10:38:26 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134304
- Location:
- trunk/src/VBox/VMM/VMMR3
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/IOMR3IoPort.cpp
r81461 r81564 548 548 549 549 /** 550 * Gets the mapping address of I/O ports @a hIoPorts. 551 * 552 * @returns Mapping address if mapped, UINT32_MAX if not mapped or invalid 553 * input. 554 * @param pVM The cross context VM structure. 555 * @param pDevIns The device which allegedly owns @a hRegion. 556 * @param hIoPorts The handle to I/O port region. 557 */ 558 VMMR3_INT_DECL(uint32_t) IOMR3IoPortGetMappingAddress(PVM pVM, PPDMDEVINS pDevIns, IOMIOPORTHANDLE hIoPorts) 559 { 560 AssertPtrReturn(pDevIns, UINT32_MAX); 561 AssertReturn(hIoPorts < RT_MIN(pVM->iom.s.cMmioRegs, pVM->iom.s.cMmioAlloc), UINT32_MAX); 562 IOMIOPORTENTRYR3 volatile * const pRegEntry = &pVM->iom.s.paIoPortRegs[hIoPorts]; 563 AssertReturn(pRegEntry->pDevIns == pDevIns, UINT32_MAX); 564 for (uint32_t iTry = 0; ; iTry++) 565 { 566 bool fMapped = pRegEntry->fMapped; 567 RTIOPORT uPort = pRegEntry->uPort; 568 if ( ( ASMAtomicReadBool(&pRegEntry->fMapped) == fMapped 569 && uPort == pRegEntry->uPort) 570 || iTry > 1024) 571 return fMapped ? uPort : UINT32_MAX; 572 ASMNopPause(); 573 } 574 } 575 576 577 /** 550 578 * Display a single I/O port ring-3 range. 551 579 * -
trunk/src/VBox/VMM/VMMR3/IOMR3Mmio.cpp
r81461 r81564 488 488 489 489 /** 490 * Gets the mapping address of MMIO region @a hRegion. 491 * 492 * @returns Mapping address if mapped, NIL_RTGCPHYS if not mapped or invalid 493 * input. 494 * @param pVM The cross context VM structure. 495 * @param pDevIns The device which allegedly owns @a hRegion. 496 * @param hRegion The handle to validate. 497 */ 498 VMMR3_INT_DECL(RTGCPHYS) IOMR3MmioGetMappingAddress(PVM pVM, PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion) 499 { 500 AssertPtrReturn(pDevIns, NIL_RTGCPHYS); 501 AssertReturn(hRegion < RT_MIN(pVM->iom.s.cMmioRegs, pVM->iom.s.cMmioAlloc), NIL_RTGCPHYS); 502 PIOMMMIOENTRYR3 const pRegEntry = &pVM->iom.s.paMmioRegs[hRegion]; 503 AssertReturn(pRegEntry->pDevIns == pDevIns, NIL_RTGCPHYS); 504 return pRegEntry->GCPhysMapping; 505 } 506 507 508 /** 490 509 * Display a single MMIO range. 491 510 * -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r81555 r81564 145 145 return rc; 146 146 } 147 148 149 /** @interface_method_impl{PDMDEVHLPR3,pfnIoPortGetMappingAddress} */ 150 static DECLCALLBACK(uint32_t) pdmR3DevHlp_IoPortGetMappingAddress(PPDMDEVINS pDevIns, IOMIOPORTHANDLE hIoPorts) 151 { 152 PDMDEV_ASSERT_DEVINS(pDevIns); 153 LogFlow(("pdmR3DevHlp_IoPortGetMappingAddress: caller='%s'/%d: hIoPorts=%#x\n", pDevIns->pReg->szName, pDevIns->iInstance, hIoPorts)); 154 155 uint32_t uAddress = IOMR3IoPortGetMappingAddress(pDevIns->Internal.s.pVMR3, pDevIns, hIoPorts); 156 157 LogFlow(("pdmR3DevHlp_IoPortGetMappingAddress: caller='%s'/%d: returns %#RX32\n", pDevIns->pReg->szName, pDevIns->iInstance, uAddress)); 158 return uAddress; 159 } 160 147 161 148 162 /** @interface_method_impl{PDMDEVHLPR3,pfnIOPortRegister} */ … … 395 409 LogFlow(("pdmR3DevHlp_MmioReduce: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 396 410 return rc; 411 } 412 413 414 /** @interface_method_impl{PDMDEVHLPR3,pfnMmioGetMappingAddress} */ 415 static DECLCALLBACK(RTGCPHYS) pdmR3DevHlp_MmioGetMappingAddress(PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion) 416 { 417 PDMDEV_ASSERT_DEVINS(pDevIns); 418 LogFlow(("pdmR3DevHlp_MmioGetMappingAddress: caller='%s'/%d: hRegion=%#x\n", pDevIns->pReg->szName, pDevIns->iInstance, hRegion)); 419 420 RTGCPHYS GCPhys = IOMR3MmioGetMappingAddress(pDevIns->Internal.s.pVMR3, pDevIns, hRegion); 421 422 LogFlow(("pdmR3DevHlp_MmioGetMappingAddress: caller='%s'/%d: returns %RGp\n", pDevIns->pReg->szName, pDevIns->iInstance, GCPhys)); 423 return GCPhys; 397 424 } 398 425 … … 4454 4481 pdmR3DevHlp_IoPortMap, 4455 4482 pdmR3DevHlp_IoPortUnmap, 4483 pdmR3DevHlp_IoPortGetMappingAddress, 4456 4484 pdmR3DevHlp_IOPortRegister, 4457 4485 pdmR3DevHlp_IOPortRegisterRC, … … 4462 4490 pdmR3DevHlp_MmioUnmap, 4463 4491 pdmR3DevHlp_MmioReduce, 4492 pdmR3DevHlp_MmioGetMappingAddress, 4464 4493 pdmR3DevHlp_MMIORegister, 4465 4494 pdmR3DevHlp_MMIORegisterRC, … … 4922 4951 pdmR3DevHlp_IoPortMap, 4923 4952 pdmR3DevHlp_IoPortUnmap, 4953 pdmR3DevHlp_IoPortGetMappingAddress, 4924 4954 pdmR3DevHlp_IOPortRegister, 4925 4955 pdmR3DevHlp_IOPortRegisterRC, … … 4930 4960 pdmR3DevHlp_MmioUnmap, 4931 4961 pdmR3DevHlp_MmioReduce, 4962 pdmR3DevHlp_MmioGetMappingAddress, 4932 4963 pdmR3DevHlp_MMIORegister, 4933 4964 pdmR3DevHlp_MMIORegisterRC,
Note:
See TracChangeset
for help on using the changeset viewer.