VirtualBox

Changeset 81914 in vbox for trunk/src


Ignore:
Timestamp:
Nov 17, 2019 8:29:52 PM (5 years ago)
Author:
vboxsync
Message:

DevPIC: Split up the structure and marked the device as new-style. bugref:9218

File:
1 edited

Legend:

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

    r81913 r81914  
    6262/** @def PIC_UNLOCK
    6363 * Releases the PDM lock. This is a NOP if locking is disabled. */
    64 #define PIC_LOCK(a_pDevIns, a_pThis, rc) \
     64#define PIC_LOCK(a_pDevIns, a_pThisCC, rc) \
    6565    do { \
    66         int rc2 = (a_pThis)->CTX_SUFF(pPicHlp)->pfnLock((a_pDevIns), rc); \
     66        int rc2 = (a_pThisCC)->pPicHlp->pfnLock((a_pDevIns), rc); \
    6767        if (rc2 != VINF_SUCCESS) \
    6868            return rc2; \
    6969    } while (0)
    70 #define PIC_UNLOCK(a_pDevIns, a_pThis) \
    71     (a_pThis)->CTX_SUFF(pPicHlp)->pfnUnlock((a_pDevIns))
     70#define PIC_UNLOCK(a_pDevIns, a_pThisCC) \
     71    (a_pThisCC)->pPicHlp->pfnUnlock((a_pDevIns))
    7272
    7373
     
    112112
    113113/**
    114  * The whole PIC device instance data.
     114 * The shared PIC device instance data.
    115115 */
    116116typedef struct DEVPIC
     
    118118    /** The two interrupt controllers. */
    119119    PICSTATE                aPics[2];
    120     /** Pointer to the PIC R3 helpers. */
    121     R3PTRTYPE(PCPDMPICHLP)  pPicHlpR3;
    122     /** Pointer to the PIC R0 helpers. */
    123     R0PTRTYPE(PCPDMPICHLP)  pPicHlpR0;
    124     /** Pointer to the PIC RC helpers. */
    125     RCPTRTYPE(PCPDMPICHLP)  pPicHlpRC;
    126120    /** Number of release log entries. Used to prevent flooding. */
    127121    uint32_t                cRelLogEntries;
     122    uint32_t                u32Padding;
    128123#ifdef VBOX_WITH_STATISTICS
    129124    STAMCOUNTER             StatSetIrqRZ;
     
    134129#endif
    135130} DEVPIC;
    136 /** Pointer to the whole PIC instance data. */
     131/** Pointer to the shared PIC instance data. */
    137132typedef DEVPIC *PDEVPIC;
     133
     134
     135/**
     136 * The PIC device instance data for ring-3.
     137 */
     138typedef struct DEVPICR3
     139{
     140    /** Pointer to the PIC ring-3 helpers. */
     141    R3PTRTYPE(PCPDMPICHLP)  pPicHlp;
     142} DEVPICR3;
     143/** Pointer to the ring-3 PIC instance data. */
     144typedef DEVPICR3 *PDEVPICR3;
     145
     146
     147/**
     148 * The PIC device instance data for ring-0.
     149 */
     150typedef struct DEVPICR0
     151{
     152    /** Pointer to the PIC ring-0 helpers. */
     153    R0PTRTYPE(PCPDMPICHLP)  pPicHlp;
     154} DEVPICR0;
     155/** Pointer to the ring-0 PIC instance data. */
     156typedef DEVPICR0 *PDEVPICR0;
     157
     158
     159/**
     160 * The PIC device instance data for raw-mode.
     161 */
     162typedef struct DEVPICRC
     163{
     164    /** Pointer to the PIC raw-mode helpers. */
     165    RCPTRTYPE(PCPDMPICHLP)  pPicHlp;
     166} DEVPICRC;
     167/** Pointer to the raw-mode PIC instance data. */
     168typedef DEVPICRC *PDEVPICRC;
     169
     170
     171/** The PIC instance data for the current context. */
     172typedef CTX_SUFF(DEVPIC) DEVPICCC;
     173/** Pointer to the PIC instance data for the current context. */
     174typedef CTX_SUFF(PDEVPIC) PDEVPICCC;
     175
    138176
    139177
     
    248286/* raise irq to CPU if necessary. must be called every time the active
    249287   irq may change */
    250 static int pic_update_irq(PPDMDEVINS pDevIns, PDEVPIC pThis)
     288static int pic_update_irq(PPDMDEVINS pDevIns, PDEVPIC pThis, PDEVPICCC pThisCC)
    251289{
    252290    int irq2, irq;
     
    277315                Log(("pic%d: imr=%x irr=%x padd=%d\n", i, pThis->aPics[i].imr, pThis->aPics[i].irr, pThis->aPics[i].priority_add));
    278316            Log(("pic: cpu_interrupt\n"));
    279             pThis->CTX_SUFF(pPicHlp)->pfnSetInterruptFF(pDevIns);
     317            pThisCC->pPicHlp->pfnSetInterruptFF(pDevIns);
    280318        }
    281319        else
     
    286324
    287325            /* if this was the only pending irq, then we must clear the interrupt ff flag */
    288             pThis->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pDevIns);
     326            pThisCC->pPicHlp->pfnClearInterruptFF(pDevIns);
    289327
    290328            /** @todo Is this correct? */
     
    292330
    293331            /* Call ourselves again just in case other interrupts are pending */
    294             return pic_update_irq(pDevIns, pThis);
     332            return pic_update_irq(pDevIns, pThis, pThisCC);
    295333        }
    296334    }
     
    300338
    301339        /* we must clear the interrupt ff flag */
    302         pThis->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pDevIns);
     340        pThisCC->pPicHlp->pfnClearInterruptFF(pDevIns);
    303341    }
    304342    return VINF_SUCCESS;
     
    309347 *
    310348 * @param   pDevIns         Device instance of the PICs.
     349 * @param   pDevIns
    311350 * @param   iIrq            IRQ number to set.
    312351 * @param   iLevel          IRQ level.
    313352 * @param   uTagSrc         The IRQ tag and source ID (for tracing).
    314353 */
    315 PDMBOTHCBDECL(void) picSetIrq(PPDMDEVINS pDevIns, int iIrq, int iLevel, uint32_t uTagSrc)
    316 {
    317     PDEVPIC     pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     354static DECLCALLBACK(void) picSetIrq(PPDMDEVINS pDevIns, int iIrq, int iLevel, uint32_t uTagSrc)
     355{
     356    PDEVPIC     pThis   = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     357    PDEVPICCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
    318358    AssertMsgReturnVoid(iIrq < 16, ("iIrq=%d\n", iIrq));
    319359
     
    329369         */
    330370        pic_set_irq1(&RT_SAFE_SUBSCRIPT(pThis->aPics, iIrq >> 3), iIrq & 7, 0, uTagSrc);
    331         pic_update_irq(pDevIns, pThis);
     371        pic_update_irq(pDevIns, pThis, pThisCC);
    332372    }
    333373    pic_set_irq1(&RT_SAFE_SUBSCRIPT(pThis->aPics, iIrq >> 3), iIrq & 7, iLevel & PDM_IRQ_LEVEL_HIGH, uTagSrc);
    334     pic_update_irq(pDevIns, pThis);
     374    pic_update_irq(pDevIns, pThis, pThisCC);
    335375}
    336376
     
    363403 * @param   puTagSrc        Where to return the IRQ tag and source ID.
    364404 */
    365 PDMBOTHCBDECL(int) picGetInterrupt(PPDMDEVINS pDevIns, uint32_t *puTagSrc)
    366 {
    367     PDEVPIC     pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     405static DECLCALLBACK(int) picGetInterrupt(PPDMDEVINS pDevIns, uint32_t *puTagSrc)
     406{
     407    PDEVPIC     pThis   = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     408    PDEVPICCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
    368409    int         irq;
    369410    int         irq2;
     
    411452        *puTagSrc = 0;
    412453    }
    413     pic_update_irq(pDevIns, pThis);
     454    pic_update_irq(pDevIns, pThis, pThisCC);
    414455
    415456    Log(("picGetInterrupt: 0x%02x pending 0:%d 1:%d\n", intno, pic_get_irq(&pThis->aPics[0]), pic_get_irq(&pThis->aPics[1])));
     
    440481
    441482
    442 static VBOXSTRICTRC pic_ioport_write(PPDMDEVINS pDevIns, PDEVPIC pThis, PPICSTATE pPic, uint32_t addr, uint32_t val)
     483static VBOXSTRICTRC pic_ioport_write(PPDMDEVINS pDevIns, PDEVPIC pThis, PDEVPICCC pThisCC, PPICSTATE pPic,
     484                                     uint32_t addr, uint32_t val)
    443485{
    444486    VBOXSTRICTRC rc = VINF_SUCCESS;
     
    454496            pic_reset(pPic);
    455497            /* deassert a pending interrupt */
    456             pThis->CTX_SUFF(pPicHlp)->pfnClearInterruptFF(pDevIns);
     498            pThisCC->pPicHlp->pfnClearInterruptFF(pDevIns);
    457499
    458500            pPic->init_state = 1;
     
    492534                        if (cmd == 5)
    493535                            pPic->priority_add = (irq + 1) & 7;
    494                         rc = pic_update_irq(pDevIns, pThis);
     536                        rc = pic_update_irq(pDevIns, pThis, pThisCC);
    495537                        Assert(rc == VINF_SUCCESS);
    496538                        DumpPICState(pPic, "eoi");
     
    503545                    Log(("pic_write: EOI2 for irq %d\n", irq));
    504546                    pPic->isr &= ~(1 << irq);
    505                     rc = pic_update_irq(pDevIns, pThis);
     547                    rc = pic_update_irq(pDevIns, pThis, pThisCC);
    506548                    Assert(rc == VINF_SUCCESS);
    507549                    DumpPICState(pPic, "eoi2");
     
    512554                    pPic->priority_add = (val + 1) & 7;
    513555                    Log(("pic_write: lowest priority %d (highest %d)\n", val & 7, pPic->priority_add));
    514                     rc = pic_update_irq(pDevIns, pThis);
     556                    rc = pic_update_irq(pDevIns, pThis, pThisCC);
    515557                    Assert(rc == VINF_SUCCESS);
    516558                    break;
     
    522564                    pPic->isr &= ~(1 << irq);
    523565                    pPic->priority_add = (irq + 1) & 7;
    524                     rc = pic_update_irq(pDevIns, pThis);
     566                    rc = pic_update_irq(pDevIns, pThis, pThisCC);
    525567                    Assert(rc == VINF_SUCCESS);
    526568                    DumpPICState(pPic, "eoi3");
     
    540582                /* normal mode */
    541583                pPic->imr = val;
    542                 rc = pic_update_irq(pDevIns, pThis);
     584                rc = pic_update_irq(pDevIns, pThis, pThisCC);
    543585                Assert(rc == VINF_SUCCESS);
    544586                break;
     
    566608
    567609
    568 static uint32_t pic_poll_read(PPDMDEVINS pDevIns, PDEVPIC pThis, PPICSTATE pPic, uint32_t addr1)
     610static uint32_t pic_poll_read(PPDMDEVINS pDevIns, PDEVPIC pThis, PDEVPICCC pThisCC, PPICSTATE pPic, uint32_t addr1)
    569611{
    570612    int ret = pic_get_irq(pPic);
     
    581623        pPic->isr &= ~(1 << ret);
    582624        if (addr1 >> 7 || ret != 2)
    583             pic_update_irq(pDevIns, pThis);
     625            pic_update_irq(pDevIns, pThis, pThisCC);
    584626    }
    585627    else
    586628    {
    587629        ret = 0;
    588         pic_update_irq(pDevIns, pThis);
     630        pic_update_irq(pDevIns, pThis, pThisCC);
    589631    }
    590632
     
    593635
    594636
    595 static uint32_t pic_ioport_read(PPDMDEVINS pDevIns, PDEVPIC pThis, PPICSTATE pPic, uint32_t addr1, int *pRC)
     637static uint32_t pic_ioport_read(PPDMDEVINS pDevIns, PDEVPIC pThis, PDEVPICCC pThisCC, PPICSTATE pPic, uint32_t addr1, int *pRC)
    596638{
    597639    unsigned int addr;
     
    604646    if (pPic->poll)
    605647    {
    606         ret = pic_poll_read(pDevIns, pThis, pPic, addr1);
     648        ret = pic_poll_read(pDevIns, pThis, pThisCC, pPic, addr1);
    607649        pPic->poll = 0;
    608650    }
     
    632674static DECLCALLBACK(VBOXSTRICTRC) picIOPortRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
    633675{
    634     PDEVPIC     pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
    635     uint32_t    iPic  = (uint32_t)(uintptr_t)pvUser;
     676    PDEVPIC     pThis   = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     677    PDEVPICCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
     678    uint32_t    iPic    = (uint32_t)(uintptr_t)pvUser;
    636679
    637680    Assert(iPic == 0 || iPic == 1);
     
    639682    {
    640683        int rc;
    641         PIC_LOCK(pDevIns, pThis, VINF_IOM_R3_IOPORT_READ);
    642         *pu32 = pic_ioport_read(pDevIns, pThis, &RT_SAFE_SUBSCRIPT(pThis->aPics, iPic), offPort, &rc);
    643         PIC_UNLOCK(pDevIns, pThis);
     684        PIC_LOCK(pDevIns, pThisCC, VINF_IOM_R3_IOPORT_READ);
     685        *pu32 = pic_ioport_read(pDevIns, pThis, pThisCC, &RT_SAFE_SUBSCRIPT(pThis->aPics, iPic), offPort, &rc);
     686        PIC_UNLOCK(pDevIns, pThisCC);
    644687        return rc;
    645688    }
     
    653696static DECLCALLBACK(VBOXSTRICTRC) picIOPortWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
    654697{
    655     PDEVPIC     pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
    656     uint32_t    iPic  = (uint32_t)(uintptr_t)pvUser;
     698    PDEVPIC     pThis   = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     699    PDEVPICCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
     700    uint32_t    iPic    = (uint32_t)(uintptr_t)pvUser;
    657701
    658702    Assert(iPic == 0 || iPic == 1);
     
    661705    {
    662706        VBOXSTRICTRC rc;
    663         PIC_LOCK(pDevIns, pThis, VINF_IOM_R3_IOPORT_WRITE);
    664         rc = pic_ioport_write(pDevIns, pThis, &RT_SAFE_SUBSCRIPT(pThis->aPics, iPic), offPort, u32);
    665         PIC_UNLOCK(pDevIns, pThis);
     707        PIC_LOCK(pDevIns, pThisCC, VINF_IOM_R3_IOPORT_WRITE);
     708        rc = pic_ioport_write(pDevIns, pThis, pThisCC, &RT_SAFE_SUBSCRIPT(pThis->aPics, iPic), offPort, u32);
     709        PIC_UNLOCK(pDevIns, pThisCC);
    666710        return rc;
    667711    }
     
    677721    if (cb == 1)
    678722    {
    679         PDEVPIC   pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
    680         PPICSTATE pPic  = (PPICSTATE)pvUser;
    681         PIC_LOCK(pDevIns, pThis, VINF_IOM_R3_IOPORT_READ);
     723        PDEVPICCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
     724        PPICSTATE   pPic    = (PPICSTATE)pvUser;
     725        PIC_LOCK(pDevIns, pThisCC, VINF_IOM_R3_IOPORT_READ);
    682726        *pu32 = pPic->elcr;
    683         PIC_UNLOCK(pDevIns, pThis);
     727        PIC_UNLOCK(pDevIns, pThisCC);
    684728        return VINF_SUCCESS;
    685729    }
     
    696740    if (cb == 1)
    697741    {
    698         PDEVPIC   pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
    699         PPICSTATE pPic  = (PPICSTATE)pvUser;
    700         PIC_LOCK(pDevIns, pThis, VINF_IOM_R3_IOPORT_WRITE);
     742        PDEVPICCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
     743        PPICSTATE   pPic    = (PPICSTATE)pvUser;
     744        PIC_LOCK(pDevIns, pThisCC, VINF_IOM_R3_IOPORT_WRITE);
    701745        pPic->elcr = u32 & pPic->elcr_mask;
    702         PIC_UNLOCK(pDevIns, pThis);
     746        PIC_UNLOCK(pDevIns, pThisCC);
    703747    }
    704748    RT_NOREF(offPort);
     
    814858static DECLCALLBACK(void)  picR3Reset(PPDMDEVINS pDevIns)
    815859{
    816     PDEVPIC     pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     860    PDEVPIC     pThis   = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     861    PDEVPICCC   pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
    817862    unsigned    i;
    818863    LogFlow(("picR3Reset:\n"));
    819     pThis->pPicHlpR3->pfnLock(pDevIns, VERR_INTERNAL_ERROR);
     864    pThisCC->pPicHlp->pfnLock(pDevIns, VERR_INTERNAL_ERROR);
    820865
    821866    for (i = 0; i < RT_ELEMENTS(pThis->aPics); i++)
    822867        pic_reset(&pThis->aPics[i]);
    823868
    824     PIC_UNLOCK(pDevIns, pThis);
     869    PIC_UNLOCK(pDevIns, pThisCC);
    825870}
    826871
     
    831876static DECLCALLBACK(void) picR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
    832877{
    833     PDEVPIC pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
    834     pThis->pPicHlpRC += offDelta;
     878    PDEVPICRC pThisRC = PDMINS_2_DATA_RC(pDevIns, PDEVPICRC);
     879    pThisRC->pPicHlp += offDelta;
    835880}
    836881
     
    842887{
    843888    PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
    844     PDEVPIC         pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     889    PDEVPIC         pThis   = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     890    PDEVPICCC       pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
    845891    int             rc;
    846892    RT_NOREF(iInstance, pCfg);
     
    872918    PicReg.pfnGetInterrupt      = picGetInterrupt;
    873919    PicReg.u32TheEnd            = PDM_PICREG_VERSION;
    874     rc = PDMDevHlpPICRegister(pDevIns, &PicReg, &pThis->pPicHlpR3);
     920    rc = PDMDevHlpPICRegister(pDevIns, &PicReg, &pThisCC->pPicHlp);
    875921    AssertLogRelMsgRCReturn(rc, ("PDMDevHlpPICRegister -> %Rrc\n", rc), rc);
     922    AssertReturn(pThisCC->pPicHlp->u32Version == PDM_PICHLP_VERSION, VERR_VERSION_MISMATCH);
     923    AssertReturn(pThisCC->pPicHlp->u32TheEnd  == PDM_PICHLP_VERSION, VERR_VERSION_MISMATCH);
    876924
    877925    /*
     
    939987{
    940988    PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
    941     PDEVPIC pThis = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     989    PDEVPIC   pThis   = PDMDEVINS_2_DATA(pDevIns, PDEVPIC);
     990    PDEVPICCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PDEVPICCC);
    942991
    943992    /* NOP the critsect: */
     
    9511000    PicReg.pfnGetInterrupt      = picGetInterrupt;
    9521001    PicReg.u32TheEnd            = PDM_PICREG_VERSION;
    953     rc = PDMDevHlpPICSetUpContext(pDevIns, &PicReg, &pThis->CTX_SUFF(pPicHlp));
     1002    rc = PDMDevHlpPICSetUpContext(pDevIns, &PicReg, &pThisCC->pPicHlp);
    9541003    AssertLogRelMsgRCReturn(rc, ("PDMDevHlpPICSetUpContext -> %Rrc\n", rc), rc);
     1004    AssertPtrReturn(pThisCC->pPicHlp, VERR_INTERNAL_ERROR_3);
     1005    AssertReturn(pThisCC->pPicHlp->u32Version == PDM_PICHLP_VERSION, VERR_VERSION_MISMATCH);
     1006    AssertReturn(pThisCC->pPicHlp->u32TheEnd  == PDM_PICHLP_VERSION, VERR_VERSION_MISMATCH);
    9551007
    9561008    /* I/O port callbacks: */
    9571009    Assert(RT_ELEMENTS(pThis->aPics) == 2);
    9581010    rc = PDMDevHlpIoPortSetUpContext(pDevIns, pThis->aPics[0].hIoPorts0, picIOPortWrite, picIOPortRead, (void *)0);
    959     AssertRCReturn(rc, VERR_INTERNAL_ERROR_2);
    9601011    AssertRCReturn(rc, rc);
    9611012    rc = PDMDevHlpIoPortSetUpContext(pDevIns, pThis->aPics[1].hIoPorts0, picIOPortWrite, picIOPortRead, (void *)1);
    962     AssertRCReturn(rc, VERR_INTERNAL_ERROR_3);
    9631013    AssertRCReturn(rc, rc);
    9641014
    9651015    rc = PDMDevHlpIoPortSetUpContext(pDevIns, pThis->aPics[0].hIoPorts1, picIOPortElcrWrite, picIOPortElcrRead, &pThis->aPics[0]);
    966     AssertRCReturn(rc, VERR_INTERNAL_ERROR_4);
    9671016    AssertRCReturn(rc, rc);
    9681017    rc = PDMDevHlpIoPortSetUpContext(pDevIns, pThis->aPics[1].hIoPorts1, picIOPortElcrWrite, picIOPortElcrRead, &pThis->aPics[1]);
    969     AssertRCReturn(rc, VERR_INTERNAL_ERROR_5);
    9701018    AssertRCReturn(rc, rc);
    9711019
     
    9831031    /* .uReserved0 = */             0,
    9841032    /* .szName = */                 "i8259",
    985     /* .fFlags = */                 PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RZ,
     1033    /* .fFlags = */                 PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RZ | PDM_DEVREG_FLAGS_NEW_STYLE,
    9861034    /* .fClass = */                 PDM_DEVREG_CLASS_PIC,
    9871035    /* .cMaxInstances = */          1,
    9881036    /* .uSharedVersion = */         42,
    9891037    /* .cbInstanceShared = */       sizeof(DEVPIC),
    990     /* .cbInstanceCC = */           0,
    991     /* .cbInstanceRC = */           0,
     1038    /* .cbInstanceCC = */           sizeof(DEVPICCC),
     1039    /* .cbInstanceRC = */           sizeof(DEVPICRC),
    9921040    /* .cMaxPciDevices = */         0,
    9931041    /* .cMaxMsixVectors = */        0,
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