Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b229a7b0 authored by Alan Cox's avatar Alan Cox Committed by Jeff Garzik
Browse files

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
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ static void generic_error_handler(struct ata_port *ap)
/**
 *	generic_set_mode	-	mode setting
 *	@ap: interface to set up
 *	@unused: returned device on error
 *
 *	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
@@ -71,7 +72,7 @@ static void generic_error_handler(struct ata_port *ap)
 *	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 i;
@@ -82,7 +83,7 @@ static void generic_set_mode(struct ata_port *ap)

	for (i = 0; i < ATA_MAX_DEVICES; i++) {
		struct ata_device *dev = &ap->device[i];
		if (ata_dev_enabled(dev)) {
		if (ata_dev_ready(dev)) {
			/* We don't really care */
			dev->pio_mode = XFER_PIO_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 = {
+2 −12
Original line number Diff line number Diff line
@@ -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;

	/* has private set_mode? */
	if (ap->ops->set_mode) {
		/* FIXME: make ->set_mode handle no device case and
		 * 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;
	}
	if (ap->ops->set_mode)
		return ap->ops->set_mode(ap, r_failed_dev);

	/* step 1: calculate xfer_mask */
	for (i = 0; i < ATA_MAX_DEVICES; i++) {
+3 −1
Original line number Diff line number Diff line
@@ -476,6 +476,7 @@ static unsigned int it821x_passthru_qc_issue_prot(struct ata_queued_cmd *qc)
/**
 *	it821x_smart_set_mode	-	mode setting
 *	@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.
 *	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.
 */

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 i;
@@ -512,6 +513,7 @@ static void it821x_smart_set_mode(struct ata_port *ap)
			}
		}
	}
	return 0;
}

/**
+3 −2
Original line number Diff line number Diff line
@@ -23,9 +23,9 @@
#include <scsi/scsi_host.h>

#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;

@@ -38,6 +38,7 @@ static void ixp4xx_set_mode(struct ata_port *ap)
			dev->flags |= ATA_DFLAG_PIO;
		}
	}
	return 0;
}

static void ixp4xx_phy_reset(struct ata_port *ap)
+3 −1
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */
/**
 *	legacy_set_mode		-	mode setting
 *	@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.
 *
@@ -105,7 +106,7 @@ static int pio_mask = 0x1F; /* PIO range for autospeed devices */
 *	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;

@@ -118,6 +119,7 @@ static void legacy_set_mode(struct ata_port *ap)
			dev->flags |= ATA_DFLAG_PIO;
		}
	}
	return 0;
}

static struct scsi_host_template legacy_sht = {
Loading