summaryrefslogtreecommitdiff
path: root/sys/dev/microcode/siop/siop.ss
diff options
context:
space:
mode:
authorbouyer <bouyer@NetBSD.org>2000-05-04 15:42:42 +0000
committerbouyer <bouyer@NetBSD.org>2000-05-04 15:42:42 +0000
commitc8ff442f7207d030d74867a7d0497f8101b5f008 (patch)
treedefa1b6dcbff557a66eef13a9fb1c8e70ae952ee /sys/dev/microcode/siop/siop.ss
parent057045f8bf31a30d9bd4a318ef11acf369af26b5 (diff)
Add a flag hold in scratcha0, set when we're doing a data transfer. Used
for save data pointers.
Diffstat (limited to 'sys/dev/microcode/siop/siop.ss')
-rw-r--r--sys/dev/microcode/siop/siop.ss26
1 files changed, 16 insertions, 10 deletions
diff --git a/sys/dev/microcode/siop/siop.ss b/sys/dev/microcode/siop/siop.ss
index cb281043d03..0eb1b23f868 100644
--- a/sys/dev/microcode/siop/siop.ss
+++ b/sys/dev/microcode/siop/siop.ss
@@ -1,4 +1,4 @@
-; $NetBSD: siop.ss,v 1.3 2000/04/27 14:08:09 bouyer Exp $
+; $NetBSD: siop.ss,v 1.4 2000/05/04 15:42:42 bouyer Exp $
;
; Copyright (c) 2000 Manuel Bouyer.
@@ -32,15 +32,15 @@
ARCH 720
; offsets in sym_xfer
-ABSOLUTE t_id = 20;
-ABSOLUTE t_msg_in = 28;
-ABSOLUTE t_ext_msg_in = 36;
-ABSOLUTE t_ext_msg_data = 44;
-ABSOLUTE t_ext_msg_tag = 52;
-ABSOLUTE t_msg_out = 60;
-ABSOLUTE t_cmd = 68;
-ABSOLUTE t_status = 76;
-ABSOLUTE t_data = 84;
+ABSOLUTE t_id = 24;
+ABSOLUTE t_msg_in = 32;
+ABSOLUTE t_ext_msg_in = 40;
+ABSOLUTE t_ext_msg_data = 48;
+ABSOLUTE t_ext_msg_tag = 56;
+ABSOLUTE t_msg_out = 64;
+ABSOLUTE t_cmd = 72;
+ABSOLUTE t_status = 80;
+ABSOLUTE t_data = 88;
;; interrupt codes
ABSOLUTE int_done = 0xff00;
@@ -55,6 +55,8 @@ ABSOLUTE int_err = 0xffff;
; flags for scratcha0
ABSOLUTE flag_sdp = 0x01 ; got save data pointer
+ABSOLUTE flag_data = 0x02 ; we're in data phase
+ABSOLUTE flag_data_mask = 0xfd ; ~flag_data
ENTRY waitphase;
ENTRY send_msgout;
@@ -145,6 +147,7 @@ status:
JUMP REL(waitphase);
datain:
CALL REL(savedsa);
+ MOVE SCRATCHA0 | flag_data TO SCRATCHA0;
datain_loop:
MOVE FROM t_data, WHEN DATA_IN;
MOVE SCRATCHA1 + 1 TO SCRATCHA1 ; adjust offset
@@ -154,10 +157,12 @@ datain_loop:
MOVE DSA3 + 0 to DSA3 WITH CARRY;
JUMP REL(datain_loop), WHEN DATA_IN;
CALL REL(restoredsa);
+ MOVE SCRATCHA0 & flag_data_mask TO SCRATCHA0;
JUMP REL(waitphase);
dataout:
CALL REL(savedsa);
+ MOVE SCRATCHA0 | flag_data TO SCRATCHA0;
dataout_loop:
MOVE FROM t_data, WHEN DATA_OUT;
MOVE SCRATCHA1 + 1 TO SCRATCHA1 ; adjust offset
@@ -167,6 +172,7 @@ dataout_loop:
MOVE DSA3 + 0 to DSA3 WITH CARRY;
JUMP REL(dataout_loop), WHEN DATA_OUT;
CALL REL(restoredsa);
+ MOVE SCRATCHA0 & flag_data_mask TO SCRATCHA0;
JUMP REL(waitphase);
savedsa: