This message is from the T13 list server.

Note: In these steps "zero" means either 00000000H or 00000001H, one
is zero in memory space and the other is zero in I/O space. Some
controllers use 00000000H instead of the more "correct" value
00000001H.

1) Scan system's PCI config space looking for ATA host controllers -
they probably have 0101H, 0180H or some other 01xxH value in the
class code - avoid SCSI controllers that also have 01xxH class code
values.

2) For each ATA controller found:

2a) Is it enabled? If no, blue screen.

2b) If any BARx (x=0 to 4) is ffffffffh, blue screen.

2c) Is it in legacy or native mode?

2d) If legacy mode and any BARx (x=0 to 3) not zero (see note), 
    blue screen.

2e) If native mode and any BARx (x=0 to 3) is zero (see note), 
    blue screen.

2f) If native mode and any BARx (x=0 to 3) not in I/O space, 
    blue screen.

2g) If BAR4 zero (see note), blue screen.

2h) If BAR4 not in I/O space, blue screen.

3a) if legacy mode  
       Pri Cmd block I/O address is 01f0H
       Pri Ctrl Block I/O address is 03F6H
    else 
       Pri Cmd block I/O address is (BAR0&0x0000fffeH)
       Pri Ctrl block I/O address is ((BAR1&0x0000fffeH)+2)
    Pri BMIDE regs I/O adress is (BAR4&0x0000fffeH)

3b) If legacy mode 
       Sec Cmd block I/O address is 0170H
       Sec Ctrl block I/O address is 0376H
    else
       Sec Cmd block I/O address is (BAR2&0x0000fffeH)
       Sec Cmd block I/O address is ((BAR3&0x0000fffeH)+2)
    Sec BMIDE regs I/O address is ((BAR4&0x0000fffeH)+8)

4) If you must use interrupts, and you must if you want to use DMA
commands, then have fun figuring that out (PIC/APIC?, what is IRQ to
INT mapping? etc?).

Enjoy.

Hale


*** Hale Landis *** www.ata-atapi.com ***



Reply via email to