Name

ata_scsi_translate — Translate then issue SCSI command to ATA device

Synopsis

void ata_scsi_translate (struct ata_port *  ap,
 struct ata_device *  dev,
 struct scsi_cmnd *  cmd,
 void (* done) (struct scsi_cmnd *),
 ata_xlat_func_t  xlat_func);

Arguments

ap

ATA port to which the command is addressed

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_set lock)