ncr5380: Cleanup host info() methods
If the host->info() method is not set, then host->name is used by default. For atari_scsi, that is exactly the same text. So remove the redundant info() method. Keep sun3_scsi.c in line with atari_scsi. Some NCR5380 drivers return an empty string from the info() method (arm/cumana_1.c arm/oak.c mac_scsi.c) while other drivers use the default (dmx3191d dtc.c g_NCR5380.c pas16.c t128.c). Implement a common info() method to replace a lot of duplicated code which the various drivers use to announce the same information. This replaces most of the (deprecated) show_info() output and all of the NCR5380_print_info() output. This also eliminates a bunch of code in g_NCR5380 which just duplicates functionality in the core driver. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Reviewed-by: Hannes Reinecke <hare@suse.de> Tested-by: Michael Schmitz <schmitzmic@gmail.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
270ac2c290
commit
8c32513bd3
@ -610,47 +610,70 @@ static int __init __maybe_unused NCR5380_probe_irq(struct Scsi_Host *instance,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NCR58380_print_options - show options
|
* NCR58380_info - report driver and host information
|
||||||
* @instance: unused for now
|
* @instance: relevant scsi host instance
|
||||||
*
|
*
|
||||||
* Called by probe code indicating the NCR5380 driver options that
|
* For use as the host template info() handler.
|
||||||
* were selected. At some point this will switch to runtime options
|
|
||||||
* read from the adapter in question
|
|
||||||
*
|
*
|
||||||
* Locks: none
|
* Locks: none
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void __init __maybe_unused
|
static const char *NCR5380_info(struct Scsi_Host *instance)
|
||||||
NCR5380_print_options(struct Scsi_Host *instance)
|
|
||||||
{
|
{
|
||||||
printk(" generic options"
|
struct NCR5380_hostdata *hostdata = shost_priv(instance);
|
||||||
|
|
||||||
|
return hostdata->info;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void prepare_info(struct Scsi_Host *instance)
|
||||||
|
{
|
||||||
|
struct NCR5380_hostdata *hostdata = shost_priv(instance);
|
||||||
|
|
||||||
|
snprintf(hostdata->info, sizeof(hostdata->info),
|
||||||
|
"%s, io_port 0x%lx, n_io_port %d, "
|
||||||
|
"base 0x%lx, irq %d, "
|
||||||
|
"can_queue %d, cmd_per_lun %d, "
|
||||||
|
"sg_tablesize %d, this_id %d, "
|
||||||
|
"flags { %s%s%s}, "
|
||||||
|
#if defined(USLEEP_POLL) && defined(USLEEP_WAITLONG)
|
||||||
|
"USLEEP_POLL %d, USLEEP_WAITLONG %d, "
|
||||||
|
#endif
|
||||||
|
"options { %s} ",
|
||||||
|
instance->hostt->name, instance->io_port, instance->n_io_port,
|
||||||
|
instance->base, instance->irq,
|
||||||
|
instance->can_queue, instance->cmd_per_lun,
|
||||||
|
instance->sg_tablesize, instance->this_id,
|
||||||
|
hostdata->flags & FLAG_NCR53C400 ? "NCR53C400 " : "",
|
||||||
|
hostdata->flags & FLAG_DTC3181E ? "DTC3181E " : "",
|
||||||
|
hostdata->flags & FLAG_NO_PSEUDO_DMA ? "NO_PSEUDO_DMA " : "",
|
||||||
|
#if defined(USLEEP_POLL) && defined(USLEEP_WAITLONG)
|
||||||
|
USLEEP_POLL, USLEEP_WAITLONG,
|
||||||
|
#endif
|
||||||
#ifdef AUTOPROBE_IRQ
|
#ifdef AUTOPROBE_IRQ
|
||||||
" AUTOPROBE_IRQ"
|
"AUTOPROBE_IRQ "
|
||||||
#endif
|
#endif
|
||||||
#ifdef DIFFERENTIAL
|
#ifdef DIFFERENTIAL
|
||||||
" DIFFERENTIAL"
|
"DIFFERENTIAL "
|
||||||
#endif
|
#endif
|
||||||
#ifdef REAL_DMA
|
#ifdef REAL_DMA
|
||||||
" REAL DMA"
|
"REAL_DMA "
|
||||||
#endif
|
#endif
|
||||||
#ifdef REAL_DMA_POLL
|
#ifdef REAL_DMA_POLL
|
||||||
" REAL DMA POLL"
|
"REAL_DMA_POLL "
|
||||||
#endif
|
#endif
|
||||||
#ifdef PARITY
|
#ifdef PARITY
|
||||||
" PARITY"
|
"PARITY "
|
||||||
#endif
|
#endif
|
||||||
#ifdef PSEUDO_DMA
|
#ifdef PSEUDO_DMA
|
||||||
" PSEUDO DMA"
|
"PSEUDO_DMA "
|
||||||
#endif
|
#endif
|
||||||
#ifdef UNSAFE
|
#ifdef UNSAFE
|
||||||
" UNSAFE "
|
"UNSAFE "
|
||||||
#endif
|
#endif
|
||||||
);
|
#ifdef NCR53C400
|
||||||
printk(" USLEEP_POLL=%d USLEEP_SLEEP=%d", USLEEP_POLL, USLEEP_SLEEP);
|
"NCR53C400 "
|
||||||
printk(" generic release=%d", NCR5380_PUBLIC_RELEASE);
|
#endif
|
||||||
if (((struct NCR5380_hostdata *) instance->hostdata)->flags & FLAG_NCR53C400) {
|
"");
|
||||||
printk(" ncr53c400 release=%d", NCR53C400_PUBLIC_RELEASE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -728,13 +751,6 @@ static int __maybe_unused NCR5380_show_info(struct seq_file *m,
|
|||||||
SPRINTF("PAS16 release=%d", PAS16_PUBLIC_RELEASE);
|
SPRINTF("PAS16 release=%d", PAS16_PUBLIC_RELEASE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SPRINTF("\nBase Addr: 0x%05lX ", (long) instance->base);
|
|
||||||
SPRINTF("io_port: %04x ", (int) instance->io_port);
|
|
||||||
if (instance->irq == NO_IRQ)
|
|
||||||
SPRINTF("IRQ: None.\n");
|
|
||||||
else
|
|
||||||
SPRINTF("IRQ: %d.\n", instance->irq);
|
|
||||||
|
|
||||||
#ifdef DTC_PUBLIC_RELEASE
|
#ifdef DTC_PUBLIC_RELEASE
|
||||||
SPRINTF("Highwater I/O busy_spin_counts -- write: %d read: %d\n", dtc_wmaxi, dtc_maxi);
|
SPRINTF("Highwater I/O busy_spin_counts -- write: %d read: %d\n", dtc_wmaxi, dtc_maxi);
|
||||||
#endif
|
#endif
|
||||||
@ -842,6 +858,8 @@ static int NCR5380_init(struct Scsi_Host *instance, int flags)
|
|||||||
hostdata->host = instance;
|
hostdata->host = instance;
|
||||||
hostdata->time_expires = 0;
|
hostdata->time_expires = 0;
|
||||||
|
|
||||||
|
prepare_info(instance);
|
||||||
|
|
||||||
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
||||||
NCR5380_write(MODE_REG, MR_BASE);
|
NCR5380_write(MODE_REG, MR_BASE);
|
||||||
NCR5380_write(TARGET_COMMAND_REG, 0);
|
NCR5380_write(TARGET_COMMAND_REG, 0);
|
||||||
|
@ -273,6 +273,7 @@ struct NCR5380_hostdata {
|
|||||||
volatile Scsi_Cmnd *selecting;
|
volatile Scsi_Cmnd *selecting;
|
||||||
struct delayed_work coroutine; /* our co-routine */
|
struct delayed_work coroutine; /* our co-routine */
|
||||||
struct scsi_eh_save ses;
|
struct scsi_eh_save ses;
|
||||||
|
char info[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
@ -307,7 +308,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance);
|
|||||||
static irqreturn_t NCR5380_intr(int irq, void *dev_id);
|
static irqreturn_t NCR5380_intr(int irq, void *dev_id);
|
||||||
#endif
|
#endif
|
||||||
static void NCR5380_main(struct work_struct *work);
|
static void NCR5380_main(struct work_struct *work);
|
||||||
static void __maybe_unused NCR5380_print_options(struct Scsi_Host *instance);
|
static const char *NCR5380_info(struct Scsi_Host *instance);
|
||||||
static void NCR5380_reselect(struct Scsi_Host *instance);
|
static void NCR5380_reselect(struct Scsi_Host *instance);
|
||||||
static int NCR5380_select(struct Scsi_Host *instance, Scsi_Cmnd *cmd);
|
static int NCR5380_select(struct Scsi_Host *instance, Scsi_Cmnd *cmd);
|
||||||
#if defined(PSEUDO_DMA) || defined(REAL_DMA) || defined(REAL_DMA_POLL)
|
#if defined(PSEUDO_DMA) || defined(REAL_DMA) || defined(REAL_DMA_POLL)
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#define NCR5380_write(reg, value) cumanascsi_write(_instance, reg, value)
|
#define NCR5380_write(reg, value) cumanascsi_write(_instance, reg, value)
|
||||||
#define NCR5380_intr cumanascsi_intr
|
#define NCR5380_intr cumanascsi_intr
|
||||||
#define NCR5380_queue_command cumanascsi_queue_command
|
#define NCR5380_queue_command cumanascsi_queue_command
|
||||||
|
#define NCR5380_info cumanascsi_info
|
||||||
|
|
||||||
#define NCR5380_implementation_fields \
|
#define NCR5380_implementation_fields \
|
||||||
unsigned ctrl; \
|
unsigned ctrl; \
|
||||||
@ -41,11 +42,6 @@ void cumanascsi_setup(char *str, int *ints)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *cumanascsi_info(struct Scsi_Host *spnt)
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CTRL 0x16fc
|
#define CTRL 0x16fc
|
||||||
#define STAT 0x2004
|
#define STAT 0x2004
|
||||||
#define L(v) (((v)<<16)|((v) & 0x0000ffff))
|
#define L(v) (((v)<<16)|((v) & 0x0000ffff))
|
||||||
@ -266,14 +262,6 @@ static int cumanascsi1_probe(struct expansion_card *ec,
|
|||||||
goto out_unmap;
|
goto out_unmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
printk("scsi%d: at port 0x%08lx irq %d",
|
|
||||||
host->host_no, host->io_port, host->irq);
|
|
||||||
printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
|
|
||||||
host->can_queue, host->cmd_per_lun, CUMANASCSI_PUBLIC_RELEASE);
|
|
||||||
printk("\nscsi%d:", host->host_no);
|
|
||||||
NCR5380_print_options(host);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
ret = scsi_add_host(host, &ec->dev);
|
ret = scsi_add_host(host, &ec->dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_free_irq;
|
goto out_free_irq;
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#define NCR5380_read(reg) readb(_base + ((reg) << 2))
|
#define NCR5380_read(reg) readb(_base + ((reg) << 2))
|
||||||
#define NCR5380_write(reg, value) writeb(value, _base + ((reg) << 2))
|
#define NCR5380_write(reg, value) writeb(value, _base + ((reg) << 2))
|
||||||
#define NCR5380_queue_command oakscsi_queue_command
|
#define NCR5380_queue_command oakscsi_queue_command
|
||||||
|
#define NCR5380_info oakscsi_info
|
||||||
#define NCR5380_show_info oakscsi_show_info
|
#define NCR5380_show_info oakscsi_show_info
|
||||||
#define NCR5380_write_info oakscsi_write_info
|
#define NCR5380_write_info oakscsi_write_info
|
||||||
|
|
||||||
@ -40,11 +41,6 @@
|
|||||||
#undef START_DMA_INITIATOR_RECEIVE_REG
|
#undef START_DMA_INITIATOR_RECEIVE_REG
|
||||||
#define START_DMA_INITIATOR_RECEIVE_REG (128 + 7)
|
#define START_DMA_INITIATOR_RECEIVE_REG (128 + 7)
|
||||||
|
|
||||||
const char * oakscsi_info (struct Scsi_Host *spnt)
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
#define STAT ((128 + 16) << 2)
|
#define STAT ((128 + 16) << 2)
|
||||||
#define DATA ((128 + 8) << 2)
|
#define DATA ((128 + 8) << 2)
|
||||||
|
|
||||||
@ -153,14 +149,6 @@ static int oakscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
|||||||
|
|
||||||
NCR5380_init(host, 0);
|
NCR5380_init(host, 0);
|
||||||
|
|
||||||
printk("scsi%d: at port 0x%08lx irqs disabled",
|
|
||||||
host->host_no, host->io_port);
|
|
||||||
printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
|
|
||||||
host->can_queue, host->cmd_per_lun, OAKSCSI_PUBLIC_RELEASE);
|
|
||||||
printk("\nscsi%d:", host->host_no);
|
|
||||||
NCR5380_print_options(host);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
ret = scsi_add_host(host, &ec->dev);
|
ret = scsi_add_host(host, &ec->dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_unmap;
|
goto out_unmap;
|
||||||
|
@ -144,12 +144,6 @@
|
|||||||
* be able to coexist with appropriate changes to the high level
|
* be able to coexist with appropriate changes to the high level
|
||||||
* SCSI code.
|
* SCSI code.
|
||||||
*
|
*
|
||||||
* A NCR5380_PUBLIC_REVISION macro is provided, with the release
|
|
||||||
* number (updated for each public release) printed by the
|
|
||||||
* NCR5380_print_options command, which should be called from the
|
|
||||||
* wrapper detect function, so that I know what release of the driver
|
|
||||||
* users are using.
|
|
||||||
*
|
|
||||||
* Issues specific to the NCR5380 :
|
* Issues specific to the NCR5380 :
|
||||||
*
|
*
|
||||||
* When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead
|
* When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead
|
||||||
@ -247,7 +241,6 @@
|
|||||||
* NCR5380_queue_command
|
* NCR5380_queue_command
|
||||||
* NCR5380_reset
|
* NCR5380_reset
|
||||||
* NCR5380_abort
|
* NCR5380_abort
|
||||||
* NCR5380_proc_info
|
|
||||||
*
|
*
|
||||||
* to be the global entry points into the specific driver, ie
|
* to be the global entry points into the specific driver, ie
|
||||||
* #define NCR5380_queue_command t128_queue_command.
|
* #define NCR5380_queue_command t128_queue_command.
|
||||||
@ -259,8 +252,7 @@
|
|||||||
* The generic driver is initialized by calling NCR5380_init(instance),
|
* The generic driver is initialized by calling NCR5380_init(instance),
|
||||||
* after setting the appropriate host specific fields and ID. If the
|
* after setting the appropriate host specific fields and ID. If the
|
||||||
* driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance,
|
* driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance,
|
||||||
* possible) function may be used. Before the specific driver initialization
|
* possible) function may be used.
|
||||||
* code finishes, NCR5380_print_options should be called.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct Scsi_Host *first_instance = NULL;
|
static struct Scsi_Host *first_instance = NULL;
|
||||||
@ -670,30 +662,49 @@ static inline void NCR5380_all_init(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/*
|
* NCR58380_info - report driver and host information
|
||||||
* Function : void NCR58380_print_options (struct Scsi_Host *instance)
|
* @instance: relevant scsi host instance
|
||||||
*
|
*
|
||||||
* Purpose : called by probe code indicating the NCR5380 driver
|
* For use as the host template info() handler.
|
||||||
* options that were selected.
|
|
||||||
*
|
*
|
||||||
* Inputs : instance, pointer to this instance. Unused.
|
* Locks: none
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void __init NCR5380_print_options(struct Scsi_Host *instance)
|
static const char *NCR5380_info(struct Scsi_Host *instance)
|
||||||
{
|
{
|
||||||
printk(" generic options"
|
struct NCR5380_hostdata *hostdata = shost_priv(instance);
|
||||||
|
|
||||||
|
return hostdata->info;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void prepare_info(struct Scsi_Host *instance)
|
||||||
|
{
|
||||||
|
struct NCR5380_hostdata *hostdata = shost_priv(instance);
|
||||||
|
|
||||||
|
snprintf(hostdata->info, sizeof(hostdata->info),
|
||||||
|
"%s, io_port 0x%lx, n_io_port %d, "
|
||||||
|
"base 0x%lx, irq %d, "
|
||||||
|
"can_queue %d, cmd_per_lun %d, "
|
||||||
|
"sg_tablesize %d, this_id %d, "
|
||||||
|
"options { %s} ",
|
||||||
|
instance->hostt->name, instance->io_port, instance->n_io_port,
|
||||||
|
instance->base, instance->irq,
|
||||||
|
instance->can_queue, instance->cmd_per_lun,
|
||||||
|
instance->sg_tablesize, instance->this_id,
|
||||||
|
#ifdef DIFFERENTIAL
|
||||||
|
"DIFFERENTIAL "
|
||||||
|
#endif
|
||||||
#ifdef REAL_DMA
|
#ifdef REAL_DMA
|
||||||
" REAL DMA"
|
"REAL_DMA "
|
||||||
#endif
|
#endif
|
||||||
#ifdef PARITY
|
#ifdef PARITY
|
||||||
" PARITY"
|
"PARITY "
|
||||||
#endif
|
#endif
|
||||||
#ifdef SUPPORT_TAGS
|
#ifdef SUPPORT_TAGS
|
||||||
" SCSI-2 TAGGED QUEUING"
|
"SUPPORT_TAGS "
|
||||||
#endif
|
#endif
|
||||||
);
|
"");
|
||||||
printk(" generic release=%d", NCR5380_PUBLIC_RELEASE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -839,6 +850,8 @@ static int __init NCR5380_init(struct Scsi_Host *instance, int flags)
|
|||||||
first_instance = instance;
|
first_instance = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prepare_info(instance);
|
||||||
|
|
||||||
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
||||||
NCR5380_write(MODE_REG, MR_BASE);
|
NCR5380_write(MODE_REG, MR_BASE);
|
||||||
NCR5380_write(TARGET_COMMAND_REG, 0);
|
NCR5380_write(TARGET_COMMAND_REG, 0);
|
||||||
|
@ -699,21 +699,6 @@ static int __init atari_scsi_detect(struct scsi_host_template *host)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "scsi%d: options CAN_QUEUE=%d CMD_PER_LUN=%d SCAT-GAT=%d "
|
|
||||||
#ifdef SUPPORT_TAGS
|
|
||||||
"TAGGED-QUEUING=%s "
|
|
||||||
#endif
|
|
||||||
"HOSTID=%d",
|
|
||||||
instance->host_no, instance->hostt->can_queue,
|
|
||||||
instance->hostt->cmd_per_lun,
|
|
||||||
instance->hostt->sg_tablesize,
|
|
||||||
#ifdef SUPPORT_TAGS
|
|
||||||
setup_use_tagged_queuing ? "yes" : "no",
|
|
||||||
#endif
|
|
||||||
instance->hostt->this_id );
|
|
||||||
NCR5380_print_options(instance);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
called = 1;
|
called = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -815,15 +800,6 @@ static void __init atari_scsi_reset_boot(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static const char *atari_scsi_info(struct Scsi_Host *host)
|
|
||||||
{
|
|
||||||
/* atari_scsi_detect() is verbose enough... */
|
|
||||||
static const char string[] = "Atari native SCSI";
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(REAL_DMA)
|
#if defined(REAL_DMA)
|
||||||
|
|
||||||
static unsigned long atari_scsi_dma_setup(struct Scsi_Host *instance,
|
static unsigned long atari_scsi_dma_setup(struct Scsi_Host *instance,
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#define NCR5380_queue_command atari_scsi_queue_command
|
#define NCR5380_queue_command atari_scsi_queue_command
|
||||||
#define NCR5380_abort atari_scsi_abort
|
#define NCR5380_abort atari_scsi_abort
|
||||||
#define NCR5380_show_info atari_scsi_show_info
|
#define NCR5380_show_info atari_scsi_show_info
|
||||||
|
#define NCR5380_info atari_scsi_info
|
||||||
#define NCR5380_dma_read_setup(inst,d,c) atari_scsi_dma_setup (inst, d, c, 0)
|
#define NCR5380_dma_read_setup(inst,d,c) atari_scsi_dma_setup (inst, d, c, 0)
|
||||||
#define NCR5380_dma_write_setup(inst,d,c) atari_scsi_dma_setup (inst, d, c, 1)
|
#define NCR5380_dma_write_setup(inst,d,c) atari_scsi_dma_setup (inst, d, c, 1)
|
||||||
#define NCR5380_dma_residual(inst) atari_scsi_dma_residual( inst )
|
#define NCR5380_dma_residual(inst) atari_scsi_dma_residual( inst )
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
static struct scsi_host_template dmx3191d_driver_template = {
|
static struct scsi_host_template dmx3191d_driver_template = {
|
||||||
.proc_name = DMX3191D_DRIVER_NAME,
|
.proc_name = DMX3191D_DRIVER_NAME,
|
||||||
.name = "Domex DMX3191D",
|
.name = "Domex DMX3191D",
|
||||||
|
.info = NCR5380_info,
|
||||||
.queuecommand = NCR5380_queue_command,
|
.queuecommand = NCR5380_queue_command,
|
||||||
.eh_abort_handler = NCR5380_abort,
|
.eh_abort_handler = NCR5380_abort,
|
||||||
.eh_bus_reset_handler = NCR5380_bus_reset,
|
.eh_bus_reset_handler = NCR5380_bus_reset,
|
||||||
|
@ -281,15 +281,6 @@ found:
|
|||||||
printk("scsi%d : irq = %d\n", instance->host_no, instance->irq);
|
printk("scsi%d : irq = %d\n", instance->host_no, instance->irq);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printk(KERN_INFO "scsi%d : at 0x%05X", instance->host_no, (int) instance->base);
|
|
||||||
if (instance->irq == NO_IRQ)
|
|
||||||
printk(" interrupts disabled");
|
|
||||||
else
|
|
||||||
printk(" irq %d", instance->irq);
|
|
||||||
printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d", CAN_QUEUE, CMD_PER_LUN, DTC_PUBLIC_RELEASE);
|
|
||||||
NCR5380_print_options(instance);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
++current_override;
|
++current_override;
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
@ -461,6 +452,7 @@ static struct scsi_host_template driver_template = {
|
|||||||
.proc_name = "dtc3x80",
|
.proc_name = "dtc3x80",
|
||||||
.show_info = dtc_show_info,
|
.show_info = dtc_show_info,
|
||||||
.write_info = dtc_write_info,
|
.write_info = dtc_write_info,
|
||||||
|
.info = dtc_info,
|
||||||
.queuecommand = dtc_queue_command,
|
.queuecommand = dtc_queue_command,
|
||||||
.eh_abort_handler = dtc_abort,
|
.eh_abort_handler = dtc_abort,
|
||||||
.eh_bus_reset_handler = dtc_bus_reset,
|
.eh_bus_reset_handler = dtc_bus_reset,
|
||||||
|
@ -65,6 +65,7 @@
|
|||||||
#define NCR5380_queue_command dtc_queue_command
|
#define NCR5380_queue_command dtc_queue_command
|
||||||
#define NCR5380_abort dtc_abort
|
#define NCR5380_abort dtc_abort
|
||||||
#define NCR5380_bus_reset dtc_bus_reset
|
#define NCR5380_bus_reset dtc_bus_reset
|
||||||
|
#define NCR5380_info dtc_info
|
||||||
#define NCR5380_show_info dtc_show_info
|
#define NCR5380_show_info dtc_show_info
|
||||||
#define NCR5380_write_info dtc_write_info
|
#define NCR5380_write_info dtc_write_info
|
||||||
|
|
||||||
|
@ -446,34 +446,12 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
|
|||||||
printk(KERN_INFO "scsi%d : please jumper the board for a free IRQ.\n", instance->host_no);
|
printk(KERN_INFO "scsi%d : please jumper the board for a free IRQ.\n", instance->host_no);
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "scsi%d : at " STRVAL(NCR5380_map_name) " 0x%x", instance->host_no, (unsigned int) instance->NCR5380_instance_name);
|
|
||||||
if (instance->irq == NO_IRQ)
|
|
||||||
printk(" interrupts disabled");
|
|
||||||
else
|
|
||||||
printk(" irq %d", instance->irq);
|
|
||||||
printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d", CAN_QUEUE, CMD_PER_LUN, GENERIC_NCR5380_PUBLIC_RELEASE);
|
|
||||||
NCR5380_print_options(instance);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
++current_override;
|
++current_override;
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* generic_NCR5380_info - reporting string
|
|
||||||
* @host: NCR5380 to report on
|
|
||||||
*
|
|
||||||
* Report driver information for the NCR5380
|
|
||||||
*/
|
|
||||||
|
|
||||||
static const char *generic_NCR5380_info(struct Scsi_Host *host)
|
|
||||||
{
|
|
||||||
static const char string[] = "Generic NCR5380/53C400 Driver";
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generic_NCR5380_release_resources - free resources
|
* generic_NCR5380_release_resources - free resources
|
||||||
* @instance: host adapter to clean up
|
* @instance: host adapter to clean up
|
||||||
@ -720,120 +698,9 @@ static inline int NCR5380_pwrite(struct Scsi_Host *instance, unsigned char *src,
|
|||||||
|
|
||||||
#include "NCR5380.c"
|
#include "NCR5380.c"
|
||||||
|
|
||||||
#define PRINTP(x) seq_printf(m, x)
|
|
||||||
#define ANDP ,
|
|
||||||
|
|
||||||
static void sprint_opcode(struct seq_file *m, int opcode)
|
|
||||||
{
|
|
||||||
PRINTP("0x%02x " ANDP opcode);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sprint_command(struct seq_file *m, unsigned char *command)
|
|
||||||
{
|
|
||||||
int i, s;
|
|
||||||
sprint_opcode(m, command[0]);
|
|
||||||
for (i = 1, s = COMMAND_SIZE(command[0]); i < s; ++i)
|
|
||||||
PRINTP("%02x " ANDP command[i]);
|
|
||||||
PRINTP("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sprintf_Scsi_Cmnd - print a scsi command
|
|
||||||
* @m: seq_fil to print into
|
|
||||||
* @cmd: SCSI command block
|
|
||||||
*
|
|
||||||
* Print out the target and command data in hex
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void sprint_Scsi_Cmnd(struct seq_file *m, Scsi_Cmnd * cmd)
|
|
||||||
{
|
|
||||||
PRINTP("host number %d destination target %d, lun %llu\n" ANDP cmd->device->host->host_no ANDP cmd->device->id ANDP cmd->device->lun);
|
|
||||||
PRINTP(" command = ");
|
|
||||||
sprint_command(m, cmd->cmnd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* generic_NCR5380_proc_info - /proc for NCR5380 driver
|
|
||||||
* @buffer: buffer to print into
|
|
||||||
* @start: start position
|
|
||||||
* @offset: offset into buffer
|
|
||||||
* @len: length
|
|
||||||
* @hostno: instance to affect
|
|
||||||
* @inout: read/write
|
|
||||||
*
|
|
||||||
* Provide the procfs information for the 5380 controller. We fill
|
|
||||||
* this with useful debugging information including the commands
|
|
||||||
* being executed, disconnected command queue and the statistical
|
|
||||||
* data
|
|
||||||
*
|
|
||||||
* Locks: global cli/lock for queue walk
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int generic_NCR5380_show_info(struct seq_file *m, struct Scsi_Host *scsi_ptr)
|
|
||||||
{
|
|
||||||
NCR5380_local_declare();
|
|
||||||
unsigned long flags;
|
|
||||||
unsigned char status;
|
|
||||||
int i;
|
|
||||||
Scsi_Cmnd *ptr;
|
|
||||||
struct NCR5380_hostdata *hostdata;
|
|
||||||
|
|
||||||
NCR5380_setup(scsi_ptr);
|
|
||||||
hostdata = (struct NCR5380_hostdata *) scsi_ptr->hostdata;
|
|
||||||
|
|
||||||
spin_lock_irqsave(scsi_ptr->host_lock, flags);
|
|
||||||
PRINTP("SCSI host number %d : %s\n" ANDP scsi_ptr->host_no ANDP scsi_ptr->hostt->name);
|
|
||||||
PRINTP("Generic NCR5380 driver version %d\n" ANDP GENERIC_NCR5380_PUBLIC_RELEASE);
|
|
||||||
PRINTP("NCR5380 core version %d\n" ANDP NCR5380_PUBLIC_RELEASE);
|
|
||||||
#ifdef NCR53C400
|
|
||||||
PRINTP("NCR53C400 extension version %d\n" ANDP NCR53C400_PUBLIC_RELEASE);
|
|
||||||
PRINTP("NCR53C400 card%s detected\n" ANDP(((struct NCR5380_hostdata *) scsi_ptr->hostdata)->flags & FLAG_NCR53C400) ? "" : " not");
|
|
||||||
# if NCR53C400_PSEUDO_DMA
|
|
||||||
PRINTP("NCR53C400 pseudo DMA used\n");
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
PRINTP("NO NCR53C400 driver extensions\n");
|
|
||||||
#endif
|
|
||||||
PRINTP("Using %s mapping at %s 0x%lx, " ANDP STRVAL(NCR5380_map_config) ANDP STRVAL(NCR5380_map_name) ANDP scsi_ptr->NCR5380_instance_name);
|
|
||||||
if (scsi_ptr->irq == NO_IRQ)
|
|
||||||
PRINTP("no interrupt\n");
|
|
||||||
else
|
|
||||||
PRINTP("on interrupt %d\n" ANDP scsi_ptr->irq);
|
|
||||||
|
|
||||||
status = NCR5380_read(STATUS_REG);
|
|
||||||
if (!(status & SR_REQ))
|
|
||||||
PRINTP("REQ not asserted, phase unknown.\n");
|
|
||||||
else {
|
|
||||||
for (i = 0; (phases[i].value != PHASE_UNKNOWN) && (phases[i].value != (status & PHASE_MASK)); ++i);
|
|
||||||
PRINTP("Phase %s\n" ANDP phases[i].name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hostdata->connected) {
|
|
||||||
PRINTP("No currently connected command\n");
|
|
||||||
} else {
|
|
||||||
sprint_Scsi_Cmnd(m, (Scsi_Cmnd *) hostdata->connected);
|
|
||||||
}
|
|
||||||
|
|
||||||
PRINTP("issue_queue\n");
|
|
||||||
|
|
||||||
for (ptr = (Scsi_Cmnd *) hostdata->issue_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble)
|
|
||||||
sprint_Scsi_Cmnd(m, ptr);
|
|
||||||
|
|
||||||
PRINTP("disconnected_queue\n");
|
|
||||||
|
|
||||||
for (ptr = (Scsi_Cmnd *) hostdata->disconnected_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble)
|
|
||||||
sprint_Scsi_Cmnd(m, ptr);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(scsi_ptr->host_lock, flags);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef PRINTP
|
|
||||||
#undef ANDP
|
|
||||||
|
|
||||||
static struct scsi_host_template driver_template = {
|
static struct scsi_host_template driver_template = {
|
||||||
.show_info = generic_NCR5380_show_info,
|
.show_info = generic_NCR5380_show_info,
|
||||||
.name = "Generic NCR5380/NCR53C400 Scsi Driver",
|
.name = "Generic NCR5380/NCR53C400 SCSI",
|
||||||
.detect = generic_NCR5380_detect,
|
.detect = generic_NCR5380_detect,
|
||||||
.release = generic_NCR5380_release_resources,
|
.release = generic_NCR5380_release_resources,
|
||||||
.info = generic_NCR5380_info,
|
.info = generic_NCR5380_info,
|
||||||
|
@ -100,6 +100,8 @@
|
|||||||
#define NCR5380_bus_reset generic_NCR5380_bus_reset
|
#define NCR5380_bus_reset generic_NCR5380_bus_reset
|
||||||
#define NCR5380_pread generic_NCR5380_pread
|
#define NCR5380_pread generic_NCR5380_pread
|
||||||
#define NCR5380_pwrite generic_NCR5380_pwrite
|
#define NCR5380_pwrite generic_NCR5380_pwrite
|
||||||
|
#define NCR5380_info generic_NCR5380_info
|
||||||
|
#define NCR5380_show_info generic_NCR5380_show_info
|
||||||
|
|
||||||
#define BOARD_NCR5380 0
|
#define BOARD_NCR5380 0
|
||||||
#define BOARD_NCR53C400 1
|
#define BOARD_NCR53C400 1
|
||||||
|
@ -236,16 +236,6 @@ int __init macscsi_detect(struct scsi_host_template * tpnt)
|
|||||||
instance->irq = NO_IRQ;
|
instance->irq = NO_IRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "scsi%d: generic 5380 at port %lX irq", instance->host_no, instance->io_port);
|
|
||||||
if (instance->irq == NO_IRQ)
|
|
||||||
printk (KERN_INFO "s disabled");
|
|
||||||
else
|
|
||||||
printk (KERN_INFO " %d", instance->irq);
|
|
||||||
printk(KERN_INFO " options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
|
|
||||||
instance->can_queue, instance->cmd_per_lun, MACSCSI_PUBLIC_RELEASE);
|
|
||||||
printk(KERN_INFO "\nscsi%d:", instance->host_no);
|
|
||||||
NCR5380_print_options(instance);
|
|
||||||
printk("\n");
|
|
||||||
called = 1;
|
called = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -297,10 +287,6 @@ static void mac_scsi_reset_boot(struct Scsi_Host *instance)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char * macscsi_info (struct Scsi_Host *spnt) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Pseudo-DMA: (Ove Edlund)
|
Pseudo-DMA: (Ove Edlund)
|
||||||
The code attempts to catch bus errors that occur if one for example
|
The code attempts to catch bus errors that occur if one for example
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
#define NCR5380_queue_command macscsi_queue_command
|
#define NCR5380_queue_command macscsi_queue_command
|
||||||
#define NCR5380_abort macscsi_abort
|
#define NCR5380_abort macscsi_abort
|
||||||
#define NCR5380_bus_reset macscsi_bus_reset
|
#define NCR5380_bus_reset macscsi_bus_reset
|
||||||
|
#define NCR5380_info macscsi_info
|
||||||
#define NCR5380_show_info macscsi_show_info
|
#define NCR5380_show_info macscsi_show_info
|
||||||
#define NCR5380_write_info macscsi_write_info
|
#define NCR5380_write_info macscsi_write_info
|
||||||
|
|
||||||
|
@ -438,17 +438,6 @@ static int __init pas16_detect(struct scsi_host_template *tpnt)
|
|||||||
printk("scsi%d : irq = %d\n", instance->host_no, instance->irq);
|
printk("scsi%d : irq = %d\n", instance->host_no, instance->irq);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printk("scsi%d : at 0x%04x", instance->host_no, (int)
|
|
||||||
instance->io_port);
|
|
||||||
if (instance->irq == NO_IRQ)
|
|
||||||
printk (" interrupts disabled");
|
|
||||||
else
|
|
||||||
printk (" irq %d", instance->irq);
|
|
||||||
printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
|
|
||||||
CAN_QUEUE, CMD_PER_LUN, PAS16_PUBLIC_RELEASE);
|
|
||||||
NCR5380_print_options(instance);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
++current_override;
|
++current_override;
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
@ -586,6 +575,7 @@ static struct scsi_host_template driver_template = {
|
|||||||
.proc_name = "pas16",
|
.proc_name = "pas16",
|
||||||
.show_info = pas16_show_info,
|
.show_info = pas16_show_info,
|
||||||
.write_info = pas16_write_info,
|
.write_info = pas16_write_info,
|
||||||
|
.info = pas16_info,
|
||||||
.queuecommand = pas16_queue_command,
|
.queuecommand = pas16_queue_command,
|
||||||
.eh_abort_handler = pas16_abort,
|
.eh_abort_handler = pas16_abort,
|
||||||
.eh_bus_reset_handler = pas16_bus_reset,
|
.eh_bus_reset_handler = pas16_bus_reset,
|
||||||
|
@ -143,6 +143,7 @@
|
|||||||
#define NCR5380_queue_command pas16_queue_command
|
#define NCR5380_queue_command pas16_queue_command
|
||||||
#define NCR5380_abort pas16_abort
|
#define NCR5380_abort pas16_abort
|
||||||
#define NCR5380_bus_reset pas16_bus_reset
|
#define NCR5380_bus_reset pas16_bus_reset
|
||||||
|
#define NCR5380_info pas16_info
|
||||||
#define NCR5380_show_info pas16_show_info
|
#define NCR5380_show_info pas16_show_info
|
||||||
#define NCR5380_write_info pas16_write_info
|
#define NCR5380_write_info pas16_write_info
|
||||||
|
|
||||||
|
@ -131,12 +131,6 @@
|
|||||||
* be able to coexist with appropriate changes to the high level
|
* be able to coexist with appropriate changes to the high level
|
||||||
* SCSI code.
|
* SCSI code.
|
||||||
*
|
*
|
||||||
* A NCR5380_PUBLIC_REVISION macro is provided, with the release
|
|
||||||
* number (updated for each public release) printed by the
|
|
||||||
* NCR5380_print_options command, which should be called from the
|
|
||||||
* wrapper detect function, so that I know what release of the driver
|
|
||||||
* users are using.
|
|
||||||
*
|
|
||||||
* Issues specific to the NCR5380 :
|
* Issues specific to the NCR5380 :
|
||||||
*
|
*
|
||||||
* When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead
|
* When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead
|
||||||
@ -234,7 +228,6 @@
|
|||||||
* NCR5380_queue_command
|
* NCR5380_queue_command
|
||||||
* NCR5380_reset
|
* NCR5380_reset
|
||||||
* NCR5380_abort
|
* NCR5380_abort
|
||||||
* NCR5380_proc_info
|
|
||||||
*
|
*
|
||||||
* to be the global entry points into the specific driver, ie
|
* to be the global entry points into the specific driver, ie
|
||||||
* #define NCR5380_queue_command t128_queue_command.
|
* #define NCR5380_queue_command t128_queue_command.
|
||||||
@ -246,8 +239,7 @@
|
|||||||
* The generic driver is initialized by calling NCR5380_init(instance),
|
* The generic driver is initialized by calling NCR5380_init(instance),
|
||||||
* after setting the appropriate host specific fields and ID. If the
|
* after setting the appropriate host specific fields and ID. If the
|
||||||
* driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance,
|
* driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance,
|
||||||
* possible) function may be used. Before the specific driver initialization
|
* possible) function may be used.
|
||||||
* code finishes, NCR5380_print_options should be called.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct Scsi_Host *first_instance = NULL;
|
static struct Scsi_Host *first_instance = NULL;
|
||||||
@ -616,30 +608,49 @@ static inline void NCR5380_all_init (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/*
|
* NCR58380_info - report driver and host information
|
||||||
* Function : void NCR58380_print_options (struct Scsi_Host *instance)
|
* @instance: relevant scsi host instance
|
||||||
*
|
*
|
||||||
* Purpose : called by probe code indicating the NCR5380 driver
|
* For use as the host template info() handler.
|
||||||
* options that were selected.
|
|
||||||
*
|
*
|
||||||
* Inputs : instance, pointer to this instance. Unused.
|
* Locks: none
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void __init NCR5380_print_options (struct Scsi_Host *instance)
|
static const char *NCR5380_info(struct Scsi_Host *instance)
|
||||||
{
|
{
|
||||||
printk(" generic options"
|
struct NCR5380_hostdata *hostdata = shost_priv(instance);
|
||||||
|
|
||||||
|
return hostdata->info;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void prepare_info(struct Scsi_Host *instance)
|
||||||
|
{
|
||||||
|
struct NCR5380_hostdata *hostdata = shost_priv(instance);
|
||||||
|
|
||||||
|
snprintf(hostdata->info, sizeof(hostdata->info),
|
||||||
|
"%s, io_port 0x%lx, n_io_port %d, "
|
||||||
|
"base 0x%lx, irq %d, "
|
||||||
|
"can_queue %d, cmd_per_lun %d, "
|
||||||
|
"sg_tablesize %d, this_id %d, "
|
||||||
|
"options { %s} ",
|
||||||
|
instance->hostt->name, instance->io_port, instance->n_io_port,
|
||||||
|
instance->base, instance->irq,
|
||||||
|
instance->can_queue, instance->cmd_per_lun,
|
||||||
|
instance->sg_tablesize, instance->this_id,
|
||||||
|
#ifdef DIFFERENTIAL
|
||||||
|
"DIFFERENTIAL "
|
||||||
|
#endif
|
||||||
#ifdef REAL_DMA
|
#ifdef REAL_DMA
|
||||||
" REAL DMA"
|
"REAL_DMA "
|
||||||
#endif
|
#endif
|
||||||
#ifdef PARITY
|
#ifdef PARITY
|
||||||
" PARITY"
|
"PARITY "
|
||||||
#endif
|
#endif
|
||||||
#ifdef SUPPORT_TAGS
|
#ifdef SUPPORT_TAGS
|
||||||
" SCSI-2 TAGGED QUEUING"
|
"SUPPORT_TAGS "
|
||||||
#endif
|
#endif
|
||||||
);
|
"");
|
||||||
printk(" generic release=%d", NCR5380_PUBLIC_RELEASE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -784,7 +795,9 @@ static int __init NCR5380_init(struct Scsi_Host *instance, int flags)
|
|||||||
the_template = instance->hostt;
|
the_template = instance->hostt;
|
||||||
first_instance = instance;
|
first_instance = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prepare_info(instance);
|
||||||
|
|
||||||
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
||||||
NCR5380_write(MODE_REG, MR_BASE);
|
NCR5380_write(MODE_REG, MR_BASE);
|
||||||
NCR5380_write(TARGET_COMMAND_REG, 0);
|
NCR5380_write(TARGET_COMMAND_REG, 0);
|
||||||
|
@ -286,19 +286,6 @@ static int __init sun3scsi_detect(struct scsi_host_template *tpnt)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_info("scsi%d: %s at port %lX irq", instance->host_no,
|
|
||||||
tpnt->proc_name, instance->io_port);
|
|
||||||
if (instance->irq == NO_IRQ)
|
|
||||||
printk ("s disabled");
|
|
||||||
else
|
|
||||||
printk (" %d", instance->irq);
|
|
||||||
printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
|
|
||||||
instance->can_queue, instance->cmd_per_lun,
|
|
||||||
SUN3SCSI_PUBLIC_RELEASE);
|
|
||||||
printk("\nscsi%d:", instance->host_no);
|
|
||||||
NCR5380_print_options(instance);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
dregs->csr = 0;
|
dregs->csr = 0;
|
||||||
udelay(SUN3_DMA_DELAY);
|
udelay(SUN3_DMA_DELAY);
|
||||||
dregs->csr = CSR_SCSI | CSR_FIFO | CSR_INTR;
|
dregs->csr = CSR_SCSI | CSR_FIFO | CSR_INTR;
|
||||||
@ -380,11 +367,6 @@ static void sun3_scsi_reset_boot(struct Scsi_Host *instance)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char *sun3scsi_info(struct Scsi_Host *spnt)
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// safe bits for the CSR
|
// safe bits for the CSR
|
||||||
#define CSR_GOOD 0x060f
|
#define CSR_GOOD 0x060f
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@
|
|||||||
#define NCR5380_bus_reset sun3scsi_bus_reset
|
#define NCR5380_bus_reset sun3scsi_bus_reset
|
||||||
#define NCR5380_abort sun3scsi_abort
|
#define NCR5380_abort sun3scsi_abort
|
||||||
#define NCR5380_show_info sun3scsi_show_info
|
#define NCR5380_show_info sun3scsi_show_info
|
||||||
|
#define NCR5380_info sun3scsi_info
|
||||||
#define NCR5380_dma_xfer_len(i, cmd, phase) \
|
#define NCR5380_dma_xfer_len(i, cmd, phase) \
|
||||||
sun3scsi_dma_xfer_len(cmd->SCp.this_residual,cmd,((phase) & SR_IO) ? 0 : 1)
|
sun3scsi_dma_xfer_len(cmd->SCp.this_residual,cmd,((phase) & SR_IO) ? 0 : 1)
|
||||||
|
|
||||||
|
@ -249,16 +249,6 @@ found:
|
|||||||
printk("scsi%d : irq = %d\n", instance->host_no, instance->irq);
|
printk("scsi%d : irq = %d\n", instance->host_no, instance->irq);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printk("scsi%d : at 0x%08lx", instance->host_no, instance->base);
|
|
||||||
if (instance->irq == NO_IRQ)
|
|
||||||
printk (" interrupts disabled");
|
|
||||||
else
|
|
||||||
printk (" irq %d", instance->irq);
|
|
||||||
printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
|
|
||||||
CAN_QUEUE, CMD_PER_LUN, T128_PUBLIC_RELEASE);
|
|
||||||
NCR5380_print_options(instance);
|
|
||||||
printk("\n");
|
|
||||||
|
|
||||||
++current_override;
|
++current_override;
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
@ -411,6 +401,7 @@ static struct scsi_host_template driver_template = {
|
|||||||
.proc_name = "t128",
|
.proc_name = "t128",
|
||||||
.show_info = t128_show_info,
|
.show_info = t128_show_info,
|
||||||
.write_info = t128_write_info,
|
.write_info = t128_write_info,
|
||||||
|
.info = t128_info,
|
||||||
.queuecommand = t128_queue_command,
|
.queuecommand = t128_queue_command,
|
||||||
.eh_abort_handler = t128_abort,
|
.eh_abort_handler = t128_abort,
|
||||||
.eh_bus_reset_handler = t128_bus_reset,
|
.eh_bus_reset_handler = t128_bus_reset,
|
||||||
|
@ -116,6 +116,7 @@
|
|||||||
#define NCR5380_queue_command t128_queue_command
|
#define NCR5380_queue_command t128_queue_command
|
||||||
#define NCR5380_abort t128_abort
|
#define NCR5380_abort t128_abort
|
||||||
#define NCR5380_bus_reset t128_bus_reset
|
#define NCR5380_bus_reset t128_bus_reset
|
||||||
|
#define NCR5380_info t128_info
|
||||||
#define NCR5380_show_info t128_show_info
|
#define NCR5380_show_info t128_show_info
|
||||||
#define NCR5380_write_info t128_write_info
|
#define NCR5380_write_info t128_write_info
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user