Subject: Re: kern/31990: esiop leaves b_resid non-zero (newfs troubles, etc
To: Manuel Bouyer <bouyer@antioche.eu.org>
From: edwin <edwin@spacebugs.nl>
List: port-sparc64
Date: 11/17/2005 21:56:58
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yaaaaaaaaaaahooooooooooo! This patch seems to work. Great job.
The system did a boot without any errors.
I did several tests like creating files and dirs in /etc and no
strange things seems to happen anymore .....
This means I put the ultra 60 back into production tonight.  :-)

@win


Manuel Bouyer wrote:

> Hi, my previous patch was still not right, I forgot a case where
> b_resid would not be properly updated. I reworked the code, and now
> the code path used to handle drives which don't issue a save data
> pointer after the last data transfers is also used, in some case,
> for drives which do. This means that I can test part of the code on
> my system, and it's more likely to work on yours :)
>
> Please test this new patch
>
>
> ----------------------------------------------------------------------
>
>
>
> Index: ic/esiop.c
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/ic/esiop.c,v retrieving revision
> 1.33 diff -u -r1.33 esiop.c --- ic/esiop.c 23 Mar 2005 21:23:15
> -0000 1.33 +++ ic/esiop.c 17 Nov 2005 17:23:29 -0000 @@ -252,6
> +252,14 @@ sizeof(struct siop_common_xfer)); } for (j = 0; j < +
> (sizeof(E_saved_offset_offset_Used) / +
> sizeof(E_saved_offset_offset_Used[0])); + j++) { +
> bus_space_write_4(sc->sc_c.sc_ramt, sc->sc_c.sc_ramh, +
> E_saved_offset_offset_Used[j] * 4, + sizeof(struct
> siop_common_xfer) + 4); + } + for (j = 0; j <
> (sizeof(E_abs_msgin2_Used) / sizeof(E_abs_msgin2_Used[0])); j++) {
> bus_space_write_4(sc->sc_c.sc_ramt, sc->sc_c.sc_ramh, @@ -290,6
> +298,13 @@ htole32(sizeof(struct siop_common_xfer)); } for (j = 0;
> j < + (sizeof(E_saved_offset_offset_Used) / +
> sizeof(E_saved_offset_offset_Used[0])); + j++) { +
> sc->sc_c.sc_script[E_saved_offset_offset_Used[j]] = +
> htole32(sizeof(struct siop_common_xfer) + 4); + } + for (j = 0; j
> < (sizeof(E_abs_msgin2_Used) / sizeof(E_abs_msgin2_Used[0])); j++)
> { sc->sc_c.sc_script[E_abs_msgin2_Used[j]] = @@ -1071,6 +1086,9 @@
> printf("disconnect offset %d\n", offset); #endif
> siop_sdp(&esiop_cmd->cmd_c, offset); + /* we start again with no
> offset */ + ESIOP_XFER(esiop_cmd, saved_offset) = +
> htole32(SIOP_NOOFFSET); esiop_table_sync(esiop_cmd,
> BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
> CALL_SCRIPT(Ent_script_sched); @@ -1125,6 +1143,17 @@
> 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->saved_offset will
> have the proper value + * if it got updated by the controller + */
> + if (offset == 0 && + ESIOP_XFER(esiop_cmd, saved_offset) !=
> htole32(SIOP_NOOFFSET)) + offset = +
> (le32toh(ESIOP_XFER(esiop_cmd, saved_offset)) >> 8) & 0xff; +
> esiop_scsicmd_end(esiop_cmd, offset); if (freetarget &&
> esiop_target->target_c.status == TARST_PROBING) esiop_del_dev(sc,
> target, lun); @@ -1213,7 +1242,7 @@ u_int32_t slot; int needsync =
> 0; int status; - u_int32_t sem; + u_int32_t sem, offset;
>
> esiop_script_sync(sc, BUS_DMASYNC_POSTREAD |
> BUS_DMASYNC_POSTWRITE); sem = esiop_script_read(sc,
> sc->sc_semoffset); @@ -1294,10 +1323,15 @@ esiop_lun->tactive[tag]
> = NULL; else esiop_lun->active = NULL; - /* scratcha was saved in
> tlq by script. fetch offset from it */ -
> esiop_scsicmd_end(esiop_cmd, - (le32toh(((struct esiop_xfer
> *)esiop_cmd->cmd_tables)->tlq) >> 8) - & 0xff); + /* + *
> scratcha was eventually saved in saved_offset by script. + * fetch
> offset from it + */ + offset = 0; + if (ESIOP_XFER(esiop_cmd,
> saved_offset) != htole32(SIOP_NOOFFSET)) + offset = +
> (le32toh(ESIOP_XFER(esiop_cmd, saved_offset)) >> 8) & 0xff; +
> esiop_scsicmd_end(esiop_cmd, offset); goto next; }
>
> @@ -1603,14 +1637,13 @@ else esiop_cmd->cmd_c.tag = -1;
> siop_setuptables(&esiop_cmd->cmd_c); - ((struct esiop_xfer
> *)esiop_cmd->cmd_tables)->tlq = - htole32(A_f_c_target |
> A_f_c_lun); - ((struct esiop_xfer *)esiop_cmd->cmd_tables)->tlq |=
> + ESIOP_XFER(esiop_cmd, saved_offset) = htole32(SIOP_NOOFFSET); +
> ESIOP_XFER(esiop_cmd, tlq) = htole32(A_f_c_target | A_f_c_lun); +
> ESIOP_XFER(esiop_cmd, tlq) |= htole32((target << 8) | (lun << 16));
> if (esiop_cmd->cmd_c.flags & CMDFL_TAG) { - ((struct esiop_xfer
> *)esiop_cmd->cmd_tables)->tlq |= - htole32(A_f_c_tag); -
> ((struct esiop_xfer *)esiop_cmd->cmd_tables)->tlq |= +
> ESIOP_XFER(esiop_cmd, tlq) |= htole32(A_f_c_tag); +
> ESIOP_XFER(esiop_cmd, tlq) |= htole32(esiop_cmd->cmd_c.tag << 24);
> }
>
> @@ -1958,10 +1991,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(); Index: ic/esiopvar.h
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/ic/esiopvar.h,v retrieving revision
> 1.12 diff -u -r1.12 esiopvar.h --- ic/esiopvar.h 27 Feb 2005
> 00:27:01 -0000 1.12 +++ ic/esiopvar.h 17 Nov 2005 17:23:29 -0000 @@
> -53,9 +53,11 @@ struct esiop_xfer { struct siop_common_xfer
> siop_tables; u_int32_t tlq; /* target/lun/tag loaded in scratchC by
> script */ - /* will also containt scratcha at end of
> command */ + u_int32_t saved_offset;/* contains scratchA if script
> saved an offset */ } __attribute__((__packed__));
>
> +#define ESIOP_XFER(cmd, m) (((struct esiop_xfer
> *)((cmd)->cmd_tables))->m) + /* * This describes a command handled
> by the SCSI controller * These are chained in either a free list or
> a active list Index: ic/siop.c
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/ic/siop.c,v retrieving revision
> 1.78 diff -u -r1.78 siop.c --- ic/siop.c 27 Feb 2005 00:27:02 -0000
> 1.78 +++ ic/siop.c 17 Nov 2005 17:23:29 -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; @@ -911,10 +912,22 @@
> printf("disconnect offset %d\n", offset); #endif
> siop_sdp(&siop_cmd->cmd_c, offset); + /* we start again with no
> offset */ + siop_cmd->saved_offset = SIOP_NOOFFSET;
> siop_table_sync(siop_cmd, 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->saved_offset = offset;
> + CALL_SCRIPT(Ent_script_sched); + return 1; case
> A_int_resfail: printf("reselect failed\n");
> CALL_SCRIPT(Ent_script_sched); @@ -939,6 +952,15 @@ /* 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, siop_cmd->saved_offset will
> have the proper + * value if it got updated by the controller +
> */ + if (offset == 0 && + siop_cmd->saved_offset !=
> SIOP_NOOFFSET) + offset = siop_cmd->saved_offset;
> siop_update_resid(&siop_cmd->cmd_c, offset); siop_cmd->cmd_c.status
> = CMDST_DONE; goto end; @@ -1348,6 +1370,7 @@ siop_cmd->cmd_c.tag
> = 0; } siop_setuptables(&siop_cmd->cmd_c); +
> siop_cmd->saved_offset = SIOP_NOOFFSET; siop_table_sync(siop_cmd,
> BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); siop_start(sc,
> siop_cmd); @@ -1717,10 +1740,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 +2027,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/siopvar.h
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/ic/siopvar.h,v retrieving revision
> 1.21 diff -u -r1.21 siopvar.h --- ic/siopvar.h 27 Feb 2005 00:27:02
> -0000 1.21 +++ ic/siopvar.h 17 Nov 2005 17:23:29 -0000 @@ -56,6
> +56,7 @@ struct siop_common_cmd cmd_c; struct siop_cbd *siop_cbdp;
> /* pointer to our siop_cbd */ int reselslot; + u_int32_t
> saved_offset; /* offset in table after disc without sdp */ };
> #define cmd_tables cmd_c.siop_tables
>
> Index: ic/siopvar_common.h
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/ic/siopvar_common.h,v retrieving
> revision 1.32 diff -u -r1.32 siopvar_common.h ---
> ic/siopvar_common.h 27 Feb 2005 00:27:02 -0000 1.32 +++
> ic/siopvar_common.h 17 Nov 2005 17:23:29 -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
> pad1; /* 36 */ u_int32_t id; /* 40 */ u_int32_t pad2; /* 44 */
> scr_table_t t_msgin; /* 48 */ @@ -72,6 +72,9 @@ #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 0xffffffff + /* * 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.13 diff -u -r1.13 esiop.out ---
> microcode/siop/esiop.out 17 May 2004 18:38:22 -0000 1.13 +++
> microcode/siop/esiop.out 17 Nov 2005 17:23:29 -0000 @@ -1,7 +1,7 @@
> -/* $NetBSD: esiop.out,v 1.13 2004/05/17 18:38:22 bouyer Exp $ */
> +/* $NetBSD: ncr53cxxx.c,v 1.14 2005/02/11 06:21:22 simonb Exp $
> */ /* * DO NOT EDIT - this file is automatically generated. - *
> created from esiop.ss on Mon May 17 20:37:26 2004 + * created from
> esiop.ss on Thu Nov 17 17:54:10 2005 */ const u_int32_t
> esiop_script[] = { 0xe15c0004, 0x00000000, /* 000 - 0 */ @@
> -13,7 +13,7 @@ 0x78600000, 0x00000000, /* 030 - 48 */
> 0x7869ff00, 0x00000000, /* 038 - 56 */ 0x80000000, 0x00000000,
> /* 040 - 64 */ - 0x54000000, 0x000002e8, /* 048 - 72 */ +
> 0x54000000, 0x000002f8, /* 048 - 72 */ 0x80000000, 0x00000000,
> /* 050 - 80 */ 0x740a0f00, 0x00000000, /* 058 - 88 */
> 0x6a610000, 0x00000000, /* 060 - 96 */ @@ -46,12 +46,12 @@
> 0x87830000, 0x000000c8, /* 138 - 312 */ 0x0f000001, 0x00000000,
> /* 140 - 320 */ 0x60000040, 0x00000000, /* 148 - 328 */ -
> 0x80840020, 0x000003b8, /* 150 - 336 */ + 0x80840020, 0x000003c8,
> /* 150 - 336 */ 0x0f000001, 0x00000000, /* 158 - 344 */
> 0x6a360000, 0x00000000, /* 160 - 352 */ 0x6a630000, 0x00000000,
> /* 168 - 360 */ 0x7a600400, 0x00000000, /* 170 - 368 */ -
> 0x88880000, 0x00000500, /* 178 - 376 */ + 0x88880000, 0x00000528,
> /* 178 - 376 */ 0x78370000, 0x00000000, /* 180 - 384 */
> 0x60000400, 0x00000000, /* 188 - 392 */ 0x79360000, 0x00000000,
> /* 190 - 400 */ @@ -69,169 +69,174 @@ 0x7f130000, 0x00000000, /*
> 1f0 - 496 */ 0xf1100004, 0x00000000, /* 1f8 - 504 */ 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 */ + 0x868b0000, 0x000002d8, /* 208 -
> 520 */ + 0x878b0000, 0x000002f8, /* 210 - 528 */ + 0x808b0000,
> 0x000003e0, /* 218 - 536 */ + 0x818b0000, 0x00000378, /* 220 -
> 544 */ + 0x828b0000, 0x00000348, /* 228 - 552 */ + 0x838b0000,
> 0x00000350, /* 230 - 560 */ 0x98080000, 0x0000ffff, /* 238 -
> 568 */ - 0x88880000, 0x00000480, /* 240 - 576 */ - 0xf2340004,
> 0x00000000, /* 248 - 584 */ - 0x72690000, 0x00000000, /* 250 -
> 592 */ - 0x98040000, 0x0000ff00, /* 258 - 600 */ - 0x726c0000,
> 0x00000000, /* 260 - 608 */ - 0x6a100000, 0x00000000, /* 268 -
> 616 */ - 0x726d0000, 0x00000000, /* 270 - 624 */ - 0x6a110000,
> 0x00000000, /* 278 - 632 */ - 0x726e0000, 0x00000000, /* 280 -
> 640 */ - 0x6a120000, 0x00000000, /* 288 - 648 */ - 0x726f0000,
> 0x00000000, /* 290 - 656 */ - 0x6a130000, 0x00000000, /* 298 -
> 664 */ - 0xf1340001, 0x00000000, /* 2a0 - 672 */ - 0x72340000,
> 0x00000000, /* 2a8 - 680 */ - 0x80840000, 0xffffffe8, /* 2b0 -
> 688 */ - 0xf2600004, 0x00000000, /* 2b8 - 696 */ - 0x7e6c0400,
> 0x00000000, /* 2c0 - 704 */ - 0x7f6d0000, 0x00000000, /* 2c8 -
> 712 */ - 0x7f6e0000, 0x00000000, /* 2d0 - 720 */ - 0x7f6f0000,
> 0x00000000, /* 2d8 - 728 */ - 0x7e6a0100, 0x00000000, /* 2e0 -
> 736 */ - 0x726a0000, 0x00000000, /* 2e8 - 744 */ - 0x80840000,
> 0x00000028, /* 2f0 - 752 */ - 0x786cff00, 0x00000000, /* 2f8 -
> 760 */ - 0x786dff00, 0x00000000, /* 300 - 768 */ - 0x786eff00,
> 0x00000000, /* 308 - 776 */ - 0x786fff00, 0x00000000, /* 310 -
> 784 */ - 0x786a0000, 0x00000000, /* 318 - 792 */ - 0xe15c0004,
> 0x00000000, /* 320 - 800 */ - 0x7a5c0100, 0x00000000, /* 328 -
> 808 */ - 0xe25c0004, 0x00000000, /* 330 - 816 */ - 0x741a4000,
> 0x00000000, /* 338 - 824 */ - 0x72640000, 0x00000000, /* 340 -
> 832 */ - 0x6a100000, 0x00000000, /* 348 - 840 */ - 0x72650000,
> 0x00000000, /* 350 - 848 */ - 0x6a110000, 0x00000000, /* 358 -
> 856 */ - 0x72660000, 0x00000000, /* 360 - 864 */ - 0x6a120000,
> 0x00000000, /* 368 - 872 */ - 0x72670000, 0x00000000, /* 370 -
> 880 */ - 0x6a130000, 0x00000000, /* 378 - 888 */ - 0xf1100004,
> 0x00000000, /* 380 - 896 */ - 0x74100100, 0x00000000, /* 388 -
> 904 */ - 0x80840000, 0xfffffc68, /* 390 - 912 */ - 0x74100200,
> 0x00000000, /* 398 - 920 */ - 0x80840000, 0x00000018, /* 3a0 -
> 928 */ - 0xf1600004, 0x00000000, /* 3a8 - 936 */ - 0x47000028,
> 0xfffffc70, /* 3b0 - 944 */ - 0x9e030000, 0x0000ffff, /* 3b8 -
> 952 */ - 0x72640000, 0x00000000, /* 3c0 - 960 */ - 0x6a100000,
> 0x00000000, /* 3c8 - 968 */ - 0x72650000, 0x00000000, /* 3d0 -
> 976 */ - 0x6a110000, 0x00000000, /* 3d8 - 984 */ - 0x72660000,
> 0x00000000, /* 3e0 - 992 */ - 0x6a120000, 0x00000000, /* 3e8 -
> 1000 */ - 0x72670000, 0x00000000, /* 3f0 - 1008 */ - 0x6a130000,
> 0x00000000, /* 3f8 - 1016 */ - 0x7e680100, 0x00000000, /* 400 -
> 1024 */ - 0x7e640400, 0x00000000, /* 408 - 1032 */ - 0x7f650000,
> 0x00000000, /* 410 - 1040 */ - 0x7f660000, 0x00000000, /* 418
> - 1048 */ - 0x7f670000, 0x00000000, /* 420 - 1056 */ -
> 0x72680000, 0x00000000, /* 428 - 1064 */ - 0x80840000,
> 0x00000028, /* 430 - 1072 */ - 0x7864ff00, 0x00000000, /* 438 -
> 1080 */ - 0x7865ff00, 0x00000000, /* 440 - 1088 */ - 0x7866ff00,
> 0x00000000, /* 448 - 1096 */ - 0x7867ff00, 0x00000000, /* 450 -
> 1104 */ - 0x78680000, 0x00000000, /* 458 - 1112 */ - 0xf15c0004,
> 0x00000000, /* 460 - 1120 */ - 0x7a5c0100, 0x00000000, /* 468 -
> 1128 */ - 0xf25c0004, 0x00000000, /* 470 - 1136 */ - 0x745c0200,
> 0x00000000, /* 478 - 1144 */ - 0x80840000, 0xfffffeb8, /* 480 -
> 1152 */ - 0x7c5cfc00, 0x00000000, /* 488 - 1160 */ - 0x88880000,
> 0x000001e8, /* 490 - 1168 */ - 0xe15c0004, 0x00000000, /* 498 -
> 1176 */ - 0x7a5c0200, 0x00000000, /* 4a0 - 1184 */ - 0xe25c0004,
> 0x00000000, /* 4a8 - 1192 */ - 0x80000000, 0x00000000, /* 4b0 -
> 1200 */ - 0x78350000, 0x00000000, /* 4b8 - 1208 */ - 0x7869ff00,
> 0x00000000, /* 4c0 - 1216 */ - 0x58000008, 0x00000000, /* 4c8 -
> 1224 */ - 0x60000040, 0x00000000, /* 4d0 - 1232 */ - 0x1e000048,
> 0x00000048, /* 4d8 - 1240 */ - 0x60000008, 0x00000000, /* 4e0 -
> 1248 */ - 0x80880000, 0xfffffd18, /* 4e8 - 1256 */ - 0x60000040,
> 0x00000000, /* 4f0 - 1264 */ - 0x7a601000, 0x00000000, /* 4f8 -
> 1272 */ - 0x60000008, 0x00000000, /* 500 - 1280 */ - 0x1f000030,
> 0x00000030, /* 508 - 1288 */ - 0x808c0000, 0xfffffd28, /* 510 -
> 1296 */ - 0x808c0002, 0xffffffd0, /* 518 - 1304 */ - 0x808c0001,
> 0x000001c8, /* 520 - 1312 */ - 0x98040004, 0x0000ff01, /* 528 -
> 1320 */ - 0x88880000, 0x00000190, /* 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 */ - 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 */ + 0x88880000,
> 0x000004a8, /* 240 - 576 */ + 0x72350000, 0x00000000, /* 248 -
> 584 */ + 0x808c0000, 0x00000008, /* 250 - 592 */ + 0xf2340004,
> 0x00000000, /* 258 - 600 */ + 0x72690000, 0x00000000, /* 260 -
> 608 */ + 0x98040000, 0x0000ff00, /* 268 - 616 */ + 0x726c0000,
> 0x00000000, /* 270 - 624 */ + 0x6a100000, 0x00000000, /* 278 -
> 632 */ + 0x726d0000, 0x00000000, /* 280 - 640 */ + 0x6a110000,
> 0x00000000, /* 288 - 648 */ + 0x726e0000, 0x00000000, /* 290 -
> 656 */ + 0x6a120000, 0x00000000, /* 298 - 664 */ + 0x726f0000,
> 0x00000000, /* 2a0 - 672 */ + 0x6a130000, 0x00000000, /* 2a8 -
> 680 */ + 0xf1340001, 0x00000000, /* 2b0 - 688 */ + 0x72340000,
> 0x00000000, /* 2b8 - 696 */ + 0x80840000, 0xffffffe8, /* 2c0 -
> 704 */ + 0xf2600004, 0x00000000, /* 2c8 - 712 */ + 0x7e6c0400,
> 0x00000000, /* 2d0 - 720 */ + 0x7f6d0000, 0x00000000, /* 2d8 -
> 728 */ + 0x7f6e0000, 0x00000000, /* 2e0 - 736 */ + 0x7f6f0000,
> 0x00000000, /* 2e8 - 744 */ + 0x7e6a0100, 0x00000000, /* 2f0 -
> 752 */ + 0x726a0000, 0x00000000, /* 2f8 - 760 */ + 0x80840000,
> 0x00000028, /* 300 - 768 */ + 0x786cff00, 0x00000000, /* 308 -
> 776 */ + 0x786dff00, 0x00000000, /* 310 - 784 */ + 0x786eff00,
> 0x00000000, /* 318 - 792 */ + 0x786fff00, 0x00000000, /* 320 -
> 800 */ + 0x786a0000, 0x00000000, /* 328 - 808 */ + 0xe15c0004,
> 0x00000000, /* 330 - 816 */ + 0x7a5c0100, 0x00000000, /* 338 -
> 824 */ + 0xe25c0004, 0x00000000, /* 340 - 832 */ + 0x741a4000,
> 0x00000000, /* 348 - 840 */ + 0x72640000, 0x00000000, /* 350 -
> 848 */ + 0x6a100000, 0x00000000, /* 358 - 856 */ + 0x72650000,
> 0x00000000, /* 360 - 864 */ + 0x6a110000, 0x00000000, /* 368 -
> 872 */ + 0x72660000, 0x00000000, /* 370 - 880 */ + 0x6a120000,
> 0x00000000, /* 378 - 888 */ + 0x72670000, 0x00000000, /* 380 -
> 896 */ + 0x6a130000, 0x00000000, /* 388 - 904 */ + 0xf1100004,
> 0x00000000, /* 390 - 912 */ + 0x74100100, 0x00000000, /* 398 -
> 920 */ + 0x80840000, 0xfffffc58, /* 3a0 - 928 */ + 0x74100200,
> 0x00000000, /* 3a8 - 936 */ + 0x80840000, 0x00000018, /* 3b0 -
> 944 */ + 0xf1600004, 0x00000000, /* 3b8 - 952 */ + 0x47000028,
> 0xfffffc60, /* 3c0 - 960 */ + 0x9e030000, 0x0000ffff, /* 3c8 -
> 968 */ + 0x72640000, 0x00000000, /* 3d0 - 976 */ + 0x6a100000,
> 0x00000000, /* 3d8 - 984 */ + 0x72650000, 0x00000000, /* 3e0 -
> 992 */ + 0x6a110000, 0x00000000, /* 3e8 - 1000 */ + 0x72660000,
> 0x00000000, /* 3f0 - 1008 */ + 0x6a120000, 0x00000000, /* 3f8 -
> 1016 */ + 0x72670000, 0x00000000, /* 400 - 1024 */ + 0x6a130000,
> 0x00000000, /* 408 - 1032 */ + 0x7e680100, 0x00000000, /* 410 -
> 1040 */ + 0x7e640400, 0x00000000, /* 418 - 1048 */ + 0x7f650000,
> 0x00000000, /* 420 - 1056 */ + 0x7f660000, 0x00000000, /* 428 -
> 1064 */ + 0x7f670000, 0x00000000, /* 430 - 1072 */ + 0x72680000,
> 0x00000000, /* 438 - 1080 */ + 0x80840000, 0x00000028, /* 440 -
> 1088 */ + 0x7864ff00, 0x00000000, /* 448 - 1096 */ + 0x7865ff00,
> 0x00000000, /* 450 - 1104 */ + 0x7866ff00, 0x00000000, /* 458 -
> 1112 */ + 0x7867ff00, 0x00000000, /* 460 - 1120 */ + 0x78680000,
> 0x00000000, /* 468 - 1128 */ + 0xf15c0004, 0x00000000, /* 470 -
> 1136 */ + 0x7a5c0100, 0x00000000, /* 478 - 1144 */ + 0xf25c0004,
> 0x00000000, /* 480 - 1152 */ + 0x745c0200, 0x00000000, /* 488 -
> 1160 */ + 0x80840000, 0xfffffeb8, /* 490 - 1168 */ + 0x7c5cfc00,
> 0x00000000, /* 498 - 1176 */ + 0x88880000, 0x00000200, /* 4a0 -
> 1184 */ + 0xe15c0004, 0x00000000, /* 4a8 - 1192 */ + 0x7a5c0200,
> 0x00000000, /* 4b0 - 1200 */ + 0xe25c0004, 0x00000000, /* 4b8 -
> 1208 */ + 0x80000000, 0x00000000, /* 4c0 - 1216 */ + 0x78350000,
> 0x00000000, /* 4c8 - 1224 */ + 0x7869ff00, 0x00000000, /* 4d0 -
> 1232 */ + 0x58000008, 0x00000000, /* 4d8 - 1240 */ + 0x60000040,
> 0x00000000, /* 4e0 - 1248 */ + 0x1e000048, 0x00000048, /* 4e8 -
> 1256 */ + 0x60000008, 0x00000000, /* 4f0 - 1264 */ + 0x80880000,
> 0xfffffd08, /* 4f8 - 1272 */ + 0x60000040, 0x00000000, /* 500 -
> 1280 */ + 0x7a601000, 0x00000000, /* 508 - 1288 */ + 0x60000008,
> 0x00000000, /* 510 - 1296 */ + 0x1f000030, 0x00000030, /* 518 -
> 1304 */ + 0x808c0000, 0xfffffd18, /* 520 - 1312 */ + 0x808c0002,
> 0xffffffd0, /* 528 - 1320 */ + 0x808c0001, 0x000001e0, /* 530 -
> 1328 */ + 0x98040004, 0x0000ff01, /* 538 - 1336 */ + 0x88880000,
> 0x000001a8, /* 540 - 1344 */ + 0x74601000, 0x00000000, /* 548 -
> 1352 */ + 0x98040000, 0x0000ff04, /* 550 - 1360 */ + 0x72350000,
> 0x00000000, /* 558 - 1368 */ + 0x808c0000, 0xfffffde8, /* 560 -
> 1376 */ + 0xf2340004, 0x00000000, /* 568 - 1384 */ + 0x80880000,
> 0xfffffdd8, /* 570 - 1392 */ + 0x1a000050, 0x00000050, /* 578 -
> 1400 */ + 0x80880000, 0xfffffc80, /* 580 - 1408 */ + 0x1b000058,
> 0x00000058, /* 588 - 1416 */ + 0x6a690000, 0x00000000, /* 590 -
> 1424 */ + 0x80880000, 0xfffffc68, /* 598 - 1432 */ + 0x88880000,
> 0x000000b8, /* 5a0 - 1440 */ + 0x7a600800, 0x00000000, /* 5a8 -
> 1448 */ + 0x19000060, 0x00000060, /* 5b0 - 1456 */ + 0x7e350100,
> 0x00000000, /* 5b8 - 1464 */ + 0x7e100800, 0x00000000, /* 5c0 -
> 1472 */ + 0x7f110000, 0x00000000, /* 5c8 - 1480 */ + 0x7f120000,
> 0x00000000, /* 5d0 - 1488 */ + 0x7f130000, 0x00000000, /* 5d8 -
> 1496 */ + 0x818b0000, 0xffffffc8, /* 5e0 - 1504 */ + 0x88880000,
> 0x000000b8, /* 5e8 - 1512 */ + 0x7c60f700, 0x00000000, /* 5f0 -
> 1520 */ + 0x80880000, 0xfffffc08, /* 5f8 - 1528 */ + 0x88880000,
> 0x00000058, /* 600 - 1536 */ + 0x7a600800, 0x00000000, /* 608 -
> 1544 */ + 0x18000060, 0x00000060, /* 610 - 1552 */ + 0x7e350100,
> 0x00000000, /* 618 - 1560 */ + 0x7e100800, 0x00000000, /* 620 -
> 1568 */ + 0x7f110000, 0x00000000, /* 628 - 1576 */ + 0x7f120000,
> 0x00000000, /* 630 - 1584 */ + 0x7f130000, 0x00000000, /* 638 -
> 1592 */ + 0x808b0000, 0xffffffc8, /* 640 - 1600 */ + 0x88880000,
> 0x00000058, /* 648 - 1608 */ + 0x7c60f700, 0x00000000, /* 650 -
> 1616 */ + 0x80880000, 0xfffffba8, /* 658 - 1624 */ + 0x72100000,
> 0x00000000, /* 660 - 1632 */ + 0x6a5c0000, 0x00000000, /* 668 -
> 1640 */ + 0x72110000, 0x00000000, /* 670 - 1648 */ + 0x6a5d0000,
> 0x00000000, /* 678 - 1656 */ + 0x72120000, 0x00000000, /* 680 -
> 1664 */ + 0x6a5e0000, 0x00000000, /* 688 - 1672 */ + 0x72130000,
> 0x00000000, /* 690 - 1680 */ + 0x6a5f0000, 0x00000000, /* 698 -
> 1688 */ + 0x90080000, 0x00000000, /* 6a0 - 1696 */ + 0x725c0000,
> 0x00000000, /* 6a8 - 1704 */ + 0x6a100000, 0x00000000, /* 6b0 -
> 1712 */ + 0x725d0000, 0x00000000, /* 6b8 - 1720 */ + 0x6a110000,
> 0x00000000, /* 6c0 - 1728 */ + 0x725e0000, 0x00000000, /* 6c8 -
> 1736 */ + 0x6a120000, 0x00000000, /* 6d0 - 1744 */ + 0x725f0000,
> 0x00000000, /* 6d8 - 1752 */ + 0x6a130000, 0x00000000, /* 6e0 -
> 1760 */ 0x90080000, 0x00000000, /* 6e8 - 1768 */ - 0x60000040,
> 0x00000000, /* 6f0 - 1776 */ - 0x1f000038, 0x00000038, /* 6f8 -
> 1784 */ - 0x98080000, 0x0000ff02, /* 700 - 1792 */ - 0x60000040,
> 0x00000000, /* 708 - 1800 */ - 0x1f000040, 0x00000040, /* 710 -
> 1808 */ - 0x98080000, 0x0000ff03, /* 718 - 1816 */ + 0x7c027f00,
> 0x00000000, /* 6f0 - 1776 */ + 0x60000008, 0x00000000, /* 6f8 -
> 1784 */ + 0x60000040, 0x00000000, /* 700 - 1792 */ + 0x48000000,
> 0x00000000, /* 708 - 1800 */ + 0x90080000, 0x00000000, /* 710 -
> 1808 */ + 0x60000040, 0x00000000, /* 718 - 1816 */ + 0x1f000038,
> 0x00000038, /* 720 - 1824 */ + 0x98080000, 0x0000ff02, /* 728 -
> 1832 */ + 0x60000040, 0x00000000, /* 730 - 1840 */ + 0x1f000040,
> 0x00000040, /* 738 - 1848 */ + 0x98080000, 0x0000ff03, /* 740 -
> 1856 */ };
>
> const u_int32_t esiop_led_on[] = { @@ -274,29 +279,34 @@ #define
> A_cmd_slot_size 0x00000004 #define A_ndone_slots 0x00000100 #define
> A_ndone_slots_last 0x00000000 -#define Ent_cmdr0 0x00000438
> -#define Ent_cmdr1 0x00000440 -#define Ent_cmdr2 0x00000448
> -#define Ent_cmdr3 0x00000450 -#define Ent_doner0 0x000002f8
> -#define Ent_doner1 0x00000300 -#define Ent_doner2 0x00000308
> -#define Ent_doner3 0x00000310 +#define Ent_cmdr0 0x00000448
> +#define Ent_cmdr1 0x00000450 +#define Ent_cmdr2 0x00000458
> +#define Ent_cmdr3 0x00000460 +#define Ent_doner0 0x00000308
> +#define Ent_doner1 0x00000310 +#define Ent_doner2 0x00000318
> +#define Ent_doner3 0x00000320 #define Ent_reselect 0x00000028
> -#define Ent_led_on1 0x000004b0 +#define Ent_led_on1 0x000004c0
> #define Ent_led_on2 0x00000050 #define Ent_led_off 0x00000040
> -#define Ent_status 0x00000560 -#define Ent_msgin 0x00000500
> +#define Ent_status 0x00000588 +#define Ent_msgin 0x00000510
> #define Ent_msgin_ack 0x00000200 -#define Ent_get_extmsgdata
> 0x00000708 -#define Ent_send_msgout 0x000004c8 -#define
> Ent_script_sched 0x00000340 +#define Ent_get_extmsgdata 0x00000730
> +#define Ent_send_msgout 0x000004d8 +#define Ent_script_sched
> 0x00000350 #define Ent_load_targtable 0x000000a0 #define
> E_tlq_offset 0x00000000 u_int32_t E_tlq_offset_Used[] = { -
> 0x00000093, - 0x000000eb, + 0x000000ef, +}; + +#define
> E_saved_offset_offset 0x00000000 +u_int32_t
> E_saved_offset_offset_Used[] = { + 0x00000097, + 0x0000015b, };
>
> #define E_abs_msgin2 0x00000000 @@ -310,10 +320,10 @@ u_int32_t
> E_abs_sem_Used[] = { 0x00000001, 0x00000009, - 0x000000c9,
> 0x000000cd, - 0x00000127, + 0x000000d1, 0x0000012b, + 0x0000012f,
> };
>
> #define A_sem_done 0x00000001 Index: microcode/siop/esiop.ss
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/microcode/siop/esiop.ss,v
> retrieving revision 1.19 diff -u -r1.19 esiop.ss ---
> microcode/siop/esiop.ss 27 Feb 2005 00:27:29 -0000 1.19 +++
> microcode/siop/esiop.ss 17 Nov 2005 17:23:29 -0000 @@ -112,6 +112,7
> @@ ENTRY load_targtable;
>
> EXTERN tlq_offset; +EXTERN saved_offset_offset; EXTERN abs_msgin2;
>
> EXTERN abs_sem; a 32bits word used a semaphore between script and
> driver @@ -208,7 +209,11 @@
>
> handle_cmpl: CALL REL(disconnect); - STORE NOFLUSH SCRATCHA0, 4,
> from tlq_offset; save current offset +; update offset if we did
> some data transfer + MOVE SCRATCHA1 TO SFBR; + JUMP
> REL(handle_cmpl_noxfer), if 0x00; + STORE NOFLUSH SCRATCHA0, 4,
> FROM saved_offset_offset; +handle_cmpl_noxfer: MOVE SCRATCHE1 to
> SFBR; INT int_done, IF NOT 0x00; if status is not "done", let host
> handle it MOVE SCRATCHF0 to SFBR; load pointer in done ring @@
> -344,9 +349,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 SCRATCHA0, 4, FROM saved_offset_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.15 diff -u -r1.15 siop.out ---
> microcode/siop/siop.out 17 May 2004 18:38:02 -0000 1.15 +++
> microcode/siop/siop.out 17 Nov 2005 17:23:29 -0000 @@ -1,19 +1,19
> @@ -/* $NetBSD: siop.out,v 1.15 2004/05/17 18:38:02 bouyer Exp $ */
> +/* $NetBSD: ncr53cxxx.c,v 1.14 2005/02/11 06:21:22 simonb Exp $
> */ /* * DO NOT EDIT - this file is automatically generated. - *
> created from siop.ss on Mon May 17 20:37:26 2004 + * created from
> siop.ss on Thu Nov 17 17:43:46 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 */ + 0x19000060,
> 0x00000060, /* 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 */ + 0x18000060,
> 0x00000060, /* 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[] = { @@ -250,6 +252,7 @@ #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 +262,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.19 diff -u -r1.19 siop.ss --- microcode/siop/siop.ss 27
> Feb 2005 00:27:29 -0000 1.19 +++ microcode/siop/siop.ss 17 Nov
> 2005 17:23:29 -0000 @@ -47,6 +47,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 +263,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;
>
>
> ----------------------------------------------------------------------
>
>
>
> 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 17 Nov 2005 17:28:53 -0000
> @@ -253,6 +253,14 @@ sizeof(struct siop_common_xfer)); } for (j =
> 0; j < + (sizeof(E_saved_offset_offset_Used) / +
> sizeof(E_saved_offset_offset_Used[0])); + j++) { +
> bus_space_write_4(sc->sc_c.sc_ramt, sc->sc_c.sc_ramh, +
> E_saved_offset_offset_Used[j] * 4, + sizeof(struct
> siop_common_xfer) + 4); + } + for (j = 0; j <
> (sizeof(E_abs_msgin2_Used) / sizeof(E_abs_msgin2_Used[0])); j++) {
> bus_space_write_4(sc->sc_c.sc_ramt, sc->sc_c.sc_ramh, @@ -291,6
> +299,13 @@ htole32(sizeof(struct siop_common_xfer)); } for (j = 0;
> j < + (sizeof(E_saved_offset_offset_Used) / +
> sizeof(E_saved_offset_offset_Used[0])); + j++) { +
> sc->sc_c.sc_script[E_saved_offset_offset_Used[j]] = +
> htole32(sizeof(struct siop_common_xfer) + 4); + } + for (j = 0; j
> < (sizeof(E_abs_msgin2_Used) / sizeof(E_abs_msgin2_Used[0])); j++)
> { sc->sc_c.sc_script[E_abs_msgin2_Used[j]] = @@ -1072,6 +1087,9 @@
> printf("disconnect offset %d\n", offset); #endif
> siop_sdp(&esiop_cmd->cmd_c, offset); + /* we start again with no
> offset */ + ESIOP_XFER(esiop_cmd, saved_offset) = +
> htole32(SIOP_NOOFFSET); esiop_table_sync(esiop_cmd,
> BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
> CALL_SCRIPT(Ent_script_sched); @@ -1126,6 +1144,17 @@
> 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->saved_offset will
> have the proper value + * if it got updated by the controller + */
> + if (offset == 0 && + ESIOP_XFER(esiop_cmd, saved_offset) !=
> htole32(SIOP_NOOFFSET)) + offset = +
> (le32toh(ESIOP_XFER(esiop_cmd, saved_offset)) >> 8) & 0xff; +
> esiop_scsicmd_end(esiop_cmd, offset); if (freetarget &&
> esiop_target->target_c.status == TARST_PROBING) esiop_del_dev(sc,
> target, lun); @@ -1214,7 +1243,7 @@ u_int32_t slot; int needsync =
> 0; int status; - u_int32_t sem; + u_int32_t sem, offset;
>
> esiop_script_sync(sc, BUS_DMASYNC_POSTREAD |
> BUS_DMASYNC_POSTWRITE); sem = esiop_script_read(sc,
> sc->sc_semoffset); @@ -1295,10 +1324,15 @@ esiop_lun->tactive[tag]
> = NULL; else esiop_lun->active = NULL; - /* scratcha was saved in
> tlq by script. fetch offset from it */ -
> esiop_scsicmd_end(esiop_cmd, - (le32toh(((struct esiop_xfer
> *)esiop_cmd->cmd_tables)->tlq) >> 8) - & 0xff); + /* + *
> scratcha was eventually saved in saved_offset by script. + * fetch
> offset from it + */ + offset = 0; + if (ESIOP_XFER(esiop_cmd,
> saved_offset) != htole32(SIOP_NOOFFSET)) + offset = +
> (le32toh(ESIOP_XFER(esiop_cmd, saved_offset)) >> 8) & 0xff; +
> esiop_scsicmd_end(esiop_cmd, offset); goto next; }
>
> @@ -1604,14 +1638,13 @@ else esiop_cmd->cmd_c.tag = -1;
> siop_setuptables(&esiop_cmd->cmd_c); - ((struct esiop_xfer
> *)esiop_cmd->cmd_tables)->tlq = - htole32(A_f_c_target |
> A_f_c_lun); - ((struct esiop_xfer *)esiop_cmd->cmd_tables)->tlq |=
> + ESIOP_XFER(esiop_cmd, saved_offset) = htole32(SIOP_NOOFFSET); +
> ESIOP_XFER(esiop_cmd, tlq) = htole32(A_f_c_target | A_f_c_lun); +
> ESIOP_XFER(esiop_cmd, tlq) |= htole32((target << 8) | (lun << 16));
> if (esiop_cmd->cmd_c.flags & CMDFL_TAG) { - ((struct esiop_xfer
> *)esiop_cmd->cmd_tables)->tlq |= - htole32(A_f_c_tag); -
> ((struct esiop_xfer *)esiop_cmd->cmd_tables)->tlq |= +
> ESIOP_XFER(esiop_cmd, tlq) |= htole32(A_f_c_tag); +
> ESIOP_XFER(esiop_cmd, tlq) |= htole32(esiop_cmd->cmd_c.tag << 24);
> }
>
> @@ -1959,10 +1992,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(); Index: ic/esiopvar.h
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/ic/esiopvar.h,v retrieving revision
> 1.8.4.1 diff -u -r1.8.4.1 esiopvar.h --- ic/esiopvar.h 11 May 2005
> 03:19:58 -0000 1.8.4.1 +++ ic/esiopvar.h 17 Nov 2005 17:28:53
> -0000 @@ -53,9 +53,11 @@ struct esiop_xfer { struct
> siop_common_xfer siop_tables; u_int32_t tlq; /* target/lun/tag
> loaded in scratchC by script */ - /* will also containt
> scratcha at end of command */ + u_int32_t saved_offset;/* contains
> scratchA if script saved an offset */ }
> __attribute__((__packed__));
>
> +#define ESIOP_XFER(cmd, m) (((struct esiop_xfer
> *)((cmd)->cmd_tables))->m) + /* * This describes a command handled
> by the SCSI controller * These are chained in either a free list or
> a active list 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 17 Nov 2005 17:28: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; @@ -911,10 +912,22 @@
> printf("disconnect offset %d\n", offset); #endif
> siop_sdp(&siop_cmd->cmd_c, offset); + /* we start again with no
> offset */ + siop_cmd->saved_offset = SIOP_NOOFFSET;
> siop_table_sync(siop_cmd, 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->saved_offset = offset;
> + CALL_SCRIPT(Ent_script_sched); + return 1; case
> A_int_resfail: printf("reselect failed\n");
> CALL_SCRIPT(Ent_script_sched); @@ -939,6 +952,15 @@ /* 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, siop_cmd->saved_offset will
> have the proper + * value if it got updated by the controller +
> */ + if (offset == 0 && + siop_cmd->saved_offset !=
> SIOP_NOOFFSET) + offset = siop_cmd->saved_offset;
> siop_update_resid(&siop_cmd->cmd_c, offset); siop_cmd->cmd_c.status
> = CMDST_DONE; goto end; @@ -1348,6 +1370,7 @@ siop_cmd->cmd_c.tag
> = 0; } siop_setuptables(&siop_cmd->cmd_c); +
> siop_cmd->saved_offset = SIOP_NOOFFSET; siop_table_sync(siop_cmd,
> BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); siop_start(sc,
> siop_cmd); @@ -1717,10 +1740,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 +2027,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/siopvar.h
> ===================================================================
> RCS file: /cvsroot/src/sys/dev/ic/siopvar.h,v retrieving revision
> 1.19 diff -u -r1.19 siopvar.h --- ic/siopvar.h 2 Nov 2003 11:07:46
> -0000 1.19 +++ ic/siopvar.h 17 Nov 2005 17:28:53 -0000 @@ -56,6
> +56,7 @@ struct siop_common_cmd cmd_c; struct siop_cbd *siop_cbdp;
> /* pointer to our siop_cbd */ int reselslot; + u_int32_t
> saved_offset; /* offset in table after disc without sdp */ };
> #define cmd_tables cmd_c.siop_tables
>
> 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 17 Nov 2005 17:28: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
> pad1; /* 36 */ u_int32_t id; /* 40 */ u_int32_t pad2; /* 44 */
> scr_table_t t_msgin; /* 48 */ @@ -72,6 +72,9 @@ #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 0xffffffff + /* * 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 17 Nov 2005 17:28:53 -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 Thu Nov 17 18:28:34 2005 */ const u_int32_t
> esiop_script[] = { 0xe15c0004, 0x00000000, /* 000 - 0 */ @@
> -13,7 +13,7 @@ 0x78600000, 0x00000000, /* 030 - 48 */
> 0x7869ff00, 0x00000000, /* 038 - 56 */ 0x80000000, 0x00000000,
> /* 040 - 64 */ - 0x54000000, 0x000002e8, /* 048 - 72 */ +
> 0x54000000, 0x000002f8, /* 048 - 72 */ 0x80000000, 0x00000000,
> /* 050 - 80 */ 0x740a0f00, 0x00000000, /* 058 - 88 */
> 0x6a610000, 0x00000000, /* 060 - 96 */ @@ -46,12 +46,12 @@
> 0x87830000, 0x000000c8, /* 138 - 312 */ 0x0f000001, 0x00000000,
> /* 140 - 320 */ 0x60000040, 0x00000000, /* 148 - 328 */ -
> 0x80840020, 0x000003b8, /* 150 - 336 */ + 0x80840020, 0x000003c8,
> /* 150 - 336 */ 0x0f000001, 0x00000000, /* 158 - 344 */
> 0x6a360000, 0x00000000, /* 160 - 352 */ 0x6a630000, 0x00000000,
> /* 168 - 360 */ 0x7a600400, 0x00000000, /* 170 - 368 */ -
> 0x88880000, 0x00000500, /* 178 - 376 */ + 0x88880000, 0x00000528,
> /* 178 - 376 */ 0x78370000, 0x00000000, /* 180 - 384 */
> 0x60000400, 0x00000000, /* 188 - 392 */ 0x79360000, 0x00000000,
> /* 190 - 400 */ @@ -69,169 +69,174 @@ 0x7f130000, 0x00000000, /*
> 1f0 - 496 */ 0xf1100004, 0x00000000, /* 1f8 - 504 */ 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 */ + 0x868b0000, 0x000002d8, /* 208 -
> 520 */ + 0x878b0000, 0x000002f8, /* 210 - 528 */ + 0x808b0000,
> 0x000003e0, /* 218 - 536 */ + 0x818b0000, 0x00000378, /* 220 -
> 544 */ + 0x828b0000, 0x00000348, /* 228 - 552 */ + 0x838b0000,
> 0x00000350, /* 230 - 560 */ 0x98080000, 0x0000ffff, /* 238 -
> 568 */ - 0x88880000, 0x00000480, /* 240 - 576 */ - 0xf2340004,
> 0x00000000, /* 248 - 584 */ - 0x72690000, 0x00000000, /* 250 -
> 592 */ - 0x98040000, 0x0000ff00, /* 258 - 600 */ - 0x726c0000,
> 0x00000000, /* 260 - 608 */ - 0x6a100000, 0x00000000, /* 268 -
> 616 */ - 0x726d0000, 0x00000000, /* 270 - 624 */ - 0x6a110000,
> 0x00000000, /* 278 - 632 */ - 0x726e0000, 0x00000000, /* 280 -
> 640 */ - 0x6a120000, 0x00000000, /* 288 - 648 */ - 0x726f0000,
> 0x00000000, /* 290 - 656 */ - 0x6a130000, 0x00000000, /* 298 -
> 664 */ - 0xf1340001, 0x00000000, /* 2a0 - 672 */ - 0x72340000,
> 0x00000000, /* 2a8 - 680 */ - 0x80840000, 0xffffffe8, /* 2b0 -
> 688 */ - 0xf2600004, 0x00000000, /* 2b8 - 696 */ - 0x7e6c0400,
> 0x00000000, /* 2c0 - 704 */ - 0x7f6d0000, 0x00000000, /* 2c8 -
> 712 */ - 0x7f6e0000, 0x00000000, /* 2d0 - 720 */ - 0x7f6f0000,
> 0x00000000, /* 2d8 - 728 */ - 0x7e6a0100, 0x00000000, /* 2e0 -
> 736 */ - 0x726a0000, 0x00000000, /* 2e8 - 744 */ - 0x80840000,
> 0x00000028, /* 2f0 - 752 */ - 0x786cff00, 0x00000000, /* 2f8 -
> 760 */ - 0x786dff00, 0x00000000, /* 300 - 768 */ - 0x786eff00,
> 0x00000000, /* 308 - 776 */ - 0x786fff00, 0x00000000, /* 310 -
> 784 */ - 0x786a0000, 0x00000000, /* 318 - 792 */ - 0xe15c0004,
> 0x00000000, /* 320 - 800 */ - 0x7a5c0100, 0x00000000, /* 328 -
> 808 */ - 0xe25c0004, 0x00000000, /* 330 - 816 */ - 0x741a4000,
> 0x00000000, /* 338 - 824 */ - 0x72640000, 0x00000000, /* 340 -
> 832 */ - 0x6a100000, 0x00000000, /* 348 - 840 */ - 0x72650000,
> 0x00000000, /* 350 - 848 */ - 0x6a110000, 0x00000000, /* 358 -
> 856 */ - 0x72660000, 0x00000000, /* 360 - 864 */ - 0x6a120000,
> 0x00000000, /* 368 - 872 */ - 0x72670000, 0x00000000, /* 370 -
> 880 */ - 0x6a130000, 0x00000000, /* 378 - 888 */ - 0xf1100004,
> 0x00000000, /* 380 - 896 */ - 0x74100100, 0x00000000, /* 388 -
> 904 */ - 0x80840000, 0xfffffc68, /* 390 - 912 */ - 0x74100200,
> 0x00000000, /* 398 - 920 */ - 0x80840000, 0x00000018, /* 3a0 -
> 928 */ - 0xf1600004, 0x00000000, /* 3a8 - 936 */ - 0x47000028,
> 0xfffffc70, /* 3b0 - 944 */ - 0x9e030000, 0x0000ffff, /* 3b8 -
> 952 */ - 0x72640000, 0x00000000, /* 3c0 - 960 */ - 0x6a100000,
> 0x00000000, /* 3c8 - 968 */ - 0x72650000, 0x00000000, /* 3d0 -
> 976 */ - 0x6a110000, 0x00000000, /* 3d8 - 984 */ - 0x72660000,
> 0x00000000, /* 3e0 - 992 */ - 0x6a120000, 0x00000000, /* 3e8 -
> 1000 */ - 0x72670000, 0x00000000, /* 3f0 - 1008 */ - 0x6a130000,
> 0x00000000, /* 3f8 - 1016 */ - 0x7e680100, 0x00000000, /* 400 -
> 1024 */ - 0x7e640400, 0x00000000, /* 408 - 1032 */ - 0x7f650000,
> 0x00000000, /* 410 - 1040 */ - 0x7f660000, 0x00000000, /* 418
> - 1048 */ - 0x7f670000, 0x00000000, /* 420 - 1056 */ -
> 0x72680000, 0x00000000, /* 428 - 1064 */ - 0x80840000,
> 0x00000028, /* 430 - 1072 */ - 0x7864ff00, 0x00000000, /* 438 -
> 1080 */ - 0x7865ff00, 0x00000000, /* 440 - 1088 */ - 0x7866ff00,
> 0x00000000, /* 448 - 1096 */ - 0x7867ff00, 0x00000000, /* 450 -
> 1104 */ - 0x78680000, 0x00000000, /* 458 - 1112 */ - 0xf15c0004,
> 0x00000000, /* 460 - 1120 */ - 0x7a5c0100, 0x00000000, /* 468 -
> 1128 */ - 0xf25c0004, 0x00000000, /* 470 - 1136 */ - 0x745c0200,
> 0x00000000, /* 478 - 1144 */ - 0x80840000, 0xfffffeb8, /* 480 -
> 1152 */ - 0x7c5cfc00, 0x00000000, /* 488 - 1160 */ - 0x88880000,
> 0x000001e8, /* 490 - 1168 */ - 0xe15c0004, 0x00000000, /* 498 -
> 1176 */ - 0x7a5c0200, 0x00000000, /* 4a0 - 1184 */ - 0xe25c0004,
> 0x00000000, /* 4a8 - 1192 */ - 0x80000000, 0x00000000, /* 4b0 -
> 1200 */ - 0x78350000, 0x00000000, /* 4b8 - 1208 */ - 0x7869ff00,
> 0x00000000, /* 4c0 - 1216 */ - 0x58000008, 0x00000000, /* 4c8 -
> 1224 */ - 0x60000040, 0x00000000, /* 4d0 - 1232 */ - 0x1e000048,
> 0x00000048, /* 4d8 - 1240 */ - 0x60000008, 0x00000000, /* 4e0 -
> 1248 */ - 0x80880000, 0xfffffd18, /* 4e8 - 1256 */ - 0x60000040,
> 0x00000000, /* 4f0 - 1264 */ - 0x7a601000, 0x00000000, /* 4f8 -
> 1272 */ - 0x60000008, 0x00000000, /* 500 - 1280 */ - 0x1f000030,
> 0x00000030, /* 508 - 1288 */ - 0x808c0000, 0xfffffd28, /* 510 -
> 1296 */ - 0x808c0002, 0xffffffd0, /* 518 - 1304 */ - 0x808c0001,
> 0x000001c8, /* 520 - 1312 */ - 0x98040004, 0x0000ff01, /* 528 -
> 1320 */ - 0x88880000, 0x00000190, /* 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 */ - 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 */ + 0x88880000,
> 0x000004a8, /* 240 - 576 */ + 0x72350000, 0x00000000, /* 248 -
> 584 */ + 0x808c0000, 0x00000008, /* 250 - 592 */ + 0xf2340004,
> 0x00000000, /* 258 - 600 */ + 0x72690000, 0x00000000, /* 260 -
> 608 */ + 0x98040000, 0x0000ff00, /* 268 - 616 */ + 0x726c0000,
> 0x00000000, /* 270 - 624 */ + 0x6a100000, 0x00000000, /* 278 -
> 632 */ + 0x726d0000, 0x00000000, /* 280 - 640 */ + 0x6a110000,
> 0x00000000, /* 288 - 648 */ + 0x726e0000, 0x00000000, /* 290 -
> 656 */ + 0x6a120000, 0x00000000, /* 298 - 664 */ + 0x726f0000,
> 0x00000000, /* 2a0 - 672 */ + 0x6a130000, 0x00000000, /* 2a8 -
> 680 */ + 0xf1340001, 0x00000000, /* 2b0 - 688 */ + 0x72340000,
> 0x00000000, /* 2b8 - 696 */ + 0x80840000, 0xffffffe8, /* 2c0 -
> 704 */ + 0xf2600004, 0x00000000, /* 2c8 - 712 */ + 0x7e6c0400,
> 0x00000000, /* 2d0 - 720 */ + 0x7f6d0000, 0x00000000, /* 2d8 -
> 728 */ + 0x7f6e0000, 0x00000000, /* 2e0 - 736 */ + 0x7f6f0000,
> 0x00000000, /* 2e8 - 744 */ + 0x7e6a0100, 0x00000000, /* 2f0 -
> 752 */ + 0x726a0000, 0x00000000, /* 2f8 - 760 */ + 0x80840000,
> 0x00000028, /* 300 - 768 */ + 0x786cff00, 0x00000000, /* 308 -
> 776 */ + 0x786dff00, 0x00000000, /* 310 - 784 */ + 0x786eff00,
> 0x00000000, /* 318 - 792 */ + 0x786fff00, 0x00000000, /* 320 -
> 800 */ + 0x786a0000, 0x00000000, /* 328 - 808 */ + 0xe15c0004,
> 0x00000000, /* 330 - 816 */ + 0x7a5c0100, 0x00000000, /* 338 -
> 824 */ + 0xe25c0004, 0x00000000, /* 340 - 832 */ + 0x741a4000,
> 0x00000000, /* 348 - 840 */ + 0x72640000, 0x00000000, /* 350 -
> 848 */ + 0x6a100000, 0x00000000, /* 358 - 856 */ + 0x72650000,
> 0x00000000, /* 360 - 864 */ + 0x6a110000, 0x00000000, /* 368 -
> 872 */ + 0x72660000, 0x00000000, /* 370 - 880 */ + 0x6a120000,
> 0x00000000, /* 378 - 888 */ + 0x72670000, 0x00000000, /* 380 -
> 896 */ + 0x6a130000, 0x00000000, /* 388 - 904 */ + 0xf1100004,
> 0x00000000, /* 390 - 912 */ + 0x74100100, 0x00000000, /* 398 -
> 920 */ + 0x80840000, 0xfffffc58, /* 3a0 - 928 */ + 0x74100200,
> 0x00000000, /* 3a8 - 936 */ + 0x80840000, 0x00000018, /* 3b0 -
> 944 */ + 0xf1600004, 0x00000000, /* 3b8 - 952 */ + 0x47000028,
> 0xfffffc60, /* 3c0 - 960 */ + 0x9e030000, 0x0000ffff, /* 3c8 -
> 968 */ + 0x72640000, 0x00000000, /* 3d0 - 976 */ + 0x6a100000,
> 0x00000000, /* 3d8 - 984 */ + 0x72650000, 0x00000000, /* 3e0 -
> 992 */ + 0x6a110000, 0x00000000, /* 3e8 - 1000 */ + 0x72660000,
> 0x00000000, /* 3f0 - 1008 */ + 0x6a120000, 0x00000000, /* 3f8 -
> 1016 */ + 0x72670000, 0x00000000, /* 400 - 1024 */ + 0x6a130000,
> 0x00000000, /* 408 - 1032 */ + 0x7e680100, 0x00000000, /* 410 -
> 1040 */ + 0x7e640400, 0x00000000, /* 418 - 1048 */ + 0x7f650000,
> 0x00000000, /* 420 - 1056 */ + 0x7f660000, 0x00000000, /* 428 -
> 1064 */ + 0x7f670000, 0x00000000, /* 430 - 1072 */ + 0x72680000,
> 0x00000000, /* 438 - 1080 */ + 0x80840000, 0x00000028, /* 440 -
> 1088 */ + 0x7864ff00, 0x00000000, /* 448 - 1096 */ + 0x7865ff00,
> 0x00000000, /* 450 - 1104 */ + 0x7866ff00, 0x00000000, /* 458 -
> 1112 */ + 0x7867ff00, 0x00000000, /* 460 - 1120 */ + 0x78680000,
> 0x00000000, /* 468 - 1128 */ + 0xf15c0004, 0x00000000, /* 470 -
> 1136 */ + 0x7a5c0100, 0x00000000, /* 478 - 1144 */ + 0xf25c0004,
> 0x00000000, /* 480 - 1152 */ + 0x745c0200, 0x00000000, /* 488 -
> 1160 */ + 0x80840000, 0xfffffeb8, /* 490 - 1168 */ + 0x7c5cfc00,
> 0x00000000, /* 498 - 1176 */ + 0x88880000, 0x00000200, /* 4a0 -
> 1184 */ + 0xe15c0004, 0x00000000, /* 4a8 - 1192 */ + 0x7a5c0200,
> 0x00000000, /* 4b0 - 1200 */ + 0xe25c0004, 0x00000000, /* 4b8 -
> 1208 */ + 0x80000000, 0x00000000, /* 4c0 - 1216 */ + 0x78350000,
> 0x00000000, /* 4c8 - 1224 */ + 0x7869ff00, 0x00000000, /* 4d0 -
> 1232 */ + 0x58000008, 0x00000000, /* 4d8 - 1240 */ + 0x60000040,
> 0x00000000, /* 4e0 - 1248 */ + 0x1e000048, 0x00000048, /* 4e8 -
> 1256 */ + 0x60000008, 0x00000000, /* 4f0 - 1264 */ + 0x80880000,
> 0xfffffd08, /* 4f8 - 1272 */ + 0x60000040, 0x00000000, /* 500 -
> 1280 */ + 0x7a601000, 0x00000000, /* 508 - 1288 */ + 0x60000008,
> 0x00000000, /* 510 - 1296 */ + 0x1f000030, 0x00000030, /* 518 -
> 1304 */ + 0x808c0000, 0xfffffd18, /* 520 - 1312 */ + 0x808c0002,
> 0xffffffd0, /* 528 - 1320 */ + 0x808c0001, 0x000001e0, /* 530 -
> 1328 */ + 0x98040004, 0x0000ff01, /* 538 - 1336 */ + 0x88880000,
> 0x000001a8, /* 540 - 1344 */ + 0x74601000, 0x00000000, /* 548 -
> 1352 */ + 0x98040000, 0x0000ff04, /* 550 - 1360 */ + 0x72350000,
> 0x00000000, /* 558 - 1368 */ + 0x808c0000, 0xfffffde8, /* 560 -
> 1376 */ + 0xf2340004, 0x00000000, /* 568 - 1384 */ + 0x80880000,
> 0xfffffdd8, /* 570 - 1392 */ + 0x1a000050, 0x00000050, /* 578 -
> 1400 */ + 0x80880000, 0xfffffc80, /* 580 - 1408 */ + 0x1b000058,
> 0x00000058, /* 588 - 1416 */ + 0x6a690000, 0x00000000, /* 590 -
> 1424 */ + 0x80880000, 0xfffffc68, /* 598 - 1432 */ + 0x88880000,
> 0x000000b8, /* 5a0 - 1440 */ + 0x7a600800, 0x00000000, /* 5a8 -
> 1448 */ + 0x19000060, 0x00000060, /* 5b0 - 1456 */ + 0x7e350100,
> 0x00000000, /* 5b8 - 1464 */ + 0x7e100800, 0x00000000, /* 5c0 -
> 1472 */ + 0x7f110000, 0x00000000, /* 5c8 - 1480 */ + 0x7f120000,
> 0x00000000, /* 5d0 - 1488 */ + 0x7f130000, 0x00000000, /* 5d8 -
> 1496 */ + 0x818b0000, 0xffffffc8, /* 5e0 - 1504 */ + 0x88880000,
> 0x000000b8, /* 5e8 - 1512 */ + 0x7c60f700, 0x00000000, /* 5f0 -
> 1520 */ + 0x80880000, 0xfffffc08, /* 5f8 - 1528 */ + 0x88880000,
> 0x00000058, /* 600 - 1536 */ + 0x7a600800, 0x00000000, /* 608 -
> 1544 */ + 0x18000060, 0x00000060, /* 610 - 1552 */ + 0x7e350100,
> 0x00000000, /* 618 - 1560 */ + 0x7e100800, 0x00000000, /* 620 -
> 1568 */ + 0x7f110000, 0x00000000, /* 628 - 1576 */ + 0x7f120000,
> 0x00000000, /* 630 - 1584 */ + 0x7f130000, 0x00000000, /* 638 -
> 1592 */ + 0x808b0000, 0xffffffc8, /* 640 - 1600 */ + 0x88880000,
> 0x00000058, /* 648 - 1608 */ + 0x7c60f700, 0x00000000, /* 650 -
> 1616 */ + 0x80880000, 0xfffffba8, /* 658 - 1624 */ + 0x72100000,
> 0x00000000, /* 660 - 1632 */ + 0x6a5c0000, 0x00000000, /* 668 -
> 1640 */ + 0x72110000, 0x00000000, /* 670 - 1648 */ + 0x6a5d0000,
> 0x00000000, /* 678 - 1656 */ + 0x72120000, 0x00000000, /* 680 -
> 1664 */ + 0x6a5e0000, 0x00000000, /* 688 - 1672 */ + 0x72130000,
> 0x00000000, /* 690 - 1680 */ + 0x6a5f0000, 0x00000000, /* 698 -
> 1688 */ + 0x90080000, 0x00000000, /* 6a0 - 1696 */ + 0x725c0000,
> 0x00000000, /* 6a8 - 1704 */ + 0x6a100000, 0x00000000, /* 6b0 -
> 1712 */ + 0x725d0000, 0x00000000, /* 6b8 - 1720 */ + 0x6a110000,
> 0x00000000, /* 6c0 - 1728 */ + 0x725e0000, 0x00000000, /* 6c8 -
> 1736 */ + 0x6a120000, 0x00000000, /* 6d0 - 1744 */ + 0x725f0000,
> 0x00000000, /* 6d8 - 1752 */ + 0x6a130000, 0x00000000, /* 6e0 -
> 1760 */ 0x90080000, 0x00000000, /* 6e8 - 1768 */ - 0x60000040,
> 0x00000000, /* 6f0 - 1776 */ - 0x1f000038, 0x00000038, /* 6f8 -
> 1784 */ - 0x98080000, 0x0000ff02, /* 700 - 1792 */ - 0x60000040,
> 0x00000000, /* 708 - 1800 */ - 0x1f000040, 0x00000040, /* 710 -
> 1808 */ - 0x98080000, 0x0000ff03, /* 718 - 1816 */ + 0x7c027f00,
> 0x00000000, /* 6f0 - 1776 */ + 0x60000008, 0x00000000, /* 6f8 -
> 1784 */ + 0x60000040, 0x00000000, /* 700 - 1792 */ + 0x48000000,
> 0x00000000, /* 708 - 1800 */ + 0x90080000, 0x00000000, /* 710 -
> 1808 */ + 0x60000040, 0x00000000, /* 718 - 1816 */ + 0x1f000038,
> 0x00000038, /* 720 - 1824 */ + 0x98080000, 0x0000ff02, /* 728 -
> 1832 */ + 0x60000040, 0x00000000, /* 730 - 1840 */ + 0x1f000040,
> 0x00000040, /* 738 - 1848 */ + 0x98080000, 0x0000ff03, /* 740 -
> 1856 */ };
>
> const u_int32_t esiop_led_on[] = { @@ -274,29 +279,34 @@ #define
> A_cmd_slot_size 0x00000004 #define A_ndone_slots 0x00000100 #define
> A_ndone_slots_last 0x00000000 -#define Ent_cmdr0 0x00000438
> -#define Ent_cmdr1 0x00000440 -#define Ent_cmdr2 0x00000448
> -#define Ent_cmdr3 0x00000450 -#define Ent_doner0 0x000002f8
> -#define Ent_doner1 0x00000300 -#define Ent_doner2 0x00000308
> -#define Ent_doner3 0x00000310 +#define Ent_cmdr0 0x00000448
> +#define Ent_cmdr1 0x00000450 +#define Ent_cmdr2 0x00000458
> +#define Ent_cmdr3 0x00000460 +#define Ent_doner0 0x00000308
> +#define Ent_doner1 0x00000310 +#define Ent_doner2 0x00000318
> +#define Ent_doner3 0x00000320 #define Ent_reselect 0x00000028
> -#define Ent_led_on1 0x000004b0 +#define Ent_led_on1 0x000004c0
> #define Ent_led_on2 0x00000050 #define Ent_led_off 0x00000040
> -#define Ent_status 0x00000560 -#define Ent_msgin 0x00000500
> +#define Ent_status 0x00000588 +#define Ent_msgin 0x00000510
> #define Ent_msgin_ack 0x00000200 -#define Ent_get_extmsgdata
> 0x00000708 -#define Ent_send_msgout 0x000004c8 -#define
> Ent_script_sched 0x00000340 +#define Ent_get_extmsgdata 0x00000730
> +#define Ent_send_msgout 0x000004d8 +#define Ent_script_sched
> 0x00000350 #define Ent_load_targtable 0x000000a0 #define
> E_tlq_offset 0x00000000 u_int32_t E_tlq_offset_Used[] = { -
> 0x00000093, - 0x000000eb, + 0x000000ef, +}; + +#define
> E_saved_offset_offset 0x00000000 +u_int32_t
> E_saved_offset_offset_Used[] = { + 0x00000097, + 0x0000015b, };
>
> #define E_abs_msgin2 0x00000000 @@ -310,10 +320,10 @@ u_int32_t
> E_abs_sem_Used[] = { 0x00000001, 0x00000009, - 0x000000c9,
> 0x000000cd, - 0x00000127, + 0x000000d1, 0x0000012b, + 0x0000012f,
> };
>
> #define A_sem_done 0x00000001 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 17 Nov 2005 17:28:53 -0000 @@ -112,6 +112,7
> @@ ENTRY load_targtable;
>
> EXTERN tlq_offset; +EXTERN saved_offset_offset; EXTERN abs_msgin2;
>
> EXTERN abs_sem; a 32bits word used a semaphore between script and
> driver @@ -208,7 +209,11 @@
>
> handle_cmpl: CALL REL(disconnect); - STORE NOFLUSH SCRATCHA0, 4,
> from tlq_offset; save current offset +; update offset if we did
> some data transfer + MOVE SCRATCHA1 TO SFBR; + JUMP
> REL(handle_cmpl_noxfer), if 0x00; + STORE NOFLUSH SCRATCHA0, 4,
> FROM saved_offset_offset; +handle_cmpl_noxfer: MOVE SCRATCHE1 to
> SFBR; INT int_done, IF NOT 0x00; if status is not "done", let host
> handle it MOVE SCRATCHF0 to SFBR; load pointer in done ring @@
> -344,9 +349,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 SCRATCHA0, 4, FROM saved_offset_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 17 Nov 2005 17:28:53 -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 Thu Nov 17 18:28:18 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 */ + 0x19000060,
> 0x00000060, /* 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 */ + 0x18000060,
> 0x00000060, /* 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[] = { @@ -250,6 +252,7 @@ #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 +262,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 17 Nov 2005 17:28:53 -0000 @@ -47,6 +47,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 +263,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;
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFDfO6ZzFQu7sVnWh8RAn2VAJ4kzbcdn0qlIH5W4tfKNOFBaKrgBACaApkS
emkGrSrLxMlt5nCE10kjEbg=
=mW2R
-----END PGP SIGNATURE-----