VirtualBox

Ignore:
Timestamp:
Nov 1, 2019 8:47:17 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
134382
Message:

VMMDev: Converted to the new PDM device style. bugref:9218

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/VMMDev/VMMDevTesting.cpp

    r81571 r81625  
    4848
    4949/**
    50  * @callback_method_impl{FNIOMMMIOWRITE}
    51  */
    52 PDMBOTHCBDECL(int) vmmdevTestingMmioWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void const *pv, unsigned cb)
     50 * @callback_method_impl{FNIOMMMIONEWWRITE}
     51 */
     52static DECLCALLBACK(VBOXSTRICTRC) vmmdevTestingMmioWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS off, void const *pv, unsigned cb)
    5353{
    5454    RT_NOREF_PV(pvUser);
    5555
    56     switch (GCPhysAddr)
     56    switch (off)
    5757    {
    58         case VMMDEV_TESTING_MMIO_NOP_R3:
     58        case VMMDEV_TESTING_MMIO_OFF_NOP_R3:
    5959#ifndef IN_RING3
    6060            return VINF_IOM_R3_MMIO_WRITE;
    6161#endif
    62         case VMMDEV_TESTING_MMIO_NOP:
     62        case VMMDEV_TESTING_MMIO_OFF_NOP:
    6363            return VINF_SUCCESS;
    6464
     
    6868             * Readback register (64 bytes wide).
    6969             */
    70             uint32_t off = GCPhysAddr - VMMDEV_TESTING_MMIO_BASE;
    7170            if (   (   off      >= VMMDEV_TESTING_MMIO_OFF_READBACK
    7271                    && off + cb <= VMMDEV_TESTING_MMIO_OFF_READBACK + VMMDEV_TESTING_READBACK_SIZE)
     
    7776                    )
    7877            {
    79                 PVMMDEV pThis = PDMINS_2_DATA(pDevIns, PVMMDEV);
     78                PVMMDEV pThis = PDMDEVINS_2_DATA(pDevIns, PVMMDEV);
    8079                off &= VMMDEV_TESTING_READBACK_SIZE - 1;
    8180                switch (cb)
     
    101100         * Odd NOP accesses.
    102101         */
    103         case VMMDEV_TESTING_MMIO_NOP_R3 + 1:
    104         case VMMDEV_TESTING_MMIO_NOP_R3 + 2:
    105         case VMMDEV_TESTING_MMIO_NOP_R3 + 3:
    106         case VMMDEV_TESTING_MMIO_NOP_R3 + 4:
    107         case VMMDEV_TESTING_MMIO_NOP_R3 + 5:
    108         case VMMDEV_TESTING_MMIO_NOP_R3 + 6:
    109         case VMMDEV_TESTING_MMIO_NOP_R3 + 7:
     102        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 1:
     103        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 2:
     104        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 3:
     105        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 4:
     106        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 5:
     107        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 6:
     108        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 7:
    110109#ifndef IN_RING3
    111110            return VINF_IOM_R3_MMIO_WRITE;
    112111#endif
    113         case VMMDEV_TESTING_MMIO_NOP    + 1:
    114         case VMMDEV_TESTING_MMIO_NOP    + 2:
    115         case VMMDEV_TESTING_MMIO_NOP    + 3:
    116         case VMMDEV_TESTING_MMIO_NOP    + 4:
    117         case VMMDEV_TESTING_MMIO_NOP    + 5:
    118         case VMMDEV_TESTING_MMIO_NOP    + 6:
    119         case VMMDEV_TESTING_MMIO_NOP    + 7:
     112        case VMMDEV_TESTING_MMIO_OFF_NOP    + 1:
     113        case VMMDEV_TESTING_MMIO_OFF_NOP    + 2:
     114        case VMMDEV_TESTING_MMIO_OFF_NOP    + 3:
     115        case VMMDEV_TESTING_MMIO_OFF_NOP    + 4:
     116        case VMMDEV_TESTING_MMIO_OFF_NOP    + 5:
     117        case VMMDEV_TESTING_MMIO_OFF_NOP    + 6:
     118        case VMMDEV_TESTING_MMIO_OFF_NOP    + 7:
    120119            return VINF_SUCCESS;
    121120    }
     
    125124
    126125/**
    127  * @callback_method_impl{FNIOMMMIOREAD}
    128  */
    129 PDMBOTHCBDECL(int) vmmdevTestingMmioRead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void *pv, unsigned cb)
     126 * @callback_method_impl{FNIOMMMIONEWREAD}
     127 */
     128static DECLCALLBACK(VBOXSTRICTRC) vmmdevTestingMmioRead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS off, void *pv, unsigned cb)
    130129{
    131130    RT_NOREF_PV(pvUser);
    132131
    133     switch (GCPhysAddr)
     132    switch (off)
    134133    {
    135         case VMMDEV_TESTING_MMIO_NOP_R3:
     134        case VMMDEV_TESTING_MMIO_OFF_NOP_R3:
    136135#ifndef IN_RING3
    137136            return VINF_IOM_R3_MMIO_READ;
    138137#endif
    139138            /* fall thru. */
    140         case VMMDEV_TESTING_MMIO_NOP:
     139        case VMMDEV_TESTING_MMIO_OFF_NOP:
    141140            switch (cb)
    142141            {
     
    165164             * Readback register (64 bytes wide).
    166165             */
    167             uint32_t off = GCPhysAddr - VMMDEV_TESTING_MMIO_BASE;
    168166            if (   (   off      >= VMMDEV_TESTING_MMIO_OFF_READBACK
    169167                    && off + cb <= VMMDEV_TESTING_MMIO_OFF_READBACK + 64)
     
    174172                    )
    175173            {
    176                 PVMMDEV pThis = PDMINS_2_DATA(pDevIns, PVMMDEV);
     174                PVMMDEV pThis = PDMDEVINS_2_DATA(pDevIns, PVMMDEV);
    177175                off &= 0x3f;
    178176                switch (cb)
     
    197195         * Odd NOP accesses (for 16-bit code mainly).
    198196         */
    199         case VMMDEV_TESTING_MMIO_NOP_R3 + 1:
    200         case VMMDEV_TESTING_MMIO_NOP_R3 + 2:
    201         case VMMDEV_TESTING_MMIO_NOP_R3 + 3:
    202         case VMMDEV_TESTING_MMIO_NOP_R3 + 4:
    203         case VMMDEV_TESTING_MMIO_NOP_R3 + 5:
    204         case VMMDEV_TESTING_MMIO_NOP_R3 + 6:
    205         case VMMDEV_TESTING_MMIO_NOP_R3 + 7:
     197        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 1:
     198        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 2:
     199        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 3:
     200        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 4:
     201        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 5:
     202        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 6:
     203        case VMMDEV_TESTING_MMIO_OFF_NOP_R3 + 7:
    206204#ifndef IN_RING3
    207205            return VINF_IOM_R3_MMIO_READ;
    208206#endif
    209         case VMMDEV_TESTING_MMIO_NOP    + 1:
    210         case VMMDEV_TESTING_MMIO_NOP    + 2:
    211         case VMMDEV_TESTING_MMIO_NOP    + 3:
    212         case VMMDEV_TESTING_MMIO_NOP    + 4:
    213         case VMMDEV_TESTING_MMIO_NOP    + 5:
    214         case VMMDEV_TESTING_MMIO_NOP    + 6:
    215         case VMMDEV_TESTING_MMIO_NOP    + 7:
     207        case VMMDEV_TESTING_MMIO_OFF_NOP    + 1:
     208        case VMMDEV_TESTING_MMIO_OFF_NOP    + 2:
     209        case VMMDEV_TESTING_MMIO_OFF_NOP    + 3:
     210        case VMMDEV_TESTING_MMIO_OFF_NOP    + 4:
     211        case VMMDEV_TESTING_MMIO_OFF_NOP    + 5:
     212        case VMMDEV_TESTING_MMIO_OFF_NOP    + 6:
     213        case VMMDEV_TESTING_MMIO_OFF_NOP    + 7:
    216214        {
    217215            static uint8_t const s_abNopValue[8] =
     
    228226
    229227            memset(pv, 0xff, cb);
    230             memcpy(pv, &s_abNopValue[GCPhysAddr & 7], RT_MIN(8 - (GCPhysAddr & 7), cb));
     228            memcpy(pv, &s_abNopValue[off & 7], RT_MIN(8 - (off & 7), cb));
    231229            return VINF_SUCCESS;
    232230        }
     
    291289
    292290/**
    293  * @callback_method_impl{FNIOMIOPORTOUT}
    294  */
    295 PDMBOTHCBDECL(int) vmmdevTestingIoWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT uPort, uint32_t u32, unsigned cb)
     291 * @callback_method_impl{FNIOMIOPORTNEWOUT}
     292 */
     293static DECLCALLBACK(VBOXSTRICTRC)
     294vmmdevTestingIoWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
    296295{
    297     PVMMDEV pThis = PDMINS_2_DATA(pDevIns, PVMMDEV);
     296    PVMMDEV pThis = PDMDEVINS_2_DATA(pDevIns, PVMMDEV);
     297#ifdef IN_RING3
     298    PVMMDEVCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVMMDEVCC);
     299#endif
    298300    RT_NOREF_PV(pvUser);
    299301
    300     switch (uPort)
     302    switch (offPort)
    301303    {
    302304        /*
    303305         * The NOP I/O ports are used for performance measurements.
    304306         */
    305         case VMMDEV_TESTING_IOPORT_NOP:
     307        case VMMDEV_TESTING_IOPORT_NOP - VMMDEV_TESTING_IOPORT_BASE:
    306308            switch (cb)
    307309            {
     
    316318            return VINF_SUCCESS;
    317319
    318         case VMMDEV_TESTING_IOPORT_NOP_R3:
     320        case VMMDEV_TESTING_IOPORT_NOP_R3 - VMMDEV_TESTING_IOPORT_BASE:
    319321            switch (cb)
    320322            {
     
    333335
    334336        /* The timestamp I/O ports are read-only. */
    335         case VMMDEV_TESTING_IOPORT_TS_LOW:
    336         case VMMDEV_TESTING_IOPORT_TS_HIGH:
     337        case VMMDEV_TESTING_IOPORT_TS_LOW   - VMMDEV_TESTING_IOPORT_BASE:
     338        case VMMDEV_TESTING_IOPORT_TS_HIGH  - VMMDEV_TESTING_IOPORT_BASE:
    337339            break;
    338340
     
    341343         * (We have to allow WORD writes for 286, 186 and 8086 execution modes.)
    342344         */
    343         case VMMDEV_TESTING_IOPORT_CMD:
     345        case VMMDEV_TESTING_IOPORT_CMD - VMMDEV_TESTING_IOPORT_BASE:
    344346            if (cb == 2)
    345347            {
     
    359361         * The data port.  Used of providing data for a command.
    360362         */
    361         case VMMDEV_TESTING_IOPORT_DATA:
     363        case VMMDEV_TESTING_IOPORT_DATA - VMMDEV_TESTING_IOPORT_BASE:
    362364        {
    363365            uint32_t uCmd = pThis->u32TestingCmd;
     
    386388                                case VMMDEV_TESTING_CMD_INIT:
    387389                                    VMMDEV_TESTING_OUTPUT(("testing: INIT '%s'\n", pThis->TestingData.String.sz));
    388                                     if (pThis->hTestingTest != NIL_RTTEST)
     390                                    if (pThisCC->hTestingTest != NIL_RTTEST)
    389391                                    {
    390                                         RTTestChangeName(pThis->hTestingTest, pThis->TestingData.String.sz);
    391                                         RTTestBanner(pThis->hTestingTest);
     392                                        RTTestChangeName(pThisCC->hTestingTest, pThis->TestingData.String.sz);
     393                                        RTTestBanner(pThisCC->hTestingTest);
    392394                                    }
    393395                                    break;
    394396                                case VMMDEV_TESTING_CMD_SUB_NEW:
    395397                                    VMMDEV_TESTING_OUTPUT(("testing: SUB_NEW  '%s'\n", pThis->TestingData.String.sz));
    396                                     if (pThis->hTestingTest != NIL_RTTEST)
    397                                         RTTestSub(pThis->hTestingTest, pThis->TestingData.String.sz);
     398                                    if (pThisCC->hTestingTest != NIL_RTTEST)
     399                                        RTTestSub(pThisCC->hTestingTest, pThis->TestingData.String.sz);
    398400                                    break;
    399401                                case VMMDEV_TESTING_CMD_FAILED:
    400                                     if (pThis->hTestingTest != NIL_RTTEST)
    401                                         RTTestFailed(pThis->hTestingTest, "%s", pThis->TestingData.String.sz);
     402                                    if (pThisCC->hTestingTest != NIL_RTTEST)
     403                                        RTTestFailed(pThisCC->hTestingTest, "%s", pThis->TestingData.String.sz);
    402404                                    VMMDEV_TESTING_OUTPUT(("testing: FAILED '%s'\n", pThis->TestingData.String.sz));
    403405                                    break;
    404406                                case VMMDEV_TESTING_CMD_SKIPPED:
    405                                     if (pThis->hTestingTest != NIL_RTTEST)
     407                                    if (pThisCC->hTestingTest != NIL_RTTEST)
    406408                                    {
    407409                                        if (off)
    408                                             RTTestSkipped(pThis->hTestingTest, "%s", pThis->TestingData.String.sz);
     410                                            RTTestSkipped(pThisCC->hTestingTest, "%s", pThis->TestingData.String.sz);
    409411                                        else
    410                                             RTTestSkipped(pThis->hTestingTest, NULL);
     412                                            RTTestSkipped(pThisCC->hTestingTest, NULL);
    411413                                    }
    412414                                    VMMDEV_TESTING_OUTPUT(("testing: SKIPPED '%s'\n", pThis->TestingData.String.sz));
    413415                                    break;
    414416                                case VMMDEV_TESTING_CMD_PRINT:
    415                                     if (pThis->hTestingTest != NIL_RTTEST && off)
    416                                         RTTestPrintf(pThis->hTestingTest, RTTESTLVL_ALWAYS, "%s", pThis->TestingData.String.sz);
     417                                    if (pThisCC->hTestingTest != NIL_RTTEST && off)
     418                                        RTTestPrintf(pThisCC->hTestingTest, RTTESTLVL_ALWAYS, "%s", pThis->TestingData.String.sz);
    417419                                    VMMDEV_TESTING_OUTPUT(("testing: '%s'\n", pThis->TestingData.String.sz));
    418420                                    break;
     
    454456                        if (uCmd == VMMDEV_TESTING_CMD_TERM)
    455457                        {
    456                             if (pThis->hTestingTest != NIL_RTTEST)
     458                            if (pThisCC->hTestingTest != NIL_RTTEST)
    457459                            {
    458                                 while (RTTestErrorCount(pThis->hTestingTest) < u32)
    459                                     RTTestErrorInc(pThis->hTestingTest); /* A bit stupid, but does the trick. */
    460                                 RTTestSubDone(pThis->hTestingTest);
    461                                 RTTestSummaryAndDestroy(pThis->hTestingTest);
    462                                 pThis->hTestingTest = NIL_RTTEST;
     460                                while (RTTestErrorCount(pThisCC->hTestingTest) < u32)
     461                                    RTTestErrorInc(pThisCC->hTestingTest); /* A bit stupid, but does the trick. */
     462                                RTTestSubDone(pThisCC->hTestingTest);
     463                                RTTestSummaryAndDestroy(pThisCC->hTestingTest);
     464                                pThisCC->hTestingTest = NIL_RTTEST;
    463465                            }
    464466                            VMMDEV_TESTING_OUTPUT(("testing: TERM - %u errors\n", u32));
     
    466468                        else
    467469                        {
    468                             if (pThis->hTestingTest != NIL_RTTEST)
     470                            if (pThisCC->hTestingTest != NIL_RTTEST)
    469471                            {
    470                                 while (RTTestSubErrorCount(pThis->hTestingTest) < u32)
    471                                     RTTestErrorInc(pThis->hTestingTest); /* A bit stupid, but does the trick. */
    472                                 RTTestSubDone(pThis->hTestingTest);
     472                                while (RTTestSubErrorCount(pThisCC->hTestingTest) < u32)
     473                                    RTTestErrorInc(pThisCC->hTestingTest); /* A bit stupid, but does the trick. */
     474                                RTTestSubDone(pThisCC->hTestingTest);
    473475                            }
    474476                            VMMDEV_TESTING_OUTPUT(("testing: SUB_DONE - %u errors\n", u32));
     
    535537                                enmUnit = RTTESTUNIT_NONE;
    536538                            }
    537                             if (pThis->hTestingTest != NIL_RTTEST)
    538                                 RTTestValue(pThis->hTestingTest, pThis->TestingData.Value.szName,
     539                            if (pThisCC->hTestingTest != NIL_RTTEST)
     540                                RTTestValue(pThisCC->hTestingTest, pThis->TestingData.Value.szName,
    539541                                            pThis->TestingData.Value.u64Value.u, enmUnit);
    540542
     
    591593
    592594/**
    593  * @callback_method_impl{FNIOMIOPORTIN}
    594  */
    595 PDMBOTHCBDECL(int) vmmdevTestingIoRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT uPort, uint32_t *pu32, unsigned cb)
     595 * @callback_method_impl{FNIOMIOPORTNEWIN}
     596 */
     597static DECLCALLBACK(VBOXSTRICTRC)
     598vmmdevTestingIoRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
    596599{
    597     PVMMDEV pThis = PDMINS_2_DATA(pDevIns, PVMMDEV);
     600    PVMMDEV pThis = PDMDEVINS_2_DATA(pDevIns, PVMMDEV);
    598601    RT_NOREF_PV(pvUser);
    599602
    600     switch (uPort)
     603    switch (offPort)
    601604    {
    602605        /*
    603606         * The NOP I/O ports are used for performance measurements.
    604607         */
    605         case VMMDEV_TESTING_IOPORT_NOP:
     608        case VMMDEV_TESTING_IOPORT_NOP - VMMDEV_TESTING_IOPORT_BASE:
    606609            switch (cb)
    607610            {
     
    617620            return VINF_SUCCESS;
    618621
    619         case VMMDEV_TESTING_IOPORT_NOP_R3:
     622        case VMMDEV_TESTING_IOPORT_NOP_R3 - VMMDEV_TESTING_IOPORT_BASE:
    620623            switch (cb)
    621624            {
     
    641644         * gives you a 64-bit timestamp value.
    642645         */
    643         case VMMDEV_TESTING_IOPORT_TS_LOW:
     646        case VMMDEV_TESTING_IOPORT_TS_LOW - VMMDEV_TESTING_IOPORT_BASE:
    644647            if (cb == 4)
    645648            {
     
    651654            break;
    652655
    653         case VMMDEV_TESTING_IOPORT_TS_HIGH:
     656        case VMMDEV_TESTING_IOPORT_TS_HIGH - VMMDEV_TESTING_IOPORT_BASE:
    654657            if (cb == 4)
    655658            {
     
    662665         * The command and data registers are write-only.
    663666         */
    664         case VMMDEV_TESTING_IOPORT_CMD:
    665         case VMMDEV_TESTING_IOPORT_DATA:
     667        case VMMDEV_TESTING_IOPORT_CMD  - VMMDEV_TESTING_IOPORT_BASE:
     668        case VMMDEV_TESTING_IOPORT_DATA - VMMDEV_TESTING_IOPORT_BASE:
    666669            break;
    667670
     
    684687void vmmdevTestingTerminate(PPDMDEVINS pDevIns)
    685688{
    686     PVMMDEV pThis = PDMINS_2_DATA(pDevIns, PVMMDEV);
     689    PVMMDEV   pThis   = PDMDEVINS_2_DATA(pDevIns, PVMMDEV);
     690    PVMMDEVCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVMMDEVCC);
    687691    if (!pThis->fTestingEnabled)
    688692        return;
    689693
    690     if (pThis->hTestingTest != NIL_RTTEST)
     694    if (pThisCC->hTestingTest != NIL_RTTEST)
    691695    {
    692         RTTestFailed(pThis->hTestingTest, "Still open at vmmdev destruction.");
    693         RTTestSummaryAndDestroy(pThis->hTestingTest);
    694         pThis->hTestingTest = NIL_RTTEST;
     696        RTTestFailed(pThisCC->hTestingTest, "Still open at vmmdev destruction.");
     697        RTTestSummaryAndDestroy(pThisCC->hTestingTest);
     698        pThisCC->hTestingTest = NIL_RTTEST;
    695699    }
    696700}
     
    705709int vmmdevTestingInitialize(PPDMDEVINS pDevIns)
    706710{
    707     PVMMDEV pThis = PDMINS_2_DATA(pDevIns, PVMMDEV);
    708     int     rc;
     711    PVMMDEV     pThis   = PDMDEVINS_2_DATA(pDevIns, PVMMDEV);
     712    PVMMDEVCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVMMDEVCC);
     713    int         rc;
    709714
    710715    if (!pThis->fTestingEnabled)
     
    717722         * tests interfaces.  Optional, needs to be explicitly enabled.
    718723         */
    719         rc = PDMDevHlpMMIORegister(pDevIns, VMMDEV_TESTING_MMIO_BASE, VMMDEV_TESTING_MMIO_SIZE, NULL /*pvUser*/,
    720                                    IOMMMIO_FLAGS_READ_PASSTHRU | IOMMMIO_FLAGS_WRITE_PASSTHRU,
    721                                    vmmdevTestingMmioWrite, vmmdevTestingMmioRead, "VMMDev Testing");
     724        rc = PDMDevHlpMmioCreateAndMap(pDevIns, VMMDEV_TESTING_MMIO_BASE, VMMDEV_TESTING_MMIO_SIZE,
     725                                       vmmdevTestingMmioWrite, vmmdevTestingMmioRead,
     726                                       IOMMMIO_FLAGS_READ_PASSTHRU | IOMMMIO_FLAGS_WRITE_PASSTHRU,
     727                                       "VMMDev Testing", &pThis->hMmioTesting);
    722728        AssertRCReturn(rc, rc);
    723         if (pThis->fRZEnabled)
    724         {
    725             rc = PDMDevHlpMMIORegisterR0(pDevIns, VMMDEV_TESTING_MMIO_BASE, VMMDEV_TESTING_MMIO_SIZE, NIL_RTR0PTR /*pvUser*/,
    726                                          "vmmdevTestingMmioWrite", "vmmdevTestingMmioRead");
    727             AssertRCReturn(rc, rc);
    728             rc = PDMDevHlpMMIORegisterRC(pDevIns, VMMDEV_TESTING_MMIO_BASE, VMMDEV_TESTING_MMIO_SIZE, NIL_RTRCPTR /*pvUser*/,
    729                                          "vmmdevTestingMmioWrite", "vmmdevTestingMmioRead");
    730             AssertRCReturn(rc, rc);
    731         }
    732729    }
    733730
     
    736733     * Register the I/O ports used for testing.
    737734     */
    738     rc = PDMDevHlpIOPortRegister(pDevIns, VMMDEV_TESTING_IOPORT_BASE, VMMDEV_TESTING_IOPORT_COUNT, NULL,
    739                                  vmmdevTestingIoWrite,
    740                                  vmmdevTestingIoRead,
    741                                  NULL /*pfnOutStr*/,
    742                                  NULL /*pfnInStr*/,
    743                                  "VMMDev Testing");
     735    rc = PDMDevHlpIoPortCreateAndMap(pDevIns, VMMDEV_TESTING_IOPORT_BASE, VMMDEV_TESTING_IOPORT_COUNT,
     736                                     vmmdevTestingIoWrite, vmmdevTestingIoRead, "VMMDev Testing", NULL /*paExtDescs*/,
     737                                     &pThis->hIoPortTesting);
    744738    AssertRCReturn(rc, rc);
    745     if (pThis->fRZEnabled)
    746     {
    747         rc = PDMDevHlpIOPortRegisterR0(pDevIns, VMMDEV_TESTING_IOPORT_BASE, VMMDEV_TESTING_IOPORT_COUNT, NIL_RTR0PTR /*pvUser*/,
    748                                        "vmmdevTestingIoWrite",
    749                                        "vmmdevTestingIoRead",
    750                                        NULL /*pszOutStr*/,
    751                                        NULL /*pszInStr*/,
    752                                        "VMMDev Testing");
    753         AssertRCReturn(rc, rc);
    754         rc = PDMDevHlpIOPortRegisterRC(pDevIns, VMMDEV_TESTING_IOPORT_BASE, VMMDEV_TESTING_IOPORT_COUNT, NIL_RTRCPTR /*pvUser*/,
    755                                        "vmmdevTestingIoWrite",
    756                                        "vmmdevTestingIoRead",
    757                                        NULL /*pszOutStr*/,
    758                                        NULL /*pszInStr*/,
    759                                        "VMMDev Testing");
    760         AssertRCReturn(rc, rc);
    761     }
    762739
    763740    /*
     
    765742     */
    766743    rc = RTTestCreateEx("VMMDevTesting", RTTEST_C_USE_ENV | RTTEST_C_NO_TLS | RTTEST_C_XML_DELAY_TOP_TEST,
    767                         RTTESTLVL_INVALID, -1 /*iNativeTestPipe*/, pThis->pszTestingXmlOutput, &pThis->hTestingTest);
     744                        RTTESTLVL_INVALID, -1 /*iNativeTestPipe*/, pThisCC->pszTestingXmlOutput, &pThisCC->hTestingTest);
    768745    if (RT_FAILURE(rc))
    769746        return PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS, "Error creating testing instance");
Note: See TracChangeset for help on using the changeset viewer.

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