Merge branch 'master' into vfs-dev
authorMinep <zelong56@gmail.com>
Tue, 9 Aug 2022 14:29:17 +0000 (15:29 +0100)
committerMinep <zelong56@gmail.com>
Tue, 9 Aug 2022 14:29:17 +0000 (15:29 +0100)
1  2 
lunaix-os/hal/ahci/ahci.c
lunaix-os/hal/pci.c
lunaix-os/includes/hal/ahci/hba.h

Simple merge
index 50fe80d6c109fa7ffa8e04121b7b7d65f0393cf0,8c397b031b85f739b2331aeb2b512cb3931756b9..d6267682475ff74fafdffc7e23eb0796c5caad6b
@@@ -181,13 -181,22 +181,22 @@@ pci_setup_msi(struct pci_device* device
  
      pci_write_cspace(
        device->cspace_base, PCI_MSI_ADDR(device->msi_loc), msi_addr);
-     pci_write_cspace(
-       device->cspace_base, PCI_MSI_DATA(device->msi_loc), msi_data & 0xffff);
  
      pci_reg_t reg1 = pci_read_cspace(device->cspace_base, device->msi_loc);
+     pci_reg_t msg_ctl = reg1 >> 16;
+     int offset = !!(msg_ctl & MSI_CAP_64BIT) * 4;
+     pci_write_cspace(device->cspace_base,
+                      PCI_MSI_DATA(device->msi_loc, offset),
+                      msi_data & 0xffff);
+     if ((msg_ctl & MSI_CAP_MASK)) {
+         pci_write_cspace(
+           device->cspace_base, PCI_MSI_MASK(device->msi_loc, offset), 0);
+     }
  
      // manipulate the MSI_CTRL to allow device using MSI to request service.
 -    reg1 = ((((reg1 >> 16) & ~0x70) | MSI_CAP_ENABLE) << 16) | (reg1 & 0xffff);
 +    reg1 = (reg1 & 0xff8fffff) | 0x10000;
      pci_write_cspace(device->cspace_base, device->msi_loc, reg1);
  }
  
Simple merge