Merge git://oss.sgi.com:8090/xfs/xfs-2.6
[linux-drm-fsl-dcu.git] / drivers / scsi / aic7xxx / aic79xx_osm_pci.c
index 50a41eda580eb4daebac5be164fa8db2f8c8ebc2..c62ce41f2793750627130b0367547e3cf6fab736 100644 (file)
@@ -62,6 +62,7 @@ static struct pci_device_id ahd_linux_pci_id_table[] = {
        /* aic7901 based controllers */
        ID(ID_AHA_29320A),
        ID(ID_AHA_29320ALP),
+       ID(ID_AHA_29320LPE),
        /* aic7902 based controllers */
        ID(ID_AHA_29320),
        ID(ID_AHA_29320B),
@@ -82,7 +83,7 @@ static struct pci_device_id ahd_linux_pci_id_table[] = {
 
 MODULE_DEVICE_TABLE(pci, ahd_linux_pci_id_table);
 
-struct pci_driver aic79xx_pci_driver = {
+static struct pci_driver aic79xx_pci_driver = {
        .name           = "aic79xx",
        .probe          = ahd_linux_pci_dev_probe,
        .remove         = ahd_linux_pci_dev_remove,
@@ -131,6 +132,7 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct           ahd_pci_identity *entry;
        char            *name;
        int              error;
+       struct device   *dev = &pdev->dev;
 
        pci = pdev;
        entry = ahd_find_pci_device(pci);
@@ -160,20 +162,18 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        pci_set_master(pdev);
 
        if (sizeof(dma_addr_t) > 4) {
-               uint64_t   memsize;
-               const uint64_t mask_39bit = 0x7FFFFFFFFFULL;
+               const u64 required_mask = dma_get_required_mask(dev);
 
-               memsize = ahd_linux_get_memsize();
-
-               if (memsize >= 0x8000000000ULL
-                && pci_set_dma_mask(pdev, DMA_64BIT_MASK) == 0) {
+               if (required_mask > DMA_39BIT_MASK &&
+                   dma_set_mask(dev, DMA_64BIT_MASK) == 0)
                        ahd->flags |= AHD_64BIT_ADDRESSING;
-               } else if (memsize > 0x80000000
-                       && pci_set_dma_mask(pdev, mask_39bit) == 0) {
+               else if (required_mask > DMA_32BIT_MASK &&
+                        dma_set_mask(dev, DMA_39BIT_MASK) == 0)
                        ahd->flags |= AHD_39BIT_ADDRESSING;
-               }
+               else
+                       dma_set_mask(dev, DMA_32BIT_MASK);
        } else {
-               pci_set_dma_mask(pdev, DMA_32BIT_MASK);
+               dma_set_mask(dev, DMA_32BIT_MASK);
        }
        ahd->dev_softc = pci;
        error = ahd_pci_config(ahd, entry);
@@ -198,7 +198,7 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 int
 ahd_linux_pci_init(void)
 {
-       return (pci_module_init(&aic79xx_pci_driver));
+       return pci_register_driver(&aic79xx_pci_driver);
 }
 
 void