atari_NCR5380: Introduce FLAG_TAGGED_QUEUING
authorFinn Thain <fthain@telegraphics.com.au>
Wed, 12 Nov 2014 05:12:19 +0000 (16:12 +1100)
committerChristoph Hellwig <hch@lst.de>
Thu, 20 Nov 2014 08:11:19 +0000 (09:11 +0100)
The static variable setup_use_tagged_queuing is declared in mac_scsi.c,
sun3_scsi.c and atari_scsi.c and doesn't belong in the core driver.
None of the other NCR5380 drivers suffer from this layering issue which
makes merging the core drivers more difficult and will likely hinder plans
for future use of platform data to configure the driver.

Replace the static variable with a host flag. This way it can be reported
along with the other flags.

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>
drivers/scsi/NCR5380.h
drivers/scsi/atari_NCR5380.c
drivers/scsi/atari_scsi.c
drivers/scsi/mac_scsi.c
drivers/scsi/sun3_scsi.c

index 7b1a0913d94caea69372b57aa573ab067f179304..2fafe1d54fb8de75413d8cbc04df574a3eaf0968 100644 (file)
 #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 {
index 7bbfa1b777c302a2053ebed175bfb7c019973e21..74b7c538c3948e5203d4c6f6ee5864e1684e7148 100644 (file)
@@ -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;
index f0da0c8cbb0d9a943719e03f5f23543cba19afc2..b690106046999e225392efda7cd06f7e93fe0783 100644 (file)
@@ -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()) {
index 030f3b0bb53b9935f88f257895692a98010d1232..953fd9b953c7b1432e3e84333763a425e83649db 100644 (file)
@@ -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) {
index 985a6b36756e7d89699a18193c437a82870e8e80..a98c7325f2dda6f6115f90922622c88d6fed4dcd 100644 (file)
@@ -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);