VirtualBox

Changeset 81801 in vbox


Ignore:
Timestamp:
Nov 12, 2019 1:47:58 PM (5 years ago)
Author:
vboxsync
Message:

DevATA: Working on converting it to new PDM device model. bugref:9218

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DevATA.cpp

    r81765 r81801  
    538538    uint8_t             Alignment3[1]; /**< Explicit padding of the 1 byte gap. */
    539539    /** Magic delay before triggering interrupts in DMA mode. */
    540     uint32_t            DelayIRQMillies;
     540    uint32_t            msDelayIRQ;
    541541    /** The event semaphore the thread is waiting on during suspended I/O. */
    542542    RTSEMEVENT          SuspendIOSem;
     
    39553955            s->iLUN, s->uATARegNSector, s->uATARegSelect & 0x0f));
    39563956    ataR3LockLeave(pCtl);
    3957     RTThreadSleep(pCtl->DelayIRQMillies);
     3957    RTThreadSleep(pCtl->msDelayIRQ);
    39583958    ataR3LockEnter(pCtl);
    39593959    ataR3CmdOK(s, ATA_STAT_SEEK);
     
    39693969    LogFlowFunc(("\n"));
    39703970    ataR3LockLeave(pCtl);
    3971     RTThreadSleep(pCtl->DelayIRQMillies);
     3971    RTThreadSleep(pCtl->msDelayIRQ);
    39723972    ataR3LockEnter(pCtl);
    39733973    ataR3CmdOK(s, ATA_STAT_SEEK);
     
    57595759                if (   iOriginalSourceSink == ATAFN_SS_WRITE_SECTORS
    57605760                    && s->cbTotalTransfer == 0
    5761                     && pCtl->DelayIRQMillies)
     5761                    && pCtl->msDelayIRQ)
    57625762                {
    57635763                    /* Delay IRQ for writing. Required to get the Win2K
     
    57675767                    Log(("%s: delay IRQ hack\n", __FUNCTION__));
    57685768                    ataR3LockLeave(pCtl);
    5769                     RTThreadSleep(pCtl->DelayIRQMillies);
     5769                    RTThreadSleep(pCtl->msDelayIRQ);
    57705770                    ataR3LockEnter(pCtl);
    57715771                }
     
    73887388static DECLCALLBACK(int) ataR3Destruct(PPDMDEVINS pDevIns)
    73897389{
     7390    PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns);
    73907391    PCIATAState    *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *);
    73917392    int             rc;
    73927393
    73937394    Log(("ataR3Destruct\n"));
    7394     PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns);
    73957395
    73967396    /*
     
    74807480    char szType[20];
    74817481
    7482     int rc = CFGMR3QueryStringDef(pCfg, "Type", &szType[0], sizeof(szType), "PIIX4");
     7482    int rc = pDevIns->pHlpR3->pfnCFGMQueryStringDef(pCfg, "Type", &szType[0], sizeof(szType), "PIIX4");
    74837483    if (RT_FAILURE(rc))
    74847484        return PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS,
     
    75057505static DECLCALLBACK(int) ataR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
    75067506{
     7507    PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
    75077508    PCIATAState    *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *);
     7509    PCPDMDEVHLPR3   pHlp = pDevIns->pHlpR3;
    75087510    PPDMIBASE       pBase;
    75097511    int             rc;
    7510     bool            fRCEnabled;
    7511     bool            fR0Enabled;
    7512     uint32_t        DelayIRQMillies;
     7512    uint32_t        msDelayIRQ;
    75137513
    75147514    Assert(iInstance == 0);
    7515     PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
    75167515
    75177516    /*
     
    75287527     * Validate and read configuration.
    75297528     */
    7530     if (!CFGMR3AreValuesValid(pCfg,
    7531                               "GCEnabled\0"
    7532                               "R0Enabled\0"
    7533                               "IRQDelay\0"
    7534                               "Type\0")
    7535         /** @todo || invalid keys */)
    7536         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
    7537                                 N_("PIIX3 configuration error: unknown option specified"));
    7538 
    7539     rc = CFGMR3QueryBoolDef(pCfg, "GCEnabled", &fRCEnabled, true);
     7529    PDMDEV_VALIDATE_CONFIG_RETURN(pDevIns, "IRQDelay|Type", "");
     7530
     7531    rc = pHlp->pfnCFGMQueryU32Def(pCfg, "IRQDelay", &msDelayIRQ, 0);
    75407532    if (RT_FAILURE(rc))
    7541         return PDMDEV_SET_ERROR(pDevIns, rc,
    7542                                 N_("PIIX3 configuration error: failed to read GCEnabled as boolean"));
    7543     Log(("%s: fRCEnabled=%d\n", __FUNCTION__, fRCEnabled));
    7544 
    7545     rc = CFGMR3QueryBoolDef(pCfg, "R0Enabled", &fR0Enabled, true);
    7546     if (RT_FAILURE(rc))
    7547         return PDMDEV_SET_ERROR(pDevIns, rc,
    7548                                 N_("PIIX3 configuration error: failed to read R0Enabled as boolean"));
    7549     Log(("%s: fR0Enabled=%d\n", __FUNCTION__, fR0Enabled));
    7550 
    7551     rc = CFGMR3QueryU32Def(pCfg, "IRQDelay", &DelayIRQMillies, 0);
    7552     if (RT_FAILURE(rc))
    7553         return PDMDEV_SET_ERROR(pDevIns, rc,
    7554                                 N_("PIIX3 configuration error: failed to read IRQDelay as integer"));
    7555     Log(("%s: DelayIRQMillies=%d\n", __FUNCTION__, DelayIRQMillies));
    7556     Assert(DelayIRQMillies < 50);
     7533        return PDMDEV_SET_ERROR(pDevIns, rc, N_("PIIX3 configuration error: failed to read IRQDelay as integer"));
     7534    Log(("%s: msDelayIRQ=%d\n", __FUNCTION__, msDelayIRQ));
     7535    Assert(msDelayIRQ < 50);
    75577536
    75587537    CHIPSET enmChipset = CHIPSET_PIIX3;
     
    75787557     * as it explicitly checks for PCI id for IDE controllers.
    75797558     */
    7580     switch (pThis->u8Type)
     7559    switch (enmChipset)
    75817560    {
    75827561        case CHIPSET_ICH6:
     
    76107589            break;
    76117590        default:
    7612             AssertMsgFailed(("Unsupported IDE chipset type: %d\n", pThis->u8Type));
     7591            AssertMsgFailed(("Unsupported IDE chipset type: %d\n", enmChipset));
    76137592    }
    76147593
     
    76327611
    76337612    pThis->pDevIns          = pDevIns;
    7634     pThis->fRCEnabled       = fRCEnabled;
    7635     pThis->fR0Enabled       = fR0Enabled;
     7613    pThis->fRCEnabled       = pDevIns->fRCEnabled;
     7614    pThis->fR0Enabled       = pDevIns->fR0Enabled;
    76367615    for (uint32_t i = 0; i < RT_ELEMENTS(pThis->aCts); i++)
    76377616    {
     
    76397618        pThis->aCts[i].pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns);
    76407619        pThis->aCts[i].pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
    7641         pThis->aCts[i].DelayIRQMillies = (uint32_t)DelayIRQMillies;
     7620        pThis->aCts[i].msDelayIRQ = msDelayIRQ;
    76427621        for (uint32_t j = 0; j < RT_ELEMENTS(pThis->aCts[i].aIfs); j++)
    76437622        {
     
    78367815
    78377816                    /* Get user config if present using defaults otherwise. */
    7838                     PCFGMNODE pCfgNode = CFGMR3GetChild(pCfg, s_apszCFGMKeys[i][j]);
    7839                     rc = CFGMR3QueryStringDef(pCfgNode, "SerialNumber", pIf->szSerialNumber, sizeof(pIf->szSerialNumber),
    7840                                               szSerial);
     7817                    PCFGMNODE pCfgNode = pHlp->pfnCFGMGetChild(pCfg, s_apszCFGMKeys[i][j]);
     7818                    rc = pHlp->pfnCFGMQueryStringDef(pCfgNode, "SerialNumber", pIf->szSerialNumber, sizeof(pIf->szSerialNumber),
     7819                                                     szSerial);
    78417820                    if (RT_FAILURE(rc))
    78427821                    {
     
    78487827                    }
    78497828
    7850                     rc = CFGMR3QueryStringDef(pCfgNode, "FirmwareRevision", pIf->szFirmwareRevision, sizeof(pIf->szFirmwareRevision),
    7851                                               "1.0");
     7829                    rc = pHlp->pfnCFGMQueryStringDef(pCfgNode, "FirmwareRevision", pIf->szFirmwareRevision,
     7830                                                     sizeof(pIf->szFirmwareRevision), "1.0");
    78527831                    if (RT_FAILURE(rc))
    78537832                    {
     
    78597838                    }
    78607839
    7861                     rc = CFGMR3QueryStringDef(pCfgNode, "ModelNumber", pIf->szModelNumber, sizeof(pIf->szModelNumber),
    7862                                               pIf->fATAPI ? "VBOX CD-ROM" : "VBOX HARDDISK");
     7840                    rc = pHlp->pfnCFGMQueryStringDef(pCfgNode, "ModelNumber", pIf->szModelNumber, sizeof(pIf->szModelNumber),
     7841                                                     pIf->fATAPI ? "VBOX CD-ROM" : "VBOX HARDDISK");
    78637842                    if (RT_FAILURE(rc))
    78647843                    {
     
    78737852                    if (pIf->fATAPI)
    78747853                    {
    7875                         rc = CFGMR3QueryStringDef(pCfgNode, "ATAPIVendorId", pIf->szInquiryVendorId, sizeof(pIf->szInquiryVendorId),
    7876                                                   "VBOX");
     7854                        rc = pHlp->pfnCFGMQueryStringDef(pCfgNode, "ATAPIVendorId", pIf->szInquiryVendorId,
     7855                                                         sizeof(pIf->szInquiryVendorId), "VBOX");
    78777856                        if (RT_FAILURE(rc))
    78787857                        {
     
    78847863                        }
    78857864
    7886                         rc = CFGMR3QueryStringDef(pCfgNode, "ATAPIProductId", pIf->szInquiryProductId, sizeof(pIf->szInquiryProductId),
    7887                                                   "CD-ROM");
     7865                        rc = pHlp->pfnCFGMQueryStringDef(pCfgNode, "ATAPIProductId", pIf->szInquiryProductId,
     7866                                                         sizeof(pIf->szInquiryProductId), "CD-ROM");
    78887867                        if (RT_FAILURE(rc))
    78897868                        {
     
    78957874                        }
    78967875
    7897                         rc = CFGMR3QueryStringDef(pCfgNode, "ATAPIRevision", pIf->szInquiryRevision, sizeof(pIf->szInquiryRevision),
    7898                                                   "1.0");
     7876                        rc = pHlp->pfnCFGMQueryStringDef(pCfgNode, "ATAPIRevision", pIf->szInquiryRevision,
     7877                                                         sizeof(pIf->szInquiryRevision), "1.0");
    78997878                        if (RT_FAILURE(rc))
    79007879                        {
     
    79067885                        }
    79077886
    7908                         rc = CFGMR3QueryBoolDef(pCfgNode, "OverwriteInquiry", &pIf->fOverwriteInquiry, true);
     7887                        rc = pHlp->pfnCFGMQueryBoolDef(pCfgNode, "OverwriteInquiry", &pIf->fOverwriteInquiry, true);
    79097888                        if (RT_FAILURE(rc))
    79107889                            return PDMDEV_SET_ERROR(pDevIns, rc,
     
    79587937            AssertLogRelRCReturn(rc, rc);
    79597938
    7960             if (fRCEnabled)
     7939            if (pDevIns->fRCEnabled)
    79617940            {
    79627941                rc = PDMDevHlpIOPortRegisterRC(pDevIns, pThis->aCts[i].IOPortBase1, 8, (RTGCPTR)i,
     
    79687947            }
    79697948
    7970             if (fR0Enabled)
     7949            if (pDevIns->fR0Enabled)
    79717950            {
    79727951                rc = PDMDevHlpIOPortRegisterR0(pDevIns, pThis->aCts[i].IOPortBase1, 8, (RTR0PTR)i,
     
    79897968
    79907969            AssertLogRelRCReturn(rc, rc);
    7991             if (fRCEnabled)
     7970            if (pDevIns->fRCEnabled)
    79927971            {
    79937972                rc = PDMDevHlpIOPortRegisterRC(pDevIns, pThis->aCts[i].IOPortBase1, 1, (RTGCPTR)i,
     
    80007979            }
    80017980
    8002             if (fR0Enabled)
     7981            if (pDevIns->fR0Enabled)
    80037982            {
    80047983    #if 0
     
    80218000                return PDMDEV_SET_ERROR(pDevIns, rc, N_("PIIX3 cannot register base2 I/O handlers"));
    80228001
    8023             if (fRCEnabled)
     8002            if (pDevIns->fRCEnabled)
    80248003            {
    80258004                rc = PDMDevHlpIOPortRegisterRC(pDevIns, pThis->aCts[i].IOPortBase2, 1, (RTGCPTR)i,
     
    80288007                    return PDMDEV_SET_ERROR(pDevIns, rc, N_("PIIX3 cannot register base2 I/O handlers (GC)"));
    80298008            }
    8030             if (fR0Enabled)
     8009            if (pDevIns->fR0Enabled)
    80318010            {
    80328011                rc = PDMDevHlpIOPortRegisterR0(pDevIns, pThis->aCts[i].IOPortBase2, 1, (RTR0PTR)i,
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