diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/ata.h | 11 | ||||
| -rw-r--r-- | include/linux/libata.h | 29 |
2 files changed, 26 insertions, 14 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index d2873b732bb1..f512104a1a3f 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
| @@ -192,6 +192,7 @@ enum { | |||
| 192 | ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ | 192 | ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ |
| 193 | ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */ | 193 | ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */ |
| 194 | ATA_TFLAG_LBA = (1 << 4), /* enable LBA */ | 194 | ATA_TFLAG_LBA = (1 << 4), /* enable LBA */ |
| 195 | ATA_TFLAG_POLLING = (1 << 5), /* set nIEN to 1 and use polling */ | ||
| 195 | }; | 196 | }; |
| 196 | 197 | ||
| 197 | enum ata_tf_protocols { | 198 | enum ata_tf_protocols { |
| @@ -261,6 +262,8 @@ struct ata_taskfile { | |||
| 261 | ((u64) (id)[(n) + 1] << 16) | \ | 262 | ((u64) (id)[(n) + 1] << 16) | \ |
| 262 | ((u64) (id)[(n) + 0]) ) | 263 | ((u64) (id)[(n) + 0]) ) |
| 263 | 264 | ||
| 265 | #define ata_id_cdb_intr(id) (((id)[0] & 0x60) == 0x20) | ||
| 266 | |||
| 264 | static inline int ata_id_current_chs_valid(const u16 *id) | 267 | static inline int ata_id_current_chs_valid(const u16 *id) |
| 265 | { | 268 | { |
| 266 | /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command | 269 | /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command |
| @@ -290,6 +293,14 @@ static inline int is_atapi_taskfile(const struct ata_taskfile *tf) | |||
| 290 | (tf->protocol == ATA_PROT_ATAPI_DMA); | 293 | (tf->protocol == ATA_PROT_ATAPI_DMA); |
| 291 | } | 294 | } |
| 292 | 295 | ||
| 296 | static inline int is_multi_taskfile(struct ata_taskfile *tf) | ||
| 297 | { | ||
| 298 | return (tf->command == ATA_CMD_READ_MULTI) || | ||
| 299 | (tf->command == ATA_CMD_WRITE_MULTI) || | ||
| 300 | (tf->command == ATA_CMD_READ_MULTI_EXT) || | ||
| 301 | (tf->command == ATA_CMD_WRITE_MULTI_EXT); | ||
| 302 | } | ||
| 303 | |||
| 293 | static inline int ata_ok(u8 status) | 304 | static inline int ata_ok(u8 status) |
| 294 | { | 305 | { |
| 295 | return ((status & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ | ATA_ERR)) | 306 | return ((status & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ | ATA_ERR)) |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 83a83babff84..2929282beb40 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -101,6 +101,7 @@ enum { | |||
| 101 | ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */ | 101 | ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */ |
| 102 | ATA_DFLAG_LOCK_SECTORS = (1 << 2), /* don't adjust max_sectors */ | 102 | ATA_DFLAG_LOCK_SECTORS = (1 << 2), /* don't adjust max_sectors */ |
| 103 | ATA_DFLAG_LBA = (1 << 3), /* device supports LBA */ | 103 | ATA_DFLAG_LBA = (1 << 3), /* device supports LBA */ |
| 104 | ATA_DFLAG_CDB_INTR = (1 << 4), /* device asserts INTRQ when ready for CDB */ | ||
| 104 | 105 | ||
| 105 | ATA_DEV_UNKNOWN = 0, /* unknown device */ | 106 | ATA_DEV_UNKNOWN = 0, /* unknown device */ |
| 106 | ATA_DEV_ATA = 1, /* ATA device */ | 107 | ATA_DEV_ATA = 1, /* ATA device */ |
| @@ -119,8 +120,8 @@ enum { | |||
| 119 | ATA_FLAG_MMIO = (1 << 6), /* use MMIO, not PIO */ | 120 | ATA_FLAG_MMIO = (1 << 6), /* use MMIO, not PIO */ |
| 120 | ATA_FLAG_SATA_RESET = (1 << 7), /* use COMRESET */ | 121 | ATA_FLAG_SATA_RESET = (1 << 7), /* use COMRESET */ |
| 121 | ATA_FLAG_PIO_DMA = (1 << 8), /* PIO cmds via DMA */ | 122 | ATA_FLAG_PIO_DMA = (1 << 8), /* PIO cmds via DMA */ |
| 122 | ATA_FLAG_NOINTR = (1 << 9), /* FIXME: Remove this once | 123 | ATA_FLAG_PIO_POLLING = (1 << 9), /* use polling PIO if LLD |
| 123 | * proper HSM is in place. */ | 124 | * doesn't handle PIO interrupts */ |
| 124 | ATA_FLAG_DEBUGMSG = (1 << 10), | 125 | ATA_FLAG_DEBUGMSG = (1 << 10), |
| 125 | 126 | ||
| 126 | ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ | 127 | ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ |
| @@ -133,8 +134,8 @@ enum { | |||
| 133 | ATA_TMOUT_PIO = 30 * HZ, | 134 | ATA_TMOUT_PIO = 30 * HZ, |
| 134 | ATA_TMOUT_BOOT = 30 * HZ, /* hueristic */ | 135 | ATA_TMOUT_BOOT = 30 * HZ, /* hueristic */ |
| 135 | ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */ | 136 | ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */ |
| 136 | ATA_TMOUT_CDB = 30 * HZ, | 137 | ATA_TMOUT_DATAOUT = 30 * HZ, |
| 137 | ATA_TMOUT_CDB_QUICK = 5 * HZ, | 138 | ATA_TMOUT_DATAOUT_QUICK = 5 * HZ, |
| 138 | 139 | ||
| 139 | /* ATA bus states */ | 140 | /* ATA bus states */ |
| 140 | BUS_UNKNOWN = 0, | 141 | BUS_UNKNOWN = 0, |
| @@ -170,14 +171,16 @@ enum { | |||
| 170 | }; | 171 | }; |
| 171 | 172 | ||
| 172 | enum hsm_task_states { | 173 | enum hsm_task_states { |
| 173 | HSM_ST_UNKNOWN, | 174 | HSM_ST_UNKNOWN, /* state unknown */ |
| 174 | HSM_ST_IDLE, | 175 | HSM_ST_IDLE, /* no command on going */ |
| 175 | HSM_ST_POLL, | 176 | HSM_ST_POLL, /* same as HSM_ST, waits longer */ |
| 176 | HSM_ST_TMOUT, | 177 | HSM_ST_TMOUT, /* timeout */ |
| 177 | HSM_ST, | 178 | HSM_ST, /* (waiting the device to) transfer data */ |
| 178 | HSM_ST_LAST, | 179 | HSM_ST_LAST, /* (waiting the device to) complete command */ |
| 179 | HSM_ST_LAST_POLL, | 180 | HSM_ST_LAST_POLL, /* same as HSM_ST_LAST, waits longer */ |
| 180 | HSM_ST_ERR, | 181 | HSM_ST_ERR, /* error */ |
| 182 | HSM_ST_FIRST, /* (waiting the device to) | ||
| 183 | write CDB or first data block */ | ||
| 181 | }; | 184 | }; |
| 182 | 185 | ||
| 183 | enum ata_completion_errors { | 186 | enum ata_completion_errors { |
| @@ -345,8 +348,6 @@ struct ata_port { | |||
| 345 | struct ata_host_stats stats; | 348 | struct ata_host_stats stats; |
| 346 | struct ata_host_set *host_set; | 349 | struct ata_host_set *host_set; |
| 347 | 350 | ||
| 348 | struct work_struct packet_task; | ||
| 349 | |||
| 350 | struct work_struct pio_task; | 351 | struct work_struct pio_task; |
| 351 | unsigned int hsm_task_state; | 352 | unsigned int hsm_task_state; |
| 352 | unsigned long pio_task_timeout; | 353 | unsigned long pio_task_timeout; |
