Skip to content

Commit

Permalink
[SCSI] aic7xxx: move to dma_get_required_mask() and correct 39 bit as…
Browse files Browse the repository at this point in the history
…sumptions

This patch moves aic7xxx over to the dma_get_required_mask() API and
dumps its open coded memory check.

It also appears from this bug:

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=167049

That 39 bit addressing doesn't work on older cards.  I surmise that the
AHC_LARGE_SCBS flag is the one that marks cards capable of using 39 bit
addressing, so I also folded that check into the code.

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
James Bottomley authored and James Bottomley committed Sep 13, 2005
1 parent 154fb61 commit a89f29f
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 14 deletions.
9 changes: 0 additions & 9 deletions drivers/scsi/aic7xxx/aic7xxx_osm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1109,15 +1109,6 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *templa
return (0);
}

uint64_t
ahc_linux_get_memsize(void)
{
struct sysinfo si;

si_meminfo(&si);
return ((uint64_t)si.totalram << PAGE_SHIFT);
}

/*
* Place the SCSI bus into a known state by either resetting it,
* or forcing transfer negotiations on the next command to any
Expand Down
2 changes: 0 additions & 2 deletions drivers/scsi/aic7xxx/aic7xxx_osm.h
Original file line number Diff line number Diff line change
Expand Up @@ -494,8 +494,6 @@ ahc_insb(struct ahc_softc * ahc, long port, uint8_t *array, int count)
int ahc_linux_register_host(struct ahc_softc *,
struct scsi_host_template *);

uint64_t ahc_linux_get_memsize(void);

/*************************** Pretty Printing **********************************/
struct info_str {
char *buffer;
Expand Down
8 changes: 5 additions & 3 deletions drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
struct ahc_pci_identity *entry;
char *name;
int error;
struct device *dev = &pdev->dev;

pci = pdev;
entry = ahc_find_pci_device(pci);
Expand Down Expand Up @@ -209,11 +210,12 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_set_master(pdev);

if (sizeof(dma_addr_t) > 4
&& ahc_linux_get_memsize() > 0x80000000
&& pci_set_dma_mask(pdev, mask_39bit) == 0) {
&& ahc->features & AHC_LARGE_SCBS
&& dma_set_mask(dev, mask_39bit) == 0
&& dma_get_required_mask(dev) > DMA_32BIT_MASK) {
ahc->flags |= AHC_39BIT_ADDRESSING;
} else {
if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
if (dma_set_mask(dev, DMA_32BIT_MASK)) {
printk(KERN_WARNING "aic7xxx: No suitable DMA available.\n");
return (-ENODEV);
}
Expand Down

0 comments on commit a89f29f

Please sign in to comment.