diff options
-rw-r--r-- | sys/arch/mvme68k/dev/siop.c | 20 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/siopvar.h | 5 |
2 files changed, 18 insertions, 7 deletions
diff --git a/sys/arch/mvme68k/dev/siop.c b/sys/arch/mvme68k/dev/siop.c index 56fc1503d09..a4994eb792b 100644 --- a/sys/arch/mvme68k/dev/siop.c +++ b/sys/arch/mvme68k/dev/siop.c @@ -1,4 +1,4 @@ -/* $Id: siop.c,v 1.3 1995/11/30 09:51:26 deraadt Exp $ */ +/* $Id: siop.c,v 1.4 1996/02/03 18:31:10 chuck Exp $ */ /* * Copyright (c) 1994 Michael L. Hitch @@ -49,6 +49,7 @@ #include <sys/disklabel.h> #include <sys/dkstat.h> #include <sys/buf.h> +#include <sys/malloc.h> #include <scsi/scsi_all.h> #include <scsi/scsiconf.h> #include <machine/autoconf.h> @@ -483,11 +484,20 @@ siopinitialize(sc) { /* * Need to check that scripts is on a long word boundary - * and that DS is on a long word boundary. * Also should verify that dev doesn't span non-contiguous * physical pages. */ sc->sc_scriptspa = kvtop(scripts); + + /* + * malloc sc_acb to ensure that DS is on a long word boundary. + */ + + MALLOC(sc->sc_acb, struct siop_acb *, + sizeof(struct siop_acb) * SIOP_NACB, M_DEVBUF, M_NOWAIT); + if (sc->sc_acb == NULL) + panic("siopinitialize: ACB malloc failed!"); + sc->sc_tcp[1] = 1000 / sc->sc_clock_freq; sc->sc_tcp[2] = 1500 / sc->sc_clock_freq; sc->sc_tcp[3] = 2000 / sc->sc_clock_freq; @@ -574,8 +584,8 @@ siopreset(sc) TAILQ_INIT(&sc->free_list); sc->sc_nexus = NULL; acb = sc->sc_acb; - bzero(acb, sizeof(sc->sc_acb)); - for (i = 0; i < sizeof(sc->sc_acb) / sizeof(*acb); i++) { + bzero(acb, sizeof(struct siop_acb) * SIOP_NACB); + for (i = 0; i < SIOP_NACB; i++) { TAILQ_INSERT_TAIL(&sc->free_list, acb, chain); acb++; } @@ -737,7 +747,7 @@ siop_start (sc, target, lun, cbuf, clen, buf, len) #endif /* push data cache for all data the 53c710 needs to access */ - dma_cachectl (sc, sizeof (struct siop_softc)); + dma_cachectl (acb, sizeof (struct siop_acb)); dma_cachectl (cbuf, clen); if (buf != NULL && len != 0) dma_cachectl (buf, len); diff --git a/sys/arch/mvme68k/dev/siopvar.h b/sys/arch/mvme68k/dev/siopvar.h index f028eb65e74..8121be8ff93 100644 --- a/sys/arch/mvme68k/dev/siopvar.h +++ b/sys/arch/mvme68k/dev/siopvar.h @@ -1,4 +1,4 @@ -/* $Id: siopvar.h,v 1.2 1995/11/07 08:49:34 deraadt Exp $ */ +/* $Id: siopvar.h,v 1.3 1996/02/03 18:31:12 chuck Exp $ */ /* * Copyright (c) 1995 Theo de Raadt @@ -143,7 +143,8 @@ struct siop_softc { nexus_list; struct siop_acb *sc_nexus; /* current command */ - struct siop_acb sc_acb[8]; /* the real command blocks */ +#define SIOP_NACB 8 + struct siop_acb *sc_acb; /* the real command blocks */ struct siop_tinfo sc_tinfo[8]; u_short sc_clock_freq; |