pata: expose set_mode method so it can be wrapped
This splits set_mode into do_set_mode and the wrapper so that a driver can call the standard method inside its own. This in theory also obsoletes ->post_set_mode(). Signed-off-by: Alan Cox <alan@redhat.com> Cc: Jeff Garzik <jeff@garzik.org> Cc: Tejun Heo <htejun@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
@@ -2519,12 +2519,13 @@ static int ata_dev_set_mode(struct ata_device *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_set_mode - Program timings and issue SET FEATURES - XFER
|
* ata_do_set_mode - Program timings and issue SET FEATURES - XFER
|
||||||
* @ap: port on which timings will be programmed
|
* @ap: port on which timings will be programmed
|
||||||
* @r_failed_dev: out paramter for failed device
|
* @r_failed_dev: out paramter for failed device
|
||||||
*
|
*
|
||||||
* Set ATA device disk transfer mode (PIO3, UDMA6, etc.). If
|
* Standard implementation of the function used to tune and set
|
||||||
* ata_set_mode() fails, pointer to the failing device is
|
* ATA device disk transfer mode (PIO3, UDMA6, etc.). If
|
||||||
|
* ata_dev_set_mode() fails, pointer to the failing device is
|
||||||
* returned in @r_failed_dev.
|
* returned in @r_failed_dev.
|
||||||
*
|
*
|
||||||
* LOCKING:
|
* LOCKING:
|
||||||
@@ -2533,14 +2534,12 @@ static int ata_dev_set_mode(struct ata_device *dev)
|
|||||||
* RETURNS:
|
* RETURNS:
|
||||||
* 0 on success, negative errno otherwise
|
* 0 on success, negative errno otherwise
|
||||||
*/
|
*/
|
||||||
int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev)
|
|
||||||
|
int ata_do_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev)
|
||||||
{
|
{
|
||||||
struct ata_device *dev;
|
struct ata_device *dev;
|
||||||
int i, rc = 0, used_dma = 0, found = 0;
|
int i, rc = 0, used_dma = 0, found = 0;
|
||||||
|
|
||||||
/* has private set_mode? */
|
|
||||||
if (ap->ops->set_mode)
|
|
||||||
return ap->ops->set_mode(ap, r_failed_dev);
|
|
||||||
|
|
||||||
/* 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++) {
|
||||||
@@ -2624,6 +2623,29 @@ int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ata_set_mode - Program timings and issue SET FEATURES - XFER
|
||||||
|
* @ap: port on which timings will be programmed
|
||||||
|
* @r_failed_dev: out paramter for failed device
|
||||||
|
*
|
||||||
|
* Set ATA device disk transfer mode (PIO3, UDMA6, etc.). If
|
||||||
|
* ata_set_mode() fails, pointer to the failing device is
|
||||||
|
* returned in @r_failed_dev.
|
||||||
|
*
|
||||||
|
* LOCKING:
|
||||||
|
* PCI/etc. bus probe sem.
|
||||||
|
*
|
||||||
|
* RETURNS:
|
||||||
|
* 0 on success, negative errno otherwise
|
||||||
|
*/
|
||||||
|
int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev)
|
||||||
|
{
|
||||||
|
/* has private set_mode? */
|
||||||
|
if (ap->ops->set_mode)
|
||||||
|
return ap->ops->set_mode(ap, r_failed_dev);
|
||||||
|
return ata_do_set_mode(ap, r_failed_dev);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_tf_to_host - issue ATA taskfile to host controller
|
* ata_tf_to_host - issue ATA taskfile to host controller
|
||||||
* @ap: port to which command is being issued
|
* @ap: port to which command is being issued
|
||||||
@@ -6413,6 +6435,7 @@ EXPORT_SYMBOL_GPL(ata_altstatus);
|
|||||||
EXPORT_SYMBOL_GPL(ata_exec_command);
|
EXPORT_SYMBOL_GPL(ata_exec_command);
|
||||||
EXPORT_SYMBOL_GPL(ata_port_start);
|
EXPORT_SYMBOL_GPL(ata_port_start);
|
||||||
EXPORT_SYMBOL_GPL(ata_interrupt);
|
EXPORT_SYMBOL_GPL(ata_interrupt);
|
||||||
|
EXPORT_SYMBOL_GPL(ata_do_set_mode);
|
||||||
EXPORT_SYMBOL_GPL(ata_data_xfer);
|
EXPORT_SYMBOL_GPL(ata_data_xfer);
|
||||||
EXPORT_SYMBOL_GPL(ata_data_xfer_noirq);
|
EXPORT_SYMBOL_GPL(ata_data_xfer_noirq);
|
||||||
EXPORT_SYMBOL_GPL(ata_qc_prep);
|
EXPORT_SYMBOL_GPL(ata_qc_prep);
|
||||||
|
@@ -831,6 +831,7 @@ extern void ata_scsi_slave_destroy(struct scsi_device *sdev);
|
|||||||
extern int ata_scsi_change_queue_depth(struct scsi_device *sdev,
|
extern int ata_scsi_change_queue_depth(struct scsi_device *sdev,
|
||||||
int queue_depth);
|
int queue_depth);
|
||||||
extern struct ata_device *ata_dev_pair(struct ata_device *adev);
|
extern struct ata_device *ata_dev_pair(struct ata_device *adev);
|
||||||
|
extern int ata_do_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev);
|
||||||
extern u8 ata_irq_on(struct ata_port *ap);
|
extern u8 ata_irq_on(struct ata_port *ap);
|
||||||
extern u8 ata_dummy_irq_on(struct ata_port *ap);
|
extern u8 ata_dummy_irq_on(struct ata_port *ap);
|
||||||
extern u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq);
|
extern u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq);
|
||||||
|
Reference in New Issue
Block a user