if (status[1] & AAC_OPT_NEW_COMM) dev->new_comm_interface = dev->a_ops.adapter_send != 0; if (dev->new_comm_interface && (status[2] > dev->base_size)) { iounmap(dev->regs.sa); dev->base_size = status[2]; dprintk((KERN_DEBUG "ioremap(%lx,%d)\n", host->base, status[2])); dev->regs.sa = ioremap(host->base, status[2]); if (dev->regs.sa == NULL) { /* remap failed, go back ... */ dev->new_comm_interface = 0; dev->regs.sa = ioremap(host->base, AAC_MIN_FOOTPRINT_SIZE); if (dev->regs.sa == NULL) { printk(KERN_WARNING "aacraid: unable to map adapter.\n"); return NULL; } } } 
struct aac_dev *aac_init_adapter(struct aac_dev *dev){	u32 status[5];	struct Scsi_Host * host = dev->scsi_host_ptr;	/*	 *	Check the preferred comm settings, defaults from template.	 */	dev->max_fib_size = sizeof(struct hw_fib);	dev->sg_tablesize = host->sg_tablesize = (dev->max_fib_size		- sizeof(struct aac_fibhdr)		- sizeof(struct aac_write) + sizeof(struct sgentry))			/ sizeof(struct sgentry);	dev->raw_io_64 = 0;	if ((!aac_adapter_sync_cmd(dev, GET_ADAPTER_PROPERTIES,		0, 0, 0, 0, 0, 0, status+0, status+1, status+2, NULL, NULL)) &&	 		(status[0] == 0x00000001)) {		if (status[1] & AAC_OPT_NEW_COMM_64)			dev->raw_io_64 = 1;	}	if ((!aac_adapter_sync_cmd(dev, GET_COMM_PREFERRED_SETTINGS,	  0, 0, 0, 0, 0, 0,	  status+0, status+1, status+2, status+3, status+4))	 && (status[0] == 0x00000001)) {		/*		 *	status[1] >> 16		maximum command size in KB		 *	status[1] & 0xFFFF	maximum FIB size		 *	status[2] >> 16		maximum SG elements to driver		 *	status[2] & 0xFFFF	maximum SG elements from driver		 *	status[3] & 0xFFFF	maximum number FIBs outstanding		 */		host->max_sectors = (status[1] >> 16) << 1;		dev->max_fib_size = status[1] & 0xFFFF;		host->sg_tablesize = status[2] >> 16;		dev->sg_tablesize = status[2] & 0xFFFF;		host->can_queue = (status[3] & 0xFFFF) - AAC_NUM_MGT_FIB;		/*		 *	NOTE:		 *	All these overrides are based on a fixed internal		 *	knowledge and understanding of existing adapters,		 *	acbsize should be set with caution.		 */		if (acbsize == 512) {			host->max_sectors = AAC_MAX_32BIT_SGBCOUNT;			dev->max_fib_size = 512;			dev->sg_tablesize = host->sg_tablesize			  = (512 - sizeof(struct aac_fibhdr)			    - sizeof(struct aac_write) + sizeof(struct sgentry))			     / sizeof(struct sgentry);			host->can_queue = AAC_NUM_IO_FIB;		} else if (acbsize == 2048) {			host->max_sectors = 512;			dev->max_fib_size = 2048;			host->sg_tablesize = 65;			dev->sg_tablesize = 81;			host->can_queue = 512 - AAC_NUM_MGT_FIB;		} else if (acbsize == 4096) {			host->max_sectors = 1024;			dev->max_fib_size = 4096;			host->sg_tablesize = 129;			dev->sg_tablesize = 166;			host->can_queue = 256 - AAC_NUM_MGT_FIB;		} else if (acbsize == 8192) {			host->max_sectors = 2048;			dev->max_fib_size = 8192;			host->sg_tablesize = 257;			dev->sg_tablesize = 337;			host->can_queue = 128 - AAC_NUM_MGT_FIB;		} else if (acbsize > 0) {			printk("Illegal acbsize=%d ignored\n", acbsize);		}	}	{		if (numacb > 0) {			if (numacb < host->can_queue)				host->can_queue = numacb;			else				printk("numacb=%d ignored\n", numacb);		}	}	/*	 *	Ok now init the communication subsystem	 */	dev->queues = (struct aac_queue_block *) kmalloc(sizeof(struct aac_queue_block), GFP_KERNEL);	if (dev->queues == NULL) {		printk(KERN_ERR "Error could not allocate comm region.\n");		return NULL;	}	memset(dev->queues, 0, sizeof(struct aac_queue_block));	if (aac_comm_init(dev)<0){		kfree(dev->queues);		return NULL;	}	/*	 *	Initialize the list of fibs	 */	if(fib_setup(dev)<0){		kfree(dev->queues);		return NULL;	}			INIT_LIST_HEAD(&dev->fib_list);	init_completion(&dev->aif_completion);	return dev;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/8e0c5ebde82b08f6d996e11983890fc4cc085fab/comminit.c/clean/drivers/scsi/aacraid/comminit.c