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) {
        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) {
         * 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 "
 }
 
 
-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) {
                 "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
        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;
         * 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;
        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;
 
                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;
 
        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) {
 
        int error;
        struct resource *irq, *mem;
        unsigned char *ioaddr;
+       int host_flags = 0;
 #ifdef SUN3_SCSI_VME
        int i;
 #endif
        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++) {
        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);