Commit 78abb0ee authored by Mark Haverkamp's avatar Mark Haverkamp Committed by James Simmons

[PATCH] aacraid 2.5 update

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.
parent 7ba78799
...@@ -33,18 +33,12 @@ ...@@ -33,18 +33,12 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#define MAJOR_NR SCSI_DISK0_MAJOR /* For DEVICE_NR() */
#include <linux/blk.h> #include <linux/blk.h>
#include "scsi.h" #include "scsi.h"
#include "hosts.h" #include "hosts.h"
#include "aacraid.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 */ /* SCSI Commands */
/* TODO: dmb - use the ones defined in include/scsi/scsi.h */ /* TODO: dmb - use the ones defined in include/scsi/scsi.h */
...@@ -567,7 +561,7 @@ static void read_callback(void *context, struct fib * fibptr) ...@@ -567,7 +561,7 @@ static void read_callback(void *context, struct fib * fibptr)
scsicmd->use_sg, scsicmd->use_sg,
scsi_to_pci_dma_dir(scsicmd->sc_data_direction)); scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
else if(scsicmd->request_bufflen) 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, scsicmd->request_bufflen,
scsi_to_pci_dma_dir(scsicmd->sc_data_direction)); scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
readreply = (struct aac_read_reply *)fib_data(fibptr); readreply = (struct aac_read_reply *)fib_data(fibptr);
...@@ -611,7 +605,7 @@ static void write_callback(void *context, struct fib * fibptr) ...@@ -611,7 +605,7 @@ static void write_callback(void *context, struct fib * fibptr)
scsicmd->use_sg, scsicmd->use_sg,
scsi_to_pci_dma_dir(scsicmd->sc_data_direction)); scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
else if(scsicmd->request_bufflen) 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, scsicmd->request_bufflen,
scsi_to_pci_dma_dir(scsicmd->sc_data_direction)); scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
...@@ -1225,7 +1219,8 @@ static void aac_srb_callback(void *context, struct fib * fibptr) ...@@ -1225,7 +1219,8 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
scsicmd->use_sg, scsicmd->use_sg,
scsi_to_pci_dma_dir(scsicmd->sc_data_direction)); scsi_to_pci_dma_dir(scsicmd->sc_data_direction));
else if(scsicmd->request_bufflen) 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)); 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) ...@@ -1516,7 +1511,7 @@ static unsigned long aac_build_sg(Scsi_Cmnd* scsicmd, struct sgmap* psg)
psg->count = cpu_to_le32(1); psg->count = cpu_to_le32(1);
psg->sg[0].addr = cpu_to_le32(addr); psg->sg[0].addr = cpu_to_le32(addr);
psg->sg[0].count = cpu_to_le32(scsicmd->request_bufflen); 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; byte_count = scsicmd->request_bufflen;
} }
return byte_count; return byte_count;
...@@ -1577,7 +1572,7 @@ static unsigned long aac_build_sg64(Scsi_Cmnd* scsicmd, struct sgmap64* psg) ...@@ -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[1] = (u32)(le_addr>>32);
psg->sg[0].addr[0] = (u32)(le_addr & 0xffffffff); psg->sg[0].addr[0] = (u32)(le_addr & 0xffffffff);
psg->sg[0].count = cpu_to_le32(scsicmd->request_bufflen); 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; byte_count = scsicmd->request_bufflen;
} }
return byte_count; return byte_count;
......
...@@ -1369,6 +1369,21 @@ static inline struct hw_fib *addr2fib(u32 addr) ...@@ -1369,6 +1369,21 @@ static inline struct hw_fib *addr2fib(u32 addr)
return (struct hw_fib *)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 *); const char *aac_driverinfo(struct Scsi_Host *);
struct fib *fib_alloc(struct aac_dev *dev); struct fib *fib_alloc(struct aac_dev *dev);
int fib_setup(struct aac_dev *dev); int fib_setup(struct aac_dev *dev);
......
...@@ -443,7 +443,8 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev, ...@@ -443,7 +443,8 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev,
param->sectors = 32; 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 * Read the partition table block
...@@ -497,7 +498,8 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev, ...@@ -497,7 +498,8 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev,
end_sec = first->end_sector & 0x3f; 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) if(num < 4 && end_sec == param->sectors)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment