linux/drivers/scsi/isci
Dan Williams b50102d3e9 [SCSI] isci: atapi support
Based on original implementation from Jiangbi Liu and Maciej Trela.

ATAPI transfers happen in two-to-three stages.  The two stage atapi
commands are those that include a dma data transfer.  The data transfer
portion of these operations is handled by the hardware packet-dma
acceleration.  The three-stage commands do not have a data transfer and
are handled without hardware assistance in raw frame mode.

stage1: transmit host-to-device fis to notify the device of an incoming
atapi cdb.  Upon reception of the pio-setup-fis repost the task_context
to perform the dma transfer of the cdb+data (go to stage3), or repost
the task_context to transmit the cdb as a raw frame (go to stage 2).

stage2: wait for hardware notification of the cdb transmission and then
go to stage 3.

stage3: wait for the arrival of the terminating device-to-host fis and
terminate the command.

To keep the implementation simple we only support ATAPI packet-dma
protocol (for commands with data) to avoid needing to handle the data
transfer manually (like we do for SATA-PIO).  This may affect
compatibility for a small number of devices (see
ATA_HORKAGE_ATAPI_MOD16_DMA).

If the data-transfer underruns, or encounters an error the
device-to-host fis is expected to arrive in the unsolicited frame queue
to pass to libata for disposition.  However, in the DONE_UNEXP_FIS (data
underrun) case it appears we need to craft a response.  In the
DONE_REG_ERR case we do receive the UF and propagate it to libsas.

Signed-off-by: Maciej Trela <maciej.trela@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
2011-10-02 13:20:03 -05:00
..
firmware isci: Added support for C0 to SCU Driver 2011-07-03 04:04:50 -07:00
host.c [SCSI] isci: initial sgpio write support 2011-09-22 15:01:56 +04:00
host.h [SCSI] isci: initial sgpio write support 2011-09-22 15:01:56 +04:00
init.c [SCSI] isci: initial sgpio write support 2011-09-22 15:01:56 +04:00
isci.h [SCSI] isci: fix support for large smp requests 2011-10-02 13:07:17 -05:00
Makefile isci: merge sata.[ch] into request.c 2011-07-03 04:04:52 -07:00
phy.c [SCSI] isci: change sas phy timeouts from 54us to 59us 2011-08-23 19:52:14 -07:00
phy.h isci: kill 'get/set' macros 2011-07-03 04:04:52 -07:00
port_config.c [SCSI] isci: fix missed unlock in apc_agent_timeout() 2011-10-02 13:08:00 -05:00
port.c isci: kill 'get/set' macros 2011-07-03 04:04:52 -07:00
port.h isci: kill 'get/set' macros 2011-07-03 04:04:52 -07:00
probe_roms.c [SCSI] isci: fix checkpatch errors 2011-07-03 14:26:24 -05:00
probe_roms.h isci: retire scic_sds_ and scic_ prefixes 2011-07-03 04:04:52 -07:00
registers.h [SCSI] isci: fix sgpio register definitions 2011-09-22 15:00:56 +04:00
remote_device.c [SCSI] isci: atapi support 2011-10-02 13:20:03 -05:00
remote_device.h [SCSI] isci: atapi support 2011-10-02 13:20:03 -05:00
remote_node_context.c isci: kill 'get/set' macros 2011-07-03 04:04:52 -07:00
remote_node_context.h isci: kill 'get/set' macros 2011-07-03 04:04:52 -07:00
remote_node_table.c isci: retire scic_sds_ and scic_ prefixes 2011-07-03 04:04:52 -07:00
remote_node_table.h isci: retire scic_sds_ and scic_ prefixes 2011-07-03 04:04:52 -07:00
request.c [SCSI] isci: atapi support 2011-10-02 13:20:03 -05:00
request.h [SCSI] isci: atapi support 2011-10-02 13:20:03 -05:00
sas.h [SCSI] isci: fix support for large smp requests 2011-10-02 13:07:17 -05:00
scu_completion_codes.h isci: uplevel register hardware data structures and unsolicited frame handling 2011-07-03 04:04:47 -07:00
scu_event_codes.h isci: uplevel register hardware data structures and unsolicited frame handling 2011-07-03 04:04:47 -07:00
scu_remote_node_context.h isci: move remote_device handling out of the core 2011-07-03 04:00:38 -07:00
scu_task_context.h isci: uplevel register hardware data structures and unsolicited frame handling 2011-07-03 04:04:47 -07:00
task.c [SCSI] libsas: export sas_alloc_task() 2011-08-27 08:35:13 -06:00
task.h isci: merge sata.[ch] into request.c 2011-07-03 04:04:52 -07:00
unsolicited_frame_control.c [SCSI] isci: fix 32-bit operation when CONFIG_HIGHMEM64G=n 2011-08-23 19:50:27 -07:00
unsolicited_frame_control.h [SCSI] isci: fix 32-bit operation when CONFIG_HIGHMEM64G=n 2011-08-23 19:50:27 -07:00