You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'irq-pio'
Conflicts: drivers/scsi/libata-core.c include/linux/libata.h
This commit is contained in:
+509
-322
File diff suppressed because it is too large
Load Diff
@@ -350,7 +350,7 @@ static void ata_qc_timeout(struct ata_queued_cmd *qc)
|
|||||||
qc->tf.command, drv_stat, host_stat);
|
qc->tf.command, drv_stat, host_stat);
|
||||||
|
|
||||||
/* complete taskfile transaction */
|
/* complete taskfile transaction */
|
||||||
qc->err_mask |= ac_err_mask(drv_stat);
|
qc->err_mask |= AC_ERR_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -455,13 +455,13 @@ static inline unsigned int adma_intr_pkt(struct ata_host_set *host_set)
|
|||||||
continue;
|
continue;
|
||||||
handled = 1;
|
handled = 1;
|
||||||
adma_enter_reg_mode(ap);
|
adma_enter_reg_mode(ap);
|
||||||
if (ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR))
|
if (ap->flags & ATA_FLAG_DISABLED)
|
||||||
continue;
|
continue;
|
||||||
pp = ap->private_data;
|
pp = ap->private_data;
|
||||||
if (!pp || pp->state != adma_state_pkt)
|
if (!pp || pp->state != adma_state_pkt)
|
||||||
continue;
|
continue;
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN))) {
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
|
||||||
if ((status & (aPERR | aPSD | aUIRQ)))
|
if ((status & (aPERR | aPSD | aUIRQ)))
|
||||||
qc->err_mask |= AC_ERR_OTHER;
|
qc->err_mask |= AC_ERR_OTHER;
|
||||||
else if (pp->pkt[0] != cDONE)
|
else if (pp->pkt[0] != cDONE)
|
||||||
@@ -480,13 +480,13 @@ static inline unsigned int adma_intr_mmio(struct ata_host_set *host_set)
|
|||||||
for (port_no = 0; port_no < host_set->n_ports; ++port_no) {
|
for (port_no = 0; port_no < host_set->n_ports; ++port_no) {
|
||||||
struct ata_port *ap;
|
struct ata_port *ap;
|
||||||
ap = host_set->ports[port_no];
|
ap = host_set->ports[port_no];
|
||||||
if (ap && (!(ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR)))) {
|
if (ap && (!(ap->flags & ATA_FLAG_DISABLED))) {
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
struct adma_port_priv *pp = ap->private_data;
|
struct adma_port_priv *pp = ap->private_data;
|
||||||
if (!pp || pp->state != adma_state_mmio)
|
if (!pp || pp->state != adma_state_mmio)
|
||||||
continue;
|
continue;
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN))) {
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
|
||||||
|
|
||||||
/* check main status, clearing INTRQ */
|
/* check main status, clearing INTRQ */
|
||||||
u8 status = ata_check_status(ap);
|
u8 status = ata_check_status(ap);
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ enum {
|
|||||||
MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */
|
MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */
|
||||||
MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
||||||
ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO |
|
ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO |
|
||||||
ATA_FLAG_NO_ATAPI),
|
ATA_FLAG_PIO_POLLING),
|
||||||
MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE,
|
MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE,
|
||||||
|
|
||||||
CRQB_FLAG_READ = (1 << 0),
|
CRQB_FLAG_READ = (1 << 0),
|
||||||
@@ -1396,7 +1396,7 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR))
|
if (ap && (ap->flags & ATA_FLAG_DISABLED))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
err_mask = ac_err_mask(ata_status);
|
err_mask = ac_err_mask(ata_status);
|
||||||
@@ -1417,7 +1417,7 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
|
|||||||
VPRINTK("port %u IRQ found for qc, "
|
VPRINTK("port %u IRQ found for qc, "
|
||||||
"ata_status 0x%x\n", port,ata_status);
|
"ata_status 0x%x\n", port,ata_status);
|
||||||
/* mark qc status appropriately */
|
/* mark qc status appropriately */
|
||||||
if (!(qc->tf.ctl & ATA_NIEN)) {
|
if (!(qc->tf.flags & ATA_TFLAG_POLLING)) {
|
||||||
qc->err_mask |= err_mask;
|
qc->err_mask |= err_mask;
|
||||||
ata_qc_complete(qc);
|
ata_qc_complete(qc);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -279,11 +279,11 @@ static irqreturn_t nv_interrupt (int irq, void *dev_instance,
|
|||||||
|
|
||||||
ap = host_set->ports[i];
|
ap = host_set->ports[i];
|
||||||
if (ap &&
|
if (ap &&
|
||||||
!(ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR))) {
|
!(ap->flags & ATA_FLAG_DISABLED)) {
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
|
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN)))
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
|
||||||
handled += ata_host_intr(ap, qc);
|
handled += ata_host_intr(ap, qc);
|
||||||
else
|
else
|
||||||
// No request pending? Clear interrupt status
|
// No request pending? Clear interrupt status
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ enum {
|
|||||||
PDC_RESET = (1 << 11), /* HDMA reset */
|
PDC_RESET = (1 << 11), /* HDMA reset */
|
||||||
|
|
||||||
PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST |
|
PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST |
|
||||||
ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI,
|
ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI |
|
||||||
|
ATA_FLAG_PIO_POLLING,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -534,11 +535,11 @@ static irqreturn_t pdc_interrupt (int irq, void *dev_instance, struct pt_regs *r
|
|||||||
ap = host_set->ports[i];
|
ap = host_set->ports[i];
|
||||||
tmp = mask & (1 << (i + 1));
|
tmp = mask & (1 << (i + 1));
|
||||||
if (tmp && ap &&
|
if (tmp && ap &&
|
||||||
!(ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR))) {
|
!(ap->flags & ATA_FLAG_DISABLED)) {
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
|
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN)))
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
|
||||||
handled += pdc_host_intr(ap, qc);
|
handled += pdc_host_intr(ap, qc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ static const struct ata_port_info qs_port_info[] = {
|
|||||||
.host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
.host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
||||||
ATA_FLAG_SATA_RESET |
|
ATA_FLAG_SATA_RESET |
|
||||||
//FIXME ATA_FLAG_SRST |
|
//FIXME ATA_FLAG_SRST |
|
||||||
ATA_FLAG_MMIO,
|
ATA_FLAG_MMIO | ATA_FLAG_PIO_POLLING,
|
||||||
.pio_mask = 0x10, /* pio4 */
|
.pio_mask = 0x10, /* pio4 */
|
||||||
.udma_mask = 0x7f, /* udma0-6 */
|
.udma_mask = 0x7f, /* udma0-6 */
|
||||||
.port_ops = &qs_ata_ops,
|
.port_ops = &qs_ata_ops,
|
||||||
@@ -394,14 +394,13 @@ static inline unsigned int qs_intr_pkt(struct ata_host_set *host_set)
|
|||||||
DPRINTK("SFF=%08x%08x: sCHAN=%u sHST=%d sDST=%02x\n",
|
DPRINTK("SFF=%08x%08x: sCHAN=%u sHST=%d sDST=%02x\n",
|
||||||
sff1, sff0, port_no, sHST, sDST);
|
sff1, sff0, port_no, sHST, sDST);
|
||||||
handled = 1;
|
handled = 1;
|
||||||
if (ap && !(ap->flags &
|
if (ap && !(ap->flags & ATA_FLAG_DISABLED)) {
|
||||||
(ATA_FLAG_DISABLED|ATA_FLAG_NOINTR))) {
|
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
struct qs_port_priv *pp = ap->private_data;
|
struct qs_port_priv *pp = ap->private_data;
|
||||||
if (!pp || pp->state != qs_state_pkt)
|
if (!pp || pp->state != qs_state_pkt)
|
||||||
continue;
|
continue;
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN))) {
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
|
||||||
switch (sHST) {
|
switch (sHST) {
|
||||||
case 0: /* successful CPB */
|
case 0: /* successful CPB */
|
||||||
case 3: /* device error */
|
case 3: /* device error */
|
||||||
@@ -428,13 +427,13 @@ static inline unsigned int qs_intr_mmio(struct ata_host_set *host_set)
|
|||||||
struct ata_port *ap;
|
struct ata_port *ap;
|
||||||
ap = host_set->ports[port_no];
|
ap = host_set->ports[port_no];
|
||||||
if (ap &&
|
if (ap &&
|
||||||
!(ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR))) {
|
!(ap->flags & ATA_FLAG_DISABLED)) {
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
struct qs_port_priv *pp = ap->private_data;
|
struct qs_port_priv *pp = ap->private_data;
|
||||||
if (!pp || pp->state != qs_state_mmio)
|
if (!pp || pp->state != qs_state_mmio)
|
||||||
continue;
|
continue;
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN))) {
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
|
||||||
|
|
||||||
/* check main status, clearing INTRQ */
|
/* check main status, clearing INTRQ */
|
||||||
u8 status = ata_check_status(ap);
|
u8 status = ata_check_status(ap);
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ static const struct ata_port_info pdc_port_info[] = {
|
|||||||
.sht = &pdc_sata_sht,
|
.sht = &pdc_sata_sht,
|
||||||
.host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
.host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
||||||
ATA_FLAG_SRST | ATA_FLAG_MMIO |
|
ATA_FLAG_SRST | ATA_FLAG_MMIO |
|
||||||
ATA_FLAG_NO_ATAPI,
|
ATA_FLAG_PIO_POLLING,
|
||||||
.pio_mask = 0x1f, /* pio0-4 */
|
.pio_mask = 0x1f, /* pio0-4 */
|
||||||
.mwdma_mask = 0x07, /* mwdma0-2 */
|
.mwdma_mask = 0x07, /* mwdma0-2 */
|
||||||
.udma_mask = 0x7f, /* udma0-6 ; FIXME */
|
.udma_mask = 0x7f, /* udma0-6 ; FIXME */
|
||||||
@@ -833,11 +833,11 @@ static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_re
|
|||||||
tmp = mask & (1 << i);
|
tmp = mask & (1 << i);
|
||||||
VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp);
|
VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp);
|
||||||
if (tmp && ap &&
|
if (tmp && ap &&
|
||||||
!(ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR))) {
|
!(ap->flags & ATA_FLAG_DISABLED)) {
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
|
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN)))
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
|
||||||
handled += pdc20621_host_intr(ap, qc, (i > 4),
|
handled += pdc20621_host_intr(ap, qc, (i > 4),
|
||||||
mmio_base);
|
mmio_base);
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-4
@@ -221,14 +221,21 @@ static irqreturn_t vsc_sata_interrupt (int irq, void *dev_instance,
|
|||||||
|
|
||||||
ap = host_set->ports[i];
|
ap = host_set->ports[i];
|
||||||
|
|
||||||
if (ap && !(ap->flags &
|
if (is_vsc_sata_int_err(i, int_status)) {
|
||||||
(ATA_FLAG_DISABLED|ATA_FLAG_NOINTR))) {
|
u32 err_status;
|
||||||
|
printk(KERN_DEBUG "%s: ignoring interrupt(s)\n", __FUNCTION__);
|
||||||
|
err_status = ap ? vsc_sata_scr_read(ap, SCR_ERROR) : 0;
|
||||||
|
vsc_sata_scr_write(ap, SCR_ERROR, err_status);
|
||||||
|
handled++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ap && !(ap->flags & ATA_FLAG_DISABLED)) {
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
|
|
||||||
qc = ata_qc_from_tag(ap, ap->active_tag);
|
qc = ata_qc_from_tag(ap, ap->active_tag);
|
||||||
if (qc && (!(qc->tf.ctl & ATA_NIEN))) {
|
if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
|
||||||
handled += ata_host_intr(ap, qc);
|
handled += ata_host_intr(ap, qc);
|
||||||
} else if (is_vsc_sata_int_err(i, int_status)) {
|
else if (is_vsc_sata_int_err(i, int_status)) {
|
||||||
/*
|
/*
|
||||||
* On some chips (i.e. Intel 31244), an error
|
* On some chips (i.e. Intel 31244), an error
|
||||||
* interrupt will sneak in at initialization
|
* interrupt will sneak in at initialization
|
||||||
|
|||||||
@@ -212,6 +212,7 @@ enum {
|
|||||||
ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */
|
ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */
|
||||||
ATA_TFLAG_LBA = (1 << 4), /* enable LBA */
|
ATA_TFLAG_LBA = (1 << 4), /* enable LBA */
|
||||||
ATA_TFLAG_FUA = (1 << 5), /* enable FUA */
|
ATA_TFLAG_FUA = (1 << 5), /* enable FUA */
|
||||||
|
ATA_TFLAG_POLLING = (1 << 6), /* set nIEN to 1 and use polling */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ata_tf_protocols {
|
enum ata_tf_protocols {
|
||||||
@@ -285,6 +286,8 @@ struct ata_taskfile {
|
|||||||
((u64) (id)[(n) + 1] << 16) | \
|
((u64) (id)[(n) + 1] << 16) | \
|
||||||
((u64) (id)[(n) + 0]) )
|
((u64) (id)[(n) + 0]) )
|
||||||
|
|
||||||
|
#define ata_id_cdb_intr(id) (((id)[0] & 0x60) == 0x20)
|
||||||
|
|
||||||
static inline unsigned int ata_id_major_version(const u16 *id)
|
static inline unsigned int ata_id_major_version(const u16 *id)
|
||||||
{
|
{
|
||||||
unsigned int mver;
|
unsigned int mver;
|
||||||
@@ -324,6 +327,15 @@ static inline int is_atapi_taskfile(const struct ata_taskfile *tf)
|
|||||||
(tf->protocol == ATA_PROT_ATAPI_DMA);
|
(tf->protocol == ATA_PROT_ATAPI_DMA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int is_multi_taskfile(struct ata_taskfile *tf)
|
||||||
|
{
|
||||||
|
return (tf->command == ATA_CMD_READ_MULTI) ||
|
||||||
|
(tf->command == ATA_CMD_WRITE_MULTI) ||
|
||||||
|
(tf->command == ATA_CMD_READ_MULTI_EXT) ||
|
||||||
|
(tf->command == ATA_CMD_WRITE_MULTI_EXT) ||
|
||||||
|
(tf->command == ATA_CMD_WRITE_MULTI_FUA_EXT);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int ata_ok(u8 status)
|
static inline int ata_ok(u8 status)
|
||||||
{
|
{
|
||||||
return ((status & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ | ATA_ERR))
|
return ((status & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ | ATA_ERR))
|
||||||
|
|||||||
+10
-14
@@ -124,6 +124,7 @@ enum {
|
|||||||
/* struct ata_device stuff */
|
/* struct ata_device stuff */
|
||||||
ATA_DFLAG_LBA = (1 << 0), /* device supports LBA */
|
ATA_DFLAG_LBA = (1 << 0), /* device supports LBA */
|
||||||
ATA_DFLAG_LBA48 = (1 << 1), /* device supports LBA48 */
|
ATA_DFLAG_LBA48 = (1 << 1), /* device supports LBA48 */
|
||||||
|
ATA_DFLAG_CDB_INTR = (1 << 2), /* device asserts INTRQ when ready for CDB */
|
||||||
ATA_DFLAG_CFG_MASK = (1 << 8) - 1,
|
ATA_DFLAG_CFG_MASK = (1 << 8) - 1,
|
||||||
|
|
||||||
ATA_DFLAG_PIO = (1 << 8), /* device currently in PIO mode */
|
ATA_DFLAG_PIO = (1 << 8), /* device currently in PIO mode */
|
||||||
@@ -147,9 +148,9 @@ enum {
|
|||||||
ATA_FLAG_PIO_DMA = (1 << 7), /* PIO cmds via DMA */
|
ATA_FLAG_PIO_DMA = (1 << 7), /* PIO cmds via DMA */
|
||||||
ATA_FLAG_PIO_LBA48 = (1 << 8), /* Host DMA engine is LBA28 only */
|
ATA_FLAG_PIO_LBA48 = (1 << 8), /* Host DMA engine is LBA28 only */
|
||||||
ATA_FLAG_IRQ_MASK = (1 << 9), /* Mask IRQ in PIO xfers */
|
ATA_FLAG_IRQ_MASK = (1 << 9), /* Mask IRQ in PIO xfers */
|
||||||
|
ATA_FLAG_PIO_POLLING = (1 << 10), /* use polling PIO if LLD
|
||||||
|
* doesn't handle PIO interrupts */
|
||||||
|
|
||||||
ATA_FLAG_NOINTR = (1 << 13), /* FIXME: Remove this once
|
|
||||||
* proper HSM is in place. */
|
|
||||||
ATA_FLAG_DEBUGMSG = (1 << 14),
|
ATA_FLAG_DEBUGMSG = (1 << 14),
|
||||||
ATA_FLAG_FLUSH_PORT_TASK = (1 << 15), /* flush port task */
|
ATA_FLAG_FLUSH_PORT_TASK = (1 << 15), /* flush port task */
|
||||||
|
|
||||||
@@ -178,11 +179,8 @@ enum {
|
|||||||
ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host_set only */
|
ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host_set only */
|
||||||
|
|
||||||
/* various lengths of time */
|
/* various lengths of time */
|
||||||
ATA_TMOUT_PIO = 30 * HZ,
|
|
||||||
ATA_TMOUT_BOOT = 30 * HZ, /* heuristic */
|
ATA_TMOUT_BOOT = 30 * HZ, /* heuristic */
|
||||||
ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* heuristic */
|
ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* heuristic */
|
||||||
ATA_TMOUT_CDB = 30 * HZ,
|
|
||||||
ATA_TMOUT_CDB_QUICK = 5 * HZ,
|
|
||||||
ATA_TMOUT_INTERNAL = 30 * HZ,
|
ATA_TMOUT_INTERNAL = 30 * HZ,
|
||||||
ATA_TMOUT_INTERNAL_QUICK = 5 * HZ,
|
ATA_TMOUT_INTERNAL_QUICK = 5 * HZ,
|
||||||
|
|
||||||
@@ -252,14 +250,13 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum hsm_task_states {
|
enum hsm_task_states {
|
||||||
HSM_ST_UNKNOWN,
|
HSM_ST_UNKNOWN, /* state unknown */
|
||||||
HSM_ST_IDLE,
|
HSM_ST_IDLE, /* no command on going */
|
||||||
HSM_ST_POLL,
|
HSM_ST, /* (waiting the device to) transfer data */
|
||||||
HSM_ST_TMOUT,
|
HSM_ST_LAST, /* (waiting the device to) complete command */
|
||||||
HSM_ST,
|
HSM_ST_ERR, /* error */
|
||||||
HSM_ST_LAST,
|
HSM_ST_FIRST, /* (waiting the device to)
|
||||||
HSM_ST_LAST_POLL,
|
write CDB or first data block */
|
||||||
HSM_ST_ERR,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ata_completion_errors {
|
enum ata_completion_errors {
|
||||||
@@ -485,7 +482,6 @@ struct ata_port {
|
|||||||
struct work_struct port_task;
|
struct work_struct port_task;
|
||||||
|
|
||||||
unsigned int hsm_task_state;
|
unsigned int hsm_task_state;
|
||||||
unsigned long pio_task_timeout;
|
|
||||||
|
|
||||||
u32 msg_enable;
|
u32 msg_enable;
|
||||||
struct list_head eh_done_q;
|
struct list_head eh_done_q;
|
||||||
|
|||||||
Reference in New Issue
Block a user