VirtualBox

Changeset 50294 in vbox


Ignore:
Timestamp:
Jan 30, 2014 6:27:35 PM (11 years ago)
Author:
vboxsync
Message:

AHCI: Fixes for hotplugging, should fix problems with Windows 7 guests

Location:
trunk/src/VBox/Devices
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/BIOS/ahci.c

    r48123 r50294  
    634634        uint8_t     removable;
    635635
     636        /* Clear all errors after the reset. */
     637        VBOXAHCI_PORT_WRITE_REG(ahci->iobase, u8Port, AHCI_REG_PORT_SERR, 0xffffffff);
     638
    636639        devcount_ahci = bios_dsk->ahci_devcnt;
    637640
  • trunk/src/VBox/Devices/Storage/DevAHCI.cpp

    r50283 r50294  
    13411341        if (u32Value & AHCI_PORT_CMD_ST)
    13421342        {
    1343             ahciLog(("%s: Engine starts\n", __FUNCTION__));
    1344 
    1345             /* Set engine state to running if there is a device attached. */
    1346             if (pAhciPort->pDrvBase)
     1343            /*
     1344             * Set engine state to running if there is a device attached and
     1345             * IS.PCS is clear.
     1346             */
     1347            if (   pAhciPort->pDrvBase
     1348                && !(pAhciPort->regIS & AHCI_PORT_IS_PCS))
     1349            {
     1350                ahciLog(("%s: Engine starts\n", __FUNCTION__));
    13471351                u32Value |= AHCI_PORT_CMD_CR;
     1352
     1353                /* If there is something in CI, kick the I/O thread. */
     1354                if (   pAhciPort->regCI > 0
     1355                    && ASMAtomicReadBool(&pAhciPort->fWrkThreadSleeping))
     1356                {
     1357                    ASMAtomicOrU32(&pAhciPort->u32TasksNew, pAhciPort->regCI);
     1358#ifdef IN_RC
     1359                    PDEVPORTNOTIFIERQUEUEITEM pItem = (PDEVPORTNOTIFIERQUEUEITEM)PDMQueueAlloc(ahci->CTX_SUFF(pNotifierQueue));
     1360                    AssertMsg(VALID_PTR(pItem), ("Allocating item for queue failed\n"));
     1361
     1362                    pItem->iPort = pAhciPort->iLUN;
     1363                    PDMQueueInsert(ahci->CTX_SUFF(pNotifierQueue), (PPDMQUEUEITEMCORE)pItem);
     1364#else
     1365                    LogFlowFunc(("Signal event semaphore\n"));
     1366                    int rc = SUPSemEventSignal(ahci->pSupDrvSession, pAhciPort->hEvtProcess);
     1367                    AssertRC(rc);
     1368#endif
     1369                }
     1370            }
     1371            else
     1372                u32Value &= ~AHCI_PORT_CMD_CR;
    13481373        }
    13491374        else
     
    76917716         */
    76927717        pAhciPort->regSSTS = 0;
     7718        pAhciPort->regSIG = 0;
    76937719        /*
    76947720         * Clear CR bit too to prevent submission of new commands when CI is written
     
    76967722         */
    76977723        ASMAtomicAndU32(&pAhciPort->regCMD, ~(AHCI_PORT_CMD_CPS | AHCI_PORT_CMD_CR));
    7698         ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_CPDS | AHCI_PORT_IS_PRCS);
    7699         ASMAtomicOrU32(&pAhciPort->regSERR, AHCI_PORT_SERR_N);
     7724        ASMAtomicOrU32(&pAhciPort->regIS, AHCI_PORT_IS_CPDS | AHCI_PORT_IS_PRCS | AHCI_PORT_IS_PCS);
     7725        ASMAtomicOrU32(&pAhciPort->regSERR, AHCI_PORT_SERR_X | AHCI_PORT_SERR_N);
    77007726        if (   (pAhciPort->regIE & AHCI_PORT_IE_CPDE)
    77017727            || (pAhciPort->regIE & AHCI_PORT_IE_PCE)
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