Fix last change: assign siop_cmd->tag in callers instead of siop_setuptables(),

and use siop_cmd->tag instead of xs->xs_tag_id. This way siop can use
xs->xs_tag_id + 1 without interferences with esiop.
This commit is contained in:
bouyer 2002-04-22 15:48:55 +00:00
parent 458fca4e6a
commit e3f96dde51
2 changed files with 15 additions and 11 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: siop.c,v 1.54 2002/04/22 09:43:44 bouyer Exp $ */
/* $NetBSD: siop.c,v 1.55 2002/04/22 15:48:55 bouyer Exp $ */
/*
* Copyright (c) 2000 Manuel Bouyer.
@ -33,7 +33,7 @@
/* SYM53c7/8xx PCI-SCSI I/O Processors driver */
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: siop.c,v 1.54 2002/04/22 09:43:44 bouyer Exp $");
__KERNEL_RCSID(0, "$NetBSD: siop.c,v 1.55 2002/04/22 15:48:55 bouyer Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -1371,12 +1371,13 @@ siop_scsipi_request(chan, req, arg)
siop_cmd->cmd_c.dmamap_cmd->dm_mapsize,
BUS_DMASYNC_PREWRITE);
if (xs->xs_tag_type) {
/* use tag_id + 1, tag 0 is reserved for untagged cmds*/
siop_cmd->cmd_c.tag = xs->xs_tag_id + 1;
} else {
siop_cmd->cmd_c.tag = 0;
}
siop_setuptables(&siop_cmd->cmd_c);
/* we want tag to start at 1 for tagged commands (0 reserved
* for untagged
*/
if (siop_cmd->cmd_c.flags & CMDFL_TAG)
siop_cmd->cmd_c.tag++;
siop_table_sync(siop_cmd,
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
siop_start(sc, siop_cmd);

View File

@ -1,4 +1,4 @@
/* $NetBSD: siop_common.c,v 1.18 2002/04/22 09:43:44 bouyer Exp $ */
/* $NetBSD: siop_common.c,v 1.19 2002/04/22 15:48:56 bouyer Exp $ */
/*
* Copyright (c) 2000 Manuel Bouyer.
@ -33,7 +33,7 @@
/* SYM53c7/8xx PCI-SCSI I/O Processors driver */
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: siop_common.c,v 1.18 2002/04/22 09:43:44 bouyer Exp $");
__KERNEL_RCSID(0, "$NetBSD: siop_common.c,v 1.19 2002/04/22 15:48:56 bouyer Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -158,10 +158,13 @@ siop_setuptables(siop_cmd)
}
siop_cmd->flags |= CMDFL_TAG;
siop_cmd->siop_tables->msg_out[1] = siop_cmd->xs->xs_tag_type;
siop_cmd->siop_tables->msg_out[2] = siop_cmd->xs->xs_tag_id + 1;
/*
* use siop_cmd->tag not xs->xs_tag_id, caller may want a
* different one
*/
siop_cmd->siop_tables->msg_out[2] = siop_cmd->tag;
siop_cmd->siop_tables->t_msgout.count = htole32(3);
msgoffset = 3;
siop_cmd->tag = siop_cmd->xs->xs_tag_id;
} else
siop_cmd->tag = 0;
if (sc->targets[target]->status == TARST_ASYNC) {