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>
This commit is contained in:
@@ -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)
|
|||||||
* 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)
|
|||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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)
|
|||||||
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)
|
|||||||
/**
|
/**
|
||||||
* 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)
|
|||||||
* 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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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)
|
|||||||
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 */
|
|||||||
/**
|
/**
|
||||||
* 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 */
|
|||||||
* 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)
|
|||||||
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)
|
|||||||
/**
|
/**
|
||||||
* 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)
|
|||||||
dev->flags |= ATA_DFLAG_PIO;
|
dev->flags |= ATA_DFLAG_PIO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -612,11 +612,11 @@ 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);
|
||||||
|
|
||||||
int (*check_atapi_dma) (struct ata_queued_cmd *qc);
|
int (*check_atapi_dma) (struct ata_queued_cmd *qc);
|
||||||
|
|
||||||
void (*bmdma_setup) (struct ata_queued_cmd *qc);
|
void (*bmdma_setup) (struct ata_queued_cmd *qc);
|
||||||
void (*bmdma_start) (struct ata_queued_cmd *qc);
|
void (*bmdma_start) (struct ata_queued_cmd *qc);
|
||||||
|
Reference in New Issue
Block a user