Chuang, Alex
2011-05-26 23:01:56 UTC
Hi,
I add one config 'IDE_TO_AHCI' in 'seabios\src\Kconfig' and modify
'seabios\src\ata.c'. Please help me to review and check-in.
This 'IDE_TO_AHCI' function can let SeaBIOS handle AHCI controller as
IDE controller when 'ATA' enable, and also let Windows OS to load AHCI
inbox driver or chipset vender's AHCI driver. In other words, it means
that SATA Hard Disk ran as IDE mode in SeaBIOS but AHCI mode in Windows
OS.
Best regards,
Alex
In 'seabios\src\Kconfig':
menu "Hardware support"
config ATA
depends on DRIVES
bool "ATA controllers"
default y
help
Support for IDE disk code.
config ATA_DMA
depends on ATA
bool "ATA DMA"
default n
help
Detect and try to use ATA bus mastering DMA controllers.
config ATA_PIO32
depends on ATA
bool "ATA 32bit PIO"
default n
help
Use 32bit PIO accesses on ATA (minor optimization on PCI
transfers).
config IDE_TO_AHCI
<- New add.
depends on ATA
<- New add.
bool "IDE to AHCI support"
<- New add.
default n
<- New add.
help
<- New add.
Handle AHCI controller as ATA controller when POST. <- New
add.
config AHCI
depends on DRIVES
bool "AHCI controllers"
default n
help
Support for AHCI disk code.
In 'seabios\src\ata.c':
static void
ata_init(void)
{
// Scan PCI bus for ATA adapters
int count=0, pcicount=0;
int bdf, max;
foreachpci(bdf, max) {
pcicount++;
if (pci_config_readw(bdf, PCI_CLASS_DEVICE) !=
PCI_CLASS_STORAGE_IDE)
if ((! CONFIG_IDE_TO_AHCI) ||
(pci_config_readw(bdf, PCI_CLASS_DEVICE) != 0x0106)) <- New add.
continue;
u8 pciirq = pci_config_readb(bdf, PCI_INTERRUPT_LINE);
u8 prog_if = pci_config_readb(bdf, PCI_CLASS_PROG);
if (CONFIG_IDE_TO_AHCI && (pci_config_readw(bdf,
PCI_CLASS_DEVICE) == 0x0106)) <- New add.
prog_if = 0x8F;
<- New add.
int master = 0;
I add one config 'IDE_TO_AHCI' in 'seabios\src\Kconfig' and modify
'seabios\src\ata.c'. Please help me to review and check-in.
This 'IDE_TO_AHCI' function can let SeaBIOS handle AHCI controller as
IDE controller when 'ATA' enable, and also let Windows OS to load AHCI
inbox driver or chipset vender's AHCI driver. In other words, it means
that SATA Hard Disk ran as IDE mode in SeaBIOS but AHCI mode in Windows
OS.
Best regards,
Alex
In 'seabios\src\Kconfig':
menu "Hardware support"
config ATA
depends on DRIVES
bool "ATA controllers"
default y
help
Support for IDE disk code.
config ATA_DMA
depends on ATA
bool "ATA DMA"
default n
help
Detect and try to use ATA bus mastering DMA controllers.
config ATA_PIO32
depends on ATA
bool "ATA 32bit PIO"
default n
help
Use 32bit PIO accesses on ATA (minor optimization on PCI
transfers).
config IDE_TO_AHCI
<- New add.
depends on ATA
<- New add.
bool "IDE to AHCI support"
<- New add.
default n
<- New add.
help
<- New add.
Handle AHCI controller as ATA controller when POST. <- New
add.
config AHCI
depends on DRIVES
bool "AHCI controllers"
default n
help
Support for AHCI disk code.
In 'seabios\src\ata.c':
static void
ata_init(void)
{
// Scan PCI bus for ATA adapters
int count=0, pcicount=0;
int bdf, max;
foreachpci(bdf, max) {
pcicount++;
if (pci_config_readw(bdf, PCI_CLASS_DEVICE) !=
PCI_CLASS_STORAGE_IDE)
if ((! CONFIG_IDE_TO_AHCI) ||
(pci_config_readw(bdf, PCI_CLASS_DEVICE) != 0x0106)) <- New add.
continue;
u8 pciirq = pci_config_readb(bdf, PCI_INTERRUPT_LINE);
u8 prog_if = pci_config_readb(bdf, PCI_CLASS_PROG);
if (CONFIG_IDE_TO_AHCI && (pci_config_readw(bdf,
PCI_CLASS_DEVICE) == 0x0106)) <- New add.
prog_if = 0x8F;
<- New add.
int master = 0;