IRQ 46
Posted: Sat Oct 05, 2013 10:33 am
Hi,
Sending command IDENTIFY to ATA winchester fires IRQ46(in Bochs or real HW) unless it is disabled:
This works with Bochs because no IRQ46 gets fired if nIEN is set in Bochs.
The problem is that on real HW (with a primary master winchester) the interrupt occurs regardless of disabling it.
I read that IRQ46 is the primary channel interrupt.
I even put delays after setting nIEN and only then did I executed the IDENTIFY command. It didn't help.
Reading the status register didn't help either.
As far as I know only interrupts less than 16 can be acknowledged with EOI.
EDIT: I tried selecting the drive before setting nIEN. It didn't work:
Do I have to do something else to disable the interrupt?
Regards,
Rob
Sending command IDENTIFY to ATA winchester fires IRQ46(in Bochs or real HW) unless it is disabled:
Code: Select all
out(0x3F6, 2) // set nIEN primary control port
out(0x376, 2) // set nIEN secondary control port
The problem is that on real HW (with a primary master winchester) the interrupt occurs regardless of disabling it.
I read that IRQ46 is the primary channel interrupt.
I even put delays after setting nIEN and only then did I executed the IDENTIFY command. It didn't help.
Reading the status register didn't help either.
As far as I know only interrupts less than 16 can be acknowledged with EOI.
EDIT: I tried selecting the drive before setting nIEN. It didn't work:
Code: Select all
out(0x1F6, 0xA0 | slavebit<<4)
sleep(1)
out(0x3F6, 2)
Do I have to do something else to disable the interrupt?
Regards,
Rob