2023-03-07 12:56

working
Emanuele HF 3 months ago
parent cdb2a32e48
commit 135adda5b7

@ -38,10 +38,9 @@ hf-os-strip: $(BUILD_DIR)/hf-os-strip.bin
run: hf-os
qemu-system-$(OS_ARCH) \
-no-reboot \
-m size=128M \
-drive id=disk,file=res/hd.bin,format=raw,if=none \
-device piix3-ide,id=ide \
-device ide-hd,drive=disk,bus=ide.0 \
-drive file=res/hd.bin,format=raw,media=disk \
-rtc base=localtime,clock=host \
-kernel $(BUILD_DIR)/hf-os.bin \
-append "$(VM_CMDLINE)"

@ -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);

Loading…
Cancel
Save