|
@@ -153,6 +153,10 @@ static void pdc_freeze(struct ata_port *ap);
|
|
static void pdc_sata_freeze(struct ata_port *ap);
|
|
static void pdc_sata_freeze(struct ata_port *ap);
|
|
static void pdc_thaw(struct ata_port *ap);
|
|
static void pdc_thaw(struct ata_port *ap);
|
|
static void pdc_sata_thaw(struct ata_port *ap);
|
|
static void pdc_sata_thaw(struct ata_port *ap);
|
|
|
|
+static int pdc_pata_softreset(struct ata_link *link, unsigned int *class,
|
|
|
|
+ unsigned long deadline);
|
|
|
|
+static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
|
|
|
|
+ unsigned long deadline);
|
|
static void pdc_error_handler(struct ata_port *ap);
|
|
static void pdc_error_handler(struct ata_port *ap);
|
|
static void pdc_post_internal_cmd(struct ata_queued_cmd *qc);
|
|
static void pdc_post_internal_cmd(struct ata_queued_cmd *qc);
|
|
static int pdc_pata_cable_detect(struct ata_port *ap);
|
|
static int pdc_pata_cable_detect(struct ata_port *ap);
|
|
@@ -186,6 +190,7 @@ static struct ata_port_operations pdc_sata_ops = {
|
|
.scr_read = pdc_sata_scr_read,
|
|
.scr_read = pdc_sata_scr_read,
|
|
.scr_write = pdc_sata_scr_write,
|
|
.scr_write = pdc_sata_scr_write,
|
|
.port_start = pdc_sata_port_start,
|
|
.port_start = pdc_sata_port_start,
|
|
|
|
+ .hardreset = pdc_sata_hardreset,
|
|
};
|
|
};
|
|
|
|
|
|
/* First-generation chips need a more restrictive ->check_atapi_dma op */
|
|
/* First-generation chips need a more restrictive ->check_atapi_dma op */
|
|
@@ -200,6 +205,7 @@ static struct ata_port_operations pdc_pata_ops = {
|
|
.freeze = pdc_freeze,
|
|
.freeze = pdc_freeze,
|
|
.thaw = pdc_thaw,
|
|
.thaw = pdc_thaw,
|
|
.port_start = pdc_common_port_start,
|
|
.port_start = pdc_common_port_start,
|
|
|
|
+ .softreset = pdc_pata_softreset,
|
|
};
|
|
};
|
|
|
|
|
|
static const struct ata_port_info pdc_port_info[] = {
|
|
static const struct ata_port_info pdc_port_info[] = {
|
|
@@ -693,6 +699,20 @@ static void pdc_sata_thaw(struct ata_port *ap)
|
|
readl(host_mmio + hotplug_offset); /* flush */
|
|
readl(host_mmio + hotplug_offset); /* flush */
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int pdc_pata_softreset(struct ata_link *link, unsigned int *class,
|
|
|
|
+ unsigned long deadline)
|
|
|
|
+{
|
|
|
|
+ pdc_reset_port(link->ap);
|
|
|
|
+ return ata_sff_softreset(link, class, deadline);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
|
|
|
|
+ unsigned long deadline)
|
|
|
|
+{
|
|
|
|
+ pdc_reset_port(link->ap);
|
|
|
|
+ return sata_sff_hardreset(link, class, deadline);
|
|
|
|
+}
|
|
|
|
+
|
|
static void pdc_error_handler(struct ata_port *ap)
|
|
static void pdc_error_handler(struct ata_port *ap)
|
|
{
|
|
{
|
|
if (!(ap->pflags & ATA_PFLAG_FROZEN))
|
|
if (!(ap->pflags & ATA_PFLAG_FROZEN))
|