VirtualBox

Changeset 3237 in vbox


Ignore:
Timestamp:
Jun 22, 2007 8:21:36 PM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
22229
Message:

Set size and version after memsetting the VMMDev RAM on reset. Patched up the error handling in the constructor.

File:
1 edited

Legend:

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

    r3110 r3237  
    16491649     * Initialize data (most of it anyway).
    16501650     */
     1651    /* Save PDM device instance data for future reference. */
     1652    pData->pDevIns = pDevIns;
     1653
    16511654    /* PCI vendor, just a free bogus value */
    16521655    pData->dev.config[0x00] = 0xee;
     
    16681671     */
    16691672    rc = PDMDevHlpIOPortRegister(pDevIns, RTLOG_DEBUG_PORT, 1, NULL, vmmdevBackdoorLog, NULL, NULL, NULL, "VMMDev backdoor logging");
     1673    AssertRCReturn(rc, rc);
    16701674
    16711675#ifdef TIMESYNC_BACKDOOR
     
    16741678     */
    16751679    rc = PDMDevHlpIOPortRegister(pDevIns, 0x505, 1, NULL, vmmdevTimesyncBackdoorWrite, vmmdevTimesyncBackdoorRead, NULL, NULL, "VMMDev timesync backdoor");
     1680    AssertRCReturn(rc, rc);
    16761681#endif
    16771682
     
    17121717#endif
    17131718
    1714    /*    * Get the corresponding connector interface
    1715     */
    1716    rc = PDMDevHlpDriverAttach(pDevIns, 0, &pData->Base, &pData->pDrvBase, "VMM Driver Port");
    1717    if (VBOX_SUCCESS(rc))
    1718    {
    1719        pData->pDrv = (PPDMIVMMDEVCONNECTOR)pData->pDrvBase->pfnQueryInterface(pData->pDrvBase, PDMINTERFACE_VMMDEV_CONNECTOR);
    1720        if (!pData->pDrv)
    1721        {
    1722            AssertMsgFailed(("LUN #0 doesn't have a VMMDev connector interface! rc=%Vrc\n", rc));
    1723            rc = VERR_PDM_MISSING_INTERFACE;
    1724        }
     1719    /*   
     1720     * Get the corresponding connector interface
     1721     */
     1722    rc = PDMDevHlpDriverAttach(pDevIns, 0, &pData->Base, &pData->pDrvBase, "VMM Driver Port");
     1723    if (VBOX_SUCCESS(rc))
     1724    {
     1725        pData->pDrv = (PPDMIVMMDEVCONNECTOR)pData->pDrvBase->pfnQueryInterface(pData->pDrvBase, PDMINTERFACE_VMMDEV_CONNECTOR);
     1726        if (!pData->pDrv)
     1727            AssertMsgFailedReturn(("LUN #0 doesn't have a VMMDev connector interface!\n"), VERR_PDM_MISSING_INTERFACE);
    17251728#ifdef VBOX_HGCM
    1726        else
    1727        {
    1728            pData->pHGCMDrv = (PPDMIHGCMCONNECTOR)pData->pDrvBase->pfnQueryInterface(pData->pDrvBase, PDMINTERFACE_HGCM_CONNECTOR);
    1729            if (!pData->pHGCMDrv)
    1730            {
    1731                Log(("LUN #0 doesn't have a HGCM connector interface, HGCM is not supported. rc=%Vrc\n", rc));
    1732                /* this is not actually an error, just means that there is no support for HGCM */
    1733            }
    1734        }
     1729        pData->pHGCMDrv = (PPDMIHGCMCONNECTOR)pData->pDrvBase->pfnQueryInterface(pData->pDrvBase, PDMINTERFACE_HGCM_CONNECTOR);
     1730        if (!pData->pHGCMDrv)
     1731        {
     1732            Log(("LUN #0 doesn't have a HGCM connector interface, HGCM is not supported. rc=%Vrc\n", rc));
     1733            /* this is not actually an error, just means that there is no support for HGCM */
     1734        }
    17351735#endif
    1736    }
    1737    else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
    1738    {
    1739        Log(("%s/%d: warning: no driver attached to LUN #0!\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance));
    1740        rc = VINF_SUCCESS;
    1741    }
    1742    else
    1743        AssertMsgFailed(("Failed to attach LUN #0! rc=%Vrc\n", rc));
    1744 
     1736    }
     1737    else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
     1738    {
     1739        Log(("%s/%d: warning: no driver attached to LUN #0!\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance));
     1740        rc = VINF_SUCCESS;
     1741    }
     1742    else
     1743        AssertMsgFailedReturn(("Failed to attach LUN #0! rc=%Vrc\n", rc), rc);
     1744
     1745    /*
     1746     * Register saved state and init the HGCM CmdList critsect.
     1747     */
    17451748    rc = PDMDevHlpSSMRegister(pDevIns, "VMMDev", iInstance, VMMDEV_SSM_VERSION, sizeof(*pData),
    1746                                           NULL, vmmdevSaveState, NULL,
    1747                                           NULL, vmmdevLoadState, vmmdevLoadStateDone);
    1748 
    1749     /* Save PDM device instance data for future reference. */
    1750     pData->pDevIns = pDevIns;
    1751 
     1749                              NULL, vmmdevSaveState, NULL,
     1750                              NULL, vmmdevLoadState, vmmdevLoadStateDone);
     1751    AssertRCReturn(rc, rc);
     1752
     1753#ifdef VBOX_HGCM
     1754    rc = RTCritSectInit(&pData->critsectHGCMCmdList);
     1755    AssertRCReturn(rc, rc);
     1756#endif /* VBOX_HGCM */
    17521757
    17531758    /*
     
    17561761    /** @todo freeing of the RAM. */
    17571762    rc = SUPPageAlloc(VMMDEV_RAM_SIZE >> PAGE_SHIFT, (void **)&pData->pVMMDevRAMHC);
    1758     if (VBOX_FAILURE(rc))
    1759     {
    1760         AssertMsgFailed(("VMMDev SUPPageAlloc(%#x,) -> %d\n", VMMDEV_RAM_SIZE, rc));
    1761     }
    1762    
    1763 #ifdef VBOX_HGCM
    1764     rc = RTCritSectInit(&pData->critsectHGCMCmdList);
    1765     AssertRC(rc);
    1766 #endif /* VBOX_HGCM */
     1763    AssertMsgRCReturn(rc, ("VMMDev SUPPageAlloc(%#x,) -> %Vrc\n", VMMDEV_RAM_SIZE, rc), rc);
    17671764
    17681765    /* initialize the VMMDev memory */
    1769     memset (pData->pVMMDevRAMHC, 0, sizeof (VMMDevMemory));
    17701766    pData->pVMMDevRAMHC->u32Size = sizeof (VMMDevMemory);
    17711767    pData->pVMMDevRAMHC->u32Version = VMMDEV_MEMORY_VERSION;
     
    18001796    if (pData->pVMMDevRAMHC)
    18011797    {
    1802         memset (pData->pVMMDevRAMHC, 0, sizeof (VMMDevMemory));
     1798        /* re-initialize the VMMDev memory */
     1799        memset (pData->pVMMDevRAMHC, 0, VMMDEV_RAM_SIZE);
     1800        pData->pVMMDevRAMHC->u32Size = sizeof (VMMDevMemory);
     1801        pData->pVMMDevRAMHC->u32Version = VMMDEV_MEMORY_VERSION;
    18031802    }
    18041803
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