patch-2.4.22 linux-2.4.22/drivers/scsi/aacraid/comminit.c
Next file: linux-2.4.22/drivers/scsi/aacraid/commsup.c
Previous file: linux-2.4.22/drivers/scsi/aacraid/commctrl.c
Back to the patch index
Back to the overall index
- Lines: 111
- Date:
2003-08-25 04:44:42.000000000 -0700
- Orig file:
linux-2.4.21/drivers/scsi/aacraid/comminit.c
- Orig date:
2002-11-28 15:53:14.000000000 -0800
diff -urN linux-2.4.21/drivers/scsi/aacraid/comminit.c linux-2.4.22/drivers/scsi/aacraid/comminit.c
@@ -39,6 +39,7 @@
#include <linux/slab.h>
#include <linux/blk.h>
#include <linux/completion.h>
+#include <linux/mm.h>
#include <asm/semaphore.h>
#include "scsi.h"
#include "hosts.h"
@@ -58,7 +59,6 @@
struct aac_init *init;
dma_addr_t phys;
- /* FIXME: Adaptec add 128 bytes to this value - WHY ?? */
size = fibsize + sizeof(struct aac_init) + commsize + commalign + printfbufsiz;
base = pci_alloc_consistent(dev->pdev, size, &phys);
@@ -74,14 +74,6 @@
dev->init = (struct aac_init *)(base + fibsize);
dev->init_pa = phys + fibsize;
- /*
- * Cache the upper bits of the virtual mapping for 64bit boxes
- * FIXME: this crap should be rewritten
- */
-#if BITS_PER_LONG >= 64
- dev->fib_base_va = ((ulong)base & 0xffffffff00000000);
-#endif
-
init = dev->init;
init->InitStructRevision = cpu_to_le32(ADAPTER_INIT_STRUCT_REVISION);
@@ -92,16 +84,20 @@
* Adapter Fibs are the first thing allocated so that they
* start page aligned
*/
- init->AdapterFibsVirtualAddress = cpu_to_le32((u32)base);
- init->AdapterFibsPhysicalAddress = cpu_to_le32(phys);
+ dev->fib_base_va = (ulong)base;
+
+ /* We submit the physical address for AIF tags to limit to 32 bits */
+ init->AdapterFibsVirtualAddress = cpu_to_le32((u32)phys);
+ init->AdapterFibsPhysicalAddress = cpu_to_le32((u32)phys);
init->AdapterFibsSize = cpu_to_le32(fibsize);
init->AdapterFibAlign = cpu_to_le32(sizeof(struct hw_fib));
+ init->HostPhysMemPages = cpu_to_le32(num_physpages); // number of 4k pages of host physical memory
/*
* Increment the base address by the amount already used
*/
base = base + fibsize + sizeof(struct aac_init);
- phys = phys + fibsize + sizeof(struct aac_init);
+ phys = (dma_addr_t)((ulong)phys + fibsize + sizeof(struct aac_init));
/*
* Align the beginning of Headers to commalign
*/
@@ -111,8 +107,8 @@
/*
* Fill in addresses of the Comm Area Headers and Queues
*/
- *commaddr = (unsigned long *)base;
- init->CommHeaderAddress = cpu_to_le32(phys);
+ *commaddr = base;
+ init->CommHeaderAddress = cpu_to_le32((u32)phys);
/*
* Increment the base address by the size of the CommArea
*/
@@ -140,8 +136,8 @@
q->lock = &q->lockdata;
q->headers.producer = mem;
q->headers.consumer = mem+1;
- *q->headers.producer = cpu_to_le32(qsize);
- *q->headers.consumer = cpu_to_le32(qsize);
+ *(q->headers.producer) = cpu_to_le32(qsize);
+ *(q->headers.consumer) = cpu_to_le32(qsize);
q->entries = qsize;
}
@@ -246,9 +242,9 @@
if (!aac_alloc_comm(dev, (void * *)&headers, size, QUEUE_ALIGNMENT))
return -ENOMEM;
- queues = (struct aac_entry *)((unsigned char *)headers + hdrsize);
+ queues = (struct aac_entry *)(((ulong)headers) + hdrsize);
- /* Adapter to Host normal proirity Command queue */
+ /* Adapter to Host normal priority Command queue */
comm->queue[HostNormCmdQueue].base = queues;
aac_queue_init(dev, &comm->queue[HostNormCmdQueue], headers, HOST_NORM_CMD_ENTRIES);
queues += HOST_NORM_CMD_ENTRIES;
@@ -320,14 +316,18 @@
}
memset(dev->queues, 0, sizeof(struct aac_queue_block));
- if (aac_comm_init(dev)<0)
+ if (aac_comm_init(dev)<0){
+ kfree(dev->queues);
return NULL;
+ }
/*
* Initialize the list of fibs
*/
- if(fib_setup(dev)<0)
+ if(fib_setup(dev)<0){
+ kfree(dev->queues);
return NULL;
-
+ }
+
INIT_LIST_HEAD(&dev->fib_list);
init_completion(&dev->aif_completion);
/*
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)