|
|
|
@ -81,17 +81,36 @@ void ata_init(uint8_t bus, uint8_t dev, uint8_t func, pci_config_t *p_config) {
|
|
|
|
|
a_config.dev = dev;
|
|
|
|
|
a_config.func = func;
|
|
|
|
|
|
|
|
|
|
a_config.base_pri_io = p_config->bar[0] & 0xfffffff0;
|
|
|
|
|
a_config.base_pri_ctrl = p_config->bar[1] & 0xfffffff0;
|
|
|
|
|
a_config.base_sec_io = p_config->bar[2] & 0xfffffff0;
|
|
|
|
|
a_config.base_sec_ctrl = p_config->bar[3] & 0xfffffff0;
|
|
|
|
|
a_config.base_busmaster = p_config->bar[4] & 0xfffffff0;
|
|
|
|
|
|
|
|
|
|
PRINTK("ata: a_config.base_pri_io = %08x", a_config.base_pri_io);
|
|
|
|
|
PRINTK("ata: a_config.base_pri_ctrl = %08x", a_config.base_pri_ctrl);
|
|
|
|
|
PRINTK("ata: a_config.base_sec_io = %08x", a_config.base_sec_io);
|
|
|
|
|
PRINTK("ata: a_config.base_sec_ctrl = %08x", a_config.base_sec_ctrl);
|
|
|
|
|
PRINTK("ata: a_config.base_busmaster = %08x", a_config.base_busmaster);
|
|
|
|
|
if (p_config->bar[0] != 0 && !(p_config->bar[0] & 1)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
a_config.base_pri_io = p_config->bar[0] & 0xfffffffc;
|
|
|
|
|
|
|
|
|
|
if (p_config->bar[1] != 0 && !(p_config->bar[1] & 1)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
a_config.base_pri_ctrl = p_config->bar[1] & 0xfffffffc;
|
|
|
|
|
|
|
|
|
|
if (p_config->bar[2] != 0 && !(p_config->bar[2] & 1)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
a_config.base_sec_io = p_config->bar[2] & 0xfffffffc;
|
|
|
|
|
|
|
|
|
|
if (p_config->bar[3] != 0 && !(p_config->bar[3] & 1)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
a_config.base_sec_ctrl = p_config->bar[3] & 0xfffffffc;
|
|
|
|
|
|
|
|
|
|
if (p_config->bar[4] != 0 && !(p_config->bar[4] & 1)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
a_config.base_busmaster = p_config->bar[4] & 0xfffffffc;
|
|
|
|
|
|
|
|
|
|
PRINTK("ata: a_config.base_pri_io = %#08x", a_config.base_pri_io);
|
|
|
|
|
PRINTK("ata: a_config.base_pri_ctrl = %#08x", a_config.base_pri_ctrl);
|
|
|
|
|
PRINTK("ata: a_config.base_sec_io = %#08x", a_config.base_sec_io);
|
|
|
|
|
PRINTK("ata: a_config.base_sec_ctrl = %#08x", a_config.base_sec_ctrl);
|
|
|
|
|
PRINTK("ata: a_config.base_busmaster = %#08x", a_config.base_busmaster);
|
|
|
|
|
|
|
|
|
|
PRINTK("ata: detecting devices");
|
|
|
|
|
ata_pio_detect(0);
|
|
|
|
|