ata_scsi_translate
Prev | Chapter 6. libata SCSI translation/emulation | Next

## Name

ata_scsi_translate — Translate then issue SCSI command to ATA device

## Synopsis

`int ata_scsi_translate (` | struct ata_device * | dev,
| struct scsi_cmnd * | cmd,
| void (* | done`(`struct scsi_cmnd *`)`,
| ata_xlat_func_t | xlat_func`)`;

## Arguments

`dev`

  ATA device to which the command is addressed

`cmd`

  SCSI command to execute

`done`

  SCSI command completion function

`xlat_func`

  Actor which translates `cmd` to an ATA taskfile

## Description

Our ->`queuecommand` function has decided that the SCSI command issued can be directly translated into an ATA command, rather than handled internally.

This function sets up an ata_queued_cmd structure for the SCSI command, and sends that ata_queued_cmd to the hardware.

The xlat_func argument (actor) returns 0 if ready to execute ATA command, else 1 to finish translation. If 1 is returned then cmd->result (and possibly cmd->sense_buffer) are assumed to be set reflecting an error condition or clean (early) termination.

## LOCKING

spin_lock_irqsave(host lock)

## RETURNS

0 on success, SCSI_ML_QUEUE_DEVICE_BUSY if the command needs to be deferred.

Prev | Up | Next
ata_scmd_need_defer | Home | ata_scsi_rbuf_get