VirtualBox

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


Ignore:
Timestamp:
Sep 20, 2016 10:08:22 AM (8 years ago)
Author:
vboxsync
Message:

AHCI: Get rid of goto

File:
1 edited

Legend:

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

    r63690 r63909  
    45034503                            break;
    45044504                        default:
    4505                             goto error_cmd;
     4505                            atapiCmdErrorSimple(pAhciPort, pAhciReq, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_INV_FIELD_IN_CMD_PACKET);
     4506                            break;
    45064507                    }
    45074508                    break;
    45084509                case SCSI_PAGECONTROL_CHANGEABLE:
    4509                     goto error_cmd;
    45104510                case SCSI_PAGECONTROL_DEFAULT:
    4511                     goto error_cmd;
     4511                    atapiCmdErrorSimple(pAhciPort, pAhciReq, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_INV_FIELD_IN_CMD_PACKET);
     4512                    break;
    45124513                default:
    45134514                case SCSI_PAGECONTROL_SAVED:
     
    47604761                    break;
    47614762                default:
    4762                   error_cmd:
    47634763                    atapiCmdErrorSimple(pAhciPort, pAhciReq, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_INV_FIELD_IN_CMD_PACKET);
    47644764                    break;
     
    48404840    uint32_t cbTransfer = 0;
    48414841    AHCITXDIR enmTxDir = AHCITXDIR_NONE;
     4842    bool fSendCmd = false;
    48424843
    48434844    pbPacket = pAhciReq->aATAPICmd;
     
    48454846    {
    48464847        case SCSI_BLANK:
    4847             goto sendcmd;
     4848            fSendCmd = true;
     4849            break;
    48484850        case SCSI_CLOSE_TRACK_SESSION:
    4849             goto sendcmd;
     4851            fSendCmd = true;
     4852            break;
    48504853        case SCSI_ERASE_10:
    48514854            iATAPILBA = ataBE2H_U32(pbPacket + 2);
     
    48534856            Log2(("ATAPI PT: lba %d\n", iATAPILBA));
    48544857            enmTxDir = AHCITXDIR_WRITE;
    4855             goto sendcmd;
     4858            fSendCmd = true;
     4859            break;
    48564860        case SCSI_FORMAT_UNIT:
    48574861            cbTransfer = pAhciReq->cmdFis[AHCI_CMDFIS_CYLL] | (pAhciReq->cmdFis[AHCI_CMDFIS_CYLH] << 8); /* use ATAPI transfer length */
    48584862            enmTxDir = AHCITXDIR_WRITE;
    4859             goto sendcmd;
     4863            fSendCmd = true;
     4864            break;
    48604865        case SCSI_GET_CONFIGURATION:
    48614866            cbTransfer = ataBE2H_U16(pbPacket + 7);
    48624867            enmTxDir = AHCITXDIR_READ;
    4863             goto sendcmd;
     4868            fSendCmd = true;
     4869            break;
    48644870        case SCSI_GET_EVENT_STATUS_NOTIFICATION:
    48654871            cbTransfer = ataBE2H_U16(pbPacket + 7);
     
    48714877            }
    48724878            enmTxDir = AHCITXDIR_READ;
    4873             goto sendcmd;
     4879            fSendCmd = true;
     4880            break;
    48744881        case SCSI_GET_PERFORMANCE:
    48754882            cbTransfer = pAhciReq->cmdFis[AHCI_CMDFIS_CYLL] | (pAhciReq->cmdFis[AHCI_CMDFIS_CYLH] << 8); /* use ATAPI transfer length */
    48764883            enmTxDir = AHCITXDIR_READ;
    4877             goto sendcmd;
     4884            fSendCmd = true;
     4885            break;
    48784886        case SCSI_INQUIRY:
    48794887            cbTransfer = ataBE2H_U16(pbPacket + 3);
    48804888            enmTxDir = AHCITXDIR_READ;
    4881             goto sendcmd;
     4889            fSendCmd = true;
     4890            break;
    48824891        case SCSI_LOAD_UNLOAD_MEDIUM:
    4883             goto sendcmd;
     4892            fSendCmd = true;
     4893            break;
    48844894        case SCSI_MECHANISM_STATUS:
    48854895            cbTransfer = ataBE2H_U16(pbPacket + 8);
    48864896            enmTxDir = AHCITXDIR_READ;
    4887             goto sendcmd;
     4897            fSendCmd = true;
     4898            break;
    48884899        case SCSI_MODE_SELECT_10:
    48894900            cbTransfer = ataBE2H_U16(pbPacket + 7);
    48904901            enmTxDir = AHCITXDIR_WRITE;
    4891             goto sendcmd;
     4902            fSendCmd = true;
     4903            break;
    48924904        case SCSI_MODE_SENSE_10:
    48934905            cbTransfer = ataBE2H_U16(pbPacket + 7);
    48944906            enmTxDir = AHCITXDIR_READ;
    4895             goto sendcmd;
     4907            fSendCmd = true;
     4908            break;
    48964909        case SCSI_PAUSE_RESUME:
    4897             goto sendcmd;
     4910            fSendCmd = true;
     4911            break;
    48984912        case SCSI_PLAY_AUDIO_10:
    4899             goto sendcmd;
     4913            fSendCmd = true;
     4914            break;
    49004915        case SCSI_PLAY_AUDIO_12:
    4901             goto sendcmd;
     4916            fSendCmd = true;
     4917            break;
    49024918        case SCSI_PLAY_AUDIO_MSF:
    4903             goto sendcmd;
     4919            fSendCmd = true;
     4920            break;
    49044921        case SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL:
    49054922            /** @todo do not forget to unlock when a VM is shut down */
    4906             goto sendcmd;
     4923            fSendCmd = true;
     4924            break;
    49074925        case SCSI_READ_10:
    49084926            iATAPILBA = ataBE2H_U32(pbPacket + 2);
     
    49124930            cbTransfer = cSectors * pAhciReq->cbATAPISector;
    49134931            enmTxDir = AHCITXDIR_READ;
    4914             goto sendcmd;
     4932            fSendCmd = true;
     4933            break;
    49154934        case SCSI_READ_12:
    49164935            iATAPILBA = ataBE2H_U32(pbPacket + 2);
     
    49204939            cbTransfer = cSectors * pAhciReq->cbATAPISector;
    49214940            enmTxDir = AHCITXDIR_READ;
    4922             goto sendcmd;
     4941            fSendCmd = true;
     4942            break;
    49234943        case SCSI_READ_BUFFER:
    49244944            cbTransfer = ataBE2H_U24(pbPacket + 6);
    49254945            enmTxDir = AHCITXDIR_READ;
    4926             goto sendcmd;
     4946            fSendCmd = true;
     4947            break;
    49274948        case SCSI_READ_BUFFER_CAPACITY:
    49284949            cbTransfer = ataBE2H_U16(pbPacket + 7);
    49294950            enmTxDir = AHCITXDIR_READ;
    4930             goto sendcmd;
     4951            fSendCmd = true;
     4952            break;
    49314953        case SCSI_READ_CAPACITY:
    49324954            cbTransfer = 8;
    49334955            enmTxDir = AHCITXDIR_READ;
    4934             goto sendcmd;
     4956            fSendCmd = true;
     4957            break;
    49354958        case SCSI_READ_CD:
    49364959        case SCSI_READ_CD_MSF:
     
    49845007            }
    49855008            enmTxDir = AHCITXDIR_READ;
    4986             goto sendcmd;
     5009            fSendCmd = true;
     5010            break;
    49875011        }
    49885012        case SCSI_READ_DISC_INFORMATION:
    49895013            cbTransfer = ataBE2H_U16(pbPacket + 7);
    49905014            enmTxDir = AHCITXDIR_READ;
    4991             goto sendcmd;
     5015            fSendCmd = true;
     5016            break;
    49925017        case SCSI_READ_DVD_STRUCTURE:
    49935018            cbTransfer = ataBE2H_U16(pbPacket + 8);
    49945019            enmTxDir = AHCITXDIR_READ;
    4995             goto sendcmd;
     5020            fSendCmd = true;
     5021            break;
    49965022        case SCSI_READ_FORMAT_CAPACITIES:
    49975023            cbTransfer = ataBE2H_U16(pbPacket + 7);
    49985024            enmTxDir = AHCITXDIR_READ;
    4999             goto sendcmd;
     5025            fSendCmd = true;
     5026            break;
    50005027        case SCSI_READ_SUBCHANNEL:
    50015028            cbTransfer = ataBE2H_U16(pbPacket + 7);
    50025029            enmTxDir = AHCITXDIR_READ;
    5003             goto sendcmd;
     5030            fSendCmd = true;
     5031            break;
    50045032        case SCSI_READ_TOC_PMA_ATIP:
    50055033            cbTransfer = ataBE2H_U16(pbPacket + 7);
    50065034            enmTxDir = AHCITXDIR_READ;
    5007             goto sendcmd;
     5035            fSendCmd = true;
     5036            break;
    50085037        case SCSI_READ_TRACK_INFORMATION:
    50095038            cbTransfer = ataBE2H_U16(pbPacket + 7);
    50105039            enmTxDir = AHCITXDIR_READ;
    5011             goto sendcmd;
     5040            fSendCmd = true;
     5041            break;
    50125042        case SCSI_REPAIR_TRACK:
    5013             goto sendcmd;
     5043            fSendCmd = true;
     5044            break;
    50145045        case SCSI_REPORT_KEY:
    50155046            cbTransfer = ataBE2H_U16(pbPacket + 8);
    50165047            enmTxDir = AHCITXDIR_READ;
    5017             goto sendcmd;
     5048            fSendCmd = true;
     5049            break;
    50185050        case SCSI_REQUEST_SENSE:
    50195051            cbTransfer = pbPacket[4];
     
    50265058            }
    50275059            enmTxDir = AHCITXDIR_READ;
    5028             goto sendcmd;
     5060            fSendCmd = true;
     5061            break;
    50295062        case SCSI_RESERVE_TRACK:
    5030             goto sendcmd;
     5063            fSendCmd = true;
     5064            break;
    50315065        case SCSI_SCAN:
    5032             goto sendcmd;
     5066            fSendCmd = true;
     5067            break;
    50335068        case SCSI_SEEK_10:
    5034             goto sendcmd;
     5069            fSendCmd = true;
     5070            break;
    50355071        case SCSI_SEND_CUE_SHEET:
    50365072            cbTransfer = ataBE2H_U24(pbPacket + 6);
    50375073            enmTxDir = AHCITXDIR_WRITE;
    5038             goto sendcmd;
     5074            fSendCmd = true;
     5075            break;
    50395076        case SCSI_SEND_DVD_STRUCTURE:
    50405077            cbTransfer = ataBE2H_U16(pbPacket + 8);
    50415078            enmTxDir = AHCITXDIR_WRITE;
    5042             goto sendcmd;
     5079            fSendCmd = true;
     5080            break;
    50435081        case SCSI_SEND_EVENT:
    50445082            cbTransfer = ataBE2H_U16(pbPacket + 8);
    50455083            enmTxDir = AHCITXDIR_WRITE;
    5046             goto sendcmd;
     5084            fSendCmd = true;
     5085            break;
    50475086        case SCSI_SEND_KEY:
    50485087            cbTransfer = ataBE2H_U16(pbPacket + 8);
    50495088            enmTxDir = AHCITXDIR_WRITE;
    5050             goto sendcmd;
     5089            fSendCmd = true;
     5090            break;
    50515091        case SCSI_SEND_OPC_INFORMATION:
    50525092            cbTransfer = ataBE2H_U16(pbPacket + 7);
    50535093            enmTxDir = AHCITXDIR_WRITE;
    5054             goto sendcmd;
     5094            fSendCmd = true;
     5095            break;
    50555096        case SCSI_SET_CD_SPEED:
    5056             goto sendcmd;
     5097            fSendCmd = true;
     5098            break;
    50575099        case SCSI_SET_READ_AHEAD:
    5058             goto sendcmd;
     5100            fSendCmd = true;
     5101            break;
    50595102        case SCSI_SET_STREAMING:
    50605103            cbTransfer = ataBE2H_U16(pbPacket + 9);
    50615104            enmTxDir = AHCITXDIR_WRITE;
    5062             goto sendcmd;
     5105            fSendCmd = true;
     5106            break;
    50635107        case SCSI_START_STOP_UNIT:
    5064             goto sendcmd;
     5108            fSendCmd = true;
     5109            break;
    50655110        case SCSI_STOP_PLAY_SCAN:
    5066             goto sendcmd;
     5111            fSendCmd = true;
     5112            break;
    50675113        case SCSI_SYNCHRONIZE_CACHE:
    5068             goto sendcmd;
     5114            fSendCmd = true;
     5115            break;
    50695116        case SCSI_TEST_UNIT_READY:
    5070             goto sendcmd;
     5117            fSendCmd = true;
     5118            break;
    50715119        case SCSI_VERIFY_10:
    5072             goto sendcmd;
     5120            fSendCmd = true;
     5121            break;
    50735122        case SCSI_WRITE_10:
    50745123        case SCSI_WRITE_AND_VERIFY_10:
     
    50825131            cbTransfer = cSectors * pAhciReq->cbATAPISector;
    50835132            enmTxDir = AHCITXDIR_WRITE;
    5084             goto sendcmd;
     5133            fSendCmd = true;
     5134            break;
    50855135        case SCSI_WRITE_12:
    50865136            iATAPILBA = ataBE2H_U32(pbPacket + 2);
     
    50935143            cbTransfer = cSectors * pAhciReq->cbATAPISector;
    50945144            enmTxDir = AHCITXDIR_WRITE;
    5095             goto sendcmd;
     5145            fSendCmd = true;
     5146            break;
    50965147        case SCSI_WRITE_BUFFER:
    50975148            switch (pbPacket[1] & 0x1f)
     
    51095160                    cbTransfer = ataBE2H_U16(pbPacket + 6);
    51105161                    enmTxDir = AHCITXDIR_WRITE;
    5111                     goto sendcmd;
     5162                    fSendCmd = true;
     5163                    break;
    51125164            }
    51135165            break;
     
    51155167            cbTransfer = ataBE2H_U32(pbPacket + 6);
    51165168            enmTxDir = AHCITXDIR_READ;
    5117             goto sendcmd;
     5169            fSendCmd = true;
     5170            break;
    51185171        case SCSI_REZERO_UNIT:
    51195172            /* Obsolete command used by cdrecord. What else would one expect?
     
    51285181            atapiCmdErrorSimple(pAhciPort, pAhciReq, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_ILLEGAL_OPCODE);
    51295182            break;
    5130         sendcmd:
    5131             /* Send a command to the drive, passing data in/out as required. */
    5132             Log2(("ATAPI PT: max size %d\n", cbTransfer));
    5133             if (cbTransfer == 0)
    5134                 enmTxDir = AHCITXDIR_NONE;
    5135             pAhciReq->enmTxDir = enmTxDir;
    5136             pAhciReq->cbTransfer = cbTransfer;
    5137             atapiDoTransfer(pAhciPort, pAhciReq, cbTransfer, ATAFN_SS_ATAPI_PASSTHROUGH);
     5183    }
     5184
     5185    if (fSendCmd)
     5186    {
     5187        /* Send a command to the drive, passing data in/out as required. */
     5188        Log2(("ATAPI PT: max size %d\n", cbTransfer));
     5189        if (cbTransfer == 0)
     5190            enmTxDir = AHCITXDIR_NONE;
     5191        pAhciReq->enmTxDir = enmTxDir;
     5192        pAhciReq->cbTransfer = cbTransfer;
     5193        atapiDoTransfer(pAhciPort, pAhciReq, cbTransfer, ATAFN_SS_ATAPI_PASSTHROUGH);
    51385194    }
    51395195
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