diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/NCR5380.h | 1 | ||||
-rw-r--r-- | drivers/scsi/atari_NCR5380.c | 22 | ||||
-rw-r--r-- | drivers/scsi/atari_scsi.c | 8 | ||||
-rw-r--r-- | drivers/scsi/mac_scsi.c | 8 | ||||
-rw-r--r-- | drivers/scsi/sun3_scsi.c | 12 |
5 files changed, 28 insertions, 23 deletions
diff --git a/drivers/scsi/NCR5380.h b/drivers/scsi/NCR5380.h index 7b1a0913d94c..2fafe1d54fb8 100644 --- a/drivers/scsi/NCR5380.h +++ b/drivers/scsi/NCR5380.h @@ -242,6 +242,7 @@ #define FLAG_NO_PSEUDO_DMA 8 /* Inhibit DMA */ #define FLAG_DTC3181E 16 /* DTC3181E */ #define FLAG_LATE_DMA_SETUP 32 /* Setup NCR before DMA H/W */ +#define FLAG_TAGGED_QUEUING 64 /* as X3T9.2 spelled it */ #ifndef ASM struct NCR5380_hostdata { diff --git a/drivers/scsi/atari_NCR5380.c b/drivers/scsi/atari_NCR5380.c index 7bbfa1b777c3..74b7c538c394 100644 --- a/drivers/scsi/atari_NCR5380.c +++ b/drivers/scsi/atari_NCR5380.c @@ -283,12 +283,12 @@ typedef struct { static TAG_ALLOC TagAlloc[8][8]; /* 8 targets and 8 LUNs */ -static void __init init_tags(void) +static void __init init_tags(struct NCR5380_hostdata *hostdata) { int target, lun; TAG_ALLOC *ta; - if (!setup_use_tagged_queuing) + if (!(hostdata->flags & FLAG_TAGGED_QUEUING)) return; for (target = 0; target < 8; ++target) { @@ -321,7 +321,8 @@ static int is_lun_busy(struct scsi_cmnd *cmd, int should_be_tagged) if (hostdata->busy[cmd->device->id] & (1 << lun)) return 1; if (!should_be_tagged || - !setup_use_tagged_queuing || !cmd->device->tagged_supported) + !(hostdata->flags & FLAG_TAGGED_QUEUING) || + !cmd->device->tagged_supported) return 0; if (TagAlloc[cmd->device->id][lun].nr_allocated >= TagAlloc[cmd->device->id][lun].queue_size) { @@ -347,7 +348,8 @@ static void cmd_get_tag(struct scsi_cmnd *cmd, int should_be_tagged) * an untagged command. */ if (!should_be_tagged || - !setup_use_tagged_queuing || !cmd->device->tagged_supported) { + !(hostdata->flags & FLAG_TAGGED_QUEUING) || + !cmd->device->tagged_supported) { cmd->tag = TAG_NONE; hostdata->busy[cmd->device->id] |= (1 << lun); dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %d now allocated by untagged " @@ -392,12 +394,12 @@ static void cmd_free_tag(struct scsi_cmnd *cmd) } -static void free_all_tags(void) +static void free_all_tags(struct NCR5380_hostdata *hostdata) { int target, lun; TAG_ALLOC *ta; - if (!setup_use_tagged_queuing) + if (!(hostdata->flags & FLAG_TAGGED_QUEUING)) return; for (target = 0; target < 8; ++target) { @@ -653,11 +655,13 @@ static void prepare_info(struct Scsi_Host *instance) "base 0x%lx, irq %d, " "can_queue %d, cmd_per_lun %d, " "sg_tablesize %d, this_id %d, " + "flags { %s}, " "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_TAGGED_QUEUING ? "TAGGED_QUEUING " : "", #ifdef DIFFERENTIAL "DIFFERENTIAL " #endif @@ -799,7 +803,7 @@ static int __init NCR5380_init(struct Scsi_Host *instance, int flags) for (i = 0; i < 8; ++i) hostdata->busy[i] = 0; #ifdef SUPPORT_TAGS - init_tags(); + init_tags(hostdata); #endif #if defined (REAL_DMA) hostdata->dma_len = 0; @@ -2565,7 +2569,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance) * SIMPLE_QUEUE_TAG for the I_T_L_Q nexus. */ tag = TAG_NONE; - if (phase == PHASE_MSGIN && setup_use_tagged_queuing) { + if (phase == PHASE_MSGIN && (hostdata->flags & FLAG_TAGGED_QUEUING)) { /* Accept previous IDENTIFY message by clearing ACK */ NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); len = 2; @@ -3020,7 +3024,7 @@ static int NCR5380_bus_reset(struct scsi_cmnd *cmd) hostdata->connected = NULL; hostdata->disconnected_queue = NULL; #ifdef SUPPORT_TAGS - free_all_tags(); + free_all_tags(hostdata); #endif for (i = 0; i < 8; ++i) hostdata->busy[i] = 0; diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c index f0da0c8cbb0d..b69010604699 100644 --- a/drivers/scsi/atari_scsi.c +++ b/drivers/scsi/atari_scsi.c @@ -890,10 +890,6 @@ static int __init atari_scsi_probe(struct platform_device *pdev) } } -#ifdef SUPPORT_TAGS - if (setup_use_tagged_queuing < 0) - setup_use_tagged_queuing = 0; -#endif #ifdef REAL_DMA /* If running on a Falcon and if there's TT-Ram (i.e., more than one @@ -929,6 +925,10 @@ static int __init atari_scsi_probe(struct platform_device *pdev) host_flags |= IS_A_TT() ? 0 : FLAG_LATE_DMA_SETUP; +#ifdef SUPPORT_TAGS + host_flags |= setup_use_tagged_queuing > 0 ? FLAG_TAGGED_QUEUING : 0; +#endif + NCR5380_init(instance, host_flags); if (IS_A_TT()) { diff --git a/drivers/scsi/mac_scsi.c b/drivers/scsi/mac_scsi.c index 030f3b0bb53b..953fd9b953c7 100644 --- a/drivers/scsi/mac_scsi.c +++ b/drivers/scsi/mac_scsi.c @@ -411,10 +411,6 @@ static int __init mac_scsi_probe(struct platform_device *pdev) mac_scsi_template.sg_tablesize = setup_sg_tablesize; if (setup_hostid >= 0) mac_scsi_template.this_id = setup_hostid & 7; -#ifdef SUPPORT_TAGS - if (setup_use_tagged_queuing < 0) - setup_use_tagged_queuing = 0; -#endif if (setup_use_pdma < 0) setup_use_pdma = 0; @@ -440,6 +436,10 @@ static int __init mac_scsi_probe(struct platform_device *pdev) mac_scsi_reset_boot(instance); #endif +#ifdef SUPPORT_TAGS + host_flags |= setup_use_tagged_queuing > 0 ? FLAG_TAGGED_QUEUING : 0; +#endif + NCR5380_init(instance, host_flags); if (instance->irq != NO_IRQ) { diff --git a/drivers/scsi/sun3_scsi.c b/drivers/scsi/sun3_scsi.c index 985a6b36756e..a98c7325f2dd 100644 --- a/drivers/scsi/sun3_scsi.c +++ b/drivers/scsi/sun3_scsi.c @@ -522,6 +522,7 @@ static int __init sun3_scsi_probe(struct platform_device *pdev) int error; struct resource *irq, *mem; unsigned char *ioaddr; + int host_flags = 0; #ifdef SUN3_SCSI_VME int i; #endif @@ -535,11 +536,6 @@ static int __init sun3_scsi_probe(struct platform_device *pdev) if (setup_hostid >= 0) sun3_scsi_template.this_id = setup_hostid & 7; -#ifdef SUPPORT_TAGS - if (setup_use_tagged_queuing < 0) - setup_use_tagged_queuing = 1; -#endif - #ifdef SUN3_SCSI_VME ioaddr = NULL; for (i = 0; i < 2; i++) { @@ -601,7 +597,11 @@ static int __init sun3_scsi_probe(struct platform_device *pdev) instance->io_port = (unsigned long)ioaddr; instance->irq = irq->start; - NCR5380_init(instance, 0); +#ifdef SUPPORT_TAGS + host_flags |= setup_use_tagged_queuing > 0 ? FLAG_TAGGED_QUEUING : 0; +#endif + + NCR5380_init(instance, host_flags); error = request_irq(instance->irq, scsi_sun3_intr, 0, "NCR5380", instance); |