[SCSI] libata: implement minimal transport template for ->eh_timed_out
SCSI midlayer has moved hostt->eh_timed_out to transport template. As libata doesn't need full-blown transport support yet, implement minimal transport for libata. No transport class or whatsoever, just empty transport template with ->eh_timed_out hook. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
d04cdb6421
commit
30afc84cf7
|
@ -207,7 +207,6 @@ static struct scsi_host_template ahci_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -209,7 +209,6 @@ static struct scsi_host_template piix_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -4653,6 +4653,8 @@ static struct ata_port * ata_host_add(const struct ata_probe_ent *ent,
|
||||||
if (!host)
|
if (!host)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
host->transportt = &ata_scsi_transport_template;
|
||||||
|
|
||||||
ap = (struct ata_port *) &host->hostdata[0];
|
ap = (struct ata_port *) &host->hostdata[0];
|
||||||
|
|
||||||
ata_host_init(ap, host, host_set, ent, port_no);
|
ata_host_init(ap, host, host_set, ent, port_no);
|
||||||
|
@ -5084,7 +5086,6 @@ EXPORT_SYMBOL_GPL(ata_busy_sleep);
|
||||||
EXPORT_SYMBOL_GPL(ata_port_queue_task);
|
EXPORT_SYMBOL_GPL(ata_port_queue_task);
|
||||||
EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
|
EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
|
||||||
EXPORT_SYMBOL_GPL(ata_scsi_queuecmd);
|
EXPORT_SYMBOL_GPL(ata_scsi_queuecmd);
|
||||||
EXPORT_SYMBOL_GPL(ata_scsi_timed_out);
|
|
||||||
EXPORT_SYMBOL_GPL(ata_scsi_error);
|
EXPORT_SYMBOL_GPL(ata_scsi_error);
|
||||||
EXPORT_SYMBOL_GPL(ata_scsi_slave_config);
|
EXPORT_SYMBOL_GPL(ata_scsi_slave_config);
|
||||||
EXPORT_SYMBOL_GPL(ata_scsi_release);
|
EXPORT_SYMBOL_GPL(ata_scsi_release);
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include <scsi/scsi_eh.h>
|
#include <scsi/scsi_eh.h>
|
||||||
#include <scsi/scsi_device.h>
|
#include <scsi/scsi_device.h>
|
||||||
#include <scsi/scsi_request.h>
|
#include <scsi/scsi_request.h>
|
||||||
|
#include <scsi/scsi_transport.h>
|
||||||
#include <linux/libata.h>
|
#include <linux/libata.h>
|
||||||
#include <linux/hdreg.h>
|
#include <linux/hdreg.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, const u8 *scsicmd);
|
typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, const u8 *scsicmd);
|
||||||
static struct ata_device *
|
static struct ata_device *
|
||||||
ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev);
|
ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev);
|
||||||
|
enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd);
|
||||||
|
|
||||||
#define RW_RECOVERY_MPAGE 0x1
|
#define RW_RECOVERY_MPAGE 0x1
|
||||||
#define RW_RECOVERY_MPAGE_LEN 12
|
#define RW_RECOVERY_MPAGE_LEN 12
|
||||||
|
@ -92,6 +94,14 @@ static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = {
|
||||||
0, 30 /* extended self test time, see 05-359r1 */
|
0, 30 /* extended self test time, see 05-359r1 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libata transport template. libata doesn't do real transport stuff.
|
||||||
|
* It just needs the eh_timed_out hook.
|
||||||
|
*/
|
||||||
|
struct scsi_transport_template ata_scsi_transport_template = {
|
||||||
|
.eh_timed_out = ata_scsi_timed_out,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
|
static void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
|
||||||
void (*done)(struct scsi_cmnd *))
|
void (*done)(struct scsi_cmnd *))
|
||||||
|
|
|
@ -57,6 +57,8 @@ extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);
|
||||||
|
|
||||||
|
|
||||||
/* libata-scsi.c */
|
/* libata-scsi.c */
|
||||||
|
extern struct scsi_transport_template ata_scsi_transport_template;
|
||||||
|
|
||||||
extern void ata_scsi_scan_host(struct ata_port *ap);
|
extern void ata_scsi_scan_host(struct ata_port *ap);
|
||||||
extern int ata_scsi_error(struct Scsi_Host *host);
|
extern int ata_scsi_error(struct Scsi_Host *host);
|
||||||
extern unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
|
extern unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
|
||||||
|
|
|
@ -143,7 +143,6 @@ static struct scsi_host_template adma_ata_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -378,7 +378,6 @@ static struct scsi_host_template mv_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = MV_USE_Q_DEPTH,
|
.can_queue = MV_USE_Q_DEPTH,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -229,7 +229,6 @@ static struct scsi_host_template nv_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -111,7 +111,6 @@ static struct scsi_host_template pdc_ata_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -132,7 +132,6 @@ static struct scsi_host_template qs_ata_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -146,7 +146,6 @@ static struct scsi_host_template sil_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -281,7 +281,6 @@ static struct scsi_host_template sil24_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -87,7 +87,6 @@ static struct scsi_host_template sis_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -288,7 +288,6 @@ static struct scsi_host_template k2_sata_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -182,7 +182,6 @@ static struct scsi_host_template pdc_sata_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -75,7 +75,6 @@ static struct scsi_host_template uli_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -94,7 +94,6 @@ static struct scsi_host_template svia_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -251,7 +251,6 @@ static struct scsi_host_template vsc_sata_sht = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.ioctl = ata_scsi_ioctl,
|
.ioctl = ata_scsi_ioctl,
|
||||||
.queuecommand = ata_scsi_queuecmd,
|
.queuecommand = ata_scsi_queuecmd,
|
||||||
.eh_timed_out = ata_scsi_timed_out,
|
|
||||||
.eh_strategy_handler = ata_scsi_error,
|
.eh_strategy_handler = ata_scsi_error,
|
||||||
.can_queue = ATA_DEF_QUEUE,
|
.can_queue = ATA_DEF_QUEUE,
|
||||||
.this_id = ATA_SHT_THIS_ID,
|
.this_id = ATA_SHT_THIS_ID,
|
||||||
|
|
|
@ -508,7 +508,6 @@ extern void ata_host_set_remove(struct ata_host_set *host_set);
|
||||||
extern int ata_scsi_detect(struct scsi_host_template *sht);
|
extern int ata_scsi_detect(struct scsi_host_template *sht);
|
||||||
extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
|
extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
|
||||||
extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
|
extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
|
||||||
extern enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd);
|
|
||||||
extern int ata_scsi_error(struct Scsi_Host *host);
|
extern int ata_scsi_error(struct Scsi_Host *host);
|
||||||
extern void ata_eh_qc_complete(struct ata_queued_cmd *qc);
|
extern void ata_eh_qc_complete(struct ata_queued_cmd *qc);
|
||||||
extern void ata_eh_qc_retry(struct ata_queued_cmd *qc);
|
extern void ata_eh_qc_retry(struct ata_queued_cmd *qc);
|
||||||
|
|
Loading…
Reference in New Issue