diff options
| author | Justin T. Gibbs <gibbs@FreeBSD.org> | 1997-04-04 04:35:55 +0000 |
|---|---|---|
| committer | Justin T. Gibbs <gibbs@FreeBSD.org> | 1997-04-04 04:35:55 +0000 |
| commit | 463d56f4bcc7372bc01e2a1d710b93ebb10a314a (patch) | |
| tree | 16f218ae3688ac44683e8a2a879a1a23bae6c5ee /sys/dev | |
| parent | 4bc69d1149abb226afd53b9f5d2a9292de88aaa6 (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/aic7xxx/Makefile | 4 | ||||
| -rw-r--r-- | sys/dev/aic7xxx/aic7xxx.seq | 31 |
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; |
