X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/c4d08ac5260bb26db10bcfd9dc6fd2db60efebe9..9a7a9c079d0ab0366673beff73ffa710fe3b76c8:/lunaix-os/hal/ahci/ahci.c diff --git a/lunaix-os/hal/ahci/ahci.c b/lunaix-os/hal/ahci/ahci.c index 41ebc86..74ba928 100644 --- a/lunaix-os/hal/ahci/ahci.c +++ b/lunaix-os/hal/ahci/ahci.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -78,9 +79,8 @@ ahci_init() struct pci_device* ahci_dev = pci_get_device_by_class(AHCI_HBA_CLASS); assert_msg(ahci_dev, "AHCI: Not found."); - uintptr_t bar6, size; - size = pci_bar_sizing(ahci_dev, &bar6, 6); - assert_msg(bar6 && PCI_BAR_MMIO(bar6), "AHCI: BAR#6 is not MMIO."); + struct pci_base_addr* bar6 = &ahci_dev->bar[5]; + assert_msg(bar6->type & BAR_TYPE_MMIO, "AHCI: BAR#6 is not MMIO."); pci_reg_t cmd = pci_read_cspace(ahci_dev->cspace_base, PCI_REG_STATUS_CMD); @@ -89,12 +89,11 @@ ahci_init() pci_write_cspace(ahci_dev->cspace_base, PCI_REG_STATUS_CMD, cmd); - pci_setup_msi(ahci_dev, AHCI_HBA_IV); - intr_subscribe(AHCI_HBA_IV, __ahci_hba_isr); + pci_setup_msi(ahci_dev, isrm_ivexalloc(__ahci_hba_isr)); memset(&hba, 0, sizeof(hba)); - hba.base = (hba_reg_t*)ioremap(PCI_BAR_ADDR_MM(bar6), size); + hba.base = (hba_reg_t*)ioremap(bar6->start, bar6->size); #ifdef DO_HBA_FULL_RESET // 重置HBA @@ -174,10 +173,11 @@ ahci_init() continue; } - kprintf(KINFO "sata%d: %s (%s)\n", + kprintf(KINFO "sata%d: %s, sector_size=%dB, sector=%d\n", i, port->device->model, - port->device->serial_num); + port->device->block_size, + (uint32_t)port->device->max_lba); block_mount_disk(port->device); } @@ -193,7 +193,7 @@ __ahci_hba_isr(const isr_param* param) { // TODO: clear the interrupt status // TODO: I/O-operation scheduler should be here - kprintf(KDEBUG "HBA INTR\n"); + // kprintf(KDEBUG "HBA INTR\n"); } void