Changeset 81961 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Nov 18, 2019 7:06:25 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134758
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp
r81938 r81961 1189 1189 *ppIoApicHlp = &g_pdmR0IoApicHlp; 1190 1190 LogFlow(("pdmR0DevHlp_IoApicSetUpContext: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 1191 return VINF_SUCCESS; 1192 } 1193 1194 1195 /** @interface_method_impl{PDMDEVHLPR0,pfnHpetSetUpContext} */ 1196 static DECLCALLBACK(int) pdmR0DevHlp_HpetSetUpContext(PPDMDEVINS pDevIns, PPDMHPETREG pHpetReg, PCPDMHPETHLPR0 *ppHpetHlp) 1197 { 1198 PDMDEV_ASSERT_DEVINS(pDevIns); 1199 LogFlow(("pdmR0DevHlp_HpetSetUpContext: caller='%s'/%d: pHpetReg=%p:{.u32Version=%#x, } ppHpetHlp=%p\n", 1200 pDevIns->pReg->szName, pDevIns->iInstance, pHpetReg, pHpetReg->u32Version, ppHpetHlp)); 1201 PGVM pGVM = pDevIns->Internal.s.pGVM; 1202 1203 /* 1204 * Validate input. 1205 */ 1206 AssertMsgReturn(pHpetReg->u32Version == PDM_HPETREG_VERSION, 1207 ("%s/%d: u32Version=%#x expected %#x\n", pDevIns->pReg->szName, pDevIns->iInstance, pHpetReg->u32Version, PDM_HPETREG_VERSION), 1208 VERR_VERSION_MISMATCH); 1209 AssertPtrReturn(ppHpetHlp, VERR_INVALID_POINTER); 1210 1211 VM_ASSERT_STATE_RETURN(pGVM, VMSTATE_CREATING, VERR_WRONG_ORDER); 1212 VM_ASSERT_EMT0_RETURN(pGVM, VERR_VM_THREAD_NOT_EMT); 1213 1214 /* Check that it's the same device as made the ring-3 registrations: */ 1215 AssertLogRelMsgReturn(pGVM->pdm.s.pHpet == pDevIns->pDevInsForR3, ("%p vs %p\n", pGVM->pdm.s.pHpet, pDevIns->pDevInsForR3), 1216 VERR_NOT_OWNER); 1217 1218 ///* Check that it isn't already registered in ring-0: */ 1219 //AssertLogRelMsgReturn(pGVM->pdm.s.Hpet.pDevInsR0 == NULL, ("%p (caller pDevIns=%p)\n", pGVM->pdm.s.Hpet.pDevInsR0, pDevIns), 1220 // VERR_ALREADY_EXISTS); 1221 1222 /* 1223 * Nothing to take down here at present. 1224 */ 1225 Log(("PDM: Registered HPET device '%s'/%d pDevIns=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, pDevIns)); 1226 1227 /* set the helper pointer and return. */ 1228 *ppHpetHlp = &g_pdmR0HpetHlp; 1229 LogFlow(("pdmR0DevHlp_HpetSetUpContext: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 1191 1230 return VINF_SUCCESS; 1192 1231 } … … 1272 1311 pdmR0DevHlp_PICSetUpContext, 1273 1312 pdmR0DevHlp_IoApicSetUpContext, 1313 pdmR0DevHlp_HpetSetUpContext, 1274 1314 NULL /*pfnReserved1*/, 1275 1315 NULL /*pfnReserved2*/, -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r81951 r81961 3742 3742 { 3743 3743 PDMDEV_ASSERT_DEVINS(pDevIns); 3744 VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);3745 3744 LogFlow(("pdmR3DevHlp_IoApicRegister: caller='%s'/%d: pIoApicReg=%p:{.u32Version=%#x, .pfnSetIrq=%p, .pfnSendMsi=%p, .pfnSetEoi=%p, .u32TheEnd=%#x } ppIoApicHlp=%p\n", 3746 3745 pDevIns->pReg->szName, pDevIns->iInstance, pIoApicReg, pIoApicReg->u32Version, pIoApicReg->pfnSetIrq, pIoApicReg->pfnSendMsi, pIoApicReg->pfnSetEoi, pIoApicReg->u32TheEnd, ppIoApicHlp)); 3746 PVM pVM = pDevIns->Internal.s.pVMR3; 3747 3747 3748 3748 /* … … 3759 3759 VERR_VERSION_MISMATCH); 3760 3760 AssertPtrReturn(ppIoApicHlp, VERR_INVALID_POINTER); 3761 VM_ASSERT_STATE_RETURN(pVM, VMSTATE_CREATING, VERR_WRONG_ORDER); 3762 VM_ASSERT_EMT0_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); 3761 3763 3762 3764 /* … … 3764 3766 * If the I/O APIC does GC stuff so must the APIC. 3765 3767 */ 3766 PVM pVM = pDevIns->Internal.s.pVMR3;3767 3768 AssertMsgReturn(pVM->pdm.s.Apic.pDevInsR3 != NULL, ("Configuration error / Init order error! No APIC!\n"), VERR_WRONG_ORDER); 3768 3769 … … 3771 3772 */ 3772 3773 AssertMsgReturn(pVM->pdm.s.IoApic.pDevInsR3 == NULL, 3773 ("Only one ioapicdevice is supported! (caller %s/%d)\n", pDevIns->pReg->szName, pDevIns->iInstance),3774 ("Only one IOAPIC device is supported! (caller %s/%d)\n", pDevIns->pReg->szName, pDevIns->iInstance), 3774 3775 VERR_ALREADY_EXISTS); 3775 3776 … … 3790 3791 3791 3792 3792 /** @interface_method_impl{PDMDEVHLPR3,pfnH PETRegister} */3793 static DECLCALLBACK(int) pdmR3DevHlp_H PETRegister(PPDMDEVINS pDevIns, PPDMHPETREG pHpetReg, PCPDMHPETHLPR3 *ppHpetHlpR3)3794 { 3795 PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF_PV(pDevIns);3796 VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);3797 LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance));3793 /** @interface_method_impl{PDMDEVHLPR3,pfnHpetRegister} */ 3794 static DECLCALLBACK(int) pdmR3DevHlp_HpetRegister(PPDMDEVINS pDevIns, PPDMHPETREG pHpetReg, PCPDMHPETHLPR3 *ppHpetHlpR3) 3795 { 3796 PDMDEV_ASSERT_DEVINS(pDevIns); 3797 LogFlow(("pdmR3DevHlp_HpetRegister: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance)); 3798 PVM pVM = pDevIns->Internal.s.pVMR3; 3798 3799 3799 3800 /* 3800 3801 * Validate input. 3801 3802 */ 3802 if (pHpetReg->u32Version != PDM_HPETREG_VERSION) 3803 { 3804 AssertMsgFailed(("u32Version=%#x expected %#x\n", pHpetReg->u32Version, PDM_HPETREG_VERSION)); 3805 LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d: returns %Rrc (version)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER)); 3806 return VERR_INVALID_PARAMETER; 3807 } 3808 3809 if (!ppHpetHlpR3) 3810 { 3811 Assert(ppHpetHlpR3); 3812 LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d: returns %Rrc (ppApicHlpR3)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER)); 3813 return VERR_INVALID_PARAMETER; 3814 } 3815 3816 /* set the helper pointer and return. */ 3803 AssertMsgReturn(pHpetReg->u32Version == PDM_HPETREG_VERSION, 3804 ("%s/%u: u32Version=%#x expected %#x\n", pDevIns->pReg->szName, pDevIns->iInstance, pHpetReg->u32Version, PDM_HPETREG_VERSION), 3805 VERR_VERSION_MISMATCH); 3806 AssertPtrReturn(ppHpetHlpR3, VERR_INVALID_POINTER); 3807 VM_ASSERT_STATE_RETURN(pVM, VMSTATE_CREATING, VERR_WRONG_ORDER); 3808 VM_ASSERT_EMT0_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); 3809 3810 /* 3811 * Only one HPET device. 3812 */ 3813 AssertMsgReturn(pVM->pdm.s.pHpet == NULL, 3814 ("Only one HPET device is supported! (caller %s/%d)\n", pDevIns->pReg->szName, pDevIns->iInstance), 3815 VERR_ALREADY_EXISTS); 3816 3817 /* 3818 * Do the job (what there is of it). 3819 */ 3820 pVM->pdm.s.pHpet = pDevIns; 3817 3821 *ppHpetHlpR3 = &g_pdmR3DevHpetHlp; 3818 LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 3822 3823 LogFlow(("pdmR3DevHlp_HpetRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 3819 3824 return VINF_SUCCESS; 3820 3825 } … … 4540 4545 pdmR3DevHlp_APICRegister, 4541 4546 pdmR3DevHlp_IoApicRegister, 4542 pdmR3DevHlp_H PETRegister,4547 pdmR3DevHlp_HpetRegister, 4543 4548 pdmR3DevHlp_PciRawRegister, 4544 4549 pdmR3DevHlp_DMACRegister, … … 5036 5041 pdmR3DevHlp_APICRegister, 5037 5042 pdmR3DevHlp_IoApicRegister, 5038 pdmR3DevHlp_H PETRegister,5043 pdmR3DevHlp_HpetRegister, 5039 5044 pdmR3DevHlp_PciRawRegister, 5040 5045 pdmR3DevHlp_DMACRegister, -
trunk/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp
r81938 r81961 317 317 318 318 319 /** @interface_method_impl{PDMHPETHLPR3,pfnGetRCHelpers} */320 static DECLCALLBACK(PCPDMHPETHLPRC) pdmR3HpetHlp_GetRCHelpers(PPDMDEVINS pDevIns)321 {322 PDMDEV_ASSERT_DEVINS(pDevIns);323 PVM pVM = pDevIns->Internal.s.pVMR3;324 VM_ASSERT_EMT(pVM);325 326 RTRCPTR pRCHelpers = NIL_RTRCPTR;327 if (VM_IS_RAW_MODE_ENABLED(pVM))328 {329 int rc = PDMR3LdrGetSymbolRC(pVM, NULL, "g_pdmRCHpetHlp", &pRCHelpers);330 AssertReleaseRC(rc);331 AssertRelease(pRCHelpers);332 }333 334 LogFlow(("pdmR3HpetHlp_GetGCHelpers: caller='%s'/%d: returns %RRv\n",335 pDevIns->pReg->szName, pDevIns->iInstance, pRCHelpers));336 return pRCHelpers;337 }338 339 340 /** @interface_method_impl{PDMHPETHLPR3,pfnGetR0Helpers} */341 static DECLCALLBACK(PCPDMHPETHLPR0) pdmR3HpetHlp_GetR0Helpers(PPDMDEVINS pDevIns)342 {343 PDMDEV_ASSERT_DEVINS(pDevIns);344 PVM pVM = pDevIns->Internal.s.pVMR3;345 VM_ASSERT_EMT(pVM);346 PCPDMHPETHLPR0 pR0Helpers = 0;347 int rc = PDMR3LdrGetSymbolR0(pVM, NULL, "g_pdmR0HpetHlp", &pR0Helpers);348 AssertReleaseRC(rc);349 AssertRelease(pR0Helpers);350 LogFlow(("pdmR3HpetHlp_GetR0Helpers: caller='%s'/%d: returns %RHv\n",351 pDevIns->pReg->szName, pDevIns->iInstance, pR0Helpers));352 return pR0Helpers;353 }354 355 356 319 /** 357 320 * HPET Device Helpers. … … 360 323 { 361 324 PDM_HPETHLPR3_VERSION, 362 pdmR3HpetHlp_GetRCHelpers,363 pdmR3HpetHlp_GetR0Helpers,364 325 pdmR3HpetHlp_SetLegacyMode, 365 326 pdmR3HpetHlp_SetIrq, -
trunk/src/VBox/VMM/include/PDMInternal.h
r81948 r81961 1231 1231 /** The registered I/O APIC device. */ 1232 1232 PDMIOAPIC IoApic; 1233 /** The registered HPET device. */ 1234 PPDMDEVINSR3 pHpet; 1233 1235 1234 1236 /** List of registered devices. (FIFO) */
Note:
See TracChangeset
for help on using the changeset viewer.