diff options
author | Tejun Heo <htejun@gmail.com> | 2007-12-05 02:43:06 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2008-01-23 05:24:14 -0500 |
commit | ceb0c642624f634c5b4f46b0e22df19be87a2e53 (patch) | |
tree | a55adf01b6c00b4724a468a52fce03704bf5109f /include/linux | |
parent | 0dc36888d4422140f9eaf50f24953ec109f750a3 (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>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/libata.h | 28 |
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 | ||
351 | enum ata_xfer_mask { | 358 | enum 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 | ||
1418 | static 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 | |||
1411 | static inline unsigned int ac_err_mask(u8 status) | 1439 | static inline unsigned int ac_err_mask(u8 status) |
1412 | { | 1440 | { |
1413 | if (status & (ATA_BUSY | ATA_DRQ)) | 1441 | if (status & (ATA_BUSY | ATA_DRQ)) |