mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-23 11:18:54 +00:00
Fix a race condition in p_mesgout* and inb* code that could allow a
phasemiss to sneak by without detection. This should fix the Wide/Narrow boot problems that have been reported since this bug caused the driver ignore a narrow target rejecting wide negotiation.
This commit is contained in:
parent
187f8e98f5
commit
070d32b1a9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=15951
@ -39,7 +39,7 @@
|
|||||||
*
|
*
|
||||||
*-M************************************************************************/
|
*-M************************************************************************/
|
||||||
|
|
||||||
VERSION AIC7XXX_SEQ_VER "$Id: aic7xxx.seq,v 1.35 1996/05/21 18:32:22 gibbs Exp $"
|
VERSION AIC7XXX_SEQ_VER "$Id: aic7xxx.seq,v 1.36 1996/05/23 15:01:47 gibbs Exp $"
|
||||||
|
|
||||||
#include "../../dev/aic7xxx/aic7xxx_reg.h"
|
#include "../../dev/aic7xxx/aic7xxx_reg.h"
|
||||||
|
|
||||||
@ -495,11 +495,11 @@ p_mesgout_start:
|
|||||||
* a MESSAGE REJECT.
|
* a MESSAGE REJECT.
|
||||||
*/
|
*/
|
||||||
p_mesgout_loop:
|
p_mesgout_loop:
|
||||||
test SSTAT1,PHASEMIS jnz p_mesgout_phasemis
|
|
||||||
test SSTAT0,SPIORDY jz p_mesgout_loop
|
test SSTAT0,SPIORDY jz p_mesgout_loop
|
||||||
cmp DINDEX,1 jne p_mesgout_outb /* last byte? */
|
cmp DINDEX,1 jne p_mesgout_outb /* last byte? */
|
||||||
mvi CLRSINT1,CLRATNO /* drop ATN */
|
mvi CLRSINT1,CLRATNO /* drop ATN */
|
||||||
p_mesgout_outb:
|
p_mesgout_outb:
|
||||||
|
test SSTAT1,PHASEMIS jnz p_mesgout_phasemis
|
||||||
dec DINDEX
|
dec DINDEX
|
||||||
or CLRSINT0, CLRSPIORDY
|
or CLRSINT0, CLRSPIORDY
|
||||||
mov SCSIDATL,SINDIR
|
mov SCSIDATL,SINDIR
|
||||||
@ -862,8 +862,8 @@ inb_next:
|
|||||||
or CLRSINT0, CLRSPIORDY
|
or CLRSINT0, CLRSPIORDY
|
||||||
mov NONE,SCSIDATL /*dummy read from latch to ACK*/
|
mov NONE,SCSIDATL /*dummy read from latch to ACK*/
|
||||||
inb_next_wait:
|
inb_next_wait:
|
||||||
test SSTAT1,PHASEMIS jnz mesgin_phasemis
|
|
||||||
test SSTAT0,SPIORDY jz inb_next_wait /* wait for next byte */
|
test SSTAT0,SPIORDY jz inb_next_wait /* wait for next byte */
|
||||||
|
test SSTAT1,PHASEMIS jnz mesgin_phasemis
|
||||||
inb_first:
|
inb_first:
|
||||||
mov DINDEX,SINDEX
|
mov DINDEX,SINDEX
|
||||||
mov DINDIR,SCSIBUSL ret /*read byte directly from bus*/
|
mov DINDIR,SCSIBUSL ret /*read byte directly from bus*/
|
||||||
|
Loading…
Reference in New Issue
Block a user