]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] aacraid 2.5 update
authorMark Haverkamp <markh@osdl.org>
Fri, 6 Dec 2002 00:33:23 +0000 (16:33 -0800)
committerJames Simmons <jsimmons@kozmo.(none)>
Fri, 6 Dec 2002 00:33:23 +0000 (16:33 -0800)
This contains three changes.  The first removes some #defines that don't
seem to be needed anymore.  The second fixes a problem when CONFIG_LBD
is set and sector_t is u64.  The third fixes some compile warnings
setting a char * in the scsi_pointer struct to a dma_addr_t.  I changed
the usage from the ptr element to the dma_handle element.

It compiles without warnings and I have run some tests on aacraid devices
on the osdl lab machines with the CONFIG_LBD option on and off.

drivers/scsi/aacraid/aachba.c
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/linit.c

index c5b1a9352393c976a6efac9289ae8d9c791a8d53..985966e8c78971daba18dc5bd50b0fad806c82e5 100644 (file)
 #include <linux/completion.h>
 #include <asm/semaphore.h>
 #include <asm/uaccess.h>
-#define MAJOR_NR SCSI_DISK0_MAJOR      /* For DEVICE_NR() */
 #include <linux/blk.h>
 #include "scsi.h"
 #include "hosts.h"
 
 #include "aacraid.h"
 
-#warning this is broken
-#define N_SD_MAJORS    8
-#define SD_MAJOR_MASK  (N_SD_MAJORS - 1)
-#define DEVICE_NR(device) (((major(device) & SD_MAJOR_MASK) << (8 - 4)) + (minor(device) >> 4))
-
 /*     SCSI Commands */
 /*     TODO:  dmb - use the ones defined in include/scsi/scsi.h */
 
@@ -567,7 +561,7 @@ static void read_callback(void *context, struct fib * fibptr)
                        scsicmd->use_sg,
                        scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
        else if(scsicmd->request_bufflen)
-               pci_unmap_single(dev->pdev, (dma_addr_t)(unsigned long)scsicmd->SCp.ptr,
+               pci_unmap_single(dev->pdev, scsicmd->SCp.dma_handle,
                                 scsicmd->request_bufflen,
                                 scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
        readreply = (struct aac_read_reply *)fib_data(fibptr);
@@ -611,7 +605,7 @@ static void write_callback(void *context, struct fib * fibptr)
                        scsicmd->use_sg,
                        scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
        else if(scsicmd->request_bufflen)
-               pci_unmap_single(dev->pdev, (dma_addr_t)(unsigned long)scsicmd->SCp.ptr,
+               pci_unmap_single(dev->pdev, scsicmd->SCp.dma_handle,
                                 scsicmd->request_bufflen,
                                 scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
 
@@ -1225,7 +1219,8 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
                        scsicmd->use_sg,
                        scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
        else if(scsicmd->request_bufflen)
-               pci_unmap_single(dev->pdev, (ulong)scsicmd->SCp.ptr, scsicmd->request_bufflen,
+               pci_unmap_single(dev->pdev, scsicmd->SCp.dma_handle,
+                       scsicmd->request_bufflen,
                        scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
 
        /*
@@ -1516,7 +1511,7 @@ static unsigned long aac_build_sg(Scsi_Cmnd* scsicmd, struct sgmap* psg)
                psg->count = cpu_to_le32(1);
                psg->sg[0].addr = cpu_to_le32(addr);
                psg->sg[0].count = cpu_to_le32(scsicmd->request_bufflen);  
-               scsicmd->SCp.ptr = (void *)addr;
+               scsicmd->SCp.dma_handle = addr;
                byte_count = scsicmd->request_bufflen;
        }
        return byte_count;
@@ -1577,7 +1572,7 @@ static unsigned long aac_build_sg64(Scsi_Cmnd* scsicmd, struct sgmap64* psg)
                psg->sg[0].addr[1] = (u32)(le_addr>>32);
                psg->sg[0].addr[0] = (u32)(le_addr & 0xffffffff);
                psg->sg[0].count = cpu_to_le32(scsicmd->request_bufflen);  
-               scsicmd->SCp.ptr = (void *)addr;
+               scsicmd->SCp.dma_handle = addr;
                byte_count = scsicmd->request_bufflen;
        }
        return byte_count;
index bff55b7e1f8b44b739c70703209f8c7dd5f6c771..f5495ded63065223f11c99b6cbbeebe000e75231 100644 (file)
@@ -1369,6 +1369,21 @@ static inline struct hw_fib *addr2fib(u32 addr)
        return (struct hw_fib *)addr;
 }
 
+/**
+ *     Convert capacity to cylinders
+ *     accounting for the fact capacity could be a 64 bit value
+ *
+ */
+static inline u32 cap_to_cyls(sector_t capacity, u32 divisor)
+{
+#ifdef CONFIG_LBD
+       do_div(capacity, divisor);
+#else
+       capacity /= divisor;
+#endif
+       return (u32) capacity;
+}
+
 const char *aac_driverinfo(struct Scsi_Host *);
 struct fib *fib_alloc(struct aac_dev *dev);
 int fib_setup(struct aac_dev *dev);
index 249320545ff92af41d3fd3eade1620ecbc1b906a..242b38f9dfe0d74f4499f22432a306980a502d32 100644 (file)
@@ -443,7 +443,8 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev,
                param->sectors = 32;
        }
 
-       param->cylinders = capacity/(param->heads * param->sectors);
+       param->cylinders = cap_to_cyls(capacity,
+                       (param->heads * param->sectors));
 
        /*
         *      Read the partition table block
@@ -497,7 +498,8 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev,
                        end_sec = first->end_sector & 0x3f;
                }
 
-               param->cylinders = capacity / (param->heads * param->sectors);
+               param->cylinders = cap_to_cyls(capacity,
+                               (param->heads * param->sectors));
 
                if(num < 4 && end_sec == param->sectors)
                {