> Has anyone looked at FreeBSD for fixes after the routine has been copied?
I tried, but they seem to have partially re-factored the code.
Initially, the fix was #ifdef __powerpc__.
It looks like they are doing the magic (additional 4-byte read on the status
register) only for what they call the ATA_K2 chip: ata_serverworks_ch_attach()
will, only in that case, set ch->hw.status = ata_serverworks_status (the
interrupt handler doing the magic read) plus set ATA_DMA_BEFORE_CMD plus
two other special treatments I don't understand: two ATA_OUTL at the
beginning of the block commented as
Set SICR registers to turn off waiting for a status message
before sending FIS. Values obtained from the Darwin driver.
and setting a ATA_STATUS_IS_LONG flag (whatever that is) commented as
The status register must be read as a long to fill the other
registers.
Can anyone make sense of that?