Changeset 82039 in vbox
- Timestamp:
- Nov 20, 2019 5:22:21 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134843
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmdev.h
r81961 r82039 3742 3742 * @param pDevIns The device instance. 3743 3743 */ 3744 DECLR3CALLBACKMEMBER(int, pfnA PICRegister,(PPDMDEVINS pDevIns));3744 DECLR3CALLBACKMEMBER(int, pfnApicRegister,(PPDMDEVINS pDevIns)); 3745 3745 3746 3746 /** … … 5175 5175 5176 5176 /** 5177 * Sets up the APIC for the ring-0 context. 5178 * 5179 * This must be called after ring-3 has registered the APIC using 5180 * PDMDevHlpApicRegister(). 5181 * 5182 * @returns VBox status code. 5183 * @param pDevIns The device instance. 5184 */ 5185 DECLR0CALLBACKMEMBER(int, pfnApicSetUpContext,(PPDMDEVINS pDevIns)); 5186 5187 /** 5177 5188 * Sets up the IOAPIC for the ring-0 context. 5178 5189 * … … 5225 5236 5226 5237 /** Current PDMDEVHLP version number. */ 5227 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 1 4, 0)5238 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 15, 0) 5228 5239 5229 5240 … … 7704 7715 7705 7716 /** 7706 * @copydoc PDMDEVHLPR3::pfnA PICRegister7707 */ 7708 DECLINLINE(int) PDMDevHlpA PICRegister(PPDMDEVINS pDevIns)7709 { 7710 return pDevIns->pHlpR3->pfnA PICRegister(pDevIns);7717 * @copydoc PDMDEVHLPR3::pfnApicRegister 7718 */ 7719 DECLINLINE(int) PDMDevHlpApicRegister(PPDMDEVINS pDevIns) 7720 { 7721 return pDevIns->pHlpR3->pfnApicRegister(pDevIns); 7711 7722 } 7712 7723 … … 7857 7868 { 7858 7869 return pDevIns->CTX_SUFF(pHlp)->pfnPICSetUpContext(pDevIns, pPicReg, ppPicHlp); 7870 } 7871 7872 /** 7873 * @copydoc PDMDEVHLPR0::pfnApicSetUpContext 7874 */ 7875 DECLINLINE(int) PDMDevHlpApicSetUpContext(PPDMDEVINS pDevIns) 7876 { 7877 return pDevIns->CTX_SUFF(pHlp)->pfnApicSetUpContext(pDevIns); 7859 7878 } 7860 7879 -
trunk/src/VBox/VMM/VMMAll/APICAll.cpp
r82038 r82039 3515 3515 AssertRCReturn(rc, rc); 3516 3516 3517 rc = PDMDevHlpApicSetUpContext(pDevIns); 3518 AssertRCReturn(rc, rc); 3519 3517 3520 rc = PDMDevHlpMmioSetUpContext(pDevIns, pThis->hMmio, apicWriteMmio, apicReadMmio, NULL /*pvUser*/); 3518 3521 AssertRCReturn(rc, rc); … … 3520 3523 return VINF_SUCCESS; 3521 3524 } 3522 #endif 3525 #endif /* !IN_RING3 */ 3523 3526 3524 3527 /** -
trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp
r81961 r82039 1140 1140 *ppPicHlp = &g_pdmR0PicHlp; 1141 1141 LogFlow(("pdmR0DevHlp_PICSetUpContext: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 1142 return VINF_SUCCESS; 1143 } 1144 1145 1146 /** @interface_method_impl{PDMDEVHLPR0,pfnApicSetUpContext} */ 1147 static DECLCALLBACK(int) pdmR0DevHlp_ApicSetUpContext(PPDMDEVINS pDevIns) 1148 { 1149 PDMDEV_ASSERT_DEVINS(pDevIns); 1150 LogFlow(("pdmR0DevHlp_ApicSetUpContext: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance)); 1151 PGVM pGVM = pDevIns->Internal.s.pGVM; 1152 1153 /* 1154 * Validate input. 1155 */ 1156 VM_ASSERT_STATE_RETURN(pGVM, VMSTATE_CREATING, VERR_WRONG_ORDER); 1157 VM_ASSERT_EMT0_RETURN(pGVM, VERR_VM_THREAD_NOT_EMT); 1158 1159 /* Check that it's the same device as made the ring-3 registrations: */ 1160 AssertLogRelMsgReturn(pGVM->pdm.s.Apic.pDevInsR3 == pDevIns->pDevInsForR3, 1161 ("%p vs %p\n", pGVM->pdm.s.Apic.pDevInsR3, pDevIns->pDevInsForR3), VERR_NOT_OWNER); 1162 1163 /* Check that it isn't already registered in ring-0: */ 1164 AssertLogRelMsgReturn(pGVM->pdm.s.Apic.pDevInsR0 == NULL, ("%p (caller pDevIns=%p)\n", pGVM->pdm.s.Apic.pDevInsR0, pDevIns), 1165 VERR_ALREADY_EXISTS); 1166 1167 /* 1168 * Take down the instance. 1169 */ 1170 pGVM->pdm.s.Apic.pDevInsR0 = pDevIns; 1171 Log(("PDM: Registered APIC device '%s'/%d pDevIns=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, pDevIns)); 1172 1173 /* set the helper pointer and return. */ 1174 LogFlow(("pdmR0DevHlp_ApicSetUpContext: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 1142 1175 return VINF_SUCCESS; 1143 1176 } … … 1310 1343 pdmR0DevHlp_PCIBusSetUpContext, 1311 1344 pdmR0DevHlp_PICSetUpContext, 1345 pdmR0DevHlp_ApicSetUpContext, 1312 1346 pdmR0DevHlp_IoApicSetUpContext, 1313 1347 pdmR0DevHlp_HpetSetUpContext, -
trunk/src/VBox/VMM/VMMR3/APIC.cpp
r82036 r82039 1443 1443 * Register the APIC with PDM. 1444 1444 */ 1445 rc = PDMDevHlpA PICRegister(pDevIns);1445 rc = PDMDevHlpApicRegister(pDevIns); 1446 1446 AssertLogRelRCReturn(rc, rc); 1447 1447 -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r82034 r82039 3714 3714 3715 3715 /** @interface_method_impl{PDMDEVHLPR3,pfnAPICRegister} */ 3716 static DECLCALLBACK(int) pdmR3DevHlp_APICRegister(PPDMDEVINS pDevIns) 3717 { 3718 PDMDEV_ASSERT_DEVINS(pDevIns); 3719 VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3); 3716 static DECLCALLBACK(int) pdmR3DevHlp_ApicRegister(PPDMDEVINS pDevIns) 3717 { 3718 PDMDEV_ASSERT_DEVINS(pDevIns); 3719 3720 /* 3721 * Validate caller context. 3722 */ 3723 PVM pVM = pDevIns->Internal.s.pVMR3; 3724 VM_ASSERT_STATE_RETURN(pVM, VMSTATE_CREATING, VERR_WRONG_ORDER); 3725 VM_ASSERT_EMT0_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); 3720 3726 3721 3727 /* … … 3723 3729 * as they need to communicate and share state easily. 3724 3730 */ 3725 PVM pVM = pDevIns->Internal.s.pVMR3; 3726 if (pVM->pdm.s.Apic.pDevInsR3) 3727 { 3728 AssertMsgFailed(("Only one APIC device is supported!\n")); 3729 LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER)); 3730 return VERR_INVALID_PARAMETER; 3731 } 3732 3733 /* 3734 * Initialize the RC, R0 and HC bits. 3735 */ 3731 AssertMsgReturn(pVM->pdm.s.Apic.pDevInsR3 == NULL, 3732 ("%s/%u: Only one APIC device is supported!\n", pDevIns->pReg->szName, pDevIns->iInstance), 3733 VERR_ALREADY_EXISTS); 3734 3735 /* 3736 * Set the ring-3 and raw-mode bits, leave the ring-0 to ring-0 setup. 3737 */ 3738 pVM->pdm.s.Apic.pDevInsR3 = pDevIns; 3736 3739 pVM->pdm.s.Apic.pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns); 3737 3740 Assert(pVM->pdm.s.Apic.pDevInsRC || !VM_IS_RAW_MODE_ENABLED(pVM)); 3738 3741 3739 pVM->pdm.s.Apic.pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns); 3740 Assert(pVM->pdm.s.Apic.pDevInsR0); 3741 3742 pVM->pdm.s.Apic.pDevInsR3 = pDevIns; 3743 LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 3742 LogFlow(("pdmR3DevHlp_ApicRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS)); 3744 3743 return VINF_SUCCESS; 3745 3744 } … … 4551 4550 pdmR3DevHlp_PCIBusRegister, 4552 4551 pdmR3DevHlp_PICRegister, 4553 pdmR3DevHlp_A PICRegister,4552 pdmR3DevHlp_ApicRegister, 4554 4553 pdmR3DevHlp_IoApicRegister, 4555 4554 pdmR3DevHlp_HpetRegister, … … 5047 5046 pdmR3DevHlp_PCIBusRegister, 5048 5047 pdmR3DevHlp_PICRegister, 5049 pdmR3DevHlp_A PICRegister,5048 pdmR3DevHlp_ApicRegister, 5050 5049 pdmR3DevHlp_IoApicRegister, 5051 5050 pdmR3DevHlp_HpetRegister,
Note:
See TracChangeset
for help on using the changeset viewer.