Commit 8c32513b authored by Finn Thain's avatar Finn Thain Committed by Christoph Hellwig

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: default avatarFinn Thain <fthain@telegraphics.com.au>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Tested-by: default avatarMichael Schmitz <schmitzmic@gmail.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 270ac2c2
...@@ -610,47 +610,70 @@ static int __init __maybe_unused NCR5380_probe_irq(struct Scsi_Host *instance, ...@@ -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, ...@@ -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) ...@@ -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 { ...@@ -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); ...@@ -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 @@ ...@@ -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) ...@@ -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, ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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)
{
struct NCR5380_hostdata *hostdata = shost_priv(instance);
return hostdata->info;
}
static void prepare_info(struct Scsi_Host *instance)
{ {
printk(" generic options" 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) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ static int __init dtc_detect(struct scsi_host_template * tpnt) ...@@ -281,15 +281,6 @@ static int __init dtc_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(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 = { ...@@ -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 @@ ...@@ -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) ...@@ -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, ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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) ...@@ -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 = { ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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)
{
struct NCR5380_hostdata *hostdata = shost_priv(instance);
return hostdata->info;
}
static void prepare_info(struct Scsi_Host *instance)
{ {
printk(" generic options" 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);
} }
/* /*
...@@ -785,6 +796,8 @@ static int __init NCR5380_init(struct Scsi_Host *instance, int flags) ...@@ -785,6 +796,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);
......
...@@ -286,19 +286,6 @@ static int __init sun3scsi_detect(struct scsi_host_template *tpnt) ...@@ -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) ...@@ -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 @@ ...@@ -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 @@ static int __init t128_detect(struct scsi_host_template *tpnt) ...@@ -249,16 +249,6 @@ static int __init t128_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%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 = { ...@@ -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 @@ ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment