10_libata_ahci-atapi.patch
This patch adds ATAPI support to ahci driver. This currently
doesn't work. I'll write a reply to this thread to tell more
about this. However, it at least shows that NCQ ATAPI error
handling works.
Signed-off-by: Tejun Heo <[EMAIL PROTECTED]>
ahci.c | 18 ++++++++++--------
1 files changed, 10 insertions(+), 8 deletions(-)
Index: work/drivers/scsi/ahci.c
===================================================================
--- work.orig/drivers/scsi/ahci.c 2005-07-07 22:08:37.000000000 +0900
+++ work/drivers/scsi/ahci.c 2005-07-07 22:08:37.000000000 +0900
@@ -543,14 +543,22 @@ static void ahci_qc_prep(struct ata_queu
{
struct ahci_port_priv *pp = qc->ap->private_data;
const u32 cmd_fis_len = 5; /* five dwords */
+ void *cmd_tbl;
dma_addr_t cmd_tbl_dma;
u32 opts;
int offset;
/*
- * Fill in command slot information
+ * the tag determines the offset into the allocated cmd table
*/
+ offset = qc->tag * AHCI_CMD_TOTAL;
+
+ cmd_tbl = pp->cmd_tbl + offset;
+ cmd_tbl_dma = pp->cmd_tbl_dma + offset;
+ /*
+ * Fill in command slot information
+ */
opts = (qc->n_elem << 16) | cmd_fis_len;
if (qc->tf.flags & ATA_TFLAG_WRITE)
opts |= AHCI_CMD_WRITE;
@@ -559,6 +567,7 @@ static void ahci_qc_prep(struct ata_queu
case ATA_PROT_ATAPI:
case ATA_PROT_ATAPI_NODATA:
case ATA_PROT_ATAPI_DMA:
+ memcpy(cmd_tbl + 0x40, qc->cdb, qc->ap->cdb_len);
opts |= AHCI_CMD_ATAPI;
break;
@@ -567,13 +576,6 @@ static void ahci_qc_prep(struct ata_queu
break;
}
- /*
- * the tag determines the offset into the allocated cmd table
- */
- offset = qc->tag * AHCI_CMD_TOTAL;
-
- cmd_tbl_dma = pp->cmd_tbl_dma + offset;
-
pp->cmd_slot[qc->tag].opts = cpu_to_le32(opts);
pp->cmd_slot[qc->tag].status = 0;
pp->cmd_slot[qc->tag].tbl_addr = cpu_to_le32(cmd_tbl_dma & 0xffffffff);
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html