diff options
| author | Alan <alan@lxorguk.ukuu.org.uk> | 2007-01-24 06:47:07 -0500 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2007-01-24 19:55:16 -0500 |
| commit | b229a7b0aed808f2ef6a5e9dbf78b0f17cefb4d0 (patch) | |
| tree | 2333566c51f5eabc6c1a638155d8efaa6ebd64b5 | |
| parent | a52865c239b1bc4f62e387509b1ad3415e476ee5 (diff) | |
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: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
| -rw-r--r-- | drivers/ata/ata_generic.c | 6 | ||||
| -rw-r--r-- | drivers/ata/libata-core.c | 14 | ||||
| -rw-r--r-- | drivers/ata/pata_it821x.c | 4 | ||||
| -rw-r--r-- | drivers/ata/pata_ixp4xx_cf.c | 5 | ||||
| -rw-r--r-- | drivers/ata/pata_legacy.c | 4 | ||||
| -rw-r--r-- | drivers/ata/pata_rz1000.c | 6 | ||||
| -rw-r--r-- | include/linux/libata.h | 4 |
7 files changed, 21 insertions, 22 deletions
diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c index 908751d27e76..24af56081b5d 100644 --- a/drivers/ata/ata_generic.c +++ b/drivers/ata/ata_generic.c | |||
| @@ -64,6 +64,7 @@ static void generic_error_handler(struct ata_port *ap) | |||
| 64 | /** | 64 | /** |
| 65 | * generic_set_mode - mode setting | 65 | * generic_set_mode - mode setting |
| 66 | * @ap: interface to set up | 66 | * @ap: interface to set up |
| 67 | * @unused: returned device on error | ||
| 67 | * | 68 | * |
| 68 | * Use a non standard set_mode function. We don't want to be tuned. | 69 | * Use a non standard set_mode function. We don't want to be tuned. |
| 69 | * The BIOS configured everything. Our job is not to fiddle. We | 70 | * 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 | * and respect them. | 72 | * and respect them. |
| 72 | */ | 73 | */ |
| 73 | 74 | ||
| 74 | static void generic_set_mode(struct ata_port *ap) | 75 | static int generic_set_mode(struct ata_port *ap, struct ata_device **unused) |
| 75 | { | 76 | { |
| 76 | int dma_enabled = 0; | 77 | int dma_enabled = 0; |
| 77 | int i; | 78 | int i; |
| @@ -82,7 +83,7 @@ static void generic_set_mode(struct ata_port *ap) | |||
| 82 | 83 | ||
| 83 | for (i = 0; i < ATA_MAX_DEVICES; i++) { | 84 | for (i = 0; i < ATA_MAX_DEVICES; i++) { |
| 84 | struct ata_device *dev = &ap->device[i]; | 85 | struct ata_device *dev = &ap->device[i]; |
| 85 | if (ata_dev_enabled(dev)) { | 86 | if (ata_dev_ready(dev)) { |
| 86 | /* We don't really care */ | 87 | /* We don't really care */ |
| 87 | dev->pio_mode = XFER_PIO_0; | 88 | dev->pio_mode = XFER_PIO_0; |
| 88 | dev->dma_mode = XFER_MW_DMA_0; | 89 | dev->dma_mode = XFER_MW_DMA_0; |
| @@ -99,6 +100,7 @@ static void generic_set_mode(struct ata_port *ap) | |||
| 99 | } | 100 | } |
| 100 | } | 101 | } |
| 101 | } | 102 | } |
| 103 | return 0; | ||
| 102 | } | 104 | } |
| 103 | 105 | ||
| 104 | static struct scsi_host_template generic_sht = { | 106 | static struct scsi_host_template generic_sht = { |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 0d51d13b16bf..a388a8df0043 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -2431,18 +2431,8 @@ int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev) | |||
| 2431 | int i, rc = 0, used_dma = 0, found = 0; | 2431 | int i, rc = 0, used_dma = 0, found = 0; |
| 2432 | 2432 | ||
| 2433 | /* has private set_mode? */ | 2433 | /* has private set_mode? */ |
| 2434 | if (ap->ops->set_mode) { | 2434 | if (ap->ops->set_mode) |
| 2435 | /* FIXME: make ->set_mode handle no device case and | 2435 | return ap->ops->set_mode(ap, r_failed_dev); |
| 2436 | * return error code and failing device on failure. | ||
| 2437 | */ | ||
| 2438 | for (i = 0; i < ATA_MAX_DEVICES; i++) { | ||
| 2439 | if (ata_dev_ready(&ap->device[i])) { | ||
| 2440 | ap->ops->set_mode(ap); | ||
| 2441 | break; | ||
| 2442 | } | ||
| 2443 | } | ||
| 2444 | return 0; | ||
| 2445 | } | ||
| 2446 | 2436 | ||
| 2447 | /* step 1: calculate xfer_mask */ | 2437 | /* step 1: calculate xfer_mask */ |
| 2448 | for (i = 0; i < ATA_MAX_DEVICES; i++) { | 2438 | for (i = 0; i < ATA_MAX_DEVICES; i++) { |
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index 0b56ff3d1cfe..e8afd486434a 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c | |||
| @@ -476,6 +476,7 @@ static unsigned int it821x_passthru_qc_issue_prot(struct ata_queued_cmd *qc) | |||
| 476 | /** | 476 | /** |
| 477 | * it821x_smart_set_mode - mode setting | 477 | * it821x_smart_set_mode - mode setting |
| 478 | * @ap: interface to set up | 478 | * @ap: interface to set up |
| 479 | * @unused: device that failed (error only) | ||
| 479 | * | 480 | * |
| 480 | * Use a non standard set_mode function. We don't want to be tuned. | 481 | * Use a non standard set_mode function. We don't want to be tuned. |
| 481 | * The BIOS configured everything. Our job is not to fiddle. We | 482 | * 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 | * and respect them. | 484 | * and respect them. |
| 484 | */ | 485 | */ |
| 485 | 486 | ||
| 486 | static void it821x_smart_set_mode(struct ata_port *ap) | 487 | static int it821x_smart_set_mode(struct ata_port *ap, struct ata_device **unused) |
| 487 | { | 488 | { |
| 488 | int dma_enabled = 0; | 489 | int dma_enabled = 0; |
| 489 | int i; | 490 | int i; |
| @@ -512,6 +513,7 @@ static void it821x_smart_set_mode(struct ata_port *ap) | |||
| 512 | } | 513 | } |
| 513 | } | 514 | } |
| 514 | } | 515 | } |
| 516 | return 0; | ||
| 515 | } | 517 | } |
| 516 | 518 | ||
| 517 | /** | 519 | /** |
diff --git a/drivers/ata/pata_ixp4xx_cf.c b/drivers/ata/pata_ixp4xx_cf.c index cb8924109f59..23b8aab3ebd8 100644 --- a/drivers/ata/pata_ixp4xx_cf.c +++ b/drivers/ata/pata_ixp4xx_cf.c | |||
| @@ -23,9 +23,9 @@ | |||
| 23 | #include <scsi/scsi_host.h> | 23 | #include <scsi/scsi_host.h> |
| 24 | 24 | ||
| 25 | #define DRV_NAME "pata_ixp4xx_cf" | 25 | #define DRV_NAME "pata_ixp4xx_cf" |
| 26 | #define DRV_VERSION "0.1.1" | 26 | #define DRV_VERSION "0.1.1ac1" |
| 27 | 27 | ||
| 28 | static void ixp4xx_set_mode(struct ata_port *ap) | 28 | static int ixp4xx_set_mode(struct ata_port *ap, struct ata_device *adev) |
| 29 | { | 29 | { |
| 30 | int i; | 30 | int i; |
| 31 | 31 | ||
| @@ -38,6 +38,7 @@ static void ixp4xx_set_mode(struct ata_port *ap) | |||
| 38 | dev->flags |= ATA_DFLAG_PIO; | 38 | dev->flags |= ATA_DFLAG_PIO; |
| 39 | } | 39 | } |
| 40 | } | 40 | } |
| 41 | return 0; | ||
| 41 | } | 42 | } |
| 42 | 43 | ||
| 43 | static void ixp4xx_phy_reset(struct ata_port *ap) | 44 | static void ixp4xx_phy_reset(struct ata_port *ap) |
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c index e7bf9d89c8ee..581cb33c6f45 100644 --- a/drivers/ata/pata_legacy.c +++ b/drivers/ata/pata_legacy.c | |||
| @@ -96,6 +96,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */ | |||
| 96 | /** | 96 | /** |
| 97 | * legacy_set_mode - mode setting | 97 | * legacy_set_mode - mode setting |
| 98 | * @ap: IDE interface | 98 | * @ap: IDE interface |
| 99 | * @unused: Device that failed when error is returned | ||
| 99 | * | 100 | * |
| 100 | * Use a non standard set_mode function. We don't want to be tuned. | 101 | * Use a non standard set_mode function. We don't want to be tuned. |
| 101 | * | 102 | * |
| @@ -105,7 +106,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */ | |||
| 105 | * expand on this as per hdparm in the base kernel. | 106 | * expand on this as per hdparm in the base kernel. |
| 106 | */ | 107 | */ |
| 107 | 108 | ||
| 108 | static void legacy_set_mode(struct ata_port *ap) | 109 | static int legacy_set_mode(struct ata_port *ap, struct ata_device **unused) |
| 109 | { | 110 | { |
| 110 | int i; | 111 | int i; |
| 111 | 112 | ||
| @@ -118,6 +119,7 @@ static void legacy_set_mode(struct ata_port *ap) | |||
| 118 | dev->flags |= ATA_DFLAG_PIO; | 119 | dev->flags |= ATA_DFLAG_PIO; |
| 119 | } | 120 | } |
| 120 | } | 121 | } |
| 122 | return 0; | ||
| 121 | } | 123 | } |
| 122 | 124 | ||
| 123 | static struct scsi_host_template legacy_sht = { | 125 | static struct scsi_host_template legacy_sht = { |
diff --git a/drivers/ata/pata_rz1000.c b/drivers/ata/pata_rz1000.c index adf4cc134f25..cec0729225e1 100644 --- a/drivers/ata/pata_rz1000.c +++ b/drivers/ata/pata_rz1000.c | |||
| @@ -52,19 +52,20 @@ static void rz1000_error_handler(struct ata_port *ap) | |||
| 52 | /** | 52 | /** |
| 53 | * rz1000_set_mode - mode setting function | 53 | * rz1000_set_mode - mode setting function |
| 54 | * @ap: ATA interface | 54 | * @ap: ATA interface |
| 55 | * @unused: returned device on set_mode failure | ||
| 55 | * | 56 | * |
| 56 | * Use a non standard set_mode function. We don't want to be tuned. We | 57 | * Use a non standard set_mode function. We don't want to be tuned. We |
| 57 | * would prefer to be BIOS generic but for the fact our hardware is | 58 | * would prefer to be BIOS generic but for the fact our hardware is |
| 58 | * whacked out. | 59 | * whacked out. |
| 59 | */ | 60 | */ |
| 60 | 61 | ||
| 61 | static void rz1000_set_mode(struct ata_port *ap) | 62 | static int rz1000_set_mode(struct ata_port *ap, struct ata_device **unused) |
| 62 | { | 63 | { |
| 63 | int i; | 64 | int i; |
| 64 | 65 | ||
| 65 | for (i = 0; i < ATA_MAX_DEVICES; i++) { | 66 | for (i = 0; i < ATA_MAX_DEVICES; i++) { |
| 66 | struct ata_device *dev = &ap->device[i]; | 67 | struct ata_device *dev = &ap->device[i]; |
| 67 | if (ata_dev_enabled(dev)) { | 68 | if (ata_dev_ready(dev)) { |
| 68 | /* We don't really care */ | 69 | /* We don't really care */ |
| 69 | dev->pio_mode = XFER_PIO_0; | 70 | dev->pio_mode = XFER_PIO_0; |
| 70 | dev->xfer_mode = XFER_PIO_0; | 71 | dev->xfer_mode = XFER_PIO_0; |
| @@ -72,6 +73,7 @@ static void rz1000_set_mode(struct ata_port *ap) | |||
| 72 | dev->flags |= ATA_DFLAG_PIO; | 73 | dev->flags |= ATA_DFLAG_PIO; |
| 73 | } | 74 | } |
| 74 | } | 75 | } |
| 76 | return 0; | ||
| 75 | } | 77 | } |
| 76 | 78 | ||
| 77 | 79 | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index f7f268e38749..df76fc467816 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -612,11 +612,11 @@ struct ata_port_operations { | |||
| 612 | void (*dev_select)(struct ata_port *ap, unsigned int device); | 612 | void (*dev_select)(struct ata_port *ap, unsigned int device); |
| 613 | 613 | ||
| 614 | void (*phy_reset) (struct ata_port *ap); /* obsolete */ | 614 | void (*phy_reset) (struct ata_port *ap); /* obsolete */ |
| 615 | void (*set_mode) (struct ata_port *ap); | 615 | int (*set_mode) (struct ata_port *ap, struct ata_device **r_failed_dev); |
| 616 | 616 | ||
| 617 | void (*post_set_mode) (struct ata_port *ap); | 617 | void (*post_set_mode) (struct ata_port *ap); |
| 618 | 618 | ||
| 619 | int (*check_atapi_dma) (struct ata_queued_cmd *qc); | 619 | int (*check_atapi_dma) (struct ata_queued_cmd *qc); |
| 620 | 620 | ||
| 621 | void (*bmdma_setup) (struct ata_queued_cmd *qc); | 621 | void (*bmdma_setup) (struct ata_queued_cmd *qc); |
| 622 | void (*bmdma_start) (struct ata_queued_cmd *qc); | 622 | void (*bmdma_start) (struct ata_queued_cmd *qc); |
