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 sgmap)) / sizeof(struct sgmap); 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 sgmap)) / sizeof(struct sgmap); 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); } }  
struct aac_dev *aac_init_adapter(struct aac_dev *dev){	/*	 *	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;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7c00ffa314bf0fb0e23858bbebad33b48b6abbb9/comminit.c/buggy/drivers/scsi/aacraid/comminit.c