VirtualBox

Changeset 11261 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 8, 2008 3:46:17 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
34341
Message:

#1865: DevPIC.

Location:
trunk/src/VBox
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevPIC.cpp

    r10202 r11261  
    11/* $Id$ */
    22/** @file
    3  * Intel 8259 Programmable Interrupt Controller (PIC) Device.
     3 * DevPIC - Intel 8259 Programmable Interrupt Controller (PIC) Device.
    44 */
    55
     
    2828#include <iprt/assert.h>
    2929
    30 #include "vl_vbox.h"
     30#include "../vl_vbox.h"
    3131
    3232
     
    4040#define PIC_LOCK(pThis, rc) \
    4141    do { \
    42         int rc2 = (pThis)->CTXALLSUFF(pPicHlp)->pfnLock((pThis)->CTXSUFF(pDevIns), rc); \
     42        int rc2 = (pThis)->CTX_SUFF(pPicHlp)->pfnLock((pThis)->CTX_SUFF(pDevIns), rc); \
    4343        if (rc2 != VINF_SUCCESS) \
    4444            return rc2; \
    4545    } while (0)
    4646#define PIC_UNLOCK(pThis) \
    47     (pThis)->CTXALLSUFF(pPicHlp)->pfnUnlock((pThis)->CTXSUFF(pDevIns))
     47    (pThis)->CTX_SUFF(pPicHlp)->pfnUnlock((pThis)->CTX_SUFF(pDevIns))
    4848
    4949
     
    111111    uint8_t elcr; /* PIIX edge/trigger selection*/
    112112    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. */
    120120} PicState;
    121121
     
    127127    /** The two interrupt controllers. */
    128128    PicState                aPics[2];
     129    /** Pointer to the device instance - R3 Ptr. */
     130    PPDMDEVINSR3            pDevInsR3;
    129131    /** Pointer to the PIC R3 helpers. */
    130132    PCPDMPICHLPR3           pPicHlpR3;
     133    /** Pointer to the device instance - R0 Ptr. */
     134    PPDMDEVINSR0            pDevInsR0;
    131135    /** Pointer to the PIC R0 helpers. */
    132136    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;
    142141#ifdef VBOX_WITH_STATISTICS
    143142    STAMCOUNTER             StatSetIrqGC;
     
    154153static inline void DumpPICState(PicState *s, const char *szFn)
    155154{
    156     PDEVPIC pData = PDMINS2DATA(CTXSUFF(s->pDevIns), PDEVPIC);
     155    PDEVPIC pData = PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC);
    157156
    158157    Log2(("%s: pic%d: elcr=%x last_irr=%x irr=%x imr=%x isr=%x irq_base=%x\n",
     
    213212static int pic_get_irq(PicState *s)
    214213{
    215     PicState *pics = &(PDMINS2DATA(CTXSUFF(s->pDevIns), PDEVPIC))->aPics[0];
     214    PicState *pics = &(PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC))->aPics[0];
    216215    int mask, cur_priority, priority;
    217216    Log(("pic_get_irq%d: mask=%x\n", (s == pics) ? 0 : 1, s->irr & ~s->imr));
     
    272271            Log(("pic: cpu_interrupt\n"));
    273272#endif
    274             pData->CTXALLSUFF(pPicHlp)->pfnSetInterruptFF(pData->CTXSUFF(pDevIns));
     273            pData->CTX_SUFF(pPicHlp)->pfnSetInterruptFF(pData->CTX_SUFF(pDevIns));
    275274        }
    276275        else
     
    281280
    282281            /* if this was the only pending irq, then we must clear the interrupt ff flag */
    283             pData->CTXALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));
     282            pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns));
    284283
    285284            /** @note Is this correct? */
     
    295294
    296295        /* we must clear the interrupt ff flag */
    297         pData->CTXALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));
     296        pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns));
    298297    }
    299298    return VINF_SUCCESS;
     
    339338
    340339        Log(("pic_update_imr: clear pending interrupt %d\n", intno));
    341         pData->CTXALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));
     340        pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns));
    342341    }
    343342}
     
    354353{
    355354    PDEVPIC     pData = PDMINS2DATA(pDevIns, PDEVPIC);
    356     Assert(pData->CTXSUFF(pDevIns) == pDevIns);
    357     Assert(pData->aPics[0].CTXSUFF(pDevIns) == pDevIns);
    358     Assert(pData->aPics[1].CTXSUFF(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);
    359358    AssertMsg(iIrq < 16, ("iIrq=%d\n", iIrq));
    360359
     
    449448static void pic_reset(PicState *s)
    450449{
    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
    457456    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;
    462463}
    463464
     
    466467{
    467468    PicState *s = (PicState*)opaque;
    468     PDEVPIC     pData = PDMINS2DATA(CTXSUFF(s->pDevIns), PDEVPIC);
     469    PDEVPIC     pData = PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC);
    469470    int         rc = VINF_SUCCESS;
    470471    int priority, cmd, irq;
     
    477478            pic_reset(s);
    478479            /* deassert a pending interrupt */
    479             pData->CTXALLSUFF(pPicHlp)->pfnClearInterruptFF(pData->CTXSUFF(pDevIns));
     480            pData->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pData->CTX_SUFF(pDevIns));
    480481
    481482            s->init_state = 1;
     
    586587static uint32_t pic_poll_read (PicState *s, uint32_t addr1)
    587588{
    588     PDEVPIC     pData = PDMINS2DATA(CTXSUFF(s->pDevIns), PDEVPIC);
     589    PDEVPIC     pData = PDMINS2DATA(s->CTX_SUFF(pDevIns), PDEVPIC);
    589590    PicState   *pics = &pData->aPics[0];
    590591    int ret;
     
    902903    unsigned        i;
    903904
    904     pData->pDevInsGC = PDMDEVINS_2_GCPTR(pDevIns);
    905     pData->pPicHlpGC = pData->pPicHlpR3->pfnGetGCHelpers(pDevIns);
    906     for (i = 0; i < ELEMENTS(pData->aPics); i++)
    907         pData->aPics[i].pDevInsGC = 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);
    908909}
    909910
     
    947948     */
    948949    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);
    951953    pData->aPics[0].elcr_mask = 0xf8;
    952954    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);
    957961
    958962    /*
    959      * Register PIC, I/O ports and save state.
     963     * Register us as the PIC with PDM.
    960964     */
    961965    PicReg.u32Version           = PDM_PICREG_VERSION;
    962     PicReg.pfnSetIrqHC          = picSetIrq;
    963     PicReg.pfnGetInterruptHC    = picGetInterrupt;
     966    PicReg.pfnSetIrqR3          = picSetIrq;
     967    PicReg.pfnGetInterruptR3    = picGetInterrupt;
     968
    964969    if (fGCEnabled)
    965970    {
    966         PicReg.pszSetIrqGC          = "picSetIrq";
    967         PicReg.pszGetInterruptGC    = "picGetInterrupt";
     971        PicReg.pszSetIrqRC          = "picSetIrq";
     972        PicReg.pszGetInterruptRC    = "picGetInterrupt";
    968973    }
    969974    else
    970975    {
    971         PicReg.pszSetIrqGC          = NULL;
    972         PicReg.pszGetInterruptGC    = NULL;
     976        PicReg.pszSetIrqRC          = NULL;
     977        PicReg.pszGetInterruptRC    = NULL;
    973978    }
    974979
     
    986991    Assert(pDevIns->pDevHlp->pfnPICRegister);
    987992    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);
    993994    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     */
    9951003    rc = PDMDevHlpIOPortRegister(pDevIns,  0x20, 2, (void *)0, picIOPortWrite, picIOPortRead, NULL, NULL, "i8259 PIC #0");
    9961004    if (VBOX_FAILURE(rc))
     
    10101018    if (fR0Enabled)
    10111019    {
    1012         pData->pPicHlpR0 = pData->pPicHlpR3->pfnGetR0Helpers(pDevIns);
    1013 
    10141020        rc = PDMDevHlpIOPortRegisterR0(pDevIns,  0x20, 2, 0, "picIOPortWrite", "picIOPortRead", NULL, NULL, "i8259 PIC #0");
    10151021        if (VBOX_FAILURE(rc))
  • trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp

    r11250 r11261  
    447447    GEN_CHECK_OFF(PicState, elcr);
    448448    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);
    451452
    452453    GEN_CHECK_SIZE(DEVPIC);
    453454    GEN_CHECK_OFF(DEVPIC, aPics);
    454455    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);
    457459    GEN_CHECK_OFF(DEVPIC, pPicHlpR3);
    458     GEN_CHECK_OFF(DEVPIC, pPicHlpGC);
    459460    GEN_CHECK_OFF(DEVPIC, pPicHlpR0);
     461    GEN_CHECK_OFF(DEVPIC, pPicHlpRC);
    460462#ifdef VBOX_WITH_STATISTICS
    461463    GEN_CHECK_OFF(DEVPIC, StatSetIrqGC);
  • trunk/src/VBox/VMM/PDM.cpp

    r11224 r11261  
    265265     * The registered PIC.
    266266     */
    267     if (pVM->pdm.s.Pic.pDevInsGC)
    268     {
    269         pVM->pdm.s.Pic.pDevInsGC            += offDelta;
    270         pVM->pdm.s.Pic.pfnSetIrqGC          += offDelta;
    271         pVM->pdm.s.Pic.pfnGetInterruptGC    += 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;
    272272    }
    273273
  • trunk/src/VBox/VMM/PDMDevice.cpp

    r11224 r11261  
    222222static DECLCALLBACK(int) pdmR3PicHlp_Lock(PPDMDEVINS pDevIns, int rc);
    223223static DECLCALLBACK(void) pdmR3PicHlp_Unlock(PPDMDEVINS pDevIns);
    224 static DECLCALLBACK(PCPDMPICHLPGC) pdmR3PicHlp_GetGCHelpers(PPDMDEVINS pDevIns);
     224static DECLCALLBACK(PCPDMPICHLPRC) pdmR3PicHlp_GetRCHelpers(PPDMDEVINS pDevIns);
    225225static DECLCALLBACK(PCPDMPICHLPR0) pdmR3PicHlp_GetR0Helpers(PPDMDEVINS pDevIns);
    226226/** @} */
     
    488488    pdmR3PicHlp_Lock,
    489489    pdmR3PicHlp_Unlock,
    490     pdmR3PicHlp_GetGCHelpers,
     490    pdmR3PicHlp_GetRCHelpers,
    491491    pdmR3PicHlp_GetR0Helpers,
    492492    PDM_PICHLPR3_VERSION /* the end */
     
    24892489    PDMDEV_ASSERT_DEVINS(pDevIns);
    24902490    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));
    24942496
    24952497    /*
     
    25022504        return VERR_INVALID_PARAMETER;
    25032505    }
    2504     if (    !pPicReg->pfnSetIrqHC
    2505         ||  !pPicReg->pfnGetInterruptHC)
    2506     {
    2507         Assert(pPicReg->pfnSetIrqHC);
    2508         Assert(pPicReg->pfnGetInterruptHC);
    2509         LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Vrc (HC callbacks)\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));
    25102512        return VERR_INVALID_PARAMETER;
    25112513    }
    2512     if (    (   pPicReg->pszSetIrqGC
    2513              || pPicReg->pszGetInterruptGC)
    2514         &&  (   !VALID_PTR(pPicReg->pszSetIrqGC)
    2515              || !VALID_PTR(pPicReg->pszGetInterruptGC))
     2514    if (    (   pPicReg->pszSetIrqRC
     2515             || pPicReg->pszGetInterruptRC)
     2516        &&  (   !VALID_PTR(pPicReg->pszSetIrqRC)
     2517             || !VALID_PTR(pPicReg->pszGetInterruptRC))
    25162518       )
    25172519    {
    2518         Assert(VALID_PTR(pPicReg->pszSetIrqGC));
    2519         Assert(VALID_PTR(pPicReg->pszGetInterruptGC));
    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));
    25212523        return VERR_INVALID_PARAMETER;
    25222524    }
    2523     if (    pPicReg->pszSetIrqGC
     2525    if (    pPicReg->pszSetIrqRC
    25242526        &&  !(pDevIns->pDevReg->fFlags & PDM_DEVREG_FLAGS_GC))
    25252527    {
    25262528        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));
    25282530        return VERR_INVALID_PARAMETER;
    25292531    }
     
    25542556
    25552557    /*
    2556      * GC stuff.
    2557      */
    2558     if (pPicReg->pszSetIrqGC)
    2559     {
    2560         int rc = PDMR3GetSymbolGCLazy(pVM, pDevIns->pDevReg->szGCMod, pPicReg->pszSetIrqGC, &pVM->pdm.s.Pic.pfnSetIrqGC);
    2561         AssertMsgRC(rc, ("%s::%s rc=%Vrc\n", pDevIns->pDevReg->szGCMod, pPicReg->pszSetIrqGC, 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));
    25622564        if (VBOX_SUCCESS(rc))
    25632565        {
    2564             rc = PDMR3GetSymbolGCLazy(pVM, pDevIns->pDevReg->szGCMod, pPicReg->pszGetInterruptGC, &pVM->pdm.s.Pic.pfnGetInterruptGC);
    2565             AssertMsgRC(rc, ("%s::%s rc=%Vrc\n", pDevIns->pDevReg->szGCMod, pPicReg->pszGetInterruptGC, 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));
    25662568        }
    25672569        if (VBOX_FAILURE(rc))
     
    25702572            return rc;
    25712573        }
    2572         pVM->pdm.s.Pic.pDevInsGC = PDMDEVINS_2_GCPTR(pDevIns);
     2574        pVM->pdm.s.Pic.pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
    25732575    }
    25742576    else
    25752577    {
    2576         pVM->pdm.s.Pic.pDevInsGC = 0;
    2577         pVM->pdm.s.Pic.pfnSetIrqGC = 0;
    2578         pVM->pdm.s.Pic.pfnGetInterruptGC = 0;
     2578        pVM->pdm.s.Pic.pDevInsRC = 0;
     2579        pVM->pdm.s.Pic.pfnSetIrqRC = 0;
     2580        pVM->pdm.s.Pic.pfnGetInterruptRC = 0;
    25792581    }
    25802582
     
    26072609
    26082610    /*
    2609      * HC stuff.
     2611     * R3 stuff.
    26102612     */
    26112613    pVM->pdm.s.Pic.pDevInsR3 = pDevIns;
    2612     pVM->pdm.s.Pic.pfnSetIrqR3 = pPicReg->pfnSetIrqHC;
    2613     pVM->pdm.s.Pic.pfnGetInterruptR3 = pPicReg->pfnGetInterruptHC;
     2614    pVM->pdm.s.Pic.pfnSetIrqR3 = pPicReg->pfnSetIrqR3;
     2615    pVM->pdm.s.Pic.pfnGetInterruptR3 = pPicReg->pfnGetInterruptR3;
    26142616    Log(("PDM: Registered PIC device '%s'/%d pDevIns=%p\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pDevIns));
    26152617
     
    40384040
    40394041
    4040 /** @copydoc PDMPICHLPR3::pfnGetGCHelpers */
    4041 static DECLCALLBACK(PCPDMPICHLPGC) pdmR3PicHlp_GetGCHelpers(PPDMDEVINS pDevIns)
     4042/** @copydoc PDMPICHLPR3::pfnGetRCHelpers */
     4043static DECLCALLBACK(PCPDMPICHLPRC) pdmR3PicHlp_GetRCHelpers(PPDMDEVINS pDevIns)
    40424044{
    40434045    PDMDEV_ASSERT_DEVINS(pDevIns);
    40444046    VM_ASSERT_EMT(pDevIns->Internal.s.pVMHC);
    4045     RTGCPTR32 pGCHelpers = 0;
    4046     int rc = PDMR3GetSymbolGC(pDevIns->Internal.s.pVMHC, NULL, "g_pdmGCPicHlp", &pGCHelpers);
     4047    RTRCPTR pRCHelpers = 0;
     4048    int rc = PDMR3GetSymbolGC(pDevIns->Internal.s.pVMHC, NULL, "g_pdmRCPicHlp", &pRCHelpers);
    40474049    AssertReleaseRC(rc);
    4048     AssertRelease(pGCHelpers);
    4049     LogFlow(("pdmR3PicHlp_GetGCHelpers: caller='%s'/%d: returns %VGv\n",
    4050              pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pGCHelpers));
    4051     return pGCHelpers;
     4050    AssertRelease(pRCHelpers);
     4051    LogFlow(("pdmR3PicHlp_GetRCHelpers: caller='%s'/%d: returns %VGv\n",
     4052             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pRCHelpers));
     4053    return pRCHelpers;
    40524054}
    40534055
  • trunk/src/VBox/VMM/PDMInternal.h

    r11224 r11261  
    368368    DECLR0CALLBACKMEMBER(int, pfnGetInterruptR0,(PPDMDEVINS pDevIns));
    369369
    370     /** Pointer to the PIC device instance - GC. */
    371     RCPTRTYPE(PPDMDEVINS)   pDevInsGC;
     370    /** Pointer to the PIC device instance - RC. */
     371    RCPTRTYPE(PPDMDEVINS)   pDevInsRC;
    372372    /** @copydoc PDMPICREG::pfnSetIrqHC */
    373     DECLRCCALLBACKMEMBER(void, pfnSetIrqGC,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
     373    DECLRCCALLBACKMEMBER(void, pfnSetIrqRC,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
    374374    /** @copydoc PDMPICREG::pfnGetInterruptHC */
    375     DECLRCCALLBACKMEMBER(int, pfnGetInterruptGC,(PPDMDEVINS pDevIns));
     375    DECLRCCALLBACKMEMBER(int, pfnGetInterruptRC,(PPDMDEVINS pDevIns));
    376376    /** Alignment padding. */
    377     RTRCPTR                 GCPtrPadding;
     377    RTRCPTR                 RCPtrPadding;
    378378} PDMPIC;
    379379
     
    455455    DECLR0CALLBACKMEMBER(void,      pfnSetIrqR0,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
    456456
    457     /** Pointer to the APIC device instance - GC Ptr. */
    458     PPDMDEVINSGC                    pDevInsRC;
     457    /** Pointer to the APIC device instance - RC Ptr. */
     458    PPDMDEVINSRC                    pDevInsRC;
    459459    /** @copydoc PDMIOAPICREG::pfnSetIrqR3 */
    460460    DECLRCCALLBACKMEMBER(void,      pfnSetIrqRC,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
     
    496496
    497497    /** Pointer to PCI Bus device instance. */
    498     PPDMDEVINSGC                    pDevInsRC;
     498    PPDMDEVINSRC                    pDevInsRC;
    499499    /** @copydoc PDMPCIBUSREG::pfnSetIrqR3 */
    500500    DECLRCCALLBACKMEMBER(void,      pfnSetIrqRC,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel));
  • trunk/src/VBox/VMM/VMMAll/PDMAll.cpp

    r11219 r11261  
    7171    {
    7272        VM_FF_CLEAR(pVM, VM_FF_INTERRUPT_PIC);
    73         Assert(pVM->pdm.s.Pic.CTXALLSUFF(pDevIns));
    74         Assert(pVM->pdm.s.Pic.CTXALLSUFF(pfnGetInterrupt));
    75         int i = pVM->pdm.s.Pic.CTXALLSUFF(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));
    7676        AssertMsg(i <= 255 && i >= 0, ("i=%d\n", i));
    7777        if (i >= 0)
     
    103103
    104104    int rc = VERR_PDM_NO_PIC_INSTANCE;
    105     if (pVM->pdm.s.Pic.CTXALLSUFF(pDevIns))
    106     {
    107         Assert(pVM->pdm.s.Pic.CTXALLSUFF(pfnSetIrq));
    108         pVM->pdm.s.Pic.CTXALLSUFF(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);
    109109        rc = VINF_SUCCESS;
    110110    }
  • trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp

    r11224 r11261  
    6060__BEGIN_DECLS
    6161extern DECLEXPORT(const PDMDEVHLPGC)    g_pdmGCDevHlp;
    62 extern DECLEXPORT(const PDMPICHLPGC)    g_pdmGCPicHlp;
     62extern DECLEXPORT(const PDMPICHLPRC)    g_pdmRCPicHlp;
    6363extern DECLEXPORT(const PDMAPICHLPRC)   g_pdmRCApicHlp;
    6464extern DECLEXPORT(const PDMIOAPICHLPRC) g_pdmRCIoApicHlp;
     
    8989 * @{
    9090 */
    91 static DECLCALLBACK(void) pdmGCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns);
    92 static DECLCALLBACK(void) pdmGCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns);
    93 static DECLCALLBACK(int) pdmGCPicHlp_Lock(PPDMDEVINS pDevIns, int rc);
    94 static DECLCALLBACK(void) pdmGCPicHlp_Unlock(PPDMDEVINS pDevIns);
     91static DECLCALLBACK(void) pdmRCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns);
     92static DECLCALLBACK(void) pdmRCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns);
     93static DECLCALLBACK(int) pdmRCPicHlp_Lock(PPDMDEVINS pDevIns, int rc);
     94static DECLCALLBACK(void) pdmRCPicHlp_Unlock(PPDMDEVINS pDevIns);
    9595/** @} */
    9696
     
    152152
    153153/**
    154  * The Guest Context PIC Helper Callbacks.
    155  */
    156 extern DECLEXPORT(const PDMPICHLPGC) g_pdmGCPicHlp =
    157 {
    158     PDM_PICHLPGC_VERSION,
    159     pdmGCPicHlp_SetInterruptFF,
    160     pdmGCPicHlp_ClearInterruptFF,
    161     pdmGCPicHlp_Lock,
    162     pdmGCPicHlp_Unlock,
    163     PDM_PICHLPGC_VERSION
     154 * The Raw-Mode Context PIC Helper Callbacks.
     155 */
     156extern 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
    164164};
    165165
     
    353353
    354354/** @copydoc PDMPICHLPGC::pfnSetInterruptFF */
    355 static DECLCALLBACK(void) pdmGCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns)
    356 {
    357     PDMDEV_ASSERT_DEVINS(pDevIns);
    358     LogFlow(("pdmGCPicHlp_SetInterruptFF: caller=%p/%d: VM_FF_INTERRUPT_PIC %d -> 1\n",
     355static 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",
    359359             pDevIns, pDevIns->iInstance, VM_FF_ISSET(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC)));
    360360    VM_FF_SET(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC);
     
    363363
    364364/** @copydoc PDMPICHLPGC::pfnClearInterruptFF */
    365 static DECLCALLBACK(void) pdmGCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns)
    366 {
    367     PDMDEV_ASSERT_DEVINS(pDevIns);
    368     LogFlow(("pdmGCPicHlp_ClearInterruptFF: caller=%p/%d: VM_FF_INTERRUPT_PIC %d -> 0\n",
     365static 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",
    369369             pDevIns, pDevIns->iInstance, VM_FF_ISSET(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC)));
    370370    VM_FF_CLEAR(pDevIns->Internal.s.pVMGC, VM_FF_INTERRUPT_PIC);
     
    373373
    374374/** @copydoc PDMPICHLPGC::pfnLock */
    375 static DECLCALLBACK(int) pdmGCPicHlp_Lock(PPDMDEVINS pDevIns, int rc)
     375static DECLCALLBACK(int) pdmRCPicHlp_Lock(PPDMDEVINS pDevIns, int rc)
    376376{
    377377    PDMDEV_ASSERT_DEVINS(pDevIns);
     
    381381
    382382/** @copydoc PDMPICHLPGC::pfnUnlock */
    383 static DECLCALLBACK(void) pdmGCPicHlp_Unlock(PPDMDEVINS pDevIns)
     383static DECLCALLBACK(void) pdmRCPicHlp_Unlock(PPDMDEVINS pDevIns)
    384384{
    385385    PDMDEV_ASSERT_DEVINS(pDevIns);
     
    518518    if (    (   pVM->pdm.s.IoApic.pDevInsRC
    519519             || !pVM->pdm.s.IoApic.pDevInsR3)
    520         &&  (   pVM->pdm.s.Pic.pDevInsGC
     520        &&  (   pVM->pdm.s.Pic.pDevInsRC
    521521             || !pVM->pdm.s.Pic.pDevInsR3))
    522522    {
    523523        pdmLock(pVM);
    524         if (pVM->pdm.s.Pic.pDevInsGC)
    525             pVM->pdm.s.Pic.pfnSetIrqGC(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);
    526526        if (pVM->pdm.s.IoApic.pDevInsRC)
    527527            pVM->pdm.s.IoApic.pfnSetIrqRC(pVM->pdm.s.IoApic.pDevInsRC, iIrq, iLevel);
  • trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp

    r11224 r11261  
    257257    GEN_CHECK_OFF(PDM, Pic.pfnSetIrqR0);
    258258    GEN_CHECK_OFF(PDM, Pic.pfnGetInterruptR0);
    259     GEN_CHECK_OFF(PDM, Pic.pDevInsGC);
    260     GEN_CHECK_OFF(PDM, Pic.pfnSetIrqGC);
    261     GEN_CHECK_OFF(PDM, Pic.pfnGetInterruptGC);
     259    GEN_CHECK_OFF(PDM, Pic.pDevInsRC);
     260    GEN_CHECK_OFF(PDM, Pic.pfnSetIrqRC);
     261    GEN_CHECK_OFF(PDM, Pic.pfnGetInterruptRC);
    262262    GEN_CHECK_OFF(PDM, Apic);
    263263    GEN_CHECK_OFF(PDM, Apic.pDevInsR3);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette