diff options
Diffstat (limited to 'drivers/scsi/aic7xxx/aic7xxx_osm_pci.c')
-rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_osm_pci.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c index 0d44a6907dd..cb30d9c1153 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c +++ b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c | |||
@@ -143,6 +143,9 @@ ahc_linux_pci_dev_remove(struct pci_dev *pdev) | |||
143 | struct ahc_softc *ahc = pci_get_drvdata(pdev); | 143 | struct ahc_softc *ahc = pci_get_drvdata(pdev); |
144 | u_long s; | 144 | u_long s; |
145 | 145 | ||
146 | if (ahc->platform_data && ahc->platform_data->host) | ||
147 | scsi_remove_host(ahc->platform_data->host); | ||
148 | |||
146 | ahc_lock(ahc, &s); | 149 | ahc_lock(ahc, &s); |
147 | ahc_intr_enable(ahc, FALSE); | 150 | ahc_intr_enable(ahc, FALSE); |
148 | ahc_unlock(ahc, &s); | 151 | ahc_unlock(ahc, &s); |
@@ -180,6 +183,7 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
180 | struct ahc_pci_identity *entry; | 183 | struct ahc_pci_identity *entry; |
181 | char *name; | 184 | char *name; |
182 | int error; | 185 | int error; |
186 | struct device *dev = &pdev->dev; | ||
183 | 187 | ||
184 | pci = pdev; | 188 | pci = pdev; |
185 | entry = ahc_find_pci_device(pci); | 189 | entry = ahc_find_pci_device(pci); |
@@ -209,11 +213,12 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
209 | pci_set_master(pdev); | 213 | pci_set_master(pdev); |
210 | 214 | ||
211 | if (sizeof(dma_addr_t) > 4 | 215 | if (sizeof(dma_addr_t) > 4 |
212 | && ahc_linux_get_memsize() > 0x80000000 | 216 | && ahc->features & AHC_LARGE_SCBS |
213 | && pci_set_dma_mask(pdev, mask_39bit) == 0) { | 217 | && dma_set_mask(dev, mask_39bit) == 0 |
218 | && dma_get_required_mask(dev) > DMA_32BIT_MASK) { | ||
214 | ahc->flags |= AHC_39BIT_ADDRESSING; | 219 | ahc->flags |= AHC_39BIT_ADDRESSING; |
215 | } else { | 220 | } else { |
216 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { | 221 | if (dma_set_mask(dev, DMA_32BIT_MASK)) { |
217 | printk(KERN_WARNING "aic7xxx: No suitable DMA available.\n"); | 222 | printk(KERN_WARNING "aic7xxx: No suitable DMA available.\n"); |
218 | return (-ENODEV); | 223 | return (-ENODEV); |
219 | } | 224 | } |