Commit b229a7b0 authored by Alan's avatar Alan Committed by Jeff Garzik

libata: set_mode, Fix the FIXME

When set_mode() changed ->set_mode didn't adapt. This makes the needed
changes and removes the relevant FIXME case.
Signed-off-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent a52865c2
...@@ -64,6 +64,7 @@ static void generic_error_handler(struct ata_port *ap) ...@@ -64,6 +64,7 @@ static void generic_error_handler(struct ata_port *ap)
/** /**
* generic_set_mode - mode setting * generic_set_mode - mode setting
* @ap: interface to set up * @ap: interface to set up
* @unused: returned device on error
* *
* Use a non standard set_mode function. We don't want to be tuned. * Use a non standard set_mode function. We don't want to be tuned.
* The BIOS configured everything. Our job is not to fiddle. We * The BIOS configured everything. Our job is not to fiddle. We
...@@ -71,7 +72,7 @@ static void generic_error_handler(struct ata_port *ap) ...@@ -71,7 +72,7 @@ static void generic_error_handler(struct ata_port *ap)
* and respect them. * and respect them.
*/ */
static void generic_set_mode(struct ata_port *ap) static int generic_set_mode(struct ata_port *ap, struct ata_device **unused)
{ {
int dma_enabled = 0; int dma_enabled = 0;
int i; int i;
...@@ -82,7 +83,7 @@ static void generic_set_mode(struct ata_port *ap) ...@@ -82,7 +83,7 @@ static void generic_set_mode(struct ata_port *ap)
for (i = 0; i < ATA_MAX_DEVICES; i++) { for (i = 0; i < ATA_MAX_DEVICES; i++) {
struct ata_device *dev = &ap->device[i]; struct ata_device *dev = &ap->device[i];
if (ata_dev_enabled(dev)) { if (ata_dev_ready(dev)) {
/* We don't really care */ /* We don't really care */
dev->pio_mode = XFER_PIO_0; dev->pio_mode = XFER_PIO_0;
dev->dma_mode = XFER_MW_DMA_0; dev->dma_mode = XFER_MW_DMA_0;
...@@ -99,6 +100,7 @@ static void generic_set_mode(struct ata_port *ap) ...@@ -99,6 +100,7 @@ static void generic_set_mode(struct ata_port *ap)
} }
} }
} }
return 0;
} }
static struct scsi_host_template generic_sht = { static struct scsi_host_template generic_sht = {
......
...@@ -2431,18 +2431,8 @@ int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev) ...@@ -2431,18 +2431,8 @@ int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev)
int i, rc = 0, used_dma = 0, found = 0; int i, rc = 0, used_dma = 0, found = 0;
/* has private set_mode? */ /* has private set_mode? */
if (ap->ops->set_mode) { if (ap->ops->set_mode)
/* FIXME: make ->set_mode handle no device case and return ap->ops->set_mode(ap, r_failed_dev);
* return error code and failing device on failure.
*/
for (i = 0; i < ATA_MAX_DEVICES; i++) {
if (ata_dev_ready(&ap->device[i])) {
ap->ops->set_mode(ap);
break;
}
}
return 0;
}
/* step 1: calculate xfer_mask */ /* step 1: calculate xfer_mask */
for (i = 0; i < ATA_MAX_DEVICES; i++) { for (i = 0; i < ATA_MAX_DEVICES; i++) {
......
...@@ -476,6 +476,7 @@ static unsigned int it821x_passthru_qc_issue_prot(struct ata_queued_cmd *qc) ...@@ -476,6 +476,7 @@ static unsigned int it821x_passthru_qc_issue_prot(struct ata_queued_cmd *qc)
/** /**
* it821x_smart_set_mode - mode setting * it821x_smart_set_mode - mode setting
* @ap: interface to set up * @ap: interface to set up
* @unused: device that failed (error only)
* *
* Use a non standard set_mode function. We don't want to be tuned. * Use a non standard set_mode function. We don't want to be tuned.
* The BIOS configured everything. Our job is not to fiddle. We * The BIOS configured everything. Our job is not to fiddle. We
...@@ -483,7 +484,7 @@ static unsigned int it821x_passthru_qc_issue_prot(struct ata_queued_cmd *qc) ...@@ -483,7 +484,7 @@ static unsigned int it821x_passthru_qc_issue_prot(struct ata_queued_cmd *qc)
* and respect them. * and respect them.
*/ */
static void it821x_smart_set_mode(struct ata_port *ap) static int it821x_smart_set_mode(struct ata_port *ap, struct ata_device **unused)
{ {
int dma_enabled = 0; int dma_enabled = 0;
int i; int i;
...@@ -512,6 +513,7 @@ static void it821x_smart_set_mode(struct ata_port *ap) ...@@ -512,6 +513,7 @@ static void it821x_smart_set_mode(struct ata_port *ap)
} }
} }
} }
return 0;
} }
/** /**
......
...@@ -23,9 +23,9 @@ ...@@ -23,9 +23,9 @@
#include <scsi/scsi_host.h> #include <scsi/scsi_host.h>
#define DRV_NAME "pata_ixp4xx_cf" #define DRV_NAME "pata_ixp4xx_cf"
#define DRV_VERSION "0.1.1" #define DRV_VERSION "0.1.1ac1"
static void ixp4xx_set_mode(struct ata_port *ap) static int ixp4xx_set_mode(struct ata_port *ap, struct ata_device *adev)
{ {
int i; int i;
...@@ -38,6 +38,7 @@ static void ixp4xx_set_mode(struct ata_port *ap) ...@@ -38,6 +38,7 @@ static void ixp4xx_set_mode(struct ata_port *ap)
dev->flags |= ATA_DFLAG_PIO; dev->flags |= ATA_DFLAG_PIO;
} }
} }
return 0;
} }
static void ixp4xx_phy_reset(struct ata_port *ap) static void ixp4xx_phy_reset(struct ata_port *ap)
......
...@@ -96,6 +96,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */ ...@@ -96,6 +96,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */
/** /**
* legacy_set_mode - mode setting * legacy_set_mode - mode setting
* @ap: IDE interface * @ap: IDE interface
* @unused: Device that failed when error is returned
* *
* Use a non standard set_mode function. We don't want to be tuned. * Use a non standard set_mode function. We don't want to be tuned.
* *
...@@ -105,7 +106,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */ ...@@ -105,7 +106,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */
* expand on this as per hdparm in the base kernel. * expand on this as per hdparm in the base kernel.
*/ */
static void legacy_set_mode(struct ata_port *ap) static int legacy_set_mode(struct ata_port *ap, struct ata_device **unused)
{ {
int i; int i;
...@@ -118,6 +119,7 @@ static void legacy_set_mode(struct ata_port *ap) ...@@ -118,6 +119,7 @@ static void legacy_set_mode(struct ata_port *ap)
dev->flags |= ATA_DFLAG_PIO; dev->flags |= ATA_DFLAG_PIO;
} }
} }
return 0;
} }
static struct scsi_host_template legacy_sht = { static struct scsi_host_template legacy_sht = {
......
...@@ -52,19 +52,20 @@ static void rz1000_error_handler(struct ata_port *ap) ...@@ -52,19 +52,20 @@ static void rz1000_error_handler(struct ata_port *ap)
/** /**
* rz1000_set_mode - mode setting function * rz1000_set_mode - mode setting function
* @ap: ATA interface * @ap: ATA interface
* @unused: returned device on set_mode failure
* *
* Use a non standard set_mode function. We don't want to be tuned. We * Use a non standard set_mode function. We don't want to be tuned. We
* would prefer to be BIOS generic but for the fact our hardware is * would prefer to be BIOS generic but for the fact our hardware is
* whacked out. * whacked out.
*/ */
static void rz1000_set_mode(struct ata_port *ap) static int rz1000_set_mode(struct ata_port *ap, struct ata_device **unused)
{ {
int i; int i;
for (i = 0; i < ATA_MAX_DEVICES; i++) { for (i = 0; i < ATA_MAX_DEVICES; i++) {
struct ata_device *dev = &ap->device[i]; struct ata_device *dev = &ap->device[i];
if (ata_dev_enabled(dev)) { if (ata_dev_ready(dev)) {
/* We don't really care */ /* We don't really care */
dev->pio_mode = XFER_PIO_0; dev->pio_mode = XFER_PIO_0;
dev->xfer_mode = XFER_PIO_0; dev->xfer_mode = XFER_PIO_0;
...@@ -72,6 +73,7 @@ static void rz1000_set_mode(struct ata_port *ap) ...@@ -72,6 +73,7 @@ static void rz1000_set_mode(struct ata_port *ap)
dev->flags |= ATA_DFLAG_PIO; dev->flags |= ATA_DFLAG_PIO;
} }
} }
return 0;
} }
......
...@@ -612,7 +612,7 @@ struct ata_port_operations { ...@@ -612,7 +612,7 @@ struct ata_port_operations {
void (*dev_select)(struct ata_port *ap, unsigned int device); void (*dev_select)(struct ata_port *ap, unsigned int device);
void (*phy_reset) (struct ata_port *ap); /* obsolete */ void (*phy_reset) (struct ata_port *ap); /* obsolete */
void (*set_mode) (struct ata_port *ap); int (*set_mode) (struct ata_port *ap, struct ata_device **r_failed_dev);
void (*post_set_mode) (struct ata_port *ap); void (*post_set_mode) (struct ata_port *ap);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment