diff options
-rw-r--r-- | sys/dev/ic/siop.c | 93 | ||||
-rw-r--r-- | sys/dev/ic/siop_common.c | 171 | ||||
-rw-r--r-- | sys/dev/ic/siopvar_common.h | 9 | ||||
-rw-r--r-- | sys/dev/microcode/siop/siop.out | 176 |
4 files changed, 309 insertions, 140 deletions
diff --git a/sys/dev/ic/siop.c b/sys/dev/ic/siop.c index aa8f81b00ea..15b14e60696 100644 --- a/sys/dev/ic/siop.c +++ b/sys/dev/ic/siop.c @@ -1,5 +1,5 @@ -/* $OpenBSD: siop.c,v 1.39 2005/10/08 19:48:42 krw Exp $ */ -/* $NetBSD: siop.c,v 1.65 2002/11/08 22:04:41 bouyer Exp $ */ +/* $OpenBSD: siop.c,v 1.40 2005/10/10 16:27:23 krw Exp $ */ +/* $NetBSD: siop.c,v 1.78 2005/02/27 00:27:02 perry Exp $ */ /* * Copyright (c) 2000 Manuel Bouyer. @@ -343,7 +343,7 @@ siop_intr(v) struct siop_cmd *siop_cmd; struct siop_lun *siop_lun; struct scsi_xfer *xs; - int istat, sist, sstat1, dstat; + int istat, sist, sstat1, dstat = 0; u_int32_t irqcode; int need_reset = 0; int offset, target, lun, tag; @@ -518,31 +518,31 @@ siop_intr(v) /* * previous phase may be aborted for any reason * ( for example, the target has less data to - * transfer than requested). Just go to status - * and the command should terminate. + * transfer than requested). Compute resid and + * just go to status, the command should + * terminate. */ INCSTAT(siop_stat_intr_shortxfer); - if ((dstat & DSTAT_DFE) == 0) + if (scratcha0 & A_flag_data) + siop_ma(&siop_cmd->cmd_c); + else if ((dstat & DSTAT_DFE) == 0) siop_clearfifo(&sc->sc_c); - /* no table to flush here */ CALL_SCRIPT(Ent_status); return 1; case SSTAT1_PHASE_MSGIN: - /* - * target may be ready to disconnect - * Save data pointers just in case. - */ + /* + * target may be ready to disconnect + * Compute resid which would be used later + * if a save data pointer is needed. + */ INCSTAT(siop_stat_intr_xferdisc); if (scratcha0 & A_flag_data) - siop_sdp(&siop_cmd->cmd_c); + siop_ma(&siop_cmd->cmd_c); else if ((dstat & DSTAT_DFE) == 0) siop_clearfifo(&sc->sc_c); bus_space_write_1(sc->sc_c.sc_rt, sc->sc_c.sc_rh, SIOP_SCRATCHA, scratcha0 & ~A_flag_data); - siop_table_sync(siop_cmd, - BUS_DMASYNC_PREREAD | - BUS_DMASYNC_PREWRITE); CALL_SCRIPT(Ent_msgin); return 1; } @@ -816,6 +816,15 @@ scintr: CALL_SCRIPT(Ent_msgin_ack); return 1; } + if (msgin == MSG_IGN_WIDE_RESIDUE) { + /* use the extmsgdata table to get the second byte */ + siop_cmd->cmd_tables->t_extmsgdata.count = + htole32(1); + siop_table_sync(siop_cmd, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + CALL_SCRIPT(Ent_get_extmsgdata); + return 1; + } if (xs) sc_print_addr(xs->sc_link); else @@ -859,6 +868,29 @@ scintr: printf("\n"); } #endif + if (siop_cmd->cmd_tables->msg_in[0] == + MSG_IGN_WIDE_RESIDUE) { + /* we got the second byte of MSG_IGN_WIDE_RESIDUE */ + if (siop_cmd->cmd_tables->msg_in[3] != 1) + printf("MSG_IGN_WIDE_RESIDUE: " + "bad len %d\n", + siop_cmd->cmd_tables->msg_in[3]); + switch (siop_iwr(&siop_cmd->cmd_c)) { + case SIOP_NEG_MSGOUT: + siop_table_sync(siop_cmd, + BUS_DMASYNC_PREREAD | + BUS_DMASYNC_PREWRITE); + CALL_SCRIPT(Ent_send_msgout); + return(1); + case SIOP_NEG_ACK: + CALL_SCRIPT(Ent_msgin_ack); + return(1); + default: + panic("invalid retval from " + "siop_iwr()"); + } + return(1); + } if (siop_cmd->cmd_tables->msg_in[2] == MSG_EXT_WDTR) { switch (siop_wdtr_neg(&siop_cmd->cmd_c)) { case SIOP_NEG_MSGOUT: @@ -936,25 +968,9 @@ scintr: #ifdef SIOP_DEBUG_DR printf("disconnect offset %d\n", offset); #endif - if (offset > SIOP_NSG) { - printf("%s: bad offset for disconnect (%d)\n", - sc->sc_c.sc_dev.dv_xname, offset); - goto reset; - } - /* - * offset == SIOP_NSG may be a valid condition if - * we get a sdp when the xfer is done. - * Don't call bcopy in this case. - */ - if (offset < SIOP_NSG) { - bcopy(&siop_cmd->cmd_tables->data[offset], - &siop_cmd->cmd_tables->data[0], - (SIOP_NSG - offset) * sizeof(scr_table_t)); - siop_table_sync(siop_cmd, - BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); - } - /* check if we can put some command in scheduler */ - siop_start(sc); + siop_sdp(&siop_cmd->cmd_c, offset); + siop_table_sync(siop_cmd, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); CALL_SCRIPT(Ent_script_sched); return 1; case A_int_resfail: @@ -981,6 +997,10 @@ scintr: letoh32(siop_cmd->cmd_tables->status)); #endif INCSTAT(siop_stat_intr_done); + /* update resid. */ + offset = bus_space_read_1(sc->sc_c.sc_rt, + sc->sc_c.sc_rh, SIOP_SCRATCHA + 1); + siop_update_resid(&siop_cmd->cmd_c, offset); if (siop_cmd->cmd_c.status == CMDST_SENSE_ACTIVE) siop_cmd->cmd_c.status = CMDST_SENSE_DONE; else @@ -1145,7 +1165,10 @@ out: xs->flags |= ITSDONE; siop_cmd->cmd_c.status = CMDST_FREE; TAILQ_INSERT_TAIL(&sc->free_list, siop_cmd, next); - xs->resid = 0; +#if 0 + if (xs->resid != 0) + printf("resid %d datalen %d\n", xs->resid, xs->datalen); +#endif scsi_done(xs); } diff --git a/sys/dev/ic/siop_common.c b/sys/dev/ic/siop_common.c index 5c3fd53cf11..8813b78462a 100644 --- a/sys/dev/ic/siop_common.c +++ b/sys/dev/ic/siop_common.c @@ -1,5 +1,5 @@ -/* $OpenBSD: siop_common.c,v 1.23 2005/10/08 23:46:11 krw Exp $ */ -/* $NetBSD: siop_common.c,v 1.31 2002/09/27 15:37:18 provos Exp $ */ +/* $OpenBSD: siop_common.c,v 1.24 2005/10/10 16:27:23 krw Exp $ */ +/* $NetBSD: siop_common.c,v 1.37 2005/02/27 00:27:02 perry Exp $ */ /* * Copyright (c) 2000, 2002 Manuel Bouyer. @@ -714,17 +714,21 @@ siop_minphys(bp) } void -siop_sdp(siop_cmd) +siop_ma(siop_cmd) struct siop_common_cmd *siop_cmd; { - /* save data pointer. Handle async only for now */ int offset, dbc, sstat; struct siop_common_softc *sc = siop_cmd->siop_sc; - scr_table_t *table; /* table to patch */ + scr_table_t *table; /* table with partial xfer */ + /* + * compute how much of the current table didn't get handled when + * a phase mismatch occurs + */ if ((siop_cmd->xs->flags & (SCSI_DATA_OUT | SCSI_DATA_IN)) == 0) - return; /* no data pointers to save */ + return; /* no valid data transfer */ + offset = bus_space_read_1(sc->sc_rt, sc->sc_rh, SIOP_SCRATCHA + 1); if (offset >= SIOP_NSG) { printf("%s: bad offset in siop_sdp (%d)\n", @@ -733,8 +737,8 @@ siop_sdp(siop_cmd) } table = &siop_cmd->siop_tables->data[offset]; #ifdef DEBUG_DR - printf("sdp: offset %d count=%d addr=0x%x ", offset, - letoh32(table->count), letoh32(table->addr)); + printf("siop_ma: offset %d count=%d addr=0x%x ", offset, + table->count, table->addr); #endif dbc = bus_space_read_4(sc->sc_rt, sc->sc_rh, SIOP_DBC) & 0x00ffffff; if (siop_cmd->xs->flags & SCSI_DATA_OUT) { @@ -772,13 +776,152 @@ siop_sdp(siop_cmd) bus_space_read_1(sc->sc_rt, sc->sc_rh, SIOP_CTEST3) | CTEST3_CLF); } - table->addr = - htole32(letoh32(table->addr) + letoh32(table->count) - dbc); - table->count = htole32(dbc); -#ifdef DEBUG_DR - printf("now count=%d addr=0x%x\n", - letoh32(table->count), letoh32(table->addr)); + siop_cmd->flags |= CMDFL_RESID; + siop_cmd->resid = dbc; +} + +void +siop_sdp(siop_cmd, offset) + struct siop_common_cmd *siop_cmd; + int offset; +{ + scr_table_t *table; + + if ((siop_cmd->xs->flags & (SCSI_DATA_OUT | SCSI_DATA_IN)) + == 0) + return; /* no data pointers to save */ + + /* + * offset == SIOP_NSG may be a valid condition if we get a Save data + * pointer when the xfer is done. Just ignore the Save data pointer + * in this case + */ + if (offset == SIOP_NSG) + return; +#ifdef DIAGNOSTIC + if (offset > SIOP_NSG) { + sc_print_addr(siop_cmd->xs->sc_link); + printf(": offset %d > %d\n", offset, SIOP_NSG); + panic("siop_sdp: offset"); + } #endif + /* + * Save data pointer. We do this by adjusting the tables to point + * at the begginning of the data not yet transfered. + * offset points to the first table with untransfered data. + */ + + /* + * before doing that we decrease resid from the ammount of data which + * has been transfered. + */ + siop_update_resid(siop_cmd, offset); + + /* + * First let see if we have a resid from a phase mismatch. If so, + * we have to adjst the table at offset to remove transfered data. + */ + if (siop_cmd->flags & CMDFL_RESID) { + siop_cmd->flags &= ~CMDFL_RESID; + table = &siop_cmd->siop_tables->data[offset]; + /* "cut" already transfered data from this table */ + table->addr = + htole32(letoh32(table->addr) + + letoh32(table->count) - siop_cmd->resid); + table->count = htole32(siop_cmd->resid); + } + + /* + * now we can remove entries which have been transfered. + * We just move the entries with data left at the beggining of the + * tables + */ + bcopy(&siop_cmd->siop_tables->data[offset], + &siop_cmd->siop_tables->data[0], + (SIOP_NSG - offset) * sizeof(scr_table_t)); +} + +void +siop_update_resid(siop_cmd, offset) + struct siop_common_cmd *siop_cmd; + int offset; +{ + scr_table_t *table; + int i; + + if ((siop_cmd->xs->flags & (SCSI_DATA_OUT | SCSI_DATA_IN)) + == 0) + return; /* no data to transfer */ + + /* + * update resid. First account for the table entries which have + * been fully completed. + */ + for (i = 0; i < offset; i++) + siop_cmd->xs->resid -= + letoh32(siop_cmd->siop_tables->data[i].count); + /* + * if CMDFL_RESID is set, the last table (pointed by offset) is a + * partial transfers. If not, offset points to the entry folloing + * the last full transfer. + */ + if (siop_cmd->flags & CMDFL_RESID) { + table = &siop_cmd->siop_tables->data[offset]; + siop_cmd->xs->resid -= letoh32(table->count) - siop_cmd->resid; + } +} + +int +siop_iwr(siop_cmd) + struct siop_common_cmd *siop_cmd; +{ + int offset; + scr_table_t *table; /* table with IWR */ + struct siop_common_softc *sc = siop_cmd->siop_sc; + /* handle ignore wide residue messages */ + + /* if target isn't wide, reject */ + if ((siop_cmd->siop_target->flags & TARF_ISWIDE) == 0) { + siop_cmd->siop_tables->t_msgout.count= htole32(1); + siop_cmd->siop_tables->msg_out[0] = MSG_MESSAGE_REJECT; + return SIOP_NEG_MSGOUT; + } + /* get index of current command in table */ + offset = bus_space_read_1(sc->sc_rt, sc->sc_rh, SIOP_SCRATCHA + 1); + /* + * if the current table did complete, we're now pointing at the + * next one. Go back one if we didn't see a phase mismatch. + */ + if ((siop_cmd->flags & CMDFL_RESID) == 0) + offset--; + table = &siop_cmd->siop_tables->data[offset]; + + if ((siop_cmd->flags & CMDFL_RESID) == 0) { + if (letoh32(table->count) & 1) { + /* we really got the number of bytes we expected */ + return SIOP_NEG_ACK; + } else { + /* + * now we really had a short xfer, by one byte. + * handle it just as if we had a phase mistmatch + * (there is a resid of one for this table). + * Update scratcha1 to reflect the fact that + * this xfer isn't complete. + */ + siop_cmd->flags |= CMDFL_RESID; + siop_cmd->resid = 1; + bus_space_write_1(sc->sc_rt, sc->sc_rh, + SIOP_SCRATCHA + 1, offset); + return SIOP_NEG_ACK; + } + } else { + /* + * we already have a short xfer for this table; it's + * just one byte less than we though it was + */ + siop_cmd->resid--; + return SIOP_NEG_ACK; + } } void diff --git a/sys/dev/ic/siopvar_common.h b/sys/dev/ic/siopvar_common.h index 6ed6c6a63e1..c9db45647d3 100644 --- a/sys/dev/ic/siopvar_common.h +++ b/sys/dev/ic/siopvar_common.h @@ -1,4 +1,4 @@ -/* $OpenBSD: siopvar_common.h,v 1.20 2005/10/08 17:30:18 krw Exp $ */ +/* $OpenBSD: siopvar_common.h,v 1.21 2005/10/10 16:27:23 krw Exp $ */ /* $NetBSD: siopvar_common.h,v 1.32 2005/02/27 00:27:02 perry Exp $ */ /* @@ -86,6 +86,7 @@ struct siop_common_cmd { int status; int flags; int tag; /* tag used for tagged command queuing */ + int resid; /* valid when CMDFL_RESID is set */ }; /* status defs */ @@ -99,6 +100,7 @@ struct siop_common_cmd { /* flags defs */ #define CMDFL_TIMEOUT 0x0001 /* cmd timed out */ #define CMDFL_TAG 0x0002 /* tagged cmd */ +#define CMDFL_RESID 0x0004 /* current offset in table is partial */ /* per-target struct */ struct siop_common_target { @@ -192,12 +194,15 @@ void siop_sdtr_msg(struct siop_common_cmd *, int, int, int); void siop_wdtr_msg(struct siop_common_cmd *, int, int); void siop_ppr_msg(struct siop_common_cmd *, int, int, int); void siop_update_xfer_mode(struct siop_common_softc *, int); +int siop_iwr(struct siop_common_cmd *); /* actions to take at return of siop_wdtr_neg() and siop_sdtr_neg() */ #define SIOP_NEG_NOP 0x0 #define SIOP_NEG_MSGOUT 0x1 #define SIOP_NEG_ACK 0x2 void siop_minphys(struct buf *); -void siop_sdp(struct siop_common_cmd *); +void siop_ma(struct siop_common_cmd *); +void siop_sdp(struct siop_common_cmd *, int); +void siop_update_resid(struct siop_common_cmd *, int); void siop_clearfifo(struct siop_common_softc *); void siop_resetbus(struct siop_common_softc *); diff --git a/sys/dev/microcode/siop/siop.out b/sys/dev/microcode/siop/siop.out index a33107b624e..bae025cb8da 100644 --- a/sys/dev/microcode/siop/siop.out +++ b/sys/dev/microcode/siop/siop.out @@ -1,19 +1,19 @@ -/* $OpenBSD: siop.out,v 1.6 2005/10/08 15:59:05 krw Exp $ */ +/* $OpenBSD: siop.out,v 1.7 2005/10/10 16:27:24 krw Exp $ */ /* * DO NOT EDIT - this file is automatically generated. - * created from siop.ss on Sat Oct 8 11:55:06 2005 + * created from siop.ss on Mon Oct 10 12:15:59 2005 */ const u_int32_t siop_script[] = { 0x78340000, 0x00000000, /* 000 - 0 */ 0x78350000, 0x00000000, /* 008 - 8 */ 0x72370000, 0x00000000, /* 010 - 16 */ 0x80840020, 0x00000318, /* 018 - 24 */ - 0x868b0000, 0x00000380, /* 020 - 32 */ + 0x868b0000, 0x00000370, /* 020 - 32 */ 0x878b0000, 0x000002f8, /* 028 - 40 */ - 0x808b0000, 0x00000408, /* 030 - 48 */ - 0x818b0000, 0x000003a0, /* 038 - 56 */ - 0x828b0000, 0x00000378, /* 040 - 64 */ - 0x838b0000, 0x00000380, /* 048 - 72 */ + 0x808b0000, 0x000003f8, /* 030 - 48 */ + 0x818b0000, 0x00000390, /* 038 - 56 */ + 0x828b0000, 0x00000368, /* 040 - 64 */ + 0x838b0000, 0x00000370, /* 048 - 72 */ 0x98080000, 0x0000ffff, /* 050 - 80 */ 0x741a4000, 0x00000000, /* 058 - 88 */ 0x980c0000, 0x0000ff83, /* 060 - 96 */ @@ -107,83 +107,81 @@ const u_int32_t siop_script[] = { 0x7a340100, 0x00000000, /* 320 - 800 */ 0x60000008, 0x00000000, /* 328 - 808 */ 0x1f000038, 0x00000038, /* 330 - 816 */ - 0x808c0000, 0x00000218, /* 338 - 824 */ + 0x808c0000, 0x00000208, /* 338 - 824 */ 0x808c0002, 0xffffffd0, /* 340 - 832 */ - 0x808c0001, 0x00000218, /* 348 - 840 */ + 0x808c0001, 0x00000208, /* 348 - 840 */ 0x98040004, 0x0000ff01, /* 350 - 848 */ - 0x88880000, 0x000001d0, /* 358 - 856 */ + 0x88880000, 0x000001c0, /* 358 - 856 */ 0x74340100, 0x00000000, /* 360 - 864 */ 0x808c0000, 0xfffffd00, /* 368 - 872 */ - 0x72350000, 0x00000000, /* 370 - 880 */ - 0x808c0000, 0xfffffcf0, /* 378 - 888 */ - 0x98080000, 0x0000ff04, /* 380 - 896 */ - 0x60000040, 0x00000000, /* 388 - 904 */ - 0x80880000, 0xfffffc88, /* 390 - 912 */ - 0x58000008, 0x00000000, /* 398 - 920 */ - 0x60000040, 0x00000000, /* 3a0 - 928 */ - 0x1e000050, 0x00000050, /* 3a8 - 936 */ - 0x60000008, 0x00000000, /* 3b0 - 944 */ + 0x98080000, 0x0000ff04, /* 370 - 880 */ + 0x60000040, 0x00000000, /* 378 - 888 */ + 0x80880000, 0xfffffc98, /* 380 - 896 */ + 0x58000008, 0x00000000, /* 388 - 904 */ + 0x60000040, 0x00000000, /* 390 - 912 */ + 0x1e000050, 0x00000050, /* 398 - 920 */ + 0x60000008, 0x00000000, /* 3a0 - 928 */ + 0x80880000, 0xfffffc70, /* 3a8 - 936 */ + 0x1a000058, 0x00000058, /* 3b0 - 944 */ 0x80880000, 0xfffffc60, /* 3b8 - 952 */ - 0x1a000058, 0x00000058, /* 3c0 - 960 */ + 0x1b000060, 0x00000060, /* 3c0 - 960 */ 0x80880000, 0xfffffc50, /* 3c8 - 968 */ - 0x1b000060, 0x00000060, /* 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 */ - 0x1f000040, 0x00000040, /* 570 - 1392 */ - 0x98080000, 0x0000ff02, /* 578 - 1400 */ - 0x60000040, 0x00000000, /* 580 - 1408 */ - 0x1f000048, 0x00000048, /* 588 - 1416 */ - 0x98080000, 0x0000ff03, /* 590 - 1424 */ - 0x80000000, 0x00000000, /* 598 - 1432 */ + 0x88880000, 0x000000b8, /* 3d0 - 976 */ + 0x7a340200, 0x00000000, /* 3d8 - 984 */ + 0x19000068, 0x00000068, /* 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 */ + 0x18000068, 0x00000068, /* 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 */ + 0x1f000040, 0x00000040, /* 560 - 1376 */ + 0x98080000, 0x0000ff02, /* 568 - 1384 */ + 0x60000040, 0x00000000, /* 570 - 1392 */ + 0x1f000048, 0x00000048, /* 578 - 1400 */ + 0x98080000, 0x0000ff03, /* 580 - 1408 */ + 0x80000000, 0x00000000, /* 588 - 1416 */ }; const u_int32_t lun_switch[] = { @@ -261,24 +259,24 @@ const u_int32_t siop_led_off[] = { #define A_flag_data 0x00000002 #define A_flag_data_mask 0x000000fd #define Ent_waitphase 0x00000020 -#define Ent_send_msgout 0x00000398 -#define Ent_msgout 0x000003a8 +#define Ent_send_msgout 0x00000388 +#define Ent_msgout 0x00000398 #define Ent_msgin 0x00000328 #define Ent_handle_msgin 0x00000338 -#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_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_reselect 0x000001e0 #define Ent_reselected 0x00000000 -#define Ent_selected 0x00000388 +#define Ent_selected 0x00000378 #define Ent_script_sched 0x00000070 #define Ent_script_sched_slot0 0x000000a0 -#define Ent_get_extmsgdata 0x00000580 +#define Ent_get_extmsgdata 0x00000570 #define Ent_resel_targ0 0x00000238 -#define Ent_msgin_space 0x00000598 +#define Ent_msgin_space 0x00000588 #define Ent_lunsw_return 0x000002b8 #define Ent_led_on1 0x00000068 #define Ent_led_on2 0x00000220 |