X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/ebb55b7e5f0b8f31328950ec383b77b208ffbb64..f89517343bf062d299d54408eea2f9387bfefb6d:/lunaix-os/hal/ahci/ahci.c diff --git a/lunaix-os/hal/ahci/ahci.c b/lunaix-os/hal/ahci/ahci.c index 82375e0..5ff1cc2 100644 --- a/lunaix-os/hal/ahci/ahci.c +++ b/lunaix-os/hal/ahci/ahci.c @@ -14,11 +14,10 @@ #include #include -#include +#include #include #include -#include #include #include #include @@ -29,13 +28,13 @@ #define HBA_CLB_SIZE 1024 #define HBA_MY_IE (HBA_PxINTR_DHR | HBA_PxINTR_TFE | HBA_PxINTR_OF) -#define AHCI_DEVCLASS DEVCLASS(DEVIF_PCI, DEVFN_STORAGE, DEV_SATA) +#define AHCI_DEVCLASS DEVCLASS(LUNAIX, STORAGE, SATA) // #define DO_HBA_FULL_RESET LOG_MODULE("AHCI") -DEFINE_LLIST(ahcis); +static DEFINE_LLIST(ahcis); static char sata_ifs[][20] = { "Not detected", "SATA I (1.5Gbps)", @@ -80,10 +79,9 @@ ahci_driver_init(struct ahci_driver_param* param) { struct ahci_driver* ahci_drv = vzalloc(sizeof(*ahci_drv)); struct ahci_hba* hba = &ahci_drv->hba; - ahci_drv->id = param->ahci_iv; - - isrm_set_payload(param->ahci_iv, (ptr_t)&ahcis); + ahci_drv->id = param->irq->vector; + irq_set_payload(param->irq, &ahcis); llist_append(&ahcis, &ahci_drv->ahci_drvs); hba->base = (hba_reg_t*)ioremap(param->mmio_base, param->mmio_size); @@ -255,6 +253,7 @@ hba_bind_vbuf(struct hba_cmdh* cmdh, struct hba_cmdt* cmdt, struct vecbuf* vbuf) do { assert_msg(i < HBA_MAX_PRDTE, "HBA: Too many PRDTEs"); assert_msg(pos->buf.size <= 0x400000U, "HBA: Buffer too big"); + assert_msg(pos->buf.size, "HBA: expect a non-zero buffer size"); cmdt->entries[i++] = (struct hba_prdte){ .data_base = vmm_v2p((ptr_t)pos->buf.buffer), @@ -410,6 +409,7 @@ int ahci_identify_device(struct hba_device* device) { // 用于重新识别设备(比如在热插拔的情况下) + // FIXME this is not right... vfree(device); return ahci_init_device(device->port); }