aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/ata.h11
-rw-r--r--include/linux/libata.h29
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
197enum ata_tf_protocols { 198enum 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
264static inline int ata_id_current_chs_valid(const u16 *id) 267static 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
296static 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
293static inline int ata_ok(u8 status) 304static 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
172enum hsm_task_states { 173enum 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
183enum ata_completion_errors { 186enum 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;