Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/microcode/siop Move a few things around, to save som...
details: https://anonhg.NetBSD.org/src/rev/247ef3968157
branches: trunk
changeset: 526299:247ef3968157
user: bouyer <bouyer%NetBSD.org@localhost>
date: Thu May 02 12:37:19 2002 +0000
description:
Move a few things around, to save some JUMP.
diffstat:
sys/dev/microcode/siop/esiop.ss | 106 +++++++++++++++++++--------------------
1 files changed, 51 insertions(+), 55 deletions(-)
diffs (144 lines):
diff -r ed02b695a113 -r 247ef3968157 sys/dev/microcode/siop/esiop.ss
--- a/sys/dev/microcode/siop/esiop.ss Thu May 02 12:36:23 2002 +0000
+++ b/sys/dev/microcode/siop/esiop.ss Thu May 02 12:37:19 2002 +0000
@@ -1,4 +1,4 @@
-; $NetBSD: esiop.ss,v 1.12 2002/04/27 18:46:50 bouyer Exp $
+; $NetBSD: esiop.ss,v 1.13 2002/05/02 12:37:19 bouyer Exp $
;
; Copyright (c) 2002 Manuel Bouyer.
@@ -176,7 +176,6 @@
CLEAR ACK;
INT int_msgin, IF NOT 0x20; not a simple tag message, let host handle it
MOVE 1, abs_msgin2, WHEN MSG_IN; get tag
- CLEAR ACK;
MOVE SFBR to SCRATCHA2;
MOVE SFBR to SCRATCHC3;
MOVE SCRATCHC0 | f_c_tag to SCRATCHC0; save TAG
@@ -197,12 +196,59 @@
MOVE DSA2 + 0x00 TO DSA2 with CARRY;
MOVE DSA3 + 0x00 TO DSA3 with CARRY; SCRACHA(2,3) + DSA to DSA
LOAD DSA0, 4, from 0; load DSA for this tag
- JUMP REL(waitphase);
+msgin_ack:
+ CLEAR ACK;
+waitphase:
+ JUMP REL(msgout), WHEN MSG_OUT;
+ JUMP REL(msgin), WHEN MSG_IN;
+ JUMP REL(dataout), WHEN DATA_OUT;
+ JUMP REL(datain), WHEN DATA_IN;
+ JUMP REL(cmdout), WHEN CMD;
+ JUMP REL(status), WHEN STATUS;
+ INT int_err;
+
+handle_cmpl:
+ CALL REL(disconnect);
+ 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
+ MOVE SFBR to DSA0;
+ MOVE SCRATCHF1 to SFBR;
+ MOVE SFBR to DSA1;
+ MOVE SCRATCHF2 to SFBR;
+ MOVE SFBR to DSA2;
+ MOVE SCRATCHF3 to SFBR;
+ MOVE SFBR to DSA3;
+wait_free:
+ LOAD SCRATCHA0, 1, from 0;
+ MOVE SCRATCHA0 to SFBR;
+ JUMP REL(wait_free), if not 0; wait for slot to be free
+ STORE NOFLUSH SCRATCHC0, 4, from 0; save current target/lun/flag
+ MOVE SCRATCHF0 + 4 to SCRATCHF0; advance to next slot
+ MOVE SCRATCHF1 + 0 to SCRATCHF1 with carry;
+ MOVE SCRATCHF2 + 0 to SCRATCHF2 with carry;
+ MOVE SCRATCHF3 + 0 to SCRATCHF3 with carry;
+ MOVE SCRATCHE2 + 1 to SCRATCHE2;
+ MOVE SCRATCHE2 to SFBR;
+ JUMP REL(is_done), if not ndone_slots_last;
+doner0:
+ MOVE 0xff to SCRATCHF0; driver will change 0xff to base of ring
+doner1:
+ MOVE 0xff to SCRATCHF1;
+doner2:
+ MOVE 0xff to SCRATCHF2;
+doner3:
+ MOVE 0xff to SCRATCHF3;
+ MOVE 0 to SCRATCHE2;
+is_done:
+ LOAD SCRATCHB0, 4, abs_sem; signal that a command is done
+ MOVE SCRATCHB0 | sem_done TO SCRATCHB0;
+ STORE NOFLUSH SCRATCHB0, 4, abs_sem;
+; and attempt next command
reselect_fail:
- ; check that host asserted SIGP, this'll clear SIGP in ISTAT
+ ; clear SIGP in ISTAT
MOVE CTEST2 & 0x40 TO SFBR;
- INT int_resfail, IF 0x00;
script_sched:
; Load ring DSA
MOVE SCRATCHD0 to SFBR;
@@ -282,17 +328,6 @@
CLEAR ATN;
JUMP REL(waitphase);
-msgin_ack:
- CLEAR ACK;
-waitphase:
- JUMP REL(msgout), WHEN MSG_OUT;
- JUMP REL(msgin), WHEN MSG_IN;
- JUMP REL(dataout), WHEN DATA_OUT;
- JUMP REL(datain), WHEN DATA_IN;
- JUMP REL(cmdout), WHEN CMD;
- JUMP REL(status), WHEN STATUS;
- INT int_err;
-
handle_sdp:
CLEAR ACK;
@@ -381,45 +416,6 @@
WAIT DISCONNECT;
RETURN;
-handle_cmpl:
- CALL REL(disconnect);
- 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
- MOVE SFBR to DSA0;
- MOVE SCRATCHF1 to SFBR;
- MOVE SFBR to DSA1;
- MOVE SCRATCHF2 to SFBR;
- MOVE SFBR to DSA2;
- MOVE SCRATCHF3 to SFBR;
- MOVE SFBR to DSA3;
-wait_free:
- LOAD SCRATCHA0, 1, from 0;
- MOVE SCRATCHA0 to SFBR;
- JUMP REL(wait_free), if not 0; wait for slot to be free
- STORE NOFLUSH SCRATCHC0, 4, from 0; save current target/lun/flag
- MOVE SCRATCHF0 + 4 to SCRATCHF0; advance to next slot
- MOVE SCRATCHF1 + 0 to SCRATCHF1 with carry;
- MOVE SCRATCHF2 + 0 to SCRATCHF2 with carry;
- MOVE SCRATCHF3 + 0 to SCRATCHF3 with carry;
- MOVE SCRATCHE2 + 1 to SCRATCHE2;
- MOVE SCRATCHE2 to SFBR;
- JUMP REL(is_done), if not ndone_slots_last;
-doner0:
- MOVE 0xff to SCRATCHF0; driver will change 0xff to base of ring
-doner1:
- MOVE 0xff to SCRATCHF1;
-doner2:
- MOVE 0xff to SCRATCHF2;
-doner3:
- MOVE 0xff to SCRATCHF3;
- MOVE 0 to SCRATCHE2;
-is_done:
- LOAD SCRATCHB0, 4, abs_sem; signal that a command is done
- MOVE SCRATCHB0 | sem_done TO SCRATCHB0;
- STORE NOFLUSH SCRATCHB0, 4, abs_sem;
- JUMP REL(script_sched); and attempt next command
-
handle_extin:
CLEAR ACK;
MOVE FROM t_ext_msg_in, WHEN MSG_IN;
Home |
Main Index |
Thread Index |
Old Index