VirtualBox

Changeset 75075 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Oct 25, 2018 2:33:23 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
126128
Message:

DevATA: Made RECALIBRATE and INITIALIZE DEVICE PARAMETERS commands asynchronous so that they could be slowed down. See bugref:5869

File:
1 edited

Legend:

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

    r72637 r75075  
    686686static bool ataR3TrimSS(ATADevState *);
    687687static bool ataR3PacketSS(ATADevState *);
     688static bool ataR3InitDevParmSS(ATADevState *);
     689static bool ataR3RecalibrateSS(ATADevState *);
    688690static bool atapiR3GetConfigurationSS(ATADevState *);
    689691static bool atapiR3GetEventStatusNotificationSS(ATADevState *);
     
    746748    ATAFN_SS_TRIM,
    747749    ATAFN_SS_PACKET,
     750    ATAFN_SS_INITIALIZE_DEVICE_PARAMETERS,
     751    ATAFN_SS_RECALIBRATE,
    748752    ATAFN_SS_ATAPI_GET_CONFIGURATION,
    749753    ATAFN_SS_ATAPI_GET_EVENT_STATUS_NOTIFICATION,
     
    781785    ataR3TrimSS,
    782786    ataR3PacketSS,
     787    ataR3InitDevParmSS,
     788    ataR3RecalibrateSS,
    783789    atapiR3GetConfigurationSS,
    784790    atapiR3GetEventStatusNotificationSS,
     
    38973903
    38983904
     3905static bool ataR3InitDevParmSS(ATADevState *s)
     3906{
     3907    PATACONTROLLER pCtl = ATADEVSTATE_2_CONTROLLER(s);
     3908
     3909    LogFlowFunc(("\n"));
     3910    LogRel(("ATA: LUN#%d: INITIALIZE DEVICE PARAMETERS: %u logical sectors, %u heads\n",
     3911            s->iLUN, s->uATARegNSector, s->uATARegSelect & 0x0f));
     3912    ataR3LockLeave(pCtl);
     3913    RTThreadSleep(pCtl->DelayIRQMillies);
     3914    ataR3LockEnter(pCtl);
     3915    ataR3CmdOK(s, ATA_STAT_SEEK);
     3916    ataHCSetIRQ(s);
     3917    return false;
     3918}
     3919
     3920
     3921static bool ataR3RecalibrateSS(ATADevState *s)
     3922{
     3923    PATACONTROLLER pCtl = ATADEVSTATE_2_CONTROLLER(s);
     3924
     3925    LogFlowFunc(("\n"));
     3926    ataR3LockLeave(pCtl);
     3927    RTThreadSleep(pCtl->DelayIRQMillies);
     3928    ataR3LockEnter(pCtl);
     3929    ataR3CmdOK(s, ATA_STAT_SEEK);
     3930    ataHCSetIRQ(s);
     3931    return false;
     3932}
     3933
     3934
    38993935static int ataR3TrimSectors(ATADevState *s, uint64_t u64Sector, uint32_t cSectors,
    39003936                            bool *pfRedo)
     
    40094045            if (s->fATAPI)
    40104046                goto abort_cmd;
    4011             RT_FALL_THRU();
     4047            ataR3StartTransfer(s, 0, PDMMEDIATXDIR_NONE, ATAFN_BT_NULL, ATAFN_SS_RECALIBRATE, false);
     4048            break;
    40124049        case ATA_INITIALIZE_DEVICE_PARAMETERS:
    4013             ataR3CmdOK(s, ATA_STAT_SEEK);
    4014             ataHCSetIRQ(s); /* Shortcut, do not use AIO thread. */
     4050            if (s->fATAPI)
     4051                goto abort_cmd;
     4052            ataR3StartTransfer(s, 0, PDMMEDIATXDIR_NONE, ATAFN_BT_NULL, ATAFN_SS_INITIALIZE_DEVICE_PARAMETERS, false);
    40154053            break;
    40164054        case ATA_SET_MULTIPLE_MODE:
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