Changeset 11261 in vbox for trunk/src/VBox
- Timestamp:
- Aug 8, 2008 3:46:17 PM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 34341
- Location:
- trunk/src/VBox
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/PC/DevPIC.cpp
r10202 r11261 1 1 /* $Id$ */ 2 2 /** @file 3 * Intel 8259 Programmable Interrupt Controller (PIC) Device.3 * DevPIC - Intel 8259 Programmable Interrupt Controller (PIC) Device. 4 4 */ 5 5 … … 28 28 #include <iprt/assert.h> 29 29 30 #include " vl_vbox.h"30 #include "../vl_vbox.h" 31 31 32 32 … … 40 40 #define PIC_LOCK(pThis, rc) \ 41 41 do { \ 42 int rc2 = (pThis)->CTX ALLSUFF(pPicHlp)->pfnLock((pThis)->CTXSUFF(pDevIns), rc); \42 int rc2 = (pThis)->CTX_SUFF(pPicHlp)->pfnLock((pThis)->CTX_SUFF(pDevIns), rc); \ 43 43 if (rc2 != VINF_SUCCESS) \ 44 44 return rc2; \ 45 45 } while (0) 46 46 #define PIC_UNLOCK(pThis) \ 47 (pThis)->CTX ALLSUFF(pPicHlp)->pfnUnlock((pThis)->CTXSUFF(pDevIns))47 (pThis)->CTX_SUFF(pPicHlp)->pfnUnlock((pThis)->CTX_SUFF(pDevIns)) 48 48 49 49 … … 111 111 uint8_t elcr; /* PIIX edge/trigger selection*/ 112 112 uint8_t elcr_mask; 113 /** Pointer to the device instance, HCPtr. */114 R3R0PTRTYPE(PPDMDEVINS) pDevInsHC;115 /** Pointer to the device instance, GCPtr. */116 RCPTRTYPE(PPDMDEVINS) pDevInsGC;117 #if HC_ARCH_BITS == 64 118 RTRCPTR Alignment0;119 #endif 113 /** Pointer to the device instance, R3 Ptr. */ 114 PPDMDEVINSR3 pDevInsR3; 115 /** Pointer to the device instance, R0 Ptr. */ 116 PPDMDEVINSR0 pDevInsR0; 117 /** Pointer to the device instance, RC Ptr. */ 118 PPDMDEVINSRC pDevInsRC; 119 RTRCPTR Alignment0; /**< Structure size alignment. */ 120 120 } PicState; 121 121 … … 127 127 /** The two interrupt controllers. */ 128 128 PicState aPics[2]; 129 /** Pointer to the device instance - R3 Ptr. */ 130 PPDMDEVINSR3 pDevInsR3; 129 131 /** Pointer to the PIC R3 helpers. */ 130 132 PCPDMPICHLPR3 pPicHlpR3; 133 /** Pointer to the device instance - R0 Ptr. */ 134 PPDMDEVINSR0 pDevInsR0; 131 135 /** Pointer to the PIC R0 helpers. */ 132 136 PCPDMPICHLPR0 pPicHlpR0; 133 /** Pointer to the PIC GC helpers. */ 134 PCPDMPICHLPGC pPicHlpGC; 135 #if HC_ARCH_BITS == 32 136 uint32_t Alignmnet1; 137 #endif 138 /** Pointer to the device instance - GC Ptr. */ 139 RCPTRTYPE(PPDMDEVINS) pDevInsGC; 140 /** Pointer to the device instance - GC Ptr. */ 141 R3R0PTRTYPE(PPDMDEVINS) pDevInsHC; 137 /** Pointer to the device instance - RC Ptr. */ 138 PPDMDEVINSRC pDevInsRC; 139 /** Pointer to the PIC RC helpers. */ 140 PCPDMPICHLPRC pPicHlpRC; 142 141 #ifdef VBOX_WITH_STATISTICS 143 142 STAMCOUNTER StatSetIrqGC; … … 154 153 static inline void DumpPICState(PicState *s, const char *szFn) 155 154 { 156 PDEVPIC pData = PDMINS2DATA( CTXSUFF(s->pDevIns), PDEVPIC);155 PDEVPIC pData = PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC); 157 156 158 157 Log2(("%s: pic%d: elcr=%x last_irr=%x irr=%x imr=%x isr=%x irq_base=%x\n", … … 213 212 static int pic_get_irq(PicState *s) 214 213 { 215 PicState *pics = &(PDMINS2DATA( CTXSUFF(s->pDevIns), PDEVPIC))->aPics[0];214 PicState *pics = &(PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC))->aPics[0]; 216 215 int mask, cur_priority, priority; 217 216 Log(("pic_get_irq%d: mask=%x\n", (s == pics) ? 0 : 1, s->irr & ~s->imr)); … … 272 271 Log(("pic: cpu_interrupt\n")); 273 272 #endif 274 pData->CTX ALLSUFF(pPicHlp)->pfnSetInterruptFF(pData->CTXSUFF(pDevIns));273 pData->CTX_SUFF(pPicHlp)->pfnSetInterruptFF(pData->CTX_SUFF(pDevIns)); 275 274 } 276 275 else … … 281 280 282 281 /* if this was the only pending irq, then we must clear the interrupt ff flag */ 283 pData->CTX ALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));282 pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns)); 284 283 285 284 /** @note Is this correct? */ … … 295 294 296 295 /* we must clear the interrupt ff flag */ 297 pData->CTX ALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));296 pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns)); 298 297 } 299 298 return VINF_SUCCESS; … … 339 338 340 339 Log(("pic_update_imr: clear pending interrupt %d\n", intno)); 341 pData->CTX ALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));340 pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns)); 342 341 } 343 342 } … … 354 353 { 355 354 PDEVPIC pData = PDMINS2DATA(pDevIns, PDEVPIC); 356 Assert(pData->CTX SUFF(pDevIns) == pDevIns);357 Assert(pData->aPics[0].CTX SUFF(pDevIns) == pDevIns);358 Assert(pData->aPics[1].CTX SUFF(pDevIns) == pDevIns);355 Assert(pData->CTX_SUFF(pDevIns) == pDevIns); 356 Assert(pData->aPics[0].CTX_SUFF(pDevIns) == pDevIns); 357 Assert(pData->aPics[1].CTX_SUFF(pDevIns) == pDevIns); 359 358 AssertMsg(iIrq < 16, ("iIrq=%d\n", iIrq)); 360 359 … … 449 448 static void pic_reset(PicState *s) 450 449 { 451 R3R0PTRTYPE(PPDMDEVINS) pDevInsHC = s->pDevInsHC;452 RCPTRTYPE(PPDMDEVINS) pDevInsGC = s->pDevInsGC;453 int tmp, tmp2;454 455 tmp = s->elcr_mask;456 tmp2 = s->elcr; 450 PPDMDEVINSR3 pDevInsR3 = s->pDevInsR3; 451 PPDMDEVINSR0 pDevInsR0 = s->pDevInsR0; 452 PPDMDEVINSRC pDevInsRC = s->pDevInsRC; 453 int elcr_mask = s->elcr_mask; 454 int elcr = s->elcr; 455 457 456 memset(s, 0, sizeof(PicState)); 458 s->elcr_mask = tmp; 459 s->elcr = tmp2; 460 s->pDevInsHC = pDevInsHC; 461 s->pDevInsGC = pDevInsGC; 457 458 s->elcr = elcr; 459 s->elcr_mask = elcr_mask; 460 s->pDevInsRC = pDevInsRC; 461 s->pDevInsR0 = pDevInsR0; 462 s->pDevInsR3 = pDevInsR3; 462 463 } 463 464 … … 466 467 { 467 468 PicState *s = (PicState*)opaque; 468 PDEVPIC pData = PDMINS2DATA( CTXSUFF(s->pDevIns), PDEVPIC);469 PDEVPIC pData = PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC); 469 470 int rc = VINF_SUCCESS; 470 471 int priority, cmd, irq; … … 477 478 pic_reset(s); 478 479 /* deassert a pending interrupt */ 479 pData->CTX ALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));480 pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns)); 480 481 481 482 s->init_state = 1; … … 586 587 static uint32_t pic_poll_read (PicState *s, uint32_t addr1) 587 588 { 588 PDEVPIC pData = PDMINS2DATA( CTXSUFF(s->pDevIns), PDEVPIC);589 PDEVPIC pData = PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC); 589 590 PicState *pics = &pData->aPics[0]; 590 591 int ret; … … 902 903 unsigned i; 903 904 904 pData->pDevIns GC = PDMDEVINS_2_GCPTR(pDevIns);905 pData->pPicHlp GC = pData->pPicHlpR3->pfnGetGCHelpers(pDevIns);906 for (i = 0; i < ELEMENTS(pData->aPics); i++)907 pData->aPics[i].pDevIns GC = PDMDEVINS_2_GCPTR(pDevIns);905 pData->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns); 906 pData->pPicHlpRC = pData->pPicHlpR3->pfnGetRCHelpers(pDevIns); 907 for (i = 0; i < RT_ELEMENTS(pData->aPics); i++) 908 pData->aPics[i].pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns); 908 909 } 909 910 … … 947 948 */ 948 949 Assert(ELEMENTS(pData->aPics) == 2); 949 pData->pDevInsHC = pDevIns; 950 pData->pDevInsGC = PDMDEVINS_2_GCPTR(pDevIns); 950 pData->pDevInsR3 = pDevIns; 951 pData->pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns); 952 pData->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns); 951 953 pData->aPics[0].elcr_mask = 0xf8; 952 954 pData->aPics[1].elcr_mask = 0xde; 953 pData->aPics[0].pDevInsHC = pDevIns; 954 pData->aPics[1].pDevInsHC = pDevIns; 955 pData->aPics[0].pDevInsGC = PDMDEVINS_2_GCPTR(pDevIns); 956 pData->aPics[1].pDevInsGC = PDMDEVINS_2_GCPTR(pDevIns); 955 pData->aPics[0].pDevInsR3 = pDevIns; 956 pData->aPics[1].pDevInsR3 = pDevIns; 957 pData->aPics[0].pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns); 958 pData->aPics[1].pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns); 959 pData->aPics[0].pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns); 960 pData->aPics[1].pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns); 957 961 958 962 /* 959 * Register PIC, I/O ports and save state.963 * Register us as the PIC with PDM. 960 964 */ 961 965 PicReg.u32Version = PDM_PICREG_VERSION; 962 PicReg.pfnSetIrqHC = picSetIrq; 963 PicReg.pfnGetInterruptHC = picGetInterrupt; 966 PicReg.pfnSetIrqR3 = picSetIrq; 967 PicReg.pfnGetInterruptR3 = picGetInterrupt; 968 964 969 if (fGCEnabled) 965 970 { 966 PicReg.pszSetIrq GC = "picSetIrq";967 PicReg.pszGetInterrupt GC = "picGetInterrupt";971 PicReg.pszSetIrqRC = "picSetIrq"; 972 PicReg.pszGetInterruptRC = "picGetInterrupt"; 968 973 } 969 974 else 970 975 { 971 PicReg.pszSetIrq GC = NULL;972 PicReg.pszGetInterrupt GC = NULL;976 PicReg.pszSetIrqRC = NULL; 977 PicReg.pszGetInterruptRC = NULL; 973 978 } 974 979 … … 986 991 Assert(pDevIns->pDevHlp->pfnPICRegister); 987 992 rc = pDevIns->pDevHlp->pfnPICRegister(pDevIns, &PicReg, &pData->pPicHlpR3); 988 if (VBOX_FAILURE(rc)) 989 { 990 AssertMsgFailed(("PICRegister -> %Vrc\n", rc)); 991 return rc; 992 } 993 AssertLogRelMsgRCReturn(rc, ("PICRegister -> %Vrc\n", rc), rc); 993 994 if (fGCEnabled) 994 pData->pPicHlpGC = pData->pPicHlpR3->pfnGetGCHelpers(pDevIns); 995 pData->pPicHlpRC = pData->pPicHlpR3->pfnGetRCHelpers(pDevIns); 996 if (fR0Enabled) 997 pData->pPicHlpR0 = pData->pPicHlpR3->pfnGetR0Helpers(pDevIns); 998 999 1000 /* 1001 * Register I/O ports and save state. 1002 */ 995 1003 rc = PDMDevHlpIOPortRegister(pDevIns, 0x20, 2, (void *)0, picIOPortWrite, picIOPortRead, NULL, NULL, "i8259 PIC #0"); 996 1004 if (VBOX_FAILURE(rc)) … … 1010 1018 if (fR0Enabled) 1011 1019 { 1012 pData->pPicHlpR0 = pData->pPicHlpR3->pfnGetR0Helpers(pDevIns);1013 1014 1020 rc = PDMDevHlpIOPortRegisterR0(pDevIns, 0x20, 2, 0, "picIOPortWrite", "picIOPortRead", NULL, NULL, "i8259 PIC #0"); 1015 1021 if (VBOX_FAILURE(rc)) -
trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp
r11250 r11261 447 447 GEN_CHECK_OFF(PicState, elcr); 448 448 GEN_CHECK_OFF(PicState, elcr_mask); 449 GEN_CHECK_OFF(PicState, pDevInsHC); 450 GEN_CHECK_OFF(PicState, pDevInsGC); 449 GEN_CHECK_OFF(PicState, pDevInsR3); 450 GEN_CHECK_OFF(PicState, pDevInsR0); 451 GEN_CHECK_OFF(PicState, pDevInsRC); 451 452 452 453 GEN_CHECK_SIZE(DEVPIC); 453 454 GEN_CHECK_OFF(DEVPIC, aPics); 454 455 GEN_CHECK_OFF(DEVPIC, aPics[1]); 455 GEN_CHECK_OFF(DEVPIC, pDevInsHC); 456 GEN_CHECK_OFF(DEVPIC, pDevInsGC); 456 GEN_CHECK_OFF(DEVPIC, pDevInsR3); 457 GEN_CHECK_OFF(DEVPIC, pDevInsR0); 458 GEN_CHECK_OFF(DEVPIC, pDevInsRC); 457 459 GEN_CHECK_OFF(DEVPIC, pPicHlpR3); 458 GEN_CHECK_OFF(DEVPIC, pPicHlpGC);459 460 GEN_CHECK_OFF(DEVPIC, pPicHlpR0); 461 GEN_CHECK_OFF(DEVPIC, pPicHlpRC); 460 462 #ifdef VBOX_WITH_STATISTICS 461 463 GEN_CHECK_OFF(DEVPIC, StatSetIrqGC); -
trunk/src/VBox/VMM/PDM.cpp
r11224 r11261 265 265 * The registered PIC. 266 266 */ 267 if (pVM->pdm.s.Pic.pDevIns GC)268 { 269 pVM->pdm.s.Pic.pDevIns GC += offDelta;270 pVM->pdm.s.Pic.pfnSetIrq GC += offDelta;271 pVM->pdm.s.Pic.pfnGetInterrupt GC += offDelta;267 if (pVM->pdm.s.Pic.pDevInsRC) 268 { 269 pVM->pdm.s.Pic.pDevInsRC += offDelta; 270 pVM->pdm.s.Pic.pfnSetIrqRC += offDelta; 271 pVM->pdm.s.Pic.pfnGetInterruptRC += offDelta; 272 272 } 273 273 -
trunk/src/VBox/VMM/PDMDevice.cpp
r11224 r11261 222 222 static DECLCALLBACK(int) pdmR3PicHlp_Lock(PPDMDEVINS pDevIns, int rc); 223 223 static DECLCALLBACK(void) pdmR3PicHlp_Unlock(PPDMDEVINS pDevIns); 224 static DECLCALLBACK(PCPDMPICHLP GC) pdmR3PicHlp_GetGCHelpers(PPDMDEVINS pDevIns);224 static DECLCALLBACK(PCPDMPICHLPRC) pdmR3PicHlp_GetRCHelpers(PPDMDEVINS pDevIns); 225 225 static DECLCALLBACK(PCPDMPICHLPR0) pdmR3PicHlp_GetR0Helpers(PPDMDEVINS pDevIns); 226 226 /** @} */ … … 488 488 pdmR3PicHlp_Lock, 489 489 pdmR3PicHlp_Unlock, 490 pdmR3PicHlp_Get GCHelpers,490 pdmR3PicHlp_GetRCHelpers, 491 491 pdmR3PicHlp_GetR0Helpers, 492 492 PDM_PICHLPR3_VERSION /* the end */ … … 2489 2489 PDMDEV_ASSERT_DEVINS(pDevIns); 2490 2490 VM_ASSERT_EMT(pDevIns->Internal.s.pVMHC); 2491 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: pPicReg=%p:{.u32Version=%#x, .pfnSetIrqHC=%p, .pfnGetInterruptHC=%p, .pszGetIrqGC=%p:{%s}, .pszGetInterruptGC=%p:{%s}} ppPicHlpR3=%p\n", 2492 pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pPicReg, pPicReg->u32Version, pPicReg->pfnSetIrqHC, pPicReg->pfnGetInterruptHC, 2493 pPicReg->pszSetIrqGC, pPicReg->pszSetIrqGC, pPicReg->pszGetInterruptGC, pPicReg->pszGetInterruptGC, ppPicHlpR3)); 2491 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: pPicReg=%p:{.u32Version=%#x, .pfnSetIrqR3=%p, .pfnGetInterruptR3=%p, .pszGetIrqRC=%p:{%s}, .pszGetInterruptRC=%p:{%s}, .pszGetIrqR0=%p:{%s}, .pszGetInterruptR0=%p:{%s} } ppPicHlpR3=%p\n", 2492 pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pPicReg, pPicReg->u32Version, pPicReg->pfnSetIrqR3, pPicReg->pfnGetInterruptR3, 2493 pPicReg->pszSetIrqRC, pPicReg->pszSetIrqRC, pPicReg->pszGetInterruptRC, pPicReg->pszGetInterruptRC, 2494 pPicReg->pszSetIrqR0, pPicReg->pszSetIrqR0, pPicReg->pszGetInterruptR0, pPicReg->pszGetInterruptR0, 2495 ppPicHlpR3)); 2494 2496 2495 2497 /* … … 2502 2504 return VERR_INVALID_PARAMETER; 2503 2505 } 2504 if ( !pPicReg->pfnSetIrq HC2505 || !pPicReg->pfnGetInterrupt HC)2506 { 2507 Assert(pPicReg->pfnSetIrq HC);2508 Assert(pPicReg->pfnGetInterrupt HC);2509 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Vrc ( HCcallbacks)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER));2506 if ( !pPicReg->pfnSetIrqR3 2507 || !pPicReg->pfnGetInterruptR3) 2508 { 2509 Assert(pPicReg->pfnSetIrqR3); 2510 Assert(pPicReg->pfnGetInterruptR3); 2511 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Vrc (R3 callbacks)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER)); 2510 2512 return VERR_INVALID_PARAMETER; 2511 2513 } 2512 if ( ( pPicReg->pszSetIrq GC2513 || pPicReg->pszGetInterrupt GC)2514 && ( !VALID_PTR(pPicReg->pszSetIrq GC)2515 || !VALID_PTR(pPicReg->pszGetInterrupt GC))2514 if ( ( pPicReg->pszSetIrqRC 2515 || pPicReg->pszGetInterruptRC) 2516 && ( !VALID_PTR(pPicReg->pszSetIrqRC) 2517 || !VALID_PTR(pPicReg->pszGetInterruptRC)) 2516 2518 ) 2517 2519 { 2518 Assert(VALID_PTR(pPicReg->pszSetIrq GC));2519 Assert(VALID_PTR(pPicReg->pszGetInterrupt GC));2520 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Vrc ( GC callbacks)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER));2520 Assert(VALID_PTR(pPicReg->pszSetIrqRC)); 2521 Assert(VALID_PTR(pPicReg->pszGetInterruptRC)); 2522 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Vrc (RC callbacks)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER)); 2521 2523 return VERR_INVALID_PARAMETER; 2522 2524 } 2523 if ( pPicReg->pszSetIrq GC2525 if ( pPicReg->pszSetIrqRC 2524 2526 && !(pDevIns->pDevReg->fFlags & PDM_DEVREG_FLAGS_GC)) 2525 2527 { 2526 2528 Assert(pDevIns->pDevReg->fFlags & PDM_DEVREG_FLAGS_GC); 2527 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Vrc ( GC flag)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER));2529 LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Vrc (RC flag)\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, VERR_INVALID_PARAMETER)); 2528 2530 return VERR_INVALID_PARAMETER; 2529 2531 } … … 2554 2556 2555 2557 /* 2556 * GC stuff.2557 */ 2558 if (pPicReg->pszSetIrq GC)2559 { 2560 int rc = PDMR3GetSymbolGCLazy(pVM, pDevIns->pDevReg->szGCMod, pPicReg->pszSetIrq GC, &pVM->pdm.s.Pic.pfnSetIrqGC);2561 AssertMsgRC(rc, ("%s::%s rc=%Vrc\n", pDevIns->pDevReg->szGCMod, pPicReg->pszSetIrq GC, rc));2558 * RC stuff. 2559 */ 2560 if (pPicReg->pszSetIrqRC) 2561 { 2562 int rc = PDMR3GetSymbolGCLazy(pVM, pDevIns->pDevReg->szGCMod, pPicReg->pszSetIrqRC, &pVM->pdm.s.Pic.pfnSetIrqRC); 2563 AssertMsgRC(rc, ("%s::%s rc=%Vrc\n", pDevIns->pDevReg->szGCMod, pPicReg->pszSetIrqRC, rc)); 2562 2564 if (VBOX_SUCCESS(rc)) 2563 2565 { 2564 rc = PDMR3GetSymbolGCLazy(pVM, pDevIns->pDevReg->szGCMod, pPicReg->pszGetInterrupt GC, &pVM->pdm.s.Pic.pfnGetInterruptGC);2565 AssertMsgRC(rc, ("%s::%s rc=%Vrc\n", pDevIns->pDevReg->szGCMod, pPicReg->pszGetInterrupt GC, rc));2566 rc = PDMR3GetSymbolGCLazy(pVM, pDevIns->pDevReg->szGCMod, pPicReg->pszGetInterruptRC, &pVM->pdm.s.Pic.pfnGetInterruptRC); 2567 AssertMsgRC(rc, ("%s::%s rc=%Vrc\n", pDevIns->pDevReg->szGCMod, pPicReg->pszGetInterruptRC, rc)); 2566 2568 } 2567 2569 if (VBOX_FAILURE(rc)) … … 2570 2572 return rc; 2571 2573 } 2572 pVM->pdm.s.Pic.pDevIns GC = PDMDEVINS_2_GCPTR(pDevIns);2574 pVM->pdm.s.Pic.pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns); 2573 2575 } 2574 2576 else 2575 2577 { 2576 pVM->pdm.s.Pic.pDevIns GC = 0;2577 pVM->pdm.s.Pic.pfnSetIrq GC = 0;2578 pVM->pdm.s.Pic.pfnGetInterrupt GC = 0;2578 pVM->pdm.s.Pic.pDevInsRC = 0; 2579 pVM->pdm.s.Pic.pfnSetIrqRC = 0; 2580 pVM->pdm.s.Pic.pfnGetInterruptRC = 0; 2579 2581 } 2580 2582 … … 2607 2609 2608 2610 /* 2609 * HCstuff.2611 * R3 stuff. 2610 2612 */ 2611 2613 pVM->pdm.s.Pic.pDevInsR3 = pDevIns; 2612 pVM->pdm.s.Pic.pfnSetIrqR3 = pPicReg->pfnSetIrq HC;2613 pVM->pdm.s.Pic.pfnGetInterruptR3 = pPicReg->pfnGetInterrupt HC;2614 pVM->pdm.s.Pic.pfnSetIrqR3 = pPicReg->pfnSetIrqR3; 2615 pVM->pdm.s.Pic.pfnGetInterruptR3 = pPicReg->pfnGetInterruptR3; 2614 2616 Log(("PDM: Registered PIC device '%s'/%d pDevIns=%p\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pDevIns)); 2615 2617 … … 4038 4040 4039 4041 4040 /** @copydoc PDMPICHLPR3::pfnGet GCHelpers */4041 static DECLCALLBACK(PCPDMPICHLP GC) pdmR3PicHlp_GetGCHelpers(PPDMDEVINS pDevIns)4042 /** @copydoc PDMPICHLPR3::pfnGetRCHelpers */ 4043 static DECLCALLBACK(PCPDMPICHLPRC) pdmR3PicHlp_GetRCHelpers(PPDMDEVINS pDevIns) 4042 4044 { 4043 4045 PDMDEV_ASSERT_DEVINS(pDevIns); 4044 4046 VM_ASSERT_EMT(pDevIns->Internal.s.pVMHC); 4045 RT GCPTR32 pGCHelpers = 0;4046 int rc = PDMR3GetSymbolGC(pDevIns->Internal.s.pVMHC, NULL, "g_pdm GCPicHlp", &pGCHelpers);4047 RTRCPTR pRCHelpers = 0; 4048 int rc = PDMR3GetSymbolGC(pDevIns->Internal.s.pVMHC, NULL, "g_pdmRCPicHlp", &pRCHelpers); 4047 4049 AssertReleaseRC(rc); 4048 AssertRelease(p GCHelpers);4049 LogFlow(("pdmR3PicHlp_Get GCHelpers: caller='%s'/%d: returns %VGv\n",4050 pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, p GCHelpers));4051 return p GCHelpers;4050 AssertRelease(pRCHelpers); 4051 LogFlow(("pdmR3PicHlp_GetRCHelpers: caller='%s'/%d: returns %VGv\n", 4052 pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pRCHelpers)); 4053 return pRCHelpers; 4052 4054 } 4053 4055 -
trunk/src/VBox/VMM/PDMInternal.h
r11224 r11261 368 368 DECLR0CALLBACKMEMBER(int, pfnGetInterruptR0,(PPDMDEVINS pDevIns)); 369 369 370 /** Pointer to the PIC device instance - GC. */371 RCPTRTYPE(PPDMDEVINS) pDevIns GC;370 /** Pointer to the PIC device instance - RC. */ 371 RCPTRTYPE(PPDMDEVINS) pDevInsRC; 372 372 /** @copydoc PDMPICREG::pfnSetIrqHC */ 373 DECLRCCALLBACKMEMBER(void, pfnSetIrq GC,(PPDMDEVINS pDevIns, int iIrq, int iLevel));373 DECLRCCALLBACKMEMBER(void, pfnSetIrqRC,(PPDMDEVINS pDevIns, int iIrq, int iLevel)); 374 374 /** @copydoc PDMPICREG::pfnGetInterruptHC */ 375 DECLRCCALLBACKMEMBER(int, pfnGetInterrupt GC,(PPDMDEVINS pDevIns));375 DECLRCCALLBACKMEMBER(int, pfnGetInterruptRC,(PPDMDEVINS pDevIns)); 376 376 /** Alignment padding. */ 377 RTRCPTR GCPtrPadding;377 RTRCPTR RCPtrPadding; 378 378 } PDMPIC; 379 379 … … 455 455 DECLR0CALLBACKMEMBER(void, pfnSetIrqR0,(PPDMDEVINS pDevIns, int iIrq, int iLevel)); 456 456 457 /** Pointer to the APIC device instance - GC Ptr. */458 PPDMDEVINS GC pDevInsRC;457 /** Pointer to the APIC device instance - RC Ptr. */ 458 PPDMDEVINSRC pDevInsRC; 459 459 /** @copydoc PDMIOAPICREG::pfnSetIrqR3 */ 460 460 DECLRCCALLBACKMEMBER(void, pfnSetIrqRC,(PPDMDEVINS pDevIns, int iIrq, int iLevel)); … … 496 496 497 497 /** Pointer to PCI Bus device instance. */ 498 PPDMDEVINS GC pDevInsRC;498 PPDMDEVINSRC pDevInsRC; 499 499 /** @copydoc PDMPCIBUSREG::pfnSetIrqR3 */ 500 500 DECLRCCALLBACKMEMBER(void, pfnSetIrqRC,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel)); -
trunk/src/VBox/VMM/VMMAll/PDMAll.cpp
r11219 r11261 71 71 { 72 72 VM_FF_CLEAR(pVM, VM_FF_INTERRUPT_PIC); 73 Assert(pVM->pdm.s.Pic.CTX ALLSUFF(pDevIns));74 Assert(pVM->pdm.s.Pic.CTX ALLSUFF(pfnGetInterrupt));75 int i = pVM->pdm.s.Pic.CTX ALLSUFF(pfnGetInterrupt)(pVM->pdm.s.Pic.CTXALLSUFF(pDevIns));73 Assert(pVM->pdm.s.Pic.CTX_SUFF(pDevIns)); 74 Assert(pVM->pdm.s.Pic.CTX_SUFF(pfnGetInterrupt)); 75 int i = pVM->pdm.s.Pic.CTX_SUFF(pfnGetInterrupt)(pVM->pdm.s.Pic.CTX_SUFF(pDevIns)); 76 76 AssertMsg(i <= 255 && i >= 0, ("i=%d\n", i)); 77 77 if (i >= 0) … … 103 103 104 104 int rc = VERR_PDM_NO_PIC_INSTANCE; 105 if (pVM->pdm.s.Pic.CTX ALLSUFF(pDevIns))106 { 107 Assert(pVM->pdm.s.Pic.CTX ALLSUFF(pfnSetIrq));108 pVM->pdm.s.Pic.CTX ALLSUFF(pfnSetIrq)(pVM->pdm.s.Pic.CTXALLSUFF(pDevIns), u8Irq, u8Level);105 if (pVM->pdm.s.Pic.CTX_SUFF(pDevIns)) 106 { 107 Assert(pVM->pdm.s.Pic.CTX_SUFF(pfnSetIrq)); 108 pVM->pdm.s.Pic.CTX_SUFF(pfnSetIrq)(pVM->pdm.s.Pic.CTX_SUFF(pDevIns), u8Irq, u8Level); 109 109 rc = VINF_SUCCESS; 110 110 } -
trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp
r11224 r11261 60 60 __BEGIN_DECLS 61 61 extern DECLEXPORT(const PDMDEVHLPGC) g_pdmGCDevHlp; 62 extern DECLEXPORT(const PDMPICHLP GC) g_pdmGCPicHlp;62 extern DECLEXPORT(const PDMPICHLPRC) g_pdmRCPicHlp; 63 63 extern DECLEXPORT(const PDMAPICHLPRC) g_pdmRCApicHlp; 64 64 extern DECLEXPORT(const PDMIOAPICHLPRC) g_pdmRCIoApicHlp; … … 89 89 * @{ 90 90 */ 91 static DECLCALLBACK(void) pdm GCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns);92 static DECLCALLBACK(void) pdm GCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns);93 static DECLCALLBACK(int) pdm GCPicHlp_Lock(PPDMDEVINS pDevIns, int rc);94 static DECLCALLBACK(void) pdm GCPicHlp_Unlock(PPDMDEVINS pDevIns);91 static DECLCALLBACK(void) pdmRCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns); 92 static DECLCALLBACK(void) pdmRCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns); 93 static DECLCALLBACK(int) pdmRCPicHlp_Lock(PPDMDEVINS pDevIns, int rc); 94 static DECLCALLBACK(void) pdmRCPicHlp_Unlock(PPDMDEVINS pDevIns); 95 95 /** @} */ 96 96 … … 152 152 153 153 /** 154 * The GuestContext PIC Helper Callbacks.155 */ 156 extern DECLEXPORT(const PDMPICHLP GC) g_pdmGCPicHlp =157 { 158 PDM_PICHLP GC_VERSION,159 pdm GCPicHlp_SetInterruptFF,160 pdm GCPicHlp_ClearInterruptFF,161 pdm GCPicHlp_Lock,162 pdm GCPicHlp_Unlock,163 PDM_PICHLP GC_VERSION154 * The Raw-Mode Context PIC Helper Callbacks. 155 */ 156 extern DECLEXPORT(const PDMPICHLPRC) g_pdmRCPicHlp = 157 { 158 PDM_PICHLPRC_VERSION, 159 pdmRCPicHlp_SetInterruptFF, 160 pdmRCPicHlp_ClearInterruptFF, 161 pdmRCPicHlp_Lock, 162 pdmRCPicHlp_Unlock, 163 PDM_PICHLPRC_VERSION 164 164 }; 165 165 … … 353 353 354 354 /** @copydoc PDMPICHLPGC::pfnSetInterruptFF */ 355 static DECLCALLBACK(void) pdm GCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns)356 { 357 PDMDEV_ASSERT_DEVINS(pDevIns); 358 LogFlow(("pdm GCPicHlp_SetInterruptFF: caller=%p/%d: VM_FF_INTERRUPT_PIC %d -> 1\n",355 static DECLCALLBACK(void) pdmRCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns) 356 { 357 PDMDEV_ASSERT_DEVINS(pDevIns); 358 LogFlow(("pdmRCPicHlp_SetInterruptFF: caller=%p/%d: VM_FF_INTERRUPT_PIC %d -> 1\n", 359 359 pDevIns, pDevIns->iInstance, VM_FF_ISSET(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC))); 360 360 VM_FF_SET(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC); … … 363 363 364 364 /** @copydoc PDMPICHLPGC::pfnClearInterruptFF */ 365 static DECLCALLBACK(void) pdm GCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns)366 { 367 PDMDEV_ASSERT_DEVINS(pDevIns); 368 LogFlow(("pdm GCPicHlp_ClearInterruptFF: caller=%p/%d: VM_FF_INTERRUPT_PIC %d -> 0\n",365 static DECLCALLBACK(void) pdmRCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns) 366 { 367 PDMDEV_ASSERT_DEVINS(pDevIns); 368 LogFlow(("pdmRCPicHlp_ClearInterruptFF: caller=%p/%d: VM_FF_INTERRUPT_PIC %d -> 0\n", 369 369 pDevIns, pDevIns->iInstance, VM_FF_ISSET(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC))); 370 370 VM_FF_CLEAR(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC); … … 373 373 374 374 /** @copydoc PDMPICHLPGC::pfnLock */ 375 static DECLCALLBACK(int) pdm GCPicHlp_Lock(PPDMDEVINS pDevIns, int rc)375 static DECLCALLBACK(int) pdmRCPicHlp_Lock(PPDMDEVINS pDevIns, int rc) 376 376 { 377 377 PDMDEV_ASSERT_DEVINS(pDevIns); … … 381 381 382 382 /** @copydoc PDMPICHLPGC::pfnUnlock */ 383 static DECLCALLBACK(void) pdm GCPicHlp_Unlock(PPDMDEVINS pDevIns)383 static DECLCALLBACK(void) pdmRCPicHlp_Unlock(PPDMDEVINS pDevIns) 384 384 { 385 385 PDMDEV_ASSERT_DEVINS(pDevIns); … … 518 518 if ( ( pVM->pdm.s.IoApic.pDevInsRC 519 519 || !pVM->pdm.s.IoApic.pDevInsR3) 520 && ( pVM->pdm.s.Pic.pDevIns GC520 && ( pVM->pdm.s.Pic.pDevInsRC 521 521 || !pVM->pdm.s.Pic.pDevInsR3)) 522 522 { 523 523 pdmLock(pVM); 524 if (pVM->pdm.s.Pic.pDevIns GC)525 pVM->pdm.s.Pic.pfnSetIrq GC(pVM->pdm.s.Pic.pDevInsGC, iIrq, iLevel);524 if (pVM->pdm.s.Pic.pDevInsRC) 525 pVM->pdm.s.Pic.pfnSetIrqRC(pVM->pdm.s.Pic.pDevInsRC, iIrq, iLevel); 526 526 if (pVM->pdm.s.IoApic.pDevInsRC) 527 527 pVM->pdm.s.IoApic.pfnSetIrqRC(pVM->pdm.s.IoApic.pDevInsRC, iIrq, iLevel); -
trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp
r11224 r11261 257 257 GEN_CHECK_OFF(PDM, Pic.pfnSetIrqR0); 258 258 GEN_CHECK_OFF(PDM, Pic.pfnGetInterruptR0); 259 GEN_CHECK_OFF(PDM, Pic.pDevIns GC);260 GEN_CHECK_OFF(PDM, Pic.pfnSetIrq GC);261 GEN_CHECK_OFF(PDM, Pic.pfnGetInterrupt GC);259 GEN_CHECK_OFF(PDM, Pic.pDevInsRC); 260 GEN_CHECK_OFF(PDM, Pic.pfnSetIrqRC); 261 GEN_CHECK_OFF(PDM, Pic.pfnGetInterruptRC); 262 262 GEN_CHECK_OFF(PDM, Apic); 263 263 GEN_CHECK_OFF(PDM, Apic.pDevInsR3);
Note:
See TracChangeset
for help on using the changeset viewer.