Subject: Re: newfs trouble
To: Roy Bixler <rcbixler@nyx.net>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: netbsd-users
Date: 11/09/2005 20:04:30
--4Ckj6UjgE2iN1+kY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Tue, Nov 08, 2005 at 12:45:56PM -0700, Roy Bixler wrote:
> On Tue, Nov 08, 2005 at 08:07:45PM +0100, Manuel Bouyer wrote:
> > One info I didn't find in your mails: What disk and controller are you
> > using ?
>
> The disk is an IBM 73 G. drive:
>
> sd0 at scsibus0 target 5 lun 0: <IBM-ESXS, DTN073W3UWDY10FN, S27P> disk fixed
> sd0: 70006 MB, 36703 cyl, 6 head, 651 sec, 512 bytes/sect x 143374000 sectors
> sd0: sync (50.00ns offset 16), 16-bit (40.000MB/s) transfers, tagged queueing
>
> Controller is a Symbios (Tekram):
>
> esiop0 at pci0 dev 12 function 0: Symbios Logic 53c875 (ultra-wide scsi)
> esiop0: using on-board RAM
> esiop0: interrupting at irq 11
> scsibus0 at esiop0: 16 targets, 8 luns per target
>
> It's quite old. The BIOS is from 1998. One noteable thing I had to
> do was configure the BIOS not to scan for the IBM disk. Otheriwse,
> the BIOS hung when it probed the disk's SCSI id. Once I made this
> change, the disk worked without any problems until the one which
> started this thread.
OK, I think I tracked the problem down, but I can't test it as I have no
drives that show this behavior. Please try the attached patch against 2.1
--
Manuel Bouyer <bouyer@antioche.eu.org>
NetBSD: 26 ans d'experience feront toujours la difference
--
--4Ckj6UjgE2iN1+kY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="diff.netbsd2"
Index: ic/esiop.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/esiop.c,v
retrieving revision 1.27.4.5
diff -u -r1.27.4.5 esiop.c
--- ic/esiop.c 16 May 2005 05:15:48 -0000 1.27.4.5
+++ ic/esiop.c 9 Nov 2005 18:51:53 -0000
@@ -1126,6 +1126,16 @@
esiop_lun->active = NULL;
offset = bus_space_read_1(sc->sc_c.sc_rt, sc->sc_c.sc_rh,
SIOP_SCRATCHA + 1);
+ /*
+ * if we got a disconnect between the last data phase
+ * and the status phase, offset will be 0. In this
+ * case, cmd_tables->offset will have the proper value
+ * if it got updated by the controller
+ */
+ if (offset == 0 &&
+ esiop_cmd->cmd_tables->offset != htole32(SIOP_NOOFFSET))
+ offset = le32toh(esiop_cmd->cmd_tables->offset);
+
esiop_scsicmd_end(esiop_cmd, offset);
if (freetarget && esiop_target->target_c.status == TARST_PROBING)
esiop_del_dev(sc, target, lun);
@@ -1954,15 +1964,20 @@
xfer->siop_tables.t_status.count= htole32(1);
xfer->siop_tables.t_status.addr = htole32(dsa +
offsetof(struct siop_common_xfer, status));
+ xfer->siop_tables.t_offset.count= htole32(1);
+ xfer->siop_tables.t_offset.addr = htole32(dsa +
+ offsetof(struct siop_common_xfer, offset));
s = splbio();
TAILQ_INSERT_TAIL(&sc->free_list, &newcbd->cmds[i], next);
splx(s);
#ifdef SIOP_DEBUG
- printf("tables[%d]: in=0x%x out=0x%x status=0x%x\n", i,
+ printf("tables[%d]: in=0x%x out=0x%x status=0x%x "
+ "offset=0x%x\n", i,
le32toh(newcbd->cmds[i].cmd_tables->t_msgin.addr),
le32toh(newcbd->cmds[i].cmd_tables->t_msgout.addr),
- le32toh(newcbd->cmds[i].cmd_tables->t_status.addr));
+ le32toh(newcbd->cmds[i].cmd_tables->t_status.addr,
+ le32toh(newcbd->cmds[i].cmd_tables->t_offset.addr));
#endif
}
s = splbio();
Index: ic/siop.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/siop.c,v
retrieving revision 1.72.4.4
diff -u -r1.72.4.4 siop.c
--- ic/siop.c 11 May 2005 04:06:08 -0000 1.72.4.4
+++ ic/siop.c 9 Nov 2005 18:51:53 -0000
@@ -103,6 +103,7 @@
static int siop_stat_intr = 0;
static int siop_stat_intr_shortxfer = 0;
static int siop_stat_intr_sdp = 0;
+static int siop_stat_intr_saveoffset = 0;
static int siop_stat_intr_done = 0;
static int siop_stat_intr_xferdisc = 0;
static int siop_stat_intr_lunresel = 0;
@@ -915,6 +916,16 @@
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
CALL_SCRIPT(Ent_script_sched);
return 1;
+ case A_int_saveoffset:
+ INCSTAT(siop_stat_intr_saveoffset);
+ offset = bus_space_read_1(sc->sc_c.sc_rt,
+ sc->sc_c.sc_rh, SIOP_SCRATCHA + 1);
+#ifdef SIOP_DEBUG_DR
+ printf("saveoffset offset %d\n", offset);
+#endif
+ siop_cmd->cmd_tables->status = htole32(offset);
+ CALL_SCRIPT(Ent_script_sched);
+ return 1;
case A_int_resfail:
printf("reselect failed\n");
CALL_SCRIPT(Ent_script_sched);
@@ -939,6 +950,16 @@
/* update resid. */
offset = bus_space_read_1(sc->sc_c.sc_rt,
sc->sc_c.sc_rh, SIOP_SCRATCHA + 1);
+ /*
+ * if we got a disconnect between the last data phase
+ * and the status phase, offset will be 0. In this
+ * case, cmd_tables->offset will have the proper value
+ * if it got updated by the controller
+ */
+ if (offset == 0 &&
+ siop_cmd->cmd_tables->offset !=
+ htole32(SIOP_NOOFFSET))
+ offset = le32toh(siop_cmd->cmd_tables->offset);
siop_update_resid(&siop_cmd->cmd_c, offset);
siop_cmd->cmd_c.status = CMDST_DONE;
goto end;
@@ -1686,6 +1707,9 @@
xfer->siop_tables.t_status.count= htole32(1);
xfer->siop_tables.t_status.addr = htole32(dsa +
offsetof(struct siop_common_xfer, status));
+ xfer->siop_tables.t_offset.count= htole32(1);
+ xfer->siop_tables.t_offset.addr = htole32(dsa +
+ offsetof(struct siop_common_xfer, offset));
/* The select/reselect script */
scr = &xfer->resel[0];
for (j = 0; j < sizeof(load_dsa) / sizeof(load_dsa[0]); j++)
@@ -1717,10 +1741,12 @@
TAILQ_INSERT_TAIL(&sc->free_list, &newcbd->cmds[i], next);
splx(s);
#ifdef SIOP_DEBUG
- printf("tables[%d]: in=0x%x out=0x%x status=0x%x\n", i,
+ printf("tables[%d]: in=0x%x out=0x%x status=0x%x "
+ "offset=0x%x\n", i,
le32toh(newcbd->cmds[i].cmd_tables->t_msgin.addr),
le32toh(newcbd->cmds[i].cmd_tables->t_msgout.addr),
- le32toh(newcbd->cmds[i].cmd_tables->t_status.addr));
+ le32toh(newcbd->cmds[i].cmd_tables->t_status.addr),
+ le32toh(newcbd->cmds[i].cmd_tables->t_offset.addr));
#endif
}
s = splbio();
@@ -2002,6 +2028,7 @@
printf("siop_stat_intr_shortxfer %d\n", siop_stat_intr_shortxfer);
printf("siop_stat_intr_xferdisc %d\n", siop_stat_intr_xferdisc);
printf("siop_stat_intr_sdp %d\n", siop_stat_intr_sdp);
+ printf("siop_stat_intr_saveoffset %d\n", siop_stat_intr_saveoffset);
printf("siop_stat_intr_done %d\n", siop_stat_intr_done);
printf("siop_stat_intr_lunresel %d\n", siop_stat_intr_lunresel);
printf("siop_stat_intr_qfull %d\n", siop_stat_intr_qfull);
Index: ic/siop_common.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/siop_common.c,v
retrieving revision 1.33.4.3
diff -u -r1.33.4.3 siop_common.c
--- ic/siop_common.c 11 May 2005 03:59:10 -0000 1.33.4.3
+++ ic/siop_common.c 9 Nov 2005 18:51:53 -0000
@@ -315,6 +315,8 @@
}
siop_cmd->siop_tables->status =
htole32(SCSI_SIOP_NOSTATUS); /* set invalid status */
+ siop_cmd->siop_tables->offset =
+ htole32(SIOP_NOOFFSET); /* set invalid offset */
siop_cmd->siop_tables->cmd.count =
htole32(siop_cmd->dmamap_cmd->dm_segs[0].ds_len);
Index: ic/siopvar_common.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/siopvar_common.h,v
retrieving revision 1.27.4.2
diff -u -r1.27.4.2 siopvar_common.h
--- ic/siopvar_common.h 11 May 2005 03:59:14 -0000 1.27.4.2
+++ ic/siopvar_common.h 9 Nov 2005 18:51:53 -0000
@@ -56,7 +56,7 @@
u_int8_t msg_out[16]; /* 0 */
u_int8_t msg_in[16]; /* 16 */
u_int32_t status; /* 32 */
- u_int32_t pad1; /* 36 */
+ u_int32_t offset; /* 36 */
u_int32_t id; /* 40 */
u_int32_t pad2; /* 44 */
scr_table_t t_msgin; /* 48 */
@@ -65,13 +65,17 @@
scr_table_t t_msgout; /* 72 */
scr_table_t cmd; /* 80 */
scr_table_t t_status; /* 88 */
- scr_table_t data[SIOP_NSG]; /* 96 */
+ scr_table_t t_offset; /* 96 */
+ scr_table_t data[SIOP_NSG]; /* 104 */
} __attribute__((__packed__));
/* status can hold the SCSI_* status values, and 2 additional values: */
#define SCSI_SIOP_NOCHECK 0xfe /* don't check the scsi status */
#define SCSI_SIOP_NOSTATUS 0xff /* device didn't report status */
+/* offset is initialised to SIOP_NOOFFSET, used to check if it was updated */
+#define SIOP_NOOFFSET 0xff
+
/*
* This describes a command handled by the SCSI controller
*/
Index: microcode/siop/esiop.out
===================================================================
RCS file: /cvsroot/src/sys/dev/microcode/siop/esiop.out,v
retrieving revision 1.11.4.2
diff -u -r1.11.4.2 esiop.out
--- microcode/siop/esiop.out 11 May 2005 03:50:26 -0000 1.11.4.2
+++ microcode/siop/esiop.out 9 Nov 2005 18:51:54 -0000
@@ -1,7 +1,7 @@
-/* $NetBSD: esiop.out,v 1.11.4.2 2005/05/11 03:50:26 snj Exp $ */
+/* $NetBSD: ncr53cxxx.c,v 1.12.2.1 2004/05/20 09:41:26 tron Exp $ */
/*
* DO NOT EDIT - this file is automatically generated.
- * created from esiop.ss on Tue May 10 12:49:57 2005
+ * created from esiop.ss on Wed Nov 9 19:51:03 2005
*/
const u_int32_t esiop_script[] = {
0xe15c0004, 0x00000000, /* 000 - 0 */
@@ -51,7 +51,7 @@
0x6a360000, 0x00000000, /* 160 - 352 */
0x6a630000, 0x00000000, /* 168 - 360 */
0x7a600400, 0x00000000, /* 170 - 368 */
- 0x88880000, 0x00000500, /* 178 - 376 */
+ 0x88880000, 0x00000518, /* 178 - 376 */
0x78370000, 0x00000000, /* 180 - 384 */
0x60000400, 0x00000000, /* 188 - 392 */
0x79360000, 0x00000000, /* 190 - 400 */
@@ -71,12 +71,12 @@
0x60000040, 0x00000000, /* 200 - 512 */
0x868b0000, 0x000002c8, /* 208 - 520 */
0x878b0000, 0x000002e8, /* 210 - 528 */
- 0x808b0000, 0x000003b8, /* 218 - 536 */
- 0x818b0000, 0x00000350, /* 220 - 544 */
- 0x828b0000, 0x00000320, /* 228 - 552 */
- 0x838b0000, 0x00000328, /* 230 - 560 */
+ 0x808b0000, 0x000003d0, /* 218 - 536 */
+ 0x818b0000, 0x00000368, /* 220 - 544 */
+ 0x828b0000, 0x00000338, /* 228 - 552 */
+ 0x838b0000, 0x00000340, /* 230 - 560 */
0x98080000, 0x0000ffff, /* 238 - 568 */
- 0x88880000, 0x00000480, /* 240 - 576 */
+ 0x88880000, 0x00000498, /* 240 - 576 */
0xf2340004, 0x00000000, /* 248 - 584 */
0x72690000, 0x00000000, /* 250 - 592 */
0x98040000, 0x0000ff00, /* 258 - 600 */
@@ -150,7 +150,7 @@
0x745c0200, 0x00000000, /* 478 - 1144 */
0x80840000, 0xfffffeb8, /* 480 - 1152 */
0x7c5cfc00, 0x00000000, /* 488 - 1160 */
- 0x88880000, 0x000001e8, /* 490 - 1168 */
+ 0x88880000, 0x00000200, /* 490 - 1168 */
0xe15c0004, 0x00000000, /* 498 - 1176 */
0x7a5c0200, 0x00000000, /* 4a0 - 1184 */
0xe25c0004, 0x00000000, /* 4a8 - 1192 */
@@ -168,70 +168,73 @@
0x1f000030, 0x00000030, /* 508 - 1288 */
0x808c0000, 0xfffffd28, /* 510 - 1296 */
0x808c0002, 0xffffffd0, /* 518 - 1304 */
- 0x808c0001, 0x000001c8, /* 520 - 1312 */
+ 0x808c0001, 0x000001e0, /* 520 - 1312 */
0x98040004, 0x0000ff01, /* 528 - 1320 */
- 0x88880000, 0x00000190, /* 530 - 1328 */
+ 0x88880000, 0x000001a8, /* 530 - 1328 */
0x74601000, 0x00000000, /* 538 - 1336 */
- 0x808c0000, 0xfffffdf8, /* 540 - 1344 */
- 0x98080000, 0x0000ff04, /* 548 - 1352 */
- 0x1a000050, 0x00000050, /* 550 - 1360 */
- 0x80880000, 0xfffffca8, /* 558 - 1368 */
- 0x1b000058, 0x00000058, /* 560 - 1376 */
- 0x6a690000, 0x00000000, /* 568 - 1384 */
+ 0x98040000, 0x0000ff04, /* 540 - 1344 */
+ 0x72350000, 0x00000000, /* 548 - 1352 */
+ 0x808c0000, 0xfffffde8, /* 550 - 1360 */
+ 0xf2350001, 0x00000060, /* 558 - 1368 */
+ 0x80880000, 0xfffffdd8, /* 560 - 1376 */
+ 0x1a000050, 0x00000050, /* 568 - 1384 */
0x80880000, 0xfffffc90, /* 570 - 1392 */
- 0x88880000, 0x000000b8, /* 578 - 1400 */
- 0x7a600800, 0x00000000, /* 580 - 1408 */
- 0x19000060, 0x00000060, /* 588 - 1416 */
- 0x7e350100, 0x00000000, /* 590 - 1424 */
- 0x7e100800, 0x00000000, /* 598 - 1432 */
- 0x7f110000, 0x00000000, /* 5a0 - 1440 */
- 0x7f120000, 0x00000000, /* 5a8 - 1448 */
- 0x7f130000, 0x00000000, /* 5b0 - 1456 */
- 0x818b0000, 0xffffffc8, /* 5b8 - 1464 */
- 0x88880000, 0x000000b8, /* 5c0 - 1472 */
- 0x7c60f700, 0x00000000, /* 5c8 - 1480 */
- 0x80880000, 0xfffffc30, /* 5d0 - 1488 */
- 0x88880000, 0x00000058, /* 5d8 - 1496 */
- 0x7a600800, 0x00000000, /* 5e0 - 1504 */
- 0x18000060, 0x00000060, /* 5e8 - 1512 */
- 0x7e350100, 0x00000000, /* 5f0 - 1520 */
- 0x7e100800, 0x00000000, /* 5f8 - 1528 */
- 0x7f110000, 0x00000000, /* 600 - 1536 */
- 0x7f120000, 0x00000000, /* 608 - 1544 */
- 0x7f130000, 0x00000000, /* 610 - 1552 */
- 0x808b0000, 0xffffffc8, /* 618 - 1560 */
- 0x88880000, 0x00000058, /* 620 - 1568 */
- 0x7c60f700, 0x00000000, /* 628 - 1576 */
- 0x80880000, 0xfffffbd0, /* 630 - 1584 */
- 0x72100000, 0x00000000, /* 638 - 1592 */
- 0x6a5c0000, 0x00000000, /* 640 - 1600 */
- 0x72110000, 0x00000000, /* 648 - 1608 */
- 0x6a5d0000, 0x00000000, /* 650 - 1616 */
- 0x72120000, 0x00000000, /* 658 - 1624 */
- 0x6a5e0000, 0x00000000, /* 660 - 1632 */
- 0x72130000, 0x00000000, /* 668 - 1640 */
- 0x6a5f0000, 0x00000000, /* 670 - 1648 */
- 0x90080000, 0x00000000, /* 678 - 1656 */
- 0x725c0000, 0x00000000, /* 680 - 1664 */
- 0x6a100000, 0x00000000, /* 688 - 1672 */
- 0x725d0000, 0x00000000, /* 690 - 1680 */
- 0x6a110000, 0x00000000, /* 698 - 1688 */
- 0x725e0000, 0x00000000, /* 6a0 - 1696 */
- 0x6a120000, 0x00000000, /* 6a8 - 1704 */
- 0x725f0000, 0x00000000, /* 6b0 - 1712 */
- 0x6a130000, 0x00000000, /* 6b8 - 1720 */
- 0x90080000, 0x00000000, /* 6c0 - 1728 */
- 0x7c027f00, 0x00000000, /* 6c8 - 1736 */
- 0x60000008, 0x00000000, /* 6d0 - 1744 */
- 0x60000040, 0x00000000, /* 6d8 - 1752 */
- 0x48000000, 0x00000000, /* 6e0 - 1760 */
- 0x90080000, 0x00000000, /* 6e8 - 1768 */
+ 0x1b000058, 0x00000058, /* 578 - 1400 */
+ 0x6a690000, 0x00000000, /* 580 - 1408 */
+ 0x80880000, 0xfffffc78, /* 588 - 1416 */
+ 0x88880000, 0x000000b8, /* 590 - 1424 */
+ 0x7a600800, 0x00000000, /* 598 - 1432 */
+ 0x19000068, 0x00000068, /* 5a0 - 1440 */
+ 0x7e350100, 0x00000000, /* 5a8 - 1448 */
+ 0x7e100800, 0x00000000, /* 5b0 - 1456 */
+ 0x7f110000, 0x00000000, /* 5b8 - 1464 */
+ 0x7f120000, 0x00000000, /* 5c0 - 1472 */
+ 0x7f130000, 0x00000000, /* 5c8 - 1480 */
+ 0x818b0000, 0xffffffc8, /* 5d0 - 1488 */
+ 0x88880000, 0x000000b8, /* 5d8 - 1496 */
+ 0x7c60f700, 0x00000000, /* 5e0 - 1504 */
+ 0x80880000, 0xfffffc18, /* 5e8 - 1512 */
+ 0x88880000, 0x00000058, /* 5f0 - 1520 */
+ 0x7a600800, 0x00000000, /* 5f8 - 1528 */
+ 0x18000068, 0x00000068, /* 600 - 1536 */
+ 0x7e350100, 0x00000000, /* 608 - 1544 */
+ 0x7e100800, 0x00000000, /* 610 - 1552 */
+ 0x7f110000, 0x00000000, /* 618 - 1560 */
+ 0x7f120000, 0x00000000, /* 620 - 1568 */
+ 0x7f130000, 0x00000000, /* 628 - 1576 */
+ 0x808b0000, 0xffffffc8, /* 630 - 1584 */
+ 0x88880000, 0x00000058, /* 638 - 1592 */
+ 0x7c60f700, 0x00000000, /* 640 - 1600 */
+ 0x80880000, 0xfffffbb8, /* 648 - 1608 */
+ 0x72100000, 0x00000000, /* 650 - 1616 */
+ 0x6a5c0000, 0x00000000, /* 658 - 1624 */
+ 0x72110000, 0x00000000, /* 660 - 1632 */
+ 0x6a5d0000, 0x00000000, /* 668 - 1640 */
+ 0x72120000, 0x00000000, /* 670 - 1648 */
+ 0x6a5e0000, 0x00000000, /* 678 - 1656 */
+ 0x72130000, 0x00000000, /* 680 - 1664 */
+ 0x6a5f0000, 0x00000000, /* 688 - 1672 */
+ 0x90080000, 0x00000000, /* 690 - 1680 */
+ 0x725c0000, 0x00000000, /* 698 - 1688 */
+ 0x6a100000, 0x00000000, /* 6a0 - 1696 */
+ 0x725d0000, 0x00000000, /* 6a8 - 1704 */
+ 0x6a110000, 0x00000000, /* 6b0 - 1712 */
+ 0x725e0000, 0x00000000, /* 6b8 - 1720 */
+ 0x6a120000, 0x00000000, /* 6c0 - 1728 */
+ 0x725f0000, 0x00000000, /* 6c8 - 1736 */
+ 0x6a130000, 0x00000000, /* 6d0 - 1744 */
+ 0x90080000, 0x00000000, /* 6d8 - 1752 */
+ 0x7c027f00, 0x00000000, /* 6e0 - 1760 */
+ 0x60000008, 0x00000000, /* 6e8 - 1768 */
0x60000040, 0x00000000, /* 6f0 - 1776 */
- 0x1f000038, 0x00000038, /* 6f8 - 1784 */
- 0x98080000, 0x0000ff02, /* 700 - 1792 */
+ 0x48000000, 0x00000000, /* 6f8 - 1784 */
+ 0x90080000, 0x00000000, /* 700 - 1792 */
0x60000040, 0x00000000, /* 708 - 1800 */
- 0x1f000040, 0x00000040, /* 710 - 1808 */
- 0x98080000, 0x0000ff03, /* 718 - 1816 */
+ 0x1f000038, 0x00000038, /* 710 - 1808 */
+ 0x98080000, 0x0000ff02, /* 718 - 1816 */
+ 0x60000040, 0x00000000, /* 720 - 1824 */
+ 0x1f000040, 0x00000040, /* 728 - 1832 */
+ 0x98080000, 0x0000ff03, /* 730 - 1840 */
};
const u_int32_t esiop_led_on[] = {
@@ -249,7 +252,8 @@
#define A_t_msg_out 0x00000048
#define A_t_cmd 0x00000050
#define A_t_status 0x00000058
-#define A_t_data 0x00000060
+#define A_t_offset 0x00000060
+#define A_t_data 0x00000068
#define A_target_id 0x00000000
#define A_target_luntbl 0x00000008
#define A_target_luntbl_tag 0x0000000c
@@ -286,10 +290,10 @@
#define Ent_led_on1 0x000004b0
#define Ent_led_on2 0x00000050
#define Ent_led_off 0x00000040
-#define Ent_status 0x00000560
+#define Ent_status 0x00000578
#define Ent_msgin 0x00000500
#define Ent_msgin_ack 0x00000200
-#define Ent_get_extmsgdata 0x00000708
+#define Ent_get_extmsgdata 0x00000720
#define Ent_send_msgout 0x000004c8
#define Ent_script_sched 0x00000340
#define Ent_load_targtable 0x000000a0
Index: microcode/siop/esiop.ss
===================================================================
RCS file: /cvsroot/src/sys/dev/microcode/siop/esiop.ss,v
retrieving revision 1.16.4.2
diff -u -r1.16.4.2 esiop.ss
--- microcode/siop/esiop.ss 11 May 2005 03:48:47 -0000 1.16.4.2
+++ microcode/siop/esiop.ss 9 Nov 2005 18:51:54 -0000
@@ -40,7 +40,8 @@
ABSOLUTE t_msg_out = 72;
ABSOLUTE t_cmd = 80;
ABSOLUTE t_status = 88;
-ABSOLUTE t_data = 96;
+ABSOLUTE t_offset = 96;
+ABSOLUTE t_data = 104;
; offsets in the per-target lun table
ABSOLUTE target_id = 0x0;
@@ -344,9 +345,12 @@
CALL REL(disconnect) ; disconnect message
; if we didn't get sdp, no need to interrupt
MOVE SCRATCHC0 & f_c_sdp TO SFBR;
+ INT int_disc, IF not 0x00;
+; update offset if we did some data transfer
+ MOVE SCRATCHA1 TO SFBR;
JUMP REL(script_sched), if 0x00;
-; Ok, we need to save data pointers
- INT int_disc;
+ STORE NOFLUSH SCRATCHA1, 1, FROM t_offset;
+ JUMP REL(script_sched);
cmdout:
MOVE FROM t_cmd, WHEN CMD;
Index: microcode/siop/siop.out
===================================================================
RCS file: /cvsroot/src/sys/dev/microcode/siop/siop.out,v
retrieving revision 1.14.14.1
diff -u -r1.14.14.1 siop.out
--- microcode/siop/siop.out 11 May 2005 03:50:26 -0000 1.14.14.1
+++ microcode/siop/siop.out 9 Nov 2005 18:51:54 -0000
@@ -1,19 +1,19 @@
-/* $NetBSD: siop.out,v 1.14.14.1 2005/05/11 03:50:26 snj Exp $ */
+/* $NetBSD: ncr53cxxx.c,v 1.12.2.1 2004/05/20 09:41:26 tron Exp $ */
/*
* DO NOT EDIT - this file is automatically generated.
- * created from siop.ss on Tue May 10 12:46:01 2005
+ * created from siop.ss on Wed Nov 9 19:51:03 2005
*/
const u_int32_t siop_script[] = {
0x78340000, 0x00000000, /* 000 - 0 */
0x78350000, 0x00000000, /* 008 - 8 */
0x72370000, 0x00000000, /* 010 - 16 */
0x80840020, 0x00000318, /* 018 - 24 */
- 0x868b0000, 0x00000370, /* 020 - 32 */
+ 0x868b0000, 0x00000380, /* 020 - 32 */
0x878b0000, 0x000002f8, /* 028 - 40 */
- 0x808b0000, 0x000003f8, /* 030 - 48 */
- 0x818b0000, 0x00000390, /* 038 - 56 */
- 0x828b0000, 0x00000368, /* 040 - 64 */
- 0x838b0000, 0x00000370, /* 048 - 72 */
+ 0x808b0000, 0x00000408, /* 030 - 48 */
+ 0x818b0000, 0x000003a0, /* 038 - 56 */
+ 0x828b0000, 0x00000378, /* 040 - 64 */
+ 0x838b0000, 0x00000380, /* 048 - 72 */
0x98080000, 0x0000ffff, /* 050 - 80 */
0x741a4000, 0x00000000, /* 058 - 88 */
0x980c0000, 0x0000ff83, /* 060 - 96 */
@@ -107,81 +107,83 @@
0x7a340100, 0x00000000, /* 320 - 800 */
0x60000008, 0x00000000, /* 328 - 808 */
0x1f000030, 0x00000030, /* 330 - 816 */
- 0x808c0000, 0x00000208, /* 338 - 824 */
+ 0x808c0000, 0x00000218, /* 338 - 824 */
0x808c0002, 0xffffffd0, /* 340 - 832 */
- 0x808c0001, 0x00000208, /* 348 - 840 */
+ 0x808c0001, 0x00000218, /* 348 - 840 */
0x98040004, 0x0000ff01, /* 350 - 848 */
- 0x88880000, 0x000001c0, /* 358 - 856 */
+ 0x88880000, 0x000001d0, /* 358 - 856 */
0x74340100, 0x00000000, /* 360 - 864 */
- 0x808c0000, 0xfffffd00, /* 368 - 872 */
- 0x98080000, 0x0000ff04, /* 370 - 880 */
- 0x60000040, 0x00000000, /* 378 - 888 */
- 0x80880000, 0xfffffc98, /* 380 - 896 */
- 0x58000008, 0x00000000, /* 388 - 904 */
- 0x60000040, 0x00000000, /* 390 - 912 */
- 0x1e000048, 0x00000048, /* 398 - 920 */
- 0x60000008, 0x00000000, /* 3a0 - 928 */
- 0x80880000, 0xfffffc70, /* 3a8 - 936 */
- 0x1a000050, 0x00000050, /* 3b0 - 944 */
+ 0x98040000, 0x0000ff04, /* 368 - 872 */
+ 0x72350000, 0x00000000, /* 370 - 880 */
+ 0x808c0000, 0xfffffcf0, /* 378 - 888 */
+ 0x98080000, 0x0000ff05, /* 380 - 896 */
+ 0x60000040, 0x00000000, /* 388 - 904 */
+ 0x80880000, 0xfffffc88, /* 390 - 912 */
+ 0x58000008, 0x00000000, /* 398 - 920 */
+ 0x60000040, 0x00000000, /* 3a0 - 928 */
+ 0x1e000048, 0x00000048, /* 3a8 - 936 */
+ 0x60000008, 0x00000000, /* 3b0 - 944 */
0x80880000, 0xfffffc60, /* 3b8 - 952 */
- 0x1b000058, 0x00000058, /* 3c0 - 960 */
+ 0x1a000050, 0x00000050, /* 3c0 - 960 */
0x80880000, 0xfffffc50, /* 3c8 - 968 */
- 0x88880000, 0x000000b8, /* 3d0 - 976 */
- 0x7a340200, 0x00000000, /* 3d8 - 984 */
- 0x19000060, 0x00000060, /* 3e0 - 992 */
- 0x7e350100, 0x00000000, /* 3e8 - 1000 */
- 0x7e100800, 0x00000000, /* 3f0 - 1008 */
- 0x7f110000, 0x00000000, /* 3f8 - 1016 */
- 0x7f120000, 0x00000000, /* 400 - 1024 */
- 0x7f130000, 0x00000000, /* 408 - 1032 */
- 0x818b0000, 0xffffffc8, /* 410 - 1040 */
- 0x88880000, 0x000000b8, /* 418 - 1048 */
- 0x7c34fd00, 0x00000000, /* 420 - 1056 */
- 0x80880000, 0xfffffbf0, /* 428 - 1064 */
- 0x88880000, 0x00000058, /* 430 - 1072 */
- 0x7a340200, 0x00000000, /* 438 - 1080 */
- 0x18000060, 0x00000060, /* 440 - 1088 */
- 0x7e350100, 0x00000000, /* 448 - 1096 */
- 0x7e100800, 0x00000000, /* 450 - 1104 */
- 0x7f110000, 0x00000000, /* 458 - 1112 */
- 0x7f120000, 0x00000000, /* 460 - 1120 */
- 0x7f130000, 0x00000000, /* 468 - 1128 */
- 0x808b0000, 0xffffffc8, /* 470 - 1136 */
- 0x88880000, 0x00000058, /* 478 - 1144 */
- 0x7c34fd00, 0x00000000, /* 480 - 1152 */
- 0x80880000, 0xfffffb90, /* 488 - 1160 */
- 0x72100000, 0x00000000, /* 490 - 1168 */
- 0x6a5c0000, 0x00000000, /* 498 - 1176 */
- 0x72110000, 0x00000000, /* 4a0 - 1184 */
- 0x6a5d0000, 0x00000000, /* 4a8 - 1192 */
- 0x72120000, 0x00000000, /* 4b0 - 1200 */
- 0x6a5e0000, 0x00000000, /* 4b8 - 1208 */
- 0x72130000, 0x00000000, /* 4c0 - 1216 */
- 0x6a5f0000, 0x00000000, /* 4c8 - 1224 */
- 0x90080000, 0x00000000, /* 4d0 - 1232 */
- 0x725c0000, 0x00000000, /* 4d8 - 1240 */
- 0x6a100000, 0x00000000, /* 4e0 - 1248 */
- 0x725d0000, 0x00000000, /* 4e8 - 1256 */
- 0x6a110000, 0x00000000, /* 4f0 - 1264 */
- 0x725e0000, 0x00000000, /* 4f8 - 1272 */
- 0x6a120000, 0x00000000, /* 500 - 1280 */
- 0x725f0000, 0x00000000, /* 508 - 1288 */
- 0x6a130000, 0x00000000, /* 510 - 1296 */
- 0x90080000, 0x00000000, /* 518 - 1304 */
- 0x7c027f00, 0x00000000, /* 520 - 1312 */
- 0x60000008, 0x00000000, /* 528 - 1320 */
- 0x60000040, 0x00000000, /* 530 - 1328 */
- 0x48000000, 0x00000000, /* 538 - 1336 */
- 0x90080000, 0x00000000, /* 540 - 1344 */
- 0x88880000, 0xffffffd0, /* 548 - 1352 */
- 0x98080000, 0x0000ff00, /* 550 - 1360 */
- 0x60000040, 0x00000000, /* 558 - 1368 */
- 0x1f000038, 0x00000038, /* 560 - 1376 */
- 0x98080000, 0x0000ff02, /* 568 - 1384 */
- 0x60000040, 0x00000000, /* 570 - 1392 */
- 0x1f000040, 0x00000040, /* 578 - 1400 */
- 0x98080000, 0x0000ff03, /* 580 - 1408 */
- 0x80000000, 0x00000000, /* 588 - 1416 */
+ 0x1b000058, 0x00000058, /* 3d0 - 976 */
+ 0x80880000, 0xfffffc40, /* 3d8 - 984 */
+ 0x88880000, 0x000000b8, /* 3e0 - 992 */
+ 0x7a340200, 0x00000000, /* 3e8 - 1000 */
+ 0x19000068, 0x00000068, /* 3f0 - 1008 */
+ 0x7e350100, 0x00000000, /* 3f8 - 1016 */
+ 0x7e100800, 0x00000000, /* 400 - 1024 */
+ 0x7f110000, 0x00000000, /* 408 - 1032 */
+ 0x7f120000, 0x00000000, /* 410 - 1040 */
+ 0x7f130000, 0x00000000, /* 418 - 1048 */
+ 0x818b0000, 0xffffffc8, /* 420 - 1056 */
+ 0x88880000, 0x000000b8, /* 428 - 1064 */
+ 0x7c34fd00, 0x00000000, /* 430 - 1072 */
+ 0x80880000, 0xfffffbe0, /* 438 - 1080 */
+ 0x88880000, 0x00000058, /* 440 - 1088 */
+ 0x7a340200, 0x00000000, /* 448 - 1096 */
+ 0x18000068, 0x00000068, /* 450 - 1104 */
+ 0x7e350100, 0x00000000, /* 458 - 1112 */
+ 0x7e100800, 0x00000000, /* 460 - 1120 */
+ 0x7f110000, 0x00000000, /* 468 - 1128 */
+ 0x7f120000, 0x00000000, /* 470 - 1136 */
+ 0x7f130000, 0x00000000, /* 478 - 1144 */
+ 0x808b0000, 0xffffffc8, /* 480 - 1152 */
+ 0x88880000, 0x00000058, /* 488 - 1160 */
+ 0x7c34fd00, 0x00000000, /* 490 - 1168 */
+ 0x80880000, 0xfffffb80, /* 498 - 1176 */
+ 0x72100000, 0x00000000, /* 4a0 - 1184 */
+ 0x6a5c0000, 0x00000000, /* 4a8 - 1192 */
+ 0x72110000, 0x00000000, /* 4b0 - 1200 */
+ 0x6a5d0000, 0x00000000, /* 4b8 - 1208 */
+ 0x72120000, 0x00000000, /* 4c0 - 1216 */
+ 0x6a5e0000, 0x00000000, /* 4c8 - 1224 */
+ 0x72130000, 0x00000000, /* 4d0 - 1232 */
+ 0x6a5f0000, 0x00000000, /* 4d8 - 1240 */
+ 0x90080000, 0x00000000, /* 4e0 - 1248 */
+ 0x725c0000, 0x00000000, /* 4e8 - 1256 */
+ 0x6a100000, 0x00000000, /* 4f0 - 1264 */
+ 0x725d0000, 0x00000000, /* 4f8 - 1272 */
+ 0x6a110000, 0x00000000, /* 500 - 1280 */
+ 0x725e0000, 0x00000000, /* 508 - 1288 */
+ 0x6a120000, 0x00000000, /* 510 - 1296 */
+ 0x725f0000, 0x00000000, /* 518 - 1304 */
+ 0x6a130000, 0x00000000, /* 520 - 1312 */
+ 0x90080000, 0x00000000, /* 528 - 1320 */
+ 0x7c027f00, 0x00000000, /* 530 - 1328 */
+ 0x60000008, 0x00000000, /* 538 - 1336 */
+ 0x60000040, 0x00000000, /* 540 - 1344 */
+ 0x48000000, 0x00000000, /* 548 - 1352 */
+ 0x90080000, 0x00000000, /* 550 - 1360 */
+ 0x88880000, 0xffffffd0, /* 558 - 1368 */
+ 0x98080000, 0x0000ff00, /* 560 - 1376 */
+ 0x60000040, 0x00000000, /* 568 - 1384 */
+ 0x1f000038, 0x00000038, /* 570 - 1392 */
+ 0x98080000, 0x0000ff02, /* 578 - 1400 */
+ 0x60000040, 0x00000000, /* 580 - 1408 */
+ 0x1f000040, 0x00000040, /* 588 - 1416 */
+ 0x98080000, 0x0000ff03, /* 590 - 1424 */
+ 0x80000000, 0x00000000, /* 598 - 1432 */
};
const u_int32_t lun_switch[] = {
@@ -244,12 +246,14 @@
#define A_t_msg_out 0x00000048
#define A_t_cmd 0x00000050
#define A_t_status 0x00000058
-#define A_t_data 0x00000060
+#define A_t_offset 0x00000060
+#define A_t_data 0x00000068
#define A_int_done 0x0000ff00
#define A_int_msgin 0x0000ff01
#define A_int_extmsgin 0x0000ff02
#define A_int_extmsgdata 0x0000ff03
#define A_int_disc 0x0000ff04
+#define A_int_saveoffset 0x0000ff05
#define A_int_reseltarg 0x0000ff80
#define A_int_resellun 0x0000ff81
#define A_int_reseltag 0x0000ff82
@@ -259,24 +263,24 @@
#define A_flag_data 0x00000002
#define A_flag_data_mask 0x000000fd
#define Ent_waitphase 0x00000020
-#define Ent_send_msgout 0x00000388
-#define Ent_msgout 0x00000398
+#define Ent_send_msgout 0x00000398
+#define Ent_msgout 0x000003a8
#define Ent_msgin 0x00000328
#define Ent_handle_msgin 0x00000338
-#define Ent_msgin_ack 0x00000378
-#define Ent_dataout 0x00000430
-#define Ent_datain 0x000003d0
-#define Ent_cmdout 0x000003b0
-#define Ent_status 0x000003c0
-#define Ent_disconnect 0x00000520
+#define Ent_msgin_ack 0x00000388
+#define Ent_dataout 0x00000440
+#define Ent_datain 0x000003e0
+#define Ent_cmdout 0x000003c0
+#define Ent_status 0x000003d0
+#define Ent_disconnect 0x00000530
#define Ent_reselect 0x000001e0
#define Ent_reselected 0x00000000
-#define Ent_selected 0x00000378
+#define Ent_selected 0x00000388
#define Ent_script_sched 0x00000070
#define Ent_script_sched_slot0 0x000000a0
-#define Ent_get_extmsgdata 0x00000570
+#define Ent_get_extmsgdata 0x00000580
#define Ent_resel_targ0 0x00000238
-#define Ent_msgin_space 0x00000588
+#define Ent_msgin_space 0x00000598
#define Ent_lunsw_return 0x000002b8
#define Ent_led_on1 0x00000068
#define Ent_led_on2 0x00000220
Index: microcode/siop/siop.ss
===================================================================
RCS file: /cvsroot/src/sys/dev/microcode/siop/siop.ss,v
retrieving revision 1.17.10.1
diff -u -r1.17.10.1 siop.ss
--- microcode/siop/siop.ss 11 May 2005 03:48:47 -0000 1.17.10.1
+++ microcode/siop/siop.ss 9 Nov 2005 18:51:54 -0000
@@ -38,7 +38,8 @@
ABSOLUTE t_msg_out = 72;
ABSOLUTE t_cmd = 80;
ABSOLUTE t_status = 88;
-ABSOLUTE t_data = 96;
+ABSOLUTE t_offset = 96;
+ABSOLUTE t_data = 104;
;; interrupt codes
; interrupts that need a valid DSA
@@ -47,6 +48,7 @@
ABSOLUTE int_extmsgin = 0xff02;
ABSOLUTE int_extmsgdata = 0xff03;
ABSOLUTE int_disc = 0xff04;
+ABSOLUTE int_saveoffset = 0xff05;
; interrupts that don't have a valid DSA
ABSOLUTE int_reseltarg = 0xff80;
ABSOLUTE int_resellun = 0xff81;
@@ -262,9 +264,12 @@
CALL REL(disconnect) ; disconnect message;
; if we didn't get sdp, no need to interrupt
MOVE SCRATCHA0 & flag_sdp TO SFBR;
+ INT int_disc, IF not 0x00;
+; update offset if we did some data transfer
+ MOVE SCRATCHA1 TO SFBR;
JUMP REL(script_sched), if 0x00;
-; Ok, we need to save data pointers
- INT int_disc;
+ INT int_saveoffset;
+
msgin_ack:
selected:
CLEAR ACK;
--4Ckj6UjgE2iN1+kY--