Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Apr 1996 16:23:28 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        hackers@FreeBSD.ORG, jagnew@vtaix.cc.vt.edu
Cc:        hardware@FreeBSD.ORG
Subject:   Re: EIDE controler
Message-ID:  <199604050623.QAA21988@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>I have the CMD640b chip as my eide controller!  There is a bug in this and a few
>other chips.  You can read in detail about it at 
>http://www.yahoo.com/pci/faq.html

>it explains about a bug with true multi tasking OS's.  The chips that are
>bad is RZ-1000, and the CMD640(x) chips, and most likely the SMC set!

The above URL doesn't exist, but I read the Intel web page about the
rz1000 bug.  FreeBSD doesn't have the bug because FreeBSD masks IDE and
floppy interrupts while transferring the IDE sector buffer.

In fact, it masks all disk interrupts (those in bio_imask).  This is
partly from good programming practice (don't allow yourself to be
interrupted) and partly from being too stupid to handle disk interrupts
independently.

The bug has very little to do with multi-tasking.  It has to do with
reentrant interrupt handlers.  I guess that very few IDE interrupt
handlers allow themself to be interrupted, but many systems allow floppy
interrupts while IDE interrupts are being handled.  These systems get
bitten by a another wart in the IDE design (if they start IDE and floppy
i/o's concurrently): the digital input registers for the first IDE and
floppy controllers have the same address (0x3F7), and reading this
address in the floppy interrupt handler sometimes clobber IDE input.
Anyway, FreeBSD is too stupid to use this register.  It should be used
by the floppy driver to determine if the media has changed.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199604050623.QAA21988>