summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorJustin T. Gibbs <gibbs@FreeBSD.org>1997-04-04 04:35:55 +0000
committerJustin T. Gibbs <gibbs@FreeBSD.org>1997-04-04 04:35:55 +0000
commit463d56f4bcc7372bc01e2a1d710b93ebb10a314a (patch)
tree16f218ae3688ac44683e8a2a879a1a23bae6c5ee /sys/dev
parent4bc69d1149abb226afd53b9f5d2a9292de88aaa6 (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/aic7xxx/Makefile4
-rw-r--r--sys/dev/aic7xxx/aic7xxx.seq31
2 files changed, 21 insertions, 14 deletions
diff --git a/sys/dev/aic7xxx/Makefile b/sys/dev/aic7xxx/Makefile
index 2a142b0a5885..38b66bf436ba 100644
--- a/sys/dev/aic7xxx/Makefile
+++ b/sys/dev/aic7xxx/Makefile
@@ -1,4 +1,4 @@
-# $Id$
+# $Id: Makefile,v 1.1 1997/03/16 07:08:10 gibbs Exp $
PROG= aic7xxx_asm
@@ -14,5 +14,7 @@ SRCS= ${GENSRCS} ${CSRCS}
CLEANFILES+= ${GENSRCS} ${GENHDRS} y.output
DPADD+= ${LIBL}
LDADD+= -ll
+
+CFLAGS+= -I.
NOMAN= noman
.include <bsd.prog.mk>
diff --git a/sys/dev/aic7xxx/aic7xxx.seq b/sys/dev/aic7xxx/aic7xxx.seq
index 572586588dd9..ddfe35fe7be3 100644
--- a/sys/dev/aic7xxx/aic7xxx.seq
+++ b/sys/dev/aic7xxx/aic7xxx.seq
@@ -757,8 +757,15 @@ mesgin_identify:
or SAVED_TCL,A; /* SAVED_TCL should be complete now */
mov SAVED_TCL call index_untagged_scb;
mov ARG_1, SINDIR;
- /* XXX Directly index in the non paging case */
+.if ( SCB_PAGING )
cmp ARG_1,SCB_LIST_NULL jne use_findSCB;
+.else
+ cmp ARG_1,SCB_LIST_NULL je snoop_tag;
+ /* Directly index the SCB */
+ mov SCBPTR,ARG_1;
+ test SCB_CONTROL,DISCONNECTED jz not_found;
+ jmp setup_SCB;
+.endif
/*
* Here we "snoop" the bus looking for a SIMPLE QUEUE TAG message.
* If we get one, we use the tag returned to find the proper
@@ -767,6 +774,7 @@ mesgin_identify:
* If we're not using SCB paging, we can use the tag as the direct
* index to the SCB.
*/
+snoop_tag:
mov NONE,SCSIDATL; /* ACK Identify MSG */
snoop_tag_loop:
test SSTAT1,REQINIT jz snoop_tag_loop;
@@ -786,8 +794,13 @@ get_tag:
jc not_found;
.if ! ( SCB_PAGING )
- jmp index_by_tag;
-.endif
+index_by_tag:
+ mov SCBPTR,ARG_1;
+ mov A, SAVED_TCL;
+ cmp SCB_TCL,A jne not_found;
+ test SCB_CONTROL,TAG_ENB jz not_found;
+ test SCB_CONTROL,DISCONNECTED jz not_found;
+.else
/*
* Ensure that the SCB the tag points to is for an SCB transaction
* to the reconnecting target.
@@ -795,17 +808,11 @@ get_tag:
use_findSCB:
mov ALLZEROS call findSCB; /* Have to search */
cmp SINDEX, SCB_LIST_NULL je not_found;
+.endif
setup_SCB:
and SCB_CONTROL,~DISCONNECTED;
or SEQ_FLAGS,IDENTIFY_SEEN; /* make note of IDENTIFY */
jmp mesgin_done;
-index_by_tag:
- mov SCBPTR,ARG_1;
- mov A, SAVED_TCL;
- cmp SCB_TCL,A jne not_found;
- test SCB_CONTROL,TAG_ENB jz not_found;
- test SCB_CONTROL,DISCONNECTED jz not_found;
- jmp setup_SCB;
not_found:
mvi INTSTAT, NO_MATCH;
@@ -952,6 +959,7 @@ assert:
mvi INTSTAT,NO_IDENT ret; /* no - tell the kernel */
+.if ( SCB_PAGING )
/*
* Locate a disconnected SCB either by SAVED_TCL (ARG_1 is SCB_LIST_NULL)
* or by the SCBIDn ARG_1. The search begins at the SCB index passed in
@@ -972,17 +980,14 @@ findSCB_loop:
* one we want. If we aren't paging or the SCB we dma down has the
* abort flag set, return not found.
*/
-.if ( SCB_PAGING )
mov ALLZEROS call get_free_or_disc_scb;
mvi DMAPARAMS, HDMAEN|DIRECTION|FIFORESET;
mov ARG_1 call dma_scb;
test SCB_CONTROL, ABORT_SCB jz return;
-.endif
find_error:
mvi SINDEX, SCB_LIST_NULL ret;
foundSCB:
test SCB_CONTROL, ABORT_SCB jnz find_error;
-.if ( SCB_PAGING )
rem_scb_from_disc_list:
/* Remove this SCB from the disconnection list */
cmp SCB_NEXT,SCB_LIST_NULL je unlink_prev;