Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=19966769f9fc1968dcf5bffec2e53f7f40100872
Commit:     19966769f9fc1968dcf5bffec2e53f7f40100872
Parent:     55048021177eee956af88333ec4565919c8567e4
Author:     Hannes Reinecke <[EMAIL PROTECTED]>
AuthorDate: Wed Feb 7 09:47:44 2007 +0100
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Sat Feb 10 12:58:06 2007 -0600

    [SCSI] aic79xx: use dma_get_required_mask()
    
    As originally noted by Frederic Temporelli, the aic79xx supports 64
    bit addressing, but the initialization code of the driver is wrong: it
    tests the available memory size instead of testing the maximum
    available memory address.
    
    This patch uses the correct dma_get_required_mask() macros to
    determine the correct addressing method.
    
    Signed-off-by: Hannes Reinecke <[EMAIL PROTECTED]>
    Cc: Xavier Bru <[EMAIL PROTECTED]>
    CC: Frederic Temporelli <[EMAIL PROTECTED]>
    
    cosmetic fixes
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/aic7xxx/aic79xx_osm.c     |    9 ---------
 drivers/scsi/aic7xxx/aic79xx_osm.h     |    2 --
 drivers/scsi/aic7xxx/aic79xx_osm_pci.c |   19 +++++++++----------
 3 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c 
b/drivers/scsi/aic7xxx/aic79xx_osm.c
index 9bfcca5..c7fe478 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c
@@ -1126,15 +1126,6 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct 
scsi_host_template *templa
        return 0;
 }
 
-uint64_t
-ahd_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
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.h 
b/drivers/scsi/aic7xxx/aic79xx_osm.h
index 3a67fc5..147c83c 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.h
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.h
@@ -496,8 +496,6 @@ ahd_insb(struct ahd_softc * ahd, long port, uint8_t *array, 
int count)
 int            ahd_linux_register_host(struct ahd_softc *,
                                        struct scsi_host_template *);
 
-uint64_t       ahd_linux_get_memsize(void);
-
 /*************************** Pretty Printing 
**********************************/
 struct info_str {
        char *buffer;
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c 
b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
index 1a3ab6a..c62ce41 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
@@ -132,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);
@@ -161,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);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to