aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-12-05 02:43:06 -0500
committerJeff Garzik <jeff@garzik.org>2008-01-23 05:24:14 -0500
commitceb0c642624f634c5b4f46b0e22df19be87a2e53 (patch)
treea55adf01b6c00b4724a468a52fce03704bf5109f
parent0dc36888d4422140f9eaf50f24953ec109f750a3 (diff)
libata: add ATAPI_* cmd types and implement atapi_cmd_type()
Add ATAPI command types - ATAPI_READ, WRITE, RW_BUF, READ_CD and MISC, and implement atapi_cmd_type() which takes SCSI opcode and returns to which class the opcode belongs. This will be used later to improve ATAPI handling. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--include/linux/libata.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index cc4eaef6f889..03afcd63202d 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -35,6 +35,7 @@
35#include <linux/workqueue.h> 35#include <linux/workqueue.h>
36#include <scsi/scsi_host.h> 36#include <scsi/scsi_host.h>
37#include <linux/acpi.h> 37#include <linux/acpi.h>
38#include <linux/cdrom.h>
38 39
39/* 40/*
40 * Define if arch has non-standard setup. This is a _PCI_ standard 41 * Define if arch has non-standard setup. This is a _PCI_ standard
@@ -346,6 +347,12 @@ enum {
346 ATA_DMA_MASK_ATA = (1 << 0), /* DMA on ATA Disk */ 347 ATA_DMA_MASK_ATA = (1 << 0), /* DMA on ATA Disk */
347 ATA_DMA_MASK_ATAPI = (1 << 1), /* DMA on ATAPI */ 348 ATA_DMA_MASK_ATAPI = (1 << 1), /* DMA on ATAPI */
348 ATA_DMA_MASK_CFA = (1 << 2), /* DMA on CF Card */ 349 ATA_DMA_MASK_CFA = (1 << 2), /* DMA on CF Card */
350
351 /* ATAPI command types */
352 ATAPI_READ = 0, /* READs */
353 ATAPI_WRITE = 1, /* WRITEs */
354 ATAPI_READ_CD = 2, /* READ CD [MSF] */
355 ATAPI_MISC = 3, /* the rest */
349}; 356};
350 357
351enum ata_xfer_mask { 358enum ata_xfer_mask {
@@ -1408,6 +1415,27 @@ static inline int ata_try_flush_cache(const struct ata_device *dev)
1408 ata_id_has_flush_ext(dev->id); 1415 ata_id_has_flush_ext(dev->id);
1409} 1416}
1410 1417
1418static inline int atapi_cmd_type(u8 opcode)
1419{
1420 switch (opcode) {
1421 case GPCMD_READ_10:
1422 case GPCMD_READ_12:
1423 return ATAPI_READ;
1424
1425 case GPCMD_WRITE_10:
1426 case GPCMD_WRITE_12:
1427 case GPCMD_WRITE_AND_VERIFY_10:
1428 return ATAPI_WRITE;
1429
1430 case GPCMD_READ_CD:
1431 case GPCMD_READ_CD_MSF:
1432 return ATAPI_READ_CD;
1433
1434 default:
1435 return ATAPI_MISC;
1436 }
1437}
1438
1411static inline unsigned int ac_err_mask(u8 status) 1439static inline unsigned int ac_err_mask(u8 status)
1412{ 1440{
1413 if (status & (ATA_BUSY | ATA_DRQ)) 1441 if (status & (ATA_BUSY | ATA_DRQ))